Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/scripts/OffsetMapping.material
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/scripts/OffsetMapping.material	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/scripts/OffsetMapping.material	(revision 1092)
@@ -0,0 +1,127 @@
+// Bump map with Parallax offset vertex program, support for this is required 
+vertex_program Examples/OffsetMappingVP cg 
+{ 
+   source OffsetMapping.cg 
+   entry_point main_vp 
+   profiles vs_1_1 arbvp1 
+} 
+
+// Bump map with parallax fragment program 
+fragment_program Examples/OffsetMappingFP cg
+{ 
+   source OffsetMapping.cg
+   entry_point main_fp
+   profiles ps_2_0 arbfp1
+} 
+
+// Bump map with parallax fragment program 
+fragment_program Examples/OffsetMappingPS asm 
+{ 
+   source OffsetMapping_specular.asm 
+   // sorry, only for ps_1_4 and above:) 
+   syntax ps_1_4 
+} 
+
+
+material Examples/OffsetMapping/Specular 
+{ 
+
+  // This is the preferred technique which uses both vertex and 
+   // fragment programs, supports coloured lights 
+   technique 
+   { 
+      // do the lighting  and bump mapping with parallax pass 
+      // NB we don't do decal texture here because this is repeated per light 
+      pass 
+      { 
+       
+         // Vertex program reference 
+         vertex_program_ref Examples/OffsetMappingVP 
+         { 
+            param_named_auto lightPosition light_position_object_space 0 
+            param_named_auto eyePosition camera_position_object_space 
+            param_named_auto worldViewProj worldviewproj_matrix 
+         } 
+
+         // Fragment program 
+         fragment_program_ref Examples/OffsetMappingFP
+         { 
+            param_named_auto lightDiffuse light_diffuse_colour 0 
+            param_named_auto lightSpecular light_specular_colour 0 
+            // Parallax Height scale and bias 
+            param_named scaleBias float4 0.04 -0.02 1 0 
+         } 
+          
+         // Normal + height(alpha) map 
+         texture_unit 
+         { 
+            texture rockwall_NH.tga
+            tex_coord_set 0 
+         } 
+
+         // Base diffuse texture map 
+         texture_unit 
+         { 
+            texture rockwall.tga
+            tex_coord_set 1 
+         } 
+      } 
+   } 
+
+
+   // This is the preferred technique which uses both vertex and 
+   // fragment programs, supports coloured lights 
+   technique 
+   { 
+      // do the lighting  and bump mapping with parallax pass 
+      // NB we don't do decal texture here because this is repeated per light 
+      pass 
+      { 
+       
+         // Vertex program reference 
+         vertex_program_ref Examples/OffsetMappingVP 
+         { 
+            param_named_auto lightPosition light_position_object_space 0 
+            param_named_auto eyePosition camera_position_object_space 
+            param_named_auto worldViewProj worldviewproj_matrix 
+         } 
+
+         // Fragment program 
+         fragment_program_ref Examples/OffsetMappingPS 
+         { 
+            param_indexed_auto 0 light_diffuse_colour 0 
+            param_indexed_auto 1 light_specular_colour 0 
+            // Parallax Height scale and bias 
+            param_indexed 2 float4 0.04 -0.02 1 0 
+         } 
+          
+         // Normal + height(alpha) map 
+         texture_unit 
+         { 
+            texture rockwall_NH.tga
+            tex_coord_set 0 
+         } 
+
+         // Base diffuse texture map 
+         texture_unit 
+         { 
+            texture rockwall.tga
+            tex_coord_set 1 
+         } 
+      } 
+   } 
+   
+   // Simple no-shader fallback
+   technique 
+   { 
+      pass 
+      { 
+         // Base diffuse texture map 
+         texture_unit 
+         { 
+            texture rockwall.tga
+         } 
+	  }
+   }
+
+}
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/scripts/dwarf.material
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/scripts/dwarf.material	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/scripts/dwarf.material	(revision 1092)
@@ -0,0 +1,60 @@
+
+material Material0
+{
+	technique
+	{
+		pass
+		{
+			ambient 0.2 0.2 0.2 1
+			diffuse 0.8 0.8 0.8 1
+
+			cull_hardware none
+			cull_software none
+
+			texture_unit
+			{
+				texture axe.jpg
+			}
+		}
+	}
+}
+
+material Material1
+{
+	technique
+	{
+		pass
+		{
+			ambient 0.2 0.2 0.2 1
+			diffuse 0.8 0.8 0.8 1
+
+			cull_hardware none
+			cull_software none
+
+			texture_unit
+			{
+				texture dwarf.jpg
+			}
+		}
+	}
+}
+
+material Material2
+{
+	technique
+	{
+		pass
+		{
+			ambient 0.2 0.2 0.2 1
+			diffuse 0.8 0.8 0.8 1
+
+			cull_hardware none
+			cull_software none
+
+			texture_unit
+			{
+				texture dwarf2.jpg
+			}
+		}
+	}
+}
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/scripts/Example-DynTex.material
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/scripts/Example-DynTex.material	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/scripts/Example-DynTex.material	(revision 1092)
@@ -0,0 +1,86 @@
+
+material Examples/DynaTest
+{
+	technique
+	{
+		pass
+		{
+			texture_unit
+			{
+				texture DynaTex 2d
+			}
+			depth_write off
+			scene_blend alpha_blend
+			lighting off
+		}
+	}
+}
+
+
+material Examples/DynaTest2
+{
+	technique
+	{
+		pass
+		{
+			texture_unit
+			{
+				texture DynaTex 2d
+			}
+			diffuse 0.8 0.8 0.8
+			specular 0.7 0.7 0.7 40.0
+			ambient 0.5 0.5 0.5
+		}
+	}
+}
+
+material Examples/DynaTest3
+{
+	technique
+	{
+		pass
+		{
+			texture_unit
+			{
+				texture DynaTex 2d
+			}
+			diffuse 0.2 0.8 0.8
+			specular 0.4 0.7 0.7 30.0
+			ambient 0.2 0.5 1.0
+			depth_write off
+			scene_blend alpha_blend
+		}
+	}
+}
+
+material Examples/DynaTest4
+{
+	technique
+	{
+		pass
+		{
+			texture_unit
+			{
+				texture DynaTex 2d
+			}
+			diffuse 0.8 0.8 0.8
+			specular 0.7 0.7 0.4 20.0
+			ambient 1.0 0.5 0.2
+		}
+	}
+}
+
+material Examples/VTDarkStuff
+{
+	technique
+	{
+		pass
+		{
+			diffuse 0.0 0.0 0.0
+			ambient 0.1 0.1 0.15
+			cull_hardware none
+			lighting on
+		}
+		
+	}
+}
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/scripts/Examples.program
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/scripts/Examples.program	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/scripts/Examples.program	(revision 1092)
@@ -0,0 +1,39 @@
+//---------------------------------------------------
+// This file includes a number of basic GPU programs
+// for use in many materials. 
+//---------------------------------------------------
+
+
+// A really basic ambient pass program, support for one texture coodinate set
+vertex_program Ogre/BasicVertexPrograms/AmbientOneTexture cg
+{
+	source Example_Basic.cg
+	entry_point ambientOneTexture_vp
+	profiles vs_1_1 arbvp1
+}
+
+// Same as below, but for use when rendering texture shadows
+vertex_program Ogre/HardwareSkinningOneWeightShadowCaster cg
+{
+	source Example_Basic.cg
+	entry_point hardwareSkinningOneWeightCaster_vp
+	profiles vs_1_1 arbvp1
+	includes_skeletal_animation true
+}
+// Basic hardware skinning using one indexed weight per vertex
+vertex_program Ogre/HardwareSkinningOneWeight cg
+{
+   source Example_Basic.cg
+   entry_point hardwareSkinningOneWeight_vp
+   profiles vs_1_1 arbvp1
+   includes_skeletal_animation true   
+}
+// Basic hardware skinning using four indexed weights per vertex
+vertex_program Ogre/HardwareSkinningFourWeights cg
+{
+   source Example_Basic.cg
+   entry_point hardwareSkinningFourWeights_vp
+   profiles vs_1_1 arbvp1
+   includes_skeletal_animation true
+}
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/scripts/Example-Water.material
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/scripts/Example-Water.material	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/scripts/Example-Water.material	(revision 1092)
@@ -0,0 +1,178 @@
+
+material Examples/Water0
+{
+	technique
+	{
+		pass
+		{
+			scene_blend colour_blend
+
+			texture_unit
+			{
+				texture Water01.jpg
+				env_map spherical
+				scroll_anim 0.01 0.01
+			}
+		}
+	}
+}
+material Examples/Water1
+{
+	technique
+	{
+		pass
+		{
+			scene_blend colour_blend
+
+			texture_unit
+			{
+				texture BeachStones.jpg
+				scale 0.25 0.25
+			}
+
+			texture_unit
+			{
+				texture Water01.jpg
+				env_map spherical
+				scroll_anim 0.01 0.01
+			}
+		}
+	}
+}
+material Examples/Water2
+{
+	technique
+	{
+		pass
+		{
+			scene_blend colour_blend
+
+			texture_unit
+			{
+				texture Water01.jpg
+				scroll_anim 0.01 0.01
+			}
+		}
+	}
+}
+material Examples/Water3
+{
+	technique
+	{
+		pass
+		{
+			scene_blend colour_blend
+
+			texture_unit
+			{
+				texture Water02.jpg
+				env_map spherical
+				scroll_anim 0.01 0.01
+				rotate_anim 0.03
+			}
+		}
+	}
+}
+material Examples/Water4
+{
+	technique
+	{
+		pass
+		{
+			cull_hardware none
+			cull_software none
+
+			texture_unit
+			{
+				texture Water02.jpg
+				env_map spherical
+				scroll_anim 0.01 0.01
+			}
+		}
+	}
+}
+material Examples/Water5
+{
+	technique
+	{
+		pass
+		{
+			cull_hardware none
+			cull_software none
+
+			texture_unit
+			{
+				texture BeachStones.jpg
+				scale 0.25 0.25
+			}
+
+			texture_unit
+			{
+				texture Water01.jpg
+				env_map spherical
+				scroll_anim 0.01 0.01
+			}
+		}
+	}
+}
+material Examples/Water6
+{
+	technique
+	{
+		pass
+		{
+			lighting off
+
+			texture_unit
+			{
+				cubic_texture cubescene.jpg combinedUVW
+				tex_address_mode clamp
+				env_map cubic_reflection
+			}
+		}
+	}
+}
+material Examples/Water7
+{
+	technique
+	{
+		pass
+		{
+			cull_hardware none
+			cull_software none
+
+			texture_unit
+			{
+				texture BeachStones.jpg
+				scale 0.25 0.25
+			}
+
+			texture_unit
+			{
+				cubic_texture cubescene.jpg combinedUVW
+				tex_address_mode clamp
+				env_map cubic_reflection
+			}
+		}
+	}
+}
+material Examples/Water8
+{
+	technique
+	{
+		pass
+		{
+			lighting off
+			scene_blend add
+			cull_hardware none
+			cull_software none
+
+			texture_unit
+			{
+				cubic_texture cubescene.jpg combinedUVW
+				tex_address_mode clamp
+				env_map cubic_reflection
+			}
+		}
+	}
+}
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/scripts/Example.material
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/scripts/Example.material	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/scripts/Example.material	(revision 1092)
@@ -0,0 +1,765 @@
+
+material Examples/EnvMappedRustySteel
+{
+	technique
+	{
+		pass
+		{
+
+			texture_unit
+			{
+				texture RustySteel.jpg
+			}
+
+			texture_unit
+			{
+				texture spheremap.png
+				colour_op_ex add src_texture src_current
+				colour_op_multipass_fallback one one
+				env_map spherical
+			}
+		}
+	}
+}
+material Examples/OgreLogo
+{
+	technique
+	{
+		pass
+		{
+			ambient 0.8 0.8 0.8
+
+			texture_unit
+			{
+				texture ogrelogo.png
+			}
+		}
+	}
+}
+material Examples/DarkMaterial
+{
+	technique
+	{
+		pass
+		{
+			ambient 0.1 0.1 0.1
+
+			texture_unit
+			{
+				texture BeachStones.jpg
+			}
+		}
+	}
+}
+material Examples/SpaceSkyBox
+{
+	technique
+	{
+		pass
+		{
+			lighting off
+			depth_write off
+
+			texture_unit
+			{
+				cubic_texture stevecube.jpg separateUV
+				tex_address_mode clamp
+			}
+		}
+	}
+}
+material Examples/SceneSkyBox1
+{
+	technique
+	{
+		pass
+		{
+			lighting off
+			depth_write off
+
+			texture_unit
+			{
+				cubic_texture cubemap_fr.jpg cubemap_bk.jpg cubemap_lf.jpg cubemap_rt.jpg cubemap_up.jpg cubemap_dn.jpg separateUV
+				tex_address_mode clamp
+			}
+		}
+	}
+}
+material Examples/SceneCubeMap1
+{
+	technique
+	{
+		pass
+		{
+			lighting off
+
+			texture_unit
+			{
+				cubic_texture cubemap.jpg combinedUVW
+				tex_address_mode clamp
+				env_map cubic_reflection
+			}
+		}
+	}
+}
+material Examples/SceneSkyBox2
+{
+	technique
+	{
+		pass
+		{
+			lighting off
+			depth_write off
+
+			texture_unit
+			{
+				cubic_texture cubescene_fr.jpg cubescene_bk.jpg cubescene_lf.jpg cubescene_rt.jpg cubescene_up.jpg cubescene_dn.jpg separateUV
+				tex_address_mode clamp
+			}
+		}
+	}
+}
+material Examples/SceneCubeMap2
+{
+	technique
+	{
+		pass
+		{
+			lighting off
+
+			texture_unit
+			{
+				cubic_texture cubescene.jpg combinedUVW
+				tex_address_mode clamp
+				env_map cubic_reflection
+			}
+		}
+	}
+}
+
+material Examples/CloudyNoonSkyBox
+{
+	technique
+	{
+		pass
+		{
+			lighting off
+			depth_write off
+
+			texture_unit
+			{
+				cubic_texture cloudy_noon.jpg separateUV
+				tex_address_mode clamp
+			}
+		}
+	}
+}
+
+material Examples/StormySkyBox
+{
+	technique
+	{
+		pass
+		{
+			lighting off
+			depth_write off
+
+			texture_unit
+			{
+				cubic_texture stormy.jpg separateUV
+				tex_address_mode clamp
+			}
+		}
+	}
+}
+
+material Examples/MorningSkyBox
+{
+	technique
+	{
+		pass
+		{
+			lighting off
+			depth_write off
+
+			texture_unit
+			{
+				cubic_texture morning.jpg separateUV
+				tex_address_mode clamp
+			}
+		}
+	}
+}
+
+material Examples/EveningSkyBox
+{
+	technique
+	{
+		pass
+		{
+			lighting off
+			depth_write off
+
+			texture_unit
+			{
+				cubic_texture evening.jpg separateUV
+				tex_address_mode clamp
+			}
+		}
+	}
+}
+
+material Examples/CloudySky
+{
+	technique
+	{
+		pass
+		{
+			lighting off
+			depth_write off
+
+			texture_unit
+			{
+				texture clouds.jpg
+				scroll_anim 0.15 0
+			}
+		}
+	}
+}
+material Examples/RustySteel
+{
+	technique
+	{
+		pass
+		{
+
+			texture_unit
+			{
+				texture RustySteel.jpg
+			}
+		}
+	}
+}
+material Examples/Chrome
+{
+	technique
+	{
+		pass
+		{
+
+			texture_unit
+			{
+				texture Chrome.jpg
+				env_map spherical
+			}
+		}
+	}
+}
+material Examples/SpaceSkyPlane
+{
+	technique
+	{
+		pass
+		{
+			lighting off
+			depth_write off
+			fog_override true none
+
+			texture_unit
+			{
+				texture spacesky.jpg
+			}
+		}
+	}
+}
+material Examples/TextureEffect1
+{
+	technique
+	{
+		pass
+		{
+			ambient 0.75 0.75 0.75
+			cull_hardware none
+			cull_software none
+
+			texture_unit
+			{
+				texture BumpyMetal.jpg
+				rotate_anim 0.2
+				wave_xform scale_x sine 1 0.1 0 5
+				wave_xform scale_y sine 0.5 0.2 0.5 3
+			}
+		}
+	}
+}
+material Examples/TextureEffect2
+{
+	technique
+	{
+		pass
+		{
+
+			texture_unit
+			{
+				texture Water02.jpg
+				scroll_anim 0.5 0
+			}
+		}
+	}
+}
+material Examples/TextureEffect3
+{
+	technique
+	{
+		pass
+		{
+			ambient 0.7 0.7 0.7
+			cull_hardware none
+			cull_software none
+
+			texture_unit
+			{
+				texture Water01.jpg
+				scroll_anim -0.25 0.1
+			}
+
+			texture_unit
+			{
+				texture Water01.jpg
+				colour_op_ex add src_texture src_current
+				colour_op_multipass_fallback one one
+				scroll_anim -0.1 0.25
+			}
+		}
+	}
+}
+material Examples/TextureEffect4
+{
+	technique
+	{
+		pass
+		{
+			ambient 0.3 0.3 0.3
+			scene_blend colour_blend
+			cull_hardware none
+			cull_software none
+
+			texture_unit
+			{
+				texture Water02.jpg
+				scroll_anim 0.01 0.01
+			}
+		}
+	}
+}
+material Examples/BumpyMetal
+{
+	technique
+	{
+		pass
+		{
+			ambient 0.75 0.75 0.75
+			cull_hardware none
+			cull_software none
+
+			texture_unit
+			{
+				texture BumpyMetal.jpg
+			}
+		}
+	}
+}
+material Examples/TransparentTest
+{
+	technique
+	{
+		pass
+		{
+			ambient 0.2 0.2 0.2
+			scene_blend add
+			depth_write off
+
+			texture_unit
+			{
+				texture Water01.jpg
+				scroll_anim 0.25 0
+			}
+
+			texture_unit
+			{
+				texture Water01.jpg
+				wave_xform scroll_y sine 0 0.1 0 0.5
+			}
+		}
+	}
+}
+material Examples/Flare
+{
+	technique
+	{
+		pass
+		{
+			lighting off
+			scene_blend add
+			depth_write off
+
+			texture_unit
+			{
+				texture flare.png
+			}
+		}
+	}
+}
+material Examples/Flare2
+{
+	technique
+	{
+		pass
+		{
+			lighting off
+			scene_blend add
+			depth_write off
+
+			texture_unit
+			{
+				texture flaretrail.png
+			}
+		}
+	}
+}
+
+material Examples/Droplet
+{
+	technique
+	{
+		pass
+		{
+			scene_blend colour_blend
+			depth_write off
+
+			texture_unit
+			{
+				texture basic_droplet.png
+			}
+		}
+	}
+}
+material Examples/Hilite/Yellow
+{
+	technique
+	{
+		pass
+		{
+
+			texture_unit
+			{
+				texture dkyellow.png
+			}
+		}
+	}
+}
+material Examples/Rocky
+{
+	technique
+	{
+		pass
+		{
+			ambient 0.2 0.2 0.2
+
+			texture_unit
+			{
+				texture egyptrockyfull.jpg
+			}
+		}
+	}
+}
+material Examples/10PointBlock
+{
+	technique
+	{
+		pass
+		{
+
+			texture_unit
+			{
+				texture 10points.png
+			}
+		}
+	}
+}
+material Material__25
+{
+	technique
+	{
+		pass
+		{
+
+			texture_unit
+			{
+				texture texmap2.jpg
+			}
+		}
+	}
+}
+material 2 - Default
+{
+	technique
+	{
+		pass
+		{
+
+			texture_unit
+			{
+				texture MtlPlat2.jpg
+			}
+		}
+	}
+}
+material Material #8
+{
+	technique
+	{
+		pass
+		{
+
+			texture_unit
+			{
+				texture BODY.jpg
+			}
+		}
+	}
+}
+material Material #3
+{
+	technique
+	{
+		pass
+		{
+
+			texture_unit
+			{
+				texture HEAD4.jpg
+			}
+		}
+	}
+}
+material Material #9
+{
+	technique
+	{
+		pass
+		{
+
+			texture_unit
+			{
+				texture LEGS.jpg
+			}
+		}
+	}
+}
+
+material Examples/Fish
+{
+	technique
+	{
+		pass
+		{
+			texture_unit
+			{
+				texture steelhead.png
+			}
+		}
+	}
+}
+material Examples/Ninja
+{
+	technique
+	{
+		pass
+		{
+			cull_hardware none
+			cull_software none
+		
+			texture_unit
+			{
+				texture nskingr.jpg
+			}
+		}
+	}
+}
+material Examples/Ninja2
+{
+	technique
+	{
+		pass
+		{
+		
+			cull_hardware none
+			cull_software none
+
+			texture_unit
+			{
+				texture nskinwh.jpg
+			}
+		}
+	}
+}
+
+material Examples/Trunk
+{
+	technique
+	{
+		pass
+		{
+			cull_hardware none
+			cull_software none
+		
+			texture_unit
+			{
+				texture bark04_r.png
+			}
+		}
+	}
+}
+
+material Examples/Robot
+{
+	// Hardware skinning technique
+	technique
+	{
+		pass
+		{
+			vertex_program_ref Ogre/HardwareSkinningOneWeight
+			{
+				param_named_auto worldMatrix3x4Array[0] world_matrix_array_3x4
+				param_named_auto viewProjectionMatrix viewproj_matrix
+				param_named_auto lightPos[0] light_position 0
+				param_named_auto lightPos[1] light_position 1
+				param_named_auto lightDiffuseColour[0] light_diffuse_colour 0
+				param_named_auto lightDiffuseColour[1] light_diffuse_colour 1
+				param_named_auto ambient ambient_light_colour
+			
+			}
+			// alternate shadow caster program
+			shadow_caster_vertex_program_ref Ogre/HardwareSkinningOneWeightShadowCaster
+			{
+				param_named_auto worldMatrix3x4Array[0] world_matrix_array_3x4
+				param_named_auto viewProjectionMatrix viewproj_matrix
+				param_named_auto ambient ambient_light_colour
+			
+			}
+
+			texture_unit
+			{
+				texture r2skin.jpg
+			}
+		}
+	}
+
+	// Software blending technique
+	technique
+	{
+		pass
+		{
+
+			texture_unit
+			{
+				texture r2skin.jpg
+			}
+		}
+	}
+}
+
+material Examples/GrassFloor
+{
+	technique
+	{
+		pass
+		{
+			texture_unit
+			{
+				texture grass_1024.jpg
+			}
+		}
+	}
+}
+
+vertex_program Examples/GrassWaverVp cg
+{
+	source Grass.cg
+	entry_point grass_vp
+	profiles vs_1_1 arbvp1
+}
+
+material Examples/GrassBlades
+{
+	// Vertex program waving grass
+    technique
+    {
+        pass
+        {
+			vertex_program_ref Examples/GrassWaverVp
+			{
+				param_named_auto worldViewProj worldviewproj_matrix
+				param_named_auto ambient ambient_light_colour
+				param_named_auto objSpaceLight light_position_object_space 0
+				param_named_auto lightColour light_diffuse_colour 0
+				param_named_auto offset custom 999
+			}
+			alpha_rejection greater 150 
+			scene_blend alpha_blend
+		    cull_hardware none
+            cull_software none
+            texture_unit
+            {
+                texture gras_02.png 
+            }
+        }
+    }
+
+	// Non-vertex program technique (no waving)
+	technique
+    {
+        pass
+        {
+			alpha_rejection greater 150 
+			scene_blend alpha_blend
+		    cull_hardware none
+            cull_software none
+            texture_unit
+            {
+                texture gras_02.png 
+            }
+        }
+    }
+}
+
+material Examples/Rockwall
+{
+	technique
+	{
+		pass
+		{
+			texture_unit
+			{
+				texture rockwall.tga
+			}
+		}
+	}
+}
+
+material TestTerrainMaterial
+{
+	technique
+	{
+		pass
+		{
+
+			texture_unit
+			{
+				texture terrain_texture.jpg
+			}
+
+		}
+	}
+}
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/scripts/Ogre.material
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/scripts/Ogre.material	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/scripts/Ogre.material	(revision 1092)
@@ -0,0 +1,119 @@
+
+material Ogre/Earring
+{
+	technique
+	{
+		pass
+		{
+			ambient 0.5 0.5 0
+			diffuse 1 1 0
+
+			texture_unit
+			{
+				texture spheremap.png
+				colour_op_ex add src_texture src_current
+				colour_op_multipass_fallback one one
+				env_map spherical
+			}
+		}
+	}
+}
+material Ogre/Skin
+{
+	technique
+	{
+		pass
+		{
+			ambient 0.7 0.7 0.7
+			cull_hardware none
+
+			texture_unit
+			{
+				texture GreenSkin.jpg
+				tex_address_mode mirror
+			}
+		}
+	}
+}
+material Ogre/Tusks
+{
+	technique
+	{
+		pass
+		{
+			ambient 0.5 0.5 0.4
+			diffuse 1 1 0.8
+
+			texture_unit
+			{
+				texture dirt01.jpg
+				colour_op_ex add src_texture src_current
+				colour_op_multipass_fallback one one
+			}
+		}
+	}
+}
+material Ogre/Eyes
+{
+	technique
+	{
+		pass
+		{
+
+			texture_unit
+			{
+				texture WeirdEye.png
+			}
+		}
+	}
+}
+material Cursor/default
+{
+	technique
+	{
+		pass
+		{
+			scene_blend alpha_blend
+
+			texture_unit
+			{
+				texture cursor.png
+				tex_address_mode clamp
+			}
+		}
+	}
+}
+material Core/StatsBlockBorder/Down
+{
+	technique
+	{
+		pass
+		{
+			lighting off
+			scene_blend alpha_blend
+			depth_check off
+
+			texture_unit
+			{
+				texture ogreborder.png
+			}
+		}
+	}
+}
+material Core/StatsBlockBorder/Up
+{
+	technique
+	{
+		pass
+		{
+			lighting off
+			scene_blend alpha_blend
+			depth_check off
+
+			texture_unit
+			{
+				texture ogreborderUp.png
+			}
+		}
+	}
+}
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/scripts/RZR-002.material
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/scripts/RZR-002.material	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/scripts/RZR-002.material	(revision 1092)
@@ -0,0 +1,15 @@
+
+material RZR-002
+{
+	technique
+	{
+		pass
+		{
+
+			texture_unit
+			{
+				texture RZR-002.png
+			}
+		}
+	}
+}
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/scripts/smoke.material
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/scripts/smoke.material	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/scripts/smoke.material	(revision 1092)
@@ -0,0 +1,19 @@
+
+material Examples/Smoke
+{
+	technique
+	{
+		pass
+		{
+			lighting off
+			scene_blend alpha_blend
+			depth_write off
+
+			texture_unit
+			{
+				texture smoke.png
+				tex_address_mode clamp
+			}
+		}
+	}
+}
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/scripts/Examples-Advanced.material
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/scripts/Examples-Advanced.material	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/scripts/Examples-Advanced.material	(revision 1092)
@@ -0,0 +1,1131 @@
+// -------------------------------
+// Cel Shading Section
+// -------------------------------
+vertex_program Ogre/CelShadingVP cg
+{
+	source Example_CelShading.cg
+	entry_point main_vp
+	profiles vs_1_1 arbvp1
+
+	default_params
+	{
+		param_named_auto lightPosition light_position_object_space 0
+		param_named_auto eyePosition camera_position_object_space
+		param_named_auto worldViewProj worldviewproj_matrix
+		param_named shininess float 10 
+	}
+}
+
+fragment_program Ogre/CelShadingFP cg
+{
+	source Example_CelShading.cg
+	entry_point main_fp
+	profiles ps_1_1 arbfp1 fp20
+}
+
+
+material Examples/CelShading
+{
+	technique
+	{
+		pass
+		{
+			vertex_program_ref Ogre/CelShadingVP
+			{
+				// map shininess from custom renderable param 1
+				param_named_auto shininess custom 1
+			}
+			fragment_program_ref Ogre/CelShadingFP
+			{
+				// map diffuse from custom renderable param 2
+				param_named_auto diffuse custom 2
+				// map specular from custom renderable param 2
+				param_named_auto specular custom 3
+			}
+			texture_unit
+			{
+				texture cel_shading_diffuse.png 1d
+				tex_address_mode clamp
+				filtering none
+			}
+			texture_unit
+			{
+				texture cel_shading_specular.png 1d
+				tex_address_mode clamp
+				filtering none
+				tex_coord_set 1
+			}
+			texture_unit
+			{
+				texture cel_shading_edge.png 1d
+				tex_address_mode clamp
+				filtering none
+				tex_coord_set 2
+			}
+		}
+	}
+	
+}
+
+
+
+//------------------------
+// Bump mapping section
+//------------------------
+
+// Bump map vertex program, support for this is required
+vertex_program Examples/BumpMapVP cg
+{
+	source Example_BumpMapping.cg
+	entry_point main_vp
+	profiles vs_1_1 arbvp1
+}
+
+// Bump map fragment program, support for this is optional
+fragment_program Examples/BumpMapFP cg
+{
+	source Example_BumpMapping.cg
+	entry_point main_fp
+	profiles ps_1_1 arbfp1 fp20
+}
+
+// Bump map with specular vertex program, support for this is required
+vertex_program Examples/BumpMapVPSpecular cg
+{
+	source Example_BumpMapping.cg
+	entry_point specular_vp
+	profiles vs_1_1 arbvp1
+}
+
+// Bump map fragment program, support for this is optional
+fragment_program Examples/BumpMapFPSpecular cg
+{
+	source Example_BumpMapping.cg
+	entry_point specular_fp
+	profiles ps_1_1 arbfp1 fp20
+}
+
+// Single light material, less passes (one pass on a 4-unit card)
+material Examples/BumpMapping/SingleLight
+{
+	// Preferred technique, uses vertex and fragment programs
+	// to support a single coloured light
+	technique
+	{
+		pass
+		{
+			// base colours, not needed for rendering, but as information
+			// to lighting pass categorisation routine
+			ambient 0 0 0 
+			// Vertex program reference
+			vertex_program_ref Examples/BumpMapVP
+			{
+				param_named_auto lightPosition light_position_object_space 0
+				param_named_auto worldViewProj worldviewproj_matrix
+			}
+
+			// Fragment program
+			fragment_program_ref Examples/BumpMapFP
+			{
+				param_named_auto lightDiffuse light_diffuse_colour 0 
+			}
+			
+			// Base bump map
+			texture_unit
+			{
+				texture NMBumpsOut.png
+				colour_op replace
+			}
+			// Normalisation cube map
+			texture_unit
+			{
+				cubic_texture nm.png combinedUVW
+				tex_coord_set 1
+				tex_address_mode clamp
+			}
+			// Decal
+			texture_unit
+			{
+				texture RustySteel.jpg
+			}
+		}
+	}
+	// Fallback technique, uses vertex program but only fixed-function
+	// fragment shading, which does not support coloured light
+	technique
+	{
+		pass
+		{
+			// base colours, not needed for rendering, but as information
+			// to lighting pass categorisation routine
+			ambient 0 0 0 
+			// Vertex program reference
+			vertex_program_ref Examples/BumpMapVP
+			{
+				param_named_auto lightPosition light_position_object_space 0
+				param_named_auto worldViewProj worldviewproj_matrix
+			}
+
+			// Base bump map
+			texture_unit
+			{
+				texture NMBumpsOut.png
+				colour_op replace
+			}
+			// Normalisation cube map
+			texture_unit
+			{
+				cubic_texture nm.png combinedUVW
+				tex_coord_set 1
+				tex_address_mode clamp
+				colour_op_ex dotproduct src_texture src_current
+				colour_op_multipass_fallback dest_colour zero
+			}
+			// Decal
+			texture_unit
+			{
+				texture RustySteel.jpg
+			}
+		}
+	}
+}
+
+// Any number of lights, diffuse
+material Examples/BumpMapping/MultiLight
+{
+
+	// This is the preferred technique which uses both vertex and
+	// fragment programs, supports coloured lights
+	technique
+	{
+		// Base ambient pass
+		pass
+		{
+			// base colours, not needed for rendering, but as information
+			// to lighting pass categorisation routine
+			ambient 1 1 1
+			diffuse 0 0 0 
+			specular 0 0 0 0 
+			// Really basic vertex program
+			// NB we don't use fixed function here because GL does not like
+			// mixing fixed function and vertex programs, depth fighting can
+			// be an issue
+			vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTexture
+			{
+				param_named_auto worldViewProj worldviewproj_matrix
+				param_named_auto ambient ambient_light_colour
+			}
+			
+		}
+		// Now do the lighting pass
+		// NB we don't do decal texture here because this is repeated per light
+		pass
+		{
+			// base colours, not needed for rendering, but as information
+			// to lighting pass categorisation routine
+			ambient 0 0 0 
+			
+			// do this for each light
+			iteration once_per_light
+
+		
+			scene_blend add
+
+			// Vertex program reference
+			vertex_program_ref Examples/BumpMapVP
+			{
+				param_named_auto lightPosition light_position_object_space 0
+				param_named_auto worldViewProj worldviewproj_matrix
+			}
+
+			// Fragment program
+			fragment_program_ref Examples/BumpMapFP
+			{
+				param_named_auto lightDiffuse light_diffuse_colour 0 
+			}
+			
+			// Base bump map
+			texture_unit
+			{
+				texture NMBumpsOut.png
+				colour_op replace
+			}
+			// Normalisation cube map
+			texture_unit
+			{
+				cubic_texture nm.png combinedUVW
+				tex_coord_set 1
+				tex_address_mode clamp
+			}
+		}
+		
+		// Decal pass
+		pass
+		{
+			// base colours, not needed for rendering, but as information
+			// to lighting pass categorisation routine
+			lighting off
+			// Really basic vertex program
+			// NB we don't use fixed function here because GL does not like
+			// mixing fixed function and vertex programs, depth fighting can
+			// be an issue
+			vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTexture
+			{
+				param_named_auto worldViewProj worldviewproj_matrix
+				param_named ambient float4 1 1 1 1
+			}
+			scene_blend dest_colour zero
+			texture_unit
+			{
+				texture RustedMetal.jpg 
+			}
+			
+		}
+	}
+
+	// This is the fallback which cards which don't have fragment program 
+	// support will use
+	// Note that it still requires vertex program support
+	technique
+	{
+		// Base ambient pass
+		pass
+		{
+			// base colours, not needed for rendering, but as information
+			// to lighting pass categorisation routine
+			ambient 1 1 1
+			diffuse 0 0 0 
+			specular 0 0 0 0
+			// Really basic vertex program
+			// NB we don't use fixed function here because GL does not like
+			// mixing fixed function and vertex programs, depth fighting can
+			// be an issue
+			vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTexture
+			{
+				param_named_auto worldViewProj worldviewproj_matrix
+				param_named_auto ambient ambient_light_colour
+			}
+			
+		}
+		// Now do the lighting pass
+		// NB we don't do decal texture here because this is repeated per light
+		pass
+		{
+			// base colours, not needed for rendering, but as information
+			// to lighting pass categorisation routine
+			ambient 0 0 0 
+			// do this for each light
+			iteration once_per_light
+
+		
+			scene_blend add
+
+			// Vertex program reference
+			vertex_program_ref Examples/BumpMapVP
+			{
+				param_named_auto lightPosition light_position_object_space 0
+				param_named_auto worldViewProj worldviewproj_matrix
+			}
+			
+			// Base bump map
+			texture_unit
+			{
+				texture NMBumpsOut.png
+				colour_op replace
+			}
+			// Normalisation cube map, with dot product on bump map
+			texture_unit
+			{
+				cubic_texture nm.png combinedUVW
+				tex_coord_set 1
+				tex_address_mode clamp
+				colour_op_ex dotproduct src_texture src_current
+				colour_op_multipass_fallback dest_colour zero
+			}
+		}
+		
+		// Decal pass
+		pass
+		{
+			lighting off
+			// Really basic vertex program
+			// NB we don't use fixed function here because GL does not like
+			// mixing fixed function and vertex programs, depth fighting can
+			// be an issue
+			vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTexture
+			{
+				param_named_auto worldViewProj worldviewproj_matrix
+				param_named ambient float4 1 1 1 1
+			}
+			scene_blend dest_colour zero
+			texture_unit
+			{
+				texture RustedMetal.jpg 
+			}
+			
+		}
+
+	}
+}
+
+// Any number of lights, diffuse and specular
+material Examples/BumpMapping/MultiLightSpecular
+{
+
+	// This is the preferred technique which uses both vertex and
+	// fragment programs, supports coloured lights
+	technique
+	{
+		// Base ambient pass
+		pass
+		{
+			// base colours, not needed for rendering, but as information
+			// to lighting pass categorisation routine
+			ambient 1 1 1
+			diffuse 0 0 0 
+			specular 0 0 0 0
+			// Really basic vertex program
+			// NB we don't use fixed function here because GL does not like
+			// mixing fixed function and vertex programs, depth fighting can
+			// be an issue
+			vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTexture
+			{
+				param_named_auto worldViewProj worldviewproj_matrix
+				param_named_auto ambient ambient_light_colour
+			}
+			
+		}
+		// Now do the lighting pass
+		// NB we don't do decal texture here because this is repeated per light
+		pass
+		{
+			// base colours, not needed for rendering, but as information
+			// to lighting pass categorisation routine
+			ambient 0 0 0 
+			// do this for each light
+			iteration once_per_light
+
+		
+			scene_blend add
+
+			// Vertex program reference
+			vertex_program_ref Examples/BumpMapVPSpecular
+			{
+				param_named_auto lightPosition light_position_object_space 0
+				param_named_auto eyePosition camera_position_object_space
+				param_named_auto worldViewProj worldviewproj_matrix
+			}
+
+			// Fragment program
+			fragment_program_ref Examples/BumpMapFPSpecular
+			{
+				param_named_auto lightDiffuse light_diffuse_colour 0 
+				param_named_auto lightSpecular light_specular_colour 0
+			}
+			
+			// Base bump map
+			texture_unit
+			{
+				texture NMBumpsOut.png
+				colour_op replace
+			}
+			// Normalisation cube map
+			texture_unit
+			{
+				cubic_texture nm.png combinedUVW
+				tex_coord_set 1
+				tex_address_mode clamp
+			}
+			// Normalisation cube map #2
+			texture_unit
+			{
+				cubic_texture nm.png combinedUVW
+				tex_coord_set 2
+				tex_address_mode clamp
+			}
+		}
+		
+		// Decal pass
+		pass
+		{
+			lighting off
+			// Really basic vertex program
+			// NB we don't use fixed function here because GL does not like
+			// mixing fixed function and vertex programs, depth fighting can
+			// be an issue
+			vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTexture
+			{
+				param_named_auto worldViewProj worldviewproj_matrix
+				param_named ambient float4 1 1 1 1
+			}
+			scene_blend dest_colour zero
+			texture_unit
+			{
+				texture RustedMetal.jpg 
+			}
+			
+		}
+	}
+
+	// This is the fallback which cards which don't have fragment program 
+	// support will use, NB does not support specular colour
+	// Note that it still requires vertex program support
+	technique
+	{
+		// Base ambient pass
+		pass
+		{
+			// base colours, not needed for rendering, but as information
+			// to lighting pass categorisation routine
+			ambient 1 1 1
+			diffuse 0 0 0 
+			specular 0 0 0 0
+			// Really basic vertex program
+			// NB we don't use fixed function here because GL does not like
+			// mixing fixed function and vertex programs, depth fighting can
+			// be an issue
+			vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTexture
+			{
+				param_named_auto worldViewProj worldviewproj_matrix
+				param_named_auto ambient ambient_light_colour
+			}
+			
+		}
+		// Now do the lighting pass
+		// NB we don't do decal texture here because this is repeated per light
+		pass
+		{
+			// base colours, not needed for rendering, but as information
+			// to lighting pass categorisation routine
+			ambient 0 0 0 
+			// do this for each light
+			iteration once_per_light
+
+		
+			scene_blend add
+
+			// Vertex program reference
+			vertex_program_ref Examples/BumpMapVP
+			{
+				param_named_auto lightPosition light_position_object_space 0
+				param_named_auto worldViewProj worldviewproj_matrix
+			}
+			
+			// Base bump map
+			texture_unit
+			{
+				texture NMBumpsOut.png
+				colour_op replace
+			}
+			// Normalisation cube map, with dot product on bump map
+			texture_unit
+			{
+				cubic_texture nm.png combinedUVW
+				tex_coord_set 1
+				tex_address_mode clamp
+				colour_op_ex dotproduct src_texture src_current
+				colour_op_multipass_fallback dest_colour zero
+			}
+		}
+		
+		// Decal pass
+		pass
+		{
+			lighting off
+			// Really basic vertex program
+			// NB we don't use fixed function here because GL does not like
+			// mixing fixed function and vertex programs, depth fighting can
+			// be an issue
+			vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTexture
+			{
+				param_named_auto worldViewProj worldviewproj_matrix
+				param_named ambient float4 1 1 1 1
+			}
+			scene_blend dest_colour zero
+			texture_unit
+			{
+				texture RustedMetal.jpg 
+			}
+			
+		}
+
+	}
+}
+
+//---------------------------
+// Projective texture section
+//---------------------------
+
+
+vertex_program Examples/TexProjectionVP cg
+{
+	source Example_Projection.cg
+	entry_point generalPurposeProjection_vp
+	profiles vs_1_1 arbvp1
+}
+
+fragment_program Examples/TexProjectionFP cg
+{
+	source Example_Projection.cg
+	entry_point generalPurposeProjection_fp
+	// sorry, ps_1_1 can't do this, fp20 can though
+	profiles ps_2_0 arbfp1 fp20
+}
+
+material Examples/GeneralTexProjection
+{
+	technique
+	{
+		pass 
+		{
+			
+			vertex_program_ref Examples/TexProjectionVP
+			{
+				param_named_auto worldViewProjMatrix worldviewproj_matrix
+				param_named_auto worldMatrix world_matrix
+				// You'll need to update the tex projection, I suggest using
+				// the Frustum class
+				//param_named_auto texWorldViewProj worldviewproj_matrix
+			}
+			fragment_program_ref Examples/TexProjectionFP
+			{
+				// no params
+			}
+			texture_unit
+			{
+				// Project the OGRE logo
+				texture ogrelogo.png
+				tex_address_mode clamp
+			}
+		}
+		
+			
+	}
+    
+}
+
+//----------------------------
+// Distortion effects
+//----------------------------
+
+vertex_program Examples/FresnelRefractReflectVP cg
+{
+	source Example_Fresnel.cg
+	entry_point main_vp
+	profiles vs_1_1 arbvp1
+}
+
+fragment_program Examples/FresnelRefractReflectFP cg
+{
+	source Example_Fresnel.cg
+	entry_point main_fp
+	// sorry, ps_1_1 and fp20 can't do this
+	profiles ps_2_0 arbfp1
+}
+
+fragment_program Examples/FresnelRefractReflectPS asm
+{
+	source Example_FresnelPS.asm
+	// sorry, only for ps_1_4 :)
+	syntax ps_1_4
+
+}
+
+material Examples/FresnelReflectionRefraction
+{
+	// ps_2_0 / arbfp1
+	technique
+	{
+		pass 
+		{
+			
+			vertex_program_ref Examples/FresnelRefractReflectVP
+			{
+				param_named_auto worldViewProjMatrix worldviewproj_matrix
+				param_named_auto eyePosition camera_position_object_space
+				param_named fresnelBias float -0.3 
+				param_named fresnelScale float 1.4 
+				param_named fresnelPower float 8  
+				param_named_auto timeVal time 0.05
+				param_named scroll float 1  
+				param_named scale float 4 
+				param_named noise float 1 
+				// scroll and noisePos will need updating per frame
+			}
+			fragment_program_ref Examples/FresnelRefractReflectFP
+			{
+				param_named distortionRange float 0.025 
+				param_named tintColour float4 0 0 0.1 1
+			}
+			// Noise
+			texture_unit
+			{
+				// Perlin noise volume
+				texture perlinvolume.dds 3d
+				// min / mag filtering, no mip
+				filtering linear linear none
+			}
+			// Reflection
+			texture_unit
+			{
+				// Will be filled in at runtime
+				texture Reflection
+				tex_address_mode clamp
+				// needed by ps.1.4
+				tex_coord_set 1
+			}
+			// Refraction
+			texture_unit
+			{
+				// Will be filled in at runtime
+				texture Refraction
+				tex_address_mode clamp
+				// needed by ps.1.4
+				tex_coord_set 2
+			}
+		}
+		
+			
+	}
+
+	// ATI 8500 +
+	technique
+	{
+		pass
+		{
+			vertex_program_ref Examples/FresnelRefractReflectVP
+			{
+				param_named_auto worldViewProjMatrix worldviewproj_matrix
+				param_named_auto eyePosition camera_position_object_space
+				param_named fresnelBias float -0.3
+				param_named fresnelScale float 1.4
+				param_named fresnelPower float 8
+				param_named_auto timeVal time 0.05
+				param_named scroll float 1 
+				param_named scale float 4 
+				param_named noise float 1
+				// scroll and noisePos will need updating per frame
+			}
+
+			// for ATI RADEON 8500 - 9200
+			fragment_program_ref Examples/FresnelRefractReflectPS
+			{
+				// distortionRange
+				param_indexed 0  float 0.025  
+				// tintColour
+				param_indexed 1  float4 0.05 0.12 0.15 1
+			}
+
+			// Noise
+			texture_unit
+			{
+				// Perlin noise volume
+				texture perlinvolume.dds 3d
+				// min / mag filtering, no mip
+				filtering linear linear none
+			}
+			// Reflection
+			texture_unit
+			{
+				// Will be filled in at runtime
+				texture Reflection
+				tex_address_mode clamp
+				// needed by ps.1.4
+				tex_coord_set 1
+			}
+			// Refraction
+			texture_unit
+			{
+				// Will be filled in at runtime
+				texture Refraction
+				tex_address_mode clamp
+				// needed by ps.1.4
+				tex_coord_set 2
+			}
+		}
+	}    
+}
+
+// Normal-mapped Athene statue
+material Examples/Athene/NormalMapped
+{
+
+	// This is the preferred technique which uses both vertex and
+	// fragment programs, supports coloured lights
+	technique
+	{
+		// Base ambient pass
+		pass
+		{
+			// base colours, not needed for rendering, but as information
+			// to lighting pass categorisation routine
+			ambient 1 1 1
+			diffuse 0 0 0 
+			specular 0 0 0 0 
+			// Really basic vertex program
+			// NB we don't use fixed function here because GL does not like
+			// mixing fixed function and vertex programs, depth fighting can
+			// be an issue
+			vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTexture
+			{
+				param_named_auto worldViewProj worldviewproj_matrix
+				param_named_auto ambient ambient_light_colour
+			}
+			
+		}
+		// Now do the lighting pass
+		// NB we don't do decal texture here because this is repeated per light
+		pass
+		{
+			// base colours, not needed for rendering, but as information
+			// to lighting pass categorisation routine
+			ambient 0 0 0 
+			
+			// do this for each light
+			iteration once_per_light
+
+		
+			scene_blend add
+
+			// Vertex program reference
+			vertex_program_ref Examples/BumpMapVP
+			{
+				param_named_auto lightPosition light_position_object_space 0
+				param_named_auto worldViewProj worldviewproj_matrix
+			}
+
+			// Fragment program
+			fragment_program_ref Examples/BumpMapFP
+			{
+				param_named_auto lightDiffuse light_diffuse_colour 0 
+			}
+			
+			// Base bump map
+			texture_unit
+			{
+				texture atheneNormalMap.png
+				colour_op replace
+			}
+			// Normalisation cube map
+			texture_unit
+			{
+				cubic_texture nm.png combinedUVW
+				tex_coord_set 1
+				tex_address_mode clamp
+			}
+		}
+		
+		// Decal pass
+		pass
+		{
+			// base colours, not needed for rendering, but as information
+			// to lighting pass categorisation routine
+			lighting off
+			// Really basic vertex program
+			// NB we don't use fixed function here because GL does not like
+			// mixing fixed function and vertex programs, depth fighting can
+			// be an issue
+			vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTexture
+			{
+				param_named_auto worldViewProj worldviewproj_matrix
+				param_named ambient float4 1 1 1 1
+			}
+			scene_blend dest_colour zero
+			texture_unit
+			{
+				texture egyptrockyfull.jpg 
+			}
+			
+		}
+	}
+
+	// This is the fallback which cards which don't have fragment program 
+	// support will use
+	// Note that it still requires vertex program support
+	technique
+	{
+		// Base ambient pass
+		pass
+		{
+			// base colours, not needed for rendering, but as information
+			// to lighting pass categorisation routine
+			ambient 1 1 1
+			diffuse 0 0 0 
+			specular 0 0 0 0
+			// Really basic vertex program
+			// NB we don't use fixed function here because GL does not like
+			// mixing fixed function and vertex programs, depth fighting can
+			// be an issue
+			vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTexture
+			{
+				param_named_auto worldViewProj worldviewproj_matrix
+				param_named_auto ambient ambient_light_colour
+			}
+			
+		}
+		// Now do the lighting pass
+		// NB we don't do decal texture here because this is repeated per light
+		pass
+		{
+			// base colours, not needed for rendering, but as information
+			// to lighting pass categorisation routine
+			ambient 0 0 0 
+			// do this for each light
+			iteration once_per_light
+
+		
+			scene_blend add
+
+			// Vertex program reference
+			vertex_program_ref Examples/BumpMapVP
+			{
+				param_named_auto lightPosition light_position_object_space 0
+				param_named_auto worldViewProj worldviewproj_matrix
+			}
+			
+			// Base bump map
+			texture_unit
+			{
+				texture atheneNormalMap.png
+				colour_op replace
+			}
+			// Normalisation cube map, with dot product on bump map
+			texture_unit
+			{
+				cubic_texture nm.png combinedUVW
+				tex_coord_set 1
+				tex_address_mode clamp
+				colour_op_ex dotproduct src_texture src_current
+				colour_op_multipass_fallback dest_colour zero
+			}
+		}
+		
+		// Decal pass
+		pass
+		{
+			lighting off
+			// Really basic vertex program
+			// NB we don't use fixed function here because GL does not like
+			// mixing fixed function and vertex programs, depth fighting can
+			// be an issue
+			vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTexture
+			{
+				param_named_auto worldViewProj worldviewproj_matrix
+				param_named ambient float4 1 1 1 1
+			}
+			scene_blend dest_colour zero
+			texture_unit
+			{
+				texture egyptrockyfull.jpg
+			}
+			
+		}
+
+	}
+}
+
+// Basic Athene statue
+material Examples/Athene/Basic
+{
+
+	technique
+	{
+		pass
+		{
+			ambient 0.3 0.3 0.3
+			diffuse 1.0 1.0 0.9
+
+			texture_unit
+			{
+				texture egyptrockyfull.jpg 
+			}
+			
+		}
+	}
+}
+
+
+// Any number of lights, diffuse and specular
+material Examples/Athene/NormalMappedSpecular
+{
+
+	// This is the preferred technique which uses both vertex and
+	// fragment programs, supports coloured lights
+	technique
+	{
+		// Base ambient pass
+		pass
+		{
+			// base colours, not needed for rendering, but as information
+			// to lighting pass categorisation routine
+			ambient 1 1 1
+			diffuse 0 0 0 
+			specular 0 0 0 0
+			// Really basic vertex program
+			// NB we don't use fixed function here because GL does not like
+			// mixing fixed function and vertex programs, depth fighting can
+			// be an issue
+			vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTexture
+			{
+				param_named_auto worldViewProj worldviewproj_matrix
+				param_named_auto ambient ambient_light_colour
+			}
+			
+		}
+		// Now do the lighting pass
+		// NB we don't do decal texture here because this is repeated per light
+		pass
+		{
+			// base colours, not needed for rendering, but as information
+			// to lighting pass categorisation routine
+			ambient 0 0 0 
+			// do this for each light
+			iteration once_per_light
+
+		
+			scene_blend add
+
+			// Vertex program reference
+			vertex_program_ref Examples/BumpMapVPSpecular
+			{
+				param_named_auto lightPosition light_position_object_space 0
+				param_named_auto eyePosition camera_position_object_space
+				param_named_auto worldViewProj worldviewproj_matrix
+			}
+
+			// Fragment program
+			fragment_program_ref Examples/BumpMapFPSpecular
+			{
+				param_named_auto lightDiffuse light_diffuse_colour 0 
+				param_named_auto lightSpecular light_specular_colour 0
+			}
+			
+			// Base bump map
+			texture_unit
+			{
+				texture atheneNormalMap.png
+				colour_op replace
+			}
+			// Normalisation cube map
+			texture_unit
+			{
+				cubic_texture nm.png combinedUVW
+				tex_coord_set 1
+				tex_address_mode clamp
+			}
+			// Normalisation cube map #2
+			texture_unit
+			{
+				cubic_texture nm.png combinedUVW
+				tex_coord_set 2
+				tex_address_mode clamp
+			}
+		}
+		
+		// Decal pass
+		pass
+		{
+			lighting off
+			// Really basic vertex program
+			// NB we don't use fixed function here because GL does not like
+			// mixing fixed function and vertex programs, depth fighting can
+			// be an issue
+			vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTexture
+			{
+				param_named_auto worldViewProj worldviewproj_matrix
+				param_named ambient float4 1 1 1 1
+			}
+			scene_blend dest_colour zero
+			texture_unit
+			{
+				texture egyptrockyfull.jpg 
+			}
+			
+		}
+	}
+
+	// This is the fallback which cards which don't have fragment program 
+	// support will use, NB does not support specular colour
+	// Note that it still requires vertex program support
+	technique
+	{
+		// Base ambient pass
+		pass
+		{
+			// base colours, not needed for rendering, but as information
+			// to lighting pass categorisation routine
+			ambient 1 1 1
+			diffuse 0 0 0 
+			specular 0 0 0 0
+			// Really basic vertex program
+			// NB we don't use fixed function here because GL does not like
+			// mixing fixed function and vertex programs, depth fighting can
+			// be an issue
+			vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTexture
+			{
+				param_named_auto worldViewProj worldviewproj_matrix
+				param_named_auto ambient ambient_light_colour
+			}
+			
+		}
+		// Now do the lighting pass
+		// NB we don't do decal texture here because this is repeated per light
+		pass
+		{
+			// base colours, not needed for rendering, but as information
+			// to lighting pass categorisation routine
+			ambient 0 0 0 
+			// do this for each light
+			iteration once_per_light
+
+		
+			scene_blend add
+
+			// Vertex program reference
+			vertex_program_ref Examples/BumpMapVP
+			{
+				param_named_auto lightPosition light_position_object_space 0
+				param_named_auto worldViewProj worldviewproj_matrix
+			}
+			
+			// Base bump map
+			texture_unit
+			{
+				texture atheneNormalMap.png
+				colour_op replace
+			}
+			// Normalisation cube map, with dot product on bump map
+			texture_unit
+			{
+				cubic_texture nm.png combinedUVW
+				tex_coord_set 1
+				tex_address_mode clamp
+				colour_op_ex dotproduct src_texture src_current
+				colour_op_multipass_fallback dest_colour zero
+			}
+		}
+		
+		// Decal pass
+		pass
+		{
+			lighting off
+			// Really basic vertex program
+			// NB we don't use fixed function here because GL does not like
+			// mixing fixed function and vertex programs, depth fighting can
+			// be an issue
+			vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTexture
+			{
+				param_named_auto worldViewProj worldviewproj_matrix
+				param_named ambient float4 1 1 1 1
+			}
+			scene_blend dest_colour zero
+			texture_unit
+			{
+				texture egyptrockyfull.jpg 
+			}
+			
+		}
+
+	}
+}
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/programs/Example_Projection.cg
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/programs/Example_Projection.cg	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/programs/Example_Projection.cg	(revision 1092)
@@ -0,0 +1,28 @@
+
+void generalPurposeProjection_vp(
+		float4 pos			: POSITION,
+		
+		out float4 oPos		: POSITION,
+		out float4 texCoord : TEXCOORD0,
+
+		uniform float4x4 worldViewProjMatrix,
+		uniform float4x4 worldMatrix,
+		uniform float4x4 texViewProjMatrix)
+{
+	oPos = mul(worldViewProjMatrix, pos);
+	// multiply position by world matrix, then by projective view/proj
+	float4 newpos = mul(worldMatrix, pos);
+	texCoord = mul(texViewProjMatrix, newpos);
+	
+}
+
+void generalPurposeProjection_fp(
+		float4 texCoord		: TEXCOORD0,
+		out float4 col		: COLOR,
+		uniform sampler2D texMap)
+{
+	col = tex2Dproj(texMap, texCoord);
+
+}
+		
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/programs/OffsetMapping_specular.asm
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/programs/OffsetMapping_specular.asm	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/programs/OffsetMapping_specular.asm	(revision 1092)
@@ -0,0 +1,44 @@
+// Pixel Shader for doing bump mapping with parallax plus diffuse and specular lighting by nfz 
+
+// uv               TEXCOORD0 
+// lightDir            TEXCOORD1 
+// eyeDir            TEXCOORD2 
+// half               TEXCOORD3 
+
+// lightDiffuse         c0 
+// lightSpecular      c1 
+// Parallax scale and bias c2 
+// normal/height map   texunit 0 - height map in alpha channel 
+// diffuse texture      texunit 1 
+
+ps.1.4 
+
+
+texld r0, t0               // get height 
+texcrd r2.xyz, t0            // get uv coordinates 
+texcrd r3.xyz, t2            // get eyedir vector 
+
+
+mad r0.xyz, r0.a, c2.x, c2.y   // displacement = height * scale + bias 
+mad r2.xyz, r3, r0, r2         // newtexcoord = eyedir * displacement + uv 
+
+phase 
+
+texld r0, r2.xyz            // get normal N using newtexcoord 
+texld r1, r2.xyz            // get diffuse texture using newtexcoord 
+texcrd r4.xyz, t1            // get lightdir vector 
+texcrd r5.xyz, t3            // get half angle vector 
+
+dp3_sat r5.rgb, r0_bx2, r5         // N dot H - spec calc 
+dp3_sat r4.rgb, r0_bx2, r4         // N dot L - diffuse calc 
++ mul r5.a, r5.r, r5.r 
+mul r0.rgb, r4, r1            // colour = diffusetex * N dot L 
++ mul r5.a, r5.a, r5.a 
+
+mul r5.rgb, r5.a, r5.a          
+mul r5.rgb, r5, r5          
+mul r5.rgb, r5, r5          
+mul r5.rgb, r5, c1            // specular = (N dot H)^32 * specularlight 
+
+mad r0.rgb, r0, c0, r5         // colour = diffusetex * (N dot L)* diffuselight + specular 
++ mov r0.a, c2.b 
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/programs/Example_Fresnel.cg
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/programs/Example_Fresnel.cg	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/programs/Example_Fresnel.cg	(revision 1092)
@@ -0,0 +1,73 @@
+// Vertex program for fresnel reflections / refractions
+void main_vp(
+		float4 pos			: POSITION,
+		float4 normal		: NORMAL,
+		float2 tex			: TEXCOORD0,
+		
+		out float4 oPos		: POSITION,
+		out float fresnel   : COLOR,
+		out float3 noiseCoord : TEXCOORD0,
+		out float4 projectionCoord : TEXCOORD1,
+
+		uniform float4x4 worldViewProjMatrix,
+		uniform float3 eyePosition, // object space
+		uniform float fresnelBias,
+		uniform float fresnelScale,
+		uniform float fresnelPower,
+		uniform float timeVal,
+		uniform float scale,  // the amount to scale the noise texture by
+		uniform float scroll, // the amount by which to scroll the noise
+		uniform float noise  // the noise perturb as a factor of the  time
+		)
+{
+	oPos = mul(worldViewProjMatrix, pos);
+	// Projective texture coordinates, adjust for mapping
+	float4x4 scalemat = float4x4(0.5,   0,   0, 0.5, 
+	                               0,-0.5,   0, 0.5,
+								   0,   0, 0.5, 0.5,
+								   0,   0,   0,   1);
+	projectionCoord = mul(scalemat, oPos);
+	// Noise map coords
+	noiseCoord.xy = (tex + (timeVal * scroll)) * scale;
+	noiseCoord.z = noise * timeVal;
+
+	// calc fresnel factor (reflection coefficient)
+	float3 eyeDir = normalize(pos.xyz - eyePosition);
+	fresnel = fresnelBias + fresnelScale * pow(1 + dot(eyeDir, normal), fresnelPower);
+	
+}
+
+// Fragment program for distorting a texture using a 3D noise texture
+void main_fp(
+		float fresnel				: COLOR,
+		float3 noiseCoord			: TEXCOORD0,
+		float4 projectionCoord		: TEXCOORD1,
+		
+		out float4 col		: COLOR,
+		
+		uniform float distortionRange,
+		uniform float4 tintColour,
+		uniform sampler3D noiseMap,
+		uniform sampler2D reflectMap,
+		uniform sampler2D refractMap
+		)
+{
+	// Randomly chosen offset for y noise sample
+	float3 yoffset = float3(0.31, 0.58, 0.23);
+	float2 distort;
+	// Sample the noise texture at 2 places
+	distort.x = tex3D(noiseMap, noiseCoord).x;
+	distort.y = tex3D(noiseMap, noiseCoord + yoffset).x;
+	// Scale the distortion from [0,1] to [-range,range]
+	distort = (distort * 2 - 1) * distortionRange;
+
+	// Do the tex projection manually so we can distort _after_
+	float2 final = projectionCoord.xy / projectionCoord.w;
+	final += distort;
+	
+	float4 reflectionColour = tex2D(reflectMap, final);
+	float4 refractionColour = tex2D(refractMap, final) + tintColour;
+	col = lerp(refractionColour, reflectionColour, fresnel);
+
+
+}
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/programs/Example_BumpMapping.cg
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/programs/Example_BumpMapping.cg	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/programs/Example_BumpMapping.cg	(revision 1092)
@@ -0,0 +1,154 @@
+// General functions
+
+// Expand a range-compressed vector
+float3 expand(float3 v)
+{
+	return (v - 0.5) * 2;
+}
+
+
+/* Bump mapping vertex program
+   In this program, we want to calculate the tangent space light vector
+   on a per-vertex level which will get passed to the fragment program,
+   or to the fixed function dot3 operation, to produce the per-pixel
+   lighting effect. 
+*/
+void main_vp(float4 position	: POSITION,
+			 float3 normal		: NORMAL,
+			 float2 uv			: TEXCOORD0,
+			 float3 tangent     : TEXCOORD1,
+			 // outputs
+			 out float4 oPosition    : POSITION,
+			 out float2 oUv			 : TEXCOORD0,
+			 out float3 oTSLightDir	 : TEXCOORD1,
+			 // parameters
+			 uniform float4 lightPosition, // object space
+			 uniform float4x4 worldViewProj)
+{
+	// calculate output position
+	oPosition = mul(worldViewProj, position);
+
+	// pass the main uvs straight through unchanged
+	oUv = uv;
+
+	// calculate tangent space light vector
+	// Get object space light direction
+	float3 lightDir = normalize(lightPosition.xyz -  (position * lightPosition.w));
+
+	// Calculate the binormal (NB we assume both normal and tangent are
+	// already normalised)
+	// NB looks like nvidia cross params are BACKWARDS to what you'd expect
+	// this equates to NxT, not TxN
+	float3 binormal = cross(tangent, normal);
+	
+	// Form a rotation matrix out of the vectors
+	float3x3 rotation = float3x3(tangent, binormal, normal);
+	
+	// Transform the light vector according to this matrix
+	oTSLightDir = normalize(mul(rotation, lightDir));
+	
+	
+}
+
+void main_fp( float2 uv			: TEXCOORD0,
+			  float3 TSlightDir : TEXCOORD1,
+
+			  out float4 colour	: COLOR,
+
+			  uniform float4 lightDiffuse,
+			  uniform sampler2D   normalMap,
+			  uniform samplerCUBE normalCubeMap)
+{
+	// retrieve normalised light vector, expand from range-compressed
+	float3 lightVec = expand(texCUBE(normalCubeMap, TSlightDir).xyz);
+
+	// get bump map vector, again expand from range-compressed
+	float3 bumpVec = expand(tex2D(normalMap, uv).xyz);
+
+	// Calculate dot product
+	colour = lightDiffuse * dot(bumpVec, lightVec);
+	
+}
+
+/* Vertex program which includes specular component */
+void specular_vp(float4 position	: POSITION,
+			 	 float3 normal		: NORMAL,
+			 	 float2 uv			: TEXCOORD0,
+			 	 float3 tangent     : TEXCOORD1,
+			 	 // outputs
+			 	 out float4 oPosition    : POSITION,
+			 	 out float2 oUv			 : TEXCOORD0,
+			 	 out float3 oTSLightDir	 : TEXCOORD1,
+				 out float3 oTSHalfAngle : TEXCOORD2,
+			 	 // parameters
+				 uniform float4 lightPosition, // object space
+			 	 uniform float3 eyePosition,   // object space
+			 	 uniform float4x4 worldViewProj)
+{
+	// calculate output position
+	oPosition = mul(worldViewProj, position);
+
+	// pass the main uvs straight through unchanged
+	oUv = uv;
+
+	// calculate tangent space light vector
+	// Get object space light direction
+	float3 lightDir = normalize(lightPosition.xyz -  (position * lightPosition.w));
+
+	// Calculate the binormal (NB we assume both normal and tangent are
+	// already normalised)
+	// NB looks like nvidia cross params are BACKWARDS to what you'd expect
+	// this equates to NxT, not TxN
+	float3 binormal = cross(tangent, normal);
+	
+	// Form a rotation matrix out of the vectors
+	float3x3 rotation = float3x3(tangent, binormal, normal);
+	
+	// Transform the light vector according to this matrix
+	oTSLightDir = normalize(mul(rotation, lightDir));
+
+	// Calculate half-angle in tangent space
+	float3 eyeDir = eyePosition - position.xyz;
+	float3 halfAngle = normalize(eyeDir + lightDir);
+	oTSHalfAngle = mul(rotation, halfAngle);
+	
+	
+}
+
+/* Fragment program which supports specular component */
+void specular_fp( float2 uv			: TEXCOORD0,
+			  float3 TSlightDir : TEXCOORD1,
+			  float3 TShalfAngle: TEXCOORD2,
+
+			  out float4 colour	: COLOR,
+
+			  uniform float4 lightDiffuse,
+			  uniform float4 lightSpecular,
+			  uniform sampler2D   normalMap,
+			  uniform samplerCUBE normalCubeMap, 
+			  uniform samplerCUBE normalCubeMap2) // we need this second binding to be compatible with ps_1_1, ps_2_0 could reuse the other
+{
+	// retrieve normalised light vector, expand from range-compressed
+	float3 lightVec = expand(texCUBE(normalCubeMap, TSlightDir).xyz);
+
+	// retrieve half angle and normalise through cube map
+	float3 halfAngle = expand(texCUBE(normalCubeMap2, TShalfAngle).xyz);
+
+	// get bump map vector, again expand from range-compressed
+	float3 bumpVec = expand(tex2D(normalMap, uv).xyz);
+
+	// Pre-raise the specular exponent to the eight power
+	// Note we have no 'pow' function in basic fragment programs, if we were willing to accept compatibility
+	// with ps_2_0 / arbfp1 and above, we could have a variable shininess parameter
+	// This is equivalent to 
+	float specFactor = dot(bumpVec, halfAngle);
+	for (int i = 0; i < 3; ++i)
+		specFactor *= specFactor;
+	
+
+	// Calculate dot product for diffuse
+	colour = (lightDiffuse * saturate(dot(bumpVec, lightVec))) + 
+			(lightSpecular * specFactor);
+	
+}
+			 
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/programs/Example_Basic.cg
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/programs/Example_Basic.cg	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/programs/Example_Basic.cg	(revision 1092)
@@ -0,0 +1,140 @@
+/*
+  Basic ambient lighting vertex program
+*/
+void ambientOneTexture_vp(float4 position : POSITION,
+						  float2 uv		  : TEXCOORD0,
+						  
+						  out float4 oPosition : POSITION,
+						  out float2 oUv	   : TEXCOORD0,
+						  out float4 colour    : COLOR,
+
+						  uniform float4x4 worldViewProj,
+						  uniform float4 ambient)
+{
+	oPosition = mul(worldViewProj, position);
+	oUv = uv;
+	colour = ambient;
+}
+
+/*
+  Single-weight-per-vertex hardware skinning, 2 lights
+  The trouble with vertex programs is they're not general purpose, but
+  fixed function hardware skinning is very poorly supported
+*/
+void hardwareSkinningOneWeight_vp(
+	float4 position : POSITION,
+	float3 normal   : NORMAL,
+	float2 uv       : TEXCOORD0,
+	float  blendIdx : BLENDINDICES,
+	
+
+	out float4 oPosition : POSITION,
+	out float2 oUv       : TEXCOORD0,
+	out float4 colour           : COLOR,
+	// Support up to 24 bones of float3x4
+	// vs_1_1 only supports 96 params so more than this is not feasible
+	uniform float3x4   worldMatrix3x4Array[24],
+	uniform float4x4 viewProjectionMatrix,
+	uniform float4   lightPos[2],
+	uniform float4   lightDiffuseColour[2],
+	uniform float4   ambient)
+{
+	// transform by indexed matrix
+	float4 blendPos = float4(mul(worldMatrix3x4Array[blendIdx], position).xyz, 1.0);
+	// view / projection
+	oPosition = mul(viewProjectionMatrix, blendPos);
+	// transform normal
+	float3 norm = mul((float3x3)worldMatrix3x4Array[blendIdx], normal);
+	// Lighting - support point and directional
+	float3 lightDir0 = 	normalize(
+		lightPos[0].xyz -  (blendPos.xyz * lightPos[0].w));
+	float3 lightDir1 = 	normalize(
+		lightPos[1].xyz -  (blendPos.xyz * lightPos[1].w));
+
+	oUv = uv;
+	colour = ambient + 
+		(saturate(dot(lightDir0, norm)) * lightDiffuseColour[0]) + 
+		(saturate(dot(lightDir1, norm)) * lightDiffuseColour[1]);
+	
+}	
+
+/*
+  Single-weight-per-vertex hardware skinning, shadow-caster pass
+*/
+void hardwareSkinningOneWeightCaster_vp(
+	float4 position : POSITION,
+	float3 normal   : NORMAL,
+	float  blendIdx : BLENDINDICES,
+	
+
+	out float4 oPosition : POSITION,
+	out float4 colour    : COLOR,
+	// Support up to 24 bones of float3x4
+	// vs_1_1 only supports 96 params so more than this is not feasible
+	uniform float3x4   worldMatrix3x4Array[24],
+	uniform float4x4 viewProjectionMatrix,
+	uniform float4   ambient)
+{
+	// transform by indexed matrix
+	float4 blendPos = float4(mul(worldMatrix3x4Array[blendIdx], position).xyz, 1.0);
+	// view / projection
+	oPosition = mul(viewProjectionMatrix, blendPos);
+	
+	colour = ambient;
+	
+}	
+
+/*
+  Four-weight-per-vertex hardware skinning, 2 lights
+  The trouble with vertex programs is they're not general purpose, but
+  fixed function hardware skinning is very poorly supported
+*/
+void hardwareSkinningFourWeights_vp(
+	float4 position : POSITION,
+	float3 normal   : NORMAL,
+	float2 uv       : TEXCOORD0,
+	float4 blendIdx : BLENDINDICES,
+	float4 blendWgt : BLENDWEIGHT,
+	
+
+	out float4 oPosition : POSITION,
+	out float2 oUv       : TEXCOORD0,
+	out float4 colour           : COLOR,
+	// Support up to 24 bones of float3x4
+	// vs_1_1 only supports 96 params so more than this is not feasible
+	uniform float3x4   worldMatrix3x4Array[24],
+	uniform float4x4 viewProjectionMatrix,
+	uniform float4   lightPos[2],
+	uniform float4   lightDiffuseColour[2],
+	uniform float4   ambient)
+{
+	// transform by indexed matrix
+	float4 blendPos = float4(0,0,0,0);
+	int i;
+	for (i = 0; i < 4; ++i)
+	{
+		blendPos += float4(mul(worldMatrix3x4Array[blendIdx[i]], position).xyz, 1.0) * blendWgt[i];
+	}
+	// view / projection
+	oPosition = mul(viewProjectionMatrix, blendPos);
+	// transform normal
+	float3 norm = float3(0,0,0);
+	for (i = 0; i < 4; ++i)
+	{
+		norm += mul((float3x3)worldMatrix3x4Array[blendIdx[i]], normal) * 
+		blendWgt[i];
+	}
+	norm = normalize(norm);
+	// Lighting - support point and directional
+	float3 lightDir0 = 	normalize(
+		lightPos[0].xyz -  (blendPos.xyz * lightPos[0].w));
+	float3 lightDir1 = 	normalize(
+		lightPos[1].xyz -  (blendPos.xyz * lightPos[1].w));
+
+	
+	oUv = uv;
+	colour = ambient + 
+		(saturate(dot(lightDir0, norm)) * lightDiffuseColour[0]) + 
+		(saturate(dot(lightDir1, norm)) * lightDiffuseColour[1]);
+	
+}	
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/programs/Example_CelShading.cg
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/programs/Example_CelShading.cg	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/programs/Example_CelShading.cg	(revision 1092)
@@ -0,0 +1,63 @@
+
+/* Cel shading vertex program for single-pass rendering
+   In this program, we want to calculate the diffuse and specular
+   ramp components, and the edge factor (for doing simple outlining)
+   For the outlining to look good, we need a pretty well curved model.
+*/
+void main_vp(float4 position	: POSITION,
+			 float3 normal		: NORMAL,
+			 // outputs
+			 out float4 oPosition : POSITION,
+			 out float  diffuse		 : TEXCOORD0,
+			 out float  specular	 : TEXCOORD1,
+			 out float  edge		 : TEXCOORD2,
+			 // parameters
+			 uniform float3 lightPosition, // object space
+			 uniform float3 eyePosition,   // object space
+			 uniform float4  shininess,
+			 uniform float4x4 worldViewProj)
+{
+	// calculate output position
+	oPosition = mul(worldViewProj, position);
+
+	// calculate light vector
+	float3 N = normalize(normal);
+	float3 L = normalize(lightPosition - position.xyz);
+	
+	// Calculate diffuse component
+	diffuse = max(dot(N, L) , 0);
+
+	// Calculate specular component
+	float3 E = normalize(eyePosition - position.xyz);
+	float3 H = normalize(L + E);
+	specular = pow(max(dot(N, H), 0), shininess);
+	// Mask off specular if diffuse is 0
+	if (diffuse == 0) specular = 0;
+
+	// Edge detection, dot eye and normal vectors
+	edge = max(dot(N, E), 0);
+}
+
+void main_fp(float diffuseIn 	: TEXCOORD0,
+			 float specularIn	: TEXCOORD1,
+			 float edge		: TEXCOORD2,
+			 
+			 out float4 colour	: COLOR,
+			 
+			 uniform float4 diffuse,
+			 uniform float4 specular,
+			 
+			 uniform sampler1D diffuseRamp,
+			 uniform sampler1D specularRamp,
+			 uniform sampler1D edgeRamp)
+{
+	// Step functions from textures
+	diffuseIn = tex1D(diffuseRamp, diffuseIn).x;
+	specularIn = tex1D(specularRamp, specularIn).x;
+	edge = tex1D(edgeRamp, edge).x;
+
+	colour = edge * ((diffuse * diffuseIn) + 
+					(specular * specularIn));
+}
+			 
+			 
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/programs/Grass.cg
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/programs/Grass.cg	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/programs/Grass.cg	(revision 1092)
@@ -0,0 +1,30 @@
+// Vertex program to wave some grass about
+// Simplistic, assumes base of the grass at 0
+void grass_vp(float4 position : POSITION,
+			  float3 normal   : NORMAL,
+			  float2 uv		  : TEXCOORD0,
+			  out float4 oPosition : POSITION,
+			  out float2 oUv	   : TEXCOORD0,
+			  out float4 colour    : COLOR,
+
+			  uniform float4x4 worldViewProj,
+			  uniform float4 ambient,
+			  uniform float4 objSpaceLight,
+			  uniform float4 lightColour,
+			  uniform float4 offset)
+{
+	float4 mypos = position;
+	//offset = float4(0.5, 0, 0, 0);
+	mypos = mypos + offset * mypos.yyyy;
+	oPosition = mul(worldViewProj, mypos);
+
+	oUv = uv;
+	// get vertex light direction (support directional and point)
+	float3 light = normalize(
+		objSpaceLight.xyz -  (position.xyz * objSpaceLight.w));
+	float diffuseFactor = max(dot(normal, light), 0);
+	
+	
+	colour = ambient + diffuseFactor * lightColour;
+}
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/programs/OffsetMapping.cg
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/programs/OffsetMapping.cg	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/programs/OffsetMapping.cg	(revision 1092)
@@ -0,0 +1,95 @@
+/* Bump mapping with Parallax offset vertex program 
+   In this program, we want to calculate the tangent space light end eye vectors 
+   which will get passed to the fragment program to produce the per-pixel bump map 
+   with parallax offset effect. 
+*/ 
+
+/* Vertex program that moves light and eye vectors into texture tangent space at vertex */ 
+
+void main_vp(float4 position   : POSITION, 
+              float3 normal      : NORMAL, 
+              float2 uv         : TEXCOORD0, 
+              float3 tangent     : TEXCOORD1, 
+              // outputs 
+              out float4 oPosition    : POSITION, 
+              out float2 oUv          : TEXCOORD0, 
+              out float3 oLightDir    : TEXCOORD1, // tangent space 
+             out float3 oEyeDir       : TEXCOORD2, // tangent space 
+             out float3 oHalfAngle    : TEXCOORD3, // 
+              // parameters 
+              uniform float4 lightPosition, // object space 
+              uniform float3 eyePosition,   // object space 
+              uniform float4x4 worldViewProj) 
+{  
+   // calculate output position 
+   oPosition = mul(worldViewProj, position); 
+
+   // pass the main uvs straight through unchanged 
+   oUv = uv; 
+
+   // calculate tangent space light vector 
+   // Get object space light direction 
+   float3 lightDir = normalize(lightPosition.xyz -  (position * lightPosition.w));
+   float3 eyeDir = eyePosition - position.xyz; 
+    
+   // Calculate the binormal (NB we assume both normal and tangent are 
+   // already normalised) 
+   // NB looks like nvidia cross params are BACKWARDS to what you'd expect 
+   // this equates to NxT, not TxN 
+   float3 binormal = cross(tangent, normal); 
+    
+   // Form a rotation matrix out of the vectors 
+   float3x3 rotation = float3x3(tangent, binormal, normal); 
+    
+   // Transform the light vector according to this matrix 
+   lightDir = normalize(mul(rotation, lightDir)); 
+   eyeDir = normalize(mul(rotation, eyeDir)); 
+
+   oLightDir = lightDir; 
+   oEyeDir = eyeDir; 
+   oHalfAngle = normalize(eyeDir + lightDir); 
+}
+
+// General functions
+
+// Expand a range-compressed vector
+float3 expand(float3 v)
+{
+	return (v - 0.5) * 2;
+}
+
+void main_fp(float2 uv : TEXCOORD0,
+	float3 lightDir : TEXCOORD1,
+	float3 eyeDir : TEXCOORD2,
+	float3 halfAngle : TEXCOORD3,
+	uniform float3 lightDiffuse,
+	uniform float3 lightSpecular,
+	uniform float4 scaleBias,
+	uniform sampler2D normalHeightMap,
+	uniform sampler2D diffuseMap,
+	out float4 oColor : COLOR)
+{
+	// get the height using the tex coords
+	float height = tex2D(normalHeightMap, uv).a;
+
+	// scale and bias factors	
+	float scale = scaleBias.x;
+	float bias = scaleBias.y;
+
+	// calculate displacement	
+	float displacement = (height * scale) + bias;
+	
+	float3 uv2 = float3(uv, 1);
+	
+	// calculate the new tex coord to use for normal and diffuse
+	float2 newTexCoord = ((eyeDir * displacement) + uv2).xy;
+	
+	// get the new normal and diffuse values
+	float3 normal = expand(tex2D(normalHeightMap, newTexCoord).xyz);
+	float3 diffuse = tex2D(diffuseMap, newTexCoord).xyz;
+	
+	float3 specular = pow(saturate(dot(normal, halfAngle)), 32) * lightSpecular;
+	float3 col = diffuse * saturate(dot(normal, lightDir)) * lightDiffuse + specular;
+		
+	oColor = float4(col, 1);
+}
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/programs/Example_FresnelPS.asm
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/programs/Example_FresnelPS.asm	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/programs/Example_FresnelPS.asm	(revision 1092)
@@ -0,0 +1,72 @@
+ps.1.4
+  // conversion from Cg generated ARB_fragment_program to ps.1.4 by NFZ
+  // command line args: -profile arbfp1 -entry main_fp
+  // program main_fp
+  // c0 : distortionRange
+  // c1 : tintColour
+  // testure 0 : noiseMap
+  // texture 1 : reflectMap
+  // texture 2 : refractMap
+  // v0.x : fresnel 
+  // t0.xyz : noiseCoord
+  // t1.xyw : projectionCoord 
+
+def c2, 2, 1, 0, 0
+
+  // Cg:	distort.x = tex3D(noiseMap, noiseCoord).x;
+  // arbfp1:	TEX R0.x, fragment.texcoord[0], texture[0], 3D;
+  // sample noise map using noiseCoord in TEX unit 0 
+
+texld r0, t0.xyz
+
+  // get projected texture coordinates from TEX coord 1
+  // will be used in phase 2
+
+texcrd r1.xy, t1_dw.xyw
+mov r1.z, c2.y
+
+  // Cg:	distort.y = tex3D(noiseMap, noiseCoord + yoffset).x;
+  // arbfp1:	ADD R1.xyz, fragment.texcoord[0], c1;
+  // arbfp1:	TEX R1.x, R1, texture[0], 3D;
+  // arbfp1:	MOV R0.y, R1.x;
+
+  // Cg:	distort = (distort * 2 - 1) * distortionRange;
+  // arbfp1:	MAD R0.xy, R0, c0.x, -c0.y;
+  // arbfp1:	MUL R0.xy, R0, u0.x;
+  // (distort * 2 - 1) same as 2*(distort -.5) so use _bx2
+
+
+  // Cg:	final = projectionCoord.xy / projectionCoord.w;
+  // Cg:	final += distort;
+  // arbfp1:	RCP R0.w, fragment.texcoord[1].w;
+  // arbfp1:	MAD R0.xy, fragment.texcoord[1], R0.w, R0;
+  // 	final = (distort *  projectionCoord.w) + projectionCoord.xy
+  // for ps.1.4 have to re-arrange things a bit to perturb projected texture coordinates
+
+mad r0.xyz, r0_bx2, c0.x, r1
+
+phase
+
+  // do dependant texture reads
+  // Cg:	reflectionColour = tex2D(reflectMap, final);
+  // arbfp1:	TEX R0, R0, texture[1], 2D;
+  // sampe reflectMap using dependant read : texunit 1 
+
+texld r1, r0.xyz
+
+  // Cg:	refractionColour = tex2D(refractMap, final) + tintColour;
+  // arbfp1:	TEX R1, R0, texture[2], 2D;
+  // sample refractMap : texunit 2 
+
+texld r2, r0.xyz
+
+  // adding tintColour that is in global c1
+  // arbfp1:	ADD R1, R1, u1;
+
+add r2, r2, c1
+
+  // Cg:	col = lerp(refractionColour, reflectionColour, fresnel);
+  // arbfp1:	ADD R0, R0, -R1;
+  // arbfp1:	MAD result.color, fragment.color.primary.x, R0, R1;
+
+lrp r0, v0.x, r1, r2
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/particle/smoke.particle
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/particle/smoke.particle	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/particle/smoke.particle	(revision 1092)
@@ -0,0 +1,42 @@
+// Example particle systems
+
+// smoke
+Examples/Smoke
+{
+    	material        	Examples/Smoke
+    	particle_width  	55
+    	particle_height 	55
+    	cull_each       	true
+    	quota           	500
+    	billboard_type  	point
+    
+    	// Area emitter
+    	emitter Point
+    	{
+		angle               		11
+        	emission_rate       		15
+        	time_to_live        		4
+        	direction           		0 1 0
+        	velocity_min        		150
+        	velocity_max        		240    	
+	}
+
+	affector ColourImage
+	{
+		image		smokecolors.png
+	}
+
+   	affector Rotator
+   	{
+        	rotation_range_start  		0
+        	rotation_range_end   	 	360
+        	rotation_speed_range_start  	-60
+        	rotation_speed_range_end    	200
+   	}
+
+   	affector Scaler
+   	{
+       	rate 	100
+   	}
+
+}
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/particle/Example-Water.particle
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/particle/Example-Water.particle	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/particle/Example-Water.particle	(revision 1092)
@@ -0,0 +1,35 @@
+Examples/Water/Rain
+{
+    material        Examples/Droplet
+    particle_width  100
+    particle_height 300
+    cull_each       true
+    quota           100
+    // Make common direction straight down (faster than self oriented)
+    billboard_type  oriented_common
+    common_direction 0 -1 0
+    
+    // Area emitter
+    emitter Box
+    {
+        angle           0
+        emission_rate   20
+        time_to_live    5
+        direction       0 -1 0
+        velocity    	1000
+        colour_range_start  0.3 1 0.3
+        colour_range_end    0.7 1 0.7
+        width           3000
+        height          3000
+        depth           0
+    }
+
+    // Gravity
+    affector LinearForce
+    {
+        force_vector      0 -1000 0
+        force_application add
+    }
+
+}
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/particle/Example.particle
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/particle/Example.particle	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/particle/Example.particle	(revision 1092)
@@ -0,0 +1,183 @@
+// Example particle systems
+
+// Exudes greeny particles which float upwards
+Examples/GreenyNimbus
+{
+    material        Examples/Flare
+    particle_width  30
+    particle_height 30
+    cull_each       false
+    quota           10000
+    billboard_type  point
+    
+    // Area emitter
+    emitter Box
+    {
+        angle           30
+        emission_rate   30
+        time_to_live    5
+        direction       0 1 0
+        velocity    	0
+        colour_range_start  1 1 0
+        colour_range_end    0.3 1 0.3
+        width           60
+        height          60
+        depth           60
+    }
+
+    // Make em float upwards
+    affector LinearForce
+    {
+        force_vector      0 100 0
+        force_application add
+    }
+
+    // Fader
+    affector ColourFader
+    {
+        red -0.25
+        green -0.25
+        blue -0.25
+    }
+
+
+}
+
+// A sparkly purple fountain
+Examples/PurpleFountain
+{
+    material        Examples/Flare2
+    particle_width  20
+    particle_height 20
+    cull_each       false
+    quota           10000
+    billboard_type  oriented_self
+    
+    // Area emitter
+    emitter Point
+    {
+        angle           15
+        emission_rate   75
+        time_to_live    3
+        direction       0 1 0
+        velocity_min    250
+        velocity_max    300
+        colour_range_start  0 0 0
+        colour_range_end    1 1 1
+    }
+
+    // Gravity
+    affector LinearForce
+    {
+        force_vector      0 -100 0
+        force_application add
+    }
+
+    // Fader
+    affector ColourFader
+    {
+        red -0.25
+        green -0.25
+        blue -0.25
+    }
+}
+
+
+// A downpour
+Examples/Rain
+{
+    material        Examples/Droplet
+    particle_width  20
+    particle_height 100
+    cull_each       true
+    quota           10000
+    // Make common direction straight down (faster than self oriented)
+    billboard_type  oriented_common
+    common_direction 0 -1 0
+    
+    // Area emitter
+    emitter Box
+    {
+        angle           0
+        emission_rate   100
+        time_to_live    5
+        direction       0 -1 0
+        velocity    	50
+        colour_range_start  0.3 1 0.3
+        colour_range_end    0.7 1 0.7
+        width           1000
+        height          1000
+        depth           0
+    }
+
+    // Gravity
+    affector LinearForce
+    {
+        force_vector      0 -200 0
+        force_application add
+    }
+
+}
+
+// A jet engine (of sorts)
+Examples/JetEngine1
+{
+	material 		Examples/Flare
+	particle_width 	25
+	particle_height	25
+	cull_each		false
+	quota			200
+	billboard_type	point
+
+	emitter Point
+	{
+		angle 5
+		emission_rate 100
+        time_to_live    1
+        direction       0 -1 0
+        velocity_min    250
+        velocity_max    300
+        colour_range_start  1 1 0.5
+        colour_range_end    1 0.8 0.3
+		
+	}
+	affector ColourFader
+	{
+		red -0.25
+		green -1
+		blue -1
+	}
+	
+}
+Examples/JetEngine2
+{
+	material 		Examples/Flare
+	particle_width 	15
+	particle_height	15
+	cull_each		false
+	quota			200
+	billboard_type	point
+
+	emitter Point
+	{
+		angle 3
+		emission_rate 100
+        time_to_live    1
+        direction       0 -1 0
+        velocity_min    350
+        velocity_max    400
+        colour_range_start  0.5 1 1
+        colour_range_end    0.3 0.8 1
+		
+	}
+	affector ColourFader
+	{
+		red -1
+		green -1
+		blue -0.5
+	}
+	
+}
+
+
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/gui/GUILayout.xsd
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/gui/GUILayout.xsd	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/gui/GUILayout.xsd	(revision 1092)
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+
+	<xsd:element name="GUILayout" type="GUILayoutType"/>
+	
+	<xsd:complexType name="GUILayoutType">
+		<xsd:sequence>
+			<xsd:element name="Window" type="WindowType" />
+		</xsd:sequence>
+		<xsd:attribute name="Parent" type="xsd:string" use="optional" default=""/>
+	</xsd:complexType>
+	
+	<xsd:complexType name="WindowType">
+		<xsd:sequence>
+			<xsd:element name="LayoutImport" type="LayoutImportType"  minOccurs="0" maxOccurs="unbounded" />
+			<xsd:element name="Property" type="PropertyType"  minOccurs="0" maxOccurs="unbounded" />
+			<xsd:element name="Event" type="EventType"  minOccurs="0" maxOccurs="unbounded" />
+			<xsd:element name="Window" type="WindowType"  minOccurs="0" maxOccurs="unbounded" />
+			<xsd:element name="Property" type="PropertyType"  minOccurs="0" maxOccurs="unbounded" />
+		</xsd:sequence>
+		<xsd:attribute name="Type" type="xsd:string" use="required"/>
+		<xsd:attribute name="Name" type="xsd:string" use="required"/>
+	</xsd:complexType>
+
+	<xsd:complexType name="PropertyType">
+		<xsd:attribute name="Name" type="xsd:string" use="required"/>
+		<xsd:attribute name="Value" type="xsd:string" use="required"/>
+	</xsd:complexType>
+
+	<xsd:complexType name="LayoutImportType">
+		<xsd:attribute name="Filename" type="xsd:string" use="required"/>
+		<xsd:attribute name="Prefix" type="xsd:string" use="optional" default="" />
+		<xsd:attribute name="ResourceGroup" type="xsd:string" use="optional"  default="" />
+	</xsd:complexType>
+
+	<xsd:complexType name="EventType">
+		<xsd:attribute name="Name" type="xsd:string" use="required"/>
+		<xsd:attribute name="Function" type="xsd:string" use="required"/>
+	</xsd:complexType>
+
+</xsd:schema>
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/gui/TaharezLook.imageset
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/gui/TaharezLook.imageset	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/gui/TaharezLook.imageset	(revision 1092)
@@ -0,0 +1,200 @@
+<?xml version="1.0" ?>
+<Imageset Name="TaharezLook" Imagefile="TaharezLook.tga" NativeHorzRes="800" NativeVertRes="600" AutoScaled="true">
+	<Image Name="ClientBrush" XPos="2" YPos="2" Width="64" Height="64" />
+	<Image Name="WindowLeftEdge" XPos="6" YPos="95" Width="1" Height="22" XOffset="4" />
+	<Image Name="WindowRightEdge" XPos="34" YPos="95" Width="1" Height="22" XOffset="-5" />
+	<Image Name="WindowTopEdge" XPos="9" YPos="68" Width="23" Height="1" />
+	<Image Name="WindowBottomEdge" XPos="9" YPos="143" Width="23" Height="1" />
+	<Image Name="WindowTopLeft" XPos="2" YPos="68" Width="5" Height="24" />
+	<Image Name="WindowTopRight" XPos="34" YPos="68" Width="5" Height="24" />
+	<Image Name="WindowBottomLeft" XPos="2" YPos="120" Width="5" Height="24" />
+	<Image Name="WindowBottomRight" XPos="34" YPos="120" Width="5" Height="24" />
+	<Image Name="ButtonLeftNormal" XPos="68" YPos="20" Width="12" Height="16" />
+	<Image Name="ButtonMiddleNormal" XPos="82" YPos="20" Width="12" Height="16" />
+	<Image Name="ButtonRightNormal" XPos="96" YPos="20" Width="12" Height="16" />
+	<Image Name="ButtonLeftPushed" XPos="68" YPos="38" Width="12" Height="16" />
+	<Image Name="ButtonMiddlePushed" XPos="82" YPos="38" Width="12" Height="16" />
+	<Image Name="ButtonRightPushed" XPos="96" YPos="38" Width="12" Height="16" />
+	<Image Name="ButtonLeftHighlight" XPos="68" YPos="56" Width="12" Height="16" />
+	<Image Name="ButtonMiddleHighlight" XPos="82" YPos="56" Width="12" Height="16" />
+	<Image Name="ButtonRightHighlight" XPos="96" YPos="56" Width="12" Height="16" />
+	<Image Name="CheckboxNormal" XPos="110" YPos="2" Width="12" Height="12" />
+	<Image Name="CheckboxHover" XPos="110" YPos="30" Width="12" Height="12" />
+	<Image Name="CheckboxMark" XPos="110" YPos="16" Width="12" Height="12" />
+	<Image Name="RadioButtonNormal" XPos="124" YPos="2" Width="12" Height="12" />
+	<Image Name="RadioButtonHover" XPos="124" YPos="30" Width="12" Height="12" />
+	<Image Name="RadioButtonMark" XPos="124" YPos="16" Width="12" Height="12" />
+	<Image Name="TitlebarLeft" XPos="68" YPos="2" Width="8" Height="16" />
+	<Image Name="TitlebarMiddle" XPos="78" YPos="2" Width="8" Height="16" />
+	<Image Name="TitlebarRight" XPos="88" YPos="2" Width="8" Height="16" />
+	<Image Name="NewTitlebarLeft" XPos="61" YPos="127" Width="13" Height="16" />
+	<Image Name="NewTitlebarMiddle" XPos="77" YPos="127" Width="12" Height="16" />
+	<Image Name="NewTitlebarRight" XPos="92" YPos="127" Width="12" Height="16" />
+	<Image Name="SysAreaMiddle" XPos="107" YPos="127" Width="12" Height="16" />
+	<Image Name="SysAreaRight" XPos="122" YPos="127" Width="13" Height="16" />
+	<Image Name="StaticLeft" XPos="41" YPos="89" Width="6" Height="6" />
+	<Image Name="StaticRight" XPos="63" YPos="89" Width="6" Height="6" />
+	<Image Name="StaticTop" XPos="52" YPos="78" Width="6" Height="6" />
+	<Image Name="StaticBottom" XPos="52" YPos="100" Width="6" Height="6" />
+	<Image Name="StaticTopLeft" XPos="41" YPos="78" Width="6" Height="6" />
+	<Image Name="StaticTopRight" XPos="63" YPos="78" Width="6" Height="6" />
+	<Image Name="StaticBottomLeft" XPos="41" YPos="100" Width="6" Height="6" />
+	<Image Name="StaticBottomRight" XPos="63" YPos="100" Width="6" Height="6" />
+	<Image Name="StaticBackdrop" XPos="52" YPos="89" Width="6" Height="6" />
+	<Image Name="ProgressBarLeft" XPos="71" YPos="74" Width="7" Height="12" />
+	<Image Name="ProgressBarMiddle" XPos="80" YPos="74" Width="6" Height="12" />
+	<Image Name="ProgressBarRight" XPos="88" YPos="74" Width="6" Height="12" />
+	<Image Name="ProgressBarDimSegment" XPos="96" YPos="74" Width="8" Height="12" />
+	<Image Name="ProgressBarLitSegment" XPos="106" YPos="74" Width="8" Height="12" />
+	<Image Name="EditBoxLeft" XPos="41" YPos="108" Width="4" Height="18" />
+	<Image Name="EditBoxMiddle" XPos="47" YPos="108" Width="4" Height="18" />
+	<Image Name="EditBoxRight" XPos="53" YPos="108" Width="4" Height="18" />
+	<Image Name="EditBoxCarat" XPos="60" YPos="108" Width="4" Height="18" />
+	<Image Name="TextSelectionBrush" XPos="8" YPos="70" Width="16" Height="16" />
+	<Image Name="VertScrollTop" XPos="182" YPos="2" Width="20" Height="8" />
+	<Image Name="VertScrollMiddle" XPos="182" YPos="12" Width="20" Height="8" />
+	<Image Name="VertScrollBottom" XPos="182" YPos="22" Width="20" Height="8" />
+	<Image Name="VertScrollBarSegment" XPos="206" YPos="2" Width="4" Height="10" />
+	<Image Name="VertScrollThumbNormal" XPos="214" YPos="2" Width="8" Height="24" />
+	<Image Name="VertScrollThumbHover" XPos="224" YPos="2" Width="8" Height="24" />
+	<Image Name="VertScrollUpNormal" XPos="196" YPos="32" Width="12" Height="12" />
+	<Image Name="VertScrollDownNormal" XPos="182" YPos="32" Width="12" Height="12" />
+	<Image Name="VertScrollUpHover" XPos="196" YPos="46" Width="12" Height="12" />
+	<Image Name="VertScrollDownHover" XPos="182" YPos="46" Width="12" Height="12" />
+	<Image Name="MiniVertScrollBarSegment" XPos="207" YPos="60" Width="4" Height="10" />
+	<Image Name="MiniVertScrollThumbNormal" XPos="214" YPos="59" Width="7" Height="22" />
+	<Image Name="MiniVertScrollThumbTopNormal" XPos="214" YPos="59" Width="7" Height="5" />
+	<Image Name="MiniVertScrollThumbMiddleNormal" XPos="214" YPos="65" Width="7" Height="5" />
+	<Image Name="MiniVertScrollThumbBottomNormal" XPos="214" YPos="76" Width="7" Height="5" />
+	<Image Name="MiniVertScrollThumbTopHover" XPos="223" YPos="59" Width="7" Height="5" />
+	<Image Name="MiniVertScrollThumbMiddleHover" XPos="223" YPos="65" Width="7" Height="5" />
+	<Image Name="MiniVertScrollThumbBottomHover" XPos="223" YPos="76" Width="7" Height="5" />
+	<Image Name="MiniVertScrollThumbHover" XPos="223" YPos="59" Width="7" Height="22" />
+	<Image Name="MiniVertScrollUpNormal" XPos="194" YPos="60" Width="10" Height="9" />
+	<Image Name="MiniVertScrollDownNormal" XPos="182" YPos="59" Width="10" Height="9" />
+	<Image Name="MiniVertScrollUpHover" XPos="194" YPos="70" Width="10" Height="9" />
+	<Image Name="MiniVertScrollDownHover" XPos="182" YPos="69" Width="10" Height="9" />
+	<Image Name="VertSliderBody" XPos="234" YPos="2" Width="9" Height="48" />
+	<Image Name="VertSliderThumbNormal" XPos="217" YPos="28" Width="15" Height="6" />
+	<Image Name="VertSliderThumbHover" XPos="217" YPos="36" Width="15" Height="6" />
+	<Image Name="MiniHorzScrollBarSegment" XPos="244" YPos="80" Width="10" Height="4" />
+	<Image Name="MiniHorzScrollThumbNormal" XPos="233" YPos="87" Width="22" Height="7" />
+	<Image Name="MiniHorzScrollThumbLeftNormal" XPos="233" YPos="87" Width="5" Height="7" />
+	<Image Name="MiniHorzScrollThumbMiddleNormal" XPos="239" YPos="87" Width="5" Height="7" />
+	<Image Name="MiniHorzScrollThumbRightNormal" XPos="250" YPos="87" Width="5" Height="7" />
+	<Image Name="MiniHorzScrollThumbHover" XPos="233" YPos="96" Width="22" Height="7" />
+	<Image Name="MiniHorzScrollThumbLeftHover" XPos="233" YPos="96" Width="5" Height="7" />
+	<Image Name="MiniHorzScrollThumbMiddleHover" XPos="239" YPos="96" Width="5" Height="7" />
+	<Image Name="MiniHorzScrollThumbRightHover" XPos="250" YPos="96" Width="5" Height="7" />
+	<Image Name="MiniHorzScrollLeftNormal" XPos="246" YPos="55" Width="9" Height="10" />
+	<Image Name="MiniHorzScrollRightNormal" XPos="245" YPos="67" Width="9" Height="10" />
+	<Image Name="MiniHorzScrollLeftHover" XPos="236" YPos="55" Width="9" Height="10" />
+	<Image Name="MiniHorzScrollRightHover" XPos="235" YPos="67" Width="9" Height="10" />
+	<Image Name="ListboxLeft" XPos="41" YPos="89" Width="7" Height="6" />
+	<Image Name="ListboxRight" XPos="62" YPos="89" Width="7" Height="6" />
+	<Image Name="ListboxTop" XPos="52" YPos="78" Width="6" Height="7" />
+	<Image Name="ListboxBottom" XPos="52" YPos="99" Width="6" Height="7" />
+	<Image Name="ListboxTopLeft" XPos="41" YPos="78" Width="7" Height="7" />
+	<Image Name="ListboxTopRight" XPos="62" YPos="78" Width="7" Height="7" />
+	<Image Name="ListboxBottomLeft" XPos="41" YPos="99" Width="7" Height="7" />
+	<Image Name="ListboxBottomRight" XPos="62" YPos="99" Width="7" Height="7" />
+	<Image Name="ListboxBackdrop" XPos="52" YPos="89" Width="6" Height="6" />
+	<Image Name="ListboxSelectionBrush" XPos="8" YPos="70" Width="16" Height="16" />
+	<Image Name="ComboboxEditLeft" XPos="138" YPos="2" Width="8" Height="16" />
+	<Image Name="ComboboxEditMiddle" XPos="148" YPos="2" Width="8" Height="16" />
+	<Image Name="ComboboxListButtonNormal" XPos="158" YPos="2" Width="16" Height="16" />
+	<Image Name="ComboboxListButtonHover" XPos="158" YPos="20" Width="16" Height="16" />
+	<Image Name="ComboboxListLeft" XPos="138" YPos="48" Width="8" Height="8" />
+	<Image Name="ComboboxListRight" XPos="158" YPos="48" Width="8" Height="8" />
+	<Image Name="ComboboxListTop" XPos="148" YPos="48" Width="8" Height="8" />
+	<Image Name="ComboboxListBottom" XPos="148" YPos="58" Width="8" Height="8" />
+	<Image Name="ComboboxListTopLeft" XPos="138" YPos="38" Width="8" Height="8" />
+	<Image Name="ComboboxListTopRight" XPos="158" YPos="38" Width="8" Height="8" />
+	<Image Name="ComboboxListBottomLeft" XPos="138" YPos="58" Width="8" Height="8" />
+	<Image Name="ComboboxListBottomRight" XPos="158" YPos="58" Width="8" Height="8" />
+	<Image Name="ComboboxListBackdrop" XPos="148" YPos="48" Width="8" Height="8" />
+	<Image Name="ComboboxSelectionBrush" XPos="8" YPos="70" Width="16" Height="16" />
+	<Image Name="ComboboxDividerLeft" XPos="138" YPos="68" Width="14" Height="1" />
+	<Image Name="ComboboxDividerMiddle" XPos="154" YPos="68" Width="8" Height="1" />
+	<Image Name="ComboboxDividerRight" XPos="164" YPos="68" Width="14" Height="1" />
+	<Image Name="HeaderBarBackdropNormal" XPos="230" YPos="163" Width="10" Height="12" />
+	<Image Name="HeaderBarBackdropHover" XPos="230" YPos="163" Width="10" Height="12" />
+	<Image Name="HeaderBarSplitterNormal" XPos="225" YPos="92" Width="3" Height="16" />
+	<Image Name="HeaderBarSplitterHover" XPos="200" YPos="92" Width="3" Height="16" />
+	<Image Name="HeaderBarSortUp" XPos="233" YPos="178" Width="8" Height="8" />
+	<Image Name="HeaderBarSortDown" XPos="244" YPos="178" Width="8" Height="8" />
+	<Image Name="MultiListLeft" XPos="170" YPos="92" Width="7" Height="6" />
+	<Image Name="MultiListRight" XPos="191" YPos="92" Width="7" Height="6" />
+	<Image Name="MultiListTop" XPos="181" YPos="81" Width="6" Height="7" />
+	<Image Name="MultiListBottom" XPos="181" YPos="102" Width="6" Height="7" />
+	<Image Name="MultiListTopLeft" XPos="170" YPos="81" Width="7" Height="7" />
+	<Image Name="MultiListTopRight" XPos="191" YPos="81" Width="7" Height="7" />
+	<Image Name="MultiListBottomLeft" XPos="170" YPos="102" Width="7" Height="7" />
+	<Image Name="MultiListBottomRight" XPos="191" YPos="102" Width="7" Height="7" />
+	<Image Name="MultiListBackdrop" XPos="181" YPos="92" Width="6" Height="6" />
+	<Image Name="MultiListSelectionBrush" XPos="9" YPos="71" Width="14" Height="14" />
+	<Image Name="AltProgressLeft" XPos="71" YPos="88" Width="8" Height="12" />
+	<Image Name="AltProgressMiddle" XPos="81" YPos="88" Width="8" Height="12" />
+	<Image Name="AltProgressRight" XPos="91" YPos="88" Width="8" Height="12" />
+	<Image Name="AltProgressQuarter" XPos="102" YPos="89" Width="3" Height="4" />
+	<Image Name="AltProgressHalf" XPos="109" YPos="89" Width="4" Height="5" />
+	<Image Name="AltProgressLight1" XPos="100" YPos="97" Width="4" Height="8" />
+	<Image Name="AltProgressLight2" XPos="106" YPos="97" Width="4" Height="8" />
+	<Image Name="AltProgressLight3" XPos="112" YPos="97" Width="4" Height="8" />
+	<Image Name="AltProgressLight4" XPos="118" YPos="97" Width="4" Height="8" />
+	<Image Name="AltProgressLight5" XPos="124" YPos="97" Width="4" Height="8" />
+	<Image Name="AltProgressLight6" XPos="130" YPos="97" Width="4" Height="8" />
+	<Image Name="AltProgressLight7" XPos="136" YPos="97" Width="4" Height="8" />
+	<Image Name="AltProgressLight8" XPos="142" YPos="97" Width="4" Height="8" />
+	<Image Name="AltProgressLight9" XPos="148" YPos="97" Width="4" Height="8" />
+	<Image Name="AltProgressLight10" XPos="154" YPos="97" Width="4" Height="8" />
+	<Image Name="CloseButtonNormal" XPos="41" YPos="128" Width="16" Height="16" />
+	<Image Name="CloseButtonHover" XPos="41" YPos="146" Width="16" Height="16" />
+	<Image Name="CloseButtonPressed" XPos="41" YPos="164" Width="16" Height="16" />
+	<Image Name="NewCloseButtonNormal" XPos="90" YPos="146" Width="10" Height="10" />
+	<Image Name="NewCloseButtonHover" XPos="90" YPos="146" Width="10" Height="10" />
+	<Image Name="NewCloseButtonPressed" XPos="90" YPos="146" Width="10" Height="10" />
+	<Image Name="MultiLineEditboxLeft" XPos="41" YPos="89" Width="6" Height="6" />
+	<Image Name="MultiLineEditboxRight" XPos="63" YPos="89" Width="6" Height="6" />
+	<Image Name="MultiLineEditboxTop" XPos="52" YPos="78" Width="6" Height="6" />
+	<Image Name="MultiLineEditboxBottom" XPos="52" YPos="100" Width="6" Height="6" />
+	<Image Name="MultiLineEditboxTopLeft" XPos="41" YPos="78" Width="6" Height="6" />
+	<Image Name="MultiLineEditboxTopRight" XPos="63" YPos="78" Width="6" Height="6" />
+	<Image Name="MultiLineEditboxBottomLeft" XPos="41" YPos="100" Width="6" Height="6" />
+	<Image Name="MultiLineEditboxBottomRight" XPos="63" YPos="100" Width="6" Height="6" />
+	<Image Name="MultiLineEditboxBackdrop" XPos="52" YPos="89" Width="6" Height="6" />
+	<Image Name="MultiLineEditboxSelectionBrush" XPos="9" YPos="71" Width="14" Height="14" />
+	<Image Name="MouseTarget" XPos="182" YPos="127" Width="17" Height="17" XOffset="-8" YOffset="-8" />
+	<Image Name="MouseArrow" XPos="138" YPos="127" Width="31" Height="25" XOffset="0" YOffset="0" />
+	<Image Name="MouseMoveCursor" XPos="201" YPos="127" Width="18" Height="18" XOffset="-8" YOffset="-8" />
+	<Image Name="MouseNoSoCursor" XPos="221" YPos="127" Width="8" Height="18" XOffset="-3" YOffset="-8" />
+	<Image Name="MouseEsWeCursor" XPos="182" YPos="150" Width="18" Height="8" XOffset="-8" YOffset="-3" />
+	<Image Name="MouseNeSwCursor" XPos="201" YPos="147" Width="14" Height="14" XOffset="-7" YOffset="-7" />
+	<Image Name="MouseNwSeCursor" XPos="230" YPos="126" Width="14" Height="14" XOffset="-7" YOffset="-7" />
+	<Image Name="MouseTextBar" XPos="173" YPos="127" Width="7" Height="18" XOffset="-2" YOffset="-9" />
+	<Image Name="TabControlButtonPaneFiller" XPos="197" YPos="201" Width="7" Height="1" />
+	<Image Name="TabPaneLeft" XPos="41" YPos="89" Width="7" Height="6" />
+	<Image Name="TabPaneRight" XPos="62" YPos="89" Width="7" Height="6" />
+	<Image Name="TabPaneLower" XPos="52" YPos="99" Width="6" Height="7" />
+	<Image Name="TabPaneLowerLeft" XPos="41" YPos="99" Width="7" Height="7" />
+	<Image Name="TabPaneLowerRight" XPos="62" YPos="99" Width="7" Height="7" />
+	<Image Name="TabPaneMiddle" XPos="52" YPos="89" Width="6" Height="6" />
+	<Image Name="TabButtonLeftNormal" XPos="41" YPos="89" Width="7" Height="6" />
+	<Image Name="TabButtonRightNormal" XPos="62" YPos="89" Width="7" Height="6" />
+	<Image Name="TabButtonUpperNormal" XPos="52" YPos="78" Width="6" Height="7" />
+	<Image Name="TabButtonLowerNormal" XPos="52" YPos="99" Width="6" Height="7" />
+	<Image Name="TabButtonUpperLeftNormal" XPos="41" YPos="78" Width="7" Height="7" />
+	<Image Name="TabButtonUpperRightNormal" XPos="62" YPos="78" Width="7" Height="7" />
+	<Image Name="TabButtonLowerLeftNormal" XPos="41" YPos="99" Width="7" Height="7" />
+	<Image Name="TabButtonLowerRightNormal" XPos="187" YPos="195" Width="7" Height="7" />
+	<Image Name="TabButtonMiddleNormal" XPos="52" YPos="89" Width="6" Height="6" />
+	<Image Name="TabButtonLeftSelected" XPos="41" YPos="89" Width="7" Height="6" />
+	<Image Name="TabButtonRightSelected" XPos="62" YPos="89" Width="7" Height="6" />
+	<Image Name="TabButtonUpperSelected" XPos="52" YPos="78" Width="6" Height="7" />
+	<Image Name="TabButtonLowerSelected" XPos="52" YPos="89" Width="6" Height="6" />
+	<Image Name="TabButtonUpperLeftSelected" XPos="41" YPos="78" Width="7" Height="7" />
+	<Image Name="TabButtonUpperRightSelected" XPos="62" YPos="78" Width="7" Height="7" />
+	<Image Name="TabButtonLowerLeftSelected" XPos="41" YPos="99" Width="7" Height="7" />
+	<Image Name="TabButtonLowerRightSelected" XPos="62" YPos="99" Width="7" Height="7" />
+	<Image Name="TabButtonMiddleSelected" XPos="52" YPos="89" Width="6" Height="6" />
+</Imageset>
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/gui/cegui8.layout
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/gui/cegui8.layout	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/gui/cegui8.layout	(revision 1092)
@@ -0,0 +1,130 @@
+<?xml version="1.0" ?>
+<!-- Layout file from CEGUI Demo8 -->
+<GUILayout>
+<Window Type="DefaultGUISheet" Name="demo_root">
+
+	<Window Type="DefaultGUISheet" Name="Demo8">
+
+		<Property Name="RelativeMaxSize" Value="w:1 h:2" />
+		<Property Name="Size" Value="w:1 h:2" />
+
+		<Window Type="TaharezLook/VerticalScrollbar" Name="Demo8/ViewScroll">
+			<Property Name="Position" Value="x:0.0 y:0.0" />
+			<Property Name="Size" Value="w:0.03 h:0.75" />
+			<Property Name="DocumentSize" Value="2" />
+			<Property Name="PageSize" Value="1" />
+			<Property Name="StepSize" Value="0.01" />
+			<Property Name="OverlapSize" Value="0.5" />
+		</Window>
+
+        <Window Type="TaharezLook/FrameWindow" Name="Demo8/Window1">
+			<Property Name="Position" Value="x:0.05 y:0.1" />
+			<Property Name="RelativeMaxSize" Value="w:0.5 h:1" />
+			<Property Name="AbsoluteMinSize" Value="w:128 h:128" />
+			<Property Name="Size" Value="w:0.4 h:0.35" />
+			<Property Name="Text" Value="Demo 8 - Listbox Demo" />
+
+			<Window Type="TaharezLook/Listbox" Name="Demo8/Window1/Listbox">
+				<Property Name="Position" Value="x:0.05 y:0.1" />
+				<Property Name="RelativeMaxSize" Value="w:1 h:1" />
+				<Property Name="Size" Value="w:0.9 h:0.33" />
+			</Window>
+
+			<Window Type="TaharezLook/StaticText" Name="Demo8/Window1/Controls">
+				<Property Name="Position" Value="x:0.05 y:0.45" />
+				<Property Name="RelativeMaxSize" Value="w:1 h:1" />
+				<Property Name="Size" Value="w:0.9 h:0.5" />
+
+                <Window Type="TaharezLook/HorizontalScrollbar" Name="Demo8/Window1/Controls/Red">
+					<Property Name="Position" Value="x:0.05 y:0.05" />
+					<Property Name="RelativeMaxSize" Value="w:1 h:1" />
+					<Property Name="Size" Value="w:0.9 h:0.06" />
+					<Property Name="DocumentSize" Value="255" />
+					<Property Name="PageSize" Value="16" />
+					<Property Name="StepSize" Value="1" />
+					<Property Name="OverlapSize" Value="1" />
+				</Window>
+
+                <Window Type="TaharezLook/HorizontalScrollbar" Name="Demo8/Window1/Controls/Green">
+					<Property Name="Position" Value="x:0.05 y:0.12" />
+					<Property Name="RelativeMaxSize" Value="w:1 h:1" />
+					<Property Name="Size" Value="w:0.9 h:0.06" />
+					<Property Name="DocumentSize" Value="256" />
+					<Property Name="PageSize" Value="16" />
+					<Property Name="StepSize" Value="1" />
+					<Property Name="OverlapSize" Value="1" />
+				</Window>
+
+                <Window Type="TaharezLook/HorizontalScrollbar" Name="Demo8/Window1/Controls/Blue">
+					<Property Name="Position" Value="x:0.05 y:0.19" />
+					<Property Name="RelativeMaxSize" Value="w:1 h:1" />
+					<Property Name="Size" Value="w:0.9 h:0.06" />
+					<Property Name="DocumentSize" Value="255" />
+					<Property Name="PageSize" Value="16" />
+					<Property Name="StepSize" Value="1" />
+					<Property Name="OverlapSize" Value="1" />
+				</Window>
+
+				<Window Type="TaharezLook/StaticImage" Name="Demo8/Window1/Controls/ColourSample">
+					<Property Name="Position" Value="x:0.05 y:0.26" />
+					<Property Name="RelativeMaxSize" Value="w:1 h:1" />
+					<Property Name="Size" Value="w:0.9 h:0.1" />
+					<Property Name="Image" Value="set:TaharezLook image:ListboxSelectionBrush" />
+					<Property Name="ImageColours" Value="tl:0 tr:0 bl:0 br:0" />
+				</Window>
+
+				<Window Type="TaharezLook/Editbox" Name="Demo8/Window1/Controls/Editbox">
+					<Property Name="Position" Value="x:0.05 y:0.38" />
+					<Property Name="RelativeMaxSize" Value="w:1 h:1" />
+					<Property Name="Size" Value="w:0.6 h:0.15" />
+				</Window>
+
+                <Window Type="TaharezLook/Button" Name="Demo8/Window1/Controls/Add">
+					<Property Name="Position" Value="x:0.68 y:0.38" />
+					<Property Name="RelativeMaxSize" Value="w:1 h:1" />
+					<Property Name="Size" Value="w:0.3 h:0.15" />
+					<Property Name="Text" Value="Add" />
+				</Window>
+
+                <Window Type="TaharezLook/StaticText" Name="Demo8/Window1/Controls/ins1">
+					<Property Name="Position" Value="x:0.05 y:0.55" />
+					<Property Name="RelativeMaxSize" Value="w:1 h:1" />
+					<Property Name="Size" Value="w:0.9 h:0.4" />
+					<Property Name="HorzFormatting" Value="WordWrapCentred" />
+					<Property Name="Text" Value="Use this panel to add items.  The scrollbars change the selection colour." />
+				</Window>
+
+			</Window>
+			
+		</Window>
+
+        <Window Type="TaharezLook/FrameWindow" Name="Demo8/Window2">
+			<Property Name="Position" Value="x:0.55 y:0.1" />
+			<Property Name="RelativeMaxSize" Value="w:0.5 h:1" />
+			<Property Name="AbsoluteMinSize" Value="w:128 h:128" />
+			<Property Name="Size" Value="w:0.4 h:0.3" />
+			<Property Name="Text" Value="Demo 8 - Information Window" />
+
+            <Window Type="TaharezLook/StaticText" Name="Demo8/Window2/Info">
+				<Property Name="Position" Value="x:0.05 y:0.1" />
+				<Property Name="RelativeMaxSize" Value="w:1 h:1" />
+				<Property Name="Size" Value="w:0.9 h:0.3" />
+				<Property Name="HorzFormatting" Value="WordWrapCentred" />
+				<Property Name="Text" Value="The panel below gives some information about the item under the mouse." />
+			</Window>
+	
+            <Window Type="TaharezLook/StaticText" Name="Demo8/Window2/Tips">
+				<Property Name="Position" Value="x:0.05 y:0.5" />
+				<Property Name="RelativeMaxSize" Value="w:1 h:1" />
+				<Property Name="Size" Value="w:0.9 h:0.4" />
+				<Property Name="HorzFormatting" Value="WordWrapCentred" />
+			</Window>
+
+		</Window>
+
+
+	</Window>
+
+</Window>
+
+</GUILayout>
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/gui/Font.xsd
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/gui/Font.xsd	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/gui/Font.xsd	(revision 1092)
@@ -0,0 +1,49 @@
+<?xml version="1.0" ?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+	<xsd:element name="Font" type="FontType" />
+
+	<xsd:complexType name="FontType">
+		<xsd:sequence>
+			<xsd:element name="Mapping" type="MapType" maxOccurs="unbounded" minOccurs="0" />
+			<xsd:element name="GlyphSet" type="GlyphSetType" maxOccurs="unbounded" minOccurs="0" />
+			<xsd:element name="GlyphRange" type="GlyphRangeType" maxOccurs="unbounded" minOccurs="0" />
+			<xsd:element name="Glyph" type="GlyphType" maxOccurs="unbounded" minOccurs="0" />
+		</xsd:sequence>
+		<xsd:attributeGroup ref="FontAttrs" />
+	</xsd:complexType>
+	<xsd:complexType name="MapType">
+		<xsd:attribute name="Codepoint" type="xsd:nonNegativeInteger" use="required" />
+		<xsd:attribute name="Image" type="xsd:string" use="required" />
+		<xsd:attribute name="HorzAdvance" type="xsd:integer" use="optional" default="-1" />
+	</xsd:complexType>
+	<xsd:complexType name="GlyphType">
+		<xsd:attribute name="Codepoint" type="xsd:nonNegativeInteger" use="required" />
+	</xsd:complexType>
+	<xsd:complexType name="GlyphRangeType">
+		<xsd:attribute name="StartCodepoint" type="xsd:nonNegativeInteger" use="required" />
+		<xsd:attribute name="EndCodepoint" type="xsd:nonNegativeInteger" use="required" />
+	</xsd:complexType>
+	<xsd:complexType name="GlyphSetType">
+		<xsd:attribute name="Glyphs" type="xsd:string" use="required" />
+	</xsd:complexType>
+	<xsd:attributeGroup name="FontAttrs">
+		<xsd:attribute name="Name" type="xsd:string" use="required" />
+		<xsd:attribute name="Filename" type="xsd:string" use="required" />
+		<xsd:attribute name="ResourceGroup" type="xsd:string" use="optional"  default="" />
+		<xsd:attribute name="Type" use="required">
+			<xsd:simpleType>
+				<xsd:restriction base="xsd:string">
+					<xsd:enumeration value="Dynamic" />
+					<xsd:enumeration value="Static" />
+				</xsd:restriction>
+			</xsd:simpleType>
+		</xsd:attribute>
+		<xsd:attribute name="Size" type="xsd:nonNegativeInteger" use="optional" default="12" />
+		<xsd:attribute name="FirstCodepoint" type="xsd:nonNegativeInteger" use="optional" default="32" />
+		<xsd:attribute name="LastCodepoint" type="xsd:nonNegativeInteger" use="optional" default="127" />
+		<xsd:attribute name="NativeHorzRes" type="xsd:nonNegativeInteger" use="optional" default="640" />
+		<xsd:attribute name="NativeVertRes" type="xsd:nonNegativeInteger" use="optional" default="480" />
+		<xsd:attribute name="AutoScaled" type="xsd:boolean" use="optional" default="false" />
+		<xsd:attribute name="AntiAlias" type="xsd:boolean" use="optional" default="true" />
+	</xsd:attributeGroup>
+</xsd:schema>
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/gui/GUIScheme.xsd
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/gui/GUIScheme.xsd	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/gui/GUIScheme.xsd	(revision 1092)
@@ -0,0 +1,31 @@
+<?xml version="1.0" ?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+	<xsd:element name="GUIScheme" type="SchemeType" />
+	<xsd:complexType name="SchemeType">
+		<xsd:sequence>
+			<xsd:element name="Imageset" type="NamedDataType" minOccurs="0" maxOccurs="unbounded" />
+			<xsd:element name="Font" type="NamedDataType" minOccurs="0" maxOccurs="unbounded" />
+			<xsd:element name="WindowSet" type="WindowSetType" minOccurs="0" maxOccurs="unbounded" />
+			<xsd:element name="WindowAlias" type="WindowAliasType" minOccurs="0" maxOccurs="unbounded" />
+		</xsd:sequence>
+		<xsd:attribute name="Name" type="xsd:string" use="required" />
+	</xsd:complexType>
+	<xsd:complexType name="WindowSetType">
+		<xsd:sequence>
+			<xsd:element name="WindowFactory" type="WindowFactoryType" maxOccurs="unbounded" />
+		</xsd:sequence>
+		<xsd:attribute name="Filename" type="xsd:string" use="required" />
+	</xsd:complexType>
+	<xsd:complexType name="NamedDataType">
+		<xsd:attribute name="Name" type="xsd:string" use="required" />
+		<xsd:attribute name="Filename" type="xsd:string" use="required" />
+		<xsd:attribute name="ResourceGroup" type="xsd:string" use="optional"  default="" />
+	</xsd:complexType>
+	<xsd:complexType name="WindowFactoryType">
+		<xsd:attribute name="Name" type="xsd:string" use="required" />
+	</xsd:complexType>
+	<xsd:complexType name="WindowAliasType">
+		<xsd:attribute name="Alias" type="xsd:string" use="required" />
+		<xsd:attribute name="Target" type="xsd:string" use="required" />
+	</xsd:complexType>
+</xsd:schema>
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/gui/TaharezLook.scheme
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/gui/TaharezLook.scheme	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/gui/TaharezLook.scheme	(revision 1092)
@@ -0,0 +1,38 @@
+<?xml version="1.0" ?>
+<GUIScheme Name="TaharezLook">
+	<Imageset Name="TaharezLook" Filename="TaharezLook.imageset" />
+	<Font Name="Tahoma-12" Filename="tahoma-12.font" />
+	<WindowSet Filename="CEGUITaharezLook">
+		<WindowFactory Name="TaharezLook/AlternateProgressBar" />
+		<WindowFactory Name="TaharezLook/Button" />
+		<WindowFactory Name="TaharezLook/Checkbox" />
+		<WindowFactory Name="TaharezLook/CloseButton" />
+		<WindowFactory Name="TaharezLook/Combobox" />
+		<WindowFactory Name="TaharezLook/ComboDropList" />
+		<WindowFactory Name="TaharezLook/ComboEditbox" />
+		<WindowFactory Name="TaharezLook/Editbox" />
+		<WindowFactory Name="TaharezLook/FrameWindow" />
+		<WindowFactory Name="TaharezLook/LargeVerticalScrollbar" />
+		<WindowFactory Name="TaharezLook/LargeVerticalScrollbarThumb" />
+		<WindowFactory Name="TaharezLook/Listbox" />
+		<WindowFactory Name="TaharezLook/ListHeader" />
+		<WindowFactory Name="TaharezLook/ListHeaderSegment" />
+		<WindowFactory Name="TaharezLook/HorizontalScrollbar" />
+		<WindowFactory Name="TaharezLook/HorizontalScrollbarThumb" />
+		<WindowFactory Name="TaharezLook/MultiColumnList" />
+		<WindowFactory Name="TaharezLook/MultiLineEditbox" />
+		<WindowFactory Name="TaharezLook/ProgressBar" />
+		<WindowFactory Name="TaharezLook/RadioButton" />
+		<WindowFactory Name="TaharezLook/Slider" />
+		<WindowFactory Name="TaharezLook/SliderThumb" />
+		<WindowFactory Name="TaharezLook/StaticImage" />
+		<WindowFactory Name="TaharezLook/StaticText" />
+		<WindowFactory Name="TaharezLook/TabButton" />
+		<WindowFactory Name="TaharezLook/TabControl" />
+		<WindowFactory Name="TaharezLook/TabPane" />
+		<WindowFactory Name="TaharezLook/Titlebar" />
+		<WindowFactory Name="TaharezLook/VerticalScrollbar" />
+		<WindowFactory Name="TaharezLook/VerticalScrollbarThumb" />
+		<WindowFactory Name="TaharezLook/VUMeter" />
+	</WindowSet>
+</GUIScheme>
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/gui/Imageset.xsd
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/gui/Imageset.xsd	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/gui/Imageset.xsd	(revision 1092)
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+
+	<xsd:element name="Imageset" type="ImagesetType"/>
+	
+	<xsd:complexType name="ImagesetType">
+		<xsd:sequence>
+			<xsd:element name="Image" type="ImageType" maxOccurs="unbounded"/>
+		</xsd:sequence>
+		<xsd:attribute name="Imagefile" type="xsd:string" use="required"/>
+		<xsd:attribute name="ResourceGroup" type="xsd:string" use="optional"  default="" />
+		<xsd:attribute name="Name" type="xsd:string" use="required"/>
+		<xsd:attribute name="NativeHorzRes" type="xsd:nonNegativeInteger" use="optional" default="640" />
+		<xsd:attribute name="NativeVertRes" type="xsd:nonNegativeInteger" use="optional" default="480" />
+		<xsd:attribute name="AutoScaled" type="xsd:boolean" use="optional" default="false" />
+	</xsd:complexType>
+	
+	<xsd:complexType name="ImageType">
+		<xsd:attribute name="Name" type="xsd:string" use="required"/>
+		<xsd:attribute name="XPos" type="xsd:nonNegativeInteger" use="required"/>
+		<xsd:attribute name="YPos" type="xsd:nonNegativeInteger" use="required"/>
+		<xsd:attribute name="Width" type="xsd:nonNegativeInteger" use="required"/>
+		<xsd:attribute name="Height" type="xsd:nonNegativeInteger" use="required"/>
+		<xsd:attribute name="XOffset" type="xsd:integer" use="optional" default="0"/>
+		<xsd:attribute name="YOffset" type="xsd:integer" use="optional" default="0"/>						
+	</xsd:complexType>
+
+</xsd:schema>
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/gui/ogregui.layout
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/gui/ogregui.layout	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/gui/ogregui.layout	(revision 1092)
@@ -0,0 +1,79 @@
+<?xml version="1.0" ?>
+<GUILayout>
+<Window Type="DefaultGUISheet" Name="root">
+    <Window Type="DefaultGUISheet" Name="OgreGuiDemo">
+		<Property Name="Size" Value="w:0.25 h:1" />
+
+        <Window Type="TaharezLook/TabControl" Name="OgreGuiDemo/TabCtrl">
+            <Property Name="Position" Value="x:0.0 y:0.0" />
+            <Property Name="Size" Value="w:1 h:0.5" />
+
+            <Window Type="DefaultGUISheet" Name="OgreGuiDemo/TabCtrl/Page1">
+                <Property Name="Text" Value="File" />
+                <Window Type="TaharezLook/Button" Name="OgreGuiDemo/TabCtrl/Page1/NewButton">
+                    <Property Name="Position" Value="x:0.1 y:0.1" />
+                    <Property Name="Size" Value="w:0.8 h:0.07" />
+                    <Property Name="Text" Value="New" />
+                </Window>
+                <Window Type="TaharezLook/Button" Name="OgreGuiDemo/TabCtrl/Page1/LoadButton">
+                    <Property Name="Position" Value="x:0.1 y:0.2" />
+                    <Property Name="Size" Value="w:0.8 h:0.07" />
+                    <Property Name="Text" Value="Load Test Layout" />
+                </Window>
+                <Window Type="TaharezLook/Button" Name="OgreGuiDemo/TabCtrl/Page1/QuitButton">
+                    <Property Name="Position" Value="x:0.1 y:0.3" />
+                    <Property Name="Size" Value="w:0.8 h:0.07" />
+                    <Property Name="Text" Value="Quit" />
+                </Window>
+            </Window>
+            <Window Type="DefaultGUISheet" Name="OgreGuiDemo/TabCtrl/Page2">
+                <Property Name="Text" Value="Objects" />
+                <Window Type="TaharezLook/Combobox" Name="OgreGuiDemo/TabCtrl/Page2/ObjectTypeList">
+                    <Property Name="Position" Value="x:0.1 y:0.1" />
+                    <Property Name="Size" Value="w:0.8 h:0.5" />
+                    <Property Name="Text" Value="Select Type" />
+                    <Property Name="ClippedByParent" Value="false" />
+                    <Property Name="ReadOnly" Value="true" />
+                </Window>
+            </Window>
+        </Window>
+        <!--<Window Type="TaharezLook/FrameWindow" Name="OgreGuiDemo/WindowPropertiesWindow">
+            <Property Name="Size" Value="w:1 h:0.3" />
+            <Property Name="Position" Value="x:0 y:0.52" />
+            <Property Name="TitlebarEnabled" Value="false" />
+            <Property Name="CloseButtonEnabled" Value="false" />
+            <Property Name="Visible" Value="false" />
+            <Property Name="Text" Value="Editor Window" />
+            <Window Type="TaharezLook/StaticText" Name="OgreGuiDemo/WindowProperties/NameText">
+                <Property Name="Position" Value="x:0.05 y:0.2" />
+                <Property Name="Size" Value="w:0.9 h:0.4" />
+                <Property Name="Text" Value="Name:" />
+            </Window>
+
+            <Window Type="TaharezLook/Button" Name="OgreGuiDemo/WindowPropertiesWindow/OKButton">
+                <Property Name="Position" Value="x:0.15 y:0.8" />
+                <Property Name="Size" Value="w:0.3 h:0.1" />
+                <Property Name="Text" Value="OK" />
+            </Window>
+            <Window Type="TaharezLook/Button" Name="OgreGuiDemo/WindowPropertiesWindow/CancelButton">
+                <Property Name="Position" Value="x:0.55 y:0.8" />
+                <Property Name="Size" Value="w:0.3 h:0.1" />
+                <Property Name="Text" Value="Cancel" />
+            </Window>
+        </Window>-->
+	</Window>
+    <Window Type="DefaultGUISheet" Name="OgreGuiDemo2">
+		<Property Name="Size" Value="w:0.75 h:1" />
+		<Property Name="Position" Value="x:0.25 y:0" />
+        <Window Type="TaharezLook/FrameWindow" Name="OgreGuiDemo2/MainWindow">
+            <Property Name="Size" Value="w:1 h:1" />
+            <Property Name="Position" Value="x:0 y:0" />
+            <Property Name="DragMovingEnabled" Value="false" />
+            <Property Name="RollUpEnabled" Value="false" />
+            <Property Name="CloseButtonEnabled" Value="false" />
+            <Property Name="Text" Value="Editor Window" />
+        </Window>
+    </Window>
+</Window>
+
+</GUILayout>
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/gui/tahoma-12.font
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/gui/tahoma-12.font	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/gui/tahoma-12.font	(revision 1092)
@@ -0,0 +1,4 @@
+<?xml version="1.0" ?>
+
+<Font Name="Tahoma-12" Filename="tahoma.ttf" Type="Dynamic" Size="12" NativeHorzRes="800" NativeVertRes="600" AutoScaled="true"/>
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/overlays/Example-CubeMapping.overlay
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/overlays/Example-CubeMapping.overlay	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/overlays/Example-CubeMapping.overlay	(revision 1092)
@@ -0,0 +1,139 @@
+Example/CubeMappingOverlay
+{
+	zorder 500
+	// Stats block
+	container BorderPanel(Core/CubeMappingPanel)
+	{
+		metrics_mode pixels
+		vert_align top
+		left 5 
+		top 5
+		width 250
+		height 130
+		material Core/StatsBlockCenter
+        	border_size 1 1 1 1
+        	border_material Core/StatsBlockBorder
+        	border_topleft_uv     0.0000 1.0000 0.0039 0.9961
+	    	border_top_uv         0.0039 1.0000 0.9961 0.9961
+	    	border_topright_uv    0.9961 1.0000 1.0000 0.9961
+	    	border_left_uv        0.0000 0.9961 0.0039 0.0039
+	    	border_right_uv       0.9961 0.9961 1.0000 0.0039
+	    	border_bottomleft_uv  0.0000 0.0039 0.0039 0.0000
+        	border_bottom_uv      0.0039 0.0039 0.9961 0.0000
+	    	border_bottomright_uv 0.9961 0.0039 1.0000 0.0000
+
+		element TextArea(Example/CubeMapping/Displacement)
+		{
+			metrics_mode pixels
+			left 5
+			top 5
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption [1/2] Displacement:
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+
+		element TextArea(Example/CubeMapping/Density)
+		{
+			metrics_mode pixels
+			left 5
+			top 20
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption [3/4] Noise density:
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+
+		element TextArea(Example/CubeMapping/TimeDensity)
+		{
+			metrics_mode pixels
+			left 5
+			top 35
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption [5/6] Time density:
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+
+
+		element TextArea(Example/CubeMapping/Noise)
+		{
+			metrics_mode pixels
+			left 5
+			top 50
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption [N] Noise: _not_set_
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+
+		element TextArea(Example/CubeMapping/Material)
+		{
+			metrics_mode pixels
+			left 5
+			top 65
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption [M] Material: *UNIMPLEMENTED*
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+
+		element TextArea(Example/CubeMapping/Object)
+		{
+			metrics_mode pixels
+			left 5
+			top 80
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption [O] Object:
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+
+		element TextArea(Example/CubeMapping/CubeMap)
+		{
+			metrics_mode pixels
+			left 5
+			top 95
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption [C] CubeMap:
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+		
+		element TextArea(Example/CubeMapping/Random)
+		{
+			metrics_mode pixels
+			left 5
+			top 110
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption [SPACE] Go random!
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+
+	}
+}
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/overlays/Example-DynTex.overlay
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/overlays/Example-DynTex.overlay	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/overlays/Example-DynTex.overlay	(revision 1092)
@@ -0,0 +1,194 @@
+Example/DynTexOverlay
+{
+	zorder 500
+	// Stats block
+	container BorderPanel(Core/DynTexPanel)
+	{
+		metrics_mode pixels
+		vert_align top
+		left 5 
+		top 5
+		width 200
+		height 100
+		material Core/StatsBlockCenter
+        	border_size 1 1 1 1
+        	border_material Core/StatsBlockBorder
+        	border_topleft_uv     0.0000 1.0000 0.0039 0.9961
+	    	border_top_uv         0.0039 1.0000 0.9961 0.9961
+	    	border_topright_uv    0.9961 1.0000 1.0000 0.9961
+	    	border_left_uv        0.0000 0.9961 0.0039 0.0039
+	    	border_right_uv       0.9961 0.9961 1.0000 0.0039
+	    	border_bottomleft_uv  0.0000 0.0039 0.0039 0.0000
+        	border_bottom_uv      0.0039 0.0039 0.9961 0.0000
+	    	border_bottomright_uv 0.9961 0.0039 1.0000 0.0000
+
+		element TextArea(Example/DynTex/Note)
+		{
+			metrics_mode pixels
+			left 5
+			top 5
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption Reaction parameters
+			colour_top 0.7 0.9 0.7
+			colour_bottom 0.5 0.7 0.5
+		}
+
+		element TextArea(Example/DynTex/Param_K)
+		{
+			metrics_mode pixels
+			left 5
+			top 20
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption [1/2]K:
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+
+		element TextArea(Example/DynTex/Param_F)
+		{
+			metrics_mode pixels
+			left 5
+			top 35
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption [3/4]F:
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+
+		element TextArea(Example/DynTex/Param_A0)
+		{
+			metrics_mode pixels
+			left 5
+			top 50
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption [5/6]Diffusion 1:
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+
+		element TextArea(Example/DynTex/Param_A1)
+		{
+			metrics_mode pixels
+			left 5
+			top 65
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption [7/8]Diffusion 2:
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+
+		element TextArea(Example/DynTex/Zero)
+		{
+			metrics_mode pixels
+			left 5
+			top 80
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption [0]Reset initial conditions
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+
+
+	}
+}
+Example/VolTexOverlay
+{
+	zorder 500
+	// Stats block
+	container BorderPanel(Example/VolTexPanel)
+	{
+		metrics_mode pixels
+		vert_align top
+		left 5 
+		top 5
+		width 200
+		height 70
+		material Core/StatsBlockCenter
+        	border_size 1 1 1 1
+        	border_material Core/StatsBlockBorder
+        	border_topleft_uv     0.0000 1.0000 0.0039 0.9961
+	    	border_top_uv         0.0039 1.0000 0.9961 0.9961
+	    	border_topright_uv    0.9961 1.0000 1.0000 0.9961
+	    	border_left_uv        0.0000 0.9961 0.0039 0.0039
+	    	border_right_uv       0.9961 0.9961 1.0000 0.0039
+	    	border_bottomleft_uv  0.0000 0.0039 0.0039 0.0000
+        	border_bottom_uv      0.0039 0.0039 0.9961 0.0000
+	    	border_bottomright_uv 0.9961 0.0039 1.0000 0.0000
+
+		element TextArea(Example/VolTex/Note)
+		{
+			metrics_mode pixels
+			left 5
+			top 5
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption Julia parameters
+			colour_top 0.7 0.9 0.7
+			colour_bottom 0.5 0.7 0.5
+		}
+
+		element TextArea(Example/VolTex/Param_real)
+		{
+			metrics_mode pixels
+			left 5
+			top 20
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption [1/2]real:
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+
+		element TextArea(Example/VolTex/Param_imag)
+		{
+			metrics_mode pixels
+			left 5
+			top 35
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption [3/4]imag:
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+
+		element TextArea(Example/VolTex/Param_theta)
+		{
+			metrics_mode pixels
+			left 5
+			top 50
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption [5/6]theta:
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+
+
+	}
+}
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/overlays/DP3.overlay
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/overlays/DP3.overlay	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/overlays/DP3.overlay	(revision 1092)
@@ -0,0 +1,105 @@
+Example/DP3Overlay
+{
+	zorder 500
+	// Stats block
+	container BorderPanel(Core/DP3Panel)
+	{
+		metrics_mode pixels
+		vert_align top
+		left 5 
+		top 5
+		width 500
+		height 70
+		material Core/StatsBlockCenter
+        	border_size 1 1 1 1
+        	border_material Core/StatsBlockBorder
+        	border_topleft_uv     0.0000 1.0000 0.0039 0.9961
+	    	border_top_uv         0.0039 1.0000 0.9961 0.9961
+	    	border_topright_uv    0.9961 1.0000 1.0000 0.9961
+	    	border_left_uv        0.0000 0.9961 0.0039 0.0039
+	    	border_right_uv       0.9961 0.9961 1.0000 0.0039
+	    	border_bottomleft_uv  0.0000 0.0039 0.0039 0.0000
+        	border_bottom_uv      0.0039 0.0039 0.9961 0.0000
+	    	border_bottomright_uv 0.9961 0.0039 1.0000 0.0000
+
+		element TextArea(Example/DP3/Light)
+		{
+			metrics_mode pixels
+			left 5
+			top 5
+			width 180
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption [1,2,3] toggle lights
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+
+		element TextArea(Example/DP3/Object)
+		{
+			metrics_mode pixels
+			left 5
+			top 20
+			width 180
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption [O] change objects
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+		element TextArea(Example/DP3/ObjectInfo)
+		{
+			metrics_mode pixels
+			left 155
+			top 20
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption Current:
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+
+		element TextArea(Example/DP3/Materials)
+		{
+			metrics_mode pixels
+			left 5
+			top 35
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption [M] Change material
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+		element TextArea(Example/DP3/MaterialInfo)
+		{
+			metrics_mode pixels
+			left 155
+			top 35
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption Current:
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+		element TextArea(Example/DP3/Info)
+		{
+			metrics_mode pixels
+			left 5
+			top 50
+			width 250
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+	}
+}
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/overlays/Demo_LodStrips.overlay
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/overlays/Demo_LodStrips.overlay	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/overlays/Demo_LodStrips.overlay	(revision 1092)
@@ -0,0 +1,52 @@
+Demo_LodStrips/Overlay
+{
+	zorder 500
+	// Stats block
+	container BorderPanel(Demo_LodStrips/Panel)
+	{
+		metrics_mode pixels
+		vert_align top
+		left 5 
+		top 5
+		width 300
+		height 45
+		material Core/StatsBlockCenter
+        	border_size 1 1 1 1
+        	border_material Core/StatsBlockBorder
+        	border_topleft_uv     0.0000 1.0000 0.0039 0.9961
+	    	border_top_uv         0.0039 1.0000 0.9961 0.9961
+	    	border_topright_uv    0.9961 1.0000 1.0000 0.9961
+	    	border_left_uv        0.0000 0.9961 0.0039 0.0039
+	    	border_right_uv       0.9961 0.9961 1.0000 0.0039
+	    	border_bottomleft_uv  0.0000 0.0039 0.0039 0.0000
+        	border_bottom_uv      0.0039 0.0039 0.9961 0.0000
+	    	border_bottomright_uv 0.9961 0.0039 1.0000 0.0000
+
+
+		element TextArea(Demo_LodStrips/Info_1)
+		{
+			metrics_mode pixels
+			left 5
+			top 5
+			width 180
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+		element TextArea(Demo_LodStrips/Info_2)
+		{
+			metrics_mode pixels
+			left 5
+			top 20
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+	}
+}
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/overlays/Shadows.overlay
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/overlays/Shadows.overlay	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/overlays/Shadows.overlay	(revision 1092)
@@ -0,0 +1,157 @@
+Example/ShadowsOverlay
+{
+	zorder 500
+	// Stats block
+	container BorderPanel(Core/ShadowsPanel)
+	{
+		metrics_mode pixels
+		vert_align top
+		left 5 
+		top 5
+		width 500
+		height 55
+		material Core/StatsBlockCenter
+        	border_size 1 1 1 1
+        	border_material Core/StatsBlockBorder
+        	border_topleft_uv     0.0000 1.0000 0.0039 0.9961
+	    	border_top_uv         0.0039 1.0000 0.9961 0.9961
+	    	border_topright_uv    0.9961 1.0000 1.0000 0.9961
+	    	border_left_uv        0.0000 0.9961 0.0039 0.0039
+	    	border_right_uv       0.9961 0.9961 1.0000 0.0039
+	    	border_bottomleft_uv  0.0000 0.0039 0.0039 0.0000
+        	border_bottom_uv      0.0039 0.0039 0.9961 0.0000
+	    	border_bottomright_uv 0.9961 0.0039 1.0000 0.0000
+
+
+		element TextArea(Example/Shadows/ShadowTechnique)
+		{
+			metrics_mode pixels
+			left 5
+			top 5
+			width 180
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption [O] Shadow Technique
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+		element TextArea(Example/Shadows/ShadowTechniqueInfo)
+		{
+			metrics_mode pixels
+			left 155
+			top 5
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption Current:
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+
+		element TextArea(Example/Shadows/Materials)
+		{
+			metrics_mode pixels
+			left 5
+			top 20
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption [M] Athene Material
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+		element TextArea(Example/Shadows/MaterialInfo)
+		{
+			metrics_mode pixels
+			left 155
+			top 20
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption Current:
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+		element TextArea(Example/Shadows/Info)
+		{
+			metrics_mode pixels
+			left 5
+			top 35
+			width 250
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+	}
+}
+
+Example/ShadowsOverlay2
+{
+	zorder 500
+	// Stats block
+	container BorderPanel(Core/ShadowsPanel2)
+	{
+		metrics_mode pixels
+		vert_align top
+		left 5 
+		top 5
+		width 500
+		height 55
+		material Core/StatsBlockCenter
+        	border_size 1 1 1 1
+        	border_material Core/StatsBlockBorder
+        	border_topleft_uv     0.0000 1.0000 0.0039 0.9961
+	    	border_top_uv         0.0039 1.0000 0.9961 0.9961
+	    	border_topright_uv    0.9961 1.0000 1.0000 0.9961
+	    	border_left_uv        0.0000 0.9961 0.0039 0.0039
+	    	border_right_uv       0.9961 0.9961 1.0000 0.0039
+	    	border_bottomleft_uv  0.0000 0.0039 0.0039 0.0000
+        	border_bottom_uv      0.0039 0.0039 0.9961 0.0000
+	    	border_bottomright_uv 0.9961 0.0039 1.0000 0.0000
+
+
+		element TextArea(Example/Shadows/Info_1)
+		{
+			metrics_mode pixels
+			left 5
+			top 5
+			width 180
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+		element TextArea(Example/Shadows/Info_2)
+		{
+			metrics_mode pixels
+			left 5
+			top 20
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+		element TextArea(Example/Shadows/Info_3)
+		{
+			metrics_mode pixels
+			left 5
+			top 35
+			width 250
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+	}
+}
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/overlays/BasicOgreGuiTemplates.inc
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/overlays/BasicOgreGuiTemplates.inc	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/overlays/BasicOgreGuiTemplates.inc	(revision 1092)
@@ -0,0 +1,47 @@
+// Ogre overlay scripts
+template container BorderPanel(SS/Templates/BasicBorderPanel)
+{
+	left 0
+	top 0
+	width 1
+	height 1
+	material Core/StatsBlockCenter
+    	border_size 0.06 0.06 0.06665 0.06665
+    	border_material Core/StatsBlockBorder
+    	border_topleft_uv     0.0000 0.0000 0.1914 0.2031
+	border_top_uv         0.1914 0.0000 0.8086 0.2031
+	border_topright_uv    0.8086 0.0000 1.0000 0.2031
+	border_left_uv        0.0000 0.2031 0.1914 0.7852
+	border_right_uv       0.8086 0.2031 1.0000 0.7852
+	border_bottomleft_uv  0.0000 0.7852 0.1914 1.0000
+        border_bottom_uv      0.1914 0.7852 0.8086 1.0000
+	border_bottomright_uv 0.8086 0.7852 1.0000 1.0000
+}
+
+template container BorderPanel(SS/Templates/BasicSmallBorderPanel) : SS/Templates/BasicBorderPanel
+{
+    border_size 0.04 0.04 0.04665 0.04665
+}
+
+
+template element TextArea(SS/Templates/BasicText)
+{
+	font_name Ogre
+	char_height 0.08
+	colour_top 1 1 0
+	colour_bottom 1 0.2 0.2
+	left 0.03
+	top 0.02
+	width 0.12
+	height 0.09
+}
+
+template container Panel(SS/Templates/BasicPanel)
+{
+	left 0 
+	top 0
+	width 1
+	height 1
+	material Core/StatsBlockCenter
+}
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/overlays/Example-Water.overlay
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/overlays/Example-Water.overlay	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/overlays/Example-Water.overlay	(revision 1092)
@@ -0,0 +1,168 @@
+Example/WaterOverlay
+{
+	zorder 500
+	// Stats block
+	container BorderPanel(Core/WaterPanel)
+	{
+		metrics_mode pixels
+		vert_align top
+		left 5 
+		top 5
+		width 400
+		height 87
+		material Core/StatsBlockCenter
+        	border_size 1 1 1 1
+        	border_material Core/StatsBlockBorder
+        	border_topleft_uv     0.0000 1.0000 0.0039 0.9961
+	    	border_top_uv         0.0039 1.0000 0.9961 0.9961
+	    	border_topright_uv    0.9961 1.0000 1.0000 0.9961
+	    	border_left_uv        0.0000 0.9961 0.0039 0.0039
+	    	border_right_uv       0.9961 0.9961 1.0000 0.0039
+	    	border_bottomleft_uv  0.0000 0.0039 0.0039 0.0000
+        	border_bottom_uv      0.0039 0.0039 0.9961 0.0000
+	    	border_bottomright_uv 0.9961 0.0039 1.0000 0.0000
+
+		    
+		element TextArea(Example/Water/Normals)
+		{
+			metrics_mode pixels
+			left 5
+			top 5
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption [N]Normals:
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+
+		element TextArea(Example/Water/Rain)
+		{
+			metrics_mode pixels
+			left 5
+			top 20
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption [SPACE]Rain
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+
+		element TextArea(Example/Water/SkyBox)
+		{
+			metrics_mode pixels
+			left 5
+			top 35
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption [B]SkyBox: 
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+
+		element TextArea(Example/Water/Depth)
+		{
+			metrics_mode pixels
+			left 5
+			top 50
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption [U/J]Head depth:
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+
+		element TextArea(Example/Water/Material)
+		{
+			metrics_mode pixels
+			left 5
+			top 65
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption [M]Material:
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+
+		element TextArea(Example/Water/Note)
+		{
+			metrics_mode pixels
+			left 200
+			top 5
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption Careful with these values!
+			colour_top 0.7 0.9 0.7
+			colour_bottom 0.5 0.7 0.5
+		}
+
+		element TextArea(Example/Water/Param_C)
+		{
+			metrics_mode pixels
+			left 200
+			top 20
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption [1/2]Ripple speed:
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+
+		element TextArea(Example/Water/Param_D)
+		{
+			metrics_mode pixels
+			left 200
+			top 35
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption [3/4]Distance:
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+
+		element TextArea(Example/Water/Param_U)
+		{
+			metrics_mode pixels
+			left 200
+			top 50
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption [5/6]Viscosity:
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+
+		element TextArea(Example/Water/Param_T)
+		{
+			metrics_mode pixels
+			left 200
+			top 65
+			width 90
+			height 30
+			font_name TrebuchetMSBold
+			char_height 16
+			caption [7/8]Time period:
+			colour_top 0.5 0.7 0.5
+			colour_bottom 0.3 0.5 0.3
+		}
+
+
+	}
+}
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/fonts/sample.fontdef
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/fonts/sample.fontdef	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/fonts/sample.fontdef	(revision 1092)
@@ -0,0 +1,121 @@
+IronMaiden
+{
+	// Blame cearny for this one!
+	type 		truetype
+	source 		maiden.ttf
+	size 		48
+	resolution 	96
+}
+
+StarWars
+{
+	// Now this one I agree with ;)
+	// A Star Wars font :)
+	type 		truetype
+	source 		solo5.ttf
+	size 		16
+	resolution 	96
+}
+
+Ogre
+{
+	type	image
+	source 	font_matisse_itc.png
+
+glyph	!	0.0898438	0.125	0.0976563	0.1875
+glyph	 	0.152344	0.125	0.160156	0.1875
+glyph	#	0.205078	0.125	0.232422	0.1875
+glyph	$	0.273438	0.125	0.289063	0.1875
+glyph	%	0.330078	0.125	0.357422	0.1875
+glyph	&	0.396484	0.125	0.416016	0.1875
+glyph	'	0.464844	0.125	0.472656	0.1875
+glyph	(	0.523438	0.125	0.539063	0.1875
+glyph	)	0.585938	0.125	0.601563	0.1875
+glyph	*	0.650391	0.125	0.662109	0.1875
+glyph	+	0.705078	0.125	0.732422	0.1875
+glyph	,	0.777344	0.125	0.785156	0.1875
+glyph	-	0.835938	0.125	0.851563	0.1875
+glyph	.	0.902344	0.125	0.910156	0.1875
+glyph	/	0.957031	0.125	0.980469	0.1875
+glyph	0	0.0195313	0.1875	0.0429688	0.25
+glyph	1	0.0859375	0.1875	0.101563	0.25
+glyph	2	0.146484	0.1875	0.166016	0.25
+glyph	3	0.210938	0.1875	0.226563	0.25
+glyph	4	0.271484	0.1875	0.291016	0.25
+glyph	5	0.333984	0.1875	0.353516	0.25
+glyph	6	0.396484	0.1875	0.416016	0.25
+glyph	7	0.458984	0.1875	0.478516	0.25
+glyph	8	0.521484	0.1875	0.541016	0.25
+glyph	9	0.583984	0.1875	0.603516	0.25
+glyph	:	0.652344	0.1875	0.660156	0.25
+glyph	;	0.714844	0.1875	0.722656	0.25
+glyph	<	0.771484	0.1875	0.791016	0.25
+glyph	=	0.832031	0.1875	0.855469	0.25
+glyph	>	0.896484	0.1875	0.916016	0.25
+glyph	?	0.960938	0.1875	0.976563	0.25
+glyph	@	0.0195313	0.25	0.0429688	0.3125
+glyph	A	0.0839844	0.25	0.103516	0.3125
+glyph	B	0.146484	0.25	0.166016	0.3125
+glyph	C	0.210938	0.25	0.226563	0.3125
+glyph	D	0.271484	0.25	0.291016	0.3125
+glyph	E	0.335938	0.25	0.351563	0.3125
+glyph	F	0.396484	0.25	0.416016	0.3125
+glyph	G	0.458984	0.25	0.478516	0.3125
+glyph	H	0.521484	0.25	0.541016	0.3125
+glyph	I	0.589844	0.25	0.597656	0.3125
+glyph	J	0.646484	0.25	0.666016	0.3125
+glyph	K	0.705078	0.25	0.732422	0.3125
+glyph	L	0.771484	0.25	0.791016	0.3125
+glyph	M	0.824219	0.25	0.863281	0.3125
+glyph	N	0.892578	0.25	0.919922	0.3125
+glyph	O	0.958984	0.25	0.978516	0.3125
+glyph	P	0.0195313	0.3125	0.0429688	0.375
+glyph	Q	0.0820313	0.3125	0.105469	0.375
+glyph	R	0.144531	0.3125	0.167969	0.375
+glyph	S	0.210938	0.3125	0.226563	0.375
+glyph	T	0.269531	0.3125	0.292969	0.375
+glyph	U	0.333984	0.3125	0.353516	0.375
+glyph	V	0.396484	0.3125	0.416016	0.375
+glyph	W	0.453125	0.3125	0.484375	0.375
+glyph	X	0.517578	0.3125	0.544922	0.375
+glyph	Y	0.576172	0.3125	0.611328	0.375
+glyph	Z	0.646484	0.3125	0.666016	0.375
+glyph	[	0.708984	0.3125	0.728516	0.375
+glyph	\	0.767578	0.3125	0.794922	0.375
+glyph	]	0.833984	0.3125	0.853516	0.375
+glyph	^	0.896484	0.3125	0.916016	0.375
+glyph	_	0.957031	0.3125	0.980469	0.375
+glyph	`	0.0195313	0.375	0.0429688	0.4375
+glyph	a	0.0839844	0.375	0.103516	0.4375
+glyph	b	0.146484	0.375	0.166016	0.4375
+glyph	c	0.207031	0.375	0.230469	0.4375
+glyph	d	0.273438	0.375	0.289063	0.4375
+glyph	e	0.333984	0.375	0.353516	0.4375
+glyph	f	0.396484	0.375	0.416016	0.4375
+glyph	g	0.458984	0.375	0.478516	0.4375
+glyph	h	0.521484	0.375	0.541016	0.4375
+glyph	i	0.587891	0.375	0.599609	0.4375
+glyph	j	0.646484	0.375	0.666016	0.4375
+glyph	k	0.705078	0.375	0.732422	0.4375
+glyph	l	0.771484	0.375	0.791016	0.4375
+glyph	m	0.816406	0.375	0.871094	0.4375
+glyph	n	0.888672	0.375	0.923828	0.4375
+glyph	o	0.958984	0.375	0.978516	0.4375
+glyph	p	0.0195313	0.4375	0.0429688	0.5
+glyph	q	0.0839844	0.4375	0.103516	0.5
+glyph	r	0.146484	0.4375	0.166016	0.5
+glyph	s	0.208984	0.4375	0.228516	0.5
+glyph	t	0.271484	0.4375	0.291016	0.5
+glyph	u	0.332031	0.4375	0.355469	0.5
+glyph	v	0.386719	0.4375	0.425781	0.5
+glyph	w	0.445313	0.4375	0.492188	0.5
+glyph	x	0.521484	0.4375	0.541016	0.5
+glyph	y	0.583984	0.4375	0.603516	0.5
+glyph	z	0.646484	0.4375	0.666016	0.5
+glyph	{	0.710938	0.4375	0.726563	0.5
+glyph	|	0.773438	0.4375	0.789063	0.5
+glyph	}	0.835938	0.4375	0.851563	0.5
+glyph	~	0.884766	0.4375	0.927734	0.5
+
+}
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/GT/dwarf2.lod
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/GT/dwarf2.lod	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/GT/dwarf2.lod	(revision 1092)
@@ -0,0 +1,15095 @@
+v 161
+v 143
+v 482
+v 365
+v 6
+v 6
+v 7
+v 7
+v 484
+v 484
+v 1088
+v 1218
+v 1607
+v 349
+v 1366
+v 666
+v 743
+v 667
+v 1996
+v 7
+v 7
+v 484
+v 484
+v 2096
+v 156
+v 162
+v 2087
+v 694
+v 648
+v 665
+v 569
+v 1351
+v 743
+v 1404
+v 1313
+v 1408
+v 1410
+v 1857
+v 563
+v 1996
+v 568
+v 1396
+v 764
+v 765
+v 766
+v 764
+v 765
+v 766
+v 50
+v 50
+v 51
+v 51
+v 53
+v 53
+v 783
+v 1616
+v 1297
+v 1299
+v 1298
+v 1987
+v 2039
+v 63
+v 63
+v 64
+v 64
+v 1512
+v 1514
+v 1512
+v 1514
+v 1362
+v 1364
+v 1362
+v 1364
+v 1362
+v 1364
+v 78
+v 78
+v 78
+v 79
+v 79
+v 79
+v 2097
+v 2088
+v 1407
+v 1662
+v 1376
+v 1377
+v 1376
+v 1377
+v 91
+v 91
+v 92
+v 92
+v 95
+v 95
+v 96
+v 96
+v 512
+v 513
+v 512
+v 513
+v 905
+v 905
+v 2140
+v 2140
+v 1366
+v 1894
+v 1895
+v 1894
+v 1895
+v 1894
+v 1895
+v 115
+v 115
+v 115
+v 116
+v 116
+v 116
+v 1088
+v 1352
+v 2085
+v 2081
+v 1431
+v 125
+v 125
+v 126
+v 126
+v 1516
+v 1518
+v 1516
+v 1518
+v 963
+v 1378
+v 1379
+v 1378
+v 1379
+v 138
+v 138
+v 139
+v 139
+v 2087
+v 2086
+v 2082
+v 667
+v 146
+v 146
+v 147
+v 147
+v 2119
+v 2121
+v 2119
+v 2121
+v 1484
+v 1486
+v 155
+v 1992
+v 1031
+v 1764
+v 1764
+v 160
+v 2100
+v 1607
+v 1171
+v 1632
+v 1641
+v 1446
+v 1446
+v 1909
+v 1507
+v 943
+v 944
+v 1050
+v 1050
+v 1946
+v 1313
+v 1957
+v 1956
+v 1945
+v 1295
+v 1296
+v 1295
+v 1296
+v 1986
+v 2095
+v 1447
+v 1448
+v 2001
+v 2000
+v 1541
+v 1541
+v 1221
+v 1221
+v 1290
+v 693
+v 1554
+v 1314
+v 1172
+v 1174
+v 1172
+v 1174
+v 1768
+v 1770
+v 1768
+v 1770
+v 1130
+v 1131
+v 1130
+v 1131
+v 1108
+v 1110
+v 1108
+v 1110
+v 1746
+v 1747
+v 1746
+v 1747
+v 218
+v 218
+v 219
+v 219
+v 1660
+v 1661
+v 1660
+v 1661
+v 226
+v 226
+v 227
+v 227
+v 230
+v 230
+v 231
+v 231
+v 234
+v 234
+v 235
+v 235
+v 1122
+v 1123
+v 1122
+v 1123
+v 1178
+v 1179
+v 1178
+v 1179
+v 247
+v 247
+v 247
+v 248
+v 248
+v 248
+v 251
+v 251
+v 251
+v 1744
+v 1745
+v 1744
+v 1745
+v 260
+v 260
+v 260
+v 261
+v 261
+v 261
+v 264
+v 264
+v 264
+v 1176
+v 1177
+v 1176
+v 1177
+v 789
+v 272
+v 995
+v 1592
+v 1593
+v 1594
+v 1592
+v 1593
+v 1594
+v 981
+v 982
+v 282
+v 1559
+v 1080
+v 1080
+v 286
+v 1913
+v 1678
+v 1880
+v 1880
+v 1938
+v 1908
+v 2101
+v 971
+v 976
+v 2094
+v 1837
+v 1837
+v 1917
+v 1917
+v 1535
+v 1536
+v 1537
+v 305
+v 305
+v 306
+v 306
+v 1998
+v 1982
+v 1073
+v 1655
+v 1086
+v 1918
+v 1166
+v 2103
+v 987
+v 990
+v 2040
+v 2040
+v 2042
+v 2042
+v 2055
+v 323
+v 993
+v 1299
+v 1299
+v 1297
+v 1297
+v 1298
+v 1987
+v 2096
+v 333
+v 333
+v 334
+v 334
+v 920
+v 2137
+v 920
+v 2137
+v 1723
+v 1723
+v 2104
+v 2104
+v 345
+v 345
+v 346
+v 346
+v 348
+v 1054
+v 1218
+v 352
+v 352
+v 353
+v 353
+v 1422
+v 1503
+v 1505
+v 1095
+v 2135
+v 1095
+v 2135
+v 363
+v 363
+v 364
+v 364
+v 1996
+v 368
+v 368
+v 369
+v 369
+v 1547
+v 1548
+v 1547
+v 1548
+v 1162
+v 1163
+v 1162
+v 1163
+v 380
+v 380
+v 381
+v 381
+v 1154
+v 1156
+v 1154
+v 1156
+v 1717
+v 1718
+v 1717
+v 1718
+v 1196
+v 1199
+v 1196
+v 1199
+v 1714
+v 1716
+v 1714
+v 1716
+v 1719
+v 1720
+v 1722
+v 1719
+v 1720
+v 1722
+v 1719
+v 1720
+v 1722
+v 1152
+v 1153
+v 1152
+v 1153
+v 413
+v 413
+v 414
+v 414
+v 1397
+v 1398
+v 1399
+v 1397
+v 1398
+v 1399
+v 1397
+v 1398
+v 1399
+v 1158
+v 1160
+v 1158
+v 1160
+v 1202
+v 1204
+v 1202
+v 1204
+v 1164
+v 1165
+v 1164
+v 1165
+v 1150
+v 1151
+v 1150
+v 1151
+v 2052
+v 1784
+v 1909
+v 1217
+v 2044
+v 1217
+v 2044
+v 449
+v 449
+v 450
+v 450
+v 452
+v 1403
+v 1906
+v 1907
+v 1538
+v 1539
+v 458
+v 1781
+v 2148
+v 2132
+v 2051
+v 1309
+v 1311
+v 1432
+v 1433
+v 1301
+v 1302
+v 1301
+v 1302
+v 472
+v 472
+v 473
+v 473
+v 476
+v 476
+v 477
+v 477
+v 1239
+v 1240
+v 1239
+v 1240
+v 1366
+v 1908
+v 7
+v 7
+v 7
+v 7
+v 1643
+v 1644
+v 2149
+v 2133
+v 1940
+v 1941
+v 495
+v 1942
+v 497
+v 2078
+v 2141
+v 2142
+v 2079
+v 2083
+v 1946
+v 1946
+v 2136
+v 1994
+v 96
+v 96
+v 96
+v 96
+v 512
+v 512
+v 513
+v 513
+v 1447
+v 1448
+v 911
+v 911
+v 894
+v 894
+v 2150
+v 2134
+v 1762
+v 526
+v 526
+v 526
+v 527
+v 527
+v 527
+v 843
+v 844
+v 843
+v 844
+v 1024
+v 1025
+v 1024
+v 1025
+v 1658
+v 1659
+v 1658
+v 1659
+v 1090
+v 1092
+v 1090
+v 1092
+v 1090
+v 1092
+v 847
+v 848
+v 850
+v 847
+v 848
+v 850
+v 1027
+v 1949
+v 1027
+v 1949
+v 2080
+v 2084
+v 1963
+v 1962
+v 1995
+v 1993
+v 2088
+v 1999
+v 1999
+v 2106
+v 1444
+v 2097
+v 1313
+v 1332
+v 1332
+v 2038
+v 2038
+v 1752
+v 1378
+v 1379
+v 1378
+v 1379
+v 139
+v 139
+v 139
+v 139
+v 1022
+v 1023
+v 586
+v 1026
+v 1821
+v 1823
+v 1821
+v 1823
+v 1821
+v 1823
+v 596
+v 596
+v 596
+v 597
+v 597
+v 597
+v 1445
+v 1445
+v 1727
+v 1728
+v 2077
+v 1727
+v 1728
+v 2077
+v 1727
+v 1728
+v 2077
+v 613
+v 613
+v 613
+v 614
+v 614
+v 614
+v 617
+v 617
+v 617
+v 1758
+v 1758
+v 623
+v 623
+v 624
+v 624
+v 1553
+v 1551
+v 1367
+v 1368
+v 1367
+v 1368
+v 1457
+v 1457
+v 1420
+v 1421
+v 2120
+v 2131
+v 2120
+v 2131
+v 2120
+v 2131
+v 644
+v 644
+v 644
+v 645
+v 645
+v 645
+v 2122
+v 1857
+v 651
+v 651
+v 652
+v 652
+v 654
+v 654
+v 656
+v 656
+v 2026
+v 2028
+v 2030
+v 2032
+v 2026
+v 2028
+v 2030
+v 2032
+v 1404
+v 1607
+v 2039
+v 2072
+v 2072
+v 1272
+v 1272
+v 674
+v 674
+v 675
+v 675
+v 1492
+v 1493
+v 1492
+v 1493
+v 2096
+v 1300
+v 1526
+v 1528
+v 1443
+v 2071
+v 2055
+v 2139
+v 2139
+v 2139
+v 2125
+v 2125
+v 2125
+v 1616
+v 1662
+v 697
+v 697
+v 698
+v 698
+v 700
+v 700
+v 1785
+v 1786
+v 1787
+v 1785
+v 1786
+v 1787
+v 708
+v 1839
+v 1838
+v 974
+v 975
+v 974
+v 975
+v 1620
+v 1622
+v 1620
+v 1622
+v 1620
+v 1622
+v 1354
+v 1354
+v 2127
+v 2127
+v 1792
+v 1792
+v 1792
+v 2126
+v 2126
+v 2126
+v 731
+v 1663
+v 1664
+v 1665
+v 2040
+v 2040
+v 2042
+v 738
+v 739
+v 1804
+v 1806
+v 1808
+v 1810
+v 2087
+v 53
+v 53
+v 53
+v 53
+v 751
+v 751
+v 751
+v 752
+v 752
+v 752
+v 1756
+v 1757
+v 1756
+v 1757
+v 1756
+v 1757
+v 761
+v 1676
+v 1674
+v 1675
+v 767
+v 767
+v 767
+v 768
+v 768
+v 768
+v 1289
+v 2147
+v 773
+v 2130
+v 775
+v 1958
+v 1232
+v 2129
+v 1651
+v 1653
+v 1651
+v 1653
+v 1909
+v 1507
+v 785
+v 1709
+v 1710
+v 1711
+v 1903
+v 1829
+v 1913
+v 1913
+v 793
+v 1898
+v 1896
+v 1897
+v 1670
+v 2098
+v 1926
+v 1928
+v 1930
+v 802
+v 803
+v 1754
+v 805
+v 806
+v 1985
+v 1258
+v 1259
+v 1261
+v 2112
+v 1229
+v 2063
+v 814
+v 2062
+v 817
+v 817
+v 818
+v 818
+v 1506
+v 1861
+v 1506
+v 1861
+v 1393
+v 2073
+v 2074
+v 2073
+v 2074
+v 1145
+v 2115
+v 1489
+v 1490
+v 1489
+v 1490
+v 1491
+v 1679
+v 1680
+v 1679
+v 1680
+v 2136
+v 1994
+v 843
+v 843
+v 844
+v 844
+v 847
+v 847
+v 848
+v 848
+v 850
+v 850
+v 2102
+v 1666
+v 1668
+v 1908
+v 1910
+v 1912
+v 1723
+v 859
+v 2012
+v 2009
+v 2010
+v 2105
+v 2105
+v 2108
+v 2108
+v 1772
+v 1775
+v 1778
+v 1772
+v 1775
+v 1778
+v 874
+v 874
+v 875
+v 875
+v 877
+v 877
+v 882
+v 882
+v 882
+v 882
+v 883
+v 883
+v 883
+v 883
+v 2007
+v 2008
+v 2007
+v 2008
+v 2007
+v 2008
+v 2007
+v 2008
+v 2095
+v 1830
+v 1698
+v 1698
+v 1698
+v 1702
+v 1702
+v 1702
+v 2099
+v 1615
+v 905
+v 905
+v 2140
+v 1632
+v 2078
+v 2141
+v 2142
+v 1986
+v 1986
+v 1624
+v 1625
+v 916
+v 1630
+v 334
+v 334
+v 920
+v 2137
+v 1295
+v 1296
+v 1295
+v 1296
+v 1295
+v 1296
+v 928
+v 929
+v 2144
+v 1626
+v 1627
+v 1629
+v 1425
+v 1426
+v 1425
+v 1426
+v 938
+v 1590
+v 1596
+v 1597
+v 943
+v 943
+v 944
+v 944
+v 1940
+v 1941
+v 1942
+v 1708
+v 950
+v 2145
+v 1602
+v 1603
+v 1414
+v 1417
+v 1414
+v 1417
+v 958
+v 1695
+v 1693
+v 1694
+v 2100
+v 2100
+v 1662
+v 1617
+v 1618
+v 1980
+v 1759
+v 1760
+v 970
+v 1761
+v 1982
+v 974
+v 974
+v 975
+v 975
+v 1655
+v 1999
+v 2123
+v 1850
+v 1849
+v 1554
+v 1554
+v 1724
+v 1725
+v 986
+v 1726
+v 1592
+v 1593
+v 1594
+v 1592
+v 1593
+v 1594
+v 1559
+v 1612
+v 1678
+v 998
+v 998
+v 999
+v 999
+v 1002
+v 1002
+v 1003
+v 1003
+v 1691
+v 1692
+v 1691
+v 1692
+v 2110
+v 1011
+v 1011
+v 1012
+v 1012
+v 1014
+v 1014
+v 1437
+v 1438
+v 2146
+v 1437
+v 1438
+v 2146
+v 2091
+v 1024
+v 1024
+v 1025
+v 1025
+v 1027
+v 1949
+v 2092
+v 2019
+v 2020
+v 1407
+v 1569
+v 1570
+v 1569
+v 1570
+v 1569
+v 1570
+v 1569
+v 1570
+v 1044
+v 1044
+v 1044
+v 1044
+v 1045
+v 1045
+v 1045
+v 1045
+v 1050
+v 1050
+v 1050
+v 1050
+v 2093
+v 2093
+v 7
+v 7
+v 1992
+v 1992
+v 2122
+v 2117
+v 2118
+v 2117
+v 2118
+v 1065
+v 1065
+v 1066
+v 1066
+v 2124
+v 2021
+v 1600
+v 1601
+v 1072
+v 1604
+v 2101
+v 1541
+v 1541
+v 1077
+v 1530
+v 1531
+v 1533
+v 1880
+v 1880
+v 675
+v 675
+v 675
+v 675
+v 2094
+v 1758
+v 1996
+v 1879
+v 414
+v 414
+v 414
+v 414
+v 1095
+v 2135
+v 364
+v 364
+v 1099
+v 1866
+v 1862
+v 1864
+v 1440
+v 1884
+v 1105
+v 1882
+v 1900
+v 1900
+v 1660
+v 1661
+v 1660
+v 1661
+v 1768
+v 1770
+v 1768
+v 1770
+v 1768
+v 1770
+v 1746
+v 1747
+v 1746
+v 1747
+v 231
+v 231
+v 231
+v 231
+v 1744
+v 1745
+v 1744
+v 1745
+v 251
+v 251
+v 251
+v 251
+v 251
+v 251
+v 1138
+v 1138
+v 1139
+v 1139
+v 1689
+v 1690
+v 1689
+v 1690
+v 1145
+v 2115
+v 1547
+v 1548
+v 1547
+v 1548
+v 1152
+v 1152
+v 1153
+v 1153
+v 369
+v 369
+v 369
+v 369
+v 1717
+v 1718
+v 1717
+v 1718
+v 1164
+v 1164
+v 1165
+v 1165
+v 2103
+v 1169
+v 1169
+v 1170
+v 1170
+v 2088
+v 227
+v 227
+v 227
+v 227
+v 1178
+v 1178
+v 1179
+v 1179
+v 1466
+v 1467
+v 1469
+v 1471
+v 1466
+v 1467
+v 1469
+v 1471
+v 1190
+v 1190
+v 1191
+v 1191
+v 1193
+v 1193
+v 1195
+v 1195
+v 1719
+v 1720
+v 1722
+v 1719
+v 1720
+v 1722
+v 1714
+v 1716
+v 1714
+v 1716
+v 1683
+v 1685
+v 1598
+v 1599
+v 1598
+v 1599
+v 1991
+v 1904
+v 450
+v 450
+v 1217
+v 2044
+v 2039
+v 1221
+v 1221
+v 1221
+v 1221
+v 1224
+v 1494
+v 1497
+v 1500
+v 2062
+v 1229
+v 2063
+v 1958
+v 1232
+v 2129
+v 477
+v 477
+v 477
+v 477
+v 1239
+v 1239
+v 1240
+v 1240
+v 1242
+v 1832
+v 1833
+v 1834
+v 2149
+v 2133
+v 1784
+v 2052
+v 2150
+v 2134
+v 2112
+v 2148
+v 2132
+v 1985
+v 1985
+v 1258
+v 1258
+v 1259
+v 1259
+v 1261
+v 1261
+v 1858
+v 2153
+v 2104
+v 2104
+v 2104
+v 2104
+v 2072
+v 2072
+v 1272
+v 1272
+v 1272
+v 1272
+v 2151
+v 2025
+v 1278
+v 1278
+v 1279
+v 1279
+v 1639
+v 1640
+v 1639
+v 1640
+v 1998
+v 306
+v 306
+v 2130
+v 1289
+v 2147
+v 2102
+v 1642
+v 1955
+v 1642
+v 1955
+v 1945
+v 1945
+v 1298
+v 1298
+v 1987
+v 2051
+v 1303
+v 1303
+v 1304
+v 1304
+v 2089
+v 2090
+v 2089
+v 2090
+v 53
+v 53
+v 53
+v 53
+v 1607
+v 768
+v 768
+v 768
+v 944
+v 944
+v 1892
+v 1893
+v 1892
+v 1893
+v 1892
+v 1893
+v 1328
+v 1328
+v 1328
+v 1329
+v 1329
+v 1329
+v 1332
+v 1332
+v 2038
+v 1848
+v 1831
+v 1831
+v 1764
+v 1764
+v 1341
+v 1341
+v 1342
+v 1342
+v 1344
+v 1344
+v 1867
+v 1869
+v 1871
+v 1867
+v 1869
+v 1871
+v 1909
+v 1913
+v 1354
+v 1354
+v 2127
+v 147
+v 147
+v 147
+v 147
+v 147
+v 147
+v 2119
+v 2121
+v 2119
+v 2121
+v 1857
+v 1918
+v 1918
+v 2105
+v 2105
+v 2108
+v 1003
+v 1003
+v 1910
+v 1912
+v 1378
+v 1378
+v 1379
+v 1379
+v 139
+v 139
+v 139
+v 139
+v 1961
+v 1388
+v 1388
+v 1388
+v 1389
+v 1389
+v 1389
+v 2128
+v 2143
+v 1752
+v 2093
+v 2093
+v 1908
+v 414
+v 414
+v 414
+v 414
+v 414
+v 414
+v 1982
+v 2096
+v 1849
+v 1850
+v 2097
+v 1896
+v 1897
+v 1898
+v 1905
+v 2019
+v 2020
+v 2022
+v 2023
+v 2024
+v 2022
+v 2023
+v 2024
+v 2136
+v 1994
+v 1838
+v 1839
+v 1839
+v 1427
+v 1427
+v 1428
+v 1428
+v 1430
+v 1430
+v 1996
+v 2085
+v 2081
+v 1014
+v 1014
+v 1437
+v 1438
+v 2146
+v 1440
+v 1884
+v 1882
+v 2152
+v 2106
+v 2071
+v 1446
+v 1446
+v 2095
+v 2095
+v 1450
+v 2045
+v 1672
+v 2114
+v 1916
+v 2138
+v 2102
+v 2102
+v 2099
+v 2104
+v 2104
+v 2104
+v 2104
+v 2104
+v 2104
+v 1466
+v 1466
+v 1467
+v 1467
+v 1469
+v 1469
+v 1471
+v 1471
+v 1195
+v 1195
+v 1195
+v 1195
+v 2153
+v 2113
+v 2116
+v 1480
+v 2111
+v 2084
+v 2080
+v 2123
+v 1917
+v 1917
+v 1917
+v 1917
+v 1959
+v 1993
+v 1993
+v 1995
+v 2055
+v 2055
+v 617
+v 617
+v 617
+v 1727
+v 1728
+v 2077
+v 1727
+v 1728
+v 2077
+v 818
+v 818
+v 1506
+v 1861
+v 2039
+v 513
+v 513
+v 513
+v 513
+v 96
+v 96
+v 96
+v 96
+v 1894
+v 1895
+v 1894
+v 1895
+v 116
+v 116
+v 116
+v 116
+v 116
+v 116
+v 1527
+v 1951
+v 1529
+v 1953
+v 2012
+v 2009
+v 2010
+v 2009
+v 2010
+v 1538
+v 1538
+v 1538
+v 1539
+v 1539
+v 1539
+v 2100
+v 1907
+v 1906
+v 1992
+v 1992
+v 1880
+v 844
+v 844
+v 844
+v 844
+v 2040
+v 2040
+v 2042
+v 1986
+v 1025
+v 1025
+v 1025
+v 1025
+v 2101
+v 1926
+v 1928
+v 1930
+v 1003
+v 1003
+v 1569
+v 1569
+v 1569
+v 1569
+v 1570
+v 1570
+v 1570
+v 1570
+v 1045
+v 1045
+v 1045
+v 1045
+v 1045
+v 1045
+v 1045
+v 1045
+v 1045
+v 1045
+v 1045
+v 1045
+v 1045
+v 1045
+v 1045
+v 1045
+v 2093
+v 1170
+v 1170
+v 2094
+v 2094
+v 2094
+v 1879
+v 1598
+v 1598
+v 1599
+v 1599
+v 1602
+v 1602
+v 1603
+v 1603
+v 2145
+v 1903
+v 1858
+v 2087
+v 999
+v 999
+v 999
+v 999
+v 1980
+v 1963
+v 1962
+v 2092
+v 2097
+v 2072
+v 1272
+v 1272
+v 1946
+v 1946
+v 1946
+v 1946
+v 1626
+v 1626
+v 1627
+v 1627
+v 1629
+v 1629
+v 2144
+v 1632
+v 1632
+v 1279
+v 1279
+v 1279
+v 1279
+v 1639
+v 1639
+v 1640
+v 1640
+v 1642
+v 1955
+v 2086
+v 2082
+v 2103
+v 2103
+v 944
+v 944
+v 944
+v 944
+v 2089
+v 2090
+v 2089
+v 2090
+v 1938
+v 2083
+v 2079
+v 1660
+v 1660
+v 1661
+v 1661
+v 2088
+v 2149
+v 2133
+v 2133
+v 877
+v 877
+v 877
+v 877
+v 1999
+v 1672
+v 2114
+v 2045
+v 2044
+v 2044
+v 450
+v 450
+v 2095
+v 1430
+v 1430
+v 1430
+v 1430
+v 2117
+v 2118
+v 1066
+v 1066
+v 2151
+v 2025
+v 1691
+v 1691
+v 1692
+v 1692
+v 2148
+v 2148
+v 2132
+v 1918
+v 1918
+v 883
+v 883
+v 883
+v 883
+v 2007
+v 2008
+v 2007
+v 2008
+v 2007
+v 2008
+v 2091
+v 2150
+v 2134
+v 2134
+v 2110
+v 1714
+v 1714
+v 1716
+v 1716
+v 1719
+v 1719
+v 1720
+v 1720
+v 1722
+v 1722
+v 2078
+v 617
+v 617
+v 1727
+v 1728
+v 2077
+v 2113
+v 2116
+v 2113
+v 2116
+v 2113
+v 2116
+v 2111
+v 2111
+v 2111
+v 2062
+v 2063
+v 231
+v 231
+v 231
+v 231
+v 1746
+v 1746
+v 1747
+v 1747
+v 251
+v 251
+v 251
+v 251
+v 2112
+v 1754
+v 1754
+v 1754
+v 2129
+v 2129
+v 1332
+v 2130
+v 2130
+v 2147
+v 1945
+v 1945
+v 53
+v 53
+v 53
+v 53
+v 850
+v 850
+v 850
+v 850
+v 1389
+v 1389
+v 1389
+v 1389
+v 1389
+v 1389
+v 1389
+v 1389
+v 1389
+v 2141
+v 2142
+v 1784
+v 1784
+v 2052
+v 2052
+v 2052
+v 1792
+v 1792
+v 1792
+v 1792
+v 1792
+v 1792
+v 1792
+v 1792
+v 1792
+v 1792
+v 1792
+v 1792
+v 2126
+v 2126
+v 2126
+v 2126
+v 477
+v 477
+v 1240
+v 1240
+v 1240
+v 1240
+v 1240
+v 1240
+v 645
+v 645
+v 645
+v 645
+v 645
+v 645
+v 645
+v 645
+v 645
+v 2120
+v 2131
+v 2120
+v 2131
+v 999
+v 999
+v 999
+v 999
+v 2099
+v 2122
+v 2115
+v 2124
+v 2021
+v 2021
+v 905
+v 2140
+v 2138
+v 2136
+v 1994
+v 768
+v 768
+v 768
+v 768
+v 768
+v 768
+v 2103
+v 2103
+v 2128
+v 2071
+v 2106
+v 844
+v 844
+v 844
+v 844
+v 2152
+v 2152
+v 2096
+v 2153
+v 334
+v 334
+v 2137
+v 1629
+v 1629
+v 1629
+v 1629
+v 2144
+v 2119
+v 2121
+v 2119
+v 2121
+v 2119
+v 2121
+v 147
+v 147
+v 147
+v 147
+v 147
+v 147
+v 2100
+v 944
+v 944
+v 1195
+v 1195
+v 1471
+v 1471
+v 116
+v 116
+v 116
+v 116
+v 116
+v 116
+v 1894
+v 1894
+v 1895
+v 1895
+v 2135
+v 2135
+v 364
+v 364
+v 1539
+v 1539
+v 1539
+v 2098
+v 2143
+v 2151
+v 2085
+v 2081
+v 2097
+v 2088
+v 2105
+v 2105
+v 2108
+v 2094
+v 2094
+v 2094
+v 1917
+v 1917
+v 1632
+v 1632
+v 1632
+v 1632
+v 1599
+v 1599
+v 1599
+v 1599
+v 1603
+v 1603
+v 1603
+v 1603
+v 1603
+v 1603
+v 414
+v 414
+v 414
+v 414
+v 414
+v 414
+v 53
+v 53
+v 2125
+v 2125
+v 2139
+v 2139
+v 2139
+v 1946
+v 1946
+v 1946
+v 1946
+v 850
+v 850
+v 1279
+v 1279
+v 1640
+v 1640
+v 2102
+v 2083
+v 2079
+v 2146
+v 2113
+v 2116
+v 2153
+v 2086
+v 2082
+v 1379
+v 1379
+v 1379
+v 1379
+v 1379
+v 1379
+v 1379
+v 1379
+v 139
+v 139
+v 139
+v 139
+v 139
+v 139
+v 139
+v 139
+v 2091
+v 1982
+v 1982
+v 2130
+v 2130
+v 2147
+v 2101
+v 1272
+v 1272
+v 2072
+v 2072
+v 2128
+v 2100
+v 1994
+v 1994
+v 2136
+v 2087
+v 334
+v 2137
+v 2115
+v 2084
+v 2080
+v 2112
+v 2112
+v 2112
+v 2123
+v 2123
+v 2009
+v 2009
+v 2010
+v 2010
+v 2012
+v 2012
+v 2012
+v 2012
+v 1629
+v 1629
+v 1629
+v 1629
+v 2124
+v 2021
+v 2021
+v 944
+v 944
+v 944
+v 2151
+v 513
+v 513
+v 513
+v 513
+v 513
+v 513
+v 513
+v 513
+v 96
+v 96
+v 96
+v 96
+v 2127
+v 2088
+v 2135
+v 2135
+v 364
+v 2149
+v 2133
+v 877
+v 877
+v 1792
+v 1792
+v 1792
+v 1792
+v 2097
+v 2132
+v 2148
+v 2148
+v 2095
+v 1471
+v 1471
+v 1471
+v 1471
+v 1471
+v 1471
+v 905
+v 2140
+v 850
+v 850
+v 1716
+v 1716
+v 1716
+v 1716
+v 2071
+v 2071
+v 2106
+v 1599
+v 1599
+v 1599
+v 1599
+v 2144
+v 1539
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+c
+d 23 3 1 0 0
+c
+d 37 1 0 0 0
+c
+d 38 2 0 0 0
+c
+d 35 2 0 2 0
+c
+d 37 3 1 0 0
+c
+d 12 1 0 0 1
+c
+d 14 1 0 0 1
+c
+d 12 1 0 0 1
+c
+d 14 2 0 0 1
+c
+d 12 1 0 0 0
+c
+d 13 1 0 0 0
+c
+d 14 2 0 0 0
+c
+d 11 1 0 0 1
+c
+d 13 1 0 0 1
+c
+d 10 1 0 0 0
+c
+d 23 2 1 0 0
+c
+d 35 3 1 0 0
+c
+d 23 1 0 0 0
+c
+d 37 3 0 0 0
+c
+d 38 2 0 0 0
+c
+d 35 1 0 0 0
+c
+d 37 2 1 0 0
+c
+d 37 2 0 0 0
+c
+d 35 1 0 1 0
+c
+d 38 1 0 1 0
+c
+d 23 2 0 0 0
+c
+d 37 1 0 0 0
+c
+d 13 3 0 0 0
+c
+d 11 1 0 0 0
+c
+d 12 2 0 0 0
+c
+d 35 1 0 0 0
+c
+d 37 1 0 0 0
+c
+d 36 2 0 2 0
+c
+d 36 2 0 0 0
+c
+d 37 3 1 0 0
+c
+d 36 3 1 0 0
+c
+d 35 2 0 0 0
+c
+d 23 2 0 1 0
+c
+d 37 1 0 1 0
+c
+d 23 2 0 1 0
+c
+d 37 1 0 1 0
+c
+d 35 2 0 2 0
+c
+d 37 3 1 0 0
+c
+d 37 3 0 0 0
+c
+d 37 4 0 0 0
+c
+d 43 1 0 0 0
+c
+d 44 2 0 0 0
+c
+d 79 1 0 0 0
+c
+d 80 1 0 1 0
+c
+d 81 1 0 1 0
+c
+d 35 3 0 0 0
+c
+d 36 2 0 1 0
+c
+d 23 3 0 0 0
+c
+d 36 3 1 0 0
+c
+d 23 3 0 1 0
+c
+d 40 1 0 0 1
+c
+d 19 1 0 0 0
+c
+d 18 1 0 0 1
+c
+d 18 1 0 0 1
+c
+d 18 3 0 0 1
+c
+d 18 3 0 0 1
+c
+d 18 1 0 0 1
+c
+d 18 1 0 0 0
+c
+d 36 1 0 0 0
+c
+d 39 1 0 1 0
+c
+d 23 2 0 0 0
+c
+d 8 2 0 1 0
+c
+d 5 1 0 0 0
+c
+d 6 1 0 0 0
+c
+d 7 3 0 0 0
+c
+d 4 2 0 0 0
+c
+d 36 1 0 0 0
+c
+d 37 1 0 0 0
+c
+d 39 2 0 0 0
+c
+d 119 1 0 0 1
+c
+d 59 2 0 0 1
+c
+d 59 2 0 0 1
+c
+d 61 1 0 0 1
+c
+d 119 1 0 0 1
+c
+d 59 2 0 0 0
+c
+d 61 1 0 0 0
+c
+d 119 1 0 0 0
+c
+d 122 1 0 0 1
+c
+d 97 2 0 0 0
+c
+d 122 1 0 0 1
+c
+d 106 1 0 0 1
+c
+d 98 1 0 0 0
+c
+d 119 1 0 0 1
+c
+d 74 1 0 0 1
+c
+d 60 1 0 0 1
+c
+d 60 1 0 0 1
+c
+d 61 1 0 0 1
+c
+d 74 1 0 0 1
+c
+d 119 1 0 0 1
+c
+d 60 1 0 0 1
+c
+d 61 1 0 0 1
+c
+d 74 1 0 0 1
+c
+d 119 1 0 0 1
+c
+d 23 3 1 0 0
+c
+d 35 1 0 0 0
+c
+d 36 2 0 0 0
+c
+d 36 3 1 0 0
+c
+d 36 3 1 0 0
+c
+d 122 1 0 0 1
+c
+d 98 2 0 0 0
+c
+d 119 1 0 0 1
+c
+d 60 2 0 0 1
+c
+d 60 2 0 0 1
+c
+d 61 1 0 0 1
+c
+d 119 1 0 0 1
+c
+d 60 2 0 0 0
+c
+d 61 1 0 0 0
+c
+d 119 1 0 0 0
+c
+d 122 2 0 0 1
+c
+d 97 1 0 0 1
+c
+d 97 1 0 0 1
+c
+d 99 2 0 0 1
+c
+d 122 2 0 0 1
+c
+d 97 1 0 0 0
+c
+d 99 2 0 0 0
+c
+d 122 2 0 0 0
+c
+d 119 2 0 0 1
+c
+d 59 1 0 0 0
+c
+d 120 1 0 0 1
+c
+d 69 1 0 0 0
+c
+d 120 1 0 0 1
+c
+d 69 1 0 0 0
+c
+d 35 2 0 0 0
+c
+d 122 1 0 0 1
+c
+d 106 1 0 0 1
+c
+d 97 1 0 0 0
+c
+d 119 1 0 0 1
+c
+d 74 1 0 0 1
+c
+d 59 1 0 0 1
+c
+d 59 1 0 0 1
+c
+d 61 1 0 0 1
+c
+d 74 1 0 0 1
+c
+d 119 1 0 0 1
+c
+d 59 1 0 0 1
+c
+d 61 1 0 0 1
+c
+d 74 1 0 0 1
+c
+d 119 1 0 0 1
+c
+d 23 3 0 1 0
+c
+d 35 2 0 0 0
+c
+d 36 1 0 0 0
+c
+d 0 1 0 0 0
+c
+d 1 1 1 0 0
+c
+d 3 2 0 0 0
+c
+d 23 4 0 0 0
+c
+d 119 1 0 0 1
+c
+d 74 1 0 0 1
+c
+d 61 1 0 0 1
+c
+d 74 1 0 0 1
+c
+d 119 1 0 0 1
+c
+d 61 1 0 0 0
+c
+d 74 1 0 0 0
+c
+d 119 1 0 0 0
+c
+d 122 1 0 0 1
+c
+d 106 1 0 0 0
+c
+d 36 4 1 0 0
+c
+d 122 3 1 0 1
+c
+d 98 1 0 0 0
+c
+d 119 2 0 0 1
+c
+d 60 1 0 0 1
+c
+d 60 1 0 0 1
+c
+d 61 1 0 0 1
+c
+d 119 2 0 0 1
+c
+d 60 1 0 0 0
+c
+d 61 1 0 0 0
+c
+d 119 2 0 0 0
+c
+d 35 2 0 1 0
+c
+d 37 2 1 0 0
+c
+d 0 3 1 0 0
+c
+d 2 2 0 0 0
+c
+d 37 1 0 1 0
+c
+d 38 5 1 0 0
+c
+d 119 1 0 0 1
+c
+d 74 1 0 0 1
+c
+d 61 1 0 0 1
+c
+d 74 1 0 0 1
+c
+d 119 1 0 0 1
+c
+d 61 1 0 0 0
+c
+d 74 1 0 0 0
+c
+d 119 1 0 0 0
+c
+d 122 1 0 0 1
+c
+d 106 1 0 0 0
+c
+d 120 3 0 0 0
+c
+d 23 1 0 0 1
+c
+d 26 2 1 0 1
+c
+d 23 1 0 0 0
+c
+d 26 2 0 0 0
+c
+d 28 1 0 0 0
+c
+d 36 3 0 0 0
+c
+d 18 1 0 0 1
+c
+d 18 1 1 0 0
+c
+d 26 1 0 0 1
+c
+d 28 1 0 0 1
+c
+d 26 1 0 0 0
+c
+d 28 4 0 0 0
+c
+d 23 4 1 0 0
+c
+d 37 1 1 0 0
+c
+d 36 4 1 1 0
+c
+d 42 2 0 0 0
+c
+d 42 2 0 1 0
+c
+d 40 1 0 0 1
+c
+d 19 1 0 0 0
+c
+d 35 1 0 0 0
+c
+d 36 1 0 0 0
+c
+d 35 2 0 0 0
+c
+d 36 1 0 1 0
+c
+d 30 2 0 0 0
+c
+d 34 1 0 0 0
+c
+d 30 3 0 0 1
+c
+d 31 1 0 0 0
+c
+d 16 2 0 0 0
+c
+d 17 1 0 0 0
+c
+d 37 2 1 0 0
+c
+d 2 2 0 0 0
+c
+d 0 2 0 2 0
+c
+d 15 1 0 0 0
+c
+d 16 1 0 0 0
+c
+d 17 1 1 0 0
+c
+d 15 1 0 0 1
+c
+d 16 1 0 0 1
+c
+d 15 1 0 1 0
+c
+d 16 1 0 0 0
+c
+d 17 1 0 0 0
+c
+d 16 1 0 0 0
+c
+d 17 1 0 0 0
+c
+d 15 1 0 0 0
+c
+d 17 1 0 0 0
+c
+d 2 2 1 0 0
+c
+d 0 2 1 0 0
+c
+d 26 1 0 0 1
+c
+d 28 1 0 0 1
+c
+d 27 1 0 0 0
+c
+d 26 3 0 0 1
+c
+d 29 1 0 0 0
+c
+d 42 2 0 1 0
+c
+d 23 3 1 0 0
+c
+d 16 1 0 0 0
+c
+d 17 1 0 0 0
+c
+d 16 1 0 0 0
+c
+d 17 1 0 0 0
+c
+d 126 1 0 0 1
+c
+d 133 1 0 0 0
+c
+d 125 1 0 0 1
+c
+d 132 1 0 0 0
+c
+d 126 1 0 0 1
+c
+d 133 3 1 0 0
+c
+d 127 1 0 0 1
+c
+d 132 3 0 0 0
+c
+d 125 1 0 0 1
+c
+d 132 1 0 0 0
+c
+d 127 1 0 0 1
+c
+d 132 1 0 0 1
+c
+d 125 1 0 0 1
+c
+d 127 1 0 0 1
+c
+d 132 1 0 0 1
+c
+d 125 1 0 0 0
+c
+d 127 1 0 0 0
+c
+d 132 1 0 0 0
+c
+d 125 1 0 0 1
+c
+d 132 1 0 0 0
+c
+d 126 1 0 0 1
+c
+d 133 1 0 0 1
+c
+d 125 1 0 0 1
+c
+d 126 1 0 0 1
+c
+d 133 1 0 0 1
+c
+d 125 1 0 0 0
+c
+d 126 1 0 0 0
+c
+d 133 1 0 0 0
+c
+d 125 1 0 0 1
+c
+d 133 1 0 0 1
+c
+d 125 1 0 0 1
+c
+d 126 1 0 0 1
+c
+d 133 1 0 0 1
+c
+d 125 1 0 0 0
+c
+d 126 1 0 0 0
+c
+d 133 1 0 0 0
+c
+d 127 1 0 0 1
+c
+d 132 1 0 0 1
+c
+d 125 1 0 0 1
+c
+d 127 1 0 0 1
+c
+d 132 1 0 0 1
+c
+d 125 1 0 0 0
+c
+d 127 1 0 0 0
+c
+d 132 1 0 0 0
+c
+d 126 1 0 0 1
+c
+d 133 1 0 0 0
+c
+d 126 1 0 0 1
+c
+d 133 1 0 0 0
+c
+d 125 1 0 0 1
+c
+d 125 1 0 0 1
+c
+d 133 1 0 0 1
+c
+d 125 2 0 0 1
+c
+d 126 1 0 0 1
+c
+d 133 1 0 0 1
+c
+d 125 2 0 0 1
+c
+d 126 1 0 0 1
+c
+d 133 1 0 0 1
+c
+d 126 1 0 0 1
+c
+d 126 1 0 0 1
+c
+d 125 1 0 0 1
+c
+d 132 1 0 0 0
+c
+d 127 1 0 0 1
+c
+d 127 1 0 0 1
+c
+d 132 1 0 0 1
+c
+d 125 1 0 0 1
+c
+d 127 2 0 0 1
+c
+d 132 1 0 0 1
+c
+d 125 1 0 0 1
+c
+d 127 2 0 0 1
+c
+d 132 1 0 0 1
+c
+d 125 1 0 0 1
+c
+d 125 1 0 0 1
+c
+d 126 1 0 0 1
+c
+d 133 1 0 0 0
+c
+d 23 3 0 0 0
+c
+d 24 1 0 0 1
+c
+d 35 1 0 0 1
+c
+d 24 2 0 0 0
+c
+d 35 1 0 0 0
+c
+d 24 1 0 0 1
+c
+d 35 1 0 0 1
+c
+d 40 1 0 0 0
+c
+d 23 4 0 0 0
+c
+d 23 2 0 0 1
+c
+d 23 3 0 0 0
+c
+d 32 3 0 0 1
+c
+d 33 1 0 0 0
+c
+d 40 2 0 0 1
+c
+d 41 1 0 0 1
+c
+d 35 1 0 0 0
+c
+d 40 2 0 0 0
+c
+d 41 1 0 0 0
+c
+d 16 1 0 0 0
+c
+d 17 1 0 0 0
+c
+d 30 1 0 0 1
+c
+d 32 1 0 0 1
+c
+d 33 1 0 0 0
+c
+d 16 1 0 0 0
+c
+d 17 1 0 0 0
+c
+d 23 1 1 0 0
+c
+d 36 1 0 0 0
+c
+d 16 1 0 0 0
+c
+d 17 1 0 0 0
+c
+d 16 1 0 0 0
+c
+d 17 1 0 0 0
+c
+d 16 1 0 0 0
+c
+d 17 1 0 0 0
+c
+d 16 1 0 0 0
+c
+d 17 1 0 0 0
+c
+d 120 1 0 0 1
+c
+d 69 1 0 0 0
+c
+d 120 1 0 0 1
+c
+d 69 1 0 0 0
+c
+d 120 2 0 1 0
+c
+d 121 1 1 0 0
+c
+d 109 1 0 0 1
+c
+d 107 1 0 0 1
+c
+d 107 1 0 0 1
+c
+d 109 2 0 0 1
+c
+d 107 1 0 0 0
+c
+d 109 2 0 0 0
+c
+d 77 1 0 0 0
+c
+d 78 1 0 0 0
+c
+d 16 1 0 0 0
+c
+d 17 1 0 0 0
+c
+d 16 1 0 0 0
+c
+d 17 1 0 0 0
+c
+d 16 1 0 0 0
+c
+d 17 1 0 0 0
+c
+d 16 1 0 0 0
+c
+d 17 1 0 0 0
+c
+d 42 2 0 1 0
+c
+d 42 2 0 1 0
+c
+d 42 2 0 1 0
+c
+d 40 2 0 0 0
+c
+d 41 1 0 0 0
+c
+d 77 2 0 0 1
+c
+d 44 1 0 0 0
+c
+d 109 3 1 0 1
+c
+d 81 1 0 0 0
+c
+d 42 2 0 1 0
+c
+d 23 3 0 0 1
+c
+d 23 4 0 0 0
+c
+d 4 1 0 0 1
+c
+d 5 1 1 0 0
+c
+d 7 1 0 0 1
+c
+d 8 1 1 0 0
+c
+d 8 2 0 0 0
+c
+d 4 1 0 0 0
+c
+d 5 1 0 0 0
+c
+d 35 3 1 0 0
+c
+d 109 1 0 0 1
+c
+d 108 1 0 0 1
+c
+d 108 1 0 0 1
+c
+d 109 2 0 0 1
+c
+d 108 1 0 0 0
+c
+d 109 2 0 0 0
+c
+d 76 1 0 0 1
+c
+d 75 2 1 0 0
+c
+d 120 1 0 0 1
+c
+d 69 1 0 0 0
+c
+d 11 1 1 0 1
+c
+d 12 1 0 0 1
+c
+d 14 1 0 0 0
+c
+d 10 2 0 0 1
+c
+d 11 1 0 0 1
+c
+d 10 2 0 0 1
+c
+d 11 1 0 0 1
+c
+d 13 1 0 0 1
+c
+d 10 2 0 0 0
+c
+d 11 1 0 0 0
+c
+d 13 1 0 0 0
+c
+d 13 3 0 0 1
+c
+d 13 3 0 0 0
+c
+d 14 1 0 0 0
+c
+d 35 1 1 0 0
+c
+d 37 1 0 0 0
+c
+d 38 3 1 0 0
+c
+d 107 1 0 0 1
+c
+d 109 1 0 0 1
+c
+d 107 2 0 0 1
+c
+d 109 1 0 0 1
+c
+d 107 2 0 0 0
+c
+d 109 1 0 0 0
+c
+d 77 1 0 0 0
+c
+d 78 1 0 0 0
+c
+d 109 2 0 0 0
+c
+d 76 1 0 0 0
+c
+d 78 1 0 1 0
+c
+d 76 2 0 0 1
+c
+d 77 1 0 0 1
+c
+d 43 1 0 1 0
+c
+d 109 2 0 1 1
+c
+d 79 1 0 0 1
+c
+d 79 1 0 0 1
+c
+d 109 2 0 0 1
+c
+d 79 1 0 0 0
+c
+d 109 2 0 0 0
+c
+d 23 1 1 0 0
+c
+d 37 4 1 0 0
+c
+d 126 1 0 0 1
+c
+d 134 1 0 0 1
+c
+d 123 1 0 0 1
+c
+d 126 1 0 0 1
+c
+d 134 1 0 0 1
+c
+d 123 1 0 0 0
+c
+d 126 1 0 0 0
+c
+d 134 1 0 0 0
+c
+d 124 1 0 0 1
+c
+d 135 3 1 0 0
+c
+d 124 1 0 0 1
+c
+d 135 1 0 0 0
+c
+d 124 1 0 0 1
+c
+d 135 1 0 0 1
+c
+d 123 1 0 0 1
+c
+d 124 1 0 0 1
+c
+d 135 1 0 0 1
+c
+d 123 1 0 0 0
+c
+d 124 1 0 0 0
+c
+d 135 1 0 0 0
+c
+d 123 1 0 0 1
+c
+d 134 1 0 0 0
+c
+d 126 1 0 0 1
+c
+d 134 3 1 0 0
+c
+d 123 1 0 0 1
+c
+d 134 1 0 0 0
+c
+d 123 1 0 0 1
+c
+d 134 1 0 0 0
+c
+d 123 1 0 0 1
+c
+d 123 1 0 0 1
+c
+d 134 1 0 0 0
+c
+d 124 1 0 0 1
+c
+d 135 1 0 0 0
+c
+d 123 1 0 0 1
+c
+d 135 1 0 0 1
+c
+d 123 1 0 0 1
+c
+d 124 1 0 0 1
+c
+d 135 1 0 0 1
+c
+d 123 1 0 0 0
+c
+d 124 1 0 0 0
+c
+d 135 1 0 0 0
+c
+d 124 1 0 0 1
+c
+d 124 1 0 0 1
+c
+d 135 1 0 0 0
+c
+d 123 1 0 0 1
+c
+d 134 1 0 0 0
+c
+d 123 1 0 0 1
+c
+d 134 1 0 0 0
+c
+d 124 1 0 0 1
+c
+d 135 1 0 0 0
+c
+d 124 1 0 0 1
+c
+d 135 1 0 0 0
+c
+d 79 1 0 0 0
+c
+d 80 1 0 0 0
+c
+d 43 1 0 0 0
+c
+d 44 1 0 0 0
+c
+d 35 1 0 1 0
+c
+d 36 2 0 1 0
+c
+d 83 1 0 0 1
+c
+d 82 1 0 0 0
+c
+d 46 1 0 0 1
+c
+d 47 1 0 0 1
+c
+d 46 2 0 0 1
+c
+d 47 1 0 0 1
+c
+d 46 2 0 0 0
+c
+d 47 1 0 0 0
+c
+d 40 4 1 0 1
+c
+d 41 1 0 0 1
+c
+d 40 4 0 0 0
+c
+d 41 1 0 0 0
+c
+d 0 2 0 1 0
+c
+d 1 1 0 0 0
+c
+d 2 2 0 0 0
+c
+d 3 2 0 0 0
+c
+d 120 1 0 0 0
+c
+d 121 1 0 0 0
+c
+d 120 3 0 0 1
+c
+d 111 3 0 0 0
+c
+d 120 3 0 0 0
+c
+d 44 1 0 0 0
+c
+d 45 1 0 0 0
+c
+d 80 2 0 1 0
+c
+d 26 1 0 0 0
+c
+d 36 3 0 0 0
+c
+d 18 2 0 0 0
+c
+d 23 1 0 0 0
+c
+d 0 2 1 0 0
+c
+d 1 1 0 0 0
+c
+d 2 2 0 1 0
+c
+d 3 1 0 1 0
+c
+d 16 1 0 0 1
+c
+d 42 1 0 0 0
+c
+d 16 1 0 0 1
+c
+d 42 1 0 0 1
+c
+d 16 2 0 0 1
+c
+d 42 1 0 0 1
+c
+d 16 2 0 0 0
+c
+d 42 1 0 0 0
+c
+d 83 1 0 0 1
+c
+d 79 1 0 0 1
+c
+d 79 1 0 0 1
+c
+d 83 2 0 0 1
+c
+d 79 1 0 0 0
+c
+d 83 2 0 0 0
+c
+d 46 1 0 0 1
+c
+d 43 1 0 0 0
+c
+d 35 2 1 0 0
+c
+d 38 1 0 0 0
+c
+d 36 2 0 0 0
+c
+d 10 1 0 0 1
+c
+d 11 2 0 0 1
+c
+d 12 2 1 0 1
+c
+d 13 1 1 0 1
+c
+d 11 2 0 0 0
+c
+d 0 3 0 0 0
+c
+d 2 3 0 0 0
+c
+d 47 2 0 0 0
+c
+d 48 2 0 0 0
+c
+d 81 1 0 0 0
+c
+d 82 1 0 1 0
+c
+d 120 2 0 0 0
+c
+d 120 2 0 0 1
+c
+d 120 3 0 0 0
+c
+d 120 2 0 0 1
+c
+d 120 3 0 0 0
+c
+d 120 3 0 0 0
+c
+d 2 3 1 0 0
+c
+d 0 3 0 2 0
+c
+d 20 1 0 0 1
+c
+d 15 1 0 0 0
+c
+d 118 2 0 1 0
+c
+d 109 2 0 2 0
+c
+d 99 1 0 1 1
+c
+d 122 1 1 0 1
+c
+d 61 1 0 1 1
+c
+d 119 1 0 0 1
+c
+d 61 2 0 0 1
+c
+d 119 1 1 0 1
+c
+d 59 1 0 0 0
+c
+d 61 2 0 0 0
+c
+d 119 2 0 0 0
+c
+d 16 1 0 0 0
+c
+d 17 1 0 0 0
+c
+d 24 1 0 0 1
+c
+d 15 1 0 0 0
+c
+d 24 2 1 0 1
+c
+d 15 1 0 0 0
+c
+d 45 1 0 1 0
+c
+d 47 1 0 0 0
+c
+d 48 1 0 1 0
+c
+d 80 1 0 1 0
+c
+d 81 1 0 1 0
+c
+d 20 1 0 0 0
+c
+d 21 1 0 0 0
+c
+d 20 1 0 0 1
+c
+d 21 1 0 0 1
+c
+d 15 1 0 0 1
+c
+d 15 1 0 0 1
+c
+d 15 2 0 0 1
+c
+d 20 2 0 0 1
+c
+d 21 2 0 0 1
+c
+d 15 2 0 0 1
+c
+d 20 2 0 0 1
+c
+d 21 2 0 0 1
+c
+d 136 1 0 0 1
+c
+d 124 1 0 0 0
+c
+d 136 1 0 0 1
+c
+d 124 1 0 0 0
+c
+d 137 2 0 0 1
+c
+d 127 1 0 0 0
+c
+d 136 1 0 0 1
+c
+d 124 1 0 0 1
+c
+d 124 1 0 0 0
+c
+d 137 1 0 0 1
+c
+d 127 1 0 0 0
+c
+d 137 1 0 0 1
+c
+d 127 1 0 0 0
+c
+d 2 2 0 0 0
+c
+d 0 2 0 0 0
+c
+d 2 4 0 0 0
+c
+d 0 2 0 0 0
+c
+d 77 4 0 0 0
+c
+d 109 2 0 0 0
+c
+d 36 4 1 0 0
+c
+d 116 1 0 0 1
+c
+d 111 1 0 0 0
+c
+d 8 1 0 1 0
+c
+d 9 1 0 0 0
+c
+d 5 2 0 0 0
+c
+d 6 2 1 0 0
+c
+d 23 1 0 1 0
+c
+d 36 4 0 1 0
+c
+d 23 1 0 0 0
+c
+d 36 1 0 1 0
+c
+d 37 1 1 0 0
+c
+d 112 1 0 0 1
+c
+d 120 2 0 1 0
+c
+d 113 1 0 0 1
+c
+d 120 1 0 0 0
+c
+d 112 2 1 0 0
+c
+d 99 1 0 0 1
+c
+d 122 1 0 0 0
+c
+d 61 1 0 1 1
+c
+d 119 1 0 0 0
+c
+d 136 6 0 0 0
+c
+d 137 6 1 0 1
+c
+d 137 6 0 0 0
+c
+d 122 1 0 0 1
+c
+d 100 1 0 0 1
+c
+d 97 1 0 0 0
+c
+d 119 1 0 0 1
+c
+d 62 1 0 0 1
+c
+d 59 1 0 0 1
+c
+d 59 1 0 0 1
+c
+d 61 2 0 0 1
+c
+d 62 1 0 0 1
+c
+d 119 1 0 0 1
+c
+d 59 1 0 0 1
+c
+d 61 2 0 0 1
+c
+d 62 1 0 0 1
+c
+d 119 1 0 0 1
+c
+d 40 1 1 0 1
+c
+d 19 1 0 0 0
+c
+d 64 1 0 0 1
+c
+d 65 1 0 0 1
+c
+d 57 1 0 0 0
+c
+d 101 1 0 0 1
+c
+d 103 1 0 1 1
+c
+d 95 1 0 0 1
+c
+d 96 1 0 0 1
+c
+d 95 1 0 0 1
+c
+d 96 1 0 0 1
+c
+d 101 1 0 0 1
+c
+d 103 1 0 0 1
+c
+d 95 1 0 0 1
+c
+d 96 1 0 0 1
+c
+d 101 1 0 0 1
+c
+d 103 1 0 0 1
+c
+d 95 1 0 0 1
+c
+d 95 1 0 0 1
+c
+d 112 1 0 0 1
+c
+d 113 1 0 0 1
+c
+d 120 1 1 0 0
+c
+d 16 1 0 0 1
+c
+d 42 1 0 0 1
+c
+d 16 2 0 0 1
+c
+d 42 1 0 0 1
+c
+d 16 2 0 0 0
+c
+d 42 1 0 0 0
+c
+d 109 3 0 0 0
+c
+d 77 3 0 0 0
+c
+d 16 1 0 0 1
+c
+d 42 1 0 1 0
+c
+d 18 1 0 0 1
+c
+d 18 1 0 0 0
+c
+d 77 1 0 0 0
+c
+d 118 1 1 0 0
+c
+d 109 2 0 0 0
+c
+d 122 1 0 0 1
+c
+d 98 1 0 0 1
+c
+d 100 2 0 0 0
+c
+d 119 1 0 0 1
+c
+d 60 1 0 0 1
+c
+d 62 1 0 0 1
+c
+d 60 1 0 0 1
+c
+d 62 1 0 0 1
+c
+d 119 2 0 0 1
+c
+d 60 1 0 0 1
+c
+d 62 1 0 0 1
+c
+d 119 2 0 0 1
+c
+d 67 2 1 0 0
+c
+d 35 4 1 2 0
+c
+d 100 1 0 0 1
+c
+d 95 1 0 0 1
+c
+d 95 1 0 0 1
+c
+d 97 1 0 0 1
+c
+d 100 1 0 0 1
+c
+d 95 1 0 0 1
+c
+d 97 1 0 0 1
+c
+d 100 1 0 0 1
+c
+d 100 1 0 0 1
+c
+d 100 1 0 0 1
+c
+d 89 1 0 0 1
+c
+d 89 1 0 0 0
+c
+d 62 1 0 0 1
+c
+d 57 2 0 0 0
+c
+d 58 1 0 0 0
+c
+d 23 2 0 0 0
+c
+d 37 1 1 0 0
+c
+d 37 5 2 0 0
+c
+d 35 1 0 0 0
+c
+d 37 1 0 1 0
+c
+d 38 4 0 0 0
+c
+d 39 2 1 0 0
+c
+d 7 1 0 0 1
+c
+d 8 1 0 0 0
+c
+d 9 1 0 0 0
+c
+d 4 1 0 0 1
+c
+d 5 1 0 0 0
+c
+d 16 1 0 0 1
+c
+d 42 1 0 0 1
+c
+d 16 2 0 0 1
+c
+d 42 1 0 0 1
+c
+d 16 2 0 0 0
+c
+d 42 1 0 0 0
+c
+d 16 1 0 0 1
+c
+d 42 1 0 1 0
+c
+d 24 2 0 0 0
+c
+d 35 1 1 0 0
+c
+d 37 1 1 0 0
+c
+d 34 1 0 0 0
+c
+d 35 1 0 0 0
+c
+d 36 1 1 0 0
+c
+d 105 2 0 2 0
+c
+d 73 2 0 2 0
+c
+d 8 2 0 0 0
+c
+d 4 1 0 1 0
+c
+d 5 2 0 0 0
+c
+d 42 4 1 0 0
+c
+d 111 1 0 0 1
+c
+d 115 1 0 0 1
+c
+d 120 1 0 0 0
+c
+d 116 1 0 0 1
+c
+d 117 1 0 0 1
+c
+d 121 1 0 0 0
+c
+d 23 5 1 2 0
+c
+d 36 4 0 1 0
+c
+d 50 1 0 1 1
+c
+d 49 1 0 0 1
+c
+d 49 1 0 0 1
+c
+d 50 1 0 0 1
+c
+d 49 1 0 0 1
+c
+d 50 1 0 0 1
+c
+d 49 1 0 0 1
+c
+d 49 1 0 0 0
+c
+d 86 1 0 0 1
+c
+d 86 2 0 0 0
+c
+d 88 1 0 0 0
+c
+d 109 3 0 0 1
+c
+d 110 1 1 0 1
+c
+d 109 4 0 0 0
+c
+d 110 2 0 0 0
+c
+d 77 4 0 0 0
+c
+d 118 2 0 0 0
+c
+d 67 1 0 0 1
+c
+d 68 1 0 0 0
+c
+d 16 1 0 0 1
+c
+d 42 1 0 0 1
+c
+d 15 1 0 0 0
+c
+d 112 1 0 0 1
+c
+d 120 1 0 0 0
+c
+d 113 1 0 0 1
+c
+d 120 1 0 1 0
+c
+d 121 1 0 0 0
+c
+d 115 1 0 0 1
+c
+d 112 1 0 0 1
+c
+d 120 1 0 0 0
+c
+d 117 1 0 0 1
+c
+d 113 1 0 0 1
+c
+d 121 1 0 0 0
+c
+d 50 2 0 0 1
+c
+d 50 3 0 0 0
+c
+d 86 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 77 1 0 0 0
+c
+d 118 2 0 0 0
+c
+d 109 2 0 0 0
+c
+d 86 1 0 0 1
+c
+d 88 1 0 0 1
+c
+d 86 2 0 0 1
+c
+d 88 1 0 0 1
+c
+d 83 1 0 0 0
+c
+d 86 2 0 0 0
+c
+d 88 1 0 0 0
+c
+d 49 4 0 0 0
+c
+d 37 7 3 0 0
+c
+d 18 2 1 0 1
+c
+d 20 1 0 0 1
+c
+d 15 1 0 0 1
+c
+d 67 1 0 1 1
+c
+d 67 1 0 0 1
+c
+d 63 1 0 0 1
+c
+d 63 1 0 0 1
+c
+d 67 2 0 0 1
+c
+d 63 1 0 0 1
+c
+d 67 2 0 0 1
+c
+d 67 1 0 0 1
+c
+d 67 1 0 0 1
+c
+d 102 1 0 0 0
+c
+d 49 1 0 1 1
+c
+d 50 2 0 0 1
+c
+d 49 1 0 0 0
+c
+d 50 3 0 0 0
+c
+d 86 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 88 1 0 0 0
+c
+d 40 1 0 0 1
+c
+d 19 1 0 0 1
+c
+d 15 1 0 0 1
+c
+d 19 1 0 0 1
+c
+d 40 1 0 1 1
+c
+d 15 1 0 0 1
+c
+d 19 3 0 0 1
+c
+d 20 1 0 0 1
+c
+d 40 1 0 0 1
+c
+d 15 1 0 0 1
+c
+d 19 3 0 0 1
+c
+d 20 1 0 0 1
+c
+d 40 1 0 0 1
+c
+d 55 2 0 0 0
+c
+d 56 2 0 0 0
+c
+d 93 2 0 0 1
+c
+d 94 2 0 0 1
+c
+d 93 2 0 0 0
+c
+d 94 2 1 0 0
+c
+d 103 1 0 0 0
+c
+d 51 2 0 0 1
+c
+d 52 2 0 0 1
+c
+d 51 2 0 0 0
+c
+d 52 2 0 0 0
+c
+d 63 2 0 0 0
+c
+d 64 1 0 0 0
+c
+d 89 2 0 0 0
+c
+d 90 2 1 0 0
+c
+d 33 1 0 0 1
+c
+d 32 2 0 0 0
+c
+d 35 3 1 1 0
+c
+d 35 1 0 0 0
+c
+d 36 2 0 0 0
+c
+d 39 1 0 0 0
+c
+d 50 3 0 0 1
+c
+d 50 4 0 0 0
+c
+d 86 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 34 1 0 1 0
+c
+d 36 1 0 0 0
+c
+d 23 6 1 1 0
+c
+d 35 1 0 0 1
+c
+d 40 1 0 0 0
+c
+d 109 2 1 0 1
+c
+d 109 3 0 0 0
+c
+d 77 2 0 0 0
+c
+d 111 3 0 1 0
+c
+d 26 1 0 0 0
+c
+d 36 1 0 0 0
+c
+d 67 1 0 0 0
+c
+d 68 2 0 0 0
+c
+d 71 1 0 0 0
+c
+d 67 1 0 0 1
+c
+d 68 1 0 0 1
+c
+d 69 1 0 0 1
+c
+d 67 2 0 0 1
+c
+d 68 1 0 0 1
+c
+d 69 1 0 0 1
+c
+d 65 1 0 0 0
+c
+d 67 2 0 0 0
+c
+d 68 1 0 0 0
+c
+d 69 1 0 0 0
+c
+d 65 1 0 0 1
+c
+d 66 1 0 0 1
+c
+d 65 1 0 0 1
+c
+d 66 2 0 0 1
+c
+d 55 1 0 0 0
+c
+d 65 1 0 0 0
+c
+d 66 2 0 0 0
+c
+d 103 1 0 0 0
+c
+d 104 1 0 0 0
+c
+d 112 2 0 2 0
+c
+d 69 1 0 0 0
+c
+d 70 1 0 0 0
+c
+d 69 2 0 0 1
+c
+d 69 2 0 0 0
+c
+d 120 1 0 0 0
+c
+d 109 1 0 0 1
+c
+d 108 1 0 0 1
+c
+d 108 3 0 0 1
+c
+d 109 1 0 0 1
+c
+d 108 3 0 0 0
+c
+d 109 1 0 0 0
+c
+d 76 1 0 1 1
+c
+d 75 1 0 0 0
+c
+d 112 2 0 0 0
+c
+d 130 1 0 0 1
+c
+d 128 1 0 0 0
+c
+d 116 2 0 0 0
+c
+d 110 1 0 0 1
+c
+d 107 1 0 1 0
+c
+d 77 2 0 1 0
+c
+d 29 1 0 0 1
+c
+d 26 2 0 0 0
+c
+d 77 2 0 1 0
+c
+d 118 1 0 0 0
+c
+d 109 2 0 0 0
+c
+d 136 2 0 0 1
+c
+d 124 1 0 0 1
+c
+d 124 1 0 0 1
+c
+d 136 3 0 1 1
+c
+d 124 2 0 0 0
+c
+d 136 3 0 0 0
+c
+d 137 1 0 1 1
+c
+d 127 1 0 0 1
+c
+d 127 1 0 0 1
+c
+d 137 1 0 0 1
+c
+d 127 1 0 0 1
+c
+d 137 1 0 0 1
+c
+d 127 1 0 0 1
+c
+d 127 2 0 0 0
+c
+d 137 1 0 0 0
+c
+d 42 2 0 1 0
+c
+d 112 2 0 0 0
+c
+d 113 1 0 0 0
+c
+d 23 2 1 0 0
+c
+d 26 1 0 0 0
+c
+d 36 1 1 0 0
+c
+d 7 1 0 0 0
+c
+d 4 1 0 0 0
+c
+d 69 3 1 0 0
+c
+d 45 1 0 0 1
+c
+d 47 2 0 0 1
+c
+d 48 1 0 0 1
+c
+d 45 1 0 0 0
+c
+d 47 2 0 0 0
+c
+d 48 1 0 0 0
+c
+d 76 1 0 0 0
+c
+d 77 1 0 0 0
+c
+d 82 1 0 0 0
+c
+d 83 1 0 0 0
+c
+d 7 1 0 1 1
+c
+d 7 1 0 0 0
+c
+d 4 1 0 1 1
+c
+d 4 1 0 0 0
+c
+d 114 1 0 0 1
+c
+d 112 3 0 0 0
+c
+d 86 1 0 0 1
+c
+d 112 1 0 0 1
+c
+d 113 1 0 0 1
+c
+d 86 2 0 0 1
+c
+d 112 1 0 0 1
+c
+d 113 1 0 0 1
+c
+d 86 2 0 0 1
+c
+d 112 1 0 0 1
+c
+d 113 1 0 0 1
+c
+d 116 1 0 0 1
+c
+d 116 1 0 0 0
+c
+d 75 1 0 0 1
+c
+d 76 1 0 0 1
+c
+d 45 1 0 0 1
+c
+d 43 1 0 0 1
+c
+d 43 1 0 0 1
+c
+d 45 2 0 0 1
+c
+d 46 1 0 0 1
+c
+d 75 1 0 0 1
+c
+d 76 1 0 0 1
+c
+d 43 1 0 0 1
+c
+d 45 2 0 0 1
+c
+d 46 1 0 0 1
+c
+d 75 1 0 0 1
+c
+d 76 1 0 0 1
+c
+d 108 1 0 0 1
+c
+d 109 1 0 0 1
+c
+d 85 1 0 0 1
+c
+d 79 1 0 0 0
+c
+d 15 1 0 0 0
+c
+d 24 2 0 0 0
+c
+d 35 1 0 0 0
+c
+d 67 1 0 0 0
+c
+d 69 1 0 1 0
+c
+d 75 1 0 0 1
+c
+d 76 1 0 0 1
+c
+d 45 1 0 0 0
+c
+d 108 1 0 0 1
+c
+d 109 1 0 0 1
+c
+d 84 1 0 0 0
+c
+d 85 1 0 0 0
+c
+d 18 1 0 0 0
+c
+d 25 1 0 0 0
+c
+d 22 1 0 0 0
+c
+d 40 2 0 0 0
+c
+d 69 3 0 0 1
+c
+d 69 4 0 0 0
+c
+d 120 3 0 0 0
+c
+d 69 2 0 0 0
+c
+d 70 1 0 0 0
+c
+d 42 2 0 2 0
+c
+d 69 4 0 0 0
+c
+d 69 2 0 0 0
+c
+d 15 1 0 0 1
+c
+d 24 1 0 0 1
+c
+d 23 1 0 0 0
+c
+d 24 2 0 0 0
+c
+d 37 2 0 0 0
+c
+d 67 2 0 0 0
+c
+d 72 1 0 0 0
+c
+d 67 1 0 0 1
+c
+d 69 1 0 0 1
+c
+d 67 2 0 0 0
+c
+d 69 1 0 0 0
+c
+d 109 2 1 0 0
+c
+d 76 1 0 0 1
+c
+d 78 1 0 0 1
+c
+d 76 2 1 0 0
+c
+d 78 1 0 0 0
+c
+d 15 1 0 0 0
+c
+d 67 1 0 0 1
+c
+d 69 1 0 0 1
+c
+d 67 2 0 0 1
+c
+d 69 1 0 0 1
+c
+d 63 1 0 0 0
+c
+d 67 2 0 0 0
+c
+d 69 1 0 0 0
+c
+d 67 1 0 0 0
+c
+d 72 2 0 0 0
+c
+d 28 2 0 0 1
+c
+d 27 1 0 0 0
+c
+d 131 3 0 0 1
+c
+d 131 4 0 0 0
+c
+d 131 3 0 0 0
+c
+d 32 1 0 1 1
+c
+d 31 1 0 0 1
+c
+d 30 1 1 0 1
+c
+d 31 1 0 0 1
+c
+d 32 1 0 0 1
+c
+d 30 2 0 0 0
+c
+d 31 1 0 0 0
+c
+d 32 1 0 0 0
+c
+d 34 1 0 0 0
+c
+d 69 2 0 2 0
+c
+d 69 2 0 0 0
+c
+d 19 1 0 0 0
+c
+d 22 1 0 1 0
+c
+d 67 1 0 0 1
+c
+d 69 1 0 0 1
+c
+d 67 2 0 0 0
+c
+d 69 1 0 0 0
+c
+d 67 1 0 0 0
+c
+d 71 1 0 0 0
+c
+d 72 1 0 0 0
+c
+d 31 1 0 0 1
+c
+d 30 1 0 0 0
+c
+d 86 2 0 0 1
+c
+d 87 1 0 0 1
+c
+d 86 3 0 0 0
+c
+d 87 1 0 0 0
+c
+d 50 2 0 0 0
+c
+d 28 1 0 0 1
+c
+d 27 1 0 0 0
+c
+d 36 6 2 0 0
+c
+d 7 2 0 0 0
+c
+d 8 1 0 0 0
+c
+d 4 2 0 0 0
+c
+d 5 1 0 0 0
+c
+d 18 1 0 0 0
+c
+d 19 1 0 1 0
+c
+d 67 1 0 0 0
+c
+d 72 1 0 0 0
+c
+d 67 1 0 0 1
+c
+d 69 1 0 0 1
+c
+d 67 2 0 0 0
+c
+d 69 1 0 0 0
+c
+d 15 1 0 0 0
+c
+d 16 1 0 0 0
+c
+d 17 2 1 0 0
+c
+d 67 1 0 1 1
+c
+d 68 1 0 0 1
+c
+d 67 2 0 1 1
+c
+d 68 1 0 0 1
+c
+d 67 2 0 0 0
+c
+d 68 2 0 0 0
+c
+d 15 1 0 0 0
+c
+d 16 1 0 1 0
+c
+d 17 2 1 0 0
+c
+d 116 3 0 1 0
+c
+d 69 3 1 0 0
+c
+d 7 1 0 0 0
+c
+d 9 1 0 1 0
+c
+d 4 1 0 1 0
+c
+d 5 1 0 0 0
+c
+d 23 1 0 0 1
+c
+d 24 1 0 0 1
+c
+d 15 1 0 0 0
+c
+d 23 4 1 0 0
+c
+d 103 1 0 0 0
+c
+d 104 1 0 0 0
+c
+d 65 2 0 0 1
+c
+d 66 1 0 0 1
+c
+d 63 1 0 0 0
+c
+d 64 1 0 0 0
+c
+d 65 2 0 0 0
+c
+d 66 1 0 0 0
+c
+d 40 1 0 0 1
+c
+d 40 2 0 0 1
+c
+d 41 1 0 0 1
+c
+d 15 1 0 0 0
+c
+d 15 1 0 0 0
+c
+d 23 4 1 1 0
+c
+d 18 1 0 0 0
+c
+d 19 1 0 0 0
+c
+d 20 1 0 0 0
+c
+d 15 1 0 0 0
+c
+d 24 2 0 0 0
+c
+d 35 1 0 0 0
+c
+d 129 1 0 0 1
+c
+d 128 1 0 0 1
+c
+d 128 1 0 0 1
+c
+d 129 2 0 0 1
+c
+d 128 2 0 0 0
+c
+d 129 2 0 0 0
+c
+d 23 2 0 0 1
+c
+d 25 2 0 0 1
+c
+d 23 2 0 0 1
+c
+d 25 3 0 0 1
+c
+d 23 2 0 0 0
+c
+d 25 3 0 0 0
+c
+d 129 1 0 0 1
+c
+d 128 1 0 0 0
+c
+d 112 1 0 0 0
+c
+d 113 1 0 0 0
+c
+d 89 1 0 0 1
+c
+d 95 2 0 0 1
+c
+d 96 1 0 0 1
+c
+d 89 1 0 0 1
+c
+d 95 2 0 0 1
+c
+d 96 1 0 0 1
+c
+d 101 1 0 0 1
+c
+d 89 1 0 0 1
+c
+d 95 2 0 0 1
+c
+d 96 1 0 0 1
+c
+d 101 1 0 0 1
+c
+d 89 1 0 0 1
+c
+d 89 1 0 0 0
+c
+d 51 1 0 0 1
+c
+d 52 1 0 0 1
+c
+d 57 1 0 1 0
+c
+d 19 1 0 0 0
+c
+d 136 1 0 1 1
+c
+d 124 1 0 0 1
+c
+d 136 4 1 0 1
+c
+d 124 1 0 0 1
+c
+d 136 4 1 0 1
+c
+d 124 2 0 0 0
+c
+d 136 3 0 0 0
+c
+d 127 1 0 0 1
+c
+d 137 5 1 0 1
+c
+d 127 1 0 0 0
+c
+d 137 4 1 0 0
+c
+d 19 3 1 0 0
+c
+d 20 1 0 0 0
+c
+d 86 4 0 0 0
+c
+d 114 2 0 0 0
+c
+d 23 1 0 0 0
+c
+d 36 3 2 0 0
+c
+d 73 1 0 0 1
+c
+d 60 1 0 0 1
+c
+d 56 1 0 0 1
+c
+d 53 1 0 0 0
+c
+d 105 1 0 0 1
+c
+d 98 1 0 0 1
+c
+d 93 1 0 0 1
+c
+d 91 1 0 0 1
+c
+d 91 1 0 0 1
+c
+d 93 1 0 0 1
+c
+d 98 2 0 0 1
+c
+d 105 1 0 0 1
+c
+d 91 1 0 0 1
+c
+d 93 1 0 0 1
+c
+d 98 2 0 0 1
+c
+d 105 1 0 0 1
+c
+d 31 1 0 0 1
+c
+d 30 1 0 0 1
+c
+d 30 4 0 0 1
+c
+d 31 2 0 0 1
+c
+d 22 1 0 0 1
+c
+d 30 1 0 0 0
+c
+d 13 3 0 0 1
+c
+d 14 1 0 0 1
+c
+d 13 1 1 0 0
+c
+d 29 1 0 0 1
+c
+d 28 1 0 1 0
+c
+d 67 1 0 0 0
+c
+d 72 1 0 1 0
+c
+d 109 1 0 1 1
+c
+d 108 1 0 0 0
+c
+d 76 1 0 0 1
+c
+d 75 1 0 1 1
+c
+d 75 1 0 0 1
+c
+d 76 1 0 0 1
+c
+d 75 1 0 0 0
+c
+d 76 3 0 0 0
+c
+d 87 2 0 0 0
+c
+d 50 3 0 0 0
+c
+d 67 1 0 0 0
+c
+d 72 1 0 0 0
+c
+d 67 1 0 0 1
+c
+d 69 1 0 0 1
+c
+d 67 2 0 0 0
+c
+d 69 1 0 0 0
+c
+d 15 1 0 1 0
+c
+d 16 1 0 1 0
+c
+d 17 2 1 0 0
+c
+d 27 1 0 0 1
+c
+d 26 1 0 1 0
+c
+d 45 2 0 0 1
+c
+d 48 1 0 0 1
+c
+d 45 2 0 0 0
+c
+d 48 1 0 0 0
+c
+d 77 1 0 0 0
+c
+d 81 1 0 0 0
+c
+d 82 1 0 0 0
+c
+d 32 2 0 0 1
+c
+d 33 1 0 0 1
+c
+d 30 1 0 0 0
+c
+d 32 1 1 0 0
+c
+d 16 1 0 0 1
+c
+d 42 2 0 0 0
+c
+d 15 1 0 1 0
+c
+d 16 1 0 0 0
+c
+d 17 2 1 0 0
+c
+d 112 1 0 1 0
+c
+d 113 2 0 1 0
+c
+d 23 5 2 1 0
+c
+d 26 3 0 0 0
+c
+d 136 1 0 0 1
+c
+d 124 2 0 0 1
+c
+d 136 1 0 1 1
+c
+d 124 1 1 0 0
+c
+d 43 2 0 0 1
+c
+d 43 2 0 0 0
+c
+d 77 2 0 0 0
+c
+d 79 3 0 0 0
+c
+d 67 1 0 0 1
+c
+d 69 1 0 0 1
+c
+d 67 2 0 0 0
+c
+d 69 1 0 0 0
+c
+d 67 1 0 0 0
+c
+d 72 1 0 0 0
+c
+d 53 2 0 0 0
+c
+d 54 1 0 0 0
+c
+d 91 2 0 0 1
+c
+d 92 2 0 0 1
+c
+d 91 2 0 0 0
+c
+d 92 2 1 0 0
+c
+d 103 1 0 0 0
+c
+d 116 1 0 0 1
+c
+d 111 1 0 0 0
+c
+d 125 1 0 0 1
+c
+d 127 1 0 1 1
+c
+d 132 3 0 0 1
+c
+d 132 2 0 0 0
+c
+d 132 1 0 0 0
+c
+d 132 1 1 0 0
+c
+d 125 1 0 0 1
+c
+d 126 1 0 0 1
+c
+d 133 2 0 0 1
+c
+d 132 1 1 0 0
+c
+d 125 1 0 0 1
+c
+d 126 1 0 0 1
+c
+d 133 4 0 0 1
+c
+d 133 1 0 0 0
+c
+d 129 2 0 0 1
+c
+d 128 1 0 0 1
+c
+d 128 1 0 0 1
+c
+d 129 3 0 0 1
+c
+d 128 1 0 0 0
+c
+d 129 3 0 0 0
+c
+d 129 1 0 0 1
+c
+d 128 1 0 0 0
+c
+d 111 2 0 0 1
+c
+d 111 2 0 0 0
+c
+d 116 1 0 0 0
+c
+d 135 1 1 0 0
+c
+d 123 1 0 0 1
+c
+d 124 1 0 0 1
+c
+d 135 2 0 0 1
+c
+d 123 2 0 0 1
+c
+d 124 1 0 0 1
+c
+d 135 2 1 0 1
+c
+d 123 2 0 0 0
+c
+d 124 2 0 0 0
+c
+d 135 2 0 0 0
+c
+d 126 1 0 1 1
+c
+d 123 1 0 0 1
+c
+d 134 1 0 0 1
+c
+d 134 1 1 0 0
+c
+d 126 1 0 1 1
+c
+d 123 1 0 0 1
+c
+d 134 1 0 0 1
+c
+d 134 1 0 0 0
+c
+d 123 1 0 1 1
+c
+d 124 1 0 0 1
+c
+d 135 2 0 0 1
+c
+d 123 1 0 0 1
+c
+d 124 1 0 0 1
+c
+d 135 2 1 0 1
+c
+d 123 1 0 0 0
+c
+d 124 2 0 0 0
+c
+d 135 2 0 0 0
+c
+d 42 3 0 1 0
+c
+d 129 1 0 1 1
+c
+d 130 1 0 0 1
+c
+d 128 1 0 0 1
+c
+d 128 1 0 0 1
+c
+d 129 1 0 0 1
+c
+d 130 1 0 0 1
+c
+d 131 1 0 0 1
+c
+d 128 1 0 0 0
+c
+d 129 1 0 0 0
+c
+d 130 1 0 0 0
+c
+d 131 1 0 0 0
+c
+d 36 5 2 1 0
+c
+d 125 1 0 1 1
+c
+d 126 1 0 0 1
+c
+d 133 1 0 0 1
+c
+d 133 1 1 0 0
+c
+d 125 1 0 0 1
+c
+d 126 1 0 0 1
+c
+d 133 2 0 0 1
+c
+d 125 2 0 0 1
+c
+d 126 1 0 0 1
+c
+d 133 2 1 0 1
+c
+d 125 2 0 0 0
+c
+d 126 2 0 0 0
+c
+d 133 2 0 0 0
+c
+d 53 1 0 0 1
+c
+d 54 1 0 0 1
+c
+d 51 1 0 0 0
+c
+d 91 1 0 0 1
+c
+d 89 2 0 0 1
+c
+d 90 1 0 0 1
+c
+d 89 2 0 0 1
+c
+d 90 1 0 0 1
+c
+d 91 1 0 0 1
+c
+d 103 1 0 0 1
+c
+d 89 2 0 0 1
+c
+d 90 1 0 0 1
+c
+d 91 1 0 0 1
+c
+d 103 1 0 0 1
+c
+d 101 1 0 0 1
+c
+d 101 1 0 0 1
+c
+d 91 1 0 0 1
+c
+d 91 1 0 0 0
+c
+d 126 1 0 0 1
+c
+d 123 1 0 0 1
+c
+d 134 1 0 0 1
+c
+d 134 1 0 0 0
+c
+d 126 1 0 0 1
+c
+d 123 1 0 0 1
+c
+d 134 1 0 0 1
+c
+d 134 1 0 0 0
+c
+d 109 2 0 0 0
+c
+d 110 1 0 0 0
+c
+d 76 1 0 0 0
+c
+d 77 3 0 0 0
+c
+d 129 1 0 0 1
+c
+d 131 1 0 0 1
+c
+d 128 1 0 0 0
+c
+d 69 1 1 0 0
+c
+d 72 2 0 0 0
+c
+d 69 2 0 0 0
+c
+d 46 1 0 0 0
+c
+d 47 1 0 0 0
+c
+d 82 1 0 0 1
+c
+d 83 2 0 1 1
+c
+d 82 1 0 1 0
+c
+d 83 2 0 0 0
+c
+d 35 2 0 0 0
+c
+d 37 1 0 1 0
+c
+d 38 3 1 0 0
+c
+d 29 1 0 0 1
+c
+d 26 1 0 0 1
+c
+d 26 3 0 0 1
+c
+d 29 2 0 0 1
+c
+d 95 2 0 0 1
+c
+d 96 2 0 0 1
+c
+d 95 3 0 0 0
+c
+d 96 2 0 0 0
+c
+d 57 1 0 0 0
+c
+d 58 2 0 0 0
+c
+d 120 2 0 0 0
+c
+d 120 2 0 0 1
+c
+d 120 3 0 0 0
+c
+d 63 2 0 0 0
+c
+d 64 1 0 0 0
+c
+d 101 1 0 0 1
+c
+d 102 1 0 0 1
+c
+d 101 2 0 0 0
+c
+d 102 1 0 0 0
+c
+d 83 1 0 1 1
+c
+d 84 1 0 0 1
+c
+d 79 1 0 0 0
+c
+d 46 1 0 1 1
+c
+d 43 1 0 0 1
+c
+d 43 1 0 0 1
+c
+d 46 1 0 1 1
+c
+d 43 3 0 0 0
+c
+d 46 1 0 0 0
+c
+d 86 1 0 0 1
+c
+d 87 2 0 0 1
+c
+d 86 1 0 1 0
+c
+d 87 2 1 0 0
+c
+d 116 2 0 0 0
+c
+d 114 2 0 0 0
+c
+d 47 1 0 0 0
+c
+d 48 1 0 0 0
+c
+d 81 1 0 1 0
+c
+d 82 1 0 0 0
+c
+d 43 2 0 0 0
+c
+d 44 1 0 0 0
+c
+d 79 2 0 0 0
+c
+d 80 1 0 0 0
+c
+d 45 1 0 0 0
+c
+d 48 1 0 1 0
+c
+d 80 1 0 1 0
+c
+d 81 1 0 0 0
+c
+d 112 2 0 0 0
+c
+d 44 1 0 0 0
+c
+d 45 1 0 1 0
+c
+d 80 2 0 1 0
+c
+d 55 1 0 0 1
+c
+d 56 1 0 0 1
+c
+d 53 1 0 1 0
+c
+d 93 1 0 0 1
+c
+d 91 2 0 0 1
+c
+d 92 1 0 0 1
+c
+d 91 2 0 0 1
+c
+d 92 1 0 0 1
+c
+d 93 1 0 0 1
+c
+d 103 1 0 0 1
+c
+d 91 2 0 0 1
+c
+d 92 1 0 0 1
+c
+d 93 1 0 0 1
+c
+d 103 1 0 0 1
+c
+d 93 1 0 0 1
+c
+d 93 1 0 0 0
+c
+d 103 1 0 0 0
+c
+d 104 1 0 0 0
+c
+d 129 3 0 0 0
+c
+d 129 3 0 1 0
+c
+d 10 1 0 0 0
+c
+d 7 1 0 1 1
+c
+d 7 1 0 0 0
+c
+d 9 1 0 0 0
+c
+d 4 1 0 1 1
+c
+d 4 2 0 0 1
+c
+d 5 1 0 1 1
+c
+d 4 3 0 0 1
+c
+d 5 1 0 0 1
+c
+d 129 1 0 1 0
+c
+d 131 2 0 1 0
+c
+d 131 2 0 0 0
+c
+d 97 1 0 1 1
+c
+d 89 1 0 0 1
+c
+d 89 1 0 0 1
+c
+d 97 1 0 0 1
+c
+d 89 1 0 0 0
+c
+d 97 1 0 0 0
+c
+d 59 1 0 0 1
+c
+d 51 2 1 0 0
+c
+d 52 1 0 0 0
+c
+d 76 1 0 0 0
+c
+d 77 1 1 0 0
+c
+d 78 1 0 0 0
+c
+d 109 2 1 0 1
+c
+d 103 1 0 0 0
+c
+d 104 1 0 0 0
+c
+d 65 1 0 0 1
+c
+d 66 1 0 0 1
+c
+d 65 1 0 0 0
+c
+d 66 2 0 0 0
+c
+d 42 3 0 1 0
+c
+d 42 1 0 0 0
+c
+d 16 1 0 0 1
+c
+d 15 3 0 0 0
+c
+d 16 1 0 0 0
+c
+d 7 1 0 0 1
+c
+d 8 3 0 1 1
+c
+d 7 4 0 0 0
+c
+d 8 4 0 0 0
+c
+d 4 1 0 0 0
+c
+d 5 3 0 0 0
+c
+d 6 2 0 0 0
+c
+d 34 1 0 0 0
+c
+d 35 1 0 0 0
+c
+d 36 4 0 1 0
+c
+d 16 1 0 0 1
+c
+d 16 1 0 1 1
+c
+d 42 1 0 0 1
+c
+d 16 2 0 0 1
+c
+d 42 1 0 0 1
+c
+d 16 2 0 0 0
+c
+d 42 1 0 0 0
+c
+d 33 1 0 0 1
+c
+d 32 1 0 0 0
+c
+d 18 1 0 0 1
+c
+d 23 1 0 0 1
+c
+d 18 2 0 0 1
+c
+d 23 1 0 1 1
+c
+d 15 1 0 0 0
+c
+d 23 1 1 0 0
+c
+d 36 1 0 0 0
+c
+d 37 3 1 0 0
+c
+d 16 1 0 0 1
+c
+d 17 1 0 0 1
+c
+d 15 1 0 0 0
+c
+d 17 1 0 0 0
+c
+d 34 3 0 0 0
+c
+d 106 1 0 0 1
+c
+d 97 1 0 0 1
+c
+d 105 1 0 1 0
+c
+d 74 1 0 0 1
+c
+d 59 1 0 0 1
+c
+d 73 1 0 0 1
+c
+d 59 1 0 0 1
+c
+d 73 1 0 0 1
+c
+d 74 2 0 0 1
+c
+d 59 1 0 0 1
+c
+d 73 1 0 0 1
+c
+d 74 2 0 0 1
+c
+d 112 3 1 0 1
+c
+d 112 3 0 0 0
+c
+d 120 4 0 0 0
+c
+d 113 3 1 0 0
+c
+d 67 4 1 0 0
+c
+d 116 1 0 0 1
+c
+d 111 1 0 0 0
+c
+d 20 2 0 0 0
+c
+d 21 1 0 0 0
+c
+d 60 1 0 0 1
+c
+d 73 1 0 0 1
+c
+d 60 1 0 0 1
+c
+d 73 1 0 0 1
+c
+d 74 1 0 0 1
+c
+d 60 1 0 0 1
+c
+d 73 1 0 0 1
+c
+d 74 1 0 0 1
+c
+d 60 2 0 0 1
+c
+d 60 2 0 0 0
+c
+d 98 1 0 0 1
+c
+d 105 1 0 0 0
+c
+d 35 2 0 1 0
+c
+d 35 5 0 0 0
+c
+d 36 1 0 0 0
+c
+d 112 3 0 0 1
+c
+d 112 4 0 0 0
+c
+d 120 1 0 0 0
+c
+d 113 3 0 0 0
+c
+d 119 1 0 0 1
+c
+d 99 1 0 0 1
+c
+d 98 1 0 0 1
+c
+d 106 1 0 0 1
+c
+d 122 1 0 0 1
+c
+d 122 1 0 0 0
+c
+d 35 5 2 0 0
+c
+d 38 1 0 0 0
+c
+d 16 1 0 0 1
+c
+d 16 1 0 1 0
+c
+d 42 1 0 0 0
+c
+d 7 1 0 1 0
+c
+d 4 1 0 0 0
+c
+d 18 1 0 0 0
+c
+d 25 1 1 0 0
+c
+d 7 1 0 0 0
+c
+d 4 1 0 0 0
+c
+d 99 1 0 1 1
+c
+d 98 2 0 0 1
+c
+d 122 2 0 0 1
+c
+d 98 2 0 1 1
+c
+d 99 1 0 0 1
+c
+d 122 2 1 0 1
+c
+d 98 2 0 0 0
+c
+d 99 2 0 0 0
+c
+d 122 5 0 0 0
+c
+d 119 1 0 0 0
+c
+d 129 4 0 0 0
+c
+d 116 1 0 0 1
+c
+d 112 2 0 0 1
+c
+d 111 1 0 1 1
+c
+d 111 1 0 0 1
+c
+d 112 2 0 0 1
+c
+d 116 1 0 0 1
+c
+d 111 1 0 0 1
+c
+d 112 2 0 0 1
+c
+d 116 1 0 0 1
+c
+d 72 3 1 0 0
+c
+d 69 3 0 0 0
+c
+d 112 3 2 0 0
+c
+d 113 3 0 0 0
+c
+d 30 2 1 0 1
+c
+d 35 1 0 0 1
+c
+d 22 1 0 0 0
+c
+d 40 1 0 0 0
+c
+d 23 4 1 0 0
+c
+d 123 1 0 0 1
+c
+d 123 1 0 0 1
+c
+d 124 2 0 0 1
+c
+d 135 2 0 0 1
+c
+d 135 1 1 0 0
+c
+d 15 1 1 0 0
+c
+d 40 3 0 0 0
+c
+d 41 1 0 0 0
+c
+d 23 2 0 0 0
+c
+d 37 6 0 0 0
+c
+d 4 1 0 1 0
+c
+d 5 1 0 1 0
+c
+d 7 1 0 0 0
+c
+d 8 2 0 0 0
+c
+d 23 1 1 0 0
+c
+d 36 5 2 0 0
+c
+d 43 1 0 0 1
+c
+d 44 2 0 0 1
+c
+d 44 1 0 1 0
+c
+d 45 1 0 1 0
+c
+d 79 1 0 0 0
+c
+d 80 1 0 0 0
+c
+d 81 1 0 0 0
+c
+d 129 2 0 0 0
+c
+d 131 1 1 0 0
+c
+d 87 3 0 0 0
+c
+d 50 3 0 2 0
+c
+d 32 1 0 0 1
+c
+d 30 1 0 0 1
+c
+d 31 1 0 0 1
+c
+d 31 2 1 0 0
+c
+d 77 1 0 1 0
+c
+d 118 2 1 0 0
+c
+d 109 4 1 0 0
+c
+d 77 1 0 0 0
+c
+d 78 2 0 0 0
+c
+d 109 1 0 1 0
+c
+d 27 2 0 0 1
+c
+d 26 1 0 0 1
+c
+d 27 1 0 0 1
+c
+d 28 2 0 0 1
+c
+d 26 1 0 0 1
+c
+d 27 3 0 0 1
+c
+d 28 2 0 0 1
+c
+d 29 1 0 0 1
+c
+d 26 1 0 0 1
+c
+d 27 3 0 0 1
+c
+d 28 2 0 0 1
+c
+d 29 1 0 0 1
+c
+d 26 1 0 0 1
+c
+d 28 1 0 0 1
+c
+d 26 1 0 0 0
+c
+d 28 1 0 0 0
+c
+d 23 5 0 0 0
+c
+d 0 4 1 0 0
+c
+d 1 1 1 0 0
+c
+d 2 3 0 0 0
+c
+d 3 1 1 0 0
+c
+d 101 2 0 0 0
+c
+d 102 2 0 0 0
+c
+d 63 1 0 0 1
+c
+d 64 1 0 0 1
+c
+d 63 1 0 0 1
+c
+d 64 2 0 0 1
+c
+d 51 1 0 0 0
+c
+d 63 1 0 0 0
+c
+d 64 2 0 0 0
+c
+d 65 1 0 0 1
+c
+d 66 1 0 0 1
+c
+d 65 1 0 0 0
+c
+d 66 2 0 0 0
+c
+d 103 2 0 0 0
+c
+d 104 2 0 0 0
+c
+d 131 2 0 0 0
+c
+d 7 1 0 0 0
+c
+d 8 3 0 0 0
+c
+d 5 3 0 0 0
+c
+d 6 2 0 0 0
+c
+d 19 1 0 0 1
+c
+d 40 2 1 0 1
+c
+d 41 1 0 0 1
+c
+d 19 2 0 0 0
+c
+d 40 2 0 0 0
+c
+d 41 1 0 0 0
+c
+d 24 1 0 1 1
+c
+d 15 2 1 0 0
+c
+d 16 1 0 0 0
+c
+d 17 2 1 0 0
+c
+d 113 3 1 0 1
+c
+d 113 3 0 0 0
+c
+d 112 3 0 0 0
+c
+d 69 1 1 0 0
+c
+d 71 1 0 0 0
+c
+d 72 1 0 0 0
+c
+d 69 2 0 1 0
+c
+d 70 1 1 0 0
+c
+d 15 1 0 0 1
+c
+d 16 1 0 0 1
+c
+d 42 1 1 0 0
+c
+d 18 3 0 1 0
+c
+d 23 1 0 0 0
+c
+d 25 1 1 0 0
+c
+d 11 1 1 0 1
+c
+d 13 1 0 0 1
+c
+d 14 1 0 0 1
+c
+d 10 1 0 1 0
+c
+d 65 1 0 0 1
+c
+d 66 1 0 0 1
+c
+d 63 1 0 0 1
+c
+d 63 1 0 0 1
+c
+d 65 1 0 0 1
+c
+d 66 2 0 0 1
+c
+d 63 1 0 0 1
+c
+d 65 1 0 0 1
+c
+d 66 2 0 0 1
+c
+d 63 1 0 0 1
+c
+d 63 1 0 0 1
+c
+d 53 1 0 0 1
+c
+d 51 1 0 0 0
+c
+d 53 2 0 0 0
+c
+d 54 1 0 0 0
+c
+d 103 1 0 0 1
+c
+d 101 2 0 0 0
+c
+d 102 1 0 0 0
+c
+d 129 4 0 0 0
+c
+d 50 4 1 0 0
+c
+d 87 4 0 0 1
+c
+d 87 4 0 0 0
+c
+d 116 1 0 0 0
+c
+d 0 4 0 0 0
+c
+d 2 3 0 2 0
+c
+d 68 1 0 1 0
+c
+d 69 3 0 0 0
+c
+d 120 2 1 0 1
+c
+d 120 3 1 1 1
+c
+d 69 1 0 1 0
+c
+d 111 2 0 0 0
+c
+d 109 1 0 0 1
+c
+d 110 1 0 0 1
+c
+d 107 1 0 0 0
+c
+d 110 1 0 0 0
+c
+d 77 3 0 0 0
+c
+d 16 1 0 0 1
+c
+d 16 1 0 1 0
+c
+d 42 1 0 0 0
+c
+d 93 2 0 0 1
+c
+d 94 1 0 0 1
+c
+d 95 3 0 0 1
+c
+d 96 2 0 0 1
+c
+d 94 1 0 0 0
+c
+d 57 1 0 0 1
+c
+d 58 1 0 0 1
+c
+d 57 1 0 0 1
+c
+d 58 2 0 0 1
+c
+d 55 1 0 1 0
+c
+d 109 3 1 0 1
+c
+d 76 1 0 0 1
+c
+d 77 1 0 0 1
+c
+d 78 1 0 0 1
+c
+d 75 1 0 0 0
+c
+d 76 1 0 0 0
+c
+d 77 1 0 0 0
+c
+d 78 1 0 0 0
+c
+d 35 3 0 1 0
+c
+d 36 3 0 0 0
+c
+d 39 1 0 0 0
+c
+d 119 1 0 0 0
+c
+d 99 1 0 1 1
+c
+d 97 1 0 0 1
+c
+d 122 1 0 0 1
+c
+d 122 1 0 0 0
+c
+d 99 1 0 0 1
+c
+d 106 1 0 0 1
+c
+d 122 1 0 0 1
+c
+d 122 1 0 0 0
+c
+d 119 1 0 0 1
+c
+d 119 1 0 0 0
+c
+d 105 3 0 0 1
+c
+d 105 5 0 0 0
+c
+d 73 4 0 0 1
+c
+d 73 7 0 0 0
+c
+d 45 2 1 0 0
+c
+d 48 1 0 0 0
+c
+d 77 1 0 1 0
+c
+d 109 1 0 0 1
+c
+d 81 1 0 0 1
+c
+d 82 1 0 0 1
+c
+d 82 2 0 0 0
+c
+d 83 1 1 0 0
+c
+d 116 1 0 0 1
+c
+d 111 1 0 0 1
+c
+d 120 2 0 0 1
+c
+d 121 2 0 0 1
+c
+d 111 1 0 0 1
+c
+d 116 3 0 0 1
+c
+d 120 2 0 0 1
+c
+d 121 2 1 0 1
+c
+d 111 1 0 0 1
+c
+d 116 3 0 0 1
+c
+d 120 3 0 0 1
+c
+d 121 2 0 0 1
+c
+d 26 1 0 0 0
+c
+d 27 2 1 0 0
+c
+d 28 5 1 0 0
+c
+d 2 4 1 0 0
+c
+d 0 3 1 0 0
+c
+d 23 1 0 1 0
+c
+d 26 1 0 1 0
+c
+d 28 1 0 0 0
+c
+d 30 1 0 0 0
+c
+d 34 1 0 0 0
+c
+d 35 1 0 0 0
+c
+d 123 1 0 0 1
+c
+d 124 1 0 0 1
+c
+d 135 4 0 0 1
+c
+d 77 3 0 0 1
+c
+d 77 2 0 0 0
+c
+d 109 5 2 1 0
+c
+d 15 2 1 0 0
+c
+d 16 1 0 1 0
+c
+d 17 2 1 0 0
+c
+d 23 4 1 0 0
+c
+d 24 1 1 0 0
+c
+d 135 1 0 0 0
+c
+d 15 1 0 0 0
+c
+d 23 3 0 0 0
+c
+d 68 1 0 0 0
+c
+d 71 1 0 0 0
+c
+d 23 1 0 0 1
+c
+d 28 1 0 0 1
+c
+d 23 1 1 0 0
+c
+d 60 1 0 0 1
+c
+d 58 1 0 0 1
+c
+d 62 1 0 0 1
+c
+d 55 1 0 0 1
+c
+d 55 1 0 0 1
+c
+d 58 1 0 0 1
+c
+d 60 2 0 0 1
+c
+d 62 1 0 0 1
+c
+d 53 1 0 0 1
+c
+d 55 1 0 0 1
+c
+d 56 1 0 0 1
+c
+d 58 1 0 0 1
+c
+d 60 3 0 0 1
+c
+d 62 1 0 0 1
+c
+d 73 1 0 0 1
+c
+d 98 1 0 0 1
+c
+d 95 1 0 0 1
+c
+d 100 1 0 0 1
+c
+d 93 1 0 0 0
+c
+d 30 1 1 0 0
+c
+d 32 1 0 0 0
+c
+d 131 4 1 0 1
+c
+d 128 1 0 0 0
+c
+d 24 1 0 0 1
+c
+d 40 2 0 0 1
+c
+d 41 1 0 0 1
+c
+d 40 1 1 0 1
+c
+d 15 1 0 0 0
+c
+d 24 1 0 0 0
+c
+d 35 1 0 0 0
+c
+d 40 2 1 0 0
+c
+d 23 3 1 0 0
+c
+d 131 2 0 1 1
+c
+d 128 1 0 0 1
+c
+d 131 2 1 0 1
+c
+d 128 1 0 0 1
+c
+d 131 5 1 0 1
+c
+d 128 2 0 0 0
+c
+d 129 1 0 0 0
+c
+d 131 5 0 0 0
+c
+d 67 1 0 0 1
+c
+d 67 1 0 0 1
+c
+d 72 1 0 0 1
+c
+d 104 1 0 0 1
+c
+d 67 3 1 0 1
+c
+d 72 1 0 0 1
+c
+d 104 1 0 1 1
+c
+d 67 2 0 0 0
+c
+d 71 1 0 0 0
+c
+d 72 2 0 0 0
+c
+d 103 1 0 0 0
+c
+d 104 1 0 0 0
+c
+d 65 1 0 0 0
+c
+d 67 2 1 0 0
+c
+d 69 1 0 0 0
+c
+d 36 1 0 1 0
+c
+d 129 2 1 1 0
+c
+d 23 3 0 0 0
+c
+d 36 1 0 0 0
+c
+d 37 9 3 0 0
+c
+d 129 2 0 2 1
+c
+d 128 1 0 0 0
+c
+d 18 4 1 0 0
+c
+d 19 1 0 0 0
+c
+d 20 1 0 0 0
+c
+d 2 2 0 0 0
+c
+d 0 4 0 0 0
+c
+d 22 1 0 0 0
+c
+d 40 4 0 0 0
+c
+d 41 1 0 0 0
+c
+d 23 4 1 2 0
+c
+d 7 3 1 0 0
+c
+d 8 1 0 0 0
+c
+d 4 2 0 0 1
+c
+d 5 1 0 0 1
+c
+d 4 2 0 1 0
+c
+d 16 1 0 0 1
+c
+d 15 1 0 0 1
+c
+d 16 1 1 0 1
+c
+d 42 1 0 0 1
+c
+d 42 1 0 1 0
+c
+d 67 1 0 0 1
+c
+d 67 2 0 0 1
+c
+d 72 1 0 0 1
+c
+d 101 1 0 0 1
+c
+d 102 1 0 0 1
+c
+d 67 4 0 0 1
+c
+d 72 1 0 0 1
+c
+d 101 1 0 0 1
+c
+d 102 1 0 0 1
+c
+d 67 4 0 0 1
+c
+d 72 1 0 0 1
+c
+d 101 1 0 0 1
+c
+d 102 1 0 0 1
+c
+d 101 1 0 0 1
+c
+d 67 1 0 0 0
+c
+d 72 2 0 0 0
+c
+d 101 1 0 0 0
+c
+d 63 1 0 0 0
+c
+d 67 2 1 0 0
+c
+d 69 1 0 1 0
+c
+d 42 1 0 0 1
+c
+d 42 3 0 0 0
+c
+d 97 1 0 1 1
+c
+d 105 1 0 0 0
+c
+d 59 1 0 1 1
+c
+d 73 1 0 0 1
+c
+d 59 1 0 0 1
+c
+d 73 1 0 1 1
+c
+d 51 2 0 0 0
+c
+d 52 1 0 0 0
+c
+d 54 1 0 0 0
+c
+d 59 2 0 0 0
+c
+d 73 1 0 0 0
+c
+d 42 3 0 0 1
+c
+d 16 1 0 0 0
+c
+d 42 3 0 0 0
+c
+d 0 6 2 0 0
+c
+d 2 4 2 1 0
+c
+d 42 1 1 0 0
+c
+d 30 1 0 1 0
+c
+d 32 1 0 0 0
+c
+d 34 2 0 0 0
+c
+d 33 2 0 0 1
+c
+d 32 2 0 0 1
+c
+d 33 1 0 0 1
+c
+d 30 1 0 1 0
+c
+d 15 2 0 0 0
+c
+d 16 1 0 0 0
+c
+d 17 2 0 0 0
+c
+d 0 2 1 0 0
+c
+d 1 2 0 0 0
+c
+d 2 2 0 1 0
+c
+d 137 1 0 0 1
+c
+d 127 1 0 0 1
+c
+d 137 2 0 0 1
+c
+d 127 2 0 0 1
+c
+d 132 3 1 0 1
+c
+d 137 3 0 0 1
+c
+d 125 1 0 0 0
+c
+d 127 2 0 0 0
+c
+d 132 5 0 0 0
+c
+d 137 3 0 0 0
+c
+d 36 8 2 0 0
+c
+d 47 1 0 0 0
+c
+d 50 3 0 0 0
+c
+d 86 1 0 0 1
+c
+d 81 1 0 1 0
+c
+d 82 1 0 0 0
+c
+d 86 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 116 1 0 1 1
+c
+d 112 2 0 0 1
+c
+d 113 1 0 0 1
+c
+d 112 1 0 0 0
+c
+d 111 3 0 0 0
+c
+d 50 3 0 0 1
+c
+d 50 3 1 0 0
+c
+d 112 1 1 0 0
+c
+d 86 2 0 0 0
+c
+d 87 1 0 0 0
+c
+d 86 1 0 0 1
+c
+d 82 1 0 1 0
+c
+d 83 1 0 0 0
+c
+d 86 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 88 1 0 0 0
+c
+d 46 1 0 0 1
+c
+d 47 1 0 1 1
+c
+d 49 1 0 0 1
+c
+d 50 3 0 0 1
+c
+d 15 2 1 0 0
+c
+d 16 1 0 0 0
+c
+d 17 2 1 0 0
+c
+d 24 2 1 0 0
+c
+d 35 1 0 0 0
+c
+d 29 2 0 0 1
+c
+d 26 2 1 0 1
+c
+d 28 1 0 1 1
+c
+d 29 1 0 0 1
+c
+d 27 1 0 0 0
+c
+d 109 2 0 0 1
+c
+d 110 1 0 0 1
+c
+d 109 3 0 0 0
+c
+d 76 1 1 0 1
+c
+d 77 2 0 0 1
+c
+d 76 1 1 0 0
+c
+d 77 1 0 1 0
+c
+d 129 3 0 0 0
+c
+d 129 2 0 1 0
+c
+d 131 1 1 0 0
+c
+d 129 1 0 0 1
+c
+d 130 1 0 0 1
+c
+d 128 2 0 0 1
+c
+d 129 1 0 0 1
+c
+d 128 2 1 0 1
+c
+d 129 2 0 0 1
+c
+d 130 2 0 0 1
+c
+d 128 2 0 0 0
+c
+d 129 3 0 0 0
+c
+d 130 2 0 0 0
+c
+d 50 1 0 0 1
+c
+d 44 2 0 0 0
+c
+d 45 1 0 1 0
+c
+d 50 2 0 0 0
+c
+d 80 2 0 0 0
+c
+d 86 3 0 0 0
+c
+d 87 1 0 0 0
+c
+d 42 6 1 0 0
+c
+d 45 1 0 0 1
+c
+d 75 1 0 0 1
+c
+d 76 1 0 0 1
+c
+d 45 1 1 0 0
+c
+d 46 2 1 0 0
+c
+d 47 1 0 0 0
+c
+d 84 1 0 0 1
+c
+d 85 1 0 0 1
+c
+d 108 1 0 0 1
+c
+d 109 1 0 0 1
+c
+d 83 1 0 0 0
+c
+d 84 1 0 0 0
+c
+d 19 1 0 1 0
+c
+d 22 1 0 0 0
+c
+d 45 1 0 0 0
+c
+d 47 1 0 0 0
+c
+d 50 4 0 0 0
+c
+d 86 1 0 0 1
+c
+d 80 1 0 1 0
+c
+d 81 1 0 0 0
+c
+d 86 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 112 3 0 0 0
+c
+d 113 1 0 0 0
+c
+d 134 1 0 0 1
+c
+d 123 1 0 0 1
+c
+d 134 2 0 0 1
+c
+d 126 1 0 1 1
+c
+d 123 1 0 0 0
+c
+d 126 1 0 0 0
+c
+d 134 3 0 0 0
+c
+d 123 2 0 0 1
+c
+d 134 1 0 0 1
+c
+d 126 1 0 0 1
+c
+d 134 5 1 0 1
+c
+d 123 3 0 0 1
+c
+d 126 2 0 0 1
+c
+d 134 5 0 0 1
+c
+d 123 3 0 0 1
+c
+d 126 2 0 0 1
+c
+d 134 5 0 0 1
+c
+d 126 1 0 0 1
+c
+d 123 2 0 0 0
+c
+d 126 2 0 0 0
+c
+d 134 2 0 0 0
+c
+d 69 3 1 1 0
+c
+d 120 3 1 1 0
+c
+d 101 1 0 0 1
+c
+d 103 2 0 0 0
+c
+d 104 2 0 0 0
+c
+d 63 1 0 0 1
+c
+d 64 1 0 0 1
+c
+d 65 3 1 0 1
+c
+d 66 1 0 0 1
+c
+d 57 1 0 0 1
+c
+d 58 2 0 0 1
+c
+d 63 1 0 0 1
+c
+d 64 1 0 0 1
+c
+d 65 4 0 0 1
+c
+d 66 2 0 0 1
+c
+d 57 2 1 0 0
+c
+d 58 2 1 0 0
+c
+d 63 1 0 0 0
+c
+d 64 1 0 0 0
+c
+d 65 4 1 0 0
+c
+d 66 2 0 0 0
+c
+d 111 1 0 0 1
+c
+d 115 1 0 0 1
+c
+d 49 1 0 0 0
+c
+d 50 1 1 0 0
+c
+d 116 1 0 0 1
+c
+d 117 1 0 0 1
+c
+d 87 1 1 0 0
+c
+d 88 1 0 0 0
+c
+d 69 1 0 0 0
+c
+d 72 1 0 0 0
+c
+d 69 1 0 0 0
+c
+d 70 1 0 0 0
+c
+d 133 1 0 0 1
+c
+d 133 1 1 0 0
+c
+d 127 1 0 0 1
+c
+d 125 1 0 0 1
+c
+d 132 2 0 0 1
+c
+d 125 1 0 0 1
+c
+d 127 2 0 0 1
+c
+d 132 2 0 0 1
+c
+d 125 2 0 0 0
+c
+d 127 2 0 0 0
+c
+d 132 4 0 0 0
+c
+d 133 1 0 0 0
+c
+d 112 4 1 1 0
+c
+d 113 3 0 0 0
+c
+d 67 2 1 0 1
+c
+d 68 1 0 0 1
+c
+d 65 1 0 0 1
+c
+d 67 3 0 0 1
+c
+d 68 2 0 0 1
+c
+d 69 1 0 0 1
+c
+d 67 1 0 0 1
+c
+d 67 3 0 1 0
+c
+d 68 1 0 0 0
+c
+d 102 1 0 0 0
+c
+d 112 1 1 0 0
+c
+d 113 2 0 0 0
+c
+d 120 3 1 0 0
+c
+d 67 1 0 0 1
+c
+d 67 1 0 0 0
+c
+d 72 1 0 0 0
+c
+d 104 1 0 0 0
+c
+d 65 1 0 0 0
+c
+d 67 2 0 0 0
+c
+d 69 1 0 0 0
+c
+d 20 1 0 0 1
+c
+d 21 1 0 0 1
+c
+d 20 4 0 0 0
+c
+d 18 3 1 0 1
+c
+d 20 3 0 0 1
+c
+d 21 1 0 0 1
+c
+d 15 1 0 1 0
+c
+d 127 1 0 0 1
+c
+d 125 1 0 0 1
+c
+d 132 2 0 0 1
+c
+d 132 1 1 0 0
+c
+d 114 1 0 0 1
+c
+d 111 1 0 1 1
+c
+d 112 3 0 0 1
+c
+d 114 1 0 0 1
+c
+d 112 1 1 0 0
+c
+d 111 3 0 0 1
+c
+d 120 3 0 0 1
+c
+d 120 1 0 0 0
+c
+d 43 1 0 1 1
+c
+d 44 1 0 1 1
+c
+d 43 3 0 0 0
+c
+d 44 2 0 0 0
+c
+d 86 1 0 0 1
+c
+d 86 1 0 0 1
+c
+d 79 1 0 0 0
+c
+d 80 1 0 1 0
+c
+d 86 3 1 1 0
+c
+d 88 1 0 0 0
+c
+d 115 1 0 0 1
+c
+d 112 1 0 1 1
+c
+d 50 1 0 0 1
+c
+d 49 1 0 0 1
+c
+d 49 1 0 0 1
+c
+d 50 1 0 0 1
+c
+d 112 1 0 0 1
+c
+d 115 2 0 0 1
+c
+d 120 1 0 0 1
+c
+d 120 2 0 0 0
+c
+d 117 1 0 0 1
+c
+d 113 1 0 1 1
+c
+d 86 1 0 0 1
+c
+d 88 1 0 0 0
+c
+d 79 1 0 0 1
+c
+d 83 1 0 1 1
+c
+d 86 2 0 0 1
+c
+d 88 1 0 0 1
+c
+d 79 1 0 2 0
+c
+d 49 3 0 0 1
+c
+d 46 1 0 0 1
+c
+d 49 3 0 0 1
+c
+d 43 1 0 0 0
+c
+d 119 1 0 0 1
+c
+d 61 1 0 0 0
+c
+d 99 1 0 0 1
+c
+d 97 1 0 0 1
+c
+d 100 1 0 0 1
+c
+d 122 1 0 0 1
+c
+d 122 1 0 0 0
+c
+d 128 1 1 0 0
+c
+d 23 5 1 0 0
+c
+d 25 1 1 0 0
+c
+d 67 3 1 0 0
+c
+d 69 1 0 0 0
+c
+d 111 1 0 0 0
+c
+d 116 3 1 1 0
+c
+d 86 1 0 1 0
+c
+d 87 2 0 1 0
+c
+d 116 1 0 0 0
+c
+d 111 2 0 0 1
+c
+d 114 3 0 0 0
+c
+d 69 2 1 0 0
+c
+d 72 1 0 0 0
+c
+d 69 2 0 1 0
+c
+d 70 1 0 0 0
+c
+d 69 1 0 0 0
+c
+d 120 4 0 0 0
+c
+d 77 8 0 1 0
+c
+d 78 2 0 0 0
+c
+d 118 2 1 0 0
+c
+d 107 1 0 0 0
+c
+d 109 4 2 0 0
+c
+d 110 2 0 0 0
+c
+d 19 1 0 1 1
+c
+d 20 1 0 1 1
+c
+d 42 1 0 0 0
+c
+d 67 4 1 0 0
+c
+d 69 1 0 1 0
+c
+d 4 1 0 0 0
+c
+d 5 3 2 0 0
+c
+d 7 3 0 0 0
+c
+d 8 3 2 0 0
+c
+d 9 1 1 0 0
+c
+d 135 1 0 0 1
+c
+d 124 1 1 0 0
+c
+d 131 1 0 0 1
+c
+d 128 1 0 0 0
+c
+d 35 7 0 2 0
+c
+d 38 1 0 0 0
+c
+d 129 4 0 0 0
+c
+d 109 1 0 0 1
+c
+d 108 1 0 0 0
+c
+d 75 2 1 0 0
+c
+d 76 2 1 0 0
+c
+d 77 1 0 0 0
+c
+d 78 1 0 1 0
+c
+d 67 1 0 0 1
+c
+d 67 1 0 1 1
+c
+d 72 1 0 1 1
+c
+d 104 1 0 0 0
+c
+d 65 1 0 1 0
+c
+d 67 2 1 0 0
+c
+d 69 1 0 0 0
+c
+d 106 2 0 0 1
+c
+d 98 1 0 0 1
+c
+d 98 1 0 0 1
+c
+d 105 1 0 0 1
+c
+d 105 1 0 0 0
+c
+d 73 1 0 0 1
+c
+d 119 1 0 0 0
+c
+d 23 3 0 0 0
+c
+d 26 5 0 0 0
+c
+d 30 3 1 1 1
+c
+d 32 7 2 0 1
+c
+d 33 2 0 0 1
+c
+d 34 1 1 0 1
+c
+d 35 1 0 0 1
+c
+d 31 1 0 0 0
+c
+d 91 3 0 0 1
+c
+d 92 2 0 0 1
+c
+d 103 3 0 0 1
+c
+d 104 1 0 0 1
+c
+d 90 1 0 0 0
+c
+d 53 1 0 0 1
+c
+d 54 1 0 0 1
+c
+d 65 1 0 0 1
+c
+d 66 2 0 0 1
+c
+d 53 1 1 0 0
+c
+d 73 1 0 0 0
+c
+d 106 1 0 0 1
+c
+d 97 1 0 0 1
+c
+d 105 1 0 0 1
+c
+d 106 1 1 0 1
+c
+d 97 1 0 0 1
+c
+d 99 1 0 0 1
+c
+d 105 1 0 0 1
+c
+d 106 2 0 0 1
+c
+d 122 1 1 0 1
+c
+d 97 2 0 0 0
+c
+d 99 2 0 0 0
+c
+d 105 1 0 0 0
+c
+d 106 3 0 0 0
+c
+d 122 2 0 0 0
+c
+d 43 1 1 0 1
+c
+d 44 1 0 0 1
+c
+d 77 2 0 0 1
+c
+d 44 1 1 0 0
+c
+d 45 1 0 0 0
+c
+d 77 2 1 0 0
+c
+d 79 1 1 0 1
+c
+d 80 1 0 0 1
+c
+d 81 2 0 0 1
+c
+d 82 1 0 0 1
+c
+d 109 3 0 0 1
+c
+d 79 1 1 0 0
+c
+d 81 1 1 0 0
+c
+d 111 1 0 1 1
+c
+d 116 3 1 1 1
+c
+d 121 1 1 0 0
+c
+d 32 1 0 0 0
+c
+d 34 1 0 0 0
+c
+d 36 1 0 1 0
+c
+d 69 4 1 1 0
+c
+d 129 2 0 1 0
+c
+d 131 3 1 0 0
+c
+d 0 5 1 1 0
+c
+d 1 3 1 0 0
+c
+d 2 7 2 0 0
+c
+d 3 2 1 0 0
+c
+d 23 5 1 0 0
+c
+d 26 1 0 0 0
+c
+d 36 2 1 1 0
+c
+d 35 6 1 0 0
+c
+d 36 2 1 1 0
+c
+d 7 2 0 1 1
+c
+d 7 1 0 1 0
+c
+d 4 1 0 1 0
+c
+d 35 7 1 0 1
+c
+d 36 1 0 0 1
+c
+d 40 3 1 0 1
+c
+d 41 1 0 0 1
+c
+d 40 1 1 0 0
+c
+d 69 3 0 0 1
+c
+d 71 1 0 0 1
+c
+d 72 1 0 0 1
+c
+d 69 4 0 0 0
+c
+d 71 1 0 0 0
+c
+d 72 1 0 0 0
+c
+d 120 5 0 0 0
+c
+d 16 1 0 0 1
+c
+d 42 8 1 0 1
+c
+d 42 2 2 0 0
+c
+d 128 1 0 0 1
+c
+d 67 1 0 0 1
+c
+d 103 1 0 0 1
+c
+d 67 1 1 0 1
+c
+d 68 3 0 0 1
+c
+d 71 2 0 0 1
+c
+d 102 1 0 0 0
+c
+d 124 1 0 0 0
+c
+d 15 1 1 0 1
+c
+d 16 2 0 0 1
+c
+d 17 3 0 0 1
+c
+d 15 1 1 0 0
+c
+d 17 1 1 0 0
+c
+d 120 1 0 0 1
+c
+d 69 2 0 0 0
+c
+d 120 2 0 0 0
+c
+d 69 2 0 0 1
+c
+d 120 3 0 0 1
+c
+d 69 2 1 0 0
+c
+d 15 5 0 0 1
+c
+d 16 3 1 0 1
+c
+d 17 2 0 0 1
+c
+d 20 4 1 0 1
+c
+d 21 1 0 0 1
+c
+d 15 7 0 0 1
+c
+d 16 4 0 0 1
+c
+d 17 3 0 0 1
+c
+d 20 4 0 0 1
+c
+d 21 1 0 0 1
+c
+d 42 1 0 0 1
+c
+d 15 1 1 0 0
+c
+d 16 1 1 0 0
+c
+d 17 1 0 0 0
+c
+d 127 3 0 0 1
+c
+d 137 3 1 0 1
+c
+d 127 1 0 0 0
+c
+d 91 1 0 0 1
+c
+d 105 5 1 0 1
+c
+d 89 1 0 1 0
+c
+d 91 1 0 1 0
+c
+d 105 1 1 0 0
+c
+d 73 6 1 0 1
+c
+d 53 2 0 0 0
+c
+d 54 1 0 0 0
+c
+d 16 1 0 0 0
+c
+d 42 5 1 1 0
+c
+d 0 1 0 0 0
+c
+d 2 3 1 2 0
+c
+d 51 3 1 0 0
+c
+d 52 2 1 0 0
+c
+d 63 4 0 0 0
+c
+d 64 2 1 0 0
+c
+d 111 2 0 0 1
+c
+d 111 2 0 0 0
+c
+d 129 5 2 0 0
+c
+d 0 8 2 2 0
+c
+d 2 7 2 0 0
+c
+d 93 1 0 0 0
+c
+d 55 2 0 0 1
+c
+d 56 1 0 0 1
+c
+d 119 2 1 0 0
+c
+d 18 3 0 0 0
+c
+d 19 2 1 0 0
+c
+d 20 1 0 1 0
+c
+d 15 1 0 0 1
+c
+d 15 3 0 0 0
+c
+d 16 1 0 0 0
+c
+d 17 2 0 0 0
+c
+d 40 3 0 0 0
+c
+d 41 1 0 0 0
+c
+d 92 1 0 0 0
+c
+d 53 1 0 0 0
+c
+d 55 2 1 0 0
+c
+d 56 1 1 0 0
+c
+d 65 1 1 0 0
+c
+d 66 2 1 0 0
+c
+d 15 2 1 0 0
+c
+d 16 1 0 1 0
+c
+d 17 2 1 0 0
+c
+d 23 3 1 0 0
+c
+d 24 2 0 0 0
+c
+d 37 2 0 0 0
+c
+d 4 4 0 0 1
+c
+d 5 4 1 0 1
+c
+d 6 2 0 0 1
+c
+d 4 2 1 1 0
+c
+d 7 1 0 0 0
+c
+d 8 1 0 0 0
+c
+d 69 3 1 0 0
+c
+d 72 1 1 0 0
+c
+d 23 1 1 0 0
+c
+d 26 2 1 1 0
+c
+d 28 2 2 0 0
+c
+d 29 2 0 0 0
+c
+d 107 1 0 0 1
+c
+d 109 5 1 1 1
+c
+d 110 3 1 0 1
+c
+d 107 2 0 0 0
+c
+d 109 9 0 0 0
+c
+d 110 3 0 0 0
+c
+d 77 8 3 0 0
+c
+d 23 11 1 0 0
+c
+d 37 4 1 1 0
+c
+d 107 1 0 0 0
+c
+d 76 1 1 0 0
+c
+d 77 2 0 0 0
+c
+d 78 2 0 0 0
+c
+d 111 3 1 1 0
+c
+d 116 4 1 0 0
+c
+d 0 3 1 2 0
+c
+d 2 3 2 0 0
+c
+d 112 1 0 0 0
+c
+d 68 1 0 0 0
+c
+d 84 2 0 0 1
+c
+d 85 3 0 0 1
+c
+d 108 1 0 0 1
+c
+d 109 1 0 0 1
+c
+d 79 3 0 0 1
+c
+d 83 1 0 0 1
+c
+d 84 1 1 0 1
+c
+d 85 1 1 0 1
+c
+d 108 1 0 0 1
+c
+d 109 1 0 0 1
+c
+d 79 3 0 0 1
+c
+d 81 1 0 0 1
+c
+d 82 1 1 0 1
+c
+d 83 1 1 0 1
+c
+d 84 2 0 0 1
+c
+d 85 1 0 0 1
+c
+d 108 2 0 0 1
+c
+d 109 3 0 0 1
+c
+d 79 3 0 0 0
+c
+d 81 1 0 0 0
+c
+d 82 3 0 0 0
+c
+d 83 2 0 0 0
+c
+d 84 3 0 0 0
+c
+d 85 1 0 0 0
+c
+d 108 2 0 0 0
+c
+d 109 4 0 0 0
+c
+d 43 3 0 0 1
+c
+d 43 3 0 0 1
+c
+d 45 2 0 0 1
+c
+d 47 2 0 0 1
+c
+d 48 2 0 0 1
+c
+d 76 1 0 0 1
+c
+d 77 1 0 0 1
+c
+d 45 1 1 0 0
+c
+d 96 1 0 0 1
+c
+d 104 1 0 0 0
+c
+d 86 3 1 0 0
+c
+d 87 4 1 0 0
+c
+d 50 3 1 0 1
+c
+d 114 3 2 0 1
+c
+d 50 5 0 0 0
+c
+d 111 1 0 0 0
+c
+d 114 4 0 0 0
+c
+d 30 1 0 0 1
+c
+d 31 1 0 0 1
+c
+d 33 1 0 0 1
+c
+d 30 1 0 0 1
+c
+d 32 1 0 0 1
+c
+d 31 2 1 0 0
+c
+d 32 1 0 1 0
+c
+d 129 2 0 1 0
+c
+d 131 3 1 0 0
+c
+d 59 2 0 0 1
+c
+d 62 1 0 0 1
+c
+d 52 1 0 0 1
+c
+d 57 2 0 0 1
+c
+d 58 1 0 0 1
+c
+d 62 1 0 0 1
+c
+d 57 1 1 0 0
+c
+d 95 1 0 0 1
+c
+d 122 1 1 0 0
+c
+d 113 3 1 1 0
+c
+d 120 3 1 0 0
+c
+d 35 5 1 1 0
+c
+d 36 4 1 0 0
+c
+d 37 1 0 0 0
+c
+d 38 5 0 0 0
+c
+d 39 5 1 0 0
+c
+d 44 1 0 0 1
+c
+d 77 8 1 2 1
+c
+d 118 2 0 0 1
+c
+d 77 2 2 1 0
+c
+d 81 1 0 0 0
+c
+d 109 5 1 1 0
+c
+d 47 1 1 0 0
+c
+d 82 1 0 0 0
+c
+d 83 2 0 0 0
+c
+d 86 2 1 0 0
+c
+d 87 1 0 1 0
+c
+d 88 1 0 0 0
+c
+d 86 4 0 0 1
+c
+d 87 1 0 0 1
+c
+d 113 3 0 0 1
+c
+d 112 1 0 0 0
+c
+d 120 2 1 0 0
+c
+d 26 1 0 1 0
+c
+d 34 1 0 0 0
+c
+d 35 1 0 0 0
+c
+d 36 5 1 0 0
+c
+d 79 3 0 0 0
+c
+d 80 1 0 0 0
+c
+d 86 3 1 0 0
+c
+d 88 1 0 0 0
+c
+d 43 1 0 0 0
+c
+d 44 1 1 0 0
+c
+d 16 1 1 0 0
+c
+d 42 7 0 0 0
+c
+d 63 1 0 0 1
+c
+d 51 1 0 0 0
+c
+d 69 4 2 0 0
+c
+d 72 1 0 0 0
+c
+d 120 3 1 0 0
+c
+d 69 3 1 0 0
+c
+d 70 2 1 0 0
+c
+d 120 3 1 1 0
+c
+d 132 1 0 0 0
+c
+d 134 1 0 0 0
+c
+d 4 2 0 0 1
+c
+d 4 4 0 0 0
+c
+d 5 3 0 0 0
+c
+d 6 2 0 0 0
+c
+d 7 7 1 2 0
+c
+d 8 3 1 0 0
+c
+d 9 2 1 0 0
+c
+d 129 1 0 1 1
+c
+d 128 2 1 0 1
+c
+d 130 1 0 0 1
+c
+d 128 1 1 0 0
+c
+d 55 1 0 0 0
+c
+d 57 1 0 0 0
+c
+d 58 2 0 0 0
+c
+d 63 1 0 0 0
+c
+d 64 2 0 0 0
+c
+d 65 2 1 0 0
+c
+d 66 2 0 0 0
+c
+d 69 3 0 0 0
+c
+d 120 3 0 0 0
+a
+b 51
+b 53
+b 55
+b 53
+b 1
+b 13
+b 0
+b 11
+b 50
+b 60
+b 47
+b 1
+b 58
+b 1
+b 38
+b 40
+b 50
+b 38
+b 1
+b 1
+b 3
+b 1
+b 3
+b 4
+b 1
+b 9
+b 3
+b 4
+b 0
+b 1
+b 4
+b 55
+b 57
+b 55
+b 1
+b 43
+b 45
+b 47
+b 45
+b 1
+b 52
+b 25
+b 27
+b 29
+b 2
+b 12
+b 58
+b 35
+b 37
+b 35
+b 1
+b 8
+b 10
+b 59
+b 58
+b 1
+b 7
+b 6
+b 1
+b 62
+b 64
+b 39
+b 0
+b 2
+b 10
+b 8
+b 0
+b 2
+b 36
+b 57
+b 35
+b 67
+b 33
+b 1
+b 64
+b 1
+b 17
+b 77
+b 58
+b 60
+b 62
+b 58
+b 1
+b 25
+b 27
+b 71
+b 70
+b 1
+b 51
+b 53
+b 66
+b 76
+b 75
+b 1
+b 41
+b 40
+b 1
+b 48
+b 50
+b 45
+b 1
+b 23
+b 20
+b 1
+b 3
+b 19
+b 0
+b 1
+b 16
+b 1
+b 4
+b 24
+b 56
+b 3
+b 1
+b 42
+b 44
+b 46
+b 5
+b 11
+b 19
+b 21
+b 7
+b 9
+b 11
+b 6
+b 8
+b 7
+b 1
+b 12
+b 10
+b 1
+b 27
+b 37
+b 44
+b 19
+b 74
+b 71
+b 1
+b 37
+b 63
+b 65
+b 29
+b 67
+b 69
+b 28
+b 1
+b 14
+b 16
+b 18
+b 11
+b 1
+b 17
+b 15
+b 21
+b 3
+b 3
+b 21
+b 23
+b 3
+b 21
+b 23
+b 1
+b 1
+b 4
+b 6
+b 5
+b 1
+b 17
+b 31
+b 7
+b 15
+b 6
+b 1
+b 8
+b 3
+b 19
+b 21
+b 23
+b 20
+b 28
+b 22
+b 16
+b 0
+b 2
+b 13
+b 5
+b 7
+b 5
+b 7
+b 10
+b 13
+b 5
+b 7
+b 10
+b 13
+b 14
+b 4
+b 6
+b 6
+b 1
+b 0
+b 5
+b 0
+b 1
+b 1
+b 11
+b 0
+b 5
+b 1
+b 11
+b 0
+b 5
+b 19
+b 27
+b 29
+b 27
+b 1
+b 4
+b 7
+b 9
+b 34
+b 40
+b 62
+b 61
+b 1
+b 59
+b 66
+b 76
+b 58
+b 1
+b 4
+b 2
+b 4
+b 3
+b 3
+b 5
+b 3
+b 5
+b 9
+b 3
+b 3
+b 5
+b 9
+b 3
+b 16
+b 18
+b 2
+b 2
+b 5
+b 7
+b 16
+b 18
+b 2
+b 5
+b 7
+b 16
+b 18
+b 15
+b 17
+b 3
+b 7
+b 61
+b 46
+b 49
+b 50
+b 58
+b 12
+b 7
+b 8
+b 11
+b 6
+b 9
+b 9
+b 12
+b 6
+b 11
+b 9
+b 12
+b 6
+b 11
+b 38
+b 40
+b 42
+b 42
+b 1
+b 21
+b 59
+b 1
+b 26
+b 6
+b 5
+b 1
+b 2
+b 4
+b 61
+b 63
+b 65
+b 67
+b 9
+b 4
+b 14
+b 4
+b 9
+b 14
+b 4
+b 9
+b 10
+b 5
+b 15
+b 55
+b 57
+b 73
+b 72
+b 1
+b 0
+b 2
+b 24
+b 0
+b 1
+b 6
+b 1
+b 23
+b 7
+b 7
+b 7
+b 1
+b 23
+b 7
+b 7
+b 1
+b 23
+b 36
+b 38
+b 33
+b 1
+b 1
+b 8
+b 0
+b 1
+b 0
+b 16
+b 62
+b 15
+b 1
+b 0
+b 11
+b 11
+b 11
+b 1
+b 0
+b 4
+b 6
+b 8
+b 9
+b 6
+b 2
+b 7
+b 2
+b 13
+b 2
+b 7
+b 13
+b 2
+b 7
+b 7
+b 3
+b 15
+b 17
+b 54
+b 6
+b 11
+b 13
+b 11
+b 1
+b 6
+b 11
+b 12
+b 7
+b 30
+b 32
+b 62
+b 19
+b 5
+b 4
+b 1
+b 13
+b 9
+b 13
+b 6
+b 8
+b 9
+b 18
+b 44
+b 46
+b 47
+b 51
+b 44
+b 2
+b 25
+b 23
+b 2
+b 8
+b 17
+b 18
+b 71
+b 16
+b 1
+b 7
+b 1
+b 26
+b 50
+b 14
+b 62
+b 61
+b 1
+b 19
+b 13
+b 6
+b 9
+b 0
+b 19
+b 3
+b 2
+b 1
+b 6
+b 8
+b 9
+b 9
+b 11
+b 13
+b 7
+b 3
+b 5
+b 33
+b 12
+b 14
+b 14
+b 1
+b 42
+b 44
+b 29
+b 37
+b 28
+b 1
+b 33
+b 1
+b 3
+b 37
+b 1
+b 0
+b 1
+b 41
+b 0
+b 4
+b 2
+b 1
+b 23
+b 14
+b 19
+b 18
+b 21
+b 17
+b 3
+b 5
+b 3
+b 1
+b 3
+b 44
+b 43
+b 1
+b 7
+b 17
+b 6
+b 6
+b 8
+b 10
+b 7
+b 20
+b 56
+b 53
+b 1
+b 31
+b 33
+b 35
+b 31
+b 1
+b 25
+b 12
+b 7
+b 30
+b 7
+b 6
+b 3
+b 3
+b 3
+b 0
+b 2
+b 18
+b 0
+b 1
+b 4
+b 0
+b 2
+b 18
+b 11
+b 11
+b 12
+b 10
+b 13
+b 12
+b 10
+b 13
+b 12
+b 10
+b 7
+b 15
+b 5
+b 3
+b 4
+b 5
+b 3
+b 4
+b 5
+b 3
+b 8
+b 6
+b 8
+b 9
+b 6
+b 8
+b 9
+b 6
+b 8
+b 14
+b 9
+b 8
+b 14
+b 9
+b 8
+b 14
+b 11
+b 9
+b 13
+b 11
+b 16
+b 0
+b 14
+b 0
+b 16
+b 17
+b 14
+b 0
+b 16
+b 17
+b 14
+b 1
+b 1
+b 15
+b 7
+b 16
+b 0
+b 6
+b 17
+b 0
+b 16
+b 6
+b 17
+b 0
+b 16
+b 6
+b 1
+b 1
+b 15
+b 13
+b 79
+b 81
+b 83
+b 10
+b 24
+b 10
+b 11
+b 24
+b 12
+b 22
+b 7
+b 67
+b 69
+b 71
+b 89
+b 73
+b 87
+b 72
+b 73
+b 87
+b 6
+b 8
+b 18
+b 7
+b 4
+b 6
+b 1
+b 20
+b 4
+b 6
+b 1
+b 17
+b 20
+b 12
+b 17
+b 6
+b 35
+b 2
+b 24
+b 23
+b 1
+b 30
+b 27
+b 10
+b 9
+b 28
+b 33
+b 4
+b 15
+b 22
+b 50
+b 53
+b 11
+b 57
+b 39
+b 67
+b 66
+b 1
+b 1
+b 0
+b 1
+b 20
+b 1
+b 1
+b 18
+b 20
+b 1
+b 18
+b 20
+b 44
+b 6
+b 11
+b 26
+b 29
+b 8
+b 31
+b 6
+b 13
+b 24
+b 30
+b 46
+b 43
+b 1
+b 10
+b 60
+b 59
+b 1
+b 4
+b 64
+b 61
+b 1
+b 8
+b 10
+b 3
+b 17
+b 31
+b 14
+b 31
+b 33
+b 35
+b 31
+b 1
+b 13
+b 34
+b 42
+b 40
+b 1
+b 74
+b 76
+b 84
+b 73
+b 74
+b 76
+b 84
+b 19
+b 11
+b 10
+b 1
+b 18
+b 8
+b 7
+b 1
+b 5
+b 14
+b 23
+b 7
+b 29
+b 31
+b 33
+b 31
+b 1
+b 8
+b 1
+b 1
+b 6
+b 8
+b 1
+b 6
+b 8
+b 9
+b 0
+b 2
+b 0
+b 1
+b 1
+b 41
+b 6
+b 5
+b 1
+b 3
+b 1
+b 0
+b 2
+b 2
+b 0
+b 2
+b 2
+b 3
+b 0
+b 2
+b 2
+b 3
+b 4
+b 6
+b 8
+b 4
+b 6
+b 8
+b 2
+b 37
+b 36
+b 2
+b 9
+b 1
+b 2
+b 8
+b 1
+b 1
+b 3
+b 22
+b 3
+b 5
+b 22
+b 3
+b 5
+b 22
+b 46
+b 4
+b 5
+b 23
+b 6
+b 3
+b 0
+b 1
+b 0
+b 2
+b 52
+b 3
+b 3
+b 1
+b 1
+b 27
+b 26
+b 1
+b 2
+b 2
+b 1
+b 27
+b 2
+b 1
+b 27
+b 49
+b 48
+b 2
+b 24
+b 28
+b 29
+b 37
+b 28
+b 1
+b 12
+b 10
+b 13
+b 12
+b 10
+b 13
+b 12
+b 10
+b 3
+b 0
+b 2
+b 18
+b 0
+b 1
+b 13
+b 11
+b 5
+b 3
+b 4
+b 5
+b 3
+b 4
+b 5
+b 3
+b 11
+b 11
+b 4
+b 0
+b 2
+b 18
+b 0
+b 1
+b 15
+b 6
+b 9
+b 12
+b 17
+b 1
+b 4
+b 7
+b 5
+b 14
+b 12
+b 14
+b 15
+b 12
+b 14
+b 15
+b 12
+b 17
+b 1
+b 15
+b 3
+b 2
+b 7
+b 14
+b 11
+b 9
+b 9
+b 7
+b 14
+b 2
+b 13
+b 3
+b 8
+b 6
+b 1
+b 9
+b 48
+b 6
+b 1
+b 11
+b 10
+b 8
+b 7
+b 6
+b 8
+b 7
+b 6
+b 8
+b 7
+b 12
+b 14
+b 16
+b 18
+b 12
+b 1
+b 4
+b 12
+b 13
+b 15
+b 17
+b 4
+b 21
+b 23
+b 18
+b 1
+b 7
+b 25
+b 50
+b 0
+b 6
+b 37
+b 2
+b 64
+b 66
+b 68
+b 0
+b 2
+b 26
+b 64
+b 66
+b 68
+b 4
+b 3
+b 3
+b 15
+b 2
+b 1
+b 20
+b 32
+b 34
+b 36
+b 17
+b 19
+b 75
+b 25
+b 33
+b 24
+b 1
+b 4
+b 23
+b 42
+b 41
+b 1
+b 5
+b 2
+b 1
+b 10
+b 25
+b 34
+b 13
+b 32
+b 34
+b 13
+b 32
+b 34
+b 13
+b 10
+b 15
+b 15
+b 8
+b 10
+b 15
+b 8
+b 10
+b 7
+b 14
+b 36
+b 46
+b 45
+b 1
+b 4
+b 29
+b 31
+b 4
+b 0
+b 7
+b 0
+b 2
+b 0
+b 1
+b 1
+b 0
+b 1
+b 1
+b 8
+b 1
+b 42
+b 52
+b 1
+b 6
+b 8
+b 8
+b 10
+b 0
+b 2
+b 3
+b 11
+b 8
+b 1
+b 6
+b 36
+b 45
+b 63
+b 44
+b 45
+b 63
+b 4
+b 38
+b 3
+b 4
+b 38
+b 41
+b 43
+b 65
+b 37
+b 39
+b 43
+b 37
+b 1
+b 31
+b 33
+b 35
+b 28
+b 1
+b 33
+b 1
+b 7
+b 38
+b 8
+b 10
+b 5
+b 1
+b 45
+b 55
+b 44
+b 1
+b 51
+b 1
+b 3
+b 2
+b 1
+b 16
+b 15
+b 1
+b 4
+b 3
+b 1
+b 16
+b 4
+b 6
+b 16
+b 14
+b 2
+b 3
+b 4
+b 6
+b 14
+b 15
+b 21
+b 16
+b 3
+b 20
+b 7
+b 9
+b 7
+b 1
+b 24
+b 4
+b 3
+b 1
+b 12
+b 1
+b 0
+b 1
+b 12
+b 10
+b 1
+b 2
+b 2
+b 1
+b 11
+b 1
+b 9
+b 3
+b 40
+b 4
+b 4
+b 40
+b 9
+b 17
+b 2
+b 3
+b 4
+b 40
+b 9
+b 17
+b 2
+b 3
+b 3
+b 6
+b 9
+b 12
+b 0
+b 14
+b 5
+b 13
+b 16
+b 0
+b 5
+b 15
+b 11
+b 9
+b 15
+b 36
+b 34
+b 41
+b 27
+b 29
+b 31
+b 48
+b 11
+b 18
+b 7
+b 9
+b 11
+b 13
+b 36
+b 54
+b 12
+b 14
+b 16
+b 62
+b 12
+b 1
+b 8
+b 9
+b 11
+b 10
+b 1
+b 4
+b 13
+b 15
+b 0
+b 2
+b 0
+b 1
+b 39
+b 36
+b 1
+b 20
+b 21
+b 56
+b 58
+b 21
+b 1
+b 39
+b 18
+b 16
+b 1
+b 16
+b 14
+b 2
+b 26
+b 21
+b 77
+b 18
+b 1
+b 13
+b 23
+b 8
+b 10
+b 8
+b 1
+b 2
+b 21
+b 3
+b 3
+b 1
+b 20
+b 2
+b 4
+b 6
+b 8
+b 10
+b 12
+b 2
+b 4
+b 6
+b 8
+b 10
+b 12
+b 6
+b 1
+b 2
+b 4
+b 6
+b 7
+b 9
+b 11
+b 18
+b 4
+b 0
+b 17
+b 3
+b 1
+b 1
+b 0
+b 2
+b 3
+b 17
+b 1
+b 0
+b 2
+b 3
+b 17
+b 20
+b 19
+b 1
+b 11
+b 1
+b 1
+b 7
+b 7
+b 1
+b 0
+b 1
+b 8
+b 1
+b 8
+b 1
+b 7
+b 1
+b 8
+b 1
+b 7
+b 1
+b 9
+b 9
+b 27
+b 15
+b 21
+b 20
+b 1
+b 30
+b 9
+b 28
+b 30
+b 9
+b 28
+b 30
+b 9
+b 31
+b 37
+b 39
+b 12
+b 18
+b 20
+b 14
+b 29
+b 29
+b 1
+b 16
+b 6
+b 26
+b 4
+b 3
+b 1
+b 47
+b 49
+b 20
+b 8
+b 0
+b 2
+b 19
+b 9
+b 1
+b 9
+b 1
+b 18
+b 19
+b 9
+b 1
+b 18
+b 19
+b 25
+b 35
+b 34
+b 1
+b 23
+b 39
+b 40
+b 42
+b 37
+b 2
+b 23
+b 1
+b 38
+b 1
+b 3
+b 3
+b 3
+b 1
+b 3
+b 3
+b 1
+b 3
+b 5
+b 5
+b 5
+b 5
+b 2
+b 0
+b 2
+b 4
+b 51
+b 61
+b 29
+b 28
+b 1
+b 19
+b 24
+b 25
+b 35
+b 47
+b 18
+b 2
+b 21
+b 1
+b 41
+b 11
+b 10
+b 1
+b 0
+b 3
+b 5
+b 6
+b 1
+b 7
+b 0
+b 2
+b 16
+b 9
+b 6
+b 17
+b 12
+b 26
+b 5
+b 24
+b 26
+b 5
+b 24
+b 26
+b 5
+b 18
+b 31
+b 31
+b 1
+b 4
+b 6
+b 26
+b 25
+b 2
+b 35
+b 34
+b 2
+b 5
+b 8
+b 39
+b 38
+b 1
+b 3
+b 13
+b 2
+b 1
+b 9
+b 1
+b 4
+b 14
+b 3
+b 1
+b 10
+b 1
+b 3
+b 14
+b 25
+b 24
+b 1
+b 3
+b 5
+b 0
+b 2
+b 35
+b 57
+b 34
+b 1
+b 27
+b 1
+b 68
+b 26
+b 2
+b 5
+b 15
+b 30
+b 31
+b 33
+b 54
+b 28
+b 2
+b 14
+b 1
+b 29
+b 1
+b 17
+b 54
+b 55
+b 62
+b 51
+b 1
+b 10
+b 7
+b 1
+b 3
+b 3
+b 8
+b 3
+b 8
+b 1
+b 1
+b 15
+b 0
+b 2
+b 4
+b 28
+b 43
+b 53
+b 1
+b 0
+b 1
+b 26
+b 28
+b 43
+b 53
+b 0
+b 1
+b 8
+b 30
+b 32
+b 34
+b 1
+b 6
+b 38
+b 3
+b 4
+b 19
+b 0
+b 23
+b 72
+b 11
+b 24
+b 23
+b 1
+b 9
+b 0
+b 21
+b 68
+b 0
+b 9
+b 7
+b 3
+b 32
+b 2
+b 3
+b 32
+b 8
+b 11
+b 28
+b 0
+b 2
+b 42
+b 48
+b 4
+b 2
+b 3
+b 4
+b 2
+b 12
+b 3
+b 4
+b 2
+b 4
+b 6
+b 8
+b 10
+b 2
+b 3
+b 5
+b 6
+b 8
+b 15
+b 38
+b 0
+b 2
+b 3
+b 2
+b 32
+b 2
+b 0
+b 2
+b 0
+b 1
+b 18
+b 8
+b 17
+b 16
+b 1
+b 1
+b 7
+b 7
+b 1
+b 17
+b 7
+b 1
+b 17
+b 40
+b 56
+b 3
+b 9
+b 8
+b 1
+b 1
+b 30
+b 9
+b 0
+b 1
+b 30
+b 6
+b 9
+b 0
+b 14
+b 16
+b 34
+b 15
+b 16
+b 13
+b 1
+b 34
+b 14
+b 15
+b 16
+b 5
+b 14
+b 34
+b 14
+b 15
+b 16
+b 5
+b 14
+b 4
+b 6
+b 0
+b 2
+b 4
+b 6
+b 0
+b 2
+b 4
+b 6
+b 0
+b 2
+b 0
+b 1
+b 3
+b 4
+b 6
+b 0
+b 2
+b 4
+b 6
+b 0
+b 2
+b 0
+b 2
+b 5
+b 4
+b 6
+b 0
+b 2
+b 0
+b 1
+b 3
+b 0
+b 2
+b 7
+b 9
+b 11
+b 5
+b 1
+b 10
+b 1
+b 38
+b 0
+b 2
+b 4
+b 5
+b 19
+b 34
+b 4
+b 5
+b 19
+b 34
+b 10
+b 13
+b 3
+b 1
+b 1
+b 37
+b 52
+b 68
+b 70
+b 72
+b 73
+b 75
+b 70
+b 2
+b 49
+b 1
+b 13
+b 3
+b 33
+b 35
+b 33
+b 1
+b 33
+b 34
+b 55
+b 14
+b 16
+b 12
+b 14
+b 16
+b 16
+b 1
+b 22
+b 33
+b 53
+b 0
+b 2
+b 4
+b 4
+b 10
+b 1
+b 3
+b 4
+b 10
+b 1
+b 15
+b 3
+b 4
+b 10
+b 1
+b 10
+b 4
+b 10
+b 4
+b 5
+b 9
+b 10
+b 4
+b 5
+b 6
+b 4
+b 4
+b 13
+b 4
+b 1
+b 9
+b 1
+b 50
+b 4
+b 60
+b 74
+b 60
+b 74
+b 9
+b 4
+b 2
+b 2
+b 4
+b 6
+b 4
+b 2
+b 4
+b 6
+b 4
+b 5
+b 3
+b 1
+b 2
+b 8
+b 34
+b 3
+b 7
+b 7
+b 19
+b 3
+b 4
+b 2
+b 1
+b 37
+b 47
+b 45
+b 1
+b 3
+b 0
+b 2
+b 10
+b 22
+b 21
+b 1
+b 8
+b 37
+b 51
+b 0
+b 14
+b 2
+b 2
+b 0
+b 1
+b 14
+b 1
+b 1
+b 2
+b 6
+b 0
+b 1
+b 12
+b 1
+b 1
+b 1
+b 3
+b 3
+b 1
+b 3
+b 1
+b 17
+b 15
+b 17
+b 3
+b 16
+b 49
+b 46
+b 1
+b 37
+b 39
+b 1
+b 10
+b 20
+b 19
+b 2
+b 18
+b 25
+b 23
+b 2
+b 6
+b 7
+b 30
+b 40
+b 42
+b 40
+b 1
+b 12
+b 0
+b 2
+b 6
+b 12
+b 0
+b 2
+b 6
+b 14
+b 1
+b 4
+b 3
+b 12
+b 10
+b 1
+b 0
+b 13
+b 11
+b 1
+b 1
+b 0
+b 0
+b 2
+b 11
+b 30
+b 41
+b 3
+b 28
+b 30
+b 41
+b 3
+b 28
+b 30
+b 41
+b 3
+b 14
+b 14
+b 8
+b 1
+b 17
+b 1
+b 1
+b 16
+b 17
+b 1
+b 8
+b 1
+b 1
+b 16
+b 17
+b 1
+b 8
+b 1
+b 8
+b 0
+b 1
+b 0
+b 24
+b 7
+b 8
+b 21
+b 18
+b 15
+b 14
+b 1
+b 7
+b 15
+b 15
+b 7
+b 61
+b 3
+b 3
+b 12
+b 3
+b 4
+b 0
+b 21
+b 59
+b 61
+b 69
+b 58
+b 59
+b 61
+b 69
+b 7
+b 8
+b 29
+b 22
+b 45
+b 6
+b 24
+b 43
+b 24
+b 1
+b 38
+b 1
+b 30
+b 32
+b 34
+b 36
+b 26
+b 41
+b 20
+b 3
+b 53
+b 0
+b 2
+b 21
+b 29
+b 39
+b 41
+b 17
+b 16
+b 13
+b 15
+b 16
+b 13
+b 7
+b 21
+b 6
+b 1
+b 6
+b 3
+b 5
+b 6
+b 5
+b 1
+b 3
+b 6
+b 14
+b 11
+b 13
+b 14
+b 11
+b 11
+b 13
+b 14
+b 11
+b 43
+b 8
+b 18
+b 0
+b 2
+b 3
+b 22
+b 24
+b 26
+b 22
+b 24
+b 26
+b 27
+b 15
+b 17
+b 19
+b 5
+b 5
+b 1
+b 4
+b 7
+b 6
+b 1
+b 4
+b 5
+b 6
+b 7
+b 4
+b 5
+b 7
+b 33
+b 62
+b 32
+b 1
+b 57
+b 1
+b 24
+b 41
+b 7
+b 1
+b 0
+b 1
+b 6
+b 3
+b 5
+b 6
+b 3
+b 51
+b 3
+b 0
+b 3
+b 16
+b 12
+b 14
+b 15
+b 11
+b 12
+b 14
+b 15
+b 7
+b 17
+b 4
+b 5
+b 9
+b 40
+b 42
+b 53
+b 55
+b 56
+b 42
+b 1
+b 54
+b 3
+b 9
+b 24
+b 0
+b 10
+b 27
+b 0
+b 8
+b 1
+b 0
+b 1
+b 47
+b 4
+b 10
+b 7
+b 9
+b 10
+b 7
+b 33
+b 9
+b 28
+b 29
+b 26
+b 2
+b 19
+b 18
+b 1
+b 9
+b 19
+b 32
+b 31
+b 1
+b 9
+b 19
+b 32
+b 3
+b 9
+b 9
+b 33
+b 31
+b 1
+b 4
+b 5
+b 4
+b 2
+b 11
+b 13
+b 15
+b 15
+b 1
+b 49
+b 51
+b 73
+b 72
+b 1
+b 3
+b 3
+b 0
+b 1
+b 4
+b 4
+b 1
+b 16
+b 55
+b 1
+b 18
+b 52
+b 54
+b 56
+b 72
+b 54
+b 1
+b 2
+b 8
+b 4
+b 6
+b 8
+b 10
+b 0
+b 4
+b 6
+b 8
+b 11
+b 8
+b 10
+b 3
+b 30
+b 14
+b 58
+b 59
+b 61
+b 67
+b 56
+b 2
+b 64
+b 1
+b 6
+b 0
+b 14
+b 26
+b 9
+b 10
+b 19
+b 7
+b 16
+b 16
+b 7
+b 29
+b 15
+b 16
+b 7
+b 29
+b 1
+b 11
+b 2
+b 8
+b 1
+b 11
+b 0
+b 2
+b 8
+b 1
+b 11
+b 0
+b 2
+b 8
+b 1
+b 10
+b 33
+b 26
+b 7
+b 0
+b 2
+b 4
+b 7
+b 0
+b 2
+b 4
+b 5
+b 7
+b 0
+b 2
+b 4
+b 5
+b 9
+b 9
+b 8
+b 1
+b 3
+b 3
+b 1
+b 3
+b 3
+b 2
+b 1
+b 8
+b 2
+b 4
+b 6
+b 8
+b 2
+b 1
+b 8
+b 2
+b 3
+b 5
+b 7
+b 2
+b 2
+b 8
+b 12
+b 2
+b 3
+b 5
+b 13
+b 2
+b 4
+b 5
+b 7
+b 9
+b 4
+b 2
+b 13
+b 2
+b 4
+b 5
+b 7
+b 4
+b 2
+b 4
+b 6
+b 8
+b 6
+b 1
+b 1
+b 21
+b 23
+b 25
+b 27
+b 3
+b 9
+b 21
+b 20
+b 21
+b 46
+b 20
+b 1
+b 43
+b 2
+b 13
+b 6
+b 3
+b 1
+b 12
+b 5
+b 5
+b 1
+b 1
+b 5
+b 5
+b 7
+b 12
+b 1
+b 5
+b 5
+b 7
+b 12
+b 5
+b 14
+b 8
+b 10
+b 12
+b 14
+b 5
+b 7
+b 5
+b 1
+b 3
+b 5
+b 7
+b 2
+b 6
+b 5
+b 4
+b 4
+b 5
+b 4
+b 1
+b 33
+b 15
+b 12
+b 1
+b 9
+b 9
+b 1
+b 3
+b 8
+b 3
+b 3
+b 1
+b 3
+b 8
+b 3
+b 8
+b 10
+b 12
+b 12
+b 20
+b 21
+b 23
+b 33
+b 45
+b 2
+b 8
+b 5
+b 7
+b 8
+b 5
+b 13
+b 13
+b 1
+b 29
+b 27
+b 1
+b 6
+b 7
+b 6
+b 2
+b 4
+b 5
+b 5
+b 1
+b 8
+b 10
+b 5
+b 8
+b 10
+b 5
+b 3
+b 7
+b 3
+b 6
+b 16
+b 7
+b 5
+b 7
+b 6
+b 1
+b 22
+b 1
+b 31
+b 27
+b 25
+b 1
+b 13
+b 20
+b 21
+b 18
+b 2
+b 25
+b 22
+b 1
+b 17
+b 27
+b 14
+b 1
+b 28
+b 30
+b 34
+b 35
+b 40
+b 34
+b 1
+b 37
+b 3
+b 25
+b 1
+b 15
+b 17
+b 19
+b 4
+b 0
+b 16
+b 6
+b 3
+b 1
+b 14
+b 14
+b 1
+b 4
+b 6
+b 4
+b 6
+b 31
+b 49
+b 3
+b 5
+b 7
+b 12
+b 9
+b 11
+b 12
+b 9
+b 41
+b 6
+b 4
+b 6
+b 2
+b 4
+b 6
+b 0
+b 2
+b 4
+b 6
+b 0
+b 2
+b 0
+b 1
+b 7
+b 2
+b 3
+b 5
+b 4
+b 4
+b 1
+b 0
+b 2
+b 18
+b 1
+b 17
+b 5
+b 13
+b 11
+b 1
+b 10
+b 11
+b 8
+b 9
+b 9
+b 7
+b 1
+b 2
+b 3
+b 0
+b 1
+b 16
+b 17
+b 15
+b 31
+b 49
+b 13
+b 13
+b 5
+b 31
+b 49
+b 13
+b 5
+b 31
+b 49
+b 3
+b 12
+b 8
+b 18
+b 8
+b 18
+b 6
+b 2
+b 0
+b 1
+b 8
+b 9
+b 5
+b 6
+b 6
+b 8
+b 9
+b 5
+b 6
+b 4
+b 1
+b 6
+b 8
+b 7
+b 9
+b 4
+b 5
+b 10
+b 9
+b 1
+b 11
+b 10
+b 11
+b 9
+b 1
+b 2
+b 1
+b 1
+b 3
+b 2
+b 3
+b 12
+b 10
+b 1
+b 13
+b 8
+b 9
+b 10
+b 13
+b 8
+b 9
+b 7
+b 1
+b 10
+b 11
+b 13
+b 7
+b 8
+b 8
+b 10
+b 47
+b 46
+b 1
+b 46
+b 43
+b 1
+b 2
+b 5
+b 5
+b 44
+b 2
+b 25
+b 5
+b 44
+b 2
+b 25
+b 6
+b 8
+b 10
+b 11
+b 50
+b 4
+b 1
+b 9
+b 2
+b 44
+b 1
+b 6
+b 4
+b 1
+b 5
+b 5
+b 4
+b 3
+b 1
+b 12
+b 11
+b 11
+b 12
+b 10
+b 12
+b 11
+b 11
+b 12
+b 10
+b 1
+b 10
+b 12
+b 9
+b 11
+b 10
+b 11
+b 8
+b 0
+b 3
+b 7
+b 0
+b 2
+b 3
+b 0
+b 2
+b 3
+b 7
+b 9
+b 0
+b 2
+b 3
+b 7
+b 9
+b 1
+b 1
+b 9
+b 9
+b 10
+b 13
+b 6
+b 7
+b 4
+b 7
+b 13
+b 14
+b 11
+b 55
+b 4
+b 11
+b 0
+b 2
+b 36
+b 2
+b 1
+b 6
+b 62
+b 61
+b 1
+b 7
+b 9
+b 10
+b 18
+b 4
+b 3
+b 6
+b 5
+b 7
+b 7
+b 1
+b 6
+b 5
+b 1
+b 5
+b 7
+b 27
+b 28
+b 5
+b 5
+b 1
+b 1
+b 2
+b 7
+b 0
+b 2
+b 5
+b 4
+b 4
+b 6
+b 8
+b 5
+b 7
+b 4
+b 6
+b 0
+b 2
+b 4
+b 6
+b 7
+b 0
+b 2
+b 4
+b 0
+b 2
+b 10
+b 27
+b 44
+b 54
+b 43
+b 44
+b 54
+b 4
+b 6
+b 4
+b 4
+b 4
+b 3
+b 4
+b 4
+b 6
+b 5
+b 1
+b 0
+b 11
+b 3
+b 3
+b 1
+b 10
+b 10
+b 3
+b 3
+b 1
+b 10
+b 12
+b 14
+b 3
+b 24
+b 0
+b 2
+b 24
+b 23
+b 1
+b 0
+b 2
+b 0
+b 1
+b 16
+b 18
+b 5
+b 7
+b 4
+b 4
+b 5
+b 3
+b 1
+b 5
+b 7
+b 9
+b 7
+b 8
+b 10
+b 4
+b 6
+b 3
+b 0
+b 1
+b 8
+b 7
+b 1
+b 4
+b 10
+b 30
+b 8
+b 5
+b 3
+b 1
+b 5
+b 7
+b 2
+b 1
+b 8
+b 1
+b 3
+b 3
+b 1
+b 7
+b 0
+b 2
+b 3
+b 0
+b 2
+b 3
+b 7
+b 5
+b 0
+b 2
+b 3
+b 7
+b 5
+b 9
+b 9
+b 6
+b 4
+b 35
+b 37
+b 39
+b 15
+b 17
+b 19
+b 19
+b 1
+b 3
+b 12
+b 11
+b 1
+b 1
+b 3
+b 11
+b 10
+b 1
+b 0
+b 2
+b 14
+b 12
+b 1
+b 0
+b 2
+b 11
+b 12
+b 40
+b 38
+b 1
+b 11
+b 23
+b 8
+b 1
+b 4
+b 12
+b 3
+b 3
+b 1
+b 3
+b 3
+b 3
+b 3
+b 3
+b 4
+b 0
+b 2
+b 0
+b 1
+b 4
+b 7
+b 40
+b 39
+b 2
+b 5
+b 8
+b 16
+b 15
+b 1
+b 4
+b 6
+b 8
+b 6
+b 8
+b 6
+b 7
+b 20
+b 22
+b 41
+b 40
+b 1
+b 11
+b 2
+b 2
+b 6
+b 35
+b 0
+b 14
+b 7
+b 8
+b 10
+b 10
+b 1
+b 14
+b 15
+b 17
+b 19
+b 5
+b 7
+b 8
+b 10
+b 13
+b 8
+b 10
+b 11
+b 2
+b 3
+b 3
+b 7
+b 30
+b 32
+b 33
+b 35
+b 35
+b 1
+b 12
+b 10
+b 8
+b 1
+b 25
+b 8
+b 10
+b 25
+b 8
+b 10
+b 25
+b 5
+b 4
+b 20
+b 52
+b 16
+b 18
+b 54
+b 51
+b 1
+b 12
+b 29
+b 29
+b 1
+b 13
+b 2
+b 6
+b 7
+b 6
+b 1
+b 7
+b 22
+b 31
+b 23
+b 2
+b 4
+b 6
+b 6
+b 7
+b 4
+b 3
+b 1
+b 5
+b 10
+b 5
+b 10
+b 5
+b 3
+b 5
+b 10
+b 5
+b 3
+b 5
+b 20
+b 22
+b 24
+b 20
+b 1
+b 20
+b 21
+b 23
+b 19
+b 51
+b 71
+b 72
+b 12
+b 14
+b 16
+b 12
+b 1
+b 23
+b 25
+b 27
+b 29
+b 25
+b 1
+b 4
+b 5
+b 13
+b 15
+b 0
+b 4
+b 11
+b 4
+b 11
+b 1
+b 4
+b 11
+b 1
+b 0
+b 2
+b 0
+b 2
+b 3
+b 8
+b 1
+b 12
+b 0
+b 1
+b 14
+b 16
+b 30
+b 38
+b 39
+b 1
+b 16
+b 18
+b 25
+b 16
+b 18
+b 19
+b 25
+b 70
+b 8
+b 10
+b 17
+b 4
+b 8
+b 0
+b 1
+b 5
+b 4
+b 27
+b 32
+b 33
+b 35
+b 37
+b 27
+b 1
+b 30
+b 1
+b 2
+b 14
+b 12
+b 11
+b 1
+b 27
+b 8
+b 8
+b 1
+b 7
+b 10
+b 1
+b 0
+b 1
+b 2
+b 3
+b 6
+b 3
+b 1
+b 2
+b 4
+b 2
+b 3
+b 2
+b 4
+b 4
+b 1
+b 4
+b 2
+b 3
+b 0
+b 2
+b 2
+b 4
+b 2
+b 4
+b 0
+b 1
+b 19
+b 20
+b 21
+b 2
+b 24
+b 26
+b 28
+b 30
+b 10
+b 5
+b 35
+b 11
+b 10
+b 1
+b 11
+b 5
+b 35
+b 10
+b 11
+b 5
+b 35
+b 10
+b 10
+b 12
+b 14
+b 10
+b 1
+b 12
+b 14
+b 16
+b 8
+b 31
+b 32
+b 6
+b 1
+b 30
+b 1
+b 0
+b 2
+b 21
+b 0
+b 2
+b 0
+b 1
+b 9
+b 4
+b 1
+b 12
+b 14
+b 16
+b 18
+b 18
+b 1
+b 14
+b 0
+b 1
+b 16
+b 11
+b 12
+b 10
+b 9
+b 2
+b 28
+b 27
+b 1
+b 12
+b 13
+b 15
+b 4
+b 35
+b 43
+b 16
+b 17
+b 19
+b 20
+b 22
+b 24
+b 6
+b 3
+b 1
+b 2
+b 1
+b 1
+b 7
+b 1
+b 14
+b 20
+b 20
+b 1
+b 17
+b 18
+b 22
+b 38
+b 39
+b 15
+b 2
+b 36
+b 1
+b 5
+b 9
+b 11
+b 10
+b 9
+b 1
+b 5
+b 5
+b 1
+b 6
+b 4
+b 6
+b 18
+b 36
+b 7
+b 6
+b 1
+b 13
+b 15
+b 17
+b 16
+b 18
+b 20
+b 13
+b 1
+b 18
+b 1
+b 3
+b 15
+b 3
+b 0
+b 2
+b 0
+b 1
+b 24
+b 21
+b 1
+b 3
+b 4
+b 3
+b 1
+b 39
+b 41
+b 42
+b 44
+b 39
+b 2
+b 40
+b 0
+b 2
+b 20
+b 19
+b 1
+b 0
+b 2
+b 3
+b 3
+b 0
+b 2
+b 3
+b 0
+b 2
+b 3
+b 0
+b 2
+b 1
+b 3
+b 0
+b 2
+b 3
+b 0
+b 2
+b 1
+b 1
+b 1
+b 1
+b 1
+b 36
+b 38
+b 40
+b 41
+b 55
+b 22
+b 24
+b 25
+b 30
+b 22
+b 2
+b 4
+b 3
+b 2
+b 23
+b 41
+b 43
+b 3
+b 1
+b 1
+b 6
+b 8
+b 0
+b 2
+b 8
+b 2
+b 8
+b 2
+b 3
+b 8
+b 8
+b 2
+b 3
+b 12
+b 2
+b 12
+b 2
+b 3
+b 8
+b 10
+b 0
+b 2
+b 10
+b 18
+b 18
+b 2
+b 3
+b 12
+b 4
+b 11
+b 13
+b 0
+b 1
+b 8
+b 17
+b 18
+b 16
+b 1
+b 2
+b 8
+b 10
+b 16
+b 17
+b 2
+b 5
+b 4
+b 1
+b 19
+b 20
+b 19
+b 2
+b 17
+b 12
+b 13
+b 12
+b 2
+b 4
+b 6
+b 19
+b 4
+b 1
+b 4
+b 5
+b 18
+b 11
+b 13
+b 26
+b 69
+b 68
+b 1
+b 1
+b 1
+b 4
+b 74
+b 71
+b 1
+b 1
+b 0
+b 1
+b 1
+b 30
+b 17
+b 16
+b 1
+b 5
+b 14
+b 15
+b 11
+b 1
+b 51
+b 4
+b 2
+b 2
+b 4
+b 3
+b 2
+b 4
+b 0
+b 1
+b 0
+b 1
+b 14
+b 0
+b 3
+b 3
+b 14
+b 0
+b 1
+b 3
+b 14
+b 0
+b 1
+b 1
+b 1
+b 7
+b 2
+b 6
+b 7
+b 0
+b 11
+b 0
+b 2
+b 6
+b 6
+b 8
+b 10
+b 12
+b 21
+b 23
+b 25
+b 27
+b 21
+b 1
+b 5
+b 7
+b 9
+b 21
+b 5
+b 7
+b 9
+b 21
+b 20
+b 6
+b 8
+b 10
+b 12
+b 7
+b 18
+b 28
+b 5
+b 1
+b 14
+b 1
+b 8
+b 5
+b 1
+b 0
+b 2
+b 73
+b 13
+b 47
+b 11
+b 2
+b 13
+b 15
+b 47
+b 11
+b 1
+b 43
+b 1
+b 50
+b 49
+b 1
+b 4
+b 20
+b 13
+b 5
+b 2
+b 3
+b 33
+b 35
+b 39
+b 16
+b 14
+b 14
+b 1
+b 28
+b 0
+b 2
+b 3
+b 4
+b 6
+b 7
+b 0
+b 2
+b 2
+b 6
+b 1
+b 4
+b 0
+b 2
+b 3
+b 3
+b 1
+b 3
+b 5
+b 19
+b 3
+b 1
+b 4
+b 42
+b 1
+b 4
+b 4
+b 42
+b 1
+b 0
+b 12
+b 34
+b 31
+b 1
+b 0
+b 2
+b 3
+b 4
+b 12
+b 5
+b 2
+b 1
+b 4
+b 11
+b 10
+b 7
+b 5
+b 7
+b 6
+b 8
+b 10
+b 3
+b 5
+b 7
+b 1
+b 3
+b 5
+b 7
+b 9
+b 4
+b 6
+b 8
+b 10
+b 0
+b 2
+b 4
+b 6
+b 8
+b 10
+b 12
+b 6
+b 7
+b 6
+b 1
+b 3
+b 3
+b 0
+b 1
+b 48
+b 5
+b 3
+b 0
+b 2
+b 1
+b 0
+b 2
+b 0
+b 1
+b 31
+b 57
+b 0
+b 1
+b 1
+b 0
+b 1
+b 23
+b 31
+b 57
+b 0
+b 1
+b 0
+b 1
+b 1
+b 0
+b 1
+b 23
+b 29
+b 31
+b 57
+b 0
+b 1
+b 5
+b 4
+b 6
+b 4
+b 3
+b 8
+b 10
+b 12
+b 14
+b 15
+b 6
+b 1
+b 16
+b 18
+b 20
+b 22
+b 20
+b 1
+b 9
+b 20
+b 25
+b 19
+b 1
+b 4
+b 3
+b 1
+b 7
+b 6
+b 1
+b 12
+b 3
+b 5
+b 7
+b 2
+b 3
+b 0
+b 1
+b 11
+b 12
+b 10
+b 16
+b 18
+b 19
+b 21
+b 24
+b 29
+b 31
+b 32
+b 40
+b 22
+b 2
+b 29
+b 2
+b 33
+b 1
+b 15
+b 16
+b 15
+b 2
+b 19
+b 16
+b 1
+b 8
+b 9
+b 8
+b 2
+b 41
+b 43
+b 44
+b 54
+b 41
+b 2
+b 1
+b 0
+b 2
+b 6
+b 14
+b 43
+b 44
+b 50
+b 4
+b 2
+b 2
+b 10
+b 0
+b 0
+b 1
+b 10
+b 3
+b 0
+b 1
+b 1
+b 3
+b 8
+b 10
+b 0
+b 1
+b 1
+b 3
+b 3
+b 6
+b 8
+b 10
+b 0
+b 13
+b 7
+b 5
+b 1
+b 1
+b 2
+b 0
+b 1
+b 8
+b 19
+b 21
+b 23
+b 24
+b 21
+b 2
+b 1
+b 8
+b 8
+b 10
+b 3
+b 9
+b 8
+b 1
+b 22
+b 7
+b 15
+b 7
+b 10
+b 7
+b 2
+b 2
+b 4
+b 6
+b 4
+b 1
+b 15
+b 25
+b 12
+b 1
+b 2
+b 12
+b 14
+b 12
+b 1
+b 2
+b 0
+b 2
+b 12
+b 13
+b 22
+b 0
+b 1
+b 2
+b 6
+b 2
+b 0
+b 1
+b 11
+b 12
+b 21
+b 45
+b 44
+b 2
+b 3
+b 44
+b 45
+b 47
+b 44
+b 2
+b 2
+b 3
+b 0
+b 1
+b 44
+b 45
+b 3
+b 0
+b 2
+b 12
+b 1
+b 11
+b 7
+b 8
+b 5
+b 2
+b 5
+b 27
+b 26
+b 1
+b 20
+b 34
+b 32
+b 2
+b 20
+b 1
+b 23
+b 24
+b 27
+b 13
+b 2
+b 6
+b 7
+b 9
+b 10
+b 12
+b 13
+b 23
+b 31
+b 0
+b 3
+b 3
+b 3
+b 23
+b 1
+b 9
+b 23
+b 6
+b 1
+b 20
+b 1
+b 17
+b 6
+b 7
+b 9
+b 11
+b 6
+b 2
+b 0
+b 14
+b 11
+b 29
+b 37
+b 39
+b 41
+b 43
+b 2
+b 0
+b 2
+b 16
+b 17
+b 0
+b 11
+b 18
+b 19
+b 33
+b 16
+b 2
+b 10
+b 1
+b 15
+b 1
+b 9
+b 20
+b 21
+b 9
+b 1
+b 0
+b 6
+b 21
+b 0
+b 8
+b 22
+b 5
+b 1
+b 6
+b 0
+b 4
+b 3
+b 2
+b 18
+b 20
+b 17
+b 1
+b 35
+b 32
+b 34
+b 14
+b 10
+b 1
+b 32
+b 34
+b 35
+b 37
+b 14
+b 10
+b 1
+b 32
+b 34
+b 35
+b 37
+b 14
+b 10
+b 1
+b 11
+b 36
+b 8
+b 15
+b 11
+b 9
+b 13
+b 14
+b 11
+b 2
+b 13
+b 11
+b 1
+b 20
+b 20
+b 21
+b 36
+b 5
+b 2
+b 1
+b 2
+b 8
+b 5
+b 1
+b 3
+b 6
+b 3
+b 0
+b 1
+b 0
+b 1
+b 4
+b 1
+b 4
+b 6
+b 1
+b 12
+b 14
+b 40
+b 22
+b 12
+b 14
+b 40
+b 1
+b 2
+b 4
+b 14
+b 35
+b 45
+b 0
+b 1
+b 12
+b 2
+b 1
+b 2
+b 6
+b 10
+b 0
+b 1
+b 5
+b 1
+b 6
+b 1
+b 7
+b 6
+b 1
+b 7
+b 5
+b 1
+b 12
+b 0
+b 8
+b 0
+b 2
+b 0
+b 2
+b 3
+b 11
+b 8
+b 1
+b 9
+b 11
+b 19
+b 4
+b 5
+b 26
+b 37
+b 25
+b 1
+b 0
+b 2
+b 26
+b 35
+b 32
+b 1
+b 6
+b 5
+b 0
+b 7
+b 4
+b 5
+b 0
+b 2
+b 16
+b 0
+b 1
+b 0
+b 6
+b 7
+b 5
+b 4
+b 5
+b 0
+b 1
+b 12
+b 14
+b 15
+b 0
+b 6
+b 7
+b 8
+b 14
+b 22
+b 32
+b 33
+b 36
+b 37
+b 39
+b 7
+b 2
+b 34
+b 3
+b 11
+b 2
+b 3
+b 27
+b 7
+b 1
+b 1
+b 1
+b 9
+b 8
+b 10
+b 12
+b 11
+b 1
+b 32
+b 34
+b 1
+b 35
+b 10
+b 12
+b 14
+b 9
+b 11
+b 13
+b 9
+b 11
+b 13
+b 11
+b 1
+b 12
+b 11
+b 1
+b 16
+b 18
+b 16
+b 5
+b 8
+b 5
+b 1
+b 7
+b 6
+b 8
+b 0
+b 6
+b 9
+b 6
+b 1
+b 9
+b 0
+b 1
+b 24
+b 19
+b 20
+b 17
+b 2
+b 11
+b 12
+b 13
+b 10
+b 2
+b 5
+b 6
+b 3
+b 2
+b 17
+b 0
+b 2
+b 0
+b 2
+b 0
+b 1
+b 3
+b 0
+b 1
+b 3
+b 1
+b 10
+b 43
+b 4
+b 9
+b 11
+b 13
+b 11
+b 10
+b 1
+b 0
+b 32
+b 9
+b 8
+b 2
+b 34
+b 31
+b 1
+b 25
+b 31
+b 33
+b 4
+b 12
+b 11
+b 1
+b 2
+b 2
+b 1
+b 32
+b 0
+b 11
+b 12
+b 3
+b 11
+b 12
+b 9
+b 2
+b 3
+b 32
+b 0
+b 1
+b 9
+b 10
+b 1
+b 3
+b 32
+b 0
+b 1
+b 6
+b 0
+b 2
+b 1
+b 0
+b 1
+b 7
+b 14
+b 1
+b 9
+b 11
+b 12
+b 14
+b 14
+b 30
+b 32
+b 34
+b 36
+b 38
+b 40
+b 30
+b 1
+b 8
+b 5
+b 11
+b 7
+b 7
+b 3
+b 0
+b 2
+b 0
+b 1
+b 1
+b 3
+b 3
+b 7
+b 46
+b 2
+b 2
+b 5
+b 3
+b 1
+b 1
+b 0
+b 11
+b 4
+b 5
+b 16
+b 28
+b 9
+b 8
+b 5
+b 1
+b 0
+b 10
+b 12
+b 22
+b 24
+b 26
+b 24
+b 8
+b 7
+b 8
+b 13
+b 6
+b 3
+b 1
+b 9
+b 4
+b 11
+b 12
+b 14
+b 3
+b 5
+b 2
+b 2
+b 0
+b 1
+b 3
+b 15
+b 16
+b 0
+b 2
+b 3
+b 5
+b 13
+b 2
+b 10
+b 0
+b 1
+b 4
+b 13
+b 14
+b 3
+b 5
+b 13
+b 2
+b 10
+b 0
+b 1
+b 4
+b 13
+b 14
+b 0
+b 1
+b 15
+b 0
+b 8
+b 2
+b 5
+b 26
+b 34
+b 35
+b 32
+b 2
+b 25
+b 1
+b 1
+b 2
+b 32
+b 1
+b 2
+b 27
+b 1
+b 9
+b 0
+b 2
+b 6
+b 8
+b 10
+b 0
+b 3
+b 4
+b 6
+b 2
+b 1
+b 8
+b 4
+b 0
+b 2
+b 10
+b 0
+b 0
+b 2
+b 3
+b 5
+b 8
+b 9
+b 4
+b 7
+b 4
+b 3
+b 0
+b 2
+b 0
+b 1
+b 10
+b 0
+b 0
+b 2
+b 3
+b 5
+b 0
+b 2
+b 8
+b 9
+b 21
+b 3
+b 7
+b 22
+b 20
+b 2
+b 20
+b 3
+b 6
+b 4
+b 2
+b 1
+b 59
+b 3
+b 6
+b 2
+b 2
+b 6
+b 5
+b 2
+b 12
+b 13
+b 6
+b 7
+b 13
+b 8
+b 12
+b 6
+b 7
+b 9
+b 13
+b 8
+b 12
+b 6
+b 7
+b 9
+b 10
+b 7
+b 6
+b 7
+b 29
+b 30
+b 6
+b 2
+b 24
+b 1
+b 0
+b 2
+b 20
+b 0
+b 2
+b 2
+b 1
+b 9
+b 12
+b 0
+b 2
+b 3
+b 8
+b 9
+b 1
+b 28
+b 30
+b 43
+b 44
+b 28
+b 1
+b 1
+b 3
+b 18
+b 16
+b 2
+b 13
+b 23
+b 13
+b 15
+b 16
+b 13
+b 2
+b 36
+b 35
+b 4
+b 3
+b 6
+b 6
+b 7
+b 7
+b 11
+b 1
+b 4
+b 6
+b 8
+b 10
+b 3
+b 4
+b 13
+b 12
+b 1
+b 13
+b 15
+b 16
+b 0
+b 10
+b 8
+b 1
+b 2
+b 3
+b 2
+b 4
+b 3
+b 2
+b 1
+b 2
+b 13
+b 10
+b 1
+b 0
+b 2
+b 8
+b 0
+b 1
+b 0
+b 1
+b 0
+b 2
+b 20
+b 48
+b 50
+b 52
+b 53
+b 15
+b 12
+b 1
+b 1
+b 0
+b 1
+b 7
+b 9
+b 13
+b 1
+b 5
+b 13
+b 1
+b 16
+b 0
+b 0
+b 1
+b 0
+b 2
+b 15
+b 0
+b 1
+b 11
+b 1
+b 4
+b 2
+b 10
+b 10
+b 1
+b 10
+b 5
+b 5
+b 10
+b 10
+b 0
+b 2
+b 57
+b 44
+b 56
+b 1
+b 6
+b 6
+b 1
+b 14
+b 3
+b 17
+b 6
+b 3
+b 1
+b 2
+b 3
+b 2
+b 13
+b 10
+b 1
+b 10
+b 1
+b 0
+b 2
+b 10
+b 4
+b 4
+b 6
+b 8
+b 14
+b 16
+b 1
+b 1
+b 0
+b 4
+b 16
+b 15
+b 12
+b 12
+b 3
+b 9
+b 29
+b 38
+b 40
+b 41
+b 38
+b 2
+b 4
+b 2
+b 1
+b 13
+b 15
+b 17
+b 15
+b 1
+b 13
+b 5
+b 4
+b 5
+b 17
+b 4
+b 2
+b 12
+b 1
+b 21
+b 18
+b 1
+b 0
+b 1
+b 1
+b 1
+b 12
+b 13
+b 15
+b 4
+b 5
+b 7
+b 55
+b 57
+b 55
+b 1
+b 5
+b 8
+b 18
+b 17
+b 1
+b 4
+b 40
+b 36
+b 37
+b 39
+b 41
+b 6
+b 24
+b 26
+b 28
+b 29
+b 36
+b 37
+b 39
+b 5
+b 1
+b 0
+b 2
+b 1
+b 5
+b 3
+b 5
+b 4
+b 19
+b 21
+b 31
+b 37
+b 31
+b 1
+b 34
+b 1
+b 0
+b 1
+b 7
+b 6
+b 1
+b 3
+b 3
+b 1
+b 3
+b 17
+b 19
+b 20
+b 22
+b 19
+b 2
+b 23
+b 23
+b 1
+b 4
+b 2
+b 12
+b 14
+b 1
+b 2
+b 9
+b 3
+b 3
+b 5
+b 7
+b 1
+b 13
+b 14
+b 1
+b 1
+b 10
+b 3
+b 1
+b 0
+b 1
+b 3
+b 4
+b 2
+b 1
+b 19
+b 0
+b 18
+b 23
+b 27
+b 28
+b 30
+b 31
+b 33
+b 17
+b 1
+b 19
+b 1
+b 2
+b 16
+b 24
+b 25
+b 27
+b 2
+b 0
+b 2
+b 4
+b 0
+b 1
+b 3
+b 4
+b 3
+b 2
+b 36
+b 1
+b 0
+b 1
+b 31
+b 30
+b 27
+b 1
+b 6
+b 6
+b 1
+b 5
+b 4
+b 1
+b 1
+b 8
+b 9
+b 8
+b 2
+b 9
+b 0
+b 2
+b 1
+b 3
+b 8
+b 6
+b 7
+b 6
+b 2
+b 4
+b 5
+b 9
+b 11
+b 12
+b 14
+b 16
+b 2
+b 3
+b 7
+b 2
+b 2
+b 3
+b 1
+b 6
+b 7
+b 9
+b 11
+b 13
+b 14
+b 15
+b 5
+b 1
+b 10
+b 4
+b 6
+b 7
+b 5
+b 4
+b 4
+b 7
+b 5
+b 4
+b 6
+b 8
+b 0
+b 1
+b 7
+b 8
+b 10
+b 0
+b 2
+b 4
+b 2
+b 7
+b 2
+b 3
+b 5
+b 4
+b 3
+b 5
+b 4
+b 5
+b 4
+b 6
+b 4
+b 1
+b 5
+b 5
+b 4
+b 4
+b 5
+b 7
+b 6
+b 2
+b 4
+b 5
+b 5
+b 7
+b 4
+b 4
+b 5
+b 6
+b 6
+b 7
+b 5
+b 3
+b 2
+b 7
+b 3
+b 11
+b 8
+b 7
+b 1
+b 3
+b 10
+b 12
+b 10
+b 1
+b 6
+b 5
+b 1
+b 2
+b 4
+b 5
+b 1
+b 24
+b 25
+b 38
+b 4
+b 2
+b 3
+b 6
+b 4
+b 1
+b 3
+b 0
+b 1
+b 2
+b 3
+b 15
+b 0
+b 2
+b 12
+b 1
+b 2
+b 0
+b 1
+b 9
+b 1
+b 25
+b 22
+b 1
+b 10
+b 16
+b 17
+b 19
+b 14
+b 2
+b 9
+b 1
+b 14
+b 26
+b 25
+b 1
+b 4
+b 5
+b 7
+b 4
+b 2
+b 8
+b 16
+b 17
+b 21
+b 38
+b 16
+b 2
+b 17
+b 1
+b 1
+b 5
+b 6
+b 3
+b 3
+b 12
+b 14
+b 16
+b 17
+b 24
+b 35
+b 36
+b 14
+b 2
+b 32
+b 1
+b 0
+b 3
+b 0
+b 3
+b 6
+b 8
+b 10
+b 12
+b 13
+b 10
+b 4
+b 13
+b 15
+b 16
+b 13
+b 2
+b 14
+b 1
+b 1
+b 3
+b 4
+b 6
+b 8
+b 10
+b 1
+b 2
+b 6
+b 22
+b 4
+b 3
+b 18
+b 1
+b 2
+b 6
+b 5
+b 1
+b 4
+b 2
+b 1
+b 3
+b 0
+b 1
+b 9
+b 11
+b 12
+b 14
+b 23
+b 28
+b 29
+b 11
+b 2
+b 1
+b 3
+b 4
+b 6
+b 6
+b 1
+b 1
+b 5
+b 3
+b 3
+b 37
+b 51
+b 52
+b 1
+b 1
+b 36
+b 37
+b 51
+b 52
+b 1
+b 1
+b 9
+b 10
+b 12
+b 18
+b 38
+b 10
+b 23
+b 24
+b 30
+b 31
+b 33
+b 35
+b 37
+b 39
+b 33
+b 1
+b 22
+b 32
+b 22
+b 1
+b 29
+b 3
+b 3
+b 33
+b 13
+b 32
+b 30
+b 2
+b 0
+b 2
+b 4
+b 2
+b 4
+b 5
+b 9
+b 9
+b 8
+b 1
+b 19
+b 21
+b 2
+b 4
+b 5
+b 7
+b 7
+b 1
+b 3
+b 2
+b 2
+b 3
+b 21
+b 42
+b 4
+b 24
+b 16
+b 27
+b 30
+b 31
+b 47
+b 26
+b 28
+b 26
+b 1
+b 2
+b 3
+b 5
+b 6
+b 24
+b 0
+b 2
+b 23
+b 2
+b 1
+b 0
+b 1
+b 4
+b 6
+b 8
+b 9
+b 4
+b 1
+b 1
+b 0
+b 2
+b 3
+b 5
+b 6
+b 23
+b 24
+b 0
+b 2
+b 3
+b 22
+b 0
+b 1
+b 16
+b 4
+b 5
+b 7
+b 8
+b 1
+b 17
+b 22
+b 22
+b 1
+b 1
+b 0
+b 2
+b 17
+b 7
+b 9
+b 11
+b 2
+b 4
+b 5
+b 2
+b 2
+b 1
+b 3
+b 1
+b 3
+b 5
+b 7
+b 9
+b 1
+b 1
+b 1
+b 0
+b 1
+b 5
+b 3
+b 1
+b 0
+b 0
+b 1
+b 0
+b 2
+b 4
+b 6
+b 8
+b 10
+b 0
+b 1
+b 0
+b 2
+b 3
+b 19
+b 10
+b 11
+b 13
+b 14
+b 33
+b 13
+b 2
+b 28
+b 1
+b 18
+b 13
+b 28
+b 29
+b 26
+b 2
+b 11
+b 1
+b 25
+b 1
+b 3
+b 5
+b 6
+b 5
+b 3
+b 0
+b 2
+b 0
+b 1
+b 0
+b 2
+b 4
+b 6
+b 4
+b 5
+b 2
+b 3
+b 2
+b 16
+b 4
+b 14
+b 9
+b 17
+b 18
+b 20
+b 22
+b 8
+b 2
+b 13
+b 2
+b 10
+b 14
+b 15
+b 29
+b 31
+b 33
+b 35
+b 36
+b 12
+b 2
+b 33
+b 3
+b 9
+b 1
+b 22
+b 1
+b 7
+b 14
+b 16
+b 18
+b 19
+b 21
+b 28
+b 5
+b 1
+b 15
+b 2
+b 3
+b 0
+b 2
+b 4
+b 0
+b 22
+b 0
+b 1
+b 6
+b 7
+b 9
+b 0
+b 1
+b 0
+b 2
+b 11
+b 9
+b 1
+b 21
+b 17
+b 18
+b 21
+b 4
+b 12
+b 13
+b 5
+b 6
+b 8
+b 4
+b 2
+b 3
+b 6
+b 7
+b 4
+b 3
+b 1
+b 0
+b 1
+b 5
+b 3
+b 1
+b 4
+b 5
+b 4
+b 2
+b 11
+b 12
+b 9
+b 2
+b 12
+b 11
+b 1
+b 6
+b 7
+b 4
+b 2
+b 29
+b 30
+b 38
+b 29
+b 2
+b 0
+b 1
+b 12
+b 20
+b 7
+b 8
+b 11
+b 14
+b 3
+b 4
+b 6
+b 7
+b 6
+b 1
+b 2
+b 3
+b 10
+b 12
+b 10
+b 1
+b 11
+b 1
+b 11
+b 3
+b 42
+b 44
+b 45
+b 42
+b 2
+b 7
+b 7
+b 1
+b 3
+b 2
+b 2
+b 6
+b 7
+b 6
+b 2
+b 3
+b 1
+b 3
+b 10
+b 2
+b 2
+b 7
+b 4
+b 4
+b 6
+b 2
+b 12
+b 26
+b 36
+b 37
+b 39
+b 34
+b 2
+b 26
+b 1
+b 2
+b 3
+b 5
+b 0
+b 2
+b 2
+b 4
+b 12
+b 19
+b 21
+b 26
+b 29
+b 30
+b 32
+b 33
+b 35
+b 0
+b 1
+b 3
+b 2
+b 4
+b 5
+b 7
+b 9
+b 27
+b 28
+b 32
+b 4
+b 2
+b 23
+b 2
+b 28
+b 1
+b 10
+b 13
+b 14
+b 16
+b 17
+b 19
+b 20
+b 22
+b 24
+b 25
+b 33
+b 10
+b 6
+b 5
+b 8
+b 9
+b 15
+b 3
+b 5
+b 9
+b 1
+b 0
+b 5
+b 3
+b 1
+b 26
+b 27
+b 2
+b 3
+b 7
+b 8
+b 10
+b 5
+b 2
+b 8
+b 1
+b 4
+b 5
+b 7
+b 9
+b 2
+b 2
+b 2
+b 21
+b 22
+b 19
+b 2
+b 1
+b 1
+b 18
+b 1
+b 2
+b 3
+b 7
+b 2
+b 1
+b 6
+b 1
+b 2
+b 5
+b 1
+b 3
+b 0
+b 2
+b 3
+b 7
+b 40
+b 0
+b 1
+b 5
+b 2
+b 2
+b 1
+b 1
+b 1
+b 0
+b 3
+b 8
+b 0
+b 0
+b 1
+b 5
+b 3
+b 3
+b 2
+b 1
+b 2
+b 0
+b 1
+b 1
+b 2
+b 0
+b 7
+b 8
+b 0
+b 38
+b 40
+b 0
+b 1
+b 5
+b 3
+b 0
+b 2
+b 3
+b 0
+b 1
+b 1
+b 2
+b 3
+b 0
+b 7
+b 8
+b 0
+b 36
+b 38
+b 40
+b 0
+b 2
+b 6
+b 0
+b 2
+b 6
+b 4
+b 5
+b 0
+b 2
+b 3
+b 4
+b 7
+b 1
+b 6
+b 4
+b 1
+b 3
+b 7
+b 17
+b 18
+b 20
+b 17
+b 2
+b 9
+b 11
+b 13
+b 14
+b 13
+b 2
+b 13
+b 15
+b 17
+b 17
+b 1
+b 3
+b 9
+b 10
+b 3
+b 1
+b 6
+b 2
+b 13
+b 15
+b 17
+b 18
+b 24
+b 9
+b 3
+b 4
+b 6
+b 7
+b 6
+b 2
+b 1
+b 7
+b 1
+b 0
+b 1
+b 0
+b 2
+b 3
+b 0
+b 1
+b 4
+b 10
+b 9
+b 1
+b 2
+b 3
+b 7
+b 2
+b 2
+b 0
+b 2
+b 4
+b 2
+b 0
+b 2
+b 3
+b 2
+b 1
+b 0
+b 1
+b 1
+b 10
+b 8
+b 3
+b 9
+b 10
+b 12
+b 7
+b 2
+b 10
+b 1
+b 11
+b 15
+b 16
+b 15
+b 1
+b 0
+b 10
+b 17
+b 18
+b 24
+b 0
+b 1
+b 7
+b 1
+b 0
+b 2
+b 3
+b 6
+b 2
+b 4
+b 2
+b 0
+b 1
+b 3
+b 4
+b 5
+b 0
+b 1
+b 3
+b 4
+b 5
+b 0
+b 5
+b 9
+b 6
+b 10
+b 11
+b 13
+b 14
+b 16
+b 17
+b 20
+b 8
+b 2
+b 5
+b 1
+b 15
+b 1
+b 0
+b 2
+b 8
+b 14
+b 6
+b 3
+b 9
+b 1
+b 10
+b 1
+b 6
+b 22
+b 23
+b 27
+b 28
+b 31
+b 22
+b 2
+b 19
+b 1
+b 5
+b 4
+b 1
+b 5
+b 2
+b 4
+b 4
+b 5
+b 4
+b 2
+b 4
+b 3
+b 1
+b 0
+b 11
+b 13
+b 14
+b 18
+b 10
+b 4
+b 5
+b 12
+b 27
+b 41
+b 57
+b 55
+b 1
+b 11
+b 8
+b 1
+b 3
+b 2
+b 8
+b 10
+b 11
+b 13
+b 14
+b 6
+b 1
+b 4
+b 6
+b 8
+b 0
+b 0
+b 1
+b 10
+b 8
+b 1
+b 4
+b 9
+b 3
+b 2
+b 1
+b 9
+b 8
+b 1
+b 0
+b 2
+b 22
+b 23
+b 25
+b 26
+b 32
+b 5
+b 4
+b 37
+b 38
+b 46
+b 47
+b 37
+b 2
+b 42
+b 2
+b 3
+b 7
+b 8
+b 19
+b 5
+b 2
+b 6
+b 30
+b 31
+b 28
+b 2
+b 2
+b 3
+b 2
+b 3
+b 31
+b 32
+b 40
+b 29
+b 2
+b 37
+b 1
+b 12
+b 3
+b 6
+b 13
+b 2
+b 6
+b 12
+b 13
+b 1
+b 2
+b 8
+b 0
+b 1
+b 1
+b 5
+b 6
+b 11
+b 14
+b 15
+b 16
+b 13
+b 3
+b 0
+b 1
+b 0
+b 1
+b 0
+b 3
+b 8
+b 0
+b 2
+b 2
+b 3
+b 0
+b 3
+b 0
+b 0
+b 1
+b 7
+b 8
+b 6
+b 1
+b 3
+b 4
+b 2
+b 1
+b 3
+b 3
+b 0
+b 1
+b 10
+b 0
+b 1
+b 0
+b 1
+b 0
+b 1
+b 6
+b 7
+b 20
+b 22
+b 23
+b 1
+b 2
+b 23
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 0
+p 1
+p 0
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 1
+p 2
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 3
+p 3
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 0
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 3
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 0
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 0
+p 2
+p 0
+p 1
+p 2
+p 2
+p 0
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 3
+p 3
+p 1
+p 1
+p 3
+p 3
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 0
+p 1
+p 1
+p 2
+p 2
+p 0
+p 0
+p 2
+p 0
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 0
+p 0
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 0
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 3
+p 1
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 0
+p 2
+p 0
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 2
+p 2
+p 2
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 0
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 0
+p 2
+p 2
+p 2
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 0
+p 1
+p 0
+p 1
+p 2
+p 1
+p 4
+p 0
+p 0
+p 1
+p 1
+p 1
+p 2
+p 2
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 0
+p 0
+p 1
+p 1
+p 2
+p 3
+p 0
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 3
+p 3
+p 0
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 2
+p 4
+p 4
+p 0
+p 1
+p 1
+p 0
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 2
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 2
+p 2
+p 1
+p 4
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 0
+p 1
+p 0
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 2
+p 2
+p 2
+p 2
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 0
+p 2
+p 0
+p 2
+p 1
+p 2
+p 2
+p 3
+p 0
+p 0
+p 1
+p 1
+p 2
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 2
+p 2
+p 0
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 2
+p 2
+p 0
+p 3
+p 1
+p 1
+p 3
+p 4
+p 4
+p 0
+p 0
+p 2
+p 2
+p 3
+p 2
+p 4
+p 0
+p 2
+p 0
+p 1
+p 0
+p 1
+p 1
+p 3
+p 1
+p 1
+p 0
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 0
+p 1
+p 1
+p 2
+p 0
+p 0
+p 3
+p 3
+p 3
+p 4
+p 2
+p 2
+p 3
+p 0
+p 0
+p 2
+p 1
+p 0
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 0
+p 1
+p 0
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 0
+p 2
+p 3
+p 1
+p 1
+p 1
+p 3
+p 5
+p 0
+p 2
+p 1
+p 1
+p 1
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 2
+p 3
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 5
+p 5
+p 0
+p 0
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 0
+p 1
+p 2
+p 3
+p 0
+p 2
+p 2
+p 2
+p 0
+p 1
+p 2
+p 2
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 2
+p 2
+p 3
+p 0
+p 0
+p 2
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 0
+p 1
+p 1
+p 1
+p 3
+p 4
+p 0
+p 1
+p 1
+p 2
+p 2
+p 2
+p 0
+p 3
+p 0
+p 1
+p 0
+p 1
+p 2
+p 2
+p 0
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 0
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 0
+p 2
+p 2
+p 4
+p 0
+p 0
+p 1
+p 2
+p 0
+p 1
+p 2
+p 3
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 0
+p 1
+p 0
+p 1
+p 2
+p 1
+p 2
+p 4
+p 4
+p 1
+p 1
+p 0
+p 0
+p 2
+p 0
+p 0
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 0
+p 1
+p 1
+p 2
+p 0
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 0
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 3
+p 0
+p 2
+p 2
+p 2
+p 0
+p 1
+p 0
+p 1
+p 3
+p 2
+p 1
+p 1
+p 0
+p 1
+p 2
+p 1
+p 1
+p 2
+p 0
+p 1
+p 2
+p 2
+p 0
+p 2
+p 0
+p 2
+p 2
+p 3
+p 1
+p 1
+p 0
+p 1
+p 2
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 1
+p 2
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 2
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 2
+p 2
+p 0
+p 1
+p 0
+p 1
+p 1
+p 2
+p 0
+p 0
+p 0
+p 1
+p 1
+p 2
+p 3
+p 3
+p 0
+p 1
+p 2
+p 1
+p 0
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 3
+p 1
+p 2
+p 1
+p 4
+p 4
+p 1
+p 0
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 3
+p 0
+p 0
+p 0
+p 2
+p 0
+p 0
+p 0
+p 1
+p 1
+p 2
+p 4
+p 4
+p 1
+p 1
+p 1
+p 1
+p 0
+p 0
+p 1
+p 2
+p 0
+p 1
+p 0
+p 1
+p 2
+p 1
+p 2
+p 2
+p 0
+p 2
+p 0
+p 1
+p 2
+p 1
+p 0
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 0
+p 2
+p 2
+p 0
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 0
+p 2
+p 0
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 0
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 4
+p 4
+p 1
+p 3
+p 1
+p 1
+p 0
+p 0
+p 0
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 0
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 0
+p 1
+p 0
+p 2
+p 3
+p 1
+p 0
+p 2
+p 2
+p 2
+p 1
+p 0
+p 0
+p 0
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 3
+p 1
+p 2
+p 2
+p 2
+p 0
+p 1
+p 0
+p 1
+p 0
+p 2
+p 2
+p 1
+p 3
+p 2
+p 0
+p 2
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 0
+p 2
+p 1
+p 1
+p 3
+p 3
+p 1
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 3
+p 1
+p 2
+p 1
+p 2
+p 0
+p 1
+p 1
+p 0
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 3
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 0
+p 0
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 0
+p 0
+p 1
+p 2
+p 0
+p 1
+p 2
+p 1
+p 2
+p 0
+p 1
+p 1
+p 3
+p 4
+p 4
+p 2
+p 2
+p 1
+p 2
+p 2
+p 0
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 3
+p 1
+p 3
+p 1
+p 1
+p 0
+p 1
+p 3
+p 2
+p 2
+p 1
+p 3
+p 0
+p 2
+p 0
+p 1
+p 0
+p 1
+p 2
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 3
+p 0
+p 1
+p 0
+p 2
+p 1
+p 0
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 0
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 4
+p 0
+p 1
+p 0
+p 0
+p 2
+p 2
+p 0
+p 1
+p 1
+p 0
+p 3
+p 4
+p 3
+p 0
+p 0
+p 0
+p 1
+p 0
+p 1
+p 2
+p 1
+p 0
+p 1
+p 2
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 0
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 4
+p 4
+p 0
+p 3
+p 1
+p 1
+p 0
+p 3
+p 3
+p 1
+p 2
+p 0
+p 0
+p 1
+p 1
+p 1
+p 5
+p 0
+p 0
+p 0
+p 1
+p 2
+p 0
+p 0
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 4
+p 7
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 4
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 3
+p 3
+p 5
+p 3
+p 1
+p 1
+p 3
+p 0
+p 1
+p 0
+p 1
+p 3
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 0
+p 1
+p 3
+p 1
+p 1
+p 4
+p 4
+p 4
+p 1
+p 3
+p 3
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 2
+p 5
+p 1
+p 2
+p 1
+p 1
+p 0
+p 1
+p 0
+p 0
+p 0
+p 3
+p 0
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 3
+p 4
+p 1
+p 2
+p 1
+p 4
+p 0
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 5
+p 4
+p 0
+p 5
+p 1
+p 3
+p 0
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 3
+p 1
+p 3
+p 3
+p 0
+p 1
+p 3
+p 0
+p 0
+p 3
+p 4
+p 0
+p 0
+p 0
+p 0
+p 2
+p 2
+p 3
+p 1
+p 4
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 3
+p 3
+p 1
+p 3
+p 2
+p 1
+p 2
+p 4
+p 6
+p 6
+p 0
+p 1
+p 0
+p 1
+p 0
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 0
+p 0
+p 1
+p 1
+p 2
+p 3
+p 3
+p 0
+p 0
+p 0
+p 1
+p 2
+p 2
+p 4
+p 0
+p 1
+p 3
+p 3
+p 1
+p 3
+p 3
+p 2
+p 1
+p 3
+p 0
+p 0
+p 1
+p 0
+p 1
+p 2
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 2
+p 0
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 4
+p 1
+p 1
+p 1
+p 1
+p 5
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 4
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 1
+p 3
+p 1
+p 0
+p 0
+p 0
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 2
+p 2
+p 3
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 4
+p 0
+p 1
+p 2
+p 1
+p 3
+p 0
+p 1
+p 0
+p 1
+p 2
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 2
+p 5
+p 1
+p 4
+p 1
+p 4
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 3
+p 5
+p 5
+p 3
+p 3
+p 5
+p 2
+p 2
+p 0
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 1
+p 4
+p 0
+p 1
+p 3
+p 4
+p 2
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 1
+p 3
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 0
+p 1
+p 5
+p 6
+p 0
+p 3
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 4
+p 1
+p 1
+p 1
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 2
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 3
+p 1
+p 5
+p 0
+p 1
+p 5
+p 6
+p 3
+p 1
+p 0
+p 2
+p 2
+p 4
+p 3
+p 3
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 0
+p 0
+p 1
+p 0
+p 1
+p 4
+p 6
+p 8
+p 8
+p 1
+p 6
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 3
+p 1
+p 1
+p 0
+p 0
+p 1
+p 2
+p 5
+p 3
+p 1
+p 2
+p 1
+p 5
+p 3
+p 1
+p 0
+p 0
+p 0
+p 1
+p 4
+p 4
+p 0
+p 2
+p 2
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 3
+p 3
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 1
+p 3
+p 3
+p 1
+p 2
+p 0
+p 1
+p 7
+p 2
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/GT/athene2.lod
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/GT/athene2.lod	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/GT/athene2.lod	(revision 1092)
@@ -0,0 +1,61913 @@
+v 3
+v 3
+v 3
+v 4
+v 4
+v 4
+v 7
+v 7
+v 7
+v 11
+v 11
+v 12
+v 12
+v 9478
+v 9499
+v 9480
+v 9489
+v 8222
+v 8223
+v 7891
+v 7893
+v 7895
+v 25
+v 25
+v 25
+v 26
+v 26
+v 26
+v 29
+v 29
+v 29
+v 8908
+v 35
+v 35
+v 35
+v 36
+v 36
+v 36
+v 39
+v 39
+v 39
+v 42
+v 42
+v 42
+v 45
+v 45
+v 45
+v 2858
+v 2859
+v 2861
+v 2858
+v 2859
+v 2861
+v 2858
+v 2859
+v 2861
+v 2856
+v 2857
+v 2856
+v 2857
+v 2856
+v 2857
+v 6986
+v 6987
+v 66
+v 66
+v 67
+v 67
+v 7136
+v 4546
+v 4547
+v 6990
+v 6992
+v 6994
+v 6990
+v 6992
+v 6994
+v 6990
+v 6992
+v 6994
+v 7
+v 7
+v 7
+v 7
+v 7
+v 7
+v 7
+v 7
+v 7
+v 90
+v 9022
+v 9359
+v 8584
+v 5127
+v 5129
+v 5131
+v 5127
+v 5129
+v 5131
+v 5127
+v 5129
+v 5131
+v 4237
+v 4238
+v 8505
+v 8505
+v 7526
+v 7528
+v 7530
+v 1750
+v 1751
+v 1754
+v 1757
+v 1760
+v 1750
+v 1751
+v 1754
+v 1757
+v 1760
+v 7461
+v 7462
+v 7463
+v 7464
+v 9436
+v 7461
+v 7462
+v 7463
+v 7464
+v 9436
+v 4814
+v 4815
+v 4816
+v 4817
+v 4814
+v 4815
+v 4816
+v 4817
+v 4814
+v 4815
+v 4816
+v 4817
+v 144
+v 144
+v 144
+v 145
+v 145
+v 145
+v 5022
+v 4391
+v 4392
+v 4391
+v 4392
+v 4391
+v 4392
+v 9389
+v 1714
+v 1715
+v 4712
+v 4713
+v 4712
+v 4713
+v 162
+v 7127
+v 165
+v 165
+v 166
+v 166
+v 168
+v 168
+v 8313
+v 173
+v 173
+v 173
+v 174
+v 174
+v 174
+v 177
+v 177
+v 177
+v 9197
+v 182
+v 182
+v 183
+v 183
+v 188
+v 188
+v 188
+v 188
+v 189
+v 189
+v 189
+v 189
+v 193
+v 193
+v 193
+v 193
+v 197
+v 197
+v 197
+v 197
+v 201
+v 201
+v 201
+v 201
+v 9280
+v 9280
+v 1980
+v 8437
+v 209
+v 210
+v 9424
+v 212
+v 9341
+v 8642
+v 8642
+v 8768
+v 3814
+v 3815
+v 7233
+v 221
+v 221
+v 222
+v 222
+v 224
+v 224
+v 226
+v 227
+v 8410
+v 9451
+v 6461
+v 231
+v 6599
+v 6300
+v 6304
+v 6308
+v 6312
+v 6300
+v 6304
+v 6308
+v 6312
+v 6300
+v 6304
+v 6308
+v 6312
+v 247
+v 247
+v 247
+v 248
+v 248
+v 248
+v 251
+v 251
+v 251
+v 6456
+v 257
+v 257
+v 257
+v 258
+v 258
+v 258
+v 261
+v 261
+v 261
+v 3230
+v 3231
+v 7479
+v 5443
+v 5444
+v 5445
+v 5443
+v 5444
+v 5445
+v 8874
+v 275
+v 275
+v 276
+v 276
+v 4257
+v 6533
+v 6937
+v 6940
+v 6937
+v 6940
+v 9382
+v 287
+v 287
+v 287
+v 288
+v 288
+v 288
+v 291
+v 291
+v 291
+v 295
+v 295
+v 296
+v 296
+v 7333
+v 7334
+v 7333
+v 7334
+v 302
+v 8524
+v 304
+v 9278
+v 5047
+v 5048
+v 5052
+v 5650
+v 8556
+v 313
+v 313
+v 313
+v 314
+v 314
+v 314
+v 317
+v 317
+v 317
+v 2917
+v 2918
+v 2919
+v 9491
+v 324
+v 325
+v 326
+v 9228
+v 9487
+v 329
+v 8665
+v 8878
+v 8878
+v 8878
+v 334
+v 7431
+v 9381
+v 1466
+v 1467
+v 1469
+v 1466
+v 1467
+v 1469
+v 1466
+v 1467
+v 1469
+v 1466
+v 1467
+v 1469
+v 350
+v 350
+v 351
+v 351
+v 353
+v 353
+v 4101
+v 4102
+v 4104
+v 4106
+v 4101
+v 4102
+v 4104
+v 4106
+v 4101
+v 4102
+v 4104
+v 4106
+v 367
+v 9057
+v 6516
+v 6516
+v 372
+v 372
+v 373
+v 373
+v 375
+v 375
+v 377
+v 377
+v 4792
+v 4792
+v 8573
+v 382
+v 7081
+v 2847
+v 8035
+v 6852
+v 9236
+v 390
+v 390
+v 390
+v 391
+v 391
+v 391
+v 394
+v 395
+v 396
+v 397
+v 398
+v 9412
+v 9376
+v 9376
+v 9467
+v 7353
+v 7354
+v 7355
+v 7353
+v 7354
+v 7355
+v 4808
+v 411
+v 411
+v 412
+v 412
+v 414
+v 2930
+v 5988
+v 5989
+v 418
+v 9401
+v 5510
+v 7906
+v 5620
+v 5621
+v 8196
+v 9207
+v 4314
+v 4315
+v 4607
+v 4608
+v 4607
+v 4608
+v 4607
+v 4608
+v 434
+v 6115
+v 437
+v 437
+v 438
+v 438
+v 440
+v 440
+v 442
+v 442
+v 2034
+v 2035
+v 2040
+v 2045
+v 2050
+v 2055
+v 2034
+v 2035
+v 2040
+v 2045
+v 2050
+v 2055
+v 2034
+v 2035
+v 2040
+v 2045
+v 2050
+v 2055
+v 4828
+v 4829
+v 464
+v 9310
+v 6343
+v 6344
+v 6349
+v 6354
+v 6359
+v 6343
+v 6344
+v 6349
+v 6354
+v 6359
+v 6343
+v 6344
+v 6349
+v 6354
+v 6359
+v 6343
+v 6344
+v 6349
+v 6354
+v 6359
+v 6755
+v 8226
+v 9397
+v 9457
+v 2061
+v 2062
+v 2064
+v 2066
+v 2061
+v 2062
+v 2064
+v 2066
+v 8166
+v 8225
+v 8225
+v 8225
+v 7905
+v 4999
+v 5000
+v 505
+v 7698
+v 3799
+v 3800
+v 3799
+v 3800
+v 4760
+v 4761
+v 5836
+v 5837
+v 516
+v 516
+v 517
+v 517
+v 519
+v 9433
+v 2547
+v 7687
+v 524
+v 524
+v 525
+v 525
+v 527
+v 527
+v 7254
+v 5598
+v 6065
+v 6066
+v 6065
+v 6066
+v 6490
+v 6491
+v 4405
+v 4406
+v 540
+v 540
+v 541
+v 541
+v 9383
+v 7491
+v 545
+v 8567
+v 548
+v 548
+v 549
+v 549
+v 551
+v 8098
+v 9086
+v 8780
+v 2459
+v 2460
+v 2462
+v 2459
+v 2460
+v 2462
+v 2459
+v 2460
+v 2462
+v 7410
+v 9374
+v 7688
+v 9056
+v 8265
+v 7147
+v 7148
+v 7149
+v 7147
+v 7148
+v 7149
+v 8760
+v 5612
+v 577
+v 9100
+v 579
+v 7452
+v 6932
+v 582
+v 4246
+v 585
+v 585
+v 586
+v 586
+v 588
+v 588
+v 590
+v 590
+v 8371
+v 8809
+v 8809
+v 2265
+v 2265
+v 5761
+v 598
+v 9494
+v 9416
+v 7189
+v 7190
+v 7971
+v 606
+v 606
+v 606
+v 607
+v 607
+v 607
+v 610
+v 610
+v 610
+v 4958
+v 5815
+v 8154
+v 616
+v 617
+v 618
+v 9428
+v 7293
+v 7294
+v 7295
+v 7293
+v 7294
+v 7295
+v 7293
+v 7294
+v 7295
+v 7293
+v 7294
+v 7295
+v 5677
+v 5034
+v 8794
+v 7461
+v 7462
+v 7463
+v 7464
+v 9436
+v 640
+v 5980
+v 4540
+v 4541
+v 4540
+v 4541
+v 4540
+v 4541
+v 7389
+v 7390
+v 651
+v 651
+v 652
+v 652
+v 656
+v 656
+v 656
+v 657
+v 657
+v 657
+v 660
+v 660
+v 660
+v 663
+v 663
+v 663
+v 6915
+v 4559
+v 4560
+v 4559
+v 4560
+v 672
+v 672
+v 673
+v 673
+v 6123
+v 6123
+v 6123
+v 679
+v 679
+v 680
+v 680
+v 682
+v 682
+v 684
+v 684
+v 686
+v 686
+v 688
+v 6165
+v 691
+v 691
+v 692
+v 692
+v 9339
+v 8569
+v 8569
+v 8569
+v 7247
+v 7249
+v 7247
+v 7249
+v 7434
+v 5618
+v 5619
+v 5618
+v 5619
+v 7621
+v 7621
+v 7472
+v 7474
+v 7476
+v 7478
+v 7472
+v 7474
+v 7476
+v 7478
+v 5772
+v 5774
+v 5772
+v 5774
+v 9121
+v 6378
+v 6380
+v 6378
+v 6380
+v 726
+v 5763
+v 7327
+v 7327
+v 4771
+v 4771
+v 732
+v 8181
+v 5722
+v 5723
+v 5726
+v 738
+v 738
+v 739
+v 739
+v 741
+v 741
+v 8502
+v 8502
+v 746
+v 746
+v 747
+v 747
+v 749
+v 749
+v 6114
+v 752
+v 8608
+v 8706
+v 8709
+v 8706
+v 8709
+v 3032
+v 7038
+v 3032
+v 7038
+v 762
+v 763
+v 7709
+v 9036
+v 9037
+v 4854
+v 8525
+v 6077
+v 772
+v 772
+v 772
+v 773
+v 773
+v 773
+v 4021
+v 4022
+v 8995
+v 4021
+v 4022
+v 8995
+v 783
+v 783
+v 784
+v 784
+v 786
+v 786
+v 4461
+v 7465
+v 3789
+v 9373
+v 3789
+v 9373
+v 3604
+v 9423
+v 3604
+v 9423
+v 3604
+v 9423
+v 6292
+v 9356
+v 9356
+v 9356
+v 9356
+v 8169
+v 8170
+v 8169
+v 8170
+v 6866
+v 6867
+v 6866
+v 6867
+v 6866
+v 6867
+v 817
+v 817
+v 817
+v 818
+v 818
+v 818
+v 821
+v 821
+v 821
+v 4282
+v 4283
+v 8796
+v 4282
+v 4283
+v 8796
+v 831
+v 831
+v 832
+v 832
+v 834
+v 834
+v 836
+v 836
+v 840
+v 840
+v 840
+v 841
+v 841
+v 841
+v 844
+v 844
+v 844
+v 847
+v 847
+v 847
+v 850
+v 7665
+v 854
+v 854
+v 854
+v 855
+v 855
+v 855
+v 858
+v 858
+v 858
+v 861
+v 861
+v 861
+v 5890
+v 5892
+v 5894
+v 867
+v 868
+v 8776
+v 873
+v 873
+v 873
+v 873
+v 874
+v 874
+v 874
+v 874
+v 878
+v 878
+v 878
+v 878
+v 883
+v 883
+v 884
+v 884
+v 886
+v 7744
+v 3443
+v 4944
+v 6978
+v 6979
+v 6980
+v 6978
+v 6979
+v 6980
+v 8349
+v 897
+v 9446
+v 899
+v 9220
+v 7913
+v 3161
+v 3162
+v 7612
+v 3161
+v 3162
+v 7612
+v 5396
+v 5396
+v 5847
+v 5847
+v 8832
+v 8691
+v 8692
+v 8695
+v 8698
+v 8701
+v 918
+v 9206
+v 8848
+v 6261
+v 6264
+v 6267
+v 6270
+v 6273
+v 6261
+v 6264
+v 6267
+v 6270
+v 6273
+v 6261
+v 6264
+v 6267
+v 6270
+v 6273
+v 6261
+v 6264
+v 6267
+v 6270
+v 6273
+v 942
+v 942
+v 943
+v 943
+v 945
+v 945
+v 947
+v 5962
+v 6971
+v 6971
+v 951
+v 7331
+v 8041
+v 8042
+v 8043
+v 8044
+v 8118
+v 8120
+v 8122
+v 8118
+v 8120
+v 8122
+v 963
+v 8612
+v 7033
+v 9484
+v 6800
+v 6607
+v 6608
+v 970
+v 8838
+v 973
+v 973
+v 974
+v 974
+v 976
+v 976
+v 978
+v 978
+v 4908
+v 8541
+v 982
+v 983
+v 6209
+v 3413
+v 3414
+v 987
+v 9164
+v 4551
+v 4552
+v 4555
+v 4551
+v 4552
+v 4555
+v 4551
+v 4552
+v 4555
+v 5657
+v 5659
+v 5661
+v 5657
+v 5659
+v 5661
+v 8997
+v 8997
+v 7194
+v 7195
+v 9413
+v 1010
+v 1010
+v 1011
+v 1011
+v 1013
+v 9417
+v 1016
+v 1016
+v 1017
+v 1017
+v 7002
+v 7003
+v 7007
+v 3801
+v 3802
+v 3804
+v 9345
+v 6644
+v 6645
+v 1028
+v 8301
+v 4263
+v 9352
+v 9353
+v 9352
+v 9353
+v 4515
+v 4516
+v 4519
+v 1042
+v 1042
+v 1042
+v 1042
+v 1042
+v 1043
+v 1043
+v 1043
+v 1043
+v 1043
+v 1048
+v 1048
+v 1048
+v 1048
+v 1048
+v 6618
+v 6619
+v 6618
+v 6619
+v 6618
+v 6619
+v 6618
+v 6619
+v 3865
+v 3866
+v 9262
+v 1064
+v 8818
+v 3882
+v 8267
+v 3882
+v 8267
+v 8903
+v 8919
+v 4268
+v 4269
+v 9427
+v 4268
+v 4269
+v 9427
+v 7939
+v 7940
+v 7724
+v 7726
+v 3629
+v 3629
+v 3629
+v 7091
+v 1088
+v 1088
+v 1088
+v 1089
+v 1089
+v 1089
+v 1095
+v 1095
+v 1095
+v 1095
+v 1096
+v 1096
+v 1096
+v 1096
+v 1100
+v 1100
+v 1100
+v 1100
+v 1104
+v 1104
+v 1104
+v 1104
+v 6513
+v 6513
+v 6465
+v 7481
+v 6612
+v 6612
+v 1115
+v 1115
+v 1116
+v 1116
+v 3596
+v 3597
+v 3599
+v 3596
+v 3597
+v 3599
+v 3596
+v 3597
+v 3599
+v 8876
+v 8877
+v 8445
+v 8445
+v 7299
+v 9192
+v 9453
+v 5033
+v 1135
+v 9375
+v 7919
+v 7920
+v 7921
+v 1141
+v 1141
+v 1142
+v 1142
+v 7345
+v 9347
+v 4699
+v 4700
+v 7708
+v 1150
+v 1150
+v 1151
+v 1151
+v 8128
+v 8131
+v 8134
+v 1156
+v 1157
+v 9414
+v 1159
+v 8907
+v 1162
+v 1162
+v 1163
+v 1163
+v 1165
+v 1165
+v 4742
+v 6989
+v 8898
+v 1170
+v 9146
+v 7098
+v 7099
+v 7098
+v 7099
+v 8668
+v 4399
+v 4399
+v 9342
+v 1180
+v 1181
+v 9309
+v 1183
+v 1184
+v 5817
+v 9468
+v 6198
+v 6117
+v 6118
+v 6117
+v 6118
+v 6576
+v 6130
+v 6752
+v 1195
+v 7841
+v 1198
+v 1198
+v 1199
+v 1199
+v 1201
+v 1201
+v 1203
+v 1203
+v 9032
+v 6199
+v 4965
+v 4966
+v 4969
+v 4972
+v 4965
+v 4966
+v 4969
+v 4972
+v 5441
+v 5442
+v 5441
+v 5442
+v 5441
+v 5442
+v 6138
+v 1224
+v 1224
+v 1224
+v 1225
+v 1225
+v 1225
+v 7456
+v 7456
+v 1230
+v 1231
+v 8210
+v 8085
+v 8087
+v 8089
+v 6185
+v 6188
+v 6191
+v 6194
+v 6185
+v 6188
+v 6191
+v 6194
+v 6185
+v 6188
+v 6191
+v 6194
+v 9343
+v 5869
+v 6846
+v 6846
+v 7769
+v 7770
+v 7773
+v 7776
+v 7769
+v 7770
+v 7773
+v 7776
+v 6943
+v 6945
+v 6947
+v 6949
+v 6951
+v 6943
+v 6945
+v 6947
+v 6949
+v 6951
+v 5058
+v 5060
+v 5062
+v 5058
+v 5060
+v 5062
+v 1276
+v 9219
+v 4716
+v 4717
+v 4716
+v 4717
+v 9003
+v 9003
+v 1285
+v 1285
+v 1286
+v 1286
+v 7490
+v 6246
+v 6246
+v 4047
+v 8370
+v 7065
+v 7070
+v 3612
+v 3615
+v 3618
+v 3612
+v 3615
+v 3618
+v 3612
+v 3615
+v 3618
+v 3612
+v 3615
+v 3618
+v 6593
+v 5424
+v 5425
+v 4057
+v 9035
+v 4057
+v 9035
+v 9336
+v 1315
+v 1316
+v 1317
+v 8346
+v 6911
+v 1320
+v 1321
+v 8339
+v 9403
+v 8785
+v 8786
+v 8787
+v 8401
+v 8402
+v 8403
+v 8404
+v 8401
+v 8402
+v 8403
+v 8404
+v 8401
+v 8402
+v 8403
+v 8404
+v 1340
+v 1340
+v 1341
+v 1341
+v 1343
+v 1343
+v 4831
+v 6479
+v 1348
+v 1348
+v 1349
+v 1349
+v 1351
+v 1351
+v 9137
+v 1357
+v 1357
+v 1357
+v 1357
+v 1358
+v 1358
+v 1358
+v 1358
+v 1362
+v 1362
+v 1362
+v 1362
+v 1367
+v 1367
+v 1368
+v 1368
+v 8461
+v 8462
+v 8463
+v 8461
+v 8462
+v 8463
+v 1376
+v 5690
+v 1378
+v 9430
+v 8252
+v 8253
+v 7317
+v 7318
+v 9231
+v 1386
+v 1386
+v 1387
+v 1387
+v 1389
+v 1389
+v 7881
+v 7746
+v 4564
+v 3807
+v 3808
+v 3810
+v 3807
+v 3808
+v 3810
+v 1401
+v 1401
+v 1402
+v 1402
+v 1404
+v 1404
+v 1407
+v 1407
+v 1408
+v 1408
+v 1410
+v 1410
+v 1412
+v 1412
+v 8338
+v 7442
+v 7443
+v 8894
+v 8894
+v 5451
+v 1420
+v 6751
+v 8750
+v 8750
+v 8908
+v 9470
+v 8059
+v 8060
+v 1430
+v 1430
+v 1430
+v 1431
+v 1431
+v 1431
+v 1434
+v 1434
+v 1434
+v 1437
+v 1437
+v 1437
+v 1440
+v 1440
+v 1440
+v 183
+v 183
+v 6742
+v 6743
+v 4301
+v 4302
+v 4304
+v 4306
+v 4308
+v 4310
+v 4301
+v 4302
+v 4304
+v 4306
+v 4308
+v 4310
+v 4301
+v 4302
+v 4304
+v 4306
+v 4308
+v 4310
+v 1466
+v 1466
+v 1467
+v 1467
+v 1469
+v 1469
+v 5719
+v 5720
+v 5721
+v 5719
+v 5720
+v 5721
+v 5719
+v 5720
+v 5721
+v 5719
+v 5720
+v 5721
+v 7426
+v 8745
+v 1489
+v 1489
+v 1489
+v 1489
+v 1489
+v 1490
+v 1490
+v 1490
+v 1490
+v 1490
+v 1495
+v 1495
+v 1495
+v 1495
+v 1495
+v 7693
+v 1501
+v 7236
+v 6534
+v 1506
+v 1506
+v 1506
+v 1507
+v 1507
+v 1507
+v 1510
+v 1510
+v 1510
+v 1513
+v 1513
+v 1513
+v 1516
+v 1516
+v 1516
+v 1519
+v 8075
+v 5936
+v 9011
+v 9012
+v 9013
+v 9011
+v 9012
+v 9013
+v 9011
+v 9012
+v 9013
+v 4796
+v 9458
+v 1534
+v 1534
+v 1535
+v 1535
+v 1537
+v 1537
+v 1539
+v 1539
+v 1541
+v 1542
+v 7251
+v 1547
+v 1547
+v 1547
+v 1547
+v 1548
+v 1548
+v 1548
+v 1548
+v 6773
+v 1553
+v 4464
+v 7627
+v 7628
+v 9444
+v 7082
+v 7082
+v 1561
+v 1561
+v 1562
+v 1562
+v 4855
+v 4856
+v 7846
+v 7847
+v 8290
+v 8291
+v 8290
+v 8291
+v 8290
+v 8291
+v 6537
+v 6539
+v 6537
+v 6539
+v 1578
+v 7401
+v 5882
+v 5523
+v 5524
+v 8621
+v 8622
+v 8623
+v 8621
+v 8622
+v 8623
+v 9256
+v 1590
+v 9425
+v 8551
+v 8552
+v 1597
+v 1597
+v 1597
+v 1597
+v 1598
+v 1598
+v 1598
+v 1598
+v 1602
+v 1602
+v 1602
+v 1602
+v 1606
+v 1606
+v 1606
+v 1606
+v 1611
+v 1611
+v 1612
+v 1612
+v 1614
+v 7684
+v 1617
+v 1617
+v 1618
+v 1618
+v 8365
+v 8367
+v 7598
+v 5516
+v 5517
+v 7329
+v 6998
+v 6999
+v 7000
+v 7001
+v 6998
+v 6999
+v 7000
+v 7001
+v 6998
+v 6999
+v 7000
+v 7001
+v 6998
+v 6999
+v 7000
+v 7001
+v 1645
+v 1645
+v 1645
+v 1645
+v 1646
+v 1646
+v 1646
+v 1646
+v 1650
+v 1650
+v 1650
+v 1650
+v 1654
+v 1655
+v 9462
+v 1657
+v 9449
+v 1662
+v 1662
+v 1662
+v 1662
+v 1663
+v 1663
+v 1663
+v 1663
+v 1667
+v 1667
+v 1667
+v 1667
+v 1671
+v 1671
+v 1671
+v 1671
+v 1675
+v 1675
+v 1675
+v 1675
+v 7614
+v 7614
+v 7614
+v 1682
+v 9103
+v 1684
+v 7664
+v 6462
+v 9161
+v 8960
+v 1689
+v 5820
+v 8079
+v 8081
+v 8083
+v 8079
+v 8081
+v 8083
+v 5585
+v 1699
+v 1699
+v 1700
+v 1700
+v 1702
+v 1702
+v 7984
+v 412
+v 412
+v 412
+v 412
+v 8183
+v 6670
+v 6671
+v 1714
+v 1714
+v 1714
+v 1715
+v 1715
+v 1715
+v 1718
+v 1719
+v 7191
+v 7795
+v 1725
+v 1725
+v 1725
+v 1725
+v 1726
+v 1726
+v 1726
+v 1726
+v 1730
+v 1730
+v 1730
+v 1730
+v 1734
+v 1734
+v 1734
+v 1734
+v 5987
+v 7521
+v 5987
+v 7521
+v 6646
+v 6647
+v 6649
+v 6646
+v 6647
+v 6649
+v 1750
+v 1750
+v 1750
+v 1751
+v 1751
+v 1751
+v 1754
+v 1754
+v 1754
+v 1757
+v 1757
+v 1757
+v 1760
+v 1760
+v 1760
+v 9396
+v 1765
+v 1765
+v 1766
+v 1766
+v 1768
+v 7080
+v 5762
+v 5762
+v 6821
+v 6824
+v 6827
+v 6830
+v 6833
+v 6821
+v 6824
+v 6827
+v 6830
+v 6833
+v 6821
+v 6824
+v 6827
+v 6830
+v 6833
+v 6821
+v 6824
+v 6827
+v 6830
+v 6833
+v 6821
+v 6824
+v 6827
+v 6830
+v 6833
+v 8374
+v 8376
+v 8378
+v 8380
+v 8374
+v 8376
+v 8378
+v 8380
+v 5693
+v 5697
+v 5701
+v 5705
+v 5693
+v 5697
+v 5701
+v 5705
+v 5693
+v 5697
+v 5701
+v 5705
+v 8688
+v 8689
+v 8690
+v 8688
+v 8689
+v 8690
+v 8688
+v 8689
+v 8690
+v 8688
+v 8689
+v 8690
+v 8688
+v 8689
+v 8690
+v 1832
+v 7311
+v 1836
+v 1836
+v 1836
+v 1837
+v 1837
+v 1837
+v 1840
+v 1840
+v 1840
+v 1843
+v 1843
+v 1843
+v 7136
+v 7136
+v 1848
+v 1849
+v 6650
+v 6655
+v 1852
+v 6316
+v 1855
+v 1855
+v 1856
+v 1856
+v 9420
+v 9420
+v 1861
+v 1861
+v 1862
+v 1862
+v 1864
+v 1864
+v 1866
+v 1866
+v 9057
+v 9057
+v 1870
+v 1871
+v 7130
+v 9469
+v 9492
+v 9469
+v 9492
+v 9400
+v 1878
+v 7646
+v 8313
+v 1881
+v 8209
+v 1883
+v 9497
+v 1886
+v 1886
+v 1887
+v 1887
+v 1889
+v 1889
+v 1891
+v 1891
+v 8078
+v 7079
+v 9402
+v 1897
+v 1897
+v 1898
+v 1898
+v 6750
+v 6750
+v 5439
+v 5440
+v 1904
+v 9158
+v 1907
+v 1907
+v 1908
+v 1908
+v 1910
+v 1911
+v 6256
+v 3993
+v 8553
+v 8382
+v 5961
+v 6835
+v 6836
+v 6837
+v 67
+v 67
+v 67
+v 67
+v 4028
+v 8333
+v 4028
+v 8333
+v 4671
+v 4672
+v 5217
+v 9390
+v 8185
+v 8185
+v 8185
+v 1936
+v 1936
+v 1937
+v 1937
+v 8156
+v 8159
+v 8545
+v 8955
+v 7643
+v 8479
+v 1949
+v 1949
+v 1949
+v 1949
+v 1949
+v 1950
+v 1950
+v 1950
+v 1950
+v 1950
+v 1955
+v 1955
+v 1955
+v 1955
+v 1955
+v 1960
+v 1960
+v 1960
+v 1960
+v 1960
+v 6083
+v 4676
+v 4677
+v 4678
+v 4676
+v 4677
+v 4678
+v 4676
+v 4677
+v 4678
+v 4676
+v 4677
+v 4678
+v 8539
+v 7316
+v 1980
+v 8437
+v 1983
+v 1983
+v 1984
+v 1984
+v 1986
+v 1986
+v 1988
+v 7966
+v 6206
+v 6445
+v 6448
+v 7750
+v 7751
+v 7754
+v 7750
+v 7751
+v 7754
+v 7750
+v 7751
+v 7754
+v 6771
+v 5883
+v 5884
+v 8136
+v 5883
+v 5884
+v 8136
+v 5883
+v 5884
+v 8136
+v 5883
+v 5884
+v 8136
+v 2019
+v 2019
+v 2019
+v 2019
+v 2019
+v 2020
+v 2020
+v 2020
+v 2020
+v 2020
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2034
+v 2034
+v 2034
+v 2034
+v 2034
+v 2035
+v 2035
+v 2035
+v 2035
+v 2035
+v 2040
+v 2040
+v 2040
+v 2040
+v 2040
+v 2045
+v 2045
+v 2045
+v 2045
+v 2045
+v 2050
+v 2050
+v 2050
+v 2050
+v 2050
+v 2055
+v 2055
+v 2055
+v 2055
+v 2055
+v 2061
+v 2061
+v 2062
+v 2062
+v 2064
+v 2064
+v 2066
+v 2066
+v 9392
+v 7152
+v 2071
+v 2071
+v 2072
+v 2072
+v 4915
+v 4918
+v 4915
+v 4918
+v 4915
+v 4918
+v 4915
+v 4918
+v 7167
+v 8371
+v 8371
+v 8371
+v 4665
+v 2087
+v 9062
+v 7592
+v 7592
+v 5620
+v 5621
+v 5620
+v 5621
+v 2095
+v 8749
+v 2098
+v 2098
+v 2099
+v 2099
+v 2103
+v 2103
+v 2103
+v 2104
+v 2104
+v 2104
+v 2107
+v 2107
+v 2107
+v 8570
+v 7470
+v 9348
+v 7484
+v 9100
+v 9100
+v 9024
+v 2118
+v 2118
+v 2119
+v 2119
+v 8294
+v 2122
+v 7440
+v 2124
+v 9355
+v 7093
+v 2131
+v 2131
+v 2131
+v 2131
+v 2131
+v 2132
+v 2132
+v 2132
+v 2132
+v 2132
+v 2137
+v 2137
+v 2137
+v 2137
+v 2137
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 6864
+v 6865
+v 7761
+v 7763
+v 7765
+v 7761
+v 7763
+v 7765
+v 6601
+v 8040
+v 8268
+v 9223
+v 9223
+v 7914
+v 7915
+v 7916
+v 9359
+v 7351
+v 9227
+v 6975
+v 6976
+v 6975
+v 6976
+v 2171
+v 2171
+v 2172
+v 2172
+v 2174
+v 2174
+v 3953
+v 3954
+v 9454
+v 4805
+v 7227
+v 7228
+v 6514
+v 6514
+v 8987
+v 2186
+v 2186
+v 2187
+v 2187
+v 2189
+v 9063
+v 4291
+v 4292
+v 8576
+v 2195
+v 2195
+v 2196
+v 2196
+v 4500
+v 9287
+v 4500
+v 9287
+v 2204
+v 2204
+v 2204
+v 2205
+v 2205
+v 2205
+v 2208
+v 2208
+v 2208
+v 2211
+v 2211
+v 2211
+v 2215
+v 2215
+v 2216
+v 2216
+v 2218
+v 2218
+v 4951
+v 2221
+v 8310
+v 8441
+v 9030
+v 4835
+v 8991
+v 6120
+v 6121
+v 6122
+v 6120
+v 6121
+v 6122
+v 5299
+v 5300
+v 5303
+v 5299
+v 5300
+v 5303
+v 5299
+v 5300
+v 5303
+v 2245
+v 2245
+v 2245
+v 2245
+v 2246
+v 2246
+v 2246
+v 2246
+v 2250
+v 2250
+v 2250
+v 2250
+v 8360
+v 2256
+v 2256
+v 2257
+v 2257
+v 2259
+v 2259
+v 4477
+v 4478
+v 2265
+v 2265
+v 2265
+v 2265
+v 2265
+v 2265
+v 2270
+v 2270
+v 2271
+v 2271
+v 9349
+v 9349
+v 4532
+v 4535
+v 4532
+v 4535
+v 9366
+v 7088
+v 7088
+v 5941
+v 5942
+v 5946
+v 5941
+v 5942
+v 5946
+v 2288
+v 7011
+v 6412
+v 6415
+v 7788
+v 7789
+v 7791
+v 7793
+v 2297
+v 2297
+v 2298
+v 2298
+v 2300
+v 6159
+v 673
+v 673
+v 7200
+v 8478
+v 2308
+v 2308
+v 2308
+v 2309
+v 2309
+v 2309
+v 2312
+v 2312
+v 2312
+v 2315
+v 2315
+v 2315
+v 7548
+v 7549
+v 7550
+v 7548
+v 7549
+v 7550
+v 7548
+v 7549
+v 7550
+v 8265
+v 12
+v 12
+v 12
+v 12
+v 12
+v 12
+v 2339
+v 2339
+v 2339
+v 2339
+v 2339
+v 2339
+v 2340
+v 2340
+v 2340
+v 2340
+v 2340
+v 2340
+v 2346
+v 2346
+v 2346
+v 2346
+v 2346
+v 2346
+v 2352
+v 2352
+v 2352
+v 2352
+v 2352
+v 2352
+v 2358
+v 2358
+v 2358
+v 2358
+v 2358
+v 2358
+v 6546
+v 6547
+v 6548
+v 6549
+v 4391
+v 4392
+v 4391
+v 4392
+v 8319
+v 8320
+v 8269
+v 2376
+v 2376
+v 2377
+v 2377
+v 2379
+v 2379
+v 2381
+v 2381
+v 45
+v 45
+v 45
+v 45
+v 45
+v 45
+v 45
+v 45
+v 45
+v 45
+v 45
+v 45
+v 5142
+v 5143
+v 5142
+v 5143
+v 5142
+v 5143
+v 5142
+v 5143
+v 5913
+v 5913
+v 4357
+v 4358
+v 2407
+v 6652
+v 8163
+v 5001
+v 5002
+v 8070
+v 8116
+v 2415
+v 2415
+v 2416
+v 2416
+v 7076
+v 7077
+v 7078
+v 8952
+v 7076
+v 7077
+v 7078
+v 8952
+v 7143
+v 7144
+v 7467
+v 7468
+v 9027
+v 7780
+v 7781
+v 7780
+v 7781
+v 7780
+v 7781
+v 8554
+v 8555
+v 8747
+v 8747
+v 9354
+v 9432
+v 9354
+v 9432
+v 8502
+v 9280
+v 9280
+v 5282
+v 8045
+v 5282
+v 8045
+v 5282
+v 8045
+v 2455
+v 2455
+v 2456
+v 2456
+v 2459
+v 2459
+v 2460
+v 2460
+v 2462
+v 2462
+v 4363
+v 4364
+v 4367
+v 4370
+v 4363
+v 4364
+v 4367
+v 4370
+v 2472
+v 4929
+v 2474
+v 7963
+v 7760
+v 7760
+v 9104
+v 2479
+v 2480
+v 8251
+v 8873
+v 2484
+v 2484
+v 2485
+v 2485
+v 2487
+v 2487
+v 9351
+v 2490
+v 2491
+v 9089
+v 8306
+v 2494
+v 2495
+v 5216
+v 8600
+v 2498
+v 2499
+v 9404
+v 2503
+v 2503
+v 2503
+v 2504
+v 2504
+v 2504
+v 2507
+v 2507
+v 2507
+v 5244
+v 5244
+v 5244
+v 7133
+v 7134
+v 7133
+v 7134
+v 7396
+v 8443
+v 6808
+v 6809
+v 6813
+v 6817
+v 6808
+v 6809
+v 6813
+v 6817
+v 6808
+v 6809
+v 6813
+v 6817
+v 8606
+v 8607
+v 2535
+v 2535
+v 2535
+v 2536
+v 2536
+v 2536
+v 2539
+v 9021
+v 5736
+v 5737
+v 5740
+v 5239
+v 7740
+v 7742
+v 2547
+v 7687
+v 9437
+v 6343
+v 6344
+v 6349
+v 6354
+v 6359
+v 6343
+v 6344
+v 6349
+v 6354
+v 6359
+v 6343
+v 6344
+v 6349
+v 6354
+v 6359
+v 6343
+v 6344
+v 6349
+v 6354
+v 6359
+v 2571
+v 2571
+v 2572
+v 2572
+v 2574
+v 2574
+v 7796
+v 7796
+v 2578
+v 9317
+v 9378
+v 7863
+v 2582
+v 2583
+v 2584
+v 9419
+v 7641
+v 7642
+v 2590
+v 2590
+v 2590
+v 2591
+v 2591
+v 2591
+v 2594
+v 2594
+v 2594
+v 5687
+v 8543
+v 8300
+v 8328
+v 8329
+v 8062
+v 8065
+v 8068
+v 2607
+v 2607
+v 2607
+v 2608
+v 2608
+v 2608
+v 2611
+v 2611
+v 2611
+v 4589
+v 4590
+v 4594
+v 4598
+v 4602
+v 4589
+v 4590
+v 4594
+v 4598
+v 4602
+v 4589
+v 4590
+v 4594
+v 4598
+v 4602
+v 7356
+v 7357
+v 9111
+v 9112
+v 2633
+v 8775
+v 6696
+v 6697
+v 6701
+v 6705
+v 6709
+v 6713
+v 6696
+v 6697
+v 6701
+v 6705
+v 6709
+v 6713
+v 6696
+v 6697
+v 6701
+v 6705
+v 6709
+v 6713
+v 6696
+v 6697
+v 6701
+v 6705
+v 6709
+v 6713
+v 2661
+v 2661
+v 2661
+v 2662
+v 2662
+v 2662
+v 2665
+v 2665
+v 2665
+v 2668
+v 2668
+v 2668
+v 2671
+v 2672
+v 2673
+v 9441
+v 2676
+v 2676
+v 2677
+v 2677
+v 6228
+v 6229
+v 8052
+v 6228
+v 6229
+v 8052
+v 2687
+v 2687
+v 2687
+v 2688
+v 2688
+v 2688
+v 2691
+v 2691
+v 2691
+v 9316
+v 9316
+v 5150
+v 5154
+v 5158
+v 5150
+v 5154
+v 5158
+v 5150
+v 5154
+v 5158
+v 7057
+v 7059
+v 7207
+v 6954
+v 8989
+v 6954
+v 8989
+v 2712
+v 9386
+v 8123
+v 8123
+v 5788
+v 9411
+v 5788
+v 9411
+v 7075
+v 2722
+v 2722
+v 2723
+v 2723
+v 2725
+v 2725
+v 7953
+v 2730
+v 2730
+v 2730
+v 2731
+v 2731
+v 2731
+v 7181
+v 9261
+v 4689
+v 4690
+v 4692
+v 4694
+v 4696
+v 4689
+v 4690
+v 4692
+v 4694
+v 4696
+v 7333
+v 7334
+v 4282
+v 4283
+v 8796
+v 4282
+v 4283
+v 8796
+v 4282
+v 4283
+v 8796
+v 8151
+v 8151
+v 8151
+v 8243
+v 2763
+v 2763
+v 2763
+v 2764
+v 2764
+v 2764
+v 2767
+v 2767
+v 2767
+v 2770
+v 2770
+v 2770
+v 9387
+v 8886
+v 8888
+v 8886
+v 8888
+v 6786
+v 6893
+v 8538
+v 2782
+v 2782
+v 2783
+v 2783
+v 6600
+v 7218
+v 2787
+v 2788
+v 9434
+v 8630
+v 5412
+v 9180
+v 9181
+v 741
+v 741
+v 741
+v 741
+v 6903
+v 4548
+v 4549
+v 4550
+v 2803
+v 2803
+v 2804
+v 2804
+v 2806
+v 2806
+v 2808
+v 2808
+v 2811
+v 2811
+v 2812
+v 2812
+v 7446
+v 7917
+v 7597
+v 2817
+v 6280
+v 6419
+v 6420
+v 6421
+v 6422
+v 6423
+v 6419
+v 6420
+v 6421
+v 6422
+v 6423
+v 6419
+v 6420
+v 6421
+v 6422
+v 6423
+v 6419
+v 6420
+v 6421
+v 6422
+v 6423
+v 2841
+v 2841
+v 2841
+v 2842
+v 2842
+v 2842
+v 9371
+v 9371
+v 2847
+v 8035
+v 945
+v 945
+v 945
+v 945
+v 2853
+v 8308
+v 2855
+v 7310
+v 2858
+v 2858
+v 2859
+v 2859
+v 2861
+v 2861
+v 2864
+v 2864
+v 2865
+v 2865
+v 2869
+v 2869
+v 2869
+v 2870
+v 2870
+v 2870
+v 2873
+v 2873
+v 2873
+v 7182
+v 7182
+v 6160
+v 9418
+v 6252
+v 6253
+v 6252
+v 6253
+v 5990
+v 5991
+v 5993
+v 5990
+v 5991
+v 5993
+v 2891
+v 2891
+v 2892
+v 2892
+v 2894
+v 2894
+v 8918
+v 8918
+v 4573
+v 4573
+v 177
+v 177
+v 177
+v 177
+v 177
+v 177
+v 177
+v 177
+v 177
+v 8968
+v 8973
+v 7471
+v 7471
+v 8489
+v 8489
+v 2915
+v 8663
+v 2917
+v 2918
+v 2919
+v 9491
+v 590
+v 590
+v 590
+v 590
+v 590
+v 590
+v 590
+v 590
+v 590
+v 590
+v 4852
+v 9426
+v 8293
+v 2935
+v 2935
+v 2936
+v 2936
+v 2938
+v 6520
+v 9275
+v 7591
+v 9086
+v 4869
+v 4870
+v 4874
+v 4878
+v 4882
+v 4869
+v 4870
+v 4874
+v 4878
+v 4882
+v 4869
+v 4870
+v 4874
+v 4878
+v 4882
+v 8686
+v 9028
+v 9028
+v 5446
+v 5447
+v 5898
+v 5899
+v 5901
+v 7744
+v 2967
+v 8913
+v 9483
+v 9495
+v 6378
+v 6380
+v 5746
+v 5749
+v 5752
+v 5746
+v 5749
+v 5752
+v 8073
+v 8250
+v 8250
+v 9376
+v 8217
+v 8126
+v 7450
+v 2986
+v 8660
+v 7397
+v 6916
+v 6930
+v 6931
+v 6930
+v 6931
+v 6591
+v 8768
+v 7611
+v 2997
+v 8512
+v 5332
+v 5333
+v 9443
+v 5362
+v 5367
+v 5372
+v 5377
+v 5382
+v 5387
+v 5362
+v 5367
+v 5372
+v 5377
+v 5382
+v 5387
+v 5362
+v 5367
+v 5372
+v 5377
+v 5382
+v 5387
+v 5362
+v 5367
+v 5372
+v 5377
+v 5382
+v 5387
+v 3027
+v 3027
+v 3028
+v 3028
+v 3030
+v 3030
+v 3032
+v 7038
+v 3035
+v 3035
+v 3036
+v 3036
+v 3038
+v 3038
+v 8181
+v 8181
+v 7688
+v 9056
+v 8162
+v 8091
+v 6610
+v 9364
+v 3048
+v 9500
+v 3051
+v 3051
+v 3052
+v 3052
+v 3054
+v 3054
+v 6410
+v 5284
+v 5285
+v 5284
+v 5285
+v 7509
+v 7510
+v 7509
+v 7510
+v 7509
+v 7510
+v 5838
+v 5841
+v 5844
+v 5838
+v 5841
+v 5844
+v 5838
+v 5841
+v 5844
+v 3076
+v 8109
+v 6580
+v 6584
+v 6588
+v 6580
+v 6584
+v 6588
+v 3087
+v 3087
+v 3087
+v 3087
+v 3088
+v 3088
+v 3088
+v 3088
+v 3092
+v 3092
+v 3092
+v 3092
+v 3096
+v 3096
+v 3096
+v 3096
+v 3100
+v 3100
+v 3100
+v 3100
+v 7095
+v 8445
+v 9476
+v 9477
+v 9488
+v 9476
+v 9477
+v 9488
+v 3112
+v 3113
+v 7253
+v 6487
+v 6488
+v 6489
+v 7345
+v 9465
+v 6572
+v 6573
+v 6574
+v 6575
+v 6572
+v 6573
+v 6574
+v 6575
+v 6382
+v 7096
+v 6860
+v 6861
+v 6862
+v 6863
+v 5295
+v 9165
+v 5295
+v 9165
+v 3139
+v 3139
+v 3140
+v 3140
+v 7716
+v 7782
+v 7784
+v 9022
+v 3146
+v 7437
+v 5489
+v 5490
+v 5916
+v 9097
+v 5916
+v 9097
+v 5916
+v 9097
+v 5916
+v 9097
+v 9171
+v 1286
+v 1286
+v 3161
+v 3162
+v 7612
+v 3165
+v 3165
+v 3166
+v 3166
+v 7118
+v 5349
+v 5354
+v 5349
+v 5354
+v 9212
+v 9450
+v 3176
+v 3176
+v 3177
+v 3177
+v 9109
+v 9447
+v 9109
+v 9447
+v 9109
+v 9447
+v 9464
+v 9464
+v 3189
+v 3189
+v 3189
+v 3190
+v 3190
+v 3190
+v 9229
+v 9229
+v 6458
+v 6459
+v 6460
+v 6458
+v 6459
+v 6460
+v 8113
+v 8114
+v 8113
+v 8114
+v 8113
+v 8114
+v 8352
+v 7399
+v 7400
+v 8835
+v 7399
+v 7400
+v 8835
+v 7108
+v 7110
+v 7112
+v 7108
+v 7110
+v 7112
+v 6754
+v 9468
+v 9474
+v 3224
+v 3224
+v 3225
+v 3225
+v 3227
+v 3227
+v 3230
+v 3230
+v 3231
+v 3231
+v 6901
+v 6901
+v 4858
+v 4859
+v 3237
+v 8624
+v 9382
+v 9050
+v 9050
+v 3247
+v 3247
+v 3247
+v 3247
+v 3247
+v 3247
+v 3248
+v 3248
+v 3248
+v 3248
+v 3248
+v 3248
+v 3254
+v 3254
+v 3254
+v 3254
+v 3254
+v 3254
+v 6283
+v 6284
+v 6285
+v 6283
+v 6284
+v 6285
+v 978
+v 978
+v 978
+v 978
+v 8846
+v 5929
+v 8473
+v 6604
+v 6605
+v 6606
+v 6604
+v 6605
+v 6606
+v 8556
+v 1702
+v 1702
+v 8460
+v 3283
+v 9461
+v 7757
+v 7759
+v 9395
+v 3288
+v 3289
+v 9320
+v 4008
+v 3292
+v 3293
+v 5590
+v 6682
+v 8741
+v 2055
+v 2055
+v 2055
+v 2055
+v 2055
+v 2055
+v 2055
+v 2055
+v 2055
+v 2055
+v 2055
+v 2055
+v 2055
+v 2055
+v 2055
+v 8244
+v 3314
+v 3314
+v 3315
+v 3315
+v 3317
+v 3317
+v 3319
+v 3319
+v 3321
+v 4938
+v 6838
+v 6839
+v 6842
+v 6838
+v 6839
+v 6842
+v 6838
+v 6839
+v 6842
+v 7219
+v 3334
+v 3334
+v 3335
+v 3335
+v 3337
+v 3337
+v 3339
+v 7164
+v 3341
+v 7246
+v 317
+v 317
+v 317
+v 317
+v 317
+v 317
+v 317
+v 317
+v 317
+v 317
+v 317
+v 317
+v 9160
+v 3357
+v 3357
+v 3358
+v 3358
+v 6778
+v 5722
+v 5723
+v 5726
+v 7689
+v 7690
+v 8372
+v 1104
+v 1104
+v 1104
+v 1104
+v 1104
+v 1104
+v 1104
+v 1104
+v 1104
+v 1104
+v 1104
+v 1104
+v 9214
+v 3382
+v 3382
+v 3382
+v 3383
+v 3383
+v 3383
+v 3386
+v 3386
+v 3386
+v 3389
+v 3389
+v 3389
+v 3392
+v 3392
+v 3392
+v 3395
+v 3395
+v 3395
+v 9249
+v 7341
+v 7342
+v 7341
+v 7342
+v 9338
+v 4975
+v 7049
+v 7052
+v 8634
+v 8635
+v 8636
+v 8637
+v 3413
+v 3413
+v 3413
+v 3414
+v 3414
+v 3414
+v 3417
+v 3418
+v 3419
+v 7820
+v 5933
+v 5934
+v 5935
+v 5933
+v 5934
+v 5935
+v 5241
+v 5242
+v 9230
+v 5241
+v 5242
+v 9230
+v 9394
+v 7290
+v 3436
+v 3436
+v 3437
+v 3437
+v 3439
+v 3439
+v 3441
+v 9466
+v 9258
+v 9106
+v 3445
+v 6664
+v 9207
+v 9207
+v 6335
+v 6337
+v 3451
+v 6785
+v 7422
+v 3454
+v 9308
+v 7710
+v 7713
+v 7710
+v 7713
+v 3463
+v 3463
+v 3463
+v 3463
+v 3464
+v 3464
+v 3464
+v 3464
+v 3468
+v 3468
+v 3468
+v 3468
+v 3472
+v 3472
+v 3472
+v 3472
+v 3476
+v 3477
+v 8988
+v 6755
+v 6058
+v 6059
+v 6058
+v 6059
+v 3484
+v 3485
+v 9362
+v 5571
+v 5572
+v 5056
+v 9379
+v 5516
+v 5517
+v 5516
+v 5517
+v 3495
+v 8175
+v 7100
+v 7101
+v 7103
+v 7747
+v 7748
+v 7749
+v 7165
+v 7166
+v 8582
+v 7165
+v 7166
+v 8582
+v 7165
+v 7166
+v 8582
+v 7165
+v 7166
+v 8582
+v 7165
+v 7166
+v 8582
+v 8797
+v 8799
+v 8801
+v 8803
+v 8805
+v 8807
+v 8797
+v 8799
+v 8801
+v 8803
+v 8805
+v 8807
+v 8875
+v 8992
+v 8993
+v 9445
+v 8992
+v 8993
+v 9445
+v 7596
+v 8703
+v 7666
+v 7667
+v 7466
+v 7466
+v 3543
+v 6624
+v 8363
+v 8364
+v 9059
+v 9059
+v 6197
+v 7919
+v 7920
+v 7921
+v 7919
+v 7920
+v 7921
+v 7919
+v 7920
+v 7921
+v 7644
+v 3561
+v 3561
+v 3562
+v 3562
+v 3564
+v 3564
+v 3566
+v 3566
+v 8059
+v 8060
+v 3570
+v 9017
+v 3573
+v 3573
+v 3574
+v 3574
+v 3577
+v 3577
+v 3578
+v 3578
+v 9473
+v 7853
+v 7855
+v 7002
+v 7003
+v 7007
+v 7002
+v 7003
+v 7007
+v 7002
+v 7003
+v 7007
+v 7002
+v 7003
+v 7007
+v 3596
+v 3596
+v 3597
+v 3597
+v 3599
+v 3599
+v 3601
+v 3602
+v 8257
+v 3604
+v 9423
+v 9222
+v 9416
+v 7302
+v 7303
+v 6766
+v 6767
+v 9398
+v 251
+v 251
+v 251
+v 251
+v 251
+v 251
+v 251
+v 251
+v 251
+v 7629
+v 7632
+v 7635
+v 7629
+v 7632
+v 7635
+v 3629
+v 3629
+v 3629
+v 3629
+v 3629
+v 3629
+v 3634
+v 5546
+v 3636
+v 7245
+v 9277
+v 3639
+v 3640
+v 3641
+v 3642
+v 8923
+v 9049
+v 9346
+v 9049
+v 9346
+v 9049
+v 9346
+v 9049
+v 9346
+v 5912
+v 9462
+v 9462
+v 6790
+v 8039
+v 8878
+v 6622
+v 6623
+v 145
+v 145
+v 145
+v 145
+v 145
+v 145
+v 145
+v 145
+v 145
+v 145
+v 145
+v 145
+v 7431
+v 7431
+v 7431
+v 7431
+v 9340
+v 9340
+v 9449
+v 7646
+v 7646
+v 6971
+v 6971
+v 353
+v 353
+v 7818
+v 6461
+v 6461
+v 9309
+v 9309
+v 3690
+v 6535
+v 6596
+v 7654
+v 3694
+v 5915
+v 3696
+v 7193
+v 8384
+v 8384
+v 5293
+v 8962
+v 7391
+v 7392
+v 7393
+v 7394
+v 7391
+v 7392
+v 7393
+v 7394
+v 3710
+v 3711
+v 9456
+v 9374
+v 3714
+v 9248
+v 9494
+v 1440
+v 1440
+v 1440
+v 1440
+v 1440
+v 1440
+v 3723
+v 3724
+v 3725
+v 5787
+v 9399
+v 6920
+v 7966
+v 7186
+v 7187
+v 7188
+v 8776
+v 8776
+v 8776
+v 7012
+v 7013
+v 7014
+v 7015
+v 7016
+v 7012
+v 7013
+v 7014
+v 7015
+v 7016
+v 7012
+v 7013
+v 7014
+v 7015
+v 7016
+v 7012
+v 7013
+v 7014
+v 7015
+v 7016
+v 7012
+v 7013
+v 7014
+v 7015
+v 7016
+v 3761
+v 8491
+v 9360
+v 6781
+v 8312
+v 8312
+v 8312
+v 3768
+v 3769
+v 6909
+v 7208
+v 7209
+v 7210
+v 7208
+v 7209
+v 7210
+v 7208
+v 7209
+v 7210
+v 7208
+v 7209
+v 7210
+v 9381
+v 7881
+v 7881
+v 7064
+v 8171
+v 8172
+v 3789
+v 9373
+v 8609
+v 8610
+v 8611
+v 8609
+v 8610
+v 8611
+v 6534
+v 8330
+v 8331
+v 3801
+v 3801
+v 3802
+v 3802
+v 3804
+v 3804
+v 3807
+v 3807
+v 3808
+v 3808
+v 3810
+v 3810
+v 3814
+v 3814
+v 3814
+v 3815
+v 3815
+v 3815
+v 8410
+v 8410
+v 8410
+v 7115
+v 7115
+v 3823
+v 3824
+v 3825
+v 9147
+v 6895
+v 6896
+v 6895
+v 6896
+v 6895
+v 6896
+v 8164
+v 8165
+v 9421
+v 8164
+v 8165
+v 9421
+v 8164
+v 8165
+v 9421
+v 3842
+v 8778
+v 3844
+v 8909
+v 6911
+v 692
+v 692
+v 692
+v 692
+v 1618
+v 1618
+v 1986
+v 1986
+v 7786
+v 7787
+v 7786
+v 7787
+v 7786
+v 7787
+v 7786
+v 7787
+v 3865
+v 3865
+v 3865
+v 3866
+v 3866
+v 3866
+v 8608
+v 1675
+v 1675
+v 1675
+v 1675
+v 1675
+v 1675
+v 1675
+v 1675
+v 1675
+v 1675
+v 1675
+v 1675
+v 3882
+v 8267
+v 7491
+v 8436
+v 3886
+v 9422
+v 527
+v 527
+v 527
+v 527
+v 9408
+v 9409
+v 9479
+v 9490
+v 9479
+v 9490
+v 5529
+v 5530
+v 9215
+v 5529
+v 5530
+v 9215
+v 3905
+v 3905
+v 3906
+v 3906
+v 3908
+v 3908
+v 3910
+v 3910
+v 9108
+v 3914
+v 3914
+v 3915
+v 3915
+v 3921
+v 3921
+v 3921
+v 3921
+v 3921
+v 3922
+v 3922
+v 3922
+v 3922
+v 3922
+v 3927
+v 3927
+v 3927
+v 3927
+v 3927
+v 9355
+v 9355
+v 1389
+v 1389
+v 1389
+v 1389
+v 6646
+v 6647
+v 6649
+v 6646
+v 6647
+v 6649
+v 8761
+v 8762
+v 8763
+v 8761
+v 8762
+v 8763
+v 7229
+v 7229
+v 9054
+v 3953
+v 3954
+v 9454
+v 7722
+v 8922
+v 3958
+v 9221
+v 9191
+v 261
+v 261
+v 261
+v 8075
+v 8075
+v 9115
+v 9485
+v 9380
+v 9459
+v 3970
+v 7696
+v 686
+v 686
+v 686
+v 686
+v 686
+v 686
+v 9238
+v 3979
+v 9048
+v 7329
+v 7329
+v 5508
+v 3984
+v 8568
+v 7810
+v 3987
+v 5784
+v 7335
+v 7336
+v 7338
+v 7340
+v 3993
+v 8553
+v 6906
+v 6907
+v 6207
+v 9311
+v 6207
+v 9311
+v 7542
+v 7543
+v 7542
+v 7543
+v 7542
+v 7543
+v 7542
+v 7543
+v 9204
+v 9278
+v 4011
+v 6918
+v 7522
+v 7523
+v 9463
+v 7522
+v 7523
+v 9463
+v 7395
+v 7395
+v 4021
+v 4022
+v 8995
+v 9448
+v 7311
+v 7311
+v 7311
+v 4028
+v 8333
+v 8280
+v 786
+v 786
+v 786
+v 786
+v 6866
+v 6867
+v 6866
+v 6867
+v 4040
+v 4040
+v 4041
+v 4041
+v 749
+v 749
+v 749
+v 749
+v 4047
+v 8370
+v 4050
+v 4050
+v 4051
+v 4051
+v 4053
+v 4053
+v 4055
+v 4055
+v 4057
+v 9035
+v 7092
+v 9350
+v 7151
+v 8997
+v 8997
+v 8448
+v 8451
+v 8454
+v 8457
+v 8448
+v 8451
+v 8454
+v 8457
+v 4073
+v 4073
+v 4074
+v 4074
+v 4076
+v 4076
+v 4078
+v 4078
+v 4080
+v 4080
+v 7408
+v 7408
+v 4087
+v 4087
+v 4087
+v 4087
+v 4088
+v 4088
+v 4088
+v 4088
+v 1612
+v 1612
+v 4095
+v 4095
+v 4096
+v 4096
+v 1017
+v 1017
+v 4101
+v 4101
+v 4102
+v 4102
+v 4104
+v 4104
+v 4106
+v 4106
+v 4108
+v 4109
+v 6988
+v 6853
+v 8744
+v 4113
+v 8249
+v 7217
+v 7217
+v 4117
+v 7967
+v 8505
+v 6035
+v 6036
+v 6035
+v 6036
+v 9367
+v 9368
+v 9369
+v 9439
+v 9440
+v 9367
+v 9368
+v 9369
+v 9439
+v 9440
+v 9367
+v 9368
+v 9369
+v 9439
+v 9440
+v 9367
+v 9368
+v 9369
+v 9439
+v 9440
+v 9367
+v 9368
+v 9369
+v 9439
+v 9440
+v 9367
+v 9368
+v 9369
+v 9439
+v 9440
+v 9367
+v 9368
+v 9369
+v 9439
+v 9440
+v 4160
+v 4160
+v 4161
+v 4161
+v 4163
+v 4163
+v 4165
+v 4165
+v 8785
+v 8786
+v 8787
+v 8785
+v 8786
+v 8787
+v 8785
+v 8786
+v 8787
+v 8785
+v 8786
+v 8787
+v 7969
+v 201
+v 201
+v 201
+v 201
+v 201
+v 201
+v 201
+v 201
+v 201
+v 201
+v 201
+v 201
+v 201
+v 201
+v 201
+v 201
+v 7663
+v 9469
+v 9492
+v 9469
+v 9492
+v 9469
+v 9492
+v 4203
+v 8577
+v 8818
+v 8818
+v 4209
+v 4209
+v 4209
+v 4210
+v 4210
+v 4210
+v 4213
+v 4213
+v 4213
+v 5667
+v 5667
+v 4218
+v 9429
+v 8900
+v 6123
+v 6123
+v 6123
+v 8749
+v 8551
+v 8552
+v 8551
+v 8552
+v 9343
+v 7664
+v 7664
+v 6330
+v 6332
+v 6330
+v 6332
+v 4237
+v 4237
+v 4238
+v 4238
+v 8325
+v 8809
+v 7255
+v 7256
+v 7255
+v 7256
+v 9020
+v 8665
+v 6989
+v 8898
+v 884
+v 884
+v 9425
+v 9425
+v 4255
+v 4255
+v 4256
+v 4256
+v 9393
+v 8784
+v 6479
+v 6479
+v 6479
+v 6479
+v 9451
+v 4265
+v 7032
+v 9096
+v 4268
+v 4269
+v 9427
+v 4272
+v 4272
+v 4273
+v 4273
+v 7442
+v 7443
+v 7442
+v 7443
+v 9385
+v 7449
+v 7885
+v 4282
+v 4283
+v 8796
+v 7951
+v 7952
+v 4287
+v 7936
+v 6209
+v 7890
+v 4291
+v 4292
+v 8576
+v 9487
+v 8706
+v 8709
+v 8612
+v 8612
+v 8612
+v 4301
+v 4301
+v 4302
+v 4302
+v 4304
+v 4304
+v 4306
+v 4306
+v 4308
+v 4308
+v 4310
+v 4310
+v 4314
+v 4314
+v 4314
+v 4315
+v 4315
+v 4315
+v 4318
+v 4319
+v 8511
+v 8745
+v 6771
+v 7088
+v 7088
+v 7088
+v 7088
+v 8742
+v 9158
+v 442
+v 442
+v 442
+v 442
+v 442
+v 442
+v 4335
+v 8207
+v 2611
+v 2611
+v 2611
+v 2611
+v 2611
+v 2611
+v 2611
+v 2611
+v 2611
+v 2611
+v 2611
+v 2611
+v 2611
+v 2611
+v 2611
+v 8347
+v 8348
+v 9415
+v 8347
+v 8348
+v 9415
+v 8584
+v 8584
+v 6030
+v 4363
+v 4363
+v 4363
+v 4364
+v 4364
+v 4364
+v 4367
+v 4367
+v 4367
+v 4370
+v 4370
+v 4370
+v 7130
+v 7130
+v 7130
+v 8899
+v 4378
+v 4378
+v 4379
+v 4379
+v 4383
+v 4383
+v 4383
+v 4384
+v 4384
+v 4384
+v 4387
+v 4387
+v 4387
+v 4391
+v 4391
+v 4392
+v 4392
+v 7668
+v 7670
+v 7708
+v 7708
+v 4399
+v 4399
+v 4399
+v 4399
+v 2066
+v 2066
+v 4405
+v 4405
+v 4406
+v 4406
+v 861
+v 861
+v 861
+v 861
+v 861
+v 861
+v 861
+v 861
+v 861
+v 861
+v 861
+v 861
+v 8258
+v 1116
+v 1116
+v 6779
+v 6780
+v 9406
+v 6779
+v 6780
+v 9406
+v 6779
+v 6780
+v 9406
+v 6779
+v 6780
+v 9406
+v 9366
+v 8817
+v 7424
+v 7425
+v 9320
+v 9320
+v 4444
+v 4444
+v 4444
+v 4444
+v 4445
+v 4445
+v 4445
+v 4445
+v 4449
+v 4449
+v 4449
+v 4449
+v 4453
+v 4453
+v 4453
+v 4453
+v 9493
+v 8077
+v 9428
+v 9428
+v 9428
+v 4462
+v 4463
+v 9455
+v 8683
+v 8684
+v 8685
+v 8210
+v 8210
+v 7105
+v 9383
+v 9383
+v 9216
+v 2725
+v 2725
+v 9236
+v 9062
+v 4479
+v 4479
+v 4480
+v 4480
+v 4482
+v 4482
+v 2416
+v 2416
+v 8373
+v 5681
+v 5683
+v 5685
+v 4490
+v 4491
+v 8510
+v 9197
+v 8269
+v 7719
+v 9414
+v 9414
+v 8181
+v 8181
+v 4500
+v 9287
+v 4504
+v 4504
+v 4504
+v 4505
+v 4505
+v 4505
+v 4508
+v 4508
+v 4508
+v 4511
+v 7385
+v 4515
+v 4515
+v 4515
+v 4516
+v 4516
+v 4516
+v 4519
+v 4519
+v 4519
+v 7693
+v 7693
+v 2119
+v 2119
+v 2119
+v 2119
+v 2119
+v 2119
+v 2770
+v 2770
+v 2770
+v 6521
+v 6522
+v 9407
+v 6521
+v 6522
+v 9407
+v 7843
+v 7844
+v 9412
+v 9412
+v 8794
+v 8794
+v 4546
+v 4546
+v 4547
+v 4547
+v 4551
+v 4551
+v 4551
+v 4552
+v 4552
+v 4552
+v 4555
+v 4555
+v 4555
+v 4559
+v 4559
+v 4560
+v 4560
+v 9388
+v 8112
+v 8098
+v 8832
+v 9480
+v 9489
+v 9480
+v 9489
+v 4570
+v 9410
+v 4573
+v 4573
+v 4573
+v 4573
+v 9496
+v 9252
+v 5664
+v 8392
+v 5664
+v 8392
+v 8196
+v 4583
+v 9431
+v 9348
+v 4589
+v 4589
+v 4589
+v 4589
+v 4590
+v 4590
+v 4590
+v 4590
+v 4594
+v 4594
+v 4594
+v 4594
+v 4598
+v 4598
+v 4598
+v 4598
+v 4602
+v 4602
+v 4602
+v 4602
+v 4607
+v 4607
+v 4608
+v 4608
+v 7574
+v 7575
+v 4612
+v 9070
+v 4618
+v 4618
+v 4618
+v 4618
+v 4618
+v 4619
+v 4619
+v 4619
+v 4619
+v 4619
+v 4624
+v 4624
+v 4624
+v 4624
+v 4624
+v 4629
+v 4629
+v 4629
+v 4629
+v 4629
+v 4634
+v 4634
+v 4634
+v 4634
+v 4634
+v 4639
+v 4639
+v 4639
+v 4639
+v 4639
+v 8764
+v 8766
+v 4647
+v 4647
+v 4648
+v 4648
+v 7156
+v 7158
+v 7160
+v 7162
+v 4654
+v 4655
+v 4656
+v 4657
+v 9186
+v 4659
+v 8263
+v 6800
+v 6800
+v 9467
+v 7837
+v 7839
+v 276
+v 276
+v 9220
+v 9220
+v 4671
+v 4671
+v 4672
+v 4672
+v 2691
+v 2691
+v 2691
+v 9424
+v 9424
+v 9424
+v 7179
+v 7180
+v 7897
+v 7898
+v 7899
+v 7897
+v 7898
+v 7899
+v 4689
+v 4689
+v 4690
+v 4690
+v 4692
+v 4692
+v 4694
+v 4694
+v 4696
+v 4696
+v 4699
+v 4699
+v 4700
+v 4700
+v 7526
+v 7528
+v 7530
+v 7526
+v 7528
+v 7530
+v 7526
+v 7528
+v 7530
+v 2936
+v 2936
+v 296
+v 296
+v 296
+v 296
+v 4718
+v 4718
+v 4719
+v 4719
+v 7479
+v 7479
+v 4724
+v 4724
+v 4725
+v 4725
+v 6246
+v 6246
+v 6919
+v 7905
+v 7905
+v 8913
+v 3054
+v 3054
+v 3054
+v 3054
+v 4739
+v 4739
+v 4739
+v 4740
+v 4740
+v 4740
+v 4743
+v 8303
+v 8567
+v 7251
+v 7251
+v 7251
+v 7251
+v 7251
+v 8573
+v 8209
+v 7780
+v 7781
+v 9025
+v 8265
+v 7924
+v 4760
+v 4760
+v 4760
+v 4761
+v 4761
+v 4761
+v 836
+v 836
+v 836
+v 836
+v 836
+v 836
+v 836
+v 836
+v 7353
+v 7354
+v 7355
+v 8442
+v 9400
+v 9022
+v 4779
+v 4779
+v 4780
+v 4780
+v 9029
+v 7548
+v 7549
+v 7550
+v 7548
+v 7549
+v 7550
+v 7486
+v 4792
+v 4792
+v 4792
+v 4792
+v 4792
+v 4792
+v 4796
+v 9458
+v 4799
+v 4799
+v 4800
+v 4800
+v 4802
+v 4802
+v 4804
+v 4804
+v 9356
+v 8226
+v 7409
+v 7104
+v 8073
+v 6975
+v 6976
+v 6277
+v 9460
+v 1203
+v 1203
+v 1203
+v 1203
+v 1203
+v 1203
+v 1203
+v 1203
+v 9102
+v 7917
+v 7917
+v 7503
+v 4828
+v 4828
+v 4829
+v 4829
+v 7398
+v 9358
+v 6225
+v 8382
+v 4835
+v 8991
+v 7597
+v 6061
+v 8558
+v 8560
+v 4842
+v 4842
+v 4843
+v 4843
+v 4845
+v 4845
+v 4847
+v 4847
+v 4849
+v 4849
+v 7922
+v 4852
+v 9426
+v 4854
+v 8525
+v 9417
+v 9417
+v 8987
+v 1011
+v 1011
+v 1011
+v 1011
+v 9375
+v 9375
+v 8292
+v 4869
+v 4869
+v 4869
+v 4869
+v 4870
+v 4870
+v 4870
+v 4870
+v 4874
+v 4874
+v 4874
+v 4874
+v 4878
+v 4878
+v 4878
+v 4878
+v 4882
+v 4882
+v 4882
+v 4882
+v 7739
+v 9420
+v 9420
+v 9420
+v 541
+v 541
+v 541
+v 541
+v 9084
+v 7247
+v 7249
+v 7247
+v 7249
+v 7247
+v 7249
+v 6953
+v 7482
+v 7483
+v 7482
+v 7483
+v 7310
+v 7310
+v 4908
+v 8541
+v 4911
+v 4911
+v 4912
+v 4912
+v 4914
+v 4914
+v 610
+v 610
+v 610
+v 610
+v 610
+v 610
+v 7171
+v 7172
+v 7174
+v 7176
+v 7171
+v 7172
+v 7174
+v 7176
+v 7083
+v 7084
+v 7085
+v 7086
+v 8383
+v 8539
+v 8243
+v 9404
+v 9404
+v 9352
+v 9353
+v 8437
+v 8919
+v 8919
+v 7721
+v 6675
+v 4948
+v 4948
+v 4948
+v 4949
+v 4949
+v 4949
+v 549
+v 549
+v 4954
+v 7402
+v 6254
+v 6255
+v 7593
+v 8874
+v 8660
+v 8660
+v 8660
+v 4965
+v 4965
+v 4965
+v 4966
+v 4966
+v 4966
+v 4969
+v 4969
+v 4969
+v 4972
+v 4972
+v 4972
+v 9389
+v 9357
+v 8151
+v 8151
+v 8151
+v 4980
+v 8664
+v 9405
+v 8918
+v 8918
+v 9003
+v 9003
+v 8300
+v 9036
+v 9037
+v 8855
+v 8856
+v 8855
+v 8856
+v 8251
+v 8251
+v 9028
+v 9028
+v 9028
+v 9028
+v 5001
+v 5001
+v 5002
+v 5002
+v 8834
+v 8168
+v 9114
+v 5007
+v 7460
+v 8502
+v 8502
+v 8502
+v 7349
+v 2187
+v 2187
+v 1675
+v 1675
+v 1675
+v 1675
+v 9475
+v 7490
+v 7779
+v 9452
+v 8183
+v 7136
+v 7136
+v 7080
+v 7311
+v 7311
+v 7311
+v 8910
+v 9498
+v 8910
+v 9498
+v 8308
+v 9106
+v 9483
+v 9495
+v 9388
+v 7440
+v 7389
+v 7390
+v 7389
+v 7390
+v 5047
+v 5047
+v 5047
+v 5047
+v 5048
+v 5048
+v 5048
+v 5048
+v 5052
+v 5052
+v 5052
+v 5052
+v 5056
+v 9379
+v 8489
+v 7724
+v 7726
+v 7724
+v 7726
+v 7724
+v 7726
+v 45
+v 45
+v 45
+v 45
+v 45
+v 45
+v 45
+v 45
+v 45
+v 45
+v 45
+v 45
+v 2594
+v 2594
+v 2594
+v 2594
+v 2594
+v 2594
+v 2594
+v 2594
+v 2594
+v 5086
+v 5087
+v 7343
+v 9362
+v 6804
+v 6805
+v 6806
+v 6807
+v 6804
+v 6805
+v 6806
+v 6807
+v 8624
+v 8624
+v 8041
+v 8042
+v 8043
+v 8044
+v 8041
+v 8042
+v 8043
+v 8044
+v 8041
+v 8042
+v 8043
+v 8044
+v 8041
+v 8042
+v 8043
+v 8044
+v 9465
+v 7465
+v 7466
+v 7466
+v 9476
+v 9477
+v 9488
+v 9476
+v 9477
+v 9488
+v 6985
+v 5127
+v 5127
+v 5129
+v 5129
+v 5131
+v 5131
+v 9103
+v 9103
+v 9057
+v 9057
+v 8294
+v 8200
+v 5142
+v 5142
+v 5142
+v 5142
+v 5143
+v 5143
+v 5143
+v 5143
+v 7079
+v 6228
+v 6229
+v 8052
+v 8401
+v 8402
+v 8403
+v 8404
+v 8401
+v 8402
+v 8403
+v 8404
+v 8401
+v 8402
+v 8403
+v 8404
+v 9474
+v 9474
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 8317
+v 8318
+v 8317
+v 8318
+v 5189
+v 5190
+v 6677
+v 2315
+v 2315
+v 2315
+v 9206
+v 9206
+v 7694
+v 8873
+v 9307
+v 8829
+v 8830
+v 8831
+v 8829
+v 8830
+v 8831
+v 8894
+v 8894
+v 8894
+v 8894
+v 9227
+v 6929
+v 6929
+v 7033
+v 9484
+v 7033
+v 9484
+v 5217
+v 9390
+v 8222
+v 8223
+v 8222
+v 8223
+v 652
+v 652
+v 652
+v 652
+v 8333
+v 8333
+v 8333
+v 8333
+v 8333
+v 8408
+v 8092
+v 9109
+v 9447
+v 9109
+v 9447
+v 8904
+v 8310
+v 7717
+v 5241
+v 5242
+v 9230
+v 9347
+v 847
+v 847
+v 847
+v 9249
+v 7237
+v 6692
+v 6693
+v 6694
+v 6695
+v 6692
+v 6693
+v 6694
+v 6695
+v 6692
+v 6693
+v 6694
+v 6695
+v 6692
+v 6693
+v 6694
+v 6695
+v 6692
+v 6693
+v 6694
+v 6695
+v 9228
+v 9228
+v 7761
+v 7763
+v 7765
+v 7761
+v 7763
+v 7765
+v 7761
+v 7763
+v 7765
+v 7316
+v 5282
+v 8045
+v 9395
+v 9339
+v 9339
+v 7959
+v 9397
+v 9457
+v 7596
+v 9403
+v 9403
+v 5293
+v 8962
+v 5295
+v 9165
+v 5299
+v 5299
+v 5299
+v 5300
+v 5300
+v 5300
+v 5303
+v 5303
+v 5303
+v 9147
+v 9147
+v 9147
+v 8668
+v 8668
+v 9402
+v 9402
+v 5314
+v 5314
+v 5315
+v 5315
+v 8201
+v 8202
+v 8201
+v 8202
+v 1404
+v 1404
+v 1404
+v 1404
+v 1404
+v 1404
+v 8908
+v 8908
+v 8908
+v 8608
+v 7011
+v 5332
+v 5333
+v 9443
+v 8410
+v 8410
+v 8853
+v 8854
+v 8473
+v 8473
+v 7
+v 7
+v 7
+v 7
+v 7
+v 7
+v 7
+v 7
+v 7
+v 8513
+v 8515
+v 8517
+v 8519
+v 8521
+v 8513
+v 8515
+v 8517
+v 8519
+v 8521
+v 6977
+v 7664
+v 7664
+v 6343
+v 6344
+v 6349
+v 6354
+v 6359
+v 6343
+v 6344
+v 6349
+v 6354
+v 6359
+v 6343
+v 6344
+v 6349
+v 6354
+v 6359
+v 6343
+v 6344
+v 6349
+v 6354
+v 6359
+v 6343
+v 6344
+v 6349
+v 6354
+v 6359
+v 6343
+v 6344
+v 6349
+v 6354
+v 6359
+v 5396
+v 5396
+v 5396
+v 5396
+v 5396
+v 5396
+v 5396
+v 5396
+v 5401
+v 7778
+v 9472
+v 8554
+v 8555
+v 8554
+v 8555
+v 5409
+v 5409
+v 5410
+v 5410
+v 8126
+v 9137
+v 9399
+v 7182
+v 7182
+v 5417
+v 7626
+v 5420
+v 5420
+v 5421
+v 5421
+v 5423
+v 5423
+v 7643
+v 7643
+v 3337
+v 3337
+v 5429
+v 7653
+v 9256
+v 1606
+v 1606
+v 1606
+v 1606
+v 1389
+v 1389
+v 5438
+v 7304
+v 5441
+v 5441
+v 5442
+v 5442
+v 5446
+v 5446
+v 5446
+v 5447
+v 5447
+v 5447
+v 9089
+v 9089
+v 7191
+v 9430
+v 9430
+v 9430
+v 8570
+v 8570
+v 1898
+v 1898
+v 1898
+v 1898
+v 3395
+v 3395
+v 3395
+v 3395
+v 3395
+v 3395
+v 7143
+v 7144
+v 8797
+v 8799
+v 8801
+v 8803
+v 8805
+v 8807
+v 8797
+v 8799
+v 8801
+v 8803
+v 8805
+v 8807
+v 8797
+v 8799
+v 8801
+v 8803
+v 8805
+v 8807
+v 5489
+v 5489
+v 5490
+v 5490
+v 4399
+v 4399
+v 9054
+v 8901
+v 9470
+v 9470
+v 5499
+v 5499
+v 5500
+v 5500
+v 9030
+v 9384
+v 9384
+v 7194
+v 7195
+v 9413
+v 8743
+v 8478
+v 5510
+v 7906
+v 5516
+v 5516
+v 5516
+v 5516
+v 5516
+v 5517
+v 5517
+v 5517
+v 5517
+v 5517
+v 8988
+v 8988
+v 9310
+v 9310
+v 8346
+v 8346
+v 8346
+v 5529
+v 5530
+v 9215
+v 8085
+v 8087
+v 8089
+v 1362
+v 1362
+v 1362
+v 1362
+v 1362
+v 1362
+v 1362
+v 1362
+v 1362
+v 1362
+v 1362
+v 1362
+v 391
+v 391
+v 391
+v 9434
+v 9434
+v 5552
+v 9205
+v 7709
+v 7335
+v 7336
+v 7338
+v 7340
+v 7335
+v 7336
+v 7338
+v 7340
+v 7891
+v 7893
+v 7895
+v 7891
+v 7893
+v 7895
+v 7891
+v 7893
+v 7895
+v 7236
+v 7236
+v 5576
+v 5576
+v 5576
+v 5577
+v 5577
+v 5577
+v 5580
+v 5580
+v 5580
+v 5583
+v 5583
+v 5583
+v 8123
+v 8549
+v 8550
+v 8549
+v 8550
+v 9032
+v 9315
+v 5593
+v 5594
+v 8771
+v 6969
+v 6970
+v 9491
+v 8268
+v 8109
+v 8219
+v 8220
+v 8221
+v 8219
+v 8220
+v 8221
+v 8955
+v 8885
+v 5610
+v 5610
+v 5611
+v 5611
+v 8448
+v 8451
+v 8454
+v 8457
+v 1412
+v 1412
+v 5620
+v 5620
+v 5621
+v 5621
+v 5626
+v 5626
+v 5626
+v 5626
+v 5627
+v 5627
+v 5627
+v 5627
+v 5631
+v 5631
+v 5631
+v 5631
+v 1089
+v 1089
+v 1089
+v 1089
+v 1089
+v 1089
+v 1089
+v 1089
+v 1089
+v 8118
+v 8120
+v 8122
+v 8118
+v 8120
+v 8122
+v 9351
+v 7002
+v 7003
+v 7007
+v 3227
+v 3227
+v 3038
+v 3038
+v 2259
+v 2259
+v 2259
+v 2259
+v 2259
+v 2259
+v 5664
+v 8392
+v 5667
+v 5667
+v 5667
+v 5667
+v 7960
+v 8321
+v 5672
+v 8216
+v 945
+v 945
+v 945
+v 945
+v 7254
+v 8217
+v 9115
+v 9115
+v 8876
+v 8877
+v 8876
+v 8877
+v 8876
+v 8877
+v 2507
+v 2507
+v 2507
+v 4392
+v 4392
+v 5693
+v 5693
+v 5693
+v 5693
+v 5697
+v 5697
+v 5697
+v 5697
+v 5701
+v 5701
+v 5701
+v 5701
+v 5705
+v 5705
+v 5705
+v 5705
+v 7939
+v 7940
+v 7939
+v 7940
+v 7939
+v 7940
+v 8094
+v 7302
+v 7303
+v 9456
+v 9456
+v 5722
+v 5722
+v 5722
+v 5723
+v 5723
+v 5723
+v 5726
+v 5726
+v 5726
+v 9419
+v 9419
+v 9419
+v 8265
+v 8265
+v 5736
+v 5736
+v 5736
+v 5737
+v 5737
+v 5737
+v 5740
+v 5740
+v 5740
+v 6868
+v 7399
+v 7400
+v 8835
+v 7467
+v 7468
+v 9027
+v 7467
+v 7468
+v 9027
+v 7467
+v 7468
+v 9027
+v 9500
+v 9500
+v 7740
+v 7742
+v 7740
+v 7742
+v 5762
+v 5762
+v 7437
+v 9309
+v 9309
+v 7481
+v 9429
+v 9429
+v 9021
+v 9021
+v 9423
+v 2487
+v 2487
+v 2487
+v 2487
+v 7683
+v 8384
+v 8384
+v 8878
+v 8878
+v 8878
+v 8878
+v 9468
+v 1760
+v 1760
+v 1760
+v 5788
+v 9411
+v 3910
+v 3910
+v 8162
+v 9376
+v 9376
+v 9464
+v 9464
+v 8374
+v 8376
+v 8378
+v 8380
+v 8374
+v 8376
+v 8378
+v 8380
+v 2416
+v 2416
+v 2416
+v 2416
+v 9158
+v 9158
+v 8538
+v 8538
+v 1165
+v 1165
+v 5815
+v 8154
+v 9171
+v 8110
+v 8111
+v 8600
+v 7757
+v 7759
+v 9377
+v 9391
+v 9377
+v 9391
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 8460
+v 8460
+v 663
+v 663
+v 663
+v 663
+v 663
+v 663
+v 663
+v 663
+v 663
+v 2808
+v 2808
+v 2808
+v 2808
+v 7841
+v 9011
+v 9012
+v 9013
+v 9011
+v 9012
+v 9013
+v 8899
+v 8742
+v 8166
+v 8156
+v 8159
+v 8156
+v 8159
+v 7821
+v 8115
+v 8115
+v 7621
+v 8116
+v 1843
+v 1843
+v 1843
+v 1843
+v 1843
+v 1843
+v 1843
+v 1843
+v 1843
+v 9485
+v 9485
+v 9371
+v 5883
+v 5884
+v 8136
+v 8703
+v 8307
+v 9216
+v 8706
+v 8709
+v 9192
+v 9453
+v 9192
+v 9453
+v 9192
+v 9453
+v 5898
+v 5898
+v 5899
+v 5899
+v 5901
+v 5901
+v 8760
+v 8760
+v 8760
+v 8760
+v 9471
+v 9471
+v 4406
+v 4406
+v 4406
+v 4406
+v 8338
+v 7092
+v 9350
+v 5916
+v 9097
+v 7472
+v 7474
+v 7476
+v 7478
+v 9017
+v 9017
+v 9017
+v 9017
+v 2936
+v 2936
+v 2936
+v 2936
+v 9212
+v 7697
+v 9486
+v 8523
+v 7410
+v 7410
+v 7410
+v 7984
+v 5941
+v 5941
+v 5941
+v 5941
+v 5942
+v 5942
+v 5942
+v 5942
+v 5946
+v 5946
+v 5946
+v 5946
+v 2066
+v 2066
+v 2066
+v 2066
+v 5955
+v 5955
+v 5956
+v 5956
+v 5958
+v 5958
+v 5960
+v 5960
+v 9275
+v 7611
+v 9425
+v 4608
+v 4608
+v 4608
+v 4608
+v 9096
+v 9096
+v 9482
+v 7328
+v 5974
+v 5974
+v 5975
+v 5975
+v 9076
+v 9077
+v 9076
+v 9077
+v 9449
+v 9364
+v 9370
+v 3414
+v 3414
+v 3414
+v 5987
+v 7521
+v 5990
+v 5990
+v 5991
+v 5991
+v 5993
+v 5993
+v 8511
+v 8511
+v 8279
+v 8293
+v 8293
+v 9479
+v 9490
+v 9479
+v 9490
+v 3166
+v 3166
+v 3166
+v 3166
+v 4696
+v 4696
+v 4696
+v 4696
+v 4696
+v 4696
+v 4696
+v 4696
+v 4696
+v 4696
+v 6020
+v 6020
+v 6020
+v 6021
+v 6021
+v 6021
+v 9179
+v 9478
+v 9499
+v 9478
+v 9499
+v 3810
+v 3810
+v 8960
+v 9062
+v 9062
+v 6035
+v 6035
+v 6036
+v 6036
+v 8775
+v 8775
+v 8775
+v 8630
+v 9367
+v 9368
+v 9369
+v 9439
+v 9440
+v 9367
+v 9368
+v 9369
+v 9439
+v 9440
+v 8436
+v 9412
+v 9412
+v 8818
+v 8818
+v 6058
+v 6058
+v 6059
+v 6059
+v 8577
+v 9416
+v 9360
+v 7246
+v 7246
+v 878
+v 878
+v 878
+v 878
+v 878
+v 878
+v 878
+v 878
+v 3566
+v 3566
+v 3566
+v 3566
+v 1702
+v 1702
+v 8764
+v 8766
+v 8764
+v 8766
+v 8543
+v 8900
+v 8638
+v 8639
+v 4761
+v 4761
+v 4761
+v 9424
+v 9424
+v 9424
+v 9424
+v 8257
+v 8257
+v 8257
+v 8257
+v 8686
+v 9262
+v 9262
+v 9381
+v 9316
+v 9316
+v 8339
+v 9361
+v 9435
+v 9433
+v 9433
+v 9433
+v 9433
+v 7886
+v 7888
+v 7289
+v 8312
+v 978
+v 978
+v 9401
+v 9401
+v 8540
+v 6123
+v 6123
+v 6123
+v 6123
+v 6123
+v 6123
+v 6123
+v 6123
+v 6123
+v 8214
+v 884
+v 884
+v 590
+v 590
+v 590
+v 590
+v 590
+v 590
+v 9450
+v 8834
+v 7100
+v 7101
+v 7103
+v 7100
+v 7101
+v 7103
+v 7100
+v 7101
+v 7103
+v 6150
+v 6151
+v 9442
+v 6153
+v 6154
+v 9253
+v 7935
+v 9229
+v 9229
+v 9229
+v 6160
+v 9418
+v 8098
+v 8098
+v 8098
+v 8098
+v 9341
+v 9420
+v 1048
+v 1048
+v 1048
+v 1048
+v 1048
+v 1048
+v 1048
+v 1048
+v 1048
+v 1048
+v 8438
+v 8439
+v 4080
+v 4080
+v 4080
+v 4080
+v 4080
+v 4080
+v 8164
+v 8165
+v 9421
+v 8164
+v 8165
+v 9421
+v 8164
+v 8165
+v 9421
+v 8164
+v 8165
+v 9421
+v 9345
+v 9389
+v 9426
+v 8992
+v 8993
+v 9445
+v 8992
+v 8993
+v 9445
+v 6207
+v 9311
+v 9029
+v 1715
+v 1715
+v 1715
+v 9019
+v 8325
+v 8077
+v 8077
+v 9374
+v 8642
+v 8642
+v 8642
+v 8642
+v 8642
+v 8642
+v 8642
+v 8642
+v 9349
+v 9349
+v 6228
+v 6229
+v 8052
+v 9355
+v 9355
+v 1562
+v 1562
+v 1562
+v 1562
+v 8569
+v 8569
+v 8569
+v 8569
+v 8569
+v 8569
+v 7685
+v 9400
+v 6246
+v 6246
+v 6246
+v 6246
+v 7851
+v 7852
+v 7851
+v 7852
+v 7969
+v 7969
+v 9344
+v 9344
+v 4573
+v 4573
+v 8442
+v 7218
+v 7218
+v 3815
+v 3815
+v 3815
+v 3815
+v 3815
+v 3815
+v 3815
+v 3815
+v 3815
+v 3815
+v 3815
+v 3815
+v 3815
+v 3815
+v 3815
+v 6277
+v 9460
+v 9215
+v 9215
+v 2119
+v 2119
+v 2119
+v 1225
+v 1225
+v 1225
+v 1225
+v 1225
+v 1225
+v 1225
+v 1225
+v 1225
+v 9086
+v 9451
+v 9451
+v 4238
+v 4238
+v 4238
+v 4238
+v 8310
+v 1203
+v 1203
+v 1203
+v 1203
+v 1203
+v 1203
+v 1203
+v 1203
+v 1203
+v 1203
+v 1203
+v 1203
+v 1203
+v 1203
+v 1203
+v 1203
+v 8290
+v 8291
+v 6319
+v 6320
+v 6321
+v 6322
+v 6323
+v 8602
+v 3177
+v 3177
+v 8405
+v 8405
+v 9160
+v 9160
+v 2271
+v 2271
+v 2271
+v 2271
+v 6335
+v 6335
+v 6337
+v 6337
+v 6343
+v 6343
+v 6343
+v 6343
+v 6343
+v 6344
+v 6344
+v 6344
+v 6344
+v 6344
+v 6349
+v 6349
+v 6349
+v 6349
+v 6349
+v 6354
+v 6354
+v 6354
+v 6354
+v 6354
+v 6359
+v 6359
+v 6359
+v 6359
+v 6359
+v 9494
+v 9494
+v 4379
+v 4379
+v 4379
+v 4379
+v 4379
+v 4379
+v 9481
+v 9003
+v 9003
+v 2211
+v 2211
+v 2211
+v 6378
+v 6378
+v 6380
+v 6380
+v 9394
+v 9385
+v 9227
+v 9227
+v 9227
+v 3100
+v 3100
+v 3100
+v 3100
+v 3100
+v 3100
+v 3100
+v 3100
+v 3100
+v 3100
+v 3100
+v 3100
+v 8624
+v 8624
+v 8624
+v 8624
+v 7779
+v 9452
+v 7779
+v 9452
+v 7779
+v 9452
+v 7779
+v 9452
+v 9214
+v 6412
+v 6412
+v 6412
+v 6415
+v 6415
+v 6415
+v 8369
+v 9088
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 9022
+v 8128
+v 8131
+v 8134
+v 8128
+v 8131
+v 8134
+v 8785
+v 8786
+v 8787
+v 2196
+v 2196
+v 1389
+v 1389
+v 9164
+v 9164
+v 9164
+v 6462
+v 9161
+v 9467
+v 9467
+v 673
+v 673
+v 8968
+v 8973
+v 8968
+v 8973
+v 741
+v 741
+v 8886
+v 8888
+v 7114
+v 7114
+v 9466
+v 9466
+v 9354
+v 9432
+v 9354
+v 9432
+v 9354
+v 9432
+v 9354
+v 9432
+v 6490
+v 6490
+v 6490
+v 6491
+v 6491
+v 6491
+v 8691
+v 8692
+v 8695
+v 8698
+v 8701
+v 8691
+v 8692
+v 8695
+v 8698
+v 8701
+v 8691
+v 8692
+v 8695
+v 8698
+v 8701
+v 8691
+v 8692
+v 8695
+v 8698
+v 8701
+v 8209
+v 7688
+v 9056
+v 8113
+v 8114
+v 8113
+v 8114
+v 6521
+v 6522
+v 9407
+v 4088
+v 4088
+v 4088
+v 4088
+v 4088
+v 4088
+v 4088
+v 4088
+v 9358
+v 9358
+v 9336
+v 8352
+v 9340
+v 9396
+v 5490
+v 5490
+v 5490
+v 5490
+v 9171
+v 9171
+v 9171
+v 9049
+v 9346
+v 145
+v 145
+v 145
+v 145
+v 145
+v 145
+v 145
+v 145
+v 145
+v 145
+v 145
+v 145
+v 9186
+v 5143
+v 5143
+v 5143
+v 5143
+v 5143
+v 5143
+v 5143
+v 5143
+v 5143
+v 5143
+v 5143
+v 5143
+v 8303
+v 8349
+v 8349
+v 8349
+v 8349
+v 9448
+v 7221
+v 7222
+v 6580
+v 6580
+v 6580
+v 6580
+v 6584
+v 6584
+v 6584
+v 6584
+v 6588
+v 6588
+v 6588
+v 6588
+v 9373
+v 8846
+v 8794
+v 8794
+v 6596
+v 6596
+v 8780
+v 8780
+v 8745
+v 9496
+v 7795
+v 9104
+v 9104
+v 6607
+v 6607
+v 6607
+v 6608
+v 6608
+v 6608
+v 9223
+v 9223
+v 8683
+v 8684
+v 8685
+v 8683
+v 8684
+v 8685
+v 8796
+v 8796
+v 6622
+v 6622
+v 6623
+v 6623
+v 2072
+v 2072
+v 353
+v 353
+v 353
+v 353
+v 9147
+v 9147
+v 6633
+v 7965
+v 9398
+v 9398
+v 6637
+v 8662
+v 5303
+v 5303
+v 5303
+v 5303
+v 5303
+v 5303
+v 6646
+v 6646
+v 6647
+v 6647
+v 6649
+v 6649
+v 4106
+v 4106
+v 8171
+v 8172
+v 9430
+v 3054
+v 3054
+v 7684
+v 8621
+v 8622
+v 8623
+v 8621
+v 8622
+v 8623
+v 2865
+v 2865
+v 9167
+v 9169
+v 9167
+v 9169
+v 9417
+v 9417
+v 9277
+v 9221
+v 9475
+v 8606
+v 8607
+v 2462
+v 2462
+v 8264
+v 8264
+v 6682
+v 8741
+v 6686
+v 6686
+v 6686
+v 6687
+v 6687
+v 6687
+v 6690
+v 6690
+v 6690
+v 6696
+v 6696
+v 6696
+v 6696
+v 6697
+v 6697
+v 6697
+v 6697
+v 6701
+v 6701
+v 6701
+v 6701
+v 6705
+v 6705
+v 6705
+v 6705
+v 6709
+v 6709
+v 6709
+v 6709
+v 6713
+v 6713
+v 6713
+v 6713
+v 1675
+v 1675
+v 1675
+v 1675
+v 1675
+v 1675
+v 1675
+v 1675
+v 1675
+v 1675
+v 1675
+v 1675
+v 1675
+v 1675
+v 1675
+v 1675
+v 1675
+v 1675
+v 1675
+v 1675
+v 1675
+v 1675
+v 1675
+v 1675
+v 9434
+v 9434
+v 9035
+v 9035
+v 7834
+v 7835
+v 7836
+v 7834
+v 7835
+v 7836
+v 9410
+v 9317
+v 9352
+v 9353
+v 9388
+v 2174
+v 2174
+v 8750
+v 8750
+v 8750
+v 8750
+v 9025
+v 9025
+v 8995
+v 8995
+v 9405
+v 8078
+v 8078
+v 8333
+v 8333
+v 8333
+v 652
+v 652
+v 5621
+v 5621
+v 8747
+v 8747
+v 8213
+v 6779
+v 6780
+v 9406
+v 9392
+v 6783
+v 6784
+v 8920
+v 7709
+v 2187
+v 2187
+v 8441
+v 8441
+v 4096
+v 4096
+v 442
+v 442
+v 9236
+v 9236
+v 686
+v 686
+v 686
+v 686
+v 8252
+v 8253
+v 8252
+v 8253
+v 6808
+v 6808
+v 6808
+v 6808
+v 6809
+v 6809
+v 6809
+v 6809
+v 6813
+v 6813
+v 6813
+v 6813
+v 6817
+v 6817
+v 6817
+v 6817
+v 6821
+v 6821
+v 6821
+v 6824
+v 6824
+v 6824
+v 6827
+v 6827
+v 6827
+v 6830
+v 6830
+v 6830
+v 6833
+v 6833
+v 6833
+v 6838
+v 6838
+v 6838
+v 6839
+v 6839
+v 6839
+v 6842
+v 6842
+v 6842
+v 9379
+v 9343
+v 8568
+v 8568
+v 8512
+v 8370
+v 8370
+v 9191
+v 6853
+v 8744
+v 7786
+v 7787
+v 7786
+v 7787
+v 7786
+v 7787
+v 8955
+v 8955
+v 8955
+v 8955
+v 6866
+v 6866
+v 6867
+v 6867
+v 6869
+v 8667
+v 2416
+v 2416
+v 2416
+v 2416
+v 1412
+v 4882
+v 4882
+v 4882
+v 4882
+v 4882
+v 4882
+v 4882
+v 4882
+v 4882
+v 4882
+v 4882
+v 4882
+v 4882
+v 4882
+v 4882
+v 4882
+v 8549
+v 8550
+v 9461
+v 9258
+v 9050
+v 9050
+v 8853
+v 8854
+v 8853
+v 8854
+v 9491
+v 9491
+v 8505
+v 6906
+v 6906
+v 6907
+v 6907
+v 9275
+v 692
+v 692
+v 8306
+v 6021
+v 6021
+v 6021
+v 9228
+v 9487
+v 8878
+v 9473
+v 8987
+v 9121
+v 8638
+v 8639
+v 9395
+v 8365
+v 8367
+v 8885
+v 8885
+v 6929
+v 6929
+v 9021
+v 9021
+v 8244
+v 9386
+v 9386
+v 9146
+v 9146
+v 8347
+v 8348
+v 9415
+v 8347
+v 8348
+v 9415
+v 4849
+v 4849
+v 4849
+v 4849
+v 4849
+v 4849
+v 4849
+v 4849
+v 4849
+v 4849
+v 6954
+v 8989
+v 1606
+v 1606
+v 1606
+v 1606
+v 1606
+v 1606
+v 1606
+v 1606
+v 1606
+v 1606
+v 1606
+v 1606
+v 6969
+v 6969
+v 6970
+v 6970
+v 1469
+v 1469
+v 1469
+v 1469
+v 9423
+v 9423
+v 9393
+v 8997
+v 8997
+v 8997
+v 9470
+v 9470
+v 9414
+v 9414
+v 9034
+v 9428
+v 9428
+v 6989
+v 8898
+v 1539
+v 1539
+v 1539
+v 1539
+v 1539
+v 1539
+v 9222
+v 9390
+v 7002
+v 7002
+v 7002
+v 7002
+v 7003
+v 7003
+v 7003
+v 7003
+v 7007
+v 7007
+v 7007
+v 7007
+v 7011
+v 7011
+v 7017
+v 7017
+v 7017
+v 7017
+v 7017
+v 7018
+v 7018
+v 7018
+v 7018
+v 7018
+v 7023
+v 7023
+v 7023
+v 7023
+v 7023
+v 7028
+v 7028
+v 7028
+v 7028
+v 7028
+v 7033
+v 9484
+v 9165
+v 9165
+v 7037
+v 9245
+v 8551
+v 8552
+v 9363
+v 9365
+v 9438
+v 9363
+v 9365
+v 9438
+v 9363
+v 9365
+v 9438
+v 8461
+v 8462
+v 8463
+v 8461
+v 8462
+v 8463
+v 7971
+v 7971
+v 4482
+v 4482
+v 4482
+v 4482
+v 9356
+v 9356
+v 9356
+v 9062
+v 5517
+v 5517
+v 5517
+v 5517
+v 5517
+v 5517
+v 5517
+v 5517
+v 5517
+v 5517
+v 7076
+v 7077
+v 7078
+v 8952
+v 9338
+v 8922
+v 8445
+v 7083
+v 7084
+v 7085
+v 7086
+v 8383
+v 7088
+v 7088
+v 7088
+v 7088
+v 7092
+v 9350
+v 549
+v 549
+v 9024
+v 9111
+v 9112
+v 7100
+v 7100
+v 7101
+v 7101
+v 7103
+v 7103
+v 8570
+v 8250
+v 9384
+v 9384
+v 1766
+v 1766
+v 1766
+v 1766
+v 1766
+v 1766
+v 7115
+v 7115
+v 7115
+v 7115
+v 8301
+v 183
+v 183
+v 183
+v 183
+v 9022
+v 9459
+v 9262
+v 9262
+v 9316
+v 9316
+v 7130
+v 7130
+v 7130
+v 8525
+v 9114
+v 9114
+v 7136
+v 7136
+v 7136
+v 7136
+v 7143
+v 7143
+v 7143
+v 7143
+v 7144
+v 7144
+v 7144
+v 7144
+v 9311
+v 9311
+v 9311
+v 8873
+v 9450
+v 8991
+v 8541
+v 8836
+v 8837
+v 3038
+v 3038
+v 3038
+v 3038
+v 3038
+v 3038
+v 3038
+v 3038
+v 7165
+v 7166
+v 8582
+v 3337
+v 3337
+v 7171
+v 7171
+v 7172
+v 7172
+v 7174
+v 7174
+v 7176
+v 7176
+v 7913
+v 7913
+v 9308
+v 9308
+v 7182
+v 7182
+v 8612
+v 8612
+v 9462
+v 8360
+v 8360
+v 8360
+v 9399
+v 9399
+v 9469
+v 9492
+v 7194
+v 7195
+v 9413
+v 7197
+v 7198
+v 7199
+v 7955
+v 9493
+v 1760
+v 1760
+v 1760
+v 1760
+v 1760
+v 1760
+v 9212
+v 1516
+v 1516
+v 1516
+v 1516
+v 1516
+v 1516
+v 1516
+v 1516
+v 1516
+v 7218
+v 7218
+v 8545
+v 8249
+v 7223
+v 7223
+v 7224
+v 7224
+v 7226
+v 7226
+v 8838
+v 8838
+v 9347
+v 9115
+v 9115
+v 9427
+v 1843
+v 1843
+v 1843
+v 9404
+v 9397
+v 9457
+v 276
+v 276
+v 276
+v 276
+v 8848
+v 8848
+v 8776
+v 8907
+v 9320
+v 9320
+v 9320
+v 9320
+v 1048
+v 1048
+v 9048
+v 9342
+v 9197
+v 9197
+v 9454
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 8553
+v 8875
+v 9422
+v 9383
+v 9383
+v 4608
+v 4608
+v 4608
+v 4608
+v 4608
+v 4608
+v 9084
+v 7302
+v 7302
+v 7303
+v 7303
+v 9108
+v 9253
+v 9253
+v 9253
+v 5002
+v 5002
+v 7311
+v 7311
+v 7311
+v 7311
+v 7311
+v 7311
+v 7317
+v 7318
+v 9231
+v 442
+v 442
+v 442
+v 442
+v 442
+v 442
+v 442
+v 442
+v 9206
+v 9020
+v 8874
+v 8874
+v 9374
+v 9238
+v 7335
+v 7335
+v 7336
+v 7336
+v 7338
+v 7338
+v 7340
+v 7340
+v 8510
+v 8510
+v 8323
+v 8324
+v 9468
+v 9475
+v 9475
+v 9110
+v 8222
+v 8223
+v 9408
+v 9409
+v 2507
+v 2507
+v 2507
+v 590
+v 590
+v 590
+v 590
+v 8513
+v 8515
+v 8517
+v 8519
+v 8521
+v 8513
+v 8515
+v 8517
+v 8519
+v 8521
+v 8513
+v 8515
+v 8517
+v 8519
+v 8521
+v 8513
+v 8515
+v 8517
+v 8519
+v 8521
+v 8567
+v 3030
+v 3030
+v 3030
+v 3030
+v 8524
+v 8988
+v 8988
+v 8988
+v 8809
+v 8809
+v 9089
+v 9089
+v 9089
+v 9089
+v 7396
+v 8443
+v 8539
+v 7399
+v 7400
+v 8835
+v 9456
+v 9354
+v 9432
+v 9412
+v 9412
+v 9412
+v 9412
+v 9458
+v 9261
+v 836
+v 836
+v 836
+v 836
+v 836
+v 836
+v 836
+v 836
+v 836
+v 836
+v 836
+v 836
+v 1017
+v 1017
+v 8294
+v 8294
+v 4273
+v 4273
+v 9248
+v 9248
+v 9380
+v 610
+v 610
+v 610
+v 9036
+v 9037
+v 7437
+v 7437
+v 7437
+v 7437
+v 9401
+v 9401
+v 541
+v 541
+v 541
+v 541
+v 847
+v 847
+v 847
+v 8832
+v 4719
+v 4719
+v 6491
+v 6491
+v 6491
+v 8437
+v 8913
+v 9441
+v 9441
+v 9441
+v 7461
+v 7462
+v 7463
+v 7464
+v 9436
+v 9357
+v 7467
+v 7468
+v 9027
+v 9372
+v 9467
+v 7472
+v 7472
+v 7474
+v 7474
+v 7476
+v 7476
+v 7478
+v 7478
+v 9355
+v 9355
+v 9403
+v 9070
+v 9070
+v 8768
+v 9110
+v 6380
+v 6380
+v 8558
+v 8560
+v 9387
+v 2865
+v 2691
+v 2691
+v 2691
+v 2691
+v 2691
+v 2691
+v 2691
+v 2691
+v 2691
+v 9378
+v 9378
+v 4949
+v 4949
+v 4949
+v 8817
+v 8817
+v 8817
+v 4392
+v 4392
+v 4392
+v 4392
+v 9205
+v 9205
+v 9205
+v 9035
+v 9035
+v 9035
+v 9035
+v 9465
+v 7522
+v 7523
+v 9463
+v 8478
+v 7526
+v 7526
+v 7528
+v 7528
+v 7530
+v 7530
+v 9057
+v 9057
+v 1440
+v 1440
+v 1440
+v 1440
+v 1440
+v 1440
+v 1440
+v 1440
+v 1440
+v 317
+v 317
+v 317
+v 317
+v 317
+v 317
+v 8962
+v 8962
+v 8962
+v 9102
+v 9102
+v 9011
+v 9012
+v 9013
+v 9011
+v 9012
+v 9013
+v 9011
+v 9012
+v 9013
+v 7655
+v 7657
+v 7659
+v 7661
+v 7655
+v 7657
+v 7659
+v 7661
+v 7655
+v 7657
+v 7659
+v 7661
+v 9086
+v 9086
+v 8164
+v 8165
+v 9421
+v 8164
+v 8165
+v 9421
+v 8164
+v 8165
+v 9421
+v 8164
+v 8165
+v 9421
+v 8164
+v 8165
+v 9421
+v 7592
+v 7592
+v 9171
+v 9171
+v 9171
+v 8371
+v 9158
+v 8479
+v 201
+v 201
+v 201
+v 201
+v 201
+v 201
+v 201
+v 201
+v 201
+v 201
+v 201
+v 201
+v 9287
+v 2808
+v 2808
+v 5667
+v 5667
+v 5667
+v 5667
+v 5667
+v 5667
+v 9381
+v 8749
+v 2894
+v 2894
+v 2894
+v 2894
+v 7627
+v 7628
+v 9444
+v 5740
+v 5740
+v 5740
+v 5740
+v 5740
+v 5740
+v 5740
+v 5740
+v 5740
+v 8584
+v 8584
+v 9191
+v 4096
+v 4096
+v 9418
+v 9478
+v 9499
+v 3599
+v 3599
+v 9367
+v 9368
+v 9369
+v 9439
+v 9440
+v 8778
+v 9341
+v 2298
+v 2298
+v 2298
+v 2298
+v 2298
+v 2298
+v 2298
+v 2298
+v 7664
+v 7664
+v 9307
+v 9443
+v 9443
+v 6246
+v 6246
+v 6246
+v 6246
+v 5631
+v 5631
+v 5631
+v 5631
+v 5631
+v 5631
+v 5631
+v 5631
+v 9097
+v 9097
+v 9097
+v 9482
+v 9348
+v 9497
+v 9249
+v 7688
+v 9056
+v 2936
+v 2936
+v 2936
+v 2936
+v 9161
+v 5901
+v 5901
+v 7697
+v 9486
+v 2611
+v 2611
+v 2611
+v 2611
+v 2611
+v 1351
+v 1351
+v 1351
+v 1351
+v 8908
+v 7709
+v 7709
+v 8785
+v 8786
+v 8787
+v 8785
+v 8786
+v 8787
+v 9054
+v 2066
+v 2066
+v 8910
+v 9498
+v 9236
+v 9448
+v 7724
+v 7724
+v 7726
+v 7726
+v 5396
+v 5396
+v 5396
+v 5396
+v 5396
+v 5396
+v 5396
+v 5396
+v 5396
+v 5396
+v 5396
+v 5396
+v 8919
+v 9480
+v 9489
+v 9480
+v 9489
+v 1898
+v 1898
+v 9429
+v 7750
+v 7750
+v 7750
+v 7751
+v 7751
+v 7751
+v 7754
+v 7754
+v 7754
+v 7757
+v 7757
+v 7759
+v 7759
+v 7761
+v 7761
+v 7763
+v 7763
+v 7765
+v 7765
+v 7769
+v 7769
+v 7769
+v 7770
+v 7770
+v 7770
+v 7773
+v 7773
+v 7773
+v 7776
+v 7776
+v 7776
+v 7779
+v 9452
+v 9311
+v 9311
+v 9076
+v 9077
+v 9076
+v 9077
+v 7788
+v 7788
+v 7789
+v 7789
+v 7791
+v 7791
+v 7793
+v 7793
+v 7795
+v 7795
+v 2196
+v 2196
+v 5705
+v 5705
+v 5705
+v 5705
+v 5705
+v 5705
+v 5705
+v 5705
+v 5705
+v 5705
+v 5705
+v 5705
+v 3100
+v 3100
+v 3100
+v 3100
+v 3629
+v 3629
+v 3629
+v 3629
+v 6036
+v 6036
+v 9100
+v 9278
+v 6817
+v 6817
+v 6817
+v 6817
+v 6817
+v 6817
+v 6817
+v 6817
+v 6817
+v 6817
+v 6817
+v 6817
+v 9400
+v 9400
+v 9400
+v 9028
+v 9028
+v 9028
+v 9028
+v 4672
+v 4672
+v 4573
+v 4573
+v 9386
+v 9343
+v 9343
+v 8663
+v 7851
+v 7851
+v 7852
+v 7852
+v 3574
+v 3574
+v 3574
+v 3574
+v 3810
+v 3810
+v 3810
+v 3810
+v 9485
+v 9485
+v 183
+v 183
+v 6713
+v 6713
+v 6713
+v 6713
+v 6713
+v 6713
+v 6713
+v 6713
+v 6713
+v 6713
+v 6713
+v 6713
+v 6713
+v 6713
+v 6713
+v 6713
+v 9207
+v 9207
+v 9207
+v 9207
+v 9025
+v 9049
+v 9346
+v 9049
+v 9346
+v 9106
+v 4406
+v 4406
+v 4406
+v 4406
+v 4406
+v 4406
+v 9491
+v 9491
+v 9491
+v 8923
+v 8923
+v 8923
+v 8923
+v 7905
+v 7905
+v 9219
+v 590
+v 590
+v 590
+v 590
+v 590
+v 590
+v 9221
+v 9455
+v 9455
+v 9455
+v 8573
+v 8573
+v 8570
+v 8570
+v 8570
+v 6907
+v 6907
+v 9372
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 2025
+v 9396
+v 9461
+v 9228
+v 9228
+v 1362
+v 1362
+v 1362
+v 1362
+v 1362
+v 1362
+v 1362
+v 1362
+v 9464
+v 9464
+v 9464
+v 9464
+v 9114
+v 9114
+v 8995
+v 7955
+v 7955
+v 7955
+v 7955
+v 7955
+v 9442
+v 2265
+v 2265
+v 2265
+v 4379
+v 4379
+v 9437
+v 8901
+v 8554
+v 8555
+v 9402
+v 9402
+v 9352
+v 9353
+v 9352
+v 9353
+v 2594
+v 2594
+v 2594
+v 2594
+v 2594
+v 2594
+v 2594
+v 2594
+v 2594
+v 9417
+v 9019
+v 9019
+v 7028
+v 7028
+v 7028
+v 7028
+v 7028
+v 3815
+v 3815
+v 3815
+v 3815
+v 3815
+v 3815
+v 3815
+v 3815
+v 3815
+v 3815
+v 3815
+v 3815
+v 3815
+v 3815
+v 3815
+v 9446
+v 2271
+v 2271
+v 6359
+v 6359
+v 6359
+v 6359
+v 6359
+v 6359
+v 6359
+v 6359
+v 6359
+v 6359
+v 6359
+v 6359
+v 6359
+v 6359
+v 6359
+v 6359
+v 6359
+v 6359
+v 6359
+v 6359
+v 6359
+v 6359
+v 6359
+v 6359
+v 6359
+v 5052
+v 5052
+v 5052
+v 5052
+v 5762
+v 9216
+v 8612
+v 8612
+v 8612
+v 8612
+v 1760
+v 1760
+v 1760
+v 3804
+v 3804
+v 3804
+v 3804
+v 9164
+v 8855
+v 8856
+v 8855
+v 8856
+v 8855
+v 8856
+v 1412
+v 1412
+v 8062
+v 8062
+v 8062
+v 8065
+v 8065
+v 8065
+v 8068
+v 8068
+v 8068
+v 9262
+v 7176
+v 7176
+v 9167
+v 9169
+v 2072
+v 2072
+v 8078
+v 8078
+v 4041
+v 4041
+v 4041
+v 4041
+v 4041
+v 4041
+v 9220
+v 9220
+v 9220
+v 9220
+v 9220
+v 9220
+v 9231
+v 9111
+v 9112
+v 9096
+v 7136
+v 7136
+v 8098
+v 8098
+v 8098
+v 8098
+v 8098
+v 8098
+v 8098
+v 8098
+v 8098
+v 8098
+v 8098
+v 8098
+v 9411
+v 9422
+v 9422
+v 9360
+v 9433
+v 9433
+v 8116
+v 8116
+v 8118
+v 8118
+v 8120
+v 8120
+v 8122
+v 8122
+v 6123
+v 6123
+v 6123
+v 9256
+v 8128
+v 8128
+v 8128
+v 8131
+v 8131
+v 8131
+v 8134
+v 8134
+v 8134
+v 2315
+v 2315
+v 2315
+v 7303
+v 7303
+v 7303
+v 7303
+v 7303
+v 7303
+v 1225
+v 1225
+v 1225
+v 1225
+v 1225
+v 1225
+v 9419
+v 9419
+v 9419
+v 9180
+v 9181
+v 9476
+v 9477
+v 9488
+v 9476
+v 9477
+v 9488
+v 9471
+v 8164
+v 8165
+v 9421
+v 9109
+v 9447
+v 9472
+v 9426
+v 9426
+v 9494
+v 9494
+v 9407
+v 9395
+v 9384
+v 4700
+v 4700
+v 4700
+v 4700
+v 8181
+v 8181
+v 8181
+v 9137
+v 8185
+v 8185
+v 8185
+v 8185
+v 8185
+v 8185
+v 8185
+v 8185
+v 8185
+v 8185
+v 8185
+v 8185
+v 1734
+v 1734
+v 1734
+v 1734
+v 9088
+v 9466
+v 9466
+v 8638
+v 8639
+v 9035
+v 9035
+v 9192
+v 9453
+v 2187
+v 6842
+v 6842
+v 6842
+v 9481
+v 9280
+v 9280
+v 9179
+v 9354
+v 9432
+v 8222
+v 8222
+v 8222
+v 8223
+v 8223
+v 8223
+v 8226
+v 8226
+v 8226
+v 4238
+v 4238
+v 4238
+v 4238
+v 9484
+v 9484
+v 6415
+v 6415
+v 6415
+v 6415
+v 6415
+v 6415
+v 6415
+v 6415
+v 6415
+v 9104
+v 9359
+v 9479
+v 9490
+v 9479
+v 9490
+v 9379
+v 9398
+v 9371
+v 6337
+v 6337
+v 6337
+v 6337
+v 8257
+v 8257
+v 9364
+v 2487
+v 2487
+v 2487
+v 2487
+v 8264
+v 8264
+v 6867
+v 6867
+v 9383
+v 9356
+v 9460
+v 8776
+v 8776
+v 8776
+v 9363
+v 9365
+v 9438
+v 9363
+v 9365
+v 9438
+v 8904
+v 9344
+v 9344
+v 5143
+v 5143
+v 5143
+v 5143
+v 5143
+v 5143
+v 5143
+v 5143
+v 9416
+v 9416
+v 9063
+v 8294
+v 8294
+v 8294
+v 8294
+v 9393
+v 9377
+v 9391
+v 9338
+v 9431
+v 8303
+v 8303
+v 9406
+v 9406
+v 9389
+v 9405
+v 2259
+v 2259
+v 4106
+v 4106
+v 9420
+v 9030
+v 9197
+v 9197
+v 9197
+v 9017
+v 9017
+v 9468
+v 9468
+v 296
+v 296
+v 9227
+v 9227
+v 9399
+v 9465
+v 9465
+v 9474
+v 9474
+v 7664
+v 7664
+v 8333
+v 8333
+v 8333
+v 8333
+v 8333
+v 8333
+v 9387
+v 1606
+v 1606
+v 1606
+v 7709
+v 7709
+v 7709
+v 7709
+v 8347
+v 8348
+v 9415
+v 1843
+v 1843
+v 1843
+v 9366
+v 2462
+v 2462
+v 2462
+v 2462
+v 9443
+v 9443
+v 9020
+v 9449
+v 9449
+v 9449
+v 9230
+v 9230
+v 9349
+v 9349
+v 9349
+v 9349
+v 9245
+v 8371
+v 8371
+v 9355
+v 9342
+v 7726
+v 7726
+v 7726
+v 7726
+v 7726
+v 7726
+v 7726
+v 7726
+v 9374
+v 2808
+v 7007
+v 7007
+v 7007
+v 7007
+v 7007
+v 7007
+v 7007
+v 7007
+v 8908
+v 836
+v 836
+v 836
+v 836
+v 836
+v 836
+v 836
+v 836
+v 9376
+v 9376
+v 9376
+v 9376
+v 7592
+v 9414
+v 9414
+v 9059
+v 8410
+v 8410
+v 4639
+v 4639
+v 4639
+v 4639
+v 4639
+v 4639
+v 4639
+v 4639
+v 4639
+v 4639
+v 4639
+v 4639
+v 4639
+v 4639
+v 4639
+v 4639
+v 4639
+v 4639
+v 4639
+v 4639
+v 4639
+v 4639
+v 4639
+v 4639
+v 4639
+v 9261
+v 9362
+v 9473
+v 9473
+v 8441
+v 8441
+v 9315
+v 878
+v 878
+v 9277
+v 9287
+v 9287
+v 9171
+v 9171
+v 9171
+v 9171
+v 9171
+v 9171
+v 9171
+v 9171
+v 9171
+v 9171
+v 9171
+v 9171
+v 9347
+v 6817
+v 6817
+v 6817
+v 6817
+v 6817
+v 6817
+v 6817
+v 6817
+v 6817
+v 6817
+v 6817
+v 6817
+v 2894
+v 2894
+v 8995
+v 8995
+v 8478
+v 8478
+v 9469
+v 9492
+v 4882
+v 4882
+v 4882
+v 4882
+v 4882
+v 4882
+v 4882
+v 4882
+v 3629
+v 3629
+v 9470
+v 9470
+v 8992
+v 8993
+v 9445
+v 8992
+v 8993
+v 9445
+v 8992
+v 8993
+v 9445
+v 4555
+v 4555
+v 4555
+v 9339
+v 4273
+v 4273
+v 4273
+v 4273
+v 8511
+v 8511
+v 9317
+v 9408
+v 9409
+v 9408
+v 9409
+v 9408
+v 9409
+v 9408
+v 9409
+v 9408
+v 9409
+v 9357
+v 9373
+v 749
+v 749
+v 9229
+v 9229
+v 4608
+v 4608
+v 4608
+v 4608
+v 4608
+v 4608
+v 4608
+v 4608
+v 4608
+v 8539
+v 8539
+v 8909
+v 786
+v 786
+v 9401
+v 9401
+v 9350
+v 9340
+v 9340
+v 9340
+v 8551
+v 8551
+v 8552
+v 8552
+v 9375
+v 9475
+v 9475
+v 9496
+v 8558
+v 8558
+v 8560
+v 8560
+v 741
+v 741
+v 741
+v 741
+v 741
+v 741
+v 9459
+v 9027
+v 8570
+v 8570
+v 8570
+v 9336
+v 9358
+v 7176
+v 7176
+v 9390
+v 9309
+v 9378
+v 9378
+v 9378
+v 9378
+v 317
+v 317
+v 9428
+v 2055
+v 2055
+v 2055
+v 2055
+v 2055
+v 2055
+v 2055
+v 2055
+v 2055
+v 2055
+v 2055
+v 2055
+v 2055
+v 2055
+v 2055
+v 7530
+v 7530
+v 6713
+v 6713
+v 6713
+v 6713
+v 9413
+v 9413
+v 9410
+v 8612
+v 8612
+v 8612
+v 8612
+v 8612
+v 8612
+v 8612
+v 8612
+v 8612
+v 8612
+v 8612
+v 8612
+v 9034
+v 9034
+v 9034
+v 5447
+v 5447
+v 5447
+v 5447
+v 5447
+v 5447
+v 1898
+v 1898
+v 9345
+v 9345
+v 8638
+v 8638
+v 8638
+v 8638
+v 8639
+v 8639
+v 8639
+v 8639
+v 7955
+v 7955
+v 7955
+v 7955
+v 7955
+v 7955
+v 7955
+v 7955
+v 7955
+v 7955
+v 4310
+v 4310
+v 4310
+v 4310
+v 4310
+v 4310
+v 9412
+v 9412
+v 686
+v 686
+v 9471
+v 9388
+v 7664
+v 9036
+v 9037
+v 8668
+v 8668
+v 2271
+v 2271
+v 2271
+v 2271
+v 3815
+v 3815
+v 3815
+v 3815
+v 3815
+v 3815
+v 3815
+v 3815
+v 3815
+v 3815
+v 2507
+v 2507
+v 2507
+v 6649
+v 6649
+v 8691
+v 8691
+v 8691
+v 8692
+v 8692
+v 8692
+v 8695
+v 8695
+v 8695
+v 8698
+v 8698
+v 8698
+v 8701
+v 8701
+v 8701
+v 7905
+v 7905
+v 8706
+v 8706
+v 8706
+v 8709
+v 8709
+v 8709
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 2142
+v 9486
+v 9463
+v 9462
+v 9418
+v 7103
+v 7103
+v 9487
+v 9487
+v 8750
+v 8750
+v 5667
+v 5667
+v 5667
+v 5667
+v 5667
+v 5667
+v 5667
+v 5667
+v 5667
+v 9436
+v 9104
+v 9104
+v 9104
+v 6907
+v 6907
+v 6907
+v 6907
+v 5621
+v 9434
+v 9434
+v 9500
+v 9406
+v 9406
+v 9406
+v 8776
+v 8776
+v 8776
+v 7793
+v 7793
+v 9003
+v 9003
+v 9003
+v 9003
+v 9448
+v 2691
+v 2691
+v 2691
+v 2691
+v 2691
+v 2691
+v 2691
+v 2691
+v 2691
+v 652
+v 652
+v 9491
+v 9109
+v 9447
+v 9109
+v 9447
+v 9109
+v 9447
+v 9109
+v 9447
+v 9109
+v 9447
+v 9109
+v 9447
+v 7795
+v 7795
+v 7795
+v 7795
+v 9417
+v 9417
+v 9451
+v 9451
+v 8818
+v 8818
+v 8818
+v 8818
+v 8818
+v 8818
+v 4672
+v 4672
+v 4672
+v 4672
+v 9485
+v 9485
+v 9364
+v 9364
+v 9364
+v 7759
+v 7759
+v 9405
+v 9421
+v 9374
+v 9374
+v 4700
+v 4700
+v 1606
+v 1606
+v 1606
+v 1606
+v 1606
+v 1606
+v 9480
+v 9489
+v 9455
+v 7226
+v 7226
+v 7226
+v 7226
+v 8855
+v 8855
+v 8856
+v 8856
+v 9433
+v 9433
+v 9433
+v 9433
+v 6491
+v 6491
+v 6491
+v 6491
+v 6491
+v 6491
+v 6491
+v 6491
+v 6491
+v 6491
+v 6491
+v 6491
+v 9341
+v 9356
+v 9474
+v 7182
+v 7182
+v 7754
+v 7754
+v 7754
+v 9444
+v 9444
+v 9444
+v 9444
+v 8886
+v 8886
+v 8888
+v 8888
+v 2025
+v 2025
+v 2025
+v 2025
+v 9370
+v 836
+v 836
+v 836
+v 836
+v 610
+v 9380
+v 9338
+v 9344
+v 9344
+v 9493
+v 9483
+v 9495
+v 8907
+v 8907
+v 9427
+v 8910
+v 9498
+v 4041
+v 4041
+v 9404
+v 6588
+v 6588
+v 6588
+v 6588
+v 8919
+v 8919
+v 3804
+v 3804
+v 3337
+v 7028
+v 7028
+v 7028
+v 7028
+v 7028
+v 201
+v 201
+v 201
+v 201
+v 201
+v 201
+v 201
+v 201
+v 201
+v 201
+v 201
+v 201
+v 201
+v 201
+v 201
+v 201
+v 1048
+v 1048
+v 1048
+v 1048
+v 1048
+v 1048
+v 1048
+v 1048
+v 1225
+v 1225
+v 1225
+v 6359
+v 6359
+v 6359
+v 6359
+v 6359
+v 7136
+v 7136
+v 3030
+v 3030
+v 3030
+v 3030
+v 3030
+v 3030
+v 4639
+v 4639
+v 4639
+v 4639
+v 4639
+v 4639
+v 4639
+v 4639
+v 4639
+v 4639
+v 9456
+v 9456
+v 4719
+v 4719
+v 4719
+v 4719
+v 4719
+v 4719
+v 8987
+v 8987
+v 2066
+v 4273
+v 4273
+v 8992
+v 8993
+v 9445
+v 8995
+v 8995
+v 8995
+v 1362
+v 1362
+v 1362
+v 1362
+v 1362
+v 1362
+v 9351
+v 9351
+v 8257
+v 8257
+v 8257
+v 8257
+v 8257
+v 8257
+v 6036
+v 6036
+v 6036
+v 6036
+v 6036
+v 6036
+v 1412
+v 1412
+v 9020
+v 9020
+v 9458
+v 1389
+v 1389
+v 2072
+v 9450
+v 9027
+v 9027
+v 9029
+v 9029
+v 6246
+v 6246
+v 7709
+v 7709
+v 9035
+v 9035
+v 5052
+v 5052
+v 5052
+v 5052
+v 5052
+v 5052
+v 5052
+v 5052
+v 5901
+v 5901
+v 5901
+v 5901
+v 9049
+v 9346
+v 7478
+v 7478
+v 7478
+v 7478
+v 9397
+v 9457
+v 4106
+v 9371
+v 9371
+v 9363
+v 9365
+v 9438
+v 9424
+v 9395
+v 6817
+v 6817
+v 6817
+v 6817
+v 6817
+v 6817
+v 6842
+v 6842
+v 6842
+v 6842
+v 6842
+v 6842
+v 9443
+v 9443
+v 8226
+v 8226
+v 8226
+v 8226
+v 8226
+v 8226
+v 9464
+v 9464
+v 590
+v 590
+v 9482
+v 9414
+v 1760
+v 1760
+v 1760
+v 1760
+v 1760
+v 1760
+v 9343
+v 8098
+v 8098
+v 8098
+v 4392
+v 4392
+v 9396
+v 9104
+v 9104
+v 9106
+v 9106
+v 9106
+v 9109
+v 9447
+v 9454
+v 9497
+v 9497
+v 3629
+v 549
+v 5490
+v 5490
+v 8560
+v 8560
+v 8560
+v 8560
+v 9473
+v 9339
+v 9339
+v 6415
+v 6415
+v 6415
+v 6415
+v 6415
+v 6415
+v 6415
+v 6415
+v 6415
+v 6415
+v 6415
+v 6415
+v 9137
+v 9137
+v 8303
+v 8303
+v 8303
+v 8303
+v 8303
+v 8303
+v 8303
+v 8303
+v 9415
+v 9402
+v 9354
+v 9432
+v 9354
+v 9432
+v 8612
+v 8612
+v 8612
+v 8612
+v 8612
+v 8612
+v 9469
+v 9492
+v 8078
+v 2487
+v 2487
+v 9164
+v 9164
+v 8294
+v 8294
+v 9478
+v 9499
+v 9478
+v 9499
+v 541
+v 541
+v 541
+v 541
+v 541
+v 541
+v 786
+v 786
+v 2315
+v 1440
+v 1440
+v 1440
+v 1440
+v 1440
+v 1440
+v 7955
+v 7955
+v 7955
+v 7955
+v 7955
+v 9192
+v 9453
+v 8441
+v 8441
+v 6867
+v 6867
+v 9347
+v 8333
+v 8333
+v 8333
+v 8333
+v 8333
+v 8333
+v 9424
+v 9428
+v 9207
+v 9207
+v 2808
+v 2808
+v 2808
+v 2808
+v 7726
+v 7726
+v 9466
+v 9398
+v 9476
+v 9477
+v 9488
+v 9220
+v 9220
+v 9376
+v 9448
+v 9423
+v 9423
+v 9423
+v 9423
+v 9228
+v 9228
+v 9230
+v 9230
+v 9420
+v 7795
+v 7795
+v 7795
+v 7795
+v 9479
+v 9490
+v 9384
+v 741
+v 741
+v 741
+v 741
+v 741
+v 741
+v 5447
+v 5447
+v 5447
+v 9362
+v 9359
+v 9375
+v 9375
+v 5762
+v 9481
+v 9481
+v 9481
+v 4406
+v 4406
+v 9350
+v 9390
+v 9390
+v 9425
+v 9449
+v 6713
+v 6713
+v 6713
+v 6713
+v 6713
+v 6713
+v 6713
+v 6713
+v 6713
+v 6713
+v 6713
+v 6713
+v 884
+v 884
+v 9372
+v 9344
+v 9344
+v 8668
+v 8668
+v 8552
+v 8552
+v 8552
+v 8552
+v 9287
+v 9287
+v 9287
+v 9287
+v 9287
+v 7144
+v 7144
+v 7144
+v 7144
+v 7144
+v 7144
+v 7144
+v 7144
+v 7144
+v 7144
+v 7144
+v 7144
+v 4310
+v 4310
+v 4310
+v 4310
+v 9403
+v 9431
+v 9422
+v 3804
+v 4106
+v 9383
+v 9383
+v 9383
+v 9316
+v 9316
+v 9341
+v 9366
+v 9366
+v 1606
+v 1606
+v 1606
+v 1606
+v 2507
+v 2507
+v 2507
+v 2507
+v 2507
+v 2507
+v 2507
+v 2507
+v 2507
+v 2507
+v 2507
+v 2507
+v 9380
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+c
+d 255 1 0 0 1
+c
+d 254 1 0 0 1
+c
+d 251 1 0 0 1
+c
+d 251 1 0 0 1
+c
+d 254 1 0 0 1
+c
+d 255 1 0 0 1
+c
+d 256 1 0 0 1
+c
+d 251 1 0 0 1
+c
+d 254 1 0 0 1
+c
+d 255 1 0 0 1
+c
+d 256 1 0 0 1
+c
+d 255 1 0 0 1
+c
+d 255 1 0 0 1
+c
+d 252 1 0 0 1
+c
+d 251 3 0 0 1
+c
+d 251 3 0 0 1
+c
+d 252 2 0 0 1
+c
+d 251 3 0 0 0
+c
+d 252 2 0 0 0
+c
+d 276 1 0 0 0
+c
+d 750 1 0 0 0
+c
+d 284 1 0 0 0
+c
+d 285 1 0 0 0
+c
+d 747 3 0 0 0
+c
+d 285 3 0 0 0
+c
+d 253 1 0 0 1
+c
+d 252 1 0 0 1
+c
+d 251 2 0 0 1
+c
+d 251 2 0 0 1
+c
+d 252 1 0 0 1
+c
+d 253 1 0 0 1
+c
+d 254 1 0 0 1
+c
+d 251 2 0 0 1
+c
+d 252 1 0 0 1
+c
+d 253 1 0 0 1
+c
+d 254 1 0 0 1
+c
+d 253 1 0 0 1
+c
+d 253 1 0 0 1
+c
+d 398 2 0 0 0
+c
+d 399 2 0 0 0
+c
+d 676 1 0 0 1
+c
+d 675 1 0 0 1
+c
+d 674 1 0 0 1
+c
+d 674 1 0 0 1
+c
+d 675 1 0 0 1
+c
+d 676 1 0 0 1
+c
+d 679 1 0 0 1
+c
+d 674 1 0 0 1
+c
+d 675 1 0 0 1
+c
+d 676 1 0 0 1
+c
+d 679 1 0 0 1
+c
+d 676 1 0 0 1
+c
+d 676 1 0 0 1
+c
+d 247 2 0 0 1
+c
+d 247 2 0 0 1
+c
+d 675 1 0 0 1
+c
+d 675 1 0 0 1
+c
+d 257 1 0 0 1
+c
+d 255 1 0 0 1
+c
+d 254 2 0 0 0
+c
+d 257 1 0 0 1
+c
+d 253 1 0 0 1
+c
+d 252 1 0 1 0
+c
+d 506 1 0 0 0
+c
+d 727 1 0 0 0
+c
+d 304 1 0 0 1
+c
+d 305 5 0 0 1
+c
+d 315 1 0 1 1
+c
+d 306 1 0 0 1
+c
+d 304 1 0 0 1
+c
+d 305 6 0 0 1
+c
+d 306 1 0 0 1
+c
+d 315 1 0 0 1
+c
+d 304 1 0 0 0
+c
+d 305 6 0 0 0
+c
+d 306 1 0 0 0
+c
+d 315 1 0 0 0
+c
+d 306 3 0 0 0
+c
+d 307 3 0 0 0
+c
+d 313 1 0 0 0
+c
+d 314 1 0 0 0
+c
+d 276 1 0 0 0
+c
+d 749 1 0 0 0
+c
+d 351 1 0 0 1
+c
+d 355 1 0 0 1
+c
+d 349 1 0 0 0
+c
+d 256 1 0 0 1
+c
+d 252 1 0 0 1
+c
+d 251 1 0 0 0
+c
+d 427 3 0 0 1
+c
+d 427 4 0 0 0
+c
+d 446 1 0 1 0
+c
+d 651 1 0 0 0
+c
+d 452 2 0 0 0
+c
+d 257 1 0 0 1
+c
+d 256 1 0 0 1
+c
+d 252 2 0 0 0
+c
+d 275 3 0 0 0
+c
+d 581 1 0 0 1
+c
+d 176 1 0 0 0
+c
+d 298 3 0 0 0
+c
+d 522 3 0 0 1
+c
+d 704 1 0 0 0
+c
+d 444 3 0 0 1
+c
+d 107 2 1 0 0
+c
+d 322 1 0 0 1
+c
+d 321 1 0 0 1
+c
+d 319 1 0 0 0
+c
+d 195 1 0 0 1
+c
+d 357 1 0 0 1
+c
+d 39 2 0 0 1
+c
+d 39 2 0 0 1
+c
+d 195 2 0 0 1
+c
+d 357 1 0 0 1
+c
+d 39 2 0 0 1
+c
+d 195 2 0 0 1
+c
+d 357 1 0 0 1
+c
+d 558 2 0 2 0
+c
+d 626 2 0 0 1
+c
+d 615 1 0 0 1
+c
+d 187 1 0 0 0
+c
+d 717 3 1 0 0
+c
+d 736 4 0 0 0
+c
+d 675 2 0 0 1
+c
+d 674 1 0 0 0
+c
+d 752 2 0 0 1
+c
+d 752 3 0 0 0
+c
+d 328 1 0 0 1
+c
+d 434 1 0 1 1
+c
+d 425 1 0 0 1
+c
+d 328 1 0 0 1
+c
+d 425 1 0 0 1
+c
+d 434 1 0 0 1
+c
+d 328 1 0 0 1
+c
+d 425 1 0 0 1
+c
+d 434 1 0 0 1
+c
+d 425 1 0 0 1
+c
+d 425 1 0 0 0
+c
+d 542 1 0 1 0
+c
+d 709 2 0 0 0
+c
+d 21 2 0 0 1
+c
+d 20 2 0 0 1
+c
+d 331 1 0 0 1
+c
+d 20 2 0 0 1
+c
+d 21 2 0 0 1
+c
+d 331 1 0 0 1
+c
+d 603 2 0 0 1
+c
+d 20 2 0 0 1
+c
+d 21 2 0 0 1
+c
+d 331 1 0 0 1
+c
+d 603 2 0 0 1
+c
+d 21 1 0 0 1
+c
+d 21 1 0 0 1
+c
+d 542 5 1 0 0
+c
+d 543 1 0 0 1
+c
+d 542 1 0 0 1
+c
+d 542 1 0 0 1
+c
+d 543 4 0 0 1
+c
+d 542 1 0 0 0
+c
+d 543 4 0 0 0
+c
+d 678 1 0 0 1
+c
+d 677 1 0 0 1
+c
+d 243 2 0 0 1
+c
+d 672 1 0 0 1
+c
+d 243 2 0 0 1
+c
+d 672 1 0 0 1
+c
+d 677 1 0 0 1
+c
+d 678 1 0 0 1
+c
+d 681 1 0 0 1
+c
+d 243 2 0 0 1
+c
+d 672 1 0 0 1
+c
+d 677 1 0 0 1
+c
+d 678 1 0 0 1
+c
+d 681 1 0 0 1
+c
+d 678 1 0 0 1
+c
+d 678 1 0 0 1
+c
+d 246 1 0 0 1
+c
+d 246 1 0 0 1
+c
+d 674 1 0 0 1
+c
+d 674 1 0 0 1
+c
+d 243 1 0 0 0
+c
+d 411 1 0 0 1
+c
+d 385 1 0 0 0
+c
+d 441 2 0 0 0
+c
+d 687 2 0 0 1
+c
+d 231 1 0 0 1
+c
+d 687 2 0 0 1
+c
+d 230 1 0 0 0
+c
+d 231 1 0 0 0
+c
+d 687 2 0 0 0
+c
+d 537 4 0 0 1
+c
+d 537 5 0 0 0
+c
+d 420 1 0 0 1
+c
+d 733 2 0 0 1
+c
+d 72 1 0 0 0
+c
+d 494 2 1 0 0
+c
+d 351 1 0 0 0
+c
+d 352 1 0 0 0
+c
+d 685 4 0 0 0
+c
+d 630 1 0 0 1
+c
+d 588 1 0 0 1
+c
+d 588 1 0 0 1
+c
+d 630 2 0 0 1
+c
+d 588 1 0 0 1
+c
+d 630 2 0 0 1
+c
+d 588 1 0 0 1
+c
+d 588 1 0 0 0
+c
+d 689 4 0 0 1
+c
+d 649 2 0 0 1
+c
+d 689 4 0 0 1
+c
+d 106 1 0 0 0
+c
+d 649 2 0 0 0
+c
+d 689 4 0 0 0
+c
+d 383 1 0 1 0
+c
+d 384 1 0 0 0
+c
+d 580 2 0 0 0
+c
+d 385 2 0 0 1
+c
+d 385 2 0 2 0
+c
+d 411 1 0 0 0
+c
+d 412 1 0 0 0
+c
+d 636 1 0 0 1
+c
+d 348 2 0 0 1
+c
+d 38 1 0 0 0
+c
+d 674 1 0 1 1
+c
+d 245 1 0 0 1
+c
+d 672 1 0 0 1
+c
+d 245 1 0 0 1
+c
+d 672 1 0 0 1
+c
+d 674 2 0 0 1
+c
+d 245 1 0 0 1
+c
+d 672 1 0 0 1
+c
+d 674 2 0 0 1
+c
+d 245 2 0 0 1
+c
+d 245 2 0 0 1
+c
+d 244 2 0 0 0
+c
+d 436 1 0 0 0
+c
+d 447 1 0 0 0
+c
+d 164 1 0 0 1
+c
+d 564 1 0 0 1
+c
+d 163 2 0 0 1
+c
+d 163 2 0 0 1
+c
+d 164 1 0 0 1
+c
+d 562 3 0 0 1
+c
+d 564 1 0 0 1
+c
+d 163 2 0 0 1
+c
+d 164 1 0 0 1
+c
+d 562 3 0 0 1
+c
+d 564 1 0 0 1
+c
+d 164 2 0 0 1
+c
+d 164 2 0 0 1
+c
+d 338 3 0 0 0
+c
+d 459 3 0 0 0
+c
+d 393 1 0 0 1
+c
+d 59 2 0 0 0
+c
+d 494 2 0 0 0
+c
+d 729 2 0 0 0
+c
+d 268 1 0 0 1
+c
+d 270 1 0 1 1
+c
+d 265 1 0 0 1
+c
+d 265 1 0 0 1
+c
+d 268 1 0 0 1
+c
+d 270 2 0 0 1
+c
+d 265 1 0 0 0
+c
+d 268 1 0 0 0
+c
+d 270 2 0 0 0
+c
+d 518 2 1 0 0
+c
+d 518 3 0 1 0
+c
+d 560 1 0 0 1
+c
+d 562 2 0 0 0
+c
+d 695 3 1 0 0
+c
+d 506 1 0 0 1
+c
+d 688 1 0 1 1
+c
+d 465 1 0 0 1
+c
+d 465 1 0 0 1
+c
+d 506 1 0 0 1
+c
+d 688 1 0 0 1
+c
+d 465 1 0 0 1
+c
+d 506 1 0 0 1
+c
+d 688 1 0 0 1
+c
+d 446 1 0 0 1
+c
+d 446 1 0 0 1
+c
+d 675 1 1 0 1
+c
+d 672 1 0 0 1
+c
+d 673 1 0 0 1
+c
+d 672 1 0 0 1
+c
+d 673 1 0 0 1
+c
+d 675 2 0 0 1
+c
+d 672 1 0 0 0
+c
+d 673 1 0 0 0
+c
+d 675 2 0 0 0
+c
+d 554 1 0 0 1
+c
+d 558 1 0 0 0
+c
+d 741 5 0 0 1
+c
+d 405 1 0 0 0
+c
+d 741 5 0 0 0
+c
+d 662 2 0 0 1
+c
+d 662 3 0 0 0
+c
+d 685 2 0 0 0
+c
+d 562 3 0 0 0
+c
+d 613 3 0 0 0
+c
+d 273 3 0 0 0
+c
+d 660 2 0 0 1
+c
+d 138 1 0 0 1
+c
+d 137 2 0 0 1
+c
+d 137 2 0 0 1
+c
+d 138 1 0 0 1
+c
+d 660 3 0 0 1
+c
+d 137 2 0 0 1
+c
+d 138 1 0 0 1
+c
+d 660 3 0 0 1
+c
+d 225 1 0 0 1
+c
+d 225 1 0 0 1
+c
+d 286 2 0 0 0
+c
+d 514 3 0 0 1
+c
+d 401 1 0 0 1
+c
+d 514 3 0 0 1
+c
+d 135 1 0 0 1
+c
+d 401 1 0 0 1
+c
+d 514 3 0 0 1
+c
+d 135 1 0 0 0
+c
+d 401 1 0 0 0
+c
+d 514 4 0 0 0
+c
+d 270 2 0 0 0
+c
+d 752 1 0 0 0
+c
+d 562 2 0 0 1
+c
+d 562 3 0 0 0
+c
+d 665 2 0 0 0
+c
+d 421 2 0 0 1
+c
+d 87 1 0 0 1
+c
+d 86 1 0 0 0
+c
+d 615 2 0 0 1
+c
+d 616 1 0 0 1
+c
+d 241 1 0 0 0
+c
+d 615 2 1 0 0
+c
+d 616 1 0 0 0
+c
+d 518 2 0 1 0
+c
+d 332 1 0 0 1
+c
+d 603 1 0 0 1
+c
+d 605 2 0 0 1
+c
+d 325 1 0 0 0
+c
+d 483 1 0 1 1
+c
+d 706 1 0 0 1
+c
+d 483 1 0 0 1
+c
+d 706 1 0 0 1
+c
+d 483 1 0 0 1
+c
+d 706 1 0 0 1
+c
+d 550 2 0 0 1
+c
+d 550 2 0 0 0
+c
+d 575 1 0 0 1
+c
+d 585 1 0 0 1
+c
+d 166 1 0 0 0
+c
+d 385 1 0 0 1
+c
+d 387 1 0 0 1
+c
+d 385 1 0 0 0
+c
+d 387 1 0 0 0
+c
+d 411 1 0 0 0
+c
+d 653 2 0 0 1
+c
+d 474 2 0 0 0
+c
+d 440 1 1 0 1
+c
+d 437 1 0 0 1
+c
+d 437 1 0 0 1
+c
+d 440 2 0 0 1
+c
+d 437 1 0 0 1
+c
+d 440 2 0 0 1
+c
+d 105 2 0 0 1
+c
+d 105 2 0 0 1
+c
+d 438 2 0 0 1
+c
+d 438 2 0 0 0
+c
+d 646 1 0 0 1
+c
+d 388 1 0 0 0
+c
+d 727 3 0 0 0
+c
+d 388 2 0 0 1
+c
+d 388 2 1 0 0
+c
+d 646 1 0 0 0
+c
+d 562 2 0 0 0
+c
+d 558 2 0 0 0
+c
+d 754 3 0 0 0
+c
+d 620 1 0 0 1
+c
+d 590 1 0 0 1
+c
+d 621 1 0 0 1
+c
+d 590 2 0 0 1
+c
+d 620 1 0 0 1
+c
+d 621 1 0 0 1
+c
+d 590 2 0 0 1
+c
+d 620 1 0 0 1
+c
+d 621 1 0 0 1
+c
+d 576 1 0 0 1
+c
+d 577 2 0 0 1
+c
+d 576 2 0 0 1
+c
+d 577 2 0 0 1
+c
+d 575 1 0 0 1
+c
+d 576 2 0 0 1
+c
+d 577 2 0 0 1
+c
+d 575 1 0 0 1
+c
+d 576 2 0 0 1
+c
+d 577 2 0 0 1
+c
+d 588 1 0 0 1
+c
+d 575 1 0 0 1
+c
+d 576 2 0 0 1
+c
+d 577 2 0 0 1
+c
+d 587 1 0 0 1
+c
+d 588 1 0 0 1
+c
+d 168 2 0 0 0
+c
+d 575 1 0 0 0
+c
+d 576 2 0 0 0
+c
+d 577 2 0 0 0
+c
+d 587 1 0 0 0
+c
+d 588 1 0 0 0
+c
+d 643 2 0 1 1
+c
+d 402 1 0 0 0
+c
+d 279 1 1 0 0
+c
+d 282 1 0 0 0
+c
+d 577 1 0 0 1
+c
+d 579 2 1 0 0
+c
+d 580 1 0 0 0
+c
+d 561 2 1 0 0
+c
+d 611 4 0 0 1
+c
+d 537 1 0 1 1
+c
+d 537 2 0 0 1
+c
+d 611 4 0 0 1
+c
+d 537 2 0 0 0
+c
+d 611 4 0 0 0
+c
+d 516 2 0 0 1
+c
+d 516 4 0 0 0
+c
+d 500 4 0 0 0
+c
+d 344 3 0 0 1
+c
+d 344 4 0 0 0
+c
+d 267 4 1 0 0
+c
+d 494 5 0 0 0
+c
+d 735 3 0 0 0
+c
+d 297 4 0 0 0
+c
+d 477 1 0 0 0
+c
+d 706 1 0 0 0
+c
+d 492 1 0 0 1
+c
+d 493 1 0 0 1
+c
+d 487 1 0 0 1
+c
+d 486 1 0 0 0
+c
+d 312 1 0 1 1
+c
+d 317 1 0 0 1
+c
+d 312 1 0 0 0
+c
+d 317 2 0 0 0
+c
+d 490 1 0 0 1
+c
+d 491 1 0 0 1
+c
+d 547 1 0 1 1
+c
+d 490 1 0 0 1
+c
+d 491 1 0 0 1
+c
+d 547 1 0 0 1
+c
+d 490 1 0 0 1
+c
+d 491 1 0 0 1
+c
+d 547 1 0 0 1
+c
+d 335 1 0 0 1
+c
+d 335 1 0 0 1
+c
+d 490 1 0 0 1
+c
+d 490 1 0 0 0
+c
+d 192 1 0 0 1
+c
+d 337 1 0 0 1
+c
+d 31 2 0 0 0
+c
+d 566 3 0 0 0
+c
+d 549 5 1 0 1
+c
+d 549 5 0 0 0
+c
+d 706 1 0 0 0
+c
+d 82 2 0 0 1
+c
+d 79 1 0 0 1
+c
+d 78 2 0 0 1
+c
+d 693 1 0 0 0
+c
+d 736 2 0 0 0
+c
+d 696 2 0 0 0
+c
+d 697 1 0 0 0
+c
+d 743 4 1 0 0
+c
+d 425 1 0 0 1
+c
+d 101 1 0 0 0
+c
+d 740 3 0 0 0
+c
+d 638 1 0 0 1
+c
+d 695 1 1 0 1
+c
+d 56 1 0 0 0
+c
+d 271 2 0 0 0
+c
+d 713 3 0 0 0
+c
+d 414 5 0 0 1
+c
+d 411 1 0 0 0
+c
+d 414 5 0 0 0
+c
+d 483 1 0 0 1
+c
+d 551 1 0 0 0
+c
+d 518 1 0 0 0
+c
+d 720 1 0 0 0
+c
+d 516 1 0 0 0
+c
+d 517 1 0 0 0
+c
+d 267 1 0 0 1
+c
+d 268 1 1 0 1
+c
+d 267 1 0 0 1
+c
+d 268 2 0 0 1
+c
+d 270 1 0 0 1
+c
+d 267 1 0 0 0
+c
+d 268 2 0 0 0
+c
+d 270 1 0 0 0
+c
+d 472 2 0 0 1
+c
+d 469 1 0 0 0
+c
+d 472 2 0 0 0
+c
+d 575 2 1 0 0
+c
+d 401 1 0 1 1
+c
+d 520 1 0 0 1
+c
+d 401 1 0 0 1
+c
+d 520 1 0 0 1
+c
+d 401 1 0 0 1
+c
+d 520 1 0 0 1
+c
+d 520 1 0 0 1
+c
+d 520 1 0 0 0
+c
+d 665 2 0 2 0
+c
+d 460 2 1 0 0
+c
+d 360 2 1 0 1
+c
+d 352 1 0 0 0
+c
+d 510 1 0 0 0
+c
+d 511 1 0 0 0
+c
+d 285 1 0 0 0
+c
+d 286 2 0 0 0
+c
+d 613 3 0 0 1
+c
+d 667 1 0 1 1
+c
+d 613 3 0 0 1
+c
+d 667 1 0 0 1
+c
+d 613 3 0 0 0
+c
+d 667 1 0 0 0
+c
+d 638 2 0 2 0
+c
+d 575 2 0 1 0
+c
+d 707 2 0 0 1
+c
+d 632 1 0 0 0
+c
+d 707 2 0 0 0
+c
+d 759 1 0 0 1
+c
+d 620 2 0 0 1
+c
+d 620 2 0 0 1
+c
+d 621 1 0 0 1
+c
+d 759 1 0 0 1
+c
+d 620 2 0 0 0
+c
+d 621 1 0 0 0
+c
+d 759 1 0 0 0
+c
+d 619 3 1 0 1
+c
+d 619 3 0 0 0
+c
+d 561 1 0 0 0
+c
+d 705 1 0 0 0
+c
+d 494 2 0 0 0
+c
+d 235 1 0 0 1
+c
+d 591 1 0 0 1
+c
+d 593 1 0 0 0
+c
+d 597 2 0 0 0
+c
+d 460 3 0 0 0
+c
+d 508 1 0 0 0
+c
+d 725 1 0 0 0
+c
+d 585 1 0 0 0
+c
+d 558 2 0 0 0
+c
+d 576 1 0 0 1
+c
+d 571 1 0 0 0
+c
+d 436 1 0 0 0
+c
+d 447 1 0 0 0
+c
+d 613 2 0 0 0
+c
+d 671 4 1 0 1
+c
+d 671 4 0 0 0
+c
+d 535 1 0 0 1
+c
+d 536 1 1 0 1
+c
+d 535 1 0 0 0
+c
+d 536 2 0 0 0
+c
+d 651 2 0 1 0
+c
+d 684 2 0 0 1
+c
+d 665 2 0 0 0
+c
+d 684 3 0 0 0
+c
+d 563 3 0 0 1
+c
+d 162 1 0 0 1
+c
+d 162 1 0 0 1
+c
+d 563 3 0 0 1
+c
+d 564 1 0 0 1
+c
+d 162 1 0 0 1
+c
+d 563 3 0 0 1
+c
+d 564 1 0 0 1
+c
+d 562 1 0 0 1
+c
+d 562 1 0 0 1
+c
+d 563 1 0 0 1
+c
+d 563 1 0 0 0
+c
+d 373 2 0 0 0
+c
+d 500 1 0 0 1
+c
+d 499 1 0 0 0
+c
+d 674 1 0 0 1
+c
+d 672 1 0 0 0
+c
+d 411 3 0 0 0
+c
+d 265 2 0 0 1
+c
+d 265 2 0 2 0
+c
+d 272 1 0 0 0
+c
+d 558 3 0 0 0
+c
+d 663 3 0 0 0
+c
+d 451 1 0 0 0
+c
+d 452 2 0 0 0
+c
+d 615 1 0 0 1
+c
+d 618 1 0 0 1
+c
+d 185 2 0 0 1
+c
+d 589 1 0 0 1
+c
+d 185 2 0 0 1
+c
+d 589 2 0 0 1
+c
+d 615 1 0 0 1
+c
+d 618 1 0 0 1
+c
+d 185 2 0 0 1
+c
+d 589 2 0 0 1
+c
+d 615 1 0 0 1
+c
+d 618 1 0 0 1
+c
+d 618 2 0 0 1
+c
+d 618 2 0 0 1
+c
+d 729 4 1 0 0
+c
+d 446 3 0 0 0
+c
+d 455 3 0 0 1
+c
+d 455 3 0 0 1
+c
+d 659 1 0 0 1
+c
+d 455 4 0 0 1
+c
+d 659 1 0 0 1
+c
+d 455 4 0 0 0
+c
+d 507 1 0 0 0
+c
+d 659 1 0 0 0
+c
+d 550 1 0 0 1
+c
+d 497 1 0 0 1
+c
+d 132 2 0 0 1
+c
+d 492 1 0 0 0
+c
+d 665 2 0 0 0
+c
+d 431 1 0 0 0
+c
+d 433 2 0 0 0
+c
+d 484 1 0 0 0
+c
+d 730 1 0 0 0
+c
+d 442 1 0 0 0
+c
+d 443 1 0 0 0
+c
+d 638 4 0 0 1
+c
+d 379 1 0 0 0
+c
+d 638 4 1 0 0
+c
+d 540 1 0 0 1
+c
+d 587 1 0 0 1
+c
+d 168 1 0 0 0
+c
+d 500 2 0 0 0
+c
+d 501 1 0 0 0
+c
+d 484 1 0 1 1
+c
+d 481 2 0 0 1
+c
+d 481 2 0 0 1
+c
+d 484 1 0 0 1
+c
+d 485 1 0 0 1
+c
+d 481 2 0 0 0
+c
+d 484 1 0 0 0
+c
+d 485 1 0 0 0
+c
+d 246 2 0 0 1
+c
+d 676 1 0 0 1
+c
+d 674 1 0 0 1
+c
+d 246 2 0 0 1
+c
+d 674 1 0 0 1
+c
+d 676 1 0 0 1
+c
+d 682 1 0 0 1
+c
+d 246 2 0 0 1
+c
+d 674 1 0 0 1
+c
+d 676 1 0 0 1
+c
+d 682 1 0 0 1
+c
+d 681 1 0 0 1
+c
+d 681 1 0 0 1
+c
+d 676 2 0 0 1
+c
+d 676 2 0 0 1
+c
+d 513 1 0 0 0
+c
+d 514 2 0 1 0
+c
+d 459 1 0 0 1
+c
+d 463 1 0 0 0
+c
+d 393 1 0 0 1
+c
+d 396 1 0 1 1
+c
+d 393 1 0 0 1
+c
+d 396 1 0 0 1
+c
+d 393 1 0 0 0
+c
+d 396 1 0 0 0
+c
+d 237 1 0 0 1
+c
+d 606 1 0 0 1
+c
+d 581 1 0 0 0
+c
+d 388 2 0 0 1
+c
+d 390 1 0 0 1
+c
+d 304 1 0 0 1
+c
+d 304 1 0 0 1
+c
+d 318 2 0 0 1
+c
+d 388 2 0 0 1
+c
+d 390 1 0 0 1
+c
+d 304 1 0 0 1
+c
+d 318 2 0 0 1
+c
+d 388 2 0 0 1
+c
+d 390 1 0 0 1
+c
+d 64 2 0 0 1
+c
+d 64 2 0 0 1
+c
+d 388 1 0 0 1
+c
+d 388 1 0 0 1
+c
+d 306 1 0 0 1
+c
+d 306 1 0 0 0
+c
+d 537 3 0 0 1
+c
+d 537 3 1 0 0
+c
+d 561 1 0 0 0
+c
+d 463 2 0 0 1
+c
+d 653 1 0 0 1
+c
+d 463 2 0 0 1
+c
+d 471 1 0 0 1
+c
+d 653 1 0 0 1
+c
+d 463 2 0 0 0
+c
+d 471 1 0 0 0
+c
+d 653 1 0 0 0
+c
+d 580 4 0 0 0
+c
+d 631 1 0 0 1
+c
+d 561 1 1 0 1
+c
+d 565 1 0 0 0
+c
+d 524 2 0 0 1
+c
+d 526 1 0 0 0
+c
+d 459 2 0 0 0
+c
+d 494 1 0 0 1
+c
+d 421 1 0 0 0
+c
+d 496 1 0 0 0
+c
+d 513 1 0 0 1
+c
+d 398 1 0 0 0
+c
+d 284 1 0 0 1
+c
+d 291 1 0 0 0
+c
+d 326 1 0 0 1
+c
+d 603 1 0 0 1
+c
+d 325 1 0 0 0
+c
+d 748 3 0 0 0
+c
+d 745 1 0 0 1
+c
+d 309 1 0 0 0
+c
+d 310 1 0 0 0
+c
+d 520 3 0 0 1
+c
+d 520 5 0 0 0
+c
+d 271 1 0 0 1
+c
+d 297 1 1 0 0
+c
+d 584 2 0 0 1
+c
+d 579 1 0 0 0
+c
+d 654 3 1 0 1
+c
+d 653 1 0 0 0
+c
+d 654 3 0 0 0
+c
+d 759 3 0 0 0
+c
+d 456 1 0 0 1
+c
+d 447 1 0 0 1
+c
+d 446 3 0 0 1
+c
+d 447 4 0 0 1
+c
+d 456 1 0 0 1
+c
+d 446 3 0 0 1
+c
+d 447 4 0 0 1
+c
+d 456 1 0 0 1
+c
+d 218 1 0 0 1
+c
+d 218 1 0 0 0
+c
+d 449 1 1 0 1
+c
+d 450 1 0 0 1
+c
+d 744 1 0 0 0
+c
+d 315 1 0 0 1
+c
+d 745 2 0 0 1
+c
+d 308 2 0 0 1
+c
+d 308 2 0 0 1
+c
+d 315 1 0 0 1
+c
+d 745 2 0 0 1
+c
+d 746 1 0 0 1
+c
+d 308 2 0 0 1
+c
+d 315 1 0 0 1
+c
+d 745 2 0 0 1
+c
+d 746 1 0 0 1
+c
+d 315 1 0 0 1
+c
+d 308 1 0 0 0
+c
+d 315 1 0 0 0
+c
+d 546 3 0 0 0
+c
+d 593 1 0 0 1
+c
+d 595 1 1 0 1
+c
+d 593 1 0 0 0
+c
+d 595 2 0 0 0
+c
+d 562 1 0 0 1
+c
+d 560 1 0 0 0
+c
+d 540 2 0 0 1
+c
+d 543 2 0 0 1
+c
+d 541 1 0 0 0
+c
+d 463 2 0 0 1
+c
+d 464 1 0 0 1
+c
+d 463 2 0 0 1
+c
+d 464 1 0 0 1
+c
+d 494 1 0 0 1
+c
+d 463 3 0 0 0
+c
+d 464 1 0 0 0
+c
+d 494 1 0 0 0
+c
+d 459 4 1 0 0
+c
+d 315 1 0 0 0
+c
+d 745 1 0 0 0
+c
+d 581 1 0 0 0
+c
+d 513 1 0 0 1
+c
+d 514 1 0 0 1
+c
+d 521 1 1 0 1
+c
+d 135 1 0 0 1
+c
+d 135 1 0 0 1
+c
+d 513 1 0 0 1
+c
+d 514 1 0 0 1
+c
+d 521 2 0 0 1
+c
+d 135 1 0 0 1
+c
+d 513 1 0 0 1
+c
+d 514 1 0 0 1
+c
+d 521 2 0 0 1
+c
+d 477 1 0 0 1
+c
+d 128 1 0 0 0
+c
+d 308 1 0 0 1
+c
+d 312 1 0 0 1
+c
+d 316 1 0 0 1
+c
+d 308 1 0 0 1
+c
+d 311 1 0 0 1
+c
+d 312 1 0 0 1
+c
+d 316 1 0 0 1
+c
+d 308 1 0 0 1
+c
+d 311 1 0 0 1
+c
+d 312 1 0 0 1
+c
+d 316 1 0 0 1
+c
+d 312 1 0 0 1
+c
+d 308 1 0 0 0
+c
+d 312 1 0 0 0
+c
+d 376 5 0 0 0
+c
+d 651 1 0 0 0
+c
+d 686 1 0 0 0
+c
+d 741 1 0 1 1
+c
+d 403 1 0 0 0
+c
+d 535 1 0 0 1
+c
+d 713 1 0 0 1
+c
+d 537 1 0 0 0
+c
+d 561 1 0 0 0
+c
+d 705 1 0 0 0
+c
+d 494 2 0 2 1
+c
+d 496 1 0 0 1
+c
+d 131 2 0 0 1
+c
+d 130 1 0 0 0
+c
+d 642 1 0 0 1
+c
+d 662 2 0 1 0
+c
+d 557 1 0 0 1
+c
+d 558 1 0 0 1
+c
+d 553 1 0 0 0
+c
+d 434 1 0 0 1
+c
+d 102 1 0 0 1
+c
+d 429 1 0 0 1
+c
+d 102 1 0 0 1
+c
+d 429 1 0 0 1
+c
+d 434 2 0 0 1
+c
+d 102 1 0 0 1
+c
+d 429 1 0 0 1
+c
+d 434 2 0 0 1
+c
+d 429 1 0 0 1
+c
+d 429 1 0 0 1
+c
+d 282 1 0 0 1
+c
+d 288 1 0 0 1
+c
+d 11 2 1 0 0
+c
+d 460 1 0 1 1
+c
+d 479 1 0 0 1
+c
+d 729 1 0 0 1
+c
+d 500 1 0 0 1
+c
+d 460 1 0 0 1
+c
+d 461 1 0 0 1
+c
+d 479 1 0 0 1
+c
+d 500 1 0 0 1
+c
+d 729 1 0 0 1
+c
+d 460 1 0 0 1
+c
+d 461 1 0 0 1
+c
+d 479 1 0 0 1
+c
+d 500 1 0 0 1
+c
+d 729 1 0 0 1
+c
+d 657 1 0 0 1
+c
+d 657 1 0 0 1
+c
+d 500 1 0 0 1
+c
+d 500 1 0 0 0
+c
+d 609 1 0 0 1
+c
+d 610 1 0 0 1
+c
+d 238 2 0 0 1
+c
+d 179 1 0 0 1
+c
+d 179 1 0 0 1
+c
+d 238 2 0 0 1
+c
+d 239 2 0 0 1
+c
+d 609 1 0 0 1
+c
+d 610 1 0 0 1
+c
+d 179 1 0 0 1
+c
+d 238 2 0 0 1
+c
+d 239 2 0 0 1
+c
+d 609 1 0 0 1
+c
+d 610 1 0 0 1
+c
+d 582 1 0 0 1
+c
+d 589 1 0 0 1
+c
+d 582 1 0 0 1
+c
+d 589 1 0 0 1
+c
+d 609 1 0 0 1
+c
+d 609 1 0 0 1
+c
+d 345 1 1 0 1
+c
+d 347 1 0 0 1
+c
+d 345 2 0 0 0
+c
+d 347 1 0 0 0
+c
+d 19 1 0 0 1
+c
+d 18 1 0 0 1
+c
+d 17 2 0 0 1
+c
+d 17 2 0 0 1
+c
+d 18 1 0 0 1
+c
+d 19 2 0 0 1
+c
+d 17 2 0 0 1
+c
+d 18 1 0 0 1
+c
+d 19 2 0 0 1
+c
+d 17 1 0 0 1
+c
+d 17 1 0 0 1
+c
+d 304 1 0 0 1
+c
+d 304 1 0 0 1
+c
+d 397 3 0 0 0
+c
+d 459 2 0 0 1
+c
+d 462 2 0 0 1
+c
+d 459 2 0 0 1
+c
+d 462 3 0 0 1
+c
+d 458 1 0 0 0
+c
+d 459 2 0 0 0
+c
+d 462 3 0 0 0
+c
+d 637 1 0 1 1
+c
+d 40 1 0 0 1
+c
+d 352 1 0 0 1
+c
+d 360 1 0 0 1
+c
+d 40 1 0 0 1
+c
+d 352 1 0 0 1
+c
+d 360 1 0 0 1
+c
+d 637 1 0 0 1
+c
+d 40 1 0 0 1
+c
+d 352 1 0 0 1
+c
+d 360 1 0 0 1
+c
+d 637 1 0 0 1
+c
+d 360 2 0 0 1
+c
+d 360 2 0 0 1
+c
+d 560 2 0 0 1
+c
+d 562 1 0 1 1
+c
+d 560 2 0 1 1
+c
+d 562 2 0 0 1
+c
+d 560 2 0 0 0
+c
+d 562 2 0 0 0
+c
+d 337 1 0 0 1
+c
+d 634 2 0 0 1
+c
+d 701 2 0 0 1
+c
+d 337 1 0 0 0
+c
+d 339 1 0 0 0
+c
+d 634 2 0 0 0
+c
+d 701 2 0 0 0
+c
+d 431 3 0 0 0
+c
+d 433 1 0 0 0
+c
+d 572 3 0 1 0
+c
+d 605 1 0 0 1
+c
+d 610 2 0 0 1
+c
+d 333 1 0 0 0
+c
+d 685 2 0 0 0
+c
+d 686 1 0 0 0
+c
+d 687 2 0 0 0
+c
+d 738 2 0 0 1
+c
+d 738 3 0 0 0
+c
+d 267 2 0 0 1
+c
+d 267 2 0 0 0
+c
+d 270 1 0 0 0
+c
+d 643 2 0 0 0
+c
+d 324 2 0 1 1
+c
+d 323 1 0 0 0
+c
+d 642 1 0 0 1
+c
+d 638 1 0 0 0
+c
+d 324 1 0 0 1
+c
+d 357 1 0 0 1
+c
+d 358 1 0 0 1
+c
+d 322 1 0 0 0
+c
+d 614 1 0 0 0
+c
+d 671 2 0 0 0
+c
+d 652 4 0 0 0
+c
+d 297 2 0 0 1
+c
+d 271 2 0 0 0
+c
+d 297 2 0 2 0
+c
+d 717 3 0 0 0
+c
+d 351 2 0 0 1
+c
+d 348 1 0 0 1
+c
+d 43 2 0 0 1
+c
+d 324 1 0 0 0
+c
+d 487 1 0 0 1
+c
+d 488 1 0 0 1
+c
+d 487 2 0 0 1
+c
+d 488 1 0 0 1
+c
+d 487 2 0 0 1
+c
+d 488 1 0 0 1
+c
+d 222 1 0 0 1
+c
+d 222 1 0 0 0
+c
+d 338 2 1 0 1
+c
+d 338 3 0 0 0
+c
+d 603 2 1 0 1
+c
+d 325 1 0 0 0
+c
+d 741 3 0 2 1
+c
+d 741 3 0 0 0
+c
+d 741 5 0 0 0
+c
+d 274 1 0 0 1
+c
+d 265 1 0 0 0
+c
+d 477 2 0 0 1
+c
+d 477 3 0 0 0
+c
+d 656 1 0 0 0
+c
+d 265 2 0 0 0
+c
+d 297 1 0 0 0
+c
+d 372 1 0 0 0
+c
+d 742 2 0 0 0
+c
+d 657 3 0 0 0
+c
+d 267 1 0 0 1
+c
+d 753 1 0 0 1
+c
+d 267 2 0 0 0
+c
+d 753 1 0 0 0
+c
+d 309 3 0 0 1
+c
+d 305 1 0 0 1
+c
+d 305 2 0 0 1
+c
+d 309 3 0 0 1
+c
+d 305 2 0 0 1
+c
+d 309 3 0 0 1
+c
+d 307 3 0 0 1
+c
+d 313 1 0 0 1
+c
+d 307 3 0 0 1
+c
+d 313 1 0 0 1
+c
+d 312 1 0 0 1
+c
+d 312 1 0 0 0
+c
+d 312 1 0 0 0
+c
+d 316 1 0 0 0
+c
+d 317 1 0 0 0
+c
+d 694 2 0 0 1
+c
+d 694 2 0 0 1
+c
+d 737 1 0 0 1
+c
+d 76 1 0 0 0
+c
+d 694 2 0 0 0
+c
+d 737 1 0 0 0
+c
+d 653 1 0 0 0
+c
+d 654 1 0 0 0
+c
+d 624 4 0 0 1
+c
+d 624 4 1 0 0
+c
+d 668 1 0 0 0
+c
+d 219 1 0 0 1
+c
+d 449 1 0 0 1
+c
+d 450 2 0 0 1
+c
+d 456 1 0 0 0
+c
+d 411 2 0 0 1
+c
+d 385 1 0 0 0
+c
+d 333 3 0 0 1
+c
+d 334 1 0 0 0
+c
+d 572 4 0 2 0
+c
+d 478 4 0 0 1
+c
+d 729 1 0 1 1
+c
+d 478 4 0 0 1
+c
+d 494 1 0 0 1
+c
+d 729 1 0 0 1
+c
+d 478 4 0 0 0
+c
+d 494 1 0 0 0
+c
+d 729 1 0 0 0
+c
+d 559 1 0 0 1
+c
+d 628 1 0 0 1
+c
+d 552 1 0 0 0
+c
+d 559 1 0 0 0
+c
+d 628 1 0 0 0
+c
+d 482 1 0 0 1
+c
+d 483 2 0 0 1
+c
+d 493 2 0 0 1
+c
+d 495 1 0 0 1
+c
+d 482 1 0 0 1
+c
+d 483 2 0 0 1
+c
+d 484 2 0 0 1
+c
+d 493 2 0 0 1
+c
+d 495 1 0 0 1
+c
+d 482 1 0 0 0
+c
+d 483 2 0 0 0
+c
+d 484 2 0 0 0
+c
+d 493 2 0 0 0
+c
+d 495 1 0 0 0
+c
+d 613 2 0 0 0
+c
+d 549 1 0 0 0
+c
+d 706 2 0 0 0
+c
+d 685 1 0 1 0
+c
+d 686 2 0 0 0
+c
+d 726 4 0 0 0
+c
+d 585 2 0 0 1
+c
+d 585 3 0 0 0
+c
+d 383 3 0 1 0
+c
+d 451 1 0 0 1
+c
+d 422 1 0 0 0
+c
+d 759 2 0 0 0
+c
+d 634 1 0 0 1
+c
+d 342 2 0 0 1
+c
+d 25 1 0 0 1
+c
+d 24 1 0 0 1
+c
+d 338 1 0 0 1
+c
+d 24 1 0 0 1
+c
+d 25 1 0 0 1
+c
+d 338 1 0 0 1
+c
+d 342 2 0 0 1
+c
+d 343 1 0 0 1
+c
+d 634 1 0 0 1
+c
+d 24 1 0 0 1
+c
+d 25 1 0 0 1
+c
+d 338 1 0 0 1
+c
+d 342 2 0 0 1
+c
+d 343 1 0 0 1
+c
+d 634 1 0 0 1
+c
+d 342 1 0 0 1
+c
+d 342 1 0 0 1
+c
+d 288 1 0 0 1
+c
+d 294 1 1 0 1
+c
+d 11 1 0 0 1
+c
+d 10 1 0 0 0
+c
+d 485 1 0 0 0
+c
+d 486 1 0 0 0
+c
+d 638 2 1 0 0
+c
+d 639 1 0 0 0
+c
+d 640 3 0 0 1
+c
+d 640 4 0 0 0
+c
+d 641 1 0 0 0
+c
+d 642 1 0 0 1
+c
+d 638 1 0 0 0
+c
+d 749 2 0 1 0
+c
+d 366 2 0 0 0
+c
+d 512 1 0 1 1
+c
+d 398 2 0 0 0
+c
+d 332 2 0 0 0
+c
+d 606 1 0 0 0
+c
+d 607 2 0 0 0
+c
+d 611 1 0 0 1
+c
+d 561 1 0 0 1
+c
+d 537 1 0 0 0
+c
+d 518 1 0 0 0
+c
+d 720 1 0 0 0
+c
+d 267 2 0 0 1
+c
+d 0 1 0 0 1
+c
+d 752 1 0 1 1
+c
+d 0 1 0 0 1
+c
+d 267 2 0 0 1
+c
+d 270 1 0 0 1
+c
+d 752 1 0 0 1
+c
+d 0 1 0 0 1
+c
+d 267 2 0 0 1
+c
+d 270 1 0 0 1
+c
+d 752 1 0 0 1
+c
+d 240 1 0 0 1
+c
+d 614 1 0 0 1
+c
+d 184 2 0 0 1
+c
+d 183 2 0 0 1
+c
+d 183 2 0 0 1
+c
+d 184 2 0 0 1
+c
+d 240 1 0 0 1
+c
+d 613 2 0 0 1
+c
+d 614 1 0 0 1
+c
+d 183 2 0 0 1
+c
+d 184 2 0 0 1
+c
+d 240 1 0 0 1
+c
+d 613 2 0 0 1
+c
+d 614 1 0 0 1
+c
+d 184 1 0 0 1
+c
+d 184 1 0 0 1
+c
+d 183 1 0 0 1
+c
+d 183 1 0 0 1
+c
+d 571 2 0 0 1
+c
+d 572 1 1 0 1
+c
+d 585 1 0 0 0
+c
+d 393 1 0 0 0
+c
+d 739 2 0 0 0
+c
+d 633 4 1 0 0
+c
+d 577 1 0 0 1
+c
+d 572 1 0 0 0
+c
+d 392 1 0 0 1
+c
+d 395 1 0 1 1
+c
+d 392 1 0 0 1
+c
+d 395 1 0 0 1
+c
+d 738 2 0 0 1
+c
+d 392 1 0 0 0
+c
+d 395 1 0 0 0
+c
+d 738 2 0 0 0
+c
+d 540 1 0 0 1
+c
+d 555 1 0 0 1
+c
+d 180 1 0 0 0
+c
+d 708 5 0 0 0
+c
+d 646 1 1 0 1
+c
+d 388 2 0 0 0
+c
+d 309 3 0 1 0
+c
+d 515 1 0 0 0
+c
+d 723 2 0 0 0
+c
+d 484 3 0 0 0
+c
+d 731 1 0 0 0
+c
+d 725 3 0 0 1
+c
+d 398 1 0 0 0
+c
+d 400 1 0 0 0
+c
+d 725 3 0 0 0
+c
+d 705 4 0 0 0
+c
+d 692 1 0 0 1
+c
+d 328 3 0 0 1
+c
+d 328 3 0 0 1
+c
+d 329 2 0 0 1
+c
+d 692 2 0 0 1
+c
+d 328 3 0 0 0
+c
+d 329 2 0 0 0
+c
+d 692 2 0 0 0
+c
+d 751 3 0 0 0
+c
+d 721 3 0 2 0
+c
+d 276 2 0 0 0
+c
+d 749 1 0 0 0
+c
+d 453 1 0 1 0
+c
+d 454 2 0 0 0
+c
+d 268 1 0 0 1
+c
+d 267 1 0 0 1
+c
+d 267 1 0 0 1
+c
+d 268 4 0 0 1
+c
+d 267 1 0 0 0
+c
+d 268 4 0 0 0
+c
+d 693 5 0 0 0
+c
+d 631 3 0 0 1
+c
+d 573 1 0 0 1
+c
+d 631 3 0 0 1
+c
+d 565 1 0 0 0
+c
+d 573 1 0 0 0
+c
+d 631 3 1 0 0
+c
+d 279 1 0 0 1
+c
+d 280 2 0 0 1
+c
+d 281 1 0 0 1
+c
+d 279 2 0 0 0
+c
+d 280 2 0 0 0
+c
+d 281 1 0 0 0
+c
+d 662 1 0 0 1
+c
+d 685 2 0 1 1
+c
+d 531 1 0 0 1
+c
+d 531 1 0 0 1
+c
+d 662 1 0 0 1
+c
+d 685 3 0 0 1
+c
+d 531 1 0 0 1
+c
+d 662 1 0 0 1
+c
+d 685 3 0 0 1
+c
+d 660 1 0 0 1
+c
+d 660 1 0 0 0
+c
+d 747 1 0 1 0
+c
+d 605 5 0 0 0
+c
+d 657 2 0 0 1
+c
+d 658 1 0 0 1
+c
+d 657 3 0 0 0
+c
+d 658 1 0 0 0
+c
+d 385 1 0 0 1
+c
+d 386 2 0 0 1
+c
+d 412 1 0 0 0
+c
+d 407 3 0 0 0
+c
+d 624 1 0 0 1
+c
+d 593 1 0 0 0
+c
+d 665 3 1 0 0
+c
+d 611 4 0 0 1
+c
+d 537 2 0 0 1
+c
+d 611 4 1 0 1
+c
+d 537 2 0 0 0
+c
+d 611 4 0 0 0
+c
+d 712 3 0 0 1
+c
+d 712 3 0 0 1
+c
+d 714 1 0 0 1
+c
+d 537 1 0 0 0
+c
+d 712 3 0 0 0
+c
+d 714 1 0 0 0
+c
+d 749 2 0 1 0
+c
+d 751 1 0 1 0
+c
+d 717 2 0 1 0
+c
+d 718 1 1 0 0
+c
+d 344 1 0 0 1
+c
+d 347 1 0 0 1
+c
+d 339 1 0 0 0
+c
+d 340 1 0 0 0
+c
+d 518 3 0 2 0
+c
+d 562 2 0 0 0
+c
+d 494 2 0 0 0
+c
+d 572 1 0 1 1
+c
+d 573 1 0 1 1
+c
+d 572 1 0 0 0
+c
+d 573 1 0 0 0
+c
+d 194 2 1 0 1
+c
+d 319 2 0 0 1
+c
+d 194 2 0 0 1
+c
+d 319 2 0 0 1
+c
+d 194 2 0 0 1
+c
+d 319 2 0 0 1
+c
+d 348 1 0 0 1
+c
+d 348 1 0 0 1
+c
+d 323 1 0 0 1
+c
+d 323 1 0 0 0
+c
+d 453 3 0 0 0
+c
+d 698 1 0 0 0
+c
+d 610 1 0 0 1
+c
+d 581 1 0 0 0
+c
+d 428 1 0 0 1
+c
+d 97 2 0 0 1
+c
+d 96 1 0 0 0
+c
+d 518 2 1 0 0
+c
+d 717 1 0 0 0
+c
+d 441 3 0 0 1
+c
+d 447 1 0 1 1
+c
+d 437 1 0 0 1
+c
+d 436 1 0 0 1
+c
+d 437 1 0 0 1
+c
+d 441 3 0 0 1
+c
+d 447 1 0 0 1
+c
+d 436 1 0 0 1
+c
+d 437 1 0 0 1
+c
+d 441 3 0 0 1
+c
+d 447 1 0 0 1
+c
+d 632 1 0 0 1
+c
+d 707 1 1 0 0
+c
+d 721 3 0 0 1
+c
+d 721 4 0 0 1
+c
+d 512 1 0 0 0
+c
+d 513 1 0 0 0
+c
+d 721 4 0 0 0
+c
+d 267 2 0 0 0
+c
+d 753 2 0 0 0
+c
+d 510 1 0 0 1
+c
+d 160 1 0 0 1
+c
+d 152 1 0 0 0
+c
+d 710 1 0 0 0
+c
+d 711 1 0 0 0
+c
+d 628 3 0 0 0
+c
+d 279 1 0 0 1
+c
+d 295 1 0 0 0
+c
+d 419 1 0 0 1
+c
+d 188 2 0 0 0
+c
+d 529 2 0 0 1
+c
+d 146 2 0 0 0
+c
+d 610 1 0 0 1
+c
+d 608 1 0 0 0
+c
+d 270 3 1 0 1
+c
+d 270 4 0 0 0
+c
+d 582 1 0 0 1
+c
+d 593 1 0 0 0
+c
+d 594 1 0 0 0
+c
+d 459 1 0 0 1
+c
+d 494 1 0 0 1
+c
+d 463 1 0 0 0
+c
+d 317 1 0 0 1
+c
+d 313 2 0 0 1
+c
+d 313 2 0 0 1
+c
+d 316 1 0 0 1
+c
+d 317 2 0 0 1
+c
+d 313 2 0 0 0
+c
+d 316 1 0 0 0
+c
+d 317 2 0 0 0
+c
+d 518 2 0 0 0
+c
+d 709 1 0 0 1
+c
+d 545 1 0 0 0
+c
+d 569 1 0 0 0
+c
+d 570 1 0 0 0
+c
+d 338 3 0 0 0
+c
+d 675 1 0 0 1
+c
+d 244 1 0 0 1
+c
+d 674 1 0 0 1
+c
+d 673 1 0 0 0
+c
+d 730 4 0 0 0
+c
+d 556 1 0 0 0
+c
+d 557 1 0 0 0
+c
+d 517 1 0 0 1
+c
+d 519 1 0 1 0
+c
+d 715 2 0 0 0
+c
+d 657 4 0 0 1
+c
+d 657 4 0 0 1
+c
+d 664 1 0 0 1
+c
+d 657 5 0 0 1
+c
+d 664 1 0 0 1
+c
+d 504 1 0 0 0
+c
+d 657 5 0 0 0
+c
+d 664 1 0 0 0
+c
+d 718 3 0 0 0
+c
+d 526 3 0 1 1
+c
+d 526 4 0 0 1
+c
+d 540 1 0 0 1
+c
+d 526 4 0 0 0
+c
+d 540 1 0 0 0
+c
+d 544 1 0 0 0
+c
+d 701 2 0 1 0
+c
+d 585 4 1 0 0
+c
+d 643 1 0 0 1
+c
+d 397 1 0 0 1
+c
+d 402 1 0 0 0
+c
+d 758 2 0 0 1
+c
+d 543 1 0 1 1
+c
+d 543 1 0 0 1
+c
+d 758 2 0 0 1
+c
+d 543 1 0 0 1
+c
+d 758 2 0 0 1
+c
+d 758 2 0 0 1
+c
+d 758 2 0 0 0
+c
+d 446 3 1 0 0
+c
+d 369 3 0 0 0
+c
+d 328 1 0 1 1
+c
+d 306 3 0 0 1
+c
+d 307 1 0 0 1
+c
+d 306 3 0 0 1
+c
+d 307 1 0 0 1
+c
+d 328 1 0 0 1
+c
+d 306 3 0 0 1
+c
+d 307 1 0 0 1
+c
+d 328 1 0 0 1
+c
+d 430 1 0 0 1
+c
+d 307 2 0 0 0
+c
+d 430 1 0 0 0
+c
+d 558 2 0 1 0
+c
+d 605 2 0 0 1
+c
+d 333 1 0 0 1
+c
+d 334 1 0 0 1
+c
+d 602 1 0 0 1
+c
+d 333 1 0 0 1
+c
+d 334 1 0 0 1
+c
+d 602 1 0 0 1
+c
+d 603 1 0 0 1
+c
+d 605 2 0 0 1
+c
+d 333 1 0 0 1
+c
+d 334 1 0 0 1
+c
+d 602 1 0 0 1
+c
+d 603 1 0 0 1
+c
+d 605 2 0 0 1
+c
+d 605 2 0 0 1
+c
+d 605 2 0 0 1
+c
+d 640 3 1 0 1
+c
+d 382 1 0 0 1
+c
+d 382 1 0 0 1
+c
+d 640 3 0 0 1
+c
+d 382 1 0 0 0
+c
+d 640 3 0 0 0
+c
+d 199 2 0 0 1
+c
+d 376 3 1 0 0
+c
+d 615 3 0 0 1
+c
+d 616 1 0 0 1
+c
+d 615 4 0 0 0
+c
+d 616 2 0 0 0
+c
+d 494 1 1 0 1
+c
+d 729 1 0 0 1
+c
+d 494 3 0 0 0
+c
+d 729 1 0 0 0
+c
+d 660 4 1 0 0
+c
+d 538 1 0 0 0
+c
+d 546 1 0 0 0
+c
+d 434 1 0 0 1
+c
+d 435 1 0 0 1
+c
+d 436 1 0 0 1
+c
+d 434 2 0 0 1
+c
+d 435 1 0 0 1
+c
+d 436 1 0 0 1
+c
+d 434 2 0 0 1
+c
+d 435 1 0 0 1
+c
+d 436 1 0 0 1
+c
+d 436 1 0 0 1
+c
+d 436 1 0 0 0
+c
+d 297 2 0 0 0
+c
+d 460 1 0 0 0
+c
+d 671 4 1 0 0
+c
+d 316 2 0 0 1
+c
+d 308 1 0 0 0
+c
+d 276 1 0 1 1
+c
+d 277 1 0 0 1
+c
+d 290 1 0 0 1
+c
+d 276 1 0 0 1
+c
+d 277 1 0 0 1
+c
+d 290 1 0 0 1
+c
+d 276 1 0 0 1
+c
+d 277 1 0 0 1
+c
+d 290 1 0 0 1
+c
+d 290 1 0 0 1
+c
+d 290 1 0 0 0
+c
+d 698 2 0 0 1
+c
+d 528 1 0 0 1
+c
+d 528 1 0 0 1
+c
+d 698 3 0 0 1
+c
+d 528 1 0 0 1
+c
+d 698 3 0 0 1
+c
+d 528 1 0 0 1
+c
+d 528 1 0 0 1
+c
+d 662 1 0 0 1
+c
+d 662 1 0 0 0
+c
+d 518 3 0 0 0
+c
+d 603 2 1 0 0
+c
+d 479 1 0 0 1
+c
+d 480 2 0 0 1
+c
+d 496 2 0 0 0
+c
+d 279 1 0 0 0
+c
+d 300 1 0 0 0
+c
+d 657 3 0 0 1
+c
+d 561 1 0 0 0
+c
+d 562 1 0 0 0
+c
+d 657 3 0 0 0
+c
+d 513 1 0 1 1
+c
+d 514 1 0 0 1
+c
+d 400 1 0 0 0
+c
+d 398 2 0 0 0
+c
+d 399 1 1 0 0
+c
+d 298 1 0 0 0
+c
+d 299 1 0 0 0
+c
+d 516 1 0 1 0
+c
+d 721 2 0 1 0
+c
+d 659 1 0 0 1
+c
+d 507 1 0 0 1
+c
+d 133 1 0 0 1
+c
+d 133 1 0 0 1
+c
+d 463 1 0 0 1
+c
+d 465 1 0 0 1
+c
+d 507 1 0 0 1
+c
+d 659 1 0 0 1
+c
+d 133 1 0 0 1
+c
+d 463 1 0 0 1
+c
+d 465 1 0 0 1
+c
+d 507 1 0 0 1
+c
+d 659 1 0 0 1
+c
+d 453 1 0 0 1
+c
+d 453 1 0 0 1
+c
+d 133 1 0 0 1
+c
+d 133 1 0 0 1
+c
+d 507 1 0 0 1
+c
+d 507 1 0 0 1
+c
+d 543 3 0 0 0
+c
+d 516 3 1 0 0
+c
+d 221 1 0 0 1
+c
+d 446 2 0 0 1
+c
+d 688 1 0 0 0
+c
+d 332 1 0 0 1
+c
+d 325 1 0 0 1
+c
+d 325 1 0 0 1
+c
+d 332 2 0 0 1
+c
+d 325 1 0 0 1
+c
+d 332 2 0 0 1
+c
+d 602 1 0 0 1
+c
+d 325 1 0 0 0
+c
+d 332 1 0 0 0
+c
+d 602 1 0 0 0
+c
+d 603 1 0 0 0
+c
+d 605 2 0 0 0
+c
+d 589 1 0 0 1
+c
+d 592 1 0 0 1
+c
+d 171 1 0 0 1
+c
+d 169 2 0 0 0
+c
+d 484 1 0 0 0
+c
+d 485 1 0 0 0
+c
+d 409 3 0 0 0
+c
+d 423 1 0 1 1
+c
+d 424 1 0 0 1
+c
+d 208 1 0 0 1
+c
+d 85 2 0 0 1
+c
+d 84 1 0 0 1
+c
+d 83 2 0 0 1
+c
+d 83 2 0 0 1
+c
+d 84 1 0 0 1
+c
+d 85 2 0 0 1
+c
+d 208 1 0 0 1
+c
+d 423 1 0 0 1
+c
+d 424 1 0 0 1
+c
+d 83 2 0 0 1
+c
+d 84 1 0 0 1
+c
+d 85 2 0 0 1
+c
+d 208 1 0 0 1
+c
+d 423 1 0 0 1
+c
+d 424 1 0 0 1
+c
+d 83 1 0 0 1
+c
+d 83 1 0 0 1
+c
+d 326 1 0 0 0
+c
+d 327 1 0 0 0
+c
+d 340 4 0 0 1
+c
+d 340 5 0 0 0
+c
+d 430 1 0 0 0
+c
+d 431 1 0 0 0
+c
+d 660 2 0 0 1
+c
+d 228 1 0 0 1
+c
+d 147 1 0 0 1
+c
+d 147 1 0 0 1
+c
+d 228 2 0 0 1
+c
+d 660 2 0 0 1
+c
+d 147 1 0 0 1
+c
+d 228 2 0 0 1
+c
+d 660 2 0 0 1
+c
+d 529 1 0 0 1
+c
+d 529 1 0 0 1
+c
+d 147 1 0 0 1
+c
+d 147 1 0 0 1
+c
+d 146 1 0 0 1
+c
+d 146 1 0 0 1
+c
+d 559 1 0 0 1
+c
+d 628 1 0 0 1
+c
+d 559 2 0 0 0
+c
+d 628 1 0 0 0
+c
+d 558 2 1 0 0
+c
+d 559 2 0 0 0
+c
+d 628 1 0 0 0
+c
+d 278 1 0 0 1
+c
+d 12 2 0 0 1
+c
+d 283 1 0 0 0
+c
+d 353 1 0 0 0
+c
+d 354 1 0 0 0
+c
+d 349 1 0 0 1
+c
+d 355 1 0 0 1
+c
+d 349 1 0 0 1
+c
+d 355 1 0 0 1
+c
+d 362 1 0 0 1
+c
+d 349 1 0 0 1
+c
+d 355 1 0 0 1
+c
+d 362 1 0 0 1
+c
+d 349 1 0 0 1
+c
+d 349 1 0 0 1
+c
+d 350 1 0 0 1
+c
+d 350 1 0 0 0
+c
+d 634 3 1 0 1
+c
+d 634 3 0 0 1
+c
+d 634 3 0 0 0
+c
+d 635 2 0 0 0
+c
+d 527 1 0 0 1
+c
+d 531 1 0 0 1
+c
+d 227 1 0 0 1
+c
+d 148 1 0 0 1
+c
+d 148 1 0 0 1
+c
+d 227 1 0 0 1
+c
+d 527 2 0 0 1
+c
+d 531 1 0 0 1
+c
+d 148 1 0 0 1
+c
+d 227 1 0 0 1
+c
+d 527 2 0 0 1
+c
+d 531 1 0 0 1
+c
+d 421 2 0 1 0
+c
+d 600 1 0 0 1
+c
+d 601 1 0 0 1
+c
+d 577 1 0 0 0
+c
+d 600 1 0 0 0
+c
+d 601 1 0 0 0
+c
+d 734 3 0 0 0
+c
+d 364 1 0 0 1
+c
+d 358 1 1 0 0
+c
+d 271 1 0 0 1
+c
+d 297 1 0 0 1
+c
+d 265 1 0 0 1
+c
+d 271 1 0 0 1
+c
+d 297 3 0 0 1
+c
+d 265 1 0 0 0
+c
+d 271 1 0 0 0
+c
+d 297 3 0 0 0
+c
+d 552 4 1 0 0
+c
+d 543 3 0 0 0
+c
+d 630 1 0 0 1
+c
+d 540 1 0 0 1
+c
+d 587 1 0 0 0
+c
+d 663 1 0 0 1
+c
+d 345 1 0 0 0
+c
+d 738 3 0 0 1
+c
+d 392 1 0 0 0
+c
+d 738 3 1 0 0
+c
+d 740 1 0 0 0
+c
+d 295 2 1 0 0
+c
+d 706 5 1 0 0
+c
+d 518 1 0 0 1
+c
+d 516 1 0 0 0
+c
+d 286 1 0 1 0
+c
+d 522 3 0 0 1
+c
+d 522 4 0 0 0
+c
+d 540 1 0 0 0
+c
+d 543 1 0 0 0
+c
+d 545 1 0 0 1
+c
+d 542 1 0 0 1
+c
+d 151 2 0 0 1
+c
+d 544 1 0 0 1
+c
+d 151 2 0 0 1
+c
+d 542 1 0 0 1
+c
+d 544 1 0 0 1
+c
+d 545 3 0 0 1
+c
+d 151 2 0 0 1
+c
+d 542 1 0 0 1
+c
+d 544 1 0 0 1
+c
+d 545 3 0 0 1
+c
+d 709 1 0 0 1
+c
+d 709 1 0 0 1
+c
+d 526 1 0 0 1
+c
+d 526 1 0 0 1
+c
+d 503 1 0 1 1
+c
+d 504 2 1 0 1
+c
+d 505 1 0 0 1
+c
+d 503 1 0 0 1
+c
+d 504 2 0 0 1
+c
+d 505 1 0 0 1
+c
+d 503 1 0 0 0
+c
+d 504 2 0 0 0
+c
+d 505 1 0 0 0
+c
+d 517 4 0 0 1
+c
+d 517 4 1 0 0
+c
+d 519 1 0 0 0
+c
+d 653 1 0 0 1
+c
+d 654 1 0 0 1
+c
+d 373 1 0 0 1
+c
+d 374 2 0 0 1
+c
+d 373 1 0 0 1
+c
+d 374 2 0 0 1
+c
+d 570 3 0 0 1
+c
+d 653 1 0 0 1
+c
+d 654 1 0 0 1
+c
+d 373 1 0 0 0
+c
+d 374 2 0 0 0
+c
+d 570 3 0 0 0
+c
+d 653 1 0 0 0
+c
+d 654 1 0 0 0
+c
+d 721 3 0 0 0
+c
+d 302 3 0 0 0
+c
+d 338 3 0 0 0
+c
+d 729 2 0 0 0
+c
+d 613 1 0 0 1
+c
+d 181 2 0 0 1
+c
+d 174 2 0 0 1
+c
+d 172 1 0 0 0
+c
+d 211 1 0 0 1
+c
+d 419 1 0 0 1
+c
+d 91 1 0 0 1
+c
+d 90 1 0 0 1
+c
+d 90 1 0 0 1
+c
+d 91 1 0 0 1
+c
+d 211 2 0 0 1
+c
+d 419 1 0 0 1
+c
+d 90 1 0 0 1
+c
+d 91 1 0 0 1
+c
+d 211 2 0 0 1
+c
+d 419 1 0 0 1
+c
+d 330 1 0 0 1
+c
+d 330 1 0 0 1
+c
+d 663 2 0 0 1
+c
+d 663 3 0 0 1
+c
+d 632 1 0 0 0
+c
+d 663 3 0 0 0
+c
+d 378 1 0 1 1
+c
+d 379 1 0 0 1
+c
+d 518 1 0 0 1
+c
+d 378 1 0 0 0
+c
+d 379 2 0 0 0
+c
+d 518 1 0 0 0
+c
+d 189 1 0 0 1
+c
+d 28 1 0 0 1
+c
+d 26 1 0 0 1
+c
+d 343 1 0 0 1
+c
+d 26 1 0 0 1
+c
+d 28 1 0 0 1
+c
+d 189 1 0 0 1
+c
+d 337 1 0 0 1
+c
+d 343 1 0 0 1
+c
+d 26 1 0 0 1
+c
+d 28 1 0 0 1
+c
+d 189 1 0 0 1
+c
+d 337 1 0 0 1
+c
+d 343 1 0 0 1
+c
+d 635 1 0 0 1
+c
+d 635 1 0 0 1
+c
+d 28 2 0 0 1
+c
+d 28 2 0 0 1
+c
+d 27 1 0 0 1
+c
+d 27 1 0 0 1
+c
+d 483 3 0 0 1
+c
+d 498 1 0 0 1
+c
+d 550 1 0 0 0
+c
+d 692 3 1 0 1
+c
+d 692 3 0 0 0
+c
+d 752 2 0 0 1
+c
+d 752 3 0 0 0
+c
+d 326 1 0 0 0
+c
+d 327 1 0 0 0
+c
+d 603 1 0 0 0
+c
+d 314 2 0 0 0
+c
+d 626 1 0 0 1
+c
+d 627 2 0 0 1
+c
+d 626 1 0 0 0
+c
+d 627 3 0 0 0
+c
+d 648 1 0 0 1
+c
+d 306 1 0 0 0
+c
+d 580 1 0 1 0
+c
+d 581 1 0 0 0
+c
+d 582 1 0 0 0
+c
+d 610 1 0 0 1
+c
+d 333 1 0 0 1
+c
+d 333 1 0 0 1
+c
+d 608 2 0 0 1
+c
+d 610 1 0 0 1
+c
+d 333 1 0 0 1
+c
+d 608 2 0 0 1
+c
+d 610 1 0 0 1
+c
+d 610 1 0 0 1
+c
+d 610 1 0 0 0
+c
+d 628 1 0 0 0
+c
+d 629 1 0 0 0
+c
+d 537 2 1 0 1
+c
+d 547 1 0 0 0
+c
+d 558 4 0 0 0
+c
+d 552 3 1 0 0
+c
+d 416 1 0 0 1
+c
+d 737 1 0 0 1
+c
+d 75 1 0 0 1
+c
+d 75 1 0 0 1
+c
+d 416 1 0 0 1
+c
+d 736 1 1 0 1
+c
+d 737 3 0 0 1
+c
+d 75 1 0 0 1
+c
+d 416 1 0 0 1
+c
+d 736 4 0 0 1
+c
+d 737 3 0 0 1
+c
+d 294 2 1 0 1
+c
+d 294 2 0 0 1
+c
+d 279 2 0 0 0
+c
+d 294 2 0 0 0
+c
+d 483 1 0 0 0
+c
+d 500 2 0 0 0
+c
+d 647 2 0 0 1
+c
+d 65 2 0 0 1
+c
+d 318 1 0 0 1
+c
+d 63 1 0 0 1
+c
+d 63 1 0 0 1
+c
+d 65 2 0 0 1
+c
+d 318 1 0 0 1
+c
+d 647 2 0 0 1
+c
+d 734 1 0 0 1
+c
+d 735 1 0 0 1
+c
+d 63 1 0 0 1
+c
+d 65 2 0 0 1
+c
+d 318 1 0 0 1
+c
+d 647 2 0 0 1
+c
+d 734 1 0 0 1
+c
+d 735 1 0 0 1
+c
+d 65 1 0 0 1
+c
+d 65 1 0 0 1
+c
+d 318 1 0 0 1
+c
+d 318 1 0 0 1
+c
+d 436 3 0 0 1
+c
+d 744 1 0 0 0
+c
+d 643 2 0 0 1
+c
+d 397 1 0 0 0
+c
+d 366 1 0 0 1
+c
+d 525 1 0 0 1
+c
+d 369 1 0 0 1
+c
+d 234 1 0 0 1
+c
+d 366 1 0 0 1
+c
+d 369 1 0 0 1
+c
+d 525 1 0 0 1
+c
+d 234 1 0 0 1
+c
+d 366 1 0 0 1
+c
+d 369 1 0 0 1
+c
+d 525 1 0 0 1
+c
+d 704 1 0 0 1
+c
+d 704 1 0 0 1
+c
+d 585 1 0 0 1
+c
+d 585 1 0 0 1
+c
+d 525 1 0 0 1
+c
+d 522 3 0 0 1
+c
+d 525 1 0 0 1
+c
+d 704 1 0 0 1
+c
+d 366 3 0 1 0
+c
+d 383 1 0 1 1
+c
+d 377 1 0 0 1
+c
+d 377 1 0 0 1
+c
+d 383 1 0 0 1
+c
+d 377 1 0 0 0
+c
+d 383 1 0 0 0
+c
+d 685 2 0 0 1
+c
+d 532 1 0 0 0
+c
+d 685 2 1 0 0
+c
+d 415 2 0 0 1
+c
+d 411 1 0 0 0
+c
+d 36 1 0 0 1
+c
+d 347 1 0 0 1
+c
+d 34 2 0 0 1
+c
+d 336 1 0 0 1
+c
+d 22 1 0 0 0
+c
+d 239 1 0 0 1
+c
+d 606 1 0 0 0
+c
+d 607 1 0 0 0
+c
+d 677 1 0 0 1
+c
+d 247 1 0 0 1
+c
+d 672 1 0 0 0
+c
+d 121 1 0 0 1
+c
+d 120 1 0 0 1
+c
+d 119 1 0 0 1
+c
+d 118 1 0 0 1
+c
+d 117 1 0 0 0
+c
+d 280 1 0 0 1
+c
+d 281 1 0 0 1
+c
+d 280 2 0 0 0
+c
+d 281 1 0 0 0
+c
+d 686 1 0 1 1
+c
+d 430 1 0 0 1
+c
+d 57 1 0 0 1
+c
+d 57 1 0 0 1
+c
+d 430 1 0 0 1
+c
+d 686 1 0 0 1
+c
+d 57 1 0 0 1
+c
+d 430 1 0 0 1
+c
+d 686 1 0 0 1
+c
+d 640 1 0 0 1
+c
+d 640 1 0 0 1
+c
+d 381 1 0 0 1
+c
+d 381 1 0 0 1
+c
+d 313 2 0 0 1
+c
+d 316 1 0 0 0
+c
+d 585 3 1 0 1
+c
+d 576 1 0 0 1
+c
+d 585 3 0 0 1
+c
+d 586 1 0 0 1
+c
+d 575 2 0 0 0
+c
+d 576 1 0 0 0
+c
+d 585 3 0 0 0
+c
+d 586 1 0 0 0
+c
+d 584 1 0 0 0
+c
+d 628 1 0 0 0
+c
+d 558 4 0 0 1
+c
+d 540 1 0 0 0
+c
+d 558 4 0 0 0
+c
+d 475 1 0 0 1
+c
+d 654 1 0 0 1
+c
+d 475 2 0 0 1
+c
+d 654 1 0 0 1
+c
+d 475 2 0 0 0
+c
+d 654 1 0 0 0
+c
+d 538 2 0 0 1
+c
+d 155 1 0 0 0
+c
+d 484 1 0 0 1
+c
+d 487 1 0 0 1
+c
+d 484 1 0 0 1
+c
+d 487 1 0 0 1
+c
+d 488 1 0 0 1
+c
+d 484 1 0 0 1
+c
+d 487 1 0 0 1
+c
+d 488 1 0 0 1
+c
+d 222 2 0 0 1
+c
+d 222 2 0 0 1
+c
+d 484 2 0 0 1
+c
+d 484 2 0 0 0
+c
+d 385 2 0 0 1
+c
+d 387 1 0 0 1
+c
+d 411 1 0 1 0
+c
+d 477 1 0 0 1
+c
+d 489 1 0 0 1
+c
+d 477 1 0 0 1
+c
+d 487 1 0 0 1
+c
+d 489 1 0 0 1
+c
+d 477 1 0 0 0
+c
+d 487 1 0 0 0
+c
+d 488 1 0 0 0
+c
+d 489 2 0 0 0
+c
+d 302 1 0 0 1
+c
+d 294 2 0 0 0
+c
+d 663 4 1 0 0
+c
+d 554 1 0 1 1
+c
+d 555 1 0 0 1
+c
+d 553 2 0 0 0
+c
+d 554 2 0 0 0
+c
+d 555 2 0 0 0
+c
+d 541 3 1 0 0
+c
+d 585 2 0 0 1
+c
+d 585 3 0 0 0
+c
+d 268 3 0 0 1
+c
+d 268 4 0 0 0
+c
+d 647 1 0 0 1
+c
+d 408 1 0 0 1
+c
+d 408 1 0 0 1
+c
+d 647 2 0 0 1
+c
+d 408 1 0 0 1
+c
+d 647 2 0 0 1
+c
+d 318 1 0 0 1
+c
+d 318 1 0 0 1
+c
+d 64 1 0 0 1
+c
+d 64 1 0 0 0
+c
+d 340 3 0 0 0
+c
+d 611 4 1 0 0
+c
+d 345 1 0 0 0
+c
+d 347 1 0 0 0
+c
+d 338 1 0 0 1
+c
+d 339 1 0 0 1
+c
+d 634 1 0 0 1
+c
+d 337 1 0 0 1
+c
+d 338 1 0 0 1
+c
+d 339 1 0 0 1
+c
+d 634 2 0 0 1
+c
+d 337 1 0 0 0
+c
+d 338 1 0 0 0
+c
+d 339 1 0 0 0
+c
+d 634 2 0 0 0
+c
+d 635 1 0 0 0
+c
+d 668 1 0 0 1
+c
+d 593 1 0 0 0
+c
+d 425 4 0 0 0
+c
+d 427 3 0 0 0
+c
+d 302 3 0 0 1
+c
+d 294 1 0 0 0
+c
+d 302 3 0 0 0
+c
+d 749 1 0 0 0
+c
+d 699 1 0 1 1
+c
+d 700 1 0 0 1
+c
+d 383 1 0 0 1
+c
+d 384 1 0 0 1
+c
+d 383 1 0 0 1
+c
+d 384 1 0 0 1
+c
+d 638 1 0 0 1
+c
+d 699 1 0 0 1
+c
+d 700 1 0 0 1
+c
+d 383 1 0 0 0
+c
+d 384 1 0 0 0
+c
+d 638 1 0 0 0
+c
+d 699 1 0 0 0
+c
+d 700 1 0 0 0
+c
+d 345 2 0 0 1
+c
+d 347 1 0 0 1
+c
+d 345 3 0 0 1
+c
+d 347 1 0 0 1
+c
+d 345 3 0 0 0
+c
+d 347 1 0 0 0
+c
+d 632 1 0 0 0
+c
+d 508 1 0 0 0
+c
+d 725 1 0 0 0
+c
+d 725 1 1 0 0
+c
+d 726 1 0 0 0
+c
+d 562 1 0 0 0
+c
+d 572 1 0 1 0
+c
+d 665 1 0 1 0
+c
+d 710 2 0 0 0
+c
+d 309 2 0 0 1
+c
+d 315 1 0 0 0
+c
+d 567 1 0 0 1
+c
+d 568 1 0 0 1
+c
+d 585 2 0 0 0
+c
+d 599 3 0 0 0
+c
+d 376 3 1 0 0
+c
+d 291 1 0 0 1
+c
+d 747 1 0 0 1
+c
+d 748 1 0 0 1
+c
+d 14 1 0 0 1
+c
+d 3 2 0 0 0
+c
+d 314 1 0 1 1
+c
+d 315 2 0 0 1
+c
+d 306 6 0 0 1
+c
+d 314 2 0 0 1
+c
+d 315 2 0 0 1
+c
+d 306 6 0 0 0
+c
+d 314 2 0 0 0
+c
+d 315 2 0 0 0
+c
+d 275 3 0 0 0
+c
+d 518 1 0 0 0
+c
+d 519 1 0 0 0
+c
+d 648 2 0 0 0
+c
+d 558 3 0 0 0
+c
+d 279 1 0 0 0
+c
+d 300 1 0 0 0
+c
+d 302 1 0 0 0
+c
+d 220 1 0 0 1
+c
+d 114 2 0 0 1
+c
+d 109 1 0 0 1
+c
+d 108 1 0 0 1
+c
+d 449 1 0 0 1
+c
+d 108 1 0 0 1
+c
+d 109 1 0 0 1
+c
+d 114 2 0 0 1
+c
+d 220 2 0 0 1
+c
+d 449 1 0 0 1
+c
+d 108 1 0 0 1
+c
+d 109 1 0 0 1
+c
+d 114 2 0 0 1
+c
+d 220 2 0 0 1
+c
+d 449 1 0 0 1
+c
+d 219 2 0 0 1
+c
+d 219 2 0 0 1
+c
+d 108 1 0 0 1
+c
+d 108 1 0 0 1
+c
+d 338 1 1 0 0
+c
+d 339 2 0 0 0
+c
+d 642 1 0 0 1
+c
+d 661 1 0 0 1
+c
+d 662 1 0 0 1
+c
+d 231 1 0 0 1
+c
+d 230 2 0 0 0
+c
+d 748 2 1 0 0
+c
+d 510 1 0 1 0
+c
+d 511 1 0 0 0
+c
+d 538 1 0 0 0
+c
+d 447 4 0 0 1
+c
+d 441 1 0 0 0
+c
+d 447 4 1 0 0
+c
+d 497 1 0 0 1
+c
+d 132 1 0 0 1
+c
+d 132 1 0 0 1
+c
+d 497 2 0 0 1
+c
+d 132 1 0 0 1
+c
+d 497 2 0 0 1
+c
+d 483 1 0 0 1
+c
+d 492 1 0 0 1
+c
+d 483 1 0 0 0
+c
+d 492 1 0 0 0
+c
+d 698 2 0 0 1
+c
+d 698 3 0 0 0
+c
+d 576 2 0 0 0
+c
+d 578 1 0 0 0
+c
+d 648 1 0 0 0
+c
+d 693 1 0 0 0
+c
+d 494 1 0 0 1
+c
+d 421 1 0 0 1
+c
+d 422 1 0 0 1
+c
+d 451 1 0 0 0
+c
+d 484 1 0 0 0
+c
+d 295 1 0 0 1
+c
+d 6 1 0 0 1
+c
+d 279 1 0 0 1
+c
+d 5 1 0 0 0
+c
+d 432 1 0 0 1
+c
+d 426 1 0 0 1
+c
+d 100 2 0 0 1
+c
+d 99 2 0 0 1
+c
+d 98 2 0 0 1
+c
+d 98 2 0 0 1
+c
+d 99 2 0 0 1
+c
+d 100 2 0 0 1
+c
+d 426 2 0 0 1
+c
+d 432 1 0 0 1
+c
+d 98 2 0 0 1
+c
+d 99 2 0 0 1
+c
+d 100 2 0 0 1
+c
+d 426 2 0 0 1
+c
+d 432 1 0 0 1
+c
+d 98 1 0 0 1
+c
+d 98 1 0 0 1
+c
+d 34 1 0 0 1
+c
+d 31 1 0 0 1
+c
+d 23 1 0 0 1
+c
+d 337 1 0 0 1
+c
+d 22 1 0 0 1
+c
+d 22 1 0 0 1
+c
+d 23 1 0 0 1
+c
+d 31 1 0 0 1
+c
+d 34 1 0 0 1
+c
+d 192 2 0 0 1
+c
+d 337 1 0 0 1
+c
+d 22 1 0 0 1
+c
+d 23 1 0 0 1
+c
+d 31 1 0 0 1
+c
+d 34 1 0 0 1
+c
+d 192 2 0 0 1
+c
+d 337 1 0 0 1
+c
+d 36 1 0 0 1
+c
+d 36 1 0 0 1
+c
+d 35 2 0 0 1
+c
+d 35 2 0 0 1
+c
+d 34 1 0 0 1
+c
+d 34 1 0 0 1
+c
+d 32 1 0 0 1
+c
+d 31 2 0 0 1
+c
+d 32 1 0 0 1
+c
+d 192 1 0 0 1
+c
+d 337 1 0 0 1
+c
+d 31 1 1 0 0
+c
+d 431 1 0 0 1
+c
+d 432 1 0 0 1
+c
+d 425 1 0 1 1
+c
+d 425 2 0 0 1
+c
+d 431 1 0 0 1
+c
+d 432 1 0 0 1
+c
+d 425 2 0 0 1
+c
+d 431 1 0 0 1
+c
+d 432 1 0 0 1
+c
+d 101 2 0 0 1
+c
+d 101 2 0 0 1
+c
+d 432 2 0 0 1
+c
+d 101 1 0 0 0
+c
+d 425 1 0 0 0
+c
+d 432 2 0 0 0
+c
+d 515 1 0 0 0
+c
+d 518 1 0 0 0
+c
+d 724 3 0 1 0
+c
+d 614 1 0 0 1
+c
+d 628 1 0 0 1
+c
+d 614 2 0 0 1
+c
+d 628 1 0 0 1
+c
+d 631 2 0 0 1
+c
+d 614 2 0 0 0
+c
+d 628 1 0 0 0
+c
+d 631 2 0 0 0
+c
+d 242 1 0 0 1
+c
+d 589 1 0 0 1
+c
+d 185 1 0 0 1
+c
+d 170 1 0 0 0
+c
+d 685 2 0 0 0
+c
+d 686 1 0 0 0
+c
+d 476 1 0 0 1
+c
+d 569 1 0 0 1
+c
+d 373 2 1 0 0
+c
+d 270 2 0 0 0
+c
+d 685 3 0 0 1
+c
+d 685 4 0 0 0
+c
+d 659 1 0 0 1
+c
+d 452 1 0 1 0
+c
+d 453 1 0 0 0
+c
+d 494 2 1 0 1
+c
+d 421 1 0 0 0
+c
+d 513 1 1 0 1
+c
+d 514 1 0 0 1
+c
+d 513 2 0 0 0
+c
+d 514 1 0 0 0
+c
+d 561 3 0 0 1
+c
+d 232 1 0 0 1
+c
+d 232 1 0 0 1
+c
+d 561 4 0 0 1
+c
+d 232 1 0 0 0
+c
+d 561 4 0 0 0
+c
+d 336 1 0 0 1
+c
+d 23 1 0 0 1
+c
+d 22 2 0 0 1
+c
+d 22 2 0 0 1
+c
+d 23 1 0 0 1
+c
+d 336 1 0 0 1
+c
+d 337 2 0 0 1
+c
+d 22 2 0 0 1
+c
+d 23 1 0 0 1
+c
+d 336 1 0 0 1
+c
+d 337 2 0 0 1
+c
+d 23 2 0 0 1
+c
+d 23 2 0 0 1
+c
+d 561 2 0 0 0
+c
+d 279 1 0 0 0
+c
+d 282 1 1 0 0
+c
+d 286 1 0 0 0
+c
+d 288 1 0 0 0
+c
+d 516 2 0 0 0
+c
+d 721 1 0 0 0
+c
+d 722 1 0 0 0
+c
+d 494 2 0 1 0
+c
+d 671 1 1 0 1
+c
+d 626 1 0 0 0
+c
+d 627 1 0 0 0
+c
+d 614 2 0 0 0
+c
+d 671 1 0 0 0
+c
+d 593 1 0 0 1
+c
+d 596 1 0 0 1
+c
+d 598 1 0 0 1
+c
+d 593 2 0 0 1
+c
+d 594 2 0 0 1
+c
+d 595 1 0 0 1
+c
+d 596 1 0 0 1
+c
+d 598 1 0 0 1
+c
+d 593 2 0 0 0
+c
+d 594 2 0 0 0
+c
+d 595 1 0 0 0
+c
+d 596 1 0 0 0
+c
+d 598 1 0 0 0
+c
+d 710 2 0 0 0
+c
+d 338 3 0 0 1
+c
+d 338 4 0 0 0
+c
+d 459 3 0 0 1
+c
+d 458 2 0 0 0
+c
+d 459 3 1 0 0
+c
+d 621 2 0 1 0
+c
+d 622 1 0 1 0
+c
+d 411 1 0 0 1
+c
+d 415 1 0 0 1
+c
+d 73 1 0 0 1
+c
+d 414 1 0 0 1
+c
+d 69 1 0 0 1
+c
+d 69 1 0 0 1
+c
+d 73 1 0 0 1
+c
+d 411 1 0 0 1
+c
+d 414 1 0 0 1
+c
+d 415 1 0 0 1
+c
+d 737 1 0 0 1
+c
+d 69 1 0 0 1
+c
+d 73 1 0 0 1
+c
+d 411 1 0 0 1
+c
+d 414 1 0 0 1
+c
+d 415 1 0 0 1
+c
+d 737 1 0 0 1
+c
+d 415 1 0 0 1
+c
+d 415 1 0 0 1
+c
+d 75 2 0 0 1
+c
+d 75 2 0 0 1
+c
+d 557 4 0 0 0
+c
+d 292 1 0 0 1
+c
+d 293 1 0 0 1
+c
+d 8 2 0 0 0
+c
+d 500 1 0 0 0
+c
+d 271 2 1 0 0
+c
+d 459 1 0 0 0
+c
+d 460 1 0 0 0
+c
+d 713 1 0 0 1
+c
+d 714 1 0 0 1
+c
+d 537 1 0 0 0
+c
+d 376 2 0 0 0
+c
+d 651 2 0 0 0
+c
+d 614 1 0 0 0
+c
+d 631 1 0 0 0
+c
+d 513 3 0 0 0
+c
+d 514 1 0 0 0
+c
+d 535 2 1 0 1
+c
+d 536 1 0 0 1
+c
+d 511 1 0 0 0
+c
+d 385 4 0 0 1
+c
+d 205 1 0 0 1
+c
+d 205 1 0 0 1
+c
+d 385 4 0 0 1
+c
+d 416 1 0 0 1
+c
+d 205 1 0 0 1
+c
+d 385 4 0 0 1
+c
+d 416 1 0 0 1
+c
+d 385 1 0 0 1
+c
+d 736 1 0 0 1
+c
+d 737 1 0 0 1
+c
+d 385 1 0 0 0
+c
+d 736 1 0 0 0
+c
+d 737 1 0 0 0
+c
+d 376 3 0 0 0
+c
+d 459 1 0 1 0
+c
+d 494 2 0 1 0
+c
+d 267 1 0 0 0
+c
+d 753 1 0 0 0
+c
+d 575 2 0 0 1
+c
+d 585 1 0 0 0
+c
+d 584 1 0 0 0
+c
+d 593 1 0 1 0
+c
+d 595 1 0 0 0
+c
+d 571 3 0 0 1
+c
+d 585 1 0 0 1
+c
+d 571 4 0 0 1
+c
+d 585 1 0 0 1
+c
+d 571 4 0 0 0
+c
+d 585 1 0 0 0
+c
+d 366 2 0 0 1
+c
+d 366 2 0 0 0
+c
+d 530 2 0 0 0
+c
+d 376 3 0 0 0
+c
+d 409 1 0 0 1
+c
+d 407 2 0 0 1
+c
+d 407 3 0 0 1
+c
+d 409 1 0 0 1
+c
+d 644 1 0 0 1
+c
+d 407 3 0 0 0
+c
+d 409 1 0 0 0
+c
+d 644 1 0 0 0
+c
+d 342 1 0 0 1
+c
+d 338 2 0 0 0
+c
+d 533 1 0 0 1
+c
+d 534 1 0 0 1
+c
+d 660 1 0 0 1
+c
+d 533 1 0 0 1
+c
+d 534 1 0 0 1
+c
+d 660 1 0 0 1
+c
+d 685 1 0 0 1
+c
+d 533 1 0 0 1
+c
+d 534 1 0 0 1
+c
+d 660 1 0 0 1
+c
+d 685 1 0 0 1
+c
+d 533 1 0 0 1
+c
+d 533 1 0 0 1
+c
+d 660 2 0 0 1
+c
+d 660 2 0 0 1
+c
+d 613 1 0 0 1
+c
+d 614 1 0 1 1
+c
+d 613 1 0 0 1
+c
+d 614 1 0 0 1
+c
+d 615 1 0 0 1
+c
+d 613 1 0 0 1
+c
+d 614 1 0 0 1
+c
+d 615 1 0 0 1
+c
+d 241 1 0 0 1
+c
+d 241 1 0 0 0
+c
+d 620 3 0 0 0
+c
+d 585 1 0 0 1
+c
+d 586 1 1 0 1
+c
+d 585 1 0 0 0
+c
+d 586 2 0 0 0
+c
+d 360 1 0 0 0
+c
+d 361 1 0 0 0
+c
+d 541 3 0 0 0
+c
+d 542 1 0 0 0
+c
+d 508 1 0 0 0
+c
+d 724 1 0 0 0
+c
+d 725 1 0 0 0
+c
+d 581 1 0 0 1
+c
+d 606 1 0 0 0
+c
+d 607 1 0 0 0
+c
+d 376 1 0 0 1
+c
+d 375 1 0 0 1
+c
+d 304 1 0 0 0
+c
+d 19 2 0 0 1
+c
+d 18 2 1 0 1
+c
+d 304 3 0 0 1
+c
+d 306 1 0 0 1
+c
+d 18 2 0 0 1
+c
+d 19 2 0 0 1
+c
+d 304 3 0 0 1
+c
+d 306 1 0 0 1
+c
+d 18 2 0 0 1
+c
+d 19 2 0 0 1
+c
+d 304 3 0 0 1
+c
+d 306 1 0 0 1
+c
+d 17 1 0 0 1
+c
+d 17 1 0 0 1
+c
+d 518 2 0 0 0
+c
+d 656 3 1 0 1
+c
+d 644 1 0 0 1
+c
+d 644 1 0 0 1
+c
+d 656 3 0 0 1
+c
+d 644 1 0 0 1
+c
+d 656 3 0 0 1
+c
+d 411 2 0 0 1
+c
+d 731 1 0 0 1
+c
+d 411 2 0 0 0
+c
+d 644 1 0 0 0
+c
+d 731 1 0 0 0
+c
+d 617 2 0 0 0
+c
+d 674 1 0 1 1
+c
+d 243 1 0 0 1
+c
+d 672 1 0 0 1
+c
+d 243 1 0 0 1
+c
+d 672 2 0 0 1
+c
+d 674 1 0 0 1
+c
+d 674 3 1 0 0
+c
+d 496 2 0 1 1
+c
+d 479 1 0 0 1
+c
+d 479 1 0 0 1
+c
+d 496 2 0 0 1
+c
+d 479 3 0 0 0
+c
+d 480 1 0 0 0
+c
+d 496 2 0 0 0
+c
+d 512 1 1 0 1
+c
+d 721 1 0 0 0
+c
+d 622 1 0 0 1
+c
+d 624 1 0 0 1
+c
+d 597 1 0 0 0
+c
+d 430 1 0 0 0
+c
+d 431 1 0 1 0
+c
+d 353 1 0 0 1
+c
+d 370 1 0 0 1
+c
+d 361 1 0 0 0
+c
+d 291 2 0 0 1
+c
+d 4 1 0 0 0
+c
+d 562 1 0 1 1
+c
+d 573 1 0 0 1
+c
+d 574 1 0 0 1
+c
+d 562 1 0 0 0
+c
+d 573 1 0 0 0
+c
+d 574 2 0 0 0
+c
+d 613 2 0 0 0
+c
+d 742 4 0 0 0
+c
+d 639 1 0 0 1
+c
+d 380 2 0 0 1
+c
+d 200 1 0 0 1
+c
+d 380 2 0 0 1
+c
+d 639 1 0 0 1
+c
+d 200 1 0 0 0
+c
+d 380 2 0 0 0
+c
+d 639 1 0 0 0
+c
+d 558 4 0 0 1
+c
+d 552 1 0 0 0
+c
+d 556 1 0 0 0
+c
+d 558 4 1 0 0
+c
+d 739 4 0 0 0
+c
+d 749 1 0 0 0
+c
+d 314 2 0 0 0
+c
+d 296 1 0 0 1
+c
+d 279 1 0 0 1
+c
+d 6 2 0 0 1
+c
+d 6 2 0 0 1
+c
+d 15 1 0 0 1
+c
+d 279 1 0 0 1
+c
+d 296 1 0 0 1
+c
+d 6 2 0 0 1
+c
+d 15 1 0 0 1
+c
+d 279 1 0 0 1
+c
+d 296 1 0 0 1
+c
+d 747 1 0 0 1
+c
+d 747 1 0 0 1
+c
+d 279 1 0 0 1
+c
+d 300 1 0 0 1
+c
+d 279 1 0 0 1
+c
+d 300 1 0 0 1
+c
+d 644 1 0 0 1
+c
+d 409 1 0 0 1
+c
+d 66 1 0 0 0
+c
+d 558 2 0 0 0
+c
+d 251 1 1 0 1
+c
+d 191 1 0 0 1
+c
+d 190 1 0 0 1
+c
+d 189 2 0 0 1
+c
+d 344 1 0 0 1
+c
+d 28 1 0 0 1
+c
+d 27 2 0 0 1
+c
+d 27 2 0 0 1
+c
+d 28 1 0 0 1
+c
+d 189 2 0 0 1
+c
+d 190 2 0 0 1
+c
+d 191 1 0 0 1
+c
+d 344 1 0 0 1
+c
+d 27 2 0 0 1
+c
+d 28 1 0 0 1
+c
+d 189 2 0 0 1
+c
+d 190 2 0 0 1
+c
+d 191 1 0 0 1
+c
+d 344 1 0 0 1
+c
+d 337 1 0 0 1
+c
+d 337 1 0 0 1
+c
+d 30 1 0 0 1
+c
+d 30 1 0 0 1
+c
+d 29 2 0 0 1
+c
+d 29 2 0 0 1
+c
+d 357 1 0 0 0
+c
+d 358 1 0 0 0
+c
+d 615 1 0 0 1
+c
+d 671 1 0 0 1
+c
+d 626 1 0 0 0
+c
+d 749 3 0 0 0
+c
+d 345 3 0 1 0
+c
+d 338 2 0 0 1
+c
+d 344 2 0 0 1
+c
+d 189 1 0 0 1
+c
+d 338 2 0 0 1
+c
+d 344 2 0 0 1
+c
+d 189 1 0 0 1
+c
+d 338 2 0 0 1
+c
+d 344 2 0 0 1
+c
+d 342 1 0 0 1
+c
+d 342 1 0 0 1
+c
+d 343 1 0 0 1
+c
+d 344 1 0 0 1
+c
+d 343 1 0 0 0
+c
+d 344 1 0 0 0
+c
+d 679 1 0 0 1
+c
+d 250 1 0 0 1
+c
+d 682 1 0 0 1
+c
+d 676 1 0 0 1
+c
+d 326 1 0 0 1
+c
+d 580 1 0 0 1
+c
+d 601 1 0 0 1
+c
+d 666 1 0 0 0
+c
+d 721 1 0 0 1
+c
+d 515 1 0 0 0
+c
+d 452 1 0 1 0
+c
+d 455 2 0 0 0
+c
+d 265 1 0 0 1
+c
+d 297 1 0 0 1
+c
+d 265 2 0 0 0
+c
+d 297 1 0 0 0
+c
+d 491 3 0 0 0
+c
+d 713 3 0 0 0
+c
+d 383 2 0 1 0
+c
+d 628 2 0 0 0
+c
+d 629 1 0 0 0
+c
+d 652 1 0 0 1
+c
+d 456 1 0 0 1
+c
+d 446 1 0 0 1
+c
+d 456 1 0 0 1
+c
+d 652 1 0 0 1
+c
+d 446 1 0 0 0
+c
+d 456 1 0 0 0
+c
+d 652 1 0 0 0
+c
+d 437 4 0 0 1
+c
+d 440 1 0 0 0
+c
+d 358 3 0 0 0
+c
+d 279 3 0 0 0
+c
+d 281 1 0 0 0
+c
+d 233 1 0 0 1
+c
+d 576 1 0 0 1
+c
+d 571 1 0 1 0
+c
+d 747 2 0 0 0
+c
+d 267 2 0 0 1
+c
+d 752 1 0 0 0
+c
+d 476 1 0 0 1
+c
+d 569 1 0 0 0
+c
+d 449 2 0 0 0
+c
+d 385 3 0 0 0
+c
+d 224 1 0 0 1
+c
+d 523 1 0 0 1
+c
+d 525 2 0 0 1
+c
+d 366 1 0 0 0
+c
+d 509 1 0 0 1
+c
+d 508 1 0 0 1
+c
+d 508 1 0 0 1
+c
+d 509 2 0 0 1
+c
+d 508 1 0 0 0
+c
+d 509 2 0 0 0
+c
+d 593 1 0 0 1
+c
+d 596 1 0 0 1
+c
+d 598 1 0 0 1
+c
+d 235 1 0 0 1
+c
+d 593 1 0 0 1
+c
+d 596 1 0 0 1
+c
+d 598 1 0 0 1
+c
+d 235 1 0 0 1
+c
+d 593 1 0 0 1
+c
+d 596 1 0 0 1
+c
+d 598 1 0 0 1
+c
+d 598 1 0 0 1
+c
+d 235 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 593 2 0 0 0
+c
+d 597 2 0 0 0
+c
+d 598 1 0 0 0
+c
+d 572 1 0 0 1
+c
+d 585 1 0 0 0
+c
+d 319 3 0 0 1
+c
+d 319 3 0 0 0
+c
+d 321 1 0 0 0
+c
+d 369 1 0 0 1
+c
+d 370 1 0 0 1
+c
+d 371 2 0 0 1
+c
+d 366 1 0 0 0
+c
+d 369 1 0 0 0
+c
+d 370 1 0 0 0
+c
+d 371 2 0 0 0
+c
+d 292 2 0 0 1
+c
+d 293 1 0 0 1
+c
+d 13 2 0 0 0
+c
+d 692 2 0 1 0
+c
+d 478 1 0 0 1
+c
+d 496 2 0 0 1
+c
+d 478 1 0 0 1
+c
+d 496 4 0 0 1
+c
+d 414 1 0 0 0
+c
+d 478 1 0 0 0
+c
+d 496 4 0 0 0
+c
+d 537 2 0 0 0
+c
+d 663 1 0 0 0
+c
+d 332 3 1 0 1
+c
+d 602 1 0 0 1
+c
+d 332 3 0 0 1
+c
+d 580 1 0 0 1
+c
+d 602 1 0 0 1
+c
+d 332 3 0 0 1
+c
+d 580 1 0 0 1
+c
+d 602 1 0 0 1
+c
+d 325 1 0 0 1
+c
+d 325 1 0 0 0
+c
+d 326 1 0 0 0
+c
+d 494 2 0 1 0
+c
+d 552 4 0 0 1
+c
+d 232 2 0 0 1
+c
+d 552 4 1 0 1
+c
+d 232 2 0 0 0
+c
+d 552 5 0 0 0
+c
+d 518 2 0 1 0
+c
+d 718 1 0 1 0
+c
+d 375 1 0 0 1
+c
+d 379 1 0 0 1
+c
+d 198 1 0 0 1
+c
+d 375 1 0 0 1
+c
+d 379 1 0 0 1
+c
+d 198 1 0 0 0
+c
+d 375 1 0 1 0
+c
+d 376 1 0 0 0
+c
+d 379 1 0 1 0
+c
+d 299 3 0 0 0
+c
+d 707 3 0 0 1
+c
+d 340 1 0 0 1
+c
+d 707 3 0 0 1
+c
+d 340 1 0 0 0
+c
+d 633 1 0 0 0
+c
+d 707 3 0 0 0
+c
+d 577 1 0 0 1
+c
+d 600 1 0 0 1
+c
+d 167 1 0 0 1
+c
+d 167 1 0 0 1
+c
+d 577 1 0 0 1
+c
+d 580 2 0 0 1
+c
+d 600 1 0 0 1
+c
+d 167 1 0 0 1
+c
+d 577 1 0 0 1
+c
+d 580 2 0 0 1
+c
+d 600 1 0 0 1
+c
+d 167 2 0 0 1
+c
+d 167 2 0 0 1
+c
+d 589 2 0 0 1
+c
+d 592 1 0 0 1
+c
+d 170 2 0 0 0
+c
+d 591 1 0 0 1
+c
+d 597 1 0 0 0
+c
+d 359 2 0 0 0
+c
+d 393 2 0 0 1
+c
+d 395 1 0 0 1
+c
+d 59 1 0 0 0
+c
+d 683 2 1 0 0
+c
+d 234 2 0 0 1
+c
+d 585 2 0 0 1
+c
+d 568 1 0 0 1
+c
+d 234 2 0 0 1
+c
+d 369 1 0 0 1
+c
+d 568 1 0 0 1
+c
+d 585 2 0 0 1
+c
+d 234 2 0 0 1
+c
+d 369 1 0 0 1
+c
+d 568 1 0 0 1
+c
+d 585 2 0 0 1
+c
+d 351 1 0 1 1
+c
+d 352 2 0 0 1
+c
+d 351 1 0 0 0
+c
+d 352 3 0 0 0
+c
+d 657 2 0 0 0
+c
+d 430 1 0 0 0
+c
+d 431 1 0 1 0
+c
+d 284 1 0 0 0
+c
+d 286 1 0 0 0
+c
+d 576 1 0 0 1
+c
+d 578 2 0 0 1
+c
+d 576 2 0 0 0
+c
+d 578 2 0 0 0
+c
+d 430 3 0 0 0
+c
+d 418 2 0 0 1
+c
+d 415 1 0 0 1
+c
+d 78 1 0 0 1
+c
+d 693 1 0 1 0
+c
+d 694 1 0 0 0
+c
+d 425 1 0 1 1
+c
+d 427 1 0 0 1
+c
+d 429 1 0 0 1
+c
+d 425 1 0 0 1
+c
+d 427 1 0 0 1
+c
+d 429 1 0 0 1
+c
+d 425 1 0 0 1
+c
+d 427 1 0 0 1
+c
+d 429 1 0 0 1
+c
+d 102 2 0 0 1
+c
+d 102 2 0 0 0
+c
+d 406 1 0 0 1
+c
+d 409 1 0 0 1
+c
+d 407 1 0 0 0
+c
+d 537 1 0 0 1
+c
+d 657 1 0 0 1
+c
+d 663 1 0 0 1
+c
+d 537 1 0 1 0
+c
+d 561 2 0 0 0
+c
+d 657 1 0 1 0
+c
+d 663 1 0 0 0
+c
+d 740 2 0 0 0
+c
+d 540 3 0 0 0
+c
+d 543 1 0 0 0
+c
+d 707 3 0 0 1
+c
+d 547 1 0 0 1
+c
+d 707 4 0 0 1
+c
+d 193 1 0 0 1
+c
+d 547 1 0 0 1
+c
+d 707 4 0 0 1
+c
+d 159 1 0 0 0
+c
+d 193 1 0 0 0
+c
+d 547 1 0 0 0
+c
+d 707 4 0 0 0
+c
+d 547 1 0 0 0
+c
+d 707 2 0 0 0
+c
+d 529 1 0 0 1
+c
+d 44 1 0 0 1
+c
+d 365 1 1 0 1
+c
+d 44 1 0 0 1
+c
+d 365 2 0 0 1
+c
+d 529 1 0 0 1
+c
+d 660 1 0 0 1
+c
+d 44 1 0 0 1
+c
+d 365 2 0 0 1
+c
+d 529 1 0 0 1
+c
+d 660 1 0 0 1
+c
+d 228 2 0 0 1
+c
+d 228 2 0 0 1
+c
+d 576 1 0 0 0
+c
+d 577 2 0 0 0
+c
+d 578 1 0 0 0
+c
+d 339 1 0 0 0
+c
+d 340 2 0 0 0
+c
+d 612 3 0 0 0
+c
+d 298 1 0 0 0
+c
+d 299 1 0 0 0
+c
+d 589 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 203 1 0 0 1
+c
+d 71 1 0 0 1
+c
+d 414 1 0 0 1
+c
+d 71 1 0 0 1
+c
+d 203 2 0 0 1
+c
+d 414 1 0 0 1
+c
+d 71 1 0 0 1
+c
+d 203 2 0 0 1
+c
+d 414 1 0 0 1
+c
+d 414 1 0 0 1
+c
+d 414 1 0 0 1
+c
+d 197 1 0 0 1
+c
+d 362 2 0 0 1
+c
+d 637 2 0 0 0
+c
+d 562 2 0 0 0
+c
+d 271 2 0 0 0
+c
+d 273 1 0 0 0
+c
+d 458 4 0 0 1
+c
+d 458 4 1 0 0
+c
+d 463 1 0 0 0
+c
+d 466 1 0 0 0
+c
+d 214 1 0 0 1
+c
+d 213 2 0 0 1
+c
+d 94 2 0 0 1
+c
+d 93 2 0 0 0
+c
+d 425 2 0 0 1
+c
+d 428 1 0 0 1
+c
+d 96 2 0 0 1
+c
+d 96 2 0 0 1
+c
+d 425 2 0 0 1
+c
+d 428 1 0 0 1
+c
+d 440 1 0 0 1
+c
+d 96 2 0 0 1
+c
+d 425 2 0 0 1
+c
+d 428 1 0 0 1
+c
+d 440 1 0 0 1
+c
+d 425 1 0 0 1
+c
+d 427 1 0 0 1
+c
+d 425 1 0 0 1
+c
+d 427 1 0 0 1
+c
+d 437 1 0 0 1
+c
+d 437 1 0 0 1
+c
+d 420 3 0 0 1
+c
+d 420 4 0 0 1
+c
+d 733 1 0 0 1
+c
+d 202 1 0 0 1
+c
+d 420 4 0 0 1
+c
+d 733 1 0 0 1
+c
+d 70 1 0 0 0
+c
+d 202 1 0 0 0
+c
+d 420 4 0 0 0
+c
+d 733 1 0 0 0
+c
+d 358 1 0 1 1
+c
+d 363 1 0 0 1
+c
+d 364 1 0 0 1
+c
+d 358 2 0 0 1
+c
+d 363 1 0 0 1
+c
+d 364 1 0 0 1
+c
+d 358 2 0 0 0
+c
+d 363 1 0 0 0
+c
+d 364 1 0 0 0
+c
+d 668 1 0 0 1
+c
+d 593 1 0 1 0
+c
+d 470 1 0 0 1
+c
+d 472 1 0 0 1
+c
+d 473 1 0 0 1
+c
+d 469 1 0 0 1
+c
+d 469 1 0 0 1
+c
+d 470 1 0 0 1
+c
+d 472 1 0 0 1
+c
+d 473 1 0 0 1
+c
+d 653 1 0 0 1
+c
+d 469 1 0 0 1
+c
+d 470 1 0 0 1
+c
+d 472 1 0 0 1
+c
+d 473 1 0 0 1
+c
+d 653 1 0 0 1
+c
+d 473 1 0 0 1
+c
+d 473 1 0 0 1
+c
+d 267 1 0 0 1
+c
+d 752 1 0 0 0
+c
+d 508 1 0 0 1
+c
+d 724 1 0 0 1
+c
+d 643 1 0 0 1
+c
+d 402 1 0 0 0
+c
+d 669 2 0 0 0
+c
+d 579 1 0 1 0
+c
+d 582 1 0 0 0
+c
+d 703 1 0 1 0
+c
+d 480 1 0 0 1
+c
+d 496 1 0 0 0
+c
+d 638 1 0 0 1
+c
+d 639 1 0 0 1
+c
+d 378 1 0 0 0
+c
+d 380 1 0 0 0
+c
+d 638 1 0 0 0
+c
+d 639 1 0 0 0
+c
+d 581 2 0 0 1
+c
+d 582 1 0 0 1
+c
+d 237 1 0 0 0
+c
+d 671 1 0 0 1
+c
+d 593 1 0 1 0
+c
+d 431 1 0 0 0
+c
+d 732 1 1 0 0
+c
+d 485 1 0 0 1
+c
+d 486 1 0 0 1
+c
+d 482 1 0 0 1
+c
+d 482 1 0 0 1
+c
+d 485 1 0 0 1
+c
+d 486 2 0 0 1
+c
+d 482 1 0 0 1
+c
+d 485 1 0 0 1
+c
+d 486 2 0 0 1
+c
+d 495 1 0 0 1
+c
+d 495 1 0 0 0
+c
+d 477 4 0 1 0
+c
+d 562 1 0 0 1
+c
+d 564 1 0 0 1
+c
+d 164 1 0 0 1
+c
+d 164 1 0 0 1
+c
+d 562 2 0 0 1
+c
+d 564 1 0 0 1
+c
+d 164 1 0 0 1
+c
+d 562 2 0 0 1
+c
+d 564 1 0 0 1
+c
+d 758 4 0 0 0
+c
+d 540 1 0 0 0
+c
+d 583 1 0 0 0
+c
+d 351 2 0 0 1
+c
+d 355 1 0 0 0
+c
+d 554 2 0 0 0
+c
+d 555 1 0 0 0
+c
+d 16 1 0 0 1
+c
+d 280 1 0 0 1
+c
+d 294 1 0 0 0
+c
+d 663 1 0 0 1
+c
+d 193 1 0 0 1
+c
+d 158 1 0 0 0
+c
+d 692 3 1 0 0
+c
+d 613 1 0 0 1
+c
+d 604 1 0 0 1
+c
+d 182 2 0 0 1
+c
+d 182 2 0 0 1
+c
+d 603 1 0 0 1
+c
+d 604 2 0 0 1
+c
+d 613 1 0 0 1
+c
+d 182 2 0 0 1
+c
+d 603 1 0 0 1
+c
+d 604 2 0 0 1
+c
+d 613 1 0 0 1
+c
+d 174 1 0 0 1
+c
+d 174 1 0 0 1
+c
+d 173 1 0 0 1
+c
+d 173 1 0 0 1
+c
+d 716 3 1 0 0
+c
+d 286 1 0 0 1
+c
+d 291 2 1 0 0
+c
+d 292 2 0 0 0
+c
+d 572 1 0 0 0
+c
+d 684 1 0 0 0
+c
+d 632 1 0 0 0
+c
+d 633 1 0 0 0
+c
+d 747 1 0 0 0
+c
+d 748 1 0 0 0
+c
+d 643 1 0 0 1
+c
+d 397 1 0 1 1
+c
+d 397 1 0 0 1
+c
+d 643 1 0 0 1
+c
+d 397 1 0 0 0
+c
+d 643 1 0 0 0
+c
+d 271 1 0 0 0
+c
+d 273 1 0 0 0
+c
+d 644 2 0 0 0
+c
+d 645 1 0 0 0
+c
+d 652 3 0 0 1
+c
+d 422 1 0 0 1
+c
+d 652 5 0 0 1
+c
+d 422 1 0 0 0
+c
+d 451 1 0 0 0
+c
+d 652 5 0 0 0
+c
+d 338 4 0 0 0
+c
+d 558 2 0 2 0
+c
+d 506 2 0 0 0
+c
+d 727 1 0 0 0
+c
+d 446 1 0 0 1
+c
+d 691 1 0 0 1
+c
+d 442 1 0 0 0
+c
+d 581 3 0 2 0
+c
+d 436 4 1 0 0
+c
+d 324 2 0 0 1
+c
+d 322 1 0 0 1
+c
+d 322 1 0 0 1
+c
+d 324 2 0 0 1
+c
+d 357 1 0 0 1
+c
+d 322 1 0 0 1
+c
+d 324 2 0 0 1
+c
+d 357 1 0 0 1
+c
+d 356 1 0 0 1
+c
+d 356 1 0 0 1
+c
+d 322 1 0 0 1
+c
+d 322 1 0 0 0
+c
+d 295 1 0 0 1
+c
+d 296 1 0 0 1
+c
+d 279 1 0 1 1
+c
+d 279 2 0 0 1
+c
+d 295 1 0 0 1
+c
+d 296 1 0 0 1
+c
+d 279 2 0 0 0
+c
+d 295 1 0 0 0
+c
+d 296 1 0 0 0
+c
+d 582 3 0 0 0
+c
+d 651 2 0 0 0
+c
+d 749 4 0 0 0
+c
+d 579 5 0 0 1
+c
+d 579 5 0 0 0
+c
+d 595 1 0 0 0
+c
+d 97 1 0 0 1
+c
+d 96 1 0 0 1
+c
+d 425 1 0 0 1
+c
+d 95 1 0 0 0
+c
+d 334 1 0 0 1
+c
+d 602 1 0 0 1
+c
+d 332 1 1 0 1
+c
+d 332 3 0 0 1
+c
+d 333 1 0 0 1
+c
+d 334 1 0 0 1
+c
+d 602 1 0 0 1
+c
+d 332 3 0 0 1
+c
+d 333 1 0 0 1
+c
+d 334 1 0 0 1
+c
+d 602 1 0 0 1
+c
+d 484 2 1 0 1
+c
+d 730 1 0 0 1
+c
+d 481 1 0 0 0
+c
+d 664 5 0 0 1
+c
+d 562 2 1 0 0
+c
+d 664 5 0 0 0
+c
+d 488 2 0 0 1
+c
+d 222 1 0 0 0
+c
+d 656 4 0 0 1
+c
+d 656 5 0 0 0
+c
+d 294 3 1 0 1
+c
+d 749 1 0 0 1
+c
+d 294 3 0 0 0
+c
+d 749 1 0 0 0
+c
+d 257 2 0 0 1
+c
+d 252 1 0 0 1
+c
+d 253 1 0 0 1
+c
+d 257 1 1 0 1
+c
+d 252 1 0 0 1
+c
+d 253 1 0 0 1
+c
+d 257 3 0 0 1
+c
+d 252 1 0 0 1
+c
+d 253 1 0 0 1
+c
+d 257 3 0 0 1
+c
+d 254 1 1 0 1
+c
+d 254 2 0 0 0
+c
+d 255 1 0 0 0
+c
+d 257 1 0 0 0
+c
+d 522 1 0 0 1
+c
+d 583 1 0 1 1
+c
+d 575 1 0 0 1
+c
+d 522 1 0 0 1
+c
+d 575 1 0 0 1
+c
+d 583 1 0 0 1
+c
+d 522 1 0 0 0
+c
+d 575 1 0 0 0
+c
+d 583 1 0 0 0
+c
+d 205 1 0 0 1
+c
+d 385 1 0 0 1
+c
+d 412 1 0 0 1
+c
+d 205 1 0 0 1
+c
+d 385 1 0 0 1
+c
+d 412 2 0 0 1
+c
+d 205 1 0 0 1
+c
+d 385 1 0 0 1
+c
+d 412 2 0 0 1
+c
+d 205 2 0 0 1
+c
+d 205 2 0 0 1
+c
+d 758 2 0 0 1
+c
+d 708 1 0 0 0
+c
+d 558 3 0 0 0
+c
+d 347 1 0 0 1
+c
+d 340 1 0 1 0
+c
+d 657 1 0 0 1
+c
+d 658 1 0 0 1
+c
+d 500 1 0 0 0
+c
+d 229 1 0 0 1
+c
+d 534 1 0 0 1
+c
+d 229 3 0 0 1
+c
+d 534 1 0 0 1
+c
+d 229 3 0 0 1
+c
+d 534 1 0 0 1
+c
+d 532 2 0 0 1
+c
+d 533 1 0 0 1
+c
+d 532 2 0 0 0
+c
+d 533 1 0 0 0
+c
+d 366 1 0 0 1
+c
+d 370 1 1 0 0
+c
+d 633 1 0 0 1
+c
+d 345 1 0 0 0
+c
+d 603 3 0 0 1
+c
+d 331 2 0 0 1
+c
+d 20 1 0 0 0
+c
+d 447 3 0 0 0
+c
+d 284 1 0 0 1
+c
+d 291 1 0 0 0
+c
+d 561 1 0 0 1
+c
+d 611 1 0 0 0
+c
+d 379 1 0 0 1
+c
+d 717 1 0 0 1
+c
+d 375 2 0 0 0
+c
+d 379 2 0 0 0
+c
+d 717 1 0 0 0
+c
+d 751 3 0 0 1
+c
+d 286 1 0 0 1
+c
+d 751 3 1 0 1
+c
+d 286 1 0 0 1
+c
+d 294 1 0 0 1
+c
+d 749 1 0 0 1
+c
+d 751 3 0 0 1
+c
+d 10 1 0 0 0
+c
+d 286 1 0 0 0
+c
+d 294 1 0 0 0
+c
+d 749 1 0 0 0
+c
+d 751 3 0 0 0
+c
+d 564 1 0 0 1
+c
+d 562 1 0 0 1
+c
+d 163 1 0 0 1
+c
+d 162 2 0 0 1
+c
+d 563 1 0 0 0
+c
+d 516 4 0 0 1
+c
+d 642 1 0 0 0
+c
+d 541 1 0 1 0
+c
+d 710 1 0 1 0
+c
+d 579 1 0 0 1
+c
+d 584 1 0 0 1
+c
+d 579 2 0 0 1
+c
+d 584 1 0 0 1
+c
+d 579 2 0 0 0
+c
+d 584 1 0 0 0
+c
+d 621 1 0 0 1
+c
+d 622 1 0 0 1
+c
+d 620 1 0 0 0
+c
+d 621 1 0 0 0
+c
+d 622 1 0 0 0
+c
+d 572 1 0 0 0
+c
+d 573 1 0 0 0
+c
+d 452 1 0 1 0
+c
+d 453 1 0 0 0
+c
+d 561 3 1 0 0
+c
+d 529 1 0 0 1
+c
+d 530 1 0 0 1
+c
+d 143 2 0 0 1
+c
+d 141 2 0 0 0
+c
+d 398 2 0 0 0
+c
+d 367 1 0 0 1
+c
+d 353 1 0 0 0
+c
+d 388 4 0 0 0
+c
+d 651 2 0 0 0
+c
+d 689 2 0 0 0
+c
+d 339 2 0 0 0
+c
+d 340 1 0 0 0
+c
+d 707 2 0 0 1
+c
+d 632 1 0 0 0
+c
+d 707 2 0 0 0
+c
+d 271 1 0 0 0
+c
+d 273 1 0 0 0
+c
+d 315 1 0 0 0
+c
+d 745 1 0 0 0
+c
+d 279 1 0 0 1
+c
+d 292 1 0 0 0
+c
+d 749 2 0 0 0
+c
+d 358 2 0 0 1
+c
+d 743 1 0 0 0
+c
+d 643 3 0 0 0
+c
+d 370 2 0 0 0
+c
+d 286 3 1 0 0
+c
+d 591 3 0 0 0
+c
+d 388 1 0 0 1
+c
+d 391 1 0 0 1
+c
+d 388 2 0 0 0
+c
+d 391 1 0 0 0
+c
+d 747 2 0 0 0
+c
+d 752 3 1 0 0
+c
+d 324 2 0 0 1
+c
+d 352 1 0 1 0
+c
+d 403 2 0 0 0
+c
+d 404 1 0 0 0
+c
+d 494 3 0 1 0
+c
+d 338 2 0 2 0
+c
+d 663 3 1 0 1
+c
+d 657 1 0 0 0
+c
+d 663 3 0 0 0
+c
+d 409 1 0 0 0
+c
+d 410 2 0 0 0
+c
+d 207 2 0 0 1
+c
+d 206 1 0 0 1
+c
+d 81 1 0 0 1
+c
+d 417 1 0 0 0
+c
+d 644 2 0 1 1
+c
+d 406 1 0 0 1
+c
+d 406 1 0 0 1
+c
+d 644 2 0 0 1
+c
+d 406 1 0 0 1
+c
+d 644 2 0 0 1
+c
+d 406 1 0 0 1
+c
+d 62 1 0 0 0
+c
+d 406 1 0 0 0
+c
+d 710 5 1 0 1
+c
+d 711 1 0 0 1
+c
+d 541 2 1 0 0
+c
+d 710 5 0 0 0
+c
+d 711 1 0 0 0
+c
+d 469 1 0 0 1
+c
+d 468 1 0 0 1
+c
+d 468 1 0 0 1
+c
+d 469 2 0 0 1
+c
+d 468 1 0 0 1
+c
+d 469 2 0 0 1
+c
+d 126 1 0 0 1
+c
+d 126 1 0 0 0
+c
+d 654 1 1 0 1
+c
+d 688 2 0 0 1
+c
+d 465 1 0 0 0
+c
+d 585 2 1 0 0
+c
+d 749 2 0 0 0
+c
+d 511 1 0 0 0
+c
+d 538 1 0 0 0
+c
+d 511 1 0 0 0
+c
+d 538 1 0 0 0
+c
+d 651 2 0 2 0
+c
+d 747 2 0 0 1
+c
+d 747 3 0 0 0
+c
+d 588 1 0 1 1
+c
+d 628 1 0 0 1
+c
+d 630 1 0 0 1
+c
+d 588 2 0 0 1
+c
+d 628 1 0 0 1
+c
+d 630 1 0 0 1
+c
+d 588 2 0 0 1
+c
+d 628 1 0 0 1
+c
+d 630 1 0 0 1
+c
+d 584 1 0 0 1
+c
+d 628 1 0 0 1
+c
+d 584 1 0 0 0
+c
+d 628 1 0 0 0
+c
+d 648 2 0 0 0
+c
+d 579 2 0 0 1
+c
+d 584 1 0 0 0
+c
+d 616 2 0 0 1
+c
+d 626 1 0 0 1
+c
+d 187 2 0 0 0
+c
+d 250 1 0 0 1
+c
+d 680 1 0 0 1
+c
+d 682 1 0 0 0
+c
+d 614 1 0 1 1
+c
+d 671 1 0 1 1
+c
+d 614 1 0 0 0
+c
+d 671 1 0 0 0
+c
+d 320 1 0 0 1
+c
+d 637 2 0 0 1
+c
+d 197 1 0 0 0
+c
+d 236 1 0 0 1
+c
+d 581 1 0 0 1
+c
+d 177 1 0 0 1
+c
+d 176 2 0 0 1
+c
+d 176 2 0 0 1
+c
+d 177 1 0 0 1
+c
+d 236 1 0 0 1
+c
+d 332 1 0 0 1
+c
+d 580 1 0 0 1
+c
+d 581 1 0 0 1
+c
+d 176 2 0 0 1
+c
+d 177 1 0 0 1
+c
+d 236 1 0 0 1
+c
+d 332 1 0 0 1
+c
+d 580 1 0 0 1
+c
+d 581 1 0 0 1
+c
+d 236 2 0 0 1
+c
+d 236 2 0 0 1
+c
+d 178 1 0 0 1
+c
+d 178 1 0 0 1
+c
+d 177 1 0 0 1
+c
+d 177 1 0 0 1
+c
+d 175 1 0 0 0
+c
+d 614 2 1 0 0
+c
+d 646 3 0 1 0
+c
+d 298 2 0 0 1
+c
+d 275 1 0 0 0
+c
+d 366 3 0 0 1
+c
+d 366 3 0 0 1
+c
+d 523 1 0 0 1
+c
+d 530 1 0 0 1
+c
+d 224 2 0 0 0
+c
+d 366 3 1 0 0
+c
+d 523 1 0 0 0
+c
+d 530 1 0 0 0
+c
+d 535 1 0 0 0
+c
+d 536 2 0 0 0
+c
+d 294 1 0 0 0
+c
+d 749 1 0 0 0
+c
+d 309 1 0 0 0
+c
+d 311 1 0 0 0
+c
+d 686 1 0 0 1
+c
+d 638 1 0 0 0
+c
+d 518 1 0 0 0
+c
+d 696 1 0 0 0
+c
+d 271 1 0 0 0
+c
+d 273 3 0 0 0
+c
+d 648 2 0 0 0
+c
+d 693 2 0 0 0
+c
+d 758 2 0 0 1
+c
+d 542 1 0 0 0
+c
+d 635 1 0 0 1
+c
+d 634 1 0 0 1
+c
+d 338 1 0 0 1
+c
+d 634 1 0 0 1
+c
+d 635 1 0 0 1
+c
+d 338 1 0 0 0
+c
+d 634 1 0 0 0
+c
+d 635 1 0 0 0
+c
+d 358 3 1 0 0
+c
+d 406 1 0 0 0
+c
+d 409 1 0 0 0
+c
+d 434 2 0 0 0
+c
+d 509 4 1 0 1
+c
+d 509 4 0 0 0
+c
+d 510 1 0 0 0
+c
+d 663 5 0 0 0
+c
+d 592 1 0 0 1
+c
+d 619 1 0 0 1
+c
+d 759 1 0 0 1
+c
+d 169 1 0 0 0
+c
+d 614 2 0 0 0
+c
+d 316 5 1 0 0
+c
+d 348 2 0 1 1
+c
+d 348 3 0 0 1
+c
+d 323 1 0 0 0
+c
+d 348 3 0 0 0
+c
+d 612 1 0 0 1
+c
+d 556 2 0 1 1
+c
+d 552 1 0 0 1
+c
+d 556 2 0 0 1
+c
+d 612 1 0 0 1
+c
+d 552 1 0 0 0
+c
+d 556 2 0 0 0
+c
+d 612 1 0 0 0
+c
+d 569 1 0 0 0
+c
+d 570 1 0 0 0
+c
+d 614 1 0 0 1
+c
+d 631 2 0 0 1
+c
+d 573 1 0 0 0
+c
+d 579 1 0 0 0
+c
+d 582 1 0 0 0
+c
+d 703 2 0 0 0
+c
+d 518 1 0 0 0
+c
+d 717 1 0 0 0
+c
+d 599 1 0 0 1
+c
+d 327 1 0 0 1
+c
+d 327 3 0 0 1
+c
+d 599 1 0 0 1
+c
+d 327 3 0 0 0
+c
+d 599 1 0 0 0
+c
+d 201 2 0 0 1
+c
+d 389 1 0 0 1
+c
+d 390 1 0 0 1
+c
+d 304 1 0 0 0
+c
+d 745 1 0 0 1
+c
+d 310 2 1 0 0
+c
+d 218 1 0 0 1
+c
+d 442 1 0 0 1
+c
+d 443 1 0 0 1
+c
+d 446 1 0 0 1
+c
+d 218 1 0 0 1
+c
+d 442 1 0 0 1
+c
+d 443 1 0 0 1
+c
+d 446 1 0 0 1
+c
+d 691 1 0 0 1
+c
+d 218 1 0 0 1
+c
+d 442 1 0 0 1
+c
+d 443 1 0 0 1
+c
+d 446 1 0 0 1
+c
+d 691 1 0 0 1
+c
+d 632 1 0 0 1
+c
+d 547 2 0 1 0
+c
+d 668 2 0 0 1
+c
+d 670 1 0 0 1
+c
+d 623 1 0 0 0
+c
+d 474 1 0 0 1
+c
+d 653 1 0 0 1
+c
+d 471 1 0 0 0
+c
+d 430 1 0 0 0
+c
+d 431 1 0 1 0
+c
+d 490 2 0 0 1
+c
+d 509 1 0 0 0
+c
+d 510 1 0 0 0
+c
+d 430 1 0 0 1
+c
+d 377 2 0 0 0
+c
+d 717 2 0 0 0
+c
+d 749 2 1 0 0
+c
+d 298 1 0 1 0
+c
+d 299 2 0 1 0
+c
+d 268 1 0 0 1
+c
+d 274 2 1 0 1
+c
+d 271 1 0 0 1
+c
+d 268 1 0 0 1
+c
+d 271 1 0 0 1
+c
+d 274 2 0 0 1
+c
+d 268 1 0 0 1
+c
+d 271 1 0 0 1
+c
+d 274 2 0 0 1
+c
+d 265 1 0 0 1
+c
+d 265 1 0 0 0
+c
+d 338 1 0 1 1
+c
+d 344 1 0 0 1
+c
+d 338 1 0 0 1
+c
+d 344 1 0 0 1
+c
+d 338 3 0 0 0
+c
+d 344 1 0 0 0
+c
+d 286 1 0 0 1
+c
+d 288 1 0 0 1
+c
+d 10 2 0 0 0
+c
+d 494 3 1 0 0
+c
+d 392 3 0 0 1
+c
+d 740 2 0 0 1
+c
+d 388 1 0 0 0
+c
+d 392 3 0 0 0
+c
+d 740 2 0 0 0
+c
+d 518 1 0 0 0
+c
+d 519 1 0 0 0
+c
+d 695 1 1 0 0
+c
+d 303 3 0 0 1
+c
+d 284 2 0 0 0
+c
+d 418 1 0 0 1
+c
+d 415 1 0 0 1
+c
+d 204 1 0 0 1
+c
+d 733 1 0 0 1
+c
+d 73 2 0 0 1
+c
+d 72 2 0 0 1
+c
+d 72 2 0 0 1
+c
+d 73 2 0 0 1
+c
+d 204 1 0 0 1
+c
+d 415 2 0 0 1
+c
+d 418 1 0 0 1
+c
+d 733 1 0 0 1
+c
+d 72 2 0 0 1
+c
+d 73 2 0 0 1
+c
+d 204 1 0 0 1
+c
+d 415 2 0 0 1
+c
+d 418 1 0 0 1
+c
+d 733 1 0 0 1
+c
+d 737 1 0 0 1
+c
+d 737 1 0 0 1
+c
+d 436 1 0 0 1
+c
+d 437 1 0 0 0
+c
+d 309 1 0 0 1
+c
+d 312 1 0 0 0
+c
+d 286 2 0 0 0
+c
+d 287 1 0 0 0
+c
+d 582 2 0 1 0
+c
+d 703 1 0 1 0
+c
+d 685 3 1 0 0
+c
+d 499 1 0 0 1
+c
+d 500 1 0 0 0
+c
+d 271 2 0 0 0
+c
+d 273 1 1 0 0
+c
+d 581 2 0 0 0
+c
+d 516 1 0 0 0
+c
+d 722 1 0 0 0
+c
+d 340 4 1 0 1
+c
+d 340 5 0 0 0
+c
+d 671 4 0 0 0
+c
+d 366 5 0 0 0
+c
+d 709 3 1 0 1
+c
+d 541 2 0 0 1
+c
+d 709 3 0 0 1
+c
+d 524 1 0 0 0
+c
+d 541 2 0 0 0
+c
+d 709 3 0 0 0
+c
+d 695 2 0 1 0
+c
+d 453 2 0 0 1
+c
+d 453 2 0 2 1
+c
+d 659 1 0 0 1
+c
+d 453 2 0 0 0
+c
+d 659 1 0 0 0
+c
+d 267 4 0 0 0
+c
+d 337 1 0 1 1
+c
+d 192 1 0 0 1
+c
+d 35 1 0 0 0
+c
+d 651 1 0 1 0
+c
+d 686 1 0 1 0
+c
+d 379 1 0 0 1
+c
+d 515 2 0 0 1
+c
+d 51 2 0 0 1
+c
+d 51 2 0 0 1
+c
+d 199 1 0 0 1
+c
+d 379 1 0 0 1
+c
+d 515 2 0 0 1
+c
+d 51 2 0 0 1
+c
+d 199 1 0 0 1
+c
+d 379 1 0 0 1
+c
+d 515 2 0 0 1
+c
+d 515 1 0 0 1
+c
+d 515 1 0 0 1
+c
+d 376 1 0 0 1
+c
+d 376 1 0 0 0
+c
+d 494 2 0 0 1
+c
+d 452 1 0 0 0
+c
+d 494 2 0 0 0
+c
+d 710 1 0 0 1
+c
+d 539 1 0 0 1
+c
+d 713 2 0 0 1
+c
+d 149 2 0 0 0
+c
+d 518 3 0 1 0
+c
+d 457 2 0 0 1
+c
+d 685 1 0 0 1
+c
+d 457 2 0 0 1
+c
+d 532 1 0 0 1
+c
+d 685 1 0 0 1
+c
+d 457 2 0 0 1
+c
+d 532 1 0 0 1
+c
+d 685 1 0 0 1
+c
+d 685 2 0 0 1
+c
+d 685 2 0 0 0
+c
+d 541 3 0 0 1
+c
+d 527 1 0 0 0
+c
+d 541 3 1 0 0
+c
+d 295 3 1 0 1
+c
+d 295 4 0 0 0
+c
+d 296 1 0 0 0
+c
+d 530 2 0 0 1
+c
+d 225 1 0 0 1
+c
+d 142 2 0 0 1
+c
+d 141 1 0 0 0
+c
+d 340 1 0 0 0
+c
+d 341 1 1 0 0
+c
+d 327 1 0 1 1
+c
+d 599 1 0 0 1
+c
+d 666 1 0 0 1
+c
+d 326 1 0 0 1
+c
+d 327 1 0 0 1
+c
+d 599 1 0 0 1
+c
+d 666 1 0 0 1
+c
+d 326 1 0 0 0
+c
+d 327 1 0 0 0
+c
+d 599 1 0 0 0
+c
+d 666 1 0 0 0
+c
+d 329 1 0 1 0
+c
+d 330 2 0 0 0
+c
+d 759 3 0 0 0
+c
+d 579 2 0 0 0
+c
+d 582 1 0 0 0
+c
+d 459 2 1 0 0
+c
+d 240 1 0 0 1
+c
+d 613 1 0 0 1
+c
+d 184 1 0 0 0
+c
+d 648 4 0 0 0
+c
+d 615 1 0 0 1
+c
+d 616 1 0 0 1
+c
+d 622 1 0 0 1
+c
+d 186 1 0 0 1
+c
+d 186 1 0 0 1
+c
+d 615 1 0 0 1
+c
+d 616 1 0 0 1
+c
+d 621 1 0 0 1
+c
+d 622 1 0 0 1
+c
+d 186 1 0 0 1
+c
+d 615 1 0 0 1
+c
+d 616 1 0 0 1
+c
+d 621 1 0 0 1
+c
+d 622 1 0 0 1
+c
+d 242 1 0 0 1
+c
+d 242 1 0 0 1
+c
+d 186 2 0 0 1
+c
+d 186 2 0 0 1
+c
+d 615 1 0 0 1
+c
+d 615 1 0 0 1
+c
+d 185 1 0 0 1
+c
+d 185 1 0 0 1
+c
+d 651 2 0 0 0
+c
+d 379 1 0 1 1
+c
+d 699 1 0 0 0
+c
+d 611 1 1 0 0
+c
+d 612 2 0 0 0
+c
+d 446 2 0 0 0
+c
+d 396 1 0 0 0
+c
+d 496 2 0 0 0
+c
+d 653 1 0 0 1
+c
+d 471 1 0 0 1
+c
+d 463 1 0 0 1
+c
+d 463 1 0 0 1
+c
+d 471 1 0 0 1
+c
+d 653 5 0 0 1
+c
+d 463 1 0 0 1
+c
+d 471 1 0 0 1
+c
+d 653 6 0 0 1
+c
+d 654 1 0 0 1
+c
+d 626 2 0 0 1
+c
+d 627 1 0 0 1
+c
+d 626 3 0 0 1
+c
+d 627 1 0 0 1
+c
+d 626 3 0 0 1
+c
+d 627 1 0 0 1
+c
+d 669 1 0 0 1
+c
+d 617 1 0 0 0
+c
+d 626 3 0 0 0
+c
+d 627 1 0 0 0
+c
+d 669 1 0 0 0
+c
+d 461 1 0 0 1
+c
+d 503 1 0 0 0
+c
+d 663 2 0 0 1
+c
+d 548 1 0 0 0
+c
+d 518 4 1 0 0
+c
+d 540 1 0 0 0
+c
+d 612 1 0 0 0
+c
+d 702 1 0 0 0
+c
+d 400 1 0 0 1
+c
+d 401 2 1 0 1
+c
+d 514 1 0 0 1
+c
+d 400 2 0 0 1
+c
+d 401 2 0 0 1
+c
+d 514 1 0 0 1
+c
+d 400 2 0 0 1
+c
+d 401 2 0 0 1
+c
+d 514 1 0 0 1
+c
+d 509 1 0 0 1
+c
+d 509 1 0 0 0
+c
+d 648 3 0 0 1
+c
+d 648 4 0 0 0
+c
+d 519 3 1 0 0
+c
+d 431 4 0 0 0
+c
+d 433 2 0 0 0
+c
+d 540 1 0 1 1
+c
+d 583 1 0 0 1
+c
+d 540 1 0 0 0
+c
+d 583 3 0 0 0
+c
+d 265 1 0 0 1
+c
+d 272 1 0 0 0
+c
+d 688 3 0 0 0
+c
+d 463 4 1 0 1
+c
+d 464 1 0 0 1
+c
+d 463 4 0 0 0
+c
+d 464 1 0 0 0
+c
+d 484 4 0 0 0
+c
+d 569 1 0 0 1
+c
+d 570 1 0 0 1
+c
+d 569 2 0 0 0
+c
+d 570 1 0 0 0
+c
+d 127 1 0 0 1
+c
+d 468 3 0 0 0
+c
+d 510 1 0 0 1
+c
+d 511 1 0 0 1
+c
+d 513 1 0 0 1
+c
+d 535 1 0 0 1
+c
+d 521 1 0 0 1
+c
+d 510 2 0 0 1
+c
+d 511 1 0 0 1
+c
+d 513 1 0 0 1
+c
+d 521 1 0 0 1
+c
+d 535 1 0 0 1
+c
+d 510 2 0 0 1
+c
+d 511 1 0 0 1
+c
+d 513 1 0 0 1
+c
+d 521 1 0 0 1
+c
+d 535 1 0 0 1
+c
+d 521 1 0 0 1
+c
+d 521 1 0 0 1
+c
+d 135 2 0 0 1
+c
+d 135 2 0 0 1
+c
+d 328 4 1 0 1
+c
+d 328 4 0 0 1
+c
+d 328 4 0 0 0
+c
+d 430 2 0 0 0
+c
+d 431 1 0 0 0
+c
+d 385 1 0 0 0
+c
+d 735 1 0 0 0
+c
+d 736 3 1 0 0
+c
+d 276 1 0 0 1
+c
+d 749 1 0 0 1
+c
+d 289 1 0 0 0
+c
+d 447 1 0 0 1
+c
+d 448 1 0 0 1
+c
+d 447 1 0 0 1
+c
+d 448 2 0 0 1
+c
+d 441 1 0 0 0
+c
+d 447 1 0 0 0
+c
+d 448 2 0 0 0
+c
+d 632 1 0 0 0
+c
+d 633 2 0 0 0
+c
+d 407 3 0 0 0
+c
+d 344 3 0 0 1
+c
+d 191 2 0 0 0
+c
+d 382 5 0 0 1
+c
+d 382 6 0 0 0
+c
+d 383 1 0 0 0
+c
+d 411 4 0 0 0
+c
+d 422 3 0 0 0
+c
+d 660 1 0 0 1
+c
+d 226 2 0 0 1
+c
+d 140 1 0 0 1
+c
+d 139 1 0 0 1
+c
+d 138 2 0 0 0
+c
+d 738 1 0 0 1
+c
+d 392 2 0 0 0
+c
+d 740 1 0 0 0
+c
+d 299 2 0 0 0
+c
+d 739 1 0 0 1
+c
+d 508 1 0 1 0
+c
+d 372 2 0 0 0
+c
+d 271 2 0 0 0
+c
+d 385 3 0 0 0
+c
+d 279 1 0 0 1
+c
+d 280 1 0 0 1
+c
+d 281 1 0 0 1
+c
+d 282 1 0 0 1
+c
+d 294 1 0 0 0
+c
+d 628 2 0 0 1
+c
+d 628 2 0 0 0
+c
+d 631 1 0 0 0
+c
+d 490 4 0 0 0
+c
+d 430 1 0 0 1
+c
+d 431 1 0 0 1
+c
+d 438 1 0 0 0
+c
+d 685 1 1 0 0
+c
+d 686 2 0 0 0
+c
+d 565 1 0 0 1
+c
+d 566 1 0 0 1
+c
+d 574 1 0 0 0
+c
+d 749 2 0 0 0
+c
+d 508 1 0 0 1
+c
+d 741 1 0 0 1
+c
+d 508 3 0 0 1
+c
+d 741 1 0 0 1
+c
+d 508 3 0 0 1
+c
+d 741 1 0 0 1
+c
+d 477 2 0 0 1
+c
+d 477 2 0 0 1
+c
+d 490 1 0 0 1
+c
+d 490 1 0 0 0
+c
+d 698 4 0 0 0
+c
+d 527 1 0 0 1
+c
+d 528 2 0 0 1
+c
+d 527 2 0 0 0
+c
+d 528 3 0 0 0
+c
+d 430 1 0 1 1
+c
+d 307 1 0 0 1
+c
+d 307 1 0 0 1
+c
+d 430 1 0 0 1
+c
+d 700 1 0 0 1
+c
+d 307 1 0 0 0
+c
+d 430 1 0 0 0
+c
+d 700 1 0 0 0
+c
+d 626 1 0 0 1
+c
+d 668 1 0 0 1
+c
+d 669 1 0 0 1
+c
+d 626 1 0 0 1
+c
+d 668 2 0 0 1
+c
+d 669 1 0 0 1
+c
+d 626 1 0 0 0
+c
+d 668 2 0 0 0
+c
+d 669 1 0 0 0
+c
+d 747 2 0 0 0
+c
+d 700 4 0 0 0
+c
+d 604 1 0 0 1
+c
+d 182 1 0 0 1
+c
+d 181 1 0 0 1
+c
+d 174 1 0 0 0
+c
+d 556 1 0 0 1
+c
+d 557 1 0 0 1
+c
+d 553 1 0 0 1
+c
+d 540 1 0 0 1
+c
+d 553 1 0 0 1
+c
+d 556 1 0 0 1
+c
+d 557 1 0 0 1
+c
+d 612 1 0 0 1
+c
+d 540 1 0 0 1
+c
+d 553 1 0 0 1
+c
+d 556 1 0 0 1
+c
+d 557 1 0 0 1
+c
+d 612 1 0 0 1
+c
+d 555 1 0 0 1
+c
+d 180 1 0 0 0
+c
+d 540 1 0 0 0
+c
+d 555 2 0 0 0
+c
+d 685 3 0 0 1
+c
+d 532 2 0 0 1
+c
+d 685 3 0 0 1
+c
+d 532 2 0 0 0
+c
+d 660 1 0 0 0
+c
+d 685 3 1 0 0
+c
+d 535 3 0 0 1
+c
+d 536 1 0 0 1
+c
+d 535 4 1 0 0
+c
+d 536 1 0 0 0
+c
+d 518 1 0 0 0
+c
+d 716 1 0 0 0
+c
+d 558 2 0 1 0
+c
+d 430 1 0 0 0
+c
+d 732 1 0 0 0
+c
+d 339 1 0 0 0
+c
+d 340 2 0 0 0
+c
+d 324 2 0 0 0
+c
+d 358 1 0 0 0
+c
+d 245 1 0 0 1
+c
+d 244 1 1 0 1
+c
+d 244 1 0 0 1
+c
+d 673 1 0 0 1
+c
+d 674 1 0 0 1
+c
+d 675 1 0 0 1
+c
+d 672 1 0 0 0
+c
+d 673 1 0 0 0
+c
+d 657 1 0 0 1
+c
+d 483 1 0 0 0
+c
+d 502 1 0 0 0
+c
+d 611 3 1 0 1
+c
+d 537 1 0 1 1
+c
+d 537 1 0 0 1
+c
+d 561 1 0 0 1
+c
+d 611 3 0 0 1
+c
+d 620 4 0 0 1
+c
+d 590 2 0 0 0
+c
+d 620 4 1 0 0
+c
+d 459 4 0 0 1
+c
+d 459 5 0 0 0
+c
+d 388 3 0 0 0
+c
+d 329 3 0 0 1
+c
+d 330 1 0 0 1
+c
+d 118 2 0 0 1
+c
+d 329 3 0 0 1
+c
+d 330 1 0 0 1
+c
+d 117 2 0 0 1
+c
+d 118 2 0 0 1
+c
+d 329 3 0 0 1
+c
+d 330 1 0 0 1
+c
+d 115 2 0 0 1
+c
+d 117 2 0 0 1
+c
+d 118 2 0 0 1
+c
+d 329 3 0 0 1
+c
+d 330 1 0 0 1
+c
+d 112 1 0 0 0
+c
+d 115 2 0 0 0
+c
+d 117 2 0 0 0
+c
+d 118 2 0 0 0
+c
+d 329 3 0 0 0
+c
+d 330 1 0 0 0
+c
+d 660 1 0 0 1
+c
+d 225 2 0 0 1
+c
+d 523 1 0 0 1
+c
+d 530 1 0 0 1
+c
+d 137 1 0 0 0
+c
+d 518 2 0 0 0
+c
+d 716 1 0 0 0
+c
+d 632 2 0 0 1
+c
+d 335 1 0 0 0
+c
+d 538 2 0 0 0
+c
+d 546 1 0 0 0
+c
+d 411 3 0 0 0
+c
+d 421 1 0 0 0
+c
+d 496 1 0 0 0
+c
+d 276 2 0 0 0
+c
+d 749 1 0 0 0
+c
+d 750 1 0 0 0
+c
+d 364 1 0 0 1
+c
+d 357 1 0 0 1
+c
+d 358 1 0 0 1
+c
+d 356 1 0 0 1
+c
+d 39 1 0 0 0
+c
+d 241 2 1 0 1
+c
+d 618 1 0 0 1
+c
+d 613 1 0 0 1
+c
+d 609 1 0 0 0
+c
+d 590 1 0 1 1
+c
+d 591 2 1 0 1
+c
+d 597 1 0 0 0
+c
+d 378 2 0 0 0
+c
+d 557 1 0 0 1
+c
+d 553 1 0 0 0
+c
+d 603 4 1 0 0
+c
+d 706 4 0 0 0
+c
+d 299 1 0 0 0
+c
+d 300 1 0 0 0
+c
+d 580 1 0 0 1
+c
+d 326 1 0 0 0
+c
+d 547 1 0 0 1
+c
+d 537 1 0 0 0
+c
+d 589 1 1 0 1
+c
+d 591 2 0 0 1
+c
+d 589 2 0 0 0
+c
+d 591 2 0 0 0
+c
+d 315 1 0 0 0
+c
+d 745 2 0 0 0
+c
+d 561 2 0 0 0
+c
+d 622 4 0 1 1
+c
+d 621 1 0 0 0
+c
+d 622 5 0 0 0
+c
+d 666 3 0 0 1
+c
+d 600 1 0 0 0
+c
+d 601 1 0 0 0
+c
+d 666 3 0 0 0
+c
+d 327 1 0 0 1
+c
+d 603 1 0 0 1
+c
+d 173 1 0 0 0
+c
+d 406 1 0 0 0
+c
+d 409 1 0 0 0
+c
+d 612 2 0 0 1
+c
+d 552 1 0 0 0
+c
+d 376 2 0 0 1
+c
+d 376 2 0 0 1
+c
+d 738 1 0 0 1
+c
+d 376 2 1 0 0
+c
+d 394 1 0 0 0
+c
+d 738 1 0 0 0
+c
+d 725 2 1 1 0
+c
+d 444 2 0 0 1
+c
+d 442 2 0 0 0
+c
+d 443 1 0 0 0
+c
+d 444 2 0 0 0
+c
+d 265 3 0 0 0
+c
+d 506 1 0 0 1
+c
+d 465 1 0 0 0
+c
+d 593 4 0 0 1
+c
+d 593 4 0 0 1
+c
+d 626 1 0 0 1
+c
+d 593 4 0 0 1
+c
+d 626 1 0 0 1
+c
+d 668 1 0 0 1
+c
+d 593 4 1 0 0
+c
+d 626 1 0 0 0
+c
+d 668 1 0 0 0
+c
+d 671 1 0 0 0
+c
+d 340 2 0 0 0
+c
+d 663 1 1 0 0
+c
+d 747 1 0 1 0
+c
+d 748 1 0 1 0
+c
+d 516 3 0 0 0
+c
+d 518 3 0 0 0
+c
+d 459 1 0 1 1
+c
+d 462 1 1 0 1
+c
+d 458 1 0 0 1
+c
+d 125 2 0 0 0
+c
+d 217 1 0 0 1
+c
+d 212 1 0 0 1
+c
+d 91 2 0 0 1
+c
+d 90 2 0 0 1
+c
+d 89 1 0 0 0
+c
+d 749 3 0 0 1
+c
+d 298 1 0 0 0
+c
+d 299 1 0 0 0
+c
+d 749 3 0 0 0
+c
+d 446 1 0 1 0
+c
+d 690 1 0 0 0
+c
+d 691 2 0 0 0
+c
+d 397 1 0 0 0
+c
+d 723 1 0 0 0
+c
+d 538 1 0 1 1
+c
+d 546 2 0 0 1
+c
+d 157 2 0 0 1
+c
+d 156 2 0 0 0
+c
+d 471 1 0 0 1
+c
+d 472 1 0 1 1
+c
+d 471 2 0 0 1
+c
+d 472 1 0 0 1
+c
+d 469 1 0 0 0
+c
+d 471 2 0 0 0
+c
+d 472 1 0 0 0
+c
+d 660 1 0 0 1
+c
+d 147 2 0 0 1
+c
+d 145 2 0 0 1
+c
+d 144 1 0 0 0
+c
+d 518 2 0 2 0
+c
+d 265 2 0 0 1
+c
+d 272 1 0 0 0
+c
+d 662 1 0 0 0
+c
+d 297 4 0 0 0
+c
+d 741 3 0 0 1
+c
+d 403 1 0 1 0
+c
+d 405 1 0 0 0
+c
+d 741 3 1 0 0
+c
+d 741 2 0 0 1
+c
+d 403 1 0 0 0
+c
+d 430 1 0 1 0
+c
+d 700 1 0 1 0
+c
+d 267 3 1 0 0
+c
+d 754 1 0 0 0
+c
+d 549 1 0 0 1
+c
+d 483 1 0 0 1
+c
+d 551 3 0 0 1
+c
+d 483 2 0 0 1
+c
+d 549 1 0 0 1
+c
+d 551 3 0 0 1
+c
+d 483 2 0 0 1
+c
+d 549 1 0 0 1
+c
+d 551 3 0 0 1
+c
+d 549 1 0 1 1
+c
+d 706 1 0 1 1
+c
+d 549 1 0 0 0
+c
+d 706 2 0 0 0
+c
+d 308 1 0 0 1
+c
+d 313 1 0 0 1
+c
+d 314 1 0 0 1
+c
+d 308 1 0 0 1
+c
+d 313 2 0 0 1
+c
+d 314 1 0 0 1
+c
+d 308 1 0 0 1
+c
+d 313 2 0 0 1
+c
+d 314 1 0 0 1
+c
+d 316 2 0 1 1
+c
+d 308 1 0 0 0
+c
+d 316 3 0 0 0
+c
+d 196 1 0 0 1
+c
+d 351 1 1 0 1
+c
+d 352 1 0 0 1
+c
+d 350 1 0 0 1
+c
+d 196 1 0 0 1
+c
+d 350 1 0 0 1
+c
+d 351 4 1 0 1
+c
+d 352 1 0 1 1
+c
+d 196 1 0 0 1
+c
+d 350 1 0 0 1
+c
+d 351 4 0 0 1
+c
+d 352 1 0 0 1
+c
+d 650 1 0 0 1
+c
+d 649 1 0 0 1
+c
+d 106 2 0 0 0
+c
+d 202 2 0 0 1
+c
+d 420 1 0 0 0
+c
+d 496 1 0 0 0
+c
+d 337 4 0 0 1
+c
+d 337 4 1 0 1
+c
+d 345 1 0 0 1
+c
+d 337 4 0 0 1
+c
+d 345 1 0 0 1
+c
+d 35 1 0 0 0
+c
+d 337 4 0 0 0
+c
+d 345 1 0 0 0
+c
+d 284 1 0 0 1
+c
+d 303 1 0 0 1
+c
+d 262 1 0 0 0
+c
+d 491 1 0 0 1
+c
+d 538 1 0 0 1
+c
+d 154 1 0 0 0
+c
+d 361 4 0 0 1
+c
+d 353 2 0 0 0
+c
+d 361 4 0 0 0
+c
+d 272 5 0 0 1
+c
+d 266 1 0 0 0
+c
+d 272 5 1 0 0
+c
+d 717 2 0 0 0
+c
+d 718 1 1 0 0
+c
+d 463 1 1 0 1
+c
+d 464 1 0 0 1
+c
+d 471 1 0 1 1
+c
+d 569 1 0 0 0
+c
+d 570 1 1 0 0
+c
+d 483 1 0 0 0
+c
+d 492 1 0 1 0
+c
+d 493 1 0 0 0
+c
+d 742 1 0 0 1
+c
+d 660 1 0 0 1
+c
+d 48 1 0 0 1
+c
+d 368 1 0 0 0
+c
+d 493 1 0 0 1
+c
+d 486 1 0 0 1
+c
+d 495 1 0 0 1
+c
+d 485 1 0 1 1
+c
+d 486 2 1 0 1
+c
+d 493 1 0 0 1
+c
+d 495 1 0 0 1
+c
+d 485 1 0 0 1
+c
+d 486 2 0 0 1
+c
+d 493 1 0 0 1
+c
+d 495 1 0 0 1
+c
+d 579 3 1 0 0
+c
+d 336 1 0 0 1
+c
+d 337 2 0 0 1
+c
+d 29 1 0 0 0
+c
+d 638 3 0 0 1
+c
+d 638 5 0 0 0
+c
+d 575 3 0 1 0
+c
+d 583 3 0 0 0
+c
+d 712 2 0 0 1
+c
+d 702 1 0 0 0
+c
+d 712 2 0 0 0
+c
+d 401 1 0 0 1
+c
+d 509 2 0 0 0
+c
+d 614 5 0 0 0
+c
+d 286 1 0 0 1
+c
+d 290 1 0 0 1
+c
+d 258 1 0 0 0
+c
+d 359 1 0 0 1
+c
+d 363 1 0 0 1
+c
+d 360 1 0 0 0
+c
+d 651 2 0 0 1
+c
+d 686 1 0 1 1
+c
+d 650 1 0 0 1
+c
+d 650 1 0 0 1
+c
+d 651 2 0 0 1
+c
+d 686 1 0 0 1
+c
+d 650 1 0 0 1
+c
+d 651 2 0 0 1
+c
+d 686 1 0 0 1
+c
+d 650 1 0 0 1
+c
+d 650 1 0 0 1
+c
+d 430 2 0 0 1
+c
+d 430 2 0 0 0
+c
+d 389 3 0 0 0
+c
+d 430 1 0 1 1
+c
+d 307 1 0 0 1
+c
+d 307 1 0 0 1
+c
+d 430 1 0 0 1
+c
+d 307 1 0 0 0
+c
+d 430 1 0 0 0
+c
+d 208 2 0 0 1
+c
+d 85 1 0 0 1
+c
+d 81 2 0 0 1
+c
+d 417 1 0 0 1
+c
+d 80 1 0 0 1
+c
+d 80 1 0 0 1
+c
+d 81 2 0 0 1
+c
+d 85 1 0 0 1
+c
+d 208 2 0 0 1
+c
+d 417 3 0 0 1
+c
+d 420 1 0 0 1
+c
+d 80 1 0 0 1
+c
+d 81 2 0 0 1
+c
+d 85 1 0 0 1
+c
+d 208 2 0 0 1
+c
+d 417 3 0 0 1
+c
+d 420 1 0 0 1
+c
+d 80 1 0 0 1
+c
+d 80 1 0 0 1
+c
+d 459 1 0 0 1
+c
+d 458 1 0 0 0
+c
+d 434 1 0 0 1
+c
+d 436 3 0 0 1
+c
+d 427 1 0 0 0
+c
+d 397 1 0 0 1
+c
+d 398 1 0 0 1
+c
+d 725 1 0 0 0
+c
+d 726 1 0 0 0
+c
+d 328 1 0 0 1
+c
+d 306 1 0 1 0
+c
+d 516 2 0 0 1
+c
+d 519 1 0 0 0
+c
+d 358 3 0 0 0
+c
+d 379 5 0 0 1
+c
+d 376 1 0 0 1
+c
+d 379 5 0 0 1
+c
+d 51 1 0 0 0
+c
+d 376 1 0 0 0
+c
+d 379 5 0 0 0
+c
+d 716 3 0 2 0
+c
+d 685 3 0 0 0
+c
+d 397 2 0 0 1
+c
+d 723 1 0 0 1
+c
+d 397 2 0 0 0
+c
+d 643 2 0 0 0
+c
+d 723 1 0 0 0
+c
+d 515 1 0 0 0
+c
+d 518 1 0 0 0
+c
+d 562 1 0 0 0
+c
+d 572 1 0 0 0
+c
+d 573 1 0 0 0
+c
+d 552 1 0 1 1
+c
+d 631 1 0 0 1
+c
+d 559 1 0 0 0
+c
+d 340 2 0 0 0
+c
+d 663 1 1 0 0
+c
+d 270 1 0 0 0
+c
+d 752 1 0 0 0
+c
+d 518 1 0 0 0
+c
+d 715 1 0 1 0
+c
+d 716 1 0 1 0
+c
+d 707 5 0 0 0
+c
+d 267 4 1 0 1
+c
+d 267 5 0 0 0
+c
+d 388 1 0 0 1
+c
+d 64 1 0 0 1
+c
+d 408 1 0 0 0
+c
+d 638 2 0 0 0
+c
+d 366 2 0 0 1
+c
+d 224 1 0 0 0
+c
+d 366 2 1 0 0
+c
+d 479 1 0 0 1
+c
+d 729 2 0 0 1
+c
+d 478 1 0 0 0
+c
+d 314 3 1 0 0
+c
+d 295 2 0 0 1
+c
+d 279 1 0 0 0
+c
+d 295 2 0 0 0
+c
+d 332 4 0 0 0
+c
+d 704 3 0 0 1
+c
+d 522 1 0 0 0
+c
+d 704 3 0 0 0
+c
+d 558 3 0 0 0
+c
+d 741 3 1 0 1
+c
+d 741 4 0 0 0
+c
+d 289 1 0 0 0
+c
+d 290 2 1 0 0
+c
+d 585 1 0 0 1
+c
+d 571 1 0 0 0
+c
+d 527 1 0 0 1
+c
+d 139 1 0 0 1
+c
+d 523 1 0 0 1
+c
+d 138 1 0 0 1
+c
+d 137 1 0 0 0
+c
+d 695 5 1 0 0
+c
+d 685 3 0 0 0
+c
+d 283 1 0 0 1
+c
+d 747 1 0 0 1
+c
+d 283 1 0 1 0
+c
+d 300 1 0 0 0
+c
+d 301 1 0 0 0
+c
+d 747 1 0 1 0
+c
+d 436 2 0 0 1
+c
+d 434 1 0 0 0
+c
+d 435 2 0 0 0
+c
+d 320 1 0 0 1
+c
+d 637 1 0 0 1
+c
+d 359 2 0 0 0
+c
+d 477 3 0 0 1
+c
+d 477 3 0 1 1
+c
+d 655 1 0 0 1
+c
+d 477 4 0 0 0
+c
+d 655 1 0 0 0
+c
+d 518 1 1 0 0
+c
+d 716 2 0 0 0
+c
+d 16 1 0 0 1
+c
+d 280 1 1 0 1
+c
+d 294 1 0 0 0
+c
+d 567 1 0 0 1
+c
+d 568 1 0 0 1
+c
+d 570 1 0 0 1
+c
+d 467 1 0 0 0
+c
+d 567 1 0 1 0
+c
+d 568 1 0 0 0
+c
+d 570 1 0 0 0
+c
+d 698 2 0 0 0
+c
+d 309 1 0 0 1
+c
+d 311 3 0 0 1
+c
+d 308 1 0 1 0
+c
+d 557 1 0 1 1
+c
+d 558 2 0 0 0
+c
+d 735 1 0 0 1
+c
+d 736 1 0 1 1
+c
+d 306 1 0 0 1
+c
+d 306 1 0 0 1
+c
+d 735 1 0 0 1
+c
+d 736 1 0 0 1
+c
+d 306 1 0 0 0
+c
+d 735 1 0 0 0
+c
+d 736 1 0 0 0
+c
+d 314 1 0 0 1
+c
+d 746 2 0 0 1
+c
+d 308 2 0 1 0
+c
+d 372 2 0 0 1
+c
+d 373 4 0 0 1
+c
+d 372 2 0 0 0
+c
+d 373 4 0 0 0
+c
+d 569 1 0 0 0
+c
+d 570 1 0 0 0
+c
+d 372 1 0 0 1
+c
+d 742 1 0 0 1
+c
+d 49 1 0 0 1
+c
+d 49 1 0 0 1
+c
+d 370 1 0 0 1
+c
+d 372 1 0 0 1
+c
+d 742 1 0 0 1
+c
+d 49 1 0 0 1
+c
+d 370 1 0 0 1
+c
+d 372 1 0 0 1
+c
+d 742 1 0 0 1
+c
+d 372 1 0 0 1
+c
+d 372 1 0 0 1
+c
+d 361 1 0 0 1
+c
+d 361 1 0 0 0
+c
+d 516 1 0 0 1
+c
+d 517 3 0 0 1
+c
+d 516 1 0 0 0
+c
+d 517 4 0 1 0
+c
+d 518 2 0 0 0
+c
+d 720 2 0 0 0
+c
+d 518 1 0 0 0
+c
+d 717 3 1 0 0
+c
+d 605 1 0 0 1
+c
+d 333 1 1 0 0
+c
+d 667 1 0 0 1
+c
+d 613 3 0 0 0
+c
+d 431 2 0 1 1
+c
+d 433 1 0 0 1
+c
+d 104 1 0 0 1
+c
+d 104 1 0 0 1
+c
+d 431 2 0 0 1
+c
+d 433 1 0 0 1
+c
+d 104 1 0 0 1
+c
+d 431 2 0 0 1
+c
+d 433 1 0 0 1
+c
+d 104 2 0 0 1
+c
+d 104 2 0 0 1
+c
+d 103 2 0 0 1
+c
+d 103 2 0 0 1
+c
+d 425 1 0 0 1
+c
+d 425 1 0 0 0
+c
+d 352 1 0 0 1
+c
+d 353 1 0 0 1
+c
+d 360 1 0 0 0
+c
+d 543 1 0 1 1
+c
+d 708 2 0 0 1
+c
+d 151 1 0 0 1
+c
+d 544 1 0 0 1
+c
+d 150 1 0 0 1
+c
+d 150 1 0 0 1
+c
+d 151 1 0 0 1
+c
+d 540 1 0 0 1
+c
+d 543 1 0 0 1
+c
+d 544 1 0 0 1
+c
+d 708 2 0 0 1
+c
+d 150 1 0 0 1
+c
+d 151 1 0 0 1
+c
+d 540 1 0 0 1
+c
+d 543 1 0 0 1
+c
+d 544 1 0 0 1
+c
+d 708 2 0 0 1
+c
+d 503 1 0 0 0
+c
+d 547 1 0 0 1
+c
+d 546 2 0 1 1
+c
+d 546 2 0 0 1
+c
+d 547 1 0 0 1
+c
+d 546 2 0 0 0
+c
+d 547 1 0 0 0
+c
+d 484 3 1 0 0
+c
+d 585 3 0 0 1
+c
+d 586 1 0 0 1
+c
+d 166 1 0 0 1
+c
+d 166 1 0 0 1
+c
+d 585 3 0 0 1
+c
+d 586 2 0 0 1
+c
+d 166 1 0 0 1
+c
+d 585 3 0 0 1
+c
+d 586 2 0 0 1
+c
+d 575 1 0 0 1
+c
+d 575 1 0 0 1
+c
+d 166 2 0 0 1
+c
+d 166 3 0 0 0
+c
+d 575 1 0 0 0
+c
+d 585 1 0 0 0
+c
+d 603 3 0 0 1
+c
+d 603 3 1 0 1
+c
+d 613 1 0 0 1
+c
+d 603 3 0 0 0
+c
+d 613 1 0 0 0
+c
+d 540 1 0 0 0
+c
+d 583 1 0 0 0
+c
+d 388 2 0 0 1
+c
+d 389 1 0 0 1
+c
+d 388 2 0 0 0
+c
+d 389 1 0 0 0
+c
+d 646 1 0 0 0
+c
+d 644 1 1 0 1
+c
+d 403 1 0 0 0
+c
+d 265 2 0 2 1
+c
+d 265 2 0 0 0
+c
+d 580 1 0 0 0
+c
+d 581 2 1 1 0
+c
+d 300 1 0 0 1
+c
+d 283 1 0 0 0
+c
+d 422 1 0 0 1
+c
+d 329 1 0 0 1
+c
+d 216 2 0 0 1
+c
+d 123 2 0 0 1
+c
+d 122 1 0 0 1
+c
+d 94 1 0 0 1
+c
+d 93 1 0 0 0
+c
+d 416 1 0 0 1
+c
+d 75 1 0 0 1
+c
+d 75 1 0 0 1
+c
+d 386 1 0 0 1
+c
+d 416 1 0 0 1
+c
+d 75 1 0 0 1
+c
+d 386 1 0 0 1
+c
+d 416 1 0 0 1
+c
+d 416 1 0 0 1
+c
+d 416 1 0 0 1
+c
+d 415 1 0 0 1
+c
+d 415 1 0 0 0
+c
+d 470 2 0 0 1
+c
+d 466 1 0 0 1
+c
+d 467 1 0 0 1
+c
+d 127 1 0 0 1
+c
+d 468 1 0 0 0
+c
+d 345 3 0 0 0
+c
+d 681 1 0 0 1
+c
+d 678 1 0 0 1
+c
+d 249 2 0 0 1
+c
+d 680 1 0 0 0
+c
+d 270 3 1 0 0
+c
+d 279 1 0 0 1
+c
+d 302 1 0 1 1
+c
+d 294 1 0 0 1
+c
+d 7 1 0 0 0
+c
+d 537 1 0 0 1
+c
+d 538 1 0 0 1
+c
+d 537 1 0 0 0
+c
+d 538 3 0 0 0
+c
+d 546 1 0 0 0
+c
+d 638 1 0 0 1
+c
+d 382 2 0 0 0
+c
+d 331 1 0 0 1
+c
+d 603 1 0 0 1
+c
+d 605 1 0 0 1
+c
+d 331 1 0 0 1
+c
+d 603 2 0 0 1
+c
+d 605 1 0 0 1
+c
+d 331 1 0 0 1
+c
+d 603 2 0 0 1
+c
+d 605 1 0 0 1
+c
+d 331 1 0 0 1
+c
+d 331 1 0 0 1
+c
+d 497 1 0 0 1
+c
+d 498 1 0 0 1
+c
+d 483 2 0 0 0
+c
+d 460 1 0 0 1
+c
+d 460 1 0 0 0
+c
+d 664 1 0 0 0
+c
+d 611 4 1 0 0
+c
+d 581 3 0 0 0
+c
+d 398 2 0 0 0
+c
+d 540 1 0 0 1
+c
+d 702 1 0 0 1
+c
+d 712 1 0 0 0
+c
+d 541 1 0 0 0
+c
+d 710 1 0 0 0
+c
+d 267 1 1 0 1
+c
+d 754 1 0 0 1
+c
+d 757 1 0 0 1
+c
+d 263 1 0 0 0
+c
+d 478 1 0 0 1
+c
+d 479 1 0 0 0
+c
+d 261 2 0 0 1
+c
+d 271 1 0 0 1
+c
+d 261 2 1 0 1
+c
+d 271 1 0 0 1
+c
+d 275 1 1 0 1
+c
+d 261 2 0 0 0
+c
+d 271 1 0 0 0
+c
+d 275 3 0 0 0
+c
+d 663 3 1 0 0
+c
+d 500 1 0 0 0
+c
+d 501 2 0 0 0
+c
+d 542 1 0 0 1
+c
+d 543 1 0 1 0
+c
+d 695 1 0 0 0
+c
+d 696 1 0 0 0
+c
+d 697 1 0 0 0
+c
+d 459 1 0 0 0
+c
+d 665 2 0 0 0
+c
+d 684 3 0 0 0
+c
+d 605 1 1 0 0
+c
+d 609 1 0 0 0
+c
+d 610 1 0 0 0
+c
+d 562 3 1 0 0
+c
+d 522 1 1 0 1
+c
+d 523 1 0 0 0
+c
+d 565 1 0 0 1
+c
+d 573 1 1 0 1
+c
+d 574 1 0 0 1
+c
+d 565 1 0 0 1
+c
+d 573 2 0 0 1
+c
+d 574 1 0 0 1
+c
+d 565 1 0 0 0
+c
+d 573 2 0 0 0
+c
+d 574 1 0 0 0
+c
+d 518 3 1 0 0
+c
+d 717 1 0 0 0
+c
+d 518 3 0 1 0
+c
+d 569 1 0 0 1
+c
+d 369 1 0 0 1
+c
+d 476 1 0 0 1
+c
+d 372 1 0 0 0
+c
+d 383 3 0 0 0
+c
+d 271 4 0 0 1
+c
+d 271 8 0 0 0
+c
+d 713 2 1 0 0
+c
+d 714 2 0 0 0
+c
+d 721 4 0 0 1
+c
+d 397 1 0 0 1
+c
+d 398 1 0 0 1
+c
+d 515 1 0 0 1
+c
+d 721 4 1 0 1
+c
+d 397 1 0 0 0
+c
+d 398 1 1 0 0
+c
+d 515 1 0 0 0
+c
+d 721 4 0 0 0
+c
+d 481 1 0 0 1
+c
+d 482 1 0 0 1
+c
+d 485 2 0 0 1
+c
+d 481 1 0 0 1
+c
+d 482 1 0 0 1
+c
+d 484 1 0 0 1
+c
+d 485 2 0 0 1
+c
+d 730 1 0 0 1
+c
+d 481 1 0 0 0
+c
+d 482 1 0 0 0
+c
+d 484 1 0 0 0
+c
+d 485 2 0 0 0
+c
+d 730 1 0 0 0
+c
+d 613 1 0 0 1
+c
+d 603 1 1 0 0
+c
+d 518 1 0 1 0
+c
+d 695 1 0 0 0
+c
+d 696 1 0 0 0
+c
+d 671 4 0 2 0
+c
+d 379 1 0 0 0
+c
+d 518 1 1 0 0
+c
+d 282 3 0 1 1
+c
+d 282 4 0 0 1
+c
+d 282 4 0 0 0
+c
+d 294 1 0 0 0
+c
+d 622 1 0 0 0
+c
+d 624 2 0 0 0
+c
+d 340 2 0 1 1
+c
+d 341 1 0 1 1
+c
+d 340 2 0 0 0
+c
+d 341 1 0 0 0
+c
+d 737 3 0 0 0
+c
+d 431 2 0 1 0
+c
+d 379 3 0 0 1
+c
+d 198 1 0 0 1
+c
+d 379 3 0 0 1
+c
+d 198 1 0 0 0
+c
+d 376 1 1 0 0
+c
+d 379 3 1 0 0
+c
+d 270 1 0 1 0
+c
+d 752 1 1 0 0
+c
+d 657 4 0 0 0
+c
+d 656 1 0 1 1
+c
+d 129 1 0 0 1
+c
+d 484 1 0 0 0
+c
+d 221 1 0 0 1
+c
+d 446 1 0 0 1
+c
+d 651 1 0 0 1
+c
+d 221 1 0 0 1
+c
+d 446 1 0 0 1
+c
+d 651 1 0 0 1
+c
+d 688 1 0 0 1
+c
+d 221 1 0 0 1
+c
+d 446 1 0 0 1
+c
+d 651 1 0 0 1
+c
+d 688 1 0 0 1
+c
+d 221 2 0 0 1
+c
+d 221 2 0 0 1
+c
+d 651 1 0 0 1
+c
+d 685 1 0 0 1
+c
+d 651 1 0 0 1
+c
+d 685 1 0 0 1
+c
+d 372 1 0 0 1
+c
+d 372 1 0 0 1
+c
+d 475 1 0 0 1
+c
+d 221 1 0 0 0
+c
+d 446 2 0 0 0
+c
+d 475 1 0 0 0
+c
+d 660 1 0 0 0
+c
+d 688 1 0 0 0
+c
+d 490 1 0 0 1
+c
+d 509 1 0 0 1
+c
+d 508 1 0 0 1
+c
+d 477 1 0 1 1
+c
+d 490 1 0 0 1
+c
+d 508 1 0 0 1
+c
+d 509 1 0 0 1
+c
+d 706 1 0 1 1
+c
+d 477 1 0 0 1
+c
+d 490 1 0 0 1
+c
+d 508 1 0 0 1
+c
+d 509 1 0 0 1
+c
+d 706 1 0 0 1
+c
+d 379 3 1 0 1
+c
+d 518 1 0 0 1
+c
+d 379 3 0 0 1
+c
+d 518 1 0 0 1
+c
+d 305 1 0 0 0
+c
+d 379 3 0 0 0
+c
+d 518 1 0 0 0
+c
+d 385 1 0 0 0
+c
+d 409 1 1 0 0
+c
+d 734 2 0 0 0
+c
+d 411 1 0 0 0
+c
+d 484 1 0 0 0
+c
+d 731 2 1 0 0
+c
+d 372 1 0 0 1
+c
+d 370 1 0 0 0
+c
+d 436 2 0 0 0
+c
+d 294 1 0 1 0
+c
+d 749 2 0 1 0
+c
+d 632 1 0 0 1
+c
+d 335 1 0 0 1
+c
+d 547 1 0 0 0
+c
+d 397 1 0 0 1
+c
+d 723 1 0 0 1
+c
+d 397 1 0 0 0
+c
+d 643 2 0 0 0
+c
+d 723 1 0 0 0
+c
+d 733 1 0 0 1
+c
+d 203 2 0 0 1
+c
+d 73 1 0 0 1
+c
+d 71 2 0 0 1
+c
+d 69 1 0 0 1
+c
+d 560 1 0 0 1
+c
+d 562 2 0 0 0
+c
+d 659 2 0 0 1
+c
+d 452 1 1 0 0
+c
+d 455 3 0 0 0
+c
+d 314 2 0 0 0
+c
+d 462 1 0 0 1
+c
+d 458 1 0 0 1
+c
+d 466 2 0 0 1
+c
+d 458 1 0 0 1
+c
+d 459 1 0 0 1
+c
+d 462 2 0 0 1
+c
+d 466 2 0 0 1
+c
+d 458 1 0 0 1
+c
+d 459 1 0 0 1
+c
+d 462 2 0 0 1
+c
+d 466 2 0 0 1
+c
+d 572 1 0 0 1
+c
+d 572 1 0 0 1
+c
+d 585 1 0 1 1
+c
+d 572 1 0 0 1
+c
+d 585 1 0 0 1
+c
+d 477 1 0 1 1
+c
+d 488 1 0 1 1
+c
+d 489 1 1 0 1
+c
+d 129 1 0 0 1
+c
+d 484 1 0 0 0
+c
+d 518 2 0 0 0
+c
+d 719 1 0 0 0
+c
+d 575 1 0 0 1
+c
+d 704 1 0 0 1
+c
+d 585 1 0 1 1
+c
+d 575 1 0 0 1
+c
+d 585 2 0 0 1
+c
+d 704 1 0 0 1
+c
+d 575 1 0 0 0
+c
+d 585 2 0 0 0
+c
+d 704 1 0 0 0
+c
+d 541 1 0 0 1
+c
+d 698 1 0 0 1
+c
+d 721 1 0 0 1
+c
+d 541 2 0 0 1
+c
+d 698 1 0 0 1
+c
+d 721 1 0 0 1
+c
+d 541 2 0 0 1
+c
+d 698 1 0 0 1
+c
+d 721 1 0 0 1
+c
+d 698 1 0 0 1
+c
+d 698 1 0 0 1
+c
+d 626 4 0 0 1
+c
+d 616 1 0 0 1
+c
+d 615 1 0 1 1
+c
+d 616 1 0 0 1
+c
+d 626 4 1 0 1
+c
+d 187 1 0 0 0
+c
+d 615 2 0 0 0
+c
+d 616 1 0 0 0
+c
+d 626 6 0 0 0
+c
+d 671 1 0 0 0
+c
+d 708 2 0 0 0
+c
+d 494 1 0 0 1
+c
+d 453 1 0 1 0
+c
+d 454 1 0 0 0
+c
+d 624 1 0 1 1
+c
+d 593 1 0 1 1
+c
+d 597 1 0 0 1
+c
+d 593 1 0 0 1
+c
+d 597 1 0 0 1
+c
+d 624 1 0 0 1
+c
+d 425 1 0 0 0
+c
+d 427 1 0 0 0
+c
+d 286 2 1 0 1
+c
+d 258 2 0 0 1
+c
+d 258 2 0 0 1
+c
+d 285 1 0 1 1
+c
+d 286 2 1 0 1
+c
+d 258 2 0 0 0
+c
+d 285 1 0 0 0
+c
+d 286 3 0 0 0
+c
+d 304 3 0 0 1
+c
+d 306 2 0 0 0
+c
+d 651 1 0 1 0
+c
+d 690 1 0 1 0
+c
+d 691 2 0 0 0
+c
+d 738 2 0 0 0
+c
+d 419 1 0 0 0
+c
+d 430 1 0 1 0
+c
+d 431 3 0 0 0
+c
+d 640 1 0 0 0
+c
+d 641 1 0 0 0
+c
+d 541 1 0 0 0
+c
+d 710 1 0 0 0
+c
+d 709 2 1 0 1
+c
+d 526 1 0 0 0
+c
+d 249 1 0 0 1
+c
+d 680 2 0 0 1
+c
+d 248 2 0 0 1
+c
+d 679 1 0 0 1
+c
+d 248 2 0 0 1
+c
+d 249 1 0 0 1
+c
+d 678 2 0 0 1
+c
+d 679 1 0 0 1
+c
+d 680 2 0 0 1
+c
+d 248 2 0 0 1
+c
+d 249 1 0 0 1
+c
+d 678 2 0 0 1
+c
+d 679 1 0 0 1
+c
+d 680 2 0 0 1
+c
+d 249 1 0 0 1
+c
+d 249 1 0 0 1
+c
+d 248 1 0 0 1
+c
+d 248 1 0 0 1
+c
+d 749 3 0 0 0
+c
+d 340 3 0 2 0
+c
+d 506 1 0 0 1
+c
+d 727 1 0 0 1
+c
+d 455 1 1 0 1
+c
+d 446 1 0 0 0
+c
+d 376 8 0 0 1
+c
+d 199 1 0 0 1
+c
+d 376 8 0 0 1
+c
+d 199 1 0 0 0
+c
+d 376 8 1 0 0
+c
+d 515 1 0 0 0
+c
+d 577 1 0 0 1
+c
+d 600 1 0 0 1
+c
+d 601 1 0 0 1
+c
+d 600 1 0 0 0
+c
+d 539 1 0 0 1
+c
+d 713 2 0 0 1
+c
+d 535 1 0 0 0
+c
+d 324 3 1 0 0
+c
+d 638 1 1 0 1
+c
+d 382 1 0 0 0
+c
+d 271 1 0 0 0
+c
+d 272 1 0 0 0
+c
+d 482 3 0 0 0
+c
+d 267 1 0 0 0
+c
+d 754 1 0 0 0
+c
+d 685 2 1 0 0
+c
+d 687 1 0 0 0
+c
+d 617 1 0 0 1
+c
+d 617 2 0 0 1
+c
+d 622 1 0 0 1
+c
+d 617 3 0 0 1
+c
+d 622 1 0 0 1
+c
+d 625 1 0 0 1
+c
+d 617 3 0 0 1
+c
+d 622 1 0 0 1
+c
+d 625 1 0 0 1
+c
+d 617 1 0 0 1
+c
+d 617 1 0 0 0
+c
+d 446 2 0 0 0
+c
+d 651 1 0 0 0
+c
+d 571 1 0 0 0
+c
+d 572 2 0 0 0
+c
+d 758 2 0 0 0
+c
+d 699 3 0 0 1
+c
+d 379 1 0 0 1
+c
+d 699 3 1 0 1
+c
+d 379 1 0 0 0
+c
+d 699 3 0 0 0
+c
+d 541 1 0 1 0
+c
+d 542 1 1 0 0
+c
+d 345 1 0 1 0
+c
+d 347 2 0 1 0
+c
+d 272 3 0 0 0
+c
+d 573 1 0 0 1
+c
+d 599 1 0 0 0
+c
+d 463 1 0 0 1
+c
+d 465 1 0 0 1
+c
+d 653 1 0 1 0
+c
+d 338 2 0 0 1
+c
+d 338 2 0 0 0
+c
+d 342 1 0 0 0
+c
+d 368 1 0 0 1
+c
+d 365 1 0 0 1
+c
+d 360 1 0 0 1
+c
+d 361 1 0 0 1
+c
+d 360 1 0 0 1
+c
+d 361 1 0 0 1
+c
+d 365 1 0 0 1
+c
+d 368 2 0 0 1
+c
+d 360 1 0 0 1
+c
+d 361 1 0 0 1
+c
+d 365 1 0 0 1
+c
+d 368 2 0 0 1
+c
+d 361 3 0 0 1
+c
+d 361 3 0 0 1
+c
+d 644 1 0 0 1
+c
+d 646 3 0 0 1
+c
+d 644 1 0 0 0
+c
+d 646 4 0 0 0
+c
+d 621 1 0 1 1
+c
+d 759 1 0 0 1
+c
+d 619 1 0 0 1
+c
+d 619 1 0 0 1
+c
+d 621 1 0 0 1
+c
+d 759 1 0 0 1
+c
+d 619 1 0 0 1
+c
+d 621 1 0 0 1
+c
+d 759 1 0 0 1
+c
+d 620 1 0 0 1
+c
+d 620 1 0 0 1
+c
+d 759 2 0 0 1
+c
+d 326 1 0 0 1
+c
+d 580 2 0 0 0
+c
+d 593 1 1 0 1
+c
+d 591 1 0 0 1
+c
+d 598 1 0 0 1
+c
+d 603 4 0 0 0
+c
+d 604 2 0 0 0
+c
+d 597 1 0 0 1
+c
+d 597 1 0 0 1
+c
+d 622 1 0 0 1
+c
+d 624 1 0 0 1
+c
+d 590 1 0 0 0
+c
+d 345 1 0 0 0
+c
+d 347 1 0 0 0
+c
+d 588 1 0 1 1
+c
+d 168 1 0 0 0
+c
+d 540 1 0 0 0
+c
+d 587 3 1 0 0
+c
+d 484 1 0 0 1
+c
+d 496 1 0 0 0
+c
+d 264 2 0 0 1
+c
+d 260 1 0 0 1
+c
+d 260 3 0 0 1
+c
+d 264 2 0 0 1
+c
+d 260 3 0 0 0
+c
+d 264 2 0 0 0
+c
+d 276 1 0 0 0
+c
+d 749 1 0 0 0
+c
+d 450 1 0 0 1
+c
+d 744 1 0 0 1
+c
+d 436 4 0 0 1
+c
+d 436 4 0 0 1
+c
+d 450 2 0 0 1
+c
+d 744 1 0 0 1
+c
+d 436 4 0 0 1
+c
+d 450 2 0 0 1
+c
+d 744 1 0 0 1
+c
+d 456 1 0 0 1
+c
+d 219 1 0 0 1
+c
+d 449 1 0 0 1
+c
+d 450 2 0 0 1
+c
+d 456 2 0 0 1
+c
+d 463 2 0 0 1
+c
+d 459 2 0 0 1
+c
+d 459 2 0 0 1
+c
+d 463 3 1 0 1
+c
+d 464 1 0 0 1
+c
+d 459 3 0 0 0
+c
+d 463 3 0 0 0
+c
+d 464 1 0 0 0
+c
+d 717 3 1 0 0
+c
+d 651 3 1 0 0
+c
+d 592 3 0 0 0
+c
+d 671 5 0 0 0
+c
+d 756 3 0 0 1
+c
+d 262 1 0 0 0
+c
+d 668 3 1 0 1
+c
+d 669 3 0 0 1
+c
+d 668 3 0 0 0
+c
+d 669 3 0 0 0
+c
+d 345 1 0 1 1
+c
+d 632 1 0 0 1
+c
+d 633 1 0 1 1
+c
+d 345 1 0 0 1
+c
+d 632 1 0 0 1
+c
+d 633 1 0 0 1
+c
+d 271 1 0 1 0
+c
+d 273 2 0 1 0
+c
+d 411 4 0 0 0
+c
+d 397 1 0 0 1
+c
+d 643 1 0 1 0
+c
+d 734 1 0 0 0
+c
+d 735 1 0 0 0
+c
+d 369 1 0 0 1
+c
+d 370 2 0 0 1
+c
+d 369 2 0 0 0
+c
+d 370 2 0 0 0
+c
+d 516 3 1 1 0
+c
+d 196 2 1 0 1
+c
+d 352 1 0 0 1
+c
+d 41 2 0 0 1
+c
+d 40 1 0 0 1
+c
+d 40 1 0 0 1
+c
+d 41 2 0 0 1
+c
+d 196 2 0 0 1
+c
+d 352 1 0 0 1
+c
+d 40 1 0 0 1
+c
+d 41 2 0 0 1
+c
+d 196 2 0 0 1
+c
+d 352 1 0 0 1
+c
+d 362 1 0 0 1
+c
+d 362 1 0 0 1
+c
+d 637 1 0 0 1
+c
+d 637 1 0 0 1
+c
+d 41 1 0 0 1
+c
+d 41 1 0 0 1
+c
+d 197 1 0 0 1
+c
+d 362 2 0 0 1
+c
+d 637 2 0 0 1
+c
+d 492 1 0 0 1
+c
+d 489 1 0 0 1
+c
+d 489 1 0 0 1
+c
+d 492 2 0 0 1
+c
+d 486 1 0 0 0
+c
+d 487 1 0 0 0
+c
+d 489 1 0 0 0
+c
+d 492 3 0 0 0
+c
+d 493 1 0 0 0
+c
+d 561 6 0 0 0
+c
+d 721 4 1 0 1
+c
+d 516 1 0 0 0
+c
+d 721 5 0 0 0
+c
+d 116 1 0 0 1
+c
+d 115 1 0 0 1
+c
+d 113 1 0 0 1
+c
+d 112 1 0 0 1
+c
+d 111 2 0 0 1
+c
+d 111 2 0 0 1
+c
+d 112 1 0 0 1
+c
+d 113 1 0 0 1
+c
+d 115 1 0 0 1
+c
+d 116 1 0 0 1
+c
+d 652 1 0 0 1
+c
+d 111 2 0 0 1
+c
+d 112 1 0 0 1
+c
+d 113 1 0 0 1
+c
+d 115 1 0 0 1
+c
+d 116 1 0 0 1
+c
+d 652 1 0 0 1
+c
+d 116 1 0 0 1
+c
+d 116 1 0 0 1
+c
+d 114 1 0 0 1
+c
+d 114 1 0 0 1
+c
+d 111 1 0 0 1
+c
+d 111 1 0 0 1
+c
+d 110 1 0 0 1
+c
+d 110 1 0 0 1
+c
+d 109 1 0 0 0
+c
+d 276 2 0 0 0
+c
+d 262 1 0 0 1
+c
+d 272 1 0 0 1
+c
+d 262 1 0 0 1
+c
+d 272 1 0 0 1
+c
+d 298 1 0 0 1
+c
+d 299 1 0 0 1
+c
+d 262 1 0 0 0
+c
+d 272 1 0 0 0
+c
+d 298 1 0 0 0
+c
+d 299 1 0 0 0
+c
+d 463 2 0 0 0
+c
+d 423 1 0 0 1
+c
+d 424 1 0 0 1
+c
+d 423 1 0 0 1
+c
+d 424 2 0 0 1
+c
+d 209 1 0 0 1
+c
+d 423 1 0 0 1
+c
+d 424 2 0 0 1
+c
+d 208 1 0 0 1
+c
+d 209 1 0 0 1
+c
+d 423 1 0 0 1
+c
+d 424 2 0 0 1
+c
+d 208 1 0 0 0
+c
+d 209 1 0 0 0
+c
+d 420 1 0 0 0
+c
+d 423 1 0 0 0
+c
+d 424 2 0 0 0
+c
+d 353 3 0 0 1
+c
+d 354 1 0 0 1
+c
+d 353 4 0 0 0
+c
+d 354 1 0 0 0
+c
+d 372 1 0 0 1
+c
+d 660 1 0 0 0
+c
+d 279 1 1 0 0
+c
+d 282 1 0 1 0
+c
+d 353 1 0 0 0
+c
+d 370 3 0 0 0
+c
+d 270 2 1 0 1
+c
+d 270 2 1 0 0
+c
+d 267 2 1 1 1
+c
+d 268 1 0 0 0
+c
+d 599 2 0 0 1
+c
+d 573 1 0 1 1
+c
+d 573 1 0 0 1
+c
+d 599 2 0 1 1
+c
+d 573 1 0 0 0
+c
+d 599 4 0 0 0
+c
+d 653 2 0 0 0
+c
+d 654 1 0 0 0
+c
+d 661 2 0 0 1
+c
+d 230 1 0 0 1
+c
+d 230 2 1 0 0
+c
+d 231 1 0 0 0
+c
+d 642 1 0 0 0
+c
+d 661 1 1 0 0
+c
+d 662 1 0 0 0
+c
+d 685 1 0 0 0
+c
+d 687 1 1 0 0
+c
+d 369 2 0 0 0
+c
+d 370 1 0 0 0
+c
+d 751 1 0 0 1
+c
+d 9 2 0 0 0
+c
+d 636 1 0 0 1
+c
+d 319 1 0 0 1
+c
+d 319 1 0 0 1
+c
+d 349 1 0 0 1
+c
+d 636 1 0 0 1
+c
+d 319 1 0 0 1
+c
+d 349 1 0 0 1
+c
+d 636 1 0 0 1
+c
+d 636 1 0 0 1
+c
+d 636 1 0 0 1
+c
+d 38 1 0 0 1
+c
+d 38 1 0 0 1
+c
+d 355 1 0 0 1
+c
+d 351 2 0 0 0
+c
+d 355 2 0 0 0
+c
+d 259 1 0 1 1
+c
+d 260 1 0 0 1
+c
+d 264 1 0 0 1
+c
+d 259 1 0 0 1
+c
+d 260 2 0 0 1
+c
+d 264 1 0 0 1
+c
+d 259 1 0 0 0
+c
+d 260 2 0 0 0
+c
+d 264 1 0 0 0
+c
+d 276 2 0 0 0
+c
+d 749 1 0 0 0
+c
+d 272 1 0 0 1
+c
+d 261 1 0 0 1
+c
+d 262 2 1 0 0
+c
+d 579 2 0 0 0
+c
+d 675 1 1 0 1
+c
+d 673 1 0 0 1
+c
+d 674 1 0 0 1
+c
+d 675 2 1 0 1
+c
+d 674 3 0 1 0
+c
+d 579 1 0 0 1
+c
+d 582 2 0 0 1
+c
+d 582 1 0 0 1
+c
+d 593 1 0 0 1
+c
+d 594 2 0 0 1
+c
+d 579 1 0 0 1
+c
+d 582 4 0 0 1
+c
+d 591 2 0 0 1
+c
+d 593 1 0 0 1
+c
+d 594 2 0 0 1
+c
+d 579 1 0 0 0
+c
+d 582 4 0 0 0
+c
+d 591 2 0 0 0
+c
+d 593 2 0 0 0
+c
+d 594 2 0 0 0
+c
+d 459 5 0 0 1
+c
+d 458 1 0 0 0
+c
+d 261 1 0 0 1
+c
+d 271 2 0 0 1
+c
+d 261 1 0 0 1
+c
+d 271 2 0 0 1
+c
+d 275 1 0 0 1
+c
+d 276 1 0 0 1
+c
+d 261 1 0 0 0
+c
+d 271 2 0 0 0
+c
+d 275 1 0 0 0
+c
+d 276 1 0 0 0
+c
+d 709 4 0 0 0
+c
+d 593 3 0 0 0
+c
+d 271 2 1 0 1
+c
+d 268 1 0 0 0
+c
+d 632 2 0 0 0
+c
+d 584 1 0 0 1
+c
+d 579 1 0 0 0
+c
+d 262 2 0 0 1
+c
+d 272 1 0 0 1
+c
+d 266 1 0 0 1
+c
+d 262 2 0 0 1
+c
+d 266 1 0 0 1
+c
+d 272 1 0 0 1
+c
+d 278 1 0 0 1
+c
+d 299 1 0 0 1
+c
+d 262 2 0 0 1
+c
+d 266 1 0 0 1
+c
+d 272 1 0 0 1
+c
+d 278 1 0 0 1
+c
+d 299 1 0 0 1
+c
+d 747 2 0 0 1
+c
+d 303 1 0 0 0
+c
+d 747 5 0 0 0
+c
+d 632 3 0 0 0
+c
+d 635 1 0 0 1
+c
+d 26 2 0 0 1
+c
+d 343 1 0 0 1
+c
+d 25 2 0 0 1
+c
+d 24 2 0 0 0
+c
+d 727 3 0 0 0
+c
+d 728 1 0 0 0
+c
+d 585 3 1 1 0
+c
+d 571 1 0 1 0
+c
+d 572 3 1 0 0
+c
+d 518 2 0 0 0
+c
+d 717 2 1 0 0
+c
+d 558 2 0 2 0
+c
+d 644 2 0 1 0
+c
+d 646 1 0 1 0
+c
+d 519 1 0 0 1
+c
+d 516 1 0 0 1
+c
+d 134 1 0 0 1
+c
+d 134 1 0 0 1
+c
+d 516 1 0 0 1
+c
+d 518 2 1 0 1
+c
+d 519 1 0 0 1
+c
+d 134 1 0 0 1
+c
+d 516 1 0 0 1
+c
+d 518 2 0 0 1
+c
+d 519 1 0 0 1
+c
+d 720 1 0 0 1
+c
+d 516 1 0 0 0
+c
+d 500 1 0 0 1
+c
+d 479 1 0 0 1
+c
+d 484 1 0 0 1
+c
+d 496 1 0 0 1
+c
+d 579 1 0 0 1
+c
+d 584 2 0 0 1
+c
+d 579 1 0 0 0
+c
+d 580 1 0 1 0
+c
+d 267 3 0 0 0
+c
+d 756 1 0 1 0
+c
+d 663 2 0 1 0
+c
+d 427 3 0 0 0
+c
+d 313 1 0 0 1
+c
+d 316 1 0 0 1
+c
+d 313 2 0 0 1
+c
+d 316 1 0 0 1
+c
+d 313 2 0 0 0
+c
+d 316 1 0 0 0
+c
+d 366 2 0 1 0
+c
+d 406 2 0 0 1
+c
+d 409 1 0 0 1
+c
+d 66 2 1 0 0
+c
+d 745 3 0 0 0
+c
+d 646 1 0 1 1
+c
+d 405 1 0 0 1
+c
+d 388 1 0 1 1
+c
+d 741 1 0 0 1
+c
+d 388 1 0 0 1
+c
+d 405 1 0 0 1
+c
+d 646 1 0 0 1
+c
+d 741 1 0 0 1
+c
+d 360 2 0 1 1
+c
+d 361 1 0 1 1
+c
+d 360 2 0 0 0
+c
+d 361 1 0 0 0
+c
+d 369 2 0 0 1
+c
+d 371 1 0 0 1
+c
+d 366 1 0 0 1
+c
+d 234 1 0 0 1
+c
+d 366 1 0 0 1
+c
+d 369 2 0 0 1
+c
+d 371 1 0 0 1
+c
+d 234 1 0 0 1
+c
+d 366 1 0 0 1
+c
+d 369 2 0 0 1
+c
+d 371 1 0 0 1
+c
+d 525 1 0 0 1
+c
+d 525 1 0 0 1
+c
+d 568 1 0 0 1
+c
+d 568 1 0 0 0
+c
+d 459 2 0 0 0
+c
+d 460 1 0 0 0
+c
+d 494 2 1 0 0
+c
+d 518 1 0 0 0
+c
+d 696 1 0 0 0
+c
+d 540 1 0 0 0
+c
+d 583 1 0 1 0
+c
+d 561 5 0 1 0
+c
+d 749 4 0 0 0
+c
+d 511 3 0 0 0
+c
+d 345 4 0 0 0
+c
+d 323 1 0 0 1
+c
+d 324 1 0 0 1
+c
+d 322 1 0 0 1
+c
+d 319 2 0 0 1
+c
+d 321 1 0 0 1
+c
+d 322 1 0 0 1
+c
+d 358 1 0 0 0
+c
+d 366 1 0 0 0
+c
+d 727 1 0 0 1
+c
+d 446 2 0 0 0
+c
+d 537 1 0 0 0
+c
+d 663 1 1 0 0
+c
+d 561 1 0 0 1
+c
+d 705 1 0 1 1
+c
+d 563 1 0 0 1
+c
+d 566 1 0 0 1
+c
+d 561 1 0 0 1
+c
+d 563 1 0 0 1
+c
+d 566 1 0 0 1
+c
+d 705 1 0 0 1
+c
+d 561 1 0 0 0
+c
+d 563 1 0 0 0
+c
+d 566 4 0 0 0
+c
+d 705 1 0 0 0
+c
+d 510 2 0 0 0
+c
+d 446 4 1 1 0
+c
+d 721 2 0 0 0
+c
+d 725 1 1 0 0
+c
+d 726 1 0 1 0
+c
+d 508 1 0 0 1
+c
+d 725 1 0 0 1
+c
+d 508 1 1 0 0
+c
+d 725 1 0 0 0
+c
+d 741 1 0 0 0
+c
+d 749 4 1 0 0
+c
+d 751 1 0 0 0
+c
+d 558 2 0 1 0
+c
+d 628 1 0 0 0
+c
+d 276 1 0 0 0
+c
+d 749 3 0 0 0
+c
+d 530 1 0 0 1
+c
+d 366 1 0 0 1
+c
+d 366 1 0 0 1
+c
+d 529 1 0 0 1
+c
+d 530 2 0 0 1
+c
+d 366 1 0 0 1
+c
+d 529 1 0 0 1
+c
+d 530 2 0 0 1
+c
+d 366 1 0 0 1
+c
+d 366 1 0 0 1
+c
+d 47 1 0 0 1
+c
+d 47 1 0 0 1
+c
+d 46 1 0 0 1
+c
+d 46 1 0 0 0
+c
+d 286 1 0 0 0
+c
+d 290 1 0 0 0
+c
+d 642 4 0 0 1
+c
+d 695 1 0 0 1
+c
+d 516 4 1 0 0
+c
+d 642 5 0 0 0
+c
+d 695 1 0 0 0
+c
+d 698 2 0 0 0
+c
+d 746 2 1 0 1
+c
+d 314 1 0 0 0
+c
+d 746 2 0 0 0
+c
+d 558 1 0 0 1
+c
+d 559 1 0 1 1
+c
+d 552 4 1 0 0
+c
+d 593 1 0 1 0
+c
+d 595 1 0 0 0
+c
+d 478 2 0 0 1
+c
+d 496 1 0 0 1
+c
+d 494 3 1 0 1
+c
+d 398 1 0 1 1
+c
+d 400 1 0 1 1
+c
+d 513 1 0 0 0
+c
+d 366 2 0 0 0
+c
+d 227 1 0 0 1
+c
+d 660 1 1 0 1
+c
+d 148 2 0 0 1
+c
+d 140 1 0 0 1
+c
+d 140 1 0 0 1
+c
+d 148 2 0 0 1
+c
+d 227 1 0 0 1
+c
+d 660 2 0 0 1
+c
+d 140 1 0 0 1
+c
+d 148 2 0 0 1
+c
+d 227 1 0 0 1
+c
+d 660 2 0 0 1
+c
+d 144 2 0 0 1
+c
+d 144 2 0 0 1
+c
+d 143 1 0 0 1
+c
+d 143 1 0 0 1
+c
+d 142 1 0 0 1
+c
+d 141 2 0 0 1
+c
+d 142 1 0 0 1
+c
+d 143 2 0 0 1
+c
+d 529 1 0 0 1
+c
+d 530 1 0 0 1
+c
+d 366 2 0 0 0
+c
+d 538 1 1 0 1
+c
+d 155 2 0 0 1
+c
+d 154 1 0 0 0
+c
+d 613 1 0 0 0
+c
+d 309 3 0 0 0
+c
+d 523 1 0 0 1
+c
+d 524 1 0 0 1
+c
+d 541 1 0 0 1
+c
+d 527 1 0 0 0
+c
+d 484 2 0 1 0
+c
+d 730 1 0 1 0
+c
+d 516 1 0 0 1
+c
+d 518 1 0 0 0
+c
+d 294 3 1 0 1
+c
+d 279 1 0 0 0
+c
+d 280 1 0 1 0
+c
+d 311 2 1 0 1
+c
+d 309 1 0 0 0
+c
+d 311 2 0 0 0
+c
+d 651 1 0 0 1
+c
+d 442 1 0 0 1
+c
+d 442 1 0 0 1
+c
+d 651 2 0 0 1
+c
+d 442 1 0 0 1
+c
+d 651 2 0 0 1
+c
+d 442 1 0 0 1
+c
+d 442 1 0 0 0
+c
+d 589 1 0 0 1
+c
+d 170 1 0 0 1
+c
+d 185 1 0 0 1
+c
+d 242 1 0 0 1
+c
+d 589 1 0 0 1
+c
+d 609 2 0 0 0
+c
+d 438 1 0 0 1
+c
+d 439 1 0 0 1
+c
+d 430 1 0 0 0
+c
+d 319 3 0 0 1
+c
+d 321 1 0 0 1
+c
+d 319 1 0 0 0
+c
+d 747 3 0 0 0
+c
+d 648 1 0 1 0
+c
+d 692 2 1 0 0
+c
+d 707 1 1 0 1
+c
+d 340 1 0 1 0
+c
+d 663 1 0 0 0
+c
+d 452 1 0 0 1
+c
+d 494 2 0 0 1
+c
+d 494 1 0 0 0
+c
+d 447 1 0 1 0
+c
+d 370 1 0 0 1
+c
+d 371 1 0 0 1
+c
+d 366 1 1 0 0
+c
+d 267 3 1 0 0
+c
+d 572 4 0 0 0
+c
+d 663 1 0 0 1
+c
+d 547 1 0 0 1
+c
+d 159 1 0 0 1
+c
+d 159 1 0 0 1
+c
+d 547 3 0 0 1
+c
+d 663 1 0 0 1
+c
+d 159 1 0 0 1
+c
+d 547 3 0 0 1
+c
+d 663 1 0 0 1
+c
+d 620 3 1 0 1
+c
+d 620 2 1 0 0
+c
+d 372 1 0 0 1
+c
+d 373 1 0 0 1
+c
+d 369 1 0 0 0
+c
+d 370 1 0 0 0
+c
+d 372 1 0 0 0
+c
+d 373 1 0 0 0
+c
+d 662 3 0 1 0
+c
+d 614 1 0 0 0
+c
+d 615 1 0 0 0
+c
+d 671 1 0 0 0
+c
+d 460 1 0 0 0
+c
+d 494 1 0 1 0
+c
+d 729 5 2 0 0
+c
+d 647 1 0 0 1
+c
+d 407 1 0 0 1
+c
+d 408 2 0 0 1
+c
+d 63 2 0 0 0
+c
+d 610 1 0 0 1
+c
+d 332 1 0 0 1
+c
+d 333 1 0 0 1
+c
+d 178 1 0 0 1
+c
+d 178 1 0 0 1
+c
+d 332 1 0 0 1
+c
+d 333 1 0 0 1
+c
+d 610 2 0 0 1
+c
+d 178 1 0 0 1
+c
+d 332 1 0 0 1
+c
+d 333 1 0 0 1
+c
+d 610 2 0 0 1
+c
+d 178 2 0 0 1
+c
+d 178 2 0 0 1
+c
+d 581 1 0 1 1
+c
+d 581 1 0 0 1
+c
+d 610 1 0 0 1
+c
+d 518 1 0 1 0
+c
+d 718 1 0 1 0
+c
+d 446 4 0 1 0
+c
+d 663 2 0 0 0
+c
+d 754 1 0 0 1
+c
+d 757 1 0 0 1
+c
+d 263 2 0 0 0
+c
+d 754 1 0 0 0
+c
+d 757 1 0 0 0
+c
+d 633 3 0 0 0
+c
+d 369 1 0 0 0
+c
+d 370 2 0 0 0
+c
+d 494 3 0 0 0
+c
+d 611 2 0 1 0
+c
+d 702 1 0 0 0
+c
+d 684 4 0 0 0
+c
+d 303 2 0 0 1
+c
+d 262 1 0 0 0
+c
+d 413 2 0 0 1
+c
+d 484 1 0 0 1
+c
+d 496 1 0 1 0
+c
+d 353 1 1 0 1
+c
+d 361 1 0 0 0
+c
+d 713 1 0 0 1
+c
+d 535 1 0 0 1
+c
+d 713 3 0 0 1
+c
+d 535 1 0 1 1
+c
+d 713 5 1 0 1
+c
+d 535 1 0 0 0
+c
+d 713 6 0 0 0
+c
+d 632 1 0 0 0
+c
+d 633 1 0 0 0
+c
+d 286 4 1 0 0
+c
+d 622 1 0 1 0
+c
+d 623 1 0 0 0
+c
+d 651 2 0 0 1
+c
+d 442 1 0 0 0
+c
+d 651 2 1 0 0
+c
+d 219 1 0 0 1
+c
+d 108 2 0 0 1
+c
+d 449 1 0 0 0
+c
+d 747 3 0 0 0
+c
+d 585 3 1 0 0
+c
+d 337 3 0 1 0
+c
+d 747 2 0 0 0
+c
+d 518 2 1 1 0
+c
+d 716 1 0 0 0
+c
+d 382 1 0 0 0
+c
+d 383 1 0 0 0
+c
+d 558 2 0 0 0
+c
+d 313 1 1 0 0
+c
+d 314 2 0 0 0
+c
+d 685 2 1 1 0
+c
+d 280 1 1 0 0
+c
+d 281 1 0 1 0
+c
+d 266 1 0 1 1
+c
+d 272 1 0 0 0
+c
+d 484 3 0 0 0
+c
+d 731 4 0 0 0
+c
+d 431 2 0 1 0
+c
+d 433 3 0 0 0
+c
+d 268 2 0 0 0
+c
+d 375 1 0 0 0
+c
+d 379 3 1 0 0
+c
+d 338 3 1 0 0
+c
+d 657 1 0 0 1
+c
+d 658 1 0 0 1
+c
+d 499 1 0 0 0
+c
+d 665 1 0 0 1
+c
+d 664 1 0 1 1
+c
+d 459 1 0 0 1
+c
+d 460 1 0 0 1
+c
+d 161 1 0 0 1
+c
+d 161 1 0 0 1
+c
+d 459 1 0 0 1
+c
+d 460 1 0 0 1
+c
+d 664 1 0 0 1
+c
+d 665 1 0 0 1
+c
+d 161 1 0 0 1
+c
+d 459 1 0 0 1
+c
+d 460 1 0 0 1
+c
+d 664 1 0 0 1
+c
+d 665 1 0 0 1
+c
+d 562 1 1 0 1
+c
+d 562 3 0 0 1
+c
+d 388 1 0 0 1
+c
+d 389 1 0 0 1
+c
+d 391 1 0 0 1
+c
+d 388 1 0 0 0
+c
+d 389 1 0 0 0
+c
+d 391 1 0 0 0
+c
+d 407 1 1 0 0
+c
+d 408 1 0 0 0
+c
+d 646 1 0 0 0
+c
+d 611 3 0 2 0
+c
+d 238 1 0 0 1
+c
+d 607 1 1 0 1
+c
+d 608 1 0 0 1
+c
+d 608 1 0 0 1
+c
+d 610 1 0 0 1
+c
+d 179 2 0 0 0
+c
+d 679 1 0 0 1
+c
+d 250 2 0 0 1
+c
+d 680 1 0 0 1
+c
+d 363 1 0 0 1
+c
+d 365 1 0 0 1
+c
+d 44 1 0 0 1
+c
+d 360 1 0 0 1
+c
+d 398 2 0 0 1
+c
+d 398 3 0 0 1
+c
+d 398 3 0 0 0
+c
+d 512 1 0 0 0
+c
+d 513 2 0 0 0
+c
+d 444 2 0 0 0
+c
+d 395 1 0 0 1
+c
+d 738 1 0 0 1
+c
+d 60 2 0 0 0
+c
+d 392 1 1 0 1
+c
+d 393 2 0 0 1
+c
+d 395 1 0 0 0
+c
+d 477 1 0 0 1
+c
+d 656 1 0 0 1
+c
+d 655 1 0 0 1
+c
+d 741 1 1 0 1
+c
+d 403 1 0 0 0
+c
+d 309 2 1 1 0
+c
+d 446 1 0 0 0
+c
+d 651 1 0 0 0
+c
+d 293 1 0 0 1
+c
+d 279 1 1 0 0
+c
+d 271 1 0 0 1
+c
+d 272 1 0 0 1
+c
+d 261 1 1 0 0
+c
+d 518 1 0 0 0
+c
+d 519 1 0 0 0
+c
+d 253 2 0 0 1
+c
+d 253 2 0 0 1
+c
+d 257 1 0 0 1
+c
+d 257 1 0 0 1
+c
+d 256 2 0 0 1
+c
+d 252 2 0 0 0
+c
+d 255 2 0 0 0
+c
+d 256 3 0 0 0
+c
+d 257 1 0 0 0
+c
+d 692 2 1 0 1
+c
+d 306 1 0 0 0
+c
+d 411 2 0 0 0
+c
+d 413 1 0 0 0
+c
+d 710 3 0 1 0
+c
+d 268 2 0 0 0
+c
+d 269 1 0 1 0
+c
+d 236 1 0 0 1
+c
+d 176 1 0 0 1
+c
+d 581 2 1 0 1
+c
+d 175 2 0 0 1
+c
+d 175 2 0 0 1
+c
+d 176 1 0 0 1
+c
+d 236 1 0 0 1
+c
+d 580 3 1 0 1
+c
+d 581 2 0 0 1
+c
+d 175 2 0 0 1
+c
+d 176 1 0 0 1
+c
+d 236 1 0 0 1
+c
+d 326 1 0 0 1
+c
+d 580 3 0 0 1
+c
+d 581 2 0 0 1
+c
+d 601 1 0 0 1
+c
+d 666 1 0 0 1
+c
+d 611 3 1 1 0
+c
+d 593 2 1 0 0
+c
+d 596 1 0 0 0
+c
+d 508 1 0 0 1
+c
+d 739 1 0 0 1
+c
+d 402 1 0 0 1
+c
+d 508 1 0 0 1
+c
+d 643 1 0 0 1
+c
+d 724 1 0 0 1
+c
+d 396 1 0 0 0
+c
+d 298 1 0 0 1
+c
+d 275 1 0 0 0
+c
+d 425 1 0 0 1
+c
+d 101 1 0 0 1
+c
+d 100 1 0 0 1
+c
+d 99 1 0 0 0
+c
+d 527 1 0 0 1
+c
+d 528 1 0 0 1
+c
+d 541 2 0 1 0
+c
+d 591 3 1 0 1
+c
+d 591 4 0 0 1
+c
+d 235 2 0 0 0
+c
+d 591 4 0 0 0
+c
+d 279 1 0 0 0
+c
+d 300 1 0 1 0
+c
+d 271 1 0 1 1
+c
+d 297 1 0 1 0
+c
+d 651 3 0 0 0
+c
+d 537 1 0 0 0
+c
+d 663 1 0 0 0
+c
+d 633 2 0 1 0
+c
+d 634 1 0 0 0
+c
+d 651 1 0 0 1
+c
+d 438 1 0 0 0
+c
+d 479 1 0 0 1
+c
+d 478 1 0 0 0
+c
+d 513 3 1 0 0
+c
+d 411 1 0 1 1
+c
+d 413 1 0 1 1
+c
+d 414 1 0 0 0
+c
+d 271 1 0 0 1
+c
+d 272 1 0 0 1
+c
+d 265 1 1 0 0
+c
+d 198 1 0 0 1
+c
+d 375 1 0 0 1
+c
+d 376 1 0 0 1
+c
+d 379 1 0 0 1
+c
+d 198 3 0 0 0
+c
+d 375 1 0 0 0
+c
+d 376 1 0 1 0
+c
+d 379 1 0 0 0
+c
+d 265 1 0 0 1
+c
+d 266 1 0 0 1
+c
+d 262 1 0 0 0
+c
+d 730 1 0 0 1
+c
+d 481 1 0 0 0
+c
+d 467 1 0 0 1
+c
+d 653 1 0 0 1
+c
+d 470 1 0 0 1
+c
+d 567 1 0 0 1
+c
+d 473 1 0 0 0
+c
+d 430 2 0 1 0
+c
+d 732 2 0 1 0
+c
+d 268 2 0 0 0
+c
+d 269 1 0 0 0
+c
+d 392 1 0 0 1
+c
+d 389 2 0 0 0
+c
+d 268 3 0 0 0
+c
+d 585 3 0 0 0
+c
+d 430 1 0 0 0
+c
+d 431 1 0 0 0
+c
+d 548 1 0 0 1
+c
+d 549 2 0 0 1
+c
+d 548 2 0 0 1
+c
+d 549 2 0 0 1
+c
+d 548 2 1 0 0
+c
+d 549 2 0 0 0
+c
+d 663 1 0 0 0
+c
+d 721 1 0 0 0
+c
+d 170 2 0 0 1
+c
+d 589 2 0 0 1
+c
+d 592 1 0 0 1
+c
+d 582 2 0 0 0
+c
+d 589 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 446 1 0 0 0
+c
+d 651 4 1 0 0
+c
+d 743 2 0 0 0
+c
+d 123 1 0 0 1
+c
+d 122 1 0 0 1
+c
+d 652 1 0 0 1
+c
+d 121 1 0 0 1
+c
+d 119 1 0 0 0
+c
+d 401 2 1 0 1
+c
+d 509 1 0 0 0
+c
+d 292 1 0 0 1
+c
+d 13 1 0 0 1
+c
+d 279 1 0 0 0
+c
+d 511 3 0 0 0
+c
+d 522 4 0 0 1
+c
+d 522 5 0 0 0
+c
+d 366 4 1 0 0
+c
+d 579 1 1 0 1
+c
+d 579 2 1 0 0
+c
+d 584 2 0 0 0
+c
+d 644 1 0 0 0
+c
+d 645 1 0 0 0
+c
+d 358 2 0 0 0
+c
+d 372 2 1 1 0
+c
+d 742 1 0 0 0
+c
+d 634 1 0 0 1
+c
+d 339 1 0 0 0
+c
+d 644 2 0 0 1
+c
+d 645 1 0 0 1
+c
+d 409 1 0 0 0
+c
+d 410 1 0 0 0
+c
+d 644 2 0 0 0
+c
+d 645 1 0 0 0
+c
+d 543 3 0 0 1
+c
+d 542 2 0 0 0
+c
+d 543 3 0 0 0
+c
+d 50 1 0 0 1
+c
+d 375 1 0 0 1
+c
+d 305 1 0 0 1
+c
+d 50 1 0 0 1
+c
+d 305 1 0 0 1
+c
+d 375 2 0 0 1
+c
+d 50 1 0 0 1
+c
+d 305 1 0 0 1
+c
+d 375 2 0 0 1
+c
+d 50 1 0 0 1
+c
+d 50 1 0 0 1
+c
+d 304 1 0 0 1
+c
+d 375 1 0 0 1
+c
+d 376 1 0 0 1
+c
+d 345 1 0 1 1
+c
+d 347 1 0 0 1
+c
+d 36 2 0 0 1
+c
+d 32 1 1 0 0
+c
+d 409 1 0 0 1
+c
+d 407 1 0 0 0
+c
+d 633 2 0 0 1
+c
+d 345 2 1 0 0
+c
+d 360 1 0 0 1
+c
+d 363 2 0 0 1
+c
+d 358 1 0 0 1
+c
+d 360 1 0 0 1
+c
+d 363 2 0 0 1
+c
+d 358 1 0 0 0
+c
+d 360 1 0 0 0
+c
+d 363 2 0 0 0
+c
+d 648 1 0 0 1
+c
+d 692 1 0 0 1
+c
+d 306 1 0 1 0
+c
+d 754 1 0 0 1
+c
+d 259 1 0 0 1
+c
+d 263 1 0 0 0
+c
+d 512 2 0 0 1
+c
+d 136 1 0 0 1
+c
+d 398 1 1 0 0
+c
+d 593 2 0 1 0
+c
+d 595 1 1 0 0
+c
+d 573 2 0 0 0
+c
+d 574 1 0 0 0
+c
+d 409 1 0 0 1
+c
+d 410 1 0 0 1
+c
+d 385 1 0 0 1
+c
+d 409 1 0 0 1
+c
+d 410 2 0 0 1
+c
+d 385 1 0 0 0
+c
+d 409 1 0 0 0
+c
+d 410 2 1 0 0
+c
+d 644 1 0 0 0
+c
+d 650 1 0 0 1
+c
+d 649 1 0 0 0
+c
+d 303 3 0 0 0
+c
+d 685 1 0 0 1
+c
+d 532 1 0 0 0
+c
+d 251 1 0 0 1
+c
+d 251 1 0 0 0
+c
+d 573 1 0 0 1
+c
+d 573 1 0 0 1
+c
+d 614 1 0 0 1
+c
+d 631 2 0 0 1
+c
+d 631 1 0 0 0
+c
+d 518 2 0 1 0
+c
+d 519 1 0 1 0
+c
+d 270 1 0 0 1
+c
+d 752 2 1 0 1
+c
+d 267 1 0 1 0
+c
+d 753 1 0 0 0
+c
+d 207 1 0 0 1
+c
+d 85 1 0 0 1
+c
+d 84 2 0 0 1
+c
+d 82 1 0 0 1
+c
+d 81 1 0 0 1
+c
+d 81 1 0 0 1
+c
+d 206 1 0 0 1
+c
+d 207 2 1 0 1
+c
+d 417 1 0 0 1
+c
+d 79 1 0 0 0
+c
+d 200 2 0 0 1
+c
+d 638 2 1 0 1
+c
+d 58 1 0 0 1
+c
+d 380 1 0 0 1
+c
+d 58 1 0 0 1
+c
+d 200 2 0 0 1
+c
+d 380 1 0 0 1
+c
+d 638 2 0 0 1
+c
+d 642 1 0 0 1
+c
+d 638 2 0 0 1
+c
+d 638 3 0 0 0
+c
+d 286 3 1 0 0
+c
+d 265 1 0 0 1
+c
+d 262 1 0 0 0
+c
+d 651 1 0 1 1
+c
+d 438 1 0 0 1
+c
+d 438 1 0 0 1
+c
+d 651 1 0 0 1
+c
+d 689 1 0 0 1
+c
+d 438 1 0 0 0
+c
+d 651 1 0 0 0
+c
+d 689 1 0 0 0
+c
+d 286 1 0 0 0
+c
+d 290 1 0 0 0
+c
+d 558 2 0 0 0
+c
+d 663 3 1 0 0
+c
+d 708 3 0 0 0
+c
+d 407 3 1 0 1
+c
+d 407 4 0 0 0
+c
+d 309 1 0 0 1
+c
+d 310 1 0 0 1
+c
+d 308 1 0 0 1
+c
+d 308 1 0 0 1
+c
+d 309 1 0 0 1
+c
+d 310 1 0 0 1
+c
+d 745 1 0 0 1
+c
+d 308 1 0 0 1
+c
+d 309 1 0 0 1
+c
+d 310 1 0 0 1
+c
+d 745 1 0 0 1
+c
+d 310 1 0 0 1
+c
+d 310 1 0 0 0
+c
+d 556 1 0 0 1
+c
+d 557 1 0 0 1
+c
+d 556 1 0 1 0
+c
+d 557 1 0 0 0
+c
+d 558 1 1 0 0
+c
+d 685 4 1 0 0
+c
+d 361 3 0 0 1
+c
+d 353 1 0 0 0
+c
+d 361 3 1 0 0
+c
+d 286 2 0 1 0
+c
+d 709 2 0 0 0
+c
+d 427 3 1 0 0
+c
+d 388 1 0 0 1
+c
+d 390 1 0 0 1
+c
+d 391 1 0 0 1
+c
+d 388 1 0 0 0
+c
+d 390 2 0 0 0
+c
+d 391 1 0 0 0
+c
+d 425 1 0 1 1
+c
+d 426 1 1 0 1
+c
+d 99 1 0 0 1
+c
+d 425 3 1 0 1
+c
+d 427 3 0 0 1
+c
+d 99 1 0 0 1
+c
+d 425 3 0 0 1
+c
+d 426 2 0 0 1
+c
+d 427 3 0 0 1
+c
+d 96 1 0 0 0
+c
+d 97 2 0 0 0
+c
+d 99 1 0 0 0
+c
+d 425 3 0 0 0
+c
+d 426 2 0 0 0
+c
+d 427 3 0 0 0
+c
+d 428 1 0 0 0
+c
+d 393 3 0 0 1
+c
+d 59 1 0 0 1
+c
+d 59 2 0 0 1
+c
+d 393 1 0 0 1
+c
+d 395 1 0 0 1
+c
+d 59 3 0 0 1
+c
+d 393 5 0 0 1
+c
+d 395 1 0 0 1
+c
+d 59 3 0 0 1
+c
+d 388 4 0 0 1
+c
+d 393 5 0 0 1
+c
+d 395 1 0 0 1
+c
+d 552 1 1 0 1
+c
+d 631 3 0 0 1
+c
+d 561 1 0 1 0
+c
+d 279 4 0 0 0
+c
+d 300 1 0 0 0
+c
+d 496 1 0 0 1
+c
+d 130 2 0 0 1
+c
+d 494 2 0 0 0
+c
+d 561 2 0 0 1
+c
+d 611 1 0 0 0
+c
+d 634 2 1 0 0
+c
+d 616 1 0 0 1
+c
+d 617 1 0 0 1
+c
+d 622 1 0 0 0
+c
+d 358 1 1 0 0
+c
+d 366 1 0 0 0
+c
+d 201 1 0 0 1
+c
+d 376 1 0 0 1
+c
+d 304 1 0 0 0
+c
+d 663 2 0 1 1
+c
+d 346 1 0 0 1
+c
+d 346 1 0 0 1
+c
+d 663 2 1 0 1
+c
+d 346 1 0 0 0
+c
+d 663 5 0 0 0
+c
+d 596 2 0 0 0
+c
+d 324 1 0 0 0
+c
+d 358 1 0 0 0
+c
+d 366 1 0 0 0
+c
+d 516 3 0 0 0
+c
+d 299 1 1 0 1
+c
+d 302 1 1 0 1
+c
+d 749 1 0 0 0
+c
+d 268 1 0 0 1
+c
+d 264 1 0 0 1
+c
+d 271 1 0 0 1
+c
+d 264 3 0 0 1
+c
+d 268 1 0 0 1
+c
+d 271 1 0 0 1
+c
+d 264 3 0 0 0
+c
+d 268 1 0 0 0
+c
+d 271 1 0 0 0
+c
+d 542 1 0 0 0
+c
+d 709 2 0 0 0
+c
+d 382 1 0 0 1
+c
+d 641 3 0 0 0
+c
+d 572 3 0 0 0
+c
+d 663 2 0 1 0
+c
+d 314 4 1 0 0
+c
+d 746 1 0 0 0
+c
+d 270 2 0 2 1
+c
+d 270 2 0 0 0
+c
+d 344 1 0 0 1
+c
+d 191 1 0 0 1
+c
+d 190 2 0 0 1
+c
+d 33 2 0 0 1
+c
+d 30 1 0 0 1
+c
+d 30 1 0 0 1
+c
+d 33 2 0 0 1
+c
+d 190 2 0 0 1
+c
+d 191 1 0 0 1
+c
+d 344 3 1 0 1
+c
+d 30 1 0 0 1
+c
+d 33 2 0 0 1
+c
+d 190 2 0 0 1
+c
+d 191 3 0 0 1
+c
+d 338 3 0 0 1
+c
+d 344 5 0 0 1
+c
+d 102 1 0 0 0
+c
+d 490 2 0 0 1
+c
+d 706 4 1 0 0
+c
+d 664 1 0 1 1
+c
+d 504 1 0 0 1
+c
+d 460 1 0 0 0
+c
+d 461 1 0 0 0
+c
+d 363 3 1 0 1
+c
+d 359 1 0 0 1
+c
+d 363 3 0 0 1
+c
+d 364 1 0 0 1
+c
+d 42 2 0 0 0
+c
+d 359 1 0 1 0
+c
+d 363 3 1 0 0
+c
+d 364 1 0 0 0
+c
+d 753 3 0 0 0
+c
+d 21 1 0 0 0
+c
+d 590 1 0 1 1
+c
+d 620 5 1 0 1
+c
+d 422 1 0 1 1
+c
+d 652 1 1 0 1
+c
+d 122 2 0 0 0
+c
+d 446 3 1 0 1
+c
+d 651 1 0 0 1
+c
+d 446 3 0 0 0
+c
+d 651 1 0 0 0
+c
+d 494 3 1 0 0
+c
+d 554 1 0 0 1
+c
+d 555 1 0 0 1
+c
+d 180 1 0 0 0
+c
+d 755 1 0 0 1
+c
+d 756 1 0 0 1
+c
+d 262 1 0 0 1
+c
+d 258 1 0 0 0
+c
+d 632 1 0 0 1
+c
+d 633 1 0 0 1
+c
+d 632 1 0 1 0
+c
+d 633 2 1 0 0
+c
+d 707 1 0 0 0
+c
+d 363 1 0 0 1
+c
+d 743 1 0 0 1
+c
+d 47 1 0 0 1
+c
+d 45 2 0 0 1
+c
+d 45 2 0 0 1
+c
+d 47 1 0 0 1
+c
+d 363 1 0 0 1
+c
+d 529 1 0 0 1
+c
+d 743 1 0 0 1
+c
+d 45 2 0 0 1
+c
+d 47 1 0 0 1
+c
+d 363 1 0 0 1
+c
+d 529 1 0 0 1
+c
+d 743 1 0 0 1
+c
+d 45 1 0 0 1
+c
+d 45 1 0 0 1
+c
+d 44 2 0 0 1
+c
+d 44 2 0 0 1
+c
+d 579 1 0 0 0
+c
+d 580 1 0 0 0
+c
+d 581 1 1 0 0
+c
+d 582 2 1 0 0
+c
+d 713 1 0 0 1
+c
+d 714 1 0 0 1
+c
+d 710 1 0 1 0
+c
+d 133 2 0 0 0
+c
+d 453 2 0 0 0
+c
+d 659 1 0 0 0
+c
+d 755 2 1 0 0
+c
+d 268 2 0 0 1
+c
+d 268 3 0 0 1
+c
+d 265 2 0 0 0
+c
+d 268 3 0 0 0
+c
+d 303 2 0 0 0
+c
+d 286 3 1 1 0
+c
+d 460 5 2 0 0
+c
+d 671 2 0 0 0
+c
+d 266 1 0 0 1
+c
+d 262 1 0 0 0
+c
+d 648 2 1 0 0
+c
+d 279 1 1 0 0
+c
+d 286 1 0 0 0
+c
+d 287 1 0 0 0
+c
+d 366 1 0 1 1
+c
+d 367 1 0 0 1
+c
+d 353 2 0 0 1
+c
+d 353 2 0 0 1
+c
+d 366 1 0 0 1
+c
+d 367 1 0 0 1
+c
+d 353 2 0 0 0
+c
+d 366 1 0 0 0
+c
+d 367 1 0 0 0
+c
+d 613 2 0 0 1
+c
+d 613 5 0 0 0
+c
+d 698 2 0 0 1
+c
+d 531 2 0 0 0
+c
+d 496 1 0 0 1
+c
+d 421 1 0 0 1
+c
+d 494 2 0 0 1
+c
+d 496 1 0 0 1
+c
+d 421 2 0 0 1
+c
+d 494 2 0 1 1
+c
+d 496 2 0 0 1
+c
+d 421 3 0 0 0
+c
+d 494 7 0 0 0
+c
+d 496 2 0 0 0
+c
+d 113 1 0 0 1
+c
+d 111 1 0 0 1
+c
+d 449 2 0 1 1
+c
+d 110 2 0 0 1
+c
+d 110 2 0 0 1
+c
+d 111 1 0 0 1
+c
+d 113 1 0 0 1
+c
+d 449 3 0 0 1
+c
+d 110 2 0 0 1
+c
+d 111 1 0 0 1
+c
+d 113 1 0 0 1
+c
+d 449 3 0 0 1
+c
+d 110 1 0 0 1
+c
+d 110 1 0 0 1
+c
+d 270 1 0 1 1
+c
+d 0 2 1 0 1
+c
+d 267 1 0 1 1
+c
+d 268 1 0 0 1
+c
+d 2 1 0 0 0
+c
+d 494 2 0 0 0
+c
+d 613 3 0 0 1
+c
+d 613 2 0 0 0
+c
+d 265 3 1 0 0
+c
+d 468 2 0 0 0
+c
+d 644 1 0 0 1
+c
+d 385 1 0 0 1
+c
+d 385 1 0 1 1
+c
+d 411 2 0 0 1
+c
+d 411 1 1 0 0
+c
+d 397 1 1 0 1
+c
+d 515 1 0 0 1
+c
+d 723 1 0 0 1
+c
+d 397 3 0 0 0
+c
+d 515 1 0 0 0
+c
+d 723 1 0 0 0
+c
+d 498 2 0 0 1
+c
+d 550 1 0 0 1
+c
+d 483 2 0 0 1
+c
+d 497 1 0 0 1
+c
+d 498 3 0 0 1
+c
+d 550 1 0 0 1
+c
+d 674 2 0 0 0
+c
+d 672 2 0 0 0
+c
+d 673 1 0 0 0
+c
+d 747 5 1 0 1
+c
+d 747 5 0 0 0
+c
+d 487 1 0 0 1
+c
+d 484 2 0 0 0
+c
+d 485 1 0 0 0
+c
+d 572 1 0 0 0
+c
+d 665 4 1 0 0
+c
+d 370 3 0 2 0
+c
+d 346 1 0 0 1
+c
+d 663 1 0 0 0
+c
+d 758 1 0 0 1
+c
+d 542 2 0 1 1
+c
+d 758 2 0 0 1
+c
+d 708 1 1 0 0
+c
+d 576 1 0 0 1
+c
+d 577 5 0 0 1
+c
+d 578 1 0 0 1
+c
+d 615 3 1 0 1
+c
+d 616 2 0 0 1
+c
+d 187 1 0 0 0
+c
+d 677 1 0 0 1
+c
+d 677 1 0 0 1
+c
+d 248 1 0 0 1
+c
+d 248 1 0 0 1
+c
+d 679 2 0 0 1
+c
+d 679 2 0 0 1
+c
+d 677 1 0 0 1
+c
+d 247 1 0 0 1
+c
+d 672 1 0 0 1
+c
+d 677 2 0 0 1
+c
+d 334 1 0 0 0
+c
+d 713 2 0 0 0
+c
+d 732 1 0 0 0
+c
+d 394 1 0 0 1
+c
+d 738 1 0 1 0
+c
+d 759 1 0 0 1
+c
+d 589 2 0 0 1
+c
+d 590 1 0 0 1
+c
+d 169 2 1 0 1
+c
+d 171 1 0 0 1
+c
+d 589 1 0 0 1
+c
+d 592 1 0 0 1
+c
+d 620 1 0 0 1
+c
+d 169 2 0 0 1
+c
+d 171 1 0 0 1
+c
+d 589 3 0 0 1
+c
+d 590 1 0 0 1
+c
+d 592 1 0 0 1
+c
+d 620 1 0 0 1
+c
+d 759 1 0 0 1
+c
+d 169 2 0 0 1
+c
+d 171 1 0 0 1
+c
+d 589 3 0 0 1
+c
+d 590 1 0 0 1
+c
+d 592 1 0 0 1
+c
+d 620 1 0 0 1
+c
+d 759 1 0 0 1
+c
+d 589 1 0 0 1
+c
+d 589 1 0 0 1
+c
+d 759 6 0 0 1
+c
+d 663 1 0 0 1
+c
+d 159 2 0 0 1
+c
+d 158 2 1 0 0
+c
+d 558 2 0 0 1
+c
+d 554 1 0 0 0
+c
+d 223 1 0 0 1
+c
+d 657 2 0 0 1
+c
+d 499 1 0 0 1
+c
+d 223 1 0 0 1
+c
+d 499 1 0 0 1
+c
+d 657 3 0 0 1
+c
+d 223 1 0 0 1
+c
+d 499 1 0 0 1
+c
+d 657 3 0 0 1
+c
+d 223 1 0 0 1
+c
+d 223 1 0 0 1
+c
+d 657 2 0 0 1
+c
+d 385 1 0 0 0
+c
+d 409 1 0 0 0
+c
+d 490 2 0 1 0
+c
+d 279 1 1 0 1
+c
+d 8 1 0 0 1
+c
+d 279 1 0 0 1
+c
+d 292 1 0 0 1
+c
+d 292 1 0 0 0
+c
+d 265 2 0 0 1
+c
+d 262 1 0 0 0
+c
+d 303 1 0 0 1
+c
+d 284 1 0 0 0
+c
+d 411 5 2 0 1
+c
+d 411 5 0 0 0
+c
+d 415 2 0 0 0
+c
+d 509 1 1 0 0
+c
+d 520 5 0 0 0
+c
+d 547 2 0 1 1
+c
+d 537 1 1 0 0
+c
+d 538 1 0 0 0
+c
+d 337 2 0 1 0
+c
+d 701 1 0 1 0
+c
+d 664 2 0 0 1
+c
+d 460 2 1 0 0
+c
+d 351 1 0 0 1
+c
+d 324 2 0 0 0
+c
+d 713 3 1 0 0
+c
+d 326 1 0 0 1
+c
+d 325 1 0 0 1
+c
+d 326 1 1 0 1
+c
+d 603 1 0 0 1
+c
+d 580 2 0 0 0
+c
+d 268 2 0 0 0
+c
+d 603 3 0 0 0
+c
+d 421 1 1 0 1
+c
+d 423 1 0 0 1
+c
+d 88 2 0 0 1
+c
+d 87 2 1 0 0
+c
+d 751 2 0 0 0
+c
+d 522 1 0 0 1
+c
+d 704 3 0 0 1
+c
+d 575 1 0 0 0
+c
+d 704 2 0 0 0
+c
+d 593 3 0 0 1
+c
+d 626 1 0 0 1
+c
+d 668 1 0 0 1
+c
+d 671 1 0 1 1
+c
+d 593 3 1 0 0
+c
+d 626 1 0 0 0
+c
+d 668 1 0 0 0
+c
+d 671 3 1 0 0
+c
+d 430 2 1 0 0
+c
+d 749 2 1 0 0
+c
+d 643 1 1 0 0
+c
+d 309 2 0 1 0
+c
+d 310 1 1 0 0
+c
+d 606 1 0 0 1
+c
+d 582 1 0 0 0
+c
+d 456 1 0 0 1
+c
+d 446 1 1 0 0
+c
+d 447 1 0 0 0
+c
+d 749 1 0 1 1
+c
+d 302 1 0 0 0
+c
+d 295 1 0 0 1
+c
+d 747 1 0 0 1
+c
+d 748 1 0 0 1
+c
+d 15 1 0 0 0
+c
+d 685 3 0 0 0
+c
+d 506 1 0 0 1
+c
+d 727 1 0 0 1
+c
+d 446 1 0 0 0
+c
+d 506 1 0 0 0
+c
+d 727 1 0 0 0
+c
+d 614 2 0 0 0
+c
+d 671 2 0 0 0
+c
+d 537 1 0 0 1
+c
+d 712 3 0 0 1
+c
+d 714 1 0 0 1
+c
+d 712 1 0 0 0
+c
+d 299 4 0 0 0
+c
+d 626 1 0 0 1
+c
+d 627 3 0 0 1
+c
+d 671 1 0 0 0
+c
+d 394 1 0 0 1
+c
+d 738 1 0 0 0
+c
+d 74 2 0 0 0
+c
+d 516 1 0 0 1
+c
+d 517 1 0 0 1
+c
+d 516 1 0 2 0
+c
+d 517 1 0 2 0
+c
+d 519 1 0 0 0
+c
+d 680 1 0 0 1
+c
+d 682 1 0 0 1
+c
+d 250 1 0 0 1
+c
+d 680 1 0 0 1
+c
+d 682 1 0 0 1
+c
+d 681 1 0 0 0
+c
+d 322 1 0 0 1
+c
+d 324 1 0 0 1
+c
+d 357 1 0 0 1
+c
+d 358 1 0 0 1
+c
+d 324 1 0 1 0
+c
+d 358 3 1 0 0
+c
+d 599 1 0 0 0
+c
+d 666 1 0 0 0
+c
+d 683 2 0 0 0
+c
+d 266 1 0 0 1
+c
+d 262 1 0 0 0
+c
+d 518 1 0 0 0
+c
+d 717 1 0 0 0
+c
+d 719 2 0 0 0
+c
+d 436 2 1 0 0
+c
+d 447 1 0 1 0
+c
+d 392 1 0 0 0
+c
+d 740 1 0 0 0
+c
+d 271 1 0 0 1
+c
+d 261 1 0 0 0
+c
+d 685 2 0 2 0
+c
+d 614 1 0 0 1
+c
+d 593 1 0 1 0
+c
+d 628 1 0 1 0
+c
+d 398 2 0 0 0
+c
+d 628 4 1 0 0
+c
+d 629 1 1 0 0
+c
+d 430 1 0 0 1
+c
+d 381 1 0 1 1
+c
+d 57 2 0 0 1
+c
+d 57 1 1 0 0
+c
+d 267 1 0 0 0
+c
+d 413 4 1 0 0
+c
+d 295 4 1 1 1
+c
+d 295 5 0 0 1
+c
+d 15 2 0 0 0
+c
+d 295 5 0 0 0
+c
+d 271 3 0 0 0
+c
+d 632 2 0 0 0
+c
+d 271 1 0 1 0
+c
+d 272 3 0 1 0
+c
+d 560 3 1 0 0
+c
+d 397 2 0 0 1
+c
+d 376 2 0 0 1
+c
+d 397 3 0 0 1
+c
+d 52 1 0 0 0
+c
+d 651 1 0 0 1
+c
+d 650 1 0 1 1
+c
+d 650 1 0 0 1
+c
+d 651 1 0 0 1
+c
+d 650 1 0 0 1
+c
+d 651 1 0 0 1
+c
+d 651 1 0 1 1
+c
+d 689 2 1 0 1
+c
+d 106 1 0 0 0
+c
+d 651 2 0 0 0
+c
+d 689 3 0 0 0
+c
+d 447 1 1 0 1
+c
+d 448 1 0 0 1
+c
+d 445 2 0 0 1
+c
+d 107 1 0 0 1
+c
+d 444 1 0 0 0
+c
+d 749 1 1 0 1
+c
+d 751 2 0 0 1
+c
+d 289 1 0 0 0
+c
+d 755 3 0 0 1
+c
+d 258 2 0 0 0
+c
+d 518 3 1 0 0
+c
+d 716 1 0 0 0
+c
+d 717 1 0 0 0
+c
+d 718 1 0 1 0
+c
+d 515 1 0 0 1
+c
+d 721 1 0 0 1
+c
+d 721 2 0 0 0
+c
+d 186 1 0 0 1
+c
+d 621 1 0 0 1
+c
+d 622 5 0 0 1
+c
+d 186 1 0 0 0
+c
+d 621 2 0 0 0
+c
+d 622 5 0 0 0
+c
+d 291 1 0 0 0
+c
+d 292 1 0 0 0
+c
+d 531 3 0 0 0
+c
+d 584 1 0 0 1
+c
+d 595 1 0 0 1
+c
+d 579 1 1 0 0
+c
+d 582 2 0 1 0
+c
+d 703 1 0 0 0
+c
+d 268 2 0 0 0
+c
+d 651 1 1 0 0
+c
+d 685 1 0 0 0
+c
+d 686 1 0 0 0
+c
+d 657 1 0 0 1
+c
+d 505 1 0 0 1
+c
+d 461 1 0 0 0
+c
+d 503 4 0 0 0
+c
+d 558 3 0 0 0
+c
+d 559 1 0 0 0
+c
+d 628 1 1 0 0
+c
+d 291 1 0 0 1
+c
+d 14 1 0 0 1
+c
+d 284 1 0 0 1
+c
+d 4 2 0 0 1
+c
+d 4 2 0 0 1
+c
+d 14 1 0 0 1
+c
+d 284 2 0 0 1
+c
+d 291 1 0 0 1
+c
+d 4 2 0 0 1
+c
+d 14 1 0 0 1
+c
+d 284 2 0 0 1
+c
+d 291 1 0 0 1
+c
+d 291 1 0 1 1
+c
+d 4 1 0 0 1
+c
+d 291 2 0 0 1
+c
+d 429 2 0 0 0
+c
+d 444 1 0 1 1
+c
+d 441 1 0 0 1
+c
+d 441 1 0 0 1
+c
+d 444 1 0 0 1
+c
+d 441 1 0 0 1
+c
+d 444 1 0 0 1
+c
+d 442 1 0 0 1
+c
+d 442 1 0 0 1
+c
+d 441 1 0 0 1
+c
+d 441 1 0 0 0
+c
+d 562 1 0 0 0
+c
+d 572 1 0 0 0
+c
+d 665 1 0 0 0
+c
+d 338 3 1 0 0
+c
+d 634 1 0 0 0
+c
+d 522 1 0 0 0
+c
+d 540 1 0 0 0
+c
+d 583 1 0 0 0
+c
+d 493 1 0 0 1
+c
+d 495 1 0 0 0
+c
+d 710 2 0 0 1
+c
+d 713 1 0 0 0
+c
+d 268 2 1 0 0
+c
+d 518 2 1 0 0
+c
+d 532 1 0 0 1
+c
+d 533 2 0 0 1
+c
+d 457 1 0 0 1
+c
+d 457 1 0 0 1
+c
+d 532 1 0 0 1
+c
+d 533 2 0 0 1
+c
+d 685 1 0 0 1
+c
+d 457 1 0 0 0
+c
+d 532 1 0 0 0
+c
+d 533 2 0 0 0
+c
+d 685 1 0 0 0
+c
+d 406 1 0 0 1
+c
+d 644 1 0 0 0
+c
+d 379 1 1 0 0
+c
+d 638 4 1 0 0
+c
+d 690 2 0 0 0
+c
+d 411 4 0 0 0
+c
+d 654 2 0 0 0
+c
+d 744 3 0 1 1
+c
+d 329 1 0 0 0
+c
+d 744 4 0 0 0
+c
+d 483 1 0 0 1
+c
+d 500 1 0 0 1
+c
+d 484 1 0 0 1
+c
+d 500 4 1 0 1
+c
+d 483 1 0 0 1
+c
+d 484 1 0 0 1
+c
+d 500 4 0 0 1
+c
+d 658 1 0 0 1
+c
+d 483 1 0 0 1
+c
+d 484 1 0 0 1
+c
+d 500 4 0 0 1
+c
+d 658 1 0 0 1
+c
+d 500 3 0 0 1
+c
+d 500 4 0 0 0
+c
+d 657 1 0 0 0
+c
+d 658 1 0 0 0
+c
+d 379 1 1 0 1
+c
+d 305 1 0 1 0
+c
+d 268 2 1 0 0
+c
+d 541 1 0 0 1
+c
+d 710 1 0 0 1
+c
+d 721 1 0 0 0
+c
+d 754 1 0 0 1
+c
+d 755 1 0 0 1
+c
+d 258 1 0 1 0
+c
+d 259 1 0 0 0
+c
+d 612 1 0 0 1
+c
+d 552 1 0 1 0
+c
+d 197 2 0 0 1
+c
+d 636 1 0 0 1
+c
+d 319 1 0 0 1
+c
+d 320 1 0 0 1
+c
+d 362 1 0 0 1
+c
+d 37 1 0 0 1
+c
+d 383 1 0 0 1
+c
+d 377 1 0 0 1
+c
+d 54 2 0 0 1
+c
+d 54 2 0 0 1
+c
+d 377 2 0 0 1
+c
+d 383 1 0 0 1
+c
+d 54 2 0 0 1
+c
+d 377 2 0 0 1
+c
+d 383 1 0 0 1
+c
+d 300 3 1 0 0
+c
+d 264 1 0 0 1
+c
+d 271 1 0 0 1
+c
+d 261 1 0 0 0
+c
+d 316 1 0 0 0
+c
+d 313 1 0 0 0
+c
+d 314 3 0 0 0
+c
+d 662 1 0 0 1
+c
+d 661 1 0 0 0
+c
+d 283 3 0 0 1
+c
+d 278 1 0 0 1
+c
+d 278 1 0 0 1
+c
+d 283 4 0 0 1
+c
+d 278 1 0 0 0
+c
+d 283 5 0 0 0
+c
+d 300 1 0 0 0
+c
+d 458 1 1 0 1
+c
+d 463 1 0 0 1
+c
+d 459 1 0 0 0
+c
+d 339 1 0 0 0
+c
+d 340 1 0 0 0
+c
+d 423 2 0 0 1
+c
+d 88 1 0 0 0
+c
+d 540 1 0 0 0
+c
+d 583 2 1 0 0
+c
+d 576 2 1 0 1
+c
+d 575 1 0 0 0
+c
+d 640 1 0 0 1
+c
+d 381 1 0 0 0
+c
+d 276 2 0 0 1
+c
+d 259 1 0 0 1
+c
+d 259 1 0 0 1
+c
+d 276 4 1 0 1
+c
+d 259 1 0 0 0
+c
+d 276 3 0 0 0
+c
+d 289 1 0 0 0
+c
+d 749 1 0 0 0
+c
+d 547 2 1 0 0
+c
+d 707 1 0 0 0
+c
+d 558 2 1 1 0
+c
+d 628 2 0 0 0
+c
+d 651 3 0 0 0
+c
+d 296 1 0 0 0
+c
+d 359 1 0 0 1
+c
+d 352 1 0 0 1
+c
+d 360 2 1 0 1
+c
+d 508 1 0 0 0
+c
+d 581 1 0 0 1
+c
+d 581 2 1 0 0
+c
+d 259 1 0 0 1
+c
+d 263 1 0 0 0
+c
+d 264 1 0 0 0
+c
+d 338 3 0 0 0
+c
+d 339 2 0 0 0
+c
+d 611 2 1 0 0
+c
+d 612 2 0 1 0
+c
+d 413 3 0 0 0
+c
+d 518 1 1 0 0
+c
+d 720 1 0 1 0
+c
+d 642 1 0 1 1
+c
+d 231 2 1 0 1
+c
+d 638 1 0 0 1
+c
+d 686 1 0 1 0
+c
+d 229 1 0 0 1
+c
+d 660 2 0 1 1
+c
+d 534 1 0 0 1
+c
+d 532 1 1 0 0
+c
+d 397 1 0 0 0
+c
+d 398 1 0 0 0
+c
+d 399 1 0 0 0
+c
+d 639 1 0 0 1
+c
+d 378 2 0 0 0
+c
+d 518 3 0 0 0
+c
+d 270 1 0 0 0
+c
+d 752 2 1 0 0
+c
+d 540 2 0 0 0
+c
+d 436 4 0 0 0
+c
+d 470 1 0 0 1
+c
+d 127 2 0 0 1
+c
+d 469 1 0 0 1
+c
+d 468 1 0 0 0
+c
+d 540 4 0 0 0
+c
+d 299 1 0 1 0
+c
+d 300 2 0 0 0
+c
+d 546 7 0 0 0
+c
+d 312 1 1 0 1
+c
+d 317 2 0 0 1
+c
+d 313 1 0 0 0
+c
+d 344 1 1 0 1
+c
+d 347 1 0 0 1
+c
+d 33 1 0 0 0
+c
+d 339 1 0 0 0
+c
+d 340 1 0 0 0
+c
+d 344 1 1 0 0
+c
+d 347 1 0 1 0
+c
+d 272 2 0 0 0
+c
+d 237 2 1 0 1
+c
+d 606 1 0 0 1
+c
+d 581 1 0 1 1
+c
+d 582 2 0 0 1
+c
+d 606 1 0 0 1
+c
+d 607 1 0 0 1
+c
+d 237 2 0 0 1
+c
+d 581 4 0 0 1
+c
+d 582 2 0 0 1
+c
+d 606 3 0 0 1
+c
+d 607 1 0 0 1
+c
+d 385 1 0 0 0
+c
+d 409 1 0 0 0
+c
+d 562 2 1 1 1
+c
+d 562 2 0 0 0
+c
+d 572 1 0 0 0
+c
+d 563 1 0 0 0
+c
+d 566 1 0 0 0
+c
+d 518 5 1 0 0
+c
+d 717 1 1 0 0
+c
+d 632 1 0 1 0
+c
+d 633 1 0 1 0
+c
+d 385 1 0 0 0
+c
+d 385 1 0 0 1
+c
+d 387 1 0 0 1
+c
+d 385 2 0 0 1
+c
+d 387 1 0 0 1
+c
+d 385 2 0 0 0
+c
+d 387 1 0 0 0
+c
+d 644 1 0 0 0
+c
+d 268 4 1 0 1
+c
+d 268 4 0 0 1
+c
+d 264 1 0 0 0
+c
+d 268 4 0 0 0
+c
+d 358 1 1 0 0
+c
+d 366 2 0 0 0
+c
+d 547 2 0 0 1
+c
+d 156 1 0 0 1
+c
+d 546 1 0 0 0
+c
+d 552 1 0 0 1
+c
+d 556 1 0 0 1
+c
+d 558 4 1 0 1
+c
+d 552 1 0 0 0
+c
+d 556 1 0 0 0
+c
+d 558 6 1 1 0
+c
+d 242 2 0 0 1
+c
+d 619 1 1 0 1
+c
+d 592 3 0 0 1
+c
+d 170 1 0 0 0
+c
+d 537 3 1 1 0
+c
+d 561 1 0 1 0
+c
+d 538 2 1 0 0
+c
+d 546 2 0 1 0
+c
+d 338 1 0 0 1
+c
+d 25 1 0 0 0
+c
+d 300 2 0 0 0
+c
+d 301 2 0 0 0
+c
+d 103 1 0 0 0
+c
+d 491 1 0 0 1
+c
+d 160 1 0 0 1
+c
+d 153 1 0 0 1
+c
+d 152 1 0 0 1
+c
+d 160 1 0 0 1
+c
+d 510 1 0 0 1
+c
+d 152 1 0 0 0
+c
+d 685 3 1 0 0
+c
+d 686 2 0 0 0
+c
+d 717 2 1 0 0
+c
+d 718 3 1 0 0
+c
+d 642 1 1 0 0
+c
+d 698 4 1 1 0
+c
+d 393 1 0 0 1
+c
+d 388 1 0 0 0
+c
+d 741 1 0 0 0
+c
+d 576 3 1 0 1
+c
+d 577 1 0 0 1
+c
+d 578 2 0 0 1
+c
+d 576 3 0 0 0
+c
+d 577 1 0 0 0
+c
+d 578 2 0 0 0
+c
+d 585 1 0 1 0
+c
+d 366 3 0 2 0
+c
+d 76 1 0 0 1
+c
+d 694 2 0 0 1
+c
+d 737 4 1 0 1
+c
+d 694 1 0 0 0
+c
+d 695 1 0 0 0
+c
+d 697 2 0 0 0
+c
+d 340 3 1 0 0
+c
+d 339 1 0 0 1
+c
+d 340 1 0 1 1
+c
+d 341 1 0 1 1
+c
+d 634 1 0 0 0
+c
+d 725 1 0 1 0
+c
+d 726 3 1 0 0
+c
+d 733 1 0 0 1
+c
+d 71 1 0 0 1
+c
+d 70 2 0 0 1
+c
+d 414 1 0 0 0
+c
+d 721 2 0 0 1
+c
+d 721 5 2 0 0
+c
+d 668 1 0 0 1
+c
+d 669 1 0 0 1
+c
+d 670 1 0 0 1
+c
+d 668 2 0 0 1
+c
+d 669 1 0 0 1
+c
+d 670 1 0 0 1
+c
+d 624 1 0 0 0
+c
+d 668 2 1 0 0
+c
+d 669 1 0 0 0
+c
+d 670 1 0 0 0
+c
+d 458 1 0 0 1
+c
+d 125 1 0 0 0
+c
+d 271 2 0 0 1
+c
+d 297 1 1 0 0
+c
+d 611 1 0 0 0
+c
+d 612 2 0 0 0
+c
+d 268 1 0 0 0
+c
+d 269 1 0 0 0
+c
+d 663 3 1 0 0
+c
+d 545 1 0 1 1
+c
+d 542 3 0 0 1
+c
+d 709 1 0 1 1
+c
+d 542 3 0 0 1
+c
+d 545 1 0 0 1
+c
+d 709 5 0 0 1
+c
+d 709 2 1 0 0
+c
+d 738 1 0 0 1
+c
+d 394 1 0 0 0
+c
+d 345 1 0 0 1
+c
+d 347 1 0 0 1
+c
+d 340 1 0 0 0
+c
+d 347 1 0 1 0
+c
+d 698 1 0 0 1
+c
+d 662 4 0 0 0
+c
+d 345 3 0 1 1
+c
+d 347 1 0 0 1
+c
+d 632 1 0 1 1
+c
+d 663 1 0 0 1
+c
+d 345 1 1 0 0
+c
+d 347 1 0 0 0
+c
+d 756 2 1 0 0
+c
+d 644 1 0 0 1
+c
+d 385 1 0 0 0
+c
+d 43 1 0 0 1
+c
+d 348 1 0 0 1
+c
+d 38 2 0 0 1
+c
+d 355 1 0 0 1
+c
+d 43 2 0 0 1
+c
+d 324 1 0 0 1
+c
+d 348 1 0 1 1
+c
+d 351 1 1 0 1
+c
+d 351 1 0 1 0
+c
+d 340 1 0 1 1
+c
+d 663 1 0 1 1
+c
+d 340 1 0 0 0
+c
+d 663 1 0 0 0
+c
+d 320 2 0 0 1
+c
+d 42 1 0 0 0
+c
+d 579 5 0 0 1
+c
+d 595 1 0 0 1
+c
+d 579 2 0 1 0
+c
+d 436 1 0 0 1
+c
+d 427 1 0 0 1
+c
+d 436 1 0 1 1
+c
+d 437 2 0 0 1
+c
+d 561 3 2 0 0
+c
+d 705 1 0 1 0
+c
+d 384 1 1 0 0
+c
+d 275 1 0 0 1
+c
+d 276 1 0 0 1
+c
+d 298 1 0 0 0
+c
+d 585 3 1 0 0
+c
+d 586 1 1 0 0
+c
+d 636 1 0 0 1
+c
+d 194 1 0 0 1
+c
+d 319 1 0 0 1
+c
+d 38 1 0 0 1
+c
+d 348 1 0 0 1
+c
+d 636 1 0 0 1
+c
+d 348 1 0 0 0
+c
+d 540 1 0 0 1
+c
+d 558 2 0 0 1
+c
+d 558 1 0 1 0
+c
+d 423 2 0 0 1
+c
+d 210 1 0 0 1
+c
+d 423 2 0 0 1
+c
+d 210 1 0 0 1
+c
+d 423 3 0 0 1
+c
+d 424 1 0 0 1
+c
+d 88 1 0 0 1
+c
+d 210 1 0 0 1
+c
+d 423 3 0 0 1
+c
+d 424 1 0 0 1
+c
+d 87 1 0 0 1
+c
+d 88 1 0 0 1
+c
+d 210 1 0 0 1
+c
+d 423 3 0 0 1
+c
+d 424 1 0 0 1
+c
+d 86 2 0 0 0
+c
+d 87 1 0 0 0
+c
+d 88 1 0 0 0
+c
+d 210 1 0 0 0
+c
+d 423 3 0 0 0
+c
+d 424 1 0 0 0
+c
+d 599 2 0 0 0
+c
+d 452 1 1 0 1
+c
+d 453 1 0 0 1
+c
+d 494 1 0 0 0
+c
+d 341 2 0 0 1
+c
+d 634 1 0 0 0
+c
+d 478 1 0 0 1
+c
+d 496 1 0 1 1
+c
+d 478 1 0 1 1
+c
+d 479 1 0 0 1
+c
+d 479 1 1 0 0
+c
+d 372 1 0 0 1
+c
+d 373 2 0 0 1
+c
+d 372 1 0 0 1
+c
+d 373 2 0 0 1
+c
+d 654 1 0 0 1
+c
+d 688 2 0 0 1
+c
+d 654 1 0 0 0
+c
+d 688 5 0 0 0
+c
+d 206 2 0 0 1
+c
+d 418 1 0 0 1
+c
+d 204 1 0 0 1
+c
+d 77 2 0 0 1
+c
+d 417 1 0 1 1
+c
+d 77 2 0 0 1
+c
+d 81 1 0 0 1
+c
+d 204 1 0 0 1
+c
+d 206 3 0 0 1
+c
+d 207 2 0 0 1
+c
+d 417 1 0 0 1
+c
+d 418 1 0 0 1
+c
+d 77 2 0 0 1
+c
+d 81 1 0 0 1
+c
+d 204 1 0 0 1
+c
+d 206 3 0 0 1
+c
+d 207 2 0 0 1
+c
+d 417 1 0 0 1
+c
+d 418 1 0 0 1
+c
+d 206 1 0 0 1
+c
+d 206 1 0 0 1
+c
+d 79 2 0 0 1
+c
+d 79 2 0 0 1
+c
+d 78 1 1 0 1
+c
+d 78 1 0 0 1
+c
+d 79 2 0 0 1
+c
+d 81 1 0 0 1
+c
+d 82 3 0 0 1
+c
+d 84 2 0 0 1
+c
+d 85 1 0 0 1
+c
+d 207 1 0 0 1
+c
+d 415 1 0 0 1
+c
+d 418 2 0 0 1
+c
+d 693 1 0 0 1
+c
+d 694 1 0 0 1
+c
+d 265 1 1 0 1
+c
+d 266 1 0 0 1
+c
+d 272 1 0 1 0
+c
+d 568 1 0 0 0
+c
+d 569 1 0 0 0
+c
+d 268 2 0 0 0
+c
+d 494 3 1 0 0
+c
+d 685 3 0 0 0
+c
+d 309 1 0 0 1
+c
+d 309 1 0 0 1
+c
+d 315 1 0 1 1
+c
+d 745 1 0 2 1
+c
+d 309 2 0 0 0
+c
+d 310 1 0 0 0
+c
+d 315 1 0 0 0
+c
+d 745 1 0 0 0
+c
+d 518 2 1 0 0
+c
+d 518 2 0 1 0
+c
+d 696 1 0 1 0
+c
+d 717 1 0 0 0
+c
+d 513 1 1 0 0
+c
+d 177 2 1 0 0
+c
+d 388 2 0 1 1
+c
+d 392 1 0 0 0
+c
+d 383 1 0 0 1
+c
+d 54 1 0 0 1
+c
+d 377 1 0 0 1
+c
+d 53 1 0 0 0
+c
+d 648 5 1 0 0
+c
+d 172 1 0 0 1
+c
+d 172 1 0 0 1
+c
+d 613 1 0 0 1
+c
+d 613 3 0 0 1
+c
+d 604 1 0 0 0
+c
+d 644 4 0 0 0
+c
+d 268 4 0 0 0
+c
+d 431 1 0 0 1
+c
+d 432 1 0 0 1
+c
+d 98 1 0 0 1
+c
+d 97 1 0 0 1
+c
+d 428 1 0 0 1
+c
+d 95 2 0 0 1
+c
+d 96 1 0 0 1
+c
+d 97 1 0 0 1
+c
+d 425 1 0 0 1
+c
+d 434 2 0 0 0
+c
+d 648 2 0 0 1
+c
+d 693 1 1 0 1
+c
+d 648 1 0 0 1
+c
+d 693 1 0 0 1
+c
+d 736 2 0 0 0
+c
+d 585 2 1 0 0
+c
+d 644 2 0 0 0
+c
+d 436 1 1 0 1
+c
+d 447 1 0 0 1
+c
+d 447 2 1 0 0
+c
+d 670 1 0 0 1
+c
+d 622 1 0 0 1
+c
+d 623 1 0 0 1
+c
+d 623 1 0 0 0
+c
+d 625 1 0 0 0
+c
+d 668 2 1 0 0
+c
+d 670 1 0 0 0
+c
+d 326 1 0 1 1
+c
+d 580 6 0 0 1
+c
+d 326 1 0 0 0
+c
+d 580 6 0 0 0
+c
+d 292 1 0 0 1
+c
+d 279 2 1 0 0
+c
+d 393 1 0 0 1
+c
+d 739 2 0 1 1
+c
+d 393 1 0 1 0
+c
+d 739 1 0 0 0
+c
+d 447 1 0 0 1
+c
+d 445 1 0 0 0
+c
+d 691 3 0 0 0
+c
+d 279 1 0 0 0
+c
+d 286 1 0 0 0
+c
+d 287 1 0 0 0
+c
+d 420 2 0 1 1
+c
+d 421 1 0 0 1
+c
+d 86 1 0 0 0
+c
+d 648 2 0 0 1
+c
+d 306 1 0 1 0
+c
+d 369 4 0 0 1
+c
+d 372 1 0 0 1
+c
+d 476 1 0 0 1
+c
+d 569 1 0 0 1
+c
+d 369 3 0 0 0
+c
+d 513 1 0 0 1
+c
+d 539 1 0 0 1
+c
+d 535 2 1 0 1
+c
+d 536 2 1 0 1
+c
+d 513 1 0 0 1
+c
+d 535 2 0 0 1
+c
+d 536 2 0 0 1
+c
+d 539 1 0 0 1
+c
+d 510 1 0 0 1
+c
+d 511 1 0 0 1
+c
+d 513 1 0 0 1
+c
+d 535 2 0 0 1
+c
+d 536 2 0 0 1
+c
+d 539 1 0 0 1
+c
+d 456 2 0 0 1
+c
+d 220 2 0 0 1
+c
+d 652 1 1 0 1
+c
+d 114 1 0 0 0
+c
+d 571 2 1 0 0
+c
+d 572 2 0 0 0
+c
+d 585 1 1 0 0
+c
+d 684 1 0 0 0
+c
+d 575 1 0 1 1
+c
+d 585 1 0 0 1
+c
+d 575 2 0 0 0
+c
+d 474 2 0 0 1
+c
+d 653 2 0 0 1
+c
+d 653 1 0 0 0
+c
+d 654 1 0 0 0
+c
+d 620 1 0 0 1
+c
+d 621 2 0 0 1
+c
+d 622 1 0 0 1
+c
+d 597 2 0 0 1
+c
+d 620 1 0 0 1
+c
+d 621 2 1 0 1
+c
+d 622 2 1 0 1
+c
+d 624 1 0 0 1
+c
+d 597 2 0 0 0
+c
+d 620 1 0 0 0
+c
+d 621 2 0 0 0
+c
+d 622 2 0 0 0
+c
+d 624 1 0 0 0
+c
+d 758 1 0 0 1
+c
+d 543 1 0 1 1
+c
+d 708 2 0 1 1
+c
+d 727 1 0 0 1
+c
+d 728 1 0 0 1
+c
+d 446 1 0 0 0
+c
+d 518 4 1 0 0
+c
+d 430 2 0 0 0
+c
+d 431 1 0 1 0
+c
+d 700 1 0 0 0
+c
+d 171 1 0 0 0
+c
+d 589 2 1 0 0
+c
+d 591 2 1 0 0
+c
+d 366 2 0 1 0
+c
+d 367 1 0 0 0
+c
+d 663 1 1 0 1
+c
+d 345 1 0 0 1
+c
+d 663 1 1 0 1
+c
+d 345 1 0 1 0
+c
+d 346 1 0 0 0
+c
+d 667 1 0 0 1
+c
+d 614 1 0 0 1
+c
+d 613 1 0 0 0
+c
+d 530 2 1 0 0
+c
+d 357 1 0 0 1
+c
+d 356 1 0 0 1
+c
+d 195 2 1 0 1
+c
+d 39 1 1 0 1
+c
+d 357 1 0 0 1
+c
+d 358 1 0 1 1
+c
+d 357 1 1 0 0
+c
+d 423 4 0 0 0
+c
+d 580 2 1 0 1
+c
+d 600 1 0 0 1
+c
+d 601 1 0 0 1
+c
+d 167 1 0 0 0
+c
+d 747 2 0 1 0
+c
+d 640 1 0 0 1
+c
+d 686 1 0 0 1
+c
+d 638 1 0 0 1
+c
+d 382 1 0 0 0
+c
+d 638 1 0 1 0
+c
+d 686 1 0 1 0
+c
+d 518 3 0 2 0
+c
+d 403 2 0 0 0
+c
+d 404 2 0 0 0
+c
+d 350 1 0 0 1
+c
+d 350 1 0 0 1
+c
+d 637 2 0 0 1
+c
+d 637 2 0 0 1
+c
+d 41 1 0 0 1
+c
+d 41 1 0 0 1
+c
+d 197 1 0 0 1
+c
+d 320 1 0 0 1
+c
+d 637 2 0 0 1
+c
+d 40 2 0 0 0
+c
+d 403 3 0 0 0
+c
+d 404 2 0 0 0
+c
+d 286 2 0 1 0
+c
+d 287 2 1 0 0
+c
+d 730 4 0 0 1
+c
+d 730 2 1 0 0
+c
+d 315 1 0 0 1
+c
+d 315 2 0 0 0
+c
+d 745 2 0 0 0
+c
+d 494 1 0 0 1
+c
+d 496 1 0 0 0
+c
+d 385 2 0 0 0
+c
+d 411 1 0 0 0
+c
+d 412 1 0 0 0
+c
+d 271 3 0 0 0
+c
+d 273 2 0 0 0
+c
+d 483 1 0 1 0
+c
+d 500 2 1 0 0
+c
+d 501 1 0 0 0
+c
+d 328 1 0 0 0
+c
+d 223 2 0 0 1
+c
+d 500 1 0 0 1
+c
+d 501 1 0 0 1
+c
+d 502 1 0 0 1
+c
+d 499 2 0 0 1
+c
+d 500 1 0 0 1
+c
+d 223 2 0 0 1
+c
+d 499 2 0 0 1
+c
+d 500 2 0 0 1
+c
+d 501 1 0 0 1
+c
+d 502 1 0 0 1
+c
+d 657 1 1 0 1
+c
+d 223 2 0 0 1
+c
+d 499 2 0 0 1
+c
+d 500 2 0 0 1
+c
+d 501 1 0 0 1
+c
+d 502 1 0 0 1
+c
+d 657 3 0 0 1
+c
+d 511 1 0 0 1
+c
+d 538 1 0 0 1
+c
+d 538 1 0 0 0
+c
+d 546 1 0 0 0
+c
+d 572 1 0 0 1
+c
+d 577 1 0 0 1
+c
+d 577 5 0 0 0
+c
+d 16 2 1 0 1
+c
+d 10 1 0 0 0
+c
+d 11 1 0 0 0
+c
+d 288 1 0 0 0
+c
+d 294 3 1 0 0
+c
+d 264 1 0 0 1
+c
+d 260 1 0 0 1
+c
+d 261 1 0 0 1
+c
+d 260 1 0 0 1
+c
+d 261 1 0 0 1
+c
+d 264 1 0 0 1
+c
+d 276 1 1 0 1
+c
+d 260 1 0 0 0
+c
+d 261 1 0 0 0
+c
+d 264 1 0 0 0
+c
+d 276 2 0 0 0
+c
+d 749 1 0 0 0
+c
+d 750 1 0 0 0
+c
+d 628 2 0 0 1
+c
+d 631 1 1 0 1
+c
+d 559 1 0 0 0
+c
+d 628 3 1 1 0
+c
+d 550 1 1 0 1
+c
+d 497 2 0 0 0
+c
+d 498 1 0 0 0
+c
+d 337 1 1 0 1
+c
+d 633 1 0 0 1
+c
+d 345 1 0 0 0
+c
+d 438 5 0 0 1
+c
+d 430 1 0 0 0
+c
+d 438 5 0 0 0
+c
+d 364 1 0 0 0
+c
+d 286 1 0 0 1
+c
+d 289 2 0 0 1
+c
+d 286 1 0 0 0
+c
+d 289 4 0 0 0
+c
+d 375 2 0 0 1
+c
+d 50 2 0 0 1
+c
+d 304 1 0 1 0
+c
+d 305 1 0 0 0
+c
+d 643 1 0 0 1
+c
+d 724 1 0 0 1
+c
+d 725 1 0 0 1
+c
+d 726 4 0 0 1
+c
+d 643 2 0 0 1
+c
+d 724 1 0 0 1
+c
+d 725 1 0 0 1
+c
+d 726 4 0 0 1
+c
+d 643 2 0 0 1
+c
+d 724 1 0 0 1
+c
+d 725 1 0 0 1
+c
+d 726 4 0 0 1
+c
+d 397 1 0 0 1
+c
+d 397 3 0 0 0
+c
+d 398 1 0 0 0
+c
+d 643 2 0 0 0
+c
+d 725 1 0 0 0
+c
+d 726 1 0 0 0
+c
+d 575 2 0 0 1
+c
+d 576 1 0 0 1
+c
+d 585 2 0 0 1
+c
+d 586 1 0 0 1
+c
+d 165 2 0 0 0
+c
+d 265 2 1 0 1
+c
+d 297 1 0 1 1
+c
+d 272 1 0 0 0
+c
+d 494 1 1 0 0
+c
+d 729 1 0 1 0
+c
+d 584 1 1 0 1
+c
+d 628 1 0 1 1
+c
+d 628 4 0 0 0
+c
+d 517 2 0 0 0
+c
+d 516 1 1 0 1
+c
+d 134 1 0 0 0
+c
+d 168 1 0 0 1
+c
+d 540 1 0 0 1
+c
+d 583 3 1 0 1
+c
+d 749 1 0 0 1
+c
+d 302 1 0 0 0
+c
+d 559 1 1 0 1
+c
+d 552 4 1 0 0
+c
+d 388 2 1 0 0
+c
+d 723 2 1 0 0
+c
+d 747 2 0 0 0
+c
+d 748 1 0 0 0
+c
+d 572 4 1 0 1
+c
+d 572 3 0 0 0
+c
+d 235 2 0 0 1
+c
+d 591 4 1 0 1
+c
+d 598 1 0 0 0
+c
+d 324 1 0 0 1
+c
+d 366 1 0 0 1
+c
+d 353 1 0 0 0
+c
+d 354 1 0 0 0
+c
+d 268 2 0 0 1
+c
+d 267 1 0 0 0
+c
+d 268 2 0 0 0
+c
+d 210 1 0 0 1
+c
+d 209 1 0 0 1
+c
+d 420 1 0 0 1
+c
+d 209 1 0 0 1
+c
+d 210 1 0 0 1
+c
+d 420 1 0 0 1
+c
+d 424 1 0 0 1
+c
+d 209 1 0 0 1
+c
+d 210 1 0 0 1
+c
+d 420 1 0 0 1
+c
+d 424 1 0 0 1
+c
+d 210 2 0 0 1
+c
+d 210 2 0 0 1
+c
+d 329 1 0 0 1
+c
+d 123 1 0 0 1
+c
+d 121 2 0 0 1
+c
+d 119 1 0 0 1
+c
+d 120 2 0 0 1
+c
+d 121 1 0 0 1
+c
+d 122 1 0 0 1
+c
+d 123 1 0 0 1
+c
+d 652 1 0 0 1
+c
+d 119 1 0 0 1
+c
+d 120 2 0 0 1
+c
+d 121 3 0 0 1
+c
+d 122 1 0 0 1
+c
+d 123 2 0 0 1
+c
+d 329 2 0 0 1
+c
+d 652 1 0 0 1
+c
+d 119 1 0 0 1
+c
+d 120 2 0 0 1
+c
+d 121 3 0 0 1
+c
+d 122 1 0 0 1
+c
+d 123 2 0 0 1
+c
+d 329 2 0 0 1
+c
+d 652 1 0 0 1
+c
+d 217 1 0 0 1
+c
+d 217 1 0 0 1
+c
+d 213 1 0 0 1
+c
+d 213 1 0 0 1
+c
+d 212 2 0 0 1
+c
+d 212 2 0 0 1
+c
+d 94 1 1 0 1
+c
+d 93 2 0 0 1
+c
+d 94 2 0 0 1
+c
+d 213 2 0 0 1
+c
+d 214 1 0 0 1
+c
+d 92 1 0 0 0
+c
+d 27 1 0 0 0
+c
+d 652 1 0 0 1
+c
+d 124 1 0 0 0
+c
+d 519 1 0 1 1
+c
+d 642 1 0 0 1
+c
+d 695 2 0 0 1
+c
+d 516 3 1 0 0
+c
+d 517 1 1 0 0
+c
+d 663 1 0 1 1
+c
+d 707 1 0 0 0
+c
+d 593 4 1 0 0
+c
+d 596 3 0 0 0
+c
+d 668 1 1 0 0
+c
+d 561 1 0 1 0
+c
+d 562 1 0 0 0
+c
+d 657 3 1 0 0
+c
+d 494 2 1 1 1
+c
+d 494 2 0 0 0
+c
+d 717 5 1 0 0
+c
+d 385 1 0 1 1
+c
+d 735 1 0 0 1
+c
+d 736 6 0 0 1
+c
+d 508 1 0 0 0
+c
+d 725 1 0 0 0
+c
+d 379 2 1 0 1
+c
+d 305 1 0 0 0
+c
+d 477 2 0 0 1
+c
+d 655 2 1 0 0
+c
+d 632 4 0 0 0
+c
+d 340 2 0 2 1
+c
+d 339 1 0 0 0
+c
+d 340 1 0 0 0
+c
+d 345 1 0 0 0
+c
+d 567 1 0 0 1
+c
+d 570 1 0 0 1
+c
+d 653 1 0 0 1
+c
+d 374 1 0 0 0
+c
+d 411 1 0 0 1
+c
+d 484 5 1 0 1
+c
+d 731 3 0 0 1
+c
+d 481 1 0 0 0
+c
+d 421 3 1 0 1
+c
+d 496 1 1 0 1
+c
+d 494 1 1 0 0
+c
+d 267 2 0 2 0
+c
+d 268 1 0 0 0
+c
+d 269 3 0 0 0
+c
+d 329 1 0 0 1
+c
+d 330 3 0 0 1
+c
+d 329 1 0 1 1
+c
+d 330 3 0 0 1
+c
+d 419 2 0 0 1
+c
+d 329 1 0 0 0
+c
+d 330 4 0 0 0
+c
+d 419 2 1 0 0
+c
+d 397 1 0 0 0
+c
+d 723 5 1 0 0
+c
+d 549 2 0 0 1
+c
+d 483 1 0 0 1
+c
+d 549 2 0 0 1
+c
+d 483 1 0 0 0
+c
+d 549 3 0 0 0
+c
+d 453 1 0 0 0
+c
+d 454 1 0 1 0
+c
+d 463 4 1 0 0
+c
+d 464 1 0 0 0
+c
+d 571 1 1 0 1
+c
+d 572 2 0 0 1
+c
+d 684 1 0 0 1
+c
+d 585 1 1 0 0
+c
+d 360 1 0 0 1
+c
+d 363 1 0 0 0
+c
+d 538 2 0 0 1
+c
+d 546 3 0 0 1
+c
+d 547 1 0 0 0
+c
+d 632 1 0 0 0
+c
+d 633 1 0 0 0
+c
+d 754 2 0 0 1
+c
+d 757 1 0 0 1
+c
+d 263 1 0 0 0
+c
+d 408 1 0 0 1
+c
+d 372 2 0 1 1
+c
+d 660 1 0 0 1
+c
+d 742 2 0 0 1
+c
+d 372 1 0 0 0
+c
+d 373 1 0 0 0
+c
+d 61 1 0 0 1
+c
+d 395 1 0 0 1
+c
+d 60 1 0 0 1
+c
+d 60 2 1 0 1
+c
+d 376 1 0 0 1
+c
+d 395 1 0 0 1
+c
+d 738 1 0 0 1
+c
+d 60 2 0 0 1
+c
+d 61 1 0 0 1
+c
+d 376 1 0 0 1
+c
+d 393 1 0 0 1
+c
+d 395 2 0 0 1
+c
+d 738 1 0 0 1
+c
+d 60 2 0 0 1
+c
+d 61 1 0 0 1
+c
+d 376 1 0 0 1
+c
+d 393 1 0 0 1
+c
+d 395 2 0 0 1
+c
+d 738 1 0 0 1
+c
+d 395 1 0 0 1
+c
+d 397 1 0 0 1
+c
+d 395 1 0 0 1
+c
+d 397 1 0 0 1
+c
+d 61 1 0 0 1
+c
+d 59 1 0 0 1
+c
+d 61 1 0 0 1
+c
+d 393 2 0 0 1
+c
+d 395 1 0 0 1
+c
+d 336 1 0 0 1
+c
+d 336 1 0 0 1
+c
+d 336 1 0 0 1
+c
+d 336 1 0 0 1
+c
+d 347 1 0 0 1
+c
+d 347 1 0 0 1
+c
+d 33 1 0 0 1
+c
+d 33 1 0 0 1
+c
+d 30 2 0 0 1
+c
+d 22 1 0 0 1
+c
+d 30 2 0 0 1
+c
+d 34 2 0 0 1
+c
+d 36 1 0 0 1
+c
+d 336 1 0 0 1
+c
+d 347 1 0 0 1
+c
+d 721 2 0 1 1
+c
+d 710 1 0 0 1
+c
+d 149 1 0 0 1
+c
+d 710 2 0 0 1
+c
+d 149 1 0 0 1
+c
+d 710 3 0 0 1
+c
+d 721 2 0 0 1
+c
+d 149 1 0 0 1
+c
+d 710 3 0 0 1
+c
+d 721 2 0 0 1
+c
+d 149 1 0 0 1
+c
+d 149 3 0 0 1
+c
+d 539 1 0 0 1
+c
+d 710 1 0 0 1
+c
+d 713 2 0 0 1
+c
+d 407 1 1 0 0
+c
+d 646 1 0 1 0
+c
+d 710 2 0 2 0
+c
+d 711 1 1 0 0
+c
+d 279 1 0 0 1
+c
+d 295 1 0 1 1
+c
+d 279 1 1 0 0
+c
+d 281 1 0 0 0
+c
+d 663 2 0 0 0
+c
+d 475 1 0 0 1
+c
+d 373 1 1 0 0
+c
+d 723 2 0 0 0
+c
+d 558 3 0 0 1
+c
+d 558 5 0 0 0
+c
+d 48 1 0 0 0
+c
+d 648 1 1 0 1
+c
+d 693 1 0 0 1
+c
+d 84 1 0 0 1
+c
+d 83 1 0 0 1
+c
+d 82 1 0 0 0
+c
+d 648 2 1 1 0
+c
+d 693 2 0 0 0
+c
+d 557 2 0 0 1
+c
+d 557 3 0 1 1
+c
+d 558 1 0 0 1
+c
+d 557 4 0 0 1
+c
+d 558 2 1 1 1
+c
+d 553 1 0 0 0
+c
+d 557 5 0 0 0
+c
+d 558 3 0 0 0
+c
+d 385 1 0 0 1
+c
+d 409 3 0 0 1
+c
+d 385 1 0 0 0
+c
+d 409 4 0 0 0
+c
+d 652 1 0 1 1
+c
+d 456 1 0 0 0
+c
+d 662 2 1 0 0
+c
+d 227 2 0 0 1
+c
+d 226 1 0 0 1
+c
+d 527 1 0 0 1
+c
+d 140 2 0 0 1
+c
+d 141 1 1 0 0
+c
+d 714 4 0 0 0
+c
+d 632 1 0 0 0
+c
+d 633 2 0 1 0
+c
+d 634 1 0 1 0
+c
+d 519 2 0 0 0
+c
+d 267 1 0 0 1
+c
+d 756 1 0 0 1
+c
+d 262 2 0 0 0
+c
+d 284 1 0 0 0
+c
+d 303 1 0 0 0
+c
+d 265 1 0 0 1
+c
+d 267 1 0 0 1
+c
+d 262 1 0 0 0
+c
+d 10 2 0 0 1
+c
+d 286 1 1 0 1
+c
+d 288 1 0 0 1
+c
+d 286 1 1 0 0
+c
+d 288 2 0 0 0
+c
+d 581 2 0 1 0
+c
+d 290 4 0 0 1
+c
+d 277 1 0 0 1
+c
+d 276 1 0 0 1
+c
+d 277 3 0 0 1
+c
+d 290 4 1 0 1
+c
+d 276 1 0 0 0
+c
+d 277 3 0 0 0
+c
+d 289 2 0 0 0
+c
+d 290 5 0 0 0
+c
+d 562 3 0 1 0
+c
+d 572 1 0 1 0
+c
+d 126 2 0 0 1
+c
+d 469 1 0 0 1
+c
+d 471 1 0 0 1
+c
+d 472 1 0 0 1
+c
+d 463 1 1 0 0
+c
+d 717 2 0 0 0
+c
+d 718 4 1 0 0
+c
+d 430 1 0 0 0
+c
+d 431 1 0 0 0
+c
+d 732 2 0 0 0
+c
+d 513 1 0 0 0
+c
+d 514 3 0 0 0
+c
+d 752 4 0 0 0
+c
+d 420 1 0 0 0
+c
+d 421 1 0 0 0
+c
+d 283 1 0 0 0
+c
+d 300 1 0 0 0
+c
+d 301 1 0 0 0
+c
+d 747 1 1 0 0
+c
+d 593 3 0 0 0
+c
+d 747 2 0 1 0
+c
+d 748 1 1 0 0
+c
+d 411 1 0 0 0
+c
+d 413 2 1 0 0
+c
+d 366 2 1 0 0
+c
+d 721 3 1 0 0
+c
+d 279 1 1 0 1
+c
+d 286 1 0 0 1
+c
+d 292 1 0 0 0
+c
+d 414 3 1 0 1
+c
+d 411 2 0 0 0
+c
+d 413 1 0 0 0
+c
+d 414 3 0 0 0
+c
+d 324 1 0 0 1
+c
+d 324 2 0 1 0
+c
+d 352 1 1 0 0
+c
+d 354 1 0 0 0
+c
+d 651 4 0 0 0
+c
+d 378 3 1 0 1
+c
+d 55 1 0 0 0
+c
+d 461 1 0 0 0
+c
+d 657 1 0 0 1
+c
+d 560 1 0 0 1
+c
+d 562 2 0 0 1
+c
+d 562 1 0 0 0
+c
+d 146 1 0 0 1
+c
+d 145 1 0 0 1
+c
+d 144 1 0 0 1
+c
+d 529 1 0 0 1
+c
+d 146 2 0 0 1
+c
+d 529 2 0 0 1
+c
+d 143 1 0 0 0
+c
+d 484 2 1 0 1
+c
+d 730 2 0 0 1
+c
+d 484 3 0 0 0
+c
+d 730 2 0 0 0
+c
+d 708 1 0 0 1
+c
+d 542 1 0 0 1
+c
+d 151 1 0 0 1
+c
+d 265 1 0 0 1
+c
+d 262 1 0 0 1
+c
+d 262 1 0 0 1
+c
+d 265 1 0 0 1
+c
+d 303 1 0 0 1
+c
+d 747 1 0 0 1
+c
+d 262 1 0 0 0
+c
+d 265 1 0 0 0
+c
+d 303 3 0 0 0
+c
+d 747 1 0 0 0
+c
+d 325 1 0 0 1
+c
+d 603 6 0 0 1
+c
+d 511 1 0 1 1
+c
+d 511 3 0 1 0
+c
+d 535 2 1 0 0
+c
+d 536 1 0 0 0
+c
+d 518 2 0 0 0
+c
+d 519 1 0 0 0
+c
+d 610 1 0 0 1
+c
+d 238 1 0 0 1
+c
+d 333 1 1 0 0
+c
+d 605 1 0 1 0
+c
+d 608 1 0 0 0
+c
+d 610 2 0 0 0
+c
+d 300 3 1 0 0
+c
+d 599 1 0 1 0
+c
+d 518 1 0 0 0
+c
+d 519 4 1 0 0
+c
+d 507 1 0 0 1
+c
+d 506 2 1 0 0
+c
+d 727 1 0 1 0
+c
+d 603 3 0 0 1
+c
+d 609 1 0 0 1
+c
+d 613 1 0 0 1
+c
+d 603 3 1 0 0
+c
+d 605 1 1 0 0
+c
+d 609 2 0 1 0
+c
+d 613 1 0 0 0
+c
+d 351 1 0 0 1
+c
+d 350 1 0 0 1
+c
+d 349 1 0 0 1
+c
+d 351 1 0 1 1
+c
+d 355 1 0 0 1
+c
+d 349 1 0 0 0
+c
+d 717 2 0 0 0
+c
+d 376 3 1 0 0
+c
+d 613 1 0 0 1
+c
+d 327 1 0 0 1
+c
+d 173 2 0 0 1
+c
+d 172 3 0 0 1
+c
+d 174 2 0 0 1
+c
+d 181 2 0 0 1
+c
+d 613 1 1 0 1
+c
+d 172 3 0 0 1
+c
+d 173 2 0 0 1
+c
+d 174 2 0 0 1
+c
+d 181 2 0 0 1
+c
+d 327 1 0 0 1
+c
+d 613 6 0 0 1
+c
+d 172 3 0 0 1
+c
+d 173 2 0 0 1
+c
+d 174 2 0 0 1
+c
+d 181 2 0 0 1
+c
+d 327 1 0 0 1
+c
+d 613 6 0 0 1
+c
+d 182 1 0 0 1
+c
+d 174 1 0 0 1
+c
+d 181 1 0 0 1
+c
+d 182 2 0 0 1
+c
+d 604 1 0 0 1
+c
+d 613 4 0 0 1
+c
+d 566 2 0 0 1
+c
+d 562 1 0 0 0
+c
+d 566 2 0 0 0
+c
+d 573 3 0 0 0
+c
+d 574 3 0 0 0
+c
+d 212 1 0 0 1
+c
+d 92 2 0 0 1
+c
+d 89 2 0 0 1
+c
+d 419 1 0 0 1
+c
+d 89 1 0 0 1
+c
+d 90 2 0 0 1
+c
+d 91 2 0 0 1
+c
+d 212 1 0 0 1
+c
+d 217 1 0 0 1
+c
+d 423 1 0 0 1
+c
+d 89 3 0 0 1
+c
+d 90 2 0 0 1
+c
+d 91 2 0 0 1
+c
+d 92 2 0 0 1
+c
+d 212 2 0 0 1
+c
+d 217 1 0 0 1
+c
+d 329 1 0 0 1
+c
+d 330 2 0 0 1
+c
+d 419 1 0 0 1
+c
+d 423 1 0 0 1
+c
+d 89 3 0 0 1
+c
+d 90 2 0 0 1
+c
+d 91 2 0 0 1
+c
+d 92 2 0 0 1
+c
+d 212 2 0 0 1
+c
+d 217 1 0 0 1
+c
+d 329 1 0 0 1
+c
+d 330 2 0 0 1
+c
+d 419 1 0 0 1
+c
+d 423 1 0 0 1
+c
+d 217 2 0 0 1
+c
+d 217 2 0 0 1
+c
+d 211 2 0 0 1
+c
+d 211 2 0 0 1
+c
+d 90 1 0 0 0
+c
+d 265 1 0 0 1
+c
+d 271 8 1 0 1
+c
+d 265 1 0 0 0
+c
+d 271 8 0 1 0
+c
+d 542 2 1 0 1
+c
+d 543 1 0 0 0
+c
+d 646 2 0 0 1
+c
+d 646 4 0 0 0
+c
+d 540 2 0 0 1
+c
+d 541 2 0 0 1
+c
+d 543 2 0 0 1
+c
+d 710 4 0 0 1
+c
+d 711 1 0 0 1
+c
+d 540 1 0 0 0
+c
+d 651 1 0 0 1
+c
+d 105 1 0 0 1
+c
+d 440 1 0 0 0
+c
+d 397 2 0 0 1
+c
+d 396 1 0 0 1
+c
+d 396 3 0 0 0
+c
+d 451 2 0 0 1
+c
+d 422 2 0 0 0
+c
+d 625 1 0 0 1
+c
+d 669 2 0 0 1
+c
+d 669 1 1 0 0
+c
+d 670 1 0 0 0
+c
+d 131 1 0 0 1
+c
+d 130 1 0 0 1
+c
+d 494 1 0 0 0
+c
+d 662 3 0 0 0
+c
+d 338 1 0 0 1
+c
+d 338 2 1 0 1
+c
+d 344 1 1 0 0
+c
+d 431 1 0 0 1
+c
+d 732 2 0 0 1
+c
+d 431 1 0 0 1
+c
+d 440 1 0 0 1
+c
+d 732 2 0 0 1
+c
+d 431 2 0 0 1
+c
+d 440 1 0 0 1
+c
+d 732 2 0 0 1
+c
+d 104 1 0 0 0
+c
+d 431 2 0 0 0
+c
+d 440 1 0 0 0
+c
+d 732 2 0 0 0
+c
+d 611 5 1 1 0
+c
+d 532 1 0 0 0
+c
+d 685 3 0 0 0
+c
+d 388 2 1 0 0
+c
+d 646 1 1 0 0
+c
+d 358 3 0 0 1
+c
+d 364 1 0 0 1
+c
+d 319 3 0 0 1
+c
+d 321 1 0 0 1
+c
+d 358 3 0 0 1
+c
+d 364 2 0 0 1
+c
+d 319 3 0 0 1
+c
+d 321 1 0 0 1
+c
+d 356 1 0 0 1
+c
+d 358 3 0 0 1
+c
+d 364 2 0 0 1
+c
+d 42 1 0 0 1
+c
+d 319 3 1 0 1
+c
+d 321 1 0 0 1
+c
+d 356 1 0 0 1
+c
+d 358 3 0 0 1
+c
+d 364 2 0 0 1
+c
+d 42 1 0 0 0
+c
+d 319 3 1 0 0
+c
+d 320 1 0 0 0
+c
+d 321 1 0 0 0
+c
+d 356 1 0 0 0
+c
+d 358 3 0 0 0
+c
+d 364 2 0 0 0
+c
+d 49 1 0 0 1
+c
+d 49 1 0 0 1
+c
+d 353 1 0 0 1
+c
+d 361 1 0 0 1
+c
+d 370 2 0 0 1
+c
+d 372 1 0 0 1
+c
+d 518 1 0 0 1
+c
+d 720 4 0 0 1
+c
+d 515 1 0 0 0
+c
+d 518 1 0 0 0
+c
+d 720 4 1 0 0
+c
+d 721 2 1 0 0
+c
+d 621 1 0 0 1
+c
+d 622 1 0 0 1
+c
+d 620 1 1 0 0
+c
+d 614 5 0 1 0
+c
+d 271 1 0 0 1
+c
+d 273 3 0 0 1
+c
+d 271 1 0 1 0
+c
+d 273 1 0 1 0
+c
+d 385 1 0 0 1
+c
+d 386 1 0 0 1
+c
+d 74 1 0 0 1
+c
+d 385 1 0 1 1
+c
+d 386 2 1 0 1
+c
+d 412 1 0 0 1
+c
+d 74 1 0 0 1
+c
+d 385 1 0 0 1
+c
+d 386 3 0 0 1
+c
+d 412 1 0 0 1
+c
+d 74 1 0 0 1
+c
+d 385 1 0 0 1
+c
+d 386 3 0 0 1
+c
+d 412 1 0 0 1
+c
+d 411 2 0 0 1
+c
+d 412 1 0 0 1
+c
+d 385 1 0 0 0
+c
+d 411 6 0 0 0
+c
+d 412 1 0 0 0
+c
+d 415 1 0 0 0
+c
+d 561 6 1 0 0
+c
+d 705 1 0 0 0
+c
+d 324 3 0 0 0
+c
+d 358 2 0 0 0
+c
+d 430 2 0 0 1
+c
+d 641 1 0 0 0
+c
+d 430 1 0 0 1
+c
+d 700 1 0 0 1
+c
+d 383 1 0 1 1
+c
+d 377 2 1 0 1
+c
+d 430 1 0 1 1
+c
+d 377 1 0 0 0
+c
+d 86 1 0 0 1
+c
+d 420 3 0 0 1
+c
+d 421 2 0 0 1
+c
+d 86 1 0 0 1
+c
+d 202 2 0 0 1
+c
+d 420 4 0 0 1
+c
+d 421 2 0 0 1
+c
+d 496 1 0 0 1
+c
+d 420 4 1 0 0
+c
+d 568 1 0 0 0
+c
+d 569 2 0 0 0
+c
+d 570 2 0 0 0
+c
+d 542 1 0 1 1
+c
+d 434 2 0 0 0
+c
+d 435 1 0 0 0
+c
+d 547 1 0 0 0
+c
+d 707 2 1 1 0
+c
+d 638 1 0 0 1
+c
+d 383 1 0 0 0
+c
+d 384 1 0 0 0
+c
+d 752 3 1 1 1
+c
+d 267 1 0 1 0
+c
+d 487 1 0 0 1
+c
+d 129 1 0 0 1
+c
+d 477 1 0 0 1
+c
+d 484 1 0 0 1
+c
+d 487 2 0 0 1
+c
+d 488 1 0 0 1
+c
+d 489 2 0 0 1
+c
+d 745 2 0 0 0
+c
+d 624 2 1 0 1
+c
+d 591 1 0 0 0
+c
+d 597 2 0 0 0
+c
+d 313 1 0 1 1
+c
+d 306 2 0 0 1
+c
+d 307 3 0 0 1
+c
+d 313 3 0 0 1
+c
+d 314 3 0 0 1
+c
+d 316 1 0 0 1
+c
+d 313 1 1 1 0
+c
+d 314 1 0 1 0
+c
+d 358 2 0 1 1
+c
+d 743 2 0 0 1
+c
+d 47 2 0 0 1
+c
+d 46 2 0 0 1
+c
+d 46 2 0 0 1
+c
+d 47 2 0 0 1
+c
+d 358 2 1 0 1
+c
+d 366 2 0 0 1
+c
+d 743 2 0 0 1
+c
+d 46 2 0 0 1
+c
+d 47 2 0 0 1
+c
+d 358 3 0 0 1
+c
+d 366 3 0 0 1
+c
+d 743 2 0 0 1
+c
+d 576 2 0 0 1
+c
+d 577 1 0 1 1
+c
+d 233 1 0 0 1
+c
+d 571 1 0 0 0
+c
+d 572 1 0 0 0
+c
+d 576 1 1 0 0
+c
+d 537 1 1 0 0
+c
+d 663 2 0 2 0
+c
+d 518 2 1 1 0
+c
+d 717 3 1 0 0
+c
+d 508 1 0 0 0
+c
+d 724 4 0 0 0
+c
+d 316 3 1 0 0
+c
+d 403 3 1 0 0
+c
+d 463 1 0 0 1
+c
+d 471 2 0 0 1
+c
+d 126 1 0 0 1
+c
+d 463 2 0 0 1
+c
+d 468 1 1 0 0
+c
+d 527 1 0 0 1
+c
+d 541 3 0 0 1
+c
+d 226 1 0 0 1
+c
+d 527 1 0 0 1
+c
+d 541 3 0 0 1
+c
+d 226 1 0 0 0
+c
+d 527 2 0 0 0
+c
+d 541 3 0 0 0
+c
+d 685 6 1 0 1
+c
+d 686 1 0 0 1
+c
+d 457 1 0 0 0
+c
+d 689 1 0 0 1
+c
+d 438 1 0 0 1
+c
+d 439 1 0 0 1
+c
+d 438 1 0 0 1
+c
+d 439 1 0 0 1
+c
+d 650 1 0 0 1
+c
+d 689 1 0 0 1
+c
+d 438 1 0 0 1
+c
+d 439 1 0 0 1
+c
+d 650 1 0 0 1
+c
+d 689 1 0 0 1
+c
+d 649 1 0 0 1
+c
+d 649 1 0 0 1
+c
+d 439 1 0 0 1
+c
+d 430 1 0 0 0
+c
+d 438 1 0 0 0
+c
+d 439 2 0 0 0
+c
+d 689 1 0 0 0
+c
+d 724 1 0 0 1
+c
+d 643 2 0 2 0
+c
+d 369 2 0 1 1
+c
+d 369 2 1 0 0
+c
+d 370 1 0 0 0
+c
+d 569 1 0 0 0
+c
+d 758 6 1 0 1
+c
+d 708 5 0 0 0
+c
+d 758 7 0 0 0
+c
+d 487 1 0 0 0
+c
+d 663 2 0 1 0
+c
+d 638 1 0 0 1
+c
+d 378 1 0 0 1
+c
+d 518 2 0 0 1
+c
+d 695 1 0 0 1
+c
+d 55 1 0 0 0
+c
+d 518 2 1 1 0
+c
+d 663 1 0 0 1
+c
+d 663 3 2 0 0
+c
+d 707 2 0 0 0
+c
+d 279 5 0 0 1
+c
+d 294 2 1 0 1
+c
+d 300 1 0 0 1
+c
+d 7 1 1 0 0
+c
+d 600 1 0 0 1
+c
+d 601 1 0 0 1
+c
+d 666 6 0 0 1
+c
+d 600 2 0 0 1
+c
+d 601 1 0 0 1
+c
+d 666 6 0 0 1
+c
+d 600 2 0 0 0
+c
+d 601 1 0 0 0
+c
+d 666 7 0 0 0
+c
+d 683 2 0 0 0
+c
+d 420 3 0 0 1
+c
+d 204 2 0 0 1
+c
+d 420 3 0 0 1
+c
+d 204 2 0 0 1
+c
+d 420 5 0 0 1
+c
+d 77 1 0 0 0
+c
+d 204 2 0 0 0
+c
+d 420 5 0 0 0
+c
+d 749 6 1 0 0
+c
+d 369 1 0 0 0
+c
+d 579 2 0 1 0
+c
+d 582 1 0 1 0
+c
+d 703 1 0 0 0
+c
+d 531 1 0 0 1
+c
+d 660 1 0 0 1
+c
+d 144 1 0 0 1
+c
+d 145 2 0 0 1
+c
+d 147 2 0 0 1
+c
+d 148 1 0 0 1
+c
+d 660 1 0 0 1
+c
+d 403 1 0 0 1
+c
+d 644 4 0 0 1
+c
+d 385 1 0 0 0
+c
+d 403 1 0 0 0
+c
+d 644 7 0 0 0
+c
+d 645 1 0 0 0
+c
+d 518 5 0 0 0
+c
+d 388 1 0 1 0
+c
+d 389 1 0 1 0
+c
+d 644 2 0 0 1
+c
+d 646 1 0 0 1
+c
+d 403 3 0 0 1
+c
+d 404 2 0 0 1
+c
+d 403 3 0 0 1
+c
+d 404 2 0 0 1
+c
+d 644 4 0 0 1
+c
+d 646 1 0 0 1
+c
+d 403 3 0 0 1
+c
+d 404 2 0 0 1
+c
+d 644 4 0 0 1
+c
+d 646 1 0 0 1
+c
+d 406 1 0 0 1
+c
+d 62 1 0 0 0
+c
+d 406 1 0 0 0
+c
+d 267 2 1 0 1
+c
+d 263 1 0 0 0
+c
+d 264 2 0 0 0
+c
+d 267 1 1 0 0
+c
+d 753 1 0 1 0
+c
+d 516 3 0 0 0
+c
+d 519 1 0 0 0
+c
+d 721 2 0 0 0
+c
+d 722 1 0 0 0
+c
+d 345 1 0 0 1
+c
+d 346 2 0 0 1
+c
+d 663 1 1 0 0
+c
+d 721 2 0 0 0
+c
+d 685 3 0 0 1
+c
+d 685 1 1 0 0
+c
+d 686 2 0 0 0
+c
+d 340 4 1 0 0
+c
+d 632 1 0 0 0
+c
+d 633 2 1 0 0
+c
+d 707 1 0 1 0
+c
+d 743 2 0 0 1
+c
+d 363 2 0 0 0
+c
+d 743 2 0 2 0
+c
+d 268 2 0 1 1
+c
+d 265 1 0 1 1
+c
+d 52 2 0 0 0
+c
+d 459 5 0 0 0
+c
+d 572 1 0 0 0
+c
+d 684 1 0 0 0
+c
+d 6 1 0 0 0
+c
+d 295 4 0 0 0
+c
+d 296 2 0 0 0
+c
+d 524 1 0 0 1
+c
+d 523 1 0 0 1
+c
+d 524 3 1 0 1
+c
+d 526 1 0 0 1
+c
+d 527 1 0 0 1
+c
+d 541 1 0 0 1
+c
+d 526 1 0 1 0
+c
+d 24 2 0 0 1
+c
+d 25 2 1 0 1
+c
+d 26 2 0 0 1
+c
+d 343 1 0 0 1
+c
+d 634 3 0 0 1
+c
+d 635 3 0 0 1
+c
+d 24 1 0 0 0
+c
+d 224 2 0 0 0
+c
+d 366 4 1 0 0
+c
+d 523 1 0 0 0
+c
+d 530 1 0 0 0
+c
+d 572 1 0 1 0
+c
+d 665 5 1 0 0
+c
+d 541 1 0 1 1
+c
+d 542 1 1 0 1
+c
+d 542 1 1 0 0
+c
+d 543 1 0 0 0
+c
+d 379 1 1 0 0
+c
+d 717 1 0 0 0
+c
+d 694 1 0 0 1
+c
+d 741 2 0 0 0
+c
+d 299 2 0 0 0
+c
+d 300 4 0 0 0
+c
+d 540 1 0 0 0
+c
+d 612 1 0 0 0
+c
+d 702 5 1 0 0
+c
+d 381 1 0 0 0
+c
+d 477 1 0 0 1
+c
+d 489 1 0 0 1
+c
+d 706 1 0 0 1
+c
+d 550 1 0 0 1
+c
+d 132 2 0 0 1
+c
+d 492 2 0 0 1
+c
+d 497 1 0 0 1
+c
+d 550 1 0 0 1
+c
+d 309 4 0 0 0
+c
+d 377 2 0 0 1
+c
+d 54 1 0 0 1
+c
+d 54 1 0 0 1
+c
+d 377 2 0 0 1
+c
+d 430 1 0 0 1
+c
+d 54 1 0 0 0
+c
+d 377 2 0 0 0
+c
+d 430 2 0 0 0
+c
+d 732 2 0 0 0
+c
+d 304 1 0 0 0
+c
+d 388 1 0 0 0
+c
+d 390 2 1 0 0
+c
+d 391 1 0 0 0
+c
+d 268 1 1 0 1
+c
+d 264 1 0 0 1
+c
+d 1 2 0 0 0
+c
+d 713 1 0 0 0
+c
+d 714 1 0 0 0
+c
+d 279 1 0 0 1
+c
+d 280 1 1 0 1
+c
+d 294 5 0 0 1
+c
+d 749 1 0 0 1
+c
+d 16 1 0 0 1
+c
+d 279 1 0 0 1
+c
+d 280 2 0 0 1
+c
+d 281 1 0 0 1
+c
+d 294 6 0 0 1
+c
+d 749 1 0 0 1
+c
+d 510 1 0 1 1
+c
+d 511 5 0 0 1
+c
+d 538 1 0 1 1
+c
+d 510 1 0 0 1
+c
+d 511 5 0 0 1
+c
+d 538 1 0 0 1
+c
+d 153 2 0 0 0
+c
+d 510 1 0 0 0
+c
+d 511 5 0 0 0
+c
+d 538 1 0 0 0
+c
+d 491 1 0 0 1
+c
+d 547 1 0 0 1
+c
+d 157 1 0 0 1
+c
+d 156 1 0 0 0
+c
+d 271 1 0 1 0
+c
+d 297 3 1 0 0
+c
+d 518 3 1 0 0
+c
+d 719 1 0 0 0
+c
+d 478 1 0 0 1
+c
+d 479 1 0 0 1
+c
+d 729 4 1 1 1
+c
+d 729 1 1 0 0
+c
+d 508 1 0 0 0
+c
+d 741 3 0 0 0
+c
+d 638 2 1 1 0
+c
+d 554 1 0 0 1
+c
+d 554 3 1 0 1
+c
+d 555 1 0 0 1
+c
+d 558 1 0 0 1
+c
+d 554 3 0 0 1
+c
+d 555 1 0 0 1
+c
+d 558 1 0 0 1
+c
+d 554 3 0 0 1
+c
+d 555 1 0 0 1
+c
+d 558 1 0 0 1
+c
+d 558 1 0 0 1
+c
+d 558 1 0 0 1
+c
+d 180 2 0 0 1
+c
+d 180 3 0 0 0
+c
+d 554 1 0 0 0
+c
+d 555 1 0 0 0
+c
+d 558 3 0 0 0
+c
+d 638 1 0 0 1
+c
+d 699 2 0 0 1
+c
+d 379 1 0 1 0
+c
+d 699 1 1 0 0
+c
+d 398 3 1 0 1
+c
+d 512 1 0 0 1
+c
+d 513 2 0 0 1
+c
+d 136 1 1 0 0
+c
+d 294 1 0 0 0
+c
+d 749 3 0 0 0
+c
+d 751 4 1 1 0
+c
+d 747 1 0 0 1
+c
+d 262 1 0 0 0
+c
+d 518 1 0 0 0
+c
+d 717 2 1 0 0
+c
+d 747 3 0 0 1
+c
+d 283 1 0 0 0
+c
+d 747 3 1 0 0
+c
+d 614 1 0 0 1
+c
+d 631 1 0 0 1
+c
+d 614 2 1 0 0
+c
+d 631 1 0 0 0
+c
+d 576 1 0 0 1
+c
+d 577 1 0 0 1
+c
+d 579 1 0 0 1
+c
+d 584 2 0 0 1
+c
+d 584 1 1 0 1
+c
+d 577 1 0 1 0
+c
+d 579 3 1 0 0
+c
+d 580 1 0 0 0
+c
+d 560 1 0 0 1
+c
+d 563 2 1 0 1
+c
+d 562 3 1 0 1
+c
+d 327 1 0 0 0
+c
+d 707 4 0 0 0
+c
+d 644 1 0 0 1
+c
+d 62 2 1 0 0
+c
+d 403 1 0 0 0
+c
+d 405 1 0 0 0
+c
+d 644 1 0 0 0
+c
+d 646 3 0 0 0
+c
+d 427 1 0 0 0
+c
+d 500 1 0 0 1
+c
+d 499 3 1 0 0
+c
+d 500 2 0 1 0
+c
+d 501 1 0 0 0
+c
+d 657 1 0 0 0
+c
+d 658 1 0 0 0
+c
+d 232 1 1 0 1
+c
+d 612 1 0 0 1
+c
+d 561 1 0 0 1
+c
+d 552 2 1 0 0
+c
+d 612 1 0 1 0
+c
+d 320 1 0 0 1
+c
+d 359 2 0 0 1
+c
+d 637 3 0 0 1
+c
+d 320 1 0 0 0
+c
+d 359 2 1 0 0
+c
+d 360 2 0 0 0
+c
+d 637 3 0 0 0
+c
+d 747 3 1 1 0
+c
+d 748 3 1 0 0
+c
+d 509 1 0 0 1
+c
+d 510 3 0 0 1
+c
+d 509 1 0 0 1
+c
+d 510 4 0 0 1
+c
+d 490 1 0 0 0
+c
+d 491 1 0 0 0
+c
+d 509 1 0 1 0
+c
+d 510 4 1 0 0
+c
+d 392 1 0 0 0
+c
+d 738 3 0 0 0
+c
+d 740 1 0 0 0
+c
+d 369 1 1 0 1
+c
+d 370 1 0 0 1
+c
+d 372 1 0 0 1
+c
+d 373 1 0 0 1
+c
+d 372 1 0 0 0
+c
+d 587 1 1 0 0
+c
+d 352 2 0 0 0
+c
+d 353 2 1 0 0
+c
+d 354 1 0 0 0
+c
+d 360 1 0 1 0
+c
+d 540 3 0 1 0
+c
+d 583 1 1 0 0
+c
+d 460 2 0 0 1
+c
+d 461 1 0 0 1
+c
+d 503 4 0 0 1
+c
+d 505 1 0 0 1
+c
+d 657 1 0 0 1
+c
+d 460 2 0 0 0
+c
+d 461 1 0 0 0
+c
+d 484 3 1 0 1
+c
+d 484 2 1 0 0
+c
+d 541 1 0 0 1
+c
+d 541 1 0 0 0
+c
+d 543 2 0 0 0
+c
+d 710 1 0 0 0
+c
+d 484 1 0 0 1
+c
+d 485 1 0 0 1
+c
+d 485 3 1 0 0
+c
+d 437 1 0 0 0
+c
+d 518 2 0 1 0
+c
+d 716 1 0 1 0
+c
+d 241 2 0 0 1
+c
+d 609 1 0 0 1
+c
+d 613 1 0 0 1
+c
+d 615 2 0 0 1
+c
+d 616 1 0 0 1
+c
+d 618 2 0 0 1
+c
+d 609 1 0 1 0
+c
+d 459 2 0 0 1
+c
+d 459 2 0 0 0
+c
+d 460 1 0 0 0
+c
+d 520 1 1 0 1
+c
+d 509 3 0 0 1
+c
+d 510 1 0 0 1
+c
+d 520 5 0 0 1
+c
+d 338 6 1 0 1
+c
+d 344 1 0 0 0
+c
+d 613 2 0 0 1
+c
+d 603 2 0 0 1
+c
+d 604 1 0 0 1
+c
+d 613 1 0 1 1
+c
+d 613 1 1 0 0
+c
+d 582 3 1 0 1
+c
+d 582 2 1 1 0
+c
+d 614 1 0 1 0
+c
+d 671 3 0 1 0
+c
+d 591 3 1 0 1
+c
+d 591 2 1 0 0
+c
+d 535 1 0 0 1
+c
+d 536 2 1 0 1
+c
+d 511 1 0 0 0
+c
+d 436 1 0 0 0
+c
+d 447 1 0 0 0
+c
+d 632 1 1 0 0
+c
+d 707 3 1 1 0
+c
+d 414 2 0 0 1
+c
+d 70 1 0 0 1
+c
+d 68 1 0 0 0
+c
+d 442 1 0 0 1
+c
+d 651 2 0 0 1
+c
+d 691 1 0 0 1
+c
+d 218 2 0 0 1
+c
+d 442 1 0 0 1
+c
+d 651 2 0 0 1
+c
+d 691 1 0 0 1
+c
+d 218 2 0 0 1
+c
+d 442 1 0 0 1
+c
+d 443 1 0 0 1
+c
+d 651 2 0 0 1
+c
+d 691 1 0 0 1
+c
+d 218 2 0 0 1
+c
+d 442 1 0 0 1
+c
+d 443 1 0 0 1
+c
+d 444 1 0 0 1
+c
+d 651 2 0 0 1
+c
+d 691 1 0 0 1
+c
+d 218 2 0 0 0
+c
+d 442 1 0 0 0
+c
+d 443 1 0 0 0
+c
+d 444 1 0 0 0
+c
+d 445 1 0 0 0
+c
+d 651 2 0 0 0
+c
+d 691 1 0 0 0
+c
+d 446 1 1 0 0
+c
+d 651 4 0 0 0
+c
+d 686 1 0 0 0
+c
+d 279 2 1 0 1
+c
+d 280 1 0 0 1
+c
+d 281 1 0 0 1
+c
+d 282 1 0 0 1
+c
+d 293 1 0 0 1
+c
+d 294 1 0 0 1
+c
+d 279 3 0 0 1
+c
+d 280 1 0 0 1
+c
+d 281 1 0 0 1
+c
+d 282 1 0 0 1
+c
+d 292 1 0 0 1
+c
+d 293 1 0 0 1
+c
+d 294 1 0 0 1
+c
+d 279 3 1 0 0
+c
+d 280 1 0 0 0
+c
+d 281 1 0 0 0
+c
+d 282 1 0 0 0
+c
+d 292 1 0 0 0
+c
+d 293 2 0 0 0
+c
+d 294 1 0 0 0
+c
+d 644 1 0 0 0
+c
+d 279 1 1 0 0
+c
+d 282 2 1 0 0
+c
+d 286 1 0 0 0
+c
+d 288 1 0 0 0
+c
+d 284 1 0 0 1
+c
+d 291 2 0 0 1
+c
+d 292 2 0 0 1
+c
+d 284 1 0 0 1
+c
+d 291 2 0 0 1
+c
+d 292 2 0 0 1
+c
+d 284 2 0 0 1
+c
+d 284 2 0 0 1
+c
+d 14 2 0 0 1
+c
+d 14 2 0 0 1
+c
+d 303 1 0 0 1
+c
+d 3 1 0 0 0
+c
+d 284 1 0 0 0
+c
+d 291 2 0 0 0
+c
+d 292 1 0 0 0
+c
+d 303 1 0 0 0
+c
+d 458 1 0 0 1
+c
+d 459 8 1 1 1
+c
+d 459 3 1 0 0
+c
+d 337 2 0 0 0
+c
+d 633 3 1 0 0
+c
+d 701 1 0 0 0
+c
+d 518 2 1 0 1
+c
+d 720 1 0 0 1
+c
+d 516 1 0 1 0
+c
+d 518 1 1 0 0
+c
+d 721 1 1 0 0
+c
+d 494 3 0 0 0
+c
+d 379 2 0 0 0
+c
+d 717 1 1 0 0
+c
+d 745 3 0 0 1
+c
+d 745 2 1 1 0
+c
+d 749 2 0 0 0
+c
+d 518 4 1 0 0
+c
+d 716 1 1 0 0
+c
+d 575 5 1 0 0
+c
+d 373 1 0 0 1
+c
+d 654 2 0 0 1
+c
+d 475 1 0 0 0
+c
+d 738 1 0 0 1
+c
+d 740 1 0 0 0
+c
+d 537 1 0 0 1
+c
+d 663 4 1 0 1
+c
+d 381 1 0 0 1
+c
+d 430 1 0 0 1
+c
+d 640 1 0 1 0
+c
+d 641 1 1 0 0
+c
+d 616 1 0 0 1
+c
+d 617 3 0 0 1
+c
+d 187 2 1 0 1
+c
+d 616 2 0 0 1
+c
+d 626 2 1 1 1
+c
+d 626 1 1 0 0
+c
+d 652 1 0 0 1
+c
+d 451 1 0 0 1
+c
+d 456 1 0 0 1
+c
+d 124 2 0 0 0
+c
+d 519 1 0 1 1
+c
+d 517 1 0 1 0
+c
+d 309 2 1 0 0
+c
+d 311 1 0 1 0
+c
+d 329 1 0 0 1
+c
+d 436 4 1 0 1
+c
+d 744 5 0 0 1
+c
+d 329 1 0 0 1
+c
+d 436 4 0 0 1
+c
+d 744 5 0 0 1
+c
+d 328 1 0 0 0
+c
+d 329 1 0 1 0
+c
+d 434 1 0 1 0
+c
+d 436 4 1 0 0
+c
+d 744 5 0 0 0
+c
+d 314 2 1 1 0
+c
+d 262 2 0 0 1
+c
+d 262 2 0 0 1
+c
+d 298 1 0 0 1
+c
+d 298 1 0 0 1
+c
+d 261 1 0 0 1
+c
+d 261 2 0 0 0
+c
+d 262 2 0 0 0
+c
+d 272 1 0 0 0
+c
+d 298 3 0 0 0
+c
+d 385 1 0 0 0
+c
+d 387 1 0 0 0
+c
+d 506 1 0 0 0
+c
+d 541 1 0 0 1
+c
+d 137 1 0 0 1
+c
+d 138 1 0 0 1
+c
+d 139 1 0 0 1
+c
+d 523 1 0 0 1
+c
+d 527 3 0 0 1
+c
+d 142 1 0 0 0
+c
+d 644 1 0 0 1
+c
+d 66 1 0 0 1
+c
+d 66 2 0 0 0
+c
+d 406 4 0 1 0
+c
+d 409 2 1 0 0
+c
+d 644 1 0 0 0
+c
+d 353 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 642 1 0 0 1
+c
+d 638 1 0 0 1
+c
+d 56 2 0 0 0
+c
+d 561 1 0 0 1
+c
+d 562 1 0 0 1
+c
+d 560 1 0 0 0
+c
+d 561 5 3 0 0
+c
+d 563 1 0 0 0
+c
+d 491 1 0 1 1
+c
+d 157 1 0 0 1
+c
+d 538 1 0 0 1
+c
+d 155 1 0 0 1
+c
+d 154 2 0 0 0
+c
+d 452 1 0 1 1
+c
+d 453 2 0 0 1
+c
+d 452 2 0 0 0
+c
+d 453 3 0 0 0
+c
+d 659 1 0 0 0
+c
+d 614 1 0 1 1
+c
+d 615 1 0 0 1
+c
+d 671 1 0 1 1
+c
+d 671 3 1 0 0
+c
+d 372 5 1 0 0
+c
+d 373 1 1 0 0
+c
+d 742 1 0 0 0
+c
+d 749 7 2 0 0
+c
+d 751 1 0 0 0
+c
+d 300 1 0 1 0
+c
+d 302 5 0 0 0
+c
+d 246 1 0 0 0
+c
+d 338 6 2 2 0
+c
+d 634 1 0 0 0
+c
+d 323 2 0 0 1
+c
+d 324 2 0 0 1
+c
+d 348 2 0 0 1
+c
+d 321 1 0 0 0
+c
+d 483 4 1 0 1
+c
+d 498 1 0 0 1
+c
+d 502 2 0 0 1
+c
+d 550 1 0 0 1
+c
+d 483 1 1 0 0
+c
+d 501 1 0 0 0
+c
+d 502 1 1 0 0
+c
+d 518 1 1 0 0
+c
+d 519 1 0 0 0
+c
+d 715 1 0 0 0
+c
+d 398 3 1 1 0
+c
+d 513 2 1 0 0
+c
+d 514 1 0 1 0
+c
+d 457 1 0 0 0
+c
+d 407 4 0 0 1
+c
+d 409 1 0 1 1
+c
+d 407 4 0 0 1
+c
+d 409 1 0 0 1
+c
+d 734 1 0 0 1
+c
+d 65 1 0 0 0
+c
+d 407 5 0 0 0
+c
+d 409 1 0 0 0
+c
+d 734 1 0 0 0
+c
+d 657 1 0 0 1
+c
+d 483 1 0 0 1
+c
+d 483 1 0 1 1
+c
+d 502 1 0 0 1
+c
+d 657 1 0 1 1
+c
+d 548 1 0 0 0
+c
+d 549 1 0 0 0
+c
+d 507 1 0 0 1
+c
+d 659 1 0 0 0
+c
+d 515 1 1 0 0
+c
+d 518 1 0 1 0
+c
+d 717 1 0 0 0
+c
+d 547 1 0 0 1
+c
+d 707 1 0 0 1
+c
+d 547 1 0 1 0
+c
+d 632 1 0 0 0
+c
+d 707 2 0 0 0
+c
+d 556 1 0 0 0
+c
+d 557 1 0 0 0
+c
+d 558 4 1 0 0
+c
+d 749 2 0 0 1
+c
+d 749 2 0 0 0
+c
+d 750 1 0 0 0
+c
+d 553 3 0 0 1
+c
+d 554 2 0 0 1
+c
+d 555 2 1 0 1
+c
+d 556 1 0 0 1
+c
+d 557 1 0 0 1
+c
+d 422 3 1 0 0
+c
+d 353 1 0 1 0
+c
+d 361 3 1 0 0
+c
+d 561 7 1 0 0
+c
+d 200 1 0 0 1
+c
+d 638 1 0 0 1
+c
+d 378 1 0 0 1
+c
+d 56 2 0 0 1
+c
+d 638 1 0 0 1
+c
+d 642 1 0 0 1
+c
+d 55 2 0 0 0
+c
+d 270 4 1 0 1
+c
+d 752 2 1 1 1
+c
+d 263 1 0 0 0
+c
+d 267 2 0 0 0
+c
+d 270 3 0 0 0
+c
+d 752 3 0 0 0
+c
+d 753 1 0 0 0
+c
+d 754 1 0 0 0
+c
+d 757 1 0 0 0
+c
+d 345 2 0 0 0
+c
+d 347 1 0 0 0
+c
+d 633 1 0 0 0
+c
+d 385 3 0 1 1
+c
+d 67 2 0 0 0
+c
+d 385 2 0 0 0
+c
+d 708 1 0 0 1
+c
+d 708 2 0 0 1
+c
+d 542 1 1 0 0
+c
+d 329 1 0 0 1
+c
+d 449 1 0 0 1
+c
+d 109 2 0 0 0
+c
+d 759 2 0 0 0
+c
+d 268 5 1 2 0
+c
+d 517 3 0 0 0
+c
+d 519 1 0 0 0
+c
+d 268 3 2 0 0
+c
+d 269 1 0 0 0
+c
+d 651 2 0 0 0
+c
+d 575 3 0 1 1
+c
+d 576 2 0 0 1
+c
+d 578 2 0 0 1
+c
+d 575 4 1 0 0
+c
+d 576 2 0 0 0
+c
+d 578 2 0 0 0
+c
+d 585 1 1 0 0
+c
+d 579 1 0 1 1
+c
+d 579 1 0 0 1
+c
+d 582 1 0 0 1
+c
+d 584 1 1 0 1
+c
+d 326 2 1 0 0
+c
+d 327 1 0 1 0
+c
+d 580 2 0 0 0
+c
+d 651 2 0 0 1
+c
+d 651 2 1 0 0
+c
+d 267 5 0 0 1
+c
+d 268 1 0 0 1
+c
+d 267 5 0 0 0
+c
+d 268 2 0 0 0
+c
+d 411 1 0 0 1
+c
+d 414 5 1 0 1
+c
+d 414 1 0 0 0
+c
+d 307 1 0 0 0
+c
+d 512 2 1 0 0
+c
+d 453 1 0 0 1
+c
+d 454 3 1 0 1
+c
+d 494 1 1 0 1
+c
+d 453 2 0 0 0
+c
+d 454 1 0 0 0
+c
+d 463 5 0 0 0
+c
+d 464 2 0 0 0
+c
+d 494 3 0 0 0
+c
+d 463 1 0 0 1
+c
+d 466 1 0 1 1
+c
+d 127 1 0 0 1
+c
+d 468 3 0 0 1
+c
+d 468 1 0 1 0
+c
+d 358 5 1 1 0
+c
+d 366 1 0 0 0
+c
+d 430 1 0 0 1
+c
+d 431 2 0 0 1
+c
+d 432 1 0 0 1
+c
+d 100 1 0 0 0
+c
+d 272 2 0 1 1
+c
+d 272 3 0 0 0
+c
+d 267 3 0 0 0
+c
+d 754 1 0 0 0
+c
+d 755 1 0 0 0
+c
+d 716 3 0 0 0
+c
+d 581 1 0 0 1
+c
+d 581 1 0 0 1
+c
+d 608 1 0 0 1
+c
+d 610 1 0 0 1
+c
+d 607 2 1 0 1
+c
+d 608 1 0 1 1
+c
+d 179 2 0 0 0
+c
+d 238 1 0 0 0
+c
+d 581 1 0 0 0
+c
+d 606 1 0 0 0
+c
+d 607 3 0 0 0
+c
+d 608 1 0 0 0
+c
+d 638 1 0 0 1
+c
+d 639 1 0 0 1
+c
+d 58 2 1 0 1
+c
+d 380 1 0 0 1
+c
+d 366 6 1 0 0
+c
+d 303 1 0 0 1
+c
+d 284 2 0 0 1
+c
+d 286 1 0 0 1
+c
+d 303 1 0 0 1
+c
+d 284 2 0 0 0
+c
+d 337 1 0 1 1
+c
+d 339 3 1 0 1
+c
+d 340 1 0 0 1
+c
+d 634 2 1 0 1
+c
+d 701 1 0 0 1
+c
+d 634 1 1 0 0
+c
+d 460 4 1 0 0
+c
+d 422 2 0 0 1
+c
+d 216 1 0 0 1
+c
+d 215 1 0 0 1
+c
+d 422 3 0 1 1
+c
+d 215 1 0 0 1
+c
+d 216 1 0 0 1
+c
+d 421 1 0 0 1
+c
+d 422 5 0 0 1
+c
+d 215 1 0 0 1
+c
+d 216 1 0 0 1
+c
+d 421 1 0 0 1
+c
+d 422 5 0 0 1
+c
+d 215 1 0 0 1
+c
+d 215 1 0 0 1
+c
+d 421 1 0 0 1
+c
+d 422 1 0 0 1
+c
+d 451 1 0 0 1
+c
+d 494 1 0 0 1
+c
+d 423 2 0 0 0
+c
+d 593 1 0 0 1
+c
+d 593 1 0 0 1
+c
+d 626 1 0 0 1
+c
+d 627 3 0 0 1
+c
+d 671 2 0 2 1
+c
+d 626 1 0 0 0
+c
+d 627 1 0 0 0
+c
+d 671 3 0 0 0
+c
+d 13 2 0 0 1
+c
+d 292 3 0 0 1
+c
+d 293 1 0 0 1
+c
+d 295 1 0 0 1
+c
+d 748 1 0 0 1
+c
+d 13 2 0 0 1
+c
+d 292 3 0 0 1
+c
+d 293 1 0 0 1
+c
+d 295 1 0 0 1
+c
+d 748 1 0 0 1
+c
+d 293 2 0 0 1
+c
+d 293 2 0 0 1
+c
+d 13 1 0 0 1
+c
+d 8 2 0 0 0
+c
+d 13 2 0 0 0
+c
+d 279 1 0 0 0
+c
+d 292 2 0 0 0
+c
+d 293 1 0 0 0
+c
+d 419 1 0 0 1
+c
+d 91 1 0 0 1
+c
+d 89 1 0 0 1
+c
+d 89 1 0 0 1
+c
+d 91 1 0 0 1
+c
+d 419 2 0 0 1
+c
+d 89 1 0 0 1
+c
+d 91 1 0 0 1
+c
+d 419 2 0 0 1
+c
+d 188 1 0 0 1
+c
+d 188 1 0 0 1
+c
+d 423 1 0 0 1
+c
+d 188 2 0 0 1
+c
+d 419 1 0 0 1
+c
+d 423 1 0 0 1
+c
+d 383 3 0 0 1
+c
+d 638 3 0 0 1
+c
+d 382 1 0 1 0
+c
+d 383 4 0 2 0
+c
+d 638 3 0 0 0
+c
+d 233 2 0 0 1
+c
+d 233 1 1 0 0
+c
+d 571 1 1 0 0
+c
+d 572 3 1 0 0
+c
+d 576 1 1 0 0
+c
+d 406 1 0 0 1
+c
+d 406 1 0 0 1
+c
+d 409 1 0 0 1
+c
+d 644 1 0 0 0
+c
+d 365 1 0 0 1
+c
+d 660 3 0 0 1
+c
+d 48 2 0 0 1
+c
+d 368 2 0 0 1
+c
+d 660 1 0 1 1
+c
+d 742 1 0 1 1
+c
+d 48 2 0 0 1
+c
+d 365 1 0 0 1
+c
+d 368 2 0 0 1
+c
+d 660 3 0 0 1
+c
+d 742 1 0 0 1
+c
+d 48 2 0 0 1
+c
+d 365 1 0 0 1
+c
+d 368 2 0 0 1
+c
+d 660 3 0 0 1
+c
+d 742 1 0 0 1
+c
+d 361 1 0 0 1
+c
+d 361 1 0 0 1
+c
+d 49 2 0 0 1
+c
+d 49 2 0 0 0
+c
+d 742 3 0 0 0
+c
+d 132 1 0 0 1
+c
+d 132 1 0 0 0
+c
+d 483 1 0 0 0
+c
+d 500 3 0 0 0
+c
+d 501 1 0 0 0
+c
+d 385 1 0 0 1
+c
+d 406 1 0 0 1
+c
+d 407 1 1 0 1
+c
+d 409 4 1 0 1
+c
+d 410 1 0 0 1
+c
+d 406 1 0 0 0
+c
+d 672 1 0 0 0
+c
+d 332 4 0 0 1
+c
+d 332 1 0 0 0
+c
+d 580 2 0 0 0
+c
+d 611 1 0 0 1
+c
+d 299 1 0 0 1
+c
+d 300 1 0 0 1
+c
+d 299 2 0 1 0
+c
+d 300 2 1 0 0
+c
+d 617 1 0 0 0
+c
+d 625 1 0 0 0
+c
+d 626 2 0 1 0
+c
+d 627 1 0 0 0
+c
+d 669 1 0 0 0
+c
+d 685 2 0 0 0
+c
+d 60 1 0 0 1
+c
+d 738 1 0 0 1
+c
+d 376 1 0 0 0
+c
+d 193 2 0 0 1
+c
+d 707 2 0 0 1
+c
+d 663 1 0 0 0
+c
+d 707 1 0 1 0
+c
+d 366 1 0 0 1
+c
+d 367 1 0 0 1
+c
+d 353 1 1 0 1
+c
+d 370 2 0 0 1
+c
+d 353 1 1 0 0
+c
+d 370 1 0 0 0
+c
+d 572 1 0 0 1
+c
+d 573 1 0 1 1
+c
+d 599 1 0 0 1
+c
+d 666 1 0 0 1
+c
+d 683 2 0 0 1
+c
+d 599 1 1 0 0
+c
+d 683 1 0 0 0
+c
+d 633 1 0 1 1
+c
+d 345 2 1 0 0
+c
+d 347 1 1 0 0
+c
+d 638 2 0 0 0
+c
+d 541 2 1 0 1
+c
+d 543 4 0 0 0
+c
+d 379 1 1 0 0
+c
+d 717 3 0 1 0
+c
+d 394 1 0 0 1
+c
+d 376 2 0 0 1
+c
+d 376 2 0 0 1
+c
+d 394 3 1 0 1
+c
+d 376 2 0 0 0
+c
+d 394 3 0 0 0
+c
+d 738 1 0 0 0
+c
+d 699 1 0 0 1
+c
+d 700 2 0 0 1
+c
+d 700 3 0 0 1
+c
+d 307 1 0 0 0
+c
+d 316 1 0 0 1
+c
+d 308 1 0 0 0
+c
+d 267 1 0 0 0
+c
+d 540 3 0 0 1
+c
+d 543 1 0 0 1
+c
+d 543 3 1 0 0
+c
+d 214 2 1 0 1
+c
+d 213 1 1 0 1
+c
+d 92 1 0 0 1
+c
+d 423 1 0 0 0
+c
+d 265 2 1 0 1
+c
+d 272 1 0 1 1
+c
+d 297 2 0 0 1
+c
+d 265 1 1 0 0
+c
+d 297 2 1 0 0
+c
+d 379 1 1 0 0
+c
+d 518 3 1 0 0
+c
+d 522 1 0 0 1
+c
+d 540 1 0 0 1
+c
+d 540 3 0 0 1
+c
+d 523 1 0 0 0
+c
+d 431 4 1 0 0
+c
+d 732 2 0 0 0
+c
+d 285 3 0 0 1
+c
+d 262 1 0 0 1
+c
+d 258 1 0 0 1
+c
+d 262 1 0 0 1
+c
+d 285 2 0 0 1
+c
+d 755 1 0 0 1
+c
+d 756 1 0 0 1
+c
+d 258 1 1 0 0
+c
+d 751 1 0 0 1
+c
+d 9 1 0 0 1
+c
+d 9 2 1 0 0
+c
+d 286 1 1 0 0
+c
+d 289 1 0 0 0
+c
+d 751 1 1 0 0
+c
+d 113 2 0 0 1
+c
+d 112 2 0 0 1
+c
+d 449 1 0 0 1
+c
+d 329 1 1 0 0
+c
+d 1 1 0 0 1
+c
+d 1 1 0 0 0
+c
+d 268 1 0 0 0
+c
+d 271 6 0 0 0
+c
+d 267 4 1 0 0
+c
+d 270 2 1 0 0
+c
+d 163 1 0 0 0
+c
+d 643 3 1 0 0
+c
+d 724 1 0 0 0
+c
+d 515 1 0 0 1
+c
+d 376 2 1 0 1
+c
+d 51 1 0 0 0
+c
+d 376 2 1 1 0
+c
+d 446 2 0 0 1
+c
+d 651 2 0 0 1
+c
+d 727 1 1 0 1
+c
+d 446 1 0 0 0
+c
+d 651 1 0 0 0
+c
+d 561 1 0 1 1
+c
+d 705 2 0 0 1
+c
+d 565 1 0 0 1
+c
+d 565 1 0 0 0
+c
+d 566 2 0 0 0
+c
+d 574 1 0 0 0
+c
+d 705 2 1 0 0
+c
+d 286 1 0 0 1
+c
+d 290 1 1 0 1
+c
+d 286 1 0 1 0
+c
+d 289 1 0 1 0
+c
+d 290 1 1 0 0
+c
+d 407 1 0 0 0
+c
+d 644 2 1 0 0
+c
+d 646 1 0 1 0
+c
+d 428 1 0 0 1
+c
+d 358 3 0 0 0
+c
+d 366 2 1 0 0
+c
+d 340 2 1 0 0
+c
+d 341 1 0 0 0
+c
+d 634 1 0 0 0
+c
+d 509 1 0 0 0
+c
+d 602 1 0 0 1
+c
+d 332 3 0 0 1
+c
+d 334 1 0 0 1
+c
+d 308 1 0 0 0
+c
+d 624 1 1 0 1
+c
+d 597 2 1 0 0
+c
+d 622 1 0 0 0
+c
+d 624 2 1 0 0
+c
+d 477 4 1 0 0
+c
+d 77 1 0 0 1
+c
+d 77 2 0 0 1
+c
+d 204 2 0 0 1
+c
+d 420 5 0 0 1
+c
+d 644 3 1 0 0
+c
+d 645 3 0 0 0
+c
+d 674 2 0 1 1
+c
+d 674 1 0 0 0
+c
+d 366 1 0 0 1
+c
+d 369 1 0 0 1
+c
+d 370 1 0 0 1
+c
+d 371 2 0 0 1
+c
+d 371 1 0 0 0
+c
+d 430 1 0 0 0
+c
+d 438 7 0 0 0
+c
+d 516 4 0 0 0
+c
+d 698 3 0 0 0
+c
+d 265 2 0 0 1
+c
+d 274 1 0 0 0
+c
+d 340 1 0 0 1
+c
+d 345 3 1 2 1
+c
+d 347 1 0 1 1
+c
+d 345 1 1 0 0
+c
+d 347 1 1 0 0
+c
+d 422 2 0 0 1
+c
+d 451 3 0 0 1
+c
+d 452 2 0 0 1
+c
+d 451 1 0 0 0
+c
+d 452 1 0 0 0
+c
+d 455 1 0 0 0
+c
+d 456 1 0 0 0
+c
+d 363 1 0 0 0
+c
+d 558 3 0 1 0
+c
+d 559 1 1 0 0
+c
+d 628 3 1 0 0
+c
+d 629 2 0 0 0
+c
+d 642 1 0 0 1
+c
+d 695 1 0 0 1
+c
+d 56 1 0 0 0
+c
+d 330 1 0 0 0
+c
+d 37 2 0 0 1
+c
+d 740 2 0 0 0
+c
+d 479 2 1 0 0
+c
+d 648 1 0 0 0
+c
+d 562 3 1 1 1
+c
+d 664 4 0 0 1
+c
+d 664 1 1 0 0
+c
+d 411 5 1 1 0
+c
+d 271 3 0 0 0
+c
+d 655 1 0 0 1
+c
+d 741 1 0 0 1
+c
+d 477 1 0 0 1
+c
+d 128 2 0 0 0
+c
+d 403 1 0 0 0
+c
+d 477 1 1 0 0
+c
+d 655 1 0 0 0
+c
+d 656 1 0 1 0
+c
+d 741 5 1 0 0
+c
+d 224 1 0 0 1
+c
+d 366 1 0 0 1
+c
+d 522 5 1 0 1
+c
+d 523 1 0 0 1
+c
+d 525 2 0 0 1
+c
+d 523 1 0 1 0
+c
+d 525 1 1 0 0
+c
+d 706 1 0 0 0
+c
+d 593 2 0 0 0
+c
+d 596 1 0 0 0
+c
+d 624 1 1 0 0
+c
+d 668 2 1 0 0
+c
+d 669 1 0 0 0
+c
+d 670 1 0 0 0
+c
+d 0 1 0 0 0
+c
+d 698 1 0 0 1
+c
+d 516 1 0 0 0
+c
+d 698 4 0 0 0
+c
+d 721 2 0 0 0
+c
+d 606 1 0 0 1
+c
+d 606 1 0 0 1
+c
+d 589 1 0 0 1
+c
+d 589 1 0 0 1
+c
+d 171 2 0 0 1
+c
+d 171 2 0 0 1
+c
+d 589 1 0 0 1
+c
+d 591 1 0 0 1
+c
+d 592 1 0 0 0
+c
+d 383 3 0 0 0
+c
+d 430 2 0 0 0
+c
+d 749 6 0 0 1
+c
+d 749 2 0 0 0
+c
+d 552 1 0 0 1
+c
+d 559 3 1 0 1
+c
+d 628 1 0 1 1
+c
+d 631 1 1 0 1
+c
+d 628 1 1 0 0
+c
+d 339 1 0 0 1
+c
+d 340 1 0 0 1
+c
+d 341 1 0 0 1
+c
+d 634 1 0 0 1
+c
+d 339 2 0 0 0
+c
+d 340 5 0 0 0
+c
+d 341 1 0 0 0
+c
+d 345 1 0 0 0
+c
+d 634 1 0 0 0
+c
+d 648 1 0 0 1
+c
+d 736 1 0 1 1
+c
+d 306 1 0 0 1
+c
+d 648 1 0 1 1
+c
+d 306 1 0 1 0
+c
+d 267 1 0 1 1
+c
+d 264 1 0 0 1
+c
+d 267 1 1 0 1
+c
+d 753 4 1 0 1
+c
+d 268 1 0 1 0
+c
+d 511 1 1 0 0
+c
+d 538 2 1 0 0
+c
+d 546 1 0 1 0
+c
+d 268 2 0 2 1
+c
+d 269 1 0 0 1
+c
+d 268 3 0 0 0
+c
+d 713 4 2 1 0
+c
+d 316 3 0 0 0
+c
+d 619 1 1 0 1
+c
+d 170 1 0 0 1
+c
+d 242 2 0 0 1
+c
+d 592 6 0 0 1
+c
+d 619 2 0 0 1
+c
+d 593 1 0 1 0
+c
+d 614 1 0 0 0
+c
+d 671 3 1 1 0
+c
+d 537 1 0 0 1
+c
+d 611 1 0 0 1
+c
+d 702 1 1 0 1
+c
+d 712 3 1 0 1
+c
+d 714 1 0 0 1
+c
+d 712 2 2 0 0
+c
+d 651 6 2 0 0
+c
+d 474 3 0 0 1
+c
+d 653 2 0 0 1
+c
+d 471 2 0 0 0
+c
+d 472 1 1 0 0
+c
+d 473 1 0 0 0
+c
+d 474 1 0 0 0
+c
+d 653 2 1 0 0
+c
+d 654 1 0 0 0
+c
+d 584 1 0 0 1
+c
+d 593 1 0 0 1
+c
+d 614 1 0 0 1
+c
+d 628 1 0 0 1
+c
+d 584 1 0 0 0
+c
+d 593 1 0 0 0
+c
+d 614 1 0 0 0
+c
+d 628 5 0 0 0
+c
+d 629 3 0 0 0
+c
+d 271 1 0 0 1
+c
+d 271 1 0 0 1
+c
+d 265 1 0 0 1
+c
+d 265 1 0 0 1
+c
+d 268 1 0 1 1
+c
+d 274 1 0 0 1
+c
+d 2 3 0 0 0
+c
+d 265 1 0 0 0
+c
+d 268 1 0 0 0
+c
+d 274 2 0 0 0
+c
+d 237 1 0 0 1
+c
+d 579 1 0 0 1
+c
+d 580 1 0 0 1
+c
+d 581 3 0 2 1
+c
+d 582 2 0 0 1
+c
+d 581 1 0 0 0
+c
+d 286 5 2 0 0
+c
+d 290 1 0 0 0
+c
+d 76 2 0 0 1
+c
+d 76 2 0 0 1
+c
+d 648 1 0 0 1
+c
+d 693 1 0 0 1
+c
+d 736 1 0 0 1
+c
+d 736 1 0 0 1
+c
+d 693 1 1 0 1
+c
+d 694 2 0 0 1
+c
+d 648 1 0 0 1
+c
+d 693 3 0 0 1
+c
+d 694 2 0 0 1
+c
+d 736 2 0 0 1
+c
+d 76 1 0 0 0
+c
+d 5 2 0 0 1
+c
+d 6 1 0 0 1
+c
+d 15 2 0 0 1
+c
+d 279 1 0 0 1
+c
+d 295 5 0 0 1
+c
+d 5 2 1 0 0
+c
+d 377 1 0 0 1
+c
+d 641 1 0 0 1
+c
+d 53 2 0 0 1
+c
+d 382 1 0 0 1
+c
+d 377 1 1 0 0
+c
+d 641 1 0 1 0
+c
+d 437 1 0 1 0
+c
+d 158 1 0 0 1
+c
+d 193 1 0 0 1
+c
+d 663 3 0 0 1
+c
+d 663 3 1 0 0
+c
+d 446 4 0 0 1
+c
+d 506 1 0 0 1
+c
+d 727 1 0 0 1
+c
+d 506 1 0 0 0
+c
+d 727 1 0 0 0
+c
+d 728 2 0 0 0
+c
+d 275 1 0 0 1
+c
+d 261 1 0 0 1
+c
+d 271 1 0 0 1
+c
+d 275 3 0 0 1
+c
+d 261 1 0 0 0
+c
+d 749 7 1 0 0
+c
+d 490 1 0 0 1
+c
+d 491 4 0 0 1
+c
+d 152 1 0 0 1
+c
+d 160 1 0 0 1
+c
+d 490 1 0 0 1
+c
+d 491 4 1 0 1
+c
+d 510 1 0 0 1
+c
+d 538 1 0 0 1
+c
+d 152 1 0 0 0
+c
+d 160 1 0 0 0
+c
+d 490 1 0 0 0
+c
+d 491 4 1 0 0
+c
+d 510 1 0 0 0
+c
+d 538 1 0 1 0
+c
+d 392 1 0 0 1
+c
+d 740 4 0 0 1
+c
+d 392 1 1 0 0
+c
+d 740 1 0 0 0
+c
+d 286 5 2 0 0
+c
+d 289 1 0 0 0
+c
+d 642 1 1 0 1
+c
+d 698 1 0 1 1
+c
+d 642 1 1 0 0
+c
+d 662 2 0 0 0
+c
+d 265 3 1 0 1
+c
+d 297 1 0 0 1
+c
+d 271 1 0 0 0
+c
+d 272 1 0 1 0
+c
+d 297 2 1 0 0
+c
+d 620 1 0 0 0
+c
+d 358 1 0 0 0
+c
+d 366 2 0 0 0
+c
+d 382 5 1 0 0
+c
+d 383 1 0 0 0
+c
+d 638 1 0 0 0
+c
+d 289 1 0 0 0
+c
+d 474 1 0 0 1
+c
+d 463 1 0 0 1
+c
+d 465 2 0 0 1
+c
+d 474 1 0 0 1
+c
+d 653 1 0 0 1
+c
+d 654 2 0 0 1
+c
+d 688 2 0 0 1
+c
+d 465 2 1 0 0
+c
+d 558 7 2 0 0
+c
+d 4 1 0 0 1
+c
+d 3 2 0 0 1
+c
+d 4 1 0 0 1
+c
+d 14 1 0 0 1
+c
+d 291 1 0 0 1
+c
+d 747 1 0 0 1
+c
+d 748 1 0 0 1
+c
+d 734 1 0 0 1
+c
+d 735 4 0 0 1
+c
+d 385 1 0 0 0
+c
+d 734 1 0 1 0
+c
+d 735 2 1 0 0
+c
+d 268 3 1 0 0
+c
+d 269 1 0 0 0
+c
+d 648 2 1 0 1
+c
+d 306 1 0 1 0
+c
+d 648 1 0 1 0
+c
+d 692 1 0 0 0
+c
+d 411 1 0 1 0
+c
+d 413 1 0 0 0
+c
+d 516 1 1 1 0
+c
+d 397 1 0 1 1
+c
+d 643 2 0 0 1
+c
+d 723 1 0 0 1
+c
+d 397 3 1 0 0
+c
+d 571 2 1 0 0
+c
+d 572 2 1 0 0
+c
+d 585 3 1 1 0
+c
+d 684 1 0 1 0
+c
+d 512 1 0 0 1
+c
+d 513 1 0 0 1
+c
+d 535 1 0 0 1
+c
+d 539 1 0 0 1
+c
+d 713 2 1 0 1
+c
+d 721 3 0 0 1
+c
+d 539 1 1 0 0
+c
+d 268 1 1 0 0
+c
+d 269 6 0 0 0
+c
+d 385 1 1 0 1
+c
+d 409 1 0 0 1
+c
+d 409 2 0 0 0
+c
+d 300 1 1 0 0
+c
+d 301 1 0 0 0
+c
+d 747 4 0 0 0
+c
+d 370 3 1 0 1
+c
+d 369 1 0 0 0
+c
+d 370 2 0 0 0
+c
+d 283 2 0 0 1
+c
+d 747 1 0 1 1
+c
+d 12 1 0 0 1
+c
+d 262 2 0 0 1
+c
+d 266 1 0 0 1
+c
+d 12 1 0 0 1
+c
+d 262 2 0 0 1
+c
+d 266 1 0 0 1
+c
+d 283 2 0 1 1
+c
+d 747 4 1 1 1
+c
+d 12 1 0 0 1
+c
+d 262 3 0 0 1
+c
+d 265 1 0 0 1
+c
+d 266 2 0 0 1
+c
+d 283 2 0 0 1
+c
+d 747 5 0 0 1
+c
+d 262 1 1 0 0
+c
+d 56 1 0 0 1
+c
+d 638 1 0 0 1
+c
+d 695 4 0 0 1
+c
+d 56 1 0 0 1
+c
+d 518 1 0 0 1
+c
+d 638 1 0 0 1
+c
+d 695 4 0 0 1
+c
+d 696 2 0 0 1
+c
+d 697 1 0 0 1
+c
+d 261 1 1 0 0
+c
+d 271 1 1 0 0
+c
+d 20 1 0 0 0
+c
+d 329 1 0 0 0
+c
+d 648 1 0 0 0
+c
+d 692 4 1 0 0
+c
+d 651 5 0 0 0
+c
+d 686 1 0 0 0
+c
+d 259 1 0 0 0
+c
+d 388 3 1 0 0
+c
+d 389 1 0 1 0
+c
+d 646 1 0 1 0
+c
+d 324 3 1 0 0
+c
+d 358 7 2 0 0
+c
+d 743 1 0 0 0
+c
+d 413 3 1 0 0
+c
+d 414 1 0 0 0
+c
+d 478 1 0 0 0
+c
+d 484 1 1 0 0
+c
+d 496 3 0 0 0
+c
+d 372 2 0 0 1
+c
+d 660 1 0 0 1
+c
+d 742 3 0 0 1
+c
+d 372 1 1 0 1
+c
+d 373 1 0 0 1
+c
+d 660 3 1 0 1
+c
+d 531 1 0 0 1
+c
+d 229 1 0 0 0
+c
+d 531 1 0 0 0
+c
+d 532 2 0 0 0
+c
+d 534 1 0 0 0
+c
+d 660 2 0 0 0
+c
+d 685 3 0 0 0
+c
+d 651 2 0 0 0
+c
+d 690 1 1 0 0
+c
+d 691 2 0 0 0
+c
+d 605 1 0 0 0
+c
+d 353 3 0 1 1
+c
+d 354 1 0 0 1
+c
+d 361 1 0 0 1
+c
+d 324 1 0 0 0
+c
+d 353 3 0 0 0
+c
+d 354 2 0 0 0
+c
+d 361 1 0 0 0
+c
+d 366 1 0 0 0
+c
+d 554 1 0 0 1
+c
+d 558 6 1 1 1
+c
+d 558 2 2 0 0
+c
+d 58 1 0 0 0
+c
+d 638 5 0 1 0
+c
+d 642 1 0 0 0
+c
+d 459 1 0 1 0
+c
+d 460 7 1 0 0
+c
+d 345 4 1 0 0
+c
+d 347 2 0 0 0
+c
+d 466 1 0 0 0
+c
+d 431 1 0 0 0
+c
+d 268 3 0 0 0
+c
+d 269 1 0 0 0
+c
+d 698 1 0 0 1
+c
+d 698 2 1 0 0
+c
+d 666 1 0 1 0
+c
+d 540 2 0 0 1
+c
+d 558 1 0 0 1
+c
+d 540 1 0 0 0
+c
+d 558 1 1 0 0
+c
+d 587 1 0 0 0
+c
+d 628 1 0 1 0
+c
+d 630 2 0 0 0
+c
+d 366 4 0 0 0
+c
+d 541 1 1 0 1
+c
+d 710 3 0 1 1
+c
+d 721 1 0 0 1
+c
+d 541 2 0 0 1
+c
+d 543 2 0 0 1
+c
+d 710 6 0 0 1
+c
+d 721 1 0 0 1
+c
+d 710 2 0 0 0
+c
+d 518 1 0 1 0
+c
+d 519 2 0 0 0
+c
+d 738 5 1 0 0
+c
+d 611 1 1 0 0
+c
+d 612 4 0 0 0
+c
+d 702 3 0 0 0
+c
+d 568 2 0 0 0
+c
+d 569 2 1 0 0
+c
+d 570 2 0 0 0
+c
+d 585 3 0 0 0
+c
+d 262 1 0 0 1
+c
+d 3 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 303 1 0 0 0
+c
+d 747 5 0 0 0
+c
+d 329 3 0 0 1
+c
+d 744 1 0 0 1
+c
+d 449 2 0 0 0
+c
+d 518 2 0 1 0
+c
+d 717 2 0 1 0
+c
+d 718 4 1 0 0
+c
+d 632 4 1 0 0
+c
+d 633 1 1 0 0
+c
+d 484 3 0 0 1
+c
+d 656 3 0 0 1
+c
+d 731 4 1 0 1
+c
+d 484 1 0 1 0
+c
+d 731 1 1 0 0
+c
+d 165 1 1 0 1
+c
+d 585 4 1 0 1
+c
+d 586 2 1 0 1
+c
+d 165 1 0 0 0
+c
+d 156 2 0 0 0
+c
+d 157 2 0 0 0
+c
+d 538 1 1 0 0
+c
+d 546 8 1 0 0
+c
+d 541 3 1 0 0
+c
+d 542 1 0 2 0
+c
+d 709 3 0 1 0
+c
+d 528 1 0 0 0
+c
+d 528 2 0 0 1
+c
+d 527 1 0 0 0
+c
+d 528 1 1 0 0
+c
+d 541 2 0 0 0
+c
+d 749 2 0 0 1
+c
+d 302 1 0 0 0
+c
+d 749 3 2 1 0
+c
+d 672 2 0 1 1
+c
+d 673 1 0 0 1
+c
+d 672 1 0 1 0
+c
+d 673 1 1 0 0
+c
+d 398 3 0 0 1
+c
+d 512 1 0 0 1
+c
+d 513 2 1 0 1
+c
+d 136 2 0 0 0
+c
+d 340 3 1 0 0
+c
+d 663 4 2 0 0
+c
+d 309 1 0 0 0
+c
+d 275 1 0 1 1
+c
+d 298 3 1 0 0
+c
+d 299 1 0 1 0
+c
+d 752 1 0 0 1
+c
+d 267 2 1 0 0
+c
+d 754 1 0 0 0
+c
+d 374 1 0 0 1
+c
+d 374 2 0 0 1
+c
+d 467 2 0 0 1
+c
+d 470 1 0 0 1
+c
+d 473 1 0 0 1
+c
+d 567 3 0 0 1
+c
+d 568 2 0 0 1
+c
+d 570 2 0 0 1
+c
+d 585 2 0 0 1
+c
+d 653 2 0 0 1
+c
+d 567 1 1 0 0
+c
+d 518 3 1 0 0
+c
+d 716 1 1 0 0
+c
+d 717 1 0 0 0
+c
+d 718 1 0 0 0
+c
+d 526 4 0 0 1
+c
+d 540 3 0 0 1
+c
+d 544 1 0 0 1
+c
+d 150 2 0 0 0
+c
+d 471 1 0 0 0
+c
+d 460 1 0 0 1
+c
+d 461 1 0 0 1
+c
+d 504 2 0 0 1
+c
+d 505 1 0 0 1
+c
+d 657 5 1 0 1
+c
+d 664 1 0 0 1
+c
+d 460 1 0 0 1
+c
+d 461 1 0 0 1
+c
+d 504 2 0 0 1
+c
+d 505 1 0 0 1
+c
+d 560 1 0 0 1
+c
+d 562 2 0 0 1
+c
+d 657 4 0 0 1
+c
+d 664 1 0 0 1
+c
+d 460 1 0 0 0
+c
+d 461 1 0 0 0
+c
+d 504 2 0 0 0
+c
+d 505 1 0 0 0
+c
+d 560 1 0 0 0
+c
+d 562 3 1 0 0
+c
+d 657 4 1 0 0
+c
+d 664 1 0 1 0
+c
+d 382 1 0 0 1
+c
+d 638 1 0 0 1
+c
+d 640 1 0 0 1
+c
+d 685 2 1 0 1
+c
+d 686 2 0 0 1
+c
+d 687 2 0 0 1
+c
+d 686 3 1 0 0
+c
+d 430 3 1 0 0
+c
+d 431 1 0 1 0
+c
+d 700 1 0 0 0
+c
+d 593 1 0 0 0
+c
+d 596 1 0 0 0
+c
+d 385 1 1 0 1
+c
+d 387 1 0 0 1
+c
+d 411 2 0 0 0
+c
+d 695 1 0 2 0
+c
+d 696 1 1 0 0
+c
+d 55 1 0 0 1
+c
+d 378 1 1 0 1
+c
+d 518 4 0 0 1
+c
+d 638 1 0 0 1
+c
+d 695 1 0 0 1
+c
+d 518 2 1 0 0
+c
+d 490 1 0 0 1
+c
+d 490 4 1 0 0
+c
+d 548 1 1 0 0
+c
+d 549 1 0 1 0
+c
+d 512 2 1 0 1
+c
+d 721 5 2 0 1
+c
+d 721 2 1 1 0
+c
+d 644 5 0 0 0
+c
+d 646 2 1 0 0
+c
+d 372 1 1 0 1
+c
+d 373 5 1 0 1
+c
+d 374 1 0 0 1
+c
+d 475 1 0 0 1
+c
+d 569 2 0 0 1
+c
+d 570 2 0 0 1
+c
+d 372 4 0 0 0
+c
+d 373 6 0 0 0
+c
+d 374 1 0 0 0
+c
+d 475 1 0 0 0
+c
+d 476 1 0 0 0
+c
+d 569 3 0 0 0
+c
+d 570 2 0 0 0
+c
+d 742 1 0 0 0
+c
+d 459 4 2 1 0
+c
+d 571 1 0 0 0
+c
+d 572 3 0 0 0
+c
+d 665 1 0 0 0
+c
+d 684 2 0 0 0
+c
+d 239 1 0 0 1
+c
+d 609 1 0 0 1
+c
+d 607 1 1 0 1
+c
+d 239 1 0 0 1
+c
+d 582 1 0 0 1
+c
+d 606 2 1 0 1
+c
+d 607 1 0 0 1
+c
+d 179 1 1 0 0
+c
+d 725 3 1 0 0
+c
+d 726 1 1 0 0
+c
+d 42 1 0 0 0
+c
+d 319 3 0 0 0
+c
+d 320 1 0 0 0
+c
+d 321 2 0 0 0
+c
+d 356 1 0 0 0
+c
+d 358 3 0 1 0
+c
+d 364 2 0 0 0
+c
+d 173 1 0 0 1
+c
+d 327 1 0 0 1
+c
+d 603 4 0 0 1
+c
+d 603 2 1 0 0
+c
+d 397 4 1 0 0
+c
+d 515 1 0 0 0
+c
+d 643 1 0 0 0
+c
+d 723 1 0 0 0
+c
+d 499 1 0 0 1
+c
+d 503 1 1 0 0
+c
+d 402 1 0 0 1
+c
+d 508 2 0 0 1
+c
+d 643 1 1 0 1
+c
+d 724 1 0 0 1
+c
+d 397 1 0 0 1
+c
+d 396 1 0 0 1
+c
+d 396 1 0 0 0
+c
+d 397 1 0 1 0
+c
+d 402 2 1 0 0
+c
+d 508 1 0 0 0
+c
+d 643 1 0 1 0
+c
+d 739 1 0 0 0
+c
+d 452 3 1 0 0
+c
+d 453 1 0 1 0
+c
+d 494 1 0 0 0
+c
+d 599 1 0 0 0
+c
+d 430 2 0 1 0
+c
+d 431 2 1 0 0
+c
+d 732 2 0 0 0
+c
+d 438 1 0 0 1
+c
+d 106 3 0 0 0
+c
+d 438 1 0 0 0
+c
+d 649 4 0 0 0
+c
+d 650 1 0 0 0
+c
+d 689 4 0 0 0
+c
+d 456 1 0 0 0
+c
+d 522 1 0 0 0
+c
+d 540 1 0 0 0
+c
+d 583 5 1 0 0
+c
+d 436 1 0 0 0
+c
+d 441 3 1 0 0
+c
+d 447 4 1 0 0
+c
+d 448 1 0 0 0
+c
+d 747 1 1 0 1
+c
+d 300 2 0 1 0
+c
+d 301 3 0 0 0
+c
+d 363 1 0 0 1
+c
+d 743 1 0 0 1
+c
+d 360 2 0 0 0
+c
+d 361 4 0 0 0
+c
+d 363 2 0 0 0
+c
+d 743 1 0 0 0
+c
+d 267 2 0 0 0
+c
+d 756 2 1 0 0
+c
+d 320 1 0 0 1
+c
+d 359 3 1 0 1
+c
+d 360 1 1 0 1
+c
+d 637 3 0 0 1
+c
+d 388 3 1 1 0
+c
+d 646 3 0 0 0
+c
+d 344 1 0 0 0
+c
+d 613 2 0 0 1
+c
+d 667 1 0 0 1
+c
+d 613 1 0 0 1
+c
+d 240 2 0 0 1
+c
+d 613 7 1 0 1
+c
+d 667 1 0 0 1
+c
+d 614 1 1 0 0
+c
+d 516 2 1 0 0
+c
+d 517 1 0 0 0
+c
+d 519 1 0 0 0
+c
+d 722 1 0 0 0
+c
+d 396 1 0 0 1
+c
+d 397 2 0 0 1
+c
+d 61 2 0 0 1
+c
+d 199 2 0 0 1
+c
+d 376 3 0 0 1
+c
+d 396 3 0 0 1
+c
+d 397 2 0 0 1
+c
+d 396 1 1 0 0
+c
+d 532 1 1 0 1
+c
+d 685 5 0 0 1
+c
+d 534 1 0 0 0
+c
+d 741 1 0 0 0
+c
+d 315 1 0 0 1
+c
+d 745 1 0 0 1
+c
+d 314 8 0 0 0
+c
+d 315 1 0 0 0
+c
+d 745 1 0 0 0
+c
+d 746 1 0 0 0
+c
+d 279 1 1 0 1
+c
+d 300 1 0 0 1
+c
+d 302 6 0 0 1
+c
+d 300 2 0 0 0
+c
+d 45 1 0 0 0
+c
+d 561 1 0 1 1
+c
+d 611 4 1 0 1
+c
+d 537 2 0 0 0
+c
+d 298 1 0 1 1
+c
+d 299 1 1 0 1
+c
+d 749 3 1 0 1
+c
+d 276 2 0 0 0
+c
+d 749 1 1 0 0
+c
+d 750 1 0 0 0
+c
+d 388 2 1 0 0
+c
+d 108 2 0 0 1
+c
+d 219 1 0 0 1
+c
+d 449 6 1 0 1
+c
+d 450 1 1 0 1
+c
+d 744 1 0 0 1
+c
+d 436 1 0 0 0
+c
+d 176 1 0 0 0
+c
+d 580 1 1 0 0
+c
+d 581 4 0 0 0
+c
+d 482 1 0 0 1
+c
+d 481 1 0 1 0
+c
+d 482 2 0 0 0
+c
+d 307 1 0 0 1
+c
+d 379 1 1 0 1
+c
+d 638 1 0 0 1
+c
+d 699 3 0 0 1
+c
+d 305 1 0 0 0
+c
+d 307 2 0 0 0
+c
+d 379 2 0 0 0
+c
+d 518 1 0 0 0
+c
+d 638 1 0 0 0
+c
+d 699 3 0 0 0
+c
+d 548 1 0 0 0
+c
+d 657 1 1 0 0
+c
+d 663 4 1 0 0
+c
+d 573 1 0 0 1
+c
+d 614 1 0 2 1
+c
+d 631 2 0 1 1
+c
+d 327 1 0 0 1
+c
+d 573 1 0 0 1
+c
+d 614 1 0 0 1
+c
+d 183 1 0 0 1
+c
+d 327 1 0 0 1
+c
+d 573 1 0 0 1
+c
+d 631 1 0 0 1
+c
+d 599 1 0 0 0
+c
+d 651 3 1 0 0
+c
+d 685 1 0 0 0
+c
+d 686 1 0 1 0
+c
+d 403 1 1 0 0
+c
+d 405 2 1 0 0
+c
+d 644 1 0 0 0
+c
+d 646 3 0 0 0
+c
+d 741 6 1 0 0
+c
+d 314 1 0 0 1
+c
+d 315 1 0 0 1
+c
+d 745 3 0 0 1
+c
+d 746 2 0 0 1
+c
+d 315 1 0 0 0
+c
+d 548 1 0 0 0
+c
+d 492 1 1 0 1
+c
+d 489 1 0 0 0
+c
+d 15 1 0 0 1
+c
+d 295 1 0 0 1
+c
+d 747 2 1 0 1
+c
+d 748 5 2 0 1
+c
+d 15 1 0 0 0
+c
+d 295 1 0 0 0
+c
+d 747 4 0 0 0
+c
+d 748 4 0 0 0
+c
+d 272 5 0 1 0
+c
+d 309 1 0 0 1
+c
+d 311 2 0 0 1
+c
+d 312 1 0 0 1
+c
+d 316 3 0 0 1
+c
+d 317 1 0 0 1
+c
+d 312 1 0 0 0
+c
+d 338 3 1 0 1
+c
+d 339 3 0 0 1
+c
+d 340 2 1 0 1
+c
+d 338 1 1 0 0
+c
+d 339 1 1 0 0
+c
+d 515 1 0 0 0
+c
+d 518 7 1 0 0
+c
+d 519 1 0 0 0
+c
+d 759 2 0 0 0
+c
+d 714 1 0 0 1
+c
+d 710 1 1 0 1
+c
+d 712 1 0 0 1
+c
+d 713 1 0 0 1
+c
+d 714 5 1 0 1
+c
+d 540 3 1 0 1
+c
+d 541 2 0 0 1
+c
+d 543 2 0 1 1
+c
+d 710 4 1 0 1
+c
+d 711 1 0 0 1
+c
+d 712 1 0 0 1
+c
+d 713 1 0 0 1
+c
+d 714 4 0 0 1
+c
+d 540 2 0 0 0
+c
+d 541 2 0 0 0
+c
+d 543 2 0 0 0
+c
+d 702 1 0 0 0
+c
+d 710 2 0 0 0
+c
+d 711 1 0 0 0
+c
+d 712 4 0 0 0
+c
+d 713 1 0 0 0
+c
+d 714 4 0 0 0
+c
+d 508 2 0 0 0
+c
+d 725 1 0 0 0
+c
+d 741 6 0 0 0
+c
+d 265 2 0 0 1
+c
+d 747 1 1 0 1
+c
+d 262 2 1 0 0
+c
+d 265 1 0 0 0
+c
+d 274 1 0 0 0
+c
+d 747 2 1 1 0
+c
+d 271 1 0 0 0
+c
+d 273 6 2 0 0
+c
+d 260 1 0 0 1
+c
+d 261 1 0 0 1
+c
+d 260 1 0 0 1
+c
+d 261 1 0 0 1
+c
+d 276 2 1 0 1
+c
+d 276 2 0 0 0
+c
+d 749 5 0 0 0
+c
+d 442 1 0 0 0
+c
+d 632 4 0 0 0
+c
+d 707 6 2 0 0
+c
+d 279 2 1 0 0
+c
+d 281 1 0 0 0
+c
+d 292 1 0 1 0
+c
+d 295 3 0 0 0
+c
+d 561 4 1 0 1
+c
+d 565 1 0 0 1
+c
+d 611 1 0 1 1
+c
+d 612 1 0 0 1
+c
+d 631 1 0 0 1
+c
+d 561 11 0 0 1
+c
+d 565 3 0 0 1
+c
+d 566 2 0 0 1
+c
+d 574 1 0 0 1
+c
+d 611 1 0 0 1
+c
+d 612 1 0 0 1
+c
+d 631 1 0 0 1
+c
+d 705 4 0 0 1
+c
+d 561 2 2 0 0
+c
+d 518 1 1 1 0
+c
+d 446 3 1 0 0
+c
+d 651 3 0 1 0
+c
+d 727 7 1 0 0
+c
+d 728 1 0 0 0
+c
+d 430 2 0 0 0
+c
+d 198 1 1 0 0
+c
+d 376 3 1 1 0
+c
+d 379 4 1 0 0
+c
+d 537 1 1 0 0
+c
+d 538 3 1 0 0
+c
+d 546 1 0 0 0
+c
+d 547 2 1 0 0
+c
+d 707 1 0 0 0
+c
+d 392 1 0 0 1
+c
+d 388 1 0 0 0
+c
+d 389 1 0 0 0
+c
+d 138 2 1 0 1
+c
+d 139 1 0 0 1
+c
+d 140 1 0 0 1
+c
+d 226 3 0 0 1
+c
+d 527 2 1 0 1
+c
+d 541 3 1 0 1
+c
+d 660 1 0 0 1
+c
+d 139 2 1 0 0
+c
+d 452 5 0 0 0
+c
+d 455 3 1 0 0
+c
+d 507 1 1 0 0
+c
+d 659 3 1 0 0
+c
+d 29 1 0 0 0
+c
+d 299 6 0 0 1
+c
+d 298 1 1 0 0
+c
+d 299 1 1 0 0
+c
+d 86 2 0 0 1
+c
+d 87 1 0 0 1
+c
+d 88 1 0 0 1
+c
+d 210 1 0 0 1
+c
+d 423 3 0 0 1
+c
+d 424 1 0 0 1
+c
+d 420 1 0 0 0
+c
+d 572 4 1 0 1
+c
+d 572 2 1 1 0
+c
+d 683 2 1 0 0
+c
+d 579 2 0 0 0
+c
+d 593 2 1 0 0
+c
+d 595 2 0 0 0
+c
+d 403 3 1 0 1
+c
+d 644 1 0 0 1
+c
+d 403 1 1 0 1
+c
+d 656 1 0 1 1
+c
+d 741 2 1 0 1
+c
+d 128 2 0 0 1
+c
+d 129 1 0 0 1
+c
+d 403 3 0 0 1
+c
+d 477 3 0 0 1
+c
+d 484 1 0 0 1
+c
+d 487 1 0 0 1
+c
+d 644 1 0 0 1
+c
+d 655 2 0 0 1
+c
+d 656 1 0 0 1
+c
+d 741 4 0 0 1
+c
+d 129 2 1 0 0
+c
+d 518 1 0 1 1
+c
+d 519 1 0 0 1
+c
+d 134 2 0 0 1
+c
+d 134 1 1 0 0
+c
+d 516 2 0 0 0
+c
+d 518 1 0 1 0
+c
+d 388 2 1 0 1
+c
+d 392 4 0 0 1
+c
+d 393 2 1 0 1
+c
+d 395 1 0 0 1
+c
+d 740 2 0 0 1
+c
+d 392 1 1 0 0
+c
+d 393 1 1 0 0
+c
+d 338 4 1 0 1
+c
+d 339 1 0 0 1
+c
+d 340 1 0 1 1
+c
+d 338 1 1 0 0
+c
+d 339 1 1 0 0
+c
+d 439 1 0 0 0
+c
+d 202 1 0 0 1
+c
+d 414 2 0 0 1
+c
+d 496 1 0 0 1
+c
+d 68 1 0 0 1
+c
+d 496 2 0 0 1
+c
+d 68 1 0 0 1
+c
+d 202 1 0 0 1
+c
+d 414 4 0 0 1
+c
+d 496 3 0 0 1
+c
+d 68 1 0 0 1
+c
+d 202 1 0 0 1
+c
+d 411 1 0 0 1
+c
+d 413 5 0 0 1
+c
+d 414 4 0 0 1
+c
+d 496 3 0 0 1
+c
+d 413 1 0 0 0
+c
+d 70 2 0 0 1
+c
+d 71 1 0 0 1
+c
+d 72 1 0 0 1
+c
+d 414 1 0 0 1
+c
+d 420 1 0 1 1
+c
+d 733 3 0 0 1
+c
+d 733 3 1 0 0
+c
+d 457 1 0 0 0
+c
+d 575 1 0 1 0
+c
+d 63 2 0 0 1
+c
+d 388 2 0 0 1
+c
+d 391 1 0 0 1
+c
+d 407 1 0 0 1
+c
+d 408 3 0 0 1
+c
+d 647 1 0 0 1
+c
+d 304 1 0 0 0
+c
+d 286 1 0 0 0
+c
+d 289 3 1 0 0
+c
+d 749 1 1 0 0
+c
+d 305 1 0 0 0
+c
+d 375 2 0 1 0
+c
+d 379 2 1 0 0
+c
+d 717 3 1 0 0
+c
+d 263 2 0 0 0
+c
+d 754 1 1 0 0
+c
+d 757 2 0 0 0
+c
+d 459 1 0 0 1
+c
+d 562 2 0 0 1
+c
+d 665 3 0 0 1
+c
+d 684 3 1 0 1
+c
+d 161 2 0 0 0
+c
+d 385 1 0 0 1
+c
+d 407 1 0 0 1
+c
+d 409 4 1 0 1
+c
+d 385 1 0 0 0
+c
+d 407 5 0 0 0
+c
+d 409 4 0 0 0
+c
+d 478 1 0 0 0
+c
+d 37 1 1 0 1
+c
+d 43 1 1 0 0
+c
+d 572 1 0 0 1
+c
+d 577 2 0 0 1
+c
+d 600 2 0 0 1
+c
+d 601 1 0 0 1
+c
+d 577 1 0 2 1
+c
+d 572 1 0 1 0
+c
+d 577 2 1 0 0
+c
+d 600 1 1 0 0
+c
+d 397 1 1 0 1
+c
+d 398 3 0 1 1
+c
+d 399 1 0 0 1
+c
+d 398 1 1 0 0
+c
+d 329 2 0 0 1
+c
+d 120 1 0 0 1
+c
+d 117 1 0 0 1
+c
+d 118 2 0 0 1
+c
+d 119 1 0 0 1
+c
+d 120 1 0 0 1
+c
+d 121 1 0 0 1
+c
+d 117 1 0 0 1
+c
+d 118 2 0 0 1
+c
+d 119 1 0 0 1
+c
+d 120 2 0 0 1
+c
+d 121 1 0 0 1
+c
+d 329 2 0 0 1
+c
+d 652 1 0 0 1
+c
+d 117 1 0 0 1
+c
+d 118 2 0 0 1
+c
+d 119 1 0 0 1
+c
+d 120 2 0 0 1
+c
+d 121 1 0 0 1
+c
+d 329 2 0 0 1
+c
+d 652 1 0 0 1
+c
+d 119 2 0 0 1
+c
+d 119 2 0 0 1
+c
+d 117 1 0 0 1
+c
+d 117 1 0 0 1
+c
+d 116 2 0 0 1
+c
+d 114 1 0 0 1
+c
+d 116 2 0 0 1
+c
+d 220 2 0 0 1
+c
+d 456 2 0 0 1
+c
+d 652 4 0 0 1
+c
+d 271 5 0 0 1
+c
+d 271 3 2 1 0
+c
+d 502 1 0 0 1
+c
+d 502 1 0 0 1
+c
+d 657 1 0 0 1
+c
+d 560 3 0 0 1
+c
+d 562 1 0 0 1
+c
+d 657 4 0 0 1
+c
+d 562 1 0 0 0
+c
+d 69 2 0 0 1
+c
+d 416 1 0 0 0
+c
+d 267 4 2 0 0
+c
+d 268 3 1 1 0
+c
+d 436 6 2 0 0
+c
+d 447 1 0 0 0
+c
+d 663 2 0 0 0
+c
+d 540 2 0 0 0
+c
+d 558 5 2 0 0
+c
+d 583 1 0 0 0
+c
+d 385 3 1 0 1
+c
+d 409 2 0 0 1
+c
+d 411 1 1 0 1
+c
+d 412 1 0 1 1
+c
+d 734 2 0 0 1
+c
+d 385 1 1 0 0
+c
+d 409 1 1 0 0
+c
+d 267 2 0 0 1
+c
+d 752 1 0 0 1
+c
+d 752 3 2 1 0
+c
+d 398 3 0 0 1
+c
+d 513 2 1 0 1
+c
+d 514 1 0 1 1
+c
+d 398 3 0 0 0
+c
+d 400 1 0 0 0
+c
+d 508 1 0 0 0
+c
+d 513 2 0 0 0
+c
+d 514 3 0 0 0
+c
+d 725 1 0 0 0
+c
+d 499 1 0 0 0
+c
+d 107 1 0 0 0
+c
+d 436 1 0 0 0
+c
+d 444 1 1 0 0
+c
+d 445 2 1 0 0
+c
+d 447 4 0 0 0
+c
+d 448 1 0 0 0
+c
+d 692 1 1 0 1
+c
+d 328 1 0 0 1
+c
+d 306 1 0 0 0
+c
+d 328 1 0 1 0
+c
+d 276 1 0 0 1
+c
+d 259 1 0 0 1
+c
+d 263 1 0 0 1
+c
+d 264 1 0 0 1
+c
+d 276 2 0 0 1
+c
+d 259 1 0 0 0
+c
+d 494 8 0 0 0
+c
+d 456 1 0 0 0
+c
+d 2 1 0 0 0
+c
+d 265 2 0 0 0
+c
+d 268 3 0 0 0
+c
+d 329 1 1 0 0
+c
+d 648 1 0 0 0
+c
+d 458 4 1 0 1
+c
+d 459 1 0 0 1
+c
+d 463 2 0 0 1
+c
+d 466 1 0 0 1
+c
+d 125 2 0 0 1
+c
+d 458 5 0 0 1
+c
+d 459 7 0 0 1
+c
+d 462 2 0 0 1
+c
+d 463 2 0 0 1
+c
+d 466 2 0 0 1
+c
+d 572 1 0 0 1
+c
+d 684 1 0 0 1
+c
+d 125 1 0 0 0
+c
+d 353 2 0 0 1
+c
+d 361 6 0 0 1
+c
+d 48 2 0 0 0
+c
+d 494 3 1 1 1
+c
+d 496 1 0 0 1
+c
+d 494 2 2 0 0
+c
+d 518 2 0 0 0
+c
+d 127 1 0 0 1
+c
+d 466 1 0 0 1
+c
+d 467 2 0 0 1
+c
+d 468 2 0 0 1
+c
+d 567 1 0 0 1
+c
+d 127 1 0 0 1
+c
+d 463 1 0 0 1
+c
+d 466 1 0 0 1
+c
+d 467 1 1 0 1
+c
+d 468 1 0 0 1
+c
+d 470 2 0 0 1
+c
+d 585 4 0 0 1
+c
+d 484 2 0 0 1
+c
+d 496 1 0 0 1
+c
+d 730 6 1 0 1
+c
+d 484 1 1 0 0
+c
+d 730 1 1 0 0
+c
+d 10 1 1 0 0
+c
+d 11 3 0 0 0
+c
+d 16 2 0 0 0
+c
+d 280 1 0 0 0
+c
+d 282 4 0 0 0
+c
+d 288 2 1 0 0
+c
+d 294 3 1 0 0
+c
+d 738 1 0 0 1
+c
+d 201 1 1 0 1
+c
+d 394 1 0 0 1
+c
+d 389 1 0 0 1
+c
+d 392 1 0 1 1
+c
+d 201 1 0 0 1
+c
+d 304 1 0 0 1
+c
+d 376 1 0 0 1
+c
+d 392 1 0 0 1
+c
+d 738 1 0 0 1
+c
+d 740 1 1 0 1
+c
+d 376 1 0 0 0
+c
+d 499 3 0 0 1
+c
+d 500 4 1 0 1
+c
+d 501 3 0 0 1
+c
+d 657 1 0 0 1
+c
+d 658 1 0 0 1
+c
+d 500 1 1 0 0
+c
+d 501 1 1 0 0
+c
+d 612 1 0 0 0
+c
+d 377 1 0 0 0
+c
+d 381 1 0 0 1
+c
+d 430 1 0 0 1
+c
+d 640 1 1 0 1
+c
+d 641 3 0 1 1
+c
+d 381 2 0 0 1
+c
+d 382 2 0 0 1
+c
+d 430 1 0 0 1
+c
+d 638 1 0 0 1
+c
+d 640 2 0 0 1
+c
+d 641 3 0 0 1
+c
+d 382 2 1 0 0
+c
+d 566 1 0 0 1
+c
+d 599 1 1 0 0
+c
+d 265 1 0 0 0
+c
+d 267 2 0 0 0
+c
+d 651 1 0 0 1
+c
+d 438 2 0 0 1
+c
+d 105 1 0 0 0
+c
+d 438 1 0 0 0
+c
+d 651 1 0 1 0
+c
+d 614 1 0 0 1
+c
+d 671 7 1 0 1
+c
+d 671 2 2 0 0
+c
+d 632 1 1 0 0
+c
+d 633 3 1 0 0
+c
+d 160 2 1 0 0
+c
+d 490 4 1 0 0
+c
+d 491 1 1 0 0
+c
+d 509 1 0 0 0
+c
+d 510 4 1 0 0
+c
+d 741 2 1 0 1
+c
+d 403 3 0 0 0
+c
+d 263 1 0 0 1
+c
+d 264 3 1 0 1
+c
+d 267 2 0 0 1
+c
+d 753 1 0 0 1
+c
+d 276 1 1 0 0
+c
+d 150 1 0 0 1
+c
+d 544 1 0 0 0
+c
+d 286 3 1 0 1
+c
+d 287 2 0 0 1
+c
+d 284 1 1 0 0
+c
+d 285 1 0 1 0
+c
+d 286 1 0 0 0
+c
+d 52 2 0 0 0
+c
+d 379 1 0 0 0
+c
+d 515 1 0 0 0
+c
+d 717 4 0 0 0
+c
+d 644 3 0 0 0
+c
+d 303 1 0 0 1
+c
+d 262 2 1 0 1
+c
+d 265 1 0 0 1
+c
+d 267 1 0 0 1
+c
+d 303 3 0 0 1
+c
+d 262 2 1 0 1
+c
+d 265 1 0 0 1
+c
+d 267 1 0 1 1
+c
+d 303 4 0 1 1
+c
+d 0 1 0 0 0
+c
+d 262 2 0 0 0
+c
+d 265 1 0 0 0
+c
+d 267 1 0 0 0
+c
+d 303 5 0 0 0
+c
+d 468 2 0 0 0
+c
+d 520 1 0 0 1
+c
+d 511 2 1 0 0
+c
+d 537 2 1 0 0
+c
+d 663 2 0 0 0
+c
+d 460 1 1 0 0
+c
+d 478 1 0 0 0
+c
+d 479 1 0 0 0
+c
+d 494 1 1 0 0
+c
+d 729 6 0 0 0
+c
+d 299 5 2 0 0
+c
+d 300 4 0 0 0
+c
+d 708 1 0 0 1
+c
+d 758 2 1 0 1
+c
+d 542 2 0 0 0
+c
+d 708 5 1 1 0
+c
+d 758 1 0 0 0
+c
+d 86 1 0 0 1
+c
+d 87 2 0 0 1
+c
+d 88 2 0 0 1
+c
+d 420 1 0 0 1
+c
+d 421 4 0 0 1
+c
+d 423 1 1 0 1
+c
+d 496 1 0 0 1
+c
+d 420 1 0 1 0
+c
+d 421 1 1 0 0
+c
+d 496 1 0 0 0
+c
+d 306 1 0 0 0
+c
+d 279 4 0 0 1
+c
+d 286 2 0 0 1
+c
+d 287 1 0 0 1
+c
+d 292 1 0 0 1
+c
+d 279 4 0 0 1
+c
+d 286 2 0 0 1
+c
+d 287 1 0 0 1
+c
+d 292 1 0 0 1
+c
+d 284 1 0 0 1
+c
+d 286 2 1 0 1
+c
+d 279 1 0 0 0
+c
+d 284 1 0 0 0
+c
+d 286 3 0 0 0
+c
+d 287 1 0 0 0
+c
+d 291 2 0 0 0
+c
+d 292 2 0 0 0
+c
+d 95 2 1 0 1
+c
+d 428 2 1 0 0
+c
+d 411 1 0 0 0
+c
+d 478 1 0 0 1
+c
+d 479 2 0 1 1
+c
+d 480 2 0 0 1
+c
+d 496 2 1 0 1
+c
+d 479 4 1 0 0
+c
+d 603 3 0 0 0
+c
+d 605 3 0 0 0
+c
+d 609 1 0 0 0
+c
+d 610 1 0 0 0
+c
+d 613 1 0 1 0
+c
+d 518 3 1 0 0
+c
+d 717 1 0 0 0
+c
+d 719 5 0 0 0
+c
+d 611 3 2 0 0
+c
+d 612 2 0 0 0
+c
+d 516 7 0 0 1
+c
+d 698 3 2 0 1
+c
+d 516 2 2 0 0
+c
+d 749 4 1 0 0
+c
+d 751 2 0 0 0
+c
+d 268 5 0 0 1
+c
+d 269 1 0 0 1
+c
+d 268 3 0 0 0
+c
+d 294 1 0 0 1
+c
+d 6 1 0 0 0
+c
+d 279 2 0 0 0
+c
+d 280 1 0 0 0
+c
+d 281 1 0 0 0
+c
+d 294 1 0 0 0
+c
+d 295 5 0 0 0
+c
+d 296 2 0 0 0
+c
+d 136 1 0 0 0
+c
+d 397 4 1 0 0
+c
+d 398 4 1 0 0
+c
+d 399 2 0 0 0
+c
+d 512 3 1 0 0
+c
+d 515 1 0 1 0
+c
+d 643 1 0 0 0
+c
+d 723 1 0 0 0
+c
+d 266 1 0 0 1
+c
+d 272 7 0 0 1
+c
+d 266 1 0 0 0
+c
+d 272 9 1 0 0
+c
+d 74 1 0 0 1
+c
+d 306 1 0 2 0
+c
+d 632 3 0 1 0
+c
+d 707 3 1 1 0
+c
+d 359 1 0 0 0
+c
+d 366 1 1 0 1
+c
+d 369 1 0 0 1
+c
+d 370 6 1 0 1
+c
+d 366 9 0 0 0
+c
+d 369 1 0 0 0
+c
+d 370 5 0 0 0
+c
+d 371 1 0 0 0
+c
+d 483 1 0 0 1
+c
+d 549 3 0 0 1
+c
+d 551 1 0 0 1
+c
+d 551 1 0 0 0
+c
+d 532 1 0 0 0
+c
+d 685 8 2 0 0
+c
+d 112 3 0 0 1
+c
+d 113 2 0 0 1
+c
+d 115 2 0 0 1
+c
+d 117 2 0 0 1
+c
+d 118 2 0 0 1
+c
+d 329 3 0 0 1
+c
+d 330 1 0 0 1
+c
+d 449 1 0 0 1
+c
+d 329 1 1 0 0
+c
+d 247 1 0 0 0
+c
+d 26 1 1 0 0
+c
+d 103 1 0 0 1
+c
+d 104 1 0 0 1
+c
+d 431 2 0 0 1
+c
+d 437 3 1 0 1
+c
+d 440 2 0 0 1
+c
+d 732 2 0 0 1
+c
+d 437 1 1 0 0
+c
+d 82 1 1 0 1
+c
+d 83 1 0 0 1
+c
+d 84 1 1 0 1
+c
+d 648 5 1 0 1
+c
+d 693 3 0 1 1
+c
+d 418 1 1 0 0
+c
+d 313 1 0 0 1
+c
+d 314 5 1 0 1
+c
+d 313 1 1 1 0
+c
+d 314 1 1 0 0
+c
+d 66 3 0 0 1
+c
+d 406 4 1 0 1
+c
+d 409 2 0 0 1
+c
+d 410 1 0 0 1
+c
+d 644 4 0 0 1
+c
+d 645 1 0 0 1
+c
+d 644 1 1 0 0
+c
+d 456 1 0 0 1
+c
+d 445 1 0 0 1
+c
+d 447 4 0 0 1
+c
+d 436 1 0 0 0
+c
+d 447 1 1 0 0
+c
+d 392 1 0 0 0
+c
+d 579 1 0 1 0
+c
+d 584 1 0 0 1
+c
+d 584 2 0 0 0
+c
+d 593 3 0 0 0
+c
+d 595 3 0 0 0
+c
+d 102 1 0 0 0
+c
+d 328 4 0 0 0
+c
+d 425 1 0 0 0
+c
+d 427 1 0 0 0
+c
+d 430 2 0 0 0
+c
+d 431 1 0 0 0
+c
+d 480 1 0 0 1
+c
+d 484 3 0 1 1
+c
+d 496 1 0 0 1
+c
+d 730 2 0 0 1
+c
+d 496 1 0 0 0
+c
+d 508 3 0 0 1
+c
+d 724 5 0 0 1
+c
+d 725 1 0 0 1
+c
+d 741 1 0 1 1
+c
+d 508 3 0 0 1
+c
+d 724 5 0 0 1
+c
+d 725 1 0 0 1
+c
+d 741 1 0 0 1
+c
+d 393 1 0 1 0
+c
+d 508 3 1 0 0
+c
+d 724 5 0 0 0
+c
+d 725 1 0 0 0
+c
+d 739 1 0 1 0
+c
+d 741 1 0 1 0
+c
+d 490 1 0 0 1
+c
+d 128 1 0 0 1
+c
+d 477 6 0 0 1
+c
+d 490 1 0 0 1
+c
+d 655 2 0 0 1
+c
+d 741 1 0 0 1
+c
+d 128 1 0 0 0
+c
+d 238 1 0 0 1
+c
+d 333 5 0 0 1
+c
+d 334 1 0 0 1
+c
+d 605 1 0 0 1
+c
+d 608 1 0 0 1
+c
+d 610 3 0 0 1
+c
+d 331 1 0 0 0
+c
+d 459 1 0 0 1
+c
+d 463 1 0 0 1
+c
+d 494 7 1 0 1
+c
+d 496 1 0 0 1
+c
+d 494 3 2 0 0
+c
+d 145 1 0 0 0
+c
+d 12 1 0 0 1
+c
+d 262 1 0 0 1
+c
+d 12 2 0 0 1
+c
+d 262 2 0 1 1
+c
+d 266 1 0 0 1
+c
+d 278 2 0 0 1
+c
+d 283 1 0 1 1
+c
+d 278 1 0 0 0
+c
+d 299 1 0 1 0
+c
+d 300 1 1 0 0
+c
+d 527 3 0 0 1
+c
+d 528 4 0 0 1
+c
+d 531 3 0 0 1
+c
+d 541 2 0 0 1
+c
+d 531 1 1 0 0
+c
+d 56 1 0 0 1
+c
+d 642 1 0 0 1
+c
+d 695 4 0 0 1
+c
+d 697 2 0 0 1
+c
+d 56 1 0 0 0
+c
+d 518 4 0 0 0
+c
+d 642 1 0 0 0
+c
+d 695 5 0 0 0
+c
+d 696 2 0 0 0
+c
+d 697 3 0 0 0
+c
+d 719 1 0 0 0
+c
+d 324 4 0 0 0
+c
+d 351 2 0 0 0
+c
+d 352 2 1 0 0
+c
+d 354 1 0 0 0
+c
+d 427 7 1 0 1
+c
+d 434 5 0 0 1
+c
+d 435 1 0 0 1
+c
+d 434 2 1 1 0
+c
+d 614 7 0 0 0
+c
+d 671 1 0 0 0
+c
+d 305 1 0 0 0
+c
+d 379 2 0 0 0
+c
+d 518 4 1 1 0
+c
+d 717 2 1 0 0
+c
+d 279 2 1 0 1
+c
+d 8 2 0 0 0
+c
+d 279 3 0 0 0
+c
+d 280 1 0 0 0
+c
+d 281 3 0 0 0
+c
+d 282 1 0 0 0
+c
+d 292 2 0 0 0
+c
+d 293 2 0 0 0
+c
+d 294 1 0 0 0
+c
+d 295 3 0 0 0
+c
+d 353 4 0 0 1
+c
+d 361 1 0 0 1
+c
+d 366 1 0 0 1
+c
+d 367 2 0 0 1
+c
+d 370 3 0 0 1
+c
+d 353 4 0 0 0
+c
+d 361 1 0 0 0
+c
+d 366 4 0 0 0
+c
+d 367 2 0 0 0
+c
+d 370 3 0 0 0
+c
+d 541 4 0 0 1
+c
+d 542 1 0 0 1
+c
+d 709 4 2 0 1
+c
+d 542 1 0 0 0
+c
+d 133 2 0 0 1
+c
+d 453 3 0 0 1
+c
+d 659 1 0 0 1
+c
+d 453 2 1 2 0
+c
+d 134 2 0 0 1
+c
+d 516 2 0 0 1
+c
+d 518 2 0 0 1
+c
+d 519 7 1 0 1
+c
+d 134 2 0 0 0
+c
+d 516 4 0 0 0
+c
+d 517 3 0 0 0
+c
+d 518 2 0 0 0
+c
+d 519 7 0 0 0
+c
+d 642 1 0 0 0
+c
+d 695 2 0 0 0
+c
+d 459 3 0 0 1
+c
+d 562 2 1 0 1
+c
+d 665 3 0 0 1
+c
+d 684 3 0 0 1
+c
+d 161 2 0 0 1
+c
+d 459 6 1 2 1
+c
+d 460 1 0 0 1
+c
+d 684 3 1 0 1
+c
+d 161 1 1 0 0
+c
+d 689 1 0 1 0
+c
+d 224 3 0 0 1
+c
+d 366 5 0 0 1
+c
+d 523 1 0 0 1
+c
+d 530 1 0 0 1
+c
+d 224 3 0 0 0
+c
+d 366 5 0 0 0
+c
+d 523 1 1 0 0
+c
+d 526 1 0 0 0
+c
+d 530 1 1 0 0
+c
+d 540 4 1 0 0
+c
+d 262 2 0 0 1
+c
+d 267 1 0 0 1
+c
+d 284 3 0 0 1
+c
+d 303 4 0 1 1
+c
+d 756 1 0 0 1
+c
+d 303 2 1 0 0
+c
+d 324 1 0 0 1
+c
+d 358 6 1 0 1
+c
+d 366 2 0 0 1
+c
+d 358 3 0 0 0
+c
+d 575 4 1 0 0
+c
+d 576 2 0 1 0
+c
+d 578 2 0 0 0
+c
+d 585 2 1 0 0
+c
+d 385 3 0 0 1
+c
+d 387 3 0 0 1
+c
+d 411 3 1 0 1
+c
+d 413 1 1 0 1
+c
+d 387 1 1 0 0
+c
+d 430 2 0 0 1
+c
+d 431 2 0 0 1
+c
+d 438 1 0 0 1
+c
+d 732 2 0 0 1
+c
+d 430 1 0 0 0
+c
+d 661 2 1 0 0
+c
+d 662 4 0 0 0
+c
+d 685 5 1 0 0
+c
+d 687 1 1 0 0
+c
+d 366 8 3 1 0
+c
+d 530 2 0 0 0
+c
+d 393 1 1 0 0
+c
+d 739 1 0 0 0
+c
+d 516 1 0 0 1
+c
+d 518 2 0 0 1
+c
+d 720 1 0 0 1
+c
+d 721 5 1 1 1
+c
+d 539 1 0 0 0
+c
+d 406 1 0 0 1
+c
+d 409 1 1 0 1
+c
+d 644 1 0 0 1
+c
+d 406 3 1 0 0
+c
+d 644 2 0 1 0
+c
+d 378 1 0 0 1
+c
+d 380 1 0 0 1
+c
+d 695 1 0 0 0
+c
+d 696 1 0 0 0
+c
+d 697 1 0 1 0
+c
+d 309 7 0 1 1
+c
+d 309 2 1 1 0
+c
+d 560 1 0 1 1
+c
+d 561 7 0 0 1
+c
+d 562 1 0 0 1
+c
+d 563 1 0 1 1
+c
+d 705 1 0 0 1
+c
+d 162 1 1 0 0
+c
+d 268 6 1 1 0
+c
+d 269 1 0 0 0
+c
+d 232 2 0 0 0
+c
+d 552 4 0 0 0
+c
+d 561 2 0 0 0
+c
+d 612 1 0 0 0
+c
+d 631 2 0 0 0
+c
+d 704 1 1 0 1
+c
+d 522 1 1 0 0
+c
+d 710 1 0 0 0
+c
+d 713 5 0 0 0
+c
+d 714 2 0 0 0
+c
+d 169 1 0 0 1
+c
+d 186 1 0 0 1
+c
+d 592 1 1 0 1
+c
+d 619 3 1 0 1
+c
+d 621 2 0 0 1
+c
+d 622 5 0 0 1
+c
+d 759 3 0 0 1
+c
+d 592 1 1 0 0
+c
+d 617 1 0 0 1
+c
+d 625 1 0 0 1
+c
+d 626 2 1 0 1
+c
+d 627 2 0 0 1
+c
+d 669 1 0 0 1
+c
+d 671 3 0 1 1
+c
+d 627 1 0 0 0
+c
+d 353 1 0 0 0
+c
+d 358 1 0 0 0
+c
+d 366 5 1 0 0
+c
+d 306 2 0 0 1
+c
+d 692 3 1 0 1
+c
+d 306 3 0 0 0
+c
+d 328 2 0 0 0
+c
+d 329 1 0 0 0
+c
+d 648 1 0 0 0
+c
+d 692 4 0 0 0
+c
+d 430 1 0 0 1
+c
+d 430 1 0 0 1
+c
+d 431 6 0 0 1
+c
+d 433 5 0 0 1
+c
+d 732 2 0 0 1
+c
+d 431 1 1 0 0
+c
+d 433 1 1 0 0
+c
+d 304 1 0 0 1
+c
+d 388 1 0 0 1
+c
+d 389 3 0 0 1
+c
+d 390 3 0 0 1
+c
+d 391 2 0 0 1
+c
+d 201 1 0 0 0
+c
+d 304 2 0 2 0
+c
+d 376 1 0 1 0
+c
+d 388 1 0 0 0
+c
+d 389 4 1 0 0
+c
+d 390 3 1 0 0
+c
+d 391 2 0 0 0
+c
+d 392 2 1 0 0
+c
+d 738 1 0 1 0
+c
+d 740 4 1 0 0
+c
+d 379 2 1 0 0
+c
+d 518 1 0 0 0
+c
+d 717 6 1 0 0
+c
+d 268 2 1 0 1
+c
+d 269 1 0 1 1
+c
+d 271 1 0 0 1
+c
+d 273 2 0 0 1
+c
+d 268 3 1 0 0
+c
+d 271 3 1 0 0
+c
+d 273 1 0 0 0
+c
+d 537 1 0 0 0
+c
+d 663 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 597 3 0 0 0
+c
+d 622 2 1 0 0
+c
+d 623 2 0 0 0
+c
+d 624 4 0 0 0
+c
+d 340 2 0 0 1
+c
+d 345 1 0 1 1
+c
+d 346 3 1 0 1
+c
+d 663 4 0 0 1
+c
+d 346 1 1 0 0
+c
+d 276 1 0 0 1
+c
+d 260 1 0 0 0
+c
+d 747 2 0 1 0
+c
+d 748 2 0 0 0
+c
+d 576 1 0 0 0
+c
+d 181 1 0 0 0
+c
+d 540 2 0 0 1
+c
+d 540 2 0 0 0
+c
+d 558 8 0 0 0
+c
+d 291 1 0 0 0
+c
+d 292 1 0 0 0
+c
+d 748 2 0 0 0
+c
+d 461 1 0 0 0
+c
+d 505 1 0 0 0
+c
+d 657 3 1 0 0
+c
+d 658 1 0 0 0
+c
+d 32 2 0 0 0
+c
+d 35 1 0 0 0
+c
+d 36 2 0 0 0
+c
+d 337 2 0 0 0
+c
+d 345 1 1 0 0
+c
+d 347 1 0 0 0
+c
+d 633 1 0 0 0
+c
+d 370 2 0 0 0
+c
+d 488 1 0 0 0
+c
+d 294 1 0 0 1
+c
+d 302 3 1 0 1
+c
+d 749 5 0 0 1
+c
+d 751 1 0 0 1
+c
+d 302 1 0 1 0
+c
+d 340 1 0 0 0
+c
+d 341 4 1 0 0
+c
+d 634 1 0 0 0
+c
+d 326 2 1 0 1
+c
+d 327 1 0 0 1
+c
+d 580 8 1 0 1
+c
+d 603 1 0 1 1
+c
+d 580 1 1 0 0
+c
+d 622 1 0 1 1
+c
+d 593 2 0 0 0
+c
+d 596 1 0 0 0
+c
+d 622 1 0 0 0
+c
+d 623 3 0 0 0
+c
+d 624 2 0 0 0
+c
+d 625 1 0 0 0
+c
+d 668 2 0 0 0
+c
+d 669 1 0 0 0
+c
+d 670 3 0 0 0
+c
+d 542 3 0 0 1
+c
+d 543 4 1 0 1
+c
+d 758 2 0 0 1
+c
+d 543 1 0 1 0
+c
+d 749 6 0 2 1
+c
+d 749 3 0 0 1
+c
+d 302 1 0 0 1
+c
+d 749 3 0 4 1
+c
+d 302 1 0 0 0
+c
+d 240 2 0 0 1
+c
+d 613 7 1 1 1
+c
+d 614 5 0 0 1
+c
+d 615 1 0 0 1
+c
+d 667 3 1 0 1
+c
+d 671 3 0 0 1
+c
+d 614 2 2 0 0
+c
+d 316 2 1 0 0
+c
+d 317 2 1 0 0
+c
+d 300 6 1 0 0
+c
+d 301 1 0 0 0
+c
+d 747 4 0 0 0
+c
+d 446 4 0 0 1
+c
+d 506 1 0 0 1
+c
+d 507 1 0 0 1
+c
+d 727 1 0 0 1
+c
+d 506 4 1 0 1
+c
+d 727 2 0 1 1
+c
+d 728 2 0 0 1
+c
+d 506 1 1 0 0
+c
+d 80 2 0 0 1
+c
+d 208 1 0 0 1
+c
+d 209 1 0 0 1
+c
+d 420 1 1 0 1
+c
+d 423 5 0 0 1
+c
+d 424 2 0 0 1
+c
+d 72 1 0 0 0
+c
+d 515 2 0 0 1
+c
+d 518 1 0 0 1
+c
+d 717 1 0 0 1
+c
+d 723 3 0 0 1
+c
+d 397 3 1 1 0
+c
+d 515 3 0 1 0
+c
+d 518 1 0 0 0
+c
+d 643 1 0 0 0
+c
+d 717 1 0 0 0
+c
+d 723 5 1 0 0
+c
+d 353 2 0 0 0
+c
+d 556 1 0 0 1
+c
+d 553 1 0 0 0
+c
+d 554 1 0 1 0
+c
+d 528 1 0 0 0
+c
+d 541 1 0 0 0
+c
+d 542 3 0 0 0
+c
+d 543 1 0 0 0
+c
+d 474 1 0 0 0
+c
+d 642 1 0 0 0
+c
+d 695 4 0 0 0
+c
+d 124 2 0 0 0
+c
+d 446 3 1 0 0
+c
+d 451 1 0 0 0
+c
+d 455 1 1 0 0
+c
+d 456 2 0 0 0
+c
+d 651 1 0 0 0
+c
+d 652 1 0 0 0
+c
+d 271 1 0 0 1
+c
+d 297 4 2 0 1
+c
+d 265 2 0 0 0
+c
+d 271 1 0 0 0
+c
+d 272 1 0 0 0
+c
+d 297 8 0 0 0
+c
+d 319 1 0 0 0
+c
+d 579 2 0 0 1
+c
+d 582 2 0 0 1
+c
+d 703 4 0 0 1
+c
+d 703 1 1 0 0
+c
+d 329 1 0 0 0
+c
+d 648 7 2 0 0
+c
+d 42 3 0 0 0
+c
+d 320 3 0 0 0
+c
+d 359 1 0 0 0
+c
+d 360 1 0 0 0
+c
+d 363 3 0 0 0
+c
+d 364 1 0 0 0
+c
+d 271 4 0 0 1
+c
+d 272 3 0 0 1
+c
+d 271 4 1 0 0
+c
+d 267 4 1 1 1
+c
+d 270 4 0 0 1
+c
+d 264 1 0 0 0
+c
+d 267 4 0 0 0
+c
+d 268 1 0 0 0
+c
+d 270 5 0 0 0
+c
+d 753 4 0 0 0
+c
+d 397 3 0 0 0
+c
+d 643 4 1 0 0
+c
+d 723 2 0 0 0
+c
+d 724 1 0 1 0
+c
+d 518 2 0 0 0
+c
+d 716 1 1 0 0
+c
+d 717 3 0 0 0
+c
+d 719 2 0 0 0
+c
+d 511 1 0 0 1
+c
+d 537 1 1 0 1
+c
+d 538 2 0 0 1
+c
+d 546 1 0 0 1
+c
+d 713 1 1 0 1
+c
+d 714 1 0 0 1
+c
+d 511 1 1 0 0
+c
+d 537 1 1 0 0
+c
+d 538 1 0 1 0
+c
+d 136 2 0 0 1
+c
+d 398 3 0 0 1
+c
+d 512 1 0 0 1
+c
+d 513 7 1 0 1
+c
+d 514 1 0 0 1
+c
+d 135 1 0 0 0
+c
+d 136 2 0 0 0
+c
+d 398 3 0 0 0
+c
+d 401 2 0 0 0
+c
+d 509 2 0 0 0
+c
+d 512 1 0 0 0
+c
+d 513 6 0 0 0
+c
+d 514 5 0 0 0
+c
+d 520 1 0 0 0
+c
+d 156 1 0 0 1
+c
+d 546 1 0 0 1
+c
+d 547 5 0 0 1
+c
+d 548 1 1 0 1
+c
+d 632 1 0 0 1
+c
+d 156 1 0 0 0
+c
+d 335 1 0 0 0
+c
+d 490 4 0 0 0
+c
+d 546 1 0 0 0
+c
+d 547 5 0 0 0
+c
+d 548 2 0 0 0
+c
+d 549 2 0 0 0
+c
+d 632 1 0 0 0
+c
+d 663 3 0 0 0
+c
+d 152 2 0 0 0
+c
+d 153 2 0 0 0
+c
+d 510 1 0 0 0
+c
+d 511 2 0 0 0
+c
+d 538 2 0 0 0
+c
+d 546 1 0 0 0
+c
+d 482 1 0 0 0
+c
+d 483 1 0 0 0
+c
+d 263 1 0 0 1
+c
+d 267 4 0 0 1
+c
+d 754 7 0 0 1
+c
+d 755 1 0 0 1
+c
+d 757 1 0 0 1
+c
+d 267 1 0 0 0
+c
+d 754 2 0 0 0
+c
+d 638 3 0 0 0
+c
+d 639 1 0 0 0
+c
+d 115 1 0 0 1
+c
+d 445 1 0 0 0
+c
+d 388 1 0 0 1
+c
+d 644 4 0 0 1
+c
+d 646 4 0 0 1
+c
+d 388 1 1 0 0
+c
+d 437 1 0 0 0
+c
+d 442 2 0 0 0
+c
+d 443 1 0 0 0
+c
+d 444 2 1 0 0
+c
+d 446 1 0 0 0
+c
+d 651 9 2 0 0
+c
+d 726 1 0 0 0
+c
+d 411 5 1 1 0
+c
+d 1 2 0 0 1
+c
+d 264 2 0 0 1
+c
+d 268 3 2 0 1
+c
+d 1 1 1 0 0
+c
+d 286 6 1 0 1
+c
+d 290 1 0 0 1
+c
+d 258 1 1 0 0
+c
+d 518 2 1 1 0
+c
+d 519 4 1 0 0
+c
+d 376 1 1 0 0
+c
+d 522 1 0 1 0
+c
+d 540 4 0 1 0
+c
+d 583 7 1 0 0
+c
+d 378 2 0 1 0
+c
+d 383 4 0 0 0
+c
+d 384 1 0 0 0
+c
+d 638 4 1 0 0
+c
+d 639 2 0 0 0
+c
+d 209 2 0 0 0
+c
+d 562 2 1 1 1
+c
+d 572 2 0 1 1
+c
+d 573 1 0 0 1
+c
+d 665 1 0 0 1
+c
+d 572 3 1 0 0
+c
+d 388 6 0 0 0
+c
+d 646 3 0 0 0
+c
+d 662 3 1 0 1
+c
+d 685 6 0 0 1
+c
+d 661 1 0 0 0
+c
+d 385 6 1 0 1
+c
+d 409 3 2 0 1
+c
+d 411 1 0 0 1
+c
+d 407 2 2 0 0
+c
+d 644 1 0 0 0
+c
+d 542 1 0 0 0
+c
+d 338 1 0 0 1
+c
+d 338 6 0 0 1
+c
+d 342 2 0 0 1
+c
+d 344 1 0 0 1
+c
+d 634 1 0 0 1
+c
+d 338 1 1 0 0
+c
+d 529 1 0 0 1
+c
+d 46 1 0 0 0
+c
+d 475 2 1 0 0
+c
+d 345 2 0 0 0
+c
+d 347 1 0 0 0
+c
+d 633 4 1 0 0
+c
+d 634 1 0 1 0
+c
+d 369 3 1 0 0
+c
+d 370 1 1 0 0
+c
+d 569 3 1 0 0
+c
+d 570 1 0 0 0
+c
+d 537 2 1 0 0
+c
+d 538 2 0 0 0
+c
+d 546 1 0 0 0
+c
+d 547 3 0 0 0
+c
+d 611 4 1 0 0
+c
+d 707 1 0 0 0
+c
+d 712 1 1 0 0
+c
+d 490 2 0 0 0
+c
+d 549 3 1 0 0
+c
+d 706 4 1 0 0
+c
+d 233 1 0 0 0
+c
+d 571 1 0 0 0
+c
+d 572 3 0 0 0
+c
+d 576 2 1 0 0
+c
+d 577 1 0 0 0
+c
+d 578 2 0 0 0
+c
+d 585 1 1 0 0
+c
+d 642 1 0 0 0
+c
+d 695 1 0 0 0
+c
+d 267 3 1 0 1
+c
+d 755 2 0 0 1
+c
+d 756 2 0 0 1
+c
+d 267 3 0 0 0
+c
+d 270 1 0 0 0
+c
+d 752 6 0 0 0
+c
+d 755 2 0 0 0
+c
+d 756 2 0 0 0
+c
+d 537 1 1 0 0
+c
+d 548 1 0 0 0
+c
+d 561 2 1 1 0
+c
+d 562 1 0 0 0
+c
+d 657 2 0 0 0
+c
+d 663 3 1 0 0
+c
+d 307 1 0 0 0
+c
+d 523 1 0 0 1
+c
+d 524 2 0 0 1
+c
+d 526 2 1 0 1
+c
+d 527 1 0 0 1
+c
+d 541 3 0 0 1
+c
+d 709 3 1 0 1
+c
+d 526 1 1 0 0
+c
+d 175 1 0 0 1
+c
+d 577 1 1 0 0
+c
+d 518 3 0 1 0
+c
+d 519 1 0 0 0
+c
+d 715 3 0 0 0
+a
+b 3
+b 4
+b 6
+b 6
+b 4
+b 3
+b 1
+b 6
+b 4
+b 3
+b 1
+b 4
+b 4
+b 3
+b 3
+b 5
+b 7
+b 3
+b 5
+b 7
+b 3
+b 5
+b 3
+b 5
+b 7
+b 3
+b 5
+b 4
+b 2
+b 13
+b 3
+b 10
+b 12
+b 14
+b 4
+b 6
+b 8
+b 3
+b 7
+b 0
+b 2
+b 0
+b 2
+b 7
+b 3
+b 3
+b 0
+b 2
+b 7
+b 3
+b 3
+b 4
+b 4
+b 22
+b 24
+b 0
+b 2
+b 3
+b 8
+b 1
+b 1
+b 8
+b 3
+b 4
+b 1
+b 8
+b 3
+b 4
+b 5
+b 5
+b 0
+b 2
+b 0
+b 2
+b 7
+b 7
+b 3
+b 1
+b 0
+b 2
+b 0
+b 1
+b 6
+b 3
+b 1
+b 3
+b 5
+b 13
+b 2
+b 4
+b 6
+b 8
+b 10
+b 4
+b 2
+b 1
+b 1
+b 13
+b 2
+b 4
+b 6
+b 8
+b 10
+b 12
+b 1
+b 2
+b 13
+b 2
+b 4
+b 6
+b 8
+b 10
+b 12
+b 1
+b 2
+b 15
+b 17
+b 19
+b 3
+b 5
+b 7
+b 3
+b 0
+b 12
+b 73
+b 4
+b 0
+b 0
+b 3
+b 1
+b 9
+b 8
+b 10
+b 18
+b 7
+b 8
+b 10
+b 18
+b 36
+b 36
+b 1
+b 52
+b 12
+b 24
+b 6
+b 4
+b 0
+b 2
+b 7
+b 9
+b 11
+b 4
+b 3
+b 3
+b 5
+b 7
+b 0
+b 2
+b 18
+b 7
+b 0
+b 2
+b 12
+b 0
+b 2
+b 0
+b 1
+b 1
+b 0
+b 2
+b 1
+b 0
+b 0
+b 2
+b 0
+b 2
+b 1
+b 3
+b 0
+b 0
+b 2
+b 1
+b 3
+b 0
+b 16
+b 48
+b 16
+b 1
+b 44
+b 1
+b 0
+b 2
+b 14
+b 1
+b 3
+b 5
+b 7
+b 5
+b 1
+b 12
+b 14
+b 16
+b 18
+b 0
+b 2
+b 20
+b 11
+b 23
+b 10
+b 11
+b 23
+b 11
+b 6
+b 4
+b 1
+b 22
+b 11
+b 22
+b 4
+b 11
+b 22
+b 4
+b 21
+b 21
+b 22
+b 19
+b 1
+b 14
+b 22
+b 0
+b 2
+b 0
+b 2
+b 1
+b 0
+b 2
+b 0
+b 2
+b 1
+b 16
+b 32
+b 0
+b 2
+b 0
+b 2
+b 1
+b 16
+b 32
+b 1
+b 1
+b 9
+b 11
+b 13
+b 15
+b 23
+b 13
+b 1
+b 0
+b 1
+b 1
+b 0
+b 1
+b 15
+b 17
+b 1
+b 0
+b 1
+b 15
+b 17
+b 1
+b 1
+b 0
+b 2
+b 4
+b 0
+b 2
+b 4
+b 1
+b 1
+b 1
+b 0
+b 2
+b 4
+b 1
+b 1
+b 1
+b 3
+b 3
+b 3
+b 3
+b 5
+b 5
+b 3
+b 29
+b 12
+b 4
+b 6
+b 2
+b 4
+b 3
+b 2
+b 4
+b 3
+b 3
+b 2
+b 4
+b 23
+b 25
+b 27
+b 33
+b 22
+b 23
+b 25
+b 27
+b 33
+b 14
+b 0
+b 8
+b 3
+b 47
+b 71
+b 70
+b 1
+b 10
+b 6
+b 55
+b 57
+b 59
+b 61
+b 3
+b 6
+b 6
+b 3
+b 4
+b 6
+b 3
+b 4
+b 7
+b 7
+b 3
+b 5
+b 7
+b 9
+b 0
+b 2
+b 3
+b 5
+b 7
+b 9
+b 3
+b 0
+b 2
+b 3
+b 5
+b 7
+b 9
+b 25
+b 23
+b 1
+b 1
+b 28
+b 30
+b 16
+b 30
+b 16
+b 30
+b 13
+b 1
+b 28
+b 1
+b 31
+b 0
+b 1
+b 2
+b 4
+b 3
+b 11
+b 10
+b 1
+b 1
+b 10
+b 1
+b 10
+b 11
+b 19
+b 1
+b 10
+b 11
+b 19
+b 0
+b 2
+b 0
+b 2
+b 0
+b 2
+b 30
+b 17
+b 3
+b 0
+b 0
+b 2
+b 0
+b 2
+b 3
+b 40
+b 42
+b 44
+b 0
+b 0
+b 2
+b 3
+b 40
+b 42
+b 44
+b 0
+b 0
+b 2
+b 0
+b 2
+b 25
+b 27
+b 29
+b 44
+b 46
+b 48
+b 10
+b 0
+b 2
+b 14
+b 16
+b 0
+b 2
+b 6
+b 1
+b 0
+b 1
+b 1
+b 1
+b 6
+b 1
+b 3
+b 1
+b 6
+b 1
+b 3
+b 29
+b 39
+b 28
+b 1
+b 61
+b 63
+b 69
+b 67
+b 1
+b 4
+b 4
+b 6
+b 24
+b 26
+b 28
+b 26
+b 1
+b 10
+b 10
+b 7
+b 1
+b 6
+b 6
+b 10
+b 8
+b 6
+b 10
+b 8
+b 26
+b 26
+b 5
+b 4
+b 1
+b 1
+b 1
+b 1
+b 1
+b 4
+b 5
+b 1
+b 1
+b 4
+b 5
+b 9
+b 10
+b 4
+b 6
+b 8
+b 10
+b 12
+b 1
+b 4
+b 6
+b 8
+b 10
+b 12
+b 5
+b 13
+b 4
+b 5
+b 13
+b 0
+b 2
+b 12
+b 14
+b 20
+b 8
+b 10
+b 16
+b 9
+b 11
+b 13
+b 0
+b 2
+b 3
+b 0
+b 2
+b 0
+b 2
+b 3
+b 0
+b 2
+b 3
+b 0
+b 2
+b 3
+b 0
+b 2
+b 3
+b 3
+b 3
+b 25
+b 27
+b 4
+b 6
+b 8
+b 4
+b 4
+b 6
+b 8
+b 3
+b 4
+b 4
+b 6
+b 8
+b 3
+b 4
+b 3
+b 4
+b 6
+b 8
+b 13
+b 15
+b 35
+b 16
+b 18
+b 15
+b 16
+b 18
+b 2
+b 4
+b 3
+b 5
+b 1
+b 1
+b 3
+b 5
+b 1
+b 1
+b 3
+b 5
+b 3
+b 1
+b 1
+b 119
+b 127
+b 127
+b 1
+b 20
+b 38
+b 0
+b 2
+b 4
+b 20
+b 17
+b 1
+b 13
+b 18
+b 13
+b 18
+b 13
+b 2
+b 4
+b 2
+b 4
+b 1
+b 53
+b 3
+b 4
+b 4
+b 4
+b 4
+b 9
+b 10
+b 12
+b 0
+b 2
+b 3
+b 2
+b 1
+b 11
+b 11
+b 2
+b 3
+b 11
+b 2
+b 3
+b 0
+b 2
+b 0
+b 2
+b 0
+b 2
+b 0
+b 2
+b 5
+b 21
+b 6
+b 8
+b 14
+b 14
+b 16
+b 14
+b 16
+b 14
+b 1
+b 11
+b 10
+b 22
+b 58
+b 60
+b 7
+b 9
+b 11
+b 6
+b 8
+b 0
+b 6
+b 8
+b 6
+b 0
+b 6
+b 8
+b 6
+b 0
+b 14
+b 0
+b 2
+b 14
+b 15
+b 0
+b 2
+b 25
+b 14
+b 15
+b 0
+b 2
+b 25
+b 14
+b 15
+b 0
+b 2
+b 1
+b 25
+b 14
+b 15
+b 0
+b 2
+b 1
+b 1
+b 0
+b 2
+b 25
+b 14
+b 15
+b 0
+b 2
+b 1
+b 1
+b 3
+b 11
+b 9
+b 1
+b 0
+b 14
+b 13
+b 1
+b 6
+b 3
+b 0
+b 2
+b 0
+b 1
+b 1
+b 43
+b 45
+b 43
+b 1
+b 39
+b 41
+b 43
+b 45
+b 14
+b 12
+b 1
+b 10
+b 12
+b 39
+b 41
+b 43
+b 45
+b 10
+b 12
+b 39
+b 41
+b 43
+b 45
+b 33
+b 35
+b 30
+b 32
+b 33
+b 35
+b 3
+b 5
+b 7
+b 9
+b 12
+b 14
+b 16
+b 12
+b 14
+b 16
+b 17
+b 47
+b 49
+b 51
+b 61
+b 47
+b 1
+b 55
+b 57
+b 59
+b 61
+b 63
+b 2
+b 4
+b 6
+b 22
+b 24
+b 26
+b 28
+b 8
+b 7
+b 1
+b 3
+b 7
+b 5
+b 3
+b 1
+b 1
+b 3
+b 1
+b 3
+b 5
+b 13
+b 11
+b 23
+b 22
+b 1
+b 13
+b 11
+b 23
+b 13
+b 11
+b 23
+b 4
+b 4
+b 11
+b 11
+b 1
+b 2
+b 0
+b 2
+b 3
+b 5
+b 7
+b 5
+b 7
+b 9
+b 11
+b 13
+b 9
+b 1
+b 5
+b 7
+b 9
+b 10
+b 12
+b 1
+b 0
+b 2
+b 1
+b 0
+b 2
+b 3
+b 9
+b 11
+b 5
+b 7
+b 3
+b 3
+b 5
+b 7
+b 9
+b 5
+b 1
+b 12
+b 3
+b 6
+b 8
+b 10
+b 1
+b 9
+b 8
+b 1
+b 1
+b 67
+b 69
+b 12
+b 14
+b 28
+b 10
+b 12
+b 14
+b 16
+b 18
+b 41
+b 10
+b 12
+b 14
+b 16
+b 18
+b 19
+b 3
+b 6
+b 7
+b 12
+b 13
+b 51
+b 1
+b 0
+b 1
+b 51
+b 0
+b 1
+b 12
+b 51
+b 0
+b 1
+b 12
+b 4
+b 6
+b 3
+b 4
+b 6
+b 5
+b 7
+b 5
+b 1
+b 6
+b 5
+b 1
+b 2
+b 6
+b 2
+b 6
+b 2
+b 0
+b 0
+b 3
+b 15
+b 2
+b 1
+b 11
+b 1
+b 3
+b 17
+b 16
+b 1
+b 3
+b 5
+b 3
+b 1
+b 11
+b 11
+b 3
+b 7
+b 3
+b 45
+b 32
+b 34
+b 36
+b 1
+b 0
+b 1
+b 32
+b 34
+b 36
+b 1
+b 32
+b 34
+b 36
+b 1
+b 12
+b 46
+b 11
+b 1
+b 41
+b 1
+b 11
+b 23
+b 10
+b 1
+b 2
+b 22
+b 12
+b 2
+b 22
+b 3
+b 1
+b 15
+b 1
+b 15
+b 4
+b 3
+b 1
+b 15
+b 4
+b 3
+b 3
+b 5
+b 7
+b 3
+b 1
+b 3
+b 4
+b 6
+b 37
+b 5
+b 33
+b 60
+b 3
+b 6
+b 2
+b 0
+b 2
+b 9
+b 11
+b 13
+b 9
+b 5
+b 50
+b 22
+b 38
+b 3
+b 14
+b 16
+b 7
+b 15
+b 27
+b 27
+b 29
+b 31
+b 41
+b 29
+b 1
+b 27
+b 29
+b 30
+b 40
+b 10
+b 4
+b 3
+b 1
+b 10
+b 3
+b 4
+b 53
+b 65
+b 50
+b 1
+b 2
+b 4
+b 1
+b 13
+b 1
+b 2
+b 4
+b 3
+b 5
+b 7
+b 3
+b 3
+b 3
+b 5
+b 7
+b 3
+b 3
+b 3
+b 5
+b 7
+b 3
+b 50
+b 50
+b 9
+b 9
+b 14
+b 16
+b 23
+b 4
+b 9
+b 8
+b 38
+b 40
+b 53
+b 22
+b 32
+b 22
+b 32
+b 19
+b 1
+b 29
+b 1
+b 24
+b 65
+b 67
+b 69
+b 54
+b 56
+b 90
+b 5
+b 1
+b 13
+b 2
+b 1
+b 0
+b 2
+b 17
+b 0
+b 2
+b 16
+b 17
+b 2
+b 1
+b 0
+b 2
+b 16
+b 17
+b 2
+b 1
+b 0
+b 2
+b 0
+b 2
+b 14
+b 16
+b 18
+b 20
+b 18
+b 1
+b 25
+b 27
+b 39
+b 3
+b 5
+b 7
+b 3
+b 5
+b 7
+b 1
+b 2
+b 3
+b 5
+b 7
+b 1
+b 2
+b 3
+b 5
+b 7
+b 0
+b 1
+b 1
+b 1
+b 0
+b 2
+b 7
+b 12
+b 14
+b 11
+b 0
+b 2
+b 24
+b 7
+b 6
+b 2
+b 26
+b 28
+b 30
+b 32
+b 1
+b 26
+b 28
+b 30
+b 32
+b 28
+b 1
+b 38
+b 3
+b 3
+b 18
+b 20
+b 0
+b 18
+b 15
+b 1
+b 2
+b 4
+b 2
+b 4
+b 16
+b 0
+b 2
+b 4
+b 16
+b 0
+b 0
+b 2
+b 1
+b 3
+b 0
+b 2
+b 3
+b 1
+b 1
+b 0
+b 2
+b 3
+b 1
+b 1
+b 3
+b 3
+b 0
+b 2
+b 0
+b 2
+b 10
+b 7
+b 13
+b 6
+b 1
+b 4
+b 9
+b 15
+b 3
+b 3
+b 1
+b 15
+b 3
+b 15
+b 3
+b 1
+b 6
+b 20
+b 0
+b 2
+b 5
+b 1
+b 1
+b 0
+b 2
+b 0
+b 2
+b 5
+b 1
+b 0
+b 2
+b 0
+b 2
+b 5
+b 0
+b 2
+b 0
+b 2
+b 1
+b 1
+b 6
+b 6
+b 17
+b 19
+b 33
+b 17
+b 19
+b 33
+b 17
+b 1
+b 13
+b 21
+b 23
+b 3
+b 21
+b 23
+b 5
+b 3
+b 21
+b 23
+b 5
+b 3
+b 6
+b 8
+b 10
+b 12
+b 11
+b 50
+b 49
+b 1
+b 1
+b 0
+b 2
+b 1
+b 37
+b 43
+b 29
+b 16
+b 25
+b 17
+b 10
+b 5
+b 3
+b 1
+b 25
+b 0
+b 9
+b 11
+b 13
+b 13
+b 35
+b 0
+b 3
+b 5
+b 7
+b 1
+b 3
+b 5
+b 7
+b 9
+b 9
+b 4
+b 3
+b 1
+b 0
+b 2
+b 2
+b 6
+b 8
+b 10
+b 6
+b 1
+b 7
+b 6
+b 7
+b 9
+b 7
+b 9
+b 15
+b 8
+b 3
+b 2
+b 4
+b 6
+b 0
+b 2
+b 3
+b 31
+b 8
+b 2
+b 4
+b 6
+b 0
+b 2
+b 3
+b 31
+b 8
+b 3
+b 3
+b 6
+b 5
+b 1
+b 1
+b 4
+b 11
+b 0
+b 19
+b 0
+b 2
+b 0
+b 2
+b 11
+b 0
+b 19
+b 5
+b 0
+b 2
+b 11
+b 0
+b 19
+b 5
+b 12
+b 4
+b 12
+b 7
+b 9
+b 11
+b 36
+b 4
+b 3
+b 1
+b 36
+b 3
+b 4
+b 2
+b 6
+b 0
+b 2
+b 16
+b 32
+b 1
+b 10
+b 12
+b 2
+b 10
+b 12
+b 2
+b 42
+b 10
+b 12
+b 13
+b 2
+b 42
+b 28
+b 30
+b 32
+b 34
+b 28
+b 1
+b 9
+b 1
+b 26
+b 8
+b 5
+b 1
+b 0
+b 1
+b 1
+b 1
+b 8
+b 5
+b 0
+b 1
+b 1
+b 8
+b 5
+b 0
+b 1
+b 1
+b 3
+b 11
+b 5
+b 19
+b 11
+b 7
+b 5
+b 19
+b 11
+b 7
+b 5
+b 19
+b 6
+b 9
+b 6
+b 12
+b 14
+b 16
+b 18
+b 20
+b 60
+b 3
+b 17
+b 14
+b 1
+b 7
+b 5
+b 19
+b 0
+b 39
+b 3
+b 15
+b 25
+b 14
+b 1
+b 21
+b 1
+b 28
+b 0
+b 2
+b 1
+b 10
+b 1
+b 17
+b 16
+b 1
+b 8
+b 0
+b 5
+b 2
+b 1
+b 4
+b 1
+b 4
+b 0
+b 2
+b 1
+b 4
+b 0
+b 2
+b 3
+b 3
+b 10
+b 3
+b 0
+b 2
+b 0
+b 1
+b 10
+b 9
+b 1
+b 9
+b 20
+b 4
+b 10
+b 0
+b 9
+b 4
+b 20
+b 10
+b 0
+b 9
+b 4
+b 20
+b 0
+b 0
+b 2
+b 2
+b 2
+b 0
+b 0
+b 2
+b 3
+b 3
+b 0
+b 2
+b 0
+b 2
+b 2
+b 0
+b 3
+b 0
+b 2
+b 0
+b 2
+b 2
+b 0
+b 12
+b 12
+b 12
+b 12
+b 1
+b 1
+b 12
+b 11
+b 1
+b 4
+b 11
+b 12
+b 4
+b 1
+b 3
+b 0
+b 2
+b 0
+b 2
+b 3
+b 1
+b 3
+b 0
+b 2
+b 3
+b 1
+b 3
+b 3
+b 3
+b 14
+b 14
+b 6
+b 8
+b 10
+b 21
+b 23
+b 0
+b 2
+b 21
+b 23
+b 0
+b 2
+b 3
+b 4
+b 21
+b 23
+b 0
+b 2
+b 3
+b 7
+b 6
+b 1
+b 3
+b 12
+b 1
+b 3
+b 12
+b 1
+b 7
+b 3
+b 12
+b 1
+b 7
+b 0
+b 2
+b 0
+b 2
+b 3
+b 11
+b 34
+b 31
+b 1
+b 3
+b 11
+b 0
+b 1
+b 26
+b 32
+b 1
+b 9
+b 26
+b 32
+b 18
+b 9
+b 11
+b 0
+b 2
+b 18
+b 12
+b 9
+b 11
+b 0
+b 2
+b 15
+b 17
+b 19
+b 6
+b 18
+b 20
+b 42
+b 39
+b 1
+b 9
+b 3
+b 5
+b 7
+b 28
+b 56
+b 25
+b 0
+b 6
+b 14
+b 16
+b 14
+b 16
+b 17
+b 45
+b 62
+b 45
+b 62
+b 31
+b 15
+b 21
+b 0
+b 2
+b 2
+b 1
+b 0
+b 2
+b 5
+b 7
+b 5
+b 1
+b 4
+b 31
+b 21
+b 46
+b 5
+b 7
+b 9
+b 17
+b 7
+b 9
+b 11
+b 13
+b 7
+b 9
+b 4
+b 1
+b 7
+b 1
+b 10
+b 12
+b 14
+b 11
+b 13
+b 8
+b 0
+b 2
+b 4
+b 4
+b 1
+b 2
+b 4
+b 1
+b 2
+b 4
+b 1
+b 1
+b 1
+b 3
+b 43
+b 2
+b 1
+b 2
+b 3
+b 42
+b 27
+b 37
+b 26
+b 1
+b 2
+b 1
+b 18
+b 24
+b 0
+b 1
+b 21
+b 1
+b 1
+b 16
+b 22
+b 26
+b 28
+b 30
+b 32
+b 34
+b 3
+b 25
+b 17
+b 19
+b 16
+b 17
+b 19
+b 7
+b 39
+b 41
+b 22
+b 18
+b 0
+b 10
+b 30
+b 32
+b 34
+b 38
+b 7
+b 38
+b 39
+b 7
+b 0
+b 2
+b 26
+b 13
+b 11
+b 13
+b 0
+b 2
+b 26
+b 11
+b 13
+b 0
+b 2
+b 26
+b 9
+b 11
+b 13
+b 1
+b 9
+b 11
+b 13
+b 1
+b 0
+b 0
+b 3
+b 21
+b 1
+b 2
+b 4
+b 2
+b 4
+b 8
+b 3
+b 2
+b 4
+b 8
+b 9
+b 5
+b 7
+b 9
+b 11
+b 13
+b 7
+b 9
+b 11
+b 13
+b 7
+b 1
+b 1
+b 3
+b 4
+b 0
+b 2
+b 13
+b 3
+b 5
+b 1
+b 0
+b 2
+b 10
+b 1
+b 11
+b 13
+b 15
+b 17
+b 8
+b 1
+b 15
+b 1
+b 3
+b 5
+b 7
+b 9
+b 10
+b 8
+b 1
+b 3
+b 5
+b 7
+b 9
+b 8
+b 8
+b 3
+b 5
+b 7
+b 9
+b 8
+b 8
+b 4
+b 23
+b 12
+b 4
+b 23
+b 6
+b 0
+b 2
+b 0
+b 2
+b 3
+b 6
+b 0
+b 2
+b 33
+b 43
+b 0
+b 2
+b 3
+b 6
+b 0
+b 2
+b 33
+b 43
+b 0
+b 2
+b 3
+b 3
+b 5
+b 8
+b 0
+b 17
+b 60
+b 59
+b 1
+b 8
+b 10
+b 4
+b 6
+b 8
+b 10
+b 5
+b 43
+b 4
+b 5
+b 43
+b 14
+b 16
+b 18
+b 18
+b 1
+b 6
+b 4
+b 11
+b 13
+b 19
+b 0
+b 2
+b 3
+b 1
+b 0
+b 1
+b 3
+b 0
+b 0
+b 2
+b 1
+b 19
+b 1
+b 3
+b 0
+b 0
+b 2
+b 1
+b 19
+b 1
+b 1
+b 5
+b 23
+b 22
+b 1
+b 2
+b 1
+b 8
+b 2
+b 32
+b 34
+b 32
+b 1
+b 5
+b 6
+b 8
+b 10
+b 6
+b 8
+b 10
+b 11
+b 1
+b 4
+b 7
+b 68
+b 90
+b 65
+b 1
+b 29
+b 41
+b 3
+b 0
+b 1
+b 0
+b 2
+b 4
+b 6
+b 3
+b 3
+b 5
+b 1
+b 11
+b 16
+b 8
+b 9
+b 6
+b 8
+b 1
+b 14
+b 13
+b 1
+b 1
+b 6
+b 8
+b 7
+b 14
+b 1
+b 6
+b 8
+b 7
+b 14
+b 1
+b 1
+b 0
+b 2
+b 0
+b 2
+b 0
+b 2
+b 0
+b 2
+b 1
+b 4
+b 20
+b 1
+b 0
+b 2
+b 0
+b 2
+b 1
+b 4
+b 20
+b 1
+b 1
+b 1
+b 3
+b 3
+b 0
+b 2
+b 46
+b 45
+b 1
+b 16
+b 11
+b 1
+b 11
+b 29
+b 31
+b 33
+b 35
+b 33
+b 1
+b 13
+b 5
+b 15
+b 2
+b 2
+b 1
+b 15
+b 2
+b 0
+b 25
+b 15
+b 2
+b 0
+b 25
+b 11
+b 3
+b 1
+b 4
+b 10
+b 12
+b 14
+b 20
+b 13
+b 12
+b 1
+b 11
+b 13
+b 25
+b 27
+b 29
+b 29
+b 1
+b 12
+b 0
+b 14
+b 5
+b 7
+b 9
+b 8
+b 8
+b 10
+b 22
+b 16
+b 0
+b 8
+b 10
+b 22
+b 2
+b 4
+b 6
+b 8
+b 17
+b 0
+b 2
+b 14
+b 0
+b 2
+b 14
+b 0
+b 2
+b 17
+b 19
+b 0
+b 2
+b 14
+b 0
+b 2
+b 17
+b 19
+b 7
+b 9
+b 17
+b 5
+b 7
+b 9
+b 2
+b 1
+b 7
+b 1
+b 14
+b 16
+b 73
+b 14
+b 12
+b 1
+b 0
+b 2
+b 2
+b 53
+b 53
+b 2
+b 4
+b 6
+b 40
+b 53
+b 2
+b 4
+b 6
+b 40
+b 2
+b 4
+b 6
+b 8
+b 10
+b 10
+b 12
+b 14
+b 14
+b 10
+b 12
+b 14
+b 0
+b 14
+b 10
+b 12
+b 14
+b 12
+b 1
+b 29
+b 0
+b 2
+b 0
+b 29
+b 30
+b 0
+b 2
+b 0
+b 6
+b 1
+b 15
+b 14
+b 1
+b 4
+b 4
+b 6
+b 1
+b 15
+b 37
+b 4
+b 6
+b 1
+b 15
+b 37
+b 10
+b 10
+b 29
+b 26
+b 1
+b 6
+b 8
+b 10
+b 12
+b 14
+b 4
+b 35
+b 0
+b 3
+b 4
+b 35
+b 0
+b 39
+b 0
+b 2
+b 4
+b 12
+b 14
+b 16
+b 11
+b 6
+b 5
+b 7
+b 9
+b 7
+b 1
+b 32
+b 34
+b 36
+b 38
+b 6
+b 8
+b 32
+b 34
+b 36
+b 38
+b 34
+b 1
+b 6
+b 8
+b 32
+b 34
+b 35
+b 37
+b 4
+b 6
+b 8
+b 4
+b 6
+b 8
+b 5
+b 4
+b 4
+b 6
+b 8
+b 5
+b 14
+b 64
+b 11
+b 1
+b 4
+b 3
+b 1
+b 4
+b 24
+b 24
+b 1
+b 1
+b 0
+b 1
+b 15
+b 15
+b 1
+b 1
+b 59
+b 69
+b 83
+b 68
+b 1
+b 79
+b 1
+b 28
+b 30
+b 47
+b 63
+b 21
+b 18
+b 1
+b 3
+b 3
+b 1
+b 19
+b 3
+b 0
+b 2
+b 0
+b 1
+b 3
+b 11
+b 0
+b 1
+b 3
+b 11
+b 0
+b 1
+b 3
+b 11
+b 1
+b 1
+b 3
+b 3
+b 7
+b 9
+b 11
+b 3
+b 8
+b 12
+b 3
+b 0
+b 2
+b 1
+b 139
+b 151
+b 138
+b 1
+b 41
+b 0
+b 2
+b 8
+b 21
+b 18
+b 1
+b 6
+b 32
+b 6
+b 0
+b 2
+b 8
+b 19
+b 32
+b 6
+b 0
+b 2
+b 8
+b 19
+b 16
+b 7
+b 6
+b 1
+b 15
+b 17
+b 29
+b 15
+b 17
+b 18
+b 29
+b 10
+b 0
+b 15
+b 17
+b 18
+b 29
+b 40
+b 42
+b 0
+b 8
+b 3
+b 3
+b 1
+b 8
+b 3
+b 6
+b 8
+b 31
+b 28
+b 13
+b 4
+b 0
+b 2
+b 2
+b 4
+b 0
+b 2
+b 4
+b 4
+b 21
+b 23
+b 25
+b 23
+b 1
+b 21
+b 23
+b 24
+b 31
+b 25
+b 44
+b 1
+b 6
+b 36
+b 11
+b 6
+b 2
+b 4
+b 2
+b 4
+b 6
+b 4
+b 6
+b 2
+b 4
+b 6
+b 4
+b 6
+b 91
+b 93
+b 3
+b 1
+b 9
+b 1
+b 22
+b 30
+b 32
+b 1
+b 3
+b 20
+b 5
+b 2
+b 4
+b 6
+b 14
+b 4
+b 2
+b 5
+b 7
+b 6
+b 1
+b 2
+b 4
+b 6
+b 8
+b 28
+b 36
+b 6
+b 8
+b 28
+b 36
+b 9
+b 5
+b 6
+b 8
+b 28
+b 36
+b 9
+b 4
+b 5
+b 6
+b 8
+b 28
+b 36
+b 9
+b 9
+b 11
+b 13
+b 6
+b 8
+b 10
+b 3
+b 1
+b 4
+b 6
+b 8
+b 10
+b 14
+b 4
+b 6
+b 8
+b 10
+b 14
+b 2
+b 3
+b 5
+b 0
+b 1
+b 9
+b 11
+b 13
+b 37
+b 9
+b 1
+b 1
+b 9
+b 1
+b 1
+b 7
+b 4
+b 2
+b 1
+b 2
+b 1
+b 7
+b 2
+b 1
+b 7
+b 0
+b 2
+b 0
+b 2
+b 40
+b 42
+b 44
+b 40
+b 1
+b 16
+b 18
+b 20
+b 5
+b 4
+b 1
+b 21
+b 23
+b 25
+b 1
+b 21
+b 23
+b 25
+b 1
+b 5
+b 21
+b 23
+b 25
+b 1
+b 5
+b 1
+b 0
+b 2
+b 1
+b 9
+b 17
+b 7
+b 1
+b 3
+b 5
+b 11
+b 3
+b 1
+b 11
+b 3
+b 1
+b 35
+b 3
+b 5
+b 11
+b 3
+b 1
+b 35
+b 3
+b 5
+b 4
+b 16
+b 4
+b 16
+b 2
+b 4
+b 12
+b 2
+b 1
+b 1
+b 1
+b 2
+b 3
+b 11
+b 1
+b 2
+b 3
+b 11
+b 0
+b 2
+b 3
+b 5
+b 13
+b 3
+b 1
+b 6
+b 8
+b 10
+b 0
+b 6
+b 8
+b 10
+b 12
+b 0
+b 2
+b 12
+b 11
+b 1
+b 4
+b 3
+b 11
+b 12
+b 4
+b 22
+b 24
+b 26
+b 28
+b 24
+b 1
+b 14
+b 23
+b 14
+b 3
+b 27
+b 13
+b 14
+b 3
+b 27
+b 13
+b 14
+b 3
+b 27
+b 35
+b 35
+b 6
+b 16
+b 20
+b 39
+b 41
+b 43
+b 45
+b 41
+b 1
+b 15
+b 17
+b 13
+b 25
+b 22
+b 1
+b 1
+b 11
+b 23
+b 1
+b 11
+b 23
+b 1
+b 11
+b 13
+b 13
+b 15
+b 29
+b 6
+b 6
+b 15
+b 28
+b 29
+b 6
+b 15
+b 28
+b 29
+b 8
+b 8
+b 8
+b 8
+b 80
+b 82
+b 84
+b 8
+b 10
+b 8
+b 1
+b 13
+b 0
+b 2
+b 0
+b 2
+b 41
+b 16
+b 14
+b 16
+b 18
+b 31
+b 1
+b 14
+b 16
+b 18
+b 24
+b 21
+b 1
+b 0
+b 4
+b 5
+b 26
+b 1
+b 0
+b 2
+b 16
+b 2
+b 41
+b 40
+b 1
+b 0
+b 4
+b 3
+b 1
+b 5
+b 4
+b 1
+b 1
+b 17
+b 3
+b 4
+b 5
+b 1
+b 17
+b 3
+b 4
+b 5
+b 18
+b 18
+b 3
+b 3
+b 5
+b 5
+b 16
+b 18
+b 28
+b 21
+b 27
+b 29
+b 27
+b 1
+b 1
+b 28
+b 30
+b 6
+b 18
+b 3
+b 3
+b 18
+b 19
+b 3
+b 18
+b 19
+b 3
+b 4
+b 20
+b 3
+b 36
+b 0
+b 2
+b 3
+b 5
+b 3
+b 0
+b 2
+b 14
+b 2
+b 16
+b 18
+b 20
+b 14
+b 11
+b 1
+b 4
+b 1
+b 0
+b 2
+b 3
+b 0
+b 2
+b 0
+b 2
+b 3
+b 0
+b 2
+b 1
+b 12
+b 4
+b 0
+b 2
+b 3
+b 0
+b 2
+b 1
+b 12
+b 4
+b 3
+b 3
+b 5
+b 3
+b 42
+b 44
+b 46
+b 48
+b 42
+b 44
+b 46
+b 48
+b 49
+b 16
+b 22
+b 11
+b 13
+b 1
+b 3
+b 3
+b 1
+b 3
+b 11
+b 13
+b 3
+b 1
+b 3
+b 11
+b 13
+b 6
+b 6
+b 1
+b 1
+b 1
+b 1
+b 6
+b 25
+b 6
+b 7
+b 25
+b 68
+b 70
+b 68
+b 1
+b 0
+b 2
+b 21
+b 2
+b 0
+b 2
+b 1
+b 3
+b 3
+b 2
+b 1
+b 2
+b 1
+b 3
+b 2
+b 1
+b 3
+b 3
+b 3
+b 1
+b 1
+b 16
+b 18
+b 20
+b 16
+b 1
+b 16
+b 17
+b 19
+b 16
+b 17
+b 19
+b 0
+b 2
+b 9
+b 9
+b 3
+b 3
+b 3
+b 3
+b 9
+b 11
+b 9
+b 3
+b 3
+b 9
+b 11
+b 9
+b 10
+b 12
+b 12
+b 1
+b 3
+b 1
+b 9
+b 3
+b 1
+b 2
+b 4
+b 6
+b 3
+b 7
+b 6
+b 1
+b 3
+b 0
+b 43
+b 3
+b 0
+b 1
+b 20
+b 43
+b 3
+b 0
+b 1
+b 20
+b 5
+b 7
+b 9
+b 11
+b 9
+b 1
+b 27
+b 29
+b 31
+b 2
+b 37
+b 5
+b 6
+b 22
+b 4
+b 6
+b 22
+b 16
+b 4
+b 6
+b 22
+b 21
+b 1
+b 1
+b 3
+b 5
+b 3
+b 1
+b 2
+b 4
+b 6
+b 8
+b 18
+b 2
+b 1
+b 9
+b 1
+b 9
+b 6
+b 1
+b 6
+b 8
+b 10
+b 5
+b 6
+b 8
+b 10
+b 4
+b 12
+b 4
+b 31
+b 0
+b 2
+b 1
+b 0
+b 2
+b 31
+b 1
+b 0
+b 2
+b 4
+b 0
+b 2
+b 31
+b 1
+b 0
+b 2
+b 4
+b 5
+b 5
+b 9
+b 9
+b 7
+b 4
+b 1
+b 0
+b 2
+b 0
+b 1
+b 1
+b 5
+b 0
+b 1
+b 1
+b 5
+b 0
+b 1
+b 1
+b 8
+b 10
+b 12
+b 14
+b 8
+b 10
+b 12
+b 14
+b 8
+b 1
+b 3
+b 17
+b 0
+b 8
+b 0
+b 2
+b 8
+b 0
+b 2
+b 2
+b 4
+b 6
+b 17
+b 0
+b 8
+b 0
+b 2
+b 2
+b 4
+b 6
+b 17
+b 0
+b 22
+b 41
+b 47
+b 6
+b 8
+b 16
+b 18
+b 20
+b 34
+b 7
+b 13
+b 0
+b 0
+b 2
+b 0
+b 2
+b 3
+b 1
+b 3
+b 3
+b 1
+b 1
+b 3
+b 1
+b 3
+b 3
+b 1
+b 3
+b 1
+b 3
+b 3
+b 2
+b 2
+b 3
+b 21
+b 2
+b 3
+b 21
+b 0
+b 2
+b 3
+b 21
+b 10
+b 9
+b 1
+b 2
+b 158
+b 10
+b 0
+b 2
+b 158
+b 3
+b 3
+b 3
+b 2
+b 3
+b 3
+b 3
+b 22
+b 2
+b 3
+b 3
+b 3
+b 22
+b 2
+b 5
+b 5
+b 0
+b 2
+b 0
+b 2
+b 1
+b 1
+b 12
+b 14
+b 16
+b 4
+b 6
+b 2
+b 4
+b 6
+b 2
+b 1
+b 2
+b 3
+b 5
+b 3
+b 27
+b 3
+b 4
+b 27
+b 3
+b 5
+b 22
+b 26
+b 28
+b 14
+b 0
+b 2
+b 14
+b 0
+b 2
+b 3
+b 3
+b 16
+b 9
+b 6
+b 1
+b 37
+b 0
+b 7
+b 5
+b 5
+b 0
+b 2
+b 7
+b 5
+b 0
+b 2
+b 7
+b 6
+b 6
+b 24
+b 5
+b 11
+b 36
+b 10
+b 1
+b 1
+b 33
+b 35
+b 37
+b 79
+b 3
+b 12
+b 14
+b 12
+b 1
+b 4
+b 2
+b 3
+b 3
+b 4
+b 17
+b 16
+b 1
+b 1
+b 2
+b 9
+b 3
+b 4
+b 12
+b 14
+b 16
+b 17
+b 1
+b 2
+b 9
+b 3
+b 5
+b 3
+b 1
+b 3
+b 4
+b 33
+b 35
+b 3
+b 4
+b 5
+b 10
+b 12
+b 0
+b 2
+b 0
+b 2
+b 3
+b 1
+b 1
+b 0
+b 2
+b 3
+b 0
+b 2
+b 3
+b 3
+b 1
+b 0
+b 2
+b 3
+b 0
+b 2
+b 3
+b 3
+b 1
+b 1
+b 1
+b 1
+b 2
+b 4
+b 6
+b 8
+b 22
+b 24
+b 33
+b 49
+b 4
+b 1
+b 3
+b 49
+b 1
+b 4
+b 3
+b 49
+b 1
+b 4
+b 5
+b 5
+b 1
+b 1
+b 3
+b 0
+b 2
+b 18
+b 3
+b 7
+b 63
+b 71
+b 83
+b 69
+b 1
+b 11
+b 11
+b 1
+b 8
+b 8
+b 11
+b 8
+b 11
+b 30
+b 46
+b 6
+b 30
+b 46
+b 45
+b 1
+b 0
+b 2
+b 37
+b 1
+b 20
+b 0
+b 2
+b 0
+b 3
+b 3
+b 1
+b 7
+b 0
+b 1
+b 2
+b 1
+b 3
+b 3
+b 1
+b 3
+b 6
+b 3
+b 5
+b 6
+b 3
+b 13
+b 12
+b 1
+b 33
+b 3
+b 3
+b 33
+b 13
+b 3
+b 33
+b 13
+b 1
+b 1
+b 1
+b 1
+b 8
+b 10
+b 4
+b 24
+b 26
+b 28
+b 26
+b 1
+b 7
+b 24
+b 26
+b 27
+b 0
+b 2
+b 4
+b 7
+b 24
+b 26
+b 27
+b 0
+b 5
+b 9
+b 47
+b 49
+b 51
+b 53
+b 31
+b 47
+b 49
+b 51
+b 53
+b 4
+b 12
+b 3
+b 4
+b 12
+b 3
+b 4
+b 12
+b 21
+b 23
+b 3
+b 6
+b 1
+b 6
+b 1
+b 6
+b 6
+b 1
+b 6
+b 0
+b 2
+b 0
+b 2
+b 2
+b 4
+b 2
+b 4
+b 0
+b 2
+b 5
+b 7
+b 7
+b 1
+b 12
+b 2
+b 12
+b 6
+b 2
+b 12
+b 6
+b 3
+b 1
+b 2
+b 13
+b 1
+b 6
+b 50
+b 52
+b 81
+b 91
+b 80
+b 1
+b 4
+b 2
+b 1
+b 2
+b 0
+b 2
+b 0
+b 2
+b 2
+b 4
+b 22
+b 24
+b 26
+b 22
+b 1
+b 18
+b 31
+b 17
+b 18
+b 31
+b 22
+b 24
+b 26
+b 21
+b 22
+b 24
+b 26
+b 3
+b 4
+b 4
+b 3
+b 4
+b 4
+b 3
+b 4
+b 4
+b 4
+b 1
+b 1
+b 11
+b 13
+b 15
+b 15
+b 17
+b 19
+b 21
+b 17
+b 1
+b 38
+b 9
+b 7
+b 10
+b 12
+b 20
+b 7
+b 10
+b 12
+b 13
+b 20
+b 7
+b 10
+b 12
+b 13
+b 3
+b 7
+b 12
+b 5
+b 7
+b 9
+b 11
+b 0
+b 2
+b 15
+b 10
+b 12
+b 14
+b 8
+b 10
+b 12
+b 14
+b 19
+b 3
+b 1
+b 1
+b 1
+b 15
+b 4
+b 15
+b 4
+b 25
+b 1
+b 1
+b 15
+b 4
+b 25
+b 1
+b 1
+b 21
+b 23
+b 1
+b 20
+b 21
+b 23
+b 1
+b 20
+b 21
+b 23
+b 1
+b 1
+b 7
+b 7
+b 15
+b 14
+b 1
+b 5
+b 17
+b 29
+b 28
+b 1
+b 4
+b 4
+b 1
+b 2
+b 27
+b 30
+b 32
+b 0
+b 5
+b 0
+b 6
+b 8
+b 7
+b 13
+b 15
+b 33
+b 43
+b 45
+b 32
+b 1
+b 12
+b 28
+b 1
+b 1
+b 0
+b 2
+b 9
+b 6
+b 1
+b 6
+b 8
+b 3
+b 5
+b 7
+b 9
+b 11
+b 13
+b 1
+b 7
+b 6
+b 8
+b 3
+b 5
+b 7
+b 9
+b 11
+b 13
+b 1
+b 7
+b 6
+b 8
+b 3
+b 5
+b 13
+b 15
+b 22
+b 8
+b 16
+b 24
+b 26
+b 32
+b 39
+b 18
+b 17
+b 1
+b 0
+b 2
+b 1
+b 3
+b 0
+b 3
+b 1
+b 0
+b 2
+b 1
+b 3
+b 0
+b 3
+b 1
+b 0
+b 2
+b 1
+b 3
+b 0
+b 0
+b 2
+b 0
+b 2
+b 1
+b 1
+b 11
+b 10
+b 1
+b 4
+b 6
+b 8
+b 1
+b 0
+b 1
+b 0
+b 2
+b 17
+b 19
+b 17
+b 1
+b 7
+b 7
+b 1
+b 18
+b 11
+b 10
+b 14
+b 20
+b 22
+b 7
+b 10
+b 14
+b 20
+b 22
+b 20
+b 1
+b 3
+b 3
+b 3
+b 3
+b 5
+b 3
+b 3
+b 5
+b 6
+b 5
+b 6
+b 5
+b 8
+b 18
+b 7
+b 8
+b 18
+b 6
+b 8
+b 4
+b 4
+b 11
+b 49
+b 11
+b 2
+b 8
+b 10
+b 0
+b 3
+b 46
+b 1
+b 4
+b 3
+b 0
+b 2
+b 0
+b 2
+b 0
+b 2
+b 0
+b 2
+b 0
+b 2
+b 0
+b 2
+b 3
+b 4
+b 4
+b 0
+b 2
+b 0
+b 2
+b 0
+b 2
+b 3
+b 4
+b 4
+b 3
+b 3
+b 1
+b 3
+b 1
+b 0
+b 1
+b 1
+b 1
+b 3
+b 1
+b 0
+b 2
+b 0
+b 1
+b 1
+b 3
+b 1
+b 0
+b 2
+b 0
+b 3
+b 3
+b 0
+b 2
+b 0
+b 2
+b 3
+b 3
+b 3
+b 0
+b 2
+b 3
+b 1
+b 2
+b 1
+b 0
+b 1
+b 39
+b 1
+b 18
+b 16
+b 1
+b 14
+b 16
+b 39
+b 1
+b 14
+b 16
+b 39
+b 1
+b 0
+b 2
+b 0
+b 2
+b 0
+b 2
+b 3
+b 12
+b 0
+b 2
+b 5
+b 20
+b 3
+b 5
+b 7
+b 0
+b 1
+b 40
+b 3
+b 38
+b 40
+b 3
+b 0
+b 2
+b 38
+b 40
+b 3
+b 0
+b 2
+b 3
+b 15
+b 1
+b 3
+b 61
+b 74
+b 0
+b 3
+b 12
+b 12
+b 18
+b 11
+b 2
+b 2
+b 8
+b 5
+b 7
+b 9
+b 4
+b 5
+b 7
+b 9
+b 4
+b 21
+b 20
+b 1
+b 0
+b 26
+b 53
+b 52
+b 1
+b 15
+b 20
+b 19
+b 1
+b 10
+b 19
+b 20
+b 10
+b 0
+b 2
+b 55
+b 3
+b 3
+b 0
+b 2
+b 3
+b 55
+b 3
+b 0
+b 2
+b 3
+b 55
+b 2
+b 3
+b 0
+b 2
+b 0
+b 2
+b 3
+b 2
+b 1
+b 13
+b 0
+b 2
+b 3
+b 2
+b 1
+b 13
+b 0
+b 2
+b 0
+b 2
+b 4
+b 57
+b 12
+b 8
+b 7
+b 1
+b 30
+b 1
+b 17
+b 38
+b 1
+b 1
+b 78
+b 80
+b 75
+b 1
+b 31
+b 29
+b 1
+b 8
+b 6
+b 35
+b 37
+b 7
+b 41
+b 7
+b 0
+b 41
+b 42
+b 0
+b 2
+b 0
+b 7
+b 0
+b 41
+b 42
+b 0
+b 2
+b 0
+b 7
+b 0
+b 31
+b 33
+b 13
+b 15
+b 35
+b 13
+b 15
+b 16
+b 35
+b 16
+b 18
+b 20
+b 1
+b 11
+b 16
+b 18
+b 20
+b 16
+b 1
+b 5
+b 7
+b 7
+b 1
+b 4
+b 3
+b 1
+b 37
+b 4
+b 3
+b 11
+b 1
+b 1
+b 3
+b 37
+b 11
+b 4
+b 4
+b 1
+b 3
+b 37
+b 11
+b 4
+b 4
+b 5
+b 5
+b 0
+b 2
+b 0
+b 2
+b 3
+b 5
+b 7
+b 9
+b 14
+b 3
+b 0
+b 2
+b 15
+b 37
+b 51
+b 36
+b 1
+b 45
+b 4
+b 21
+b 3
+b 2
+b 18
+b 24
+b 45
+b 47
+b 20
+b 6
+b 12
+b 14
+b 16
+b 13
+b 0
+b 2
+b 0
+b 1
+b 6
+b 6
+b 32
+b 34
+b 36
+b 38
+b 1
+b 1
+b 32
+b 34
+b 36
+b 38
+b 3
+b 1
+b 32
+b 34
+b 36
+b 38
+b 3
+b 35
+b 18
+b 0
+b 35
+b 18
+b 0
+b 25
+b 27
+b 48
+b 8
+b 7
+b 1
+b 19
+b 33
+b 16
+b 1
+b 36
+b 5
+b 10
+b 12
+b 47
+b 9
+b 30
+b 29
+b 1
+b 8
+b 5
+b 7
+b 9
+b 21
+b 3
+b 5
+b 7
+b 9
+b 21
+b 3
+b 5
+b 7
+b 9
+b 21
+b 8
+b 10
+b 8
+b 10
+b 4
+b 10
+b 29
+b 31
+b 46
+b 9
+b 0
+b 2
+b 0
+b 2
+b 3
+b 9
+b 6
+b 0
+b 2
+b 3
+b 9
+b 6
+b 4
+b 1
+b 43
+b 3
+b 1
+b 18
+b 3
+b 1
+b 18
+b 68
+b 3
+b 1
+b 18
+b 68
+b 4
+b 4
+b 20
+b 29
+b 20
+b 29
+b 39
+b 7
+b 6
+b 1
+b 39
+b 7
+b 5
+b 39
+b 7
+b 5
+b 3
+b 3
+b 12
+b 14
+b 16
+b 40
+b 3
+b 2
+b 1
+b 40
+b 2
+b 3
+b 14
+b 3
+b 17
+b 19
+b 21
+b 17
+b 13
+b 6
+b 1
+b 18
+b 5
+b 1
+b 37
+b 10
+b 9
+b 0
+b 2
+b 0
+b 2
+b 0
+b 1
+b 2
+b 4
+b 6
+b 4
+b 0
+b 1
+b 0
+b 2
+b 2
+b 4
+b 6
+b 4
+b 0
+b 1
+b 0
+b 2
+b 2
+b 4
+b 6
+b 4
+b 1
+b 1
+b 140
+b 148
+b 0
+b 2
+b 12
+b 0
+b 1
+b 45
+b 45
+b 0
+b 1
+b 11
+b 45
+b 0
+b 1
+b 11
+b 0
+b 2
+b 4
+b 0
+b 2
+b 43
+b 4
+b 4
+b 6
+b 7
+b 6
+b 1
+b 1
+b 6
+b 1
+b 6
+b 8
+b 7
+b 6
+b 8
+b 10
+b 6
+b 1
+b 8
+b 10
+b 5
+b 1
+b 0
+b 0
+b 6
+b 8
+b 0
+b 2
+b 15
+b 3
+b 6
+b 8
+b 8
+b 7
+b 1
+b 18
+b 1
+b 1
+b 9
+b 8
+b 34
+b 31
+b 1
+b 20
+b 15
+b 17
+b 9
+b 11
+b 1
+b 43
+b 43
+b 1
+b 2
+b 4
+b 43
+b 2
+b 3
+b 4
+b 12
+b 14
+b 2
+b 4
+b 6
+b 8
+b 2
+b 0
+b 2
+b 1
+b 0
+b 2
+b 2
+b 1
+b 0
+b 2
+b 2
+b 59
+b 70
+b 72
+b 74
+b 8
+b 9
+b 59
+b 70
+b 72
+b 74
+b 72
+b 1
+b 3
+b 5
+b 7
+b 9
+b 56
+b 3
+b 5
+b 3
+b 44
+b 0
+b 2
+b 0
+b 2
+b 3
+b 44
+b 3
+b 0
+b 2
+b 3
+b 44
+b 3
+b 53
+b 53
+b 45
+b 12
+b 45
+b 12
+b 31
+b 0
+b 1
+b 3
+b 23
+b 4
+b 3
+b 1
+b 1
+b 1
+b 0
+b 2
+b 3
+b 1
+b 0
+b 2
+b 0
+b 2
+b 1
+b 0
+b 2
+b 1
+b 3
+b 1
+b 3
+b 0
+b 2
+b 1
+b 0
+b 2
+b 1
+b 3
+b 1
+b 3
+b 24
+b 24
+b 3
+b 3
+b 0
+b 2
+b 0
+b 2
+b 3
+b 3
+b 9
+b 32
+b 6
+b 14
+b 24
+b 60
+b 29
+b 31
+b 41
+b 26
+b 1
+b 26
+b 50
+b 0
+b 2
+b 1
+b 26
+b 50
+b 0
+b 2
+b 1
+b 26
+b 50
+b 0
+b 2
+b 3
+b 3
+b 0
+b 1
+b 0
+b 1
+b 5
+b 3
+b 3
+b 4
+b 10
+b 14
+b 2
+b 1
+b 35
+b 0
+b 17
+b 16
+b 1
+b 1
+b 9
+b 33
+b 13
+b 32
+b 33
+b 13
+b 3
+b 5
+b 7
+b 16
+b 24
+b 26
+b 4
+b 20
+b 17
+b 1
+b 26
+b 28
+b 4
+b 4
+b 5
+b 10
+b 5
+b 4
+b 10
+b 5
+b 4
+b 3
+b 5
+b 7
+b 9
+b 4
+b 32
+b 34
+b 36
+b 21
+b 23
+b 25
+b 6
+b 1
+b 1
+b 12
+b 10
+b 1
+b 8
+b 16
+b 14
+b 26
+b 8
+b 1
+b 10
+b 9
+b 11
+b 16
+b 24
+b 26
+b 1
+b 3
+b 0
+b 2
+b 47
+b 14
+b 3
+b 3
+b 12
+b 14
+b 3
+b 12
+b 14
+b 1
+b 5
+b 1
+b 1
+b 1
+b 5
+b 1
+b 1
+b 1
+b 5
+b 1
+b 3
+b 3
+b 6
+b 0
+b 2
+b 0
+b 2
+b 3
+b 43
+b 13
+b 5
+b 7
+b 9
+b 5
+b 7
+b 9
+b 1
+b 4
+b 22
+b 0
+b 2
+b 53
+b 4
+b 22
+b 0
+b 2
+b 10
+b 12
+b 1
+b 0
+b 2
+b 13
+b 15
+b 15
+b 1
+b 4
+b 12
+b 18
+b 4
+b 9
+b 11
+b 12
+b 18
+b 1
+b 4
+b 9
+b 11
+b 12
+b 18
+b 28
+b 30
+b 39
+b 5
+b 15
+b 17
+b 15
+b 1
+b 4
+b 5
+b 15
+b 16
+b 29
+b 4
+b 5
+b 15
+b 16
+b 29
+b 4
+b 1
+b 1
+b 0
+b 65
+b 73
+b 64
+b 1
+b 14
+b 16
+b 18
+b 20
+b 0
+b 2
+b 14
+b 16
+b 18
+b 20
+b 14
+b 1
+b 0
+b 2
+b 1
+b 14
+b 15
+b 17
+b 19
+b 57
+b 81
+b 80
+b 1
+b 6
+b 5
+b 1
+b 6
+b 25
+b 3
+b 6
+b 25
+b 3
+b 6
+b 5
+b 1
+b 35
+b 25
+b 24
+b 1
+b 18
+b 20
+b 30
+b 11
+b 13
+b 15
+b 47
+b 11
+b 13
+b 15
+b 47
+b 0
+b 11
+b 13
+b 15
+b 7
+b 0
+b 3
+b 3
+b 7
+b 0
+b 2
+b 0
+b 3
+b 7
+b 0
+b 2
+b 0
+b 0
+b 2
+b 0
+b 2
+b 11
+b 13
+b 1
+b 0
+b 2
+b 4
+b 4
+b 4
+b 6
+b 12
+b 14
+b 3
+b 1
+b 3
+b 5
+b 3
+b 1
+b 0
+b 2
+b 0
+b 2
+b 4
+b 0
+b 2
+b 5
+b 4
+b 0
+b 2
+b 0
+b 2
+b 5
+b 4
+b 0
+b 2
+b 12
+b 11
+b 1
+b 2
+b 4
+b 12
+b 0
+b 2
+b 4
+b 10
+b 26
+b 6
+b 34
+b 33
+b 1
+b 9
+b 49
+b 10
+b 0
+b 2
+b 9
+b 10
+b 0
+b 2
+b 28
+b 30
+b 40
+b 0
+b 2
+b 8
+b 3
+b 5
+b 2
+b 1
+b 1
+b 15
+b 14
+b 1
+b 11
+b 1
+b 15
+b 11
+b 1
+b 15
+b 11
+b 1
+b 0
+b 2
+b 0
+b 2
+b 12
+b 7
+b 1
+b 22
+b 17
+b 27
+b 22
+b 19
+b 1
+b 17
+b 29
+b 17
+b 14
+b 1
+b 27
+b 2
+b 14
+b 6
+b 8
+b 10
+b 10
+b 36
+b 38
+b 40
+b 6
+b 36
+b 38
+b 40
+b 41
+b 3
+b 6
+b 36
+b 38
+b 40
+b 41
+b 3
+b 3
+b 6
+b 36
+b 38
+b 40
+b 41
+b 14
+b 0
+b 23
+b 7
+b 3
+b 1
+b 0
+b 1
+b 3
+b 0
+b 1
+b 7
+b 15
+b 3
+b 0
+b 1
+b 7
+b 15
+b 0
+b 2
+b 0
+b 2
+b 12
+b 4
+b 19
+b 1
+b 3
+b 0
+b 2
+b 12
+b 14
+b 16
+b 14
+b 4
+b 8
+b 13
+b 1
+b 3
+b 15
+b 3
+b 1
+b 3
+b 15
+b 3
+b 1
+b 3
+b 15
+b 13
+b 13
+b 1
+b 0
+b 2
+b 0
+b 2
+b 35
+b 37
+b 4
+b 28
+b 1
+b 3
+b 5
+b 7
+b 9
+b 3
+b 5
+b 7
+b 9
+b 7
+b 1
+b 2
+b 0
+b 1
+b 0
+b 2
+b 0
+b 2
+b 0
+b 2
+b 2
+b 4
+b 5
+b 0
+b 2
+b 0
+b 2
+b 2
+b 4
+b 5
+b 6
+b 0
+b 2
+b 2
+b 4
+b 5
+b 6
+b 3
+b 1
+b 3
+b 1
+b 1
+b 1
+b 13
+b 15
+b 25
+b 13
+b 15
+b 16
+b 25
+b 1
+b 3
+b 13
+b 15
+b 16
+b 25
+b 1
+b 1
+b 3
+b 13
+b 15
+b 16
+b 25
+b 1
+b 54
+b 51
+b 1
+b 9
+b 0
+b 8
+b 52
+b 9
+b 0
+b 8
+b 52
+b 9
+b 0
+b 5
+b 10
+b 7
+b 1
+b 3
+b 7
+b 2
+b 5
+b 5
+b 3
+b 7
+b 2
+b 14
+b 5
+b 3
+b 7
+b 2
+b 14
+b 1
+b 1
+b 10
+b 12
+b 19
+b 0
+b 11
+b 2
+b 4
+b 6
+b 15
+b 14
+b 1
+b 5
+b 5
+b 4
+b 1
+b 1
+b 4
+b 35
+b 3
+b 3
+b 1
+b 35
+b 3
+b 22
+b 39
+b 2
+b 3
+b 1
+b 20
+b 17
+b 1
+b 4
+b 4
+b 3
+b 1
+b 10
+b 0
+b 2
+b 2
+b 10
+b 0
+b 1
+b 2
+b 10
+b 0
+b 1
+b 1
+b 1
+b 9
+b 11
+b 13
+b 23
+b 20
+b 1
+b 44
+b 1
+b 1
+b 1
+b 44
+b 45
+b 1
+b 1
+b 44
+b 45
+b 1
+b 6
+b 8
+b 10
+b 12
+b 22
+b 13
+b 0
+b 2
+b 2
+b 4
+b 6
+b 0
+b 1
+b 9
+b 24
+b 49
+b 1
+b 3
+b 6
+b 8
+b 10
+b 8
+b 1
+b 9
+b 5
+b 0
+b 2
+b 0
+b 2
+b 18
+b 4
+b 5
+b 9
+b 0
+b 2
+b 18
+b 4
+b 5
+b 9
+b 1
+b 1
+b 3
+b 3
+b 14
+b 16
+b 18
+b 14
+b 1
+b 55
+b 0
+b 2
+b 0
+b 1
+b 0
+b 2
+b 39
+b 8
+b 22
+b 7
+b 34
+b 16
+b 6
+b 21
+b 18
+b 1
+b 19
+b 6
+b 19
+b 6
+b 18
+b 18
+b 28
+b 40
+b 1
+b 11
+b 13
+b 15
+b 15
+b 3
+b 11
+b 13
+b 15
+b 16
+b 15
+b 0
+b 3
+b 11
+b 13
+b 15
+b 16
+b 4
+b 6
+b 8
+b 39
+b 16
+b 40
+b 15
+b 1
+b 35
+b 1
+b 5
+b 7
+b 3
+b 1
+b 8
+b 9
+b 9
+b 11
+b 29
+b 6
+b 1
+b 26
+b 1
+b 7
+b 9
+b 11
+b 21
+b 7
+b 1
+b 3
+b 5
+b 2
+b 2
+b 3
+b 5
+b 6
+b 2
+b 3
+b 5
+b 6
+b 3
+b 3
+b 3
+b 3
+b 8
+b 0
+b 32
+b 32
+b 1
+b 32
+b 40
+b 8
+b 0
+b 32
+b 40
+b 8
+b 0
+b 11
+b 13
+b 15
+b 43
+b 49
+b 16
+b 18
+b 20
+b 22
+b 24
+b 26
+b 28
+b 30
+b 32
+b 24
+b 26
+b 28
+b 30
+b 32
+b 1
+b 3
+b 3
+b 0
+b 1
+b 2
+b 0
+b 1
+b 0
+b 1
+b 0
+b 1
+b 7
+b 1
+b 2
+b 0
+b 0
+b 1
+b 7
+b 1
+b 2
+b 0
+b 18
+b 20
+b 18
+b 1
+b 5
+b 0
+b 4
+b 6
+b 8
+b 10
+b 12
+b 9
+b 11
+b 9
+b 1
+b 4
+b 6
+b 8
+b 10
+b 12
+b 2
+b 4
+b 3
+b 3
+b 5
+b 7
+b 9
+b 2
+b 3
+b 5
+b 7
+b 9
+b 12
+b 14
+b 16
+b 12
+b 1
+b 5
+b 12
+b 13
+b 15
+b 5
+b 2
+b 4
+b 4
+b 1
+b 0
+b 0
+b 1
+b 4
+b 1
+b 0
+b 1
+b 3
+b 4
+b 1
+b 0
+b 1
+b 3
+b 1
+b 0
+b 1
+b 0
+b 1
+b 1
+b 2
+b 15
+b 5
+b 3
+b 1
+b 18
+b 15
+b 18
+b 3
+b 15
+b 18
+b 3
+b 3
+b 40
+b 3
+b 3
+b 40
+b 1
+b 3
+b 3
+b 40
+b 1
+b 3
+b 0
+b 2
+b 0
+b 2
+b 11
+b 17
+b 15
+b 39
+b 53
+b 71
+b 13
+b 3
+b 3
+b 1
+b 2
+b 2
+b 0
+b 3
+b 2
+b 0
+b 2
+b 3
+b 2
+b 0
+b 2
+b 3
+b 2
+b 3
+b 5
+b 1
+b 3
+b 5
+b 1
+b 57
+b 26
+b 25
+b 1
+b 21
+b 16
+b 0
+b 2
+b 13
+b 0
+b 2
+b 1
+b 4
+b 6
+b 27
+b 3
+b 4
+b 9
+b 3
+b 18
+b 31
+b 0
+b 2
+b 17
+b 18
+b 31
+b 9
+b 11
+b 13
+b 22
+b 9
+b 11
+b 13
+b 9
+b 1
+b 22
+b 19
+b 1
+b 9
+b 10
+b 12
+b 3
+b 22
+b 19
+b 1
+b 9
+b 10
+b 12
+b 2
+b 35
+b 1
+b 0
+b 2
+b 1
+b 29
+b 31
+b 32
+b 34
+b 18
+b 8
+b 8
+b 1
+b 23
+b 22
+b 1
+b 14
+b 12
+b 14
+b 16
+b 12
+b 14
+b 16
+b 12
+b 3
+b 2
+b 4
+b 3
+b 2
+b 21
+b 1
+b 6
+b 5
+b 1
+b 6
+b 21
+b 23
+b 25
+b 23
+b 1
+b 1
+b 1
+b 0
+b 2
+b 0
+b 2
+b 13
+b 21
+b 2
+b 26
+b 19
+b 27
+b 29
+b 31
+b 23
+b 75
+b 1
+b 11
+b 9
+b 11
+b 10
+b 4
+b 19
+b 14
+b 4
+b 19
+b 24
+b 12
+b 3
+b 9
+b 24
+b 13
+b 28
+b 52
+b 49
+b 51
+b 4
+b 10
+b 12
+b 14
+b 6
+b 18
+b 40
+b 42
+b 44
+b 40
+b 1
+b 10
+b 12
+b 18
+b 6
+b 1
+b 5
+b 6
+b 1
+b 25
+b 31
+b 24
+b 26
+b 28
+b 24
+b 1
+b 12
+b 20
+b 1
+b 0
+b 1
+b 10
+b 12
+b 3
+b 58
+b 60
+b 75
+b 72
+b 1
+b 30
+b 46
+b 29
+b 1
+b 42
+b 1
+b 22
+b 24
+b 26
+b 24
+b 1
+b 17
+b 22
+b 24
+b 25
+b 6
+b 0
+b 2
+b 0
+b 2
+b 3
+b 1
+b 3
+b 1
+b 19
+b 18
+b 1
+b 5
+b 5
+b 1
+b 19
+b 5
+b 1
+b 19
+b 3
+b 1
+b 3
+b 10
+b 12
+b 14
+b 16
+b 18
+b 16
+b 1
+b 4
+b 0
+b 2
+b 0
+b 1
+b 10
+b 12
+b 14
+b 16
+b 17
+b 4
+b 2
+b 11
+b 11
+b 0
+b 2
+b 11
+b 0
+b 2
+b 1
+b 1
+b 8
+b 6
+b 2
+b 1
+b 9
+b 4
+b 46
+b 50
+b 48
+b 1
+b 83
+b 85
+b 16
+b 9
+b 14
+b 7
+b 14
+b 26
+b 11
+b 1
+b 23
+b 1
+b 4
+b 20
+b 3
+b 4
+b 20
+b 4
+b 2
+b 1
+b 13
+b 1
+b 0
+b 2
+b 13
+b 1
+b 0
+b 2
+b 13
+b 1
+b 3
+b 11
+b 3
+b 11
+b 35
+b 37
+b 8
+b 10
+b 8
+b 4
+b 6
+b 1
+b 0
+b 2
+b 1
+b 5
+b 2
+b 37
+b 36
+b 1
+b 5
+b 3
+b 1
+b 37
+b 3
+b 3
+b 4
+b 10
+b 3
+b 3
+b 6
+b 3
+b 0
+b 2
+b 0
+b 2
+b 3
+b 3
+b 11
+b 17
+b 6
+b 0
+b 2
+b 3
+b 3
+b 11
+b 17
+b 6
+b 0
+b 2
+b 0
+b 2
+b 3
+b 3
+b 1
+b 1
+b 1
+b 13
+b 25
+b 24
+b 1
+b 19
+b 21
+b 23
+b 23
+b 1
+b 1
+b 9
+b 0
+b 22
+b 24
+b 26
+b 22
+b 24
+b 26
+b 5
+b 9
+b 0
+b 2
+b 22
+b 24
+b 26
+b 22
+b 1
+b 5
+b 9
+b 11
+b 0
+b 2
+b 17
+b 3
+b 7
+b 3
+b 17
+b 11
+b 130
+b 6
+b 26
+b 0
+b 2
+b 10
+b 6
+b 18
+b 0
+b 10
+b 4
+b 14
+b 5
+b 1
+b 15
+b 5
+b 15
+b 1
+b 5
+b 15
+b 1
+b 26
+b 40
+b 42
+b 25
+b 1
+b 10
+b 5
+b 3
+b 9
+b 3
+b 5
+b 7
+b 9
+b 3
+b 1
+b 3
+b 4
+b 6
+b 8
+b 10
+b 7
+b 9
+b 11
+b 13
+b 15
+b 7
+b 2
+b 10
+b 3
+b 4
+b 12
+b 3
+b 5
+b 7
+b 9
+b 11
+b 5
+b 1
+b 5
+b 7
+b 2
+b 1
+b 3
+b 5
+b 7
+b 1
+b 3
+b 5
+b 7
+b 11
+b 3
+b 5
+b 5
+b 1
+b 6
+b 3
+b 5
+b 11
+b 6
+b 3
+b 5
+b 11
+b 3
+b 7
+b 16
+b 8
+b 15
+b 16
+b 29
+b 19
+b 0
+b 6
+b 95
+b 42
+b 8
+b 4
+b 4
+b 6
+b 8
+b 8
+b 4
+b 6
+b 8
+b 8
+b 0
+b 2
+b 12
+b 1
+b 5
+b 15
+b 2
+b 4
+b 2
+b 1
+b 1
+b 8
+b 0
+b 0
+b 1
+b 8
+b 0
+b 0
+b 6
+b 1
+b 8
+b 0
+b 0
+b 6
+b 8
+b 18
+b 26
+b 17
+b 1
+b 0
+b 2
+b 2
+b 4
+b 5
+b 0
+b 9
+b 20
+b 18
+b 17
+b 1
+b 4
+b 18
+b 7
+b 0
+b 19
+b 7
+b 9
+b 25
+b 27
+b 11
+b 13
+b 11
+b 1
+b 12
+b 10
+b 1
+b 6
+b 14
+b 13
+b 1
+b 17
+b 0
+b 2
+b 0
+b 1
+b 21
+b 17
+b 21
+b 0
+b 1
+b 17
+b 21
+b 0
+b 1
+b 27
+b 27
+b 22
+b 22
+b 1
+b 6
+b 22
+b 6
+b 22
+b 23
+b 25
+b 6
+b 24
+b 4
+b 0
+b 2
+b 5
+b 7
+b 9
+b 5
+b 1
+b 10
+b 12
+b 14
+b 0
+b 15
+b 28
+b 10
+b 12
+b 14
+b 0
+b 15
+b 120
+b 11
+b 27
+b 25
+b 1
+b 0
+b 2
+b 10
+b 6
+b 8
+b 4
+b 6
+b 1
+b 7
+b 0
+b 2
+b 0
+b 2
+b 0
+b 2
+b 0
+b 2
+b 1
+b 6
+b 7
+b 4
+b 7
+b 0
+b 2
+b 0
+b 2
+b 1
+b 6
+b 7
+b 4
+b 7
+b 6
+b 6
+b 33
+b 2
+b 3
+b 2
+b 47
+b 49
+b 1
+b 9
+b 17
+b 7
+b 1
+b 1
+b 1
+b 1
+b 17
+b 33
+b 35
+b 33
+b 1
+b 6
+b 25
+b 8
+b 10
+b 5
+b 4
+b 1
+b 13
+b 23
+b 15
+b 3
+b 33
+b 35
+b 37
+b 39
+b 37
+b 1
+b 33
+b 35
+b 37
+b 38
+b 47
+b 16
+b 18
+b 20
+b 22
+b 30
+b 32
+b 34
+b 36
+b 38
+b 16
+b 18
+b 20
+b 18
+b 1
+b 21
+b 29
+b 16
+b 18
+b 19
+b 5
+b 21
+b 29
+b 16
+b 18
+b 19
+b 4
+b 17
+b 16
+b 1
+b 3
+b 15
+b 3
+b 15
+b 0
+b 1
+b 12
+b 1
+b 6
+b 1
+b 13
+b 6
+b 59
+b 61
+b 63
+b 65
+b 4
+b 2
+b 1
+b 3
+b 1
+b 58
+b 58
+b 1
+b 5
+b 5
+b 1
+b 36
+b 13
+b 15
+b 0
+b 2
+b 0
+b 2
+b 1
+b 36
+b 13
+b 15
+b 0
+b 2
+b 1
+b 36
+b 13
+b 15
+b 16
+b 16
+b 1
+b 1
+b 41
+b 60
+b 2
+b 41
+b 60
+b 5
+b 3
+b 0
+b 2
+b 0
+b 2
+b 19
+b 27
+b 40
+b 25
+b 1
+b 0
+b 2
+b 63
+b 0
+b 2
+b 8
+b 63
+b 0
+b 2
+b 8
+b 63
+b 47
+b 61
+b 47
+b 61
+b 23
+b 25
+b 27
+b 4
+b 23
+b 25
+b 27
+b 25
+b 1
+b 5
+b 7
+b 9
+b 5
+b 1
+b 1
+b 5
+b 6
+b 8
+b 1
+b 3
+b 5
+b 1
+b 0
+b 2
+b 3
+b 24
+b 5
+b 4
+b 1
+b 2
+b 0
+b 1
+b 10
+b 5
+b 9
+b 0
+b 10
+b 5
+b 9
+b 0
+b 10
+b 5
+b 14
+b 12
+b 1
+b 3
+b 5
+b 2
+b 4
+b 6
+b 11
+b 13
+b 3
+b 35
+b 37
+b 35
+b 1
+b 3
+b 22
+b 3
+b 29
+b 31
+b 33
+b 39
+b 1
+b 3
+b 19
+b 3
+b 3
+b 1
+b 3
+b 11
+b 19
+b 3
+b 1
+b 3
+b 11
+b 19
+b 1
+b 1
+b 0
+b 2
+b 0
+b 2
+b 0
+b 0
+b 3
+b 3
+b 62
+b 74
+b 5
+b 3
+b 1
+b 7
+b 24
+b 23
+b 1
+b 10
+b 18
+b 38
+b 45
+b 4
+b 14
+b 16
+b 1
+b 7
+b 25
+b 25
+b 7
+b 1
+b 2
+b 4
+b 6
+b 8
+b 25
+b 7
+b 1
+b 2
+b 4
+b 6
+b 8
+b 9
+b 5
+b 10
+b 12
+b 4
+b 10
+b 12
+b 13
+b 4
+b 10
+b 12
+b 13
+b 4
+b 3
+b 7
+b 10
+b 12
+b 13
+b 4
+b 3
+b 2
+b 3
+b 1
+b 23
+b 4
+b 28
+b 30
+b 32
+b 34
+b 32
+b 1
+b 7
+b 15
+b 1
+b 3
+b 0
+b 2
+b 0
+b 1
+b 1
+b 1
+b 3
+b 0
+b 1
+b 1
+b 1
+b 3
+b 0
+b 1
+b 1
+b 14
+b 14
+b 10
+b 12
+b 14
+b 9
+b 10
+b 12
+b 14
+b 23
+b 25
+b 27
+b 23
+b 1
+b 15
+b 17
+b 19
+b 21
+b 5
+b 6
+b 34
+b 33
+b 1
+b 4
+b 34
+b 0
+b 2
+b 4
+b 38
+b 18
+b 3
+b 5
+b 7
+b 14
+b 16
+b 18
+b 20
+b 14
+b 1
+b 0
+b 14
+b 15
+b 17
+b 19
+b 0
+b 34
+b 36
+b 38
+b 40
+b 7
+b 3
+b 6
+b 7
+b 3
+b 3
+b 0
+b 2
+b 8
+b 11
+b 1
+b 4
+b 14
+b 3
+b 11
+b 12
+b 1
+b 4
+b 3
+b 14
+b 11
+b 12
+b 1
+b 4
+b 3
+b 14
+b 2
+b 2
+b 0
+b 2
+b 0
+b 2
+b 4
+b 6
+b 8
+b 10
+b 6
+b 1
+b 4
+b 6
+b 7
+b 9
+b 4
+b 6
+b 7
+b 9
+b 0
+b 2
+b 34
+b 33
+b 7
+b 0
+b 10
+b 19
+b 8
+b 2
+b 18
+b 72
+b 9
+b 22
+b 1
+b 22
+b 1
+b 2
+b 5
+b 22
+b 1
+b 2
+b 20
+b 3
+b 5
+b 10
+b 18
+b 20
+b 5
+b 7
+b 9
+b 0
+b 2
+b 6
+b 8
+b 10
+b 12
+b 14
+b 6
+b 8
+b 10
+b 12
+b 14
+b 15
+b 1
+b 24
+b 26
+b 28
+b 30
+b 3
+b 5
+b 7
+b 4
+b 0
+b 2
+b 1
+b 3
+b 0
+b 2
+b 15
+b 0
+b 2
+b 7
+b 13
+b 15
+b 6
+b 16
+b 14
+b 1
+b 12
+b 14
+b 55
+b 57
+b 18
+b 20
+b 22
+b 19
+b 8
+b 5
+b 0
+b 24
+b 4
+b 29
+b 4
+b 29
+b 1
+b 8
+b 10
+b 12
+b 14
+b 46
+b 1
+b 1
+b 58
+b 57
+b 1
+b 2
+b 4
+b 4
+b 2
+b 1
+b 33
+b 41
+b 6
+b 35
+b 2
+b 4
+b 6
+b 35
+b 2
+b 4
+b 6
+b 35
+b 2
+b 4
+b 2
+b 4
+b 0
+b 0
+b 10
+b 12
+b 14
+b 16
+b 8
+b 3
+b 5
+b 8
+b 10
+b 3
+b 5
+b 7
+b 7
+b 7
+b 1
+b 8
+b 8
+b 7
+b 9
+b 8
+b 7
+b 9
+b 15
+b 12
+b 1
+b 15
+b 11
+b 12
+b 1
+b 15
+b 11
+b 12
+b 1
+b 44
+b 61
+b 2
+b 4
+b 6
+b 8
+b 6
+b 3
+b 1
+b 3
+b 2
+b 4
+b 1
+b 9
+b 1
+b 2
+b 4
+b 13
+b 9
+b 1
+b 2
+b 4
+b 13
+b 5
+b 1
+b 11
+b 3
+b 5
+b 35
+b 37
+b 39
+b 0
+b 2
+b 35
+b 37
+b 39
+b 0
+b 2
+b 12
+b 35
+b 37
+b 39
+b 37
+b 1
+b 3
+b 5
+b 7
+b 5
+b 2
+b 3
+b 5
+b 7
+b 2
+b 2
+b 5
+b 99
+b 9
+b 50
+b 56
+b 47
+b 1
+b 22
+b 10
+b 5
+b 4
+b 6
+b 11
+b 13
+b 13
+b 3
+b 1
+b 0
+b 1
+b 2
+b 5
+b 17
+b 1
+b 9
+b 4
+b 21
+b 13
+b 4
+b 0
+b 2
+b 44
+b 0
+b 1
+b 13
+b 12
+b 1
+b 13
+b 11
+b 0
+b 1
+b 43
+b 5
+b 7
+b 9
+b 11
+b 2
+b 4
+b 5
+b 7
+b 9
+b 11
+b 9
+b 1
+b 21
+b 23
+b 32
+b 34
+b 21
+b 23
+b 24
+b 32
+b 34
+b 34
+b 36
+b 38
+b 14
+b 16
+b 18
+b 7
+b 0
+b 2
+b 14
+b 16
+b 18
+b 7
+b 0
+b 2
+b 0
+b 2
+b 14
+b 16
+b 18
+b 7
+b 0
+b 2
+b 0
+b 2
+b 0
+b 2
+b 14
+b 16
+b 18
+b 7
+b 3
+b 0
+b 2
+b 0
+b 2
+b 0
+b 2
+b 14
+b 16
+b 18
+b 7
+b 1
+b 0
+b 2
+b 7
+b 7
+b 3
+b 75
+b 81
+b 16
+b 2
+b 4
+b 1
+b 4
+b 6
+b 17
+b 22
+b 32
+b 47
+b 6
+b 19
+b 6
+b 8
+b 44
+b 0
+b 5
+b 1
+b 5
+b 0
+b 3
+b 0
+b 2
+b 0
+b 1
+b 4
+b 35
+b 9
+b 3
+b 1
+b 1
+b 0
+b 2
+b 0
+b 1
+b 6
+b 7
+b 9
+b 6
+b 3
+b 27
+b 29
+b 31
+b 33
+b 25
+b 1
+b 9
+b 11
+b 13
+b 15
+b 19
+b 1
+b 20
+b 6
+b 3
+b 9
+b 6
+b 5
+b 1
+b 2
+b 10
+b 5
+b 6
+b 2
+b 10
+b 7
+b 3
+b 5
+b 19
+b 26
+b 10
+b 12
+b 14
+b 16
+b 7
+b 1
+b 9
+b 8
+b 10
+b 12
+b 14
+b 16
+b 4
+b 6
+b 8
+b 5
+b 0
+b 4
+b 6
+b 8
+b 5
+b 20
+b 1
+b 8
+b 3
+b 3
+b 5
+b 2
+b 20
+b 22
+b 20
+b 22
+b 5
+b 20
+b 22
+b 20
+b 1
+b 8
+b 5
+b 6
+b 20
+b 4
+b 1
+b 16
+b 1
+b 6
+b 8
+b 2
+b 4
+b 3
+b 6
+b 8
+b 15
+b 17
+b 19
+b 8
+b 5
+b 15
+b 17
+b 29
+b 31
+b 15
+b 17
+b 29
+b 31
+b 17
+b 15
+b 17
+b 29
+b 31
+b 17
+b 13
+b 15
+b 17
+b 29
+b 31
+b 15
+b 1
+b 17
+b 13
+b 12
+b 31
+b 40
+b 58
+b 57
+b 1
+b 40
+b 39
+b 1
+b 12
+b 9
+b 1
+b 37
+b 39
+b 41
+b 137
+b 139
+b 141
+b 16
+b 15
+b 1
+b 1
+b 0
+b 2
+b 0
+b 0
+b 2
+b 3
+b 3
+b 0
+b 2
+b 0
+b 2
+b 3
+b 35
+b 37
+b 39
+b 16
+b 0
+b 35
+b 37
+b 39
+b 3
+b 2
+b 1
+b 8
+b 1
+b 9
+b 22
+b 7
+b 24
+b 21
+b 1
+b 0
+b 2
+b 0
+b 2
+b 0
+b 2
+b 6
+b 3
+b 0
+b 1
+b 4
+b 6
+b 1
+b 1
+b 4
+b 6
+b 1
+b 9
+b 0
+b 2
+b 0
+b 2
+b 3
+b 106
+b 120
+b 105
+b 1
+b 115
+b 1
+b 34
+b 36
+b 20
+b 16
+b 8
+b 10
+b 12
+b 14
+b 0
+b 12
+b 14
+b 9
+b 7
+b 1
+b 0
+b 0
+b 12
+b 14
+b 12
+b 1
+b 18
+b 26
+b 3
+b 9
+b 8
+b 1
+b 7
+b 4
+b 1
+b 25
+b 27
+b 29
+b 27
+b 1
+b 1
+b 4
+b 19
+b 0
+b 2
+b 3
+b 19
+b 20
+b 4
+b 0
+b 2
+b 3
+b 19
+b 20
+b 4
+b 0
+b 2
+b 3
+b 6
+b 5
+b 1
+b 14
+b 13
+b 1
+b 6
+b 0
+b 14
+b 12
+b 15
+b 17
+b 12
+b 15
+b 16
+b 17
+b 12
+b 15
+b 16
+b 17
+b 1
+b 12
+b 11
+b 1
+b 13
+b 1
+b 12
+b 14
+b 3
+b 8
+b 7
+b 1
+b 6
+b 2
+b 3
+b 2
+b 3
+b 5
+b 7
+b 8
+b 7
+b 1
+b 6
+b 4
+b 1
+b 3
+b 2
+b 3
+b 5
+b 7
+b 8
+b 4
+b 1
+b 4
+b 0
+b 2
+b 0
+b 2
+b 18
+b 15
+b 3
+b 5
+b 7
+b 9
+b 3
+b 5
+b 7
+b 9
+b 3
+b 1
+b 2
+b 3
+b 4
+b 6
+b 8
+b 2
+b 3
+b 3
+b 4
+b 6
+b 8
+b 2
+b 16
+b 5
+b 27
+b 6
+b 17
+b 3
+b 14
+b 16
+b 18
+b 20
+b 8
+b 16
+b 14
+b 16
+b 18
+b 20
+b 23
+b 25
+b 27
+b 29
+b 31
+b 3
+b 23
+b 25
+b 27
+b 29
+b 31
+b 27
+b 1
+b 26
+b 34
+b 12
+b 11
+b 1
+b 21
+b 20
+b 1
+b 1
+b 3
+b 3
+b 1
+b 5
+b 5
+b 4
+b 1
+b 4
+b 3
+b 3
+b 1
+b 1
+b 3
+b 23
+b 1
+b 0
+b 5
+b 3
+b 0
+b 6
+b 5
+b 1
+b 3
+b 4
+b 2
+b 1
+b 5
+b 0
+b 6
+b 2
+b 3
+b 5
+b 0
+b 19
+b 21
+b 23
+b 19
+b 1
+b 3
+b 12
+b 20
+b 1
+b 10
+b 42
+b 44
+b 8
+b 10
+b 42
+b 44
+b 46
+b 13
+b 15
+b 17
+b 10
+b 1
+b 8
+b 10
+b 20
+b 2
+b 10
+b 5
+b 2
+b 10
+b 6
+b 1
+b 10
+b 15
+b 17
+b 19
+b 21
+b 23
+b 4
+b 10
+b 9
+b 5
+b 13
+b 11
+b 60
+b 75
+b 7
+b 6
+b 1
+b 4
+b 4
+b 60
+b 75
+b 7
+b 4
+b 60
+b 75
+b 7
+b 6
+b 6
+b 31
+b 47
+b 31
+b 47
+b 3
+b 5
+b 7
+b 3
+b 3
+b 1
+b 4
+b 4
+b 3
+b 4
+b 3
+b 0
+b 2
+b 1
+b 0
+b 2
+b 4
+b 3
+b 3
+b 0
+b 2
+b 1
+b 0
+b 2
+b 0
+b 2
+b 4
+b 6
+b 3
+b 0
+b 2
+b 1
+b 0
+b 2
+b 0
+b 2
+b 4
+b 6
+b 1
+b 1
+b 3
+b 11
+b 15
+b 28
+b 30
+b 32
+b 5
+b 32
+b 18
+b 12
+b 7
+b 3
+b 27
+b 26
+b 1
+b 6
+b 8
+b 0
+b 16
+b 24
+b 43
+b 27
+b 29
+b 31
+b 33
+b 35
+b 27
+b 27
+b 29
+b 31
+b 33
+b 35
+b 1
+b 27
+b 27
+b 29
+b 31
+b 33
+b 35
+b 6
+b 8
+b 10
+b 3
+b 1
+b 8
+b 1
+b 23
+b 25
+b 27
+b 18
+b 20
+b 5
+b 18
+b 20
+b 8
+b 16
+b 5
+b 7
+b 22
+b 40
+b 23
+b 0
+b 18
+b 17
+b 1
+b 3
+b 9
+b 25
+b 27
+b 63
+b 62
+b 1
+b 9
+b 16
+b 71
+b 5
+b 2
+b 1
+b 1
+b 0
+b 1
+b 27
+b 29
+b 31
+b 33
+b 35
+b 51
+b 53
+b 55
+b 57
+b 55
+b 1
+b 51
+b 53
+b 55
+b 56
+b 65
+b 3
+b 3
+b 5
+b 18
+b 38
+b 43
+b 45
+b 3
+b 43
+b 45
+b 43
+b 1
+b 7
+b 10
+b 19
+b 11
+b 12
+b 22
+b 28
+b 11
+b 1
+b 16
+b 18
+b 26
+b 16
+b 18
+b 6
+b 8
+b 10
+b 12
+b 2
+b 4
+b 6
+b 17
+b 2
+b 4
+b 6
+b 9
+b 11
+b 13
+b 20
+b 22
+b 24
+b 22
+b 1
+b 20
+b 22
+b 23
+b 34
+b 8
+b 0
+b 2
+b 0
+b 1
+b 23
+b 11
+b 3
+b 1
+b 9
+b 1
+b 1
+b 2
+b 4
+b 17
+b 19
+b 25
+b 2
+b 1
+b 3
+b 11
+b 13
+b 6
+b 43
+b 6
+b 5
+b 1
+b 4
+b 4
+b 43
+b 42
+b 1
+b 3
+b 24
+b 8
+b 0
+b 2
+b 5
+b 9
+b 2
+b 8
+b 5
+b 7
+b 23
+b 5
+b 7
+b 23
+b 2
+b 1
+b 1
+b 3
+b 5
+b 21
+b 22
+b 1
+b 73
+b 72
+b 1
+b 0
+b 12
+b 3
+b 7
+b 5
+b 1
+b 16
+b 3
+b 1
+b 9
+b 4
+b 3
+b 2
+b 1
+b 1
+b 9
+b 21
+b 23
+b 13
+b 0
+b 2
+b 8
+b 7
+b 6
+b 1
+b 10
+b 7
+b 1
+b 1
+b 23
+b 5
+b 1
+b 0
+b 1
+b 10
+b 10
+b 5
+b 1
+b 10
+b 5
+b 1
+b 14
+b 0
+b 6
+b 6
+b 8
+b 3
+b 1
+b 15
+b 17
+b 3
+b 5
+b 7
+b 9
+b 15
+b 17
+b 3
+b 5
+b 7
+b 9
+b 11
+b 0
+b 8
+b 7
+b 3
+b 3
+b 13
+b 8
+b 7
+b 3
+b 13
+b 8
+b 7
+b 6
+b 6
+b 19
+b 19
+b 26
+b 0
+b 2
+b 17
+b 26
+b 0
+b 2
+b 3
+b 17
+b 3
+b 1
+b 10
+b 12
+b 0
+b 10
+b 93
+b 44
+b 46
+b 52
+b 44
+b 1
+b 7
+b 9
+b 8
+b 1
+b 0
+b 26
+b 28
+b 30
+b 9
+b 25
+b 24
+b 1
+b 1
+b 1
+b 1
+b 9
+b 25
+b 1
+b 1
+b 9
+b 25
+b 1
+b 0
+b 2
+b 0
+b 2
+b 0
+b 2
+b 0
+b 2
+b 1
+b 1
+b 5
+b 0
+b 6
+b 6
+b 5
+b 1
+b 3
+b 5
+b 3
+b 3
+b 1
+b 1
+b 3
+b 12
+b 6
+b 3
+b 3
+b 5
+b 1
+b 3
+b 12
+b 6
+b 3
+b 3
+b 5
+b 4
+b 11
+b 5
+b 13
+b 2
+b 1
+b 3
+b 11
+b 11
+b 3
+b 11
+b 11
+b 29
+b 31
+b 33
+b 31
+b 1
+b 42
+b 44
+b 51
+b 4
+b 1
+b 1
+b 42
+b 44
+b 51
+b 4
+b 5
+b 1
+b 42
+b 44
+b 51
+b 4
+b 5
+b 0
+b 0
+b 0
+b 2
+b 0
+b 2
+b 3
+b 1
+b 50
+b 4
+b 6
+b 11
+b 4
+b 6
+b 11
+b 4
+b 1
+b 33
+b 4
+b 5
+b 10
+b 33
+b 30
+b 17
+b 10
+b 35
+b 4
+b 10
+b 35
+b 4
+b 14
+b 47
+b 46
+b 1
+b 13
+b 13
+b 21
+b 11
+b 1
+b 19
+b 1
+b 11
+b 19
+b 9
+b 3
+b 31
+b 3
+b 1
+b 27
+b 1
+b 2
+b 8
+b 11
+b 24
+b 0
+b 2
+b 0
+b 2
+b 1
+b 3
+b 1
+b 2
+b 1
+b 1
+b 3
+b 2
+b 1
+b 3
+b 2
+b 1
+b 1
+b 3
+b 3
+b 0
+b 2
+b 3
+b 1
+b 1
+b 1
+b 3
+b 5
+b 7
+b 0
+b 4
+b 0
+b 2
+b 1
+b 25
+b 27
+b 29
+b 25
+b 1
+b 35
+b 15
+b 12
+b 1
+b 0
+b 3
+b 5
+b 3
+b 5
+b 0
+b 2
+b 3
+b 13
+b 17
+b 4
+b 16
+b 4
+b 1
+b 15
+b 4
+b 1
+b 30
+b 15
+b 4
+b 1
+b 30
+b 15
+b 3
+b 3
+b 4
+b 3
+b 8
+b 10
+b 17
+b 17
+b 13
+b 7
+b 9
+b 11
+b 13
+b 9
+b 1
+b 21
+b 25
+b 33
+b 11
+b 23
+b 5
+b 3
+b 11
+b 3
+b 18
+b 30
+b 29
+b 1
+b 0
+b 3
+b 6
+b 8
+b 3
+b 6
+b 8
+b 51
+b 6
+b 8
+b 6
+b 1
+b 51
+b 10
+b 9
+b 1
+b 6
+b 7
+b 51
+b 7
+b 9
+b 10
+b 60
+b 71
+b 82
+b 59
+b 1
+b 16
+b 2
+b 4
+b 10
+b 19
+b 18
+b 1
+b 17
+b 3
+b 4
+b 25
+b 1
+b 10
+b 1
+b 2
+b 4
+b 11
+b 10
+b 1
+b 4
+b 1
+b 22
+b 24
+b 26
+b 24
+b 1
+b 7
+b 5
+b 2
+b 2
+b 2
+b 10
+b 9
+b 1
+b 0
+b 2
+b 9
+b 10
+b 0
+b 2
+b 9
+b 10
+b 0
+b 26
+b 27
+b 35
+b 34
+b 1
+b 11
+b 46
+b 52
+b 54
+b 45
+b 1
+b 8
+b 15
+b 0
+b 0
+b 12
+b 14
+b 16
+b 33
+b 35
+b 52
+b 54
+b 0
+b 2
+b 30
+b 32
+b 33
+b 35
+b 52
+b 54
+b 8
+b 25
+b 7
+b 1
+b 0
+b 10
+b 36
+b 38
+b 40
+b 42
+b 26
+b 1
+b 2
+b 36
+b 38
+b 40
+b 42
+b 36
+b 1
+b 26
+b 1
+b 0
+b 1
+b 2
+b 36
+b 37
+b 39
+b 41
+b 5
+b 0
+b 1
+b 9
+b 5
+b 0
+b 40
+b 1
+b 9
+b 1
+b 5
+b 0
+b 40
+b 1
+b 9
+b 1
+b 31
+b 6
+b 6
+b 1
+b 132
+b 129
+b 1
+b 11
+b 10
+b 9
+b 11
+b 13
+b 15
+b 6
+b 1
+b 13
+b 1
+b 10
+b 139
+b 138
+b 1
+b 3
+b 5
+b 10
+b 0
+b 1
+b 1
+b 3
+b 8
+b 9
+b 1
+b 3
+b 8
+b 9
+b 22
+b 3
+b 0
+b 2
+b 26
+b 34
+b 33
+b 1
+b 6
+b 5
+b 1
+b 26
+b 34
+b 6
+b 3
+b 5
+b 7
+b 8
+b 10
+b 5
+b 1
+b 22
+b 24
+b 26
+b 1
+b 22
+b 24
+b 26
+b 1
+b 29
+b 28
+b 1
+b 22
+b 24
+b 26
+b 24
+b 1
+b 17
+b 15
+b 1
+b 30
+b 29
+b 2
+b 12
+b 18
+b 20
+b 22
+b 4
+b 3
+b 1
+b 1
+b 1
+b 3
+b 30
+b 50
+b 3
+b 30
+b 50
+b 4
+b 3
+b 30
+b 50
+b 4
+b 0
+b 2
+b 0
+b 2
+b 52
+b 67
+b 52
+b 67
+b 24
+b 24
+b 1
+b 1
+b 26
+b 28
+b 1
+b 28
+b 6
+b 2
+b 9
+b 0
+b 4
+b 3
+b 1
+b 2
+b 0
+b 9
+b 4
+b 3
+b 1
+b 4
+b 2
+b 0
+b 9
+b 4
+b 4
+b 6
+b 8
+b 6
+b 1
+b 140
+b 4
+b 6
+b 7
+b 140
+b 9
+b 4
+b 6
+b 7
+b 140
+b 29
+b 19
+b 18
+b 1
+b 0
+b 8
+b 4
+b 17
+b 0
+b 2
+b 0
+b 1
+b 4
+b 11
+b 5
+b 22
+b 10
+b 7
+b 1
+b 7
+b 16
+b 15
+b 1
+b 6
+b 3
+b 23
+b 16
+b 3
+b 16
+b 0
+b 2
+b 3
+b 5
+b 0
+b 2
+b 1
+b 0
+b 2
+b 3
+b 0
+b 8
+b 23
+b 0
+b 2
+b 15
+b 14
+b 1
+b 0
+b 1
+b 9
+b 15
+b 17
+b 3
+b 6
+b 2
+b 4
+b 6
+b 20
+b 2
+b 3
+b 2
+b 4
+b 6
+b 20
+b 2
+b 3
+b 2
+b 4
+b 45
+b 45
+b 11
+b 10
+b 1
+b 43
+b 11
+b 10
+b 7
+b 1
+b 5
+b 2
+b 1
+b 0
+b 0
+b 1
+b 3
+b 0
+b 96
+b 98
+b 6
+b 12
+b 1
+b 43
+b 40
+b 1
+b 12
+b 3
+b 41
+b 1
+b 12
+b 3
+b 41
+b 1
+b 11
+b 11
+b 6
+b 11
+b 13
+b 11
+b 6
+b 11
+b 13
+b 11
+b 6
+b 13
+b 13
+b 3
+b 5
+b 7
+b 9
+b 8
+b 11
+b 8
+b 1
+b 8
+b 3
+b 5
+b 7
+b 9
+b 5
+b 1
+b 1
+b 9
+b 11
+b 8
+b 0
+b 2
+b 3
+b 5
+b 6
+b 8
+b 26
+b 6
+b 8
+b 36
+b 8
+b 7
+b 1
+b 5
+b 13
+b 10
+b 1
+b 4
+b 3
+b 1
+b 1
+b 4
+b 1
+b 11
+b 13
+b 13
+b 0
+b 2
+b 0
+b 1
+b 5
+b 7
+b 5
+b 7
+b 9
+b 6
+b 1
+b 0
+b 1
+b 0
+b 1
+b 5
+b 7
+b 7
+b 0
+b 1
+b 40
+b 8
+b 10
+b 12
+b 0
+b 2
+b 6
+b 5
+b 1
+b 6
+b 3
+b 1
+b 0
+b 2
+b 2
+b 23
+b 1
+b 8
+b 6
+b 1
+b 20
+b 22
+b 24
+b 8
+b 3
+b 5
+b 20
+b 7
+b 17
+b 16
+b 2
+b 7
+b 1
+b 0
+b 2
+b 0
+b 2
+b 1
+b 0
+b 2
+b 1
+b 0
+b 2
+b 1
+b 0
+b 2
+b 0
+b 2
+b 1
+b 0
+b 2
+b 1
+b 0
+b 2
+b 3
+b 3
+b 3
+b 3
+b 46
+b 48
+b 50
+b 16
+b 18
+b 20
+b 13
+b 1
+b 18
+b 1
+b 1
+b 7
+b 4
+b 2
+b 2
+b 12
+b 6
+b 8
+b 10
+b 11
+b 13
+b 15
+b 17
+b 19
+b 3
+b 6
+b 8
+b 10
+b 11
+b 13
+b 15
+b 17
+b 19
+b 3
+b 6
+b 8
+b 10
+b 11
+b 13
+b 15
+b 17
+b 19
+b 13
+b 1
+b 18
+b 9
+b 3
+b 1
+b 2
+b 1
+b 1
+b 12
+b 8
+b 14
+b 16
+b 18
+b 14
+b 1
+b 15
+b 14
+b 1
+b 2
+b 43
+b 14
+b 3
+b 5
+b 7
+b 23
+b 3
+b 8
+b 24
+b 7
+b 1
+b 5
+b 3
+b 4
+b 6
+b 13
+b 3
+b 4
+b 6
+b 13
+b 2
+b 3
+b 4
+b 6
+b 13
+b 2
+b 5
+b 5
+b 5
+b 7
+b 26
+b 6
+b 12
+b 38
+b 13
+b 15
+b 2
+b 4
+b 6
+b 5
+b 2
+b 4
+b 6
+b 4
+b 1
+b 5
+b 2
+b 4
+b 5
+b 12
+b 10
+b 1
+b 15
+b 13
+b 1
+b 25
+b 24
+b 1
+b 3
+b 5
+b 5
+b 1
+b 11
+b 13
+b 33
+b 12
+b 1
+b 18
+b 1
+b 5
+b 4
+b 1
+b 26
+b 42
+b 26
+b 42
+b 5
+b 3
+b 4
+b 16
+b 1
+b 16
+b 1
+b 4
+b 2
+b 3
+b 16
+b 1
+b 4
+b 2
+b 3
+b 0
+b 2
+b 23
+b 0
+b 2
+b 23
+b 20
+b 2
+b 4
+b 6
+b 20
+b 1
+b 2
+b 4
+b 6
+b 8
+b 5
+b 1
+b 12
+b 0
+b 0
+b 6
+b 12
+b 0
+b 6
+b 12
+b 0
+b 0
+b 11
+b 13
+b 8
+b 16
+b 18
+b 34
+b 32
+b 1
+b 20
+b 2
+b 8
+b 10
+b 12
+b 14
+b 0
+b 2
+b 8
+b 9
+b 1
+b 1
+b 3
+b 13
+b 2
+b 3
+b 0
+b 1
+b 3
+b 36
+b 0
+b 2
+b 3
+b 0
+b 2
+b 22
+b 5
+b 5
+b 7
+b 2
+b 2
+b 3
+b 5
+b 5
+b 7
+b 2
+b 3
+b 5
+b 5
+b 7
+b 12
+b 66
+b 3
+b 6
+b 7
+b 8
+b 10
+b 20
+b 7
+b 8
+b 10
+b 20
+b 3
+b 4
+b 6
+b 7
+b 8
+b 10
+b 20
+b 3
+b 4
+b 6
+b 14
+b 3
+b 4
+b 0
+b 2
+b 13
+b 14
+b 1
+b 7
+b 0
+b 2
+b 0
+b 2
+b 1
+b 7
+b 8
+b 7
+b 1
+b 3
+b 0
+b 2
+b 4
+b 1
+b 7
+b 8
+b 3
+b 0
+b 2
+b 22
+b 21
+b 1
+b 25
+b 31
+b 63
+b 62
+b 1
+b 4
+b 6
+b 8
+b 19
+b 32
+b 34
+b 35
+b 37
+b 0
+b 2
+b 10
+b 28
+b 6
+b 8
+b 10
+b 8
+b 1
+b 0
+b 2
+b 8
+b 6
+b 8
+b 9
+b 0
+b 2
+b 8
+b 18
+b 15
+b 1
+b 3
+b 19
+b 18
+b 1
+b 16
+b 3
+b 19
+b 12
+b 11
+b 1
+b 6
+b 14
+b 13
+b 1
+b 40
+b 42
+b 44
+b 53
+b 29
+b 20
+b 17
+b 1
+b 5
+b 1
+b 8
+b 0
+b 2
+b 7
+b 8
+b 0
+b 2
+b 18
+b 20
+b 22
+b 16
+b 1
+b 21
+b 1
+b 0
+b 2
+b 0
+b 1
+b 6
+b 0
+b 2
+b 1
+b 1
+b 0
+b 2
+b 0
+b 1
+b 6
+b 1
+b 0
+b 2
+b 0
+b 1
+b 6
+b 4
+b 4
+b 1
+b 1
+b 3
+b 3
+b 1
+b 0
+b 2
+b 0
+b 2
+b 4
+b 4
+b 4
+b 2
+b 4
+b 4
+b 7
+b 4
+b 1
+b 2
+b 4
+b 3
+b 25
+b 27
+b 29
+b 31
+b 33
+b 35
+b 26
+b 28
+b 30
+b 49
+b 28
+b 1
+b 7
+b 11
+b 26
+b 28
+b 29
+b 48
+b 1
+b 1
+b 3
+b 1
+b 0
+b 2
+b 0
+b 2
+b 1
+b 3
+b 1
+b 1
+b 8
+b 0
+b 2
+b 1
+b 3
+b 1
+b 1
+b 8
+b 3
+b 3
+b 3
+b 3
+b 3
+b 3
+b 3
+b 3
+b 3
+b 22
+b 24
+b 4
+b 5
+b 4
+b 5
+b 4
+b 25
+b 4
+b 5
+b 4
+b 25
+b 3
+b 5
+b 14
+b 2
+b 14
+b 2
+b 3
+b 3
+b 14
+b 2
+b 3
+b 3
+b 3
+b 14
+b 2
+b 3
+b 3
+b 3
+b 4
+b 14
+b 2
+b 3
+b 5
+b 7
+b 9
+b 1
+b 4
+b 5
+b 7
+b 9
+b 1
+b 22
+b 26
+b 15
+b 13
+b 1
+b 2
+b 1
+b 1
+b 22
+b 17
+b 19
+b 28
+b 2
+b 8
+b 1
+b 1
+b 3
+b 5
+b 1
+b 1
+b 41
+b 61
+b 41
+b 1
+b 57
+b 1
+b 48
+b 5
+b 17
+b 7
+b 4
+b 1
+b 5
+b 5
+b 17
+b 4
+b 1
+b 5
+b 5
+b 11
+b 13
+b 15
+b 11
+b 13
+b 1
+b 0
+b 2
+b 1
+b 0
+b 2
+b 0
+b 3
+b 1
+b 8
+b 1
+b 0
+b 1
+b 0
+b 6
+b 3
+b 1
+b 2
+b 10
+b 21
+b 1
+b 11
+b 0
+b 2
+b 2
+b 10
+b 10
+b 4
+b 2
+b 10
+b 4
+b 2
+b 3
+b 3
+b 1
+b 1
+b 3
+b 0
+b 2
+b 2
+b 3
+b 6
+b 5
+b 1
+b 0
+b 3
+b 6
+b 0
+b 1
+b 3
+b 6
+b 0
+b 1
+b 3
+b 14
+b 16
+b 68
+b 3
+b 13
+b 0
+b 2
+b 0
+b 1
+b 17
+b 24
+b 3
+b 3
+b 1
+b 3
+b 15
+b 0
+b 2
+b 2
+b 1
+b 0
+b 2
+b 13
+b 12
+b 1
+b 30
+b 19
+b 21
+b 23
+b 34
+b 1
+b 3
+b 30
+b 19
+b 21
+b 22
+b 23
+b 16
+b 18
+b 34
+b 1
+b 3
+b 30
+b 19
+b 21
+b 22
+b 23
+b 16
+b 18
+b 34
+b 35
+b 1
+b 3
+b 5
+b 7
+b 9
+b 11
+b 13
+b 12
+b 4
+b 51
+b 57
+b 4
+b 51
+b 57
+b 8
+b 3
+b 4
+b 51
+b 57
+b 8
+b 3
+b 9
+b 11
+b 13
+b 15
+b 18
+b 20
+b 22
+b 27
+b 63
+b 62
+b 1
+b 58
+b 15
+b 29
+b 4
+b 4
+b 5
+b 7
+b 7
+b 8
+b 5
+b 7
+b 8
+b 7
+b 1
+b 23
+b 5
+b 7
+b 8
+b 7
+b 1
+b 23
+b 27
+b 29
+b 14
+b 0
+b 24
+b 26
+b 27
+b 29
+b 9
+b 11
+b 33
+b 4
+b 0
+b 2
+b 3
+b 0
+b 2
+b 0
+b 2
+b 2
+b 4
+b 13
+b 1
+b 12
+b 14
+b 31
+b 14
+b 1
+b 28
+b 1
+b 8
+b 7
+b 1
+b 0
+b 2
+b 10
+b 0
+b 1
+b 80
+b 86
+b 37
+b 39
+b 37
+b 1
+b 20
+b 32
+b 17
+b 1
+b 29
+b 1
+b 12
+b 14
+b 9
+b 1
+b 22
+b 19
+b 1
+b 2
+b 4
+b 3
+b 3
+b 4
+b 5
+b 7
+b 5
+b 1
+b 2
+b 3
+b 4
+b 5
+b 6
+b 2
+b 7
+b 3
+b 6
+b 11
+b 28
+b 1
+b 2
+b 0
+b 2
+b 3
+b 3
+b 0
+b 1
+b 11
+b 13
+b 15
+b 5
+b 4
+b 1
+b 72
+b 79
+b 77
+b 1
+b 12
+b 14
+b 16
+b 14
+b 0
+b 12
+b 14
+b 0
+b 12
+b 14
+b 0
+b 33
+b 60
+b 32
+b 1
+b 4
+b 6
+b 1
+b 0
+b 2
+b 0
+b 1
+b 4
+b 14
+b 16
+b 3
+b 2
+b 1
+b 3
+b 22
+b 20
+b 1
+b 9
+b 20
+b 3
+b 3
+b 9
+b 10
+b 12
+b 7
+b 1
+b 5
+b 4
+b 1
+b 8
+b 10
+b 5
+b 0
+b 2
+b 4
+b 47
+b 1
+b 47
+b 0
+b 2
+b 4
+b 1
+b 47
+b 0
+b 2
+b 4
+b 5
+b 5
+b 6
+b 6
+b 8
+b 42
+b 6
+b 16
+b 30
+b 15
+b 1
+b 116
+b 4
+b 28
+b 15
+b 12
+b 1
+b 6
+b 20
+b 42
+b 43
+b 58
+b 39
+b 1
+b 29
+b 41
+b 43
+b 45
+b 9
+b 11
+b 13
+b 27
+b 29
+b 31
+b 33
+b 2
+b 1
+b 0
+b 0
+b 2
+b 0
+b 1
+b 21
+b 66
+b 9
+b 14
+b 16
+b 28
+b 40
+b 39
+b 1
+b 34
+b 7
+b 6
+b 1
+b 6
+b 8
+b 34
+b 6
+b 8
+b 7
+b 34
+b 6
+b 3
+b 5
+b 7
+b 8
+b 7
+b 4
+b 6
+b 21
+b 38
+b 39
+b 41
+b 38
+b 2
+b 18
+b 1
+b 24
+b 47
+b 15
+b 13
+b 2
+b 3
+b 3
+b 1
+b 11
+b 3
+b 11
+b 11
+b 1
+b 3
+b 3
+b 4
+b 6
+b 8
+b 10
+b 8
+b 1
+b 6
+b 42
+b 54
+b 53
+b 1
+b 17
+b 10
+b 43
+b 51
+b 63
+b 2
+b 3
+b 3
+b 3
+b 0
+b 2
+b 3
+b 3
+b 0
+b 2
+b 1
+b 1
+b 3
+b 3
+b 1
+b 1
+b 6
+b 5
+b 9
+b 11
+b 13
+b 15
+b 1
+b 26
+b 28
+b 29
+b 31
+b 28
+b 2
+b 9
+b 11
+b 13
+b 15
+b 16
+b 1
+b 1
+b 5
+b 2
+b 4
+b 2
+b 1
+b 9
+b 2
+b 3
+b 59
+b 1
+b 0
+b 1
+b 5
+b 7
+b 9
+b 10
+b 9
+b 1
+b 25
+b 22
+b 1
+b 5
+b 0
+b 2
+b 20
+b 5
+b 6
+b 8
+b 5
+b 2
+b 13
+b 13
+b 1
+b 2
+b 0
+b 1
+b 22
+b 11
+b 21
+b 1
+b 6
+b 5
+b 1
+b 0
+b 2
+b 3
+b 3
+b 0
+b 2
+b 1
+b 5
+b 6
+b 3
+b 0
+b 2
+b 1
+b 5
+b 6
+b 0
+b 2
+b 0
+b 2
+b 3
+b 3
+b 1
+b 0
+b 2
+b 1
+b 0
+b 2
+b 1
+b 1
+b 26
+b 40
+b 19
+b 19
+b 1
+b 0
+b 2
+b 1
+b 37
+b 12
+b 14
+b 16
+b 8
+b 3
+b 27
+b 1
+b 25
+b 36
+b 35
+b 1
+b 11
+b 10
+b 1
+b 5
+b 3
+b 5
+b 7
+b 9
+b 9
+b 1
+b 30
+b 1
+b 0
+b 1
+b 4
+b 6
+b 4
+b 1
+b 5
+b 4
+b 5
+b 2
+b 3
+b 3
+b 0
+b 2
+b 3
+b 0
+b 2
+b 1
+b 1
+b 13
+b 3
+b 1
+b 3
+b 14
+b 3
+b 5
+b 7
+b 1
+b 42
+b 5
+b 7
+b 9
+b 1
+b 4
+b 21
+b 23
+b 33
+b 32
+b 29
+b 1
+b 0
+b 7
+b 6
+b 2
+b 12
+b 10
+b 2
+b 36
+b 35
+b 1
+b 55
+b 2
+b 38
+b 57
+b 37
+b 12
+b 9
+b 1
+b 24
+b 1
+b 51
+b 50
+b 1
+b 18
+b 20
+b 22
+b 18
+b 1
+b 15
+b 17
+b 19
+b 31
+b 43
+b 4
+b 1
+b 1
+b 0
+b 2
+b 4
+b 43
+b 1
+b 0
+b 2
+b 4
+b 43
+b 11
+b 13
+b 15
+b 13
+b 1
+b 3
+b 12
+b 11
+b 2
+b 3
+b 15
+b 17
+b 9
+b 3
+b 15
+b 12
+b 14
+b 18
+b 9
+b 1
+b 9
+b 7
+b 28
+b 8
+b 12
+b 10
+b 1
+b 1
+b 12
+b 14
+b 16
+b 17
+b 0
+b 2
+b 12
+b 2
+b 1
+b 21
+b 0
+b 2
+b 0
+b 2
+b 9
+b 9
+b 3
+b 1
+b 1
+b 9
+b 3
+b 9
+b 10
+b 1
+b 9
+b 3
+b 9
+b 10
+b 0
+b 2
+b 0
+b 2
+b 7
+b 6
+b 1
+b 7
+b 8
+b 48
+b 45
+b 1
+b 4
+b 2
+b 1
+b 25
+b 33
+b 34
+b 39
+b 24
+b 1
+b 32
+b 34
+b 2
+b 2
+b 2
+b 4
+b 2
+b 2
+b 14
+b 16
+b 18
+b 6
+b 4
+b 20
+b 13
+b 21
+b 23
+b 25
+b 27
+b 22
+b 1
+b 9
+b 5
+b 7
+b 9
+b 11
+b 7
+b 19
+b 24
+b 1
+b 11
+b 20
+b 7
+b 6
+b 1
+b 18
+b 17
+b 1
+b 13
+b 14
+b 6
+b 11
+b 13
+b 27
+b 6
+b 3
+b 1
+b 11
+b 13
+b 14
+b 16
+b 27
+b 13
+b 2
+b 4
+b 11
+b 13
+b 14
+b 21
+b 23
+b 25
+b 26
+b 11
+b 15
+b 27
+b 29
+b 31
+b 14
+b 1
+b 7
+b 4
+b 1
+b 0
+b 3
+b 5
+b 5
+b 3
+b 5
+b 3
+b 1
+b 1
+b 0
+b 2
+b 2
+b 15
+b 17
+b 37
+b 17
+b 19
+b 26
+b 17
+b 1
+b 14
+b 16
+b 18
+b 11
+b 1
+b 19
+b 35
+b 80
+b 90
+b 79
+b 2
+b 86
+b 1
+b 7
+b 13
+b 3
+b 14
+b 34
+b 9
+b 8
+b 1
+b 4
+b 24
+b 31
+b 41
+b 40
+b 2
+b 28
+b 1
+b 2
+b 2
+b 1
+b 1
+b 1
+b 1
+b 5
+b 4
+b 1
+b 29
+b 5
+b 7
+b 9
+b 2
+b 4
+b 6
+b 7
+b 9
+b 21
+b 19
+b 1
+b 0
+b 2
+b 3
+b 18
+b 30
+b 4
+b 16
+b 18
+b 20
+b 16
+b 1
+b 30
+b 32
+b 34
+b 30
+b 1
+b 31
+b 1
+b 3
+b 0
+b 1
+b 0
+b 1
+b 27
+b 0
+b 3
+b 3
+b 27
+b 0
+b 1
+b 0
+b 3
+b 27
+b 0
+b 1
+b 0
+b 12
+b 11
+b 1
+b 11
+b 12
+b 18
+b 8
+b 6
+b 3
+b 8
+b 6
+b 3
+b 19
+b 18
+b 1
+b 1
+b 14
+b 5
+b 14
+b 37
+b 3
+b 1
+b 34
+b 1
+b 3
+b 4
+b 3
+b 1
+b 3
+b 4
+b 4
+b 0
+b 2
+b 3
+b 0
+b 2
+b 4
+b 2
+b 2
+b 1
+b 15
+b 6
+b 24
+b 6
+b 7
+b 24
+b 6
+b 7
+b 24
+b 11
+b 1
+b 15
+b 4
+b 10
+b 4
+b 1
+b 0
+b 2
+b 13
+b 12
+b 1
+b 0
+b 2
+b 0
+b 12
+b 6
+b 4
+b 27
+b 26
+b 1
+b 1
+b 8
+b 22
+b 6
+b 1
+b 20
+b 1
+b 28
+b 45
+b 4
+b 17
+b 16
+b 1
+b 45
+b 1
+b 11
+b 10
+b 1
+b 102
+b 13
+b 0
+b 2
+b 0
+b 2
+b 4
+b 4
+b 0
+b 2
+b 0
+b 2
+b 0
+b 2
+b 0
+b 2
+b 4
+b 5
+b 4
+b 9
+b 2
+b 2
+b 28
+b 8
+b 12
+b 15
+b 4
+b 26
+b 32
+b 25
+b 1
+b 72
+b 83
+b 7
+b 6
+b 1
+b 1
+b 1
+b 0
+b 2
+b 0
+b 1
+b 0
+b 2
+b 0
+b 2
+b 1
+b 1
+b 9
+b 11
+b 13
+b 11
+b 1
+b 0
+b 1
+b 0
+b 2
+b 1
+b 1
+b 10
+b 9
+b 11
+b 12
+b 0
+b 1
+b 2
+b 1
+b 15
+b 22
+b 31
+b 13
+b 2
+b 28
+b 1
+b 5
+b 7
+b 5
+b 1
+b 1
+b 15
+b 4
+b 2
+b 16
+b 11
+b 0
+b 5
+b 11
+b 2
+b 10
+b 1
+b 1
+b 3
+b 6
+b 1
+b 15
+b 22
+b 12
+b 1
+b 4
+b 6
+b 8
+b 6
+b 1
+b 4
+b 6
+b 7
+b 18
+b 0
+b 2
+b 4
+b 6
+b 7
+b 18
+b 39
+b 14
+b 11
+b 1
+b 13
+b 11
+b 1
+b 9
+b 7
+b 1
+b 13
+b 15
+b 17
+b 20
+b 28
+b 8
+b 28
+b 26
+b 1
+b 5
+b 12
+b 15
+b 5
+b 10
+b 3
+b 5
+b 13
+b 11
+b 2
+b 41
+b 40
+b 1
+b 4
+b 3
+b 1
+b 7
+b 37
+b 16
+b 36
+b 35
+b 2
+b 3
+b 6
+b 32
+b 21
+b 0
+b 2
+b 3
+b 6
+b 32
+b 30
+b 1
+b 21
+b 14
+b 0
+b 13
+b 3
+b 1
+b 3
+b 14
+b 4
+b 0
+b 3
+b 18
+b 34
+b 33
+b 1
+b 7
+b 11
+b 4
+b 1
+b 25
+b 62
+b 1
+b 5
+b 1
+b 9
+b 14
+b 16
+b 32
+b 7
+b 31
+b 33
+b 4
+b 26
+b 3
+b 1
+b 11
+b 2
+b 3
+b 1
+b 11
+b 2
+b 3
+b 2
+b 1
+b 1
+b 11
+b 0
+b 2
+b 0
+b 2
+b 10
+b 12
+b 1
+b 12
+b 20
+b 9
+b 13
+b 15
+b 29
+b 31
+b 33
+b 35
+b 31
+b 1
+b 9
+b 11
+b 3
+b 3
+b 12
+b 3
+b 1
+b 2
+b 4
+b 2
+b 1
+b 12
+b 8
+b 3
+b 0
+b 7
+b 15
+b 17
+b 4
+b 10
+b 12
+b 14
+b 3
+b 4
+b 10
+b 12
+b 14
+b 13
+b 15
+b 17
+b 19
+b 17
+b 1
+b 6
+b 5
+b 1
+b 7
+b 9
+b 5
+b 1
+b 6
+b 8
+b 26
+b 3
+b 42
+b 44
+b 10
+b 16
+b 9
+b 2
+b 12
+b 1
+b 9
+b 8
+b 14
+b 28
+b 30
+b 4
+b 2
+b 5
+b 28
+b 30
+b 4
+b 18
+b 20
+b 22
+b 6
+b 8
+b 18
+b 20
+b 22
+b 1
+b 1
+b 1
+b 1
+b 1
+b 1
+b 7
+b 1
+b 1
+b 1
+b 7
+b 3
+b 3
+b 9
+b 8
+b 32
+b 4
+b 2
+b 1
+b 16
+b 0
+b 2
+b 1
+b 0
+b 1
+b 13
+b 6
+b 25
+b 32
+b 1
+b 7
+b 6
+b 1
+b 11
+b 6
+b 14
+b 52
+b 11
+b 6
+b 14
+b 52
+b 11
+b 6
+b 14
+b 32
+b 1
+b 24
+b 21
+b 1
+b 8
+b 2
+b 1
+b 3
+b 12
+b 3
+b 3
+b 2
+b 1
+b 26
+b 28
+b 23
+b 1
+b 2
+b 2
+b 1
+b 4
+b 6
+b 2
+b 4
+b 4
+b 19
+b 4
+b 3
+b 4
+b 19
+b 4
+b 3
+b 4
+b 2
+b 1
+b 31
+b 3
+b 3
+b 9
+b 11
+b 17
+b 36
+b 4
+b 1
+b 7
+b 11
+b 13
+b 16
+b 8
+b 15
+b 14
+b 41
+b 53
+b 39
+b 1
+b 27
+b 24
+b 1
+b 23
+b 0
+b 2
+b 2
+b 1
+b 31
+b 29
+b 1
+b 3
+b 3
+b 3
+b 0
+b 2
+b 3
+b 3
+b 1
+b 3
+b 0
+b 2
+b 0
+b 1
+b 3
+b 3
+b 0
+b 2
+b 4
+b 6
+b 4
+b 1
+b 1
+b 5
+b 1
+b 0
+b 2
+b 5
+b 4
+b 5
+b 2
+b 20
+b 32
+b 19
+b 20
+b 32
+b 11
+b 13
+b 32
+b 31
+b 1
+b 12
+b 15
+b 14
+b 13
+b 1
+b 13
+b 13
+b 14
+b 10
+b 13
+b 14
+b 10
+b 4
+b 7
+b 16
+b 32
+b 77
+b 79
+b 81
+b 79
+b 1
+b 0
+b 2
+b 19
+b 7
+b 9
+b 11
+b 7
+b 1
+b 7
+b 8
+b 10
+b 20
+b 14
+b 4
+b 3
+b 3
+b 14
+b 4
+b 17
+b 3
+b 14
+b 4
+b 17
+b 5
+b 5
+b 6
+b 0
+b 4
+b 3
+b 1
+b 2
+b 25
+b 24
+b 1
+b 27
+b 40
+b 42
+b 44
+b 40
+b 1
+b 8
+b 10
+b 20
+b 6
+b 8
+b 10
+b 20
+b 8
+b 1
+b 9
+b 33
+b 7
+b 1
+b 6
+b 8
+b 4
+b 6
+b 17
+b 4
+b 1
+b 4
+b 4
+b 0
+b 4
+b 3
+b 4
+b 0
+b 8
+b 5
+b 1
+b 1
+b 0
+b 1
+b 1
+b 5
+b 7
+b 9
+b 5
+b 1
+b 0
+b 2
+b 14
+b 1
+b 5
+b 6
+b 8
+b 0
+b 1
+b 0
+b 2
+b 14
+b 1
+b 0
+b 2
+b 1
+b 5
+b 6
+b 8
+b 0
+b 1
+b 0
+b 2
+b 14
+b 3
+b 4
+b 6
+b 8
+b 3
+b 0
+b 2
+b 10
+b 1
+b 0
+b 2
+b 3
+b 3
+b 4
+b 6
+b 8
+b 10
+b 1
+b 0
+b 2
+b 3
+b 19
+b 25
+b 27
+b 29
+b 3
+b 4
+b 6
+b 8
+b 10
+b 1
+b 15
+b 13
+b 2
+b 5
+b 7
+b 9
+b 48
+b 47
+b 1
+b 32
+b 34
+b 36
+b 37
+b 14
+b 22
+b 0
+b 2
+b 0
+b 2
+b 5
+b 7
+b 4
+b 14
+b 21
+b 12
+b 1
+b 5
+b 1
+b 13
+b 32
+b 31
+b 1
+b 4
+b 3
+b 34
+b 7
+b 12
+b 70
+b 9
+b 1
+b 5
+b 5
+b 10
+b 68
+b 9
+b 1
+b 5
+b 7
+b 9
+b 10
+b 12
+b 67
+b 4
+b 6
+b 16
+b 19
+b 66
+b 18
+b 27
+b 31
+b 1
+b 1
+b 1
+b 1
+b 0
+b 1
+b 33
+b 56
+b 13
+b 59
+b 10
+b 12
+b 13
+b 56
+b 59
+b 10
+b 12
+b 13
+b 56
+b 59
+b 20
+b 0
+b 12
+b 7
+b 0
+b 2
+b 13
+b 3
+b 5
+b 7
+b 15
+b 26
+b 13
+b 1
+b 11
+b 12
+b 21
+b 27
+b 10
+b 1
+b 1
+b 14
+b 16
+b 11
+b 1
+b 14
+b 1
+b 12
+b 14
+b 11
+b 3
+b 0
+b 2
+b 0
+b 2
+b 1
+b 1
+b 0
+b 2
+b 0
+b 2
+b 3
+b 10
+b 11
+b 18
+b 9
+b 1
+b 1
+b 0
+b 2
+b 0
+b 2
+b 0
+b 2
+b 3
+b 17
+b 19
+b 29
+b 5
+b 7
+b 9
+b 10
+b 17
+b 3
+b 3
+b 5
+b 2
+b 3
+b 5
+b 13
+b 1
+b 1
+b 9
+b 6
+b 1
+b 2
+b 24
+b 3
+b 8
+b 10
+b 12
+b 10
+b 1
+b 7
+b 8
+b 10
+b 11
+b 2
+b 0
+b 2
+b 7
+b 4
+b 1
+b 8
+b 10
+b 11
+b 10
+b 1
+b 2
+b 2
+b 4
+b 6
+b 3
+b 2
+b 2
+b 1
+b 5
+b 7
+b 9
+b 10
+b 14
+b 5
+b 1
+b 13
+b 12
+b 1
+b 14
+b 13
+b 2
+b 0
+b 2
+b 9
+b 11
+b 13
+b 9
+b 1
+b 25
+b 9
+b 10
+b 12
+b 25
+b 28
+b 30
+b 60
+b 28
+b 1
+b 8
+b 1
+b 3
+b 7
+b 1
+b 29
+b 0
+b 18
+b 1
+b 20
+b 17
+b 1
+b 3
+b 5
+b 1
+b 1
+b 8
+b 1
+b 12
+b 1
+b 0
+b 2
+b 0
+b 2
+b 1
+b 1
+b 5
+b 12
+b 0
+b 2
+b 1
+b 1
+b 5
+b 12
+b 1
+b 1
+b 0
+b 2
+b 0
+b 2
+b 7
+b 5
+b 27
+b 26
+b 2
+b 0
+b 1
+b 0
+b 1
+b 6
+b 9
+b 11
+b 10
+b 1
+b 0
+b 2
+b 1
+b 11
+b 6
+b 4
+b 6
+b 4
+b 1
+b 12
+b 34
+b 11
+b 12
+b 34
+b 5
+b 7
+b 11
+b 12
+b 34
+b 13
+b 15
+b 14
+b 16
+b 22
+b 16
+b 1
+b 19
+b 1
+b 3
+b 14
+b 15
+b 19
+b 27
+b 3
+b 1
+b 12
+b 1
+b 4
+b 6
+b 2
+b 11
+b 15
+b 25
+b 15
+b 1
+b 10
+b 9
+b 1
+b 24
+b 5
+b 72
+b 69
+b 1
+b 0
+b 15
+b 26
+b 15
+b 26
+b 70
+b 0
+b 15
+b 26
+b 70
+b 0
+b 15
+b 27
+b 17
+b 19
+b 21
+b 23
+b 25
+b 17
+b 27
+b 0
+b 2
+b 20
+b 14
+b 4
+b 16
+b 21
+b 13
+b 14
+b 4
+b 16
+b 15
+b 1
+b 20
+b 21
+b 13
+b 14
+b 15
+b 4
+b 16
+b 39
+b 41
+b 42
+b 44
+b 46
+b 20
+b 21
+b 1
+b 1
+b 12
+b 14
+b 9
+b 1
+b 0
+b 2
+b 0
+b 2
+b 1
+b 1
+b 1
+b 10
+b 12
+b 0
+b 2
+b 1
+b 1
+b 1
+b 10
+b 12
+b 1
+b 1
+b 3
+b 2
+b 1
+b 0
+b 2
+b 0
+b 1
+b 4
+b 3
+b 1
+b 13
+b 3
+b 29
+b 55
+b 8
+b 10
+b 16
+b 6
+b 18
+b 20
+b 22
+b 24
+b 22
+b 1
+b 4
+b 6
+b 37
+b 3
+b 1
+b 0
+b 1
+b 3
+b 5
+b 1
+b 0
+b 2
+b 24
+b 23
+b 1
+b 4
+b 9
+b 23
+b 24
+b 26
+b 4
+b 9
+b 0
+b 2
+b 5
+b 8
+b 10
+b 4
+b 0
+b 2
+b 3
+b 5
+b 4
+b 11
+b 3
+b 5
+b 0
+b 46
+b 48
+b 50
+b 52
+b 54
+b 46
+b 1
+b 46
+b 47
+b 49
+b 51
+b 53
+b 3
+b 8
+b 12
+b 4
+b 34
+b 7
+b 9
+b 11
+b 13
+b 7
+b 1
+b 8
+b 10
+b 16
+b 5
+b 1
+b 14
+b 1
+b 4
+b 63
+b 16
+b 7
+b 23
+b 22
+b 1
+b 13
+b 15
+b 13
+b 12
+b 1
+b 12
+b 4
+b 6
+b 8
+b 19
+b 20
+b 1
+b 6
+b 8
+b 10
+b 8
+b 3
+b 0
+b 2
+b 3
+b 3
+b 3
+b 1
+b 1
+b 0
+b 2
+b 0
+b 2
+b 2
+b 1
+b 2
+b 0
+b 2
+b 0
+b 9
+b 24
+b 7
+b 7
+b 7
+b 4
+b 1
+b 1
+b 0
+b 2
+b 0
+b 0
+b 2
+b 0
+b 1
+b 3
+b 3
+b 5
+b 12
+b 0
+b 1
+b 3
+b 0
+b 2
+b 3
+b 0
+b 5
+b 12
+b 1
+b 0
+b 1
+b 3
+b 0
+b 2
+b 3
+b 0
+b 5
+b 12
+b 1
+b 1
+b 1
+b 2
+b 4
+b 6
+b 7
+b 9
+b 15
+b 40
+b 0
+b 2
+b 0
+b 2
+b 0
+b 1
+b 4
+b 6
+b 3
+b 1
+b 25
+b 27
+b 7
+b 1
+b 7
+b 23
+b 25
+b 27
+b 1
+b 7
+b 23
+b 25
+b 27
+b 3
+b 3
+b 10
+b 24
+b 21
+b 24
+b 6
+b 16
+b 3
+b 1
+b 19
+b 18
+b 1
+b 1
+b 20
+b 13
+b 15
+b 8
+b 10
+b 17
+b 3
+b 14
+b 34
+b 36
+b 44
+b 46
+b 47
+b 32
+b 1
+b 43
+b 2
+b 32
+b 33
+b 35
+b 43
+b 44
+b 0
+b 2
+b 2
+b 2
+b 1
+b 1
+b 3
+b 5
+b 7
+b 9
+b 5
+b 7
+b 2
+b 1
+b 7
+b 6
+b 2
+b 1
+b 9
+b 11
+b 6
+b 1
+b 2
+b 1
+b 1
+b 0
+b 10
+b 1
+b 14
+b 14
+b 1
+b 11
+b 6
+b 8
+b 15
+b 17
+b 19
+b 15
+b 1
+b 2
+b 0
+b 1
+b 0
+b 1
+b 22
+b 21
+b 27
+b 8
+b 38
+b 15
+b 21
+b 25
+b 7
+b 5
+b 1
+b 1
+b 0
+b 2
+b 0
+b 2
+b 0
+b 1
+b 3
+b 16
+b 15
+b 2
+b 4
+b 6
+b 14
+b 0
+b 8
+b 12
+b 13
+b 23
+b 16
+b 12
+b 10
+b 7
+b 1
+b 12
+b 13
+b 23
+b 12
+b 1
+b 16
+b 12
+b 0
+b 2
+b 8
+b 0
+b 1
+b 26
+b 28
+b 26
+b 1
+b 77
+b 83
+b 77
+b 1
+b 4
+b 3
+b 1
+b 18
+b 28
+b 16
+b 1
+b 1
+b 1
+b 1
+b 2
+b 7
+b 6
+b 6
+b 5
+b 2
+b 1
+b 17
+b 14
+b 1
+b 8
+b 19
+b 50
+b 6
+b 1
+b 13
+b 15
+b 17
+b 9
+b 1
+b 17
+b 9
+b 1
+b 11
+b 26
+b 27
+b 36
+b 4
+b 4
+b 6
+b 8
+b 5
+b 3
+b 19
+b 21
+b 23
+b 25
+b 13
+b 0
+b 2
+b 3
+b 19
+b 5
+b 7
+b 0
+b 2
+b 10
+b 8
+b 12
+b 9
+b 1
+b 9
+b 1
+b 10
+b 7
+b 1
+b 7
+b 1
+b 1
+b 3
+b 0
+b 1
+b 5
+b 2
+b 2
+b 4
+b 7
+b 5
+b 1
+b 9
+b 6
+b 1
+b 0
+b 2
+b 11
+b 0
+b 1
+b 10
+b 7
+b 1
+b 6
+b 4
+b 9
+b 107
+b 46
+b 0
+b 2
+b 19
+b 21
+b 21
+b 1
+b 11
+b 10
+b 1
+b 6
+b 11
+b 45
+b 9
+b 9
+b 21
+b 9
+b 1
+b 16
+b 1
+b 37
+b 17
+b 16
+b 1
+b 5
+b 5
+b 1
+b 7
+b 21
+b 6
+b 16
+b 29
+b 30
+b 28
+b 1
+b 1
+b 0
+b 1
+b 23
+b 3
+b 0
+b 1
+b 0
+b 2
+b 1
+b 0
+b 1
+b 47
+b 8
+b 10
+b 12
+b 14
+b 10
+b 1
+b 3
+b 4
+b 10
+b 12
+b 2
+b 1
+b 11
+b 1
+b 2
+b 3
+b 9
+b 11
+b 17
+b 0
+b 2
+b 2
+b 3
+b 9
+b 11
+b 17
+b 54
+b 56
+b 64
+b 13
+b 29
+b 41
+b 38
+b 1
+b 0
+b 2
+b 12
+b 11
+b 1
+b 3
+b 5
+b 7
+b 3
+b 1
+b 4
+b 12
+b 0
+b 2
+b 6
+b 8
+b 10
+b 1
+b 66
+b 2
+b 0
+b 1
+b 0
+b 66
+b 0
+b 66
+b 64
+b 61
+b 1
+b 0
+b 2
+b 0
+b 1
+b 1
+b 16
+b 62
+b 0
+b 1
+b 10
+b 20
+b 19
+b 1
+b 0
+b 0
+b 2
+b 2
+b 1
+b 71
+b 70
+b 1
+b 1
+b 17
+b 3
+b 0
+b 2
+b 7
+b 2
+b 4
+b 66
+b 72
+b 73
+b 70
+b 2
+b 10
+b 35
+b 8
+b 5
+b 1
+b 0
+b 34
+b 33
+b 42
+b 1
+b 7
+b 6
+b 8
+b 10
+b 12
+b 14
+b 1
+b 7
+b 8
+b 6
+b 8
+b 10
+b 12
+b 14
+b 3
+b 1
+b 3
+b 5
+b 7
+b 11
+b 5
+b 16
+b 14
+b 1
+b 6
+b 14
+b 13
+b 1
+b 1
+b 45
+b 71
+b 48
+b 47
+b 1
+b 59
+b 1
+b 1
+b 0
+b 2
+b 0
+b 2
+b 3
+b 6
+b 50
+b 55
+b 56
+b 0
+b 19
+b 18
+b 1
+b 12
+b 3
+b 0
+b 0
+b 2
+b 0
+b 2
+b 3
+b 0
+b 1
+b 12
+b 0
+b 2
+b 3
+b 0
+b 1
+b 12
+b 6
+b 5
+b 1
+b 1
+b 6
+b 8
+b 0
+b 2
+b 5
+b 5
+b 1
+b 3
+b 3
+b 5
+b 3
+b 5
+b 0
+b 0
+b 1
+b 1
+b 15
+b 28
+b 4
+b 2
+b 3
+b 36
+b 35
+b 1
+b 19
+b 9
+b 20
+b 9
+b 4
+b 2
+b 7
+b 9
+b 4
+b 10
+b 36
+b 35
+b 1
+b 88
+b 90
+b 88
+b 1
+b 7
+b 0
+b 2
+b 3
+b 3
+b 7
+b 0
+b 2
+b 53
+b 3
+b 7
+b 0
+b 2
+b 53
+b 13
+b 4
+b 1
+b 0
+b 1
+b 24
+b 26
+b 27
+b 29
+b 26
+b 2
+b 3
+b 5
+b 9
+b 11
+b 19
+b 21
+b 4
+b 9
+b 3
+b 5
+b 7
+b 0
+b 1
+b 3
+b 1
+b 3
+b 5
+b 7
+b 3
+b 8
+b 30
+b 3
+b 5
+b 7
+b 9
+b 7
+b 1
+b 3
+b 30
+b 3
+b 5
+b 7
+b 8
+b 3
+b 3
+b 30
+b 3
+b 5
+b 7
+b 8
+b 3
+b 1
+b 10
+b 18
+b 0
+b 1
+b 10
+b 18
+b 2
+b 2
+b 7
+b 5
+b 1
+b 7
+b 6
+b 1
+b 79
+b 81
+b 79
+b 1
+b 9
+b 1
+b 8
+b 10
+b 1
+b 6
+b 5
+b 1
+b 0
+b 7
+b 4
+b 4
+b 1
+b 0
+b 2
+b 4
+b 8
+b 1
+b 1
+b 3
+b 9
+b 6
+b 0
+b 2
+b 0
+b 2
+b 5
+b 6
+b 9
+b 0
+b 2
+b 5
+b 6
+b 9
+b 24
+b 26
+b 28
+b 26
+b 1
+b 11
+b 55
+b 2
+b 11
+b 12
+b 14
+b 16
+b 17
+b 2
+b 2
+b 3
+b 5
+b 7
+b 4
+b 4
+b 3
+b 5
+b 7
+b 9
+b 4
+b 3
+b 5
+b 7
+b 8
+b 9
+b 2
+b 9
+b 7
+b 1
+b 0
+b 1
+b 7
+b 8
+b 3
+b 17
+b 3
+b 32
+b 6
+b 17
+b 5
+b 2
+b 11
+b 13
+b 13
+b 1
+b 22
+b 4
+b 2
+b 17
+b 19
+b 7
+b 7
+b 17
+b 19
+b 20
+b 26
+b 17
+b 2
+b 7
+b 17
+b 18
+b 24
+b 9
+b 67
+b 6
+b 8
+b 6
+b 1
+b 37
+b 41
+b 53
+b 51
+b 2
+b 40
+b 1
+b 15
+b 17
+b 18
+b 20
+b 59
+b 2
+b 1
+b 7
+b 3
+b 4
+b 2
+b 1
+b 1
+b 20
+b 7
+b 21
+b 19
+b 1
+b 4
+b 3
+b 1
+b 10
+b 11
+b 32
+b 4
+b 6
+b 9
+b 16
+b 7
+b 2
+b 6
+b 8
+b 3
+b 1
+b 3
+b 5
+b 7
+b 4
+b 4
+b 1
+b 5
+b 4
+b 1
+b 6
+b 5
+b 1
+b 0
+b 2
+b 0
+b 3
+b 8
+b 15
+b 14
+b 1
+b 1
+b 13
+b 15
+b 10
+b 1
+b 0
+b 1
+b 0
+b 1
+b 29
+b 16
+b 2
+b 6
+b 5
+b 11
+b 93
+b 95
+b 97
+b 7
+b 17
+b 30
+b 16
+b 1
+b 15
+b 25
+b 12
+b 14
+b 16
+b 18
+b 1
+b 0
+b 2
+b 4
+b 10
+b 17
+b 19
+b 21
+b 23
+b 8
+b 6
+b 1
+b 7
+b 28
+b 5
+b 7
+b 9
+b 10
+b 16
+b 18
+b 20
+b 1
+b 0
+b 1
+b 3
+b 5
+b 0
+b 12
+b 11
+b 1
+b 15
+b 3
+b 1
+b 1
+b 13
+b 11
+b 3
+b 13
+b 12
+b 1
+b 19
+b 30
+b 0
+b 2
+b 0
+b 1
+b 4
+b 12
+b 11
+b 1
+b 3
+b 5
+b 5
+b 1
+b 0
+b 1
+b 12
+b 16
+b 19
+b 25
+b 3
+b 5
+b 4
+b 5
+b 6
+b 1
+b 23
+b 22
+b 25
+b 27
+b 23
+b 1
+b 26
+b 1
+b 27
+b 33
+b 24
+b 8
+b 6
+b 110
+b 112
+b 113
+b 115
+b 122
+b 110
+b 2
+b 39
+b 39
+b 1
+b 22
+b 21
+b 1
+b 8
+b 7
+b 1
+b 28
+b 6
+b 0
+b 5
+b 6
+b 0
+b 5
+b 6
+b 0
+b 33
+b 48
+b 50
+b 52
+b 66
+b 50
+b 1
+b 48
+b 50
+b 51
+b 65
+b 8
+b 48
+b 50
+b 51
+b 65
+b 27
+b 26
+b 1
+b 14
+b 60
+b 12
+b 14
+b 3
+b 1
+b 6
+b 5
+b 46
+b 53
+b 55
+b 56
+b 55
+b 1
+b 6
+b 5
+b 26
+b 46
+b 53
+b 55
+b 56
+b 58
+b 55
+b 2
+b 43
+b 1
+b 0
+b 2
+b 5
+b 3
+b 2
+b 0
+b 2
+b 10
+b 1
+b 12
+b 13
+b 25
+b 12
+b 2
+b 20
+b 1
+b 13
+b 12
+b 1
+b 16
+b 18
+b 18
+b 1
+b 8
+b 22
+b 5
+b 1
+b 43
+b 1
+b 6
+b 8
+b 0
+b 2
+b 3
+b 2
+b 1
+b 1
+b 1
+b 3
+b 3
+b 3
+b 38
+b 46
+b 47
+b 45
+b 1
+b 2
+b 4
+b 4
+b 23
+b 3
+b 2
+b 0
+b 1
+b 9
+b 0
+b 1
+b 12
+b 11
+b 2
+b 0
+b 2
+b 3
+b 22
+b 0
+b 2
+b 1
+b 1
+b 5
+b 22
+b 7
+b 4
+b 6
+b 8
+b 4
+b 1
+b 17
+b 3
+b 4
+b 4
+b 5
+b 7
+b 17
+b 3
+b 4
+b 21
+b 19
+b 1
+b 16
+b 30
+b 58
+b 29
+b 1
+b 54
+b 1
+b 3
+b 2
+b 4
+b 3
+b 5
+b 7
+b 8
+b 1
+b 1
+b 5
+b 15
+b 0
+b 2
+b 24
+b 26
+b 28
+b 24
+b 1
+b 13
+b 12
+b 11
+b 1
+b 1
+b 0
+b 1
+b 6
+b 2
+b 1
+b 1
+b 0
+b 2
+b 10
+b 0
+b 1
+b 3
+b 1
+b 0
+b 2
+b 17
+b 24
+b 47
+b 17
+b 19
+b 21
+b 23
+b 25
+b 17
+b 1
+b 22
+b 1
+b 4
+b 7
+b 0
+b 3
+b 4
+b 7
+b 0
+b 9
+b 3
+b 4
+b 3
+b 1
+b 7
+b 0
+b 2
+b 1
+b 5
+b 7
+b 2
+b 0
+b 1
+b 6
+b 0
+b 2
+b 27
+b 3
+b 11
+b 28
+b 67
+b 66
+b 1
+b 3
+b 0
+b 1
+b 22
+b 24
+b 26
+b 1
+b 1
+b 1
+b 22
+b 24
+b 26
+b 1
+b 1
+b 7
+b 9
+b 11
+b 13
+b 2
+b 8
+b 7
+b 1
+b 9
+b 3
+b 27
+b 9
+b 3
+b 11
+b 8
+b 1
+b 22
+b 10
+b 12
+b 16
+b 17
+b 15
+b 16
+b 18
+b 12
+b 1
+b 1
+b 1
+b 0
+b 1
+b 4
+b 12
+b 12
+b 1
+b 0
+b 4
+b 6
+b 4
+b 1
+b 35
+b 3
+b 3
+b 4
+b 0
+b 2
+b 4
+b 0
+b 2
+b 4
+b 6
+b 3
+b 1
+b 9
+b 7
+b 1
+b 1
+b 0
+b 1
+b 17
+b 14
+b 1
+b 57
+b 56
+b 1
+b 15
+b 57
+b 2
+b 4
+b 3
+b 20
+b 22
+b 24
+b 26
+b 28
+b 1
+b 18
+b 30
+b 17
+b 1
+b 34
+b 3
+b 32
+b 29
+b 1
+b 0
+b 2
+b 20
+b 36
+b 37
+b 19
+b 2
+b 32
+b 2
+b 3
+b 2
+b 1
+b 2
+b 1
+b 1
+b 6
+b 1
+b 17
+b 22
+b 24
+b 30
+b 29
+b 2
+b 1
+b 1
+b 1
+b 0
+b 2
+b 12
+b 3
+b 2
+b 1
+b 0
+b 31
+b 38
+b 40
+b 37
+b 37
+b 1
+b 5
+b 15
+b 1
+b 5
+b 15
+b 1
+b 5
+b 15
+b 16
+b 0
+b 1
+b 1
+b 5
+b 15
+b 16
+b 0
+b 2
+b 1
+b 1
+b 5
+b 15
+b 16
+b 0
+b 0
+b 2
+b 2
+b 1
+b 1
+b 5
+b 15
+b 16
+b 0
+b 7
+b 9
+b 4
+b 3
+b 1
+b 6
+b 30
+b 0
+b 5
+b 4
+b 6
+b 8
+b 6
+b 1
+b 8
+b 5
+b 1
+b 3
+b 1
+b 0
+b 2
+b 19
+b 0
+b 2
+b 19
+b 0
+b 2
+b 8
+b 0
+b 2
+b 8
+b 0
+b 2
+b 3
+b 5
+b 7
+b 0
+b 2
+b 3
+b 3
+b 0
+b 2
+b 1
+b 0
+b 1
+b 0
+b 2
+b 1
+b 3
+b 0
+b 2
+b 3
+b 0
+b 1
+b 1
+b 3
+b 0
+b 2
+b 1
+b 3
+b 0
+b 2
+b 3
+b 0
+b 1
+b 1
+b 3
+b 1
+b 1
+b 0
+b 2
+b 0
+b 2
+b 1
+b 0
+b 3
+b 0
+b 1
+b 3
+b 3
+b 0
+b 2
+b 3
+b 0
+b 2
+b 3
+b 2
+b 8
+b 0
+b 2
+b 3
+b 1
+b 16
+b 15
+b 2
+b 1
+b 24
+b 21
+b 1
+b 5
+b 0
+b 53
+b 63
+b 20
+b 45
+b 61
+b 19
+b 1
+b 55
+b 57
+b 59
+b 23
+b 23
+b 1
+b 0
+b 1
+b 11
+b 8
+b 1
+b 8
+b 1
+b 28
+b 29
+b 0
+b 1
+b 9
+b 40
+b 48
+b 39
+b 1
+b 104
+b 105
+b 105
+b 1
+b 6
+b 5
+b 1
+b 41
+b 6
+b 5
+b 1
+b 0
+b 2
+b 0
+b 1
+b 28
+b 39
+b 25
+b 1
+b 9
+b 7
+b 1
+b 0
+b 1
+b 13
+b 26
+b 32
+b 34
+b 35
+b 25
+b 2
+b 1
+b 1
+b 11
+b 11
+b 12
+b 14
+b 3
+b 3
+b 5
+b 11
+b 15
+b 72
+b 74
+b 76
+b 81
+b 23
+b 5
+b 1
+b 1
+b 1
+b 1
+b 3
+b 3
+b 3
+b 0
+b 5
+b 7
+b 0
+b 2
+b 7
+b 6
+b 1
+b 4
+b 8
+b 5
+b 9
+b 26
+b 28
+b 26
+b 1
+b 7
+b 9
+b 28
+b 27
+b 1
+b 13
+b 12
+b 14
+b 12
+b 1
+b 3
+b 7
+b 2
+b 4
+b 0
+b 0
+b 2
+b 0
+b 1
+b 2
+b 5
+b 3
+b 1
+b 17
+b 18
+b 20
+b 22
+b 23
+b 25
+b 3
+b 17
+b 18
+b 20
+b 22
+b 23
+b 25
+b 6
+b 2
+b 4
+b 2
+b 1
+b 11
+b 1
+b 11
+b 0
+b 1
+b 9
+b 8
+b 1
+b 8
+b 20
+b 4
+b 3
+b 5
+b 7
+b 7
+b 42
+b 3
+b 1
+b 9
+b 8
+b 1
+b 1
+b 3
+b 5
+b 7
+b 18
+b 17
+b 1
+b 15
+b 16
+b 18
+b 20
+b 0
+b 0
+b 8
+b 12
+b 14
+b 22
+b 2
+b 0
+b 7
+b 8
+b 7
+b 1
+b 0
+b 2
+b 0
+b 1
+b 2
+b 7
+b 8
+b 0
+b 1
+b 0
+b 9
+b 3
+b 2
+b 7
+b 8
+b 0
+b 1
+b 0
+b 7
+b 9
+b 0
+b 2
+b 6
+b 5
+b 1
+b 1
+b 0
+b 2
+b 0
+b 1
+b 40
+b 41
+b 13
+b 12
+b 2
+b 10
+b 10
+b 7
+b 1
+b 32
+b 7
+b 19
+b 0
+b 2
+b 8
+b 10
+b 9
+b 3
+b 4
+b 2
+b 3
+b 2
+b 9
+b 10
+b 4
+b 2
+b 3
+b 1
+b 1
+b 1
+b 2
+b 0
+b 1
+b 1
+b 9
+b 10
+b 4
+b 1
+b 2
+b 0
+b 1
+b 1
+b 9
+b 4
+b 3
+b 1
+b 1
+b 16
+b 0
+b 1
+b 11
+b 3
+b 15
+b 48
+b 50
+b 52
+b 54
+b 52
+b 1
+b 7
+b 8
+b 18
+b 15
+b 1
+b 5
+b 1
+b 5
+b 6
+b 4
+b 1
+b 2
+b 9
+b 0
+b 1
+b 53
+b 68
+b 52
+b 1
+b 1
+b 8
+b 7
+b 2
+b 14
+b 6
+b 6
+b 1
+b 16
+b 13
+b 1
+b 1
+b 3
+b 5
+b 40
+b 6
+b 8
+b 6
+b 1
+b 4
+b 1
+b 0
+b 2
+b 0
+b 3
+b 1
+b 0
+b 3
+b 3
+b 2
+b 2
+b 1
+b 2
+b 0
+b 3
+b 7
+b 9
+b 11
+b 13
+b 2
+b 10
+b 9
+b 2
+b 1
+b 3
+b 1
+b 2
+b 22
+b 21
+b 1
+b 0
+b 11
+b 12
+b 0
+b 10
+b 10
+b 1
+b 13
+b 10
+b 1
+b 46
+b 55
+b 64
+b 54
+b 1
+b 60
+b 1
+b 12
+b 14
+b 0
+b 2
+b 0
+b 0
+b 3
+b 5
+b 3
+b 5
+b 1
+b 1
+b 3
+b 3
+b 4
+b 10
+b 0
+b 2
+b 8
+b 10
+b 16
+b 1
+b 3
+b 29
+b 36
+b 35
+b 1
+b 0
+b 2
+b 0
+b 1
+b 2
+b 4
+b 6
+b 12
+b 8
+b 10
+b 6
+b 1
+b 2
+b 2
+b 5
+b 3
+b 5
+b 14
+b 21
+b 12
+b 26
+b 27
+b 0
+b 14
+b 16
+b 18
+b 13
+b 15
+b 7
+b 4
+b 1
+b 13
+b 14
+b 11
+b 2
+b 6
+b 12
+b 0
+b 2
+b 21
+b 3
+b 3
+b 6
+b 8
+b 22
+b 0
+b 2
+b 6
+b 8
+b 21
+b 22
+b 3
+b 3
+b 29
+b 28
+b 1
+b 0
+b 2
+b 6
+b 8
+b 21
+b 22
+b 3
+b 3
+b 28
+b 29
+b 31
+b 14
+b 7
+b 8
+b 15
+b 4
+b 13
+b 10
+b 12
+b 14
+b 16
+b 18
+b 0
+b 2
+b 0
+b 1
+b 1
+b 2
+b 5
+b 15
+b 17
+b 18
+b 17
+b 2
+b 9
+b 4
+b 0
+b 4
+b 0
+b 9
+b 7
+b 6
+b 1
+b 4
+b 0
+b 9
+b 6
+b 7
+b 39
+b 0
+b 4
+b 26
+b 1
+b 0
+b 1
+b 6
+b 0
+b 2
+b 24
+b 2
+b 1
+b 22
+b 1
+b 3
+b 2
+b 1
+b 0
+b 2
+b 1
+b 5
+b 3
+b 2
+b 28
+b 0
+b 6
+b 8
+b 10
+b 12
+b 14
+b 37
+b 6
+b 8
+b 10
+b 12
+b 14
+b 1
+b 10
+b 2
+b 4
+b 10
+b 2
+b 4
+b 5
+b 7
+b 3
+b 5
+b 0
+b 2
+b 11
+b 8
+b 1
+b 0
+b 22
+b 4
+b 0
+b 3
+b 5
+b 7
+b 8
+b 22
+b 23
+b 4
+b 0
+b 3
+b 5
+b 7
+b 8
+b 22
+b 23
+b 4
+b 0
+b 3
+b 5
+b 7
+b 8
+b 32
+b 30
+b 31
+b 32
+b 14
+b 19
+b 21
+b 10
+b 4
+b 2
+b 4
+b 6
+b 18
+b 19
+b 0
+b 0
+b 2
+b 25
+b 26
+b 24
+b 1
+b 10
+b 7
+b 1
+b 20
+b 7
+b 7
+b 1
+b 4
+b 1
+b 1
+b 5
+b 3
+b 1
+b 6
+b 6
+b 1
+b 7
+b 9
+b 11
+b 24
+b 4
+b 9
+b 2
+b 0
+b 1
+b 1
+b 1
+b 34
+b 0
+b 2
+b 4
+b 2
+b 1
+b 29
+b 2
+b 3
+b 1
+b 1
+b 3
+b 9
+b 10
+b 14
+b 7
+b 2
+b 28
+b 36
+b 28
+b 1
+b 4
+b 6
+b 4
+b 1
+b 34
+b 36
+b 12
+b 15
+b 17
+b 19
+b 31
+b 15
+b 1
+b 13
+b 32
+b 34
+b 0
+b 2
+b 3
+b 5
+b 6
+b 17
+b 3
+b 2
+b 4
+b 16
+b 62
+b 11
+b 0
+b 46
+b 67
+b 55
+b 46
+b 67
+b 3
+b 1
+b 2
+b 1
+b 3
+b 2
+b 1
+b 1
+b 3
+b 2
+b 1
+b 0
+b 2
+b 0
+b 2
+b 23
+b 1
+b 0
+b 2
+b 1
+b 0
+b 2
+b 3
+b 3
+b 3
+b 11
+b 1
+b 0
+b 2
+b 0
+b 2
+b 3
+b 3
+b 1
+b 3
+b 22
+b 23
+b 11
+b 1
+b 0
+b 2
+b 0
+b 2
+b 3
+b 3
+b 1
+b 3
+b 22
+b 23
+b 11
+b 1
+b 1
+b 3
+b 3
+b 0
+b 2
+b 0
+b 2
+b 1
+b 0
+b 1
+b 0
+b 2
+b 0
+b 1
+b 0
+b 2
+b 1
+b 1
+b 3
+b 1
+b 3
+b 9
+b 7
+b 1
+b 13
+b 0
+b 25
+b 15
+b 19
+b 20
+b 18
+b 1
+b 1
+b 0
+b 2
+b 43
+b 40
+b 1
+b 30
+b 7
+b 8
+b 10
+b 22
+b 7
+b 2
+b 0
+b 2
+b 8
+b 5
+b 4
+b 2
+b 26
+b 23
+b 1
+b 1
+b 13
+b 14
+b 16
+b 13
+b 2
+b 33
+b 48
+b 31
+b 2
+b 45
+b 1
+b 33
+b 44
+b 22
+b 24
+b 25
+b 27
+b 29
+b 24
+b 2
+b 31
+b 30
+b 1
+b 7
+b 0
+b 2
+b 4
+b 6
+b 7
+b 15
+b 5
+b 6
+b 8
+b 10
+b 8
+b 1
+b 5
+b 14
+b 16
+b 0
+b 2
+b 0
+b 1
+b 15
+b 17
+b 19
+b 21
+b 5
+b 13
+b 4
+b 1
+b 9
+b 1
+b 5
+b 4
+b 20
+b 1
+b 7
+b 16
+b 4
+b 2
+b 10
+b 11
+b 13
+b 15
+b 17
+b 15
+b 1
+b 0
+b 1
+b 8
+b 6
+b 7
+b 9
+b 11
+b 11
+b 3
+b 17
+b 17
+b 1
+b 36
+b 35
+b 2
+b 14
+b 21
+b 11
+b 1
+b 19
+b 1
+b 62
+b 0
+b 2
+b 10
+b 12
+b 1
+b 3
+b 5
+b 12
+b 9
+b 1
+b 1
+b 3
+b 5
+b 0
+b 2
+b 10
+b 0
+b 1
+b 3
+b 5
+b 0
+b 2
+b 0
+b 1
+b 22
+b 2
+b 6
+b 7
+b 9
+b 11
+b 9
+b 1
+b 3
+b 12
+b 15
+b 3
+b 12
+b 15
+b 2
+b 3
+b 12
+b 10
+b 1
+b 0
+b 1
+b 13
+b 14
+b 16
+b 18
+b 11
+b 2
+b 0
+b 3
+b 2
+b 1
+b 37
+b 38
+b 8
+b 14
+b 14
+b 1
+b 12
+b 4
+b 4
+b 6
+b 10
+b 12
+b 13
+b 10
+b 3
+b 14
+b 4
+b 6
+b 0
+b 0
+b 6
+b 14
+b 18
+b 14
+b 1
+b 23
+b 0
+b 10
+b 15
+b 1
+b 1
+b 6
+b 1
+b 0
+b 2
+b 0
+b 1
+b 5
+b 4
+b 1
+b 0
+b 1
+b 1
+b 5
+b 14
+b 4
+b 6
+b 1
+b 0
+b 1
+b 1
+b 5
+b 14
+b 4
+b 6
+b 1
+b 5
+b 1
+b 5
+b 1
+b 3
+b 1
+b 3
+b 10
+b 12
+b 3
+b 4
+b 4
+b 1
+b 1
+b 13
+b 13
+b 1
+b 1
+b 0
+b 2
+b 3
+b 0
+b 2
+b 0
+b 2
+b 1
+b 0
+b 14
+b 10
+b 12
+b 12
+b 1
+b 3
+b 1
+b 2
+b 22
+b 1
+b 2
+b 3
+b 22
+b 10
+b 12
+b 1
+b 2
+b 3
+b 22
+b 10
+b 12
+b 3
+b 0
+b 2
+b 3
+b 3
+b 5
+b 0
+b 2
+b 16
+b 16
+b 1
+b 16
+b 13
+b 1
+b 6
+b 27
+b 6
+b 1
+b 22
+b 1
+b 1
+b 0
+b 2
+b 23
+b 10
+b 9
+b 1
+b 22
+b 21
+b 1
+b 2
+b 12
+b 19
+b 5
+b 4
+b 3
+b 1
+b 11
+b 13
+b 36
+b 40
+b 41
+b 12
+b 35
+b 36
+b 40
+b 41
+b 3
+b 19
+b 18
+b 1
+b 1
+b 1
+b 1
+b 1
+b 6
+b 17
+b 15
+b 3
+b 5
+b 1
+b 0
+b 9
+b 1
+b 9
+b 3
+b 5
+b 7
+b 0
+b 1
+b 23
+b 1
+b 3
+b 5
+b 7
+b 2
+b 23
+b 0
+b 1
+b 19
+b 1
+b 5
+b 1
+b 3
+b 5
+b 6
+b 7
+b 0
+b 1
+b 20
+b 21
+b 12
+b 23
+b 24
+b 21
+b 11
+b 12
+b 23
+b 24
+b 2
+b 1
+b 1
+b 3
+b 7
+b 9
+b 7
+b 1
+b 0
+b 2
+b 1
+b 7
+b 0
+b 2
+b 1
+b 0
+b 1
+b 2
+b 4
+b 6
+b 8
+b 18
+b 5
+b 6
+b 2
+b 1
+b 3
+b 0
+b 1
+b 19
+b 24
+b 5
+b 6
+b 25
+b 26
+b 16
+b 5
+b 4
+b 1
+b 21
+b 0
+b 2
+b 18
+b 16
+b 2
+b 4
+b 18
+b 16
+b 1
+b 0
+b 2
+b 5
+b 20
+b 20
+b 1
+b 2
+b 4
+b 6
+b 8
+b 3
+b 22
+b 0
+b 2
+b 3
+b 2
+b 4
+b 6
+b 8
+b 0
+b 1
+b 22
+b 0
+b 2
+b 3
+b 8
+b 10
+b 0
+b 1
+b 3
+b 5
+b 7
+b 17
+b 19
+b 25
+b 14
+b 1
+b 25
+b 24
+b 1
+b 0
+b 2
+b 1
+b 4
+b 1
+b 19
+b 17
+b 1
+b 23
+b 29
+b 2
+b 4
+b 6
+b 7
+b 2
+b 1
+b 14
+b 14
+b 1
+b 6
+b 9
+b 7
+b 9
+b 11
+b 4
+b 22
+b 23
+b 25
+b 20
+b 2
+b 6
+b 4
+b 4
+b 41
+b 40
+b 1
+b 12
+b 14
+b 16
+b 38
+b 51
+b 48
+b 1
+b 10
+b 8
+b 2
+b 14
+b 6
+b 15
+b 5
+b 1
+b 32
+b 50
+b 31
+b 1
+b 27
+b 40
+b 42
+b 40
+b 1
+b 5
+b 4
+b 1
+b 39
+b 4
+b 6
+b 8
+b 20
+b 6
+b 1
+b 16
+b 38
+b 4
+b 6
+b 7
+b 19
+b 18
+b 10
+b 17
+b 8
+b 1
+b 1
+b 0
+b 1
+b 2
+b 31
+b 41
+b 52
+b 54
+b 2
+b 4
+b 6
+b 2
+b 1
+b 1
+b 4
+b 9
+b 2
+b 4
+b 6
+b 5
+b 3
+b 1
+b 1
+b 0
+b 0
+b 2
+b 2
+b 4
+b 1
+b 24
+b 35
+b 23
+b 1
+b 0
+b 10
+b 23
+b 24
+b 34
+b 0
+b 10
+b 5
+b 27
+b 1
+b 6
+b 19
+b 19
+b 6
+b 16
+b 1
+b 19
+b 6
+b 13
+b 15
+b 16
+b 1
+b 2
+b 23
+b 24
+b 26
+b 28
+b 30
+b 32
+b 8
+b 8
+b 1
+b 6
+b 9
+b 11
+b 5
+b 1
+b 0
+b 1
+b 0
+b 2
+b 5
+b 38
+b 49
+b 23
+b 2
+b 1
+b 7
+b 6
+b 2
+b 9
+b 6
+b 1
+b 5
+b 3
+b 5
+b 19
+b 21
+b 23
+b 19
+b 1
+b 3
+b 1
+b 1
+b 90
+b 11
+b 12
+b 14
+b 16
+b 10
+b 1
+b 1
+b 2
+b 3
+b 0
+b 2
+b 5
+b 4
+b 1
+b 4
+b 5
+b 9
+b 8
+b 33
+b 4
+b 5
+b 9
+b 3
+b 1
+b 10
+b 8
+b 2
+b 6
+b 8
+b 3
+b 1
+b 33
+b 4
+b 3
+b 0
+b 2
+b 1
+b 1
+b 0
+b 1
+b 40
+b 42
+b 31
+b 33
+b 35
+b 29
+b 1
+b 2
+b 7
+b 0
+b 2
+b 0
+b 2
+b 3
+b 0
+b 2
+b 0
+b 2
+b 0
+b 0
+b 1
+b 0
+b 2
+b 3
+b 0
+b 2
+b 0
+b 2
+b 0
+b 2
+b 7
+b 0
+b 1
+b 6
+b 7
+b 9
+b 15
+b 0
+b 2
+b 3
+b 0
+b 2
+b 0
+b 2
+b 0
+b 2
+b 7
+b 0
+b 1
+b 6
+b 7
+b 9
+b 15
+b 1
+b 3
+b 1
+b 1
+b 3
+b 6
+b 2
+b 4
+b 5
+b 17
+b 1
+b 9
+b 35
+b 1
+b 9
+b 2
+b 4
+b 6
+b 2
+b 3
+b 4
+b 1
+b 0
+b 2
+b 0
+b 2
+b 6
+b 3
+b 0
+b 2
+b 0
+b 2
+b 3
+b 3
+b 8
+b 0
+b 2
+b 3
+b 0
+b 2
+b 0
+b 2
+b 0
+b 2
+b 1
+b 3
+b 3
+b 18
+b 4
+b 8
+b 6
+b 8
+b 0
+b 2
+b 3
+b 0
+b 2
+b 0
+b 2
+b 0
+b 2
+b 1
+b 3
+b 3
+b 18
+b 4
+b 8
+b 6
+b 8
+b 0
+b 2
+b 0
+b 2
+b 0
+b 2
+b 0
+b 2
+b 3
+b 34
+b 0
+b 2
+b 26
+b 28
+b 29
+b 31
+b 46
+b 48
+b 28
+b 2
+b 34
+b 0
+b 2
+b 26
+b 28
+b 29
+b 33
+b 44
+b 46
+b 32
+b 1
+b 2
+b 4
+b 4
+b 1
+b 13
+b 8
+b 19
+b 5
+b 7
+b 8
+b 19
+b 0
+b 2
+b 0
+b 1
+b 10
+b 24
+b 8
+b 10
+b 12
+b 13
+b 2
+b 1
+b 8
+b 3
+b 0
+b 3
+b 5
+b 4
+b 0
+b 2
+b 6
+b 2
+b 4
+b 6
+b 14
+b 1
+b 4
+b 6
+b 5
+b 4
+b 1
+b 1
+b 3
+b 3
+b 1
+b 3
+b 12
+b 13
+b 20
+b 21
+b 27
+b 19
+b 1
+b 8
+b 7
+b 2
+b 4
+b 3
+b 4
+b 4
+b 5
+b 3
+b 4
+b 4
+b 5
+b 5
+b 3
+b 4
+b 3
+b 4
+b 5
+b 5
+b 3
+b 4
+b 9
+b 11
+b 12
+b 18
+b 27
+b 11
+b 1
+b 15
+b 1
+b 5
+b 25
+b 34
+b 35
+b 14
+b 15
+b 13
+b 1
+b 9
+b 9
+b 1
+b 3
+b 4
+b 6
+b 3
+b 5
+b 7
+b 9
+b 1
+b 3
+b 4
+b 6
+b 3
+b 4
+b 5
+b 7
+b 9
+b 1
+b 2
+b 3
+b 4
+b 6
+b 3
+b 4
+b 1
+b 5
+b 7
+b 9
+b 5
+b 1
+b 1
+b 2
+b 3
+b 4
+b 6
+b 3
+b 4
+b 1
+b 5
+b 6
+b 8
+b 4
+b 1
+b 0
+b 1
+b 2
+b 3
+b 4
+b 6
+b 3
+b 4
+b 1
+b 1
+b 19
+b 14
+b 9
+b 13
+b 4
+b 6
+b 2
+b 4
+b 6
+b 7
+b 0
+b 6
+b 2
+b 4
+b 6
+b 7
+b 0
+b 1
+b 28
+b 30
+b 28
+b 1
+b 4
+b 3
+b 2
+b 1
+b 1
+b 13
+b 24
+b 25
+b 27
+b 29
+b 21
+b 1
+b 22
+b 0
+b 2
+b 9
+b 6
+b 3
+b 1
+b 3
+b 0
+b 1
+b 33
+b 1
+b 1
+b 35
+b 32
+b 1
+b 0
+b 2
+b 0
+b 1
+b 4
+b 1
+b 33
+b 0
+b 1
+b 3
+b 4
+b 1
+b 33
+b 0
+b 1
+b 3
+b 4
+b 29
+b 31
+b 2
+b 28
+b 22
+b 24
+b 26
+b 28
+b 29
+b 31
+b 2
+b 1
+b 6
+b 18
+b 32
+b 33
+b 35
+b 46
+b 4
+b 2
+b 1
+b 10
+b 11
+b 13
+b 12
+b 14
+b 17
+b 19
+b 7
+b 9
+b 3
+b 13
+b 11
+b 1
+b 7
+b 9
+b 7
+b 1
+b 11
+b 8
+b 1
+b 10
+b 3
+b 1
+b 9
+b 22
+b 0
+b 1
+b 3
+b 0
+b 2
+b 1
+b 9
+b 16
+b 22
+b 0
+b 1
+b 11
+b 15
+b 17
+b 19
+b 21
+b 15
+b 1
+b 3
+b 1
+b 3
+b 6
+b 8
+b 3
+b 1
+b 1
+b 10
+b 12
+b 1
+b 9
+b 23
+b 35
+b 22
+b 2
+b 31
+b 1
+b 19
+b 17
+b 0
+b 9
+b 10
+b 19
+b 9
+b 2
+b 15
+b 1
+b 10
+b 7
+b 1
+b 5
+b 3
+b 8
+b 0
+b 5
+b 6
+b 3
+b 0
+b 1
+b 2
+b 14
+b 5
+b 12
+b 4
+b 1
+b 2
+b 3
+b 4
+b 6
+b 5
+b 1
+b 15
+b 17
+b 3
+b 5
+b 7
+b 3
+b 6
+b 7
+b 0
+b 4
+b 23
+b 4
+b 5
+b 5
+b 1
+b 2
+b 1
+b 2
+b 2
+b 1
+b 31
+b 33
+b 28
+b 1
+b 7
+b 13
+b 0
+b 2
+b 0
+b 2
+b 0
+b 2
+b 0
+b 2
+b 29
+b 31
+b 27
+b 1
+b 0
+b 2
+b 7
+b 13
+b 0
+b 2
+b 0
+b 2
+b 27
+b 28
+b 30
+b 0
+b 2
+b 4
+b 7
+b 13
+b 0
+b 2
+b 15
+b 14
+b 1
+b 3
+b 8
+b 2
+b 3
+b 2
+b 2
+b 18
+b 16
+b 3
+b 22
+b 28
+b 20
+b 1
+b 26
+b 1
+b 74
+b 101
+b 101
+b 1
+b 71
+b 1
+b 37
+b 38
+b 44
+b 35
+b 2
+b 14
+b 1
+b 3
+b 5
+b 7
+b 15
+b 17
+b 19
+b 17
+b 1
+b 4
+b 6
+b 17
+b 4
+b 1
+b 6
+b 0
+b 2
+b 3
+b 3
+b 5
+b 5
+b 4
+b 1
+b 4
+b 19
+b 21
+b 22
+b 3
+b 4
+b 19
+b 21
+b 22
+b 3
+b 4
+b 5
+b 19
+b 21
+b 22
+b 47
+b 49
+b 51
+b 53
+b 60
+b 61
+b 47
+b 1
+b 0
+b 1
+b 7
+b 9
+b 0
+b 9
+b 0
+b 3
+b 7
+b 9
+b 0
+b 3
+b 7
+b 1
+b 1
+b 2
+b 37
+b 7
+b 1
+b 2
+b 5
+b 2
+b 12
+b 20
+b 11
+b 1
+b 16
+b 1
+b 9
+b 11
+b 11
+b 1
+b 10
+b 19
+b 9
+b 1
+b 1
+b 4
+b 3
+b 5
+b 6
+b 8
+b 10
+b 12
+b 10
+b 1
+b 0
+b 12
+b 13
+b 15
+b 16
+b 3
+b 5
+b 6
+b 8
+b 10
+b 11
+b 16
+b 0
+b 5
+b 11
+b 11
+b 1
+b 0
+b 7
+b 106
+b 117
+b 9
+b 3
+b 103
+b 105
+b 105
+b 1
+b 100
+b 1
+b 37
+b 36
+b 38
+b 62
+b 36
+b 1
+b 59
+b 1
+b 12
+b 26
+b 26
+b 27
+b 29
+b 31
+b 32
+b 3
+b 4
+b 2
+b 1
+b 14
+b 1
+b 0
+b 3
+b 5
+b 0
+b 0
+b 2
+b 4
+b 6
+b 8
+b 10
+b 5
+b 6
+b 0
+b 0
+b 2
+b 4
+b 6
+b 8
+b 10
+b 5
+b 6
+b 0
+b 0
+b 2
+b 4
+b 6
+b 8
+b 9
+b 10
+b 0
+b 2
+b 3
+b 5
+b 7
+b 0
+b 2
+b 3
+b 5
+b 7
+b 0
+b 2
+b 3
+b 5
+b 7
+b 8
+b 10
+b 3
+b 0
+b 2
+b 3
+b 5
+b 7
+b 8
+b 10
+b 50
+b 51
+b 53
+b 55
+b 57
+b 59
+b 50
+b 2
+b 3
+b 13
+b 21
+b 20
+b 1
+b 4
+b 3
+b 1
+b 3
+b 8
+b 7
+b 3
+b 0
+b 2
+b 0
+b 2
+b 1
+b 8
+b 12
+b 40
+b 42
+b 44
+b 45
+b 3
+b 12
+b 24
+b 35
+b 36
+b 40
+b 42
+b 44
+b 45
+b 1
+b 17
+b 19
+b 21
+b 23
+b 34
+b 31
+b 28
+b 1
+b 2
+b 2
+b 1
+b 20
+b 46
+b 0
+b 10
+b 11
+b 13
+b 0
+b 2
+b 10
+b 11
+b 13
+b 0
+b 2
+b 20
+b 21
+b 23
+b 46
+b 0
+b 10
+b 11
+b 13
+b 0
+b 2
+b 20
+b 21
+b 23
+b 46
+b 0
+b 1
+b 3
+b 1
+b 22
+b 24
+b 24
+b 1
+b 5
+b 0
+b 2
+b 23
+b 22
+b 2
+b 5
+b 4
+b 1
+b 5
+b 7
+b 8
+b 0
+b 7
+b 9
+b 4
+b 16
+b 0
+b 2
+b 47
+b 46
+b 2
+b 36
+b 38
+b 40
+b 42
+b 44
+b 43
+b 42
+b 1
+b 8
+b 16
+b 24
+b 26
+b 28
+b 29
+b 26
+b 2
+b 16
+b 1
+b 2
+b 0
+b 1
+b 8
+b 7
+b 1
+b 9
+b 11
+b 3
+b 5
+b 1
+b 10
+b 0
+b 1
+b 6
+b 1
+b 7
+b 9
+b 4
+b 1
+b 3
+b 0
+b 1
+b 0
+b 2
+b 19
+b 21
+b 22
+b 30
+b 32
+b 40
+b 12
+b 1
+b 1
+b 4
+b 5
+b 7
+b 1
+b 2
+b 4
+b 8
+b 0
+b 2
+b 3
+b 2
+b 3
+b 1
+b 1
+b 25
+b 3
+b 0
+b 1
+b 0
+b 2
+b 0
+b 2
+b 0
+b 1
+b 0
+b 2
+b 3
+b 13
+b 14
+b 16
+b 0
+b 2
+b 4
+b 3
+b 0
+b 2
+b 9
+b 21
+b 22
+b 24
+b 21
+b 2
+b 5
+b 8
+b 31
+b 29
+b 1
+b 3
+b 7
+b 8
+b 10
+b 12
+b 5
+b 2
+b 8
+b 7
+b 1
+b 9
+b 8
+b 2
+b 7
+b 6
+b 2
+b 17
+b 24
+b 23
+b 1
+b 15
+b 3
+b 17
+b 19
+b 4
+b 6
+b 7
+b 21
+b 27
+b 28
+b 7
+b 13
+b 1
+b 2
+b 4
+b 6
+b 8
+b 4
+b 1
+b 0
+b 6
+b 3
+b 5
+b 0
+b 0
+b 2
+b 5
+b 6
+b 1
+b 1
+b 18
+b 20
+b 22
+b 24
+b 2
+b 4
+b 3
+b 3
+b 2
+b 4
+b 13
+b 3
+b 2
+b 4
+b 13
+b 14
+b 7
+b 8
+b 3
+b 4
+b 3
+b 4
+b 2
+b 1
+b 0
+b 50
+b 48
+b 1
+b 14
+b 0
+b 2
+b 19
+b 1
+b 24
+b 1
+b 1
+b 1
+b 4
+b 6
+b 8
+b 9
+b 11
+b 5
+b 2
+b 24
+b 1
+b 2
+b 1
+b 4
+b 6
+b 8
+b 9
+b 11
+b 12
+b 5
+b 7
+b 4
+b 1
+b 5
+b 11
+b 13
+b 14
+b 15
+b 11
+b 10
+b 1
+b 5
+b 5
+b 11
+b 13
+b 14
+b 15
+b 11
+b 0
+b 2
+b 5
+b 5
+b 11
+b 13
+b 14
+b 15
+b 11
+b 10
+b 16
+b 3
+b 1
+b 7
+b 6
+b 1
+b 2
+b 3
+b 13
+b 2
+b 1
+b 79
+b 80
+b 93
+b 92
+b 1
+b 4
+b 9
+b 5
+b 3
+b 6
+b 9
+b 13
+b 8
+b 2
+b 5
+b 1
+b 5
+b 5
+b 1
+b 10
+b 1
+b 15
+b 21
+b 33
+b 35
+b 31
+b 1
+b 34
+b 1
+b 5
+b 4
+b 6
+b 7
+b 4
+b 2
+b 0
+b 7
+b 4
+b 5
+b 7
+b 0
+b 7
+b 4
+b 5
+b 7
+b 0
+b 7
+b 9
+b 9
+b 0
+b 2
+b 0
+b 2
+b 3
+b 6
+b 1
+b 8
+b 10
+b 12
+b 23
+b 0
+b 7
+b 2
+b 2
+b 1
+b 6
+b 4
+b 3
+b 5
+b 6
+b 23
+b 4
+b 1
+b 11
+b 1
+b 12
+b 1
+b 0
+b 1
+b 13
+b 0
+b 2
+b 3
+b 5
+b 7
+b 8
+b 14
+b 3
+b 1
+b 12
+b 1
+b 5
+b 16
+b 27
+b 5
+b 7
+b 5
+b 1
+b 15
+b 17
+b 35
+b 4
+b 13
+b 37
+b 39
+b 12
+b 1
+b 18
+b 5
+b 20
+b 31
+b 19
+b 1
+b 3
+b 12
+b 1
+b 2
+b 0
+b 2
+b 1
+b 0
+b 1
+b 3
+b 0
+b 1
+b 0
+b 1
+b 3
+b 0
+b 2
+b 1
+b 7
+b 0
+b 2
+b 0
+b 1
+b 26
+b 27
+b 29
+b 26
+b 2
+b 9
+b 12
+b 14
+b 16
+b 22
+b 19
+b 0
+b 2
+b 0
+b 1
+b 8
+b 2
+b 18
+b 1
+b 2
+b 4
+b 8
+b 18
+b 0
+b 2
+b 3
+b 2
+b 1
+b 15
+b 17
+b 12
+b 1
+b 0
+b 28
+b 1
+b 1
+b 0
+b 1
+b 1
+b 1
+b 0
+b 2
+b 0
+b 1
+b 3
+b 0
+b 1
+b 5
+b 2
+b 6
+b 6
+b 8
+b 9
+b 5
+b 2
+b 6
+b 2
+b 1
+b 4
+b 6
+b 6
+b 8
+b 9
+b 22
+b 27
+b 28
+b 27
+b 2
+b 20
+b 1
+b 3
+b 5
+b 15
+b 13
+b 1
+b 4
+b 2
+b 4
+b 6
+b 4
+b 1
+b 2
+b 4
+b 6
+b 15
+b 0
+b 4
+b 3
+b 1
+b 1
+b 2
+b 4
+b 6
+b 0
+b 1
+b 15
+b 4
+b 19
+b 20
+b 1
+b 14
+b 12
+b 2
+b 7
+b 3
+b 14
+b 2
+b 2
+b 0
+b 1
+b 2
+b 4
+b 0
+b 1
+b 0
+b 2
+b 4
+b 5
+b 4
+b 1
+b 24
+b 26
+b 28
+b 21
+b 1
+b 10
+b 8
+b 2
+b 8
+b 10
+b 2
+b 0
+b 2
+b 3
+b 6
+b 0
+b 1
+b 11
+b 23
+b 1
+b 31
+b 33
+b 35
+b 29
+b 1
+b 25
+b 31
+b 29
+b 2
+b 6
+b 5
+b 19
+b 27
+b 16
+b 14
+b 2
+b 3
+b 5
+b 7
+b 1
+b 1
+b 10
+b 77
+b 82
+b 81
+b 1
+b 3
+b 1
+b 1
+b 0
+b 1
+b 7
+b 34
+b 3
+b 4
+b 1
+b 3
+b 4
+b 5
+b 3
+b 1
+b 31
+b 36
+b 29
+b 38
+b 2
+b 6
+b 5
+b 1
+b 2
+b 3
+b 5
+b 7
+b 1
+b 3
+b 5
+b 6
+b 8
+b 13
+b 15
+b 16
+b 29
+b 30
+b 32
+b 13
+b 2
+b 12
+b 12
+b 28
+b 5
+b 6
+b 1
+b 30
+b 27
+b 1
+b 35
+b 33
+b 1
+b 6
+b 8
+b 10
+b 8
+b 1
+b 10
+b 12
+b 8
+b 1
+b 11
+b 1
+b 27
+b 24
+b 1
+b 6
+b 8
+b 10
+b 10
+b 1
+b 5
+b 7
+b 13
+b 12
+b 1
+b 9
+b 11
+b 11
+b 1
+b 3
+b 2
+b 3
+b 0
+b 2
+b 4
+b 17
+b 9
+b 14
+b 12
+b 1
+b 6
+b 7
+b 13
+b 4
+b 2
+b 10
+b 1
+b 4
+b 18
+b 3
+b 3
+b 5
+b 3
+b 4
+b 4
+b 0
+b 2
+b 5
+b 3
+b 4
+b 4
+b 0
+b 2
+b 5
+b 1
+b 3
+b 4
+b 4
+b 0
+b 2
+b 5
+b 1
+b 9
+b 3
+b 4
+b 4
+b 0
+b 2
+b 5
+b 1
+b 9
+b 1
+b 3
+b 4
+b 4
+b 25
+b 24
+b 1
+b 42
+b 43
+b 49
+b 50
+b 3
+b 13
+b 14
+b 13
+b 1
+b 3
+b 3
+b 0
+b 4
+b 18
+b 13
+b 14
+b 17
+b 3
+b 3
+b 0
+b 13
+b 4
+b 18
+b 13
+b 14
+b 17
+b 13
+b 4
+b 3
+b 3
+b 0
+b 13
+b 4
+b 5
+b 18
+b 13
+b 9
+b 9
+b 1
+b 3
+b 4
+b 2
+b 1
+b 19
+b 1
+b 3
+b 4
+b 5
+b 3
+b 5
+b 3
+b 4
+b 5
+b 3
+b 5
+b 2
+b 4
+b 2
+b 4
+b 0
+b 2
+b 0
+b 2
+b 12
+b 1
+b 5
+b 2
+b 3
+b 1
+b 12
+b 11
+b 5
+b 7
+b 9
+b 11
+b 13
+b 37
+b 39
+b 41
+b 13
+b 1
+b 2
+b 1
+b 8
+b 32
+b 40
+b 7
+b 1
+b 5
+b 7
+b 21
+b 23
+b 24
+b 21
+b 2
+b 2
+b 0
+b 2
+b 0
+b 1
+b 2
+b 4
+b 4
+b 1
+b 2
+b 0
+b 1
+b 26
+b 24
+b 1
+b 41
+b 55
+b 57
+b 13
+b 20
+b 16
+b 15
+b 1
+b 4
+b 10
+b 12
+b 6
+b 8
+b 8
+b 1
+b 3
+b 1
+b 58
+b 74
+b 66
+b 67
+b 69
+b 71
+b 65
+b 1
+b 5
+b 5
+b 1
+b 9
+b 11
+b 13
+b 15
+b 17
+b 13
+b 1
+b 5
+b 2
+b 11
+b 6
+b 17
+b 3
+b 19
+b 25
+b 26
+b 28
+b 30
+b 28
+b 1
+b 3
+b 19
+b 6
+b 5
+b 1
+b 5
+b 3
+b 2
+b 7
+b 0
+b 2
+b 8
+b 0
+b 2
+b 0
+b 3
+b 4
+b 6
+b 1
+b 10
+b 0
+b 2
+b 6
+b 1
+b 2
+b 0
+b 3
+b 0
+b 1
+b 1
+b 0
+b 2
+b 5
+b 4
+b 1
+b 3
+b 1
+b 1
+b 8
+b 10
+b 6
+b 1
+b 1
+b 0
+b 1
+b 3
+b 0
+b 2
+b 4
+b 6
+b 0
+b 1
+b 1
+b 3
+b 5
+b 6
+b 7
+b 3
+b 0
+b 1
+b 3
+b 5
+b 1
+b 3
+b 5
+b 6
+b 7
+b 10
+b 3
+b 0
+b 1
+b 6
+b 5
+b 1
+b 0
+b 1
+b 3
+b 5
+b 0
+b 2
+b 1
+b 3
+b 5
+b 6
+b 7
+b 10
+b 16
+b 8
+b 1
+b 15
+b 1
+b 2
+b 4
+b 2
+b 4
+b 2
+b 2
+b 13
+b 12
+b 13
+b 0
+b 1
+b 3
+b 3
+b 5
+b 7
+b 4
+b 2
+b 10
+b 21
+b 1
+b 1
+b 1
+b 9
+b 0
+b 2
+b 3
+b 3
+b 25
+b 2
+b 0
+b 1
+b 0
+b 2
+b 4
+b 6
+b 6
+b 1
+b 0
+b 1
+b 0
+b 2
+b 27
+b 11
+b 6
+b 0
+b 3
+b 0
+b 2
+b 24
+b 0
+b 5
+b 19
+b 21
+b 23
+b 25
+b 27
+b 17
+b 1
+b 22
+b 1
+b 25
+b 1
+b 3
+b 8
+b 5
+b 1
+b 1
+b 19
+b 1
+b 0
+b 2
+b 5
+b 4
+b 1
+b 2
+b 4
+b 5
+b 13
+b 0
+b 2
+b 4
+b 4
+b 9
+b 8
+b 1
+b 7
+b 23
+b 22
+b 1
+b 20
+b 22
+b 24
+b 22
+b 1
+b 5
+b 7
+b 9
+b 10
+b 12
+b 9
+b 2
+b 12
+b 10
+b 2
+b 9
+b 4
+b 6
+b 8
+b 9
+b 13
+b 14
+b 16
+b 6
+b 2
+b 11
+b 2
+b 5
+b 18
+b 15
+b 1
+b 3
+b 5
+b 7
+b 13
+b 15
+b 1
+b 2
+b 3
+b 25
+b 32
+b 33
+b 35
+b 1
+b 1
+b 31
+b 2
+b 22
+b 1
+b 30
+b 1
+b 17
+b 0
+b 1
+b 0
+b 2
+b 3
+b 5
+b 2
+b 9
+b 10
+b 12
+b 14
+b 8
+b 1
+b 4
+b 0
+b 2
+b 5
+b 7
+b 6
+b 2
+b 5
+b 1
+b 0
+b 1
+b 81
+b 80
+b 1
+b 10
+b 1
+b 6
+b 7
+b 20
+b 6
+b 2
+b 15
+b 1
+b 14
+b 15
+b 14
+b 2
+b 12
+b 9
+b 1
+b 4
+b 7
+b 8
+b 10
+b 19
+b 13
+b 13
+b 1
+b 7
+b 8
+b 10
+b 19
+b 13
+b 1
+b 3
+b 7
+b 8
+b 10
+b 19
+b 20
+b 13
+b 1
+b 17
+b 10
+b 8
+b 7
+b 1
+b 3
+b 19
+b 16
+b 1
+b 4
+b 0
+b 2
+b 3
+b 9
+b 7
+b 2
+b 20
+b 17
+b 1
+b 10
+b 13
+b 1
+b 11
+b 11
+b 1
+b 8
+b 0
+b 15
+b 4
+b 0
+b 19
+b 21
+b 22
+b 24
+b 21
+b 2
+b 24
+b 32
+b 31
+b 33
+b 1
+b 0
+b 2
+b 3
+b 0
+b 2
+b 2
+b 4
+b 2
+b 3
+b 0
+b 4
+b 8
+b 10
+b 12
+b 10
+b 1
+b 4
+b 3
+b 1
+b 8
+b 9
+b 19
+b 8
+b 2
+b 6
+b 8
+b 10
+b 12
+b 14
+b 15
+b 19
+b 10
+b 1
+b 3
+b 2
+b 0
+b 0
+b 2
+b 3
+b 0
+b 0
+b 2
+b 11
+b 15
+b 16
+b 18
+b 15
+b 2
+b 1
+b 22
+b 0
+b 2
+b 17
+b 1
+b 6
+b 20
+b 21
+b 11
+b 15
+b 16
+b 0
+b 1
+b 18
+b 3
+b 0
+b 3
+b 8
+b 9
+b 4
+b 17
+b 7
+b 9
+b 15
+b 15
+b 1
+b 0
+b 2
+b 16
+b 18
+b 7
+b 4
+b 6
+b 18
+b 17
+b 1
+b 9
+b 13
+b 0
+b 2
+b 5
+b 14
+b 6
+b 35
+b 36
+b 38
+b 70
+b 33
+b 2
+b 5
+b 1
+b 65
+b 1
+b 2
+b 3
+b 5
+b 3
+b 16
+b 23
+b 24
+b 16
+b 1
+b 21
+b 1
+b 3
+b 24
+b 26
+b 5
+b 6
+b 20
+b 2
+b 1
+b 6
+b 7
+b 0
+b 2
+b 3
+b 4
+b 6
+b 18
+b 3
+b 2
+b 6
+b 7
+b 0
+b 2
+b 31
+b 30
+b 2
+b 8
+b 7
+b 1
+b 7
+b 2
+b 8
+b 8
+b 1
+b 4
+b 5
+b 2
+b 2
+b 1
+b 1
+b 1
+b 11
+b 13
+b 13
+b 15
+b 11
+b 17
+b 15
+b 1
+b 35
+b 37
+b 39
+b 40
+b 47
+b 33
+b 35
+b 37
+b 39
+b 40
+b 47
+b 33
+b 35
+b 36
+b 9
+b 11
+b 13
+b 15
+b 17
+b 11
+b 1
+b 8
+b 6
+b 2
+b 4
+b 2
+b 1
+b 8
+b 0
+b 2
+b 3
+b 0
+b 3
+b 26
+b 24
+b 1
+b 8
+b 10
+b 0
+b 9
+b 11
+b 12
+b 14
+b 16
+b 0
+b 2
+b 24
+b 25
+b 48
+b 4
+b 1
+b 1
+b 1
+b 3
+b 0
+b 2
+b 7
+b 3
+b 0
+b 1
+b 20
+b 22
+b 23
+b 31
+b 33
+b 20
+b 2
+b 31
+b 1
+b 53
+b 4
+b 23
+b 24
+b 3
+b 3
+b 11
+b 29
+b 8
+b 1
+b 4
+b 6
+b 8
+b 12
+b 13
+b 15
+b 12
+b 3
+b 2
+b 4
+b 10
+b 8
+b 8
+b 4
+b 4
+b 0
+b 2
+b 2
+b 1
+b 1
+b 0
+b 1
+b 0
+b 2
+b 3
+b 10
+b 3
+b 0
+b 2
+b 3
+b 1
+b 36
+b 0
+b 0
+b 2
+b 0
+b 1
+b 4
+b 23
+b 33
+b 34
+b 38
+b 40
+b 42
+b 31
+b 2
+b 1
+b 9
+b 14
+b 34
+b 3
+b 10
+b 12
+b 9
+b 8
+b 1
+b 9
+b 11
+b 12
+b 9
+b 2
+b 8
+b 7
+b 9
+b 9
+b 1
+b 0
+b 8
+b 7
+b 2
+b 17
+b 18
+b 20
+b 22
+b 17
+b 2
+b 1
+b 9
+b 1
+b 1
+b 3
+b 5
+b 7
+b 7
+b 1
+b 1
+b 1
+b 8
+b 0
+b 1
+b 3
+b 5
+b 7
+b 1
+b 1
+b 8
+b 0
+b 1
+b 3
+b 5
+b 7
+b 3
+b 3
+b 10
+b 2
+b 8
+b 33
+b 0
+b 2
+b 9
+b 9
+b 6
+b 0
+b 2
+b 3
+b 9
+b 15
+b 8
+b 1
+b 13
+b 1
+b 8
+b 1
+b 9
+b 11
+b 13
+b 0
+b 2
+b 9
+b 10
+b 12
+b 1
+b 12
+b 4
+b 0
+b 2
+b 9
+b 10
+b 12
+b 1
+b 12
+b 4
+b 0
+b 2
+b 0
+b 2
+b 1
+b 0
+b 2
+b 1
+b 3
+b 0
+b 8
+b 14
+b 3
+b 4
+b 1
+b 1
+b 1
+b 1
+b 4
+b 5
+b 1
+b 1
+b 4
+b 5
+b 1
+b 1
+b 10
+b 0
+b 2
+b 3
+b 10
+b 0
+b 2
+b 18
+b 17
+b 18
+b 28
+b 11
+b 10
+b 1
+b 0
+b 2
+b 5
+b 18
+b 3
+b 1
+b 3
+b 1
+b 17
+b 18
+b 28
+b 0
+b 2
+b 1
+b 0
+b 3
+b 6
+b 6
+b 3
+b 0
+b 1
+b 9
+b 0
+b 1
+b 1
+b 0
+b 2
+b 7
+b 8
+b 3
+b 0
+b 3
+b 14
+b 16
+b 18
+b 1
+b 3
+b 0
+b 1
+b 20
+b 18
+b 1
+b 3
+b 2
+b 1
+b 1
+b 3
+b 3
+b 0
+b 1
+b 14
+b 16
+b 18
+b 3
+b 1
+b 3
+b 3
+b 0
+b 1
+b 14
+b 16
+b 18
+b 3
+b 16
+b 16
+b 0
+b 2
+b 0
+b 2
+b 2
+b 4
+b 6
+b 1
+b 1
+b 5
+b 9
+b 11
+b 12
+b 6
+b 17
+b 10
+b 1
+b 0
+b 2
+b 5
+b 6
+b 8
+b 21
+b 5
+b 2
+b 1
+b 12
+b 0
+b 6
+b 8
+b 10
+b 12
+b 13
+b 14
+b 22
+b 21
+b 16
+b 1
+b 8
+b 14
+b 13
+b 1
+b 3
+b 5
+b 1
+b 1
+b 7
+b 3
+b 4
+b 5
+b 1
+b 1
+b 4
+b 3
+b 9
+b 17
+b 2
+b 3
+b 7
+b 0
+b 2
+b 24
+b 30
+b 34
+b 22
+b 21
+b 1
+b 46
+b 3
+b 17
+b 16
+b 1
+b 15
+b 24
+b 18
+b 16
+b 3
+b 23
+b 16
+b 3
+b 2
+b 1
+b 8
+b 7
+b 1
+b 6
+b 10
+b 8
+b 2
+b 5
+b 15
+b 13
+b 1
+b 10
+b 11
+b 10
+b 2
+b 2
+b 0
+b 1
+b 16
+b 30
+b 2
+b 4
+b 2
+b 1
+b 21
+b 23
+b 25
+b 26
+b 8
+b 8
+b 1
+b 26
+b 28
+b 30
+b 23
+b 1
+b 4
+b 39
+b 41
+b 39
+b 41
+b 0
+b 2
+b 4
+b 2
+b 1
+b 39
+b 41
+b 0
+b 2
+b 3
+b 9
+b 3
+b 0
+b 8
+b 2
+b 4
+b 6
+b 12
+b 2
+b 10
+b 32
+b 6
+b 8
+b 10
+b 6
+b 3
+b 5
+b 7
+b 5
+b 1
+b 0
+b 2
+b 0
+b 1
+b 1
+b 0
+b 1
+b 3
+b 6
+b 24
+b 26
+b 26
+b 1
+b 16
+b 13
+b 1
+b 4
+b 10
+b 25
+b 24
+b 2
+b 9
+b 19
+b 9
+b 1
+b 5
+b 5
+b 1
+b 98
+b 100
+b 101
+b 98
+b 2
+b 7
+b 18
+b 17
+b 19
+b 21
+b 4
+b 6
+b 8
+b 10
+b 12
+b 8
+b 1
+b 0
+b 2
+b 0
+b 2
+b 8
+b 30
+b 0
+b 29
+b 4
+b 6
+b 6
+b 1
+b 1
+b 0
+b 1
+b 12
+b 1
+b 0
+b 2
+b 0
+b 3
+b 15
+b 14
+b 2
+b 1
+b 10
+b 8
+b 3
+b 0
+b 2
+b 0
+b 2
+b 14
+b 11
+b 10
+b 1
+b 3
+b 3
+b 47
+b 21
+b 48
+b 50
+b 51
+b 53
+b 55
+b 30
+b 31
+b 33
+b 42
+b 29
+b 1
+b 10
+b 12
+b 12
+b 1
+b 3
+b 12
+b 14
+b 16
+b 12
+b 1
+b 2
+b 15
+b 15
+b 24
+b 13
+b 2
+b 3
+b 15
+b 20
+b 13
+b 2
+b 18
+b 1
+b 11
+b 13
+b 32
+b 38
+b 7
+b 6
+b 1
+b 14
+b 33
+b 31
+b 29
+b 1
+b 0
+b 6
+b 3
+b 4
+b 0
+b 2
+b 1
+b 2
+b 4
+b 0
+b 1
+b 6
+b 4
+b 3
+b 1
+b 8
+b 5
+b 1
+b 6
+b 5
+b 1
+b 2
+b 0
+b 3
+b 12
+b 10
+b 12
+b 12
+b 1
+b 15
+b 14
+b 1
+b 4
+b 22
+b 23
+b 27
+b 14
+b 49
+b 48
+b 1
+b 14
+b 21
+b 20
+b 2
+b 4
+b 0
+b 0
+b 2
+b 2
+b 3
+b 5
+b 0
+b 1
+b 3
+b 3
+b 1
+b 5
+b 7
+b 3
+b 1
+b 2
+b 0
+b 2
+b 2
+b 1
+b 5
+b 7
+b 9
+b 15
+b 14
+b 4
+b 1
+b 1
+b 3
+b 0
+b 2
+b 3
+b 5
+b 7
+b 8
+b 10
+b 25
+b 31
+b 33
+b 31
+b 1
+b 0
+b 2
+b 3
+b 4
+b 11
+b 9
+b 1
+b 10
+b 41
+b 4
+b 18
+b 0
+b 2
+b 3
+b 35
+b 3
+b 5
+b 6
+b 8
+b 10
+b 12
+b 14
+b 24
+b 26
+b 28
+b 29
+b 3
+b 4
+b 14
+b 9
+b 15
+b 4
+b 3
+b 3
+b 5
+b 20
+b 5
+b 1
+b 0
+b 1
+b 16
+b 1
+b 8
+b 6
+b 1
+b 2
+b 1
+b 2
+b 7
+b 5
+b 1
+b 6
+b 11
+b 2
+b 4
+b 5
+b 1
+b 8
+b 3
+b 10
+b 6
+b 0
+b 0
+b 39
+b 42
+b 43
+b 43
+b 1
+b 0
+b 0
+b 1
+b 15
+b 16
+b 18
+b 15
+b 2
+b 2
+b 4
+b 1
+b 6
+b 3
+b 6
+b 0
+b 2
+b 4
+b 12
+b 2
+b 14
+b 0
+b 1
+b 15
+b 9
+b 10
+b 18
+b 9
+b 2
+b 13
+b 1
+b 2
+b 4
+b 6
+b 8
+b 3
+b 2
+b 1
+b 20
+b 30
+b 41
+b 42
+b 45
+b 41
+b 3
+b 29
+b 1
+b 26
+b 27
+b 36
+b 2
+b 28
+b 0
+b 0
+b 2
+b 1
+b 12
+b 10
+b 2
+b 3
+b 6
+b 3
+b 1
+b 24
+b 26
+b 27
+b 29
+b 31
+b 26
+b 2
+b 1
+b 35
+b 3
+b 4
+b 10
+b 12
+b 14
+b 2
+b 1
+b 3
+b 0
+b 2
+b 1
+b 0
+b 1
+b 1
+b 0
+b 2
+b 7
+b 5
+b 6
+b 1
+b 6
+b 4
+b 2
+b 2
+b 3
+b 0
+b 2
+b 6
+b 0
+b 2
+b 5
+b 27
+b 6
+b 8
+b 10
+b 12
+b 0
+b 4
+b 0
+b 0
+b 7
+b 7
+b 0
+b 2
+b 0
+b 2
+b 6
+b 8
+b 3
+b 4
+b 6
+b 12
+b 26
+b 36
+b 18
+b 22
+b 34
+b 36
+b 38
+b 42
+b 20
+b 40
+b 10
+b 2
+b 3
+b 5
+b 2
+b 3
+b 17
+b 17
+b 1
+b 2
+b 0
+b 1
+b 1
+b 0
+b 2
+b 11
+b 10
+b 1
+b 4
+b 5
+b 11
+b 4
+b 5
+b 7
+b 9
+b 10
+b 1
+b 13
+b 4
+b 1
+b 3
+b 0
+b 1
+b 16
+b 3
+b 0
+b 1
+b 14
+b 14
+b 1
+b 25
+b 24
+b 1
+b 6
+b 24
+b 24
+b 1
+b 0
+b 2
+b 4
+b 6
+b 0
+b 1
+b 41
+b 39
+b 1
+b 12
+b 11
+b 4
+b 9
+b 10
+b 9
+b 2
+b 17
+b 16
+b 1
+b 20
+b 49
+b 17
+b 1
+b 44
+b 1
+b 1
+b 42
+b 44
+b 46
+b 3
+b 9
+b 10
+b 23
+b 3
+b 1
+b 6
+b 2
+b 17
+b 1
+b 9
+b 13
+b 20
+b 5
+b 3
+b 1
+b 1
+b 0
+b 2
+b 0
+b 2
+b 4
+b 6
+b 8
+b 10
+b 3
+b 4
+b 13
+b 11
+b 1
+b 29
+b 2
+b 3
+b 5
+b 0
+b 2
+b 3
+b 1
+b 4
+b 18
+b 6
+b 4
+b 2
+b 4
+b 6
+b 8
+b 8
+b 1
+b 5
+b 3
+b 7
+b 2
+b 1
+b 5
+b 2
+b 21
+b 27
+b 56
+b 57
+b 59
+b 61
+b 19
+b 1
+b 55
+b 2
+b 0
+b 2
+b 3
+b 8
+b 10
+b 6
+b 7
+b 3
+b 2
+b 1
+b 0
+b 5
+b 0
+b 9
+b 8
+b 1
+b 3
+b 5
+b 13
+b 30
+b 2
+b 5
+b 13
+b 30
+b 2
+b 3
+b 11
+b 16
+b 17
+b 0
+b 1
+b 3
+b 11
+b 11
+b 7
+b 7
+b 11
+b 9
+b 1
+b 3
+b 0
+b 2
+b 3
+b 17
+b 9
+b 2
+b 3
+b 2
+b 5
+b 5
+b 14
+b 21
+b 22
+b 11
+b 1
+b 11
+b 1
+b 0
+b 1
+b 11
+b 3
+b 4
+b 24
+b 25
+b 27
+b 3
+b 1
+b 22
+b 1
+b 2
+b 0
+b 2
+b 0
+b 2
+b 2
+b 8
+b 9
+b 9
+b 5
+b 4
+b 2
+b 0
+b 6
+b 0
+b 2
+b 4
+b 5
+b 0
+b 6
+b 3
+b 7
+b 1
+b 1
+b 3
+b 3
+b 0
+b 2
+b 31
+b 0
+b 2
+b 3
+b 9
+b 15
+b 0
+b 2
+b 0
+b 3
+b 1
+b 9
+b 0
+b 2
+b 9
+b 3
+b 1
+b 2
+b 7
+b 6
+b 1
+b 8
+b 5
+b 1
+b 2
+b 1
+b 20
+b 22
+b 32
+b 23
+b 31
+b 51
+b 30
+b 1
+b 17
+b 18
+b 20
+b 29
+b 7
+b 1
+b 9
+b 0
+b 0
+b 2
+b 11
+b 9
+b 35
+b 3
+b 5
+b 12
+b 8
+b 56
+b 58
+b 60
+b 68
+b 69
+b 71
+b 73
+b 67
+b 1
+b 13
+b 1
+b 3
+b 5
+b 7
+b 1
+b 3
+b 13
+b 1
+b 3
+b 5
+b 7
+b 3
+b 1
+b 2
+b 11
+b 1
+b 3
+b 13
+b 1
+b 3
+b 4
+b 6
+b 1
+b 4
+b 2
+b 11
+b 11
+b 1
+b 6
+b 6
+b 8
+b 10
+b 11
+b 4
+b 3
+b 1
+b 9
+b 9
+b 10
+b 13
+b 15
+b 17
+b 8
+b 1
+b 16
+b 1
+b 0
+b 10
+b 9
+b 2
+b 20
+b 17
+b 1
+b 8
+b 7
+b 2
+b 1
+b 14
+b 20
+b 22
+b 23
+b 20
+b 2
+b 7
+b 9
+b 16
+b 16
+b 1
+b 6
+b 8
+b 6
+b 1
+b 6
+b 24
+b 6
+b 12
+b 6
+b 8
+b 10
+b 12
+b 13
+b 6
+b 1
+b 1
+b 15
+b 9
+b 4
+b 15
+b 1
+b 4
+b 4
+b 5
+b 6
+b 7
+b 1
+b 9
+b 0
+b 2
+b 0
+b 1
+b 13
+b 23
+b 25
+b 27
+b 28
+b 46
+b 47
+b 13
+b 1
+b 24
+b 2
+b 3
+b 0
+b 2
+b 3
+b 1
+b 9
+b 23
+b 1
+b 5
+b 1
+b 2
+b 4
+b 6
+b 27
+b 7
+b 4
+b 1
+b 0
+b 8
+b 0
+b 1
+b 51
+b 53
+b 61
+b 53
+b 1
+b 7
+b 7
+b 23
+b 5
+b 2
+b 18
+b 16
+b 1
+b 19
+b 18
+b 1
+b 1
+b 12
+b 11
+b 1
+b 13
+b 15
+b 15
+b 1
+b 12
+b 1
+b 16
+b 13
+b 1
+b 0
+b 2
+b 3
+b 11
+b 13
+b 15
+b 11
+b 1
+b 0
+b 1
+b 0
+b 2
+b 34
+b 35
+b 32
+b 2
+b 12
+b 13
+b 22
+b 12
+b 2
+b 17
+b 1
+b 10
+b 7
+b 1
+b 8
+b 0
+b 4
+b 1
+b 1
+b 9
+b 0
+b 1
+b 13
+b 14
+b 23
+b 2
+b 1
+b 1
+b 45
+b 45
+b 1
+b 0
+b 2
+b 4
+b 6
+b 8
+b 10
+b 21
+b 20
+b 1
+b 16
+b 10
+b 15
+b 9
+b 8
+b 1
+b 1
+b 38
+b 39
+b 41
+b 43
+b 6
+b 8
+b 14
+b 6
+b 1
+b 14
+b 3
+b 5
+b 0
+b 2
+b 11
+b 9
+b 1
+b 1
+b 10
+b 11
+b 2
+b 1
+b 10
+b 11
+b 2
+b 0
+b 2
+b 2
+b 1
+b 9
+b 12
+b 14
+b 28
+b 9
+b 2
+b 25
+b 1
+b 1
+b 10
+b 11
+b 13
+b 12
+b 0
+b 2
+b 0
+b 2
+b 9
+b 10
+b 12
+b 26
+b 28
+b 12
+b 10
+b 2
+b 1
+b 1
+b 7
+b 8
+b 10
+b 12
+b 1
+b 87
+b 1
+b 7
+b 8
+b 10
+b 12
+b 4
+b 5
+b 3
+b 5
+b 5
+b 1
+b 1
+b 0
+b 1
+b 3
+b 2
+b 17
+b 0
+b 4
+b 5
+b 12
+b 4
+b 1
+b 29
+b 39
+b 49
+b 50
+b 52
+b 5
+b 3
+b 9
+b 10
+b 29
+b 7
+b 2
+b 2
+b 2
+b 1
+b 11
+b 10
+b 1
+b 10
+b 11
+b 13
+b 9
+b 1
+b 11
+b 12
+b 14
+b 33
+b 35
+b 36
+b 38
+b 9
+b 2
+b 33
+b 2
+b 2
+b 0
+b 1
+b 8
+b 7
+b 2
+b 1
+b 4
+b 19
+b 17
+b 1
+b 7
+b 8
+b 14
+b 12
+b 14
+b 21
+b 0
+b 1
+b 8
+b 13
+b 12
+b 1
+b 1
+b 19
+b 20
+b 22
+b 19
+b 2
+b 6
+b 1
+b 6
+b 0
+b 1
+b 0
+b 11
+b 13
+b 28
+b 30
+b 31
+b 5
+b 7
+b 4
+b 2
+b 2
+b 0
+b 2
+b 1
+b 2
+b 3
+b 5
+b 5
+b 1
+b 1
+b 7
+b 13
+b 2
+b 3
+b 5
+b 0
+b 1
+b 7
+b 56
+b 3
+b 2
+b 3
+b 5
+b 16
+b 17
+b 23
+b 0
+b 2
+b 15
+b 1
+b 2
+b 13
+b 0
+b 2
+b 11
+b 1
+b 2
+b 6
+b 7
+b 9
+b 35
+b 37
+b 32
+b 1
+b 4
+b 36
+b 35
+b 1
+b 3
+b 4
+b 6
+b 12
+b 13
+b 16
+b 22
+b 3
+b 2
+b 8
+b 10
+b 17
+b 18
+b 10
+b 1
+b 2
+b 4
+b 4
+b 3
+b 19
+b 57
+b 58
+b 5
+b 17
+b 2
+b 16
+b 15
+b 1
+b 3
+b 0
+b 1
+b 29
+b 31
+b 23
+b 33
+b 22
+b 22
+b 1
+b 2
+b 8
+b 7
+b 1
+b 0
+b 2
+b 11
+b 19
+b 20
+b 24
+b 6
+b 4
+b 1
+b 0
+b 1
+b 18
+b 16
+b 1
+b 8
+b 4
+b 5
+b 18
+b 26
+b 0
+b 1
+b 4
+b 16
+b 20
+b 22
+b 8
+b 17
+b 19
+b 47
+b 44
+b 1
+b 14
+b 22
+b 6
+b 8
+b 10
+b 16
+b 18
+b 6
+b 1
+b 16
+b 14
+b 1
+b 8
+b 10
+b 12
+b 13
+b 0
+b 6
+b 7
+b 2
+b 3
+b 1
+b 3
+b 1
+b 1
+b 6
+b 8
+b 4
+b 5
+b 23
+b 18
+b 3
+b 18
+b 14
+b 0
+b 2
+b 17
+b 18
+b 20
+b 3
+b 5
+b 7
+b 0
+b 7
+b 11
+b 40
+b 56
+b 37
+b 1
+b 21
+b 25
+b 18
+b 1
+b 2
+b 3
+b 5
+b 6
+b 0
+b 2
+b 5
+b 11
+b 24
+b 25
+b 23
+b 1
+b 9
+b 7
+b 2
+b 5
+b 7
+b 9
+b 2
+b 3
+b 5
+b 2
+b 4
+b 6
+b 7
+b 2
+b 1
+b 3
+b 2
+b 1
+b 4
+b 2
+b 3
+b 1
+b 0
+b 1
+b 7
+b 17
+b 21
+b 22
+b 15
+b 1
+b 1
+b 2
+b 0
+b 1
+b 2
+b 0
+b 2
+b 0
+b 2
+b 14
+b 12
+b 1
+b 0
+b 2
+b 4
+b 5
+b 7
+b 8
+b 14
+b 16
+b 4
+b 3
+b 11
+b 12
+b 14
+b 10
+b 1
+b 11
+b 8
+b 1
+b 8
+b 1
+b 11
+b 15
+b 16
+b 8
+b 1
+b 4
+b 0
+b 2
+b 6
+b 1
+b 0
+b 2
+b 9
+b 15
+b 13
+b 15
+b 6
+b 10
+b 14
+b 48
+b 8
+b 1
+b 12
+b 1
+b 45
+b 1
+b 3
+b 5
+b 0
+b 1
+b 0
+b 5
+b 3
+b 1
+b 2
+b 0
+b 2
+b 4
+b 5
+b 18
+b 10
+b 1
+b 12
+b 10
+b 2
+b 0
+b 1
+b 16
+b 17
+b 19
+b 16
+b 2
+b 39
+b 40
+b 46
+b 54
+b 37
+b 2
+b 51
+b 2
+b 1
+b 4
+b 2
+b 1
+b 12
+b 13
+b 15
+b 10
+b 2
+b 3
+b 3
+b 1
+b 3
+b 18
+b 19
+b 18
+b 2
+b 1
+b 3
+b 3
+b 4
+b 3
+b 4
+b 4
+b 3
+b 0
+b 1
+b 3
+b 0
+b 1
+b 7
+b 9
+b 6
+b 8
+b 13
+b 15
+b 2
+b 0
+b 2
+b 53
+b 55
+b 56
+b 55
+b 1
+b 7
+b 5
+b 2
+b 25
+b 2
+b 2
+b 4
+b 6
+b 8
+b 14
+b 15
+b 23
+b 2
+b 0
+b 2
+b 1
+b 17
+b 3
+b 2
+b 3
+b 3
+b 5
+b 6
+b 8
+b 22
+b 29
+b 5
+b 2
+b 6
+b 17
+b 3
+b 2
+b 3
+b 3
+b 2
+b 4
+b 6
+b 5
+b 6
+b 20
+b 27
+b 6
+b 17
+b 3
+b 2
+b 3
+b 3
+b 2
+b 4
+b 6
+b 7
+b 4
+b 3
+b 5
+b 6
+b 20
+b 27
+b 5
+b 1
+b 6
+b 3
+b 1
+b 0
+b 10
+b 0
+b 21
+b 41
+b 40
+b 2
+b 11
+b 15
+b 0
+b 4
+b 10
+b 12
+b 14
+b 10
+b 1
+b 7
+b 8
+b 10
+b 6
+b 1
+b 15
+b 14
+b 1
+b 5
+b 3
+b 3
+b 8
+b 7
+b 1
+b 1
+b 7
+b 21
+b 19
+b 16
+b 1
+b 17
+b 1
+b 1
+b 0
+b 2
+b 3
+b 7
+b 6
+b 2
+b 87
+b 89
+b 90
+b 98
+b 0
+b 9
+b 91
+b 96
+b 89
+b 1
+b 7
+b 6
+b 8
+b 10
+b 12
+b 6
+b 1
+b 1
+b 1
+b 1
+b 9
+b 8
+b 1
+b 0
+b 5
+b 4
+b 2
+b 19
+b 26
+b 33
+b 38
+b 39
+b 18
+b 2
+b 36
+b 1
+b 17
+b 29
+b 15
+b 3
+b 25
+b 1
+b 3
+b 5
+b 11
+b 14
+b 15
+b 6
+b 15
+b 5
+b 2
+b 11
+b 9
+b 1
+b 3
+b 4
+b 6
+b 8
+b 9
+b 8
+b 2
+b 1
+b 5
+b 8
+b 10
+b 0
+b 1
+b 5
+b 7
+b 9
+b 10
+b 3
+b 4
+b 6
+b 8
+b 9
+b 11
+b 1
+b 5
+b 3
+b 8
+b 10
+b 11
+b 0
+b 1
+b 7
+b 9
+b 13
+b 29
+b 30
+b 7
+b 3
+b 26
+b 1
+b 8
+b 1
+b 2
+b 10
+b 30
+b 31
+b 9
+b 0
+b 6
+b 1
+b 0
+b 4
+b 2
+b 1
+b 3
+b 5
+b 1
+b 2
+b 1
+b 1
+b 4
+b 1
+b 0
+b 1
+b 9
+b 11
+b 12
+b 11
+b 1
+b 2
+b 0
+b 1
+b 1
+b 4
+b 5
+b 7
+b 0
+b 1
+b 3
+b 2
+b 3
+b 4
+b 6
+b 6
+b 1
+b 3
+b 4
+b 1
+b 3
+b 14
+b 17
+b 20
+b 24
+b 16
+b 18
+b 16
+b 1
+b 20
+b 21
+b 23
+b 25
+b 23
+b 1
+b 4
+b 14
+b 8
+b 1
+b 1
+b 0
+b 2
+b 2
+b 16
+b 17
+b 10
+b 8
+b 2
+b 0
+b 7
+b 7
+b 5
+b 9
+b 6
+b 1
+b 1
+b 3
+b 0
+b 3
+b 15
+b 1
+b 0
+b 1
+b 2
+b 3
+b 4
+b 6
+b 3
+b 2
+b 6
+b 4
+b 1
+b 27
+b 2
+b 15
+b 30
+b 29
+b 1
+b 0
+b 2
+b 0
+b 1
+b 5
+b 9
+b 11
+b 0
+b 2
+b 3
+b 11
+b 0
+b 2
+b 3
+b 4
+b 1
+b 2
+b 4
+b 6
+b 8
+b 11
+b 10
+b 30
+b 4
+b 5
+b 7
+b 12
+b 13
+b 7
+b 1
+b 14
+b 4
+b 6
+b 7
+b 4
+b 2
+b 9
+b 10
+b 15
+b 16
+b 15
+b 1
+b 3
+b 31
+b 29
+b 1
+b 5
+b 7
+b 2
+b 1
+b 0
+b 2
+b 3
+b 7
+b 0
+b 9
+b 10
+b 3
+b 4
+b 6
+b 19
+b 4
+b 7
+b 0
+b 7
+b 9
+b 4
+b 5
+b 3
+b 1
+b 5
+b 2
+b 3
+b 5
+b 1
+b 1
+b 4
+b 2
+b 1
+b 6
+b 8
+b 9
+b 9
+b 11
+b 12
+b 9
+b 2
+b 10
+b 1
+b 7
+b 8
+b 10
+b 4
+b 14
+b 26
+b 2
+b 23
+b 0
+b 2
+b 16
+b 18
+b 20
+b 22
+b 24
+b 25
+b 27
+b 22
+b 4
+b 0
+b 3
+b 3
+b 1
+b 7
+b 8
+b 5
+b 2
+b 4
+b 1
+b 3
+b 4
+b 0
+b 2
+b 0
+b 2
+b 0
+b 2
+b 3
+b 4
+b 12
+b 0
+b 2
+b 6
+b 3
+b 5
+b 1
+b 0
+b 1
+b 3
+b 2
+b 1
+b 14
+b 26
+b 27
+b 32
+b 33
+b 3
+b 28
+b 3
+b 5
+b 3
+b 4
+b 6
+b 8
+b 9
+b 15
+b 20
+b 21
+b 3
+b 5
+b 1
+b 24
+b 23
+b 2
+b 12
+b 3
+b 5
+b 7
+b 13
+b 14
+b 15
+b 11
+b 18
+b 3
+b 7
+b 6
+b 1
+b 2
+b 3
+b 10
+b 25
+b 0
+b 2
+b 10
+b 20
+b 14
+b 11
+b 1
+b 0
+b 0
+b 1
+b 24
+b 26
+b 28
+b 24
+b 1
+b 0
+b 2
+b 26
+b 24
+b 2
+b 3
+b 14
+b 16
+b 14
+b 1
+b 0
+b 2
+b 1
+b 2
+b 3
+b 5
+b 6
+b 8
+b 9
+b 2
+b 3
+b 1
+b 0
+b 1
+b 2
+b 6
+b 3
+b 7
+b 6
+b 1
+b 2
+b 3
+b 5
+b 16
+b 4
+b 3
+b 2
+b 1
+b 1
+b 9
+b 14
+b 2
+b 2
+b 1
+b 23
+b 0
+b 2
+b 4
+b 7
+b 14
+b 15
+b 2
+b 3
+b 94
+b 23
+b 0
+b 2
+b 4
+b 4
+b 12
+b 10
+b 1
+b 12
+b 14
+b 15
+b 17
+b 14
+b 2
+b 11
+b 13
+b 11
+b 1
+b 11
+b 1
+b 6
+b 13
+b 3
+b 1
+b 6
+b 10
+b 0
+b 1
+b 7
+b 9
+b 10
+b 0
+b 43
+b 45
+b 46
+b 45
+b 2
+b 54
+b 1
+b 1
+b 1
+b 8
+b 6
+b 2
+b 1
+b 2
+b 0
+b 1
+b 17
+b 1
+b 2
+b 4
+b 2
+b 4
+b 6
+b 8
+b 10
+b 11
+b 10
+b 2
+b 7
+b 7
+b 1
+b 2
+b 11
+b 2
+b 3
+b 8
+b 0
+b 0
+b 0
+b 1
+b 2
+b 1
+b 14
+b 23
+b 35
+b 21
+b 1
+b 6
+b 7
+b 11
+b 12
+b 15
+b 5
+b 1
+b 10
+b 4
+b 1
+b 14
+b 16
+b 21
+b 22
+b 34
+b 3
+b 5
+b 6
+b 10
+b 11
+b 13
+b 15
+b 22
+b 24
+b 20
+b 1
+b 5
+b 2
+b 3
+b 2
+b 15
+b 17
+b 18
+b 1
+b 3
+b 9
+b 10
+b 26
+b 24
+b 2
+b 3
+b 4
+b 6
+b 0
+b 2
+b 0
+b 1
+b 11
+b 9
+b 3
+b 2
+b 0
+b 3
+b 3
+b 11
+b 12
+b 14
+b 15
+b 17
+b 19
+b 30
+b 10
+b 1
+b 17
+b 0
+b 8
+b 7
+b 9
+b 8
+b 1
+b 1
+b 4
+b 2
+b 4
+b 6
+b 8
+b 9
+b 6
+b 2
+b 0
+b 2
+b 3
+b 0
+b 4
+b 0
+b 1
+b 9
+b 23
+b 6
+b 1
+b 8
+b 9
+b 11
+b 12
+b 8
+b 3
+b 2
+b 1
+b 4
+b 2
+b 4
+b 6
+b 7
+b 0
+b 1
+b 0
+b 1
+b 7
+b 21
+b 3
+b 8
+b 9
+b 2
+b 0
+b 1
+b 7
+b 8
+b 4
+b 2
+b 4
+b 6
+b 7
+b 7
+b 8
+b 4
+b 15
+b 17
+b 18
+b 20
+b 21
+b 29
+b 9
+b 15
+b 7
+b 5
+b 1
+b 12
+b 13
+b 12
+b 1
+b 10
+b 4
+b 7
+b 10
+b 5
+b 1
+b 8
+b 1
+b 5
+b 2
+b 3
+b 5
+b 6
+b 8
+b 10
+b 2
+b 3
+b 7
+b 3
+b 6
+b 1
+b 6
+b 1
+b 8
+b 10
+b 8
+b 1
+b 8
+b 9
+b 32
+b 40
+b 47
+b 48
+b 62
+b 7
+b 7
+b 9
+b 10
+b 25
+b 2
+b 3
+b 10
+b 12
+b 13
+b 18
+b 12
+b 1
+b 15
+b 2
+b 14
+b 15
+b 12
+b 2
+b 2
+b 11
+b 10
+b 1
+b 10
+b 11
+b 13
+b 28
+b 29
+b 31
+b 33
+b 27
+b 1
+b 1
+b 4
+b 2
+b 1
+b 0
+b 7
+b 4
+b 5
+b 13
+b 24
+b 25
+b 27
+b 28
+b 30
+b 32
+b 33
+b 35
+b 1
+b 3
+b 4
+b 0
+b 2
+b 1
+b 2
+b 0
+b 7
+b 0
+b 1
+b 3
+b 5
+b 26
+b 34
+b 24
+b 3
+b 29
+b 3
+b 45
+b 43
+b 1
+b 44
+b 1
+b 11
+b 13
+b 14
+b 13
+b 2
+b 31
+b 32
+b 37
+b 32
+b 1
+b 2
+b 4
+b 6
+b 7
+b 9
+b 10
+b 11
+b 6
+b 5
+b 1
+b 21
+b 26
+b 1
+b 0
+b 3
+b 21
+b 22
+b 34
+b 21
+b 2
+b 30
+b 1
+b 12
+b 14
+b 15
+b 25
+b 12
+b 2
+b 5
+b 5
+b 1
+b 0
+b 2
+b 3
+b 0
+b 2
+b 8
+b 6
+b 7
+b 5
+b 1
+b 22
+b 6
+b 24
+b 0
+b 0
+b 2
+b 0
+b 1
+b 3
+b 1
+b 0
+b 2
+b 3
+b 4
+b 5
+b 2
+b 2
+b 14
+b 16
+b 17
+b 16
+b 1
+b 4
+b 0
+b 2
+b 0
+b 3
+b 5
+b 7
+b 9
+b 10
+b 12
+b 0
+b 1
+b 7
+b 0
+b 2
+b 2
+b 0
+b 1
+b 0
+b 2
+b 3
+b 0
+b 2
+b 3
+b 10
+b 12
+b 14
+b 16
+b 18
+b 20
+b 6
+b 5
+b 1
+b 19
+b 18
+b 1
+b 0
+b 2
+b 2
+b 1
+b 1
+b 5
+b 15
+b 16
+b 0
+b 0
+b 14
+b 15
+b 17
+b 27
+b 13
+b 1
+b 12
+b 28
+b 11
+b 2
+b 23
+b 1
+b 3
+b 4
+b 2
+b 1
+b 12
+b 13
+b 17
+b 19
+b 17
+b 1
+b 2
+b 3
+b 0
+b 2
+b 12
+b 0
+b 1
+b 41
+b 2
+b 0
+b 1
+b 6
+b 3
+b 1
+b 16
+b 23
+b 22
+b 2
+b 0
+b 2
+b 1
+b 0
+b 1
+b 10
+b 0
+b 10
+b 11
+b 1
+b 0
+b 41
+b 2
+b 3
+b 4
+b 16
+b 22
+b 23
+b 25
+b 0
+b 2
+b 0
+b 1
+b 7
+b 6
+b 1
+b 4
+b 0
+b 2
+b 1
+b 0
+b 1
+b 0
+b 1
+b 5
+b 4
+b 1
+b 18
+b 26
+b 17
+b 1
+b 8
+b 9
+b 11
+b 12
+b 0
+b 2
+b 2
+b 1
+b 0
+b 0
+b 15
+b 10
+b 8
+b 3
+b 1
+b 0
+b 2
+b 3
+b 5
+b 7
+b 23
+b 5
+b 1
+b 4
+b 5
+b 4
+b 1
+b 7
+b 5
+b 1
+b 5
+b 4
+b 2
+b 3
+b 1
+b 0
+b 2
+b 9
+b 1
+b 10
+b 12
+b 1
+b 1
+b 0
+b 2
+b 3
+b 5
+b 9
+b 10
+b 12
+b 1
+b 1
+b 12
+b 3
+b 5
+b 6
+b 11
+b 12
+b 0
+b 2
+b 3
+b 5
+b 9
+b 10
+b 12
+b 2
+b 0
+b 2
+b 1
+b 3
+b 15
+b 12
+b 10
+b 1
+b 0
+b 3
+b 8
+b 2
+b 4
+b 6
+b 2
+b 1
+b 5
+b 11
+b 10
+b 1
+b 0
+b 2
+b 5
+b 6
+b 1
+b 16
+b 0
+b 2
+b 3
+b 1
+b 0
+b 7
+b 2
+b 4
+b 5
+b 2
+b 2
+b 56
+b 55
+b 2
+b 3
+b 0
+b 2
+b 2
+b 1
+b 6
+b 7
+b 6
+b 2
+b 22
+b 24
+b 26
+b 20
+b 1
+b 2
+b 4
+b 2
+b 0
+b 1
+b 1
+b 2
+b 16
+b 8
+b 9
+b 1
+b 2
+b 7
+b 1
+b 2
+b 4
+b 1
+b 2
+b 0
+b 2
+b 18
+b 2
+b 7
+b 8
+b 17
+b 18
+b 7
+b 1
+b 18
+b 2
+b 4
+b 9
+b 11
+b 13
+b 7
+b 8
+b 16
+b 17
+b 1
+b 1
+b 0
+b 1
+b 1
+b 0
+b 3
+b 3
+b 7
+b 11
+b 3
+b 4
+b 1
+b 9
+b 7
+b 1
+b 7
+b 1
+b 5
+b 2
+b 1
+b 8
+b 10
+b 6
+b 1
+b 2
+b 2
+b 1
+b 23
+b 23
+b 3
+b 8
+b 13
+b 14
+b 10
+b 1
+b 2
+b 10
+b 10
+b 1
+b 14
+b 16
+b 1
+b 3
+b 1
+b 3
+b 3
+b 3
+b 1
+b 3
+b 1
+b 3
+b 3
+b 1
+b 3
+b 1
+b 14
+b 16
+b 7
+b 3
+b 1
+b 3
+b 3
+b 1
+b 3
+b 1
+b 14
+b 16
+b 7
+b 0
+b 2
+b 0
+b 2
+b 1
+b 1
+b 0
+b 2
+b 1
+b 0
+b 2
+b 0
+b 2
+b 7
+b 9
+b 3
+b 4
+b 6
+b 12
+b 40
+b 42
+b 43
+b 45
+b 53
+b 22
+b 41
+b 51
+b 40
+b 2
+b 47
+b 5
+b 20
+b 1
+b 4
+b 4
+b 8
+b 3
+b 4
+b 6
+b 2
+b 8
+b 9
+b 12
+b 14
+b 3
+b 0
+b 2
+b 0
+b 35
+b 37
+b 39
+b 40
+b 33
+b 1
+b 38
+b 3
+b 33
+b 34
+b 49
+b 31
+b 2
+b 47
+b 1
+b 2
+b 16
+b 18
+b 19
+b 21
+b 23
+b 0
+b 2
+b 16
+b 2
+b 11
+b 10
+b 17
+b 23
+b 24
+b 7
+b 20
+b 21
+b 24
+b 25
+b 19
+b 1
+b 23
+b 1
+b 9
+b 11
+b 22
+b 23
+b 22
+b 1
+b 11
+b 12
+b 25
+b 24
+b 2
+b 0
+b 0
+b 1
+b 0
+b 6
+b 21
+b 21
+b 1
+b 13
+b 11
+b 1
+b 10
+b 17
+b 5
+b 4
+b 6
+b 15
+b 4
+b 1
+b 13
+b 2
+b 1
+b 1
+b 6
+b 7
+b 13
+b 12
+b 13
+b 12
+b 1
+b 10
+b 7
+b 1
+b 6
+b 7
+b 13
+b 2
+b 5
+b 12
+b 13
+b 0
+b 2
+b 8
+b 6
+b 4
+b 2
+b 10
+b 1
+b 0
+b 1
+b 0
+b 2
+b 0
+b 1
+b 7
+b 8
+b 17
+b 18
+b 0
+b 8
+b 7
+b 1
+b 1
+b 19
+b 3
+b 0
+b 1
+b 17
+b 4
+b 3
+b 1
+b 18
+b 20
+b 5
+b 28
+b 40
+b 42
+b 44
+b 45
+b 54
+b 55
+b 56
+b 4
+b 1
+b 3
+b 5
+b 7
+b 8
+b 24
+b 6
+b 5
+b 2
+b 13
+b 3
+b 5
+b 7
+b 8
+b 3
+b 1
+b 1
+b 0
+b 2
+b 0
+b 0
+b 2
+b 0
+b 3
+b 4
+b 6
+b 7
+b 1
+b 9
+b 10
+b 12
+b 13
+b 21
+b 23
+b 0
+b 1
+b 0
+b 2
+b 0
+b 4
+b 28
+b 8
+b 3
+b 4
+b 10
+b 8
+b 9
+b 11
+b 13
+b 15
+b 17
+b 0
+b 2
+b 13
+b 17
+b 36
+b 17
+b 1
+b 34
+b 1
+b 20
+b 14
+b 16
+b 12
+b 1
+b 15
+b 1
+b 32
+b 34
+b 3
+b 3
+b 0
+b 2
+b 0
+b 5
+b 2
+b 1
+b 4
+b 1
+b 1
+b 0
+b 1
+b 1
+b 0
+b 2
+b 9
+b 10
+b 18
+b 19
+b 17
+b 18
+b 5
+b 2
+b 4
+b 6
+b 7
+b 9
+b 11
+b 2
+b 1
+b 19
+b 17
+b 1
+b 7
+b 5
+b 2
+b 1
+b 0
+b 3
+b 0
+b 1
+b 2
+b 0
+b 1
+b 4
+b 1
+b 4
+b 5
+b 6
+b 3
+b 5
+b 2
+b 3
+b 14
+b 16
+b 17
+b 14
+b 2
+b 10
+b 1
+b 0
+b 1
+b 1
+b 9
+b 1
+b 0
+b 1
+b 2
+b 7
+b 25
+b 0
+b 12
+b 7
+b 6
+b 1
+b 27
+b 0
+b 2
+b 3
+b 13
+b 15
+b 16
+b 18
+b 11
+b 1
+b 0
+b 2
+b 4
+b 22
+b 1
+b 16
+b 14
+b 2
+b 1
+b 0
+b 1
+b 5
+b 7
+b 3
+b 18
+b 6
+b 4
+b 3
+b 3
+b 4
+b 10
+b 0
+b 1
+b 2
+b 3
+b 4
+b 13
+b 18
+b 13
+b 4
+b 5
+b 1
+b 2
+b 8
+b 3
+b 5
+b 3
+b 1
+b 4
+b 10
+b 8
+b 3
+b 0
+b 0
+b 2
+b 10
+b 4
+b 16
+b 1
+b 15
+b 12
+b 10
+b 1
+b 18
+b 4
+b 8
+b 16
+b 18
+b 19
+b 21
+b 22
+b 7
+b 1
+b 6
+b 19
+b 4
+b 3
+b 14
+b 3
+b 19
+b 18
+b 2
+b 5
+b 6
+b 12
+b 5
+b 2
+b 0
+b 2
+b 0
+b 3
+b 4
+b 13
+b 14
+b 15
+b 12
+b 3
+b 0
+b 0
+b 1
+b 4
+b 0
+b 1
+b 3
+b 5
+b 0
+b 2
+b 12
+b 14
+b 12
+b 1
+b 2
+b 3
+b 12
+b 5
+b 0
+b 2
+b 4
+b 2
+b 1
+b 20
+b 21
+b 4
+b 13
+b 12
+b 1
+b 3
+b 0
+b 19
+b 25
+b 27
+b 25
+b 1
+b 0
+b 1
+b 11
+b 10
+b 2
+b 5
+b 2
+b 1
+b 24
+b 0
+b 2
+b 16
+b 9
+b 7
+b 9
+b 11
+b 12
+b 21
+b 36
+b 45
+b 18
+b 18
+b 19
+b 18
+b 1
+b 2
+b 1
+b 9
+b 11
+b 17
+b 18
+b 19
+b 18
+b 1
+b 2
+b 1
+b 0
+b 1
+b 9
+b 11
+b 17
+b 18
+b 6
+b 1
+b 2
+b 18
+b 19
+b 2
+b 1
+b 7
+b 9
+b 15
+b 16
+b 17
+b 4
+b 6
+b 7
+b 0
+b 2
+b 2
+b 1
+b 15
+b 16
+b 14
+b 2
+b 16
+b 22
+b 5
+b 3
+b 1
+b 9
+b 4
+b 9
+b 9
+b 1
+b 0
+b 1
+b 3
+b 5
+b 6
+b 8
+b 3
+b 4
+b 6
+b 7
+b 9
+b 2
+b 1
+b 5
+b 2
+b 4
+b 15
+b 21
+b 22
+b 9
+b 12
+b 14
+b 10
+b 1
+b 4
+b 12
+b 2
+b 8
+b 10
+b 11
+b 17
+b 8
+b 4
+b 0
+b 1
+b 14
+b 1
+b 0
+b 1
+b 0
+b 2
+b 17
+b 2
+b 3
+b 5
+b 6
+b 1
+b 0
+b 1
+b 15
+b 15
+b 14
+b 1
+b 4
+b 2
+b 3
+b 13
+b 8
+b 4
+b 5
+b 7
+b 8
+b 15
+b 30
+b 4
+b 4
+b 4
+b 5
+b 7
+b 8
+b 15
+b 30
+b 4
+b 4
+b 7
+b 27
+b 29
+b 27
+b 1
+b 6
+b 7
+b 27
+b 28
+b 30
+b 2
+b 0
+b 1
+b 0
+b 2
+b 0
+b 2
+b 0
+b 3
+b 0
+b 2
+b 0
+b 1
+b 8
+b 8
+b 2
+b 10
+b 7
+b 1
+b 0
+b 2
+b 0
+b 2
+b 0
+b 1
+b 3
+b 5
+b 7
+b 9
+b 7
+b 1
+b 3
+b 4
+b 8
+b 6
+b 8
+b 9
+b 4
+b 1
+b 26
+b 25
+b 1
+b 58
+b 60
+b 73
+b 58
+b 1
+b 32
+b 0
+b 2
+b 3
+b 5
+b 6
+b 3
+b 4
+b 9
+b 3
+b 1
+b 6
+b 3
+b 2
+b 4
+b 9
+b 14
+b 18
+b 19
+b 21
+b 23
+b 24
+b 3
+b 4
+b 14
+b 2
+b 1
+b 13
+b 1
+b 17
+b 25
+b 17
+b 1
+b 22
+b 1
+b 45
+b 57
+b 62
+b 64
+b 44
+b 1
+b 0
+b 2
+b 10
+b 19
+b 22
+b 53
+b 54
+b 5
+b 21
+b 23
+b 52
+b 10
+b 1
+b 14
+b 15
+b 0
+b 0
+b 10
+b 1
+b 4
+b 5
+b 7
+b 8
+b 1
+b 2
+b 2
+b 18
+b 19
+b 21
+b 22
+b 18
+b 3
+b 2
+b 3
+b 12
+b 14
+b 0
+b 2
+b 0
+b 1
+b 2
+b 3
+b 9
+b 1
+b 1
+b 4
+b 1
+b 1
+b 10
+b 8
+b 3
+b 11
+b 13
+b 15
+b 17
+b 18
+b 20
+b 22
+b 3
+b 9
+b 11
+b 13
+b 15
+b 17
+b 18
+b 20
+b 21
+b 22
+b 17
+b 5
+b 3
+b 12
+b 9
+b 1
+b 9
+b 1
+b 12
+b 13
+b 20
+b 13
+b 1
+b 4
+b 5
+b 11
+b 4
+b 2
+b 7
+b 1
+b 0
+b 44
+b 42
+b 1
+b 6
+b 4
+b 15
+b 16
+b 18
+b 20
+b 21
+b 18
+b 2
+b 23
+b 25
+b 31
+b 32
+b 36
+b 38
+b 40
+b 42
+b 43
+b 6
+b 4
+b 15
+b 16
+b 18
+b 19
+b 1
+b 10
+b 2
+b 3
+b 10
+b 4
+b 1
+b 4
+b 16
+b 18
+b 20
+b 22
+b 24
+b 25
+b 34
+b 35
+b 22
+b 2
+b 32
+b 2
+b 0
+b 2
+b 3
+b 0
+b 2
+b 0
+b 2
+b 0
+b 2
+b 0
+b 2
+b 8
+b 9
+b 11
+b 7
+b 11
+b 10
+b 8
+b 2
+b 3
+b 1
+b 0
+b 1
+b 1
+b 3
+b 3
+b 4
+b 3
+b 5
+b 7
+b 5
+b 1
+b 4
+b 5
+b 3
+b 4
+b 4
+b 2
+b 3
+b 1
+b 0
+b 3
+b 1
+b 1
+b 0
+b 1
+b 4
+b 9
+b 10
+b 12
+b 14
+b 9
+b 2
+b 0
+b 1
+b 7
+b 1
+b 1
+b 1
+b 0
+b 1
+b 7
+b 11
+b 13
+b 14
+b 17
+b 19
+b 17
+b 1
+b 5
+b 3
+b 1
+b 4
+b 1
+b 16
+b 16
+b 1
+b 0
+b 1
+b 2
+b 0
+b 2
+b 4
+b 6
+b 2
+b 1
+b 0
+b 1
+b 4
+b 24
+b 26
+b 27
+b 29
+b 4
+b 28
+b 26
+b 2
+b 10
+b 3
+b 4
+b 6
+b 19
+b 20
+b 8
+b 5
+b 4
+b 1
+b 10
+b 21
+b 18
+b 1
+b 10
+b 7
+b 10
+b 12
+b 14
+b 15
+b 4
+b 6
+b 7
+b 3
+b 2
+b 4
+b 5
+b 7
+b 13
+b 8
+b 0
+b 2
+b 22
+b 1
+b 19
+b 20
+b 27
+b 26
+b 1
+b 3
+b 0
+b 7
+b 2
+b 11
+b 12
+b 14
+b 1
+b 3
+b 5
+b 6
+b 7
+b 1
+b 3
+b 2
+b 1
+b 11
+b 12
+b 14
+b 1
+b 3
+b 5
+b 6
+b 7
+b 1
+b 3
+b 4
+b 1
+b 1
+b 11
+b 12
+b 14
+b 11
+b 2
+b 1
+b 3
+b 5
+b 6
+b 7
+b 1
+b 6
+b 3
+b 1
+b 3
+b 2
+b 1
+b 1
+b 3
+b 1
+b 3
+b 5
+b 7
+b 9
+b 12
+b 1
+b 0
+b 1
+b 19
+b 1
+b 1
+b 0
+b 2
+b 4
+b 6
+b 7
+b 1
+b 7
+b 3
+b 2
+b 3
+b 5
+b 5
+b 4
+b 10
+b 11
+b 12
+b 14
+b 15
+b 19
+b 32
+b 46
+b 45
+b 1
+b 19
+b 16
+b 18
+b 44
+b 14
+b 1
+b 42
+b 2
+b 3
+b 3
+b 8
+b 0
+b 2
+b 6
+b 9
+b 5
+b 1
+b 4
+b 0
+b 2
+b 1
+b 0
+b 1
+b 3
+b 10
+b 7
+b 1
+b 0
+b 0
+b 1
+b 4
+b 6
+b 8
+b 0
+b 1
+b 3
+b 5
+b 3
+b 5
+b 7
+b 9
+b 15
+b 1
+b 0
+b 2
+b 3
+b 1
+b 5
+b 6
+b 14
+b 15
+b 0
+b 2
+b 3
+b 60
+b 61
+b 70
+b 71
+b 1
+b 5
+b 6
+b 14
+b 15
+b 17
+b 0
+b 1
+b 0
+b 2
+b 4
+b 4
+b 6
+b 8
+b 14
+b 15
+b 5
+b 6
+b 0
+b 1
+b 0
+b 1
+b 2
+b 6
+b 7
+b 9
+b 11
+b 13
+b 15
+b 17
+b 4
+b 2
+b 3
+b 5
+b 7
+b 8
+b 10
+b 1
+b 1
+b 9
+b 7
+b 2
+b 0
+b 1
+b 10
+b 14
+b 15
+b 17
+b 19
+b 20
+b 22
+b 2
+b 5
+b 4
+b 5
+b 49
+b 52
+b 83
+b 84
+b 82
+b 1
+b 51
+b 1
+b 26
+b 27
+b 26
+b 2
+b 1
+b 11
+b 11
+b 1
+b 1
+b 3
+b 1
+b 11
+b 12
+b 3
+b 2
+b 3
+b 4
+b 0
+b 11
+b 13
+b 4
+b 5
+b 16
+b 10
+b 11
+b 13
+b 11
+b 12
+b 14
+b 15
+b 10
+b 45
+b 2
+b 3
+b 14
+b 20
+b 21
+b 11
+b 12
+b 14
+b 15
+b 10
+b 16
+b 28
+b 45
+b 46
+b 2
+b 3
+b 14
+b 20
+b 21
+b 8
+b 10
+b 11
+b 13
+b 9
+b 0
+b 9
+b 13
+b 14
+b 0
+b 1
+b 6
+b 2
+b 8
+b 0
+b 2
+b 1
+b 5
+b 9
+b 4
+b 3
+b 7
+b 5
+b 3
+b 0
+b 1
+b 0
+b 1
+b 0
+b 1
+b 0
+b 1
+b 5
+b 64
+b 4
+b 6
+b 8
+b 9
+b 11
+b 13
+b 15
+b 4
+b 1
+b 0
+b 1
+b 0
+b 1
+b 11
+b 12
+b 0
+b 1
+b 7
+b 5
+b 64
+b 4
+b 5
+b 7
+b 8
+b 10
+b 12
+b 14
+b 9
+b 0
+b 21
+b 16
+b 22
+b 26
+b 8
+b 9
+b 6
+b 2
+b 1
+b 2
+b 7
+b 1
+b 2
+b 9
+b 0
+b 2
+b 14
+b 15
+b 17
+b 19
+b 20
+b 28
+b 14
+b 2
+b 18
+b 1
+b 21
+b 1
+b 2
+b 3
+b 5
+b 7
+b 1
+b 1
+b 1
+b 0
+b 1
+b 3
+b 1
+b 1
+b 0
+b 2
+b 3
+b 9
+b 21
+b 22
+b 33
+b 34
+b 3
+b 8
+b 0
+b 2
+b 3
+b 9
+b 21
+b 22
+b 33
+b 34
+b 3
+b 2
+b 2
+b 0
+b 8
+b 6
+b 1
+b 12
+b 13
+b 15
+b 17
+b 12
+b 2
+b 18
+b 19
+b 3
+b 6
+b 8
+b 14
+b 0
+b 2
+b 5
+b 8
+b 7
+b 1
+b 5
+b 4
+b 6
+b 4
+b 1
+b 11
+b 9
+b 12
+b 16
+b 17
+b 25
+b 27
+b 25
+b 1
+b 49
+b 53
+b 11
+b 13
+b 15
+b 3
+b 4
+b 12
+b 14
+b 1
+b 2
+b 4
+b 5
+b 1
+b 1
+b 0
+b 2
+b 25
+b 26
+b 25
+b 1
+b 0
+b 2
+b 4
+b 2
+b 4
+b 5
+b 5
+b 6
+b 10
+b 4
+b 1
+b 9
+b 7
+b 2
+b 3
+b 2
+b 3
+b 15
+b 30
+b 0
+b 1
+b 1
+b 5
+b 9
+b 29
+b 2
+b 3
+b 0
+b 2
+b 2
+b 3
+b 12
+b 13
+b 4
+b 5
+b 7
+b 8
+b 19
+b 4
+b 3
+b 3
+b 1
+b 1
+b 5
+b 7
+b 8
+b 10
+b 11
+b 19
+b 20
+b 24
+b 5
+b 2
+b 8
+b 2
+b 13
+b 2
+b 17
+b 1
+b 4
+b 8
+b 6
+b 5
+b 1
+b 0
+b 4
+b 0
+b 1
+b 2
+b 11
+b 17
+b 19
+b 20
+b 33
+b 17
+b 2
+b 10
+b 1
+b 3
+b 7
+b 3
+b 2
+b 1
+b 2
+b 6
+b 8
+b 10
+b 6
+b 1
+b 0
+b 4
+b 2
+b 1
+b 1
+b 3
+b 13
+b 5
+b 1
+b 0
+b 1
+b 10
+b 12
+b 14
+b 17
+b 19
+b 21
+b 23
+b 23
+b 1
+b 8
+b 16
+b 14
+b 2
+b 7
+b 1
+b 5
+b 4
+b 1
+b 14
+b 15
+b 17
+b 19
+b 20
+b 22
+b 23
+b 0
+b 3
+b 1
+b 1
+b 2
+b 1
+b 0
+b 1
+b 30
+b 48
+b 49
+b 51
+b 55
+b 56
+b 48
+b 2
+b 28
+b 1
+b 7
+b 0
+b 1
+b 0
+b 1
+b 8
+b 9
+b 1
+b 26
+b 1
+b 3
+b 5
+b 3
+b 2
+b 1
+b 1
+b 0
+b 2
+b 7
+b 2
+b 3
+b 5
+b 6
+b 17
+b 0
+b 8
+b 2
+b 1
+b 7
+b 6
+b 1
+b 1
+b 2
+b 5
+b 1
+b 4
+b 6
+b 7
+b 5
+b 7
+b 9
+b 11
+b 13
+b 5
+b 10
+b 14
+b 8
+b 6
+b 3
+b 7
+b 3
+b 2
+b 3
+b 0
+b 2
+b 4
+b 6
+b 3
+b 6
+b 7
+b 13
+b 7
+b 1
+b 5
+b 7
+b 14
+b 43
+b 44
+b 46
+b 48
+b 50
+b 42
+b 1
+b 14
+b 16
+b 2
+b 3
+b 6
+b 2
+b 5
+b 14
+b 15
+b 16
+b 1
+b 10
+b 2
+b 15
+b 0
+b 2
+b 3
+b 5
+b 10
+b 10
+b 5
+b 7
+b 8
+b 10
+b 11
+b 13
+b 0
+b 2
+b 3
+b 5
+b 6
+b 0
+b 2
+b 9
+b 7
+b 3
+b 4
+b 2
+b 4
+b 3
+b 4
+b 3
+b 4
+b 6
+b 0
+b 2
+b 3
+b 0
+b 2
+b 2
+b 3
+b 7
+b 2
+b 1
+b 2
+b 1
+b 25
+b 24
+b 1
+b 4
+b 3
+b 4
+b 6
+b 7
+b 3
+b 6
+b 0
+b 2
+b 3
+b 0
+b 2
+b 0
+b 2
+b 0
+b 3
+b 0
+b 2
+b 12
+b 10
+b 1
+b 6
+b 7
+b 9
+b 10
+b 6
+b 3
+b 8
+b 13
+b 12
+b 2
+b 18
+b 1
+b 5
+b 6
+b 13
+b 15
+b 16
+b 13
+b 2
+b 16
+b 39
+b 14
+b 3
+b 1
+b 0
+b 1
+b 17
+b 0
+b 4
+b 33
+b 35
+b 37
+b 35
+b 1
+b 3
+b 18
+b 19
+b 16
+b 2
+b 1
+b 18
+b 25
+b 2
+b 3
+b 4
+b 6
+b 2
+b 4
+b 2
+b 1
+b 0
+b 1
+b 0
+b 2
+b 3
+b 7
+b 10
+b 12
+b 9
+b 7
+b 1
+b 0
+b 2
+b 4
+b 0
+b 1
+b 37
+b 38
+b 40
+b 41
+b 2
+b 0
+b 4
+b 11
+b 7
+b 22
+b 32
+b 21
+b 1
+b 7
+b 8
+b 9
+b 3
+b 9
+b 19
+b 9
+b 19
+b 2
+b 9
+b 10
+b 15
+b 17
+b 18
+b 33
+b 34
+b 7
+b 7
+b 0
+b 2
+b 4
+b 2
+b 3
+b 4
+b 24
+b 3
+b 2
+b 0
+b 0
+b 1
+b 3
+b 0
+b 2
+b 3
+b 4
+b 0
+b 0
+b 1
+b 8
+b 17
+b 9
+b 11
+b 0
+b 7
+b 8
+b 9
+b 11
+b 7
+b 1
+b 4
+b 6
+b 7
+b 10
+b 11
+b 5
+b 9
+b 8
+b 1
+b 9
+b 0
+b 2
+b 3
+b 5
+b 0
+b 2
+b 2
+b 2
+b 3
+b 0
+b 2
+b 1
+b 10
+b 12
+b 14
+b 15
+b 17
+b 19
+b 20
+b 22
+b 17
+b 2
+b 18
+b 17
+b 1
+b 16
+b 14
+b 3
+b 7
+b 4
+b 1
+b 5
+b 6
+b 1
+b 5
+b 2
+b 3
+b 4
+b 4
+b 5
+b 0
+b 0
+b 1
+b 6
+b 0
+b 2
+b 3
+b 2
+b 3
+b 5
+b 10
+b 13
+b 15
+b 17
+b 15
+b 1
+b 4
+b 12
+b 12
+b 9
+b 1
+b 16
+b 20
+b 29
+b 31
+b 33
+b 37
+b 19
+b 1
+b 24
+b 1
+b 15
+b 17
+b 19
+b 2
+b 18
+b 21
+b 31
+b 15
+b 1
+b 15
+b 1
+b 25
+b 1
+b 25
+b 1
+b 4
+b 0
+b 2
+b 14
+b 16
+b 18
+b 20
+b 22
+b 23
+b 30
+b 22
+b 2
+b 11
+b 1
+b 3
+b 4
+b 8
+b 9
+b 16
+b 7
+b 0
+b 2
+b 3
+b 0
+b 3
+b 8
+b 9
+b 14
+b 5
+b 7
+b 3
+b 1
+b 6
+b 1
+b 7
+b 19
+b 17
+b 1
+b 0
+b 2
+b 0
+b 1
+b 5
+b 6
+b 8
+b 16
+b 18
+b 19
+b 5
+b 2
+b 1
+b 24
+b 25
+b 27
+b 29
+b 15
+b 16
+b 18
+b 27
+b 7
+b 2
+b 1
+b 2
+b 3
+b 5
+b 9
+b 5
+b 1
+b 0
+b 3
+b 1
+b 1
+b 0
+b 2
+b 4
+b 2
+b 3
+b 0
+b 2
+b 3
+b 3
+b 4
+b 3
+b 1
+b 6
+b 8
+b 10
+b 12
+b 13
+b 2
+b 3
+b 1
+b 5
+b 6
+b 13
+b 10
+b 11
+b 13
+b 14
+b 6
+b 8
+b 11
+b 8
+b 3
+b 3
+b 1
+b 5
+b 6
+b 10
+b 8
+b 1
+b 13
+b 0
+b 10
+b 1
+b 3
+b 11
+b 13
+b 14
+b 11
+b 2
+b 6
+b 8
+b 1
+b 4
+b 1
+b 0
+b 1
+b 2
+b 6
+b 6
+b 7
+b 10
+b 12
+b 1
+b 5
+b 2
+b 3
+b 16
+b 20
+b 0
+b 2
+b 7
+b 8
+b 10
+b 7
+b 2
+b 1
+b 2
+b 0
+b 2
+b 1
+b 2
+b 21
+b 0
+b 6
+b 2
+b 3
+b 5
+b 10
+b 2
+b 2
+b 6
+b 2
+b 22
+b 23
+b 6
+b 14
+b 2
+b 3
+b 6
+b 7
+b 9
+b 11
+b 12
+b 13
+b 1
+b 9
+b 17
+b 4
+b 10
+b 0
+b 1
+b 3
+b 4
+b 2
+b 0
+b 4
+b 4
+b 7
+b 13
+b 14
+b 16
+b 18
+b 19
+b 20
+b 5
+b 2
+b 14
+b 4
+b 0
+b 2
+b 3
+b 2
+b 4
+b 6
+b 3
+b 5
+b 8
+b 10
+b 11
+b 2
+b 21
+b 22
+b 26
+b 31
+b 0
+b 2
+b 10
+b 23
+b 25
+b 27
+b 29
+b 27
+b 1
+b 22
+b 23
+b 25
+b 33
+b 20
+b 2
+b 30
+b 1
+b 10
+b 12
+b 13
+b 17
+b 5
+b 20
+b 21
+b 23
+b 31
+b 28
+b 10
+b 12
+b 13
+b 16
+b 17
+b 0
+b 1
+b 3
+b 5
+b 8
+b 10
+b 11
+b 5
+b 8
+b 9
+b 11
+b 4
+b 4
+b 4
+b 5
+b 2
+b 0
+b 1
+b 54
+b 55
+b 3
+b 2
+b 1
+b 27
+b 29
+b 30
+b 1
+b 7
+b 9
+b 2
+b 0
+b 1
+b 5
+b 6
+b 12
+b 13
+b 11
+b 2
+b 3
+b 7
+b 5
+b 3
+b 2
+b 0
+b 1
+b 3
+b 2
+b 1
+b 0
+b 1
+b 2
+b 3
+b 13
+b 7
+b 1
+b 3
+b 5
+b 6
+b 8
+b 10
+b 11
+b 8
+b 2
+b 9
+b 3
+b 0
+b 1
+b 2
+b 3
+b 13
+b 2
+b 3
+b 0
+b 9
+b 7
+b 1
+b 3
+b 5
+b 6
+b 8
+b 9
+b 3
+b 4
+b 6
+b 7
+b 9
+b 4
+b 3
+b 1
+b 11
+b 12
+b 14
+b 16
+b 18
+b 0
+b 0
+b 1
+b 6
+b 3
+b 2
+b 6
+b 7
+b 9
+b 11
+b 1
+b 11
+b 12
+b 14
+b 16
+b 18
+b 0
+b 1
+b 1
+b 9
+b 6
+b 0
+b 1
+b 13
+b 0
+b 2
+b 0
+b 2
+b 2
+b 4
+b 7
+b 5
+b 6
+b 14
+b 8
+b 1
+b 0
+b 10
+b 11
+b 13
+b 14
+b 2
+b 3
+b 5
+b 6
+b 8
+b 10
+b 11
+b 3
+b 0
+b 12
+b 4
+b 12
+b 14
+b 31
+b 32
+b 1
+b 3
+b 2
+b 11
+b 3
+b 9
+b 12
+b 13
+b 5
+b 6
+b 12
+b 13
+b 16
+b 16
+b 1
+b 4
+b 2
+b 4
+b 3
+b 5
+b 6
+b 5
+b 1
+b 10
+b 20
+b 22
+b 23
+b 25
+b 26
+b 28
+b 47
+b 48
+b 54
+b 25
+b 2
+b 44
+b 1
+b 5
+b 15
+b 30
+b 32
+b 33
+b 36
+b 32
+b 4
+b 14
+b 1
+b 0
+b 2
+b 7
+b 13
+b 29
+b 30
+b 39
+b 29
+b 1
+b 36
+b 2
+b 1
+b 0
+b 1
+b 3
+b 4
+b 18
+b 20
+b 21
+b 23
+b 20
+b 2
+b 2
+b 2
+b 0
+b 3
+b 8
+b 27
+b 6
+b 3
+b 21
+b 1
+b 15
+b 17
+b 18
+b 20
+b 15
+b 2
+b 27
+b 26
+b 1
+b 8
+b 6
+b 1
+b 16
+b 18
+b 20
+b 24
+b 13
+b 1
+b 4
+b 5
+b 7
+b 8
+b 10
+b 11
+b 12
+b 4
+b 3
+b 4
+b 8
+b 3
+b 1
+b 4
+b 6
+b 12
+b 13
+b 0
+b 19
+b 20
+b 26
+b 27
+b 24
+b 2
+b 5
+b 6
+b 0
+b 2
+b 8
+b 14
+b 12
+b 3
+b 7
+b 1
+b 13
+b 19
+b 16
+b 1
+b 1
+b 4
+b 14
+b 16
+b 18
+b 16
+b 1
+b 9
+b 10
+b 18
+b 19
+b 21
+b 23
+b 7
+b 8
+b 10
+b 4
+b 5
+b 10
+b 9
+b 1
+b 0
+b 2
+b 3
+b 6
+b 7
+b 14
+b 2
+b 9
+b 10
+b 12
+b 13
+b 19
+b 20
+b 18
+b 1
+b 8
+b 12
+b 13
+b 6
+b 1
+b 11
+b 2
+b 20
+b 3
+b 10
+b 2
+b 1
+b 8
+b 1
+b 6
+b 0
+b 10
+b 1
+b 2
+b 10
+b 17
+b 22
+b 23
+b 4
+b 5
+b 4
+b 14
+b 24
+b 22
+b 1
+b 8
+b 3
+b 0
+b 2
+b 0
+b 1
+b 2
+b 3
+b 3
+b 4
+b 11
+b 12
+b 14
+b 14
+b 1
+b 3
+b 2
+b 1
+b 9
+b 10
+b 16
+b 7
+b 2
+b 1
+b 0
+b 1
+b 3
+b 5
+b 6
+b 1
+b 1
+b 3
+b 3
+b 4
+b 2
+b 1
+b 0
+b 1
+b 8
+b 3
+b 5
+b 6
+b 8
+b 10
+b 11
+b 13
+b 8
+b 2
+b 18
+b 4
+b 2
+b 3
+b 3
+b 5
+b 5
+b 7
+b 8
+b 5
+b 2
+b 1
+b 2
+b 4
+b 12
+b 0
+b 1
+b 0
+b 4
+b 0
+b 1
+b 6
+b 0
+b 1
+b 0
+b 2
+b 8
+b 3
+b 4
+b 14
+b 14
+b 1
+b 3
+b 4
+b 5
+b 7
+b 9
+b 5
+b 1
+b 4
+b 5
+b 3
+b 4
+b 5
+b 6
+b 8
+b 7
+b 4
+b 5
+b 7
+b 9
+b 10
+b 16
+b 4
+b 5
+b 3
+b 4
+b 10
+b 8
+b 3
+b 3
+b 10
+b 18
+b 8
+b 3
+b 12
+b 1
+b 1
+b 8
+b 9
+b 12
+b 14
+b 15
+b 14
+b 1
+b 10
+b 4
+b 0
+b 2
+b 1
+b 5
+b 4
+b 4
+b 1
+b 12
+b 18
+b 19
+b 4
+b 8
+b 9
+b 3
+b 1
+b 3
+b 1
+b 3
+b 3
+b 3
+b 1
+b 2
+b 32
+b 34
+b 35
+b 35
+b 1
+b 11
+b 0
+b 2
+b 4
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 2
+p 2
+p 0
+p 2
+p 0
+p 2
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 1
+p 1
+p 0
+p 2
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 2
+p 3
+p 1
+p 4
+p 4
+p 4
+p 0
+p 2
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 2
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 3
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 5
+p 5
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 1
+p 0
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 1
+p 0
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 1
+p 3
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 2
+p 2
+p 1
+p 3
+p 3
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 1
+p 0
+p 1
+p 2
+p 3
+p 3
+p 0
+p 1
+p 0
+p 1
+p 1
+p 2
+p 1
+p 2
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 2
+p 3
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 2
+p 2
+p 3
+p 4
+p 5
+p 6
+p 1
+p 1
+p 2
+p 0
+p 0
+p 1
+p 0
+p 0
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 0
+p 1
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 0
+p 2
+p 0
+p 2
+p 0
+p 1
+p 0
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 1
+p 1
+p 2
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 2
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 0
+p 1
+p 1
+p 2
+p 0
+p 1
+p 0
+p 1
+p 0
+p 2
+p 0
+p 2
+p 1
+p 1
+p 3
+p 3
+p 1
+p 2
+p 0
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 2
+p 0
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 3
+p 1
+p 1
+p 2
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 2
+p 1
+p 2
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 0
+p 1
+p 2
+p 2
+p 1
+p 1
+p 4
+p 4
+p 0
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 2
+p 2
+p 3
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 2
+p 2
+p 0
+p 0
+p 0
+p 0
+p 2
+p 1
+p 2
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 2
+p 1
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 0
+p 2
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 4
+p 4
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 0
+p 1
+p 0
+p 2
+p 1
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 2
+p 0
+p 1
+p 1
+p 0
+p 1
+p 0
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 0
+p 0
+p 1
+p 1
+p 1
+p 3
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 4
+p 4
+p 1
+p 2
+p 1
+p 2
+p 2
+p 0
+p 1
+p 0
+p 1
+p 0
+p 2
+p 0
+p 1
+p 2
+p 3
+p 3
+p 0
+p 1
+p 0
+p 2
+p 1
+p 2
+p 1
+p 1
+p 4
+p 4
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 2
+p 4
+p 4
+p 1
+p 2
+p 1
+p 2
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 2
+p 0
+p 0
+p 1
+p 3
+p 1
+p 5
+p 5
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 5
+p 5
+p 0
+p 2
+p 2
+p 0
+p 1
+p 1
+p 0
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 1
+p 2
+p 2
+p 3
+p 4
+p 2
+p 1
+p 0
+p 0
+p 2
+p 0
+p 0
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 2
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 2
+p 0
+p 2
+p 2
+p 0
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 0
+p 3
+p 1
+p 2
+p 3
+p 0
+p 2
+p 1
+p 2
+p 0
+p 0
+p 1
+p 0
+p 0
+p 2
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 3
+p 3
+p 2
+p 3
+p 3
+p 1
+p 5
+p 5
+p 0
+p 0
+p 1
+p 0
+p 0
+p 2
+p 2
+p 0
+p 1
+p 1
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 6
+p 6
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 2
+p 2
+p 1
+p 2
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 1
+p 0
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 1
+p 1
+p 1
+p 1
+p 5
+p 5
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 0
+p 2
+p 2
+p 1
+p 3
+p 0
+p 0
+p 1
+p 1
+p 1
+p 3
+p 3
+p 1
+p 1
+p 0
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 0
+p 0
+p 1
+p 1
+p 2
+p 3
+p 3
+p 3
+p 2
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 0
+p 1
+p 2
+p 2
+p 0
+p 2
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 0
+p 2
+p 0
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 2
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 1
+p 1
+p 1
+p 1
+p 3
+p 0
+p 0
+p 2
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 2
+p 1
+p 1
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 0
+p 1
+p 0
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 0
+p 2
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 0
+p 2
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 3
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 5
+p 5
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 1
+p 2
+p 2
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 2
+p 2
+p 2
+p 2
+p 0
+p 1
+p 0
+p 0
+p 2
+p 2
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 2
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 0
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 0
+p 2
+p 1
+p 1
+p 1
+p 5
+p 5
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 5
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 6
+p 6
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 0
+p 2
+p 2
+p 3
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 2
+p 1
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 0
+p 1
+p 2
+p 3
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 3
+p 1
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 0
+p 2
+p 1
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 2
+p 1
+p 3
+p 3
+p 1
+p 2
+p 2
+p 2
+p 5
+p 5
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 1
+p 2
+p 3
+p 3
+p 1
+p 1
+p 1
+p 1
+p 5
+p 5
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 0
+p 3
+p 1
+p 2
+p 2
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 3
+p 1
+p 1
+p 3
+p 3
+p 1
+p 1
+p 2
+p 0
+p 1
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 6
+p 6
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 0
+p 1
+p 3
+p 0
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 2
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 1
+p 3
+p 4
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 4
+p 0
+p 1
+p 0
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 4
+p 5
+p 1
+p 1
+p 0
+p 2
+p 1
+p 3
+p 2
+p 2
+p 5
+p 5
+p 2
+p 2
+p 3
+p 0
+p 2
+p 2
+p 3
+p 0
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 2
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 5
+p 5
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 2
+p 0
+p 0
+p 2
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 0
+p 2
+p 0
+p 0
+p 1
+p 0
+p 0
+p 2
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 5
+p 5
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 6
+p 6
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 1
+p 4
+p 0
+p 0
+p 1
+p 2
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 0
+p 1
+p 0
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 1
+p 1
+p 0
+p 1
+p 4
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 5
+p 5
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 6
+p 6
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 2
+p 0
+p 0
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 0
+p 0
+p 1
+p 1
+p 2
+p 2
+p 0
+p 2
+p 0
+p 1
+p 1
+p 1
+p 3
+p 3
+p 3
+p 3
+p 0
+p 0
+p 1
+p 2
+p 0
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 0
+p 0
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 0
+p 3
+p 0
+p 0
+p 1
+p 0
+p 0
+p 2
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 0
+p 1
+p 1
+p 1
+p 1
+p 3
+p 0
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 0
+p 2
+p 0
+p 1
+p 2
+p 2
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 3
+p 3
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 3
+p 3
+p 1
+p 3
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 1
+p 1
+p 0
+p 2
+p 2
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 6
+p 6
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 2
+p 0
+p 2
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 0
+p 2
+p 2
+p 2
+p 1
+p 0
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 3
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 1
+p 0
+p 0
+p 2
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 2
+p 0
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 4
+p 4
+p 1
+p 5
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 1
+p 2
+p 3
+p 4
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 3
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 4
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 2
+p 2
+p 0
+p 0
+p 1
+p 2
+p 0
+p 2
+p 2
+p 2
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 2
+p 2
+p 1
+p 3
+p 3
+p 1
+p 1
+p 2
+p 1
+p 3
+p 4
+p 1
+p 2
+p 1
+p 2
+p 3
+p 4
+p 0
+p 2
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 1
+p 1
+p 0
+p 3
+p 2
+p 1
+p 0
+p 2
+p 0
+p 0
+p 2
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 1
+p 0
+p 2
+p 1
+p 3
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 2
+p 2
+p 0
+p 1
+p 1
+p 0
+p 1
+p 2
+p 3
+p 4
+p 1
+p 2
+p 3
+p 3
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 2
+p 1
+p 5
+p 5
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 0
+p 0
+p 2
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 1
+p 3
+p 0
+p 1
+p 0
+p 1
+p 2
+p 4
+p 2
+p 1
+p 0
+p 1
+p 0
+p 1
+p 2
+p 2
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 2
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 2
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 1
+p 1
+p 0
+p 2
+p 0
+p 2
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 2
+p 1
+p 1
+p 2
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 3
+p 3
+p 1
+p 3
+p 2
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 0
+p 2
+p 0
+p 0
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 2
+p 4
+p 5
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 0
+p 0
+p 0
+p 0
+p 2
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 0
+p 1
+p 0
+p 0
+p 2
+p 2
+p 1
+p 2
+p 0
+p 2
+p 0
+p 2
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 0
+p 0
+p 2
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 0
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 3
+p 2
+p 2
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 2
+p 2
+p 0
+p 0
+p 2
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 6
+p 6
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 3
+p 4
+p 0
+p 0
+p 2
+p 2
+p 2
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 2
+p 2
+p 0
+p 0
+p 0
+p 2
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 3
+p 3
+p 1
+p 0
+p 2
+p 1
+p 1
+p 2
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 3
+p 2
+p 0
+p 2
+p 0
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 0
+p 1
+p 0
+p 2
+p 0
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 5
+p 5
+p 0
+p 1
+p 1
+p 0
+p 0
+p 2
+p 0
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 2
+p 0
+p 0
+p 1
+p 0
+p 0
+p 2
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 0
+p 1
+p 2
+p 3
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 6
+p 6
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 2
+p 2
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 2
+p 0
+p 1
+p 2
+p 1
+p 1
+p 0
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 2
+p 2
+p 1
+p 4
+p 4
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 0
+p 0
+p 1
+p 0
+p 0
+p 2
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 2
+p 1
+p 2
+p 4
+p 4
+p 2
+p 0
+p 0
+p 1
+p 0
+p 2
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 1
+p 2
+p 1
+p 1
+p 5
+p 5
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 2
+p 1
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 3
+p 4
+p 0
+p 2
+p 2
+p 3
+p 4
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 3
+p 2
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 0
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 0
+p 1
+p 0
+p 1
+p 2
+p 1
+p 1
+p 1
+p 5
+p 5
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 1
+p 3
+p 3
+p 0
+p 2
+p 0
+p 1
+p 2
+p 2
+p 3
+p 0
+p 2
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 2
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 2
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 0
+p 1
+p 4
+p 1
+p 1
+p 2
+p 0
+p 1
+p 2
+p 1
+p 2
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 0
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 3
+p 1
+p 2
+p 3
+p 3
+p 1
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 2
+p 1
+p 5
+p 5
+p 1
+p 3
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 0
+p 2
+p 0
+p 2
+p 2
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 4
+p 0
+p 2
+p 0
+p 0
+p 1
+p 0
+p 0
+p 2
+p 1
+p 1
+p 3
+p 0
+p 0
+p 0
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 4
+p 5
+p 6
+p 0
+p 1
+p 0
+p 1
+p 0
+p 2
+p 0
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 0
+p 3
+p 0
+p 0
+p 1
+p 0
+p 0
+p 2
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 0
+p 2
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 3
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 2
+p 3
+p 4
+p 2
+p 2
+p 1
+p 0
+p 0
+p 1
+p 2
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 3
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 0
+p 1
+p 1
+p 3
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 2
+p 0
+p 2
+p 1
+p 2
+p 3
+p 3
+p 2
+p 2
+p 1
+p 2
+p 3
+p 3
+p 1
+p 2
+p 1
+p 2
+p 1
+p 4
+p 4
+p 0
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 0
+p 0
+p 0
+p 2
+p 0
+p 3
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 2
+p 0
+p 1
+p 0
+p 0
+p 2
+p 0
+p 0
+p 1
+p 2
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 6
+p 6
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 0
+p 1
+p 0
+p 0
+p 2
+p 0
+p 0
+p 2
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 2
+p 3
+p 2
+p 0
+p 0
+p 3
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 0
+p 2
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 2
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 2
+p 4
+p 0
+p 0
+p 1
+p 0
+p 0
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 4
+p 1
+p 0
+p 2
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 2
+p 1
+p 3
+p 3
+p 0
+p 2
+p 0
+p 1
+p 2
+p 4
+p 2
+p 1
+p 4
+p 4
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 0
+p 2
+p 2
+p 1
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 2
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 6
+p 6
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 2
+p 2
+p 0
+p 1
+p 2
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 0
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 0
+p 1
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 2
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 2
+p 0
+p 1
+p 0
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 1
+p 0
+p 2
+p 1
+p 1
+p 2
+p 1
+p 0
+p 0
+p 1
+p 1
+p 0
+p 2
+p 0
+p 1
+p 2
+p 3
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 3
+p 3
+p 1
+p 2
+p 0
+p 1
+p 0
+p 1
+p 3
+p 3
+p 0
+p 3
+p 0
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 4
+p 4
+p 2
+p 1
+p 5
+p 5
+p 0
+p 1
+p 0
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 0
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 4
+p 4
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 5
+p 1
+p 1
+p 1
+p 5
+p 5
+p 0
+p 2
+p 2
+p 3
+p 3
+p 3
+p 0
+p 1
+p 0
+p 1
+p 1
+p 2
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 1
+p 1
+p 0
+p 1
+p 2
+p 0
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 3
+p 5
+p 0
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 0
+p 0
+p 2
+p 1
+p 1
+p 3
+p 3
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 3
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 2
+p 2
+p 0
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 5
+p 5
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 3
+p 0
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 0
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 3
+p 1
+p 1
+p 0
+p 2
+p 2
+p 0
+p 0
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 4
+p 4
+p 0
+p 1
+p 1
+p 0
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 2
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 2
+p 0
+p 0
+p 1
+p 3
+p 0
+p 1
+p 0
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 4
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 4
+p 0
+p 1
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 0
+p 2
+p 1
+p 0
+p 1
+p 0
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 4
+p 0
+p 0
+p 1
+p 1
+p 2
+p 5
+p 0
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 6
+p 6
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 0
+p 0
+p 1
+p 2
+p 2
+p 3
+p 4
+p 5
+p 2
+p 2
+p 1
+p 1
+p 2
+p 0
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 0
+p 0
+p 2
+p 1
+p 1
+p 7
+p 0
+p 2
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 5
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 1
+p 1
+p 3
+p 0
+p 1
+p 2
+p 3
+p 5
+p 5
+p 1
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 5
+p 5
+p 0
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 0
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 4
+p 5
+p 1
+p 1
+p 1
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 2
+p 0
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 0
+p 0
+p 2
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 2
+p 4
+p 0
+p 0
+p 2
+p 2
+p 2
+p 1
+p 4
+p 4
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 3
+p 0
+p 0
+p 0
+p 0
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 4
+p 4
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 0
+p 2
+p 1
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 4
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 0
+p 0
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 5
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 2
+p 0
+p 1
+p 0
+p 1
+p 2
+p 0
+p 1
+p 0
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 0
+p 0
+p 1
+p 4
+p 0
+p 1
+p 0
+p 0
+p 0
+p 2
+p 0
+p 0
+p 0
+p 1
+p 2
+p 0
+p 0
+p 0
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 1
+p 2
+p 4
+p 0
+p 1
+p 3
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 4
+p 4
+p 0
+p 1
+p 1
+p 0
+p 1
+p 2
+p 0
+p 2
+p 1
+p 0
+p 0
+p 1
+p 2
+p 3
+p 1
+p 0
+p 2
+p 0
+p 1
+p 2
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 2
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 1
+p 2
+p 0
+p 2
+p 1
+p 0
+p 2
+p 1
+p 0
+p 0
+p 2
+p 0
+p 1
+p 0
+p 1
+p 2
+p 2
+p 0
+p 1
+p 2
+p 1
+p 0
+p 2
+p 0
+p 1
+p 1
+p 1
+p 2
+p 1
+p 5
+p 5
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 3
+p 6
+p 1
+p 0
+p 1
+p 0
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 2
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 3
+p 1
+p 0
+p 0
+p 0
+p 2
+p 0
+p 0
+p 0
+p 1
+p 2
+p 1
+p 0
+p 0
+p 0
+p 2
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 1
+p 2
+p 1
+p 1
+p 0
+p 0
+p 2
+p 0
+p 0
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 4
+p 1
+p 1
+p 0
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 5
+p 8
+p 0
+p 0
+p 1
+p 0
+p 0
+p 2
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 4
+p 0
+p 0
+p 1
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 2
+p 0
+p 1
+p 1
+p 1
+p 2
+p 0
+p 0
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 2
+p 1
+p 0
+p 2
+p 0
+p 1
+p 4
+p 4
+p 0
+p 2
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 3
+p 0
+p 3
+p 2
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 0
+p 1
+p 2
+p 1
+p 1
+p 2
+p 4
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 4
+p 0
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 2
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 4
+p 1
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 3
+p 0
+p 0
+p 0
+p 1
+p 2
+p 2
+p 2
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 4
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 5
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 3
+p 3
+p 2
+p 1
+p 1
+p 0
+p 1
+p 1
+p 1
+p 2
+p 1
+p 4
+p 4
+p 1
+p 1
+p 2
+p 3
+p 0
+p 1
+p 1
+p 2
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 1
+p 3
+p 3
+p 2
+p 3
+p 4
+p 7
+p 1
+p 1
+p 3
+p 3
+p 4
+p 0
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 2
+p 0
+p 0
+p 1
+p 0
+p 2
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 2
+p 2
+p 0
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 3
+p 2
+p 1
+p 1
+p 0
+p 0
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 5
+p 6
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 4
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 2
+p 0
+p 0
+p 2
+p 1
+p 2
+p 2
+p 1
+p 0
+p 0
+p 0
+p 2
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 2
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 2
+p 3
+p 2
+p 1
+p 1
+p 5
+p 5
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 0
+p 4
+p 0
+p 2
+p 0
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 0
+p 1
+p 1
+p 1
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 3
+p 2
+p 1
+p 3
+p 3
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 3
+p 1
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 2
+p 1
+p 3
+p 3
+p 1
+p 1
+p 4
+p 0
+p 1
+p 2
+p 1
+p 1
+p 0
+p 1
+p 0
+p 2
+p 2
+p 1
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 3
+p 0
+p 0
+p 2
+p 1
+p 1
+p 1
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 3
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 2
+p 5
+p 7
+p 7
+p 0
+p 1
+p 2
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 2
+p 0
+p 2
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 2
+p 0
+p 1
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 0
+p 1
+p 3
+p 1
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 0
+p 2
+p 4
+p 4
+p 0
+p 1
+p 1
+p 0
+p 1
+p 0
+p 2
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 1
+p 0
+p 2
+p 1
+p 1
+p 3
+p 1
+p 0
+p 1
+p 2
+p 3
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 2
+p 3
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 3
+p 0
+p 1
+p 4
+p 0
+p 0
+p 2
+p 3
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 3
+p 2
+p 2
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 0
+p 1
+p 0
+p 1
+p 4
+p 2
+p 1
+p 3
+p 3
+p 0
+p 0
+p 0
+p 2
+p 0
+p 0
+p 0
+p 1
+p 0
+p 2
+p 0
+p 1
+p 2
+p 0
+p 1
+p 3
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 0
+p 1
+p 2
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 3
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 4
+p 4
+p 0
+p 1
+p 0
+p 1
+p 2
+p 1
+p 1
+p 0
+p 0
+p 1
+p 1
+p 2
+p 2
+p 2
+p 4
+p 4
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 0
+p 2
+p 0
+p 2
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 0
+p 2
+p 0
+p 1
+p 0
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 4
+p 2
+p 2
+p 1
+p 0
+p 1
+p 1
+p 2
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 0
+p 1
+p 0
+p 2
+p 2
+p 2
+p 0
+p 1
+p 0
+p 0
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 0
+p 2
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 0
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 5
+p 1
+p 1
+p 1
+p 4
+p 5
+p 0
+p 0
+p 0
+p 0
+p 0
+p 2
+p 1
+p 2
+p 0
+p 0
+p 0
+p 0
+p 0
+p 2
+p 2
+p 2
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 2
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 3
+p 0
+p 1
+p 2
+p 2
+p 2
+p 0
+p 0
+p 1
+p 0
+p 0
+p 2
+p 3
+p 4
+p 1
+p 3
+p 0
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 3
+p 3
+p 4
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 0
+p 1
+p 0
+p 1
+p 2
+p 2
+p 1
+p 1
+p 4
+p 2
+p 1
+p 1
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 4
+p 0
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 0
+p 1
+p 1
+p 1
+p 2
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 2
+p 0
+p 1
+p 0
+p 2
+p 0
+p 1
+p 2
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 3
+p 0
+p 0
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 4
+p 5
+p 6
+p 0
+p 1
+p 2
+p 1
+p 1
+p 1
+p 0
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 7
+p 7
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 1
+p 11
+p 0
+p 0
+p 0
+p 2
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 2
+p 1
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 2
+p 4
+p 1
+p 3
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 4
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 2
+p 2
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 1
+p 2
+p 1
+p 1
+p 2
+p 4
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 3
+p 2
+p 1
+p 1
+p 1
+p 4
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 2
+p 4
+p 6
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 4
+p 2
+p 1
+p 2
+p 0
+p 0
+p 2
+p 3
+p 5
+p 5
+p 1
+p 2
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 2
+p 1
+p 1
+p 3
+p 3
+p 2
+p 0
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 3
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 2
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 0
+p 2
+p 1
+p 1
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 4
+p 0
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 2
+p 3
+p 0
+p 1
+p 1
+p 3
+p 2
+p 6
+p 6
+p 0
+p 2
+p 2
+p 2
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 4
+p 1
+p 2
+p 4
+p 6
+p 2
+p 2
+p 0
+p 1
+p 0
+p 2
+p 2
+p 1
+p 1
+p 2
+p 0
+p 1
+p 2
+p 2
+p 1
+p 1
+p 0
+p 0
+p 0
+p 2
+p 1
+p 3
+p 4
+p 4
+p 1
+p 5
+p 4
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 3
+p 0
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 4
+p 4
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 1
+p 6
+p 7
+p 7
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 4
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 3
+p 2
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 3
+p 0
+p 0
+p 0
+p 0
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 0
+p 1
+p 2
+p 2
+p 3
+p 3
+p 2
+p 1
+p 2
+p 2
+p 4
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 0
+p 2
+p 2
+p 1
+p 1
+p 0
+p 0
+p 0
+p 3
+p 0
+p 0
+p 2
+p 1
+p 1
+p 1
+p 4
+p 6
+p 6
+p 0
+p 0
+p 2
+p 2
+p 0
+p 0
+p 1
+p 4
+p 0
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 0
+p 1
+p 6
+p 0
+p 1
+p 1
+p 2
+p 3
+p 3
+p 0
+p 1
+p 4
+p 0
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 1
+p 3
+p 1
+p 2
+p 3
+p 0
+p 2
+p 0
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 3
+p 4
+p 2
+p 4
+p 1
+p 2
+p 0
+p 0
+p 3
+p 2
+p 1
+p 2
+p 4
+p 1
+p 2
+p 0
+p 2
+p 1
+p 0
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 3
+p 1
+p 1
+p 1
+p 0
+p 1
+p 0
+p 0
+p 1
+p 2
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 4
+p 4
+p 2
+p 0
+p 0
+p 0
+p 1
+p 3
+p 2
+p 1
+p 1
+p 4
+p 0
+p 1
+p 0
+p 1
+p 2
+p 1
+p 2
+p 3
+p 4
+p 0
+p 1
+p 0
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 4
+p 6
+p 6
+p 0
+p 0
+p 1
+p 5
+p 0
+p 0
+p 1
+p 4
+p 1
+p 1
+p 1
+p 1
+p 6
+p 10
+p 10
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 5
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 1
+p 0
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 1
+p 2
+p 3
+p 3
+p 4
+p 1
+p 2
+p 2
+p 2
+p 4
+p 5
+p 6
+p 7
+p 1
+p 5
+p 0
+p 0
+p 2
+p 4
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 4
+p 4
+p 4
+p 2
+p 4
+p 2
+p 2
+p 1
+p 1
+p 0
+p 2
+p 0
+p 1
+p 2
+p 1
+p 3
+p 5
+p 0
+p 1
+p 3
+p 1
+p 0
+p 0
+p 0
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 6
+p 0
+p 1
+p 1
+p 2
+p 1
+p 5
+p 0
+p 2
+p 1
+p 1
+p 1
+p 1
+p 5
+p 5
+p 0
+p 0
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 2
+p 3
+p 3
+p 2
+p 1
+p 1
+p 2
+p 4
+p 4
+p 1
+p 1
+p 1
+p 4
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 0
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 3
+p 1
+p 3
+p 3
+p 4
+p 1
+p 2
+p 2
+p 3
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 3
+p 1
+p 1
+p 5
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 2
+p 4
+p 1
+p 2
+p 2
+p 2
+p 4
+p 4
+p 1
+p 2
+p 1
+p 4
+p 4
+p 2
+p 1
+p 1
+p 1
+p 0
+p 2
+p 4
+p 1
+p 2
+p 1
+p 1
+p 0
+p 0
+p 0
+p 1
+p 3
+p 3
+p 0
+p 1
+p 5
+p 1
+p 6
+p 1
+p 4
+p 2
+p 2
+p 2
+p 2
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 2
+p 3
+p 0
+p 1
+p 3
+p 1
+p 4
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 3
+p 4
+p 4
+p 1
+p 1
+p 1
+p 0
+p 2
+p 4
+p 6
+p 0
+p 0
+p 0
+p 0
+p 3
+p 3
+p 4
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 3
+p 3
+p 3
+p 1
+p 1
+p 1
+p 4
+p 2
+p 2
+p 3
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 4
+p 1
+p 3
+p 2
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 4
+p 0
+p 0
+p 1
+p 1
+p 5
+p 1
+p 1
+p 1
+p 2
+p 3
+p 4
+p 2
+p 2
+p 2
+p 4
+p 3
+p 4
+p 1
+p 0
+p 0
+p 0
+p 1
+p 4
+p 2
+p 5
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 0
+p 1
+p 2
+p 6
+p 0
+p 1
+p 1
+p 2
+p 1
+p 3
+p 0
+p 0
+p 1
+p 1
+p 1
+p 3
+p 0
+p 1
+p 1
+p 0
+p 1
+p 2
+p 1
+p 1
+p 2
+p 0
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 4
+p 5
+p 6
+p 7
+p 3
+p 6
+p 7
+p 7
+p 1
+p 4
+p 3
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 5
+p 2
+p 1
+p 3
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 0
+p 1
+p 2
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 2
+p 0
+p 0
+p 1
+p 1
+p 2
+p 2
+p 3
+p 0
+p 1
+p 1
+p 2
+p 1
+p 0
+p 1
+p 0
+p 1
+p 2
+p 3
+p 3
+p 5
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 4
+p 0
+p 2
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 5
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 4
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 2
+p 3
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 2
+p 3
+p 3
+p 0
+p 1
+p 3
+p 2
+p 2
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 2
+p 3
+p 1
+p 4
+p 0
+p 0
+p 0
+p 0
+p 3
+p 3
+p 3
+p 0
+p 0
+p 0
+p 1
+p 2
+p 3
+p 4
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 3
+p 0
+p 2
+p 1
+p 1
+p 3
+p 2
+p 3
+p 3
+p 1
+p 2
+p 5
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 2
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 3
+p 1
+p 2
+p 7
+p 3
+p 1
+p 2
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 4
+p 1
+p 3
+p 0
+p 0
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 1
+p 3
+p 5
+p 0
+p 0
+p 2
+p 2
+p 0
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 3
+p 2
+p 6
+p 2
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 1
+p 3
+p 1
+p 5
+p 1
+p 1
+p 1
+p 1
+p 2
+p 4
+p 4
+p 0
+p 1
+p 5
+p 1
+p 1
+p 3
+p 1
+p 3
+p 5
+p 5
+p 1
+p 1
+p 1
+p 5
+p 1
+p 1
+p 1
+p 3
+p 3
+p 0
+p 1
+p 1
+p 0
+p 1
+p 3
+p 0
+p 2
+p 3
+p 1
+p 4
+p 0
+p 1
+p 2
+p 1
+p 2
+p 4
+p 5
+p 5
+p 1
+p 1
+p 1
+p 2
+p 1
+p 4
+p 5
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 2
+p 1
+p 0
+p 0
+p 0
+p 2
+p 2
+p 5
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 2
+p 0
+p 2
+p 2
+p 2
+p 5
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 0
+p 2
+p 1
+p 1
+p 1
+p 0
+p 0
+p 1
+p 0
+p 1
+p 2
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 3
+p 0
+p 0
+p 2
+p 2
+p 0
+p 2
+p 1
+p 1
+p 2
+p 0
+p 1
+p 0
+p 1
+p 5
+p 1
+p 1
+p 1
+p 4
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 4
+p 2
+p 3
+p 3
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 2
+p 3
+p 0
+p 1
+p 1
+p 2
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 3
+p 1
+p 1
+p 3
+p 0
+p 0
+p 0
+p 2
+p 1
+p 0
+p 1
+p 4
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 3
+p 0
+p 0
+p 4
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 4
+p 2
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 2
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 6
+p 5
+p 0
+p 2
+p 0
+p 0
+p 0
+p 1
+p 6
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 3
+p 1
+p 1
+p 0
+p 1
+p 1
+p 0
+p 1
+p 3
+p 1
+p 1
+p 0
+p 1
+p 1
+p 1
+p 4
+p 1
+p 4
+p 5
+p 0
+p 1
+p 0
+p 1
+p 2
+p 1
+p 0
+p 1
+p 0
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 0
+p 1
+p 1
+p 4
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 3
+p 5
+p 1
+p 1
+p 2
+p 6
+p 4
+p 5
+p 1
+p 1
+p 1
+p 1
+p 2
+p 4
+p 5
+p 0
+p 1
+p 2
+p 1
+p 3
+p 0
+p 1
+p 1
+p 0
+p 2
+p 4
+p 1
+p 5
+p 0
+p 1
+p 2
+p 1
+p 1
+p 0
+p 0
+p 2
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 3
+p 0
+p 1
+p 3
+p 3
+p 0
+p 0
+p 1
+p 3
+p 0
+p 1
+p 1
+p 2
+p 6
+p 6
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 3
+p 0
+p 0
+p 0
+p 1
+p 1
+p 6
+p 1
+p 1
+p 1
+p 6
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 2
+p 0
+p 0
+p 3
+p 2
+p 1
+p 3
+p 0
+p 2
+p 0
+p 1
+p 3
+p 1
+p 4
+p 6
+p 0
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 2
+p 5
+p 6
+p 1
+p 3
+p 6
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 3
+p 2
+p 0
+p 0
+p 0
+p 1
+p 3
+p 3
+p 5
+p 3
+p 3
+p 0
+p 0
+p 1
+p 6
+p 3
+p 0
+p 0
+p 0
+p 1
+p 3
+p 5
+p 2
+p 1
+p 3
+p 2
+p 2
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 2
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 2
+p 5
+p 1
+p 3
+p 4
+p 0
+p 1
+p 2
+p 0
+p 1
+p 3
+p 4
+p 1
+p 4
+p 2
+p 1
+p 3
+p 2
+p 3
+p 2
+p 3
+p 1
+p 4
+p 3
+p 0
+p 0
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 0
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 9
+p 0
+p 0
+p 0
+p 1
+p 4
+p 3
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 6
+p 8
+p 8
+p 6
+p 0
+p 1
+p 3
+p 0
+p 0
+p 0
+p 2
+p 2
+p 1
+p 2
+p 5
+p 0
+p 1
+p 1
+p 3
+p 0
+p 1
+p 1
+p 1
+p 2
+p 6
+p 8
+p 1
+p 4
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 4
+p 1
+p 2
+p 7
+p 3
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 4
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 4
+p 1
+p 1
+p 6
+p 3
+p 0
+p 1
+p 3
+p 1
+p 5
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 3
+p 4
+p 1
+p 2
+p 2
+p 4
+p 2
+p 4
+p 0
+p 2
+p 0
+p 1
+p 1
+p 0
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 2
+p 0
+p 1
+p 4
+p 2
+p 1
+p 4
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 2
+p 1
+p 0
+p 1
+p 2
+p 4
+p 3
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 2
+p 1
+p 3
+p 3
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 5
+p 0
+p 1
+p 3
+p 1
+p 0
+p 0
+p 2
+p 4
+p 6
+p 3
+p 3
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 3
+p 1
+p 3
+p 5
+p 4
+p 1
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 4
+p 4
+p 1
+p 5
+p 1
+p 3
+p 2
+p 3
+p 0
+p 0
+p 1
+p 1
+p 4
+p 8
+p 9
+p 3
+p 2
+p 4
+p 2
+p 2
+p 2
+p 1
+p 2
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 2
+p 4
+p 5
+p 8
+p 1
+p 1
+p 4
+p 0
+p 1
+p 3
+p 5
+p 0
+p 1
+p 0
+p 2
+p 7
+p 1
+p 4
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 2
+p 6
+p 0
+p 0
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 3
+p 10
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 2
+p 1
+p 3
+p 5
+p 0
+p 0
+p 0
+p 0
+p 2
+p 3
+p 2
+p 0
+p 1
+p 1
+p 1
+p 1
+p 2
+p 4
+p 6
+p 0
+p 1
+p 6
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 1
+p 6
+p 1
+p 3
+p 4
+p 3
+p 4
+p 1
+p 3
+p 3
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 4
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 5
+p 7
+p 7
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 0
+p 1
+p 5
+p 0
+p 1
+p 1
+p 1
+p 1
+p 0
+p 1
+p 3
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 2
+p 2
+p 1
+p 3
+p 5
+p 2
+p 2
+p 1
+p 3
+p 6
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 6
+p 1
+p 1
+p 2
+p 0
+p 1
+p 4
+p 1
+p 1
+p 0
+p 1
+p 3
+p 0
+p 0
+p 2
+p 4
+p 8
+p 1
+p 2
+p 1
+p 2
+p 0
+p 0
+p 1
+p 1
+p 4
+p 1
+p 7
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 3
+p 2
+p 7
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 6
+p 1
+p 5
+p 0
+p 0
+p 2
+p 0
+p 1
+p 0
+p 1
+p 4
+p 6
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 1
+p 0
+p 2
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 5
+p 1
+p 1
+p 4
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 2
+p 3
+p 4
+p 0
+p 0
+p 0
+p 1
+p 1
+p 4
+p 4
+p 5
+p 0
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 2
+p 5
+p 2
+p 2
+p 3
+p 7
+p 0
+p 3
+p 0
+p 0
+p 0
+p 1
+p 4
+p 4
+p 2
+p 6
+p 1
+p 0
+p 0
+p 1
+p 1
+p 4
+p 0
+p 0
+p 1
+p 5
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 7
+p 8
+p 2
+p 2
+p 1
+p 1
+p 2
+p 0
+p 0
+p 0
+p 1
+p 3
+p 4
+p 3
+p 1
+p 2
+p 8
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 6
+p 0
+p 1
+p 5
+p 0
+p 0
+p 0
+p 1
+p 2
+p 2
+p 6
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 2
+p 0
+p 0
+p 0
+p 2
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 3
+p 6
+p 4
+p 1
+p 4
+p 4
+p 6
+p 1
+p 5
+p 1
+p 6
+p 0
+p 0
+p 0
+p 0
+p 1
+p 4
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 1
+p 5
+p 0
+p 0
+p 3
+p 4
+p 1
+p 4
+p 7
+p 4
+p 3
+p 1
+p 2
+p 4
+p 1
+p 9
+p 5
+p 5
+p 3
+p 1
+p 3
+p 1
+p 4
+p 7
+p 4
+p 4
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 4
+p 6
+p 5
+p 0
+p 0
+p 1
+p 3
+p 1
+p 4
+p 4
+p 1
+p 4
+p 0
+p 1
+p 4
+p 2
+p 0
+p 0
+p 0
+p 0
+p 0
+p 2
+p 4
+p 0
+p 0
+p 0
+p 0
+p 1
+p 3
+p 2
+p 2
+p 0
+p 0
+p 0
+p 0
+p 3
+p 1
+p 1
+p 5
+p 1
+p 2
+p 5
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 3
+p 7
+p 0
+p 1
+p 6
+p 1
+p 3
+p 2
+p 5
+p 1
+p 4
+p 2
+p 5
+p 10
+p 3
+p 4
+p 3
+p 2
+p 5
+p 4
+p 1
+p 1
+p 0
+p 0
+p 1
+p 2
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 1
+p 2
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 3
+p 4
+p 7
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 4
+p 1
+p 3
+p 4
+p 1
+p 1
+p 9
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 6
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 2
+p 3
+p 4
+p 3
+p 0
+p 0
+p 0
+p 1
+p 6
+p 0
+p 0
+p 0
+p 1
+p 4
+p 6
+p 0
+p 1
+p 1
+p 2
+p 4
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 2
+p 7
+p 2
+p 4
+p 0
+p 0
+p 0
+p 1
+p 3
+p 1
+p 2
+p 6
+p 2
+p 0
+p 1
+p 2
+p 5
+p 4
+p 4
+p 6
+p 0
+p 0
+p 3
+p 5
+p 9
+p 5
+p 9
+p 6
+p 0
+p 0
+p 0
+p 2
+p 5
+p 2
+p 2
+p 1
+p 0
+p 0
+p 0
+p 0
+p 1
+p 3
+p 0
+p 1
+p 4
+p 2
+p 0
+p 1
+p 1
+p 3
+p 0
+p 1
+p 2
+p 1
+p 2
+p 0
+p 1
+p 3
+p 5
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 4
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 0
+p 0
+p 0
+p 1
+p 1
+p 4
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 0
+p 0
+p 0
+p 1
+p 4
+p 4
+p 7
+p 3
+p 7
+p 0
+p 0
+p 2
+p 3
+p 5
+p 6
+p 0
+p 1
+p 6
+p 0
+p 0
+p 1
+p 1
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 0
+p 1
+p 3
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/GT/cow2.lod
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/GT/cow2.lod	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/GT/cow2.lod	(revision 1092)
@@ -0,0 +1,28695 @@
+v 1588
+v 2015
+v 1960
+v 1817
+v 2746
+v 825
+v 2864
+v 246
+v 2315
+v 2748
+v 1696
+v 2866
+v 2182
+v 2778
+v 1348
+v 1887
+v 2543
+v 1326
+v 1424
+v 2504
+v 1289
+v 283
+v 2747
+v 1089
+v 2311
+v 2555
+v 1285
+v 1408
+v 2634
+v 2396
+v 2253
+v 1706
+v 2764
+v 2528
+v 2817
+v 1194
+v 1621
+v 1730
+v 1744
+v 1715
+v 1166
+v 2505
+v 2380
+v 2545
+v 1209
+v 1708
+v 2207
+v 2749
+v 2506
+v 2834
+v 1187
+v 2509
+v 1874
+v 1284
+v 2790
+v 1880
+v 1678
+v 1069
+v 1537
+v 1847
+v 2508
+v 2058
+v 1731
+v 1003
+v 1357
+v 1415
+v 1404
+v 994
+v 2765
+v 2529
+v 2540
+v 1033
+v 1135
+v 2879
+v 2554
+v 2525
+v 2000
+v 1107
+v 807
+v 1470
+v 2007
+v 850
+v 1835
+v 1022
+v 2507
+v 1914
+v 1164
+v 1269
+v 1939
+v 2017
+v 2542
+v 2159
+v 2285
+v 2870
+v 1597
+v 2869
+v 811
+v 696
+v 2752
+v 942
+v 2547
+v 1279
+v 1861
+v 1297
+v 2241
+v 1002
+v 1849
+v 1818
+v 1291
+v 2871
+v 1101
+v 978
+v 2164
+v 896
+v 1589
+v 757
+v 2777
+v 2009
+v 2791
+v 2744
+v 867
+v 2737
+v 2868
+v 1622
+v 2152
+v 792
+v 2585
+v 2033
+v 707
+v 2882
+v 958
+v 1419
+v 1750
+v 2080
+v 1855
+v 2761
+v 2881
+v 2745
+v 1334
+v 2076
+v 1647
+v 1473
+v 1674
+v 2043
+v 1583
+v 2511
+v 2024
+v 1759
+v 1115
+v 1117
+v 2730
+v 2634
+v 2526
+v 2168
+v 2317
+v 2815
+v 2487
+v 1410
+v 1414
+v 1700
+v 2789
+v 2031
+v 2396
+v 1848
+v 1073
+v 1122
+v 1788
+v 2124
+v 2763
+v 2220
+v 993
+v 1884
+v 1767
+v 2380
+v 2773
+v 1944
+v 1271
+v 2020
+v 2728
+v 2782
+v 1197
+v 1155
+v 1837
+v 1163
+v 1851
+v 1846
+v 1705
+v 1878
+v 1372
+v 1923
+v 1327
+v 1962
+v 1377
+v 1744
+v 2738
+v 2501
+v 2591
+v 2310
+v 1864
+v 1524
+v 1310
+v 2356
+v 1235
+v 1236
+v 2784
+v 2182
+v 1955
+v 2051
+v 2751
+v 2084
+v 2742
+v 2883
+v 2518
+v 1359
+v 1630
+v 2030
+v 2885
+v 2147
+v 1424
+v 1673
+v 2193
+v 1979
+v 1695
+v 1640
+v 2523
+v 2876
+v 1918
+v 1917
+v 1089
+v 2091
+v 2877
+v 2872
+v 2792
+v 1659
+v 2766
+v 1563
+v 2346
+v 2558
+v 1690
+v 1079
+v 2550
+v 2488
+v 752
+v 2500
+v 1428
+v 2739
+v 1960
+v 2278
+v 1408
+v 2315
+v 2001
+v 1591
+v 1608
+v 1336
+v 1338
+v 2345
+v 1159
+v 2543
+v 1569
+v 788
+v 2098
+v 1670
+v 1488
+v 1384
+v 2748
+v 1525
+v 2502
+v 1600
+v 2274
+v 2865
+v 2785
+v 1355
+v 2555
+v 1898
+v 2835
+v 2740
+v 1989
+v 1993
+v 2778
+v 2253
+v 2540
+v 2566
+v 2600
+v 2864
+v 2328
+v 2896
+v 1575
+v 2754
+v 2780
+v 1224
+v 1386
+v 1933
+v 2503
+v 2267
+v 1393
+v 2361
+v 2750
+v 1476
+v 2211
+v 1307
+v 2019
+v 2515
+v 2015
+v 2386
+v 1248
+v 1546
+v 1672
+v 1680
+v 2621
+v 2123
+v 1519
+v 2841
+v 2878
+v 2816
+v 2743
+v 1332
+v 2210
+v 1418
+v 2762
+v 2032
+v 2741
+v 2827
+v 1992
+v 1110
+v 1444
+v 1491
+v 2804
+v 1711
+v 824
+v 2848
+v 2486
+v 2280
+v 2769
+v 2313
+v 2268
+v 2767
+v 1706
+v 2200
+v 1730
+v 1620
+v 1911
+v 1632
+v 1908
+v 2747
+v 2833
+v 2758
+v 2818
+v 2075
+v 2400
+v 2871
+v 1501
+v 2755
+v 2504
+v 2765
+v 1558
+v 1604
+v 2760
+v 1453
+v 2499
+v 2078
+v 1468
+v 1423
+v 2314
+v 2836
+v 2787
+v 1124
+v 2109
+v 2215
+v 1137
+v 1100
+v 2559
+v 2463
+v 2638
+v 2547
+v 1478
+v 2018
+v 2746
+v 1829
+v 1395
+v 2074
+v 1657
+v 1305
+v 2202
+v 2529
+v 1218
+v 2498
+v 2440
+v 2524
+v 2882
+v 2224
+v 1360
+v 2783
+v 1133
+v 2873
+v 1927
+v 1490
+v 1615
+v 2597
+v 2254
+v 2508
+v 1404
+v 2759
+v 2089
+v 2520
+v 1396
+v 1417
+v 1132
+v 1270
+v 2133
+v 2101
+v 2545
+v 2682
+v 1595
+v 1624
+v 2884
+v 2344
+v 2698
+v 1265
+v 2564
+v 1729
+v 1881
+v 2548
+v 1252
+v 2510
+v 1557
+v 1802
+v 2324
+v 2551
+v 2519
+v 2485
+v 2791
+v 2340
+v 1845
+v 2291
+v 1658
+v 2527
+v 2867
+v 2869
+v 2557
+v 1967
+v 1414
+v 2113
+v 2866
+v 1813
+v 1755
+v 1357
+v 2874
+v 2736
+v 2170
+v 1811
+v 2063
+v 1675
+v 2364
+v 2781
+v 2231
+v 1842
+v 1887
+v 1990
+v 1506
+v 2062
+v 2528
+v 2526
+v 1747
+v 2562
+v 2832
+v 1975
+v 1759
+v 1942
+v 2311
+v 2893
+v 2187
+v 2073
+v 2793
+v 1096
+v 1785
+v 1696
+v 2727
+v 2850
+v 2303
+v 2542
+v 1836
+v 1322
+v 2894
+v 2273
+v 2855
+v 1775
+v 2764
+v 2795
+v 2601
+v 2300
+v 2819
+v 1777
+v 2401
+v 1328
+v 2779
+v 2825
+v 2581
+v 1131
+v 2530
+v 1406
+v 2554
+v 2642
+v 2327
+v 2097
+v 1929
+v 2640
+v 2830
+v 2308
+v 2546
+v 2802
+v 2839
+v 2290
+v 2857
+v 2852
+v 2087
+v 2370
+v 2347
+v 1825
+v 2388
+v 2459
+v 2495
+v 1317
+v 2862
+v 1809
+v 2389
+v 2809
+v 2084
+v 2538
+v 2522
+v 2837
+v 2892
+v 2845
+v 2240
+v 2255
+v 1996
+v 1790
+v 2598
+v 1264
+v 1245
+v 2489
+v 2256
+v 1862
+v 2623
+v 2461
+v 2774
+v 2700
+v 1797
+v 2153
+v 2033
+v 2534
+v 2144
+v 2258
+v 2843
+v 2037
+v 2025
+v 1579
+v 1289
+v 1299
+v 2292
+v 2465
+v 2482
+v 1531
+v 1192
+v 2050
+v 1282
+v 1939
+v 1982
+v 2513
+v 2335
+v 2194
+v 1677
+v 2821
+v 2028
+v 2446
+v 1974
+v 2164
+v 2266
+v 2556
+v 1853
+v 1943
+v 1526
+v 2218
+v 2757
+v 1639
+v 1508
+v 2777
+v 2842
+v 1516
+v 2235
+v 2369
+v 2193
+v 2699
+v 2856
+v 1655
+v 2602
+v 2227
+v 1984
+v 2703
+v 1852
+v 1973
+v 2029
+v 1806
+v 2460
+v 1744
+v 2722
+v 2531
+v 2617
+v 2803
+v 2334
+v 2571
+v 2732
+v 1720
+v 1556
+v 2372
+v 1648
+v 2776
+v 2155
+v 1173
+v 1896
+v 1475
+v 2083
+v 2082
+v 1769
+v 2849
+v 1863
+v 2379
+v 2797
+v 2270
+v 2863
+v 1269
+v 2558
+v 1362
+v 2609
+v 1685
+v 1922
+v 2734
+v 2094
+v 1948
+v 2230
+v 2188
+v 2578
+v 2420
+v 2248
+v 2888
+v 2659
+v 1642
+v 2887
+v 2596
+v 2158
+v 2359
+v 1849
+v 1830
+v 2496
+v 1839
+v 1622
+v 1589
+v 1679
+v 2632
+v 2176
+v 1596
+v 2250
+v 2589
+v 2536
+v 2614
+v 2895
+v 2385
+v 2307
+v 1969
+v 2687
+v 2068
+v 2620
+v 2277
+v 2565
+v 2633
+v 2004
+v 2387
+v 2366
+v 2452
+v 1767
+v 1499
+v 2692
+v 1722
+v 2374
+v 1643
+v 2763
+v 2070
+v 2326
+v 1517
+v 2394
+v 2521
+v 2875
+v 2055
+v 1919
+v 1952
+v 2853
+v 2723
+v 2509
+v 2151
+v 1705
+v 1540
+v 2826
+v 2846
+v 1762
+v 2833
+v 2859
+v 1807
+v 2539
+v 2788
+v 1997
+v 1765
+v 1539
+v 2801
+v 1555
+v 2516
+v 1697
+v 2376
+v 2069
+v 2767
+v 2483
+v 1474
+v 1532
+v 2840
+v 2606
+v 2368
+v 1553
+v 2351
+v 2217
+v 2790
+v 2881
+v 1348
+v 2572
+v 1295
+v 1422
+v 2829
+v 2549
+v 2593
+v 2870
+v 2463
+v 1761
+v 2375
+v 2124
+v 2902
+v 2613
+v 2167
+v 2362
+v 2823
+v 2733
+v 2182
+v 2494
+v 2162
+v 1583
+v 2244
+v 1621
+v 2357
+v 1666
+v 2078
+v 2748
+v 2506
+v 2563
+v 1986
+v 2285
+v 1908
+v 2847
+v 1462
+v 1818
+v 2854
+v 2533
+v 1878
+v 2610
+v 1902
+v 2053
+v 2289
+v 2886
+v 2897
+v 1869
+v 1750
+v 2417
+v 2595
+v 1490
+v 2371
+v 1887
+v 2775
+v 1388
+v 2034
+v 2612
+v 1713
+v 2315
+v 2752
+v 2505
+v 1916
+v 1674
+v 2373
+v 2749
+v 1505
+v 2378
+v 2081
+v 2508
+v 1848
+v 1656
+v 2567
+v 2462
+v 2338
+v 1698
+v 2771
+v 2608
+v 1855
+v 2860
+v 2871
+v 1885
+v 1662
+v 1420
+v 2294
+v 2628
+v 2304
+v 2026
+v 2655
+v 2282
+v 1999
+v 2147
+v 1864
+v 2108
+v 2616
+v 2588
+v 2088
+v 2000
+v 2864
+v 2575
+v 1915
+v 2067
+v 1900
+v 2449
+v 2824
+v 1958
+v 2020
+v 1683
+v 1884
+v 2626
+v 2012
+v 1962
+v 2205
+v 2584
+v 2498
+v 2216
+v 2604
+v 2765
+v 2724
+v 2785
+v 2309
+v 2109
+v 2348
+v 2882
+v 2551
+v 2177
+v 2169
+v 2490
+v 2611
+v 2295
+v 2891
+v 2514
+v 2537
+v 2352
+v 2179
+v 2329
+v 1981
+v 2365
+v 2756
+v 1692
+v 1588
+v 2586
+v 2241
+v 1895
+v 2658
+v 2350
+v 2884
+v 1834
+v 1784
+v 2582
+v 1701
+v 2603
+v 1829
+v 1979
+v 2363
+v 2754
+v 2851
+v 1791
+v 2341
+v 2729
+v 2577
+v 1886
+v 2529
+v 2583
+v 1945
+v 1735
+v 2515
+v 2085
+v 1941
+v 2879
+v 2718
+v 1812
+v 1793
+v 2568
+v 2858
+v 2694
+v 2540
+v 2478
+v 2043
+v 2643
+v 2215
+v 2099
+v 1927
+v 1985
+v 2541
+v 2660
+v 2071
+v 2014
+v 2288
+v 2134
+v 1954
+v 2360
+v 2544
+v 1977
+v 1347
+v 2688
+v 2117
+v 2087
+v 2768
+v 1805
+v 2381
+v 2592
+v 2148
+v 2873
+v 2320
+v 2624
+v 2139
+v 2561
+v 2520
+v 2261
+v 1934
+v 2224
+v 2503
+v 2079
+v 2448
+v 2750
+v 2639
+v 1801
+v 2838
+v 1998
+v 2008
+v 1780
+v 2398
+v 1776
+v 2827
+v 2636
+v 2861
+v 1964
+v 2789
+v 2010
+v 2129
+v 1880
+v 2517
+v 2219
+v 1991
+v 2405
+v 2844
+v 2137
+v 2554
+v 2759
+v 2397
+v 2696
+v 2323
+v 2323
+v 2274
+v 1951
+v 1838
+v 2545
+v 2493
+v 1988
+v 2319
+v 2834
+v 2280
+v 2257
+v 2535
+v 2415
+v 2016
+v 2524
+v 1816
+v 1967
+v 2781
+v 2594
+v 2457
+v 2725
+v 2497
+v 2172
+v 2007
+v 2868
+v 1872
+v 2358
+v 2635
+v 2653
+v 2822
+v 2717
+v 2753
+v 2058
+v 2031
+v 2793
+v 2484
+v 2792
+v 2605
+v 2798
+v 1828
+v 2591
+v 2196
+v 2898
+v 2336
+v 2532
+v 2808
+v 2045
+v 1417
+v 2618
+v 2190
+v 2557
+v 2321
+v 2076
+v 2136
+v 1863
+v 2355
+v 1740
+v 2213
+v 2181
+v 2100
+v 1968
+v 2281
+v 2207
+v 2507
+v 1935
+v 2006
+v 2208
+v 2142
+v 2159
+v 1676
+v 1857
+v 2569
+v 2431
+v 2267
+v 2195
+v 2530
+v 2388
+v 2560
+v 2178
+v 2356
+v 2339
+v 2794
+v 2229
+v 2170
+v 1980
+v 1826
+v 2269
+v 2432
+v 2492
+v 2272
+v 2553
+v 2062
+v 1889
+v 2782
+v 2086
+v 2903
+v 1888
+v 2143
+v 2707
+v 2817
+v 2559
+v 2273
+v 2887
+v 2585
+v 1974
+v 2787
+v 2301
+v 1936
+v 2409
+v 2761
+v 2240
+v 2206
+v 2145
+v 2814
+v 2345
+v 2325
+v 2671
+v 1774
+v 2395
+v 1817
+v 2322
+v 2344
+v 2305
+v 2576
+v 1890
+v 2263
+v 1847
+v 1971
+v 1753
+v 2027
+v 2816
+v 2523
+v 2346
+v 2627
+v 2038
+v 2353
+v 2021
+v 2220
+v 2187
+v 2552
+v 2152
+v 2324
+v 2831
+v 2647
+v 2302
+v 2737
+v 2266
+v 2744
+v 2564
+v 1969
+v 2391
+v 2005
+v 2730
+v 2337
+v 2878
+v 1899
+v 1734
+v 2122
+v 2486
+v 2390
+v 1710
+v 1874
+v 1911
+v 1898
+v 2629
+v 2869
+v 2013
+v 2783
+v 2399
+v 2063
+v 2786
+v 2312
+v 1939
+v 2392
+v 2615
+v 1760
+v 2637
+v 2770
+v 2184
+v 2128
+v 2347
+v 2140
+v 2377
+v 2342
+v 2458
+v 1923
+v 2580
+v 2625
+v 2772
+v 2525
+v 2374
+v 2727
+v 2239
+v 2815
+v 2211
+v 2900
+v 2098
+v 2620
+v 2801
+v 1949
+v 2163
+v 2191
+v 2574
+v 2550
+v 2126
+v 2414
+v 2513
+v 2613
+v 1947
+v 1926
+v 1930
+v 2489
+v 2488
+v 2333
+v 2231
+v 1843
+v 2570
+v 2017
+v 2563
+v 2186
+v 2092
+v 2686
+v 2784
+v 2672
+v 1706
+v 2225
+v 2883
+v 1678
+v 2542
+v 2221
+v 2590
+v 2107
+v 2403
+v 1921
+v 2599
+v 2385
+v 2828
+v 2426
+v 2154
+v 1730
+v 2023
+v 2330
+v 2306
+v 2104
+v 2354
+v 2697
+v 2402
+v 2617
+v 2743
+v 2825
+v 2290
+v 2865
+v 2631
+v 2802
+v 2755
+v 2669
+v 2444
+v 2515
+v 1820
+v 2654
+v 2622
+v 2519
+v 2549
+v 1956
+v 2299
+v 2501
+v 2738
+v 1865
+v 2429
+v 2243
+v 1913
+v 2097
+v 2223
+v 1970
+v 1973
+v 2113
+v 2664
+v 2823
+v 1933
+v 2200
+v 2887
+v 2158
+v 2835
+v 2812
+v 2719
+v 2479
+v 2120
+v 2824
+v 2670
+v 2114
+v 2464
+v 2209
+v 2872
+v 2757
+v 2314
+v 2818
+v 2396
+v 2820
+v 1925
+v 2311
+v 2510
+v 2534
+v 2796
+v 2579
+v 1976
+v 2226
+v 2234
+v 1978
+v 2173
+v 2528
+v 2165
+v 2892
+v 2758
+v 2053
+v 2123
+v 2866
+v 2587
+v 2278
+v 2132
+v 2870
+v 2572
+v 2555
+v 2349
+v 2731
+v 2681
+v 2546
+v 2334
+v 2764
+v 2762
+v 2773
+v 2430
+v 2265
+v 2721
+v 2379
+v 1907
+v 2760
+v 2491
+v 2856
+v 2893
+v 2527
+v 2745
+v 2125
+v 2683
+v 2832
+v 2441
+v 2116
+v 2512
+v 2766
+v 2481
+v 2841
+v 2689
+v 1852
+v 2244
+v 2704
+v 2201
+v 2634
+v 2750
+v 2885
+v 2509
+v 2895
+v 2227
+v 2296
+v 2863
+v 2577
+v 2310
+v 2467
+v 2739
+v 2533
+v 2500
+v 2064
+v 2065
+v 2809
+v 2338
+v 2060
+v 1928
+v 2205
+v 2422
+v 2218
+v 2881
+v 2848
+v 1963
+v 2571
+v 2807
+v 2471
+v 2466
+v 2202
+v 1983
+v 2543
+v 1965
+v 2876
+v 2867
+v 2651
+v 2073
+v 2093
+v 2461
+v 2258
+v 2182
+v 2363
+v 2095
+v 2711
+v 2601
+v 2874
+v 2214
+v 2556
+v 2662
+v 2541
+v 2197
+v 2726
+v 2121
+v 2888
+v 2450
+v 2554
+v 2300
+v 2033
+v 2307
+v 2352
+v 2740
+v 2619
+v 2852
+v 2046
+v 2771
+v 2382
+v 2112
+v 2502
+v 2684
+v 2768
+v 2230
+v 2359
+v 2247
+v 2454
+v 2842
+v 2470
+v 2889
+v 2044
+v 2778
+v 2710
+v 2009
+v 2597
+v 2285
+v 2419
+v 2868
+v 2372
+v 2811
+v 2179
+v 2526
+v 2790
+v 2245
+v 2531
+v 2364
+v 2361
+v 2255
+v 2108
+v 2839
+v 1990
+v 2058
+v 2685
+v 2849
+v 2174
+v 2804
+v 2691
+v 2368
+v 2059
+v 2473
+v 2890
+v 2180
+v 2715
+v 2475
+v 2690
+v 2788
+v 2592
+v 2561
+v 2164
+v 2037
+v 2687
+v 2545
+v 2451
+v 2713
+v 2249
+v 2799
+v 2326
+v 2375
+v 2456
+v 2442
+v 2094
+v 2355
+v 1741
+v 2584
+v 2331
+v 2237
+v 2328
+v 2706
+v 2315
+v 2845
+v 2168
+v 2155
+v 2348
+v 2732
+v 2293
+v 2775
+v 2490
+v 2558
+v 2185
+v 2800
+v 2600
+v 2754
+v 2340
+v 2499
+v 2228
+v 2741
+v 2433
+v 2439
+v 2680
+v 2566
+v 2761
+v 2050
+v 1920
+v 2701
+v 2066
+v 2089
+v 1771
+v 2833
+v 2267
+v 2413
+v 2851
+v 2292
+v 2175
+v 2598
+v 2474
+v 2822
+v 2850
+v 2072
+v 2192
+v 2286
+v 2389
+v 2421
+v 2001
+v 2232
+v 2079
+v 2573
+v 2276
+v 2735
+v 2387
+v 2611
+v 2380
+v 2548
+v 2083
+v 2236
+v 2837
+v 2661
+v 2793
+v 2146
+v 2341
+v 2061
+v 2798
+v 2742
+v 2791
+v 2313
+v 2400
+v 2652
+v 2506
+v 2270
+v 2268
+v 2538
+v 2090
+v 2785
+v 2410
+v 2435
+v 2076
+v 2346
+v 2877
+v 2857
+v 2096
+v 2336
+v 2858
+v 2749
+v 2638
+v 1884
+v 2642
+v 2056
+v 2166
+v 2838
+v 2284
+v 2714
+v 2335
+v 2103
+v 2843
+v 2621
+v 2746
+v 2525
+v 2251
+v 2612
+v 2241
+v 2648
+v 2365
+v 2373
+v 2716
+v 2803
+v 2682
+v 2826
+v 2604
+v 2700
+v 2516
+v 2135
+v 2488
+v 2628
+v 2210
+v 2476
+v 2844
+v 2440
+v 2273
+v 2496
+v 2484
+v 2322
+v 2879
+v 2291
+v 2694
+v 2455
+v 2693
+v 1960
+v 2505
+v 2679
+v 2821
+v 2695
+v 2219
+v 2734
+v 2578
+v 2207
+v 2508
+v 2269
+v 2472
+v 2797
+v 2142
+v 2150
+v 2514
+v 2640
+v 2656
+v 2177
+v 2728
+v 2220
+v 2698
+v 2712
+v 2459
+v 2453
+v 2390
+v 2370
+v 2736
+v 2391
+v 2810
+v 2482
+v 2289
+v 2401
+v 2751
+v 2765
+v 2149
+v 2091
+v 2626
+v 2384
+v 2805
+v 2199
+v 2717
+v 2250
+v 2722
+v 2511
+v 2297
+v 2416
+v 2627
+v 2733
+v 2705
+v 2494
+v 2034
+v 2280
+v 2815
+v 2277
+v 2248
+v 2444
+v 2353
+v 2660
+v 2581
+v 2539
+v 2853
+v 2618
+v 2157
+v 2806
+v 2657
+v 2411
+v 2841
+v 2602
+v 2153
+v 2865
+v 2883
+v 2275
+v 1823
+v 2274
+v 2723
+v 2671
+v 2468
+v 2327
+v 2383
+v 2859
+v 2386
+v 2337
+v 2483
+v 2868
+v 2574
+v 2529
+v 2133
+v 2518
+v 2547
+v 2834
+v 2832
+v 2760
+v 2888
+v 2607
+v 2792
+v 2233
+v 2848
+v 2480
+v 2316
+v 2397
+v 2212
+v 2755
+v 2320
+v 2614
+v 2418
+v 2635
+v 2872
+v 2780
+v 2779
+v 2362
+v 2659
+v 2303
+v 2376
+v 2902
+v 2650
+v 2412
+v 2873
+v 2504
+v 2689
+v 2357
+v 2699
+v 2875
+v 2531
+v 2899
+v 2782
+v 2653
+v 2593
+v 2262
+v 2298
+v 2242
+v 2654
+v 2366
+v 2428
+v 2874
+v 2283
+v 2636
+v 2686
+v 2647
+v 2399
+v 2724
+v 2294
+v 2747
+v 2238
+v 2637
+v 2649
+v 2608
+v 2530
+v 2222
+v 2406
+v 2718
+v 2436
+v 2769
+v 2582
+v 2708
+v 2676
+v 2748
+v 2644
+v 2367
+v 2855
+v 2398
+v 2434
+v 2555
+v 2795
+v 2846
+v 2521
+v 2415
+v 2781
+v 2160
+v 2465
+v 2189
+v 2526
+v 2596
+v 2616
+v 2606
+v 2263
+v 2646
+v 2776
+v 2667
+v 2164
+v 2703
+v 2378
+v 2804
+v 2729
+v 2354
+v 2432
+v 2304
+v 2569
+v 2603
+v 2537
+v 2264
+v 2575
+v 2448
+v 2408
+v 2203
+v 2464
+v 2610
+v 2862
+v 2396
+v 2478
+v 2344
+v 2630
+v 2497
+v 2371
+v 2470
+v 2753
+v 2710
+v 2392
+v 2374
+v 2551
+v 2393
+v 2696
+v 2672
+v 2394
+v 2369
+v 2890
+v 2457
+v 2632
+v 2572
+v 2772
+v 2279
+v 2522
+v 2662
+v 2532
+v 2230
+v 2609
+v 2675
+v 2590
+v 2431
+v 2864
+v 2317
+v 2813
+v 2901
+v 2309
+v 2469
+v 2894
+v 2424
+v 2761
+v 2567
+v 2422
+v 2837
+v 2557
+v 2568
+v 2661
+v 2445
+v 2438
+v 2789
+v 2492
+v 2774
+v 2506
+v 2850
+v 2329
+v 2720
+v 2665
+v 2323
+v 2895
+v 2226
+v 2624
+v 2744
+v 2528
+v 2882
+v 2869
+v 2234
+v 2737
+v 2544
+v 2190
+v 2271
+v 2487
+v 2678
+v 2843
+v 2893
+v 2811
+v 2481
+v 2583
+v 2605
+v 2867
+v 2871
+v 2535
+v 2674
+v 2475
+v 2338
+v 2819
+v 2333
+v 2216
+v 2857
+v 2570
+v 2764
+v 2824
+v 2578
+v 2704
+v 2527
+v 2641
+v 2878
+v 2767
+v 2690
+v 2670
+v 2524
+v 2446
+v 2285
+v 2509
+v 2359
+v 2757
+v 2536
+v 2477
+v 2407
+v 2430
+v 2427
+v 2840
+v 2842
+v 2836
+v 2818
+v 2625
+v 2162
+v 2668
+v 2821
+v 2697
+v 2645
+v 2440
+v 2229
+v 2553
+v 2885
+v 2702
+v 2404
+v 2835
+v 2282
+v 2334
+v 2732
+v 2854
+v 2802
+v 2738
+v 2501
+v 2595
+v 2495
+v 2808
+v 2849
+v 2308
+v 2342
+v 2571
+v 2377
+v 2556
+v 2828
+v 2623
+v 2615
+v 2517
+v 2416
+v 2538
+v 2903
+v 2360
+v 2633
+v 2693
+v 2453
+v 2777
+v 2716
+v 2547
+v 2514
+v 2883
+v 2827
+v 2449
+v 2692
+v 2235
+v 2826
+v 2588
+v 2452
+v 2847
+v 2395
+v 2580
+v 2324
+v 2755
+v 2347
+v 2898
+v 2688
+v 2461
+v 2866
+v 2476
+v 2585
+v 2560
+v 2564
+v 2794
+v 2433
+v 2788
+v 2259
+v 2891
+v 2489
+v 2565
+v 2471
+v 2752
+v 2886
+v 2786
+v 2617
+v 2860
+v 2379
+v 2730
+v 2326
+v 2825
+v 2687
+v 2213
+v 2735
+v 2598
+v 2363
+v 2709
+v 2549
+v 2500
+v 2548
+v 2555
+v 2743
+v 2739
+v 2685
+v 2336
+v 2728
+v 2803
+v 2402
+v 2358
+v 2762
+v 2523
+v 2712
+v 2409
+v 2325
+v 2785
+v 2829
+v 2766
+v 2691
+v 2879
+v 2451
+v 2343
+v 2594
+v 2884
+v 2552
+v 2505
+v 2756
+v 2550
+v 2707
+v 2502
+v 2545
+v 2717
+v 2620
+v 2385
+v 2751
+v 2787
+v 2486
+v 2554
+v 2330
+v 2496
+v 2896
+v 2790
+v 2740
+v 2542
+v 2507
+v 2673
+v 2619
+v 2586
+v 2353
+v 2412
+v 2319
+v 2626
+v 2382
+v 2763
+v 2462
+v 2381
+v 2855
+v 2664
+v 2689
+v 2650
+v 2350
+v 2778
+v 2649
+v 2791
+v 2701
+v 2839
+v 2711
+v 2575
+v 2749
+v 2862
+v 2450
+v 2639
+v 2562
+v 2584
+v 2479
+v 2719
+v 2305
+v 2822
+v 2773
+v 2603
+v 2792
+v 2419
+v 2715
+v 2815
+v 2741
+v 2522
+v 2510
+v 2341
+v 2519
+v 2727
+v 2541
+v 2795
+v 2784
+v 2493
+v 2498
+v 2723
+v 2600
+v 2873
+v 2454
+v 2780
+v 2301
+v 2511
+v 2718
+v 2457
+v 2783
+v 2696
+v 2503
+v 2758
+v 2882
+v 2483
+v 2362
+v 2610
+v 2473
+v 2851
+v 2478
+v 2799
+v 2574
+v 2776
+v 2899
+v 2388
+v 2396
+v 2428
+v 2658
+v 2816
+v 2592
+v 2425
+v 2757
+v 2627
+v 2713
+v 2667
+v 2355
+v 2569
+v 2856
+v 2871
+v 2346
+v 2559
+v 2372
+v 2894
+v 2611
+v 2400
+v 2876
+v 2468
+v 2331
+v 2525
+v 2892
+v 2858
+v 2602
+v 2731
+v 2666
+v 2420
+v 2863
+v 2443
+v 2597
+v 2397
+v 2571
+v 2635
+v 2838
+v 2488
+v 2638
+v 2674
+v 2734
+v 2563
+v 2530
+v 2750
+v 2812
+v 2834
+v 2469
+v 2631
+v 2361
+v 2836
+v 2474
+v 2447
+v 2797
+v 2561
+v 2817
+v 2463
+v 2844
+v 2814
+v 2515
+v 2484
+v 2324
+v 2678
+v 2509
+v 2698
+v 2640
+v 2380
+v 2628
+v 2775
+v 2625
+v 2363
+v 2807
+v 2785
+v 2527
+v 2588
+v 2351
+v 2539
+v 2459
+v 2540
+v 2622
+v 2465
+v 2365
+v 2448
+v 2604
+v 2609
+v 2401
+v 2587
+v 2349
+v 2442
+v 2681
+v 2485
+v 2601
+v 2379
+v 2551
+v 2703
+v 2411
+v 2603
+v 2431
+v 2777
+v 2491
+v 2339
+v 2369
+v 2766
+v 2714
+v 2327
+v 2585
+v 2538
+v 2706
+v 2607
+v 2531
+v 2772
+v 2529
+v 2444
+v 2618
+v 2576
+v 2790
+v 2532
+v 2398
+v 2779
+v 2392
+v 2390
+v 2782
+v 2753
+v 2546
+v 2770
+v 2636
+v 2870
+v 2340
+v 2828
+v 2370
+v 2686
+v 2867
+v 2550
+v 2466
+v 2589
+v 2886
+v 2692
+v 2426
+v 2452
+v 2613
+v 2458
+v 2788
+v 2496
+v 2702
+v 2903
+v 2743
+v 2730
+v 2536
+v 2568
+v 2334
+v 2573
+v 2652
+v 2722
+v 2630
+v 2634
+v 2421
+v 2338
+v 2357
+v 2768
+v 2877
+v 2724
+v 2389
+v 2456
+v 2860
+v 2769
+v 2557
+v 2482
+v 2646
+v 2374
+v 2595
+v 2436
+v 2874
+v 2847
+v 2387
+v 2382
+v 2460
+v 2789
+v 2408
+v 2717
+v 2804
+v 2606
+v 2600
+v 2359
+v 2360
+v 2787
+v 2555
+v 2854
+v 2413
+v 2619
+v 2438
+v 2786
+v 2735
+v 2733
+v 2841
+v 2487
+v 2367
+v 2494
+v 2560
+v 2530
+v 2832
+v 2802
+v 2742
+v 2748
+v 2848
+v 2764
+v 2522
+v 2763
+v 2383
+v 2344
+v 2647
+v 2386
+v 2840
+v 2464
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+c
+d 190 1 0 0 0
+c
+d 191 1 0 0 0
+c
+d 235 1 0 0 0
+c
+d 518 1 0 0 0
+c
+d 667 1 0 0 0
+c
+d 189 1 0 0 0
+c
+d 747 1 0 0 0
+c
+d 228 1 0 0 0
+c
+d 742 1 0 0 0
+c
+d 187 1 0 0 0
+c
+d 188 1 0 0 0
+c
+d 230 1 0 0 0
+c
+d 745 1 0 0 0
+c
+d 228 1 0 0 0
+c
+d 230 1 0 0 0
+c
+d 745 1 0 0 0
+c
+d 187 1 0 0 0
+c
+d 748 1 0 0 0
+c
+d 225 1 0 0 0
+c
+d 226 1 0 0 0
+c
+d 187 1 0 0 0
+c
+d 688 1 0 0 0
+c
+d 167 1 0 0 0
+c
+d 723 1 0 0 0
+c
+d 187 1 0 0 0
+c
+d 748 1 0 0 0
+c
+d 208 1 0 0 0
+c
+d 209 1 0 0 0
+c
+d 154 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 158 1 0 0 0
+c
+d 163 1 0 0 0
+c
+d 154 1 0 0 0
+c
+d 155 1 0 0 0
+c
+d 236 1 0 0 0
+c
+d 405 1 0 0 0
+c
+d 492 1 0 0 0
+c
+d 535 1 0 0 0
+c
+d 576 1 0 0 0
+c
+d 687 1 0 0 0
+c
+d 189 1 0 0 0
+c
+d 566 1 0 0 0
+c
+d 228 1 0 0 0
+c
+d 229 1 0 0 0
+c
+d 488 1 0 0 0
+c
+d 498 1 0 0 0
+c
+d 228 1 0 0 0
+c
+d 229 1 0 0 0
+c
+d 230 1 0 0 0
+c
+d 187 1 0 0 0
+c
+d 572 1 0 0 0
+c
+d 228 1 0 0 0
+c
+d 298 1 0 0 0
+c
+d 187 1 0 1 0
+c
+d 567 1 0 0 0
+c
+d 504 1 0 0 0
+c
+d 617 1 0 0 0
+c
+d 618 1 0 0 0
+c
+d 187 1 0 0 0
+c
+d 188 1 0 0 0
+c
+d 304 1 0 0 0
+c
+d 592 1 0 0 0
+c
+d 593 1 0 0 0
+c
+d 173 1 0 0 0
+c
+d 174 1 0 0 0
+c
+d 179 1 0 0 0
+c
+d 607 1 0 0 0
+c
+d 608 1 0 0 0
+c
+d 343 1 0 0 0
+c
+d 368 1 0 0 0
+c
+d 236 1 0 0 0
+c
+d 237 1 0 0 0
+c
+d 203 1 0 0 0
+c
+d 290 1 0 0 0
+c
+d 719 1 0 0 0
+c
+d 219 1 0 0 0
+c
+d 220 1 0 0 0
+c
+d 59 1 0 0 0
+c
+d 61 1 0 0 0
+c
+d 726 1 0 0 0
+c
+d 228 1 0 0 0
+c
+d 229 1 0 0 0
+c
+d 189 1 0 0 0
+c
+d 191 1 0 0 0
+c
+d 718 1 0 0 0
+c
+d 187 2 0 0 0
+c
+d 187 2 0 0 0
+c
+d 688 1 0 0 0
+c
+d 95 1 0 0 0
+c
+d 411 1 0 0 0
+c
+d 412 1 0 0 0
+c
+d 154 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 276 1 0 0 0
+c
+d 234 1 0 0 0
+c
+d 235 1 0 0 0
+c
+d 170 1 0 0 0
+c
+d 171 1 0 0 0
+c
+d 535 1 0 0 0
+c
+d 536 1 0 0 0
+c
+d 187 2 0 2 0
+c
+d 748 1 0 0 0
+c
+d 91 1 0 0 0
+c
+d 268 1 0 0 0
+c
+d 153 1 0 0 0
+c
+d 154 1 0 0 0
+c
+d 577 1 0 0 0
+c
+d 578 1 0 0 0
+c
+d 234 1 0 0 0
+c
+d 235 1 0 0 0
+c
+d 81 1 0 0 0
+c
+d 82 1 0 0 0
+c
+d 505 1 0 0 0
+c
+d 506 1 0 0 0
+c
+d 507 1 0 0 0
+c
+d 509 1 0 0 0
+c
+d 236 1 0 0 0
+c
+d 237 1 0 0 0
+c
+d 405 1 0 0 0
+c
+d 206 1 0 0 0
+c
+d 207 1 0 0 0
+c
+d 218 1 0 0 0
+c
+d 490 2 0 0 0
+c
+d 500 1 0 0 0
+c
+d 305 1 0 0 0
+c
+d 307 1 0 0 0
+c
+d 697 1 0 0 0
+c
+d 460 1 0 0 0
+c
+d 461 1 0 0 0
+c
+d 76 1 0 0 0
+c
+d 81 1 0 0 0
+c
+d 82 1 0 0 0
+c
+d 58 1 0 0 0
+c
+d 59 1 0 0 0
+c
+d 227 1 0 0 0
+c
+d 236 1 0 0 0
+c
+d 295 1 0 0 0
+c
+d 207 1 0 0 0
+c
+d 219 1 0 0 0
+c
+d 255 1 0 0 0
+c
+d 235 1 0 0 0
+c
+d 236 1 0 0 0
+c
+d 566 1 0 0 0
+c
+d 572 1 0 0 0
+c
+d 5 1 0 0 0
+c
+d 6 1 0 0 0
+c
+d 654 1 0 0 0
+c
+d 304 1 0 0 0
+c
+d 308 1 0 0 0
+c
+d 535 1 0 0 0
+c
+d 536 1 0 0 0
+c
+d 305 1 0 0 0
+c
+d 307 1 0 0 0
+c
+d 158 1 0 0 0
+c
+d 162 1 0 0 0
+c
+d 163 1 0 0 0
+c
+d 492 1 0 0 0
+c
+d 562 1 0 0 0
+c
+d 581 1 0 0 0
+c
+d 582 1 0 0 0
+c
+d 694 1 0 0 0
+c
+d 255 1 0 0 0
+c
+d 404 1 0 0 0
+c
+d 669 1 0 0 0
+c
+d 492 1 0 0 0
+c
+d 535 1 0 0 0
+c
+d 236 1 0 0 0
+c
+d 297 1 0 0 0
+c
+d 489 1 0 0 0
+c
+d 490 1 0 0 0
+c
+d 754 1 0 0 0
+c
+d 277 1 0 0 0
+c
+d 463 1 0 0 0
+c
+d 755 1 0 0 0
+c
+d 504 1 0 0 0
+c
+d 522 1 0 0 0
+c
+d 208 1 0 0 0
+c
+d 209 1 0 0 0
+c
+d 208 1 0 0 0
+c
+d 209 1 0 0 0
+c
+d 219 1 0 0 0
+c
+d 220 1 0 0 0
+c
+d 489 1 0 0 0
+c
+d 498 1 0 1 0
+c
+d 511 1 0 0 0
+c
+d 512 1 0 0 0
+c
+d 520 1 0 0 0
+c
+d 203 1 0 0 0
+c
+d 204 1 0 0 0
+c
+d 154 1 0 0 0
+c
+d 155 1 0 0 0
+c
+d 107 1 0 0 0
+c
+d 108 1 0 0 0
+c
+d 228 1 0 0 0
+c
+d 295 1 0 0 0
+c
+d 296 1 0 0 0
+c
+d 236 1 0 0 0
+c
+d 297 1 0 0 0
+c
+d 99 1 0 0 0
+c
+d 372 1 0 0 0
+c
+d 204 1 0 0 0
+c
+d 205 1 0 0 0
+c
+d 566 1 0 0 0
+c
+d 567 1 0 0 0
+c
+d 153 1 0 0 0
+c
+d 154 1 0 0 0
+c
+d 505 1 0 0 0
+c
+d 506 1 0 0 0
+c
+d 671 1 0 0 0
+c
+d 492 1 0 0 0
+c
+d 535 1 0 0 0
+c
+d 345 1 0 0 0
+c
+d 363 1 0 0 0
+c
+d 364 1 0 0 0
+c
+d 758 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 592 1 0 0 0
+c
+d 488 1 0 1 0
+c
+d 492 1 0 0 0
+c
+d 228 1 0 0 0
+c
+d 229 1 0 0 0
+c
+d 230 1 0 0 0
+c
+d 489 1 0 1 0
+c
+d 562 1 0 1 0
+c
+d 504 1 0 0 0
+c
+d 618 1 0 0 0
+c
+d 236 1 0 0 0
+c
+d 237 1 0 0 0
+c
+d 566 1 0 0 0
+c
+d 573 1 0 0 0
+c
+d 574 1 0 0 0
+c
+d 253 1 0 0 0
+c
+d 573 1 0 0 0
+c
+d 574 1 0 0 0
+c
+d 575 1 0 0 0
+c
+d 524 1 0 0 0
+c
+d 525 1 0 0 0
+c
+d 219 1 0 0 0
+c
+d 256 1 0 0 0
+c
+d 421 1 0 0 0
+c
+d 422 1 0 0 0
+c
+d 677 1 0 0 0
+c
+d 202 1 0 0 0
+c
+d 203 1 0 0 0
+c
+d 719 1 0 0 0
+c
+d 505 1 0 0 0
+c
+d 671 1 0 0 0
+c
+d 576 1 0 1 0
+c
+d 577 1 0 1 0
+c
+d 490 1 0 0 0
+c
+d 499 1 0 0 0
+c
+d 4 1 0 0 0
+c
+d 5 1 0 0 0
+c
+d 401 1 0 0 0
+c
+d 402 1 0 0 0
+c
+d 504 1 0 0 0
+c
+d 505 1 0 0 0
+c
+d 614 1 0 0 0
+c
+d 489 1 0 1 0
+c
+d 490 1 0 0 0
+c
+d 207 1 0 0 0
+c
+d 397 1 0 0 0
+c
+d 76 1 0 0 0
+c
+d 85 1 0 0 0
+c
+d 86 1 0 0 0
+c
+d 57 1 0 0 0
+c
+d 105 1 0 0 0
+c
+d 460 1 0 0 0
+c
+d 463 1 0 0 0
+c
+d 755 1 0 0 0
+c
+d 227 1 0 0 0
+c
+d 228 1 0 0 0
+c
+d 234 1 0 0 0
+c
+d 235 1 0 0 0
+c
+d 537 1 0 0 0
+c
+d 538 1 0 0 0
+c
+d 277 1 0 0 0
+c
+d 278 1 0 0 0
+c
+d 279 1 0 0 0
+c
+d 647 1 0 0 0
+c
+d 648 1 0 0 0
+c
+d 342 1 0 0 0
+c
+d 348 1 0 0 0
+c
+d 349 1 0 0 0
+c
+d 190 1 0 0 0
+c
+d 191 1 0 0 0
+c
+d 343 1 0 0 0
+c
+d 344 1 0 0 0
+c
+d 491 1 0 0 0
+c
+d 492 1 0 1 0
+c
+d 202 1 0 0 0
+c
+d 579 1 0 0 0
+c
+d 580 1 0 0 0
+c
+d 221 1 0 0 0
+c
+d 222 1 0 0 0
+c
+d 190 1 0 0 0
+c
+d 191 1 0 0 0
+c
+d 192 1 0 0 0
+c
+d 477 1 0 0 0
+c
+d 478 1 0 0 0
+c
+d 535 1 0 0 0
+c
+d 536 1 0 0 0
+c
+d 201 1 0 0 0
+c
+d 311 1 0 0 0
+c
+d 312 1 0 0 0
+c
+d 156 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 193 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 461 1 0 0 0
+c
+d 107 1 0 0 0
+c
+d 108 1 0 0 0
+c
+d 505 1 0 0 0
+c
+d 614 1 0 0 0
+c
+d 153 1 0 0 0
+c
+d 538 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 628 1 0 0 0
+c
+d 207 1 0 0 0
+c
+d 232 1 0 0 0
+c
+d 233 1 0 0 0
+c
+d 234 1 0 0 0
+c
+d 154 1 0 0 0
+c
+d 155 1 0 0 0
+c
+d 365 1 0 0 0
+c
+d 371 1 0 0 0
+c
+d 342 1 0 0 0
+c
+d 351 1 0 0 0
+c
+d 352 1 0 0 0
+c
+d 227 1 0 0 0
+c
+d 234 1 0 0 0
+c
+d 704 1 0 0 0
+c
+d 423 1 0 0 0
+c
+d 450 1 0 0 0
+c
+d 98 1 0 0 0
+c
+d 99 1 0 0 0
+c
+d 255 1 0 0 0
+c
+d 398 1 0 0 0
+c
+d 669 1 0 0 0
+c
+d 207 1 0 0 0
+c
+d 208 1 0 0 0
+c
+d 225 1 0 0 0
+c
+d 277 1 0 0 0
+c
+d 278 1 0 0 0
+c
+d 519 1 0 0 0
+c
+d 705 1 0 0 0
+c
+d 584 1 0 0 0
+c
+d 585 1 0 0 0
+c
+d 223 1 0 0 0
+c
+d 299 1 0 0 0
+c
+d 364 1 0 0 0
+c
+d 365 1 0 0 0
+c
+d 351 1 0 0 0
+c
+d 352 1 0 0 0
+c
+d 121 1 0 0 0
+c
+d 389 1 0 0 0
+c
+d 175 1 0 0 0
+c
+d 176 1 0 0 0
+c
+d 211 1 0 0 0
+c
+d 299 1 0 0 0
+c
+d 516 1 0 0 0
+c
+d 517 1 0 0 0
+c
+d 401 1 0 0 0
+c
+d 402 1 0 0 0
+c
+d 38 1 0 0 0
+c
+d 55 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 293 1 0 0 0
+c
+d 294 1 0 0 0
+c
+d 662 1 0 0 0
+c
+d 490 1 0 0 0
+c
+d 491 1 0 1 0
+c
+d 561 1 0 0 0
+c
+d 753 1 0 0 0
+c
+d 205 1 0 0 0
+c
+d 206 1 0 0 0
+c
+d 211 1 0 0 0
+c
+d 749 1 0 0 0
+c
+d 90 1 0 0 0
+c
+d 664 1 0 0 0
+c
+d 304 1 0 0 0
+c
+d 308 1 0 0 0
+c
+d 309 1 0 0 0
+c
+d 310 1 0 0 0
+c
+d 305 1 0 1 0
+c
+d 309 1 0 1 0
+c
+d 178 1 0 0 0
+c
+d 607 1 0 0 0
+c
+d 608 1 0 0 0
+c
+d 156 1 0 0 0
+c
+d 158 1 0 0 0
+c
+d 193 1 0 0 0
+c
+d 422 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 100 1 0 0 0
+c
+d 685 1 0 0 0
+c
+d 4 1 0 0 0
+c
+d 36 1 0 0 0
+c
+d 37 1 0 0 0
+c
+d 5 1 0 1 0
+c
+d 6 1 0 0 0
+c
+d 207 1 0 0 0
+c
+d 218 1 0 0 0
+c
+d 219 1 0 0 0
+c
+d 257 1 0 0 0
+c
+d 258 1 0 0 0
+c
+d 581 1 0 0 0
+c
+d 582 1 0 0 0
+c
+d 694 1 0 0 0
+c
+d 207 1 0 0 0
+c
+d 208 1 0 0 0
+c
+d 209 1 0 0 0
+c
+d 57 1 0 0 0
+c
+d 105 1 0 0 0
+c
+d 106 1 0 0 0
+c
+d 152 1 0 0 0
+c
+d 153 1 0 0 0
+c
+d 186 1 0 0 0
+c
+d 721 1 0 0 0
+c
+d 76 1 0 0 0
+c
+d 85 1 0 0 0
+c
+d 255 1 0 0 0
+c
+d 397 1 0 0 0
+c
+d 398 1 0 0 0
+c
+d 559 1 0 0 0
+c
+d 711 1 0 0 0
+c
+d 99 1 0 0 0
+c
+d 100 1 0 0 0
+c
+d 164 1 0 0 0
+c
+d 165 1 0 0 0
+c
+d 85 1 0 0 0
+c
+d 86 1 0 0 0
+c
+d 642 1 0 0 0
+c
+d 643 1 0 0 0
+c
+d 644 1 0 0 0
+c
+d 235 1 0 0 0
+c
+d 517 1 0 1 0
+c
+d 55 1 0 0 0
+c
+d 56 1 0 0 0
+c
+d 342 1 0 0 0
+c
+d 343 1 0 0 0
+c
+d 365 1 0 0 0
+c
+d 371 1 0 0 0
+c
+d 490 1 0 0 0
+c
+d 502 1 0 0 0
+c
+d 211 1 0 0 0
+c
+d 219 1 0 0 0
+c
+d 220 1 0 0 0
+c
+d 422 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 643 1 0 0 0
+c
+d 646 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 276 1 0 0 0
+c
+d 277 1 0 0 0
+c
+d 421 1 0 0 0
+c
+d 422 1 0 0 0
+c
+d 483 1 0 0 0
+c
+d 100 1 0 0 0
+c
+d 374 1 0 0 0
+c
+d 375 1 0 0 0
+c
+d 188 1 0 0 0
+c
+d 342 1 0 0 0
+c
+d 343 1 0 0 0
+c
+d 348 1 0 0 0
+c
+d 349 1 0 0 0
+c
+d 406 1 0 0 0
+c
+d 439 1 0 0 0
+c
+d 342 1 0 0 0
+c
+d 350 1 0 0 0
+c
+d 489 1 0 0 0
+c
+d 498 1 0 0 0
+c
+d 363 1 0 0 0
+c
+d 364 1 0 0 0
+c
+d 348 1 0 0 0
+c
+d 370 1 0 0 0
+c
+d 271 1 0 0 0
+c
+d 703 1 0 0 0
+c
+d 351 1 0 0 0
+c
+d 352 1 0 0 0
+c
+d 363 1 0 0 0
+c
+d 364 1 0 0 0
+c
+d 152 1 0 0 0
+c
+d 306 1 0 0 0
+c
+d 695 1 0 0 0
+c
+d 211 1 0 0 0
+c
+d 212 1 0 0 0
+c
+d 259 1 0 0 0
+c
+d 565 1 0 0 0
+c
+d 154 1 0 0 0
+c
+d 167 1 0 1 0
+c
+d 189 1 0 0 0
+c
+d 578 1 0 0 0
+c
+d 689 1 0 0 0
+c
+d 136 1 0 0 0
+c
+d 358 1 0 0 0
+c
+d 343 1 0 0 0
+c
+d 344 1 0 0 0
+c
+d 159 1 0 0 0
+c
+d 160 1 0 0 0
+c
+d 227 1 0 0 0
+c
+d 231 1 0 0 0
+c
+d 490 1 0 1 0
+c
+d 500 1 0 0 0
+c
+d 750 1 0 0 0
+c
+d 186 1 0 0 0
+c
+d 201 1 0 0 0
+c
+d 250 1 0 0 0
+c
+d 348 1 0 0 0
+c
+d 362 1 0 0 0
+c
+d 157 1 0 1 0
+c
+d 194 1 0 0 0
+c
+d 195 1 0 0 0
+c
+d 621 1 0 0 0
+c
+d 622 1 0 0 0
+c
+d 628 1 0 0 0
+c
+d 189 1 0 0 0
+c
+d 190 1 0 0 0
+c
+d 23 1 0 0 0
+c
+d 62 1 0 0 0
+c
+d 423 1 0 0 0
+c
+d 451 1 0 0 0
+c
+d 452 1 0 0 0
+c
+d 100 1 0 0 0
+c
+d 374 1 0 0 0
+c
+d 488 1 0 0 0
+c
+d 494 1 0 0 0
+c
+d 495 1 0 0 0
+c
+d 492 1 0 0 0
+c
+d 528 1 0 0 0
+c
+d 550 1 0 0 0
+c
+d 552 1 0 0 0
+c
+d 553 1 0 0 0
+c
+d 490 1 0 0 0
+c
+d 501 1 0 0 0
+c
+d 754 1 0 0 0
+c
+d 364 1 0 0 0
+c
+d 365 1 0 0 0
+c
+d 352 1 0 0 0
+c
+d 353 1 0 0 0
+c
+d 227 1 0 0 0
+c
+d 228 1 0 0 0
+c
+d 295 1 0 0 0
+c
+d 520 1 0 0 0
+c
+d 530 1 0 0 0
+c
+d 531 1 0 0 0
+c
+d 460 1 0 0 0
+c
+d 461 1 0 0 0
+c
+d 462 1 0 0 0
+c
+d 488 1 0 0 0
+c
+d 489 1 0 0 0
+c
+d 304 1 0 0 0
+c
+d 596 1 0 0 0
+c
+d 159 1 0 0 0
+c
+d 160 1 0 0 0
+c
+d 203 1 0 0 0
+c
+d 204 1 0 0 0
+c
+d 34 1 0 0 0
+c
+d 35 1 0 0 0
+c
+d 5 1 0 0 0
+c
+d 402 1 0 0 0
+c
+d 511 1 0 0 0
+c
+d 512 1 0 0 0
+c
+d 259 1 0 0 0
+c
+d 260 1 0 0 0
+c
+d 261 1 0 0 0
+c
+d 233 1 0 0 0
+c
+d 234 1 0 0 0
+c
+d 505 1 0 0 0
+c
+d 620 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 621 1 0 0 0
+c
+d 628 1 0 0 0
+c
+d 191 1 0 0 0
+c
+d 192 1 0 0 0
+c
+d 350 1 0 0 0
+c
+d 351 1 0 0 0
+c
+d 57 1 0 0 0
+c
+d 58 1 0 1 0
+c
+d 343 1 0 0 0
+c
+d 344 1 0 0 0
+c
+d 187 2 0 0 0
+c
+d 566 1 0 0 0
+c
+d 572 1 0 0 0
+c
+d 748 1 0 0 0
+c
+d 99 1 0 0 0
+c
+d 100 1 0 0 0
+c
+d 304 1 0 0 0
+c
+d 310 1 0 0 0
+c
+d 225 1 0 0 0
+c
+d 240 1 0 0 0
+c
+d 207 1 0 0 0
+c
+d 550 1 0 0 0
+c
+d 553 1 0 0 0
+c
+d 636 1 0 0 0
+c
+d 730 1 0 0 0
+c
+d 219 1 0 0 0
+c
+d 221 1 0 0 0
+c
+d 353 1 0 0 0
+c
+d 354 1 0 0 0
+c
+d 348 1 0 0 0
+c
+d 364 1 0 0 0
+c
+d 365 1 0 0 0
+c
+d 5 1 0 0 0
+c
+d 18 1 0 0 0
+c
+d 209 1 0 1 0
+c
+d 210 1 0 0 0
+c
+d 536 1 0 0 0
+c
+d 537 1 0 0 0
+c
+d 421 1 0 0 0
+c
+d 452 1 0 0 0
+c
+d 453 1 0 0 0
+c
+d 234 1 0 0 0
+c
+d 235 1 0 0 0
+c
+d 154 1 0 0 0
+c
+d 155 1 0 0 0
+c
+d 15 1 0 0 0
+c
+d 20 1 0 0 0
+c
+d 652 1 0 0 0
+c
+d 160 1 0 0 0
+c
+d 161 1 0 0 0
+c
+d 162 1 0 0 0
+c
+d 757 1 0 0 0
+c
+d 203 1 0 0 0
+c
+d 301 1 0 0 0
+c
+d 187 1 0 0 0
+c
+d 188 1 0 0 0
+c
+d 304 1 0 0 0
+c
+d 647 1 0 0 0
+c
+d 648 1 0 0 0
+c
+d 350 1 0 0 0
+c
+d 351 1 0 0 0
+c
+d 609 1 0 0 0
+c
+d 612 1 0 0 0
+c
+d 613 1 0 0 0
+c
+d 508 1 0 0 0
+c
+d 509 1 0 0 0
+c
+d 223 1 0 1 0
+c
+d 224 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 603 1 0 0 0
+c
+d 505 1 0 0 0
+c
+d 615 1 0 0 0
+c
+d 616 1 0 0 0
+c
+d 615 1 0 0 0
+c
+d 616 1 0 0 0
+c
+d 617 1 0 0 0
+c
+d 59 1 0 0 0
+c
+d 60 1 0 0 0
+c
+d 80 1 0 0 0
+c
+d 81 1 0 0 0
+c
+d 342 1 0 0 0
+c
+d 343 1 0 0 0
+c
+d 352 1 0 0 0
+c
+d 353 1 0 0 0
+c
+d 363 1 0 0 0
+c
+d 364 1 0 0 0
+c
+d 153 1 0 0 0
+c
+d 538 1 0 0 0
+c
+d 345 1 0 0 0
+c
+d 366 1 0 0 0
+c
+d 367 1 0 0 0
+c
+d 488 1 0 0 0
+c
+d 493 1 0 0 0
+c
+d 434 1 0 0 0
+c
+d 435 1 0 0 0
+c
+d 98 1 0 0 0
+c
+d 99 1 0 0 0
+c
+d 228 2 1 0 0
+c
+d 229 1 0 0 0
+c
+d 230 1 0 0 0
+c
+d 12 1 0 0 0
+c
+d 13 1 0 0 0
+c
+d 365 1 0 0 0
+c
+d 486 1 0 0 0
+c
+d 487 1 0 0 0
+c
+d 35 1 0 0 0
+c
+d 36 1 0 0 0
+c
+d 582 1 0 0 0
+c
+d 583 1 0 0 0
+c
+d 152 1 0 0 0
+c
+d 164 1 0 0 0
+c
+d 165 1 0 0 0
+c
+d 167 1 0 0 0
+c
+d 723 1 0 0 0
+c
+d 186 1 0 1 0
+c
+d 259 1 0 0 0
+c
+d 691 1 0 0 0
+c
+d 353 1 0 0 0
+c
+d 354 1 0 0 0
+c
+d 520 1 0 0 0
+c
+d 521 1 0 0 0
+c
+d 351 1 0 0 0
+c
+d 352 1 0 0 0
+c
+d 360 1 0 0 0
+c
+d 207 1 0 0 0
+c
+d 212 1 0 0 0
+c
+d 225 1 0 0 0
+c
+d 348 1 0 0 0
+c
+d 363 1 0 0 0
+c
+d 364 1 0 0 0
+c
+d 88 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 253 1 0 0 0
+c
+d 254 1 0 0 0
+c
+d 350 1 0 0 0
+c
+d 351 1 0 0 0
+c
+d 203 1 0 0 0
+c
+d 204 1 0 0 0
+c
+d 424 2 0 0 0
+c
+d 425 1 0 0 0
+c
+d 352 1 0 0 0
+c
+d 353 1 0 0 0
+c
+d 516 1 0 0 0
+c
+d 517 1 0 0 0
+c
+d 518 1 0 0 0
+c
+d 531 1 0 0 0
+c
+d 518 1 0 0 0
+c
+d 667 1 0 0 0
+c
+d 182 1 0 0 0
+c
+d 183 1 0 0 0
+c
+d 519 1 0 0 0
+c
+d 520 1 0 0 0
+c
+d 706 1 0 0 0
+c
+d 208 1 0 0 0
+c
+d 209 1 0 0 0
+c
+d 488 1 0 0 0
+c
+d 492 1 0 0 0
+c
+d 497 1 0 0 0
+c
+d 208 1 0 0 0
+c
+d 209 1 0 0 0
+c
+d 744 1 0 0 0
+c
+d 169 1 0 0 0
+c
+d 170 1 0 0 0
+c
+d 490 1 0 0 0
+c
+d 499 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 596 1 0 0 0
+c
+d 597 1 0 0 0
+c
+d 7 1 0 0 0
+c
+d 569 1 0 0 0
+c
+d 571 1 0 0 0
+c
+d 154 1 0 0 0
+c
+d 460 1 0 0 0
+c
+d 463 1 0 0 0
+c
+d 39 1 0 0 0
+c
+d 63 1 0 0 0
+c
+d 354 1 0 0 0
+c
+d 355 1 0 0 0
+c
+d 99 1 0 0 0
+c
+d 102 1 0 0 0
+c
+d 735 1 0 0 0
+c
+d 18 1 0 0 0
+c
+d 19 1 0 0 0
+c
+d 5 1 0 0 0
+c
+d 33 1 0 0 0
+c
+d 70 1 0 0 0
+c
+d 209 1 0 1 0
+c
+d 210 1 0 0 0
+c
+d 692 1 0 0 0
+c
+d 344 1 0 0 0
+c
+d 363 1 0 0 0
+c
+d 342 1 0 0 0
+c
+d 356 1 0 0 0
+c
+d 357 1 0 0 0
+c
+d 86 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 125 1 0 0 0
+c
+d 130 1 0 0 0
+c
+d 342 1 0 0 0
+c
+d 352 1 0 0 0
+c
+d 353 1 0 0 0
+c
+d 358 1 0 0 0
+c
+d 219 1 0 0 0
+c
+d 221 1 0 0 0
+c
+d 537 1 0 0 0
+c
+d 538 1 0 0 0
+c
+d 539 1 0 0 0
+c
+d 540 1 0 0 0
+c
+d 710 1 0 0 0
+c
+d 204 1 0 0 0
+c
+d 205 1 0 0 0
+c
+d 76 1 0 0 0
+c
+d 106 1 0 0 0
+c
+d 107 1 0 0 0
+c
+d 258 1 0 0 0
+c
+d 259 1 0 0 0
+c
+d 207 1 0 0 0
+c
+d 208 1 0 1 0
+c
+d 89 1 0 0 0
+c
+d 115 1 0 0 0
+c
+d 109 1 0 0 0
+c
+d 110 1 0 0 0
+c
+d 492 1 0 1 0
+c
+d 493 1 0 0 0
+c
+d 258 1 0 0 0
+c
+d 259 1 0 0 0
+c
+d 202 1 0 0 0
+c
+d 203 1 0 0 0
+c
+d 290 1 0 0 0
+c
+d 154 1 0 0 0
+c
+d 155 1 0 0 0
+c
+d 582 1 0 0 0
+c
+d 588 1 0 0 0
+c
+d 296 1 0 0 0
+c
+d 297 1 0 0 0
+c
+d 422 1 0 0 0
+c
+d 423 1 0 0 0
+c
+d 447 1 0 0 0
+c
+d 566 1 0 0 0
+c
+d 567 1 0 0 0
+c
+d 178 1 0 0 0
+c
+d 179 1 0 0 0
+c
+d 77 1 0 0 0
+c
+d 78 1 0 0 0
+c
+d 519 1 0 0 0
+c
+d 520 1 0 0 0
+c
+d 158 1 0 0 0
+c
+d 194 1 0 0 0
+c
+d 195 1 0 1 0
+c
+d 566 1 0 0 0
+c
+d 574 1 0 0 0
+c
+d 24 1 0 0 0
+c
+d 25 1 0 0 0
+c
+d 202 1 0 0 0
+c
+d 577 1 0 0 0
+c
+d 578 1 0 0 0
+c
+d 59 1 0 0 0
+c
+d 61 1 0 0 0
+c
+d 255 1 0 0 0
+c
+d 398 1 0 0 0
+c
+d 668 1 0 0 0
+c
+d 606 1 0 0 0
+c
+d 607 1 0 1 0
+c
+d 489 1 0 0 0
+c
+d 490 1 0 1 0
+c
+d 420 1 0 0 0
+c
+d 441 1 0 0 0
+c
+d 442 1 0 0 0
+c
+d 258 1 0 0 0
+c
+d 261 1 0 0 0
+c
+d 296 1 0 0 0
+c
+d 297 1 0 0 0
+c
+d 202 1 0 0 0
+c
+d 581 1 0 0 0
+c
+d 693 1 0 0 0
+c
+d 207 1 0 0 0
+c
+d 208 1 0 1 0
+c
+d 178 1 0 0 0
+c
+d 179 1 0 0 0
+c
+d 231 1 0 0 0
+c
+d 232 1 0 0 0
+c
+d 151 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 344 1 0 0 0
+c
+d 348 1 0 0 0
+c
+d 363 1 0 0 0
+c
+d 398 1 0 0 0
+c
+d 404 1 0 0 0
+c
+d 669 1 0 0 0
+c
+d 186 1 0 0 0
+c
+d 303 1 0 0 0
+c
+d 504 1 0 0 0
+c
+d 524 1 0 0 0
+c
+d 557 1 0 0 0
+c
+d 235 1 0 0 0
+c
+d 516 1 0 1 0
+c
+d 551 1 0 0 0
+c
+d 345 1 0 0 0
+c
+d 761 1 0 0 0
+c
+d 151 1 0 0 0
+c
+d 482 1 0 0 0
+c
+d 154 1 0 0 0
+c
+d 155 1 0 0 0
+c
+d 152 1 0 0 0
+c
+d 153 1 0 0 0
+c
+d 513 1 0 0 0
+c
+d 521 1 0 0 0
+c
+d 151 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 39 1 0 0 0
+c
+d 63 1 0 0 0
+c
+d 539 1 0 0 0
+c
+d 630 1 0 0 0
+c
+d 136 1 0 0 0
+c
+d 137 1 0 0 0
+c
+d 174 1 0 0 0
+c
+d 175 1 0 0 0
+c
+d 504 1 0 0 0
+c
+d 524 1 0 0 0
+c
+d 525 1 0 0 0
+c
+d 353 1 0 0 0
+c
+d 354 1 0 0 0
+c
+d 357 1 0 0 0
+c
+d 358 1 0 1 0
+c
+d 359 1 0 0 0
+c
+d 187 2 0 0 0
+c
+d 565 1 0 0 0
+c
+d 505 1 0 1 0
+c
+d 506 1 0 0 0
+c
+d 204 1 0 0 0
+c
+d 300 1 0 0 0
+c
+d 343 1 0 0 0
+c
+d 344 1 0 0 0
+c
+d 202 1 0 0 0
+c
+d 253 1 0 0 0
+c
+d 586 1 0 0 0
+c
+d 227 1 0 0 0
+c
+d 231 1 0 1 0
+c
+d 504 1 0 0 0
+c
+d 505 1 0 0 0
+c
+d 219 1 0 0 0
+c
+d 256 1 0 0 0
+c
+d 257 1 0 0 0
+c
+d 352 1 0 0 0
+c
+d 353 1 0 0 0
+c
+d 355 1 0 0 0
+c
+d 360 1 0 0 0
+c
+d 342 1 0 0 0
+c
+d 348 1 0 0 0
+c
+d 665 1 0 0 0
+c
+d 245 1 0 0 0
+c
+d 247 1 0 0 0
+c
+d 397 1 0 0 0
+c
+d 550 1 0 0 0
+c
+d 154 1 0 0 0
+c
+d 155 1 0 0 0
+c
+d 305 1 0 0 0
+c
+d 307 1 0 0 0
+c
+d 492 1 0 1 0
+c
+d 560 1 0 0 0
+c
+d 561 1 0 0 0
+c
+d 151 1 0 1 0
+c
+d 152 1 0 0 0
+c
+d 57 1 0 0 0
+c
+d 58 1 0 0 0
+c
+d 59 1 0 1 0
+c
+d 60 1 0 0 0
+c
+d 490 1 0 0 0
+c
+d 502 1 0 0 0
+c
+d 503 1 0 0 0
+c
+d 509 1 0 0 0
+c
+d 510 1 0 0 0
+c
+d 24 1 0 0 0
+c
+d 26 1 0 0 0
+c
+d 733 1 0 0 0
+c
+d 348 1 0 0 0
+c
+d 349 1 0 0 0
+c
+d 665 1 0 0 0
+c
+d 95 1 0 0 0
+c
+d 96 1 0 0 0
+c
+d 384 1 0 0 0
+c
+d 356 1 0 0 0
+c
+d 357 1 0 0 0
+c
+d 359 1 0 0 0
+c
+d 236 1 0 0 0
+c
+d 405 1 0 0 0
+c
+d 153 1 0 0 0
+c
+d 154 1 0 0 0
+c
+d 583 1 0 0 0
+c
+d 585 1 0 0 0
+c
+d 160 1 0 0 0
+c
+d 162 1 0 0 0
+c
+d 751 1 0 0 0
+c
+d 757 1 0 0 0
+c
+d 397 1 0 0 0
+c
+d 516 1 0 0 0
+c
+d 532 1 0 0 0
+c
+d 152 1 0 1 0
+c
+d 164 1 0 0 0
+c
+d 165 1 0 1 0
+c
+d 219 1 0 0 0
+c
+d 258 1 0 0 0
+c
+d 390 1 0 0 0
+c
+d 391 1 0 0 0
+c
+d 77 1 0 0 0
+c
+d 78 1 0 0 0
+c
+d 236 1 0 0 0
+c
+d 238 1 0 0 0
+c
+d 210 1 0 0 0
+c
+d 212 1 0 0 0
+c
+d 421 1 0 0 0
+c
+d 677 1 0 0 0
+c
+d 539 1 0 0 0
+c
+d 540 1 0 0 0
+c
+d 245 1 0 0 0
+c
+d 246 1 0 0 0
+c
+d 23 1 0 0 0
+c
+d 38 1 0 0 0
+c
+d 39 1 0 0 0
+c
+d 235 1 0 0 0
+c
+d 518 1 0 0 0
+c
+d 158 1 0 1 0
+c
+d 159 1 0 0 0
+c
+d 160 1 0 0 0
+c
+d 4 1 0 1 0
+c
+d 37 1 0 0 0
+c
+d 465 1 0 0 0
+c
+d 466 1 0 0 0
+c
+d 58 1 0 0 0
+c
+d 59 1 0 1 0
+c
+d 385 1 0 0 0
+c
+d 434 1 0 0 0
+c
+d 504 1 0 0 0
+c
+d 505 1 0 0 0
+c
+d 258 1 0 0 0
+c
+d 259 1 0 0 0
+c
+d 260 1 0 0 0
+c
+d 504 1 0 0 0
+c
+d 505 1 0 0 0
+c
+d 80 1 0 0 0
+c
+d 81 1 0 0 0
+c
+d 227 1 0 0 0
+c
+d 234 1 0 0 0
+c
+d 704 1 0 0 0
+c
+d 189 1 0 0 0
+c
+d 583 1 0 0 0
+c
+d 584 1 0 0 0
+c
+d 33 1 0 0 0
+c
+d 34 1 0 0 0
+c
+d 0 1 0 0 0
+c
+d 1 1 0 0 0
+c
+d 540 1 0 0 0
+c
+d 556 1 0 0 0
+c
+d 397 1 0 0 0
+c
+d 399 1 0 0 0
+c
+d 178 1 0 0 0
+c
+d 179 1 0 0 0
+c
+d 305 1 0 0 0
+c
+d 306 1 0 0 0
+c
+d 14 1 0 0 0
+c
+d 15 1 0 0 0
+c
+d 20 1 0 0 0
+c
+d 152 1 0 0 0
+c
+d 153 1 0 0 0
+c
+d 110 1 0 0 0
+c
+d 274 1 0 0 0
+c
+d 203 1 0 0 0
+c
+d 204 1 0 0 0
+c
+d 300 1 0 0 0
+c
+d 708 1 0 0 0
+c
+d 211 1 0 0 0
+c
+d 220 1 0 0 0
+c
+d 223 1 0 0 0
+c
+d 224 1 0 0 0
+c
+d 489 1 0 0 0
+c
+d 560 1 0 0 0
+c
+d 561 1 0 1 0
+c
+d 489 1 0 0 0
+c
+d 497 1 0 0 0
+c
+d 498 1 0 0 0
+c
+d 506 1 0 1 0
+c
+d 507 1 0 0 0
+c
+d 186 1 0 0 0
+c
+d 303 1 0 0 0
+c
+d 724 1 0 0 0
+c
+d 207 1 0 0 0
+c
+d 212 1 0 0 0
+c
+d 213 1 0 0 0
+c
+d 38 1 0 0 0
+c
+d 39 1 0 0 0
+c
+d 40 1 0 0 0
+c
+d 188 1 0 1 0
+c
+d 189 1 0 0 0
+c
+d 190 1 0 0 0
+c
+d 420 1 0 0 0
+c
+d 421 1 0 0 0
+c
+d 151 1 0 0 0
+c
+d 591 1 0 1 0
+c
+d 601 1 0 0 0
+c
+d 537 1 0 0 0
+c
+d 538 1 0 0 0
+c
+d 488 1 0 0 0
+c
+d 493 1 0 0 0
+c
+d 342 1 0 0 0
+c
+d 343 1 0 0 0
+c
+d 1 1 0 0 0
+c
+d 2 1 0 0 0
+c
+d 649 1 0 0 0
+c
+d 255 1 0 0 0
+c
+d 265 1 0 0 0
+c
+d 424 2 0 0 0
+c
+d 207 1 0 0 0
+c
+d 208 1 0 0 0
+c
+d 35 1 0 0 0
+c
+d 36 1 0 0 0
+c
+d 37 1 0 0 0
+c
+d 481 1 0 0 0
+c
+d 482 1 0 0 0
+c
+d 203 1 0 0 0
+c
+d 227 1 0 0 0
+c
+d 2 1 0 0 0
+c
+d 3 1 0 0 0
+c
+d 235 1 0 0 0
+c
+d 504 1 0 0 0
+c
+d 519 1 0 0 0
+c
+d 540 1 0 0 0
+c
+d 556 1 0 0 0
+c
+d 557 1 0 0 0
+c
+d 558 1 0 0 0
+c
+d 539 1 0 0 0
+c
+d 541 1 0 0 0
+c
+d 433 1 0 0 0
+c
+d 434 1 0 1 0
+c
+d 207 1 0 0 0
+c
+d 255 1 0 0 0
+c
+d 668 1 0 0 0
+c
+d 212 1 0 0 0
+c
+d 213 1 0 0 0
+c
+d 424 1 0 0 0
+c
+d 476 1 0 0 0
+c
+d 432 1 0 0 0
+c
+d 433 1 0 1 0
+c
+d 643 1 0 0 0
+c
+d 645 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 597 1 0 0 0
+c
+d 598 1 0 0 0
+c
+d 211 1 0 0 0
+c
+d 212 1 0 0 0
+c
+d 213 1 0 0 0
+c
+d 235 1 0 0 0
+c
+d 551 1 0 0 0
+c
+d 552 1 0 0 0
+c
+d 252 1 0 0 0
+c
+d 253 1 0 0 0
+c
+d 254 1 0 0 0
+c
+d 364 1 0 0 0
+c
+d 485 1 0 0 0
+c
+d 486 1 0 0 0
+c
+d 536 1 0 0 0
+c
+d 537 1 0 0 0
+c
+d 64 1 0 0 0
+c
+d 65 1 0 0 0
+c
+d 304 1 0 0 0
+c
+d 596 1 0 0 0
+c
+d 220 1 0 0 0
+c
+d 222 1 0 0 0
+c
+d 746 1 0 0 0
+c
+d 103 1 0 0 0
+c
+d 104 1 0 0 0
+c
+d 162 1 0 0 0
+c
+d 163 1 0 0 0
+c
+d 99 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 476 1 0 0 0
+c
+d 477 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 90 1 0 0 0
+c
+d 488 1 0 0 0
+c
+d 493 1 0 0 0
+c
+d 302 1 0 0 0
+c
+d 303 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 158 1 0 0 0
+c
+d 365 1 0 0 0
+c
+d 366 1 0 0 0
+c
+d 588 1 0 0 0
+c
+d 589 1 0 0 0
+c
+d 424 1 0 1 0
+c
+d 425 1 0 0 0
+c
+d 0 1 0 0 0
+c
+d 1 1 0 0 0
+c
+d 12 1 0 0 0
+c
+d 203 1 0 0 0
+c
+d 206 1 0 0 0
+c
+d 207 1 0 0 0
+c
+d 227 1 0 0 0
+c
+d 45 1 0 0 0
+c
+d 612 1 0 0 0
+c
+d 448 1 0 0 0
+c
+d 449 1 0 0 0
+c
+d 92 1 0 0 0
+c
+d 126 1 0 0 0
+c
+d 406 1 0 0 0
+c
+d 466 1 0 0 0
+c
+d 467 1 0 0 0
+c
+d 513 1 0 0 0
+c
+d 514 1 0 0 0
+c
+d 178 1 0 0 0
+c
+d 179 1 0 0 0
+c
+d 235 1 0 0 0
+c
+d 236 1 0 0 0
+c
+d 241 1 0 0 0
+c
+d 152 1 0 0 0
+c
+d 481 1 0 0 0
+c
+d 24 1 0 0 0
+c
+d 642 1 0 1 0
+c
+d 421 1 0 0 0
+c
+d 423 1 0 0 0
+c
+d 483 1 0 0 0
+c
+d 713 1 0 0 0
+c
+d 203 1 0 0 0
+c
+d 204 1 0 0 0
+c
+d 205 1 0 0 0
+c
+d 219 1 0 0 0
+c
+d 391 1 0 0 0
+c
+d 709 1 0 0 0
+c
+d 154 1 0 0 0
+c
+d 277 1 0 0 0
+c
+d 279 1 0 0 0
+c
+d 504 1 1 0 0
+c
+d 520 1 0 0 0
+c
+d 529 1 0 0 0
+c
+d 177 1 0 0 0
+c
+d 245 1 0 1 0
+c
+d 12 1 0 0 0
+c
+d 84 1 0 0 0
+c
+d 579 1 0 0 0
+c
+d 580 1 0 0 0
+c
+d 169 1 0 0 0
+c
+d 170 1 0 0 0
+c
+d 717 1 0 0 0
+c
+d 173 1 0 0 0
+c
+d 178 1 0 0 0
+c
+d 179 1 0 0 0
+c
+d 317 1 0 0 0
+c
+d 318 1 0 0 0
+c
+d 24 1 0 0 0
+c
+d 642 1 0 0 0
+c
+d 643 1 0 0 0
+c
+d 646 1 0 0 0
+c
+d 539 1 0 0 0
+c
+d 540 1 0 0 0
+c
+d 541 1 0 0 0
+c
+d 56 1 0 0 0
+c
+d 66 1 0 0 0
+c
+d 6 1 0 1 0
+c
+d 7 1 0 0 0
+c
+d 568 1 0 0 0
+c
+d 97 1 0 0 0
+c
+d 98 1 0 1 0
+c
+d 101 1 0 0 0
+c
+d 103 1 0 0 0
+c
+d 478 1 0 0 0
+c
+d 479 1 0 0 0
+c
+d 489 1 0 0 0
+c
+d 490 1 0 0 0
+c
+d 3 1 0 0 0
+c
+d 5 1 0 0 0
+c
+d 17 1 0 0 0
+c
+d 70 1 0 0 0
+c
+d 570 1 0 0 0
+c
+d 594 1 0 0 0
+c
+d 595 1 0 0 0
+c
+d 231 1 0 0 0
+c
+d 243 1 0 0 0
+c
+d 632 1 0 0 0
+c
+d 633 1 0 0 0
+c
+d 44 1 0 0 0
+c
+d 109 1 0 0 0
+c
+d 288 1 0 0 0
+c
+d 322 1 0 0 0
+c
+d 323 1 0 0 0
+c
+d 203 1 0 0 0
+c
+d 581 1 0 0 0
+c
+d 102 1 0 0 0
+c
+d 104 1 0 1 0
+c
+d 550 1 0 0 0
+c
+d 551 1 0 0 0
+c
+d 184 1 0 0 0
+c
+d 199 1 0 0 0
+c
+d 319 1 0 0 0
+c
+d 320 1 0 0 0
+c
+d 136 1 0 1 0
+c
+d 342 1 0 0 0
+c
+d 357 1 0 0 0
+c
+d 512 1 0 0 0
+c
+d 513 1 0 0 0
+c
+d 397 1 0 0 0
+c
+d 399 1 0 0 0
+c
+d 7 1 0 0 0
+c
+d 8 1 0 0 0
+c
+d 9 1 0 0 0
+c
+d 345 1 0 0 0
+c
+d 346 1 0 0 0
+c
+d 622 1 0 1 0
+c
+d 624 1 0 0 0
+c
+d 625 1 0 0 0
+c
+d 627 1 0 0 0
+c
+d 489 1 0 0 0
+c
+d 490 1 0 1 0
+c
+d 561 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 121 1 0 0 0
+c
+d 99 1 0 1 0
+c
+d 373 1 0 0 0
+c
+d 374 1 0 0 0
+c
+d 130 1 0 0 0
+c
+d 131 1 0 0 0
+c
+d 97 1 0 0 0
+c
+d 98 1 0 1 0
+c
+d 384 1 0 0 0
+c
+d 397 1 0 0 0
+c
+d 550 1 0 0 0
+c
+d 38 1 0 0 0
+c
+d 40 1 0 0 0
+c
+d 90 1 0 0 0
+c
+d 109 1 0 0 0
+c
+d 280 1 0 0 0
+c
+d 184 1 0 0 0
+c
+d 185 1 0 0 0
+c
+d 420 1 0 0 0
+c
+d 421 1 0 0 0
+c
+d 169 1 0 0 0
+c
+d 314 1 0 0 0
+c
+d 716 1 0 0 0
+c
+d 137 1 0 0 0
+c
+d 138 1 0 0 0
+c
+d 150 1 0 0 0
+c
+d 151 1 0 0 0
+c
+d 137 1 0 0 0
+c
+d 138 1 0 0 0
+c
+d 539 1 0 0 0
+c
+d 541 1 0 0 0
+c
+d 202 1 0 0 0
+c
+d 239 1 0 0 0
+c
+d 492 1 0 0 0
+c
+d 493 1 0 0 0
+c
+d 255 1 0 0 0
+c
+d 264 1 0 0 0
+c
+d 381 1 0 0 0
+c
+d 382 1 0 0 0
+c
+d 150 1 0 0 0
+c
+d 197 1 0 0 0
+c
+d 263 1 0 0 0
+c
+d 622 1 0 0 0
+c
+d 623 1 0 0 0
+c
+d 423 1 0 0 0
+c
+d 424 1 0 0 0
+c
+d 476 1 0 0 0
+c
+d 151 1 0 0 0
+c
+d 601 1 0 0 0
+c
+d 696 1 0 0 0
+c
+d 581 1 0 0 0
+c
+d 587 1 0 0 0
+c
+d 488 1 0 0 0
+c
+d 498 1 0 0 0
+c
+d 267 1 0 0 0
+c
+d 720 1 0 0 0
+c
+d 107 1 0 0 0
+c
+d 108 1 0 0 0
+c
+d 136 1 0 0 0
+c
+d 137 1 0 0 0
+c
+d 331 1 0 0 0
+c
+d 130 1 0 0 0
+c
+d 340 1 0 0 0
+c
+d 341 1 0 0 0
+c
+d 154 1 0 0 0
+c
+d 462 1 0 0 0
+c
+d 151 1 0 0 0
+c
+d 304 1 0 0 0
+c
+d 602 1 0 0 0
+c
+d 5 1 0 1 0
+c
+d 594 1 0 0 0
+c
+d 202 1 0 0 0
+c
+d 578 1 0 0 0
+c
+d 579 1 0 0 0
+c
+d 537 1 0 0 0
+c
+d 538 1 0 0 0
+c
+d 419 1 0 0 0
+c
+d 420 1 0 0 0
+c
+d 681 1 0 0 0
+c
+d 227 1 0 0 0
+c
+d 238 1 0 0 0
+c
+d 239 1 0 0 0
+c
+d 148 1 0 0 0
+c
+d 214 1 0 0 0
+c
+d 177 1 0 0 0
+c
+d 245 1 0 1 0
+c
+d 523 1 0 0 0
+c
+d 524 1 0 0 0
+c
+d 22 1 0 0 0
+c
+d 731 1 0 0 0
+c
+d 148 1 0 0 0
+c
+d 169 1 0 0 0
+c
+d 48 1 0 0 0
+c
+d 49 1 0 0 0
+c
+d 50 1 0 0 0
+c
+d 657 1 0 0 0
+c
+d 461 1 0 0 0
+c
+d 462 1 0 0 0
+c
+d 57 1 0 0 0
+c
+d 60 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 90 1 0 0 0
+c
+d 510 1 0 0 0
+c
+d 511 1 0 0 0
+c
+d 33 1 0 0 0
+c
+d 34 1 0 0 0
+c
+d 153 1 0 0 0
+c
+d 156 1 0 0 0
+c
+d 161 1 0 0 0
+c
+d 202 1 0 0 0
+c
+d 203 1 0 0 0
+c
+d 258 1 0 0 0
+c
+d 259 1 0 0 0
+c
+d 153 1 0 0 0
+c
+d 166 1 0 0 0
+c
+d 237 1 0 0 0
+c
+d 238 1 0 0 0
+c
+d 666 1 0 0 0
+c
+d 23 1 0 0 0
+c
+d 640 1 0 0 0
+c
+d 641 1 0 0 0
+c
+d 153 1 0 0 0
+c
+d 154 1 0 0 0
+c
+d 7 1 0 0 0
+c
+d 638 1 0 0 0
+c
+d 14 1 0 0 0
+c
+d 15 2 0 0 0
+c
+d 492 1 0 0 0
+c
+d 523 1 0 0 0
+c
+d 528 1 0 0 0
+c
+d 34 1 0 1 0
+c
+d 35 1 0 1 0
+c
+d 449 1 0 0 0
+c
+d 450 1 0 0 0
+c
+d 22 1 0 0 0
+c
+d 640 1 0 0 0
+c
+d 424 1 0 0 0
+c
+d 425 1 0 1 0
+c
+d 426 1 0 0 0
+c
+d 7 1 0 0 0
+c
+d 570 1 0 0 0
+c
+d 571 1 0 0 0
+c
+d 421 1 0 0 0
+c
+d 448 1 0 0 0
+c
+d 313 1 0 0 0
+c
+d 314 1 0 0 0
+c
+d 316 1 0 0 0
+c
+d 317 1 0 0 0
+c
+d 413 1 0 0 0
+c
+d 414 1 0 0 0
+c
+d 632 1 0 1 0
+c
+d 635 1 0 0 0
+c
+d 253 1 0 0 0
+c
+d 254 1 0 0 0
+c
+d 320 1 0 0 0
+c
+d 321 1 0 0 0
+c
+d 169 1 0 0 0
+c
+d 380 1 0 0 0
+c
+d 393 1 0 0 0
+c
+d 15 1 0 0 0
+c
+d 16 1 0 0 0
+c
+d 186 1 0 0 0
+c
+d 187 1 0 0 0
+c
+d 251 1 0 0 0
+c
+d 252 1 0 0 0
+c
+d 131 1 0 0 0
+c
+d 132 1 0 0 0
+c
+d 258 1 0 0 0
+c
+d 259 1 0 0 0
+c
+d 390 1 0 1 0
+c
+d 430 1 0 0 0
+c
+d 446 1 0 0 0
+c
+d 57 1 0 0 0
+c
+d 58 1 0 1 0
+c
+d 149 1 0 0 0
+c
+d 150 1 0 0 0
+c
+d 651 1 0 0 0
+c
+d 381 1 0 0 0
+c
+d 382 1 0 1 0
+c
+d 383 1 0 0 0
+c
+d 100 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 242 1 0 0 0
+c
+d 3 1 0 0 0
+c
+d 4 1 0 0 0
+c
+d 169 1 0 0 0
+c
+d 170 1 0 0 0
+c
+d 13 1 0 0 0
+c
+d 14 1 0 0 0
+c
+d 512 1 0 0 0
+c
+d 629 1 0 0 0
+c
+d 631 1 0 0 0
+c
+d 151 1 0 0 0
+c
+d 302 1 0 0 0
+c
+d 76 1 0 0 0
+c
+d 77 1 0 0 0
+c
+d 614 1 0 0 0
+c
+d 620 1 0 0 0
+c
+d 7 1 0 0 0
+c
+d 638 2 0 0 0
+c
+d 14 1 0 0 0
+c
+d 43 1 0 0 0
+c
+d 653 1 0 0 0
+c
+d 109 1 0 0 0
+c
+d 280 1 0 0 0
+c
+d 152 1 0 0 0
+c
+d 164 1 0 0 0
+c
+d 303 1 0 0 0
+c
+d 695 1 0 0 0
+c
+d 2 1 0 0 0
+c
+d 3 1 0 0 0
+c
+d 622 1 0 0 0
+c
+d 623 1 0 0 0
+c
+d 488 1 0 0 0
+c
+d 489 1 0 1 0
+c
+d 4 1 0 0 0
+c
+d 51 1 0 0 0
+c
+d 53 1 0 0 0
+c
+d 610 1 0 0 0
+c
+d 611 1 0 0 0
+c
+d 182 1 0 0 0
+c
+d 183 1 0 0 0
+c
+d 199 1 0 0 0
+c
+d 99 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 102 1 0 1 0
+c
+d 253 1 0 0 0
+c
+d 254 1 0 0 0
+c
+d 512 1 0 0 0
+c
+d 526 1 0 0 0
+c
+d 527 1 0 0 0
+c
+d 38 1 0 0 0
+c
+d 64 1 0 0 0
+c
+d 65 1 0 0 0
+c
+d 421 1 0 1 0
+c
+d 451 1 0 0 0
+c
+d 452 1 0 0 0
+c
+d 90 1 0 0 0
+c
+d 115 1 0 1 0
+c
+d 116 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 622 2 0 0 0
+c
+d 317 1 0 0 0
+c
+d 318 1 0 0 0
+c
+d 333 1 0 0 0
+c
+d 152 1 0 0 0
+c
+d 165 1 0 0 0
+c
+d 77 1 0 0 0
+c
+d 78 1 0 0 0
+c
+d 303 1 0 0 0
+c
+d 312 1 0 0 0
+c
+d 148 1 0 0 0
+c
+d 150 1 0 0 0
+c
+d 217 1 0 0 0
+c
+d 678 1 0 0 0
+c
+d 38 1 0 0 0
+c
+d 39 1 0 0 0
+c
+d 142 1 0 0 0
+c
+d 143 1 0 0 0
+c
+d 419 1 0 0 0
+c
+d 445 1 0 0 0
+c
+d 446 1 0 0 0
+c
+d 344 1 0 0 0
+c
+d 345 1 0 0 0
+c
+d 142 1 0 0 0
+c
+d 143 1 0 0 0
+c
+d 4 1 0 0 0
+c
+d 27 1 0 0 0
+c
+d 28 1 0 0 0
+c
+d 345 1 0 0 0
+c
+d 364 1 0 0 0
+c
+d 758 1 0 0 0
+c
+d 95 1 0 0 0
+c
+d 98 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 107 1 0 0 0
+c
+d 91 1 0 0 0
+c
+d 283 1 0 0 0
+c
+d 284 1 0 0 0
+c
+d 489 1 0 0 0
+c
+d 490 1 0 0 0
+c
+d 0 1 0 0 0
+c
+d 682 1 0 0 0
+c
+d 319 1 0 0 0
+c
+d 320 1 0 0 0
+c
+d 333 1 0 0 0
+c
+d 0 1 0 0 0
+c
+d 1 1 0 0 0
+c
+d 202 1 0 0 0
+c
+d 580 1 0 0 0
+c
+d 693 1 0 0 0
+c
+d 228 2 1 0 0
+c
+d 230 1 0 0 0
+c
+d 745 1 0 0 0
+c
+d 642 1 0 0 0
+c
+d 643 1 0 0 0
+c
+d 644 1 0 0 0
+c
+d 172 1 0 0 0
+c
+d 173 1 0 0 0
+c
+d 148 1 0 0 0
+c
+d 169 1 0 0 0
+c
+d 154 1 0 0 0
+c
+d 462 1 0 0 0
+c
+d 186 1 0 0 0
+c
+d 250 1 0 0 0
+c
+d 251 1 0 0 0
+c
+d 407 1 0 0 0
+c
+d 408 1 0 0 0
+c
+d 184 1 0 0 0
+c
+d 185 1 0 0 0
+c
+d 431 1 0 0 0
+c
+d 432 1 0 0 0
+c
+d 345 1 0 0 0
+c
+d 346 1 0 0 0
+c
+d 181 1 0 0 0
+c
+d 182 1 0 1 0
+c
+d 203 1 0 1 0
+c
+d 390 1 0 0 0
+c
+d 391 1 0 0 0
+c
+d 709 1 0 0 0
+c
+d 345 1 0 0 0
+c
+d 346 1 0 0 0
+c
+d 420 1 0 1 0
+c
+d 459 1 0 0 0
+c
+d 151 1 0 0 0
+c
+d 186 1 0 0 0
+c
+d 302 1 0 0 0
+c
+d 169 1 0 0 0
+c
+d 170 1 0 0 0
+c
+d 171 1 0 0 0
+c
+d 4 1 0 0 0
+c
+d 27 1 0 0 0
+c
+d 53 1 0 0 0
+c
+d 385 1 0 0 0
+c
+d 387 1 0 0 0
+c
+d 388 1 0 0 0
+c
+d 172 1 0 0 0
+c
+d 174 1 0 0 0
+c
+d 175 1 0 0 0
+c
+d 0 1 0 0 0
+c
+d 148 1 0 0 0
+c
+d 181 1 0 0 0
+c
+d 182 1 0 1 0
+c
+d 3 1 0 0 0
+c
+d 70 1 0 0 0
+c
+d 327 1 0 0 0
+c
+d 328 1 0 0 0
+c
+d 57 1 0 0 0
+c
+d 76 1 0 0 0
+c
+d 77 1 0 0 0
+c
+d 424 1 0 1 0
+c
+d 476 1 0 1 0
+c
+d 416 1 0 0 0
+c
+d 417 1 0 0 0
+c
+d 492 1 0 0 0
+c
+d 535 1 0 0 0
+c
+d 3 1 0 0 0
+c
+d 4 1 0 0 0
+c
+d 419 1 0 0 0
+c
+d 444 1 0 0 0
+c
+d 445 1 0 0 0
+c
+d 225 1 0 0 0
+c
+d 240 1 0 0 0
+c
+d 304 1 0 1 0
+c
+d 305 1 0 0 0
+c
+d 0 1 0 0 0
+c
+d 650 1 0 0 0
+c
+d 7 2 0 0 0
+c
+d 8 1 0 0 0
+c
+d 179 1 0 0 0
+c
+d 180 1 0 0 0
+c
+d 397 1 0 0 0
+c
+d 532 1 0 0 0
+c
+d 533 1 0 0 0
+c
+d 489 1 0 0 0
+c
+d 490 1 0 0 0
+c
+d 6 1 0 0 0
+c
+d 7 1 0 0 0
+c
+d 98 2 0 0 0
+c
+d 99 2 0 0 0
+c
+d 179 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 424 1 0 0 0
+c
+d 480 1 0 0 0
+c
+d 739 1 0 0 0
+c
+d 131 1 0 1 0
+c
+d 132 1 0 0 0
+c
+d 236 2 1 0 0
+c
+d 237 2 1 0 0
+c
+d 385 1 0 0 0
+c
+d 388 1 0 0 0
+c
+d 489 1 0 0 0
+c
+d 491 1 0 0 0
+c
+d 501 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 103 1 0 0 0
+c
+d 76 1 0 0 0
+c
+d 80 1 0 0 0
+c
+d 81 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 621 1 0 0 0
+c
+d 419 1 0 0 0
+c
+d 420 1 0 0 0
+c
+d 24 1 0 0 0
+c
+d 645 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 121 1 0 0 0
+c
+d 122 1 0 0 0
+c
+d 259 1 0 0 0
+c
+d 260 1 0 0 0
+c
+d 185 1 0 0 0
+c
+d 512 1 0 0 0
+c
+d 631 1 0 0 0
+c
+d 201 2 1 0 0
+c
+d 202 1 0 0 0
+c
+d 311 1 0 0 0
+c
+d 312 1 0 0 0
+c
+d 57 2 0 0 0
+c
+d 77 1 0 0 0
+c
+d 302 1 0 0 0
+c
+d 303 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 158 1 0 0 0
+c
+d 38 1 0 0 0
+c
+d 40 1 0 0 0
+c
+d 89 1 0 1 0
+c
+d 622 1 0 1 0
+c
+d 489 1 0 0 0
+c
+d 522 1 0 0 0
+c
+d 523 1 0 0 0
+c
+d 560 1 0 0 0
+c
+d 152 1 0 0 0
+c
+d 167 1 0 0 0
+c
+d 2 1 0 0 0
+c
+d 3 1 0 0 0
+c
+d 420 1 0 0 0
+c
+d 442 1 0 0 0
+c
+d 259 1 0 1 0
+c
+d 589 1 0 0 0
+c
+d 130 1 0 1 0
+c
+d 347 1 0 0 0
+c
+d 661 1 0 0 0
+c
+d 583 1 0 0 0
+c
+d 584 1 0 0 0
+c
+d 585 1 0 0 0
+c
+d 513 1 0 0 0
+c
+d 514 1 0 0 0
+c
+d 8 1 0 0 0
+c
+d 570 1 0 0 0
+c
+d 595 1 0 0 0
+c
+d 420 1 0 0 0
+c
+d 421 1 0 0 0
+c
+d 33 1 0 1 0
+c
+d 70 1 0 0 0
+c
+d 148 1 0 0 0
+c
+d 168 1 0 0 0
+c
+d 285 1 0 0 0
+c
+d 286 1 0 0 0
+c
+d 420 1 0 0 0
+c
+d 458 1 0 0 0
+c
+d 459 1 0 0 0
+c
+d 304 1 0 0 0
+c
+d 305 1 0 0 0
+c
+d 308 1 0 0 0
+c
+d 153 1 0 0 0
+c
+d 155 1 1 0 0
+c
+d 156 1 0 0 0
+c
+d 158 1 0 0 0
+c
+d 161 1 0 0 0
+c
+d 756 1 0 0 0
+c
+d 380 1 0 0 0
+c
+d 392 1 0 0 0
+c
+d 393 1 0 0 0
+c
+d 540 1 0 0 0
+c
+d 558 1 0 0 0
+c
+d 559 1 0 0 0
+c
+d 7 1 0 1 0
+c
+d 11 1 0 0 0
+c
+d 317 1 0 0 0
+c
+d 318 1 0 0 0
+c
+d 504 1 0 0 0
+c
+d 505 1 0 0 0
+c
+d 510 1 0 0 0
+c
+d 97 1 0 0 0
+c
+d 98 2 0 1 0
+c
+d 492 1 0 0 0
+c
+d 523 1 0 0 0
+c
+d 560 1 0 0 0
+c
+d 136 1 0 1 0
+c
+d 137 1 0 1 0
+c
+d 172 1 0 0 0
+c
+d 410 1 0 0 0
+c
+d 28 1 0 0 0
+c
+d 29 1 0 0 0
+c
+d 568 1 0 0 0
+c
+d 569 1 0 0 0
+c
+d 343 1 0 0 0
+c
+d 368 1 0 0 0
+c
+d 443 1 0 0 0
+c
+d 444 1 0 0 0
+c
+d 91 1 0 0 0
+c
+d 319 1 0 0 0
+c
+d 320 1 0 0 0
+c
+d 4 1 0 0 0
+c
+d 34 1 0 0 0
+c
+d 700 1 0 0 0
+c
+d 24 1 0 0 0
+c
+d 26 1 0 0 0
+c
+d 733 1 0 0 0
+c
+d 92 1 0 0 0
+c
+d 315 1 0 0 0
+c
+d 208 1 0 0 0
+c
+d 743 1 0 0 0
+c
+d 91 1 0 0 0
+c
+d 92 1 0 0 0
+c
+d 609 1 0 0 0
+c
+d 613 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 277 1 1 0 0
+c
+d 460 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 158 1 0 0 0
+c
+d 189 1 0 1 0
+c
+d 191 1 0 0 0
+c
+d 192 2 1 0 0
+c
+d 718 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 90 1 0 0 0
+c
+d 12 1 0 0 0
+c
+d 83 1 0 0 0
+c
+d 84 1 0 0 0
+c
+d 255 1 0 0 0
+c
+d 258 1 0 0 0
+c
+d 265 1 0 0 0
+c
+d 187 1 0 0 0
+c
+d 252 1 0 0 0
+c
+d 253 1 0 0 0
+c
+d 227 1 0 1 0
+c
+d 234 2 1 0 0
+c
+d 235 1 0 1 0
+c
+d 0 1 0 1 0
+c
+d 434 1 0 0 0
+c
+d 438 1 0 0 0
+c
+d 33 1 0 0 0
+c
+d 70 1 0 0 0
+c
+d 304 1 0 0 0
+c
+d 592 1 1 0 0
+c
+d 593 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 195 1 0 0 0
+c
+d 752 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 90 1 0 0 0
+c
+d 124 1 0 0 0
+c
+d 624 1 0 0 0
+c
+d 625 1 0 0 0
+c
+d 5 1 0 0 0
+c
+d 569 1 0 0 0
+c
+d 570 1 0 0 0
+c
+d 424 1 0 0 0
+c
+d 428 1 0 0 0
+c
+d 429 1 0 0 0
+c
+d 255 1 0 0 0
+c
+d 403 1 0 0 0
+c
+d 207 1 0 0 0
+c
+d 209 1 0 0 0
+c
+d 211 1 1 0 0
+c
+d 219 1 0 0 0
+c
+d 420 1 0 0 0
+c
+d 421 1 0 1 0
+c
+d 22 1 0 0 0
+c
+d 24 1 0 0 0
+c
+d 25 1 0 0 0
+c
+d 75 1 0 0 0
+c
+d 305 1 0 0 0
+c
+d 306 1 0 0 0
+c
+d 307 1 0 0 0
+c
+d 419 1 0 0 0
+c
+d 420 1 0 0 0
+c
+d 158 1 0 0 0
+c
+d 159 1 0 0 0
+c
+d 348 1 0 0 0
+c
+d 368 1 0 0 0
+c
+d 369 1 0 0 0
+c
+d 22 1 0 0 0
+c
+d 466 1 0 0 0
+c
+d 636 1 0 0 0
+c
+d 730 1 0 0 0
+c
+d 615 1 0 0 0
+c
+d 616 1 0 0 0
+c
+d 670 1 0 0 0
+c
+d 47 1 0 0 0
+c
+d 48 1 0 0 0
+c
+d 98 1 0 1 0
+c
+d 99 1 0 1 0
+c
+d 24 1 0 0 0
+c
+d 25 1 0 0 0
+c
+d 3 1 0 1 0
+c
+d 4 1 0 0 0
+c
+d 236 1 0 0 0
+c
+d 237 1 0 0 0
+c
+d 405 1 0 0 0
+c
+d 186 1 0 0 0
+c
+d 303 1 0 0 0
+c
+d 478 1 0 0 0
+c
+d 479 1 0 0 0
+c
+d 738 1 0 0 0
+c
+d 235 1 0 0 0
+c
+d 236 1 0 0 0
+c
+d 419 1 0 0 0
+c
+d 443 1 0 0 0
+c
+d 153 1 0 0 0
+c
+d 161 1 0 0 0
+c
+d 162 1 0 1 0
+c
+d 208 1 0 0 0
+c
+d 225 1 0 0 0
+c
+d 744 1 0 0 0
+c
+d 253 1 0 0 0
+c
+d 254 1 0 0 0
+c
+d 227 1 0 0 0
+c
+d 234 2 1 0 0
+c
+d 235 1 0 1 0
+c
+d 38 1 0 0 0
+c
+d 63 1 0 0 0
+c
+d 64 1 0 0 0
+c
+d 255 1 0 0 0
+c
+d 256 1 0 0 0
+c
+d 70 1 0 0 0
+c
+d 71 1 0 0 0
+c
+d 189 1 0 0 0
+c
+d 190 2 0 0 0
+c
+d 191 1 0 0 0
+c
+d 192 2 0 0 0
+c
+d 234 1 0 0 0
+c
+d 552 1 0 0 0
+c
+d 554 1 0 0 0
+c
+d 3 1 0 0 0
+c
+d 74 1 0 0 0
+c
+d 44 1 0 0 0
+c
+d 67 1 0 0 0
+c
+d 113 1 0 0 0
+c
+d 114 1 0 0 0
+c
+d 235 1 0 0 0
+c
+d 518 1 0 0 0
+c
+d 519 1 0 0 0
+c
+d 705 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 193 1 0 0 0
+c
+d 194 1 0 0 0
+c
+d 420 1 0 0 0
+c
+d 421 1 0 0 0
+c
+d 385 1 0 0 0
+c
+d 386 1 0 0 0
+c
+d 109 1 0 0 0
+c
+d 287 1 0 0 0
+c
+d 288 1 0 0 0
+c
+d 14 1 0 0 0
+c
+d 21 1 0 0 0
+c
+d 33 1 0 0 0
+c
+d 34 1 0 0 0
+c
+d 258 1 0 0 0
+c
+d 267 1 0 0 0
+c
+d 720 1 0 0 0
+c
+d 423 1 0 0 0
+c
+d 542 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 90 1 0 1 0
+c
+d 101 1 0 0 0
+c
+d 122 1 0 0 0
+c
+d 489 1 1 0 0
+c
+d 498 1 0 0 0
+c
+d 27 1 0 0 0
+c
+d 49 1 0 0 0
+c
+d 50 1 0 1 0
+c
+d 507 1 0 1 0
+c
+d 508 1 0 0 0
+c
+d 101 1 0 1 0
+c
+d 102 1 0 0 0
+c
+d 103 1 0 0 0
+c
+d 504 1 0 1 0
+c
+d 617 1 0 1 0
+c
+d 618 2 0 0 0
+c
+d 169 1 0 0 0
+c
+d 171 1 0 0 0
+c
+d 380 1 0 0 0
+c
+d 14 1 0 0 0
+c
+d 33 1 0 0 0
+c
+d 109 1 0 0 0
+c
+d 110 1 0 0 0
+c
+d 417 1 0 0 0
+c
+d 418 1 0 0 0
+c
+d 150 1 0 0 0
+c
+d 181 1 0 0 0
+c
+d 656 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 88 1 0 0 0
+c
+d 89 1 0 1 0
+c
+d 622 1 0 0 0
+c
+d 490 2 0 0 0
+c
+d 502 1 0 0 0
+c
+d 343 1 0 0 0
+c
+d 368 1 0 0 0
+c
+d 430 1 0 0 0
+c
+d 431 1 0 0 0
+c
+d 407 1 0 1 0
+c
+d 412 1 0 0 0
+c
+d 138 1 0 1 0
+c
+d 139 1 0 0 0
+c
+d 207 2 0 0 0
+c
+d 208 1 0 0 0
+c
+d 229 1 0 0 0
+c
+d 230 2 1 0 0
+c
+d 745 1 0 0 0
+c
+d 473 1 0 0 0
+c
+d 676 1 0 0 0
+c
+d 427 1 0 0 0
+c
+d 428 1 0 0 0
+c
+d 22 1 0 1 0
+c
+d 23 1 0 0 0
+c
+d 24 1 0 0 0
+c
+d 609 1 0 0 0
+c
+d 610 1 0 0 0
+c
+d 611 1 0 0 0
+c
+d 140 1 0 0 0
+c
+d 141 1 0 0 0
+c
+d 24 1 0 0 0
+c
+d 25 1 0 0 0
+c
+d 139 1 0 0 0
+c
+d 140 1 0 0 0
+c
+d 524 1 0 1 0
+c
+d 559 1 0 0 0
+c
+d 711 1 0 0 0
+c
+d 597 1 0 0 0
+c
+d 598 1 0 0 0
+c
+d 207 1 0 0 0
+c
+d 398 1 0 0 0
+c
+d 668 1 0 0 0
+c
+d 150 1 0 0 0
+c
+d 169 1 0 1 0
+c
+d 678 1 0 0 0
+c
+d 96 1 0 0 0
+c
+d 97 1 0 1 0
+c
+d 423 1 0 0 0
+c
+d 484 1 0 0 0
+c
+d 431 1 0 0 0
+c
+d 432 1 0 0 0
+c
+d 476 1 0 0 0
+c
+d 477 1 0 0 0
+c
+d 478 1 0 0 0
+c
+d 484 1 0 0 0
+c
+d 342 1 0 0 0
+c
+d 357 1 0 0 0
+c
+d 466 1 0 0 0
+c
+d 467 1 0 0 0
+c
+d 420 1 0 0 0
+c
+d 442 1 0 0 0
+c
+d 582 1 0 0 0
+c
+d 588 1 0 0 0
+c
+d 22 1 0 0 0
+c
+d 468 1 0 0 0
+c
+d 469 1 0 0 0
+c
+d 727 1 0 0 0
+c
+d 591 1 1 0 0
+c
+d 600 1 0 0 0
+c
+d 67 1 0 0 0
+c
+d 68 1 0 0 0
+c
+d 633 1 0 0 0
+c
+d 634 1 0 0 0
+c
+d 5 1 0 0 0
+c
+d 401 1 0 0 0
+c
+d 154 1 0 1 0
+c
+d 155 2 1 0 0
+c
+d 156 1 0 0 0
+c
+d 504 1 0 0 0
+c
+d 540 1 0 0 0
+c
+d 556 1 0 0 0
+c
+d 557 1 0 0 0
+c
+d 258 1 0 0 0
+c
+d 261 1 0 0 0
+c
+d 113 1 0 0 0
+c
+d 114 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 294 1 0 0 0
+c
+d 662 1 0 0 0
+c
+d 0 1 0 0 0
+c
+d 435 1 0 0 0
+c
+d 436 1 0 0 0
+c
+d 715 1 0 0 0
+c
+d 428 1 0 0 0
+c
+d 429 1 0 0 0
+c
+d 741 1 0 0 0
+c
+d 345 1 0 0 0
+c
+d 346 1 0 0 0
+c
+d 234 1 0 0 0
+c
+d 235 1 0 0 0
+c
+d 516 1 0 0 0
+c
+d 530 1 0 0 0
+c
+d 91 1 0 0 0
+c
+d 285 1 0 0 0
+c
+d 286 1 0 0 0
+c
+d 69 1 0 0 0
+c
+d 70 1 0 0 0
+c
+d 71 1 0 0 0
+c
+d 72 1 0 0 0
+c
+d 0 1 0 0 0
+c
+d 1 1 0 0 0
+c
+d 24 2 0 0 0
+c
+d 642 1 0 0 0
+c
+d 643 1 0 0 0
+c
+d 3 1 0 0 0
+c
+d 70 1 0 0 0
+c
+d 202 1 0 0 0
+c
+d 537 1 0 0 0
+c
+d 722 1 0 0 0
+c
+d 431 1 0 0 0
+c
+d 432 1 0 0 0
+c
+d 189 1 0 0 0
+c
+d 190 2 1 0 0
+c
+d 191 1 0 1 0
+c
+d 747 1 0 0 0
+c
+d 421 1 0 0 0
+c
+d 422 1 0 0 0
+c
+d 614 1 0 0 0
+c
+d 615 1 0 0 0
+c
+d 8 1 0 0 0
+c
+d 9 1 0 0 0
+c
+d 736 1 0 0 0
+c
+d 457 1 0 0 0
+c
+d 458 1 0 0 0
+c
+d 5 1 0 0 0
+c
+d 401 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 158 1 0 0 0
+c
+d 752 1 0 0 0
+c
+d 304 1 0 0 0
+c
+d 602 1 0 0 0
+c
+d 420 1 0 1 0
+c
+d 442 1 0 0 0
+c
+d 421 1 0 0 0
+c
+d 422 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 3 1 0 0 0
+c
+d 69 1 0 0 0
+c
+d 72 1 0 0 0
+c
+d 73 1 0 0 0
+c
+d 430 1 0 0 0
+c
+d 431 1 0 0 0
+c
+d 432 1 0 0 0
+c
+d 436 1 0 0 0
+c
+d 715 1 0 0 0
+c
+d 505 1 0 0 0
+c
+d 506 1 0 0 0
+c
+d 671 1 0 0 0
+c
+d 99 1 0 0 0
+c
+d 100 1 0 0 0
+c
+d 389 1 0 0 0
+c
+d 70 1 0 0 0
+c
+d 71 1 0 0 0
+c
+d 259 1 0 0 0
+c
+d 260 1 0 0 0
+c
+d 424 1 0 0 0
+c
+d 478 1 0 0 0
+c
+d 738 1 0 0 0
+c
+d 4 1 0 1 0
+c
+d 34 1 0 0 0
+c
+d 14 1 0 0 0
+c
+d 22 1 0 0 0
+c
+d 41 1 0 0 0
+c
+d 373 1 0 0 0
+c
+d 374 1 0 0 0
+c
+d 375 1 0 0 0
+c
+d 684 1 0 0 0
+c
+d 23 1 0 0 0
+c
+d 304 1 0 0 0
+c
+d 592 1 0 0 0
+c
+d 602 1 0 0 0
+c
+d 255 1 1 0 0
+c
+d 257 1 0 0 0
+c
+d 258 1 0 0 0
+c
+d 420 1 0 0 0
+c
+d 421 1 0 0 0
+c
+d 441 1 0 0 0
+c
+d 714 1 0 0 0
+c
+d 140 1 0 0 0
+c
+d 141 1 0 0 0
+c
+d 203 1 0 0 0
+c
+d 301 1 0 0 0
+c
+d 530 1 0 0 0
+c
+d 531 1 0 0 0
+c
+d 130 1 0 0 0
+c
+d 400 1 0 0 0
+c
+d 728 1 0 0 0
+c
+d 504 1 0 0 0
+c
+d 511 1 0 0 0
+c
+d 520 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 460 2 1 0 0
+c
+d 461 1 0 0 0
+c
+d 463 1 0 0 0
+c
+d 755 1 0 0 0
+c
+d 132 1 0 1 0
+c
+d 133 1 0 0 0
+c
+d 303 1 0 0 0
+c
+d 311 1 0 0 0
+c
+d 202 1 0 0 0
+c
+d 577 1 0 0 0
+c
+d 586 1 0 0 0
+c
+d 0 1 0 0 0
+c
+d 1 1 0 0 0
+c
+d 682 1 0 0 0
+c
+d 102 1 0 0 0
+c
+d 564 1 0 0 0
+c
+d 138 1 0 1 0
+c
+d 139 1 0 0 0
+c
+d 488 1 0 0 0
+c
+d 493 1 1 0 0
+c
+d 340 1 0 0 0
+c
+d 347 1 0 0 0
+c
+d 207 1 0 0 0
+c
+d 226 1 0 0 0
+c
+d 177 1 0 0 0
+c
+d 416 1 0 0 0
+c
+d 474 1 0 0 0
+c
+d 512 1 0 0 0
+c
+d 513 1 1 0 0
+c
+d 334 1 0 0 0
+c
+d 335 1 0 0 0
+c
+d 506 1 0 0 0
+c
+d 507 1 0 0 0
+c
+d 96 1 0 0 0
+c
+d 97 1 0 0 0
+c
+d 537 1 0 0 0
+c
+d 538 1 0 0 0
+c
+d 143 1 0 1 0
+c
+d 144 1 0 0 0
+c
+d 28 1 0 0 0
+c
+d 30 1 0 0 0
+c
+d 31 1 0 0 0
+c
+d 615 1 0 0 0
+c
+d 616 1 0 0 0
+c
+d 57 1 0 1 0
+c
+d 110 1 0 0 0
+c
+d 111 1 0 0 0
+c
+d 273 1 0 0 0
+c
+d 345 1 0 0 0
+c
+d 346 1 0 0 0
+c
+d 0 1 0 0 0
+c
+d 1 1 0 0 0
+c
+d 107 1 0 0 0
+c
+d 108 1 0 0 0
+c
+d 153 1 0 1 0
+c
+d 632 1 0 0 0
+c
+d 635 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 122 1 0 0 0
+c
+d 123 1 0 0 0
+c
+d 259 1 0 0 0
+c
+d 581 1 0 0 0
+c
+d 587 1 0 0 0
+c
+d 140 1 0 0 0
+c
+d 141 1 0 0 0
+c
+d 169 1 0 0 0
+c
+d 170 1 0 0 0
+c
+d 491 1 0 0 0
+c
+d 492 1 0 0 0
+c
+d 203 1 0 0 0
+c
+d 204 1 0 0 0
+c
+d 300 1 0 0 0
+c
+d 172 1 0 0 0
+c
+d 173 1 0 0 0
+c
+d 182 1 0 0 0
+c
+d 183 1 0 0 0
+c
+d 95 2 0 0 0
+c
+d 118 1 0 0 0
+c
+d 173 1 0 0 0
+c
+d 174 1 0 0 0
+c
+d 489 1 0 0 0
+c
+d 491 1 0 0 0
+c
+d 492 1 0 0 0
+c
+d 562 1 0 0 0
+c
+d 7 1 0 0 0
+c
+d 8 1 0 0 0
+c
+d 152 1 0 1 0
+c
+d 313 1 0 0 0
+c
+d 143 1 0 1 0
+c
+d 144 1 0 0 0
+c
+d 172 1 0 0 0
+c
+d 475 1 0 0 0
+c
+d 398 1 0 0 0
+c
+d 404 1 0 0 0
+c
+d 130 1 0 0 0
+c
+d 131 1 0 1 0
+c
+d 378 1 0 0 0
+c
+d 759 1 0 0 0
+c
+d 304 1 0 0 0
+c
+d 305 1 1 0 0
+c
+d 342 1 0 0 0
+c
+d 349 1 0 0 0
+c
+d 350 1 0 0 0
+c
+d 665 1 0 0 0
+c
+d 673 1 0 0 0
+c
+d 99 1 0 0 0
+c
+d 121 1 0 0 0
+c
+d 389 1 0 0 0
+c
+d 139 1 0 1 0
+c
+d 140 1 0 0 0
+c
+d 253 1 0 0 0
+c
+d 573 1 0 0 0
+c
+d 574 2 0 0 0
+c
+d 575 2 0 0 0
+c
+d 177 1 0 0 0
+c
+d 178 1 0 0 0
+c
+d 179 1 0 0 0
+c
+d 180 1 0 0 0
+c
+d 196 1 0 0 0
+c
+d 9 1 0 0 0
+c
+d 10 1 0 0 0
+c
+d 11 1 0 0 0
+c
+d 178 1 0 0 0
+c
+d 179 1 0 0 0
+c
+d 415 1 0 0 0
+c
+d 416 1 0 1 0
+c
+d 140 1 0 1 0
+c
+d 141 1 0 0 0
+c
+d 604 1 0 0 0
+c
+d 605 1 0 0 0
+c
+d 419 1 0 0 0
+c
+d 442 1 0 0 0
+c
+d 443 1 0 0 0
+c
+d 76 1 0 0 0
+c
+d 77 1 0 0 0
+c
+d 174 1 0 0 0
+c
+d 175 1 0 0 0
+c
+d 101 1 0 1 0
+c
+d 563 1 0 0 0
+c
+d 172 1 0 0 0
+c
+d 385 1 0 0 0
+c
+d 433 1 0 0 0
+c
+d 475 1 0 0 0
+c
+d 304 1 0 0 0
+c
+d 305 1 0 0 0
+c
+d 309 1 0 0 0
+c
+d 310 1 0 0 0
+c
+d 326 1 0 0 0
+c
+d 327 1 0 0 0
+c
+d 179 1 0 0 0
+c
+d 606 1 0 0 0
+c
+d 607 1 0 0 0
+c
+d 157 1 0 1 0
+c
+d 460 1 0 1 0
+c
+d 461 2 1 0 0
+c
+d 488 1 0 0 0
+c
+d 536 1 0 1 0
+c
+d 186 1 0 0 0
+c
+d 302 1 0 0 0
+c
+d 303 1 0 0 0
+c
+d 615 1 0 0 0
+c
+d 616 1 0 0 0
+c
+d 670 1 0 0 0
+c
+d 1 1 0 0 0
+c
+d 147 1 0 0 0
+c
+d 148 1 0 0 0
+c
+d 624 1 0 0 0
+c
+d 625 1 0 0 0
+c
+d 372 1 0 1 0
+c
+d 373 1 0 0 0
+c
+d 504 1 0 0 0
+c
+d 522 1 1 0 0
+c
+d 707 1 0 0 0
+c
+d 259 1 0 0 0
+c
+d 582 1 0 0 0
+c
+d 588 1 0 0 0
+c
+d 148 1 0 0 0
+c
+d 149 1 0 0 0
+c
+d 414 1 0 0 0
+c
+d 415 1 0 0 0
+c
+d 0 1 0 0 1
+c
+d 1 1 0 0 1
+c
+d 507 1 0 0 0
+c
+d 508 1 1 0 0
+c
+d 89 1 0 0 0
+c
+d 117 1 0 0 0
+c
+d 477 1 0 1 0
+c
+d 478 1 0 0 0
+c
+d 492 1 0 0 0
+c
+d 535 1 0 0 0
+c
+d 107 1 0 0 0
+c
+d 294 1 0 0 0
+c
+d 505 1 0 0 0
+c
+d 509 1 0 0 0
+c
+d 510 1 0 0 0
+c
+d 183 1 0 1 0
+c
+d 184 1 0 0 0
+c
+d 76 2 0 0 0
+c
+d 85 2 0 0 0
+c
+d 86 1 0 0 0
+c
+d 488 1 0 0 0
+c
+d 493 1 0 0 0
+c
+d 494 1 0 0 0
+c
+d 0 1 0 0 0
+c
+d 1 1 0 0 0
+c
+d 397 1 0 1 0
+c
+d 514 1 0 0 0
+c
+d 515 1 0 0 0
+c
+d 1 1 0 0 0
+c
+d 44 1 0 0 0
+c
+d 145 1 0 0 0
+c
+d 146 1 0 0 0
+c
+d 289 1 0 0 0
+c
+d 202 1 0 1 0
+c
+d 252 1 0 0 0
+c
+d 254 1 0 0 0
+c
+d 397 1 1 0 0
+c
+d 399 1 0 0 0
+c
+d 139 1 0 0 0
+c
+d 140 1 0 0 0
+c
+d 303 1 1 0 0
+c
+d 304 1 0 0 0
+c
+d 648 1 0 0 0
+c
+d 151 1 0 0 0
+c
+d 481 1 0 0 0
+c
+d 482 1 0 0 0
+c
+d 95 1 0 0 0
+c
+d 96 1 0 0 0
+c
+d 97 1 0 0 0
+c
+d 325 1 0 0 0
+c
+d 326 1 0 0 0
+c
+d 85 1 0 0 0
+c
+d 126 1 0 0 0
+c
+d 469 1 0 0 0
+c
+d 334 1 0 0 0
+c
+d 335 1 0 0 0
+c
+d 336 1 0 0 0
+c
+d 400 1 0 0 0
+c
+d 728 1 0 0 0
+c
+d 235 1 0 1 0
+c
+d 488 1 0 0 0
+c
+d 581 2 1 0 0
+c
+d 582 2 0 0 0
+c
+d 694 1 0 0 0
+c
+d 492 1 0 0 0
+c
+d 497 1 0 0 0
+c
+d 562 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 103 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 90 1 0 0 0
+c
+d 172 1 0 0 0
+c
+d 381 1 0 0 0
+c
+d 679 1 0 0 0
+c
+d 413 1 0 0 0
+c
+d 414 1 0 0 0
+c
+d 23 1 0 1 0
+c
+d 54 1 0 0 0
+c
+d 407 1 0 0 0
+c
+d 408 1 0 0 0
+c
+d 227 1 0 0 0
+c
+d 690 1 0 0 0
+c
+d 576 1 0 0 0
+c
+d 577 1 0 0 0
+c
+d 586 1 0 0 0
+c
+d 304 2 0 0 0
+c
+d 308 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 592 1 0 0 0
+c
+d 597 1 0 0 0
+c
+d 598 1 0 0 0
+c
+d 109 1 0 0 0
+c
+d 111 1 0 0 0
+c
+d 112 1 0 0 0
+c
+d 304 1 0 0 0
+c
+d 596 1 0 0 0
+c
+d 423 1 0 0 0
+c
+d 442 1 0 0 0
+c
+d 14 1 0 0 0
+c
+d 15 1 0 0 0
+c
+d 43 1 0 0 0
+c
+d 44 1 0 0 0
+c
+d 7 1 0 0 0
+c
+d 9 1 0 0 0
+c
+d 11 1 0 0 0
+c
+d 406 1 0 0 0
+c
+d 439 1 1 0 0
+c
+d 440 1 0 0 0
+c
+d 570 1 0 0 0
+c
+d 595 1 0 0 0
+c
+d 343 1 0 0 0
+c
+d 348 1 0 0 0
+c
+d 368 1 0 0 0
+c
+d 15 1 0 0 0
+c
+d 16 1 0 0 0
+c
+d 258 1 0 1 0
+c
+d 266 1 0 0 0
+c
+d 91 1 0 1 0
+c
+d 92 1 0 0 0
+c
+d 181 1 0 0 0
+c
+d 182 1 0 1 0
+c
+d 259 1 0 0 0
+c
+d 390 1 0 0 0
+c
+d 581 1 0 0 0
+c
+d 590 1 0 0 0
+c
+d 170 1 0 1 0
+c
+d 171 1 0 0 0
+c
+d 3 1 0 0 0
+c
+d 4 1 0 0 0
+c
+d 505 1 0 0 0
+c
+d 506 1 0 1 0
+c
+d 507 1 0 0 0
+c
+d 136 1 0 0 0
+c
+d 376 1 0 0 0
+c
+d 228 3 0 0 0
+c
+d 229 1 0 0 0
+c
+d 295 1 0 0 0
+c
+d 296 1 0 0 0
+c
+d 298 1 0 0 0
+c
+d 420 1 0 0 0
+c
+d 442 1 0 0 0
+c
+d 488 1 0 1 0
+c
+d 489 1 0 0 0
+c
+d 93 1 0 0 0
+c
+d 94 1 0 0 0
+c
+d 291 1 0 0 0
+c
+d 292 1 0 0 0
+c
+d 258 1 0 1 0
+c
+d 266 1 0 0 0
+c
+d 267 1 0 0 0
+c
+d 12 1 0 0 0
+c
+d 84 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 592 1 0 0 0
+c
+d 602 1 0 0 0
+c
+d 603 1 0 0 0
+c
+d 4 1 0 0 0
+c
+d 34 1 0 0 0
+c
+d 639 1 0 0 0
+c
+d 712 1 0 0 0
+c
+d 89 1 0 1 0
+c
+d 624 1 0 0 0
+c
+d 625 1 0 0 0
+c
+d 537 1 0 0 0
+c
+d 538 1 0 0 0
+c
+d 722 1 0 0 0
+c
+d 236 2 1 0 0
+c
+d 238 1 0 0 0
+c
+d 297 1 0 1 0
+c
+d 666 1 0 0 0
+c
+d 108 1 0 0 0
+c
+d 273 1 0 0 0
+c
+d 274 1 0 0 0
+c
+d 92 1 0 0 0
+c
+d 317 1 0 0 0
+c
+d 318 1 0 0 0
+c
+d 90 1 0 0 0
+c
+d 109 1 0 0 0
+c
+d 124 1 0 0 0
+c
+d 95 1 0 0 0
+c
+d 96 1 0 1 0
+c
+d 486 1 0 1 0
+c
+d 487 1 0 0 0
+c
+d 227 1 0 0 0
+c
+d 231 1 0 0 0
+c
+d 234 1 0 0 0
+c
+d 623 1 0 1 0
+c
+d 624 1 0 0 0
+c
+d 1 1 0 1 0
+c
+d 12 1 0 0 0
+c
+d 84 1 0 0 0
+c
+d 140 1 0 1 0
+c
+d 141 1 0 0 0
+c
+d 206 1 0 0 0
+c
+d 218 1 0 0 0
+c
+d 424 1 0 0 0
+c
+d 426 1 0 0 0
+c
+d 740 1 0 0 0
+c
+d 203 1 0 0 0
+c
+d 301 1 0 0 0
+c
+d 708 1 0 0 0
+c
+d 152 1 0 0 0
+c
+d 153 1 0 0 0
+c
+d 107 1 0 0 0
+c
+d 108 1 0 0 0
+c
+d 185 1 0 0 0
+c
+d 186 1 0 0 0
+c
+d 94 1 0 0 0
+c
+d 292 1 0 0 0
+c
+d 27 1 0 0 0
+c
+d 49 1 0 0 0
+c
+d 95 1 0 0 0
+c
+d 118 1 0 0 0
+c
+d 125 1 0 0 0
+c
+d 185 1 0 0 0
+c
+d 186 1 0 0 0
+c
+d 3 1 0 0 0
+c
+d 12 1 0 0 0
+c
+d 13 1 0 0 0
+c
+d 0 1 0 0 0
+c
+d 148 1 0 0 0
+c
+d 168 1 0 0 0
+c
+d 386 1 0 1 0
+c
+d 387 1 0 0 0
+c
+d 388 1 0 0 0
+c
+d 126 1 0 0 0
+c
+d 468 1 0 0 0
+c
+d 141 1 0 0 0
+c
+d 142 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 88 1 0 0 0
+c
+d 101 1 0 1 0
+c
+d 121 1 0 0 0
+c
+d 242 1 0 0 0
+c
+d 505 1 0 0 0
+c
+d 507 1 0 0 0
+c
+d 508 1 0 0 0
+c
+d 433 1 0 0 0
+c
+d 434 1 0 0 0
+c
+d 435 1 0 0 0
+c
+d 154 1 0 0 0
+c
+d 155 1 0 0 0
+c
+d 166 1 0 0 0
+c
+d 164 1 1 0 0
+c
+d 200 1 0 0 0
+c
+d 201 1 0 0 0
+c
+d 312 1 0 0 0
+c
+d 99 1 0 1 0
+c
+d 372 1 0 0 0
+c
+d 373 1 0 0 0
+c
+d 343 1 0 0 0
+c
+d 378 1 0 0 0
+c
+d 379 1 0 0 0
+c
+d 109 1 0 0 0
+c
+d 283 1 0 0 0
+c
+d 284 1 0 0 0
+c
+d 148 1 0 1 0
+c
+d 149 1 0 0 0
+c
+d 178 1 0 0 0
+c
+d 130 1 0 0 0
+c
+d 136 1 0 0 0
+c
+d 686 1 0 0 0
+c
+d 57 1 0 0 0
+c
+d 58 1 0 0 0
+c
+d 59 2 1 0 0
+c
+d 629 1 0 0 0
+c
+d 632 1 0 0 0
+c
+d 259 1 0 0 0
+c
+d 587 1 0 0 0
+c
+d 588 1 1 0 0
+c
+d 589 1 0 0 0
+c
+d 345 1 0 1 0
+c
+d 422 2 1 0 0
+c
+d 423 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 479 1 0 0 0
+c
+d 480 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 461 1 0 0 0
+c
+d 150 1 0 0 0
+c
+d 313 1 0 0 0
+c
+d 126 1 0 0 0
+c
+d 409 1 0 0 0
+c
+d 683 1 0 0 0
+c
+d 172 1 0 0 0
+c
+d 380 1 0 0 0
+c
+d 381 1 0 0 0
+c
+d 144 1 0 1 0
+c
+d 145 1 0 0 0
+c
+d 207 1 0 1 0
+c
+d 233 1 1 0 0
+c
+d 234 2 1 0 0
+c
+d 553 1 0 0 0
+c
+d 488 1 0 0 0
+c
+d 489 1 1 0 0
+c
+d 141 1 0 1 0
+c
+d 142 1 0 1 0
+c
+d 176 1 0 0 0
+c
+d 177 1 0 0 0
+c
+d 91 1 0 0 0
+c
+d 323 1 0 0 0
+c
+d 5 1 0 0 0
+c
+d 18 1 0 1 0
+c
+d 0 1 0 0 0
+c
+d 1 1 0 0 0
+c
+d 650 1 0 0 0
+c
+d 141 1 0 1 0
+c
+d 142 1 0 1 0
+c
+d 33 1 0 1 0
+c
+d 34 1 0 1 0
+c
+d 179 1 0 0 0
+c
+d 196 1 0 0 0
+c
+d 197 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 227 1 0 1 0
+c
+d 228 3 1 0 0
+c
+d 295 1 0 0 0
+c
+d 298 2 1 0 0
+c
+d 148 1 0 0 0
+c
+d 149 1 0 0 0
+c
+d 5 1 0 0 0
+c
+d 34 1 0 0 0
+c
+d 35 1 0 0 0
+c
+d 91 1 0 0 0
+c
+d 326 1 0 0 0
+c
+d 327 1 0 0 0
+c
+d 456 1 0 0 0
+c
+d 471 1 0 0 0
+c
+d 472 1 0 0 0
+c
+d 184 1 0 0 0
+c
+d 185 1 0 0 0
+c
+d 173 1 0 0 0
+c
+d 174 1 0 0 0
+c
+d 175 1 0 0 0
+c
+d 176 1 0 0 0
+c
+d 178 1 0 0 0
+c
+d 220 2 0 0 0
+c
+d 222 1 0 0 0
+c
+d 746 2 0 0 0
+c
+d 381 1 0 0 0
+c
+d 385 1 0 1 0
+c
+d 387 1 0 0 0
+c
+d 516 1 0 0 0
+c
+d 533 1 0 0 0
+c
+d 534 1 0 0 0
+c
+d 519 1 0 0 0
+c
+d 529 1 0 0 0
+c
+d 706 1 0 0 0
+c
+d 39 2 1 0 0
+c
+d 40 1 0 0 0
+c
+d 63 1 0 0 0
+c
+d 207 1 0 1 0
+c
+d 397 2 0 0 0
+c
+d 550 1 1 0 0
+c
+d 5 1 1 0 0
+c
+d 402 1 0 0 0
+c
+d 150 1 0 0 0
+c
+d 169 1 0 0 0
+c
+d 91 1 0 0 0
+c
+d 94 1 0 0 0
+c
+d 292 1 0 0 0
+c
+d 91 1 0 0 0
+c
+d 286 1 0 0 0
+c
+d 407 1 0 0 0
+c
+d 408 1 0 0 0
+c
+d 409 1 0 0 0
+c
+d 219 2 1 0 0
+c
+d 220 2 0 0 0
+c
+d 492 1 0 0 0
+c
+d 535 1 0 0 0
+c
+d 536 1 0 0 0
+c
+d 505 1 0 1 0
+c
+d 555 1 0 0 0
+c
+d 219 1 0 0 0
+c
+d 221 2 1 0 0
+c
+d 222 1 0 0 0
+c
+d 1 1 0 1 0
+c
+d 2 1 0 0 0
+c
+d 3 1 0 0 0
+c
+d 12 1 0 0 0
+c
+d 83 1 0 0 0
+c
+d 92 1 0 0 0
+c
+d 315 1 0 0 0
+c
+d 144 1 0 1 0
+c
+d 145 1 0 0 0
+c
+d 7 1 0 0 0
+c
+d 637 1 0 0 0
+c
+d 363 1 0 0 0
+c
+d 364 2 0 0 0
+c
+d 365 1 0 0 0
+c
+d 91 1 0 0 0
+c
+d 282 1 0 0 0
+c
+d 283 1 0 0 0
+c
+d 350 1 0 0 0
+c
+d 351 2 0 0 0
+c
+d 352 1 0 0 0
+c
+d 434 1 0 1 0
+c
+d 438 1 0 0 0
+c
+d 345 1 0 0 0
+c
+d 485 1 0 1 0
+c
+d 760 1 0 0 0
+c
+d 183 1 0 1 0
+c
+d 184 1 0 0 0
+c
+d 599 1 0 0 0
+c
+d 600 1 0 1 0
+c
+d 601 1 0 0 0
+c
+d 100 2 0 0 0
+c
+d 121 1 0 1 0
+c
+d 685 2 0 0 0
+c
+d 14 1 0 0 0
+c
+d 21 1 0 0 0
+c
+d 22 1 0 0 0
+c
+d 154 2 1 0 0
+c
+d 155 1 0 0 0
+c
+d 460 1 0 0 0
+c
+d 150 1 0 0 0
+c
+d 151 1 0 0 0
+c
+d 423 1 0 1 0
+c
+d 442 1 0 1 0
+c
+d 425 1 0 0 0
+c
+d 426 1 0 0 0
+c
+d 91 1 0 0 0
+c
+d 281 1 0 0 0
+c
+d 282 1 0 0 0
+c
+d 184 1 0 1 0
+c
+d 185 1 0 1 0
+c
+d 488 1 0 0 0
+c
+d 489 1 0 0 0
+c
+d 203 1 0 1 0
+c
+d 204 1 0 0 0
+c
+d 205 2 0 0 0
+c
+d 206 1 1 0 0
+c
+d 77 1 0 1 0
+c
+d 78 2 1 0 0
+c
+d 79 1 0 0 0
+c
+d 57 1 0 0 0
+c
+d 58 2 0 0 0
+c
+d 59 1 0 0 0
+c
+d 60 1 0 0 0
+c
+d 171 1 0 1 0
+c
+d 172 1 0 0 0
+c
+d 489 1 0 0 0
+c
+d 490 1 0 0 0
+c
+d 501 1 0 0 0
+c
+d 754 2 0 0 0
+c
+d 158 1 0 1 0
+c
+d 159 1 0 0 0
+c
+d 151 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 603 1 0 0 0
+c
+d 605 1 0 1 0
+c
+d 606 1 0 1 0
+c
+d 423 1 0 0 0
+c
+d 476 1 0 0 0
+c
+d 598 1 0 0 0
+c
+d 599 1 0 0 0
+c
+d 115 1 0 0 0
+c
+d 116 1 0 0 0
+c
+d 154 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 461 1 0 0 0
+c
+d 180 1 0 0 0
+c
+d 181 1 0 1 0
+c
+d 430 1 0 0 0
+c
+d 444 1 0 0 0
+c
+d 445 1 0 0 0
+c
+d 95 1 0 1 0
+c
+d 412 1 0 1 0
+c
+d 174 1 0 0 0
+c
+d 175 1 0 0 0
+c
+d 186 1 0 1 0
+c
+d 266 1 0 0 0
+c
+d 109 1 0 0 0
+c
+d 110 1 0 0 0
+c
+d 111 1 0 0 0
+c
+d 432 1 0 0 0
+c
+d 433 1 0 0 0
+c
+d 435 1 0 1 0
+c
+d 436 1 0 0 0
+c
+d 5 1 0 0 0
+c
+d 570 1 1 0 0
+c
+d 594 1 0 1 0
+c
+d 101 1 0 0 0
+c
+d 102 1 0 0 0
+c
+d 72 1 0 0 0
+c
+d 73 1 0 0 0
+c
+d 27 1 0 0 0
+c
+d 28 1 0 0 0
+c
+d 286 1 0 0 0
+c
+d 287 1 0 0 0
+c
+d 642 1 0 0 0
+c
+d 643 1 1 0 0
+c
+d 644 2 0 0 0
+c
+d 456 1 0 0 0
+c
+d 457 1 0 0 0
+c
+d 150 1 0 1 0
+c
+d 151 1 0 0 0
+c
+d 185 1 0 0 0
+c
+d 275 1 0 0 0
+c
+d 186 1 0 0 0
+c
+d 258 1 0 0 0
+c
+d 209 1 0 0 0
+c
+d 210 2 0 0 0
+c
+d 28 1 0 1 0
+c
+d 29 1 0 0 0
+c
+d 100 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 496 1 0 0 0
+c
+d 456 1 0 0 0
+c
+d 544 1 0 0 0
+c
+d 38 1 1 0 0
+c
+d 55 2 1 0 0
+c
+d 56 1 0 0 0
+c
+d 204 1 1 0 0
+c
+d 205 2 1 0 0
+c
+d 206 1 0 0 0
+c
+d 342 1 0 1 0
+c
+d 361 1 0 0 0
+c
+d 362 1 0 0 0
+c
+d 154 1 0 0 0
+c
+d 157 2 0 0 0
+c
+d 276 2 0 0 0
+c
+d 170 1 0 1 0
+c
+d 171 1 0 0 0
+c
+d 39 1 0 0 0
+c
+d 63 1 0 0 0
+c
+d 126 1 0 0 0
+c
+d 468 1 0 0 0
+c
+d 469 1 0 0 0
+c
+d 172 1 0 0 0
+c
+d 176 1 0 0 0
+c
+d 417 1 0 0 0
+c
+d 474 1 0 0 0
+c
+d 140 1 0 0 0
+c
+d 141 1 0 0 0
+c
+d 22 1 0 0 0
+c
+d 23 1 0 0 0
+c
+d 505 1 0 1 0
+c
+d 614 2 0 0 0
+c
+d 620 2 1 0 0
+c
+d 3 1 0 0 0
+c
+d 13 1 0 1 0
+c
+d 69 1 0 0 0
+c
+d 44 1 0 0 0
+c
+d 289 1 0 0 0
+c
+d 227 1 0 0 0
+c
+d 239 1 0 0 0
+c
+d 690 1 0 0 0
+c
+d 419 1 0 0 0
+c
+d 420 1 0 0 0
+c
+d 523 1 0 0 0
+c
+d 524 1 0 0 0
+c
+d 528 1 0 0 0
+c
+d 3 1 0 0 0
+c
+d 4 1 0 0 0
+c
+d 430 1 0 0 0
+c
+d 446 1 0 0 0
+c
+d 90 1 1 0 0
+c
+d 91 1 0 0 0
+c
+d 280 1 0 0 0
+c
+d 281 1 0 0 0
+c
+d 87 1 1 0 0
+c
+d 293 1 0 0 0
+c
+d 197 1 0 0 0
+c
+d 198 1 0 0 0
+c
+d 227 1 0 1 0
+c
+d 231 1 0 0 0
+c
+d 243 1 0 0 0
+c
+d 345 1 0 0 0
+c
+d 346 1 0 0 0
+c
+d 380 1 0 0 0
+c
+d 381 1 0 0 0
+c
+d 505 2 1 0 0
+c
+d 506 1 0 0 0
+c
+d 507 1 0 0 0
+c
+d 509 1 0 0 0
+c
+d 619 1 0 0 0
+c
+d 620 1 0 0 0
+c
+d 0 1 0 0 0
+c
+d 385 1 0 0 0
+c
+d 438 1 0 0 0
+c
+d 44 1 0 0 0
+c
+d 45 1 0 0 0
+c
+d 133 1 0 1 0
+c
+d 134 1 0 0 0
+c
+d 457 1 0 0 0
+c
+d 458 1 0 0 0
+c
+d 151 2 1 0 0
+c
+d 152 1 1 0 0
+c
+d 304 1 0 0 0
+c
+d 602 1 0 0 0
+c
+d 141 1 0 0 0
+c
+d 142 1 0 0 0
+c
+d 228 2 0 0 0
+c
+d 229 1 0 0 0
+c
+d 236 1 1 0 0
+c
+d 296 1 0 0 0
+c
+d 186 1 0 0 0
+c
+d 264 1 0 0 0
+c
+d 265 1 0 0 0
+c
+d 266 1 0 0 0
+c
+d 158 1 0 0 0
+c
+d 160 1 0 0 0
+c
+d 756 1 0 0 0
+c
+d 76 1 0 0 0
+c
+d 85 1 0 0 0
+c
+d 86 2 0 0 0
+c
+d 87 1 0 0 0
+c
+d 535 1 0 0 0
+c
+d 536 1 0 0 0
+c
+d 14 1 0 0 0
+c
+d 545 1 0 0 0
+c
+d 546 1 0 0 0
+c
+d 95 1 0 0 0
+c
+d 406 1 0 0 0
+c
+d 411 1 0 0 0
+c
+d 151 1 0 1 0
+c
+d 302 1 0 0 0
+c
+d 304 1 0 0 0
+c
+d 598 1 0 0 0
+c
+d 599 1 0 0 0
+c
+d 696 1 0 0 0
+c
+d 1 1 0 0 0
+c
+d 2 1 0 0 0
+c
+d 92 1 0 1 0
+c
+d 93 1 0 0 0
+c
+d 95 1 0 1 0
+c
+d 96 1 0 1 0
+c
+d 181 1 0 0 0
+c
+d 182 1 0 0 0
+c
+d 92 1 0 1 0
+c
+d 93 1 0 0 0
+c
+d 143 1 0 0 0
+c
+d 144 1 0 0 0
+c
+d 286 1 0 0 0
+c
+d 287 1 0 0 0
+c
+d 658 1 0 0 0
+c
+d 94 1 0 0 0
+c
+d 95 1 0 0 0
+c
+d 187 2 1 0 0
+c
+d 748 1 0 0 0
+c
+d 181 1 0 1 0
+c
+d 197 1 0 0 0
+c
+d 198 1 0 0 0
+c
+d 385 1 0 0 0
+c
+d 386 1 0 0 0
+c
+d 107 1 0 0 0
+c
+d 108 1 0 0 0
+c
+d 338 1 0 0 0
+c
+d 339 1 0 0 0
+c
+d 340 1 0 0 0
+c
+d 347 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 90 1 0 0 0
+c
+d 270 1 0 0 0
+c
+d 271 1 0 1 0
+c
+d 417 1 0 1 0
+c
+d 418 1 0 0 0
+c
+d 178 1 0 0 0
+c
+d 179 1 0 0 0
+c
+d 608 1 0 0 0
+c
+d 419 1 0 0 0
+c
+d 430 1 0 0 0
+c
+d 446 1 0 0 0
+c
+d 342 1 0 0 0
+c
+d 352 1 0 0 0
+c
+d 353 1 0 0 0
+c
+d 355 1 1 0 0
+c
+d 358 1 0 0 0
+c
+d 360 2 0 0 0
+c
+d 673 1 0 0 0
+c
+d 24 1 0 0 0
+c
+d 78 1 0 0 0
+c
+d 79 1 0 0 0
+c
+d 97 1 0 0 0
+c
+d 98 1 0 0 0
+c
+d 220 1 0 0 0
+c
+d 222 1 0 1 0
+c
+d 224 1 0 0 0
+c
+d 171 1 0 1 0
+c
+d 380 1 0 0 0
+c
+d 56 1 1 0 0
+c
+d 57 1 0 0 0
+c
+d 66 1 0 0 0
+c
+d 186 1 0 0 0
+c
+d 258 1 0 0 0
+c
+d 259 1 0 0 0
+c
+d 261 1 0 0 0
+c
+d 691 2 0 0 0
+c
+d 456 1 0 0 0
+c
+d 470 1 0 0 0
+c
+d 471 1 0 0 0
+c
+d 28 1 0 0 0
+c
+d 29 1 0 0 0
+c
+d 30 1 0 0 0
+c
+d 516 1 1 0 0
+c
+d 532 1 0 0 0
+c
+d 343 1 0 0 0
+c
+d 348 1 0 0 0
+c
+d 361 1 0 0 0
+c
+d 414 1 0 0 0
+c
+d 415 1 0 0 0
+c
+d 150 1 0 0 0
+c
+d 216 1 0 0 0
+c
+d 217 1 0 0 0
+c
+d 397 1 1 0 0
+c
+d 516 1 0 0 0
+c
+d 550 1 0 0 0
+c
+d 504 1 0 0 0
+c
+d 510 1 0 0 0
+c
+d 5 1 0 0 0
+c
+d 570 1 0 0 0
+c
+d 598 1 0 0 0
+c
+d 599 1 0 0 0
+c
+d 350 1 0 0 0
+c
+d 351 2 0 0 0
+c
+d 352 1 0 0 0
+c
+d 344 1 0 0 0
+c
+d 363 2 0 0 0
+c
+d 364 1 0 0 0
+c
+d 397 1 0 0 0
+c
+d 398 1 0 0 0
+c
+d 47 1 0 0 0
+c
+d 48 1 0 0 0
+c
+d 126 1 0 0 0
+c
+d 408 1 0 0 0
+c
+d 262 1 0 1 0
+c
+d 263 1 0 0 0
+c
+d 579 1 0 0 0
+c
+d 580 1 1 0 0
+c
+d 583 1 0 0 0
+c
+d 584 1 0 0 0
+c
+d 585 1 0 0 0
+c
+d 472 1 0 0 0
+c
+d 473 1 0 0 0
+c
+d 675 1 0 0 0
+c
+d 90 1 0 0 0
+c
+d 91 1 0 0 0
+c
+d 202 1 0 0 0
+c
+d 254 1 1 0 0
+c
+d 38 2 1 0 0
+c
+d 40 1 0 0 0
+c
+d 56 1 0 0 0
+c
+d 66 1 0 0 0
+c
+d 414 1 0 0 0
+c
+d 415 1 0 0 0
+c
+d 24 1 0 0 0
+c
+d 54 1 0 0 0
+c
+d 732 1 0 0 0
+c
+d 519 1 0 0 0
+c
+d 520 2 1 0 0
+c
+d 521 1 0 0 0
+c
+d 706 1 0 0 0
+c
+d 423 1 0 0 0
+c
+d 449 1 0 0 0
+c
+d 450 1 0 0 0
+c
+d 345 2 1 0 0
+c
+d 88 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 79 1 0 1 0
+c
+d 80 2 1 0 0
+c
+d 81 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 118 1 0 0 0
+c
+d 119 1 0 0 0
+c
+d 120 1 0 0 0
+c
+d 132 1 0 1 0
+c
+d 133 1 0 0 0
+c
+d 336 1 0 0 0
+c
+d 337 1 0 0 0
+c
+d 94 1 0 0 0
+c
+d 95 1 0 0 0
+c
+d 120 1 0 0 0
+c
+d 24 1 1 0 0
+c
+d 25 1 0 0 0
+c
+d 75 1 0 0 0
+c
+d 456 1 0 0 0
+c
+d 457 1 0 0 0
+c
+d 94 1 0 0 0
+c
+d 95 1 0 0 0
+c
+d 136 1 0 1 0
+c
+d 137 1 0 1 0
+c
+d 14 1 0 0 0
+c
+d 547 1 0 0 0
+c
+d 698 1 0 0 0
+c
+d 488 1 1 0 0
+c
+d 489 1 0 0 0
+c
+d 498 1 0 0 0
+c
+d 153 1 1 0 0
+c
+d 154 1 0 0 0
+c
+d 166 1 0 0 0
+c
+d 397 1 0 0 0
+c
+d 550 2 1 0 0
+c
+d 551 1 1 0 0
+c
+d 58 1 0 0 0
+c
+d 59 1 0 0 0
+c
+d 179 1 0 0 0
+c
+d 180 1 0 0 0
+c
+d 22 1 0 1 0
+c
+d 75 1 0 0 0
+c
+d 76 1 0 0 0
+c
+d 172 1 0 0 0
+c
+d 383 1 0 0 0
+c
+d 679 1 0 0 0
+c
+d 253 2 1 0 0
+c
+d 254 1 0 0 0
+c
+d 566 2 0 0 0
+c
+d 567 1 1 0 0
+c
+d 573 1 0 0 0
+c
+d 227 1 1 0 0
+c
+d 236 2 0 0 0
+c
+d 238 2 0 0 0
+c
+d 255 1 1 0 0
+c
+d 397 1 0 0 0
+c
+d 398 2 1 0 0
+c
+d 44 1 0 0 0
+c
+d 67 1 0 0 0
+c
+d 68 1 0 0 0
+c
+d 22 1 0 0 0
+c
+d 473 1 0 0 0
+c
+d 676 1 0 0 0
+c
+d 444 1 0 0 0
+c
+d 445 1 0 0 0
+c
+d 179 1 0 1 0
+c
+d 604 1 0 1 0
+c
+d 174 1 0 0 0
+c
+d 175 1 0 0 0
+c
+d 3 1 0 0 0
+c
+d 4 1 0 0 0
+c
+d 464 1 0 0 0
+c
+d 465 1 0 0 0
+c
+d 219 1 1 0 0
+c
+d 255 1 1 0 0
+c
+d 256 2 1 0 0
+c
+d 136 1 0 1 0
+c
+d 137 1 0 0 0
+c
+d 343 1 0 0 0
+c
+d 344 1 0 0 0
+c
+d 378 1 0 0 0
+c
+d 759 1 0 0 0
+c
+d 202 2 1 0 0
+c
+d 203 1 0 0 0
+c
+d 578 1 0 0 0
+c
+d 579 1 0 1 0
+c
+d 306 1 1 0 0
+c
+d 307 1 0 0 0
+c
+d 490 3 0 1 0
+c
+d 500 2 0 0 0
+c
+d 187 1 0 1 0
+c
+d 188 1 0 0 0
+c
+d 424 1 0 0 0
+c
+d 428 1 0 0 0
+c
+d 740 1 0 0 0
+c
+d 99 2 0 1 0
+c
+d 100 1 0 0 0
+c
+d 12 1 0 0 0
+c
+d 13 1 0 0 0
+c
+d 488 2 1 0 0
+c
+d 498 2 0 0 0
+c
+d 381 1 0 0 0
+c
+d 387 1 0 1 0
+c
+d 392 1 0 0 0
+c
+d 504 2 1 0 0
+c
+d 505 1 0 0 0
+c
+d 614 1 0 0 0
+c
+d 6 1 0 0 0
+c
+d 7 1 0 0 0
+c
+d 8 1 0 0 0
+c
+d 595 1 0 0 0
+c
+d 121 1 0 0 0
+c
+d 122 1 0 0 0
+c
+d 430 1 0 1 0
+c
+d 680 1 0 0 0
+c
+d 540 2 1 0 0
+c
+d 541 1 0 0 0
+c
+d 558 1 0 0 0
+c
+d 559 1 0 1 0
+c
+d 149 1 0 1 0
+c
+d 263 1 0 1 0
+c
+d 651 1 0 0 0
+c
+d 202 2 0 0 0
+c
+d 203 1 0 0 0
+c
+d 290 1 0 0 0
+c
+d 719 2 0 0 0
+c
+d 210 1 0 0 0
+c
+d 212 1 0 0 0
+c
+d 225 1 0 0 0
+c
+d 240 1 0 0 0
+c
+d 692 1 0 0 0
+c
+d 186 1 0 0 0
+c
+d 267 2 1 0 0
+c
+d 720 1 0 0 0
+c
+d 721 1 0 0 0
+c
+d 48 1 0 0 0
+c
+d 49 1 0 0 0
+c
+d 14 1 0 0 0
+c
+d 21 1 0 0 0
+c
+d 22 1 0 1 0
+c
+d 547 1 0 0 0
+c
+d 126 1 0 0 0
+c
+d 127 1 0 0 0
+c
+d 50 1 0 0 0
+c
+d 51 1 0 0 0
+c
+d 52 1 0 0 0
+c
+d 508 1 0 0 0
+c
+d 509 1 0 0 0
+c
+d 526 1 0 0 0
+c
+d 527 1 0 0 0
+c
+d 672 1 0 0 0
+c
+d 207 1 0 1 0
+c
+d 227 2 0 0 0
+c
+d 231 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 107 1 0 0 0
+c
+d 108 1 0 0 0
+c
+d 109 1 0 0 0
+c
+d 124 1 0 0 0
+c
+d 424 2 0 0 0
+c
+d 425 1 0 0 0
+c
+d 365 1 0 0 0
+c
+d 485 1 0 0 0
+c
+d 486 1 0 0 0
+c
+d 210 1 0 0 0
+c
+d 211 1 0 0 0
+c
+d 212 1 0 0 0
+c
+d 342 1 0 0 0
+c
+d 348 2 0 0 0
+c
+d 362 1 0 0 0
+c
+d 370 1 0 0 0
+c
+d 629 1 0 0 0
+c
+d 630 1 0 0 0
+c
+d 245 1 0 0 0
+c
+d 396 1 0 0 0
+c
+d 24 1 0 0 0
+c
+d 643 1 1 0 0
+c
+d 645 1 0 0 0
+c
+d 646 1 0 0 0
+c
+d 146 1 0 0 0
+c
+d 147 1 0 0 0
+c
+d 202 1 0 0 0
+c
+d 250 1 0 0 0
+c
+d 251 1 0 0 0
+c
+d 202 1 0 1 0
+c
+d 235 1 0 0 0
+c
+d 488 1 0 0 0
+c
+d 203 1 0 0 0
+c
+d 581 2 1 0 0
+c
+d 582 1 0 0 0
+c
+d 587 1 0 0 0
+c
+d 325 1 0 0 0
+c
+d 326 1 0 0 0
+c
+d 637 1 0 0 0
+c
+d 638 1 0 0 0
+c
+d 737 1 0 0 0
+c
+d 140 1 0 0 0
+c
+d 141 1 0 0 0
+c
+d 539 1 0 0 0
+c
+d 629 1 0 0 0
+c
+d 157 1 0 1 0
+c
+d 158 2 1 0 0
+c
+d 159 1 0 0 0
+c
+d 160 1 0 0 0
+c
+d 751 1 0 0 0
+c
+d 130 1 0 0 0
+c
+d 416 1 0 0 0
+c
+d 417 1 0 0 0
+c
+d 464 1 0 0 0
+c
+d 50 1 0 0 0
+c
+d 51 1 0 0 0
+c
+d 172 1 0 0 0
+c
+d 173 1 0 0 0
+c
+d 575 1 1 0 0
+c
+d 576 1 0 0 0
+c
+d 687 2 0 0 0
+c
+d 157 1 0 0 0
+c
+d 276 1 0 0 0
+c
+d 277 2 0 0 0
+c
+d 235 1 0 0 0
+c
+d 236 1 1 0 0
+c
+d 241 2 1 0 0
+c
+d 343 1 0 0 0
+c
+d 345 1 0 0 0
+c
+d 367 1 0 0 0
+c
+d 368 1 0 0 0
+c
+d 313 1 0 0 0
+c
+d 481 1 0 0 0
+c
+d 145 1 0 0 0
+c
+d 146 1 0 0 0
+c
+d 99 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 102 1 0 0 0
+c
+d 103 1 0 0 0
+c
+d 735 2 0 0 0
+c
+d 22 1 0 1 0
+c
+d 38 1 0 0 0
+c
+d 42 1 0 0 0
+c
+d 342 2 0 0 0
+c
+d 343 1 0 0 0
+c
+d 351 1 0 0 0
+c
+d 352 1 0 0 0
+c
+d 91 1 0 0 0
+c
+d 286 1 0 0 0
+c
+d 328 1 0 0 0
+c
+d 342 1 0 0 0
+c
+d 353 1 0 0 0
+c
+d 354 2 0 0 0
+c
+d 355 1 0 0 0
+c
+d 397 1 0 0 0
+c
+d 398 1 0 0 0
+c
+d 348 2 0 0 0
+c
+d 349 1 0 0 0
+c
+d 364 1 0 0 0
+c
+d 365 1 0 0 0
+c
+d 336 1 0 0 0
+c
+d 337 1 0 0 0
+c
+d 133 1 0 1 0
+c
+d 134 1 0 0 0
+c
+d 322 1 0 0 0
+c
+d 549 1 0 0 0
+c
+d 14 1 0 0 0
+c
+d 27 1 0 0 0
+c
+d 140 1 0 0 0
+c
+d 141 1 0 0 0
+c
+d 93 1 0 1 0
+c
+d 94 1 0 0 0
+c
+d 430 1 0 0 0
+c
+d 443 1 0 0 0
+c
+d 444 1 0 0 0
+c
+d 143 1 0 0 0
+c
+d 144 1 0 0 0
+c
+d 259 1 1 0 0
+c
+d 581 2 1 0 0
+c
+d 587 1 0 0 0
+c
+d 590 1 0 0 0
+c
+d 154 1 0 1 0
+c
+d 155 2 1 0 0
+c
+d 156 2 0 0 0
+c
+d 158 1 0 0 0
+c
+d 161 1 0 0 0
+c
+d 756 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 115 1 0 0 0
+c
+d 107 1 0 1 0
+c
+d 725 1 0 0 0
+c
+d 381 1 0 1 0
+c
+d 383 1 0 0 0
+c
+d 679 1 0 0 0
+c
+d 93 1 0 1 0
+c
+d 94 1 0 0 0
+c
+d 338 1 0 0 0
+c
+d 339 1 0 0 0
+c
+d 325 1 0 0 0
+c
+d 326 1 0 0 0
+c
+d 504 1 1 0 0
+c
+d 505 2 1 0 0
+c
+d 615 1 0 0 0
+c
+d 616 2 0 0 0
+c
+d 1 1 0 0 0
+c
+d 83 1 0 0 0
+c
+d 535 1 1 0 0
+c
+d 536 2 1 0 0
+c
+d 537 2 1 0 0
+c
+d 538 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 118 1 0 0 0
+c
+d 125 1 0 0 0
+c
+d 490 1 0 0 0
+c
+d 500 1 0 0 0
+c
+d 750 2 0 0 0
+c
+d 492 1 0 0 0
+c
+d 560 1 0 0 0
+c
+d 561 1 0 0 0
+c
+d 753 1 0 0 0
+c
+d 145 1 0 0 0
+c
+d 245 1 0 0 0
+c
+d 413 1 0 0 0
+c
+d 38 1 0 0 0
+c
+d 63 1 0 1 0
+c
+d 64 2 1 0 0
+c
+d 65 1 0 0 0
+c
+d 325 1 0 0 0
+c
+d 331 1 0 0 0
+c
+d 332 1 0 0 0
+c
+d 137 1 0 1 0
+c
+d 138 1 0 0 0
+c
+d 148 1 0 0 0
+c
+d 149 1 0 0 0
+c
+d 150 1 1 0 0
+c
+d 209 1 1 0 0
+c
+d 210 1 0 0 0
+c
+d 211 1 0 0 0
+c
+d 33 1 0 0 0
+c
+d 69 1 0 0 0
+c
+d 70 1 0 0 0
+c
+d 413 1 0 0 0
+c
+d 414 1 0 0 0
+c
+d 134 1 0 1 0
+c
+d 135 1 0 0 0
+c
+d 421 1 0 0 0
+c
+d 422 1 0 0 0
+c
+d 447 1 0 0 0
+c
+d 488 1 0 0 0
+c
+d 489 1 0 0 0
+c
+d 421 1 0 0 0
+c
+d 422 2 0 0 0
+c
+d 437 2 0 0 0
+c
+d 509 1 0 1 0
+c
+d 510 1 1 0 0
+c
+d 511 1 0 0 0
+c
+d 512 1 0 0 0
+c
+d 672 1 0 0 0
+c
+d 143 1 0 0 0
+c
+d 144 1 0 0 0
+c
+d 536 1 0 0 0
+c
+d 537 1 0 0 0
+c
+d 146 1 0 1 0
+c
+d 147 1 0 0 0
+c
+d 100 1 0 1 0
+c
+d 373 1 0 0 0
+c
+d 374 2 0 0 0
+c
+d 375 1 0 0 0
+c
+d 0 1 0 0 0
+c
+d 1 1 0 0 0
+c
+d 682 1 0 0 0
+c
+d 344 1 1 0 0
+c
+d 345 1 0 0 0
+c
+d 140 1 0 0 0
+c
+d 141 1 0 0 0
+c
+d 504 1 1 0 0
+c
+d 529 1 0 0 0
+c
+d 315 1 0 0 0
+c
+d 316 1 0 0 0
+c
+d 488 1 0 0 0
+c
+d 493 1 0 0 0
+c
+d 203 1 0 0 0
+c
+d 300 1 0 0 0
+c
+d 301 2 0 0 0
+c
+d 90 1 0 0 0
+c
+d 269 1 0 0 0
+c
+d 270 1 0 0 0
+c
+d 353 1 0 0 0
+c
+d 354 2 0 0 0
+c
+d 355 1 0 0 0
+c
+d 150 1 0 0 0
+c
+d 169 1 0 0 0
+c
+d 478 1 0 1 0
+c
+d 479 2 1 0 0
+c
+d 480 1 0 1 0
+c
+d 738 1 0 0 0
+c
+d 424 1 0 0 0
+c
+d 425 1 0 0 0
+c
+d 259 1 0 0 0
+c
+d 260 1 0 0 0
+c
+d 183 1 0 0 0
+c
+d 184 1 0 0 0
+c
+d 419 1 0 0 0
+c
+d 459 1 0 0 0
+c
+d 681 1 0 0 0
+c
+d 348 2 0 0 0
+c
+d 349 1 0 0 0
+c
+d 363 1 0 0 0
+c
+d 364 1 0 0 0
+c
+d 413 1 0 0 0
+c
+d 414 1 0 0 0
+c
+d 204 2 1 0 0
+c
+d 205 1 0 0 0
+c
+d 211 1 0 0 0
+c
+d 222 1 0 0 0
+c
+d 223 1 0 0 0
+c
+d 299 1 0 0 0
+c
+d 300 1 0 0 0
+c
+d 152 1 0 0 0
+c
+d 164 1 0 0 0
+c
+d 165 1 0 0 0
+c
+d 109 1 0 0 0
+c
+d 110 1 0 0 0
+c
+d 325 1 0 0 0
+c
+d 326 1 0 0 0
+c
+d 138 1 0 0 0
+c
+d 139 1 0 1 0
+c
+d 7 1 0 0 0
+c
+d 638 1 1 0 0
+c
+d 737 1 0 0 0
+c
+d 322 1 0 0 0
+c
+d 323 1 0 0 0
+c
+d 331 1 0 0 0
+c
+d 332 1 0 0 0
+c
+d 377 2 0 0 0
+c
+d 286 1 0 0 0
+c
+d 328 1 0 0 0
+c
+d 153 1 1 0 0
+c
+d 154 2 1 0 0
+c
+d 158 1 0 0 0
+c
+d 162 1 0 0 0
+c
+d 163 2 0 0 0
+c
+d 167 1 0 0 0
+c
+d 414 1 0 0 0
+c
+d 415 1 0 0 0
+c
+d 154 1 0 0 0
+c
+d 277 2 0 1 0
+c
+d 279 1 0 0 0
+c
+d 463 1 0 0 0
+c
+d 95 1 1 0 0
+c
+d 98 1 0 0 0
+c
+d 384 1 0 0 0
+c
+d 304 3 1 0 0
+c
+d 310 1 0 0 0
+c
+d 592 1 0 0 0
+c
+d 593 2 1 0 0
+c
+d 48 1 0 0 0
+c
+d 49 1 0 0 0
+c
+d 490 1 0 0 0
+c
+d 491 1 0 0 0
+c
+d 561 1 0 0 0
+c
+d 753 1 0 0 0
+c
+d 33 1 0 0 0
+c
+d 34 1 0 0 0
+c
+d 318 1 0 0 0
+c
+d 319 1 0 0 0
+c
+d 71 1 0 1 0
+c
+d 72 1 0 0 0
+c
+d 205 1 0 0 0
+c
+d 206 2 0 0 0
+c
+d 207 2 0 0 0
+c
+d 211 1 1 0 0
+c
+d 212 1 0 0 0
+c
+d 213 2 1 0 0
+c
+d 749 2 0 0 0
+c
+d 305 1 1 0 0
+c
+d 306 1 0 0 0
+c
+d 307 2 0 0 0
+c
+d 697 1 0 0 0
+c
+d 415 1 0 0 0
+c
+d 416 1 0 0 0
+c
+d 219 1 0 0 0
+c
+d 258 1 0 0 0
+c
+d 259 1 0 1 0
+c
+d 390 2 1 0 0
+c
+d 391 2 0 0 0
+c
+d 581 1 0 0 0
+c
+d 590 1 0 0 0
+c
+d 5 1 0 0 0
+c
+d 33 2 0 0 0
+c
+d 34 1 0 0 0
+c
+d 70 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 107 2 0 0 0
+c
+d 108 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 102 2 0 0 0
+c
+d 103 1 0 0 0
+c
+d 366 1 0 0 0
+c
+d 367 1 0 0 0
+c
+d 7 1 0 0 0
+c
+d 10 1 0 0 0
+c
+d 11 2 0 0 0
+c
+d 504 1 0 0 0
+c
+d 524 2 0 0 0
+c
+d 557 2 0 0 0
+c
+d 558 1 0 0 0
+c
+d 559 1 0 0 0
+c
+d 189 3 1 0 0
+c
+d 190 2 0 0 0
+c
+d 566 1 1 0 0
+c
+d 414 1 0 0 0
+c
+d 415 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 622 1 1 0 0
+c
+d 623 1 0 0 0
+c
+d 624 1 0 0 0
+c
+d 172 1 0 0 0
+c
+d 173 1 0 0 0
+c
+d 57 1 0 0 0
+c
+d 58 1 0 0 0
+c
+d 413 1 0 0 0
+c
+d 414 1 0 0 0
+c
+d 33 1 0 0 0
+c
+d 70 1 0 0 0
+c
+d 102 1 0 0 0
+c
+d 103 1 0 0 0
+c
+d 104 1 0 0 0
+c
+d 321 1 0 0 0
+c
+d 322 1 0 0 0
+c
+d 377 1 0 0 0
+c
+d 91 1 0 0 0
+c
+d 92 1 0 0 0
+c
+d 92 1 0 0 0
+c
+d 130 1 0 0 0
+c
+d 315 1 0 0 0
+c
+d 324 1 0 0 0
+c
+d 325 1 0 0 0
+c
+d 140 1 0 0 0
+c
+d 141 1 0 0 0
+c
+d 413 1 0 0 0
+c
+d 201 1 1 0 0
+c
+d 202 1 0 0 0
+c
+d 93 1 0 0 0
+c
+d 94 1 0 1 0
+c
+d 440 1 0 0 0
+c
+d 172 1 1 0 0
+c
+d 381 1 0 0 0
+c
+d 385 1 0 0 0
+c
+d 410 1 0 0 0
+c
+d 57 1 1 0 0
+c
+d 60 1 0 1 0
+c
+d 61 1 0 0 0
+c
+d 726 1 0 0 0
+c
+d 424 2 1 0 0
+c
+d 458 1 0 0 0
+c
+d 459 1 1 0 0
+c
+d 536 1 1 0 0
+c
+d 537 2 0 0 0
+c
+d 538 1 0 0 0
+c
+d 539 1 0 0 0
+c
+d 540 1 1 0 0
+c
+d 710 2 0 0 0
+c
+d 139 1 0 0 0
+c
+d 140 1 0 0 0
+c
+d 325 1 0 0 0
+c
+d 326 1 0 0 0
+c
+d 659 1 0 0 0
+c
+d 134 1 0 0 0
+c
+d 135 1 0 0 0
+c
+d 413 1 0 0 0
+c
+d 327 1 0 0 0
+c
+d 328 1 0 1 0
+c
+d 38 1 0 0 0
+c
+d 39 1 0 0 0
+c
+d 40 1 0 0 0
+c
+d 168 1 0 0 0
+c
+d 169 1 0 0 0
+c
+d 385 1 0 0 0
+c
+d 386 1 0 0 0
+c
+d 27 1 0 1 0
+c
+d 28 1 1 0 0
+c
+d 137 1 0 0 0
+c
+d 138 1 0 0 0
+c
+d 1 1 0 0 0
+c
+d 44 1 0 0 0
+c
+d 45 1 0 0 0
+c
+d 151 2 0 0 0
+c
+d 152 1 1 0 0
+c
+d 481 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 107 1 0 0 0
+c
+d 423 1 0 0 0
+c
+d 480 1 0 0 0
+c
+d 739 1 0 0 0
+c
+d 423 1 0 0 0
+c
+d 476 1 1 0 0
+c
+d 484 1 0 0 0
+c
+d 1 1 0 0 0
+c
+d 83 1 0 0 0
+c
+d 92 1 0 0 0
+c
+d 315 1 0 0 0
+c
+d 316 1 0 0 0
+c
+d 12 1 0 0 0
+c
+d 13 1 0 0 0
+c
+d 126 1 0 0 0
+c
+d 127 1 0 0 0
+c
+d 209 1 0 0 0
+c
+d 225 1 1 0 0
+c
+d 240 1 0 0 0
+c
+d 692 1 0 0 0
+c
+d 744 1 0 0 0
+c
+d 624 1 0 0 0
+c
+d 625 2 0 0 0
+c
+d 626 1 0 0 0
+c
+d 627 1 0 0 0
+c
+d 516 1 0 0 0
+c
+d 517 1 0 0 0
+c
+d 76 1 0 1 0
+c
+d 77 1 0 0 0
+c
+d 78 1 0 0 0
+c
+d 79 1 0 0 0
+c
+d 80 1 0 0 0
+c
+d 81 1 0 0 0
+c
+d 82 1 0 0 0
+c
+d 5 1 0 0 0
+c
+d 401 1 0 0 0
+c
+d 101 1 0 1 0
+c
+d 242 1 0 0 0
+c
+d 150 1 0 0 0
+c
+d 151 1 0 0 0
+c
+d 186 2 1 0 0
+c
+d 258 1 0 0 0
+c
+d 303 1 0 0 0
+c
+d 107 1 0 0 0
+c
+d 663 1 0 0 0
+c
+d 511 1 0 0 0
+c
+d 512 2 1 1 0
+c
+d 520 1 0 0 0
+c
+d 527 1 0 0 0
+c
+d 184 1 0 1 0
+c
+d 185 1 0 0 0
+c
+d 38 1 0 0 0
+c
+d 39 1 0 0 0
+c
+d 98 1 0 1 0
+c
+d 99 1 0 0 0
+c
+d 582 1 1 0 0
+c
+d 583 2 1 0 0
+c
+d 584 1 0 0 0
+c
+d 585 1 0 0 0
+c
+d 14 1 0 1 0
+c
+d 42 1 0 0 0
+c
+d 43 2 0 0 0
+c
+d 653 2 0 0 0
+c
+d 349 1 0 0 0
+c
+d 350 2 0 0 0
+c
+d 351 1 0 0 0
+c
+d 179 1 0 0 0
+c
+d 180 1 0 1 0
+c
+d 353 1 0 0 0
+c
+d 354 2 0 0 0
+c
+d 355 1 0 0 0
+c
+d 139 1 0 0 0
+c
+d 140 1 0 0 0
+c
+d 46 1 0 0 0
+c
+d 47 1 0 0 0
+c
+d 22 1 0 0 0
+c
+d 470 1 0 0 0
+c
+d 471 1 0 0 0
+c
+d 0 1 0 0 0
+c
+d 12 1 0 0 0
+c
+d 13 1 0 0 0
+c
+d 231 1 0 1 0
+c
+d 233 1 0 0 0
+c
+d 234 1 0 0 0
+c
+d 6 1 0 0 0
+c
+d 594 1 0 0 0
+c
+d 595 1 0 0 0
+c
+d 321 1 0 0 0
+c
+d 322 1 0 1 0
+c
+d 138 1 0 0 0
+c
+d 139 1 0 0 0
+c
+d 91 1 0 0 0
+c
+d 291 1 0 0 0
+c
+d 292 1 0 0 0
+c
+d 160 1 1 0 0
+c
+d 161 1 0 0 0
+c
+d 162 1 0 0 0
+c
+d 757 2 0 0 0
+c
+d 100 1 0 0 0
+c
+d 121 1 0 0 0
+c
+d 24 2 1 1 0
+c
+d 25 2 1 0 0
+c
+d 26 2 1 0 0
+c
+d 733 1 0 0 0
+c
+d 204 1 0 0 0
+c
+d 205 2 0 0 0
+c
+d 206 1 0 0 0
+c
+d 144 1 0 0 0
+c
+d 145 1 0 1 0
+c
+d 289 1 0 0 0
+c
+d 658 1 0 0 0
+c
+d 424 1 1 0 0
+c
+d 479 1 0 0 0
+c
+d 738 1 0 0 0
+c
+d 108 1 1 0 0
+c
+d 110 1 0 0 0
+c
+d 171 1 0 1 0
+c
+d 172 1 0 1 0
+c
+d 98 1 0 0 0
+c
+d 99 1 0 0 0
+c
+d 321 1 0 0 0
+c
+d 322 1 0 0 0
+c
+d 24 1 0 0 0
+c
+d 25 1 0 0 0
+c
+d 424 1 0 0 0
+c
+d 476 1 0 0 0
+c
+d 734 1 0 0 0
+c
+d 92 1 0 0 0
+c
+d 315 1 0 0 0
+c
+d 420 1 0 0 0
+c
+d 423 1 0 0 0
+c
+d 441 2 0 0 0
+c
+d 442 1 0 0 0
+c
+d 713 1 0 0 0
+c
+d 245 1 0 0 0
+c
+d 248 1 0 0 0
+c
+d 150 1 0 0 0
+c
+d 275 1 0 0 0
+c
+d 701 1 0 0 0
+c
+d 142 1 0 1 0
+c
+d 143 1 0 1 0
+c
+d 234 1 0 1 0
+c
+d 552 2 0 0 0
+c
+d 554 2 0 0 0
+c
+d 539 1 0 0 0
+c
+d 540 1 0 0 0
+c
+d 541 2 0 0 0
+c
+d 99 1 1 0 0
+c
+d 100 1 0 0 0
+c
+d 496 1 0 0 0
+c
+d 23 1 0 0 0
+c
+d 640 1 0 0 0
+c
+d 641 2 1 0 0
+c
+d 245 1 0 0 0
+c
+d 246 1 0 0 0
+c
+d 394 1 0 0 0
+c
+d 92 1 0 0 0
+c
+d 315 1 0 0 0
+c
+d 150 1 0 0 0
+c
+d 215 1 0 0 0
+c
+d 216 1 0 0 0
+c
+d 423 1 0 0 0
+c
+d 430 1 0 0 0
+c
+d 442 1 0 0 0
+c
+d 152 1 0 0 0
+c
+d 153 1 0 0 0
+c
+d 634 1 0 0 0
+c
+d 505 1 0 0 0
+c
+d 614 1 0 0 0
+c
+d 615 1 0 0 0
+c
+d 108 1 0 0 0
+c
+d 109 1 0 0 0
+c
+d 14 1 0 0 0
+c
+d 15 3 0 0 0
+c
+d 7 3 1 0 0
+c
+d 8 1 0 0 0
+c
+d 568 1 0 0 0
+c
+d 569 1 0 0 0
+c
+d 142 1 0 1 0
+c
+d 143 1 0 0 0
+c
+d 304 1 0 1 0
+c
+d 591 2 0 0 0
+c
+d 596 2 1 0 0
+c
+d 597 1 0 0 0
+c
+d 8 1 0 0 0
+c
+d 9 1 0 0 0
+c
+d 14 1 0 0 0
+c
+d 41 1 1 0 0
+c
+d 172 1 0 1 0
+c
+d 173 1 0 0 0
+c
+d 38 1 0 0 0
+c
+d 44 1 0 0 0
+c
+d 68 1 0 0 0
+c
+d 363 1 0 0 0
+c
+d 364 2 0 0 0
+c
+d 365 1 0 0 0
+c
+d 487 1 0 0 0
+c
+d 304 2 0 0 0
+c
+d 306 1 1 0 0
+c
+d 647 2 1 0 0
+c
+d 648 1 0 0 0
+c
+d 202 1 0 1 0
+c
+d 203 2 1 0 0
+c
+d 227 1 0 1 0
+c
+d 178 1 0 0 0
+c
+d 244 1 0 0 0
+c
+d 413 1 0 0 0
+c
+d 414 1 0 0 0
+c
+d 235 1 0 0 0
+c
+d 516 1 0 0 0
+c
+d 517 1 0 0 0
+c
+d 150 1 0 0 0
+c
+d 182 1 0 0 0
+c
+d 184 1 0 0 0
+c
+d 701 1 0 0 0
+c
+d 154 1 0 0 0
+c
+d 461 1 0 0 0
+c
+d 462 2 0 0 0
+c
+d 513 1 1 0 0
+c
+d 514 2 1 0 0
+c
+d 515 1 0 0 0
+c
+d 516 1 0 0 0
+c
+d 521 1 0 1 0
+c
+d 406 1 0 0 0
+c
+d 407 1 0 0 0
+c
+d 151 1 0 0 0
+c
+d 602 1 0 0 0
+c
+d 603 1 0 0 0
+c
+d 145 1 0 1 0
+c
+d 248 1 0 0 0
+c
+d 249 1 0 0 0
+c
+d 142 1 0 0 0
+c
+d 143 1 0 0 0
+c
+d 227 1 1 0 0
+c
+d 236 2 0 0 0
+c
+d 295 2 1 0 0
+c
+d 296 1 0 0 0
+c
+d 297 1 0 0 0
+c
+d 5 1 1 0 0
+c
+d 6 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 158 1 0 0 0
+c
+d 99 1 0 0 0
+c
+d 101 2 1 0 0
+c
+d 103 1 0 1 0
+c
+d 121 1 0 0 0
+c
+d 735 1 0 0 0
+c
+d 341 1 0 0 0
+c
+d 342 1 0 0 0
+c
+d 15 1 0 0 0
+c
+d 16 1 0 0 0
+c
+d 102 1 0 1 0
+c
+d 563 1 0 0 0
+c
+d 564 1 1 0 0
+c
+d 577 1 0 1 0
+c
+d 578 1 0 0 0
+c
+d 176 1 0 0 0
+c
+d 177 1 0 0 0
+c
+d 207 1 1 0 0
+c
+d 208 2 0 0 0
+c
+d 209 1 0 0 0
+c
+d 743 1 0 0 0
+c
+d 177 1 0 0 0
+c
+d 245 1 0 0 0
+c
+d 130 1 0 0 0
+c
+d 131 1 0 0 0
+c
+d 133 1 0 0 0
+c
+d 134 1 0 0 0
+c
+d 623 1 0 0 0
+c
+d 624 1 0 1 0
+c
+d 9 1 1 0 0
+c
+d 10 1 0 0 0
+c
+d 15 1 0 0 0
+c
+d 45 1 0 0 0
+c
+d 46 1 0 0 0
+c
+d 609 1 0 0 0
+c
+d 413 1 0 1 0
+c
+d 414 1 0 0 0
+c
+d 148 2 1 0 0
+c
+d 150 1 0 0 0
+c
+d 168 1 0 0 0
+c
+d 214 1 0 0 0
+c
+d 424 1 0 0 0
+c
+d 477 1 0 0 0
+c
+d 478 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 622 1 0 0 0
+c
+d 148 1 0 0 0
+c
+d 169 2 0 0 0
+c
+d 170 1 0 1 0
+c
+d 678 1 0 0 0
+c
+d 187 1 1 0 0
+c
+d 188 1 0 0 0
+c
+d 189 2 0 0 0
+c
+d 582 1 0 0 0
+c
+d 583 2 0 0 0
+c
+d 584 1 0 0 0
+c
+d 207 1 0 0 0
+c
+d 208 1 0 0 0
+c
+d 333 1 0 0 0
+c
+d 334 1 0 0 0
+c
+d 444 1 0 0 0
+c
+d 445 1 0 0 0
+c
+d 614 1 0 1 0
+c
+d 615 1 0 0 0
+c
+d 145 1 0 1 0
+c
+d 246 1 0 0 0
+c
+d 394 1 0 0 0
+c
+d 33 1 0 0 0
+c
+d 34 2 0 0 0
+c
+d 35 1 0 0 0
+c
+d 3 1 0 1 0
+c
+d 72 1 0 0 0
+c
+d 73 1 0 0 0
+c
+d 92 1 0 0 0
+c
+d 127 1 0 0 0
+c
+d 128 1 0 0 0
+c
+d 57 1 1 0 0
+c
+d 111 1 0 0 0
+c
+d 245 1 0 1 0
+c
+d 246 1 0 0 0
+c
+d 76 1 0 0 0
+c
+d 85 1 0 0 0
+c
+d 421 1 0 0 0
+c
+d 423 1 0 0 0
+c
+d 452 2 0 0 0
+c
+d 453 2 0 0 0
+c
+d 137 1 0 1 0
+c
+d 138 1 0 0 0
+c
+d 488 1 0 1 0
+c
+d 504 1 0 0 0
+c
+d 707 1 0 0 0
+c
+d 102 1 0 0 0
+c
+d 103 1 0 0 0
+c
+d 104 1 0 0 0
+c
+d 87 1 1 0 0
+c
+d 107 1 0 0 0
+c
+d 293 1 0 0 0
+c
+d 148 1 0 0 0
+c
+d 214 1 0 0 0
+c
+d 215 1 0 0 0
+c
+d 4 1 0 0 0
+c
+d 35 1 0 0 0
+c
+d 36 2 0 0 0
+c
+d 700 1 0 0 0
+c
+d 324 1 0 0 0
+c
+d 325 1 0 0 0
+c
+d 625 1 1 0 0
+c
+d 626 1 0 0 0
+c
+d 245 1 0 0 0
+c
+d 247 1 0 0 0
+c
+d 248 1 0 0 0
+c
+d 203 1 0 0 0
+c
+d 581 2 0 0 0
+c
+d 587 1 0 0 0
+c
+d 590 1 0 0 0
+c
+d 321 1 0 1 0
+c
+d 333 1 0 0 0
+c
+d 334 1 0 0 0
+c
+d 111 1 0 0 0
+c
+d 112 1 0 0 0
+c
+d 113 1 0 0 0
+c
+d 114 1 0 0 0
+c
+d 0 1 0 0 0
+c
+d 1 1 0 0 0
+c
+d 148 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 277 2 1 0 0
+c
+d 278 2 0 0 0
+c
+d 460 1 1 0 0
+c
+d 109 1 0 0 0
+c
+d 110 1 0 0 0
+c
+d 138 1 0 1 0
+c
+d 139 1 0 0 0
+c
+d 137 1 0 0 0
+c
+d 138 1 0 0 0
+c
+d 418 1 0 1 0
+c
+d 419 1 0 0 0
+c
+d 464 1 0 0 0
+c
+d 189 2 1 1 0
+c
+d 190 2 0 0 0
+c
+d 191 1 0 0 0
+c
+d 747 2 0 0 0
+c
+d 227 1 0 0 0
+c
+d 228 4 0 0 0
+c
+d 230 1 0 0 0
+c
+d 742 1 0 0 0
+c
+d 745 1 0 0 0
+c
+d 418 1 0 0 0
+c
+d 419 1 0 0 0
+c
+d 465 1 0 0 0
+c
+d 636 2 0 0 0
+c
+d 730 1 0 0 0
+c
+d 137 1 0 0 0
+c
+d 138 1 0 0 0
+c
+d 186 1 1 0 0
+c
+d 258 1 0 0 0
+c
+d 267 1 0 0 0
+c
+d 720 1 0 0 0
+c
+d 315 1 0 0 0
+c
+d 316 1 0 0 0
+c
+d 23 3 1 0 0
+c
+d 38 1 0 1 0
+c
+d 39 1 1 0 0
+c
+d 639 1 0 0 0
+c
+d 641 1 0 0 0
+c
+d 154 2 1 0 0
+c
+d 461 1 0 0 0
+c
+d 462 2 0 0 0
+c
+d 228 2 0 0 0
+c
+d 229 1 0 0 0
+c
+d 230 1 0 0 0
+c
+d 236 1 0 0 0
+c
+d 22 1 0 0 0
+c
+d 85 1 0 0 0
+c
+d 469 1 0 0 0
+c
+d 321 1 0 0 0
+c
+d 336 1 0 0 0
+c
+d 337 1 0 0 0
+c
+d 609 2 1 0 0
+c
+d 610 1 0 0 0
+c
+d 611 1 1 0 0
+c
+d 612 1 0 0 0
+c
+d 613 1 0 0 0
+c
+d 95 1 0 0 0
+c
+d 126 1 0 0 0
+c
+d 412 1 0 0 0
+c
+d 317 1 0 0 0
+c
+d 333 1 0 0 0
+c
+d 334 1 0 0 0
+c
+d 400 1 0 0 0
+c
+d 227 1 0 0 0
+c
+d 234 1 0 0 0
+c
+d 177 1 0 1 0
+c
+d 178 2 1 0 0
+c
+d 179 1 0 0 0
+c
+d 418 1 0 0 0
+c
+d 419 1 0 0 0
+c
+d 258 1 1 0 0
+c
+d 260 1 0 0 0
+c
+d 261 1 0 0 0
+c
+d 98 1 0 0 0
+c
+d 99 1 0 0 0
+c
+d 219 1 0 0 0
+c
+d 220 1 1 0 0
+c
+d 221 2 1 0 0
+c
+d 222 1 0 0 0
+c
+d 746 1 0 0 0
+c
+d 464 1 0 0 0
+c
+d 465 1 0 0 0
+c
+d 134 1 0 1 0
+c
+d 135 1 0 0 0
+c
+d 287 1 0 0 0
+c
+d 288 1 0 0 0
+c
+d 286 1 0 0 0
+c
+d 287 1 0 0 0
+c
+d 185 1 0 0 0
+c
+d 275 1 0 0 0
+c
+d 3 1 0 0 0
+c
+d 17 1 0 0 0
+c
+d 18 1 0 0 0
+c
+d 19 1 0 0 0
+c
+d 655 1 0 0 0
+c
+d 343 1 0 0 0
+c
+d 344 1 0 0 0
+c
+d 348 2 0 0 0
+c
+d 349 1 0 0 0
+c
+d 665 1 0 0 0
+c
+d 632 1 0 0 0
+c
+d 633 1 0 0 0
+c
+d 318 1 0 0 0
+c
+d 319 1 0 0 0
+c
+d 333 1 0 0 0
+c
+d 130 1 0 1 0
+c
+d 340 1 0 0 0
+c
+d 347 1 0 0 0
+c
+d 419 1 0 0 0
+c
+d 443 1 0 0 0
+c
+d 177 1 0 1 0
+c
+d 178 2 1 0 0
+c
+d 179 1 0 1 0
+c
+d 189 1 0 0 0
+c
+d 191 2 0 0 0
+c
+d 192 2 0 0 0
+c
+d 718 3 0 0 0
+c
+d 202 1 0 1 0
+c
+d 579 1 0 0 0
+c
+d 580 3 0 0 0
+c
+d 581 1 1 0 0
+c
+d 693 2 0 0 0
+c
+d 142 1 0 0 0
+c
+d 143 1 0 0 0
+c
+d 413 1 0 0 0
+c
+d 235 1 0 0 0
+c
+d 518 2 1 0 0
+c
+d 667 1 0 0 0
+c
+d 150 1 0 0 0
+c
+d 169 1 0 1 0
+c
+d 183 1 0 0 0
+c
+d 184 1 0 0 0
+c
+d 76 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 107 1 0 0 0
+c
+d 725 1 0 0 0
+c
+d 179 1 0 0 0
+c
+d 180 1 0 0 0
+c
+d 126 1 0 0 0
+c
+d 408 1 1 0 0
+c
+d 409 1 0 0 0
+c
+d 186 1 0 0 0
+c
+d 201 2 0 0 0
+c
+d 250 1 1 0 0
+c
+d 724 1 0 0 0
+c
+d 131 1 0 0 0
+c
+d 132 1 0 0 0
+c
+d 516 1 0 0 0
+c
+d 519 1 0 0 0
+c
+d 520 2 0 0 0
+c
+d 521 1 0 0 0
+c
+d 530 1 0 0 0
+c
+d 150 1 0 0 0
+c
+d 169 1 0 0 0
+c
+d 45 1 0 0 0
+c
+d 46 1 0 0 0
+c
+d 169 1 0 1 0
+c
+d 314 1 0 0 0
+c
+d 92 1 0 0 0
+c
+d 406 1 0 0 0
+c
+d 127 1 0 0 0
+c
+d 128 1 0 0 0
+c
+d 91 1 1 0 0
+c
+d 323 1 0 0 0
+c
+d 324 1 0 0 0
+c
+d 236 1 1 0 0
+c
+d 237 2 1 0 0
+c
+d 238 2 0 0 0
+c
+d 239 1 0 0 0
+c
+d 666 1 0 0 0
+c
+d 492 1 0 0 0
+c
+d 524 1 0 0 0
+c
+d 528 2 0 0 0
+c
+d 535 1 0 0 0
+c
+d 38 1 1 0 0
+c
+d 39 1 0 0 0
+c
+d 63 1 0 0 0
+c
+d 64 1 0 0 0
+c
+d 65 1 0 0 0
+c
+d 4 1 0 1 0
+c
+d 27 2 1 0 0
+c
+d 28 1 0 0 0
+c
+d 419 2 1 0 0
+c
+d 420 1 0 1 0
+c
+d 444 1 0 0 0
+c
+d 445 1 0 0 0
+c
+d 14 1 0 0 0
+c
+d 32 1 0 0 0
+c
+d 91 1 0 0 0
+c
+d 94 1 0 0 0
+c
+d 270 1 0 0 0
+c
+d 143 1 0 0 0
+c
+d 144 1 0 0 0
+c
+d 423 2 0 1 0
+c
+d 450 1 0 0 0
+c
+d 483 1 0 0 0
+c
+d 484 1 0 0 0
+c
+d 512 1 1 0 0
+c
+d 629 2 0 0 0
+c
+d 631 2 0 0 0
+c
+d 424 1 0 0 0
+c
+d 429 1 0 0 0
+c
+d 170 1 0 0 0
+c
+d 171 1 0 0 0
+c
+d 170 1 0 0 0
+c
+d 171 1 0 0 0
+c
+d 24 1 0 1 0
+c
+d 38 1 0 0 0
+c
+d 55 1 0 0 0
+c
+d 419 1 0 0 0
+c
+d 458 1 0 0 0
+c
+d 459 1 0 0 0
+c
+d 144 1 0 0 0
+c
+d 145 1 0 0 0
+c
+d 7 2 1 0 0
+c
+d 570 1 0 0 0
+c
+d 571 1 0 0 0
+c
+d 637 1 1 0 0
+c
+d 420 2 1 0 0
+c
+d 421 1 1 0 0
+c
+d 442 1 0 0 0
+c
+d 202 1 1 0 0
+c
+d 253 2 0 0 0
+c
+d 576 1 0 0 0
+c
+d 586 2 0 0 0
+c
+d 203 2 0 0 0
+c
+d 204 2 0 0 0
+c
+d 221 1 0 0 0
+c
+d 222 1 0 0 0
+c
+d 300 1 0 0 0
+c
+d 708 1 0 0 0
+c
+d 159 1 0 1 0
+c
+d 160 2 1 0 0
+c
+d 161 1 0 1 0
+c
+d 131 1 0 0 0
+c
+d 272 1 0 0 0
+c
+d 345 1 0 0 0
+c
+d 346 1 0 0 0
+c
+d 507 1 0 1 0
+c
+d 508 2 1 0 0
+c
+d 130 1 0 0 0
+c
+d 317 1 0 0 0
+c
+d 400 1 0 0 0
+c
+d 141 1 0 0 0
+c
+d 142 1 0 0 0
+c
+d 136 1 0 0 0
+c
+d 338 1 0 0 0
+c
+d 339 1 0 0 0
+c
+d 1 1 0 0 0
+c
+d 12 1 0 1 0
+c
+d 83 2 0 1 0
+c
+d 84 1 1 0 0
+c
+d 180 1 0 0 0
+c
+d 181 1 0 0 0
+c
+d 196 1 0 0 0
+c
+d 101 1 0 1 0
+c
+d 563 1 0 0 0
+c
+d 182 1 0 1 0
+c
+d 183 1 0 0 0
+c
+d 14 1 0 1 0
+c
+d 15 1 0 0 0
+c
+d 20 2 0 0 0
+c
+d 652 1 0 0 0
+c
+d 335 1 0 0 0
+c
+d 336 1 0 0 0
+c
+d 488 2 0 0 0
+c
+d 492 1 1 0 0
+c
+d 497 2 1 0 0
+c
+d 498 1 0 0 0
+c
+d 23 2 0 0 0
+c
+d 62 2 0 0 0
+c
+d 255 2 1 0 0
+c
+d 256 1 0 0 0
+c
+d 398 2 0 0 0
+c
+d 399 1 0 0 0
+c
+d 669 1 0 0 0
+c
+d 207 1 0 0 0
+c
+d 208 2 0 0 0
+c
+d 209 1 0 0 0
+c
+d 227 1 0 1 0
+c
+d 231 1 0 0 0
+c
+d 234 2 1 0 0
+c
+d 554 1 0 0 0
+c
+d 504 1 0 1 0
+c
+d 522 1 0 0 0
+c
+d 523 2 0 0 0
+c
+d 524 2 0 0 0
+c
+d 525 1 1 0 0
+c
+d 76 3 1 1 0
+c
+d 81 1 0 1 0
+c
+d 82 1 0 0 0
+c
+d 85 2 1 0 0
+c
+d 86 2 0 0 0
+c
+d 87 1 0 0 0
+c
+d 24 1 0 0 0
+c
+d 642 1 0 0 0
+c
+d 643 2 1 0 0
+c
+d 644 1 0 0 0
+c
+d 645 1 0 0 0
+c
+d 207 1 0 0 0
+c
+d 208 2 0 0 0
+c
+d 209 1 0 0 0
+c
+d 744 1 0 0 0
+c
+d 345 2 1 0 0
+c
+d 346 1 0 0 0
+c
+d 423 1 0 0 0
+c
+d 454 1 0 0 0
+c
+d 455 1 0 0 0
+c
+d 596 1 1 0 0
+c
+d 597 2 1 0 0
+c
+d 598 1 0 0 0
+c
+d 186 1 0 0 0
+c
+d 266 1 0 0 0
+c
+d 90 1 0 0 0
+c
+d 115 1 1 0 0
+c
+d 116 2 0 0 0
+c
+d 321 1 0 0 0
+c
+d 322 1 0 0 0
+c
+d 181 1 0 0 0
+c
+d 182 1 0 0 0
+c
+d 178 1 0 0 0
+c
+d 179 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 315 1 0 0 0
+c
+d 316 1 0 0 0
+c
+d 187 1 0 0 0
+c
+d 259 2 0 1 0
+c
+d 260 1 0 0 0
+c
+d 261 1 0 1 0
+c
+d 565 1 0 0 0
+c
+d 582 1 0 0 0
+c
+d 9 1 0 0 0
+c
+d 10 1 0 0 0
+c
+d 736 1 0 0 0
+c
+d 430 1 0 1 0
+c
+d 431 2 1 0 0
+c
+d 432 1 0 1 0
+c
+d 48 1 0 0 0
+c
+d 49 1 0 0 0
+c
+d 175 1 0 0 0
+c
+d 176 1 0 1 0
+c
+d 488 1 1 0 0
+c
+d 492 1 0 0 0
+c
+d 494 2 0 0 0
+c
+d 495 2 1 0 0
+c
+d 162 1 0 1 0
+c
+d 163 2 1 0 0
+c
+d 164 1 1 0 0
+c
+d 167 1 0 0 0
+c
+d 723 2 0 0 0
+c
+d 152 2 1 0 0
+c
+d 167 1 0 0 0
+c
+d 313 1 0 0 0
+c
+d 481 1 1 0 0
+c
+d 4 1 1 0 0
+c
+d 33 1 0 0 0
+c
+d 34 2 1 0 0
+c
+d 142 1 0 1 0
+c
+d 143 1 0 1 0
+c
+d 90 1 0 0 0
+c
+d 91 1 0 0 0
+c
+d 664 2 0 0 0
+c
+d 3 1 1 0 0
+c
+d 69 1 0 0 0
+c
+d 72 2 0 0 0
+c
+d 73 2 0 0 0
+c
+d 343 1 1 0 0
+c
+d 379 1 0 0 0
+c
+d 762 1 0 0 0
+c
+d 145 1 0 0 0
+c
+d 396 1 0 1 0
+c
+d 145 1 0 1 0
+c
+d 146 1 0 1 0
+c
+d 489 1 0 0 0
+c
+d 490 1 0 0 0
+c
+d 491 2 1 0 0
+c
+d 501 1 0 0 0
+c
+d 502 2 0 0 0
+c
+d 503 1 1 0 0
+c
+d 228 2 1 0 0
+c
+d 229 1 0 1 0
+c
+d 236 2 0 0 0
+c
+d 237 1 0 0 0
+c
+d 296 3 1 0 0
+c
+d 297 1 0 0 0
+c
+d 140 1 1 0 0
+c
+d 141 1 0 0 0
+c
+d 90 1 1 0 0
+c
+d 91 1 0 0 0
+c
+d 268 2 1 0 0
+c
+d 269 1 0 0 0
+c
+d 22 1 1 0 0
+c
+d 464 1 0 0 0
+c
+d 470 1 0 0 0
+c
+d 488 1 0 0 0
+c
+d 489 2 1 0 0
+c
+d 490 1 1 0 0
+c
+d 258 1 0 0 0
+c
+d 259 1 1 0 0
+c
+d 366 1 0 0 0
+c
+d 367 1 0 0 0
+c
+d 153 2 0 0 0
+c
+d 161 1 0 0 0
+c
+d 162 1 0 0 0
+c
+d 200 1 0 0 0
+c
+d 415 1 0 0 0
+c
+d 416 1 0 0 0
+c
+d 95 2 1 0 0
+c
+d 411 2 0 0 0
+c
+d 412 1 0 0 0
+c
+d 170 1 0 0 0
+c
+d 171 1 0 0 0
+c
+d 44 1 0 0 0
+c
+d 288 1 0 0 0
+c
+d 325 1 0 0 0
+c
+d 326 1 0 0 0
+c
+d 416 1 0 0 0
+c
+d 417 1 0 0 0
+c
+d 3 1 1 0 0
+c
+d 4 2 1 0 0
+c
+d 29 1 0 0 0
+c
+d 699 1 0 0 0
+c
+d 44 1 0 0 0
+c
+d 288 1 0 0 0
+c
+d 289 1 0 0 0
+c
+d 492 2 1 0 0
+c
+d 493 1 1 0 0
+c
+d 535 1 0 0 0
+c
+d 182 1 0 0 0
+c
+d 183 1 0 0 0
+c
+d 176 1 0 0 0
+c
+d 177 1 0 0 0
+c
+d 456 1 0 0 0
+c
+d 543 1 0 0 0
+c
+d 544 1 0 0 0
+c
+d 144 1 0 1 0
+c
+d 145 1 0 0 0
+c
+d 148 1 0 0 0
+c
+d 178 1 0 0 0
+c
+d 244 1 0 0 0
+c
+d 467 1 0 0 0
+c
+d 468 1 1 0 0
+c
+d 504 1 0 0 0
+c
+d 505 2 0 0 0
+c
+d 187 3 1 0 0
+c
+d 566 1 1 0 0
+c
+d 567 2 0 0 0
+c
+d 748 1 0 0 0
+c
+d 5 2 0 0 0
+c
+d 6 1 0 0 0
+c
+d 17 1 0 0 0
+c
+d 18 1 0 0 0
+c
+d 654 1 0 0 0
+c
+d 176 1 0 0 0
+c
+d 177 1 0 0 0
+c
+d 144 1 0 1 0
+c
+d 145 1 0 1 0
+c
+d 423 1 0 0 0
+c
+d 442 1 0 0 0
+c
+d 203 1 1 0 0
+c
+d 300 1 0 0 0
+c
+d 301 2 0 0 0
+c
+d 708 1 0 0 0
+c
+d 169 1 0 0 0
+c
+d 170 1 0 0 0
+c
+d 147 1 0 1 0
+c
+d 148 1 0 0 0
+c
+d 131 1 0 0 0
+c
+d 132 1 0 1 0
+c
+d 133 1 0 0 0
+c
+d 286 1 0 0 0
+c
+d 287 1 0 0 0
+c
+d 258 1 0 0 0
+c
+d 266 1 0 0 0
+c
+d 267 2 0 0 0
+c
+d 422 1 1 0 0
+c
+d 423 2 1 0 0
+c
+d 480 1 0 0 0
+c
+d 739 1 0 0 0
+c
+d 130 1 0 0 0
+c
+d 135 1 0 0 0
+c
+d 136 1 0 0 0
+c
+d 414 1 0 0 0
+c
+d 415 1 0 0 0
+c
+d 186 1 0 0 0
+c
+d 187 4 2 0 0
+c
+d 188 2 1 0 0
+c
+d 251 1 0 0 0
+c
+d 252 1 0 0 0
+c
+d 688 1 0 0 0
+c
+d 177 1 0 0 0
+c
+d 413 1 0 0 0
+c
+d 414 1 0 0 0
+c
+d 4 1 0 0 0
+c
+d 34 1 0 0 0
+c
+d 699 1 0 0 0
+c
+d 424 1 0 0 0
+c
+d 476 2 0 0 0
+c
+d 477 1 0 0 0
+c
+d 148 1 0 0 0
+c
+d 178 1 0 0 0
+c
+d 141 1 0 0 0
+c
+d 142 1 0 0 0
+c
+d 505 1 0 1 0
+c
+d 614 2 1 0 0
+c
+d 615 2 1 0 0
+c
+d 616 1 0 0 0
+c
+d 670 1 0 0 0
+c
+d 44 1 0 0 0
+c
+d 109 1 0 0 0
+c
+d 113 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 626 1 0 0 0
+c
+d 627 1 0 0 0
+c
+d 516 2 1 0 0
+c
+d 530 1 0 0 0
+c
+d 533 1 0 0 0
+c
+d 534 1 0 0 0
+c
+d 45 1 0 0 0
+c
+d 46 1 0 0 0
+c
+d 151 1 1 0 0
+c
+d 591 1 0 0 0
+c
+d 600 1 0 0 0
+c
+d 601 2 0 0 0
+c
+d 323 1 0 0 0
+c
+d 324 1 0 0 0
+c
+d 325 1 0 0 0
+c
+d 332 1 0 0 0
+c
+d 660 1 0 0 0
+c
+d 137 1 0 0 0
+c
+d 138 1 0 0 0
+c
+d 211 2 1 0 0
+c
+d 212 1 0 0 0
+c
+d 213 1 0 0 0
+c
+d 223 1 0 0 0
+c
+d 299 2 0 0 0
+c
+d 95 1 0 0 0
+c
+d 412 1 0 0 0
+c
+d 172 2 0 0 0
+c
+d 410 1 0 0 0
+c
+d 431 1 1 0 0
+c
+d 432 1 0 0 0
+c
+d 475 1 0 0 0
+c
+d 419 1 0 0 0
+c
+d 420 2 1 0 0
+c
+d 421 1 1 0 0
+c
+d 176 1 0 0 0
+c
+d 177 1 0 0 0
+c
+d 178 1 1 0 0
+c
+d 177 1 0 0 0
+c
+d 245 1 0 1 0
+c
+d 151 1 0 1 0
+c
+d 302 2 1 0 0
+c
+d 303 1 0 1 0
+c
+d 415 1 0 0 0
+c
+d 416 1 0 0 0
+c
+d 57 2 1 1 0
+c
+d 76 2 0 0 0
+c
+d 77 1 0 0 0
+c
+d 105 2 1 0 0
+c
+d 106 2 0 0 0
+c
+d 415 1 0 0 0
+c
+d 416 1 0 0 0
+c
+d 1 1 0 0 0
+c
+d 2 2 0 0 0
+c
+d 3 1 0 0 0
+c
+d 76 1 0 0 0
+c
+d 77 1 0 0 0
+c
+d 100 2 1 0 0
+c
+d 121 1 0 0 0
+c
+d 373 1 0 1 0
+c
+d 684 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 88 1 0 0 0
+c
+d 141 1 0 0 0
+c
+d 142 1 0 0 0
+c
+d 33 1 0 0 0
+c
+d 34 1 0 0 0
+c
+d 0 1 0 0 0
+c
+d 1 1 0 0 0
+c
+d 12 1 0 0 0
+c
+d 419 2 0 0 0
+c
+d 420 1 0 0 0
+c
+d 442 2 0 0 0
+c
+d 443 1 0 0 0
+c
+d 513 1 0 0 0
+c
+d 514 2 0 0 0
+c
+d 515 1 0 0 0
+c
+d 142 1 0 1 0
+c
+d 143 1 0 0 0
+c
+d 472 1 0 0 0
+c
+d 473 1 0 0 0
+c
+d 675 1 0 0 0
+c
+d 140 1 0 0 0
+c
+d 141 1 0 0 0
+c
+d 177 1 0 0 0
+c
+d 245 1 0 1 0
+c
+d 137 1 0 0 0
+c
+d 138 1 0 0 0
+c
+d 413 1 0 0 0
+c
+d 136 1 0 0 0
+c
+d 137 1 0 0 0
+c
+d 420 1 0 0 0
+c
+d 442 1 0 0 0
+c
+d 103 1 0 0 0
+c
+d 104 1 0 0 0
+c
+d 177 1 0 0 0
+c
+d 178 1 0 0 0
+c
+d 244 1 0 0 0
+c
+d 130 1 0 0 0
+c
+d 341 1 0 0 0
+c
+d 342 1 0 0 0
+c
+d 4 2 0 0 0
+c
+d 5 1 0 0 0
+c
+d 18 1 0 0 0
+c
+d 36 1 0 0 0
+c
+d 37 1 0 0 0
+c
+d 171 1 0 0 0
+c
+d 172 1 0 0 0
+c
+d 130 1 0 0 0
+c
+d 131 1 0 0 0
+c
+d 4 1 0 0 0
+c
+d 34 1 0 0 0
+c
+d 324 1 0 0 0
+c
+d 325 1 0 0 0
+c
+d 660 1 0 0 0
+c
+d 202 2 1 0 0
+c
+d 203 1 0 0 0
+c
+d 577 1 0 0 0
+c
+d 586 1 0 0 0
+c
+d 92 1 0 0 0
+c
+d 129 1 0 0 0
+c
+d 130 1 0 0 0
+c
+d 152 1 0 0 0
+c
+d 180 1 0 1 0
+c
+d 181 1 0 0 0
+c
+d 3 1 0 0 0
+c
+d 70 1 0 0 0
+c
+d 71 1 0 0 0
+c
+d 505 1 0 0 0
+c
+d 539 2 0 0 0
+c
+d 540 1 1 0 0
+c
+d 541 2 0 0 0
+c
+d 555 1 0 0 0
+c
+d 180 1 0 0 0
+c
+d 181 1 0 0 0
+c
+d 138 1 0 0 0
+c
+d 139 1 0 0 0
+c
+d 413 1 0 0 0
+c
+d 141 1 0 0 0
+c
+d 142 1 0 0 0
+c
+d 179 2 1 0 0
+c
+d 180 1 0 0 0
+c
+d 196 1 0 0 0
+c
+d 604 1 0 0 0
+c
+d 605 1 0 0 0
+c
+d 33 1 0 0 0
+c
+d 34 1 0 0 0
+c
+d 344 1 0 0 0
+c
+d 377 1 0 1 0
+c
+d 378 1 0 0 0
+c
+d 138 1 0 0 0
+c
+d 139 1 0 0 0
+c
+d 172 1 0 0 0
+c
+d 173 2 1 0 0
+c
+d 174 1 0 0 0
+c
+d 169 1 0 0 0
+c
+d 380 1 0 0 0
+c
+d 393 2 1 0 0
+c
+d 674 1 0 0 0
+c
+d 259 2 0 0 0
+c
+d 260 1 0 0 0
+c
+d 582 1 0 0 0
+c
+d 329 1 0 0 0
+c
+d 330 1 0 0 0
+c
+d 550 2 0 0 0
+c
+d 551 2 0 0 0
+c
+d 552 1 0 0 0
+c
+d 143 1 0 1 0
+c
+d 144 1 0 0 0
+c
+d 255 2 0 0 0
+c
+d 265 1 0 0 0
+c
+d 403 1 0 0 0
+c
+d 404 1 0 0 0
+c
+d 303 2 0 1 0
+c
+d 311 2 0 0 0
+c
+d 312 1 0 0 0
+c
+d 420 2 0 0 0
+c
+d 421 1 0 0 0
+c
+d 414 1 0 0 0
+c
+d 415 1 0 0 0
+c
+d 95 2 0 0 0
+c
+d 96 1 0 1 0
+c
+d 139 1 0 0 0
+c
+d 140 1 0 0 0
+c
+d 227 1 0 0 0
+c
+d 228 4 1 0 0
+c
+d 295 1 0 0 0
+c
+d 298 2 0 0 0
+c
+d 742 1 0 0 0
+c
+d 4 1 0 0 0
+c
+d 5 2 0 0 0
+c
+d 401 1 0 0 0
+c
+d 402 1 0 1 0
+c
+d 569 1 0 0 0
+c
+d 570 1 0 0 0
+c
+d 318 1 0 0 0
+c
+d 319 1 0 0 0
+c
+d 343 1 0 0 0
+c
+d 348 2 0 0 0
+c
+d 361 2 0 0 0
+c
+d 362 1 0 0 0
+c
+d 57 1 0 0 0
+c
+d 66 1 0 1 0
+c
+d 67 1 1 0 0
+c
+d 111 1 0 0 0
+c
+d 136 1 0 0 0
+c
+d 137 1 0 0 0
+c
+d 345 2 0 0 0
+c
+d 346 1 0 0 0
+c
+d 365 1 0 0 0
+c
+d 760 1 0 0 0
+c
+d 286 1 0 0 0
+c
+d 287 1 0 0 0
+c
+d 227 1 0 0 0
+c
+d 231 1 0 0 0
+c
+d 243 2 0 0 0
+c
+d 386 1 0 0 0
+c
+d 387 1 0 0 0
+c
+d 388 1 0 0 0
+c
+d 393 1 0 0 0
+c
+d 674 1 0 0 0
+c
+d 143 1 0 1 0
+c
+d 144 1 0 1 0
+c
+d 7 2 1 0 0
+c
+d 9 1 0 0 0
+c
+d 11 1 0 0 0
+c
+d 568 1 0 1 0
+c
+d 505 1 0 1 0
+c
+d 506 1 0 0 0
+c
+d 671 1 0 0 0
+c
+d 0 2 1 0 0
+c
+d 385 1 0 1 0
+c
+d 682 1 0 0 0
+c
+d 142 1 0 1 0
+c
+d 143 1 0 1 0
+c
+d 14 1 0 1 0
+c
+d 542 1 0 0 0
+c
+d 543 1 0 0 0
+c
+d 44 1 0 0 0
+c
+d 45 1 0 0 0
+c
+d 151 1 0 0 0
+c
+d 152 1 0 0 0
+c
+d 304 2 1 0 0
+c
+d 305 1 0 0 0
+c
+d 602 1 0 0 0
+c
+d 107 1 0 0 0
+c
+d 108 2 0 0 0
+c
+d 110 1 0 0 0
+c
+d 186 1 0 0 0
+c
+d 302 1 0 0 0
+c
+d 303 2 0 0 0
+c
+d 235 1 1 0 0
+c
+d 517 1 0 1 0
+c
+d 518 1 0 0 0
+c
+d 477 1 0 0 0
+c
+d 478 1 0 0 0
+c
+d 0 2 1 0 0
+c
+d 1 1 0 1 0
+c
+d 168 1 0 0 0
+c
+d 92 1 0 0 0
+c
+d 126 1 0 0 0
+c
+d 127 1 0 0 0
+c
+d 413 1 0 0 0
+c
+d 414 1 0 0 0
+c
+d 2 2 0 0 0
+c
+d 3 1 0 0 0
+c
+d 649 1 0 0 0
+c
+d 345 2 1 0 0
+c
+d 346 1 0 0 0
+c
+d 365 1 0 0 0
+c
+d 366 1 0 0 0
+c
+d 148 1 0 0 0
+c
+d 178 1 0 0 0
+c
+d 152 1 0 0 0
+c
+d 153 1 0 0 0
+c
+d 348 1 0 0 0
+c
+d 365 1 0 0 0
+c
+d 370 1 0 0 0
+c
+d 371 2 0 0 0
+c
+d 207 1 0 1 0
+c
+d 219 2 1 0 0
+c
+d 220 3 1 0 0
+c
+d 222 1 0 0 0
+c
+d 255 1 1 0 0
+c
+d 746 2 0 0 0
+c
+d 156 1 1 0 0
+c
+d 157 1 0 1 0
+c
+d 158 2 0 0 0
+c
+d 193 3 1 0 0
+c
+d 194 2 0 0 0
+c
+d 489 1 1 0 0
+c
+d 490 3 1 0 0
+c
+d 499 2 0 0 0
+c
+d 176 1 0 0 0
+c
+d 177 1 0 0 0
+c
+d 342 2 0 0 0
+c
+d 343 1 0 0 0
+c
+d 352 1 0 0 0
+c
+d 353 1 0 0 0
+c
+d 539 1 0 1 0
+c
+d 629 2 1 0 0
+c
+d 632 1 0 0 0
+c
+d 635 2 1 0 0
+c
+d 33 2 0 0 0
+c
+d 34 1 0 0 0
+c
+d 70 1 0 0 0
+c
+d 137 1 0 0 0
+c
+d 138 1 0 0 0
+c
+d 87 1 1 0 0
+c
+d 89 2 0 0 0
+c
+d 90 1 0 0 0
+c
+d 628 1 0 0 0
+c
+d 418 1 0 0 0
+c
+d 419 1 0 0 0
+c
+d 622 1 0 1 0
+c
+d 623 1 0 0 0
+c
+d 624 2 0 0 0
+c
+d 365 1 0 0 0
+c
+d 366 1 0 0 0
+c
+d 92 1 0 0 0
+c
+d 93 1 0 0 0
+c
+d 323 1 0 0 0
+c
+d 324 1 0 0 0
+c
+d 421 1 0 0 0
+c
+d 422 2 0 0 0
+c
+d 423 1 0 0 0
+c
+d 677 1 0 0 0
+c
+d 420 1 0 0 0
+c
+d 421 2 0 0 0
+c
+d 453 1 0 0 0
+c
+d 454 1 0 0 0
+c
+d 488 2 0 0 0
+c
+d 489 2 1 0 0
+c
+d 489 2 1 0 0
+c
+d 490 3 1 0 0
+c
+d 498 1 0 1 0
+c
+d 502 1 0 0 0
+c
+d 397 2 1 0 0
+c
+d 398 1 0 0 0
+c
+d 533 1 0 0 0
+c
+d 534 1 0 0 0
+c
+d 413 1 0 1 0
+c
+d 414 1 0 0 0
+c
+d 322 1 0 0 0
+c
+d 323 1 0 0 0
+c
+d 14 1 1 0 0
+c
+d 27 1 0 0 0
+c
+d 48 1 0 0 0
+c
+d 49 1 0 0 0
+c
+d 22 1 0 0 0
+c
+d 466 2 0 0 0
+c
+d 467 1 0 0 0
+c
+d 468 1 0 0 0
+c
+d 636 1 0 0 0
+c
+d 730 1 0 0 0
+c
+d 150 1 0 0 0
+c
+d 197 1 1 0 0
+c
+d 198 1 0 0 0
+c
+d 656 1 0 0 0
+c
+d 464 1 0 0 0
+c
+d 465 1 0 0 0
+c
+d 101 2 1 0 0
+c
+d 103 1 0 0 0
+c
+d 121 1 0 1 0
+c
+d 380 1 0 1 0
+c
+d 381 1 1 0 0
+c
+d 392 1 0 0 0
+c
+d 203 1 1 0 0
+c
+d 204 1 0 0 0
+c
+d 205 3 0 0 0
+c
+d 206 2 0 0 0
+c
+d 207 1 0 1 0
+c
+d 218 1 0 0 0
+c
+d 24 1 0 1 0
+c
+d 75 1 0 0 0
+c
+d 76 1 0 0 0
+c
+d 79 1 0 0 0
+c
+d 80 1 0 0 0
+c
+d 39 1 1 0 0
+c
+d 54 1 0 1 0
+c
+d 732 1 0 0 0
+c
+d 128 1 0 0 0
+c
+d 129 1 0 0 0
+c
+d 207 1 0 0 0
+c
+d 209 1 0 0 0
+c
+d 211 2 1 0 0
+c
+d 212 1 0 0 0
+c
+d 219 2 0 0 0
+c
+d 220 1 0 0 0
+c
+d 417 1 0 0 0
+c
+d 474 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 460 1 0 0 0
+c
+d 461 2 0 0 0
+c
+d 258 1 0 0 0
+c
+d 259 1 0 0 0
+c
+d 260 2 0 0 0
+c
+d 138 1 0 0 0
+c
+d 139 1 0 0 0
+c
+d 418 1 0 0 0
+c
+d 419 1 0 0 0
+c
+d 207 2 1 0 0
+c
+d 208 4 0 0 0
+c
+d 209 2 0 0 0
+c
+d 398 1 0 0 0
+c
+d 668 1 0 0 0
+c
+d 743 2 0 0 0
+c
+d 27 1 0 0 0
+c
+d 49 1 0 0 0
+c
+d 50 1 0 0 0
+c
+d 52 1 0 0 0
+c
+d 304 2 1 0 0
+c
+d 310 1 0 1 0
+c
+d 592 1 0 0 0
+c
+d 602 1 0 0 0
+c
+d 235 2 1 0 0
+c
+d 236 3 1 0 0
+c
+d 237 1 0 0 0
+c
+d 241 1 0 0 0
+c
+d 405 2 1 0 0
+c
+d 504 1 0 0 0
+c
+d 519 1 0 0 0
+c
+d 91 1 0 1 0
+c
+d 109 1 0 1 0
+c
+d 283 1 0 0 0
+c
+d 284 2 1 0 0
+c
+d 285 1 0 0 0
+c
+d 153 1 0 1 0
+c
+d 154 1 0 1 0
+c
+d 155 2 0 0 0
+c
+d 166 2 1 0 0
+c
+d 184 1 0 0 0
+c
+d 185 2 1 0 0
+c
+d 255 1 0 0 0
+c
+d 397 1 0 0 0
+c
+d 327 1 0 0 0
+c
+d 328 1 0 0 0
+c
+d 147 1 0 0 0
+c
+d 148 1 0 0 0
+c
+d 244 1 0 0 0
+c
+d 245 1 0 1 0
+c
+d 702 1 0 0 0
+c
+d 46 1 0 0 0
+c
+d 47 1 0 0 0
+c
+d 45 1 0 0 0
+c
+d 46 1 0 0 0
+c
+d 7 1 0 0 0
+c
+d 8 2 0 0 0
+c
+d 9 1 0 0 0
+c
+d 736 1 0 0 0
+c
+d 7 2 1 0 0
+c
+d 8 1 0 0 0
+c
+d 638 2 1 0 0
+c
+d 343 1 0 0 0
+c
+d 344 1 0 0 0
+c
+d 377 1 0 0 0
+c
+d 57 1 0 0 0
+c
+d 58 2 0 0 0
+c
+d 59 2 1 0 0
+c
+d 60 2 0 0 0
+c
+d 150 1 0 1 0
+c
+d 151 2 1 0 0
+c
+d 186 1 0 0 0
+c
+d 15 1 0 0 0
+c
+d 609 1 1 0 0
+c
+d 610 2 0 0 0
+c
+d 611 1 0 0 0
+c
+d 418 1 0 0 0
+c
+d 419 1 0 0 0
+c
+d 22 2 1 0 0
+c
+d 24 1 0 0 0
+c
+d 25 1 0 0 0
+c
+d 75 1 0 0 0
+c
+d 465 1 0 0 0
+c
+d 636 1 1 0 0
+c
+d 417 1 0 0 0
+c
+d 418 1 0 0 0
+c
+d 464 1 0 0 0
+c
+d 177 1 0 1 0
+c
+d 245 1 0 1 0
+c
+d 413 1 0 0 0
+c
+d 245 1 0 0 0
+c
+d 246 1 0 0 0
+c
+d 247 1 0 0 0
+c
+d 185 1 0 1 0
+c
+d 186 1 0 0 0
+c
+d 505 1 0 0 0
+c
+d 508 1 0 1 0
+c
+d 509 1 0 0 0
+c
+d 526 2 1 0 0
+c
+d 527 1 0 0 0
+c
+d 672 1 0 0 0
+c
+d 157 1 0 1 0
+c
+d 158 1 0 0 0
+c
+d 194 1 0 0 0
+c
+d 195 2 0 0 0
+c
+d 752 2 0 0 0
+c
+d 136 1 0 1 0
+c
+d 137 1 0 0 0
+c
+d 1 1 0 0 0
+c
+d 2 1 0 0 0
+c
+d 45 1 0 0 0
+c
+d 50 1 0 0 0
+c
+d 77 1 0 0 0
+c
+d 78 2 0 0 0
+c
+d 79 1 0 0 0
+c
+d 181 1 0 0 0
+c
+d 198 1 0 0 0
+c
+d 656 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 263 1 0 0 0
+c
+d 99 2 0 0 0
+c
+d 100 1 1 0 0
+c
+d 372 1 0 0 0
+c
+d 426 1 0 0 0
+c
+d 427 2 0 0 0
+c
+d 428 1 0 0 0
+c
+d 38 2 0 0 0
+c
+d 55 1 0 0 0
+c
+d 63 1 0 0 0
+c
+d 64 1 0 0 0
+c
+d 342 1 0 0 0
+c
+d 352 1 0 0 0
+c
+d 353 2 0 0 0
+c
+d 354 1 0 0 0
+c
+d 348 1 0 0 0
+c
+d 364 1 0 0 0
+c
+d 365 2 0 0 0
+c
+d 371 1 0 0 0
+c
+d 98 2 0 0 0
+c
+d 99 2 0 0 0
+c
+d 321 1 0 0 0
+c
+d 322 1 0 0 0
+c
+d 549 1 0 0 0
+c
+d 92 1 0 0 0
+c
+d 93 1 0 0 0
+c
+d 89 1 0 1 0
+c
+d 622 3 1 0 0
+c
+d 623 1 0 1 0
+c
+d 642 1 0 0 0
+c
+d 643 2 0 0 0
+c
+d 644 3 0 0 0
+c
+d 646 1 1 0 0
+c
+d 14 1 0 0 0
+c
+d 546 1 0 0 0
+c
+d 698 1 0 0 0
+c
+d 172 1 0 0 0
+c
+d 382 1 0 0 0
+c
+d 383 2 1 0 0
+c
+d 679 1 0 0 0
+c
+d 3 2 0 0 0
+c
+d 4 1 0 0 0
+c
+d 73 1 1 0 0
+c
+d 74 1 0 1 0
+c
+d 506 1 0 0 0
+c
+d 507 2 0 0 0
+c
+d 508 1 0 0 0
+c
+d 509 2 1 0 0
+c
+d 510 1 1 0 0
+c
+d 93 1 0 0 0
+c
+d 94 1 0 0 0
+c
+d 152 1 0 0 0
+c
+d 169 1 0 0 0
+c
+d 170 2 0 0 0
+c
+d 717 2 0 0 0
+c
+d 430 1 0 0 0
+c
+d 445 1 0 0 0
+c
+d 446 2 1 0 0
+c
+d 202 1 0 0 0
+c
+d 488 1 0 1 0
+c
+d 536 1 0 0 0
+c
+d 537 1 0 0 0
+c
+d 47 1 0 0 0
+c
+d 48 1 0 0 0
+c
+d 519 1 0 0 0
+c
+d 520 2 0 0 0
+c
+d 521 1 0 0 0
+c
+d 529 1 0 0 0
+c
+d 706 2 0 0 0
+c
+d 343 1 0 0 0
+c
+d 378 2 1 0 0
+c
+d 759 2 0 0 0
+c
+d 108 1 0 0 0
+c
+d 110 1 0 0 0
+c
+d 273 2 0 0 0
+c
+d 274 2 0 0 0
+c
+d 172 2 1 0 0
+c
+d 173 1 0 0 0
+c
+d 174 1 0 0 0
+c
+d 380 1 0 0 0
+c
+d 381 1 0 0 0
+c
+d 419 1 1 0 0
+c
+d 464 1 0 0 0
+c
+d 470 1 0 0 0
+c
+d 44 1 0 0 0
+c
+d 288 1 0 0 0
+c
+d 153 2 1 0 0
+c
+d 154 2 1 0 0
+c
+d 157 1 0 0 0
+c
+d 461 1 0 0 0
+c
+d 537 1 0 1 0
+c
+d 538 2 1 0 0
+c
+d 127 1 0 0 0
+c
+d 128 1 0 0 0
+c
+d 504 1 0 0 0
+c
+d 510 1 0 0 0
+c
+d 511 2 0 0 0
+c
+d 520 1 0 0 0
+c
+d 234 1 1 0 0
+c
+d 235 2 1 0 0
+c
+d 551 1 0 0 0
+c
+d 552 2 0 0 0
+c
+d 554 1 0 0 0
+c
+d 153 1 0 0 0
+c
+d 156 2 0 0 0
+c
+d 161 1 0 0 0
+c
+d 76 1 0 0 0
+c
+d 85 2 0 0 0
+c
+d 86 1 0 0 0
+c
+d 125 1 0 0 0
+c
+d 126 1 0 0 0
+c
+d 139 1 0 0 0
+c
+d 140 2 1 0 0
+c
+d 141 1 0 1 0
+c
+d 416 1 0 0 0
+c
+d 417 1 0 0 0
+c
+d 523 2 1 0 0
+c
+d 524 1 0 0 0
+c
+d 528 1 0 0 0
+c
+d 560 1 0 0 0
+c
+d 77 1 0 0 0
+c
+d 78 2 0 0 0
+c
+d 79 1 0 0 0
+c
+d 126 2 0 0 0
+c
+d 407 1 0 0 0
+c
+d 412 1 0 0 0
+c
+d 468 1 0 0 0
+c
+d 469 1 0 0 0
+c
+d 286 1 0 0 0
+c
+d 287 1 0 0 0
+c
+d 89 1 0 1 0
+c
+d 115 1 0 0 0
+c
+d 116 1 0 0 0
+c
+d 117 2 0 0 0
+c
+d 179 1 1 0 0
+c
+d 262 1 0 0 0
+c
+d 544 1 0 0 0
+c
+d 545 1 0 0 0
+c
+d 0 2 1 0 0
+c
+d 1 1 0 0 0
+c
+d 148 1 0 0 0
+c
+d 186 1 0 1 0
+c
+d 187 1 0 0 0
+c
+d 259 1 1 0 0
+c
+d 565 2 0 0 0
+c
+d 5 1 0 1 0
+c
+d 569 1 0 0 0
+c
+d 570 2 1 0 0
+c
+d 571 1 0 0 0
+c
+d 366 1 0 0 0
+c
+d 367 1 0 0 0
+c
+d 139 1 0 1 0
+c
+d 140 2 1 0 0
+c
+d 141 1 0 1 0
+c
+d 137 1 0 1 0
+c
+d 138 1 0 1 0
+c
+d 187 2 1 0 0
+c
+d 189 2 1 0 0
+c
+d 190 2 0 0 0
+c
+d 191 1 0 0 0
+c
+d 566 2 1 0 0
+c
+d 572 1 0 0 0
+c
+d 747 3 0 0 0
+c
+d 748 1 0 0 0
+c
+d 326 1 0 0 0
+c
+d 327 1 0 0 0
+c
+d 421 1 0 0 0
+c
+d 422 1 0 0 0
+c
+d 423 1 0 0 0
+c
+d 478 1 1 0 0
+c
+d 483 2 1 0 0
+c
+d 484 2 0 0 0
+c
+d 87 1 0 0 0
+c
+d 107 1 0 0 0
+c
+d 725 2 0 0 0
+c
+d 172 1 0 0 0
+c
+d 385 1 0 0 0
+c
+d 433 2 0 0 0
+c
+d 434 1 0 0 0
+c
+d 475 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 118 2 1 0 0
+c
+d 119 1 0 0 0
+c
+d 125 1 1 0 0
+c
+d 140 1 0 0 0
+c
+d 141 1 0 1 0
+c
+d 330 1 0 0 0
+c
+d 659 1 0 0 0
+c
+d 186 1 0 0 0
+c
+d 303 2 1 0 0
+c
+d 304 1 0 0 0
+c
+d 647 1 0 0 0
+c
+d 648 2 0 0 0
+c
+d 724 1 0 0 0
+c
+d 23 1 0 0 0
+c
+d 639 2 0 0 0
+c
+d 712 2 0 0 0
+c
+d 345 3 1 0 0
+c
+d 346 1 1 0 0
+c
+d 364 1 0 0 0
+c
+d 485 1 0 0 0
+c
+d 760 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 90 2 1 0 0
+c
+d 91 1 0 0 0
+c
+d 115 1 0 0 0
+c
+d 381 1 0 0 0
+c
+d 385 1 0 1 0
+c
+d 387 1 0 0 0
+c
+d 136 1 0 0 0
+c
+d 341 1 0 0 0
+c
+d 376 1 0 0 0
+c
+d 202 1 0 0 0
+c
+d 253 1 0 1 0
+c
+d 254 2 1 0 0
+c
+d 157 1 0 0 0
+c
+d 461 3 0 0 0
+c
+d 462 1 0 0 0
+c
+d 591 2 1 0 0
+c
+d 592 1 0 0 0
+c
+d 597 1 0 0 0
+c
+d 598 1 0 0 0
+c
+d 444 1 0 0 0
+c
+d 445 2 0 0 0
+c
+d 446 1 1 0 0
+c
+d 101 1 0 0 0
+c
+d 122 1 0 0 0
+c
+d 123 2 0 0 0
+c
+d 3 1 0 0 0
+c
+d 4 1 0 0 0
+c
+d 99 1 0 0 0
+c
+d 100 3 1 0 0
+c
+d 374 1 0 0 0
+c
+d 389 2 1 0 0
+c
+d 0 1 1 0 0
+c
+d 148 1 0 0 0
+c
+d 168 2 1 0 0
+c
+d 169 1 0 0 0
+c
+d 24 3 1 0 0
+c
+d 642 1 0 0 0
+c
+d 643 1 0 0 0
+c
+d 733 1 0 0 0
+c
+d 419 2 0 0 0
+c
+d 420 1 0 0 0
+c
+d 681 1 0 0 0
+c
+d 1 1 0 0 0
+c
+d 83 1 0 0 0
+c
+d 316 1 0 0 0
+c
+d 317 2 0 0 0
+c
+d 318 1 0 0 0
+c
+d 96 1 0 0 0
+c
+d 97 2 1 0 0
+c
+d 384 1 0 0 0
+c
+d 33 2 1 0 0
+c
+d 34 1 0 0 0
+c
+d 70 1 1 0 0
+c
+d 413 1 0 0 0
+c
+d 414 1 0 0 0
+c
+d 505 1 0 0 0
+c
+d 509 1 0 0 0
+c
+d 510 2 0 0 0
+c
+d 511 1 0 0 0
+c
+d 351 1 0 0 0
+c
+d 352 2 0 0 0
+c
+d 353 1 0 0 0
+c
+d 504 1 0 1 0
+c
+d 524 2 0 0 0
+c
+d 540 1 0 0 0
+c
+d 556 1 0 0 0
+c
+d 557 4 1 0 0
+c
+d 558 3 0 0 0
+c
+d 559 1 0 0 0
+c
+d 615 1 0 1 0
+c
+d 616 2 1 0 0
+c
+d 670 2 0 0 0
+c
+d 130 1 0 0 0
+c
+d 342 1 0 1 0
+c
+d 351 1 0 0 0
+c
+d 352 2 1 0 0
+c
+d 353 1 1 0 0
+c
+d 358 1 0 0 0
+c
+d 344 1 0 0 0
+c
+d 363 2 0 0 0
+c
+d 364 1 0 0 0
+c
+d 416 1 0 0 0
+c
+d 417 1 0 0 0
+c
+d 474 1 0 0 0
+c
+d 14 1 0 0 0
+c
+d 15 1 1 0 0
+c
+d 46 1 0 0 0
+c
+d 47 1 0 0 0
+c
+d 48 1 0 0 0
+c
+d 652 1 0 0 0
+c
+d 99 1 1 0 0
+c
+d 373 2 0 0 0
+c
+d 374 1 0 0 0
+c
+d 57 4 0 0 0
+c
+d 58 1 0 1 0
+c
+d 77 1 0 0 0
+c
+d 177 1 0 1 0
+c
+d 178 2 1 0 0
+c
+d 179 1 0 0 0
+c
+d 87 2 0 0 0
+c
+d 88 1 0 0 0
+c
+d 107 1 0 0 0
+c
+d 207 1 0 0 0
+c
+d 208 2 0 0 0
+c
+d 209 1 0 0 0
+c
+d 207 1 0 0 0
+c
+d 234 1 0 0 0
+c
+d 550 1 0 0 0
+c
+d 552 3 1 0 0
+c
+d 553 2 1 0 0
+c
+d 554 2 0 0 0
+c
+d 135 1 1 0 0
+c
+d 136 1 0 0 0
+c
+d 144 1 0 1 0
+c
+d 145 1 0 0 0
+c
+d 0 1 0 0 0
+c
+d 148 2 0 0 0
+c
+d 149 1 0 0 0
+c
+d 591 1 0 1 0
+c
+d 599 2 0 0 0
+c
+d 600 1 0 0 0
+c
+d 601 1 0 0 0
+c
+d 92 1 0 0 0
+c
+d 316 1 0 0 0
+c
+d 317 2 1 0 0
+c
+d 318 1 0 0 0
+c
+d 202 1 0 0 0
+c
+d 203 2 1 0 0
+c
+d 204 1 0 0 0
+c
+d 581 2 1 0 0
+c
+d 582 2 0 0 0
+c
+d 694 1 0 0 0
+c
+d 415 2 0 0 0
+c
+d 416 1 0 0 0
+c
+d 154 2 0 0 0
+c
+d 277 2 1 0 0
+c
+d 278 1 0 0 0
+c
+d 279 3 0 0 0
+c
+d 463 1 0 0 0
+c
+d 326 1 0 0 0
+c
+d 327 2 1 0 0
+c
+d 328 1 0 0 0
+c
+d 329 1 0 0 0
+c
+d 330 1 0 0 0
+c
+d 22 1 0 0 0
+c
+d 472 1 0 0 0
+c
+d 548 1 0 0 0
+c
+d 96 1 0 0 0
+c
+d 97 1 0 1 0
+c
+d 158 1 1 0 0
+c
+d 159 1 0 0 0
+c
+d 504 1 0 0 0
+c
+d 615 1 0 0 0
+c
+d 616 2 0 0 0
+c
+d 227 1 0 0 0
+c
+d 228 1 1 0 0
+c
+d 234 1 0 0 0
+c
+d 235 2 0 0 0
+c
+d 236 1 0 0 0
+c
+d 518 2 0 0 0
+c
+d 667 2 0 0 0
+c
+d 202 1 0 0 0
+c
+d 252 2 0 0 0
+c
+d 254 1 0 0 0
+c
+d 505 2 0 1 0
+c
+d 506 2 0 0 0
+c
+d 507 1 0 0 0
+c
+d 509 1 0 0 0
+c
+d 619 2 0 0 0
+c
+d 620 1 0 0 0
+c
+d 671 1 0 0 0
+c
+d 357 1 0 0 0
+c
+d 358 1 0 0 0
+c
+d 359 2 0 0 0
+c
+d 351 1 0 0 0
+c
+d 352 2 0 0 0
+c
+d 353 1 0 0 0
+c
+d 524 1 0 0 0
+c
+d 535 1 1 0 0
+c
+d 536 1 1 0 0
+c
+d 559 2 0 0 0
+c
+d 711 3 0 0 0
+c
+d 406 1 0 0 0
+c
+d 407 2 1 0 0
+c
+d 408 1 1 0 0
+c
+d 409 1 0 0 0
+c
+d 411 1 0 0 0
+c
+d 171 1 1 0 0
+c
+d 380 1 0 0 0
+c
+d 181 1 1 0 0
+c
+d 196 1 0 0 0
+c
+d 197 2 0 0 0
+c
+d 198 1 0 0 0
+c
+d 578 1 0 1 0
+c
+d 579 1 0 0 0
+c
+d 584 2 1 0 0
+c
+d 585 1 0 0 0
+c
+d 689 1 0 0 0
+c
+d 151 1 0 0 0
+c
+d 599 1 0 0 0
+c
+d 601 2 0 0 0
+c
+d 696 2 0 0 0
+c
+d 109 2 1 0 0
+c
+d 110 1 0 1 0
+c
+d 281 1 0 0 0
+c
+d 282 1 0 0 0
+c
+d 504 1 1 0 0
+c
+d 519 2 0 0 0
+c
+d 529 2 0 0 0
+c
+d 706 1 0 0 0
+c
+d 148 1 0 0 0
+c
+d 169 2 0 0 0
+c
+d 393 1 0 0 0
+c
+d 319 1 0 1 0
+c
+d 320 2 1 0 0
+c
+d 321 1 0 0 0
+c
+d 348 2 0 0 0
+c
+d 362 1 0 0 0
+c
+d 369 1 0 0 0
+c
+d 370 1 0 0 0
+c
+d 304 2 1 0 0
+c
+d 305 1 1 0 0
+c
+d 308 2 1 0 0
+c
+d 309 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 592 1 0 0 0
+c
+d 343 1 0 0 0
+c
+d 344 2 0 0 0
+c
+d 363 1 0 0 0
+c
+d 488 1 0 1 0
+c
+d 492 2 1 0 0
+c
+d 493 2 1 0 0
+c
+d 535 2 1 0 0
+c
+d 536 1 0 1 0
+c
+d 235 1 0 0 0
+c
+d 236 2 0 0 0
+c
+d 237 2 1 0 0
+c
+d 238 2 0 0 0
+c
+d 239 1 0 0 0
+c
+d 666 1 0 0 0
+c
+d 142 1 0 0 0
+c
+d 143 1 0 0 0
+c
+d 170 1 0 0 0
+c
+d 171 1 0 0 0
+c
+d 423 2 0 0 0
+c
+d 424 3 0 0 0
+c
+d 476 1 0 0 0
+c
+d 91 1 0 0 0
+c
+d 94 2 0 0 0
+c
+d 270 1 0 0 0
+c
+d 271 1 0 0 0
+c
+d 292 1 0 0 0
+c
+d 703 1 0 0 0
+c
+d 145 1 0 0 0
+c
+d 146 1 0 0 0
+c
+d 249 1 0 0 0
+c
+d 183 1 0 1 0
+c
+d 184 1 0 1 0
+c
+d 169 1 0 0 0
+c
+d 170 1 0 0 0
+c
+d 181 1 0 0 0
+c
+d 182 1 0 0 0
+c
+d 207 1 0 0 0
+c
+d 208 1 0 0 0
+c
+d 225 2 0 0 0
+c
+d 226 2 0 1 0
+c
+d 286 2 1 0 0
+c
+d 328 1 0 0 0
+c
+d 152 1 0 0 0
+c
+d 181 1 0 0 0
+c
+d 182 1 0 0 0
+c
+d 634 1 0 0 0
+c
+d 424 1 1 0 0
+c
+d 425 2 1 0 0
+c
+d 426 1 0 0 0
+c
+d 143 1 0 0 0
+c
+d 144 1 0 0 0
+c
+d 413 1 0 0 0
+c
+d 139 1 0 0 0
+c
+d 140 1 1 0 0
+c
+d 145 1 0 0 0
+c
+d 395 1 0 0 0
+c
+d 396 1 0 0 0
+c
+d 5 1 0 0 0
+c
+d 6 2 1 0 0
+c
+d 594 2 0 0 0
+c
+d 595 1 0 0 0
+c
+d 152 1 0 0 0
+c
+d 153 1 0 1 0
+c
+d 154 2 1 0 0
+c
+d 167 1 0 0 0
+c
+d 144 1 0 1 0
+c
+d 145 1 0 1 0
+c
+d 303 1 0 1 0
+c
+d 305 1 0 1 0
+c
+d 306 2 1 0 0
+c
+d 307 2 0 0 0
+c
+d 137 1 0 1 0
+c
+d 138 1 0 0 0
+c
+d 6 1 0 1 0
+c
+d 7 2 1 0 0
+c
+d 8 1 0 0 0
+c
+d 10 1 0 0 0
+c
+d 130 2 1 0 0
+c
+d 131 1 0 0 0
+c
+d 133 1 0 0 0
+c
+d 134 1 0 0 0
+c
+d 358 1 0 0 0
+c
+d 686 1 0 0 0
+c
+d 22 1 0 0 0
+c
+d 471 1 0 0 0
+c
+d 472 1 0 0 0
+c
+d 473 1 1 0 0
+c
+d 189 2 1 0 0
+c
+d 190 2 1 0 0
+c
+d 566 2 0 0 0
+c
+d 572 1 0 0 0
+c
+d 574 1 0 0 0
+c
+d 575 1 0 0 0
+c
+d 576 2 0 0 0
+c
+d 577 1 0 0 0
+c
+d 586 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 102 2 1 0 0
+c
+d 103 1 0 1 0
+c
+d 104 1 1 0 0
+c
+d 139 1 0 0 0
+c
+d 140 2 1 0 0
+c
+d 141 1 0 1 0
+c
+d 172 1 0 0 0
+c
+d 173 2 0 0 0
+c
+d 433 2 1 0 0
+c
+d 434 1 0 0 0
+c
+d 435 1 0 0 0
+c
+d 423 1 0 1 0
+c
+d 424 3 0 0 0
+c
+d 476 2 1 0 0
+c
+d 734 1 0 0 0
+c
+d 336 1 0 0 0
+c
+d 337 2 1 0 0
+c
+d 338 1 0 0 0
+c
+d 133 1 0 0 0
+c
+d 134 1 0 0 0
+c
+d 91 1 1 0 0
+c
+d 92 1 0 0 0
+c
+d 93 1 0 0 0
+c
+d 291 2 0 0 0
+c
+d 292 1 0 0 0
+c
+d 22 1 0 0 0
+c
+d 23 2 0 0 0
+c
+d 24 1 0 0 0
+c
+d 640 1 0 0 0
+c
+d 150 1 0 0 0
+c
+d 151 2 0 0 0
+c
+d 186 1 1 0 0
+c
+d 302 1 0 0 0
+c
+d 420 1 0 1 0
+c
+d 430 1 1 0 0
+c
+d 442 2 1 0 0
+c
+d 304 1 1 0 0
+c
+d 305 1 0 0 0
+c
+d 306 1 0 0 0
+c
+d 27 1 0 0 0
+c
+d 28 2 0 0 0
+c
+d 30 1 0 0 0
+c
+d 31 1 0 0 0
+c
+d 92 1 0 1 0
+c
+d 130 1 1 0 0
+c
+d 315 2 1 0 0
+c
+d 316 1 0 0 0
+c
+d 38 1 1 0 0
+c
+d 63 1 0 0 0
+c
+d 64 2 0 0 0
+c
+d 65 2 1 0 0
+c
+d 342 1 0 0 0
+c
+d 343 2 0 0 0
+c
+d 344 1 0 0 0
+c
+d 255 1 0 0 0
+c
+d 398 2 0 0 0
+c
+d 399 1 0 0 0
+c
+d 668 1 0 0 0
+c
+d 227 2 1 0 0
+c
+d 228 3 0 0 0
+c
+d 229 1 0 0 0
+c
+d 234 1 0 1 0
+c
+d 236 2 1 0 0
+c
+d 295 1 0 0 0
+c
+d 296 2 0 0 0
+c
+d 297 1 0 0 0
+c
+d 298 1 0 0 0
+c
+d 704 1 0 0 0
+c
+d 22 1 0 0 0
+c
+d 42 1 0 1 0
+c
+d 255 2 0 0 0
+c
+d 258 1 0 0 0
+c
+d 265 1 0 0 0
+c
+d 398 1 0 0 0
+c
+d 404 2 0 0 0
+c
+d 669 1 0 0 0
+c
+d 99 2 0 0 0
+c
+d 100 1 0 1 0
+c
+d 121 1 0 0 0
+c
+d 389 1 0 0 0
+c
+d 496 2 1 0 0
+c
+d 153 1 0 0 0
+c
+d 538 2 0 0 0
+c
+d 539 1 0 0 0
+c
+d 44 2 1 0 0
+c
+d 45 1 1 0 0
+c
+d 67 1 0 0 0
+c
+d 113 1 0 0 0
+c
+d 114 1 0 0 0
+c
+d 612 1 0 0 0
+c
+d 613 1 0 0 0
+c
+d 152 1 1 0 0
+c
+d 164 1 0 0 0
+c
+d 303 1 0 0 0
+c
+d 306 1 0 0 0
+c
+d 695 2 0 0 0
+c
+d 108 2 1 0 0
+c
+d 109 3 0 0 0
+c
+d 110 1 0 0 0
+c
+d 280 1 0 0 0
+c
+d 136 1 0 0 0
+c
+d 342 1 1 0 0
+c
+d 357 2 0 0 0
+c
+d 358 1 0 0 0
+c
+d 130 2 1 0 0
+c
+d 131 1 0 0 0
+c
+d 400 1 0 0 0
+c
+d 728 1 0 0 0
+c
+d 99 1 1 0 0
+c
+d 372 2 0 0 0
+c
+d 373 1 0 0 0
+c
+d 489 1 0 0 0
+c
+d 490 2 1 0 0
+c
+d 491 2 1 0 0
+c
+d 492 1 0 0 0
+c
+d 503 1 0 0 0
+c
+d 138 1 0 1 0
+c
+d 139 1 0 0 0
+c
+d 159 1 0 0 0
+c
+d 160 2 0 0 0
+c
+d 161 1 0 0 0
+c
+d 162 1 0 0 0
+c
+d 751 1 0 0 0
+c
+d 757 3 0 0 0
+c
+d 92 1 0 0 0
+c
+d 93 1 0 0 0
+c
+d 406 2 1 0 0
+c
+d 407 1 0 0 0
+c
+d 440 1 0 0 0
+c
+d 235 1 0 0 0
+c
+d 518 2 1 0 0
+c
+d 519 1 1 0 0
+c
+d 520 2 1 0 0
+c
+d 530 1 0 0 0
+c
+d 531 2 0 0 0
+c
+d 667 1 0 0 0
+c
+d 133 1 1 0 0
+c
+d 134 1 0 0 0
+c
+d 137 1 0 0 0
+c
+d 138 1 0 0 0
+c
+d 325 1 1 0 0
+c
+d 331 2 1 0 0
+c
+d 332 1 0 0 0
+c
+d 151 2 1 0 0
+c
+d 152 2 0 0 0
+c
+d 165 1 0 0 0
+c
+d 481 2 0 0 0
+c
+d 591 1 0 0 0
+c
+d 413 1 0 1 0
+c
+d 414 2 1 0 0
+c
+d 415 1 0 1 0
+c
+d 341 2 0 0 0
+c
+d 342 1 0 0 0
+c
+d 376 1 0 0 0
+c
+d 579 1 0 0 0
+c
+d 580 2 0 0 0
+c
+d 581 1 0 0 0
+c
+d 582 1 0 0 0
+c
+d 583 2 0 0 0
+c
+d 584 1 0 0 0
+c
+d 585 1 0 0 0
+c
+d 154 3 0 1 0
+c
+d 155 2 1 0 0
+c
+d 156 1 1 0 0
+c
+d 157 2 1 0 0
+c
+d 276 2 0 0 0
+c
+d 334 1 0 0 0
+c
+d 335 2 1 0 0
+c
+d 336 1 1 0 0
+c
+d 3 1 0 0 0
+c
+d 4 2 1 0 0
+c
+d 34 1 0 0 0
+c
+d 655 1 0 0 0
+c
+d 421 1 0 0 0
+c
+d 422 1 0 0 0
+c
+d 677 2 0 0 0
+c
+d 335 1 0 0 0
+c
+d 336 1 0 1 0
+c
+d 424 2 1 0 0
+c
+d 425 1 0 0 0
+c
+d 429 1 0 0 0
+c
+d 477 1 0 0 0
+c
+d 478 1 0 0 0
+c
+d 741 1 0 0 0
+c
+d 338 1 0 0 0
+c
+d 339 1 0 0 0
+c
+d 340 2 1 0 0
+c
+d 341 1 0 1 0
+c
+d 347 1 0 0 0
+c
+d 38 1 0 0 0
+c
+d 42 1 0 0 0
+c
+d 43 1 0 0 0
+c
+d 22 1 0 1 0
+c
+d 23 1 1 0 0
+c
+d 639 1 0 0 0
+c
+d 712 1 0 0 0
+c
+d 151 1 0 0 0
+c
+d 302 2 1 0 0
+c
+d 304 1 0 0 0
+c
+d 598 1 0 0 0
+c
+d 599 1 0 0 0
+c
+d 696 1 0 0 0
+c
+d 343 1 0 0 0
+c
+d 366 1 0 0 0
+c
+d 367 2 1 0 0
+c
+d 368 2 1 0 0
+c
+d 152 1 0 1 0
+c
+d 153 2 1 0 0
+c
+d 633 2 1 0 0
+c
+d 634 2 0 0 0
+c
+d 179 1 0 1 0
+c
+d 180 1 0 1 0
+c
+d 45 1 0 0 0
+c
+d 46 1 0 0 0
+c
+d 418 1 0 0 0
+c
+d 419 2 0 0 0
+c
+d 459 1 0 0 0
+c
+d 681 1 0 0 0
+c
+d 38 2 0 0 0
+c
+d 39 1 0 0 0
+c
+d 40 2 1 0 0
+c
+d 55 1 0 0 0
+c
+d 56 2 0 0 0
+c
+d 66 1 0 0 0
+c
+d 94 1 0 0 0
+c
+d 95 2 1 0 0
+c
+d 118 1 0 0 0
+c
+d 119 1 0 0 0
+c
+d 44 1 0 0 0
+c
+d 288 1 0 0 0
+c
+d 202 2 1 0 0
+c
+d 250 1 0 0 0
+c
+d 251 2 0 0 0
+c
+d 252 1 0 0 0
+c
+d 169 1 0 0 0
+c
+d 170 1 0 0 0
+c
+d 130 1 0 0 0
+c
+d 132 1 0 0 0
+c
+d 133 1 0 0 0
+c
+d 413 1 0 0 0
+c
+d 417 1 0 0 0
+c
+d 418 1 0 0 0
+c
+d 87 1 1 0 0
+c
+d 94 1 0 1 0
+c
+d 95 1 0 0 0
+c
+d 120 2 0 0 0
+c
+d 0 1 0 1 0
+c
+d 1 2 1 0 0
+c
+d 83 1 0 0 0
+c
+d 682 1 0 0 0
+c
+d 425 1 1 0 0
+c
+d 426 2 0 1 0
+c
+d 427 1 0 0 0
+c
+d 490 3 1 0 0
+c
+d 499 2 0 0 0
+c
+d 500 3 0 0 0
+c
+d 5 1 1 0 0
+c
+d 6 1 0 0 0
+c
+d 568 1 0 0 0
+c
+d 569 2 0 0 0
+c
+d 505 1 0 0 0
+c
+d 512 1 0 0 0
+c
+d 526 1 0 0 0
+c
+d 539 1 0 0 0
+c
+d 629 2 0 0 0
+c
+d 630 2 1 0 0
+c
+d 3 1 0 0 0
+c
+d 13 1 0 1 0
+c
+d 14 1 1 0 0
+c
+d 69 2 0 0 0
+c
+d 365 1 1 0 0
+c
+d 366 1 0 1 0
+c
+d 432 1 0 0 0
+c
+d 433 1 0 0 0
+c
+d 435 1 0 0 0
+c
+d 436 2 0 0 0
+c
+d 179 2 0 0 0
+c
+d 180 1 0 0 0
+c
+d 606 1 0 0 0
+c
+d 607 1 0 0 0
+c
+d 490 1 1 0 0
+c
+d 499 1 0 0 0
+c
+d 500 1 0 0 0
+c
+d 750 1 0 0 0
+c
+d 136 1 1 0 0
+c
+d 137 1 0 0 0
+c
+d 12 2 0 0 0
+c
+d 13 1 0 0 0
+c
+d 84 1 0 0 0
+c
+d 207 1 0 1 0
+c
+d 208 2 1 0 0
+c
+d 209 2 1 0 0
+c
+d 210 2 1 0 0
+c
+d 212 1 0 0 0
+c
+d 344 1 0 0 0
+c
+d 345 2 1 0 0
+c
+d 346 1 0 0 0
+c
+d 102 2 1 0 0
+c
+d 103 1 0 0 0
+c
+d 104 1 0 0 0
+c
+d 563 1 0 1 0
+c
+d 564 1 0 0 0
+c
+d 420 2 1 0 0
+c
+d 421 1 0 1 0
+c
+d 442 1 0 0 0
+c
+d 100 1 0 0 0
+c
+d 372 1 0 0 0
+c
+d 373 1 0 0 0
+c
+d 416 1 0 0 0
+c
+d 417 1 0 0 0
+c
+d 143 1 0 0 0
+c
+d 144 1 0 0 0
+c
+d 101 2 0 0 0
+c
+d 102 1 1 0 0
+c
+d 123 1 0 0 0
+c
+d 46 1 0 0 0
+c
+d 47 1 0 0 0
+c
+d 48 1 0 0 0
+c
+d 50 1 0 0 0
+c
+d 657 1 0 0 0
+c
+d 95 3 1 0 0
+c
+d 96 1 0 0 0
+c
+d 126 1 0 0 0
+c
+d 412 1 0 0 0
+c
+d 148 1 0 0 0
+c
+d 149 2 1 0 0
+c
+d 178 1 0 0 0
+c
+d 381 2 0 0 0
+c
+d 382 1 1 0 0
+c
+d 176 1 0 0 0
+c
+d 177 2 0 0 0
+c
+d 474 1 0 0 0
+c
+d 7 1 0 0 0
+c
+d 8 2 1 0 0
+c
+d 9 1 1 0 0
+c
+d 89 1 0 0 0
+c
+d 621 1 1 0 0
+c
+d 622 1 0 0 0
+c
+d 628 2 0 0 0
+c
+d 172 1 0 0 0
+c
+d 173 2 0 0 0
+c
+d 174 1 0 0 0
+c
+d 141 1 0 0 0
+c
+d 142 2 0 0 0
+c
+d 143 1 0 0 0
+c
+d 413 2 0 0 0
+c
+d 316 1 1 0 0
+c
+d 317 2 1 0 0
+c
+d 333 1 0 0 0
+c
+d 334 1 0 0 0
+c
+d 400 1 0 0 0
+c
+d 385 2 1 0 0
+c
+d 386 1 0 0 0
+c
+d 388 2 0 0 0
+c
+d 203 1 1 0 0
+c
+d 219 2 1 0 0
+c
+d 221 2 0 0 0
+c
+d 222 1 0 0 0
+c
+d 202 2 0 0 0
+c
+d 239 1 0 0 0
+c
+d 253 3 1 0 0
+c
+d 254 1 0 0 0
+c
+d 576 1 0 0 0
+c
+d 586 2 0 0 0
+c
+d 93 1 0 0 0
+c
+d 94 2 0 0 0
+c
+d 95 1 0 0 0
+c
+d 76 1 1 0 0
+c
+d 77 2 0 0 0
+c
+d 78 1 0 0 0
+c
+d 79 1 0 0 0
+c
+d 80 1 0 0 0
+c
+d 81 1 0 0 0
+c
+d 82 1 1 0 0
+c
+d 136 1 0 0 0
+c
+d 321 1 0 0 0
+c
+d 322 1 0 0 0
+c
+d 331 1 0 0 0
+c
+d 170 1 0 0 0
+c
+d 171 2 1 0 0
+c
+d 172 1 0 0 0
+c
+d 380 1 0 0 0
+c
+d 87 2 1 0 0
+c
+d 88 2 1 0 0
+c
+d 89 1 0 0 0
+c
+d 107 1 1 0 0
+c
+d 345 1 0 0 0
+c
+d 363 1 0 0 0
+c
+d 364 2 0 0 0
+c
+d 486 1 0 0 0
+c
+d 487 2 0 0 0
+c
+d 758 1 0 0 0
+c
+d 322 1 0 0 0
+c
+d 323 2 1 0 0
+c
+d 324 1 0 0 0
+c
+d 545 1 0 0 0
+c
+d 546 1 0 0 0
+c
+d 15 1 0 0 0
+c
+d 44 1 0 0 0
+c
+d 609 2 1 0 0
+c
+d 610 2 1 0 0
+c
+d 611 1 0 0 0
+c
+d 613 2 0 0 0
+c
+d 172 2 0 0 0
+c
+d 176 1 0 0 0
+c
+d 381 1 0 0 0
+c
+d 410 1 1 0 0
+c
+d 417 1 0 0 0
+c
+d 474 1 0 0 0
+c
+d 57 2 1 0 0
+c
+d 60 1 0 0 0
+c
+d 61 1 0 0 0
+c
+d 76 3 0 0 0
+c
+d 77 1 0 0 0
+c
+d 105 1 0 0 0
+c
+d 106 2 0 0 0
+c
+d 726 1 0 0 0
+c
+d 136 1 0 0 0
+c
+d 137 1 0 0 0
+c
+d 623 1 0 0 0
+c
+d 624 1 0 0 0
+c
+d 91 1 0 0 0
+c
+d 319 1 0 0 0
+c
+d 320 2 0 0 0
+c
+d 322 1 0 0 0
+c
+d 549 1 0 0 0
+c
+d 516 2 0 0 0
+c
+d 517 1 0 0 0
+c
+d 109 1 0 0 0
+c
+d 112 1 1 0 0
+c
+d 113 2 1 0 0
+c
+d 114 1 0 0 0
+c
+d 1 1 1 0 0
+c
+d 2 2 1 0 0
+c
+d 3 2 1 0 0
+c
+d 12 1 0 0 0
+c
+d 13 1 0 0 0
+c
+d 649 1 0 0 0
+c
+d 417 1 0 1 0
+c
+d 418 1 1 0 0
+c
+d 235 1 1 0 0
+c
+d 488 1 0 0 0
+c
+d 504 1 0 0 0
+c
+d 464 1 0 1 0
+c
+d 465 2 1 0 0
+c
+d 466 1 1 0 0
+c
+d 636 1 0 0 0
+c
+d 730 1 0 0 0
+c
+d 172 1 0 0 0
+c
+d 173 2 1 0 0
+c
+d 179 1 1 0 0
+c
+d 180 1 0 0 0
+c
+d 152 1 1 0 0
+c
+d 171 1 0 0 0
+c
+d 172 1 0 0 0
+c
+d 180 1 0 0 0
+c
+d 148 2 1 0 0
+c
+d 169 1 1 0 0
+c
+d 215 1 0 0 0
+c
+d 216 1 0 0 0
+c
+d 186 1 1 0 0
+c
+d 258 2 1 0 0
+c
+d 260 1 0 0 0
+c
+d 261 1 0 0 0
+c
+d 151 1 1 0 0
+c
+d 185 2 0 0 0
+c
+d 186 1 0 1 0
+c
+d 69 1 0 1 0
+c
+d 70 1 1 0 0
+c
+d 71 2 0 0 0
+c
+d 72 3 0 0 0
+c
+d 91 1 0 0 0
+c
+d 92 2 0 0 0
+c
+d 93 1 0 0 0
+c
+d 591 1 1 0 0
+c
+d 592 2 0 0 0
+c
+d 602 1 0 0 0
+c
+d 603 1 1 0 0
+c
+d 208 2 0 0 0
+c
+d 209 2 0 0 0
+c
+d 210 1 0 1 0
+c
+d 211 3 1 0 0
+c
+d 212 1 1 0 0
+c
+d 743 1 0 0 0
+c
+d 407 1 0 1 0
+c
+d 411 1 0 0 0
+c
+d 412 1 0 0 0
+c
+d 109 2 1 0 0
+c
+d 110 1 0 0 0
+c
+d 111 1 0 0 0
+c
+d 284 1 0 0 0
+c
+d 285 1 1 0 0
+c
+d 184 1 0 0 0
+c
+d 185 2 1 0 0
+c
+d 629 1 0 1 0
+c
+d 631 1 1 0 0
+c
+d 632 1 0 0 0
+c
+d 44 1 1 0 0
+c
+d 45 2 1 0 0
+c
+d 609 1 0 0 0
+c
+d 612 1 0 0 0
+c
+d 492 1 0 0 0
+c
+d 535 1 0 0 0
+c
+d 536 2 0 0 0
+c
+d 537 2 0 0 0
+c
+d 148 1 0 0 0
+c
+d 150 1 0 0 0
+c
+d 217 2 1 0 0
+c
+d 678 1 0 0 0
+c
+d 136 1 0 0 0
+c
+d 137 2 1 0 0
+c
+d 138 1 0 0 0
+c
+d 3 2 1 0 0
+c
+d 4 1 0 0 0
+c
+d 33 2 1 0 0
+c
+d 34 1 1 0 0
+c
+d 70 2 1 0 0
+c
+d 139 1 0 1 0
+c
+d 140 2 1 0 0
+c
+d 141 1 0 1 0
+c
+d 420 2 1 0 0
+c
+d 421 1 0 0 0
+c
+d 423 1 1 0 0
+c
+d 441 2 0 0 0
+c
+d 442 1 1 0 0
+c
+d 713 1 0 0 0
+c
+d 714 1 0 0 0
+c
+d 423 1 0 0 0
+c
+d 449 1 0 0 0
+c
+d 450 2 1 0 0
+c
+d 451 2 1 0 0
+c
+d 452 1 0 0 0
+c
+d 177 1 0 0 0
+c
+d 245 1 0 0 0
+c
+d 424 1 1 0 0
+c
+d 426 1 0 0 0
+c
+d 427 1 0 0 0
+c
+d 428 1 0 0 0
+c
+d 740 2 0 0 0
+c
+d 7 1 0 0 0
+c
+d 8 1 0 0 0
+c
+d 570 2 0 0 0
+c
+d 595 1 0 0 0
+c
+d 146 1 0 0 0
+c
+d 147 1 0 0 0
+c
+d 417 1 0 0 0
+c
+d 418 1 0 0 0
+c
+d 419 1 0 0 0
+c
+d 430 1 0 1 0
+c
+d 179 2 1 0 0
+c
+d 180 1 0 0 0
+c
+d 422 1 0 0 0
+c
+d 423 2 0 0 0
+c
+d 447 2 1 0 0
+c
+d 448 1 1 0 0
+c
+d 449 2 0 0 0
+c
+d 450 1 0 0 0
+c
+d 50 1 0 1 0
+c
+d 51 2 1 0 0
+c
+d 52 1 1 0 0
+c
+d 53 1 1 0 0
+c
+d 504 2 1 0 0
+c
+d 505 2 0 0 0
+c
+d 540 1 1 0 0
+c
+d 555 1 0 0 0
+c
+d 615 1 0 0 0
+c
+d 616 2 0 0 0
+c
+d 136 1 0 0 0
+c
+d 137 2 0 0 0
+c
+d 138 1 0 0 0
+c
+d 413 1 0 0 0
+c
+d 144 1 0 0 0
+c
+d 145 1 0 1 0
+c
+d 430 2 1 0 0
+c
+d 431 2 1 0 0
+c
+d 432 1 0 0 0
+c
+d 443 1 1 0 0
+c
+d 444 1 0 0 0
+c
+d 141 1 0 0 0
+c
+d 142 1 0 0 0
+c
+d 153 2 1 0 0
+c
+d 154 2 1 0 0
+c
+d 461 1 0 0 0
+c
+d 462 2 0 0 0
+c
+d 537 1 0 1 0
+c
+d 538 2 1 0 0
+c
+d 722 1 0 0 0
+c
+d 90 2 0 0 0
+c
+d 109 1 0 0 0
+c
+d 116 1 0 0 0
+c
+d 117 1 0 0 0
+c
+d 124 1 0 0 0
+c
+d 14 1 0 0 0
+c
+d 546 1 0 0 0
+c
+d 547 2 0 0 0
+c
+d 698 2 0 0 0
+c
+d 4 2 0 0 0
+c
+d 18 1 0 0 0
+c
+d 19 2 0 0 0
+c
+d 35 1 0 0 0
+c
+d 36 2 0 0 0
+c
+d 700 1 0 0 0
+c
+d 203 1 1 0 0
+c
+d 204 2 1 0 0
+c
+d 205 2 0 0 0
+c
+d 206 1 0 0 0
+c
+d 130 1 0 0 0
+c
+d 315 1 0 0 0
+c
+d 316 2 0 0 0
+c
+d 317 1 0 0 0
+c
+d 1 1 0 0 0
+c
+d 12 1 0 1 0
+c
+d 83 2 1 0 0
+c
+d 84 2 1 0 0
+c
+d 421 1 0 0 0
+c
+d 422 3 1 0 0
+c
+d 437 3 0 0 0
+c
+d 512 1 0 0 0
+c
+d 513 2 1 0 0
+c
+d 520 1 0 0 0
+c
+d 521 2 1 0 0
+c
+d 464 1 0 0 0
+c
+d 465 2 0 0 0
+c
+d 466 2 1 0 0
+c
+d 467 1 0 0 0
+c
+d 420 1 0 0 0
+c
+d 421 1 0 0 0
+c
+d 457 1 0 0 0
+c
+d 458 2 0 0 0
+c
+d 459 1 0 0 0
+c
+d 258 1 0 0 0
+c
+d 259 2 1 0 0
+c
+d 581 2 0 0 0
+c
+d 587 1 0 0 0
+c
+d 590 1 0 0 0
+c
+d 186 2 1 0 0
+c
+d 258 1 1 0 0
+c
+d 267 1 0 0 0
+c
+d 302 1 0 0 0
+c
+d 303 2 0 0 0
+c
+d 720 1 0 0 0
+c
+d 219 4 1 0 0
+c
+d 220 2 0 0 0
+c
+d 221 2 0 0 0
+c
+d 222 1 0 0 0
+c
+d 257 1 1 0 0
+c
+d 258 1 0 1 0
+c
+d 746 1 0 0 0
+c
+d 14 2 1 0 0
+c
+d 31 1 0 0 0
+c
+d 32 1 1 0 0
+c
+d 545 1 0 0 0
+c
+d 546 1 0 0 0
+c
+d 169 1 0 0 0
+c
+d 170 2 1 0 0
+c
+d 171 1 0 1 0
+c
+d 472 2 0 0 0
+c
+d 473 1 0 0 0
+c
+d 544 1 0 0 0
+c
+d 545 1 0 0 0
+c
+d 548 1 0 0 0
+c
+d 675 1 0 0 0
+c
+d 304 1 0 0 0
+c
+d 305 2 1 0 0
+c
+d 307 1 1 0 0
+c
+d 186 1 0 0 0
+c
+d 255 1 0 0 0
+c
+d 264 2 0 0 0
+c
+d 265 2 1 0 0
+c
+d 266 1 1 0 0
+c
+d 148 1 0 1 0
+c
+d 178 2 1 0 0
+c
+d 179 1 0 0 0
+c
+d 604 1 0 0 0
+c
+d 150 1 0 0 0
+c
+d 313 3 1 0 0
+c
+d 314 2 0 0 0
+c
+d 481 1 0 0 0
+c
+d 179 1 0 0 0
+c
+d 180 1 0 0 0
+c
+d 185 1 0 0 0
+c
+d 186 3 0 0 0
+c
+d 255 1 0 0 0
+c
+d 264 1 0 0 0
+c
+d 152 1 0 0 0
+c
+d 164 2 1 0 0
+c
+d 165 1 0 0 0
+c
+d 303 2 0 0 0
+c
+d 311 2 0 0 0
+c
+d 312 3 1 0 0
+c
+d 203 1 1 0 0
+c
+d 227 2 1 0 0
+c
+d 231 1 0 0 0
+c
+d 243 2 0 0 0
+c
+d 539 2 1 0 0
+c
+d 540 1 0 0 0
+c
+d 541 2 1 0 0
+c
+d 629 1 0 0 0
+c
+d 630 1 0 0 0
+c
+d 186 1 0 1 0
+c
+d 258 1 0 0 0
+c
+d 266 2 0 0 0
+c
+d 174 1 0 1 0
+c
+d 175 2 1 0 0
+c
+d 176 2 1 0 0
+c
+d 177 1 0 1 0
+c
+d 488 1 1 0 0
+c
+d 492 2 1 0 0
+c
+d 495 1 0 0 0
+c
+d 523 2 0 0 0
+c
+d 524 1 0 0 0
+c
+d 528 2 0 0 0
+c
+d 560 1 0 0 0
+c
+d 14 1 1 0 0
+c
+d 15 5 1 0 0
+c
+d 16 1 0 0 0
+c
+d 92 2 0 0 0
+c
+d 93 1 0 0 0
+c
+d 315 1 0 0 0
+c
+d 316 1 0 0 0
+c
+d 5 4 1 0 0
+c
+d 6 1 0 0 0
+c
+d 17 1 1 0 0
+c
+d 18 1 0 1 0
+c
+d 33 1 0 0 0
+c
+d 34 1 0 0 0
+c
+d 654 2 0 0 0
+c
+d 456 2 1 0 0
+c
+d 457 1 1 0 0
+c
+d 544 1 0 0 0
+c
+d 488 1 0 0 0
+c
+d 489 2 1 0 0
+c
+d 490 1 0 0 0
+c
+d 561 1 1 0 0
+c
+d 505 2 1 0 0
+c
+d 614 2 1 0 0
+c
+d 615 1 0 0 0
+c
+d 619 1 1 0 0
+c
+d 671 1 0 0 0
+c
+d 325 1 0 0 0
+c
+d 326 2 1 0 0
+c
+d 327 1 0 1 0
+c
+d 126 2 1 0 0
+c
+d 127 1 0 0 0
+c
+d 408 1 0 0 0
+c
+d 467 1 0 0 0
+c
+d 468 1 0 0 0
+c
+d 157 1 1 0 0
+c
+d 158 2 1 0 0
+c
+d 159 1 0 0 0
+c
+d 160 1 0 0 0
+c
+d 162 1 0 0 0
+c
+d 751 2 0 0 0
+c
+d 415 1 0 0 0
+c
+d 416 2 1 0 0
+c
+d 417 1 0 1 0
+c
+d 143 1 0 0 0
+c
+d 144 1 0 0 0
+c
+d 325 1 0 0 0
+c
+d 326 2 0 0 0
+c
+d 327 1 0 0 0
+c
+d 419 2 1 0 0
+c
+d 420 1 0 0 0
+c
+d 444 1 0 0 0
+c
+d 445 2 0 0 0
+c
+d 446 1 0 0 0
+c
+d 327 1 0 0 0
+c
+d 328 1 0 0 0
+c
+d 186 1 0 0 0
+c
+d 201 3 1 0 0
+c
+d 202 1 1 0 0
+c
+d 250 2 0 0 0
+c
+d 251 1 0 0 0
+c
+d 724 1 0 0 0
+c
+d 333 1 1 0 0
+c
+d 334 2 1 0 0
+c
+d 335 1 0 0 0
+c
+d 136 1 0 0 0
+c
+d 137 1 0 0 0
+c
+d 343 1 1 0 0
+c
+d 345 1 0 0 0
+c
+d 366 1 0 0 0
+c
+d 367 2 0 0 0
+c
+d 368 2 0 0 0
+c
+d 355 1 1 0 0
+c
+d 356 2 0 0 0
+c
+d 357 1 0 0 0
+c
+d 358 1 0 0 0
+c
+d 359 2 0 0 0
+c
+d 360 1 0 0 0
+c
+d 101 2 0 0 0
+c
+d 102 1 0 0 0
+c
+d 103 1 0 0 0
+c
+d 121 1 0 0 0
+c
+d 184 1 0 0 0
+c
+d 185 2 1 0 0
+c
+d 512 1 0 0 0
+c
+d 513 1 0 0 0
+c
+d 0 2 1 0 0
+c
+d 1 1 0 0 0
+c
+d 385 1 0 0 0
+c
+d 148 1 0 0 0
+c
+d 149 2 0 0 0
+c
+d 150 2 1 0 0
+c
+d 197 1 0 0 0
+c
+d 263 1 1 0 0
+c
+d 22 1 0 0 0
+c
+d 23 1 0 0 0
+c
+d 639 3 1 0 0
+c
+d 640 1 0 0 0
+c
+d 712 2 0 0 0
+c
+d 144 1 0 0 0
+c
+d 145 1 0 1 0
+c
+d 130 1 0 0 0
+c
+d 131 1 1 0 0
+c
+d 272 1 0 0 0
+c
+d 170 1 0 0 0
+c
+d 171 2 0 0 0
+c
+d 172 1 0 0 0
+c
+d 173 1 0 1 0
+c
+d 174 1 1 0 0
+c
+d 175 1 1 0 0
+c
+d 176 2 1 0 0
+c
+d 177 1 0 0 0
+c
+d 178 2 0 0 0
+c
+d 142 1 0 1 0
+c
+d 143 1 0 0 0
+c
+d 14 1 1 0 0
+c
+d 21 1 1 0 0
+c
+d 22 1 0 0 0
+c
+d 547 2 0 0 0
+c
+d 548 1 0 0 0
+c
+d 89 1 0 1 0
+c
+d 90 2 1 0 0
+c
+d 91 2 0 0 0
+c
+d 282 1 0 0 0
+c
+d 283 1 0 0 0
+c
+d 664 1 0 0 0
+c
+d 204 1 1 0 0
+c
+d 205 2 0 0 0
+c
+d 206 3 0 0 0
+c
+d 207 2 0 0 0
+c
+d 212 1 0 0 0
+c
+d 218 2 0 0 0
+c
+d 225 1 0 0 0
+c
+d 154 2 0 0 0
+c
+d 155 1 0 0 0
+c
+d 460 1 0 0 0
+c
+d 461 1 0 0 0
+c
+d 462 3 0 0 0
+c
+d 22 1 0 0 0
+c
+d 85 1 0 0 0
+c
+d 126 1 0 0 0
+c
+d 468 2 0 0 0
+c
+d 469 2 0 0 0
+c
+d 727 1 0 0 0
+c
+d 150 1 0 1 0
+c
+d 182 2 0 0 0
+c
+d 183 1 0 0 0
+c
+d 184 2 1 0 0
+c
+d 199 2 1 0 0
+c
+d 701 1 0 0 0
+c
+d 137 1 0 0 0
+c
+d 138 2 1 0 0
+c
+d 139 1 0 1 0
+c
+d 101 1 0 0 0
+c
+d 121 2 0 0 0
+c
+d 122 1 1 0 0
+c
+d 123 1 1 0 0
+c
+d 242 1 0 0 0
+c
+d 203 1 0 0 0
+c
+d 259 1 1 0 0
+c
+d 581 2 0 0 0
+c
+d 582 1 0 0 0
+c
+d 587 3 0 0 0
+c
+d 588 2 0 0 0
+c
+d 589 2 0 0 0
+c
+d 590 1 0 0 0
+c
+d 507 1 0 0 0
+c
+d 508 2 0 0 0
+c
+d 509 1 0 0 0
+c
+d 130 1 0 0 0
+c
+d 131 2 0 0 0
+c
+d 272 2 0 0 0
+c
+d 245 1 0 0 0
+c
+d 246 1 0 0 0
+c
+d 394 2 0 0 0
+c
+d 395 1 0 0 0
+c
+d 4 1 1 0 0
+c
+d 27 1 0 0 0
+c
+d 28 1 0 0 0
+c
+d 52 1 0 0 0
+c
+d 53 2 0 0 0
+c
+d 99 2 1 1 0
+c
+d 100 2 0 0 0
+c
+d 286 1 1 0 0
+c
+d 329 2 1 0 0
+c
+d 330 1 0 0 0
+c
+d 488 1 1 0 0
+c
+d 492 2 0 0 0
+c
+d 493 3 1 0 0
+c
+d 494 2 0 0 0
+c
+d 524 1 0 0 0
+c
+d 528 2 0 0 0
+c
+d 535 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 624 1 0 0 0
+c
+d 625 2 0 0 0
+c
+d 626 1 0 0 0
+c
+d 150 2 1 0 0
+c
+d 181 2 1 0 0
+c
+d 198 1 0 0 0
+c
+d 214 1 0 0 0
+c
+d 215 1 0 0 0
+c
+d 656 2 0 0 0
+c
+d 181 1 0 1 0
+c
+d 182 2 1 0 0
+c
+d 183 1 1 0 0
+c
+d 15 1 1 0 0
+c
+d 44 1 0 0 0
+c
+d 45 2 0 0 0
+c
+d 46 1 0 0 0
+c
+d 609 1 0 0 0
+c
+d 304 3 1 0 0
+c
+d 310 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 592 4 0 0 0
+c
+d 593 1 0 0 0
+c
+d 602 1 0 0 0
+c
+d 245 1 0 0 0
+c
+d 248 2 0 0 0
+c
+d 249 1 0 0 0
+c
+d 702 1 0 0 0
+c
+d 126 1 0 0 0
+c
+d 127 1 0 0 0
+c
+d 57 1 1 0 0
+c
+d 110 1 0 0 0
+c
+d 111 1 0 0 0
+c
+d 273 2 0 0 0
+c
+d 729 1 0 0 0
+c
+d 419 3 1 0 0
+c
+d 420 2 1 0 0
+c
+d 443 1 0 0 0
+c
+d 97 1 0 0 0
+c
+d 98 1 0 0 0
+c
+d 109 1 1 0 0
+c
+d 110 3 1 0 0
+c
+d 274 1 0 0 0
+c
+d 107 1 0 0 0
+c
+d 108 2 1 0 0
+c
+d 110 1 0 0 0
+c
+d 274 1 0 0 0
+c
+d 150 2 0 1 0
+c
+d 151 1 0 1 0
+c
+d 313 1 1 0 0
+c
+d 504 2 0 0 0
+c
+d 505 1 0 0 0
+c
+d 616 1 1 0 0
+c
+d 617 1 0 0 0
+c
+d 618 3 1 0 0
+c
+d 425 1 0 0 0
+c
+d 426 1 0 0 0
+c
+d 427 1 1 0 0
+c
+d 428 2 1 0 0
+c
+d 429 1 0 0 0
+c
+d 741 2 0 0 0
+c
+d 145 1 0 0 0
+c
+d 146 1 0 0 0
+c
+d 150 1 0 1 0
+c
+d 169 2 1 0 0
+c
+d 170 1 1 0 0
+c
+d 44 1 1 0 0
+c
+d 287 1 0 0 0
+c
+d 288 2 1 0 0
+c
+d 304 1 0 0 0
+c
+d 597 1 0 0 0
+c
+d 598 2 0 0 0
+c
+d 599 1 0 0 0
+c
+d 92 2 1 0 0
+c
+d 126 1 0 0 0
+c
+d 315 2 1 0 0
+c
+d 316 1 1 0 0
+c
+d 406 1 0 0 0
+c
+d 92 1 1 0 0
+c
+d 93 1 0 0 0
+c
+d 126 1 0 0 0
+c
+d 406 2 1 0 0
+c
+d 407 2 0 0 0
+c
+d 409 2 0 0 0
+c
+d 440 1 0 0 0
+c
+d 683 2 0 0 0
+c
+d 7 2 0 0 0
+c
+d 637 2 1 0 0
+c
+d 737 1 0 0 0
+c
+d 87 1 1 0 0
+c
+d 88 1 0 0 0
+c
+d 89 2 1 0 0
+c
+d 90 2 1 0 0
+c
+d 91 1 0 0 0
+c
+d 664 2 0 0 0
+c
+d 14 1 0 0 0
+c
+d 32 1 0 0 0
+c
+d 33 2 1 0 0
+c
+d 34 1 1 0 0
+c
+d 91 2 1 0 0
+c
+d 92 1 1 0 0
+c
+d 93 1 0 0 0
+c
+d 291 2 1 0 0
+c
+d 292 1 0 0 0
+c
+d 324 1 0 0 0
+c
+d 325 1 0 0 0
+c
+d 326 2 0 0 0
+c
+d 327 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 107 2 0 0 0
+c
+d 108 1 0 1 0
+c
+d 203 2 1 0 0
+c
+d 300 1 0 1 0
+c
+d 301 2 1 0 0
+c
+d 390 2 0 0 0
+c
+d 391 1 0 0 0
+c
+d 590 1 0 0 0
+c
+d 709 1 0 0 0
+c
+d 24 1 0 1 0
+c
+d 642 2 0 1 0
+c
+d 643 3 1 0 0
+c
+d 644 3 1 0 0
+c
+d 646 2 0 0 0
+c
+d 38 1 0 0 0
+c
+d 57 1 0 1 0
+c
+d 66 1 0 0 0
+c
+d 67 2 0 0 0
+c
+d 68 2 0 0 0
+c
+d 111 1 0 0 0
+c
+d 342 3 0 0 0
+c
+d 343 1 0 0 0
+c
+d 350 2 0 0 0
+c
+d 351 2 0 0 0
+c
+d 352 1 0 0 0
+c
+d 187 1 1 0 0
+c
+d 252 1 0 0 0
+c
+d 253 2 1 0 0
+c
+d 254 2 0 0 0
+c
+d 566 3 0 0 0
+c
+d 567 2 0 0 0
+c
+d 573 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 115 2 1 0 0
+c
+d 116 1 0 0 0
+c
+d 202 1 0 0 0
+c
+d 203 2 1 0 0
+c
+d 227 1 0 0 0
+c
+d 290 1 1 0 0
+c
+d 235 1 0 0 0
+c
+d 397 1 1 0 0
+c
+d 516 1 0 0 0
+c
+d 550 2 1 0 0
+c
+d 551 2 0 0 0
+c
+d 208 1 0 0 0
+c
+d 209 1 0 0 0
+c
+d 225 2 1 0 0
+c
+d 226 1 0 0 0
+c
+d 240 2 0 0 0
+c
+d 692 1 0 0 0
+c
+d 744 2 0 0 0
+c
+d 180 1 0 0 0
+c
+d 181 2 1 0 0
+c
+d 182 1 0 0 0
+c
+d 4 2 1 0 0
+c
+d 5 3 2 0 0
+c
+d 401 3 0 0 0
+c
+d 402 1 0 0 0
+c
+d 569 1 0 0 0
+c
+d 570 1 0 0 0
+c
+d 145 1 0 0 0
+c
+d 246 1 0 0 0
+c
+d 247 1 0 0 0
+c
+d 248 1 0 0 0
+c
+d 183 1 0 0 0
+c
+d 184 1 0 0 0
+c
+d 199 1 0 0 0
+c
+d 7 1 0 1 0
+c
+d 8 2 1 0 0
+c
+d 9 2 1 0 0
+c
+d 10 1 0 0 0
+c
+d 736 1 0 0 0
+c
+d 136 1 0 0 0
+c
+d 342 1 0 0 0
+c
+d 376 2 0 0 0
+a
+b 5
+b 1
+b 15
+b 8
+b 1
+b 3
+b 0
+b 15
+b 1
+b 28
+b 9
+b 3
+b 1
+b 22
+b 1
+b 2
+b 15
+b 2
+b 3
+b 3
+b 5
+b 2
+b 4
+b 1
+b 17
+b 1
+b 17
+b 14
+b 5
+b 24
+b 0
+b 5
+b 22
+b 7
+b 9
+b 2
+b 23
+b 6
+b 4
+b 0
+b 6
+b 3
+b 5
+b 2
+b 29
+b 3
+b 20
+b 1
+b 0
+b 14
+b 1
+b 16
+b 1
+b 8
+b 5
+b 1
+b 1
+b 29
+b 4
+b 0
+b 18
+b 1
+b 18
+b 8
+b 0
+b 7
+b 2
+b 14
+b 5
+b 0
+b 26
+b 2
+b 17
+b 7
+b 11
+b 3
+b 2
+b 5
+b 5
+b 9
+b 3
+b 1
+b 7
+b 4
+b 15
+b 6
+b 1
+b 7
+b 21
+b 3
+b 25
+b 0
+b 14
+b 4
+b 1
+b 31
+b 1
+b 0
+b 21
+b 12
+b 20
+b 2
+b 3
+b 2
+b 11
+b 17
+b 9
+b 1
+b 15
+b 1
+b 0
+b 9
+b 2
+b 21
+b 10
+b 3
+b 2
+b 15
+b 6
+b 3
+b 1
+b 11
+b 8
+b 0
+b 7
+b 7
+b 6
+b 0
+b 7
+b 6
+b 0
+b 13
+b 31
+b 1
+b 9
+b 5
+b 2
+b 4
+b 1
+b 6
+b 1
+b 3
+b 2
+b 8
+b 20
+b 26
+b 4
+b 30
+b 2
+b 0
+b 16
+b 10
+b 4
+b 2
+b 28
+b 12
+b 1
+b 17
+b 2
+b 5
+b 4
+b 7
+b 4
+b 1
+b 8
+b 3
+b 2
+b 2
+b 1
+b 5
+b 2
+b 8
+b 5
+b 1
+b 29
+b 12
+b 22
+b 3
+b 27
+b 20
+b 2
+b 8
+b 3
+b 1
+b 8
+b 1
+b 13
+b 10
+b 7
+b 4
+b 9
+b 1
+b 22
+b 2
+b 2
+b 1
+b 4
+b 3
+b 11
+b 14
+b 12
+b 24
+b 9
+b 16
+b 11
+b 2
+b 1
+b 1
+b 20
+b 1
+b 9
+b 2
+b 7
+b 4
+b 10
+b 2
+b 17
+b 6
+b 13
+b 7
+b 2
+b 25
+b 8
+b 30
+b 11
+b 10
+b 0
+b 14
+b 5
+b 28
+b 26
+b 1
+b 8
+b 9
+b 5
+b 4
+b 28
+b 26
+b 1
+b 3
+b 0
+b 1
+b 27
+b 1
+b 19
+b 5
+b 9
+b 1
+b 1
+b 7
+b 3
+b 0
+b 4
+b 5
+b 3
+b 6
+b 1
+b 23
+b 4
+b 0
+b 30
+b 13
+b 1
+b 15
+b 1
+b 1
+b 1
+b 1
+b 2
+b 1
+b 1
+b 19
+b 1
+b 29
+b 15
+b 6
+b 0
+b 30
+b 18
+b 0
+b 19
+b 19
+b 1
+b 12
+b 22
+b 22
+b 11
+b 9
+b 4
+b 16
+b 2
+b 3
+b 1
+b 2
+b 30
+b 12
+b 17
+b 8
+b 9
+b 8
+b 7
+b 3
+b 2
+b 2
+b 2
+b 31
+b 13
+b 10
+b 3
+b 3
+b 11
+b 10
+b 3
+b 3
+b 2
+b 1
+b 25
+b 5
+b 4
+b 5
+b 4
+b 7
+b 0
+b 4
+b 1
+b 2
+b 11
+b 10
+b 3
+b 1
+b 0
+b 1
+b 2
+b 0
+b 15
+b 4
+b 14
+b 9
+b 16
+b 2
+b 12
+b 3
+b 23
+b 10
+b 1
+b 14
+b 1
+b 0
+b 0
+b 20
+b 5
+b 5
+b 1
+b 24
+b 13
+b 12
+b 21
+b 14
+b 0
+b 15
+b 3
+b 11
+b 10
+b 6
+b 10
+b 0
+b 11
+b 0
+b 0
+b 5
+b 2
+b 4
+b 1
+b 3
+b 1
+b 2
+b 1
+b 5
+b 4
+b 11
+b 10
+b 3
+b 1
+b 1
+b 2
+b 12
+b 2
+b 13
+b 3
+b 4
+b 2
+b 16
+b 6
+b 24
+b 3
+b 0
+b 0
+b 1
+b 0
+b 0
+b 1
+b 5
+b 1
+b 1
+b 0
+b 13
+b 2
+b 9
+b 1
+b 19
+b 3
+b 0
+b 4
+b 12
+b 9
+b 1
+b 3
+b 0
+b 1
+b 19
+b 1
+b 3
+b 3
+b 20
+b 2
+b 12
+b 4
+b 15
+b 2
+b 26
+b 1
+b 0
+b 14
+b 14
+b 1
+b 2
+b 4
+b 2
+b 10
+b 1
+b 0
+b 5
+b 3
+b 0
+b 29
+b 19
+b 16
+b 14
+b 3
+b 2
+b 27
+b 1
+b 11
+b 1
+b 5
+b 4
+b 18
+b 2
+b 0
+b 4
+b 1
+b 21
+b 22
+b 5
+b 1
+b 7
+b 2
+b 5
+b 8
+b 4
+b 7
+b 2
+b 1
+b 1
+b 5
+b 4
+b 21
+b 12
+b 3
+b 3
+b 28
+b 2
+b 6
+b 1
+b 9
+b 14
+b 2
+b 7
+b 1
+b 5
+b 3
+b 0
+b 31
+b 15
+b 2
+b 16
+b 1
+b 0
+b 6
+b 19
+b 10
+b 11
+b 8
+b 9
+b 0
+b 28
+b 12
+b 18
+b 4
+b 9
+b 8
+b 14
+b 4
+b 2
+b 1
+b 9
+b 8
+b 5
+b 4
+b 3
+b 9
+b 0
+b 3
+b 1
+b 23
+b 1
+b 1
+b 1
+b 1
+b 1
+b 12
+b 1
+b 1
+b 12
+b 2
+b 13
+b 12
+b 2
+b 6
+b 11
+b 10
+b 27
+b 25
+b 1
+b 4
+b 0
+b 28
+b 8
+b 0
+b 17
+b 1
+b 6
+b 5
+b 1
+b 1
+b 1
+b 1
+b 1
+b 2
+b 9
+b 8
+b 4
+b 3
+b 19
+b 3
+b 2
+b 18
+b 3
+b 20
+b 1
+b 0
+b 13
+b 1
+b 9
+b 4
+b 0
+b 22
+b 3
+b 0
+b 3
+b 2
+b 9
+b 8
+b 24
+b 0
+b 0
+b 1
+b 1
+b 0
+b 8
+b 5
+b 0
+b 21
+b 14
+b 8
+b 6
+b 4
+b 4
+b 16
+b 10
+b 17
+b 4
+b 13
+b 1
+b 2
+b 1
+b 22
+b 8
+b 1
+b 1
+b 2
+b 8
+b 2
+b 25
+b 0
+b 0
+b 2
+b 2
+b 7
+b 6
+b 9
+b 3
+b 0
+b 1
+b 7
+b 6
+b 11
+b 12
+b 2
+b 3
+b 2
+b 5
+b 4
+b 21
+b 3
+b 6
+b 2
+b 18
+b 11
+b 2
+b 2
+b 1
+b 13
+b 2
+b 7
+b 6
+b 8
+b 1
+b 0
+b 23
+b 1
+b 11
+b 8
+b 1
+b 1
+b 7
+b 4
+b 7
+b 1
+b 0
+b 19
+b 10
+b 28
+b 13
+b 11
+b 1
+b 0
+b 3
+b 0
+b 1
+b 2
+b 24
+b 1
+b 18
+b 5
+b 3
+b 4
+b 0
+b 5
+b 4
+b 4
+b 1
+b 0
+b 1
+b 3
+b 3
+b 1
+b 1
+b 1
+b 6
+b 2
+b 2
+b 9
+b 8
+b 1
+b 1
+b 1
+b 1
+b 3
+b 5
+b 4
+b 15
+b 6
+b 7
+b 6
+b 3
+b 2
+b 14
+b 5
+b 12
+b 9
+b 8
+b 10
+b 3
+b 7
+b 2
+b 17
+b 16
+b 19
+b 20
+b 19
+b 2
+b 1
+b 0
+b 9
+b 1
+b 8
+b 5
+b 0
+b 3
+b 2
+b 13
+b 6
+b 13
+b 1
+b 5
+b 4
+b 2
+b 27
+b 25
+b 1
+b 26
+b 1
+b 5
+b 4
+b 7
+b 4
+b 1
+b 0
+b 0
+b 3
+b 9
+b 9
+b 6
+b 1
+b 0
+b 2
+b 6
+b 10
+b 7
+b 3
+b 2
+b 18
+b 8
+b 6
+b 30
+b 1
+b 5
+b 4
+b 9
+b 4
+b 1
+b 3
+b 6
+b 0
+b 15
+b 14
+b 3
+b 4
+b 0
+b 15
+b 10
+b 28
+b 4
+b 0
+b 3
+b 0
+b 1
+b 16
+b 5
+b 17
+b 3
+b 15
+b 1
+b 0
+b 13
+b 5
+b 1
+b 21
+b 5
+b 0
+b 11
+b 6
+b 1
+b 2
+b 29
+b 1
+b 1
+b 4
+b 2
+b 29
+b 22
+b 15
+b 3
+b 2
+b 1
+b 8
+b 2
+b 3
+b 2
+b 14
+b 3
+b 0
+b 1
+b 1
+b 3
+b 26
+b 1
+b 3
+b 2
+b 8
+b 15
+b 4
+b 1
+b 0
+b 1
+b 0
+b 1
+b 5
+b 2
+b 19
+b 1
+b 0
+b 7
+b 4
+b 17
+b 6
+b 4
+b 1
+b 17
+b 2
+b 6
+b 10
+b 16
+b 13
+b 1
+b 12
+b 11
+b 8
+b 26
+b 7
+b 0
+b 16
+b 1
+b 6
+b 5
+b 4
+b 2
+b 1
+b 9
+b 2
+b 8
+b 4
+b 11
+b 6
+b 9
+b 1
+b 1
+b 2
+b 16
+b 3
+b 0
+b 0
+b 1
+b 7
+b 3
+b 22
+b 7
+b 21
+b 5
+b 6
+b 7
+b 2
+b 4
+b 12
+b 2
+b 3
+b 2
+b 0
+b 1
+b 21
+b 16
+b 14
+b 1
+b 30
+b 2
+b 0
+b 25
+b 4
+b 2
+b 4
+b 29
+b 4
+b 0
+b 21
+b 8
+b 8
+b 1
+b 7
+b 2
+b 3
+b 2
+b 21
+b 0
+b 1
+b 4
+b 0
+b 8
+b 3
+b 2
+b 22
+b 7
+b 14
+b 10
+b 4
+b 3
+b 16
+b 13
+b 1
+b 1
+b 29
+b 1
+b 16
+b 1
+b 18
+b 3
+b 25
+b 3
+b 1
+b 5
+b 23
+b 2
+b 9
+b 4
+b 8
+b 2
+b 17
+b 16
+b 3
+b 4
+b 12
+b 9
+b 0
+b 3
+b 2
+b 3
+b 1
+b 0
+b 1
+b 3
+b 1
+b 23
+b 2
+b 21
+b 18
+b 1
+b 1
+b 2
+b 4
+b 3
+b 2
+b 17
+b 13
+b 3
+b 3
+b 2
+b 0
+b 1
+b 19
+b 1
+b 8
+b 3
+b 0
+b 1
+b 0
+b 1
+b 2
+b 7
+b 1
+b 0
+b 7
+b 3
+b 19
+b 6
+b 26
+b 11
+b 5
+b 2
+b 7
+b 5
+b 1
+b 4
+b 1
+b 26
+b 23
+b 1
+b 6
+b 21
+b 8
+b 0
+b 0
+b 1
+b 5
+b 9
+b 1
+b 1
+b 6
+b 3
+b 26
+b 1
+b 2
+b 3
+b 0
+b 2
+b 21
+b 12
+b 0
+b 1
+b 1
+b 2
+b 13
+b 3
+b 13
+b 2
+b 3
+b 2
+b 1
+b 5
+b 0
+b 0
+b 11
+b 10
+b 0
+b 7
+b 6
+b 1
+b 7
+b 0
+b 0
+b 1
+b 12
+b 1
+b 1
+b 0
+b 7
+b 3
+b 25
+b 5
+b 4
+b 5
+b 21
+b 1
+b 3
+b 2
+b 15
+b 3
+b 10
+b 1
+b 0
+b 11
+b 2
+b 15
+b 13
+b 1
+b 0
+b 8
+b 28
+b 27
+b 1
+b 1
+b 5
+b 4
+b 2
+b 4
+b 2
+b 1
+b 5
+b 2
+b 26
+b 20
+b 15
+b 12
+b 0
+b 17
+b 3
+b 3
+b 2
+b 17
+b 12
+b 2
+b 16
+b 7
+b 0
+b 15
+b 14
+b 4
+b 18
+b 9
+b 0
+b 14
+b 1
+b 9
+b 4
+b 1
+b 2
+b 26
+b 13
+b 0
+b 19
+b 7
+b 5
+b 2
+b 30
+b 0
+b 5
+b 1
+b 8
+b 10
+b 3
+b 0
+b 3
+b 2
+b 0
+b 0
+b 1
+b 22
+b 3
+b 0
+b 4
+b 1
+b 1
+b 4
+b 24
+b 9
+b 0
+b 1
+b 8
+b 0
+b 13
+b 14
+b 6
+b 2
+b 0
+b 1
+b 0
+b 0
+b 15
+b 8
+b 19
+b 1
+b 1
+b 1
+b 3
+b 3
+b 2
+b 16
+b 9
+b 11
+b 2
+b 19
+b 9
+b 0
+b 13
+b 3
+b 4
+b 29
+b 19
+b 6
+b 5
+b 3
+b 2
+b 6
+b 2
+b 2
+b 6
+b 8
+b 4
+b 19
+b 1
+b 8
+b 7
+b 1
+b 1
+b 0
+b 7
+b 3
+b 5
+b 1
+b 1
+b 1
+b 28
+b 2
+b 1
+b 6
+b 2
+b 11
+b 10
+b 3
+b 2
+b 2
+b 1
+b 3
+b 2
+b 11
+b 1
+b 0
+b 9
+b 4
+b 4
+b 1
+b 3
+b 0
+b 3
+b 2
+b 0
+b 11
+b 1
+b 0
+b 15
+b 12
+b 3
+b 1
+b 12
+b 2
+b 6
+b 1
+b 2
+b 5
+b 1
+b 6
+b 1
+b 30
+b 3
+b 9
+b 4
+b 9
+b 8
+b 14
+b 7
+b 3
+b 2
+b 18
+b 4
+b 11
+b 4
+b 2
+b 2
+b 14
+b 11
+b 1
+b 9
+b 26
+b 0
+b 0
+b 8
+b 9
+b 8
+b 0
+b 2
+b 2
+b 2
+b 2
+b 23
+b 18
+b 0
+b 7
+b 6
+b 7
+b 4
+b 13
+b 8
+b 22
+b 4
+b 0
+b 12
+b 3
+b 15
+b 4
+b 2
+b 1
+b 30
+b 18
+b 4
+b 2
+b 12
+b 11
+b 8
+b 14
+b 1
+b 0
+b 25
+b 9
+b 3
+b 7
+b 6
+b 1
+b 8
+b 0
+b 18
+b 16
+b 13
+b 1
+b 8
+b 2
+b 3
+b 2
+b 30
+b 19
+b 2
+b 1
+b 5
+b 0
+b 9
+b 4
+b 19
+b 5
+b 9
+b 0
+b 5
+b 4
+b 5
+b 3
+b 2
+b 1
+b 0
+b 1
+b 5
+b 0
+b 3
+b 14
+b 14
+b 1
+b 27
+b 4
+b 5
+b 2
+b 15
+b 8
+b 27
+b 27
+b 0
+b 16
+b 5
+b 2
+b 0
+b 4
+b 2
+b 5
+b 4
+b 11
+b 23
+b 11
+b 9
+b 8
+b 19
+b 10
+b 9
+b 4
+b 1
+b 1
+b 5
+b 4
+b 14
+b 2
+b 5
+b 4
+b 16
+b 14
+b 1
+b 8
+b 6
+b 9
+b 4
+b 16
+b 3
+b 10
+b 13
+b 8
+b 9
+b 6
+b 2
+b 0
+b 1
+b 9
+b 7
+b 4
+b 7
+b 0
+b 0
+b 1
+b 2
+b 24
+b 6
+b 17
+b 14
+b 1
+b 7
+b 4
+b 17
+b 4
+b 1
+b 12
+b 10
+b 1
+b 4
+b 15
+b 2
+b 11
+b 4
+b 17
+b 3
+b 0
+b 5
+b 4
+b 13
+b 6
+b 29
+b 1
+b 2
+b 19
+b 18
+b 23
+b 8
+b 13
+b 12
+b 9
+b 1
+b 16
+b 5
+b 20
+b 4
+b 17
+b 0
+b 5
+b 3
+b 3
+b 6
+b 1
+b 6
+b 3
+b 8
+b 3
+b 0
+b 17
+b 4
+b 2
+b 11
+b 1
+b 25
+b 5
+b 5
+b 1
+b 12
+b 7
+b 29
+b 30
+b 4
+b 22
+b 6
+b 0
+b 13
+b 3
+b 27
+b 28
+b 3
+b 22
+b 21
+b 1
+b 1
+b 23
+b 7
+b 4
+b 7
+b 6
+b 15
+b 0
+b 2
+b 16
+b 1
+b 0
+b 23
+b 2
+b 26
+b 8
+b 7
+b 1
+b 1
+b 1
+b 21
+b 1
+b 24
+b 5
+b 1
+b 0
+b 1
+b 0
+b 7
+b 2
+b 19
+b 4
+b 7
+b 6
+b 2
+b 1
+b 17
+b 16
+b 30
+b 9
+b 3
+b 24
+b 5
+b 9
+b 6
+b 25
+b 2
+b 1
+b 2
+b 0
+b 15
+b 4
+b 0
+b 19
+b 8
+b 24
+b 5
+b 30
+b 2
+b 16
+b 9
+b 5
+b 3
+b 15
+b 12
+b 1
+b 2
+b 0
+b 1
+b 1
+b 2
+b 18
+b 1
+b 26
+b 0
+b 0
+b 1
+b 8
+b 15
+b 6
+b 0
+b 13
+b 3
+b 6
+b 2
+b 7
+b 6
+b 7
+b 6
+b 6
+b 4
+b 1
+b 1
+b 8
+b 5
+b 3
+b 1
+b 6
+b 9
+b 2
+b 6
+b 3
+b 29
+b 2
+b 1
+b 0
+b 7
+b 3
+b 3
+b 0
+b 0
+b 0
+b 1
+b 5
+b 3
+b 7
+b 3
+b 2
+b 1
+b 4
+b 0
+b 2
+b 9
+b 0
+b 0
+b 1
+b 5
+b 5
+b 2
+b 4
+b 20
+b 9
+b 12
+b 1
+b 6
+b 1
+b 10
+b 10
+b 3
+b 11
+b 6
+b 14
+b 8
+b 8
+b 3
+b 26
+b 2
+b 6
+b 29
+b 4
+b 1
+b 5
+b 2
+b 5
+b 8
+b 18
+b 2
+b 4
+b 8
+b 10
+b 7
+b 13
+b 6
+b 3
+b 1
+b 2
+b 4
+b 1
+b 3
+b 1
+b 17
+b 15
+b 1
+b 29
+b 5
+b 0
+b 0
+b 1
+b 4
+b 1
+b 6
+b 3
+b 2
+b 19
+b 1
+b 3
+b 9
+b 8
+b 1
+b 1
+b 0
+b 18
+b 3
+b 2
+b 1
+b 4
+b 20
+b 9
+b 13
+b 5
+b 0
+b 0
+b 9
+b 2
+b 5
+b 5
+b 17
+b 4
+b 31
+b 16
+b 3
+b 1
+b 3
+b 2
+b 19
+b 18
+b 20
+b 7
+b 6
+b 15
+b 2
+b 11
+b 10
+b 6
+b 14
+b 0
+b 22
+b 12
+b 1
+b 15
+b 4
+b 14
+b 13
+b 6
+b 1
+b 0
+b 21
+b 14
+b 20
+b 1
+b 1
+b 0
+b 4
+b 12
+b 12
+b 27
+b 5
+b 1
+b 11
+b 22
+b 11
+b 1
+b 5
+b 0
+b 1
+b 2
+b 0
+b 13
+b 12
+b 28
+b 9
+b 11
+b 5
+b 28
+b 1
+b 0
+b 8
+b 5
+b 7
+b 6
+b 5
+b 6
+b 13
+b 9
+b 17
+b 16
+b 13
+b 1
+b 25
+b 22
+b 1
+b 3
+b 3
+b 2
+b 21
+b 1
+b 3
+b 0
+b 1
+b 1
+b 5
+b 12
+b 0
+b 10
+b 0
+b 22
+b 4
+b 15
+b 3
+b 6
+b 6
+b 1
+b 19
+b 11
+b 12
+b 5
+b 16
+b 19
+b 16
+b 15
+b 1
+b 21
+b 10
+b 3
+b 2
+b 20
+b 22
+b 0
+b 9
+b 6
+b 1
+b 8
+b 6
+b 1
+b 5
+b 4
+b 15
+b 4
+b 18
+b 7
+b 22
+b 7
+b 6
+b 8
+b 0
+b 9
+b 6
+b 1
+b 2
+b 8
+b 0
+b 12
+b 27
+b 14
+b 17
+b 16
+b 9
+b 1
+b 0
+b 9
+b 2
+b 3
+b 1
+b 1
+b 17
+b 0
+b 18
+b 25
+b 4
+b 19
+b 2
+b 0
+b 3
+b 1
+b 1
+b 7
+b 5
+b 19
+b 5
+b 1
+b 4
+b 5
+b 4
+b 1
+b 8
+b 3
+b 25
+b 7
+b 0
+b 29
+b 6
+b 4
+b 1
+b 0
+b 29
+b 4
+b 25
+b 8
+b 25
+b 1
+b 20
+b 10
+b 0
+b 18
+b 5
+b 1
+b 12
+b 2
+b 3
+b 4
+b 3
+b 1
+b 0
+b 1
+b 0
+b 1
+b 22
+b 1
+b 5
+b 4
+b 12
+b 10
+b 9
+b 2
+b 18
+b 16
+b 1
+b 7
+b 4
+b 1
+b 1
+b 5
+b 2
+b 0
+b 13
+b 3
+b 6
+b 6
+b 16
+b 12
+b 11
+b 11
+b 1
+b 1
+b 18
+b 15
+b 1
+b 3
+b 1
+b 5
+b 1
+b 3
+b 5
+b 2
+b 2
+b 9
+b 4
+b 9
+b 4
+b 16
+b 13
+b 1
+b 9
+b 20
+b 0
+b 3
+b 2
+b 3
+b 1
+b 0
+b 13
+b 8
+b 0
+b 29
+b 4
+b 4
+b 1
+b 5
+b 17
+b 6
+b 0
+b 7
+b 3
+b 0
+b 5
+b 1
+b 1
+b 6
+b 3
+b 1
+b 1
+b 11
+b 6
+b 14
+b 5
+b 9
+b 9
+b 0
+b 16
+b 0
+b 1
+b 7
+b 6
+b 3
+b 13
+b 12
+b 1
+b 12
+b 11
+b 1
+b 26
+b 3
+b 5
+b 4
+b 3
+b 2
+b 22
+b 6
+b 5
+b 4
+b 30
+b 7
+b 6
+b 22
+b 11
+b 2
+b 7
+b 3
+b 1
+b 18
+b 12
+b 12
+b 0
+b 23
+b 2
+b 6
+b 1
+b 7
+b 4
+b 3
+b 1
+b 0
+b 20
+b 2
+b 13
+b 12
+b 1
+b 2
+b 1
+b 2
+b 0
+b 1
+b 2
+b 5
+b 4
+b 10
+b 2
+b 0
+b 11
+b 4
+b 4
+b 4
+b 1
+b 0
+b 25
+b 23
+b 1
+b 17
+b 18
+b 15
+b 2
+b 8
+b 6
+b 1
+b 25
+b 23
+b 1
+b 6
+b 0
+b 10
+b 3
+b 20
+b 4
+b 4
+b 1
+b 3
+b 8
+b 2
+b 1
+b 29
+b 21
+b 2
+b 7
+b 6
+b 16
+b 1
+b 0
+b 18
+b 5
+b 0
+b 14
+b 2
+b 31
+b 13
+b 4
+b 4
+b 1
+b 0
+b 25
+b 18
+b 16
+b 1
+b 24
+b 1
+b 0
+b 0
+b 3
+b 4
+b 0
+b 27
+b 10
+b 7
+b 7
+b 18
+b 9
+b 2
+b 27
+b 8
+b 0
+b 0
+b 3
+b 0
+b 1
+b 8
+b 2
+b 5
+b 2
+b 1
+b 6
+b 3
+b 1
+b 20
+b 5
+b 26
+b 26
+b 1
+b 15
+b 14
+b 7
+b 1
+b 20
+b 5
+b 7
+b 4
+b 2
+b 22
+b 2
+b 28
+b 4
+b 28
+b 1
+b 0
+b 0
+b 1
+b 1
+b 2
+b 2
+b 6
+b 3
+b 25
+b 17
+b 18
+b 17
+b 2
+b 8
+b 8
+b 1
+b 21
+b 1
+b 0
+b 5
+b 4
+b 6
+b 2
+b 11
+b 7
+b 9
+b 0
+b 2
+b 3
+b 5
+b 5
+b 0
+b 11
+b 1
+b 7
+b 5
+b 4
+b 0
+b 13
+b 7
+b 6
+b 2
+b 4
+b 1
+b 0
+b 17
+b 10
+b 12
+b 6
+b 21
+b 13
+b 12
+b 19
+b 2
+b 11
+b 10
+b 16
+b 3
+b 2
+b 29
+b 3
+b 13
+b 12
+b 9
+b 1
+b 18
+b 2
+b 18
+b 17
+b 1
+b 2
+b 9
+b 1
+b 0
+b 0
+b 1
+b 7
+b 4
+b 1
+b 6
+b 23
+b 21
+b 1
+b 11
+b 0
+b 26
+b 23
+b 1
+b 2
+b 0
+b 1
+b 1
+b 2
+b 8
+b 23
+b 8
+b 4
+b 4
+b 8
+b 8
+b 17
+b 16
+b 7
+b 20
+b 2
+b 13
+b 7
+b 14
+b 11
+b 1
+b 3
+b 9
+b 24
+b 0
+b 24
+b 4
+b 8
+b 8
+b 7
+b 7
+b 1
+b 2
+b 17
+b 15
+b 1
+b 16
+b 15
+b 17
+b 4
+b 3
+b 2
+b 3
+b 0
+b 2
+b 1
+b 4
+b 2
+b 1
+b 2
+b 22
+b 20
+b 1
+b 18
+b 0
+b 7
+b 1
+b 3
+b 21
+b 20
+b 18
+b 3
+b 9
+b 8
+b 6
+b 4
+b 1
+b 2
+b 0
+b 5
+b 4
+b 26
+b 14
+b 0
+b 18
+b 13
+b 13
+b 1
+b 2
+b 4
+b 6
+b 3
+b 1
+b 14
+b 2
+b 1
+b 2
+b 5
+b 0
+b 0
+b 3
+b 10
+b 4
+b 3
+b 2
+b 26
+b 2
+b 4
+b 3
+b 29
+b 2
+b 4
+b 0
+b 3
+b 3
+b 1
+b 3
+b 2
+b 1
+b 3
+b 2
+b 3
+b 3
+b 24
+b 23
+b 1
+b 8
+b 9
+b 8
+b 2
+b 4
+b 17
+b 13
+b 3
+b 0
+b 23
+b 2
+b 2
+b 2
+b 20
+b 2
+b 1
+b 27
+b 5
+b 3
+b 2
+b 1
+b 3
+b 0
+b 5
+b 2
+b 13
+b 4
+b 3
+b 2
+b 10
+b 1
+b 0
+b 3
+b 0
+b 7
+b 6
+b 14
+b 10
+b 11
+b 29
+b 0
+b 0
+b 25
+b 14
+b 8
+b 13
+b 2
+b 3
+b 4
+b 1
+b 2
+b 3
+b 2
+b 2
+b 3
+b 1
+b 1
+b 1
+b 21
+b 6
+b 5
+b 4
+b 5
+b 0
+b 0
+b 5
+b 4
+b 5
+b 1
+b 10
+b 12
+b 2
+b 24
+b 1
+b 24
+b 22
+b 1
+b 4
+b 23
+b 8
+b 1
+b 5
+b 5
+b 7
+b 6
+b 16
+b 0
+b 0
+b 1
+b 0
+b 17
+b 3
+b 0
+b 19
+b 21
+b 4
+b 4
+b 4
+b 18
+b 7
+b 13
+b 9
+b 1
+b 14
+b 14
+b 1
+b 3
+b 23
+b 2
+b 0
+b 3
+b 0
+b 1
+b 2
+b 9
+b 22
+b 2
+b 0
+b 9
+b 7
+b 1
+b 3
+b 2
+b 27
+b 22
+b 0
+b 2
+b 23
+b 22
+b 24
+b 3
+b 3
+b 2
+b 12
+b 1
+b 2
+b 8
+b 6
+b 10
+b 9
+b 2
+b 3
+b 1
+b 1
+b 0
+b 1
+b 2
+b 4
+b 1
+b 1
+b 6
+b 13
+b 2
+b 19
+b 4
+b 1
+b 18
+b 6
+b 0
+b 10
+b 2
+b 13
+b 10
+b 1
+b 12
+b 8
+b 1
+b 1
+b 1
+b 3
+b 2
+b 7
+b 2
+b 2
+b 23
+b 3
+b 7
+b 2
+b 0
+b 1
+b 3
+b 2
+b 4
+b 2
+b 8
+b 2
+b 5
+b 4
+b 11
+b 10
+b 1
+b 10
+b 9
+b 3
+b 2
+b 7
+b 6
+b 8
+b 8
+b 1
+b 1
+b 2
+b 0
+b 7
+b 4
+b 2
+b 20
+b 10
+b 5
+b 6
+b 6
+b 1
+b 6
+b 3
+b 14
+b 5
+b 0
+b 7
+b 13
+b 0
+b 7
+b 6
+b 24
+b 15
+b 3
+b 1
+b 20
+b 6
+b 0
+b 15
+b 14
+b 3
+b 2
+b 5
+b 30
+b 0
+b 9
+b 4
+b 23
+b 5
+b 0
+b 2
+b 19
+b 8
+b 16
+b 16
+b 1
+b 7
+b 17
+b 14
+b 1
+b 18
+b 29
+b 2
+b 6
+b 1
+b 17
+b 4
+b 4
+b 1
+b 3
+b 2
+b 11
+b 6
+b 4
+b 1
+b 5
+b 1
+b 0
+b 1
+b 1
+b 21
+b 1
+b 3
+b 13
+b 13
+b 1
+b 12
+b 7
+b 3
+b 0
+b 2
+b 2
+b 4
+b 15
+b 4
+b 19
+b 17
+b 2
+b 5
+b 0
+b 2
+b 15
+b 10
+b 7
+b 6
+b 5
+b 1
+b 13
+b 12
+b 1
+b 12
+b 3
+b 2
+b 30
+b 15
+b 2
+b 16
+b 6
+b 7
+b 8
+b 15
+b 12
+b 1
+b 2
+b 31
+b 1
+b 4
+b 3
+b 23
+b 11
+b 2
+b 0
+b 3
+b 2
+b 16
+b 5
+b 2
+b 13
+b 11
+b 1
+b 5
+b 3
+b 1
+b 3
+b 4
+b 1
+b 2
+b 4
+b 16
+b 13
+b 1
+b 14
+b 1
+b 0
+b 5
+b 4
+b 0
+b 28
+b 9
+b 8
+b 5
+b 4
+b 3
+b 0
+b 1
+b 2
+b 4
+b 2
+b 0
+b 1
+b 0
+b 13
+b 8
+b 6
+b 11
+b 7
+b 9
+b 8
+b 0
+b 22
+b 3
+b 2
+b 1
+b 1
+b 23
+b 2
+b 5
+b 2
+b 1
+b 6
+b 13
+b 2
+b 19
+b 3
+b 9
+b 8
+b 5
+b 11
+b 11
+b 1
+b 10
+b 9
+b 11
+b 8
+b 9
+b 4
+b 18
+b 10
+b 0
+b 16
+b 8
+b 3
+b 2
+b 1
+b 5
+b 4
+b 31
+b 25
+b 31
+b 10
+b 4
+b 9
+b 6
+b 1
+b 5
+b 2
+b 16
+b 16
+b 1
+b 5
+b 15
+b 14
+b 8
+b 8
+b 1
+b 1
+b 1
+b 20
+b 2
+b 5
+b 11
+b 0
+b 8
+b 12
+b 2
+b 3
+b 3
+b 1
+b 1
+b 0
+b 0
+b 3
+b 1
+b 19
+b 16
+b 1
+b 1
+b 5
+b 7
+b 5
+b 1
+b 1
+b 3
+b 0
+b 2
+b 2
+b 0
+b 21
+b 2
+b 3
+b 2
+b 22
+b 13
+b 0
+b 25
+b 24
+b 14
+b 13
+b 1
+b 1
+b 6
+b 3
+b 10
+b 1
+b 1
+b 2
+b 0
+b 14
+b 15
+b 2
+b 13
+b 6
+b 3
+b 2
+b 18
+b 1
+b 0
+b 8
+b 4
+b 24
+b 3
+b 31
+b 0
+b 3
+b 0
+b 6
+b 7
+b 3
+b 7
+b 1
+b 0
+b 1
+b 1
+b 7
+b 2
+b 20
+b 20
+b 8
+b 12
+b 0
+b 8
+b 5
+b 1
+b 1
+b 29
+b 27
+b 1
+b 8
+b 3
+b 2
+b 0
+b 1
+b 3
+b 2
+b 15
+b 3
+b 14
+b 14
+b 1
+b 8
+b 24
+b 13
+b 21
+b 0
+b 0
+b 1
+b 6
+b 16
+b 1
+b 2
+b 3
+b 17
+b 0
+b 1
+b 1
+b 3
+b 20
+b 8
+b 9
+b 8
+b 1
+b 2
+b 1
+b 11
+b 3
+b 0
+b 10
+b 9
+b 1
+b 5
+b 0
+b 6
+b 4
+b 5
+b 0
+b 2
+b 0
+b 16
+b 7
+b 2
+b 1
+b 20
+b 20
+b 1
+b 1
+b 0
+b 11
+b 10
+b 0
+b 21
+b 22
+b 19
+b 2
+b 4
+b 3
+b 0
+b 1
+b 1
+b 2
+b 4
+b 1
+b 12
+b 13
+b 8
+b 17
+b 1
+b 0
+b 25
+b 9
+b 8
+b 1
+b 3
+b 0
+b 1
+b 1
+b 13
+b 9
+b 8
+b 2
+b 0
+b 1
+b 6
+b 1
+b 0
+b 1
+b 2
+b 8
+b 15
+b 14
+b 1
+b 16
+b 5
+b 1
+b 22
+b 7
+b 1
+b 26
+b 4
+b 0
+b 19
+b 5
+b 6
+b 1
+b 15
+b 6
+b 13
+b 2
+b 3
+b 7
+b 28
+b 2
+b 0
+b 11
+b 2
+b 1
+b 11
+b 0
+b 7
+b 18
+b 2
+b 5
+b 3
+b 1
+b 2
+b 2
+b 7
+b 7
+b 25
+b 24
+b 19
+b 1
+b 6
+b 5
+b 1
+b 13
+b 0
+b 23
+b 7
+b 7
+b 1
+b 3
+b 0
+b 14
+b 0
+b 1
+b 4
+b 3
+b 1
+b 1
+b 1
+b 1
+b 11
+b 8
+b 1
+b 3
+b 4
+b 25
+b 4
+b 0
+b 13
+b 3
+b 2
+b 7
+b 6
+b 1
+b 10
+b 30
+b 28
+b 8
+b 1
+b 11
+b 0
+b 4
+b 6
+b 4
+b 3
+b 4
+b 2
+b 9
+b 2
+b 0
+b 0
+b 1
+b 3
+b 26
+b 26
+b 1
+b 11
+b 12
+b 11
+b 1
+b 0
+b 4
+b 1
+b 5
+b 17
+b 8
+b 29
+b 2
+b 14
+b 1
+b 2
+b 16
+b 1
+b 0
+b 19
+b 16
+b 1
+b 18
+b 16
+b 14
+b 1
+b 1
+b 0
+b 1
+b 1
+b 2
+b 0
+b 1
+b 3
+b 13
+b 6
+b 5
+b 1
+b 17
+b 16
+b 1
+b 16
+b 16
+b 1
+b 11
+b 1
+b 24
+b 11
+b 19
+b 5
+b 3
+b 1
+b 10
+b 12
+b 1
+b 11
+b 11
+b 1
+b 10
+b 10
+b 1
+b 5
+b 2
+b 1
+b 4
+b 2
+b 1
+b 21
+b 3
+b 2
+b 0
+b 24
+b 24
+b 1
+b 0
+b 1
+b 15
+b 13
+b 1
+b 0
+b 1
+b 2
+b 0
+b 1
+b 13
+b 3
+b 2
+b 17
+b 6
+b 18
+b 13
+b 12
+b 8
+b 3
+b 2
+b 9
+b 8
+b 5
+b 0
+b 0
+b 0
+b 1
+b 4
+b 6
+b 1
+b 1
+b 2
+b 8
+b 4
+b 1
+b 1
+b 5
+b 4
+b 3
+b 2
+b 5
+b 4
+b 2
+b 9
+b 10
+b 9
+b 2
+b 3
+b 4
+b 20
+b 18
+b 1
+b 18
+b 19
+b 8
+b 8
+b 1
+b 11
+b 11
+b 1
+b 3
+b 28
+b 21
+b 17
+b 15
+b 3
+b 12
+b 1
+b 2
+b 0
+b 2
+b 7
+b 9
+b 9
+b 1
+b 1
+b 3
+b 25
+b 13
+b 12
+b 26
+b 23
+b 1
+b 2
+b 14
+b 3
+b 4
+b 3
+b 2
+b 2
+b 13
+b 12
+b 1
+b 12
+b 0
+b 12
+b 0
+b 20
+b 10
+b 11
+b 10
+b 1
+b 10
+b 16
+b 3
+b 7
+b 5
+b 6
+b 4
+b 4
+b 1
+b 0
+b 11
+b 10
+b 11
+b 10
+b 4
+b 1
+b 1
+b 2
+b 18
+b 2
+b 0
+b 1
+b 0
+b 3
+b 0
+b 1
+b 2
+b 4
+b 2
+b 0
+b 1
+b 0
+b 13
+b 15
+b 7
+b 5
+b 1
+b 0
+b 2
+b 21
+b 3
+b 0
+b 17
+b 18
+b 17
+b 1
+b 3
+b 6
+b 19
+b 4
+b 28
+b 26
+b 1
+b 7
+b 4
+b 1
+b 2
+b 4
+b 2
+b 1
+b 0
+b 11
+b 10
+b 1
+b 10
+b 9
+b 1
+b 17
+b 9
+b 12
+b 9
+b 1
+b 11
+b 7
+b 8
+b 6
+b 6
+b 1
+b 7
+b 7
+b 1
+b 3
+b 4
+b 1
+b 2
+b 3
+b 19
+b 4
+b 6
+b 0
+b 5
+b 7
+b 5
+b 1
+b 6
+b 21
+b 16
+b 1
+b 1
+b 2
+b 11
+b 8
+b 1
+b 3
+b 23
+b 2
+b 3
+b 3
+b 0
+b 1
+b 2
+b 0
+b 1
+b 10
+b 1
+b 3
+b 3
+b 5
+b 1
+b 7
+b 19
+b 10
+b 7
+b 4
+b 1
+b 1
+b 11
+b 1
+b 0
+b 16
+b 15
+b 1
+b 3
+b 2
+b 1
+b 5
+b 6
+b 5
+b 5
+b 1
+b 6
+b 16
+b 0
+b 0
+b 1
+b 0
+b 1
+b 1
+b 1
+b 0
+b 19
+b 3
+b 3
+b 1
+b 0
+b 0
+b 1
+b 7
+b 2
+b 3
+b 2
+b 4
+b 10
+b 10
+b 8
+b 3
+b 8
+b 6
+b 1
+b 2
+b 4
+b 7
+b 6
+b 15
+b 14
+b 1
+b 0
+b 14
+b 0
+b 15
+b 16
+b 7
+b 1
+b 3
+b 3
+b 0
+b 1
+b 2
+b 3
+b 0
+b 0
+b 4
+b 3
+b 18
+b 16
+b 1
+b 4
+b 5
+b 4
+b 1
+b 4
+b 7
+b 7
+b 1
+b 4
+b 5
+b 4
+b 1
+b 4
+b 27
+b 25
+b 1
+b 3
+b 2
+b 28
+b 1
+b 3
+b 0
+b 2
+b 4
+b 2
+b 1
+b 16
+b 7
+b 2
+b 5
+b 8
+b 0
+b 23
+b 15
+b 24
+b 0
+b 11
+b 10
+b 12
+b 1
+b 6
+b 5
+b 1
+b 8
+b 10
+b 3
+b 4
+b 1
+b 3
+b 3
+b 2
+b 1
+b 1
+b 4
+b 23
+b 2
+b 12
+b 4
+b 2
+b 23
+b 6
+b 3
+b 0
+b 2
+b 12
+b 1
+b 7
+b 1
+b 13
+b 13
+b 1
+b 0
+b 1
+b 0
+b 26
+b 25
+b 1
+b 2
+b 3
+b 2
+b 9
+b 7
+b 1
+b 6
+b 0
+b 15
+b 7
+b 3
+b 2
+b 8
+b 9
+b 8
+b 2
+b 4
+b 0
+b 7
+b 3
+b 0
+b 21
+b 7
+b 3
+b 12
+b 5
+b 7
+b 6
+b 1
+b 6
+b 3
+b 2
+b 26
+b 27
+b 26
+b 1
+b 4
+b 2
+b 1
+b 26
+b 3
+b 5
+b 4
+b 6
+b 7
+b 4
+b 15
+b 15
+b 1
+b 5
+b 1
+b 3
+b 0
+b 2
+b 13
+b 9
+b 1
+b 13
+b 7
+b 2
+b 3
+b 0
+b 9
+b 8
+b 9
+b 5
+b 4
+b 10
+b 10
+b 1
+b 15
+b 13
+b 1
+b 9
+b 2
+b 7
+b 0
+b 0
+b 21
+b 1
+b 7
+b 5
+b 1
+b 6
+b 25
+b 24
+b 1
+b 7
+b 4
+b 1
+b 11
+b 10
+b 9
+b 9
+b 1
+b 10
+b 27
+b 26
+b 18
+b 0
+b 1
+b 6
+b 2
+b 9
+b 15
+b 7
+b 1
+b 0
+b 14
+b 11
+b 1
+b 1
+b 0
+b 14
+b 2
+b 8
+b 3
+b 1
+b 0
+b 1
+b 0
+b 1
+b 0
+b 1
+b 1
+b 1
+b 1
+b 5
+b 3
+b 1
+b 4
+b 17
+b 12
+b 2
+b 18
+b 1
+b 7
+b 3
+b 1
+b 0
+b 1
+b 0
+b 1
+b 5
+b 2
+b 3
+b 2
+b 12
+b 6
+b 7
+b 5
+b 10
+b 8
+b 3
+b 2
+b 1
+b 2
+b 17
+b 15
+b 1
+b 4
+b 1
+b 1
+b 1
+b 2
+b 0
+b 23
+b 23
+b 24
+b 5
+b 1
+b 2
+b 10
+b 5
+b 2
+b 5
+b 5
+b 2
+b 8
+b 7
+b 1
+b 2
+b 18
+b 21
+b 0
+b 21
+b 20
+b 12
+b 1
+b 0
+b 11
+b 10
+b 1
+b 11
+b 0
+b 12
+b 8
+b 17
+b 1
+b 5
+b 1
+b 9
+b 8
+b 9
+b 8
+b 7
+b 5
+b 6
+b 4
+b 4
+b 3
+b 2
+b 8
+b 10
+b 4
+b 5
+b 2
+b 1
+b 4
+b 1
+b 0
+b 0
+b 1
+b 1
+b 5
+b 0
+b 5
+b 1
+b 0
+b 11
+b 1
+b 9
+b 4
+b 4
+b 1
+b 11
+b 12
+b 11
+b 2
+b 4
+b 4
+b 4
+b 19
+b 18
+b 4
+b 4
+b 1
+b 3
+b 4
+b 5
+b 4
+b 2
+b 2
+b 0
+b 13
+b 3
+b 4
+b 1
+b 25
+b 24
+b 1
+b 4
+b 4
+b 4
+b 1
+b 1
+b 3
+b 4
+b 3
+b 2
+b 2
+b 5
+b 5
+b 3
+b 0
+b 6
+b 4
+b 1
+b 2
+b 5
+b 2
+b 8
+b 0
+b 3
+b 16
+b 16
+b 1
+b 1
+b 2
+b 9
+b 8
+b 4
+b 4
+b 15
+b 14
+b 1
+b 16
+b 15
+b 1
+b 13
+b 4
+b 2
+b 21
+b 19
+b 1
+b 13
+b 6
+b 21
+b 21
+b 1
+b 12
+b 0
+b 12
+b 2
+b 3
+b 1
+b 1
+b 2
+b 0
+b 1
+b 2
+b 2
+b 13
+b 12
+b 24
+b 24
+b 1
+b 1
+b 0
+b 20
+b 1
+b 2
+b 3
+b 4
+b 1
+b 2
+b 1
+b 10
+b 11
+b 2
+b 0
+b 1
+b 0
+b 16
+b 15
+b 1
+b 21
+b 23
+b 3
+b 5
+b 17
+b 15
+b 1
+b 2
+b 0
+b 1
+b 0
+b 1
+b 5
+b 4
+b 3
+b 9
+b 2
+b 1
+b 5
+b 4
+b 24
+b 23
+b 1
+b 2
+b 0
+b 1
+b 9
+b 10
+b 14
+b 3
+b 7
+b 6
+b 6
+b 4
+b 1
+b 3
+b 1
+b 1
+b 1
+b 2
+b 0
+b 1
+b 9
+b 8
+b 1
+b 8
+b 31
+b 20
+b 1
+b 0
+b 20
+b 21
+b 19
+b 1
+b 3
+b 7
+b 4
+b 1
+b 1
+b 6
+b 4
+b 1
+b 1
+b 11
+b 23
+b 25
+b 10
+b 1
+b 1
+b 3
+b 15
+b 13
+b 1
+b 1
+b 20
+b 6
+b 0
+b 1
+b 16
+b 0
+b 1
+b 0
+b 3
+b 5
+b 22
+b 24
+b 22
+b 1
+b 3
+b 5
+b 6
+b 3
+b 0
+b 1
+b 0
+b 25
+b 27
+b 25
+b 3
+b 14
+b 0
+b 5
+b 0
+b 0
+b 3
+b 10
+b 1
+b 4
+b 1
+b 1
+b 2
+b 5
+b 6
+b 3
+b 2
+b 4
+b 1
+b 1
+b 1
+b 1
+b 6
+b 3
+b 1
+b 5
+b 2
+b 1
+b 0
+b 25
+b 27
+b 11
+b 1
+b 0
+b 1
+b 6
+b 7
+b 10
+b 1
+b 1
+b 7
+b 4
+b 5
+b 4
+b 1
+b 1
+b 2
+b 7
+b 6
+b 15
+b 1
+b 1
+b 1
+b 1
+b 3
+b 15
+b 6
+b 2
+b 0
+b 2
+b 4
+b 0
+b 1
+b 0
+b 2
+b 10
+b 9
+b 1
+b 1
+b 3
+b 0
+b 29
+b 24
+b 16
+b 0
+b 1
+b 6
+b 26
+b 1
+b 10
+b 3
+b 2
+b 2
+b 1
+b 3
+b 27
+b 14
+b 15
+b 3
+b 4
+b 7
+b 1
+b 21
+b 4
+b 22
+b 5
+b 3
+b 1
+b 3
+b 3
+b 3
+b 2
+b 3
+b 3
+b 2
+b 10
+b 9
+b 1
+b 19
+b 0
+b 17
+b 8
+b 9
+b 7
+b 1
+b 0
+b 3
+b 2
+b 12
+b 2
+b 1
+b 2
+b 3
+b 2
+b 4
+b 1
+b 16
+b 15
+b 1
+b 4
+b 5
+b 2
+b 2
+b 8
+b 0
+b 1
+b 1
+b 1
+b 0
+b 0
+b 4
+b 1
+b 9
+b 8
+b 1
+b 1
+b 3
+b 2
+b 0
+b 2
+b 5
+b 3
+b 0
+b 2
+b 16
+b 4
+b 4
+b 1
+b 0
+b 2
+b 0
+b 1
+b 28
+b 10
+b 9
+b 0
+b 3
+b 7
+b 29
+b 8
+b 21
+b 25
+b 1
+b 8
+b 0
+b 1
+b 6
+b 5
+b 1
+b 2
+b 5
+b 23
+b 24
+b 14
+b 13
+b 12
+b 14
+b 3
+b 9
+b 18
+b 7
+b 6
+b 7
+b 7
+b 6
+b 4
+b 8
+b 9
+b 6
+b 1
+b 0
+b 7
+b 4
+b 3
+b 2
+b 1
+b 2
+b 12
+b 1
+b 16
+b 0
+b 23
+b 22
+b 9
+b 9
+b 1
+b 3
+b 11
+b 1
+b 0
+b 17
+b 16
+b 7
+b 5
+b 1
+b 11
+b 12
+b 11
+b 1
+b 0
+b 1
+b 21
+b 18
+b 1
+b 6
+b 7
+b 4
+b 2
+b 5
+b 6
+b 13
+b 6
+b 0
+b 17
+b 4
+b 3
+b 3
+b 1
+b 1
+b 11
+b 8
+b 1
+b 3
+b 1
+b 5
+b 3
+b 1
+b 7
+b 3
+b 2
+b 8
+b 6
+b 20
+b 18
+b 1
+b 0
+b 2
+b 0
+b 1
+b 9
+b 7
+b 8
+b 9
+b 3
+b 5
+b 5
+b 1
+b 4
+b 5
+b 4
+b 2
+b 2
+b 3
+b 2
+b 1
+b 2
+b 3
+b 4
+b 1
+b 19
+b 4
+b 0
+b 1
+b 5
+b 4
+b 1
+b 2
+b 1
+b 24
+b 26
+b 16
+b 3
+b 3
+b 1
+b 1
+b 2
+b 1
+b 2
+b 3
+b 11
+b 1
+b 0
+b 13
+b 12
+b 1
+b 12
+b 17
+b 0
+b 4
+b 2
+b 1
+b 9
+b 9
+b 1
+b 0
+b 0
+b 6
+b 1
+b 1
+b 9
+b 8
+b 7
+b 6
+b 1
+b 6
+b 15
+b 0
+b 0
+b 15
+b 7
+b 25
+b 13
+b 15
+b 0
+b 2
+b 2
+b 1
+b 1
+b 0
+b 0
+b 1
+b 0
+b 0
+b 0
+b 9
+b 8
+b 9
+b 7
+b 7
+b 5
+b 1
+b 6
+b 16
+b 13
+b 1
+b 5
+b 1
+b 2
+b 0
+b 22
+b 2
+b 2
+b 17
+b 15
+b 1
+b 4
+b 21
+b 20
+b 5
+b 4
+b 2
+b 1
+b 9
+b 8
+b 10
+b 4
+b 20
+b 1
+b 0
+b 1
+b 1
+b 1
+b 0
+b 5
+b 4
+b 5
+b 5
+b 23
+b 19
+b 7
+b 4
+b 1
+b 4
+b 5
+b 2
+b 2
+b 1
+b 0
+b 1
+b 2
+b 8
+b 3
+b 13
+b 3
+b 3
+b 4
+b 13
+b 5
+b 0
+b 6
+b 7
+b 4
+b 1
+b 0
+b 27
+b 26
+b 2
+b 3
+b 2
+b 1
+b 0
+b 13
+b 5
+b 0
+b 0
+b 4
+b 6
+b 6
+b 0
+b 10
+b 6
+b 10
+b 4
+b 17
+b 18
+b 15
+b 1
+b 20
+b 3
+b 3
+b 1
+b 1
+b 1
+b 0
+b 5
+b 4
+b 4
+b 8
+b 5
+b 7
+b 11
+b 11
+b 1
+b 2
+b 3
+b 2
+b 2
+b 1
+b 6
+b 3
+b 4
+b 0
+b 3
+b 2
+b 18
+b 8
+b 9
+b 5
+b 1
+b 3
+b 2
+b 17
+b 17
+b 1
+b 4
+b 1
+b 16
+b 18
+b 19
+b 18
+b 1
+b 3
+b 7
+b 0
+b 1
+b 0
+b 3
+b 3
+b 2
+b 1
+b 0
+b 3
+b 1
+b 5
+b 4
+b 7
+b 6
+b 3
+b 3
+b 1
+b 2
+b 1
+b 0
+b 1
+b 0
+b 1
+b 12
+b 10
+b 1
+b 8
+b 0
+b 1
+b 0
+b 2
+b 1
+b 2
+b 6
+b 6
+b 1
+b 7
+b 3
+b 4
+b 0
+b 5
+b 4
+b 10
+b 1
+b 3
+b 1
+b 1
+b 1
+b 2
+b 0
+b 1
+b 0
+b 2
+b 13
+b 3
+b 26
+b 17
+b 18
+b 16
+b 15
+b 16
+b 12
+b 13
+b 9
+b 17
+b 11
+b 13
+b 0
+b 7
+b 6
+b 4
+b 2
+b 0
+b 1
+b 11
+b 6
+b 8
+b 4
+b 5
+b 3
+b 0
+b 6
+b 7
+b 9
+b 6
+b 2
+b 4
+b 6
+b 3
+b 3
+b 1
+b 25
+b 24
+b 18
+b 10
+b 8
+b 1
+b 6
+b 0
+b 3
+b 2
+b 9
+b 1
+b 13
+b 12
+b 10
+b 5
+b 3
+b 7
+b 0
+b 10
+b 2
+b 6
+b 25
+b 4
+b 26
+b 4
+b 0
+b 3
+b 5
+b 1
+b 0
+b 16
+b 2
+b 2
+b 1
+b 2
+b 9
+b 0
+b 0
+b 1
+b 2
+b 30
+b 28
+b 1
+b 10
+b 0
+b 0
+b 15
+b 14
+b 2
+b 2
+b 1
+b 1
+b 1
+b 2
+b 2
+b 23
+b 1
+b 1
+b 3
+b 2
+b 1
+b 1
+b 3
+b 1
+b 1
+b 0
+b 1
+b 0
+b 1
+b 0
+b 0
+b 1
+b 1
+b 2
+b 27
+b 26
+b 14
+b 0
+b 1
+b 1
+b 0
+b 4
+b 7
+b 6
+b 4
+b 1
+b 7
+b 6
+b 0
+b 5
+b 0
+b 16
+b 0
+b 8
+b 8
+b 1
+b 4
+b 2
+b 1
+b 19
+b 20
+b 25
+b 26
+b 19
+b 19
+b 20
+b 7
+b 7
+b 1
+b 0
+b 0
+b 8
+b 5
+b 2
+b 2
+b 1
+b 12
+b 3
+b 3
+b 1
+b 4
+b 5
+b 7
+b 12
+b 13
+b 12
+b 5
+b 3
+b 11
+b 2
+b 1
+b 4
+b 2
+b 3
+b 3
+b 0
+b 0
+b 7
+b 5
+b 6
+b 3
+b 2
+b 10
+b 3
+b 10
+b 9
+b 1
+b 9
+b 0
+b 0
+b 5
+b 5
+b 0
+b 7
+b 0
+b 4
+b 1
+b 1
+b 2
+b 22
+b 10
+b 20
+b 21
+b 18
+b 2
+b 22
+b 7
+b 18
+b 0
+b 4
+b 3
+b 4
+b 1
+b 2
+b 2
+b 1
+b 9
+b 3
+b 3
+b 0
+b 1
+b 2
+b 5
+b 4
+b 7
+b 7
+b 1
+b 6
+b 11
+b 11
+b 1
+b 4
+b 5
+b 4
+b 1
+b 1
+b 3
+b 29
+b 27
+b 1
+b 2
+b 2
+b 4
+b 0
+b 1
+b 3
+b 2
+b 3
+b 2
+b 9
+b 8
+b 5
+b 1
+b 3
+b 2
+b 3
+b 3
+b 25
+b 24
+b 11
+b 1
+b 11
+b 3
+b 0
+b 26
+b 1
+b 7
+b 5
+b 2
+b 1
+b 2
+b 3
+b 7
+b 2
+b 1
+b 4
+b 8
+b 8
+b 1
+b 5
+b 4
+b 19
+b 1
+b 1
+b 3
+b 1
+b 1
+b 0
+b 1
+b 1
+b 2
+b 11
+b 7
+b 19
+b 25
+b 23
+b 1
+b 18
+b 1
+b 5
+b 6
+b 5
+b 3
+b 1
+b 2
+b 0
+b 1
+b 2
+b 4
+b 2
+b 3
+b 2
+b 27
+b 30
+b 27
+b 1
+b 3
+b 2
+b 14
+b 12
+b 1
+b 4
+b 0
+b 8
+b 6
+b 1
+b 9
+b 3
+b 0
+b 1
+b 2
+b 0
+b 1
+b 5
+b 4
+b 8
+b 4
+b 3
+b 2
+b 6
+b 5
+b 2
+b 24
+b 2
+b 26
+b 20
+b 2
+b 3
+b 0
+b 0
+b 3
+b 3
+b 12
+b 1
+b 2
+b 17
+b 17
+b 1
+b 16
+b 16
+b 1
+b 4
+b 1
+b 1
+b 3
+b 5
+b 0
+b 1
+b 7
+b 5
+b 2
+b 3
+b 16
+b 16
+b 1
+b 1
+b 1
+b 13
+b 4
+b 0
+b 1
+b 0
+b 1
+b 15
+b 0
+b 2
+b 20
+b 6
+b 9
+b 1
+b 0
+b 28
+b 17
+b 7
+b 23
+b 0
+b 3
+b 3
+b 9
+b 8
+b 13
+b 2
+b 28
+b 2
+b 15
+b 16
+b 9
+b 10
+b 25
+b 7
+b 2
+b 14
+b 5
+b 4
+b 5
+b 4
+b 1
+b 4
+b 12
+b 9
+b 1
+b 12
+b 14
+b 0
+b 1
+b 0
+b 2
+b 0
+b 11
+b 6
+b 25
+b 2
+b 0
+b 1
+b 5
+b 2
+b 1
+b 6
+b 8
+b 3
+b 2
+b 9
+b 7
+b 8
+b 6
+b 2
+b 3
+b 5
+b 1
+b 1
+b 1
+b 3
+b 4
+b 1
+b 3
+b 0
+b 19
+b 19
+b 1
+b 4
+b 5
+b 4
+b 2
+b 4
+b 1
+b 1
+b 22
+b 2
+b 23
+b 22
+b 5
+b 14
+b 0
+b 10
+b 15
+b 13
+b 0
+b 11
+b 7
+b 3
+b 4
+b 4
+b 2
+b 1
+b 1
+b 2
+b 0
+b 1
+b 0
+b 0
+b 1
+b 1
+b 1
+b 6
+b 1
+b 23
+b 4
+b 1
+b 17
+b 16
+b 1
+b 2
+b 0
+b 21
+b 22
+b 15
+b 15
+b 1
+b 19
+b 21
+b 3
+b 4
+b 1
+b 3
+b 0
+b 3
+b 10
+b 10
+b 1
+b 4
+b 12
+b 6
+b 18
+b 21
+b 22
+b 19
+b 2
+b 6
+b 3
+b 1
+b 0
+b 2
+b 3
+b 2
+b 8
+b 4
+b 12
+b 10
+b 1
+b 5
+b 0
+b 0
+b 1
+b 3
+b 0
+b 1
+b 4
+b 3
+b 9
+b 19
+b 19
+b 1
+b 10
+b 11
+b 8
+b 2
+b 22
+b 10
+b 25
+b 9
+b 7
+b 8
+b 2
+b 4
+b 2
+b 1
+b 3
+b 3
+b 1
+b 1
+b 7
+b 6
+b 12
+b 0
+b 3
+b 1
+b 1
+b 2
+b 18
+b 19
+b 18
+b 2
+b 5
+b 0
+b 0
+b 10
+b 5
+b 6
+b 14
+b 5
+b 26
+b 11
+b 12
+b 1
+b 0
+b 1
+b 0
+b 21
+b 19
+b 1
+b 8
+b 12
+b 14
+b 14
+b 6
+b 7
+b 0
+b 17
+b 8
+b 5
+b 4
+b 3
+b 2
+b 7
+b 5
+b 1
+b 6
+b 13
+b 10
+b 1
+b 2
+b 0
+b 15
+b 13
+b 14
+b 2
+b 15
+b 14
+b 1
+b 1
+b 0
+b 23
+b 7
+b 6
+b 6
+b 5
+b 1
+b 4
+b 13
+b 10
+b 1
+b 1
+b 3
+b 2
+b 7
+b 21
+b 1
+b 3
+b 0
+b 2
+b 9
+b 8
+b 1
+b 8
+b 5
+b 4
+b 1
+b 2
+b 2
+b 9
+b 1
+b 3
+b 27
+b 25
+b 1
+b 21
+b 0
+b 21
+b 3
+b 2
+b 22
+b 1
+b 0
+b 2
+b 0
+b 5
+b 3
+b 3
+b 2
+b 1
+b 2
+b 5
+b 4
+b 1
+b 17
+b 9
+b 10
+b 1
+b 0
+b 5
+b 2
+b 1
+b 7
+b 6
+b 5
+b 3
+b 0
+b 3
+b 1
+b 20
+b 10
+b 7
+b 3
+b 4
+b 3
+b 1
+b 0
+b 2
+b 0
+b 0
+b 1
+b 14
+b 2
+b 9
+b 8
+b 1
+b 8
+b 15
+b 16
+b 1
+b 1
+b 1
+b 0
+b 4
+b 1
+b 5
+b 3
+b 1
+b 0
+b 1
+b 2
+b 3
+b 1
+b 1
+b 2
+b 20
+b 11
+b 12
+b 19
+b 20
+b 3
+b 2
+b 0
+b 3
+b 4
+b 9
+b 2
+b 3
+b 1
+b 7
+b 6
+b 13
+b 12
+b 1
+b 14
+b 6
+b 0
+b 5
+b 4
+b 7
+b 10
+b 11
+b 10
+b 1
+b 1
+b 0
+b 1
+b 0
+b 0
+b 1
+b 5
+b 2
+b 7
+b 9
+b 7
+b 1
+b 9
+b 5
+b 6
+b 8
+b 9
+b 5
+b 2
+b 12
+b 22
+b 1
+b 3
+b 9
+b 9
+b 6
+b 3
+b 4
+b 3
+b 1
+b 5
+b 0
+b 0
+b 1
+b 1
+b 0
+b 19
+b 4
+b 6
+b 3
+b 1
+b 0
+b 2
+b 11
+b 7
+b 19
+b 17
+b 1
+b 7
+b 8
+b 5
+b 2
+b 2
+b 11
+b 12
+b 17
+b 17
+b 1
+b 6
+b 0
+b 9
+b 10
+b 11
+b 2
+b 0
+b 2
+b 1
+b 2
+b 0
+b 1
+b 0
+b 0
+b 5
+b 4
+b 3
+b 2
+b 1
+b 2
+b 11
+b 10
+b 8
+b 10
+b 12
+b 2
+b 27
+b 3
+b 2
+b 3
+b 2
+b 1
+b 0
+b 2
+b 3
+b 0
+b 2
+b 3
+b 2
+b 1
+b 0
+b 2
+b 18
+b 17
+b 1
+b 5
+b 4
+b 26
+b 6
+b 21
+b 21
+b 1
+b 9
+b 10
+b 9
+b 2
+b 6
+b 6
+b 1
+b 8
+b 2
+b 4
+b 0
+b 1
+b 0
+b 1
+b 2
+b 20
+b 20
+b 1
+b 3
+b 2
+b 3
+b 4
+b 2
+b 1
+b 2
+b 1
+b 2
+b 1
+b 0
+b 18
+b 9
+b 2
+b 4
+b 2
+b 1
+b 2
+b 19
+b 15
+b 12
+b 1
+b 5
+b 4
+b 15
+b 4
+b 1
+b 2
+b 3
+b 2
+b 12
+b 2
+b 1
+b 1
+b 0
+b 21
+b 5
+b 6
+b 0
+b 0
+b 1
+b 1
+b 3
+b 3
+b 1
+b 1
+b 2
+b 3
+b 0
+b 0
+b 21
+b 15
+b 14
+b 4
+b 23
+b 21
+b 1
+b 3
+b 17
+b 1
+b 3
+b 2
+b 22
+b 21
+b 1
+b 9
+b 8
+b 1
+b 1
+b 1
+b 0
+b 1
+b 0
+b 1
+b 0
+b 2
+b 1
+b 0
+b 11
+b 2
+b 0
+b 1
+b 0
+b 11
+b 11
+b 1
+b 10
+b 5
+b 3
+b 0
+b 6
+b 3
+b 1
+b 10
+b 12
+b 10
+b 3
+b 0
+b 21
+b 22
+b 19
+b 2
+b 4
+b 2
+b 1
+b 7
+b 6
+b 8
+b 2
+b 15
+b 14
+b 4
+b 13
+b 12
+b 15
+b 16
+b 16
+b 1
+b 3
+b 3
+b 0
+b 6
+b 6
+b 1
+b 8
+b 10
+b 1
+b 3
+b 14
+b 2
+b 12
+b 2
+b 2
+b 12
+b 8
+b 8
+b 1
+b 16
+b 0
+b 11
+b 7
+b 5
+b 19
+b 18
+b 11
+b 12
+b 9
+b 2
+b 5
+b 0
+b 1
+b 0
+b 1
+b 15
+b 16
+b 15
+b 1
+b 10
+b 10
+b 1
+b 8
+b 13
+b 11
+b 1
+b 9
+b 11
+b 3
+b 2
+b 3
+b 24
+b 25
+b 0
+b 1
+b 4
+b 4
+b 5
+b 1
+b 4
+b 2
+b 1
+b 3
+b 4
+b 3
+b 2
+b 2
+b 2
+b 1
+b 6
+b 1
+b 17
+b 5
+b 5
+b 3
+b 1
+b 3
+b 5
+b 1
+b 1
+b 10
+b 1
+b 0
+b 13
+b 10
+b 18
+b 5
+b 4
+b 11
+b 10
+b 7
+b 1
+b 1
+b 2
+b 2
+b 1
+b 0
+b 0
+b 1
+b 13
+b 10
+b 0
+b 11
+b 10
+b 1
+b 4
+b 9
+b 9
+b 1
+b 8
+b 24
+b 22
+b 1
+b 11
+b 1
+b 2
+b 0
+b 3
+b 4
+b 22
+b 23
+b 4
+b 2
+b 1
+b 0
+b 1
+b 0
+b 1
+b 1
+b 4
+b 6
+b 2
+b 3
+b 4
+b 5
+b 4
+b 2
+b 3
+b 9
+b 10
+b 2
+b 0
+b 15
+b 6
+b 7
+b 4
+b 9
+b 7
+b 1
+b 7
+b 4
+b 5
+b 3
+b 1
+b 2
+b 7
+b 6
+b 1
+b 2
+b 0
+b 1
+b 1
+b 3
+b 2
+b 0
+b 3
+b 6
+b 7
+b 11
+b 6
+b 2
+b 7
+b 1
+b 1
+b 1
+b 1
+b 3
+b 6
+b 7
+b 6
+b 3
+b 2
+b 3
+b 0
+b 21
+b 1
+b 1
+b 2
+b 1
+b 2
+b 0
+b 0
+b 11
+b 2
+b 3
+b 0
+b 1
+b 3
+b 23
+b 2
+b 1
+b 0
+b 23
+b 3
+b 2
+b 3
+b 2
+b 3
+b 4
+b 5
+b 4
+b 1
+b 4
+b 3
+b 4
+b 15
+b 3
+b 2
+b 1
+b 3
+b 4
+b 4
+b 6
+b 7
+b 6
+b 25
+b 23
+b 4
+b 3
+b 2
+b 21
+b 16
+b 17
+b 17
+b 1
+b 8
+b 1
+b 0
+b 1
+b 3
+b 13
+b 1
+b 3
+b 2
+b 10
+b 7
+b 1
+b 3
+b 4
+b 3
+b 2
+b 4
+b 3
+b 1
+b 5
+b 4
+b 11
+b 12
+b 11
+b 1
+b 16
+b 16
+b 1
+b 9
+b 1
+b 3
+b 0
+b 2
+b 0
+b 1
+b 4
+b 1
+b 1
+b 1
+b 2
+b 0
+b 1
+b 0
+b 0
+b 1
+b 2
+b 0
+b 1
+b 11
+b 12
+b 10
+b 1
+b 3
+b 5
+b 5
+b 3
+b 1
+b 16
+b 16
+b 1
+b 9
+b 7
+b 8
+b 7
+b 1
+b 11
+b 8
+b 1
+b 12
+b 10
+b 1
+b 9
+b 3
+b 0
+b 1
+b 5
+b 5
+b 1
+b 5
+b 5
+b 7
+b 4
+b 6
+b 23
+b 21
+b 1
+b 1
+b 0
+b 5
+b 3
+b 1
+b 1
+b 21
+b 18
+b 1
+b 4
+b 1
+b 1
+b 23
+b 20
+b 7
+b 8
+b 5
+b 2
+b 0
+b 2
+b 3
+b 0
+b 0
+b 1
+b 6
+b 7
+b 4
+b 2
+b 4
+b 1
+b 1
+b 13
+b 14
+b 5
+b 4
+b 5
+b 6
+b 2
+b 4
+b 0
+b 5
+b 3
+b 1
+b 4
+b 3
+b 3
+b 1
+b 9
+b 1
+b 2
+b 0
+b 1
+b 0
+b 13
+b 13
+b 1
+b 8
+b 1
+b 15
+b 9
+b 10
+b 8
+b 1
+b 4
+b 2
+b 1
+b 5
+b 2
+b 0
+b 1
+b 5
+b 4
+b 22
+b 24
+b 1
+b 0
+b 2
+b 21
+b 18
+b 12
+b 14
+b 12
+b 1
+b 3
+b 4
+b 1
+b 4
+b 10
+b 15
+b 7
+b 6
+b 8
+b 15
+b 14
+b 17
+b 17
+b 1
+b 7
+b 8
+b 7
+b 1
+b 1
+b 2
+b 21
+b 1
+b 0
+b 14
+b 15
+b 13
+b 1
+b 7
+b 7
+b 1
+b 4
+b 3
+b 2
+b 7
+b 5
+b 2
+b 1
+b 1
+b 13
+b 10
+b 1
+b 12
+b 1
+b 20
+b 0
+b 3
+b 3
+b 2
+b 1
+b 18
+b 15
+b 17
+b 7
+b 8
+b 14
+b 7
+b 1
+b 7
+b 5
+b 1
+b 2
+b 3
+b 0
+b 21
+b 22
+b 10
+b 1
+b 0
+b 1
+b 5
+b 7
+b 5
+b 5
+b 1
+b 4
+b 4
+b 1
+b 24
+b 5
+b 20
+b 20
+b 1
+b 3
+b 2
+b 3
+b 2
+b 20
+b 9
+b 3
+b 3
+b 1
+b 2
+b 7
+b 0
+b 0
+b 1
+b 6
+b 14
+b 4
+b 10
+b 5
+b 0
+b 1
+b 7
+b 7
+b 1
+b 2
+b 3
+b 1
+b 1
+b 2
+b 1
+b 27
+b 7
+b 6
+b 15
+b 14
+b 24
+b 2
+b 3
+b 16
+b 17
+b 2
+b 2
+b 12
+b 2
+b 4
+b 5
+b 3
+b 1
+b 1
+b 0
+b 0
+b 8
+b 27
+b 28
+b 9
+b 1
+b 0
+b 8
+b 7
+b 8
+b 4
+b 3
+b 22
+b 25
+b 18
+b 11
+b 11
+b 1
+b 2
+b 3
+b 0
+b 2
+b 2
+b 3
+b 0
+b 2
+b 0
+b 1
+b 9
+b 22
+b 3
+b 22
+b 1
+b 0
+b 4
+b 5
+b 4
+b 1
+b 4
+b 3
+b 2
+b 16
+b 2
+b 17
+b 16
+b 1
+b 1
+b 2
+b 1
+b 3
+b 5
+b 4
+b 9
+b 1
+b 2
+b 21
+b 22
+b 8
+b 9
+b 8
+b 2
+b 4
+b 2
+b 2
+b 1
+b 3
+b 15
+b 3
+b 22
+b 23
+b 3
+b 7
+b 5
+b 1
+b 5
+b 0
+b 23
+b 5
+b 6
+b 5
+b 1
+b 2
+b 2
+b 1
+b 1
+b 11
+b 0
+b 0
+b 1
+b 16
+b 12
+b 12
+b 1
+b 9
+b 9
+b 1
+b 4
+b 5
+b 4
+b 2
+b 4
+b 4
+b 1
+b 17
+b 14
+b 11
+b 15
+b 13
+b 1
+b 10
+b 1
+b 15
+b 16
+b 0
+b 1
+b 3
+b 0
+b 3
+b 0
+b 2
+b 3
+b 2
+b 19
+b 3
+b 4
+b 7
+b 14
+b 2
+b 10
+b 11
+b 10
+b 1
+b 7
+b 1
+b 0
+b 1
+b 0
+b 11
+b 9
+b 17
+b 12
+b 3
+b 2
+b 24
+b 0
+b 0
+b 28
+b 29
+b 11
+b 12
+b 13
+b 2
+b 5
+b 2
+b 3
+b 2
+b 15
+b 15
+b 1
+b 16
+b 1
+b 3
+b 2
+b 12
+b 12
+b 24
+b 6
+b 4
+b 1
+b 1
+b 0
+b 8
+b 15
+b 14
+b 18
+b 4
+b 3
+b 1
+b 27
+b 15
+b 4
+b 20
+b 1
+b 0
+b 19
+b 20
+b 15
+b 5
+b 1
+b 0
+b 5
+b 4
+b 15
+b 2
+b 11
+b 3
+b 1
+b 7
+b 0
+b 14
+b 15
+b 13
+b 1
+b 1
+b 2
+b 1
+b 27
+b 3
+b 2
+b 23
+b 3
+b 2
+b 1
+b 0
+b 16
+b 8
+b 0
+b 19
+b 9
+b 11
+b 7
+b 6
+b 1
+b 0
+b 1
+b 0
+b 5
+b 4
+b 1
+b 0
+b 10
+b 9
+b 6
+b 17
+b 18
+b 15
+b 2
+b 13
+b 2
+b 3
+b 2
+b 11
+b 9
+b 17
+b 3
+b 2
+b 1
+b 0
+b 23
+b 24
+b 11
+b 13
+b 14
+b 11
+b 2
+b 8
+b 6
+b 9
+b 2
+b 3
+b 0
+b 2
+b 1
+b 11
+b 12
+b 5
+b 10
+b 3
+b 2
+b 4
+b 6
+b 3
+b 4
+b 2
+b 5
+b 4
+b 1
+b 4
+b 8
+b 9
+b 3
+b 3
+b 2
+b 10
+b 12
+b 12
+b 1
+b 2
+b 3
+b 2
+b 10
+b 12
+b 7
+b 13
+b 12
+b 7
+b 25
+b 3
+b 0
+b 1
+b 15
+b 13
+b 16
+b 0
+b 1
+b 11
+b 12
+b 11
+b 1
+b 0
+b 0
+b 1
+b 1
+b 21
+b 13
+b 14
+b 6
+b 0
+b 0
+b 1
+b 1
+b 0
+b 3
+b 2
+b 18
+b 19
+b 21
+b 0
+b 1
+b 0
+b 4
+b 1
+b 0
+b 1
+b 1
+b 0
+b 1
+b 6
+b 19
+b 18
+b 15
+b 16
+b 5
+b 14
+b 2
+b 16
+b 2
+b 3
+b 2
+b 2
+b 3
+b 3
+b 0
+b 2
+b 3
+b 0
+b 15
+b 13
+b 1
+b 16
+b 14
+b 1
+b 5
+b 6
+b 5
+b 2
+b 6
+b 3
+b 2
+b 1
+b 1
+b 12
+b 12
+b 1
+b 1
+b 0
+b 19
+b 20
+b 17
+b 2
+b 9
+b 9
+b 1
+b 1
+b 7
+b 4
+b 1
+b 6
+b 4
+b 1
+b 5
+b 4
+b 1
+b 2
+b 2
+b 16
+b 9
+b 23
+b 0
+b 21
+b 22
+b 20
+b 1
+b 9
+b 1
+b 14
+b 9
+b 10
+b 11
+b 15
+b 3
+b 2
+b 3
+b 7
+b 5
+b 1
+b 2
+b 0
+b 1
+b 0
+b 3
+b 4
+b 11
+b 12
+b 11
+b 2
+b 10
+b 7
+b 1
+b 6
+b 21
+b 17
+b 8
+b 17
+b 18
+b 7
+b 8
+b 4
+b 1
+b 13
+b 14
+b 12
+b 1
+b 7
+b 15
+b 8
+b 5
+b 23
+b 14
+b 7
+b 12
+b 3
+b 5
+b 3
+b 4
+b 23
+b 20
+b 1
+b 2
+b 3
+b 2
+b 2
+b 2
+b 4
+b 5
+b 2
+b 2
+b 1
+b 0
+b 0
+b 1
+b 1
+b 2
+b 3
+b 1
+b 2
+b 4
+b 1
+b 1
+b 12
+b 14
+b 1
+b 2
+b 3
+b 0
+b 3
+b 0
+b 2
+b 18
+b 17
+b 2
+b 11
+b 12
+b 14
+b 11
+b 2
+b 0
+b 1
+b 9
+b 3
+b 21
+b 22
+b 12
+b 11
+b 10
+b 4
+b 1
+b 1
+b 1
+b 2
+b 0
+b 1
+b 4
+b 0
+b 1
+b 0
+b 3
+b 13
+b 14
+b 11
+b 11
+b 19
+b 20
+b 23
+b 22
+b 1
+b 10
+b 11
+b 9
+b 1
+b 5
+b 6
+b 2
+b 1
+b 1
+b 0
+b 4
+b 6
+b 9
+b 2
+b 7
+b 6
+b 7
+b 6
+b 17
+b 3
+b 4
+b 6
+b 0
+b 8
+b 4
+b 5
+b 1
+b 0
+b 7
+b 9
+b 2
+b 4
+b 2
+b 1
+b 12
+b 13
+b 12
+b 2
+b 7
+b 8
+b 19
+b 7
+b 1
+b 4
+b 2
+b 1
+b 0
+b 4
+b 5
+b 3
+b 1
+b 2
+b 1
+b 0
+b 13
+b 12
+b 1
+b 14
+b 3
+b 2
+b 16
+b 14
+b 2
+b 1
+b 9
+b 8
+b 20
+b 8
+b 9
+b 7
+b 0
+b 0
+b 0
+b 4
+b 5
+b 3
+b 1
+b 3
+b 0
+b 3
+b 2
+b 15
+b 16
+b 15
+b 2
+b 2
+b 4
+b 2
+b 1
+b 5
+b 2
+b 1
+b 4
+b 2
+b 1
+b 2
+b 8
+b 6
+b 2
+b 9
+b 6
+b 7
+b 8
+b 6
+b 7
+b 6
+b 6
+b 1
+b 0
+b 12
+b 11
+b 1
+b 3
+b 2
+b 6
+b 0
+b 2
+b 0
+b 1
+b 2
+b 0
+b 1
+b 0
+b 3
+b 2
+b 20
+b 12
+b 4
+b 5
+b 4
+b 2
+b 0
+b 0
+b 1
+b 5
+b 20
+b 2
+b 9
+b 2
+b 1
+b 2
+b 11
+b 8
+b 0
+b 1
+b 3
+b 2
+b 9
+b 10
+b 17
+b 18
+b 16
+b 1
+b 10
+b 11
+b 14
+b 15
+b 8
+b 11
+b 13
+b 0
+b 1
+b 2
+b 9
+b 1
+b 0
+b 4
+b 18
+b 19
+b 16
+b 2
+b 1
+b 0
+b 1
+b 2
+b 0
+b 13
+b 14
+b 13
+b 1
+b 5
+b 6
+b 12
+b 3
+b 2
+b 6
+b 2
+b 1
+b 2
+b 0
+b 1
+b 1
+b 8
+b 8
+b 6
+b 1
+b 13
+b 11
+b 1
+b 3
+b 1
+b 2
+b 0
+b 1
+b 0
+b 23
+b 21
+b 1
+b 11
+b 9
+b 1
+b 0
+b 2
+b 1
+b 3
+b 0
+b 3
+b 7
+b 7
+b 8
+b 5
+b 2
+b 14
+b 0
+b 9
+b 6
+b 1
+b 0
+b 1
+b 0
+b 0
+b 1
+b 0
+b 7
+b 5
+b 10
+b 8
+b 11
+b 5
+b 6
+b 0
+b 0
+b 17
+b 18
+b 16
+b 1
+b 12
+b 2
+b 5
+b 2
+b 3
+b 15
+b 14
+b 0
+b 13
+b 4
+b 6
+b 0
+b 1
+b 0
+b 2
+b 1
+b 3
+b 16
+b 14
+b 1
+b 3
+b 4
+b 2
+b 1
+b 8
+b 3
+b 6
+b 5
+b 1
+b 1
+b 2
+b 2
+b 7
+b 8
+b 17
+b 18
+b 16
+b 1
+b 1
+b 0
+b 0
+b 11
+b 1
+b 1
+b 1
+b 1
+b 0
+b 2
+b 10
+b 10
+b 1
+b 12
+b 10
+b 1
+b 26
+b 5
+b 6
+b 0
+b 9
+b 7
+b 1
+b 4
+b 16
+b 3
+b 2
+b 1
+b 0
+b 1
+b 2
+b 0
+b 1
+b 0
+b 2
+b 6
+b 4
+b 1
+b 10
+b 3
+b 0
+b 2
+b 0
+b 1
+b 7
+b 4
+b 1
+b 6
+b 21
+b 0
+b 20
+b 7
+b 7
+b 1
+b 2
+b 1
+b 14
+b 1
+b 1
+b 3
+b 2
+b 3
+b 5
+b 6
+b 5
+b 1
+b 0
+b 1
+b 1
+b 2
+b 2
+b 14
+b 15
+b 2
+b 1
+b 0
+b 20
+b 9
+b 8
+b 9
+b 8
+b 10
+b 3
+b 1
+b 2
+b 5
+b 1
+b 11
+b 0
+b 12
+b 2
+b 8
+b 0
+b 5
+b 4
+b 16
+b 15
+b 1
+b 4
+b 5
+b 8
+b 4
+b 4
+b 3
+b 2
+b 1
+b 3
+b 3
+b 4
+b 2
+b 3
+b 4
+b 1
+b 0
+b 1
+b 9
+b 3
+b 0
+b 16
+b 2
+b 1
+b 2
+b 1
+b 4
+b 2
+b 11
+b 12
+b 1
+b 1
+b 1
+b 1
+b 0
+b 0
+b 1
+b 2
+b 1
+b 2
+b 0
+b 3
+b 4
+b 2
+b 1
+b 2
+b 0
+b 1
+b 7
+b 1
+b 17
+b 24
+b 13
+b 15
+b 1
+b 2
+b 5
+b 3
+b 1
+b 2
+b 0
+b 1
+b 8
+b 2
+b 1
+b 1
+b 12
+b 13
+b 6
+b 4
+b 3
+b 4
+b 5
+b 2
+b 2
+b 0
+b 1
+b 28
+b 3
+b 5
+b 3
+b 3
+b 1
+b 2
+b 2
+b 3
+b 2
+b 4
+b 0
+b 1
+b 12
+b 13
+b 12
+b 2
+b 13
+b 10
+b 1
+b 0
+b 1
+b 0
+b 1
+b 6
+b 0
+b 13
+b 9
+b 13
+b 14
+b 13
+b 2
+b 4
+b 5
+b 4
+b 1
+b 13
+b 10
+b 6
+b 5
+b 1
+b 6
+b 7
+b 6
+b 2
+b 5
+b 4
+b 6
+b 4
+b 5
+b 6
+b 8
+b 5
+b 5
+b 1
+b 0
+b 1
+b 0
+b 1
+b 2
+b 0
+b 1
+b 3
+b 22
+b 5
+b 7
+b 3
+b 5
+b 4
+b 5
+b 0
+b 4
+b 1
+b 19
+b 17
+b 18
+b 15
+b 2
+b 18
+b 16
+b 1
+b 7
+b 6
+b 3
+b 4
+b 3
+b 1
+b 0
+b 2
+b 1
+b 5
+b 3
+b 4
+b 3
+b 5
+b 6
+b 9
+b 4
+b 7
+b 0
+b 12
+b 6
+b 19
+b 19
+b 1
+b 6
+b 0
+b 0
+b 2
+b 19
+b 17
+b 1
+b 2
+b 4
+b 2
+b 2
+b 3
+b 2
+b 1
+b 14
+b 12
+b 22
+b 20
+b 1
+b 0
+b 17
+b 15
+b 3
+b 0
+b 1
+b 16
+b 16
+b 1
+b 3
+b 1
+b 2
+b 1
+b 2
+b 3
+b 3
+b 2
+b 9
+b 7
+b 1
+b 7
+b 8
+b 5
+b 2
+b 8
+b 5
+b 1
+b 13
+b 11
+b 1
+b 14
+b 12
+b 1
+b 7
+b 8
+b 7
+b 2
+b 1
+b 2
+b 0
+b 1
+b 2
+b 3
+b 1
+b 1
+b 2
+b 0
+b 1
+b 3
+b 0
+b 1
+b 2
+b 2
+b 11
+b 10
+b 25
+b 13
+b 13
+b 1
+b 1
+b 1
+b 1
+b 2
+b 0
+b 1
+b 1
+b 2
+b 6
+b 3
+b 0
+b 1
+b 24
+b 1
+b 4
+b 5
+b 0
+b 3
+b 3
+b 3
+b 4
+b 2
+b 1
+b 2
+b 1
+b 0
+b 1
+b 22
+b 22
+b 19
+b 1
+b 3
+b 2
+b 19
+b 6
+b 7
+b 6
+b 1
+b 1
+b 0
+b 1
+b 3
+b 0
+b 5
+b 2
+b 4
+b 1
+b 2
+b 16
+b 18
+b 19
+b 16
+b 2
+b 1
+b 1
+b 1
+b 13
+b 0
+b 0
+b 13
+b 10
+b 11
+b 10
+b 2
+b 1
+b 0
+b 7
+b 2
+b 1
+b 1
+b 3
+b 12
+b 7
+b 3
+b 9
+b 6
+b 4
+b 1
+b 4
+b 5
+b 3
+b 1
+b 11
+b 5
+b 6
+b 8
+b 2
+b 9
+b 10
+b 8
+b 1
+b 3
+b 1
+b 0
+b 5
+b 4
+b 5
+b 3
+b 2
+b 1
+b 8
+b 5
+b 0
+b 2
+b 13
+b 3
+b 15
+b 14
+b 15
+b 17
+b 13
+b 1
+b 3
+b 2
+b 4
+b 0
+b 1
+b 6
+b 6
+b 1
+b 16
+b 2
+b 3
+b 2
+b 2
+b 1
+b 9
+b 20
+b 21
+b 9
+b 1
+b 0
+b 0
+b 0
+b 14
+b 16
+b 0
+b 2
+b 7
+b 3
+b 7
+b 6
+b 7
+b 2
+b 4
+b 0
+b 2
+b 0
+b 1
+b 2
+b 7
+b 8
+b 6
+b 1
+b 6
+b 3
+b 1
+b 2
+b 3
+b 4
+b 6
+b 5
+b 2
+b 3
+b 3
+b 7
+b 6
+b 7
+b 6
+b 9
+b 8
+b 1
+b 6
+b 8
+b 4
+b 1
+b 1
+b 3
+b 4
+b 5
+b 1
+b 4
+b 0
+b 2
+b 3
+b 0
+b 3
+b 1
+b 1
+b 2
+b 4
+b 0
+b 1
+b 0
+b 2
+b 22
+b 1
+b 1
+b 1
+b 3
+b 2
+b 3
+b 1
+b 1
+b 2
+b 0
+b 1
+b 6
+b 5
+b 3
+b 4
+b 2
+b 19
+b 18
+b 4
+b 16
+b 9
+b 8
+b 1
+b 13
+b 0
+b 10
+b 1
+b 9
+b 9
+b 1
+b 4
+b 5
+b 4
+b 1
+b 3
+b 14
+b 15
+b 5
+b 2
+b 1
+b 1
+b 21
+b 21
+b 1
+b 10
+b 11
+b 10
+b 2
+b 8
+b 12
+b 13
+b 7
+b 9
+b 11
+b 4
+b 5
+b 2
+b 12
+b 2
+b 9
+b 3
+b 5
+b 6
+b 3
+b 3
+b 1
+b 2
+b 0
+b 1
+b 0
+b 1
+b 3
+b 2
+b 1
+b 2
+b 13
+b 11
+b 1
+b 14
+b 4
+b 14
+b 15
+b 1
+b 6
+b 4
+b 1
+b 4
+b 6
+b 0
+b 0
+b 10
+b 13
+b 12
+b 13
+b 10
+b 3
+b 8
+b 20
+b 8
+b 9
+b 8
+b 2
+b 10
+b 3
+b 4
+b 3
+b 2
+b 1
+b 3
+b 0
+b 7
+b 9
+b 6
+b 14
+b 16
+b 5
+b 6
+b 3
+b 3
+b 3
+b 1
+b 2
+b 3
+b 2
+b 3
+b 1
+b 2
+b 0
+b 1
+b 0
+b 1
+b 0
+b 3
+b 8
+b 2
+b 2
+b 3
+b 2
+b 1
+b 7
+b 7
+b 1
+b 3
+b 15
+b 3
+b 4
+b 5
+b 19
+b 8
+b 8
+b 1
+b 14
+b 8
+b 9
+b 7
+b 5
+b 7
+b 0
+b 1
+b 7
+b 4
+b 5
+b 2
+b 7
+b 8
+b 4
+b 1
+b 3
+b 4
+b 0
+b 4
+b 2
+b 3
+b 0
+b 2
+b 3
+b 1
+b 1
+b 3
+b 5
+b 3
+b 4
+b 3
+b 4
+b 1
+b 1
+b 1
+b 0
+b 0
+b 1
+b 2
+b 4
+b 0
+b 1
+b 2
+b 8
+b 2
+b 3
+b 2
+b 1
+b 0
+b 0
+b 1
+b 2
+b 0
+b 15
+b 14
+b 1
+b 4
+b 12
+b 11
+b 1
+b 1
+b 0
+b 1
+b 0
+b 3
+b 0
+b 1
+b 0
+b 3
+b 4
+b 2
+b 1
+b 1
+b 0
+b 12
+b 2
+b 2
+b 4
+b 1
+b 2
+b 8
+b 9
+b 6
+b 2
+b 8
+b 7
+b 1
+b 3
+b 2
+b 3
+b 3
+b 1
+b 5
+b 7
+b 3
+b 4
+b 2
+b 20
+b 4
+b 5
+b 2
+b 3
+b 1
+b 1
+b 2
+b 3
+b 0
+b 2
+b 1
+b 16
+b 17
+b 1
+b 3
+b 2
+b 12
+b 13
+b 11
+b 1
+b 8
+b 6
+b 1
+b 1
+b 2
+b 0
+b 1
+b 1
+b 10
+b 6
+b 5
+b 3
+b 4
+b 2
+b 6
+b 5
+b 1
+b 18
+b 19
+b 16
+b 2
+b 3
+b 4
+b 3
+b 2
+b 8
+b 9
+b 6
+b 2
+b 6
+b 4
+b 1
+b 15
+b 1
+b 2
+b 0
+b 1
+b 0
+b 1
+b 0
+b 2
+b 1
+b 0
+b 3
+b 2
+b 6
+b 8
+b 5
+b 7
+b 1
+b 2
+b 21
+b 0
+b 15
+b 12
+b 13
+b 3
+b 0
+b 3
+b 0
+b 15
+b 0
+b 4
+b 7
+b 7
+b 1
+b 6
+b 5
+b 1
+b 14
+b 3
+b 5
+b 4
+b 7
+b 0
+b 0
+b 1
+b 2
+b 4
+b 0
+b 1
+b 5
+b 7
+b 5
+b 1
+b 5
+b 24
+b 1
+b 0
+b 1
+b 7
+b 7
+b 1
+b 3
+b 4
+b 3
+b 1
+b 2
+b 1
+b 0
+b 18
+b 3
+b 2
+b 2
+b 1
+b 7
+b 1
+b 0
+b 18
+b 7
+b 9
+b 7
+b 1
+b 1
+b 2
+b 1
+b 12
+b 9
+b 8
+b 1
+b 0
+b 1
+b 0
+b 2
+b 1
+b 7
+b 4
+b 1
+b 6
+b 4
+b 1
+b 10
+b 8
+b 1
+b 3
+b 0
+b 1
+b 3
+b 4
+b 1
+b 2
+b 0
+b 1
+b 3
+b 3
+b 1
+b 2
+b 3
+b 1
+b 1
+b 1
+b 2
+b 1
+b 2
+b 1
+b 4
+b 23
+b 24
+b 23
+b 1
+b 9
+b 7
+b 6
+b 4
+b 0
+b 9
+b 1
+b 0
+b 5
+b 3
+b 3
+b 2
+b 3
+b 2
+b 2
+b 4
+b 6
+b 4
+b 3
+b 2
+b 3
+b 2
+b 4
+b 0
+b 0
+b 1
+b 0
+b 0
+b 7
+b 3
+b 4
+b 3
+b 1
+b 5
+b 2
+b 1
+b 0
+b 0
+b 1
+b 21
+b 16
+b 17
+b 14
+b 2
+b 18
+b 15
+b 1
+b 3
+b 4
+b 6
+b 1
+b 3
+b 1
+b 1
+b 1
+b 0
+b 9
+b 8
+b 1
+b 3
+b 4
+b 22
+b 1
+b 2
+b 1
+b 2
+b 0
+b 7
+b 3
+b 4
+b 1
+b 2
+b 2
+b 3
+b 2
+b 17
+b 16
+b 1
+b 1
+b 0
+b 1
+b 2
+b 1
+b 15
+b 14
+b 15
+b 0
+b 3
+b 16
+b 4
+b 5
+b 10
+b 9
+b 1
+b 0
+b 13
+b 10
+b 1
+b 13
+b 11
+b 1
+b 9
+b 10
+b 9
+b 4
+b 7
+b 6
+b 1
+b 0
+b 0
+b 6
+b 5
+b 6
+b 3
+b 2
+b 24
+b 23
+b 1
+b 6
+b 4
+b 1
+b 1
+b 2
+b 0
+b 1
+b 0
+b 13
+b 11
+b 1
+b 3
+b 1
+b 2
+b 1
+b 3
+b 0
+b 3
+b 11
+b 3
+b 4
+b 2
+b 2
+b 11
+b 12
+b 4
+b 2
+b 13
+b 14
+b 11
+b 2
+b 2
+b 3
+b 12
+b 0
+b 9
+b 6
+b 1
+b 16
+b 18
+b 16
+b 3
+b 1
+b 0
+b 1
+b 3
+b 2
+b 0
+b 4
+b 3
+b 0
+b 1
+b 5
+b 6
+b 4
+b 4
+b 7
+b 3
+b 4
+b 2
+b 15
+b 16
+b 1
+b 0
+b 1
+b 1
+b 2
+b 1
+b 3
+b 0
+b 3
+b 8
+b 1
+b 3
+b 0
+b 6
+b 7
+b 6
+b 2
+b 0
+b 0
+b 1
+b 4
+b 4
+b 0
+b 3
+b 2
+b 4
+b 2
+b 1
+b 6
+b 10
+b 3
+b 1
+b 2
+b 11
+b 13
+b 11
+b 1
+b 2
+b 4
+b 5
+b 10
+b 2
+b 8
+b 6
+b 5
+b 2
+b 5
+b 6
+b 0
+b 11
+b 12
+b 9
+b 2
+b 0
+b 1
+b 2
+b 7
+b 6
+b 1
+b 2
+b 3
+b 2
+b 10
+b 4
+b 5
+b 4
+b 1
+b 3
+b 4
+b 3
+b 2
+b 1
+b 2
+b 11
+b 10
+b 1
+b 12
+b 4
+b 1
+b 2
+b 0
+b 1
+b 0
+b 0
+b 1
+b 2
+b 13
+b 11
+b 5
+b 6
+b 4
+b 1
+b 1
+b 3
+b 7
+b 2
+b 3
+b 2
+b 1
+b 0
+b 0
+b 1
+b 0
+b 1
+b 0
+b 2
+b 1
+b 0
+b 1
+b 2
+b 5
+b 4
+b 1
+b 4
+b 19
+b 20
+b 11
+b 11
+b 1
+b 1
+b 2
+b 0
+b 1
+b 0
+b 15
+b 16
+b 15
+b 2
+b 6
+b 7
+b 2
+b 0
+b 1
+b 0
+b 7
+b 6
+b 1
+b 7
+b 8
+b 7
+b 2
+b 6
+b 6
+b 1
+b 3
+b 5
+b 2
+b 2
+b 1
+b 0
+b 1
+b 0
+b 7
+b 0
+b 1
+b 4
+b 0
+b 15
+b 17
+b 18
+b 12
+b 1
+b 8
+b 9
+b 6
+b 3
+b 0
+b 0
+b 1
+b 0
+b 1
+b 0
+b 1
+b 0
+b 2
+b 3
+b 1
+b 2
+b 1
+b 1
+b 2
+b 2
+b 1
+b 24
+b 13
+b 14
+b 13
+b 2
+b 5
+b 1
+b 15
+b 2
+b 1
+b 2
+b 4
+b 5
+b 4
+b 1
+b 9
+b 10
+b 9
+b 2
+b 7
+b 5
+b 5
+b 5
+b 2
+b 1
+b 0
+b 1
+b 2
+b 1
+b 2
+b 4
+b 2
+b 1
+b 0
+b 2
+b 2
+b 0
+b 10
+b 7
+b 1
+b 3
+b 1
+b 2
+b 0
+b 0
+b 10
+b 6
+b 7
+b 4
+b 3
+b 2
+b 7
+b 0
+b 0
+b 23
+b 7
+b 5
+b 6
+b 3
+b 2
+b 3
+b 4
+b 3
+b 1
+b 17
+b 14
+b 1
+b 2
+b 3
+b 2
+b 2
+b 3
+b 5
+b 3
+b 3
+b 2
+b 4
+b 9
+b 8
+b 1
+b 6
+b 5
+b 1
+b 11
+b 6
+b 13
+b 12
+b 13
+b 4
+b 0
+b 9
+b 10
+b 10
+b 4
+b 6
+b 3
+b 3
+b 6
+b 4
+b 5
+b 2
+b 2
+b 3
+b 4
+b 3
+b 2
+b 1
+b 0
+b 17
+b 3
+b 3
+b 5
+b 3
+b 1
+b 2
+b 2
+b 3
+b 2
+b 22
+b 11
+b 8
+b 4
+b 0
+b 0
+b 11
+b 10
+b 7
+b 7
+b 1
+b 6
+b 5
+b 1
+b 0
+b 2
+b 3
+b 16
+b 15
+b 1
+b 2
+b 3
+b 0
+b 2
+b 7
+b 2
+b 2
+b 0
+b 1
+b 3
+b 4
+b 4
+b 1
+b 4
+b 8
+b 16
+b 18
+b 6
+b 1
+b 3
+b 4
+b 0
+b 1
+b 3
+b 12
+b 10
+b 1
+b 0
+b 1
+b 0
+b 2
+b 16
+b 4
+b 3
+b 8
+b 6
+b 8
+b 0
+b 1
+b 0
+b 2
+b 3
+b 2
+b 1
+b 1
+b 0
+b 0
+b 1
+b 2
+b 4
+b 13
+b 11
+b 2
+b 6
+b 4
+b 1
+b 1
+b 0
+b 1
+b 0
+b 2
+b 11
+b 12
+b 8
+b 3
+b 2
+b 11
+b 10
+b 2
+b 2
+b 2
+b 2
+b 15
+b 14
+b 1
+b 12
+b 3
+b 4
+b 3
+b 5
+b 13
+b 12
+b 1
+b 6
+b 7
+b 6
+b 2
+b 4
+b 5
+b 4
+b 2
+b 4
+b 5
+b 3
+b 1
+b 5
+b 18
+b 5
+b 6
+b 5
+b 2
+b 3
+b 7
+b 8
+b 7
+b 1
+b 1
+b 2
+b 1
+b 0
+b 1
+b 2
+b 14
+b 15
+b 12
+b 2
+b 12
+b 10
+b 1
+b 6
+b 5
+b 1
+b 0
+b 11
+b 10
+b 9
+b 8
+b 5
+b 6
+b 2
+b 0
+b 1
+b 3
+b 1
+b 10
+b 0
+b 3
+b 1
+b 16
+b 17
+b 19
+b 14
+b 2
+b 5
+b 4
+b 6
+b 7
+b 7
+b 8
+b 5
+b 3
+b 23
+b 4
+b 6
+b 1
+b 0
+b 1
+b 11
+b 0
+b 1
+b 1
+b 13
+b 10
+b 11
+b 9
+b 1
+b 5
+b 3
+b 1
+b 12
+b 1
+b 0
+b 1
+b 1
+b 2
+b 3
+b 7
+b 9
+b 10
+b 4
+b 1
+b 0
+b 1
+b 0
+b 12
+b 14
+b 3
+b 3
+b 1
+b 2
+b 3
+b 2
+b 2
+b 1
+b 0
+b 2
+b 4
+b 6
+b 4
+b 1
+b 5
+b 3
+b 4
+b 18
+b 16
+b 1
+b 11
+b 13
+b 10
+b 3
+b 2
+b 3
+b 2
+b 10
+b 11
+b 5
+b 7
+b 8
+b 9
+b 5
+b 4
+b 6
+b 3
+b 2
+b 3
+b 5
+b 3
+b 4
+b 2
+b 8
+b 6
+b 1
+b 8
+b 9
+b 0
+b 0
+b 5
+b 3
+b 0
+b 0
+b 3
+b 19
+b 10
+b 0
+b 5
+b 2
+b 11
+b 12
+b 11
+b 1
+b 10
+b 0
+b 13
+b 14
+b 13
+b 2
+b 4
+b 5
+b 2
+b 2
+b 4
+b 11
+b 11
+b 1
+b 21
+b 11
+b 9
+b 10
+b 1
+b 1
+b 3
+b 0
+b 7
+b 5
+b 6
+b 4
+b 1
+b 4
+b 3
+b 2
+b 3
+b 4
+b 5
+b 6
+b 3
+b 2
+b 1
+b 2
+b 1
+b 1
+b 2
+b 1
+b 3
+b 17
+b 18
+b 13
+b 11
+b 1
+b 0
+b 1
+b 22
+b 0
+b 11
+b 12
+b 10
+b 1
+b 2
+b 1
+b 14
+b 15
+b 16
+b 0
+b 0
+b 0
+b 2
+b 2
+b 7
+b 6
+b 2
+b 2
+b 24
+b 5
+b 4
+b 5
+b 12
+b 3
+b 9
+b 11
+b 1
+b 16
+b 1
+b 0
+b 3
+b 1
+b 2
+b 0
+b 1
+b 2
+b 11
+b 9
+b 2
+b 9
+b 10
+b 9
+b 3
+b 1
+b 2
+b 0
+b 1
+b 9
+b 0
+b 0
+b 5
+b 4
+b 1
+b 4
+b 4
+b 1
+b 14
+b 12
+b 1
+b 1
+b 0
+b 7
+b 4
+b 1
+b 6
+b 7
+b 4
+b 2
+b 6
+b 4
+b 1
+b 3
+b 2
+b 1
+b 0
+b 2
+b 0
+b 1
+b 1
+b 0
+b 1
+b 0
+b 18
+b 16
+b 2
+b 1
+b 0
+b 1
+b 23
+b 24
+b 21
+b 2
+b 9
+b 7
+b 1
+b 3
+b 2
+b 15
+b 15
+b 1
+b 17
+b 18
+b 17
+b 1
+b 6
+b 0
+b 1
+b 0
+b 2
+b 9
+b 11
+b 6
+b 6
+b 1
+b 3
+b 0
+b 1
+b 0
+b 0
+b 1
+b 3
+b 5
+b 2
+b 4
+b 6
+b 21
+b 3
+b 4
+b 2
+b 5
+b 3
+b 1
+b 0
+b 1
+b 2
+b 0
+b 0
+b 1
+b 10
+b 11
+b 7
+b 8
+b 0
+b 0
+b 1
+b 0
+b 2
+b 3
+b 0
+b 4
+b 1
+b 0
+b 2
+b 0
+b 4
+b 3
+b 1
+b 2
+b 0
+b 11
+b 12
+b 11
+b 1
+b 0
+b 0
+b 2
+b 2
+b 2
+b 1
+b 1
+b 0
+b 2
+b 0
+b 1
+b 5
+b 4
+b 1
+b 0
+b 0
+b 3
+b 0
+b 10
+b 8
+b 1
+b 3
+b 4
+b 2
+b 1
+b 2
+b 0
+b 21
+b 9
+b 6
+b 7
+b 7
+b 9
+b 25
+b 13
+b 1
+b 3
+b 0
+b 3
+b 1
+b 18
+b 16
+b 17
+b 16
+b 1
+b 18
+b 18
+b 19
+b 18
+b 1
+b 10
+b 12
+b 13
+b 12
+b 2
+b 11
+b 11
+b 1
+b 8
+b 9
+b 8
+b 2
+b 9
+b 8
+b 1
+b 6
+b 7
+b 6
+b 2
+b 8
+b 8
+b 1
+b 17
+b 18
+b 16
+b 1
+b 14
+b 15
+b 15
+b 1
+b 2
+b 3
+b 0
+b 0
+b 1
+b 0
+b 0
+b 14
+b 1
+b 1
+b 2
+b 0
+b 1
+b 2
+b 3
+b 0
+b 3
+b 2
+b 20
+b 4
+b 17
+b 15
+b 1
+b 5
+b 3
+b 4
+b 1
+b 2
+b 7
+b 4
+b 4
+b 5
+b 2
+b 3
+b 4
+b 15
+b 14
+b 15
+b 0
+b 0
+b 1
+b 2
+b 4
+b 2
+b 1
+b 2
+b 1
+b 8
+b 10
+b 2
+b 3
+b 0
+b 3
+b 0
+b 0
+b 1
+b 3
+b 4
+b 3
+b 4
+b 2
+b 1
+b 1
+b 2
+b 0
+b 1
+b 0
+b 0
+b 1
+b 0
+b 0
+b 1
+b 11
+b 12
+b 10
+b 1
+b 0
+b 1
+b 8
+b 6
+b 3
+b 1
+b 5
+b 6
+b 7
+b 1
+b 0
+b 1
+b 0
+b 6
+b 13
+b 16
+b 13
+b 1
+b 7
+b 8
+b 7
+b 2
+b 1
+b 2
+b 0
+b 1
+b 2
+b 1
+b 0
+b 1
+b 0
+b 11
+b 8
+b 11
+b 12
+b 9
+b 2
+b 4
+b 5
+b 2
+b 2
+b 9
+b 5
+b 6
+b 8
+b 6
+b 1
+b 8
+b 9
+b 6
+b 2
+b 0
+b 13
+b 14
+b 1
+b 2
+b 1
+b 0
+b 10
+b 1
+b 2
+b 4
+b 1
+b 2
+b 15
+b 16
+b 4
+b 0
+b 2
+b 1
+b 0
+b 2
+b 0
+b 10
+b 8
+b 2
+b 6
+b 7
+b 6
+b 1
+b 4
+b 5
+b 4
+b 7
+b 2
+b 1
+b 2
+b 0
+b 5
+b 6
+b 5
+b 1
+b 3
+b 4
+b 1
+b 2
+b 2
+b 3
+b 0
+b 2
+b 21
+b 9
+b 12
+b 14
+b 9
+b 5
+b 0
+b 2
+b 3
+b 3
+b 0
+b 1
+b 0
+b 2
+b 5
+b 3
+b 4
+b 1
+b 3
+b 3
+b 2
+b 3
+b 2
+b 3
+b 1
+b 1
+b 2
+b 3
+b 0
+b 1
+b 0
+b 1
+b 0
+b 7
+b 2
+b 3
+b 0
+b 2
+b 7
+b 8
+b 0
+b 1
+b 9
+b 10
+b 9
+b 1
+b 14
+b 14
+b 1
+b 6
+b 1
+b 0
+b 1
+b 0
+b 4
+b 6
+b 7
+b 9
+b 4
+b 2
+b 0
+b 1
+b 0
+b 1
+b 0
+b 1
+b 0
+b 3
+b 0
+b 0
+b 1
+b 0
+b 6
+b 7
+b 5
+b 1
+b 1
+b 0
+b 0
+b 1
+b 5
+b 4
+b 19
+b 8
+b 9
+b 8
+b 1
+b 6
+b 4
+b 1
+b 5
+b 6
+b 1
+b 6
+b 0
+b 3
+b 0
+b 8
+b 2
+b 3
+b 2
+b 2
+b 2
+b 2
+b 3
+b 1
+b 10
+b 1
+b 3
+b 0
+b 1
+b 0
+b 2
+b 2
+b 0
+b 1
+b 5
+b 2
+b 1
+b 20
+b 21
+b 18
+b 2
+b 15
+b 0
+b 26
+b 3
+b 4
+b 6
+b 3
+b 2
+b 2
+b 4
+b 6
+b 5
+b 4
+b 6
+b 0
+b 2
+b 4
+b 13
+b 2
+b 5
+b 4
+b 5
+b 2
+b 2
+b 0
+b 9
+b 11
+b 2
+b 3
+b 2
+b 3
+b 4
+b 1
+b 3
+b 2
+b 0
+b 1
+b 4
+b 5
+b 4
+b 1
+b 4
+b 0
+b 1
+b 4
+b 5
+b 3
+b 1
+b 5
+b 2
+b 3
+b 2
+b 3
+b 2
+b 2
+b 3
+b 2
+b 1
+b 6
+b 2
+b 3
+b 9
+b 6
+b 1
+b 9
+b 10
+b 7
+b 2
+b 9
+b 10
+b 7
+b 2
+b 3
+b 2
+b 1
+b 14
+b 14
+b 1
+b 7
+b 8
+b 5
+b 2
+b 2
+b 3
+b 4
+b 0
+b 2
+b 3
+b 1
+b 20
+b 18
+b 1
+b 2
+b 4
+b 13
+b 14
+b 15
+b 12
+b 3
+b 1
+b 11
+b 12
+b 10
+b 12
+b 11
+b 4
+b 18
+b 19
+b 21
+b 18
+b 2
+b 7
+b 1
+b 0
+b 3
+b 0
+b 0
+b 1
+b 16
+b 16
+b 1
+b 2
+b 4
+b 5
+b 2
+b 2
+b 4
+b 2
+b 1
+b 3
+b 7
+b 4
+b 5
+b 2
+b 2
+b 0
+b 2
+b 0
+b 1
+b 7
+b 8
+b 5
+b 2
+b 2
+b 3
+b 2
+b 1
+b 2
+b 0
+b 0
+b 3
+b 1
+b 6
+b 8
+b 9
+b 6
+b 2
+b 7
+b 4
+b 1
+b 9
+b 10
+b 8
+b 1
+b 0
+b 2
+b 1
+b 4
+b 11
+b 9
+b 1
+b 2
+b 3
+b 2
+b 2
+b 6
+b 0
+b 3
+b 1
+b 2
+b 5
+b 3
+b 4
+b 3
+b 1
+b 2
+b 1
+b 1
+b 15
+b 14
+b 10
+b 4
+b 5
+b 3
+b 18
+b 19
+b 18
+b 2
+b 2
+b 7
+b 6
+b 7
+b 4
+b 4
+b 4
+b 14
+b 4
+b 5
+b 6
+b 2
+b 4
+b 1
+b 0
+b 1
+b 0
+b 1
+b 0
+b 1
+b 5
+b 4
+b 3
+b 4
+b 5
+b 4
+b 1
+b 3
+b 3
+b 2
+b 25
+b 24
+b 1
+b 9
+b 7
+b 5
+b 6
+b 1
+b 2
+b 2
+b 0
+b 1
+b 0
+b 1
+b 1
+b 3
+b 0
+b 2
+b 4
+b 13
+b 14
+b 8
+b 0
+b 4
+b 3
+b 2
+b 3
+b 2
+b 2
+b 8
+b 4
+b 11
+b 12
+b 11
+b 2
+b 4
+b 8
+b 15
+b 0
+b 2
+b 2
+b 3
+b 0
+b 2
+b 5
+b 1
+b 1
+b 1
+b 10
+b 3
+b 1
+b 2
+b 4
+b 1
+b 2
+b 0
+b 1
+b 2
+b 3
+b 2
+b 0
+b 1
+b 14
+b 4
+b 3
+b 1
+b 0
+b 4
+b 7
+b 8
+b 8
+b 4
+b 3
+b 1
+b 0
+b 0
+b 1
+b 0
+b 0
+b 1
+b 0
+b 1
+b 0
+b 1
+b 9
+b 0
+b 1
+b 13
+b 10
+b 1
+b 12
+b 11
+b 11
+b 1
+b 1
+b 0
+b 1
+b 1
+b 1
+b 3
+b 0
+b 7
+b 4
+b 1
+b 5
+b 6
+b 3
+b 2
+b 4
+b 5
+b 1
+b 0
+b 2
+b 4
+b 2
+b 2
+b 2
+b 3
+b 2
+b 3
+b 5
+b 2
+b 3
+b 7
+b 1
+b 3
+b 6
+b 5
+b 6
+b 1
+b 6
+b 7
+b 1
+b 3
+b 4
+b 18
+b 1
+b 7
+b 5
+b 6
+b 2
+b 3
+b 2
+b 8
+b 8
+b 1
+b 11
+b 13
+b 9
+b 10
+b 11
+b 8
+b 3
+b 0
+b 1
+b 0
+b 1
+b 0
+b 15
+b 16
+b 17
+b 14
+b 2
+b 18
+b 16
+b 1
+b 4
+b 9
+b 10
+b 3
+b 2
+b 3
+b 1
+b 0
+b 1
+b 0
+b 10
+b 3
+b 2
+b 1
+b 5
+b 6
+b 2
+b 1
+b 2
+b 4
+b 0
+b 1
+b 2
+b 3
+b 0
+b 3
+b 1
+b 2
+b 1
+b 18
+b 5
+b 7
+b 1
+b 3
+b 9
+b 0
+b 2
+b 3
+b 2
+b 4
+b 4
+b 1
+b 10
+b 0
+b 2
+b 2
+b 3
+b 1
+b 12
+b 0
+b 1
+b 8
+b 1
+b 0
+b 2
+b 12
+b 12
+b 1
+b 2
+b 3
+b 2
+b 1
+b 2
+b 10
+b 8
+b 1
+b 8
+b 9
+b 7
+b 8
+b 9
+b 5
+b 4
+b 0
+b 2
+b 2
+b 0
+b 1
+b 0
+b 16
+b 1
+b 0
+b 1
+b 0
+b 4
+b 5
+b 4
+b 2
+b 13
+b 15
+b 13
+b 3
+b 1
+b 1
+b 0
+b 1
+b 2
+b 3
+b 3
+b 1
+b 2
+b 3
+b 2
+b 2
+b 2
+b 2
+b 1
+b 7
+b 5
+b 1
+b 11
+b 4
+b 5
+b 12
+b 0
+b 12
+b 14
+b 15
+b 12
+b 4
+b 1
+b 7
+b 2
+b 4
+b 5
+b 7
+b 0
+b 0
+b 1
+b 3
+b 4
+b 1
+b 2
+b 12
+b 4
+b 7
+b 7
+b 1
+b 1
+b 2
+b 0
+b 1
+b 2
+b 21
+b 22
+b 24
+b 20
+b 1
+b 7
+b 9
+b 5
+b 1
+b 5
+b 2
+b 8
+b 10
+b 8
+b 1
+b 2
+b 4
+b 5
+b 4
+b 1
+b 2
+b 10
+b 6
+b 7
+b 4
+b 2
+b 6
+b 4
+b 14
+b 16
+b 16
+b 1
+b 7
+b 6
+b 1
+b 0
+b 0
+b 1
+b 14
+b 15
+b 9
+b 2
+b 0
+b 2
+b 0
+b 1
+b 2
+b 3
+b 0
+b 3
+b 4
+b 0
+b 0
+b 0
+b 1
+b 0
+b 1
+b 0
+b 2
+b 3
+b 0
+b 1
+b 13
+b 4
+b 13
+b 13
+b 1
+b 14
+b 15
+b 14
+b 2
+b 5
+b 5
+b 1
+b 12
+b 12
+b 1
+b 7
+b 6
+b 7
+b 5
+b 1
+b 4
+b 6
+b 5
+b 6
+b 1
+b 18
+b 19
+b 18
+b 1
+b 17
+b 7
+b 8
+b 5
+b 2
+b 7
+b 5
+b 1
+b 0
+b 13
+b 13
+b 1
+b 11
+b 13
+b 4
+b 5
+b 3
+b 1
+b 0
+b 1
+b 1
+b 3
+b 3
+b 1
+b 2
+b 8
+b 10
+b 2
+b 3
+b 0
+b 3
+b 0
+b 18
+b 18
+b 1
+b 0
+b 6
+b 7
+b 6
+b 2
+b 5
+b 6
+b 5
+b 1
+b 3
+b 0
+b 1
+b 3
+b 2
+b 2
+b 3
+b 1
+b 1
+b 2
+b 0
+b 1
+b 16
+b 17
+b 16
+b 2
+b 1
+b 0
+b 1
+b 0
+b 1
+b 2
+b 0
+b 1
+b 1
+b 9
+b 0
+b 11
+b 12
+b 9
+b 9
+b 6
+b 7
+b 3
+b 1
+b 1
+b 11
+b 12
+b 11
+b 2
+b 1
+b 0
+b 1
+b 0
+b 1
+b 0
+b 4
+b 2
+b 3
+b 3
+b 2
+b 2
+b 13
+b 13
+b 1
+b 3
+b 5
+b 0
+b 1
+b 3
+b 4
+b 5
+b 1
+b 4
+b 2
+b 3
+b 4
+b 0
+b 4
+b 0
+b 1
+b 8
+b 4
+b 1
+b 1
+b 1
+b 0
+b 1
+b 0
+b 1
+b 6
+b 19
+b 20
+b 22
+b 14
+b 12
+b 13
+b 12
+b 13
+b 11
+b 4
+b 2
+b 1
+b 3
+b 1
+b 2
+b 0
+b 1
+b 0
+b 1
+b 7
+b 8
+b 9
+b 0
+b 1
+b 0
+b 13
+b 4
+b 5
+b 2
+b 2
+b 1
+b 15
+b 3
+b 4
+b 3
+b 2
+b 2
+b 0
+b 0
+b 3
+b 2
+b 11
+b 11
+b 1
+b 12
+b 1
+b 2
+b 1
+b 2
+b 0
+b 1
+b 1
+b 1
+b 2
+b 3
+b 0
+b 4
+b 1
+b 2
+b 3
+b 0
+b 0
+b 2
+b 7
+b 5
+b 6
+b 5
+b 2
+b 4
+b 18
+b 20
+b 16
+b 4
+b 1
+b 12
+b 13
+b 0
+b 1
+b 11
+b 1
+b 4
+b 5
+b 6
+b 0
+b 1
+b 0
+b 7
+b 4
+b 2
+b 0
+b 6
+b 6
+b 2
+b 11
+b 8
+b 1
+b 7
+b 8
+b 5
+b 2
+b 1
+b 2
+b 0
+b 1
+b 3
+b 2
+b 10
+b 4
+b 0
+b 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 4
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 3
+p 1
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 4
+p 3
+p 3
+p 2
+p 3
+p 2
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 4
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 4
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 4
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 4
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 4
+p 4
+p 4
+p 2
+p 4
+p 2
+p 3
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 3
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 4
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 4
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 5
+p 3
+p 2
+p 2
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 4
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 3
+p 3
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 2
+p 3
+p 3
+p 5
+p 2
+p 5
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 4
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 4
+p 3
+p 2
+p 3
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 4
+p 3
+p 3
+p 4
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 4
+p 4
+p 3
+p 3
+p 2
+p 3
+p 3
+p 3
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 4
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 4
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 4
+p 3
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 4
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 4
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 4
+p 3
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 3
+p 2
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 4
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 4
+p 2
+p 3
+p 2
+p 2
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 4
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 2
+p 3
+p 3
+p 3
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 4
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 4
+p 2
+p 2
+p 3
+p 3
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 4
+p 2
+p 2
+p 2
+p 2
+p 2
+p 4
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 4
+p 3
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 4
+p 2
+p 3
+p 3
+p 3
+p 3
+p 3
+p 2
+p 3
+p 3
+p 3
+p 2
+p 3
+p 3
+p 2
+p 4
+p 2
+p 4
+p 3
+p 2
+p 2
+p 3
+p 4
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 3
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 4
+p 3
+p 2
+p 4
+p 4
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 4
+p 2
+p 2
+p 2
+p 2
+p 4
+p 2
+p 2
+p 2
+p 2
+p 3
+p 4
+p 2
+p 2
+p 3
+p 4
+p 3
+p 2
+p 2
+p 2
+p 3
+p 4
+p 2
+p 3
+p 2
+p 3
+p 2
+p 4
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 4
+p 5
+p 3
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 4
+p 1
+p 3
+p 3
+p 4
+p 2
+p 2
+p 2
+p 3
+p 3
+p 5
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 4
+p 2
+p 2
+p 2
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 4
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 5
+p 3
+p 2
+p 4
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 4
+p 4
+p 2
+p 3
+p 3
+p 2
+p 3
+p 3
+p 3
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 0
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 2
+p 3
+p 5
+p 3
+p 2
+p 2
+p 3
+p 3
+p 3
+p 2
+p 3
+p 5
+p 2
+p 3
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 4
+p 2
+p 3
+p 2
+p 2
+p 4
+p 3
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 4
+p 2
+p 2
+p 3
+p 2
+p 5
+p 2
+p 2
+p 4
+p 3
+p 2
+p 4
+p 2
+p 2
+p 3
+p 3
+p 4
+p 3
+p 3
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 3
+p 3
+p 3
+p 3
+p 4
+p 3
+p 3
+p 3
+p 3
+p 3
+p 3
+p 2
+p 4
+p 1
+p 5
+p 2
+p 2
+p 3
+p 3
+p 2
+p 4
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 4
+p 4
+p 2
+p 3
+p 3
+p 3
+p 2
+p 5
+p 3
+p 3
+p 3
+p 3
+p 3
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 3
+p 2
+p 3
+p 5
+p 2
+p 2
+p 2
+p 3
+p 3
+p 3
+p 2
+p 3
+p 2
+p 3
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 4
+p 3
+p 4
+p 2
+p 4
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 4
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 4
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 3
+p 3
+p 2
+p 2
+p 3
+p 4
+p 2
+p 2
+p 3
+p 3
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 4
+p 2
+p 2
+p 3
+p 2
+p 2
+p 6
+p 3
+p 2
+p 2
+p 2
+p 4
+p 2
+p 4
+p 4
+p 3
+p 4
+p 2
+p 3
+p 3
+p 6
+p 2
+p 2
+p 2
+p 2
+p 2
+p 5
+p 2
+p 2
+p 3
+p 2
+p 2
+p 4
+p 4
+p 2
+p 3
+p 3
+p 7
+p 3
+p 2
+p 3
+p 2
+p 3
+p 5
+p 3
+p 3
+p 2
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 5
+p 3
+p 2
+p 2
+p 4
+p 2
+p 3
+p 4
+p 3
+p 1
+p 2
+p 3
+p 4
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 3
+p 3
+p 3
+p 3
+p 2
+p 2
+p 3
+p 3
+p 5
+p 3
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 4
+p 4
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 3
+p 4
+p 2
+p 2
+p 4
+p 3
+p 4
+p 5
+p 4
+p 2
+p 4
+p 2
+p 3
+p 5
+p 3
+p 5
+p 2
+p 3
+p 3
+p 4
+p 2
+p 2
+p 4
+p 2
+p 3
+p 3
+p 4
+p 2
+p 3
+p 2
+p 2
+p 5
+p 4
+p 2
+p 2
+p 3
+p 3
+p 3
+p 4
+p 2
+p 2
+p 5
+p 3
+p 4
+p 3
+p 4
+p 2
+p 4
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 4
+p 6
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 4
+p 2
+p 4
+p 3
+p 3
+p 4
+p 3
+p 4
+p 3
+p 2
+p 3
+p 3
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 5
+p 2
+p 2
+p 2
+p 4
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 3
+p 2
+p 4
+p 2
+p 2
+p 2
+p 3
+p 4
+p 2
+p 7
+p 3
+p 2
+p 2
+p 2
+p 3
+p 4
+p 1
+p 2
+p 6
+p 2
+p 4
+p 3
+p 4
+p 2
+p 4
+p 2
+p 2
+p 2
+p 7
+p 4
+p 2
+p 7
+p 4
+p 3
+p 3
+p 2
+p 3
+p 5
+p 3
+p 2
+p 4
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 3
+p 2
+p 3
+p 2
+p 3
+p 4
+p 4
+p 1
+p 2
+p 6
+p 5
+p 3
+p 2
+p 3
+p 4
+p 2
+p 2
+p 3
+p 4
+p 2
+p 3
+p 3
+p 2
+p 3
+p 2
+p 2
+p 5
+p 4
+p 2
+p 7
+p 2
+p 2
+p 2
+p 3
+p 2
+p 4
+p 2
+p 2
+p 2
+p 4
+p 4
+p 3
+p 2
+p 3
+p 2
+p 2
+p 3
+p 3
+p 3
+p 3
+p 2
+p 2
+p 3
+p 4
+p 2
+p 4
+p 3
+p 4
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 5
+p 2
+p 3
+p 2
+p 3
+p 3
+p 3
+p 3
+p 3
+p 2
+p 3
+p 3
+p 3
+p 3
+p 2
+p 2
+p 4
+p 2
+p 4
+p 2
+p 2
+p 2
+p 3
+p 4
+p 4
+p 3
+p 2
+p 2
+p 3
+p 4
+p 3
+p 5
+p 2
+p 3
+p 3
+p 2
+p 5
+p 2
+p 2
+p 5
+p 2
+p 2
+p 3
+p 2
+p 2
+p 4
+p 2
+p 4
+p 2
+p 2
+p 4
+p 2
+p 4
+p 3
+p 2
+p 4
+p 6
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 4
+p 2
+p 3
+p 3
+p 3
+p 3
+p 4
+p 2
+p 2
+p 3
+p 4
+p 3
+p 4
+p 3
+p 4
+p 2
+p 2
+p 2
+p 3
+p 4
+p 5
+p 2
+p 3
+p 2
+p 4
+p 2
+p 5
+p 3
+p 4
+p 3
+p 3
+p 5
+p 3
+p 4
+p 2
+p 3
+p 2
+p 3
+p 2
+p 5
+p 2
+p 2
+p 2
+p 2
+p 2
+p 5
+p 5
+p 2
+p 3
+p 3
+p 2
+p 3
+p 4
+p 5
+p 3
+p 3
+p 2
+p 2
+p 4
+p 2
+p 3
+p 4
+p 2
+p 5
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 5
+p 4
+p 5
+p 3
+p 4
+p 2
+p 3
+p 2
+p 4
+p 3
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 4
+p 3
+p 4
+p 6
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 4
+p 3
+p 2
+p 2
+p 4
+p 2
+p 4
+p 2
+p 5
+p 3
+p 4
+p 5
+p 6
+p 5
+p 4
+p 2
+p 3
+p 3
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 6
+p 3
+p 3
+p 2
+p 2
+p 4
+p 5
+p 4
+p 3
+p 2
+p 3
+p 4
+p 3
+p 2
+p 2
+p 6
+p 6
+p 2
+p 4
+p 3
+p 3
+p 2
+p 2
+p 4
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 4
+p 3
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 4
+p 5
+p 2
+p 2
+p 2
+p 4
+p 2
+p 2
+p 3
+p 2
+p 3
+p 4
+p 3
+p 2
+p 6
+p 3
+p 3
+p 3
+p 2
+p 2
+p 5
+p 3
+p 3
+p 4
+p 2
+p 4
+p 2
+p 3
+p 2
+p 5
+p 2
+p 5
+p 3
+p 3
+p 2
+p 3
+p 2
+p 5
+p 2
+p 3
+p 2
+p 4
+p 2
+p 2
+p 2
+p 3
+p 4
+p 3
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 3
+p 5
+p 2
+p 2
+p 2
+p 3
+p 4
+p 3
+p 3
+p 3
+p 5
+p 2
+p 3
+p 2
+p 5
+p 2
+p 3
+p 2
+p 3
+p 4
+p 3
+p 2
+p 3
+p 2
+p 4
+p 3
+p 2
+p 2
+p 2
+p 2
+p 5
+p 6
+p 2
+p 4
+p 4
+p 2
+p 4
+p 2
+p 3
+p 5
+p 2
+p 4
+p 3
+p 3
+p 2
+p 3
+p 2
+p 5
+p 3
+p 3
+p 3
+p 2
+p 3
+p 3
+p 2
+p 3
+p 4
+p 2
+p 2
+p 4
+p 6
+p 5
+p 3
+p 2
+p 4
+p 4
+p 3
+p 2
+p 4
+p 2
+p 3
+p 2
+p 2
+p 2
+p 4
+p 4
+p 2
+p 4
+p 4
+p 2
+p 2
+p 4
+p 6
+p 4
+p 2
+p 3
+p 3
+p 6
+p 5
+p 3
+p 2
+p 6
+p 2
+p 3
+p 3
+p 2
+p 2
+p 6
+p 4
+p 4
+p 7
+p 5
+p 4
+p 4
+p 2
+p 5
+p 2
+p 2
+p 4
+p 3
+p 3
+p 4
+p 3
+p 4
+p 2
+p 6
+p 3
+p 3
+p 3
+p 2
+p 6
+p 5
+p 2
+p 4
+p 3
+p 3
+p 2
+p 3
+p 3
+p 4
+p 4
+p 4
+p 2
+p 3
+p 2
+p 3
+p 4
+p 3
+p 4
+p 4
+p 5
+p 2
+p 4
+p 3
+p 4
+p 2
+p 5
+p 3
+p 4
+p 5
+p 3
+p 2
+p 6
+p 2
+p 4
+p 5
+p 3
+p 5
+p 3
+p 2
+p 4
+p 3
+p 5
+p 2
+p 4
+p 2
+p 2
+p 3
+p 4
+p 4
+p 2
+p 3
+p 2
+p 8
+p 2
+p 6
+p 3
+p 5
+p 4
+p 4
+p 6
+p 3
+p 5
+p 4
+p 3
+p 3
+p 3
+p 3
+p 4
+p 3
+p 3
+p 2
+p 4
+p 4
+p 4
+p 3
+p 2
+p 3
+p 3
+p 3
+p 2
+p 4
+p 3
+p 7
+p 3
+p 6
+p 3
+p 3
+p 6
+p 3
+p 3
+p 3
+p 3
+p 3
+p 6
+p 2
+p 2
+p 3
+p 4
+p 4
+p 6
+p 2
+p 5
+p 5
+p 3
+p 2
+p 2
+p 3
+p 7
+p 3
+p 7
+p 3
+p 3
+p 5
+p 5
+p 2
+p 4
+p 5
+p 4
+p 4
+p 4
+p 3
+p 3
+p 4
+p 6
+p 3
+p 5
+p 6
+p 2
+p 2
+p 3
+p 6
+p 3
+p 2
+p 2
+p 2
+p 4
+p 2
+p 4
+p 3
+p 3
+p 2
+p 3
+p 4
+p 4
+p 2
+p 4
+p 2
+p 4
+p 6
+p 4
+p 9
+p 4
+p 3
+p 2
+p 3
+p 4
+p 3
+p 2
+p 5
+p 4
+p 4
+p 3
+p 3
+p 4
+p 4
+p 4
+p 3
+p 4
+p 10
+p 2
+p 6
+p 5
+p 3
+p 7
+p 5
+p 4
+p 4
+p 4
+p 3
+p 5
+p 2
+p 6
+p 5
+p 7
+p 2
+p 5
+p 5
+p 3
+p 3
+p 7
+p 5
+p 3
+p 4
+p 3
+p 2
+p 6
+p 5
+p 3
+p 4
+p 6
+p 4
+p 4
+p 2
+p 2
+p 4
+p 6
+p 4
+p 2
+p 4
+p 2
+p 4
+p 2
+p 4
+p 4
+p 3
+p 3
+p 4
+p 6
+p 4
+p 2
+p 4
+p 4
+p 4
+p 2
+p 3
+p 5
+p 3
+p 5
+p 3
+p 3
+p 2
+p 2
+p 3
+p 5
+p 4
+p 3
+p 2
+p 3
+p 3
+p 4
+p 3
+p 4
+p 5
+p 3
+p 4
+p 6
+p 3
+p 7
+p 4
+p 4
+p 4
+p 6
+p 3
+p 2
+p 6
+p 6
+p 8
+p 2
+p 2
+p 5
+p 2
+p 4
+p 6
+p 2
+p 3
+p 5
+p 4
+p 4
+p 4
+p 4
+p 3
+p 4
+p 3
+p 4
+p 6
+p 3
+p 5
+p 5
+p 4
+p 4
+p 4
+p 3
+p 5
+p 3
+p 7
+p 5
+p 2
+p 5
+p 4
+p 2
+p 4
+p 2
+p 6
+p 4
+p 6
+p 4
+p 2
+p 5
+p 2
+p 7
+p 5
+p 4
+p 6
+p 4
+p 4
+p 4
+p 3
+p 4
+p 4
+p 5
+p 5
+p 6
+p 7
+p 5
+p 3
+p 6
+p 3
+p 5
+p 4
+p 4
+p 2
+p 4
+p 6
+p 4
+p 5
+p 3
+p 4
+p 7
+p 3
+p 4
+p 7
+p 3
+p 4
+p 5
+p 3
+p 5
+p 6
+p 3
+p 2
+p 3
+p 5
+p 2
+p 6
+p 3
+p 2
+p 5
+p 6
+p 4
+p 4
+p 3
+p 5
+p 5
+p 2
+p 3
+p 3
+p 6
+p 2
+p 5
+p 6
+p 7
+p 5
+p 6
+p 6
+p 3
+p 5
+p 8
+p 3
+p 3
+p 4
+p 5
+p 2
+p 3
+p 7
+p 4
+p 6
+p 3
+p 5
+p 6
+p 4
+p 2
+p 5
+p 3
+p 2
+p 3
+p 4
+p 3
+p 5
+p 6
+p 2
+p 3
+p 3
+p 4
+p 5
+p 8
+p 3
+p 6
+p 4
+p 9
+p 3
+p 7
+p 5
+p 6
+p 5
+p 7
+p 3
+p 4
+p 5
+p 7
+p 3
+p 6
+p 4
+p 3
+p 5
+p 3
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/GT/bunny2.lod
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/GT/bunny2.lod	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/GT/bunny2.lod	(revision 1092)
@@ -0,0 +1,370829 @@
+v 33063
+v 19664
+v 34577
+v 16015
+v 28345
+v 34906
+v 30022
+v 28635
+v 19666
+v 30718
+v 34603
+v 30123
+v 34619
+v 35043
+v 25574
+v 18637
+v 19593
+v 29633
+v 26463
+v 17891
+v 34827
+v 35880
+v 29567
+v 18650
+v 18802
+v 34849
+v 33723
+v 18829
+v 33539
+v 18522
+v 31213
+v 29445
+v 32599
+v 18704
+v 19647
+v 34214
+v 28028
+v 21570
+v 33351
+v 18792
+v 26105
+v 35031
+v 19419
+v 25747
+v 30802
+v 31639
+v 17460
+v 19449
+v 24298
+v 19234
+v 20091
+v 33201
+v 26815
+v 25007
+v 34100
+v 26602
+v 33685
+v 34535
+v 31783
+v 35855
+v 20502
+v 28394
+v 24611
+v 17953
+v 29788
+v 19413
+v 23866
+v 19109
+v 33096
+v 28050
+v 28615
+v 17913
+v 33846
+v 25421
+v 27515
+v 34112
+v 32071
+v 13322
+v 34331
+v 18533
+v 31285
+v 32394
+v 31102
+v 18868
+v 33813
+v 32416
+v 30730
+v 29685
+v 27077
+v 19068
+v 26336
+v 18931
+v 27938
+v 28904
+v 27386
+v 18206
+v 18892
+v 25117
+v 19823
+v 32491
+v 26404
+v 18559
+v 19434
+v 31717
+v 31496
+v 33555
+v 35856
+v 34167
+v 20160
+v 18724
+v 19288
+v 22880
+v 32282
+v 20454
+v 18506
+v 25080
+v 25388
+v 18472
+v 19331
+v 33259
+v 32707
+v 19555
+v 35875
+v 32635
+v 21349
+v 26506
+v 33507
+v 29616
+v 30823
+v 24983
+v 29100
+v 24931
+v 34345
+v 32117
+v 28072
+v 31937
+v 27318
+v 29671
+v 19405
+v 30506
+v 28302
+v 33859
+v 28034
+v 33782
+v 19075
+v 34635
+v 24337
+v 30425
+v 24660
+v 29712
+v 30337
+v 28091
+v 27284
+v 31093
+v 18165
+v 35874
+v 31429
+v 14535
+v 32075
+v 30515
+v 19476
+v 27797
+v 19547
+v 24058
+v 32472
+v 33908
+v 25011
+v 19437
+v 26396
+v 19541
+v 30983
+v 25361
+v 27863
+v 27311
+v 18960
+v 30713
+v 31971
+v 26980
+v 34621
+v 17773
+v 33941
+v 18613
+v 26545
+v 18686
+v 18448
+v 25947
+v 31107
+v 33712
+v 34227
+v 34730
+v 32007
+v 25665
+v 29494
+v 31186
+v 19680
+v 22699
+v 35000
+v 29222
+v 35072
+v 32522
+v 18653
+v 30503
+v 30218
+v 29919
+v 17915
+v 18404
+v 34090
+v 33108
+v 29001
+v 33826
+v 26693
+v 27291
+v 26236
+v 29424
+v 24706
+v 33014
+v 17976
+v 27951
+v 33892
+v 25859
+v 33775
+v 18904
+v 19380
+v 20005
+v 32670
+v 26022
+v 35350
+v 24428
+v 28859
+v 18282
+v 34445
+v 24381
+v 27399
+v 19451
+v 18536
+v 34508
+v 19610
+v 19411
+v 30904
+v 28698
+v 30275
+v 30803
+v 20284
+v 15525
+v 34642
+v 31383
+v 32330
+v 34627
+v 18523
+v 32268
+v 27425
+v 30447
+v 33971
+v 27051
+v 31805
+v 31830
+v 32400
+v 25825
+v 31436
+v 19367
+v 34868
+v 17648
+v 34190
+v 23435
+v 32910
+v 19111
+v 19668
+v 31176
+v 18031
+v 27564
+v 27783
+v 31352
+v 34149
+v 31351
+v 18217
+v 18071
+v 17928
+v 27343
+v 35519
+v 29547
+v 32820
+v 23378
+v 29463
+v 33325
+v 23450
+v 28276
+v 26284
+v 32379
+v 17756
+v 27762
+v 26966
+v 28492
+v 32805
+v 26084
+v 26829
+v 27370
+v 26827
+v 30066
+v 32705
+v 31931
+v 33652
+v 25479
+v 18513
+v 24370
+v 31202
+v 19326
+v 32613
+v 33698
+v 17660
+v 35265
+v 18728
+v 24568
+v 18127
+v 32792
+v 25565
+v 19112
+v 19491
+v 29051
+v 32865
+v 29371
+v 27245
+v 35308
+v 23455
+v 25488
+v 30944
+v 24218
+v 30535
+v 18552
+v 33778
+v 26196
+v 23055
+v 32476
+v 17919
+v 26699
+v 29956
+v 28572
+v 28733
+v 31983
+v 34126
+v 24504
+v 18396
+v 33168
+v 34825
+v 18738
+v 31234
+v 32359
+v 34066
+v 30927
+v 22445
+v 18771
+v 31439
+v 28768
+v 28850
+v 19153
+v 34705
+v 24985
+v 30890
+v 24480
+v 27905
+v 27387
+v 34433
+v 33586
+v 27852
+v 31616
+v 34502
+v 28189
+v 18864
+v 31774
+v 22249
+v 18598
+v 25914
+v 29216
+v 33116
+v 21399
+v 32033
+v 20736
+v 19094
+v 35668
+v 25657
+v 19248
+v 18851
+v 31455
+v 30157
+v 32767
+v 26863
+v 17994
+v 25810
+v 29991
+v 28907
+v 23546
+v 33580
+v 34500
+v 23655
+v 21110
+v 25397
+v 27686
+v 29865
+v 18805
+v 34260
+v 32567
+v 30999
+v 31656
+v 35914
+v 25594
+v 19612
+v 25380
+v 19511
+v 19344
+v 30564
+v 28322
+v 26687
+v 18727
+v 19750
+v 35906
+v 30142
+v 26639
+v 32431
+v 30968
+v 21044
+v 25680
+v 21560
+v 23292
+v 18932
+v 34343
+v 34479
+v 34544
+v 24403
+v 18381
+v 34577
+v 31357
+v 27513
+v 27565
+v 30797
+v 34649
+v 17794
+v 28476
+v 27891
+v 19382
+v 28040
+v 19370
+v 31790
+v 31066
+v 28197
+v 25383
+v 19352
+v 35359
+v 18585
+v 27858
+v 25053
+v 19594
+v 18812
+v 34745
+v 29128
+v 17527
+v 18636
+v 31474
+v 32780
+v 23564
+v 28297
+v 30259
+v 18053
+v 21237
+v 19258
+v 23719
+v 34456
+v 23331
+v 33283
+v 26420
+v 25083
+v 34079
+v 33646
+v 33648
+v 24782
+v 30690
+v 33864
+v 25355
+v 23103
+v 27271
+v 27063
+v 19172
+v 20506
+v 27309
+v 30718
+v 33814
+v 19353
+v 26112
+v 25168
+v 19714
+v 17599
+v 33067
+v 34683
+v 28307
+v 28279
+v 32810
+v 18056
+v 31866
+v 30965
+v 19590
+v 28321
+v 30111
+v 30144
+v 31547
+v 27552
+v 32915
+v 33418
+v 34960
+v 34363
+v 33785
+v 27530
+v 34682
+v 30758
+v 18541
+v 19452
+v 31640
+v 33678
+v 25954
+v 28594
+v 24901
+v 19655
+v 25303
+v 19260
+v 34494
+v 30478
+v 17887
+v 30042
+v 25131
+v 25327
+v 35675
+v 35232
+v 32924
+v 24624
+v 27089
+v 31792
+v 32162
+v 18870
+v 27580
+v 28887
+v 34257
+v 34811
+v 19462
+v 18530
+v 26247
+v 21992
+v 31959
+v 32833
+v 32225
+v 28439
+v 33872
+v 18853
+v 24730
+v 28657
+v 19198
+v 29304
+v 29194
+v 35059
+v 29881
+v 31073
+v 22808
+v 27682
+v 19386
+v 30709
+v 27889
+v 34789
+v 19767
+v 30352
+v 33235
+v 32337
+v 30921
+v 18855
+v 28651
+v 34660
+v 19408
+v 26211
+v 31621
+v 19180
+v 33477
+v 25612
+v 30460
+v 28553
+v 33081
+v 33965
+v 29978
+v 18989
+v 32409
+v 27729
+v 22480
+v 30783
+v 19546
+v 27188
+v 30093
+v 27620
+v 19816
+v 35930
+v 23821
+v 32623
+v 31750
+v 33671
+v 24575
+v 31560
+v 34259
+v 18293
+v 26778
+v 24846
+v 27482
+v 31552
+v 35324
+v 23462
+v 19394
+v 28995
+v 28008
+v 26278
+v 28335
+v 21597
+v 18690
+v 29285
+v 18900
+v 24257
+v 27118
+v 33758
+v 26541
+v 34212
+v 23997
+v 35219
+v 18361
+v 35938
+v 31912
+v 31149
+v 31028
+v 14258
+v 24943
+v 19871
+v 18929
+v 26418
+v 33199
+v 29657
+v 26515
+v 27540
+v 27534
+v 28788
+v 30018
+v 25952
+v 33438
+v 22972
+v 26165
+v 20655
+v 35866
+v 31751
+v 19803
+v 30403
+v 33100
+v 21375
+v 33357
+v 31397
+v 18865
+v 32748
+v 19265
+v 20519
+v 27674
+v 34194
+v 20928
+v 34490
+v 25172
+v 19364
+v 23365
+v 27949
+v 33082
+v 29634
+v 33951
+v 35140
+v 31348
+v 32526
+v 19346
+v 27351
+v 34991
+v 25371
+v 34842
+v 24836
+v 25439
+v 31831
+v 21679
+v 18748
+v 28178
+v 29893
+v 35843
+v 19181
+v 34944
+v 18520
+v 22352
+v 19376
+v 29962
+v 26413
+v 34453
+v 18652
+v 29549
+v 18980
+v 31061
+v 29294
+v 19211
+v 19341
+v 29037
+v 22943
+v 33411
+v 31125
+v 19764
+v 34077
+v 19325
+v 18620
+v 29072
+v 17482
+v 28198
+v 35032
+v 18700
+v 26290
+v 33796
+v 34472
+v 28119
+v 28789
+v 21592
+v 20021
+v 27235
+v 33812
+v 19209
+v 30120
+v 25693
+v 23930
+v 29914
+v 29619
+v 19361
+v 22565
+v 30473
+v 25478
+v 15439
+v 26686
+v 26037
+v 23856
+v 19614
+v 29286
+v 34725
+v 30631
+v 18521
+v 34464
+v 19617
+v 18175
+v 31077
+v 29481
+v 33711
+v 32706
+v 34592
+v 24794
+v 33064
+v 27924
+v 23712
+v 33808
+v 20313
+v 31109
+v 32469
+v 19334
+v 31088
+v 35536
+v 19314
+v 25332
+v 29870
+v 25405
+v 18699
+v 25349
+v 29181
+v 21728
+v 35076
+v 31197
+v 26187
+v 29771
+v 29965
+v 19257
+v 19355
+v 27155
+v 27894
+v 35880
+v 19481
+v 25836
+v 28330
+v 28170
+v 27261
+v 19057
+v 31001
+v 29468
+v 34689
+v 28467
+v 26005
+v 27633
+v 34046
+v 23505
+v 28399
+v 33880
+v 26083
+v 29862
+v 25564
+v 19785
+v 25670
+v 26152
+v 34071
+v 30337
+v 30902
+v 26079
+v 27385
+v 19358
+v 26276
+v 34045
+v 30907
+v 30277
+v 27197
+v 17531
+v 17733
+v 22999
+v 34244
+v 20222
+v 19517
+v 19510
+v 31010
+v 25988
+v 28220
+v 30884
+v 23849
+v 18861
+v 32922
+v 26810
+v 24593
+v 34153
+v 25232
+v 33620
+v 26434
+v 25434
+v 20625
+v 33747
+v 24852
+v 30575
+v 28403
+v 29986
+v 26642
+v 28437
+v 19396
+v 25688
+v 33861
+v 26147
+v 33229
+v 29374
+v 28407
+v 19208
+v 25578
+v 30110
+v 25609
+v 31882
+v 26856
+v 33715
+v 20257
+v 19676
+v 19653
+v 18794
+v 28612
+v 24710
+v 19317
+v 30264
+v 19840
+v 29570
+v 30123
+v 23887
+v 25650
+v 28828
+v 32760
+v 33016
+v 24180
+v 33577
+v 19116
+v 30790
+v 26345
+v 27252
+v 19098
+v 34647
+v 28438
+v 19139
+v 30027
+v 19651
+v 27809
+v 27855
+v 26654
+v 20117
+v 24930
+v 19165
+v 29759
+v 23373
+v 20262
+v 33078
+v 33918
+v 31729
+v 22904
+v 31761
+v 22823
+v 32295
+v 19233
+v 17995
+v 26002
+v 19727
+v 26408
+v 33559
+v 26964
+v 34622
+v 19282
+v 33617
+v 29700
+v 31873
+v 20136
+v 25781
+v 34048
+v 24752
+v 24406
+v 34083
+v 19369
+v 29724
+v 34129
+v 17677
+v 25758
+v 28602
+v 22812
+v 30862
+v 17865
+v 25210
+v 33736
+v 23078
+v 31180
+v 35075
+v 33917
+v 30246
+v 19605
+v 24883
+v 26617
+v 25773
+v 33821
+v 29483
+v 19568
+v 18635
+v 31963
+v 19533
+v 28865
+v 21718
+v 30776
+v 18914
+v 32093
+v 21339
+v 28520
+v 31573
+v 31031
+v 28961
+v 25406
+v 29223
+v 19409
+v 26500
+v 20904
+v 28188
+v 28677
+v 25569
+v 33035
+v 26123
+v 25331
+v 26823
+v 30925
+v 20456
+v 28250
+v 34404
+v 27376
+v 26610
+v 31522
+v 23404
+v 21914
+v 19468
+v 33404
+v 34681
+v 25072
+v 31654
+v 30733
+v 29997
+v 34107
+v 19745
+v 30883
+v 29794
+v 24649
+v 33121
+v 31161
+v 18260
+v 24487
+v 30837
+v 32747
+v 30077
+v 19733
+v 34755
+v 18981
+v 22902
+v 26298
+v 25359
+v 20276
+v 26406
+v 33409
+v 33597
+v 29853
+v 34929
+v 34403
+v 19455
+v 31057
+v 32862
+v 21429
+v 35861
+v 29450
+v 27593
+v 31122
+v 25596
+v 27600
+v 23966
+v 26118
+v 30935
+v 33516
+v 26385
+v 29343
+v 20323
+v 27078
+v 33962
+v 26609
+v 19502
+v 30213
+v 35903
+v 34756
+v 30321
+v 18186
+v 20561
+v 27928
+v 30129
+v 29548
+v 34894
+v 24693
+v 27253
+v 19269
+v 19097
+v 31566
+v 29204
+v 19362
+v 35493
+v 29309
+v 23703
+v 20139
+v 35043
+v 28418
+v 18440
+v 29717
+v 31225
+v 33594
+v 28736
+v 29528
+v 27319
+v 30368
+v 20917
+v 25463
+v 35589
+v 28890
+v 27171
+v 26989
+v 18250
+v 18730
+v 32372
+v 22042
+v 29451
+v 23215
+v 30954
+v 18313
+v 26566
+v 30680
+v 19229
+v 25432
+v 14773
+v 26775
+v 22017
+v 27462
+v 20509
+v 19119
+v 23317
+v 25017
+v 22510
+v 30304
+v 30141
+v 25316
+v 19416
+v 22267
+v 31977
+v 23058
+v 20478
+v 21154
+v 29524
+v 24594
+v 27950
+v 18629
+v 31092
+v 23447
+v 31829
+v 19786
+v 30002
+v 32824
+v 19597
+v 20656
+v 32821
+v 29210
+v 32797
+v 26394
+v 27254
+v 30537
+v 29762
+v 18968
+v 30719
+v 20107
+v 33830
+v 29923
+v 25849
+v 19654
+v 28024
+v 30423
+v 26572
+v 31549
+v 19695
+v 35225
+v 31679
+v 19144
+v 29648
+v 20873
+v 34763
+v 33855
+v 18946
+v 33160
+v 19525
+v 24058
+v 27287
+v 26031
+v 25983
+v 23358
+v 27707
+v 23723
+v 26263
+v 19497
+v 26570
+v 22667
+v 34715
+v 28816
+v 33587
+v 19287
+v 33110
+v 31542
+v 26279
+v 33544
+v 29443
+v 32863
+v 26660
+v 32944
+v 28108
+v 33953
+v 28792
+v 26421
+v 20320
+v 34016
+v 25955
+v 26753
+v 19218
+v 23779
+v 18253
+v 26145
+v 35175
+v 27575
+v 27969
+v 25319
+v 20155
+v 28247
+v 18508
+v 25527
+v 28400
+v 33028
+v 19421
+v 26004
+v 26506
+v 27621
+v 27691
+v 26033
+v 26202
+v 22794
+v 31946
+v 30899
+v 20484
+v 28547
+v 28999
+v 24834
+v 28294
+v 31801
+v 31767
+v 20066
+v 31022
+v 28001
+v 35879
+v 27038
+v 31000
+v 34646
+v 27569
+v 23578
+v 33666
+v 26270
+v 32185
+v 32218
+v 24551
+v 22157
+v 28676
+v 26088
+v 34200
+v 32687
+v 28264
+v 31536
+v 25314
+v 27111
+v 33707
+v 23981
+v 24387
+v 21837
+v 30046
+v 26061
+v 21006
+v 27447
+v 26578
+v 32905
+v 23459
+v 19598
+v 30744
+v 21310
+v 30268
+v 30844
+v 28013
+v 20809
+v 21533
+v 19274
+v 29024
+v 27082
+v 24368
+v 18516
+v 21451
+v 29163
+v 35022
+v 33428
+v 32858
+v 29519
+v 33533
+v 34134
+v 26213
+v 26927
+v 21780
+v 33598
+v 34831
+v 20340
+v 27925
+v 20042
+v 30908
+v 20087
+v 22097
+v 19381
+v 27952
+v 20170
+v 20402
+v 33332
+v 33592
+v 23622
+v 27281
+v 22722
+v 28608
+v 29728
+v 20892
+v 20939
+v 20627
+v 28975
+v 24096
+v 26030
+v 21763
+v 21206
+v 33137
+v 20548
+v 28764
+v 19939
+v 33690
+v 28410
+v 20913
+v 27452
+v 21933
+v 26024
+v 26727
+v 20521
+v 31693
+v 18839
+v 32161
+v 33021
+v 34899
+v 33070
+v 35830
+v 25410
+v 33692
+v 26407
+v 23976
+v 32313
+v 19668
+v 20368
+v 32819
+v 26755
+v 26982
+v 32757
+v 32737
+v 30200
+v 25388
+v 23160
+v 33705
+v 33377
+v 20854
+v 24086
+v 23351
+v 30105
+v 25334
+v 21276
+v 26504
+v 32793
+v 32700
+v 31089
+v 19830
+v 34417
+v 29089
+v 20586
+v 26430
+v 34102
+v 17889
+v 34977
+v 22425
+v 26013
+v 31756
+v 32112
+v 21029
+v 20787
+v 26414
+v 28417
+v 24208
+v 27034
+v 24207
+v 28378
+v 27543
+v 26465
+v 21745
+v 32942
+v 28731
+v 19319
+v 21499
+v 20351
+v 27531
+v 30982
+v 20986
+v 29715
+v 24712
+v 22226
+v 21944
+v 32806
+v 26283
+v 24411
+v 22994
+v 27885
+v 28954
+v 19506
+v 31518
+v 25206
+v 29312
+v 27554
+v 27031
+v 27627
+v 34605
+v 20148
+v 20470
+v 33691
+v 20713
+v 21523
+v 26791
+v 28688
+v 26627
+v 25194
+v 35293
+v 30103
+v 32128
+v 27678
+v 26492
+v 21423
+v 33150
+v 25646
+v 22068
+v 26783
+v 19161
+v 20217
+v 26381
+v 25074
+v 29876
+v 28149
+v 19774
+v 21427
+v 33504
+v 31438
+v 33591
+v 34949
+v 20889
+v 31875
+v 26289
+v 22672
+v 20648
+v 31184
+v 32552
+v 26028
+v 34513
+v 29058
+v 30666
+v 30353
+v 29444
+v 28174
+v 22332
+v 26383
+v 25228
+v 20778
+v 33479
+v 30506
+v 26995
+v 25436
+v 20563
+v 33569
+v 30166
+v 20504
+v 20462
+v 25984
+v 30563
+v 29539
+v 35215
+v 28667
+v 27389
+v 27865
+v 29954
+v 20940
+v 33397
+v 20547
+v 22982
+v 29310
+v 21116
+v 23424
+v 27549
+v 28237
+v 21467
+v 31138
+v 19994
+v 28395
+v 20446
+v 21473
+v 31670
+v 21011
+v 30991
+v 20489
+v 20578
+v 30928
+v 28632
+v 31267
+v 20538
+v 20348
+v 30137
+v 20584
+v 33904
+v 20620
+v 28388
+v 32971
+v 26876
+v 32290
+v 30601
+v 29145
+v 30174
+v 30955
+v 33164
+v 31587
+v 21480
+v 20369
+v 27085
+v 26777
+v 33270
+v 32362
+v 25207
+v 19879
+v 25704
+v 20646
+v 24738
+v 19613
+v 35576
+v 26007
+v 23125
+v 33176
+v 27295
+v 30204
+v 26702
+v 27280
+v 33422
+v 33541
+v 29256
+v 25136
+v 31843
+v 19821
+v 29571
+v 33122
+v 21200
+v 31142
+v 25923
+v 20903
+v 33185
+v 31738
+v 34103
+v 27576
+v 30179
+v 20111
+v 26132
+v 30285
+v 31782
+v 34872
+v 20230
+v 20009
+v 33454
+v 26496
+v 28998
+v 31667
+v 20482
+v 32753
+v 31287
+v 26513
+v 26679
+v 21332
+v 31605
+v 26282
+v 22099
+v 19635
+v 27127
+v 20661
+v 20204
+v 29389
+v 19957
+v 27415
+v 34887
+v 20062
+v 23258
+v 26460
+v 20545
+v 28713
+v 19969
+v 29612
+v 28510
+v 31980
+v 33373
+v 26140
+v 29164
+v 25616
+v 21671
+v 29076
+v 32719
+v 20205
+v 32145
+v 24603
+v 30147
+v 26808
+v 33469
+v 31111
+v 20608
+v 33551
+v 19883
+v 19814
+v 30876
+v 33419
+v 29150
+v 22771
+v 30721
+v 30399
+v 27405
+v 35801
+v 26306
+v 27716
+v 31317
+v 20270
+v 33149
+v 25254
+v 29316
+v 26321
+v 26908
+v 20229
+v 19457
+v 26110
+v 33632
+v 20442
+v 29871
+v 33379
+v 20673
+v 19672
+v 32605
+v 34380
+v 34808
+v 32507
+v 30986
+v 28392
+v 30394
+v 22385
+v 19895
+v 20626
+v 24703
+v 33208
+v 29293
+v 31034
+v 32685
+v 30553
+v 33643
+v 33154
+v 21087
+v 20663
+v 20533
+v 34788
+v 19765
+v 26892
+v 30181
+v 22018
+v 33925
+v 26232
+v 34680
+v 27595
+v 34154
+v 22858
+v 28544
+v 19885
+v 20319
+v 26265
+v 34676
+v 33184
+v 29937
+v 20807
+v 32160
+v 22047
+v 27361
+v 24376
+v 24336
+v 33155
+v 26422
+v 32352
+v 29079
+v 32378
+v 20518
+v 27992
+v 26176
+v 19400
+v 34358
+v 20142
+v 27774
+v 25263
+v 28804
+v 23687
+v 29152
+v 23717
+v 28498
+v 22792
+v 24800
+v 25558
+v 28274
+v 19854
+v 26264
+v 24605
+v 23784
+v 30088
+v 31913
+v 29029
+v 23965
+v 26935
+v 33141
+v 29829
+v 35093
+v 33484
+v 20024
+v 19995
+v 25345
+v 23261
+v 20999
+v 29930
+v 21018
+v 20597
+v 25509
+v 20947
+v 19999
+v 20472
+v 27777
+v 20296
+v 19917
+v 33631
+v 33885
+v 19673
+v 32898
+v 19839
+v 27106
+v 33695
+v 26097
+v 21235
+v 21187
+v 28361
+v 20424
+v 25246
+v 27712
+v 30609
+v 27996
+v 32953
+v 27879
+v 33427
+v 19920
+v 34655
+v 30637
+v 32231
+v 35280
+v 26569
+v 29126
+v 20613
+v 25153
+v 25054
+v 31998
+v 28003
+v 32382
+v 25328
+v 20279
+v 29866
+v 33682
+v 20801
+v 34963
+v 20965
+v 27047
+v 31294
+v 32196
+v 23528
+v 32498
+v 31986
+v 29075
+v 23183
+v 20546
+v 25071
+v 27317
+v 21765
+v 27557
+v 26539
+v 22245
+v 20590
+v 27037
+v 27028
+v 25297
+v 33019
+v 29798
+v 32648
+v 32975
+v 19780
+v 32367
+v 33640
+v 33770
+v 20223
+v 29049
+v 24103
+v 32486
+v 27019
+v 26186
+v 19806
+v 20728
+v 26175
+v 21754
+v 31139
+v 31087
+v 31243
+v 21208
+v 28990
+v 23211
+v 27940
+v 20706
+v 25705
+v 28323
+v 30697
+v 20103
+v 34720
+v 32302
+v 32675
+v 23573
+v 27246
+v 24281
+v 26754
+v 29949
+v 28778
+v 30827
+v 20210
+v 19916
+v 30736
+v 24275
+v 21079
+v 25242
+v 20756
+v 34450
+v 26457
+v 27877
+v 22240
+v 29529
+v 29546
+v 20544
+v 29234
+v 30229
+v 22127
+v 34487
+v 34170
+v 33958
+v 23304
+v 29350
+v 25403
+v 21185
+v 26178
+v 31500
+v 30545
+v 25904
+v 34157
+v 30842
+v 28808
+v 27240
+v 29028
+v 31820
+v 27159
+v 27727
+v 20147
+v 20883
+v 25967
+v 32789
+v 21256
+v 29344
+v 20372
+v 26590
+v 28565
+v 33074
+v 21059
+v 25354
+v 26162
+v 21010
+v 29713
+v 20526
+v 23108
+v 31788
+v 32012
+v 25910
+v 25272
+v 27290
+v 28785
+v 29375
+v 19771
+v 30550
+v 26267
+v 30351
+v 31779
+v 19773
+v 27163
+v 28251
+v 30529
+v 34781
+v 27023
+v 20225
+v 25995
+v 20693
+v 21336
+v 24493
+v 22952
+v 35596
+v 33903
+v 29686
+v 20128
+v 34015
+v 31426
+v 25785
+v 19912
+v 33952
+v 32323
+v 20400
+v 20773
+v 29886
+v 21545
+v 26149
+v 30692
+v 26268
+v 30565
+v 34370
+v 32544
+v 26723
+v 31609
+v 28030
+v 21262
+v 30504
+v 21938
+v 21595
+v 27551
+v 19849
+v 28587
+v 20200
+v 35213
+v 35267
+v 22677
+v 30626
+v 27813
+v 19940
+v 33209
+v 31269
+v 27489
+v 20719
+v 31537
+v 30826
+v 30889
+v 30603
+v 30740
+v 27675
+v 30125
+v 21033
+v 21407
+v 20101
+v 31927
+v 20048
+v 32198
+v 22271
+v 26629
+v 26905
+v 31612
+v 27131
+v 21140
+v 25531
+v 34821
+v 22116
+v 20679
+v 27915
+v 25808
+v 26191
+v 28599
+v 29879
+v 23685
+v 34308
+v 32336
+v 34297
+v 32691
+v 32888
+v 19884
+v 21040
+v 28870
+v 30335
+v 23835
+v 31220
+v 20047
+v 32549
+v 24377
+v 20969
+v 21404
+v 27857
+v 24236
+v 32548
+v 31254
+v 27514
+v 26931
+v 30116
+v 27801
+v 32011
+v 32485
+v 28561
+v 30330
+v 31626
+v 25043
+v 29277
+v 25626
+v 20691
+v 30518
+v 31755
+v 35138
+v 20991
+v 19796
+v 32774
+v 25579
+v 27825
+v 26428
+v 33766
+v 33018
+v 26240
+v 32712
+v 30576
+v 24989
+v 20747
+v 28849
+v 24828
+v 32215
+v 32916
+v 19842
+v 19936
+v 31652
+v 34724
+v 32383
+v 26795
+v 28734
+v 30701
+v 35296
+v 32513
+v 23781
+v 25733
+v 21313
+v 21181
+v 24708
+v 28227
+v 31065
+v 34309
+v 24386
+v 29780
+v 22186
+v 20383
+v 20631
+v 20735
+v 25204
+v 21260
+v 35820
+v 32276
+v 25935
+v 27372
+v 32458
+v 34631
+v 29573
+v 29147
+v 32204
+v 31373
+v 27380
+v 29553
+v 19800
+v 27647
+v 29418
+v 21953
+v 27005
+v 25352
+v 23088
+v 32547
+v 32998
+v 25516
+v 20806
+v 21125
+v 24518
+v 29753
+v 21095
+v 28371
+v 32029
+v 24027
+v 26437
+v 19747
+v 28542
+v 26020
+v 32013
+v 19993
+v 22729
+v 30887
+v 35700
+v 23559
+v 27533
+v 32602
+v 32335
+v 30227
+v 25030
+v 19316
+v 32658
+v 21082
+v 30516
+v 21827
+v 21798
+v 29082
+v 33788
+v 24433
+v 27173
+v 33570
+v 21153
+v 32471
+v 27459
+v 28317
+v 23666
+v 19826
+v 34979
+v 33453
+v 33401
+v 29594
+v 30616
+v 30855
+v 20813
+v 29832
+v 27788
+v 31119
+v 35191
+v 21074
+v 20132
+v 26493
+v 31545
+v 33767
+v 23322
+v 26878
+v 20698
+v 31214
+v 28479
+v 26711
+v 21472
+v 34555
+v 34416
+v 28089
+v 20105
+v 35889
+v 31588
+v 27833
+v 20884
+v 31041
+v 21312
+v 21506
+v 20414
+v 19522
+v 25857
+v 23891
+v 32195
+v 34139
+v 21885
+v 19864
+v 26332
+v 20798
+v 32206
+v 31233
+v 20046
+v 20702
+v 35233
+v 30117
+v 27673
+v 20721
+v 30203
+v 26925
+v 20740
+v 26277
+v 26252
+v 29165
+v 24009
+v 33303
+v 32035
+v 20923
+v 25827
+v 34711
+v 29595
+v 20119
+v 24216
+v 23318
+v 30730
+v 25012
+v 28124
+v 29969
+v 25547
+v 32034
+v 30164
+v 32062
+v 20272
+v 20602
+v 29116
+v 34760
+v 33197
+v 20077
+v 20515
+v 35285
+v 25373
+v 32903
+v 19737
+v 25521
+v 28774
+v 20774
+v 31006
+v 32533
+v 33777
+v 20668
+v 24799
+v 22082
+v 20738
+v 33485
+v 32385
+v 20173
+v 21002
+v 26551
+v 26122
+v 27639
+v 27652
+v 21384
+v 28585
+v 23222
+v 35190
+v 26730
+v 35669
+v 21353
+v 30415
+v 23097
+v 20287
+v 26071
+v 28920
+v 20717
+v 28365
+v 31958
+v 32266
+v 30170
+v 29802
+v 32028
+v 28725
+v 21172
+v 26933
+v 21333
+v 34253
+v 24932
+v 20653
+v 27207
+v 25514
+v 29902
+v 33726
+v 29168
+v 20697
+v 32982
+v 20746
+v 20041
+v 33086
+v 26661
+v 30319
+v 33183
+v 29283
+v 29088
+v 30219
+v 25015
+v 28707
+v 24586
+v 32911
+v 35836
+v 28104
+v 26972
+v 31684
+v 20887
+v 35479
+v 24959
+v 20921
+v 26215
+v 33415
+v 33076
+v 28794
+v 31890
+v 32856
+v 30502
+v 25214
+v 31391
+v 24819
+v 25929
+v 26911
+v 27211
+v 20799
+v 20517
+v 19964
+v 27201
+v 20415
+v 23735
+v 31817
+v 32310
+v 28972
+v 26944
+v 31534
+v 28470
+v 27929
+v 32997
+v 24647
+v 25029
+v 26090
+v 28801
+v 20748
+v 25513
+v 21942
+v 24905
+v 20318
+v 20503
+v 34483
+v 20616
+v 27636
+v 21337
+v 24166
+v 27861
+v 30145
+v 21003
+v 27436
+v 23715
+v 20013
+v 20192
+v 30788
+v 21186
+v 20690
+v 19962
+v 26857
+v 21215
+v 25311
+v 35169
+v 29896
+v 21548
+v 31203
+v 33659
+v 21069
+v 28413
+v 25211
+v 30283
+v 29518
+v 31485
+v 35039
+v 26681
+v 32212
+v 21327
+v 28930
+v 31915
+v 29716
+v 20837
+v 25305
+v 28854
+v 28879
+v 29423
+v 35251
+v 30780
+v 29844
+v 31127
+v 27150
+v 27994
+v 20650
+v 21692
+v 35279
+v 21115
+v 21111
+v 24666
+v 33568
+v 25741
+v 32417
+v 30498
+v 24929
+v 21282
+v 22343
+v 20830
+v 25292
+v 31356
+v 19928
+v 20303
+v 20908
+v 20237
+v 21460
+v 21463
+v 33615
+v 33301
+v 29242
+v 20040
+v 26596
+v 21777
+v 29004
+v 30694
+v 33195
+v 19866
+v 30766
+v 30696
+v 21017
+v 32229
+v 31268
+v 31419
+v 23150
+v 32427
+v 19915
+v 25944
+v 28656
+v 20604
+v 29735
+v 25390
+v 29817
+v 33901
+v 26837
+v 21976
+v 30314
+v 23973
+v 33636
+v 27487
+v 20247
+v 21039
+v 25501
+v 30663
+v 31282
+v 23601
+v 24802
+v 29081
+v 27589
+v 29557
+v 20058
+v 29719
+v 25653
+v 35123
+v 20998
+v 33942
+v 20803
+v 23851
+v 20669
+v 32537
+v 35489
+v 26891
+v 22832
+v 29935
+v 21159
+v 26124
+v 29471
+v 19697
+v 30195
+v 32404
+v 35344
+v 22570
+v 30724
+v 25193
+v 32828
+v 25370
+v 28525
+v 19973
+v 20996
+v 29484
+v 25227
+v 25903
+v 26069
+v 32703
+v 23451
+v 20172
+v 28947
+v 19987
+v 33749
+v 20833
+v 27694
+v 29925
+v 26016
+v 20808
+v 32298
+v 30253
+v 27243
+v 26158
+v 30294
+v 23299
+v 23627
+v 21023
+v 26190
+v 20206
+v 27561
+v 32051
+v 21051
+v 33745
+v 34793
+v 32479
+v 31191
+v 20651
+v 19633
+v 24550
+v 23116
+v 20630
+v 19869
+v 26318
+v 35264
+v 26138
+v 26017
+v 31907
+v 32437
+v 18236
+v 33725
+v 30979
+v 31336
+v 32678
+v 29721
+v 28426
+v 33041
+v 25039
+v 26373
+v 20471
+v 28653
+v 20836
+v 28401
+v 21173
+v 29428
+v 34913
+v 29290
+v 25444
+v 27754
+v 27076
+v 20782
+v 26074
+v 23155
+v 24407
+v 21617
+v 28255
+v 24826
+v 32250
+v 27585
+v 28464
+v 28767
+v 28783
+v 20914
+v 29007
+v 35229
+v 32615
+v 25694
+v 28201
+v 25333
+v 35779
+v 27025
+v 31727
+v 24897
+v 19255
+v 33825
+v 20811
+v 30443
+v 21886
+v 26915
+v 20015
+v 34600
+v 34784
+v 21043
+v 20289
+v 20045
+v 30258
+v 32782
+v 27977
+v 24471
+v 19766
+v 33667
+v 25179
+v 33746
+v 27720
+v 29531
+v 27520
+v 20617
+v 19657
+v 28541
+v 29900
+v 34292
+v 19492
+v 20758
+v 34394
+v 32909
+v 19798
+v 28339
+v 21642
+v 35756
+v 21649
+v 25979
+v 28703
+v 29377
+v 21458
+v 32242
+v 25037
+v 32047
+v 26948
+v 25956
+v 23259
+v 21341
+v 30769
+v 26849
+v 24911
+v 33668
+v 30835
+v 34529
+v 21205
+v 28043
+v 21264
+v 21100
+v 25330
+v 20992
+v 20954
+v 21505
+v 29855
+v 20644
+v 22759
+v 31923
+v 22927
+v 23674
+v 31868
+v 20675
+v 30974
+v 34645
+v 24538
+v 22037
+v 32111
+v 31828
+v 29702
+v 25867
+v 30265
+v 30525
+v 20268
+v 21122
+v 18545
+v 31315
+v 27703
+v 32535
+v 20701
+v 32676
+v 31789
+v 20302
+v 31928
+v 26183
+v 33227
+v 25661
+v 34870
+v 27726
+v 26861
+v 34774
+v 33439
+v 28678
+v 30073
+v 31101
+v 32840
+v 26621
+v 24888
+v 20552
+v 23511
+v 25116
+v 31194
+v 22687
+v 32050
+v 32776
+v 34507
+v 26322
+v 23471
+v 21892
+v 28154
+v 32389
+v 32344
+v 21042
+v 34632
+v 33384
+v 26218
+v 30461
+v 21517
+v 19817
+v 30096
+v 24652
+v 20885
+v 33400
+v 30191
+v 26471
+v 20659
+v 27226
+v 27353
+v 27367
+v 31895
+v 34422
+v 20757
+v 30269
+v 22126
+v 28523
+v 23440
+v 28035
+v 19867
+v 20347
+v 33827
+v 31074
+v 21488
+v 25818
+v 22322
+v 32571
+v 30474
+v 20427
+v 20080
+v 28758
+v 25417
+v 21248
+v 25924
+v 21501
+v 26531
+v 26039
+v 19722
+v 31896
+v 34795
+v 20384
+v 32187
+v 22298
+v 30895
+v 21520
+v 31009
+v 25159
+v 34852
+v 33426
+v 26853
+v 25021
+v 33731
+v 28342
+v 29348
+v 21796
+v 26557
+v 21889
+v 21364
+v 30378
+v 21373
+v 29639
+v 34395
+v 30644
+v 22713
+v 21213
+v 21723
+v 27275
+v 20633
+v 28452
+v 28818
+v 32796
+v 26080
+v 26615
+v 33899
+v 24948
+v 27528
+v 21741
+v 21316
+v 32649
+v 22604
+v 28141
+v 31569
+v 24235
+v 20052
+v 28697
+v 26402
+v 28882
+v 29740
+v 20752
+v 20100
+v 24226
+v 22619
+v 29046
+v 19751
+v 32716
+v 33874
+v 22895
+v 34005
+v 21203
+v 28680
+v 23810
+v 31058
+v 32616
+v 20700
+v 19715
+v 21201
+v 23038
+v 33006
+v 27414
+v 27887
+v 35693
+v 20819
+v 28002
+v 28630
+v 26965
+v 32869
+v 31055
+v 20789
+v 21183
+v 19688
+v 26698
+v 20244
+v 30898
+v 20273
+v 25213
+v 33838
+v 33719
+v 30356
+v 25843
+v 32306
+v 33694
+v 20619
+v 24684
+v 23042
+v 26485
+v 19876
+v 34575
+v 30989
+v 32637
+v 25033
+v 29400
+v 25350
+v 25442
+v 27961
+v 27583
+v 20763
+v 20703
+v 35598
+v 27444
+v 21766
+v 21684
+v 29776
+v 26745
+v 30586
+v 35147
+v 28903
+v 33505
+v 30704
+v 26606
+v 31944
+v 26822
+v 31080
+v 27920
+v 25548
+v 29987
+v 31002
+v 34583
+v 21641
+v 19891
+v 28847
+v 32935
+v 35923
+v 32443
+v 20776
+v 33771
+v 29747
+v 21089
+v 31942
+v 28269
+v 33836
+v 26103
+v 25060
+v 26817
+v 35886
+v 33552
+v 27113
+v 20640
+v 23916
+v 21983
+v 21268
+v 25687
+v 33362
+v 20006
+v 33535
+v 20235
+v 25782
+v 32081
+v 24034
+v 20742
+v 32933
+v 32158
+v 25288
+v 28860
+v 35746
+v 29767
+v 32256
+v 29059
+v 28913
+v 19989
+v 20919
+v 33739
+v 23231
+v 34762
+v 29913
+v 26733
+v 31557
+v 28760
+v 20761
+v 20751
+v 26094
+v 27328
+v 26975
+v 28344
+v 31909
+v 20846
+v 25498
+v 29703
+v 21099
+v 33200
+v 21080
+v 25042
+v 20530
+v 33824
+v 34221
+v 30977
+v 28488
+v 21387
+v 24968
+v 29264
+v 26962
+v 24600
+v 20485
+v 20968
+v 29698
+v 20069
+v 29917
+v 25492
+v 25142
+v 20618
+v 28194
+v 34243
+v 21792
+v 34289
+v 33926
+v 33532
+v 35303
+v 30549
+v 28670
+v 29384
+v 20834
+v 21750
+v 28867
+v 34797
+v 23780
+v 27035
+v 32263
+v 25353
+v 34856
+v 25996
+v 30067
+v 28806
+v 24070
+v 26613
+v 20711
+v 28963
+v 20984
+v 26405
+v 32181
+v 31984
+v 33177
+v 19922
+v 28935
+v 33337
+v 25461
+v 32405
+v 32001
+v 35295
+v 28968
+v 32902
+v 28299
+v 29603
+v 33847
+v 34505
+v 22115
+v 20356
+v 23812
+v 23742
+v 27635
+v 20685
+v 29080
+v 20725
+v 31003
+v 32580
+v 35514
+v 19675
+v 19726
+v 22121
+v 34754
+v 29211
+v 25937
+v 27931
+v 20829
+v 21330
+v 30810
+v 25027
+v 29805
+v 21719
+v 32642
+v 28107
+v 28695
+v 34320
+v 31187
+v 19802
+v 20219
+v 28000
+v 19734
+v 20893
+v 19972
+v 29186
+v 33202
+v 23382
+v 20683
+v 31308
+v 35809
+v 33510
+v 30038
+v 23688
+v 35103
+v 20242
+v 26440
+v 19279
+v 23175
+v 27782
+v 27202
+v 19958
+v 31641
+v 25435
+v 20744
+v 29016
+v 19859
+v 24422
+v 31599
+v 21130
+v 19846
+v 20012
+v 25065
+v 21050
+v 29577
+v 20528
+v 27438
+v 20622
+v 21538
+v 25580
+v 23879
+v 30813
+v 29062
+v 23497
+v 29680
+v 33156
+v 22133
+v 34193
+v 31201
+v 21098
+v 20306
+v 35249
+v 20869
+v 35250
+v 30360
+v 22785
+v 26036
+v 24018
+v 34855
+v 30774
+v 20805
+v 21068
+v 29704
+v 26494
+v 19787
+v 31628
+v 27668
+v 20186
+v 33210
+v 20760
+v 20143
+v 33882
+v 34026
+v 20487
+v 25868
+v 32731
+v 21182
+v 19968
+v 30985
+v 30819
+v 28759
+v 20388
+v 20642
+v 30029
+v 23236
+v 34330
+v 26581
+v 20408
+v 21340
+v 32762
+v 24758
+v 34517
+v 20714
+v 20429
+v 21243
+v 28846
+v 26729
+v 21383
+v 29112
+v 27432
+v 25717
+v 30943
+v 21147
+v 30485
+v 27957
+v 31906
+v 34980
+v 26921
+v 30814
+v 20067
+v 18857
+v 26137
+v 19903
+v 29591
+v 32740
+v 20134
+v 34549
+v 27841
+v 27141
+v 33111
+v 21809
+v 24349
+v 17949
+v 25169
+v 20933
+v 21056
+v 32983
+v 21244
+v 20614
+v 20159
+v 33097
+v 27310
+v 22084
+v 30688
+v 20512
+v 20403
+v 20592
+v 32133
+v 20458
+v 20432
+v 22866
+v 21530
+v 32877
+v 33522
+v 34889
+v 21759
+v 26160
+v 27601
+v 32264
+v 34753
+v 19689
+v 26032
+v 35337
+v 26229
+v 28110
+v 24665
+v 21410
+v 32710
+v 26751
+v 29672
+v 23207
+v 25722
+v 21076
+v 21468
+v 21193
+v 35781
+v 34073
+v 25229
+v 29171
+v 31974
+v 25685
+v 30357
+v 27523
+v 20780
+v 29240
+v 29799
+v 33989
+v 22597
+v 34285
+v 21786
+v 30832
+v 33092
+v 32614
+v 27780
+v 21576
+v 20094
+v 35112
+v 35789
+v 33748
+v 26200
+v 31259
+v 32519
+v 35657
+v 32945
+v 28833
+v 32241
+v 29874
+v 35247
+v 21145
+v 28621
+v 20448
+v 21434
+v 30622
+v 24736
+v 21202
+v 25922
+v 31858
+v 31447
+v 34986
+v 26703
+v 25155
+v 27573
+v 34091
+v 21446
+v 28092
+v 19723
+v 29750
+v 32301
+v 26943
+v 32895
+v 30464
+v 33752
+v 29647
+v 27468
+v 35099
+v 23012
+v 20704
+v 32560
+v 30428
+v 30286
+v 21034
+v 34264
+v 19860
+v 21194
+v 26993
+v 20890
+v 33561
+v 30448
+v 30511
+v 28560
+v 30618
+v 24125
+v 26650
+v 21580
+v 25309
+v 29627
+v 29757
+v 23651
+v 20238
+v 34871
+v 26789
+v 25728
+v 24219
+v 27412
+v 21083
+v 32692
+v 30574
+v 28557
+v 26134
+v 30798
+v 35252
+v 21363
+v 21360
+v 34301
+v 33624
+v 28664
+v 25230
+v 33385
+v 31714
+v 34965
+v 27759
+v 21211
+v 25473
+v 32785
+v 26348
+v 31646
+v 21479
+v 30379
+v 32889
+v 29349
+v 28406
+v 35665
+v 28936
+v 24238
+v 22878
+v 27008
+v 23942
+v 20567
+v 21250
+v 20733
+v 25608
+v 20253
+v 20290
+v 20828
+v 26725
+v 19882
+v 29011
+v 20912
+v 31697
+v 29184
+v 30175
+v 20334
+v 19716
+v 30362
+v 32311
+v 34208
+v 24614
+v 23602
+v 31306
+v 28156
+v 23232
+v 26384
+v 27469
+v 30479
+v 30359
+v 20995
+v 20826
+v 25282
+v 33125
+v 23394
+v 27453
+v 25318
+v 23956
+v 21742
+v 34000
+v 19976
+v 33470
+v 29586
+v 29346
+v 25097
+v 19898
+v 21129
+v 30646
+v 30508
+v 21231
+v 22621
+v 19937
+v 30149
+v 25587
+v 26532
+v 21627
+v 20861
+v 23672
+v 21808
+v 19665
+v 32801
+v 26836
+v 21888
+v 27044
+v 21053
+v 26804
+v 30846
+v 27886
+v 24516
+v 25563
+v 24211
+v 35777
+v 32137
+v 19862
+v 26473
+v 27806
+v 33491
+v 24139
+v 35420
+v 27755
+v 29514
+v 24572
+v 34523
+v 27214
+v 26476
+v 29266
+v 28884
+v 26067
+v 20283
+v 26728
+v 25062
+v 24358
+v 21474
+v 33300
+v 26076
+v 27672
+v 31775
+v 27081
+v 32149
+v 33919
+v 25055
+v 30021
+v 23392
+v 29342
+v 27537
+v 18871
+v 25776
+v 34914
+v 21279
+v 20753
+v 25673
+v 33027
+v 19777
+v 27479
+v 31720
+v 33189
+v 29958
+v 31343
+v 24446
+v 27363
+v 27190
+v 22277
+v 28644
+v 31446
+v 20566
+v 22675
+v 33410
+v 20716
+v 29193
+v 30875
+v 23798
+v 29189
+v 21077
+v 31975
+v 20407
+v 20937
+v 34961
+v 26148
+v 28595
+v 25786
+v 25365
+v 21354
+v 21066
+v 27547
+v 28020
+v 33225
+v 19537
+v 30250
+v 29506
+v 21512
+v 30715
+v 29441
+v 26942
+v 32492
+v 19583
+v 31160
+v 34778
+v 23087
+v 32618
+v 31166
+v 32201
+v 24075
+v 20816
+v 28809
+v 32182
+v 21555
+v 30102
+v 28885
+v 27906
+v 19808
+v 27690
+v 20822
+v 30162
+v 32154
+v 20871
+v 22934
+v 27084
+v 30841
+v 30071
+v 24056
+v 34663
+v 30872
+v 28793
+v 27591
+v 27395
+v 28404
+v 26161
+v 33806
+v 29225
+v 21005
+v 19907
+v 20227
+v 34522
+v 26113
+v 19811
+v 20790
+v 22711
+v 34900
+v 27868
+v 21843
+v 26054
+v 20156
+v 33983
+v 27648
+v 30806
+v 32080
+v 21746
+v 32768
+v 23400
+v 24887
+v 27057
+v 35790
+v 26616
+v 32176
+v 25329
+v 27698
+v 35070
+v 23128
+v 20034
+v 28749
+v 25240
+v 21450
+v 26399
+v 21500
+v 34284
+v 27911
+v 34981
+v 32299
+v 20785
+v 35069
+v 31803
+v 33503
+v 21101
+v 31036
+v 32349
+v 34234
+v 27660
+v 28521
+v 27208
+v 21482
+v 19929
+v 28291
+v 20855
+v 28190
+v 21097
+v 31083
+v 19783
+v 26223
+v 30281
+v 28876
+v 24631
+v 25472
+v 31338
+v 25412
+v 35610
+v 29706
+v 25764
+v 28709
+v 24556
+v 21497
+v 31211
+v 20435
+v 29010
+v 33677
+v 31094
+v 21234
+v 28183
+v 33143
+v 21981
+v 29561
+v 21350
+v 29127
+v 34693
+v 35042
+v 24676
+v 30645
+v 32655
+v 23534
+v 31784
+v 27383
+v 22297
+v 31682
+v 28057
+v 27278
+v 30988
+v 24827
+v 20823
+v 20632
+v 24917
+v 22721
+v 31325
+v 27812
+v 30052
+v 29388
+v 20851
+v 34571
+v 28363
+v 30257
+v 21689
+v 21283
+v 32442
+v 23423
+v 29195
+v 20880
+v 26167
+v 20346
+v 22801
+v 30291
+v 25231
+v 31785
+v 32855
+v 23836
+v 25066
+v 27445
+v 22179
+v 25387
+v 27296
+v 34514
+v 20261
+v 21425
+v 33883
+v 31428
+v 20839
+v 21052
+v 21263
+v 30519
+v 28070
+v 35276
+v 27624
+v 35241
+v 30374
+v 26285
+v 21469
+v 20943
+v 31766
+v 26461
+v 27536
+v 30501
+v 27466
+v 23905
+v 28293
+v 22250
+v 24322
+v 26673
+v 26257
+v 28215
+v 19963
+v 25880
+v 27719
+v 31968
+v 19730
+v 27975
+v 20109
+v 31673
+v 20084
+v 21165
+v 35053
+v 34286
+v 30781
+v 19828
+v 24084
+v 21409
+v 19954
+v 24673
+v 29406
+v 32994
+v 30540
+v 25677
+v 21676
+v 24359
+v 28114
+v 20982
+v 27269
+v 25861
+v 20878
+v 23950
+v 20357
+v 35480
+v 32136
+v 32934
+v 34082
+v 29984
+v 28748
+v 21833
+v 20064
+v 21805
+v 23871
+v 21448
+v 21393
+v 35737
+v 33740
+v 21743
+v 21378
+v 21331
+v 24484
+v 27568
+v 20858
+v 35197
+v 25268
+v 32474
+v 29052
+v 30122
+v 33816
+v 24315
+v 27213
+v 29117
+v 25576
+v 24393
+v 19104
+v 27431
+v 20390
+v 25512
+v 22956
+v 20960
+v 24981
+v 31747
+v 27087
+v 34559
+v 28797
+v 20853
+v 33348
+v 30678
+v 23665
+v 19918
+v 21306
+v 28905
+v 25872
+v 28909
+v 27456
+v 20239
+v 23683
+v 20891
+v 27574
+v 29959
+v 24093
+v 28524
+v 21376
+v 33468
+v 21666
+v 28175
+v 26329
+v 32038
+v 27570
+v 33550
+v 30242
+v 21895
+v 21688
+v 29598
+v 34890
+v 30138
+v 20054
+v 27266
+v 26212
+v 29488
+v 32230
+v 26722
+v 28208
+v 31060
+v 20864
+v 19261
+v 25942
+v 33803
+v 32234
+v 35017
+v 24229
+v 27538
+v 31961
+v 21388
+v 30133
+v 29297
+v 34248
+v 30914
+v 34838
+v 22554
+v 31962
+v 32520
+v 21156
+v 30611
+v 20598
+v 26220
+v 19996
+v 28848
+v 27306
+v 23791
+v 25087
+v 31046
+v 33052
+v 30582
+v 20794
+v 28454
+v 24401
+v 32457
+v 19795
+v 21823
+v 31303
+v 28130
+v 35723
+v 27849
+v 20926
+v 20764
+v 33080
+v 28380
+v 27677
+v 31044
+v 28186
+v 33853
+v 25624
+v 25936
+v 20498
+v 21123
+v 28980
+v 23964
+v 21571
+v 30717
+v 27237
+v 28025
+v 29994
+v 23468
+v 27606
+v 30196
+v 29479
+v 25496
+v 24868
+v 25431
+v 24854
+v 35242
+v 24357
+v 26833
+v 21305
+v 19805
+v 20075
+v 21273
+v 27498
+v 25877
+v 26062
+v 20894
+v 25277
+v 18867
+v 30998
+v 27766
+v 26068
+v 35245
+v 28556
+v 22609
+v 27934
+v 20535
+v 32039
+v 32986
+v 29365
+v 25115
+v 21112
+v 30290
+v 28428
+v 30237
+v 33567
+v 28518
+v 35091
+v 31929
+v 32390
+v 32245
+v 25294
+v 29239
+v 26981
+v 28346
+v 28747
+v 34009
+v 34692
+v 30941
+v 27717
+v 21290
+v 20378
+v 25096
+v 30439
+v 32406
+v 27970
+v 29241
+v 29403
+v 35808
+v 33839
+v 26011
+v 21599
+v 33005
+v 24163
+v 21030
+v 30238
+v 32532
+v 23858
+v 35100
+v 27075
+v 25881
+v 22182
+v 29376
+v 33621
+v 24224
+v 21104
+v 25549
+v 25098
+v 23554
+v 20150
+v 27743
+v 20867
+v 21386
+v 26143
+v 31736
+v 31532
+v 25338
+v 20311
+v 25517
+v 21314
+v 32317
+v 24321
+v 30322
+v 22201
+v 32724
+v 20256
+v 32739
+v 28824
+v 26360
+v 32364
+v 20215
+v 20151
+v 25632
+v 27116
+v 31255
+v 27640
+v 32153
+v 21065
+v 21801
+v 22265
+v 27461
+v 30310
+v 29226
+v 32625
+v 25162
+v 32921
+v 33867
+v 34709
+v 32368
+v 21996
+v 25183
+v 30124
+v 29976
+v 25523
+v 20980
+v 26275
+v 34836
+v 20465
+v 28100
+v 23521
+v 19857
+v 20615
+v 24892
+v 32066
+v 21936
+v 30562
+v 26906
+v 21860
+v 31164
+v 34290
+v 33107
+v 20534
+v 30815
+v 33866
+v 20123
+v 23898
+v 20127
+v 21027
+v 32146
+v 35306
+v 21598
+v 20953
+v 19982
+v 21292
+v 33878
+v 35278
+v 27701
+v 24420
+v 32214
+v 29261
+v 27603
+v 33380
+v 19772
+v 27470
+v 21515
+v 23808
+v 32247
+v 32695
+v 31147
+v 35291
+v 35778
+v 30581
+v 28303
+v 34272
+v 22559
+v 27371
+v 24239
+v 29224
+v 24683
+v 20055
+v 29834
+v 27450
+v 20970
+v 21850
+v 20667
+v 26117
+v 28249
+v 22501
+v 31382
+v 19403
+v 23169
+v 25584
+v 21289
+v 21035
+v 20977
+v 20198
+v 20737
+v 20022
+v 28914
+v 22163
+v 19897
+v 27365
+v 19967
+v 20049
+v 25301
+v 34402
+v 21397
+v 29237
+v 22211
+v 26771
+v 27958
+v 34239
+v 29791
+v 22720
+v 28037
+v 19894
+v 31988
+v 21106
+v 25020
+v 34515
+v 30737
+v 32644
+v 28899
+v 21355
+v 21993
+v 26890
+v 21328
+v 20844
+v 23729
+v 32573
+v 25441
+v 22821
+v 20158
+v 33536
+v 21587
+v 25835
+v 30463
+v 21171
+v 25343
+v 29382
+v 22148
+v 34657
+v 22057
+v 23245
+v 26510
+v 21456
+v 23765
+v 30661
+v 26184
+v 35792
+v 34189
+v 29610
+v 31085
+v 29860
+v 30950
+v 29253
+v 28937
+v 27277
+v 27932
+v 26170
+v 22031
+v 33015
+v 28611
+v 24313
+v 24305
+v 26956
+v 25466
+v 33894
+v 26866
+v 26809
+v 34942
+v 32663
+v 34881
+v 25452
+v 29773
+v 21730
+v 19829
+v 20171
+v 21319
+v 21308
+v 33046
+v 21075
+v 22488
+v 28329
+v 19979
+v 31398
+v 29772
+v 30651
+v 21769
+v 35827
+v 30297
+v 22198
+v 21214
+v 35713
+v 20966
+v 29544
+v 21041
+v 34442
+v 20934
+v 34031
+v 29426
+v 28606
+v 20877
+v 29568
+v 35029
+v 20434
+v 21318
+v 34010
+v 27297
+v 29477
+v 25289
+v 30970
+v 22518
+v 21444
+v 25689
+v 31765
+v 27723
+v 21618
+v 21323
+v 30526
+v 34747
+v 21293
+v 32583
+v 24141
+v 31613
+v 31377
+v 20769
+v 19615
+v 25322
+v 23553
+v 20537
+v 25264
+v 32177
+v 25939
+v 20366
+v 19775
+v 24278
+v 31212
+v 32594
+v 23122
+v 32630
+v 30948
+v 22765
+v 20729
+v 19906
+v 27147
+v 27178
+v 26014
+v 33810
+v 31024
+v 33181
+v 34861
+v 19762
+v 26425
+v 28679
+v 21663
+v 31188
+v 19927
+v 28636
+v 30084
+v 26561
+v 20220
+v 20053
+v 23421
+v 26508
+v 34671
+v 23384
+v 33681
+v 24974
+v 20900
+v 29786
+v 27288
+v 27586
+v 19853
+v 29911
+v 31939
+v 32974
+v 31181
+v 32499
+v 25783
+v 21167
+v 21275
+v 26716
+v 26577
+v 33852
+v 21880
+v 35006
+v 28468
+v 28805
+v 31004
+v 30647
+v 25529
+v 32122
+v 26139
+v 34354
+v 21368
+v 21212
+v 26680
+v 19900
+v 34636
+v 21232
+v 20666
+v 35424
+v 28625
+v 20859
+v 31434
+v 28861
+v 29230
+v 31878
+v 19901
+v 23475
+v 32078
+v 26376
+v 32959
+v 26952
+v 35211
+v 20354
+v 32955
+v 25976
+v 29177
+v 30494
+v 29517
+v 28459
+v 22787
+v 24541
+v 28083
+v 22444
+v 26625
+v 34531
+v 23662
+v 29822
+v 30958
+v 28737
+v 21045
+v 25598
+v 32402
+v 20386
+v 22515
+v 27039
+v 35115
+v 21163
+v 28389
+v 24124
+v 20315
+v 26556
+v 29331
+v 20906
+v 20907
+v 25833
+v 24347
+v 20363
+v 26189
+v 34837
+v 20955
+v 26720
+v 19981
+v 29023
+v 24258
+v 34528
+v 21647
+v 31644
+v 29142
+v 21673
+v 21178
+v 32189
+v 34474
+v 24558
+v 32213
+v 21160
+v 20898
+v 32847
+v 31093
+v 31143
+v 20662
+v 30167
+v 35208
+v 21078
+v 29030
+v 27378
+v 26334
+v 34218
+v 21220
+v 34070
+v 22237
+v 20556
+v 21142
+v 27909
+v 21400
+v 32387
+v 32572
+v 26854
+v 21943
+v 35377
+v 25669
+v 29459
+v 21270
+v 28991
+v 26984
+v 31888
+v 23618
+v 29899
+v 28600
+v 31999
+v 23971
+v 22522
+v 26749
+v 34314
+v 33056
+v 28308
+v 21657
+v 35150
+v 21498
+v 29999
+v 24682
+v 22596
+v 35774
+v 27705
+v 20008
+v 27322
+v 21315
+v 30163
+v 21190
+v 20068
+v 25302
+v 31630
+v 29493
+v 21639
+v 21478
+v 22654
+v 26528
+v 30612
+v 31013
+v 28226
+v 24554
+v 21489
+v 24095
+v 27610
+v 21224
+v 26844
+v 30548
+v 31976
+v 19942
+v 35260
+v 34820
+v 35240
+v 21257
+v 29179
+v 27020
+v 29830
+v 25095
+v 23766
+v 21511
+v 31900
+v 26599
+v 27451
+v 33973
+v 24430
+v 20730
+v 20393
+v 34589
+v 27851
+v 27119
+v 23014
+v 26671
+v 20304
+v 21134
+v 33030
+v 23647
+v 33494
+v 20540
+v 29338
+v 34277
+v 20555
+v 31252
+v 29550
+v 29120
+v 20332
+v 20451
+v 30775
+v 25126
+v 31260
+v 24909
+v 35892
+v 21001
+v 21132
+v 21411
+v 25575
+v 33009
+v 26867
+v 25120
+v 24417
+v 34183
+v 21073
+v 21638
+v 33881
+v 25364
+v 27626
+v 19997
+v 26735
+v 31865
+v 35227
+v 25774
+v 20542
+v 20017
+v 30824
+v 28892
+v 20106
+v 21109
+v 27331
+v 23465
+v 19794
+v 29394
+v 24496
+v 29053
+v 29589
+v 31844
+v 24530
+v 26455
+v 33346
+v 22089
+v 35810
+v 24899
+v 19933
+v 28827
+v 25545
+v 21356
+v 24031
+v 31148
+v 23429
+v 26979
+v 31694
+v 21024
+v 30108
+v 29993
+v 33654
+v 32662
+v 32708
+v 21229
+v 29221
+v 31677
+v 20241
+v 26874
+v 34310
+v 21872
+v 30685
+v 25702
+v 33800
+v 34733
+v 23597
+v 25075
+v 21266
+v 26522
+v 34810
+v 34609
+v 32297
+v 20288
+v 28722
+v 19202
+v 27505
+v 26697
+v 20863
+v 35913
+v 20071
+v 30897
+v 26159
+v 33642
+v 25458
+v 23824
+v 25470
+v 27358
+v 26308
+v 20694
+v 21573
+v 27829
+v 35292
+v 22516
+v 34520
+v 26715
+v 32283
+v 28616
+v 31256
+v 22285
+v 25174
+v 31056
+v 32672
+v 28519
+v 28068
+v 26262
+v 21174
+v 21652
+v 34732
+v 31067
+v 35835
+v 25706
+v 20845
+v 25913
+v 23319
+v 24274
+v 20500
+v 28085
+v 26319
+v 20689
+v 32508
+v 21435
+v 26553
+v 21019
+v 21524
+v 27442
+v 29781
+v 20298
+v 19852
+v 25990
+v 24769
+v 30757
+v 26738
+v 29407
+v 25148
+v 33877
+v 32217
+v 21247
+v 24654
+v 21615
+v 26548
+v 26327
+v 23442
+v 20010
+v 27884
+v 29924
+v 22942
+v 27631
+v 28021
+v 27512
+v 28900
+v 30074
+v 24148
+v 20979
+v 33193
+v 28430
+v 35060
+v 31015
+v 27329
+v 21604
+v 25525
+v 21781
+v 28550
+v 21366
+v 22889
+v 25016
+v 21898
+v 28131
+v 35114
+v 20255
+v 27225
+v 30416
+v 21847
+v 32410
+v 21541
+v 22830
+v 30226
+v 35046
+v 25186
+v 29847
+v 21724
+v 25982
+v 24288
+v 21428
+v 20731
+v 35246
+v 21908
+v 20901
+v 27221
+v 22229
+v 24360
+v 25132
+v 21582
+v 21149
+v 20169
+v 21296
+v 20457
+v 21950
+v 19782
+v 21015
+v 34242
+v 34216
+v 20073
+v 21367
+v 34792
+v 24793
+v 27134
+v 27434
+v 21491
+v 32619
+v 34111
+v 26241
+v 20324
+v 31883
+v 21578
+v 29701
+v 23644
+v 23544
+v 30538
+v 30817
+v 35248
+v 20189
+v 20994
+v 29155
+v 20070
+v 28548
+v 20671
+v 27164
+v 23797
+v 29530
+v 27752
+v 32647
+v 25912
+v 21926
+v 28134
+v 31113
+v 21909
+v 21093
+v 26401
+v 32219
+v 25248
+v 21913
+v 20121
+v 21712
+v 22728
+v 33249
+v 29368
+v 34068
+v 34854
+v 29475
+v 21060
+v 26656
+v 34675
+v 21377
+v 30995
+v 27895
+v 21782
+v 30594
+v 21720
+v 21431
+v 20840
+v 20948
+v 32629
+v 26707
+v 29176
+v 33670
+v 25814
+v 30390
+v 26429
+v 32735
+v 33029
+v 35823
+v 28618
+v 22479
+v 25804
+v 27908
+v 34806
+v 27588
+v 21979
+v 20888
+v 30741
+v 33756
+v 23144
+v 23875
+v 33310
+v 23576
+v 30635
+v 35142
+v 32624
+v 29096
+v 20218
+v 30599
+v 31799
+v 29581
+v 25641
+v 27850
+v 30957
+v 21659
+v 34927
+v 28784
+v 24366
+v 27848
+v 24621
+v 23195
+v 31577
+v 24019
+v 20536
+v 30607
+v 27210
+v 29743
+v 32620
+v 32926
+v 24705
+v 19921
+v 22987
+v 35524
+v 20973
+v 33515
+v 30373
+v 28988
+v 29404
+v 21449
+v 22797
+v 19888
+v 21572
+v 26840
+v 29509
+v 25638
+v 25245
+v 29169
+v 31021
+v 25573
+v 34545
+v 27721
+v 26640
+v 34798
+v 25317
+v 30720
+v 19959
+v 21685
+v 21347
+v 31341
+v 31530
+v 34349
+v 34012
+v 28835
+v 30349
+v 23510
+v 30272
+v 25697
+v 25266
+v 32211
+v 21637
+v 20481
+v 26594
+v 27080
+v 22841
+v 25267
+v 20133
+v 22062
+v 27843
+v 21127
+v 27404
+v 26873
+v 24256
+v 32528
+v 27270
+v 26443
+v 27375
+v 26614
+v 21623
+v 34525
+v 30510
+v 21972
+v 30770
+v 19944
+v 20466
+v 21593
+v 28782
+v 20336
+v 19992
+v 25000
+v 21464
+v 20732
+v 28390
+v 21564
+v 27146
+v 28965
+v 23947
+v 23535
+v 24276
+v 29101
+v 31123
+v 30176
+v 31320
+v 30128
+v 25940
+v 21622
+v 23017
+v 28336
+v 34922
+v 24195
+v 32743
+v 20687
+v 27308
+v 27619
+v 29257
+v 32480
+v 24181
+v 29858
+v 26765
+v 21004
+v 20951
+v 22093
+v 27897
+v 24757
+v 25504
+v 22541
+v 27095
+v 25469
+v 26027
+v 20582
+v 26361
+v 25454
+v 26499
+v 25090
+v 29084
+v 31019
+v 26221
+v 20461
+v 24267
+v 20989
+v 21542
+v 21398
+v 20056
+v 23733
+v 29366
+v 19890
+v 21778
+v 28668
+v 27935
+v 24220
+v 35201
+v 30223
+v 19820
+v 20800
+v 29108
+v 21184
+v 27985
+v 21067
+v 26128
+v 22035
+v 21255
+v 21189
+v 21614
+v 26547
+v 35255
+v 27605
+v 27786
+v 20099
+v 28263
+v 32761
+v 21495
+v 30753
+v 20181
+v 21372
+v 33406
+v 25369
+v 34621
+v 33389
+v 20137
+v 26114
+v 31284
+v 20639
+v 26157
+v 30210
+v 20421
+v 21729
+v 30100
+v 19684
+v 35003
+v 31298
+v 31902
+v 32243
+v 23728
+v 31388
+v 21486
+v 34454
+v 22789
+v 23241
+v 25110
+v 29966
+v 25196
+v 33294
+v 21285
+v 20623
+v 32199
+v 34340
+v 28716
+v 21158
+v 28167
+v 31335
+v 27696
+v 26091
+v 26970
+v 23524
+v 29889
+v 30009
+v 25831
+v 27090
+v 29063
+v 24807
+v 23320
+v 29380
+v 31810
+v 23640
+v 33442
+v 22926
+v 28466
+v 31690
+v 27653
+v 32633
+v 23724
+v 19870
+v 27684
+v 22375
+v 33148
+v 31059
+v 25957
+v 24026
+v 29247
+v 32622
+v 27710
+v 31396
+v 19628
+v 35622
+v 26695
+v 33635
+v 21550
+v 27623
+v 34766
+v 32439
+v 28369
+v 26231
+v 32604
+v 31651
+v 35738
+v 20657
+v 22052
+v 28952
+v 20266
+v 22013
+v 35885
+v 20624
+v 21591
+v 26800
+v 31053
+v 35085
+v 26154
+v 21756
+v 31063
+v 21680
+v 34975
+v 26584
+v 26803
+v 25851
+v 32927
+v 28411
+v 28684
+v 30468
+v 34956
+v 26770
+v 31185
+v 34691
+v 31177
+v 21539
+v 35798
+v 28046
+v 28756
+v 26018
+v 33448
+v 22551
+v 35136
+v 26194
+v 29963
+v 28617
+v 27541
+v 23873
+v 22395
+v 29584
+v 32668
+v 30833
+v 32327
+v 21828
+v 26087
+v 22009
+v 26798
+v 28610
+v 23449
+v 21334
+v 29722
+v 33043
+v 22167
+v 21503
+v 33790
+v 33514
+v 27128
+v 31489
+v 31633
+v 32102
+v 21219
+v 25275
+v 27874
+v 32985
+v 21556
+v 31217
+v 28447
+v 23653
+v 21675
+v 25986
+v 21966
+v 28182
+v 25604
+v 33241
+v 24432
+v 20802
+v 33240
+v 27463
+v 29306
+v 23509
+v 29173
+v 29536
+v 23052
+v 23739
+v 27838
+v 35708
+v 29775
+v 34410
+v 28552
+v 26868
+v 26182
+v 25082
+v 29655
+v 26540
+v 30171
+v 35198
+v 21894
+v 22598
+v 25927
+v 21117
+v 28169
+v 28638
+v 32961
+v 26261
+v 34690
+v 28660
+v 34773
+v 28868
+v 27937
+v 31723
+v 21537
+v 31390
+v 33031
+v 21379
+v 32634
+v 30672
+v 31758
+v 29068
+v 34998
+v 34630
+v 21320
+v 29895
+v 28640
+v 27764
+v 21345
+v 27050
+v 21198
+v 26151
+v 31279
+v 30236
+v 25779
+v 24796
+v 29006
+v 23745
+v 24707
+v 26814
+v 25239
+v 26009
+v 34159
+v 28444
+v 27069
+v 30442
+v 20589
+v 34819
+v 30868
+v 34353
+v 24792
+v 28074
+v 35298
+v 26464
+v 21188
+v 26637
+v 21522
+v 20920
+v 27907
+v 20974
+v 24451
+v 31167
+v 31435
+v 19781
+v 20085
+v 21114
+v 24210
+v 27036
+v 20696
+v 35036
+v 24072
+v 22873
+v 24914
+v 31130
+v 35370
+v 30993
+v 31561
+v 26416
+v 21959
+v 27658
+v 35703
+v 23274
+v 25182
+v 28313
+v 30804
+v 33835
+v 20815
+v 27149
+v 20224
+v 22354
+v 35116
+v 35357
+v 35166
+v 32677
+v 30193
+v 28472
+v 20209
+v 32321
+v 29267
+v 27983
+v 33689
+v 28275
+v 31972
+v 29219
+v 22753
+v 21057
+v 30309
+v 19986
+v 23893
+v 29502
+v 21230
+v 26945
+v 27198
+v 22183
+v 19977
+v 28117
+v 31295
+v 28064
+v 24522
+v 29885
+v 23004
+v 22050
+v 19935
+v 27157
+v 30220
+v 29333
+v 30858
+v 29005
+v 29289
+v 32565
+v 28700
+v 28152
+v 22936
+v 31230
+v 27671
+v 23102
+v 31239
+v 21113
+v 25992
+v 23303
+v 26691
+v 21646
+v 28532
+v 23280
+v 33230
+v 21408
+v 33672
+v 21509
+v 33641
+v 32680
+v 32194
+v 34313
+v 30437
+v 24574
+v 32465
+v 29875
+v 22306
+v 34885
+v 31702
+v 26391
+v 20831
+v 21619
+v 20401
+v 32701
+v 32338
+v 21906
+v 28976
+v 23146
+v 31899
+v 23402
+v 21413
+v 28584
+v 23080
+v 20124
+v 26120
+v 31555
+v 33287
+v 30662
+v 33472
+v 21148
+v 26689
+v 28978
+v 30336
+v 21326
+v 25962
+v 20037
+v 19401
+v 18852
+v 29682
+v 27315
+v 21956
+v 20905
+v 30932
+v 19838
+v 30420
+v 21204
+v 29337
+v 27753
+v 27255
+v 35878
+v 25811
+v 26787
+v 33488
+v 22295
+v 33371
+v 21254
+v 35024
+v 32546
+v 26983
+v 30864
+v 22703
+v 31683
+v 21218
+v 32698
+v 32292
+v 32351
+v 31464
+v 28209
+v 31095
+v 29200
+v 26737
+v 22308
+v 35189
+v 28872
+v 21939
+v 22074
+v 29737
+v 31793
+v 29439
+v 23054
+v 31508
+v 27539
+v 19863
+v 27003
+v 23174
+v 19887
+v 35196
+v 26832
+v 20385
+v 30282
+v 20635
+v 35612
+v 33923
+v 33932
+v 31611
+v 24268
+v 32794
+v 23572
+v 21864
+v 26203
+v 35444
+v 21925
+v 28144
+v 32043
+v 25283
+v 31082
+v 34834
+v 24362
+v 25220
+v 23718
+v 19228
+v 32260
+v 25757
+v 20081
+v 20918
+v 34779
+v 24570
+v 29074
+v 30471
+v 25756
+v 31235
+v 20245
+v 31178
+v 27525
+v 25197
+v 32505
+v 24582
+v 30435
+v 24122
+v 34229
+v 24004
+v 35154
+v 29094
+v 32777
+v 20392
+v 23650
+v 31192
+v 32464
+v 30114
+v 24491
+v 24079
+v 31068
+v 34955
+v 20792
+v 26077
+v 23084
+v 30016
+v 22418
+v 26367
+v 35194
+v 26116
+v 33804
+v 30430
+v 28087
+v 28193
+v 20027
+v 30643
+v 26060
+v 22083
+v 24328
+v 20909
+v 35570
+v 35188
+v 22022
+v 32897
+v 25544
+v 26312
+v 26445
+v 31887
+v 21324
+v 32155
+v 26666
+v 25821
+v 26423
+v 23689
+v 34947
+v 33708
+v 28063
+v 20674
+v 25966
+v 31920
+v 20026
+v 21365
+v 27041
+v 25014
+v 32246
+v 33710
+v 30106
+v 19858
+v 23529
+v 35685
+v 35216
+v 27097
+v 26670
+v 29500
+v 33298
+v 30499
+v 28211
+v 35545
+v 33851
+v 27955
+v 21899
+v 26894
+v 29045
+v 22086
+v 26579
+v 25261
+v 21175
+v 20525
+v 29487
+v 34231
+v 28527
+v 27413
+v 21919
+v 25623
+v 32069
+v 21829
+v 25171
+v 25190
+v 22257
+v 34328
+v 21904
+v 29810
+v 33979
+v 24253
+v 21851
+v 26424
+v 20090
+v 19187
+v 24466
+v 27779
+v 20645
+v 26467
+v 30638
+v 21465
+v 21779
+v 31452
+v 28619
+v 22353
+v 30037
+v 27391
+v 30090
+v 27102
+v 28979
+v 20240
+v 26967
+v 31253
+v 26390
+v 28604
+v 34807
+v 30095
+v 32082
+v 22008
+v 32952
+v 21199
+v 29379
+v 27629
+v 27901
+v 35569
+v 31867
+v 27903
+v 24861
+v 21422
+v 21139
+v 26558
+v 20018
+v 20576
+v 32191
+v 25139
+v 22582
+v 31329
+v 26796
+v 24503
+v 23221
+v 30317
+v 21867
+v 35234
+v 25794
+v 27687
+v 34818
+v 30274
+v 30385
+v 30026
+v 24569
+v 23646
+v 21651
+v 35631
+v 26171
+v 28634
+v 34948
+v 21544
+v 26825
+v 22842
+v 25508
+v 30019
+v 30094
+v 26053
+v 30011
+v 30453
+v 35086
+v 27286
+v 20321
+v 30636
+v 27493
+v 23883
+v 35155
+v 35597
+v 26999
+v 20543
+v 29351
+v 26564
+v 34459
+v 20337
+v 21031
+v 23281
+v 32221
+v 21155
+v 23403
+v 32587
+v 25546
+v 26048
+v 22455
+v 33465
+v 34886
+v 34612
+v 29588
+v 28414
+v 21514
+v 20416
+v 21191
+v 21896
+v 28813
+v 22347
+v 35056
+v 25864
+v 29620
+v 24671
+v 33629
+v 28609
+v 25134
+v 29790
+v 35395
+v 28218
+v 25368
+v 27760
+v 31620
+v 24514
+v 29942
+v 26536
+v 33026
+v 22694
+v 31919
+v 30481
+v 26409
+v 25474
+v 32342
+v 26667
+v 27491
+v 32236
+v 27148
+v 19081
+v 22212
+v 29364
+v 30588
+v 21846
+v 21161
+v 33452
+v 33616
+v 27007
+v 26598
+v 27926
+v 26204
+v 28842
+v 21634
+v 25505
+v 21922
+v 20411
+v 28687
+v 29669
+v 21297
+v 31594
+v 26439
+v 32020
+v 24231
+v 20294
+v 23819
+v 31195
+v 20282
+v 30006
+v 27244
+v 25762
+v 27637
+v 31321
+v 32601
+v 22638
+v 29311
+v 32864
+v 20196
+v 29103
+v 28750
+v 29705
+v 19988
+v 27828
+v 26718
+v 35096
+v 34096
+v 34424
+v 30734
+v 32949
+v 26946
+v 28727
+v 35038
+v 30656
+v 20649
+v 26255
+v 28631
+v 21935
+v 27845
+v 24810
+v 34974
+v 22819
+v 31833
+v 34997
+v 23993
+v 20395
+v 21288
+v 20199
+v 21094
+v 27049
+v 19552
+v 26287
+v 26023
+v 22255
+v 34367
+v 29198
+v 30260
+v 34084
+v 35564
+v 28473
+v 29868
+v 23903
+v 23910
+v 21415
+v 31498
+v 32517
+v 21563
+v 30911
+v 20497
+v 21835
+v 31157
+v 31853
+v 21658
+v 26127
+v 25534
+v 24751
+v 21590
+v 22436
+v 35658
+v 24076
+v 32253
+v 21716
+v 26066
+v 32172
+v 21126
+v 22976
+v 32564
+v 20371
+v 31538
+v 21432
+v 31327
+v 22766
+v 28598
+v 33704
+v 30859
+v 28959
+v 20201
+v 26441
+v 21166
+v 29998
+v 29926
+v 28851
+v 26951
+v 31238
+v 31448
+v 34355
+v 26973
+v 25457
+v 26043
+v 32969
+v 29098
+v 27750
+v 31840
+v 27088
+v 25518
+v 25891
+v 27203
+v 33938
+v 21586
+v 24423
+v 26529
+v 27566
+v 25695
+v 28803
+v 20083
+v 24300
+v 32163
+v 21412
+v 34749
+v 21601
+v 30867
+v 29178
+v 23395
+v 21822
+v 22154
+v 35554
+v 28931
+v 24380
+v 29572
+v 33799
+v 23645
+v 25771
+v 24553
+v 18844
+v 26799
+v 28062
+v 28834
+v 32906
+v 28427
+v 26378
+v 22185
+v 26372
+v 22483
+v 34217
+v 26688
+v 32563
+v 35584
+v 28224
+v 23342
+v 19941
+v 34869
+v 27446
+v 32763
+v 21793
+v 31453
+v 35921
+v 28536
+v 32482
+v 19746
+v 29017
+v 24873
+v 24754
+v 23189
+v 31842
+v 23033
+v 21737
+v 27650
+v 33275
+v 33395
+v 22266
+v 26992
+v 21826
+v 30627
+v 24131
+v 19253
+v 21928
+v 30665
+v 22919
+v 24164
+v 26922
+v 23003
+v 34928
+v 23343
+v 22160
+v 34423
+v 34614
+v 29977
+v 23731
+v 32197
+v 26393
+v 34826
+v 35834
+v 23596
+v 33475
+v 21342
+v 20765
+v 21084
+v 27158
+v 21971
+v 28780
+v 34880
+v 27972
+v 28129
+v 22039
+v 20161
+v 22691
+v 25856
+v 24379
+v 28832
+v 33661
+v 32778
+v 20593
+v 19342
+v 22853
+v 31407
+v 23885
+v 28324
+v 32779
+v 26831
+v 21707
+v 29545
+v 33744
+v 27638
+v 27135
+v 22733
+v 25446
+v 30183
+v 22396
+v 34712
+v 24658
+v 34388
+v 31273
+v 35806
+v 20032
+v 21998
+v 21510
+v 25325
+v 23483
+v 19881
+v 30759
+v 30215
+v 20788
+v 20038
+v 28546
+v 20339
+v 21454
+v 33474
+v 35127
+v 27302
+v 25506
+v 24271
+v 34339
+v 21654
+v 26530
+v 21941
+v 34327
+v 28277
+v 25770
+v 34990
+v 21863
+v 29078
+v 24435
+v 35139
+v 21897
+v 30085
+v 25607
+v 21978
+v 33737
+v 35055
+v 24787
+v 23474
+v 33239
+v 27567
+v 34265
+v 26597
+v 22660
+v 20007
+v 35010
+v 21640
+v 25340
+v 25326
+v 19998
+v 29159
+v 27000
+v 21940
+v 34976
+v 24273
+v 31800
+v 25158
+v 31783
+v 26883
+v 27765
+v 30392
+v 29778
+v 35761
+v 27973
+v 27980
+v 21881
+v 33913
+v 24585
+v 35121
+v 21329
+v 21552
+v 34088
+v 22213
+v 31546
+v 22377
+v 27138
+v 26842
+v 26239
+v 32631
+v 19758
+v 33844
+v 28270
+v 24756
+v 18982
+v 29148
+v 29662
+v 28853
+v 19893
+v 35901
+v 35583
+v 27072
+v 22034
+v 24188
+v 29472
+v 27232
+v 27472
+v 32534
+v 26072
+v 33285
+v 33612
+v 24918
+v 22519
+v 21665
+v 26107
+v 29087
+v 31100
+v 25847
+v 31226
+v 34169
+v 27550
+v 19991
+v 23761
+v 20575
+v 27457
+v 28260
+v 20001
+v 27837
+v 31121
+v 23570
+v 28449
+v 23427
+v 33732
+v 35674
+v 28213
+v 30953
+v 22373
+v 24042
+v 26058
+v 31580
+v 26512
+v 25125
+v 25894
+v 24933
+v 24189
+v 24016
+v 21102
+v 30023
+v 24562
+v 26338
+v 21055
+v 24462
+v 20341
+v 23218
+v 26930
+v 24383
+v 32393
+v 31604
+v 31283
+v 26395
+v 25235
+v 19827
+v 22965
+v 28221
+v 26582
+v 28281
+v 32823
+v 27496
+v 31660
+v 33922
+v 21770
+v 34940
+v 24055
+v 31649
+v 30871
+v 28240
+v 25059
+v 21553
+v 29157
+v 34232
+v 23833
+v 21151
+v 21036
+v 24760
+v 29359
+v 32683
+v 30619
+v 26643
+v 30433
+v 27866
+v 28878
+v 24863
+v 33048
+v 19692
+v 26210
+v 21303
+v 28433
+v 22141
+v 22602
+v 25999
+v 27303
+v 35796
+v 25802
+v 21475
+v 32058
+v 32872
+v 30850
+v 33135
+v 35408
+v 20985
+v 31760
+v 30531
+v 29880
+v 29393
+v 21696
+v 31152
+v 32591
+v 29641
+v 27896
+v 21752
+v 32248
+v 31671
+v 23656
+v 28563
+v 25367
+v 25844
+v 19788
+v 22861
+v 20352
+v 35202
+v 32415
+v 20672
+v 23426
+v 33760
+v 33811
+v 34356
+v 31732
+v 28252
+v 26104
+v 27560
+v 20768
+v 30742
+v 34498
+v 33263
+v 35888
+v 21402
+v 27769
+v 30987
+v 22574
+v 35605
+v 29271
+v 19643
+v 35643
+v 31179
+v 27484
+v 30469
+v 19923
+v 26851
+v 32363
+v 30427
+v 31510
+v 30573
+v 31222
+v 23141
+v 21923
+v 20157
+v 26747
+v 21277
+v 25089
+v 34063
+v 27193
+v 19837
+v 19934
+v 35853
+v 31134
+v 32144
+v 27029
+v 22439
+v 21633
+v 28181
+v 35644
+v 21357
+v 32632
+v 26555
+v 34719
+v 28387
+v 19740
+v 35496
+v 21734
+v 34898
+v 33007
+v 34085
+v 30568
+v 33845
+v 24772
+v 33889
+v 19807
+v 26847
+v 30771
+v 35660
+v 24372
+v 31413
+v 31991
+v 27959
+v 22142
+v 26411
+v 30918
+v 29852
+v 21278
+v 28942
+v 20307
+v 27335
+v 30677
+v 22817
+v 19833
+v 25290
+v 25251
+v 27215
+v 29838
+v 31071
+v 19948
+v 29845
+v 32530
+v 22474
+v 23770
+v 26619
+v 25379
+v 32463
+v 26436
+v 20180
+v 31691
+v 21916
+v 30076
+v 22469
+v 24750
+v 29540
+v 22288
+v 32258
+v 26781
+v 32684
+v 21755
+v 21519
+v 29712
+v 35470
+v 21392
+v 32419
+v 21438
+v 21137
+v 29807
+v 22954
+v 24106
+v 27544
+v 34473
+v 22912
+v 34072
+v 28166
+v 25816
+v 20358
+v 25645
+v 27722
+v 34772
+v 31261
+v 30153
+v 31550
+v 18672
+v 35785
+v 25502
+v 24041
+v 29498
+v 22310
+v 19154
+v 31905
+v 26887
+v 30299
+v 21628
+v 25181
+v 31312
+v 33053
+v 34238
+v 20260
+v 26712
+v 27910
+v 30467
+v 22484
+v 27364
+v 29692
+v 22859
+v 18639
+v 31090
+v 34746
+v 20002
+v 35844
+v 19861
+v 32273
+v 29321
+v 29597
+v 19801
+v 25541
+v 26858
+v 27800
+v 28538
+v 27679
+v 33571
+v 23152
+v 32083
+v 20328
+v 20291
+v 26766
+v 23519
+v 21311
+v 26907
+v 28953
+v 22350
+v 29196
+v 19776
+v 24878
+v 31307
+v 20274
+v 25447
+v 31826
+v 33104
+v 31712
+v 32539
+v 26624
+v 22599
+v 32481
+v 24073
+v 20957
+v 32174
+v 35910
+v 26700
+v 20936
+v 24928
+v 27300
+v 29711
+v 32792
+v 30158
+v 21135
+v 34687
+v 27820
+v 20422
+v 23773
+v 23301
+v 30861
+v 34595
+v 24759
+v 23385
+v 24669
+v 20621
+v 21930
+v 21540
+v 28838
+v 30050
+v 27478
+v 35555
+v 28309
+v 19960
+v 28603
+v 33462
+v 21504
+v 28581
+v 19889
+v 29665
+v 28049
+v 25384
+v 24143
+v 28203
+v 26099
+v 22416
+v 35122
+v 30873
+v 29151
+v 27602
+v 31318
+v 21672
+v 30762
+v 24191
+v 27015
+v 33393
+v 28522
+v 27238
+v 26081
+v 29961
+v 22259
+v 30610
+v 30901
+v 26740
+v 27688
+v 28177
+v 34360
+v 22727
+v 31241
+v 25399
+v 23357
+v 24542
+v 27785
+v 20211
+v 26225
+v 27503
+v 29456
+v 25845
+v 20202
+v 30325
+v 33717
+v 23028
+v 29756
+v 24533
+v 19892
+v 26235
+v 28559
+v 21884
+v 31116
+v 26986
+v 27132
+v 28483
+v 19728
+v 27292
+v 33772
+v 33742
+v 35393
+v 32592
+v 24963
+v 25284
+v 19902
+v 24063
+v 19924
+v 26344
+v 30343
+v 27718
+v 21874
+v 34729
+v 30280
+v 31411
+v 26855
+v 31014
+v 27299
+v 32577
+v 25273
+v 22175
+v 32396
+v 25411
+v 22415
+v 34742
+v 19966
+v 20935
+v 29212
+v 33460
+v 21000
+v 19682
+v 34064
+v 21529
+v 35642
+v 29166
+v 19865
+v 22905
+v 19761
+v 26565
+v 23136
+v 29663
+v 30830
+v 21838
+v 19877
+v 28326
+v 28629
+v 34586
+v 24986
+v 30764
+v 35481
+v 19983
+v 22647
+v 26514
+v 24262
+v 29892
+v 19851
+v 19855
+v 27578
+v 31709
+v 21304
+v 27307
+v 32369
+v 31249
+v 26774
+v 20570
+v 20316
+v 29227
+v 25887
+v 26641
+v 30410
+v 21249
+v 19875
+v 30597
+v 32444
+v 34996
+v 32722
+v 27172
+v 33501
+v 32086
+v 30044
+v 30289
+v 28661
+v 28481
+v 28506
+v 33945
+v 31969
+v 28185
+v 21629
+v 31401
+v 21820
+v 20387
+v 21787
+v 31624
+v 35578
+v 20821
+v 23302
+v 24776
+v 20185
+v 33613
+v 31898
+v 30812
+v 30731
+v 33343
+v 19230
+v 26433
+v 23897
+v 26950
+v 28917
+v 26821
+v 32717
+v 33902
+v 23603
+v 20750
+v 22900
+v 28592
+v 33553
+v 34752
+v 29811
+v 19563
+v 33467
+v 26678
+v 35634
+v 22824
+v 32746
+v 29839
+v 33556
+v 21869
+v 19822
+v 24746
+v 32540
+v 30445
+v 21419
+v 21715
+v 25300
+v 25147
+v 30482
+v 23056
+v 26919
+v 33502
+v 22030
+v 26607
+v 27664
+v 28916
+v 24158
+v 27518
+v 21967
+v 31731
+v 32800
+v 23082
+v 23228
+v 33675
+v 24713
+v 33657
+v 29897
+v 34145
+v 26474
+v 27058
+v 29777
+v 27103
+v 27175
+v 23235
+v 27912
+v 24557
+v 28943
+v 23473
+v 31956
+v 27695
+v 26739
+v 26595
+v 25918
+v 19945
+v 33266
+v 21789
+v 31730
+v 31598
+v 22205
+v 26898
+v 35784
+v 21974
+v 33359
+v 35459
+v 30919
+v 32462
+v 21854
+v 35356
+v 32285
+v 23978
+v 34951
+v 26618
+v 20082
+v 22176
+v 34104
+v 25052
+v 29244
+v 21804
+v 26226
+v 24825
+v 21768
+v 28856
+v 20692
+v 21893
+v 22151
+v 28059
+v 23696
+v 35030
+v 21287
+v 32956
+v 35802
+v 20804
+v 35402
+v 25740
+v 23371
+v 27115
+v 26219
+v 26904
+v 25731
+v 29255
+v 26521
+v 29793
+v 21241
+v 27816
+v 22475
+v 32401
+v 28729
+v 25890
+v 27130
+v 31271
+v 33950
+v 31994
+v 33628
+v 25068
+v 20585
+v 20190
+v 25049
+v 19836
+v 32202
+v 33272
+v 35786
+v 29848
+v 22948
+v 25344
+v 23214
+v 35641
+v 26309
+v 19947
+v 28084
+v 27473
+v 23494
+v 34604
+v 28776
+v 25167
+v 28372
+v 25636
+v 20832
+v 33679
+v 27921
+v 34163
+v 21521
+v 27033
+v 26724
+v 20187
+v 21238
+v 21242
+v 24244
+v 35414
+v 28393
+v 23242
+v 25296
+v 29431
+v 35769
+v 31993
+v 33414
+v 34526
+v 34298
+v 33274
+v 34061
+v 25389
+v 21119
+v 26042
+v 27804
+v 35690
+v 27793
+v 23163
+v 27377
+v 27516
+v 31941
+v 30266
+v 27154
+v 35677
+v 26484
+v 26480
+v 19738
+v 22438
+v 26353
+v 29217
+v 20958
+v 28576
+v 30185
+v 20488
+v 20852
+v 34050
+v 27348
+v 21706
+v 21969
+v 20501
+v 21842
+v 22038
+v 35449
+v 26802
+v 21625
+v 26664
+v 19388
+v 31052
+v 26655
+v 30768
+v 30684
+v 23430
+v 27500
+v 24689
+v 29628
+v 19627
+v 20370
+v 22124
+v 20174
+v 28292
+v 29438
+v 32798
+v 21221
+v 22173
+v 20450
+v 27590
+v 22280
+v 34703
+v 26397
+v 33655
+v 24829
+v 27009
+v 34408
+v 26937
+v 34828
+v 27655
+v 27731
+v 19905
+v 35667
+v 30714
+v 22341
+v 30366
+v 23902
+v 27264
+v 24935
+v 27182
+v 24427
+v 26349
+v 35534
+v 21049
+v 21259
+v 31319
+v 29894
+v 31097
+v 33822
+v 27728
+v 20658
+v 26895
+v 29975
+v 33764
+v 25271
+v 31257
+v 35558
+v 31302
+v 30926
+v 21169
+v 33372
+v 21749
+v 21346
+v 21731
+v 24677
+v 30821
+v 30789
+v 28453
+v 20426
+v 34580
+v 24078
+v 28934
+v 20405
+v 25341
+v 25217
+v 33044
+v 21608
+v 25497
+v 20138
+v 35824
+v 35372
+v 23621
+v 31169
+v 21131
+v 30971
+v 20305
+v 19742
+v 30383
+v 25468
+v 21797
+v 35719
+v 34659
+v 28681
+v 35613
+v 24814
+v 22063
+v 22901
+v 23132
+v 35160
+v 26038
+v 22473
+v 23276
+v 30839
+v 28056
+v 26936
+v 23840
+v 31136
+v 35176
+v 21965
+v 24094
+v 34105
+v 34926
+v 27368
+v 21014
+v 26768
+v 35652
+v 23297
+v 29574
+v 20030
+v 29696
+v 31163
+v 25643
+v 26497
+v 35195
+v 28148
+v 29658
+v 32993
+v 25911
+v 35273
+v 26313
+v 20477
+v 29678
+v 21832
+v 26947
+v 26173
+v 22790
+v 32085
+v 23641
+v 21581
+v 28370
+v 19705
+v 26181
+v 30186
+v 28718
+v 33912
+v 24613
+v 20491
+v 20097
+v 22679
+v 27831
+v 20154
+v 31503
+v 19736
+v 21802
+v 32483
+v 31079
+v 31378
+v 33733
+v 25559
+v 22779
+v 35425
+v 31802
+v 29209
+v 24277
+v 33072
+v 24910
+v 29273
+v 31110
+v 27325
+v 24105
+v 22011
+v 21690
+v 22279
+v 33213
+v 27810
+v 27661
+v 27094
+v 29909
+v 20195
+v 24001
+v 34848
+v 35689
+v 20594
+v 20670
+v 21952
+v 26628
+v 27607
+v 31719
+v 20431
+v 20033
+v 23027
+v 25752
+v 27417
+v 33619
+v 31158
+v 22101
+v 24517
+v 34329
+v 23592
+v 20102
+v 32167
+v 34366
+v 29433
+v 19293
+v 21549
+v 21605
+v 32487
+v 28482
+v 19356
+v 19646
+v 33077
+v 22338
+v 25485
+v 25817
+v 34263
+v 24919
+v 28341
+v 27919
+v 22243
+v 32279
+v 26342
+v 30377
+v 34727
+v 35727
+v 28955
+v 22002
+v 24991
+v 23417
+v 25313
+v 29951
+v 21358
+v 19965
+v 35521
+v 29236
+v 22973
+v 25108
+v 32430
+v 30524
+v 26589
+v 31374
+v 22835
+v 24632
+v 24040
+v 27922
+v 22328
+v 21791
+v 19930
+v 28987
+v 23563
+v 34930
+v 35089
+v 26015
+v 21710
+v 24352
+v 33754
+v 31711
+v 21785
+v 25094
+v 26767
+v 20786
+v 24580
+v 28918
+v 31291
+v 35448
+v 22088
+v 29123
+v 33601
+v 20093
+v 21645
+v 22361
+v 21738
+v 31815
+v 23291
+v 19812
+v 31970
+v 22228
+v 32809
+v 21995
+v 29945
+v 21748
+v 21565
+v 20286
+v 21704
+v 30454
+v 33012
+v 23908
+v 28441
+v 27017
+v 28474
+v 32026
+v 32284
+v 23226
+v 30711
+v 28577
+v 33734
+v 29748
+v 25081
+v 22781
+v 28674
+v 35435
+v 19634
+v 30664
+v 27742
+v 31104
+v 25407
+v 19841
+v 28724
+v 29144
+v 31017
+v 19184
+v 20499
+v 25003
+v 30922
+v 26879
+v 27771
+v 27966
+v 33356
+v 25448
+v 24832
+v 20263
+v 20280
+v 22615
+v 33807
+v 21144
+v 27642
+v 22119
+v 34119
+v 24311
+v 24889
+v 24770
+v 22555
+v 26375
+v 30669
+v 28501
+v 29611
+v 22591
+v 33059
+v 27272
+v 27943
+v 24681
+v 24221
+v 20059
+v 31246
+v 31263
+v 29060
+v 34271
+v 21732
+v 19896
+v 22461
+v 20963
+v 30990
+v 20355
+v 27654
+v 22092
+v 29458
+v 34042
+v 30404
+v 31472
+v 25615
+v 30738
+v 22448
+v 21046
+v 22098
+v 33876
+v 29933
+v 23367
+v 29542
+v 24145
+v 29901
+v 34497
+v 32791
+v 22296
+v 33211
+v 33126
+v 21961
+v 24843
+v 22433
+v 33693
+v 28515
+v 24119
+v 31459
+v 33684
+v 30440
+v 22637
+v 27196
+v 29538
+v 21403
+v 20665
+v 29782
+v 32354
+v 20755
+v 29110
+v 35726
+v 27241
+v 20902
+v 28820
+v 22566
+v 19755
+v 27634
+v 22161
+v 26209
+v 23611
+v 20023
+v 35220
+v 22294
+v 35336
+v 33071
+v 25630
+v 24820
+v 24951
+v 24187
+v 34524
+v 31033
+v 35184
+v 30726
+v 28016
+v 33627
+v 23158
+v 32728
+v 22299
+v 27818
+v 30543
+v 20050
+v 21694
+v 20741
+v 35050
+v 21924
+v 34460
+v 28298
+v 35254
+v 33929
+v 27022
+v 22321
+v 35463
+v 32920
+v 23868
+v 30625
+v 19375
+v 20722
+v 32600
+v 32723
+v 26448
+v 26019
+v 30068
+v 21990
+v 30910
+v 35471
+v 24008
+v 29260
+v 21988
+v 28101
+v 21977
+v 21502
+v 32014
+v 23614
+v 32556
+v 25310
+v 18975
+v 27613
+v 30063
+v 26592
+v 22791
+v 35783
+v 20841
+v 21309
+v 28195
+v 35429
+v 23355
+v 29556
+v 25348
+v 25739
+v 27053
+v 20398
+v 19378
+v 35440
+v 35313
+v 29653
+v 34140
+v 24059
+v 24599
+v 22772
+v 27761
+v 21917
+v 20335
+v 31221
+v 35319
+v 25932
+v 33292
+v 21887
+v 29681
+v 28359
+v 20911
+v 32223
+v 35502
+v 22169
+v 21507
+v 27784
+v 35899
+v 35535
+v 27406
+v 20130
+v 31224
+v 24021
+v 31408
+v 19825
+v 30140
+v 28147
+v 25119
+v 34748
+v 35561
+v 20404
+v 25281
+v 22125
+v 19847
+v 26477
+v 35107
+v 34449
+v 23154
+v 32294
+v 22530
+v 24215
+v 22164
+v 25484
+v 35725
+v 28416
+v 30655
+v 21721
+v 20233
+v 28539
+v 32912
+v 31290
+v 21120
+v 31769
+v 22731
+v 26806
+v 27699
+v 34787
+v 35694
+v 28450
+v 25807
+v 26875
+v 31778
+v 29114
+v 29360
+v 28180
+v 21655
+v 20507
+v 22579
+v 22085
+v 27443
+v 29447
+v 29482
+v 24024
+v 26850
+v 24066
+v 27962
+v 28575
+v 34741
+v 20259
+v 34174
+v 31350
+v 28266
+v 33459
+v 34967
+v 19578
+v 34017
+v 24317
+v 26764
+v 30630
+v 26049
+v 27859
+v 20249
+v 20727
+v 30507
+v 25896
+v 27379
+v 32121
+v 34884
+v 34065
+v 20938
+v 20353
+v 29840
+v 20449
+v 26574
+v 19815
+v 26029
+v 30838
+v 25538
+v 35799
+v 28650
+v 24439
+v 26683
+v 21616
+v 27122
+v 27700
+v 20437
+v 33909
+v 26125
+v 34833
+v 33862
+v 28682
+v 22626
+v 34560
+v 32432
+v 22136
+v 30547
+v 24850
+v 21168
+v 28800
+v 26537
+v 34602
+v 35426
+v 25917
+v 30667
+v 32054
+v 30342
+v 23323
+v 23393
+v 34116
+v 29650
+v 26958
+v 25416
+v 33413
+v 30930
+v 32954
+v 27001
+v 32374
+v 29505
+v 27795
+v 30396
+v 35813
+v 22109
+v 25234
+v 22406
+v 24375
+v 25299
+v 25005
+v 27740
+v 33939
+v 23008
+v 32968
+v 31955
+v 19753
+v 25177
+v 29134
+v 29040
+v 20149
+v 21207
+v 22363
+v 24732
+v 32358
+v 28642
+v 24882
+v 34726
+v 27449
+v 28132
+v 26705
+v 22732
+v 19910
+v 27628
+v 33638
+v 23767
+v 22528
+v 23011
+v 21631
+v 25121
+v 22290
+v 22498
+v 29825
+v 29474
+v 29819
+v 29624
+v 20932
+v 27535
+v 27581
+v 25482
+v 20784
+v 27572
+v 28558
+v 24099
+v 25165
+v 29664
+v 20039
+v 24421
+v 20881
+v 28207
+v 20299
+v 20364
+v 25530
+v 26438
+v 33761
+v 20140
+v 26954
+v 25400
+v 33180
+v 24397
+v 21609
+v 30160
+v 24653
+v 30221
+v 27219
+v 34406
+v 25382
+v 29495
+v 27900
+v 19926
+v 19919
+v 23940
+v 22025
+v 24880
+v 20089
+v 24774
+v 20479
+v 33204
+v 28852
+v 31422
+v 25507
+v 26303
+v 24299
+v 25491
+v 23176
+v 21987
+v 26939
+v 26663
+v 23398
+v 31809
+v 20818
+v 21477
+v 30069
+v 25964
+v 23096
+v 29661
+v 21997
+v 28871
+v 20057
+v 22061
+v 26871
+v 24976
+v 21910
+v 22392
+v 28408
+v 20445
+v 26773
+v 26300
+v 23610
+v 29520
+v 26779
+v 29921
+v 19955
+v 26188
+v 22134
+v 22344
+v 25176
+v 26021
+v 26601
+v 22172
+v 33391
+v 22646
+v 23314
+v 22389
+v 23025
+v 30306
+v 22196
+v 30756
+v 23350
+v 25185
+v 29813
+v 35826
+v 24786
+v 31852
+v 21226
+v 26337
+v 20331
+v 29667
+v 33963
+v 25920
+v 25184
+v 26144
+v 30660
+v 30639
+v 22359
+v 23361
+v 21176
+v 31795
+v 23886
+v 34578
+v 21841
+v 21420
+v 35932
+v 29904
+v 35499
+v 24903
+v 28743
+v 25930
+v 28573
+v 20409
+v 29731
+v 35678
+v 25933
+v 20455
+v 21669
+v 33871
+v 34127
+v 21891
+v 22337
+v 29420
+v 30065
+v 25870
+v 34175
+v 28742
+v 20365
+v 26726
+v 35314
+v 30869
+v 22724
+v 32838
+v 29763
+v 22477
+v 25690
+v 30551
+v 29960
+v 23830
+v 22278
+v 22650
+v 32232
+v 32447
+v 30628
+v 30799
+v 34851
+v 31872
+v 22595
+v 30031
+v 28973
+v 28839
+v 22624
+v 22274
+v 29614
+v 32190
+v 28080
+v 24135
+v 27121
+v 22467
+v 25961
+v 30843
+v 28311
+v 21061
+v 26710
+v 26419
+v 30047
+v 28497
+v 35430
+v 27704
+v 22076
+v 30307
+v 35002
+v 35511
+v 31018
+v 22214
+v 30024
+v 22159
+v 33174
+v 23677
+v 22491
+v 34458
+v 29797
+v 29259
+v 27562
+v 28305
+v 26816
+v 23667
+v 20350
+v 23187
+v 23362
+v 30302
+v 22032
+v 25323
+v 29191
+v 25335
+v 30121
+v 35500
+v 19984
+v 29679
+v 25536
+v 29478
+v 27504
+v 31617
+v 20381
+v 26676
+v 20483
+v 32348
+v 22029
+v 22431
+v 30139
+v 24818
+v 23502
+v 21406
+v 23137
+v 30247
+v 29390
+v 22938
+v 21695
+v 25681
+v 31499
+v 24012
+v 25627
+v 32036
+v 35406
+v 24303
+v 34182
+v 22969
+v 20522
+v 21686
+v 22301
+v 23015
+v 21295
+v 27614
+v 25477
+v 35483
+v 23541
+v 22616
+v 33388
+v 22284
+v 22236
+v 22517
+v 31645
+v 29347
+v 25989
+v 22810
+v 20599
+v 25342
+v 31424
+v 24186
+v 32702
+v 32226
+v 35636
+v 27976
+v 32754
+v 30279
+v 30249
+v 20549
+v 35214
+v 22870
+v 23730
+v 31072
+v 27862
+v 30398
+v 30372
+v 31523
+v 25993
+v 22036
+v 27799
+v 28726
+v 34540
+v 22635
+v 30391
+v 20361
+v 27697
+v 33087
+v 26865
+v 20418
+v 22800
+v 27611
+v 29357
+v 35544
+v 35655
+v 27199
+v 29135
+v 22016
+v 22441
+v 29564
+v 24452
+v 21912
+v 27744
+v 26356
+v 27204
+v 20862
+v 30937
+v 31431
+v 28957
+v 29278
+v 20095
+v 32170
+v 20783
+v 35261
+v 21484
+v 20494
+v 21562
+v 35510
+v 28374
+v 35452
+v 23101
+v 23439
+v 26709
+v 35527
+v 30703
+v 31773
+v 25796
+v 27662
+v 27421
+v 29590
+v 20949
+v 22829
+v 25471
+v 34823
+v 35559
+v 27067
+v 30981
+v 28153
+v 30795
+v 25433
+v 28282
+v 22366
+v 25875
+v 28018
+v 33281
+v 22208
+v 35320
+v 23051
+v 22071
+v 35797
+v 22435
+v 22837
+v 20724
+v 28686
+v 33194
+v 35752
+v 20440
+v 27013
+v 22072
+v 31861
+v 27301
+v 35098
+v 34275
+v 33099
+v 25363
+v 28531
+v 35764
+v 25418
+v 25430
+v 24475
+v 28355
+v 26635
+v 27683
+v 22512
+v 33729
+v 29605
+v 21620
+v 27822
+v 22882
+v 35385
+v 21286
+v 27162
+v 27775
+v 23031
+v 24306
+v 32880
+v 27805
+v 20759
+v 32304
+v 29205
+v 25025
+v 30729
+v 28199
+v 35288
+v 23512
+v 23010
+v 31780
+v 22242
+v 30589
+v 28992
+v 30034
+v 26412
+v 30880
+v 27139
+v 32019
+v 29621
+v 32270
+v 35460
+v 22390
+v 30346
+v 30894
+v 27110
+v 35326
+v 35151
+v 22786
+v 21795
+v 30104
+v 28106
+v 22618
+v 33020
+v 22349
+v 29003
+v 19178
+v 20410
+v 35473
+v 31352
+v 26462
+v 28672
+v 24801
+v 19701
+v 27998
+v 32467
+v 23282
+v 24513
+v 23929
+v 25721
+v 30584
+v 26260
+v 35394
+v 26818
+v 25414
+v 27991
+v 22129
+v 21559
+v 35230
+v 23048
+v 31292
+v 30617
+v 27227
+v 24804
+v 31156
+v 25528
+v 22113
+v 22534
+v 22454
+v 34279
+v 24697
+v 30682
+v 35750
+v 22356
+v 30632
+v 35512
+v 26542
+v 22608
+v 28883
+v 27460
+v 30750
+v 23548
+v 19670
+v 30458
+v 22453
+v 24498
+v 29608
+v 26869
+v 21261
+v 17860
+v 26242
+v 22933
+v 23691
+v 27582
+v 23493
+v 27711
+v 26044
+v 22178
+v 30521
+v 21890
+v 19642
+v 24872
+v 30708
+v 22462
+v 24672
+v 20443
+v 34114
+v 30956
+v 34970
+v 35497
+v 22394
+v 20611
+v 27168
+v 26294
+v 26389
+v 23926
+v 24134
+v 28006
+v 27667
+v 27756
+v 32741
+v 30131
+v 26743
+v 25902
+v 25792
+v 30206
+v 28671
+v 32166
+v 26534
+v 24396
+v 23496
+v 21811
+v 26977
+v 30857
+v 20452
+v 29322
+v 31206
+v 29041
+v 34133
+v 22090
+v 22262
+v 31032
+v 20453
+v 30483
+v 23809
+v 19584
+v 21708
+v 33001
+v 22317
+v 26377
+v 31328
+v 22313
+v 22006
+v 22429
+v 22319
+v 35475
+v 27558
+v 28673
+v 27767
+v 35582
+v 20983
+v 32826
+v 34939
+v 34912
+v 22633
+v 21702
+v 24902
+v 27553
+v 24893
+v 23768
+v 20850
+v 26587
+v 32412
+v 32711
+v 28624
+v 26932
+v 35709
+v 34822
+v 24170
+v 23927
+v 33008
+v 22195
+v 31337
+v 28280
+v 27137
+v 30552
+v 22710
+v 29233
+v 28511
+v 22489
+v 20153
+v 25135
+v 29761
+v 23854
+v 26156
+v 21794
+v 35097
+v 19760
+v 28337
+v 21980
+v 20676
+v 19974
+v 35585
+v 25460
+v 20579
+v 22607
+v 25398
+v 26961
+v 25841
+v 35659
+v 21443
+v 33286
+v 30491
+v 28983
+v 31746
+v 32411
+v 27604
+v 22287
+v 32772
+v 21733
+v 22044
+v 25425
+v 20367
+v 28580
+v 22826
+v 22452
+v 21483
+v 32147
+v 24791
+v 30743
+v 24779
+v 23802
+v 26934
+v 31471
+v 23697
+v 34830
+v 23121
+v 29156
+v 29941
+v 35763
+v 26479
+v 28623
+v 33170
+v 20269
+v 22107
+v 22666
+v 24627
+v 29220
+v 33611
+v 23513
+v 27260
+v 24156
+v 30008
+v 22330
+v 30327
+v 27713
+v 20397
+v 24890
+v 35259
+v 22725
+v 23106
+v 21824
+v 28589
+v 19512
+v 33622
+v 22499
+v 20208
+v 21351
+v 22521
+v 34685
+v 33674
+v 34623
+v 22096
+v 24332
+v 28732
+v 28880
+v 22494
+v 25022
+v 28456
+v 25666
+v 23065
+v 27276
+v 22218
+v 25091
+v 21405
+v 30020
+v 35386
+v 32459
+v 23045
+v 27665
+v 28338
+v 20708
+v 26563
+v 26820
+v 24378
+v 23664
+v 28696
+v 32845
+v 29613
+v 26788
+v 22472
+v 27420
+v 26882
+v 29378
+v 27239
+v 22122
+v 29850
+v 26897
+v 25047
+v 20505
+v 27741
+v 22738
+v 21783
+v 35005
+v 22916
+v 26665
+v 27313
+v 28941
+v 30707
+v 22875
+v 23283
+v 33444
+v 35747
+v 33545
+v 30413
+v 27725
+v 31718
+v 21903
+v 28590
+v 29243
+v 32422
+v 27732
+v 22840
+v 24849
+v 32090
+v 24486
+v 22027
+v 26026
+v 25143
+v 20214
+v 34138
+v 20285
+v 22078
+v 32355
+v 22464
+v 29808
+v 30559
+v 23750
+v 34196
+v 30980
+v 28509
+v 21687
+v 29947
+v 28478
+v 32958
+v 29391
+v 21958
+v 30049
+v 32900
+v 30931
+v 22309
+v 20876
+v 25591
+v 26398
+v 21527
+v 30961
+v 22081
+v 27125
+v 22924
+v 20179
+v 21062
+v 25738
+v 25129
+v 32347
+v 35165
+v 24069
+v 28358
+v 26801
+v 35168
+v 27508
+v 20754
+v 20720
+v 28164
+v 22702
+v 27984
+v 19620
+v 34670
+v 30064
+v 27625
+v 35472
+v 35898
+v 21773
+v 29056
+v 29318
+v 22503
+v 31857
+v 26701
+v 22369
+v 22761
+v 22468
+v 35482
+v 21016
+v 23086
+v 34080
+v 26736
+v 32350
+v 23263
+v 20591
+v 30333
+v 22546
+v 30028
+v 28929
+v 29563
+v 28159
+v 30261
+v 35374
+v 34224
+v 21713
+v 35373
+v 22372
+v 27397
+v 24129
+v 22532
+v 24560
+v 22563
+v 23089
+v 22466
+v 26631
+v 23159
+v 20929
+v 30004
+v 32239
+v 26458
+v 31488
+v 24711
+v 21882
+v 35474
+v 35335
+v 23053
+v 26792
+v 20856
+v 26794
+v 20379
+v 27892
+v 31838
+v 21496
+v 33131
+v 35327
+v 20329
+v 25249
+v 29448
+v 26828
+v 19604
+v 29251
+v 26108
+v 30457
+v 22314
+v 28158
+v 27086
+v 24970
+v 35405
+v 24054
+v 26704
+v 27435
+v 30316
+v 29522
+v 33697
+v 30679
+v 27594
+v 20695
+v 31824
+v 24329
+v 34547
+v 21626
+v 22601
+v 20629
+v 33221
+v 22412
+v 24354
+v 27486
+v 28982
+v 21901
+v 22324
+v 35811
+v 28290
+v 22508
+v 26269
+v 27608
+v 25515
+v 24348
+v 22414
+v 34903
+v 27519
+v 24841
+v 24638
+v 35052
+v 23262
+v 25552
+v 25658
+v 27055
+v 32107
+v 35553
+v 25748
+v 31210
+v 21090
+v 20165
+v 22548
+v 31393
+v 20945
+v 27904
+v 29708
+v 28367
+v 28007
+v 20572
+v 20749
+v 35542
+v 29085
+v 26245
+v 31091
+v 22247
+v 35316
+v 31228
+v 26352
+v 22450
+v 30673
+v 22997
+v 22269
+v 21081
+v 31934
+v 34901
+v 27408
+v 35333
+v 35363
+v 22955
+v 31042
+v 35696
+v 31135
+v 22456
+v 28088
+v 24847
+v 20762
+v 32164
+v 25307
+v 22069
+v 32042
+v 31936
+v 28111
+v 30476
+v 22683
+v 22636
+v 26230
+v 22400
+v 22568
+v 21726
+v 30400
+v 29317
+v 28442
+v 29891
+v 30520
+v 31323
+v 32018
+v 35080
+v 35748
+v 22423
+v 25557
+v 26988
+v 22091
+v 29175
+v 25280
+v 21179
+v 22048
+v 21803
+v 30244
+v 25809
+v 30367
+v 25778
+v 18899
+v 30118
+v 25351
+v 21911
+v 34824
+v 24085
+v 31479
+v 28545
+v 22367
+v 27548
+v 35630
+v 33061
+v 31521
+v 29821
+v 21543
+v 24512
+v 23944
+v 29449
+v 31625
+v 22573
+v 28571
+v 33647
+v 28568
+v 28807
+v 28192
+v 29182
+v 22848
+v 30557
+v 30772
+v 20814
+v 19338
+v 34299
+v 25886
+v 22980
+v 19749
+v 33910
+v 30001
+v 21195
+v 22181
+v 33716
+v 22283
+v 24845
+v 25897
+v 21343
+v 34109
+v 25018
+v 22844
+v 23005
+v 29659
+v 32636
+v 20600
+v 30339
+v 22346
+v 30393
+v 23006
+v 29507
+v 29515
+v 24906
+v 32726
+v 25625
+v 21462
+v 35369
+v 29512
+v 21441
+v 22592
+v 32119
+v 26963
+v 26835
+v 25931
+v 23584
+v 22478
+v 35361
+v 26089
+v 34799
+v 22506
+v 20019
+v 29867
+v 20396
+v 23782
+v 34204
+v 30462
+v 22307
+v 22401
+v 28874
+v 28663
+v 35317
+v 33787
+v 21932
+v 32654
+v 31981
+v 22671
+v 22863
+v 27933
+v 25713
+v 29615
+v 22739
+v 25103
+v 20795
+v 21013
+v 21390
+v 24954
+v 23869
+v 21784
+v 20595
+v 27074
+v 27426
+v 25092
+v 20473
+v 30541
+v 31030
+v 34863
+v 24598
+v 27964
+v 21481
+v 34081
+v 22536
+v 35749
+v 31076
+v 35079
+v 22130
+v 28032
+v 22553
+v 24382
+v 33998
+v 32403
+v 31108
+v 27893
+v 35568
+v 24459
+v 22351
+v 20020
+v 33101
+v 20420
+v 25839
+v 25308
+v 20486
+v 32288
+v 30487
+v 27559
+v 27990
+v 22210
+v 20428
+v 25265
+v 30459
+v 24741
+v 26272
+v 35648
+v 22529
+v 24822
+v 27251
+v 32037
+v 26305
+v 21414
+v 23148
+v 34319
+v 31027
+v 26872
+v 26351
+v 20168
+v 35334
+v 32435
+v 23199
+v 26940
+v 22335
+v 22132
+v 22605
+v 22246
+v 21662
+v 29970
+v 23117
+v 23478
+v 25611
+v 32265
+v 20074
+v 23561
+v 22843
+v 33051
+v 22496
+v 32929
+v 22818
+v 26880
+v 22028
+v 32545
+v 30409
+v 34441
+v 25221
+v 22705
+v 21810
+v 30371
+v 29992
+v 27342
+v 24179
+v 23476
+v 30905
+v 29118
+v 22451
+v 28891
+v 22764
+v 23192
+v 24185
+v 23209
+v 22206
+v 22681
+v 29864
+v 32130
+v 22158
+v 31816
+v 23538
+v 30923
+v 25140
+v 27945
+v 24630
+v 31524
+v 31990
+v 25503
+v 22757
+v 18725
+v 21816
+v 25150
+v 25539
+v 22336
+v 29395
+v 22557
+v 22524
+v 33856
+v 28579
+v 22648
+v 21682
+v 26130
+v 26266
+v 29689
+v 22784
+v 22717
+v 35272
+v 32884
+v 34707
+v 30854
+v 35325
+v 25291
+v 28212
+v 20145
+v 22447
+v 30593
+v 28316
+v 34554
+v 25164
+v 32424
+v 31193
+v 32300
+v 34502
+v 21584
+v 20541
+v 21143
+v 23063
+v 22059
+v 23486
+v 23545
+v 27026
+v 28350
+v 29558
+v 26362
+v 23619
+v 32365
+v 26470
+v 25555
+v 35571
+v 26006
+v 24992
+v 19308
+v 27746
+v 23203
+v 26254
+v 19629
+v 20178
+v 35167
+v 29069
+v 27803
+v 33134
+v 31863
+v 26877
+v 20474
+v 24540
+v 33895
+v 28507
+v 27791
+v 29280
+v 26807
+v 30295
+v 23072
+v 27993
+v 25614
+v 30509
+v 23273
+v 29091
+v 35681
+v 22928
+v 33481
+v 23227
+v 22021
+v 27529
+v 30500
+v 35411
+v 22668
+v 22253
+v 25486
+v 28840
+v 29446
+v 35487
+v 31841
+v 31492
+v 23134
+v 35137
+v 22775
+v 27641
+v 20927
+v 30820
+v 26684
+v 25926
+v 35438
+v 27004
+v 20682
+v 30381
+v 27124
+v 29206
+v 33219
+v 28605
+v 33368
+v 22780
+v 30188
+v 35117
+v 23049
+v 32216
+v 26323
+v 22193
+v 23960
+v 34966
+v 23690
+v 23517
+v 22734
+v 35403
+v 23803
+v 22556
+v 22300
+v 22358
+v 21421
+v 25489
+v 23147
+v 23772
+v 21516
+v 30760
+v 25315
+v 27429
+v 23613
+v 25780
+v 35376
+v 27939
+v 35262
+v 27176
+v 20990
+v 22333
+v 31470
+v 29576
+v 26195
+v 28306
+v 28432
+v 32576
+v 30686
+v 29675
+v 31062
+v 33105
+v 27416
+v 24661
+v 20709
+v 30699
+v 35332
+v 22077
+v 22962
+v 30401
+v 20277
+v 21964
+v 24483
+v 28754
+v 34003
+v 27888
+v 29890
+v 27480
+v 21812
+v 28919
+v 34004
+v 31231
+v 27898
+v 22365
+v 27656
+v 24648
+v 30577
+v 35183
+v 22726
+v 20441
+v 22567
+v 22523
+v 21547
+v 25941
+v 22360
+v 22754
+v 30658
+v 34172
+v 28841
+v 31037
+v 24456
+v 30043
+v 24591
+v 31889
+v 24133
+v 35092
+v 27222
+v 23467
+v 32433
+v 27823
+v 20527
+v 29946
+v 33537
+v 26546
+v 29410
+v 26374
+v 30530
+v 29554
+v 35051
+v 23324
+v 20345
+v 32596
+v 23880
+v 26364
+v 35401
+v 28173
+v 26824
+v 32421
+v 29093
+v 26953
+v 23895
+v 22231
+v 31811
+v 32582
+v 26634
+v 27853
+v 23737
+v 20952
+v 30477
+v 28508
+v 23466
+v 28779
+v 29172
+v 35515
+v 24938
+v 32017
+v 22476
+v 29936
+v 31647
+v 24749
+v 30172
+v 25567
+v 21624
+v 25490
+v 22325
+v 30119
+v 31172
+v 29465
+v 28477
+v 35817
+v 23924
+v 22877
+v 29751
+v 31837
+v 25086
+v 23061
+v 20514
+v 31245
+v 27092
+v 32120
+v 34735
+v 24618
+v 21845
+v 21711
+v 30230
+v 25888
+v 23974
+v 26909
+v 24245
+v 29623
+v 26216
+v 25916
+v 23807
+v 23709
+v 23138
+v 22892
+v 26591
+v 35073
+v 26507
+v 35210
+v 26450
+v 20513
+v 22383
+v 31016
+v 22520
+v 25635
+v 29396
+v 30725
+v 19366
+v 34907
+v 30778
+v 35765
+v 29770
+v 26658
+v 35876
+v 31029
+v 21636
+v 22749
+v 27776
+v 27458
+v 30613
+v 23865
+v 23074
+v 26217
+v 35081
+v 22261
+v 34491
+v 27398
+v 24998
+v 24425
+v 28273
+v 32608
+v 30345
+v 29282
+v 33417
+v 22876
+v 22627
+v 31839
+v 29734
+v 35342
+v 18850
+v 35912
+v 25321
+v 24773
+v 29758
+v 23200
+v 34027
+v 22020
+v 24102
+v 30288
+v 27340
+v 30569
+v 30239
+v 27617
+v 35905
+v 30143
+v 22138
+v 35865
+v 31115
+v 22217
+v 29429
+v 22643
+v 27751
+v 24870
+v 20380
+v 20228
+v 29555
+v 20868
+v 20612
+v 27016
+v 27224
+v 34721
+v 25078
+v 34369
+v 25554
+v 21280
+v 22543
+v 21905
+v 27494
+v 27738
+v 23639
+v 20817
+v 19585
+v 26560
+v 33330
+v 30486
+v 35546
+v 22899
+v 35759
+v 23609
+v 33905
+v 29303
+v 31218
+v 22995
+v 27195
+v 23396
+v 31772
+v 21217
+v 34941
+v 31543
+v 34052
+v 26302
+v 25360
+v 24445
+v 27357
+v 22410
+v 23523
+v 25736
+v 22364
+v 28048
+v 27680
+v 25899
+v 22215
+v 33914
+v 26524
+v 28715
+v 34982
+v 34767
+v 23660
+v 30419
+v 31345
+v 28312
+v 27407
+v 33999
+v 21269
+v 25583
+v 32138
+v 24033
+v 35884
+v 25133
+v 25456
+v 35367
+v 28896
+v 22641
+v 24716
+v 22923
+v 20723
+v 29766
+v 22434
+v 31924
+v 29907
+v 30015
+v 21546
+v 31140
+v 24642
+v 22564
+v 33721
+v 22614
+v 33276
+v 32315
+v 31696
+v 25256
+v 28564
+v 23776
+v 28755
+v 24307
+v 23669
+v 23164
+v 21447
+v 29823
+v 31296
+v 25945
+v 35040
+v 20664
+v 23321
+v 25725
+v 23463
+v 25401
+v 22610
+v 35328
+v 28327
+v 32135
+v 20330
+v 25893
+v 32040
+v 27326
+v 21607
+v 26759
+v 26301
+v 34954
+v 20550
+v 34211
+v 35895
+v 26996
+v 24293
+v 28637
+v 26256
+v 35436
+v 26052
+v 34443
+v 24000
+v 31118
+v 27341
+v 19677
+v 25175
+v 34814
+v 20925
+v 23560
+v 29915
+v 24057
+v 31798
+v 25058
+v 32392
+v 35795
+v 26772
+v 25819
+v 20606
+v 34883
+v 22224
+v 22748
+v 32244
+v 22788
+v 29265
+v 22413
+v 22561
+v 34280
+v 20492
+v 24234
+v 21635
+v 25946
+v 30061
+v 30235
+v 35618
+v 28295
+v 29760
+v 22194
+v 22166
+v 35404
+v 35485
+v 31921
+v 27649
+v 30852
+v 25679
+v 31466
+v 20686
+v 29764
+v 32984
+v 33363
+v 34372
+v 35228
+v 21611
+v 22388
+v 30231
+v 26359
+v 26859
+v 20254
+v 30441
+v 34025
+v 22104
+v 22055
+v 22486
+v 22502
+v 32005
+v 20342
+v 30592
+v 32503
+v 32022
+v 31048
+v 24441
+v 22893
+v 22661
+v 35926
+v 23009
+v 32682
+v 26310
+v 30920
+v 23414
+v 33781
+v 25613
+v 30933
+v 23558
+v 27098
+v 35066
+v 28069
+v 23162
+v 23525
+v 26307
+v 21840
+v 29746
+v 26403
+v 23533
+v 23124
+v 30900
+v 35173
+v 23216
+v 27808
+v 31957
+v 31836
+v 20194
+v 35434
+v 30676
+v 23726
+v 29575
+v 22537
+v 33933
+v 25895
+v 22345
+v 30205
+v 31481
+v 35310
+v 22079
+v 32169
+v 22437
+v 30190
+v 28445
+v 23260
+v 30466
+v 24944
+v 35650
+v 24165
+v 29232
+v 30072
+v 26912
+v 34267
+v 21258
+v 32165
+v 31364
+v 22587
+v 35274
+v 29989
+v 22419
+v 24050
+v 33198
+v 20874
+v 28938
+v 35071
+v 25187
+v 34115
+v 32395
+v 29467
+v 25038
+v 26575
+v 21963
+v 28200
+v 32077
+v 22403
+v 23503
+v 23059
+v 30624
+v 22834
+v 22603
+v 22203
+v 22026
+v 27826
+v 23458
+v 33360
+v 29036
+v 23360
+v 22869
+v 34918
+v 27878
+v 26169
+v 20293
+v 33572
+v 26382
+v 19648
+v 30358
+v 25866
+v 25422
+v 23925
+v 26505
+v 24823
+v 27186
+v 34888
+v 23460
+v 25031
+v 30388
+v 21937
+v 29869
+v 34993
+v 24831
+v 21525
+v 23142
+v 24197
+v 30834
+v 28288
+v 28243
+v 23310
+v 26155
+v 23091
+v 27177
+v 32434
+v 25306
+v 19186
+v 19932
+v 25560
+v 20553
+v 26469
+v 35368
+v 35300
+v 27359
+v 23156
+v 35852
+v 32103
+v 22070
+v 24037
+v 25278
+v 24979
+v 29248
+v 23105
+v 32518
+v 35304
+v 28241
+v 29115
+v 21009
+v 35375
+v 23495
+v 32727
+v 30060
+v 23346
+v 25467
+v 34713
+v 20870
+v 28419
+v 21233
+v 26757
+v 23118
+v 22850
+v 34751
+v 22693
+v 20993
+v 35662
+v 30495
+v 23388
+v 29601
+v 29462
+v 32588
+v 35538
+v 29826
+v 30829
+v 32024
+v 25079
+v 25889
+v 24559
+v 23917
+v 24044
+v 24806
+v 26603
+v 22769
+v 33493
+v 35782
+v 21653
+v 31884
+v 35354
+v 23961
+v 35007
+v 20425
+v 35828
+v 25437
+v 22984
+v 27870
+v 29099
+v 35639
+v 22118
+v 34122
+v 25925
+v 22782
+v 20112
+v 22145
+v 31796
+v 30232
+v 27263
+v 27830
+v 25127
+v 26714
+v 23178
+v 27265
+v 21744
+v 31049
+v 19925
+v 31591
+v 31897
+v 25803
+v 24204
+v 32184
+v 22170
+v 26990
+v 20295
+v 23347
+v 27048
+v 35661
+v 22606
+v 34598
+v 22656
+v 25202
+v 31762
+v 23919
+v 24587
+v 19848
+v 26959
+v 30546
+v 21699
+v 20577
+v 34164
+v 28286
+v 24470
+v 31854
+v 29284
+v 24532
+v 20899
+v 24805
+v 21092
+v 31698
+v 20162
+v 32781
+v 21025
+v 27644
+v 30657
+v 32621
+v 26141
+v 29048
+v 22958
+v 34225
+v 20333
+v 28424
+v 22087
+v 33676
+v 30134
+v 26552
+v 20360
+v 28628
+v 25981
+v 22959
+v 23151
+v 22200
+v 23702
+v 23234
+v 29677
+v 27989
+v 22131
+v 20394
+v 29121
+v 25915
+v 23379
+v 22970
+v 27871
+v 23377
+v 27702
+v 20447
+v 24742
+v 30010
+v 29097
+v 23021
+v 26056
+v 25642
+v 29143
+v 26415
+v 29971
+v 22490
+v 31258
+v 29534
+v 29720
+v 26115
+v 33978
+v 26271
+v 19678
+v 34176
+v 19194
+v 27689
+v 35592
+v 35695
+v 32394
+v 22378
+v 24482
+v 23637
+v 34188
+v 22041
+v 23206
+v 33449
+v 19880
+v 26228
+v 21344
+v 25102
+v 35620
+v 22807
+v 23551
+v 21819
+v 28042
+v 29314
+v 20309
+v 31304
+v 27229
+v 27532
+v 22961
+v 22590
+v 21661
+v 35663
+v 35877
+v 28172
+v 29754
+v 19791
+v 23431
+v 33590
+v 25106
+v 31495
+v 24608
+v 34983
+v 25540
+v 35850
+v 29249
+v 29071
+v 35416
+v 35646
+v 24201
+v 31112
+v 21902
+v 32060
+v 20628
+v 32314
+v 21691
+v 19971
+v 19949
+v 24934
+v 25219
+v 27181
+v 27622
+v 27354
+v 24619
+v 21984
+v 21630
+v 19659
+v 22202
+v 23792
+v 26949
+v 35509
+v 30395
+v 34024
+v 27433
+v 29470
+v 22238
+v 19931
+v 23661
+v 34488
+v 30668
+v 33523
+v 24449
+v 30706
+v 29636
+v 32882
+v 23177
+v 25919
+v 28614
+v 35028
+v 28191
+v 30787
+v 30180
+v 30426
+v 28103
+v 27676
+v 29583
+v 24602
+v 35445
+v 24592
+v 35638
+v 34539
+v 20677
+v 23516
+v 31674
+v 20849
+v 22024
+v 26585
+v 22939
+v 28097
+v 30173
+v 35529
+v 28287
+v 19908
+v 22387
+v 27946
+v 19943
+v 35697
+v 30554
+v 23112
+v 22014
+v 30262
+v 23185
+v 30228
+v 35624
+v 20092
+v 27350
+v 26197
+v 32079
+v 34932
+v 23787
+v 29228
+v 27114
+v 20043
+v 30946
+v 34688
+v 29854
+v 30822
+v 29031
+v 32947
+v 26259
+v 34038
+v 30913
+v 28864
+v 22495
+v 23256
+v 22822
+v 22370
+v 30748
+v 23335
+v 24279
+v 29442
+v 30848
+v 28911
+v 35712
+v 27218
+v 22544
+v 23813
+v 22811
+v 35881
+v 26653
+v 34516
+v 26583
+v 31301
+v 27316
+v 35770
+v 30641
+v 32466
+v 25985
+v 35814
+v 32025
+v 26129
+v 20072
+v 28225
+v 35845
+v 20865
+v 19813
+v 27978
+v 20028
+v 35268
+v 24515
+v 28051
+v 31491
+v 30891
+v 32729
+v 28176
+v 35832
+v 31132
+v 33075
+v 30949
+v 22552
+v 30148
+v 24625
+v 35943
+v 25487
+v 23368
+v 30344
+v 20777
+v 26920
+v 20596
+v 34499
+v 24925
+v 32186
+v 31173
+v 27179
+v 25711
+v 33534
+v 30722
+v 24477
+v 29690
+v 30270
+v 20060
+v 27145
+v 29596
+v 30580
+v 35341
+v 24637
+v 21037
+v 26249
+v 28391
+v 18911
+v 33735
+v 32089
+v 22612
+v 35321
+v 32606
+v 29146
+v 25440
+v 23872
+v 22712
+v 29974
+v 26694
+v 29002
+v 28787
+v 22576
+v 32521
+v 34350
+v 30874
+v 27778
+v 29415
+v 29535
+v 28901
+v 35621
+v 35567
+v 20588
+v 26248
+v 25617
+v 26153
+v 29859
+v 34567
+v 24429
+v 28927
+v 26070
+v 29656
+v 28455
+v 26649
+v 31634
+v 27692
+v 22651
+v 28639
+v 26636
+v 31153
+v 19049
+v 27630
+v 22913
+v 27332
+v 22539
+v 35343
+v 28071
+v 29291
+v 25754
+v 20236
+v 21656
+v 34076
+v 35935
+v 25002
+v 31081
+v 24898
+v 20120
+v 35410
+v 21776
+v 26111
+v 30320
+v 20065
+v 24488
+v 26410
+v 29842
+v 31330
+v 27953
+v 29541
+v 30801
+v 21862
+v 31643
+v 31363
+v 22996
+v 24747
+v 34110
+v 20177
+v 30997
+v 33993
+v 28135
+v 35637
+v 28238
+v 35762
+v 22978
+v 35484
+v 22471
+v 31229
+v 31553
+v 22855
+v 23738
+v 28821
+v 28791
+v 25293
+v 23620
+v 33486
+v 24330
+v 35432
+v 28343
+v 35767
+v 31035
+v 35619
+v 20459
+v 33307
+v 25592
+v 29095
+v 35495
+v 32391
+v 24857
+v 33054
+v 35604
+v 28465
+v 28423
+v 35347
+v 30973
+v 32627
+v 20108
+v 35331
+v 23238
+v 35543
+v 34130
+v 35547
+v 24457
+v 30389
+v 27259
+v 22736
+v 29765
+v 23945
+v 35067
+v 31011
+v 31299
+v 22885
+v 22968
+v 25151
+v 35651
+v 29047
+v 30840
+v 28730
+v 28969
+v 26834
+v 32428
+v 31207
+v 25093
+v 20110
+v 25730
+v 26233
+v 20779
+v 24904
+v 27842
+v 23526
+v 24767
+v 25662
+v 24838
+v 29905
+v 22481
+v 24367
+v 22966
+v 25602
+v 29269
+v 33875
+v 20559
+v 22719
+v 20088
+v 22744
+v 22588
+v 23293
+v 24817
+v 32373
+v 34033
+v 26063
+v 20791
+v 22634
+v 23296
+v 27474
+v 25813
+v 32764
+v 21817
+v 32449
+v 23202
+v 26527
+v 27279
+v 28113
+v 31642
+v 22756
+v 21717
+v 29055
+v 35351
+v 35339
+v 24967
+v 32171
+v 25209
+v 28099
+v 29789
+v 27043
+v 24999
+v 35775
+v 25208
+v 28065
+v 27555
+v 21284
+v 30222
+v 21868
+v 28770
+v 33231
+v 30966
+v 27768
+v 23889
+v 22674
+v 32661
+v 35557
+v 28994
+v 20079
+v 26985
+v 33831
+v 30831
+v 35446
+v 23837
+v 26431
+v 29355
+v 30081
+v 25138
+v 29856
+v 23657
+v 23794
+v 32660
+v 28922
+v 35581
+v 35572
+v 27117
+v 22755
+v 22140
+v 29714
+v 31856
+v 32456
+v 28360
+v 26174
+v 29356
+v 26929
+v 30591
+v 26762
+v 33860
+v 29454
+v 23444
+v 32697
+v 32068
+v 18234
+v 26296
+v 32750
+v 29836
+v 29109
+v 35649
+v 32550
+v 29843
+v 31992
+v 27999
+v 23327
+v 34419
+v 21416
+v 30315
+v 26251
+v 29436
+v 23472
+v 35378
+v 23743
+v 25073
+v 35800
+v 23085
+v 28944
+v 35520
+v 20810
+v 25336
+v 24957
+v 35355
+v 33525
+v 34829
+v 28574
+v 20637
+v 27749
+v 29816
+v 20113
+v 26073
+v 30488
+v 35711
+v 20098
+v 27401
+v 24936
+v 31701
+v 26899
+v 26511
+v 29473
+v 34303
+v 27501
+v 28597
+v 35722
+v 32015
+v 25180
+v 34186
+v 27645
+v 32696
+v 34873
+v 28761
+v 35508
+v 28924
+v 20359
+v 26368
+v 31247
+v 26325
+v 27882
+v 27030
+v 22139
+v 35671
+v 32003
+v 23114
+v 34466
+v 31244
+v 22504
+v 24659
+v 23412
+v 35702
+v 31416
+v 35698
+v 31871
+v 24077
+v 28819
+v 35720
+v 22852
+v 19089
+v 20271
+v 25968
+v 26453
+v 22040
+v 26793
+v 27073
+v 26237
+v 20554
+v 27409
+v 34564
+v 30728
+v 34307
+v 30212
+v 22854
+v 28825
+v 34750
+v 31155
+v 28222
+v 28396
+v 31989
+v 35387
+v 23422
+v 23237
+v 22407
+v 32455
+v 20922
+v 23579
+v 29983
+v 19337
+v 31535
+v 35427
+v 20581
+v 33688
+v 30746
+v 26902
+v 26633
+v 25654
+v 23248
+v 35124
+v 24448
+v 30434
+v 25032
+v 29877
+v 22558
+v 24662
+v 25524
+v 33436
+v 29469
+v 21878
+v 35171
+v 20607
+v 26451
+v 32420
+v 20144
+v 26179
+v 24120
+v 19835
+v 28489
+v 22715
+v 22180
+v 35362
+v 30649
+v 35431
+v 33320
+v 24485
+v 32240
+v 25606
+v 27422
+v 22045
+v 35451
+v 34919
+v 23153
+v 22058
+v 24761
+v 35518
+v 22737
+v 20406
+v 28202
+v 27733
+v 22007
+v 22868
+v 29504
+v 30456
+v 25600
+v 26142
+v 23686
+v 35590
+v 20493
+v 26299
+v 22417
+v 24864
+v 27772
+v 34418
+v 35628
+v 35683
+v 27250
+v 24260
+v 21650
+v 26870
+v 27986
+v 33489
+v 26974
+v 19384
+v 28461
+v 35486
+v 33508
+v 27323
+v 20412
+v 22820
+v 29562
+v 25257
+v 29491
+v 29246
+v 25445
+v 32590
+v 34097
+v 32589
+v 32084
+v 19961
+v 19834
+v 30653
+v 22630
+v 25603
+v 30300
+v 34385
+v 35526
+v 20325
+v 34381
+v 35407
+v 28533
+v 24116
+v 24184
+v 23701
+v 30566
+v 28061
+v 21589
+v 20464
+v 20248
+v 28146
+v 27355
+v 22806
+v 28115
+v 28402
+v 30194
+v 35464
+v 22783
+v 24230
+v 31276
+v 29327
+v 28010
+v 25998
+v 27327
+v 35908
+v 33273
+v 34365
+v 21774
+v 20745
+v 24916
+v 31204
+v 24766
+v 22095
+v 28649
+v 30041
+v 24117
+v 22304
+v 23500
+v 25285
+v 24324
+v 28516
+v 20308
+v 26910
+v 23329
+v 23946
+v 21085
+v 32192
+v 27454
+v 28320
+v 29934
+v 23184
+v 27345
+v 20847
+v 30161
+v 20571
+v 33634
+v 24717
+v 32825
+v 20605
+v 23980
+v 31445
+v 26343
+v 24237
+v 21445
+v 20188
+v 30341
+v 26350
+v 29503
+v 27685
+v 28655
+v 33994
+v 24640
+v 24734
+v 28974
+v 28229
+v 31078
+v 28060
+v 22192
+v 33921
+v 30070
+v 24225
+v 24465
+v 23633
+v 34411
+v 20950
+v 29320
+v 30380
+v 23249
+v 31117
+v 27917
+v 31215
+v 32316
+v 33943
+v 24356
+v 27040
+v 23756
+v 34407
+v 28127
+v 22776
+v 23987
+v 21667
+v 25589
+v 31205
+v 24150
+v 20820
+v 28023
+v 35318
+v 22100
+v 28830
+v 23818
+v 22762
+v 34585
+v 31223
+v 33792
+v 23123
+v 21907
+v 28591
+v 22190
+v 20767
+v 31316
+v 33304
+v 20531
+v 34001
+v 34067
+v 23062
+v 24862
+v 23695
+v 35095
+v 23246
+v 32096
+v 29013
+v 26177
+v 35113
+v 20610
+v 29898
+v 34723
+v 33701
+v 29019
+v 26502
+v 22004
+v 30888
+v 21299
+v 22514
+v 27890
+v 29313
+v 33564
+v 29537
+v 26135
+v 28386
+v 34958
+v 27807
+v 23606
+v 26805
+v 24146
+v 22334
+v 21857
+v 34249
+v 31236
+v 23198
+v 26918
+v 33776
+v 20944
+v 28889
+v 20981
+v 32638
+v 30962
+v 24252
+v 28537
+v 23389
+v 30135
+v 31324
+v 23022
+v 31454
+v 22662
+v 27394
+v 25188
+v 22120
+v 31150
+v 27021
+v 20146
+v 35379
+v 29804
+v 23992
+v 26675
+v 26690
+v 35322
+v 24172
+v 22707
+v 29238
+v 35718
+v 35020
+v 23420
+v 21108
+v 34537
+v 25374
+v 33142
+v 33321
+v 28596
+v 23267
+v 33355
+v 28143
+v 29231
+v 20129
+v 20076
+v 20197
+v 26446
+v 32041
+v 22874
+v 28254
+v 25550
+v 33279
+v 27217
+v 31174
+v 31322
+v 21879
+v 30879
+v 22857
+v 30851
+v 35330
+v 25610
+v 33530
+v 35768
+v 27930
+v 23896
+v 27169
+v 22825
+v 28689
+v 30429
+v 28986
+v 29154
+v 29508
+v 22894
+v 23453
+v 31960
+v 24121
+v 31137
+v 28151
+v 29411
+v 35714
+v 34446
+v 28925
+v 27096
+v 24392
+v 23562
+v 23568
+v 28910
+v 23951
+v 28829
+v 20281
+v 20327
+v 34759
+v 23629
+v 33709
+v 21088
+v 27709
+v 33521
+v 35611
+v 23290
+v 30784
+v 23000
+v 35729
+v 21949
+v 31541
+v 29213
+v 21764
+v 30705
+v 25671
+v 23432
+v 20897
+v 22424
+v 25337
+v 24528
+v 29652
+v 29090
+v 32730
+v 32713
+v 24346
+v 22678
+v 24853
+v 27651
+v 25101
+v 23504
+v 26100
+v 24505
+v 21536
+v 25977
+v 21369
+v 33381
+v 24915
+v 33421
+v 23107
+v 31505
+v 27136
+v 25601
+v 21457
+v 32581
+v 27899
+v 20707
+v 29485
+v 20326
+v 33345
+v 24789
+v 26481
+v 35455
+v 26896
+v 30109
+v 29670
+v 18662
+v 34902
+v 26523
+v 21216
+v 27971
+v 20573
+v 20796
+v 32274
+v 35094
+v 25420
+v 29398
+v 28315
+v 26317
+v 33936
+v 24265
+v 20475
+v 31103
+v 24196
+v 34702
+v 20212
+v 28702
+v 29402
+v 22831
+v 21531
+v 28984
+v 26586
+v 24879
+v 24176
+v 23931
+v 23130
+v 20163
+v 32931
+v 21900
+v 25216
+v 34538
+v 34060
+v 28950
+v 26482
+v 31777
+v 20297
+v 34860
+v 33408
+v 24597
+v 23501
+v 20718
+v 24617
+v 24168
+v 24304
+v 20275
+v 26608
+v 20300
+v 29185
+v 35803
+v 22911
+v 22080
+v 23845
+v 27967
+v 23550
+v 28265
+v 21831
+v 30318
+v 20258
+v 23069
+v 24118
+v 26330
+v 29102
+v 32027
+v 23785
+v 31170
+v 19985
+v 20362
+v 27228
+v 28512
+v 23994
+v 24183
+v 20634
+v 26244
+v 28272
+v 31473
+v 23556
+v 25655
+v 30587
+v 32413
+v 22393
+v 20375
+v 25035
+v 20467
+v 22402
+v 26750
+v 33529
+v 22251
+v 25269
+v 22682
+v 25874
+v 28471
+v 20131
+v 24519
+v 30975
+v 32179
+v 31406
+v 33466
+v 32734
+v 29955
+v 21317
+v 23285
+v 34230
+v 20374
+v 31533
+v 28517
+v 31442
+v 26466
+v 30836
+v 34628
+v 34187
+v 28495
+v 30754
+v 21267
+v 23530
+v 20678
+v 23186
+v 25647
+v 26121
+v 26611
+v 24190
+v 35617
+v 22112
+v 27024
+v 22408
+v 29694
+v 30845
+v 34677
+v 30407
+v 21807
+v 20314
+v 33361
+v 29325
+v 20246
+v 23050
+v 34087
+v 29452
+v 32376
+v 26652
+v 21272
+v 28504
+v 28045
+v 21128
+v 33819
+v 26075
+v 25222
+v 33253
+v 34921
+v 21439
+v 27883
+v 27873
+v 22796
+v 24463
+v 32030
+v 26444
+v 30621
+v 23527
+v 27963
+v 27979
+v 30301
+v 29709
+v 19975
+v 20016
+v 33115
+v 32175
+v 27524
+v 34530
+v 30080
+v 20496
+v 23999
+v 29077
+v 35831
+v 24566
+v 24132
+v 20176
+v 33218
+v 27427
+v 22357
+v 20699
+v 32868
+v 20942
+v 26685
+v 24851
+v 31141
+v 23333
+v 29122
+v 23831
+v 26354
+v 22012
+v 27223
+v 25375
+v 21753
+v 28039
+v 21105
+v 20848
+v 34296
+v 25451
+v 33084
+v 22953
+v 20000
+v 28233
+v 30542
+v 35349
+v 23070
+v 21228
+v 22946
+v 20569
+v 27796
+v 26969
+v 23725
+v 25958
+v 24993
+v 30544
+v 29066
+v 30912
+v 24688
+v 27167
+v 21245
+v 23391
+v 29707
+v 20419
+v 28817
+v 20343
+v 22988
+v 20875
+v 20638
+v 20301
+v 22730
+v 26400
+v 28304
+v 29405
+v 30411
+v 24966
+v 20734
+v 35758
+v 30687
+v 34405
+v 21150
+v 30099
+v 23693
+v 34480
+v 28075
+v 33369
+v 23922
+v 26417
+v 29039
+v 29208
+v 24830
+v 20278
+v 32305
+v 20312
+v 27521
+v 31629
+v 26785
+v 20710
+v 34946
+v 25743
+v 33961
+v 25883
+v 30654
+v 27522
+v 30992
+v 27298
+v 25953
+v 32324
+v 27079
+v 28133
+v 31539
+v 29939
+v 18957
+v 30040
+v 33937
+v 25088
+v 35163
+v 27093
+v 19886
+v 20988
+v 21518
+v 25258
+v 35382
+v 35371
+v 28583
+v 21681
+v 31581
+v 19454
+v 26839
+v 32686
+v 30863
+v 22465
+v 35311
+v 32659
+v 20232
+v 26889
+v 27872
+v 26333
+v 34876
+v 34021
+v 20391
+v 21771
+v 22432
+v 23271
+v 21091
+v 35105
+v 22799
+v 33045
+v 24720
+v 25900
+v 23753
+v 24848
+v 22888
+v 29125
+v 32445
+v 20444
+v 30608
+v 35396
+v 20976
+v 34541
+v 34593
+v 23751
+v 21389
+v 26550
+v 26843
+v 34255
+v 30450
+v 21058
+v 22770
+v 22404
+v 23638
+v 24115
+v 25366
+v 24609
+v 19712
+v 30779
+v 25652
+v 23615
+v 23710
+v 24997
+v 21528
+v 20797
+v 24788
+v 29161
+v 32830
+v 20860
+v 21252
+v 24325
+v 31462
+v 31300
+v 33497
+v 35119
+v 21975
+v 24809
+v 35666
+v 28826
+v 34132
+v 23587
+v 28881
+v 22803
+v 33797
+v 31275
+v 21470
+v 25493
+v 26369
+v 35807
+v 24314
+v 26295
+v 27032
+v 35297
+v 23364
+v 21579
+v 25566
+v 21594
+v 21028
+v 28728
+v 20520
+v 21382
+v 24171
+v 28262
+v 35537
+v 34173
+v 32446
+v 28067
+v 23369
+v 34457
+v 25438
+v 22658
+v 30909
+v 19769
+v 26669
+v 30255
+v 24816
+v 29001
+v 28184
+v 28762
+v 23266
+v 21298
+v 22908
+v 22135
+v 31064
+v 23583
+v 22485
+v 35392
+v 33495
+v 22046
+v 34371
+v 34972
+v 22849
+v 24182
+v 34565
+v 22944
+v 23937
+v 34629
+v 30271
+v 20775
+v 29932
+v 34905
+v 21700
+v 32502
+v 30384
+v 31551
+v 22862
+v 20221
+v 32669
+v 27411
+v 21513
+v 23846
+v 29490
+v 20203
+v 35223
+v 23349
+v 29814
+v 22149
+v 22945
+v 33480
+v 35021
+v 34268
+v 32531
+v 30602
+v 31189
+v 21986
+v 29369
+v 33323
+v 26214
+v 35686
+v 22692
+v 29835
+v 31548
+v 23734
+v 25788
+v 26525
+v 23692
+v 23582
+v 21054
+v 24029
+v 32325
+v 24939
+v 19649
+v 27947
+v 26573
+v 25799
+v 29631
+v 31171
+v 23577
+v 29385
+v 22906
+v 35418
+v 26571
+v 35008
+v 32770
+v 35490
+v 23953
+v 27396
+v 31394
+v 34853
+v 30534
+v 30033
+v 21180
+v 28258
+v 29162
+v 27942
+v 24082
+v 25004
+v 28278
+v 26380
+v 24842
+v 26316
+v 31847
+v 34325
+v 31281
+v 25672
+v 24373
+v 31154
+v 33353
+v 29929
+v 27839
+v 30579
+v 28318
+v 25372
+v 18803
+v 27464
+v 20915
+v 28123
+v 22033
+v 24694
+v 29785
+v 34362
+v 21302
+v 22639
+v 23479
+v 24331
+v 34519
+v 28090
+v 32804
+v 25009
+v 21385
+v 30057
+v 26838
+v 33896
+v 23035
+v 24240
+v 27352
+v 25755
+v 31668
+v 30311
+v 31685
+v 19562
+v 29812
+v 22235
+v 20267
+v 22440
+v 22015
+v 30303
+v 25224
+v 27242
+v 28893
+v 28802
+v 32450
+v 21222
+v 22696
+v 24645
+v 23194
+v 35277
+v 31483
+v 26098
+v 29604
+v 19685
+v 24017
+v 35323
+v 28301
+v 29339
+v 22147
+v 29950
+v 21683
+v 30917
+v 28228
+v 30177
+v 26623
+v 23406
+v 24489
+v 20511
+v 25806
+v 25424
+v 26923
+v 30225
+v 30296
+v 29345
+v 25542
+v 27153
+v 28799
+v 23979
+v 22289
+v 21021
+v 25667
+v 31450
+v 29803
+v 24167
+v 29626
+v 23983
+v 32319
+v 27927
+v 22421
+v 22102
+v 23786
+v 30098
+v 21048
+v 31145
+v 28555
+v 29683
+v 29587
+v 23952
+v 24500
+v 28118
+v 31770
+v 22652
+v 21164
+v 22276
+v 31497
+v 24323
+v 21307
+v 34916
+v 21007
+v 34137
+v 21107
+v 24977
+v 25104
+v 29755
+v 34041
+v 27189
+v 29381
+v 22743
+v 22631
+v 33312
+v 25114
+v 21678
+v 24578
+v 27836
+v 24098
+v 20959
+v 29207
+v 24138
+v 31879
+v 21858
+v 29784
+v 25751
+v 34844
+v 34527
+v 28382
+v 22964
+v 25581
+v 29215
+v 28513
+v 34652
+v 21348
+v 34845
+v 20978
+v 21871
+v 23954
+v 35231
+v 25761
+v 29649
+v 20061
+v 25105
+v 27191
+v 27748
+v 31190
+v 21875
+v 29192
+v 31635
+v 20688
+v 27170
+v 25726
+v 24114
+v 29214
+v 35026
+v 29688
+v 28570
+v 28296
+v 23068
+v 29884
+v 21859
+v 29362
+v 21471
+v 28746
+v 25724
+v 28285
+v 25674
+v 20349
+v 35222
+v 27220
+v 20417
+v 28205
+v 33995
+v 32318
+v 21197
+v 24087
+v 22106
+v 22108
+v 34131
+v 29038
+v 29980
+v 22985
+v 22935
+v 34199
+v 26719
+v 28948
+v 21223
+v 21141
+v 26742
+v 32139
+v 24589
+v 23255
+v 30490
+v 32188
+v 29015
+v 24534
+v 30005
+v 25568
+v 28654
+v 32380
+v 21588
+v 21574
+v 34039
+v 21968
+v 27545
+v 35859
+v 26040
+v 29532
+v 34397
+v 22572
+v 24616
+v 21437
+v 22542
+v 29738
+v 27061
+v 24691
+v 27059
+v 23448
+v 28822
+v 28567
+v 29330
+v 28569
+v 32118
+v 30773
+v 20580
+v 29392
+v 26913
+v 23487
+v 25252
+v 33269
+v 26978
+v 25270
+v 28352
+v 22331
+v 28744
+v 22342
+v 33178
+v 28325
+v 29027
+v 21670
+v 33127
+v 32441
+v 33906
+v 20987
+v 25362
+v 21606
+v 31131
+v 32575
+v 29020
+v 33496
+v 34425
+v 28171
+v 30493
+v 21026
+v 22649
+v 32095
+v 21526
+v 21246
+v 21322
+v 32846
+v 27338
+v 19162
+v 21554
+v 29190
+v 34206
+v 29328
+v 23796
+v 23243
+v 26025
+v 30570
+v 22960
+v 30695
+v 21209
+v 25152
+v 25840
+v 23704
+v 25500
+v 25203
+v 30984
+v 24097
+v 32597
+v 22957
+v 28869
+v 27194
+v 30216
+v 20251
+v 31757
+v 25577
+v 28044
+v 30492
+v 22949
+v 34018
+v 21954
+v 23359
+v 22248
+v 35275
+v 27267
+v 23921
+v 26576
+v 23492
+v 30513
+v 22581
+v 28485
+v 34964
+v 21274
+v 21271
+v 20135
+v 28300
+v 23081
+v 23531
+v 31099
+v 27046
+v 28440
+v 23093
+v 23605
+v 22094
+v 35397
+v 34476
+v 34995
+v 32173
+v 20523
+v 34971
+v 31133
+v 31200
+v 22315
+v 31026
+v 29736
+v 29948
+v 31700
+v 21551
+v 35065
+v 25599
+v 22526
+v 25683
+v 29252
+v 26717
+v 24678
+v 24398
+v 20292
+v 23867
+v 29606
+v 29340
+v 32098
+v 30675
+v 29496
+v 32426
+v 19707
+v 27403
+v 21853
+v 29434
+v 32939
+v 34791
+v 35743
+v 27100
+v 34166
+v 28027
+v 32536
+v 35290
+v 23217
+v 25571
+v 29635
+v 29928
+v 30136
+v 22252
+v 27423
+v 26668
+v 22697
+v 34835
+v 28486
+v 29739
+v 25648
+v 27430
+v 25793
+v 29501
+v 27612
+v 26645
+v 35019
+v 25824
+v 22714
+v 23223
+v 30331
+v 25812
+v 22688
+v 23989
+v 25862
+v 29460
+v 26258
+v 30418
+v 31487
+v 28232
+v 28836
+v 20557
+v 33593
+v 23816
+v 25991
+v 23386
+v 30254
+v 28256
+v 34051
+v 26901
+v 24173
+v 30881
+v 26363
+v 23625
+v 27834
+v 34205
+v 24913
+v 24577
+v 29779
+v 34705
+v 24714
+v 23632
+v 30013
+v 29335
+v 35062
+v 30596
+v 35156
+v 33538
+v 24263
+v 22292
+v 24874
+v 27185
+v 25907
+v 23648
+v 21643
+v 34049
+v 34925
+v 35701
+v 28081
+v 24926
+v 31556
+v 21152
+v 23075
+v 24778
+v 28054
+v 30782
+v 25860
+v 23748
+v 23948
+v 31023
+v 30313
+v 27233
+v 27400
+v 31851
+v 20035
+v 21767
+v 23067
+v 24564
+v 34326
+v 25699
+v 29617
+v 21103
+v 29457
+v 31182
+v 35565
+v 30017
+v 34521
+v 27209
+v 30915
+v 32881
+v 27064
+v 33338
+v 31020
+v 30199
+v 35125
+v 30505
+v 28752
+v 30078
+v 22896
+v 21535
+v 30444
+v 26273
+v 24048
+v 29660
+v 28582
+v 23407
+v 32733
+v 30146
+v 27428
+v 24109
+v 23906
+v 33205
+v 30375
+v 34348
+v 31531
+v 27334
+v 34486
+v 23814
+v 25832
+v 21945
+v 23484
+v 23801
+v 20766
+v 21814
+v 31437
+v 28710
+v 22305
+v 32156
+v 28163
+v 30414
+v 21281
+v 29292
+v 27798
+v 34920
+v 27133
+v 25556
+v 31175
+v 26797
+v 22155
+v 35566
+v 19700
+v 28094
+v 31632
+v 27324
+v 27333
+v 28620
+v 28157
+v 34209
+v 23741
+v 29580
+v 25668
+v 27758
+v 32414
+v 22371
+v 24046
+v 21668
+v 30328
+v 26559
+v 30633
+v 30241
+v 35134
+v 22941
+v 20924
+v 34278
+v 23670
+v 34943
+v 23330
+v 24371
+v 23143
+v 21740
+v 26488
+v 25746
+v 25415
+v 26928
+v 23680
+v 22918
+v 29319
+v 30340
+v 24663
+v 30332
+v 23861
+v 23652
+v 23506
+v 33186
+v 26784
+v 20771
+v 30127
+v 27410
+v 23353
+v 34075
+v 20231
+v 23654
+v 23191
+v 26845
+v 22922
+v 25715
+v 31050
+v 30150
+v 30972
+v 30039
+v 28588
+v 27832
+v 28112
+v 28239
+v 27881
+v 24748
+v 23985
+v 34032
+v 20997
+v 26644
+v 24123
+v 30312
+v 22860
+v 25829
+v 35074
+v 35560
+v 35049
+v 34113
+v 23630
+v 31995
+v 34999
+v 35087
+v 20770
+v 30051
+v 23436
+v 23679
+v 27875
+v 27670
+v 31716
+v 26224
+v 28050
+v 29268
+v 22620
+v 26106
+v 21632
+v 30112
+v 24101
+v 24399
+v 32375
+v 35421
+v 35691
+v 23334
+v 21955
+v 35284
+v 21371
+v 33920
+v 23612
+v 23034
+v 29363
+v 34112
+v 24950
+v 28997
+v 34801
+v 27070
+v 26734
+v 23265
+v 35724
+v 19387
+v 24521
+v 29408
+v 32718
+v 31124
+v 22851
+v 24781
+v 19020
+v 21265
+v 22580
+v 23438
+v 29329
+v 29873
+v 30960
+v 29197
+v 28379
+v 31054
+v 31734
+v 30276
+v 26320
+v 22816
+v 19130
+v 25011
+v 19872
+v 32006
+v 23607
+v 34892
+v 22209
+v 24785
+v 32721
+v 20587
+v 30965
+v 27965
+v 21301
+v 35013
+v 28647
+v 29158
+v 29916
+v 32652
+v 26046
+v 20389
+v 23860
+v 31248
+v 31075
+v 23485
+v 21973
+v 24907
+v 22463
+v 25061
+v 23705
+v 20910
+v 22001
+v 23230
+v 28622
+v 26064
+v 22457
+v 24062
+v 27511
+v 24695
+v 23272
+v 31608
+v 28685
+v 23888
+v 30126
+v 27817
+v 23411
+v 28162
+v 29455
+v 26860
+v 35732
+v 27995
+v 24920
+v 27914
+v 35148
+v 30739
+v 29995
+v 28031
+v 23041
+v 23328
+v 23443
+v 28719
+v 20310
+v 32451
+v 20104
+v 23608
+v 24461
+v 27869
+v 35942
+v 22898
+v 22311
+v 32736
+v 35615
+v 22540
+v 25710
+v 24015
+v 25076
+v 28397
+v 28257
+v 26047
+v 28956
+v 21612
+v 23771
+v 22890
+v 31038
+v 24536
+v 21856
+v 21929
+v 31270
+v 33010
+v 21508
+v 24261
+v 25010
+v 33500
+v 25593
+v 28601
+v 22326
+v 23387
+v 21865
+v 23295
+v 24922
+v 21374
+v 26852
+v 21660
+v 29744
+v 22814
+v 22742
+v 28540
+v 27440
+v 21012
+v 28422
+v 23020
+v 22174
+v 22405
+v 20812
+v 31219
+v 28940
+v 26490
+v 22391
+v 21920
+v 19302
+v 31748
+v 23111
+v 25628
+v 26748
+v 21876
+v 24394
+v 30363
+v 30472
+v 28161
+v 22632
+v 27860
+v 31385
+v 25149
+v 28120
+v 29718
+v 26960
+v 20896
+v 23834
+v 22293
+v 26769
+v 27981
+v 29912
+v 28773
+v 31637
+v 31794
+v 35126
+v 22397
+v 27249
+v 28462
+v 30847
+v 30929
+v 25358
+v 28855
+v 21870
+v 35289
+v 33246
+v 31589
+v 24622
+v 20265
+v 29638
+v 35745
+v 32852
+v 35829
+v 31096
+v 28364
+v 29453
+v 31987
+v 24743
+v 23352
+v 27107
+v 25972
+v 25123
+v 25404
+v 27599
+v 23437
+v 23120
+v 22509
+v 22600
+v 22221
+v 22533
+v 27129
+v 32312
+v 34561
+v 19641
+v 23126
+v 18784
+v 30003
+v 25768
+v 21442
+v 28353
+v 35656
+v 24700
+v 25714
+v 32755
+v 21396
+v 32183
+v 26991
+v 34020
+v 29409
+v 25007
+v 21751
+v 28863
+v 33888
+v 23914
+v 28665
+v 25192
+v 22282
+v 27681
+v 25526
+v 34233
+v 23589
+v 28996
+v 28526
+v 33412
+v 19845
+v 26008
+v 24246
+v 22886
+v 24006
+v 23744
+v 30408
+v 22871
+v 31568
+v 28837
+v 26432
+v 35682
+v 23016
+v 29334
+v 29131
+v 26544
+v 33763
+v 31114
+v 30156
+v 34969
+v 27475
+v 30209
+v 35016
+v 23823
+v 23252
+v 35187
+v 21433
+v 31835
+v 23418
+v 31421
+v 32293
+v 31012
+v 29124
+v 27336
+v 27002
+v 28446
+v 30101
+v 25376
+v 29138
+v 32233
+v 22993
+v 30256
+v 25745
+v 35466
+v 27960
+v 23139
+v 20115
+v 24108
+v 21948
+v 31880
+v 26102
+v 25191
+v 26708
+v 31877
+v 25205
+v 30278
+v 27476
+v 28340
+v 25775
+v 29136
+v 28015
+v 29254
+v 30334
+v 34336
+v 24523
+v 23104
+v 35679
+v 20004
+v 20961
+v 32599
+v 23390
+v 28431
+v 27151
+v 33832
+v 23598
+v 22585
+v 24579
+v 35468
+v 31047
+v 30432
+v 27819
+v 18648
+v 34627
+v 27289
+v 35791
+v 31704
+v 26078
+v 22010
+v 24590
+v 23286
+v 22230
+v 33949
+v 23375
+v 22428
+v 23747
+v 31372
+v 33163
+v 27339
+v 29857
+v 30689
+v 21739
+v 32765
+v 25620
+v 20116
+v 23046
+v 23763
+v 26731
+v 27014
+v 35733
+v 26646
+v 20243
+v 30082
+v 29552
+v 35740
+v 29387
+v 28712
+v 28705
+v 28014
+v 31825
+v 34610
+v 20025
+v 23707
+v 34094
+v 21800
+v 35687
+v 35625
+v 27918
+v 35863
+v 35159
+v 23456
+v 32766
+v 34827
+v 20114
+v 28648
+v 27846
+v 28875
+v 26914
+v 29009
+v 33997
+v 33720
+v 34796
+v 34716
+v 19569
+v 27618
+v 22891
+v 33723
+v 35243
+v 25686
+v 27495
+v 34968
+v 29298
+v 26841
+v 28457
+v 29878
+v 33299
+v 31305
+v 32612
+v 31885
+v 31457
+v 24028
+v 25051
+v 28126
+v 30604
+v 31469
+v 28971
+v 23247
+v 35442
+v 23477
+v 23616
+v 26662
+v 27488
+v 26503
+v 34470
+v 30233
+v 27646
+v 25013
+v 32688
+v 29687
+v 35340
+v 35294
+v 20562
+v 32500
+v 35412
+v 24675
+v 25633
+v 30234
+v 35353
+v 26311
+v 27856
+v 20191
+v 30642
+v 28079
+v 27180
+v 25298
+v 29367
+v 25878
+v 19681
+v 20866
+v 27321
+v 23649
+v 35654
+v 33293
+v 26447
+v 28692
+v 24020
+v 31465
+v 22767
+v 24039
+v 22232
+v 24264
+v 25346
+v 32008
+v 20126
+v 18526
+v 25402
+v 30347
+v 26475
+v 19831
+v 20152
+v 23722
+v 29927
+v 33324
+v 19336
+v 22746
+v 23901
+v 35415
+v 24468
+v 35818
+v 30578
+v 28145
+v 27166
+v 23083
+v 31007
+v 24987
+v 30287
+v 29602
+v 35751
+v 28058
+v 29972
+v 21664
+v 31251
+v 35388
+v 30747
+v 30056
+v 25974
+v 27448
+v 23939
+v 28949
+v 20376
+v 29104
+v 25195
+v 26205
+v 29818
+v 21394
+v 35664
+v 29302
+v 22778
+v 21381
+v 28554
+v 34569
+v 27781
+v 34895
+v 35530
+v 25570
+v 35730
+v 23277
+v 24402
+v 24561
+v 33492
+v 20252
+v 20971
+v 20565
+v 20125
+v 29801
+v 34034
+v 20681
+v 29787
+v 29361
+v 24755
+v 25237
+v 21476
+v 25494
+v 35925
+v 24194
+v 27156
+v 35541
+v 26535
+v 30514
+v 30387
+v 21430
+v 20827
+v 22460
+v 21177
+v 35616
+v 32224
+v 34485
+v 23822
+v 21999
+v 30059
+v 22963
+v 35771
+v 27285
+v 20654
+v 34375
+v 26366
+v 30386
+v 28314
+v 29021
+v 23804
+v 22286
+v 33977
+v 19950
+v 21834
+v 32650
+v 19710
+v 26924
+v 27615
+v 32839
+v 26706
+v 34761
+v 23567
+v 28029
+v 25943
+v 35731
+v 21877
+v 33434
+v 24431
+v 25427
+v 34597
+v 23721
+v 29673
+v 30892
+v 24272
+v 20460
+v 20063
+v 21836
+v 24718
+v 35467
+v 18973
+v 20879
+v 27143
+v 27847
+v 30421
+v 24763
+v 25391
+v 27437
+v 28004
+v 24011
+v 21455
+v 26085
+v 33106
+v 28704
+v 24175
+v 23740
+v 27773
+v 34334
+v 30338
+v 20226
+v 20476
+v 29476
+v 28448
+v 20574
+v 32275
+v 32816
+v 25772
+v 31334
+v 33549
+v 33712
+v 31582
+v 29699
+v 22773
+v 32059
+v 23877
+v 30000
+v 34849
+v 33305
+v 32795
+v 23446
+v 29723
+v 32049
+v 29742
+v 23934
+v 22443
+v 28155
+v 27320
+v 34668
+v 32557
+v 22690
+v 32861
+v 21703
+v 30240
+v 28530
+v 32593
+v 24074
+v 22442
+v 22256
+v 23542
+v 21335
+v 28093
+v 28122
+v 20660
+v 23805
+v 29625
+v 29274
+v 22986
+v 25765
+v 24501
+v 35345
+v 22571
+v 31680
+v 20183
+v 34270
+v 27876
+v 30934
+v 29414
+v 33335
+v 30620
+v 30727
+v 28735
+v 33464
+v 35645
+v 20430
+v 20122
+v 34722
+v 23336
+v 29129
+v 21325
+v 30451
+v 32738
+v 31420
+v 20532
+v 21567
+v 29270
+v 20560
+v 31375
+v 31565
+v 20583
+v 29043
+v 33399
+v 30165
+v 20941
+v 23094
+v 25660
+v 21096
+v 28796
+v 31449
+v 25312
+v 35450
+v 24494
+v 31313
+v 20601
+v 26491
+v 29000
+v 27997
+v 29646
+v 19873
+v 30761
+v 27142
+v 24994
+v 25396
+v 24595
+v 23844
+v 28102
+v 22932
+v 21558
+v 30517
+v 34306
+v 28895
+v 24833
+v 28633
+v 19952
+v 23595
+v 27161
+v 29492
+v 24643
+v 21210
+v 26126
+v 32870
+v 25247
+v 35710
+v 25259
+v 23539
+v 22064
+v 33511
+v 33446
+v 25455
+v 30595
+v 32913
+v 21192
+v 20399
+v 34401
+v 21133
+v 32941
+v 33483
+v 32936
+v 26291
+v 24651
+v 34542
+v 33815
+v 23853
+v 30182
+v 19599
+v 30939
+v 35439
+v 23229
+v 20825
+v 28741
+v 34775
+v 30571
+v 27840
+v 32151
+v 29183
+v 23957
+v 28912
+v 33524
+v 21844
+v 34099
+v 22657
+v 21915
+v 35498
+v 33986
+v 34684
+v 33351
+v 24160
+v 25377
+v 26674
+v 32125
+v 27205
+v 24607
+v 21352
+v 31280
+v 21253
+v 32744
+v 22191
+v 30087
+v 33499
+v 31786
+v 25426
+v 30025
+v 23990
+v 32470
+v 21391
+v 24885
+v 31340
+v 20931
+v 31272
+v 24721
+v 23694
+v 22398
+v 23788
+v 25723
+v 26059
+v 30086
+v 33314
+v 21848
+v 31008
+v 21861
+v 22583
+v 24249
+v 20843
+v 23405
+v 28142
+v 25304
+v 32021
+v 24455
+v 21532
+v 25046
+v 35815
+v 23024
+v 26752
+v 23338
+v 30856
+v 30308
+v 28026
+v 26819
+v 24655
+v 35867
+v 28348
+v 24490
+v 29643
+v 22584
+v 23023
+v 30916
+v 33473
+v 23309
+v 26365
+v 24092
+v 25070
+v 30629
+v 28420
+v 33302
+v 30681
+v 26519
+v 33159
+v 28814
+v 23970
+v 30700
+v 27234
+v 23757
+v 22676
+v 35684
+v 30558
+v 33123
+v 27183
+v 31864
+v 30793
+v 22740
+v 23848
+v 30893
+v 23825
+v 23708
+v 34698
+v 26864
+v 20213
+v 24090
+v 26941
+v 21227
+v 22562
+v 24351
+v 25392
+v 35088
+v 28886
+v 35419
+v 29943
+v 30849
+v 19149
+v 23182
+v 21806
+v 24765
+v 20956
+v 29642
+v 28179
+v 30942
+v 23760
+v 25274
+v 29769
+v 30959
+v 26346
+v 20916
+v 20680
+v 31601
+v 20772
+v 28234
+v 28693
+v 23325
+v 22316
+v 27256
+v 35933
+v 24152
+v 22925
+v 32009
+v 30201
+v 25141
+v 23928
+v 33311
+v 21426
+v 23982
+v 29727
+v 23269
+v 31662
+v 30800
+v 28635
+v 24013
+v 28028
+v 24199
+v 34651
+v 25543
+v 27481
+v 20469
+v 28036
+v 20551
+v 33633
+v 31967
+v 28514
+v 27941
+v 27858
+v 24327
+v 28206
+v 26193
+v 21008
+v 25950
+v 21436
+v 32673
+v 25828
+v 23131
+v 35384
+v 23827
+v 25200
+v 20216
+v 33975
+v 35389
+v 34347
+v 24395
+v 29725
+v 22199
+v 28319
+v 27739
+v 30083
+v 24709
+v 20726
+v 30062
+v 21225
+v 26696
+v 25852
+v 23079
+v 25522
+v 32460
+v 30556
+v 28815
+v 30598
+v 25742
+v 34495
+v 29262
+v 35162
+v 25413
+v 24859
+v 34246
+v 34283
+v 24646
+v 21157
+v 34656
+v 21452
+v 22910
+v 24301
+v 23850
+v 33527
+v 29846
+v 33349
+v 28706
+v 21970
+v 27099
+v 30155
+v 27936
+v 21121
+v 29806
+v 28165
+v 24667
+v 22531
+v 20838
+v 35315
+v 24130
+v 25709
+v 35270
+v 29668
+v 27587
+v 26632
+v 26903
+v 34006
+v 21236
+v 21621
+v 21359
+v 34503
+v 33870
+v 23181
+v 21931
+v 20857
+v 25419
+v 24404
+v 21118
+v 21946
+v 28284
+v 24154
+v 31369
+v 20207
+v 22291
+v 24014
+v 27815
+v 31342
+v 21697
+v 34512
+v 22272
+v 29622
+v 22815
+v 21757
+v 31314
+v 28491
+v 23026
+v 24292
+v 31289
+v 22005
+v 24900
+v 24450
+v 34816
+v 29272
+v 25160
+v 29111
+v 23933
+v 22075
+v 20824
+v 32788
+v 33187
+v 22929
+v 25838
+v 27968
+v 34493
+v 29593
+v 32932
+v 24374
+v 21569
+v 28786
+v 26761
+v 21251
+v 22883
+v 34648
+v 23345
+v 23815
+v 32157
+v 32063
+v 22500
+v 29973
+v 28331
+v 27236
+v 34568
+v 28409
+v 31681
+v 30465
+v 22594
+v 33425
+v 32048
+v 23219
+v 25409
+v 30816
+v 24525
+v 35299
+v 21557
+v 32452
+v 33289
+v 20344
+v 26478
+v 26976
+v 23986
+v 27724
+v 28136
+v 31559
+v 24296
+v 30169
+v 22144
+v 20641
+v 31310
+v 31070
+v 21772
+v 22798
+v 33169
+v 24100
+v 28038
+v 34266
+v 24980
+v 23862
+v 33157
+v 28436
+v 30882
+v 22813
+v 35858
+v 22644
+v 24704
+v 21921
+v 25892
+v 26486
+v 24520
+v 28415
+v 28469
+v 26786
+v 29654
+v 31952
+v 34957
+v 25069
+v 29113
+v 24312
+v 29413
+v 21370
+v 26003
+v 20529
+v 22384
+v 32887
+v 25386
+v 21821
+v 23464
+v 22593
+v 30712
+v 27068
+v 25876
+v 34953
+v 28105
+v 29629
+v 23220
+v 23173
+v 29170
+v 24657
+v 25236
+v 35309
+v 22320
+v 24426
+v 33451
+v 35129
+v 29044
+v 23179
+v 24567
+v 27200
+v 31614
+v 21300
+v 21994
+v 35090
+v 26304
+v 25769
+v 23001
+v 27499
+v 22233
+v 29105
+v 29106
+v 35009
+v 34022
+v 29416
+v 22376
+v 27821
+v 28223
+v 32010
+v 24290
+v 33576
+v 22239
+v 22051
+v 31818
+v 21038
+v 23935
+v 23863
+v 26588
+v 30369
+v 29849
+v 31664
+v 25777
+v 35238
+v 28493
+v 23039
+v 22056
+v 23029
+v 30361
+v 28711
+v 25830
+v 22219
+v 23591
+v 23552
+v 22340
+v 22054
+v 29073
+v 33017
+v 27571
+v 33455
+v 35257
+v 22426
+v 23920
+v 30947
+v 23876
+v 30248
+v 31728
+v 27390
+v 34736
+v 28052
+v 32873
+v 35135
+v 25640
+v 22723
+v 28475
+v 25085
+v 30976
+v 23212
+v 35217
+v 30251
+v 26630
+v 28921
+v 27083
+v 29180
+v 24052
+v 27101
+v 30978
+v 24310
+v 35224
+v 28216
+v 32542
+v 21761
+v 22663
+v 24724
+v 28658
+v 25553
+v 30263
+v 30107
+v 34438
+v 25938
+v 21727
+v 21047
+v 24289
+v 34915
+v 24198
+v 22458
+v 22355
+v 33201
+v 30324
+v 29383
+v 22578
+v 22189
+v 34665
+v 35513
+v 34237
+v 29881
+v 30053
+v 19389
+v 23416
+v 33088
+v 23425
+v 26468
+v 24127
+v 30572
+v 24007
+v 29592
+v 22348
+v 23540
+v 26568
+v 20930
+v 27305
+v 22747
+v 27507
+v 28745
+v 22839
+v 21466
+v 29057
+v 34933
+v 35161
+v 29437
+v 23007
+v 29235
+v 28210
+v 24464
+v 26201
+v 35207
+v 24629
+v 34399
+v 23962
+v 23783
+v 30132
+v 30350
+v 32964
+v 29141
+v 25763
+v 34695
+v 29300
+v 24698
+v 34994
+v 30878
+v 28082
+v 22992
+v 20835
+v 32938
+v 26459
+v 23996
+v 34478
+v 35068
+v 23213
+v 29931
+v 35839
+v 29968
+v 26811
+v 27706
+v 22273
+v 28310
+v 27563
+v 25154
+v 28460
+v 27632
+v 32425
+v 25279
+v 24334
+v 30480
+v 25682
+v 27126
+v 31715
+v 24942
+v 34769
+v 26051
+v 29510
+v 31657
+v 25732
+v 22951
+v 23190
+v 21291
+v 24846
+v 28586
+v 32812
+v 34393
+v 32339
+v 22689
+v 30865
+v 23594
+v 27054
+v 30792
+v 25837
+v 34359
+v 28607
+v 24405
+v 22487
+v 27492
+v 30152
+v 32272
+v 24923
+v 22409
+v 27274
+v 24023
+v 22680
+v 25597
+v 24895
+v 35174
+v 30870
+v 24157
+v 26554
+v 22864
+v 35193
+v 24388
+v 23415
+v 34095
+v 24206
+v 30952
+v 28458
+v 23590
+v 35181
+v 23165
+v 34058
+v 20684
+v 21485
+v 22368
+v 25483
+v 28811
+v 28771
+v 31285
+v 21957
+v 28354
+v 22254
+v 29440
+v 25975
+v 34878
+v 23941
+v 23171
+v 27424
+v 32585
+v 22577
+v 28845
+v 29820
+v 24297
+v 34911
+v 22188
+v 22165
+v 27477
+v 34241
+v 25585
+v 31940
+v 24149
+v 26677
+v 23348
+v 29422
+v 30496
+v 26813
+v 34992
+v 29833
+v 29352
+v 32802
+v 31916
+v 24112
+v 24259
+v 22216
+v 29792
+v 24280
+v 28328
+v 32940
+v 28366
+v 24990
+v 21813
+v 35152
+v 30189
+v 33032
+v 23270
+v 24285
+v 34002
+v 22838
+v 23109
+v 28385
+v 27596
+v 24797
+v 28121
+v 35864
+v 21338
+v 35606
+v 33342
+v 22975
+v 27916
+v 34962
+v 22362
+v 22511
+v 32579
+v 35305
+v 33727
+v 21790
+v 26746
+v 22560
+v 28125
+v 31461
+v 27294
+v 24492
+v 34897
+v 25822
+v 34850
+v 25853
+v 23288
+v 35041
+v 27109
+v 24308
+v 23975
+v 23098
+v 20438
+v 21758
+v 27902
+v 33435
+v 25718
+v 25111
+v 27659
+v 28652
+v 25118
+v 32626
+v 29567
+v 34198
+v 30412
+v 23457
+v 23193
+v 27387
+v 21086
+v 24552
+v 24472
+v 31744
+v 30615
+v 27854
+v 28053
+v 33242
+v 31162
+v 21644
+v 31237
+v 35001
+v 24251
+v 24440
+v 22809
+v 18671
+v 32919
+v 34162
+v 35106
+v 31606
+v 35239
+v 21534
+v 34311
+v 30671
+v 23864
+v 27616
+v 21020
+v 30036
+v 23289
+v 22684
+v 32515
+v 23110
+v 23040
+v 25084
+v 21610
+v 24581
+v 28271
+v 23826
+v 28669
+v 33450
+v 24140
+v 24049
+v 26050
+v 25561
+v 24067
+v 24060
+v 34062
+v 24255
+v 24723
+v 21839
+v 24442
+v 30045
+v 29632
+v 34936
+v 23244
+v 33145
+v 35838
+v 21674
+v 29990
+v 29275
+v 34924
+v 24035
+v 22459
+v 31043
+v 21136
+v 31925
+v 28041
+v 28775
+v 31309
+v 25048
+v 19508
+v 31771
+v 19603
+v 29741
+v 21170
+v 30877
+v 25226
+v 20524
+v 22117
+v 32123
+v 29824
+v 24340
+v 22264
+v 31102
+v 28970
+v 26782
+v 21962
+v 25170
+v 24287
+v 25928
+v 22989
+v 27347
+v 28951
+v 32416
+v 32901
+v 35143
+v 31209
+v 29445
+v 26250
+v 32886
+v 21985
+v 23713
+v 24687
+v 25378
+v 29956
+v 23706
+v 24443
+v 21825
+v 35034
+v 24965
+v 22845
+v 29745
+v 34043
+v 23998
+v 23991
+v 22470
+v 23600
+v 25749
+v 23127
+v 22073
+v 22382
+v 24620
+v 24476
+v 25869
+v 30130
+v 24389
+v 19407
+v 33091
+v 35528
+v 27140
+v 28377
+v 25649
+v 25423
+v 21934
+v 34304
+v 29827
+v 25908
+v 33637
+v 22931
+v 24507
+v 28214
+v 29908
+v 21022
+v 20972
+v 23566
+v 29435
+v 24053
+v 35144
+v 25189
+v 20463
+v 26297
+v 30115
+v 20118
+v 22920
+v 30749
+v 24777
+v 27042
+v 28076
+v 28009
+v 21418
+v 25260
+v 30794
+v 28593
+v 24685
+v 25735
+v 30796
+v 35057
+v 27108
+v 24839
+v 28777
+v 29565
+v 31216
+v 18024
+v 30885
+v 34923
+v 35599
+v 30030
+v 28566
+v 25026
+v 29645
+v 28798
+v 20539
+v 35477
+v 28551
+v 26274
+v 26830
+v 22760
+v 35145
+v 28011
+v 30159
+v 22763
+v 30536
+v 22374
+v 31326
+v 21487
+v 21064
+v 23678
+v 29511
+v 30079
+v 29600
+v 23995
+v 33886
+v 24803
+v 35574
+v 19291
+v 32429
+v 32640
+v 21071
+v 22263
+v 20167
+v 21596
+v 25510
+v 28253
+v 24089
+v 34857
+v 25574
+v 24205
+v 24043
+v 26916
+v 23140
+v 23441
+v 35757
+v 30054
+v 25729
+v 24364
+v 24341
+v 24660
+v 25480
+v 24824
+v 25618
+v 23470
+v 21494
+v 30522
+v 33685
+v 35358
+v 22645
+v 25707
+v 27770
+v 35854
+v 22856
+v 25744
+v 18964
+v 34482
+v 28866
+v 34160
+v 27542
+v 31286
+v 28139
+v 28268
+v 34909
+v 23482
+v 30091
+v 28534
+v 35744
+v 26192
+v 23642
+v 25858
+v 27471
+v 25347
+v 25791
+v 22979
+v 20468
+v 24686
+v 31105
+v 30560
+v 22275
+v 27349
+v 31198
+v 35549
+v 22640
+v 23593
+v 28985
+v 34619
+v 22234
+v 35680
+v 33367
+v 23585
+v 35632
+v 24478
+v 23918
+v 19354
+v 28528
+v 26168
+v 34128
+v 31183
+v 25178
+v 24650
+v 30184
+v 30853
+v 29354
+v 21561
+v 28098
+v 22430
+v 22114
+v 35104
+v 28375
+v 34228
+v 22123
+v 34654
+v 28487
+v 31165
+v 27230
+v 31527
+v 24326
+v 33482
+v 28933
+v 21196
+v 22847
+v 26888
+v 23294
+v 20141
+v 35647
+v 27546
+v 20480
+v 24962
+v 28435
+v 19671
+v 21239
+v 22718
+v 31069
+v 33437
+v 33223
+v 24384
+v 30567
+v 24295
+v 35409
+v 28964
+v 25720
+v 29607
+v 29633
+v 35035
+v 24937
+v 30693
+v 30214
+v 21440
+v 24144
+v 30438
+v 29887
+v 25223
+v 28412
+v 22329
+v 32999
+v 25664
+v 21362
+v 24344
+v 32962
+v 34640
+v 30938
+v 21852
+v 29296
+v 28005
+v 24674
+v 30652
+v 22223
+v 22497
+v 29133
+v 24840
+v 30014
+v 20436
+v 31519
+v 32928
+v 24588
+v 21401
+v 28494
+v 31025
+v 24527
+v 30527
+v 23790
+v 22023
+v 23789
+v 30539
+v 22547
+v 21613
+v 26893
+v 27120
+v 33554
+v 24136
+v 31874
+v 21788
+v 28858
+v 24947
+v 35504
+v 26180
+v 29464
+v 22327
+v 29988
+v 26721
+v 22386
+v 22872
+v 29130
+v 34317
+v 25449
+v 27356
+v 29841
+v 27517
+v 28691
+v 20712
+v 23843
+v 29560
+v 34448
+v 32543
+v 22150
+v 23210
+v 22983
+v 22589
+v 25212
+v 33461
+v 20975
+v 30561
+v 22698
+v 23631
+v 26509
+v 25295
+v 31576
+v 23380
+v 30585
+v 26355
+v 23634
+v 24126
+v 34440
+v 25041
+v 31266
+v 34150
+v 29543
+v 23337
+v 30424
+v 26543
+v 30623
+v 24606
+v 28898
+v 22708
+v 24241
+v 34069
+v 28078
+v 27027
+v 22575
+v 32609
+v 28788
+v 23839
+v 32477
+v 21873
+v 29022
+v 23196
+v 29386
+v 20886
+v 27814
+v 23912
+v 29851
+v 20423
+v 29578
+v 24213
+v 32817
+v 29783
+v 21361
+v 22709
+v 28977
+v 21648
+v 26109
+v 20568
+v 21762
+v 34758
+v 22550
+v 27066
+v 21693
+v 29336
+v 26846
+v 34739
+v 23043
+v 32651
+v 29982
+v 22706
+v 20516
+v 24526
+v 30455
+v 28939
+v 24539
+v 30202
+v 25801
+v 19874
+v 22752
+v 35399
+v 33573
+v 33463
+v 28383
+v 24555
+v 24065
+v 25787
+v 25161
+v 30605
+v 25443
+v 34144
+v 24151
+v 26567
+v 33941
+v 24955
+v 21747
+v 24495
+v 35360
+v 34734
+v 22000
+v 29092
+v 26315
+v 21677
+v 32874
+v 29201
+v 23332
+v 27867
+v 28289
+v 29276
+v 29174
+v 27160
+v 34641
+v 23129
+v 29527
+v 27105
+v 22105
+v 31039
+v 31288
+v 21600
+v 22665
+v 26371
+v 34556
+v 31159
+v 30670
+v 33396
+v 34616
+v 21568
+v 23663
+v 29523
+v 33336
+v 32237
+v 22153
+v 33846
+v 24908
+v 34086
+v 32628
+v 21492
+v 25243
+v 35887
+v 31297
+v 28751
+v 21830
+v 21982
+v 34591
+v 29697
+v 31458
+v 35930
+v 22156
+v 29533
+v 33547
+v 28967
+v 19490
+v 34563
+v 31507
+v 24644
+v 30683
+v 26286
+v 28091
+v 25700
+v 30489
+v 34650
+v 25656
+v 35061
+v 28765
+v 33542
+v 25631
+v 27248
+v 23518
+v 22802
+v 19792
+v 29964
+v 26622
+v 25659
+v 26339
+v 24886
+v 21705
+v 26495
+v 25464
+v 27382
+v 24961
+v 31494
+v 35676
+v 24250
+v 28844
+v 33003
+v 27165
+v 33251
+v 35164
+v 23817
+v 22507
+v 29419
+v 27467
+v 26994
+v 33284
+v 35945
+v 22513
+v 33600
+v 30097
+v 28795
+v 30659
+v 33090
+v 25691
+v 23240
+v 29903
+v 29160
+v 28857
+v 30640
+v 25759
+v 32099
+v 24867
+v 21918
+v 23002
+v 25882
+v 19938
+v 21566
+v 21240
+v 22381
+v 25008
+v 29139
+v 25678
+v 23250
+v 30497
+v 26198
+v 28500
+v 22777
+v 28373
+v 24984
+v 21775
+v 30606
+v 24424
+v 22804
+v 34352
+v 20715
+v 30355
+v 22828
+v 30478
+v 21883
+v 24436
+v 19507
+v 28267
+v 31675
+v 28429
+v 33161
+v 22887
+v 26957
+v 21294
+v 20264
+v 24081
+v 21585
+v 28928
+v 22420
+v 34377
+v 23340
+v 35244
+v 28362
+v 22065
+v 24247
+v 28757
+v 34378
+v 22535
+v 25465
+v 33140
+v 28823
+v 31870
+v 24390
+v 26997
+v 32490
+v 32992
+v 24418
+v 19757
+v 33969
+v 34492
+v 34386
+v 34007
+v 27763
+v 32843
+v 24633
+v 31196
+v 33073
+v 25800
+v 25676
+v 34908
+v 24537
+v 28421
+v 20793
+v 34777
+v 29137
+v 25842
+v 33216
+v 32917
+v 35488
+v 29042
+v 29061
+v 29516
+v 28562
+v 25450
+v 24745
+v 23536
+v 28993
+v 24005
+v 29008
+v 29250
+v 28659
+v 25879
+v 25499
+v 35287
+v 22836
+v 20317
+v 25163
+v 25320
+v 27643
+v 30951
+v 33119
+v 23409
+v 27206
+v 26336
+v 27262
+v 22701
+v 33215
+v 23847
+v 19446
+v 24365
+v 24626
+v 29691
+v 24162
+v 24972
+v 30924
+v 26207
+v 25855
+v 25201
+v 29695
+v 32566
+v 27152
+v 26758
+v 22492
+v 34934
+v 25951
+v 33477
+v 24996
+v 26638
+v 22067
+v 28701
+v 28675
+v 27597
+v 34252
+v 27465
+v 33144
+v 25023
+v 23307
+v 24174
+v 24543
+v 23341
+v 22060
+v 22043
+v 31240
+v 25698
+v 34351
+v 23119
+v 32436
+v 30710
+v 23515
+v 23967
+v 29140
+v 34637
+v 29107
+v 30218
+v 32656
+v 29018
+v 22947
+v 29067
+v 28643
+v 29981
+v 35209
+v 23133
+v 33191
+v 33004
+v 19574
+v 22379
+v 31451
+v 23711
+v 28356
+v 33118
+v 24706
+v 23537
+v 29358
+v 20652
+v 30512
+v 34938
+v 30634
+v 33132
+v 18880
+v 31663
+v 28196
+v 34891
+v 29768
+v 23932
+v 33988
+v 35047
+v 35212
+v 23454
+v 27790
+v 29222
+v 28923
+v 29480
+v 32554
+v 29033
+v 24458
+v 26980
+v 24227
+v 25969
+v 29035
+v 28490
+v 33948
+v 26593
+v 24531
+v 35044
+v 30969
+v 24254
+v 34223
+v 24725
+v 27483
+v 27056
+v 31358
+v 29944
+v 24636
+v 28690
+v 34904
+v 19263
+v 35862
+v 26968
+v 25045
+v 23714
+v 22204
+v 29034
+v 31618
+v 29119
+v 24722
+v 35286
+v 22303
+v 28897
+v 24510
+v 29640
+v 30533
+v 23736
+v 23676
+v 32646
+v 24988
+v 28529
+v 31678
+v 26449
+v 27187
+v 28381
+v 23239
+v 34151
+v 27184
+v 33172
+v 30763
+v 25218
+v 32281
+v 29012
+v 23508
+v 22103
+v 31848
+v 22312
+v 23315
+v 22914
+v 35118
+v 30417
+v 30860
+v 26314
+v 29922
+v 20967
+v 30886
+v 30326
+v 22449
+v 22399
+v 27018
+v 26881
+v 22143
+v 30590
+v 30805
+v 33879
+v 28946
+v 23543
+v 23363
+v 22909
+v 34090
+v 22505
+v 26998
+v 29086
+v 28357
+v 35084
+v 30035
+v 29837
+v 24467
+v 32967
+v 27584
+v 35037
+v 24474
+v 32937
+v 30785
+v 23370
+v 27174
+v 34987
+v 23884
+v 26133
+v 23658
+v 23180
+v 24982
+v 25146
+v 30583
+v 21722
+v 29486
+v 24345
+v 35120
+v 23752
+v 24731
+v 32330
+v 31621
+v 34988
+v 29425
+v 30267
+v 25798
+v 34287
+v 24416
+v 35133
+v 21493
+v 25520
+v 23172
+v 29064
+v 35893
+v 34566
+v 32709
+v 34236
+v 28140
+v 21583
+v 33915
+v 33033
+v 27123
+v 25795
+v 22991
+v 24200
+v 23574
+v 31376
+v 22921
+v 23586
+v 27579
+v 25784
+v 30224
+v 23746
+v 22930
+v 29828
+v 23356
+v 30370
+v 26971
+v 22897
+v 34315
+v 24641
+v 24437
+v 26379
+v 27609
+v 31250
+v 31425
+v 34324
+v 23452
+v 31869
+v 22669
+v 30475
+v 24309
+v 24153
+v 24232
+v 27362
+v 22241
+v 24243
+v 21760
+v 35847
+v 23149
+v 33687
+v 34669
+v 24726
+v 28484
+v 24473
+v 35048
+v 35226
+v 34384
+v 26341
+v 32472
+v 24876
+v 35000
+v 29957
+v 18729
+v 23113
+v 24284
+v 25790
+v 23870
+v 32296
+v 21736
+v 29651
+v 26037
+v 34606
+v 30425
+v 29882
+v 35352
+v 34864
+v 34945
+v 33583
+v 22903
+v 24177
+v 34300
+v 34910
+v 29032
+v 24952
+v 20842
+v 31128
+v 29401
+v 29308
+v 26392
+v 24780
+v 23157
+v 24291
+v 35153
+v 28894
+v 25854
+v 29014
+v 23968
+v 30811
+v 24335
+v 28772
+v 34227
+v 24469
+v 30207
+v 30713
+v 30484
+v 33818
+v 19441
+v 34195
+v 33971
+v 34014
+v 27592
+v 27515
+v 25562
+v 23643
+v 23682
+v 28116
+v 22066
+v 33539
+v 32811
+v 34642
+v 24701
+v 26756
+v 35329
+v 22981
+v 23626
+v 28095
+v 31120
+v 28763
+v 32835
+v 30348
+v 29100
+v 35182
+v 35111
+v 26001
+v 35857
+v 35742
+v 22940
+v 27373
+v 28244
+v 33992
+v 33916
+v 29083
+v 29861
+v 28077
+v 35456
+v 32820
+v 25712
+v 24865
+v 26626
+v 33325
+v 35178
+v 22846
+v 29199
+v 22227
+v 35772
+v 27399
+v 24400
+v 28012
+v 27982
+v 26293
+v 20895
+v 21461
+v 25753
+v 32965
+v 35531
+v 26884
+v 26815
+v 31402
+v 30809
+v 27337
+v 32666
+v 24835
+v 28578
+v 25459
+v 28109
+v 26227
+v 29671
+v 34382
+v 25198
+v 24343
+v 27527
+v 24623
+v 35907
+v 30406
+v 23312
+v 28908
+v 35787
+v 25959
+v 22653
+v 26136
+v 24161
+v 23284
+v 20603
+v 26435
+v 24927
+v 22225
+v 29752
+v 29326
+v 28496
+v 33987
+v 23547
+v 27540
+v 27360
+v 27311
+v 22700
+v 33214
+v 25215
+v 35849
+v 32282
+v 33168
+v 21032
+v 21070
+v 25605
+v 26516
+v 28740
+v 31107
+v 33869
+v 25462
+v 21063
+v 21124
+v 27987
+v 23894
+v 33626
+v 35505
+v 35704
+v 24434
+v 22268
+v 30600
+v 28236
+v 22197
+v 28945
+v 22611
+v 25064
+v 29579
+v 24812
+v 30178
+v 29585
+v 32704
+v 24844
+v 22493
+v 32491
+v 34124
+v 24209
+v 34896
+v 32790
+v 32397
+v 21989
+v 26105
+v 35359
+v 30735
+v 33354
+v 28831
+v 28615
+v 29299
+v 33386
+v 35503
+v 32379
+v 25124
+v 35422
+v 24727
+v 19576
+v 25006
+v 28888
+v 23758
+v 32878
+v 32705
+v 24884
+v 25475
+v 35131
+v 24573
+v 23305
+v 32948
+v 29566
+v 30154
+v 29399
+v 25001
+v 19990
+v 22642
+v 27273
+v 28714
+v 29323
+v 34295
+v 22673
+v 26426
+v 31262
+v 24549
+v 24728
+v 22152
+v 22339
+v 23469
+v 22795
+v 31098
+v 22655
+v 33440
+v 34281
+v 33254
+v 25036
+v 25651
+v 23433
+v 23698
+v 33420
+v 25590
+v 29666
+v 31232
+v 22422
+v 27247
+v 28198
+v 26404
+v 22670
+v 31444
+v 31362
+v 33256
+v 29287
+v 25734
+v 23057
+v 31603
+v 27012
+v 24025
+v 25495
+v 32100
+v 32092
+v 22745
+v 21815
+v 30716
+v 31653
+v 26651
+v 32000
+v 22146
+v 23036
+v 27948
+v 24361
+v 29371
+v 20182
+v 31845
+v 20413
+v 28073
+v 24635
+v 22380
+v 25572
+v 24771
+v 23557
+v 26222
+v 28812
+v 23413
+v 31383
+v 22187
+v 31901
+v 24192
+v 30364
+v 22323
+v 21424
+v 20743
+v 34500
+v 30903
+v 25582
+v 27747
+v 33698
+v 28505
+v 34581
+v 26328
+v 22549
+v 22184
+v 21603
+v 31908
+v 22881
+v 31583
+v 26917
+v 24764
+v 31787
+v 34701
+v 26682
+v 25703
+v 25905
+v 22586
+v 33262
+v 26281
+v 22805
+v 29295
+v 30963
+v 35556
+v 30751
+v 25850
+v 30382
+v 26335
+v 28958
+v 22569
+v 28384
+v 22695
+v 35350
+v 29332
+v 23166
+v 30245
+v 35218
+v 34771
+v 29430
+v 26208
+v 28932
+v 28769
+v 23019
+v 27441
+v 22793
+v 29938
+v 32976
+v 26713
+v 22685
+v 31146
+v 30723
+v 32259
+v 24953
+v 34740
+v 30828
+v 23316
+v 26812
+v 33405
+v 28248
+v 25040
+v 22704
+v 24783
+v 29341
+v 33252
+v 27835
+v 29985
+v 29551
+v 32639
+v 28333
+v 27693
+v 23100
+v 22318
+v 34197
+v 28047
+v 28443
+v 33548
+v 30944
+v 23204
+v 19713
+v 31412
+v 25028
+v 26000
+v 33509
+v 35721
+v 26012
+v 27944
+v 22482
+v 23855
+v 25225
+v 32476
+v 28907
+v 23381
+v 33416
+v 19231
+v 29559
+v 29809
+v 21725
+v 22281
+v 30113
+v 20373
+v 22111
+v 28738
+v 28204
+v 29489
+v 26672
+v 28368
+v 19056
+v 22207
+v 25067
+v 29305
+v 30808
+v 33458
+v 23018
+v 21849
+v 24958
+v 24604
+v 19559
+v 33775
+v 29796
+v 29918
+v 26131
+v 34364
+v 30422
+v 34603
+v 35308
+v 30208
+v 33234
+v 25250
+v 29263
+v 26150
+v 29800
+v 23988
+v 25906
+v 24504
+v 24798
+v 28434
+v 31903
+v 24502
+v 34011
+v 30691
+v 23092
+v 34667
+v 33245
+v 34177
+v 24971
+v 28790
+v 33519
+v 35843
+v 34161
+v 32551
+v 30818
+v 28645
+v 25708
+v 25112
+v 34053
+v 22915
+v 23599
+v 25056
+v 24111
+v 34379
+v 35517
+v 30470
+v 25805
+v 28347
+v 28657
+v 25395
+v 33265
+v 24385
+v 18575
+v 29582
+v 22774
+v 23588
+v 22222
+v 25394
+v 22716
+v 25797
+v 21951
+v 35522
+v 23383
+v 34738
+v 34804
+v 22411
+v 33959
+v 23984
+v 25339
+v 23306
+v 23938
+v 25166
+v 19624
+v 27386
+v 29427
+v 29940
+v 31474
+v 23188
+v 24203
+v 25960
+v 34247
+v 33531
+v 30994
+v 22538
+v 31293
+v 29353
+v 25253
+v 24563
+v 30142
+v 23569
+v 23344
+v 23308
+v 27827
+v 27954
+v 31455
+v 25393
+v 25122
+v 23575
+v 23450
+v 32623
+v 29026
+v 24064
+v 27988
+v 30690
+v 30702
+v 32670
+v 26472
+v 21960
+v 30048
+v 24610
+v 26388
+v 24680
+v 34335
+v 21866
+v 23972
+v 19367
+v 25947
+v 35364
+v 34121
+v 23890
+v 31860
+v 29730
+v 29952
+v 23488
+v 34550
+v 29996
+v 25834
+v 34973
+v 23095
+v 29432
+v 33133
+v 30936
+v 30217
+v 27811
+v 34506
+v 31129
+v 35101
+v 25622
+v 26041
+v 34276
+v 24815
+v 21991
+v 33996
+v 23900
+v 32567
+v 29202
+v 25099
+v 32918
+v 25024
+v 34649
+v 29795
+v 25537
+v 24408
+v 32509
+v 35025
+v 30945
+v 33560
+v 35734
+v 28549
+v 22977
+v 32586
+v 32114
+v 25980
+v 31387
+v 29674
+v 23135
+v 25357
+v 27402
+v 29072
+v 25057
+v 26292
+v 26900
+v 28219
+v 30786
+v 35580
+v 29883
+v 23564
+v 32979
+v 22879
+v 24509
+v 33970
+v 31176
+v 27714
+v 24403
+v 23793
+v 33060
+v 22244
+v 23659
+v 23892
+v 34825
+v 33579
+v 34625
+v 25994
+v 32400
+v 25303
+v 34093
+v 30305
+v 27794
+v 33013
+v 19238
+v 28160
+v 32291
+v 24896
+v 34879
+v 28902
+v 28022
+v 24217
+v 26693
+v 24010
+v 23499
+v 29167
+v 30198
+v 25083
+v 20086
+v 25488
+v 28128
+v 27824
+v 35465
+v 33785
+v 24696
+v 25766
+v 35588
+v 30732
+v 23064
+v 31432
+v 22768
+v 24881
+v 27502
+v 34291
+v 30758
+v 30323
+v 31278
+v 29693
+v 24790
+v 29863
+v 33179
+v 35550
+v 34077
+v 24218
+v 24860
+v 28168
+v 28349
+v 24739
+v 23278
+v 22833
+v 26926
+v 23532
+v 23233
+v 24338
+v 31040
+v 24912
+v 23076
+v 35575
+v 24419
+v 35258
+v 32980
+v 28231
+v 23881
+v 35469
+v 25629
+v 23145
+v 29967
+v 29906
+v 29397
+v 31126
+v 24248
+v 24656
+v 22659
+v 24547
+v 27216
+v 23565
+v 24995
+v 19487
+v 24679
+v 34126
+v 34185
+v 20433
+v 25909
+v 23374
+v 29372
+v 23673
+v 22967
+v 25019
+v 35573
+v 23047
+v 22629
+v 25914
+v 34136
+v 30365
+v 26086
+v 23655
+v 30745
+v 23410
+v 23668
+v 35185
+v 28850
+v 28376
+v 31208
+v 24753
+v 19365
+v 23498
+v 30187
+v 29919
+v 26238
+v 30431
+v 23298
+v 34046
+v 30012
+v 29774
+v 22950
+v 24481
+v 33665
+v 22352
+v 22162
+v 32915
+v 30352
+v 20166
+v 24782
+v 35453
+v 23617
+v 35866
+v 24784
+v 31066
+v 23419
+v 21992
+v 24453
+v 27598
+v 23197
+v 31380
+v 33309
+v 26827
+v 26065
+v 25815
+v 27974
+v 34219
+v 28321
+v 35890
+v 35608
+v 30093
+v 27844
+v 33037
+v 24571
+v 25595
+v 34562
+v 33392
+v 33002
+v 29962
+v 25727
+v 33976
+v 24036
+v 31493
+v 28425
+v 20044
+v 28989
+v 29466
+v 25255
+v 32635
+v 26357
+v 24071
+v 32865
+v 26093
+v 23775
+v 27938
+v 24228
+v 27393
+v 23732
+v 25963
+v 18151
+v 19832
+v 24283
+v 30674
+v 32910
+v 26487
+v 24762
+v 35282
+v 28662
+v 33618
+v 33557
+v 23671
+v 24045
+v 22613
+v 23300
+v 29258
+v 32257
+v 27663
+v 35348
+v 26324
+v 23778
+v 30532
+v 34376
+v 33782
+v 30996
+v 22128
+v 35263
+v 31151
+v 26456
+v 30055
+v 24511
+v 31264
+v 26483
+v 30403
+v 32227
+v 30752
+v 25639
+v 23326
+v 31706
+v 31475
+v 24535
+v 23507
+v 27736
+v 31834
+v 23167
+v 28641
+v 25429
+v 23077
+v 30807
+v 23170
+v 33328
+v 22827
+v 29710
+v 23681
+v 34776
+v 28398
+v 23445
+v 24601
+v 23829
+v 30906
+v 23969
+v 33313
+v 28627
+v 27509
+v 32094
+v 29050
+v 23571
+v 31567
+v 34660
+v 28843
+v 23013
+v 25156
+v 25965
+v 33341
+v 23044
+v 22003
+v 33528
+v 23580
+v 30555
+v 24266
+v 23949
+v 29281
+v 25948
+v 23716
+v 33247
+v 27556
+v 19479
+v 34338
+v 22884
+v 31813
+v 28138
+v 24137
+v 28019
+v 22177
+v 23060
+v 34302
+v 24740
+v 31745
+v 33520
+v 22917
+v 22628
+v 30284
+v 24729
+v 26326
+v 23201
+v 27268
+v 31985
+v 23777
+v 34639
+v 22625
+v 23366
+v 24768
+v 33424
+v 27231
+v 33859
+v 23339
+v 26196
+v 28720
+v 23799
+v 29521
+v 30755
+v 23208
+v 34215
+v 27419
+v 26938
+v 30120
+v 30273
+v 24836
+v 24391
+v 31623
+v 25644
+v 25077
+v 27669
+v 30144
+v 27715
+v 24969
+v 32345
+v 23800
+v 29286
+v 29609
+v 35324
+v 24702
+v 34490
+v 26206
+v 22171
+v 26955
+v 19417
+v 28683
+v 30777
+v 24945
+v 23073
+v 22998
+v 32674
+v 23859
+v 28981
+v 35728
+v 23913
+v 34240
+v 26452
+v 25767
+v 34906
+v 24353
+v 23828
+v 23168
+v 19371
+v 28332
+v 26862
+v 32488
+v 29979
+v 29421
+v 29630
+v 26185
+v 31005
+v 22220
+v 27112
+v 25871
+v 34207
+v 27392
+v 33268
+v 27010
+v 25586
+v 33034
+v 24169
+v 23909
+v 27864
+v 25100
+v 26243
+v 28235
+v 31001
+v 23636
+v 30446
+v 34453
+v 24212
+v 23264
+v 23874
+v 32162
+v 19844
+v 26045
+v 33258
+v 25859
+v 34023
+v 25716
+v 35874
+v 24544
+v 33517
+v 22258
+v 33671
+v 24891
+v 34135
+v 19016
+v 23279
+v 33753
+v 20439
+v 24080
+v 28034
+v 31197
+v 23997
+v 25371
+v 24856
+v 20564
+v 23161
+v 24624
+v 33291
+v 28187
+v 27513
+v 23254
+v 35894
+v 23727
+v 22445
+v 29729
+v 30449
+v 22758
+v 28966
+v 33432
+v 28335
+v 24363
+v 33196
+v 24438
+v 28137
+v 23408
+v 28613
+v 34421
+v 25863
+v 34194
+v 23911
+v 24002
+v 35157
+v 19639
+v 32773
+v 24286
+v 35540
+v 35381
+v 23878
+v 29494
+v 32990
+v 29132
+v 24088
+v 33283
+v 19402
+v 23943
+v 22686
+v 35586
+v 30329
+v 35476
+v 19469
+v 27497
+v 33120
+v 22053
+v 26515
+v 33158
+v 35871
+v 22741
+v 24710
+v 28572
+v 24104
+v 35593
+v 26987
+v 23311
+v 35595
+v 24877
+v 19679
+v 34083
+v 23481
+v 19315
+v 23899
+v 23795
+v 22974
+v 34800
+v 23820
+v 32924
+v 26886
+v 28717
+v 33102
+v 33098
+v 27011
+v 24003
+v 26057
+v 26639
+v 19385
+v 24047
+v 19428
+v 33049
+v 23759
+v 25987
+v 24699
+v 30293
+v 28451
+v 31010
+v 19432
+v 23313
+v 34158
+v 23522
+v 23832
+v 25737
+v 34100
+v 26280
+v 25113
+v 34501
+v 28261
+v 29526
+v 23977
+v 19644
+v 19404
+v 35532
+v 19435
+v 23623
+v 22943
+v 29463
+v 24940
+v 26501
+v 24565
+v 34257
+v 19752
+v 24693
+v 34745
+v 24413
+v 19436
+v 31051
+v 24576
+v 33826
+v 30765
+v 27762
+v 31805
+v 19399
+v 34508
+v 32525
+v 35506
+v 23774
+v 22990
+v 33678
+v 25428
+v 19461
+v 26092
+v 29616
+v 32109
+v 29288
+v 19609
+v 24752
+v 19485
+v 27924
+v 30964
+v 35491
+v 28810
+v 29862
+v 33985
+v 24038
+v 21146
+v 25421
+v 34357
+v 28915
+v 29065
+v 27526
+v 27366
+v 19606
+v 24147
+v 25439
+v 28733
+v 28403
+v 27666
+v 35523
+v 24875
+v 26055
+v 24497
+v 35548
+v 23907
+v 19577
+v 25479
+v 34260
+v 28602
+v 35366
+v 28873
+v 23090
+v 26345
+v 28439
+v 19418
+v 19438
+v 27283
+v 27271
+v 23821
+v 35614
+v 30823
+v 29657
+v 28220
+v 25970
+v 24454
+v 30896
+v 26517
+v 27577
+v 19592
+v 29794
+v 26427
+v 26187
+v 19523
+v 32116
+v 35594
+v 35629
+v 24319
+v 19544
+v 35562
+v 31227
+v 24964
+v 20705
+v 28766
+v 31351
+v 28543
+v 19868
+v 19784
+v 26276
+v 23904
+v 21709
+v 25885
+v 26418
+v 31199
+v 25117
+v 19856
+v 35533
+v 30027
+v 31912
+v 26790
+v 19458
+v 31031
+v 25551
+v 23936
+v 26199
+v 24545
+v 25408
+v 30790
+v 35059
+v 23251
+v 28017
+v 32423
+v 19510
+v 20036
+v 29424
+v 19442
+v 33100
+v 35417
+v 19662
+v 27809
+v 28322
+v 19630
+v 24612
+v 31953
+v 24428
+v 27384
+v 29619
+v 24956
+v 32613
+v 23491
+v 26034
+v 25663
+v 31403
+v 23811
+v 33308
+v 30397
+v 30192
+v 23700
+v 23399
+v 27792
+v 26520
+v 22525
+v 25884
+v 28906
+v 33378
+v 22137
+v 33951
+v 25107
+v 23372
+v 23520
+v 27381
+v 24369
+v 25262
+v 35108
+v 19254
+v 23915
+v 19607
+v 29450
+v 28862
+v 33382
+v 30376
+v 31807
+v 32829
+v 21072
+v 23769
+v 25511
+v 19626
+v 30007
+v 33244
+v 19596
+v 33295
+v 23365
+v 23461
+v 23354
+v 26442
+v 33917
+v 23071
+v 31144
+v 24415
+v 24269
+v 29644
+v 24270
+v 32076
+v 20222
+v 29618
+v 23037
+v 24159
+v 19431
+v 29309
+v 25276
+v 19548
+v 33339
+v 19946
+v 23555
+v 33512
+v 29759
+v 22623
+v 19732
+v 29229
+v 29245
+v 34461
+v 27144
+v 23841
+v 26331
+v 19530
+v 34584
+v 27052
+v 23581
+v 33331
+v 32890
+v 19499
+v 25286
+v 33288
+v 33445
+v 19433
+v 33398
+v 31699
+v 33318
+v 19262
+v 29525
+v 28626
+v 30402
+v 19084
+v 34929
+v 25898
+v 25921
+v 34101
+v 24692
+v 25172
+v 19534
+v 23490
+v 26358
+v 30460
+v 35423
+v 26778
+v 30883
+v 19501
+v 28283
+v 30298
+v 33984
+v 19519
+v 23514
+v 19471
+v 19518
+v 26298
+v 24594
+v 19528
+v 25144
+v 21490
+v 19447
+v 33411
+v 35398
+v 24083
+v 23257
+v 23624
+v 19567
+v 30967
+v 29153
+v 19503
+v 28887
+v 21321
+v 34412
+v 29307
+v 29461
+v 25232
+v 35043
+v 25406
+v 29815
+v 31640
+v 28055
+v 25949
+v 30252
+v 24409
+v 22302
+v 24596
+v 33490
+v 19564
+v 19638
+v 19460
+v 29733
+v 28178
+v 35447
+v 26022
+v 24339
+v 22545
+v 23115
+v 32469
+v 34153
+v 34316
+v 24719
+v 21575
+v 19663
+v 27155
+v 24355
+v 26518
+v 26165
+v 20739
+v 19632
+v 19514
+v 19731
+v 31242
+v 19443
+v 27802
+v 28351
+v 19878
+v 35365
+v 25128
+v 35715
+v 33880
+v 33594
+v 32987
+v 27789
+v 19423
+v 32093
+v 25934
+v 28594
+v 26253
+v 24744
+v 19611
+v 25244
+v 24061
+v 19470
+v 27708
+v 23923
+v 21162
+v 26566
+v 22110
+v 33429
+v 19660
+v 21417
+v 23099
+v 26123
+v 19482
+v 27370
+v 19453
+v 19538
+v 30825
+v 29285
+v 31265
+v 25017
+v 28066
+v 30292
+v 34813
+v 24546
+v 19529
+v 25971
+v 18965
+v 20250
+v 26617
+v 19586
+v 19545
+v 28096
+v 34960
+v 32810
+v 27374
+v 27253
+v 19542
+v 28418
+v 26163
+v 35607
+v 33278
+v 26763
+v 23287
+v 19909
+v 27889
+v 30058
+v 28962
+v 19850
+v 24110
+v 25130
+v 19951
+v 24813
+v 27245
+v 27928
+v 19306
+v 33591
+v 27956
+v 34258
+v 25675
+v 20558
+v 31436
+v 30698
+v 23749
+v 19754
+v 26176
+v 26145
+v 32863
+v 33478
+v 19463
+v 31287
+v 20377
+v 25533
+v 33864
+v 27992
+v 20636
+v 29149
+v 23275
+v 22168
+v 25355
+v 30719
+v 26407
+v 26421
+v 31922
+v 28410
+v 33089
+v 20078
+v 19520
+v 26995
+v 20647
+v 19477
+v 33082
+v 21714
+v 32007
+v 31738
+v 26590
+v 30368
+v 32513
+v 30986
+v 26741
+v 32218
+v 33484
+v 26007
+v 24808
+v 24193
+v 26885
+v 25596
+v 25978
+v 19456
+v 32378
+v 24575
+v 31670
+v 30423
+v 33903
+v 25481
+v 29886
+v 30137
+v 20014
+v 31500
+v 24905
+v 19549
+v 28870
+v 19473
+v 26925
+v 29375
+v 27595
+v 25211
+v 33925
+v 26753
+v 35215
+v 33122
+v 19759
+v 28394
+v 26028
+v 19819
+v 30721
+v 35428
+v 33569
+v 32805
+v 26132
+v 25973
+v 26122
+v 26178
+v 30862
+v 25297
+v 30125
+v 29949
+v 33682
+v 26777
+v 26905
+v 32204
+v 24932
+v 34167
+v 19515
+v 32229
+v 32382
+v 29612
+v 33155
+v 32323
+v 32029
+v 22427
+v 33379
+v 29719
+v 26878
+v 26017
+v 30529
+v 25616
+v 25705
+v 29832
+v 27127
+v 33209
+v 29054
+v 25670
+v 27076
+v 27207
+v 31084
+v 26437
+v 30353
+v 32471
+v 25063
+v 29735
+v 28520
+v 27163
+v 28246
+v 29571
+v 35856
+v 33086
+v 33019
+v 32196
+v 25995
+v 19661
+v 29029
+v 25227
+v 25292
+v 24222
+v 24911
+v 25619
+v 28792
+v 30803
+v 27787
+v 19687
+v 32486
+v 25444
+v 24479
+v 26321
+v 30694
+v 30576
+v 29058
+v 27071
+v 28778
+v 31203
+v 26215
+v 19824
+v 29049
+v 26730
+v 30876
+v 32256
+v 35879
+v 26465
+v 25039
+v 24968
+v 29896
+v 19516
+v 26745
+v 28998
+v 19540
+v 33632
+v 35779
+v 31549
+v 30780
+v 30935
+v 28413
+v 29969
+v 30116
+v 27639
+v 26186
+v 28721
+v 32602
+v 30855
+v 30553
+v 28279
+v 27028
+v 34575
+v 32298
+v 24381
+v 26615
+v 19527
+v 26282
+v 34856
+v 34549
+v 30200
+v 29753
+v 28703
+v 26252
+v 27240
+v 19725
+v 26733
+v 30479
+v 31101
+v 30563
+v 23489
+v 30250
+v 24931
+v 30195
+v 21735
+v 32737
+v 26921
+v 29698
+v 25818
+v 27034
+v 23699
+v 31496
+v 28470
+v 28930
+v 34103
+v 33470
+v 33456
+v 31282
+v 35536
+v 33788
+v 28043
+v 34243
+v 25558
+v 25979
+v 29958
+v 27150
+v 33752
+v 31294
+v 32998
+v 34221
+v 26080
+v 25204
+v 26606
+v 26848
+v 30666
+v 19718
+v 31829
+v 34663
+v 32067
+v 24410
+v 30314
+v 26440
+v 28884
+v 30021
+v 26711
+v 30586
+v 21453
+v 30988
+v 32994
+v 31646
+v 28960
+v 33022
+v 33498
+v 29377
+v 30928
+v 25569
+v 27087
+v 30644
+v 31267
+v 34292
+v 33505
+v 27489
+v 27606
+v 32933
+v 32038
+v 25065
+v 34358
+v 20510
+v 25021
+v 27456
+v 34913
+v 26071
+v 26200
+v 33401
+v 26943
+v 27531
+v 27085
+v 25923
+v 27780
+v 35777
+v 26348
+v 27296
+v 27243
+v 26137
+v 30151
+v 33410
+v 33422
+v 27063
+v 25532
+v 35291
+v 31984
+v 28523
+v 24733
+v 25867
+v 25213
+v 34778
+v 35138
+v 25872
+v 26035
+v 30540
+v 28405
+v 26229
+v 24499
+v 20322
+v 25345
+v 19589
+v 30071
+v 33983
+v 26402
+v 29315
+v 31041
+v 23480
+v 35169
+v 27855
+v 22049
+v 34889
+v 28713
+v 26275
+v 27106
+v 27861
+v 27173
+v 24975
+v 30875
+v 30815
+v 25956
+v 30335
+v 27450
+v 26283
+v 30290
+v 27044
+v 27019
+v 30229
+v 31125
+v 31211
+v 32047
+v 28037
+v 32942
+v 27190
+v 29370
+v 35247
+v 25231
+v 33018
+v 25632
+v 29147
+v 32630
+v 27075
+v 23032
+v 29376
+v 19558
+v 35635
+v 31918
+v 31803
+v 29081
+v 29577
+v 32078
+v 25764
+v 19913
+v 32349
+v 27171
+v 26360
+v 33005
+v 27178
+v 32934
+v 27372
+v 33046
+v 32212
+v 27915
+v 29204
+v 19650
+v 33227
+v 29053
+v 29913
+v 31613
+v 30074
+v 30519
+v 31844
+v 30191
+v 33195
+v 26982
+v 28201
+v 33839
+v 26429
+v 29879
+v 33887
+v 31767
+v 25324
+v 26030
+v 30452
+v 34676
+v 27375
+v 27879
+v 31820
+v 27201
+v 24032
+v 27538
+v 27226
+v 35737
+v 30798
+v 29781
+v 34589
+v 26332
+v 27729
+v 32735
+v 29310
+v 32819
+v 33439
+v 26159
+v 29297
+v 35946
+v 19561
+v 19721
+v 26984
+v 20164
+v 30648
+v 34345
+v 30998
+v 26076
+v 26876
+v 30349
+v 27297
+v 29076
+v 34483
+v 19743
+v 26014
+v 26970
+v 32410
+v 34213
+v 34855
+v 30257
+v 27090
+v 26840
+v 35175
+v 34914
+v 29750
+v 32953
+v 23755
+v 26414
+v 27833
+v 25015
+v 33695
+v 32633
+v 31980
+v 26549
+v 34474
+v 35295
+v 30219
+v 33615
+v 26738
+v 28542
+v 30651
+v 26443
+v 19729
+v 35861
+v 33770
+v 28498
+v 28747
+v 32691
+v 27510
+v 28606
+v 28134
+v 26722
+v 26610
+v 25075
+v 27935
+v 29581
+v 25982
+v 31087
+v 26054
+v 19708
+v 32991
+v 27308
+v 30526
+v 27657
+v 30528
+v 26191
+v 27653
+v 25939
+v 19778
+v 30360
+v 27380
+v 25880
+v 23720
+v 30826
+v 19602
+v 32768
+v 27950
+v 33427
+v 26952
+v 34000
+v 33659
+v 30498
+v 30631
+v 24068
+v 29116
+v 19789
+v 19557
+v 27035
+v 28293
+v 26627
+v 29184
+v 26148
+v 28002
+v 28100
+v 29513
+v 25275
+v 22865
+v 29350
+v 31311
+v 30781
+v 26068
+v 32926
+v 26697
+v 27462
+v 29953
+v 29717
+v 31233
+v 29900
+v 26720
+v 31044
+v 34208
+v 30286
+v 29798
+v 28877
+v 34248
+v 26361
+v 25242
+v 26789
+v 29767
+v 19575
+v 19480
+v 33193
+v 32241
+v 30817
+v 26381
+v 26062
+v 28847
+v 32492
+v 34781
+v 26783
+v 29293
+v 29591
+v 27605
+v 27315
+v 31254
+v 26553
+v 25469
+v 26493
+v 35569
+v 23428
+v 33552
+v 27047
+v 27363
+v 29647
+v 28329
+v 30162
+v 34887
+v 30453
+v 29059
+v 30351
+v 26729
+v 27322
+v 34691
+v 27095
+v 25983
+v 26322
+v 32740
+v 19690
+v 19843
+v 26780
+v 30647
+v 26090
+v 26074
+v 26532
+v 27466
+v 31976
+v 24775
+v 29817
+v 27913
+v 30637
+v 26039
+v 26204
+v 20175
+v 31142
+v 33035
+v 29186
+v 25750
+v 32133
+v 29477
+v 31234
+v 24030
+v 25694
+v 26261
+v 20051
+v 19566
+v 25936
+v 32902
+v 31085
+v 26698
+v 35693
+v 30468
+v 26808
+v 32945
+v 26069
+v 27533
+v 26853
+v 26240
+v 33125
+v 34277
+v 29017
+v 29586
+v 33668
+v 28585
+v 34872
+v 31046
+v 32616
+v 32032
+v 34264
+v 27438
+v 33577
+v 31783
+v 28617
+v 30052
+v 26424
+v 31187
+v 32443
+v 25090
+v 19696
+v 24894
+v 30538
+v 27278
+v 26220
+v 26640
+v 33852
+v 31426
+v 26117
+v 30692
+v 30824
+v 31252
+v 33202
+v 26024
+v 33853
+v 32986
+v 35189
+v 26504
+v 35233
+v 29441
+v 28541
+v 26540
+v 34900
+v 33866
+v 26825
+v 30428
+v 21947
+v 27568
+v 33836
+v 28156
+v 25492
+v 29954
+v 31166
+v 26082
+v 32778
+v 29876
+v 29120
+v 30474
+v 28089
+v 26088
+v 26128
+v 34082
+v 29261
+v 19051
+v 29023
+v 31021
+v 30525
+v 30804
+v 25054
+v 35042
+v 24026
+v 29737
+v 34525
+v 26931
+v 27505
+v 26393
+v 25851
+v 29589
+v 19804
+v 30167
+v 35036
+v 25924
+v 30210
+v 26594
+v 34792
+v 33009
+v 26327
+v 27134
+v 27668
+v 30925
+v 27221
+v 26318
+v 26032
+v 29301
+v 26182
+v 33063
+v 30678
+v 26060
+v 34120
+v 26513
+v 30757
+v 30868
+v 29704
+v 28548
+v 31268
+v 26771
+v 32605
+v 26262
+v 27088
+v 19706
+v 27894
+v 26890
+v 29127
+v 29603
+v 33348
+v 30510
+v 33790
+v 29889
+v 31577
+v 23882
+v 30501
+v 25881
+v 25598
+v 26221
+v 31878
+v 31782
+v 25197
+v 30236
+v 30594
+v 34454
+v 30430
+v 29406
+v 34773
+v 27317
+v 26727
+v 32482
+v 26619
+v 32708
+v 29573
+v 24866
+v 29108
+v 34183
+v 32731
+v 24974
+v 34630
+v 34922
+v 26842
+v 33029
+v 31464
+v 26728
+v 25516
+v 27603
+v 23465
+v 31315
+v 29966
+v 25804
+v 33255
+v 30147
+v 27769
+v 30954
+v 28931
+v 30770
+v 26715
+v 27658
+v 27213
+v 34732
+v 26312
+v 33877
+v 25230
+v 29070
+v 25379
+v 31194
+v 26223
+v 34285
+v 30814
+v 35029
+v 27961
+v 31842
+v 34531
+v 27280
+v 19809
+v 25992
+v 32001
+v 28748
+v 23635
+v 26143
+v 31341
+v 33799
+v 27104
+v 28634
+v 28454
+v 27282
+v 33263
+v 31059
+v 26234
+v 30220
+v 25220
+v 26329
+v 29722
+v 26194
+v 32236
+v 26892
+v 30858
+v 31094
+v 27193
+v 28793
+v 35437
+v 26048
+v 31833
+v 26409
+v 26799
+v 32498
+v 29892
+v 26095
+v 35229
+v 28074
+v 29776
+v 31185
+v 26218
+v 24664
+v 31900
+v 27518
+v 29728
+v 32144
+v 27463
+v 30166
+v 26138
+v 35461
+v 26149
+v 26625
+v 32266
+v 25774
+v 26344
+v 26766
+v 26010
+v 30737
+v 26510
+v 26154
+v 27690
+v 31013
+v 35507
+v 35470
+v 26565
+v 32199
+v 29342
+v 28342
+v 26439
+v 25044
+v 34682
+v 26116
+v 19799
+v 30549
+v 31100
+v 32546
+v 32136
+v 28449
+v 26774
+v 25702
+v 32555
+v 22750
+v 34340
+v 27737
+v 26370
+v 30890
+v 26264
+v 19797
+v 26867
+v 29655
+v 27211
+v 35160
+v 32858
+v 26689
+v 33210
+v 32215
+v 29998
+v 26868
+v 27270
+v 26171
+v 30614
+v 30696
+v 30176
+v 27447
+v 30775
+v 34253
+v 27113
+v 31335
+v 33733
+v 31594
+v 25410
+v 27539
+v 24019
+v 26856
+v 27707
+v 25695
+v 32909
+v 26667
+v 32848
+v 29700
+v 30991
+v 32722
+v 31110
+v 31434
+v 29112
+v 32480
+v 26680
+v 35246
+v 29553
+v 32629
+v 29380
+v 31938
+v 29676
+v 26803
+v 26173
+v 23376
+v 26547
+v 27857
+v 25367
+v 33760
+v 25034
+v 32111
+v 28809
+v 35675
+v 24220
+v 26851
+v 27493
+v 29977
+v 26289
+v 34788
+v 25139
+v 34140
+v 26781
+v 34680
+v 27330
+v 34170
+v 34719
+v 26857
+v 26353
+v 29028
+v 28824
+v 35242
+v 29686
+v 27717
+v 30336
+v 24214
+v 29610
+v 26461
+v 34273
+v 26569
+v 30911
+v 32039
+v 26600
+v 26529
+v 30203
+v 26589
+v 24746
+v 28104
+v 25578
+v 33627
+v 33878
+v 30685
+v 29662
+v 27286
+v 30922
+v 34234
+v 35202
+v 31303
+v 30297
+v 26140
+v 25217
+v 25412
+v 25328
+v 31318
+v 29277
+v 31195
+v 27031
+v 29959
+v 26342
+v 26564
+v 32155
+v 28502
+v 27391
+v 35605
+v 35804
+v 29678
+v 19580
+v 26367
+v 19621
+v 30077
+v 29701
+v 32479
+v 29926
+v 27175
+v 23066
+v 28092
+v 30669
+v 33679
+v 26113
+v 25177
+v 27257
+v 31789
+v 34174
+v 32564
+v 27111
+v 28515
+v 32163
+v 27368
+v 25329
+v 34828
+v 27764
+v 26695
+v 28577
+v 27266
+v 31226
+v 30171
+v 30516
+v 26337
+v 34265
+v 26773
+v 28575
+v 28433
+v 30170
+v 30196
+v 27299
+v 32872
+v 26099
+v 31970
+v 26964
+v 29006
+v 27994
+v 26942
+v 29498
+v 31095
+v 26210
+v 34747
+v 34354
+v 26873
+v 27041
+v 26308
+v 27720
+v 32102
+v 30667
+v 26255
+v 26538
+v 27281
+v 27431
+v 30100
+v 28141
+v 25283
+v 30391
+v 30990
+v 29225
+v 30211
+v 20495
+v 27377
+v 32412
+v 35255
+v 28581
+v 29910
+v 19748
+v 34193
+v 30995
+v 27335
+v 30910
+v 31052
+v 35457
+v 26101
+v 35564
+v 30342
+v 26009
+v 30183
+v 27955
+v 31407
+v 26749
+v 32090
+v 34592
+v 27343
+v 26300
+v 29780
+v 34284
+v 24960
+v 31489
+v 19735
+v 26213
+v 29653
+v 33809
+v 26764
+v 25738
+v 30788
+v 25541
+v 26601
+v 29951
+v 26372
+v 32147
+v 24978
+v 26992
+v 35142
+v 27162
+v 32702
+v 34535
+v 28610
+v 33418
+v 27500
+v 19591
+v 32226
+v 33874
+v 23268
+v 28979
+v 30373
+v 30346
+v 33298
+v 35220
+v 28195
+v 27905
+v 26375
+v 33754
+v 33277
+v 34940
+v 33475
+v 26285
+v 25193
+v 31760
+v 24583
+v 32619
+v 27365
+v 30630
+v 28291
+v 30680
+v 28114
+v 26471
+v 26189
+v 26986
+v 26993
+v 32972
+v 25990
+v 26458
+v 26936
+v 32011
+v 30096
+v 30131
+v 31083
+v 34826
+v 33235
+v 27255
+v 27325
+v 30506
+v 32552
+v 24858
+v 19724
+v 27932
+v 26377
+v 31557
+v 31809
+v 34797
+v 28417
+v 30899
+v 30322
+v 26157
+v 26029
+v 30065
+v 30469
+v 27300
+v 32130
+v 26167
+v 33101
+v 25770
+v 31656
+v 34045
+v 35558
+v 35440
+v 27058
+v 20964
+v 26631
+v 35786
+v 34772
+v 27893
+v 29793
+v 30593
+v 26534
+v 35022
+v 27017
+v 27937
+v 27434
+v 27005
+v 27006
+v 31510
+v 29471
+v 34395
+v 29182
+v 28518
+v 33501
+v 26011
+v 27523
+v 33211
+v 32880
+v 26390
+v 35667
+v 26582
+v 35376
+v 30905
+v 27785
+v 35408
+v 30812
+v 25637
+v 25050
+v 31241
+v 35570
+v 27958
+v 26049
+v 29253
+v 34182
+v 31718
+v 32297
+v 30266
+v 19709
+v 26922
+v 27003
+v 29391
+v 26373
+v 24178
+v 19744
+v 27478
+v 27525
+v 26130
+v 27741
+v 34885
+v 31536
+v 28281
+v 27132
+v 29366
+v 26574
+v 30405
+v 28378
+v 27302
+v 27845
+v 35091
+v 32017
+v 32463
+v 30562
+v 28953
+v 25739
+v 27484
+v 34244
+v 35154
+v 26125
+v 27696
+v 29732
+v 30802
+v 35449
+v 35878
+v 30523
+v 31645
+v 28625
+v 30009
+v 30673
+v 31086
+v 30026
+v 30242
+v 29417
+v 26536
+v 26560
+v 26053
+v 25343
+v 31479
+v 24670
+v 29103
+v 31312
+v 28723
+v 30089
+v 26412
+v 27966
+v 28059
+v 33015
+v 27750
+v 30983
+v 29569
+v 31257
+v 25814
+v 26858
+v 27559
+v 31942
+v 27272
+v 30819
+v 27404
+v 26338
+v 26235
+v 28408
+v 30197
+v 31408
+v 29156
+v 24022
+v 35492
+v 26480
+v 31411
+v 26021
+v 24113
+v 26266
+v 29692
+v 26166
+v 35694
+v 31283
+v 30306
+v 32777
+v 24837
+v 28651
+v 32746
+v 30791
+v 27103
+v 31018
+v 30795
+v 32620
+v 35448
+v 21138
+v 30282
+v 27348
+v 28480
+v 25399
+v 30114
+v 27449
+v 25361
+v 29025
+v 30961
+v 29360
+v 25287
+v 30880
+v 29845
+v 35372
+v 25068
+v 26470
+v 24051
+v 35406
+v 31169
+v 28282
+v 29669
+v 24735
+v 26944
+v 26139
+v 34822
+v 30625
+v 22971
+v 31506
+v 26256
+v 34261
+v 33822
+v 33174
+v 33912
+v 26303
+v 35320
+v 25692
+v 31588
+v 24949
+v 35478
+v 30726
+v 32793
+v 35899
+v 26397
+v 32354
+v 27215
+v 25913
+v 29063
+v 27628
+v 26260
+v 35335
+v 26263
+v 35460
+v 35079
+v 27130
+v 33734
+v 26961
+v 24584
+v 30664
+v 26019
+v 27241
+v 27695
+v 25796
+v 35333
+v 31042
+v 35472
+v 30524
+v 25607
+v 25895
+v 32273
+v 32202
+v 35326
+v 31855
+v 26904
+v 33764
+v 27122
+v 29218
+v 31684
+v 25349
+v 35527
+v 24057
+v 26875
+v 25690
+v 27313
+v 27614
+v 35514
+v 29084
+v 30772
+v 35078
+v 31587
+v 31530
+v 30507
+v 35176
+v 26398
+v 30104
+v 35385
+v 27608
+v 31206
+v 26077
+v 30068
+v 26183
+v 31186
+v 28084
+v 27656
+v 34387
+v 32243
+v 35471
+v 19790
+v 27199
+v 35373
+v 35475
+v 26416
+v 35799
+v 34449
+v 24170
+v 27379
+v 28309
+v 32701
+v 26977
+v 27116
+v 26895
+v 35314
+v 35895
+v 30639
+v 27912
+v 27125
+v 27491
+v 28305
+v 27420
+v 26217
+v 23766
+v 26479
+v 25896
+v 24639
+v 26455
+v 35038
+v 25776
+v 25844
+v 24818
+v 31221
+v 30302
+v 26628
+v 27429
+v 20962
+v 28159
+v 22527
+v 35332
+v 30729
+v 35551
+v 27004
+v 34623
+v 35553
+v 25962
+v 25917
+v 27086
+v 26988
+v 30628
+v 32122
+v 30677
+v 35050
+v 27195
+v 26413
+v 27000
+v 27625
+v 24447
+v 26188
+v 28111
+v 30427
+v 29599
+v 25080
+v 30008
+v 33744
+v 32728
+v 34275
+v 32921
+v 24459
+v 30530
+v 33204
+v 31712
+v 31158
+v 27572
+v 26391
+v 28181
+v 27804
+v 27344
+v 32336
+v 32845
+v 30771
+v 27550
+v 26595
+v 28732
+v 27613
+v 27853
+v 35374
+v 28174
+v 35819
+v 35096
+v 35403
+v 29960
+v 29924
+v 28387
+v 28673
+v 27264
+v 25515
+v 25567
+v 30551
+v 26124
+v 30459
+v 26448
+v 34595
+v 35249
+v 34767
+v 28166
+v 27121
+v 34655
+v 24128
+v 24517
+v 32467
+v 33194
+v 26066
+v 26898
+v 29689
+v 29933
+v 32727
+v 33137
+v 26767
+v 35098
+v 30020
+v 33692
+v 26724
+v 26389
+v 32197
+v 25930
+v 32036
+v 32791
+v 30239
+v 26309
+v 28474
+v 30483
+v 29942
+v 29482
+v 23842
+v 34085
+v 34027
+v 26096
+v 35482
+v 35669
+v 25993
+v 30409
+v 19911
+v 32285
+v 26855
+v 27700
+v 30981
+v 30261
+v 35259
+v 26732
+v 33889
+v 27508
+v 30049
+v 20031
+v 26939
+v 31231
+v 27181
+v 31132
+v 29984
+v 34114
+v 26524
+v 29205
+v 34752
+v 32184
+v 31210
+v 32608
+v 28327
+v 26216
+v 35677
+v 34263
+v 29762
+v 26940
+v 30980
+v 28101
+v 30611
+v 29556
+v 28007
+v 26394
+v 31899
+v 33947
+v 34224
+v 29946
+v 28080
+v 34017
+v 28416
+v 30445
+v 26908
+v 28509
+v 28185
+v 34528
+v 28150
+v 26089
+v 32947
+v 30797
+v 30557
+v 34081
+v 27984
+v 27407
+v 26233
+v 33729
+v 31364
+v 29303
+v 35432
+v 26597
+v 26932
+v 26527
+v 26704
+v 30464
+v 31431
+v 35767
+v 32521
+v 29099
+v 26450
+v 35892
+v 31643
+v 32573
+v 35697
+v 26072
+v 29478
+v 28071
+v 25473
+v 29454
+v 33346
+v 25233
+v 26352
+v 31917
+v 35637
+v 30023
+v 25315
+v 27263
+v 26775
+v 29442
+v 28859
+v 35543
+v 26474
+v 26042
+v 26578
+v 28668
+v 30520
+v 26287
+v 26056
+v 30436
+v 26642
+v 26834
+v 31238
+v 27953
+v 31881
+v 29236
+v 30343
+v 30619
+v 28350
+v 31172
+v 30759
+v 29905
+v 26949
+v 34578
+v 30820
+v 35092
+v 31746
+v 24155
+v 35621
+v 26902
+v 27350
+v 26954
+v 29448
+v 21698
+v 28306
+v 29522
+v 27733
+v 26296
+v 29188
+v 27529
+v 30328
+v 26228
+v 25535
+v 32164
+v 25873
+v 27303
+v 27188
+v 25497
+v 27838
+v 30345
+v 34346
+v 27224
+v 31448
+v 25954
+v 34975
+v 27768
+v 32969
+v 26707
+v 30044
+v 32015
+v 35649
+v 30466
+v 30756
+v 32396
+v 29171
+v 35407
+v 34491
+v 35052
+v 32729
+v 26410
+v 34458
+v 26743
+v 30835
+v 31228
+v 35571
+v 31076
+v 35876
+v 27578
+v 35196
+v 33831
+v 26847
+v 35040
+v 30948
+v 26248
+v 26170
+v 29547
+v 31856
+v 25381
+v 32415
+v 19899
+v 34831
+v 27641
+v 30550
+v 25589
+v 26920
+v 29393
+v 25725
+v 35783
+v 33007
+v 35341
+v 27073
+v 30521
+v 28674
+v 31117
+v 34823
+v 27015
+v 29802
+v 27884
+v 31296
+v 27575
+v 28559
+v 26219
+v 31780
+v 35211
+v 31062
+v 34673
+v 31445
+v 34966
+v 35898
+v 26127
+v 26179
+v 33921
+v 31322
+v 30321
+v 30404
+v 31029
+v 26374
+v 25740
+v 33357
+v 32369
+v 32530
+v 30908
+v 27158
+v 32373
+v 35619
+v 30456
+v 26121
+v 30949
+v 30168
+v 26507
+v 35436
+v 34567
+v 26081
+v 26386
+v 28023
+v 32706
+v 30238
+v 28983
+v 31249
+v 31816
+v 31798
+v 26772
+v 25612
+v 25826
+v 29535
+v 34038
+v 26419
+v 27136
+v 34688
+v 19970
+v 26760
+v 33059
+v 33598
+v 33590
+v 25953
+v 27250
+v 27258
+v 30188
+v 25127
+v 34343
+v 30569
+v 25199
+v 24506
+v 31508
+v 28573
+v 30866
+v 29797
+v 29939
+v 30190
+v 27662
+v 32324
+v 25957
+v 27053
+v 34499
+v 25468
+v 34447
+v 29019
+v 33781
+v 26907
+v 26279
+v 34164
+v 23549
+v 29860
+v 32669
+v 31777
+v 30384
+v 26653
+v 35368
+v 29937
+v 26295
+v 32502
+v 30621
+v 30057
+v 26541
+v 34944
+v 34677
+v 27094
+v 26313
+v 35628
+v 31049
+v 23806
+v 29929
+v 31483
+v 28718
+v 26620
+v 34524
+v 30047
+v 25581
+v 24091
+v 32826
+v 26436
+v 27013
+v 28298
+v 33438
+v 34371
+v 21799
+v 30206
+v 27246
+v 30537
+v 27408
+v 29373
+v 31037
+v 35651
+v 25145
+v 26425
+v 35763
+v 35502
+v 28664
+v 28388
+v 30303
+v 27795
+v 32682
+v 32026
+v 31045
+v 33127
+v 35426
+v 31193
+v 35404
+v 28132
+v 25901
+v 34580
+v 30467
+v 26230
+v 27139
+v 26497
+v 26863
+v 27301
+v 26271
+v 31617
+v 30262
+v 28851
+v 30610
+v 34502
+v 30232
+v 21395
+v 24350
+v 33647
+v 35411
+v 33507
+v 26070
+v 31736
+v 33896
+v 27394
+v 29515
+v 35845
+v 26694
+v 24414
+v 29763
+v 27830
+v 34629
+v 35344
+v 26512
+v 27217
+v 29683
+v 26299
+v 32003
+v 30554
+v 29497
+v 28226
+v 34967
+v 27210
+v 33905
+v 26453
+v 27098
+v 28097
+v 23675
+v 35267
+v 24242
+v 28205
+v 34844
+v 29396
+v 27942
+v 25383
+v 29357
+v 24921
+v 30243
+v 33486
+v 31027
+v 35495
+v 32449
+v 27983
+v 25456
+v 35775
+v 35701
+v 22735
+v 30668
+v 25846
+v 21701
+v 26164
+v 19623
+v 26896
+v 23434
+v 32466
+v 26246
+v 26542
+v 26141
+v 26828
+v 30205
+v 31118
+v 35906
+v 30542
+v 35572
+v 25524
+v 30223
+v 34925
+v 28574
+v 32420
+v 30655
+v 34404
+v 27117
+v 22617
+v 28992
+v 30975
+v 35800
+v 21527
+v 35718
+v 27319
+v 25829
+v 30041
+v 26177
+v 29314
+v 32232
+v 34446
+v 25188
+v 31990
+v 31580
+v 32024
+v 25701
+v 35592
+v 31472
+v 27341
+v 32627
+v 35886
+v 33979
+v 27097
+v 28200
+v 32632
+v 29562
+v 27333
+v 30657
+v 30846
+v 28841
+v 27043
+v 33819
+v 30061
+v 26006
+v 34342
+v 30254
+v 29541
+v 26259
+v 20029
+v 30920
+v 30344
+v 28517
+v 34365
+v 32800
+v 33717
+v 31030
+v 33307
+v 32916
+v 27401
+v 35105
+v 27070
+v 26359
+v 26351
+v 31897
+v 26889
+v 27079
+v 19335
+v 26343
+v 26462
+v 26634
+v 34537
+v 26734
+v 33466
+v 35803
+v 27021
+v 30697
+v 31608
+v 35323
+v 32027
+v 30255
+v 33051
+v 26340
+v 28151
+v 27458
+v 35686
+v 27396
+v 31175
+v 27875
+v 27355
+v 27535
+v 26586
+v 35640
+v 24973
+v 26466
+v 33381
+v 27251
+v 33666
+v 26380
+v 32503
+v 27776
+v 27048
+v 30654
+v 31108
+v 30098
+v 33253
+v 26685
+v 30570
+v 26431
+v 26153
+v 30135
+v 31258
+v 27169
+v 32797
+v 32445
+v 28929
+v 35122
+v 26797
+v 35623
+v 27232
+v 29434
+v 29808
+v 30953
+v 26657
+v 29718
+v 32375
+v 30863
+v 31215
+v 35070
+v 28591
+v 26511
+v 27093
+v 27359
+v 29814
+v 26548
+v 25635
+v 23852
+v 26668
+v 31748
+v 32531
+v 35850
+v 32192
+v 26488
+v 33614
+v 31225
+v 29066
+v 31701
+v 30714
+v 26146
+v 31462
+v 32169
+v 33345
+v 31222
+v 29831
+v 25307
+v 26525
+v 28956
+v 26691
+v 35316
+v 25747
+v 28228
+v 29989
+v 31679
+v 32575
+v 27409
+v 30408
+v 31034
+v 26363
+v 24524
+v 27410
+v 23505
+v 27421
+v 28379
+v 27532
+v 26571
+v 28779
+v 28715
+v 27734
+v 35128
+v 26928
+v 34997
+v 32033
+v 24529
+v 23224
+v 26102
+v 35943
+v 30695
+v 30444
+v 30401
+v 27327
+v 25476
+v 26415
+v 27016
+v 27836
+v 24298
+v 31548
+v 26959
+v 30209
+v 25823
+v 32631
+v 30997
+v 32325
+v 28225
+v 35019
+v 31020
+v 26742
+v 30277
+v 33199
+v 28233
+v 26860
+v 29324
+v 28094
+v 34106
+v 34530
+v 29688
+v 26197
+v 35682
+v 35908
+v 26236
+v 30225
+v 33721
+v 25985
+v 27032
+v 30977
+v 28926
+v 20882
+v 28040
+v 24628
+v 35219
+v 30160
+v 31202
+v 34868
+v 35113
+v 25865
+v 25684
+v 28699
+v 26935
+v 27209
+v 32550
+v 30973
+v 25241
+v 31058
+v 29455
+v 29037
+v 29986
+v 24795
+v 34369
+v 30829
+v 30141
+v 29020
+v 34154
+v 27275
+v 26978
+v 35337
+v 28694
+v 24924
+v 24142
+v 30075
+v 30682
+v 32434
+v 27357
+v 27254
+v 27069
+v 34189
+v 35624
+v 29587
+v 32905
+v 27065
+v 28682
+v 35074
+v 28157
+v 30218
+v 34039
+v 28705
+v 35107
+v 27403
+v 32733
+v 29602
+v 32839
+v 26323
+v 28944
+v 27185
+v 24834
+v 34869
+v 27291
+v 34403
+v 23628
+v 29270
+v 25184
+v 31061
+v 34348
+v 24320
+v 31106
+v 31357
+v 32253
+v 26290
+v 31971
+v 29606
+v 32075
+v 32156
+v 27345
+v 27919
+v 27040
+v 26923
+v 24941
+v 28113
+v 33273
+v 28230
+v 28262
+v 27849
+v 35603
+v 32882
+v 33314
+v 26333
+v 25053
+v 34564
+v 34521
+v 31277
+v 29051
+v 26523
+v 26364
+v 33938
+v 28712
+v 27060
+v 30783
+v 32713
+v 30578
+v 33533
+v 30432
+v 29279
+v 26400
+v 33096
+v 26624
+v 30086
+v 28287
+v 34411
+v 35389
+v 26291
+v 28318
+v 26387
+v 30915
+v 26608
+v 29125
+v 26059
+v 30874
+v 26609
+v 28671
+v 32117
+v 25812
+v 27068
+v 28049
+v 34476
+v 33778
+v 26533
+v 34761
+v 30080
+v 31937
+v 32451
+v 31772
+v 27045
+v 25793
+v 35129
+v 29749
+v 28719
+v 27153
+v 34503
+v 33111
+v 35410
+v 24482
+v 27289
+v 24548
+v 28161
+v 30999
+v 26645
+v 26078
+v 32049
+v 27682
+v 32964
+v 26304
+v 35270
+v 27129
+v 30340
+v 27507
+v 27488
+v 31568
+v 30304
+v 24615
+v 32688
+v 33495
+v 30372
+v 29162
+v 30650
+v 30845
+v 28032
+v 26644
+v 27305
+v 27486
+v 26288
+v 30381
+v 29398
+v 26491
+v 35224
+v 26903
+v 24943
+v 26519
+v 27839
+v 26144
+v 28297
+v 30870
+v 31280
+v 26752
+v 30912
+v 35193
+v 25438
+v 32312
+v 28753
+v 26270
+v 27083
+v 27724
+v 33451
+v 31774
+v 30768
+v 35119
+v 26432
+v 32796
+v 31880
+v 31305
+v 26444
+v 35265
+v 23754
+v 29106
+v 28259
+v 34725
+v 30361
+v 26829
+v 30748
+v 25237
+v 28949
+v 27978
+v 28199
+v 26588
+v 27511
+v 29625
+v 32319
+v 35049
+v 31375
+v 30414
+v 26278
+v 26762
+v 26085
+v 28971
+v 35156
+v 25723
+v 26084
+v 27334
+v 34212
+v 25565
+v 23604
+v 34789
+v 29113
+v 35058
+v 30122
+v 29179
+v 31421
+v 26623
+v 29368
+v 29265
+v 35490
+v 26545
+v 29617
+v 34722
+v 34916
+v 29685
+v 27156
+v 31011
+v 29460
+v 33537
+v 34635
+v 27183
+v 26302
+v 35353
+v 34333
+v 20382
+v 24871
+v 28768
+v 31370
+v 34401
+v 28314
+v 26205
+v 30849
+v 31785
+v 26618
+v 35165
+v 31149
+v 26486
+v 26744
+v 28582
+v 31369
+v 27138
+v 35914
+v 27320
+v 27670
+v 35724
+v 27133
+v 33499
+v 32419
+v 34080
+v 27632
+v 28119
+v 27685
+v 34071
+v 32792
+v 23762
+v 24946
+v 33758
+v 30514
+v 27236
+v 28162
+v 26301
+v 21110
+v 24223
+v 24811
+v 28214
+v 27499
+v 33975
+v 33104
+v 34485
+v 24337
+v 34995
+v 26498
+v 32886
+v 32852
+v 34211
+v 27646
+v 28257
+v 35232
+v 24444
+v 35379
+v 30308
+v 29699
+v 26454
+v 27078
+v 24233
+v 26652
+v 27773
+v 30629
+v 29965
+v 28700
+v 33014
+v 30051
+v 26976
+v 29744
+v 31751
+v 31796
+v 32680
+v 27061
+v 28781
+v 26347
+v 29216
+v 27118
+v 34006
+v 27062
+v 35519
+v 26819
+v 33078
+v 24460
+v 27180
+v 33622
+v 30712
+v 34149
+v 32272
+v 34331
+v 31946
+v 28436
+v 25209
+v 27347
+v 29235
+v 28708
+v 35518
+v 30152
+v 21855
+v 29499
+v 30574
+v 27128
+v 28845
+v 34811
+v 30852
+v 30369
+v 27580
+v 25789
+v 34433
+v 33694
+v 26768
+v 31012
+v 30324
+v 33032
+v 26005
+v 33289
+v 34041
+v 32260
+v 32376
+v 27815
+v 35075
+v 30596
+v 35309
+v 34946
+v 25623
+v 26119
+v 32331
+v 27439
+v 30917
+v 32833
+v 32274
+v 30111
+v 35000
+v 23963
+v 29972
+v 35297
+v 33926
+v 33540
+v 35589
+v 33330
+v 29826
+v 30620
+v 34554
+v 33554
+v 28584
+v 33108
+v 29827
+v 29491
+v 35700
+v 28994
+v 30126
+v 29888
+v 31657
+v 34280
+v 26846
+v 30030
+v 30046
+v 27689
+v 26662
+v 30681
+v 31326
+v 29276
+v 29833
+v 31105
+v 26192
+v 32959
+v 33796
+v 34016
+v 29411
+v 35921
+v 27077
+v 31527
+v 28939
+v 30839
+v 26142
+v 28155
+v 27205
+v 26467
+v 35338
+v 26864
+v 31008
+v 29100
+v 30263
+v 27600
+v 33299
+v 33995
+v 28612
+v 26612
+v 30916
+v 25157
+v 23331
+v 29990
+v 29476
+v 34066
+v 26459
+v 30173
+v 27388
+v 29869
+v 32673
+v 27986
+v 29408
+v 19572
+v 33886
+v 35755
+v 27024
+v 26776
+v 27995
+v 35088
+v 34156
+v 27471
+v 27140
+v 30018
+v 32944
+v 29649
+v 29840
+v 27542
+v 34022
+v 30926
+v 33375
+v 31626
+v 22260
+v 33559
+v 31026
+v 26500
+v 31606
+v 28294
+v 27414
+v 25763
+v 30392
+v 34637
+v 28993
+v 27108
+v 25494
+v 24852
+v 33749
+v 23546
+v 27433
+v 31091
+v 26888
+v 31159
+v 30987
+v 31750
+v 26638
+v 28247
+v 20872
+v 26539
+v 35722
+v 29129
+v 32707
+v 34363
+v 31465
+v 35685
+v 33515
+v 35657
+v 29887
+v 23857
+v 30130
+v 30679
+v 34001
+v 27530
+v 34668
+v 22907
+v 31717
+v 35377
+v 32534
+v 26998
+v 25409
+v 27730
+v 21380
+v 31063
+v 33652
+v 26002
+v 33121
+v 28276
+v 27346
+v 30163
+v 33071
+v 29978
+v 35133
+v 33447
+v 24302
+v 32730
+v 33169
+v 30847
+v 33433
+v 33861
+v 29987
+v 23253
+v 34259
+v 29166
+v 31191
+v 27465
+v 34314
+v 27285
+v 23959
+v 26226
+v 32779
+v 28961
+v 26826
+v 30251
+v 32744
+v 26422
+v 26175
+v 27817
+v 27566
+v 29605
+v 29311
+v 22867
+v 25634
+v 29378
+v 33437
+v 31320
+v 30601
+v 27179
+v 26355
+v 30585
+v 33908
+v 26274
+v 31276
+v 29481
+v 28296
+v 28500
+v 27968
+v 26605
+v 27054
+v 34640
+v 21927
+v 32542
+v 35068
+v 30670
+v 27230
+v 27072
+v 29187
+v 30489
+v 35664
+v 27460
+v 27609
+v 32099
+v 27800
+v 30237
+v 27880
+v 28795
+v 29806
+v 29194
+v 34450
+v 34015
+v 32658
+v 34362
+v 30688
+v 31639
+v 30715
+v 30943
+v 27582
+v 33372
+v 26193
+v 26297
+v 31559
+v 26989
+v 31652
+v 34591
+v 30214
+v 29641
+v 33771
+v 30066
+v 32517
+v 28630
+v 31130
+v 30269
+v 28865
+v 33395
+v 31363
+v 29789
+v 34619
+v 34095
+v 30556
+v 27208
+v 29511
+v 34239
+v 28765
+v 28544
+v 28506
+v 34936
+v 33747
+v 19779
+v 26231
+v 35610
+v 27854
+v 33707
+v 26162
+v 27373
+v 31274
+v 27611
+v 33814
+v 34107
+v 30646
+v 27506
+v 29993
+v 31114
+v 27470
+v 34636
+v 31065
+v 30778
+v 27591
+v 33812
+v 24715
+v 25519
+v 31616
+v 29011
+v 27425
+v 25419
+v 28950
+v 28499
+v 28557
+v 34139
+v 34798
+v 33380
+v 27244
+v 27089
+v 31498
+v 34988
+v 31660
+v 27592
+v 29451
+v 31560
+v 34472
+v 31007
+v 29690
+v 26948
+v 33969
+v 33020
+v 27057
+v 26927
+v 27382
+v 26654
+v 30968
+v 29002
+v 23958
+v 27309
+v 33027
+v 34116
+v 27485
+v 33977
+v 27643
+v 28380
+v 33643
+v 28222
+v 27212
+v 28754
+v 26810
+v 35395
+v 30932
+v 26602
+v 29545
+v 32200
+v 34628
+v 25665
+v 33847
+v 30032
+v 30370
+v 29467
+v 32554
+v 25485
+v 28516
+v 29620
+v 27569
+v 30894
+v 29234
+v 31792
+v 28567
+v 35087
+v 33965
+v 20490
+v 27390
+v 35174
+v 31176
+v 31469
+v 30608
+v 25397
+v 30082
+v 25109
+v 27141
+v 29105
+v 31090
+v 26805
+v 27621
+v 23401
+v 31674
+v 33978
+v 31998
+v 27001
+v 27551
+v 26315
+v 29626
+v 28422
+v 27472
+v 25820
+v 33262
+v 31955
+v 27237
+v 27468
+v 30245
+v 23030
+v 26806
+v 33310
+v 34647
+v 28371
+v 27706
+v 33521
+v 28519
+v 28242
+v 28440
+v 31509
+v 19560
+v 29713
+v 34771
+v 24883
+v 25582
+v 27949
+v 25249
+v 27740
+v 31913
+v 33159
+v 33074
+v 28126
+v 19703
+v 32296
+v 28217
+v 26401
+v 28432
+v 27012
+v 28698
+v 26616
+v 35399
+v 33469
+v 27143
+v 32034
+v 26269
+v 28632
+v 28589
+v 32304
+v 28029
+v 32290
+v 30410
+v 34360
+v 31073
+v 34953
+v 27516
+v 28726
+v 29021
+v 27820
+v 30640
+v 28501
+v 34063
+v 31879
+v 26502
+v 34777
+v 35166
+v 32843
+v 25659
+v 27444
+v 34377
+v 33619
+v 35383
+v 35791
+v 34320
+v 31521
+v 33181
+v 27050
+v 33274
+v 22751
+v 27358
+v 29982
+v 26482
+v 33030
+v 35611
+v 34300
+v 30475
+v 31991
+v 29532
+v 30493
+v 35907
+v 28428
+v 33323
+v 35418
+v 34370
+v 34405
+v 31217
+v 34656
+v 30354
+v 29648
+v 34459
+v 31016
+v 34529
+v 27457
+v 32397
+v 28908
+v 28077
+v 30955
+v 34689
+v 27739
+v 33580
+v 35251
+v 30957
+v 29074
+v 26489
+v 27989
+v 26713
+v 31261
+v 33988
+v 28976
+v 31378
+v 24821
+v 27312
+v 34159
+v 24342
+v 31786
+v 32593
+v 31272
+v 27400
+v 35679
+v 27323
+v 31773
+v 26356
+v 30435
+v 26963
+v 34206
+v 25238
+v 31625
+v 33514
+v 30704
+v 24690
+v 28302
+v 34352
+v 28743
+v 33048
+v 34317
+v 33638
+v 26630
+v 30985
+v 32700
+v 29638
+v 29271
+v 30853
+v 32846
+v 29040
+v 27982
+v 28448
+v 32753
+v 27398
+v 32696
+v 32979
+v 31848
+v 28219
+v 28496
+v 31031
+v 30844
+v 29247
+v 33028
+v 28849
+v 31168
+v 29356
+v 33929
+v 27597
+v 26812
+v 33776
+v 32491
+v 32586
+v 29721
+v 30860
+v 35382
+v 26604
+v 25703
+v 35065
+v 34060
+v 29533
+v 34716
+v 28802
+v 32670
+v 29846
+v 26648
+v 31697
+v 30904
+v 34808
+v 33909
+v 35556
+v 31519
+v 28444
+v 27293
+v 26004
+v 28148
+v 31192
+v 34295
+v 33737
+v 29072
+v 31817
+v 27749
+v 26900
+v 25688
+v 26463
+v 31310
+v 34482
+v 31941
+v 30615
+v 27727
+v 30426
+v 31729
+v 30505
+v 25137
+v 34359
+v 31342
+v 35349
+v 27527
+v 32172
+v 28707
+v 28645
+v 30113
+v 34766
+v 27867
+v 32477
+v 26473
+v 32275
+v 27629
+v 29269
+v 27252
+v 35181
+v 33593
+v 33081
+v 33500
+v 31362
+v 35660
+v 28477
+v 28825
+v 27428
+v 26083
+v 30394
+v 27745
+v 31940
+v 31180
+v 31028
+v 29576
+v 29567
+v 25385
+v 26930
+v 33586
+v 35646
+v 29067
+v 27056
+v 29181
+v 29192
+v 30893
+v 28193
+v 34565
+v 33215
+v 27038
+v 34313
+v 32206
+v 34009
+v 28330
+v 30944
+v 35261
+v 29061
+v 32594
+v 33808
+v 35329
+v 28977
+v 27197
+v 28098
+v 29354
+v 31524
+v 34654
+v 31306
+v 27852
+v 29637
+v 32563
+v 30411
+v 26492
+v 32522
+v 33110
+v 27452
+v 34457
+v 25173
+v 33623
+v 26647
+v 34899
+v 33421
+v 26562
+v 26468
+v 33172
+v 33132
+v 35352
+v 31583
+v 30387
+v 28547
+v 28752
+v 32668
+v 30208
+v 27747
+v 31379
+v 35781
+v 25435
+v 30417
+v 30963
+v 27620
+v 28676
+v 26914
+v 27349
+v 30672
+v 24728
+v 28989
+v 26705
+v 28593
+v 29894
+v 26677
+v 31131
+v 27338
+v 30785
+v 34905
+v 35026
+v 29769
+v 35031
+v 30735
+v 35483
+v 34121
+v 31124
+v 30877
+v 34419
+v 28927
+v 34069
+v 26684
+v 27337
+v 28068
+v 24508
+v 32435
+v 27644
+v 34753
+v 35318
+v 25997
+v 32295
+v 28702
+v 28335
+v 27699
+v 30871
+v 27630
+v 26651
+v 34920
+v 26676
+v 33715
+v 28349
+v 28047
+v 34315
+v 27806
+v 28421
+v 32268
+v 26152
+v 29039
+v 28245
+v 30494
+v 30119
+v 35209
+v 33676
+v 27483
+v 25475
+v 26613
+v 29849
+v 29985
+v 35938
+v 28216
+v 32459
+v 24855
+v 28209
+v 29001
+v 30606
+v 28316
+v 34338
+v 28844
+v 28039
+v 29424
+v 28083
+v 34721
+v 35855
+v 30809
+v 27805
+v 34969
+v 34053
+v 29097
+v 25320
+v 33879
+v 35140
+v 25781
+v 27757
+v 28553
+v 30473
+v 27665
+v 29422
+v 35356
+v 35811
+v 35073
+v 32965
+v 32335
+v 33119
+v 32224
+v 29207
+v 29018
+v 32190
+v 28790
+v 29944
+v 30635
+v 33675
+v 24480
+v 24412
+v 32677
+v 25621
+v 27923
+v 33959
+v 30224
+v 27294
+v 29950
+v 33775
+v 34007
+v 27066
+v 27731
+v 26967
+v 28398
+v 31635
+v 35226
+v 27522
+v 34003
+v 26324
+v 33205
+v 29668
+v 31064
+v 27364
+v 29425
+v 30055
+v 28223
+v 27091
+v 31237
+v 32817
+v 26731
+v 28012
+v 28734
+v 27891
+v 32337
+v 28061
+v 34876
+v 24468
+v 33555
+v 25773
+v 34033
+v 28932
+v 27233
+v 35275
+v 29983
+v 31109
+v 27790
+v 30136
+v 28138
+v 27714
+v 33629
+v 27715
+v 27856
+v 31813
+v 29853
+v 35178
+v 35510
+v 34646
+v 30159
+v 27732
+v 31209
+v 28332
+v 26786
+v 31439
+v 27883
+v 33826
+v 24668
+v 35871
+v 28846
+v 34376
+v 31314
+v 32279
+v 27813
+v 31790
+v 35945
+v 30217
+v 27537
+v 29495
+v 29281
+v 30887
+v 30689
+v 34302
+v 27952
+v 27736
+v 34129
+v 29510
+v 30945
+v 34970
+v 29262
+v 26782
+v 35433
+v 35072
+v 26000
+v 29970
+v 35613
+v 27165
+v 35187
+v 30517
+v 33313
+v 27112
+v 32339
+v 34111
+v 31920
+v 30042
+v 27182
+v 27517
+v 29170
+v 32692
+v 28646
+v 28086
+v 31397
+v 33016
+v 32526
+v 28549
+v 29549
+v 28051
+v 25590
+v 34915
+v 29339
+v 32997
+v 29865
+v 30094
+v 32992
+v 30755
+v 25595
+v 32227
+v 32146
+v 27495
+v 26748
+v 33405
+v 32962
+v 29866
+v 30745
+v 25760
+v 32804
+v 35525
+v 27084
+v 32967
+v 29527
+v 29979
+v 27753
+v 34980
+v 33918
+v 28170
+v 24739
+v 32116
+v 27843
+v 29419
+v 28188
+v 32874
+v 26396
+v 27192
+v 31033
+v 31552
+v 33557
+v 28490
+v 33363
+v 28265
+v 27547
+v 32457
+v 32305
+v 30793
+v 34685
+v 28263
+v 35875
+v 35467
+v 28598
+v 27819
+v 25356
+v 35414
+v 29222
+v 27497
+v 32374
+v 34091
+v 28197
+v 27835
+v 26112
+v 34231
+v 27548
+v 34084
+v 34585
+v 35076
+v 29450
+v 27543
+v 33535
+v 32423
+v 30624
+v 33102
+v 34236
+v 31260
+v 33126
+v 30357
+v 29700
+v 25223
+v 27105
+v 30760
+v 27304
+v 30431
+v 35118
+v 30007
+v 27588
+v 32158
+v 27869
+v 28942
+v 29199
+v 34011
+v 31264
+v 27229
+v 31831
+v 31890
+v 32129
+v 28275
+v 33006
+v 35912
+v 28772
+v 31184
+v 34291
+v 34850
+v 33288
+v 24945
+v 32760
+v 27738
+v 30884
+v 30970
+v 29300
+v 34555
+v 32591
+v 29050
+v 27498
+v 26938
+v 30767
+v 26249
+v 30038
+v 27556
+v 31455
+v 24969
+v 31075
+v 28890
+v 32071
+v 30741
+v 27901
+v 27931
+v 31815
+v 27415
+v 29703
+v 28937
+v 30482
+v 34971
+v 31088
+v 26629
+v 29976
+v 26320
+v 28117
+v 34404
+v 26750
+v 34683
+v 34311
+v 28535
+v 32393
+v 28941
+v 28462
+v 33493
+v 27455
+v 35499
+v 29805
+v 30906
+v 28739
+v 30927
+v 31137
+v 28270
+v 29795
+v 33183
+v 27970
+v 33229
+v 35392
+v 33620
+v 30589
+v 28284
+v 28492
+v 32789
+v 28736
+v 27509
+v 27892
+v 27598
+v 28576
+v 28292
+v 28839
+v 28420
+v 34402
+v 30400
+v 34456
+v 34190
+v 26906
+v 31711
+v 28236
+v 30258
+v 34657
+v 32107
+v 34632
+v 30310
+v 31269
+v 34775
+v 29640
+v 27298
+v 33985
+v 35626
+v 27686
+v 25319
+v 32652
+v 26709
+v 35727
+v 31432
+v 32257
+v 30856
+v 31196
+v 30548
+v 30093
+v 26423
+v 33491
+v 29881
+v 27683
+v 29352
+v 31079
+v 29671
+v 29508
+v 34479
+v 31348
+v 34671
+v 26690
+v 33648
+v 35618
+v 27442
+v 30841
+v 28373
+v 29734
+v 30717
+v 29326
+v 33465
+v 35683
+v 27604
+v 27756
+v 27710
+v 33539
+v 30296
+v 29550
+v 31953
+v 34316
+v 31136
+v 25299
+v 35771
+v 31398
+v 35274
+v 34996
+v 29895
+v 28146
+v 34963
+v 34522
+v 31551
+v 28341
+v 30522
+v 30015
+v 35521
+v 35423
+v 35555
+v 29681
+v 32431
+v 30883
+v 26417
+v 27110
+v 34746
+v 33958
+v 26696
+v 27640
+v 30832
+v 33797
+v 26703
+v 34819
+v 28168
+v 28881
+v 28034
+v 29639
+v 33427
+v 33246
+v 32362
+v 28050
+v 30230
+v 34372
+v 34903
+v 28746
+v 24828
+v 35656
+v 32581
+v 33746
+v 31022
+v 28178
+v 33735
+v 31795
+v 35231
+v 26966
+v 34299
+v 25308
+v 27810
+v 29759
+v 34350
+v 28899
+v 28116
+v 33397
+v 28868
+v 35903
+v 33807
+v 28550
+v 32606
+v 28055
+v 27202
+v 30642
+v 33592
+v 26714
+v 31986
+v 28005
+v 26666
+v 29857
+v 27565
+v 30397
+v 34103
+v 31056
+v 32747
+v 30125
+v 27510
+v 33399
+v 30861
+v 30941
+v 34384
+v 30708
+v 35468
+v 32472
+v 34286
+v 28623
+v 27787
+v 27934
+v 26550
+v 35059
+v 28555
+v 27920
+v 30599
+v 30074
+v 35099
+v 30934
+v 32958
+v 28918
+v 34820
+v 28709
+v 26310
+v 31994
+v 27638
+v 34114
+v 29076
+v 32824
+v 27663
+v 35222
+v 28920
+v 27310
+v 31015
+v 30531
+v 28008
+v 35260
+v 29054
+v 30014
+v 25362
+v 35085
+v 26759
+v 30325
+v 28665
+v 26650
+v 33910
+v 30085
+v 30471
+v 33389
+v 34138
+v 29746
+v 27725
+v 27477
+v 30965
+v 32927
+v 35298
+v 30739
+v 35511
+v 35456
+v 32338
+v 28718
+v 30144
+v 28476
+v 29379
+v 27792
+v 30738
+v 34904
+v 31977
+v 31372
+v 29754
+v 28857
+v 31054
+v 32772
+v 29322
+v 29934
+v 27681
+v 29615
+v 35240
+v 33906
+v 34508
+v 28471
+v 35863
+v 29034
+v 35032
+v 27822
+v 28082
+v 35547
+v 29406
+v 35214
+v 32128
+v 28900
+v 30437
+v 26874
+v 26838
+v 33945
+v 34836
+v 28468
+v 35114
+v 29570
+v 30213
+v 27948
+v 35520
+v 35580
+v 27219
+v 30536
+v 34257
+v 31024
+v 31096
+v 25532
+v 28757
+v 33872
+v 26945
+v 30921
+v 26232
+v 29633
+v 27284
+v 27326
+v 35839
+v 32348
+v 35913
+v 35453
+v 28048
+v 30118
+v 34823
+v 32575
+v 33564
+v 34303
+v 35367
+v 30571
+v 33892
+v 35327
+v 29661
+v 27120
+v 30976
+v 29494
+v 28250
+v 30535
+v 29019
+v 35268
+v 32250
+v 26499
+v 28121
+v 28663
+v 30004
+v 34464
+v 28902
+v 34993
+v 28345
+v 27649
+v 31025
+v 33044
+v 27944
+v 25788
+v 28619
+v 34745
+v 30989
+v 29566
+v 29471
+v 35342
+v 28647
+v 30602
+v 34144
+v 30573
+v 31107
+v 26603
+v 27176
+v 26700
+v 25664
+v 34684
+v 33726
+v 26710
+v 29502
+v 28788
+v 35507
+v 35668
+v 34247
+v 34578
+v 25463
+v 25800
+v 33037
+v 28822
+v 32272
+v 28437
+v 33067
+v 30659
+v 34556
+v 27418
+v 29484
+v 32580
+v 29646
+v 30333
+v 29454
+v 27555
+v 35512
+v 29744
+v 28907
+v 26147
+v 29771
+v 34825
+v 34387
+v 30503
+v 34491
+v 27385
+v 30103
+v 27916
+v 26994
+v 29159
+v 27287
+v 35884
+v 35478
+v 28322
+v 27314
+v 27406
+v 28129
+v 28480
+v 29370
+v 30092
+v 27593
+v 31376
+v 28766
+v 29020
+v 27074
+v 32781
+v 32409
+v 30532
+v 33712
+v 35634
+v 29350
+v 25484
+v 26365
+v 28960
+v 30706
+v 28004
+v 27261
+v 28966
+v 31077
+v 31543
+v 31147
+v 25605
+v 32748
+v 35402
+v 31071
+v 30558
+v 33201
+v 29452
+v 31356
+v 27051
+v 28365
+v 30133
+v 30385
+v 30758
+v 30776
+v 29999
+v 26526
+v 31506
+v 33478
+v 27318
+v 26368
+v 27693
+v 35539
+v 35431
+v 32389
+v 31866
+v 31601
+v 28283
+v 28828
+v 26190
+v 28541
+v 28804
+v 27680
+v 27728
+v 25811
+v 30266
+v 35865
+v 29286
+v 32862
+v 28494
+v 31873
+v 29785
+v 29432
+v 28667
+v 27534
+v 33937
+v 29627
+v 33736
+v 25521
+v 28497
+v 34878
+v 29219
+v 27307
+v 25335
+v 25998
+v 34050
+v 29037
+v 32427
+v 33716
+v 31278
+v 34470
+v 26239
+v 28595
+v 28447
+v 33168
+v 35756
+v 27889
+v 31139
+v 31104
+v 31667
+v 29915
+v 28393
+v 31605
+v 29676
+v 34912
+v 28167
+v 31694
+v 30609
+v 30658
+v 29189
+v 33377
+v 33672
+v 33919
+v 33531
+v 27469
+v 28033
+v 26267
+v 26496
+v 28397
+v 26587
+v 30733
+v 30582
+v 27705
+v 29140
+v 26013
+v 29724
+v 30378
+v 32571
+v 29294
+v 34577
+v 33510
+v 27376
+v 28565
+v 28455
+v 31092
+v 33553
+v 29462
+v 28913
+v 30982
+v 30556
+v 35607
+v 35877
+v 25453
+v 32565
+v 31628
+v 29557
+v 35387
+v 31138
+v 30327
+v 32029
+v 30718
+v 30958
+v 32869
+v 33962
+v 29902
+v 33692
+v 32975
+v 28230
+v 33745
+v 33021
+v 32018
+v 34730
+v 27514
+v 34199
+v 30194
+v 31003
+v 28344
+v 31860
+v 32566
+v 30952
+v 30326
+v 35639
+v 35345
+v 25027
+v 26307
+v 31974
+v 31284
+v 30265
+v 30994
+v 25677
+v 29212
+v 33811
+v 30984
+v 27371
+v 34774
+v 34244
+v 32809
+v 27911
+v 35243
+v 31858
+v 30993
+v 34329
+v 26484
+v 30274
+v 29169
+v 32991
+v 28503
+v 26411
+v 25827
+v 30132
+v 28419
+v 29830
+v 31887
+v 29821
+v 34310
+v 28513
+v 33533
+v 34756
+v 25941
+v 28552
+v 35001
+v 27490
+v 34442
+v 27417
+v 30827
+v 27850
+v 26020
+v 33378
+v 28190
+v 26530
+v 26937
+v 31048
+v 35719
+v 32062
+v 31577
+v 32474
+v 29726
+v 34177
+v 35245
+v 27081
+v 28892
+v 26739
+v 33624
+v 33333
+v 27763
+v 29328
+v 30807
+v 34343
+v 28445
+v 29526
+v 27030
+v 26445
+v 33142
+v 28352
+v 27906
+v 35439
+v 31457
+v 33987
+v 29991
+v 31429
+v 30447
+v 30377
+v 28370
+v 34018
+v 28046
+v 33160
+v 29522
+v 30940
+v 25327
+v 28614
+v 31019
+v 28136
+v 31014
+v 32717
+v 27446
+v 26675
+v 32183
+v 33480
+v 30869
+v 27998
+v 30388
+v 32821
+v 30881
+v 30142
+v 35457
+v 27037
+v 29575
+v 34973
+v 32767
+v 31391
+v 28057
+v 32455
+v 25241
+v 26575
+v 27265
+v 28637
+v 31877
+v 26568
+v 33412
+v 32587
+v 27039
+v 30662
+v 27859
+v 32662
+v 28652
+v 32135
+v 30690
+v 33064
+v 35690
+v 35710
+v 26585
+v 28463
+v 29684
+v 35454
+v 30288
+v 35643
+v 31884
+v 29203
+v 31423
+v 27235
+v 35832
+v 34382
+v 29384
+v 25617
+v 29600
+v 33045
+v 29412
+v 28527
+v 30613
+v 29497
+v 26659
+v 29685
+v 28227
+v 30796
+v 33087
+v 25430
+v 31938
+v 35640
+v 29284
+v 27549
+v 25899
+v 35493
+v 26953
+v 33778
+v 28569
+v 28563
+v 30933
+v 30025
+v 33111
+v 27863
+v 33219
+v 27109
+v 29595
+v 29051
+v 28666
+v 31983
+v 35576
+v 35596
+v 34939
+v 31201
+v 31640
+v 29920
+v 30301
+v 32765
+v 32795
+v 32270
+v 34133
+v 28320
+v 26692
+v 33855
+v 33159
+v 25897
+v 28213
+v 34979
+v 31495
+v 35089
+v 31103
+v 35363
+v 27157
+v 34919
+v 31839
+v 26687
+v 31062
+v 30492
+v 34099
+v 31959
+v 29539
+v 28578
+v 32169
+v 35312
+v 32083
+v 32579
+v 33186
+v 34687
+v 32780
+v 31370
+v 31413
+v 33953
+v 29524
+v 28882
+v 28363
+v 33617
+v 28507
+v 30702
+v 33951
+v 25321
+v 35789
+v 35808
+v 32167
+v 30112
+v 35790
+v 33800
+v 29561
+v 29786
+v 35424
+v 34547
+v 31057
+v 32812
+v 27752
+v 30747
+v 29531
+v 27328
+v 28806
+v 29082
+v 35598
+v 26305
+v 35642
+v 34309
+v 32865
+v 32721
+v 31387
+v 35703
+v 26818
+v 25825
+v 34622
+v 35479
+v 32766
+v 35738
+v 35591
+v 35655
+v 26403
+v 33646
+v 28864
+v 34749
+v 35462
+v 35652
+v 35754
+v 27006
+v 27435
+v 29164
+v 26791
+v 34512
+v 27988
+v 29210
+v 27633
+v 32035
+v 30145
+v 27389
+v 29834
+v 30898
+v 34951
+v 26836
+v 33417
+v 28995
+v 29344
+v 32712
+v 30407
+v 27383
+v 31637
+v 28916
+v 35306
+v 28521
+v 27560
+v 30939
+v 26950
+v 31053
+v 31668
+v 29279
+v 31644
+v 28903
+v 30701
+v 25531
+v 28644
+v 27256
+v 28611
+v 33690
+v 33522
+v 28009
+v 28001
+v 30806
+v 28774
+v 33567
+v 29030
+v 31487
+v 34076
+v 29844
+v 28670
+v 30050
+v 31074
+v 27648
+v 34012
+v 32549
+v 32253
+v 28997
+v 26103
+v 27461
+v 31895
+v 33429
+v 31924
+v 29680
+v 33359
+v 31830
+v 28697
+v 31089
+v 33332
+v 32864
+v 32359
+v 27544
+v 26580
+v 35630
+v 35534
+v 31271
+v 30099
+v 27801
+v 29893
+v 27479
+v 35792
+v 34692
+v 29552
+v 30157
+v 27783
+v 30979
+v 25696
+v 31569
+v 34698
+v 32182
+v 30110
+v 26755
+v 33825
+v 30289
+v 28118
+v 31691
+v 32068
+v 33502
+v 28688
+v 30762
+v 26621
+v 31082
+v 31673
+v 32592
+v 33570
+v 26915
+v 34597
+v 33568
+v 30663
+v 33362
+v 30204
+v 30353
+v 34357
+v 28453
+v 29634
+v 33503
+v 28603
+v 33640
+v 34349
+v 33883
+v 25967
+v 26726
+v 29574
+v 33691
+v 27204
+v 32685
+v 28317
+v 26683
+v 32672
+v 33867
+v 33550
+v 28639
+v 29079
+v 31485
+v 30930
+v 32520
+v 25282
+v 33616
+v 32840
+v 26660
+v 33460
+v 35561
+v 25445
+v 32481
+v 28599
+v 33739
+v 32703
+v 29921
+v 34070
+v 34137
+v 32647
+v 33999
+v 34472
+v 30699
+v 30565
+v 33806
+v 33536
+v 32762
+v 33551
+v 33415
+v 25301
+v 33571
+v 33448
+v 25289
+v 31179
+v 34605
+v 34394
+v 30319
+v 28972
+v 31936
+v 33572
+v 33670
+v 26158
+v 27496
+v 30088
+v 30443
+v 29556
+v 33485
+v 27436
+v 29249
+v 33541
+v 27679
+v 28438
+v 28592
+v 25222
+v 30158
+v 28103
+v 31491
+v 35795
+v 35194
+v 34271
+v 31051
+v 33636
+v 30374
+v 31343
+v 27405
+v 29740
+v 35147
+v 28681
+v 32776
+v 29428
+v 33189
+v 26581
+v 30124
+v 31651
+v 29101
+v 34494
+v 32660
+v 35062
+v 31698
+v 27782
+v 25706
+v 32577
+v 27917
+v 29716
+v 27907
+v 30235
+v 29117
+v 30101
+v 33641
+v 27453
+v 30320
+v 31765
+v 28038
+v 28290
+v 28479
+v 33321
+v 33385
+v 34949
+v 33467
+v 30477
+v 26607
+v 33504
+v 34380
+v 34520
+v 30842
+v 31155
+v 28323
+v 33459
+v 31298
+v 33240
+v 27730
+v 32687
+v 31066
+v 32162
+v 27557
+v 32310
+v 32739
+v 32683
+v 29499
+v 31896
+v 33200
+v 33178
+v 34416
+v 32618
+v 32684
+v 31188
+v 35753
+v 29799
+v 30406
+v 30508
+v 31246
+v 29715
+v 35740
+v 35827
+v 28803
+v 27622
+v 30605
+v 33693
+v 27260
+v 33851
+v 35583
+v 32464
+v 35544
+v 25247
+v 26661
+v 33286
+v 28207
+v 27451
+v 28269
+v 29788
+v 26793
+v 31182
+v 34005
+v 27877
+v 32649
+v 28872
+v 33904
+v 27651
+v 31837
+v 27459
+v 35809
+v 28731
+v 34763
+v 33810
+v 29173
+v 27445
+v 34760
+v 29490
+v 28545
+v 29152
+v 33523
+v 33803
+v 26202
+v 33859
+v 26110
+v 29418
+v 32648
+v 27779
+v 31573
+v 33534
+v 30138
+v 30102
+v 28650
+v 29765
+v 28211
+v 26841
+v 26821
+v 26663
+v 33561
+v 30222
+v 31017
+v 28767
+v 32794
+v 34217
+v 33787
+v 32638
+v 33061
+v 34742
+v 27954
+v 32060
+v 27607
+v 26990
+v 27149
+v 35517
+v 29898
+v 26947
+v 32698
+v 26965
+v 26723
+v 32447
+v 34498
+v 28300
+v 28561
+v 27926
+v 31087
+v 32764
+v 27691
+v 28638
+v 34308
+v 35171
+v 26172
+v 32661
+v 29415
+v 27692
+v 31898
+v 35654
+v 29080
+v 30731
+v 29917
+v 27842
+v 33371
+v 32483
+v 27552
+v 35641
+v 34720
+v 33197
+v 28755
+v 32750
+v 33414
+v 33777
+v 34301
+v 29193
+v 34187
+v 33287
+v 27416
+v 33494
+v 33452
+v 31263
+v 28948
+v 30181
+v 28885
+v 35579
+v 32456
+v 30011
+v 34604
+v 27596
+v 29812
+v 27865
+v 31682
+v 26929
+v 30227
+v 28878
+v 31285
+v 31969
+v 32112
+v 33177
+v 26688
+v 34345
+v 31683
+v 32726
+v 27664
+v 29534
+v 27808
+v 30337
+v 28307
+v 26981
+v 26636
+v 28400
+v 28404
+v 33184
+v 33141
+v 33400
+v 29038
+v 27872
+v 31847
+v 32884
+v 26800
+v 26725
+v 33343
+v 28633
+v 28677
+v 30777
+v 33821
+v 34762
+v 29114
+v 30854
+v 27541
+v 33556
+v 35702
+v 29239
+v 34816
+v 31756
+v 33105
+v 34675
+v 35766
+v 27574
+v 28957
+v 28695
+v 35826
+v 32604
+v 26869
+v 33185
+v 31928
+v 34297
+v 31190
+v 34514
+v 29473
+v 30603
+v 32535
+v 27816
+v 29504
+v 26854
+v 30383
+v 31316
+v 33176
+v 30481
+v 30029
+v 28679
+v 33742
+v 35890
+v 28936
+v 30636
+v 31336
+v 35560
+v 27626
+v 32711
+v 29672
+v 30813
+v 34560
+v 34325
+v 32741
+v 26481
+v 34559
+v 28629
+v 25442
+v 28524
+v 30174
+v 26814
+v 33885
+v 28818
+v 32008
+v 34709
+v 26983
+v 28571
+v 34583
+v 29635
+v 34523
+v 31253
+v 28564
+v 27772
+v 33468
+v 33428
+v 29255
+v 30864
+v 27367
+v 27599
+v 27067
+v 27590
+v 33488
+v 30390
+v 26399
+v 29290
+v 31704
+v 33838
+v 27480
+v 33154
+v 30720
+v 32716
+v 29801
+v 29145
+v 30073
+v 33426
+v 31300
+v 27519
+v 32929
+v 33529
+v 27536
+v 29177
+v 30833
+v 30001
+v 33092
+v 35815
+v 27637
+v 32283
+v 35778
+v 32223
+v 33031
+v 33824
+v 32539
+v 28120
+v 27899
+v 34366
+v 29346
+v 32898
+v 33530
+v 35628
+v 27164
+v 29624
+v 27661
+v 30253
+v 31975
+v 33611
+v 33294
+v 27885
+v 32020
+v 28099
+v 29055
+v 30105
+v 28464
+v 30500
+v 34408
+v 28654
+v 33621
+v 28856
+v 29544
+v 27585
+v 32971
+v 30461
+v 34102
+v 30359
+v 27716
+v 35500
+v 31301
+v 28819
+v 33293
+v 34659
+v 33230
+v 27627
+v 35689
+v 29223
+v 30907
+v 28999
+v 30724
+v 31857
+v 33479
+v 29955
+v 34388
+v 28783
+v 35524
+v 32763
+v 26366
+v 32441
+v 29867
+v 35622
+v 26866
+v 30260
+v 27642
+v 31939
+v 32276
+v 29871
+v 26958
+v 31828
+v 33684
+v 34422
+v 31693
+v 27576
+v 32761
+v 28874
+v 32350
+v 28060
+v 33719
+v 33731
+v 31518
+v 29049
+v 31374
+v 33285
+v 30272
+v 30703
+v 32402
+v 32313
+v 29316
+v 33549
+v 26570
+v 26674
+v 29523
+v 26979
+v 30618
+v 31906
+v 34690
+v 27563
+v 30108
+v 35810
+v 32014
+v 33899
+v 27831
+v 35830
+v 25809
+v 32719
+v 32686
+v 33813
+v 33406
+v 31304
+v 28131
+v 25802
+v 32974
+v 35300
+v 29884
+v 26754
+v 32637
+v 27554
+v 28737
+v 31961
+v 33356
+v 29709
+v 30859
+v 32050
+v 34670
+v 33072
+v 31545
+v 29444
+v 33218
+v 32528
+v 33453
+v 28827
+v 34497
+v 34748
+v 29885
+v 30902
+v 35112
+v 29852
+v 27172
+v 33767
+v 32519
+v 31327
+v 26779
+v 27755
+v 32404
+v 27352
+v 31732
+v 27583
+v 31801
+v 27650
+v 33076
+v 32151
+v 30462
+v 30202
+v 33711
+v 28346
+v 28189
+v 30149
+v 25627
+v 33856
+v 33481
+v 30626
+v 35796
+v 33300
+v 27791
+v 30547
+v 33001
+v 33156
+v 35227
+v 28740
+v 28596
+v 31038
+v 34238
+v 31810
+v 28800
+v 27082
+v 29925
+v 34068
+v 29031
+v 28093
+v 27512
+v 31140
+v 34097
+v 32650
+v 28693
+v 35197
+v 33080
+v 27759
+v 34538
+v 30234
+v 31236
+v 31700
+v 29233
+v 29855
+v 30024
+v 29104
+v 30918
+v 29062
+v 27423
+v 31002
+v 29819
+v 34443
+v 28620
+v 29540
+v 31620
+v 35477
+v 31324
+v 31523
+v 31205
+v 32825
+v 25317
+v 30889
+v 31072
+v 33208
+v 34586
+v 33704
+v 28832
+v 33098
+v 26579
+v 35293
+v 29447
+v 34960
+v 28254
+v 30765
+v 26870
+v 33084
+v 34593
+v 30867
+v 29010
+v 35343
+v 33631
+v 29197
+v 31167
+v 31611
+v 26669
+v 27746
+v 31004
+v 33361
+v 31148
+v 31883
+v 31598
+v 31338
+v 33933
+v 28355
+v 27411
+v 31599
+v 33462
+v 34406
+v 29483
+v 31181
+v 26770
+v 34614
+v 29858
+v 29157
+v 30115
+v 27631
+v 28904
+v 34073
+v 35080
+v 30379
+v 33701
+v 27601
+v 30736
+v 31993
+v 27654
+v 29057
+v 29588
+v 30588
+v 27726
+v 33508
+v 35139
+v 32547
+v 35225
+v 26293
+v 28761
+v 33320
+v 26563
+v 30746
+v 30616
+v 34991
+v 29109
+v 33472
+v 34353
+v 27161
+v 32294
+v 30897
+v 30161
+v 28782
+v 27767
+v 33355
+v 31641
+v 32548
+v 26785
+v 34870
+v 33043
+v 34385
+v 28583
+v 26792
+v 31449
+v 27660
+v 31927
+v 30810
+v 30228
+v 29351
+v 26120
+v 28678
+v 34488
+v 32615
+v 33804
+v 34105
+v 34088
+v 28145
+v 32417
+v 29045
+v 29488
+v 29090
+v 26934
+v 31143
+v 28044
+v 32405
+v 28829
+v 29075
+v 27933
+v 29930
+v 34158
+v 29009
+v 27962
+v 31123
+v 32352
+v 27080
+v 28430
+v 35060
+v 31119
+v 26891
+v 29400
+v 27940
+v 33449
+v 31036
+v 26134
+v 35168
+v 28443
+v 27159
+v 31251
+v 30580
+v 28925
+v 28935
+v 35234
+v 33725
+v 28854
+v 34196
+v 35241
+v 35223
+v 31840
+v 29259
+v 34423
+v 32458
+v 30515
+v 35820
+v 32536
+v 32242
+v 34600
+v 28144
+v 31871
+v 31009
+v 33913
+v 35279
+v 29423
+v 30091
+v 32877
+v 30000
+v 27964
+v 27951
+v 31546
+v 27562
+v 33901
+v 30727
+v 26817
+v 28274
+v 27619
+v 29394
+v 31174
+v 32983
+v 26933
+v 31561
+v 35836
+v 29711
+v 30950
+v 28616
+v 33816
+v 28336
+v 32785
+v 29536
+v 28969
+v 33483
+v 32625
+v 34519
+v 30240
+v 26887
+v 27225
+v 29363
+v 31714
+v 35184
+v 29264
+v 27799
+v 29825
+v 28722
+v 32507
+v 31566
+v 27909
+v 33835
+v 30627
+v 30711
+v 34784
+v 34487
+v 29782
+v 33444
+v 26577
+v 27743
+v 27698
+v 28452
+v 35935
+v 34724
+v 32723
+v 31555
+v 31289
+v 34087
+v 31160
+v 28102
+v 32258
+v 29224
+v 31505
+v 26596
+v 33225
+v 33239
+v 31633
+v 29518
+v 32782
+v 29016
+v 32830
+v 33597
+v 34793
+v 33213
+v 27634
+v 32499
+v 31800
+v 26203
+v 35210
+v 26849
+v 32961
+v 29485
+v 28525
+v 28076
+v 27675
+v 31006
+v 28692
+v 34754
+v 28760
+v 32363
+v 34621
+v 28030
+v 27840
+v 27227
+v 25689
+v 26679
+v 31902
+v 29555
+v 35357
+v 28208
+v 28070
+v 32952
+v 31295
+v 27655
+v 26702
+v 35213
+v 33936
+v 30518
+v 27886
+v 31696
+v 31802
+v 27996
+v 29679
+v 28112
+v 29102
+v 30931
+v 27331
+v 34397
+v 30700
+v 29652
+v 33844
+v 34216
+v 30034
+v 30581
+v 35758
+v 29848
+v 26241
+v 26956
+v 31216
+v 30415
+v 30564
+v 27943
+v 32219
+v 29702
+v 31630
+v 32993
+v 31968
+v 27777
+v 30434
+v 27793
+v 34347
+v 28395
+v 27025
+v 27997
+v 31224
+v 30420
+v 32306
+v 33973
+v 27652
+v 34842
+v 29163
+v 29338
+v 28224
+v 27774
+v 33474
+v 30179
+v 35303
+v 30488
+v 29850
+v 32557
+v 31230
+v 30728
+v 29003
+v 26751
+v 32225
+v 30543
+v 32302
+v 28704
+v 33292
+v 30193
+v 28656
+v 35834
+v 29246
+v 35823
+v 30155
+v 33143
+v 30393
+v 28842
+v 30164
+v 31944
+v 27570
+v 31447
+v 27922
+v 31999
+v 29909
+v 33511
+v 30221
+v 29963
+v 34122
+v 31291
+v 30338
+v 27589
+v 29165
+v 29052
+v 33496
+v 34119
+v 32176
+v 27688
+v 27553
+v 26765
+v 32508
+v 33070
+v 34983
+v 35195
+v 30003
+v 29598
+v 31428
+v 35183
+v 27521
+v 33689
+v 31214
+v 29530
+v 29155
+v 29435
+v 27306
+v 29558
+v 29517
+v 34681
+v 30448
+v 26435
+v 27269
+v 29195
+v 33010
+v 32659
+v 29459
+v 28808
+v 33335
+v 32013
+v 34515
+v 31165
+v 31067
+v 29267
+v 27694
+v 27189
+v 31060
+v 31325
+v 32098
+v 28392
+v 32903
+v 34713
+v 31727
+v 31000
+v 35599
+v 28784
+v 27947
+v 33275
+v 26919
+v 29126
+v 27636
+v 30851
+v 28987
+v 33270
+v 25513
+v 32710
+v 26591
+v 32299
+v 33830
+v 29317
+v 28147
+v 34328
+v 26991
+v 33952
+v 34169
+v 30784
+v 33939
+v 32676
+v 31055
+v 30913
+v 33454
+v 28655
+v 32985
+v 33077
+v 35355
+v 26787
+v 29935
+v 34923
+v 28869
+v 28348
+v 29673
+v 34175
+v 33052
+v 35296
+v 30028
+v 28860
+v 27701
+v 34729
+v 27678
+v 32177
+v 28964
+v 28880
+v 27295
+v 34750
+v 27826
+v 29356
+v 26678
+v 32437
+v 31156
+v 26969
+v 27818
+v 28367
+v 31116
+v 33041
+v 34890
+v 30705
+v 27022
+v 32240
+v 30279
+v 27092
+v 27973
+v 31279
+v 32589
+v 34351
+v 30799
+v 29388
+v 29128
+v 32432
+v 27023
+v 34821
+v 33949
+v 29645
+v 28758
+v 34026
+v 29185
+v 29244
+v 27828
+v 32868
+v 34200
+v 32545
+v 26247
+v 28716
+v 32968
+v 29514
+v 29085
+v 32082
+v 27713
+v 28815
+v 26972
+v 30016
+v 27198
+v 29046
+v 35331
+v 31909
+v 29251
+v 33008
+v 29446
+v 35100
+v 30281
+v 35280
+v 27977
+v 31923
+v 28764
+v 27825
+v 27784
+v 29426
+v 34417
+v 27249
+v 28855
+v 33360
+v 29382
+v 26311
+v 34424
+v 32077
+v 31907
+v 27910
+v 28833
+v 27868
+v 32590
+v 35720
+v 28943
+v 28777
+v 32174
+v 26835
+v 27135
+v 32037
+v 34218
+v 34540
+v 28311
+v 32069
+v 30439
+v 35838
+v 26405
+v 32906
+v 33732
+v 31905
+v 28229
+v 29823
+v 32982
+v 28175
+v 27900
+v 31396
+v 28062
+v 33477
+v 27887
+v 31963
+v 28383
+v 29118
+v 33391
+v 32395
+v 32614
+v 28883
+v 31032
+v 31957
+v 35198
+v 27684
+v 29359
+v 30249
+v 33862
+v 35276
+v 26865
+v 31811
+v 27096
+v 32470
+v 26362
+v 32855
+v 27602
+v 27146
+v 27871
+v 30339
+v 30278
+v 29560
+v 32556
+v 27829
+v 30458
+v 31097
+v 35584
+v 32442
+v 28672
+v 27841
+v 30638
+v 32311
+v 34693
+v 32743
+v 29643
+v 34042
+v 33922
+v 33170
+v 33150
+v 28337
+v 30947
+v 33634
+v 31121
+v 33442
+v 29449
+v 30087
+v 32367
+v 28154
+v 30645
+v 29941
+v 26257
+v 32774
+v 27823
+v 28538
+v 29804
+v 27610
+v 31281
+v 29590
+v 27980
+v 31388
+v 30037
+v 29764
+v 28295
+v 32955
+v 28124
+v 30491
+v 34127
+v 29501
+v 28504
+v 33655
+v 31340
+v 35835
+v 29761
+v 32500
+v 29791
+v 27703
+v 27378
+v 30754
+v 35807
+v 32462
+v 30264
+v 28729
+v 25943
+v 27329
+v 26441
+v 29794
+v 32005
+v 27807
+v 31255
+v 32347
+v 28108
+v 27673
+v 31624
+v 29611
+v 32444
+v 33420
+v 32806
+v 34986
+v 33241
+v 35097
+v 29068
+v 34072
+v 28879
+v 34268
+v 31538
+v 28838
+v 34631
+v 30830
+v 27147
+v 32040
+v 31960
+v 30560
+v 33894
+v 34049
+v 34609
+v 31532
+v 33164
+v 27009
+v 32919
+v 31771
+v 34145
+v 34645
+v 32401
+v 33950
+v 32211
+v 29041
+v 28796
+v 28085
+v 32042
+v 29135
+v 34507
+v 32301
+v 32012
+v 27754
+v 35852
+v 28963
+v 32383
+v 35208
+v 26883
+v 32582
+v 28990
+v 27234
+v 35797
+v 31875
+v 32856
+v 32738
+v 34651
+v 27895
+v 28801
+v 29773
+v 29088
+v 30850
+v 26670
+v 27635
+v 27567
+v 35252
+v 34109
+v 30684
+v 34541
+v 28735
+v 32583
+v 31522
+v 30398
+v 35272
+v 28750
+v 34249
+v 28588
+v 32537
+v 34787
+v 34031
+v 28251
+v 27191
+v 26946
+v 27395
+v 30693
+v 32247
+v 28067
+v 31662
+v 30463
+v 31956
+v 33149
+v 28978
+v 35066
+v 34010
+v 31256
+v 34209
+v 32838
+v 28020
+v 28366
+v 25952
+v 29614
+v 28980
+v 29237
+v 28636
+v 27878
+v 25762
+v 28631
+v 30334
+v 30962
+v 27723
+v 31539
+v 28911
+v 28895
+v 30660
+v 29897
+v 28780
+v 27432
+v 28984
+v 35420
+v 32244
+v 34948
+v 32028
+v 28172
+v 30687
+v 29500
+v 29331
+v 29119
+v 32086
+v 32387
+v 33667
+v 30816
+v 34480
+v 31321
+v 31835
+v 32230
+v 33135
+v 34229
+v 31775
+v 33249
+v 31488
+v 35163
+v 34707
+v 27168
+v 32145
+v 30356
+v 30888
+v 31122
+v 30617
+v 30140
+v 33688
+v 30836
+v 28510
+v 30084
+v 34568
+v 35262
+v 28361
+v 34977
+v 32439
+v 32006
+v 29405
+v 28889
+v 32263
+v 35888
+v 35167
+v 26879
+v 28785
+v 32355
+v 28000
+v 31537
+v 32234
+v 33525
+v 29232
+v 29337
+v 32533
+v 31373
+v 27561
+v 28974
+v 32119
+v 28725
+v 29751
+v 29201
+v 31632
+v 32231
+v 28876
+v 34407
+v 27957
+v 29847
+v 26831
+v 35923
+v 32175
+v 30285
+v 33272
+v 28218
+v 31843
+v 33311
+v 34513
+v 35150
+v 31916
+v 33466
+v 34807
+v 28459
+v 32041
+v 29403
+v 28863
+v 27687
+v 32054
+v 29470
+v 35289
+v 32718
+v 31766
+v 29936
+v 28165
+v 31702
+v 34795
+v 31931
+v 26999
+v 28339
+v 32888
+v 35148
+v 31962
+v 29988
+v 33342
+v 31212
+v 27882
+v 29096
+v 26975
+v 32201
+v 32149
+v 33961
+v 28762
+v 33473
+v 28546
+v 33710
+v 26109
+v 35885
+v 29123
+v 34173
+v 33681
+v 28532
+v 33542
+v 31047
+v 29227
+v 27454
+v 35046
+v 28922
+v 32085
+v 35024
+v 27925
+v 29660
+v 28840
+v 27971
+v 30895
+v 32195
+v 30332
+v 29012
+v 32314
+v 30545
+v 34230
+v 31767
+v 31235
+v 34648
+v 28016
+v 28742
+v 34705
+v 30782
+v 29089
+v 32695
+v 26796
+v 27848
+v 27214
+v 30172
+v 29200
+v 28600
+v 31582
+v 32160
+v 31245
+v 28381
+v 29579
+v 34298
+v 30653
+v 29705
+v 30215
+v 29829
+v 27242
+v 28406
+v 33538
+v 27276
+v 34838
+v 33815
+v 28272
+v 31609
+v 28389
+v 31728
+v 32642
+v 34824
+v 33223
+v 32081
+v 28687
+v 29172
+v 33446
+v 28003
+v 27778
+v 31929
+v 27975
+v 27979
+v 30433
+v 29254
+v 32022
+v 29512
+v 27960
+v 30837
+v 29402
+v 29295
+v 28069
+v 34569
+v 29994
+v 34652
+v 28805
+v 30860
+v 31102
+v 35574
+v 28063
+v 28182
+v 31164
+v 28013
+v 31275
+v 34834
+v 30914
+v 32321
+v 25751
+v 29077
+v 27624
+v 28947
+v 29665
+v 34505
+v 31334
+v 28834
+v 31734
+v 32912
+v 35008
+v 30017
+v 34955
+v 30454
+v 28386
+v 29932
+v 28952
+v 26433
+v 28486
+v 28896
+v 34324
+v 30675
+v 26420
+v 28799
+v 35549
+v 30779
+v 35030
+v 30743
+v 32154
+v 33697
+v 28025
+v 29241
+v 32221
+v 30643
+v 32165
+v 29542
+v 27676
+v 28533
+v 29873
+v 28797
+v 32601
+v 32518
+v 27721
+v 27340
+v 27765
+v 32428
+v 35288
+v 32424
+v 35134
+v 27939
+v 30584
+v 31719
+v 26833
+v 31377
+v 33998
+v 34958
+v 32597
+v 29387
+v 29142
+v 30872
+v 26384
+v 33881
+v 27890
+v 30441
+v 34131
+v 33413
+v 35896
+v 32465
+v 30294
+v 30789
+v 27361
+v 28149
+v 29178
+v 31642
+v 28965
+v 28608
+v 30107
+v 32485
+v 35201
+v 28905
+v 28604
+v 31581
+v 35631
+v 28273
+v 35273
+v 32754
+v 27145
+v 33157
+v 34495
+v 28064
+v 28866
+v 28469
+v 33792
+v 32560
+v 28891
+v 28401
+v 34440
+v 29124
+v 35866
+v 27927
+v 29548
+v 28212
+v 29266
+v 27288
+v 28256
+v 32293
+v 33134
+v 35404
+v 27991
+v 29183
+v 30744
+v 30226
+v 28867
+v 33012
+v 32949
+v 32059
+v 35535
+v 35881
+v 34176
+v 31218
+v 35155
+v 32895
+v 29474
+v 32173
+v 27524
+v 27020
+v 35123
+v 30824
+v 34806
+v 28628
+v 31133
+v 35578
+v 33354
+v 29336
+v 27573
+v 27812
+v 34735
+v 31794
+v 35053
+v 29312
+v 31972
+v 29563
+v 27124
+v 31576
+v 34205
+v 28590
+v 35264
+v 34355
+v 29748
+v 29226
+v 31307
+v 35137
+v 29546
+v 26850
+v 30064
+v 34602
+v 30006
+v 27796
+v 29475
+v 29283
+v 28921
+v 30879
+v 34410
+v 29456
+v 35136
+v 27834
+v 34096
+v 32390
+v 35216
+v 32403
+v 32248
+v 31647
+v 32621
+v 34418
+v 31841
+v 34598
+v 28215
+v 30244
+v 32936
+v 35127
+v 34130
+v 31471
+v 27697
+v 30764
+v 28511
+v 28642
+v 27262
+v 34981
+v 30002
+v 27866
+v 28710
+v 32080
+v 30575
+v 33097
+v 28036
+v 30742
+v 27671
+v 34759
+v 28203
+v 29427
+v 27059
+v 29772
+v 28618
+v 34928
+v 32372
+v 29221
+v 33056
+v 31818
+v 32157
+v 35131
+v 29078
+v 30773
+v 32406
+v 27194
+v 28938
+v 27722
+v 27711
+v 31629
+v 28237
+v 30442
+v 33902
+v 32066
+v 32198
+v 28789
+v 28372
+v 31050
+v 34733
+v 29190
+v 33727
+v 30740
+v 30972
+v 28669
+v 27851
+v 30429
+v 30843
+v 34110
+v 29538
+v 35017
+v 30485
+v 28529
+v 28917
+v 31466
+v 29175
+v 28243
+v 27018
+v 34339
+v 27704
+v 28472
+v 30604
+v 28130
+v 28744
+v 32284
+v 33635
+v 32433
+v 35597
+v 29160
+v 28988
+v 28278
+v 34460
+v 33923
+v 31454
+v 34702
+v 33876
+v 29822
+v 27029
+v 35573
+v 35824
+v 28045
+v 32118
+v 32588
+v 30592
+v 27427
+v 33532
+v 34104
+v 29248
+v 29198
+v 27929
+v 27441
+v 32139
+v 29404
+v 27760
+v 34064
+v 30971
+v 34255
+v 32644
+v 28653
+v 35007
+v 29918
+v 28053
+v 35248
+v 30552
+v 35135
+v 30246
+v 27131
+v 28301
+v 34886
+v 33942
+v 31992
+v 27332
+v 28135
+v 28239
+v 35277
+v 27267
+v 28308
+v 31183
+v 31288
+v 32426
+v 35230
+v 34801
+v 32956
+v 28164
+v 32216
+v 27969
+v 34336
+v 34062
+v 34232
+v 29213
+v 30607
+v 33573
+v 26802
+v 28153
+v 29365
+v 29529
+v 34880
+v 31747
+v 32823
+v 26832
+v 32342
+v 27788
+v 25837
+v 27220
+v 34837
+v 27761
+v 32540
+v 32430
+v 29916
+v 30382
+v 28399
+v 29443
+v 32317
+v 25933
+v 28081
+v 31352
+v 31715
+v 27873
+v 33242
+v 34032
+v 32900
+v 28708
+v 32120
+v 29260
+v 28457
+v 32185
+v 32364
+v 31385
+v 33450
+v 25866
+v 32186
+v 32460
+v 28152
+v 29274
+v 32394
+v 30186
+v 30612
+v 29364
+v 32327
+v 31313
+v 27137
+v 28689
+v 33434
+v 28531
+v 35665
+v 29584
+v 32095
+v 30184
+v 34974
+v 27413
+v 30231
+v 32217
+v 31043
+v 31865
+v 34516
+v 29543
+v 31134
+v 35508
+v 33458
+v 33053
+v 31503
+v 29390
+v 32414
+v 33845
+v 29015
+v 28467
+v 28042
+v 31868
+v 31675
+v 29374
+v 29318
+v 29095
+v 34367
+v 29604
+v 29027
+v 32288
+v 33324
+v 35828
+v 28973
+v 32079
+v 29975
+v 28955
+v 29313
+v 29329
+v 35086
+v 35254
+v 28933
+v 35010
+v 28054
+v 34956
+v 28558
+v 28991
+v 33882
+v 35659
+v 29810
+v 32532
+v 33709
+v 27443
+v 30268
+v 34810
+v 29291
+v 28940
+v 28240
+v 30395
+v 28258
+v 33497
+v 31499
+v 32411
+v 30774
+v 29230
+v 29872
+v 30106
+v 29592
+v 32380
+v 31649
+v 29696
+v 30577
+v 34921
+v 28566
+v 30248
+v 31826
+v 28814
+v 27898
+v 28551
+v 35257
+v 32344
+v 28643
+v 35770
+v 28483
+v 28163
+v 30422
+v 33337
+v 34441
+v 28056
+v 33626
+v 27277
+v 33436
+v 34566
+v 28968
+v 35746
+v 26996
+v 29899
+v 32757
+v 26635
+v 32636
+v 34545
+v 31995
+v 27959
+v 28481
+v 34527
+v 31967
+v 27186
+v 34067
+v 34911
+v 30938
+v 28035
+v 27528
+v 30509
+v 33963
+v 31604
+v 33455
+v 31229
+v 28194
+v 30123
+v 31784
+v 34561
+v 34736
+v 30317
+v 35538
+v 33373
+v 31328
+v 32170
+v 29217
+v 29044
+v 35188
+v 26614
+v 34334
+v 28791
+v 29158
+v 34990
+v 27930
+v 30766
+v 35774
+v 32422
+v 32365
+v 28078
+v 28495
+v 32567
+v 29073
+v 31614
+v 28343
+v 29144
+v 28763
+v 33654
+v 31244
+v 33409
+v 33026
+v 30375
+v 31541
+v 34898
+v 27897
+v 28221
+v 30865
+v 28886
+v 34393
+v 30622
+v 30561
+v 30534
+v 33191
+v 32058
+v 31533
+v 30040
+v 31070
+v 28554
+v 34833
+v 27440
+v 28110
+v 27758
+v 34113
+v 28539
+v 33099
+v 35069
+v 32882
+v 34272
+v 28488
+v 29658
+v 29341
+v 32025
+v 34115
+v 29800
+v 31872
+v 32847
+v 30399
+v 28568
+v 34954
+v 34517
+v 28090
+v 27965
+v 33708
+v 34296
+v 32897
+v 32368
+v 31299
+v 29727
+v 28173
+v 30273
+v 29943
+v 34942
+v 31419
+v 32734
+v 26319
+v 33221
+v 28888
+v 30831
+v 29792
+v 33772
+v 34814
+v 32788
+v 28756
+v 32446
+v 28749
+v 29469
+v 33325
+v 33073
+v 30081
+v 27046
+v 29288
+v 32030
+v 33161
+v 27166
+v 33088
+v 29720
+v 34186
+v 32292
+v 28787
+v 34998
+v 29631
+v 34330
+v 27223
+v 29007
+v 32137
+v 35250
+v 35124
+v 29738
+v 34571
+v 31864
+v 28186
+v 32452
+v 33943
+v 28288
+v 25902
+v 35464
+v 34857
+v 28826
+v 27064
+v 30386
+v 35021
+v 27114
+v 34486
+v 31836
+v 35745
+v 31824
+v 31425
+v 31799
+v 30185
+v 34799
+v 28409
+v 35696
+v 30480
+v 31989
+v 31919
+v 32103
+v 28522
+v 34378
+v 31863
+v 34438
+v 29778
+v 32861
+v 28870
+v 33303
+v 30418
+v 32138
+v 28402
+v 30909
+v 33163
+v 32634
+v 28675
+v 27501
+v 28482
+v 28852
+v 35779
+v 33720
+v 34873
+v 35292
+v 29148
+v 30005
+v 28624
+v 30380
+v 29013
+v 34703
+v 29938
+v 29176
+v 28176
+v 35354
+v 28177
+v 32171
+v 28823
+v 29272
+v 28407
+v 31653
+v 34132
+v 32187
+v 33145
+v 28375
+v 27904
+v 32948
+v 30371
+v 35554
+v 34796
+v 27174
+v 27623
+v 30579
+v 30121
+v 28299
+v 27846
+v 32999
+v 34715
+v 27803
+v 29381
+v 31716
+v 27487
+v 31535
+v 34726
+v 29961
+v 27546
+v 35644
+v 27581
+v 29870
+v 34307
+v 29134
+v 31232
+v 30270
+v 33932
+v 28133
+v 34526
+v 27672
+v 27874
+v 30424
+v 28391
+v 28414
+v 28967
+v 34964
+v 31394
+v 33705
+v 32913
+v 31769
+v 29150
+v 27503
+v 29803
+v 29191
+v 29115
+v 34612
+v 35501
+v 34871
+v 30150
+v 30544
+v 27049
+v 33545
+v 33993
+v 26872
+v 31603
+v 30499
+v 34957
+v 29818
+v 30901
+v 28853
+v 28115
+v 29429
+v 28369
+v 28354
+v 31497
+v 29664
+v 32736
+v 33827
+v 34712
+v 34641
+v 34616
+v 33266
+v 34058
+v 28759
+v 35162
+v 31189
+v 34741
+v 35094
+v 30366
+v 27571
+v 28996
+v 28109
+v 28382
+v 35817
+v 35590
+v 28024
+v 34270
+v 35777
+v 30199
+v 33489
+v 27876
+v 30450
+v 28328
+v 29621
+v 29493
+v 32585
+v 35632
+v 32264
+v 29256
+v 30750
+v 32421
+v 33198
+v 34304
+v 31069
+v 33661
+v 32612
+v 26649
+v 35532
+v 27751
+v 31302
+v 29136
+v 35152
+v 29677
+v 31793
+v 30311
+v 35488
+v 29273
+v 30755
+v 30826
+v 32425
+v 28271
+v 29069
+v 32609
+v 31154
+v 31068
+v 28018
+v 35401
+v 30367
+v 32937
+v 34225
+v 31319
+v 31612
+v 29340
+v 28848
+v 32505
+v 30070
+v 35239
+v 26951
+v 31534
+v 35238
+v 30878
+v 29564
+v 35173
+v 35336
+v 33642
+v 29947
+v 29760
+v 30247
+v 29036
+v 33587
+v 28786
+v 30495
+v 31200
+v 27918
+v 29608
+v 30519
+v 29613
+v 27677
+v 33353
+v 35867
+v 28087
+v 35463
+v 28183
+v 32931
+v 35545
+v 33284
+v 29973
+v 33367
+v 35762
+v 34289
+v 31444
+v 35429
+v 35151
+v 26155
+v 29304
+v 30341
+v 30903
+v 28280
+v 28310
+v 31111
+v 29659
+v 26899
+v 34649
+v 34204
+v 29209
+v 35425
+v 31845
+v 29268
+v 29151
+v 30821
+v 30472
+v 28441
+v 28835
+v 35497
+v 29143
+v 27274
+v 34818
+v 26761
+v 29731
+v 31623
+v 29325
+v 28473
+v 34932
+v 31292
+v 28875
+v 35319
+v 28901
+v 28427
+v 33368
+v 29238
+v 27238
+v 35750
+v 35459
+v 29091
+v 32391
+v 35120
+v 28807
+v 29431
+v 31634
+v 30212
+v 33914
+v 31654
+v 30900
+v 34399
+v 29623
+v 27102
+v 29180
+v 33463
+v 34386
+v 30924
+v 29093
+v 32802
+v 26974
+v 33396
+v 29292
+v 33054
+v 27360
+v 30387
+v 26813
+v 35542
+v 31874
+v 35813
+v 33674
+v 32798
+v 31270
+v 32096
+v 30533
+v 31330
+v 35067
+v 31438
+v 29206
+v 28359
+v 31078
+v 35761
+v 35606
+v 28776
+v 31266
+v 29580
+v 28946
+v 28396
+v 29509
+v 28685
+v 31770
+v 26844
+v 32544
+v 35003
+v 29024
+v 28831
+v 34976
+v 31146
+v 28238
+v 33657
+v 31350
+v 31099
+v 31128
+v 26518
+v 28315
+v 29752
+v 34848
+v 30330
+v 35484
+v 35278
+v 30787
+v 35005
+v 31115
+v 28640
+v 28010
+v 34926
+v 35486
+v 30421
+v 34758
+v 30090
+v 31459
+v 34431
+v 32358
+v 31171
+v 33033
+v 30838
+v 35451
+v 28191
+v 35325
+v 29047
+v 28127
+v 29877
+v 30169
+v 27324
+v 29014
+v 26924
+v 35714
+v 34319
+v 34918
+v 31081
+v 29242
+v 35444
+v 26801
+v 31247
+v 30033
+v 34933
+v 31934
+v 31259
+v 31671
+v 27832
+v 35782
+v 34052
+v 35567
+v 31207
+v 28466
+v 29839
+v 28727
+v 32259
+v 29141
+v 31170
+v 34237
+v 30946
+v 35182
+v 31358
+v 28360
+v 27148
+v 35446
+v 28659
+v 35504
+v 30031
+v 35726
+v 27474
+v 28858
+v 28424
+v 27719
+v 33187
+v 33761
+v 28374
+v 28065
+v 33281
+v 30634
+v 29583
+v 33416
+v 35322
+v 31958
+v 32010
+v 34695
+v 26050
+v 34197
+v 31435
+v 30241
+v 28794
+v 33388
+v 34851
+v 29948
+v 31390
+v 28730
+v 34863
+v 28982
+v 28649
+v 33527
+v 35020
+v 28260
+v 30929
+v 34860
+v 35121
+v 30811
+v 29854
+v 30177
+v 28286
+v 31869
+v 35546
+v 31157
+v 32194
+v 30891
+v 35304
+v 29005
+v 28052
+v 31204
+v 28820
+v 33528
+v 32954
+v 28446
+v 29355
+v 30455
+v 29551
+v 32801
+v 35764
+v 29458
+v 31453
+v 34610
+v 28821
+v 29891
+v 35330
+v 31550
+v 31286
+v 28770
+v 28072
+v 29472
+v 29505
+v 26057
+v 34965
+v 28423
+v 30419
+v 28627
+v 31621
+v 29787
+v 27945
+v 34348
+v 28142
+v 31680
+v 35585
+v 30207
+v 29214
+v 33875
+v 28184
+v 30127
+v 30083
+v 29516
+v 34278
+v 30465
+v 28333
+v 28816
+v 35568
+v 34493
+v 28836
+v 27520
+v 30291
+v 28751
+v 35009
+v 28534
+v 32655
+v 31984
+v 30885
+v 28122
+v 35164
+v 35711
+v 28241
+v 29596
+v 28139
+v 28338
+v 35801
+v 32330
+v 29904
+v 35103
+v 34004
+v 35531
+v 29875
+v 30716
+v 35445
+v 30299
+v 35430
+v 27424
+v 35582
+v 33301
+v 27412
+v 34326
+v 35383
+v 28728
+v 34723
+v 32639
+v 35438
+v 35752
+v 35117
+v 35575
+v 28450
+v 30175
+v 35041
+v 29438
+v 35334
+v 31591
+v 30966
+v 28079
+v 34172
+v 32675
+v 28951
+v 29228
+v 29666
+v 30233
+v 35126
+v 29250
+v 31406
+v 29367
+v 29835
+v 28508
+v 35802
+v 35681
+v 26717
+v 29298
+v 29410
+v 33256
+v 30060
+v 30828
+v 31987
+v 28690
+v 29407
+v 30295
+v 33915
+v 34883
+v 34252
+v 28741
+v 28597
+v 35495
+v 29060
+v 33090
+v 30996
+v 29196
+v 28930
+v 28714
+v 28579
+v 33989
+v 32976
+v 30988
+v 28691
+v 31223
+v 29433
+v 34930
+v 29215
+v 31153
+v 34897
+v 33245
+v 34198
+v 34020
+v 31113
+v 28923
+v 28021
+v 28894
+v 30318
+v 28817
+v 29335
+v 29287
+v 29208
+v 34888
+v 33392
+v 30936
+v 35608
+v 29957
+v 29537
+v 32640
+v 29008
+v 35604
+v 34086
+v 29747
+v 32651
+v 29305
+v 31838
+v 33659
+v 29838
+v 27228
+v 27837
+v 35481
+v 30097
+v 35095
+v 29133
+v 35362
+v 34947
+v 29154
+v 32870
+v 32436
+v 30182
+v 29496
+v 30313
+v 35569
+v 33349
+v 29958
+v 27667
+v 35730
+v 29594
+v 27903
+v 32181
+v 35360
+v 31035
+v 29992
+v 30769
+v 31446
+v 29369
+v 34162
+v 31239
+v 27748
+v 35581
+v 28384
+v 34478
+v 34972
+v 29601
+v 28319
+v 29695
+v 27381
+v 28331
+v 35056
+v 35709
+v 28489
+v 35733
+v 28605
+v 29000
+v 29880
+v 30749
+v 35831
+v 29859
+v 35013
+v 35006
+v 33148
+v 35115
+v 29572
+v 33600
+v 29868
+v 29741
+v 33925
+v 28975
+v 26336
+v 29430
+v 28088
+v 33756
+v 33259
+v 32188
+v 28285
+v 29843
+v 33785
+v 28426
+v 33393
+v 27712
+v 29682
+v 34830
+v 33948
+v 29907
+v 32001
+v 35294
+v 30892
+v 32291
+v 30364
+v 33338
+v 28769
+v 33369
+v 31553
+v 33576
+v 29321
+v 31921
+v 28897
+v 27963
+v 30992
+v 29042
+v 31297
+v 28580
+v 30451
+v 33100
+v 34246
+v 29890
+v 28461
+v 34016
+v 30315
+v 28325
+v 34934
+v 30969
+v 28192
+v 29420
+v 28813
+v 35818
+v 29708
+v 35039
+v 33618
+v 30572
+v 29257
+v 34603
+v 32100
+v 32628
+v 35725
+v 35244
+v 27239
+v 28658
+v 32709
+v 34999
+v 28460
+v 35887
+v 34987
+v 28773
+v 34994
+v 26735
+v 34791
+v 32663
+v 32646
+v 34090
+v 26064
+v 29397
+v 30423
+v 34861
+v 33419
+v 28358
+v 35932
+v 29146
+v 28015
+v 30840
+v 32622
+v 27290
+v 26910
+v 31382
+v 30790
+v 27645
+v 28096
+v 27771
+v 29028
+v 28304
+v 29861
+v 30290
+v 34093
+v 35427
+v 29289
+v 31152
+v 34356
+v 34448
+v 31861
+v 29243
+v 30486
+v 26737
+v 31461
+v 29553
+v 28253
+v 31144
+v 28811
+v 35749
+v 32416
+v 28812
+v 31416
+v 32596
+v 29927
+v 34961
+v 32153
+v 27976
+v 34751
+v 28123
+v 29168
+v 35037
+v 29698
+v 35051
+v 31309
+v 35048
+v 34941
+v 28745
+v 31755
+v 31882
+v 27152
+v 29978
+v 29486
+v 31177
+v 31317
+v 29487
+v 34776
+v 35143
+v 34188
+v 28514
+v 28684
+v 32811
+v 28928
+v 28493
+v 31567
+v 32213
+v 31450
+v 32315
+v 27430
+v 32300
+v 28353
+v 29784
+v 29071
+v 32778
+v 33569
+v 28924
+v 27702
+v 34962
+v 35829
+v 28893
+v 27473
+v 30590
+v 32450
+v 29585
+v 33971
+v 29758
+v 33501
+v 34829
+v 29743
+v 32237
+v 34500
+v 32920
+v 27775
+v 34425
+v 29392
+v 35106
+v 31127
+v 29048
+v 34943
+v 34277
+v 28107
+v 35667
+v 29507
+v 30021
+v 29725
+v 29793
+v 26962
+v 31851
+v 31162
+v 28512
+v 34779
+v 32939
+v 30069
+v 29056
+v 30293
+v 28536
+v 32233
+v 33601
+v 29139
+v 32613
+v 32728
+v 28210
+v 35111
+v 32909
+v 33091
+v 28478
+v 29956
+v 35636
+v 35084
+v 31268
+v 31925
+v 30490
+v 33812
+v 27353
+v 29108
+v 34242
+v 31678
+v 35550
+v 29828
+v 28125
+v 32755
+v 33903
+v 33832
+v 31867
+v 35405
+v 32674
+v 32796
+v 35557
+v 35153
+v 28771
+v 31778
+v 32887
+v 35452
+v 32984
+v 29353
+v 28104
+v 35386
+v 33336
+v 31141
+v 32998
+v 30674
+v 28134
+v 35648
+v 29421
+v 34663
+v 33976
+v 34740
+v 29568
+v 30280
+v 27142
+v 35509
+v 32265
+v 30857
+v 29345
+v 31970
+v 29349
+v 31145
+v 30853
+v 35394
+v 27010
+v 31098
+v 31250
+v 28850
+v 34563
+v 29809
+v 29780
+v 29413
+v 26719
+v 26708
+v 28066
+v 33318
+v 28958
+v 28934
+v 35775
+v 35588
+v 35161
+v 35663
+v 32413
+v 28277
+v 31589
+v 35375
+v 30065
+v 30797
+v 31135
+v 27356
+v 32469
+v 35662
+v 33328
+v 33516
+v 30668
+v 30937
+v 35704
+v 27422
+v 29463
+v 35901
+v 35396
+v 29824
+v 34884
+v 29258
+v 29098
+v 33440
+v 35526
+v 28249
+v 35286
+v 31706
+v 32654
+v 29923
+v 28043
+v 30923
+v 32133
+v 28006
+v 33763
+v 29723
+v 28206
+v 31273
+v 30576
+v 35620
+v 27981
+v 30413
+v 33492
+v 30632
+v 30502
+v 29730
+v 31530
+v 30512
+v 35305
+v 29878
+v 33002
+v 34727
+v 29059
+v 30238
+v 35081
+v 35559
+v 27946
+v 29161
+v 33155
+v 35057
+v 27902
+v 30066
+v 32521
+v 28970
+v 30143
+v 33386
+v 31878
+v 30077
+v 29756
+v 29663
+v 29004
+v 29656
+v 29528
+v 31323
+v 32881
+v 29261
+v 30652
+v 31262
+v 33227
+v 33547
+v 29984
+v 31240
+v 30010
+v 34151
+v 29332
+v 35044
+v 30355
+v 30257
+v 28364
+v 29908
+v 34895
+v 29650
+v 31173
+v 32318
+v 32049
+v 33432
+v 34642
+v 28268
+v 35371
+v 34909
+v 30594
+v 34051
+v 35496
+v 35313
+v 34233
+v 28703
+v 29945
+v 27587
+v 28837
+v 29577
+v 27492
+v 31151
+v 35284
+v 31762
+v 29503
+v 30960
+v 34379
+v 31787
+v 28347
+v 32463
+v 31908
+v 30035
+v 35185
+v 27797
+v 29081
+v 33853
+v 34501
+v 32947
+v 35910
+v 35101
+v 34266
+v 32770
+v 26516
+v 33195
+v 28526
+v 30487
+v 29347
+v 30148
+v 33509
+v 30641
+v 26593
+v 33131
+v 31492
+v 35047
+v 30201
+v 31401
+v 34542
+v 33231
+v 32889
+v 35361
+v 30039
+v 30723
+v 28530
+v 29220
+v 30800
+v 30402
+v 29282
+v 29612
+v 32094
+v 29320
+v 34701
+v 33695
+v 27259
+v 31556
+v 29436
+v 34881
+v 35378
+v 33920
+v 30792
+v 35858
+v 30053
+v 27579
+v 28778
+v 27101
+v 29202
+v 34120
+v 35489
+v 29306
+v 28195
+v 29766
+v 27218
+v 29735
+v 32942
+v 29401
+v 35784
+v 32392
+v 30474
+v 31039
+v 35926
+v 35159
+v 31458
+v 33740
+v 29122
+v 28607
+v 34335
+v 35169
+v 35530
+v 28313
+v 27972
+v 30566
+v 32316
+v 29086
+v 28340
+v 34002
+v 28073
+v 27545
+v 35757
+v 34581
+v 32994
+v 32911
+v 29409
+v 29375
+v 34381
+v 28234
+v 26495
+v 32935
+v 31825
+v 30822
+v 29299
+v 33678
+v 29632
+v 30513
+v 32932
+v 34395
+v 28014
+v 29609
+v 27781
+v 33888
+v 31507
+v 34938
+v 29342
+v 29669
+v 31854
+v 35465
+v 30438
+v 33302
+v 34214
+v 34279
+v 30048
+v 30129
+v 33628
+v 31779
+v 28609
+v 35732
+v 32928
+v 35310
+v 32729
+v 31080
+v 33179
+v 28792
+v 33258
+v 27115
+v 28556
+v 31981
+v 32498
+v 35687
+v 34306
+v 27369
+v 35035
+v 32551
+v 29383
+v 34136
+v 29414
+v 33247
+v 33524
+v 28255
+v 34506
+v 30567
+v 30479
+v 33107
+v 33348
+v 29334
+v 31203
+v 30647
+v 29779
+v 28232
+v 31745
+v 30951
+v 32123
+v 29361
+v 30633
+v 33116
+v 31901
+v 31420
+v 31885
+v 29439
+v 27896
+v 30036
+v 30539
+v 30109
+v 31265
+v 35299
+v 26681
+v 35466
+v 34908
+v 30067
+v 35695
+v 28324
+v 27448
+v 30476
+v 29820
+v 28962
+v 31448
+v 32281
+v 32829
+v 31249
+v 30198
+v 30686
+v 32239
+v 35090
+v 32297
+v 34623
+v 30525
+v 29554
+v 29043
+v 34166
+v 29065
+v 35942
+v 27151
+v 28266
+v 31560
+v 29087
+v 28484
+v 34167
+v 34135
+v 28351
+v 32940
+v 28622
+v 27475
+v 27744
+v 29783
+v 30541
+v 30191
+v 33382
+v 29477
+v 31402
+v 29275
+v 28626
+v 31942
+v 29959
+v 30252
+v 30302
+v 34174
+v 34025
+v 30128
+v 31643
+v 28775
+v 31034
+v 33852
+v 29710
+v 31645
+v 33519
+v 27397
+v 32633
+v 29762
+v 29519
+v 30271
+v 29974
+v 29796
+v 34945
+v 34466
+v 35207
+v 26913
+v 33548
+v 29912
+v 35217
+v 28686
+v 30114
+v 27616
+v 29437
+v 34524
+v 28201
+v 28097
+v 30685
+v 26804
+v 28696
+v 33009
+v 28411
+v 35548
+v 32125
+v 31290
+v 35678
+v 35661
+v 35212
+v 35586
+v 35285
+v 29714
+v 29492
+v 27494
+v 27862
+v 32691
+v 32063
+v 34732
+v 30559
+v 28985
+v 28720
+v 35317
+v 30404
+v 30483
+v 31842
+v 34048
+v 34778
+v 28898
+v 29302
+v 31870
+v 34769
+v 35680
+v 27464
+v 34738
+v 29651
+v 32901
+v 31475
+v 31397
+v 27055
+v 28196
+v 33871
+v 34283
+v 26843
+v 29586
+v 34667
+v 35854
+v 30368
+v 30165
+v 35315
+v 28910
+v 32443
+v 31852
+v 30621
+v 35612
+v 29240
+v 34160
+v 26758
+v 33276
+v 35229
+v 35034
+v 31758
+v 33447
+v 33304
+v 29883
+v 30955
+v 35925
+v 31199
+v 31221
+v 35369
+v 32731
+v 34241
+v 32090
+v 33799
+v 34864
+v 33254
+v 33204
+v 29689
+v 33174
+v 28648
+v 30761
+v 31150
+v 30022
+v 33268
+v 33869
+v 28621
+v 28403
+v 29058
+v 30911
+v 29455
+v 27027
+v 33482
+v 30882
+v 35729
+v 33265
+v 28861
+v 35595
+v 29911
+v 35857
+v 29457
+v 30919
+v 27154
+v 33251
+v 29933
+v 30137
+v 34082
+v 34287
+v 30072
+v 29968
+v 30484
+v 32048
+v 29112
+v 32021
+v 29035
+v 27617
+v 34473
+v 30156
+v 29864
+v 29851
+v 33133
+v 28585
+v 28326
+v 34845
+v 35743
+v 35190
+v 30698
+v 35328
+v 29094
+v 35734
+v 29706
+v 32486
+v 27482
+v 33194
+v 33424
+v 35228
+v 34688
+v 31899
+v 27222
+v 28416
+v 34747
+v 30117
+v 29372
+v 35016
+v 33637
+v 34449
+v 28701
+v 33836
+v 27366
+v 30974
+v 33086
+v 27821
+v 33196
+v 31613
+v 31442
+v 33341
+v 32550
+v 30890
+v 31403
+v 29755
+v 34024
+v 29131
+v 32179
+v 33158
+v 35691
+v 33013
+v 35397
+v 29636
+v 29980
+v 35671
+v 32089
+v 26559
+v 34213
+v 32246
+v 34630
+v 31568
+v 33234
+v 29343
+v 34525
+v 29767
+v 31730
+v 29694
+v 29393
+v 31117
+v 27586
+v 31829
+v 32666
+v 29653
+v 32273
+v 35565
+v 35050
+v 34458
+v 34719
+v 32705
+v 34992
+v 35798
+v 29926
+v 26901
+v 29662
+v 29790
+v 26987
+v 28981
+v 33101
+v 32790
+v 29231
+v 35562
+v 29939
+v 29742
+v 33418
+v 31013
+v 31206
+v 29296
+v 28528
+v 28543
+v 27936
+v 28312
+v 34531
+v 31489
+v 31494
+v 33269
+v 30365
+v 35905
+v 29655
+v 32482
+v 31473
+v 32727
+v 29578
+v 29704
+v 35138
+v 33916
+v 33754
+v 33860
+v 26769
+v 30770
+v 30671
+v 28246
+v 29691
+v 28843
+v 28267
+v 29130
+v 30062
+v 34691
+v 32945
+v 35233
+v 30321
+v 30348
+v 29629
+v 28303
+v 34101
+v 34327
+v 31126
+v 33046
+v 34800
+v 32114
+v 35259
+v 29906
+v 35211
+v 28105
+v 31227
+v 29903
+v 27994
+v 34461
+v 32491
+v 34537
+v 31670
+v 33874
+v 27042
+v 35393
+v 34792
+v 30255
+v 33687
+v 34476
+v 34767
+v 31536
+v 30013
+v 29967
+v 30154
+v 29768
+v 34014
+v 30061
+v 31407
+v 35191
+v 33895
+v 31023
+v 35442
+v 33495
+v 35036
+v 29066
+v 28912
+v 32032
+v 30401
+v 30598
+v 32706
+v 34412
+v 33591
+v 30868
+v 35308
+v 29513
+v 29330
+v 35759
+v 34655
+v 32828
+v 35536
+v 32619
+v 33004
+v 30322
+v 31915
+v 30210
+v 30171
+v 33308
+v 29309
+v 30935
+v 26747
+v 27184
+v 30373
+v 27912
+v 32515
+v 34650
+v 31664
+v 31101
+v 32704
+v 31880
+v 27321
+v 30350
+v 32019
+v 31369
+v 28235
+v 32345
+v 34822
+v 28662
+v 30980
+v 29997
+v 35533
+v 30044
+v 32713
+v 34124
+v 33120
+v 35847
+v 29377
+v 31542
+v 27354
+v 29174
+v 35220
+v 31308
+v 30732
+v 27984
+v 33339
+v 32576
+v 29565
+v 34902
+v 29479
+v 30648
+v 32109
+v 28442
+v 29644
+v 28019
+v 33577
+v 29750
+v 34856
+v 30316
+v 29301
+v 28017
+v 27200
+v 35748
+v 30673
+v 32852
+v 28562
+v 28871
+v 34454
+v 30973
+v 34185
+v 33307
+v 29132
+v 29882
+v 34927
+v 32488
+v 31985
+v 31412
+v 29110
+v 29448
+v 29535
+v 34906
+v 33314
+v 33456
+v 32379
+v 34228
+v 30049
+v 30597
+v 34492
+v 28723
+v 35617
+v 35700
+v 35116
+v 30054
+v 29092
+v 34761
+v 32349
+v 35629
+v 29807
+v 34901
+v 30058
+v 31282
+v 33273
+v 31424
+v 33698
+v 33445
+v 33887
+v 30507
+v 31816
+v 35506
+v 29333
+v 34907
+v 31626
+v 34221
+v 32682
+v 35523
+v 30691
+v 29678
+v 29229
+v 35384
+v 30141
+v 30916
+v 32039
+v 33127
+v 30710
+v 28429
+v 29619
+v 32880
+v 35202
+v 28915
+v 31527
+v 30403
+v 31699
+v 29910
+v 28368
+v 31709
+v 28505
+v 35079
+v 30496
+v 31618
+v 32282
+v 34562
+v 31493
+v 26514
+v 35421
+v 30336
+v 32835
+v 28909
+v 31021
+v 35728
+v 35040
+v 28261
+v 31718
+v 28415
+v 30681
+v 27798
+v 30666
+v 29032
+v 34128
+v 33490
+v 31757
+v 33579
+v 31580
+v 35528
+v 35737
+v 30554
+v 28314
+v 32980
+v 28998
+v 29729
+v 34781
+v 30305
+v 35071
+v 34665
+v 31296
+v 29813
+v 33022
+v 29952
+v 35412
+v 35055
+v 31684
+v 35348
+v 33211
+v 29440
+v 35469
+v 29319
+v 29204
+v 28914
+v 33034
+v 32000
+v 30151
+v 30440
+v 28906
+v 30347
+v 32626
+v 30209
+v 31856
+v 28986
+v 34219
+v 30654
+v 31208
+v 30997
+v 32084
+v 34567
+v 30676
+v 30863
+v 28058
+v 31040
+v 32490
+v 27564
+v 33870
+v 30763
+v 35347
+v 33357
+v 30047
+v 29618
+v 35772
+v 34788
+v 33781
+v 35605
+v 33277
+v 31731
+v 35540
+v 35522
+v 28954
+v 31761
+v 28641
+v 35160
+v 26184
+v 31971
+v 33279
+v 34844
+v 33918
+v 35359
+v 27316
+v 30012
+v 29569
+v 28031
+v 35476
+v 29362
+v 35419
+v 29506
+v 30587
+v 29675
+v 31663
+v 33144
+v 27283
+v 28289
+v 30219
+v 29416
+v 32602
+v 30656
+v 27881
+v 27386
+v 35218
+v 29889
+v 28095
+v 28262
+v 33615
+v 29491
+v 30834
+v 34421
+v 35498
+v 29327
+v 29688
+v 34207
+v 31462
+v 30629
+v 32938
+v 34968
+v 29798
+v 28334
+v 28971
+v 34835
+v 32051
+v 29707
+v 29559
+v 35358
+v 34170
+v 30085
+v 33049
+v 34314
+v 28724
+v 29389
+v 32373
+v 34879
+v 31690
+v 29064
+v 28945
+v 28680
+v 27437
+v 35287
+v 32429
+v 34995
+v 29582
+v 30820
+v 29874
+v 29693
+v 30254
+v 30292
+v 33299
+v 29774
+v 35893
+v 31918
+v 32204
+v 29276
+v 32502
+v 28244
+v 34854
+v 35491
+v 35461
+v 34358
+v 33517
+v 34346
+v 27742
+v 35078
+v 28560
+v 35669
+v 33679
+v 27735
+v 31337
+v 30510
+v 29525
+v 33970
+v 30983
+v 30051
+v 28143
+v 30297
+v 34584
+v 35038
+v 32656
+v 30593
+v 34208
+v 34913
+v 31988
+v 32805
+v 33877
+v 30351
+v 33003
+v 35721
+v 30734
+v 30866
+v 30623
+v 34828
+v 30361
+v 30192
+v 30063
+v 34234
+v 30284
+v 29777
+v 29253
+v 29625
+v 34680
+v 35570
+v 30287
+v 33733
+v 31481
+v 28451
+v 29699
+v 31464
+v 31805
+v 30200
+v 30457
+v 29498
+v 28027
+v 34276
+v 32688
+v 33499
+v 27924
+v 31280
+v 35291
+v 29641
+v 30819
+v 34852
+v 32156
+v 31159
+v 32260
+v 31796
+v 32026
+v 27990
+v 29211
+v 30329
+v 32779
+v 35723
+v 35556
+v 35061
+v 30078
+v 33060
+v 33252
+v 30725
+v 34924
+v 34853
+v 29587
+v 30546
+v 34365
+v 31169
+v 29739
+v 30396
+v 34849
+v 32479
+v 30915
+v 29728
+v 32024
+v 33975
+v 30152
+v 34625
+v 31557
+v 27374
+v 32147
+v 30783
+v 34034
+v 30542
+v 29960
+v 28537
+v 29386
+v 30225
+v 29591
+v 35616
+v 30775
+v 27827
+v 34636
+v 33437
+v 31158
+v 29167
+v 35666
+v 35658
+v 29083
+v 35142
+v 34682
+v 27847
+v 30363
+v 30135
+v 29417
+v 29816
+v 28711
+v 32236
+v 34342
+v 29856
+v 32873
+v 32296
+v 34929
+v 30167
+v 31076
+v 35657
+v 30267
+v 29757
+v 31451
+v 33941
+v 28132
+v 32191
+v 30432
+v 34503
+v 35566
+v 32546
+v 27594
+v 33512
+v 35450
+v 31090
+v 35028
+v 29929
+v 33381
+v 30178
+v 30722
+v 35144
+v 33613
+v 35098
+v 29966
+v 28233
+v 33734
+v 30896
+v 30452
+v 28501
+v 33847
+v 32555
+v 29573
+v 35340
+v 31565
+v 34892
+v 29836
+v 33668
+v 31393
+v 34280
+v 28949
+v 33997
+v 33586
+v 30122
+v 34094
+v 30020
+v 35196
+v 35635
+v 28570
+v 34894
+v 30008
+v 29781
+v 35791
+v 35859
+v 28092
+v 31685
+v 32166
+v 33089
+v 35593
+v 33878
+v 35455
+v 32226
+v 30870
+v 30614
+v 32768
+v 28475
+v 34967
+v 29025
+v 33560
+v 27888
+v 35029
+v 31500
+v 30223
+v 29116
+v 32256
+v 30057
+v 35350
+v 35002
+v 28458
+v 32111
+v 31185
+v 31549
+v 30045
+v 27708
+v 28795
+v 29111
+v 32434
+v 29617
+v 35242
+v 29107
+v 31788
+v 30858
+v 31723
+v 30131
+v 28435
+v 29360
+v 29808
+v 32707
+v 28873
+v 29033
+v 32530
+v 27257
+v 29686
+v 34285
+v 33295
+v 27144
+v 33889
+v 33461
+v 34676
+v 29937
+v 29995
+v 33309
+v 30456
+v 32382
+v 33809
+v 32503
+v 30032
+v 32678
+v 30470
+v 27666
+v 30263
+v 29547
+v 30680
+v 30538
+v 28187
+v 35105
+v 35165
+v 28356
+v 32298
+v 35713
+v 30999
+v 31990
+v 35480
+v 33723
+v 31086
+v 31798
+v 33500
+v 31213
+v 32702
+v 30520
+v 33075
+v 30667
+v 29395
+v 28586
+v 32067
+v 33214
+v 29622
+v 29946
+v 32953
+v 29480
+v 33632
+v 35503
+v 30096
+v 35684
+v 27344
+v 31855
+v 29954
+v 33074
+v 29692
+v 35351
+v 32833
+v 35787
+v 31310
+v 33019
+v 30468
+v 30068
+v 31483
+v 33622
+v 30431
+v 35224
+v 29434
+v 31820
+v 34445
+v 30808
+v 34240
+v 34997
+v 35267
+v 33199
+v 29308
+v 30497
+v 29842
+v 27802
+v 31303
+v 31879
+v 33752
+v 35930
+v 30080
+v 33905
+v 30214
+v 33861
+v 33331
+v 31777
+v 30349
+v 29687
+v 30498
+v 32969
+v 28738
+v 33866
+v 35232
+v 29841
+v 31112
+v 30176
+v 35611
+v 29265
+v 35366
+v 26699
+v 33979
+v 32218
+v 28862
+v 30369
+v 31124
+v 32922
+v 32410
+v 30688
+v 28309
+v 35364
+v 33096
+v 30027
+v 30817
+v 33464
+v 35906
+v 30410
+v 30862
+v 29593
+v 34635
+v 35800
+v 29026
+v 33345
+v 35747
+v 35708
+v 33633
+v 30409
+v 30041
+v 33104
+v 34797
+v 30043
+v 33193
+v 34896
+v 33685
+v 35270
+v 35880
+v 28919
+v 32196
+v 34095
+v 29307
+v 34592
+v 33598
+v 32007
+v 35219
+v 35025
+v 30197
+v 29453
+v 33122
+v 30748
+v 33255
+v 35514
+v 31243
+v 33909
+v 31510
+v 34061
+v 29840
+v 27402
+v 30768
+v 32623
+v 30730
+v 31085
+v 31129
+v 33007
+v 31294
+v 35297
+v 34811
+v 29630
+v 28436
+v 29833
+v 28635
+v 35019
+v 29465
+v 32918
+v 32184
+v 33291
+v 28228
+v 30453
+v 33614
+v 29100
+v 35676
+v 28128
+v 31217
+v 33580
+v 30802
+v 29996
+v 34722
+v 28719
+v 35255
+v 35853
+v 28456
+v 31679
+v 33748
+v 30206
+v 35515
+v 28929
+v 33395
+v 35487
+v 29398
+v 30801
+v 30591
+v 35474
+v 28713
+v 34362
+v 29411
+v 29385
+v 34212
+v 28798
+v 31616
+v 29769
+v 35594
+v 33048
+v 32797
+v 33677
+v 30848
+v 33005
+v 34021
+v 34773
+v 34554
+v 30203
+v 31378
+v 31118
+v 31431
+v 34317
+v 30871
+v 35416
+v 30245
+v 33137
+v 35715
+v 30956
+v 31881
+v 28200
+v 29989
+v 30256
+v 35933
+v 30506
+v 33253
+v 34813
+v 29616
+v 32878
+v 30370
+v 32554
+v 32076
+v 30639
+v 31717
+v 32304
+v 33210
+v 33983
+v 32121
+v 32605
+v 32027
+v 32990
+v 34640
+v 31226
+v 35699
+v 31380
+v 32542
+v 27999
+v 29642
+v 35625
+v 29315
+v 29977
+v 35907
+v 30183
+v 27985
+v 35065
+v 33520
+v 33776
+v 34338
+v 33018
+v 34377
+v 29074
+v 30269
+v 29976
+v 29263
+v 35075
+v 31903
+v 34295
+v 29153
+v 29749
+v 34080
+v 31184
+v 31498
+v 35898
+v 34384
+v 31531
+v 29476
+v 29894
+v 31166
+v 30116
+v 34163
+v 27941
+v 30959
+v 29971
+v 28171
+v 32319
+v 34001
+v 33030
+v 31274
+v 35946
+v 34619
+v 33623
+v 33988
+v 30910
+v 35541
+v 28707
+v 28150
+v 33071
+v 28717
+v 30323
+v 28706
+v 29247
+v 30188
+v 35623
+v 29461
+v 31106
+v 33181
+v 32753
+v 35516
+v 34739
+v 30527
+v 30312
+v 34063
+v 27956
+v 28387
+v 29901
+v 31105
+v 29399
+v 29278
+v 35485
+v 30649
+v 32629
+v 33721
+v 29797
+v 32997
+v 31813
+v 28646
+v 27476
+v 31470
+v 35647
+v 34628
+v 34195
+v 32033
+v 35388
+v 31479
+v 32624
+v 30886
+v 31940
+v 34161
+v 30852
+v 32415
+v 35861
+v 30362
+v 28180
+v 34550
+v 30713
+v 30942
+v 33132
+v 34215
+v 33404
+v 35119
+v 35637
+v 32692
+v 35349
+v 33796
+v 29370
+v 32890
+v 34637
+v 35341
+v 34313
+v 35265
+v 34535
+v 34273
+v 35876
+v 30977
+v 33435
+v 30695
+v 33864
+v 34156
+v 35335
+v 34876
+v 35379
+v 34457
+v 30553
+v 30019
+v 28329
+v 29846
+v 34300
+v 34023
+v 34260
+v 35502
+v 35894
+v 35339
+v 32965
+v 35864
+v 35742
+v 31187
+v 33411
+v 34953
+v 33244
+v 28083
+v 31937
+v 31220
+v 31617
+v 30335
+v 35415
+v 30136
+v 35874
+v 31215
+v 30190
+v 27615
+v 31161
+v 33775
+v 33202
+v 33715
+v 35022
+v 34065
+v 30877
+v 33652
+v 34721
+v 28259
+v 32214
+v 32290
+v 31807
+v 30082
+v 31635
+v 35353
+v 33643
+v 29637
+v 31785
+v 29965
+v 29324
+v 28908
+v 29281
+v 33183
+v 30146
+v 34084
+v 31774
+v 32777
+v 32792
+v 29718
+v 31001
+v 29597
+v 30038
+v 35433
+v 30075
+v 33209
+v 35187
+v 32845
+v 32232
+v 31790
+v 34905
+v 32275
+v 35209
+v 28158
+v 34479
+v 34936
+v 28385
+v 32572
+v 31834
+v 30640
+v 28362
+v 29982
+v 28781
+v 28810
+v 29511
+v 29732
+v 30672
+v 30818
+v 32793
+v 33082
+v 33405
+v 30981
+v 28075
+v 30405
+v 33707
+v 29323
+v 30473
+v 31242
+v 33978
+v 35417
+v 32351
+v 31131
+v 30250
+v 32964
+v 32229
+v 29814
+v 28779
+v 34970
+v 31269
+v 35724
+v 35274
+v 32445
+v 29269
+v 35849
+v 28248
+v 33246
+v 32011
+v 30970
+v 29985
+v 35154
+v 28086
+v 34302
+v 35434
+v 30427
+v 29234
+v 28160
+v 31329
+v 29628
+v 35895
+v 35769
+v 34079
+v 33797
+v 30352
+v 33671
+v 32773
+v 29262
+v 31472
+v 32573
+v 29849
+v 33421
+v 28499
+v 35473
+v 30230
+v 28676
+v 35675
+v 29034
+v 30307
+v 31608
+v 29888
+v 29924
+v 30394
+v 35525
+v 30788
+v 34038
+v 35694
+v 30571
+v 35091
+v 35318
+v 35492
+v 26985
+v 32348
+v 34157
+v 29070
+v 29599
+v 30282
+v 29733
+v 31120
+v 32107
+v 32161
+v 32245
+v 34789
+v 31738
+v 30300
+v 29815
+v 32339
+v 33846
+v 30494
+v 30717
+v 32385
+v 35564
+v 33399
+v 30331
+v 30400
+v 30795
+v 34639
+v 31125
+v 30677
+v 33398
+v 32396
+v 30276
+v 29972
+v 35092
+v 29541
+v 30883
+v 30683
+v 32362
+v 29940
+v 31130
+v 30655
+v 34996
+v 30104
+v 30569
+v 34725
+v 30018
+v 35781
+v 33996
+v 35862
+v 35373
+v 33102
+v 30602
+v 34045
+v 34154
+v 33675
+v 31237
+v 35731
+v 34150
+v 30945
+v 33818
+v 34248
+v 33735
+v 35321
+v 35603
+v 35449
+v 33892
+v 33346
+v 28398
+v 35133
+v 30217
+v 35727
+v 35811
+v 32378
+v 34315
+v 34009
+v 34281
+v 35193
+v 30528
+v 35679
+v 33427
+v 30153
+v 34286
+v 29520
+v 28140
+v 31605
+v 34159
+v 29481
+v 30119
+v 34134
+v 33694
+v 30205
+v 31015
+v 31136
+v 30381
+v 31833
+v 30076
+v 34126
+v 29969
+v 29270
+v 35889
+v 30642
+v 32591
+v 35693
+v 29216
+v 28412
+v 35074
+v 34290
+v 35475
+v 35768
+v 31694
+v 35521
+v 30708
+v 28345
+v 28041
+v 28465
+v 35875
+v 31109
+v 32781
+v 34017
+v 35282
+v 33553
+v 33958
+v 28540
+v 31202
+v 29647
+v 26557
+v 35571
+v 26795
+v 31079
+v 34258
+v 32200
+v 29928
+v 34944
+v 34060
+v 35398
+v 33283
+v 33994
+v 30523
+v 30243
+v 29188
+v 33672
+v 35365
+v 35275
+v 31283
+v 28405
+v 30967
+v 31509
+v 30113
+v 32116
+v 28992
+v 34777
+v 30609
+v 28179
+v 34261
+v 28857
+v 35520
+v 31744
+v 28247
+v 33465
+v 35426
+v 33505
+v 29953
+v 30610
+v 34903
+v 34669
+v 35058
+v 32740
+v 31873
+v 32575
+v 34447
+v 30606
+v 34916
+v 35087
+v 30189
+v 34333
+v 34825
+v 28491
+v 31176
+v 35765
+v 31652
+v 31625
+v 33021
+v 34656
+v 35176
+v 29905
+v 31421
+v 30239
+v 32092
+v 33289
+v 30832
+v 31033
+v 32487
+v 30385
+v 32910
+v 29297
+v 31003
+v 29419
+v 33872
+v 28425
+v 35298
+v 30460
+v 32476
+v 28927
+v 30665
+v 29348
+v 28950
+v 30785
+v 30721
+v 29785
+v 32608
+v 30023
+v 30803
+v 32735
+v 34433
+v 31257
+v 30168
+v 35076
+v 29983
+v 31278
+v 32724
+v 33992
+v 30827
+v 30887
+v 30517
+v 29352
+v 35808
+v 33540
+v 29745
+v 31362
+v 35596
+v 28298
+v 34575
+v 29061
+v 34683
+v 30856
+v 31677
+v 28661
+v 35157
+v 34364
+v 31132
+v 29811
+v 29099
+v 30089
+v 29138
+v 30899
+v 34363
+v 30298
+v 32975
+v 28961
+v 30436
+v 34050
+v 35844
+v 30993
+v 32374
+v 31139
+v 30132
+v 28496
+v 34265
+v 29187
+v 34100
+v 31209
+v 30620
+v 32272
+v 30694
+v 35744
+v 35342
+v 35856
+v 33788
+v 34003
+v 28683
+v 35683
+v 31782
+v 28887
+v 35512
+v 35738
+v 30504
+v 29736
+v 35943
+v 33716
+v 35072
+v 31037
+v 35642
+v 31194
+v 30573
+v 31720
+v 34491
+v 30958
+v 33389
+v 27036
+v 34442
+v 29169
+v 34227
+v 33985
+v 35382
+v 32765
+v 34114
+v 35839
+v 30310
+v 35108
+v 33412
+v 30613
+v 30932
+v 30522
+v 30358
+v 29021
+v 35756
+v 30345
+v 31426
+v 28587
+v 33507
+v 35411
+v 30664
+v 31974
+v 29670
+v 29252
+v 34912
+v 35804
+v 32336
+v 32549
+v 31701
+v 34149
+v 35431
+v 33119
+v 33647
+v 31044
+v 32268
+v 29934
+v 35460
+v 30557
+v 35246
+v 29249
+v 32552
+v 35323
+v 33180
+v 33867
+v 31888
+v 34387
+v 35607
+v 29339
+v 31019
+v 30304
+v 35619
+v 28202
+v 31495
+v 29084
+v 27119
+v 30791
+v 33460
+v 31264
+v 30187
+v 34310
+v 32647
+v 30846
+v 33123
+v 33624
+v 30976
+v 31936
+v 30437
+v 33984
+v 33359
+v 29606
+v 32038
+v 32129
+v 31138
+v 34153
+v 35638
+v 35806
+v 32400
+v 32331
+v 30719
+v 28275
+v 30374
+v 30222
+v 33583
+v 33670
+v 33745
+v 34629
+v 32717
+v 28615
+v 35268
+v 35845
+v 35740
+v 30328
+v 32455
+v 33744
+v 33912
+v 35921
+v 33408
+v 32189
+v 34139
+v 32668
+v 30344
+v 33425
+v 35140
+v 30333
+v 30845
+v 33351
+v 34375
+v 33825
+v 28884
+v 30551
+v 30583
+v 35890
+v 30855
+v 33986
+v 30760
+v 33522
+v 30682
+v 31847
+v 34660
+v 29922
+v 29681
+v 29817
+v 32772
+v 33312
+v 30449
+v 30503
+v 28926
+v 34303
+v 30586
+v 31413
+v 34259
+v 35215
+v 33515
+v 28294
+v 30301
+v 33172
+v 35643
+v 33229
+v 34528
+v 35409
+v 31195
+v 35260
+v 35551
+v 31065
+v 30056
+v 30007
+v 30138
+v 30813
+v 33305
+v 35189
+v 33917
+v 28645
+v 31284
+v 29950
+v 33017
+v 29886
+v 30372
+v 34388
+v 29552
+v 28757
+v 30025
+v 30115
+v 33824
+v 30906
+v 33110
+v 33200
+v 30990
+v 33561
+v 31898
+v 34632
+v 33106
+v 32917
+v 31343
+v 30563
+v 30547
+v 35832
+v 31660
+v 29245
+v 33072
+v 30861
+v 31137
+v 33087
+v 30618
+v 33384
+v 30162
+v 30806
+v 35490
+v 29466
+v 29654
+v 34292
+v 30753
+v 35539
+v 31042
+v 33469
+v 32350
+v 28872
+v 29893
+v 33343
+v 33401
+v 30514
+v 31786
+v 30443
+v 32697
+v 34217
+v 33855
+v 34698
+v 34772
+v 32020
+v 30631
+v 30211
+v 35778
+v 30340
+v 31046
+v 30733
+v 28410
+v 32599
+v 32215
+v 31064
+v 33612
+v 35561
+v 34223
+v 35513
+v 35290
+v 31089
+v 30918
+v 31198
+v 34105
+v 30359
+v 30478
+v 30714
+v 32155
+v 31167
+v 31088
+v 31465
+v 33422
+v 29515
+v 31889
+v 29280
+v 33213
+v 29029
+v 29489
+v 32449
+v 29898
+v 28485
+v 31587
+v 30393
+v 28371
+v 30228
+v 29464
+v 34264
+v 30709
+v 33484
+v 35122
+v 33474
+v 32219
+v 30420
+v 31639
+v 28699
+v 34973
+v 35795
+v 28430
+v 31857
+v 32151
+v 30180
+v 31828
+v 27606
+v 30029
+v 30939
+v 30669
+v 34614
+v 30897
+v 31287
+v 30259
+v 34087
+v 29737
+v 30521
+v 29657
+v 32135
+v 29602
+v 35467
+v 31588
+v 34081
+v 35145
+v 29418
+v 30657
+v 31732
+v 32420
+v 33178
+v 30931
+v 30079
+v 32660
+v 30052
+v 30747
+v 31340
+v 35031
+v 34121
+v 31311
+v 33216
+v 34077
+v 30445
+v 35785
+v 35311
+v 31048
+v 30003
+v 31848
+v 30272
+v 34600
+v 32397
+v 35385
+v 30600
+v 32673
+v 32295
+v 33627
+v 32467
+v 34485
+v 30589
+v 31281
+v 34275
+v 32177
+v 30343
+v 35128
+v 33448
+v 33766
+v 31830
+v 33063
+v 31156
+v 32036
+v 30161
+v 27532
+v 35422
+v 34345
+v 29468
+v 28518
+v 33442
+v 30306
+v 32158
+v 32003
+v 28762
+v 29137
+v 34164
+v 30389
+v 31304
+v 29896
+v 30095
+v 33335
+v 30357
+v 34595
+v 31172
+v 35195
+v 32993
+v 29988
+v 32509
+v 30262
+v 34762
+v 31231
+v 29858
+v 29884
+v 33274
+v 31561
+v 31325
+v 30015
+v 34018
+v 30356
+v 35722
+v 31437
+v 30382
+v 31196
+v 31293
+v 28716
+v 34752
+v 35042
+v 30428
+v 32136
+v 33263
+v 34677
+v 32743
+v 35352
+v 34106
+v 30139
+v 35814
+v 34988
+v 29373
+v 35650
+v 34010
+v 34648
+v 34370
+v 30894
+v 27750
+v 35320
+v 32848
+v 31702
+v 35227
+v 33731
+v 31083
+v 35912
+v 34263
+v 31603
+v 34824
+v 33619
+v 34487
+v 33538
+v 33819
+v 32302
+v 32167
+v 35198
+v 29376
+v 35097
+v 32536
+v 29500
+v 31924
+v 35674
+v 33434
+v 30531
+v 34890
+v 34711
+v 30164
+v 33590
+v 30540
+v 31803
+v 32556
+v 34804
+v 30017
+v 31191
+v 32865
+v 30016
+v 33475
+v 31963
+v 31452
+v 30353
+v 31018
+v 34821
+v 30026
+v 35435
+v 34107
+v 30595
+v 34193
+v 32227
+v 31032
+v 29789
+v 34119
+v 35289
+v 27658
+v 34514
+v 35178
+v 28306
+v 32974
+v 34724
+v 33564
+v 32314
+v 30103
+v 35935
+v 30724
+v 29521
+v 30865
+v 34393
+v 33616
+v 35137
+v 30756
+v 32199
+v 30661
+v 32139
+v 28744
+v 34334
+v 33186
+v 31052
+v 34869
+v 31375
+v 28007
+v 31748
+v 31009
+v 33886
+v 31123
+v 31445
+v 29837
+v 34834
+v 31783
+v 35046
+v 33249
+v 30414
+v 31077
+v 34977
+v 34007
+v 32531
+v 30670
+v 34109
+v 32223
+v 28628
+v 30163
+v 30742
+v 35685
+v 33822
+v 32959
+v 35272
+v 33770
+v 29853
+v 34311
+v 30059
+v 31092
+v 30588
+v 32266
+v 28660
+v 34922
+v 28689
+v 30715
+v 32428
+v 34966
+v 29863
+v 33015
+v 30435
+v 34015
+v 30653
+v 30879
+v 30006
+v 34097
+v 35592
+v 30260
+v 33470
+v 32789
+v 31363
+v 31197
+v 29697
+v 35572
+v 32915
+v 30251
+v 31261
+v 30285
+v 30706
+v 32433
+v 31681
+v 33965
+v 30735
+v 28830
+v 34641
+v 32933
+v 35131
+v 32593
+v 32337
+v 34974
+v 31379
+v 30643
+v 31146
+v 30270
+v 32403
+v 31794
+v 30957
+v 29310
+v 28205
+v 33712
+v 34411
+v 34209
+v 33938
+v 33665
+v 33420
+v 30391
+v 32013
+v 31533
+v 30429
+v 29022
+v 29845
+v 30789
+v 34771
+v 31836
+v 33337
+v 30971
+v 30098
+v 33438
+v 35306
+v 30961
+v 35066
+v 31559
+v 31844
+v 30912
+v 34564
+v 32788
+v 30684
+v 31535
+v 32472
+v 28161
+v 30314
+v 27600
+v 34899
+v 32924
+v 35017
+v 34957
+v 32187
+v 34122
+v 31004
+v 35238
+v 30982
+v 30111
+v 35093
+v 32791
+v 33951
+v 30046
+v 35537
+v 30804
+v 31408
+v 35615
+v 29772
+v 30650
+v 33963
+v 33284
+v 35867
+v 31335
+v 30963
+v 29713
+v 32934
+v 33753
+v 34231
+v 33527
+v 31114
+v 29683
+v 35314
+v 35573
+v 35407
+v 28897
+v 35850
+v 35879
+v 30447
+v 32086
+v 35428
+v 29358
+v 35239
+v 33380
+v 34585
+v 32426
+v 31210
+v 34652
+v 33976
+v 30501
+v 30002
+v 35558
+v 31096
+v 31657
+v 32785
+v 33473
+v 34062
+v 34515
+v 32839
+v 32305
+v 35333
+v 34539
+v 30084
+v 29975
+v 31252
+v 32175
+v 31270
+v 31189
+v 34827
+v 35892
+v 35830
+v 30752
+v 33118
+v 29802
+v 32709
+v 29754
+v 30303
+v 32185
+v 30842
+v 32071
+v 28049
+v 34006
+v 35068
+v 31163
+v 30805
+v 31260
+v 32744
+v 35843
+v 31058
+v 35878
+v 31548
+v 31474
+v 31550
+v 30087
+v 34755
+v 32163
+v 30917
+v 32926
+v 35258
+v 30900
+v 32264
+v 32621
+v 32009
+v 34360
+v 31922
+v 34049
+v 30550
+v 32317
+v 33320
+v 29674
+v 32991
+v 34357
+v 33549
+v 30726
+v 34544
+v 31006
+v 31877
+v 30628
+v 35755
+v 33915
+v 30929
+v 31519
+v 31880
+v 30873
+v 30611
+v 34671
+v 31388
+v 34994
+v 29218
+v 32202
+v 30511
+v 30794
+v 33125
+v 34668
+v 30465
+v 30905
+v 35278
+v 34082
+v 32600
+v 29753
+v 32120
+v 29770
+v 34965
+v 30512
+v 35614
+v 35211
+v 32987
+v 30275
+v 31345
+v 34767
+v 34499
+v 33815
+v 34189
+v 34756
+v 32582
+v 30035
+v 31315
+v 34816
+v 34891
+v 34072
+v 30469
+v 32144
+v 35686
+v 35263
+v 29721
+v 35052
+v 28026
+v 29303
+v 30264
+v 34020
+v 32276
+v 31883
+v 30875
+v 31134
+v 30308
+v 30198
+v 34129
+v 35923
+v 35201
+v 31128
+v 30608
+v 32736
+v 30779
+v 32446
+v 29425
+v 31633
+v 35048
+v 31248
+v 29962
+v 31589
+v 35089
+v 30835
+v 33995
+v 35247
+v 31277
+v 33369
+v 29695
+v 34713
+v 32197
+v 35468
+v 31680
+v 35790
+v 29053
+v 30605
+v 30592
+v 34949
+v 31908
+v 31308
+v 30173
+v 30773
+v 34909
+v 33710
+v 32622
+v 34934
+v 35829
+v 30612
+v 35240
+v 30995
+v 31991
+v 29236
+v 35499
+v 35120
+v 35174
+v 34267
+v 32244
+v 34887
+v 30578
+v 31994
+v 35126
+v 33433
+v 30749
+v 30616
+v 32010
+v 31649
+v 35376
+v 34066
+v 32049
+v 35081
+v 34823
+v 31309
+v 35782
+v 35725
+v 31582
+v 31459
+v 32819
+v 30637
+v 35645
+v 35372
+v 32912
+v 35877
+v 30581
+v 35231
+v 34801
+v 32230
+v 32816
+v 29963
+v 33732
+v 34685
+v 32675
+v 34848
+v 34549
+v 33737
+v 34405
+v 35043
+v 29607
+v 31212
+v 30472
+v 30577
+v 33764
+v 34376
+v 32962
+v 33054
+v 32265
+v 30751
+v 30467
+v 33205
+v 30539
+v 32035
+v 33910
+v 30712
+v 33881
+v 34945
+v 30689
+v 34284
+v 31300
+v 30513
+v 33528
+v 34104
+v 32563
+v 31035
+v 30397
+v 31227
+v 31958
+v 31133
+v 29006
+v 33727
+v 34425
+v 32485
+v 31838
+v 30840
+v 32520
+v 32114
+v 35620
+v 34000
+v 32986
+v 34707
+v 32466
+v 30949
+v 33717
+v 35519
+v 30408
+v 31887
+v 31394
+v 34900
+v 32517
+v 34991
+v 35114
+v 34716
+v 32826
+v 29964
+v 35392
+v 30412
+v 29129
+v 29914
+v 33262
+v 35125
+v 33758
+v 34027
+v 30529
+v 31416
+v 35703
+v 33090
+v 29371
+v 34076
+v 31547
+v 31673
+v 30980
+v 29930
+v 30360
+v 35220
+v 34350
+v 30548
+v 35783
+v 33908
+v 29919
+v 31267
+v 34940
+v 29610
+v 33661
+v 33691
+v 33059
+v 30430
+v 33621
+v 33410
+v 35007
+v 31917
+v 35164
+v 30876
+v 33160
+v 34746
+v 32182
+v 32872
+v 34616
+v 31383
+v 35496
+v 35886
+v 32733
+v 31182
+v 30224
+v 34521
+v 33459
+v 34910
+v 35217
+v 31867
+v 35249
+v 31765
+v 32674
+v 32250
+v 32972
+v 35578
+v 34490
+v 35147
+v 30418
+v 29225
+v 35585
+v 31219
+v 33557
+v 34085
+v 30697
+v 30464
+v 28630
+v 32632
+v 33682
+v 32764
+v 30355
+v 32840
+v 28555
+v 31116
+v 30663
+v 35690
+v 34745
+v 30549
+v 30459
+v 28694
+v 30283
+v 28651
+v 32795
+v 35035
+v 35190
+v 30439
+v 29667
+v 33197
+v 31541
+v 33158
+v 32257
+v 30105
+v 33447
+v 30309
+v 34116
+v 31076
+v 31142
+v 33637
+v 33033
+v 32060
+v 34980
+v 31955
+v 30927
+v 34478
+v 35554
+v 35486
+v 32941
+v 34555
+v 34204
+v 31656
+v 30170
+v 29866
+v 30776
+v 30930
+v 30889
+v 30625
+v 35454
+v 34766
+v 30216
+v 35820
+v 35629
+v 33294
+v 30746
+v 34723
+v 33839
+v 32534
+v 30580
+v 33530
+v 28869
+v 33185
+v 31508
+v 30943
+v 35662
+v 34352
+v 33176
+v 35584
+v 32427
+v 32062
+v 30477
+v 33736
+v 33428
+v 34138
+v 33235
+v 31506
+v 35424
+v 33360
+v 31119
+v 31357
+v 34881
+v 33029
+v 35410
+v 29902
+v 32043
+v 31247
+v 34349
+v 33535
+v 29545
+v 30235
+v 31611
+v 33184
+v 32979
+v 30885
+v 30781
+v 35437
+v 34140
+v 31276
+v 32375
+v 30242
+v 30833
+v 35698
+v 31063
+v 35371
+v 31969
+v 30736
+v 32525
+v 32898
+v 34684
+v 33587
+v 35508
+v 30867
+v 31364
+v 31348
+v 34338
+v 32417
+v 31316
+v 32696
+v 30342
+v 34979
+v 33371
+v 31175
+v 33977
+v 30492
+v 30493
+v 32469
+v 31301
+v 34401
+v 35478
+v 31532
+v 35159
+v 33879
+v 29805
+v 30987
+v 33554
+v 34351
+v 30825
+v 33545
+v 35425
+v 29722
+v 34625
+v 30671
+v 35099
+v 34507
+v 32547
+v 30729
+v 35332
+v 35295
+v 32465
+v 29120
+v 33008
+v 31916
+v 31341
+v 31454
+v 32419
+v 30488
+v 34124
+v 34206
+v 30237
+v 34519
+v 29212
+v 28959
+v 31228
+v 35507
+v 31327
+v 34621
+v 35557
+v 33916
+v 35534
+v 31817
+v 31521
+v 34355
+v 34359
+v 35753
+v 34873
+v 34043
+v 31941
+v 35682
+v 31005
+v 31629
+v 31897
+v 30780
+v 30698
+v 34327
+v 33544
+v 30953
+v 31398
+v 31420
+v 34975
+v 35326
+v 32778
+v 30737
+v 33287
+v 31628
+v 33871
+v 33417
+v 33551
+v 30869
+v 32050
+v 30847
+v 35771
+v 31081
+v 29876
+v 31326
+v 29712
+v 31356
+v 32903
+v 34470
+v 29018
+v 30055
+v 34568
+v 34340
+v 32047
+v 35518
+v 33239
+v 33081
+v 32722
+v 29860
+v 31028
+v 33108
+v 32274
+v 32811
+v 30809
+v 35770
+v 33361
+v 33298
+v 33537
+v 32459
+v 33508
+v 32284
+v 31801
+v 34199
+v 34602
+v 30324
+v 31422
+v 32684
+v 34627
+v 30998
+v 32631
+v 30907
+v 31272
+v 32077
+v 30707
+v 32542
+v 33555
+v 35498
+v 30863
+v 35296
+v 31920
+v 35104
+v 33923
+v 31233
+v 34495
+v 31745
+v 35439
+v 32612
+v 31929
+v 34701
+v 34319
+v 30892
+v 28989
+v 33646
+v 34502
+v 31457
+v 30763
+v 32477
+v 32615
+v 30524
+v 34883
+v 31251
+v 31023
+v 34268
+v 34750
+v 30635
+v 29077
+v 34997
+v 32767
+v 32961
+v 32368
+v 31102
+v 35527
+v 33481
+v 32283
+v 29181
+v 31576
+v 32548
+v 31330
+v 35523
+v 35273
+v 34837
+v 35168
+v 34402
+v 29605
+v 32921
+v 31439
+v 33521
+v 30814
+v 34419
+v 33414
+v 33949
+v 32626
+v 30837
+v 32174
+v 35139
+v 30398
+v 31271
+v 33097
+v 31017
+v 34266
+v 31411
+v 30193
+v 30499
+v 33154
+v 33807
+v 33666
+v 34955
+v 35377
+v 29831
+v 33388
+v 30787
+v 35280
+v 32835
+v 31214
+v 31031
+v 31303
+v 31093
+v 30482
+v 35374
+v 30841
+v 34569
+v 32387
+v 32944
+v 30975
+v 32579
+v 33491
+v 31370
+v 35060
+v 30277
+v 31747
+v 35368
+v 35641
+v 34986
+v 32183
+v 35303
+v 35718
+v 32442
+v 33462
+v 32718
+v 35408
+v 33051
+v 34494
+v 34483
+v 31350
+v 33989
+v 31728
+v 32007
+v 30969
+v 34187
+v 33689
+v 29502
+v 30126
+v 32919
+v 31436
+v 31269
+v 35505
+v 32327
+v 34855
+v 33812
+v 29810
+v 32029
+v 31815
+v 35423
+v 32462
+v 32259
+v 32776
+v 35462
+v 30619
+v 31874
+v 33948
+v 31108
+v 31162
+v 33418
+v 35651
+v 29023
+v 30261
+v 34302
+v 30195
+v 31810
+v 35838
+v 30149
+v 35053
+v 30395
+v 33533
+v 31328
+v 35251
+v 34702
+v 31553
+v 35088
+v 34831
+v 34670
+v 32095
+v 34306
+v 33439
+v 31902
+v 30475
+v 30627
+v 35338
+v 32586
+v 31174
+v 30851
+v 35624
+v 34440
+v 33416
+v 33693
+v 31594
+v 31866
+v 30716
+v 33302
+v 31154
+v 30978
+v 31967
+v 33310
+v 35292
+v 29184
+v 34734
+v 35810
+v 34042
+v 33196
+v 31211
+v 31047
+v 35532
+v 29354
+v 32347
+v 33705
+v 28584
+v 34090
+v 30160
+v 35324
+v 31342
+v 30940
+v 35432
+v 31078
+v 34976
+v 33514
+v 33747
+v 35819
+v 28859
+v 32338
+v 32646
+v 33277
+v 33902
+v 31059
+v 31818
+v 31177
+v 30466
+v 35034
+v 30196
+v 32395
+v 35470
+v 35184
+v 30991
+v 30696
+v 32748
+v 32900
+v 34384
+v 33486
+v 30843
+v 35715
+v 32241
+v 31843
+v 33273
+v 35543
+v 34348
+v 35465
+v 35117
+v 31207
+v 32583
+v 34583
+v 34506
+v 34715
+v 29571
+v 35566
+v 34339
+v 33800
+v 30487
+v 29936
+v 31644
+v 32234
+v 30568
+v 32216
+v 29951
+v 30354
+v 32164
+v 32079
+v 31987
+v 31998
+v 32936
+v 35118
+v 35774
+v 30786
+v 30107
+v 31178
+v 30902
+v 34863
+v 32763
+v 32048
+v 30925
+v 34956
+v 34982
+v 31312
+v 33189
+v 33368
+v 35800
+v 29017
+v 33523
+v 32581
+v 35406
+v 33131
+v 33876
+v 31875
+v 30258
+v 35565
+v 31234
+v 31799
+v 35254
+v 30120
+v 31258
+v 30220
+v 31646
+v 34083
+v 33943
+v 35914
+v 31956
+v 30994
+v 30884
+v 33377
+v 32884
+v 34335
+v 33492
+v 31011
+v 35412
+v 34682
+v 30516
+v 34836
+v 31282
+v 32701
+v 35212
+v 31959
+v 31245
+v 31051
+v 32310
+v 35329
+v 34381
+v 34197
+v 30599
+v 31012
+v 33041
+v 34329
+v 33426
+v 31871
+v 35020
+v 33529
+v 32521
+v 35440
+v 34826
+v 32672
+v 32119
+v 33187
+v 30807
+v 34216
+v 28953
+v 32194
+v 29147
+v 34726
+v 30761
+v 31471
+v 35648
+v 30652
+v 31241
+v 29701
+v 32948
+v 34137
+v 29690
+v 32738
+v 33760
+v 30692
+v 32755
+v 31510
+v 32034
+v 33292
+v 33810
+v 31043
+v 34605
+v 35632
+v 31640
+v 32258
+v 33679
+v 31899
+v 32325
+v 32564
+v 32616
+v 35510
+v 30236
+v 32606
+v 33525
+v 35370
+v 34951
+v 33552
+v 31041
+v 32458
+v 32393
+v 34346
+v 31895
+v 32123
+v 33044
+v 30596
+v 34631
+v 33856
+v 32190
+v 33701
+v 35529
+v 34689
+v 31983
+v 31026
+v 32412
+v 30086
+v 31068
+v 29775
+v 34530
+v 32171
+v 30908
+v 32737
+v 31062
+v 31127
+v 32015
+v 31334
+v 35436
+v 34647
+v 35763
+v 35483
+v 31007
+v 35799
+v 31288
+v 34939
+v 34308
+v 32507
+v 35073
+v 30679
+v 33115
+v 33567
+v 32890
+v 30327
+v 35836
+v 34926
+v 33105
+v 32794
+v 32173
+v 32642
+v 31630
+v 32471
+v 32103
+v 34273
+v 30607
+v 30960
+v 32620
+v 31565
+v 30941
+v 34423
+v 34748
+v 33945
+v 35847
+v 34371
+v 32188
+v 34001
+v 31391
+v 35885
+v 31071
+v 31598
+v 35155
+v 31236
+v 31980
+v 33338
+v 31882
+v 32971
+v 32635
+v 35000
+v 33354
+v 34606
+v 31556
+v 33386
+v 30100
+v 30471
+v 34520
+v 31995
+v 33611
+v 30744
+v 30537
+v 30268
+v 33782
+v 31074
+v 31858
+v 33436
+v 30831
+v 35196
+v 35942
+v 35626
+v 29740
+v 31223
+v 33143
+v 32083
+v 30158
+v 34186
+v 31795
+v 32213
+v 32726
+v 31972
+v 31976
+v 32147
+v 31577
+v 33313
+v 33749
+v 34690
+v 32750
+v 30922
+v 33479
+v 34820
+v 31200
+v 29156
+v 30933
+v 31336
+v 32285
+v 34182
+v 32741
+v 31946
+v 33378
+v 34459
+v 31906
+v 31734
+v 32247
+v 34316
+v 35134
+v 31583
+v 33906
+v 34498
+v 33043
+v 33087
+v 31714
+v 30638
+v 31240
+v 31538
+v 33485
+v 28847
+v 31150
+v 30247
+v 30134
+v 35623
+v 31685
+v 35618
+v 34276
+v 31716
+v 32082
+v 33922
+v 32078
+v 30699
+v 31760
+v 35610
+v 32211
+v 32380
+v 31305
+v 34111
+v 31778
+v 30759
+v 31712
+v 34354
+v 31121
+v 33215
+v 35644
+v 34591
+v 31641
+v 34589
+v 30769
+v 31934
+v 33851
+v 32535
+v 31170
+v 33826
+v 34930
+v 32604
+v 31435
+v 33687
+v 34784
+v 32916
+v 34512
+v 33016
+v 33177
+v 34367
+v 34914
+v 34928
+v 34443
+v 34868
+v 35767
+v 34194
+v 32935
+v 31010
+v 30838
+v 33866
+v 34810
+v 35069
+v 31900
+v 35525
+v 31473
+v 35481
+v 34474
+v 30765
+v 29917
+v 30320
+v 30859
+v 35284
+v 34597
+v 33895
+v 34889
+v 34238
+v 30691
+v 34806
+v 34842
+v 30060
+v 31302
+v 35032
+v 31205
+v 32958
+v 35026
+v 32415
+v 35207
+v 30446
+v 32204
+v 33504
+v 33045
+v 32470
+v 32757
+v 33921
+v 32806
+v 31755
+v 31772
+v 35700
+v 30778
+v 35503
+v 33560
+v 35334
+v 31800
+v 31406
+v 31181
+v 33116
+v 34925
+v 30376
+v 34190
+v 34198
+v 32648
+v 35299
+v 32638
+v 35344
+v 32637
+v 32233
+v 34529
+v 34480
+v 31840
+v 30286
+v 33926
+v 33382
+v 31038
+v 35243
+v 32874
+v 32146
+v 31164
+v 34547
+v 34646
+v 35197
+v 33286
+v 32206
+v 35899
+v 35277
+v 32017
+v 34693
+v 35813
+v 34593
+v 33959
+v 35100
+v 33970
+v 30646
+v 35040
+v 34872
+v 35006
+v 32102
+v 32404
+v 34692
+v 30601
+v 33638
+v 32457
+v 34033
+v 34497
+v 32591
+v 34811
+v 34353
+v 31493
+v 34253
+v 33373
+v 31040
+v 30966
+v 30570
+v 34320
+v 32293
+v 33027
+v 31314
+v 33771
+v 31612
+v 31104
+v 35667
+v 29931
+v 35712
+v 34291
+v 32761
+v 34403
+v 33266
+v 30658
+v 30996
+v 33454
+v 35809
+v 33988
+v 31860
+v 32708
+v 32411
+v 35166
+v 30973
+v 31750
+v 35327
+v 30819
+v 31957
+v 30686
+v 30839
+v 33929
+v 33531
+v 34093
+v 33520
+v 33936
+v 32248
+v 33035
+v 34271
+v 35828
+v 35162
+v 30720
+v 30678
+v 34759
+v 33400
+v 31913
+v 35070
+v 32306
+v 30772
+v 33324
+v 34380
+v 34735
+v 34270
+v 34230
+v 31387
+v 33729
+v 32231
+v 33150
+v 33597
+v 32075
+v 35896
+v 32630
+v 34151
+v 32483
+v 35113
+v 30782
+v 33468
+v 31552
+v 34369
+v 31256
+v 35711
+v 32700
+v 33973
+v 32566
+v 33511
+v 29634
+v 30496
+v 34224
+v 33060
+v 32968
+v 31299
+v 35135
+v 33456
+v 31091
+v 35051
+v 35815
+v 31905
+v 35214
+v 32999
+v 33020
+v 33870
+v 31224
+v 34901
+v 29873
+v 33571
+v 29890
+v 35363
+v 32768
+v 29865
+v 32117
+v 33618
+v 32913
+v 33379
+v 34654
+v 34410
+v 30952
+v 30147
+v 34807
+v 30937
+v 32927
+v 32886
+v 31455
+v 35241
+v 30532
+v 35175
+v 35161
+v 32030
+v 32540
+v 34675
+v 34408
+v 31700
+v 33997
+v 31816
+v 35163
+v 30829
+v 35677
+v 34418
+v 34775
+v 33086
+v 33723
+v 32557
+v 34622
+v 35261
+v 30555
+v 33331
+v 31826
+v 34933
+v 32157
+v 32352
+v 35455
+v 31931
+v 32198
+v 31458
+v 31792
+v 35464
+v 34343
+v 34738
+v 31204
+v 30417
+v 31203
+v 31067
+v 34211
+v 32369
+v 34798
+v 35659
+v 33451
+v 33853
+v 31016
+v 34578
+v 33221
+v 33219
+v 35274
+v 31985
+v 31307
+v 34446
+v 30659
+v 31084
+v 30530
+v 34522
+v 30986
+v 32492
+v 32658
+v 33070
+v 31674
+v 33157
+v 34853
+v 30920
+v 31773
+v 32766
+v 30425
+v 31864
+v 30954
+v 31297
+v 31190
+v 33684
+v 32533
+v 29993
+v 33455
+v 33278
+v 32376
+v 34565
+v 34438
+v 31635
+v 33746
+v 32723
+v 34657
+v 32929
+v 32644
+v 32882
+v 30009
+v 34857
+v 35555
+v 33678
+v 35530
+v 35055
+v 30544
+v 35001
+v 30434
+v 31624
+v 31560
+v 31147
+v 34560
+v 31373
+v 32597
+v 35480
+v 34229
+v 30426
+v 35559
+v 30130
+v 34212
+v 29900
+v 35313
+v 35129
+v 31352
+v 34808
+v 30030
+v 30926
+v 33342
+v 34566
+v 32911
+v 35792
+v 30811
+v 32435
+v 32321
+v 35388
+v 34031
+v 30844
+v 33628
+v 33579
+v 34918
+v 35884
+v 35764
+v 33391
+v 35150
+v 35622
+v 32976
+v 32421
+v 33919
+v 32982
+v 34450
+v 32858
+v 35695
+v 33251
+v 31807
+v 35010
+v 32838
+v 33396
+v 33303
+v 34407
+v 34954
+v 35553
+v 32137
+v 34517
+v 32413
+v 31675
+v 34218
+v 31896
+v 31382
+v 31446
+v 32878
+v 31380
+v 33002
+v 32063
+v 31825
+v 34545
+v 33495
+v 34919
+v 29426
+v 32500
+v 31642
+v 33519
+v 32122
+v 35743
+v 33885
+v 34712
+v 32589
+v 32237
+v 32224
+v 32153
+v 31614
+v 33404
+v 35789
+v 34297
+v 30816
+v 35538
+v 35396
+v 32932
+v 33869
+v 30651
+v 31809
+v 34819
+v 35473
+v 35039
+v 34948
+v 33987
+v 31706
+v 31244
+v 35360
+v 34983
+v 30278
+v 30757
+v 30604
+v 34133
+v 35887
+v 30388
+v 31045
+v 32567
+v 33690
+v 32945
+v 35213
+v 32107
+v 29879
+v 31319
+v 34169
+v 35216
+v 33253
+v 35680
+v 33832
+v 31890
+v 35865
+v 32956
+v 34466
+v 35085
+v 34012
+v 31022
+v 35121
+v 32543
+v 31055
+v 30934
+v 29948
+v 30888
+v 31536
+v 34246
+v 35639
+v 32949
+v 35453
+v 34130
+v 32463
+v 34964
+v 34667
+v 35479
+v 35589
+v 34157
+v 32335
+v 35786
+v 31423
+v 32868
+v 31448
+v 31242
+v 30567
+v 34799
+v 31402
+v 35181
+v 34895
+v 34894
+v 33880
+v 35124
+v 35617
+v 35586
+v 34086
+v 31292
+v 35704
+v 35621
+v 33648
+v 33323
+v 32243
+v 31736
+v 31323
+v 31266
+v 32654
+v 31428
+v 30732
+v 35517
+v 31711
+v 34023
+v 30799
+v 31111
+v 34487
+v 31475
+v 31496
+v 30221
+v 35751
+v 33281
+v 30743
+v 34871
+v 35282
+v 34144
+v 31647
+v 35652
+v 32090
+v 32324
+v 31141
+v 34531
+v 33498
+v 34158
+v 35630
+v 35447
+v 31793
+v 33067
+v 34814
+v 30936
+v 31569
+v 33482
+v 34791
+v 31135
+v 35658
+v 32931
+v 31149
+v 35182
+v 32522
+v 31551
+v 33672
+v 35257
+v 35661
+v 35309
+v 34995
+v 35444
+v 33641
+v 33785
+v 34080
+v 35446
+v 35348
+v 34249
+v 33478
+v 30662
+v 34969
+v 30812
+v 30988
+v 33797
+v 35489
+v 35441
+v 30893
+v 35452
+v 35438
+v 35697
+v 33432
+v 33450
+v 32773
+v 30274
+v 31179
+v 33507
+v 34242
+v 32939
+v 31865
+v 31986
+v 32125
+v 35136
+v 34642
+v 34416
+v 35560
+v 35693
+v 31718
+v 34176
+v 32651
+v 33704
+v 32480
+v 33941
+v 32618
+v 31981
+v 33372
+v 33532
+v 30923
+v 34733
+v 31298
+v 32112
+v 30565
+v 32172
+v 33357
+v 32154
+v 35276
+v 35567
+v 33777
+v 32779
+v 32683
+v 34526
+v 32451
+v 33831
+v 33234
+v 32390
+v 31310
+v 33168
+v 33813
+v 31857
+v 32270
+v 33811
+v 31075
+v 35316
+v 33140
+v 34299
+v 35671
+v 35402
+v 33415
+v 29986
+v 33123
+v 33375
+v 29944
+v 35463
+v 33698
+v 33194
+v 32130
+v 34287
+v 33026
+v 34243
+v 34200
+v 35096
+v 32847
+v 31036
+v 33617
+v 32587
+v 33295
+v 32001
+v 33084
+v 33674
+v 31192
+v 35772
+v 34406
+v 35832
+v 32474
+v 35635
+v 35047
+v 35325
+v 34061
+v 35562
+v 35863
+v 34763
+v 31125
+v 32242
+v 31919
+v 31295
+v 35456
+v 33688
+v 34749
+v 32212
+v 33918
+v 35308
+v 30989
+v 35356
+v 35901
+v 30791
+v 34923
+v 30864
+v 34173
+v 33411
+v 32038
+v 33534
+v 33030
+v 35493
+v 30938
+v 31975
+v 35859
+v 32953
+v 34906
+v 34769
+v 31683
+v 32490
+v 34298
+v 31698
+v 32804
+v 31653
+v 30630
+v 35683
+v 32288
+v 32373
+v 35248
+v 30392
+v 31961
+v 33939
+v 35856
+v 33445
+v 34742
+v 31889
+v 32225
+v 35598
+v 31928
+v 33899
+v 33276
+v 31225
+v 31103
+v 35414
+v 33726
+v 32754
+v 32639
+v 33078
+v 34236
+v 30118
+v 33952
+v 33272
+v 31431
+v 32313
+v 33161
+v 30624
+v 31222
+v 33524
+v 33623
+v 31396
+v 32825
+v 34637
+v 31888
+v 31148
+v 33012
+v 33052
+v 32571
+v 33901
+v 33348
+v 34897
+v 32526
+v 35908
+v 32385
+v 33761
+v 33464
+v 35469
+v 32762
+v 31566
+v 32649
+v 31546
+v 31160
+v 33772
+v 31485
+v 32695
+v 33739
+v 35347
+v 34095
+v 33134
+v 29780
+v 35701
+v 30632
+v 35375
+v 34071
+v 35818
+v 35696
+v 35319
+v 33275
+v 33742
+v 30564
+v 32008
+v 33126
+v 34005
+v 30880
+v 32447
+v 31677
+v 35485
+v 30442
+v 30992
+v 33845
+v 31664
+v 34878
+v 31693
+v 31238
+v 35823
+v 30703
+v 31372
+v 32028
+v 33799
+v 34280
+v 33494
+v 32990
+v 34336
+v 32770
+v 30534
+v 35894
+v 32687
+v 32678
+v 31140
+v 33787
+v 30626
+v 34849
+v 33208
+v 31696
+v 35362
+v 35267
+v 32042
+v 33159
+v 34870
+v 32712
+v 33905
+v 35491
+v 31246
+v 32680
+v 33145
+v 31306
+v 31909
+v 34777
+v 32319
+v 34103
+v 33241
+v 33225
+v 34844
+v 31002
+v 33631
+v 31095
+v 30810
+v 30762
+v 34102
+v 34331
+v 34705
+v 35067
+v 30950
+v 35002
+v 34333
+v 33913
+v 32176
+v 32550
+v 32823
+v 31324
+v 31491
+v 33424
+v 31230
+v 31425
+v 33668
+v 31878
+v 35279
+v 32576
+v 35520
+v 34793
+v 33947
+v 34505
+v 33933
+v 34272
+v 32938
+v 33716
+v 33089
+v 31625
+v 34205
+v 34088
+v 34971
+v 35226
+v 35862
+v 33328
+v 32345
+v 29746
+v 32843
+v 34424
+v 32476
+v 31024
+v 34754
+v 33725
+v 32964
+v 35568
+v 34488
+v 30545
+v 35656
+v 33932
+v 31208
+v 34372
+v 30106
+v 35484
+v 30452
+v 35420
+v 31403
+v 31274
+v 32922
+v 33814
+v 30579
+v 35191
+v 35500
+v 32942
+v 33413
+v 34011
+v 34659
+v 33256
+v 34131
+v 34454
+v 35112
+v 31993
+v 31691
+v 30463
+v 32580
+v 30766
+v 35678
+v 31499
+v 35583
+v 31338
+v 30296
+v 33838
+v 34934
+v 31845
+v 31466
+v 32006
+v 35317
+v 30227
+v 35386
+v 35643
+v 35687
+v 30962
+v 32487
+v 34639
+v 30872
+v 32669
+v 35153
+v 33149
+v 33778
+v 34604
+v 33740
+v 35544
+v 31289
+v 30968
+v 32149
+v 35694
+v 33652
+v 33098
+v 33397
+v 31213
+v 35044
+v 32294
+v 33075
+v 32040
+v 35157
+v 35881
+v 31989
+v 35337
+v 34279
+v 30636
+v 32627
+v 31626
+v 30739
+v 29932
+v 31152
+v 35030
+v 35545
+v 33142
+v 32464
+v 34581
+v 34132
+v 35107
+v 35264
+v 31923
+v 31098
+v 34051
+v 30508
+v 32179
+v 30543
+v 35384
+v 30972
+v 34860
+v 35761
+v 30914
+v 31120
+v 31907
+v 35354
+v 32824
+v 35835
+v 32508
+v 35768
+v 32054
+v 31780
+v 31472
+v 31727
+v 32000
+v 31126
+v 31719
+v 34921
+v 31591
+v 32263
+v 35188
+v 32592
+v 32614
+v 35728
+v 33998
+v 33148
+v 30155
+v 32774
+v 33643
+v 32760
+v 31962
+v 31432
+v 35343
+v 34300
+v 33056
+v 35364
+v 33613
+v 35222
+v 35369
+v 33994
+v 35242
+v 33676
+v 34753
+v 33181
+v 34399
+v 32342
+v 31908
+v 32676
+v 32652
+v 30959
+v 35208
+v 34070
+v 31756
+v 34174
+v 33881
+v 34586
+v 33847
+v 35807
+v 31046
+v 30690
+v 31697
+v 32098
+v 31533
+v 35515
+v 32734
+v 33816
+v 32299
+v 31056
+v 33677
+v 33709
+v 34630
+v 32282
+v 32410
+v 34828
+v 34691
+v 32041
+v 35003
+v 32727
+v 33446
+v 35245
+v 31157
+v 35171
+v 32634
+v 34941
+v 35913
+v 32905
+v 35657
+v 30704
+v 32405
+v 31775
+v 33681
+v 33821
+v 33614
+v 35421
+v 32711
+v 30444
+v 35524
+v 31884
+v 32887
+v 35103
+v 31643
+v 31072
+v 35603
+v 32747
+v 31286
+v 34561
+v 35689
+v 33242
+v 32528
+v 33754
+v 33859
+v 33425
+v 30728
+v 30416
+v 32246
+v 32677
+v 33942
+v 35072
+v 32414
+v 32012
+v 31216
+v 32810
+v 33156
+v 33191
+v 32170
+v 35649
+v 30754
+v 31262
+v 31144
+v 34741
+v 33707
+v 34960
+v 35339
+v 32613
+v 35723
+v 33542
+v 32401
+v 33593
+v 33920
+v 32389
+v 33627
+v 31662
+v 34417
+v 32952
+v 31070
+v 35802
+v 31186
+v 32021
+v 32217
+v 34676
+v 33198
+v 33362
+v 33265
+v 35516
+v 35024
+v 33101
+v 35720
+v 31507
+v 33961
+v 32344
+v 34852
+v 35744
+v 34911
+v 30985
+v 31912
+v 31831
+v 31304
+v 33017
+v 32728
+v 33634
+v 30854
+v 31287
+v 31243
+v 34541
+v 34228
+v 32782
+v 33463
+v 31255
+v 35547
+v 32443
+v 31938
+v 30563
+v 32195
+v 35442
+v 31057
+v 32798
+v 32450
+v 30921
+v 31434
+v 35775
+v 34109
+v 35721
+v 35291
+v 33449
+v 35285
+v 31632
+v 32460
+v 31758
+v 32094
+v 30032
+v 33657
+v 31469
+v 31158
+v 32300
+v 31464
+v 35754
+v 32318
+v 35595
+v 33459
+v 32560
+v 33006
+v 35528
+v 35359
+v 35218
+v 33862
+v 35759
+v 34779
+v 34379
+v 35418
+v 31842
+v 34920
+v 32479
+v 31927
+v 33180
+v 31014
+v 35844
+v 33528
+v 31851
+v 35834
+v 30823
+v 32628
+v 33576
+v 31025
+v 32880
+v 33398
+v 35160
+v 34523
+v 35719
+v 35475
+v 33467
+v 32675
+v 33874
+v 34516
+v 31645
+v 31030
+v 30603
+v 31952
+v 31690
+v 32365
+v 32437
+v 35638
+v 34257
+v 34453
+v 31229
+v 33697
+v 34850
+v 35575
+v 33408
+v 33480
+v 33178
+v 31275
+v 30505
+v 32128
+v 34319
+v 34127
+v 35387
+v 32085
+v 33642
+v 34290
+v 33349
+v 34244
+v 33655
+v 33483
+v 35143
+v 34958
+v 32863
+v 32650
+v 35634
+v 33141
+v 34508
+v 35855
+v 33572
+v 31789
+v 33332
+v 34688
+v 35585
+v 34571
+v 34695
+v 30700
+v 32201
+v 35748
+v 31953
+v 35757
+v 32686
+v 31171
+v 35305
+v 33202
+v 31449
+v 35804
+v 30849
+v 35889
+v 32640
+v 33099
+v 32753
+v 35101
+v 32661
+v 35008
+v 33088
+v 33792
+v 32367
+v 30526
+v 32355
+v 35597
+v 32499
+v 32406
+v 35270
+v 30836
+v 32116
+v 35488
+v 33969
+v 32003
+v 35021
+v 34172
+v 31609
+v 33293
+v 30942
+v 34636
+v 33489
+v 33632
+v 32828
+v 33320
+v 34073
+v 32291
+v 32022
+v 32593
+v 30832
+v 32809
+v 32846
+v 35663
+v 33004
+v 32066
+v 34195
+v 31835
+v 31915
+v 34213
+v 30660
+v 32577
+v 35286
+v 34397
+v 35895
+v 31451
+v 33021
+v 32184
+v 34219
+v 34610
+v 32221
+v 35312
+v 34993
+v 34120
+v 35831
+v 34264
+v 32702
+v 33882
+v 34751
+v 31318
+v 33667
+v 35304
+v 33080
+v 32897
+v 31082
+v 35709
+v 31390
+v 33429
+v 32602
+v 32481
+v 32025
+v 33887
+v 32351
+v 35853
+v 34598
+v 33092
+v 35684
+v 34099
+v 33965
+v 32636
+v 31770
+v 33351
+v 31097
+v 32596
+v 34482
+v 32937
+v 31604
+v 35596
+v 35037
+v 32906
+v 34896
+v 35930
+v 34680
+v 29991
+v 31483
+v 33064
+v 34003
+v 33888
+v 31254
+v 30546
+v 31587
+v 32549
+v 32118
+v 31868
+v 33809
+v 35548
+v 34540
+v 34736
+v 34283
+v 35903
+v 34944
+v 35275
+v 35730
+v 34796
+v 30822
+v 31731
+v 32924
+v 32191
+v 34962
+v 34261
+v 33392
+v 32967
+v 34740
+v 31766
+v 35611
+v 35029
+v 33818
+v 34303
+v 32354
+v 34912
+v 31992
+v 34884
+v 31971
+v 35395
+v 34539
+v 35945
+v 33950
+v 32655
+v 31679
+v 34567
+v 32359
+v 35646
+v 35745
+v 32513
+v 33622
+v 35078
+v 34721
+v 32862
+v 30644
+v 33719
+v 31221
+v 30919
+v 35263
+v 35691
+v 35361
+v 35474
+v 35604
+v 34079
+v 32425
+v 34665
+v 31573
+v 31744
+v 31824
+v 33299
+v 30229
+v 31747
+v 32767
+v 35127
+v 32068
+v 34382
+v 31470
+v 34461
+v 35331
+v 34818
+v 32792
+v 35065
+v 35676
+v 35244
+v 31854
+v 31541
+v 34252
+v 31606
+v 34719
+v 35613
+v 35084
+v 35115
+v 35345
+v 35056
+v 32059
+v 35582
+v 35898
+v 33670
+v 32817
+v 33438
+v 32312
+v 34585
+v 35866
+v 30815
+v 34330
+v 34237
+v 31616
+v 31761
+v 32601
+v 35357
+v 34342
+v 35300
+v 31790
+v 32099
+v 34431
+v 35801
+v 34183
+v 31322
+v 34096
+v 33135
+v 31852
+v 33406
+v 32796
+v 35459
+v 33830
+v 35827
+v 30346
+v 34347
+v 33318
+v 35907
+v 32049
+v 34259
+v 32200
+v 32372
+v 35258
+v 34457
+v 35025
+v 31918
+v 35888
+v 33279
+v 35542
+v 32955
+v 34225
+v 31201
+v 35814
+v 31678
+v 33240
+v 34996
+v 35625
+v 33137
+v 30738
+v 35826
+v 33875
+v 34177
+v 35714
+v 30800
+v 32881
+v 33330
+v 32733
+v 35059
+v 30411
+v 32609
+v 31378
+v 31008
+v 30489
+v 32940
+v 34041
+v 31667
+v 30326
+v 31820
+v 30792
+v 32969
+v 32997
+v 35429
+v 31462
+v 34500
+v 35427
+v 31239
+v 31567
+v 31291
+v 30693
+v 31100
+v 33419
+v 34787
+v 34139
+v 33022
+v 35746
+v 34990
+v 35405
+v 35185
+v 33300
+v 32503
+v 35477
+v 30898
+v 32431
+v 33032
+v 32240
+v 31681
+v 31383
+v 35433
+v 35729
+v 35108
+v 35935
+v 34864
+v 35726
+v 33517
+v 31193
+v 31723
+v 32276
+v 35733
+v 32432
+v 33647
+v 31206
+v 34940
+v 31461
+v 34075
+v 31539
+v 34025
+v 33183
+v 31317
+v 33971
+v 35803
+v 31401
+v 31531
+v 35114
+v 30741
+v 31853
+v 30645
+v 33218
+v 32266
+v 35664
+v 33493
+v 32537
+v 32565
+v 34204
+v 35393
+v 31447
+v 31901
+v 35005
+v 31769
+v 35471
+v 35681
+v 34460
+v 35660
+v 31524
+v 35381
+v 32080
+v 34433
+v 33041
+v 35796
+v 30895
+v 30857
+v 34614
+v 35590
+v 35526
+v 35367
+v 33333
+v 31183
+v 31094
+v 33510
+v 34106
+v 35202
+v 34970
+v 33018
+v 35487
+v 35403
+v 33720
+v 34112
+v 34961
+v 35636
+v 33144
+v 32093
+v 32582
+v 33304
+v 33259
+v 34326
+v 35531
+v 33731
+v 33200
+v 35152
+v 34640
+v 34394
+v 32194
+v 31438
+v 32092
+v 34247
+v 32498
+v 35330
+v 35932
+v 35640
+v 32013
+v 34968
+v 31153
+v 33539
+v 32096
+v 35378
+v 34097
+v 33421
+v 34645
+v 30979
+v 31343
+v 35777
+v 35727
+v 31929
+v 33380
+v 32196
+v 35857
+v 31429
+v 35666
+v 34378
+v 35340
+v 30562
+v 32692
+v 34755
+v 35482
+v 32375
+v 32449
+v 32253
+v 31110
+v 31746
+v 30462
+v 34650
+v 34499
+v 35594
+v 33195
+v 31505
+v 33872
+v 32502
+v 32888
+v 32992
+v 31113
+v 35588
+v 34328
+v 33694
+v 34421
+v 32316
+v 35156
+v 30474
+v 35472
+v 34886
+v 32790
+v 33640
+v 35535
+v 32189
+v 30874
+v 34575
+v 32109
+v 33601
+v 35328
+v 32830
+v 34069
+v 31263
+v 33034
+v 32033
+v 31936
+v 33564
+v 31774
+v 35071
+v 34162
+v 31173
+v 35448
+v 31315
+v 31054
+v 33321
+v 35747
+v 33958
+v 34936
+v 30378
+v 31637
+v 35409
+v 32215
+v 34067
+v 33502
+v 33133
+v 31362
+v 32545
+v 32350
+v 35430
+v 34309
+v 33541
+v 31550
+v 34076
+v 34185
+v 34038
+v 34913
+v 33409
+v 35260
+v 34907
+v 34963
+v 33363
+v 35376
+v 32035
+v 35272
+v 35435
+v 35293
+v 31762
+v 34360
+v 32292
+v 31608
+v 32624
+v 35861
+v 31029
+v 31555
+v 34063
+v 32594
+v 32685
+v 34156
+v 33573
+v 32058
+v 33556
+v 31682
+v 35246
+v 32301
+v 31107
+v 35569
+v 35076
+v 32330
+v 33635
+v 32729
+v 35702
+v 31561
+v 31232
+v 32279
+v 34580
+v 30701
+v 33548
+v 32160
+v 30771
+v 35540
+v 35426
+v 32590
+v 32409
+v 33120
+v 33629
+v 34388
+v 32746
+v 32785
+v 34655
+v 32232
+v 31940
+v 33999
+v 31351
+v 33776
+v 32791
+v 33748
+v 35599
+v 35647
+v 33568
+v 34052
+v 35090
+v 33570
+v 33516
+v 34922
+v 35527
+v 35546
+v 31847
+v 33835
+v 33499
+v 33184
+v 33444
+v 35737
+v 33883
+v 30702
+v 34150
+v 34296
+v 34077
+v 32467
+v 31977
+v 30181
+v 34833
+v 34110
+v 31730
+v 34386
+v 31704
+v 35457
+v 33227
+v 31668
+v 31651
+v 33808
+v 32820
+v 34980
+v 34800
+v 33721
+v 31320
+v 33466
+v 35495
+v 35655
+v 32801
+v 32423
+v 31021
+v 35195
+v 31785
+v 32730
+v 32670
+v 33339
+v 35606
+v 34981
+v 33908
+v 34845
+v 34513
+v 31787
+v 33033
+v 34774
+v 34554
+v 32573
+v 31939
+v 34729
+v 32659
+v 31199
+v 33164
+v 35451
+v 32703
+v 35404
+v 35399
+v 31073
+v 33284
+v 34046
+v 30687
+v 30561
+v 34188
+v 35933
+v 30793
+v 31968
+v 35501
+v 33472
+v 34848
+v 35009
+v 34836
+v 30798
+v 34792
+v 31803
+v 31732
+v 33916
+v 33978
+v 34524
+v 33781
+v 35210
+v 33592
+v 32199
+v 31049
+v 31620
+v 32696
+v 31518
+v 35549
+v 34068
+v 33992
+v 31503
+v 34778
+v 33199
+v 34584
+v 35512
+v 31771
+v 31963
+v 32120
+v 31984
+v 31337
+v 33764
+v 32688
+v 32716
+v 33914
+v 32625
+v 35417
+v 35167
+v 32298
+v 33497
+v 32245
+v 34060
+v 31649
+v 33179
+v 31830
+v 34233
+v 35521
+v 34015
+v 35605
+v 32572
+v 34776
+v 34760
+v 35041
+v 31748
+v 34166
+v 33230
+v 33270
+v 30878
+v 35539
+v 33053
+v 31453
+v 32864
+v 35502
+v 34838
+v 32260
+v 33291
+v 34556
+v 33308
+v 32358
+v 31280
+v 34563
+v 34966
+v 31897
+v 31273
+v 32525
+v 31411
+v 35342
+v 33104
+v 31523
+v 33046
+v 31279
+v 34175
+v 34422
+v 35690
+v 30386
+v 31253
+v 35758
+v 34727
+v 32229
+v 34119
+v 32202
+v 32081
+v 35194
+v 34034
+v 35669
+v 33294
+v 32374
+v 35169
+v 35522
+v 34393
+v 34404
+v 35104
+v 35086
+v 33028
+v 34788
+v 33844
+v 33665
+v 31960
+v 34232
+v 35183
+v 33231
+v 33077
+v 34493
+v 30947
+v 33071
+v 32079
+v 31481
+v 31165
+v 33285
+v 35536
+v 31180
+v 34538
+v 31060
+v 31168
+v 34441
+v 35576
+v 32870
+v 34559
+v 31358
+v 33395
+v 32185
+v 32069
+v 35383
+v 33496
+v 31987
+v 31599
+v 31380
+v 30826
+v 34795
+v 33536
+v 31085
+v 32936
+v 33223
+v 33509
+v 33452
+v 34938
+v 34898
+v 33019
+v 34486
+v 31393
+v 33461
+v 34284
+v 35252
+v 35349
+v 32668
+v 32177
+v 35762
+v 34215
+v 31694
+v 32901
+v 30913
+v 33268
+v 32698
+v 34562
+v 32138
+v 32192
+v 33010
+v 35148
+v 33155
+v 33790
+v 33580
+v 34520
+v 33733
+v 34187
+v 33620
+v 30910
+v 31870
+v 33127
+v 30904
+v 32704
+v 34495
+v 33252
+v 34542
+v 33434
+v 35080
+v 33806
+v 34807
+v 35506
+v 33547
+v 35497
+v 33591
+v 34308
+v 34042
+v 32622
+v 35824
+v 35708
+v 32084
+v 30928
+v 32439
+v 35938
+v 34681
+v 34087
+v 32985
+v 32826
+v 34375
+v 32713
+v 30866
+v 33654
+v 35817
+v 30617
+v 34730
+v 31869
+v 34747
+v 31834
+v 33708
+v 35437
+v 34673
+v 33486
+v 32583
+v 33414
+v 31833
+v 34231
+v 34758
+v 33325
+v 31374
+v 31885
+v 33106
+v 33393
+v 33001
+v 34449
+v 31543
+v 31972
+v 34734
+v 31942
+v 34902
+v 35806
+v 33796
+v 31545
+v 33048
+v 31988
+v 34064
+v 35353
+v 32230
+v 32872
+v 34160
+v 31844
+v 34851
+v 35511
+v 30710
+v 35397
+v 35061
+v 32281
+v 33624
+v 33894
+v 33031
+v 34946
+v 31340
+v 31958
+v 32546
+v 33163
+v 32800
+v 35198
+v 32162
+v 33440
+v 32585
+v 31906
+v 31123
+v 34456
+v 34527
+v 31020
+v 31313
+v 35098
+v 34208
+v 31925
+v 34039
+v 33860
+v 33633
+v 31376
+v 35142
+v 34217
+v 32721
+v 33984
+v 33097
+v 32005
+v 34026
+v 31530
+v 31053
+v 31397
+v 33081
+v 34908
+v 34972
+v 35783
+v 35849
+v 32446
+v 32869
+v 32723
+v 34703
+v 33336
+v 34597
+v 32861
+v 31840
+v 33505
+v 35394
+v 34124
+v 34277
+v 33512
+v 33896
+v 34856
+v 33803
+v 33477
+v 33073
+v 35159
+v 32895
+v 33385
+v 33488
+v 31634
+v 30964
+v 32507
+v 31294
+v 34904
+v 31813
+v 34746
+v 34161
+v 32181
+v 32037
+v 35519
+v 31385
+v 33951
+v 32327
+v 31489
+v 35022
+v 33301
+v 31618
+v 34880
+v 32486
+v 34301
+v 34116
+v 33537
+v 35877
+v 31537
+v 31684
+v 34315
+v 32442
+v 31738
+v 33685
+v 34395
+v 31818
+v 35504
+v 34544
+v 35852
+v 30731
+v 33771
+v 30768
+v 33615
+v 34603
+v 31863
+v 31700
+v 33646
+v 31185
+v 32394
+v 33996
+v 33353
+v 34915
+v 34239
+v 33305
+v 33003
+v 31442
+v 31522
+v 35209
+v 32482
+v 31143
+v 34145
+v 34720
+v 30734
+v 32604
+v 32422
+v 35914
+v 35416
+v 32368
+v 33412
+v 31623
+v 32311
+v 34459
+v 35140
+v 32019
+v 34521
+v 31161
+v 35946
+v 31751
+v 35564
+v 33211
+v 35057
+v 31542
+v 32812
+v 33600
+v 33096
+v 32515
+v 31290
+v 34340
+v 35322
+v 32323
+v 35450
+v 32145
+v 31671
+v 35366
+v 32011
+v 34307
+v 33469
+v 35580
+v 31557
+v 31138
+v 32392
+v 32806
+v 35095
+v 30796
+v 33174
+v 34458
+v 33975
+v 31784
+v 33384
+v 31898
+v 31363
+v 34266
+v 32186
+v 33804
+v 33870
+v 34887
+v 31117
+v 31184
+v 34364
+v 32701
+v 32236
+v 32619
+v 32274
+v 32071
+v 33049
+v 32304
+v 32915
+v 34569
+v 32018
+v 33819
+v 32877
+v 34214
+v 34317
+v 33298
+v 35094
+v 35799
+v 32397
+v 33009
+v 35755
+v 31217
+v 35335
+v 32441
+v 33193
+v 35422
+v 33869
+v 34346
+v 31375
+v 31450
+v 33458
+v 34789
+v 35355
+v 32400
+v 34241
+v 33712
+v 31866
+v 32362
+v 32739
+v 33929
+v 35574
+v 32114
+v 32797
+v 34732
+v 33082
+v 32635
+v 35570
+v 31974
+v 34600
+v 35756
+v 33752
+v 31488
+v 33309
+v 32717
+v 35620
+v 33258
+v 32421
+v 32462
+v 34900
+v 32637
+v 33767
+v 35273
+v 33462
+v 34632
+v 35225
+v 34292
+v 31720
+v 33877
+v 31101
+v 35462
+v 34595
+v 33247
+v 34564
+v 32430
+v 35230
+v 35642
+v 34967
+v 31259
+v 34136
+v 31601
+v 31841
+v 32700
+v 32256
+v 32379
+v 32829
+v 31777
+v 32017
+v 33695
+v 31729
+v 34032
+v 33210
+v 33594
+v 34711
+v 34914
+v 32436
+v 33269
+v 33061
+v 33345
+v 32780
+v 31061
+v 33246
+v 34362
+v 33986
+v 31446
+v 34325
+v 34302
+v 35373
+v 33245
+v 35318
+v 33704
+v 31580
+v 35856
+v 34517
+v 32100
+v 33550
+v 35943
+v 31829
+v 31826
+v 34983
+v 30681
+v 34550
+v 34698
+v 34411
+v 34947
+v 34196
+v 34258
+v 32265
+v 35265
+v 35770
+v 31492
+v 32718
+v 33976
+v 35578
+v 31881
+v 33014
+v 34762
+v 35779
+v 32520
+v 35069
+v 33912
+v 32839
+v 34464
+v 32427
+v 35165
+v 32532
+v 34018
+v 32129
+v 32206
+v 35449
+v 34448
+v 32873
+v 35651
+v 35282
+v 31487
+v 33586
+v 32290
+v 31457
+v 34193
+v 34892
+v 30764
+v 32777
+v 31837
+v 33554
+v 31220
+v 31052
+v 35262
+v 35255
+v 30784
+v 34091
+v 35074
+v 33448
+v 34905
+v 31887
+v 35407
+v 32633
+v 31498
+v 33864
+v 35778
+v 34004
+v 34189
+v 35628
+v 35374
+v 32980
+v 34024
+v 35379
+v 34819
+v 31944
+v 35732
+v 35884
+v 34299
+v 33979
+v 33263
+v 30948
+v 35798
+v 30572
+v 32555
+v 33953
+v 32239
+v 34113
+v 34014
+v 34129
+v 33522
+v 32378
+v 34313
+v 34114
+v 32542
+v 35910
+v 32868
+v 34355
+v 35742
+v 31888
+v 32296
+v 32928
+v 35350
+v 32317
+v 35070
+v 35049
+v 35106
+v 32488
+v 34442
+v 34652
+v 35351
+v 35892
+v 35795
+v 32656
+v 34745
+v 32402
+v 31369
+v 34365
+v 35042
+v 32383
+v 35514
+v 32552
+v 31560
+v 33732
+v 31757
+v 33281
+v 33169
+v 32536
+v 33577
+v 34058
+v 33553
+v 33337
+v 31855
+v 33904
+v 31497
+v 34992
+v 33561
+v 32456
+v 33453
+v 35854
+v 32554
+v 35250
+v 34988
+v 34709
+v 31027
+v 34316
+v 32781
+v 34412
+v 35038
+v 31581
+v 32765
+v 35592
+v 34198
+v 35182
+v 32270
+v 35926
+v 33346
+v 35440
+v 33235
+v 32691
+v 32305
+v 31811
+v 34406
+v 31145
+v 34801
+v 33569
+v 34612
+v 32369
+v 35490
+v 32396
+v 32697
+v 33015
+v 34163
+v 35486
+v 32155
+v 34045
+v 31547
+v 31459
+v 31709
+v 32551
+v 30976
+v 31412
+v 34868
+v 34609
+v 34278
+v 31509
+v 33154
+v 35750
+v 32738
+v 35000
+v 32167
+v 34377
+v 32314
+v 35787
+v 31611
+v 35062
+v 34002
+v 35401
+v 33745
+v 35518
+v 33302
+v 35513
+v 32856
+v 32731
+v 34255
+v 33746
+v 33355
+v 35173
+v 32662
+v 33583
+v 33729
+v 32420
+v 35586
+v 34927
+v 33013
+v 35123
+v 33314
+v 33107
+v 35371
+v 32646
+v 35385
+v 33878
+v 35326
+v 33399
+v 35046
+v 33482
+v 34101
+v 33100
+v 35533
+v 34671
+v 35607
+v 34336
+v 32855
+v 32589
+v 31382
+v 35327
+v 34324
+v 35662
+v 33437
+v 32075
+v 33254
+v 35360
+v 33464
+v 31000
+v 35251
+v 32062
+v 35424
+v 33886
+v 35389
+v 35639
+v 31839
+v 32077
+v 35363
+v 33876
+v 31535
+v 34350
+v 31218
+v 34140
+v 31334
+v 34408
+v 34525
+v 35155
+v 32802
+v 33965
+v 33051
+v 34000
+v 32987
+v 35654
+v 32534
+v 35239
+v 32041
+v 35608
+v 34483
+v 31874
+v 34478
+v 34591
+v 35738
+v 33418
+v 33417
+v 35320
+v 32429
+v 31917
+v 33474
+v 32626
+v 35551
+v 34707
+v 35201
+v 33661
+v 31422
+v 32428
+v 35067
+v 33998
+v 31532
+v 33381
+v 32999
+v 31435
+v 32403
+v 34939
+v 35581
+v 35368
+v 33181
+v 33422
+v 35223
+v 34530
+v 30958
+v 34723
+v 32629
+v 34285
+v 31838
+v 34687
+v 34135
+v 35648
+v 35315
+v 34221
+v 33559
+v 35174
+v 34267
+v 32445
+v 33674
+v 31621
+v 34304
+v 32452
+v 31527
+v 35508
+v 34240
+v 34830
+v 33822
+v 32898
+v 31032
+v 32954
+v 35460
+v 34827
+v 34903
+v 34376
+v 31937
+v 31991
+v 34094
+v 33993
+v 32634
+v 34628
+v 33549
+v 35528
+v 35790
+v 31329
+v 31860
+v 33473
+v 32293
+v 35614
+v 35091
+v 32682
+v 33723
+v 35674
+v 34017
+v 34260
+v 34977
+v 34909
+v 31788
+v 35671
+v 34027
+v 33313
+v 32766
+v 32922
+v 33659
+v 34642
+v 34247
+v 32917
+v 34418
+v 34547
+v 32840
+v 32032
+v 31802
+v 35406
+v 35176
+v 31122
+v 35319
+v 34085
+v 33616
+v 31479
+v 31794
+v 35763
+v 35289
+v 33538
+v 35321
+v 35119
+v 31879
+v 33043
+v 35081
+v 34320
+v 34519
+v 32705
+v 31419
+v 32666
+v 31335
+v 34275
+v 32845
+v 33552
+v 35591
+v 32139
+v 35193
+v 32707
+v 32285
+v 32364
+v 33812
+v 32169
+v 34234
+v 33307
+v 33187
+v 35111
+v 35893
+v 35593
+v 35925
+v 32136
+v 31903
+v 33903
+v 34209
+v 34169
+v 34358
+v 34423
+v 32451
+v 31613
+v 31990
+v 32902
+v 34205
+v 32605
+v 33451
+v 33405
+v 34082
+v 34861
+v 31670
+v 35362
+v 33641
+v 32968
+v 35161
+v 31701
+v 31928
+v 32816
+v 34366
+v 33737
+v 32889
+v 33675
+v 34716
+v 35665
+v 34629
+v 34268
+v 34352
+v 33132
+v 35432
+v 32076
+v 34022
+v 35637
+v 32994
+v 34885
+v 32909
+v 33239
+v 31155
+v 33636
+v 34756
+v 35766
+v 34835
+v 35128
+v 33962
+v 31341
+v 35942
+v 35233
+v 33788
+v 34842
+v 33800
+v 33508
+v 31999
+v 35618
+v 35287
+v 34359
+v 33465
+v 34879
+v 34894
+v 34104
+v 31556
+v 31549
+v 35710
+v 33710
+v 32521
+v 32365
+v 34965
+v 34535
+v 32297
+v 31521
+v 31407
+v 34888
+v 32474
+v 34925
+v 32363
+v 32648
+v 32156
+v 34660
+v 35843
+v 34385
+v 35234
+v 32325
+v 34722
+v 33108
+v 32982
+v 31922
+v 33736
+v 35075
+v 34924
+v 33717
+v 31428
+v 33088
+v 32133
+v 33529
+v 35461
+v 34049
+v 34115
+v 34781
+v 33361
+v 34891
+v 33501
+v 32457
+v 32187
+v 34081
+v 33836
+v 32929
+v 33142
+v 35016
+v 31265
+v 34822
+v 32089
+v 34593
+v 35085
+v 34021
+v 33288
+v 35419
+v 31872
+v 35815
+v 33249
+v 32858
+v 34050
+v 35377
+v 34310
+v 35771
+v 32234
+v 34975
+v 34958
+v 32509
+v 32219
+v 34646
+v 34829
+v 33725
+v 33490
+v 33415
+v 32772
+v 35470
+v 35087
+v 31995
+v 32078
+v 34048
+v 34869
+v 33172
+v 35332
+v 32182
+v 32166
+v 32709
+v 32533
+v 32201
+v 32531
+v 32213
+v 32581
+v 33855
+v 33037
+v 35354
+v 33879
+v 33289
+v 32526
+v 34105
+v 35638
+v 34871
+v 33349
+v 34470
+v 35232
+v 32805
+v 31500
+v 32865
+v 34072
+v 31770
+v 33987
+v 32599
+v 31660
+v 35510
+v 31715
+v 35036
+v 31736
+v 31843
+v 35567
+v 35338
+v 31452
+v 33587
+v 33861
+v 31437
+v 35031
+v 34476
+v 34742
+v 33777
+v 34668
+v 33540
+v 34248
+v 35336
+v 33638
+v 33485
+v 34648
+v 32961
+v 32678
+v 32719
+v 33899
+v 35718
+v 32485
+v 32444
+v 34689
+v 32539
+v 35722
+v 32630
+v 35731
+v 35120
+v 34799
+v 31657
+v 35264
+v 34791
+v 32642
+v 35434
+v 32349
+v 32918
+v 31472
+v 32086
+v 31534
+v 35352
+v 33763
+v 34012
+v 32517
+v 34121
+v 32874
+v 35797
+v 31801
+v 35259
+v 32395
+v 35616
+v 33186
+v 32710
+v 35133
+v 33076
+v 31268
+v 32401
+v 32217
+v 32020
+v 31321
+v 33416
+v 32036
+v 34684
+v 31188
+v 31413
+v 33022
+v 31805
+v 35125
+v 35050
+v 31861
+v 32165
+v 31913
+v 34528
+v 34474
+v 32773
+v 34387
+v 32039
+v 32821
+v 33612
+v 34492
+v 34772
+v 33359
+v 32153
+v 31867
+v 31792
+v 32472
+v 35323
+v 34994
+v 35213
+v 35505
+v 34512
+v 33867
+v 33648
+v 32435
+v 35811
+v 31718
+v 35864
+v 35099
+v 33503
+v 33054
+v 33852
+v 32613
+v 31582
+v 35516
+v 33367
+v 35829
+v 35878
+v 31444
+v 32920
+v 35117
+v 31568
+v 31640
+v 34343
+v 34445
+v 32447
+v 33356
+v 34516
+v 34857
+v 34669
+v 35178
+v 32499
+v 35610
+v 32470
+v 31786
+v 32135
+v 33851
+v 35721
+v 35370
+v 31865
+v 34207
+v 33734
+v 34954
+v 34919
+v 33413
+v 31470
+v 33091
+v 32843
+v 35734
+v 32424
+v 31828
+v 34126
+v 32007
+v 32998
+v 31765
+v 35862
+v 35785
+v 33008
+v 34761
+v 33156
+v 32724
+v 35584
+v 33176
+v 32233
+v 33705
+v 33766
+v 34356
+v 35211
+v 33158
+v 34739
+v 32195
+v 32247
+v 35092
+v 35761
+v 31495
+v 33637
+v 34111
+v 32660
+v 33720
+v 32331
+v 32014
+v 31767
+v 34824
+v 35775
+v 31967
+v 34549
+v 35047
+v 35421
+v 35595
+v 34197
+v 31394
+v 33378
+v 33892
+v 32984
+v 35137
+v 33435
+v 35438
+v 32479
+v 32684
+v 32522
+v 32887
+v 32413
+v 35029
+v 31473
+v 34680
+v 35215
+v 33749
+v 33932
+v 33059
+v 35154
+v 34622
+v 35615
+v 34084
+v 34227
+v 35429
+v 35043
+v 34577
+v 34010
+v 31896
+v 33500
+v 31772
+v 34443
+v 35478
+v 32119
+v 32345
+v 34804
+v 34676
+v 33392
+v 33027
+v 33070
+v 31836
+v 35641
+v 33514
+v 31970
+v 34252
+v 33240
+v 33074
+v 35749
+v 31796
+v 35079
+v 31551
+v 32794
+v 32612
+v 34980
+v 35612
+v 33157
+v 34144
+v 32919
+v 35740
+v 32244
+v 32476
+v 35372
+v 33692
+v 34725
+v 35832
+v 31871
+v 35858
+v 33372
+v 32753
+v 31494
+v 34271
+v 33126
+v 35032
+v 35088
+v 32147
+v 35288
+v 33544
+v 34837
+v 34568
+v 35222
+v 33189
+v 34522
+v 35375
+v 32248
+v 34656
+v 34733
+v 35711
+v 34194
+v 33321
+v 35579
+v 34289
+v 35393
+v 31338
+v 31941
+v 33478
+v 35224
+v 31436
+v 35903
+v 31342
+v 34130
+v 32063
+v 34314
+v 32990
+v 31921
+v 34702
+v 34286
+v 35820
+v 31986
+v 35901
+v 32028
+v 32986
+v 33938
+v 31924
+v 35310
+v 32043
+v 35898
+v 33948
+v 31956
+v 33198
+v 33111
+v 34726
+v 31779
+v 34922
+v 34131
+v 33925
+v 35572
+v 31835
+v 34438
+v 35520
+v 35003
+v 33618
+v 34929
+v 34779
+v 35249
+v 32571
+v 33517
+v 31955
+v 32227
+v 33862
+v 31856
+v 33244
+v 34132
+v 32979
+v 33922
+v 34067
+v 31656
+v 32544
+v 32830
+v 34199
+v 32736
+v 33120
+v 34246
+v 32060
+v 35136
+v 32190
+v 35847
+v 33216
+v 32962
+v 33389
+v 34372
+v 33119
+v 31633
+v 33689
+v 33134
+v 32663
+v 32764
+v 35626
+v 35294
+v 35261
+v 33597
+v 34651
+v 32259
+v 32588
+v 31795
+v 35337
+v 31608
+v 32186
+v 33312
+v 35116
+v 31424
+v 34663
+v 31559
+v 35712
+v 32449
+v 35151
+v 34998
+v 35465
+v 32726
+v 32067
+v 35243
+v 35543
+v 35357
+v 32355
+v 35789
+v 35145
+v 34006
+v 32942
+v 35231
+v 34446
+v 35680
+v 33275
+v 32519
+v 31455
+v 31825
+v 34834
+v 35830
+v 31883
+v 32505
+v 33772
+v 35677
+v 32965
+v 34170
+v 34507
+v 32339
+v 32788
+v 34566
+v 34635
+v 34360
+v 32423
+v 34639
+v 35035
+v 35668
+v 35121
+v 34003
+v 32580
+v 31617
+v 34825
+v 33333
+v 35060
+v 33846
+v 35624
+v 33446
+v 32577
+v 34531
+v 32048
+v 35507
+v 35573
+v 33125
+v 35404
+v 32315
+v 32121
+v 33475
+v 35402
+v 35621
+v 34479
+v 33213
+v 35297
+v 32944
+v 35855
+v 35765
+v 33668
+v 32312
+v 35058
+v 31758
+v 32639
+v 35455
+v 32253
+v 32911
+v 34287
+v 34901
+v 33428
+v 31642
+v 34523
+v 31643
+v 33821
+v 34619
+v 33063
+v 31548
+v 34654
+v 35144
+v 35923
+v 35874
+v 33159
+v 34854
+v 35436
+v 31616
+v 35725
+v 31383
+v 33666
+v 32708
+v 34538
+v 31704
+v 33579
+v 34953
+v 32809
+v 34627
+v 34490
+v 35028
+v 35723
+v 32974
+v 31555
+v 34472
+v 34784
+v 33888
+v 32560
+v 34545
+v 31372
+v 35428
+v 32111
+v 33621
+v 33535
+v 34916
+v 32050
+v 35479
+v 35286
+v 35865
+v 35013
+v 31807
+v 35305
+v 31746
+v 32412
+v 34182
+v 35207
+v 35068
+v 34062
+v 35850
+v 35719
+v 33693
+v 35162
+v 32008
+v 32672
+v 35792
+v 31738
+v 35330
+v 32804
+v 31576
+v 32696
+v 31453
+v 32242
+v 32530
+v 34647
+v 32740
+v 34200
+v 32069
+v 32819
+v 35791
+v 35308
+v 32204
+v 33910
+v 35313
+v 34902
+v 35240
+v 34974
+v 34753
+v 33310
+v 35423
+v 31420
+v 33619
+v 31553
+v 31465
+v 35059
+v 32348
+v 35096
+v 33323
+v 32223
+v 34501
+v 35387
+v 34999
+v 33072
+v 33937
+v 31506
+v 34592
+v 34486
+v 35279
+v 33084
+v 33123
+v 31390
+v 32272
+v 34134
+v 32026
+v 35685
+v 34655
+v 33369
+v 31654
+v 34447
+v 34086
+v 35147
+v 32608
+v 35229
+v 33617
+v 35216
+v 34910
+v 32241
+v 35935
+v 32594
+v 32556
+v 32993
+v 35867
+v 35713
+v 35728
+v 33201
+v 31968
+v 32224
+v 34166
+v 32518
+v 33060
+v 32103
+v 33406
+v 34581
+v 35752
+v 35426
+v 31647
+v 34623
+v 33375
+v 33360
+v 32273
+v 33005
+v 35150
+v 31902
+v 32024
+v 34752
+v 34298
+v 35481
+v 34281
+v 34997
+v 32935
+v 33816
+v 32404
+v 32586
+v 35396
+v 33274
+v 32051
+v 33775
+v 34567
+v 34614
+v 34560
+v 33627
+v 31421
+v 32137
+v 35726
+v 34873
+v 32712
+v 33335
+v 33860
+v 31426
+v 35007
+v 32747
+v 33770
+v 35343
+v 34943
+v 34775
+v 33942
+v 35365
+v 33819
+v 34290
+v 33831
+v 33626
+v 35887
+v 31625
+v 31889
+v 34066
+v 34473
+v 32540
+v 34073
+v 32564
+v 32197
+v 34948
+v 35468
+v 34097
+v 33628
+v 33598
+v 32033
+v 32546
+v 34751
+v 34759
+v 31573
+v 33440
+v 33467
+v 31905
+v 33810
+v 31508
+v 35422
+v 33149
+v 33909
+v 32810
+v 35679
+v 35140
+v 34164
+v 33110
+v 35420
+v 31445
+v 32934
+v 31565
+v 33410
+v 34713
+v 34691
+v 33170
+v 33425
+v 34724
+v 34128
+v 31939
+v 35228
+v 34773
+v 32722
+v 35499
+v 33442
+v 32196
+v 31755
+v 32905
+v 32886
+v 34926
+v 33729
+v 33727
+v 33106
+v 33161
+v 34957
+v 32983
+v 33913
+v 33825
+v 35585
+v 33341
+v 34154
+v 35345
+v 34976
+v 32795
+v 31402
+v 33330
+v 35524
+v 33818
+v 34778
+v 32956
+v 33698
+v 35019
+v 35355
+v 33740
+v 34187
+v 33970
+v 31431
+v 33975
+v 32782
+v 32460
+v 32387
+v 33028
+v 34485
+v 32812
+v 33032
+v 31550
+v 33835
+v 33665
+v 35880
+v 34930
+v 35009
+v 32463
+v 35565
+v 33739
+v 33787
+v 32417
+v 32631
+v 34777
+v 33977
+v 32250
+v 32760
+v 32618
+v 35813
+v 35214
+v 34884
+v 32268
+v 35453
+v 35462
+v 33122
+v 32161
+v 33678
+v 35644
+v 34606
+v 31750
+v 33148
+v 32913
+v 35311
+v 35824
+v 32189
+v 31728
+v 31915
+v 32059
+v 32015
+v 32376
+v 35037
+v 33916
+v 33049
+v 35561
+v 33744
+v 31731
+v 31629
+v 35498
+v 32257
+v 35376
+v 33386
+v 35774
+v 33401
+v 33827
+v 33824
+v 31545
+v 33145
+v 35525
+v 32924
+v 32214
+v 33278
+v 33655
+v 34405
+v 34450
+v 31474
+v 32006
+v 33756
+v 35382
+v 34033
+v 32374
+v 31377
+v 32743
+v 35497
+v 32491
+v 33591
+v 32163
+v 35702
+v 34982
+v 31603
+v 34122
+v 34367
+v 32240
+v 33191
+v 32198
+v 35814
+v 31401
+v 32426
+v 35466
+v 34947
+v 32009
+v 32824
+v 35531
+v 32264
+v 32547
+v 31734
+v 34529
+v 34394
+v 34844
+v 35492
+v 33533
+v 33681
+v 33311
+v 32034
+v 34225
+v 31782
+v 34881
+v 35575
+v 35622
+v 33218
+v 31605
+v 31664
+v 33388
+v 33923
+v 34521
+v 35415
+v 33061
+v 31632
+v 31432
+v 34945
+v 34264
+v 31663
+v 33830
+v 31900
+v 32521
+v 31699
+v 33642
+v 32623
+v 32294
+v 33468
+v 34301
+v 35351
+v 34701
+v 32691
+v 35107
+v 35449
+v 33483
+v 35333
+v 32107
+v 32125
+v 32466
+v 32226
+v 32744
+v 34964
+v 35366
+v 32716
+v 34855
+v 31406
+v 34506
+v 33007
+v 33377
+v 32628
+v 32390
+v 35806
+v 35523
+v 32884
+v 33180
+v 33593
+v 35838
+v 33624
+v 31952
+v 34382
+v 32647
+v 32941
+v 35392
+v 35153
+v 35189
+v 34514
+v 35554
+v 31766
+v 33961
+v 31698
+v 35853
+v 35143
+v 33953
+v 35227
+v 35566
+v 34923
+v 35097
+v 31816
+v 34335
+v 35446
+v 34186
+v 33064
+v 33684
+v 32755
+v 33291
+v 33460
+v 31510
+v 32953
+v 32176
+v 34602
+v 31487
+v 34401
+v 35656
+v 34491
+v 31789
+v 32508
+v 31717
+v 31863
+v 34167
+v 33735
+v 32275
+v 33108
+v 35485
+v 35912
+v 33492
+v 32616
+v 32927
+v 34771
+v 31674
+v 34562
+v 34043
+v 32171
+v 33404
+v 33384
+v 34584
+v 33251
+v 35550
+v 35303
+v 34109
+v 32729
+v 33209
+v 32433
+v 33491
+v 33229
+v 33193
+v 35754
+v 35103
+v 33210
+v 31450
+v 35066
+v 33046
+v 31639
+v 34215
+v 35598
+v 34555
+v 34497
+v 34963
+v 31682
+v 31809
+v 31345
+v 33556
+v 34188
+v 31356
+v 33010
+v 35293
+v 35784
+v 32870
+v 32652
+v 33733
+v 34119
+v 33853
+v 33926
+v 32279
+v 32128
+v 35225
+v 32777
+v 31458
+v 31488
+v 33679
+v 32926
+v 33573
+v 31712
+v 33453
+v 35715
+v 35557
+v 32403
+v 32576
+v 35906
+v 35040
+v 31546
+v 34325
+v 34657
+v 33511
+v 34987
+v 33371
+v 35093
+v 34649
+v 35273
+v 32405
+v 32258
+v 35356
+v 32762
+v 33200
+v 32266
+v 33090
+v 35280
+v 34417
+v 35484
+v 33303
+v 32677
+v 34589
+v 32817
+v 32336
+v 35733
+v 32382
+v 33921
+v 32659
+v 33313
+v 33181
+v 35632
+v 33992
+v 33701
+v 35652
+v 35399
+v 34520
+v 35493
+v 31543
+v 35139
+v 31408
+v 32237
+v 31908
+v 35218
+v 31671
+v 32878
+v 32276
+v 32192
+v 33187
+v 32216
+v 34719
+v 35223
+v 32464
+v 35039
+v 31811
+v 32651
+v 32964
+v 34397
+v 35537
+v 33915
+v 31505
+v 35769
+v 35686
+v 33512
+v 33379
+v 34951
+v 33886
+v 32906
+v 33357
+v 32486
+v 35183
+v 32188
+v 32711
+v 32650
+v 32270
+v 35101
+v 35571
+v 34411
+v 32861
+v 34806
+v 34788
+v 35661
+v 34005
+v 34693
+v 34162
+v 32191
+v 34503
+v 34025
+v 32347
+v 32649
+v 35530
+v 34637
+v 35843
+v 31931
+v 34583
+v 35359
+v 32354
+v 33811
+v 35329
+v 34797
+v 35568
+v 34009
+v 33256
+v 34665
+v 32500
+v 35663
+v 33245
+v 34263
+v 35606
+v 34077
+v 33875
+v 35268
+v 31880
+v 31419
+v 32391
+v 32862
+v 34631
+v 34023
+v 32310
+v 33902
+v 32600
+v 33746
+v 34800
+v 34189
+v 31962
+v 35781
+v 33141
+v 33484
+v 33613
+v 32534
+v 32833
+v 31461
+v 31714
+v 32000
+v 33731
+v 32099
+v 33481
+v 32897
+v 34828
+v 34508
+v 33168
+v 31875
+v 33905
+v 32602
+v 33433
+v 31820
+v 34190
+v 33420
+v 32297
+v 32670
+v 35517
+v 34075
+v 35195
+v 33099
+v 32754
+v 32290
+v 31771
+v 35763
+v 34080
+v 35122
+v 32154
+v 32338
+v 34384
+v 33029
+v 31519
+v 35418
+v 33963
+v 33021
+v 35113
+v 35604
+v 32047
+v 35276
+v 35114
+v 33648
+v 35649
+v 31993
+v 32379
+v 33672
+v 35617
+v 32972
+v 33086
+v 35315
+v 34295
+v 32093
+v 35676
+v 31485
+v 33078
+v 32372
+v 32921
+v 31927
+v 35434
+v 31800
+v 32947
+v 35895
+v 32625
+v 32130
+v 33006
+v 34149
+v 34880
+v 34031
+v 35414
+v 34876
+v 32133
+v 33542
+v 34515
+v 33253
+v 33629
+v 35809
+v 34381
+v 35126
+v 32458
+v 32498
+v 33143
+v 32528
+v 32798
+v 33105
+v 32164
+v 33785
+v 35471
+v 34284
+v 35431
+v 32465
+v 32146
+v 33268
+v 34297
+v 35798
+v 33859
+v 34466
+v 32520
+v 32432
+v 31761
+v 34460
+v 34550
+v 34363
+v 35248
+v 33747
+v 32933
+v 35796
+v 32327
+v 31343
+v 34265
+v 33154
+v 35048
+v 35430
+v 35504
+v 31547
+v 34440
+v 35317
+v 32869
+v 33052
+v 34328
+v 35191
+v 32321
+v 35691
+v 35362
+v 35630
+v 34659
+v 34598
+v 32737
+v 32846
+v 32707
+v 33676
+v 34692
+v 34197
+v 31680
+v 34897
+v 32669
+v 31379
+v 34869
+v 32721
+v 35065
+v 35407
+v 32593
+v 34687
+v 33053
+v 32718
+v 35125
+v 35241
+v 33788
+v 31841
+v 35801
+v 35230
+v 31919
+v 35267
+v 35052
+v 33382
+v 32706
+v 33287
+v 33826
+v 32802
+v 34482
+v 35086
+v 35583
+v 35062
+v 32592
+v 35184
+v 34610
+v 32954
+v 34580
+v 32492
+v 34138
+v 31451
+v 34208
+v 35946
+v 35548
+v 33969
+v 34026
+v 35291
+v 32039
+v 35881
+v 34993
+v 32364
+v 35698
+v 32394
+v 35340
+v 35942
+v 33015
+v 31413
+v 32638
+v 33753
+v 31599
+v 31831
+v 31396
+v 32683
+v 33657
+v 34787
+v 35154
+v 33758
+v 34861
+v 32551
+v 32685
+v 32138
+v 35295
+v 33077
+v 32483
+v 35217
+v 34612
+v 32662
+v 34682
+v 32170
+v 35808
+v 32932
+v 33847
+v 35619
+v 31912
+v 33115
+v 35526
+v 33255
+v 34354
+v 31376
+v 31428
+v 32393
+v 34214
+v 34986
+v 34408
+v 35358
+v 31364
+v 35341
+v 35074
+v 34229
+v 32295
+v 33945
+v 31873
+v 31509
+v 35025
+v 35553
+v 33339
+v 31957
+v 33685
+v 34292
+v 33338
+v 33555
+v 33283
+v 35118
+v 32517
+v 33421
+v 32005
+v 35886
+v 35041
+v 32096
+v 33550
+v 31507
+v 33721
+v 31634
+v 31961
+v 33742
+v 35386
+v 31923
+v 33754
+v 35278
+v 33490
+v 33309
+v 34088
+v 34549
+v 34872
+v 32624
+v 35432
+v 35852
+v 33838
+v 33031
+v 33221
+v 33234
+v 31374
+v 34151
+v 34641
+v 34556
+v 31861
+v 34253
+v 34585
+v 34642
+v 31644
+v 32557
+v 33092
+v 35324
+v 35238
+v 34695
+v 34920
+v 31801
+v 32791
+v 32673
+v 33186
+v 34890
+v 35665
+v 33592
+v 33075
+v 32488
+v 31913
+v 33246
+v 33515
+v 35124
+v 35257
+v 35558
+v 33409
+v 32949
+v 32082
+v 34688
+v 33908
+v 33939
+v 35799
+v 31675
+v 32470
+v 35403
+v 33202
+v 34386
+v 34231
+v 34712
+v 34310
+v 34650
+v 34915
+v 34586
+v 32821
+v 35384
+v 34393
+v 33632
+v 31824
+v 33414
+v 33560
+v 34072
+v 35496
+v 33479
+v 35835
+v 34319
+v 35681
+v 34849
+v 34609
+v 35704
+v 33452
+v 32916
+v 35480
+v 34789
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+c
+d 393 2 1 0 0
+c
+d 301 1 0 1 0
+c
+d 304 1 0 1 0
+c
+d 1185 2 0 0 0
+c
+d 393 3 1 0 0
+c
+d 0 1 0 0 0
+c
+d 352 3 1 0 0
+c
+d 1195 1 0 1 0
+c
+d 1199 1 0 1 0
+c
+d 374 3 0 0 0
+c
+d 347 2 0 1 0
+c
+d 301 2 0 1 0
+c
+d 857 1 0 0 0
+c
+d 893 1 0 0 0
+c
+d 301 2 0 2 0
+c
+d 455 1 1 0 0
+c
+d 457 1 0 0 0
+c
+d 383 3 0 2 0
+c
+d 1109 1 0 1 0
+c
+d 1111 1 0 1 0
+c
+d 755 3 0 0 0
+c
+d 743 3 0 1 0
+c
+d 392 1 0 1 0
+c
+d 1126 1 0 0 0
+c
+d 1127 1 0 0 0
+c
+d 606 3 1 0 0
+c
+d 929 2 0 0 0
+c
+d 932 1 0 1 0
+c
+d 525 3 1 0 0
+c
+d 378 1 0 0 0
+c
+d 384 1 0 0 0
+c
+d 70 3 0 2 0
+c
+d 591 4 0 1 0
+c
+d 248 1 0 0 0
+c
+d 249 2 0 0 0
+c
+d 457 3 0 1 0
+c
+d 225 1 0 1 0
+c
+d 238 1 0 0 0
+c
+d 424 3 0 0 0
+c
+d 171 1 0 1 0
+c
+d 172 1 0 0 0
+c
+d 1250 2 0 1 0
+c
+d 11 3 1 0 0
+c
+d 133 1 0 0 0
+c
+d 134 1 0 0 0
+c
+d 75 3 1 0 0
+c
+d 1097 3 1 0 0
+c
+d 207 3 0 0 0
+c
+d 21 1 0 0 0
+c
+d 1020 1 1 0 0
+c
+d 1021 1 0 0 0
+c
+d 134 2 0 1 0
+c
+d 139 1 0 1 0
+c
+d 763 1 0 1 0
+c
+d 767 2 0 1 0
+c
+d 114 3 0 2 0
+c
+d 55 1 0 1 0
+c
+d 691 1 0 0 0
+c
+d 2 4 1 0 0
+c
+d 95 1 0 1 0
+c
+d 998 1 0 1 0
+c
+d 130 1 0 0 0
+c
+d 1258 1 0 0 0
+c
+d 455 2 0 0 0
+c
+d 523 1 0 0 0
+c
+d 525 1 1 0 0
+c
+d 120 3 0 1 0
+c
+d 93 2 1 0 0
+c
+d 525 3 0 2 0
+c
+d 394 1 0 1 0
+c
+d 1111 1 0 1 0
+c
+d 225 2 0 1 0
+c
+d 737 2 0 0 0
+c
+d 415 4 0 0 0
+c
+d 1156 2 0 1 0
+c
+d 1192 1 0 1 0
+c
+d 738 3 0 2 0
+c
+d 334 4 1 0 0
+c
+d 2 1 0 0 0
+c
+d 13 1 0 0 0
+c
+d 327 3 0 1 0
+c
+d 208 1 0 0 0
+c
+d 209 1 0 0 0
+c
+d 850 3 1 0 0
+c
+d 1109 2 0 1 0
+c
+d 1126 2 1 0 0
+c
+d 167 2 0 1 0
+c
+d 54 1 0 1 0
+c
+d 55 2 0 1 0
+c
+d 591 3 0 0 0
+c
+d 224 4 1 0 0
+c
+d 276 2 0 0 0
+c
+d 288 1 1 0 0
+c
+d 1009 2 0 0 0
+c
+d 634 1 0 0 0
+c
+d 642 1 0 1 0
+c
+d 643 1 0 0 0
+c
+d 156 1 0 1 0
+c
+d 400 1 0 1 0
+c
+d 1111 3 1 0 0
+c
+d 444 3 1 0 0
+c
+d 211 2 0 0 0
+c
+d 44 1 0 1 0
+c
+d 1020 1 0 1 0
+c
+d 159 3 0 2 0
+c
+d 13 1 0 1 0
+c
+d 16 1 0 1 0
+c
+d 111 3 1 0 0
+c
+d 0 1 0 0 0
+c
+d 634 1 0 0 0
+c
+d 635 1 0 0 0
+c
+d 307 2 0 0 0
+c
+d 159 3 1 0 0
+c
+d 162 1 0 0 0
+c
+d 171 2 1 0 0
+c
+d 392 1 0 1 0
+c
+d 393 1 0 1 0
+c
+d 66 2 0 2 0
+c
+d 733 1 0 0 0
+c
+d 735 1 0 0 0
+c
+d 146 1 1 0 0
+c
+d 148 2 0 0 0
+c
+d 1177 2 0 0 0
+c
+d 650 3 1 0 0
+c
+d 606 2 0 0 0
+c
+d 21 1 0 0 0
+c
+d 1020 1 0 0 0
+c
+d 224 2 0 2 0
+c
+d 799 3 0 0 0
+c
+d 55 2 0 0 0
+c
+d 815 1 0 0 0
+c
+d 817 1 0 0 0
+c
+d 135 3 0 0 0
+c
+d 156 2 1 0 0
+c
+d 745 3 1 0 0
+c
+d 1195 2 0 0 0
+c
+d 599 2 0 2 0
+c
+d 333 1 0 1 0
+c
+d 337 1 0 1 0
+c
+d 162 2 0 0 0
+c
+d 673 1 0 1 0
+c
+d 675 1 0 1 0
+c
+d 604 1 0 1 0
+c
+d 605 1 0 1 0
+c
+d 737 3 1 0 0
+c
+d 196 1 0 0 0
+c
+d 197 1 0 1 0
+c
+d 21 2 0 0 0
+c
+d 206 2 0 0 0
+c
+d 427 1 0 0 0
+c
+d 1078 1 0 0 0
+c
+d 1217 3 1 0 0
+c
+d 133 3 1 0 0
+c
+d 332 1 0 0 0
+c
+d 337 1 0 0 0
+c
+d 919 1 0 0 0
+c
+d 922 2 0 0 0
+c
+d 923 1 0 1 0
+c
+d 12 4 1 0 0
+c
+d 367 1 1 0 0
+c
+d 1125 2 0 0 0
+c
+d 156 1 0 0 0
+c
+d 406 2 0 1 0
+c
+d 304 5 0 0 0
+c
+d 919 3 1 0 0
+c
+d 1206 3 1 0 0
+c
+d 445 1 0 0 0
+c
+d 447 1 0 1 0
+c
+d 448 1 0 0 0
+c
+d 248 3 0 0 0
+c
+d 18 2 0 2 0
+c
+d 737 2 1 0 0
+c
+d 1113 3 0 0 0
+c
+d 327 3 0 0 0
+c
+d 1134 2 0 0 0
+c
+d 626 1 0 0 0
+c
+d 627 1 0 0 0
+c
+d 699 3 1 0 0
+c
+d 1 3 0 0 0
+c
+d 332 1 0 1 0
+c
+d 333 1 0 0 0
+c
+d 525 2 0 0 0
+c
+d 526 1 0 0 0
+c
+d 437 2 0 1 0
+c
+d 444 1 0 1 0
+c
+d 1063 2 1 0 0
+c
+d 211 3 0 0 0
+c
+d 327 1 0 0 0
+c
+d 348 2 1 0 0
+c
+d 337 3 0 1 0
+c
+d 224 2 0 0 0
+c
+d 148 1 0 0 0
+c
+d 259 2 0 0 0
+c
+d 278 2 1 0 0
+c
+d 1165 1 0 0 0
+c
+d 19 1 0 1 0
+c
+d 983 1 0 1 0
+c
+d 353 1 0 1 0
+c
+d 354 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 107 1 1 0 0
+c
+d 108 1 0 0 0
+c
+d 620 2 0 2 0
+c
+d 12 3 0 0 0
+c
+d 796 3 0 0 0
+c
+d 132 1 0 0 0
+c
+d 133 1 0 0 0
+c
+d 1165 2 0 1 0
+c
+d 437 1 0 0 0
+c
+d 444 1 0 0 0
+c
+d 457 1 0 0 0
+c
+d 461 1 0 0 0
+c
+d 489 2 0 1 0
+c
+d 167 2 0 0 0
+c
+d 164 1 0 1 0
+c
+d 167 1 0 0 0
+c
+d 1192 3 0 0 0
+c
+d 523 1 0 0 0
+c
+d 525 1 1 0 0
+c
+d 527 1 0 0 0
+c
+d 353 1 0 0 0
+c
+d 1144 2 0 0 0
+c
+d 285 1 0 0 0
+c
+d 1224 1 0 0 0
+c
+d 737 2 0 0 0
+c
+d 753 1 0 0 0
+c
+d 522 2 0 1 0
+c
+d 606 3 0 2 0
+c
+d 277 1 0 0 0
+c
+d 301 1 1 0 0
+c
+d 1157 1 0 0 0
+c
+d 769 3 1 0 0
+c
+d 1184 2 1 0 0
+c
+d 634 1 0 1 0
+c
+d 642 2 0 1 0
+c
+d 801 2 0 0 0
+c
+d 1150 2 0 0 0
+c
+d 833 3 1 0 0
+c
+d 156 1 0 1 0
+c
+d 163 2 0 0 0
+c
+d 1113 2 0 1 0
+c
+d 206 3 1 0 0
+c
+d 334 1 0 0 0
+c
+d 341 1 0 0 0
+c
+d 676 2 0 1 0
+c
+d 678 1 0 1 0
+c
+d 111 4 0 0 0
+c
+d 511 2 0 1 0
+c
+d 522 1 0 1 0
+c
+d 163 1 0 1 0
+c
+d 172 1 0 1 0
+c
+d 372 1 0 0 0
+c
+d 373 1 1 0 0
+c
+d 55 1 0 0 0
+c
+d 66 1 0 0 0
+c
+d 470 2 1 0 0
+c
+d 477 1 0 0 0
+c
+d 5 1 1 0 0
+c
+d 9 2 0 0 0
+c
+d 46 2 0 0 0
+c
+d 74 1 1 0 0
+c
+d 218 1 0 0 0
+c
+d 222 2 1 0 0
+c
+d 111 1 0 0 0
+c
+d 146 2 0 0 0
+c
+d 1317 2 0 0 0
+c
+d 407 2 0 0 0
+c
+d 21 2 0 0 0
+c
+d 304 1 0 0 0
+c
+d 307 1 0 0 0
+c
+d 418 2 0 0 0
+c
+d 1188 2 1 0 0
+c
+d 602 3 0 1 0
+c
+d 675 1 0 1 0
+c
+d 676 1 0 1 0
+c
+d 185 2 0 0 0
+c
+d 691 3 0 2 0
+c
+d 159 2 0 0 0
+c
+d 161 1 0 0 0
+c
+d 799 3 1 0 0
+c
+d 799 2 1 0 0
+c
+d 842 1 0 0 0
+c
+d 606 1 0 0 0
+c
+d 608 1 0 0 0
+c
+d 1 2 0 0 0
+c
+d 1269 3 0 1 0
+c
+d 550 1 0 0 0
+c
+d 556 3 0 0 0
+c
+d 54 1 0 1 0
+c
+d 719 1 0 0 0
+c
+d 559 1 0 0 0
+c
+d 560 2 0 0 0
+c
+d 1170 2 0 0 0
+c
+d 328 2 1 0 0
+c
+d 135 1 1 0 0
+c
+d 136 2 0 0 0
+c
+d 737 2 1 0 0
+c
+d 1150 3 0 0 0
+c
+d 199 3 0 1 0
+c
+d 591 1 0 0 0
+c
+d 593 1 0 1 0
+c
+d 368 2 0 0 0
+c
+d 1170 2 0 2 0
+c
+d 811 4 0 0 0
+c
+d 1 2 0 1 0
+c
+d 378 1 0 0 0
+c
+d 1111 2 0 2 0
+c
+d 1150 3 0 1 0
+c
+d 1163 2 0 2 0
+c
+d 54 1 0 0 0
+c
+d 697 1 0 0 0
+c
+d 301 3 1 0 0
+c
+d 407 3 0 0 0
+c
+d 169 3 0 0 0
+c
+d 1002 2 1 0 0
+c
+d 1003 1 0 0 0
+c
+d 842 2 0 0 0
+c
+d 1165 2 1 0 0
+c
+d 1233 1 0 0 0
+c
+d 1234 1 0 0 0
+c
+d 32 3 0 0 0
+c
+d 171 1 0 0 0
+c
+d 172 1 0 0 0
+c
+d 107 3 0 2 0
+c
+d 1125 4 0 1 0
+c
+d 1009 3 0 0 0
+c
+d 604 1 0 1 0
+c
+d 606 1 0 1 0
+c
+d 661 3 1 0 0
+c
+d 334 3 1 0 0
+c
+d 833 1 0 1 0
+c
+d 882 2 0 1 0
+c
+d 301 2 0 0 0
+c
+d 848 3 0 0 0
+c
+d 944 1 0 0 0
+c
+d 945 2 0 0 0
+c
+d 167 1 0 0 0
+c
+d 369 1 0 1 0
+c
+d 1111 2 0 1 0
+c
+d 111 4 1 0 0
+c
+d 232 3 0 2 0
+c
+d 392 1 0 1 0
+c
+d 393 2 0 1 0
+c
+d 578 1 1 0 0
+c
+d 1043 2 0 0 0
+c
+d 455 1 0 1 0
+c
+d 456 2 0 1 0
+c
+d 90 2 0 0 0
+c
+d 132 3 1 0 0
+c
+d 1170 1 0 0 0
+c
+d 1173 1 0 0 0
+c
+d 278 3 0 0 0
+c
+d 167 3 0 1 0
+c
+d 1300 4 1 0 0
+c
+d 206 2 0 1 0
+c
+d 811 4 1 0 0
+c
+d 7 2 1 0 0
+c
+d 757 2 0 0 0
+c
+d 763 1 0 0 0
+c
+d 575 1 0 0 0
+c
+d 1043 1 0 0 0
+c
+d 70 3 0 0 0
+c
+d 1274 3 1 0 0
+c
+d 168 1 0 0 0
+c
+d 373 2 1 0 0
+c
+d 1156 3 0 0 0
+c
+d 12 3 1 0 0
+c
+d 382 3 0 2 0
+c
+d 699 4 0 0 0
+c
+d 277 1 0 0 0
+c
+d 278 1 0 0 0
+c
+d 697 2 0 0 0
+c
+d 716 1 0 0 0
+c
+d 749 3 0 0 0
+c
+d 79 1 0 0 0
+c
+d 80 1 0 1 0
+c
+d 737 4 1 0 0
+c
+d 120 3 0 0 0
+c
+d 204 1 0 0 0
+c
+d 224 1 0 0 0
+c
+d 146 2 0 0 0
+c
+d 921 2 1 0 0
+c
+d 756 1 0 0 0
+c
+d 757 2 0 0 0
+c
+d 743 2 0 0 0
+c
+d 753 1 0 0 0
+c
+d 437 4 1 0 0
+c
+d 1132 1 0 1 0
+c
+d 1113 2 0 0 0
+c
+d 1119 2 0 0 0
+c
+d 376 3 0 0 0
+c
+d 274 3 0 0 0
+c
+d 70 1 0 1 0
+c
+d 650 2 0 1 0
+c
+d 135 3 0 0 0
+c
+d 167 1 1 0 0
+c
+d 1105 1 0 0 0
+c
+d 1123 1 0 0 0
+c
+d 274 3 0 1 0
+c
+d 1315 2 0 0 0
+c
+d 1316 1 0 0 0
+c
+d 1111 2 0 1 0
+c
+d 1173 3 0 0 0
+c
+d 115 2 0 0 0
+c
+d 691 1 0 0 0
+c
+d 801 2 0 0 0
+c
+d 763 2 0 0 0
+c
+d 1202 3 1 0 0
+c
+d 737 2 0 0 0
+c
+d 591 4 1 0 0
+c
+d 511 2 0 0 0
+c
+d 21 3 1 0 0
+c
+d 1184 2 0 0 0
+c
+d 1209 1 1 0 0
+c
+d 734 2 0 0 0
+c
+d 796 2 1 0 0
+c
+d 129 1 0 1 0
+c
+d 131 2 0 1 0
+c
+d 19 2 1 0 0
+c
+d 21 1 0 0 0
+c
+d 393 2 0 0 0
+c
+d 399 1 0 0 0
+c
+d 1113 3 0 2 0
+c
+d 604 2 0 2 0
+c
+d 371 1 0 0 0
+c
+d 380 1 0 1 0
+c
+d 157 1 1 0 0
+c
+d 159 1 0 0 0
+c
+d 622 1 1 0 0
+c
+d 625 1 0 0 0
+c
+d 737 3 1 0 0
+c
+d 740 1 0 0 0
+c
+d 182 3 0 0 0
+c
+d 697 2 1 0 0
+c
+d 1165 2 1 0 0
+c
+d 131 1 0 0 0
+c
+d 132 2 0 0 0
+c
+d 242 2 0 1 0
+c
+d 455 3 0 2 0
+c
+d 311 1 0 0 0
+c
+d 327 2 1 0 0
+c
+d 1225 3 1 0 0
+c
+d 155 1 0 1 0
+c
+d 415 1 0 1 0
+c
+d 274 1 1 0 0
+c
+d 277 1 0 0 0
+c
+d 278 1 0 0 0
+c
+d 31 4 1 0 0
+c
+d 1202 1 0 0 0
+c
+d 1203 1 0 0 0
+c
+d 1204 1 0 0 0
+c
+d 66 2 0 1 0
+c
+d 1196 4 0 0 0
+c
+d 803 3 0 0 0
+c
+d 663 3 0 0 0
+c
+d 287 1 1 0 0
+c
+d 289 2 0 0 0
+c
+d 840 1 0 0 0
+c
+d 842 1 0 1 0
+c
+d 199 3 1 0 0
+c
+d 276 2 0 2 0
+c
+d 290 1 0 0 0
+c
+d 157 3 0 1 0
+c
+d 207 2 0 0 0
+c
+d 209 1 0 0 0
+c
+d 7 2 0 0 0
+c
+d 457 2 1 0 0
+c
+d 1060 3 1 0 0
+c
+d 838 1 0 1 0
+c
+d 839 1 0 1 0
+c
+d 686 1 0 0 0
+c
+d 689 1 0 1 0
+c
+d 713 1 0 1 0
+c
+d 382 1 0 0 0
+c
+d 383 1 0 1 0
+c
+d 394 1 0 0 0
+c
+d 1109 2 0 2 0
+c
+d 328 1 0 0 0
+c
+d 329 1 0 0 0
+c
+d 185 3 1 0 0
+c
+d 753 3 1 0 0
+c
+d 382 2 0 1 0
+c
+d 678 2 0 0 0
+c
+d 148 3 0 0 0
+c
+d 455 1 0 0 0
+c
+d 457 1 0 1 0
+c
+d 7 3 0 0 0
+c
+d 842 2 0 0 0
+c
+d 763 4 1 0 0
+c
+d 697 2 0 0 0
+c
+d 954 1 0 0 0
+c
+d 278 1 0 1 0
+c
+d 1168 1 0 0 0
+c
+d 620 3 0 0 0
+c
+d 274 2 0 2 0
+c
+d 734 3 0 0 0
+c
+d 1060 1 1 0 0
+c
+d 1063 1 0 0 0
+c
+d 799 3 0 2 0
+c
+d 167 3 0 2 0
+c
+d 168 2 1 0 0
+c
+d 1165 2 1 0 0
+c
+d 1167 1 0 0 0
+c
+d 95 1 0 0 0
+c
+d 1263 2 0 0 0
+c
+d 769 2 1 0 0
+c
+d 523 1 0 0 0
+c
+d 525 2 0 2 0
+c
+d 1009 2 0 0 0
+c
+d 1011 1 0 0 0
+c
+d 314 3 1 0 0
+c
+d 965 1 0 0 0
+c
+d 973 1 1 0 0
+c
+d 205 2 0 1 0
+c
+d 1239 1 0 0 0
+c
+d 580 1 0 1 0
+c
+d 686 2 0 1 0
+c
+d 382 1 0 0 0
+c
+d 384 1 1 0 0
+c
+d 324 3 1 0 0
+c
+d 854 1 0 1 0
+c
+d 866 1 0 0 0
+c
+d 868 1 0 0 0
+c
+d 1156 2 0 1 0
+c
+d 767 2 0 1 0
+c
+d 927 1 0 1 0
+c
+d 928 1 0 0 0
+c
+d 929 1 0 1 0
+c
+d 1284 3 0 0 0
+c
+d 167 3 0 0 0
+c
+d 737 2 0 0 0
+c
+d 926 3 1 0 0
+c
+d 305 3 1 0 0
+c
+d 1 3 0 0 0
+c
+d 1322 1 1 0 0
+c
+d 1002 4 0 0 0
+c
+d 211 2 0 0 0
+c
+d 93 2 0 2 0
+c
+d 1165 2 0 0 0
+c
+d 1167 1 0 0 0
+c
+d 1150 3 1 0 0
+c
+d 302 2 0 0 0
+c
+d 278 3 0 0 0
+c
+d 591 2 0 1 0
+c
+d 753 1 0 1 0
+c
+d 859 1 0 1 0
+c
+d 261 3 0 0 0
+c
+d 285 2 1 0 0
+c
+d 156 4 0 0 0
+c
+d 32 1 0 0 0
+c
+d 33 1 0 0 0
+c
+d 34 2 0 0 0
+c
+d 85 1 0 1 0
+c
+d 1275 2 0 1 0
+c
+d 246 3 0 0 0
+c
+d 606 2 0 0 0
+c
+d 608 1 1 0 0
+c
+d 156 1 0 1 0
+c
+d 164 1 0 1 0
+c
+d 531 1 0 0 0
+c
+d 532 2 1 0 0
+c
+d 1176 4 1 0 0
+c
+d 1111 3 1 0 0
+c
+d 373 2 0 0 0
+c
+d 662 2 0 1 0
+c
+d 120 1 0 0 0
+c
+d 127 1 0 0 0
+c
+d 1270 2 0 0 0
+c
+d 575 1 0 0 0
+c
+d 932 1 0 1 0
+c
+d 1165 1 0 0 0
+c
+d 1166 1 0 1 0
+c
+d 1316 1 0 0 0
+c
+d 1317 2 0 0 0
+c
+d 16 2 0 1 0
+c
+d 369 2 0 0 0
+c
+d 697 2 0 0 0
+c
+d 691 2 0 0 0
+c
+d 1157 1 0 0 0
+c
+d 1163 1 0 0 0
+c
+d 743 3 0 0 0
+c
+d 127 4 0 0 0
+c
+d 93 1 0 0 0
+c
+d 95 1 0 0 0
+c
+d 348 1 0 0 0
+c
+d 351 1 0 1 0
+c
+d 352 1 0 0 0
+c
+d 1163 3 0 2 0
+c
+d 169 3 0 0 0
+c
+d 1 3 1 0 0
+c
+d 1224 4 0 0 0
+c
+d 159 3 1 0 0
+c
+d 980 2 1 0 0
+c
+d 348 3 0 1 0
+c
+d 579 2 1 0 0
+c
+d 527 2 0 0 0
+c
+d 857 1 0 0 0
+c
+d 858 1 0 0 0
+c
+d 376 3 0 0 0
+c
+d 423 2 0 1 0
+c
+d 334 3 1 0 0
+c
+d 737 3 0 0 0
+c
+d 274 2 0 1 0
+c
+d 167 2 0 1 0
+c
+d 120 1 0 0 0
+c
+d 123 1 0 0 0
+c
+d 124 1 0 0 0
+c
+d 305 3 1 0 0
+c
+d 855 1 0 0 0
+c
+d 857 1 1 0 0
+c
+d 796 3 1 0 0
+c
+d 457 2 0 1 0
+c
+d 129 3 0 0 0
+c
+d 797 1 1 0 0
+c
+d 927 1 0 0 0
+c
+d 929 1 0 0 0
+c
+d 208 4 0 0 0
+c
+d 575 2 1 0 0
+c
+d 1044 1 0 0 0
+c
+d 1185 2 1 1 0
+c
+d 241 1 0 0 0
+c
+d 242 1 0 0 0
+c
+d 19 1 0 1 0
+c
+d 978 1 0 0 0
+c
+d 842 2 1 0 0
+c
+d 382 2 0 0 0
+c
+d 572 5 0 0 0
+c
+d 277 1 0 0 0
+c
+d 278 1 0 1 0
+c
+d 1163 1 0 1 0
+c
+d 315 3 1 0 0
+c
+d 919 1 0 0 0
+c
+d 921 2 0 0 0
+c
+d 675 1 1 0 0
+c
+d 676 1 0 0 0
+c
+d 620 1 0 1 0
+c
+d 621 2 0 1 0
+c
+d 157 2 0 1 0
+c
+d 423 1 0 0 0
+c
+d 430 1 0 0 0
+c
+d 606 2 0 0 0
+c
+d 1233 2 0 0 0
+c
+d 111 1 0 0 0
+c
+d 146 1 0 0 0
+c
+d 208 3 1 0 0
+c
+d 534 2 0 0 0
+c
+d 261 2 0 1 0
+c
+d 799 2 0 0 0
+c
+d 915 1 1 0 0
+c
+d 454 2 1 0 0
+c
+d 455 1 0 0 0
+c
+d 570 1 0 1 0
+c
+d 572 1 0 0 0
+c
+d 855 2 0 0 0
+c
+d 1172 2 0 0 0
+c
+d 507 2 1 0 0
+c
+d 621 3 1 0 0
+c
+d 400 1 1 0 0
+c
+d 405 2 0 0 0
+c
+d 1150 2 1 0 0
+c
+d 1153 1 0 0 0
+c
+d 719 2 0 1 0
+c
+d 949 2 0 0 0
+c
+d 678 2 0 0 0
+c
+d 162 1 0 0 0
+c
+d 367 1 0 0 0
+c
+d 368 1 0 0 0
+c
+d 242 1 0 1 0
+c
+d 243 1 0 0 0
+c
+d 245 1 0 1 0
+c
+d 1165 4 1 0 0
+c
+d 48 3 0 0 0
+c
+d 796 2 1 0 0
+c
+d 457 2 0 0 0
+c
+d 167 1 0 0 0
+c
+d 369 1 0 0 0
+c
+d 302 2 0 0 0
+c
+d 70 1 0 1 0
+c
+d 651 1 0 1 0
+c
+d 691 3 1 0 0
+c
+d 301 4 1 0 0
+c
+d 1121 3 0 1 0
+c
+d 196 1 0 0 0
+c
+d 199 1 0 0 0
+c
+d 5 2 0 0 0
+c
+d 919 1 0 0 0
+c
+d 923 1 0 0 0
+c
+d 753 1 1 0 0
+c
+d 755 2 0 0 0
+c
+d 262 2 0 1 0
+c
+d 274 1 0 1 0
+c
+d 93 4 0 0 0
+c
+d 101 1 0 0 0
+c
+d 426 1 1 0 0
+c
+d 1192 2 0 0 0
+c
+d 1193 1 0 0 0
+c
+d 75 2 1 0 0
+c
+d 84 1 0 0 0
+c
+d 737 2 0 0 0
+c
+d 1185 4 0 0 0
+c
+d 168 3 0 1 0
+c
+d 301 1 1 0 0
+c
+d 1150 2 0 0 0
+c
+d 1179 3 1 0 0
+c
+d 146 2 0 0 0
+c
+d 93 4 1 0 0
+c
+d 156 3 1 0 0
+c
+d 641 1 0 0 0
+c
+d 642 1 0 0 0
+c
+d 634 1 0 0 0
+c
+d 642 1 0 0 0
+c
+d 643 1 0 0 0
+c
+d 744 1 0 0 0
+c
+d 745 1 1 0 0
+c
+d 746 1 0 0 0
+c
+d 423 2 1 0 0
+c
+d 979 3 1 0 0
+c
+d 134 1 0 0 0
+c
+d 136 2 1 0 0
+c
+d 194 1 0 0 0
+c
+d 195 1 0 0 0
+c
+d 21 2 0 0 0
+c
+d 211 4 0 0 0
+c
+d 737 2 0 0 0
+c
+d 163 3 1 0 0
+c
+d 693 4 0 0 0
+c
+d 89 3 1 0 0
+c
+d 1168 1 0 0 0
+c
+d 1176 3 0 0 0
+c
+d 184 3 0 0 0
+c
+d 233 2 0 1 0
+c
+d 536 3 0 0 0
+c
+d 737 2 0 0 0
+c
+d 895 1 0 0 0
+c
+d 1185 2 0 0 0
+c
+d 454 1 0 0 0
+c
+d 455 2 1 0 0
+c
+d 18 2 0 0 0
+c
+d 168 1 0 1 0
+c
+d 369 1 0 0 0
+c
+d 427 1 0 0 0
+c
+d 428 1 0 1 0
+c
+d 1045 4 0 0 0
+c
+d 701 1 0 0 0
+c
+d 712 1 0 0 0
+c
+d 713 2 0 0 0
+c
+d 229 1 0 0 0
+c
+d 231 1 0 0 0
+c
+d 18 2 0 0 0
+c
+d 199 3 0 0 0
+c
+d 169 2 0 0 0
+c
+d 164 2 1 0 0
+c
+d 167 1 0 0 0
+c
+d 1105 1 0 0 0
+c
+d 650 2 0 0 0
+c
+d 19 3 1 0 0
+c
+d 394 1 1 0 0
+c
+d 1111 1 0 0 0
+c
+d 803 1 0 0 0
+c
+d 915 1 0 1 0
+c
+d 935 1 0 1 0
+c
+d 668 1 0 0 0
+c
+d 669 1 0 0 0
+c
+d 670 1 0 0 0
+c
+d 162 2 0 0 0
+c
+d 1315 1 0 0 0
+c
+d 1316 1 0 0 0
+c
+d 278 2 0 0 0
+c
+d 1211 1 0 0 0
+c
+d 670 1 0 0 0
+c
+d 671 1 0 0 0
+c
+d 16 2 1 0 0
+c
+d 133 2 1 0 0
+c
+d 124 2 0 0 0
+c
+d 221 1 0 1 0
+c
+d 222 1 0 0 0
+c
+d 1233 2 0 1 0
+c
+d 262 2 1 0 0
+c
+d 100 2 0 0 0
+c
+d 105 1 1 0 0
+c
+d 662 2 0 0 0
+c
+d 667 1 1 0 0
+c
+d 437 1 0 0 0
+c
+d 445 1 0 0 0
+c
+d 584 1 0 0 0
+c
+d 585 1 1 0 0
+c
+d 1192 2 0 0 0
+c
+d 1206 1 0 0 0
+c
+d 148 3 0 0 0
+c
+d 545 3 0 0 0
+c
+d 769 3 0 0 0
+c
+d 1275 3 0 2 0
+c
+d 606 3 0 1 0
+c
+d 156 4 1 0 0
+c
+d 618 2 0 0 0
+c
+d 985 1 1 0 0
+c
+d 766 3 0 0 0
+c
+d 1127 2 0 0 0
+c
+d 1129 1 0 1 0
+c
+d 262 3 1 0 0
+c
+d 95 4 1 0 0
+c
+d 584 4 0 0 0
+c
+d 508 1 1 0 0
+c
+d 509 2 0 0 0
+c
+d 327 3 0 1 0
+c
+d 1043 2 0 0 0
+c
+d 691 2 0 1 0
+c
+d 44 3 0 2 0
+c
+d 93 1 0 1 0
+c
+d 133 1 0 0 0
+c
+d 162 3 0 2 0
+c
+d 735 1 1 0 0
+c
+d 737 2 0 0 0
+c
+d 737 5 1 0 0
+c
+d 686 3 0 2 0
+c
+d 461 3 0 0 0
+c
+d 167 3 1 0 0
+c
+d 1319 2 0 1 0
+c
+d 1320 2 0 1 0
+c
+d 121 1 0 0 0
+c
+d 123 1 0 0 0
+c
+d 531 1 1 0 0
+c
+d 532 1 0 0 0
+c
+d 535 1 0 0 0
+c
+d 919 2 1 0 0
+c
+d 924 2 0 0 0
+c
+d 341 2 0 2 0
+c
+d 1275 2 0 0 0
+c
+d 305 2 1 0 0
+c
+d 306 1 0 0 0
+c
+d 1134 2 1 0 0
+c
+d 604 3 1 0 0
+c
+d 799 3 0 2 0
+c
+d 1111 2 0 0 0
+c
+d 529 2 1 0 0
+c
+d 1061 1 0 0 0
+c
+d 650 3 0 0 0
+c
+d 1168 1 0 0 0
+c
+d 1176 1 0 0 0
+c
+d 167 1 0 1 0
+c
+d 369 1 0 1 0
+c
+d 800 1 0 0 0
+c
+d 801 1 0 0 0
+c
+d 262 3 0 2 0
+c
+d 6 1 0 1 0
+c
+d 12 1 0 1 0
+c
+d 169 4 0 1 0
+c
+d 114 3 0 1 0
+c
+d 28 1 0 0 0
+c
+d 29 2 1 0 0
+c
+d 927 1 0 0 0
+c
+d 928 1 0 0 0
+c
+d 604 2 0 0 0
+c
+d 977 2 0 0 0
+c
+d 1177 3 0 0 0
+c
+d 18 2 0 0 0
+c
+d 232 2 0 0 0
+c
+d 1194 3 0 0 0
+c
+d 575 2 1 0 0
+c
+d 796 1 0 0 0
+c
+d 259 1 0 0 0
+c
+d 261 2 1 0 0
+c
+d 9 3 1 0 0
+c
+d 1185 1 0 0 0
+c
+d 1191 1 0 0 0
+c
+d 243 3 0 0 0
+c
+d 301 3 0 0 0
+c
+d 1000 3 0 1 0
+c
+d 606 2 0 1 0
+c
+d 402 1 0 1 0
+c
+d 404 1 0 1 0
+c
+d 1195 2 0 2 0
+c
+d 1196 1 0 0 0
+c
+d 34 1 0 1 0
+c
+d 1315 1 0 0 0
+c
+d 10 2 0 1 0
+c
+d 11 1 0 1 0
+c
+d 970 3 1 0 0
+c
+d 427 2 0 2 0
+c
+d 428 1 0 0 0
+c
+d 242 1 1 0 0
+c
+d 262 2 0 0 0
+c
+d 31 3 0 0 0
+c
+d 542 2 0 0 0
+c
+d 315 2 0 0 0
+c
+d 301 1 1 0 0
+c
+d 1156 2 0 0 0
+c
+d 276 1 0 1 0
+c
+d 289 1 0 0 0
+c
+d 305 3 0 0 0
+c
+d 749 3 0 0 0
+c
+d 1300 2 0 0 0
+c
+d 17 2 0 0 0
+c
+d 232 1 0 0 0
+c
+d 233 1 1 0 0
+c
+d 301 2 0 2 0
+c
+d 54 2 1 0 0
+c
+d 1311 1 0 0 0
+c
+d 737 3 0 1 0
+c
+d 697 2 0 2 0
+c
+d 18 2 0 1 0
+c
+d 1156 1 1 0 0
+c
+d 1192 1 0 0 0
+c
+d 796 2 0 0 0
+c
+d 671 1 0 0 0
+c
+d 672 2 0 0 0
+c
+d 132 1 0 1 0
+c
+d 133 1 0 0 0
+c
+d 998 2 0 0 0
+c
+d 277 1 0 0 0
+c
+d 1158 1 1 0 0
+c
+d 341 2 1 0 0
+c
+d 423 1 0 0 0
+c
+d 1163 2 0 2 0
+c
+d 252 1 0 0 0
+c
+d 259 2 1 0 0
+c
+d 1199 2 0 1 0
+c
+d 69 1 0 0 0
+c
+d 70 2 0 0 0
+c
+d 738 4 1 0 0
+c
+d 635 3 1 0 0
+c
+d 697 1 0 0 0
+c
+d 698 1 0 0 0
+c
+d 301 3 0 1 0
+c
+d 241 1 0 0 0
+c
+d 242 2 0 0 0
+c
+d 606 1 0 0 0
+c
+d 635 1 0 0 0
+c
+d 1060 2 0 0 0
+c
+d 1061 1 0 0 0
+c
+d 101 2 0 0 0
+c
+d 109 1 0 0 0
+c
+d 799 1 0 0 0
+c
+d 843 1 0 0 0
+c
+d 278 1 0 0 0
+c
+d 1168 3 1 0 0
+c
+d 305 2 0 0 0
+c
+d 1086 2 1 0 0
+c
+d 152 1 0 1 0
+c
+d 155 1 0 0 0
+c
+d 599 3 0 0 0
+c
+d 755 1 0 0 0
+c
+d 756 1 0 0 0
+c
+d 348 3 1 0 0
+c
+d 21 2 0 0 0
+c
+d 7 3 0 1 0
+c
+d 1279 1 0 0 0
+c
+d 27 3 1 0 0
+c
+d 737 1 0 0 0
+c
+d 846 1 0 0 0
+c
+d 854 1 0 0 0
+c
+d 392 1 0 0 0
+c
+d 393 2 1 0 0
+c
+d 168 1 0 0 0
+c
+d 369 1 0 0 0
+c
+d 301 1 0 0 0
+c
+d 315 1 0 0 0
+c
+d 1233 2 0 0 0
+c
+d 194 3 0 0 0
+c
+d 349 1 0 0 0
+c
+d 1145 1 0 0 0
+c
+d 719 2 0 0 0
+c
+d 949 1 0 0 0
+c
+d 129 2 0 1 0
+c
+d 1168 3 0 0 0
+c
+d 863 2 1 0 0
+c
+d 575 2 0 0 0
+c
+d 133 1 0 0 0
+c
+d 150 1 0 0 0
+c
+d 178 4 1 0 0
+c
+d 699 2 0 2 0
+c
+d 1125 2 0 0 0
+c
+d 169 2 1 0 0
+c
+d 646 2 0 0 0
+c
+d 120 2 0 0 0
+c
+d 121 1 1 0 0
+c
+d 558 1 0 0 0
+c
+d 1059 1 0 0 0
+c
+d 21 3 1 0 0
+c
+d 743 1 0 0 0
+c
+d 746 1 0 0 0
+c
+d 753 1 0 0 0
+c
+d 262 2 0 1 0
+c
+d 1279 3 1 0 0
+c
+d 751 3 1 0 0
+c
+d 242 2 0 0 0
+c
+d 575 3 0 0 0
+c
+d 75 1 0 0 0
+c
+d 84 1 0 0 0
+c
+d 812 3 0 1 0
+c
+d 152 3 1 0 0
+c
+d 37 4 1 0 0
+c
+d 575 1 0 1 0
+c
+d 796 1 0 0 0
+c
+d 348 1 0 1 0
+c
+d 349 1 0 0 0
+c
+d 1145 2 0 1 0
+c
+d 691 4 0 0 0
+c
+d 1269 2 0 1 0
+c
+d 315 2 0 0 0
+c
+d 558 1 0 0 0
+c
+d 565 1 0 0 0
+c
+d 217 3 1 0 0
+c
+d 429 3 0 0 0
+c
+d 842 3 1 0 0
+c
+d 101 1 0 1 0
+c
+d 106 2 1 0 0
+c
+d 276 3 0 0 0
+c
+d 357 3 1 0 0
+c
+d 1156 1 0 1 0
+c
+d 1192 1 0 0 0
+c
+d 691 3 0 0 0
+c
+d 470 1 0 0 0
+c
+d 477 1 0 0 0
+c
+d 120 2 0 1 0
+c
+d 126 1 0 1 0
+c
+d 527 3 0 0 0
+c
+d 661 1 0 0 0
+c
+d 673 1 0 0 0
+c
+d 662 2 0 1 0
+c
+d 1127 3 0 0 0
+c
+d 931 2 1 0 0
+c
+d 932 1 0 0 0
+c
+d 369 2 0 1 0
+c
+d 19 3 0 0 0
+c
+d 978 1 1 0 0
+c
+d 799 2 0 0 0
+c
+d 16 2 0 1 0
+c
+d 1125 2 1 0 0
+c
+d 21 2 0 0 0
+c
+d 115 1 0 0 0
+c
+d 120 1 0 0 0
+c
+d 591 2 0 2 0
+c
+d 768 4 1 0 0
+c
+d 349 1 0 0 0
+c
+d 350 1 0 0 0
+c
+d 107 3 0 0 0
+c
+d 1111 2 1 0 0
+c
+d 1 3 0 1 0
+c
+d 392 1 0 1 0
+c
+d 1126 1 0 1 0
+c
+d 21 2 1 0 0
+c
+d 274 1 0 1 0
+c
+d 277 1 0 0 0
+c
+d 1170 3 0 0 0
+c
+d 1279 2 0 0 0
+c
+d 1281 1 0 0 0
+c
+d 242 1 0 0 0
+c
+d 246 2 1 0 0
+c
+d 19 1 0 0 0
+c
+d 1023 1 0 0 0
+c
+d 602 1 0 0 0
+c
+d 604 1 0 0 0
+c
+d 686 1 0 0 0
+c
+d 712 1 0 1 0
+c
+d 115 3 0 1 0
+c
+d 315 1 0 0 0
+c
+d 318 1 0 0 0
+c
+d 879 2 0 0 0
+c
+d 278 1 0 0 0
+c
+d 1165 2 0 1 0
+c
+d 156 1 0 0 0
+c
+d 164 1 1 0 0
+c
+d 165 1 0 0 0
+c
+d 315 2 0 1 0
+c
+d 148 3 1 0 0
+c
+d 84 3 0 0 0
+c
+d 301 1 0 0 0
+c
+d 1217 1 0 0 0
+c
+d 384 3 0 1 0
+c
+d 799 4 0 0 0
+c
+d 829 1 1 0 0
+c
+d 835 1 0 0 0
+c
+d 157 2 0 0 0
+c
+d 364 1 0 0 0
+c
+d 1045 3 1 0 0
+c
+d 686 3 1 0 0
+c
+d 166 4 0 1 0
+c
+d 259 1 1 0 0
+c
+d 261 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 369 2 0 0 0
+c
+d 382 1 0 0 0
+c
+d 205 3 0 0 0
+c
+d 1168 2 0 0 0
+c
+d 54 2 0 0 0
+c
+d 531 2 1 0 0
+c
+d 1170 1 0 0 0
+c
+d 1173 1 0 1 0
+c
+d 1174 1 0 0 0
+c
+d 1194 3 0 2 0
+c
+d 536 2 0 0 0
+c
+d 540 1 0 0 0
+c
+d 16 4 1 0 0
+c
+d 157 2 0 2 0
+c
+d 663 3 1 0 0
+c
+d 167 1 0 0 0
+c
+d 1121 1 0 0 0
+c
+d 1122 1 1 0 0
+c
+d 1170 1 0 1 0
+c
+d 1173 1 0 1 0
+c
+d 437 1 1 0 0
+c
+d 466 1 0 0 0
+c
+d 765 4 0 1 0
+c
+d 753 3 1 0 0
+c
+d 1173 1 0 1 0
+c
+d 1174 1 0 1 0
+c
+d 168 2 1 0 0
+c
+d 242 1 0 1 0
+c
+d 243 1 0 0 0
+c
+d 660 1 0 0 0
+c
+d 662 2 1 0 0
+c
+d 1281 3 1 0 0
+c
+d 1097 1 0 1 0
+c
+d 1100 1 0 0 0
+c
+d 1101 1 0 0 0
+c
+d 327 1 1 0 0
+c
+d 353 1 0 0 0
+c
+d 341 1 0 1 0
+c
+d 344 1 0 0 0
+c
+d 1147 1 0 1 0
+c
+d 167 3 1 0 0
+c
+d 1275 1 0 1 0
+c
+d 1276 1 0 0 0
+c
+d 353 1 0 0 0
+c
+d 357 1 1 0 0
+c
+d 374 3 0 0 0
+c
+d 795 4 0 0 0
+c
+d 834 1 0 0 0
+c
+d 301 2 0 2 0
+c
+d 1020 2 0 0 0
+c
+d 324 1 0 0 0
+c
+d 332 1 0 0 0
+c
+d 799 1 0 0 0
+c
+d 844 1 0 0 0
+c
+d 206 2 0 1 0
+c
+d 811 3 0 0 0
+c
+d 127 1 0 0 0
+c
+d 129 1 0 0 0
+c
+d 1260 1 1 0 0
+c
+d 377 1 0 0 0
+c
+d 378 2 0 1 0
+c
+d 384 1 1 0 0
+c
+d 278 1 0 0 0
+c
+d 1168 1 0 0 0
+c
+d 878 2 1 0 0
+c
+d 289 3 1 0 0
+c
+d 301 2 0 1 0
+c
+d 208 3 1 0 0
+c
+d 796 1 0 1 0
+c
+d 813 1 0 1 0
+c
+d 734 2 0 2 0
+c
+d 811 2 0 2 0
+c
+d 575 2 0 0 0
+c
+d 796 1 0 0 0
+c
+d 929 1 0 0 0
+c
+d 932 2 0 0 0
+c
+d 5 1 0 0 0
+c
+d 18 1 0 1 0
+c
+d 1279 1 0 1 0
+c
+d 753 2 0 0 0
+c
+d 759 1 0 0 0
+c
+d 1170 1 0 0 0
+c
+d 1184 1 1 0 0
+c
+d 1209 2 0 0 0
+c
+d 800 4 1 0 0
+c
+d 799 2 1 0 0
+c
+d 1173 2 0 0 0
+c
+d 529 2 0 0 0
+c
+d 1062 1 1 0 0
+c
+d 749 3 0 1 0
+c
+d 124 4 0 0 0
+c
+d 686 2 0 2 0
+c
+d 799 1 0 1 0
+c
+d 915 2 0 0 0
+c
+d 402 2 0 0 0
+c
+d 403 1 0 0 0
+c
+d 1060 3 1 1 0
+c
+d 353 2 1 0 0
+c
+d 656 3 0 0 0
+c
+d 1172 1 0 0 0
+c
+d 1185 1 0 0 0
+c
+d 100 1 0 0 0
+c
+d 990 1 0 0 0
+c
+d 194 3 1 0 0
+c
+d 159 1 0 1 0
+c
+d 183 2 0 0 0
+c
+d 528 3 0 0 0
+c
+d 48 2 0 0 0
+c
+d 1185 1 0 0 0
+c
+d 1188 1 1 0 0
+c
+d 1191 1 0 0 0
+c
+d 796 2 0 0 0
+c
+d 327 1 0 0 0
+c
+d 349 1 0 0 0
+c
+d 712 3 0 0 0
+c
+d 662 1 0 0 0
+c
+d 667 1 0 0 0
+c
+d 1224 2 0 2 0
+c
+d 1203 2 0 0 0
+c
+d 1207 1 1 0 0
+c
+d 261 2 0 0 0
+c
+d 479 4 1 0 0
+c
+d 673 2 0 0 0
+c
+d 115 2 0 0 0
+c
+d 120 1 1 0 0
+c
+d 54 3 0 2 0
+c
+d 55 1 0 0 0
+c
+d 48 3 1 0 0
+c
+d 278 1 0 0 0
+c
+d 1165 1 1 0 0
+c
+d 1211 2 0 0 0
+c
+d 328 3 0 1 0
+c
+d 341 3 1 0 0
+c
+d 133 2 0 0 0
+c
+d 324 1 0 0 0
+c
+d 193 3 0 1 0
+c
+d 133 3 0 0 0
+c
+d 162 2 1 0 0
+c
+d 366 1 0 0 0
+c
+d 1300 1 0 0 0
+c
+d 1302 1 0 0 0
+c
+d 55 2 0 1 0
+c
+d 599 3 0 2 0
+c
+d 159 1 0 0 0
+c
+d 178 1 0 0 0
+c
+d 606 2 1 0 0
+c
+d 686 3 0 0 0
+c
+d 17 3 0 0 0
+c
+d 556 2 0 0 0
+c
+d 686 4 0 0 0
+c
+d 205 1 1 0 0
+c
+d 1241 1 0 0 0
+c
+d 368 3 1 0 0
+c
+d 970 1 0 1 0
+c
+d 973 3 0 1 0
+c
+d 89 3 1 0 0
+c
+d 162 2 0 0 0
+c
+d 93 1 0 1 0
+c
+d 95 2 0 0 0
+c
+d 1192 4 1 0 0
+c
+d 559 2 1 0 0
+c
+d 328 1 0 0 0
+c
+d 353 1 0 1 0
+c
+d 604 2 0 0 0
+c
+d 54 3 1 0 0
+c
+d 1 4 1 0 0
+c
+d 111 3 0 2 0
+c
+d 429 2 0 1 0
+c
+d 430 1 0 1 0
+c
+d 1163 1 0 0 0
+c
+d 1165 1 0 0 0
+c
+d 1211 2 0 1 0
+c
+d 232 4 1 0 0
+c
+d 206 1 0 1 0
+c
+d 207 1 0 0 0
+c
+d 18 4 1 0 0
+c
+d 1168 1 0 0 0
+c
+d 1177 1 0 0 0
+c
+d 32 4 1 0 0
+c
+d 437 1 0 0 0
+c
+d 445 1 0 0 0
+c
+d 734 3 0 0 0
+c
+d 1063 2 1 0 0
+c
+d 1067 1 0 0 0
+c
+d 193 2 1 0 0
+c
+d 691 2 0 0 0
+c
+d 550 1 1 0 0
+c
+d 1067 1 0 0 0
+c
+d 301 1 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 95 2 0 1 0
+c
+d 599 1 0 0 0
+c
+d 606 3 0 0 0
+c
+d 1002 1 0 0 0
+c
+d 1003 1 0 0 0
+c
+d 172 2 0 0 0
+c
+d 241 1 0 0 0
+c
+d 248 2 0 0 0
+c
+d 753 2 0 0 0
+c
+d 754 1 0 0 0
+c
+d 334 3 0 0 0
+c
+d 663 3 0 0 0
+c
+d 1237 1 0 1 0
+c
+d 1238 1 0 1 0
+c
+d 691 1 0 0 0
+c
+d 699 1 1 0 0
+c
+d 919 2 0 0 0
+c
+d 574 2 0 0 0
+c
+d 858 1 0 0 0
+c
+d 869 2 1 0 0
+c
+d 944 3 1 0 0
+c
+d 689 1 0 0 0
+c
+d 691 1 0 1 0
+c
+d 702 1 0 0 0
+c
+d 620 2 0 0 0
+c
+d 811 3 0 0 0
+c
+d 455 1 0 1 0
+c
+d 457 2 0 0 0
+c
+d 301 3 0 0 0
+c
+d 55 3 0 2 0
+c
+d 1150 4 1 0 0
+c
+d 24 3 0 0 0
+c
+d 26 1 0 1 0
+c
+d 246 3 0 0 0
+c
+d 876 3 0 0 0
+c
+d 133 1 0 0 0
+c
+d 294 1 0 0 0
+c
+d 400 3 1 0 0
+c
+d 241 3 0 1 0
+c
+d 242 1 0 0 0
+c
+d 1170 3 0 0 0
+c
+d 977 2 0 1 0
+c
+d 29 1 0 0 0
+c
+d 31 1 0 0 0
+c
+d 159 1 0 0 0
+c
+d 178 2 1 0 0
+c
+d 10 1 0 1 0
+c
+d 11 1 0 0 0
+c
+d 21 3 0 0 0
+c
+d 384 1 0 1 0
+c
+d 392 1 0 0 0
+c
+d 301 2 0 1 0
+c
+d 878 1 0 1 0
+c
+d 879 2 0 1 0
+c
+d 1027 3 0 0 0
+c
+d 1191 2 1 0 0
+c
+d 167 2 0 1 0
+c
+d 1121 1 0 1 0
+c
+d 686 2 0 0 0
+c
+d 857 1 0 0 0
+c
+d 858 1 0 0 0
+c
+d 691 3 1 0 0
+c
+d 6 1 0 0 0
+c
+d 12 1 0 1 0
+c
+d 294 2 0 0 0
+c
+d 970 2 1 0 0
+c
+d 973 1 0 0 0
+c
+d 278 1 0 0 0
+c
+d 279 2 1 0 0
+c
+d 54 1 0 1 0
+c
+d 1311 2 0 0 0
+c
+d 513 1 0 0 0
+c
+d 523 1 0 0 0
+c
+d 527 1 0 0 0
+c
+d 97 3 0 0 0
+c
+d 75 1 1 0 0
+c
+d 1300 2 0 0 0
+c
+d 167 2 0 0 0
+c
+d 1045 4 1 0 0
+c
+d 148 2 0 1 0
+c
+d 232 1 0 1 0
+c
+d 559 3 1 0 0
+c
+d 686 2 0 0 0
+c
+d 634 4 1 0 0
+c
+d 559 2 0 0 0
+c
+d 562 1 0 0 0
+c
+d 529 3 0 0 0
+c
+d 768 2 0 0 0
+c
+d 773 1 0 0 0
+c
+d 241 1 0 0 0
+c
+d 242 2 1 0 0
+c
+d 1194 2 0 0 0
+c
+d 1203 1 0 1 0
+c
+d 196 1 0 1 0
+c
+d 197 2 0 1 0
+c
+d 168 2 0 1 0
+c
+d 1242 3 0 0 0
+c
+d 276 1 0 0 0
+c
+d 288 1 0 0 0
+c
+d 606 2 1 0 0
+c
+d 437 4 1 0 0
+c
+d 651 1 0 0 0
+c
+d 686 1 0 0 0
+c
+d 689 1 1 0 0
+c
+d 133 2 0 2 0
+c
+d 437 2 0 0 0
+c
+d 507 1 0 0 0
+c
+d 470 1 0 0 0
+c
+d 477 1 0 0 0
+c
+d 204 1 0 1 0
+c
+d 224 1 0 1 0
+c
+d 606 2 0 1 0
+c
+d 211 1 0 1 0
+c
+d 242 2 0 0 0
+c
+d 1274 2 0 0 0
+c
+d 602 1 0 1 0
+c
+d 631 1 0 0 0
+c
+d 632 1 0 1 0
+c
+d 525 3 1 0 0
+c
+d 1241 2 1 0 0
+c
+d 168 3 1 0 0
+c
+d 157 2 0 2 0
+c
+d 16 3 0 0 0
+c
+d 413 1 1 0 0
+c
+d 414 1 0 0 0
+c
+d 697 1 0 0 0
+c
+d 951 1 0 0 0
+c
+d 954 2 0 0 0
+c
+d 673 3 1 0 0
+c
+d 1009 2 0 2 0
+c
+d 634 2 0 0 0
+c
+d 129 3 1 0 0
+c
+d 599 1 0 1 0
+c
+d 604 1 0 0 0
+c
+d 1237 2 1 0 0
+c
+d 620 2 0 0 0
+c
+d 217 2 0 0 0
+c
+d 498 4 0 0 0
+c
+d 101 1 0 1 0
+c
+d 107 1 0 0 0
+c
+d 156 4 0 1 0
+c
+d 18 1 0 0 0
+c
+d 95 2 0 0 0
+c
+d 159 4 0 0 0
+c
+d 767 3 1 0 0
+c
+d 168 2 0 0 0
+c
+d 691 3 0 0 0
+c
+d 653 3 1 0 0
+c
+d 146 1 0 0 0
+c
+d 226 1 0 1 0
+c
+d 238 1 0 1 0
+c
+d 217 1 0 1 0
+c
+d 218 1 0 0 0
+c
+d 507 3 1 0 0
+c
+d 96 2 0 0 0
+c
+d 111 1 1 0 0
+c
+d 211 2 0 0 0
+c
+d 29 1 0 0 0
+c
+d 31 1 0 0 0
+c
+d 328 4 1 0 0
+c
+d 871 3 1 0 0
+c
+d 641 3 0 0 0
+c
+d 301 1 0 0 0
+c
+d 314 1 0 0 0
+c
+d 797 4 0 2 0
+c
+d 294 4 0 0 0
+c
+d 437 1 0 1 0
+c
+d 455 2 0 1 0
+c
+d 52 3 0 0 0
+c
+d 1194 1 0 1 0
+c
+d 1195 2 0 0 0
+c
+d 373 4 0 0 0
+c
+d 194 2 0 0 0
+c
+d 796 2 1 0 0
+c
+d 815 1 0 0 0
+c
+d 1153 3 0 1 0
+c
+d 523 1 0 0 0
+c
+d 527 1 1 0 0
+c
+d 2 1 0 0 0
+c
+d 517 2 0 1 0
+c
+d 16 2 0 1 0
+c
+d 527 2 0 0 0
+c
+d 437 2 0 0 0
+c
+d 663 2 0 0 0
+c
+d 664 2 0 0 0
+c
+d 872 3 0 0 0
+c
+d 878 1 0 0 0
+c
+d 882 1 0 0 0
+c
+d 429 1 0 0 0
+c
+d 430 1 1 0 0
+c
+d 381 3 0 0 0
+c
+d 429 2 0 2 0
+c
+d 678 4 0 0 0
+c
+d 753 1 0 1 0
+c
+d 754 2 0 0 0
+c
+d 919 4 1 0 0
+c
+d 1111 1 0 0 0
+c
+d 1113 1 0 0 0
+c
+d 156 1 0 1 0
+c
+d 163 1 0 1 0
+c
+d 91 2 0 0 0
+c
+d 278 4 1 0 0
+c
+d 807 2 0 1 0
+c
+d 821 1 0 1 0
+c
+d 168 1 0 0 0
+c
+d 369 1 1 0 0
+c
+d 1185 2 0 2 0
+c
+d 156 2 0 0 0
+c
+d 301 1 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 277 1 0 0 0
+c
+d 278 1 0 0 0
+c
+d 384 3 0 0 0
+c
+d 959 3 1 0 0
+c
+d 753 3 0 0 0
+c
+d 75 1 1 0 0
+c
+d 1299 1 0 0 0
+c
+d 1300 1 0 0 0
+c
+d 353 2 0 1 0
+c
+d 357 1 0 1 0
+c
+d 430 1 0 0 0
+c
+d 470 1 0 0 0
+c
+d 28 1 0 1 0
+c
+d 1315 2 0 1 0
+c
+d 294 2 0 0 0
+c
+d 296 1 0 0 0
+c
+d 84 5 1 0 0
+c
+d 743 3 0 1 0
+c
+d 91 2 0 0 0
+c
+d 93 1 0 0 0
+c
+d 301 3 1 0 0
+c
+d 168 2 0 0 0
+c
+d 369 1 1 0 0
+c
+d 11 1 0 0 0
+c
+d 12 1 0 0 0
+c
+d 1177 2 0 0 0
+c
+d 1184 1 0 0 0
+c
+d 368 1 0 0 0
+c
+d 369 1 1 0 0
+c
+d 1126 1 0 0 0
+c
+d 1045 3 0 0 0
+c
+d 411 2 0 0 0
+c
+d 1194 2 1 0 0
+c
+d 1202 1 0 0 0
+c
+d 525 2 0 0 0
+c
+d 527 3 0 0 0
+c
+d 204 3 1 0 0
+c
+d 19 5 1 0 0
+c
+d 54 2 0 0 0
+c
+d 353 2 0 0 0
+c
+d 348 4 0 2 0
+c
+d 114 3 0 0 0
+c
+d 876 4 0 0 0
+c
+d 383 1 0 0 0
+c
+d 1134 1 0 1 0
+c
+d 1135 1 0 0 0
+c
+d 301 1 0 0 0
+c
+d 1153 1 0 0 0
+c
+d 1154 1 1 0 0
+c
+d 749 1 0 1 0
+c
+d 894 1 0 0 0
+c
+d 418 3 1 0 0
+c
+d 430 1 0 0 0
+c
+d 432 1 0 0 0
+c
+d 1084 3 1 0 0
+c
+d 301 2 0 1 0
+c
+d 1156 1 0 1 0
+c
+d 96 1 0 0 0
+c
+d 97 1 0 0 0
+c
+d 578 1 1 0 0
+c
+d 580 2 0 0 0
+c
+d 1020 2 0 0 0
+c
+d 1021 1 1 0 0
+c
+d 152 2 0 0 0
+c
+d 413 1 1 0 0
+c
+d 383 4 0 0 0
+c
+d 7 3 0 2 0
+c
+d 800 2 0 0 0
+c
+d 374 2 0 0 0
+c
+d 169 1 0 0 0
+c
+d 376 1 0 0 0
+c
+d 377 1 0 0 0
+c
+d 91 1 0 1 0
+c
+d 92 1 0 0 0
+c
+d 1184 1 0 0 0
+c
+d 1197 1 0 0 0
+c
+d 578 5 1 0 0
+c
+d 19 1 0 0 0
+c
+d 1024 1 0 0 0
+c
+d 1170 3 0 1 0
+c
+d 1184 1 0 1 0
+c
+d 204 1 0 1 0
+c
+d 217 1 0 0 0
+c
+d 1241 1 0 1 0
+c
+d 1319 4 0 0 0
+c
+d 91 4 0 0 0
+c
+d 879 2 0 0 0
+c
+d 183 2 0 1 0
+c
+d 196 1 0 1 0
+c
+d 437 1 0 0 0
+c
+d 507 2 1 0 0
+c
+d 100 1 0 0 0
+c
+d 105 1 0 0 0
+c
+d 430 1 1 0 0
+c
+d 470 2 0 0 0
+c
+d 156 4 0 0 0
+c
+d 458 4 0 2 0
+c
+d 572 3 0 2 0
+c
+d 863 3 1 0 0
+c
+d 697 2 1 0 0
+c
+d 719 1 0 0 0
+c
+d 1173 4 0 0 0
+c
+d 660 4 1 0 0
+c
+d 511 2 0 0 0
+c
+d 527 1 0 0 0
+c
+d 95 4 1 0 0
+c
+d 217 3 0 1 0
+c
+d 32 2 0 0 0
+c
+d 33 2 1 0 0
+c
+d 382 2 0 0 0
+c
+d 384 1 0 0 0
+c
+d 275 2 0 0 0
+c
+d 926 3 0 0 0
+c
+d 121 1 0 0 0
+c
+d 124 1 0 1 0
+c
+d 697 2 0 1 0
+c
+d 953 3 0 0 0
+c
+d 278 2 0 1 0
+c
+d 1228 1 0 1 0
+c
+d 286 1 0 0 0
+c
+d 291 1 0 0 0
+c
+d 635 3 0 0 0
+c
+d 301 2 0 0 0
+c
+d 341 1 0 1 0
+c
+d 400 1 0 0 0
+c
+d 407 1 0 0 0
+c
+d 278 1 0 0 0
+c
+d 1165 1 0 0 0
+c
+d 749 2 1 0 0
+c
+d 734 2 0 0 0
+c
+d 602 3 0 0 0
+c
+d 753 3 0 0 0
+c
+d 199 1 1 0 0
+c
+d 200 1 0 0 0
+c
+d 443 2 1 0 0
+c
+d 444 1 0 0 0
+c
+d 641 1 1 0 0
+c
+d 642 2 0 0 0
+c
+d 796 4 0 0 0
+c
+d 915 2 0 0 0
+c
+d 146 1 0 0 0
+c
+d 232 1 0 0 0
+c
+d 233 1 0 0 0
+c
+d 353 1 0 0 0
+c
+d 355 1 0 0 0
+c
+d 9 1 0 0 0
+c
+d 10 1 0 0 0
+c
+d 621 2 0 0 0
+c
+d 646 1 0 0 0
+c
+d 1 3 0 0 0
+c
+d 1091 4 1 0 0
+c
+d 833 1 0 0 0
+c
+d 835 1 0 0 0
+c
+d 839 1 1 0 0
+c
+d 842 1 0 0 0
+c
+d 763 3 0 0 0
+c
+d 211 2 0 0 0
+c
+d 763 2 0 0 0
+c
+d 764 2 0 0 0
+c
+d 211 3 0 2 0
+c
+d 301 1 0 0 0
+c
+d 635 1 0 1 0
+c
+d 641 1 0 1 0
+c
+d 7 4 0 0 0
+c
+d 591 4 0 0 0
+c
+d 305 1 0 1 0
+c
+d 328 1 0 1 0
+c
+d 353 1 0 0 0
+c
+d 156 1 0 0 0
+c
+d 411 2 1 0 0
+c
+d 26 4 0 1 0
+c
+d 796 3 1 0 0
+c
+d 221 2 0 0 0
+c
+d 168 2 0 0 0
+c
+d 169 1 0 0 0
+c
+d 48 3 1 0 0
+c
+d 18 4 1 0 0
+c
+d 369 2 0 0 0
+c
+d 164 3 0 0 0
+c
+d 5 1 0 1 0
+c
+d 7 1 0 0 0
+c
+d 9 1 0 1 0
+c
+d 328 2 0 0 0
+c
+d 353 1 0 0 0
+c
+d 7 3 1 0 0
+c
+d 811 2 0 1 0
+c
+d 737 2 0 2 0
+c
+d 59 1 0 1 0
+c
+d 1032 1 0 1 0
+c
+d 811 3 1 0 0
+c
+d 101 1 0 0 0
+c
+d 109 1 0 0 0
+c
+d 110 1 0 0 0
+c
+d 686 1 0 0 0
+c
+d 701 2 0 0 0
+c
+d 19 3 0 1 0
+c
+d 423 1 1 0 0
+c
+d 427 1 0 0 0
+c
+d 799 1 0 1 0
+c
+d 843 2 0 0 0
+c
+d 799 3 0 2 0
+c
+d 1111 1 0 0 0
+c
+d 1113 3 1 0 0
+c
+d 259 1 0 0 0
+c
+d 285 1 0 0 0
+c
+d 1224 1 0 1 0
+c
+d 1225 2 0 0 0
+c
+d 1300 1 0 0 0
+c
+d 1302 1 0 0 0
+c
+d 745 3 0 0 0
+c
+d 206 3 1 0 0
+c
+d 75 2 0 0 0
+c
+d 79 1 0 0 0
+c
+d 327 3 0 2 0
+c
+d 305 1 0 1 0
+c
+d 353 1 0 1 0
+c
+d 146 2 1 0 0
+c
+d 148 1 0 0 0
+c
+d 355 2 0 2 0
+c
+d 99 1 0 0 0
+c
+d 1002 1 0 0 0
+c
+d 1003 1 1 0 0
+c
+d 327 4 0 0 0
+c
+d 836 1 0 0 0
+c
+d 837 1 0 0 0
+c
+d 599 2 0 0 0
+c
+d 427 4 1 0 0
+c
+d 1109 2 0 0 0
+c
+d 1105 1 1 0 0
+c
+d 1106 2 0 0 0
+c
+d 989 1 0 0 0
+c
+d 996 1 0 0 0
+c
+d 743 2 1 0 0
+c
+d 341 1 0 0 0
+c
+d 411 1 0 0 0
+c
+d 26 2 0 0 0
+c
+d 594 1 0 0 0
+c
+d 653 1 0 0 0
+c
+d 301 2 0 2 0
+c
+d 348 2 1 0 0
+c
+d 1174 2 0 1 0
+c
+d 196 1 0 0 0
+c
+d 197 1 0 0 0
+c
+d 198 1 0 0 0
+c
+d 935 2 0 0 0
+c
+d 1228 3 0 0 0
+c
+d 529 2 1 0 0
+c
+d 532 1 0 0 0
+c
+d 425 1 0 0 0
+c
+d 426 1 0 0 0
+c
+d 429 1 0 0 0
+c
+d 430 2 0 0 0
+c
+d 411 1 0 0 0
+c
+d 415 3 0 0 0
+c
+d 334 3 1 0 0
+c
+d 114 1 0 1 0
+c
+d 120 1 0 0 0
+c
+d 411 3 1 0 0
+c
+d 437 1 0 0 0
+c
+d 1043 1 1 0 0
+c
+d 1045 1 0 0 0
+c
+d 1046 1 0 0 0
+c
+d 429 2 0 1 0
+c
+d 599 2 0 0 0
+c
+d 558 2 0 0 0
+c
+d 1059 1 0 0 0
+c
+d 393 3 1 0 0
+c
+d 842 3 1 0 0
+c
+d 116 1 0 1 0
+c
+d 118 2 0 1 0
+c
+d 44 3 1 0 0
+c
+d 286 2 0 0 0
+c
+d 799 4 1 0 0
+c
+d 211 3 0 0 0
+c
+d 509 2 0 0 0
+c
+d 515 1 1 0 0
+c
+d 1 3 1 1 0
+c
+d 980 2 0 0 0
+c
+d 466 4 0 0 0
+c
+d 568 1 0 0 0
+c
+d 572 1 0 0 0
+c
+d 199 2 0 0 0
+c
+d 634 1 0 1 0
+c
+d 635 2 0 1 0
+c
+d 663 2 0 0 0
+c
+d 195 1 0 0 0
+c
+d 206 2 0 0 0
+c
+d 599 3 0 0 0
+c
+d 697 1 0 0 0
+c
+d 952 3 0 0 0
+c
+d 745 1 0 1 0
+c
+d 746 2 0 1 0
+c
+d 348 2 0 0 0
+c
+d 366 3 0 1 0
+c
+d 19 2 0 0 0
+c
+d 277 1 0 0 0
+c
+d 278 2 1 0 0
+c
+d 575 1 0 0 0
+c
+d 578 1 0 0 0
+c
+d 655 2 0 0 0
+c
+d 1121 1 0 0 0
+c
+d 1122 2 0 0 0
+c
+d 1184 2 0 1 0
+c
+d 1197 2 0 0 0
+c
+d 393 3 1 0 0
+c
+d 578 4 1 0 0
+c
+d 575 4 0 1 0
+c
+d 734 2 0 1 0
+c
+d 278 2 0 1 0
+c
+d 1228 2 0 0 0
+c
+d 91 1 0 0 0
+c
+d 93 2 1 0 0
+c
+d 811 1 0 1 0
+c
+d 905 1 0 0 0
+c
+d 906 1 0 1 0
+c
+d 1087 1 0 1 0
+c
+d 1090 1 0 1 0
+c
+d 599 1 0 0 0
+c
+d 602 1 0 0 0
+c
+d 756 3 1 0 0
+c
+d 1185 1 0 0 0
+c
+d 1186 1 0 0 0
+c
+d 1187 1 0 0 0
+c
+d 93 2 0 0 0
+c
+d 594 2 1 0 0
+c
+d 686 1 0 0 0
+c
+d 811 3 0 0 0
+c
+d 53 4 1 0 0
+c
+d 737 2 0 0 0
+c
+d 19 3 1 0 0
+c
+d 1097 3 0 1 0
+c
+d 878 2 0 2 0
+c
+d 211 4 0 0 0
+c
+d 92 1 0 0 0
+c
+d 93 1 0 0 0
+c
+d 114 1 1 0 0
+c
+d 768 3 0 0 0
+c
+d 1170 3 1 0 0
+c
+d 757 1 1 0 0
+c
+d 758 1 0 0 0
+c
+d 536 3 0 1 0
+c
+d 304 3 0 0 0
+c
+d 286 2 0 2 0
+c
+d 511 1 0 0 0
+c
+d 513 1 0 0 0
+c
+d 878 2 0 0 0
+c
+d 855 1 0 0 0
+c
+d 858 2 0 0 0
+c
+d 872 1 0 0 0
+c
+d 242 3 0 1 0
+c
+d 246 1 0 1 0
+c
+d 220 2 0 0 0
+c
+d 591 3 0 0 0
+c
+d 304 2 1 0 0
+c
+d 1217 2 0 0 0
+c
+d 148 3 0 0 0
+c
+d 574 4 1 0 0
+c
+d 301 1 0 0 0
+c
+d 304 1 0 0 0
+c
+d 168 1 0 1 0
+c
+d 378 1 0 1 0
+c
+d 1246 3 0 0 0
+c
+d 457 4 1 0 0
+c
+d 437 2 0 0 0
+c
+d 1048 1 0 1 0
+c
+d 93 2 0 0 0
+c
+d 1060 1 0 0 0
+c
+d 1062 1 0 1 0
+c
+d 1063 1 0 0 0
+c
+d 1050 2 1 0 0
+c
+d 195 2 0 0 0
+c
+d 835 3 0 0 0
+c
+d 419 3 0 0 0
+c
+d 878 2 0 0 0
+c
+d 7 3 0 0 0
+c
+d 606 2 0 0 0
+c
+d 167 3 0 0 0
+c
+d 1051 4 0 0 0
+c
+d 60 1 0 0 0
+c
+d 62 1 0 0 0
+c
+d 207 2 0 0 0
+c
+d 89 2 1 0 0
+c
+d 767 4 1 0 0
+c
+d 48 2 1 0 0
+c
+d 157 3 1 0 0
+c
+d 276 1 0 0 0
+c
+d 288 2 0 0 0
+c
+d 682 4 0 0 0
+c
+d 252 1 1 0 0
+c
+d 259 2 0 0 0
+c
+d 142 3 1 0 0
+c
+d 211 2 0 0 0
+c
+d 1185 2 0 1 0
+c
+d 1186 1 0 1 0
+c
+d 286 2 0 0 0
+c
+d 204 2 0 2 0
+c
+d 262 3 0 0 0
+c
+d 1047 2 0 2 0
+c
+d 1049 1 0 0 0
+c
+d 31 1 0 0 0
+c
+d 32 1 0 0 0
+c
+d 1318 1 0 0 0
+c
+d 859 1 0 0 0
+c
+d 871 2 0 0 0
+c
+d 753 1 0 1 0
+c
+d 755 1 0 1 0
+c
+d 871 3 0 0 0
+c
+d 437 3 1 0 0
+c
+d 437 2 0 0 0
+c
+d 443 2 0 0 0
+c
+d 301 4 1 0 0
+c
+d 300 1 0 0 0
+c
+d 315 1 0 0 0
+c
+d 195 2 0 2 0
+c
+d 876 4 1 0 0
+c
+d 455 3 1 0 0
+c
+d 929 3 0 0 0
+c
+d 341 2 0 2 0
+c
+d 345 1 0 0 0
+c
+d 1192 1 0 1 0
+c
+d 1203 1 0 1 0
+c
+d 1205 1 0 0 0
+c
+d 615 2 1 0 0
+c
+d 304 2 0 0 0
+c
+d 686 1 0 0 0
+c
+d 959 1 0 0 0
+c
+d 148 1 0 0 0
+c
+d 253 1 0 0 0
+c
+d 278 1 0 0 0
+c
+d 280 1 1 0 0
+c
+d 168 1 0 0 0
+c
+d 369 1 0 0 0
+c
+d 663 2 0 0 0
+c
+d 162 4 0 0 0
+c
+d 597 2 1 0 0
+c
+d 598 1 0 0 0
+c
+d 597 4 1 0 0
+c
+d 152 1 0 0 0
+c
+d 153 2 1 0 0
+c
+d 726 3 1 0 0
+c
+d 728 1 0 0 0
+c
+d 101 2 0 0 0
+c
+d 662 4 1 0 0
+c
+d 263 3 0 0 0
+c
+d 821 3 0 0 0
+c
+d 719 3 0 0 0
+c
+d 46 2 0 0 0
+c
+d 21 2 0 1 0
+c
+d 278 4 0 0 0
+c
+d 301 1 1 0 0
+c
+d 304 1 0 0 0
+c
+d 745 2 0 0 0
+c
+d 746 1 0 0 0
+c
+d 48 3 1 0 0
+c
+d 437 1 1 0 0
+c
+d 444 1 0 0 0
+c
+d 651 1 0 0 0
+c
+d 689 1 0 0 0
+c
+d 726 1 0 0 0
+c
+d 734 1 0 0 0
+c
+d 626 3 0 0 0
+c
+d 627 1 0 0 0
+c
+d 91 2 0 0 0
+c
+d 1265 1 1 0 0
+c
+d 1106 1 0 0 0
+c
+d 1107 2 0 0 0
+c
+d 655 1 0 0 0
+c
+d 658 1 0 0 0
+c
+d 439 3 1 0 0
+c
+d 445 2 0 0 0
+c
+d 448 1 1 0 0
+c
+d 806 3 0 1 0
+c
+d 618 2 0 0 0
+c
+d 619 2 0 0 0
+c
+d 280 2 0 1 0
+c
+d 718 2 0 0 0
+c
+d 719 1 0 0 0
+c
+d 902 3 0 0 0
+c
+d 580 4 0 0 0
+c
+d 18 2 0 0 0
+c
+d 769 1 0 0 0
+c
+d 775 2 1 0 0
+c
+d 246 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 618 1 0 0 0
+c
+d 965 2 0 0 0
+c
+d 377 2 0 0 0
+c
+d 69 1 0 0 0
+c
+d 647 1 0 1 0
+c
+d 649 1 0 1 0
+c
+d 1309 3 1 0 0
+c
+d 262 1 0 0 0
+c
+d 264 2 0 0 0
+c
+d 802 1 0 0 0
+c
+d 803 1 0 0 0
+c
+d 208 2 0 1 0
+c
+d 209 1 0 1 0
+c
+d 301 1 0 0 0
+c
+d 304 2 0 0 0
+c
+d 1194 2 0 1 0
+c
+d 1205 1 0 1 0
+c
+d 1 2 0 0 0
+c
+d 585 4 0 2 0
+c
+d 858 2 0 0 0
+c
+d 69 1 0 1 0
+c
+d 649 1 0 1 0
+c
+d 184 3 0 0 0
+c
+d 622 3 0 0 0
+c
+d 663 3 1 0 0
+c
+d 505 3 1 0 0
+c
+d 195 3 0 0 0
+c
+d 301 1 1 0 0
+c
+d 304 1 0 0 0
+c
+d 965 1 0 0 0
+c
+d 966 1 0 0 0
+c
+d 18 2 0 0 0
+c
+d 989 1 0 0 0
+c
+d 418 3 0 0 0
+c
+d 7 1 0 1 0
+c
+d 1274 1 0 1 0
+c
+d 1284 1 0 0 0
+c
+d 153 2 0 0 0
+c
+d 284 4 1 0 0
+c
+d 309 2 0 0 0
+c
+d 1156 4 0 0 0
+c
+d 728 1 0 0 0
+c
+d 729 2 0 0 0
+c
+d 647 2 0 1 0
+c
+d 199 2 0 1 0
+c
+d 211 1 0 1 0
+c
+d 965 1 0 1 0
+c
+d 977 1 0 1 0
+c
+d 48 2 1 0 0
+c
+d 111 1 0 0 0
+c
+d 113 2 0 0 0
+c
+d 196 2 1 0 0
+c
+d 101 1 0 0 0
+c
+d 112 1 0 0 0
+c
+d 225 3 1 0 0
+c
+d 1087 1 0 1 0
+c
+d 1094 1 0 0 0
+c
+d 393 3 0 0 0
+c
+d 307 1 0 1 0
+c
+d 308 1 0 0 0
+c
+d 327 1 0 1 0
+c
+d 168 1 1 0 0
+c
+d 169 2 0 0 0
+c
+d 635 2 0 1 0
+c
+d 641 1 0 1 0
+c
+d 89 2 0 0 0
+c
+d 90 1 0 0 0
+c
+d 148 2 0 0 0
+c
+d 195 2 0 2 0
+c
+d 205 1 0 0 0
+c
+d 662 3 1 0 0
+c
+d 631 2 1 0 0
+c
+d 650 4 0 2 0
+c
+d 241 1 0 0 0
+c
+d 253 1 0 0 0
+c
+d 505 1 0 1 0
+c
+d 511 1 0 1 0
+c
+d 204 4 0 0 0
+c
+d 146 3 1 0 0
+c
+d 18 1 0 1 0
+c
+d 997 2 0 1 0
+c
+d 686 3 0 0 0
+c
+d 217 1 0 0 0
+c
+d 241 1 0 0 0
+c
+d 568 2 0 0 0
+c
+d 254 4 0 0 0
+c
+d 309 1 0 0 0
+c
+d 311 1 1 0 0
+c
+d 208 2 0 0 0
+c
+d 148 4 0 0 0
+c
+d 253 3 0 0 0
+c
+d 255 1 0 0 0
+c
+d 301 2 0 0 0
+c
+d 1195 4 1 0 0
+c
+d 437 2 0 0 0
+c
+d 1208 2 0 0 0
+c
+d 604 2 0 1 0
+c
+d 304 2 0 0 0
+c
+d 264 2 0 0 0
+c
+d 591 1 0 0 0
+c
+d 602 1 0 0 0
+c
+d 720 4 1 0 0
+c
+d 159 3 0 2 0
+c
+d 338 2 0 2 0
+c
+d 18 3 0 0 0
+c
+d 328 2 0 0 0
+c
+d 730 1 0 0 0
+c
+d 735 1 0 1 0
+c
+d 108 1 0 0 0
+c
+d 111 2 0 0 0
+c
+d 301 2 0 0 0
+c
+d 666 2 0 0 0
+c
+d 91 1 0 0 0
+c
+d 1265 1 0 1 0
+c
+d 281 1 1 0 0
+c
+d 1156 1 0 0 0
+c
+d 1214 1 0 0 0
+c
+d 598 1 0 1 0
+c
+d 599 1 0 0 0
+c
+d 959 3 0 0 0
+c
+d 28 1 0 0 0
+c
+d 1315 1 0 0 0
+c
+d 301 1 0 0 0
+c
+d 304 1 0 0 0
+c
+d 861 3 1 0 0
+c
+d 437 1 0 1 0
+c
+d 439 1 0 1 0
+c
+d 591 1 0 1 0
+c
+d 599 1 0 1 0
+c
+d 262 2 0 0 0
+c
+d 148 3 1 0 0
+c
+d 49 3 0 0 0
+c
+d 58 1 0 0 0
+c
+d 62 3 0 2 0
+c
+d 152 1 0 0 0
+c
+d 153 1 0 0 0
+c
+d 253 3 0 0 0
+c
+d 855 3 1 0 0
+c
+d 262 1 0 1 0
+c
+d 264 1 0 1 0
+c
+d 304 3 0 1 0
+c
+d 44 2 0 0 0
+c
+d 69 2 0 0 0
+c
+d 1163 3 1 0 0
+c
+d 283 2 0 1 0
+c
+d 730 1 0 0 0
+c
+d 733 2 1 0 0
+c
+d 7 2 0 0 0
+c
+d 8 1 0 1 0
+c
+d 662 2 0 1 0
+c
+d 650 3 1 0 0
+c
+d 620 2 0 0 0
+c
+d 686 3 0 0 0
+c
+d 650 1 0 1 0
+c
+d 653 3 0 1 0
+c
+d 1195 2 1 0 0
+c
+d 686 3 0 1 0
+c
+d 635 1 0 1 0
+c
+d 638 1 0 1 0
+c
+d 437 2 0 1 0
+c
+d 304 1 0 0 0
+c
+d 311 1 0 0 0
+c
+d 1067 2 0 2 0
+c
+d 1232 3 1 0 0
+c
+d 32 2 0 0 0
+c
+d 500 2 0 0 0
+c
+d 686 4 0 2 0
+c
+d 686 2 0 2 0
+c
+d 437 2 0 0 0
+c
+d 101 4 0 0 0
+c
+d 602 1 0 0 0
+c
+d 604 2 0 0 0
+c
+d 419 2 0 0 0
+c
+d 433 1 0 0 0
+c
+d 728 2 0 1 0
+c
+d 578 2 0 0 0
+c
+d 110 3 0 1 0
+c
+d 111 1 0 1 0
+c
+d 418 3 0 2 0
+c
+d 663 3 0 2 0
+c
+d 70 1 0 1 0
+c
+d 650 1 0 1 0
+c
+d 796 1 0 0 0
+c
+d 815 1 0 0 0
+c
+d 341 3 1 0 0
+c
+d 457 3 1 0 0
+c
+d 959 3 0 2 0
+c
+d 575 3 0 0 0
+c
+d 604 2 1 0 0
+c
+d 301 3 1 0 0
+c
+d 720 4 1 0 0
+c
+d 1163 2 0 2 0
+c
+d 755 1 0 0 0
+c
+d 764 1 0 0 0
+c
+d 419 1 0 0 0
+c
+d 420 1 1 0 0
+c
+d 421 1 0 0 0
+c
+d 304 2 1 0 0
+c
+d 301 2 0 2 0
+c
+d 453 1 0 0 0
+c
+d 455 1 0 0 0
+c
+d 597 3 1 0 0
+c
+d 169 2 0 2 0
+c
+d 378 1 0 0 0
+c
+d 991 2 0 0 0
+c
+d 264 3 1 0 0
+c
+d 304 3 1 0 0
+c
+d 241 1 0 0 0
+c
+d 249 2 0 0 0
+c
+d 638 2 0 0 0
+c
+d 495 3 0 0 0
+c
+d 726 1 0 1 0
+c
+d 727 1 0 1 0
+c
+d 948 2 0 0 0
+c
+d 19 2 0 0 0
+c
+d 491 4 0 0 0
+c
+d 253 4 1 0 0
+c
+d 727 4 1 0 0
+c
+d 610 1 0 1 0
+c
+d 612 1 0 0 0
+c
+d 613 1 0 0 0
+c
+d 328 2 0 0 0
+c
+d 719 1 0 0 0
+c
+d 720 1 0 0 0
+c
+d 19 1 0 1 0
+c
+d 965 2 0 1 0
+c
+d 558 3 0 0 0
+c
+d 437 2 1 0 0
+c
+d 466 1 0 0 0
+c
+d 795 1 0 1 0
+c
+d 820 1 0 0 0
+c
+d 253 2 0 1 0
+c
+d 254 1 0 1 0
+c
+d 437 2 0 2 0
+c
+d 49 1 0 0 0
+c
+d 59 1 0 0 0
+c
+d 959 2 0 1 0
+c
+d 241 1 0 0 0
+c
+d 253 1 0 0 0
+c
+d 726 2 0 0 0
+c
+d 948 1 0 0 0
+c
+d 1008 3 1 0 0
+c
+d 169 1 0 0 0
+c
+d 377 1 0 0 0
+c
+d 167 2 0 1 0
+c
+d 109 1 0 0 0
+c
+d 110 2 0 0 0
+c
+d 720 3 0 2 0
+c
+d 217 3 0 0 0
+c
+d 729 2 0 1 0
+c
+d 730 1 0 1 0
+c
+d 148 1 0 1 0
+c
+d 225 1 0 1 0
+c
+d 291 1 0 0 0
+c
+d 299 1 0 0 0
+c
+d 647 1 0 1 0
+c
+d 659 3 1 0 0
+c
+d 572 2 1 0 0
+c
+d 55 2 0 0 0
+c
+d 1156 2 0 0 0
+c
+d 655 2 1 0 0
+c
+d 829 1 0 0 0
+c
+d 835 1 0 0 0
+c
+d 662 1 1 0 0
+c
+d 666 2 0 0 0
+c
+d 62 3 0 0 0
+c
+d 494 4 1 0 0
+c
+d 1195 2 1 0 0
+c
+d 1110 1 0 0 0
+c
+d 1115 2 0 2 0
+c
+d 493 2 1 0 0
+c
+d 494 2 0 0 0
+c
+d 734 2 0 1 0
+c
+d 418 3 0 0 0
+c
+d 729 3 0 1 0
+c
+d 719 2 0 1 0
+c
+d 720 1 0 1 0
+c
+d 268 1 0 1 0
+c
+d 270 1 0 1 0
+c
+d 48 1 0 0 0
+c
+d 49 1 1 0 0
+c
+d 871 3 1 0 0
+c
+d 285 4 0 0 0
+c
+d 729 2 0 2 0
+c
+d 301 1 0 0 0
+c
+d 304 1 0 0 0
+c
+d 418 3 1 0 0
+c
+d 827 4 1 0 0
+c
+d 736 4 0 0 0
+c
+d 631 3 0 1 0
+c
+d 686 2 1 0 0
+c
+d 17 1 0 0 0
+c
+d 93 1 0 0 0
+c
+d 148 4 0 0 0
+c
+d 193 3 0 0 0
+c
+d 169 3 1 0 0
+c
+d 668 2 0 0 0
+c
+d 669 1 0 0 0
+c
+d 720 1 0 0 0
+c
+d 727 1 0 0 0
+c
+d 858 3 0 0 0
+c
+d 259 4 1 0 0
+c
+d 264 1 0 0 0
+c
+d 285 1 1 0 0
+c
+d 594 2 0 0 0
+c
+d 686 1 0 0 0
+c
+d 284 2 0 0 0
+c
+d 1017 3 1 0 0
+c
+d 246 1 1 0 0
+c
+d 262 1 0 0 0
+c
+d 217 2 1 0 0
+c
+d 999 3 0 0 0
+c
+d 729 2 0 2 0
+c
+d 505 1 0 0 0
+c
+d 511 1 0 0 0
+c
+d 225 1 1 0 0
+c
+d 241 2 0 0 0
+c
+d 686 1 0 1 0
+c
+d 963 1 0 0 0
+c
+d 574 2 1 0 0
+c
+d 686 3 1 0 0
+c
+d 723 1 0 1 0
+c
+d 726 1 0 0 0
+c
+d 719 3 0 0 0
+c
+d 720 1 0 0 0
+c
+d 973 2 0 1 0
+c
+d 653 1 0 1 0
+c
+d 661 1 0 1 0
+c
+d 673 1 0 0 0
+c
+d 1303 1 0 0 0
+c
+d 1304 1 1 0 0
+c
+d 727 1 0 1 0
+c
+d 728 1 0 0 0
+c
+d 634 4 0 2 0
+c
+d 719 1 0 1 0
+c
+d 720 2 0 0 0
+c
+d 437 4 1 0 0
+c
+d 1248 2 1 0 0
+c
+d 594 3 0 2 0
+c
+d 729 1 1 0 0
+c
+d 730 1 0 0 0
+c
+d 733 1 0 0 0
+c
+d 565 2 1 0 0
+c
+d 1058 1 0 0 0
+c
+d 418 1 0 0 0
+c
+d 419 1 0 1 0
+c
+d 433 1 1 0 0
+c
+d 69 3 1 0 0
+c
+d 618 3 1 0 0
+c
+d 662 1 0 0 0
+c
+d 683 1 0 0 0
+c
+d 1194 2 0 1 0
+c
+d 159 2 0 1 0
+c
+d 591 1 0 0 0
+c
+d 597 2 0 0 0
+c
+d 686 3 1 0 0
+c
+d 283 3 0 0 0
+c
+d 377 1 0 0 0
+c
+d 378 1 0 0 0
+c
+d 686 1 0 0 0
+c
+d 963 1 1 0 0
+c
+d 660 2 1 0 0
+c
+d 69 1 0 0 0
+c
+d 650 1 0 0 0
+c
+d 382 3 1 0 0
+c
+d 384 1 0 0 0
+c
+d 591 2 0 2 0
+c
+d 592 1 0 0 0
+c
+d 638 2 0 1 0
+c
+d 253 2 0 0 0
+c
+d 196 2 0 0 0
+c
+d 301 2 0 2 0
+c
+d 241 3 1 0 0
+c
+d 75 3 1 0 0
+c
+d 61 1 0 1 0
+c
+d 65 2 0 1 0
+c
+d 369 1 0 1 0
+c
+d 370 1 0 1 0
+c
+d 262 3 1 0 0
+c
+d 728 1 0 0 0
+c
+d 729 1 0 0 0
+c
+d 720 2 0 0 0
+c
+d 217 2 1 0 0
+c
+d 225 1 0 0 0
+c
+d 1009 3 1 0 0
+c
+d 444 1 0 0 0
+c
+d 445 1 1 0 0
+c
+d 447 1 0 0 0
+c
+d 66 3 1 0 0
+c
+d 217 2 0 1 0
+c
+d 96 4 1 0 0
+c
+d 578 4 1 0 0
+c
+d 91 1 0 1 0
+c
+d 92 1 0 1 0
+c
+d 719 3 0 0 0
+c
+d 722 1 0 0 0
+c
+d 1008 3 1 0 0
+c
+d 653 3 1 0 0
+c
+d 148 3 0 1 0
+c
+d 109 3 0 0 0
+c
+d 56 1 0 0 0
+c
+d 65 1 0 0 0
+c
+d 283 2 1 0 0
+c
+d 557 4 0 0 0
+c
+d 378 1 1 0 0
+c
+d 1111 3 0 0 0
+c
+d 93 3 0 0 0
+c
+d 95 1 0 0 0
+c
+d 1194 3 0 0 0
+c
+d 54 3 0 0 0
+c
+d 575 3 0 1 0
+c
+d 225 4 0 0 0
+c
+d 697 1 0 0 0
+c
+d 719 1 0 0 0
+c
+d 734 3 0 1 0
+c
+d 724 1 1 0 0
+c
+d 734 2 0 0 0
+c
+d 1311 3 1 0 0
+c
+d 5 3 0 0 0
+c
+d 65 2 0 0 0
+c
+d 146 4 0 1 0
+c
+d 114 3 1 0 0
+c
+d 733 2 0 0 0
+c
+d 437 2 0 1 0
+c
+d 278 1 0 0 0
+c
+d 280 3 1 0 0
+c
+d 606 4 0 0 0
+c
+d 437 1 0 1 0
+c
+d 451 1 0 1 0
+c
+d 594 2 0 1 0
+c
+d 919 3 0 0 0
+c
+d 253 4 0 0 0
+c
+d 505 3 0 1 0
+c
+d 253 2 0 0 0
+c
+d 606 1 0 0 0
+c
+d 619 1 0 0 0
+c
+d 796 4 0 0 0
+c
+d 720 2 0 1 0
+c
+d 167 4 0 0 0
+c
+d 7 3 0 0 0
+c
+d 729 1 0 0 0
+c
+d 730 1 0 0 0
+c
+d 254 2 0 0 0
+c
+d 255 1 0 0 0
+c
+d 727 3 0 0 0
+c
+d 575 1 0 0 0
+c
+d 928 2 0 0 0
+c
+d 929 1 0 0 0
+c
+d 575 3 1 0 0
+c
+d 730 2 0 0 0
+c
+d 218 4 1 0 0
+c
+d 650 3 0 0 0
+c
+d 662 2 0 0 0
+c
+d 108 1 0 0 0
+c
+d 111 1 0 1 0
+c
+d 653 2 0 1 0
+c
+d 673 1 0 1 0
+c
+d 400 2 0 0 0
+c
+d 301 1 0 0 0
+c
+d 1152 1 0 0 0
+c
+d 730 1 0 1 0
+c
+d 733 1 0 1 0
+c
+d 575 1 0 1 0
+c
+d 577 1 0 1 0
+c
+d 578 1 0 0 0
+c
+d 767 2 0 0 0
+c
+d 753 3 0 0 0
+c
+d 407 3 1 0 0
+c
+d 591 1 0 0 0
+c
+d 597 1 0 0 0
+c
+d 727 3 0 0 0
+c
+d 728 3 1 0 0
+c
+d 99 1 0 0 0
+c
+d 101 1 0 1 0
+c
+d 159 1 0 0 0
+c
+d 160 2 0 0 0
+c
+d 249 1 0 0 0
+c
+d 253 1 0 1 0
+c
+d 309 1 0 0 0
+c
+d 311 2 1 0 0
+c
+d 1109 2 0 0 0
+c
+d 32 1 0 0 0
+c
+d 33 1 0 0 0
+c
+d 46 1 1 0 0
+c
+d 720 3 0 2 0
+c
+d 686 1 0 1 0
+c
+d 960 1 0 0 0
+c
+d 961 1 0 0 0
+c
+d 301 2 0 0 0
+c
+d 304 1 1 0 0
+c
+d 217 2 0 0 0
+c
+d 7 2 0 2 0
+c
+d 54 2 0 0 0
+c
+d 697 1 0 0 0
+c
+d 395 3 0 0 0
+c
+d 689 2 0 0 0
+c
+d 241 2 1 0 0
+c
+d 1008 3 1 0 0
+c
+d 662 2 0 0 0
+c
+d 157 3 0 0 0
+c
+d 575 2 0 0 0
+c
+d 720 4 1 0 0
+c
+d 199 3 1 0 0
+c
+d 178 1 1 0 0
+c
+d 181 1 0 0 0
+c
+d 621 1 0 1 0
+c
+d 622 1 0 1 0
+c
+d 142 2 0 1 0
+c
+d 143 1 0 1 0
+c
+d 591 2 0 0 0
+c
+d 443 2 0 0 0
+c
+d 444 1 0 0 0
+c
+d 686 2 0 0 0
+c
+d 225 4 1 0 0
+c
+d 263 3 0 0 0
+c
+d 96 1 1 0 0
+c
+d 111 1 0 0 0
+c
+d 686 2 0 0 0
+c
+d 689 1 1 0 0
+c
+d 650 3 0 0 0
+c
+d 377 4 0 0 0
+c
+d 155 2 0 1 0
+c
+d 729 2 0 0 0
+c
+d 93 3 0 0 0
+c
+d 959 1 0 0 0
+c
+d 960 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 266 1 0 0 0
+c
+d 720 2 0 0 0
+c
+d 721 1 0 0 0
+c
+d 720 1 0 0 0
+c
+d 721 2 0 0 0
+c
+d 727 1 0 0 0
+c
+d 728 2 0 0 0
+c
+d 225 3 1 0 0
+c
+d 92 2 0 0 0
+c
+d 93 1 0 0 0
+c
+d 199 4 1 0 0
+c
+d 110 1 0 0 0
+c
+d 111 1 1 0 0
+c
+d 727 4 0 0 0
+c
+d 686 3 0 2 0
+c
+d 259 3 1 0 0
+c
+d 217 3 0 1 0
+c
+d 262 1 0 0 0
+c
+d 270 1 0 0 0
+c
+d 1115 1 0 0 0
+c
+d 1117 2 0 0 0
+c
+d 262 1 0 1 0
+c
+d 264 2 0 0 0
+c
+d 1212 2 0 0 0
+c
+d 3 1 0 0 0
+c
+d 13 1 0 0 0
+c
+d 734 2 0 0 0
+c
+d 559 1 0 0 0
+c
+d 568 1 0 0 0
+c
+d 575 2 0 1 0
+c
+d 927 1 0 1 0
+c
+d 1112 1 0 0 0
+c
+d 1114 2 1 0 0
+c
+d 753 3 1 0 0
+c
+d 204 1 0 1 0
+c
+d 217 1 0 0 0
+c
+d 225 1 0 1 0
+c
+d 262 1 0 0 0
+c
+d 265 1 1 0 0
+c
+d 266 1 0 0 0
+c
+d 963 2 0 2 0
+c
+d 327 3 1 0 0
+c
+d 629 4 1 0 0
+c
+d 418 3 0 1 0
+c
+d 437 2 0 0 0
+c
+d 218 2 0 0 0
+c
+d 219 1 0 0 0
+c
+d 1110 2 0 0 0
+c
+d 763 1 0 1 0
+c
+d 767 2 0 1 0
+c
+d 418 1 0 1 0
+c
+d 1087 1 0 0 0
+c
+d 650 1 0 1 0
+c
+d 651 2 0 1 0
+c
+d 663 3 0 0 0
+c
+d 146 3 0 0 0
+c
+d 169 2 0 0 0
+c
+d 377 1 0 0 0
+c
+d 990 1 0 0 0
+c
+d 991 1 0 0 0
+c
+d 992 1 0 1 0
+c
+d 618 2 0 0 0
+c
+d 156 3 1 0 0
+c
+d 196 2 0 0 0
+c
+d 602 2 0 1 0
+c
+d 858 1 0 0 0
+c
+d 870 1 0 0 0
+c
+d 871 1 0 0 0
+c
+d 748 2 0 1 0
+c
+d 1114 1 0 0 0
+c
+d 1115 1 0 0 0
+c
+d 301 1 0 1 0
+c
+d 1212 1 0 1 0
+c
+d 146 2 0 1 0
+c
+d 264 3 1 0 0
+c
+d 60 2 0 0 0
+c
+d 622 1 0 0 0
+c
+d 610 3 1 0 0
+c
+d 835 2 1 0 0
+c
+d 900 1 0 0 0
+c
+d 729 2 0 2 0
+c
+d 730 1 0 0 0
+c
+d 65 3 0 2 0
+c
+d 195 2 0 0 0
+c
+d 208 2 0 0 0
+c
+d 807 1 1 0 0
+c
+d 821 2 0 0 0
+c
+d 686 2 0 1 0
+c
+d 651 3 1 0 0
+c
+d 1107 2 1 0 0
+c
+d 729 1 0 0 0
+c
+d 730 1 0 0 0
+c
+d 634 1 0 0 0
+c
+d 642 1 0 0 0
+c
+d 283 3 0 1 0
+c
+d 689 1 0 0 0
+c
+d 691 1 0 0 0
+c
+d 401 1 0 0 0
+c
+d 404 2 0 0 0
+c
+d 445 3 1 0 0
+c
+d 60 3 0 0 0
+c
+d 746 2 0 0 0
+c
+d 747 1 0 0 0
+c
+d 1156 3 0 0 0
+c
+d 1215 1 1 0 0
+c
+d 763 3 0 0 0
+c
+d 241 2 0 0 0
+c
+d 253 1 1 0 0
+c
+d 146 2 0 0 0
+c
+d 148 1 0 0 0
+c
+d 146 1 1 0 0
+c
+d 285 1 0 0 0
+c
+d 286 1 0 0 0
+c
+d 575 2 0 2 0
+c
+d 49 1 0 0 0
+c
+d 59 1 0 0 0
+c
+d 737 3 1 0 0
+c
+d 689 1 0 0 0
+c
+d 703 1 0 1 0
+c
+d 704 1 1 0 0
+c
+d 728 1 0 0 0
+c
+d 733 2 0 1 0
+c
+d 686 3 0 0 0
+c
+d 51 2 0 1 0
+c
+d 52 1 0 0 0
+c
+d 259 1 0 1 0
+c
+d 262 1 0 1 0
+c
+d 195 2 0 1 0
+c
+d 206 1 0 1 0
+c
+d 21 3 0 0 0
+c
+d 575 1 0 0 0
+c
+d 797 1 0 0 0
+c
+d 608 4 1 0 0
+c
+d 400 2 0 2 0
+c
+d 418 2 0 0 0
+c
+d 1087 1 0 0 0
+c
+d 217 2 0 2 0
+c
+d 638 2 0 1 0
+c
+d 580 2 0 0 0
+c
+d 404 3 1 0 0
+c
+d 242 1 0 0 0
+c
+d 262 1 1 0 0
+c
+d 767 2 0 0 0
+c
+d 578 3 0 1 0
+c
+d 575 1 0 0 0
+c
+d 578 2 0 0 0
+c
+d 1112 2 0 1 0
+c
+d 1107 1 1 0 0
+c
+d 1110 1 0 0 0
+c
+d 259 2 1 0 0
+c
+d 262 1 0 0 0
+c
+d 1278 1 0 1 0
+c
+d 1279 1 0 1 0
+c
+d 1282 1 0 0 0
+c
+d 13 2 0 0 0
+c
+d 723 2 0 0 0
+c
+d 720 1 0 1 0
+c
+d 721 1 0 0 0
+c
+d 728 1 1 0 0
+c
+d 729 2 0 0 0
+c
+d 578 1 0 0 0
+c
+d 686 1 0 0 0
+c
+d 733 3 0 2 0
+c
+d 225 2 0 0 0
+c
+d 241 1 1 0 0
+c
+d 728 1 0 0 0
+c
+d 729 1 0 0 0
+c
+d 557 4 0 0 0
+c
+d 861 3 1 0 0
+c
+d 686 4 0 0 0
+c
+d 990 1 0 0 0
+c
+d 994 1 1 0 0
+c
+d 915 3 1 0 0
+c
+d 196 2 0 0 0
+c
+d 200 1 0 0 0
+c
+d 217 3 1 0 0
+c
+d 110 1 0 0 0
+c
+d 111 2 0 2 0
+c
+d 304 2 0 0 0
+c
+d 495 2 0 0 0
+c
+d 719 3 0 1 0
+c
+d 2 1 0 1 0
+c
+d 3 1 0 1 0
+c
+d 13 1 0 0 0
+c
+d 60 3 1 0 0
+c
+d 109 2 0 0 0
+c
+d 110 1 0 0 0
+c
+d 799 3 0 0 0
+c
+d 304 3 0 0 0
+c
+d 199 2 0 1 0
+c
+d 60 2 1 0 0
+c
+d 622 1 0 0 0
+c
+d 262 4 0 2 0
+c
+d 196 1 0 0 0
+c
+d 200 1 0 0 0
+c
+d 384 2 0 0 0
+c
+d 385 1 0 0 0
+c
+d 727 2 0 0 0
+c
+d 697 1 0 1 0
+c
+d 719 1 0 0 0
+c
+d 580 2 0 0 0
+c
+d 572 1 1 0 0
+c
+d 574 1 0 0 0
+c
+d 1168 1 0 0 0
+c
+d 1179 1 0 0 0
+c
+d 1183 1 0 0 0
+c
+d 186 1 0 0 0
+c
+d 213 2 1 0 0
+c
+d 557 3 1 0 0
+c
+d 437 3 0 0 0
+c
+d 225 2 0 0 0
+c
+d 301 4 1 0 0
+c
+d 719 2 0 2 0
+c
+d 580 2 1 0 0
+c
+d 958 1 0 0 0
+c
+d 578 2 0 1 0
+c
+d 437 1 0 1 0
+c
+d 439 1 0 0 0
+c
+d 56 2 0 0 0
+c
+d 729 1 0 0 0
+c
+d 733 1 0 0 0
+c
+d 395 2 0 0 0
+c
+d 397 1 1 0 0
+c
+d 1156 3 1 0 0
+c
+d 48 2 1 0 0
+c
+d 591 3 0 0 0
+c
+d 955 3 0 0 0
+c
+d 1194 3 0 0 0
+c
+d 196 2 0 2 0
+c
+d 200 1 0 0 0
+c
+d 437 3 1 0 0
+c
+d 733 1 1 0 0
+c
+d 736 1 0 0 0
+c
+d 280 2 0 2 0
+c
+d 720 1 0 1 0
+c
+d 726 1 0 1 0
+c
+d 719 1 0 1 0
+c
+d 720 1 0 1 0
+c
+d 733 2 0 0 0
+c
+d 360 2 0 0 0
+c
+d 638 2 0 2 0
+c
+d 1194 1 1 0 0
+c
+d 1195 1 0 0 0
+c
+d 1232 2 0 0 0
+c
+d 186 2 0 0 0
+c
+d 213 1 1 0 0
+c
+d 1087 2 0 0 0
+c
+d 686 3 0 0 0
+c
+d 959 4 1 0 0
+c
+d 373 2 1 0 0
+c
+d 382 1 0 0 0
+c
+d 686 3 1 0 0
+c
+d 662 2 0 0 0
+c
+d 418 3 0 1 0
+c
+d 594 1 0 1 0
+c
+d 686 1 0 1 0
+c
+d 378 2 1 0 0
+c
+d 1111 1 0 0 0
+c
+d 511 3 0 0 0
+c
+d 720 3 0 2 0
+c
+d 445 2 0 0 0
+c
+d 726 3 0 0 0
+c
+d 419 2 1 0 0
+c
+d 423 1 0 0 0
+c
+d 304 1 0 0 0
+c
+d 311 1 0 0 0
+c
+d 763 2 0 1 0
+c
+d 855 1 0 0 0
+c
+d 857 1 0 0 0
+c
+d 754 1 0 0 0
+c
+d 756 1 0 0 0
+c
+d 575 1 0 0 0
+c
+d 578 1 0 0 0
+c
+d 110 2 0 1 0
+c
+d 111 1 0 1 0
+c
+d 148 2 1 0 0
+c
+d 252 1 0 0 0
+c
+d 48 2 1 0 0
+c
+d 211 2 0 0 0
+c
+d 196 2 0 0 0
+c
+d 418 2 0 0 0
+c
+d 373 1 0 0 0
+c
+d 377 3 0 0 0
+c
+d 60 2 1 0 0
+c
+d 621 1 0 0 0
+c
+d 211 3 1 0 0
+c
+d 729 3 1 0 0
+c
+d 723 4 1 0 0
+c
+d 973 1 0 0 0
+c
+d 974 1 0 0 0
+c
+d 217 2 0 0 0
+c
+d 858 3 1 0 0
+c
+d 647 2 0 0 0
+c
+d 90 1 0 0 0
+c
+d 91 1 0 0 0
+c
+d 572 2 0 1 0
+c
+d 225 3 1 0 0
+c
+d 159 4 0 0 0
+c
+d 195 1 0 0 0
+c
+d 205 1 0 0 0
+c
+d 101 4 1 0 0
+c
+d 1008 4 0 0 0
+c
+d 661 1 0 1 0
+c
+d 667 1 0 0 0
+c
+d 638 2 0 1 0
+c
+d 302 2 0 0 0
+c
+d 157 1 0 1 0
+c
+d 176 1 0 1 0
+c
+d 177 1 0 0 0
+c
+d 153 2 0 2 0
+c
+d 437 2 0 0 0
+c
+d 686 3 1 0 0
+c
+d 111 2 1 0 0
+c
+d 236 1 0 0 0
+c
+d 211 2 0 0 0
+c
+d 455 2 0 0 0
+c
+d 457 1 0 0 0
+c
+d 354 1 0 0 0
+c
+d 367 1 0 0 0
+c
+d 1125 1 1 0 0
+c
+d 962 2 0 0 0
+c
+d 602 1 0 1 0
+c
+d 604 2 0 1 0
+c
+d 610 2 0 1 0
+c
+d 577 2 0 0 0
+c
+d 734 2 0 0 0
+c
+d 55 3 0 1 0
+c
+d 301 1 0 0 0
+c
+d 1154 1 0 1 0
+c
+d 1155 1 0 0 0
+c
+d 591 2 0 0 0
+c
+d 597 1 1 0 0
+c
+d 1022 2 0 0 0
+c
+d 1023 1 0 0 0
+c
+d 229 3 0 2 0
+c
+d 65 3 0 0 0
+c
+d 733 2 0 0 0
+c
+d 156 1 0 0 0
+c
+d 163 1 0 0 0
+c
+d 591 3 1 0 0
+c
+d 667 2 1 0 0
+c
+d 668 1 0 0 0
+c
+d 242 1 0 0 0
+c
+d 246 1 0 0 0
+c
+d 54 3 1 0 0
+c
+d 101 1 0 0 0
+c
+d 107 2 0 0 0
+c
+d 621 2 0 0 0
+c
+d 578 2 0 1 0
+c
+d 418 1 0 1 0
+c
+d 1087 2 0 0 0
+c
+d 229 3 1 0 0
+c
+d 479 2 0 0 0
+c
+d 719 3 0 2 0
+c
+d 591 2 0 0 0
+c
+d 597 1 0 0 0
+c
+d 575 2 0 0 0
+c
+d 49 2 1 0 0
+c
+d 787 2 0 0 0
+c
+d 574 3 0 0 0
+c
+d 262 1 0 0 0
+c
+d 265 1 0 0 0
+c
+d 395 3 1 0 0
+c
+d 60 1 0 0 0
+c
+d 62 2 1 0 0
+c
+d 662 2 1 0 0
+c
+d 667 1 0 0 0
+c
+d 264 1 0 1 0
+c
+d 283 2 0 1 0
+c
+d 1153 2 0 0 0
+c
+d 1022 1 0 0 0
+c
+d 1023 1 0 0 0
+c
+d 673 1 0 1 0
+c
+d 675 2 0 1 0
+c
+d 284 2 0 1 0
+c
+d 285 1 0 1 0
+c
+d 400 1 0 0 0
+c
+d 408 1 0 0 0
+c
+d 284 1 0 0 0
+c
+d 285 1 0 0 0
+c
+d 69 3 1 0 0
+c
+d 753 2 1 0 0
+c
+d 1009 3 1 0 0
+c
+d 813 1 1 0 0
+c
+d 815 2 0 0 0
+c
+d 816 1 0 0 0
+c
+d 101 2 0 0 0
+c
+d 110 1 0 0 0
+c
+d 91 1 0 1 0
+c
+d 92 1 0 1 0
+c
+d 686 2 1 0 0
+c
+d 146 2 0 0 0
+c
+d 65 3 1 0 0
+c
+d 51 1 0 0 0
+c
+d 52 1 1 0 0
+c
+d 195 3 0 2 0
+c
+d 726 4 0 0 0
+c
+d 580 3 1 0 0
+c
+d 196 1 0 0 0
+c
+d 1246 1 0 0 0
+c
+d 1247 2 0 0 0
+c
+d 719 3 0 1 0
+c
+d 59 1 0 1 0
+c
+d 60 1 0 1 0
+c
+d 919 3 0 0 0
+c
+d 923 1 0 0 0
+c
+d 111 1 0 0 0
+c
+d 1087 1 0 0 0
+c
+d 1303 1 0 1 0
+c
+d 1304 1 0 1 0
+c
+d 146 2 0 0 0
+c
+d 152 1 0 0 0
+c
+d 686 2 0 0 0
+c
+d 638 3 1 0 0
+c
+d 156 4 1 0 0
+c
+d 241 3 1 0 0
+c
+d 807 1 0 0 0
+c
+d 820 1 0 0 0
+c
+d 821 1 1 0 0
+c
+d 686 3 1 0 0
+c
+d 990 3 1 0 0
+c
+d 84 1 0 0 0
+c
+d 1278 1 1 0 0
+c
+d 195 3 0 0 0
+c
+d 377 3 0 0 0
+c
+d 591 3 0 0 0
+c
+d 965 3 1 0 0
+c
+d 463 2 0 0 0
+c
+d 49 3 0 0 0
+c
+d 594 3 0 1 0
+c
+d 1045 2 0 1 0
+c
+d 858 3 1 0 0
+c
+d 618 2 0 1 0
+c
+d 689 2 1 0 0
+c
+d 3 1 0 0 0
+c
+d 13 2 1 0 0
+c
+d 1192 1 0 0 0
+c
+d 1195 1 0 1 0
+c
+d 418 3 1 0 0
+c
+d 419 1 0 0 0
+c
+d 1303 3 0 0 0
+c
+d 580 3 1 0 0
+c
+d 263 4 1 0 0
+c
+d 341 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 449 1 0 0 0
+c
+d 720 3 0 0 0
+c
+d 598 2 0 0 0
+c
+d 599 1 0 1 0
+c
+d 875 3 0 1 0
+c
+d 111 1 0 0 0
+c
+d 231 1 0 0 0
+c
+d 575 3 1 0 0
+c
+d 737 3 0 1 0
+c
+d 580 3 0 0 0
+c
+d 262 2 0 0 0
+c
+d 650 2 1 0 0
+c
+d 653 1 0 0 0
+c
+d 733 1 0 0 0
+c
+d 735 2 0 0 0
+c
+d 594 4 0 2 0
+c
+d 497 4 0 0 0
+c
+d 659 3 0 0 0
+c
+d 557 2 0 0 0
+c
+d 1110 1 0 0 0
+c
+d 1115 1 0 1 0
+c
+d 146 2 0 0 0
+c
+d 926 3 0 0 0
+c
+d 663 3 0 0 0
+c
+d 56 2 0 0 0
+c
+d 686 3 1 0 0
+c
+d 259 2 0 0 0
+c
+d 286 3 1 0 0
+c
+d 588 1 0 0 0
+c
+d 590 2 0 2 0
+c
+d 756 3 0 0 0
+c
+d 647 2 0 2 0
+c
+d 659 1 0 0 0
+c
+d 443 1 0 0 0
+c
+d 444 1 0 0 0
+c
+d 146 1 0 0 0
+c
+d 152 1 0 1 0
+c
+d 55 1 1 0 0
+c
+d 691 1 0 0 0
+c
+d 152 2 0 0 0
+c
+d 97 1 0 1 0
+c
+d 99 1 0 1 0
+c
+d 48 2 1 0 0
+c
+d 31 3 0 0 0
+c
+d 829 2 0 0 0
+c
+d 835 1 0 0 0
+c
+d 393 2 0 1 0
+c
+d 578 2 0 2 0
+c
+d 1022 2 0 0 0
+c
+d 663 1 0 0 0
+c
+d 683 1 0 0 0
+c
+d 684 1 0 0 0
+c
+d 54 3 1 0 0
+c
+d 599 3 0 0 0
+c
+d 922 2 0 0 0
+c
+d 926 1 0 0 0
+c
+d 51 3 0 0 0
+c
+d 594 1 0 1 0
+c
+d 959 2 0 1 0
+c
+d 1192 1 0 1 0
+c
+d 1203 1 0 0 0
+c
+d 248 1 0 0 0
+c
+d 249 1 0 0 0
+c
+d 916 4 1 0 0
+c
+d 344 2 1 0 0
+c
+d 1146 1 0 0 0
+c
+d 651 2 0 0 0
+c
+d 580 3 1 0 0
+c
+d 59 1 0 0 0
+c
+d 60 2 0 0 0
+c
+d 242 2 0 2 0
+c
+d 433 2 0 0 0
+c
+d 327 2 0 0 0
+c
+d 54 4 0 0 0
+c
+d 1309 4 1 0 0
+c
+d 686 2 0 0 0
+c
+d 341 2 0 0 0
+c
+d 96 1 0 0 0
+c
+d 111 1 0 0 0
+c
+d 635 3 1 0 0
+c
+d 54 4 0 0 0
+c
+d 795 1 0 0 0
+c
+d 820 1 0 0 0
+c
+d 99 2 0 0 0
+c
+d 529 1 1 0 0
+c
+d 1062 2 0 0 0
+c
+d 457 2 1 0 0
+c
+d 634 3 1 0 0
+c
+d 211 2 0 0 0
+c
+d 575 3 0 0 0
+c
+d 168 2 0 1 0
+c
+d 170 1 0 0 0
+c
+d 96 2 0 1 0
+c
+d 98 1 0 1 0
+c
+d 858 2 0 0 0
+c
+d 872 1 0 0 0
+c
+d 745 1 0 0 0
+c
+d 746 1 0 0 0
+c
+d 155 1 0 1 0
+c
+d 157 1 0 1 0
+c
+d 1112 1 0 0 0
+c
+d 1114 1 0 0 0
+c
+d 686 2 1 0 0
+c
+d 168 4 0 1 0
+c
+d 1020 2 0 0 0
+c
+d 1021 1 0 0 0
+c
+d 621 1 0 0 0
+c
+d 623 1 0 0 0
+c
+d 1110 2 1 0 0
+c
+d 19 1 0 0 0
+c
+d 22 1 1 0 0
+c
+d 23 1 0 0 0
+c
+d 597 1 0 0 0
+c
+d 606 1 0 0 0
+c
+d 419 2 0 0 0
+c
+d 369 3 1 0 0
+c
+d 21 1 0 0 0
+c
+d 26 1 0 0 0
+c
+d 1212 2 0 1 0
+c
+d 915 2 0 0 0
+c
+d 916 1 1 0 0
+c
+d 959 3 1 0 0
+c
+d 101 2 0 0 0
+c
+d 1113 2 0 0 0
+c
+d 241 1 0 0 0
+c
+d 249 1 0 0 0
+c
+d 217 1 0 1 0
+c
+d 221 2 0 1 0
+c
+d 445 3 1 0 0
+c
+d 281 2 0 0 0
+c
+d 1214 1 1 0 0
+c
+d 101 3 1 0 0
+c
+d 686 3 0 0 0
+c
+d 689 3 1 0 0
+c
+d 574 2 0 0 0
+c
+d 1194 4 0 1 0
+c
+d 686 1 0 0 0
+c
+d 689 4 1 0 0
+c
+d 926 1 0 0 0
+c
+d 927 1 0 0 0
+c
+d 13 4 0 0 0
+c
+d 419 4 0 0 0
+c
+d 647 2 0 1 0
+c
+d 648 1 0 0 0
+c
+d 132 2 0 0 0
+c
+d 133 1 1 0 0
+c
+d 157 2 0 0 0
+c
+d 225 1 0 0 0
+c
+d 241 2 0 0 0
+c
+d 310 1 0 0 0
+c
+d 311 1 0 0 0
+c
+d 756 2 0 0 0
+c
+d 3 2 0 1 0
+c
+d 217 1 0 0 0
+c
+d 241 1 0 0 0
+c
+d 505 3 0 0 0
+c
+d 799 2 0 1 0
+c
+d 919 1 0 1 0
+c
+d 511 2 0 0 0
+c
+d 217 3 1 0 0
+c
+d 146 3 0 1 0
+c
+d 262 3 1 0 0
+c
+d 578 3 0 2 0
+c
+d 577 3 0 0 0
+c
+d 1165 2 0 0 0
+c
+d 241 1 0 0 0
+c
+d 253 2 0 0 0
+c
+d 384 1 0 0 0
+c
+d 394 2 0 0 0
+c
+d 965 3 0 0 0
+c
+d 1017 2 0 0 0
+c
+d 574 3 1 0 0
+c
+d 262 2 0 1 0
+c
+d 264 1 0 1 0
+c
+d 572 2 0 1 0
+c
+d 573 1 0 1 0
+c
+d 92 4 0 1 0
+c
+d 655 3 0 0 0
+c
+d 26 1 0 0 0
+c
+d 28 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 493 1 0 0 0
+c
+d 494 1 1 0 0
+c
+d 148 3 0 0 0
+c
+d 146 1 0 0 0
+c
+d 152 1 0 0 0
+c
+d 923 3 0 0 0
+c
+d 731 4 1 0 0
+c
+d 594 2 0 2 0
+c
+d 196 1 0 0 0
+c
+d 199 1 0 0 0
+c
+d 437 2 0 2 0
+c
+d 716 1 0 0 0
+c
+d 718 1 0 0 0
+c
+d 70 2 1 0 0
+c
+d 217 3 1 0 0
+c
+d 729 2 0 1 0
+c
+d 443 1 0 0 0
+c
+d 444 1 0 0 0
+c
+d 445 1 1 0 0
+c
+d 593 2 0 0 0
+c
+d 678 1 1 0 0
+c
+d 419 2 1 0 0
+c
+d 434 1 0 0 0
+c
+d 1112 1 0 0 0
+c
+d 1114 1 0 0 0
+c
+d 195 1 0 0 0
+c
+d 205 2 0 0 0
+c
+d 146 3 1 0 0
+c
+d 147 1 0 0 0
+c
+d 860 3 1 0 0
+c
+d 753 3 1 0 0
+c
+d 746 3 1 0 0
+c
+d 278 1 0 0 0
+c
+d 279 2 0 0 0
+c
+d 1153 1 1 0 0
+c
+d 418 1 1 0 0
+c
+d 419 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 265 2 0 1 0
+c
+d 594 4 1 0 0
+c
+d 1218 4 1 0 0
+c
+d 591 3 1 0 0
+c
+d 915 1 1 0 0
+c
+d 919 2 0 0 0
+c
+d 444 2 0 0 0
+c
+d 196 2 1 0 0
+c
+d 199 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 443 1 0 0 0
+c
+d 107 1 0 0 0
+c
+d 111 1 0 0 0
+c
+d 606 2 1 0 0
+c
+d 608 1 1 0 0
+c
+d 660 4 0 0 0
+c
+d 667 1 0 0 0
+c
+d 668 1 0 0 0
+c
+d 225 4 0 0 0
+c
+d 48 2 1 0 0
+c
+d 193 1 0 0 0
+c
+d 195 1 0 0 0
+c
+d 101 2 0 1 0
+c
+d 111 1 0 1 0
+c
+d 204 2 1 0 0
+c
+d 1248 2 0 0 0
+c
+d 727 1 0 0 0
+c
+d 728 2 1 0 0
+c
+d 108 3 1 0 0
+c
+d 1170 1 1 0 0
+c
+d 1184 1 0 0 0
+c
+d 1210 2 0 0 0
+c
+d 428 4 1 0 0
+c
+d 211 3 1 0 0
+c
+d 436 1 1 0 0
+c
+d 437 2 0 0 0
+c
+d 93 3 1 0 0
+c
+d 114 1 0 0 0
+c
+d 921 1 0 0 0
+c
+d 922 1 0 0 0
+c
+d 96 1 0 0 0
+c
+d 111 1 0 0 0
+c
+d 752 1 0 0 0
+c
+d 753 1 0 0 0
+c
+d 99 1 1 0 0
+c
+d 101 2 0 0 0
+c
+d 65 3 0 1 0
+c
+d 686 2 0 2 0
+c
+d 146 3 1 0 0
+c
+d 301 3 1 0 0
+c
+d 169 2 0 1 0
+c
+d 378 1 0 0 0
+c
+d 217 1 0 1 0
+c
+d 225 2 0 0 0
+c
+d 650 1 1 0 0
+c
+d 655 1 0 0 0
+c
+d 658 1 0 0 0
+c
+d 93 3 1 0 0
+c
+d 676 2 0 0 0
+c
+d 302 1 0 0 0
+c
+d 1218 2 0 0 0
+c
+d 686 2 0 0 0
+c
+d 959 1 0 0 0
+c
+d 720 2 0 0 0
+c
+d 142 2 0 1 0
+c
+d 610 2 0 0 0
+c
+d 612 1 0 0 0
+c
+d 493 1 0 0 0
+c
+d 494 1 0 0 0
+c
+d 97 1 0 0 0
+c
+d 99 1 0 0 0
+c
+d 635 3 1 0 0
+c
+d 602 1 0 0 0
+c
+d 604 1 0 0 0
+c
+d 341 2 0 0 0
+c
+d 199 3 1 0 0
+c
+d 728 1 0 0 0
+c
+d 729 1 0 0 0
+c
+d 132 1 0 0 0
+c
+d 494 1 0 0 0
+c
+d 495 1 0 0 0
+c
+d 1111 1 0 1 0
+c
+d 1113 1 0 1 0
+c
+d 1240 2 0 0 0
+c
+d 1008 2 0 0 0
+c
+d 689 3 1 0 0
+c
+d 101 4 0 2 0
+c
+d 218 3 0 0 0
+c
+d 196 1 0 0 0
+c
+d 200 1 0 0 0
+c
+d 598 2 0 0 0
+c
+d 599 1 0 0 0
+c
+d 419 1 0 0 0
+c
+d 434 1 0 0 0
+c
+d 29 1 0 1 0
+c
+d 30 2 0 1 0
+c
+d 985 1 0 0 0
+c
+d 986 3 0 0 0
+c
+d 167 1 0 1 0
+c
+d 369 2 0 0 0
+c
+d 499 1 0 0 0
+c
+d 500 1 0 0 0
+c
+d 206 1 0 0 0
+c
+d 207 1 0 0 0
+c
+d 208 1 1 0 0
+c
+d 635 1 0 0 0
+c
+d 638 1 0 0 0
+c
+d 242 2 1 0 0
+c
+d 262 1 0 0 0
+c
+d 811 2 0 1 0
+c
+d 815 1 0 1 0
+c
+d 797 1 0 0 0
+c
+d 799 1 0 0 0
+c
+d 796 4 1 0 0
+c
+d 575 2 0 1 0
+c
+d 578 1 0 1 0
+c
+d 148 1 0 0 0
+c
+d 252 1 0 0 0
+c
+d 753 2 0 0 0
+c
+d 753 2 0 0 0
+c
+d 111 1 0 0 0
+c
+d 113 1 0 0 0
+c
+d 661 1 1 0 0
+c
+d 669 1 0 0 0
+c
+d 670 1 0 0 0
+c
+d 13 2 0 0 0
+c
+d 14 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 597 1 0 0 0
+c
+d 795 1 0 1 0
+c
+d 820 3 0 1 0
+c
+d 305 2 0 0 0
+c
+d 915 1 1 0 0
+c
+d 916 2 0 0 0
+c
+d 659 2 0 0 0
+c
+d 259 1 1 0 0
+c
+d 262 2 0 0 0
+c
+d 93 4 0 0 0
+c
+d 575 3 0 1 0
+c
+d 734 3 1 0 0
+c
+d 199 1 0 1 0
+c
+d 211 2 0 1 0
+c
+d 718 1 0 1 0
+c
+d 719 3 0 1 0
+c
+d 199 3 0 0 0
+c
+d 196 1 1 0 0
+c
+d 199 2 0 0 0
+c
+d 205 4 0 1 0
+c
+d 669 4 0 0 0
+c
+d 752 1 0 0 0
+c
+d 753 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 107 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 264 2 1 0 0
+c
+d 159 2 1 0 0
+c
+d 160 1 0 0 0
+c
+d 622 3 0 0 0
+c
+d 437 1 0 1 0
+c
+d 445 2 0 1 0
+c
+d 110 4 1 0 0
+c
+d 575 1 0 1 0
+c
+d 577 1 0 1 0
+c
+d 686 3 0 2 0
+c
+d 59 1 0 0 0
+c
+d 60 2 1 0 0
+c
+d 281 1 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 718 3 0 2 0
+c
+d 377 1 0 1 0
+c
+d 378 2 0 1 0
+c
+d 54 2 0 2 0
+c
+d 753 2 0 0 0
+c
+d 205 1 0 0 0
+c
+d 1241 2 1 0 0
+c
+d 686 1 0 0 0
+c
+d 689 1 0 0 0
+c
+d 686 2 0 0 0
+c
+d 689 1 0 0 0
+c
+d 111 1 0 1 0
+c
+d 1096 1 0 1 0
+c
+d 200 2 0 0 0
+c
+d 207 1 1 0 0
+c
+d 168 3 0 0 0
+c
+d 437 3 0 2 0
+c
+d 719 2 1 0 0
+c
+d 720 1 0 0 0
+c
+d 199 3 0 1 0
+c
+d 263 1 0 1 0
+c
+d 264 2 1 0 0
+c
+d 650 3 0 0 0
+c
+d 686 2 0 0 0
+c
+d 393 4 0 0 0
+c
+d 418 1 0 0 0
+c
+d 419 1 0 0 0
+c
+d 661 2 0 0 0
+c
+d 259 4 1 0 0
+c
+d 480 2 1 0 0
+c
+d 485 1 0 0 0
+c
+d 278 1 0 0 0
+c
+d 279 1 0 0 0
+c
+d 99 4 1 0 0
+c
+d 650 2 0 1 0
+c
+d 655 1 0 1 0
+c
+d 1194 3 1 0 0
+c
+d 1185 3 0 0 0
+c
+d 578 2 0 0 0
+c
+d 686 1 0 0 0
+c
+d 211 4 0 0 0
+c
+d 437 1 1 0 0
+c
+d 498 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 264 1 0 0 0
+c
+d 915 1 0 0 0
+c
+d 916 2 0 0 0
+c
+d 919 2 0 0 0
+c
+d 240 3 0 0 0
+c
+d 621 3 0 0 0
+c
+d 900 3 1 0 0
+c
+d 575 3 1 0 0
+c
+d 301 1 0 0 0
+c
+d 304 1 0 0 0
+c
+d 1235 3 0 0 0
+c
+d 574 1 0 1 0
+c
+d 795 1 0 1 0
+c
+d 17 1 0 0 0
+c
+d 93 1 0 0 0
+c
+d 443 3 1 0 0
+c
+d 280 2 0 0 0
+c
+d 281 1 0 0 0
+c
+d 304 2 0 0 0
+c
+d 310 1 0 1 0
+c
+d 577 3 0 0 0
+c
+d 1194 3 0 2 0
+c
+d 217 3 0 0 0
+c
+d 575 3 0 0 0
+c
+d 157 3 0 1 0
+c
+d 1112 4 0 0 0
+c
+d 478 1 0 0 0
+c
+d 479 1 0 0 0
+c
+d 575 1 0 0 0
+c
+d 577 1 0 1 0
+c
+d 568 1 0 0 0
+c
+d 572 1 0 0 0
+c
+d 591 3 1 0 0
+c
+d 225 4 0 0 0
+c
+d 463 3 0 0 0
+c
+d 69 3 1 0 0
+c
+d 493 4 0 0 0
+c
+d 217 3 1 0 0
+c
+d 252 1 0 1 0
+c
+d 253 3 0 1 0
+c
+d 455 1 0 0 0
+c
+d 457 1 1 0 0
+c
+d 96 1 0 0 0
+c
+d 97 1 0 0 0
+c
+d 689 4 1 0 0
+c
+d 1067 2 1 0 0
+c
+d 56 1 0 0 0
+c
+d 1310 1 0 0 0
+c
+d 217 1 0 1 0
+c
+d 225 2 0 1 0
+c
+d 572 2 0 2 0
+c
+d 734 1 0 0 0
+c
+d 939 1 1 0 0
+c
+d 101 1 0 0 0
+c
+d 111 2 1 0 0
+c
+d 168 1 0 1 0
+c
+d 369 1 0 0 0
+c
+d 148 1 0 0 0
+c
+d 240 1 1 0 0
+c
+d 206 1 0 1 0
+c
+d 207 2 0 1 0
+c
+d 218 2 0 0 0
+c
+d 301 3 1 0 0
+c
+d 575 4 1 0 0
+c
+d 904 2 0 0 0
+c
+d 101 1 0 0 0
+c
+d 610 1 0 0 0
+c
+d 689 2 0 0 0
+c
+d 304 1 0 0 0
+c
+d 309 1 0 0 0
+c
+d 752 4 1 0 0
+c
+d 686 1 0 0 0
+c
+d 689 1 0 0 0
+c
+d 193 1 0 1 0
+c
+d 195 2 0 1 0
+c
+d 697 1 0 1 0
+c
+d 719 2 0 1 0
+c
+d 437 2 0 0 0
+c
+d 496 1 0 1 0
+c
+d 497 3 1 0 0
+c
+d 1087 1 0 1 0
+c
+d 1090 1 0 0 0
+c
+d 437 3 1 0 0
+c
+d 668 1 0 0 0
+c
+d 669 1 0 0 0
+c
+d 152 3 1 0 0
+c
+d 369 1 0 0 0
+c
+d 371 1 0 0 0
+c
+d 686 2 0 1 0
+c
+d 963 1 0 1 0
+c
+d 213 2 0 0 0
+c
+d 733 2 0 0 0
+c
+d 208 2 0 0 0
+c
+d 1245 1 1 0 0
+c
+d 199 1 0 1 0
+c
+d 211 1 0 0 0
+c
+d 1067 2 0 0 0
+c
+d 1068 1 0 0 0
+c
+d 407 1 1 0 0
+c
+d 409 1 0 0 0
+c
+d 410 1 0 0 0
+c
+d 463 3 0 0 0
+c
+d 686 2 0 0 0
+c
+d 959 1 0 0 0
+c
+d 183 1 0 1 0
+c
+d 195 2 0 1 0
+c
+d 686 2 0 1 0
+c
+d 618 2 0 1 0
+c
+d 155 2 0 1 0
+c
+d 199 3 0 0 0
+c
+d 730 1 0 0 0
+c
+d 733 2 0 0 0
+c
+d 155 1 0 0 0
+c
+d 156 1 0 0 0
+c
+d 114 3 1 0 0
+c
+d 419 1 0 0 0
+c
+d 434 2 0 0 0
+c
+d 575 3 0 0 0
+c
+d 217 2 0 0 0
+c
+d 686 1 0 0 0
+c
+d 701 1 0 0 0
+c
+d 132 2 0 0 0
+c
+d 494 1 1 0 0
+c
+d 156 1 0 0 0
+c
+d 400 1 0 0 0
+c
+d 195 3 1 0 0
+c
+d 729 1 0 0 0
+c
+d 730 1 0 0 0
+c
+d 959 4 1 0 0
+c
+d 574 1 0 0 0
+c
+d 1050 1 1 0 0
+c
+d 435 3 0 0 0
+c
+d 1096 1 0 0 0
+c
+d 1097 2 0 0 0
+c
+d 146 1 0 0 0
+c
+d 1096 1 0 0 0
+c
+d 1097 1 0 0 0
+c
+d 575 1 0 1 0
+c
+d 578 2 0 1 0
+c
+d 1315 3 1 0 0
+c
+d 1316 1 0 0 0
+c
+d 1263 3 1 0 0
+c
+d 1009 4 1 0 0
+c
+d 46 2 0 0 0
+c
+d 734 2 0 0 0
+c
+d 1110 3 0 0 0
+c
+d 754 1 0 0 0
+c
+d 756 1 1 0 0
+c
+d 728 1 0 0 0
+c
+d 734 2 1 0 0
+c
+d 686 4 1 0 0
+c
+d 264 4 1 0 0
+c
+d 232 3 0 0 0
+c
+d 1098 1 0 0 0
+c
+d 1099 1 0 0 0
+c
+d 354 3 0 0 0
+c
+d 753 2 0 0 0
+c
+d 155 1 0 1 0
+c
+d 176 2 0 1 0
+c
+d 256 4 0 0 0
+c
+d 673 1 0 1 0
+c
+d 676 1 0 0 0
+c
+d 328 2 0 1 0
+c
+d 304 1 1 0 0
+c
+d 305 1 0 0 0
+c
+d 1112 3 1 0 0
+c
+d 60 3 0 0 0
+c
+d 437 4 1 0 0
+c
+d 578 2 0 0 0
+c
+d 156 1 0 1 0
+c
+d 157 1 0 1 0
+c
+d 213 2 0 0 0
+c
+d 655 2 0 0 0
+c
+d 658 1 1 0 0
+c
+d 578 3 0 1 0
+c
+d 575 3 0 1 0
+c
+d 618 2 0 0 0
+c
+d 634 2 0 0 0
+c
+d 795 2 1 0 0
+c
+d 911 1 0 0 0
+c
+d 437 2 1 0 0
+c
+d 208 1 0 0 0
+c
+d 1245 1 0 0 0
+c
+d 193 1 0 1 0
+c
+d 195 1 0 0 0
+c
+d 493 2 0 0 0
+c
+d 1077 1 0 0 0
+c
+d 107 4 0 0 0
+c
+d 1111 2 1 0 0
+c
+d 1113 1 0 0 0
+c
+d 551 2 0 0 0
+c
+d 443 3 0 1 0
+c
+d 597 4 0 0 0
+c
+d 599 2 0 1 0
+c
+d 16 1 0 1 0
+c
+d 93 2 0 1 0
+c
+d 359 3 0 2 0
+c
+d 733 3 0 0 0
+c
+d 578 2 1 0 0
+c
+d 184 2 0 0 0
+c
+d 729 3 1 0 0
+c
+d 791 3 0 0 0
+c
+d 653 1 0 0 0
+c
+d 661 1 0 0 0
+c
+d 69 3 1 0 0
+c
+d 23 3 1 0 0
+c
+d 402 2 0 0 0
+c
+d 404 1 1 0 0
+c
+d 720 1 0 0 0
+c
+d 727 1 0 0 0
+c
+d 146 3 1 0 0
+c
+d 217 1 0 0 0
+c
+d 1242 3 0 0 0
+c
+d 745 1 0 0 0
+c
+d 746 1 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 1184 2 1 0 0
+c
+d 1112 2 0 1 0
+c
+d 1114 1 0 1 0
+c
+d 152 2 1 0 0
+c
+d 965 2 0 0 0
+c
+d 647 3 1 0 0
+c
+d 686 2 0 0 0
+c
+d 733 2 0 0 0
+c
+d 301 4 0 0 0
+c
+d 217 2 0 0 0
+c
+d 148 4 0 0 0
+c
+d 211 4 0 0 0
+c
+d 927 3 1 0 0
+c
+d 19 2 0 0 0
+c
+d 377 2 0 0 0
+c
+d 870 4 0 0 0
+c
+d 48 2 0 0 0
+c
+d 720 1 0 1 0
+c
+d 727 1 0 0 0
+c
+d 728 1 0 1 0
+c
+d 262 2 0 0 0
+c
+d 270 1 0 0 0
+c
+d 704 1 0 0 0
+c
+d 705 1 0 0 0
+c
+d 1192 1 0 1 0
+c
+d 1195 1 0 0 0
+c
+d 198 2 0 0 0
+c
+d 55 1 0 0 0
+c
+d 69 1 1 0 0
+c
+d 70 1 0 0 0
+c
+d 599 3 0 0 0
+c
+d 101 3 1 0 0
+c
+d 284 2 0 0 0
+c
+d 618 3 0 0 0
+c
+d 662 2 0 1 0
+c
+d 668 1 0 1 0
+c
+d 1109 2 0 1 0
+c
+d 606 3 1 0 0
+c
+d 820 1 0 0 0
+c
+d 822 2 1 0 0
+c
+d 193 3 1 0 0
+c
+d 65 2 0 1 0
+c
+d 686 1 0 1 0
+c
+d 689 2 0 1 0
+c
+d 29 5 1 0 0
+c
+d 60 1 0 0 0
+c
+d 62 1 0 0 0
+c
+d 580 2 0 1 0
+c
+d 957 1 0 1 0
+c
+d 304 3 1 0 0
+c
+d 963 3 1 0 0
+c
+d 437 2 0 1 0
+c
+d 301 3 0 1 0
+c
+d 46 4 1 0 0
+c
+d 101 3 1 0 0
+c
+d 618 2 0 1 0
+c
+d 156 1 1 0 0
+c
+d 157 1 0 0 0
+c
+d 602 3 0 0 0
+c
+d 12 1 0 0 0
+c
+d 90 1 0 0 0
+c
+d 660 2 0 0 0
+c
+d 419 3 0 0 0
+c
+d 407 1 0 0 0
+c
+d 408 1 0 0 0
+c
+d 286 4 1 0 0
+c
+d 437 1 0 0 0
+c
+d 497 1 0 0 0
+c
+d 498 1 1 0 0
+c
+d 301 2 0 0 0
+c
+d 686 2 0 0 0
+c
+d 955 2 0 0 0
+c
+d 599 4 0 0 0
+c
+d 101 2 0 2 0
+c
+d 107 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 442 1 0 0 0
+c
+d 686 3 1 0 0
+c
+d 673 2 0 0 0
+c
+d 674 1 0 0 0
+c
+d 734 3 0 0 0
+c
+d 577 4 0 1 0
+c
+d 807 2 0 2 0
+c
+d 821 1 0 0 0
+c
+d 621 1 0 0 0
+c
+d 626 1 1 0 0
+c
+d 627 1 0 0 0
+c
+d 686 1 0 0 0
+c
+d 689 1 0 0 0
+c
+d 656 3 1 0 0
+c
+d 54 1 0 0 0
+c
+d 697 1 0 0 0
+c
+d 689 3 1 0 0
+c
+d 262 3 1 0 0
+c
+d 650 2 0 0 0
+c
+d 146 2 0 0 0
+c
+d 1163 2 1 0 0
+c
+d 823 1 0 0 0
+c
+d 827 1 0 1 0
+c
+d 901 1 0 1 0
+c
+d 146 3 0 0 0
+c
+d 796 1 1 0 0
+c
+d 797 1 0 0 0
+c
+d 618 2 0 0 0
+c
+d 1013 3 0 0 0
+c
+d 580 1 0 0 0
+c
+d 686 2 0 0 0
+c
+d 48 2 0 0 0
+c
+d 211 2 0 0 0
+c
+d 662 3 1 0 0
+c
+d 457 2 0 0 0
+c
+d 490 1 0 0 0
+c
+d 718 2 0 0 0
+c
+d 146 1 0 0 0
+c
+d 151 1 0 0 0
+c
+d 268 2 0 0 0
+c
+d 55 2 0 2 0
+c
+d 110 3 0 2 0
+c
+d 950 4 0 0 0
+c
+d 994 3 1 0 0
+c
+d 13 1 0 0 0
+c
+d 14 2 0 0 0
+c
+d 1109 3 0 0 0
+c
+d 225 1 0 0 0
+c
+d 241 1 0 0 0
+c
+d 111 2 0 0 0
+c
+d 1096 1 0 0 0
+c
+d 265 3 0 2 0
+c
+d 511 3 0 0 0
+c
+d 1156 4 0 0 0
+c
+d 577 1 0 0 0
+c
+d 578 2 0 0 0
+c
+d 328 3 0 2 0
+c
+d 795 3 0 0 0
+c
+d 437 1 0 1 0
+c
+d 449 2 0 1 0
+c
+d 745 2 0 0 0
+c
+d 262 3 1 0 0
+c
+d 59 3 0 1 0
+c
+d 1115 2 0 0 0
+c
+d 1117 1 0 0 0
+c
+d 218 2 0 0 0
+c
+d 661 1 1 0 0
+c
+d 673 2 0 0 0
+c
+d 148 3 0 2 0
+c
+d 91 3 0 0 0
+c
+d 250 4 1 0 0
+c
+d 196 2 0 2 0
+c
+d 678 3 0 0 0
+c
+d 96 3 0 2 0
+c
+d 101 3 0 0 0
+c
+d 647 1 0 0 0
+c
+d 648 1 0 0 0
+c
+d 97 2 0 0 0
+c
+d 99 1 1 0 0
+c
+d 458 1 0 0 0
+c
+d 461 1 0 0 0
+c
+d 49 3 0 2 0
+c
+d 575 1 1 0 0
+c
+d 927 2 0 0 0
+c
+d 221 4 1 0 0
+c
+d 455 4 0 2 0
+c
+d 686 1 0 1 0
+c
+d 700 1 0 1 0
+c
+d 96 2 0 0 0
+c
+d 111 1 1 0 0
+c
+d 594 2 0 1 0
+c
+d 265 2 0 0 0
+c
+d 65 4 0 0 0
+c
+d 1237 3 0 0 0
+c
+d 495 2 0 1 0
+c
+d 1309 3 0 0 0
+c
+d 650 3 1 0 0
+c
+d 1168 1 0 0 0
+c
+d 1169 1 0 0 0
+c
+d 1021 2 0 0 0
+c
+d 1087 2 0 0 0
+c
+d 1089 1 0 0 0
+c
+d 110 1 0 0 0
+c
+d 111 1 1 0 0
+c
+d 635 2 0 0 0
+c
+d 641 1 1 0 0
+c
+d 716 1 1 0 0
+c
+d 718 2 0 0 0
+c
+d 594 2 0 0 0
+c
+d 752 2 0 0 0
+c
+d 592 3 1 0 0
+c
+d 906 2 0 1 0
+c
+d 909 1 0 0 0
+c
+d 95 3 0 1 0
+c
+d 301 1 1 0 0
+c
+d 1150 2 0 0 0
+c
+d 6 4 1 0 0
+c
+d 183 1 0 0 0
+c
+d 195 1 0 0 0
+c
+d 196 1 1 0 0
+c
+d 799 1 0 0 0
+c
+d 919 1 0 0 0
+c
+d 920 1 0 0 0
+c
+d 13 2 0 1 0
+c
+d 14 1 0 1 0
+c
+d 618 1 0 1 0
+c
+d 621 1 0 1 0
+c
+d 919 1 0 0 0
+c
+d 920 1 0 0 0
+c
+d 18 2 0 0 0
+c
+d 93 1 0 0 0
+c
+d 199 3 1 0 0
+c
+d 686 2 0 2 0
+c
+d 301 2 1 0 0
+c
+d 1150 1 0 0 0
+c
+d 310 3 0 1 0
+c
+d 196 1 0 0 0
+c
+d 198 1 0 0 0
+c
+d 1087 2 0 2 0
+c
+d 599 3 0 0 0
+c
+d 610 2 0 2 0
+c
+d 686 1 0 0 0
+c
+d 959 2 0 2 0
+c
+d 445 2 1 0 0
+c
+d 990 2 0 1 0
+c
+d 991 1 0 1 0
+c
+d 1110 2 1 0 0
+c
+d 1315 3 1 0 0
+c
+d 799 1 0 0 0
+c
+d 811 1 0 1 0
+c
+d 1195 2 0 1 0
+c
+d 305 3 1 0 0
+c
+d 682 1 0 0 0
+c
+d 683 1 0 0 0
+c
+d 684 1 0 0 0
+c
+d 622 1 0 0 0
+c
+d 626 2 0 0 0
+c
+d 799 1 0 0 0
+c
+d 810 1 0 1 0
+c
+d 101 3 0 0 0
+c
+d 107 1 0 0 0
+c
+d 974 3 0 0 0
+c
+d 618 1 0 1 0
+c
+d 965 1 0 0 0
+c
+d 730 3 0 1 0
+c
+d 218 2 0 0 0
+c
+d 1168 1 0 0 0
+c
+d 1170 1 0 0 0
+c
+d 100 2 0 0 0
+c
+d 1002 1 0 0 0
+c
+d 930 2 0 0 0
+c
+d 737 3 0 0 0
+c
+d 653 4 0 0 0
+c
+d 155 1 0 1 0
+c
+d 156 1 0 1 0
+c
+d 651 1 0 1 0
+c
+d 690 1 0 0 0
+c
+d 728 4 0 0 0
+c
+d 618 3 1 0 0
+c
+d 419 1 0 0 0
+c
+d 420 1 0 0 0
+c
+d 211 2 1 0 0
+c
+d 217 1 0 0 0
+c
+d 419 2 0 0 0
+c
+d 434 1 0 0 0
+c
+d 304 1 0 0 0
+c
+d 309 1 0 0 0
+c
+d 487 2 0 2 0
+c
+d 795 3 0 0 0
+c
+d 478 1 0 0 0
+c
+d 479 3 0 1 0
+c
+d 689 2 0 0 0
+c
+d 733 1 0 0 0
+c
+d 734 1 0 0 0
+c
+d 736 1 0 0 0
+c
+d 148 3 1 0 0
+c
+d 575 3 0 0 0
+c
+d 242 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 661 4 1 0 0
+c
+d 75 4 1 0 0
+c
+d 799 3 1 0 0
+c
+d 264 2 0 0 0
+c
+d 111 2 0 1 0
+c
+d 236 1 0 1 0
+c
+d 212 1 1 0 0
+c
+d 213 2 0 0 0
+c
+d 93 1 0 0 0
+c
+d 114 1 0 0 0
+c
+d 662 3 1 0 0
+c
+d 680 2 0 0 0
+c
+d 922 1 0 0 0
+c
+d 923 1 0 0 0
+c
+d 70 2 0 0 0
+c
+d 1170 2 0 2 0
+c
+d 1106 1 0 0 0
+c
+d 1107 1 0 0 0
+c
+d 444 4 0 0 0
+c
+d 1009 2 0 2 0
+c
+d 408 4 1 0 0
+c
+d 242 2 0 0 0
+c
+d 927 2 0 0 0
+c
+d 594 3 1 0 0
+c
+d 499 3 0 0 0
+c
+d 280 1 1 0 0
+c
+d 281 1 0 0 0
+c
+d 152 3 1 0 0
+c
+d 51 1 0 1 0
+c
+d 52 1 0 1 0
+c
+d 717 3 0 0 0
+c
+d 718 1 0 0 0
+c
+d 146 2 0 0 0
+c
+d 152 1 0 0 0
+c
+d 926 1 0 0 0
+c
+d 927 1 0 0 0
+c
+d 55 4 1 0 0
+c
+d 658 1 0 0 0
+c
+d 659 1 0 0 0
+c
+d 54 2 1 0 0
+c
+d 950 1 0 0 0
+c
+d 232 4 1 0 0
+c
+d 304 3 0 0 0
+c
+d 152 2 0 1 0
+c
+d 205 2 0 0 0
+c
+d 206 1 0 0 0
+c
+d 594 3 1 0 0
+c
+d 799 2 0 1 0
+c
+d 810 1 0 1 0
+c
+d 647 1 0 1 0
+c
+d 655 2 1 0 0
+c
+d 658 1 0 0 0
+c
+d 923 2 1 0 0
+c
+d 924 1 0 0 0
+c
+d 636 1 0 0 0
+c
+d 638 2 0 0 0
+c
+d 618 1 0 0 0
+c
+d 634 1 0 0 0
+c
+d 69 2 0 0 0
+c
+d 196 2 0 0 0
+c
+d 1156 2 0 0 0
+c
+d 284 1 1 0 0
+c
+d 285 1 0 0 0
+c
+d 455 3 1 0 0
+c
+d 650 1 0 0 0
+c
+d 655 1 0 0 0
+c
+d 211 3 0 0 0
+c
+d 594 2 1 0 0
+c
+d 159 4 1 0 0
+c
+d 655 1 0 0 0
+c
+d 658 1 0 0 0
+c
+d 729 3 1 0 0
+c
+d 735 3 0 0 0
+c
+d 686 4 1 0 0
+c
+d 101 1 0 0 0
+c
+d 1093 1 1 0 0
+c
+d 1094 1 0 0 0
+c
+d 604 3 0 1 0
+c
+d 1275 1 0 0 0
+c
+d 1278 2 1 0 0
+c
+d 622 2 0 1 0
+c
+d 629 1 0 1 0
+c
+d 19 3 1 0 0
+c
+d 755 2 0 0 0
+c
+d 764 1 0 0 0
+c
+d 689 4 1 0 0
+c
+d 101 3 1 0 0
+c
+d 259 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 565 2 0 0 0
+c
+d 568 1 1 0 0
+c
+d 2 1 0 0 0
+c
+d 16 1 0 0 0
+c
+d 17 1 1 0 0
+c
+d 598 1 0 0 0
+c
+d 599 1 0 0 0
+c
+d 597 1 0 0 0
+c
+d 598 1 0 0 0
+c
+d 111 2 0 1 0
+c
+d 143 1 0 1 0
+c
+d 429 2 0 1 0
+c
+d 49 1 0 0 0
+c
+d 58 1 0 0 0
+c
+d 60 4 0 0 0
+c
+d 876 2 0 0 0
+c
+d 479 3 1 0 0
+c
+d 215 1 0 1 0
+c
+d 221 1 0 0 0
+c
+d 927 2 0 1 0
+c
+d 111 2 0 2 0
+c
+d 146 1 0 0 0
+c
+d 662 3 1 0 0
+c
+d 661 3 0 0 0
+c
+d 670 1 0 0 0
+c
+d 439 2 0 1 0
+c
+d 440 2 0 0 0
+c
+d 704 4 0 1 0
+c
+d 606 2 0 0 0
+c
+d 437 2 0 0 0
+c
+d 449 1 0 1 0
+c
+d 236 3 0 0 0
+c
+d 12 3 1 0 0
+c
+d 858 3 0 2 0
+c
+d 590 3 0 0 0
+c
+d 691 1 1 0 0
+c
+d 703 1 0 0 0
+c
+d 705 1 0 0 0
+c
+d 878 1 0 0 0
+c
+d 881 1 0 0 0
+c
+d 574 2 0 0 0
+c
+d 795 1 0 0 0
+c
+d 195 2 0 0 0
+c
+d 340 1 0 0 0
+c
+d 491 1 0 0 0
+c
+d 911 3 1 0 0
+c
+d 1109 1 0 0 0
+c
+d 1111 1 0 0 0
+c
+d 242 4 1 0 0
+c
+d 662 1 0 1 0
+c
+d 667 1 0 0 0
+c
+d 477 4 0 0 0
+c
+d 437 2 0 1 0
+c
+d 449 1 0 1 0
+c
+d 973 3 0 0 0
+c
+d 974 1 0 1 0
+c
+d 146 2 1 0 0
+c
+d 238 1 0 0 0
+c
+d 915 1 0 0 0
+c
+d 916 1 0 0 0
+c
+d 919 1 1 0 0
+c
+d 1304 3 1 0 0
+c
+d 618 3 0 0 0
+c
+d 65 2 1 0 0
+c
+d 1303 1 0 0 0
+c
+d 551 3 0 0 0
+c
+d 211 4 1 0 0
+c
+d 686 3 0 0 0
+c
+d 511 1 0 0 0
+c
+d 514 1 0 0 0
+c
+d 241 2 0 1 0
+c
+d 249 1 1 0 0
+c
+d 266 3 0 1 0
+c
+d 301 3 0 0 0
+c
+d 229 3 0 2 0
+c
+d 255 4 0 0 0
+c
+d 301 1 0 1 0
+c
+d 1212 2 0 0 0
+c
+d 1213 1 0 0 0
+c
+d 252 2 0 0 0
+c
+d 259 1 1 0 0
+c
+d 697 1 0 0 0
+c
+d 952 1 1 0 0
+c
+d 953 1 0 0 0
+c
+d 419 2 0 0 0
+c
+d 686 4 0 0 0
+c
+d 101 1 0 0 0
+c
+d 110 2 1 0 0
+c
+d 728 1 1 0 0
+c
+d 729 2 0 0 0
+c
+d 449 2 0 0 0
+c
+d 148 1 0 0 0
+c
+d 252 1 0 0 0
+c
+d 259 1 0 0 0
+c
+d 262 2 0 0 0
+c
+d 1309 2 0 0 0
+c
+d 998 3 1 0 0
+c
+d 572 1 0 0 0
+c
+d 1055 2 0 0 0
+c
+d 133 1 0 1 0
+c
+d 134 2 0 0 0
+c
+d 1115 2 0 1 0
+c
+d 1116 1 0 1 0
+c
+d 419 3 0 0 0
+c
+d 229 2 0 0 0
+c
+d 720 3 0 0 0
+c
+d 590 3 0 0 0
+c
+d 156 2 0 0 0
+c
+d 400 1 0 0 0
+c
+d 54 1 0 0 0
+c
+d 1303 1 0 0 0
+c
+d 156 4 0 0 0
+c
+d 1272 3 0 0 0
+c
+d 1273 1 0 0 0
+c
+d 1110 2 1 0 0
+c
+d 1112 1 0 0 0
+c
+d 211 2 0 0 0
+c
+d 965 2 0 0 0
+c
+d 252 2 0 0 0
+c
+d 258 1 0 0 0
+c
+d 753 1 0 0 0
+c
+d 755 2 1 0 0
+c
+d 396 3 0 0 0
+c
+d 718 2 0 0 0
+c
+d 638 2 0 0 0
+c
+d 229 1 0 1 0
+c
+d 231 1 0 1 0
+c
+d 49 1 0 0 0
+c
+d 59 1 0 0 0
+c
+d 927 3 1 0 0
+c
+d 96 2 0 2 0
+c
+d 97 1 0 0 0
+c
+d 148 3 0 2 0
+c
+d 575 1 0 0 0
+c
+d 796 1 0 0 0
+c
+d 21 3 0 2 0
+c
+d 211 3 1 0 0
+c
+d 74 1 0 1 0
+c
+d 1299 1 0 1 0
+c
+d 286 3 0 2 0
+c
+d 719 2 0 0 0
+c
+d 720 1 0 0 0
+c
+d 12 1 0 0 0
+c
+d 13 1 0 1 0
+c
+d 661 1 0 1 0
+c
+d 670 1 0 0 0
+c
+d 671 1 0 0 0
+c
+d 823 1 0 0 0
+c
+d 835 1 0 0 0
+c
+d 734 4 1 0 0
+c
+d 1087 3 0 0 0
+c
+d 620 1 0 0 0
+c
+d 645 1 0 0 0
+c
+d 686 1 0 0 0
+c
+d 955 2 1 0 0
+c
+d 195 2 0 1 0
+c
+d 196 1 1 0 0
+c
+d 1303 1 0 0 0
+c
+d 1304 2 1 0 0
+c
+d 97 3 0 1 0
+c
+d 670 2 0 0 0
+c
+d 671 1 0 0 0
+c
+d 686 1 1 0 0
+c
+d 689 2 0 0 0
+c
+d 199 2 0 1 0
+c
+d 253 1 0 0 0
+c
+d 256 1 0 0 0
+c
+d 578 1 0 0 0
+c
+d 955 2 1 0 0
+c
+d 622 2 0 1 0
+c
+d 626 1 0 1 0
+c
+d 494 1 0 1 0
+c
+d 496 1 0 0 0
+c
+d 229 3 1 0 0
+c
+d 328 2 1 0 0
+c
+d 208 1 0 0 0
+c
+d 1245 1 0 0 0
+c
+d 188 2 0 0 0
+c
+d 60 1 0 0 0
+c
+d 65 1 0 0 0
+c
+d 1307 2 1 0 0
+c
+d 686 3 0 2 0
+c
+d 1114 3 0 1 0
+c
+d 96 2 0 0 0
+c
+d 97 1 0 0 0
+c
+d 594 1 0 0 0
+c
+d 650 1 0 1 0
+c
+d 652 1 0 0 0
+c
+d 686 1 0 1 0
+c
+d 961 2 0 0 0
+c
+d 444 3 0 0 0
+c
+d 281 2 0 0 0
+c
+d 259 3 0 2 0
+c
+d 514 2 1 0 0
+c
+d 516 1 0 0 0
+c
+d 1255 3 0 0 0
+c
+d 341 2 0 0 0
+c
+d 1195 4 1 0 0
+c
+d 1170 1 0 1 0
+c
+d 1185 1 0 1 0
+c
+d 602 3 0 0 0
+c
+d 328 2 0 1 0
+c
+d 353 1 0 1 0
+c
+d 1168 1 0 0 0
+c
+d 1177 2 1 0 0
+c
+d 225 2 0 0 0
+c
+d 516 3 1 0 0
+c
+d 407 1 0 0 0
+c
+d 409 1 0 0 0
+c
+d 384 2 0 1 0
+c
+d 49 3 1 0 0
+c
+d 196 4 1 0 0
+c
+d 221 3 0 1 0
+c
+d 384 1 0 0 0
+c
+d 385 2 0 1 0
+c
+d 1133 2 0 0 0
+c
+d 718 3 1 0 0
+c
+d 618 2 0 0 0
+c
+d 621 1 0 0 0
+c
+d 659 3 1 0 0
+c
+d 1263 3 1 0 0
+c
+d 17 1 0 0 0
+c
+d 93 1 0 0 0
+c
+d 994 3 0 0 0
+c
+d 990 3 1 0 0
+c
+d 384 4 1 0 0
+c
+d 959 2 0 0 0
+c
+d 989 2 0 1 0
+c
+d 393 2 0 0 0
+c
+d 19 2 0 0 0
+c
+d 1013 1 1 0 0
+c
+d 146 1 0 0 0
+c
+d 294 1 0 0 0
+c
+d 606 2 0 0 0
+c
+d 196 2 0 1 0
+c
+d 738 3 0 2 0
+c
+d 662 3 1 0 0
+c
+d 686 1 0 0 0
+c
+d 689 2 1 0 0
+c
+d 578 1 0 1 0
+c
+d 686 2 0 1 0
+c
+d 478 1 0 0 0
+c
+d 479 1 1 0 0
+c
+d 487 1 0 0 0
+c
+d 1039 3 1 0 0
+c
+d 159 3 1 0 0
+c
+d 160 1 0 0 0
+c
+d 49 3 0 0 0
+c
+d 301 2 1 0 0
+c
+d 1212 1 0 0 0
+c
+d 599 2 0 1 0
+c
+d 927 3 0 0 0
+c
+d 111 2 0 2 0
+c
+d 16 1 0 0 0
+c
+d 93 1 0 0 0
+c
+d 836 2 0 0 0
+c
+d 837 1 1 0 0
+c
+d 655 2 0 0 0
+c
+d 268 4 0 0 0
+c
+d 729 1 0 1 0
+c
+d 730 1 0 0 0
+c
+d 264 2 0 0 0
+c
+d 396 4 1 0 0
+c
+d 258 4 0 0 0
+c
+d 727 1 0 0 0
+c
+d 728 1 0 0 0
+c
+d 580 2 0 0 0
+c
+d 958 1 1 0 0
+c
+d 734 1 0 0 0
+c
+d 939 2 1 0 0
+c
+d 797 4 0 0 0
+c
+d 1012 2 0 1 0
+c
+d 1033 1 0 1 0
+c
+d 419 3 0 0 0
+c
+d 148 1 0 0 0
+c
+d 149 2 0 0 0
+c
+d 791 2 0 1 0
+c
+d 831 1 0 1 0
+c
+d 18 1 0 1 0
+c
+d 21 2 0 1 0
+c
+d 99 2 0 1 0
+c
+d 101 1 0 1 0
+c
+d 437 1 0 0 0
+c
+d 453 1 0 1 0
+c
+d 218 3 0 0 0
+c
+d 1087 2 0 0 0
+c
+d 557 4 0 0 0
+c
+d 799 2 0 0 0
+c
+d 811 1 0 0 0
+c
+d 146 1 1 0 0
+c
+d 1097 1 0 0 0
+c
+d 1098 1 0 0 0
+c
+d 455 2 0 0 0
+c
+d 217 2 0 0 0
+c
+d 1232 1 0 0 0
+c
+d 502 4 0 2 0
+c
+d 49 2 0 0 0
+c
+d 720 3 0 2 0
+c
+d 28 2 0 0 0
+c
+d 29 1 0 0 0
+c
+d 1177 2 0 0 0
+c
+d 575 1 0 0 0
+c
+d 578 2 1 0 0
+c
+d 382 1 0 0 0
+c
+d 384 1 0 0 0
+c
+d 388 1 1 0 0
+c
+d 369 2 0 1 0
+c
+d 382 1 0 1 0
+c
+d 959 2 0 0 0
+c
+d 961 1 1 0 0
+c
+d 718 3 0 1 0
+c
+d 153 2 0 0 0
+c
+d 155 4 1 0 0
+c
+d 280 2 0 0 0
+c
+d 756 1 0 0 0
+c
+d 763 1 0 0 0
+c
+d 252 2 0 0 0
+c
+d 253 1 0 0 0
+c
+d 60 3 0 0 0
+c
+d 278 1 0 0 0
+c
+d 279 1 0 0 0
+c
+d 591 2 0 0 0
+c
+d 225 1 0 1 0
+c
+d 238 1 0 1 0
+c
+d 443 1 1 0 0
+c
+d 445 2 0 0 0
+c
+d 157 1 0 0 0
+c
+d 176 1 0 0 0
+c
+d 1224 3 1 0 0
+c
+d 304 2 0 0 0
+c
+d 159 2 0 2 0
+c
+d 232 2 0 0 0
+c
+d 414 1 1 0 0
+c
+d 418 2 0 0 0
+c
+d 301 2 0 0 0
+c
+d 477 1 0 0 0
+c
+d 478 2 0 0 0
+c
+d 959 2 0 2 0
+c
+d 618 3 0 0 0
+c
+d 78 3 1 0 0
+c
+d 939 2 0 0 0
+c
+d 437 1 0 0 0
+c
+d 445 2 0 0 0
+c
+d 340 2 0 0 0
+c
+d 575 1 0 0 0
+c
+d 578 1 0 0 0
+c
+d 720 1 0 1 0
+c
+d 729 1 0 1 0
+c
+d 946 1 0 0 0
+c
+d 46 1 0 1 0
+c
+d 47 2 0 0 0
+c
+d 599 1 0 0 0
+c
+d 602 1 0 0 0
+c
+d 557 4 0 0 0
+c
+d 348 2 0 2 0
+c
+d 755 2 0 0 0
+c
+d 142 1 0 0 0
+c
+d 143 2 0 0 0
+c
+d 477 2 0 0 0
+c
+d 478 1 0 0 0
+c
+d 19 2 0 0 0
+c
+d 22 1 0 0 0
+c
+d 1110 1 0 0 0
+c
+d 1120 1 0 0 0
+c
+d 378 1 0 1 0
+c
+d 1111 1 0 1 0
+c
+d 796 1 0 1 0
+c
+d 797 1 0 0 0
+c
+d 246 4 0 1 0
+c
+d 591 2 0 0 0
+c
+d 599 1 0 0 0
+c
+d 686 2 0 0 0
+c
+d 730 3 0 0 0
+c
+d 61 2 1 0 0
+c
+d 65 1 0 0 0
+c
+d 309 2 0 0 0
+c
+d 434 4 1 0 0
+c
+d 1300 2 0 0 0
+c
+d 763 3 0 2 0
+c
+d 686 3 0 2 0
+c
+d 497 1 0 0 0
+c
+d 498 2 1 0 0
+c
+d 592 3 0 1 0
+c
+d 753 2 0 0 0
+c
+d 829 1 0 0 0
+c
+d 835 2 0 1 0
+c
+d 5 2 1 0 0
+c
+d 9 1 0 0 0
+c
+d 217 4 1 0 0
+c
+d 575 1 0 1 0
+c
+d 930 1 0 1 0
+c
+d 99 2 0 0 0
+c
+d 101 1 1 0 0
+c
+d 799 2 0 0 0
+c
+d 810 1 0 0 0
+c
+d 527 3 0 2 0
+c
+d 575 3 1 0 0
+c
+d 384 3 1 0 0
+c
+d 18 1 0 0 0
+c
+d 990 1 0 1 0
+c
+d 999 1 0 1 0
+c
+d 196 1 0 0 0
+c
+d 199 2 0 0 0
+c
+d 822 1 0 0 0
+c
+d 823 2 1 0 0
+c
+d 198 3 1 0 0
+c
+d 70 3 0 0 0
+c
+d 775 2 0 0 0
+c
+d 96 3 1 0 0
+c
+d 143 2 0 1 0
+c
+d 156 1 0 0 0
+c
+d 400 1 0 0 0
+c
+d 855 1 0 0 0
+c
+d 860 3 0 0 0
+c
+d 59 2 0 0 0
+c
+d 1011 1 0 0 0
+c
+d 1107 2 0 2 0
+c
+d 1110 1 0 0 0
+c
+d 575 3 0 0 0
+c
+d 437 1 0 0 0
+c
+d 457 1 1 0 0
+c
+d 599 2 0 1 0
+c
+d 301 3 1 0 0
+c
+d 620 3 1 0 0
+c
+d 1263 2 1 0 0
+c
+d 763 2 0 0 0
+c
+d 768 1 1 0 0
+c
+d 69 2 0 2 0
+c
+d 71 1 0 0 0
+c
+d 529 1 0 0 0
+c
+d 1067 1 0 0 0
+c
+d 1068 1 0 0 0
+c
+d 211 2 1 0 0
+c
+d 217 1 0 0 0
+c
+d 199 1 0 0 0
+c
+d 211 2 0 0 0
+c
+d 493 1 0 0 0
+c
+d 494 2 1 0 0
+c
+d 686 2 0 0 0
+c
+d 735 4 0 0 0
+c
+d 49 3 0 2 0
+c
+d 111 1 0 0 0
+c
+d 143 1 0 0 0
+c
+d 994 4 0 0 0
+c
+d 1156 4 1 0 0
+c
+d 752 2 1 0 0
+c
+d 753 2 0 0 0
+c
+d 1195 2 0 1 0
+c
+d 655 1 0 0 0
+c
+d 658 2 1 0 0
+c
+d 225 2 0 0 0
+c
+d 457 4 1 0 0
+c
+d 96 4 0 0 0
+c
+d 211 1 0 1 0
+c
+d 217 1 0 1 0
+c
+d 101 2 0 0 0
+c
+d 597 1 0 0 0
+c
+d 443 1 0 0 0
+c
+d 449 1 0 0 0
+c
+d 341 1 0 0 0
+c
+d 346 2 1 0 0
+c
+d 262 1 0 1 0
+c
+d 266 1 0 1 0
+c
+d 268 1 0 0 0
+c
+d 635 1 0 0 0
+c
+d 638 1 0 0 0
+c
+d 259 2 0 0 0
+c
+d 28 2 0 0 0
+c
+d 1156 2 0 0 0
+c
+d 1066 4 1 0 0
+c
+d 253 1 0 1 0
+c
+d 254 1 0 0 0
+c
+d 255 1 0 1 0
+c
+d 18 2 1 0 0
+c
+d 211 2 0 0 0
+c
+d 662 2 0 0 0
+c
+d 667 1 1 0 0
+c
+d 795 1 0 1 0
+c
+d 908 1 0 0 0
+c
+d 706 1 0 0 0
+c
+d 707 1 0 0 0
+c
+d 311 4 0 0 0
+c
+d 720 3 1 0 0
+c
+d 69 3 0 0 0
+c
+d 274 3 1 0 0
+c
+d 252 1 1 0 0
+c
+d 259 1 0 0 0
+c
+d 930 4 1 0 0
+c
+d 763 2 0 0 0
+c
+d 650 1 0 0 0
+c
+d 651 1 0 0 0
+c
+d 685 1 0 0 0
+c
+d 470 1 0 0 0
+c
+d 478 1 0 1 0
+c
+d 1272 2 0 0 0
+c
+d 1273 1 0 0 0
+c
+d 616 1 0 0 0
+c
+d 617 1 0 0 0
+c
+d 1192 1 0 1 0
+c
+d 1195 1 0 1 0
+c
+d 91 3 0 2 0
+c
+d 304 2 0 0 0
+c
+d 309 1 0 0 0
+c
+d 734 2 0 0 0
+c
+d 1111 2 0 0 0
+c
+d 29 2 0 0 0
+c
+d 959 3 0 0 0
+c
+d 718 4 1 0 0
+c
+d 168 1 0 1 0
+c
+d 169 1 0 1 0
+c
+d 437 1 0 0 0
+c
+d 439 1 0 0 0
+c
+d 97 4 0 0 0
+c
+d 443 2 1 0 0
+c
+d 444 1 0 0 0
+c
+d 195 2 0 0 0
+c
+d 492 1 0 0 0
+c
+d 493 2 1 0 0
+c
+d 753 3 0 1 0
+c
+d 304 2 0 0 0
+c
+d 101 3 1 0 0
+c
+d 606 3 1 0 0
+c
+d 369 1 0 1 0
+c
+d 382 2 0 0 0
+c
+d 729 1 0 0 0
+c
+d 731 1 1 0 0
+c
+d 732 1 0 0 0
+c
+d 820 4 0 0 0
+c
+d 157 3 1 0 0
+c
+d 919 3 1 0 0
+c
+d 919 1 0 1 0
+c
+d 922 1 0 1 0
+c
+d 453 2 0 0 0
+c
+d 418 2 0 0 0
+c
+d 143 3 1 0 0
+c
+d 1008 2 0 0 0
+c
+d 418 3 1 0 0
+c
+d 580 3 1 0 0
+c
+d 718 1 0 0 0
+c
+d 731 1 0 0 0
+c
+d 591 2 0 2 0
+c
+d 284 4 1 0 0
+c
+d 606 2 0 0 0
+c
+d 199 2 1 0 0
+c
+d 211 1 0 0 0
+c
+d 384 1 0 1 0
+c
+d 388 1 0 0 0
+c
+d 389 1 0 0 0
+c
+d 1012 3 0 0 0
+c
+d 946 2 1 0 0
+c
+d 947 1 0 0 0
+c
+d 455 2 0 0 0
+c
+d 915 3 1 0 0
+c
+d 618 1 0 0 0
+c
+d 634 2 0 0 0
+c
+d 344 4 0 0 0
+c
+d 400 1 0 0 0
+c
+d 407 1 1 0 0
+c
+d 410 1 0 0 0
+c
+d 74 2 0 0 0
+c
+d 95 1 0 0 0
+c
+d 96 1 0 0 0
+c
+d 730 2 0 1 0
+c
+d 735 1 0 1 0
+c
+d 729 2 0 0 0
+c
+d 732 1 0 0 0
+c
+d 1165 1 1 0 0
+c
+d 1168 2 0 0 0
+c
+d 262 1 0 1 0
+c
+d 263 1 0 1 0
+c
+d 662 2 0 0 0
+c
+d 820 4 0 0 0
+c
+d 660 2 0 0 0
+c
+d 55 3 0 0 0
+c
+d 437 2 0 0 0
+c
+d 196 1 0 1 0
+c
+d 207 1 0 1 0
+c
+d 1246 2 0 0 0
+c
+d 729 2 0 0 0
+c
+d 946 2 0 0 0
+c
+d 926 1 0 0 0
+c
+d 927 2 0 0 0
+c
+d 516 2 0 0 0
+c
+d 195 2 0 0 0
+c
+d 101 3 0 2 0
+c
+d 31 3 0 2 0
+c
+d 101 2 0 2 0
+c
+d 1192 2 0 1 0
+c
+d 262 3 1 0 0
+c
+d 168 2 0 0 0
+c
+d 606 1 0 1 0
+c
+d 608 2 0 0 0
+c
+d 49 1 0 0 0
+c
+d 734 1 0 0 0
+c
+d 970 2 0 0 0
+c
+d 1 2 0 0 0
+c
+d 720 1 0 1 0
+c
+d 723 2 0 0 0
+c
+d 195 2 0 0 0
+c
+d 955 3 1 0 0
+c
+d 259 2 0 0 0
+c
+d 729 3 0 0 0
+c
+d 780 1 0 0 0
+c
+d 782 2 0 0 0
+c
+d 155 2 0 0 0
+c
+d 602 2 0 0 0
+c
+d 745 1 0 0 0
+c
+d 746 1 0 0 0
+c
+d 686 1 0 0 0
+c
+d 915 1 0 0 0
+c
+d 919 1 1 0 0
+c
+d 500 3 1 0 0
+c
+d 185 4 1 0 0
+c
+d 304 3 0 0 0
+c
+d 153 2 0 0 0
+c
+d 207 3 1 0 0
+c
+d 1 2 0 0 0
+c
+d 101 4 1 0 0
+c
+d 1194 2 0 0 0
+c
+d 1205 1 0 0 0
+c
+d 65 2 0 1 0
+c
+d 1303 2 0 0 0
+c
+d 211 2 0 0 0
+c
+d 758 4 0 0 0
+c
+d 653 2 1 0 0
+c
+d 211 2 0 0 0
+c
+d 215 1 0 0 0
+c
+d 54 3 0 0 0
+c
+d 1134 4 1 0 0
+c
+d 157 4 0 0 0
+c
+d 686 2 1 0 0
+c
+d 700 1 0 0 0
+c
+d 283 3 1 0 0
+c
+d 919 2 1 0 0
+c
+d 718 2 0 0 0
+c
+d 705 2 0 0 0
+c
+d 710 1 1 0 0
+c
+d 18 2 0 0 0
+c
+d 955 3 1 0 0
+c
+d 922 2 0 0 0
+c
+d 926 1 1 0 0
+c
+d 618 3 0 2 0
+c
+d 752 1 0 0 0
+c
+d 753 2 1 0 0
+c
+d 686 2 0 0 0
+c
+d 963 1 0 0 0
+c
+d 443 2 0 2 0
+c
+d 437 1 0 0 0
+c
+d 493 1 0 0 0
+c
+d 496 1 0 0 0
+c
+d 498 1 0 0 0
+c
+d 65 3 0 1 0
+c
+d 400 3 1 0 0
+c
+d 470 1 0 0 0
+c
+d 477 2 1 0 0
+c
+d 101 1 1 0 0
+c
+d 111 2 0 0 0
+c
+d 418 3 1 0 0
+c
+d 833 1 0 0 0
+c
+d 881 1 0 0 0
+c
+d 686 1 0 0 0
+c
+d 687 2 0 0 0
+c
+d 688 1 0 0 0
+c
+d 602 1 0 0 0
+c
+d 662 1 1 0 0
+c
+d 675 1 0 0 0
+c
+d 494 3 1 0 0
+c
+d 232 3 1 0 0
+c
+d 377 3 0 0 0
+c
+d 719 1 0 0 0
+c
+d 720 1 0 0 0
+c
+d 211 2 0 1 0
+c
+d 217 1 0 1 0
+c
+d 727 2 0 0 0
+c
+d 948 2 0 0 0
+c
+d 242 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 301 1 0 1 0
+c
+d 1212 1 0 1 0
+c
+d 572 3 1 0 0
+c
+d 93 2 0 0 0
+c
+d 95 1 0 0 0
+c
+d 2 1 0 0 0
+c
+d 16 2 0 0 0
+c
+d 5 4 1 0 0
+c
+d 1315 2 1 0 0
+c
+d 1316 2 0 0 0
+c
+d 574 2 0 0 0
+c
+d 638 3 0 0 0
+c
+d 155 3 0 1 0
+c
+d 156 1 0 0 0
+c
+d 686 2 0 1 0
+c
+d 689 1 0 1 0
+c
+d 195 4 1 0 0
+c
+d 437 3 0 2 0
+c
+d 1087 3 0 2 0
+c
+d 341 1 0 0 0
+c
+d 411 1 0 0 0
+c
+d 186 3 0 2 0
+c
+d 686 2 0 0 0
+c
+d 148 3 0 0 0
+c
+d 259 1 0 0 0
+c
+d 19 1 1 0 0
+c
+d 977 1 0 0 0
+c
+d 981 1 0 0 0
+c
+d 591 2 0 0 0
+c
+d 262 2 0 1 0
+c
+d 268 1 0 1 0
+c
+d 395 2 0 0 0
+c
+d 207 1 1 0 0
+c
+d 208 2 0 0 0
+c
+d 262 2 0 0 0
+c
+d 602 1 0 1 0
+c
+d 680 2 0 1 0
+c
+d 574 1 0 1 0
+c
+d 1051 1 0 0 0
+c
+d 1052 1 0 0 0
+c
+d 109 3 1 0 0
+c
+d 31 1 0 0 0
+c
+d 32 2 0 2 0
+c
+d 594 2 0 0 0
+c
+d 1042 1 0 0 0
+c
+d 21 2 0 0 0
+c
+d 22 2 0 0 0
+c
+d 57 3 1 0 0
+c
+d 93 1 0 0 0
+c
+d 95 1 0 0 0
+c
+d 54 1 1 0 0
+c
+d 719 2 0 0 0
+c
+d 146 1 0 0 0
+c
+d 1098 1 0 0 0
+c
+d 594 2 0 0 0
+c
+d 651 1 0 0 0
+c
+d 652 1 0 0 0
+c
+d 437 1 0 1 0
+c
+d 445 2 0 1 0
+c
+d 494 3 0 0 0
+c
+d 49 3 1 0 0
+c
+d 437 2 0 0 0
+c
+d 281 3 0 1 0
+c
+d 69 1 0 0 0
+c
+d 650 2 0 0 0
+c
+d 252 1 1 0 0
+c
+d 259 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 283 3 1 0 0
+c
+d 18 1 0 1 0
+c
+d 78 1 0 0 0
+c
+d 79 1 0 0 0
+c
+d 769 1 0 0 0
+c
+d 774 1 0 0 0
+c
+d 620 1 0 0 0
+c
+d 621 2 1 0 0
+c
+d 78 1 0 0 0
+c
+d 79 1 0 0 0
+c
+d 511 2 0 0 0
+c
+d 523 3 0 0 0
+c
+d 1156 3 0 2 0
+c
+d 211 3 1 0 0
+c
+d 1 3 0 0 0
+c
+d 93 1 0 0 0
+c
+d 95 1 0 0 0
+c
+d 146 1 0 0 0
+c
+d 148 1 0 0 0
+c
+d 99 4 1 0 0
+c
+d 575 3 1 0 0
+c
+d 455 2 0 0 0
+c
+d 1195 3 0 0 0
+c
+d 924 2 0 0 0
+c
+d 795 2 0 2 0
+c
+d 207 2 0 0 0
+c
+d 1246 1 0 0 0
+c
+d 148 2 0 1 0
+c
+d 232 1 0 1 0
+c
+d 734 2 1 0 0
+c
+d 736 1 0 0 0
+c
+d 1051 2 0 0 0
+c
+d 242 2 0 0 0
+c
+d 1107 1 0 1 0
+c
+d 1109 1 0 0 0
+c
+d 662 3 1 0 0
+c
+d 327 2 0 0 0
+c
+d 184 1 0 0 0
+c
+d 185 1 0 0 0
+c
+d 301 1 0 1 0
+c
+d 1156 1 0 0 0
+c
+d 1168 1 0 1 0
+c
+d 1169 1 0 0 0
+c
+d 1170 1 0 0 0
+c
+d 253 1 0 0 0
+c
+d 255 1 0 0 0
+c
+d 256 1 0 0 0
+c
+d 591 2 0 0 0
+c
+d 196 2 1 0 0
+c
+d 199 1 0 0 0
+c
+d 1194 3 0 2 0
+c
+d 278 1 0 1 0
+c
+d 1153 1 0 0 0
+c
+d 1156 1 0 1 0
+c
+d 718 3 1 0 0
+c
+d 1309 2 1 0 0
+c
+d 1096 1 0 1 0
+c
+d 1101 1 0 1 0
+c
+d 199 3 0 2 0
+c
+d 146 2 0 0 0
+c
+d 228 1 0 0 0
+c
+d 159 1 0 1 0
+c
+d 185 1 0 1 0
+c
+d 218 3 0 0 0
+c
+d 218 2 0 0 0
+c
+d 222 1 0 0 0
+c
+d 143 2 0 0 0
+c
+d 592 3 1 0 0
+c
+d 437 2 0 0 0
+c
+d 463 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 266 1 0 0 0
+c
+d 829 2 1 0 0
+c
+d 763 3 0 0 0
+c
+d 1165 2 0 0 0
+c
+d 148 3 1 0 0
+c
+d 195 2 0 0 0
+c
+d 701 1 0 0 0
+c
+d 712 1 0 0 0
+c
+d 1110 2 0 0 0
+c
+d 89 1 0 0 0
+c
+d 729 3 0 2 0
+c
+d 262 1 0 0 0
+c
+d 264 2 0 2 0
+c
+d 1116 4 1 0 0
+c
+d 341 1 0 0 0
+c
+d 345 1 0 0 0
+c
+d 734 2 0 1 0
+c
+d 620 2 1 0 0
+c
+d 634 1 0 0 0
+c
+d 199 2 0 0 0
+c
+d 32 1 0 0 0
+c
+d 1321 1 0 0 0
+c
+d 32 1 0 1 0
+c
+d 75 1 0 1 0
+c
+d 500 2 1 0 0
+c
+d 264 2 0 0 0
+c
+d 990 2 1 0 0
+c
+d 836 3 0 0 0
+c
+d 719 1 0 0 0
+c
+d 720 2 0 0 0
+c
+d 378 1 0 1 0
+c
+d 1112 1 0 1 0
+c
+d 915 2 0 0 0
+c
+d 918 1 0 0 0
+c
+d 1110 3 0 1 0
+c
+d 745 1 1 0 0
+c
+d 746 2 0 0 0
+c
+d 965 3 1 0 0
+c
+d 749 1 0 1 0
+c
+d 752 1 0 1 0
+c
+d 719 2 0 2 0
+c
+d 752 1 0 0 0
+c
+d 753 1 0 0 0
+c
+d 772 4 0 0 0
+c
+d 2 1 0 0 0
+c
+d 16 1 0 0 0
+c
+d 44 2 0 0 0
+c
+d 285 2 0 0 0
+c
+d 286 1 0 0 0
+c
+d 1170 2 1 0 0
+c
+d 1210 1 0 0 0
+c
+d 51 2 0 1 0
+c
+d 56 1 1 0 0
+c
+d 755 1 0 0 0
+c
+d 764 1 0 1 0
+c
+d 775 1 1 0 0
+c
+d 782 1 0 0 0
+c
+d 159 2 0 0 0
+c
+d 90 2 0 0 0
+c
+d 746 3 1 0 0
+c
+d 196 2 0 0 0
+c
+d 689 1 0 0 0
+c
+d 703 1 0 0 0
+c
+d 28 3 0 0 0
+c
+d 735 3 1 0 0
+c
+d 211 3 1 0 0
+c
+d 1310 3 0 0 0
+c
+d 686 2 1 0 0
+c
+d 915 1 0 0 0
+c
+d 261 1 0 0 0
+c
+d 284 1 0 0 0
+c
+d 18 1 0 0 0
+c
+d 997 1 0 0 0
+c
+d 999 1 0 0 0
+c
+d 418 3 0 0 0
+c
+d 270 1 0 0 0
+c
+d 272 1 0 1 0
+c
+d 745 3 1 0 0
+c
+d 97 4 0 1 0
+c
+d 384 1 0 1 0
+c
+d 394 1 0 1 0
+c
+d 1110 3 0 0 0
+c
+d 272 3 0 1 0
+c
+d 1111 2 0 0 0
+c
+d 1112 1 1 0 0
+c
+d 836 2 1 0 0
+c
+d 837 1 0 0 0
+c
+d 468 2 0 0 0
+c
+d 591 3 0 2 0
+c
+d 729 3 0 0 0
+c
+d 618 4 0 0 0
+c
+d 1177 2 0 2 0
+c
+d 107 2 0 0 0
+c
+d 662 2 0 0 0
+c
+d 663 1 0 0 0
+c
+d 21 3 1 0 0
+c
+d 218 3 0 2 0
+c
+d 594 3 1 0 0
+c
+d 1195 3 0 0 0
+c
+d 1172 4 1 0 0
+c
+d 241 1 0 0 0
+c
+d 253 2 1 0 0
+c
+d 780 3 1 0 0
+c
+d 540 3 1 0 0
+c
+d 414 1 0 0 0
+c
+d 418 2 0 0 0
+c
+d 242 3 0 0 0
+c
+d 218 3 0 0 0
+c
+d 686 3 0 0 0
+c
+d 55 2 0 2 0
+c
+d 968 4 1 0 0
+c
+d 487 2 0 0 0
+c
+d 488 1 1 0 0
+c
+d 594 3 1 0 0
+c
+d 1237 3 0 0 0
+c
+d 21 4 1 0 0
+c
+d 428 1 0 1 0
+c
+d 587 1 0 0 0
+c
+d 588 1 0 0 0
+c
+d 718 2 0 0 0
+c
+d 146 1 0 1 0
+c
+d 292 2 0 1 0
+c
+d 265 1 0 0 0
+c
+d 286 1 0 1 0
+c
+d 719 2 0 2 0
+c
+d 178 2 0 0 0
+c
+d 418 1 0 1 0
+c
+d 419 1 0 0 0
+c
+d 435 1 0 1 0
+c
+d 610 1 0 0 0
+c
+d 612 2 0 0 0
+c
+d 1184 2 0 0 0
+c
+d 1200 1 0 0 0
+c
+d 284 2 0 0 0
+c
+d 341 2 0 1 0
+c
+d 411 1 0 1 0
+c
+d 423 1 0 1 0
+c
+d 470 2 0 0 0
+c
+d 195 2 0 0 0
+c
+d 205 1 1 0 0
+c
+d 99 3 1 0 0
+c
+d 861 4 0 0 0
+c
+d 691 1 0 0 0
+c
+d 705 3 0 0 0
+c
+d 437 1 0 0 0
+c
+d 453 1 0 0 0
+c
+d 630 1 0 1 0
+c
+d 660 1 0 1 0
+c
+d 604 2 1 0 0
+c
+d 641 1 0 0 0
+c
+d 148 3 0 1 0
+c
+d 1177 2 0 0 0
+c
+d 622 3 1 0 0
+c
+d 574 4 0 0 0
+c
+d 101 1 0 0 0
+c
+d 110 1 0 0 0
+c
+d 111 1 1 0 0
+c
+d 608 1 0 1 0
+c
+d 614 1 0 0 0
+c
+d 660 1 0 0 0
+c
+d 662 1 0 0 0
+c
+d 689 2 0 0 0
+c
+d 551 4 1 0 0
+c
+d 246 1 0 1 0
+c
+d 262 2 0 1 0
+c
+d 153 1 0 0 0
+c
+d 155 1 0 1 0
+c
+d 787 1 0 1 0
+c
+d 437 1 0 0 0
+c
+d 569 1 0 1 0
+c
+d 1050 1 0 1 0
+c
+d 797 1 0 1 0
+c
+d 799 1 0 1 0
+c
+d 597 1 0 0 0
+c
+d 598 1 0 0 0
+c
+d 575 3 0 2 0
+c
+d 148 1 0 0 0
+c
+d 232 1 0 0 0
+c
+d 990 2 1 0 0
+c
+d 915 1 0 0 0
+c
+d 919 1 0 0 0
+c
+d 959 2 1 0 0
+c
+d 876 1 0 0 0
+c
+d 877 1 0 0 0
+c
+d 268 3 0 0 0
+c
+d 69 3 1 0 0
+c
+d 21 2 0 0 0
+c
+d 19 2 0 2 0
+c
+d 811 2 0 1 0
+c
+d 281 2 0 1 0
+c
+d 98 2 0 1 0
+c
+d 99 1 0 1 0
+c
+d 1168 3 1 0 0
+c
+d 990 2 0 0 0
+c
+d 994 1 0 1 0
+c
+d 328 2 0 0 0
+c
+d 54 2 0 1 0
+c
+d 225 2 0 0 0
+c
+d 746 2 0 0 0
+c
+d 747 1 0 0 0
+c
+d 262 1 0 1 0
+c
+d 266 1 0 1 0
+c
+d 1201 1 0 0 0
+c
+d 1202 1 0 0 0
+c
+d 1 1 0 1 0
+c
+d 5 1 0 0 0
+c
+d 1322 2 0 0 0
+c
+d 383 3 1 0 0
+c
+d 55 3 0 0 0
+c
+d 163 3 1 0 0
+c
+d 574 1 0 0 0
+c
+d 795 1 0 0 0
+c
+d 278 2 0 0 0
+c
+d 155 1 0 1 0
+c
+d 156 2 0 1 0
+c
+d 400 2 0 1 0
+c
+d 196 2 0 1 0
+c
+d 199 1 0 1 0
+c
+d 99 4 1 0 0
+c
+d 1156 2 1 0 0
+c
+d 1215 2 0 0 0
+c
+d 413 1 0 0 0
+c
+d 1087 1 0 0 0
+c
+d 262 1 0 1 0
+c
+d 264 1 0 0 0
+c
+d 575 1 0 1 0
+c
+d 578 3 0 0 0
+c
+d 673 2 1 0 0
+c
+d 674 1 0 0 0
+c
+d 1091 3 0 1 0
+c
+d 749 4 0 0 0
+c
+d 599 3 1 0 0
+c
+d 96 1 0 0 0
+c
+d 111 3 0 1 0
+c
+d 594 2 0 1 0
+c
+d 84 1 0 1 0
+c
+d 1279 1 0 0 0
+c
+d 185 2 0 0 0
+c
+d 185 1 0 0 0
+c
+d 186 2 0 2 0
+c
+d 418 1 1 0 0
+c
+d 433 1 0 0 0
+c
+d 712 2 0 2 0
+c
+d 745 2 0 1 0
+c
+d 746 1 1 0 0
+c
+d 211 4 1 0 0
+c
+d 157 2 0 0 0
+c
+d 594 3 0 0 0
+c
+d 46 1 0 1 0
+c
+d 775 2 0 1 0
+c
+d 618 1 0 1 0
+c
+d 634 1 0 1 0
+c
+d 1307 3 1 0 0
+c
+d 823 1 0 0 0
+c
+d 826 1 0 0 0
+c
+d 369 1 0 0 0
+c
+d 382 2 0 0 0
+c
+d 278 2 0 0 0
+c
+d 280 1 1 0 0
+c
+d 622 1 0 1 0
+c
+d 625 2 0 0 0
+c
+d 153 2 1 0 0
+c
+d 155 1 0 0 0
+c
+d 730 1 0 0 0
+c
+d 732 1 0 0 0
+c
+d 565 1 0 1 0
+c
+d 568 1 0 1 0
+c
+d 753 1 0 1 0
+c
+d 755 2 0 1 0
+c
+d 663 1 0 0 0
+c
+d 681 1 0 0 0
+c
+d 13 1 0 0 0
+c
+d 16 2 1 0 0
+c
+d 418 4 1 0 0
+c
+d 146 1 1 0 0
+c
+d 285 1 0 0 0
+c
+d 1224 1 0 0 0
+c
+d 99 1 0 0 0
+c
+d 101 2 0 0 0
+c
+d 206 1 0 1 0
+c
+d 207 2 0 1 0
+c
+d 156 2 0 0 0
+c
+d 400 1 1 0 0
+c
+d 51 2 0 0 0
+c
+d 262 3 0 0 0
+c
+d 591 2 0 0 0
+c
+d 1110 4 1 0 0
+c
+d 826 1 0 0 0
+c
+d 827 1 0 0 0
+c
+d 1110 2 0 0 0
+c
+d 1120 2 1 0 0
+c
+d 686 3 0 0 0
+c
+d 213 2 0 1 0
+c
+d 242 1 0 1 0
+c
+d 577 2 0 0 0
+c
+d 12 1 0 0 0
+c
+d 90 1 0 0 0
+c
+d 602 1 0 0 0
+c
+d 662 2 0 2 0
+c
+d 796 1 0 0 0
+c
+d 797 2 0 0 0
+c
+d 720 2 0 1 0
+c
+d 26 2 0 0 0
+c
+d 689 2 0 1 0
+c
+d 690 1 0 1 0
+c
+d 1117 1 0 0 0
+c
+d 1118 1 0 0 0
+c
+d 359 3 1 0 0
+c
+d 284 1 0 0 0
+c
+d 285 2 0 0 0
+c
+d 1226 1 0 0 0
+c
+d 876 2 0 1 0
+c
+d 878 1 0 1 0
+c
+d 689 1 0 0 0
+c
+d 704 1 0 0 0
+c
+d 833 1 0 1 0
+c
+d 878 1 0 1 0
+c
+d 881 1 0 0 0
+c
+d 111 1 0 0 0
+c
+d 113 1 0 0 0
+c
+d 211 2 0 0 0
+c
+d 146 1 0 1 0
+c
+d 153 2 0 1 0
+c
+d 718 3 0 2 0
+c
+d 437 2 0 0 0
+c
+d 1045 1 0 1 0
+c
+d 159 3 1 0 0
+c
+d 148 3 0 2 0
+c
+d 797 1 0 0 0
+c
+d 799 1 0 1 0
+c
+d 807 1 0 0 0
+c
+d 821 1 0 0 0
+c
+d 686 3 1 0 0
+c
+d 327 1 0 1 0
+c
+d 334 1 0 1 0
+c
+d 46 1 0 0 0
+c
+d 775 1 0 0 0
+c
+d 419 3 1 0 0
+c
+d 1163 2 0 1 0
+c
+d 919 1 1 0 0
+c
+d 923 1 0 0 0
+c
+d 924 1 0 0 0
+c
+d 591 1 0 1 0
+c
+d 597 1 0 1 0
+c
+d 148 1 0 0 0
+c
+d 225 1 0 0 0
+c
+d 78 2 0 0 0
+c
+d 54 4 0 0 0
+c
+d 253 2 0 1 0
+c
+d 258 1 0 0 0
+c
+d 753 2 0 0 0
+c
+d 922 2 0 2 0
+c
+d 926 1 0 0 0
+c
+d 500 3 0 0 0
+c
+d 686 2 0 0 0
+c
+d 689 1 1 0 0
+c
+d 718 1 0 0 0
+c
+d 720 1 0 0 0
+c
+d 253 2 0 0 0
+c
+d 572 3 0 0 0
+c
+d 155 1 1 0 0
+c
+d 156 2 0 0 0
+c
+d 54 3 0 0 0
+c
+d 262 2 0 1 0
+c
+d 266 1 0 1 0
+c
+d 259 2 0 0 0
+c
+d 1177 1 0 0 0
+c
+d 1178 1 0 0 0
+c
+d 54 1 0 0 0
+c
+d 1303 1 0 0 0
+c
+d 594 3 1 0 0
+c
+d 101 4 0 0 0
+c
+d 655 4 1 0 0
+c
+d 1115 2 0 1 0
+c
+d 1117 1 0 0 0
+c
+d 965 2 0 0 0
+c
+d 262 1 0 0 0
+c
+d 266 2 0 0 0
+c
+d 218 3 0 0 0
+c
+d 143 4 0 1 0
+c
+d 656 4 1 0 0
+c
+d 599 3 0 0 0
+c
+d 146 2 0 0 0
+c
+d 437 3 1 0 0
+c
+d 505 2 0 1 0
+c
+d 511 1 0 1 0
+c
+d 211 2 0 1 0
+c
+d 50 1 0 0 0
+c
+d 51 1 0 0 0
+c
+d 829 2 0 0 0
+c
+d 497 1 0 0 0
+c
+d 498 1 0 0 0
+c
+d 1009 2 0 0 0
+c
+d 148 2 0 0 0
+c
+d 591 2 0 0 0
+c
+d 593 1 1 0 0
+c
+d 146 3 1 0 0
+c
+d 91 2 1 0 0
+c
+d 117 1 0 0 0
+c
+d 444 3 0 2 0
+c
+d 155 1 0 1 0
+c
+d 156 2 0 1 0
+c
+d 602 3 0 1 0
+c
+d 505 4 0 0 0
+c
+d 591 2 0 0 0
+c
+d 705 2 0 0 0
+c
+d 706 1 1 0 0
+c
+d 453 3 0 0 0
+c
+d 617 1 0 0 0
+c
+d 985 1 0 0 0
+c
+d 48 2 0 0 0
+c
+d 478 2 0 0 0
+c
+d 482 1 0 0 0
+c
+d 309 1 0 1 0
+c
+d 311 2 0 1 0
+c
+d 111 4 1 0 0
+c
+d 229 4 0 2 0
+c
+d 521 3 1 0 0
+c
+d 575 3 0 1 0
+c
+d 929 3 0 0 0
+c
+d 574 3 1 0 0
+c
+d 57 4 1 0 0
+c
+d 757 1 0 0 0
+c
+d 763 1 0 0 0
+c
+d 591 2 0 0 0
+c
+d 98 1 0 0 0
+c
+d 99 2 0 0 0
+c
+d 423 1 0 0 0
+c
+d 429 1 0 0 0
+c
+d 70 1 0 0 0
+c
+d 650 1 0 0 0
+c
+d 400 3 1 0 0
+c
+d 1110 2 1 0 0
+c
+d 1120 1 0 0 0
+c
+d 268 4 1 0 0
+c
+d 719 4 1 0 0
+c
+d 177 4 0 0 0
+c
+d 101 3 0 0 0
+c
+d 753 2 0 0 0
+c
+d 745 2 0 0 0
+c
+d 153 2 0 0 0
+c
+d 746 1 0 0 0
+c
+d 748 2 0 0 0
+c
+d 1009 3 0 0 0
+c
+d 54 2 0 0 0
+c
+d 718 2 1 0 0
+c
+d 965 3 0 0 0
+c
+d 1320 3 0 0 0
+c
+d 453 1 1 0 0
+c
+d 454 1 0 0 0
+c
+d 213 2 1 0 0
+c
+d 242 1 0 0 0
+c
+d 606 2 0 0 0
+c
+d 733 1 0 0 0
+c
+d 735 2 1 0 0
+c
+d 734 3 0 0 0
+c
+d 96 2 0 0 0
+c
+d 575 1 1 0 0
+c
+d 796 1 0 0 0
+c
+d 855 1 0 0 0
+c
+d 857 1 1 0 0
+c
+d 860 1 0 0 0
+c
+d 701 3 1 0 0
+c
+d 445 1 0 1 0
+c
+d 446 1 0 0 0
+c
+d 447 1 0 1 0
+c
+d 301 3 1 0 0
+c
+d 455 2 0 0 0
+c
+d 156 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 681 4 1 0 0
+c
+d 195 2 0 2 0
+c
+d 99 1 0 1 0
+c
+d 100 1 0 0 0
+c
+d 369 1 0 1 0
+c
+d 382 2 0 1 0
+c
+d 629 4 0 1 0
+c
+d 575 3 0 2 0
+c
+d 835 3 1 0 0
+c
+d 686 3 1 0 0
+c
+d 1134 3 0 0 0
+c
+d 1110 2 0 1 0
+c
+d 13 2 0 1 0
+c
+d 15 1 0 0 0
+c
+d 594 1 0 0 0
+c
+d 650 1 0 0 0
+c
+d 1012 1 0 1 0
+c
+d 1013 1 0 1 0
+c
+d 1033 1 0 0 0
+c
+d 799 1 0 1 0
+c
+d 811 1 0 1 0
+c
+d 301 2 0 0 0
+c
+d 686 4 1 0 0
+c
+d 152 1 0 0 0
+c
+d 153 1 0 1 0
+c
+d 618 1 0 0 0
+c
+d 638 1 0 1 0
+c
+d 529 1 1 0 0
+c
+d 1067 1 0 0 0
+c
+d 1069 2 0 0 0
+c
+d 96 2 0 1 0
+c
+d 97 1 0 1 0
+c
+d 280 2 0 1 0
+c
+d 281 1 0 1 0
+c
+d 205 3 1 0 0
+c
+d 858 3 0 0 0
+c
+d 48 4 1 0 0
+c
+d 60 3 0 2 0
+c
+d 418 2 0 0 0
+c
+d 634 2 0 1 0
+c
+d 635 1 0 1 0
+c
+d 301 1 0 0 0
+c
+d 304 2 0 0 0
+c
+d 46 1 0 0 0
+c
+d 775 1 0 0 0
+c
+d 341 3 0 0 0
+c
+d 663 3 1 0 0
+c
+d 1156 2 0 0 0
+c
+d 457 1 0 0 0
+c
+d 459 1 0 0 0
+c
+d 753 2 0 2 0
+c
+d 1177 3 1 0 0
+c
+d 134 2 0 0 0
+c
+d 139 1 0 0 0
+c
+d 575 3 1 0 0
+c
+d 977 3 0 2 0
+c
+d 906 2 0 0 0
+c
+d 719 4 1 0 0
+c
+d 578 2 0 0 0
+c
+d 1043 1 0 0 0
+c
+d 266 3 0 0 0
+c
+d 16 4 0 0 0
+c
+d 148 4 1 0 0
+c
+d 54 2 0 0 0
+c
+d 69 2 0 0 0
+c
+d 557 3 1 0 0
+c
+d 263 1 0 1 0
+c
+d 283 1 0 1 0
+c
+d 623 2 0 2 0
+c
+d 156 2 0 1 0
+c
+d 157 1 0 0 0
+c
+d 437 2 0 0 0
+c
+d 259 1 0 0 0
+c
+d 262 2 1 0 0
+c
+d 457 2 0 0 0
+c
+d 250 2 1 0 0
+c
+d 251 1 0 0 0
+c
+d 281 2 0 0 0
+c
+d 437 2 0 0 0
+c
+d 253 3 1 0 0
+c
+d 1043 1 0 0 0
+c
+d 1044 1 0 0 0
+c
+d 572 3 1 0 0
+c
+d 618 4 1 0 0
+c
+d 1165 2 1 0 0
+c
+d 1168 1 0 0 0
+c
+d 1011 3 1 0 0
+c
+d 716 1 1 0 0
+c
+d 718 1 0 0 0
+c
+d 494 2 1 0 0
+c
+d 495 2 0 0 0
+c
+d 156 2 0 2 0
+c
+d 1194 2 0 0 0
+c
+d 1017 3 0 0 0
+c
+d 453 2 0 1 0
+c
+d 454 1 0 0 0
+c
+d 1156 1 0 1 0
+c
+d 1195 2 0 1 0
+c
+d 259 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 111 1 0 0 0
+c
+d 143 1 0 1 0
+c
+d 229 2 0 0 0
+c
+d 796 1 0 0 0
+c
+d 797 1 0 0 0
+c
+d 718 2 0 0 0
+c
+d 96 3 0 0 0
+c
+d 369 1 0 0 0
+c
+d 382 1 0 0 0
+c
+d 466 2 0 0 0
+c
+d 594 2 1 0 0
+c
+d 701 4 1 0 0
+c
+d 811 1 0 0 0
+c
+d 815 1 0 0 0
+c
+d 572 4 1 0 0
+c
+d 199 1 0 0 0
+c
+d 211 1 0 1 0
+c
+d 599 2 0 0 0
+c
+d 266 1 0 1 0
+c
+d 268 1 0 0 0
+c
+d 282 1 0 0 0
+c
+d 437 4 1 0 0
+c
+d 1045 3 0 0 0
+c
+d 255 1 0 0 0
+c
+d 256 3 0 0 0
+c
+d 91 3 0 0 0
+c
+d 155 2 0 0 0
+c
+d 156 1 0 0 0
+c
+d 727 4 1 0 0
+c
+d 418 2 1 0 0
+c
+d 753 2 0 0 0
+c
+d 1156 1 0 1 0
+c
+d 1195 1 0 1 0
+c
+d 207 1 0 1 0
+c
+d 208 1 0 0 0
+c
+d 1245 1 0 1 0
+c
+d 1303 1 0 0 0
+c
+d 1304 1 0 0 0
+c
+d 444 3 0 0 0
+c
+d 99 1 0 0 0
+c
+d 101 1 1 0 0
+c
+d 1185 4 1 0 0
+c
+d 557 1 0 0 0
+c
+d 1058 1 0 0 0
+c
+d 304 1 0 1 0
+c
+d 308 3 1 0 0
+c
+d 726 1 1 0 0
+c
+d 728 1 0 0 0
+c
+d 734 1 0 0 0
+c
+d 119 1 0 0 0
+c
+d 120 2 0 0 0
+c
+d 101 2 0 0 0
+c
+d 608 1 1 0 0
+c
+d 401 1 1 0 0
+c
+d 404 2 0 0 0
+c
+d 1185 1 0 1 0
+c
+d 1199 2 0 0 0
+c
+d 382 2 0 0 0
+c
+d 1113 1 0 1 0
+c
+d 1115 1 0 0 0
+c
+d 1116 1 0 1 0
+c
+d 836 4 1 0 0
+c
+d 253 2 0 0 0
+c
+d 606 2 0 0 0
+c
+d 146 2 0 0 0
+c
+d 153 1 1 0 0
+c
+d 443 3 0 0 0
+c
+d 146 3 1 0 0
+c
+d 95 1 0 0 0
+c
+d 998 1 0 0 0
+c
+d 200 3 0 2 0
+c
+d 270 1 0 1 0
+c
+d 272 2 0 1 0
+c
+d 91 2 0 0 0
+c
+d 301 4 0 0 0
+c
+d 1152 3 0 0 0
+c
+d 1114 1 0 0 0
+c
+d 1115 1 0 0 0
+c
+d 1165 3 1 0 0
+c
+d 569 1 0 0 0
+c
+d 574 1 0 0 0
+c
+d 927 2 1 0 0
+c
+d 928 1 0 0 0
+c
+d 1115 1 0 1 0
+c
+d 1116 1 0 1 0
+c
+d 557 2 1 0 0
+c
+d 565 1 0 0 0
+c
+d 18 3 1 0 0
+c
+d 146 1 0 1 0
+c
+d 149 1 0 1 0
+c
+d 91 2 0 0 0
+c
+d 92 1 1 0 0
+c
+d 437 2 0 1 0
+c
+d 686 1 0 0 0
+c
+d 701 1 0 0 0
+c
+d 278 4 1 0 0
+c
+d 1270 1 0 0 0
+c
+d 1272 1 0 0 0
+c
+d 1063 1 1 0 0
+c
+d 1065 1 0 0 0
+c
+d 1066 2 0 0 0
+c
+d 207 1 0 0 0
+c
+d 208 1 0 1 0
+c
+d 209 1 0 0 0
+c
+d 69 2 0 0 0
+c
+d 443 2 1 0 0
+c
+d 449 1 0 0 0
+c
+d 262 2 0 0 0
+c
+d 1045 1 0 0 0
+c
+d 1046 1 0 0 0
+c
+d 822 1 0 0 0
+c
+d 823 1 0 0 0
+c
+d 929 2 0 1 0
+c
+d 931 2 0 1 0
+c
+d 752 3 0 0 0
+c
+d 686 1 0 1 0
+c
+d 701 1 0 0 0
+c
+d 714 1 0 1 0
+c
+d 437 1 0 0 0
+c
+d 558 2 0 0 0
+c
+d 157 4 1 0 0
+c
+d 419 4 1 0 0
+c
+d 153 2 0 0 0
+c
+d 54 1 0 1 0
+c
+d 719 2 0 1 0
+c
+d 959 2 0 0 0
+c
+d 1097 3 1 0 0
+c
+d 50 1 0 1 0
+c
+d 51 2 0 1 0
+c
+d 437 1 0 0 0
+c
+d 494 1 0 0 0
+c
+d 598 1 1 0 0
+c
+d 599 1 0 0 0
+c
+d 606 1 0 0 0
+c
+d 146 1 0 1 0
+c
+d 153 1 0 1 0
+c
+d 612 1 0 0 0
+c
+d 613 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 443 1 0 0 0
+c
+d 752 2 0 0 0
+c
+d 285 1 0 0 0
+c
+d 286 2 1 0 0
+c
+d 1156 2 1 0 0
+c
+d 1214 2 0 0 0
+c
+d 795 1 0 1 0
+c
+d 796 2 0 1 0
+c
+d 262 1 0 0 0
+c
+d 266 1 0 0 0
+c
+d 756 1 0 1 0
+c
+d 757 1 0 1 0
+c
+d 763 1 0 0 0
+c
+d 689 3 0 0 0
+c
+d 270 1 0 0 0
+c
+d 272 1 0 0 0
+c
+d 811 1 0 0 0
+c
+d 815 2 0 0 0
+c
+d 1185 1 0 0 0
+c
+d 1201 2 1 0 0
+c
+d 101 2 0 0 0
+c
+d 111 1 0 0 0
+c
+d 217 1 0 0 0
+c
+d 241 1 0 0 0
+c
+d 705 1 0 0 0
+c
+d 706 1 0 0 0
+c
+d 908 4 1 0 0
+c
+d 304 4 1 0 0
+c
+d 817 3 1 0 0
+c
+d 1168 1 1 0 0
+c
+d 1177 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 443 1 0 0 0
+c
+d 449 1 1 0 0
+c
+d 922 4 1 0 0
+c
+d 647 2 0 0 0
+c
+d 155 1 0 1 0
+c
+d 176 1 0 0 0
+c
+d 93 1 0 0 0
+c
+d 130 1 0 0 0
+c
+d 729 1 0 0 0
+c
+d 946 1 0 0 0
+c
+d 947 1 0 0 0
+c
+d 418 2 0 0 0
+c
+d 384 1 0 0 0
+c
+d 394 1 0 0 0
+c
+d 301 1 0 1 0
+c
+d 1156 1 0 1 0
+c
+d 437 3 0 0 0
+c
+d 204 3 0 0 0
+c
+d 661 1 0 0 0
+c
+d 666 2 0 0 0
+c
+d 383 3 0 0 0
+c
+d 253 3 1 0 0
+c
+d 591 3 0 2 0
+c
+d 301 3 0 0 0
+c
+d 1112 1 0 1 0
+c
+d 1115 1 0 1 0
+c
+d 746 4 0 0 0
+c
+d 639 3 1 0 0
+c
+d 157 3 1 0 0
+c
+d 737 1 0 1 0
+c
+d 743 1 0 1 0
+c
+d 511 2 0 0 0
+c
+d 521 1 1 0 0
+c
+d 213 2 0 0 0
+c
+d 572 2 0 1 0
+c
+d 1051 1 0 1 0
+c
+d 557 2 0 0 0
+c
+d 1058 1 0 0 0
+c
+d 1021 2 0 0 0
+c
+d 620 1 0 0 0
+c
+d 634 1 0 0 0
+c
+d 51 1 0 0 0
+c
+d 1309 2 0 1 0
+c
+d 117 3 1 0 0
+c
+d 502 3 1 0 0
+c
+d 621 1 0 0 0
+c
+d 622 2 1 0 0
+c
+d 152 3 0 2 0
+c
+d 686 3 1 0 0
+c
+d 799 1 0 0 0
+c
+d 801 1 0 0 0
+c
+d 802 1 0 0 0
+c
+d 54 2 0 1 0
+c
+d 575 2 0 1 0
+c
+d 134 1 0 0 0
+c
+d 135 1 0 0 0
+c
+d 136 1 0 0 0
+c
+d 225 3 0 0 0
+c
+d 1194 4 0 0 0
+c
+d 701 3 1 0 0
+c
+d 575 2 0 0 0
+c
+d 453 3 1 0 0
+c
+d 301 1 0 0 0
+c
+d 1156 2 0 2 0
+c
+d 205 3 1 0 0
+c
+d 594 2 0 2 0
+c
+d 48 4 0 0 0
+c
+d 1195 3 0 2 0
+c
+d 763 3 0 0 0
+c
+d 93 4 1 0 0
+c
+d 93 1 0 0 0
+c
+d 114 1 1 0 0
+c
+d 634 4 1 0 0
+c
+d 1114 1 0 0 0
+c
+d 1115 1 0 0 0
+c
+d 101 1 1 0 0
+c
+d 107 2 0 0 0
+c
+d 915 4 0 0 0
+c
+d 437 4 1 0 0
+c
+d 413 1 0 1 0
+c
+d 414 1 0 0 0
+c
+d 1087 1 0 1 0
+c
+d 91 3 1 0 0
+c
+d 28 2 0 0 0
+c
+d 301 3 0 2 0
+c
+d 580 2 0 0 0
+c
+d 724 3 1 0 0
+c
+d 734 1 0 0 0
+c
+d 1008 1 1 0 0
+c
+d 1013 1 0 0 0
+c
+d 220 1 0 0 0
+c
+d 1243 2 0 0 0
+c
+d 207 3 1 0 0
+c
+d 18 1 0 0 0
+c
+d 95 1 0 1 0
+c
+d 383 3 0 2 0
+c
+d 572 1 0 0 0
+c
+d 574 1 0 0 0
+c
+d 591 3 0 2 0
+c
+d 797 2 1 0 0
+c
+d 55 1 0 0 0
+c
+d 691 1 0 1 0
+c
+d 54 1 0 0 0
+c
+d 719 2 0 0 0
+c
+d 965 1 0 1 0
+c
+d 966 2 0 0 0
+c
+d 597 2 1 0 0
+c
+d 601 1 0 0 0
+c
+d 565 2 1 0 0
+c
+d 1058 1 0 0 0
+c
+d 212 3 0 1 0
+c
+d 213 1 0 0 0
+c
+d 797 1 0 1 0
+c
+d 799 1 0 0 0
+c
+d 2 2 1 0 0
+c
+d 16 1 0 0 0
+c
+d 437 2 0 0 0
+c
+d 820 3 0 1 0
+c
+d 1177 2 0 0 0
+c
+d 610 4 0 0 0
+c
+d 594 4 1 0 0
+c
+d 56 3 1 0 0
+c
+d 218 2 0 1 0
+c
+d 1240 1 0 1 0
+c
+d 686 3 1 0 0
+c
+d 101 1 0 1 0
+c
+d 111 2 0 1 0
+c
+d 79 2 0 0 0
+c
+d 84 1 1 0 0
+c
+d 578 3 1 0 0
+c
+d 701 3 1 0 0
+c
+d 93 1 0 1 0
+c
+d 95 1 0 0 0
+c
+d 301 4 1 0 0
+c
+d 791 2 0 1 0
+c
+d 826 1 0 0 0
+c
+d 827 1 1 0 0
+c
+d 795 2 0 2 0
+c
+d 911 1 0 0 0
+c
+d 499 1 0 0 0
+c
+d 500 2 1 0 0
+c
+d 132 2 1 0 0
+c
+d 495 2 0 0 0
+c
+d 346 3 1 0 0
+c
+d 2 1 0 1 0
+c
+d 16 2 0 1 0
+c
+d 69 2 0 0 0
+c
+d 101 2 0 0 0
+c
+d 111 1 0 0 0
+c
+d 745 3 0 0 0
+c
+d 268 4 1 0 0
+c
+d 418 4 0 0 0
+c
+d 6 1 0 1 0
+c
+d 12 2 0 1 0
+c
+d 926 3 1 0 0
+c
+d 48 2 1 0 0
+c
+d 578 1 0 0 0
+c
+d 687 1 0 1 0
+c
+d 704 1 0 0 0
+c
+d 705 1 0 0 0
+c
+d 799 1 0 1 0
+c
+d 811 1 0 0 0
+c
+d 384 1 0 1 0
+c
+d 390 1 0 1 0
+c
+d 618 3 0 1 0
+c
+d 1009 3 0 0 0
+c
+d 1096 3 0 1 0
+c
+d 686 1 0 1 0
+c
+d 701 1 0 1 0
+c
+d 714 2 0 0 0
+c
+d 575 3 0 0 0
+c
+d 185 1 0 0 0
+c
+d 196 1 0 0 0
+c
+d 753 2 0 0 0
+c
+d 829 2 0 0 0
+c
+d 159 3 0 2 0
+c
+d 686 2 0 0 0
+c
+d 437 1 0 0 0
+c
+d 451 1 0 0 0
+c
+d 419 2 0 0 0
+c
+d 423 1 0 0 0
+c
+d 1318 3 0 0 0
+c
+d 211 3 1 0 0
+c
+d 91 2 0 0 0
+c
+d 1265 1 1 0 0
+c
+d 594 2 0 0 0
+c
+d 1042 1 1 0 0
+c
+d 754 3 0 0 0
+c
+d 575 1 0 0 0
+c
+d 796 2 1 0 0
+c
+d 979 3 1 0 0
+c
+d 437 3 0 1 0
+c
+d 97 1 0 1 0
+c
+d 99 2 0 1 0
+c
+d 19 2 0 0 0
+c
+d 207 1 0 0 0
+c
+d 1245 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 441 1 0 1 0
+c
+d 301 1 0 0 0
+c
+d 1150 1 0 0 0
+c
+d 1152 1 0 0 0
+c
+d 821 2 0 0 0
+c
+d 400 2 1 0 0
+c
+d 403 2 0 0 0
+c
+d 101 2 0 1 0
+c
+d 426 1 0 1 0
+c
+d 1106 4 0 0 0
+c
+d 737 2 0 1 0
+c
+d 437 2 0 1 0
+c
+d 1115 2 0 0 0
+c
+d 253 3 0 0 0
+c
+d 1168 1 0 0 0
+c
+d 1177 1 0 0 0
+c
+d 408 3 1 0 0
+c
+d 1300 2 0 0 0
+c
+d 206 1 0 0 0
+c
+d 207 1 0 0 0
+c
+d 1205 4 1 0 0
+c
+d 348 3 0 0 0
+c
+d 211 3 0 2 0
+c
+d 737 3 1 0 0
+c
+d 437 2 0 0 0
+c
+d 729 1 0 0 0
+c
+d 946 1 0 0 0
+c
+d 947 1 0 0 0
+c
+d 54 3 1 0 0
+c
+d 616 3 1 0 0
+c
+d 419 3 0 0 0
+c
+d 157 3 1 0 0
+c
+d 651 1 0 0 0
+c
+d 686 2 0 0 0
+c
+d 211 4 0 0 0
+c
+d 1013 1 0 0 0
+c
+d 1033 1 0 0 0
+c
+d 591 3 1 0 0
+c
+d 168 2 0 2 0
+c
+d 169 1 0 0 0
+c
+d 153 2 1 0 0
+c
+d 155 1 0 0 0
+c
+d 101 3 0 0 0
+c
+d 457 3 1 0 0
+c
+d 973 3 1 0 0
+c
+d 620 1 0 0 0
+c
+d 631 2 0 0 0
+c
+d 919 1 1 0 0
+c
+d 933 1 0 0 0
+c
+d 934 2 0 0 0
+c
+d 602 1 0 0 0
+c
+d 631 1 0 0 0
+c
+d 445 1 0 0 0
+c
+d 447 1 0 0 0
+c
+d 820 1 0 1 0
+c
+d 822 1 0 0 0
+c
+d 48 2 1 0 0
+c
+d 621 2 0 1 0
+c
+d 629 1 1 0 0
+c
+d 965 2 0 0 0
+c
+d 301 3 0 0 0
+c
+d 763 1 0 0 0
+c
+d 767 1 0 1 0
+c
+d 768 1 0 1 0
+c
+d 827 1 0 0 0
+c
+d 828 1 0 0 0
+c
+d 28 2 0 0 0
+c
+d 153 1 0 1 0
+c
+d 155 1 0 0 0
+c
+d 482 4 0 0 0
+c
+d 822 2 0 0 0
+c
+d 823 1 1 0 0
+c
+d 156 2 1 0 0
+c
+d 400 1 0 0 0
+c
+d 62 2 0 0 0
+c
+d 63 1 0 0 0
+c
+d 591 1 0 1 0
+c
+d 597 2 0 1 0
+c
+d 1158 3 1 0 0
+c
+d 396 3 0 0 0
+c
+d 32 3 0 0 0
+c
+d 407 1 0 1 0
+c
+d 408 1 0 1 0
+c
+d 225 2 0 0 0
+c
+d 575 1 0 0 0
+c
+d 930 3 0 0 0
+c
+d 757 1 0 0 0
+c
+d 758 1 0 1 0
+c
+d 821 1 1 0 0
+c
+d 822 2 0 0 0
+c
+d 606 3 1 0 0
+c
+d 264 3 1 0 0
+c
+d 691 1 0 1 0
+c
+d 705 1 0 0 0
+c
+d 706 1 0 1 0
+c
+d 1096 1 0 0 0
+c
+d 1097 1 0 0 0
+c
+d 622 1 0 1 0
+c
+d 1008 1 0 0 0
+c
+d 523 3 0 0 0
+c
+d 827 1 1 0 0
+c
+d 829 2 0 0 0
+c
+d 701 2 0 1 0
+c
+d 712 1 0 0 0
+c
+d 1043 3 0 0 0
+c
+d 69 3 0 1 0
+c
+d 143 3 1 0 0
+c
+d 756 2 0 1 0
+c
+d 763 1 0 1 0
+c
+d 594 1 0 1 0
+c
+d 959 2 0 1 0
+c
+d 419 3 0 2 0
+c
+d 16 1 0 1 0
+c
+d 93 2 0 1 0
+c
+d 511 2 0 0 0
+c
+d 960 1 0 0 0
+c
+d 961 1 0 0 0
+c
+d 199 1 0 0 0
+c
+d 208 1 0 0 0
+c
+d 1195 4 1 0 0
+c
+d 1165 3 1 0 0
+c
+d 1205 3 0 0 0
+c
+d 723 2 0 0 0
+c
+d 726 1 0 0 0
+c
+d 242 1 0 1 0
+c
+d 262 1 0 1 0
+c
+d 19 1 0 0 0
+c
+d 22 1 0 0 0
+c
+d 264 3 1 0 0
+c
+d 382 1 0 0 0
+c
+d 1134 2 1 0 0
+c
+d 578 2 0 0 0
+c
+d 213 3 1 0 0
+c
+d 591 3 1 0 0
+c
+d 1 3 0 2 0
+c
+d 827 1 0 0 0
+c
+d 829 1 0 0 0
+c
+d 96 1 0 1 0
+c
+d 98 2 0 1 0
+c
+d 253 2 0 0 0
+c
+d 634 3 1 0 0
+c
+d 206 1 1 0 0
+c
+d 207 2 0 0 0
+c
+d 437 4 1 0 0
+c
+d 820 1 0 0 0
+c
+d 822 1 0 0 0
+c
+d 551 1 0 0 0
+c
+d 775 1 0 0 0
+c
+d 598 2 0 1 0
+c
+d 217 3 1 0 0
+c
+d 1120 2 1 0 0
+c
+d 242 2 0 0 0
+c
+d 280 1 0 1 0
+c
+d 281 2 0 0 0
+c
+d 968 2 0 0 0
+c
+d 1009 2 0 0 0
+c
+d 323 2 0 1 0
+c
+d 418 1 0 0 0
+c
+d 1087 1 0 0 0
+c
+d 54 4 1 0 0
+c
+d 1194 4 0 0 0
+c
+d 796 2 0 2 0
+c
+d 815 1 0 0 0
+c
+d 218 2 0 0 0
+c
+d 207 2 0 1 0
+c
+d 208 1 0 0 0
+c
+d 502 1 0 0 0
+c
+d 503 3 0 0 0
+c
+d 146 1 0 0 0
+c
+d 285 1 0 0 0
+c
+d 18 1 0 1 0
+c
+d 77 2 0 0 0
+c
+d 60 1 0 1 0
+c
+d 1009 2 0 1 0
+c
+d 650 1 0 0 0
+c
+d 655 2 1 0 0
+c
+d 196 1 0 1 0
+c
+d 200 1 0 0 0
+c
+d 207 1 0 1 0
+c
+d 232 3 0 0 0
+c
+d 686 1 0 0 0
+c
+d 701 1 0 0 0
+c
+d 280 4 1 0 0
+c
+d 470 1 0 0 0
+c
+d 477 1 0 0 0
+c
+d 795 1 0 0 0
+c
+d 820 1 0 0 0
+c
+d 208 1 0 0 0
+c
+d 209 1 0 0 0
+c
+d 799 2 0 0 0
+c
+d 64 1 0 0 0
+c
+d 65 1 0 0 0
+c
+d 575 1 0 0 0
+c
+d 1044 1 0 0 0
+c
+d 241 1 0 0 0
+c
+d 248 1 0 1 0
+c
+d 7 4 0 0 0
+c
+d 196 1 0 1 0
+c
+d 197 1 0 1 0
+c
+d 1009 3 0 0 0
+c
+d 915 2 0 0 0
+c
+d 437 2 0 1 0
+c
+d 439 1 0 1 0
+c
+d 31 3 0 0 0
+c
+d 218 3 1 0 0
+c
+d 286 3 1 0 0
+c
+d 599 3 0 1 0
+c
+d 587 4 0 0 0
+c
+d 196 2 1 0 0
+c
+d 200 1 0 0 0
+c
+d 327 2 0 1 0
+c
+d 328 1 0 0 0
+c
+d 51 2 0 0 0
+c
+d 1309 1 0 0 0
+c
+d 799 3 0 0 0
+c
+d 1153 3 1 0 0
+c
+d 250 4 1 0 0
+c
+d 61 4 0 0 0
+c
+d 488 4 0 0 0
+c
+d 578 1 0 1 0
+c
+d 580 2 0 1 0
+c
+d 927 3 0 0 0
+c
+d 44 1 0 0 0
+c
+d 1020 2 0 0 0
+c
+d 1030 2 1 0 0
+c
+d 621 2 0 0 0
+c
+d 118 3 1 0 0
+c
+d 582 2 0 1 0
+c
+d 587 1 0 1 0
+c
+d 54 3 1 0 0
+c
+d 511 2 0 1 0
+c
+d 826 3 1 0 0
+c
+d 737 3 0 2 0
+c
+d 610 3 0 2 0
+c
+d 262 3 0 0 0
+c
+d 293 1 0 0 0
+c
+d 1110 1 0 1 0
+c
+d 1115 1 0 1 0
+c
+d 686 4 0 0 0
+c
+d 574 2 0 0 0
+c
+d 193 3 0 1 0
+c
+d 195 1 0 1 0
+c
+d 166 1 1 0 0
+c
+d 400 1 0 0 0
+c
+d 697 1 0 0 0
+c
+d 717 1 0 0 0
+c
+d 1152 1 0 1 0
+c
+d 1153 1 0 1 0
+c
+d 1154 1 0 0 0
+c
+d 341 3 1 0 0
+c
+d 608 3 1 0 0
+c
+d 650 1 0 1 0
+c
+d 661 1 0 0 0
+c
+d 206 2 0 1 0
+c
+d 178 1 0 0 0
+c
+d 181 2 1 0 0
+c
+d 69 2 0 0 0
+c
+d 56 1 0 0 0
+c
+d 1303 2 0 0 0
+c
+d 718 1 1 0 0
+c
+d 730 1 0 0 0
+c
+d 735 1 0 0 0
+c
+d 959 2 0 0 0
+c
+d 384 2 0 0 0
+c
+d 386 2 0 1 0
+c
+d 100 2 0 1 0
+c
+d 1004 1 0 1 0
+c
+d 1150 2 0 0 0
+c
+d 1169 1 0 1 0
+c
+d 1170 1 0 0 0
+c
+d 1210 1 0 1 0
+c
+d 965 2 0 0 0
+c
+d 1163 2 0 1 0
+c
+d 1164 1 0 0 0
+c
+d 598 2 1 0 0
+c
+d 599 1 0 0 0
+c
+d 919 1 0 0 0
+c
+d 933 1 0 0 0
+c
+d 829 3 1 0 0
+c
+d 463 2 0 0 0
+c
+d 826 3 1 0 0
+c
+d 797 2 0 0 0
+c
+d 437 2 0 2 0
+c
+d 1107 1 0 0 0
+c
+d 1109 1 0 0 0
+c
+d 44 1 0 1 0
+c
+d 1020 1 0 0 0
+c
+d 229 1 0 1 0
+c
+d 231 1 0 1 0
+c
+d 146 2 0 0 0
+c
+d 294 1 1 0 0
+c
+d 767 2 0 1 0
+c
+d 863 1 0 1 0
+c
+d 285 1 0 0 0
+c
+d 1226 1 1 0 0
+c
+d 829 2 0 0 0
+c
+d 1303 1 0 0 0
+c
+d 1304 2 0 0 0
+c
+d 675 2 0 1 0
+c
+d 437 2 0 2 0
+c
+d 100 2 0 0 0
+c
+d 1002 1 0 0 0
+c
+d 478 1 0 0 0
+c
+d 482 2 1 0 0
+c
+d 795 1 0 0 0
+c
+d 907 1 0 1 0
+c
+d 908 1 0 1 0
+c
+d 572 2 0 2 0
+c
+d 574 1 0 0 0
+c
+d 855 2 0 0 0
+c
+d 856 1 1 0 0
+c
+d 594 2 0 0 0
+c
+d 959 1 0 0 0
+c
+d 753 3 1 0 0
+c
+d 395 2 0 1 0
+c
+d 437 2 0 0 0
+c
+d 162 2 0 1 0
+c
+d 1251 1 0 1 0
+c
+d 148 2 0 1 0
+c
+d 149 1 0 1 0
+c
+d 283 2 0 0 0
+c
+d 1094 3 0 0 0
+c
+d 574 1 0 0 0
+c
+d 795 1 0 0 0
+c
+d 69 1 0 0 0
+c
+d 71 1 0 0 0
+c
+d 767 1 0 1 0
+c
+d 863 2 0 0 0
+c
+d 578 3 1 0 0
+c
+d 1115 1 0 0 0
+c
+d 1117 1 0 0 0
+c
+d 1016 3 0 0 0
+c
+d 51 1 0 0 0
+c
+d 1310 1 0 0 0
+c
+d 919 1 0 0 0
+c
+d 923 2 0 0 0
+c
+d 242 2 0 2 0
+c
+d 49 3 1 0 0
+c
+d 445 3 1 0 0
+c
+d 447 1 0 0 0
+c
+d 1168 2 0 0 0
+c
+d 164 2 0 0 0
+c
+d 830 2 0 0 0
+c
+d 831 2 0 0 0
+c
+d 686 1 0 0 0
+c
+d 701 1 0 0 0
+c
+d 453 2 0 0 0
+c
+d 565 3 0 0 0
+c
+d 599 3 0 2 0
+c
+d 754 1 0 1 0
+c
+d 756 1 0 1 0
+c
+d 2 2 1 0 0
+c
+d 16 1 0 0 0
+c
+d 608 2 1 0 0
+c
+d 609 1 0 0 0
+c
+d 1039 1 0 0 0
+c
+d 572 1 0 0 0
+c
+d 795 1 0 0 0
+c
+d 447 2 0 2 0
+c
+d 39 2 0 0 0
+c
+d 152 1 0 0 0
+c
+d 153 2 0 0 0
+c
+d 437 1 0 0 0
+c
+d 1047 1 0 0 0
+c
+d 499 4 1 0 0
+c
+d 487 1 1 0 0
+c
+d 488 2 0 0 0
+c
+d 437 2 0 0 0
+c
+d 437 4 1 0 0
+c
+d 308 2 0 0 0
+c
+d 499 1 0 1 0
+c
+d 500 1 0 1 0
+c
+d 146 3 1 0 0
+c
+d 408 4 1 0 0
+c
+d 511 3 0 0 0
+c
+d 618 1 0 0 0
+c
+d 620 1 0 0 0
+c
+d 621 1 0 0 0
+c
+d 111 2 0 0 0
+c
+d 1262 1 0 1 0
+c
+d 213 4 0 0 0
+c
+d 455 2 0 0 0
+c
+d 48 3 1 0 0
+c
+d 60 3 1 0 0
+c
+d 62 1 0 0 0
+c
+d 16 3 0 0 0
+c
+d 90 1 0 0 0
+c
+d 767 2 1 0 0
+c
+d 861 1 0 0 0
+c
+d 167 1 0 0 0
+c
+d 369 1 0 0 0
+c
+d 443 4 0 2 0
+c
+d 266 2 0 0 0
+c
+d 15 3 0 0 0
+c
+d 446 4 0 0 0
+c
+d 418 1 0 0 0
+c
+d 1087 1 0 0 0
+c
+d 93 1 0 0 0
+c
+d 1263 1 0 0 0
+c
+d 686 2 0 0 0
+c
+d 213 2 0 0 0
+c
+d 378 4 0 0 0
+c
+d 618 2 0 0 0
+c
+d 437 2 0 2 0
+c
+d 206 1 0 0 0
+c
+d 208 1 0 0 0
+c
+d 378 2 0 0 0
+c
+d 1111 1 1 0 0
+c
+d 625 2 0 2 0
+c
+d 51 2 1 0 0
+c
+d 753 1 0 0 0
+c
+d 755 1 0 0 0
+c
+d 1170 2 0 1 0
+c
+d 217 1 0 0 0
+c
+d 241 1 0 0 0
+c
+d 1232 1 0 0 0
+c
+d 604 2 0 2 0
+c
+d 919 1 0 0 0
+c
+d 922 2 0 0 0
+c
+d 575 1 0 0 0
+c
+d 931 2 1 0 0
+c
+d 95 1 0 1 0
+c
+d 96 1 0 1 0
+c
+d 168 3 1 0 0
+c
+d 49 1 0 1 0
+c
+d 734 1 0 0 0
+c
+d 169 3 1 0 0
+c
+d 575 1 0 0 0
+c
+d 578 2 1 0 0
+c
+d 1110 1 0 0 0
+c
+d 1111 1 0 0 0
+c
+d 368 2 0 0 0
+c
+d 246 1 0 1 0
+c
+d 252 1 0 1 0
+c
+d 262 1 0 0 0
+c
+d 1034 3 0 0 0
+c
+d 1153 3 0 0 0
+c
+d 2 1 0 0 0
+c
+d 16 1 0 0 0
+c
+d 1065 4 0 0 0
+c
+d 594 4 1 0 0
+c
+d 93 4 0 0 0
+c
+d 400 4 0 0 0
+c
+d 340 4 1 0 0
+c
+d 523 2 0 0 0
+c
+d 26 1 0 0 0
+c
+d 39 1 0 0 0
+c
+d 18 3 1 0 0
+c
+d 419 4 1 0 0
+c
+d 54 3 1 0 0
+c
+d 18 3 0 1 0
+c
+d 686 3 1 0 0
+c
+d 757 1 1 0 0
+c
+d 763 2 0 0 0
+c
+d 213 2 0 0 0
+c
+d 926 3 0 0 0
+c
+d 419 1 0 0 0
+c
+d 420 2 0 0 0
+c
+d 96 1 0 0 0
+c
+d 142 2 1 0 0
+c
+d 268 3 0 2 0
+c
+d 536 2 0 2 0
+c
+d 575 1 0 1 0
+c
+d 796 1 0 0 0
+c
+d 939 1 0 0 0
+c
+d 940 1 0 0 0
+c
+d 91 1 0 0 0
+c
+d 117 1 0 0 0
+c
+d 602 1 0 1 0
+c
+d 631 1 0 0 0
+c
+d 1115 2 0 1 0
+c
+d 610 1 0 0 0
+c
+d 612 2 0 0 0
+c
+d 498 2 1 0 0
+c
+d 499 1 0 0 0
+c
+d 353 2 1 0 0
+c
+d 626 1 0 0 0
+c
+d 627 2 1 0 0
+c
+d 69 4 0 2 0
+c
+d 242 3 0 1 0
+c
+d 746 1 0 0 0
+c
+d 753 1 0 0 0
+c
+d 723 2 0 2 0
+c
+d 50 1 0 0 0
+c
+d 51 1 0 0 0
+c
+d 610 1 0 0 0
+c
+d 612 2 0 0 0
+c
+d 719 3 0 0 0
+c
+d 1087 2 1 0 0
+c
+d 1088 1 0 0 0
+c
+d 1111 1 0 0 0
+c
+d 1112 1 0 0 0
+c
+d 653 3 0 0 0
+c
+d 28 3 0 2 0
+c
+d 491 2 0 1 0
+c
+d 572 4 0 1 0
+c
+d 1216 2 0 0 0
+c
+d 1021 1 0 0 0
+c
+d 1022 2 0 0 0
+c
+d 155 3 0 1 0
+c
+d 763 3 0 1 0
+c
+d 795 2 1 0 0
+c
+d 820 1 0 0 0
+c
+d 112 3 0 0 0
+c
+d 1009 2 0 0 0
+c
+d 159 2 0 0 0
+c
+d 54 1 0 0 0
+c
+d 1311 1 0 0 0
+c
+d 1312 2 0 0 0
+c
+d 29 2 0 0 0
+c
+d 31 1 1 0 0
+c
+d 393 1 0 1 0
+c
+d 395 1 0 0 0
+c
+d 399 1 0 1 0
+c
+d 242 3 1 0 0
+c
+d 578 3 1 0 0
+c
+d 638 2 0 0 0
+c
+d 241 2 0 0 0
+c
+d 95 1 0 1 0
+c
+d 96 2 0 0 0
+c
+d 65 3 0 2 0
+c
+d 54 3 0 2 0
+c
+d 1279 2 0 1 0
+c
+d 1280 1 0 0 0
+c
+d 418 1 0 0 0
+c
+d 1087 1 0 0 0
+c
+d 1112 2 0 0 0
+c
+d 580 1 0 0 0
+c
+d 955 1 0 0 0
+c
+d 957 1 1 0 0
+c
+d 594 2 0 1 0
+c
+d 653 1 0 1 0
+c
+d 49 3 1 0 0
+c
+d 1168 1 0 0 0
+c
+d 1177 1 0 0 0
+c
+d 704 1 0 0 0
+c
+d 705 1 0 0 0
+c
+d 305 2 0 0 0
+c
+d 701 3 1 0 0
+c
+d 457 3 1 0 0
+c
+d 19 1 0 0 0
+c
+d 622 2 0 0 0
+c
+d 301 2 0 0 0
+c
+d 156 2 1 0 0
+c
+d 157 1 0 0 0
+c
+d 60 1 0 0 0
+c
+d 621 1 0 0 0
+c
+d 146 2 0 2 0
+c
+d 229 1 0 0 0
+c
+d 753 2 0 0 0
+c
+d 594 1 0 0 0
+c
+d 673 1 0 0 0
+c
+d 676 1 0 0 0
+c
+d 543 3 0 0 0
+c
+d 924 4 1 0 0
+c
+d 604 2 0 0 0
+c
+d 1262 3 0 0 0
+c
+d 60 1 0 1 0
+c
+d 72 1 0 0 0
+c
+d 622 1 0 1 0
+c
+d 926 3 1 0 0
+c
+d 437 4 1 0 0
+c
+d 789 1 0 0 0
+c
+d 790 1 0 0 0
+c
+d 31 4 1 0 0
+c
+d 799 2 0 0 0
+c
+d 153 1 0 1 0
+c
+d 155 1 0 1 0
+c
+d 167 2 1 0 0
+c
+d 369 1 0 0 0
+c
+d 669 1 0 1 0
+c
+d 670 1 0 0 0
+c
+d 974 2 0 1 0
+c
+d 574 2 0 1 0
+c
+d 795 1 0 1 0
+c
+d 1110 2 0 0 0
+c
+d 505 1 0 0 0
+c
+d 506 1 0 0 0
+c
+d 148 2 0 2 0
+c
+d 301 1 0 1 0
+c
+d 1152 1 0 1 0
+c
+d 1155 1 0 0 0
+c
+d 437 2 0 0 0
+c
+d 1300 1 0 0 0
+c
+d 1301 1 0 1 0
+c
+d 1302 1 0 0 0
+c
+d 353 2 1 0 0
+c
+d 343 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 378 1 0 0 0
+c
+d 1111 1 0 0 0
+c
+d 59 3 0 1 0
+c
+d 393 2 0 0 0
+c
+d 1195 2 0 2 0
+c
+d 211 2 1 0 0
+c
+d 575 3 1 0 0
+c
+d 822 3 0 2 0
+c
+d 443 1 0 0 0
+c
+d 449 1 0 0 0
+c
+d 689 1 0 0 0
+c
+d 704 1 0 0 0
+c
+d 225 2 0 0 0
+c
+d 506 1 1 0 0
+c
+d 507 2 0 0 0
+c
+d 650 1 0 1 0
+c
+d 661 2 0 1 0
+c
+d 344 1 0 0 0
+c
+d 1146 1 0 0 0
+c
+d 1147 1 0 0 0
+c
+d 630 2 0 0 0
+c
+d 689 1 0 0 0
+c
+d 704 1 0 0 0
+c
+d 437 3 0 0 0
+c
+d 822 1 0 0 0
+c
+d 823 1 1 0 0
+c
+d 212 3 1 0 0
+c
+d 602 2 0 1 0
+c
+d 604 1 0 1 0
+c
+d 922 1 0 0 0
+c
+d 926 1 0 0 0
+c
+d 146 2 0 2 0
+c
+d 111 2 0 0 0
+c
+d 1090 1 1 0 0
+c
+d 608 3 1 0 0
+c
+d 280 1 0 0 0
+c
+d 281 1 0 0 0
+c
+d 881 3 0 1 0
+c
+d 511 1 0 0 0
+c
+d 522 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 108 2 1 0 0
+c
+d 55 2 0 0 0
+c
+d 691 1 1 0 0
+c
+d 748 3 0 1 0
+c
+d 455 1 0 0 0
+c
+d 457 2 0 0 0
+c
+d 49 3 0 1 0
+c
+d 686 3 1 0 0
+c
+d 395 1 1 0 0
+c
+d 400 1 0 0 0
+c
+d 407 1 0 0 0
+c
+d 208 1 0 0 0
+c
+d 211 1 0 1 0
+c
+d 242 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 437 4 1 0 0
+c
+d 956 4 0 0 0
+c
+d 89 1 0 0 0
+c
+d 1266 1 0 0 0
+c
+d 1285 1 1 0 0
+c
+d 60 2 0 0 0
+c
+d 623 1 0 0 0
+c
+d 419 1 0 0 0
+c
+d 421 1 0 0 0
+c
+d 754 1 0 0 0
+c
+d 756 2 0 1 0
+c
+d 1008 3 1 0 0
+c
+d 799 3 0 0 0
+c
+d 378 2 0 0 0
+c
+d 737 1 0 0 0
+c
+d 743 2 1 0 0
+c
+d 602 2 0 0 0
+c
+d 790 2 0 0 0
+c
+d 418 2 0 0 0
+c
+d 1087 1 0 0 0
+c
+d 151 3 0 0 0
+c
+d 91 2 1 0 0
+c
+d 117 1 0 0 0
+c
+d 767 1 0 1 0
+c
+d 861 1 0 1 0
+c
+d 863 1 0 0 0
+c
+d 591 2 0 0 0
+c
+d 618 1 0 0 0
+c
+d 621 1 0 0 0
+c
+d 1269 3 1 0 0
+c
+d 156 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 77 2 0 0 0
+c
+d 594 3 1 0 0
+c
+d 199 1 0 0 0
+c
+d 208 1 0 0 0
+c
+d 210 1 0 0 0
+c
+d 301 3 1 0 0
+c
+d 493 2 0 1 0
+c
+d 494 1 0 1 0
+c
+d 268 1 0 0 0
+c
+d 269 2 0 0 0
+c
+d 301 3 0 0 0
+c
+d 803 1 0 0 0
+c
+d 804 1 0 0 0
+c
+d 444 4 0 0 0
+c
+d 795 1 0 0 0
+c
+d 911 1 0 0 0
+c
+d 146 2 0 0 0
+c
+d 99 1 0 0 0
+c
+d 100 1 1 0 0
+c
+d 101 1 0 0 0
+c
+d 1196 4 1 0 0
+c
+d 156 4 0 0 0
+c
+d 218 3 0 0 0
+c
+d 146 2 0 0 0
+c
+d 285 1 1 0 0
+c
+d 660 3 0 0 0
+c
+d 1218 2 0 0 0
+c
+d 1219 2 0 0 0
+c
+d 598 1 0 0 0
+c
+d 599 1 0 0 0
+c
+d 99 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 393 2 0 0 0
+c
+d 249 1 0 1 0
+c
+d 250 1 0 1 0
+c
+d 457 2 1 0 0
+c
+d 193 1 0 0 0
+c
+d 195 2 1 0 0
+c
+d 1113 1 0 1 0
+c
+d 1115 1 0 0 0
+c
+d 153 2 0 0 0
+c
+d 155 1 0 0 0
+c
+d 591 1 0 1 0
+c
+d 597 1 0 0 0
+c
+d 157 2 0 1 0
+c
+d 763 2 0 0 0
+c
+d 942 1 0 0 0
+c
+d 835 1 0 0 0
+c
+d 836 1 0 0 0
+c
+d 796 1 0 0 0
+c
+d 815 1 1 0 0
+c
+d 19 2 1 0 0
+c
+d 965 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 159 1 0 0 0
+c
+d 146 3 1 0 0
+c
+d 344 1 0 0 0
+c
+d 346 1 0 0 0
+c
+d 262 2 1 0 0
+c
+d 264 1 0 0 0
+c
+d 1163 2 0 0 0
+c
+d 159 2 0 0 0
+c
+d 457 4 1 0 0
+c
+d 634 3 1 0 0
+c
+d 1153 1 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 497 1 0 0 0
+c
+d 498 2 1 0 0
+c
+d 822 1 0 0 0
+c
+d 823 1 0 0 0
+c
+d 574 4 1 0 0
+c
+d 610 2 0 0 0
+c
+d 635 2 0 1 0
+c
+d 152 1 0 0 0
+c
+d 153 1 0 0 0
+c
+d 575 2 1 0 0
+c
+d 796 1 0 0 0
+c
+d 414 1 0 0 0
+c
+d 418 1 0 0 0
+c
+d 457 1 0 1 0
+c
+d 461 2 0 1 0
+c
+d 72 1 0 1 0
+c
+d 622 1 0 1 0
+c
+d 610 3 0 1 0
+c
+d 19 1 0 0 0
+c
+d 629 1 0 1 0
+c
+d 204 1 0 0 0
+c
+d 217 2 1 0 0
+c
+d 1170 2 0 2 0
+c
+d 285 3 0 1 0
+c
+d 1226 1 0 1 0
+c
+d 1263 2 0 0 0
+c
+d 185 2 0 0 0
+c
+d 815 1 0 0 0
+c
+d 816 1 0 0 0
+c
+d 620 3 0 2 0
+c
+d 418 2 0 1 0
+c
+d 51 2 1 0 0
+c
+d 52 1 0 0 0
+c
+d 1115 1 0 0 0
+c
+d 1116 1 0 0 0
+c
+d 1269 3 0 2 0
+c
+d 91 2 0 0 0
+c
+d 746 2 0 2 0
+c
+d 1009 3 1 0 0
+c
+d 359 3 0 0 0
+c
+d 199 3 1 0 0
+c
+d 622 1 0 1 0
+c
+d 1035 1 0 1 0
+c
+d 575 2 0 1 0
+c
+d 931 1 0 1 0
+c
+d 463 3 0 0 0
+c
+d 277 1 0 0 0
+c
+d 1158 1 0 0 0
+c
+d 213 2 1 0 0
+c
+d 214 1 0 0 0
+c
+d 152 3 0 0 0
+c
+d 1235 3 1 0 0
+c
+d 738 1 0 0 0
+c
+d 745 1 0 1 0
+c
+d 748 1 0 1 0
+c
+d 618 3 0 0 0
+c
+d 52 1 0 0 0
+c
+d 56 1 0 0 0
+c
+d 738 1 1 0 0
+c
+d 745 1 0 0 0
+c
+d 1303 3 0 0 0
+c
+d 301 3 1 0 0
+c
+d 218 3 1 0 0
+c
+d 719 1 0 1 0
+c
+d 720 1 0 1 0
+c
+d 384 3 1 0 0
+c
+d 341 2 0 0 0
+c
+d 745 2 0 0 0
+c
+d 574 3 1 0 0
+c
+d 618 1 0 1 0
+c
+d 638 1 0 1 0
+c
+d 1195 2 0 0 0
+c
+d 1185 4 1 0 0
+c
+d 206 3 1 0 0
+c
+d 498 1 0 0 0
+c
+d 499 1 0 0 0
+c
+d 340 3 0 0 0
+c
+d 719 2 0 0 0
+c
+d 753 1 0 0 0
+c
+d 754 1 0 0 0
+c
+d 186 1 0 0 0
+c
+d 213 1 0 0 0
+c
+d 60 1 0 1 0
+c
+d 65 1 0 1 0
+c
+d 1307 2 0 0 0
+c
+d 208 2 0 0 0
+c
+d 574 3 0 2 0
+c
+d 598 4 0 0 0
+c
+d 5 3 0 0 0
+c
+d 60 1 0 0 0
+c
+d 62 1 0 0 0
+c
+d 17 1 0 1 0
+c
+d 93 2 0 1 0
+c
+d 402 1 0 0 0
+c
+d 403 1 0 0 0
+c
+d 588 4 0 0 0
+c
+d 400 1 1 0 0
+c
+d 408 2 0 0 0
+c
+d 1111 1 1 0 0
+c
+d 1112 2 0 0 0
+c
+d 927 1 0 0 0
+c
+d 928 1 0 0 0
+c
+d 689 1 0 0 0
+c
+d 704 2 1 0 0
+c
+d 482 2 0 0 0
+c
+d 484 1 0 1 0
+c
+d 1192 1 0 0 0
+c
+d 1203 1 0 0 0
+c
+d 253 2 0 0 0
+c
+d 29 2 0 0 0
+c
+d 418 1 0 0 0
+c
+d 1087 1 0 0 0
+c
+d 172 1 0 1 0
+c
+d 173 1 0 0 0
+c
+d 174 1 0 0 0
+c
+d 341 1 0 0 0
+c
+d 344 1 0 0 0
+c
+d 346 1 0 0 0
+c
+d 246 3 1 0 0
+c
+d 557 2 0 1 0
+c
+d 1065 1 0 1 0
+c
+d 17 1 0 0 0
+c
+d 93 1 0 0 0
+c
+d 1115 1 0 0 0
+c
+d 1117 1 0 0 0
+c
+d 1118 1 0 0 0
+c
+d 211 1 0 0 0
+c
+d 215 2 1 0 0
+c
+d 810 3 0 2 0
+c
+d 580 2 0 0 0
+c
+d 156 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 821 1 1 0 0
+c
+d 822 1 0 0 0
+c
+d 353 2 0 0 0
+c
+d 599 1 1 0 0
+c
+d 606 1 0 0 0
+c
+d 211 2 0 0 0
+c
+d 650 3 1 0 0
+c
+d 208 2 0 0 0
+c
+d 647 2 0 0 0
+c
+d 659 1 0 0 0
+c
+d 419 3 1 0 0
+c
+d 91 4 0 0 0
+c
+d 1107 2 0 0 0
+c
+d 1110 1 1 0 0
+c
+d 156 2 1 0 0
+c
+d 157 1 0 0 0
+c
+d 302 3 0 0 0
+c
+d 618 1 0 1 0
+c
+d 634 1 0 0 0
+c
+d 635 1 0 1 0
+c
+d 990 1 0 1 0
+c
+d 997 1 0 0 0
+c
+d 199 1 0 0 0
+c
+d 211 2 1 0 0
+c
+d 673 1 0 0 0
+c
+d 675 1 0 0 0
+c
+d 676 1 0 0 0
+c
+d 185 4 0 0 0
+c
+d 70 3 0 1 0
+c
+d 60 2 0 0 0
+c
+d 402 1 1 0 0
+c
+d 403 2 0 0 0
+c
+d 21 3 0 0 0
+c
+d 423 1 0 1 0
+c
+d 470 1 0 1 0
+c
+d 919 3 1 0 0
+c
+d 921 1 0 0 0
+c
+d 21 1 0 1 0
+c
+d 26 1 0 1 0
+c
+d 28 1 0 0 0
+c
+d 343 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 861 2 1 0 0
+c
+d 871 1 0 0 0
+c
+d 369 2 0 0 0
+c
+d 811 2 0 1 0
+c
+d 58 2 0 0 0
+c
+d 1308 1 0 0 0
+c
+d 804 1 0 0 0
+c
+d 915 1 0 0 0
+c
+d 479 2 0 2 0
+c
+d 480 1 0 0 0
+c
+d 348 1 0 0 0
+c
+d 350 1 0 0 0
+c
+d 1115 1 0 0 0
+c
+d 1118 1 0 0 0
+c
+d 93 1 0 0 0
+c
+d 96 2 0 0 0
+c
+d 511 3 1 0 0
+c
+d 301 3 1 0 0
+c
+d 1009 3 0 2 0
+c
+d 922 4 1 0 0
+c
+d 575 2 1 0 0
+c
+d 382 1 0 1 0
+c
+d 383 1 0 1 0
+c
+d 811 2 0 1 0
+c
+d 449 2 0 0 0
+c
+d 450 1 0 0 0
+c
+d 327 1 0 0 0
+c
+d 349 1 0 0 0
+c
+d 54 2 0 0 0
+c
+d 301 1 0 1 0
+c
+d 305 1 0 0 0
+c
+d 93 3 0 1 0
+c
+d 494 2 0 0 0
+c
+d 496 1 1 0 0
+c
+d 157 2 1 0 0
+c
+d 311 2 0 1 0
+c
+d 377 3 0 2 0
+c
+d 686 2 0 1 0
+c
+d 925 1 0 1 0
+c
+d 284 1 1 0 0
+c
+d 285 2 0 0 0
+c
+d 26 3 0 2 0
+c
+d 478 1 0 0 0
+c
+d 483 1 1 0 0
+c
+d 487 1 0 0 0
+c
+d 1112 1 0 0 0
+c
+d 1114 1 0 0 0
+c
+d 344 2 0 0 0
+c
+d 218 2 0 0 0
+c
+d 220 1 0 1 0
+c
+d 591 2 0 1 0
+c
+d 593 1 0 1 0
+c
+d 65 2 0 1 0
+c
+d 660 2 0 0 0
+c
+d 661 2 0 0 0
+c
+d 418 1 0 0 0
+c
+d 419 1 0 0 0
+c
+d 574 2 0 0 0
+c
+d 437 1 0 1 0
+c
+d 574 1 0 0 0
+c
+d 575 1 0 0 0
+c
+d 955 4 1 0 0
+c
+d 810 4 0 0 0
+c
+d 437 3 0 0 0
+c
+d 218 2 0 1 0
+c
+d 1241 4 1 0 0
+c
+d 1150 1 0 1 0
+c
+d 1153 2 0 1 0
+c
+d 791 4 1 0 0
+c
+d 1205 3 1 0 0
+c
+d 218 2 0 0 0
+c
+d 1243 1 1 0 0
+c
+d 211 1 0 0 0
+c
+d 215 1 0 0 0
+c
+d 199 3 1 0 0
+c
+d 108 4 1 0 0
+c
+d 591 1 0 0 0
+c
+d 602 1 0 0 0
+c
+d 157 3 1 0 0
+c
+d 568 2 0 1 0
+c
+d 570 1 0 1 0
+c
+d 146 1 0 1 0
+c
+d 292 1 0 0 0
+c
+d 1303 2 0 0 0
+c
+d 10 1 0 0 0
+c
+d 11 1 0 1 0
+c
+d 199 1 0 0 0
+c
+d 211 1 0 0 0
+c
+d 437 2 0 0 0
+c
+d 774 4 0 0 0
+c
+d 1 1 0 1 0
+c
+d 2 1 0 0 0
+c
+d 17 1 0 1 0
+c
+d 965 3 0 0 0
+c
+d 496 2 1 0 0
+c
+d 498 1 0 0 0
+c
+d 494 2 0 0 0
+c
+d 799 1 0 0 0
+c
+d 810 2 0 0 0
+c
+d 1196 2 1 0 0
+c
+d 301 3 0 0 0
+c
+d 979 3 0 0 0
+c
+d 599 2 0 0 0
+c
+d 494 1 0 0 0
+c
+d 496 2 1 0 0
+c
+d 831 3 1 0 0
+c
+d 598 2 0 0 0
+c
+d 353 2 0 2 0
+c
+d 618 3 0 0 0
+c
+d 810 2 0 1 0
+c
+d 62 3 1 0 0
+c
+d 551 2 0 0 0
+c
+d 93 1 0 0 0
+c
+d 96 1 0 0 0
+c
+d 656 2 0 0 0
+c
+d 199 3 1 0 0
+c
+d 965 2 0 0 0
+c
+d 701 3 0 0 0
+c
+d 602 2 0 0 0
+c
+d 977 2 0 0 0
+c
+d 981 1 0 0 0
+c
+d 12 2 0 0 0
+c
+d 1272 1 0 1 0
+c
+d 811 2 0 2 0
+c
+d 812 1 0 0 0
+c
+d 301 1 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 754 2 0 1 0
+c
+d 756 1 0 1 0
+c
+d 301 2 0 0 0
+c
+d 1115 2 0 0 0
+c
+d 91 3 0 2 0
+c
+d 211 2 0 0 0
+c
+d 602 2 0 0 0
+c
+d 599 2 0 0 0
+c
+d 437 3 0 2 0
+c
+d 452 1 1 0 0
+c
+d 453 2 0 0 0
+c
+d 153 2 0 0 0
+c
+d 155 1 0 0 0
+c
+d 304 2 0 1 0
+c
+d 305 1 1 0 0
+c
+d 16 4 0 0 0
+c
+d 18 1 0 1 0
+c
+d 93 2 0 1 0
+c
+d 311 3 0 0 0
+c
+d 647 1 0 0 0
+c
+d 649 2 1 0 0
+c
+d 225 3 0 2 0
+c
+d 2 2 0 0 0
+c
+d 16 1 0 0 0
+c
+d 833 1 0 0 0
+c
+d 881 2 1 0 0
+c
+d 195 1 0 0 0
+c
+d 205 1 0 0 0
+c
+d 91 2 1 0 0
+c
+d 1265 2 0 0 0
+c
+d 503 3 0 0 0
+c
+d 91 2 0 1 0
+c
+d 341 1 0 0 0
+c
+d 342 1 0 0 0
+c
+d 211 2 0 0 0
+c
+d 168 1 0 0 0
+c
+d 169 1 0 0 0
+c
+d 218 1 0 1 0
+c
+d 1235 1 0 1 0
+c
+d 242 3 0 1 0
+c
+d 400 1 1 0 0
+c
+d 409 1 0 0 0
+c
+d 410 2 0 0 0
+c
+d 565 1 0 0 0
+c
+d 1058 1 0 0 0
+c
+d 905 1 0 0 0
+c
+d 906 1 0 0 0
+c
+d 496 1 0 0 0
+c
+d 498 1 0 0 0
+c
+d 574 2 0 0 0
+c
+d 795 1 1 0 0
+c
+d 218 3 0 1 0
+c
+d 574 1 0 0 0
+c
+d 795 2 1 0 0
+c
+d 799 1 0 0 0
+c
+d 916 1 1 0 0
+c
+d 919 1 0 0 0
+c
+d 1150 1 0 0 0
+c
+d 1151 3 0 0 0
+c
+d 413 1 0 0 0
+c
+d 1087 2 1 0 0
+c
+d 437 1 0 0 0
+c
+d 445 1 0 0 0
+c
+d 1168 3 1 0 0
+c
+d 65 2 0 0 0
+c
+d 301 2 0 1 0
+c
+d 799 3 0 0 0
+c
+d 829 2 0 0 0
+c
+d 93 2 1 0 0
+c
+d 618 2 0 2 0
+c
+d 294 3 0 0 0
+c
+d 146 2 0 1 0
+c
+d 919 3 0 0 0
+c
+d 662 4 0 0 0
+c
+d 829 2 0 0 0
+c
+d 93 3 1 0 0
+c
+d 28 3 0 0 0
+c
+d 806 1 0 1 0
+c
+d 906 1 0 0 0
+c
+d 910 1 1 0 0
+c
+d 1090 2 0 1 0
+c
+d 60 3 0 1 0
+c
+d 16 5 1 0 0
+c
+d 83 4 1 0 0
+c
+d 89 2 0 2 0
+c
+d 278 2 0 0 0
+c
+d 279 1 1 0 0
+c
+d 278 3 0 0 0
+c
+d 279 1 0 0 0
+c
+d 159 2 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 1168 1 0 0 0
+c
+d 199 3 1 0 0
+c
+d 400 3 1 0 0
+c
+d 1156 2 0 1 0
+c
+d 1195 1 0 1 0
+c
+d 437 2 0 0 0
+c
+d 629 2 0 0 0
+c
+d 1087 3 0 0 0
+c
+d 457 3 1 0 0
+c
+d 577 3 0 1 0
+c
+d 753 2 0 0 0
+c
+d 1303 2 0 0 0
+c
+d 1304 1 0 0 0
+c
+d 419 4 0 2 0
+c
+d 835 2 0 0 0
+c
+d 900 1 0 1 0
+c
+d 204 4 1 0 0
+c
+d 143 3 0 0 0
+c
+d 621 2 0 0 0
+c
+d 676 2 0 0 0
+c
+d 677 1 0 0 0
+c
+d 100 3 0 1 0
+c
+d 51 3 0 0 0
+c
+d 437 3 0 0 0
+c
+d 148 1 0 1 0
+c
+d 232 1 0 0 0
+c
+d 234 1 0 1 0
+c
+d 1113 1 0 0 0
+c
+d 1116 1 0 0 0
+c
+d 799 1 0 0 0
+c
+d 919 1 0 0 0
+c
+d 602 3 0 2 0
+c
+d 498 3 1 0 0
+c
+d 162 1 0 0 0
+c
+d 163 1 0 0 0
+c
+d 278 1 0 0 0
+c
+d 279 1 0 0 0
+c
+d 69 1 0 1 0
+c
+d 650 1 0 1 0
+c
+d 152 2 0 0 0
+c
+d 278 1 0 0 0
+c
+d 280 1 0 0 0
+c
+d 75 1 0 0 0
+c
+d 1300 1 0 0 0
+c
+d 304 2 0 2 0
+c
+d 310 1 0 0 0
+c
+d 820 1 0 0 0
+c
+d 821 1 0 0 0
+c
+d 208 2 0 0 0
+c
+d 437 1 0 0 0
+c
+d 453 1 0 0 0
+c
+d 117 2 0 0 0
+c
+d 327 1 0 0 0
+c
+d 349 1 0 0 0
+c
+d 1165 3 0 1 0
+c
+d 111 1 0 0 0
+c
+d 146 2 1 0 0
+c
+d 470 1 0 0 0
+c
+d 477 2 0 0 0
+c
+d 599 2 0 0 0
+c
+d 93 1 0 0 0
+c
+d 1264 2 0 0 0
+c
+d 186 3 0 0 0
+c
+d 188 1 0 0 0
+c
+d 1008 3 1 0 0
+c
+d 208 4 1 0 0
+c
+d 156 1 0 1 0
+c
+d 157 1 0 1 0
+c
+d 155 2 0 1 0
+c
+d 787 2 0 0 0
+c
+d 661 1 0 0 0
+c
+d 662 1 0 0 0
+c
+d 215 1 0 0 0
+c
+d 223 1 0 0 0
+c
+d 737 2 0 0 0
+c
+d 400 2 0 1 0
+c
+d 200 3 0 1 0
+c
+d 1110 2 0 0 0
+c
+d 400 2 1 0 0
+c
+d 402 1 0 0 0
+c
+d 405 1 0 0 0
+c
+d 1235 3 0 0 0
+c
+d 965 2 0 0 0
+c
+d 101 2 0 0 0
+c
+d 575 3 0 0 0
+c
+d 444 1 0 1 0
+c
+d 446 2 0 1 0
+c
+d 826 3 1 0 0
+c
+d 1194 2 0 0 0
+c
+d 1195 1 1 0 0
+c
+d 218 2 0 2 0
+c
+d 799 4 0 0 0
+c
+d 280 2 0 1 0
+c
+d 196 3 0 0 0
+c
+d 663 2 0 2 0
+c
+d 19 2 0 0 0
+c
+d 1008 1 1 0 0
+c
+d 285 1 0 0 0
+c
+d 286 1 0 0 0
+c
+d 437 2 0 1 0
+c
+d 551 1 0 0 0
+c
+d 775 1 0 0 0
+c
+d 507 4 0 0 0
+c
+d 378 1 0 0 0
+c
+d 1111 1 0 0 0
+c
+d 221 3 0 2 0
+c
+d 479 2 0 0 0
+c
+d 60 1 1 0 0
+c
+d 72 2 0 0 0
+c
+d 965 2 1 0 0
+c
+d 970 2 0 0 0
+c
+d 153 1 0 0 0
+c
+d 155 1 0 0 0
+c
+d 152 2 0 0 0
+c
+d 153 1 1 0 0
+c
+d 172 2 1 0 0
+c
+d 173 1 0 0 0
+c
+d 67 3 1 0 0
+c
+d 178 3 1 0 0
+c
+d 829 2 0 1 0
+c
+d 835 1 0 1 0
+c
+d 738 1 0 0 0
+c
+d 743 2 0 2 0
+c
+d 301 1 1 0 0
+c
+d 304 1 0 0 0
+c
+d 1043 1 0 0 0
+c
+d 1045 2 1 0 0
+c
+d 384 2 0 0 0
+c
+d 1275 1 0 0 0
+c
+d 1277 3 0 0 0
+c
+d 756 1 0 1 0
+c
+d 763 1 0 1 0
+c
+d 445 1 0 1 0
+c
+d 447 2 0 1 0
+c
+d 487 3 1 0 0
+c
+d 797 1 0 0 0
+c
+d 929 1 0 0 0
+c
+d 166 1 0 0 0
+c
+d 395 1 0 0 0
+c
+d 835 1 0 0 0
+c
+d 836 2 1 0 0
+c
+d 65 3 0 2 0
+c
+d 162 4 1 0 0
+c
+d 437 1 0 1 0
+c
+d 470 1 0 1 0
+c
+d 1156 2 1 0 0
+c
+d 1214 1 0 0 0
+c
+d 582 3 0 2 0
+c
+d 89 1 0 0 0
+c
+d 1087 1 0 0 0
+c
+d 1093 1 0 0 0
+c
+d 1156 3 0 1 0
+c
+d 1237 3 1 0 0
+c
+d 878 2 0 1 0
+c
+d 881 1 0 1 0
+c
+d 262 3 0 0 0
+c
+d 846 2 0 0 0
+c
+d 847 1 0 0 0
+c
+d 19 1 0 0 0
+c
+d 21 1 1 0 0
+c
+d 1024 1 0 0 0
+c
+d 217 3 0 0 0
+c
+d 221 1 0 0 0
+c
+d 915 3 0 0 0
+c
+d 16 3 0 1 0
+c
+d 341 1 0 0 0
+c
+d 342 1 0 0 0
+c
+d 218 2 0 0 0
+c
+d 922 3 1 0 0
+c
+d 211 2 0 0 0
+c
+d 111 1 0 0 0
+c
+d 146 1 0 0 0
+c
+d 344 2 0 0 0
+c
+d 919 4 1 0 0
+c
+d 400 2 0 0 0
+c
+d 146 3 1 0 0
+c
+d 575 1 0 0 0
+c
+d 929 1 0 0 0
+c
+d 931 1 0 0 0
+c
+d 7 3 1 0 0
+c
+d 705 1 0 0 0
+c
+d 706 1 0 0 0
+c
+d 96 1 0 0 0
+c
+d 97 1 0 0 0
+c
+d 855 4 0 0 0
+c
+d 1017 3 1 0 0
+c
+d 423 2 0 0 0
+c
+d 429 1 0 0 0
+c
+d 704 2 0 0 0
+c
+d 286 1 0 0 0
+c
+d 292 1 0 1 0
+c
+d 5 2 1 0 0
+c
+d 10 1 0 0 0
+c
+d 650 2 0 0 0
+c
+d 795 1 0 0 0
+c
+d 820 2 1 0 0
+c
+d 556 1 0 1 0
+c
+d 557 1 0 1 0
+c
+d 1066 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 466 2 0 0 0
+c
+d 565 1 0 1 0
+c
+d 568 1 0 1 0
+c
+d 278 3 0 2 0
+c
+d 146 3 0 0 0
+c
+d 60 1 0 1 0
+c
+d 1011 3 0 1 0
+c
+d 480 3 0 1 0
+c
+d 485 1 0 0 0
+c
+d 965 1 0 0 0
+c
+d 966 1 0 0 0
+c
+d 673 2 0 0 0
+c
+d 674 1 0 0 0
+c
+d 829 4 1 0 0
+c
+d 279 1 0 0 0
+c
+d 1150 1 0 0 0
+c
+d 199 2 0 0 0
+c
+d 262 5 1 0 0
+c
+d 395 4 1 0 0
+c
+d 393 2 1 0 0
+c
+d 120 1 0 0 0
+c
+d 126 1 0 0 0
+c
+d 400 1 0 0 0
+c
+d 407 1 0 1 0
+c
+d 409 3 1 0 0
+c
+d 1096 2 0 0 0
+c
+d 1097 1 0 0 0
+c
+d 655 3 0 2 0
+c
+d 285 3 1 0 0
+c
+d 69 4 0 0 0
+c
+d 1177 1 0 0 0
+c
+d 1178 1 0 0 0
+c
+d 827 1 0 0 0
+c
+d 828 1 0 0 0
+c
+d 811 1 0 1 0
+c
+d 815 1 0 0 0
+c
+d 816 1 0 0 0
+c
+d 575 3 0 0 0
+c
+d 5 3 1 0 0
+c
+d 827 2 1 0 0
+c
+d 829 1 0 0 0
+c
+d 968 2 0 1 0
+c
+d 969 1 0 0 0
+c
+d 724 1 1 0 0
+c
+d 734 1 0 0 0
+c
+d 944 1 0 0 0
+c
+d 618 2 0 1 0
+c
+d 620 1 0 1 0
+c
+d 597 1 0 0 0
+c
+d 606 1 1 0 0
+c
+d 608 1 0 0 0
+c
+d 568 1 1 0 0
+c
+d 569 2 0 0 0
+c
+d 965 1 0 1 0
+c
+d 968 1 0 0 0
+c
+d 969 1 0 0 0
+c
+d 281 3 0 1 0
+c
+d 1087 2 0 2 0
+c
+d 1195 4 1 0 0
+c
+d 18 1 0 0 0
+c
+d 95 2 1 0 0
+c
+d 164 3 0 2 0
+c
+d 823 2 0 0 0
+c
+d 919 3 0 0 0
+c
+d 156 2 0 0 0
+c
+d 662 3 1 0 0
+c
+d 31 3 0 2 0
+c
+d 1158 3 1 0 0
+c
+d 1153 2 0 0 0
+c
+d 686 1 0 0 0
+c
+d 805 2 0 0 0
+c
+d 301 2 0 1 0
+c
+d 650 1 0 0 0
+c
+d 651 2 0 0 0
+c
+d 1172 2 0 0 0
+c
+d 199 1 0 0 0
+c
+d 208 1 0 0 0
+c
+d 495 3 0 0 0
+c
+d 686 3 1 0 0
+c
+d 1199 4 1 0 0
+c
+d 861 2 0 1 0
+c
+d 870 1 0 1 0
+c
+d 217 3 0 0 0
+c
+d 60 1 0 0 0
+c
+d 62 1 0 1 0
+c
+d 718 1 0 1 0
+c
+d 731 1 0 1 0
+c
+d 162 2 0 0 0
+c
+d 278 1 0 1 0
+c
+d 280 1 0 1 0
+c
+d 734 4 1 0 0
+c
+d 153 1 0 0 0
+c
+d 155 2 1 0 0
+c
+d 510 3 0 0 0
+c
+d 1170 2 0 0 0
+c
+d 7 2 0 0 0
+c
+d 1269 1 1 0 0
+c
+d 618 3 1 0 0
+c
+d 1185 3 1 0 0
+c
+d 835 2 0 0 0
+c
+d 836 1 1 0 0
+c
+d 511 3 0 0 0
+c
+d 559 3 1 0 0
+c
+d 393 1 0 0 0
+c
+d 395 1 0 0 0
+c
+d 407 1 1 0 0
+c
+d 152 1 0 1 0
+c
+d 1096 2 0 0 0
+c
+d 179 3 0 0 0
+c
+d 447 4 0 1 0
+c
+d 32 1 0 0 0
+c
+d 1318 1 0 0 0
+c
+d 1320 1 0 0 0
+c
+d 488 4 1 0 0
+c
+d 437 4 0 0 0
+c
+d 1170 2 0 0 0
+c
+d 54 2 0 0 0
+c
+d 212 2 0 0 0
+c
+d 19 1 1 0 0
+c
+d 1013 1 0 0 0
+c
+d 2 4 1 0 0
+c
+d 746 1 0 0 0
+c
+d 747 1 0 0 0
+c
+d 19 4 1 0 0
+c
+d 48 2 0 0 0
+c
+d 159 2 0 0 0
+c
+d 1020 2 0 0 0
+c
+d 1021 1 0 1 0
+c
+d 1224 3 0 0 0
+c
+d 93 2 0 0 0
+c
+d 578 1 1 0 0
+c
+d 956 1 0 0 0
+c
+d 958 2 0 0 0
+c
+d 162 1 0 0 0
+c
+d 164 2 0 0 0
+c
+d 65 1 0 1 0
+c
+d 1303 1 0 0 0
+c
+d 341 2 0 0 0
+c
+d 5 2 0 0 0
+c
+d 418 1 0 0 0
+c
+d 1087 1 0 0 0
+c
+d 622 1 0 1 0
+c
+d 1008 2 0 1 0
+c
+d 494 3 0 2 0
+c
+d 47 3 0 0 0
+c
+d 17 1 0 0 0
+c
+d 93 1 0 0 0
+c
+d 1170 2 0 0 0
+c
+d 582 3 0 0 0
+c
+d 69 1 0 1 0
+c
+d 70 1 0 0 0
+c
+d 650 1 0 0 0
+c
+d 341 1 0 1 0
+c
+d 423 1 0 0 0
+c
+d 470 1 0 1 0
+c
+d 763 2 0 0 0
+c
+d 768 1 0 0 0
+c
+d 51 3 1 0 0
+c
+d 608 2 0 1 0
+c
+d 618 1 0 1 0
+c
+d 965 1 0 1 0
+c
+d 973 2 0 1 0
+c
+d 926 3 1 0 0
+c
+d 1163 1 0 0 0
+c
+d 1165 2 0 0 0
+c
+d 378 2 0 0 0
+c
+d 344 2 1 0 0
+c
+d 345 1 0 0 0
+c
+d 217 2 0 1 0
+c
+d 225 1 0 1 0
+c
+d 1163 2 0 0 0
+c
+d 1165 1 0 1 0
+c
+d 662 1 0 0 0
+c
+d 671 1 0 1 0
+c
+d 672 1 0 0 0
+c
+d 156 1 0 1 0
+c
+d 157 2 0 1 0
+c
+d 602 2 0 0 0
+c
+d 1172 1 0 1 0
+c
+d 1185 2 0 1 0
+c
+d 621 4 0 0 0
+c
+d 419 2 0 0 0
+c
+d 95 1 0 1 0
+c
+d 1263 1 0 0 0
+c
+d 1264 1 0 0 0
+c
+d 185 1 1 0 0
+c
+d 196 2 0 0 0
+c
+d 926 4 1 0 0
+c
+d 348 2 0 0 0
+c
+d 407 1 1 0 0
+c
+d 418 2 0 0 0
+c
+d 18 4 1 0 0
+c
+d 156 1 0 1 0
+c
+d 162 1 0 0 0
+c
+d 163 1 0 0 0
+c
+d 1045 3 0 2 0
+c
+d 797 2 0 1 0
+c
+d 799 1 0 1 0
+c
+d 292 2 0 0 0
+c
+d 906 1 0 1 0
+c
+d 911 1 0 0 0
+c
+d 912 2 0 0 0
+c
+d 574 3 1 0 0
+c
+d 447 3 0 1 0
+c
+d 686 1 0 0 0
+c
+d 700 1 0 0 0
+c
+d 575 3 1 0 0
+c
+d 511 2 0 0 0
+c
+d 217 3 1 0 0
+c
+d 989 1 1 0 0
+c
+d 995 2 0 0 0
+c
+d 152 1 0 0 0
+c
+d 153 1 0 1 0
+c
+d 457 4 0 0 0
+c
+d 32 1 0 0 0
+c
+d 1315 1 0 0 0
+c
+d 1318 2 0 0 0
+c
+d 91 3 1 0 0
+c
+d 575 1 0 1 0
+c
+d 926 1 0 1 0
+c
+d 927 1 0 0 0
+c
+d 686 3 1 0 0
+c
+d 208 2 0 0 0
+c
+d 210 1 0 0 0
+c
+d 1012 1 0 0 0
+c
+d 1013 1 0 0 0
+c
+d 453 1 1 0 0
+c
+d 455 2 0 0 0
+c
+d 602 2 0 0 0
+c
+d 359 1 0 0 0
+c
+d 360 1 0 0 0
+c
+d 1299 1 1 0 0
+c
+d 1300 2 0 0 0
+c
+d 264 3 0 0 0
+c
+d 101 2 0 0 0
+c
+d 1093 1 0 0 0
+c
+d 284 1 0 0 0
+c
+d 285 1 0 0 0
+c
+d 444 3 1 0 0
+c
+d 629 2 0 0 0
+c
+d 51 1 1 0 0
+c
+d 52 2 0 0 0
+c
+d 400 3 1 0 0
+c
+d 6 1 0 0 0
+c
+d 12 1 0 0 0
+c
+d 592 2 0 0 0
+c
+d 52 1 0 0 0
+c
+d 1303 2 0 0 0
+c
+d 118 4 1 0 0
+c
+d 211 1 0 0 0
+c
+d 212 1 0 0 0
+c
+d 574 2 0 0 0
+c
+d 146 1 0 0 0
+c
+d 294 2 0 0 0
+c
+d 457 2 0 0 0
+c
+d 301 3 1 0 0
+c
+d 791 1 0 0 0
+c
+d 829 1 1 0 0
+c
+d 832 1 0 0 0
+c
+d 419 3 0 0 0
+c
+d 301 2 1 0 0
+c
+d 1157 1 0 0 0
+c
+d 18 3 0 1 0
+c
+d 78 1 0 0 0
+c
+d 79 1 0 1 0
+c
+d 81 1 0 0 0
+c
+d 217 2 1 0 0
+c
+d 241 1 0 0 0
+c
+d 660 2 0 0 0
+c
+d 662 1 0 0 0
+c
+d 101 2 0 0 0
+c
+d 418 2 0 0 0
+c
+d 457 4 1 0 0
+c
+d 659 4 1 0 0
+c
+d 402 1 0 0 0
+c
+d 403 1 0 0 0
+c
+d 404 1 0 0 0
+c
+d 60 3 0 0 0
+c
+d 56 1 0 0 0
+c
+d 65 1 0 0 0
+c
+d 1303 1 0 0 0
+c
+d 463 2 0 0 0
+c
+d 246 1 1 0 0
+c
+d 262 1 0 0 0
+c
+d 861 1 0 0 0
+c
+d 863 1 0 0 0
+c
+d 338 2 0 0 0
+c
+d 167 3 0 0 0
+c
+d 49 1 0 0 0
+c
+d 57 1 0 0 0
+c
+d 188 3 1 0 0
+c
+d 1165 3 1 0 0
+c
+d 242 2 0 0 0
+c
+d 1111 1 0 1 0
+c
+d 1115 2 0 1 0
+c
+d 46 2 1 0 0
+c
+d 48 1 1 0 0
+c
+d 734 1 0 0 0
+c
+d 939 1 0 0 0
+c
+d 7 2 0 1 0
+c
+d 795 2 0 1 0
+c
+d 807 1 0 1 0
+c
+d 1185 1 0 0 0
+c
+d 1186 1 0 0 0
+c
+d 799 1 0 1 0
+c
+d 811 2 0 1 0
+c
+d 153 1 0 0 0
+c
+d 155 1 0 0 0
+c
+d 1185 1 0 1 0
+c
+d 1192 1 0 1 0
+c
+d 602 3 1 0 0
+c
+d 623 2 0 0 0
+c
+d 624 1 0 0 0
+c
+d 268 2 0 0 0
+c
+d 282 1 0 0 0
+c
+d 96 4 1 0 0
+c
+d 763 2 0 1 0
+c
+d 974 3 1 0 0
+c
+d 90 2 0 0 0
+c
+d 91 1 0 0 0
+c
+d 21 3 1 0 0
+c
+d 662 2 0 0 0
+c
+d 392 1 0 0 0
+c
+d 1127 1 0 0 0
+c
+d 437 4 0 2 0
+c
+d 919 1 0 0 0
+c
+d 924 1 0 0 0
+c
+d 419 3 1 0 0
+c
+d 144 1 0 0 0
+c
+d 145 1 0 0 0
+c
+d 377 1 0 0 0
+c
+d 1134 1 0 0 0
+c
+d 661 1 0 1 0
+c
+d 669 2 0 0 0
+c
+d 572 2 0 0 0
+c
+d 574 1 0 0 0
+c
+d 705 2 1 0 0
+c
+d 710 1 0 0 0
+c
+d 767 3 1 0 0
+c
+d 511 4 1 0 0
+c
+d 272 3 0 0 0
+c
+d 602 2 0 0 0
+c
+d 217 2 0 2 0
+c
+d 748 1 0 1 0
+c
+d 749 1 0 0 0
+c
+d 752 1 0 1 0
+c
+d 157 1 0 0 0
+c
+d 178 1 0 0 0
+c
+d 294 3 0 0 0
+c
+d 261 1 1 0 0
+c
+d 284 2 0 0 0
+c
+d 511 3 1 0 0
+c
+d 69 2 1 0 0
+c
+d 650 1 0 0 0
+c
+d 977 3 0 1 0
+c
+d 477 3 1 0 0
+c
+d 855 2 0 0 0
+c
+d 21 1 0 0 0
+c
+d 28 1 0 1 0
+c
+d 29 1 0 1 0
+c
+d 1269 4 1 0 0
+c
+d 7 2 1 0 0
+c
+d 1266 1 0 0 0
+c
+d 904 3 0 0 0
+c
+d 437 2 0 2 0
+c
+d 453 1 0 0 0
+c
+d 1156 4 0 0 0
+c
+d 205 3 1 0 0
+c
+d 906 1 0 0 0
+c
+d 910 1 0 0 0
+c
+d 572 1 0 0 0
+c
+d 574 1 0 0 0
+c
+d 205 1 1 0 0
+c
+d 208 1 0 0 0
+c
+d 211 1 0 0 0
+c
+d 1110 4 0 0 0
+c
+d 629 3 1 0 0
+c
+d 437 3 0 0 0
+c
+d 9 2 0 1 0
+c
+d 791 2 0 0 0
+c
+d 166 2 0 0 0
+c
+d 268 4 0 0 0
+c
+d 176 2 0 0 0
+c
+d 177 1 1 0 0
+c
+d 157 2 0 0 0
+c
+d 494 1 0 1 0
+c
+d 495 2 0 1 0
+c
+d 498 3 1 0 0
+c
+d 48 2 0 0 0
+c
+d 829 3 1 0 0
+c
+d 626 1 0 1 0
+c
+d 627 1 0 0 0
+c
+d 650 3 1 0 0
+c
+d 199 3 1 0 0
+c
+d 738 2 0 1 0
+c
+d 750 1 0 0 0
+c
+d 673 1 0 0 0
+c
+d 676 1 0 0 0
+c
+d 218 2 0 0 0
+c
+d 219 1 0 0 0
+c
+d 196 1 0 1 0
+c
+d 200 2 0 1 0
+c
+d 641 1 0 0 0
+c
+d 642 2 1 0 0
+c
+d 437 1 0 0 0
+c
+d 439 1 0 0 0
+c
+d 78 2 0 0 0
+c
+d 81 1 1 0 0
+c
+d 83 1 0 0 0
+c
+d 591 3 1 0 0
+c
+d 153 3 1 0 0
+c
+d 565 4 1 0 0
+c
+d 1008 1 0 0 0
+c
+d 1013 1 0 0 0
+c
+d 1202 2 0 0 0
+c
+d 301 4 1 0 0
+c
+d 311 2 0 0 0
+c
+d 418 3 1 0 0
+c
+d 455 2 0 0 0
+c
+d 199 1 0 0 0
+c
+d 211 1 0 0 0
+c
+d 638 4 0 0 0
+c
+d 59 1 0 0 0
+c
+d 1011 2 0 0 0
+c
+d 437 4 1 0 0
+c
+d 153 1 0 1 0
+c
+d 155 2 0 1 0
+c
+d 835 2 0 0 0
+c
+d 1168 2 1 0 0
+c
+d 1169 1 0 0 0
+c
+d 156 3 1 0 0
+c
+d 575 3 0 0 0
+c
+d 359 1 0 0 0
+c
+d 360 1 0 0 0
+c
+d 1097 2 0 1 0
+c
+d 89 2 1 0 0
+c
+d 119 1 0 0 0
+c
+d 437 2 0 0 0
+c
+d 62 3 1 0 0
+c
+d 152 3 1 0 0
+c
+d 1009 1 0 0 0
+c
+d 1012 1 0 0 0
+c
+d 156 1 0 0 0
+c
+d 163 1 0 0 0
+c
+d 859 3 1 0 0
+c
+d 16 2 0 0 0
+c
+d 48 2 0 0 0
+c
+d 437 2 0 1 0
+c
+d 1047 1 0 1 0
+c
+d 284 2 0 1 0
+c
+d 821 1 0 0 0
+c
+d 822 1 0 0 0
+c
+d 263 1 0 0 0
+c
+d 264 1 0 1 0
+c
+d 283 1 0 1 0
+c
+d 96 3 0 0 0
+c
+d 19 2 0 0 0
+c
+d 666 4 1 0 0
+c
+d 615 3 1 0 0
+c
+d 457 2 1 0 0
+c
+d 463 1 0 0 0
+c
+d 155 1 1 0 0
+c
+d 176 2 0 0 0
+c
+d 156 1 1 0 0
+c
+d 166 1 0 0 0
+c
+d 400 1 0 0 0
+c
+d 751 1 0 1 0
+c
+d 752 2 0 1 0
+c
+d 185 4 1 0 0
+c
+d 479 3 0 0 0
+c
+d 52 2 0 2 0
+c
+d 748 2 0 0 0
+c
+d 630 1 0 0 0
+c
+d 660 1 0 0 0
+c
+d 487 1 0 0 0
+c
+d 488 2 1 0 0
+c
+d 186 1 0 0 0
+c
+d 187 1 0 0 0
+c
+d 188 2 0 0 0
+c
+d 477 1 0 1 0
+c
+d 478 1 0 0 0
+c
+d 574 4 0 2 0
+c
+d 207 1 0 0 0
+c
+d 1245 1 0 0 0
+c
+d 737 2 1 0 0
+c
+d 738 1 0 0 0
+c
+d 49 1 0 1 0
+c
+d 50 2 0 1 0
+c
+d 164 3 0 2 0
+c
+d 738 2 0 0 0
+c
+d 1110 3 0 0 0
+c
+d 156 1 0 0 0
+c
+d 157 2 0 2 0
+c
+d 283 4 1 0 0
+c
+d 597 4 0 0 0
+c
+d 599 4 1 0 0
+c
+d 907 4 0 0 0
+c
+d 919 1 0 0 0
+c
+d 921 1 0 0 0
+c
+d 21 3 1 0 0
+c
+d 393 3 1 0 0
+c
+d 650 1 0 0 0
+c
+d 655 2 0 0 0
+c
+d 75 3 0 0 0
+c
+d 981 4 1 0 0
+c
+d 1169 1 1 0 0
+c
+d 1170 2 0 0 0
+c
+d 477 2 1 0 0
+c
+d 479 1 0 0 0
+c
+d 862 1 0 1 0
+c
+d 863 1 0 1 0
+c
+d 662 1 0 0 0
+c
+d 666 1 0 0 0
+c
+d 1017 2 0 0 0
+c
+d 1018 1 1 0 0
+c
+d 156 1 0 0 0
+c
+d 163 2 1 0 0
+c
+d 90 1 0 0 0
+c
+d 91 1 0 0 0
+c
+d 457 3 0 0 0
+c
+d 146 1 1 0 0
+c
+d 148 1 0 0 0
+c
+d 152 3 1 0 0
+c
+d 578 3 0 2 0
+c
+d 49 2 1 0 0
+c
+d 50 1 0 0 0
+c
+d 96 1 0 0 0
+c
+d 111 2 0 0 0
+c
+d 277 4 1 0 0
+c
+d 304 1 0 0 0
+c
+d 311 1 0 0 0
+c
+d 1022 4 0 2 0
+c
+d 195 3 1 0 0
+c
+d 799 2 0 1 0
+c
+d 810 1 0 1 0
+c
+d 829 3 0 0 0
+c
+d 341 2 0 0 0
+c
+d 160 4 1 0 0
+c
+d 18 1 0 0 0
+c
+d 990 1 0 0 0
+c
+d 208 1 0 0 0
+c
+d 1245 1 0 0 0
+c
+d 334 3 0 0 0
+c
+d 876 3 0 0 0
+c
+d 457 4 0 0 0
+c
+d 111 1 0 1 0
+c
+d 146 2 0 1 0
+c
+d 1168 2 0 0 0
+c
+d 1177 1 0 0 0
+c
+d 51 1 0 1 0
+c
+d 57 1 0 1 0
+c
+d 93 2 0 0 0
+c
+d 95 1 0 0 0
+c
+d 199 2 1 0 0
+c
+d 419 2 0 0 0
+c
+d 420 1 0 0 0
+c
+d 199 1 0 1 0
+c
+d 211 2 0 1 0
+c
+d 1278 1 0 1 0
+c
+d 1282 2 0 1 0
+c
+d 1303 1 0 1 0
+c
+d 1304 1 0 1 0
+c
+d 659 4 0 0 0
+c
+d 301 3 1 0 0
+c
+d 242 2 1 0 0
+c
+d 246 1 0 0 0
+c
+d 91 1 0 0 0
+c
+d 1265 1 0 0 0
+c
+d 1170 2 1 0 0
+c
+d 1184 1 0 0 0
+c
+d 437 2 0 0 0
+c
+d 111 1 0 1 0
+c
+d 146 2 0 0 0
+c
+d 598 1 0 0 0
+c
+d 599 1 0 0 0
+c
+d 1163 3 0 2 0
+c
+d 153 1 0 0 0
+c
+d 155 2 1 0 0
+c
+d 534 2 0 1 0
+c
+d 990 1 0 1 0
+c
+d 994 2 0 1 0
+c
+d 650 1 0 0 0
+c
+d 661 1 0 0 0
+c
+d 48 1 0 0 0
+c
+d 49 1 0 0 0
+c
+d 156 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 615 2 1 0 0
+c
+d 616 1 0 0 0
+c
+d 96 1 0 0 0
+c
+d 99 1 0 0 0
+c
+d 738 3 0 0 0
+c
+d 221 2 0 1 0
+c
+d 223 3 1 0 0
+c
+d 511 1 0 0 0
+c
+d 516 2 0 0 0
+c
+d 146 2 1 0 0
+c
+d 1098 1 0 0 0
+c
+d 93 2 0 0 0
+c
+d 622 3 1 0 0
+c
+d 621 1 0 1 0
+c
+d 623 2 0 1 0
+c
+d 5 1 1 0 0
+c
+d 18 1 0 0 0
+c
+d 1266 4 0 0 0
+c
+d 496 1 0 0 0
+c
+d 498 1 0 1 0
+c
+d 499 1 0 1 0
+c
+d 830 1 0 0 0
+c
+d 831 1 1 0 0
+c
+d 911 2 1 0 0
+c
+d 912 1 0 0 0
+c
+d 1110 3 1 0 0
+c
+d 111 3 0 1 0
+c
+d 113 1 0 0 0
+c
+d 487 2 0 0 0
+c
+d 488 1 0 0 0
+c
+d 55 2 1 0 0
+c
+d 66 1 0 0 0
+c
+d 437 3 1 0 0
+c
+d 795 1 1 0 0
+c
+d 807 1 0 0 0
+c
+d 829 2 0 0 0
+c
+d 199 1 0 0 0
+c
+d 200 2 0 1 0
+c
+d 211 4 0 0 0
+c
+d 608 2 0 0 0
+c
+d 622 3 0 0 0
+c
+d 516 2 0 0 0
+c
+d 829 3 0 2 0
+c
+d 132 2 0 0 0
+c
+d 1257 1 0 1 0
+c
+d 623 2 1 0 0
+c
+d 624 1 0 0 0
+c
+d 443 1 0 0 0
+c
+d 445 2 1 0 0
+c
+d 1194 1 0 1 0
+c
+d 1205 2 0 0 0
+c
+d 610 1 0 0 0
+c
+d 612 1 0 0 0
+c
+d 613 1 0 0 0
+c
+d 574 3 0 2 0
+c
+d 734 3 0 0 0
+c
+d 1201 2 0 0 0
+c
+d 1 1 0 0 0
+c
+d 17 2 0 0 0
+c
+d 1195 2 0 2 0
+c
+d 101 1 0 0 0
+c
+d 111 1 1 0 0
+c
+d 112 1 0 0 0
+c
+d 965 2 0 1 0
+c
+d 92 1 0 0 0
+c
+d 118 2 0 0 0
+c
+d 925 3 1 0 0
+c
+d 755 3 1 0 0
+c
+d 100 1 0 1 0
+c
+d 990 1 0 1 0
+c
+d 1004 2 0 0 0
+c
+d 625 2 0 1 0
+c
+d 164 1 1 0 0
+c
+d 167 2 0 0 0
+c
+d 262 4 1 0 0
+c
+d 505 1 1 0 0
+c
+d 506 2 0 0 0
+c
+d 1096 4 0 0 0
+c
+d 152 3 1 0 0
+c
+d 1156 2 1 0 0
+c
+d 51 2 0 0 0
+c
+d 1 1 0 0 0
+c
+d 2 1 1 0 0
+c
+d 1 3 1 0 0
+c
+d 340 2 0 0 0
+c
+d 926 3 1 0 0
+c
+d 242 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 268 1 0 1 0
+c
+d 269 2 0 1 0
+c
+d 437 1 0 0 0
+c
+d 558 1 0 0 0
+c
+d 1163 2 0 2 0
+c
+d 572 2 0 0 0
+c
+d 1055 1 0 0 0
+c
+d 156 2 0 0 0
+c
+d 785 1 0 0 0
+c
+d 786 1 0 1 0
+c
+d 1156 3 0 0 0
+c
+d 1110 4 1 0 0
+c
+d 1 1 0 0 0
+c
+d 1322 1 0 0 0
+c
+d 278 2 0 0 0
+c
+d 280 1 1 0 0
+c
+d 826 3 1 0 0
+c
+d 146 1 1 0 0
+c
+d 238 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 558 1 0 0 0
+c
+d 225 2 0 0 0
+c
+d 195 4 1 0 0
+c
+d 204 2 0 0 0
+c
+d 1168 1 0 0 0
+c
+d 1177 1 0 0 0
+c
+d 1179 1 0 0 0
+c
+d 499 1 0 0 0
+c
+d 500 1 0 0 0
+c
+d 205 3 0 2 0
+c
+d 50 3 0 1 0
+c
+d 157 2 0 0 0
+c
+d 101 2 1 0 0
+c
+d 108 1 0 0 0
+c
+d 823 1 0 0 0
+c
+d 827 1 0 0 0
+c
+d 1008 2 0 0 0
+c
+d 437 2 0 0 0
+c
+d 101 1 1 0 0
+c
+d 111 2 0 0 0
+c
+d 277 3 0 0 0
+c
+d 1304 2 0 0 0
+c
+d 656 2 1 0 0
+c
+d 657 2 0 0 0
+c
+d 650 3 1 0 0
+c
+d 168 1 0 1 0
+c
+d 1110 1 0 1 0
+c
+d 1112 1 0 0 0
+c
+d 608 2 0 1 0
+c
+d 799 1 0 0 0
+c
+d 806 2 1 0 0
+c
+d 610 3 1 0 0
+c
+d 737 2 0 0 0
+c
+d 77 2 0 0 0
+c
+d 1270 2 0 1 0
+c
+d 1271 1 0 0 0
+c
+d 618 2 0 0 0
+c
+d 621 1 1 0 0
+c
+d 50 1 0 0 0
+c
+d 51 1 0 0 0
+c
+d 810 3 0 2 0
+c
+d 1017 2 0 0 0
+c
+d 1019 1 0 1 0
+c
+d 353 2 0 0 0
+c
+d 195 1 0 0 0
+c
+d 205 1 0 0 0
+c
+d 185 2 0 0 0
+c
+d 511 2 0 0 0
+c
+d 520 1 1 0 0
+c
+d 591 3 0 0 0
+c
+d 638 3 0 1 0
+c
+d 155 1 0 0 0
+c
+d 156 1 0 0 0
+c
+d 734 2 0 0 0
+c
+d 146 3 1 0 0
+c
+d 93 2 0 0 0
+c
+d 2 2 0 2 0
+c
+d 46 3 1 0 0
+c
+d 606 4 1 0 0
+c
+d 395 1 0 1 0
+c
+d 396 1 0 1 0
+c
+d 95 3 1 0 0
+c
+d 915 2 0 0 0
+c
+d 916 1 0 0 0
+c
+d 599 3 0 0 0
+c
+d 642 2 0 0 0
+c
+d 437 3 0 0 0
+c
+d 442 1 0 0 0
+c
+d 384 2 0 0 0
+c
+d 385 1 1 0 0
+c
+d 146 1 0 0 0
+c
+d 294 2 0 0 0
+c
+d 1150 3 0 1 0
+c
+d 304 1 0 0 0
+c
+d 308 1 0 0 0
+c
+d 382 1 0 0 0
+c
+d 384 1 0 0 0
+c
+d 385 1 1 0 0
+c
+d 1195 3 0 1 0
+c
+d 618 4 0 0 0
+c
+d 266 2 0 0 0
+c
+d 267 1 0 0 0
+c
+d 502 1 0 0 0
+c
+d 505 1 0 0 0
+c
+d 264 3 0 0 0
+c
+d 93 2 0 0 0
+c
+d 369 1 0 0 0
+c
+d 382 1 0 0 0
+c
+d 623 3 1 0 0
+c
+d 217 1 1 0 0
+c
+d 221 2 0 0 0
+c
+d 934 4 1 0 0
+c
+d 156 3 0 0 0
+c
+d 19 1 1 0 0
+c
+d 1008 2 0 0 0
+c
+d 1107 1 1 0 0
+c
+d 1109 1 0 0 0
+c
+d 1110 1 0 0 0
+c
+d 662 4 0 0 0
+c
+d 1110 2 0 1 0
+c
+d 767 1 0 0 0
+c
+d 768 2 0 2 0
+c
+d 591 2 1 0 0
+c
+d 593 1 0 0 0
+c
+d 1192 2 1 0 0
+c
+d 1194 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 493 2 0 0 0
+c
+d 340 3 0 0 0
+c
+d 437 2 1 0 0
+c
+d 451 2 0 0 0
+c
+d 623 3 0 0 0
+c
+d 496 1 0 0 0
+c
+d 498 2 1 0 0
+c
+d 578 1 0 1 0
+c
+d 686 1 0 1 0
+c
+d 1110 4 1 1 0
+c
+d 1163 1 1 0 0
+c
+d 1165 2 0 0 0
+c
+d 96 1 0 0 0
+c
+d 111 1 1 0 0
+c
+d 142 1 0 0 0
+c
+d 990 1 1 0 0
+c
+d 992 2 0 0 0
+c
+d 84 2 0 1 0
+c
+d 60 3 1 0 0
+c
+d 1023 2 0 0 0
+c
+d 1024 1 1 0 0
+c
+d 348 1 0 0 0
+c
+d 352 1 0 0 0
+c
+d 50 1 0 0 0
+c
+d 51 1 0 0 0
+c
+d 992 3 1 0 0
+c
+d 213 1 0 0 0
+c
+d 242 1 0 0 0
+c
+d 61 1 0 1 0
+c
+d 65 2 0 1 0
+c
+d 574 2 0 1 0
+c
+d 439 2 0 0 0
+c
+d 440 1 0 0 0
+c
+d 634 2 0 1 0
+c
+d 635 1 0 1 0
+c
+d 737 2 0 0 0
+c
+d 457 2 1 0 0
+c
+d 89 2 1 0 0
+c
+d 1266 1 0 0 0
+c
+d 446 1 0 0 0
+c
+d 447 2 1 0 0
+c
+d 965 1 0 0 0
+c
+d 977 2 0 0 0
+c
+d 591 1 0 0 0
+c
+d 597 2 0 0 0
+c
+d 148 1 0 0 0
+c
+d 259 1 0 0 0
+c
+d 659 3 0 0 0
+c
+d 1315 1 0 0 0
+c
+d 1316 1 0 0 0
+c
+d 611 1 0 0 0
+c
+d 990 1 0 0 0
+c
+d 18 2 0 0 0
+c
+d 1263 1 1 0 0
+c
+d 120 1 0 0 0
+c
+d 121 1 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 1192 2 0 0 0
+c
+d 1010 4 1 0 0
+c
+d 616 3 0 1 0
+c
+d 211 3 0 0 0
+c
+d 51 4 0 0 0
+c
+d 344 2 0 0 0
+c
+d 19 2 0 0 0
+c
+d 264 4 0 0 0
+c
+d 341 2 1 0 0
+c
+d 342 1 0 0 0
+c
+d 1045 4 1 0 0
+c
+d 26 4 0 2 0
+c
+d 213 2 0 0 0
+c
+d 1156 2 0 0 0
+c
+d 155 1 0 1 0
+c
+d 156 1 0 1 0
+c
+d 823 1 0 0 0
+c
+d 825 1 0 1 0
+c
+d 826 1 1 0 0
+c
+d 46 1 0 1 0
+c
+d 74 2 0 1 0
+c
+d 78 4 1 0 0
+c
+d 907 2 1 0 0
+c
+d 908 1 0 0 0
+c
+d 1090 2 0 1 0
+c
+d 1008 2 0 0 0
+c
+d 217 2 1 0 0
+c
+d 221 1 0 0 0
+c
+d 7 3 0 2 0
+c
+d 392 3 1 0 0
+c
+d 919 1 1 0 0
+c
+d 922 1 0 0 0
+c
+d 923 1 0 0 0
+c
+d 183 1 0 1 0
+c
+d 192 1 0 1 0
+c
+d 193 1 0 0 0
+c
+d 46 2 0 0 0
+c
+d 457 3 1 0 0
+c
+d 192 1 1 0 0
+c
+d 193 2 0 0 0
+c
+d 294 4 1 0 0
+c
+d 269 4 1 0 0
+c
+d 494 3 1 0 0
+c
+d 1133 3 1 0 0
+c
+d 1097 2 0 1 0
+c
+d 1177 1 0 1 0
+c
+d 1178 2 0 0 0
+c
+d 437 1 0 0 0
+c
+d 453 1 0 0 0
+c
+d 606 2 0 0 0
+c
+d 50 3 1 0 0
+c
+d 473 3 1 0 0
+c
+d 419 1 0 0 0
+c
+d 423 2 0 0 0
+c
+d 418 1 1 0 0
+c
+d 1087 2 0 0 0
+c
+d 96 2 0 0 0
+c
+d 521 1 0 0 0
+c
+d 522 1 0 0 0
+c
+d 608 2 0 0 0
+c
+d 60 3 0 0 0
+c
+d 164 3 0 2 0
+c
+d 152 1 0 0 0
+c
+d 1096 1 0 0 0
+c
+d 132 4 0 1 0
+c
+d 195 2 0 2 0
+c
+d 795 1 0 0 0
+c
+d 818 1 0 0 0
+c
+d 737 3 0 0 0
+c
+d 211 2 0 0 0
+c
+d 454 1 0 0 0
+c
+d 455 1 0 0 0
+c
+d 615 3 0 1 0
+c
+d 171 1 0 1 0
+c
+d 172 1 0 0 0
+c
+d 89 4 0 1 0
+c
+d 218 2 0 0 0
+c
+d 95 1 1 0 0
+c
+d 96 2 0 0 0
+c
+d 91 1 0 1 0
+c
+d 92 1 0 0 0
+c
+d 400 2 0 1 0
+c
+d 401 1 0 0 0
+c
+d 221 2 0 2 0
+c
+d 775 2 0 0 0
+c
+d 500 1 0 0 0
+c
+d 502 2 0 0 0
+c
+d 1300 1 0 0 0
+c
+d 1301 3 0 0 0
+c
+d 305 3 0 2 0
+c
+d 753 2 0 0 0
+c
+d 419 1 0 0 0
+c
+d 422 1 0 0 0
+c
+d 663 1 0 0 0
+c
+d 680 1 0 0 0
+c
+d 965 2 1 0 0
+c
+d 968 1 0 0 0
+c
+d 410 4 1 0 0
+c
+d 146 1 0 0 0
+c
+d 151 1 1 0 0
+c
+d 311 2 0 0 0
+c
+d 327 1 0 0 0
+c
+d 836 2 0 0 0
+c
+d 837 1 1 0 0
+c
+d 69 1 0 0 0
+c
+d 649 1 0 0 0
+c
+d 437 4 1 0 0
+c
+d 511 2 0 0 0
+c
+d 618 2 0 0 0
+c
+d 619 1 0 0 0
+c
+d 796 2 0 0 0
+c
+d 797 1 0 1 0
+c
+d 1184 1 0 0 0
+c
+d 1185 1 0 1 0
+c
+d 1199 1 0 1 0
+c
+d 272 3 1 0 0
+c
+d 101 1 0 0 0
+c
+d 108 2 1 0 0
+c
+d 2 1 0 0 0
+c
+d 16 1 0 0 0
+c
+d 217 3 1 0 0
+c
+d 49 1 0 0 0
+c
+d 50 1 0 0 0
+c
+d 93 3 1 0 0
+c
+d 1087 2 1 0 0
+c
+d 1089 2 0 0 0
+c
+d 90 2 1 0 0
+c
+d 91 1 0 0 0
+c
+d 572 4 0 2 0
+c
+d 359 4 1 0 0
+c
+d 1185 3 0 1 0
+c
+d 44 3 1 0 0
+c
+d 499 1 0 0 0
+c
+d 500 1 0 0 0
+c
+d 437 1 1 0 0
+c
+d 466 2 0 0 0
+c
+d 1309 4 0 2 0
+c
+d 574 4 0 1 0
+c
+d 594 2 0 0 0
+c
+d 790 3 0 2 0
+c
+d 437 4 1 0 0
+c
+d 551 1 0 0 0
+c
+d 784 1 0 0 0
+c
+d 215 2 0 0 0
+c
+d 221 1 0 0 0
+c
+d 16 2 0 1 0
+c
+d 93 1 0 1 0
+c
+d 908 3 0 0 0
+c
+d 826 1 0 0 0
+c
+d 827 2 1 0 0
+c
+d 622 3 0 0 0
+c
+d 610 1 0 1 0
+c
+d 990 1 0 0 0
+c
+d 1004 1 0 0 0
+c
+d 900 4 0 1 0
+c
+d 29 4 0 0 0
+c
+d 1098 3 1 0 0
+c
+d 763 2 0 0 0
+c
+d 753 1 0 0 0
+c
+d 755 1 0 1 0
+c
+d 146 1 0 1 0
+c
+d 148 1 0 1 0
+c
+d 234 1 0 0 0
+c
+d 769 4 1 0 0
+c
+d 907 3 1 0 0
+c
+d 61 2 1 0 0
+c
+d 278 1 0 0 0
+c
+d 1170 2 1 0 0
+c
+d 400 1 0 0 0
+c
+d 410 1 0 0 0
+c
+d 5 2 0 1 0
+c
+d 457 3 1 0 0
+c
+d 301 2 1 0 0
+c
+d 1157 1 0 0 0
+c
+d 1298 3 0 0 0
+c
+d 283 2 0 0 0
+c
+d 284 1 0 0 0
+c
+d 51 1 0 0 0
+c
+d 57 2 0 0 0
+c
+d 572 1 0 0 0
+c
+d 574 1 0 0 0
+c
+d 1054 1 0 0 0
+c
+d 529 1 0 0 0
+c
+d 540 1 0 0 0
+c
+d 543 2 0 0 0
+c
+d 341 2 0 0 0
+c
+d 796 1 0 1 0
+c
+d 797 1 0 1 0
+c
+d 186 1 1 0 0
+c
+d 213 2 0 0 0
+c
+d 686 2 0 2 0
+c
+d 44 1 0 1 0
+c
+d 46 1 0 0 0
+c
+d 59 1 1 0 0
+c
+d 564 3 0 0 0
+c
+d 577 1 0 1 0
+c
+d 578 2 0 1 0
+c
+d 328 3 1 0 0
+c
+d 19 2 0 0 0
+c
+d 1008 2 0 0 0
+c
+d 796 1 0 0 0
+c
+d 815 1 0 0 0
+c
+d 163 1 0 0 0
+c
+d 173 1 0 0 0
+c
+d 1021 1 0 0 0
+c
+d 1022 2 1 0 0
+c
+d 378 1 0 1 0
+c
+d 1111 2 0 1 0
+c
+d 46 3 0 0 0
+c
+d 146 1 0 0 0
+c
+d 152 2 0 0 0
+c
+d 829 2 0 1 0
+c
+d 835 1 0 1 0
+c
+d 101 1 0 1 0
+c
+d 111 1 0 0 0
+c
+d 1262 1 0 1 0
+c
+d 870 1 0 0 0
+c
+d 871 1 0 0 0
+c
+d 557 1 0 0 0
+c
+d 1060 1 0 0 0
+c
+d 578 2 0 0 0
+c
+d 205 1 0 0 0
+c
+d 206 1 0 0 0
+c
+d 16 3 1 0 0
+c
+d 690 4 0 0 0
+c
+d 574 3 1 0 0
+c
+d 820 2 0 1 0
+c
+d 821 1 0 0 0
+c
+d 185 1 0 0 0
+c
+d 199 2 0 0 0
+c
+d 101 1 0 0 0
+c
+d 608 2 0 0 0
+c
+d 93 1 0 1 0
+c
+d 96 1 0 0 0
+c
+d 142 1 0 1 0
+c
+d 753 3 1 0 0
+c
+d 437 3 0 0 0
+c
+d 152 2 0 1 0
+c
+d 193 1 0 1 0
+c
+d 195 2 0 1 0
+c
+d 796 1 0 0 0
+c
+d 815 1 0 0 0
+c
+d 775 1 0 0 0
+c
+d 784 1 0 0 0
+c
+d 100 1 0 0 0
+c
+d 101 2 0 0 0
+c
+d 157 1 0 1 0
+c
+d 178 1 0 0 0
+c
+d 369 1 0 0 0
+c
+d 382 1 0 0 0
+c
+d 418 2 0 0 0
+c
+d 826 1 0 1 0
+c
+d 827 1 0 1 0
+c
+d 591 3 1 0 0
+c
+d 18 1 0 0 0
+c
+d 93 1 0 0 0
+c
+d 60 4 0 1 0
+c
+d 602 3 1 0 0
+c
+d 152 4 0 0 0
+c
+d 1185 2 0 0 0
+c
+d 1186 1 1 0 0
+c
+d 120 3 0 1 0
+c
+d 826 3 0 0 0
+c
+d 301 1 0 0 0
+c
+d 304 1 0 0 0
+c
+d 797 2 0 0 0
+c
+d 798 1 0 0 0
+c
+d 419 2 0 0 0
+c
+d 420 1 0 0 0
+c
+d 395 1 0 0 0
+c
+d 1106 2 1 0 0
+c
+d 443 2 0 0 0
+c
+d 301 2 0 0 0
+c
+d 1155 1 0 0 0
+c
+d 19 1 0 0 0
+c
+d 981 3 0 0 0
+c
+d 835 2 0 0 0
+c
+d 836 1 1 0 0
+c
+d 487 1 0 0 0
+c
+d 488 2 1 0 0
+c
+d 1087 3 1 0 0
+c
+d 718 1 0 1 0
+c
+d 735 1 0 0 0
+c
+d 737 1 0 1 0
+c
+d 455 2 0 1 0
+c
+d 457 1 0 1 0
+c
+d 50 1 0 0 0
+c
+d 51 1 0 0 0
+c
+d 1024 1 0 0 0
+c
+d 1025 1 0 0 0
+c
+d 217 1 0 1 0
+c
+d 220 1 0 1 0
+c
+d 1243 1 0 0 0
+c
+d 268 2 0 1 0
+c
+d 782 2 0 0 0
+c
+d 858 1 0 0 0
+c
+d 859 1 0 0 0
+c
+d 163 2 0 2 0
+c
+d 821 1 0 0 0
+c
+d 822 1 0 0 0
+c
+d 69 2 0 0 0
+c
+d 611 4 0 0 0
+c
+d 616 4 1 0 0
+c
+d 855 4 1 0 0
+c
+d 492 3 0 0 0
+c
+d 305 1 0 1 0
+c
+d 353 1 0 1 0
+c
+d 101 1 1 0 0
+c
+d 608 2 0 0 0
+c
+d 514 1 0 0 0
+c
+d 516 1 0 0 0
+c
+d 572 2 0 0 0
+c
+d 1 2 0 1 0
+c
+d 5 1 0 1 0
+c
+d 5 2 1 0 0
+c
+d 18 1 0 0 0
+c
+d 881 4 0 0 0
+c
+d 597 2 0 0 0
+c
+d 494 2 0 0 0
+c
+d 495 1 0 1 0
+c
+d 218 3 0 1 0
+c
+d 153 1 0 0 0
+c
+d 155 2 0 2 0
+c
+d 437 3 1 0 0
+c
+d 218 3 0 1 0
+c
+d 111 1 0 0 0
+c
+d 146 1 0 0 0
+c
+d 855 2 0 0 0
+c
+d 650 4 1 0 0
+c
+d 594 3 0 2 0
+c
+d 278 1 0 1 0
+c
+d 279 1 0 1 0
+c
+d 602 1 0 0 0
+c
+d 675 2 0 0 0
+c
+d 1009 2 0 2 0
+c
+d 659 1 0 0 0
+c
+d 661 2 0 0 0
+c
+d 623 2 0 0 0
+c
+d 625 1 1 0 0
+c
+d 737 1 0 0 0
+c
+d 738 1 0 0 0
+c
+d 743 1 0 0 0
+c
+d 437 2 1 0 0
+c
+d 1047 1 0 0 0
+c
+d 558 1 0 1 0
+c
+d 559 1 0 0 0
+c
+d 592 2 0 0 0
+c
+d 574 1 0 0 0
+c
+d 795 2 0 0 0
+c
+d 572 2 0 0 0
+c
+d 457 1 0 0 0
+c
+d 467 1 0 0 0
+c
+d 468 1 1 0 0
+c
+d 737 1 0 1 0
+c
+d 756 2 0 1 0
+c
+d 225 3 0 1 0
+c
+d 810 2 0 0 0
+c
+d 418 4 1 0 0
+c
+d 382 1 0 1 0
+c
+d 383 1 0 1 0
+c
+d 1113 3 0 1 0
+c
+d 284 1 0 1 0
+c
+d 285 2 0 1 0
+c
+d 516 4 0 2 0
+c
+d 591 4 0 0 0
+c
+d 616 2 0 0 0
+c
+d 146 2 0 1 0
+c
+d 1255 1 0 0 0
+c
+d 343 1 0 1 0
+c
+d 437 1 0 1 0
+c
+d 855 3 1 0 0
+c
+d 734 3 1 0 0
+c
+d 1318 2 1 0 0
+c
+d 1319 1 0 0 0
+c
+d 789 2 0 0 0
+c
+d 796 2 0 1 0
+c
+d 487 3 0 1 0
+c
+d 769 1 0 0 0
+c
+d 939 1 0 0 0
+c
+d 419 1 0 0 0
+c
+d 421 1 0 0 0
+c
+d 1275 1 0 0 0
+c
+d 1278 1 0 0 0
+c
+d 9 1 0 1 0
+c
+d 10 1 0 1 0
+c
+d 686 4 1 0 0
+c
+d 301 2 0 0 0
+c
+d 1154 1 0 0 0
+c
+d 18 3 0 2 0
+c
+d 108 1 0 0 0
+c
+d 111 2 0 0 0
+c
+d 479 3 1 0 0
+c
+d 931 3 1 0 0
+c
+d 60 1 0 1 0
+c
+d 630 1 0 1 0
+c
+d 178 3 0 2 0
+c
+d 974 2 0 0 0
+c
+d 810 1 0 1 0
+c
+d 811 1 0 1 0
+c
+d 675 3 0 0 0
+c
+d 1110 3 0 2 0
+c
+d 16 2 1 0 0
+c
+d 1163 2 0 0 0
+c
+d 543 3 1 0 0
+c
+d 799 2 1 0 0
+c
+d 933 1 0 0 0
+c
+d 907 3 0 0 0
+c
+d 618 4 0 0 0
+c
+d 152 2 1 0 0
+c
+d 1254 1 0 0 0
+c
+d 90 1 0 0 0
+c
+d 91 1 1 0 0
+c
+d 597 1 0 1 0
+c
+d 598 2 0 1 0
+c
+d 599 1 0 0 0
+c
+d 246 2 0 0 0
+c
+d 262 1 0 0 0
+c
+d 582 1 0 0 0
+c
+d 588 1 0 0 0
+c
+d 111 2 1 0 0
+c
+d 463 2 0 2 0
+c
+d 906 2 0 2 0
+c
+d 806 1 0 0 0
+c
+d 807 1 0 0 0
+c
+d 400 2 0 0 0
+c
+d 756 3 1 0 0
+c
+d 681 4 1 0 0
+c
+d 278 4 0 0 0
+c
+d 858 3 1 0 0
+c
+d 1087 1 0 0 0
+c
+d 1096 1 0 0 0
+c
+d 572 4 1 0 0
+c
+d 353 3 1 0 0
+c
+d 835 2 0 0 0
+c
+d 901 2 0 1 0
+c
+d 264 1 0 0 0
+c
+d 284 1 0 0 0
+c
+d 285 1 0 0 0
+c
+d 48 3 1 0 0
+c
+d 49 3 0 0 0
+c
+d 353 3 0 2 0
+c
+d 207 1 0 0 0
+c
+d 208 1 0 0 0
+c
+d 259 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 272 2 0 1 0
+c
+d 419 3 1 0 0
+c
+d 218 3 0 2 0
+c
+d 395 2 0 2 0
+c
+d 1165 2 0 0 0
+c
+d 51 3 0 0 0
+c
+d 143 1 0 1 0
+c
+d 145 1 0 0 0
+c
+d 327 1 0 0 0
+c
+d 348 1 0 0 0
+c
+d 349 1 0 0 0
+c
+d 965 2 1 0 0
+c
+d 977 1 0 0 0
+c
+d 591 1 0 1 0
+c
+d 597 1 0 0 0
+c
+d 608 3 0 0 0
+c
+d 280 1 0 0 0
+c
+d 281 2 1 0 0
+c
+d 218 3 0 2 0
+c
+d 564 4 1 0 0
+c
+d 806 1 0 1 0
+c
+d 807 1 0 0 0
+c
+d 507 2 1 0 0
+c
+d 1071 1 0 0 0
+c
+d 797 1 0 0 0
+c
+d 799 1 0 0 0
+c
+d 836 2 0 0 0
+c
+d 839 1 1 0 0
+c
+d 301 1 0 1 0
+c
+d 1218 1 0 1 0
+c
+d 437 2 0 0 0
+c
+d 62 1 0 0 0
+c
+d 65 1 0 0 0
+c
+d 572 1 0 0 0
+c
+d 574 2 1 0 0
+c
+d 1150 3 0 1 0
+c
+d 977 1 0 0 0
+c
+d 980 1 0 0 0
+c
+d 743 3 0 1 0
+c
+d 498 3 0 1 0
+c
+d 591 3 0 2 0
+c
+d 5 1 0 1 0
+c
+d 10 1 0 1 0
+c
+d 49 2 0 0 0
+c
+d 58 1 0 0 0
+c
+d 301 2 0 0 0
+c
+d 1113 1 0 0 0
+c
+d 1114 2 0 0 0
+c
+d 1115 1 0 0 0
+c
+d 162 1 0 0 0
+c
+d 163 1 0 0 0
+c
+d 807 1 0 1 0
+c
+d 906 1 0 1 0
+c
+d 907 1 0 0 0
+c
+d 445 2 0 1 0
+c
+d 446 2 0 1 0
+c
+d 18 1 0 1 0
+c
+d 93 1 0 0 0
+c
+d 1263 1 0 1 0
+c
+d 662 2 0 0 0
+c
+d 686 2 1 0 0
+c
+d 217 3 0 1 0
+c
+d 69 2 0 0 0
+c
+d 649 1 1 0 0
+c
+d 46 3 1 0 0
+c
+d 382 3 0 1 0
+c
+d 368 3 1 0 0
+c
+d 509 4 1 0 0
+c
+d 283 4 1 0 0
+c
+d 1156 1 0 0 0
+c
+d 1160 2 0 0 0
+c
+d 992 2 0 0 0
+c
+d 437 1 0 0 0
+c
+d 445 1 0 1 0
+c
+d 89 2 0 1 0
+c
+d 119 1 0 1 0
+c
+d 89 2 0 0 0
+c
+d 178 3 1 0 0
+c
+d 1009 3 1 0 0
+c
+d 196 1 0 1 0
+c
+d 199 1 0 1 0
+c
+d 682 4 1 0 0
+c
+d 756 2 0 0 0
+c
+d 772 1 1 0 0
+c
+d 1008 2 0 1 0
+c
+d 661 1 0 0 0
+c
+d 667 1 0 0 0
+c
+d 915 3 1 0 0
+c
+d 60 1 0 0 0
+c
+d 72 1 0 0 0
+c
+d 176 1 0 0 0
+c
+d 177 2 1 0 0
+c
+d 815 1 0 0 0
+c
+d 817 1 0 0 0
+c
+d 989 3 0 0 0
+c
+d 1091 3 0 0 0
+c
+d 21 3 0 2 0
+c
+d 439 2 1 0 0
+c
+d 440 1 0 0 0
+c
+d 823 1 1 0 0
+c
+d 824 1 0 0 0
+c
+d 835 1 0 0 0
+c
+d 494 1 0 0 0
+c
+d 495 2 0 0 0
+c
+d 823 2 0 0 0
+c
+d 835 1 0 0 0
+c
+d 12 3 0 1 0
+c
+d 775 4 0 0 0
+c
+d 177 1 0 1 0
+c
+d 180 1 0 1 0
+c
+d 199 2 0 0 0
+c
+d 211 1 0 0 0
+c
+d 507 1 0 1 0
+c
+d 1071 1 0 1 0
+c
+d 101 3 0 1 0
+c
+d 575 2 1 0 0
+c
+d 578 1 0 0 0
+c
+d 96 3 1 0 0
+c
+d 56 1 0 0 0
+c
+d 1309 1 1 0 0
+c
+d 670 1 0 1 0
+c
+d 671 1 0 0 0
+c
+d 1013 4 1 0 0
+c
+d 1152 3 0 0 0
+c
+d 152 2 0 1 0
+c
+d 1254 1 0 1 0
+c
+d 505 2 0 0 0
+c
+d 259 1 0 0 0
+c
+d 261 1 0 0 0
+c
+d 211 1 0 0 0
+c
+d 215 1 0 0 0
+c
+d 60 3 0 0 0
+c
+d 608 3 1 0 0
+c
+d 93 1 1 0 0
+c
+d 95 1 0 0 0
+c
+d 622 1 0 0 0
+c
+d 965 2 0 0 0
+c
+d 594 1 0 1 0
+c
+d 651 2 0 1 0
+c
+d 51 1 0 1 0
+c
+d 52 2 0 1 0
+c
+d 461 2 0 0 0
+c
+d 462 1 0 0 0
+c
+d 606 3 0 2 0
+c
+d 211 4 0 0 0
+c
+d 385 2 0 1 0
+c
+d 1133 1 0 1 0
+c
+d 1150 3 0 0 0
+c
+d 1163 1 0 1 0
+c
+d 1164 1 0 1 0
+c
+d 1017 1 0 0 0
+c
+d 1021 1 0 0 0
+c
+d 661 1 0 0 0
+c
+d 667 1 0 0 0
+c
+d 119 2 0 0 0
+c
+d 1151 4 0 0 0
+c
+d 92 1 0 0 0
+c
+d 93 1 0 0 0
+c
+d 1051 1 0 0 0
+c
+d 1052 1 0 0 0
+c
+d 622 1 0 0 0
+c
+d 965 1 0 0 0
+c
+d 1124 2 1 0 0
+c
+d 193 1 0 0 0
+c
+d 195 1 0 0 0
+c
+d 187 3 0 0 0
+c
+d 597 2 0 1 0
+c
+d 598 1 0 1 0
+c
+d 301 1 0 0 0
+c
+d 315 1 0 0 0
+c
+d 222 1 1 0 0
+c
+d 1233 1 0 0 0
+c
+d 1236 1 0 0 0
+c
+d 1192 1 0 0 0
+c
+d 1205 1 0 0 0
+c
+d 120 1 0 1 0
+c
+d 121 1 0 0 0
+c
+d 123 1 0 1 0
+c
+d 126 2 0 0 0
+c
+d 127 1 0 0 0
+c
+d 44 1 0 0 0
+c
+d 1020 1 0 0 0
+c
+d 89 1 0 1 0
+c
+d 359 1 0 1 0
+c
+d 361 2 0 0 0
+c
+d 965 3 1 0 0
+c
+d 597 1 0 1 0
+c
+d 598 1 0 1 0
+c
+d 340 3 0 0 0
+c
+d 799 1 0 1 0
+c
+d 919 1 0 1 0
+c
+d 119 4 1 0 0
+c
+d 263 1 0 0 0
+c
+d 283 2 0 0 0
+c
+d 1020 3 0 2 0
+c
+d 592 1 0 0 0
+c
+d 594 1 0 0 0
+c
+d 1087 2 0 0 0
+c
+d 119 3 1 0 0
+c
+d 119 4 0 0 0
+c
+d 820 1 0 0 0
+c
+d 821 1 0 0 0
+c
+d 829 1 1 0 0
+c
+d 830 1 0 0 0
+c
+d 74 3 0 0 0
+c
+d 28 4 0 1 0
+c
+d 19 4 0 0 0
+c
+d 77 3 0 0 0
+c
+d 437 1 0 1 0
+c
+d 458 1 0 1 0
+c
+d 31 2 0 0 0
+c
+d 32 1 1 0 0
+c
+d 60 2 0 2 0
+c
+d 445 3 1 0 0
+c
+d 213 4 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 1195 1 0 0 0
+c
+d 737 2 0 0 0
+c
+d 359 2 0 0 0
+c
+d 305 1 0 0 0
+c
+d 1150 1 0 0 0
+c
+d 437 3 0 0 0
+c
+d 400 2 0 0 0
+c
+d 457 1 0 1 0
+c
+d 466 2 0 1 0
+c
+d 211 1 0 0 0
+c
+d 215 2 0 0 0
+c
+d 1309 2 0 0 0
+c
+d 775 2 0 0 0
+c
+d 686 1 0 0 0
+c
+d 805 1 0 0 0
+c
+d 915 2 0 0 0
+c
+d 939 4 0 0 0
+c
+d 144 3 1 0 0
+c
+d 121 1 0 0 0
+c
+d 124 1 0 1 0
+c
+d 156 1 0 1 0
+c
+d 400 1 0 0 0
+c
+d 964 3 0 0 0
+c
+d 861 1 0 0 0
+c
+d 863 1 0 0 0
+c
+d 1021 4 0 0 0
+c
+d 1184 2 0 0 0
+c
+d 1195 1 0 0 0
+c
+d 1197 1 0 0 0
+c
+d 60 4 0 0 0
+c
+d 49 1 0 0 0
+c
+d 50 1 0 0 0
+c
+d 32 4 1 0 0
+c
+d 272 2 0 1 0
+c
+d 33 3 1 0 0
+c
+d 146 1 0 0 0
+c
+d 1097 2 1 0 0
+c
+d 829 1 0 1 0
+c
+d 830 1 0 1 0
+c
+d 621 2 1 0 0
+c
+d 646 1 0 0 0
+c
+d 142 2 0 0 0
+c
+d 274 1 0 1 0
+c
+d 277 1 0 1 0
+c
+d 618 1 0 0 0
+c
+d 620 2 0 0 0
+c
+d 278 1 0 0 0
+c
+d 280 2 1 0 0
+c
+d 358 1 1 0 0
+c
+d 359 1 0 0 0
+c
+d 366 1 0 0 0
+c
+d 992 3 1 0 0
+c
+d 157 4 1 0 0
+c
+d 610 1 0 0 0
+c
+d 611 1 1 0 0
+c
+d 612 1 0 0 0
+c
+d 18 2 0 0 0
+c
+d 650 2 0 1 0
+c
+d 661 1 0 1 0
+c
+d 1269 2 0 2 0
+c
+d 419 2 1 0 0
+c
+d 434 1 0 0 0
+c
+d 593 1 0 0 0
+c
+d 678 1 0 1 0
+c
+d 679 1 0 0 0
+c
+d 29 1 0 1 0
+c
+d 1315 1 0 0 0
+c
+d 1318 1 0 1 0
+c
+d 748 2 0 1 0
+c
+d 301 1 0 0 0
+c
+d 302 2 0 0 0
+c
+d 968 1 0 0 0
+c
+d 970 1 0 0 0
+c
+d 821 1 0 0 0
+c
+d 822 1 0 0 0
+c
+d 551 1 0 1 0
+c
+d 564 1 0 1 0
+c
+d 835 1 0 0 0
+c
+d 836 2 1 0 0
+c
+d 797 1 0 0 0
+c
+d 799 1 0 0 0
+c
+d 487 2 1 0 0
+c
+d 163 1 0 0 0
+c
+d 173 1 0 0 0
+c
+d 615 1 0 0 0
+c
+d 616 1 0 0 0
+c
+d 101 2 1 0 0
+c
+d 511 3 1 0 0
+c
+d 143 1 0 0 0
+c
+d 144 1 0 0 0
+c
+d 95 1 0 0 0
+c
+d 1001 1 0 1 0
+c
+d 1003 1 0 1 0
+c
+d 1087 1 0 0 0
+c
+d 1088 1 0 0 0
+c
+d 650 3 0 0 0
+c
+d 101 1 0 0 0
+c
+d 608 1 0 0 0
+c
+d 805 1 1 0 0
+c
+d 915 2 0 0 0
+c
+d 60 1 0 0 0
+c
+d 62 1 1 0 0
+c
+d 592 2 0 0 0
+c
+d 502 1 0 1 0
+c
+d 505 1 0 1 0
+c
+d 397 2 0 0 0
+c
+d 863 2 0 1 0
+c
+d 864 2 0 0 0
+c
+d 738 1 1 0 0
+c
+d 854 2 0 0 0
+c
+d 965 4 1 0 0
+c
+d 1269 3 0 1 0
+c
+d 1008 4 1 0 0
+c
+d 1087 3 0 0 0
+c
+d 1094 1 0 0 0
+c
+d 384 3 1 0 0
+c
+d 1266 2 0 1 0
+c
+d 1268 1 0 1 0
+c
+d 933 4 0 0 0
+c
+d 32 2 0 0 0
+c
+d 1320 1 0 0 0
+c
+d 660 3 0 0 0
+c
+d 211 3 1 0 0
+c
+d 604 2 0 0 0
+c
+d 921 2 0 0 0
+c
+d 1029 3 1 0 0
+c
+d 77 2 0 0 0
+c
+d 1168 2 0 0 0
+c
+d 1177 1 0 0 0
+c
+d 60 1 1 0 0
+c
+d 647 1 0 0 0
+c
+d 964 2 0 0 0
+c
+d 101 2 0 1 0
+c
+d 608 1 0 1 0
+c
+d 301 4 1 0 0
+c
+d 575 1 0 0 0
+c
+d 578 1 0 0 0
+c
+d 5 4 0 0 0
+c
+d 44 1 0 0 0
+c
+d 1031 1 0 0 0
+c
+d 1032 2 0 1 0
+c
+d 340 1 0 0 0
+c
+d 492 3 1 0 0
+c
+d 157 1 0 1 0
+c
+d 178 1 0 1 0
+c
+d 48 3 1 0 0
+c
+d 100 2 0 0 0
+c
+d 105 1 1 0 0
+c
+d 157 2 0 0 0
+c
+d 468 3 1 0 0
+c
+d 1157 3 1 0 0
+c
+d 286 2 0 0 0
+c
+d 242 1 0 1 0
+c
+d 262 1 0 1 0
+c
+d 220 3 0 0 0
+c
+d 211 2 0 1 0
+c
+d 215 1 0 1 0
+c
+d 157 1 0 0 0
+c
+d 365 2 0 1 0
+c
+d 1106 2 1 0 0
+c
+d 1107 1 0 0 0
+c
+d 1170 1 1 0 0
+c
+d 1184 1 0 0 0
+c
+d 457 3 1 0 0
+c
+d 238 3 1 0 0
+c
+d 89 2 0 1 0
+c
+d 119 1 0 1 0
+c
+d 418 2 0 0 0
+c
+d 266 4 1 0 0
+c
+d 264 1 0 0 0
+c
+d 286 1 0 0 0
+c
+d 95 1 0 1 0
+c
+d 1263 2 0 1 0
+c
+d 286 2 0 0 0
+c
+d 734 2 0 0 0
+c
+d 70 4 1 0 0
+c
+d 494 3 1 0 0
+c
+d 499 2 0 0 0
+c
+d 500 1 0 0 0
+c
+d 1113 2 0 0 0
+c
+d 19 2 0 0 0
+c
+d 286 1 0 1 0
+c
+d 292 2 0 1 0
+c
+d 807 2 1 0 0
+c
+d 907 1 0 0 0
+c
+d 463 2 0 0 0
+c
+d 623 4 0 0 0
+c
+d 283 1 0 0 0
+c
+d 284 2 0 0 0
+c
+d 119 3 0 0 0
+c
+d 1152 3 0 0 0
+c
+d 353 1 0 1 0
+c
+d 354 2 0 1 0
+c
+d 193 2 0 0 0
+c
+d 863 3 0 0 0
+c
+d 525 1 0 0 0
+c
+d 526 1 0 0 0
+c
+d 463 2 0 1 0
+c
+d 989 3 1 0 0
+c
+d 252 3 1 0 0
+c
+d 457 2 1 0 0
+c
+d 490 2 0 0 0
+c
+d 574 3 1 0 0
+c
+d 199 1 0 0 0
+c
+d 208 1 0 0 0
+c
+d 517 2 0 0 0
+c
+d 519 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 178 2 0 0 0
+c
+d 602 3 1 0 0
+c
+d 281 2 0 0 0
+c
+d 12 2 0 1 0
+c
+d 13 1 0 0 0
+c
+d 927 4 1 0 0
+c
+d 384 4 0 0 0
+c
+d 1195 2 0 1 0
+c
+d 686 3 0 2 0
+c
+d 511 4 1 0 0
+c
+d 343 2 0 1 0
+c
+d 437 1 0 0 0
+c
+d 66 1 0 1 0
+c
+d 69 1 0 1 0
+c
+d 647 1 0 0 0
+c
+d 662 3 0 0 0
+c
+d 51 2 0 0 0
+c
+d 52 1 1 0 0
+c
+d 1125 2 0 0 0
+c
+d 1128 1 0 0 0
+c
+d 48 1 0 1 0
+c
+d 49 1 0 1 0
+c
+d 144 2 0 0 0
+c
+d 858 3 0 0 0
+c
+d 575 2 0 0 0
+c
+d 1035 2 0 0 0
+c
+d 185 1 0 0 0
+c
+d 186 1 0 0 0
+c
+d 1109 1 0 0 0
+c
+d 1111 1 0 0 0
+c
+d 926 1 0 1 0
+c
+d 927 1 0 1 0
+c
+d 204 1 0 1 0
+c
+d 225 1 0 1 0
+c
+d 146 2 0 0 0
+c
+d 232 1 0 0 0
+c
+d 915 3 0 1 0
+c
+d 918 1 0 0 0
+c
+d 93 1 1 0 0
+c
+d 96 2 0 0 0
+c
+d 286 4 1 0 0
+c
+d 407 1 0 0 0
+c
+d 408 1 0 0 0
+c
+d 514 2 0 0 0
+c
+d 980 3 0 0 0
+c
+d 340 4 1 0 0
+c
+d 807 2 0 1 0
+c
+d 903 1 0 1 0
+c
+d 384 3 0 1 0
+c
+d 217 1 0 0 0
+c
+d 241 1 0 0 0
+c
+d 16 4 1 0 0
+c
+d 311 3 0 0 0
+c
+d 763 1 0 1 0
+c
+d 768 1 0 1 0
+c
+d 156 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 341 4 1 0 0
+c
+d 89 1 0 1 0
+c
+d 119 2 0 1 0
+c
+d 93 1 0 0 0
+c
+d 95 1 0 0 0
+c
+d 168 2 0 0 0
+c
+d 243 1 1 0 0
+c
+d 244 1 0 0 0
+c
+d 974 3 1 0 0
+c
+d 46 1 0 1 0
+c
+d 74 1 0 0 0
+c
+d 277 1 0 1 0
+c
+d 301 2 0 1 0
+c
+d 146 3 0 0 0
+c
+d 737 2 0 2 0
+c
+d 756 3 1 0 0
+c
+d 1158 2 0 1 0
+c
+d 1163 1 0 1 0
+c
+d 146 2 0 0 0
+c
+d 392 4 0 0 0
+c
+d 780 1 0 0 0
+c
+d 781 1 0 0 0
+c
+d 959 3 1 0 0
+c
+d 960 1 0 0 0
+c
+d 498 1 0 0 0
+c
+d 499 1 1 0 0
+c
+d 906 4 1 0 0
+c
+d 84 2 0 2 0
+c
+d 510 1 0 0 0
+c
+d 520 2 1 0 0
+c
+d 31 3 1 0 0
+c
+d 51 4 1 0 0
+c
+d 54 1 0 0 0
+c
+d 60 1 0 0 0
+c
+d 70 1 0 1 0
+c
+d 651 2 0 0 0
+c
+d 7 3 1 0 0
+c
+d 120 2 0 0 0
+c
+d 121 1 0 0 0
+c
+d 208 3 0 1 0
+c
+d 1244 1 0 0 0
+c
+d 159 1 0 1 0
+c
+d 178 2 0 1 0
+c
+d 119 2 0 1 0
+c
+d 120 1 0 1 0
+c
+d 49 1 0 1 0
+c
+d 734 1 0 1 0
+c
+d 594 3 0 2 0
+c
+d 192 2 0 0 0
+c
+d 193 1 0 0 0
+c
+d 91 2 0 0 0
+c
+d 92 1 0 0 0
+c
+d 133 1 0 0 0
+c
+d 150 1 0 0 0
+c
+d 294 2 1 0 0
+c
+d 191 4 0 0 0
+c
+d 55 2 0 1 0
+c
+d 694 1 0 1 0
+c
+d 1168 2 0 0 0
+c
+d 1169 1 0 0 0
+c
+d 997 1 0 0 0
+c
+d 998 1 0 0 0
+c
+d 437 2 0 0 0
+c
+d 353 3 1 0 0
+c
+d 217 1 0 0 0
+c
+d 225 2 0 0 0
+c
+d 19 1 0 0 0
+c
+d 1008 1 0 0 0
+c
+d 1113 2 0 1 0
+c
+d 18 3 1 0 0
+c
+d 369 2 0 0 0
+c
+d 382 1 0 0 0
+c
+d 178 1 0 1 0
+c
+d 181 1 0 0 0
+c
+d 31 1 0 0 0
+c
+d 32 1 0 0 0
+c
+d 93 2 0 2 0
+c
+d 141 1 0 0 0
+c
+d 229 2 0 0 0
+c
+d 231 1 0 0 0
+c
+d 1269 2 0 0 0
+c
+d 277 1 0 0 0
+c
+d 301 1 0 0 0
+c
+d 787 4 1 0 0
+c
+d 119 3 1 0 0
+c
+d 18 1 0 0 0
+c
+d 77 1 0 0 0
+c
+d 18 3 1 0 0
+c
+d 156 1 0 0 0
+c
+d 400 1 0 0 0
+c
+d 835 1 0 1 0
+c
+d 836 1 0 1 0
+c
+d 705 2 0 0 0
+c
+d 453 1 0 0 0
+c
+d 455 1 0 0 0
+c
+d 840 2 0 0 0
+c
+d 1043 1 0 0 0
+c
+d 1045 1 0 0 0
+c
+d 1046 1 0 0 0
+c
+d 35 1 0 0 0
+c
+d 36 1 0 0 0
+c
+d 395 2 0 0 0
+c
+d 397 1 0 0 0
+c
+d 55 2 0 0 0
+c
+d 457 1 0 1 0
+c
+d 463 2 0 1 0
+c
+d 159 1 0 0 0
+c
+d 178 3 1 0 0
+c
+d 89 2 0 1 0
+c
+d 164 3 0 1 0
+c
+d 791 2 0 1 0
+c
+d 936 1 0 1 0
+c
+d 1156 2 1 0 0
+c
+d 734 4 0 1 0
+c
+d 18 2 1 0 0
+c
+d 32 1 0 0 0
+c
+d 44 3 0 0 0
+c
+d 1195 1 0 0 0
+c
+d 1196 1 0 0 0
+c
+d 1267 1 0 0 0
+c
+d 1268 1 0 0 0
+c
+d 277 1 0 0 0
+c
+d 1158 1 0 1 0
+c
+d 1163 1 0 0 0
+c
+d 511 2 1 0 0
+c
+d 516 1 0 0 0
+c
+d 157 2 0 0 0
+c
+d 157 4 0 1 0
+c
+d 554 4 0 0 0
+c
+d 882 2 0 0 0
+c
+d 625 1 0 0 0
+c
+d 626 1 0 1 0
+c
+d 1008 2 0 0 0
+c
+d 437 1 0 0 0
+c
+d 439 1 0 1 0
+c
+d 441 1 0 0 0
+c
+d 344 3 1 0 0
+c
+d 823 1 0 0 0
+c
+d 901 1 0 0 0
+c
+d 272 1 0 0 0
+c
+d 282 1 0 0 0
+c
+d 676 1 0 0 0
+c
+d 677 1 0 0 0
+c
+d 678 1 0 0 0
+c
+d 753 1 0 1 0
+c
+d 754 2 0 0 0
+c
+d 908 3 1 0 0
+c
+d 1269 3 0 1 0
+c
+d 301 2 0 0 0
+c
+d 1156 1 1 0 0
+c
+d 168 2 1 0 0
+c
+d 170 1 0 0 0
+c
+d 1163 3 1 0 0
+c
+d 505 2 1 0 0
+c
+d 506 1 0 0 0
+c
+d 591 1 0 1 0
+c
+d 599 2 0 0 0
+c
+d 965 1 0 0 0
+c
+d 970 2 0 0 0
+c
+d 811 2 1 0 0
+c
+d 829 3 1 0 0
+c
+d 60 1 0 0 0
+c
+d 62 1 0 0 0
+c
+d 1266 1 0 0 0
+c
+d 1285 2 0 0 0
+c
+d 682 1 0 0 0
+c
+d 683 1 0 0 0
+c
+d 97 1 0 0 0
+c
+d 99 2 0 0 0
+c
+d 178 1 0 1 0
+c
+d 179 1 0 0 0
+c
+d 182 1 0 1 0
+c
+d 1156 2 0 0 0
+c
+d 204 2 1 0 0
+c
+d 225 1 0 0 0
+c
+d 866 3 0 1 0
+c
+d 840 2 0 0 0
+c
+d 199 3 0 0 0
+c
+d 394 3 0 0 0
+c
+d 807 1 0 0 0
+c
+d 822 1 0 0 0
+c
+d 823 1 0 0 0
+c
+d 1069 2 0 0 0
+c
+d 622 3 1 0 0
+c
+d 129 3 0 0 0
+c
+d 604 1 0 1 0
+c
+d 606 1 0 0 0
+c
+d 635 1 0 1 0
+c
+d 142 2 0 0 0
+c
+d 143 1 1 0 0
+c
+d 791 3 1 0 0
+c
+d 578 4 1 0 0
+c
+d 437 1 0 0 0
+c
+d 441 2 0 0 0
+c
+d 878 2 0 1 0
+c
+d 77 1 0 0 0
+c
+d 78 1 0 0 0
+c
+d 265 1 0 0 0
+c
+d 286 1 0 0 0
+c
+d 829 3 0 0 0
+c
+d 1009 2 0 0 0
+c
+d 208 1 0 0 0
+c
+d 211 1 0 0 0
+c
+d 195 3 0 0 0
+c
+d 203 1 0 0 0
+c
+d 599 2 0 0 0
+c
+d 487 2 0 1 0
+c
+d 488 1 0 0 0
+c
+d 423 1 0 0 0
+c
+d 470 2 0 0 0
+c
+d 514 2 0 0 0
+c
+d 51 1 0 0 0
+c
+d 52 2 0 0 0
+c
+d 359 3 1 0 0
+c
+d 1037 3 0 0 0
+c
+d 1038 2 0 0 0
+c
+d 185 4 1 0 0
+c
+d 343 2 0 0 0
+c
+d 737 1 0 0 0
+c
+d 753 1 0 1 0
+c
+d 622 1 0 0 0
+c
+d 965 1 0 0 0
+c
+d 604 4 1 0 0
+c
+d 900 4 0 0 0
+c
+d 823 3 0 0 0
+c
+d 145 4 1 0 0
+c
+d 24 1 0 0 0
+c
+d 26 1 0 0 0
+c
+d 1008 2 0 0 0
+c
+d 493 3 0 2 0
+c
+d 755 3 0 0 0
+c
+d 487 4 1 0 0
+c
+d 738 2 1 0 0
+c
+d 748 1 0 0 0
+c
+d 31 3 0 0 0
+c
+d 29 1 0 0 0
+c
+d 31 2 0 2 0
+c
+d 277 2 0 2 0
+c
+d 1008 3 1 0 0
+c
+d 1 2 0 0 0
+c
+d 1323 1 1 0 0
+c
+d 101 2 0 0 0
+c
+d 108 1 0 0 0
+c
+d 145 1 0 1 0
+c
+d 146 1 0 1 0
+c
+d 237 1 0 0 0
+c
+d 905 1 0 0 0
+c
+d 906 1 0 0 0
+c
+d 159 1 0 0 0
+c
+d 178 1 1 0 0
+c
+d 578 2 0 0 0
+c
+d 268 4 0 1 0
+c
+d 384 3 1 0 0
+c
+d 715 2 0 0 0
+c
+d 12 1 0 0 0
+c
+d 1267 1 0 0 0
+c
+d 111 1 0 0 0
+c
+d 142 1 1 0 0
+c
+d 143 1 0 0 0
+c
+d 835 3 1 0 0
+c
+d 782 3 0 0 0
+c
+d 248 3 1 0 0
+c
+d 769 3 0 0 0
+c
+d 1266 4 1 0 0
+c
+d 1303 3 0 0 0
+c
+d 550 3 1 0 0
+c
+d 125 2 0 0 0
+c
+d 959 2 0 0 0
+c
+d 806 1 0 0 0
+c
+d 906 1 0 0 0
+c
+d 48 2 0 1 0
+c
+d 44 2 0 1 0
+c
+d 1192 1 0 0 0
+c
+d 1205 1 0 1 0
+c
+d 1206 1 0 1 0
+c
+d 1163 2 0 0 0
+c
+d 797 1 0 0 0
+c
+d 798 1 0 0 0
+c
+d 875 2 0 0 0
+c
+d 436 2 0 1 0
+c
+d 663 2 0 0 0
+c
+d 393 4 1 0 0
+c
+d 146 3 1 0 0
+c
+d 143 3 1 0 0
+c
+d 1 2 0 0 0
+c
+d 294 3 1 0 0
+c
+d 705 1 0 0 0
+c
+d 710 2 0 0 0
+c
+d 711 1 0 0 0
+c
+d 705 3 1 0 0
+c
+d 1220 3 1 0 0
+c
+d 437 2 0 0 0
+c
+d 574 1 0 0 0
+c
+d 602 3 1 0 0
+c
+d 856 1 0 1 0
+c
+d 872 1 0 1 0
+c
+d 873 1 0 0 0
+c
+d 146 2 0 0 0
+c
+d 148 1 0 0 0
+c
+d 855 3 1 0 0
+c
+d 1168 1 0 0 0
+c
+d 1179 1 0 1 0
+c
+d 1266 4 1 0 0
+c
+d 265 2 0 0 0
+c
+d 286 1 1 0 0
+c
+d 60 3 1 0 0
+c
+d 573 4 0 0 0
+c
+d 802 2 0 0 0
+c
+d 193 2 1 0 0
+c
+d 195 1 0 0 0
+c
+d 230 4 0 0 0
+c
+d 119 1 0 1 0
+c
+d 120 1 0 0 0
+c
+d 855 4 0 0 0
+c
+d 822 1 1 0 0
+c
+d 823 2 0 0 0
+c
+d 156 2 0 0 0
+c
+d 507 3 1 0 0
+c
+d 167 3 1 0 0
+c
+d 211 3 0 0 0
+c
+d 791 4 1 0 0
+c
+d 19 2 0 0 0
+c
+d 705 2 1 0 0
+c
+d 706 2 0 0 0
+c
+d 1266 3 1 0 0
+c
+d 507 1 0 0 0
+c
+d 1070 1 0 0 0
+c
+d 1287 1 0 0 0
+c
+d 599 2 0 2 0
+c
+d 7 1 0 0 0
+c
+d 8 1 0 0 0
+c
+d 9 2 0 0 0
+c
+d 608 2 0 0 0
+c
+d 308 1 0 0 0
+c
+d 327 1 0 0 0
+c
+d 146 1 0 1 0
+c
+d 151 2 0 1 0
+c
+d 145 1 1 0 0
+c
+d 146 2 0 0 0
+c
+d 479 1 0 0 0
+c
+d 480 3 0 1 0
+c
+d 19 1 1 0 0
+c
+d 965 3 0 0 0
+c
+d 989 1 0 1 0
+c
+d 990 1 0 1 0
+c
+d 1156 1 0 1 0
+c
+d 1160 1 0 0 0
+c
+d 353 2 0 0 0
+c
+d 279 1 0 0 0
+c
+d 1150 2 0 0 0
+c
+d 75 1 0 0 0
+c
+d 84 1 0 0 0
+c
+d 164 2 0 0 0
+c
+d 705 4 0 0 0
+c
+d 89 1 0 0 0
+c
+d 532 1 0 1 0
+c
+d 1045 4 1 0 0
+c
+d 19 3 0 0 0
+c
+d 602 2 1 0 0
+c
+d 681 1 0 0 0
+c
+d 396 2 0 0 0
+c
+d 397 1 0 0 0
+c
+d 690 1 0 1 0
+c
+d 705 1 0 0 0
+c
+d 156 2 0 0 0
+c
+d 165 1 0 0 0
+c
+d 66 1 0 0 0
+c
+d 68 3 1 0 0
+c
+d 597 3 1 0 0
+c
+d 1306 4 0 0 0
+c
+d 638 3 0 0 0
+c
+d 19 1 0 0 0
+c
+d 965 1 0 0 0
+c
+d 60 3 1 0 0
+c
+d 176 4 1 0 0
+c
+d 211 3 0 2 0
+c
+d 143 1 0 1 0
+c
+d 144 2 0 1 0
+c
+d 830 1 0 0 0
+c
+d 831 2 0 0 0
+c
+d 496 2 0 0 0
+c
+d 498 1 1 0 0
+c
+d 1158 3 0 0 0
+c
+d 756 2 0 0 0
+c
+d 283 4 1 0 0
+c
+d 1009 1 0 0 0
+c
+d 1012 1 0 0 0
+c
+d 311 1 0 0 0
+c
+d 327 2 1 0 0
+c
+d 266 1 0 1 0
+c
+d 282 1 0 1 0
+c
+d 61 1 0 0 0
+c
+d 64 1 0 0 0
+c
+d 343 1 0 1 0
+c
+d 437 2 0 1 0
+c
+d 193 2 0 0 0
+c
+d 523 2 0 1 0
+c
+d 525 1 1 0 0
+c
+d 120 2 1 0 0
+c
+d 121 1 0 0 0
+c
+d 143 2 0 0 0
+c
+d 1113 4 1 0 0
+c
+d 663 1 1 0 0
+c
+d 681 2 0 0 0
+c
+d 226 1 0 1 0
+c
+d 227 1 0 0 0
+c
+d 243 2 1 0 0
+c
+d 244 1 0 0 0
+c
+d 143 1 0 0 0
+c
+d 144 1 0 0 0
+c
+d 93 1 0 0 0
+c
+d 142 1 0 0 0
+c
+d 705 4 1 0 0
+c
+d 582 3 1 0 0
+c
+d 157 2 1 0 0
+c
+d 159 1 0 0 0
+c
+d 93 4 0 0 0
+c
+d 93 3 0 0 0
+c
+d 1199 2 0 1 0
+c
+d 49 1 0 0 0
+c
+d 58 1 0 0 0
+c
+d 623 2 1 0 0
+c
+d 857 4 0 2 0
+c
+d 575 1 0 0 0
+c
+d 577 1 0 1 0
+c
+d 578 1 0 1 0
+c
+d 278 4 0 0 0
+c
+d 75 1 0 0 0
+c
+d 79 2 0 0 0
+c
+d 77 3 0 0 0
+c
+d 768 3 0 2 0
+c
+d 34 1 0 0 0
+c
+d 208 1 0 0 0
+c
+d 1244 2 1 0 0
+c
+d 965 1 0 1 0
+c
+d 974 2 0 0 0
+c
+d 835 1 0 0 0
+c
+d 901 1 0 0 0
+c
+d 902 2 0 0 0
+c
+d 493 3 1 0 0
+c
+d 305 2 0 0 0
+c
+d 965 1 0 0 0
+c
+d 970 1 0 1 0
+c
+d 60 3 0 0 0
+c
+d 532 2 0 0 0
+c
+d 537 1 1 0 0
+c
+d 208 2 1 0 0
+c
+d 1244 1 0 0 0
+c
+d 7 2 0 0 0
+c
+d 529 1 0 0 0
+c
+d 532 1 0 0 0
+c
+d 33 3 1 0 0
+c
+d 799 4 0 0 0
+c
+d 148 1 0 1 0
+c
+d 232 2 0 0 0
+c
+d 12 1 1 0 0
+c
+d 1266 2 0 0 0
+c
+d 990 3 0 0 0
+c
+d 341 2 0 1 0
+c
+d 347 1 0 1 0
+c
+d 384 1 0 0 0
+c
+d 386 1 0 0 0
+c
+d 283 1 0 0 0
+c
+d 284 1 0 0 0
+c
+d 823 1 0 0 0
+c
+d 824 1 0 0 0
+c
+d 211 2 1 0 0
+c
+d 1238 1 0 0 0
+c
+d 146 2 0 2 0
+c
+d 754 3 0 0 0
+c
+d 801 2 0 0 0
+c
+d 360 3 1 0 0
+c
+d 1266 4 1 0 0
+c
+d 706 1 0 0 0
+c
+d 707 1 0 0 0
+c
+d 24 4 0 1 0
+c
+d 716 3 0 2 0
+c
+d 795 3 0 2 0
+c
+d 252 1 0 1 0
+c
+d 253 2 0 1 0
+c
+d 1043 3 1 0 0
+c
+d 623 2 0 0 0
+c
+d 624 1 0 0 0
+c
+d 265 1 0 0 0
+c
+d 286 2 1 0 0
+c
+d 1192 1 0 0 0
+c
+d 1194 1 0 0 0
+c
+d 707 1 0 0 0
+c
+d 708 1 0 0 0
+c
+d 959 2 0 1 0
+c
+d 119 2 0 0 0
+c
+d 120 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 111 1 1 0 0
+c
+d 1091 1 0 0 0
+c
+d 468 3 0 0 0
+c
+d 661 1 0 1 0
+c
+d 667 1 0 0 0
+c
+d 220 2 0 0 0
+c
+d 418 2 0 0 0
+c
+d 286 4 0 1 0
+c
+d 277 2 1 0 0
+c
+d 1158 1 0 0 0
+c
+d 34 2 0 0 0
+c
+d 35 1 1 0 0
+c
+d 686 1 0 0 0
+c
+d 700 2 1 0 0
+c
+d 795 2 0 0 0
+c
+d 825 1 0 0 0
+c
+d 96 1 0 0 0
+c
+d 98 1 0 0 0
+c
+d 75 2 1 0 0
+c
+d 84 1 0 0 0
+c
+d 159 1 0 0 0
+c
+d 185 1 0 0 0
+c
+d 186 1 0 0 0
+c
+d 479 1 0 0 0
+c
+d 487 1 0 0 0
+c
+d 569 1 0 0 0
+c
+d 574 2 0 0 0
+c
+d 989 2 0 2 0
+c
+d 337 2 0 0 0
+c
+d 278 1 0 0 0
+c
+d 279 2 0 0 0
+c
+d 661 1 0 0 0
+c
+d 667 1 0 1 0
+c
+d 668 1 0 0 0
+c
+d 436 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 156 2 1 0 0
+c
+d 163 1 0 0 0
+c
+d 50 2 1 0 0
+c
+d 51 1 0 0 0
+c
+d 675 2 0 0 0
+c
+d 55 1 0 0 0
+c
+d 693 1 0 0 0
+c
+d 694 1 0 0 0
+c
+d 599 4 0 0 0
+c
+d 301 3 0 0 0
+c
+d 146 2 0 2 0
+c
+d 151 1 0 0 0
+c
+d 111 2 1 0 0
+c
+d 1262 1 0 0 0
+c
+d 591 4 0 0 0
+c
+d 119 1 0 0 0
+c
+d 120 1 0 0 0
+c
+d 1185 2 0 0 0
+c
+d 663 3 1 0 0
+c
+d 268 1 0 0 0
+c
+d 282 1 0 0 0
+c
+d 968 1 0 0 0
+c
+d 970 1 0 0 0
+c
+d 437 2 0 0 0
+c
+d 843 3 0 0 0
+c
+d 965 2 0 0 0
+c
+d 597 2 0 1 0
+c
+d 598 1 0 1 0
+c
+d 101 3 0 1 0
+c
+d 437 2 0 0 0
+c
+d 558 1 0 1 0
+c
+d 855 3 1 0 0
+c
+d 12 1 1 0 0
+c
+d 1270 1 0 0 0
+c
+d 1272 1 0 0 0
+c
+d 75 1 0 0 0
+c
+d 1300 1 0 0 0
+c
+d 602 1 0 0 0
+c
+d 604 1 0 0 0
+c
+d 738 2 0 0 0
+c
+d 304 1 0 1 0
+c
+d 311 1 0 1 0
+c
+d 594 3 1 0 0
+c
+d 91 4 0 0 0
+c
+d 146 4 0 0 0
+c
+d 529 1 0 0 0
+c
+d 550 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 119 2 0 0 0
+c
+d 1266 2 0 0 0
+c
+d 1268 1 0 0 0
+c
+d 148 2 0 1 0
+c
+d 238 1 0 0 0
+c
+d 1 4 1 0 0
+c
+d 413 2 0 0 0
+c
+d 208 3 0 1 0
+c
+d 1006 3 1 0 0
+c
+d 592 1 0 0 0
+c
+d 594 1 0 0 0
+c
+d 811 3 0 2 0
+c
+d 95 2 0 0 0
+c
+d 1003 1 1 0 0
+c
+d 19 1 0 0 0
+c
+d 1008 1 0 0 0
+c
+d 436 4 1 0 0
+c
+d 93 2 0 0 0
+c
+d 493 3 0 0 0
+c
+d 159 2 0 0 0
+c
+d 806 2 0 0 0
+c
+d 791 2 0 1 0
+c
+d 285 1 0 0 0
+c
+d 286 2 1 0 0
+c
+d 763 1 0 0 0
+c
+d 768 1 0 0 0
+c
+d 93 3 1 0 0
+c
+d 19 1 0 1 0
+c
+d 1013 1 0 0 0
+c
+d 705 1 0 0 0
+c
+d 706 1 0 0 0
+c
+d 707 1 1 0 0
+c
+d 259 1 0 0 0
+c
+d 261 1 0 0 0
+c
+d 159 3 0 2 0
+c
+d 252 2 1 0 0
+c
+d 259 1 0 0 0
+c
+d 75 1 0 1 0
+c
+d 84 2 0 1 0
+c
+d 92 1 0 0 0
+c
+d 119 1 0 0 0
+c
+d 488 2 0 0 0
+c
+d 101 2 0 0 0
+c
+d 108 1 0 0 0
+c
+d 706 1 0 0 0
+c
+d 707 1 0 0 0
+c
+d 1274 4 1 0 0
+c
+d 1012 1 0 0 0
+c
+d 1031 2 0 0 0
+c
+d 1032 1 0 0 0
+c
+d 796 3 0 2 0
+c
+d 599 3 0 1 0
+c
+d 550 3 1 0 0
+c
+d 487 2 0 1 0
+c
+d 775 1 0 0 0
+c
+d 783 1 0 0 0
+c
+d 784 1 0 0 0
+c
+d 706 1 0 0 0
+c
+d 707 2 1 0 0
+c
+d 34 2 0 1 0
+c
+d 591 1 0 0 0
+c
+d 597 1 0 1 0
+c
+d 599 1 0 1 0
+c
+d 706 4 0 1 0
+c
+d 1266 2 0 0 0
+c
+d 737 2 0 2 0
+c
+d 743 1 0 0 0
+c
+d 1111 1 1 0 0
+c
+d 1112 2 0 0 0
+c
+d 578 4 1 0 0
+c
+d 855 2 1 0 0
+c
+d 857 1 0 0 0
+c
+d 40 2 0 0 0
+c
+d 623 4 1 0 0
+c
+d 307 3 0 0 0
+c
+d 1318 1 0 0 0
+c
+d 1319 1 0 0 0
+c
+d 772 3 0 0 0
+c
+d 1168 1 1 0 0
+c
+d 1176 1 0 0 0
+c
+d 1177 2 0 0 0
+c
+d 341 1 0 0 0
+c
+d 347 1 0 0 0
+c
+d 705 1 0 0 0
+c
+d 706 2 1 0 0
+c
+d 152 1 0 1 0
+c
+d 413 1 0 1 0
+c
+d 795 1 0 1 0
+c
+d 807 1 0 0 0
+c
+d 820 1 0 1 0
+c
+d 510 1 0 0 0
+c
+d 520 1 0 0 0
+c
+d 521 1 0 0 0
+c
+d 97 1 0 1 0
+c
+d 99 1 0 1 0
+c
+d 143 1 0 0 0
+c
+d 144 1 1 0 0
+c
+d 230 1 0 0 0
+c
+d 1286 3 0 0 0
+c
+d 1192 3 0 2 0
+c
+d 96 3 0 2 0
+c
+d 631 1 0 1 0
+c
+d 645 3 0 0 0
+c
+d 973 1 0 0 0
+c
+d 974 2 1 0 0
+c
+d 260 4 1 0 0
+c
+d 534 3 0 0 0
+c
+d 51 2 0 0 0
+c
+d 52 1 0 0 0
+c
+d 119 3 0 0 0
+c
+d 594 4 0 0 0
+c
+d 1156 3 0 0 0
+c
+d 836 1 0 0 0
+c
+d 838 1 0 1 0
+c
+d 839 1 0 1 0
+c
+d 280 2 0 1 0
+c
+d 1156 1 0 1 0
+c
+d 775 1 0 0 0
+c
+d 780 1 0 0 0
+c
+d 796 2 0 0 0
+c
+d 755 1 0 1 0
+c
+d 762 1 0 0 0
+c
+d 764 1 0 1 0
+c
+d 12 1 0 1 0
+c
+d 1266 2 0 1 0
+c
+d 796 3 1 0 0
+c
+d 527 1 0 0 0
+c
+d 529 1 0 0 0
+c
+d 651 2 0 0 0
+c
+d 690 1 0 0 0
+c
+d 384 4 1 0 0
+c
+d 274 1 1 0 0
+c
+d 277 2 0 0 0
+c
+d 1023 2 1 0 0
+c
+d 51 2 0 0 0
+c
+d 242 3 1 0 0
+c
+d 146 4 0 0 0
+c
+d 755 1 0 1 0
+c
+d 756 1 0 0 0
+c
+d 253 1 0 1 0
+c
+d 255 1 0 0 0
+c
+d 256 1 0 1 0
+c
+d 159 1 0 0 0
+c
+d 178 2 0 0 0
+c
+d 686 1 1 0 0
+c
+d 925 2 0 0 0
+c
+d 266 3 1 0 0
+c
+d 46 1 0 0 0
+c
+d 775 1 0 0 0
+c
+d 631 2 1 0 0
+c
+d 632 1 0 0 0
+c
+d 1156 3 1 0 0
+c
+d 437 3 1 0 0
+c
+d 242 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 273 1 0 0 0
+c
+d 275 1 0 0 0
+c
+d 327 4 0 0 0
+c
+d 143 3 0 0 0
+c
+d 594 3 0 0 0
+c
+d 51 2 0 0 0
+c
+d 551 1 0 0 0
+c
+d 564 2 0 0 0
+c
+d 111 1 0 0 0
+c
+d 143 1 0 0 0
+c
+d 101 2 0 1 0
+c
+d 602 1 0 0 0
+c
+d 682 1 0 0 0
+c
+d 990 1 0 0 0
+c
+d 992 1 0 0 0
+c
+d 19 1 0 0 0
+c
+d 628 1 0 1 0
+c
+d 629 1 0 1 0
+c
+d 308 2 0 1 0
+c
+d 311 1 0 1 0
+c
+d 705 1 0 0 0
+c
+d 706 1 0 0 0
+c
+d 756 4 0 0 0
+c
+d 1227 4 0 1 0
+c
+d 955 1 0 1 0
+c
+d 956 1 0 0 0
+c
+d 1313 2 0 0 0
+c
+d 505 2 0 0 0
+c
+d 120 1 0 1 0
+c
+d 125 1 0 1 0
+c
+d 591 1 1 0 0
+c
+d 959 2 0 0 0
+c
+d 1269 2 0 0 0
+c
+d 1270 1 1 0 0
+c
+d 641 1 0 0 0
+c
+d 642 1 0 0 0
+c
+d 1113 1 0 1 0
+c
+d 1115 1 0 0 0
+c
+d 1116 1 0 0 0
+c
+d 591 1 0 1 0
+c
+d 686 1 0 1 0
+c
+d 690 1 0 1 0
+c
+d 704 1 0 1 0
+c
+d 705 1 0 0 0
+c
+d 51 2 0 2 0
+c
+d 535 1 0 0 0
+c
+d 537 1 0 0 0
+c
+d 737 2 0 0 0
+c
+d 569 2 0 0 0
+c
+d 384 1 0 0 0
+c
+d 1111 1 1 0 0
+c
+d 757 3 0 1 0
+c
+d 199 4 0 0 0
+c
+d 569 2 0 0 0
+c
+d 574 1 0 1 0
+c
+d 925 4 0 0 0
+c
+d 213 2 0 0 0
+c
+d 54 1 0 0 0
+c
+d 55 1 0 0 0
+c
+d 540 1 1 0 0
+c
+d 543 2 0 0 0
+c
+d 34 2 0 2 0
+c
+d 286 2 0 1 0
+c
+d 159 3 1 0 0
+c
+d 51 3 1 0 0
+c
+d 572 1 0 0 0
+c
+d 574 1 0 0 0
+c
+d 49 1 0 1 0
+c
+d 734 2 0 1 0
+c
+d 835 3 1 0 0
+c
+d 377 4 1 0 0
+c
+d 55 1 0 0 0
+c
+d 66 2 0 0 0
+c
+d 55 1 1 0 0
+c
+d 691 2 0 0 0
+c
+d 606 3 0 2 0
+c
+d 54 1 0 1 0
+c
+d 1303 2 0 1 0
+c
+d 51 2 0 1 0
+c
+d 167 1 0 0 0
+c
+d 1122 2 0 1 0
+c
+d 493 2 0 0 0
+c
+d 72 3 1 0 0
+c
+d 796 2 0 0 0
+c
+d 797 1 1 0 0
+c
+d 259 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 114 4 1 0 0
+c
+d 211 1 0 1 0
+c
+d 217 1 0 1 0
+c
+d 1275 1 0 0 0
+c
+d 1277 1 0 0 0
+c
+d 1278 1 0 0 0
+c
+d 211 3 1 0 0
+c
+d 242 2 0 0 0
+c
+d 796 1 0 1 0
+c
+d 797 1 0 1 0
+c
+d 18 3 1 0 0
+c
+d 95 1 0 0 0
+c
+d 89 3 0 0 0
+c
+d 594 1 0 0 0
+c
+d 653 1 0 0 0
+c
+d 133 2 0 0 0
+c
+d 120 2 0 2 0
+c
+d 224 4 0 0 0
+c
+d 1246 2 0 2 0
+c
+d 1150 2 0 1 0
+c
+d 52 1 1 0 0
+c
+d 54 3 0 0 0
+c
+d 49 2 0 0 0
+c
+d 419 3 0 0 0
+c
+d 574 3 1 0 0
+c
+d 79 3 1 0 0
+c
+d 753 1 0 0 0
+c
+d 858 1 0 0 0
+c
+d 457 4 1 0 0
+c
+d 148 3 1 0 0
+c
+d 686 4 0 0 0
+c
+d 54 1 1 0 0
+c
+d 55 2 0 0 0
+c
+d 22 2 0 0 0
+c
+d 965 2 0 0 0
+c
+d 608 2 0 1 0
+c
+d 1037 1 0 1 0
+c
+d 301 1 1 0 0
+c
+d 310 1 0 0 0
+c
+d 311 1 0 0 0
+c
+d 691 1 0 0 0
+c
+d 706 1 0 0 0
+c
+d 591 2 0 2 0
+c
+d 959 1 0 0 0
+c
+d 470 4 0 0 0
+c
+d 634 4 1 0 0
+c
+d 437 2 0 1 0
+c
+d 457 1 0 1 0
+c
+d 55 2 0 0 0
+c
+d 959 3 1 0 0
+c
+d 1291 3 0 0 0
+c
+d 78 1 0 0 0
+c
+d 79 1 0 0 0
+c
+d 68 3 1 0 0
+c
+d 1177 1 1 0 0
+c
+d 1184 1 0 0 0
+c
+d 1210 1 0 0 0
+c
+d 268 2 0 0 0
+c
+d 282 1 1 0 0
+c
+d 283 1 0 1 0
+c
+d 284 3 0 1 0
+c
+d 594 3 0 0 0
+c
+d 148 4 1 0 0
+c
+d 179 2 0 0 0
+c
+d 39 3 0 1 0
+c
+d 1226 3 0 0 0
+c
+d 285 1 0 1 0
+c
+d 286 1 0 1 0
+c
+d 265 4 1 0 0
+c
+d 1 2 0 1 0
+c
+d 2 1 0 1 0
+c
+d 437 1 0 0 0
+c
+d 471 1 0 0 0
+c
+d 33 4 1 0 0
+c
+d 622 1 0 1 0
+c
+d 1034 1 0 0 0
+c
+d 1035 2 0 0 0
+c
+d 706 2 0 1 0
+c
+d 707 1 1 0 0
+c
+d 829 2 0 2 0
+c
+d 833 1 0 0 0
+c
+d 211 1 0 0 0
+c
+d 213 1 0 0 0
+c
+d 252 2 0 1 0
+c
+d 259 1 0 1 0
+c
+d 925 3 1 0 0
+c
+d 675 3 1 0 0
+c
+d 75 3 0 2 0
+c
+d 875 1 0 1 0
+c
+d 876 2 0 0 0
+c
+d 622 2 1 0 0
+c
+d 628 1 0 0 0
+c
+d 1096 1 0 1 0
+c
+d 1097 1 0 1 0
+c
+d 705 1 0 0 0
+c
+d 710 1 0 0 0
+c
+d 50 2 0 0 0
+c
+d 51 1 0 1 0
+c
+d 232 1 0 0 0
+c
+d 233 1 0 0 0
+c
+d 564 3 1 0 0
+c
+d 965 3 0 1 0
+c
+d 973 3 0 1 0
+c
+d 1168 1 0 0 0
+c
+d 1177 1 0 0 0
+c
+d 1210 1 1 0 0
+c
+d 989 2 1 0 0
+c
+d 995 1 0 0 0
+c
+d 1269 1 0 0 0
+c
+d 1271 2 0 0 0
+c
+d 111 1 1 0 0
+c
+d 146 2 0 0 0
+c
+d 84 4 0 1 0
+c
+d 193 1 0 0 0
+c
+d 195 1 0 0 0
+c
+d 48 3 1 0 0
+c
+d 224 3 1 0 0
+c
+d 12 2 1 0 0
+c
+d 90 1 0 0 0
+c
+d 156 3 0 2 0
+c
+d 572 1 0 1 0
+c
+d 795 1 0 1 0
+c
+d 101 1 0 1 0
+c
+d 610 1 0 0 0
+c
+d 1016 3 0 0 0
+c
+d 575 4 0 2 0
+c
+d 354 3 0 0 0
+c
+d 557 1 0 0 0
+c
+d 565 1 0 0 0
+c
+d 691 2 1 0 0
+c
+d 706 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 159 1 0 0 0
+c
+d 1253 1 0 0 0
+c
+d 1170 2 0 0 0
+c
+d 965 3 0 0 0
+c
+d 737 1 0 0 0
+c
+d 756 2 0 0 0
+c
+d 93 1 0 0 0
+c
+d 114 1 0 0 0
+c
+d 348 1 0 1 0
+c
+d 350 1 0 0 0
+c
+d 34 1 0 1 0
+c
+d 119 3 1 0 0
+c
+d 1156 2 1 0 0
+c
+d 1161 1 0 0 0
+c
+d 120 3 1 0 0
+c
+d 118 1 0 1 0
+c
+d 119 2 0 1 0
+c
+d 55 1 0 1 0
+c
+d 66 1 0 0 0
+c
+d 69 1 0 1 0
+c
+d 120 3 0 2 0
+c
+d 791 2 0 1 0
+c
+d 21 3 1 0 0
+c
+d 212 2 0 0 0
+c
+d 96 1 0 0 0
+c
+d 98 2 1 0 0
+c
+d 608 1 0 0 0
+c
+d 618 2 0 0 0
+c
+d 60 2 1 0 0
+c
+d 647 1 0 0 0
+c
+d 119 2 0 1 0
+c
+d 120 1 0 1 0
+c
+d 272 2 0 0 0
+c
+d 206 3 0 2 0
+c
+d 855 3 1 0 0
+c
+d 49 1 0 0 0
+c
+d 50 1 0 0 0
+c
+d 54 1 0 1 0
+c
+d 1303 1 0 1 0
+c
+d 159 4 0 0 0
+c
+d 36 1 0 1 0
+c
+d 37 2 0 0 0
+c
+d 213 1 0 0 0
+c
+d 242 1 0 0 0
+c
+d 432 2 0 0 0
+c
+d 982 3 1 0 0
+c
+d 795 1 0 0 0
+c
+d 907 1 0 0 0
+c
+d 554 1 0 0 0
+c
+d 555 2 0 0 0
+c
+d 1022 1 0 0 0
+c
+d 1023 2 1 0 0
+c
+d 511 4 1 0 0
+c
+d 75 2 1 0 0
+c
+d 162 3 1 0 0
+c
+d 37 1 0 0 0
+c
+d 38 1 0 0 0
+c
+d 622 2 0 0 0
+c
+d 1035 1 1 0 0
+c
+d 532 1 0 0 0
+c
+d 537 1 0 0 0
+c
+d 353 1 1 0 0
+c
+d 355 1 0 0 0
+c
+d 48 3 1 0 0
+c
+d 101 3 0 0 0
+c
+d 50 3 0 2 0
+c
+d 46 4 0 0 0
+c
+d 635 2 0 0 0
+c
+d 636 1 0 0 0
+c
+d 647 1 0 0 0
+c
+d 649 2 0 0 0
+c
+d 19 4 0 0 0
+c
+d 705 1 0 0 0
+c
+d 710 1 1 0 0
+c
+d 711 1 0 0 0
+c
+d 749 2 0 0 0
+c
+d 751 1 0 1 0
+c
+d 582 1 0 1 0
+c
+d 586 1 0 1 0
+c
+d 587 1 0 0 0
+c
+d 1266 2 0 0 0
+c
+d 734 2 0 0 0
+c
+d 719 2 0 1 0
+c
+d 90 2 1 0 0
+c
+d 91 1 0 0 0
+c
+d 756 1 0 1 0
+c
+d 757 1 0 1 0
+c
+d 704 1 0 0 0
+c
+d 705 2 1 0 0
+c
+d 575 2 0 2 0
+c
+d 617 1 0 1 0
+c
+d 985 1 0 0 0
+c
+d 19 2 1 0 0
+c
+d 22 1 0 0 0
+c
+d 159 3 0 0 0
+c
+d 621 3 0 1 0
+c
+d 622 1 0 0 0
+c
+d 268 1 0 0 0
+c
+d 282 2 0 2 0
+c
+d 738 1 0 0 0
+c
+d 748 1 0 0 0
+c
+d 893 1 1 0 0
+c
+d 95 1 0 0 0
+c
+d 96 1 1 0 0
+c
+d 98 1 0 0 0
+c
+d 661 2 0 0 0
+c
+d 662 1 1 0 0
+c
+d 264 2 0 1 0
+c
+d 285 1 0 1 0
+c
+d 36 2 0 0 0
+c
+d 662 2 1 0 0
+c
+d 667 1 0 0 0
+c
+d 133 4 1 0 0
+c
+d 457 3 0 0 0
+c
+d 89 1 0 0 0
+c
+d 550 1 0 1 0
+c
+d 552 1 0 0 0
+c
+d 146 2 0 0 0
+c
+d 168 2 1 0 0
+c
+d 369 1 0 0 0
+c
+d 268 2 0 0 0
+c
+d 282 1 0 1 0
+c
+d 1185 2 0 0 0
+c
+d 1201 1 1 0 0
+c
+d 157 2 0 0 0
+c
+d 175 1 0 0 0
+c
+d 946 2 0 0 0
+c
+d 578 2 0 1 0
+c
+d 186 1 0 0 0
+c
+d 188 1 0 0 0
+c
+d 281 1 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 184 1 0 0 0
+c
+d 185 1 0 0 0
+c
+d 301 3 0 2 0
+c
+d 252 1 0 1 0
+c
+d 259 1 0 1 0
+c
+d 965 1 0 0 0
+c
+d 974 1 1 0 0
+c
+d 975 1 0 0 0
+c
+d 594 1 0 0 0
+c
+d 959 2 0 0 0
+c
+d 507 1 1 0 0
+c
+d 1070 2 0 0 0
+c
+d 1008 3 1 0 0
+c
+d 163 2 0 0 0
+c
+d 829 1 0 1 0
+c
+d 835 2 0 0 0
+c
+d 49 2 0 0 0
+c
+d 16 3 0 0 0
+c
+d 217 2 0 0 0
+c
+d 241 1 0 0 0
+c
+d 682 2 0 1 0
+c
+d 126 2 0 2 0
+c
+d 127 1 0 0 0
+c
+d 550 2 0 0 0
+c
+d 537 2 0 0 0
+c
+d 419 2 0 1 0
+c
+d 663 2 1 0 0
+c
+d 681 1 0 0 0
+c
+d 41 1 0 0 0
+c
+d 42 1 0 0 0
+c
+d 615 3 1 0 0
+c
+d 301 1 0 0 0
+c
+d 1161 1 0 0 0
+c
+d 1162 1 0 0 0
+c
+d 919 1 0 0 0
+c
+d 921 1 0 0 0
+c
+d 1226 4 1 0 0
+c
+d 281 2 0 0 0
+c
+d 262 2 0 0 0
+c
+d 1304 1 0 0 0
+c
+d 1305 2 0 0 0
+c
+d 272 3 0 0 0
+c
+d 7 1 0 0 0
+c
+d 1279 1 0 0 0
+c
+d 514 3 0 0 0
+c
+d 100 1 0 1 0
+c
+d 1001 2 0 1 0
+c
+d 608 2 0 2 0
+c
+d 1037 1 0 0 0
+c
+d 208 1 0 1 0
+c
+d 211 1 0 1 0
+c
+d 1244 2 0 0 0
+c
+d 662 1 1 0 0
+c
+d 663 1 0 0 0
+c
+d 683 1 0 0 0
+c
+d 111 1 0 0 0
+c
+d 112 2 0 0 0
+c
+d 606 1 0 1 0
+c
+d 618 2 0 1 0
+c
+d 84 3 1 0 0
+c
+d 343 2 0 1 0
+c
+d 84 1 0 0 0
+c
+d 1290 1 0 0 0
+c
+d 248 1 0 1 0
+c
+d 250 1 0 0 0
+c
+d 251 1 0 1 0
+c
+d 965 4 0 0 0
+c
+d 145 3 1 0 0
+c
+d 650 2 0 0 0
+c
+d 26 2 1 0 0
+c
+d 27 1 0 0 0
+c
+d 810 2 0 2 0
+c
+d 592 2 0 0 0
+c
+d 100 2 0 0 0
+c
+d 105 1 0 0 0
+c
+d 119 2 0 2 0
+c
+d 261 3 1 0 0
+c
+d 7 1 0 0 0
+c
+d 10 1 0 1 0
+c
+d 1269 1 0 1 0
+c
+d 93 3 1 0 0
+c
+d 89 1 0 0 0
+c
+d 550 2 0 0 0
+c
+d 21 1 0 0 0
+c
+d 22 1 0 0 0
+c
+d 23 1 0 0 0
+c
+d 810 4 1 0 0
+c
+d 799 1 0 0 0
+c
+d 919 1 0 0 0
+c
+d 933 2 0 1 0
+c
+d 791 2 0 2 0
+c
+d 756 1 0 1 0
+c
+d 757 2 0 0 0
+c
+d 556 3 0 0 0
+c
+d 1169 1 0 0 0
+c
+d 1170 1 0 0 0
+c
+d 478 1 0 1 0
+c
+d 483 1 0 1 0
+c
+d 211 2 0 0 0
+c
+d 1231 1 0 0 0
+c
+d 17 4 0 0 0
+c
+d 622 1 0 1 0
+c
+d 1034 1 0 0 0
+c
+d 1035 1 0 1 0
+c
+d 31 1 0 0 0
+c
+d 32 1 0 0 0
+c
+d 862 3 0 1 0
+c
+d 156 1 0 0 0
+c
+d 400 1 0 0 0
+c
+d 437 2 0 1 0
+c
+d 9 3 0 2 0
+c
+d 789 3 0 2 0
+c
+d 120 1 0 0 0
+c
+d 123 1 0 0 0
+c
+d 1286 1 0 0 0
+c
+d 1287 1 0 0 0
+c
+d 413 3 1 0 0
+c
+d 606 1 0 1 0
+c
+d 607 1 0 1 0
+c
+d 55 3 0 0 0
+c
+d 164 1 0 1 0
+c
+d 166 2 0 1 0
+c
+d 806 4 1 0 0
+c
+d 157 2 0 0 0
+c
+d 511 2 0 0 0
+c
+d 74 2 0 0 0
+c
+d 242 4 0 0 0
+c
+d 148 2 0 0 0
+c
+d 232 1 0 0 0
+c
+d 48 1 0 0 0
+c
+d 49 1 0 0 0
+c
+d 584 2 0 0 0
+c
+d 471 2 1 0 0
+c
+d 473 1 0 0 0
+c
+d 111 1 0 0 0
+c
+d 146 2 0 0 0
+c
+d 89 2 0 0 0
+c
+d 119 1 0 0 0
+c
+d 19 2 0 2 0
+c
+d 22 1 0 0 0
+c
+d 457 1 0 0 0
+c
+d 466 2 1 0 0
+c
+d 148 2 0 1 0
+c
+d 232 1 0 1 0
+c
+d 127 3 0 1 0
+c
+d 998 2 0 0 0
+c
+d 437 4 0 0 0
+c
+d 50 1 0 1 0
+c
+d 51 2 0 1 0
+c
+d 143 3 0 0 0
+c
+d 610 1 0 1 0
+c
+d 990 1 0 1 0
+c
+d 146 2 0 1 0
+c
+d 301 3 1 0 0
+c
+d 516 1 0 0 0
+c
+d 517 2 0 1 0
+c
+d 650 2 1 0 0
+c
+d 656 1 0 0 0
+c
+d 650 2 0 2 0
+c
+d 510 1 0 0 0
+c
+d 517 1 0 0 0
+c
+d 520 1 0 0 0
+c
+d 862 1 0 1 0
+c
+d 863 1 0 0 0
+c
+d 864 1 0 1 0
+c
+d 757 1 0 1 0
+c
+d 758 1 0 1 0
+c
+d 95 2 0 0 0
+c
+d 96 1 0 0 0
+c
+d 738 2 0 1 0
+c
+d 854 1 0 1 0
+c
+d 787 4 1 0 0
+c
+d 120 2 0 1 0
+c
+d 748 1 0 1 0
+c
+d 749 1 0 0 0
+c
+d 301 1 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 1212 1 0 0 0
+c
+d 19 2 0 0 0
+c
+d 982 1 0 0 0
+c
+d 16 2 1 0 0
+c
+d 93 1 0 0 0
+c
+d 973 2 0 0 0
+c
+d 575 4 0 0 0
+c
+d 569 1 0 0 0
+c
+d 1051 1 0 0 0
+c
+d 185 3 0 0 0
+c
+d 594 1 0 0 0
+c
+d 673 1 0 0 0
+c
+d 565 3 0 2 0
+c
+d 550 1 0 1 0
+c
+d 551 2 0 0 0
+c
+d 529 1 0 0 0
+c
+d 550 2 1 0 0
+c
+d 96 2 0 0 0
+c
+d 98 1 1 0 0
+c
+d 471 1 0 1 0
+c
+d 473 2 0 1 0
+c
+d 264 1 0 0 0
+c
+d 285 1 0 0 0
+c
+d 264 1 0 1 0
+c
+d 265 2 0 0 0
+c
+d 286 1 0 1 0
+c
+d 242 3 1 0 0
+c
+d 584 2 0 1 0
+c
+d 585 1 0 1 0
+c
+d 457 2 0 2 0
+c
+d 466 1 0 0 0
+c
+d 1315 3 0 0 0
+c
+d 1316 1 0 0 0
+c
+d 21 2 0 0 0
+c
+d 29 1 1 0 0
+c
+d 51 3 1 0 0
+c
+d 1254 3 0 0 0
+c
+d 436 4 0 0 0
+c
+d 148 3 0 1 0
+c
+d 120 4 0 0 0
+c
+d 413 3 0 0 0
+c
+d 146 1 0 0 0
+c
+d 232 1 0 0 0
+c
+d 799 3 1 0 0
+c
+d 748 1 0 0 0
+c
+d 893 1 0 1 0
+c
+d 894 1 0 1 0
+c
+d 572 1 0 0 0
+c
+d 574 1 0 0 0
+c
+d 1269 2 0 0 0
+c
+d 359 2 0 0 0
+c
+d 294 1 1 0 0
+c
+d 297 1 0 0 0
+c
+d 565 1 0 1 0
+c
+d 567 1 0 1 0
+c
+d 756 2 0 0 0
+c
+d 111 1 0 0 0
+c
+d 146 1 0 0 0
+c
+d 191 1 0 1 0
+c
+d 192 1 0 0 0
+c
+d 185 3 1 0 0
+c
+d 359 1 0 0 0
+c
+d 360 1 0 0 0
+c
+d 143 1 0 0 0
+c
+d 144 1 0 0 0
+c
+d 621 2 0 0 0
+c
+d 470 1 0 1 0
+c
+d 477 2 0 1 0
+c
+d 178 1 0 0 0
+c
+d 179 2 0 0 0
+c
+d 1237 3 0 0 0
+c
+d 478 2 0 0 0
+c
+d 148 1 0 0 0
+c
+d 238 2 0 0 0
+c
+d 1285 4 1 0 0
+c
+d 737 2 0 0 0
+c
+d 706 2 0 0 0
+c
+d 966 1 0 0 0
+c
+d 967 1 0 0 0
+c
+d 1266 3 0 0 0
+c
+d 304 2 0 1 0
+c
+d 801 2 0 0 0
+c
+d 737 1 0 0 0
+c
+d 753 1 0 0 0
+c
+d 754 1 0 0 0
+c
+d 775 3 1 0 0
+c
+d 755 3 1 0 0
+c
+d 311 4 1 0 0
+c
+d 159 1 0 0 0
+c
+d 184 2 0 0 0
+c
+d 1184 1 0 0 0
+c
+d 1185 2 0 0 0
+c
+d 716 3 0 1 0
+c
+d 241 1 0 0 0
+c
+d 242 1 0 0 0
+c
+d 119 2 1 0 0
+c
+d 120 1 0 0 0
+c
+d 360 4 0 0 0
+c
+d 1170 1 0 1 0
+c
+d 1184 2 0 0 0
+c
+d 829 3 0 0 0
+c
+d 69 3 1 0 0
+c
+d 411 1 1 0 0
+c
+d 413 1 0 0 0
+c
+d 419 1 0 0 0
+c
+d 304 3 0 1 0
+c
+d 143 3 1 0 0
+c
+d 146 2 0 0 0
+c
+d 294 1 0 0 0
+c
+d 60 3 1 0 0
+c
+d 251 2 0 0 0
+c
+d 252 1 0 0 0
+c
+d 1090 1 0 0 0
+c
+d 1091 1 0 1 0
+c
+d 272 1 0 0 0
+c
+d 282 1 0 0 0
+c
+d 67 1 0 0 0
+c
+d 68 2 1 0 0
+c
+d 436 4 1 0 0
+c
+d 574 1 0 1 0
+c
+d 795 1 0 0 0
+c
+d 248 1 1 0 0
+c
+d 249 1 0 0 0
+c
+d 250 1 0 0 0
+c
+d 1300 2 0 0 0
+c
+d 1301 1 0 0 0
+c
+d 265 1 0 1 0
+c
+d 266 1 0 1 0
+c
+d 606 1 0 0 0
+c
+d 635 1 0 0 0
+c
+d 636 1 0 0 0
+c
+d 811 2 0 0 0
+c
+d 262 1 0 0 0
+c
+d 264 2 0 0 0
+c
+d 1303 1 0 1 0
+c
+d 1304 2 0 0 0
+c
+d 1184 2 0 0 0
+c
+d 511 1 1 0 0
+c
+d 513 2 0 0 0
+c
+d 264 4 1 0 0
+c
+d 690 1 0 1 0
+c
+d 705 1 0 1 0
+c
+d 437 2 0 0 0
+c
+d 454 1 1 0 0
+c
+d 615 4 1 0 0
+c
+d 1013 3 1 0 0
+c
+d 89 1 0 0 0
+c
+d 91 1 1 0 0
+c
+d 92 1 0 0 0
+c
+d 26 1 0 1 0
+c
+d 27 3 1 0 0
+c
+d 1069 3 1 0 0
+c
+d 119 1 0 1 0
+c
+d 120 2 0 0 0
+c
+d 132 1 0 0 0
+c
+d 513 2 0 0 0
+c
+d 120 1 1 0 0
+c
+d 127 2 0 0 0
+c
+d 23 4 0 0 0
+c
+d 756 2 1 0 0
+c
+d 772 1 0 0 0
+c
+d 466 2 0 1 0
+c
+d 232 3 1 0 0
+c
+d 965 4 1 0 0
+c
+d 242 3 1 0 0
+c
+d 1156 2 0 0 0
+c
+d 75 2 1 0 0
+c
+d 96 4 1 0 0
+c
+d 21 3 0 2 0
+c
+d 49 1 0 0 0
+c
+d 50 1 0 0 0
+c
+d 120 1 0 1 0
+c
+d 125 2 0 1 0
+c
+d 333 1 0 0 0
+c
+d 338 1 0 0 0
+c
+d 339 1 1 0 0
+c
+d 148 2 0 2 0
+c
+d 599 2 1 0 0
+c
+d 606 1 0 0 0
+c
+d 455 3 0 0 0
+c
+d 126 2 0 1 0
+c
+d 19 1 0 1 0
+c
+d 622 1 0 1 0
+c
+d 159 2 1 0 0
+c
+d 185 1 0 0 0
+c
+d 46 2 0 0 0
+c
+d 701 4 1 0 0
+c
+d 12 2 0 0 0
+c
+d 126 3 1 0 0
+c
+d 1192 4 1 0 0
+c
+d 60 1 0 0 0
+c
+d 1007 1 0 0 0
+c
+d 647 4 0 0 0
+c
+d 311 3 0 1 0
+c
+d 19 2 1 0 0
+c
+d 22 1 0 0 0
+c
+d 129 2 0 0 0
+c
+d 419 2 0 1 0
+c
+d 422 1 0 1 0
+c
+d 343 3 1 0 0
+c
+d 1303 2 0 1 0
+c
+d 1304 1 0 1 0
+c
+d 633 1 0 1 0
+c
+d 634 2 0 1 0
+c
+d 301 1 0 1 0
+c
+d 304 1 0 1 0
+c
+d 211 3 0 0 0
+c
+d 304 1 0 0 0
+c
+d 308 2 0 0 0
+c
+d 301 1 0 1 0
+c
+d 310 3 1 0 0
+c
+d 243 1 0 0 0
+c
+d 244 1 0 0 0
+c
+d 1184 4 0 1 0
+c
+d 1201 2 0 0 0
+c
+d 184 1 0 1 0
+c
+d 196 2 0 1 0
+c
+d 261 3 0 2 0
+c
+d 252 1 0 0 0
+c
+d 259 1 0 0 0
+c
+d 1008 3 0 0 0
+c
+d 1008 2 0 0 0
+c
+d 780 2 1 0 0
+c
+d 781 1 0 0 0
+c
+d 700 1 0 0 0
+c
+d 701 2 1 0 0
+c
+d 205 1 0 0 0
+c
+d 206 2 1 0 0
+c
+d 551 4 0 0 0
+c
+d 10 1 0 0 0
+c
+d 1269 1 0 0 0
+c
+d 748 1 0 0 0
+c
+d 749 1 0 0 0
+c
+d 119 2 0 0 0
+c
+d 101 2 1 0 0
+c
+d 111 1 0 0 0
+c
+d 261 3 0 1 0
+c
+d 217 2 0 2 0
+c
+d 241 1 0 0 0
+c
+d 737 1 0 0 0
+c
+d 753 1 0 1 0
+c
+d 208 1 0 0 0
+c
+d 1244 1 0 0 0
+c
+d 286 4 1 0 0
+c
+d 795 2 1 0 0
+c
+d 908 1 0 0 0
+c
+d 1226 2 0 1 0
+c
+d 50 1 0 1 0
+c
+d 51 2 0 1 0
+c
+d 301 3 0 0 0
+c
+d 737 1 0 0 0
+c
+d 743 1 0 1 0
+c
+d 753 1 0 1 0
+c
+d 559 3 0 1 0
+c
+d 1203 2 0 1 0
+c
+d 183 1 0 1 0
+c
+d 193 2 0 0 0
+c
+d 212 1 0 0 0
+c
+d 213 1 0 0 0
+c
+d 127 2 0 2 0
+c
+d 973 2 1 0 0
+c
+d 974 1 0 0 0
+c
+d 656 3 1 0 0
+c
+d 274 1 0 0 0
+c
+d 275 1 1 0 0
+c
+d 715 4 1 0 0
+c
+d 196 2 1 0 0
+c
+d 197 1 0 0 0
+c
+d 755 2 0 0 0
+c
+d 955 4 0 0 0
+c
+d 272 3 1 0 0
+c
+d 437 1 0 0 0
+c
+d 444 1 0 0 0
+c
+d 1303 1 0 0 0
+c
+d 1304 1 0 0 0
+c
+d 799 2 0 1 0
+c
+d 933 1 0 1 0
+c
+d 75 2 0 0 0
+c
+d 799 3 1 0 0
+c
+d 246 1 0 0 0
+c
+d 252 1 0 0 0
+c
+d 241 1 0 0 0
+c
+d 242 1 1 0 0
+c
+d 247 1 0 0 0
+c
+d 473 4 1 0 0
+c
+d 281 3 1 0 0
+c
+d 922 3 0 1 0
+c
+d 753 3 1 0 0
+c
+d 264 1 0 0 0
+c
+d 285 1 0 0 0
+c
+d 119 2 0 0 0
+c
+d 413 3 1 0 0
+c
+d 61 1 0 0 0
+c
+d 65 1 0 0 0
+c
+d 1275 2 0 0 0
+c
+d 50 1 0 0 0
+c
+d 51 1 0 0 0
+c
+d 55 2 0 0 0
+c
+d 694 1 1 0 0
+c
+d 21 2 0 0 0
+c
+d 359 3 1 0 0
+c
+d 125 4 1 0 0
+c
+d 829 2 0 1 0
+c
+d 830 1 0 0 0
+c
+d 1240 3 1 0 0
+c
+d 59 1 0 0 0
+c
+d 60 1 0 0 0
+c
+d 243 1 0 1 0
+c
+d 246 1 0 0 0
+c
+d 248 1 0 1 0
+c
+d 272 1 0 0 0
+c
+d 282 1 1 0 0
+c
+d 1227 1 0 0 0
+c
+d 259 2 1 0 0
+c
+d 262 1 0 0 0
+c
+d 1087 2 0 0 0
+c
+d 1088 1 0 0 0
+c
+d 803 2 0 0 0
+c
+d 804 1 0 0 0
+c
+d 568 1 0 1 0
+c
+d 572 1 0 0 0
+c
+d 1055 2 0 1 0
+c
+d 93 1 0 0 0
+c
+d 133 2 0 0 0
+c
+d 21 1 0 0 0
+c
+d 23 3 0 0 0
+c
+d 238 1 0 0 0
+c
+d 239 2 0 0 0
+c
+d 199 4 1 0 0
+c
+d 199 2 0 0 0
+c
+d 594 3 1 0 0
+c
+d 1163 2 0 0 0
+c
+d 28 1 0 0 0
+c
+d 29 1 0 0 0
+c
+d 592 4 1 0 0
+c
+d 799 3 1 0 0
+c
+d 49 1 0 1 0
+c
+d 50 2 1 0 0
+c
+d 51 1 0 0 0
+c
+d 701 2 0 0 0
+c
+d 799 3 1 0 0
+c
+d 554 2 0 0 0
+c
+d 554 3 0 2 0
+c
+d 756 1 0 0 0
+c
+d 757 1 0 1 0
+c
+d 1269 2 0 1 0
+c
+d 259 1 0 0 0
+c
+d 260 1 0 0 0
+c
+d 437 2 0 2 0
+c
+d 157 1 0 0 0
+c
+d 358 1 0 0 0
+c
+d 359 1 0 0 0
+c
+d 194 1 0 1 0
+c
+d 204 2 0 1 0
+c
+d 965 1 0 0 0
+c
+d 970 1 0 0 0
+c
+d 972 1 0 0 0
+c
+d 418 1 0 0 0
+c
+d 1086 1 0 1 0
+c
+d 1087 1 0 1 0
+c
+d 959 3 0 0 0
+c
+d 700 4 1 0 0
+c
+d 129 3 1 0 0
+c
+d 243 1 0 0 0
+c
+d 248 1 0 0 0
+c
+d 592 2 0 0 0
+c
+d 507 1 0 0 0
+c
+d 514 2 1 0 0
+c
+d 599 3 1 0 0
+c
+d 594 1 0 1 0
+c
+d 673 1 0 1 0
+c
+d 26 3 0 0 0
+c
+d 21 2 0 0 0
+c
+d 185 3 0 1 0
+c
+d 186 1 0 0 0
+c
+d 861 2 0 0 0
+c
+d 1176 4 1 0 0
+c
+d 41 3 0 0 0
+c
+d 42 1 0 0 0
+c
+d 12 1 0 0 0
+c
+d 1266 1 0 0 0
+c
+d 552 2 0 0 0
+c
+d 615 2 0 0 0
+c
+d 616 1 0 0 0
+c
+d 24 1 0 0 0
+c
+d 25 2 0 0 0
+c
+d 26 1 1 0 0
+c
+d 551 3 0 1 0
+c
+d 1170 1 0 0 0
+c
+d 1184 1 0 0 0
+c
+d 93 1 0 1 0
+c
+d 133 1 0 1 0
+c
+d 259 1 0 1 0
+c
+d 260 3 0 0 0
+c
+d 445 1 0 0 0
+c
+d 446 2 0 2 0
+c
+d 551 2 0 0 0
+c
+d 564 1 0 0 0
+c
+d 18 2 0 0 0
+c
+d 784 2 0 0 0
+c
+d 787 2 0 1 0
+c
+d 1021 4 1 0 0
+c
+d 121 2 0 0 0
+c
+d 89 3 0 1 0
+c
+d 554 4 0 0 0
+c
+d 556 1 0 0 0
+c
+d 557 1 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 1161 1 0 0 0
+c
+d 181 4 0 0 0
+c
+d 791 2 0 0 0
+c
+d 936 1 1 0 0
+c
+d 162 1 0 0 0
+c
+d 360 1 0 1 0
+c
+d 361 1 0 1 0
+c
+d 24 1 0 0 0
+c
+d 25 1 0 0 0
+c
+d 956 2 0 1 0
+c
+d 196 2 0 0 0
+c
+d 198 1 1 0 0
+c
+d 37 1 0 0 0
+c
+d 38 1 0 0 0
+c
+d 610 3 1 0 0
+c
+d 159 1 0 0 0
+c
+d 185 1 0 0 0
+c
+d 36 3 1 0 0
+c
+d 413 1 0 1 0
+c
+d 419 2 0 1 0
+c
+d 286 3 0 1 0
+c
+d 423 1 0 0 0
+c
+d 470 2 0 0 0
+c
+d 148 2 0 0 0
+c
+d 239 1 1 0 0
+c
+d 621 2 0 1 0
+c
+d 623 1 0 0 0
+c
+d 537 3 0 0 0
+c
+d 608 4 1 0 0
+c
+d 22 2 1 0 0
+c
+d 23 1 0 0 0
+c
+d 358 1 1 0 0
+c
+d 359 1 0 0 0
+c
+d 591 3 0 0 0
+c
+d 214 4 1 0 0
+c
+d 93 3 1 0 0
+c
+d 211 1 0 0 0
+c
+d 212 1 0 0 0
+c
+d 791 2 0 0 0
+c
+d 793 1 0 1 0
+c
+d 811 2 0 0 0
+c
+d 815 1 1 0 0
+c
+d 795 3 1 0 0
+c
+d 835 2 0 0 0
+c
+d 900 1 0 0 0
+c
+d 55 1 0 0 0
+c
+d 691 3 0 0 0
+c
+d 22 1 0 0 0
+c
+d 23 1 0 0 0
+c
+d 111 2 0 0 0
+c
+d 146 1 1 0 0
+c
+d 866 3 1 0 0
+c
+d 120 4 1 0 0
+c
+d 718 1 0 0 0
+c
+d 737 1 0 0 0
+c
+d 846 1 1 0 0
+c
+d 107 3 0 2 0
+c
+d 156 4 1 0 0
+c
+d 586 3 1 0 0
+c
+d 253 2 0 0 0
+c
+d 258 2 1 0 0
+c
+d 358 1 0 0 0
+c
+d 359 1 0 0 0
+c
+d 754 3 0 0 0
+c
+d 294 3 1 0 0
+c
+d 19 1 0 0 0
+c
+d 22 1 0 0 0
+c
+d 737 3 0 2 0
+c
+d 43 3 0 0 0
+c
+d 51 1 0 1 0
+c
+d 56 2 0 1 0
+c
+d 51 1 0 0 0
+c
+d 56 1 0 0 0
+c
+d 965 2 0 0 0
+c
+d 973 1 0 0 0
+c
+d 724 2 0 1 0
+c
+d 725 2 0 1 0
+c
+d 66 2 0 0 0
+c
+d 564 3 0 0 0
+c
+d 437 3 0 2 0
+c
+d 9 1 0 0 0
+c
+d 10 1 0 0 0
+c
+d 1013 1 0 0 0
+c
+d 1017 1 0 0 0
+c
+d 686 2 0 1 0
+c
+d 21 1 0 0 0
+c
+d 24 1 0 0 0
+c
+d 327 4 1 0 0
+c
+d 632 2 0 0 0
+c
+d 100 1 0 0 0
+c
+d 1006 1 0 0 0
+c
+d 21 1 0 0 0
+c
+d 22 1 0 0 0
+c
+d 578 3 0 2 0
+c
+d 384 1 0 1 0
+c
+d 385 1 0 1 0
+c
+d 310 3 0 1 0
+c
+d 748 2 0 0 0
+c
+d 796 2 1 0 0
+c
+d 797 1 0 0 0
+c
+d 686 3 0 0 0
+c
+d 673 5 1 0 0
+c
+d 791 3 0 2 0
+c
+d 718 2 0 0 0
+c
+d 1172 1 0 0 0
+c
+d 1185 1 0 0 0
+c
+d 193 1 0 0 0
+c
+d 195 1 0 0 0
+c
+d 796 3 0 0 0
+c
+d 551 1 0 1 0
+c
+d 554 2 0 1 0
+c
+d 250 1 0 0 0
+c
+d 251 1 0 0 0
+c
+d 787 3 0 2 0
+c
+d 52 2 0 0 0
+c
+d 1303 1 0 1 0
+c
+d 774 3 1 0 0
+c
+d 618 1 0 1 0
+c
+d 965 2 0 1 0
+c
+d 348 1 0 1 0
+c
+d 1125 1 0 0 0
+c
+d 746 3 1 0 0
+c
+d 132 1 0 0 0
+c
+d 496 2 0 0 0
+c
+d 19 1 0 0 0
+c
+d 22 2 1 0 0
+c
+d 718 4 1 0 0
+c
+d 68 2 0 0 0
+c
+d 724 4 0 0 0
+c
+d 67 2 0 0 0
+c
+d 101 1 0 1 0
+c
+d 111 1 0 1 0
+c
+d 861 3 1 0 0
+c
+d 84 2 0 0 0
+c
+d 1288 1 0 0 0
+c
+d 734 3 0 0 0
+c
+d 973 1 0 0 0
+c
+d 975 1 0 0 0
+c
+d 976 2 0 0 0
+c
+d 690 2 0 0 0
+c
+d 705 1 0 1 0
+c
+d 836 2 0 0 0
+c
+d 134 1 0 0 0
+c
+d 136 1 0 1 0
+c
+d 720 4 0 1 0
+c
+d 246 2 1 0 0
+c
+d 252 1 0 0 0
+c
+d 126 1 0 1 0
+c
+d 127 1 0 0 0
+c
+d 24 2 0 1 0
+c
+d 25 1 0 0 0
+c
+d 252 1 0 0 0
+c
+d 259 1 0 0 0
+c
+d 437 1 1 0 0
+c
+d 453 1 0 0 0
+c
+d 556 1 0 0 0
+c
+d 557 1 0 0 0
+c
+d 791 3 0 1 0
+c
+d 848 4 1 0 0
+c
+d 16 2 0 0 0
+c
+d 120 1 0 0 0
+c
+d 121 1 0 0 0
+c
+d 44 3 0 0 0
+c
+d 207 1 0 0 0
+c
+d 1246 1 0 0 0
+c
+d 686 2 0 0 0
+c
+d 311 3 0 1 0
+c
+d 463 4 1 0 0
+c
+d 555 4 0 1 0
+c
+d 715 2 0 0 0
+c
+d 253 3 0 1 0
+c
+d 795 1 0 1 0
+c
+d 818 1 0 0 0
+c
+d 60 1 0 0 0
+c
+d 61 2 0 0 0
+c
+d 270 1 0 1 0
+c
+d 272 2 0 1 0
+c
+d 1184 1 0 0 0
+c
+d 1185 1 0 0 0
+c
+d 1185 1 0 0 0
+c
+d 1201 1 0 0 0
+c
+d 252 2 0 0 0
+c
+d 259 1 0 0 0
+c
+d 159 1 0 0 0
+c
+d 185 2 1 0 0
+c
+d 419 2 0 0 0
+c
+d 835 3 1 0 0
+c
+d 39 1 0 0 0
+c
+d 40 1 0 0 0
+c
+d 355 2 0 1 0
+c
+d 357 1 0 1 0
+c
+d 565 2 0 0 0
+c
+d 354 3 1 0 0
+c
+d 22 4 0 2 0
+c
+d 55 1 0 0 0
+c
+d 693 1 0 0 0
+c
+d 1266 2 0 0 0
+c
+d 550 2 0 0 0
+c
+d 686 3 0 0 0
+c
+d 152 1 0 0 0
+c
+d 153 1 0 0 0
+c
+d 294 3 1 0 0
+c
+d 19 2 0 2 0
+c
+d 908 3 0 0 0
+c
+d 650 1 0 0 0
+c
+d 656 2 0 0 0
+c
+d 66 1 1 0 0
+c
+d 67 2 0 0 0
+c
+d 970 2 0 0 0
+c
+d 972 1 0 0 0
+c
+d 261 3 0 2 0
+c
+d 734 3 0 2 0
+c
+d 91 2 0 0 0
+c
+d 598 1 0 1 0
+c
+d 599 1 0 1 0
+c
+d 125 3 1 0 0
+c
+d 861 1 0 0 0
+c
+d 871 1 0 1 0
+c
+d 211 3 0 2 0
+c
+d 791 2 0 2 0
+c
+d 936 2 0 0 0
+c
+d 1126 2 0 0 0
+c
+d 199 3 0 0 0
+c
+d 675 3 0 1 0
+c
+d 634 1 0 0 0
+c
+d 635 1 0 1 0
+c
+d 642 1 0 1 0
+c
+d 796 4 1 0 0
+c
+d 193 3 1 0 0
+c
+d 838 1 0 0 0
+c
+d 839 1 0 0 0
+c
+d 100 2 0 2 0
+c
+d 105 1 0 0 0
+c
+d 310 1 0 0 0
+c
+d 311 2 0 0 0
+c
+d 120 4 1 0 0
+c
+d 86 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 217 1 0 0 0
+c
+d 241 2 0 0 0
+c
+d 1285 4 0 0 0
+c
+d 1259 2 0 0 0
+c
+d 1022 3 1 0 0
+c
+d 49 2 0 1 0
+c
+d 50 1 0 1 0
+c
+d 529 1 0 0 0
+c
+d 532 1 0 0 0
+c
+d 199 2 0 0 0
+c
+d 756 1 1 0 0
+c
+d 769 1 0 0 0
+c
+d 772 1 0 0 0
+c
+d 1170 2 0 0 0
+c
+d 570 1 0 1 0
+c
+d 795 2 0 0 0
+c
+d 646 2 0 0 0
+c
+d 146 2 0 0 0
+c
+d 532 2 0 0 0
+c
+d 556 3 0 0 0
+c
+d 564 1 0 0 0
+c
+d 565 2 0 0 0
+c
+d 242 2 0 0 0
+c
+d 304 1 0 1 0
+c
+d 310 1 0 0 0
+c
+d 19 4 1 0 0
+c
+d 550 2 0 1 0
+c
+d 553 1 0 0 0
+c
+d 195 3 1 0 0
+c
+d 21 3 1 0 0
+c
+d 989 3 0 0 0
+c
+d 69 3 1 0 0
+c
+d 21 2 0 0 0
+c
+d 529 1 0 1 0
+c
+d 550 1 0 1 0
+c
+d 1069 1 0 0 0
+c
+d 418 2 0 0 0
+c
+d 594 2 0 0 0
+c
+d 532 3 0 1 0
+c
+d 1285 4 1 0 0
+c
+d 157 2 0 2 0
+c
+d 436 1 0 0 0
+c
+d 578 1 0 0 0
+c
+d 1043 2 0 0 0
+c
+d 804 1 0 0 0
+c
+d 915 2 1 0 0
+c
+d 554 1 0 0 0
+c
+d 555 1 0 0 0
+c
+d 799 1 0 0 0
+c
+d 800 1 0 0 0
+c
+d 429 1 0 0 0
+c
+d 430 2 0 1 0
+c
+d 54 2 1 0 0
+c
+d 1312 1 0 0 0
+c
+d 392 1 0 0 0
+c
+d 1125 1 1 0 0
+c
+d 1127 1 0 0 0
+c
+d 218 1 0 1 0
+c
+d 222 1 0 1 0
+c
+d 18 2 0 0 0
+c
+d 60 3 0 2 0
+c
+d 1017 1 0 0 0
+c
+d 1022 2 0 2 0
+c
+d 132 2 0 0 0
+c
+d 1020 4 0 0 0
+c
+d 959 2 0 0 0
+c
+d 437 2 1 0 0
+c
+d 436 1 0 0 0
+c
+d 1043 1 0 0 0
+c
+d 119 4 0 0 0
+c
+d 437 1 0 0 0
+c
+d 575 2 0 2 0
+c
+d 775 1 0 1 0
+c
+d 780 2 0 1 0
+c
+d 618 2 0 0 0
+c
+d 639 1 0 0 0
+c
+d 199 2 0 2 0
+c
+d 559 2 0 0 0
+c
+d 568 1 1 0 0
+c
+d 660 3 0 1 0
+c
+d 534 3 1 0 0
+c
+d 133 2 0 0 0
+c
+d 134 1 0 1 0
+c
+d 473 3 0 0 0
+c
+d 474 1 0 0 0
+c
+d 1201 1 0 0 0
+c
+d 1202 1 0 0 0
+c
+d 26 2 0 0 0
+c
+d 28 1 1 0 0
+c
+d 823 2 0 1 0
+c
+d 259 2 0 1 0
+c
+d 718 4 1 0 0
+c
+d 159 2 0 0 0
+c
+d 1266 1 0 0 0
+c
+d 1285 1 0 0 0
+c
+d 592 3 1 0 0
+c
+d 799 3 1 0 0
+c
+d 26 3 0 0 0
+c
+d 621 3 1 0 0
+c
+d 301 4 0 0 0
+c
+d 751 2 0 0 0
+c
+d 752 2 0 0 0
+c
+d 437 4 1 0 0
+c
+d 146 1 0 0 0
+c
+d 238 1 0 0 0
+c
+d 239 1 1 0 0
+c
+d 592 1 0 0 0
+c
+d 594 1 0 0 0
+c
+d 46 2 0 0 0
+c
+d 855 4 0 2 0
+c
+d 60 1 0 0 0
+c
+d 65 1 0 1 0
+c
+d 1306 1 0 0 0
+c
+d 557 1 0 1 0
+c
+d 565 2 0 1 0
+c
+d 12 1 0 0 0
+c
+d 1267 1 0 0 0
+c
+d 46 3 0 0 0
+c
+d 168 1 0 0 0
+c
+d 169 2 0 2 0
+c
+d 1313 4 0 0 0
+c
+d 965 1 0 0 0
+c
+d 968 1 1 0 0
+c
+d 970 1 0 0 0
+c
+d 49 3 0 0 0
+c
+d 252 2 0 0 0
+c
+d 46 1 0 0 0
+c
+d 1313 2 0 0 0
+c
+d 272 3 0 1 0
+c
+d 55 1 0 0 0
+c
+d 66 2 1 0 0
+c
+d 184 2 0 1 0
+c
+d 196 1 0 1 0
+c
+d 23 3 1 0 0
+c
+d 155 3 0 1 0
+c
+d 578 1 0 1 0
+c
+d 955 2 0 1 0
+c
+d 127 1 0 0 0
+c
+d 129 1 0 1 0
+c
+d 836 2 0 0 0
+c
+d 813 4 0 0 0
+c
+d 127 1 0 1 0
+c
+d 129 1 0 1 0
+c
+d 423 2 0 2 0
+c
+d 743 3 0 0 0
+c
+d 799 4 0 0 0
+c
+d 748 3 1 0 0
+c
+d 1201 2 0 0 0
+c
+d 649 1 1 0 0
+c
+d 650 2 0 0 0
+c
+d 369 4 0 0 0
+c
+d 1156 3 1 0 0
+c
+d 835 1 0 0 0
+c
+d 900 1 0 0 0
+c
+d 25 1 0 0 0
+c
+d 27 1 0 0 0
+c
+d 529 3 1 0 0
+c
+d 716 1 0 0 0
+c
+d 717 1 0 0 0
+c
+d 718 2 0 0 0
+c
+d 632 4 1 0 0
+c
+d 681 4 0 1 0
+c
+d 1156 4 0 0 0
+c
+d 787 3 1 0 0
+c
+d 575 1 0 1 0
+c
+d 926 2 1 0 0
+c
+d 720 1 0 1 0
+c
+d 723 1 0 1 0
+c
+d 1165 2 0 0 0
+c
+d 238 1 0 0 0
+c
+d 239 1 0 0 0
+c
+d 74 3 0 2 0
+c
+d 101 1 1 0 0
+c
+d 111 1 0 0 0
+c
+d 835 1 0 0 0
+c
+d 836 1 0 0 0
+c
+d 368 2 0 0 0
+c
+d 575 1 1 0 0
+c
+d 796 2 0 0 0
+c
+d 28 3 0 2 0
+c
+d 523 2 0 0 0
+c
+d 26 1 0 1 0
+c
+d 28 1 0 0 0
+c
+d 1315 1 0 1 0
+c
+d 301 2 0 0 0
+c
+d 54 1 0 0 0
+c
+d 1303 1 0 0 0
+c
+d 854 1 0 0 0
+c
+d 866 1 0 1 0
+c
+d 1313 3 0 0 0
+c
+d 212 1 0 1 0
+c
+d 213 1 0 1 0
+c
+d 12 2 0 0 0
+c
+d 1269 1 1 0 0
+c
+d 56 3 1 0 0
+c
+d 377 3 0 1 0
+c
+d 592 3 1 0 0
+c
+d 301 3 0 0 0
+c
+d 554 4 1 0 0
+c
+d 92 1 0 1 0
+c
+d 119 2 0 0 0
+c
+d 21 2 0 2 0
+c
+d 327 2 1 0 0
+c
+d 334 1 0 0 0
+c
+d 213 4 0 0 0
+c
+d 304 1 0 0 0
+c
+d 308 1 0 0 0
+c
+d 311 1 1 0 0
+c
+d 184 3 0 0 0
+c
+d 101 3 0 1 0
+c
+d 126 2 0 1 0
+c
+d 127 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 471 2 1 0 0
+c
+d 756 1 0 0 0
+c
+d 763 1 0 0 0
+c
+d 584 2 0 0 0
+c
+d 242 2 0 0 0
+c
+d 1266 2 0 0 0
+c
+d 1267 2 0 0 0
+c
+d 19 3 0 2 0
+c
+d 280 3 0 1 0
+c
+d 281 1 1 0 0
+c
+d 21 2 0 0 0
+c
+d 483 2 0 0 0
+c
+d 533 3 0 2 0
+c
+d 572 3 0 0 0
+c
+d 597 2 0 0 0
+c
+d 598 1 0 1 0
+c
+d 242 1 0 0 0
+c
+d 243 1 0 0 0
+c
+d 575 2 0 0 0
+c
+d 1044 1 0 0 0
+c
+d 756 2 0 1 0
+c
+d 763 1 0 1 0
+c
+d 368 3 1 0 0
+c
+d 262 1 0 0 0
+c
+d 270 1 0 0 0
+c
+d 875 2 0 0 0
+c
+d 28 3 1 0 0
+c
+d 1170 1 0 0 0
+c
+d 1173 1 0 1 0
+c
+d 1184 1 0 1 0
+c
+d 278 2 0 0 0
+c
+d 279 1 1 0 0
+c
+d 737 3 0 0 0
+c
+d 748 1 0 0 0
+c
+d 749 2 0 0 0
+c
+d 795 1 1 0 0
+c
+d 904 1 0 0 0
+c
+d 911 1 0 0 0
+c
+d 395 1 0 1 0
+c
+d 1107 1 0 1 0
+c
+d 1109 1 0 0 0
+c
+d 550 2 0 0 0
+c
+d 384 3 0 2 0
+c
+d 565 3 0 0 0
+c
+d 1274 3 0 2 0
+c
+d 75 3 1 0 0
+c
+d 26 2 0 0 0
+c
+d 93 1 0 0 0
+c
+d 142 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 471 1 0 0 0
+c
+d 353 2 0 0 0
+c
+d 95 3 1 0 0
+c
+d 840 2 0 0 0
+c
+d 841 1 0 0 0
+c
+d 217 2 0 0 0
+c
+d 264 2 0 0 0
+c
+d 285 1 1 0 0
+c
+d 218 3 1 0 0
+c
+d 101 4 1 0 0
+c
+d 96 1 0 0 0
+c
+d 97 1 0 0 0
+c
+d 98 1 0 0 0
+c
+d 26 3 0 2 0
+c
+d 119 3 0 0 0
+c
+d 66 1 0 0 0
+c
+d 67 1 0 0 0
+c
+d 956 4 1 0 0
+c
+d 507 2 0 1 0
+c
+d 91 1 0 0 0
+c
+d 92 1 0 0 0
+c
+d 564 1 0 0 0
+c
+d 788 1 0 0 0
+c
+d 789 1 1 0 0
+c
+d 1114 1 0 0 0
+c
+d 1115 1 0 0 0
+c
+d 270 1 0 1 0
+c
+d 272 2 0 1 0
+c
+d 159 2 0 0 0
+c
+d 799 1 1 0 0
+c
+d 800 2 0 0 0
+c
+d 44 2 0 1 0
+c
+d 45 2 0 1 0
+c
+d 715 1 1 0 0
+c
+d 716 2 0 0 0
+c
+d 602 2 0 0 0
+c
+d 574 2 0 0 0
+c
+d 578 1 0 0 0
+c
+d 956 1 0 0 0
+c
+d 551 1 0 0 0
+c
+d 554 2 1 0 0
+c
+d 19 3 1 0 0
+c
+d 717 3 0 0 0
+c
+d 369 2 1 0 0
+c
+d 370 1 0 0 0
+c
+d 74 2 0 0 0
+c
+d 803 3 1 0 0
+c
+d 748 2 0 0 0
+c
+d 211 3 0 0 0
+c
+d 84 2 0 1 0
+c
+d 591 4 0 0 0
+c
+d 1170 1 1 0 0
+c
+d 1171 3 0 0 0
+c
+d 280 2 0 0 0
+c
+d 801 1 0 0 0
+c
+d 802 1 0 0 0
+c
+d 1168 1 0 0 0
+c
+d 1170 1 0 0 0
+c
+d 467 3 0 0 0
+c
+d 74 2 1 0 0
+c
+d 212 1 0 0 0
+c
+d 213 1 0 0 0
+c
+d 737 1 0 0 0
+c
+d 846 2 1 0 0
+c
+d 557 1 0 0 0
+c
+d 565 1 0 0 0
+c
+d 533 2 0 0 0
+c
+d 534 1 0 0 0
+c
+d 26 2 0 0 0
+c
+d 499 1 1 0 0
+c
+d 500 1 0 0 0
+c
+d 84 2 0 1 0
+c
+d 700 2 0 0 0
+c
+d 701 1 0 0 0
+c
+d 608 4 0 0 0
+c
+d 686 3 0 2 0
+c
+d 700 1 0 0 0
+c
+d 701 2 0 0 0
+c
+d 419 2 0 2 0
+c
+d 111 3 0 2 0
+c
+d 718 1 0 0 0
+c
+d 735 1 0 0 0
+c
+d 19 2 0 1 0
+c
+d 1023 1 0 0 0
+c
+d 217 1 0 1 0
+c
+d 241 2 0 1 0
+c
+d 358 1 0 0 0
+c
+d 359 1 0 0 0
+c
+d 578 2 0 0 0
+c
+d 529 1 0 1 0
+c
+d 532 2 0 1 0
+c
+d 318 2 0 0 0
+c
+d 286 3 0 1 0
+c
+d 505 1 0 0 0
+c
+d 514 2 1 0 0
+c
+d 610 3 0 0 0
+c
+d 616 1 0 1 0
+c
+d 617 2 0 0 0
+c
+d 985 1 0 1 0
+c
+d 69 2 0 0 0
+c
+d 75 4 1 0 0
+c
+d 578 3 1 0 0
+c
+d 248 1 0 0 0
+c
+d 249 3 1 0 0
+c
+d 164 2 0 0 0
+c
+d 437 1 0 0 0
+c
+d 502 1 0 0 0
+c
+d 1303 1 0 1 0
+c
+d 1305 1 0 1 0
+c
+d 660 3 0 0 0
+c
+d 437 2 0 0 0
+c
+d 510 2 1 0 0
+c
+d 407 2 1 0 0
+c
+d 408 1 0 0 0
+c
+d 264 1 0 0 0
+c
+d 286 1 0 0 0
+c
+d 2 1 0 1 0
+c
+d 3 1 0 1 0
+c
+d 746 2 1 0 0
+c
+d 747 1 0 0 0
+c
+d 483 1 0 0 0
+c
+d 488 1 0 0 0
+c
+d 606 4 1 0 0
+c
+d 1023 3 1 0 0
+c
+d 574 3 1 0 0
+c
+d 483 1 0 0 0
+c
+d 488 1 0 1 0
+c
+d 1270 2 0 0 0
+c
+d 107 1 0 1 0
+c
+d 108 1 0 1 0
+c
+d 111 1 0 0 0
+c
+d 529 2 0 0 0
+c
+d 530 2 0 1 0
+c
+d 120 1 0 0 0
+c
+d 121 1 0 0 0
+c
+d 122 1 0 0 0
+c
+d 148 1 0 0 0
+c
+d 239 2 1 0 0
+c
+d 686 4 0 0 0
+c
+d 28 2 1 0 0
+c
+d 29 1 0 0 0
+c
+d 100 3 0 1 0
+c
+d 1185 3 1 0 0
+c
+d 213 1 0 0 0
+c
+d 214 3 0 0 0
+c
+d 514 4 1 0 0
+c
+d 753 4 1 0 0
+c
+d 689 1 0 0 0
+c
+d 690 2 0 0 0
+c
+d 704 1 1 0 0
+c
+d 91 2 0 0 0
+c
+d 132 1 0 1 0
+c
+d 511 2 0 1 0
+c
+d 753 2 0 0 0
+c
+d 62 2 0 0 0
+c
+d 529 1 0 0 0
+c
+d 532 1 0 1 0
+c
+d 46 1 0 0 0
+c
+d 191 2 1 0 0
+c
+d 195 2 0 0 0
+c
+d 551 2 0 0 0
+c
+d 565 2 0 0 0
+c
+d 570 1 0 0 0
+c
+d 738 1 0 0 0
+c
+d 743 1 0 0 0
+c
+d 992 3 1 0 0
+c
+d 26 3 0 0 0
+c
+d 242 3 1 0 0
+c
+d 529 2 0 0 0
+c
+d 1069 1 0 0 0
+c
+d 735 3 0 0 0
+c
+d 622 1 1 0 0
+c
+d 1008 2 0 0 0
+c
+d 250 1 0 1 0
+c
+d 251 2 0 0 0
+c
+d 621 4 1 0 0
+c
+d 556 1 0 0 0
+c
+d 557 1 0 0 0
+c
+d 40 2 0 0 0
+c
+d 757 2 1 0 0
+c
+d 758 1 0 0 0
+c
+d 84 1 0 0 0
+c
+d 1285 1 0 0 0
+c
+d 1288 1 0 0 0
+c
+d 23 4 1 0 0
+c
+d 1285 1 0 0 0
+c
+d 1291 1 0 0 0
+c
+d 854 2 0 2 0
+c
+d 25 1 0 0 0
+c
+d 26 1 0 0 0
+c
+d 27 1 0 0 0
+c
+d 584 1 0 0 0
+c
+d 585 2 0 0 0
+c
+d 195 1 0 0 0
+c
+d 205 2 0 0 0
+c
+d 550 1 0 0 0
+c
+d 551 1 0 0 0
+c
+d 46 1 0 1 0
+c
+d 74 1 0 1 0
+c
+d 12 1 1 0 0
+c
+d 1269 2 0 0 0
+c
+d 499 1 0 0 0
+c
+d 500 2 1 0 0
+c
+d 878 2 0 0 0
+c
+d 55 1 0 0 0
+c
+d 66 1 0 0 0
+c
+d 382 4 1 0 0
+c
+d 17 2 0 0 0
+c
+d 93 1 0 0 0
+c
+d 1013 2 0 0 0
+c
+d 610 2 0 0 0
+c
+d 990 1 0 0 0
+c
+d 101 1 0 1 0
+c
+d 1094 2 0 0 0
+c
+d 716 1 0 0 0
+c
+d 718 2 1 0 0
+c
+d 242 1 1 0 0
+c
+d 243 1 0 0 0
+c
+d 244 1 0 0 0
+c
+d 570 3 0 0 0
+c
+d 544 4 0 0 0
+c
+d 1266 1 0 1 0
+c
+d 1285 2 0 1 0
+c
+d 588 2 0 0 0
+c
+d 589 1 0 0 0
+c
+d 509 1 0 0 0
+c
+d 510 1 0 0 0
+c
+d 93 1 1 0 0
+c
+d 114 1 0 0 0
+c
+d 120 2 1 0 0
+c
+d 125 1 0 0 0
+c
+d 1266 2 0 0 0
+c
+d 488 3 0 1 0
+c
+d 580 1 0 0 0
+c
+d 584 1 0 0 0
+c
+d 18 4 0 0 0
+c
+d 551 2 0 0 0
+c
+d 926 3 0 2 0
+c
+d 45 2 1 0 0
+c
+d 111 1 0 0 0
+c
+d 146 1 0 0 0
+c
+d 384 2 0 0 0
+c
+d 386 1 0 0 0
+c
+d 1111 1 0 0 0
+c
+d 1115 1 0 0 0
+c
+d 89 3 0 1 0
+c
+d 498 3 0 0 0
+c
+d 550 4 1 0 0
+c
+d 132 2 0 0 0
+c
+d 591 2 0 0 0
+c
+d 915 2 0 0 0
+c
+d 919 1 1 0 0
+c
+d 564 4 1 0 0
+c
+d 75 1 0 1 0
+c
+d 84 2 1 0 0
+c
+d 1290 1 0 0 0
+c
+d 340 2 0 0 0
+c
+d 68 2 0 0 0
+c
+d 1258 3 1 0 0
+c
+d 575 1 0 0 0
+c
+d 929 2 0 0 0
+c
+d 932 1 0 0 0
+c
+d 185 1 0 0 0
+c
+d 188 1 1 0 0
+c
+d 199 1 0 0 0
+c
+d 572 2 0 2 0
+c
+d 159 3 0 1 0
+c
+d 858 1 0 0 0
+c
+d 869 2 1 0 0
+c
+d 870 1 0 0 0
+c
+d 62 1 0 0 0
+c
+d 64 1 0 0 0
+c
+d 183 1 0 0 0
+c
+d 196 1 0 0 0
+c
+d 1170 2 0 0 0
+c
+d 718 3 0 2 0
+c
+d 650 2 0 0 0
+c
+d 647 1 0 1 0
+c
+d 659 1 0 0 0
+c
+d 660 1 1 0 0
+c
+d 572 2 0 0 0
+c
+d 568 1 0 0 0
+c
+d 570 1 0 0 0
+c
+d 775 1 0 0 0
+c
+d 786 2 0 0 0
+c
+d 47 1 0 0 0
+c
+d 769 1 0 0 0
+c
+d 46 1 0 0 0
+c
+d 75 2 0 0 0
+c
+d 550 1 0 0 0
+c
+d 551 1 0 0 0
+c
+d 661 1 0 0 0
+c
+d 673 2 0 1 0
+c
+d 89 1 0 1 0
+c
+d 533 1 0 1 0
+c
+d 155 2 0 0 0
+c
+d 176 1 0 1 0
+c
+d 1165 2 0 0 0
+c
+d 597 3 0 1 0
+c
+d 26 1 0 1 0
+c
+d 39 3 0 1 0
+c
+d 101 2 0 0 0
+c
+d 597 1 0 0 0
+c
+d 753 3 0 1 0
+c
+d 206 2 0 0 0
+c
+d 749 2 0 2 0
+c
+d 753 4 1 0 0
+c
+d 264 3 1 0 0
+c
+d 533 2 0 1 0
+c
+d 618 2 0 0 0
+c
+d 965 1 0 0 0
+c
+d 745 1 0 0 0
+c
+d 748 2 0 0 0
+c
+d 217 1 0 0 0
+c
+d 1243 1 0 0 0
+c
+d 428 2 0 1 0
+c
+d 153 2 0 0 0
+c
+d 749 1 0 0 0
+c
+d 751 1 0 0 0
+c
+d 602 2 0 0 0
+c
+d 716 3 0 0 0
+c
+d 153 1 0 1 0
+c
+d 155 1 0 1 0
+c
+d 100 2 0 0 0
+c
+d 21 2 0 0 0
+c
+d 523 3 0 1 0
+c
+d 21 3 1 0 0
+c
+d 505 1 0 0 0
+c
+d 514 1 0 0 0
+c
+d 718 3 1 0 0
+c
+d 532 1 0 0 0
+c
+d 548 2 0 0 0
+c
+d 791 1 0 0 0
+c
+d 829 1 0 0 0
+c
+d 634 1 0 0 0
+c
+d 642 1 0 0 0
+c
+d 107 1 0 1 0
+c
+d 111 1 0 1 0
+c
+d 554 3 1 0 0
+c
+d 199 2 0 0 0
+c
+d 667 4 0 0 0
+c
+d 90 1 1 0 0
+c
+d 91 2 0 0 0
+c
+d 510 2 0 2 0
+c
+d 521 1 0 0 0
+c
+d 551 4 1 0 0
+c
+d 84 3 0 0 0
+c
+d 546 4 0 0 0
+c
+d 747 3 1 0 0
+c
+d 34 3 0 0 0
+c
+d 723 1 0 1 0
+c
+d 724 2 0 0 0
+c
+d 457 3 0 0 0
+c
+d 532 1 0 0 0
+c
+d 534 1 0 0 0
+c
+d 796 2 0 0 0
+c
+d 509 1 0 0 0
+c
+d 510 1 0 0 0
+c
+d 157 3 0 0 0
+c
+d 973 2 0 0 0
+c
+d 592 1 1 0 0
+c
+d 594 2 0 0 0
+c
+d 854 1 0 0 0
+c
+d 866 2 0 0 0
+c
+d 204 2 0 2 0
+c
+d 242 3 1 0 0
+c
+d 534 2 0 0 0
+c
+d 965 1 0 1 0
+c
+d 970 2 0 1 0
+c
+d 422 1 0 0 0
+c
+d 423 2 0 0 0
+c
+d 437 1 0 0 0
+c
+d 1045 1 0 0 0
+c
+d 479 1 0 1 0
+c
+d 480 1 0 1 0
+c
+d 1269 3 0 2 0
+c
+d 620 2 0 0 0
+c
+d 34 2 0 1 0
+c
+d 89 3 1 0 0
+c
+d 266 2 0 0 0
+c
+d 267 1 0 0 0
+c
+d 804 1 0 0 0
+c
+d 805 1 0 1 0
+c
+d 915 1 0 1 0
+c
+d 455 3 1 0 0
+c
+d 21 3 1 0 0
+c
+d 1313 4 1 0 0
+c
+d 737 2 1 0 0
+c
+d 756 1 0 0 0
+c
+d 488 2 0 0 0
+c
+d 545 2 0 1 0
+c
+d 280 4 1 0 0
+c
+d 48 2 0 0 0
+c
+d 301 2 0 0 0
+c
+d 301 1 0 0 0
+c
+d 310 1 0 0 0
+c
+d 791 2 0 2 0
+c
+d 662 3 1 0 0
+c
+d 723 3 0 1 0
+c
+d 209 3 0 0 0
+c
+d 281 2 0 2 0
+c
+d 551 3 0 0 0
+c
+d 839 2 1 0 0
+c
+d 840 1 0 0 0
+c
+d 871 3 1 0 0
+c
+d 621 1 0 0 0
+c
+d 622 1 1 0 0
+c
+d 301 3 0 2 0
+c
+d 756 1 1 0 0
+c
+d 768 2 0 0 0
+c
+d 95 1 0 0 0
+c
+d 1000 1 0 0 0
+c
+d 1001 1 0 0 0
+c
+d 965 2 0 0 0
+c
+d 413 3 1 0 0
+c
+d 565 3 0 0 0
+c
+d 156 2 0 1 0
+c
+d 157 1 0 1 0
+c
+d 1170 2 0 2 0
+c
+d 598 2 0 0 0
+c
+d 600 1 0 0 0
+c
+d 419 1 0 0 0
+c
+d 422 1 0 0 0
+c
+d 16 4 1 0 0
+c
+d 84 1 0 0 0
+c
+d 1285 2 0 2 0
+c
+d 87 3 0 0 0
+c
+d 132 3 0 0 0
+c
+d 565 2 0 1 0
+c
+d 791 1 0 1 0
+c
+d 565 1 0 1 0
+c
+d 791 1 0 0 0
+c
+d 532 1 0 0 0
+c
+d 548 2 0 0 0
+c
+d 1113 2 0 0 0
+c
+d 1114 1 0 0 0
+c
+d 554 1 0 0 0
+c
+d 556 1 0 0 0
+c
+d 419 4 1 0 0
+c
+d 426 1 0 1 0
+c
+d 591 2 0 0 0
+c
+d 36 3 1 0 0
+c
+d 413 2 1 0 0
+c
+d 419 1 0 0 0
+c
+d 965 2 0 0 0
+c
+d 564 2 1 0 0
+c
+d 565 1 0 0 0
+c
+d 48 1 0 1 0
+c
+d 49 1 0 0 0
+c
+d 791 2 0 0 0
+c
+d 718 1 0 0 0
+c
+d 946 1 0 0 0
+c
+d 556 4 0 0 0
+c
+d 1017 2 0 1 0
+c
+d 1020 1 0 1 0
+c
+d 132 1 1 0 0
+c
+d 495 2 0 0 0
+c
+d 156 2 0 0 0
+c
+d 697 2 0 1 0
+c
+d 952 1 0 1 0
+c
+d 87 4 1 0 0
+c
+d 854 3 0 0 0
+c
+d 1114 4 0 1 0
+c
+d 806 2 1 0 0
+c
+d 807 1 0 0 0
+c
+d 716 1 1 0 0
+c
+d 718 2 0 0 0
+c
+d 725 3 1 0 0
+c
+d 502 1 0 0 0
+c
+d 507 1 0 1 0
+c
+d 514 1 0 0 0
+c
+d 516 2 0 0 0
+c
+d 906 1 0 0 0
+c
+d 912 1 1 0 0
+c
+d 60 2 0 0 0
+c
+d 72 1 0 0 0
+c
+d 75 1 0 0 0
+c
+d 79 1 0 0 0
+c
+d 796 1 0 0 0
+c
+d 815 1 0 0 0
+c
+d 1195 3 0 2 0
+c
+d 1013 2 1 0 0
+c
+d 1017 1 0 0 0
+c
+d 1008 3 0 2 0
+c
+d 298 4 1 0 0
+c
+d 5 2 0 2 0
+c
+d 796 1 0 1 0
+c
+d 813 3 0 1 0
+c
+d 803 2 0 0 0
+c
+d 591 2 0 0 0
+c
+d 723 4 0 0 0
+c
+d 69 3 1 0 0
+c
+d 956 2 0 1 0
+c
+d 957 1 1 0 0
+c
+d 854 2 0 1 0
+c
+d 718 1 0 0 0
+c
+d 730 1 0 0 0
+c
+d 731 1 0 0 0
+c
+d 575 3 0 0 0
+c
+d 610 2 1 0 0
+c
+d 588 4 1 0 0
+c
+d 5 3 0 0 0
+c
+d 775 2 0 0 0
+c
+d 780 1 0 0 0
+c
+d 93 1 0 0 0
+c
+d 133 1 1 0 0
+c
+d 141 1 0 0 0
+c
+d 565 3 0 0 0
+c
+d 716 3 1 0 0
+c
+d 301 3 1 0 0
+c
+d 564 3 0 0 0
+c
+d 550 3 0 0 0
+c
+d 1270 2 0 0 0
+c
+d 101 1 0 0 0
+c
+d 1090 1 0 0 0
+c
+d 1091 1 0 0 0
+c
+d 305 2 1 0 0
+c
+d 353 1 0 0 0
+c
+d 56 1 0 0 0
+c
+d 59 1 0 1 0
+c
+d 1306 1 0 1 0
+c
+d 95 1 0 1 0
+c
+d 98 2 0 0 0
+c
+d 200 1 0 0 0
+c
+d 201 1 0 0 0
+c
+d 785 2 0 1 0
+c
+d 786 1 0 0 0
+c
+d 423 1 0 0 0
+c
+d 429 1 0 1 0
+c
+d 686 3 1 0 0
+c
+d 294 1 0 0 0
+c
+d 298 2 1 0 0
+c
+d 621 2 0 1 0
+c
+d 155 1 0 0 0
+c
+d 176 1 0 0 0
+c
+d 19 1 0 0 0
+c
+d 980 2 0 0 0
+c
+d 132 2 0 2 0
+c
+d 1202 3 0 2 0
+c
+d 955 2 1 0 0
+c
+d 956 1 0 0 0
+c
+d 965 1 0 1 0
+c
+d 970 1 0 0 0
+c
+d 973 1 0 1 0
+c
+d 89 4 0 0 0
+c
+d 39 2 0 0 0
+c
+d 43 2 0 0 0
+c
+d 564 3 0 2 0
+c
+d 799 2 0 0 0
+c
+d 75 2 0 1 0
+c
+d 1300 1 0 0 0
+c
+d 1288 4 0 1 0
+c
+d 551 3 0 1 0
+c
+d 413 2 0 0 0
+c
+d 419 1 0 0 0
+c
+d 810 1 0 0 0
+c
+d 811 2 0 2 0
+c
+d 195 1 0 0 0
+c
+d 206 1 0 0 0
+c
+d 200 1 0 0 0
+c
+d 201 1 0 0 0
+c
+d 202 1 0 0 0
+c
+d 125 1 0 0 0
+c
+d 126 1 0 0 0
+c
+d 428 2 0 1 0
+c
+d 437 2 1 0 0
+c
+d 463 1 0 0 0
+c
+d 1266 3 1 0 0
+c
+d 608 2 0 0 0
+c
+d 572 2 0 2 0
+c
+d 550 1 0 1 0
+c
+d 551 2 0 1 0
+c
+d 745 1 0 0 0
+c
+d 748 2 0 0 0
+c
+d 650 1 1 0 0
+c
+d 656 2 0 0 0
+c
+d 1283 2 0 0 0
+c
+d 554 4 0 0 0
+c
+d 46 1 0 0 0
+c
+d 1313 1 0 0 0
+c
+d 89 1 0 1 0
+c
+d 550 2 0 1 0
+c
+d 478 4 1 0 0
+c
+d 1194 2 1 0 0
+c
+d 597 3 0 1 0
+c
+d 157 4 1 0 0
+c
+d 787 3 0 1 0
+c
+d 556 1 0 0 0
+c
+d 557 1 0 0 0
+c
+d 115 1 1 0 0
+c
+d 119 1 0 0 0
+c
+d 1261 2 0 0 0
+c
+d 673 2 0 0 0
+c
+d 675 1 0 0 0
+c
+d 96 1 0 0 0
+c
+d 111 1 0 1 0
+c
+d 651 1 1 0 0
+c
+d 690 2 0 0 0
+c
+d 132 1 0 1 0
+c
+d 513 1 0 0 0
+c
+d 91 1 0 0 0
+c
+d 1265 1 0 0 0
+c
+d 176 1 0 0 0
+c
+d 177 2 1 0 0
+c
+d 723 1 0 0 0
+c
+d 725 1 0 0 0
+c
+d 46 2 0 1 0
+c
+d 753 2 0 0 0
+c
+d 965 4 0 0 0
+c
+d 907 3 0 0 0
+c
+d 597 2 0 0 0
+c
+d 294 2 0 0 0
+c
+d 906 2 0 1 0
+c
+d 908 1 0 1 0
+c
+d 1184 3 0 0 0
+c
+d 275 3 0 0 0
+c
+d 620 1 0 0 0
+c
+d 621 2 0 0 0
+c
+d 513 3 1 0 0
+c
+d 74 2 0 1 0
+c
+d 75 1 0 1 0
+c
+d 575 1 0 0 0
+c
+d 796 2 1 0 0
+c
+d 811 4 1 0 0
+c
+d 796 2 0 0 0
+c
+d 478 1 0 0 0
+c
+d 482 1 0 1 0
+c
+d 143 2 0 0 0
+c
+d 437 3 0 2 0
+c
+d 276 4 0 0 0
+c
+d 163 1 0 1 0
+c
+d 164 1 0 1 0
+c
+d 509 3 1 0 0
+c
+d 159 1 0 0 0
+c
+d 186 1 0 0 0
+c
+d 93 2 0 1 0
+c
+d 96 1 0 0 0
+c
+d 12 1 0 0 0
+c
+d 1271 1 0 0 0
+c
+d 1272 1 0 0 0
+c
+d 550 2 0 0 0
+c
+d 19 4 1 0 0
+c
+d 618 2 0 1 0
+c
+d 195 3 0 2 0
+c
+d 565 3 1 0 0
+c
+d 598 3 0 0 0
+c
+d 718 2 0 1 0
+c
+d 731 1 0 1 0
+c
+d 511 3 0 0 0
+c
+d 618 2 0 1 0
+c
+d 1275 3 1 0 0
+c
+d 121 1 0 0 0
+c
+d 123 2 0 0 0
+c
+d 1274 2 0 0 0
+c
+d 358 3 1 0 0
+c
+d 301 2 1 0 0
+c
+d 1220 1 0 0 0
+c
+d 811 4 1 0 0
+c
+d 804 1 0 0 0
+c
+d 915 1 0 0 0
+c
+d 157 4 0 0 0
+c
+d 101 1 0 0 0
+c
+d 597 2 1 0 0
+c
+d 248 3 1 0 0
+c
+d 799 2 0 0 0
+c
+d 800 1 1 0 0
+c
+d 554 2 0 0 0
+c
+d 555 1 0 1 0
+c
+d 437 2 0 0 0
+c
+d 511 3 0 2 0
+c
+d 550 1 0 0 0
+c
+d 554 1 0 0 0
+c
+d 811 1 0 1 0
+c
+d 904 1 0 1 0
+c
+d 913 2 0 0 0
+c
+d 169 2 0 2 0
+c
+d 1165 4 1 0 0
+c
+d 84 3 0 0 0
+c
+d 125 1 0 0 0
+c
+d 533 1 0 1 0
+c
+d 858 3 0 2 0
+c
+d 746 3 1 0 0
+c
+d 965 2 0 0 0
+c
+d 973 1 1 0 0
+c
+d 132 4 0 0 0
+c
+d 537 1 0 0 0
+c
+d 539 1 0 0 0
+c
+d 574 3 1 0 0
+c
+d 767 2 1 0 0
+c
+d 833 2 0 0 0
+c
+d 881 1 0 0 0
+c
+d 1266 1 0 0 0
+c
+d 1267 1 0 0 0
+c
+d 46 1 0 1 0
+c
+d 775 2 0 1 0
+c
+d 89 1 0 0 0
+c
+d 550 1 1 0 0
+c
+d 778 1 0 0 0
+c
+d 748 3 0 0 0
+c
+d 836 1 0 0 0
+c
+d 838 1 0 0 0
+c
+d 622 4 0 0 0
+c
+d 650 1 0 0 0
+c
+d 656 1 0 0 0
+c
+d 689 1 0 0 0
+c
+d 701 1 0 0 0
+c
+d 548 4 0 0 0
+c
+d 70 2 0 0 0
+c
+d 340 3 0 0 0
+c
+d 871 2 0 0 0
+c
+d 552 1 0 0 0
+c
+d 553 1 0 0 0
+c
+d 618 4 1 0 0
+c
+d 827 2 0 0 0
+c
+d 828 1 0 0 0
+c
+d 177 4 0 0 0
+c
+d 989 2 1 0 0
+c
+d 995 1 0 0 0
+c
+d 21 2 0 0 0
+c
+d 211 2 0 0 0
+c
+d 815 1 0 0 0
+c
+d 817 2 1 0 0
+c
+d 423 1 0 0 0
+c
+d 430 2 0 0 0
+c
+d 470 1 0 0 0
+c
+d 539 2 1 0 0
+c
+d 547 1 0 0 0
+c
+d 565 3 1 0 0
+c
+d 1008 1 0 0 0
+c
+d 1010 1 0 0 0
+c
+d 800 4 0 0 0
+c
+d 278 3 0 2 0
+c
+d 568 3 0 2 0
+c
+d 965 3 1 0 0
+c
+d 132 4 1 0 0
+c
+d 377 2 0 0 0
+c
+d 89 1 0 0 0
+c
+d 550 1 0 0 0
+c
+d 662 3 1 0 0
+c
+d 803 4 1 0 0
+c
+d 12 2 0 0 0
+c
+d 437 4 0 0 0
+c
+d 84 1 0 0 0
+c
+d 1288 1 0 0 0
+c
+d 915 2 1 0 0
+c
+d 916 1 0 0 0
+c
+d 1009 3 0 1 0
+c
+d 565 3 0 0 0
+c
+d 1070 2 0 0 0
+c
+d 1073 1 1 0 0
+c
+d 528 1 0 1 0
+c
+d 529 2 1 0 0
+c
+d 835 1 0 0 0
+c
+d 836 1 0 0 0
+c
+d 838 1 1 0 0
+c
+d 75 2 0 0 0
+c
+d 89 2 0 0 0
+c
+d 550 1 0 0 0
+c
+d 301 4 0 1 0
+c
+d 551 3 0 2 0
+c
+d 551 2 0 1 0
+c
+d 1110 1 0 1 0
+c
+d 1111 1 0 1 0
+c
+d 565 1 0 0 0
+c
+d 568 1 0 0 0
+c
+d 60 1 0 0 0
+c
+d 647 1 0 1 0
+c
+d 32 2 0 2 0
+c
+d 74 1 0 0 0
+c
+d 493 4 0 0 0
+c
+d 75 1 0 1 0
+c
+d 86 1 0 1 0
+c
+d 1176 1 0 0 0
+c
+d 1177 2 0 0 0
+c
+d 537 1 0 1 0
+c
+d 539 1 0 0 0
+c
+d 547 1 0 1 0
+c
+d 534 3 0 1 0
+c
+d 120 2 0 0 0
+c
+d 578 1 0 0 0
+c
+d 686 2 1 0 0
+c
+d 858 2 0 0 0
+c
+d 697 2 0 1 0
+c
+d 717 1 0 1 0
+c
+d 1163 2 0 1 0
+c
+d 157 1 0 0 0
+c
+d 175 1 0 0 0
+c
+d 829 4 0 0 0
+c
+d 242 4 1 0 0
+c
+d 787 1 0 0 0
+c
+d 790 1 1 0 0
+c
+d 16 2 0 1 0
+c
+d 93 1 0 1 0
+c
+d 394 2 0 0 0
+c
+d 1111 1 1 0 0
+c
+d 157 3 0 1 0
+c
+d 588 2 0 1 0
+c
+d 1285 2 0 0 0
+c
+d 1114 1 0 0 0
+c
+d 1115 1 0 0 0
+c
+d 556 2 0 0 0
+c
+d 715 3 1 0 0
+c
+d 1185 1 0 0 0
+c
+d 1201 1 0 0 0
+c
+d 737 2 0 0 0
+c
+d 965 2 0 0 0
+c
+d 1072 4 1 0 0
+c
+d 534 3 0 1 0
+c
+d 568 1 0 0 0
+c
+d 572 1 0 0 0
+c
+d 120 1 0 0 0
+c
+d 121 1 0 0 0
+c
+d 1274 2 0 0 0
+c
+d 423 2 0 0 0
+c
+d 858 2 1 0 0
+c
+d 869 1 0 0 0
+c
+d 39 3 0 0 0
+c
+d 419 3 0 0 0
+c
+d 469 1 0 1 0
+c
+d 470 1 0 0 0
+c
+d 478 1 0 0 0
+c
+d 430 1 0 0 0
+c
+d 470 2 0 0 0
+c
+d 157 2 1 0 0
+c
+d 175 1 0 0 0
+c
+d 469 1 0 0 0
+c
+d 478 2 1 0 0
+c
+d 75 3 1 0 0
+c
+d 602 5 1 0 0
+c
+d 650 2 0 0 0
+c
+d 661 1 1 0 0
+c
+d 599 4 0 1 0
+c
+d 509 2 0 2 0
+c
+d 1070 1 0 0 0
+c
+d 555 1 0 1 0
+c
+d 556 1 0 1 0
+c
+d 178 1 0 1 0
+c
+d 181 1 0 1 0
+c
+d 738 1 0 0 0
+c
+d 743 1 0 0 0
+c
+d 156 3 0 2 0
+c
+d 1235 3 1 0 0
+c
+d 807 1 0 0 0
+c
+d 823 1 0 0 0
+c
+d 662 3 0 0 0
+c
+d 663 1 0 0 0
+c
+d 806 2 0 0 0
+c
+d 75 1 0 0 0
+c
+d 86 1 0 0 0
+c
+d 550 1 0 0 0
+c
+d 552 3 0 0 0
+c
+d 718 3 0 0 0
+c
+d 556 3 0 1 0
+c
+d 1202 3 0 1 0
+c
+d 578 1 0 0 0
+c
+d 580 1 0 0 0
+c
+d 242 1 0 1 0
+c
+d 262 1 0 1 0
+c
+d 1168 1 0 0 0
+c
+d 1179 1 0 0 0
+c
+d 554 2 0 1 0
+c
+d 556 1 0 1 0
+c
+d 453 1 0 1 0
+c
+d 455 2 0 1 0
+c
+d 574 3 1 0 0
+c
+d 251 1 0 0 0
+c
+d 252 2 0 0 0
+c
+d 253 1 0 0 0
+c
+d 568 2 0 2 0
+c
+d 572 1 0 0 0
+c
+d 668 1 1 0 0
+c
+d 670 1 0 0 0
+c
+d 671 1 0 0 0
+c
+d 608 2 0 0 0
+c
+d 614 1 0 1 0
+c
+d 745 4 0 1 0
+c
+d 551 1 0 0 0
+c
+d 784 1 0 0 0
+c
+d 54 3 0 0 0
+c
+d 876 1 0 0 0
+c
+d 878 1 0 0 0
+c
+d 615 2 0 0 0
+c
+d 437 1 0 0 0
+c
+d 498 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 550 1 0 0 0
+c
+d 628 3 0 1 0
+c
+d 555 1 0 0 0
+c
+d 556 1 0 1 0
+c
+d 620 2 0 0 0
+c
+d 551 3 0 2 0
+c
+d 803 2 0 0 0
+c
+d 88 4 1 0 0
+c
+d 218 2 0 0 0
+c
+d 47 1 0 1 0
+c
+d 769 1 0 0 0
+c
+d 838 3 0 1 0
+c
+d 823 2 0 0 0
+c
+d 806 2 0 0 0
+c
+d 620 3 0 0 0
+c
+d 163 2 0 1 0
+c
+d 171 1 0 0 0
+c
+d 638 2 0 1 0
+c
+d 274 1 0 0 0
+c
+d 277 2 0 2 0
+c
+d 634 3 1 1 0
+c
+d 635 1 0 0 0
+c
+d 599 2 0 2 0
+c
+d 565 2 0 1 0
+c
+d 791 1 0 1 0
+c
+d 48 2 1 0 0
+c
+d 734 1 0 0 0
+c
+d 60 1 0 0 0
+c
+d 621 1 0 0 0
+c
+d 630 1 0 0 0
+c
+d 369 2 0 0 0
+c
+d 370 1 0 0 0
+c
+d 598 2 1 0 0
+c
+d 600 2 0 0 0
+c
+d 84 2 0 1 0
+c
+d 1294 1 0 1 0
+c
+d 572 2 1 0 0
+c
+d 304 1 0 0 0
+c
+d 307 2 1 0 0
+c
+d 84 2 0 1 0
+c
+d 1288 1 0 1 0
+c
+d 746 1 0 0 0
+c
+d 747 2 0 0 0
+c
+d 598 2 0 0 0
+c
+d 606 1 1 0 0
+c
+d 164 3 0 0 0
+c
+d 567 3 0 0 0
+c
+d 1170 1 0 1 0
+c
+d 1171 1 0 1 0
+c
+d 217 3 0 2 0
+c
+d 248 4 1 0 0
+c
+d 1303 1 0 1 0
+c
+d 1304 2 0 1 0
+c
+d 907 2 0 0 0
+c
+d 551 2 0 1 0
+c
+d 691 2 0 0 0
+c
+d 533 2 0 1 0
+c
+d 1010 1 0 1 0
+c
+d 1012 1 0 0 0
+c
+d 1013 1 0 1 0
+c
+d 26 3 0 2 0
+c
+d 570 4 1 0 0
+c
+d 932 4 0 0 0
+c
+d 906 4 0 2 0
+c
+d 529 4 1 0 0
+c
+d 1202 4 1 0 0
+c
+d 152 4 0 0 0
+c
+d 413 1 0 0 0
+c
+d 419 1 0 0 0
+c
+d 51 1 0 1 0
+c
+d 52 1 0 1 0
+c
+d 775 3 0 0 0
+c
+d 1176 1 0 0 0
+c
+d 1177 1 0 0 0
+c
+d 748 1 0 1 0
+c
+d 750 1 0 0 0
+c
+d 758 3 1 0 0
+c
+d 39 2 0 0 0
+c
+d 572 1 0 1 0
+c
+d 574 2 0 0 0
+c
+d 46 3 0 2 0
+c
+d 1286 4 1 0 0
+c
+d 620 2 0 0 0
+c
+d 286 2 1 0 0
+c
+d 291 1 0 0 0
+c
+d 418 3 1 0 0
+c
+d 866 2 0 0 0
+c
+d 301 3 1 0 0
+c
+d 49 1 0 1 0
+c
+d 59 1 0 1 0
+c
+d 973 3 0 0 0
+c
+d 183 1 0 0 0
+c
+d 191 2 1 0 0
+c
+d 1110 3 0 0 0
+c
+d 790 4 1 0 0
+c
+d 574 1 0 0 0
+c
+d 795 1 0 0 0
+c
+d 413 2 0 0 0
+c
+d 358 1 1 0 0
+c
+d 359 1 0 0 0
+c
+d 529 2 0 0 0
+c
+d 550 1 1 0 0
+c
+d 749 1 0 1 0
+c
+d 857 1 0 1 0
+c
+d 84 2 0 2 0
+c
+d 1294 2 0 0 0
+c
+d 185 2 0 0 0
+c
+d 650 2 0 0 0
+c
+d 532 1 0 0 0
+c
+d 548 1 0 1 0
+c
+d 60 4 1 0 0
+c
+d 41 1 0 0 0
+c
+d 807 4 0 1 0
+c
+d 476 1 0 0 0
+c
+d 478 2 0 2 0
+c
+d 1023 2 0 0 0
+c
+d 272 2 0 0 0
+c
+d 767 3 0 2 0
+c
+d 564 1 0 1 0
+c
+d 565 2 0 1 0
+c
+d 939 2 0 0 0
+c
+d 941 1 1 0 0
+c
+d 5 1 0 0 0
+c
+d 18 2 0 0 0
+c
+d 84 1 0 1 0
+c
+d 1288 1 0 1 0
+c
+d 66 1 0 1 0
+c
+d 68 1 0 1 0
+c
+d 69 1 0 0 0
+c
+d 1 3 0 0 0
+c
+d 1184 1 0 0 0
+c
+d 1185 2 0 2 0
+c
+d 705 2 0 0 0
+c
+d 111 2 1 0 0
+c
+d 146 1 0 0 0
+c
+d 554 1 0 0 0
+c
+d 556 2 1 0 0
+c
+d 133 2 0 1 0
+c
+d 323 1 0 1 0
+c
+d 775 2 1 0 0
+c
+d 785 1 0 0 0
+c
+d 1269 3 1 0 0
+c
+d 61 3 0 0 0
+c
+d 1235 3 0 2 0
+c
+d 787 3 1 0 0
+c
+d 259 2 0 0 0
+c
+d 567 1 0 0 0
+c
+d 568 2 0 0 0
+c
+d 394 1 0 0 0
+c
+d 1111 1 0 0 0
+c
+d 904 2 1 0 0
+c
+d 746 2 0 0 0
+c
+d 529 1 0 0 0
+c
+d 1069 1 0 0 0
+c
+d 457 2 0 0 0
+c
+d 461 1 0 0 0
+c
+d 395 2 0 0 0
+c
+d 75 1 0 0 0
+c
+d 86 2 0 0 0
+c
+d 75 2 0 0 0
+c
+d 829 4 1 0 0
+c
+d 243 1 0 1 0
+c
+d 245 2 0 0 0
+c
+d 74 2 1 0 0
+c
+d 796 2 0 0 0
+c
+d 578 1 0 0 0
+c
+d 1043 2 0 0 0
+c
+d 353 3 1 0 0
+c
+d 551 4 0 0 0
+c
+d 584 3 0 1 0
+c
+d 5 1 0 1 0
+c
+d 9 1 0 0 0
+c
+d 488 4 0 0 0
+c
+d 989 1 1 0 0
+c
+d 990 1 0 0 0
+c
+d 74 1 0 0 0
+c
+d 1299 1 0 0 0
+c
+d 565 2 0 0 0
+c
+d 568 1 0 0 0
+c
+d 719 1 1 0 0
+c
+d 720 2 0 0 0
+c
+d 606 1 0 0 0
+c
+d 618 1 0 0 0
+c
+d 619 1 0 0 0
+c
+d 565 2 0 2 0
+c
+d 79 1 1 0 0
+c
+d 84 3 0 0 0
+c
+d 550 1 0 0 0
+c
+d 778 1 1 0 0
+c
+d 779 1 0 0 0
+c
+d 1287 2 0 1 0
+c
+d 598 2 0 0 0
+c
+d 600 1 0 0 0
+c
+d 84 3 0 0 0
+c
+d 277 1 0 0 0
+c
+d 1158 1 0 0 0
+c
+d 477 1 0 1 0
+c
+d 478 2 0 1 0
+c
+d 246 3 1 0 0
+c
+d 570 4 1 0 0
+c
+d 602 3 0 1 0
+c
+d 678 1 0 1 0
+c
+d 120 1 0 0 0
+c
+d 121 1 0 0 0
+c
+d 205 1 0 1 0
+c
+d 211 1 0 1 0
+c
+d 507 3 1 0 0
+c
+d 1013 1 0 0 0
+c
+d 1017 2 0 2 0
+c
+d 54 2 1 0 0
+c
+d 1312 1 0 0 0
+c
+d 1009 1 1 0 0
+c
+d 1012 1 0 0 0
+c
+d 686 4 0 1 0
+c
+d 477 4 0 0 0
+c
+d 424 1 0 1 0
+c
+d 426 1 0 0 0
+c
+d 804 1 0 0 0
+c
+d 805 1 0 0 0
+c
+d 453 2 0 0 0
+c
+d 650 2 0 0 0
+c
+d 21 3 1 0 0
+c
+d 564 3 0 2 0
+c
+d 120 3 0 1 0
+c
+d 509 1 0 0 0
+c
+d 1071 1 0 0 0
+c
+d 608 1 0 0 0
+c
+d 614 1 0 0 0
+c
+d 157 1 1 0 0
+c
+d 178 2 0 0 0
+c
+d 1087 2 0 1 0
+c
+d 1090 1 0 1 0
+c
+d 554 2 0 0 0
+c
+d 564 1 0 0 0
+c
+d 565 2 0 0 0
+c
+d 578 2 0 1 0
+c
+d 132 2 0 0 0
+c
+d 133 1 0 0 0
+c
+d 906 2 0 0 0
+c
+d 508 3 0 0 0
+c
+d 835 2 0 0 0
+c
+d 900 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 1252 1 0 0 0
+c
+d 95 1 0 0 0
+c
+d 998 1 0 0 0
+c
+d 903 2 1 0 0
+c
+d 608 1 0 0 0
+c
+d 614 1 0 0 0
+c
+d 262 4 1 0 0
+c
+d 84 4 1 0 0
+c
+d 564 2 0 1 0
+c
+d 565 1 0 1 0
+c
+d 419 3 0 2 0
+c
+d 1270 1 1 0 0
+c
+d 1271 1 0 0 0
+c
+d 1272 1 0 0 0
+c
+d 738 4 0 1 0
+c
+d 829 2 0 0 0
+c
+d 550 3 1 0 0
+c
+d 19 1 0 0 0
+c
+d 628 1 0 0 0
+c
+d 756 2 0 1 0
+c
+d 763 1 0 1 0
+c
+d 598 2 0 2 0
+c
+d 529 1 0 0 0
+c
+d 550 1 0 0 0
+c
+d 152 2 0 0 0
+c
+d 572 3 0 0 0
+c
+d 65 3 1 0 0
+c
+d 835 4 1 0 0
+c
+d 662 3 0 2 0
+c
+d 470 2 0 1 0
+c
+d 477 1 0 1 0
+c
+d 264 3 0 2 0
+c
+d 767 2 1 0 0
+c
+d 621 4 1 0 0
+c
+d 743 2 0 0 0
+c
+d 753 1 0 0 0
+c
+d 510 4 0 0 0
+c
+d 419 2 0 0 0
+c
+d 304 2 0 0 0
+c
+d 308 1 0 0 0
+c
+d 716 3 1 0 0
+c
+d 554 2 0 1 0
+c
+d 556 1 0 1 0
+c
+d 276 1 1 0 0
+c
+d 277 2 0 0 0
+c
+d 1126 2 0 0 0
+c
+d 369 1 0 0 0
+c
+d 370 2 0 0 0
+c
+d 272 2 0 0 0
+c
+d 22 3 1 0 0
+c
+d 1165 3 0 0 0
+c
+d 622 1 0 0 0
+c
+d 1008 2 0 0 0
+c
+d 597 3 0 2 0
+c
+d 455 3 0 0 0
+c
+d 1195 1 0 1 0
+c
+d 1196 1 0 1 0
+c
+d 495 1 0 1 0
+c
+d 496 1 0 0 0
+c
+d 208 2 0 0 0
+c
+d 1245 1 0 0 0
+c
+d 568 3 0 0 0
+c
+d 1235 3 1 0 0
+c
+d 906 2 0 0 0
+c
+d 453 2 0 2 0
+c
+d 60 1 0 1 0
+c
+d 62 2 0 0 0
+c
+d 445 1 0 0 0
+c
+d 447 1 1 0 0
+c
+d 448 1 0 0 0
+c
+d 791 3 1 0 0
+c
+d 882 3 1 0 0
+c
+d 775 1 0 0 0
+c
+d 778 1 0 0 0
+c
+d 779 2 0 0 0
+c
+d 529 3 0 0 0
+c
+d 87 2 0 0 0
+c
+d 1111 3 0 0 0
+c
+d 419 2 0 0 0
+c
+d 18 4 0 0 0
+c
+d 75 1 0 0 0
+c
+d 84 1 0 0 0
+c
+d 556 1 0 0 0
+c
+d 564 3 0 0 0
+c
+d 49 3 0 0 0
+c
+d 906 1 0 0 0
+c
+d 910 1 0 0 0
+c
+d 120 1 0 0 0
+c
+d 126 2 0 0 0
+c
+d 384 1 0 0 0
+c
+d 394 1 0 1 0
+c
+d 21 1 0 1 0
+c
+d 1020 2 0 1 0
+c
+d 437 1 0 0 0
+c
+d 568 1 0 0 0
+c
+d 547 3 0 0 0
+c
+d 753 2 0 0 0
+c
+d 56 3 1 0 0
+c
+d 206 1 0 0 0
+c
+d 207 1 0 0 0
+c
+d 791 1 0 1 0
+c
+d 793 1 0 1 0
+c
+d 634 1 0 0 0
+c
+d 635 1 0 0 0
+c
+d 843 1 0 0 0
+c
+d 844 2 0 1 0
+c
+d 915 4 1 0 0
+c
+d 191 1 1 0 0
+c
+d 192 2 0 0 0
+c
+d 550 1 0 0 0
+c
+d 554 2 1 0 0
+c
+d 532 2 0 1 0
+c
+d 533 1 0 0 0
+c
+d 383 1 0 0 0
+c
+d 384 2 1 0 0
+c
+d 802 1 0 0 0
+c
+d 803 1 0 0 0
+c
+d 311 2 0 2 0
+c
+d 1106 1 1 0 0
+c
+d 1107 2 0 0 0
+c
+d 87 3 1 0 0
+c
+d 969 1 1 0 0
+c
+d 970 2 0 0 0
+c
+d 602 2 0 1 0
+c
+d 682 1 0 1 0
+c
+d 551 1 0 1 0
+c
+d 554 1 0 0 0
+c
+d 33 1 0 0 0
+c
+d 46 1 1 0 0
+c
+d 1313 2 0 0 0
+c
+d 570 2 1 0 0
+c
+d 1057 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 533 1 0 1 0
+c
+d 990 2 0 0 0
+c
+d 159 2 0 0 0
+c
+d 178 1 0 1 0
+c
+d 1 1 0 0 0
+c
+d 2 2 1 0 0
+c
+d 425 1 0 1 0
+c
+d 426 2 0 0 0
+c
+d 69 2 0 0 0
+c
+d 294 1 0 1 0
+c
+d 298 2 0 0 0
+c
+d 479 3 0 0 0
+c
+d 1285 2 0 0 0
+c
+d 749 3 0 0 0
+c
+d 46 1 0 0 0
+c
+d 775 2 0 0 0
+c
+d 437 3 0 2 0
+c
+d 738 2 0 0 0
+c
+d 88 3 0 0 0
+c
+d 344 2 0 0 0
+c
+d 570 1 1 0 0
+c
+d 791 2 0 0 0
+c
+d 1073 2 0 0 0
+c
+d 602 1 0 0 0
+c
+d 603 1 0 0 0
+c
+d 568 3 0 2 0
+c
+d 36 2 0 1 0
+c
+d 37 1 0 1 0
+c
+d 737 2 0 0 0
+c
+d 1033 3 0 0 0
+c
+d 570 3 1 0 0
+c
+d 787 2 0 0 0
+c
+d 75 4 0 0 0
+c
+d 87 2 0 1 0
+c
+d 120 1 0 0 0
+c
+d 126 1 0 0 0
+c
+d 836 3 1 0 0
+c
+d 650 1 0 0 0
+c
+d 685 1 0 1 0
+c
+d 799 2 0 0 0
+c
+d 933 1 0 0 0
+c
+d 242 3 0 0 0
+c
+d 206 2 0 0 0
+c
+d 207 1 0 0 0
+c
+d 18 1 0 0 0
+c
+d 989 1 0 0 0
+c
+d 84 3 0 0 0
+c
+d 795 2 0 2 0
+c
+d 834 1 0 0 0
+c
+d 1125 2 0 2 0
+c
+d 555 2 0 0 0
+c
+d 556 1 0 0 0
+c
+d 795 4 0 2 0
+c
+d 565 1 0 0 0
+c
+d 791 1 0 0 0
+c
+d 488 4 1 0 0
+c
+d 795 3 1 1 0
+c
+d 796 1 0 0 0
+c
+d 39 1 0 1 0
+c
+d 41 1 0 0 0
+c
+d 199 2 0 0 0
+c
+d 156 4 0 0 0
+c
+d 243 1 0 0 0
+c
+d 248 2 0 2 0
+c
+d 511 4 1 0 0
+c
+d 737 1 0 0 0
+c
+d 846 1 0 0 0
+c
+d 532 4 0 0 0
+c
+d 278 1 0 0 0
+c
+d 280 2 1 0 0
+c
+d 606 2 0 0 0
+c
+d 807 1 0 1 0
+c
+d 906 2 0 0 0
+c
+d 87 2 0 0 0
+c
+d 164 3 0 0 0
+c
+d 21 3 1 0 0
+c
+d 551 3 0 0 0
+c
+d 127 4 0 0 0
+c
+d 554 3 0 1 0
+c
+d 878 1 0 0 0
+c
+d 882 1 0 0 0
+c
+d 785 3 0 1 0
+c
+d 1266 1 0 1 0
+c
+d 1274 1 0 1 0
+c
+d 564 1 0 1 0
+c
+d 565 2 0 1 0
+c
+d 77 4 1 0 0
+c
+d 193 3 0 0 0
+c
+d 811 3 1 0 0
+c
+d 572 3 1 0 0
+c
+d 86 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 965 3 0 0 0
+c
+d 564 3 0 0 0
+c
+d 384 3 0 0 0
+c
+d 18 2 0 0 0
+c
+d 1004 2 0 0 0
+c
+d 261 2 1 0 0
+c
+d 1226 1 0 0 0
+c
+d 480 2 1 0 0
+c
+d 481 1 0 0 0
+c
+d 208 2 0 0 0
+c
+d 46 1 0 0 0
+c
+d 75 1 0 0 0
+c
+d 478 2 1 0 0
+c
+d 280 1 0 0 0
+c
+d 1170 1 1 0 0
+c
+d 1172 1 0 0 0
+c
+d 534 3 0 0 0
+c
+d 1251 3 0 0 0
+c
+d 723 3 0 0 0
+c
+d 734 4 0 0 0
+c
+d 146 2 0 0 0
+c
+d 153 2 1 0 0
+c
+d 532 1 0 1 0
+c
+d 537 1 0 1 0
+c
+d 220 2 0 0 0
+c
+d 623 1 0 1 0
+c
+d 624 1 0 0 0
+c
+d 791 3 0 1 0
+c
+d 662 1 0 0 0
+c
+d 663 1 0 0 0
+c
+d 539 4 1 0 0
+c
+d 34 2 0 0 0
+c
+d 279 1 0 0 0
+c
+d 305 2 1 0 0
+c
+d 16 4 0 1 0
+c
+d 344 2 0 0 0
+c
+d 919 2 0 0 0
+c
+d 921 1 0 0 0
+c
+d 1126 4 0 0 0
+c
+d 1168 1 0 1 0
+c
+d 1179 1 0 0 0
+c
+d 807 1 1 0 0
+c
+d 823 2 0 0 0
+c
+d 1174 1 0 0 0
+c
+d 1185 2 0 0 0
+c
+d 591 4 1 0 0
+c
+d 21 1 0 0 0
+c
+d 29 1 0 0 0
+c
+d 1070 4 1 0 0
+c
+d 356 1 0 0 0
+c
+d 358 1 0 0 0
+c
+d 91 1 0 0 0
+c
+d 92 1 0 0 0
+c
+d 303 1 1 0 0
+c
+d 1157 1 0 0 0
+c
+d 1159 1 0 0 0
+c
+d 691 2 1 0 0
+c
+d 697 1 0 0 0
+c
+d 1202 3 0 2 0
+c
+d 57 4 1 0 0
+c
+d 565 1 0 1 0
+c
+d 570 1 0 0 0
+c
+d 1087 1 0 0 0
+c
+d 1094 1 0 0 0
+c
+d 1095 2 0 0 0
+c
+d 570 2 0 0 0
+c
+d 795 2 0 0 0
+c
+d 56 4 1 0 0
+c
+d 835 3 1 0 0
+c
+d 1105 1 0 0 0
+c
+d 1106 2 0 0 0
+c
+d 568 4 0 1 0
+c
+d 989 2 0 0 0
+c
+d 995 1 0 0 0
+c
+d 551 2 0 0 0
+c
+d 1008 1 0 0 0
+c
+d 1009 2 1 0 0
+c
+d 568 3 1 0 0
+c
+d 178 1 0 0 0
+c
+d 183 2 1 0 0
+c
+d 1111 1 0 0 0
+c
+d 1113 1 0 0 0
+c
+d 1115 1 0 0 0
+c
+d 795 2 0 0 0
+c
+d 823 1 0 0 0
+c
+d 616 1 0 0 0
+c
+d 989 1 0 0 0
+c
+d 743 2 0 0 0
+c
+d 46 2 0 0 0
+c
+d 1313 1 0 0 0
+c
+d 592 1 0 1 0
+c
+d 594 2 0 1 0
+c
+d 565 1 0 0 0
+c
+d 1056 1 0 1 0
+c
+d 126 3 0 0 0
+c
+d 1008 1 1 0 0
+c
+d 1009 1 0 0 0
+c
+d 1010 1 0 0 0
+c
+d 437 4 0 0 0
+c
+d 568 3 0 1 0
+c
+d 533 1 0 0 0
+c
+d 534 1 0 0 0
+c
+d 570 3 0 1 0
+c
+d 793 4 1 0 0
+c
+d 535 1 0 0 0
+c
+d 537 1 0 0 0
+c
+d 572 2 0 0 0
+c
+d 84 1 0 0 0
+c
+d 1286 1 0 0 0
+c
+d 1287 1 0 0 0
+c
+d 33 2 0 0 0
+c
+d 551 2 0 2 0
+c
+d 382 2 0 0 0
+c
+d 383 1 0 0 0
+c
+d 176 1 0 0 0
+c
+d 194 1 0 0 0
+c
+d 997 1 1 0 0
+c
+d 998 2 0 0 0
+c
+d 54 2 0 2 0
+c
+d 1312 1 0 0 0
+c
+d 166 2 0 2 0
+c
+d 395 1 0 0 0
+c
+d 509 1 0 0 0
+c
+d 1070 1 0 0 0
+c
+d 1073 1 1 0 0
+c
+d 615 3 0 0 0
+c
+d 592 3 1 0 0
+c
+d 1272 2 0 0 0
+c
+d 1273 1 0 0 0
+c
+d 787 2 0 1 0
+c
+d 88 1 0 0 0
+c
+d 775 1 0 0 0
+c
+d 86 4 1 0 0
+c
+d 581 1 0 0 0
+c
+d 582 1 0 0 0
+c
+d 120 3 0 2 0
+c
+d 437 2 0 0 0
+c
+d 878 1 0 0 0
+c
+d 881 2 0 0 0
+c
+d 470 2 0 1 0
+c
+d 477 1 0 1 0
+c
+d 910 2 0 0 0
+c
+d 1277 1 0 1 0
+c
+d 1278 1 0 0 0
+c
+d 19 1 0 0 0
+c
+d 21 2 0 2 0
+c
+d 348 2 0 0 0
+c
+d 86 1 0 0 0
+c
+d 87 1 0 1 0
+c
+d 418 3 0 1 0
+c
+d 437 1 0 0 0
+c
+d 568 1 0 0 0
+c
+d 1271 1 0 0 0
+c
+d 1272 1 0 1 0
+c
+d 46 1 0 1 0
+c
+d 75 1 0 0 0
+c
+d 101 2 0 0 0
+c
+d 608 1 0 0 0
+c
+d 46 1 0 0 0
+c
+d 75 1 0 1 0
+c
+d 618 4 1 0 0
+c
+d 656 1 0 0 0
+c
+d 657 1 0 0 0
+c
+d 853 1 0 0 0
+c
+d 854 1 0 1 0
+c
+d 615 3 0 2 0
+c
+d 278 1 0 0 0
+c
+d 280 1 1 0 0
+c
+d 1170 1 0 0 0
+c
+d 179 4 0 0 0
+c
+d 647 1 0 1 0
+c
+d 660 1 0 1 0
+c
+d 56 1 0 0 0
+c
+d 1309 2 0 1 0
+c
+d 48 3 1 0 0
+c
+d 463 4 1 0 0
+c
+d 152 2 0 0 0
+c
+d 565 2 0 0 0
+c
+d 568 1 0 0 0
+c
+d 823 2 0 0 0
+c
+d 673 4 1 0 0
+c
+d 568 1 1 0 0
+c
+d 572 2 0 0 0
+c
+d 127 3 0 1 0
+c
+d 756 1 1 0 0
+c
+d 772 2 0 0 0
+c
+d 305 2 0 0 0
+c
+d 48 2 0 2 0
+c
+d 75 2 0 1 0
+c
+d 86 1 0 1 0
+c
+d 99 2 0 0 0
+c
+d 1002 1 0 0 0
+c
+d 264 3 0 0 0
+c
+d 82 1 0 0 0
+c
+d 1295 2 0 0 0
+c
+d 93 3 0 2 0
+c
+d 30 1 0 0 0
+c
+d 31 1 1 0 0
+c
+d 32 1 0 0 0
+c
+d 120 2 0 0 0
+c
+d 628 3 1 0 0
+c
+d 437 2 0 0 0
+c
+d 30 1 0 0 0
+c
+d 32 2 0 0 0
+c
+d 286 3 1 0 0
+c
+d 359 3 1 0 0
+c
+d 278 1 0 0 0
+c
+d 1211 1 0 0 0
+c
+d 791 1 0 0 0
+c
+d 831 1 0 1 0
+c
+d 832 1 1 0 0
+c
+d 551 1 0 0 0
+c
+d 554 1 0 1 0
+c
+d 164 2 0 1 0
+c
+d 165 1 0 0 0
+c
+d 537 3 0 0 0
+c
+d 539 1 0 0 0
+c
+d 523 2 0 0 0
+c
+d 829 1 0 0 0
+c
+d 835 1 0 0 0
+c
+d 533 2 0 0 0
+c
+d 570 1 0 1 0
+c
+d 791 1 0 1 0
+c
+d 75 2 0 0 0
+c
+d 76 1 0 0 0
+c
+d 259 2 0 0 0
+c
+d 461 3 1 0 0
+c
+d 88 4 1 0 0
+c
+d 749 3 1 0 0
+c
+d 337 1 0 0 0
+c
+d 338 1 0 1 0
+c
+d 353 2 0 0 0
+c
+d 753 1 0 0 0
+c
+d 755 2 0 0 0
+c
+d 797 1 0 0 0
+c
+d 799 1 0 0 0
+c
+d 32 1 0 0 0
+c
+d 75 1 0 0 0
+c
+d 120 3 0 0 0
+c
+d 1009 3 1 0 0
+c
+d 608 2 0 0 0
+c
+d 437 2 0 1 0
+c
+d 445 1 0 1 0
+c
+d 507 2 0 0 0
+c
+d 34 1 0 0 0
+c
+d 35 1 0 0 0
+c
+d 1 2 0 0 0
+c
+d 565 3 1 0 0
+c
+d 550 2 0 0 0
+c
+d 60 1 0 1 0
+c
+d 621 1 0 0 0
+c
+d 623 1 0 1 0
+c
+d 436 3 1 0 0
+c
+d 169 4 0 1 0
+c
+d 120 2 0 0 0
+c
+d 122 1 0 0 0
+c
+d 457 4 1 0 0
+c
+d 33 1 0 0 0
+c
+d 34 1 0 0 0
+c
+d 532 2 0 2 0
+c
+d 769 2 0 1 0
+c
+d 775 1 0 0 0
+c
+d 286 2 0 0 0
+c
+d 60 1 0 0 0
+c
+d 630 1 0 0 0
+c
+d 647 1 0 0 0
+c
+d 532 1 0 0 0
+c
+d 534 1 0 0 0
+c
+d 796 1 0 1 0
+c
+d 797 1 0 1 0
+c
+d 787 2 0 0 0
+c
+d 846 2 0 0 0
+c
+d 146 1 0 1 0
+c
+d 153 1 0 0 0
+c
+d 681 1 0 0 0
+c
+d 682 2 0 2 0
+c
+d 146 2 0 0 0
+c
+d 729 4 1 0 0
+c
+d 208 2 0 1 0
+c
+d 341 3 0 2 0
+c
+d 510 1 0 0 0
+c
+d 517 2 0 0 0
+c
+d 550 2 0 0 0
+c
+d 553 1 0 0 0
+c
+d 568 4 1 0 0
+c
+d 572 2 0 0 0
+c
+d 333 1 0 0 0
+c
+d 340 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 89 1 0 1 0
+c
+d 46 2 0 1 0
+c
+d 16 1 0 0 0
+c
+d 93 2 1 0 0
+c
+d 791 3 1 0 0
+c
+d 568 2 0 0 0
+c
+d 437 2 0 0 0
+c
+d 21 2 0 0 0
+c
+d 120 1 0 1 0
+c
+d 125 1 0 1 0
+c
+d 437 4 0 0 0
+c
+d 358 4 1 0 0
+c
+d 650 1 0 1 0
+c
+d 661 2 0 1 0
+c
+d 791 2 1 0 0
+c
+d 259 4 1 0 0
+c
+d 100 3 1 0 0
+c
+d 169 2 0 0 0
+c
+d 156 1 0 0 0
+c
+d 163 1 0 0 0
+c
+d 795 3 0 0 0
+c
+d 225 3 0 1 0
+c
+d 570 1 0 1 0
+c
+d 793 1 0 1 0
+c
+d 565 1 0 0 0
+c
+d 791 1 0 0 0
+c
+d 533 1 0 0 0
+c
+d 534 1 0 0 0
+c
+d 84 3 0 1 0
+c
+d 509 2 0 0 0
+c
+d 950 2 0 0 0
+c
+d 799 1 0 0 0
+c
+d 811 1 0 0 0
+c
+d 358 1 0 0 0
+c
+d 359 1 0 0 0
+c
+d 1013 1 1 0 0
+c
+d 1017 2 0 0 0
+c
+d 881 3 0 1 0
+c
+d 159 3 1 0 0
+c
+d 93 4 1 0 0
+c
+d 793 1 0 0 0
+c
+d 794 1 0 0 0
+c
+d 487 1 0 1 0
+c
+d 488 2 0 1 0
+c
+d 152 1 0 1 0
+c
+d 413 1 0 0 0
+c
+d 1087 1 0 1 0
+c
+d 355 4 1 0 0
+c
+d 443 1 0 0 0
+c
+d 444 1 0 0 0
+c
+d 87 3 1 0 0
+c
+d 301 3 1 0 0
+c
+d 551 1 0 0 0
+c
+d 554 1 0 0 0
+c
+d 753 3 0 2 0
+c
+d 620 4 1 0 0
+c
+d 1 3 0 0 0
+c
+d 785 3 0 2 0
+c
+d 1266 3 1 0 0
+c
+d 242 1 0 0 0
+c
+d 243 1 0 0 0
+c
+d 244 1 0 0 0
+c
+d 572 2 0 0 0
+c
+d 311 2 0 2 0
+c
+d 551 2 0 1 0
+c
+d 779 1 0 1 0
+c
+d 551 1 0 1 0
+c
+d 564 1 0 1 0
+c
+d 620 3 0 0 0
+c
+d 5 1 0 0 0
+c
+d 10 2 0 0 0
+c
+d 152 2 0 2 0
+c
+d 1096 1 0 0 0
+c
+d 825 3 0 1 0
+c
+d 195 2 0 2 0
+c
+d 550 1 0 0 0
+c
+d 551 1 0 0 0
+c
+d 84 1 0 0 0
+c
+d 85 1 0 0 0
+c
+d 564 2 0 1 0
+c
+d 565 1 0 1 0
+c
+d 341 2 0 1 0
+c
+d 411 1 0 1 0
+c
+d 846 2 0 0 0
+c
+d 847 2 0 0 0
+c
+d 650 3 1 0 0
+c
+d 125 2 0 0 0
+c
+d 126 1 0 1 0
+c
+d 602 2 0 0 0
+c
+d 575 3 0 2 0
+c
+d 650 4 0 0 0
+c
+d 572 1 0 1 0
+c
+d 573 1 0 0 0
+c
+d 574 2 0 0 0
+c
+d 1126 1 0 1 0
+c
+d 1127 1 0 1 0
+c
+d 9 1 0 1 0
+c
+d 10 1 0 0 0
+c
+d 75 3 0 0 0
+c
+d 569 2 0 0 0
+c
+d 1050 1 0 0 0
+c
+d 51 1 1 0 0
+c
+d 56 2 0 0 0
+c
+d 488 3 0 0 0
+c
+d 656 2 0 0 0
+c
+d 556 2 0 2 0
+c
+d 86 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 334 1 0 0 0
+c
+d 335 2 1 0 0
+c
+d 89 3 1 0 0
+c
+d 991 1 0 0 0
+c
+d 992 2 0 0 0
+c
+d 153 1 0 0 0
+c
+d 228 1 0 0 0
+c
+d 21 1 0 0 0
+c
+d 1023 1 0 1 0
+c
+d 32 1 0 0 0
+c
+d 75 2 0 0 0
+c
+d 534 2 0 0 0
+c
+d 1201 1 1 0 0
+c
+d 1202 2 0 0 0
+c
+d 544 1 0 1 0
+c
+d 545 1 0 0 0
+c
+d 546 1 0 0 0
+c
+d 1176 4 0 0 0
+c
+d 551 3 1 0 0
+c
+d 185 2 0 1 0
+c
+d 199 1 0 1 0
+c
+d 795 3 0 0 0
+c
+d 166 1 0 0 0
+c
+d 395 2 0 2 0
+c
+d 567 2 0 2 0
+c
+d 437 2 0 0 0
+c
+d 572 3 1 0 0
+c
+d 534 2 0 1 0
+c
+d 507 3 0 0 0
+c
+d 1165 2 0 0 0
+c
+d 1168 1 1 0 0
+c
+d 1 1 1 0 0
+c
+d 1323 1 0 0 0
+c
+d 1279 1 0 1 0
+c
+d 1280 1 0 1 0
+c
+d 1281 1 0 0 0
+c
+d 858 1 0 1 0
+c
+d 872 1 0 1 0
+c
+d 89 1 0 0 0
+c
+d 1266 1 0 0 0
+c
+d 207 2 0 0 0
+c
+d 276 3 1 0 0
+c
+d 359 2 0 0 0
+c
+d 46 1 0 1 0
+c
+d 775 1 0 1 0
+c
+d 623 3 0 0 0
+c
+d 691 2 0 2 0
+c
+d 795 2 0 0 0
+c
+d 825 1 0 0 0
+c
+d 436 2 0 1 0
+c
+d 861 1 1 0 0
+c
+d 869 1 0 0 0
+c
+d 870 1 0 0 0
+c
+d 552 2 0 0 0
+c
+d 881 3 1 0 0
+c
+d 622 2 0 1 0
+c
+d 625 1 0 1 0
+c
+d 807 2 0 0 0
+c
+d 823 1 1 0 0
+c
+d 799 3 1 0 0
+c
+d 1110 3 0 0 0
+c
+d 87 2 1 0 0
+c
+d 89 1 0 0 0
+c
+d 333 4 1 0 0
+c
+d 159 2 1 0 0
+c
+d 753 2 1 0 0
+c
+d 876 2 0 1 0
+c
+d 554 1 0 1 0
+c
+d 556 1 0 0 0
+c
+d 564 1 0 1 0
+c
+d 610 3 1 0 0
+c
+d 737 2 0 0 0
+c
+d 836 3 0 0 0
+c
+d 551 1 0 0 0
+c
+d 564 2 0 0 0
+c
+d 821 1 0 0 0
+c
+d 822 1 0 0 0
+c
+d 572 2 0 2 0
+c
+d 574 1 0 0 0
+c
+d 1023 2 0 0 0
+c
+d 534 3 1 0 0
+c
+d 602 3 1 0 0
+c
+d 1176 3 0 1 0
+c
+d 572 4 0 0 0
+c
+d 1113 2 0 0 0
+c
+d 593 2 0 0 0
+c
+d 677 1 0 0 0
+c
+d 839 1 1 0 0
+c
+d 840 2 0 0 0
+c
+d 622 4 1 0 0
+c
+d 1285 2 0 1 0
+c
+d 1286 1 0 1 0
+c
+d 44 2 0 0 0
+c
+d 833 2 0 0 0
+c
+d 153 1 0 0 0
+c
+d 155 1 0 0 0
+c
+d 88 3 1 0 0
+c
+d 1013 1 0 0 0
+c
+d 1033 2 0 0 0
+c
+d 608 3 1 0 0
+c
+d 457 1 0 0 0
+c
+d 464 2 0 0 0
+c
+d 163 2 0 0 0
+c
+d 1278 1 0 0 0
+c
+d 1280 1 0 0 0
+c
+d 1281 1 0 0 0
+c
+d 114 1 0 0 0
+c
+d 127 1 0 0 0
+c
+d 46 1 0 0 0
+c
+d 75 1 0 1 0
+c
+d 811 3 1 0 0
+c
+d 437 1 0 0 0
+c
+d 438 2 0 0 0
+c
+d 534 3 1 0 0
+c
+d 21 3 0 1 0
+c
+d 127 1 0 0 0
+c
+d 129 1 0 0 0
+c
+d 533 1 1 0 0
+c
+d 211 2 0 0 0
+c
+d 75 2 0 0 0
+c
+d 86 1 0 0 0
+c
+d 1110 2 0 0 0
+c
+d 754 4 0 1 0
+c
+d 1153 2 0 0 0
+c
+d 738 2 0 1 0
+c
+d 743 1 0 0 0
+c
+d 745 1 0 0 0
+c
+d 478 1 0 0 0
+c
+d 482 1 0 0 0
+c
+d 561 1 0 1 0
+c
+d 568 1 0 1 0
+c
+d 823 4 0 0 0
+c
+d 445 1 0 0 0
+c
+d 448 1 0 0 0
+c
+d 211 1 1 0 0
+c
+d 213 1 0 0 0
+c
+d 242 1 0 0 0
+c
+d 556 2 0 0 0
+c
+d 279 1 0 0 0
+c
+d 306 1 0 0 0
+c
+d 534 1 0 0 0
+c
+d 536 2 0 0 0
+c
+d 570 1 0 0 0
+c
+d 572 2 0 0 0
+c
+d 32 1 0 1 0
+c
+d 77 1 0 1 0
+c
+d 755 4 0 0 0
+c
+d 1113 1 0 1 0
+c
+d 1115 1 0 1 0
+c
+d 77 3 0 1 0
+c
+d 384 4 0 0 0
+c
+d 527 3 1 0 0
+c
+d 592 2 0 0 0
+c
+d 152 4 0 0 0
+c
+d 498 2 0 0 0
+c
+d 167 1 0 0 0
+c
+d 369 1 0 0 0
+c
+d 926 3 1 1 0
+c
+d 1155 2 0 0 0
+c
+d 156 3 1 0 0
+c
+d 18 2 0 0 0
+c
+d 30 1 1 0 0
+c
+d 786 3 0 1 0
+c
+d 591 4 1 0 0
+c
+d 167 1 0 1 0
+c
+d 168 1 0 1 0
+c
+d 737 2 0 0 0
+c
+d 756 1 0 0 0
+c
+d 125 2 0 2 0
+c
+d 662 1 0 0 0
+c
+d 663 2 1 0 0
+c
+d 965 1 0 0 0
+c
+d 970 1 0 0 0
+c
+d 482 2 0 0 0
+c
+d 457 1 0 0 0
+c
+d 461 1 0 0 0
+c
+d 734 2 0 0 0
+c
+d 919 3 0 0 0
+c
+d 574 3 0 0 0
+c
+d 775 4 0 0 0
+c
+d 286 2 0 1 0
+c
+d 291 1 0 1 0
+c
+d 46 1 0 0 0
+c
+d 75 1 0 0 0
+c
+d 341 1 0 1 0
+c
+d 401 2 0 0 0
+c
+d 402 1 0 0 0
+c
+d 468 1 0 0 0
+c
+d 472 1 0 0 0
+c
+d 775 2 0 1 0
+c
+d 785 1 0 1 0
+c
+d 283 4 1 0 0
+c
+d 564 4 1 0 0
+c
+d 211 1 0 1 0
+c
+d 242 2 0 1 0
+c
+d 569 2 0 2 0
+c
+d 204 3 1 0 0
+c
+d 716 1 0 0 0
+c
+d 718 2 0 2 0
+c
+d 262 2 0 0 0
+c
+d 293 1 0 0 0
+c
+d 1238 4 0 0 0
+c
+d 369 2 0 0 0
+c
+d 320 2 0 1 0
+c
+d 81 1 0 0 0
+c
+d 1295 1 0 0 0
+c
+d 341 3 1 0 0
+c
+d 529 1 0 0 0
+c
+d 550 1 0 0 0
+c
+d 28 2 0 0 0
+c
+d 1315 1 1 0 0
+c
+d 570 4 1 0 0
+c
+d 618 2 1 0 0
+c
+d 965 1 0 0 0
+c
+d 556 1 0 0 0
+c
+d 565 1 0 1 0
+c
+d 93 1 0 0 0
+c
+d 114 2 0 0 0
+c
+d 608 2 0 1 0
+c
+d 1041 1 0 0 0
+c
+d 992 4 1 0 0
+c
+d 182 1 1 0 0
+c
+d 191 1 0 0 0
+c
+d 436 1 0 0 0
+c
+d 581 1 0 0 0
+c
+d 590 1 0 0 0
+c
+d 470 1 0 1 0
+c
+d 478 1 0 1 0
+c
+d 75 2 0 0 0
+c
+d 155 2 0 0 0
+c
+d 176 1 0 0 0
+c
+d 738 2 0 1 0
+c
+d 89 3 1 0 0
+c
+d 388 2 0 0 0
+c
+d 1163 1 0 1 0
+c
+d 1165 3 1 0 0
+c
+d 93 2 0 0 0
+c
+d 787 4 1 0 0
+c
+d 753 1 1 0 0
+c
+d 754 1 0 0 0
+c
+d 167 1 0 0 0
+c
+d 168 1 1 0 0
+c
+d 1110 1 0 0 0
+c
+d 1053 4 1 0 0
+c
+d 358 2 0 0 0
+c
+d 18 3 0 2 0
+c
+d 564 3 0 0 0
+c
+d 1036 3 1 0 0
+c
+d 1022 1 0 0 0
+c
+d 1023 2 1 0 0
+c
+d 859 4 0 0 0
+c
+d 574 3 1 0 0
+c
+d 369 2 0 0 0
+c
+d 382 1 0 0 0
+c
+d 508 1 1 0 0
+c
+d 509 2 0 0 0
+c
+d 599 2 0 0 0
+c
+d 730 1 0 1 0
+c
+d 732 2 0 0 0
+c
+d 614 2 0 0 0
+c
+d 615 1 0 0 0
+c
+d 567 3 1 0 0
+c
+d 120 1 0 0 0
+c
+d 126 1 0 0 0
+c
+d 532 1 0 0 0
+c
+d 537 1 0 0 0
+c
+d 60 2 0 1 0
+c
+d 1105 1 0 0 0
+c
+d 1106 1 0 0 0
+c
+d 854 1 0 0 0
+c
+d 855 1 0 0 0
+c
+d 791 2 1 0 0
+c
+d 792 1 0 0 0
+c
+d 341 2 0 0 0
+c
+d 156 1 0 1 0
+c
+d 163 1 0 1 0
+c
+d 157 1 0 1 0
+c
+d 360 1 0 0 0
+c
+d 364 1 0 0 0
+c
+d 570 1 0 0 0
+c
+d 572 1 0 0 0
+c
+d 822 3 1 0 0
+c
+d 1188 1 0 0 0
+c
+d 1189 1 0 0 0
+c
+d 86 1 0 0 0
+c
+d 87 2 0 0 0
+c
+d 598 1 0 0 0
+c
+d 599 2 0 0 0
+c
+d 481 2 0 0 0
+c
+d 484 1 0 0 0
+c
+d 636 1 0 0 0
+c
+d 638 1 0 0 0
+c
+d 156 1 0 0 0
+c
+d 163 1 0 1 0
+c
+d 835 4 0 0 0
+c
+d 534 2 0 1 0
+c
+d 46 2 0 0 0
+c
+d 591 2 0 0 0
+c
+d 556 2 0 0 0
+c
+d 557 1 0 0 0
+c
+d 965 1 0 0 0
+c
+d 972 3 0 0 0
+c
+d 570 4 0 0 0
+c
+d 551 2 0 0 0
+c
+d 550 2 0 0 0
+c
+d 608 3 1 0 0
+c
+d 1008 3 1 0 0
+c
+d 142 3 1 0 0
+c
+d 557 1 0 1 0
+c
+d 565 1 0 1 0
+c
+d 806 2 1 0 0
+c
+d 811 1 0 0 0
+c
+d 575 1 0 0 0
+c
+d 578 1 0 0 0
+c
+d 1044 1 0 0 0
+c
+d 599 2 0 1 0
+c
+d 294 4 0 1 0
+c
+d 835 4 1 0 0
+c
+d 65 3 1 0 0
+c
+d 791 1 0 1 0
+c
+d 829 1 0 0 0
+c
+d 830 1 0 1 0
+c
+d 193 2 0 0 0
+c
+d 132 4 1 0 0
+c
+d 878 1 0 0 0
+c
+d 881 2 0 0 0
+c
+d 152 2 0 0 0
+c
+d 529 2 1 0 0
+c
+d 1069 1 0 0 0
+c
+d 26 2 0 2 0
+c
+d 10 1 0 0 0
+c
+d 11 2 0 0 0
+c
+d 621 1 0 1 0
+c
+d 630 2 0 0 0
+c
+d 663 1 0 0 0
+c
+d 664 1 0 0 0
+c
+d 1179 1 0 0 0
+c
+d 1181 1 0 0 0
+c
+d 1182 1 0 0 0
+c
+d 1202 2 0 2 0
+c
+d 1306 2 0 0 0
+c
+d 597 3 0 1 0
+c
+d 28 3 1 0 0
+c
+d 523 3 0 0 0
+c
+d 242 2 1 0 0
+c
+d 243 1 0 0 0
+c
+d 93 4 0 0 0
+c
+d 534 2 0 0 0
+c
+d 278 1 0 0 0
+c
+d 1156 2 0 0 0
+c
+d 46 4 0 1 0
+c
+d 570 3 1 0 0
+c
+d 614 2 0 1 0
+c
+d 615 1 0 1 0
+c
+d 75 1 0 0 0
+c
+d 775 1 0 0 0
+c
+d 286 3 1 0 0
+c
+d 436 2 0 0 0
+c
+d 419 2 0 0 0
+c
+d 152 1 0 0 0
+c
+d 153 1 0 0 0
+c
+d 686 2 0 0 0
+c
+d 529 2 0 1 0
+c
+d 540 1 0 1 0
+c
+d 591 1 0 0 0
+c
+d 593 2 1 0 0
+c
+d 791 2 0 2 0
+c
+d 686 2 0 0 0
+c
+d 650 3 0 0 0
+c
+d 1300 2 1 0 0
+c
+d 1301 1 0 0 0
+c
+d 527 2 0 0 0
+c
+d 641 3 1 0 0
+c
+d 61 2 0 0 0
+c
+d 65 1 0 0 0
+c
+d 120 1 0 1 0
+c
+d 121 2 0 0 0
+c
+d 793 3 1 0 0
+c
+d 794 1 0 1 0
+c
+d 795 1 0 1 0
+c
+d 172 1 0 0 0
+c
+d 173 1 0 0 0
+c
+d 174 1 0 0 0
+c
+d 905 1 0 0 0
+c
+d 906 2 0 0 0
+c
+d 155 1 0 0 0
+c
+d 176 1 0 0 0
+c
+d 305 3 0 0 0
+c
+d 343 4 1 0 0
+c
+d 734 2 0 1 0
+c
+d 737 1 0 1 0
+c
+d 156 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 803 1 0 0 0
+c
+d 804 1 0 0 0
+c
+d 737 3 1 0 0
+c
+d 84 2 0 1 0
+c
+d 196 1 0 0 0
+c
+d 199 1 0 0 0
+c
+d 1165 4 0 0 0
+c
+d 1106 1 0 1 0
+c
+d 1107 1 0 0 0
+c
+d 734 3 0 1 0
+c
+d 749 1 0 0 0
+c
+d 857 1 0 0 0
+c
+d 16 3 0 2 0
+c
+d 1 4 0 0 0
+c
+d 620 2 0 0 0
+c
+d 90 2 0 0 0
+c
+d 91 1 0 0 0
+c
+d 390 1 0 0 0
+c
+d 392 1 0 0 0
+c
+d 775 2 0 0 0
+c
+d 782 1 0 1 0
+c
+d 279 2 0 1 0
+c
+d 1150 1 0 1 0
+c
+d 195 2 0 0 0
+c
+d 569 1 0 0 0
+c
+d 572 1 0 0 0
+c
+d 211 4 1 0 0
+c
+d 823 1 0 0 0
+c
+d 835 1 0 0 0
+c
+d 369 2 0 0 0
+c
+d 554 2 0 0 0
+c
+d 555 1 0 0 0
+c
+d 157 2 0 0 0
+c
+d 437 1 0 1 0
+c
+d 463 1 0 1 0
+c
+d 311 3 1 0 0
+c
+d 817 1 0 0 0
+c
+d 819 1 0 0 0
+c
+d 823 2 0 0 0
+c
+d 1269 3 0 0 0
+c
+d 93 2 0 0 0
+c
+d 1192 2 1 0 0
+c
+d 1193 1 0 0 0
+c
+d 313 3 1 0 0
+c
+d 407 2 0 0 0
+c
+d 408 1 1 0 0
+c
+d 525 1 0 1 0
+c
+d 533 1 0 1 0
+c
+d 534 1 0 0 0
+c
+d 146 2 0 0 0
+c
+d 1097 1 1 0 0
+c
+d 551 3 0 2 0
+c
+d 1112 4 0 0 0
+c
+d 797 2 0 0 0
+c
+d 1274 3 0 0 0
+c
+d 93 1 0 0 0
+c
+d 130 1 0 1 0
+c
+d 132 1 0 1 0
+c
+d 301 3 1 0 0
+c
+d 18 3 0 1 0
+c
+d 393 1 0 0 0
+c
+d 399 1 0 0 0
+c
+d 556 2 0 2 0
+c
+d 564 1 0 0 0
+c
+d 795 3 0 1 0
+c
+d 1237 3 1 0 0
+c
+d 835 1 0 0 0
+c
+d 836 1 0 0 0
+c
+d 281 2 0 1 0
+c
+d 1156 1 0 1 0
+c
+d 384 2 1 0 0
+c
+d 294 3 1 0 0
+c
+d 277 1 0 0 0
+c
+d 301 1 0 0 0
+c
+d 478 2 0 2 0
+c
+d 481 1 0 0 0
+c
+d 551 2 0 0 0
+c
+d 602 2 0 2 0
+c
+d 211 3 1 0 0
+c
+d 5 4 1 0 0
+c
+d 353 3 1 0 0
+c
+d 1168 1 0 0 0
+c
+d 1177 1 0 0 0
+c
+d 788 1 0 1 0
+c
+d 789 2 0 1 0
+c
+d 384 3 0 2 0
+c
+d 1125 1 0 1 0
+c
+d 1127 1 0 1 0
+c
+d 191 4 0 0 0
+c
+d 569 4 0 0 0
+c
+d 574 3 1 0 0
+c
+d 1165 1 0 0 0
+c
+d 1167 1 0 1 0
+c
+d 48 2 0 0 0
+c
+d 1195 3 0 1 0
+c
+d 242 2 1 0 0
+c
+d 244 1 0 0 0
+c
+d 34 3 1 0 0
+c
+d 738 2 1 0 0
+c
+d 743 1 0 0 0
+c
+d 167 3 0 0 0
+c
+d 21 3 0 0 0
+c
+d 989 2 0 1 0
+c
+d 75 1 0 0 0
+c
+d 79 1 0 1 0
+c
+d 738 2 0 0 0
+c
+d 743 1 1 0 0
+c
+d 793 1 0 0 0
+c
+d 795 2 1 0 0
+c
+d 618 1 0 1 0
+c
+d 638 2 0 1 0
+c
+d 1043 2 0 2 0
+c
+d 111 1 0 0 0
+c
+d 146 1 0 0 0
+c
+d 856 1 0 0 0
+c
+d 873 1 0 0 0
+c
+d 874 1 0 0 0
+c
+d 157 1 0 1 0
+c
+d 162 2 0 1 0
+c
+d 301 4 0 0 0
+c
+d 1295 4 0 0 0
+c
+d 989 1 0 0 0
+c
+d 990 2 1 0 0
+c
+d 1070 2 0 1 0
+c
+d 1071 1 0 1 0
+c
+d 1150 3 0 1 0
+c
+d 1107 1 0 0 0
+c
+d 1110 2 1 0 0
+c
+d 965 1 0 1 0
+c
+d 977 1 0 1 0
+c
+d 982 1 0 0 0
+c
+d 177 1 0 0 0
+c
+d 178 2 0 0 0
+c
+d 356 1 0 0 0
+c
+d 358 1 0 0 0
+c
+d 354 1 0 0 0
+c
+d 1125 1 0 0 0
+c
+d 734 3 0 1 0
+c
+d 437 2 0 0 0
+c
+d 84 3 0 1 0
+c
+d 275 2 0 0 0
+c
+d 59 3 0 0 0
+c
+d 344 2 0 0 0
+c
+d 610 2 0 0 0
+c
+d 904 1 0 0 0
+c
+d 905 1 0 0 0
+c
+d 791 2 0 0 0
+c
+d 618 1 0 0 0
+c
+d 965 2 0 0 0
+c
+d 797 2 0 0 0
+c
+d 132 1 0 0 0
+c
+d 340 1 0 0 0
+c
+d 166 3 0 0 0
+c
+d 7 1 0 0 0
+c
+d 1279 1 0 0 0
+c
+d 301 2 0 0 0
+c
+d 1157 1 0 0 0
+c
+d 132 1 0 0 0
+c
+d 133 1 0 0 0
+c
+d 28 1 0 0 0
+c
+d 29 1 0 0 0
+c
+d 390 1 0 0 0
+c
+d 392 2 0 0 0
+c
+d 1156 4 1 0 0
+c
+d 1313 4 0 0 0
+c
+d 1295 4 1 0 0
+c
+d 1192 2 0 0 0
+c
+d 384 2 0 1 0
+c
+d 437 3 1 0 0
+c
+d 1071 2 0 0 0
+c
+d 1072 1 0 0 0
+c
+d 418 1 0 1 0
+c
+d 419 1 0 1 0
+c
+d 498 1 0 0 0
+c
+d 499 2 0 0 0
+c
+d 89 1 0 0 0
+c
+d 550 1 0 0 0
+c
+d 84 1 0 0 0
+c
+d 1275 2 1 0 0
+c
+d 1017 2 0 0 0
+c
+d 1021 1 0 0 0
+c
+d 551 3 0 0 0
+c
+d 570 2 0 0 0
+c
+d 354 1 0 0 0
+c
+d 1125 1 0 0 0
+c
+d 616 1 0 0 0
+c
+d 617 1 0 0 0
+c
+d 989 1 0 0 0
+c
+d 355 2 0 0 0
+c
+d 75 2 0 0 0
+c
+d 311 2 0 1 0
+c
+d 523 2 1 0 0
+c
+d 524 1 0 0 0
+c
+d 1195 3 1 0 0
+c
+d 286 4 1 0 0
+c
+d 93 2 0 1 0
+c
+d 142 1 0 1 0
+c
+d 791 2 1 0 0
+c
+d 936 1 0 0 0
+c
+d 743 1 0 0 0
+c
+d 745 1 0 0 0
+c
+d 437 2 1 0 0
+c
+d 451 1 0 0 0
+c
+d 46 2 0 1 0
+c
+d 965 2 0 1 0
+c
+d 972 1 0 1 0
+c
+d 88 4 1 0 0
+c
+d 570 3 1 0 0
+c
+d 205 2 0 0 0
+c
+d 206 1 1 0 0
+c
+d 1125 3 0 2 0
+c
+d 815 1 0 1 0
+c
+d 817 1 0 1 0
+c
+d 44 3 0 1 0
+c
+d 861 1 0 0 0
+c
+d 871 1 0 0 0
+c
+d 392 1 0 0 0
+c
+d 1126 1 0 1 0
+c
+d 291 1 1 0 0
+c
+d 299 2 0 0 0
+c
+d 285 3 0 0 0
+c
+d 10 4 1 0 0
+c
+d 358 3 0 2 0
+c
+d 806 3 1 0 0
+c
+d 789 3 0 1 0
+c
+d 46 1 0 1 0
+c
+d 75 1 0 0 0
+c
+d 1285 1 0 0 0
+c
+d 1286 1 0 0 0
+c
+d 1156 1 1 0 0
+c
+d 1157 1 0 0 0
+c
+d 75 2 0 1 0
+c
+d 661 1 0 0 0
+c
+d 662 2 1 0 0
+c
+d 384 2 0 0 0
+c
+d 791 3 0 0 0
+c
+d 792 1 0 0 0
+c
+d 425 1 1 0 0
+c
+d 426 2 0 0 0
+c
+d 545 1 0 0 0
+c
+d 546 2 0 0 0
+c
+d 606 2 0 0 0
+c
+d 608 1 0 1 0
+c
+d 615 1 0 0 0
+c
+d 616 1 0 0 0
+c
+d 568 1 0 0 0
+c
+d 570 1 0 0 0
+c
+d 618 1 0 0 0
+c
+d 965 1 0 0 0
+c
+d 60 1 0 0 0
+c
+d 630 1 0 0 0
+c
+d 608 3 0 0 0
+c
+d 970 2 0 0 0
+c
+d 972 1 1 0 0
+c
+d 803 1 0 0 0
+c
+d 804 2 1 0 0
+c
+d 294 4 0 0 0
+c
+d 168 1 0 1 0
+c
+d 378 1 0 0 0
+c
+d 1112 1 0 1 0
+c
+d 801 1 0 0 0
+c
+d 802 1 0 0 0
+c
+d 75 2 0 0 0
+c
+d 262 1 0 1 0
+c
+d 274 1 0 1 0
+c
+d 90 1 0 0 0
+c
+d 91 1 0 0 0
+c
+d 84 3 0 1 0
+c
+d 87 1 0 0 0
+c
+d 89 1 0 1 0
+c
+d 157 3 1 0 0
+c
+d 617 1 0 0 0
+c
+d 985 1 0 0 0
+c
+d 341 1 0 0 0
+c
+d 400 2 0 0 0
+c
+d 926 2 0 0 0
+c
+d 1125 1 0 1 0
+c
+d 1127 2 0 1 0
+c
+d 1050 2 0 0 0
+c
+d 599 2 0 2 0
+c
+d 1163 3 1 0 0
+c
+d 1266 1 0 0 0
+c
+d 1285 2 0 0 0
+c
+d 775 1 0 1 0
+c
+d 784 1 0 0 0
+c
+d 785 1 0 1 0
+c
+d 807 1 0 1 0
+c
+d 907 1 0 1 0
+c
+d 1235 2 0 0 0
+c
+d 275 3 0 0 0
+c
+d 199 1 0 0 0
+c
+d 200 1 0 0 0
+c
+d 1022 2 0 0 0
+c
+d 1023 1 0 0 0
+c
+d 565 1 0 1 0
+c
+d 568 2 0 1 0
+c
+d 327 1 0 0 0
+c
+d 334 1 0 0 0
+c
+d 551 2 0 0 0
+c
+d 164 1 0 0 0
+c
+d 1104 1 0 0 0
+c
+d 355 1 0 0 0
+c
+d 356 1 0 0 0
+c
+d 353 3 0 2 0
+c
+d 795 2 0 0 0
+c
+d 195 2 0 1 0
+c
+d 206 1 0 1 0
+c
+d 4 1 0 0 0
+c
+d 5 1 0 0 0
+c
+d 1070 1 0 0 0
+c
+d 1071 1 0 0 0
+c
+d 970 2 1 0 0
+c
+d 972 1 0 0 0
+c
+d 194 2 0 0 0
+c
+d 204 1 0 1 0
+c
+d 169 4 1 0 0
+c
+d 1282 3 0 0 0
+c
+d 507 2 1 0 0
+c
+d 1070 1 0 0 0
+c
+d 686 3 0 0 0
+c
+d 75 1 0 1 0
+c
+d 84 1 0 0 0
+c
+d 1294 2 0 1 0
+c
+d 100 4 1 0 0
+c
+d 1 1 0 0 0
+c
+d 17 2 1 0 0
+c
+d 89 2 0 1 0
+c
+d 1185 1 0 0 0
+c
+d 1186 1 0 0 0
+c
+d 274 1 0 0 0
+c
+d 276 1 0 0 0
+c
+d 277 1 1 0 0
+c
+d 855 4 1 0 0
+c
+d 46 4 0 0 0
+c
+d 835 2 0 0 0
+c
+d 900 1 1 0 0
+c
+d 481 3 0 1 0
+c
+d 120 2 0 0 0
+c
+d 437 3 0 2 0
+c
+d 591 3 0 2 0
+c
+d 789 2 0 0 0
+c
+d 790 1 0 0 0
+c
+d 1 1 0 0 0
+c
+d 2 1 0 0 0
+c
+d 186 1 0 0 0
+c
+d 212 1 1 0 0
+c
+d 213 1 0 0 0
+c
+d 799 2 0 2 0
+c
+d 507 3 1 0 0
+c
+d 598 1 0 0 0
+c
+d 606 1 0 0 0
+c
+d 549 4 1 0 0
+c
+d 377 1 0 1 0
+c
+d 384 2 0 0 0
+c
+d 1274 1 0 0 0
+c
+d 1275 2 0 0 0
+c
+d 1278 1 0 0 0
+c
+d 281 2 0 0 0
+c
+d 557 2 1 0 0
+c
+d 565 1 0 0 0
+c
+d 294 3 0 0 0
+c
+d 87 2 0 1 0
+c
+d 507 1 0 0 0
+c
+d 508 1 0 0 0
+c
+d 156 1 0 1 0
+c
+d 400 1 0 0 0
+c
+d 291 1 0 1 0
+c
+d 299 2 0 1 0
+c
+d 769 4 0 0 0
+c
+d 437 3 0 0 0
+c
+d 610 1 0 0 0
+c
+d 611 2 1 0 0
+c
+d 333 2 1 0 0
+c
+d 340 1 0 0 0
+c
+d 46 3 1 0 0
+c
+d 81 1 0 0 0
+c
+d 82 1 0 1 0
+c
+d 620 2 0 1 0
+c
+d 1036 1 0 1 0
+c
+d 382 1 0 1 0
+c
+d 384 1 0 0 0
+c
+d 385 1 0 1 0
+c
+d 556 1 0 0 0
+c
+d 557 1 0 0 0
+c
+d 606 2 0 0 0
+c
+d 125 1 0 0 0
+c
+d 126 2 0 0 0
+c
+d 278 3 1 0 0
+c
+d 280 1 0 0 0
+c
+d 769 2 0 0 0
+c
+d 939 1 1 0 0
+c
+d 998 3 1 0 0
+c
+d 286 2 0 0 0
+c
+d 60 1 0 0 0
+c
+d 647 1 0 0 0
+c
+d 85 1 0 0 0
+c
+d 1277 1 0 0 0
+c
+d 1278 1 0 0 0
+c
+d 211 1 0 0 0
+c
+d 217 1 0 0 0
+c
+d 534 3 0 2 0
+c
+d 101 2 0 1 0
+c
+d 597 1 0 1 0
+c
+d 534 2 0 0 0
+c
+d 621 2 0 0 0
+c
+d 186 2 0 0 0
+c
+d 858 1 0 0 0
+c
+d 872 1 0 0 0
+c
+d 348 2 0 0 0
+c
+d 568 3 1 0 0
+c
+d 569 1 0 0 0
+c
+d 484 3 0 1 0
+c
+d 146 3 0 0 0
+c
+d 691 1 0 0 0
+c
+d 697 1 0 0 0
+c
+d 1071 1 0 0 0
+c
+d 1073 1 0 0 0
+c
+d 156 1 0 1 0
+c
+d 163 2 0 1 0
+c
+d 527 3 1 0 0
+c
+d 791 1 0 0 0
+c
+d 832 2 1 0 0
+c
+d 159 2 0 0 0
+c
+d 1252 2 0 0 0
+c
+d 1091 1 0 1 0
+c
+d 1092 1 0 1 0
+c
+d 18 2 0 0 0
+c
+d 997 1 1 0 0
+c
+d 84 2 0 0 0
+c
+d 1285 1 1 0 0
+c
+d 608 3 1 0 0
+c
+d 838 3 0 1 0
+c
+d 990 3 1 0 0
+c
+d 1013 1 0 1 0
+c
+d 1017 2 0 1 0
+c
+d 19 2 0 1 0
+c
+d 1008 1 0 1 0
+c
+d 568 4 1 0 0
+c
+d 919 1 0 0 0
+c
+d 923 1 1 0 0
+c
+d 924 1 0 0 0
+c
+d 509 3 0 2 0
+c
+d 301 4 0 0 0
+c
+d 142 4 0 0 0
+c
+d 48 2 0 0 0
+c
+d 10 3 0 0 0
+c
+d 1269 2 1 0 0
+c
+d 787 1 0 1 0
+c
+d 884 1 0 0 0
+c
+d 101 2 0 0 0
+c
+d 105 1 0 0 0
+c
+d 575 1 0 1 0
+c
+d 578 1 0 1 0
+c
+d 787 1 0 1 0
+c
+d 789 1 0 0 0
+c
+d 437 3 0 0 0
+c
+d 341 1 0 1 0
+c
+d 343 1 0 1 0
+c
+d 437 1 0 0 0
+c
+d 5 3 1 0 0
+c
+d 716 2 0 1 0
+c
+d 767 3 0 0 0
+c
+d 570 3 0 2 0
+c
+d 610 4 0 1 0
+c
+d 1013 1 0 0 0
+c
+d 1016 1 0 0 0
+c
+d 610 1 0 0 0
+c
+d 611 1 0 0 0
+c
+d 965 3 1 0 0
+c
+d 93 2 0 0 0
+c
+d 48 1 0 0 0
+c
+d 939 1 0 0 0
+c
+d 941 1 0 0 0
+c
+d 1256 4 0 0 0
+c
+d 162 4 1 0 0
+c
+d 111 2 0 0 0
+c
+d 146 1 1 0 0
+c
+d 835 2 0 0 0
+c
+d 900 1 0 0 0
+c
+d 836 2 0 0 0
+c
+d 157 1 0 0 0
+c
+d 159 1 0 0 0
+c
+d 1252 2 0 0 0
+c
+d 1070 2 1 0 0
+c
+d 1073 1 0 0 0
+c
+d 146 1 0 0 0
+c
+d 152 1 0 0 0
+c
+d 333 3 1 0 0
+c
+d 92 1 0 0 0
+c
+d 93 1 0 0 0
+c
+d 341 2 1 0 0
+c
+d 342 1 0 0 0
+c
+d 551 3 1 0 0
+c
+d 508 1 0 0 0
+c
+d 509 1 0 0 0
+c
+d 1013 3 0 0 0
+c
+d 593 1 0 0 0
+c
+d 677 1 0 0 0
+c
+d 998 2 0 0 0
+c
+d 163 1 0 0 0
+c
+d 171 1 0 0 0
+c
+d 172 1 1 0 0
+c
+d 568 1 0 0 0
+c
+d 569 2 0 1 0
+c
+d 494 4 0 0 0
+c
+d 87 2 0 0 0
+c
+d 1163 2 0 0 0
+c
+d 270 1 0 0 0
+c
+d 272 1 0 0 0
+c
+d 578 3 0 0 0
+c
+d 30 2 0 0 0
+c
+d 556 2 0 1 0
+c
+d 565 1 0 1 0
+c
+d 554 3 1 0 0
+c
+d 101 1 0 0 0
+c
+d 610 2 0 2 0
+c
+d 393 1 0 0 0
+c
+d 407 2 1 0 0
+c
+d 162 1 1 0 0
+c
+d 364 2 0 0 0
+c
+d 821 3 0 2 0
+c
+d 81 2 0 1 0
+c
+d 1295 1 0 1 0
+c
+d 457 2 1 0 0
+c
+d 463 1 0 0 0
+c
+d 12 1 0 0 0
+c
+d 90 1 0 0 0
+c
+d 33 3 0 2 0
+c
+d 738 1 0 0 0
+c
+d 854 1 0 0 0
+c
+d 437 3 0 0 0
+c
+d 437 1 0 0 0
+c
+d 569 1 0 0 0
+c
+d 743 3 0 1 0
+c
+d 744 1 0 0 0
+c
+d 156 1 1 0 0
+c
+d 163 2 0 0 0
+c
+d 842 1 0 0 0
+c
+d 881 1 0 0 0
+c
+d 811 2 0 0 0
+c
+d 1278 2 0 1 0
+c
+d 1281 1 0 1 0
+c
+d 419 3 0 1 0
+c
+d 378 3 0 1 0
+c
+d 164 1 0 0 0
+c
+d 368 1 0 0 0
+c
+d 1286 1 0 0 0
+c
+d 1287 1 0 0 0
+c
+d 904 2 0 1 0
+c
+d 905 2 0 0 0
+c
+d 602 2 0 0 0
+c
+d 39 1 0 0 0
+c
+d 43 2 0 0 0
+c
+d 225 1 0 0 0
+c
+d 227 1 0 0 0
+c
+d 647 1 0 0 0
+c
+d 964 2 0 0 0
+c
+d 866 1 0 0 0
+c
+d 867 1 1 0 0
+c
+d 868 1 0 0 0
+c
+d 181 1 0 0 0
+c
+d 182 1 0 1 0
+c
+d 444 4 1 0 0
+c
+d 163 1 0 1 0
+c
+d 172 1 0 1 0
+c
+d 173 2 0 0 0
+c
+d 1195 3 0 1 0
+c
+d 597 2 0 1 0
+c
+d 606 1 0 1 0
+c
+d 556 1 0 0 0
+c
+d 565 1 0 0 0
+c
+d 301 2 0 0 0
+c
+d 568 1 0 0 0
+c
+d 1056 1 0 1 0
+c
+d 1057 1 0 0 0
+c
+d 620 1 0 0 0
+c
+d 645 1 0 1 0
+c
+d 646 1 0 1 0
+c
+d 48 1 0 0 0
+c
+d 49 2 0 0 0
+c
+d 343 2 0 1 0
+c
+d 564 1 0 0 0
+c
+d 565 1 0 0 0
+c
+d 217 2 1 0 0
+c
+d 221 1 0 0 0
+c
+d 87 2 0 0 0
+c
+d 62 2 1 0 0
+c
+d 63 2 0 0 0
+c
+d 437 2 0 0 0
+c
+d 457 1 1 0 0
+c
+d 1150 3 0 1 0
+c
+d 908 3 1 0 0
+c
+d 734 3 0 2 0
+c
+d 1126 1 0 1 0
+c
+d 1127 1 0 1 0
+c
+d 1129 1 0 0 0
+c
+d 343 2 0 0 0
+c
+d 575 2 1 0 0
+c
+d 513 3 1 0 0
+c
+d 422 1 0 1 0
+c
+d 423 1 0 1 0
+c
+d 49 1 0 0 0
+c
+d 59 1 0 0 0
+c
+d 1023 2 1 0 0
+c
+d 1024 1 0 0 0
+c
+d 876 1 0 1 0
+c
+d 878 2 0 0 0
+c
+d 437 2 0 1 0
+c
+d 463 1 0 1 0
+c
+d 506 1 0 1 0
+c
+d 507 2 0 1 0
+c
+d 787 3 1 0 0
+c
+d 57 3 0 1 0
+c
+d 616 1 0 0 0
+c
+d 989 1 0 1 0
+c
+d 989 3 0 0 0
+c
+d 622 2 0 0 0
+c
+d 565 1 0 0 0
+c
+d 789 1 0 1 0
+c
+d 791 1 0 1 0
+c
+d 84 2 0 0 0
+c
+d 60 2 0 2 0
+c
+d 437 2 0 1 0
+c
+d 817 4 1 0 0
+c
+d 199 2 0 1 0
+c
+d 211 1 0 1 0
+c
+d 574 1 0 0 0
+c
+d 795 1 0 0 0
+c
+d 662 2 0 0 0
+c
+d 1071 1 0 1 0
+c
+d 1073 2 0 1 0
+c
+d 418 3 1 0 0
+c
+d 500 4 1 0 0
+c
+d 568 2 0 0 0
+c
+d 569 1 0 0 0
+c
+d 204 1 0 0 0
+c
+d 205 2 0 0 0
+c
+d 1241 1 0 0 0
+c
+d 791 1 0 0 0
+c
+d 793 1 0 0 0
+c
+d 1077 4 1 0 0
+c
+d 278 3 1 0 0
+c
+d 101 1 0 0 0
+c
+d 597 2 1 0 0
+c
+d 111 1 0 0 0
+c
+d 113 2 1 0 0
+c
+d 274 2 0 0 0
+c
+d 1230 1 0 0 0
+c
+d 46 4 1 0 0
+c
+d 242 2 0 1 0
+c
+d 243 1 0 1 0
+c
+d 568 1 0 0 0
+c
+d 572 2 1 0 0
+c
+d 500 2 0 1 0
+c
+d 502 1 0 1 0
+c
+d 965 3 1 0 0
+c
+d 1070 1 1 0 0
+c
+d 1073 2 0 0 0
+c
+d 608 4 1 0 0
+c
+d 208 3 0 2 0
+c
+d 418 4 1 0 0
+c
+d 835 2 0 1 0
+c
+d 836 2 0 0 0
+c
+d 811 2 0 0 0
+c
+d 18 1 0 0 0
+c
+d 95 1 0 0 0
+c
+d 466 2 0 2 0
+c
+d 101 1 0 0 0
+c
+d 111 1 0 0 0
+c
+d 262 1 0 1 0
+c
+d 270 1 0 0 0
+c
+d 413 1 1 0 0
+c
+d 418 2 0 0 0
+c
+d 212 2 0 2 0
+c
+d 93 2 0 0 0
+c
+d 799 1 0 1 0
+c
+d 843 2 0 1 0
+c
+d 510 3 0 2 0
+c
+d 768 1 0 0 0
+c
+d 773 1 0 0 0
+c
+d 120 3 0 1 0
+c
+d 557 1 0 0 0
+c
+d 565 2 1 0 0
+c
+d 60 1 0 0 0
+c
+d 647 1 0 1 0
+c
+d 964 2 0 0 0
+c
+d 437 1 0 0 0
+c
+d 457 2 1 0 0
+c
+d 575 1 0 0 0
+c
+d 576 1 0 0 0
+c
+d 411 4 0 2 0
+c
+d 570 3 0 1 0
+c
+d 87 1 0 0 0
+c
+d 89 2 1 0 0
+c
+d 75 1 0 0 0
+c
+d 86 1 0 0 0
+c
+d 532 1 0 0 0
+c
+d 535 1 0 0 0
+c
+d 558 3 0 0 0
+c
+d 75 1 0 1 0
+c
+d 86 1 0 1 0
+c
+d 649 2 0 1 0
+c
+d 650 1 1 0 0
+c
+d 167 1 0 0 0
+c
+d 369 1 0 0 0
+c
+d 570 2 0 0 0
+c
+d 571 2 0 0 0
+c
+d 737 1 0 0 0
+c
+d 854 1 0 0 0
+c
+d 278 3 1 0 0
+c
+d 1274 3 0 0 0
+c
+d 58 2 0 0 0
+c
+d 1308 1 0 1 0
+c
+d 1157 2 0 0 0
+c
+d 1159 1 0 0 0
+c
+d 524 4 0 0 0
+c
+d 1237 3 1 0 0
+c
+d 395 2 0 0 0
+c
+d 1106 1 0 0 0
+c
+d 356 1 0 0 0
+c
+d 358 1 1 0 0
+c
+d 591 2 0 0 0
+c
+d 595 1 1 0 0
+c
+d 787 1 0 0 0
+c
+d 789 1 0 0 0
+c
+d 790 1 0 0 0
+c
+d 51 1 0 0 0
+c
+d 52 1 0 1 0
+c
+d 56 1 0 0 0
+c
+d 1194 1 0 0 0
+c
+d 1202 1 0 0 0
+c
+d 608 1 0 0 0
+c
+d 611 1 0 0 0
+c
+d 277 1 0 0 0
+c
+d 1158 1 0 0 0
+c
+d 615 3 0 0 0
+c
+d 1270 3 0 1 0
+c
+d 262 2 0 0 0
+c
+d 32 3 0 0 0
+c
+d 565 3 1 0 0
+c
+d 156 3 0 0 0
+c
+d 12 1 0 1 0
+c
+d 89 1 0 1 0
+c
+d 90 1 0 0 0
+c
+d 621 2 0 1 0
+c
+d 631 2 0 1 0
+c
+d 142 2 0 0 0
+c
+d 167 1 0 0 0
+c
+d 1121 1 0 0 0
+c
+d 327 1 0 0 0
+c
+d 349 1 0 0 0
+c
+d 882 1 0 0 0
+c
+d 888 1 0 0 0
+c
+d 523 2 0 0 0
+c
+d 524 1 0 0 0
+c
+d 46 1 0 0 0
+c
+d 75 2 1 0 0
+c
+d 21 4 1 0 0
+c
+d 133 2 0 0 0
+c
+d 1004 1 1 0 0
+c
+d 1005 1 0 0 0
+c
+d 1006 2 0 0 0
+c
+d 602 2 1 0 0
+c
+d 603 1 0 0 0
+c
+d 217 2 1 0 0
+c
+d 1243 1 0 0 0
+c
+d 615 1 0 0 0
+c
+d 616 1 0 0 0
+c
+d 565 1 0 0 0
+c
+d 791 2 0 0 0
+c
+d 568 1 0 0 0
+c
+d 572 2 0 0 0
+c
+d 157 2 1 0 0
+c
+d 353 3 1 0 0
+c
+d 602 2 0 0 0
+c
+d 595 3 0 2 0
+c
+d 185 2 1 0 0
+c
+d 186 1 0 0 0
+c
+d 487 3 0 0 0
+c
+d 767 1 0 0 0
+c
+d 876 1 0 0 0
+c
+d 888 1 0 0 0
+c
+d 791 1 0 0 0
+c
+d 793 1 0 0 0
+c
+d 794 1 0 0 0
+c
+d 146 2 0 0 0
+c
+d 697 2 0 0 0
+c
+d 515 4 1 0 0
+c
+d 384 1 0 0 0
+c
+d 394 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 608 1 0 0 0
+c
+d 1110 2 0 2 0
+c
+d 89 1 0 1 0
+c
+d 532 1 0 1 0
+c
+d 437 2 0 2 0
+c
+d 1194 3 0 0 0
+c
+d 132 1 0 0 0
+c
+d 492 1 0 0 0
+c
+d 550 1 0 0 0
+c
+d 551 1 0 0 0
+c
+d 622 2 1 0 0
+c
+d 1007 2 0 0 0
+c
+d 167 2 0 0 0
+c
+d 622 4 0 0 0
+c
+d 101 1 0 1 0
+c
+d 108 2 0 1 0
+c
+d 278 4 1 0 0
+c
+d 791 3 1 0 0
+c
+d 298 2 0 0 0
+c
+d 323 1 1 0 0
+c
+d 60 2 0 0 0
+c
+d 647 1 0 0 0
+c
+d 33 2 0 0 0
+c
+d 1285 2 0 0 0
+c
+d 446 4 1 0 0
+c
+d 437 4 1 0 0
+c
+d 797 2 0 0 0
+c
+d 564 1 0 0 0
+c
+d 565 2 1 0 0
+c
+d 908 3 0 0 0
+c
+d 1179 2 0 0 0
+c
+d 1168 2 0 0 0
+c
+d 384 2 0 0 0
+c
+d 348 3 0 0 0
+c
+d 157 1 0 1 0
+c
+d 356 1 0 1 0
+c
+d 358 1 0 0 0
+c
+d 565 1 0 0 0
+c
+d 568 1 0 0 0
+c
+d 75 1 0 0 0
+c
+d 86 1 0 1 0
+c
+d 793 2 0 1 0
+c
+d 618 1 0 1 0
+c
+d 965 2 0 1 0
+c
+d 1070 1 1 0 0
+c
+d 1073 2 0 0 0
+c
+d 769 3 0 0 0
+c
+d 60 3 0 0 0
+c
+d 120 3 1 0 0
+c
+d 520 1 0 0 0
+c
+d 521 1 0 0 0
+c
+d 861 2 1 0 0
+c
+d 870 1 0 0 0
+c
+d 113 1 0 0 0
+c
+d 146 1 0 0 0
+c
+d 414 2 0 0 0
+c
+d 340 4 0 0 0
+c
+d 507 1 0 0 0
+c
+d 1070 1 0 0 0
+c
+d 400 1 0 0 0
+c
+d 408 2 0 0 0
+c
+d 5 4 1 0 0
+c
+d 384 1 0 0 0
+c
+d 389 1 0 1 0
+c
+d 390 1 0 0 0
+c
+d 610 2 0 2 0
+c
+d 159 4 0 1 0
+c
+d 369 2 0 1 0
+c
+d 12 2 0 0 0
+c
+d 502 3 0 0 0
+c
+d 1005 3 1 0 0
+c
+d 568 2 0 0 0
+c
+d 570 1 1 0 0
+c
+d 784 3 0 0 0
+c
+d 568 1 0 0 0
+c
+d 572 2 1 0 0
+c
+d 57 2 0 1 0
+c
+d 59 1 0 1 0
+c
+d 1274 3 1 0 0
+c
+d 1106 3 0 0 0
+c
+d 382 3 1 0 0
+c
+d 839 1 0 0 0
+c
+d 842 3 0 0 0
+c
+d 738 1 0 0 0
+c
+d 854 1 0 0 0
+c
+d 857 1 0 0 0
+c
+d 893 1 0 0 0
+c
+d 146 2 0 0 0
+c
+d 614 3 0 0 0
+c
+d 1259 3 1 0 0
+c
+d 1289 2 0 1 0
+c
+d 498 4 0 0 0
+c
+d 276 3 1 0 0
+c
+d 328 1 0 0 0
+c
+d 353 1 0 0 0
+c
+d 29 5 0 0 0
+c
+d 1013 3 0 0 0
+c
+d 1017 1 0 0 0
+c
+d 56 2 0 0 0
+c
+d 65 1 0 0 0
+c
+d 46 2 0 1 0
+c
+d 977 3 0 0 0
+c
+d 836 3 1 0 0
+c
+d 301 3 0 0 0
+c
+d 455 2 0 0 0
+c
+d 492 2 0 0 0
+c
+d 493 1 0 0 0
+c
+d 348 1 0 0 0
+c
+d 392 1 0 0 0
+c
+d 393 2 0 0 0
+c
+d 621 4 0 0 0
+c
+d 591 1 0 0 0
+c
+d 597 1 0 0 0
+c
+d 157 2 0 0 0
+c
+d 507 3 1 0 0
+c
+d 508 1 0 0 0
+c
+d 507 1 0 0 0
+c
+d 508 1 0 0 0
+c
+d 146 1 0 0 0
+c
+d 1098 1 0 0 0
+c
+d 100 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 1005 1 0 0 0
+c
+d 602 1 0 0 0
+c
+d 680 1 1 0 0
+c
+d 681 1 0 0 0
+c
+d 965 1 1 0 0
+c
+d 968 2 0 0 0
+c
+d 1165 2 0 0 0
+c
+d 46 2 0 1 0
+c
+d 75 1 0 0 0
+c
+d 86 1 0 0 0
+c
+d 74 3 1 0 0
+c
+d 437 2 0 0 0
+c
+d 33 1 0 1 0
+c
+d 34 1 0 0 0
+c
+d 1285 3 0 2 0
+c
+d 211 4 1 0 0
+c
+d 970 1 0 0 0
+c
+d 971 2 0 0 0
+c
+d 785 1 0 1 0
+c
+d 86 2 0 0 0
+c
+d 559 1 0 1 0
+c
+d 568 2 0 1 0
+c
+d 162 2 0 0 0
+c
+d 368 1 1 0 0
+c
+d 162 2 0 0 0
+c
+d 60 1 0 0 0
+c
+d 62 1 0 0 0
+c
+d 1070 2 0 0 0
+c
+d 1007 1 0 0 0
+c
+d 1009 1 0 0 0
+c
+d 555 3 0 0 0
+c
+d 989 3 1 0 0
+c
+d 18 3 1 0 0
+c
+d 101 2 0 0 0
+c
+d 105 1 1 0 0
+c
+d 106 1 0 0 0
+c
+d 621 1 0 0 0
+c
+d 622 1 0 0 0
+c
+d 1034 1 0 0 0
+c
+d 52 2 0 0 0
+c
+d 54 1 0 1 0
+c
+d 1269 3 0 0 0
+c
+d 708 3 1 0 0
+c
+d 630 2 0 0 0
+c
+d 663 3 1 0 0
+c
+d 340 1 0 0 0
+c
+d 491 1 0 0 0
+c
+d 492 2 0 0 0
+c
+d 437 3 1 0 0
+c
+d 225 1 0 1 0
+c
+d 226 1 0 0 0
+c
+d 227 1 0 0 0
+c
+d 65 4 1 0 0
+c
+d 281 1 0 0 0
+c
+d 1156 1 1 0 0
+c
+d 1192 1 0 0 0
+c
+d 289 1 0 0 0
+c
+d 290 1 0 0 0
+c
+d 710 4 0 0 0
+c
+d 509 1 0 0 0
+c
+d 1070 2 0 0 0
+c
+d 48 3 0 1 0
+c
+d 84 1 0 0 0
+c
+d 1286 3 0 0 0
+c
+d 509 2 0 0 0
+c
+d 1300 3 0 0 0
+c
+d 1301 1 0 0 0
+c
+d 822 1 1 0 0
+c
+d 823 2 0 0 0
+c
+d 552 2 0 0 0
+c
+d 358 2 0 2 0
+c
+d 366 1 0 0 0
+c
+d 437 2 0 0 0
+c
+d 445 1 0 0 0
+c
+d 449 1 0 0 0
+c
+d 87 2 0 1 0
+c
+d 176 1 0 1 0
+c
+d 194 1 0 0 0
+c
+d 1 2 0 1 0
+c
+d 4 1 0 1 0
+c
+d 829 2 0 0 0
+c
+d 569 2 0 2 0
+c
+d 574 1 0 0 0
+c
+d 34 1 1 0 0
+c
+d 1313 2 0 0 0
+c
+d 400 3 0 0 0
+c
+d 60 3 0 2 0
+c
+d 737 3 0 0 0
+c
+d 287 1 1 0 0
+c
+d 288 2 0 0 0
+c
+d 327 2 0 0 0
+c
+d 348 1 1 0 0
+c
+d 663 2 0 0 0
+c
+d 278 2 1 0 0
+c
+d 279 1 0 0 0
+c
+d 10 1 0 1 0
+c
+d 1269 1 0 0 0
+c
+d 457 3 0 2 0
+c
+d 1017 1 0 1 0
+c
+d 1019 2 0 0 0
+c
+d 541 2 0 0 0
+c
+d 142 1 0 0 0
+c
+d 143 2 1 0 0
+c
+d 965 2 1 0 0
+c
+d 970 1 0 0 0
+c
+d 1266 4 0 0 0
+c
+d 861 2 0 0 0
+c
+d 862 2 0 1 0
+c
+d 529 1 0 0 0
+c
+d 540 1 0 0 0
+c
+d 796 3 0 0 0
+c
+d 994 1 0 0 0
+c
+d 998 1 0 0 0
+c
+d 284 3 1 0 0
+c
+d 145 1 0 0 0
+c
+d 146 2 0 0 0
+c
+d 395 1 0 0 0
+c
+d 397 2 0 0 0
+c
+d 1110 2 0 0 0
+c
+d 384 2 0 1 0
+c
+d 392 1 0 1 0
+c
+d 146 3 1 0 0
+c
+d 338 1 0 1 0
+c
+d 340 1 0 1 0
+c
+d 157 3 0 2 0
+c
+d 529 1 0 0 0
+c
+d 540 2 0 0 0
+c
+d 39 3 0 1 0
+c
+d 129 4 1 0 0
+c
+d 509 4 1 0 0
+c
+d 159 3 0 0 0
+c
+d 734 3 0 0 0
+c
+d 87 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 1285 3 0 2 0
+c
+d 55 1 0 0 0
+c
+d 66 1 0 0 0
+c
+d 861 2 1 0 0
+c
+d 870 1 0 0 0
+c
+d 1319 1 0 0 0
+c
+d 1320 1 0 0 0
+c
+d 1108 1 0 0 0
+c
+d 1110 1 0 0 0
+c
+d 133 2 0 0 0
+c
+d 1098 4 0 1 0
+c
+d 829 3 0 0 0
+c
+d 738 3 0 0 0
+c
+d 286 2 0 1 0
+c
+d 1223 1 0 1 0
+c
+d 436 3 0 2 0
+c
+d 651 3 0 2 0
+c
+d 52 1 0 0 0
+c
+d 54 2 1 0 0
+c
+d 87 4 0 2 0
+c
+d 1008 3 1 0 0
+c
+d 384 1 0 0 0
+c
+d 394 1 0 0 0
+c
+d 146 2 1 0 0
+c
+d 151 1 0 0 0
+c
+d 181 1 0 0 0
+c
+d 193 2 0 0 0
+c
+d 286 3 0 1 0
+c
+d 288 1 0 0 0
+c
+d 300 1 0 0 0
+c
+d 288 4 1 0 0
+c
+d 1266 1 0 0 0
+c
+d 1285 1 0 0 0
+c
+d 55 1 0 0 0
+c
+d 694 2 0 0 0
+c
+d 21 1 0 0 0
+c
+d 1024 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 608 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 111 1 0 0 0
+c
+d 86 3 0 2 0
+c
+d 301 1 0 0 0
+c
+d 303 1 0 0 0
+c
+d 261 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 87 2 0 1 0
+c
+d 144 1 0 0 0
+c
+d 145 1 0 0 0
+c
+d 75 2 0 0 0
+c
+d 33 1 0 0 0
+c
+d 34 2 1 0 0
+c
+d 134 2 0 0 0
+c
+d 135 1 0 0 0
+c
+d 286 2 0 0 0
+c
+d 1221 1 1 0 0
+c
+d 75 2 0 0 0
+c
+d 574 2 0 0 0
+c
+d 615 1 0 0 0
+c
+d 616 1 0 0 0
+c
+d 1195 2 0 0 0
+c
+d 1197 1 0 0 0
+c
+d 144 1 0 0 0
+c
+d 145 1 0 0 0
+c
+d 84 2 0 0 0
+c
+d 85 2 1 0 0
+c
+d 532 3 1 0 0
+c
+d 1290 3 1 0 0
+c
+d 120 1 0 1 0
+c
+d 121 1 0 0 0
+c
+d 133 4 0 0 0
+c
+d 743 3 0 2 0
+c
+d 705 2 1 0 0
+c
+d 710 1 0 0 0
+c
+d 570 2 0 0 0
+c
+d 571 1 0 0 0
+c
+d 939 3 0 0 0
+c
+d 419 2 0 0 0
+c
+d 705 1 0 0 0
+c
+d 708 1 0 0 0
+c
+d 708 4 0 0 0
+c
+d 46 1 0 1 0
+c
+d 775 2 0 1 0
+c
+d 89 1 0 0 0
+c
+d 1285 2 0 0 0
+c
+d 786 2 0 1 0
+c
+d 787 2 0 0 0
+c
+d 691 2 0 0 0
+c
+d 708 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 365 1 0 0 0
+c
+d 755 1 0 0 0
+c
+d 756 1 0 0 0
+c
+d 743 2 1 0 0
+c
+d 753 1 0 0 0
+c
+d 18 3 0 0 0
+c
+d 186 1 0 0 0
+c
+d 187 3 0 0 0
+c
+d 478 1 0 0 0
+c
+d 482 1 0 0 0
+c
+d 592 2 0 0 0
+c
+d 392 2 0 0 0
+c
+d 1127 1 0 0 0
+c
+d 89 3 1 0 0
+c
+d 337 3 1 0 0
+c
+d 5 3 1 0 0
+c
+d 599 2 0 0 0
+c
+d 1017 3 0 1 0
+c
+d 167 4 1 0 0
+c
+d 592 3 0 0 0
+c
+d 1290 2 0 0 0
+c
+d 480 3 1 0 0
+c
+d 145 2 0 0 0
+c
+d 595 1 0 1 0
+c
+d 596 1 0 1 0
+c
+d 12 2 0 0 0
+c
+d 89 1 0 1 0
+c
+d 532 1 1 0 0
+c
+d 534 2 0 0 0
+c
+d 16 1 0 0 0
+c
+d 93 2 0 2 0
+c
+d 878 1 0 0 0
+c
+d 881 1 0 0 0
+c
+d 145 3 0 0 0
+c
+d 1266 2 0 0 0
+c
+d 574 1 0 0 0
+c
+d 1050 1 0 0 0
+c
+d 510 5 0 0 0
+c
+d 75 1 0 0 0
+c
+d 84 1 0 0 0
+c
+d 1294 1 1 0 0
+c
+d 55 1 0 0 0
+c
+d 690 2 1 0 0
+c
+d 509 1 0 0 0
+c
+d 1071 2 1 0 0
+c
+d 615 4 0 2 0
+c
+d 705 2 0 1 0
+c
+d 710 1 0 1 0
+c
+d 92 2 0 2 0
+c
+d 87 1 1 0 0
+c
+d 89 2 0 0 0
+c
+d 509 1 1 0 0
+c
+d 510 2 0 0 0
+c
+d 125 4 1 0 0
+c
+d 278 1 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 75 4 0 0 0
+c
+d 353 4 0 0 0
+c
+d 356 2 0 0 0
+c
+d 358 1 1 0 0
+c
+d 1110 2 0 0 0
+c
+d 690 2 0 0 0
+c
+d 599 2 0 0 0
+c
+d 602 1 0 0 0
+c
+d 608 1 0 0 0
+c
+d 609 2 0 0 0
+c
+d 591 2 0 0 0
+c
+d 596 1 0 0 0
+c
+d 55 2 0 0 0
+c
+d 694 1 0 0 0
+c
+d 50 1 1 0 0
+c
+d 51 2 0 0 0
+c
+d 540 2 0 2 0
+c
+d 543 1 0 0 0
+c
+d 786 1 0 1 0
+c
+d 787 1 0 0 0
+c
+d 162 3 0 2 0
+c
+d 60 2 0 0 0
+c
+d 647 1 1 0 0
+c
+d 795 2 0 0 0
+c
+d 86 2 0 0 0
+c
+d 88 1 0 1 0
+c
+d 55 1 0 0 0
+c
+d 691 2 0 0 0
+c
+d 84 1 0 1 0
+c
+d 1287 1 0 1 0
+c
+d 977 2 0 0 0
+c
+d 49 1 0 1 0
+c
+d 50 1 0 1 0
+c
+d 780 2 0 0 0
+c
+d 46 2 0 2 0
+c
+d 572 1 0 0 0
+c
+d 573 1 0 0 0
+c
+d 423 1 0 0 0
+c
+d 429 1 0 0 0
+c
+d 46 2 1 0 0
+c
+d 775 1 0 0 0
+c
+d 705 1 0 0 0
+c
+d 708 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 550 1 0 1 0
+c
+d 54 1 0 1 0
+c
+d 66 2 0 1 0
+c
+d 153 3 1 0 0
+c
+d 340 3 0 2 0
+c
+d 592 2 0 0 0
+c
+d 594 1 1 0 0
+c
+d 87 2 0 1 0
+c
+d 523 1 0 0 0
+c
+d 524 2 1 0 0
+c
+d 60 2 0 1 0
+c
+d 61 1 0 0 0
+c
+d 602 3 1 0 0
+c
+d 872 2 0 0 0
+c
+d 568 4 1 0 0
+c
+d 907 1 0 0 0
+c
+d 908 1 0 0 0
+c
+d 145 2 1 0 0
+c
+d 145 3 0 0 0
+c
+d 511 1 0 0 0
+c
+d 520 1 0 0 0
+c
+d 521 1 1 0 0
+c
+d 1 2 0 1 0
+c
+d 4 1 0 1 0
+c
+d 57 2 0 0 0
+c
+d 243 2 0 0 0
+c
+d 84 1 0 0 0
+c
+d 1285 1 1 0 0
+c
+d 1286 1 0 0 0
+c
+d 242 1 0 0 0
+c
+d 1231 1 0 0 0
+c
+d 572 4 1 0 0
+c
+d 665 3 0 0 0
+c
+d 114 1 0 1 0
+c
+d 116 1 0 1 0
+c
+d 84 2 1 0 0
+c
+d 1275 1 0 0 0
+c
+d 0 1 0 0 0
+c
+d 1 3 1 0 0
+c
+d 564 1 0 0 0
+c
+d 565 1 0 0 0
+c
+d 152 1 0 0 0
+c
+d 153 1 0 0 0
+c
+d 748 4 0 0 0
+c
+d 46 1 0 0 0
+c
+d 384 2 0 1 0
+c
+d 651 1 0 1 0
+c
+d 690 1 0 0 0
+c
+d 87 2 0 0 0
+c
+d 75 2 0 0 0
+c
+d 384 3 0 2 0
+c
+d 592 3 1 0 0
+c
+d 796 1 1 0 0
+c
+d 797 2 0 0 0
+c
+d 75 1 0 0 0
+c
+d 84 1 0 0 0
+c
+d 66 1 0 0 0
+c
+d 69 2 1 0 0
+c
+d 50 2 0 0 0
+c
+d 51 1 0 0 0
+c
+d 21 1 0 0 0
+c
+d 26 1 1 0 0
+c
+d 39 1 0 0 0
+c
+d 829 2 0 0 0
+c
+d 830 1 0 0 0
+c
+d 49 4 1 0 0
+c
+d 49 1 0 0 0
+c
+d 734 1 0 0 0
+c
+d 84 3 1 0 0
+c
+d 608 1 0 0 0
+c
+d 609 2 0 1 0
+c
+d 570 4 0 1 0
+c
+d 55 2 0 0 0
+c
+d 694 1 1 0 0
+c
+d 368 2 1 0 0
+c
+d 1274 2 0 0 0
+c
+d 457 3 0 2 0
+c
+d 146 3 1 0 0
+c
+d 1024 3 1 0 0
+c
+d 55 2 0 0 0
+c
+d 691 1 0 0 0
+c
+d 799 2 0 2 0
+c
+d 718 2 0 0 0
+c
+d 159 1 0 0 0
+c
+d 178 1 0 0 0
+c
+d 708 2 0 0 0
+c
+d 340 3 0 2 0
+c
+d 52 3 0 2 0
+c
+d 602 2 0 0 0
+c
+d 33 1 0 0 0
+c
+d 34 1 1 0 0
+c
+d 1313 1 0 0 0
+c
+d 565 2 0 2 0
+c
+d 393 1 0 0 0
+c
+d 395 2 0 0 0
+c
+d 49 1 0 0 0
+c
+d 59 1 0 0 0
+c
+d 75 4 0 0 0
+c
+d 534 3 0 2 0
+c
+d 75 3 0 1 0
+c
+d 301 1 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 550 2 0 0 0
+c
+d 690 2 1 0 0
+c
+d 705 1 0 0 0
+c
+d 517 2 0 0 0
+c
+d 518 1 0 0 0
+c
+d 211 3 1 0 0
+c
+d 21 2 0 0 0
+c
+d 1223 3 0 0 0
+c
+d 1060 3 1 0 0
+c
+d 663 2 0 0 0
+c
+d 606 2 0 1 0
+c
+d 75 1 0 0 0
+c
+d 86 1 0 1 0
+c
+d 89 1 0 0 0
+c
+d 119 1 0 0 0
+c
+d 120 1 0 0 0
+c
+d 572 3 0 0 0
+c
+d 55 4 1 0 0
+c
+d 534 3 0 0 0
+c
+d 737 2 0 2 0
+c
+d 592 4 1 0 0
+c
+d 157 2 0 1 0
+c
+d 364 1 0 1 0
+c
+d 196 1 0 0 0
+c
+d 1246 1 0 0 0
+c
+d 1247 1 1 0 0
+c
+d 327 1 1 0 0
+c
+d 334 2 0 0 0
+c
+d 86 1 0 0 0
+c
+d 87 1 0 1 0
+c
+d 570 3 0 2 0
+c
+d 557 2 0 1 0
+c
+d 565 1 0 1 0
+c
+d 557 3 0 2 0
+c
+d 990 1 0 0 0
+c
+d 991 1 0 0 0
+c
+d 992 1 0 0 0
+c
+d 278 1 0 1 0
+c
+d 1168 1 0 0 0
+c
+d 1150 2 0 1 0
+c
+d 1151 1 0 1 0
+c
+d 171 2 0 1 0
+c
+d 172 1 0 1 0
+c
+d 164 1 0 0 0
+c
+d 368 1 1 0 0
+c
+d 602 1 1 0 0
+c
+d 682 2 0 0 0
+c
+d 157 2 0 0 0
+c
+d 568 1 0 0 0
+c
+d 570 1 0 0 0
+c
+d 51 4 1 0 0
+c
+d 564 1 0 0 0
+c
+d 565 2 1 0 0
+c
+d 287 2 0 1 0
+c
+d 288 1 0 1 0
+c
+d 75 4 1 0 0
+c
+d 602 3 0 2 0
+c
+d 392 2 1 0 0
+c
+d 393 1 0 0 0
+c
+d 787 1 0 0 0
+c
+d 788 1 0 1 0
+c
+d 790 1 0 1 0
+c
+d 617 1 0 0 0
+c
+d 985 3 0 0 0
+c
+d 678 3 0 0 0
+c
+d 775 4 1 0 0
+c
+d 50 1 0 0 0
+c
+d 51 1 0 1 0
+c
+d 261 2 0 0 0
+c
+d 60 2 0 0 0
+c
+d 647 1 0 0 0
+c
+d 185 2 1 0 0
+c
+d 186 1 0 0 0
+c
+d 591 2 0 0 0
+c
+d 686 1 0 0 0
+c
+d 966 4 0 0 0
+c
+d 1266 3 1 0 0
+c
+d 88 1 0 1 0
+c
+d 89 1 0 1 0
+c
+d 550 1 0 1 0
+c
+d 551 1 0 0 0
+c
+d 218 2 0 1 0
+c
+d 75 3 0 2 0
+c
+d 592 2 0 1 0
+c
+d 594 1 0 0 0
+c
+d 787 3 0 2 0
+c
+d 75 3 0 0 0
+c
+d 469 3 0 0 0
+c
+d 606 2 0 0 0
+c
+d 341 2 0 0 0
+c
+d 60 4 0 0 0
+c
+d 564 3 0 0 0
+c
+d 534 4 0 1 0
+c
+d 55 4 1 0 0
+c
+d 737 1 0 0 0
+c
+d 753 2 1 0 0
+c
+d 691 1 0 1 0
+c
+d 708 1 0 0 0
+c
+d 709 2 0 1 0
+c
+d 75 2 0 2 0
+c
+d 146 3 1 0 0
+c
+d 1303 1 0 0 0
+c
+d 1304 1 0 0 0
+c
+d 775 2 0 1 0
+c
+d 781 1 0 0 0
+c
+d 185 2 0 0 0
+c
+d 167 3 0 0 0
+c
+d 294 4 0 1 0
+c
+d 35 1 0 0 0
+c
+d 36 1 0 0 0
+c
+d 340 2 0 2 0
+c
+d 795 2 0 0 0
+c
+d 75 3 0 2 0
+c
+d 989 1 0 0 0
+c
+d 990 1 0 0 0
+c
+d 87 2 0 1 0
+c
+d 282 2 0 0 0
+c
+d 1227 1 0 0 0
+c
+d 468 2 0 0 0
+c
+d 509 1 0 0 0
+c
+d 510 2 0 0 0
+c
+d 348 2 0 0 0
+c
+d 511 4 1 0 0
+c
+d 556 2 0 0 0
+c
+d 1071 3 1 0 0
+c
+d 49 2 0 1 0
+c
+d 787 3 1 0 0
+c
+d 153 3 0 2 0
+c
+d 438 4 0 1 0
+c
+d 591 1 0 1 0
+c
+d 592 1 0 0 0
+c
+d 594 1 1 0 0
+c
+d 199 1 0 0 0
+c
+d 200 1 0 0 0
+c
+d 205 2 0 0 0
+c
+d 829 4 1 0 0
+c
+d 26 1 0 0 0
+c
+d 38 1 0 0 0
+c
+d 39 1 0 0 0
+c
+d 120 1 1 0 0
+c
+d 121 1 0 0 0
+c
+d 534 3 0 2 0
+c
+d 565 1 0 0 0
+c
+d 567 1 0 0 0
+c
+d 55 3 1 0 0
+c
+d 927 1 0 0 0
+c
+d 929 1 0 0 0
+c
+d 592 1 0 0 0
+c
+d 594 1 0 0 0
+c
+d 592 2 0 1 0
+c
+d 101 2 0 0 0
+c
+d 108 1 0 0 0
+c
+d 1027 1 0 0 0
+c
+d 1028 1 0 0 0
+c
+d 1259 4 1 0 0
+c
+d 286 3 0 2 0
+c
+d 738 4 1 0 0
+c
+d 114 3 1 0 0
+c
+d 755 1 0 0 0
+c
+d 756 1 0 0 0
+c
+d 88 3 1 0 0
+c
+d 75 4 1 0 0
+c
+d 1266 4 0 1 0
+c
+d 453 1 0 1 0
+c
+d 454 3 0 1 0
+c
+d 550 1 0 0 0
+c
+d 554 2 0 0 0
+c
+d 437 3 0 2 0
+c
+d 207 1 0 0 0
+c
+d 209 2 0 0 0
+c
+d 19 1 0 0 0
+c
+d 21 1 0 0 0
+c
+d 188 1 0 1 0
+c
+d 212 1 0 1 0
+c
+d 224 3 1 0 0
+c
+d 570 2 0 1 0
+c
+d 572 1 0 1 0
+c
+d 119 3 1 0 0
+c
+d 68 1 0 0 0
+c
+d 69 2 1 0 0
+c
+d 369 3 1 0 0
+c
+d 591 4 0 0 0
+c
+d 734 2 0 0 0
+c
+d 564 1 0 0 0
+c
+d 565 1 0 0 0
+c
+d 120 2 1 0 0
+c
+d 125 1 0 0 0
+c
+d 46 1 0 1 0
+c
+d 88 2 0 1 0
+c
+d 87 2 0 0 0
+c
+d 280 3 1 0 0
+c
+d 592 3 1 0 0
+c
+d 111 4 1 0 0
+c
+d 49 2 0 1 0
+c
+d 734 1 0 1 0
+c
+d 98 1 0 0 0
+c
+d 99 2 0 0 0
+c
+d 48 3 0 1 0
+c
+d 568 4 0 0 0
+c
+d 163 1 0 0 0
+c
+d 173 1 0 1 0
+c
+d 1249 1 0 0 0
+c
+d 89 3 0 1 0
+c
+d 525 1 1 0 0
+c
+d 534 2 0 0 0
+c
+d 343 3 1 0 0
+c
+d 534 1 0 0 0
+c
+d 547 2 1 0 0
+c
+d 592 2 0 2 0
+c
+d 286 2 0 0 0
+c
+d 60 3 0 2 0
+c
+d 565 1 1 0 0
+c
+d 568 2 0 0 0
+c
+d 301 2 0 0 0
+c
+d 551 2 0 2 0
+c
+d 507 1 0 0 0
+c
+d 1070 1 0 0 0
+c
+d 787 2 0 0 0
+c
+d 344 2 0 0 0
+c
+d 811 3 1 0 0
+c
+d 101 2 0 1 0
+c
+d 111 1 0 0 0
+c
+d 75 3 1 0 0
+c
+d 734 3 1 0 0
+c
+d 87 4 1 0 0
+c
+d 437 2 1 0 0
+c
+d 211 2 0 0 0
+c
+d 12 1 0 0 0
+c
+d 1269 1 0 1 0
+c
+d 1271 1 0 0 0
+c
+d 85 1 0 1 0
+c
+d 1278 1 0 1 0
+c
+d 66 3 0 2 0
+c
+d 286 3 1 0 0
+c
+d 73 4 0 0 0
+c
+d 565 3 1 0 0
+c
+d 167 1 0 0 0
+c
+d 395 1 0 0 0
+c
+d 1103 1 1 0 0
+c
+d 554 1 0 1 0
+c
+d 564 1 0 1 0
+c
+d 356 2 0 0 0
+c
+d 46 3 0 2 0
+c
+d 59 1 0 0 0
+c
+d 60 2 1 0 0
+c
+d 551 2 0 0 0
+c
+d 554 1 0 0 0
+c
+d 355 2 0 0 0
+c
+d 52 3 1 0 0
+c
+d 89 1 0 1 0
+c
+d 550 2 0 0 0
+c
+d 996 2 0 0 0
+c
+d 77 1 0 0 0
+c
+d 81 1 1 0 0
+c
+d 83 1 0 0 0
+c
+d 278 2 0 0 0
+c
+d 1168 1 0 0 0
+c
+d 51 2 0 0 0
+c
+d 419 4 1 0 0
+c
+d 16 1 0 1 0
+c
+d 90 2 0 1 0
+c
+d 185 2 0 0 0
+c
+d 756 1 0 1 0
+c
+d 757 1 0 1 0
+c
+d 46 1 0 0 0
+c
+d 75 2 0 0 0
+c
+d 62 1 1 0 0
+c
+d 64 1 0 0 0
+c
+d 65 1 0 0 0
+c
+d 217 1 1 0 0
+c
+d 218 1 0 0 0
+c
+d 221 1 0 0 0
+c
+d 301 2 0 0 0
+c
+d 311 1 1 0 0
+c
+d 51 2 0 0 0
+c
+d 152 3 0 0 0
+c
+d 185 3 1 0 0
+c
+d 621 3 0 2 0
+c
+d 791 2 0 0 0
+c
+d 792 1 0 0 0
+c
+d 1303 1 0 0 0
+c
+d 1305 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 550 2 0 0 0
+c
+d 550 2 0 1 0
+c
+d 551 1 0 1 0
+c
+d 44 4 1 0 0
+c
+d 355 4 1 0 0
+c
+d 191 2 0 2 0
+c
+d 114 1 0 0 0
+c
+d 127 1 0 0 0
+c
+d 775 1 0 1 0
+c
+d 786 1 0 1 0
+c
+d 299 2 0 0 0
+c
+d 795 2 0 0 0
+c
+d 52 2 1 0 0
+c
+d 53 1 0 0 0
+c
+d 795 2 0 0 0
+c
+d 989 3 0 1 0
+c
+d 60 3 1 0 0
+c
+d 1235 2 0 0 0
+c
+d 66 3 0 0 0
+c
+d 529 3 0 2 0
+c
+d 965 3 0 1 0
+c
+d 548 1 0 1 0
+c
+d 1231 3 0 0 0
+c
+d 30 4 1 0 0
+c
+d 44 3 0 2 0
+c
+d 487 3 0 0 0
+c
+d 287 1 0 0 0
+c
+d 288 1 0 0 0
+c
+d 534 3 1 0 0
+c
+d 534 3 0 2 0
+c
+d 125 1 0 1 0
+c
+d 127 1 0 0 0
+c
+d 533 1 0 1 0
+c
+d 151 3 0 1 0
+c
+d 6 1 0 1 0
+c
+d 10 1 0 1 0
+c
+d 142 1 0 0 0
+c
+d 143 1 0 0 0
+c
+d 842 3 1 0 0
+c
+d 478 4 0 2 0
+c
+d 753 2 0 0 0
+c
+d 146 2 0 0 0
+c
+d 532 1 0 1 0
+c
+d 548 1 0 0 0
+c
+d 549 1 0 1 0
+c
+d 87 1 0 1 0
+c
+d 89 2 0 1 0
+c
+d 304 2 0 0 0
+c
+d 307 1 0 0 0
+c
+d 602 1 0 0 0
+c
+d 682 2 1 0 0
+c
+d 60 4 1 0 0
+c
+d 734 2 0 2 0
+c
+d 551 2 0 0 0
+c
+d 278 3 1 0 0
+c
+d 86 2 0 1 0
+c
+d 87 1 0 0 0
+c
+d 1056 3 0 0 0
+c
+d 355 2 0 1 0
+c
+d 46 1 0 0 0
+c
+d 75 1 0 1 0
+c
+d 51 3 1 0 0
+c
+d 551 4 1 0 0
+c
+d 884 3 0 0 0
+c
+d 591 1 0 0 0
+c
+d 686 2 0 2 0
+c
+d 554 2 0 0 0
+c
+d 217 1 1 0 0
+c
+d 1241 2 0 0 0
+c
+d 992 2 0 0 0
+c
+d 993 1 0 0 0
+c
+d 533 2 0 2 0
+c
+d 645 3 0 0 0
+c
+d 1013 1 1 0 0
+c
+d 1014 1 0 0 0
+c
+d 791 3 1 0 0
+c
+d 532 4 0 0 0
+c
+d 145 2 0 0 0
+c
+d 159 3 1 0 0
+c
+d 93 1 0 0 0
+c
+d 130 1 0 0 0
+c
+d 592 2 0 0 0
+c
+d 1303 1 0 1 0
+c
+d 1305 1 0 0 0
+c
+d 715 2 0 0 0
+c
+d 87 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 775 1 0 0 0
+c
+d 786 1 0 0 0
+c
+d 883 1 1 0 0
+c
+d 887 3 0 1 0
+c
+d 87 2 0 0 0
+c
+d 565 1 0 0 0
+c
+d 568 1 0 0 0
+c
+d 791 3 0 0 0
+c
+d 965 1 0 1 0
+c
+d 971 1 0 1 0
+c
+d 753 1 0 0 0
+c
+d 755 2 1 0 0
+c
+d 551 2 0 2 0
+c
+d 534 2 0 1 0
+c
+d 878 2 0 0 0
+c
+d 879 1 0 1 0
+c
+d 52 1 0 0 0
+c
+d 1303 2 0 2 0
+c
+d 878 1 0 0 0
+c
+d 882 1 0 0 0
+c
+d 907 1 0 0 0
+c
+d 908 1 0 0 0
+c
+d 373 1 0 0 0
+c
+d 382 1 0 0 0
+c
+d 754 1 0 0 0
+c
+d 755 1 1 0 0
+c
+d 756 1 0 0 0
+c
+d 273 4 0 0 0
+c
+d 61 1 0 0 0
+c
+d 64 3 0 0 0
+c
+d 162 2 0 0 0
+c
+d 327 4 1 0 0
+c
+d 592 3 0 2 0
+c
+d 60 3 0 0 0
+c
+d 120 1 0 1 0
+c
+d 121 2 0 1 0
+c
+d 355 2 0 2 0
+c
+d 88 3 0 0 0
+c
+d 50 2 0 0 0
+c
+d 734 1 1 0 0
+c
+d 570 1 0 0 0
+c
+d 572 2 1 0 0
+c
+d 616 2 0 0 0
+c
+d 989 1 0 0 0
+c
+d 787 1 0 1 0
+c
+d 883 1 0 0 0
+c
+d 882 3 1 0 0
+c
+d 842 3 1 0 0
+c
+d 618 2 0 1 0
+c
+d 159 4 1 0 0
+c
+d 157 3 1 0 0
+c
+d 89 1 0 1 0
+c
+d 550 1 0 1 0
+c
+d 392 2 0 0 0
+c
+d 1127 1 0 0 0
+c
+d 787 3 0 2 0
+c
+d 155 1 0 0 0
+c
+d 176 1 0 0 0
+c
+d 570 3 1 0 0
+c
+d 84 2 0 0 0
+c
+d 753 3 0 0 0
+c
+d 1157 3 1 0 0
+c
+d 119 2 0 1 0
+c
+d 60 2 0 0 0
+c
+d 1303 1 0 0 0
+c
+d 568 2 0 0 0
+c
+d 1057 1 1 0 0
+c
+d 551 1 0 1 0
+c
+d 554 1 0 1 0
+c
+d 570 2 0 2 0
+c
+d 791 1 0 0 0
+c
+d 285 2 0 0 0
+c
+d 286 1 0 1 0
+c
+d 120 1 0 0 0
+c
+d 121 1 0 0 0
+c
+d 592 4 0 0 0
+c
+d 622 2 0 0 0
+c
+d 925 2 0 0 0
+c
+d 926 1 1 0 0
+c
+d 787 1 0 0 0
+c
+d 788 2 0 0 0
+c
+d 46 1 0 0 0
+c
+d 75 1 0 1 0
+c
+d 602 1 1 0 0
+c
+d 644 1 0 0 0
+c
+d 60 1 0 0 0
+c
+d 1303 1 0 0 0
+c
+d 46 1 0 1 0
+c
+d 75 1 0 0 0
+c
+d 285 4 0 0 0
+c
+d 86 1 0 1 0
+c
+d 87 1 0 1 0
+c
+d 120 1 0 0 0
+c
+d 122 1 0 0 0
+c
+d 977 1 0 0 0
+c
+d 980 1 0 0 0
+c
+d 341 3 0 0 0
+c
+d 564 1 0 0 0
+c
+d 565 2 0 0 0
+c
+d 55 1 0 0 0
+c
+d 66 1 0 0 0
+c
+d 1070 1 0 0 0
+c
+d 1074 1 0 0 0
+c
+d 1075 1 0 0 0
+c
+d 606 1 0 0 0
+c
+d 607 3 0 0 0
+c
+d 554 4 1 0 0
+c
+d 133 1 0 0 0
+c
+d 137 1 0 0 0
+c
+d 681 3 0 0 0
+c
+d 60 3 0 0 0
+c
+d 1071 2 0 1 0
+c
+d 1073 1 0 1 0
+c
+d 167 2 0 0 0
+c
+d 395 1 0 0 0
+c
+d 621 2 0 0 0
+c
+d 568 1 0 0 0
+c
+d 572 1 0 0 0
+c
+d 621 3 1 0 0
+c
+d 120 3 0 0 0
+c
+d 176 1 0 0 0
+c
+d 177 1 0 0 0
+c
+d 602 3 0 0 0
+c
+d 842 2 0 0 0
+c
+d 850 1 0 0 0
+c
+d 570 3 0 0 0
+c
+d 532 2 0 0 0
+c
+d 437 2 1 0 0
+c
+d 294 2 0 1 0
+c
+d 602 3 0 0 0
+c
+d 217 3 0 0 0
+c
+d 211 2 1 0 0
+c
+d 242 1 0 0 0
+c
+d 75 2 0 0 0
+c
+d 168 2 0 2 0
+c
+d 753 3 1 0 0
+c
+d 157 2 0 0 0
+c
+d 555 2 0 1 0
+c
+d 157 2 0 0 0
+c
+d 146 2 0 0 0
+c
+d 84 1 0 1 0
+c
+d 85 1 0 0 0
+c
+d 46 1 0 1 0
+c
+d 989 4 1 0 0
+c
+d 46 4 0 0 0
+c
+d 743 2 1 0 0
+c
+d 753 1 0 0 0
+c
+d 218 1 0 0 0
+c
+d 1235 1 0 0 0
+c
+d 1236 1 0 0 0
+c
+d 564 1 1 0 0
+c
+d 565 2 0 0 0
+c
+d 19 1 0 1 0
+c
+d 21 1 0 1 0
+c
+d 694 3 1 0 0
+c
+d 88 2 0 0 0
+c
+d 46 1 0 0 0
+c
+d 73 1 0 0 0
+c
+d 428 4 1 0 0
+c
+d 60 1 0 0 0
+c
+d 61 1 0 0 0
+c
+d 791 2 0 1 0
+c
+d 550 1 1 0 0
+c
+d 551 2 0 0 0
+c
+d 282 1 0 0 0
+c
+d 287 2 0 0 0
+c
+d 539 4 1 0 0
+c
+d 478 2 0 2 0
+c
+d 482 1 0 0 0
+c
+d 570 2 0 1 0
+c
+d 146 1 1 0 0
+c
+d 294 2 0 0 0
+c
+d 35 1 0 0 0
+c
+d 36 1 0 0 0
+c
+d 37 1 1 0 0
+c
+d 395 2 0 1 0
+c
+d 1103 1 0 0 0
+c
+d 673 2 0 0 0
+c
+d 476 1 0 0 0
+c
+d 478 1 0 0 0
+c
+d 51 2 0 0 0
+c
+d 529 3 1 0 0
+c
+d 534 3 0 0 0
+c
+d 610 1 0 0 0
+c
+d 611 1 0 0 0
+c
+d 612 1 0 0 0
+c
+d 565 1 0 0 0
+c
+d 791 1 0 1 0
+c
+d 51 2 1 0 0
+c
+d 52 1 0 0 0
+c
+d 87 1 0 1 0
+c
+d 89 1 0 1 0
+c
+d 46 1 0 1 0
+c
+d 1314 1 0 1 0
+c
+d 753 4 0 0 0
+c
+d 67 1 0 0 0
+c
+d 68 1 0 0 0
+c
+d 50 1 0 0 0
+c
+d 51 1 0 0 0
+c
+d 1274 4 0 0 0
+c
+d 691 2 0 1 0
+c
+d 75 2 1 0 0
+c
+d 76 2 0 0 0
+c
+d 534 2 0 2 0
+c
+d 281 1 1 0 0
+c
+d 1156 2 0 0 0
+c
+d 75 2 1 0 0
+c
+d 79 1 0 0 0
+c
+d 242 2 0 0 0
+c
+d 755 3 0 0 0
+c
+d 50 2 1 0 0
+c
+d 51 1 0 0 0
+c
+d 157 4 0 0 0
+c
+d 738 2 0 0 0
+c
+d 437 2 0 1 0
+c
+d 568 1 0 1 0
+c
+d 211 3 1 0 0
+c
+d 299 3 1 0 0
+c
+d 527 2 0 0 0
+c
+d 551 2 0 2 0
+c
+d 556 1 0 0 0
+c
+d 557 1 0 0 0
+c
+d 875 3 1 0 0
+c
+d 650 3 1 0 0
+c
+d 653 1 0 0 0
+c
+d 162 2 0 0 0
+c
+d 171 1 0 0 0
+c
+d 1074 1 0 0 0
+c
+d 1075 1 0 0 0
+c
+d 799 1 0 0 0
+c
+d 843 1 0 0 0
+c
+d 276 3 0 0 0
+c
+d 793 1 0 0 0
+c
+d 795 1 0 0 0
+c
+d 21 1 0 0 0
+c
+d 1024 1 0 0 0
+c
+d 1025 1 0 0 0
+c
+d 395 3 0 0 0
+c
+d 89 2 1 0 0
+c
+d 1285 1 0 0 0
+c
+d 428 4 0 0 0
+c
+d 557 1 0 0 0
+c
+d 565 1 0 0 0
+c
+d 98 2 1 0 0
+c
+d 99 1 0 0 0
+c
+d 86 4 1 0 0
+c
+d 125 2 0 1 0
+c
+d 1237 1 0 1 0
+c
+d 1240 2 0 1 0
+c
+d 791 1 0 1 0
+c
+d 793 2 0 1 0
+c
+d 550 1 0 0 0
+c
+d 553 2 0 0 0
+c
+d 556 2 0 2 0
+c
+d 301 1 0 1 0
+c
+d 1156 2 0 1 0
+c
+d 1 1 0 0 0
+c
+d 4 1 0 0 0
+c
+d 592 3 1 0 0
+c
+d 856 3 1 0 0
+c
+d 84 1 0 1 0
+c
+d 1289 1 0 0 0
+c
+d 26 1 0 0 0
+c
+d 28 2 0 0 0
+c
+d 564 2 0 0 0
+c
+d 7 2 1 0 0
+c
+d 1266 1 0 0 0
+c
+d 570 2 0 0 0
+c
+d 1070 2 0 0 0
+c
+d 1074 1 0 0 0
+c
+d 734 2 0 0 0
+c
+d 737 1 1 0 0
+c
+d 301 1 0 0 0
+c
+d 1156 3 1 0 0
+c
+d 753 1 0 1 0
+c
+d 754 1 0 1 0
+c
+d 755 1 0 0 0
+c
+d 355 1 0 1 0
+c
+d 358 2 0 1 0
+c
+d 46 1 0 1 0
+c
+d 551 3 1 0 0
+c
+d 157 3 1 0 0
+c
+d 534 3 0 0 0
+c
+d 621 1 0 0 0
+c
+d 623 1 0 0 0
+c
+d 626 1 1 0 0
+c
+d 46 1 0 1 0
+c
+d 75 1 0 1 0
+c
+d 861 2 1 0 0
+c
+d 870 1 0 0 0
+c
+d 196 2 0 2 0
+c
+d 437 4 1 0 0
+c
+d 89 2 0 0 0
+c
+d 119 1 0 0 0
+c
+d 341 2 0 1 0
+c
+d 282 3 0 1 0
+c
+d 195 1 0 0 0
+c
+d 205 1 0 0 0
+c
+d 46 1 0 1 0
+c
+d 753 2 0 0 0
+c
+d 755 1 1 0 0
+c
+d 857 2 0 0 0
+c
+d 769 2 0 1 0
+c
+d 774 1 0 1 0
+c
+d 75 1 0 1 0
+c
+d 86 2 0 0 0
+c
+d 608 1 0 0 0
+c
+d 615 1 0 1 0
+c
+d 252 2 0 0 0
+c
+d 507 2 0 0 0
+c
+d 120 3 1 0 0
+c
+d 153 2 0 0 0
+c
+d 246 1 0 0 0
+c
+d 248 1 0 1 0
+c
+d 575 1 0 1 0
+c
+d 578 2 0 1 0
+c
+d 1002 2 0 0 0
+c
+d 1003 1 0 0 0
+c
+d 75 2 0 2 0
+c
+d 551 3 0 2 0
+c
+d 282 4 1 0 0
+c
+d 564 2 0 1 0
+c
+d 789 1 0 1 0
+c
+d 68 1 0 0 0
+c
+d 69 1 0 0 0
+c
+d 39 2 0 1 0
+c
+d 41 1 0 1 0
+c
+d 895 3 1 0 0
+c
+d 146 3 0 0 0
+c
+d 157 3 0 2 0
+c
+d 478 1 0 0 0
+c
+d 482 1 0 0 0
+c
+d 855 4 1 0 0
+c
+d 56 3 1 0 0
+c
+d 699 1 0 0 0
+c
+d 800 1 0 0 0
+c
+d 56 4 0 0 0
+c
+d 614 1 0 1 0
+c
+d 615 1 0 1 0
+c
+d 680 2 0 0 0
+c
+d 529 1 0 0 0
+c
+d 532 1 0 0 0
+c
+d 107 1 0 0 0
+c
+d 111 1 0 0 0
+c
+d 46 4 1 0 0
+c
+d 60 3 0 0 0
+c
+d 550 2 0 0 0
+c
+d 582 1 0 0 0
+c
+d 590 1 1 0 0
+c
+d 553 2 0 0 0
+c
+d 66 1 0 0 0
+c
+d 69 1 0 0 0
+c
+d 1185 1 0 0 0
+c
+d 1201 1 1 0 0
+c
+d 1202 1 0 0 0
+c
+d 565 1 0 0 0
+c
+d 791 1 0 0 0
+c
+d 430 1 0 1 0
+c
+d 470 1 0 1 0
+c
+d 368 2 0 0 0
+c
+d 418 1 0 1 0
+c
+d 419 2 0 1 0
+c
+d 1176 2 0 0 0
+c
+d 1179 1 1 0 0
+c
+d 775 4 0 2 0
+c
+d 395 1 0 0 0
+c
+d 1106 1 0 0 0
+c
+d 565 2 1 0 0
+c
+d 567 1 0 0 0
+c
+d 694 1 0 0 0
+c
+d 695 1 1 0 0
+c
+d 696 1 0 0 0
+c
+d 148 4 0 0 0
+c
+d 75 2 0 1 0
+c
+d 75 1 0 1 0
+c
+d 86 1 0 1 0
+c
+d 550 2 0 0 0
+c
+d 554 1 1 0 0
+c
+d 311 1 1 0 0
+c
+d 327 2 0 0 0
+c
+d 591 1 1 0 0
+c
+d 592 2 0 0 0
+c
+d 164 3 0 0 0
+c
+d 554 3 0 2 0
+c
+d 246 2 0 0 0
+c
+d 550 2 0 0 0
+c
+d 348 3 1 0 0
+c
+d 84 1 0 0 0
+c
+d 1279 1 0 0 0
+c
+d 146 3 0 1 0
+c
+d 829 1 0 0 0
+c
+d 833 1 0 0 0
+c
+d 457 3 0 0 0
+c
+d 392 1 0 0 0
+c
+d 1127 1 0 0 0
+c
+d 1156 3 0 0 0
+c
+d 286 1 0 0 0
+c
+d 294 1 0 0 0
+c
+d 242 2 0 0 0
+c
+d 46 1 0 0 0
+c
+d 47 2 0 0 0
+c
+d 46 1 0 1 0
+c
+d 87 1 0 1 0
+c
+d 89 1 0 1 0
+c
+d 635 1 0 0 0
+c
+d 636 2 0 0 0
+c
+d 575 1 0 0 0
+c
+d 576 1 0 0 0
+c
+d 533 1 0 1 0
+c
+d 534 1 0 1 0
+c
+d 286 3 0 0 0
+c
+d 286 1 0 0 0
+c
+d 292 1 0 0 0
+c
+d 294 1 0 0 0
+c
+d 793 1 0 1 0
+c
+d 795 1 0 1 0
+c
+d 482 2 0 0 0
+c
+d 886 3 1 0 0
+c
+d 534 3 0 0 0
+c
+d 699 3 1 0 0
+c
+d 142 1 0 0 0
+c
+d 143 1 0 0 0
+c
+d 965 2 0 0 0
+c
+d 982 1 0 1 0
+c
+d 43 2 0 0 0
+c
+d 44 1 0 1 0
+c
+d 89 1 0 1 0
+c
+d 120 3 0 1 0
+c
+d 299 4 0 1 0
+c
+d 602 2 0 0 0
+c
+d 111 1 0 0 0
+c
+d 146 1 0 0 0
+c
+d 1009 1 0 1 0
+c
+d 1011 1 0 0 0
+c
+d 1012 2 0 0 0
+c
+d 734 3 0 0 0
+c
+d 301 2 0 0 0
+c
+d 87 2 0 0 0
+c
+d 301 4 1 0 0
+c
+d 584 1 0 0 0
+c
+d 585 1 0 1 0
+c
+d 586 1 0 0 0
+c
+d 586 3 0 0 0
+c
+d 10 1 0 1 0
+c
+d 1269 1 0 1 0
+c
+d 803 4 0 0 0
+c
+d 956 4 1 0 0
+c
+d 66 1 0 0 0
+c
+d 68 1 0 0 0
+c
+d 69 1 1 0 0
+c
+d 437 2 0 0 0
+c
+d 426 1 0 0 0
+c
+d 591 2 0 0 0
+c
+d 476 4 0 0 0
+c
+d 47 3 0 0 0
+c
+d 1185 3 1 0 0
+c
+d 278 1 0 0 0
+c
+d 279 2 0 0 0
+c
+d 243 1 0 0 0
+c
+d 246 1 0 0 0
+c
+d 733 1 0 1 0
+c
+d 735 1 0 0 0
+c
+d 534 2 0 0 0
+c
+d 521 2 0 0 0
+c
+d 67 1 0 0 0
+c
+d 68 1 0 0 0
+c
+d 274 2 1 0 0
+c
+d 277 1 0 0 0
+c
+d 842 3 0 0 0
+c
+d 287 2 0 2 0
+c
+d 472 1 0 0 0
+c
+d 473 1 0 0 0
+c
+d 990 1 1 0 0
+c
+d 991 2 0 0 0
+c
+d 18 3 1 0 0
+c
+d 55 1 0 0 0
+c
+d 694 2 1 0 0
+c
+d 592 1 0 0 0
+c
+d 594 1 0 0 0
+c
+d 982 1 0 0 0
+c
+d 983 1 0 0 0
+c
+d 1009 1 0 0 0
+c
+d 1012 1 0 0 0
+c
+d 787 1 1 0 0
+c
+d 882 1 0 0 0
+c
+d 355 1 0 0 0
+c
+d 358 1 0 0 0
+c
+d 1185 1 0 1 0
+c
+d 1202 1 0 0 0
+c
+d 467 3 0 0 0
+c
+d 686 2 0 0 0
+c
+d 602 1 0 0 0
+c
+d 642 1 0 0 0
+c
+d 557 1 0 1 0
+c
+d 565 2 0 1 0
+c
+d 775 3 0 0 0
+c
+d 777 1 0 1 0
+c
+d 472 2 1 0 0
+c
+d 473 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 457 2 0 1 0
+c
+d 465 1 0 0 0
+c
+d 769 2 0 2 0
+c
+d 770 1 0 0 0
+c
+d 21 1 0 0 0
+c
+d 23 1 0 0 0
+c
+d 157 4 1 0 0
+c
+d 324 3 0 1 0
+c
+d 54 1 0 1 0
+c
+d 1303 2 0 1 0
+c
+d 470 1 0 1 0
+c
+d 477 2 0 1 0
+c
+d 559 1 0 0 0
+c
+d 568 1 0 0 0
+c
+d 196 2 0 0 0
+c
+d 204 3 0 0 0
+c
+d 428 2 1 0 0
+c
+d 588 1 0 0 0
+c
+d 19 2 0 1 0
+c
+d 983 2 1 0 0
+c
+d 341 4 0 1 0
+c
+d 506 4 1 0 0
+c
+d 951 4 1 0 0
+c
+d 749 3 0 1 0
+c
+d 791 3 0 0 0
+c
+d 965 1 0 0 0
+c
+d 966 1 0 1 0
+c
+d 967 1 0 1 0
+c
+d 16 5 0 0 0
+c
+d 584 3 0 1 0
+c
+d 75 3 0 0 0
+c
+d 55 1 0 1 0
+c
+d 691 1 0 1 0
+c
+d 970 4 0 0 0
+c
+d 965 2 1 0 0
+c
+d 970 2 0 0 0
+c
+d 86 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 548 4 1 0 0
+c
+d 1173 2 1 0 0
+c
+d 1174 1 0 0 0
+c
+d 618 3 1 0 0
+c
+d 199 3 1 0 0
+c
+d 301 3 0 2 0
+c
+d 157 1 0 1 0
+c
+d 159 1 0 1 0
+c
+d 413 1 0 1 0
+c
+d 419 2 0 1 0
+c
+d 168 1 0 0 0
+c
+d 373 1 0 1 0
+c
+d 1170 1 0 0 0
+c
+d 1173 1 0 0 0
+c
+d 145 2 0 0 0
+c
+d 232 2 0 2 0
+c
+d 478 1 0 0 0
+c
+d 481 1 0 0 0
+c
+d 823 3 0 1 0
+c
+d 787 1 0 1 0
+c
+d 882 1 0 1 0
+c
+d 157 2 1 0 0
+c
+d 1143 1 0 0 0
+c
+d 436 3 0 2 0
+c
+d 743 1 0 0 0
+c
+d 753 2 0 0 0
+c
+d 437 2 0 0 0
+c
+d 155 2 0 1 0
+c
+d 156 1 0 1 0
+c
+d 146 3 0 2 0
+c
+d 427 1 0 0 0
+c
+d 428 2 0 2 0
+c
+d 965 2 1 0 0
+c
+d 982 1 0 0 0
+c
+d 1 3 0 1 0
+c
+d 769 2 0 0 0
+c
+d 1071 3 1 0 0
+c
+d 983 3 0 0 0
+c
+d 153 1 0 0 0
+c
+d 204 2 0 0 0
+c
+d 1281 3 0 0 0
+c
+d 982 3 1 0 0
+c
+d 21 3 1 0 0
+c
+d 738 2 0 2 0
+c
+d 793 3 1 0 0
+c
+d 75 2 0 2 0
+c
+d 1202 3 1 0 0
+c
+d 513 4 1 0 0
+c
+d 242 3 1 0 0
+c
+d 475 4 0 0 0
+c
+d 278 3 0 2 0
+c
+d 1070 1 0 0 0
+c
+d 1071 1 0 0 0
+c
+d 341 1 0 0 0
+c
+d 347 3 0 0 0
+c
+d 75 4 1 0 0
+c
+d 1170 1 0 1 0
+c
+d 1185 2 0 1 0
+c
+d 695 1 0 0 0
+c
+d 951 1 0 0 0
+c
+d 752 1 0 0 0
+c
+d 753 2 0 0 0
+c
+d 795 2 0 0 0
+c
+d 338 2 0 1 0
+c
+d 476 2 1 0 0
+c
+d 478 1 0 0 0
+c
+d 411 2 0 1 0
+c
+d 412 1 0 1 0
+c
+d 606 1 0 0 0
+c
+d 618 1 0 0 0
+c
+d 1303 2 0 1 0
+c
+d 159 1 0 1 0
+c
+d 185 2 0 1 0
+c
+d 343 2 0 0 0
+c
+d 1148 1 0 0 0
+c
+d 176 1 0 0 0
+c
+d 177 1 0 0 0
+c
+d 301 2 0 0 0
+c
+d 436 2 0 0 0
+c
+d 1043 1 0 0 0
+c
+d 457 1 0 1 0
+c
+d 466 1 0 1 0
+c
+d 437 1 0 1 0
+c
+d 470 2 0 0 0
+c
+d 1012 1 0 0 0
+c
+d 1016 1 1 0 0
+c
+d 1030 1 0 0 0
+c
+d 437 3 1 0 0
+c
+d 855 2 0 0 0
+c
+d 1274 3 0 0 0
+c
+d 844 2 0 0 0
+c
+d 851 1 0 1 0
+c
+d 691 2 0 1 0
+c
+d 699 1 0 1 0
+c
+d 428 3 1 0 0
+c
+d 353 4 0 0 0
+c
+d 882 1 0 0 0
+c
+d 884 1 0 1 0
+c
+d 885 1 0 0 0
+c
+d 1 4 1 0 0
+c
+d 807 1 1 0 0
+c
+d 823 2 0 0 0
+c
+d 285 2 0 2 0
+c
+d 965 2 1 0 0
+c
+d 976 1 0 0 0
+c
+d 791 2 1 0 0
+c
+d 936 1 0 0 0
+c
+d 602 2 0 0 0
+c
+d 384 2 0 2 0
+c
+d 385 1 0 0 0
+c
+d 811 3 1 0 0
+c
+d 146 2 0 0 0
+c
+d 836 3 1 0 0
+c
+d 686 3 1 0 0
+c
+d 428 2 0 1 0
+c
+d 436 1 0 0 0
+c
+d 437 2 1 0 0
+c
+d 428 1 0 1 0
+c
+d 588 1 0 1 0
+c
+d 242 1 0 1 0
+c
+d 243 2 0 1 0
+c
+d 281 2 1 0 0
+c
+d 1156 1 0 0 0
+c
+d 68 3 1 0 0
+c
+d 908 3 1 0 0
+c
+d 1142 4 1 0 0
+c
+d 1165 1 0 0 0
+c
+d 1168 1 0 0 0
+c
+d 55 4 0 0 0
+c
+d 199 4 0 0 0
+c
+d 734 2 0 2 0
+c
+d 737 1 0 0 0
+c
+d 46 1 0 1 0
+c
+d 529 1 0 1 0
+c
+d 608 1 0 0 0
+c
+d 615 1 0 0 0
+c
+d 529 2 0 1 0
+c
+d 67 2 0 0 0
+c
+d 69 2 0 0 0
+c
+d 157 2 0 1 0
+c
+d 1252 1 0 1 0
+c
+d 523 2 0 1 0
+c
+d 524 1 0 1 0
+c
+d 66 1 0 0 0
+c
+d 67 1 0 0 0
+c
+d 68 1 1 0 0
+c
+d 1202 4 0 0 0
+c
+d 21 2 0 0 0
+c
+d 803 3 1 0 0
+c
+d 965 1 0 1 0
+c
+d 983 1 0 0 0
+c
+d 984 2 0 0 0
+c
+d 976 4 0 0 0
+c
+d 550 1 1 0 0
+c
+d 556 2 0 0 0
+c
+d 803 2 0 0 0
+c
+d 1153 3 0 0 0
+c
+d 46 1 0 1 0
+c
+d 199 2 0 0 0
+c
+d 455 3 1 0 0
+c
+d 437 1 0 0 0
+c
+d 470 1 0 0 0
+c
+d 734 4 0 0 0
+c
+d 327 3 1 0 0
+c
+d 693 2 0 0 0
+c
+d 565 1 0 0 0
+c
+d 567 1 0 0 0
+c
+d 1012 2 1 0 0
+c
+d 1013 1 0 0 0
+c
+d 951 2 0 0 0
+c
+d 953 1 1 0 0
+c
+d 301 3 0 0 0
+c
+d 26 2 0 0 0
+c
+d 606 2 0 1 0
+c
+d 618 1 0 1 0
+c
+d 457 3 0 0 0
+c
+d 514 2 0 0 0
+c
+d 515 1 0 0 0
+c
+d 301 3 0 0 0
+c
+d 851 4 0 0 0
+c
+d 43 2 0 2 0
+c
+d 470 1 0 1 0
+c
+d 478 2 0 0 0
+c
+d 478 1 0 0 0
+c
+d 481 1 0 0 0
+c
+d 348 3 1 0 0
+c
+d 246 1 0 0 0
+c
+d 248 1 0 0 0
+c
+d 592 3 1 0 0
+c
+d 472 1 0 1 0
+c
+d 473 1 0 1 0
+c
+d 602 3 0 2 0
+c
+d 1020 2 0 2 0
+c
+d 66 3 0 0 0
+c
+d 268 4 0 2 0
+c
+d 286 2 1 0 0
+c
+d 1223 1 0 0 0
+c
+d 428 3 0 0 0
+c
+d 152 1 1 0 0
+c
+d 413 2 0 0 0
+c
+d 965 1 0 0 0
+c
+d 982 1 0 0 0
+c
+d 1185 2 0 0 0
+c
+d 32 2 0 0 0
+c
+d 694 1 0 0 0
+c
+d 696 1 0 0 0
+c
+d 218 2 0 0 0
+c
+d 982 1 1 0 0
+c
+d 983 2 0 0 0
+c
+d 578 2 0 2 0
+c
+d 550 1 0 0 0
+c
+d 552 1 0 0 0
+c
+d 553 1 0 1 0
+c
+d 46 2 0 2 0
+c
+d 1170 3 1 0 0
+c
+d 592 1 0 0 0
+c
+d 594 1 0 0 0
+c
+d 22 3 1 0 0
+c
+d 836 1 0 0 0
+c
+d 839 2 0 0 0
+c
+d 466 3 0 0 0
+c
+d 478 1 0 0 0
+c
+d 482 1 0 0 0
+c
+d 75 1 0 1 0
+c
+d 86 1 0 1 0
+c
+d 436 3 0 0 0
+c
+d 965 1 1 0 0
+c
+d 982 2 0 0 0
+c
+d 419 2 0 2 0
+c
+d 47 1 0 1 0
+c
+d 775 1 0 0 0
+c
+d 777 1 0 0 0
+c
+d 480 2 0 0 0
+c
+d 428 1 0 0 0
+c
+d 436 2 0 0 0
+c
+d 397 3 0 2 0
+c
+d 52 3 0 0 0
+c
+d 855 3 1 0 0
+c
+d 965 2 0 0 0
+c
+d 1168 1 0 1 0
+c
+d 1179 1 0 1 0
+c
+d 148 1 0 1 0
+c
+d 259 2 0 0 0
+c
+d 534 3 1 0 0
+c
+d 1185 1 0 1 0
+c
+d 1188 1 0 0 0
+c
+d 1204 1 0 1 0
+c
+d 32 3 0 0 0
+c
+d 604 1 0 0 0
+c
+d 635 1 0 0 0
+c
+d 392 2 0 0 0
+c
+d 248 3 0 1 0
+c
+d 1185 1 1 0 0
+c
+d 1202 1 0 0 0
+c
+d 1204 1 0 0 0
+c
+d 413 1 0 0 0
+c
+d 414 2 0 0 0
+c
+d 556 3 0 0 0
+c
+d 695 1 0 0 0
+c
+d 951 1 0 0 0
+c
+d 575 2 0 0 0
+c
+d 305 1 0 0 0
+c
+d 1150 1 0 0 0
+c
+d 926 1 0 0 0
+c
+d 927 2 1 0 0
+c
+d 327 3 1 0 0
+c
+d 480 4 0 0 0
+c
+d 1174 3 0 1 0
+c
+d 358 3 0 0 0
+c
+d 55 2 0 0 0
+c
+d 66 1 1 0 0
+c
+d 157 2 0 0 0
+c
+d 743 3 0 0 0
+c
+d 246 2 0 0 0
+c
+d 248 1 1 0 0
+c
+d 695 2 0 0 0
+c
+d 46 1 0 0 0
+c
+d 775 1 0 0 0
+c
+d 887 1 0 1 0
+c
+d 888 2 0 0 0
+c
+d 33 1 0 1 0
+c
+d 34 2 0 0 0
+c
+d 262 2 1 0 0
+c
+d 273 1 0 0 0
+c
+d 748 4 0 0 0
+c
+d 1126 2 0 0 0
+c
+d 565 2 0 0 0
+c
+d 475 1 1 0 0
+c
+d 476 2 0 0 0
+c
+d 1185 1 0 0 0
+c
+d 1202 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 270 1 0 0 0
+c
+d 803 3 1 0 0
+c
+d 353 2 0 0 0
+c
+d 1020 3 0 0 0
+c
+d 839 4 0 0 0
+c
+d 278 1 0 0 0
+c
+d 280 1 0 1 0
+c
+d 1156 1 0 1 0
+c
+d 153 1 0 0 0
+c
+d 154 2 0 0 0
+c
+d 88 2 0 0 0
+c
+d 294 1 0 1 0
+c
+d 298 2 0 0 0
+c
+d 618 1 0 1 0
+c
+d 965 1 0 1 0
+c
+d 67 4 1 0 0
+c
+d 951 1 0 0 0
+c
+d 953 1 0 0 0
+c
+d 842 4 1 0 0
+c
+d 195 2 1 0 0
+c
+d 205 1 0 0 0
+c
+d 584 3 0 1 0
+c
+d 582 2 0 2 0
+c
+d 583 1 0 0 0
+c
+d 606 2 0 0 0
+c
+d 608 1 0 0 0
+c
+d 294 2 0 0 0
+c
+d 608 2 0 1 0
+c
+d 614 1 0 1 0
+c
+d 340 3 0 2 0
+c
+d 608 2 0 1 0
+c
+d 611 2 1 0 0
+c
+d 1173 3 1 0 0
+c
+d 218 1 0 0 0
+c
+d 220 1 0 0 0
+c
+d 622 4 1 0 0
+c
+d 195 1 0 0 0
+c
+d 203 1 0 0 0
+c
+d 382 2 0 1 0
+c
+d 385 1 0 1 0
+c
+d 259 2 0 0 0
+c
+d 260 1 0 1 0
+c
+d 855 2 0 0 0
+c
+d 337 1 0 0 0
+c
+d 338 2 0 0 0
+c
+d 282 1 0 0 0
+c
+d 286 1 0 0 0
+c
+d 353 2 0 1 0
+c
+d 355 1 0 1 0
+c
+d 131 4 1 0 0
+c
+d 52 2 1 0 0
+c
+d 686 1 0 0 0
+c
+d 691 1 0 0 0
+c
+d 157 2 0 0 0
+c
+d 1153 3 0 0 0
+c
+d 334 2 0 0 0
+c
+d 335 1 0 0 0
+c
+d 419 2 0 0 0
+c
+d 298 1 0 0 0
+c
+d 318 1 1 0 0
+c
+d 319 1 0 0 0
+c
+d 477 1 0 0 0
+c
+d 478 1 0 0 0
+c
+d 281 4 0 0 0
+c
+d 1168 2 1 0 0
+c
+d 1176 1 0 0 0
+c
+d 592 4 0 2 0
+c
+d 348 3 1 0 0
+c
+d 306 4 0 0 0
+c
+d 437 1 0 1 0
+c
+d 507 2 0 0 0
+c
+d 801 1 0 0 0
+c
+d 802 1 0 0 0
+c
+d 18 1 0 0 0
+c
+d 93 1 0 1 0
+c
+d 40 4 0 0 0
+c
+d 133 1 0 0 0
+c
+d 294 1 0 0 0
+c
+d 281 1 0 1 0
+c
+d 1192 2 0 1 0
+c
+d 101 2 0 0 0
+c
+d 556 1 0 0 0
+c
+d 557 1 0 0 0
+c
+d 829 3 1 0 0
+c
+d 469 2 1 0 0
+c
+d 478 1 0 0 0
+c
+d 66 2 0 0 0
+c
+d 67 1 0 0 0
+c
+d 30 2 0 0 0
+c
+d 32 1 0 0 0
+c
+d 647 3 0 0 0
+c
+d 21 1 0 0 0
+c
+d 39 2 0 0 0
+c
+d 111 2 0 0 0
+c
+d 146 1 0 0 0
+c
+d 217 1 0 0 0
+c
+d 241 1 0 0 0
+c
+d 199 3 1 0 0
+c
+d 341 1 0 1 0
+c
+d 411 1 0 0 0
+c
+d 311 1 0 0 0
+c
+d 325 1 0 0 0
+c
+d 384 1 0 0 0
+c
+d 386 2 0 2 0
+c
+d 299 1 0 0 0
+c
+d 319 2 1 0 0
+c
+d 694 2 0 0 0
+c
+d 878 2 0 1 0
+c
+d 882 1 0 1 0
+c
+d 88 3 1 0 0
+c
+d 568 1 0 1 0
+c
+d 570 1 0 1 0
+c
+d 413 1 0 0 0
+c
+d 414 1 0 0 0
+c
+d 272 4 0 0 0
+c
+d 46 1 0 1 0
+c
+d 801 2 0 0 0
+c
+d 1012 1 0 0 0
+c
+d 1016 1 0 0 0
+c
+d 723 3 0 1 0
+c
+d 724 1 0 1 0
+c
+d 691 1 0 0 0
+c
+d 693 2 0 0 0
+c
+d 178 3 1 0 0
+c
+d 181 1 0 0 0
+c
+d 734 4 0 0 0
+c
+d 965 1 0 0 0
+c
+d 971 1 0 0 0
+c
+d 972 1 1 0 0
+c
+d 355 2 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 1177 1 0 0 0
+c
+d 800 3 1 0 0
+c
+d 26 2 0 0 0
+c
+d 695 1 1 0 0
+c
+d 951 2 0 0 0
+c
+d 1153 2 0 0 0
+c
+d 655 3 0 1 0
+c
+d 1221 3 1 0 0
+c
+d 311 1 0 1 0
+c
+d 327 2 0 0 0
+c
+d 691 1 1 0 0
+c
+d 697 1 0 0 0
+c
+d 951 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 552 1 0 0 0
+c
+d 301 3 1 0 0
+c
+d 411 3 1 0 0
+c
+d 48 1 0 0 0
+c
+d 49 2 0 0 0
+c
+d 602 2 0 1 0
+c
+d 21 1 0 0 0
+c
+d 24 1 0 0 0
+c
+d 951 4 0 1 0
+c
+d 195 3 1 0 0
+c
+d 762 1 0 1 0
+c
+d 764 2 0 1 0
+c
+d 472 1 0 0 0
+c
+d 473 1 0 0 0
+c
+d 157 2 1 0 0
+c
+d 355 1 0 0 0
+c
+d 146 1 0 0 0
+c
+d 148 1 0 0 0
+c
+d 694 1 0 0 0
+c
+d 695 1 1 0 0
+c
+d 696 1 0 0 0
+c
+d 157 4 0 0 0
+c
+d 693 1 0 1 0
+c
+d 694 3 0 1 0
+c
+d 159 2 0 0 0
+c
+d 183 1 1 0 0
+c
+d 584 2 0 1 0
+c
+d 748 1 0 0 0
+c
+d 749 1 1 0 0
+c
+d 894 1 0 0 0
+c
+d 801 1 1 0 0
+c
+d 802 2 0 0 0
+c
+d 689 2 0 0 0
+c
+d 702 1 0 0 0
+c
+d 294 2 1 0 0
+c
+d 298 1 0 0 0
+c
+d 437 2 0 2 0
+c
+d 467 1 0 0 0
+c
+d 623 4 1 0 0
+c
+d 213 1 0 0 0
+c
+d 242 1 0 0 0
+c
+d 695 2 0 2 0
+c
+d 951 1 0 0 0
+c
+d 565 2 0 0 0
+c
+d 437 2 0 1 0
+c
+d 467 1 0 1 0
+c
+d 437 1 0 0 0
+c
+d 888 3 0 0 0
+c
+d 437 1 0 0 0
+c
+d 457 1 0 0 0
+c
+d 87 2 0 2 0
+c
+d 437 1 0 1 0
+c
+d 444 2 0 1 0
+c
+d 505 3 0 1 0
+c
+d 187 2 0 0 0
+c
+d 883 2 0 0 0
+c
+d 272 3 1 0 0
+c
+d 915 2 0 0 0
+c
+d 918 1 0 0 0
+c
+d 93 2 1 0 0
+c
+d 799 3 1 0 0
+c
+d 299 1 0 0 0
+c
+d 319 2 1 0 0
+c
+d 419 1 0 0 0
+c
+d 422 1 0 0 0
+c
+d 46 2 0 1 0
+c
+d 73 1 0 0 0
+c
+d 359 2 0 0 0
+c
+d 734 3 0 0 0
+c
+d 127 1 0 0 0
+c
+d 130 2 0 0 0
+c
+d 757 3 0 2 0
+c
+d 166 3 0 2 0
+c
+d 509 4 1 0 0
+c
+d 478 2 0 1 0
+c
+d 272 2 0 1 0
+c
+d 275 2 1 0 0
+c
+d 436 1 0 1 0
+c
+d 437 1 0 1 0
+c
+d 93 3 0 1 0
+c
+d 769 3 1 0 0
+c
+d 319 4 0 1 0
+c
+d 635 1 0 0 0
+c
+d 637 1 0 0 0
+c
+d 858 1 0 0 0
+c
+d 859 2 1 0 0
+c
+d 476 1 0 1 0
+c
+d 478 1 0 1 0
+c
+d 1143 4 0 0 0
+c
+d 622 1 0 1 0
+c
+d 965 1 0 1 0
+c
+d 693 1 1 0 0
+c
+d 951 2 0 0 0
+c
+d 784 2 0 0 0
+c
+d 602 2 0 0 0
+c
+d 633 1 1 0 0
+c
+d 419 2 0 0 0
+c
+d 423 1 1 0 0
+c
+d 1001 4 1 0 0
+c
+d 578 2 0 1 0
+c
+d 801 1 0 0 0
+c
+d 802 1 0 0 0
+c
+d 1185 2 0 0 0
+c
+d 129 4 0 0 0
+c
+d 358 3 0 0 0
+c
+d 89 2 0 2 0
+c
+d 577 3 0 2 0
+c
+d 1185 2 1 0 0
+c
+d 1202 1 0 0 0
+c
+d 599 3 0 1 0
+c
+d 791 1 0 0 0
+c
+d 794 2 1 0 0
+c
+d 455 1 1 0 0
+c
+d 457 1 0 0 0
+c
+d 799 2 0 0 0
+c
+d 64 1 0 0 0
+c
+d 65 2 0 0 0
+c
+d 437 1 0 0 0
+c
+d 457 1 0 0 0
+c
+d 466 1 0 0 0
+c
+d 715 3 0 0 0
+c
+d 46 2 0 1 0
+c
+d 743 1 0 0 0
+c
+d 746 2 1 0 0
+c
+d 18 4 1 0 0
+c
+d 578 1 0 0 0
+c
+d 580 1 0 0 0
+c
+d 1172 4 0 0 0
+c
+d 1303 2 0 1 0
+c
+d 1090 2 0 0 0
+c
+d 723 1 0 0 0
+c
+d 724 1 1 0 0
+c
+d 716 4 1 0 0
+c
+d 719 2 0 2 0
+c
+d 949 1 0 0 0
+c
+d 894 3 0 0 0
+c
+d 789 1 0 1 0
+c
+d 833 1 0 1 0
+c
+d 46 1 0 0 0
+c
+d 74 2 1 0 0
+c
+d 25 2 0 0 0
+c
+d 26 1 0 0 0
+c
+d 532 1 0 0 0
+c
+d 537 1 0 0 0
+c
+d 622 3 0 1 0
+c
+d 1275 2 0 0 0
+c
+d 1276 1 0 0 0
+c
+d 509 4 0 0 0
+c
+d 748 1 0 1 0
+c
+d 749 1 0 0 0
+c
+d 211 2 1 0 0
+c
+d 242 1 0 0 0
+c
+d 294 3 1 0 0
+c
+d 788 3 0 0 0
+c
+d 1 2 0 0 0
+c
+d 212 2 0 0 0
+c
+d 213 1 0 0 0
+c
+d 294 3 1 0 0
+c
+d 46 2 0 1 0
+c
+d 270 2 0 0 0
+c
+d 272 1 0 0 0
+c
+d 529 4 1 0 0
+c
+d 301 2 0 0 0
+c
+d 437 3 1 0 0
+c
+d 470 1 0 1 0
+c
+d 478 1 0 1 0
+c
+d 829 1 0 0 0
+c
+d 830 1 0 0 0
+c
+d 836 3 0 2 0
+c
+d 341 1 0 1 0
+c
+d 423 1 0 0 0
+c
+d 429 1 0 0 0
+c
+d 430 2 0 0 0
+c
+d 28 4 0 0 0
+c
+d 608 3 1 0 0
+c
+d 686 2 0 0 0
+c
+d 243 2 0 0 0
+c
+d 1083 1 0 1 0
+c
+d 1086 2 0 0 0
+c
+d 21 2 0 0 0
+c
+d 478 2 0 0 0
+c
+d 482 1 0 0 0
+c
+d 801 2 0 0 0
+c
+d 799 2 0 0 0
+c
+d 801 2 0 0 0
+c
+d 164 2 1 0 0
+c
+d 1237 1 0 0 0
+c
+d 1239 2 0 2 0
+c
+d 341 3 1 0 0
+c
+d 1163 1 0 0 0
+c
+d 1165 1 0 0 0
+c
+d 925 3 1 0 0
+c
+d 157 2 0 0 0
+c
+d 695 2 1 0 0
+c
+d 954 1 0 0 0
+c
+d 294 2 0 2 0
+c
+d 894 4 1 0 0
+c
+d 157 3 1 0 0
+c
+d 1304 3 0 0 0
+c
+d 478 3 0 0 0
+c
+d 437 4 0 0 0
+c
+d 18 1 0 0 0
+c
+d 989 2 1 0 0
+c
+d 551 1 0 1 0
+c
+d 775 2 0 0 0
+c
+d 803 2 0 1 0
+c
+d 804 1 0 1 0
+c
+d 592 2 0 2 0
+c
+d 157 2 0 0 0
+c
+d 211 4 0 0 0
+c
+d 799 1 0 0 0
+c
+d 919 2 0 0 0
+c
+d 803 1 0 0 0
+c
+d 804 1 0 0 0
+c
+d 906 1 0 0 0
+c
+d 908 1 0 0 0
+c
+d 642 3 0 0 0
+c
+d 276 1 0 0 0
+c
+d 301 1 0 0 0
+c
+d 478 2 1 0 0
+c
+d 480 1 0 0 0
+c
+d 965 3 1 0 0
+c
+d 951 2 1 0 0
+c
+d 952 1 0 0 0
+c
+d 802 1 1 0 0
+c
+d 803 2 0 0 0
+c
+d 413 2 0 0 0
+c
+d 419 1 0 0 0
+c
+d 755 2 0 0 0
+c
+d 765 1 0 0 0
+c
+d 294 1 0 0 0
+c
+d 298 2 1 0 0
+c
+d 697 3 0 2 0
+c
+d 1153 3 0 1 0
+c
+d 75 1 0 0 0
+c
+d 84 1 0 0 0
+c
+d 93 2 0 0 0
+c
+d 1184 1 0 1 0
+c
+d 1199 1 0 0 0
+c
+d 1200 1 0 0 0
+c
+d 1008 2 0 1 0
+c
+d 1009 1 0 1 0
+c
+d 60 2 0 0 0
+c
+d 61 1 0 0 0
+c
+d 62 1 0 0 0
+c
+d 127 1 0 0 0
+c
+d 130 1 0 0 0
+c
+d 521 1 0 0 0
+c
+d 522 2 0 0 0
+c
+d 1158 2 1 0 0
+c
+d 1163 1 0 0 0
+c
+d 1204 3 1 0 0
+c
+d 861 1 1 0 0
+c
+d 867 1 0 0 0
+c
+d 868 2 0 0 0
+c
+d 803 2 0 0 0
+c
+d 437 1 0 0 0
+c
+d 457 1 0 0 0
+c
+d 167 1 0 0 0
+c
+d 168 1 0 0 0
+c
+d 356 1 0 0 0
+c
+d 358 1 0 0 0
+c
+d 341 1 0 1 0
+c
+d 470 2 0 1 0
+c
+d 166 1 0 1 0
+c
+d 395 1 0 0 0
+c
+d 400 1 0 0 0
+c
+d 752 2 0 1 0
+c
+d 217 1 0 1 0
+c
+d 1240 1 0 1 0
+c
+d 1241 1 0 0 0
+c
+d 844 4 0 0 0
+c
+d 413 3 0 0 0
+c
+d 414 1 0 0 0
+c
+d 133 1 1 0 0
+c
+d 294 1 0 0 0
+c
+d 142 1 0 0 0
+c
+d 143 2 0 0 0
+c
+d 145 1 0 0 0
+c
+d 2 3 0 0 0
+c
+d 16 1 0 0 0
+c
+d 734 1 0 1 0
+c
+d 769 1 0 1 0
+c
+d 807 3 0 0 0
+c
+d 374 3 0 2 0
+c
+d 98 4 0 1 0
+c
+d 699 3 0 0 0
+c
+d 806 2 0 0 0
+c
+d 437 1 0 0 0
+c
+d 1045 1 0 0 0
+c
+d 534 3 1 0 0
+c
+d 534 4 0 1 0
+c
+d 1156 3 0 0 0
+c
+d 1071 2 0 0 0
+c
+d 32 1 0 0 0
+c
+d 77 1 0 0 0
+c
+d 1297 1 0 0 0
+c
+d 528 1 0 1 0
+c
+d 146 3 0 0 0
+c
+d 65 1 0 0 0
+c
+d 1303 2 1 0 0
+c
+d 294 2 0 0 0
+c
+d 298 1 1 0 0
+c
+d 927 2 0 0 0
+c
+d 529 2 0 0 0
+c
+d 64 4 1 0 0
+c
+d 298 1 1 0 0
+c
+d 319 2 0 0 0
+c
+d 581 1 0 1 0
+c
+d 582 2 0 1 0
+c
+d 580 2 1 0 0
+c
+d 582 1 0 0 0
+c
+d 927 2 0 1 0
+c
+d 527 2 0 0 0
+c
+d 1 2 1 0 0
+c
+d 4 1 0 0 0
+c
+d 1304 3 1 0 0
+c
+d 437 1 0 1 0
+c
+d 457 2 0 1 0
+c
+d 821 2 0 1 0
+c
+d 822 1 0 0 0
+c
+d 858 4 0 0 0
+c
+d 471 1 0 1 0
+c
+d 473 2 0 1 0
+c
+d 505 4 1 0 0
+c
+d 716 3 1 0 0
+c
+d 274 2 1 0 0
+c
+d 275 1 0 0 0
+c
+d 523 4 0 0 0
+c
+d 807 2 0 0 0
+c
+d 899 1 0 0 0
+c
+d 22 3 1 0 0
+c
+d 799 1 0 0 0
+c
+d 803 2 1 0 0
+c
+d 388 2 0 0 0
+c
+d 429 4 1 0 0
+c
+d 734 1 0 0 0
+c
+d 737 1 0 0 0
+c
+d 211 2 0 0 0
+c
+d 162 1 0 0 0
+c
+d 171 1 0 0 0
+c
+d 787 2 1 0 0
+c
+d 884 1 0 0 0
+c
+d 855 3 0 2 0
+c
+d 341 2 0 1 0
+c
+d 437 1 0 1 0
+c
+d 578 3 1 0 0
+c
+d 572 2 0 0 0
+c
+d 574 1 0 0 0
+c
+d 510 4 1 0 0
+c
+d 327 3 1 0 0
+c
+d 279 2 0 0 0
+c
+d 305 1 0 0 0
+c
+d 294 1 0 0 0
+c
+d 298 1 0 0 0
+c
+d 699 2 0 1 0
+c
+d 715 1 0 0 0
+c
+d 716 3 1 0 0
+c
+d 527 2 1 0 0
+c
+d 544 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 1252 1 0 0 0
+c
+d 789 2 0 1 0
+c
+d 799 1 0 0 0
+c
+d 806 1 0 1 0
+c
+d 457 2 0 0 0
+c
+d 801 3 1 0 0
+c
+d 9 2 0 0 0
+c
+d 1206 3 1 0 0
+c
+d 719 3 1 0 0
+c
+d 803 3 1 0 0
+c
+d 800 1 0 0 0
+c
+d 801 1 0 0 0
+c
+d 426 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 437 2 0 1 0
+c
+d 1022 3 0 1 0
+c
+d 168 4 1 0 0
+c
+d 575 2 0 0 0
+c
+d 299 1 0 1 0
+c
+d 319 1 0 1 0
+c
+d 904 4 0 0 0
+c
+d 748 4 0 0 0
+c
+d 764 1 0 0 0
+c
+d 766 2 0 0 0
+c
+d 719 2 0 1 0
+c
+d 949 1 0 1 0
+c
+d 306 2 0 0 0
+c
+d 743 2 0 0 0
+c
+d 311 3 1 0 0
+c
+d 823 2 0 0 0
+c
+d 554 3 0 1 0
+c
+d 46 4 0 1 0
+c
+d 1168 1 0 0 0
+c
+d 1179 1 1 0 0
+c
+d 1183 1 0 0 0
+c
+d 343 2 0 0 0
+c
+d 133 1 0 0 0
+c
+d 141 1 0 0 0
+c
+d 142 1 0 0 0
+c
+d 164 2 0 1 0
+c
+d 167 3 0 0 0
+c
+d 5 1 0 0 0
+c
+d 18 2 0 0 0
+c
+d 806 1 0 0 0
+c
+d 807 1 0 0 0
+c
+d 851 1 0 0 0
+c
+d 853 3 0 0 0
+c
+d 348 1 0 1 0
+c
+d 354 1 0 0 0
+c
+d 1125 1 0 1 0
+c
+d 301 2 0 0 0
+c
+d 1162 1 0 0 0
+c
+d 1235 3 1 0 0
+c
+d 334 1 0 0 0
+c
+d 336 1 0 0 0
+c
+d 341 2 0 0 0
+c
+d 1318 1 1 0 0
+c
+d 1319 1 0 0 0
+c
+d 1320 1 0 0 0
+c
+d 132 1 0 0 0
+c
+d 338 1 0 0 0
+c
+d 581 3 1 0 0
+c
+d 437 3 0 2 0
+c
+d 1106 2 0 1 0
+c
+d 1108 1 0 1 0
+c
+d 794 3 0 0 0
+c
+d 803 3 1 0 0
+c
+d 430 1 0 0 0
+c
+d 436 1 0 0 0
+c
+d 468 3 1 0 0
+c
+d 54 2 0 2 0
+c
+d 55 1 0 0 0
+c
+d 716 4 1 0 0
+c
+d 437 4 0 2 0
+c
+d 1261 3 0 0 0
+c
+d 1163 4 1 0 0
+c
+d 181 3 0 0 0
+c
+d 353 2 1 0 0
+c
+d 1139 1 0 0 0
+c
+d 168 2 0 0 0
+c
+d 478 1 0 1 0
+c
+d 481 1 0 0 0
+c
+d 482 1 0 1 0
+c
+d 1070 1 1 0 0
+c
+d 1071 2 0 0 0
+c
+d 101 3 1 0 0
+c
+d 844 3 0 1 0
+c
+d 211 2 1 0 0
+c
+d 1238 1 0 0 0
+c
+d 719 1 0 0 0
+c
+d 723 1 0 0 0
+c
+d 482 1 0 0 0
+c
+d 487 1 0 0 0
+c
+d 878 2 0 0 0
+c
+d 1150 3 1 0 0
+c
+d 348 3 0 0 0
+c
+d 650 1 0 1 0
+c
+d 653 1 0 0 0
+c
+d 654 1 0 0 0
+c
+d 992 3 0 2 0
+c
+d 155 2 0 0 0
+c
+d 156 1 0 0 0
+c
+d 753 3 0 2 0
+c
+d 436 2 0 2 0
+c
+d 278 1 0 0 0
+c
+d 1165 1 0 0 0
+c
+d 5 3 1 0 0
+c
+d 1073 1 0 0 0
+c
+d 1074 1 0 0 0
+c
+d 129 4 1 0 0
+c
+d 301 1 0 0 0
+c
+d 1153 2 0 0 0
+c
+d 195 3 0 0 0
+c
+d 437 2 0 2 0
+c
+d 457 1 0 0 0
+c
+d 561 3 0 0 0
+c
+d 591 3 0 0 0
+c
+d 844 3 1 0 0
+c
+d 858 4 1 0 0
+c
+d 925 3 1 0 0
+c
+d 633 1 0 0 0
+c
+d 634 2 1 0 0
+c
+d 428 3 1 0 0
+c
+d 177 4 1 0 0
+c
+d 437 1 0 0 0
+c
+d 457 1 0 0 0
+c
+d 715 1 0 0 0
+c
+d 716 2 1 0 0
+c
+d 523 1 0 0 0
+c
+d 524 1 0 0 0
+c
+d 843 2 0 0 0
+c
+d 697 4 0 0 0
+c
+d 1021 1 0 1 0
+c
+d 1022 1 0 1 0
+c
+d 75 1 0 0 0
+c
+d 81 1 0 0 0
+c
+d 159 2 0 0 0
+c
+d 260 1 0 0 0
+c
+d 261 2 1 0 0
+c
+d 178 3 1 0 0
+c
+d 1156 3 0 0 0
+c
+d 806 3 1 0 0
+c
+d 716 3 0 2 0
+c
+d 196 3 0 0 0
+c
+d 686 4 1 0 0
+c
+d 799 2 0 2 0
+c
+d 787 4 1 0 0
+c
+d 1 3 0 0 0
+c
+d 843 1 0 1 0
+c
+d 844 2 0 0 0
+c
+d 178 1 1 0 0
+c
+d 181 2 0 0 0
+c
+d 743 2 0 0 0
+c
+d 744 1 0 0 0
+c
+d 835 3 1 0 0
+c
+d 443 1 1 0 0
+c
+d 444 2 0 0 0
+c
+d 168 2 0 0 0
+c
+d 259 3 0 1 0
+c
+d 523 3 1 0 0
+c
+d 55 3 0 0 0
+c
+d 195 1 0 0 0
+c
+d 205 1 0 0 0
+c
+d 286 1 0 0 0
+c
+d 299 2 0 0 0
+c
+d 921 1 0 0 0
+c
+d 922 1 0 0 0
+c
+d 926 1 0 0 0
+c
+d 46 3 0 0 0
+c
+d 30 2 0 2 0
+c
+d 167 1 0 0 0
+c
+d 1110 1 0 1 0
+c
+d 691 1 0 0 0
+c
+d 699 1 0 0 0
+c
+d 84 1 0 0 0
+c
+d 1275 2 0 0 0
+c
+d 178 1 0 0 0
+c
+d 179 1 0 1 0
+c
+d 146 1 0 0 0
+c
+d 228 1 0 0 0
+c
+d 478 1 0 1 0
+c
+d 482 1 0 1 0
+c
+d 374 3 0 2 0
+c
+d 989 1 0 0 0
+c
+d 995 1 0 1 0
+c
+d 697 3 0 2 0
+c
+d 719 1 0 0 0
+c
+d 723 1 0 0 0
+c
+d 87 3 1 0 0
+c
+d 1125 3 1 0 0
+c
+d 436 2 0 2 0
+c
+d 437 1 0 0 0
+c
+d 656 3 0 0 0
+c
+d 168 1 0 0 0
+c
+d 369 1 0 0 0
+c
+d 1315 1 1 0 0
+c
+d 1316 1 0 0 0
+c
+d 327 1 0 1 0
+c
+d 349 2 0 1 0
+c
+d 159 2 0 0 0
+c
+d 183 1 0 1 0
+c
+d 153 1 0 0 0
+c
+d 155 1 0 0 0
+c
+d 855 4 0 0 0
+c
+d 788 1 0 1 0
+c
+d 789 3 0 1 0
+c
+d 77 2 0 0 0
+c
+d 1297 1 0 0 0
+c
+d 559 3 0 0 0
+c
+d 395 2 0 1 0
+c
+d 398 1 0 0 0
+c
+d 886 3 0 1 0
+c
+d 157 2 0 0 0
+c
+d 806 2 0 0 0
+c
+d 178 2 0 0 0
+c
+d 838 2 0 0 0
+c
+d 509 4 1 0 0
+c
+d 1163 2 0 0 0
+c
+d 716 3 1 0 0
+c
+d 146 1 0 0 0
+c
+d 153 2 0 0 0
+c
+d 1185 3 1 0 0
+c
+d 195 2 0 0 0
+c
+d 203 1 1 0 0
+c
+d 591 3 1 0 0
+c
+d 425 2 0 0 0
+c
+d 132 3 0 0 0
+c
+d 651 2 0 2 0
+c
+d 690 1 0 0 0
+c
+d 567 4 0 0 0
+c
+d 120 1 0 0 0
+c
+d 125 2 0 0 0
+c
+d 282 1 0 1 0
+c
+d 286 2 0 1 0
+c
+d 318 1 0 0 0
+c
+d 319 1 0 0 0
+c
+d 716 1 0 0 0
+c
+d 844 2 0 0 0
+c
+d 178 2 0 0 0
+c
+d 181 1 1 0 0
+c
+d 882 2 0 0 0
+c
+d 886 1 1 0 0
+c
+d 334 1 0 0 0
+c
+d 341 1 0 0 0
+c
+d 868 1 0 0 0
+c
+d 872 1 0 0 0
+c
+d 699 1 0 1 0
+c
+d 716 1 0 0 0
+c
+d 844 1 0 1 0
+c
+d 426 1 0 1 0
+c
+d 591 1 0 1 0
+c
+d 840 1 0 0 0
+c
+d 841 1 0 0 0
+c
+d 47 3 0 0 0
+c
+d 130 2 1 0 0
+c
+d 1259 1 0 0 0
+c
+d 753 3 1 0 0
+c
+d 1241 4 0 0 0
+c
+d 294 2 0 2 0
+c
+d 274 1 0 0 0
+c
+d 275 1 0 0 0
+c
+d 1254 4 0 0 0
+c
+d 691 1 1 0 0
+c
+d 697 2 0 0 0
+c
+d 305 1 0 0 0
+c
+d 1144 1 0 0 0
+c
+d 437 2 0 0 0
+c
+d 457 1 0 0 0
+c
+d 47 1 0 1 0
+c
+d 58 1 0 1 0
+c
+d 1106 1 0 0 0
+c
+d 1107 1 0 1 0
+c
+d 1108 1 0 0 0
+c
+d 1087 1 0 0 0
+c
+d 1096 2 1 0 0
+c
+d 55 2 0 2 0
+c
+d 581 2 0 2 0
+c
+d 582 2 0 0 0
+c
+d 1254 2 0 0 0
+c
+d 1108 1 0 0 0
+c
+d 1110 1 0 0 0
+c
+d 602 2 0 0 0
+c
+d 715 1 0 0 0
+c
+d 716 1 0 0 0
+c
+d 178 2 0 0 0
+c
+d 181 1 0 0 0
+c
+d 195 1 0 0 0
+c
+d 274 1 1 0 0
+c
+d 276 2 0 0 0
+c
+d 965 1 0 0 0
+c
+d 973 1 0 0 0
+c
+d 177 1 0 1 0
+c
+d 178 2 0 1 0
+c
+d 299 1 0 0 0
+c
+d 319 1 0 0 0
+c
+d 337 2 0 0 0
+c
+d 424 2 0 1 0
+c
+d 734 3 0 2 0
+c
+d 622 2 1 0 0
+c
+d 625 1 0 0 0
+c
+d 334 3 0 0 0
+c
+d 336 1 0 0 0
+c
+d 578 3 1 0 0
+c
+d 332 1 0 0 0
+c
+d 333 1 0 0 0
+c
+d 686 2 0 0 0
+c
+d 836 2 0 0 0
+c
+d 507 2 0 0 0
+c
+d 132 1 0 1 0
+c
+d 338 1 0 1 0
+c
+d 340 1 0 0 0
+c
+d 199 2 0 0 0
+c
+d 305 1 0 0 0
+c
+d 306 1 0 0 0
+c
+d 437 2 0 0 0
+c
+d 493 3 0 0 0
+c
+d 1110 3 0 0 0
+c
+d 716 3 1 0 0
+c
+d 298 1 0 0 0
+c
+d 323 1 0 0 0
+c
+d 509 3 1 0 0
+c
+d 1168 2 1 0 0
+c
+d 1183 2 0 0 0
+c
+d 457 3 1 0 0
+c
+d 54 1 0 1 0
+c
+d 55 1 0 0 0
+c
+d 242 3 0 0 0
+c
+d 650 1 0 0 0
+c
+d 653 1 0 0 0
+c
+d 19 2 0 1 0
+c
+d 20 1 1 0 0
+c
+d 838 4 1 0 0
+c
+d 833 4 0 1 0
+c
+d 839 3 0 2 0
+c
+d 132 2 0 0 0
+c
+d 343 3 1 0 0
+c
+d 334 1 0 0 0
+c
+d 341 2 1 0 0
+c
+d 615 2 0 0 0
+c
+d 861 4 0 1 0
+c
+d 176 1 0 1 0
+c
+d 194 1 0 1 0
+c
+d 844 3 1 0 0
+c
+d 1174 1 0 0 0
+c
+d 1185 1 0 0 0
+c
+d 177 2 0 0 0
+c
+d 178 1 1 0 0
+c
+d 338 2 0 1 0
+c
+d 339 1 0 0 0
+c
+d 578 2 0 0 0
+c
+d 580 1 1 0 0
+c
+d 324 3 0 0 0
+c
+d 437 2 0 0 0
+c
+d 836 2 0 0 0
+c
+d 132 1 0 0 0
+c
+d 340 2 1 0 0
+c
+d 734 1 0 0 0
+c
+d 769 2 0 0 0
+c
+d 129 1 0 0 0
+c
+d 131 1 0 0 0
+c
+d 523 1 1 0 0
+c
+d 1202 3 0 0 0
+c
+d 838 3 1 0 0
+c
+d 691 4 1 0 0
+c
+d 513 3 1 0 0
+c
+d 818 4 0 1 0
+c
+d 155 1 0 0 0
+c
+d 156 1 0 0 0
+c
+d 906 1 0 0 0
+c
+d 908 1 0 0 0
+c
+d 1318 2 0 0 0
+c
+d 597 1 0 1 0
+c
+d 606 1 0 1 0
+c
+d 875 3 0 0 0
+c
+d 775 2 1 0 0
+c
+d 133 3 1 0 0
+c
+d 341 1 0 0 0
+c
+d 344 1 0 0 0
+c
+d 242 2 0 0 0
+c
+d 753 2 0 0 0
+c
+d 333 2 0 0 0
+c
+d 1269 1 0 1 0
+c
+d 1271 1 0 1 0
+c
+d 146 3 1 0 0
+c
+d 836 1 0 0 0
+c
+d 839 1 0 0 0
+c
+d 906 1 0 1 0
+c
+d 907 2 1 0 0
+c
+d 908 1 0 0 0
+c
+d 769 3 0 0 0
+c
+d 806 3 0 0 0
+c
+d 806 2 0 0 0
+c
+d 153 2 0 0 0
+c
+d 228 1 0 0 0
+c
+d 575 2 0 0 0
+c
+d 279 1 0 1 0
+c
+d 1150 2 0 0 0
+c
+d 159 3 0 2 0
+c
+d 341 2 0 0 0
+c
+d 127 2 0 0 0
+c
+d 341 2 0 0 0
+c
+d 425 3 1 0 0
+c
+d 807 1 0 1 0
+c
+d 823 1 0 1 0
+c
+d 824 1 0 0 0
+c
+d 716 4 0 0 0
+c
+d 1202 2 0 0 0
+c
+d 802 2 1 0 0
+c
+d 803 1 0 0 0
+c
+d 509 4 0 2 0
+c
+d 716 1 0 0 0
+c
+d 844 1 0 0 0
+c
+d 168 3 0 2 0
+c
+d 146 4 0 0 0
+c
+d 374 4 0 0 0
+c
+d 1202 3 0 0 0
+c
+d 470 1 0 0 0
+c
+d 471 2 0 0 0
+c
+d 699 3 0 0 0
+c
+d 1071 2 0 1 0
+c
+d 1072 1 0 0 0
+c
+d 270 1 0 1 0
+c
+d 272 1 0 0 0
+c
+d 299 2 0 1 0
+c
+d 319 1 0 1 0
+c
+d 93 1 1 0 0
+c
+d 141 1 0 0 0
+c
+d 142 1 0 0 0
+c
+d 111 2 0 0 0
+c
+d 393 4 1 0 0
+c
+d 838 1 0 0 0
+c
+d 839 2 1 0 0
+c
+d 581 4 0 0 0
+c
+d 806 2 0 0 0
+c
+d 697 4 0 0 0
+c
+d 132 1 0 0 0
+c
+d 340 1 0 0 0
+c
+d 305 2 1 0 0
+c
+d 353 1 0 0 0
+c
+d 836 3 1 0 0
+c
+d 378 2 0 0 0
+c
+d 853 4 0 2 0
+c
+d 127 1 0 0 0
+c
+d 129 2 0 0 0
+c
+d 436 2 0 0 0
+c
+d 332 1 1 0 0
+c
+d 333 2 0 0 0
+c
+d 876 1 0 0 0
+c
+d 878 1 0 0 0
+c
+d 168 1 0 0 0
+c
+d 378 1 0 0 0
+c
+d 327 1 0 1 0
+c
+d 332 1 0 1 0
+c
+d 333 1 0 0 0
+c
+d 163 4 1 0 0
+c
+d 480 1 0 1 0
+c
+d 484 1 0 1 0
+c
+d 811 3 1 0 0
+c
+d 120 3 1 0 0
+c
+d 699 3 1 0 0
+c
+d 54 3 1 0 0
+c
+d 127 1 0 0 0
+c
+d 129 2 1 0 0
+c
+d 132 2 0 2 0
+c
+d 558 3 0 0 0
+c
+d 262 1 0 0 0
+c
+d 270 1 1 0 0
+c
+d 272 1 0 0 0
+c
+d 305 1 0 0 0
+c
+d 306 1 0 0 0
+c
+d 591 1 0 1 0
+c
+d 597 1 0 0 0
+c
+d 716 3 1 0 0
+c
+d 509 1 0 1 0
+c
+d 1071 1 0 1 0
+c
+d 734 1 0 1 0
+c
+d 737 2 0 0 0
+c
+d 745 1 0 0 0
+c
+d 748 2 1 0 0
+c
+d 604 1 0 0 0
+c
+d 635 1 0 0 0
+c
+d 697 3 1 0 0
+c
+d 5 2 1 0 0
+c
+d 691 1 0 0 0
+c
+d 697 1 0 0 0
+c
+d 487 4 1 0 0
+c
+d 839 1 0 0 0
+c
+d 842 1 1 0 0
+c
+d 769 2 0 0 0
+c
+d 167 2 0 0 0
+c
+d 204 3 1 0 0
+c
+d 470 1 0 0 0
+c
+d 471 1 0 0 0
+c
+d 26 3 1 0 0
+c
+d 787 3 0 0 0
+c
+d 578 2 0 0 0
+c
+d 178 1 0 0 0
+c
+d 181 1 0 0 0
+c
+d 377 1 0 0 0
+c
+d 384 1 0 0 0
+c
+d 699 1 1 0 0
+c
+d 715 1 0 0 0
+c
+d 716 1 0 0 0
+c
+d 559 1 0 0 0
+c
+d 560 1 0 0 0
+c
+d 153 2 0 1 0
+c
+d 155 1 0 1 0
+c
+d 457 3 0 0 0
+c
+d 75 2 0 0 0
+c
+d 76 1 0 0 0
+c
+d 358 2 0 0 0
+c
+d 359 1 0 0 0
+c
+d 799 2 0 0 0
+c
+d 854 2 0 0 0
+c
+d 686 3 1 0 0
+c
+d 60 3 1 0 0
+c
+d 4 2 0 0 0
+c
+d 1105 1 0 0 0
+c
+d 1106 1 0 0 0
+c
+d 691 3 0 0 0
+c
+d 167 1 0 0 0
+c
+d 395 1 0 0 0
+c
+d 608 1 0 0 0
+c
+d 611 1 0 0 0
+c
+d 608 1 0 0 0
+c
+d 615 1 0 0 0
+c
+d 1070 1 0 0 0
+c
+d 1071 2 1 0 0
+c
+d 178 1 0 0 0
+c
+d 181 1 0 0 0
+c
+d 75 1 0 0 0
+c
+d 77 2 0 0 0
+c
+d 81 1 0 0 0
+c
+d 19 1 0 0 0
+c
+d 20 1 0 0 0
+c
+d 1108 1 0 0 0
+c
+d 1110 2 0 0 0
+c
+d 1071 2 0 0 0
+c
+d 1185 1 0 1 0
+c
+d 1202 1 0 0 0
+c
+d 769 2 0 2 0
+c
+d 771 1 0 0 0
+c
+d 437 1 0 1 0
+c
+d 569 2 0 1 0
+c
+d 348 3 0 0 0
+c
+d 363 2 0 0 0
+c
+d 437 3 0 2 0
+c
+d 599 3 1 0 0
+c
+d 1024 1 0 0 0
+c
+d 1025 1 0 0 0
+c
+d 1108 1 0 0 0
+c
+d 1110 1 0 0 0
+c
+d 167 1 0 0 0
+c
+d 369 2 0 0 0
+c
+d 599 3 0 2 0
+c
+d 872 1 0 0 0
+c
+d 873 1 0 0 0
+c
+d 836 3 1 0 0
+c
+d 534 2 0 0 0
+c
+d 58 3 1 0 0
+c
+d 299 2 0 0 0
+c
+d 319 1 1 0 0
+c
+d 195 2 0 0 0
+c
+d 509 3 1 0 0
+c
+d 616 3 0 0 0
+c
+d 1 3 0 0 0
+c
+d 194 1 0 0 0
+c
+d 204 1 0 0 0
+c
+d 224 1 0 0 0
+c
+d 1105 1 0 0 0
+c
+d 1106 1 0 0 0
+c
+d 383 4 0 0 0
+c
+d 878 4 1 0 0
+c
+d 998 3 1 0 0
+c
+d 478 4 1 0 0
+c
+d 176 1 0 0 0
+c
+d 194 1 0 0 0
+c
+d 616 3 0 0 0
+c
+d 608 3 1 0 0
+c
+d 334 2 0 0 0
+c
+d 335 1 1 0 0
+c
+d 1192 2 0 0 0
+c
+d 183 2 0 1 0
+c
+d 340 2 0 0 0
+c
+d 807 3 0 2 0
+c
+d 252 3 0 2 0
+c
+d 337 1 0 0 0
+c
+d 338 1 0 0 0
+c
+d 9 1 0 1 0
+c
+d 10 1 0 0 0
+c
+d 1244 3 0 0 0
+c
+d 286 2 0 0 0
+c
+d 291 1 1 0 0
+c
+d 194 1 1 0 0
+c
+d 224 1 0 0 0
+c
+d 1071 3 1 0 0
+c
+d 581 2 0 1 0
+c
+d 582 1 0 0 0
+c
+d 590 1 0 1 0
+c
+d 157 1 0 0 0
+c
+d 364 1 0 0 0
+c
+d 355 1 0 0 0
+c
+d 356 1 0 0 0
+c
+d 157 4 0 0 0
+c
+d 341 2 0 0 0
+c
+d 152 4 0 1 0
+c
+d 753 2 1 0 0
+c
+d 858 1 0 0 0
+c
+d 875 1 0 0 0
+c
+d 876 1 0 0 0
+c
+d 602 3 0 1 0
+c
+d 332 1 0 0 0
+c
+d 333 1 0 0 0
+c
+d 185 4 1 0 0
+c
+d 1318 2 0 0 0
+c
+d 718 4 1 0 0
+c
+d 1073 3 1 0 0
+c
+d 54 3 1 0 0
+c
+d 807 1 0 0 0
+c
+d 899 1 0 0 0
+c
+d 716 1 0 0 0
+c
+d 718 1 0 0 0
+c
+d 57 2 0 1 0
+c
+d 59 1 0 1 0
+c
+d 340 3 1 0 0
+c
+d 904 2 0 0 0
+c
+d 1070 2 1 0 0
+c
+d 1071 1 0 0 0
+c
+d 856 3 1 0 0
+c
+d 836 4 1 0 0
+c
+d 191 3 1 0 0
+c
+d 373 3 1 0 0
+c
+d 1156 3 1 0 0
+c
+d 430 1 0 1 0
+c
+d 470 1 0 0 0
+c
+d 25 3 1 0 0
+c
+d 663 3 1 0 0
+c
+d 153 2 0 0 0
+c
+d 204 1 0 0 0
+c
+d 392 1 0 0 0
+c
+d 393 2 0 0 0
+c
+d 54 3 1 0 0
+c
+d 715 3 1 0 0
+c
+d 272 2 0 1 0
+c
+d 282 1 0 1 0
+c
+d 715 3 0 1 0
+c
+d 878 2 0 0 0
+c
+d 333 4 1 0 0
+c
+d 234 3 0 0 0
+c
+d 811 4 1 0 0
+c
+d 807 1 0 0 0
+c
+d 839 1 0 0 0
+c
+d 899 2 0 0 0
+c
+d 436 3 1 0 0
+c
+d 1283 4 1 0 0
+c
+d 1318 2 0 2 0
+c
+d 1319 2 0 0 0
+c
+d 388 1 0 1 0
+c
+d 389 2 0 1 0
+c
+d 807 1 0 0 0
+c
+d 822 1 0 0 0
+c
+d 753 3 1 0 0
+c
+d 1005 2 0 0 0
+c
+d 509 3 1 0 0
+c
+d 437 2 0 2 0
+c
+d 19 1 0 1 0
+c
+d 1022 2 0 1 0
+c
+d 602 3 1 0 0
+c
+d 133 2 0 1 0
+c
+d 93 3 0 2 0
+c
+d 272 1 0 1 0
+c
+d 273 1 0 0 0
+c
+d 294 1 0 0 0
+c
+d 295 1 1 0 0
+c
+d 297 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 111 1 0 0 0
+c
+d 715 4 1 0 0
+c
+d 348 2 0 0 0
+c
+d 799 2 0 1 0
+c
+d 809 1 0 0 0
+c
+d 615 2 0 0 0
+c
+d 437 2 0 1 0
+c
+d 455 1 0 1 0
+c
+d 60 1 0 1 0
+c
+d 647 1 0 0 0
+c
+d 597 4 0 1 0
+c
+d 559 1 0 0 0
+c
+d 560 1 0 1 0
+c
+d 561 1 0 1 0
+c
+d 299 2 0 1 0
+c
+d 319 1 0 1 0
+c
+d 568 1 0 0 0
+c
+d 572 1 0 0 0
+c
+d 178 1 1 0 0
+c
+d 181 2 0 0 0
+c
+d 1176 1 0 1 0
+c
+d 1177 1 0 1 0
+c
+d 1179 1 0 0 0
+c
+d 179 1 0 0 0
+c
+d 182 2 0 0 0
+c
+d 373 2 0 0 0
+c
+d 153 2 0 0 0
+c
+d 817 2 0 1 0
+c
+d 819 1 0 0 0
+c
+d 54 3 0 2 0
+c
+d 1163 3 0 1 0
+c
+d 602 2 0 0 0
+c
+d 21 2 0 1 0
+c
+d 753 2 0 1 0
+c
+d 858 1 0 1 0
+c
+d 294 4 0 2 0
+c
+d 556 2 0 0 0
+c
+d 565 1 0 0 0
+c
+d 838 1 0 1 0
+c
+d 839 1 0 0 0
+c
+d 100 4 1 0 0
+c
+d 1156 1 0 1 0
+c
+d 1192 2 0 1 0
+c
+d 689 3 1 0 0
+c
+d 663 3 1 0 0
+c
+d 680 1 0 0 0
+c
+d 46 2 0 0 0
+c
+d 500 1 0 0 0
+c
+d 502 1 1 0 0
+c
+d 505 1 0 0 0
+c
+d 177 2 0 0 0
+c
+d 262 4 0 0 0
+c
+d 5 1 0 1 0
+c
+d 6 2 0 0 0
+c
+d 10 1 0 1 0
+c
+d 301 2 1 0 0
+c
+d 313 1 0 0 0
+c
+d 487 3 0 2 0
+c
+d 523 1 0 0 0
+c
+d 524 3 1 0 0
+c
+d 882 1 0 0 0
+c
+d 884 1 0 0 0
+c
+d 578 1 0 0 0
+c
+d 580 1 0 0 0
+c
+d 839 1 0 1 0
+c
+d 840 2 0 0 0
+c
+d 608 3 0 0 0
+c
+d 305 2 0 0 0
+c
+d 353 1 1 0 0
+c
+d 561 2 1 0 0
+c
+d 734 1 0 0 0
+c
+d 737 1 0 0 0
+c
+d 204 4 1 0 0
+c
+d 606 2 0 0 0
+c
+d 789 3 1 0 0
+c
+d 827 4 0 0 0
+c
+d 208 3 1 0 0
+c
+d 1150 1 0 1 0
+c
+d 1153 1 0 1 0
+c
+d 32 1 0 0 0
+c
+d 1296 1 1 0 0
+c
+d 1297 1 0 0 0
+c
+d 836 3 1 0 0
+c
+d 186 1 0 1 0
+c
+d 188 1 0 0 0
+c
+d 212 1 0 1 0
+c
+d 836 3 1 0 0
+c
+d 598 1 0 0 0
+c
+d 606 1 0 0 0
+c
+d 507 2 0 0 0
+c
+d 341 2 0 0 0
+c
+d 493 2 0 1 0
+c
+d 1077 1 0 1 0
+c
+d 337 2 0 1 0
+c
+d 338 1 0 1 0
+c
+d 424 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 888 1 0 0 0
+c
+d 890 1 0 0 0
+c
+d 156 1 0 1 0
+c
+d 157 2 0 1 0
+c
+d 340 3 0 0 0
+c
+d 437 2 0 1 0
+c
+d 439 1 0 1 0
+c
+d 608 3 0 0 0
+c
+d 395 3 0 0 0
+c
+d 153 3 0 0 0
+c
+d 604 1 0 0 0
+c
+d 640 1 0 0 0
+c
+d 839 2 0 0 0
+c
+d 841 1 0 0 0
+c
+d 437 2 1 0 0
+c
+d 574 1 0 0 0
+c
+d 32 1 0 1 0
+c
+d 77 1 0 1 0
+c
+d 876 1 0 0 0
+c
+d 878 1 0 0 0
+c
+d 835 1 0 0 0
+c
+d 838 1 0 0 0
+c
+d 211 1 0 1 0
+c
+d 1235 1 0 1 0
+c
+d 622 1 0 0 0
+c
+d 965 1 0 0 0
+c
+d 691 1 0 1 0
+c
+d 699 2 0 1 0
+c
+d 167 2 0 0 0
+c
+d 395 1 0 0 0
+c
+d 1115 2 0 2 0
+c
+d 817 4 0 0 0
+c
+d 328 3 0 1 0
+c
+d 329 1 0 0 0
+c
+d 426 1 1 0 0
+c
+d 591 2 0 0 0
+c
+d 238 2 0 1 0
+c
+d 239 2 1 0 0
+c
+d 87 2 0 0 0
+c
+d 89 1 0 0 0
+c
+d 799 4 1 0 0
+c
+d 32 3 1 0 0
+c
+d 280 3 0 0 0
+c
+d 610 2 0 0 0
+c
+d 1004 1 0 0 0
+c
+d 568 2 0 2 0
+c
+d 836 1 0 0 0
+c
+d 838 2 0 2 0
+c
+d 211 3 0 0 0
+c
+d 52 1 0 0 0
+c
+d 1303 1 0 1 0
+c
+d 472 1 0 0 0
+c
+d 473 1 0 0 0
+c
+d 875 2 0 1 0
+c
+d 876 1 0 1 0
+c
+d 927 3 0 2 0
+c
+d 341 2 0 0 0
+c
+d 348 1 1 0 0
+c
+d 1184 3 1 0 0
+c
+d 1170 1 0 0 0
+c
+d 1185 2 0 2 0
+c
+d 840 3 1 0 0
+c
+d 457 3 1 0 0
+c
+d 622 2 0 1 0
+c
+d 1008 1 0 1 0
+c
+d 806 1 0 0 0
+c
+d 807 2 0 2 0
+c
+d 882 2 0 0 0
+c
+d 888 1 0 0 0
+c
+d 437 4 1 0 0
+c
+d 437 1 0 0 0
+c
+d 438 1 0 0 0
+c
+d 719 1 0 0 0
+c
+d 950 2 0 0 0
+c
+d 181 1 0 1 0
+c
+d 192 1 0 0 0
+c
+d 193 1 0 0 0
+c
+d 511 1 0 0 0
+c
+d 528 1 0 0 0
+c
+d 25 4 1 0 0
+c
+d 531 1 0 1 0
+c
+d 535 3 0 0 0
+c
+d 18 1 0 1 0
+c
+d 1279 2 0 1 0
+c
+d 802 1 1 0 0
+c
+d 803 2 0 0 0
+c
+d 608 3 1 0 0
+c
+d 811 2 1 0 0
+c
+d 914 1 0 0 0
+c
+d 115 1 0 0 0
+c
+d 116 2 0 1 0
+c
+d 888 3 1 0 0
+c
+d 178 4 0 1 0
+c
+d 437 2 0 0 0
+c
+d 132 1 0 1 0
+c
+d 133 1 0 1 0
+c
+d 615 1 0 1 0
+c
+d 616 2 0 1 0
+c
+d 4 2 1 0 0
+c
+d 5 1 0 0 0
+c
+d 167 1 0 0 0
+c
+d 369 1 0 0 0
+c
+d 1145 3 0 0 0
+c
+d 242 3 0 2 0
+c
+d 508 4 1 0 0
+c
+d 846 1 0 0 0
+c
+d 853 1 0 0 0
+c
+d 854 1 0 0 0
+c
+d 998 3 0 0 0
+c
+d 1165 3 0 1 0
+c
+d 301 4 1 0 0
+c
+d 334 2 0 0 0
+c
+d 1269 3 1 0 0
+c
+d 580 3 1 0 0
+c
+d 854 2 0 1 0
+c
+d 815 1 0 0 0
+c
+d 817 1 0 0 0
+c
+d 270 1 0 0 0
+c
+d 272 1 0 0 0
+c
+d 989 2 0 0 0
+c
+d 990 1 0 0 0
+c
+d 334 1 0 0 0
+c
+d 341 1 0 0 0
+c
+d 378 3 0 0 0
+c
+d 133 4 0 1 0
+c
+d 419 3 1 0 0
+c
+d 164 1 0 0 0
+c
+d 1104 1 0 0 0
+c
+d 806 2 0 2 0
+c
+d 811 1 0 0 0
+c
+d 245 5 1 0 0
+c
+d 299 4 1 0 0
+c
+d 499 1 0 1 0
+c
+d 504 1 0 1 0
+c
+d 505 1 0 0 0
+c
+d 647 3 0 0 0
+c
+d 857 2 0 0 0
+c
+d 127 3 0 0 0
+c
+d 836 2 0 0 0
+c
+d 301 2 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 799 4 1 0 0
+c
+d 527 4 0 0 0
+c
+d 1008 1 0 1 0
+c
+d 1013 2 0 0 0
+c
+d 127 3 0 0 0
+c
+d 575 1 0 1 0
+c
+d 1044 3 1 0 0
+c
+d 301 2 0 0 0
+c
+d 716 2 0 0 0
+c
+d 718 1 1 0 0
+c
+d 478 2 0 2 0
+c
+d 483 1 0 0 0
+c
+d 182 1 0 1 0
+c
+d 191 2 0 1 0
+c
+d 300 1 0 1 0
+c
+d 315 1 0 0 0
+c
+d 182 1 1 0 0
+c
+d 183 3 0 0 0
+c
+d 437 1 0 0 0
+c
+d 457 2 0 0 0
+c
+d 180 3 1 0 0
+c
+d 769 3 1 0 0
+c
+d 771 1 0 0 0
+c
+d 799 1 0 0 0
+c
+d 806 1 0 1 0
+c
+d 1004 1 0 0 0
+c
+d 1005 1 0 0 0
+c
+d 780 4 1 0 0
+c
+d 616 3 0 2 0
+c
+d 1127 2 0 0 0
+c
+d 1131 1 1 0 0
+c
+d 340 1 0 1 0
+c
+d 344 3 1 0 0
+c
+d 294 3 1 0 0
+c
+d 527 2 1 0 0
+c
+d 544 1 0 0 0
+c
+d 1148 4 1 0 0
+c
+d 437 1 0 0 0
+c
+d 568 2 1 0 0
+c
+d 507 2 0 0 0
+c
+d 152 4 1 0 0
+c
+d 86 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 620 2 1 0 0
+c
+d 1036 2 0 0 0
+c
+d 466 1 0 1 0
+c
+d 467 1 0 0 0
+c
+d 507 3 1 0 0
+c
+d 18 2 0 0 0
+c
+d 878 2 0 0 0
+c
+d 618 1 0 1 0
+c
+d 965 2 0 0 0
+c
+d 635 1 0 1 0
+c
+d 640 1 0 0 0
+c
+d 641 1 0 0 0
+c
+d 806 1 0 0 0
+c
+d 807 1 0 0 0
+c
+d 876 1 0 0 0
+c
+d 878 1 0 0 0
+c
+d 514 1 0 0 0
+c
+d 515 3 0 0 0
+c
+d 30 1 0 0 0
+c
+d 32 1 0 0 0
+c
+d 276 2 0 0 0
+c
+d 86 2 0 0 0
+c
+d 823 3 1 0 0
+c
+d 278 1 0 0 0
+c
+d 279 1 0 0 0
+c
+d 1184 1 0 0 0
+c
+d 1195 2 1 0 0
+c
+d 666 3 1 0 0
+c
+d 305 1 0 0 0
+c
+d 1143 1 0 0 0
+c
+d 510 2 1 0 0
+c
+d 511 1 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 1195 1 0 0 0
+c
+d 1127 3 1 0 0
+c
+d 152 2 0 1 0
+c
+d 153 1 0 1 0
+c
+d 89 2 0 0 0
+c
+d 333 1 0 0 0
+c
+d 339 1 0 0 0
+c
+d 86 2 0 0 0
+c
+d 301 2 0 0 0
+c
+d 169 4 1 0 0
+c
+d 806 1 0 0 0
+c
+d 840 1 0 0 0
+c
+d 298 1 0 1 0
+c
+d 299 2 1 0 0
+c
+d 319 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 159 1 0 0 0
+c
+d 699 1 1 0 0
+c
+d 715 1 0 0 0
+c
+d 716 1 0 0 0
+c
+d 437 1 0 1 0
+c
+d 575 1 0 0 0
+c
+d 576 1 1 0 0
+c
+d 98 4 0 0 0
+c
+d 527 1 0 1 0
+c
+d 544 1 0 0 0
+c
+d 546 1 0 1 0
+c
+d 493 2 1 0 0
+c
+d 494 1 0 0 0
+c
+d 274 2 0 0 0
+c
+d 861 1 0 0 0
+c
+d 868 1 0 0 0
+c
+d 359 1 0 0 0
+c
+d 360 1 0 0 0
+c
+d 622 2 0 1 0
+c
+d 1318 2 0 0 0
+c
+d 574 1 0 0 0
+c
+d 795 1 0 0 0
+c
+d 204 1 0 0 0
+c
+d 224 1 0 0 0
+c
+d 101 2 0 0 0
+c
+d 100 1 0 1 0
+c
+d 1005 2 0 1 0
+c
+d 560 3 0 0 0
+c
+d 807 2 0 2 0
+c
+d 574 1 0 1 0
+c
+d 795 2 0 1 0
+c
+d 1073 3 1 0 0
+c
+d 753 4 1 0 0
+c
+d 162 2 0 0 0
+c
+d 505 4 0 0 0
+c
+d 529 1 1 0 0
+c
+d 550 2 0 0 0
+c
+d 194 1 0 0 0
+c
+d 204 1 0 0 0
+c
+d 340 4 0 0 0
+c
+d 552 3 0 0 0
+c
+d 93 1 1 0 0
+c
+d 127 1 0 0 0
+c
+d 130 1 0 0 0
+c
+d 505 3 1 0 0
+c
+d 715 3 1 0 0
+c
+d 507 2 0 0 0
+c
+d 1021 2 0 1 0
+c
+d 1029 2 0 0 0
+c
+d 384 2 0 2 0
+c
+d 386 1 0 0 0
+c
+d 243 3 1 0 0
+c
+d 471 1 0 0 0
+c
+d 472 1 1 0 0
+c
+d 473 1 0 0 0
+c
+d 101 2 0 0 0
+c
+d 597 1 1 0 0
+c
+d 1281 3 1 0 0
+c
+d 426 1 0 1 0
+c
+d 591 1 0 0 0
+c
+d 597 1 0 1 0
+c
+d 88 1 0 0 0
+c
+d 775 1 0 0 0
+c
+d 178 1 0 0 0
+c
+d 181 2 0 0 0
+c
+d 753 3 0 0 0
+c
+d 6 1 0 0 0
+c
+d 10 1 0 0 0
+c
+d 93 2 0 0 0
+c
+d 301 3 1 0 0
+c
+d 167 4 1 0 0
+c
+d 276 4 1 0 0
+c
+d 569 3 1 0 0
+c
+d 806 1 0 0 0
+c
+d 807 1 0 0 0
+c
+d 836 2 0 0 0
+c
+d 838 1 1 0 0
+c
+d 211 1 0 1 0
+c
+d 212 1 0 0 0
+c
+d 213 1 0 0 0
+c
+d 1070 4 1 0 0
+c
+d 502 3 0 2 0
+c
+d 568 2 0 0 0
+c
+d 572 1 0 0 0
+c
+d 276 3 1 0 0
+c
+d 527 2 0 1 0
+c
+d 543 1 0 1 0
+c
+d 167 1 0 0 0
+c
+d 1105 1 0 0 0
+c
+d 866 1 0 0 0
+c
+d 867 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 355 1 0 0 0
+c
+d 129 1 0 0 0
+c
+d 523 2 1 0 0
+c
+d 844 1 0 0 0
+c
+d 845 1 0 0 0
+c
+d 373 3 1 0 0
+c
+d 872 3 0 0 0
+c
+d 873 1 0 0 0
+c
+d 1087 1 0 0 0
+c
+d 1090 1 0 0 0
+c
+d 1176 2 0 0 0
+c
+d 838 2 0 0 0
+c
+d 839 1 1 0 0
+c
+d 392 4 0 0 0
+c
+d 734 1 0 0 0
+c
+d 737 1 0 0 0
+c
+d 566 1 0 0 0
+c
+d 568 1 0 0 0
+c
+d 276 3 0 2 0
+c
+d 1195 4 1 0 0
+c
+d 844 4 1 0 0
+c
+d 1087 1 0 0 0
+c
+d 1090 1 0 0 0
+c
+d 280 2 0 1 0
+c
+d 1192 1 0 1 0
+c
+d 294 3 0 2 0
+c
+d 1170 1 0 0 0
+c
+d 1185 1 0 1 0
+c
+d 340 1 0 0 0
+c
+d 343 1 1 0 0
+c
+d 491 1 0 0 0
+c
+d 507 1 0 1 0
+c
+d 510 1 0 0 0
+c
+d 511 1 0 1 0
+c
+d 471 3 0 2 0
+c
+d 369 1 0 0 0
+c
+d 382 1 0 0 0
+c
+d 737 2 0 0 0
+c
+d 1113 1 0 0 0
+c
+d 1119 1 0 0 0
+c
+d 167 1 0 0 0
+c
+d 369 1 0 0 0
+c
+d 1197 4 0 0 0
+c
+d 621 1 0 0 0
+c
+d 622 2 1 0 0
+c
+d 618 1 0 0 0
+c
+d 965 1 0 0 0
+c
+d 843 2 0 0 0
+c
+d 392 2 0 1 0
+c
+d 353 3 0 0 0
+c
+d 101 4 0 2 0
+c
+d 359 1 0 0 0
+c
+d 360 2 1 0 0
+c
+d 340 2 0 0 0
+c
+d 344 1 1 0 0
+c
+d 18 1 0 0 0
+c
+d 30 1 0 0 0
+c
+d 540 3 1 0 0
+c
+d 89 3 0 0 0
+c
+d 127 2 0 0 0
+c
+d 128 1 0 0 0
+c
+d 18 2 1 0 0
+c
+d 800 2 1 0 0
+c
+d 801 1 0 0 0
+c
+d 18 3 1 0 0
+c
+d 882 1 1 0 0
+c
+d 888 2 0 0 0
+c
+d 167 2 0 0 0
+c
+d 1062 2 1 0 0
+c
+d 1064 1 0 0 0
+c
+d 301 3 0 1 0
+c
+d 775 2 0 0 0
+c
+d 836 1 0 0 0
+c
+d 839 1 0 0 0
+c
+d 507 4 0 1 0
+c
+d 46 2 0 0 0
+c
+d 75 1 0 0 0
+c
+d 633 2 0 0 0
+c
+d 559 2 1 0 0
+c
+d 560 1 0 0 0
+c
+d 505 1 0 0 0
+c
+d 511 2 1 0 0
+c
+d 478 1 0 0 0
+c
+d 480 1 0 0 0
+c
+d 485 2 0 0 0
+c
+d 305 3 1 0 0
+c
+d 791 2 0 0 0
+c
+d 793 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 457 1 0 1 0
+c
+d 463 1 0 0 0
+c
+d 340 2 0 0 0
+c
+d 341 1 0 0 0
+c
+d 344 1 0 0 0
+c
+d 30 2 0 1 0
+c
+d 1016 2 0 0 0
+c
+d 437 2 0 0 0
+c
+d 444 1 1 0 0
+c
+d 178 3 0 0 0
+c
+d 205 2 0 0 0
+c
+d 206 1 0 0 0
+c
+d 457 3 0 2 0
+c
+d 1047 1 0 0 0
+c
+d 1048 1 0 0 0
+c
+d 846 2 0 0 0
+c
+d 615 1 0 1 0
+c
+d 616 3 0 1 0
+c
+d 340 4 1 0 0
+c
+d 395 4 1 0 0
+c
+d 888 3 1 0 0
+c
+d 134 2 0 0 0
+c
+d 136 1 0 1 0
+c
+d 608 1 0 0 0
+c
+d 990 2 1 0 0
+c
+d 544 2 0 1 0
+c
+d 1126 1 1 0 0
+c
+d 1129 1 0 0 0
+c
+d 1130 1 0 0 0
+c
+d 270 1 0 0 0
+c
+d 272 1 0 0 0
+c
+d 327 1 0 1 0
+c
+d 328 2 0 1 0
+c
+d 86 2 0 0 0
+c
+d 1293 2 0 0 0
+c
+d 437 2 0 0 0
+c
+d 502 1 0 0 0
+c
+d 261 3 1 0 0
+c
+d 0 1 0 0 0
+c
+d 817 3 0 2 0
+c
+d 32 2 0 0 0
+c
+d 1321 1 1 0 0
+c
+d 341 3 1 0 0
+c
+d 566 1 0 1 0
+c
+d 568 2 0 1 0
+c
+d 340 2 0 0 0
+c
+d 348 2 0 0 0
+c
+d 1270 3 1 0 0
+c
+d 46 1 0 1 0
+c
+d 74 2 0 1 0
+c
+d 458 2 0 0 0
+c
+d 31 3 1 0 0
+c
+d 697 3 0 1 0
+c
+d 471 2 1 0 0
+c
+d 473 1 0 0 0
+c
+d 392 1 1 0 0
+c
+d 393 1 0 0 0
+c
+d 394 1 0 0 0
+c
+d 5 2 1 0 0
+c
+d 18 1 0 0 0
+c
+d 5 2 0 0 0
+c
+d 574 2 1 0 0
+c
+d 1053 1 0 0 0
+c
+d 348 2 0 0 0
+c
+d 616 1 0 0 0
+c
+d 617 1 0 0 0
+c
+d 343 1 0 0 0
+c
+d 491 3 1 0 0
+c
+d 18 1 0 0 0
+c
+d 29 1 0 1 0
+c
+d 30 1 0 1 0
+c
+d 333 1 0 0 0
+c
+d 334 1 0 1 0
+c
+d 340 1 0 1 0
+c
+d 60 2 0 2 0
+c
+d 93 3 0 0 0
+c
+d 301 1 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 597 1 0 0 0
+c
+d 598 1 0 0 0
+c
+d 348 3 1 0 0
+c
+d 509 4 1 0 0
+c
+d 46 2 0 1 0
+c
+d 1314 1 0 0 0
+c
+d 349 1 0 0 0
+c
+d 350 1 0 0 0
+c
+d 678 2 0 0 0
+c
+d 285 1 0 0 0
+c
+d 286 2 1 0 0
+c
+d 153 4 1 0 0
+c
+d 279 1 0 0 0
+c
+d 305 1 0 0 0
+c
+d 859 3 1 0 0
+c
+d 513 2 0 1 0
+c
+d 966 1 0 0 0
+c
+d 967 2 0 0 0
+c
+d 176 1 0 1 0
+c
+d 180 1 1 0 0
+c
+d 419 1 0 0 0
+c
+d 423 1 0 0 0
+c
+d 737 5 1 0 0
+c
+d 504 3 0 0 0
+c
+d 412 4 1 0 0
+c
+d 276 1 0 1 0
+c
+d 301 1 0 1 0
+c
+d 437 1 0 0 0
+c
+d 507 1 0 0 0
+c
+d 823 3 1 0 0
+c
+d 606 2 0 0 0
+c
+d 167 3 0 1 0
+c
+d 152 3 0 2 0
+c
+d 56 2 0 0 0
+c
+d 1309 1 0 0 0
+c
+d 572 4 1 0 0
+c
+d 608 3 1 0 0
+c
+d 157 3 0 2 0
+c
+d 597 2 0 2 0
+c
+d 437 3 0 0 0
+c
+d 394 1 0 0 0
+c
+d 1111 1 0 0 0
+c
+d 513 1 0 0 0
+c
+d 523 2 0 0 0
+c
+d 395 2 0 0 0
+c
+d 1106 1 0 0 0
+c
+d 341 2 0 0 0
+c
+d 343 1 0 0 0
+c
+d 910 2 0 0 0
+c
+d 872 1 0 0 0
+c
+d 873 1 0 0 0
+c
+d 377 1 0 1 0
+c
+d 384 1 0 1 0
+c
+d 1013 2 0 0 0
+c
+d 1019 1 0 0 0
+c
+d 276 3 0 0 0
+c
+d 608 2 0 1 0
+c
+d 990 1 0 1 0
+c
+d 211 1 0 0 0
+c
+d 242 1 0 0 0
+c
+d 377 1 0 0 0
+c
+d 384 1 0 0 0
+c
+d 550 2 0 0 0
+c
+d 348 2 1 0 0
+c
+d 1145 1 0 0 0
+c
+d 1013 2 0 1 0
+c
+d 16 2 0 2 0
+c
+d 965 1 0 0 0
+c
+d 977 1 0 0 0
+c
+d 1013 2 0 0 0
+c
+d 1014 1 0 0 0
+c
+d 602 3 1 0 0
+c
+d 311 1 0 1 0
+c
+d 325 1 0 1 0
+c
+d 326 1 0 0 0
+c
+d 168 1 0 1 0
+c
+d 369 2 0 0 0
+c
+d 61 3 1 0 0
+c
+d 301 2 0 0 0
+c
+d 304 1 0 0 0
+c
+d 43 1 0 0 0
+c
+d 44 2 1 0 0
+c
+d 133 3 0 0 0
+c
+d 2 3 0 1 0
+c
+d 890 4 1 0 0
+c
+d 1188 1 0 1 0
+c
+d 1203 1 0 1 0
+c
+d 1204 1 0 0 0
+c
+d 855 3 1 0 0
+c
+d 1060 2 1 0 0
+c
+d 156 3 0 2 0
+c
+d 861 3 1 0 0
+c
+d 607 1 0 0 0
+c
+d 608 2 0 2 0
+c
+d 1126 3 1 0 0
+c
+d 857 2 0 0 0
+c
+d 18 2 0 0 0
+c
+d 146 1 0 1 0
+c
+d 1097 2 0 1 0
+c
+d 663 2 0 0 0
+c
+d 665 1 0 0 0
+c
+d 621 1 0 0 0
+c
+d 627 1 0 0 0
+c
+d 32 1 0 0 0
+c
+d 75 1 0 0 0
+c
+d 167 1 0 0 0
+c
+d 395 2 1 0 0
+c
+d 382 1 0 1 0
+c
+d 384 2 0 0 0
+c
+d 840 3 1 0 0
+c
+d 858 1 0 1 0
+c
+d 868 1 0 1 0
+c
+d 872 1 0 0 0
+c
+d 178 2 0 0 0
+c
+d 86 2 0 0 0
+c
+d 167 2 0 0 0
+c
+d 811 3 1 0 0
+c
+d 60 3 1 0 0
+c
+d 540 3 1 0 0
+c
+d 437 3 0 0 0
+c
+d 836 2 0 0 0
+c
+d 437 2 1 0 0
+c
+d 438 1 0 0 0
+c
+d 989 1 0 0 0
+c
+d 990 2 0 0 0
+c
+d 854 1 0 0 0
+c
+d 855 2 0 0 0
+c
+d 59 2 0 1 0
+c
+d 60 1 0 0 0
+c
+d 846 1 0 1 0
+c
+d 854 1 0 0 0
+c
+d 238 1 1 0 0
+c
+d 239 1 0 0 0
+c
+d 338 2 0 0 0
+c
+d 46 2 1 0 0
+c
+d 799 1 0 0 0
+c
+d 806 1 0 0 0
+c
+d 811 2 0 0 0
+c
+d 812 1 1 0 0
+c
+d 748 2 0 1 0
+c
+d 894 1 0 1 0
+c
+d 30 2 0 1 0
+c
+d 276 2 0 0 0
+c
+d 277 1 0 0 0
+c
+d 1146 3 0 0 0
+c
+d 592 2 0 0 0
+c
+d 1170 3 1 0 0
+c
+d 510 1 0 1 0
+c
+d 511 1 0 0 0
+c
+d 615 1 0 0 0
+c
+d 616 1 0 0 0
+c
+d 1185 3 0 2 0
+c
+d 353 2 0 0 0
+c
+d 1138 1 1 0 0
+c
+d 437 2 0 1 0
+c
+d 438 1 0 1 0
+c
+d 129 1 0 1 0
+c
+d 525 1 0 1 0
+c
+d 436 3 0 0 0
+c
+d 437 1 0 1 0
+c
+d 456 1 0 1 0
+c
+d 457 1 0 0 0
+c
+d 795 1 0 0 0
+c
+d 815 2 0 0 0
+c
+d 817 1 0 0 0
+c
+d 134 1 0 1 0
+c
+d 138 1 0 1 0
+c
+d 139 2 0 0 0
+c
+d 1073 3 1 0 0
+c
+d 437 2 0 1 0
+c
+d 558 1 0 1 0
+c
+d 21 3 0 1 0
+c
+d 509 1 0 1 0
+c
+d 517 1 0 1 0
+c
+d 288 3 0 1 0
+c
+d 352 1 0 1 0
+c
+d 354 2 0 1 0
+c
+d 400 3 1 0 0
+c
+d 1097 3 0 0 0
+c
+d 18 3 1 0 0
+c
+d 288 2 0 2 0
+c
+d 276 1 0 0 0
+c
+d 301 1 0 0 0
+c
+d 16 3 1 0 0
+c
+d 4 1 0 0 0
+c
+d 5 2 1 0 0
+c
+d 338 1 0 1 0
+c
+d 340 2 0 1 0
+c
+d 1239 4 0 0 0
+c
+d 744 2 0 0 0
+c
+d 745 1 0 0 0
+c
+d 1127 3 0 1 0
+c
+d 737 3 0 0 0
+c
+d 114 2 1 0 0
+c
+d 120 1 0 0 0
+c
+d 754 2 0 0 0
+c
+d 153 2 1 0 0
+c
+d 16 1 0 1 0
+c
+d 93 1 0 1 0
+c
+d 301 1 0 1 0
+c
+d 304 2 0 0 0
+c
+d 310 1 0 1 0
+c
+d 348 3 1 0 0
+c
+d 419 2 0 2 0
+c
+d 559 2 0 0 0
+c
+d 560 1 0 0 0
+c
+d 275 2 0 0 0
+c
+d 75 4 0 1 0
+c
+d 87 2 0 0 0
+c
+d 424 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 978 4 1 0 0
+c
+d 822 3 0 0 0
+c
+d 743 1 0 1 0
+c
+d 744 2 0 1 0
+c
+d 389 1 0 0 0
+c
+d 390 1 0 0 0
+c
+d 437 1 0 1 0
+c
+d 493 2 0 1 0
+c
+d 1165 4 1 0 0
+c
+d 876 2 0 0 0
+c
+d 789 3 1 0 0
+c
+d 146 2 0 0 0
+c
+d 353 2 0 1 0
+c
+d 1138 1 0 1 0
+c
+d 994 1 0 0 0
+c
+d 998 1 0 0 0
+c
+d 499 2 0 2 0
+c
+d 811 2 1 0 0
+c
+d 812 1 0 0 0
+c
+d 300 1 0 0 0
+c
+d 315 2 1 0 0
+c
+d 355 2 0 0 0
+c
+d 906 3 1 0 0
+c
+d 369 1 0 0 0
+c
+d 370 1 0 0 0
+c
+d 371 1 0 0 0
+c
+d 133 1 1 0 0
+c
+d 142 1 0 0 0
+c
+d 1256 1 0 0 0
+c
+d 278 2 0 0 0
+c
+d 650 1 0 0 0
+c
+d 653 1 0 0 0
+c
+d 811 4 0 0 0
+c
+d 305 3 1 0 0
+c
+d 1010 1 0 0 0
+c
+d 1012 1 0 0 0
+c
+d 46 2 0 0 0
+c
+d 592 3 1 0 0
+c
+d 1158 1 0 0 0
+c
+d 1163 1 0 0 0
+c
+d 142 3 1 0 0
+c
+d 769 3 0 2 0
+c
+d 84 3 1 0 0
+c
+d 606 1 0 1 0
+c
+d 635 2 0 1 0
+c
+d 84 4 0 1 0
+c
+d 886 1 0 1 0
+c
+d 887 1 0 0 0
+c
+d 101 3 0 2 0
+c
+d 19 3 0 0 0
+c
+d 1150 4 1 0 0
+c
+d 225 1 0 0 0
+c
+d 226 1 1 0 0
+c
+d 238 2 0 0 0
+c
+d 737 1 0 0 0
+c
+d 740 1 0 0 0
+c
+d 901 2 0 0 0
+c
+d 1047 2 1 0 0
+c
+d 1049 2 0 0 0
+c
+d 647 4 1 0 0
+c
+d 507 4 0 0 0
+c
+d 1249 4 0 0 0
+c
+d 985 1 0 1 0
+c
+d 986 1 0 0 0
+c
+d 987 1 0 0 0
+c
+d 806 4 1 0 0
+c
+d 468 2 0 0 0
+c
+d 799 4 1 0 0
+c
+d 509 3 0 2 0
+c
+d 59 1 0 1 0
+c
+d 1012 2 1 0 0
+c
+d 1032 1 0 0 0
+c
+d 428 2 0 0 0
+c
+d 588 1 1 0 0
+c
+d 277 1 0 1 0
+c
+d 1158 2 0 0 0
+c
+d 856 1 0 1 0
+c
+d 868 1 0 1 0
+c
+d 7 1 0 1 0
+c
+d 1279 1 0 0 0
+c
+d 211 1 0 0 0
+c
+d 215 2 0 0 0
+c
+d 384 3 1 0 0
+c
+d 186 3 0 0 0
+c
+d 187 1 0 0 0
+c
+d 156 4 1 0 0
+c
+d 16 1 1 0 0
+c
+d 93 2 0 0 0
+c
+d 881 3 0 0 0
+c
+d 341 2 0 0 0
+c
+d 157 3 1 0 0
+c
+d 939 3 0 0 0
+c
+d 276 2 0 0 0
+c
+d 369 2 0 1 0
+c
+d 93 2 0 0 0
+c
+d 591 1 0 1 0
+c
+d 597 1 0 1 0
+c
+d 334 1 1 0 0
+c
+d 348 2 0 1 0
+c
+d 275 2 0 0 0
+c
+d 651 2 0 2 0
+c
+d 382 1 0 0 0
+c
+d 388 1 0 0 0
+c
+d 348 1 0 1 0
+c
+d 392 2 0 1 0
+c
+d 234 2 0 0 0
+c
+d 235 2 0 0 0
+c
+d 5 1 0 1 0
+c
+d 7 2 0 1 0
+c
+d 509 2 0 1 0
+c
+d 1070 2 0 0 0
+c
+d 159 4 0 2 0
+c
+d 1022 2 1 0 0
+c
+d 1199 4 1 0 0
+c
+d 888 2 0 0 0
+c
+d 493 2 0 1 0
+c
+d 301 3 0 2 0
+c
+d 364 3 0 0 0
+c
+d 606 2 0 0 0
+c
+d 608 1 0 0 0
+c
+d 75 1 0 1 0
+c
+d 84 2 0 0 0
+c
+d 305 1 0 0 0
+c
+d 353 1 0 1 0
+c
+d 1144 1 0 1 0
+c
+d 1192 3 1 0 0
+c
+d 511 3 0 0 0
+c
+d 591 1 1 0 0
+c
+d 592 2 0 0 0
+c
+d 49 1 0 1 0
+c
+d 58 1 0 1 0
+c
+d 1158 3 0 1 0
+c
+d 591 2 1 0 0
+c
+d 592 1 0 0 0
+c
+d 818 1 1 0 0
+c
+d 904 3 0 0 0
+c
+d 473 4 1 0 0
+c
+d 75 2 0 0 0
+c
+d 278 2 0 0 0
+c
+d 152 4 1 0 0
+c
+d 517 3 0 1 0
+c
+d 565 1 0 0 0
+c
+d 789 1 0 0 0
+c
+d 368 2 0 0 0
+c
+d 133 1 0 0 0
+c
+d 134 1 0 0 0
+c
+d 137 1 0 0 0
+c
+d 507 1 0 0 0
+c
+d 1070 1 0 0 0
+c
+d 907 4 1 0 0
+c
+d 1202 2 0 0 0
+c
+d 690 1 0 1 0
+c
+d 708 1 0 0 0
+c
+d 709 1 0 1 0
+c
+d 276 2 0 2 0
+c
+d 290 1 0 0 0
+c
+d 278 4 1 0 0
+c
+d 1004 4 1 0 0
+c
+d 507 1 0 0 0
+c
+d 508 2 1 0 0
+c
+d 18 3 1 0 0
+c
+d 100 2 0 0 0
+c
+d 39 1 0 0 0
+c
+d 40 1 0 1 0
+c
+d 21 2 0 0 0
+c
+d 1315 2 0 0 0
+c
+d 1317 1 0 0 0
+c
+d 507 4 0 0 0
+c
+d 364 4 1 0 0
+c
+d 21 4 1 0 0
+c
+d 591 1 0 0 0
+c
+d 592 1 0 0 0
+c
+d 989 2 1 0 0
+c
+d 995 1 0 0 0
+c
+d 1176 2 0 0 0
+c
+d 1092 3 1 0 0
+c
+d 789 3 1 0 0
+c
+d 101 2 0 1 0
+c
+d 597 1 0 1 0
+c
+d 157 2 0 0 0
+c
+d 75 1 0 1 0
+c
+d 86 2 0 0 0
+c
+d 811 2 1 0 0
+c
+d 812 1 0 0 0
+c
+d 551 1 0 1 0
+c
+d 564 1 0 1 0
+c
+d 937 1 0 0 0
+c
+d 1009 2 0 0 0
+c
+d 18 1 0 1 0
+c
+d 30 2 0 1 0
+c
+d 595 3 1 0 0
+c
+d 276 3 1 0 0
+c
+d 30 1 0 1 0
+c
+d 32 2 0 1 0
+c
+d 591 1 0 0 0
+c
+d 592 1 0 0 0
+c
+d 690 3 0 1 0
+c
+d 753 2 0 0 0
+c
+d 869 4 1 0 0
+c
+d 169 3 0 0 0
+c
+d 287 4 1 0 0
+c
+d 259 2 0 0 0
+c
+d 148 1 0 0 0
+c
+d 259 1 0 0 0
+c
+d 610 1 0 0 0
+c
+d 1004 1 0 0 0
+c
+d 861 1 0 1 0
+c
+d 862 2 1 0 0
+c
+d 865 1 0 0 0
+c
+d 511 2 0 0 0
+c
+d 919 1 0 0 0
+c
+d 921 2 0 0 0
+c
+d 621 2 1 0 0
+c
+d 7 5 1 0 0
+c
+d 507 2 0 0 0
+c
+d 508 1 0 1 0
+c
+d 43 1 0 1 0
+c
+d 1125 1 0 0 0
+c
+d 1128 3 0 0 0
+c
+d 75 3 1 0 0
+c
+d 52 1 1 0 0
+c
+d 53 2 0 0 0
+c
+d 286 5 1 0 0
+c
+d 1097 4 1 0 0
+c
+d 120 1 0 1 0
+c
+d 127 1 0 1 0
+c
+d 278 1 0 1 0
+c
+d 1163 1 0 1 0
+c
+d 1211 1 0 0 0
+c
+d 690 2 0 1 0
+c
+d 691 2 0 0 0
+c
+d 311 2 0 0 0
+c
+d 591 1 0 0 0
+c
+d 595 1 0 0 0
+c
+d 989 2 0 0 0
+c
+d 133 1 0 0 0
+c
+d 134 1 0 0 0
+c
+d 888 2 0 0 0
+c
+d 218 1 0 0 0
+c
+d 220 1 0 0 0
+c
+d 1145 4 0 0 0
+c
+d 537 1 0 0 0
+c
+d 538 1 0 0 0
+c
+d 277 1 0 0 0
+c
+d 1157 1 0 1 0
+c
+d 1158 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 575 1 1 0 0
+c
+d 1043 1 0 1 0
+c
+d 169 3 0 0 0
+c
+d 146 4 1 0 0
+c
+d 592 3 1 0 0
+c
+d 1003 2 0 0 0
+c
+d 854 2 0 2 0
+c
+d 855 1 0 0 0
+c
+d 882 1 0 1 0
+c
+d 888 2 0 1 0
+c
+d 133 1 0 1 0
+c
+d 134 1 0 1 0
+c
+d 807 1 0 0 0
+c
+d 839 2 1 0 0
+c
+d 286 2 0 1 0
+c
+d 1221 1 0 1 0
+c
+d 34 2 1 0 0
+c
+d 650 2 0 0 0
+c
+d 169 2 0 0 0
+c
+d 377 1 0 0 0
+c
+d 44 2 0 0 0
+c
+d 163 1 0 0 0
+c
+d 1249 1 0 1 0
+c
+d 75 2 0 1 0
+c
+d 743 3 0 2 0
+c
+d 129 2 0 1 0
+c
+d 525 1 0 1 0
+c
+d 60 3 1 0 0
+c
+d 52 2 1 0 0
+c
+d 775 1 0 1 0
+c
+d 883 1 0 0 0
+c
+d 691 4 0 0 0
+c
+d 146 3 0 2 0
+c
+d 157 1 0 0 0
+c
+d 162 1 0 0 0
+c
+d 614 3 1 0 0
+c
+d 343 2 0 0 0
+c
+d 44 4 0 0 0
+c
+d 1023 1 1 0 0
+c
+d 1024 2 0 0 0
+c
+d 55 1 0 1 0
+c
+d 691 2 0 1 0
+c
+d 1134 3 0 2 0
+c
+d 146 2 0 0 0
+c
+d 145 1 0 0 0
+c
+d 146 1 0 0 0
+c
+d 789 2 0 0 0
+c
+d 393 1 0 0 0
+c
+d 395 1 0 0 0
+c
+d 396 1 0 0 0
+c
+d 99 3 0 0 0
+c
+d 738 3 1 0 0
+c
+d 990 2 0 0 0
+c
+d 992 1 1 0 0
+c
+d 815 2 0 0 0
+c
+d 817 1 0 0 0
+c
+d 146 2 0 0 0
+c
+d 888 2 1 0 0
+c
+d 890 1 0 0 0
+c
+d 1168 1 0 0 0
+c
+d 1176 2 0 2 0
+c
+d 854 1 0 0 0
+c
+d 855 1 0 0 0
+c
+d 46 4 0 0 0
+c
+d 46 1 0 0 0
+c
+d 47 1 1 0 0
+c
+d 775 1 0 0 0
+c
+d 610 2 0 0 0
+c
+d 384 2 0 0 0
+c
+d 387 1 0 0 0
+c
+d 311 2 0 0 0
+c
+d 315 1 0 1 0
+c
+d 75 4 1 0 0
+c
+d 52 3 0 1 0
+c
+d 525 2 1 0 0
+c
+d 52 1 0 0 0
+c
+d 53 1 0 0 0
+c
+d 54 1 0 0 0
+c
+d 89 1 1 0 0
+c
+d 532 1 0 0 0
+c
+d 246 3 1 0 0
+c
+d 1090 1 0 0 0
+c
+d 1092 1 0 0 0
+c
+d 99 4 1 0 0
+c
+d 153 2 0 1 0
+c
+d 155 1 0 1 0
+c
+d 5 2 1 0 0
+c
+d 10 1 0 0 0
+c
+d 211 1 0 0 0
+c
+d 216 2 0 0 0
+c
+d 340 3 1 0 0
+c
+d 348 3 1 0 0
+c
+d 602 3 0 2 0
+c
+d 550 3 0 0 0
+c
+d 348 3 0 0 0
+c
+d 225 1 0 1 0
+c
+d 238 1 0 1 0
+c
+d 437 2 0 0 0
+c
+d 445 1 0 0 0
+c
+d 806 4 0 0 0
+c
+d 12 1 1 0 0
+c
+d 90 1 0 0 0
+c
+d 807 1 0 0 0
+c
+d 907 1 0 0 0
+c
+d 272 1 0 0 0
+c
+d 287 1 0 0 0
+c
+d 965 1 0 0 0
+c
+d 966 1 0 0 0
+c
+d 989 2 0 0 0
+c
+d 995 1 1 0 0
+c
+d 540 1 0 1 0
+c
+d 541 1 0 1 0
+c
+d 424 4 0 0 0
+c
+d 146 2 1 0 0
+c
+d 273 3 0 1 0
+c
+d 990 4 0 0 0
+c
+d 208 2 0 2 0
+c
+d 1170 3 0 2 0
+c
+d 789 1 0 0 0
+c
+d 882 1 0 0 0
+c
+d 1303 2 1 0 0
+c
+d 168 1 0 1 0
+c
+d 169 2 0 1 0
+c
+d 28 1 1 0 0
+c
+d 29 1 0 0 0
+c
+d 1221 4 0 1 0
+c
+d 510 1 0 0 0
+c
+d 520 2 1 0 0
+c
+d 890 4 1 0 0
+c
+d 100 1 0 0 0
+c
+d 990 1 1 0 0
+c
+d 1001 1 0 0 0
+c
+d 179 1 0 0 0
+c
+d 182 1 1 0 0
+c
+d 323 2 0 0 0
+c
+d 213 1 0 1 0
+c
+d 242 2 0 1 0
+c
+d 49 2 1 0 0
+c
+d 749 2 0 0 0
+c
+d 598 1 0 0 0
+c
+d 606 2 1 0 0
+c
+d 1071 3 0 0 0
+c
+d 52 4 1 0 0
+c
+d 52 1 0 0 0
+c
+d 53 2 0 0 0
+c
+d 19 1 0 0 0
+c
+d 20 1 0 0 0
+c
+d 529 3 0 0 0
+c
+d 437 3 0 0 0
+c
+d 242 3 0 2 0
+c
+d 734 1 0 0 0
+c
+d 737 1 0 0 0
+c
+d 888 3 0 2 0
+c
+d 799 1 0 1 0
+c
+d 806 1 0 0 0
+c
+d 840 1 0 1 0
+c
+d 35 1 1 0 0
+c
+d 37 1 0 0 0
+c
+d 320 3 1 0 0
+c
+d 557 1 0 0 0
+c
+d 565 1 0 0 0
+c
+d 288 3 0 0 0
+c
+d 789 2 1 0 0
+c
+d 829 1 0 0 0
+c
+d 146 2 0 0 0
+c
+d 276 4 1 0 0
+c
+d 746 3 0 0 0
+c
+d 199 2 0 0 0
+c
+d 887 1 0 0 0
+c
+d 888 1 0 0 0
+c
+d 1269 3 1 0 0
+c
+d 888 2 0 0 0
+c
+d 75 4 1 0 0
+c
+d 52 1 0 1 0
+c
+d 54 1 0 0 0
+c
+d 146 3 1 0 0
+c
+d 152 2 0 1 0
+c
+d 1254 1 0 1 0
+c
+d 146 1 0 0 0
+c
+d 234 1 0 0 0
+c
+d 286 3 0 0 0
+c
+d 1292 4 1 0 0
+c
+d 288 4 0 0 0
+c
+d 302 1 0 0 0
+c
+d 1157 1 0 0 0
+c
+d 1159 1 0 0 0
+c
+d 1279 3 0 0 0
+c
+d 74 1 0 0 0
+c
+d 1298 1 0 1 0
+c
+d 1299 1 0 0 0
+c
+d 1096 2 1 0 0
+c
+d 1100 1 0 0 0
+c
+d 507 1 0 0 0
+c
+d 1070 1 0 0 0
+c
+d 169 1 0 0 0
+c
+d 377 1 0 0 0
+c
+d 423 1 0 1 0
+c
+d 429 2 0 1 0
+c
+d 55 1 0 1 0
+c
+d 694 2 0 1 0
+c
+d 145 1 0 0 0
+c
+d 146 1 1 0 0
+c
+d 1274 3 1 0 0
+c
+d 215 1 0 0 0
+c
+d 221 2 0 0 0
+c
+d 1013 1 1 0 0
+c
+d 1017 1 0 0 0
+c
+d 1019 1 0 0 0
+c
+d 176 3 0 0 0
+c
+d 177 1 0 0 0
+c
+d 145 2 0 1 0
+c
+d 146 1 0 0 0
+c
+d 1303 2 0 0 0
+c
+d 1237 1 1 0 0
+c
+d 1239 1 0 0 0
+c
+d 1240 1 0 0 0
+c
+d 763 1 0 0 0
+c
+d 942 1 0 0 0
+c
+d 415 2 0 1 0
+c
+d 416 1 0 0 0
+c
+d 753 3 1 0 0
+c
+d 437 1 0 0 0
+c
+d 457 2 1 0 0
+c
+d 888 4 0 0 0
+c
+d 532 2 1 0 0
+c
+d 534 1 0 0 0
+c
+d 55 2 0 0 0
+c
+d 26 2 0 1 0
+c
+d 39 1 0 1 0
+c
+d 274 3 0 0 0
+c
+d 286 1 0 1 0
+c
+d 1223 1 0 0 0
+c
+d 856 4 0 1 0
+c
+d 157 2 0 0 0
+c
+d 146 2 0 1 0
+c
+d 737 3 1 0 0
+c
+d 46 2 0 2 0
+c
+d 73 1 0 0 0
+c
+d 734 3 0 2 0
+c
+d 46 1 0 1 0
+c
+d 211 2 0 0 0
+c
+d 217 1 0 0 0
+c
+d 241 1 0 0 0
+c
+d 1237 2 0 0 0
+c
+d 1239 1 1 0 0
+c
+d 300 1 0 0 0
+c
+d 315 1 0 0 0
+c
+d 789 1 0 0 0
+c
+d 829 2 0 0 0
+c
+d 315 1 0 1 0
+c
+d 318 1 0 1 0
+c
+d 436 1 1 0 0
+c
+d 437 2 0 0 0
+c
+d 1126 2 0 2 0
+c
+d 414 2 0 0 0
+c
+d 43 3 0 0 0
+c
+d 287 3 1 0 0
+c
+d 50 1 0 0 0
+c
+d 734 1 0 1 0
+c
+d 55 1 0 0 0
+c
+d 690 1 0 0 0
+c
+d 691 1 0 0 0
+c
+d 419 4 1 0 0
+c
+d 584 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 75 3 1 0 0
+c
+d 734 1 0 0 0
+c
+d 737 2 0 2 0
+c
+d 46 3 1 0 0
+c
+d 21 4 0 0 0
+c
+d 599 3 0 1 0
+c
+d 217 1 1 0 0
+c
+d 220 2 0 0 0
+c
+d 854 1 1 0 0
+c
+d 855 2 0 0 0
+c
+d 437 2 0 0 0
+c
+d 775 2 0 1 0
+c
+d 343 3 0 0 0
+c
+d 787 1 0 1 0
+c
+d 803 3 1 0 0
+c
+d 46 2 1 0 0
+c
+d 75 1 0 0 0
+c
+d 388 3 0 0 0
+c
+d 878 1 0 1 0
+c
+d 879 3 1 0 0
+c
+d 833 3 0 1 0
+c
+d 369 1 0 0 0
+c
+d 382 1 0 0 0
+c
+d 391 1 0 0 0
+c
+d 753 1 0 0 0
+c
+d 755 1 0 1 0
+c
+d 1221 1 0 0 0
+c
+d 1222 1 0 0 0
+c
+d 355 1 0 0 0
+c
+d 358 1 0 1 0
+c
+d 146 2 0 1 0
+c
+d 233 1 0 1 0
+c
+d 694 2 0 0 0
+c
+d 93 3 1 0 0
+c
+d 69 3 0 0 0
+c
+d 185 1 0 0 0
+c
+d 196 1 0 0 0
+c
+d 43 3 0 1 0
+c
+d 1 3 1 0 0
+c
+d 341 2 0 0 0
+c
+d 353 3 0 0 0
+c
+d 275 2 1 0 0
+c
+d 1230 1 0 0 0
+c
+d 1194 2 1 0 0
+c
+d 691 3 1 0 0
+c
+d 692 1 0 0 0
+c
+d 52 2 1 0 0
+c
+d 719 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 437 1 0 1 0
+c
+d 458 1 0 1 0
+c
+d 886 1 0 0 0
+c
+d 887 1 0 0 0
+c
+d 858 3 0 0 0
+c
+d 800 1 0 1 0
+c
+d 801 2 0 1 0
+c
+d 411 2 0 1 0
+c
+d 412 1 0 0 0
+c
+d 694 3 1 0 0
+c
+d 582 1 0 0 0
+c
+d 584 1 0 0 0
+c
+d 586 1 1 0 0
+c
+d 87 3 0 0 0
+c
+d 455 2 0 0 0
+c
+d 437 2 0 2 0
+c
+d 565 2 1 0 0
+c
+d 568 1 0 0 0
+c
+d 426 2 0 2 0
+c
+d 32 3 1 0 0
+c
+d 791 1 0 0 0
+c
+d 826 2 0 0 0
+c
+d 21 1 0 1 0
+c
+d 39 2 0 1 0
+c
+d 547 4 0 0 0
+c
+d 66 4 0 0 0
+c
+d 282 1 0 0 0
+c
+d 287 2 0 2 0
+c
+d 695 1 1 0 0
+c
+d 697 1 0 0 0
+c
+d 954 1 0 0 0
+c
+d 66 2 0 2 0
+c
+d 355 2 0 1 0
+c
+d 356 1 0 0 0
+c
+d 10 1 0 0 0
+c
+d 1269 1 0 0 0
+c
+d 328 1 0 0 0
+c
+d 353 2 1 0 0
+c
+d 799 4 0 1 0
+c
+d 540 2 0 0 0
+c
+d 541 1 0 0 0
+c
+d 146 4 1 0 0
+c
+d 543 2 0 0 0
+c
+d 50 2 0 0 0
+c
+d 52 1 0 0 0
+c
+d 719 1 0 0 0
+c
+d 694 3 1 0 0
+c
+d 507 3 1 0 0
+c
+d 264 1 0 1 0
+c
+d 286 1 0 1 0
+c
+d 353 2 0 0 0
+c
+d 355 1 1 0 0
+c
+d 582 1 0 0 0
+c
+d 584 1 0 1 0
+c
+d 32 4 1 0 0
+c
+d 301 2 0 0 0
+c
+d 55 2 1 0 0
+c
+d 694 1 0 0 0
+c
+d 46 1 0 0 0
+c
+d 75 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 568 1 0 0 0
+c
+d 738 2 0 1 0
+c
+d 854 1 0 1 0
+c
+d 114 1 0 0 0
+c
+d 120 1 0 0 0
+c
+d 694 3 1 0 0
+c
+d 581 4 0 1 0
+c
+d 208 2 1 0 0
+c
+d 581 2 0 0 0
+c
+d 1231 2 0 0 0
+c
+d 411 3 0 1 0
+c
+d 1048 4 0 0 0
+c
+d 595 2 0 0 0
+c
+d 856 3 0 0 0
+c
+d 1095 4 0 1 0
+c
+d 787 2 1 0 0
+c
+d 882 1 0 0 0
+c
+d 156 2 0 1 0
+c
+d 406 1 0 1 0
+c
+d 305 1 0 0 0
+c
+d 353 2 1 0 0
+c
+d 534 3 0 0 0
+c
+d 411 3 0 1 0
+c
+d 213 1 0 0 0
+c
+d 242 2 0 0 0
+c
+d 1127 2 0 0 0
+c
+d 315 1 0 0 0
+c
+d 317 1 0 0 0
+c
+d 318 1 0 0 0
+c
+d 775 2 0 0 0
+c
+d 778 2 0 0 0
+c
+d 890 2 0 0 0
+c
+d 797 3 1 0 0
+c
+d 437 3 0 0 0
+c
+d 54 1 0 0 0
+c
+d 55 1 0 1 0
+c
+d 288 1 0 0 0
+c
+d 1221 1 0 0 0
+c
+d 697 3 1 0 0
+c
+d 89 2 0 0 0
+c
+d 552 1 0 0 0
+c
+d 458 2 0 1 0
+c
+d 348 3 0 0 0
+c
+d 437 2 0 1 0
+c
+d 591 1 1 0 0
+c
+d 592 2 0 0 0
+c
+d 775 2 0 1 0
+c
+d 776 1 0 0 0
+c
+d 1153 2 0 2 0
+c
+d 470 1 0 0 0
+c
+d 477 1 0 0 0
+c
+d 1171 1 0 0 0
+c
+d 1172 1 0 0 0
+c
+d 1142 3 1 0 0
+c
+d 46 1 0 0 0
+c
+d 47 2 0 0 0
+c
+d 59 1 0 0 0
+c
+d 340 3 0 2 0
+c
+d 157 2 0 0 0
+c
+d 355 1 1 0 0
+c
+d 157 1 0 0 0
+c
+d 353 1 1 0 0
+c
+d 355 1 0 0 0
+c
+d 694 4 0 0 0
+c
+d 159 2 0 2 0
+c
+d 161 1 0 0 0
+c
+d 32 2 0 0 0
+c
+d 75 1 0 0 0
+c
+d 475 1 0 0 0
+c
+d 476 1 0 0 0
+c
+d 54 1 0 0 0
+c
+d 55 1 1 0 0
+c
+d 66 1 0 0 0
+c
+d 157 4 0 0 0
+c
+d 694 3 1 0 0
+c
+d 55 1 0 0 0
+c
+d 66 2 0 2 0
+c
+d 457 2 1 0 0
+c
+d 466 1 0 0 0
+c
+d 358 1 0 0 0
+c
+d 362 2 0 0 0
+c
+d 52 4 1 0 0
+c
+d 791 2 0 2 0
+c
+d 753 2 0 2 0
+c
+d 663 3 1 0 0
+c
+d 46 4 1 0 0
+c
+d 301 3 1 0 0
+c
+d 427 3 1 0 0
+c
+d 724 1 0 0 0
+c
+d 734 2 0 0 0
+c
+d 272 1 0 0 0
+c
+d 273 1 1 0 0
+c
+d 437 2 0 0 0
+c
+d 288 2 0 1 0
+c
+d 965 2 0 2 0
+c
+d 982 1 0 0 0
+c
+d 457 4 0 2 0
+c
+d 693 1 0 1 0
+c
+d 695 2 0 1 0
+c
+d 69 4 0 2 0
+c
+d 529 2 0 0 0
+c
+d 734 4 0 1 0
+c
+d 694 3 1 0 0
+c
+d 213 1 0 1 0
+c
+d 242 1 0 1 0
+c
+d 1174 2 0 0 0
+c
+d 1173 1 1 0 0
+c
+d 1174 2 0 0 0
+c
+d 286 1 0 0 0
+c
+d 291 1 0 0 0
+c
+d 694 2 0 0 0
+c
+d 696 1 0 0 0
+c
+d 163 2 1 0 0
+c
+d 1249 1 0 0 0
+c
+d 694 1 1 0 0
+c
+d 695 2 0 0 0
+c
+d 470 1 0 0 0
+c
+d 477 1 0 0 0
+c
+d 694 3 1 0 0
+c
+d 305 3 1 0 0
+c
+d 152 3 0 0 0
+c
+d 52 2 0 0 0
+c
+d 18 2 0 1 0
+c
+d 77 1 0 1 0
+c
+d 789 1 0 1 0
+c
+d 833 1 0 1 0
+c
+d 196 2 0 0 0
+c
+d 197 1 0 0 0
+c
+d 966 1 0 0 0
+c
+d 978 1 1 0 0
+c
+d 156 2 0 2 0
+c
+d 294 4 0 1 0
+c
+d 578 1 0 0 0
+c
+d 955 1 1 0 0
+c
+d 956 1 0 0 0
+c
+d 50 3 0 0 0
+c
+d 272 1 0 1 0
+c
+d 282 1 0 1 0
+c
+d 305 4 1 0 0
+c
+d 799 1 0 0 0
+c
+d 842 2 0 0 0
+c
+d 695 2 0 0 0
+c
+d 156 4 1 0 0
+c
+d 101 1 0 1 0
+c
+d 424 2 0 1 0
+c
+d 1289 1 0 1 0
+c
+d 1290 1 0 0 0
+c
+d 319 1 0 0 0
+c
+d 320 1 0 0 0
+c
+d 50 1 0 0 0
+c
+d 51 1 0 0 0
+c
+d 427 4 0 0 0
+c
+d 615 3 1 0 0
+c
+d 169 1 0 0 0
+c
+d 377 1 0 0 0
+c
+d 437 2 0 1 0
+c
+d 470 1 0 1 0
+c
+d 622 1 0 0 0
+c
+d 1007 1 0 0 0
+c
+d 1008 1 0 0 0
+c
+d 55 1 1 0 0
+c
+d 66 2 0 0 0
+c
+d 26 2 0 0 0
+c
+d 578 4 1 0 0
+c
+d 359 1 0 0 0
+c
+d 360 2 1 0 0
+c
+d 286 3 1 0 0
+c
+d 301 1 0 0 0
+c
+d 1156 2 1 0 0
+c
+d 287 1 0 0 0
+c
+d 289 2 1 0 0
+c
+d 424 1 0 0 0
+c
+d 425 1 1 0 0
+c
+d 1150 3 0 1 0
+c
+d 580 1 0 0 0
+c
+d 581 2 0 2 0
+c
+d 697 2 0 1 0
+c
+d 1127 1 0 0 0
+c
+d 1131 1 0 0 0
+c
+d 301 2 0 0 0
+c
+d 1241 4 0 0 0
+c
+d 989 2 0 0 0
+c
+d 990 1 1 0 0
+c
+d 355 3 1 0 0
+c
+d 584 4 1 0 0
+c
+d 305 1 0 0 0
+c
+d 1150 2 0 2 0
+c
+d 51 1 0 0 0
+c
+d 52 1 0 0 0
+c
+d 564 1 0 0 0
+c
+d 565 1 0 0 0
+c
+d 532 4 0 0 0
+c
+d 856 1 0 1 0
+c
+d 874 1 0 0 0
+c
+d 478 1 0 0 0
+c
+d 480 1 0 0 0
+c
+d 1142 3 1 0 0
+c
+d 522 3 1 0 0
+c
+d 353 2 0 0 0
+c
+d 341 3 0 1 0
+c
+d 44 3 1 0 0
+c
+d 1185 3 0 0 0
+c
+d 437 1 0 1 0
+c
+d 470 2 0 0 0
+c
+d 75 1 0 1 0
+c
+d 86 1 0 1 0
+c
+d 156 2 0 0 0
+c
+d 886 2 0 0 0
+c
+d 724 4 0 0 0
+c
+d 595 4 1 0 0
+c
+d 437 2 0 1 0
+c
+d 481 1 0 0 0
+c
+d 484 1 0 0 0
+c
+d 89 3 0 0 0
+c
+d 298 1 0 1 0
+c
+d 318 2 0 0 0
+c
+d 406 1 0 0 0
+c
+d 411 1 0 0 0
+c
+d 554 4 0 2 0
+c
+d 691 1 0 0 0
+c
+d 693 2 0 0 0
+c
+d 294 3 1 0 0
+c
+d 467 4 1 0 0
+c
+d 734 2 0 1 0
+c
+d 507 1 0 1 0
+c
+d 508 1 0 0 0
+c
+d 514 1 0 1 0
+c
+d 578 4 1 0 0
+c
+d 156 2 0 0 0
+c
+d 406 1 1 0 0
+c
+d 427 2 0 0 0
+c
+d 428 1 1 0 0
+c
+d 755 3 0 0 0
+c
+d 358 1 0 1 0
+c
+d 362 1 0 1 0
+c
+d 46 2 0 0 0
+c
+d 75 1 0 0 0
+c
+d 582 2 0 1 0
+c
+d 583 1 0 0 0
+c
+d 582 1 0 0 0
+c
+d 583 1 0 1 0
+c
+d 633 3 1 0 0
+c
+d 424 1 0 0 0
+c
+d 425 2 1 0 0
+c
+d 355 1 0 0 0
+c
+d 356 2 0 1 0
+c
+d 578 2 0 0 0
+c
+d 606 2 0 0 0
+c
+d 608 1 0 0 0
+c
+d 751 1 0 1 0
+c
+d 752 1 0 1 0
+c
+d 761 1 0 0 0
+c
+d 353 1 1 0 0
+c
+d 355 2 0 0 0
+c
+d 578 1 0 0 0
+c
+d 580 2 0 0 0
+c
+d 580 3 0 1 0
+c
+d 55 2 1 0 0
+c
+d 694 1 0 0 0
+c
+d 436 4 0 2 0
+c
+d 695 1 1 0 0
+c
+d 951 1 0 0 0
+c
+d 954 1 0 0 0
+c
+d 751 2 0 1 0
+c
+d 44 2 1 0 0
+c
+d 478 1 0 0 0
+c
+d 481 2 1 0 0
+c
+d 341 2 0 0 0
+c
+d 278 1 0 0 0
+c
+d 1163 1 0 0 0
+c
+d 55 1 0 0 0
+c
+d 694 1 0 0 0
+c
+d 786 1 1 0 0
+c
+d 787 1 0 0 0
+c
+d 883 1 0 0 0
+c
+d 341 1 0 1 0
+c
+d 423 1 0 0 0
+c
+d 457 1 1 0 0
+c
+d 458 2 0 0 0
+c
+d 532 2 0 0 0
+c
+d 734 2 1 0 0
+c
+d 769 1 0 0 0
+c
+d 477 1 0 0 0
+c
+d 486 1 0 0 0
+c
+d 47 1 0 0 0
+c
+d 49 1 0 0 0
+c
+d 59 1 1 0 0
+c
+d 470 2 0 0 0
+c
+d 52 1 0 0 0
+c
+d 54 2 0 0 0
+c
+d 46 4 1 0 0
+c
+d 55 2 0 0 0
+c
+d 437 1 0 1 0
+c
+d 470 2 0 1 0
+c
+d 50 3 0 1 0
+c
+d 1203 1 0 0 0
+c
+d 1207 2 1 0 0
+c
+d 584 3 0 0 0
+c
+d 585 2 0 0 0
+c
+d 437 2 1 0 0
+c
+d 470 1 0 0 0
+c
+d 130 2 0 0 0
+c
+d 1259 1 0 0 0
+c
+d 686 3 1 0 0
+c
+d 288 1 0 0 0
+c
+d 1221 1 0 0 0
+c
+d 1222 1 1 0 0
+c
+d 120 4 1 0 0
+c
+d 1170 2 1 0 0
+c
+d 1185 1 0 0 0
+c
+d 427 1 0 0 0
+c
+d 428 1 0 0 0
+c
+d 55 3 1 0 0
+c
+d 159 1 0 0 0
+c
+d 183 1 0 0 0
+c
+d 734 4 0 0 0
+c
+d 50 3 0 1 0
+c
+d 606 4 0 1 0
+c
+d 1141 2 0 0 0
+c
+d 21 3 0 0 0
+c
+d 457 3 0 0 0
+c
+d 50 2 0 0 0
+c
+d 406 1 0 0 0
+c
+d 411 2 1 0 0
+c
+d 52 3 1 0 0
+c
+d 749 1 0 1 0
+c
+d 751 1 0 0 0
+c
+d 356 3 1 0 0
+c
+d 156 1 0 0 0
+c
+d 406 1 0 0 0
+c
+d 353 1 0 0 0
+c
+d 357 1 0 0 0
+c
+d 427 1 0 0 0
+c
+d 428 1 0 0 0
+c
+d 585 1 0 0 0
+c
+d 583 3 0 0 0
+c
+d 157 3 1 0 0
+c
+d 66 2 0 2 0
+c
+d 242 1 0 0 0
+c
+d 262 1 0 1 0
+c
+d 767 1 1 0 0
+c
+d 890 2 0 0 0
+c
+d 1150 3 0 2 0
+c
+d 580 1 0 0 0
+c
+d 581 1 0 0 0
+c
+d 287 1 0 1 0
+c
+d 288 1 0 0 0
+c
+d 47 1 0 1 0
+c
+d 58 1 0 1 0
+c
+d 580 1 0 1 0
+c
+d 581 2 0 0 0
+c
+d 157 1 0 1 0
+c
+d 305 1 0 1 0
+c
+d 1143 1 0 0 0
+c
+d 769 1 0 1 0
+c
+d 770 2 0 0 0
+c
+d 691 2 0 0 0
+c
+d 575 1 0 0 0
+c
+d 796 1 0 0 0
+c
+d 424 1 0 1 0
+c
+d 426 1 0 1 0
+c
+d 591 1 0 0 0
+c
+d 477 1 0 0 0
+c
+d 478 1 0 0 0
+c
+d 486 1 0 0 0
+c
+d 599 2 0 0 0
+c
+d 424 2 0 1 0
+c
+d 425 1 0 0 0
+c
+d 873 2 0 1 0
+c
+d 874 1 0 1 0
+c
+d 437 1 0 0 0
+c
+d 507 1 0 0 0
+c
+d 436 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 591 2 0 0 0
+c
+d 592 1 0 0 0
+c
+d 7 2 0 0 0
+c
+d 8 1 0 1 0
+c
+d 835 4 1 0 0
+c
+d 428 2 0 0 0
+c
+d 436 1 0 0 0
+c
+d 606 1 0 1 0
+c
+d 635 2 0 1 0
+c
+d 427 2 0 1 0
+c
+d 1078 1 0 1 0
+c
+d 982 1 0 0 0
+c
+d 983 1 0 0 0
+c
+d 525 3 0 2 0
+c
+d 75 2 1 0 0
+c
+d 276 3 1 0 0
+c
+d 604 1 0 0 0
+c
+d 635 1 0 0 0
+c
+d 640 2 0 0 0
+c
+d 424 1 1 0 0
+c
+d 425 2 0 0 0
+c
+d 46 1 0 0 0
+c
+d 47 2 0 0 0
+c
+d 49 4 1 0 0
+c
+d 40 1 0 0 0
+c
+d 41 1 1 0 0
+c
+d 305 3 1 0 0
+c
+d 181 1 0 0 0
+c
+d 195 1 0 0 0
+c
+d 1195 2 0 0 0
+c
+d 353 3 0 2 0
+c
+d 437 1 1 0 0
+c
+d 457 2 0 0 0
+c
+d 299 1 1 0 0
+c
+d 315 2 0 0 0
+c
+d 318 1 0 0 0
+c
+d 1074 3 1 0 0
+c
+d 89 2 0 1 0
+c
+d 548 1 0 1 0
+c
+d 50 1 0 0 0
+c
+d 724 2 1 0 0
+c
+d 270 1 0 0 0
+c
+d 272 2 1 0 0
+c
+d 737 2 0 1 0
+c
+d 1012 1 0 0 0
+c
+d 1030 2 0 0 0
+c
+d 724 4 0 0 0
+c
+d 353 1 0 1 0
+c
+d 357 1 0 1 0
+c
+d 157 1 0 0 0
+c
+d 1141 2 0 0 0
+c
+d 46 1 0 0 0
+c
+d 75 1 0 1 0
+c
+d 1142 3 1 0 0
+c
+d 694 2 0 0 0
+c
+d 626 3 0 1 0
+c
+d 851 2 0 0 0
+c
+d 50 1 0 0 0
+c
+d 51 1 1 0 0
+c
+d 52 1 0 0 0
+c
+d 424 3 0 0 0
+c
+d 280 1 0 0 0
+c
+d 1172 1 0 0 0
+c
+d 1192 1 1 0 0
+c
+d 355 2 1 0 0
+c
+d 358 1 0 0 0
+c
+d 51 1 0 1 0
+c
+d 52 2 0 1 0
+c
+d 749 3 0 0 0
+c
+d 46 1 0 0 0
+c
+d 75 1 0 0 0
+c
+d 163 2 1 0 0
+c
+d 286 1 0 0 0
+c
+d 288 1 0 0 0
+c
+d 291 1 1 0 0
+c
+d 470 1 0 1 0
+c
+d 478 1 0 1 0
+c
+d 592 3 1 0 0
+c
+d 46 3 0 0 0
+c
+d 181 1 0 0 0
+c
+d 195 1 1 0 0
+c
+d 203 1 0 0 0
+c
+d 44 1 0 0 0
+c
+d 46 1 0 0 0
+c
+d 114 2 0 1 0
+c
+d 1156 3 1 0 0
+c
+d 1153 2 0 0 0
+c
+d 428 3 0 2 0
+c
+d 248 2 0 1 0
+c
+d 249 1 0 1 0
+c
+d 621 2 0 1 0
+c
+d 626 1 0 1 0
+c
+d 406 1 0 0 0
+c
+d 411 1 0 0 0
+c
+d 1136 2 0 1 0
+c
+d 1137 2 0 0 0
+c
+d 1138 1 0 0 0
+c
+d 1139 1 0 0 0
+c
+d 259 3 0 0 0
+c
+d 799 2 0 0 0
+c
+d 1150 3 1 0 0
+c
+d 496 1 0 1 0
+c
+d 499 2 0 0 0
+c
+d 749 3 1 0 0
+c
+d 787 2 0 1 0
+c
+d 861 3 1 0 0
+c
+d 591 2 1 0 0
+c
+d 592 1 0 0 0
+c
+d 799 3 1 0 0
+c
+d 26 2 0 0 0
+c
+d 424 2 0 0 0
+c
+d 157 1 0 0 0
+c
+d 305 2 0 0 0
+c
+d 466 1 0 0 0
+c
+d 467 3 0 0 0
+c
+d 217 3 1 0 0
+c
+d 1173 3 1 0 0
+c
+d 75 2 0 2 0
+c
+d 26 1 0 0 0
+c
+d 38 1 0 0 0
+c
+d 34 2 0 2 0
+c
+d 49 1 0 0 0
+c
+d 58 2 1 0 0
+c
+d 833 3 0 0 0
+c
+d 807 2 0 0 0
+c
+d 823 1 1 0 0
+c
+d 578 1 0 0 0
+c
+d 580 1 0 1 0
+c
+d 581 2 0 0 0
+c
+d 602 1 0 0 0
+c
+d 676 1 0 0 0
+c
+d 678 1 0 0 0
+c
+d 480 2 0 0 0
+c
+d 481 1 1 0 0
+c
+d 323 2 0 0 0
+c
+d 592 2 0 0 0
+c
+d 802 1 0 0 0
+c
+d 803 1 0 0 0
+c
+d 855 3 0 2 0
+c
+d 734 2 0 1 0
+c
+d 737 1 0 1 0
+c
+d 301 1 0 1 0
+c
+d 304 1 0 1 0
+c
+d 411 3 0 0 0
+c
+d 75 1 0 1 0
+c
+d 84 1 0 1 0
+c
+d 54 2 0 0 0
+c
+d 1311 1 1 0 0
+c
+d 1170 2 0 0 0
+c
+d 318 1 0 1 0
+c
+d 320 1 0 1 0
+c
+d 294 1 0 0 0
+c
+d 298 2 0 2 0
+c
+d 286 1 0 0 0
+c
+d 291 1 0 0 0
+c
+d 419 3 0 2 0
+c
+d 157 1 0 1 0
+c
+d 1142 3 0 1 0
+c
+d 428 2 0 1 0
+c
+d 436 1 0 1 0
+c
+d 199 2 0 0 0
+c
+d 423 2 0 1 0
+c
+d 341 2 0 0 0
+c
+d 374 1 1 0 0
+c
+d 377 2 0 1 0
+c
+d 88 1 0 1 0
+c
+d 775 1 0 1 0
+c
+d 778 1 0 0 0
+c
+d 767 4 1 0 0
+c
+d 425 1 0 0 0
+c
+d 426 1 0 0 0
+c
+d 691 3 1 0 0
+c
+d 1181 1 0 0 0
+c
+d 1182 1 0 0 0
+c
+d 286 2 1 0 0
+c
+d 291 1 0 0 0
+c
+d 592 2 0 0 0
+c
+d 1235 1 0 0 0
+c
+d 1237 1 0 0 0
+c
+d 455 1 0 1 0
+c
+d 457 1 0 0 0
+c
+d 468 1 0 1 0
+c
+d 9 1 0 0 0
+c
+d 10 2 1 0 0
+c
+d 1142 4 0 0 0
+c
+d 157 2 0 1 0
+c
+d 159 1 0 1 0
+c
+d 787 4 0 1 0
+c
+d 799 2 0 1 0
+c
+d 915 1 1 0 0
+c
+d 578 2 0 0 0
+c
+d 956 1 1 0 0
+c
+d 157 1 0 1 0
+c
+d 159 2 0 1 0
+c
+d 541 4 1 0 0
+c
+d 315 1 0 0 0
+c
+d 317 3 0 0 0
+c
+d 1249 2 0 0 0
+c
+d 281 1 0 0 0
+c
+d 1192 2 0 0 0
+c
+d 50 3 0 0 0
+c
+d 478 1 0 0 0
+c
+d 480 1 0 0 0
+c
+d 481 1 0 1 0
+c
+d 157 1 0 0 0
+c
+d 305 1 0 1 0
+c
+d 537 2 0 0 0
+c
+d 277 2 0 0 0
+c
+d 478 1 0 0 0
+c
+d 482 1 0 0 0
+c
+d 301 2 1 0 0
+c
+d 1185 3 0 1 0
+c
+d 888 3 0 0 0
+c
+d 319 2 0 0 0
+c
+d 320 1 0 0 0
+c
+d 10 2 0 0 0
+c
+d 11 1 1 0 0
+c
+d 348 3 1 0 0
+c
+d 552 4 1 0 0
+c
+d 1086 2 1 0 0
+c
+d 1087 1 0 0 0
+c
+d 1168 1 0 1 0
+c
+d 1170 2 0 1 0
+c
+d 1185 2 0 0 0
+c
+d 1186 1 0 0 0
+c
+d 979 2 0 1 0
+c
+d 980 2 0 0 0
+c
+d 422 3 0 1 0
+c
+d 152 3 1 0 0
+c
+d 286 2 1 0 0
+c
+d 291 1 0 0 0
+c
+d 424 2 0 0 0
+c
+d 437 1 0 0 0
+c
+d 457 2 0 0 0
+c
+d 169 1 0 0 0
+c
+d 1136 1 1 0 0
+c
+d 1137 1 0 0 0
+c
+d 157 2 0 0 0
+c
+d 157 1 1 0 0
+c
+d 159 2 0 0 0
+c
+d 178 1 0 0 0
+c
+d 393 1 0 0 0
+c
+d 1109 1 0 0 0
+c
+d 699 1 0 1 0
+c
+d 799 1 0 0 0
+c
+d 800 1 0 0 0
+c
+d 560 4 1 0 0
+c
+d 568 1 0 0 0
+c
+d 569 1 1 0 0
+c
+d 484 2 0 0 0
+c
+d 966 4 1 0 0
+c
+d 840 3 1 0 0
+c
+d 437 2 0 1 0
+c
+d 148 1 0 1 0
+c
+d 259 1 0 1 0
+c
+d 273 2 0 0 0
+c
+d 1229 1 0 1 0
+c
+d 298 1 0 0 0
+c
+d 323 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 274 1 1 0 0
+c
+d 578 2 0 0 0
+c
+d 348 4 0 2 0
+c
+d 294 2 0 2 0
+c
+d 298 1 0 0 0
+c
+d 505 3 0 0 0
+c
+d 424 1 0 0 0
+c
+d 591 2 1 0 0
+c
+d 716 1 0 0 0
+c
+d 718 1 0 0 0
+c
+d 300 3 0 1 0
+c
+d 181 1 1 0 0
+c
+d 195 2 0 0 0
+c
+d 152 2 0 0 0
+c
+d 141 4 0 0 0
+c
+d 457 3 0 0 0
+c
+d 5 3 1 0 0
+c
+d 411 1 0 1 0
+c
+d 412 2 0 1 0
+c
+d 395 1 0 0 0
+c
+d 1105 1 0 0 0
+c
+d 1106 1 0 0 0
+c
+d 1150 1 0 1 0
+c
+d 1153 2 0 1 0
+c
+d 436 1 0 0 0
+c
+d 578 1 1 0 0
+c
+d 457 2 0 0 0
+c
+d 839 2 0 0 0
+c
+d 842 1 1 0 0
+c
+d 507 3 0 0 0
+c
+d 425 2 0 0 0
+c
+d 795 1 0 0 0
+c
+d 834 1 0 0 0
+c
+d 1188 2 0 0 0
+c
+d 133 1 0 0 0
+c
+d 142 1 0 0 0
+c
+d 311 2 1 0 0
+c
+d 326 2 0 0 0
+c
+d 315 1 1 0 0
+c
+d 324 2 0 0 0
+c
+d 861 2 0 0 0
+c
+d 1153 2 0 2 0
+c
+d 311 1 0 0 0
+c
+d 325 1 1 0 0
+c
+d 326 1 0 0 0
+c
+d 129 3 1 0 0
+c
+d 471 1 0 0 0
+c
+d 472 2 1 0 0
+c
+d 1051 3 0 0 0
+c
+d 1188 2 1 0 0
+c
+d 468 2 0 1 0
+c
+d 472 1 0 1 0
+c
+d 327 1 0 0 0
+c
+d 333 1 0 0 0
+c
+d 395 2 0 1 0
+c
+d 398 1 0 0 0
+c
+d 217 2 1 0 0
+c
+d 211 4 0 0 0
+c
+d 138 3 0 0 0
+c
+d 311 2 0 0 0
+c
+d 348 2 0 0 0
+c
+d 436 2 0 0 0
+c
+d 156 3 0 0 0
+c
+d 411 1 1 0 0
+c
+d 436 1 0 0 0
+c
+d 1043 2 0 0 0
+c
+d 299 2 0 1 0
+c
+d 300 1 0 0 0
+c
+d 737 2 0 2 0
+c
+d 278 2 0 0 0
+c
+d 374 4 0 0 0
+c
+d 4 3 1 0 0
+c
+d 411 4 0 1 0
+c
+d 824 1 0 0 0
+c
+d 836 1 0 1 0
+c
+d 899 1 0 1 0
+c
+d 529 2 0 1 0
+c
+d 532 1 0 1 0
+c
+d 155 4 0 0 0
+c
+d 114 2 0 0 0
+c
+d 131 2 0 1 0
+c
+d 550 2 0 0 0
+c
+d 91 1 0 1 0
+c
+d 92 2 0 1 0
+c
+d 414 2 0 0 0
+c
+d 523 2 0 0 0
+c
+d 374 1 0 0 0
+c
+d 375 2 0 0 0
+c
+d 278 4 0 0 0
+c
+d 272 1 0 0 0
+c
+d 273 1 0 0 0
+c
+d 697 1 0 1 0
+c
+d 699 1 0 0 0
+c
+d 716 1 0 1 0
+c
+d 853 1 0 0 0
+c
+d 896 1 0 1 0
+c
+d 876 1 0 0 0
+c
+d 878 1 1 0 0
+c
+d 719 1 0 0 0
+c
+d 949 1 0 0 0
+c
+d 604 1 0 0 0
+c
+d 641 1 0 0 0
+c
+d 159 1 0 1 0
+c
+d 183 2 0 1 0
+c
+d 333 1 0 0 0
+c
+d 334 1 0 0 0
+c
+d 748 2 0 0 0
+c
+d 1001 1 0 0 0
+c
+d 1003 1 0 0 0
+c
+d 178 2 0 0 0
+c
+d 844 3 0 0 0
+c
+d 541 3 0 1 0
+c
+d 127 3 1 0 0
+c
+d 606 2 0 0 0
+c
+d 457 1 0 0 0
+c
+d 458 1 0 0 0
+c
+d 248 2 0 0 0
+c
+d 348 3 0 2 0
+c
+d 324 4 0 0 0
+c
+d 242 2 0 0 0
+c
+d 129 4 1 0 0
+c
+d 686 1 0 0 0
+c
+d 700 1 1 0 0
+c
+d 701 1 0 0 0
+c
+d 844 2 0 2 0
+c
+d 650 3 0 0 0
+c
+d 691 1 0 0 0
+c
+d 803 1 0 0 0
+c
+d 755 3 0 0 0
+c
+d 498 1 0 0 0
+c
+d 499 2 0 0 0
+c
+d 101 1 0 1 0
+c
+d 111 2 0 1 0
+c
+d 615 3 0 2 0
+c
+d 844 1 0 0 0
+c
+d 851 2 0 0 0
+c
+d 622 1 0 0 0
+c
+d 628 2 0 1 0
+c
+d 146 2 0 0 0
+c
+d 477 1 0 0 0
+c
+d 478 1 0 0 0
+c
+d 1043 2 0 0 0
+c
+d 437 4 1 0 0
+c
+d 966 3 0 2 0
+c
+d 989 2 0 0 0
+c
+d 559 1 1 0 0
+c
+d 560 2 0 0 0
+c
+d 482 1 0 1 0
+c
+d 487 1 0 1 0
+c
+d 602 4 1 0 0
+c
+d 301 2 0 0 0
+c
+d 50 1 1 0 0
+c
+d 723 1 0 0 0
+c
+d 724 1 0 0 0
+c
+d 1192 2 0 0 0
+c
+d 152 1 0 0 0
+c
+d 155 2 1 0 0
+c
+d 373 2 1 0 0
+c
+d 374 1 0 0 0
+c
+d 846 2 0 1 0
+c
+d 156 3 1 0 0
+c
+d 183 2 0 1 0
+c
+d 196 1 0 1 0
+c
+d 57 1 1 0 0
+c
+d 59 2 0 0 0
+c
+d 180 1 0 0 0
+c
+d 194 2 1 0 0
+c
+d 315 3 1 0 0
+c
+d 1279 1 0 0 0
+c
+d 1281 1 1 0 0
+c
+d 1282 1 0 0 0
+c
+d 861 2 1 0 0
+c
+d 865 2 0 0 0
+c
+d 311 1 0 0 0
+c
+d 327 1 0 0 0
+c
+d 426 2 0 0 0
+c
+d 591 1 0 0 0
+c
+d 608 3 0 0 0
+c
+d 608 2 0 0 0
+c
+d 949 2 0 0 0
+c
+d 801 2 0 0 0
+c
+d 578 3 1 0 0
+c
+d 499 1 0 1 0
+c
+d 500 1 0 0 0
+c
+d 504 1 0 1 0
+c
+d 54 1 0 0 0
+c
+d 55 1 0 0 0
+c
+d 327 1 0 0 0
+c
+d 334 2 1 0 0
+c
+d 845 1 0 0 0
+c
+d 846 1 0 0 0
+c
+d 29 3 1 0 0
+c
+d 299 1 0 0 0
+c
+d 319 1 0 0 0
+c
+d 1070 1 0 0 0
+c
+d 1071 2 1 0 0
+c
+d 1073 1 0 0 0
+c
+d 511 4 1 0 0
+c
+d 691 3 1 0 0
+c
+d 845 1 0 1 0
+c
+d 846 2 0 1 0
+c
+d 699 1 0 0 0
+c
+d 844 1 0 0 0
+c
+d 1106 1 0 0 0
+c
+d 1108 1 0 0 0
+c
+d 159 1 0 0 0
+c
+d 213 1 0 0 0
+c
+d 242 1 1 0 0
+c
+d 301 2 0 0 0
+c
+d 499 3 0 0 0
+c
+d 89 2 0 0 0
+c
+d 799 1 0 1 0
+c
+d 806 1 0 1 0
+c
+d 131 1 0 0 0
+c
+d 523 1 0 0 0
+c
+d 211 1 0 0 0
+c
+d 1244 1 0 0 0
+c
+d 861 2 0 0 0
+c
+d 853 3 0 0 0
+c
+d 142 2 1 0 0
+c
+d 1256 1 0 0 0
+c
+d 608 3 1 0 0
+c
+d 167 3 0 2 0
+c
+d 1138 2 0 0 0
+c
+d 1139 2 0 0 0
+c
+d 513 3 0 2 0
+c
+d 799 1 0 0 0
+c
+d 842 1 0 0 0
+c
+d 806 2 0 0 0
+c
+d 807 1 1 0 0
+c
+d 823 1 0 1 0
+c
+d 835 1 0 1 0
+c
+d 327 1 0 0 0
+c
+d 334 1 0 0 0
+c
+d 650 2 0 1 0
+c
+d 101 1 0 1 0
+c
+d 1084 1 0 0 0
+c
+d 1085 1 0 1 0
+c
+d 1156 3 1 0 0
+c
+d 691 4 0 1 0
+c
+d 755 1 0 1 0
+c
+d 756 2 1 0 0
+c
+d 757 1 0 0 0
+c
+d 718 1 0 1 0
+c
+d 845 1 0 0 0
+c
+d 846 1 0 1 0
+c
+d 989 1 0 0 0
+c
+d 995 2 0 1 0
+c
+d 608 4 0 0 0
+c
+d 19 1 0 0 0
+c
+d 1008 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 1084 1 0 1 0
+c
+d 1086 1 0 0 0
+c
+d 1087 1 0 0 0
+c
+d 333 1 0 0 0
+c
+d 334 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 470 1 0 0 0
+c
+d 838 1 0 0 0
+c
+d 839 2 1 0 0
+c
+d 858 1 0 0 0
+c
+d 872 2 0 0 0
+c
+d 101 3 0 2 0
+c
+d 373 1 0 1 0
+c
+d 382 1 0 1 0
+c
+d 789 1 0 0 0
+c
+d 833 1 0 0 0
+c
+d 333 1 0 1 0
+c
+d 334 3 1 0 0
+c
+d 4 4 0 0 0
+c
+d 1192 1 0 1 0
+c
+d 1206 1 0 1 0
+c
+d 324 2 0 1 0
+c
+d 325 1 0 0 0
+c
+d 412 3 0 0 0
+c
+d 324 1 0 0 0
+c
+d 325 1 0 0 0
+c
+d 358 3 0 1 0
+c
+d 311 2 1 0 0
+c
+d 327 1 0 0 0
+c
+d 457 3 0 2 0
+c
+d 437 1 0 0 0
+c
+d 558 1 0 0 0
+c
+d 541 3 0 0 0
+c
+d 311 1 0 0 0
+c
+d 327 1 0 0 0
+c
+d 55 5 1 0 0
+c
+d 775 2 0 2 0
+c
+d 806 2 0 0 0
+c
+d 373 2 0 0 0
+c
+d 699 2 1 0 0
+c
+d 716 1 0 0 0
+c
+d 691 2 0 2 0
+c
+d 500 1 0 1 0
+c
+d 504 1 0 0 0
+c
+d 505 1 0 1 0
+c
+d 262 2 0 0 0
+c
+d 270 1 0 1 0
+c
+d 491 1 0 1 0
+c
+d 493 1 0 1 0
+c
+d 5 3 0 0 0
+c
+d 868 3 0 1 0
+c
+d 560 2 0 0 0
+c
+d 1 1 0 0 0
+c
+d 4 1 0 0 0
+c
+d 419 3 0 0 0
+c
+d 467 2 0 2 0
+c
+d 468 1 0 0 0
+c
+d 334 2 0 0 0
+c
+d 382 2 0 0 0
+c
+d 388 1 0 0 0
+c
+d 606 2 0 0 0
+c
+d 499 3 1 0 0
+c
+d 327 2 0 0 0
+c
+d 334 1 1 0 0
+c
+d 294 3 1 0 0
+c
+d 853 2 0 0 0
+c
+d 475 2 0 2 0
+c
+d 185 1 0 1 0
+c
+d 186 2 0 1 0
+c
+d 539 2 1 0 0
+c
+d 547 1 0 0 0
+c
+d 156 2 0 0 0
+c
+d 846 3 1 0 0
+c
+d 315 1 0 1 0
+c
+d 324 1 0 1 0
+c
+d 325 1 0 0 0
+c
+d 168 1 0 1 0
+c
+d 369 1 0 1 0
+c
+d 101 3 0 2 0
+c
+d 904 4 0 0 0
+c
+d 806 1 0 0 0
+c
+d 811 1 0 0 0
+c
+d 157 4 0 0 0
+c
+d 327 1 0 0 0
+c
+d 334 2 1 0 0
+c
+d 181 1 0 1 0
+c
+d 191 2 0 1 0
+c
+d 906 2 0 0 0
+c
+d 799 3 1 0 0
+c
+d 457 3 0 1 0
+c
+d 459 1 0 0 0
+c
+d 278 3 0 0 0
+c
+d 182 1 0 0 0
+c
+d 191 1 0 0 0
+c
+d 32 1 0 1 0
+c
+d 75 1 0 0 0
+c
+d 77 1 0 1 0
+c
+d 46 2 0 0 0
+c
+d 178 1 0 0 0
+c
+d 181 2 0 0 0
+c
+d 178 2 0 0 0
+c
+d 177 4 0 2 0
+c
+d 1179 1 0 0 0
+c
+d 1183 1 0 0 0
+c
+d 507 3 1 0 0
+c
+d 276 2 0 1 0
+c
+d 1229 1 0 1 0
+c
+d 799 3 0 2 0
+c
+d 178 2 1 0 0
+c
+d 556 1 0 0 0
+c
+d 557 1 0 0 0
+c
+d 471 1 1 0 0
+c
+d 472 2 0 0 0
+c
+d 473 1 0 0 0
+c
+d 853 1 0 1 0
+c
+d 866 2 0 1 0
+c
+d 789 1 0 0 0
+c
+d 829 2 0 0 0
+c
+d 18 2 0 0 0
+c
+d 738 3 1 0 0
+c
+d 458 2 0 0 0
+c
+d 334 2 0 0 0
+c
+d 842 1 1 0 0
+c
+d 881 2 0 0 0
+c
+d 806 1 0 0 0
+c
+d 808 1 0 0 0
+c
+d 364 3 0 0 0
+c
+d 191 2 0 0 0
+c
+d 550 2 1 0 0
+c
+d 556 1 0 0 0
+c
+d 1156 2 0 0 0
+c
+d 1195 2 0 0 0
+c
+d 101 2 0 0 0
+c
+d 112 1 0 0 0
+c
+d 132 2 0 1 0
+c
+d 133 1 0 1 0
+c
+d 133 2 0 0 0
+c
+d 989 2 0 0 0
+c
+d 989 4 1 0 0
+c
+d 1060 1 1 0 0
+c
+d 1061 1 0 0 0
+c
+d 1062 1 0 0 0
+c
+d 853 3 0 0 0
+c
+d 574 1 0 0 0
+c
+d 795 2 1 0 0
+c
+d 806 1 0 0 0
+c
+d 807 1 0 0 0
+c
+d 5 2 0 0 0
+c
+d 1172 2 0 1 0
+c
+d 806 2 0 1 0
+c
+d 807 1 0 0 0
+c
+d 878 3 1 0 0
+c
+d 152 3 1 0 0
+c
+d 807 1 0 0 0
+c
+d 808 1 0 0 0
+c
+d 836 1 1 0 0
+c
+d 838 2 0 0 0
+c
+d 129 2 0 0 0
+c
+d 131 1 1 0 0
+c
+d 101 1 0 1 0
+c
+d 597 1 0 0 0
+c
+d 856 1 0 1 0
+c
+d 873 1 0 1 0
+c
+d 874 1 0 0 0
+c
+d 305 2 1 0 0
+c
+d 353 1 0 0 0
+c
+d 77 1 0 1 0
+c
+d 81 1 0 1 0
+c
+d 437 1 0 1 0
+c
+d 470 1 0 1 0
+c
+d 301 2 0 2 0
+c
+d 312 1 0 0 0
+c
+d 132 2 1 0 0
+c
+d 338 1 0 0 0
+c
+d 424 3 0 2 0
+c
+d 167 2 0 0 0
+c
+d 565 3 1 0 0
+c
+d 529 2 0 1 0
+c
+d 532 1 0 1 0
+c
+d 507 2 0 0 0
+c
+d 340 3 0 0 0
+c
+d 1192 3 1 0 0
+c
+d 691 1 0 0 0
+c
+d 699 1 0 0 0
+c
+d 217 2 0 0 0
+c
+d 769 3 1 0 0
+c
+d 178 2 0 2 0
+c
+d 455 1 1 0 0
+c
+d 457 2 0 0 0
+c
+d 551 1 0 1 0
+c
+d 564 2 0 1 0
+c
+d 1071 1 0 0 0
+c
+d 1073 1 0 0 0
+c
+d 162 2 0 0 0
+c
+d 373 2 0 2 0
+c
+d 16 4 1 0 0
+c
+d 177 1 0 0 0
+c
+d 178 1 0 0 0
+c
+d 853 1 0 1 0
+c
+d 866 1 0 1 0
+c
+d 424 1 0 0 0
+c
+d 426 1 0 0 0
+c
+d 499 1 0 1 0
+c
+d 511 2 0 1 0
+c
+d 799 1 0 1 0
+c
+d 806 2 0 1 0
+c
+d 79 2 0 2 0
+c
+d 84 1 0 0 0
+c
+d 191 2 0 0 0
+c
+d 148 2 0 0 0
+c
+d 259 1 0 0 0
+c
+d 348 3 1 0 0
+c
+d 507 3 1 0 0
+c
+d 167 3 1 0 0
+c
+d 305 1 0 0 0
+c
+d 353 1 0 0 0
+c
+d 311 3 1 0 0
+c
+d 560 1 0 1 0
+c
+d 561 3 0 1 0
+c
+d 167 3 1 0 0
+c
+d 301 2 0 1 0
+c
+d 332 2 0 1 0
+c
+d 799 2 0 0 0
+c
+d 806 1 0 0 0
+c
+d 922 2 0 0 0
+c
+d 923 1 1 0 0
+c
+d 131 1 0 0 0
+c
+d 523 1 0 0 0
+c
+d 374 4 0 0 0
+c
+d 507 3 1 0 0
+c
+d 146 1 0 0 0
+c
+d 294 1 0 0 0
+c
+d 811 4 0 0 0
+c
+d 436 3 0 0 0
+c
+d 437 2 0 0 0
+c
+d 301 3 1 0 0
+c
+d 325 1 0 0 0
+c
+d 326 1 0 0 0
+c
+d 311 1 0 0 0
+c
+d 327 1 0 0 0
+c
+d 467 2 0 0 0
+c
+d 468 1 0 0 0
+c
+d 374 1 0 1 0
+c
+d 377 1 0 0 0
+c
+d 1188 3 0 0 0
+c
+d 799 3 1 0 0
+c
+d 369 1 0 0 0
+c
+d 382 2 0 0 0
+c
+d 861 1 0 1 0
+c
+d 865 1 0 0 0
+c
+d 875 2 0 0 0
+c
+d 163 2 0 0 0
+c
+d 172 1 0 0 0
+c
+d 301 1 0 1 0
+c
+d 315 1 0 1 0
+c
+d 347 1 0 0 0
+c
+d 348 1 0 0 0
+c
+d 276 4 0 0 0
+c
+d 457 1 0 0 0
+c
+d 459 1 0 0 0
+c
+d 324 1 0 1 0
+c
+d 332 2 0 1 0
+c
+d 437 1 0 0 0
+c
+d 491 1 0 0 0
+c
+d 493 1 0 0 0
+c
+d 32 2 0 1 0
+c
+d 437 1 0 0 0
+c
+d 558 1 0 0 0
+c
+d 57 2 0 0 0
+c
+d 875 3 0 2 0
+c
+d 146 2 0 0 0
+c
+d 838 2 0 0 0
+c
+d 839 1 1 0 0
+c
+d 437 4 0 0 0
+c
+d 558 2 0 0 0
+c
+d 1013 3 0 1 0
+c
+d 807 4 1 0 0
+c
+d 146 3 1 0 0
+c
+d 529 1 0 1 0
+c
+d 1062 1 0 1 0
+c
+d 1064 1 0 0 0
+c
+d 807 2 0 0 0
+c
+d 875 4 0 0 0
+c
+d 840 2 0 0 0
+c
+d 332 1 1 0 0
+c
+d 333 2 0 0 0
+c
+d 278 2 0 0 0
+c
+d 133 3 1 0 0
+c
+d 120 1 0 0 0
+c
+d 125 1 0 1 0
+c
+d 126 1 0 1 0
+c
+d 101 2 0 0 0
+c
+d 155 1 0 1 0
+c
+d 156 1 0 0 0
+c
+d 411 1 0 1 0
+c
+d 514 3 0 0 0
+c
+d 806 1 0 0 0
+c
+d 807 1 0 0 0
+c
+d 469 3 1 0 0
+c
+d 513 2 1 0 0
+c
+d 523 1 0 0 0
+c
+d 31 1 0 0 0
+c
+d 1318 1 0 1 0
+c
+d 30 4 0 0 0
+c
+d 767 1 0 1 0
+c
+d 888 1 0 0 0
+c
+d 890 1 0 1 0
+c
+d 1060 1 0 0 0
+c
+d 1061 1 0 0 0
+c
+d 132 3 1 0 0
+c
+d 737 2 0 0 0
+c
+d 738 1 1 0 0
+c
+d 30 1 0 1 0
+c
+d 32 1 0 1 0
+c
+d 30 2 0 1 0
+c
+d 561 1 0 0 0
+c
+d 566 1 1 0 0
+c
+d 568 1 0 0 0
+c
+d 167 2 0 0 0
+c
+d 748 4 0 0 0
+c
+d 427 1 0 0 0
+c
+d 1078 1 0 0 0
+c
+d 388 2 0 0 0
+c
+d 878 1 0 0 0
+c
+d 882 1 0 1 0
+c
+d 868 1 0 0 0
+c
+d 872 1 0 0 0
+c
+d 873 1 1 0 0
+c
+d 157 1 0 0 0
+c
+d 364 1 0 0 0
+c
+d 365 1 1 0 0
+c
+d 132 2 0 0 0
+c
+d 133 1 0 0 0
+c
+d 426 1 0 0 0
+c
+d 591 1 0 1 0
+c
+d 167 2 0 2 0
+c
+d 566 2 0 0 0
+c
+d 368 3 1 0 0
+c
+d 167 4 0 0 0
+c
+d 1168 3 1 0 0
+c
+d 389 2 0 1 0
+c
+d 377 1 0 0 0
+c
+d 384 1 0 0 0
+c
+d 806 3 1 0 0
+c
+d 806 1 0 0 0
+c
+d 807 1 0 0 0
+c
+d 806 3 1 0 0
+c
+d 353 2 0 1 0
+c
+d 357 1 0 1 0
+c
+d 1134 4 1 0 0
+c
+d 437 3 0 0 0
+c
+d 348 3 0 0 0
+c
+d 424 3 0 2 0
+c
+d 572 1 0 0 0
+c
+d 574 2 1 0 0
+c
+d 799 2 0 1 0
+c
+d 806 2 1 0 0
+c
+d 278 1 0 1 0
+c
+d 1165 2 0 1 0
+c
+d 133 3 0 0 0
+c
+d 811 2 0 0 0
+c
+d 914 2 0 0 0
+c
+d 457 4 0 0 0
+c
+d 21 2 0 0 0
+c
+d 1027 2 0 1 0
+c
+d 989 3 0 2 0
+c
+d 811 3 0 0 0
+c
+d 242 1 0 0 0
+c
+d 248 1 0 0 0
+c
+d 133 2 0 1 0
+c
+d 507 2 0 1 0
+c
+d 557 1 0 1 0
+c
+d 5 2 0 0 0
+c
+d 1062 3 0 0 0
+c
+d 1064 1 0 0 0
+c
+d 807 1 0 0 0
+c
+d 823 1 0 0 0
+c
+d 93 1 0 0 0
+c
+d 141 1 0 0 0
+c
+d 806 4 0 0 0
+c
+d 334 3 0 0 0
+c
+d 287 2 0 0 0
+c
+d 261 4 1 0 0
+c
+d 716 2 0 0 0
+c
+d 807 3 0 0 0
+c
+d 691 2 0 0 0
+c
+d 348 1 0 0 0
+c
+d 1145 1 0 0 0
+c
+d 162 3 1 0 0
+c
+d 392 3 1 0 0
+c
+d 1229 2 0 0 0
+c
+d 817 4 1 0 0
+c
+d 242 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 301 2 0 0 0
+c
+d 470 1 0 0 0
+c
+d 475 1 0 0 0
+c
+d 759 1 0 1 0
+c
+d 760 2 0 0 0
+c
+d 217 3 0 1 0
+c
+d 851 2 0 0 0
+c
+d 737 1 1 0 0
+c
+d 738 2 0 0 0
+c
+d 153 3 0 0 0
+c
+d 842 2 1 0 0
+c
+d 848 1 0 0 0
+c
+d 529 4 0 0 0
+c
+d 530 1 0 0 0
+c
+d 878 3 0 0 0
+c
+d 119 1 0 0 0
+c
+d 120 1 0 0 0
+c
+d 827 1 0 0 0
+c
+d 829 1 1 0 0
+c
+d 902 1 0 0 0
+c
+d 839 1 0 1 0
+c
+d 840 2 1 0 0
+c
+d 841 1 0 0 0
+c
+d 699 2 0 0 0
+c
+d 217 2 0 1 0
+c
+d 241 1 0 1 0
+c
+d 323 3 0 0 0
+c
+d 437 2 0 2 0
+c
+d 438 2 0 0 0
+c
+d 616 2 0 0 0
+c
+d 989 1 0 0 0
+c
+d 301 2 0 0 0
+c
+d 98 1 0 1 0
+c
+d 99 1 0 1 0
+c
+d 1003 1 0 0 0
+c
+d 152 1 0 0 0
+c
+d 413 2 1 0 0
+c
+d 753 3 1 0 0
+c
+d 565 1 0 0 0
+c
+d 566 2 0 1 0
+c
+d 338 1 1 0 0
+c
+d 340 2 0 0 0
+c
+d 861 1 0 0 0
+c
+d 869 1 0 0 0
+c
+d 291 1 0 0 0
+c
+d 299 1 0 1 0
+c
+d 300 1 0 1 0
+c
+d 527 3 1 0 0
+c
+d 691 3 0 1 0
+c
+d 278 1 0 0 0
+c
+d 279 1 0 0 0
+c
+d 133 2 0 0 0
+c
+d 134 1 0 0 0
+c
+d 510 1 0 0 0
+c
+d 511 1 0 0 0
+c
+d 817 1 0 0 0
+c
+d 904 1 0 0 0
+c
+d 913 1 1 0 0
+c
+d 853 2 0 0 0
+c
+d 182 1 0 0 0
+c
+d 190 1 0 0 0
+c
+d 191 1 0 0 0
+c
+d 395 3 0 2 0
+c
+d 878 4 1 0 0
+c
+d 360 3 1 0 0
+c
+d 347 1 0 1 0
+c
+d 348 1 0 1 0
+c
+d 30 3 1 0 0
+c
+d 437 3 1 0 0
+c
+d 795 1 0 0 0
+c
+d 822 1 0 1 0
+c
+d 823 1 0 1 0
+c
+d 861 1 0 1 0
+c
+d 866 1 0 1 0
+c
+d 867 1 0 0 0
+c
+d 86 2 0 1 0
+c
+d 1293 2 0 0 0
+c
+d 279 1 0 0 0
+c
+d 305 2 1 0 0
+c
+d 531 4 0 0 0
+c
+d 146 2 0 0 0
+c
+d 151 1 0 0 0
+c
+d 511 3 0 1 0
+c
+d 878 2 0 0 0
+c
+d 217 3 0 1 0
+c
+d 1013 2 0 0 0
+c
+d 1111 1 0 0 0
+c
+d 1113 1 0 0 0
+c
+d 392 1 0 1 0
+c
+d 393 2 0 1 0
+c
+d 278 2 1 0 0
+c
+d 279 1 0 0 0
+c
+d 1314 3 0 0 0
+c
+d 1141 1 0 0 0
+c
+d 1142 1 0 0 0
+c
+d 806 1 0 1 0
+c
+d 807 2 0 0 0
+c
+d 808 1 0 0 0
+c
+d 1195 4 0 0 0
+c
+d 753 3 1 0 0
+c
+d 811 2 0 0 0
+c
+d 914 2 0 1 0
+c
+d 348 3 1 0 0
+c
+d 363 1 0 0 0
+c
+d 604 1 0 0 0
+c
+d 605 2 0 1 0
+c
+d 301 2 0 0 0
+c
+d 392 1 0 0 0
+c
+d 1126 1 0 0 0
+c
+d 7 4 1 0 0
+c
+d 392 1 0 0 0
+c
+d 393 1 0 0 0
+c
+d 157 2 0 2 0
+c
+d 437 2 0 0 0
+c
+d 167 2 0 0 0
+c
+d 743 4 0 0 0
+c
+d 323 1 1 0 0
+c
+d 324 2 0 0 0
+c
+d 838 3 1 0 0
+c
+d 111 1 1 0 0
+c
+d 1092 2 0 0 0
+c
+d 753 2 0 0 0
+c
+d 49 3 0 0 0
+c
+d 278 2 0 0 0
+c
+d 558 1 0 1 0
+c
+d 559 2 0 1 0
+c
+d 753 1 0 0 0
+c
+d 857 1 1 0 0
+c
+d 858 1 0 0 0
+c
+d 389 3 1 0 0
+c
+d 18 1 1 0 0
+c
+d 30 2 0 0 0
+c
+d 301 2 0 1 0
+c
+d 95 1 0 1 0
+c
+d 1003 1 0 1 0
+c
+d 157 1 0 0 0
+c
+d 305 1 0 0 0
+c
+d 276 2 0 0 0
+c
+d 290 1 0 0 0
+c
+d 414 2 0 0 0
+c
+d 606 1 1 0 0
+c
+d 607 1 0 0 0
+c
+d 608 1 0 0 0
+c
+d 1194 1 0 1 0
+c
+d 1202 1 0 1 0
+c
+d 851 2 0 0 0
+c
+d 842 2 0 1 0
+c
+d 844 1 0 1 0
+c
+d 884 2 0 0 0
+c
+d 156 1 0 0 0
+c
+d 400 1 0 0 0
+c
+d 70 2 0 2 0
+c
+d 651 1 0 0 0
+c
+d 507 1 0 0 0
+c
+d 558 1 0 0 0
+c
+d 530 1 0 0 0
+c
+d 531 1 0 1 0
+c
+d 217 2 0 0 0
+c
+d 167 1 0 0 0
+c
+d 369 1 0 0 0
+c
+d 767 3 1 0 0
+c
+d 436 2 0 1 0
+c
+d 437 1 0 1 0
+c
+d 384 1 0 1 0
+c
+d 1134 1 0 0 0
+c
+d 1135 1 0 0 0
+c
+d 437 3 0 2 0
+c
+d 162 1 0 0 0
+c
+d 163 1 0 0 0
+c
+d 550 4 0 0 0
+c
+d 242 4 0 0 0
+c
+d 305 1 0 0 0
+c
+d 1140 2 0 0 0
+c
+d 353 1 0 0 0
+c
+d 1138 1 0 0 0
+c
+d 1139 1 0 0 0
+c
+d 21 1 0 0 0
+c
+d 24 1 0 0 0
+c
+d 620 2 0 0 0
+c
+d 1036 1 0 0 0
+c
+d 204 2 0 1 0
+c
+d 224 1 0 0 0
+c
+d 382 1 0 1 0
+c
+d 390 1 0 0 0
+c
+d 392 2 0 0 0
+c
+d 157 3 0 0 0
+c
+d 839 1 0 0 0
+c
+d 840 2 1 0 0
+c
+d 262 1 0 1 0
+c
+d 273 2 0 1 0
+c
+d 1311 3 0 0 0
+c
+d 437 1 0 0 0
+c
+d 471 2 1 0 0
+c
+d 507 3 1 0 0
+c
+d 132 1 0 1 0
+c
+d 496 1 0 1 0
+c
+d 19 2 0 1 0
+c
+d 818 2 0 1 0
+c
+d 819 1 0 1 0
+c
+d 1071 2 1 0 0
+c
+d 1072 1 0 0 0
+c
+d 1163 2 0 1 0
+c
+d 93 3 1 0 0
+c
+d 129 3 1 0 0
+c
+d 26 2 0 0 0
+c
+d 218 2 0 1 0
+c
+d 1236 1 0 0 0
+c
+d 423 1 0 0 0
+c
+d 1080 1 0 0 0
+c
+d 348 2 0 0 0
+c
+d 838 2 0 0 0
+c
+d 172 3 0 0 0
+c
+d 274 2 1 0 0
+c
+d 276 1 0 0 0
+c
+d 1185 1 0 0 0
+c
+d 1202 1 0 0 0
+c
+d 827 1 0 0 0
+c
+d 829 1 0 0 0
+c
+d 1040 4 1 0 0
+c
+d 807 2 0 1 0
+c
+d 907 1 0 1 0
+c
+d 840 4 0 0 0
+c
+d 1017 1 0 0 0
+c
+d 1020 1 0 0 0
+c
+d 1021 1 0 0 0
+c
+d 373 2 0 0 0
+c
+d 737 1 0 1 0
+c
+d 738 1 0 0 0
+c
+d 854 1 0 1 0
+c
+d 86 1 0 1 0
+c
+d 87 2 0 1 0
+c
+d 1165 1 0 0 0
+c
+d 1168 1 0 0 0
+c
+d 276 3 0 2 0
+c
+d 437 1 0 1 0
+c
+d 507 1 0 1 0
+c
+d 799 3 1 0 0
+c
+d 661 1 1 0 0
+c
+d 662 2 0 0 0
+c
+d 159 2 1 0 0
+c
+d 213 1 0 0 0
+c
+d 162 2 1 0 0
+c
+d 360 1 0 0 0
+c
+d 878 3 0 1 0
+c
+d 738 2 0 0 0
+c
+d 878 2 0 0 0
+c
+d 211 3 1 0 0
+c
+d 86 3 0 0 0
+c
+d 382 1 0 0 0
+c
+d 388 2 0 0 0
+c
+d 437 3 0 0 0
+c
+d 843 1 0 0 0
+c
+d 844 1 0 0 0
+c
+d 146 3 1 0 0
+c
+d 156 2 1 0 0
+c
+d 163 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 457 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 457 1 0 0 0
+c
+d 842 2 0 0 0
+c
+d 735 1 0 0 0
+c
+d 737 1 0 0 0
+c
+d 806 2 0 0 0
+c
+d 323 3 0 2 0
+c
+d 1153 2 0 0 0
+c
+d 617 1 0 1 0
+c
+d 983 1 0 0 0
+c
+d 985 1 0 0 0
+c
+d 989 1 0 1 0
+c
+d 753 3 1 0 0
+c
+d 1104 2 0 0 0
+c
+d 565 3 0 0 0
+c
+d 602 3 0 2 0
+c
+d 295 1 0 1 0
+c
+d 296 1 0 1 0
+c
+d 162 3 1 0 0
+c
+d 558 1 0 0 0
+c
+d 563 1 0 0 0
+c
+d 527 4 0 0 0
+c
+d 162 1 0 0 0
+c
+d 360 1 0 0 0
+c
+d 842 1 0 1 0
+c
+d 849 2 0 1 0
+c
+d 1070 2 0 2 0
+c
+d 278 1 0 0 0
+c
+d 279 1 0 0 0
+c
+d 535 1 0 0 0
+c
+d 536 2 0 0 0
+c
+d 608 2 0 1 0
+c
+d 614 1 1 0 0
+c
+d 21 1 0 1 0
+c
+d 39 1 0 1 0
+c
+d 906 3 0 0 0
+c
+d 437 3 1 0 0
+c
+d 733 2 0 2 0
+c
+d 990 2 0 0 0
+c
+d 509 3 0 2 0
+c
+d 428 3 1 0 0
+c
+d 642 4 0 0 0
+c
+d 511 3 1 0 0
+c
+d 302 1 0 0 0
+c
+d 303 2 0 0 0
+c
+d 30 2 0 0 0
+c
+d 348 2 1 0 0
+c
+d 1145 1 0 0 0
+c
+d 132 3 0 1 0
+c
+d 650 2 1 0 0
+c
+d 656 1 0 0 0
+c
+d 156 2 0 0 0
+c
+d 505 2 0 0 0
+c
+d 159 3 0 0 0
+c
+d 75 2 1 0 0
+c
+d 1008 1 0 0 0
+c
+d 1009 1 0 0 0
+c
+d 393 3 1 0 0
+c
+d 177 1 0 0 0
+c
+d 178 1 0 0 0
+c
+d 286 3 1 0 0
+c
+d 1165 2 0 2 0
+c
+d 1166 1 0 0 0
+c
+d 787 3 1 0 0
+c
+d 7 3 1 1 0
+c
+d 437 1 0 0 0
+c
+d 457 2 1 0 0
+c
+d 111 1 0 0 0
+c
+d 146 1 0 0 0
+c
+d 854 2 0 0 0
+c
+d 274 2 0 1 0
+c
+d 275 1 0 1 0
+c
+d 842 2 0 1 0
+c
+d 880 1 0 1 0
+c
+d 276 1 0 0 0
+c
+d 301 2 1 0 0
+c
+d 1177 3 1 0 0
+c
+d 167 2 0 0 0
+c
+d 1165 3 0 2 0
+c
+d 875 3 1 0 0
+c
+d 523 2 1 0 0
+c
+d 524 1 0 0 0
+c
+d 276 1 0 1 0
+c
+d 301 2 0 1 0
+c
+d 74 1 0 0 0
+c
+d 1300 1 0 0 0
+c
+d 1084 4 1 0 0
+c
+d 1315 1 0 1 0
+c
+d 1316 1 0 0 0
+c
+d 1317 1 0 1 0
+c
+d 1083 4 1 0 0
+c
+d 384 2 1 0 0
+c
+d 1127 3 1 0 0
+c
+d 134 1 0 0 0
+c
+d 135 2 0 1 0
+c
+d 494 1 0 0 0
+c
+d 496 1 0 0 0
+c
+d 458 3 1 0 0
+c
+d 622 2 1 0 0
+c
+d 626 1 0 0 0
+c
+d 270 2 0 0 0
+c
+d 272 1 0 0 0
+c
+d 775 2 0 0 0
+c
+d 301 3 0 0 0
+c
+d 1163 2 0 0 0
+c
+d 301 2 0 0 0
+c
+d 313 1 1 0 0
+c
+d 393 2 0 0 0
+c
+d 1047 2 1 0 0
+c
+d 1048 1 0 0 0
+c
+d 507 1 0 0 0
+c
+d 508 1 0 1 0
+c
+d 1070 1 0 1 0
+c
+d 513 1 0 0 0
+c
+d 523 2 0 0 0
+c
+d 278 2 1 0 0
+c
+d 32 2 0 0 0
+c
+d 84 1 0 0 0
+c
+d 1274 1 1 0 0
+c
+d 1275 1 0 0 0
+c
+d 525 4 1 0 0
+c
+d 301 4 1 0 0
+c
+d 30 1 0 0 0
+c
+d 32 1 0 0 0
+c
+d 52 2 0 1 0
+c
+d 53 1 0 1 0
+c
+d 52 2 0 0 0
+c
+d 276 3 0 2 0
+c
+d 52 2 0 1 0
+c
+d 152 1 0 0 0
+c
+d 153 1 0 1 0
+c
+d 132 1 1 0 0
+c
+d 133 2 0 0 0
+c
+d 146 4 1 0 0
+c
+d 146 3 1 0 0
+c
+d 369 2 0 0 0
+c
+d 146 2 0 0 0
+c
+d 146 3 1 0 0
+c
+d 769 1 0 1 0
+c
+d 939 2 0 1 0
+c
+d 146 3 1 0 0
+c
+d 120 3 0 0 0
+c
+d 437 3 1 0 0
+c
+d 753 1 0 0 0
+c
+d 859 1 1 0 0
+c
+d 861 1 0 0 0
+c
+d 1280 1 0 0 0
+c
+d 1281 1 0 0 0
+c
+d 146 2 0 0 0
+c
+d 146 2 0 0 0
+c
+d 1111 3 0 0 0
+c
+d 843 1 0 0 0
+c
+d 844 1 0 0 0
+c
+d 368 2 0 1 0
+c
+d 369 1 1 0 0
+c
+d 213 4 1 0 0
+c
+d 1125 4 0 0 0
+c
+d 511 3 0 0 0
+c
+d 288 3 0 2 0
+c
+d 348 2 0 0 0
+c
+d 52 2 0 0 0
+c
+d 53 1 1 0 0
+c
+d 49 1 0 1 0
+c
+d 59 2 0 1 0
+c
+d 789 4 1 0 0
+c
+d 998 2 0 0 0
+c
+d 1000 1 0 0 0
+c
+d 156 3 1 0 0
+c
+d 862 2 0 0 0
+c
+d 234 3 0 0 0
+c
+d 235 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 597 1 0 0 0
+c
+d 288 3 1 0 0
+c
+d 622 3 0 0 0
+c
+d 628 1 0 1 0
+c
+d 52 4 1 0 0
+c
+d 1126 2 0 1 0
+c
+d 1127 1 0 1 0
+c
+d 146 2 0 0 0
+c
+d 888 2 0 1 0
+c
+d 890 1 0 1 0
+c
+d 1239 2 0 0 0
+c
+d 205 1 0 0 0
+c
+d 1239 1 0 0 0
+c
+d 30 2 0 0 0
+c
+d 146 2 0 0 0
+c
+d 133 2 0 0 0
+c
+d 507 1 0 0 0
+c
+d 1071 1 0 0 0
+c
+d 861 2 0 0 0
+c
+d 301 2 0 0 0
+c
+d 312 1 0 0 0
+c
+d 787 1 0 0 0
+c
+d 455 3 0 0 0
+c
+d 205 1 0 0 0
+c
+d 1239 1 0 1 0
+c
+d 1241 1 0 1 0
+c
+d 75 1 0 0 0
+c
+d 80 1 0 0 0
+c
+d 81 1 0 0 0
+c
+d 54 1 0 0 0
+c
+d 66 1 0 0 0
+c
+d 839 1 0 1 0
+c
+d 840 2 0 1 0
+c
+d 287 2 0 0 0
+c
+d 437 1 0 0 0
+c
+d 469 1 0 0 0
+c
+d 133 2 0 0 0
+c
+d 134 1 0 0 0
+c
+d 286 1 0 0 0
+c
+d 1221 1 0 0 0
+c
+d 998 4 0 0 0
+c
+d 1 2 0 1 0
+c
+d 4 1 0 0 0
+c
+d 769 1 0 0 0
+c
+d 886 1 0 0 0
+c
+d 889 1 0 0 0
+c
+d 799 1 0 0 0
+c
+d 843 1 0 0 0
+c
+d 59 1 0 0 0
+c
+d 60 2 0 0 0
+c
+d 156 1 0 0 0
+c
+d 163 1 0 0 0
+c
+d 259 3 1 0 0
+c
+d 511 2 0 2 0
+c
+d 19 2 1 0 0
+c
+d 979 1 0 0 0
+c
+d 572 1 0 0 0
+c
+d 574 2 0 0 0
+c
+d 854 2 0 1 0
+c
+d 507 2 1 0 0
+c
+d 1070 1 0 0 0
+c
+d 51 3 0 0 0
+c
+d 557 1 0 0 0
+c
+d 1060 1 0 0 0
+c
+d 1063 2 0 0 0
+c
+d 1109 3 1 0 0
+c
+d 287 2 0 2 0
+c
+d 164 1 0 1 0
+c
+d 166 1 0 1 0
+c
+d 787 1 0 0 0
+c
+d 882 1 0 0 0
+c
+d 343 3 1 0 0
+c
+d 615 2 0 0 0
+c
+d 211 1 0 0 0
+c
+d 1231 1 0 0 0
+c
+d 890 3 1 0 0
+c
+d 111 2 0 0 0
+c
+d 114 1 0 1 0
+c
+d 120 1 0 0 0
+c
+d 354 1 0 1 0
+c
+d 1125 1 0 1 0
+c
+d 1185 1 0 0 0
+c
+d 1192 2 1 1 0
+c
+d 1176 1 0 0 0
+c
+d 1179 1 0 0 0
+c
+d 364 2 0 1 0
+c
+d 365 1 0 0 0
+c
+d 795 2 0 1 0
+c
+d 376 1 0 0 0
+c
+d 1136 2 0 1 0
+c
+d 888 3 1 0 0
+c
+d 1012 2 0 0 0
+c
+d 208 2 0 2 0
+c
+d 787 1 0 1 0
+c
+d 789 2 0 0 0
+c
+d 823 2 0 0 0
+c
+d 835 1 1 0 0
+c
+d 148 3 0 0 0
+c
+d 46 2 0 0 0
+c
+d 376 2 0 0 0
+c
+d 186 1 0 0 0
+c
+d 213 2 1 0 0
+c
+d 599 2 0 0 0
+c
+d 1192 3 1 0 0
+c
+d 436 1 1 0 0
+c
+d 437 1 0 0 0
+c
+d 1048 1 0 0 0
+c
+d 353 3 0 0 0
+c
+d 262 2 1 0 0
+c
+d 271 1 0 0 0
+c
+d 181 2 0 2 0
+c
+d 203 2 0 0 0
+c
+d 157 3 0 1 0
+c
+d 551 1 0 0 0
+c
+d 564 1 0 0 0
+c
+d 133 1 0 0 0
+c
+d 142 1 0 0 0
+c
+d 340 3 1 0 0
+c
+d 278 3 1 0 0
+c
+d 168 4 0 0 0
+c
+d 125 3 0 0 0
+c
+d 133 2 1 0 0
+c
+d 137 1 0 0 0
+c
+d 529 3 0 0 0
+c
+d 152 2 0 0 0
+c
+d 355 1 0 1 0
+c
+d 358 1 0 1 0
+c
+d 75 1 0 0 0
+c
+d 84 2 0 2 0
+c
+d 734 4 0 0 0
+c
+d 54 2 0 0 0
+c
+d 1311 1 0 0 0
+c
+d 7 2 1 0 0
+c
+d 1284 1 0 0 0
+c
+d 50 1 0 0 0
+c
+d 51 1 0 0 0
+c
+d 848 2 1 0 0
+c
+d 849 1 0 0 0
+c
+d 886 4 1 0 0
+c
+d 287 3 0 0 0
+c
+d 455 3 0 0 0
+c
+d 205 2 1 0 0
+c
+d 1241 1 0 0 0
+c
+d 1107 1 0 0 0
+c
+d 1110 1 0 0 0
+c
+d 888 4 0 0 0
+c
+d 132 1 0 0 0
+c
+d 513 1 0 1 0
+c
+d 642 3 1 0 0
+c
+d 275 2 0 0 0
+c
+d 455 3 0 0 0
+c
+d 1192 3 0 1 0
+c
+d 75 2 0 0 0
+c
+d 412 4 1 0 0
+c
+d 602 2 0 0 0
+c
+d 242 1 0 0 0
+c
+d 1231 1 0 0 0
+c
+d 49 2 0 1 0
+c
+d 58 1 0 1 0
+c
+d 690 1 0 0 0
+c
+d 691 1 0 0 0
+c
+d 709 1 0 0 0
+c
+d 54 2 0 1 0
+c
+d 46 2 0 0 0
+c
+d 348 2 1 0 0
+c
+d 368 3 0 0 0
+c
+d 242 2 0 0 0
+c
+d 244 1 0 0 0
+c
+d 211 3 0 2 0
+c
+d 882 1 0 0 0
+c
+d 885 1 0 1 0
+c
+d 470 2 0 0 0
+c
+d 477 1 0 0 0
+c
+d 584 4 0 1 0
+c
+d 769 2 0 2 0
+c
+d 142 1 0 1 0
+c
+d 145 1 0 1 0
+c
+d 1256 1 0 0 0
+c
+d 1291 3 0 0 0
+c
+d 282 4 0 0 0
+c
+d 457 3 1 0 0
+c
+d 515 3 0 1 0
+c
+d 341 2 0 0 0
+c
+d 294 1 0 0 0
+c
+d 298 2 1 0 0
+c
+d 286 1 0 1 0
+c
+d 287 1 0 0 0
+c
+d 327 5 1 0 0
+c
+d 0 1 0 0 0
+c
+d 1 1 0 1 0
+c
+d 787 1 0 0 0
+c
+d 882 2 1 0 0
+c
+d 419 3 0 2 0
+c
+d 694 3 1 0 0
+c
+d 39 3 0 0 0
+c
+d 738 3 0 2 0
+c
+d 101 3 1 0 0
+c
+d 55 3 1 0 0
+c
+d 164 3 1 0 0
+c
+d 1130 4 1 0 0
+c
+d 753 3 0 1 0
+c
+d 47 1 0 0 0
+c
+d 769 2 0 2 0
+c
+d 86 3 0 0 0
+c
+d 424 2 1 0 0
+c
+d 1079 1 0 0 0
+c
+d 55 1 0 0 0
+c
+d 691 1 0 0 0
+c
+d 458 2 0 0 0
+c
+d 507 2 0 1 0
+c
+d 529 1 0 1 0
+c
+d 54 2 0 1 0
+c
+d 697 1 0 1 0
+c
+d 162 1 1 0 0
+c
+d 360 2 0 0 0
+c
+d 29 1 0 0 0
+c
+d 30 1 0 0 0
+c
+d 1174 3 1 0 0
+c
+d 157 1 1 0 0
+c
+d 305 2 0 0 0
+c
+d 1192 3 0 2 0
+c
+d 101 3 1 0 0
+c
+d 1170 2 1 0 0
+c
+d 1173 1 0 0 0
+c
+d 127 2 0 0 0
+c
+d 789 1 0 0 0
+c
+d 829 2 0 0 0
+c
+d 301 3 1 0 0
+c
+d 787 1 0 0 0
+c
+d 789 1 0 0 0
+c
+d 882 1 1 0 0
+c
+d 694 2 0 0 0
+c
+d 1126 3 0 1 0
+c
+d 1191 3 0 0 0
+c
+d 213 1 1 0 0
+c
+d 242 2 0 0 0
+c
+d 286 2 0 0 0
+c
+d 751 2 0 0 0
+c
+d 355 1 0 0 0
+c
+d 356 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 305 1 0 0 0
+c
+d 276 3 1 0 0
+c
+d 457 3 0 2 0
+c
+d 455 2 0 1 0
+c
+d 888 1 0 0 0
+c
+d 890 1 0 0 0
+c
+d 419 1 0 1 0
+c
+d 423 1 0 1 0
+c
+d 145 1 0 0 0
+c
+d 146 1 0 0 0
+c
+d 419 3 1 0 0
+c
+d 305 2 0 1 0
+c
+d 1141 1 0 1 0
+c
+d 430 4 1 0 0
+c
+d 749 3 0 1 0
+c
+d 458 1 0 0 0
+c
+d 460 1 0 0 0
+c
+d 471 4 1 0 0
+c
+d 305 1 0 0 0
+c
+d 353 1 1 0 0
+c
+d 1140 1 0 0 0
+c
+d 437 1 0 1 0
+c
+d 467 1 0 1 0
+c
+d 468 2 0 0 0
+c
+d 156 1 1 0 0
+c
+d 406 2 0 0 0
+c
+d 532 2 0 0 0
+c
+d 868 3 0 0 0
+c
+d 691 1 0 0 0
+c
+d 801 1 0 0 0
+c
+d 802 1 1 0 0
+c
+d 467 1 0 1 0
+c
+d 468 2 0 0 0
+c
+d 21 1 0 0 0
+c
+d 29 2 1 0 0
+c
+d 217 1 1 0 0
+c
+d 241 2 0 0 0
+c
+d 755 1 0 0 0
+c
+d 759 1 1 0 0
+c
+d 762 1 0 0 0
+c
+d 66 4 0 0 0
+c
+d 353 2 0 0 0
+c
+d 1140 1 1 0 0
+c
+d 751 1 0 1 0
+c
+d 753 1 0 1 0
+c
+d 761 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 470 1 0 0 0
+c
+d 691 1 0 1 0
+c
+d 802 1 0 0 0
+c
+d 803 1 1 0 0
+c
+d 737 4 0 0 0
+c
+d 157 1 0 0 0
+c
+d 353 1 0 0 0
+c
+d 1140 1 1 0 0
+c
+d 1141 2 1 0 0
+c
+d 217 2 0 0 0
+c
+d 21 3 0 0 0
+c
+d 753 1 0 0 0
+c
+d 755 2 1 0 0
+c
+d 578 2 0 1 0
+c
+d 1233 1 0 0 0
+c
+d 1235 1 0 0 0
+c
+d 1236 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 424 1 0 0 0
+c
+d 989 2 0 0 0
+c
+d 424 3 1 0 0
+c
+d 606 4 1 0 0
+c
+d 424 2 0 0 0
+c
+d 584 3 0 0 0
+c
+d 177 1 0 0 0
+c
+d 178 1 0 0 0
+c
+d 971 5 1 0 0
+c
+d 424 4 1 0 0
+c
+d 468 2 0 1 0
+c
+d 471 1 0 1 0
+c
+d 324 1 0 0 0
+c
+d 330 1 0 0 0
+c
+d 886 1 0 0 0
+c
+d 887 1 0 1 0
+c
+d 888 1 0 1 0
+c
+d 599 2 0 0 0
+c
+d 734 2 0 1 0
+c
+d 691 1 0 1 0
+c
+d 697 1 0 0 0
+c
+d 698 1 0 0 0
+c
+d 424 2 0 0 0
+c
+d 753 3 0 0 0
+c
+d 355 3 0 1 0
+c
+d 457 4 0 0 0
+c
+d 467 2 0 2 0
+c
+d 324 1 0 0 0
+c
+d 330 1 0 0 0
+c
+d 331 1 0 0 0
+c
+d 424 1 1 0 0
+c
+d 591 2 0 0 0
+c
+d 477 3 1 0 0
+c
+d 120 1 0 1 0
+c
+d 121 1 0 1 0
+c
+d 767 2 0 0 0
+c
+d 890 1 0 0 0
+c
+d 965 2 1 0 0
+c
+d 968 1 0 0 0
+c
+d 591 2 0 0 0
+c
+d 595 1 0 0 0
+c
+d 348 4 1 0 0
+c
+d 468 4 1 0 0
+c
+d 457 4 1 0 0
+c
+d 1113 1 0 0 0
+c
+d 1114 1 0 0 0
+c
+d 341 2 0 2 0
+c
+d 430 1 0 0 0
+c
+d 437 2 0 0 0
+c
+d 470 1 0 0 0
+c
+d 989 2 0 1 0
+c
+d 458 3 1 0 0
+c
+d 1170 2 0 0 0
+c
+d 405 1 0 0 0
+c
+d 406 2 0 0 0
+c
+d 411 1 1 0 0
+c
+d 1 1 0 0 0
+c
+d 17 1 0 0 0
+c
+d 320 1 0 0 0
+c
+d 321 1 0 0 0
+c
+d 854 2 0 0 0
+c
+d 735 1 0 1 0
+c
+d 737 2 0 1 0
+c
+d 405 1 1 0 0
+c
+d 411 2 0 0 0
+c
+d 691 3 1 0 0
+c
+d 1079 4 0 0 0
+c
+d 427 2 0 1 0
+c
+d 428 1 0 1 0
+c
+d 1185 1 0 0 0
+c
+d 1189 1 0 0 0
+c
+d 424 1 0 0 0
+c
+d 1079 2 1 0 0
+c
+d 436 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 1185 2 0 1 0
+c
+d 1189 1 0 0 0
+c
+d 691 2 0 1 0
+c
+d 693 1 0 1 0
+c
+d 427 2 0 0 0
+c
+d 428 1 0 0 0
+c
+d 341 1 0 0 0
+c
+d 348 1 0 0 0
+c
+d 133 2 0 0 0
+c
+d 294 1 0 0 0
+c
+d 305 4 1 0 0
+c
+d 430 1 0 0 0
+c
+d 432 1 0 0 0
+c
+d 353 1 0 0 0
+c
+d 357 3 0 0 0
+c
+d 286 1 0 1 0
+c
+d 294 1 0 0 0
+c
+d 298 1 0 1 0
+c
+d 753 2 0 0 0
+c
+d 259 2 0 1 0
+c
+d 261 1 0 1 0
+c
+d 789 2 0 0 0
+c
+d 724 2 1 0 0
+c
+d 734 1 0 0 0
+c
+d 789 3 0 2 0
+c
+d 470 1 0 1 0
+c
+d 472 1 0 0 0
+c
+d 475 1 0 1 0
+c
+d 1080 3 1 0 0
+c
+d 415 2 0 0 0
+c
+d 416 1 0 0 0
+c
+d 978 2 0 0 0
+c
+d 979 1 0 0 0
+c
+d 469 3 1 0 0
+c
+d 843 2 1 0 0
+c
+d 606 2 0 0 0
+c
+d 66 3 1 0 0
+c
+d 415 4 0 0 0
+c
+d 691 3 0 2 0
+c
+d 341 2 0 0 0
+c
+d 751 1 0 1 0
+c
+d 753 1 0 0 0
+c
+d 472 2 1 0 0
+c
+d 475 1 0 0 0
+c
+d 145 1 1 0 0
+c
+d 146 1 0 0 0
+c
+d 1256 1 0 0 0
+c
+d 1170 1 0 0 0
+c
+d 1174 2 1 0 0
+c
+d 1174 4 0 0 0
+c
+d 54 1 1 0 0
+c
+d 55 2 0 0 0
+c
+d 152 2 0 0 0
+c
+d 430 1 0 1 0
+c
+d 470 1 0 0 0
+c
+d 48 2 0 1 0
+c
+d 427 4 0 0 0
+c
+d 424 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 288 2 0 2 0
+c
+d 458 4 0 0 0
+c
+d 751 1 0 1 0
+c
+d 761 1 0 1 0
+c
+d 436 4 1 0 0
+c
+d 734 1 0 1 0
+c
+d 737 1 0 1 0
+c
+d 455 3 1 0 0
+c
+d 427 2 1 0 0
+c
+d 428 1 0 0 0
+c
+d 749 4 1 0 0
+c
+d 146 2 0 0 0
+c
+d 277 2 0 0 0
+c
+d 424 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 157 1 1 0 0
+c
+d 305 2 0 0 0
+c
+d 430 1 0 0 0
+c
+d 470 1 0 0 0
+c
+d 353 3 0 2 0
+c
+d 724 3 1 0 0
+c
+d 411 1 0 1 0
+c
+d 415 1 0 1 0
+c
+d 348 2 0 0 0
+c
+d 59 1 0 0 0
+c
+d 60 1 0 0 0
+c
+d 787 1 0 0 0
+c
+d 882 1 1 0 0
+c
+d 883 1 0 0 0
+c
+d 460 2 0 0 0
+c
+d 294 3 1 0 0
+c
+d 297 1 0 0 0
+c
+d 470 1 0 0 0
+c
+d 477 2 0 0 0
+c
+d 95 1 0 0 0
+c
+d 98 1 0 0 0
+c
+d 591 3 0 1 0
+c
+d 1185 1 0 0 0
+c
+d 1188 1 0 1 0
+c
+d 146 2 0 0 0
+c
+d 767 3 0 1 0
+c
+d 424 2 0 1 0
+c
+d 584 1 0 1 0
+c
+d 279 1 0 0 0
+c
+d 305 1 0 0 0
+c
+d 424 2 1 0 0
+c
+d 1079 2 0 0 0
+c
+d 348 2 0 0 0
+c
+d 753 1 0 0 0
+c
+d 761 3 0 0 0
+c
+d 301 1 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 286 1 0 0 0
+c
+d 291 2 1 0 0
+c
+d 428 3 0 0 0
+c
+d 305 3 1 0 0
+c
+d 1185 1 0 0 0
+c
+d 1188 1 1 0 0
+c
+d 1190 2 0 0 0
+c
+d 427 1 0 0 0
+c
+d 428 2 0 0 0
+c
+d 749 1 0 1 0
+c
+d 751 1 0 0 0
+c
+d 307 3 2 0 0
+c
+d 328 1 0 0 0
+c
+d 1185 1 0 0 0
+c
+d 1189 2 1 0 0
+c
+d 734 2 0 0 0
+c
+d 734 2 0 0 0
+c
+d 737 1 0 1 0
+c
+d 534 2 0 1 0
+c
+d 547 1 0 1 0
+c
+d 458 2 0 1 0
+c
+d 749 4 1 0 0
+c
+d 888 2 0 2 0
+c
+d 423 1 1 0 0
+c
+d 427 1 0 0 0
+c
+d 1078 1 0 0 0
+c
+d 470 1 0 0 0
+c
+d 475 1 0 0 0
+c
+d 1136 4 0 0 0
+c
+d 323 1 0 1 0
+c
+d 324 1 0 1 0
+c
+d 989 4 1 0 0
+c
+d 419 3 0 1 0
+c
+d 425 2 0 0 0
+c
+d 1170 3 0 1 0
+c
+d 129 2 0 1 0
+c
+d 525 1 0 1 0
+c
+d 348 2 0 0 0
+c
+d 428 3 0 0 0
+c
+d 101 3 1 0 0
+c
+d 101 2 0 0 0
+c
+d 470 2 0 0 0
+c
+d 469 4 1 0 0
+c
+d 87 1 0 1 0
+c
+d 89 1 0 1 0
+c
+d 157 4 0 0 0
+c
+d 734 2 0 0 0
+c
+d 46 1 0 1 0
+c
+d 59 1 0 0 0
+c
+d 400 2 0 0 0
+c
+d 348 2 0 0 0
+c
+d 581 3 0 2 0
+c
+d 101 1 0 0 0
+c
+d 424 1 0 0 0
+c
+d 355 1 0 1 0
+c
+d 358 1 0 1 0
+c
+d 801 4 1 0 0
+c
+d 348 4 1 0 0
+c
+d 152 1 0 0 0
+c
+d 413 1 0 0 0
+c
+d 157 2 0 0 0
+c
+d 305 1 1 0 0
+c
+d 157 4 1 0 0
+c
+d 650 1 0 0 0
+c
+d 661 1 0 0 0
+c
+d 159 1 1 0 0
+c
+d 213 1 0 0 0
+c
+d 159 1 0 0 0
+c
+d 184 1 0 0 0
+c
+d 276 3 0 1 0
+c
+d 348 2 0 0 0
+c
+d 157 3 0 0 0
+c
+d 691 2 1 0 0
+c
+d 802 1 0 0 0
+c
+d 428 1 0 0 0
+c
+d 436 2 1 0 0
+c
+d 301 4 1 0 0
+c
+d 341 2 0 0 0
+c
+d 348 1 0 0 0
+c
+d 19 2 1 0 0
+c
+d 628 1 0 0 0
+c
+d 305 3 0 2 0
+c
+d 419 2 0 0 0
+c
+d 1080 1 1 0 0
+c
+d 467 2 0 1 0
+c
+d 618 1 0 0 0
+c
+d 965 1 0 0 0
+c
+d 985 1 1 0 0
+c
+d 424 1 0 0 0
+c
+d 1079 1 0 0 0
+c
+d 1185 1 1 0 0
+c
+d 1191 1 0 0 0
+c
+d 1192 1 0 0 0
+c
+d 581 4 1 0 0
+c
+d 888 3 0 1 0
+c
+d 101 2 1 0 0
+c
+d 424 1 0 0 0
+c
+d 427 1 0 1 0
+c
+d 428 2 0 1 0
+c
+d 164 1 0 1 0
+c
+d 167 1 0 0 0
+c
+d 799 4 0 0 0
+c
+d 1024 1 0 1 0
+c
+d 1026 1 0 0 0
+c
+d 1027 1 0 1 0
+c
+d 152 3 0 0 0
+c
+d 888 2 0 0 0
+c
+d 377 2 0 0 0
+c
+d 384 1 0 0 0
+c
+d 285 2 0 1 0
+c
+d 156 1 1 0 0
+c
+d 406 2 0 0 0
+c
+d 305 2 0 0 0
+c
+d 457 1 0 0 0
+c
+d 458 1 0 1 0
+c
+d 461 1 0 1 0
+c
+d 691 3 1 0 0
+c
+d 276 2 1 0 0
+c
+d 290 1 0 0 0
+c
+d 127 3 1 0 0
+c
+d 278 2 0 0 0
+c
+d 428 2 0 0 0
+c
+d 164 2 0 2 0
+c
+d 286 2 0 1 0
+c
+d 294 1 0 1 0
+c
+d 801 2 0 0 0
+c
+d 101 1 0 0 0
+c
+d 424 1 0 0 0
+c
+d 833 4 0 1 0
+c
+d 839 1 0 0 0
+c
+d 842 2 0 2 0
+c
+d 341 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 836 3 1 0 0
+c
+d 75 2 0 0 0
+c
+d 130 3 1 0 0
+c
+d 458 2 0 1 0
+c
+d 424 3 1 0 0
+c
+d 1170 1 1 0 0
+c
+d 1173 2 0 0 0
+c
+d 1170 3 1 0 0
+c
+d 1015 1 0 1 0
+c
+d 1016 2 0 1 0
+c
+d 12 3 0 2 0
+c
+d 157 1 0 1 0
+c
+d 159 1 0 1 0
+c
+d 872 3 0 1 0
+c
+d 868 4 0 0 0
+c
+d 276 2 0 1 0
+c
+d 419 2 0 0 0
+c
+d 806 2 0 0 0
+c
+d 888 3 0 0 0
+c
+d 157 2 0 0 0
+c
+d 101 1 0 0 0
+c
+d 424 1 0 0 0
+c
+d 578 3 1 0 0
+c
+d 424 2 0 0 0
+c
+d 156 1 0 0 0
+c
+d 406 1 1 0 0
+c
+d 411 1 0 0 0
+c
+d 1194 4 0 0 0
+c
+d 436 2 0 0 0
+c
+d 437 1 1 0 0
+c
+d 1269 2 0 0 0
+c
+d 990 2 0 0 0
+c
+d 994 1 0 0 0
+c
+d 436 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 534 4 1 0 0
+c
+d 848 2 0 0 0
+c
+d 121 2 0 0 0
+c
+d 124 1 0 0 0
+c
+d 424 3 1 0 0
+c
+d 133 2 1 0 0
+c
+d 142 1 0 0 0
+c
+d 724 2 0 1 0
+c
+d 734 1 0 1 0
+c
+d 458 3 1 0 0
+c
+d 1170 2 0 0 0
+c
+d 99 1 0 0 0
+c
+d 1003 2 1 0 0
+c
+d 424 2 1 0 0
+c
+d 1 1 0 1 0
+c
+d 17 2 0 1 0
+c
+d 50 1 0 0 0
+c
+d 51 2 0 0 0
+c
+d 162 2 0 0 0
+c
+d 428 2 0 2 0
+c
+d 756 1 0 1 0
+c
+d 768 1 0 0 0
+c
+d 769 1 0 0 0
+c
+d 691 3 1 0 0
+c
+d 353 1 0 0 0
+c
+d 1138 1 0 0 0
+c
+d 288 1 0 1 0
+c
+d 300 1 0 1 0
+c
+d 262 2 0 0 0
+c
+d 1270 2 0 0 0
+c
+d 430 2 1 0 0
+c
+d 470 1 0 0 0
+c
+d 734 1 0 0 0
+c
+d 769 1 0 0 0
+c
+d 470 3 0 0 0
+c
+d 475 1 0 0 0
+c
+d 581 3 1 0 0
+c
+d 457 1 0 0 0
+c
+d 458 1 0 0 0
+c
+d 460 1 1 0 0
+c
+d 737 1 0 0 0
+c
+d 738 2 0 0 0
+c
+d 133 2 0 1 0
+c
+d 140 1 0 1 0
+c
+d 152 1 0 1 0
+c
+d 413 2 0 1 0
+c
+d 157 2 0 1 0
+c
+d 158 1 0 1 0
+c
+d 531 4 0 0 0
+c
+d 262 2 0 2 0
+c
+d 157 2 1 0 0
+c
+d 305 1 0 0 0
+c
+d 164 1 0 1 0
+c
+d 369 1 0 1 0
+c
+d 1150 3 1 0 0
+c
+d 642 1 0 0 0
+c
+d 644 1 0 0 0
+c
+d 157 2 0 0 0
+c
+d 667 1 0 0 0
+c
+d 668 1 1 0 0
+c
+d 101 2 0 0 0
+c
+d 273 1 0 0 0
+c
+d 1229 1 0 0 0
+c
+d 31 4 0 0 0
+c
+d 1289 3 1 0 0
+c
+d 353 1 0 0 0
+c
+d 1138 1 0 0 0
+c
+d 44 2 0 0 0
+c
+d 318 1 1 0 0
+c
+d 320 1 0 0 0
+c
+d 321 1 0 0 0
+c
+d 763 2 0 2 0
+c
+d 942 1 0 0 0
+c
+d 5 3 0 0 0
+c
+d 1043 1 0 0 0
+c
+d 1045 1 0 0 0
+c
+d 621 1 0 1 0
+c
+d 626 2 0 1 0
+c
+d 475 4 0 0 0
+c
+d 157 4 1 0 0
+c
+d 738 1 0 1 0
+c
+d 854 1 0 0 0
+c
+d 211 1 0 0 0
+c
+d 1239 2 0 0 0
+c
+d 470 1 0 0 0
+c
+d 477 1 0 0 0
+c
+d 428 3 0 2 0
+c
+d 437 1 0 1 0
+c
+d 502 2 0 0 0
+c
+d 509 2 0 0 0
+c
+d 318 1 0 1 0
+c
+d 320 2 0 1 0
+c
+d 211 2 0 1 0
+c
+d 215 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 1045 1 1 0 0
+c
+d 1047 1 0 0 0
+c
+d 332 1 0 0 0
+c
+d 333 1 0 0 0
+c
+d 990 2 0 0 0
+c
+d 132 1 0 0 0
+c
+d 133 2 1 0 0
+c
+d 1202 3 0 0 0
+c
+d 1033 2 0 0 0
+c
+d 989 3 1 0 0
+c
+d 75 1 0 1 0
+c
+d 84 2 0 1 0
+c
+d 368 3 0 1 0
+c
+d 181 3 0 2 0
+c
+d 875 2 1 0 0
+c
+d 876 1 0 0 0
+c
+d 115 4 0 0 0
+c
+d 199 2 0 0 0
+c
+d 200 1 1 0 0
+c
+d 5 2 0 0 0
+c
+d 354 1 0 0 0
+c
+d 355 1 1 0 0
+c
+d 288 2 0 1 0
+c
+d 91 1 1 0 0
+c
+d 93 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 158 2 0 0 0
+c
+d 762 3 0 0 0
+c
+d 1 1 0 0 0
+c
+d 17 1 0 0 0
+c
+d 133 3 0 0 0
+c
+d 300 4 0 0 0
+c
+d 157 1 0 0 0
+c
+d 305 2 1 0 0
+c
+d 1080 4 0 0 0
+c
+d 373 1 1 0 0
+c
+d 375 2 0 0 0
+c
+d 331 1 0 1 0
+c
+d 332 1 0 1 0
+c
+d 134 1 0 0 0
+c
+d 135 1 0 0 0
+c
+d 138 1 0 0 0
+c
+d 318 2 0 0 0
+c
+d 428 1 0 0 0
+c
+d 430 1 0 1 0
+c
+d 1105 1 0 0 0
+c
+d 1106 1 1 0 0
+c
+d 132 4 0 0 0
+c
+d 411 3 1 0 0
+c
+d 415 1 0 0 0
+c
+d 876 2 0 0 0
+c
+d 551 3 1 0 0
+c
+d 305 4 1 0 0
+c
+d 457 2 0 0 0
+c
+d 437 1 0 0 0
+c
+d 454 2 0 0 0
+c
+d 1233 2 0 0 0
+c
+d 1236 1 0 0 0
+c
+d 181 4 0 0 0
+c
+d 457 2 0 0 0
+c
+d 460 1 0 0 0
+c
+d 606 3 0 0 0
+c
+d 373 1 0 1 0
+c
+d 374 2 0 0 0
+c
+d 178 1 0 1 0
+c
+d 182 2 0 1 0
+c
+d 273 1 0 1 0
+c
+d 276 3 0 1 0
+c
+d 823 2 0 0 0
+c
+d 608 2 0 0 0
+c
+d 990 1 0 0 0
+c
+d 966 3 1 0 0
+c
+d 419 3 1 0 0
+c
+d 374 3 0 1 0
+c
+d 301 2 0 0 0
+c
+d 437 2 0 1 0
+c
+d 1047 1 0 1 0
+c
+d 301 1 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 551 1 0 0 0
+c
+d 775 1 0 0 0
+c
+d 875 2 0 0 0
+c
+d 787 2 0 0 0
+c
+d 882 1 1 0 0
+c
+d 851 1 0 0 0
+c
+d 852 1 0 0 0
+c
+d 373 2 1 0 0
+c
+d 374 1 0 0 0
+c
+d 1045 1 0 0 0
+c
+d 1048 2 0 2 0
+c
+d 55 2 1 1 0
+c
+d 468 3 1 0 0
+c
+d 354 3 1 0 0
+c
+d 157 2 1 0 0
+c
+d 305 1 0 0 0
+c
+d 373 2 0 0 0
+c
+d 52 2 0 0 0
+c
+d 723 1 0 0 0
+c
+d 133 2 0 1 0
+c
+d 852 1 0 0 0
+c
+d 853 1 0 0 0
+c
+d 844 1 0 0 0
+c
+d 851 2 1 0 0
+c
+d 146 1 0 0 0
+c
+d 153 2 0 0 0
+c
+d 529 1 1 0 0
+c
+d 532 2 0 0 0
+c
+d 1083 4 0 2 0
+c
+d 133 1 1 0 0
+c
+d 134 2 0 0 0
+c
+d 558 1 0 0 0
+c
+d 559 2 0 0 0
+c
+d 563 1 0 0 0
+c
+d 437 2 0 0 0
+c
+d 507 1 1 0 0
+c
+d 1194 3 0 2 0
+c
+d 382 2 1 0 0
+c
+d 846 1 0 0 0
+c
+d 851 1 0 0 0
+c
+d 842 1 0 0 0
+c
+d 844 2 0 0 0
+c
+d 608 2 1 0 0
+c
+d 1040 1 0 0 0
+c
+d 131 3 1 0 0
+c
+d 276 2 0 0 0
+c
+d 167 2 0 0 0
+c
+d 196 3 1 0 0
+c
+d 844 3 0 2 0
+c
+d 853 1 0 0 0
+c
+d 866 1 0 0 0
+c
+d 373 2 1 0 0
+c
+d 286 1 1 0 0
+c
+d 287 1 0 0 0
+c
+d 1221 1 0 0 0
+c
+d 101 3 1 0 0
+c
+d 1176 1 0 0 0
+c
+d 1179 1 0 0 0
+c
+d 419 1 0 0 0
+c
+d 1080 1 0 1 0
+c
+d 1102 1 0 1 0
+c
+d 851 2 0 0 0
+c
+d 301 1 0 0 0
+c
+d 315 2 1 0 0
+c
+d 46 1 0 0 0
+c
+d 75 1 0 0 0
+c
+d 468 2 0 0 0
+c
+d 127 1 0 0 0
+c
+d 128 1 0 0 0
+c
+d 373 2 1 0 0
+c
+d 300 2 1 0 0
+c
+d 314 1 0 0 0
+c
+d 875 3 0 0 0
+c
+d 157 1 0 0 0
+c
+d 305 2 0 0 0
+c
+d 124 2 1 0 0
+c
+d 242 1 0 0 0
+c
+d 262 2 0 2 0
+c
+d 990 2 0 0 0
+c
+d 994 1 0 0 0
+c
+d 181 2 0 1 0
+c
+d 191 1 0 1 0
+c
+d 373 2 0 0 0
+c
+d 374 1 0 0 0
+c
+d 738 3 1 0 0
+c
+d 1087 2 0 0 0
+c
+d 1111 2 0 0 0
+c
+d 1113 1 0 0 0
+c
+d 529 1 0 0 0
+c
+d 1061 1 0 0 0
+c
+d 565 1 0 0 0
+c
+d 566 1 0 0 0
+c
+d 591 2 1 0 0
+c
+d 153 2 0 1 0
+c
+d 154 1 0 0 0
+c
+d 617 1 1 0 0
+c
+d 989 3 0 0 0
+c
+d 157 2 0 0 0
+c
+d 1168 1 1 0 0
+c
+d 1176 2 0 0 0
+c
+d 436 3 1 0 0
+c
+d 785 2 0 0 0
+c
+d 806 1 0 0 0
+c
+d 807 1 0 0 0
+c
+d 315 3 0 1 0
+c
+d 272 1 0 0 0
+c
+d 273 2 0 0 0
+c
+d 875 4 1 0 0
+c
+d 373 2 0 0 0
+c
+d 853 2 0 0 0
+c
+d 21 4 1 0 0
+c
+d 1207 4 0 0 0
+c
+d 374 1 0 1 0
+c
+d 375 2 0 1 0
+c
+d 853 2 0 2 0
+c
+d 896 1 0 0 0
+c
+d 1002 2 1 0 0
+c
+d 1003 1 0 1 0
+c
+d 559 1 1 0 0
+c
+d 561 1 0 0 0
+c
+d 566 1 0 0 0
+c
+d 884 3 1 0 0
+c
+d 168 1 0 0 0
+c
+d 370 1 0 0 0
+c
+d 371 1 0 0 0
+c
+d 1090 1 0 0 0
+c
+d 1092 1 0 0 0
+c
+d 879 3 1 0 0
+c
+d 853 4 1 0 0
+c
+d 853 2 1 0 0
+c
+d 896 1 0 0 0
+c
+d 738 3 1 0 0
+c
+d 1086 1 0 1 0
+c
+d 1087 2 0 1 0
+c
+d 608 3 1 0 0
+c
+d 167 1 0 1 0
+c
+d 369 2 0 1 0
+c
+d 848 2 0 0 0
+c
+d 850 1 0 0 0
+c
+d 377 3 0 0 0
+c
+d 379 1 0 0 0
+c
+d 368 3 0 1 0
+c
+d 167 2 0 0 0
+c
+d 437 3 0 1 0
+c
+d 989 3 0 0 0
+c
+d 511 1 0 0 0
+c
+d 512 1 0 0 0
+c
+d 328 2 1 1 0
+c
+d 133 3 0 0 0
+c
+d 334 2 0 0 0
+c
+d 335 1 0 1 0
+c
+d 844 2 0 0 0
+c
+d 898 1 0 0 0
+c
+d 377 2 0 0 0
+c
+d 301 2 0 1 0
+c
+d 304 1 0 1 0
+c
+d 1315 2 0 0 0
+c
+d 1317 1 1 0 0
+c
+d 806 1 0 0 0
+c
+d 811 2 0 0 0
+c
+d 557 2 1 0 0
+c
+d 1060 1 0 0 0
+c
+d 559 4 0 0 0
+c
+d 851 3 1 0 0
+c
+d 540 2 0 2 0
+c
+d 541 1 0 0 0
+c
+d 167 2 0 0 0
+c
+d 1195 3 0 2 0
+c
+d 511 2 0 0 0
+c
+d 512 1 0 0 0
+c
+d 46 1 0 1 0
+c
+d 1314 1 0 0 0
+c
+d 565 3 0 1 0
+c
+d 507 2 0 0 0
+c
+d 558 1 1 0 0
+c
+d 382 2 0 0 0
+c
+d 699 2 0 0 0
+c
+d 898 1 0 0 0
+c
+d 861 4 0 0 0
+c
+d 164 3 0 0 0
+c
+d 699 2 0 0 0
+c
+d 898 1 0 0 0
+c
+d 1061 3 0 1 0
+c
+d 130 3 1 0 0
+c
+d 382 3 0 0 0
+c
+d 382 2 0 0 0
+c
+d 1195 3 0 0 0
+c
+d 114 1 0 0 0
+c
+d 127 1 0 0 0
+c
+d 133 2 0 1 0
+c
+d 559 1 0 0 0
+c
+d 560 1 0 0 0
+c
+d 561 1 0 0 0
+c
+d 738 3 0 0 0
+c
+d 373 1 0 1 0
+c
+d 375 2 0 1 0
+c
+d 691 2 0 0 0
+c
+d 623 1 0 1 0
+c
+d 626 1 0 1 0
+c
+d 799 3 0 0 0
+c
+d 799 3 0 2 0
+c
+d 130 2 1 0 0
+c
+d 131 1 0 0 0
+c
+d 341 4 1 0 0
+c
+d 799 1 0 1 0
+c
+d 844 1 0 1 0
+c
+d 898 1 0 0 0
+c
+d 340 4 1 0 0
+c
+d 437 2 0 1 0
+c
+d 558 1 0 1 0
+c
+d 382 1 0 1 0
+c
+d 392 1 0 1 0
+c
+d 324 1 0 0 0
+c
+d 325 1 0 0 0
+c
+d 626 2 0 0 0
+c
+d 32 1 0 0 0
+c
+d 1296 1 0 1 0
+c
+d 332 2 0 1 0
+c
+d 333 1 1 0 0
+c
+d 30 3 1 0 0
+c
+d 534 1 0 1 0
+c
+d 540 1 0 0 0
+c
+d 1195 1 0 0 0
+c
+d 1198 3 0 0 0
+c
+d 469 2 0 0 0
+c
+d 315 3 0 1 0
+c
+d 315 1 0 1 0
+c
+d 324 2 0 1 0
+c
+d 382 2 0 1 0
+c
+d 26 2 1 0 0
+c
+d 301 1 0 0 0
+c
+d 304 1 0 0 0
+c
+d 369 4 1 0 0
+c
+d 437 3 1 0 0
+c
+d 381 1 0 1 0
+c
+d 382 2 0 1 0
+c
+d 343 2 1 0 0
+c
+d 437 1 0 0 0
+c
+d 507 1 0 0 0
+c
+d 159 1 0 1 0
+c
+d 183 1 0 1 0
+c
+d 1198 4 0 0 0
+c
+d 827 1 0 0 0
+c
+d 901 1 1 0 0
+c
+d 902 1 0 0 0
+c
+d 335 4 0 0 0
+c
+d 167 2 0 0 0
+c
+d 29 1 0 1 0
+c
+d 31 1 0 0 0
+c
+d 375 1 0 1 0
+c
+d 377 1 0 1 0
+c
+d 152 2 0 0 0
+c
+d 369 1 0 0 0
+c
+d 371 2 0 0 0
+c
+d 507 3 1 0 0
+c
+d 43 1 0 0 0
+c
+d 44 2 1 0 0
+c
+d 133 2 0 1 0
+c
+d 861 1 0 0 0
+c
+d 875 2 0 0 0
+c
+d 437 3 1 0 0
+c
+d 840 3 1 0 0
+c
+d 1009 1 0 0 0
+c
+d 1012 1 0 0 0
+c
+d 1013 1 0 1 0
+c
+d 1033 1 0 1 0
+c
+d 437 2 0 0 0
+c
+d 315 2 0 1 0
+c
+d 199 1 0 0 0
+c
+d 200 2 1 0 0
+c
+d 130 3 1 0 0
+c
+d 844 1 0 1 0
+c
+d 848 1 0 1 0
+c
+d 851 1 0 0 0
+c
+d 817 2 1 0 0
+c
+d 818 1 0 0 0
+c
+d 430 1 0 0 0
+c
+d 436 1 0 0 0
+c
+d 1 1 0 0 0
+c
+d 1322 1 0 0 0
+c
+d 853 1 0 0 0
+c
+d 861 2 1 0 0
+c
+d 101 3 1 0 0
+c
+d 437 3 1 0 0
+c
+d 167 2 0 0 0
+c
+d 325 1 0 0 0
+c
+d 332 1 0 0 0
+c
+d 851 2 0 0 0
+c
+d 853 1 0 0 0
+c
+d 499 1 0 0 0
+c
+d 511 1 0 0 0
+c
+d 152 3 1 0 0
+c
+d 880 2 0 0 0
+c
+d 529 1 1 0 0
+c
+d 1061 1 0 0 0
+c
+d 1062 2 0 0 0
+c
+d 301 1 1 0 0
+c
+d 313 2 0 0 0
+c
+d 155 1 0 0 0
+c
+d 176 2 1 0 0
+c
+d 428 3 0 1 0
+c
+d 93 3 0 0 0
+c
+d 1195 1 0 0 0
+c
+d 1196 1 0 0 0
+c
+d 578 2 0 1 0
+c
+d 581 1 0 1 0
+c
+d 513 3 0 1 0
+c
+d 373 1 0 0 0
+c
+d 375 1 0 1 0
+c
+d 1024 2 0 0 0
+c
+d 855 2 0 1 0
+c
+d 857 2 0 0 0
+c
+d 1070 2 0 2 0
+c
+d 1076 1 0 0 0
+c
+d 371 1 0 0 0
+c
+d 380 1 0 0 0
+c
+d 132 3 0 2 0
+c
+d 10 3 0 0 0
+c
+d 7 3 0 1 0
+c
+d 564 3 0 0 0
+c
+d 26 2 0 0 0
+c
+d 807 2 0 1 0
+c
+d 839 1 0 1 0
+c
+d 340 3 1 0 0
+c
+d 411 1 0 0 0
+c
+d 412 1 0 1 0
+c
+d 417 1 0 1 0
+c
+d 757 1 1 0 0
+c
+d 763 1 0 1 0
+c
+d 650 2 1 0 0
+c
+d 132 2 0 1 0
+c
+d 1258 1 0 1 0
+c
+d 844 2 0 0 0
+c
+d 875 3 0 2 0
+c
+d 343 2 0 0 0
+c
+d 242 1 0 1 0
+c
+d 262 2 0 1 0
+c
+d 882 1 0 0 0
+c
+d 887 2 0 0 0
+c
+d 806 1 0 0 0
+c
+d 807 1 0 0 0
+c
+d 840 1 1 0 0
+c
+d 691 3 0 0 0
+c
+d 620 1 0 0 0
+c
+d 621 1 0 0 0
+c
+d 437 2 0 0 0
+c
+d 392 2 0 2 0
+c
+d 301 1 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 1047 1 1 0 0
+c
+d 1048 2 0 0 0
+c
+d 178 3 0 2 0
+c
+d 507 4 0 0 0
+c
+d 4 1 0 1 0
+c
+d 5 1 0 1 0
+c
+d 853 1 0 0 0
+c
+d 861 1 0 0 0
+c
+d 866 1 0 0 0
+c
+d 343 1 0 0 0
+c
+d 437 2 1 0 0
+c
+d 861 4 1 0 0
+c
+d 437 2 0 0 0
+c
+d 169 3 1 0 0
+c
+d 178 4 1 0 0
+c
+d 753 2 0 0 0
+c
+d 760 1 0 0 0
+c
+d 334 3 0 2 0
+c
+d 691 3 0 2 0
+c
+d 875 1 0 0 0
+c
+d 876 1 0 0 0
+c
+d 851 2 0 2 0
+c
+d 797 3 1 0 0
+c
+d 129 4 1 0 0
+c
+d 454 1 0 0 0
+c
+d 455 1 0 0 0
+c
+d 369 1 0 0 0
+c
+d 382 1 0 0 0
+c
+d 753 2 1 0 0
+c
+d 943 1 0 0 0
+c
+d 177 4 1 0 0
+c
+d 343 3 0 0 0
+c
+d 559 1 0 0 0
+c
+d 560 1 0 0 0
+c
+d 525 2 0 0 0
+c
+d 545 1 1 0 0
+c
+d 565 4 0 1 0
+c
+d 507 2 0 1 0
+c
+d 275 2 1 0 0
+c
+d 844 3 0 0 0
+c
+d 507 1 0 1 0
+c
+d 1070 1 0 0 0
+c
+d 1076 2 0 0 0
+c
+d 507 1 0 0 0
+c
+d 557 1 0 0 0
+c
+d 502 4 1 0 0
+c
+d 1030 2 0 0 0
+c
+d 318 2 0 0 0
+c
+d 789 2 0 0 0
+c
+d 990 3 1 0 0
+c
+d 848 3 0 2 0
+c
+d 177 1 0 0 0
+c
+d 180 1 0 0 0
+c
+d 181 1 0 0 0
+c
+d 737 1 1 0 0
+c
+d 740 1 0 0 0
+c
+d 276 4 0 0 0
+c
+d 194 4 0 0 0
+c
+d 4 2 0 1 0
+c
+d 5 2 0 0 0
+c
+d 875 1 0 0 0
+c
+d 876 1 0 0 0
+c
+d 807 1 0 0 0
+c
+d 823 1 0 0 0
+c
+d 217 2 1 0 0
+c
+d 37 3 1 0 0
+c
+d 340 2 0 0 0
+c
+d 276 3 1 0 0
+c
+d 529 1 0 0 0
+c
+d 532 1 0 0 0
+c
+d 878 2 0 0 0
+c
+d 564 3 0 2 0
+c
+d 851 2 0 0 0
+c
+d 840 2 0 0 0
+c
+d 818 3 0 0 0
+c
+d 437 1 0 0 0
+c
+d 457 2 0 0 0
+c
+d 437 1 0 0 0
+c
+d 457 1 0 0 0
+c
+d 458 1 0 0 0
+c
+d 195 1 0 0 0
+c
+d 205 1 1 0 0
+c
+d 806 1 0 0 0
+c
+d 840 2 0 0 0
+c
+d 1170 3 1 0 0
+c
+d 354 3 0 0 0
+c
+d 1078 3 0 0 0
+c
+d 990 2 0 0 0
+c
+d 843 2 0 0 0
+c
+d 1170 1 0 0 0
+c
+d 1172 2 0 1 0
+c
+d 598 1 0 0 0
+c
+d 606 1 0 0 0
+c
+d 153 2 0 1 0
+c
+d 155 1 0 1 0
+c
+d 294 3 0 0 0
+c
+d 749 2 0 0 0
+c
+d 857 1 0 0 0
+c
+d 799 2 1 0 0
+c
+d 799 1 0 0 0
+c
+d 843 1 0 0 0
+c
+d 167 2 0 0 0
+c
+d 1315 1 0 0 0
+c
+d 1318 1 0 0 0
+c
+d 529 2 0 0 0
+c
+d 340 1 0 0 0
+c
+d 343 1 1 0 0
+c
+d 344 1 0 0 0
+c
+d 373 3 0 0 0
+c
+d 7 3 1 0 0
+c
+d 844 1 0 1 0
+c
+d 845 2 0 0 0
+c
+d 1126 1 0 0 0
+c
+d 1127 2 0 0 0
+c
+d 1131 1 0 0 0
+c
+d 242 2 0 0 0
+c
+d 262 1 0 1 0
+c
+d 276 3 0 0 0
+c
+d 301 1 0 1 0
+c
+d 315 1 0 1 0
+c
+d 861 2 0 0 0
+c
+d 799 2 0 0 0
+c
+d 355 1 0 0 0
+c
+d 358 1 0 1 0
+c
+d 299 1 1 0 0
+c
+d 300 2 0 0 0
+c
+d 842 2 0 2 0
+c
+d 842 1 0 0 0
+c
+d 881 1 0 0 0
+c
+d 167 1 0 0 0
+c
+d 1121 1 0 0 0
+c
+d 861 3 1 0 0
+c
+d 910 4 0 0 0
+c
+d 500 1 0 0 0
+c
+d 505 1 0 0 0
+c
+d 1087 4 0 2 0
+c
+d 343 3 1 0 0
+c
+d 806 1 0 0 0
+c
+d 807 1 0 0 0
+c
+d 851 2 0 0 0
+c
+d 852 2 0 0 0
+c
+d 507 2 0 0 0
+c
+d 32 1 0 0 0
+c
+d 1296 1 0 0 0
+c
+d 620 2 0 0 0
+c
+d 632 2 0 0 0
+c
+d 799 4 1 1 0
+c
+d 878 2 0 2 0
+c
+d 842 4 0 1 0
+c
+d 221 1 0 1 0
+c
+d 222 1 1 0 0
+c
+d 1023 4 0 0 0
+c
+d 1323 2 0 0 0
+c
+d 545 2 0 0 0
+c
+d 369 2 0 1 0
+c
+d 372 1 0 0 0
+c
+d 11 2 0 1 0
+c
+d 12 1 1 0 0
+c
+d 1179 2 0 1 0
+c
+d 1181 1 0 0 0
+c
+d 838 3 1 0 0
+c
+d 108 1 0 1 0
+c
+d 111 2 0 1 0
+c
+d 844 3 0 1 0
+c
+d 301 2 0 1 0
+c
+d 133 4 0 0 0
+c
+d 301 2 0 1 0
+c
+d 856 2 0 1 0
+c
+d 1250 2 0 0 0
+c
+d 334 1 0 0 0
+c
+d 335 1 0 0 0
+c
+d 799 1 0 0 0
+c
+d 806 1 0 0 0
+c
+d 129 3 1 0 0
+c
+d 1170 1 0 0 0
+c
+d 1172 1 0 0 0
+c
+d 833 1 0 0 0
+c
+d 842 2 0 1 0
+c
+d 332 3 1 0 0
+c
+d 152 2 0 0 0
+c
+d 153 1 0 0 0
+c
+d 132 1 0 0 0
+c
+d 513 1 1 0 0
+c
+d 523 1 0 0 0
+c
+d 876 1 0 0 0
+c
+d 878 2 0 0 0
+c
+d 775 1 0 0 0
+c
+d 886 2 0 0 0
+c
+d 839 1 0 0 0
+c
+d 842 1 0 0 0
+c
+d 1126 1 0 0 0
+c
+d 1130 1 0 1 0
+c
+d 211 3 1 1 0
+c
+d 806 1 0 0 0
+c
+d 807 2 0 0 0
+c
+d 807 1 0 1 0
+c
+d 824 1 0 0 0
+c
+d 899 1 0 0 0
+c
+d 377 3 0 0 0
+c
+d 301 2 0 2 0
+c
+d 217 3 1 0 0
+c
+d 121 2 0 0 0
+c
+d 124 1 1 0 0
+c
+d 1126 2 1 0 0
+c
+d 753 1 0 0 0
+c
+d 943 2 1 0 0
+c
+d 114 3 0 0 0
+c
+d 276 3 0 0 0
+c
+d 301 2 0 0 0
+c
+d 152 2 0 0 0
+c
+d 769 3 1 0 0
+c
+d 890 3 0 0 0
+c
+d 763 1 0 0 0
+c
+d 764 1 0 0 0
+c
+d 766 1 1 0 0
+c
+d 886 1 0 1 0
+c
+d 888 1 0 1 0
+c
+d 889 1 0 0 0
+c
+d 133 2 0 2 0
+c
+d 294 1 0 0 0
+c
+d 507 4 0 0 0
+c
+d 591 2 1 0 0
+c
+d 592 1 0 1 0
+c
+d 1195 2 0 0 0
+c
+d 133 2 1 0 0
+c
+d 146 1 0 0 0
+c
+d 767 3 0 0 0
+c
+d 840 3 1 0 0
+c
+d 43 1 0 1 0
+c
+d 44 1 0 1 0
+c
+d 146 1 0 0 0
+c
+d 226 1 0 0 0
+c
+d 16 3 0 1 0
+c
+d 211 1 0 0 0
+c
+d 1231 1 0 0 0
+c
+d 133 3 1 0 0
+c
+d 889 4 1 0 0
+c
+d 146 2 0 0 0
+c
+d 769 1 0 1 0
+c
+d 889 2 0 0 0
+c
+d 178 3 0 0 0
+c
+d 875 4 1 0 0
+c
+d 888 2 0 0 0
+c
+d 889 1 1 0 0
+c
+d 1174 3 0 0 0
+c
+d 738 1 0 0 0
+c
+d 750 1 0 0 0
+c
+d 75 1 0 0 0
+c
+d 79 1 1 0 0
+c
+d 84 1 0 0 0
+c
+d 769 2 0 1 0
+c
+d 889 1 0 1 0
+c
+d 1170 1 1 0 0
+c
+d 1173 2 0 0 0
+c
+d 275 4 0 0 0
+c
+d 19 1 0 1 0
+c
+d 979 1 0 0 0
+c
+d 507 3 1 0 0
+c
+d 46 3 1 0 0
+c
+d 1192 2 0 1 0
+c
+d 290 4 0 0 0
+c
+d 354 3 0 0 0
+c
+d 1163 1 0 0 0
+c
+d 1165 1 0 1 0
+c
+d 395 1 0 0 0
+c
+d 396 1 0 0 0
+c
+d 842 2 1 0 0
+c
+d 862 2 0 1 0
+c
+d 511 1 0 0 0
+c
+d 527 2 1 0 0
+c
+d 1195 2 0 0 0
+c
+d 1279 2 0 0 0
+c
+d 1281 1 0 1 0
+c
+d 282 1 0 0 0
+c
+d 287 2 1 0 0
+c
+d 129 2 0 2 0
+c
+d 21 3 1 0 0
+c
+d 338 1 0 0 0
+c
+d 340 1 0 0 0
+c
+d 287 4 1 0 0
+c
+d 167 2 0 0 0
+c
+d 842 1 0 0 0
+c
+d 881 1 0 0 0
+c
+d 276 3 1 0 0
+c
+d 319 3 1 0 0
+c
+d 889 2 0 1 0
+c
+d 890 1 0 1 0
+c
+d 1126 2 0 0 0
+c
+d 287 3 1 0 0
+c
+d 282 1 0 1 0
+c
+d 287 2 0 1 0
+c
+d 1126 3 1 0 0
+c
+d 889 3 0 2 0
+c
+d 167 4 0 0 0
+c
+d 211 3 0 0 0
+c
+d 1060 1 1 0 0
+c
+d 1061 3 1 0 0
+c
+d 205 1 1 0 0
+c
+d 211 1 0 0 0
+c
+d 1239 1 0 0 0
+c
+d 5 1 0 0 0
+c
+d 10 1 0 0 0
+c
+d 769 3 1 0 0
+c
+d 1171 1 0 1 0
+c
+d 1172 1 0 0 0
+c
+d 835 2 0 0 0
+c
+d 838 1 0 1 0
+c
+d 839 2 0 0 0
+c
+d 1125 1 0 0 0
+c
+d 1127 2 0 0 0
+c
+d 156 2 0 0 0
+c
+d 406 1 1 0 0
+c
+d 734 2 1 1 0
+c
+d 736 1 0 0 0
+c
+d 146 1 0 0 0
+c
+d 150 1 0 0 0
+c
+d 169 1 0 1 0
+c
+d 373 1 0 1 0
+c
+d 375 1 0 0 0
+c
+d 324 2 0 1 0
+c
+d 26 1 0 0 0
+c
+d 39 1 0 0 0
+c
+d 305 3 0 0 0
+c
+d 691 1 0 0 0
+c
+d 697 1 0 0 0
+c
+d 340 1 1 0 0
+c
+d 343 3 0 0 0
+c
+d 133 1 0 0 0
+c
+d 134 1 0 1 0
+c
+d 137 1 0 0 0
+c
+d 348 3 1 0 0
+c
+d 737 3 1 0 0
+c
+d 287 4 0 0 0
+c
+d 1127 1 0 0 0
+c
+d 1131 2 1 0 0
+c
+d 199 1 0 0 0
+c
+d 211 2 0 0 0
+c
+d 889 1 0 0 0
+c
+d 890 2 0 0 0
+c
+d 194 1 1 0 0
+c
+d 205 2 0 0 0
+c
+d 132 1 0 1 0
+c
+d 337 1 0 0 0
+c
+d 338 1 0 0 0
+c
+d 551 3 1 0 0
+c
+d 87 2 0 0 0
+c
+d 558 1 0 1 0
+c
+d 565 1 0 0 0
+c
+d 108 3 0 0 0
+c
+d 797 1 0 1 0
+c
+d 799 1 0 1 0
+c
+d 926 2 0 0 0
+c
+d 888 1 0 0 0
+c
+d 889 2 0 1 0
+c
+d 889 2 0 0 0
+c
+d 146 2 0 0 0
+c
+d 119 1 1 0 0
+c
+d 120 1 0 0 0
+c
+d 418 2 1 0 0
+c
+d 419 1 0 0 0
+c
+d 340 2 0 0 0
+c
+d 344 2 0 0 0
+c
+d 153 1 0 0 0
+c
+d 155 1 0 1 0
+c
+d 888 3 1 0 0
+c
+d 888 3 0 2 0
+c
+d 673 3 0 0 0
+c
+d 290 4 0 1 0
+c
+d 1176 3 0 0 0
+c
+d 842 3 1 0 0
+c
+d 152 1 0 1 0
+c
+d 1096 1 0 0 0
+c
+d 604 2 0 2 0
+c
+d 886 1 0 0 0
+c
+d 888 1 0 0 0
+c
+d 892 1 1 0 0
+c
+d 95 2 0 0 0
+c
+d 534 1 1 0 0
+c
+d 540 1 0 0 0
+c
+d 543 1 0 0 0
+c
+d 529 1 0 0 0
+c
+d 532 1 0 0 0
+c
+d 1179 1 0 0 0
+c
+d 1183 1 0 0 0
+c
+d 205 1 0 0 0
+c
+d 1239 2 1 0 0
+c
+d 208 3 0 0 0
+c
+d 213 1 0 1 0
+c
+d 242 1 0 1 0
+c
+d 276 3 0 1 0
+c
+d 787 1 1 0 0
+c
+d 882 2 0 0 0
+c
+d 734 2 0 1 0
+c
+d 21 3 1 0 0
+c
+d 890 4 1 0 0
+c
+d 377 1 0 1 0
+c
+d 378 2 0 1 0
+c
+d 1156 1 0 0 0
+c
+d 1192 1 0 0 0
+c
+d 738 4 0 0 0
+c
+d 318 2 0 1 0
+c
+d 320 1 0 1 0
+c
+d 276 1 0 0 0
+c
+d 290 1 0 0 0
+c
+d 755 4 1 0 0
+c
+d 179 3 0 0 0
+c
+d 806 2 0 0 0
+c
+d 529 3 0 0 0
+c
+d 35 4 0 0 0
+c
+d 87 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 46 3 0 1 0
+c
+d 316 1 0 1 0
+c
+d 317 1 0 0 0
+c
+d 318 1 0 1 0
+c
+d 167 2 0 2 0
+c
+d 1194 3 0 0 0
+c
+d 1172 3 1 0 0
+c
+d 753 1 0 0 0
+c
+d 755 2 1 0 0
+c
+d 862 1 0 0 0
+c
+d 865 1 0 0 0
+c
+d 1080 3 1 0 0
+c
+d 787 2 0 1 0
+c
+d 419 1 0 0 0
+c
+d 1080 1 0 0 0
+c
+d 457 2 0 2 0
+c
+d 323 2 0 0 0
+c
+d 419 1 0 1 0
+c
+d 1080 1 0 1 0
+c
+d 615 3 1 0 0
+c
+d 1084 2 0 2 0
+c
+d 2 1 0 1 0
+c
+d 3 1 0 0 0
+c
+d 12 1 0 1 0
+c
+d 13 1 0 0 0
+c
+d 423 3 0 0 0
+c
+d 316 3 1 0 0
+c
+d 157 1 0 0 0
+c
+d 158 1 0 0 0
+c
+d 457 3 1 0 0
+c
+d 334 2 1 0 0
+c
+d 341 1 0 0 0
+c
+d 145 2 0 0 0
+c
+d 146 1 0 0 0
+c
+d 101 3 1 0 0
+c
+d 273 2 1 0 0
+c
+d 1229 1 0 0 0
+c
+d 132 4 1 0 0
+c
+d 157 3 1 0 0
+c
+d 164 3 1 0 0
+c
+d 101 4 0 1 0
+c
+d 437 3 0 1 0
+c
+d 890 3 0 2 0
+c
+d 424 3 0 0 0
+c
+d 425 1 0 0 0
+c
+d 305 1 0 1 0
+c
+d 353 2 0 1 0
+c
+d 1080 3 1 0 0
+c
+d 427 2 0 0 0
+c
+d 183 4 0 0 0
+c
+d 755 1 0 0 0
+c
+d 759 1 0 0 0
+c
+d 756 1 0 0 0
+c
+d 768 2 1 1 0
+c
+d 604 2 0 1 0
+c
+d 424 2 0 0 0
+c
+d 101 4 0 0 0
+c
+d 164 3 1 0 0
+c
+d 101 2 1 0 0
+c
+d 423 1 0 0 0
+c
+d 424 1 0 0 0
+c
+d 272 4 0 2 0
+c
+d 341 1 0 0 0
+c
+d 348 1 0 0 0
+c
+d 103 2 0 0 0
+c
+d 101 3 1 0 0
+c
+d 301 1 0 0 0
+c
+d 302 1 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 103 1 0 0 0
+c
+d 423 1 0 1 0
+c
+d 424 1 0 0 0
+c
+d 273 4 0 0 0
+c
+d 305 4 0 0 0
+c
+d 353 2 0 2 0
+c
+d 101 3 1 0 0
+c
+d 101 2 0 0 0
+c
+d 424 1 1 0 0
+c
+d 317 1 0 0 0
+c
+d 318 1 0 0 0
+c
+d 1170 2 0 0 0
+c
+d 1174 1 1 0 0
+c
+d 101 1 0 0 0
+c
+d 424 2 0 2 0
+c
+d 799 2 1 0 0
+c
+d 844 1 0 0 0
+c
+d 1083 2 0 0 0
+c
+d 1084 1 1 0 0
+c
+d 318 3 0 0 0
+c
+d 206 1 0 1 0
+c
+d 207 2 0 0 0
+c
+d 691 1 0 0 0
+c
+d 693 1 0 0 0
+c
+d 158 2 0 0 0
+c
+d 1172 2 0 0 0
+c
+d 1192 1 0 0 0
+c
+d 357 2 1 0 0
+c
+d 753 1 0 0 0
+c
+d 755 1 0 1 0
+c
+d 279 2 0 0 0
+c
+d 305 1 0 0 0
+c
+d 499 1 0 1 0
+c
+d 511 2 0 0 0
+c
+d 1170 3 1 0 0
+c
+d 318 3 0 2 0
+c
+d 278 3 1 0 0
+c
+d 157 2 0 0 0
+c
+d 305 1 0 0 0
+c
+d 101 4 1 0 0
+c
+d 7 2 0 0 0
+c
+d 427 1 0 0 0
+c
+d 428 1 0 0 0
+c
+d 608 1 0 0 0
+c
+d 989 1 0 0 0
+c
+d 990 1 0 0 0
+c
+d 767 2 0 0 0
+c
+d 279 4 0 0 0
+c
+d 101 3 1 0 0
+c
+d 305 2 0 0 0
+c
+d 353 1 0 0 0
+c
+d 348 1 0 1 0
+c
+d 407 1 0 1 0
+c
+d 575 2 1 0 0
+c
+d 419 3 1 0 0
+c
+d 101 2 0 0 0
+c
+d 101 2 1 0 0
+c
+d 423 1 0 0 0
+c
+d 274 2 1 0 0
+c
+d 278 1 0 1 0
+c
+d 262 1 0 0 0
+c
+d 271 1 0 0 0
+c
+d 457 2 0 0 0
+c
+d 436 4 0 0 0
+c
+d 460 2 0 0 0
+c
+d 357 2 0 0 0
+c
+d 424 2 0 0 0
+c
+d 419 1 0 1 0
+c
+d 423 2 0 0 0
+c
+d 348 2 0 0 0
+c
+d 423 1 0 1 0
+c
+d 424 1 0 0 0
+c
+d 427 1 0 1 0
+c
+d 262 3 1 0 0
+c
+d 427 1 0 0 0
+c
+d 428 2 0 0 0
+c
+d 157 2 1 0 0
+c
+d 305 1 0 0 0
+c
+d 423 1 0 0 0
+c
+d 430 2 0 0 0
+c
+d 331 3 1 0 0
+c
+d 424 4 1 0 0
+c
+d 274 2 1 0 0
+c
+d 424 2 1 0 0
+c
+d 1079 1 0 0 0
+c
+d 1085 3 1 0 0
+c
+d 436 1 0 0 0
+c
+d 1045 1 0 0 0
+c
+d 341 2 0 2 0
+c
+d 428 1 0 0 0
+c
+d 436 1 0 0 0
+c
+d 101 1 1 0 0
+c
+d 424 2 0 0 0
+c
+d 89 3 1 0 0
+c
+d 305 1 0 1 0
+c
+d 353 1 0 1 0
+c
+d 278 4 1 0 0
+c
+d 424 2 0 0 0
+c
+d 301 3 1 0 0
+c
+d 423 2 0 0 0
+c
+d 584 2 0 0 0
+c
+d 279 1 0 0 0
+c
+d 305 2 1 0 0
+c
+d 424 2 1 0 0
+c
+d 833 2 0 0 0
+c
+d 753 3 0 2 0
+c
+d 321 3 0 0 0
+c
+d 734 2 0 0 0
+c
+d 132 4 1 0 0
+c
+d 341 2 0 2 0
+c
+d 132 1 0 1 0
+c
+d 133 1 0 0 0
+c
+d 337 1 0 1 0
+c
+d 738 4 0 1 0
+c
+d 767 1 0 1 0
+c
+d 890 2 0 1 0
+c
+d 334 1 1 0 0
+c
+d 341 2 0 0 0
+c
+d 430 1 0 0 0
+c
+d 431 1 0 0 0
+c
+d 734 3 0 2 0
+c
+d 262 1 0 1 0
+c
+d 279 2 0 1 0
+c
+d 157 4 0 0 0
+c
+d 749 3 0 0 0
+c
+d 157 2 0 2 0
+c
+d 159 1 0 0 0
+c
+d 157 2 0 0 0
+c
+d 157 1 0 0 0
+c
+d 159 1 0 0 0
+c
+d 436 2 0 0 0
+c
+d 423 4 0 2 0
+c
+d 157 1 0 0 0
+c
+d 159 1 0 0 0
+c
+d 430 1 0 0 0
+c
+d 431 3 1 0 0
+c
+d 691 3 0 0 0
+c
+d 856 2 1 0 0
+c
+d 424 1 0 0 0
+c
+d 427 1 1 0 0
+c
+d 584 1 0 0 0
+c
+d 1149 3 1 0 0
+c
+d 428 1 0 1 0
+c
+d 430 2 0 1 0
+c
+d 457 4 0 0 0
+c
+d 273 2 0 0 0
+c
+d 606 2 0 2 0
+c
+d 578 1 0 1 0
+c
+d 581 1 0 1 0
+c
+d 157 4 0 0 0
+c
+d 1170 4 1 0 0
+c
+d 104 4 0 0 0
+c
+d 749 2 0 0 0
+c
+d 734 2 0 1 0
+c
+d 424 3 1 0 0
+c
+d 318 1 0 1 0
+c
+d 1149 1 0 0 0
+c
+d 315 1 0 0 0
+c
+d 316 1 0 0 0
+c
+d 406 1 0 1 0
+c
+d 411 2 0 1 0
+c
+d 428 1 0 0 0
+c
+d 436 2 0 0 0
+c
+d 101 3 1 0 0
+c
+d 178 1 0 0 0
+c
+d 179 2 0 0 0
+c
+d 101 3 1 0 0
+c
+d 689 2 1 0 0
+c
+d 341 2 0 0 0
+c
+d 1173 1 0 1 0
+c
+d 1174 1 0 1 0
+c
+d 101 3 1 0 0
+c
+d 114 2 0 2 0
+c
+d 530 3 0 0 0
+c
+d 320 3 0 0 0
+c
+d 211 2 0 0 0
+c
+d 511 1 0 0 0
+c
+d 522 1 1 0 0
+c
+d 273 1 0 1 0
+c
+d 287 1 0 1 0
+c
+d 423 1 0 0 0
+c
+d 432 1 0 0 0
+c
+d 101 3 1 0 0
+c
+d 102 1 0 0 0
+c
+d 157 1 0 1 0
+c
+d 159 1 0 0 0
+c
+d 676 1 0 0 0
+c
+d 678 1 0 0 0
+c
+d 662 4 0 0 0
+c
+d 437 1 0 0 0
+c
+d 470 1 0 0 0
+c
+d 157 3 1 0 0
+c
+d 305 2 0 0 0
+c
+d 437 2 0 0 0
+c
+d 428 3 0 0 0
+c
+d 734 2 0 1 0
+c
+d 428 1 0 1 0
+c
+d 430 1 0 1 0
+c
+d 1189 1 0 0 0
+c
+d 1190 1 0 0 0
+c
+d 1009 2 0 0 0
+c
+d 211 2 0 0 0
+c
+d 318 3 0 0 0
+c
+d 114 1 0 1 0
+c
+d 115 2 0 1 0
+c
+d 294 3 1 0 0
+c
+d 87 1 0 0 0
+c
+d 89 2 0 0 0
+c
+d 46 2 0 1 0
+c
+d 47 1 0 1 0
+c
+d 737 2 0 1 0
+c
+d 742 1 0 0 0
+c
+d 102 1 0 0 0
+c
+d 103 2 0 0 0
+c
+d 2 1 0 0 0
+c
+d 287 1 0 1 0
+c
+d 288 1 0 0 0
+c
+d 1083 1 0 0 0
+c
+d 1084 1 0 0 0
+c
+d 1085 3 1 0 0
+c
+d 287 3 0 1 0
+c
+d 323 3 0 0 0
+c
+d 428 2 0 0 0
+c
+d 430 1 1 0 0
+c
+d 101 3 0 1 0
+c
+d 315 4 1 0 0
+c
+d 107 3 0 0 0
+c
+d 129 2 0 0 0
+c
+d 529 2 0 0 0
+c
+d 550 1 0 0 0
+c
+d 799 2 0 0 0
+c
+d 129 3 1 0 0
+c
+d 291 3 1 0 0
+c
+d 893 2 0 0 0
+c
+d 894 1 0 0 0
+c
+d 457 2 0 0 0
+c
+d 262 1 0 1 0
+c
+d 273 2 0 1 0
+c
+d 1083 4 0 2 0
+c
+d 101 1 0 0 0
+c
+d 102 1 0 0 0
+c
+d 128 1 1 0 0
+c
+d 129 2 0 0 0
+c
+d 217 1 0 0 0
+c
+d 241 2 1 0 0
+c
+d 167 2 0 0 0
+c
+d 369 1 1 0 0
+c
+d 242 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 985 2 0 0 0
+c
+d 987 1 0 0 0
+c
+d 620 2 0 1 0
+c
+d 621 1 0 1 0
+c
+d 1105 2 0 2 0
+c
+d 1123 1 0 0 0
+c
+d 167 3 0 0 0
+c
+d 983 4 0 1 0
+c
+d 75 3 0 0 0
+c
+d 4 2 0 0 0
+c
+d 606 4 0 0 0
+c
+d 369 2 1 0 0
+c
+d 391 1 0 0 0
+c
+d 457 3 0 0 0
+c
+d 157 2 0 0 0
+c
+d 134 2 0 0 0
+c
+d 140 1 0 0 0
+c
+d 343 1 0 0 0
+c
+d 344 1 1 0 0
+c
+d 1148 2 0 0 0
+c
+d 1199 3 0 0 0
+c
+d 355 4 0 0 0
+c
+d 1269 3 0 0 0
+c
+d 1176 4 0 0 0
+c
+d 734 1 0 0 0
+c
+d 737 1 0 0 0
+c
+d 39 1 0 0 0
+c
+d 40 1 1 0 0
+c
+d 101 1 0 0 0
+c
+d 102 1 1 0 0
+c
+d 103 1 0 0 0
+c
+d 300 3 0 0 0
+c
+d 11 2 1 0 0
+c
+d 1269 1 0 0 0
+c
+d 5 2 0 1 0
+c
+d 7 1 0 1 0
+c
+d 738 2 0 0 0
+c
+d 1083 3 1 0 0
+c
+d 127 1 0 0 0
+c
+d 129 1 0 0 0
+c
+d 157 2 0 0 0
+c
+d 318 1 0 0 0
+c
+d 321 1 0 0 0
+c
+d 322 1 0 0 0
+c
+d 211 4 1 0 0
+c
+d 132 3 0 2 0
+c
+d 1315 1 0 0 0
+c
+d 1318 2 0 0 0
+c
+d 318 1 0 0 0
+c
+d 320 1 0 0 0
+c
+d 322 1 0 0 0
+c
+d 327 2 1 0 0
+c
+d 753 3 0 2 0
+c
+d 286 2 0 0 0
+c
+d 376 2 0 0 0
+c
+d 697 3 0 0 0
+c
+d 836 2 0 1 0
+c
+d 838 1 0 1 0
+c
+d 132 3 0 0 0
+c
+d 875 3 1 0 0
+c
+d 428 3 0 0 0
+c
+d 371 4 0 0 0
+c
+d 990 3 1 0 0
+c
+d 44 3 1 0 0
+c
+d 468 4 1 0 0
+c
+d 89 1 0 0 0
+c
+d 120 2 1 0 0
+c
+d 183 3 1 0 0
+c
+d 737 1 0 0 0
+c
+d 854 1 0 0 0
+c
+d 878 1 0 0 0
+c
+d 882 1 0 1 0
+c
+d 888 1 0 0 0
+c
+d 130 1 1 0 0
+c
+d 131 1 0 0 0
+c
+d 132 1 0 0 0
+c
+d 6 2 0 0 0
+c
+d 10 1 0 0 0
+c
+d 737 1 0 1 0
+c
+d 854 1 0 1 0
+c
+d 895 1 0 0 0
+c
+d 294 3 1 0 0
+c
+d 318 1 0 0 0
+c
+d 323 1 0 0 0
+c
+d 300 2 0 0 0
+c
+d 314 1 1 0 0
+c
+d 4 3 0 0 0
+c
+d 100 4 1 0 0
+c
+d 738 1 0 0 0
+c
+d 745 3 1 0 0
+c
+d 132 1 0 0 0
+c
+d 1258 1 0 0 0
+c
+d 427 3 0 2 0
+c
+d 1150 1 1 0 0
+c
+d 1152 1 0 0 0
+c
+d 1153 2 0 0 0
+c
+d 320 2 0 2 0
+c
+d 101 4 1 0 0
+c
+d 373 2 0 2 0
+c
+d 262 1 0 0 0
+c
+d 273 1 0 0 0
+c
+d 101 2 0 0 0
+c
+d 1174 3 1 0 0
+c
+d 205 2 0 0 0
+c
+d 1241 1 0 0 0
+c
+d 163 2 0 0 0
+c
+d 294 1 0 0 0
+c
+d 295 1 0 0 0
+c
+d 296 1 0 0 0
+c
+d 1179 1 0 0 0
+c
+d 1183 1 0 0 0
+c
+d 24 1 1 0 0
+c
+d 25 2 0 0 0
+c
+d 423 4 0 1 0
+c
+d 373 2 0 0 0
+c
+d 373 3 1 0 0
+c
+d 1188 4 1 0 0
+c
+d 839 3 0 0 0
+c
+d 411 3 0 1 0
+c
+d 246 2 1 1 0
+c
+d 262 1 0 0 0
+c
+d 132 2 0 0 0
+c
+d 511 1 0 0 0
+c
+d 558 1 0 0 0
+c
+d 559 1 0 0 0
+c
+d 851 2 0 1 0
+c
+d 897 2 0 0 0
+c
+d 511 1 1 0 0
+c
+d 513 1 0 0 0
+c
+d 527 1 0 1 0
+c
+d 301 2 1 1 0
+c
+d 5 2 0 1 0
+c
+d 132 2 0 2 0
+c
+d 1258 1 0 0 0
+c
+d 1179 1 0 0 0
+c
+d 1180 2 1 0 0
+c
+d 753 1 1 0 0
+c
+d 755 1 0 1 0
+c
+d 1086 1 0 0 0
+c
+d 1087 1 0 0 0
+c
+d 661 1 0 0 0
+c
+d 673 1 0 0 0
+c
+d 323 3 1 0 0
+c
+d 301 3 1 0 0
+c
+d 278 3 1 0 0
+c
+d 372 2 0 0 0
+c
+d 373 1 0 0 0
+c
+d 124 3 1 0 0
+c
+d 517 1 0 1 0
+c
+d 518 2 0 1 0
+c
+d 437 2 0 1 0
+c
+d 507 1 0 1 0
+c
+d 559 3 1 0 0
+c
+d 1102 3 1 0 0
+c
+d 743 2 0 0 0
+c
+d 185 3 1 0 0
+c
+d 789 3 1 0 0
+c
+d 371 2 1 0 0
+c
+d 373 1 0 0 0
+c
+d 842 1 0 1 0
+c
+d 878 2 0 1 0
+c
+d 101 2 1 0 0
+c
+d 1087 1 0 0 0
+c
+d 853 1 0 0 0
+c
+d 896 1 0 0 0
+c
+d 373 4 0 0 0
+c
+d 132 1 0 0 0
+c
+d 511 1 0 0 0
+c
+d 511 1 0 0 0
+c
+d 527 1 0 0 0
+c
+d 528 1 0 0 0
+c
+d 532 1 0 0 0
+c
+d 535 1 0 0 0
+c
+d 853 4 1 0 0
+c
+d 558 1 1 0 0
+c
+d 559 2 0 0 0
+c
+d 896 4 0 1 0
+c
+d 458 3 0 0 0
+c
+d 851 2 0 0 0
+c
+d 558 1 0 0 0
+c
+d 559 1 0 0 0
+c
+d 851 1 0 0 0
+c
+d 852 1 0 0 0
+c
+d 133 1 0 0 0
+c
+d 134 1 0 1 0
+c
+d 854 3 1 0 0
+c
+d 120 2 0 1 0
+c
+d 121 1 0 1 0
+c
+d 558 2 0 0 0
+c
+d 559 1 0 0 0
+c
+d 133 2 0 2 0
+c
+d 801 2 1 0 0
+c
+d 802 1 0 0 0
+c
+d 371 4 0 0 0
+c
+d 4 2 0 2 0
+c
+d 737 4 0 0 0
+c
+d 5 2 0 2 0
+c
+d 373 2 0 0 0
+c
+d 743 2 1 1 0
+c
+d 276 1 0 1 0
+c
+d 290 1 0 0 0
+c
+d 799 1 0 1 0
+c
+d 803 1 0 1 0
+c
+d 878 1 0 0 0
+c
+d 879 1 0 0 0
+c
+d 374 3 0 0 0
+c
+d 570 1 0 0 0
+c
+d 572 2 1 1 0
+c
+d 532 4 1 0 0
+c
+d 879 2 0 0 0
+c
+d 507 1 1 0 0
+c
+d 558 2 0 0 0
+c
+d 177 1 0 0 0
+c
+d 181 2 0 0 0
+c
+d 377 1 0 0 0
+c
+d 379 1 0 0 0
+c
+d 558 4 0 1 0
+c
+d 262 1 0 0 0
+c
+d 278 1 0 0 0
+c
+d 44 1 0 0 0
+c
+d 46 1 0 0 0
+c
+d 875 2 0 0 0
+c
+d 270 3 0 2 0
+c
+d 176 1 0 0 0
+c
+d 180 2 1 0 0
+c
+d 324 2 0 0 0
+c
+d 325 1 1 0 0
+c
+d 324 1 0 0 0
+c
+d 325 2 1 0 0
+c
+d 32 1 0 1 0
+c
+d 1318 1 0 1 0
+c
+d 178 1 0 1 0
+c
+d 182 2 0 1 0
+c
+d 132 1 0 1 0
+c
+d 511 1 0 1 0
+c
+d 558 1 0 1 0
+c
+d 565 1 0 0 0
+c
+d 566 1 0 0 0
+c
+d 315 4 1 0 0
+c
+d 115 3 1 1 0
+c
+d 5 1 0 0 0
+c
+d 6 1 0 1 0
+c
+d 334 2 0 0 0
+c
+d 1196 3 1 0 0
+c
+d 167 1 0 1 0
+c
+d 369 1 0 0 0
+c
+d 353 4 1 0 0
+c
+d 86 2 1 0 0
+c
+d 1293 1 0 0 0
+c
+d 511 3 1 0 0
+c
+d 512 1 0 0 0
+c
+d 593 4 1 0 0
+c
+d 876 1 1 0 0
+c
+d 878 2 0 0 0
+c
+d 507 2 0 1 0
+c
+d 1070 1 0 0 0
+c
+d 559 1 0 0 0
+c
+d 560 1 0 0 0
+c
+d 5 1 0 0 0
+c
+d 6 1 0 0 0
+c
+d 384 1 0 0 0
+c
+d 386 1 0 1 0
+c
+d 1132 1 0 0 0
+c
+d 1195 3 1 0 0
+c
+d 208 4 0 1 0
+c
+d 558 2 0 0 0
+c
+d 848 1 0 1 0
+c
+d 852 1 0 0 0
+c
+d 861 1 0 1 0
+c
+d 699 4 0 0 0
+c
+d 851 3 1 0 0
+c
+d 167 1 0 0 0
+c
+d 369 2 0 0 0
+c
+d 1060 1 0 0 0
+c
+d 1062 2 0 0 0
+c
+d 169 1 0 0 0
+c
+d 375 1 0 0 0
+c
+d 376 1 0 0 0
+c
+d 529 1 0 0 0
+c
+d 1061 1 0 0 0
+c
+d 753 2 0 0 0
+c
+d 857 1 0 0 0
+c
+d 697 3 1 1 0
+c
+d 19 3 1 1 0
+c
+d 167 3 1 0 0
+c
+d 1126 1 0 0 0
+c
+d 1127 1 0 0 0
+c
+d 1131 1 0 0 0
+c
+d 133 2 0 0 0
+c
+d 875 3 0 0 0
+c
+d 301 1 1 0 0
+c
+d 1156 2 0 0 0
+c
+d 842 1 0 0 0
+c
+d 875 1 0 0 0
+c
+d 7 1 0 0 0
+c
+d 1284 1 0 0 0
+c
+d 167 2 1 0 0
+c
+d 369 1 0 0 0
+c
+d 753 1 0 0 0
+c
+d 859 1 0 0 0
+c
+d 133 2 0 1 0
+c
+d 323 1 0 1 0
+c
+d 28 1 0 0 0
+c
+d 29 1 0 0 0
+c
+d 234 3 0 0 0
+c
+d 954 4 0 0 0
+c
+d 392 3 0 0 0
+c
+d 157 2 0 0 0
+c
+d 507 2 0 0 0
+c
+d 343 3 1 0 0
+c
+d 301 1 1 0 0
+c
+d 302 2 0 0 0
+c
+d 457 3 0 1 0
+c
+d 838 2 0 0 0
+c
+d 852 1 0 0 0
+c
+d 853 2 1 0 0
+c
+d 878 2 0 0 0
+c
+d 564 1 0 0 0
+c
+d 789 2 1 0 0
+c
+d 18 2 0 0 0
+c
+d 114 1 0 0 0
+c
+d 115 2 1 0 0
+c
+d 1269 3 1 0 0
+c
+d 194 1 0 0 0
+c
+d 205 1 0 0 0
+c
+d 697 2 1 0 0
+c
+d 716 1 0 0 0
+c
+d 194 2 0 0 0
+c
+d 1105 1 0 0 0
+c
+d 1106 2 0 0 0
+c
+d 1269 2 0 0 0
+c
+d 507 2 0 1 0
+c
+d 44 2 0 0 0
+c
+d 1070 2 1 0 0
+c
+d 1045 3 1 1 0
+c
+d 393 3 0 0 0
+c
+d 621 1 0 1 0
+c
+d 622 2 0 1 0
+c
+d 302 1 1 0 0
+c
+d 1156 1 0 0 0
+c
+d 1157 1 0 0 0
+c
+d 437 3 0 0 0
+c
+d 133 1 0 1 0
+c
+d 323 1 0 0 0
+c
+d 324 2 0 1 0
+c
+d 843 1 0 0 0
+c
+d 844 1 0 0 0
+c
+d 889 4 0 0 0
+c
+d 16 3 1 0 0
+c
+d 383 1 0 1 0
+c
+d 384 1 0 1 0
+c
+d 529 2 0 0 0
+c
+d 530 1 0 0 0
+c
+d 799 2 1 0 0
+c
+d 1196 4 1 0 0
+c
+d 169 1 0 0 0
+c
+d 1136 1 0 0 0
+c
+d 21 1 0 1 0
+c
+d 1026 1 0 0 0
+c
+d 1027 1 0 1 0
+c
+d 178 1 0 1 0
+c
+d 181 1 0 1 0
+c
+d 507 1 1 0 0
+c
+d 558 2 0 0 0
+c
+d 1062 3 1 0 0
+c
+d 299 1 0 1 0
+c
+d 300 2 0 1 0
+c
+d 1083 2 0 0 0
+c
+d 315 4 0 0 0
+c
+d 890 2 0 0 0
+c
+d 799 3 1 0 0
+c
+d 769 1 0 0 0
+c
+d 889 1 0 0 0
+c
+d 278 3 1 0 0
+c
+d 817 1 0 0 0
+c
+d 818 2 0 0 0
+c
+d 819 1 0 0 0
+c
+d 878 3 0 2 0
+c
+d 888 3 0 0 0
+c
+d 368 2 0 0 0
+c
+d 767 2 0 0 0
+c
+d 529 1 0 0 0
+c
+d 550 1 0 0 0
+c
+d 278 4 1 0 0
+c
+d 767 1 0 0 0
+c
+d 890 2 0 1 0
+c
+d 807 1 0 0 0
+c
+d 839 1 1 0 0
+c
+d 840 1 0 0 0
+c
+d 133 2 0 0 0
+c
+d 838 2 0 0 0
+c
+d 839 1 1 0 0
+c
+d 852 2 0 0 0
+c
+d 262 2 0 1 0
+c
+d 270 1 0 0 0
+c
+d 130 2 0 0 0
+c
+d 86 3 0 0 0
+c
+d 375 1 0 0 0
+c
+d 376 2 1 0 0
+c
+d 558 1 0 0 0
+c
+d 559 1 0 0 0
+c
+d 272 1 0 1 0
+c
+d 273 1 0 1 0
+c
+d 799 2 0 0 0
+c
+d 557 3 0 0 0
+c
+d 1168 1 1 0 0
+c
+d 1179 1 0 0 0
+c
+d 558 2 0 0 0
+c
+d 621 1 0 0 0
+c
+d 622 1 0 0 0
+c
+d 146 2 0 1 0
+c
+d 150 1 0 1 0
+c
+d 444 3 0 0 0
+c
+d 558 3 0 0 0
+c
+d 559 1 1 0 0
+c
+d 839 1 0 0 0
+c
+d 842 1 0 0 0
+c
+d 775 4 1 0 0
+c
+d 167 2 0 0 0
+c
+d 886 3 1 0 0
+c
+d 205 2 0 0 0
+c
+d 1239 1 1 0 0
+c
+d 889 2 0 0 0
+c
+d 1165 1 0 1 0
+c
+d 1167 3 0 0 0
+c
+d 507 1 0 0 0
+c
+d 558 2 1 0 0
+c
+d 301 4 0 0 0
+c
+d 1191 3 0 0 0
+c
+d 1166 3 0 0 0
+c
+d 89 1 0 0 0
+c
+d 120 1 0 0 0
+c
+d 168 2 0 1 0
+c
+d 392 1 0 1 0
+c
+d 1126 2 0 1 0
+c
+d 437 3 1 0 0
+c
+d 973 3 0 1 0
+c
+d 878 2 0 0 0
+c
+d 262 1 0 0 0
+c
+d 278 1 0 0 0
+c
+d 865 2 0 0 0
+c
+d 382 2 0 0 0
+c
+d 343 3 0 2 0
+c
+d 12 1 0 1 0
+c
+d 1270 2 0 1 0
+c
+d 164 2 0 0 0
+c
+d 368 1 0 0 0
+c
+d 276 4 1 0 0
+c
+d 168 4 0 1 0
+c
+d 843 1 0 0 0
+c
+d 844 1 0 0 0
+c
+d 1184 3 1 1 0
+c
+d 1209 1 0 0 0
+c
+d 21 2 0 0 0
+c
+d 836 3 0 0 0
+c
+d 276 1 0 1 0
+c
+d 289 1 0 1 0
+c
+d 302 1 0 0 0
+c
+d 303 2 1 0 0
+c
+d 606 1 0 0 0
+c
+d 608 1 1 0 0
+c
+d 1041 1 0 0 0
+c
+d 429 3 0 0 0
+c
+d 146 4 0 0 0
+c
+d 535 1 0 0 0
+c
+d 536 1 1 0 0
+c
+d 537 1 0 0 0
+c
+d 919 4 1 1 0
+c
+d 1144 3 0 0 0
+c
+d 919 2 1 0 0
+c
+d 934 1 0 0 0
+c
+d 564 2 0 0 0
+c
+d 861 2 1 0 0
+c
+d 862 1 0 0 0
+c
+d 348 3 0 2 0
+c
+d 168 3 1 0 0
+c
+d 606 2 1 1 0
+c
+d 507 1 0 0 0
+c
+d 1070 1 0 0 0
+c
+d 156 2 1 0 0
+c
+d 120 2 0 0 0
+c
+d 127 1 0 0 0
+c
+d 767 2 0 0 0
+c
+d 278 2 0 0 0
+c
+d 164 1 0 0 0
+c
+d 167 1 0 0 0
+c
+d 277 3 1 0 0
+c
+d 1008 2 1 0 0
+c
+d 1080 1 0 1 0
+c
+d 1083 2 0 1 0
+c
+d 437 3 1 0 0
+c
+d 785 1 0 0 0
+c
+d 1158 1 0 0 0
+c
+d 1163 1 0 0 0
+c
+d 693 2 1 0 0
+c
+d 1194 1 0 0 0
+c
+d 1203 1 0 0 0
+c
+d 768 2 0 0 0
+c
+d 769 1 0 0 0
+c
+d 575 2 0 0 0
+c
+d 46 1 1 0 0
+c
+d 75 2 0 0 0
+c
+d 278 2 0 0 0
+c
+d 368 2 0 2 0
+c
+d 1126 1 0 0 0
+c
+d 32 1 0 0 0
+c
+d 34 1 0 0 0
+c
+d 120 1 0 0 0
+c
+d 127 2 1 0 0
+c
+d 854 3 1 0 0
+c
+d 895 1 0 0 0
+c
+d 315 1 0 0 0
+c
+d 316 1 0 0 0
+c
+d 100 1 0 1 0
+c
+d 101 1 0 1 0
+c
+d 288 3 0 1 0
+c
+d 276 1 0 0 0
+c
+d 287 1 0 1 0
+c
+d 288 1 0 1 0
+c
+d 318 1 0 0 0
+c
+d 324 1 0 0 0
+c
+d 1013 2 0 0 0
+c
+d 1033 2 0 1 0
+c
+d 738 2 0 2 0
+c
+d 152 3 0 1 0
+c
+d 262 4 1 0 0
+c
+d 101 3 0 0 0
+c
+d 1195 4 0 0 0
+c
+d 622 1 0 1 0
+c
+d 626 1 1 0 0
+c
+d 120 3 1 0 0
+c
+d 315 2 0 0 0
+c
+d 157 1 0 0 0
+c
+d 162 2 0 0 0
+c
+d 278 2 0 0 0
+c
+d 1170 1 0 0 0
+c
+d 288 2 1 0 0
+c
+d 291 1 0 0 0
+c
+d 135 3 1 1 0
+c
+d 564 2 0 0 0
+c
+d 12 1 0 0 0
+c
+d 89 1 1 0 0
+c
+d 1266 1 0 0 0
+c
+d 1267 1 0 0 0
+c
+d 157 2 0 1 0
+c
+d 242 1 0 1 0
+c
+d 305 2 0 0 0
+c
+d 306 1 1 0 0
+c
+d 1241 2 0 1 0
+c
+d 1242 1 0 1 0
+c
+d 168 2 0 0 0
+c
+d 132 2 0 0 0
+c
+d 273 4 0 0 0
+c
+d 755 3 1 0 0
+c
+d 101 3 1 0 0
+c
+d 155 2 0 0 0
+c
+d 368 1 0 1 0
+c
+d 1125 2 0 1 0
+c
+d 338 1 0 0 0
+c
+d 340 1 0 0 0
+c
+d 12 2 0 2 0
+c
+d 1080 3 1 0 0
+c
+d 287 2 0 1 0
+c
+d 159 1 0 0 0
+c
+d 183 1 0 0 0
+c
+d 101 2 0 0 0
+c
+d 183 3 1 0 0
+c
+d 315 2 0 0 0
+c
+d 278 1 0 1 0
+c
+d 1170 2 0 1 0
+c
+d 763 1 1 0 0
+c
+d 767 2 0 0 0
+c
+d 529 1 0 0 0
+c
+d 532 2 1 0 0
+c
+d 101 2 0 1 0
+c
+d 101 4 0 0 0
+c
+d 86 3 0 1 0
+c
+d 300 1 0 0 0
+c
+d 314 2 0 0 0
+c
+d 1165 2 1 0 0
+c
+d 424 3 0 0 0
+c
+d 211 1 0 0 0
+c
+d 215 2 0 0 0
+c
+d 216 1 0 0 0
+c
+d 132 3 1 0 0
+c
+d 1048 2 1 0 0
+c
+d 278 1 0 0 0
+c
+d 1170 2 1 0 0
+c
+d 763 1 0 0 0
+c
+d 767 1 0 0 0
+c
+d 1085 2 0 0 0
+c
+d 318 4 1 0 0
+c
+d 157 3 1 0 0
+c
+d 26 2 0 2 0
+c
+d 167 3 0 0 0
+c
+d 1163 2 0 2 0
+c
+d 157 2 0 1 0
+c
+d 159 1 0 1 0
+c
+d 101 3 0 0 0
+c
+d 104 1 0 0 0
+c
+d 101 2 1 0 0
+c
+d 101 1 0 0 0
+c
+d 104 2 1 0 0
+c
+d 101 1 0 0 0
+c
+d 103 1 0 0 0
+c
+d 157 4 0 0 0
+c
+d 423 1 0 0 0
+c
+d 429 1 0 0 0
+c
+d 432 1 1 0 0
+c
+d 101 1 0 0 0
+c
+d 423 2 1 0 0
+c
+d 157 3 0 0 0
+c
+d 423 2 0 0 0
+c
+d 133 1 0 0 0
+c
+d 332 1 0 0 0
+c
+d 337 1 1 0 0
+c
+d 101 4 1 0 0
+c
+d 334 3 0 2 0
+c
+d 423 3 0 2 0
+c
+d 1080 2 0 0 0
+c
+d 423 1 0 0 0
+c
+d 424 2 0 2 0
+c
+d 318 1 0 0 0
+c
+d 324 2 1 0 0
+c
+d 1080 3 0 2 0
+c
+d 428 1 0 0 0
+c
+d 430 2 1 0 0
+c
+d 423 3 1 0 0
+c
+d 157 2 0 0 0
+c
+d 606 3 0 2 0
+c
+d 215 1 0 0 0
+c
+d 221 1 0 0 0
+c
+d 1233 1 0 0 0
+c
+d 753 3 1 0 0
+c
+d 755 1 0 0 0
+c
+d 101 2 0 0 0
+c
+d 324 4 0 2 0
+c
+d 584 4 1 0 0
+c
+d 262 4 0 0 0
+c
+d 1080 1 0 1 0
+c
+d 1082 3 1 0 0
+c
+d 1080 3 1 0 0
+c
+d 101 2 0 2 0
+c
+d 104 1 0 0 0
+c
+d 423 2 0 0 0
+c
+d 799 1 0 0 0
+c
+d 915 1 0 0 0
+c
+d 120 3 0 1 0
+c
+d 273 1 0 0 0
+c
+d 287 1 0 0 0
+c
+d 318 3 0 2 0
+c
+d 101 4 0 0 0
+c
+d 1170 1 0 0 0
+c
+d 1173 2 0 0 0
+c
+d 423 4 1 0 0
+c
+d 318 1 0 0 0
+c
+d 321 1 0 0 0
+c
+d 101 3 1 0 0
+c
+d 324 1 0 0 0
+c
+d 325 1 0 0 0
+c
+d 878 2 0 0 0
+c
+d 879 1 0 0 0
+c
+d 30 2 0 0 0
+c
+d 423 4 1 0 0
+c
+d 159 2 0 0 0
+c
+d 183 1 1 0 0
+c
+d 291 1 0 0 0
+c
+d 300 1 0 0 0
+c
+d 457 1 0 0 0
+c
+d 460 2 0 0 0
+c
+d 101 3 1 0 0
+c
+d 1083 1 0 0 0
+c
+d 1084 1 0 0 0
+c
+d 1177 1 0 0 0
+c
+d 1184 1 1 0 0
+c
+d 133 1 0 0 0
+c
+d 331 1 0 0 0
+c
+d 332 2 0 0 0
+c
+d 157 1 0 1 0
+c
+d 279 1 0 1 0
+c
+d 305 1 0 0 0
+c
+d 101 2 0 2 0
+c
+d 1081 1 0 0 0
+c
+d 1080 3 1 0 0
+c
+d 753 2 0 2 0
+c
+d 101 1 1 0 0
+c
+d 1080 1 0 0 0
+c
+d 1081 1 0 0 0
+c
+d 423 1 0 0 0
+c
+d 427 2 1 0 0
+c
+d 1080 2 0 0 0
+c
+d 1170 1 0 0 0
+c
+d 1185 1 0 0 0
+c
+d 324 2 1 0 0
+c
+d 332 1 0 0 0
+c
+d 101 3 0 2 0
+c
+d 101 2 0 0 0
+c
+d 103 1 1 0 0
+c
+d 423 3 0 2 0
+c
+d 1170 1 0 0 0
+c
+d 1185 2 0 0 0
+c
+d 315 2 0 0 0
+c
+d 1170 3 1 0 0
+c
+d 273 3 0 0 0
+c
+d 274 1 0 0 0
+c
+d 430 1 0 0 0
+c
+d 431 1 0 0 0
+c
+d 436 2 0 0 0
+c
+d 300 1 1 0 0
+c
+d 314 1 0 0 0
+c
+d 315 1 0 0 0
+c
+d 301 2 1 0 0
+c
+d 313 2 0 0 0
+c
+d 324 1 0 0 0
+c
+d 1149 1 0 0 0
+c
+d 348 5 1 0 0
+c
+d 734 2 0 1 0
+c
+d 101 4 1 0 0
+c
+d 104 3 0 0 0
+c
+d 318 2 0 1 0
+c
+d 262 4 1 0 0
+c
+d 575 2 0 1 0
+c
+d 796 1 1 0 0
+c
+d 262 1 0 1 0
+c
+d 273 1 0 1 0
+c
+d 755 3 0 0 0
+c
+d 157 3 1 0 0
+c
+d 301 3 0 2 0
+c
+d 323 2 0 0 0
+c
+d 127 2 0 2 0
+c
+d 129 1 0 0 0
+c
+d 101 3 1 0 0
+c
+d 133 2 0 2 0
+c
+d 134 1 0 0 0
+c
+d 127 2 0 1 0
+c
+d 128 1 1 0 0
+c
+d 157 2 0 0 0
+c
+d 686 2 0 0 0
+c
+d 458 2 0 0 0
+c
+d 85 1 0 0 0
+c
+d 1277 1 0 0 0
+c
+d 5 3 0 0 0
+c
+d 429 1 1 0 0
+c
+d 432 2 0 0 0
+c
+d 109 1 0 1 0
+c
+d 110 2 0 1 0
+c
+d 133 1 1 0 0
+c
+d 134 1 0 0 0
+c
+d 140 1 0 0 0
+c
+d 428 1 0 1 0
+c
+d 430 1 0 0 0
+c
+d 1168 2 0 1 0
+c
+d 1176 1 1 0 0
+c
+d 1080 2 1 0 0
+c
+d 1081 1 0 0 0
+c
+d 318 2 0 2 0
+c
+d 321 1 0 0 0
+c
+d 168 2 0 1 0
+c
+d 369 1 0 1 0
+c
+d 101 1 0 0 0
+c
+d 102 1 0 0 0
+c
+d 1045 3 0 0 0
+c
+d 133 2 0 0 0
+c
+d 536 3 0 0 0
+c
+d 183 2 0 0 0
+c
+d 575 2 0 0 0
+c
+d 796 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 270 1 0 0 0
+c
+d 424 4 1 0 0
+c
+d 6 1 0 1 0
+c
+d 10 1 0 1 0
+c
+d 93 2 1 0 0
+c
+d 95 1 0 0 0
+c
+d 134 3 1 0 0
+c
+d 138 1 0 0 0
+c
+d 168 2 0 0 0
+c
+d 273 1 0 0 0
+c
+d 274 1 1 0 0
+c
+d 276 1 0 0 0
+c
+d 273 3 1 0 0
+c
+d 734 2 0 1 0
+c
+d 724 1 0 0 0
+c
+d 734 1 0 1 0
+c
+d 944 2 1 0 0
+c
+d 262 1 0 0 0
+c
+d 271 2 0 0 0
+c
+d 1 2 0 0 0
+c
+d 1323 1 1 0 0
+c
+d 46 1 0 1 0
+c
+d 278 3 1 0 0
+c
+d 133 2 1 0 0
+c
+d 323 1 0 0 0
+c
+d 735 2 0 0 0
+c
+d 737 1 1 0 0
+c
+d 134 1 0 0 0
+c
+d 136 1 0 1 0
+c
+d 138 2 0 1 0
+c
+d 327 1 0 0 0
+c
+d 328 1 0 0 0
+c
+d 353 1 1 0 0
+c
+d 749 1 0 1 0
+c
+d 751 2 0 1 0
+c
+d 1084 2 0 0 0
+c
+d 318 2 0 0 0
+c
+d 99 1 0 0 0
+c
+d 100 2 1 0 0
+c
+d 423 1 0 0 0
+c
+d 1080 2 0 0 0
+c
+d 863 1 1 0 0
+c
+d 875 1 0 0 0
+c
+d 876 1 0 0 0
+c
+d 157 2 0 0 0
+c
+d 155 2 0 2 0
+c
+d 278 3 1 0 0
+c
+d 273 1 1 0 0
+c
+d 276 1 0 0 0
+c
+d 1229 1 0 0 0
+c
+d 133 1 0 0 0
+c
+d 331 2 1 0 0
+c
+d 278 3 0 2 0
+c
+d 455 2 0 2 0
+c
+d 1149 3 0 1 0
+c
+d 4 1 1 0 0
+c
+d 6 1 0 0 0
+c
+d 12 1 0 0 0
+c
+d 262 2 0 0 0
+c
+d 32 2 0 0 0
+c
+d 33 5 2 0 0
+c
+d 157 4 1 0 0
+c
+d 101 2 0 0 0
+c
+d 101 1 0 1 0
+c
+d 109 3 1 0 0
+c
+d 842 3 0 0 0
+c
+d 21 3 0 0 0
+c
+d 1084 1 0 0 0
+c
+d 1085 1 0 0 0
+c
+d 340 3 1 0 0
+c
+d 262 2 0 0 0
+c
+d 1168 2 0 0 0
+c
+d 1194 3 1 0 0
+c
+d 733 1 0 0 0
+c
+d 734 1 0 0 0
+c
+d 769 2 0 0 0
+c
+d 1313 1 0 1 0
+c
+d 355 1 0 0 0
+c
+d 357 1 0 0 0
+c
+d 86 3 0 2 0
+c
+d 458 2 0 0 0
+c
+d 1195 2 0 0 0
+c
+d 662 1 0 0 0
+c
+d 667 2 0 1 0
+c
+d 146 3 0 2 0
+c
+d 152 1 0 0 0
+c
+d 153 1 0 0 0
+c
+d 183 2 0 0 0
+c
+d 172 4 1 0 0
+c
+d 4 3 0 1 0
+c
+d 1156 1 0 1 0
+c
+d 1184 1 0 1 0
+c
+d 301 3 0 2 0
+c
+d 276 3 1 0 0
+c
+d 735 1 0 0 0
+c
+d 737 2 1 0 0
+c
+d 273 1 0 1 0
+c
+d 274 1 0 0 0
+c
+d 275 1 0 1 0
+c
+d 599 1 0 0 0
+c
+d 606 3 1 0 0
+c
+d 6 4 1 0 0
+c
+d 443 1 0 0 0
+c
+d 444 2 0 2 0
+c
+d 129 2 0 0 0
+c
+d 879 4 0 0 0
+c
+d 1241 2 0 1 0
+c
+d 1170 2 0 0 0
+c
+d 1174 1 0 1 0
+c
+d 167 1 0 0 0
+c
+d 369 1 0 0 0
+c
+d 132 2 1 1 0
+c
+d 795 2 0 0 0
+c
+d 662 3 0 0 0
+c
+d 242 2 1 0 0
+c
+d 245 1 0 0 0
+c
+d 1195 2 1 0 0
+c
+d 1196 1 0 0 0
+c
+d 753 2 0 0 0
+c
+d 943 1 0 0 0
+c
+d 1045 3 0 2 0
+c
+d 221 2 0 0 0
+c
+d 168 2 0 0 0
+c
+d 167 2 0 2 0
+c
+d 369 1 0 0 0
+c
+d 19 1 0 1 0
+c
+d 966 1 0 1 0
+c
+d 357 3 0 1 0
+c
+d 1185 1 0 0 0
+c
+d 1192 1 0 0 0
+c
+d 878 4 1 0 0
+c
+d 734 1 0 0 0
+c
+d 772 2 0 0 0
+c
+d 382 4 0 0 0
+c
+d 456 2 0 0 0
+c
+d 522 3 0 0 0
+c
+d 146 3 0 2 0
+c
+d 278 3 0 0 0
+c
+d 74 3 0 0 0
+c
+d 133 3 0 2 0
+c
+d 844 1 0 0 0
+c
+d 851 1 0 0 0
+c
+d 897 2 0 0 0
+c
+d 300 2 0 2 0
+c
+d 315 1 0 0 0
+c
+d 748 1 1 0 0
+c
+d 749 2 0 0 0
+c
+d 129 2 0 0 0
+c
+d 130 1 1 0 0
+c
+d 787 1 0 0 0
+c
+d 735 1 0 0 0
+c
+d 737 1 0 0 0
+c
+d 844 3 1 0 0
+c
+d 1165 1 0 0 0
+c
+d 1168 2 1 1 0
+c
+d 842 2 0 0 0
+c
+d 875 1 0 0 0
+c
+d 252 3 1 0 0
+c
+d 133 3 0 0 0
+c
+d 592 3 0 1 0
+c
+d 168 1 0 0 0
+c
+d 373 1 0 1 0
+c
+d 801 3 0 2 0
+c
+d 89 3 1 0 0
+c
+d 525 2 1 0 0
+c
+d 534 1 0 0 0
+c
+d 1073 1 0 0 0
+c
+d 1074 1 1 0 0
+c
+d 1269 2 1 0 0
+c
+d 875 2 0 0 0
+c
+d 1195 1 1 0 0
+c
+d 1196 2 0 0 0
+c
+d 371 1 0 1 0
+c
+d 373 1 0 1 0
+c
+d 651 2 1 0 0
+c
+d 143 2 0 0 0
+c
+d 262 1 0 0 0
+c
+d 278 2 0 0 0
+c
+d 507 2 0 0 0
+c
+d 775 4 1 0 0
+c
+d 851 2 0 0 0
+c
+d 938 2 1 0 0
+c
+d 51 2 1 0 0
+c
+d 262 2 0 0 0
+c
+d 842 1 1 0 0
+c
+d 844 1 0 0 0
+c
+d 848 1 0 0 0
+c
+d 767 2 0 0 0
+c
+d 888 1 0 0 0
+c
+d 606 1 0 0 0
+c
+d 635 2 0 0 0
+c
+d 851 3 0 0 0
+c
+d 374 1 1 0 0
+c
+d 377 2 0 0 0
+c
+d 507 1 0 0 0
+c
+d 558 1 0 0 0
+c
+d 733 1 0 0 0
+c
+d 734 1 0 1 0
+c
+d 736 1 0 1 0
+c
+d 842 1 1 0 0
+c
+d 849 1 0 1 0
+c
+d 850 2 0 0 0
+c
+d 851 3 0 0 0
+c
+d 775 1 0 0 0
+c
+d 777 1 0 1 0
+c
+d 840 2 0 0 0
+c
+d 558 1 0 0 0
+c
+d 559 1 0 0 0
+c
+d 767 3 1 0 0
+c
+d 851 3 1 0 0
+c
+d 54 2 0 0 0
+c
+d 60 1 0 0 0
+c
+d 167 3 1 1 0
+c
+d 799 1 0 0 0
+c
+d 842 1 0 0 0
+c
+d 93 1 0 0 0
+c
+d 95 1 0 0 0
+c
+d 861 3 0 0 0
+c
+d 1195 1 0 0 0
+c
+d 1196 1 0 0 0
+c
+d 436 2 0 2 0
+c
+d 372 1 0 0 0
+c
+d 373 2 1 0 0
+c
+d 768 3 0 1 0
+c
+d 120 1 0 0 0
+c
+d 124 1 1 0 0
+c
+d 592 4 1 0 0
+c
+d 334 3 1 0 0
+c
+d 848 1 1 0 0
+c
+d 851 1 0 0 0
+c
+d 167 2 0 0 0
+c
+d 167 4 0 0 0
+c
+d 852 2 0 0 0
+c
+d 315 3 0 0 0
+c
+d 334 2 1 1 0
+c
+d 111 4 0 0 0
+c
+d 369 1 0 1 0
+c
+d 372 2 0 0 0
+c
+d 594 2 0 2 0
+c
+d 959 1 0 0 0
+c
+d 852 2 1 0 0
+c
+d 861 1 0 0 0
+c
+d 842 1 0 0 0
+c
+d 848 1 0 0 0
+c
+d 1318 3 0 0 0
+c
+d 324 3 0 0 0
+c
+d 886 3 1 0 0
+c
+d 369 4 0 0 0
+c
+d 673 2 0 1 0
+c
+d 675 2 0 0 0
+c
+d 594 2 0 2 0
+c
+d 101 4 0 0 0
+c
+d 1173 2 0 0 0
+c
+d 301 2 0 2 0
+c
+d 891 4 0 0 0
+c
+d 286 2 1 0 0
+c
+d 288 1 0 0 0
+c
+d 2 1 0 0 0
+c
+d 16 1 0 0 0
+c
+d 757 1 0 0 0
+c
+d 763 2 1 0 0
+c
+d 1237 3 1 0 0
+c
+d 530 2 0 0 0
+c
+d 1195 4 1 0 0
+c
+d 534 4 0 0 0
+c
+d 132 1 0 0 0
+c
+d 133 2 0 0 0
+c
+d 1278 1 0 0 0
+c
+d 1283 1 0 0 0
+c
+d 65 2 0 0 0
+c
+d 889 1 0 0 0
+c
+d 891 2 0 0 0
+c
+d 592 1 0 1 0
+c
+d 594 2 0 1 0
+c
+d 840 3 1 0 0
+c
+d 931 4 1 1 0
+c
+d 737 3 1 0 0
+c
+d 565 2 0 0 0
+c
+d 889 3 0 0 0
+c
+d 373 2 0 1 0
+c
+d 148 2 1 1 0
+c
+d 234 1 0 0 0
+c
+d 52 3 1 0 0
+c
+d 383 2 1 0 0
+c
+d 1172 2 1 1 0
+c
+d 1185 1 0 0 0
+c
+d 133 3 0 2 0
+c
+d 280 1 0 0 0
+c
+d 281 1 0 0 0
+c
+d 789 3 1 0 0
+c
+d 849 3 1 0 0
+c
+d 1163 3 0 0 0
+c
+d 1170 1 0 0 0
+c
+d 1174 1 0 0 0
+c
+d 1175 1 0 0 0
+c
+d 131 2 0 0 0
+c
+d 699 3 1 1 0
+c
+d 686 1 0 0 0
+c
+d 689 1 0 0 0
+c
+d 578 2 1 0 0
+c
+d 1043 1 0 1 0
+c
+d 743 1 0 0 0
+c
+d 753 2 1 0 0
+c
+d 890 1 0 0 0
+c
+d 891 2 1 0 0
+c
+d 848 4 0 0 0
+c
+d 889 2 0 0 0
+c
+d 891 1 0 0 0
+c
+d 199 2 0 0 0
+c
+d 767 3 0 1 0
+c
+d 591 4 0 0 0
+c
+d 851 1 0 1 0
+c
+d 852 1 0 0 0
+c
+d 853 1 0 0 0
+c
+d 525 2 1 0 0
+c
+d 526 2 1 0 0
+c
+d 288 4 0 0 0
+c
+d 705 2 0 1 0
+c
+d 706 1 0 1 0
+c
+d 647 3 1 0 0
+c
+d 99 1 1 0 0
+c
+d 101 1 0 0 0
+c
+d 262 3 0 1 0
+c
+d 663 2 1 0 0
+c
+d 680 1 0 0 0
+c
+d 455 4 1 0 0
+c
+d 763 1 0 1 0
+c
+d 767 2 0 1 0
+c
+d 369 3 1 0 0
+c
+d 749 1 0 0 0
+c
+d 857 1 0 0 0
+c
+d 262 2 0 2 0
+c
+d 840 2 1 0 0
+c
+d 842 1 0 0 0
+c
+d 101 3 0 1 0
+c
+d 13 3 0 0 0
+c
+d 1170 1 0 0 0
+c
+d 1172 1 0 0 0
+c
+d 1185 1 0 1 0
+c
+d 1270 2 0 0 0
+c
+d 101 3 0 2 0
+c
+d 133 2 0 0 0
+c
+d 101 2 0 2 0
+c
+d 575 1 0 0 0
+c
+d 686 1 0 0 0
+c
+d 46 3 0 2 0
+c
+d 811 1 0 0 0
+c
+d 812 1 1 0 0
+c
+d 753 1 0 1 0
+c
+d 763 1 1 0 0
+c
+d 767 1 0 0 0
+c
+d 556 2 1 1 0
+c
+d 557 1 0 0 0
+c
+d 843 1 0 1 0
+c
+d 844 1 0 1 0
+c
+d 89 3 0 1 0
+c
+d 423 2 0 0 0
+c
+d 734 2 1 0 0
+c
+d 46 3 0 0 0
+c
+d 886 1 0 0 0
+c
+d 888 1 0 1 0
+c
+d 767 2 0 1 0
+c
+d 1303 1 0 0 0
+c
+d 1304 1 0 0 0
+c
+d 1305 1 0 0 0
+c
+d 132 1 0 0 0
+c
+d 523 1 0 0 0
+c
+d 1163 2 1 1 0
+c
+d 559 2 1 0 0
+c
+d 560 1 0 0 0
+c
+d 562 1 0 0 0
+c
+d 529 1 0 0 0
+c
+d 532 2 0 0 0
+c
+d 164 1 0 0 0
+c
+d 167 1 0 0 0
+c
+d 1104 1 1 0 0
+c
+d 876 2 0 0 0
+c
+d 878 1 1 0 0
+c
+d 715 2 0 0 0
+c
+d 262 4 1 1 0
+c
+d 625 2 0 1 0
+c
+d 225 2 1 0 0
+c
+d 101 2 0 0 0
+c
+d 1192 2 0 0 0
+c
+d 242 1 0 0 0
+c
+d 243 1 1 0 0
+c
+d 248 1 0 1 0
+c
+d 86 2 0 2 0
+c
+d 437 2 0 0 0
+c
+d 470 1 0 0 0
+c
+d 211 3 0 0 0
+c
+d 54 3 0 0 0
+c
+d 1080 2 0 2 0
+c
+d 1082 1 0 0 0
+c
+d 532 1 0 0 0
+c
+d 535 2 1 0 0
+c
+d 753 1 0 0 0
+c
+d 767 2 0 0 0
+c
+d 842 2 0 1 0
+c
+d 848 1 0 1 0
+c
+d 318 2 0 0 0
+c
+d 1149 1 0 0 0
+c
+d 276 2 0 1 0
+c
+d 300 1 0 1 0
+c
+d 1153 1 1 0 0
+c
+d 1154 1 0 0 0
+c
+d 46 2 0 0 0
+c
+d 301 3 1 0 0
+c
+d 144 1 0 0 0
+c
+d 145 2 0 0 0
+c
+d 1080 1 0 0 0
+c
+d 1082 1 0 0 0
+c
+d 775 4 1 0 0
+c
+d 767 2 0 1 0
+c
+d 768 1 0 1 0
+c
+d 437 1 0 0 0
+c
+d 568 1 0 0 0
+c
+d 50 3 1 0 0
+c
+d 763 2 1 0 0
+c
+d 767 1 0 0 0
+c
+d 423 1 0 1 0
+c
+d 1080 1 0 0 0
+c
+d 162 2 0 0 0
+c
+d 1251 2 0 0 0
+c
+d 352 3 0 0 0
+c
+d 32 3 1 0 0
+c
+d 167 1 1 0 0
+c
+d 1121 1 0 0 0
+c
+d 1122 1 0 0 0
+c
+d 1123 1 0 1 0
+c
+d 886 4 1 0 0
+c
+d 581 1 0 0 0
+c
+d 582 2 1 0 0
+c
+d 353 3 1 0 0
+c
+d 159 1 0 1 0
+c
+d 178 1 0 0 0
+c
+d 183 1 0 1 0
+c
+d 532 2 0 0 0
+c
+d 537 1 1 0 0
+c
+d 332 1 0 0 0
+c
+d 337 1 0 0 0
+c
+d 423 3 0 0 0
+c
+d 697 1 0 0 0
+c
+d 716 1 0 0 0
+c
+d 101 2 0 0 0
+c
+d 423 1 0 0 0
+c
+d 333 1 0 1 0
+c
+d 338 1 0 0 0
+c
+d 339 1 0 0 0
+c
+d 279 1 0 0 0
+c
+d 305 1 1 0 0
+c
+d 306 1 0 0 0
+c
+d 763 1 0 0 0
+c
+d 764 1 0 0 0
+c
+d 620 1 0 0 0
+c
+d 631 1 0 0 0
+c
+d 632 1 0 0 0
+c
+d 341 2 1 0 0
+c
+d 347 1 0 1 0
+c
+d 318 1 0 1 0
+c
+d 324 1 0 0 0
+c
+d 580 4 0 0 0
+c
+d 634 2 1 1 0
+c
+d 323 2 0 0 0
+c
+d 369 2 0 0 0
+c
+d 755 1 0 0 0
+c
+d 764 2 0 0 0
+c
+d 983 1 0 1 0
+c
+d 985 1 0 1 0
+c
+d 87 2 0 0 0
+c
+d 211 5 1 0 0
+c
+d 133 1 1 0 0
+c
+d 134 1 0 0 0
+c
+d 437 2 0 0 0
+c
+d 157 1 0 0 0
+c
+d 159 1 0 1 0
+c
+d 278 2 0 0 0
+c
+d 477 1 0 1 0
+c
+d 479 1 1 0 0
+c
+d 355 1 0 0 0
+c
+d 358 1 0 0 0
+c
+d 169 4 1 0 0
+c
+d 686 1 1 0 0
+c
+d 963 2 0 0 0
+c
+d 846 2 1 1 0
+c
+d 847 1 0 0 0
+c
+d 789 3 1 0 0
+c
+d 60 1 0 0 0
+c
+d 621 2 1 0 0
+c
+d 455 2 0 0 0
+c
+d 348 3 0 2 0
+c
+d 355 2 0 1 0
+c
+d 789 3 1 0 0
+c
+d 364 4 0 0 0
+c
+d 301 3 1 1 0
+c
+d 532 1 0 1 0
+c
+d 1165 1 1 0 0
+c
+d 1166 1 0 0 0
+c
+d 1080 2 0 0 0
+c
+d 1082 1 0 0 0
+c
+d 155 1 0 1 0
+c
+d 411 1 0 1 0
+c
+d 423 2 1 0 0
+c
+d 427 1 0 0 0
+c
+d 167 1 0 0 0
+c
+d 1121 1 0 1 0
+c
+d 146 2 0 0 0
+c
+d 423 2 0 0 0
+c
+d 1080 1 0 0 0
+c
+d 354 1 0 0 0
+c
+d 355 1 0 1 0
+c
+d 367 1 0 1 0
+c
+d 242 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 279 1 0 0 0
+c
+d 565 4 1 0 0
+c
+d 737 3 0 0 0
+c
+d 739 1 0 0 0
+c
+d 848 3 1 0 0
+c
+d 332 2 0 2 0
+c
+d 333 1 0 0 0
+c
+d 399 3 1 0 0
+c
+d 278 4 0 0 0
+c
+d 300 2 0 0 0
+c
+d 865 4 1 0 0
+c
+d 157 3 1 0 0
+c
+d 278 1 1 0 0
+c
+d 1168 1 0 0 0
+c
+d 1170 1 0 0 0
+c
+d 157 2 0 0 0
+c
+d 120 1 0 1 0
+c
+d 121 1 0 1 0
+c
+d 124 1 0 0 0
+c
+d 364 3 0 2 0
+c
+d 564 2 0 2 0
+c
+d 767 2 0 0 0
+c
+d 735 2 1 0 0
+c
+d 737 1 0 0 0
+c
+d 537 2 0 0 0
+c
+d 539 1 0 0 0
+c
+d 943 3 1 0 0
+c
+d 134 1 0 1 0
+c
+d 135 1 0 0 0
+c
+d 217 1 0 0 0
+c
+d 218 1 0 0 0
+c
+d 157 2 0 2 0
+c
+d 753 3 0 2 0
+c
+d 686 1 0 1 0
+c
+d 963 2 0 0 0
+c
+d 888 3 1 0 0
+c
+d 183 2 0 0 0
+c
+d 694 3 0 2 0
+c
+d 262 3 1 0 0
+c
+d 315 2 0 0 0
+c
+d 318 1 0 1 0
+c
+d 457 1 0 0 0
+c
+d 466 1 0 0 0
+c
+d 467 1 0 0 0
+c
+d 1080 2 0 0 0
+c
+d 194 1 0 0 0
+c
+d 195 1 0 1 0
+c
+d 205 1 0 1 0
+c
+d 584 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 270 1 0 0 0
+c
+d 271 1 1 0 0
+c
+d 242 2 0 0 0
+c
+d 631 3 0 0 0
+c
+d 645 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 242 2 1 0 0
+c
+d 699 2 0 2 0
+c
+d 101 1 0 0 0
+c
+d 104 1 0 0 0
+c
+d 318 2 0 1 0
+c
+d 763 3 1 0 0
+c
+d 606 2 0 0 0
+c
+d 315 2 0 2 0
+c
+d 368 3 1 0 0
+c
+d 157 2 0 0 0
+c
+d 242 2 0 0 0
+c
+d 1149 3 0 0 0
+c
+d 157 2 0 2 0
+c
+d 101 1 0 0 0
+c
+d 1085 3 0 0 0
+c
+d 1207 2 0 0 0
+c
+d 288 1 0 0 0
+c
+d 300 2 1 0 0
+c
+d 428 3 0 0 0
+c
+d 273 1 0 0 0
+c
+d 287 1 0 0 0
+c
+d 51 1 0 0 0
+c
+d 52 1 0 0 0
+c
+d 578 2 1 0 0
+c
+d 958 1 0 0 0
+c
+d 1084 4 1 0 0
+c
+d 211 2 0 0 0
+c
+d 1237 1 0 0 0
+c
+d 1080 3 1 0 0
+c
+d 319 1 0 0 0
+c
+d 320 1 0 1 0
+c
+d 242 3 1 0 0
+c
+d 1084 2 0 0 0
+c
+d 876 2 0 0 0
+c
+d 423 1 0 0 0
+c
+d 427 1 0 0 0
+c
+d 156 1 0 1 0
+c
+d 406 1 0 0 0
+c
+d 183 2 0 0 0
+c
+d 101 1 0 0 0
+c
+d 1084 1 0 0 0
+c
+d 1085 1 0 0 0
+c
+d 367 2 0 0 0
+c
+d 157 1 0 0 0
+c
+d 159 1 0 0 0
+c
+d 183 2 0 0 0
+c
+d 189 1 0 0 0
+c
+d 262 4 1 0 0
+c
+d 159 2 0 0 0
+c
+d 185 1 0 0 0
+c
+d 334 3 1 0 0
+c
+d 424 1 0 0 0
+c
+d 425 1 0 0 0
+c
+d 432 3 1 0 0
+c
+d 318 1 0 1 0
+c
+d 324 1 0 1 0
+c
+d 753 1 0 0 0
+c
+d 755 3 0 1 0
+c
+d 620 4 0 0 0
+c
+d 101 3 1 0 0
+c
+d 262 2 1 0 0
+c
+d 278 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 1084 2 1 0 0
+c
+d 575 1 0 0 0
+c
+d 577 1 0 0 0
+c
+d 101 2 1 0 0
+c
+d 1085 1 0 0 0
+c
+d 101 3 0 2 0
+c
+d 305 2 0 1 0
+c
+d 353 1 0 1 0
+c
+d 242 4 1 0 0
+c
+d 157 1 0 0 0
+c
+d 159 2 1 0 0
+c
+d 1185 3 0 0 0
+c
+d 767 2 0 2 0
+c
+d 655 2 0 2 0
+c
+d 821 3 0 0 0
+c
+d 413 3 0 0 0
+c
+d 31 2 1 0 0
+c
+d 32 1 0 0 0
+c
+d 287 2 0 0 0
+c
+d 262 1 0 0 0
+c
+d 278 1 0 0 0
+c
+d 150 2 1 0 0
+c
+d 802 1 0 0 0
+c
+d 803 1 0 0 0
+c
+d 1194 3 1 0 0
+c
+d 89 1 0 1 0
+c
+d 120 1 0 1 0
+c
+d 262 2 0 0 0
+c
+d 763 2 0 0 0
+c
+d 965 1 0 0 0
+c
+d 970 1 1 0 0
+c
+d 971 1 0 0 0
+c
+d 796 4 1 1 0
+c
+d 618 2 0 1 0
+c
+d 638 1 0 1 0
+c
+d 167 2 1 0 0
+c
+d 1121 1 0 0 0
+c
+d 686 4 1 0 0
+c
+d 4 1 0 1 0
+c
+d 5 1 0 0 0
+c
+d 479 1 0 0 0
+c
+d 487 1 0 0 0
+c
+d 415 2 0 0 0
+c
+d 416 1 0 0 0
+c
+d 955 4 1 0 0
+c
+d 246 1 0 0 0
+c
+d 251 1 0 0 0
+c
+d 591 1 0 1 0
+c
+d 593 1 0 1 0
+c
+d 796 2 1 1 0
+c
+d 965 3 0 1 0
+c
+d 318 2 0 0 0
+c
+d 318 1 0 0 0
+c
+d 323 1 0 0 0
+c
+d 701 2 0 0 0
+c
+d 369 2 1 0 0
+c
+d 767 2 0 0 0
+c
+d 699 3 1 0 0
+c
+d 457 2 1 0 0
+c
+d 459 1 0 0 0
+c
+d 1 1 0 1 0
+c
+d 1323 2 0 1 0
+c
+d 663 1 0 0 0
+c
+d 680 1 0 0 0
+c
+d 183 2 0 0 0
+c
+d 86 3 0 0 0
+c
+d 973 1 0 1 0
+c
+d 974 1 0 0 0
+c
+d 975 1 0 0 0
+c
+d 1192 1 0 1 0
+c
+d 1206 1 1 0 0
+c
+d 323 2 0 0 0
+c
+d 458 1 0 1 0
+c
+d 460 1 0 1 0
+c
+d 159 2 1 0 0
+c
+d 183 1 0 0 0
+c
+d 159 1 0 0 0
+c
+d 183 1 0 0 0
+c
+d 162 3 0 1 0
+c
+d 383 2 0 1 0
+c
+d 599 3 0 0 0
+c
+d 262 2 0 0 0
+c
+d 18 4 0 0 0
+c
+d 101 1 1 0 0
+c
+d 1085 2 0 0 0
+c
+d 749 1 1 0 0
+c
+d 751 1 0 0 0
+c
+d 857 1 0 0 0
+c
+d 129 3 1 0 0
+c
+d 159 1 0 0 0
+c
+d 183 1 0 0 0
+c
+d 599 2 0 1 0
+c
+d 1171 2 0 0 0
+c
+d 315 3 1 0 0
+c
+d 278 1 0 0 0
+c
+d 280 2 1 0 0
+c
+d 618 1 0 1 0
+c
+d 621 2 0 0 0
+c
+d 353 3 0 0 0
+c
+d 4 2 0 0 0
+c
+d 348 1 0 1 0
+c
+d 1145 1 0 1 0
+c
+d 529 1 0 0 0
+c
+d 532 1 0 1 0
+c
+d 334 1 0 0 0
+c
+d 341 1 0 0 0
+c
+d 348 1 0 0 0
+c
+d 134 2 0 0 0
+c
+d 139 1 0 0 0
+c
+d 101 3 1 0 0
+c
+d 274 1 0 1 0
+c
+d 276 1 0 1 0
+c
+d 753 1 0 1 0
+c
+d 755 2 0 1 0
+c
+d 133 1 0 1 0
+c
+d 146 1 0 0 0
+c
+d 150 1 1 0 0
+c
+d 133 3 1 0 0
+c
+d 423 2 0 0 0
+c
+d 1080 1 0 0 0
+c
+d 1315 1 0 0 0
+c
+d 1316 2 0 0 0
+c
+d 580 1 0 0 0
+c
+d 582 1 0 0 0
+c
+d 799 1 0 1 0
+c
+d 811 2 0 0 0
+c
+d 318 2 0 0 0
+c
+d 655 1 0 1 0
+c
+d 656 2 0 0 0
+c
+d 599 3 0 0 0
+c
+d 288 3 1 0 0
+c
+d 610 1 0 0 0
+c
+d 1004 1 0 1 0
+c
+d 1005 1 0 0 0
+c
+d 437 2 0 0 0
+c
+d 469 1 0 0 0
+c
+d 479 1 0 1 0
+c
+d 480 1 0 0 0
+c
+d 21 2 1 0 0
+c
+d 26 1 0 0 0
+c
+d 16 4 0 0 0
+c
+d 855 2 0 1 0
+c
+d 856 1 0 0 0
+c
+d 34 2 0 1 0
+c
+d 12 2 0 0 0
+c
+d 789 3 1 0 0
+c
+d 134 1 0 0 0
+c
+d 138 1 0 0 0
+c
+d 46 2 0 2 0
+c
+d 1173 3 1 1 0
+c
+d 92 1 1 0 0
+c
+d 114 1 0 0 0
+c
+d 118 1 0 0 0
+c
+d 749 2 0 1 0
+c
+d 133 2 1 0 0
+c
+d 134 1 0 0 0
+c
+d 21 2 0 0 0
+c
+d 1027 1 0 0 0
+c
+d 413 3 0 0 0
+c
+d 195 1 0 0 0
+c
+d 205 2 1 0 0
+c
+d 164 4 1 0 0
+c
+d 767 1 0 0 0
+c
+d 768 1 1 0 0
+c
+d 889 1 0 0 0
+c
+d 211 1 0 0 0
+c
+d 1233 1 0 1 0
+c
+d 7 3 0 1 0
+c
+d 270 1 0 0 0
+c
+d 271 1 0 0 0
+c
+d 868 2 1 0 0
+c
+d 19 1 0 1 0
+c
+d 1008 1 0 0 0
+c
+d 1013 1 0 1 0
+c
+d 852 2 0 1 0
+c
+d 262 1 0 1 0
+c
+d 278 2 0 1 0
+c
+d 287 1 1 0 0
+c
+d 288 1 0 0 0
+c
+d 1221 1 0 0 0
+c
+d 663 2 0 0 0
+c
+d 318 1 0 0 0
+c
+d 324 1 0 0 0
+c
+d 162 1 1 0 0
+c
+d 171 1 0 0 0
+c
+d 299 2 0 0 0
+c
+d 319 1 0 0 0
+c
+d 468 3 0 2 0
+c
+d 536 1 0 0 0
+c
+d 540 2 0 0 0
+c
+d 542 1 0 0 0
+c
+d 768 3 1 0 0
+c
+d 746 2 0 0 0
+c
+d 157 2 1 0 0
+c
+d 159 1 0 1 0
+c
+d 661 3 0 0 0
+c
+d 667 1 0 0 0
+c
+d 487 3 0 0 0
+c
+d 139 4 1 0 0
+c
+d 301 1 0 0 0
+c
+d 304 1 0 0 0
+c
+d 1217 1 0 0 0
+c
+d 428 2 0 2 0
+c
+d 430 2 0 0 0
+c
+d 264 1 0 0 0
+c
+d 286 2 0 2 0
+c
+d 727 1 0 0 0
+c
+d 728 2 1 0 0
+c
+d 764 1 0 0 0
+c
+d 765 1 0 0 0
+c
+d 115 1 0 0 0
+c
+d 120 2 0 0 0
+c
+d 323 3 1 0 0
+c
+d 16 2 0 1 0
+c
+d 93 1 0 1 0
+c
+d 985 2 0 0 0
+c
+d 129 3 1 0 0
+c
+d 16 1 0 0 0
+c
+d 93 1 0 0 0
+c
+d 437 3 1 1 0
+c
+d 1 2 0 2 0
+c
+d 437 1 0 1 0
+c
+d 463 2 0 0 0
+c
+d 26 2 0 0 0
+c
+d 39 1 0 0 0
+c
+d 1185 2 1 1 0
+c
+d 1186 1 0 0 0
+c
+d 194 1 0 1 0
+c
+d 195 2 1 0 0
+c
+d 1188 1 0 0 0
+c
+d 1191 1 0 1 0
+c
+d 301 2 1 0 0
+c
+d 437 3 0 0 0
+c
+d 7 2 0 2 0
+c
+d 876 1 0 1 0
+c
+d 878 1 0 1 0
+c
+d 769 2 0 0 0
+c
+d 854 2 0 0 0
+c
+d 856 1 1 0 0
+c
+d 686 4 0 2 0
+c
+d 1070 1 0 0 0
+c
+d 1073 1 0 1 0
+c
+d 1074 1 0 0 0
+c
+d 622 2 0 0 0
+c
+d 1319 4 1 0 0
+c
+d 278 3 0 2 0
+c
+d 580 1 0 1 0
+c
+d 591 1 0 1 0
+c
+d 686 1 0 0 0
+c
+d 428 2 0 1 0
+c
+d 436 1 0 1 0
+c
+d 848 3 0 1 0
+c
+d 852 2 0 0 0
+c
+d 574 1 0 0 0
+c
+d 795 2 1 0 0
+c
+d 1121 2 0 1 0
+c
+d 7 3 1 1 0
+c
+d 353 3 1 0 0
+c
+d 1177 2 0 0 0
+c
+d 1184 2 1 0 0
+c
+d 304 2 1 0 0
+c
+d 278 2 0 0 0
+c
+d 159 1 0 0 0
+c
+d 213 2 0 0 0
+c
+d 205 1 0 0 0
+c
+d 206 1 0 0 0
+c
+d 769 4 1 0 0
+c
+d 79 1 0 0 0
+c
+d 80 1 0 0 0
+c
+d 767 1 0 0 0
+c
+d 768 1 0 0 0
+c
+d 1194 3 0 2 0
+c
+d 1292 3 0 0 0
+c
+d 728 1 0 1 0
+c
+d 729 3 1 0 0
+c
+d 341 2 0 2 0
+c
+d 26 2 1 1 0
+c
+d 278 2 0 0 0
+c
+d 729 1 1 0 0
+c
+d 730 1 0 0 0
+c
+d 727 3 1 0 0
+c
+d 305 2 0 0 0
+c
+d 1041 4 0 0 0
+c
+d 274 2 1 0 0
+c
+d 275 1 0 0 0
+c
+d 720 1 0 0 0
+c
+d 727 1 0 0 0
+c
+d 799 2 0 1 0
+c
+d 806 1 0 0 0
+c
+d 534 1 0 0 0
+c
+d 537 1 0 0 0
+c
+d 539 1 0 0 0
+c
+d 133 3 1 0 0
+c
+d 32 2 1 0 0
+c
+d 17 2 0 0 0
+c
+d 28 2 0 0 0
+c
+d 301 2 0 0 0
+c
+d 915 2 0 1 0
+c
+d 935 1 1 0 0
+c
+d 612 3 1 0 0
+c
+d 280 1 0 1 0
+c
+d 281 2 0 1 0
+c
+d 852 2 0 1 0
+c
+d 965 2 0 0 0
+c
+d 968 1 0 0 0
+c
+d 199 1 0 1 0
+c
+d 211 1 0 0 0
+c
+d 686 2 0 0 0
+c
+d 713 1 0 0 0
+c
+d 19 4 0 0 0
+c
+d 29 3 0 2 0
+c
+d 169 2 1 1 0
+c
+d 842 4 0 0 0
+c
+d 615 4 0 0 0
+c
+d 719 2 0 0 0
+c
+d 591 3 1 0 0
+c
+d 1170 3 1 0 0
+c
+d 647 2 1 0 0
+c
+d 16 1 0 0 0
+c
+d 17 2 1 0 0
+c
+d 26 1 0 0 0
+c
+d 37 1 0 0 0
+c
+d 599 1 0 0 0
+c
+d 602 1 0 0 0
+c
+d 686 3 0 2 0
+c
+d 718 1 0 0 0
+c
+d 720 1 0 0 0
+c
+d 764 2 0 0 0
+c
+d 848 3 1 0 0
+c
+d 278 3 0 0 0
+c
+d 355 3 1 0 0
+c
+d 167 1 0 0 0
+c
+d 1103 1 0 1 0
+c
+d 1104 1 0 1 0
+c
+d 199 1 0 0 0
+c
+d 211 1 0 0 0
+c
+d 400 1 0 0 0
+c
+d 408 1 0 0 0
+c
+d 341 1 0 0 0
+c
+d 402 1 1 0 0
+c
+d 411 1 0 0 0
+c
+d 720 1 0 1 0
+c
+d 723 1 0 1 0
+c
+d 164 2 1 0 0
+c
+d 166 1 0 0 0
+c
+d 148 4 0 0 0
+c
+d 46 1 0 1 0
+c
+d 217 2 0 1 0
+c
+d 259 1 0 0 0
+c
+d 262 2 0 0 0
+c
+d 844 3 1 0 0
+c
+d 54 1 0 0 0
+c
+d 697 1 0 1 0
+c
+d 719 1 0 1 0
+c
+d 148 1 0 0 0
+c
+d 225 1 0 1 0
+c
+d 240 1 0 1 0
+c
+d 204 3 1 0 0
+c
+d 97 1 0 0 0
+c
+d 99 1 0 0 0
+c
+d 457 2 0 0 0
+c
+d 146 3 1 0 0
+c
+d 686 1 0 0 0
+c
+d 689 1 0 0 0
+c
+d 720 2 0 0 0
+c
+d 686 2 0 0 0
+c
+d 689 1 1 0 0
+c
+d 253 1 0 0 0
+c
+d 255 1 0 0 0
+c
+d 470 1 0 0 0
+c
+d 477 1 0 0 0
+c
+d 500 1 0 0 0
+c
+d 502 1 0 0 0
+c
+d 503 1 0 0 0
+c
+d 1195 2 0 1 0
+c
+d 919 5 1 0 0
+c
+d 54 1 0 0 0
+c
+d 719 1 0 0 0
+c
+d 253 1 0 0 0
+c
+d 254 2 0 0 0
+c
+d 32 2 0 1 0
+c
+d 1321 1 0 0 0
+c
+d 199 3 1 0 0
+c
+d 532 2 0 1 0
+c
+d 959 2 1 0 0
+c
+d 1111 1 0 0 0
+c
+d 1113 1 0 0 0
+c
+d 729 4 1 0 0
+c
+d 457 3 0 0 0
+c
+d 95 1 0 0 0
+c
+d 96 1 0 0 0
+c
+d 948 4 1 0 0
+c
+d 768 1 0 0 0
+c
+d 773 2 0 0 0
+c
+d 55 2 0 0 0
+c
+d 662 3 1 0 0
+c
+d 720 1 0 1 0
+c
+d 726 1 0 1 0
+c
+d 196 1 1 0 0
+c
+d 200 2 0 0 0
+c
+d 253 1 0 1 0
+c
+d 255 2 0 1 0
+c
+d 54 1 0 0 0
+c
+d 719 1 0 0 0
+c
+d 54 1 0 1 0
+c
+d 719 1 0 1 0
+c
+d 148 1 0 1 0
+c
+d 252 1 0 0 0
+c
+d 133 3 1 1 0
+c
+d 621 3 0 0 0
+c
+d 1097 1 0 0 0
+c
+d 1099 1 0 0 0
+c
+d 168 2 0 0 0
+c
+d 727 2 0 1 0
+c
+d 728 1 0 1 0
+c
+d 735 3 1 0 0
+c
+d 728 3 1 0 0
+c
+d 634 4 1 0 0
+c
+d 355 2 0 1 0
+c
+d 357 1 0 1 0
+c
+d 650 1 0 0 0
+c
+d 653 2 1 0 0
+c
+d 618 1 0 0 0
+c
+d 634 1 0 0 0
+c
+d 505 2 0 0 0
+c
+d 101 1 0 0 0
+c
+d 111 1 0 0 0
+c
+d 718 4 1 0 0
+c
+d 729 2 0 1 0
+c
+d 400 1 0 0 0
+c
+d 401 1 0 0 0
+c
+d 12 2 0 0 0
+c
+d 13 1 1 0 0
+c
+d 241 2 1 0 0
+c
+d 248 1 0 0 0
+c
+d 733 1 0 0 0
+c
+d 734 2 0 0 0
+c
+d 167 2 0 1 0
+c
+d 369 1 0 1 0
+c
+d 799 2 0 0 0
+c
+d 54 3 0 1 0
+c
+d 753 2 0 0 0
+c
+d 183 3 1 0 0
+c
+d 820 1 0 0 0
+c
+d 821 2 0 0 0
+c
+d 44 1 0 0 0
+c
+d 1020 1 0 0 0
+c
+d 1113 3 0 0 0
+c
+d 799 1 0 0 0
+c
+d 806 2 1 0 0
+c
+d 734 3 0 0 0
+c
+d 673 3 1 0 0
+c
+d 169 2 1 0 0
+c
+d 854 2 0 0 0
+c
+d 494 1 1 0 0
+c
+d 496 2 0 0 0
+c
+d 301 3 1 0 0
+c
+d 1217 1 1 0 0
+c
+d 259 2 0 0 0
+c
+d 400 4 0 0 0
+c
+d 146 2 0 2 0
+c
+d 304 1 1 0 0
+c
+d 310 1 0 0 0
+c
+d 311 1 0 0 0
+c
+d 599 2 0 0 0
+c
+d 602 1 1 0 0
+c
+d 211 3 1 0 0
+c
+d 1112 2 0 1 0
+c
+d 1114 1 0 1 0
+c
+d 959 3 0 1 0
+c
+d 852 2 0 0 0
+c
+d 302 3 1 0 0
+c
+d 965 1 0 0 0
+c
+d 983 1 0 0 0
+c
+d 985 1 0 0 0
+c
+d 196 1 0 0 0
+c
+d 197 1 0 1 0
+c
+d 198 1 0 0 0
+c
+d 167 3 1 0 0
+c
+d 167 3 1 0 0
+c
+d 608 1 0 0 0
+c
+d 616 2 0 0 0
+c
+d 1037 2 0 0 0
+c
+d 737 2 0 0 0
+c
+d 689 1 0 1 0
+c
+d 704 1 0 1 0
+c
+d 886 3 0 0 0
+c
+d 445 1 1 0 0
+c
+d 447 2 0 0 0
+c
+d 195 2 0 0 0
+c
+d 686 2 0 0 0
+c
+d 264 3 1 0 0
+c
+d 18 1 0 0 0
+c
+d 30 1 0 0 0
+c
+d 728 2 0 2 0
+c
+d 241 1 1 0 0
+c
+d 248 2 0 0 0
+c
+d 249 1 0 0 0
+c
+d 622 3 0 1 0
+c
+d 608 4 0 0 0
+c
+d 931 3 1 0 0
+c
+d 1111 1 0 0 0
+c
+d 1113 1 0 1 0
+c
+d 369 1 0 1 0
+c
+d 382 1 0 1 0
+c
+d 650 1 0 0 0
+c
+d 655 1 1 0 0
+c
+d 1184 3 0 0 0
+c
+d 311 1 0 0 0
+c
+d 327 1 0 0 0
+c
+d 955 2 0 0 0
+c
+d 960 1 0 0 0
+c
+d 961 1 0 0 0
+c
+d 650 1 0 0 0
+c
+d 655 1 0 0 0
+c
+d 990 2 0 2 0
+c
+d 686 1 1 0 0
+c
+d 689 2 0 0 0
+c
+d 148 2 0 0 0
+c
+d 578 1 1 0 0
+c
+d 686 1 0 0 0
+c
+d 955 2 0 0 0
+c
+d 91 2 0 0 0
+c
+d 109 3 1 0 0
+c
+d 353 2 1 0 0
+c
+d 753 3 1 0 0
+c
+d 84 3 1 1 0
+c
+d 97 1 0 1 0
+c
+d 99 2 0 1 0
+c
+d 225 1 0 1 0
+c
+d 240 1 0 1 0
+c
+d 146 1 0 0 0
+c
+d 1098 1 0 0 0
+c
+d 635 1 0 0 0
+c
+d 638 1 0 1 0
+c
+d 728 1 0 1 0
+c
+d 729 1 0 0 0
+c
+d 733 1 0 1 0
+c
+d 842 5 1 0 0
+c
+d 176 3 1 0 0
+c
+d 689 2 0 0 0
+c
+d 146 2 0 0 0
+c
+d 136 3 1 0 0
+c
+d 262 1 0 0 0
+c
+d 283 2 1 0 0
+c
+d 580 1 0 0 0
+c
+d 955 2 1 0 0
+c
+d 48 3 1 0 0
+c
+d 1111 2 1 0 0
+c
+d 449 2 0 0 0
+c
+d 575 3 0 1 0
+c
+d 285 1 0 0 0
+c
+d 286 1 0 0 0
+c
+d 557 1 1 0 0
+c
+d 565 1 0 0 0
+c
+d 1058 2 0 0 0
+c
+d 919 3 0 0 0
+c
+d 922 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 441 2 0 0 0
+c
+d 594 1 0 0 0
+c
+d 686 1 0 0 0
+c
+d 594 4 1 0 0
+c
+d 746 1 0 1 0
+c
+d 752 1 0 1 0
+c
+d 753 1 0 0 0
+c
+d 437 3 0 2 0
+c
+d 846 2 0 1 0
+c
+d 851 1 0 1 0
+c
+d 929 2 0 0 0
+c
+d 111 2 0 0 0
+c
+d 575 3 1 0 0
+c
+d 211 3 1 0 0
+c
+d 328 2 0 0 0
+c
+d 97 3 1 0 0
+c
+d 327 2 0 0 0
+c
+d 348 1 1 0 0
+c
+d 184 2 0 0 0
+c
+d 892 4 1 0 0
+c
+d 647 2 0 0 0
+c
+d 649 1 0 0 0
+c
+d 720 3 0 1 0
+c
+d 723 1 0 0 0
+c
+d 148 2 0 0 0
+c
+d 252 1 1 0 0
+c
+d 686 2 0 0 0
+c
+d 418 2 0 0 0
+c
+d 1194 2 0 0 0
+c
+d 206 2 1 0 0
+c
+d 96 1 0 1 0
+c
+d 111 1 0 1 0
+c
+d 240 3 0 1 0
+c
+d 268 1 0 1 0
+c
+d 272 3 1 0 0
+c
+d 686 3 1 0 0
+c
+d 183 3 1 0 0
+c
+d 449 2 0 0 0
+c
+d 450 2 0 0 0
+c
+d 242 2 0 0 0
+c
+d 26 1 0 0 0
+c
+d 28 1 0 0 0
+c
+d 618 4 0 0 0
+c
+d 146 2 0 2 0
+c
+d 1109 2 0 0 0
+c
+d 1309 2 0 2 0
+c
+d 1310 1 0 0 0
+c
+d 578 3 0 0 0
+c
+d 717 4 1 0 0
+c
+d 207 2 0 1 0
+c
+d 301 2 1 0 0
+c
+d 1218 1 0 0 0
+c
+d 242 2 0 0 0
+c
+d 1165 1 0 0 0
+c
+d 1168 1 0 0 0
+c
+d 477 1 0 0 0
+c
+d 478 1 0 1 0
+c
+d 55 2 0 0 0
+c
+d 280 3 1 0 0
+c
+d 468 4 1 0 0
+c
+d 304 3 0 2 0
+c
+d 550 3 1 0 0
+c
+d 621 1 0 0 0
+c
+d 627 1 0 0 0
+c
+d 578 1 0 1 0
+c
+d 687 1 0 0 0
+c
+d 737 1 0 0 0
+c
+d 740 1 0 1 0
+c
+d 536 1 0 0 0
+c
+d 541 1 0 0 0
+c
+d 753 2 0 0 0
+c
+d 634 2 0 0 0
+c
+d 635 1 1 0 0
+c
+d 959 2 0 0 0
+c
+d 242 1 0 0 0
+c
+d 262 2 1 0 0
+c
+d 146 2 0 2 0
+c
+d 148 2 0 0 0
+c
+d 1112 1 0 0 0
+c
+d 1114 1 1 0 0
+c
+d 1115 1 0 0 0
+c
+d 428 3 0 2 0
+c
+d 959 4 1 0 0
+c
+d 726 1 0 1 0
+c
+d 728 1 0 1 0
+c
+d 19 1 0 0 0
+c
+d 629 1 0 0 0
+c
+d 965 1 1 0 0
+c
+d 763 1 0 0 0
+c
+d 767 1 0 0 0
+c
+d 861 4 1 0 0
+c
+d 734 1 0 0 0
+c
+d 735 1 1 0 0
+c
+d 737 1 0 0 0
+c
+d 1169 1 0 0 0
+c
+d 1170 1 0 0 0
+c
+d 301 2 0 0 0
+c
+d 95 1 0 1 0
+c
+d 998 2 0 1 0
+c
+d 749 1 0 1 0
+c
+d 752 1 0 0 0
+c
+d 55 4 1 0 0
+c
+d 597 2 0 0 0
+c
+d 601 2 0 0 0
+c
+d 575 2 0 0 0
+c
+d 927 2 0 0 0
+c
+d 959 4 1 0 0
+c
+d 1152 2 1 0 0
+c
+d 719 3 0 2 0
+c
+d 301 2 0 1 0
+c
+d 111 1 0 1 0
+c
+d 113 1 0 1 0
+c
+d 146 1 0 0 0
+c
+d 927 3 1 0 0
+c
+d 159 2 0 0 0
+c
+d 242 1 0 1 0
+c
+d 262 2 0 0 0
+c
+d 927 1 1 0 0
+c
+d 928 1 0 0 0
+c
+d 146 2 1 0 0
+c
+d 795 2 0 0 0
+c
+d 807 2 1 0 0
+c
+d 196 2 0 0 0
+c
+d 686 2 0 0 0
+c
+d 55 1 0 0 0
+c
+d 691 1 0 0 0
+c
+d 1195 2 0 0 0
+c
+d 101 2 0 0 0
+c
+d 111 1 1 0 0
+c
+d 795 1 0 1 0
+c
+d 820 1 0 1 0
+c
+d 724 2 0 0 0
+c
+d 726 1 0 0 0
+c
+d 734 1 1 0 0
+c
+d 207 2 0 0 0
+c
+d 111 2 0 2 0
+c
+d 143 1 0 0 0
+c
+d 745 1 0 0 0
+c
+d 748 1 0 0 0
+c
+d 54 3 1 0 0
+c
+d 242 1 0 1 0
+c
+d 262 1 0 1 0
+c
+d 729 1 1 0 0
+c
+d 730 1 0 0 0
+c
+d 732 1 0 0 0
+c
+d 278 3 1 0 0
+c
+d 418 3 1 0 0
+c
+d 55 3 1 0 0
+c
+d 75 2 1 1 0
+c
+d 1300 1 0 0 0
+c
+d 373 2 0 0 0
+c
+d 574 2 0 0 0
+c
+d 796 1 1 0 0
+c
+d 686 2 0 0 0
+c
+d 618 1 0 0 0
+c
+d 620 1 0 0 0
+c
+d 371 1 0 0 0
+c
+d 380 1 0 0 0
+c
+d 100 3 0 0 0
+c
+d 796 4 1 0 0
+c
+d 686 2 1 0 0
+c
+d 701 1 0 0 0
+c
+d 437 2 0 0 0
+c
+d 463 1 1 0 0
+c
+d 494 3 0 0 0
+c
+d 806 3 0 0 0
+c
+d 419 1 0 0 0
+c
+d 433 2 0 0 0
+c
+d 852 1 0 0 0
+c
+d 861 2 1 0 0
+c
+d 686 1 0 0 0
+c
+d 687 1 0 0 0
+c
+d 688 1 1 0 0
+c
+d 183 3 1 0 0
+c
+d 662 2 1 0 0
+c
+d 663 1 0 0 0
+c
+d 93 1 0 0 0
+c
+d 95 1 0 0 0
+c
+d 54 4 0 0 0
+c
+d 797 2 0 1 0
+c
+d 799 1 0 1 0
+c
+d 1177 2 0 0 0
+c
+d 1178 1 1 0 0
+c
+d 301 2 0 0 0
+c
+d 369 2 0 0 0
+c
+d 259 2 0 0 0
+c
+d 262 1 0 0 0
+c
+d 262 3 1 0 0
+c
+d 463 3 1 0 0
+c
+d 301 2 0 0 0
+c
+d 318 2 1 0 0
+c
+d 320 1 0 0 0
+c
+d 445 4 1 0 0
+c
+d 653 1 0 1 0
+c
+d 661 2 0 1 0
+c
+d 525 2 0 0 0
+c
+d 259 3 1 0 0
+c
+d 437 3 1 0 0
+c
+d 916 2 0 2 0
+c
+d 919 1 0 0 0
+c
+d 965 1 0 0 0
+c
+d 970 1 0 0 0
+c
+d 217 3 1 0 0
+c
+d 242 1 0 1 0
+c
+d 262 2 0 1 0
+c
+d 594 3 0 0 0
+c
+d 91 1 0 1 0
+c
+d 92 1 0 1 0
+c
+d 93 1 0 0 0
+c
+d 470 1 0 1 0
+c
+d 477 1 0 1 0
+c
+d 642 3 1 0 0
+c
+d 922 1 0 0 0
+c
+d 926 2 1 0 0
+c
+d 689 1 0 0 0
+c
+d 703 1 0 0 0
+c
+d 705 3 1 0 0
+c
+d 623 3 0 2 0
+c
+d 19 2 0 0 0
+c
+d 54 3 1 0 0
+c
+d 641 1 0 0 0
+c
+d 642 1 0 0 0
+c
+d 823 1 0 0 0
+c
+d 826 1 0 0 0
+c
+d 729 3 1 0 0
+c
+d 947 1 0 0 0
+c
+d 598 1 0 0 0
+c
+d 599 1 0 0 0
+c
+d 1174 3 1 0 0
+c
+d 437 2 0 0 0
+c
+d 1156 3 0 1 0
+c
+d 1192 2 0 0 0
+c
+d 301 3 1 0 0
+c
+d 662 2 0 0 0
+c
+d 683 1 1 0 0
+c
+d 1110 2 0 1 0
+c
+d 1115 1 1 0 0
+c
+d 1117 2 0 0 0
+c
+d 101 1 0 1 0
+c
+d 1080 2 0 1 0
+c
+d 393 1 0 0 0
+c
+d 407 1 0 0 0
+c
+d 32 4 1 0 0
+c
+d 86 4 0 0 0
+c
+d 167 3 1 0 0
+c
+d 591 3 0 0 0
+c
+d 242 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 650 1 0 0 0
+c
+d 651 1 0 0 0
+c
+d 685 1 0 0 0
+c
+d 1177 3 0 2 0
+c
+d 738 3 1 0 0
+c
+d 212 2 0 1 0
+c
+d 48 2 0 2 0
+c
+d 940 1 0 0 0
+c
+d 196 1 0 0 0
+c
+d 1247 1 0 0 0
+c
+d 822 2 0 0 0
+c
+d 1150 1 1 0 0
+c
+d 1151 1 0 0 0
+c
+d 1063 3 0 1 0
+c
+d 400 3 1 0 0
+c
+d 829 2 0 0 0
+c
+d 444 3 0 1 0
+c
+d 445 1 0 0 0
+c
+d 146 4 0 0 0
+c
+d 62 1 0 0 0
+c
+d 63 1 0 0 0
+c
+d 1084 2 1 0 0
+c
+d 853 1 0 1 0
+c
+d 854 1 0 1 0
+c
+d 866 1 0 0 0
+c
+d 211 3 0 0 0
+c
+d 252 4 1 0 0
+c
+d 939 1 1 0 0
+c
+d 940 1 0 0 0
+c
+d 941 1 0 0 0
+c
+d 437 2 0 0 0
+c
+d 977 3 0 1 0
+c
+d 623 2 1 0 0
+c
+d 625 1 0 0 0
+c
+d 418 3 0 2 0
+c
+d 659 2 1 0 0
+c
+d 661 1 0 0 0
+c
+d 729 2 0 2 0
+c
+d 1265 2 0 1 0
+c
+d 262 1 0 1 0
+c
+d 268 1 0 1 0
+c
+d 19 1 0 0 0
+c
+d 21 1 0 0 0
+c
+d 22 1 0 0 0
+c
+d 200 2 0 0 0
+c
+d 202 1 0 0 0
+c
+d 1023 3 1 0 0
+c
+d 221 1 0 0 0
+c
+d 1233 2 0 1 0
+c
+d 278 2 1 0 0
+c
+d 1110 1 0 0 0
+c
+d 1111 1 0 0 0
+c
+d 455 3 1 0 0
+c
+d 852 2 0 0 0
+c
+d 796 3 1 0 0
+c
+d 1168 1 0 0 0
+c
+d 1177 1 0 0 0
+c
+d 204 2 1 0 0
+c
+d 224 1 0 0 0
+c
+d 301 1 0 1 0
+c
+d 1152 1 0 1 0
+c
+d 70 1 0 0 0
+c
+d 650 1 0 0 0
+c
+d 651 1 0 0 0
+c
+d 763 1 0 0 0
+c
+d 767 1 0 0 0
+c
+d 753 2 0 0 0
+c
+d 305 3 1 0 0
+c
+d 95 4 0 1 0
+c
+d 1115 1 0 1 0
+c
+d 1117 1 0 1 0
+c
+d 1118 1 0 0 0
+c
+d 443 2 0 0 0
+c
+d 813 3 1 0 0
+c
+d 196 1 1 0 0
+c
+d 199 3 0 0 0
+c
+d 965 2 0 1 0
+c
+d 977 1 0 1 0
+c
+d 1110 3 0 0 0
+c
+d 111 1 0 0 0
+c
+d 229 1 0 0 0
+c
+d 723 1 0 1 0
+c
+d 724 1 0 1 0
+c
+d 689 1 0 0 0
+c
+d 703 1 0 0 0
+c
+d 575 3 0 0 0
+c
+d 521 2 0 0 0
+c
+d 522 1 0 0 0
+c
+d 1195 4 0 1 0
+c
+d 1284 3 0 0 0
+c
+d 811 4 0 0 0
+c
+d 597 2 0 0 0
+c
+d 601 1 0 0 0
+c
+d 146 3 0 1 0
+c
+d 844 1 0 0 0
+c
+d 848 1 0 1 0
+c
+d 332 4 1 0 0
+c
+d 304 1 0 1 0
+c
+d 305 2 0 1 0
+c
+d 99 1 0 0 0
+c
+d 100 1 0 0 0
+c
+d 21 1 0 0 0
+c
+d 22 1 0 0 0
+c
+d 820 3 0 0 0
+c
+d 453 3 0 0 0
+c
+d 434 2 0 0 0
+c
+d 578 4 0 2 0
+c
+d 148 1 0 0 0
+c
+d 259 1 0 0 0
+c
+d 594 3 1 0 0
+c
+d 1303 3 0 0 0
+c
+d 195 2 0 0 0
+c
+d 457 4 1 0 0
+c
+d 574 2 0 0 0
+c
+d 795 1 1 0 0
+c
+d 281 2 0 0 0
+c
+d 457 3 1 0 0
+c
+d 2 1 0 0 0
+c
+d 16 2 0 2 0
+c
+d 1043 2 0 1 0
+c
+d 574 3 1 0 0
+c
+d 578 3 1 0 0
+c
+d 579 1 0 0 0
+c
+d 753 3 1 0 0
+c
+d 763 1 0 0 0
+c
+d 764 1 0 0 0
+c
+d 301 2 0 0 0
+c
+d 1017 1 0 0 0
+c
+d 1018 1 0 0 0
+c
+d 196 3 1 0 0
+c
+d 199 1 0 0 0
+c
+d 217 2 0 0 0
+c
+d 661 2 1 0 0
+c
+d 670 1 0 0 0
+c
+d 719 2 0 1 0
+c
+d 720 1 0 1 0
+c
+d 737 1 0 0 0
+c
+d 854 2 1 0 0
+c
+d 926 2 0 2 0
+c
+d 927 1 0 0 0
+c
+d 498 1 0 1 0
+c
+d 499 1 0 1 0
+c
+d 500 1 0 0 0
+c
+d 199 2 0 0 0
+c
+d 93 4 1 0 0
+c
+d 799 2 0 0 0
+c
+d 532 3 1 0 0
+c
+d 599 3 0 2 0
+c
+d 69 4 1 0 0
+c
+d 71 1 0 0 0
+c
+d 101 2 0 1 0
+c
+d 384 2 0 1 0
+c
+d 111 1 0 0 0
+c
+d 229 1 0 0 0
+c
+d 231 1 0 0 0
+c
+d 217 2 0 2 0
+c
+d 827 2 0 0 0
+c
+d 69 3 1 0 0
+c
+d 763 1 0 0 0
+c
+d 767 1 0 0 0
+c
+d 499 4 0 1 0
+c
+d 50 2 0 1 0
+c
+d 51 1 0 1 0
+c
+d 384 2 0 1 0
+c
+d 211 2 1 0 0
+c
+d 21 2 0 0 0
+c
+d 1087 2 0 0 0
+c
+d 1088 1 0 0 0
+c
+d 152 2 0 1 0
+c
+d 153 1 0 1 0
+c
+d 213 1 0 0 0
+c
+d 242 2 1 0 0
+c
+d 575 1 1 0 0
+c
+d 796 1 0 0 0
+c
+d 266 2 1 0 0
+c
+d 268 1 0 0 0
+c
+d 844 1 0 1 0
+c
+d 845 2 1 0 0
+c
+d 846 1 0 0 0
+c
+d 875 4 0 0 0
+c
+d 156 1 0 0 0
+c
+d 163 1 0 0 0
+c
+d 18 1 0 0 0
+c
+d 1263 2 0 1 0
+c
+d 354 1 1 0 0
+c
+d 367 1 0 0 0
+c
+d 767 2 0 0 0
+c
+d 264 4 1 0 0
+c
+d 457 2 0 0 0
+c
+d 686 1 0 0 0
+c
+d 919 1 0 0 0
+c
+d 922 1 1 0 0
+c
+d 738 2 0 0 0
+c
+d 743 1 0 1 0
+c
+d 110 1 0 1 0
+c
+d 111 2 0 1 0
+c
+d 926 3 1 0 0
+c
+d 143 1 0 1 0
+c
+d 230 3 1 0 0
+c
+d 891 2 0 0 0
+c
+d 237 4 1 0 0
+c
+d 437 2 0 2 0
+c
+d 1110 2 0 0 0
+c
+d 1115 1 0 0 0
+c
+d 916 2 0 0 0
+c
+d 917 1 0 0 0
+c
+d 265 2 0 0 0
+c
+d 714 3 1 0 0
+c
+d 213 2 0 1 0
+c
+d 242 1 0 1 0
+c
+d 252 1 0 1 0
+c
+d 253 1 0 1 0
+c
+d 257 1 0 0 0
+c
+d 207 1 0 0 0
+c
+d 1245 1 0 0 0
+c
+d 166 2 0 0 0
+c
+d 737 1 0 0 0
+c
+d 738 1 0 0 0
+c
+d 740 1 0 0 0
+c
+d 1170 2 0 0 0
+c
+d 1209 1 0 0 0
+c
+d 457 3 0 0 0
+c
+d 575 1 0 0 0
+c
+d 796 1 0 1 0
+c
+d 814 1 0 1 0
+c
+d 720 3 0 0 0
+c
+d 494 2 1 0 0
+c
+d 496 1 0 0 0
+c
+d 301 3 1 0 0
+c
+d 418 2 0 0 0
+c
+d 280 1 0 0 0
+c
+d 281 1 0 1 0
+c
+d 211 3 1 0 0
+c
+d 578 1 0 0 0
+c
+d 1043 1 1 0 0
+c
+d 1044 1 0 0 0
+c
+d 767 2 0 0 0
+c
+d 891 1 1 0 0
+c
+d 1008 3 0 0 0
+c
+d 152 3 0 0 0
+c
+d 262 2 0 0 0
+c
+d 753 1 1 0 0
+c
+d 762 1 0 0 0
+c
+d 763 1 0 0 0
+c
+d 599 3 1 0 0
+c
+d 795 2 0 0 0
+c
+d 162 3 0 0 0
+c
+d 163 1 0 0 0
+c
+d 171 1 0 0 0
+c
+d 96 3 1 0 0
+c
+d 921 2 0 1 0
+c
+d 926 1 0 1 0
+c
+d 318 3 1 0 0
+c
+d 374 2 0 2 0
+c
+d 377 1 0 0 0
+c
+d 70 1 0 0 0
+c
+d 651 1 0 0 0
+c
+d 49 3 0 0 0
+c
+d 705 2 0 0 0
+c
+d 413 4 0 0 0
+c
+d 272 2 0 1 0
+c
+d 159 1 0 0 0
+c
+d 184 1 0 1 0
+c
+d 185 1 0 1 0
+c
+d 445 1 0 1 0
+c
+d 446 1 0 1 0
+c
+d 534 1 0 0 0
+c
+d 537 2 0 0 0
+c
+d 212 2 0 0 0
+c
+d 437 1 0 0 0
+c
+d 568 1 0 0 0
+c
+d 686 2 0 0 0
+c
+d 756 2 0 0 0
+c
+d 836 1 0 0 0
+c
+d 837 1 0 0 0
+c
+d 769 2 0 0 0
+c
+d 775 1 0 0 0
+c
+d 661 2 0 0 0
+c
+d 1156 3 0 0 0
+c
+d 594 1 0 0 0
+c
+d 1042 1 0 1 0
+c
+d 1195 3 1 0 0
+c
+d 111 1 0 0 0
+c
+d 146 1 0 1 0
+c
+d 84 2 0 0 0
+c
+d 1278 1 0 1 0
+c
+d 514 1 0 1 0
+c
+d 516 1 0 0 0
+c
+d 1110 2 1 0 0
+c
+d 1120 2 0 0 0
+c
+d 443 1 0 1 0
+c
+d 445 1 0 1 0
+c
+d 18 4 0 0 0
+c
+d 54 2 0 0 0
+c
+d 153 1 0 0 0
+c
+d 155 2 1 0 0
+c
+d 225 2 0 0 0
+c
+d 393 1 0 0 0
+c
+d 395 1 0 1 0
+c
+d 396 1 0 0 0
+c
+d 915 1 0 0 0
+c
+d 919 1 0 0 0
+c
+d 285 1 0 0 0
+c
+d 286 1 0 0 0
+c
+d 446 1 0 0 0
+c
+d 447 1 1 0 0
+c
+d 310 1 0 1 0
+c
+d 311 1 0 0 0
+c
+d 551 1 0 1 0
+c
+d 780 1 0 0 0
+c
+d 782 1 0 0 0
+c
+d 783 1 0 0 0
+c
+d 775 1 0 1 0
+c
+d 882 1 0 0 0
+c
+d 886 1 0 1 0
+c
+d 959 1 0 1 0
+c
+d 960 1 0 1 0
+c
+d 1112 1 0 0 0
+c
+d 1114 1 0 0 0
+c
+d 749 2 0 1 0
+c
+d 148 1 0 0 0
+c
+d 232 1 0 1 0
+c
+d 791 4 1 0 0
+c
+d 211 2 0 0 0
+c
+d 574 1 0 0 0
+c
+d 795 1 0 0 0
+c
+d 1091 3 1 0 0
+c
+d 268 2 0 1 0
+c
+d 269 1 0 1 0
+c
+d 650 1 0 0 0
+c
+d 661 2 0 0 0
+c
+d 195 1 0 0 0
+c
+d 206 1 0 0 0
+c
+d 301 1 0 0 0
+c
+d 1218 1 0 0 0
+c
+d 477 4 0 0 0
+c
+d 178 2 0 0 0
+c
+d 179 1 0 0 0
+c
+d 745 2 0 0 0
+c
+d 70 1 0 0 0
+c
+d 650 1 0 0 0
+c
+d 602 2 1 0 0
+c
+d 631 1 0 0 0
+c
+d 1221 3 1 0 0
+c
+d 803 3 0 0 0
+c
+d 101 1 0 0 0
+c
+d 608 1 0 0 0
+c
+d 756 2 0 0 0
+c
+d 763 1 1 0 0
+c
+d 211 1 0 0 0
+c
+d 212 1 0 0 0
+c
+d 242 2 0 0 0
+c
+d 418 2 0 0 0
+c
+d 1009 4 0 2 0
+c
+d 618 1 0 0 0
+c
+d 634 2 1 0 0
+c
+d 842 2 0 0 0
+c
+d 878 1 0 0 0
+c
+d 262 1 0 1 0
+c
+d 264 1 0 1 0
+c
+d 115 3 0 2 0
+c
+d 629 1 0 1 0
+c
+d 965 2 0 1 0
+c
+d 651 1 0 1 0
+c
+d 690 1 0 1 0
+c
+d 142 4 0 0 0
+c
+d 178 1 0 0 0
+c
+d 181 2 0 0 0
+c
+d 493 3 0 2 0
+c
+d 159 4 0 1 0
+c
+d 752 1 0 0 0
+c
+d 753 1 0 0 0
+c
+d 1163 1 0 0 0
+c
+d 1165 1 0 0 0
+c
+d 710 1 0 1 0
+c
+d 711 1 0 0 0
+c
+d 939 2 0 1 0
+c
+d 940 2 0 0 0
+c
+d 167 2 0 0 0
+c
+d 943 4 0 0 0
+c
+d 146 1 0 0 0
+c
+d 151 2 1 0 0
+c
+d 630 1 0 0 0
+c
+d 660 1 0 0 0
+c
+d 989 2 0 2 0
+c
+d 294 4 0 0 0
+c
+d 580 1 0 1 0
+c
+d 584 2 0 1 0
+c
+d 755 2 0 0 0
+c
+d 1226 3 0 1 0
+c
+d 48 3 1 0 0
+c
+d 12 2 0 0 0
+c
+d 261 2 0 0 0
+c
+d 598 4 1 0 0
+c
+d 54 2 0 0 0
+c
+d 950 1 0 0 0
+c
+d 629 3 1 0 0
+c
+d 746 1 0 0 0
+c
+d 747 1 0 0 0
+c
+d 221 3 0 0 0
+c
+d 418 3 0 2 0
+c
+d 1195 2 0 1 0
+c
+d 575 3 1 0 0
+c
+d 272 2 0 2 0
+c
+d 55 4 1 0 0
+c
+d 6 1 1 0 0
+c
+d 12 2 0 0 0
+c
+d 196 1 0 0 0
+c
+d 199 2 1 0 0
+c
+d 822 1 0 0 0
+c
+d 823 3 1 0 0
+c
+d 204 2 0 0 0
+c
+d 224 1 0 0 0
+c
+d 1116 3 0 0 0
+c
+d 167 3 0 0 0
+c
+d 1170 3 1 0 0
+c
+d 12 1 0 0 0
+c
+d 1272 1 0 0 0
+c
+d 327 1 0 0 0
+c
+d 334 1 0 0 0
+c
+d 1109 1 1 0 0
+c
+d 1111 1 0 1 0
+c
+d 1110 2 0 2 0
+c
+d 686 1 0 1 0
+c
+d 922 1 0 1 0
+c
+d 186 3 0 1 0
+c
+d 494 3 1 0 0
+c
+d 49 2 0 0 0
+c
+d 213 2 0 0 0
+c
+d 972 3 0 0 0
+c
+d 531 3 0 0 0
+c
+d 409 4 1 0 0
+c
+d 829 2 0 2 0
+c
+d 152 3 0 1 0
+c
+d 146 1 0 1 0
+c
+d 1224 1 0 0 0
+c
+d 28 3 0 0 0
+c
+d 418 3 0 0 0
+c
+d 62 1 0 0 0
+c
+d 64 1 0 0 0
+c
+d 91 1 0 0 0
+c
+d 117 1 0 0 0
+c
+d 17 1 0 1 0
+c
+d 93 1 0 0 0
+c
+d 1158 3 0 0 0
+c
+d 1195 2 0 0 0
+c
+d 1196 1 0 0 0
+c
+d 597 2 0 0 0
+c
+d 601 1 0 0 0
+c
+d 21 2 0 0 0
+c
+d 745 1 0 1 0
+c
+d 748 1 0 1 0
+c
+d 498 1 1 0 0
+c
+d 499 2 0 0 0
+c
+d 965 2 0 0 0
+c
+d 973 1 0 1 0
+c
+d 445 1 0 0 0
+c
+d 446 1 0 0 0
+c
+d 242 1 0 0 0
+c
+d 246 2 0 0 0
+c
+d 461 2 1 0 0
+c
+d 462 2 0 0 0
+c
+d 661 2 0 0 0
+c
+d 662 1 1 0 0
+c
+d 572 2 0 0 0
+c
+d 19 2 0 0 0
+c
+d 822 3 0 0 0
+c
+d 327 2 0 0 0
+c
+d 328 1 0 0 0
+c
+d 305 3 1 0 0
+c
+d 1112 1 0 0 0
+c
+d 1113 1 0 1 0
+c
+d 1114 1 0 1 0
+c
+d 18 3 0 0 0
+c
+d 426 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 593 3 0 0 0
+c
+d 101 2 0 0 0
+c
+d 6 2 0 0 0
+c
+d 763 2 0 0 0
+c
+d 767 1 1 0 0
+c
+d 660 2 0 0 0
+c
+d 661 1 0 0 0
+c
+d 662 1 0 0 0
+c
+d 152 1 1 0 0
+c
+d 153 2 0 0 0
+c
+d 729 2 0 0 0
+c
+d 732 2 0 0 0
+c
+d 1163 2 0 0 0
+c
+d 1164 1 0 0 0
+c
+d 594 2 0 0 0
+c
+d 51 1 0 0 0
+c
+d 56 1 0 0 0
+c
+d 1310 1 0 0 0
+c
+d 1185 1 0 1 0
+c
+d 1199 1 0 1 0
+c
+d 1201 1 0 0 0
+c
+d 217 3 1 0 0
+c
+d 46 2 0 0 0
+c
+d 505 1 0 0 0
+c
+d 506 1 0 0 0
+c
+d 153 2 0 0 0
+c
+d 618 1 0 1 0
+c
+d 965 1 0 0 0
+c
+d 146 4 1 0 0
+c
+d 650 3 0 0 0
+c
+d 445 1 0 0 0
+c
+d 447 1 0 1 0
+c
+d 167 2 0 1 0
+c
+d 111 2 0 0 0
+c
+d 575 2 0 0 0
+c
+d 578 1 0 0 0
+c
+d 56 1 0 0 0
+c
+d 1303 1 0 0 0
+c
+d 1117 3 0 0 0
+c
+d 511 2 0 0 0
+c
+d 211 1 0 0 0
+c
+d 217 2 0 2 0
+c
+d 31 2 0 0 0
+c
+d 1121 2 0 0 0
+c
+d 748 2 0 1 0
+c
+d 437 2 0 0 0
+c
+d 965 3 1 0 0
+c
+d 906 2 0 0 0
+c
+d 967 3 0 0 0
+c
+d 829 3 0 2 0
+c
+d 738 3 0 0 0
+c
+d 618 1 1 0 0
+c
+d 620 2 0 0 0
+c
+d 21 2 0 0 0
+c
+d 414 1 0 1 0
+c
+d 1087 2 0 1 0
+c
+d 594 1 0 1 0
+c
+d 650 1 0 0 0
+c
+d 653 1 0 1 0
+c
+d 906 1 0 0 0
+c
+d 911 2 1 0 0
+c
+d 437 2 1 0 0
+c
+d 497 1 0 0 0
+c
+d 418 2 1 0 0
+c
+d 419 1 0 0 0
+c
+d 1202 1 0 0 0
+c
+d 1204 2 1 0 0
+c
+d 264 3 1 0 0
+c
+d 393 5 1 2 0
+c
+d 153 3 1 0 0
+c
+d 17 1 0 0 0
+c
+d 93 1 0 0 0
+c
+d 1173 1 0 0 0
+c
+d 1174 1 0 0 0
+c
+d 858 2 1 0 0
+c
+d 872 1 0 0 0
+c
+d 496 1 0 0 0
+c
+d 498 1 0 0 0
+c
+d 437 2 0 0 0
+c
+d 437 1 0 1 0
+c
+d 453 1 0 1 0
+c
+d 753 1 0 0 0
+c
+d 755 1 0 0 0
+c
+d 578 2 0 0 0
+c
+d 620 1 0 0 0
+c
+d 621 1 0 0 0
+c
+d 56 1 0 0 0
+c
+d 1303 1 0 0 0
+c
+d 574 1 1 0 0
+c
+d 795 2 0 0 0
+c
+d 395 2 1 0 0
+c
+d 396 1 0 0 0
+c
+d 111 3 0 0 0
+c
+d 129 2 0 0 0
+c
+d 1260 1 1 0 0
+c
+d 341 3 1 0 0
+c
+d 749 3 1 0 0
+c
+d 5 2 0 0 0
+c
+d 9 1 0 0 0
+c
+d 419 3 1 0 0
+c
+d 5 2 0 1 0
+c
+d 17 1 0 1 0
+c
+d 199 3 1 0 0
+c
+d 212 1 0 0 0
+c
+d 213 1 0 0 0
+c
+d 756 2 0 0 0
+c
+d 300 1 0 0 0
+c
+d 315 1 0 0 0
+c
+d 1163 1 0 0 0
+c
+d 1165 2 1 0 0
+c
+d 252 2 0 0 0
+c
+d 257 1 0 0 0
+c
+d 167 3 0 1 0
+c
+d 746 4 0 0 0
+c
+d 956 1 0 0 0
+c
+d 957 1 0 0 0
+c
+d 414 3 0 0 0
+c
+d 919 3 0 0 0
+c
+d 1017 1 0 0 0
+c
+d 1021 1 0 0 0
+c
+d 1263 4 0 0 0
+c
+d 925 1 0 0 0
+c
+d 926 2 1 0 0
+c
+d 455 4 0 0 0
+c
+d 152 2 0 0 0
+c
+d 153 1 0 0 0
+c
+d 477 1 0 0 0
+c
+d 478 1 0 1 0
+c
+d 208 1 0 0 0
+c
+d 1244 1 0 0 0
+c
+d 101 1 0 1 0
+c
+d 608 1 0 1 0
+c
+d 49 1 0 0 0
+c
+d 50 1 0 0 0
+c
+d 638 1 0 0 0
+c
+d 639 1 0 1 0
+c
+d 155 1 0 1 0
+c
+d 156 1 0 1 0
+c
+d 21 1 0 0 0
+c
+d 1022 1 1 0 0
+c
+d 1023 1 0 0 0
+c
+d 558 1 0 0 0
+c
+d 559 1 0 0 0
+c
+d 582 1 1 0 0
+c
+d 588 2 0 0 0
+c
+d 1185 3 0 2 0
+c
+d 718 2 0 0 0
+c
+d 946 1 1 0 0
+c
+d 602 2 0 1 0
+c
+d 621 1 0 0 0
+c
+d 631 1 0 1 0
+c
+d 919 3 1 0 0
+c
+d 934 1 0 0 0
+c
+d 871 4 1 0 0
+c
+d 119 3 1 0 0
+c
+d 156 1 0 0 0
+c
+d 400 2 1 0 0
+c
+d 591 3 1 0 0
+c
+d 650 2 0 0 0
+c
+d 655 1 0 0 0
+c
+d 418 2 0 0 0
+c
+d 1110 2 0 0 0
+c
+d 1120 1 0 0 0
+c
+d 927 1 1 0 0
+c
+d 928 2 0 0 0
+c
+d 100 2 0 0 0
+c
+d 1002 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 453 2 1 0 0
+c
+d 796 3 0 0 0
+c
+d 797 1 0 0 0
+c
+d 278 2 0 0 0
+c
+d 159 3 0 2 0
+c
+d 1266 2 0 0 0
+c
+d 1268 2 0 0 0
+c
+d 697 2 1 1 0
+c
+d 820 1 0 0 0
+c
+d 821 1 0 0 0
+c
+d 822 1 0 0 0
+c
+d 965 2 0 0 0
+c
+d 968 1 1 0 0
+c
+d 284 3 0 2 0
+c
+d 615 4 1 0 0
+c
+d 437 3 0 1 0
+c
+d 810 3 0 0 0
+c
+d 411 2 0 0 0
+c
+d 19 3 0 0 0
+c
+d 500 1 0 0 0
+c
+d 503 1 0 0 0
+c
+d 115 3 1 0 0
+c
+d 965 3 0 2 0
+c
+d 211 1 0 0 0
+c
+d 212 2 1 0 0
+c
+d 423 1 0 0 0
+c
+d 429 1 1 0 0
+c
+d 430 1 0 0 0
+c
+d 232 4 1 0 0
+c
+d 195 3 0 0 0
+c
+d 511 2 0 0 0
+c
+d 514 1 0 1 0
+c
+d 251 1 0 1 0
+c
+d 253 1 0 1 0
+c
+d 621 1 0 1 0
+c
+d 627 1 0 1 0
+c
+d 926 3 0 0 0
+c
+d 572 2 0 0 0
+c
+d 18 1 0 0 0
+c
+d 84 1 0 0 0
+c
+d 572 2 0 0 0
+c
+d 1055 1 1 0 0
+c
+d 594 1 0 0 0
+c
+d 686 2 1 0 0
+c
+d 1113 1 0 1 0
+c
+d 1116 2 0 0 0
+c
+d 46 1 0 0 0
+c
+d 47 1 0 0 0
+c
+d 419 2 0 0 0
+c
+d 419 1 0 1 0
+c
+d 423 1 0 1 0
+c
+d 29 2 0 0 0
+c
+d 749 1 0 0 0
+c
+d 857 1 0 0 0
+c
+d 781 4 1 0 0
+c
+d 437 2 0 0 0
+c
+d 167 1 0 1 0
+c
+d 1121 2 0 0 0
+c
+d 268 2 0 2 0
+c
+d 1227 1 0 0 0
+c
+d 861 2 0 0 0
+c
+d 763 2 0 0 0
+c
+d 764 1 1 0 0
+c
+d 262 2 0 0 0
+c
+d 264 3 0 1 0
+c
+d 1201 1 0 0 0
+c
+d 1202 1 0 0 0
+c
+d 199 2 0 0 0
+c
+d 572 3 1 0 0
+c
+d 662 4 1 0 0
+c
+d 799 4 0 0 0
+c
+d 152 2 0 0 0
+c
+d 437 1 0 0 0
+c
+d 453 2 0 0 0
+c
+d 146 2 0 0 0
+c
+d 294 1 1 0 0
+c
+d 782 3 1 0 0
+c
+d 763 1 0 0 0
+c
+d 767 1 0 0 0
+c
+d 466 2 0 0 0
+c
+d 156 1 0 1 0
+c
+d 163 1 0 1 0
+c
+d 575 1 0 0 0
+c
+d 932 2 1 0 0
+c
+d 621 4 1 0 0
+c
+d 59 2 0 2 0
+c
+d 959 3 1 0 0
+c
+d 168 2 1 0 0
+c
+d 369 1 0 0 0
+c
+d 457 2 0 0 0
+c
+d 490 2 0 0 0
+c
+d 207 1 0 0 0
+c
+d 209 1 0 0 0
+c
+d 1245 1 0 0 0
+c
+d 60 2 0 0 0
+c
+d 1307 1 0 0 0
+c
+d 19 1 0 0 0
+c
+d 977 1 1 0 0
+c
+d 982 2 0 0 0
+c
+d 499 1 0 0 0
+c
+d 500 1 0 0 0
+c
+d 217 2 0 0 0
+c
+d 610 3 0 0 0
+c
+d 32 1 0 0 0
+c
+d 75 1 1 0 0
+c
+d 1298 2 0 0 0
+c
+d 341 3 1 0 0
+c
+d 602 1 0 0 0
+c
+d 642 1 0 0 0
+c
+d 644 1 0 0 0
+c
+d 1096 1 0 0 0
+c
+d 1097 1 0 0 0
+c
+d 635 1 0 0 0
+c
+d 636 1 0 0 0
+c
+d 46 1 0 1 0
+c
+d 775 2 0 1 0
+c
+d 548 1 0 1 0
+c
+d 60 1 0 1 0
+c
+d 66 1 0 0 0
+c
+d 647 1 0 1 0
+c
+d 1007 2 0 0 0
+c
+d 167 2 0 1 0
+c
+d 369 1 0 1 0
+c
+d 598 2 0 1 0
+c
+d 551 1 0 0 0
+c
+d 775 1 1 0 0
+c
+d 780 1 0 0 0
+c
+d 217 2 0 1 0
+c
+d 220 1 0 0 0
+c
+d 848 3 1 0 0
+c
+d 574 2 1 0 0
+c
+d 826 3 1 0 0
+c
+d 667 1 0 0 0
+c
+d 668 1 0 0 0
+c
+d 882 3 1 0 0
+c
+d 817 2 1 0 0
+c
+d 818 1 0 0 0
+c
+d 763 1 0 0 0
+c
+d 764 1 0 0 0
+c
+d 120 2 0 1 0
+c
+d 101 2 1 0 0
+c
+d 610 1 0 0 0
+c
+d 101 1 0 1 0
+c
+d 1087 1 0 0 0
+c
+d 1093 1 0 0 0
+c
+d 1 3 1 0 0
+c
+d 667 1 0 0 0
+c
+d 668 2 0 0 0
+c
+d 572 2 0 1 0
+c
+d 1054 1 0 1 0
+c
+d 167 2 0 0 0
+c
+d 427 1 0 1 0
+c
+d 428 1 0 0 0
+c
+d 430 1 0 0 0
+c
+d 737 3 0 0 0
+c
+d 737 3 1 0 0
+c
+d 478 1 0 0 0
+c
+d 483 1 0 1 0
+c
+d 594 1 0 0 0
+c
+d 673 1 0 0 0
+c
+d 622 3 0 0 0
+c
+d 608 2 0 0 0
+c
+d 167 1 0 1 0
+c
+d 369 2 0 0 0
+c
+d 569 1 0 0 0
+c
+d 574 1 0 0 0
+c
+d 400 3 1 0 0
+c
+d 195 4 0 0 0
+c
+d 1194 4 0 0 0
+c
+d 284 2 0 2 0
+c
+d 541 4 1 0 0
+c
+d 288 1 0 0 0
+c
+d 291 1 0 0 0
+c
+d 324 1 0 1 0
+c
+d 325 2 1 0 0
+c
+d 332 1 0 0 0
+c
+d 1013 2 0 2 0
+c
+d 787 1 0 1 0
+c
+d 884 1 0 1 0
+c
+d 572 2 0 1 0
+c
+d 574 1 0 1 0
+c
+d 19 2 0 1 0
+c
+d 622 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 445 1 0 0 0
+c
+d 304 1 1 0 0
+c
+d 311 2 0 0 0
+c
+d 878 2 0 0 0
+c
+d 602 2 0 0 0
+c
+d 731 2 0 0 0
+c
+d 598 1 0 0 0
+c
+d 599 1 0 1 0
+c
+d 51 3 1 0 0
+c
+d 822 1 0 0 0
+c
+d 823 1 0 0 0
+c
+d 284 1 0 1 0
+c
+d 285 2 0 1 0
+c
+d 268 1 1 0 0
+c
+d 282 1 0 0 0
+c
+d 1227 1 0 0 0
+c
+d 551 1 0 0 0
+c
+d 564 2 0 0 0
+c
+d 418 3 1 0 0
+c
+d 301 2 0 2 0
+c
+d 304 1 0 0 0
+c
+d 286 2 0 0 0
+c
+d 965 1 0 0 0
+c
+d 973 1 0 0 0
+c
+d 575 1 0 1 0
+c
+d 578 1 0 0 0
+c
+d 989 1 1 0 0
+c
+d 990 2 0 0 0
+c
+d 400 1 0 1 0
+c
+d 402 1 0 0 0
+c
+d 403 1 0 0 0
+c
+d 148 2 0 0 0
+c
+d 1097 2 0 0 0
+c
+d 1100 1 0 0 0
+c
+d 21 1 1 0 0
+c
+d 24 1 0 0 0
+c
+d 352 1 0 0 0
+c
+d 353 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 445 1 0 0 0
+c
+d 1211 3 0 0 0
+c
+d 75 1 0 1 0
+c
+d 79 1 0 0 0
+c
+d 1020 2 0 0 0
+c
+d 111 3 0 0 0
+c
+d 974 2 1 0 0
+c
+d 975 1 0 0 0
+c
+d 839 1 0 1 0
+c
+d 842 2 0 1 0
+c
+d 133 2 0 0 0
+c
+d 294 1 1 0 0
+c
+d 764 1 0 0 0
+c
+d 766 1 0 1 0
+c
+d 382 1 0 1 0
+c
+d 1134 1 0 1 0
+c
+d 1192 1 0 1 0
+c
+d 1205 2 0 1 0
+c
+d 1280 1 0 0 0
+c
+d 1281 1 0 0 0
+c
+d 31 2 0 0 0
+c
+d 176 2 1 0 0
+c
+d 177 1 0 0 0
+c
+d 393 2 0 0 0
+c
+d 498 1 0 0 0
+c
+d 499 1 0 0 0
+c
+d 56 1 0 0 0
+c
+d 57 1 0 0 0
+c
+d 59 1 0 0 0
+c
+d 155 4 0 0 0
+c
+d 301 2 0 0 0
+c
+d 1220 2 0 0 0
+c
+d 1121 3 0 0 0
+c
+d 275 2 0 0 0
+c
+d 602 1 0 1 0
+c
+d 663 1 0 0 0
+c
+d 680 2 0 0 0
+c
+d 705 3 0 0 0
+c
+d 878 2 0 2 0
+c
+d 378 3 1 0 0
+c
+d 1246 2 0 0 0
+c
+d 835 1 0 0 0
+c
+d 900 2 0 0 0
+c
+d 31 2 0 0 0
+c
+d 1121 1 0 1 0
+c
+d 1123 1 0 1 0
+c
+d 602 2 0 0 0
+c
+d 682 1 1 0 0
+c
+d 26 2 0 0 0
+c
+d 28 1 0 1 0
+c
+d 16 3 1 1 0
+c
+d 622 2 1 0 0
+c
+d 625 1 0 0 0
+c
+d 906 2 0 1 0
+c
+d 909 1 1 0 0
+c
+d 881 4 0 1 0
+c
+d 173 1 0 0 0
+c
+d 174 1 0 0 0
+c
+d 252 1 0 0 0
+c
+d 259 1 0 0 0
+c
+d 343 1 0 0 0
+c
+d 437 2 1 0 0
+c
+d 152 2 1 0 0
+c
+d 1096 1 0 0 0
+c
+d 310 2 0 0 0
+c
+d 286 4 1 0 0
+c
+d 796 1 0 1 0
+c
+d 797 1 0 1 0
+c
+d 1170 1 0 1 0
+c
+d 1173 2 0 1 0
+c
+d 304 1 0 1 0
+c
+d 307 1 0 0 0
+c
+d 308 1 0 1 0
+c
+d 803 2 0 0 0
+c
+d 568 1 0 0 0
+c
+d 572 1 0 0 0
+c
+d 26 2 1 0 0
+c
+d 204 1 0 1 0
+c
+d 225 1 0 0 0
+c
+d 447 3 0 0 0
+c
+d 341 3 0 0 0
+c
+d 48 3 1 0 0
+c
+d 419 2 0 1 0
+c
+d 152 1 0 0 0
+c
+d 153 1 0 0 0
+c
+d 863 1 0 0 0
+c
+d 876 1 0 1 0
+c
+d 767 4 1 0 0
+c
+d 572 3 0 0 0
+c
+d 275 2 0 0 0
+c
+d 218 2 0 2 0
+c
+d 803 3 0 1 0
+c
+d 804 1 0 0 0
+c
+d 101 2 0 0 0
+c
+d 167 4 0 0 0
+c
+d 120 1 0 1 0
+c
+d 123 1 0 1 0
+c
+d 195 1 0 0 0
+c
+d 205 1 0 0 0
+c
+d 21 1 0 1 0
+c
+d 22 2 0 0 0
+c
+d 146 2 0 0 0
+c
+d 264 1 0 1 0
+c
+d 285 1 0 1 0
+c
+d 54 1 0 0 0
+c
+d 694 1 0 0 0
+c
+d 253 2 0 2 0
+c
+d 256 1 0 0 0
+c
+d 206 2 0 0 0
+c
+d 60 4 1 0 0
+c
+d 756 3 1 0 0
+c
+d 574 3 0 0 0
+c
+d 39 3 1 0 0
+c
+d 470 1 0 0 0
+c
+d 477 1 0 0 0
+c
+d 493 4 1 0 0
+c
+d 1195 2 0 1 0
+c
+d 101 1 0 0 0
+c
+d 608 1 0 0 0
+c
+d 204 3 0 2 0
+c
+d 799 1 0 1 0
+c
+d 915 1 0 0 0
+c
+d 916 1 0 0 0
+c
+d 917 1 0 0 0
+c
+d 177 3 0 0 0
+c
+d 610 1 0 0 0
+c
+d 990 2 0 0 0
+c
+d 93 2 0 1 0
+c
+d 114 1 0 1 0
+c
+d 84 1 0 0 0
+c
+d 1278 2 0 0 0
+c
+d 1279 1 0 0 0
+c
+d 49 2 1 0 0
+c
+d 50 1 0 0 0
+c
+d 146 1 0 0 0
+c
+d 148 1 0 0 0
+c
+d 301 1 0 0 0
+c
+d 1161 1 1 0 0
+c
+d 1162 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 443 1 0 0 0
+c
+d 153 1 0 0 0
+c
+d 228 1 0 0 0
+c
+d 151 4 1 0 0
+c
+d 204 4 0 0 0
+c
+d 835 2 0 0 0
+c
+d 836 1 0 0 0
+c
+d 75 1 0 0 0
+c
+d 775 2 1 0 0
+c
+d 21 5 1 0 0
+c
+d 1170 2 0 0 0
+c
+d 7 1 0 1 0
+c
+d 1269 2 0 1 0
+c
+d 195 2 0 0 0
+c
+d 111 2 0 0 0
+c
+d 1092 1 0 0 0
+c
+d 872 2 0 2 0
+c
+d 159 2 0 0 0
+c
+d 192 2 0 1 0
+c
+d 193 1 0 1 0
+c
+d 457 2 0 1 0
+c
+d 461 1 0 1 0
+c
+d 193 3 0 2 0
+c
+d 737 3 1 0 0
+c
+d 111 1 0 0 0
+c
+d 146 1 0 1 0
+c
+d 229 1 0 0 0
+c
+d 835 1 0 0 0
+c
+d 900 2 1 0 0
+c
+d 974 3 0 0 0
+c
+d 437 1 0 0 0
+c
+d 500 1 0 1 0
+c
+d 501 1 0 0 0
+c
+d 26 1 1 0 0
+c
+d 28 2 0 0 0
+c
+d 30 1 1 0 0
+c
+d 31 2 0 0 0
+c
+d 690 2 0 0 0
+c
+d 1202 2 0 0 0
+c
+d 1309 3 1 0 0
+c
+d 878 2 0 0 0
+c
+d 787 2 1 0 0
+c
+d 597 1 0 0 0
+c
+d 598 1 0 0 0
+c
+d 68 1 0 0 0
+c
+d 69 2 1 0 0
+c
+d 146 1 0 0 0
+c
+d 151 2 0 0 0
+c
+d 127 1 0 0 0
+c
+d 129 1 0 0 0
+c
+d 75 1 1 0 0
+c
+d 1295 1 0 0 0
+c
+d 48 3 1 0 0
+c
+d 132 3 1 0 0
+c
+d 176 1 0 0 0
+c
+d 194 1 0 0 0
+c
+d 118 3 0 0 0
+c
+d 616 2 1 0 0
+c
+d 617 1 0 0 0
+c
+d 19 1 0 0 0
+c
+d 22 1 0 0 0
+c
+d 718 3 1 0 0
+c
+d 575 1 0 0 0
+c
+d 927 2 1 0 0
+c
+d 930 1 0 0 0
+c
+d 990 3 0 1 0
+c
+d 993 1 0 0 0
+c
+d 738 1 0 0 0
+c
+d 743 1 0 0 0
+c
+d 823 1 0 0 0
+c
+d 901 1 0 0 0
+c
+d 437 3 1 0 0
+c
+d 965 4 1 0 0
+c
+d 1022 2 0 0 0
+c
+d 878 2 0 0 0
+c
+d 881 1 0 0 0
+c
+d 492 1 0 0 0
+c
+d 493 1 1 0 0
+c
+d 494 1 0 0 0
+c
+d 700 1 0 1 0
+c
+d 701 2 0 1 0
+c
+d 686 2 0 0 0
+c
+d 457 2 1 0 0
+c
+d 464 1 0 0 0
+c
+d 341 2 0 0 0
+c
+d 591 2 0 0 0
+c
+d 901 3 1 0 0
+c
+d 493 2 1 0 0
+c
+d 1077 2 0 0 0
+c
+d 199 2 0 0 0
+c
+d 686 1 0 0 0
+c
+d 803 1 0 0 0
+c
+d 804 1 0 0 0
+c
+d 159 3 0 0 0
+c
+d 348 1 0 0 0
+c
+d 407 1 0 0 0
+c
+d 49 1 0 0 0
+c
+d 50 1 0 0 0
+c
+d 305 2 0 0 0
+c
+d 675 2 0 0 0
+c
+d 676 1 0 0 0
+c
+d 194 1 0 1 0
+c
+d 204 2 0 0 0
+c
+d 597 1 0 1 0
+c
+d 598 1 0 1 0
+c
+d 743 3 0 0 0
+c
+d 46 2 0 0 0
+c
+d 858 4 0 0 0
+c
+d 207 1 0 0 0
+c
+d 209 2 1 0 0
+c
+d 686 1 0 0 0
+c
+d 700 1 0 0 0
+c
+d 211 1 1 0 0
+c
+d 242 2 0 0 0
+c
+d 211 2 0 0 0
+c
+d 723 2 0 0 0
+c
+d 724 1 0 1 0
+c
+d 51 1 0 0 0
+c
+d 56 1 0 0 0
+c
+d 79 1 1 0 0
+c
+d 84 2 0 0 0
+c
+d 602 2 0 0 0
+c
+d 7 2 0 0 0
+c
+d 662 3 1 0 0
+c
+d 48 2 1 0 0
+c
+d 49 1 0 0 0
+c
+d 344 3 1 0 0
+c
+d 100 3 1 0 0
+c
+d 829 5 0 0 0
+c
+d 1009 1 0 1 0
+c
+d 1010 3 0 0 0
+c
+d 343 3 1 0 0
+c
+d 238 3 1 0 0
+c
+d 1150 2 0 1 0
+c
+d 598 1 0 1 0
+c
+d 599 2 0 0 0
+c
+d 622 2 0 0 0
+c
+d 763 2 0 0 0
+c
+d 767 1 0 0 0
+c
+d 842 1 0 0 0
+c
+d 875 1 0 0 0
+c
+d 119 4 1 0 0
+c
+d 575 2 0 1 0
+c
+d 96 1 0 0 0
+c
+d 97 2 0 0 0
+c
+d 99 1 0 0 0
+c
+d 101 3 1 0 0
+c
+d 93 3 1 0 0
+c
+d 1020 1 0 0 0
+c
+d 1021 2 0 0 0
+c
+d 493 1 0 1 0
+c
+d 494 2 0 1 0
+c
+d 662 2 1 0 0
+c
+d 663 1 0 0 0
+c
+d 536 1 0 1 0
+c
+d 540 2 0 0 0
+c
+d 1173 3 0 0 0
+c
+d 24 1 0 0 0
+c
+d 26 2 0 2 0
+c
+d 428 1 0 0 0
+c
+d 590 2 1 0 0
+c
+d 146 3 1 0 0
+c
+d 1173 4 0 0 0
+c
+d 81 2 0 2 0
+c
+d 1295 1 0 0 0
+c
+d 317 1 0 0 0
+c
+d 318 2 0 2 0
+c
+d 568 1 0 0 0
+c
+d 569 1 0 0 0
+c
+d 242 3 1 0 0
+c
+d 1323 2 0 0 0
+c
+d 620 1 0 1 0
+c
+d 633 1 0 0 0
+c
+d 634 1 0 0 0
+c
+d 84 1 0 1 0
+c
+d 85 1 0 0 0
+c
+d 1275 1 0 0 0
+c
+d 178 3 1 0 0
+c
+d 181 1 0 0 0
+c
+d 1043 2 1 0 0
+c
+d 1045 1 0 1 0
+c
+d 21 2 0 1 0
+c
+d 23 1 0 1 0
+c
+d 922 1 0 0 0
+c
+d 926 2 0 0 0
+c
+d 437 2 0 0 0
+c
+d 661 1 0 0 0
+c
+d 662 1 0 0 0
+c
+d 530 1 0 1 0
+c
+d 531 1 0 1 0
+c
+d 1252 2 0 0 0
+c
+d 506 4 0 1 0
+c
+d 618 2 0 0 0
+c
+d 155 1 0 1 0
+c
+d 156 1 0 1 0
+c
+d 842 1 0 0 0
+c
+d 848 1 0 0 0
+c
+d 829 2 0 1 0
+c
+d 830 1 0 1 0
+c
+d 737 1 1 0 0
+c
+d 854 1 0 0 0
+c
+d 895 2 0 0 0
+c
+d 9 2 0 1 0
+c
+d 285 1 0 1 0
+c
+d 286 1 0 1 0
+c
+d 697 4 1 0 0
+c
+d 443 3 0 0 0
+c
+d 213 3 0 1 0
+c
+d 557 4 0 0 0
+c
+d 211 1 0 0 0
+c
+d 1237 2 1 0 0
+c
+d 753 3 1 0 0
+c
+d 592 2 0 0 0
+c
+d 437 2 0 0 0
+c
+d 50 3 1 0 0
+c
+d 301 1 0 0 0
+c
+d 1156 3 0 0 0
+c
+d 796 1 1 0 0
+c
+d 815 2 0 0 0
+c
+d 199 1 0 0 0
+c
+d 211 1 0 0 0
+c
+d 278 3 0 1 0
+c
+d 822 2 0 0 0
+c
+d 823 1 0 0 0
+c
+d 650 3 0 0 0
+c
+d 281 2 0 2 0
+c
+d 21 1 0 0 0
+c
+d 23 2 1 0 0
+c
+d 208 1 0 0 0
+c
+d 211 2 0 0 0
+c
+d 183 1 0 0 0
+c
+d 184 1 0 0 0
+c
+d 60 2 0 0 0
+c
+d 621 1 0 1 0
+c
+d 799 1 0 0 0
+c
+d 919 1 0 0 0
+c
+d 920 1 0 0 0
+c
+d 602 4 1 0 0
+c
+d 929 1 0 0 0
+c
+d 932 1 0 0 0
+c
+d 511 2 1 1 0
+c
+d 522 1 0 0 0
+c
+d 1304 3 0 0 0
+c
+d 54 3 1 0 0
+c
+d 575 3 0 1 0
+c
+d 144 1 0 0 0
+c
+d 145 1 0 0 0
+c
+d 196 3 0 0 0
+c
+d 315 2 0 2 0
+c
+d 621 1 0 0 0
+c
+d 965 2 1 0 0
+c
+d 18 3 0 2 0
+c
+d 184 2 0 0 0
+c
+d 185 1 0 0 0
+c
+d 636 2 0 1 0
+c
+d 638 1 0 1 0
+c
+d 697 1 0 0 0
+c
+d 716 1 0 0 0
+c
+d 717 1 0 0 0
+c
+d 661 1 0 1 0
+c
+d 662 2 0 0 0
+c
+d 591 1 0 1 0
+c
+d 593 2 0 1 0
+c
+d 144 1 0 0 0
+c
+d 145 1 0 0 0
+c
+d 341 1 0 0 0
+c
+d 400 1 0 0 0
+c
+d 308 2 0 2 0
+c
+d 1007 1 1 0 0
+c
+d 1008 2 0 0 0
+c
+d 1009 1 0 0 0
+c
+d 620 3 0 0 0
+c
+d 152 3 0 2 0
+c
+d 848 2 0 2 0
+c
+d 208 1 0 0 0
+c
+d 1244 1 0 1 0
+c
+d 487 3 1 0 0
+c
+d 54 1 0 0 0
+c
+d 55 1 0 0 0
+c
+d 1013 3 1 0 0
+c
+d 100 1 0 0 0
+c
+d 990 1 0 0 0
+c
+d 340 2 0 0 0
+c
+d 965 2 0 0 0
+c
+d 206 2 0 0 0
+c
+d 457 2 0 2 0
+c
+d 292 1 1 0 0
+c
+d 294 2 0 0 0
+c
+d 854 2 0 0 0
+c
+d 60 4 0 0 0
+c
+d 120 1 0 0 0
+c
+d 125 2 1 0 0
+c
+d 119 2 0 1 0
+c
+d 120 1 0 1 0
+c
+d 676 1 0 1 0
+c
+d 677 1 0 0 0
+c
+d 310 3 0 0 0
+c
+d 853 1 0 0 0
+c
+d 854 3 0 0 0
+c
+d 1150 2 0 0 0
+c
+d 93 3 1 1 0
+c
+d 528 2 1 1 0
+c
+d 550 1 0 1 0
+c
+d 551 1 0 0 0
+c
+d 556 3 0 1 0
+c
+d 12 2 0 0 0
+c
+d 262 1 0 0 0
+c
+d 270 1 0 0 0
+c
+d 836 3 1 0 0
+c
+d 37 1 0 1 0
+c
+d 577 1 0 0 0
+c
+d 578 1 0 1 0
+c
+d 195 3 1 0 0
+c
+d 705 1 0 0 0
+c
+d 710 1 0 0 0
+c
+d 77 2 0 1 0
+c
+d 1235 4 0 2 0
+c
+d 823 1 0 0 0
+c
+d 835 2 0 0 0
+c
+d 1274 4 0 0 0
+c
+d 206 3 0 0 0
+c
+d 806 2 0 1 0
+c
+d 910 1 0 0 0
+c
+d 341 1 0 0 0
+c
+d 344 1 0 0 0
+c
+d 989 3 0 0 0
+c
+d 1192 3 1 0 0
+c
+d 733 1 1 0 0
+c
+d 734 1 0 1 0
+c
+d 735 1 0 0 0
+c
+d 436 2 0 0 0
+c
+d 536 2 0 1 0
+c
+d 537 1 0 1 0
+c
+d 811 1 0 0 0
+c
+d 813 1 0 0 0
+c
+d 694 3 1 0 0
+c
+d 206 1 0 1 0
+c
+d 207 1 0 1 0
+c
+d 196 1 1 0 0
+c
+d 1246 2 0 0 0
+c
+d 716 2 0 0 0
+c
+d 718 2 0 0 0
+c
+d 55 3 1 0 0
+c
+d 144 2 0 0 0
+c
+d 157 2 0 1 0
+c
+d 829 1 0 0 0
+c
+d 830 2 0 0 0
+c
+d 737 2 0 0 0
+c
+d 1266 1 1 0 0
+c
+d 1267 1 0 0 0
+c
+d 1268 1 0 0 0
+c
+d 791 2 0 0 0
+c
+d 52 2 1 0 0
+c
+d 355 1 0 0 0
+c
+d 357 1 0 0 0
+c
+d 766 4 0 0 0
+c
+d 55 2 0 0 0
+c
+d 691 1 1 0 0
+c
+d 775 1 0 0 0
+c
+d 784 1 0 0 0
+c
+d 115 1 0 0 0
+c
+d 116 1 0 0 0
+c
+d 118 1 0 0 0
+c
+d 1261 1 0 0 0
+c
+d 301 1 0 0 0
+c
+d 1156 2 1 0 0
+c
+d 666 1 0 0 0
+c
+d 675 1 0 0 0
+c
+d 1170 3 1 0 0
+c
+d 1008 2 0 0 0
+c
+d 58 2 0 0 0
+c
+d 1308 1 1 0 0
+c
+d 84 1 0 1 0
+c
+d 1290 1 0 1 0
+c
+d 437 3 0 2 0
+c
+d 302 2 0 0 0
+c
+d 1218 1 0 0 0
+c
+d 990 1 1 0 0
+c
+d 998 2 0 0 0
+c
+d 132 1 0 0 0
+c
+d 495 1 0 1 0
+c
+d 496 1 0 1 0
+c
+d 599 2 0 0 0
+c
+d 606 1 0 0 0
+c
+d 1084 4 1 0 0
+c
+d 157 2 0 2 0
+c
+d 550 1 0 0 0
+c
+d 556 1 0 0 0
+c
+d 384 1 0 1 0
+c
+d 392 1 0 1 0
+c
+d 1153 4 0 0 0
+c
+d 493 1 0 0 0
+c
+d 494 2 0 0 0
+c
+d 827 3 1 0 0
+c
+d 1022 1 0 0 0
+c
+d 1023 2 0 0 0
+c
+d 554 1 0 1 0
+c
+d 555 1 0 1 0
+c
+d 1285 3 0 0 0
+c
+d 162 1 1 0 0
+c
+d 164 1 0 1 0
+c
+d 368 2 0 0 0
+c
+d 276 1 0 0 0
+c
+d 277 1 0 0 0
+c
+d 21 2 0 0 0
+c
+d 152 1 0 0 0
+c
+d 153 1 0 0 0
+c
+d 499 1 0 1 0
+c
+d 500 2 0 1 0
+c
+d 5 4 0 0 0
+c
+d 392 2 1 0 0
+c
+d 1126 1 0 0 0
+c
+d 211 3 1 0 0
+c
+d 1007 2 0 0 0
+c
+d 513 3 0 0 0
+c
+d 36 4 1 0 0
+c
+d 570 1 0 1 0
+c
+d 572 1 0 0 0
+c
+d 795 1 0 1 0
+c
+d 550 1 0 1 0
+c
+d 554 1 0 1 0
+c
+d 285 1 0 0 0
+c
+d 1224 1 0 0 0
+c
+d 496 1 1 0 0
+c
+d 498 2 0 0 0
+c
+d 242 3 0 0 0
+c
+d 6 2 0 1 0
+c
+d 1084 2 0 0 0
+c
+d 120 3 0 0 0
+c
+d 555 1 0 0 0
+c
+d 556 2 0 0 0
+c
+d 384 1 0 1 0
+c
+d 385 1 0 0 0
+c
+d 273 1 0 1 0
+c
+d 274 2 0 0 0
+c
+d 965 4 1 0 0
+c
+d 1303 2 1 0 0
+c
+d 1304 1 0 0 0
+c
+d 568 1 0 0 0
+c
+d 572 1 0 0 0
+c
+d 592 2 0 0 0
+c
+d 1270 3 0 0 0
+c
+d 737 4 0 0 0
+c
+d 908 3 0 2 0
+c
+d 159 1 1 0 0
+c
+d 184 2 0 0 0
+c
+d 591 2 1 0 0
+c
+d 596 1 0 0 0
+c
+d 599 2 0 0 0
+c
+d 493 2 0 0 0
+c
+d 19 1 0 0 0
+c
+d 20 1 0 0 0
+c
+d 965 1 1 0 0
+c
+d 756 3 1 0 0
+c
+d 278 3 1 0 0
+c
+d 965 3 0 1 0
+c
+d 537 2 0 0 0
+c
+d 511 1 0 0 0
+c
+d 527 2 1 0 0
+c
+d 763 1 0 0 0
+c
+d 766 1 0 0 0
+c
+d 511 2 0 2 0
+c
+d 37 1 1 0 0
+c
+d 38 2 0 0 0
+c
+d 555 2 0 1 0
+c
+d 856 2 0 0 0
+c
+d 572 2 0 1 0
+c
+d 1053 1 0 0 0
+c
+d 372 1 0 1 0
+c
+d 373 2 1 0 0
+c
+d 764 1 0 1 0
+c
+d 765 2 0 0 0
+c
+d 565 4 0 0 0
+c
+d 737 2 0 0 0
+c
+d 623 3 0 0 0
+c
+d 1129 3 0 0 0
+c
+d 618 2 0 0 0
+c
+d 638 1 0 1 0
+c
+d 120 2 1 0 0
+c
+d 121 1 0 0 0
+c
+d 344 2 0 0 0
+c
+d 126 2 0 2 0
+c
+d 55 1 0 0 0
+c
+d 694 1 0 0 0
+c
+d 413 3 1 0 0
+c
+d 565 4 0 1 0
+c
+d 157 2 0 1 0
+c
+d 1017 1 0 0 0
+c
+d 1020 2 1 0 0
+c
+d 48 3 0 0 0
+c
+d 941 1 0 0 0
+c
+d 764 2 0 1 0
+c
+d 765 1 0 0 0
+c
+d 755 1 0 0 0
+c
+d 764 1 0 1 0
+c
+d 965 1 0 0 0
+c
+d 976 1 0 1 0
+c
+d 651 2 0 1 0
+c
+d 1266 1 0 0 0
+c
+d 1285 2 0 2 0
+c
+d 842 3 1 0 0
+c
+d 738 3 1 0 0
+c
+d 854 1 0 0 0
+c
+d 823 2 1 0 0
+c
+d 903 1 0 0 0
+c
+d 763 4 1 0 0
+c
+d 1266 2 0 0 0
+c
+d 44 2 0 0 0
+c
+d 46 2 1 0 0
+c
+d 1313 1 0 0 0
+c
+d 152 2 0 0 0
+c
+d 1097 1 1 0 0
+c
+d 101 2 0 0 0
+c
+d 604 4 1 1 0
+c
+d 67 3 1 0 0
+c
+d 133 2 1 0 0
+c
+d 140 1 0 0 0
+c
+d 84 3 0 0 0
+c
+d 84 2 0 2 0
+c
+d 1288 1 0 0 0
+c
+d 554 2 0 1 0
+c
+d 65 4 1 0 0
+c
+d 550 2 0 0 0
+c
+d 242 1 0 0 0
+c
+d 243 1 0 0 0
+c
+d 737 2 0 0 0
+c
+d 550 1 0 1 0
+c
+d 551 1 0 1 0
+c
+d 278 1 0 0 0
+c
+d 1170 1 0 0 0
+c
+d 34 2 0 1 0
+c
+d 473 3 0 1 0
+c
+d 474 1 0 0 0
+c
+d 46 3 1 0 0
+c
+d 54 1 0 1 0
+c
+d 55 1 0 1 0
+c
+d 694 2 0 0 0
+c
+d 194 2 0 0 0
+c
+d 551 2 0 0 0
+c
+d 779 1 1 0 0
+c
+d 246 2 0 0 0
+c
+d 167 1 0 0 0
+c
+d 1122 1 0 1 0
+c
+d 550 1 0 0 0
+c
+d 552 1 0 1 0
+c
+d 164 2 0 0 0
+c
+d 565 1 0 0 0
+c
+d 567 1 0 0 0
+c
+d 159 2 0 2 0
+c
+d 242 1 0 0 0
+c
+d 915 1 0 1 0
+c
+d 919 2 0 0 0
+c
+d 334 3 1 0 0
+c
+d 565 3 0 1 0
+c
+d 111 1 0 0 0
+c
+d 146 1 0 0 0
+c
+d 89 3 1 0 0
+c
+d 278 1 1 0 0
+c
+d 279 2 0 0 0
+c
+d 1084 2 0 0 0
+c
+d 478 1 0 0 0
+c
+d 480 2 0 0 0
+c
+d 1009 2 0 0 0
+c
+d 574 2 0 1 0
+c
+d 1054 2 0 0 0
+c
+d 294 2 0 2 0
+c
+d 1269 2 0 0 0
+c
+d 29 3 0 0 0
+c
+d 1269 3 1 0 0
+c
+d 1168 1 1 0 0
+c
+d 1183 2 0 0 0
+c
+d 19 1 0 1 0
+c
+d 22 2 0 1 0
+c
+d 723 2 0 1 0
+c
+d 724 2 0 1 0
+c
+d 21 2 0 0 0
+c
+d 478 1 0 0 0
+c
+d 483 2 1 0 0
+c
+d 550 2 0 0 0
+c
+d 757 3 1 0 0
+c
+d 19 1 0 0 0
+c
+d 1013 1 0 0 0
+c
+d 789 3 1 0 0
+c
+d 763 1 0 0 0
+c
+d 764 1 0 1 0
+c
+d 766 1 0 1 0
+c
+d 555 1 0 0 0
+c
+d 556 1 0 0 0
+c
+d 169 1 0 1 0
+c
+d 377 1 0 1 0
+c
+d 1125 3 0 0 0
+c
+d 471 1 0 0 0
+c
+d 473 1 0 0 0
+c
+d 55 1 0 0 0
+c
+d 66 1 0 0 0
+c
+d 19 1 1 0 0
+c
+d 983 2 0 0 0
+c
+d 791 1 0 1 0
+c
+d 830 2 0 1 0
+c
+d 831 1 0 0 0
+c
+d 301 2 0 1 0
+c
+d 1212 1 0 0 0
+c
+d 551 3 1 0 0
+c
+d 537 2 0 1 0
+c
+d 539 1 0 1 0
+c
+d 795 4 1 0 0
+c
+d 353 3 1 0 0
+c
+d 125 2 0 0 0
+c
+d 574 1 0 0 0
+c
+d 795 1 0 0 0
+c
+d 756 3 1 0 0
+c
+d 261 3 0 0 0
+c
+d 574 1 0 0 0
+c
+d 795 1 0 0 0
+c
+d 183 2 0 1 0
+c
+d 184 1 0 1 0
+c
+d 119 1 0 0 0
+c
+d 120 1 0 0 0
+c
+d 261 3 0 2 0
+c
+d 734 3 0 2 0
+c
+d 1030 4 0 0 0
+c
+d 195 3 0 0 0
+c
+d 570 1 0 0 0
+c
+d 572 1 0 0 0
+c
+d 795 1 0 0 0
+c
+d 834 1 0 0 0
+c
+d 532 1 0 1 0
+c
+d 533 2 0 0 0
+c
+d 694 3 1 0 0
+c
+d 457 3 1 0 0
+c
+d 795 1 0 0 0
+c
+d 796 1 0 0 0
+c
+d 21 1 0 0 0
+c
+d 24 2 0 2 0
+c
+d 662 3 1 0 0
+c
+d 532 1 0 0 0
+c
+d 535 1 0 1 0
+c
+d 537 1 0 1 0
+c
+d 159 1 1 0 0
+c
+d 184 2 0 0 0
+c
+d 46 1 1 0 0
+c
+d 74 1 0 0 0
+c
+d 75 1 0 0 0
+c
+d 186 1 0 0 0
+c
+d 187 1 0 0 0
+c
+d 554 2 0 2 0
+c
+d 168 1 0 1 0
+c
+d 169 1 0 0 0
+c
+d 1008 1 0 0 0
+c
+d 1009 1 0 0 0
+c
+d 167 4 1 1 0
+c
+d 551 2 0 0 0
+c
+d 101 3 1 0 0
+c
+d 1313 3 0 2 0
+c
+d 650 1 0 0 0
+c
+d 653 1 0 0 0
+c
+d 661 1 0 0 0
+c
+d 823 2 0 2 0
+c
+d 791 4 1 0 0
+c
+d 775 2 0 0 0
+c
+d 19 2 1 0 0
+c
+d 1022 1 0 0 0
+c
+d 125 1 0 1 0
+c
+d 533 1 0 0 0
+c
+d 840 1 0 0 0
+c
+d 842 1 0 0 0
+c
+d 20 4 1 0 0
+c
+d 686 1 0 0 0
+c
+d 689 2 0 0 0
+c
+d 1165 2 0 0 0
+c
+d 1168 1 0 0 0
+c
+d 211 1 0 0 0
+c
+d 242 1 0 1 0
+c
+d 1231 2 0 0 0
+c
+d 570 2 0 2 0
+c
+d 1266 2 0 0 0
+c
+d 556 1 0 0 0
+c
+d 557 1 0 0 0
+c
+d 534 1 0 0 0
+c
+d 547 2 1 0 0
+c
+d 1202 3 0 2 0
+c
+d 60 4 0 2 0
+c
+d 734 3 0 0 0
+c
+d 413 1 0 0 0
+c
+d 418 1 0 1 0
+c
+d 419 1 0 1 0
+c
+d 550 1 0 0 0
+c
+d 556 2 1 0 0
+c
+d 1201 2 1 0 0
+c
+d 1202 1 0 0 0
+c
+d 793 1 0 1 0
+c
+d 795 1 0 1 0
+c
+d 318 2 0 0 0
+c
+d 152 1 0 1 0
+c
+d 153 2 0 1 0
+c
+d 125 3 0 0 0
+c
+d 457 2 0 0 0
+c
+d 565 1 0 0 0
+c
+d 568 1 0 0 0
+c
+d 568 1 0 0 0
+c
+d 1057 1 0 0 0
+c
+d 554 1 0 0 0
+c
+d 555 1 0 0 0
+c
+d 556 2 1 0 0
+c
+d 49 2 0 0 0
+c
+d 1269 2 0 1 0
+c
+d 473 2 0 0 0
+c
+d 474 1 0 1 0
+c
+d 307 1 1 0 0
+c
+d 328 2 0 0 0
+c
+d 74 2 0 0 0
+c
+d 1266 1 0 0 0
+c
+d 1267 1 0 0 0
+c
+d 1268 1 1 0 0
+c
+d 69 1 0 0 0
+c
+d 650 2 1 0 0
+c
+d 75 2 0 1 0
+c
+d 86 1 0 1 0
+c
+d 767 1 0 1 0
+c
+d 768 1 0 0 0
+c
+d 773 1 0 1 0
+c
+d 575 2 0 2 0
+c
+d 572 2 1 0 0
+c
+d 301 2 0 0 0
+c
+d 120 2 0 0 0
+c
+d 125 1 0 0 0
+c
+d 224 3 1 0 0
+c
+d 87 2 0 2 0
+c
+d 810 3 0 0 0
+c
+d 592 3 1 0 0
+c
+d 564 2 0 0 0
+c
+d 568 1 0 0 0
+c
+d 570 1 0 0 0
+c
+d 457 4 1 0 0
+c
+d 66 3 0 0 0
+c
+d 146 2 0 0 0
+c
+d 238 1 1 0 0
+c
+d 1203 2 0 1 0
+c
+d 344 2 0 0 0
+c
+d 795 1 0 0 0
+c
+d 908 2 0 0 0
+c
+d 162 3 1 0 0
+c
+d 807 1 0 0 0
+c
+d 906 1 0 0 0
+c
+d 662 2 1 0 0
+c
+d 667 1 0 0 0
+c
+d 21 2 0 0 0
+c
+d 341 3 0 0 0
+c
+d 259 1 0 0 0
+c
+d 261 2 1 0 0
+c
+d 294 2 0 0 0
+c
+d 666 1 0 0 0
+c
+d 673 1 0 0 0
+c
+d 86 1 0 1 0
+c
+d 88 1 0 1 0
+c
+d 353 2 0 2 0
+c
+d 568 1 0 0 0
+c
+d 570 2 1 0 0
+c
+d 356 3 1 0 0
+c
+d 757 1 0 1 0
+c
+d 764 1 0 0 0
+c
+d 765 1 0 1 0
+c
+d 532 3 0 0 0
+c
+d 488 4 1 0 0
+c
+d 92 1 0 1 0
+c
+d 119 2 0 1 0
+c
+d 146 2 1 0 0
+c
+d 294 1 0 0 0
+c
+d 572 4 0 1 0
+c
+d 775 1 0 0 0
+c
+d 785 1 1 0 0
+c
+d 786 1 0 0 0
+c
+d 46 1 0 0 0
+c
+d 75 1 0 1 0
+c
+d 195 3 0 0 0
+c
+d 101 2 1 0 0
+c
+d 608 1 0 0 0
+c
+d 85 1 1 0 0
+c
+d 1277 1 0 0 0
+c
+d 836 3 1 0 0
+c
+d 551 3 1 0 0
+c
+d 276 2 0 1 0
+c
+d 48 1 0 1 0
+c
+d 49 1 0 0 0
+c
+d 554 3 0 2 0
+c
+d 115 2 0 2 0
+c
+d 621 3 1 0 0
+c
+d 12 2 0 0 0
+c
+d 44 3 1 0 0
+c
+d 1121 2 1 0 0
+c
+d 1123 1 0 0 0
+c
+d 1206 3 1 0 0
+c
+d 259 1 0 0 0
+c
+d 261 2 0 0 0
+c
+d 5 2 0 0 0
+c
+d 7 1 1 0 0
+c
+d 60 1 0 0 0
+c
+d 65 2 0 0 0
+c
+d 1303 1 0 0 0
+c
+d 1170 2 0 0 0
+c
+d 400 4 1 0 0
+c
+d 78 1 0 0 0
+c
+d 79 1 0 0 0
+c
+d 327 1 0 0 0
+c
+d 334 1 0 0 0
+c
+d 478 1 0 1 0
+c
+d 482 1 0 0 0
+c
+d 483 1 0 1 0
+c
+d 278 1 0 0 0
+c
+d 279 2 1 0 0
+c
+d 749 2 0 2 0
+c
+d 556 1 0 0 0
+c
+d 565 1 0 0 0
+c
+d 493 2 0 0 0
+c
+d 1168 1 0 1 0
+c
+d 1179 1 0 1 0
+c
+d 505 1 0 0 0
+c
+d 506 1 0 0 0
+c
+d 514 1 1 0 0
+c
+d 568 1 0 0 0
+c
+d 569 1 0 0 0
+c
+d 400 1 0 0 0
+c
+d 407 1 0 0 0
+c
+d 803 2 0 0 0
+c
+d 507 1 1 0 0
+c
+d 508 1 0 0 0
+c
+d 191 2 0 0 0
+c
+d 354 3 0 1 0
+c
+d 556 2 0 1 0
+c
+d 565 1 0 1 0
+c
+d 301 2 0 2 0
+c
+d 795 3 0 1 0
+c
+d 570 2 0 1 0
+c
+d 1158 1 0 0 0
+c
+d 1163 2 0 2 0
+c
+d 21 2 0 0 0
+c
+d 807 1 0 0 0
+c
+d 823 1 0 0 0
+c
+d 554 1 0 1 0
+c
+d 556 2 0 1 0
+c
+d 155 1 0 1 0
+c
+d 176 1 0 0 0
+c
+d 93 3 1 0 0
+c
+d 193 3 0 0 0
+c
+d 551 2 0 2 0
+c
+d 650 1 1 0 0
+c
+d 661 2 0 0 0
+c
+d 35 2 0 0 0
+c
+d 36 1 0 0 0
+c
+d 1128 4 1 0 0
+c
+d 89 1 0 1 0
+c
+d 532 1 0 1 0
+c
+d 358 1 0 0 0
+c
+d 359 2 1 0 0
+c
+d 482 2 0 0 0
+c
+d 970 2 0 0 0
+c
+d 971 1 0 0 0
+c
+d 855 2 0 0 0
+c
+d 493 4 0 0 0
+c
+d 476 1 0 0 0
+c
+d 478 2 1 0 0
+c
+d 93 1 0 1 0
+c
+d 114 2 0 1 0
+c
+d 105 2 0 0 0
+c
+d 106 1 0 0 0
+c
+d 327 3 0 0 0
+c
+d 530 2 0 0 0
+c
+d 608 4 1 0 0
+c
+d 177 3 0 0 0
+c
+d 52 1 0 0 0
+c
+d 723 3 0 2 0
+c
+d 509 3 1 0 0
+c
+d 327 1 0 0 0
+c
+d 349 1 0 0 0
+c
+d 470 1 0 0 0
+c
+d 477 1 0 0 0
+c
+d 578 2 0 1 0
+c
+d 580 1 0 0 0
+c
+d 60 1 0 1 0
+c
+d 61 2 0 1 0
+c
+d 1185 1 0 0 0
+c
+d 1192 1 0 0 0
+c
+d 591 2 0 2 0
+c
+d 574 1 0 0 0
+c
+d 795 2 1 0 0
+c
+d 242 2 1 0 0
+c
+d 278 3 1 1 0
+c
+d 835 1 0 0 0
+c
+d 836 1 0 0 0
+c
+d 413 2 0 0 0
+c
+d 111 1 1 0 0
+c
+d 1090 1 0 0 0
+c
+d 1092 1 0 0 0
+c
+d 132 2 0 2 0
+c
+d 492 1 0 0 0
+c
+d 152 1 0 0 0
+c
+d 413 1 0 0 0
+c
+d 661 1 0 1 0
+c
+d 666 1 0 0 0
+c
+d 673 2 1 0 0
+c
+d 75 1 0 0 0
+c
+d 86 1 0 0 0
+c
+d 168 2 0 0 0
+c
+d 553 3 0 0 0
+c
+d 251 1 0 1 0
+c
+d 252 2 0 0 0
+c
+d 7 1 0 1 0
+c
+d 9 1 0 0 0
+c
+d 127 1 0 1 0
+c
+d 129 1 0 1 0
+c
+d 537 3 0 1 0
+c
+d 538 1 0 0 0
+c
+d 509 4 0 0 0
+c
+d 291 3 0 0 0
+c
+d 1257 3 1 0 0
+c
+d 89 1 0 1 0
+c
+d 125 1 0 0 0
+c
+d 533 1 0 1 0
+c
+d 217 1 0 1 0
+c
+d 218 1 0 1 0
+c
+d 1243 1 0 0 0
+c
+d 1008 4 0 2 0
+c
+d 823 3 1 0 0
+c
+d 509 2 0 0 0
+c
+d 510 1 0 0 0
+c
+d 1020 2 0 0 0
+c
+d 386 2 0 1 0
+c
+d 92 1 0 1 0
+c
+d 118 1 0 0 0
+c
+d 119 2 0 0 0
+c
+d 650 2 1 0 0
+c
+d 661 1 0 0 0
+c
+d 341 1 0 0 0
+c
+d 344 1 0 0 0
+c
+d 457 4 0 0 0
+c
+d 274 1 0 0 0
+c
+d 275 3 0 1 0
+c
+d 19 2 0 0 0
+c
+d 980 1 0 0 0
+c
+d 534 1 0 1 0
+c
+d 536 1 0 1 0
+c
+d 568 2 1 0 0
+c
+d 572 1 0 0 0
+c
+d 211 1 0 0 0
+c
+d 1233 1 0 0 0
+c
+d 1235 1 0 0 0
+c
+d 238 3 1 0 0
+c
+d 635 1 0 0 0
+c
+d 641 1 0 0 0
+c
+d 787 3 0 0 0
+c
+d 565 4 1 0 0
+c
+d 369 1 0 1 0
+c
+d 382 2 0 1 0
+c
+d 509 2 0 0 0
+c
+d 1071 1 1 0 0
+c
+d 855 2 1 0 0
+c
+d 856 1 0 0 0
+c
+d 123 4 0 0 0
+c
+d 341 2 0 0 0
+c
+d 470 1 1 0 0
+c
+d 146 2 0 0 0
+c
+d 691 3 1 0 0
+c
+d 286 1 1 0 0
+c
+d 291 2 0 0 0
+c
+d 159 1 0 0 0
+c
+d 178 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 355 1 0 0 0
+c
+d 356 1 1 0 0
+c
+d 84 2 1 0 0
+c
+d 1289 1 0 0 0
+c
+d 274 1 0 0 0
+c
+d 275 1 0 0 0
+c
+d 1230 1 0 0 0
+c
+d 304 4 1 0 0
+c
+d 437 1 0 0 0
+c
+d 445 1 0 0 0
+c
+d 23 3 1 0 0
+c
+d 1126 2 0 2 0
+c
+d 502 3 0 1 0
+c
+d 507 1 0 0 0
+c
+d 756 1 0 0 0
+c
+d 768 2 0 0 0
+c
+d 1106 1 0 0 0
+c
+d 1108 1 0 0 0
+c
+d 1110 1 0 0 0
+c
+d 634 1 0 0 0
+c
+d 635 1 0 0 0
+c
+d 610 3 0 0 0
+c
+d 540 1 0 0 0
+c
+d 541 2 0 0 0
+c
+d 1070 2 0 0 0
+c
+d 1073 1 1 0 0
+c
+d 823 3 0 1 0
+c
+d 718 3 1 0 0
+c
+d 527 2 0 0 0
+c
+d 591 1 0 0 0
+c
+d 592 2 1 0 0
+c
+d 39 2 0 0 0
+c
+d 66 3 1 0 0
+c
+d 1168 3 0 0 0
+c
+d 93 1 0 1 0
+c
+d 127 2 0 1 0
+c
+d 341 1 0 0 0
+c
+d 1146 1 0 1 0
+c
+d 1147 2 1 0 0
+c
+d 402 1 0 1 0
+c
+d 405 1 0 0 0
+c
+d 411 1 0 1 0
+c
+d 570 2 0 0 0
+c
+d 144 1 0 1 0
+c
+d 145 1 0 1 0
+c
+d 230 1 0 0 0
+c
+d 382 1 1 0 0
+c
+d 391 1 0 0 0
+c
+d 836 2 0 0 0
+c
+d 1 3 1 0 0
+c
+d 633 1 0 0 0
+c
+d 634 1 0 0 0
+c
+d 2 2 0 0 0
+c
+d 3 1 0 0 0
+c
+d 617 2 0 0 0
+c
+d 989 1 1 0 0
+c
+d 164 3 1 0 0
+c
+d 413 3 1 0 0
+c
+d 1022 3 0 2 0
+c
+d 565 3 0 1 0
+c
+d 394 1 0 0 0
+c
+d 1109 1 0 0 0
+c
+d 597 1 0 1 0
+c
+d 606 1 0 1 0
+c
+d 965 3 0 1 0
+c
+d 178 1 0 0 0
+c
+d 181 1 0 0 0
+c
+d 574 4 1 0 0
+c
+d 423 1 0 1 0
+c
+d 429 3 0 1 0
+c
+d 46 1 0 0 0
+c
+d 50 1 0 0 0
+c
+d 734 1 0 0 0
+c
+d 738 1 0 1 0
+c
+d 893 1 1 0 0
+c
+d 795 1 0 0 0
+c
+d 825 1 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 1157 1 0 0 0
+c
+d 1163 1 0 0 0
+c
+d 594 1 0 1 0
+c
+d 959 1 0 1 0
+c
+d 181 1 0 1 0
+c
+d 182 1 0 0 0
+c
+d 84 2 0 1 0
+c
+d 1287 1 0 1 0
+c
+d 60 3 0 1 0
+c
+d 21 3 0 0 0
+c
+d 75 3 0 1 0
+c
+d 799 4 0 0 0
+c
+d 755 2 0 1 0
+c
+d 245 1 0 1 0
+c
+d 246 2 0 1 0
+c
+d 129 2 0 0 0
+c
+d 738 1 0 1 0
+c
+d 743 1 0 1 0
+c
+d 167 1 0 1 0
+c
+d 1121 1 0 1 0
+c
+d 88 3 0 0 0
+c
+d 34 1 0 1 0
+c
+d 599 2 0 1 0
+c
+d 56 2 1 0 0
+c
+d 65 1 0 0 0
+c
+d 382 1 1 0 0
+c
+d 384 2 0 0 0
+c
+d 556 1 0 1 0
+c
+d 564 1 0 0 0
+c
+d 842 1 0 1 0
+c
+d 848 2 0 0 0
+c
+d 551 4 0 0 0
+c
+d 989 4 1 0 0
+c
+d 7 3 0 2 0
+c
+d 511 4 0 0 0
+c
+d 5 1 0 0 0
+c
+d 7 1 0 0 0
+c
+d 348 2 0 1 0
+c
+d 373 1 0 0 0
+c
+d 377 1 0 0 0
+c
+d 382 1 1 0 0
+c
+d 796 1 0 1 0
+c
+d 797 3 0 1 0
+c
+d 5 2 0 2 0
+c
+d 204 2 0 0 0
+c
+d 46 4 0 2 0
+c
+d 384 4 1 0 0
+c
+d 534 3 1 0 0
+c
+d 183 4 1 0 0
+c
+d 152 1 0 0 0
+c
+d 413 2 0 0 0
+c
+d 575 1 0 0 0
+c
+d 796 1 0 0 0
+c
+d 1285 1 0 1 0
+c
+d 1291 1 0 0 0
+c
+d 1292 2 0 1 0
+c
+d 663 3 1 0 0
+c
+d 48 2 0 2 0
+c
+d 91 1 0 0 0
+c
+d 92 1 0 0 0
+c
+d 75 2 0 2 0
+c
+d 1125 2 0 0 0
+c
+d 1127 1 1 0 0
+c
+d 927 3 1 0 0
+c
+d 718 1 0 0 0
+c
+d 731 2 0 0 0
+c
+d 392 1 0 0 0
+c
+d 1126 1 0 1 0
+c
+d 276 3 1 0 0
+c
+d 159 2 0 2 0
+c
+d 184 1 0 0 0
+c
+d 89 4 0 0 0
+c
+d 755 4 0 0 0
+c
+d 88 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 580 1 0 0 0
+c
+d 582 1 0 0 0
+c
+d 807 2 0 1 0
+c
+d 906 1 0 1 0
+c
+d 392 3 1 0 0
+c
+d 1179 2 0 0 0
+c
+d 1180 1 1 0 0
+c
+d 86 1 0 1 0
+c
+d 87 1 0 1 0
+c
+d 550 2 0 1 0
+c
+d 554 1 0 1 0
+c
+d 592 1 0 0 0
+c
+d 594 1 0 0 0
+c
+d 133 1 0 1 0
+c
+d 330 1 0 0 0
+c
+d 331 2 0 0 0
+c
+d 1163 3 0 2 0
+c
+d 1157 3 1 0 0
+c
+d 436 3 1 0 0
+c
+d 167 3 1 0 0
+c
+d 54 3 0 2 0
+c
+d 753 1 0 1 0
+c
+d 760 1 0 1 0
+c
+d 635 2 0 0 0
+c
+d 637 1 0 0 0
+c
+d 1194 2 0 0 0
+c
+d 1269 3 1 0 0
+c
+d 871 3 0 2 0
+c
+d 142 4 1 0 0
+c
+d 318 2 0 1 0
+c
+d 323 1 0 1 0
+c
+d 168 2 0 0 0
+c
+d 1150 3 1 0 0
+c
+d 1136 3 1 0 0
+c
+d 521 3 1 0 0
+c
+d 565 1 0 0 0
+c
+d 570 1 0 0 0
+c
+d 1056 1 0 0 0
+c
+d 305 1 0 0 0
+c
+d 1150 1 1 0 0
+c
+d 1216 2 0 0 0
+c
+d 787 2 1 0 0
+c
+d 882 1 0 0 0
+c
+d 53 1 0 0 0
+c
+d 54 1 0 0 0
+c
+d 681 3 0 1 0
+c
+d 86 1 0 1 0
+c
+d 88 1 0 1 0
+c
+d 146 1 1 0 0
+c
+d 153 1 0 0 0
+c
+d 228 1 0 0 0
+c
+d 500 1 0 0 0
+c
+d 505 1 0 0 0
+c
+d 756 1 0 0 0
+c
+d 757 1 0 0 0
+c
+d 573 1 0 0 0
+c
+d 574 2 0 0 0
+c
+d 564 1 0 0 0
+c
+d 565 2 0 0 0
+c
+d 353 2 0 0 0
+c
+d 355 1 0 0 0
+c
+d 906 3 1 0 0
+c
+d 52 3 1 0 0
+c
+d 53 1 0 0 0
+c
+d 791 2 1 0 0
+c
+d 793 1 0 0 0
+c
+d 575 1 0 0 0
+c
+d 796 1 0 0 0
+c
+d 599 3 0 1 0
+c
+d 1246 3 1 0 0
+c
+d 617 1 0 0 0
+c
+d 989 1 0 0 0
+c
+d 775 1 0 0 0
+c
+d 785 1 0 1 0
+c
+d 242 1 0 0 0
+c
+d 243 1 0 0 0
+c
+d 382 3 1 0 0
+c
+d 532 1 0 0 0
+c
+d 535 1 0 0 0
+c
+d 574 2 0 2 0
+c
+d 795 1 0 0 0
+c
+d 217 1 0 0 0
+c
+d 1240 2 0 0 0
+c
+d 1285 4 1 0 0
+c
+d 437 3 0 2 0
+c
+d 368 3 1 0 0
+c
+d 75 2 0 1 0
+c
+d 907 1 0 0 0
+c
+d 908 3 0 0 0
+c
+d 691 2 0 1 0
+c
+d 801 1 1 0 0
+c
+d 965 1 0 1 0
+c
+d 971 1 0 1 0
+c
+d 133 2 0 1 0
+c
+d 755 2 0 0 0
+c
+d 756 1 0 0 0
+c
+d 91 3 1 0 0
+c
+d 767 1 1 0 0
+c
+d 876 2 0 0 0
+c
+d 502 1 0 0 0
+c
+d 507 2 1 0 0
+c
+d 373 1 0 0 0
+c
+d 374 1 0 0 0
+c
+d 377 1 0 0 0
+c
+d 982 2 0 0 0
+c
+d 24 2 0 0 0
+c
+d 487 2 0 2 0
+c
+d 691 3 1 0 0
+c
+d 1266 1 0 0 0
+c
+d 1274 1 0 0 0
+c
+d 1285 1 1 0 0
+c
+d 163 1 0 0 0
+c
+d 1249 1 0 0 0
+c
+d 565 2 0 0 0
+c
+d 791 1 0 0 0
+c
+d 795 1 0 0 0
+c
+d 825 1 0 0 0
+c
+d 428 2 0 0 0
+c
+d 588 1 1 0 0
+c
+d 785 2 0 0 0
+c
+d 468 1 0 1 0
+c
+d 475 1 0 1 0
+c
+d 478 1 0 0 0
+c
+d 572 3 0 1 0
+c
+d 159 2 0 0 0
+c
+d 208 3 0 2 0
+c
+d 784 2 0 0 0
+c
+d 753 1 0 1 0
+c
+d 858 1 0 0 0
+c
+d 429 3 0 0 0
+c
+d 574 1 0 0 0
+c
+d 795 1 0 0 0
+c
+d 48 1 0 0 0
+c
+d 49 2 1 0 0
+c
+d 597 2 0 0 0
+c
+d 437 1 0 0 0
+c
+d 457 1 0 0 0
+c
+d 523 2 0 1 0
+c
+d 524 1 0 1 0
+c
+d 126 1 0 0 0
+c
+d 127 2 1 0 0
+c
+d 592 2 0 0 0
+c
+d 835 1 0 0 0
+c
+d 836 2 0 0 0
+c
+d 384 2 0 0 0
+c
+d 19 2 0 0 0
+c
+d 21 2 1 0 0
+c
+d 428 2 0 1 0
+c
+d 983 2 0 0 0
+c
+d 1185 2 0 0 0
+c
+d 204 3 0 0 0
+c
+d 5 1 0 0 0
+c
+d 9 1 0 0 0
+c
+d 10 1 0 0 0
+c
+d 437 3 1 0 0
+c
+d 437 1 0 1 0
+c
+d 463 2 0 1 0
+c
+d 353 2 1 0 0
+c
+d 354 1 0 0 0
+c
+d 369 2 1 1 0
+c
+d 757 2 0 0 0
+c
+d 66 2 0 0 0
+c
+d 67 1 0 1 0
+c
+d 602 2 0 0 0
+c
+d 591 1 0 1 0
+c
+d 593 3 0 1 0
+c
+d 191 4 0 0 0
+c
+d 87 2 0 2 0
+c
+d 46 1 0 0 0
+c
+d 75 1 0 0 0
+c
+d 437 1 1 0 0
+c
+d 455 2 0 0 0
+c
+d 1011 5 1 0 0
+c
+d 315 3 0 0 0
+c
+d 610 3 0 2 0
+c
+d 787 1 0 1 0
+c
+d 882 2 0 1 0
+c
+d 437 1 0 0 0
+c
+d 469 1 1 0 0
+c
+d 470 1 0 0 0
+c
+d 482 3 0 0 0
+c
+d 511 2 1 0 0
+c
+d 522 2 0 1 0
+c
+d 749 3 0 2 0
+c
+d 1194 2 0 0 0
+c
+d 101 1 0 1 0
+c
+d 424 1 0 0 0
+c
+d 426 1 0 1 0
+c
+d 866 2 1 0 0
+c
+d 867 1 0 0 0
+c
+d 199 2 0 0 0
+c
+d 622 2 0 0 0
+c
+d 965 3 0 0 0
+c
+d 162 1 0 0 0
+c
+d 171 1 0 0 0
+c
+d 800 1 0 0 0
+c
+d 801 1 1 0 0
+c
+d 278 2 0 2 0
+c
+d 965 2 0 0 0
+c
+d 966 1 1 0 0
+c
+d 4 1 0 1 0
+c
+d 12 2 0 1 0
+c
+d 829 3 1 0 0
+c
+d 927 2 0 1 0
+c
+d 858 1 0 0 0
+c
+d 872 1 0 0 0
+c
+d 334 1 0 0 0
+c
+d 335 1 0 0 0
+c
+d 336 1 0 0 0
+c
+d 274 2 0 0 0
+c
+d 276 1 0 0 0
+c
+d 854 3 1 0 0
+c
+d 89 4 0 1 0
+c
+d 34 1 1 0 0
+c
+d 35 2 0 0 0
+c
+d 341 1 0 0 0
+c
+d 348 1 0 0 0
+c
+d 615 2 0 0 0
+c
+d 162 2 0 0 0
+c
+d 355 1 0 1 0
+c
+d 807 1 0 1 0
+c
+d 821 1 0 1 0
+c
+d 977 2 0 0 0
+c
+d 437 2 0 0 0
+c
+d 457 1 1 0 0
+c
+d 789 1 0 0 0
+c
+d 829 1 0 0 0
+c
+d 833 1 0 0 0
+c
+d 510 2 0 1 0
+c
+d 120 2 0 0 0
+c
+d 124 1 0 0 0
+c
+d 1024 1 0 1 0
+c
+d 1025 1 0 0 0
+c
+d 1026 1 0 0 0
+c
+d 426 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 132 1 0 0 0
+c
+d 513 1 0 1 0
+c
+d 510 2 0 0 0
+c
+d 517 1 0 0 0
+c
+d 152 1 0 0 0
+c
+d 1254 2 0 0 0
+c
+d 493 3 1 0 0
+c
+d 199 2 0 0 0
+c
+d 200 1 1 0 0
+c
+d 393 1 0 0 0
+c
+d 395 1 0 0 0
+c
+d 337 1 0 0 0
+c
+d 338 2 1 0 0
+c
+d 621 1 0 1 0
+c
+d 646 1 0 1 0
+c
+d 529 1 0 0 0
+c
+d 1062 1 1 0 0
+c
+d 1064 1 0 0 0
+c
+d 341 1 0 0 0
+c
+d 470 2 1 0 0
+c
+d 168 2 1 0 0
+c
+d 1 2 0 0 0
+c
+d 211 1 0 1 0
+c
+d 217 1 0 1 0
+c
+d 274 1 1 0 0
+c
+d 275 2 0 0 0
+c
+d 617 2 0 0 0
+c
+d 1071 3 0 0 0
+c
+d 767 2 0 1 0
+c
+d 891 1 0 1 0
+c
+d 829 2 0 0 0
+c
+d 181 2 1 0 0
+c
+d 195 1 0 0 0
+c
+d 157 2 0 0 0
+c
+d 1021 4 1 0 0
+c
+d 592 3 1 0 0
+c
+d 791 2 0 0 0
+c
+d 829 1 0 1 0
+c
+d 1243 3 1 0 0
+c
+d 422 2 0 0 0
+c
+d 697 3 1 0 0
+c
+d 990 1 0 1 0
+c
+d 1000 1 0 0 0
+c
+d 1001 1 0 0 0
+c
+d 178 3 1 0 0
+c
+d 1156 2 0 0 0
+c
+d 1192 1 0 0 0
+c
+d 565 2 0 2 0
+c
+d 799 2 0 2 0
+c
+d 602 4 1 0 0
+c
+d 264 1 0 1 0
+c
+d 286 2 0 1 0
+c
+d 769 4 0 0 0
+c
+d 393 1 0 0 0
+c
+d 407 1 0 0 0
+c
+d 183 4 1 0 0
+c
+d 699 1 0 1 0
+c
+d 844 2 0 1 0
+c
+d 55 3 0 0 0
+c
+d 120 3 1 0 0
+c
+d 789 3 1 0 0
+c
+d 686 1 0 0 0
+c
+d 691 1 0 0 0
+c
+d 633 1 0 0 0
+c
+d 634 1 0 0 0
+c
+d 168 3 0 2 0
+c
+d 663 3 0 2 0
+c
+d 47 4 0 0 0
+c
+d 177 3 0 0 0
+c
+d 965 2 0 1 0
+c
+d 565 1 0 0 0
+c
+d 568 1 0 0 0
+c
+d 419 4 0 0 0
+c
+d 437 3 1 0 0
+c
+d 167 3 0 0 0
+c
+d 178 3 1 0 0
+c
+d 85 1 0 0 0
+c
+d 1278 1 0 0 0
+c
+d 426 1 0 0 0
+c
+d 591 2 0 2 0
+c
+d 533 1 0 1 0
+c
+d 534 2 0 0 0
+c
+d 1180 1 0 0 0
+c
+d 1181 1 0 0 0
+c
+d 734 2 0 0 0
+c
+d 46 2 0 0 0
+c
+d 73 1 1 0 0
+c
+d 769 1 0 0 0
+c
+d 775 2 0 0 0
+c
+d 18 2 1 0 0
+c
+d 30 1 0 0 0
+c
+d 84 3 1 0 0
+c
+d 554 1 0 1 0
+c
+d 555 1 0 0 0
+c
+d 75 3 1 0 0
+c
+d 132 1 0 0 0
+c
+d 133 1 0 0 0
+c
+d 337 1 0 0 0
+c
+d 338 3 0 0 0
+c
+d 384 2 0 0 0
+c
+d 621 2 0 0 0
+c
+d 646 2 0 0 0
+c
+d 615 2 1 0 0
+c
+d 616 1 0 0 0
+c
+d 10 1 1 0 0
+c
+d 12 1 0 0 0
+c
+d 715 1 0 0 0
+c
+d 716 2 0 0 0
+c
+d 127 1 0 0 0
+c
+d 533 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 498 1 1 0 0
+c
+d 500 1 0 0 0
+c
+d 565 2 0 0 0
+c
+d 1056 1 0 0 0
+c
+d 715 2 0 0 0
+c
+d 716 1 0 0 0
+c
+d 133 3 0 0 0
+c
+d 436 2 0 0 0
+c
+d 348 2 0 0 0
+c
+d 581 2 0 2 0
+c
+d 811 2 0 0 0
+c
+d 437 2 0 2 0
+c
+d 532 1 0 0 0
+c
+d 535 1 0 0 0
+c
+d 294 1 0 0 0
+c
+d 295 2 0 0 0
+c
+d 39 3 0 2 0
+c
+d 737 1 0 0 0
+c
+d 754 1 0 0 0
+c
+d 756 1 0 0 0
+c
+d 46 3 0 0 0
+c
+d 606 3 0 0 0
+c
+d 1266 2 0 1 0
+c
+d 1274 1 0 1 0
+c
+d 797 1 0 0 0
+c
+d 926 1 1 0 0
+c
+d 927 1 0 1 0
+c
+d 1013 1 0 1 0
+c
+d 1019 1 0 1 0
+c
+d 167 1 0 0 0
+c
+d 369 2 0 0 0
+c
+d 1185 4 0 2 0
+c
+d 1165 1 0 0 0
+c
+d 1211 2 0 2 0
+c
+d 884 3 0 0 0
+c
+d 324 1 0 0 0
+c
+d 332 1 0 0 0
+c
+d 54 1 0 0 0
+c
+d 60 1 1 0 0
+c
+d 66 1 0 0 0
+c
+d 157 1 1 0 0
+c
+d 162 2 0 0 0
+c
+d 274 3 0 0 0
+c
+d 855 3 1 0 0
+c
+d 769 3 1 0 0
+c
+d 1274 2 0 0 0
+c
+d 789 1 0 0 0
+c
+d 790 1 0 0 0
+c
+d 374 3 0 0 0
+c
+d 46 1 0 0 0
+c
+d 75 2 1 0 0
+c
+d 46 2 0 0 0
+c
+d 428 1 1 0 0
+c
+d 588 1 0 0 0
+c
+d 590 1 0 0 0
+c
+d 830 1 0 0 0
+c
+d 831 1 0 0 0
+c
+d 18 1 0 1 0
+c
+d 84 1 0 1 0
+c
+d 524 3 1 0 0
+c
+d 811 2 0 0 0
+c
+d 282 2 0 1 0
+c
+d 211 3 1 1 0
+c
+d 965 1 0 0 0
+c
+d 977 2 0 0 0
+c
+d 47 1 0 0 0
+c
+d 769 1 0 1 0
+c
+d 775 1 0 1 0
+c
+d 19 2 0 0 0
+c
+d 20 1 0 0 0
+c
+d 823 3 1 0 0
+c
+d 395 2 0 0 0
+c
+d 196 1 0 0 0
+c
+d 199 2 0 2 0
+c
+d 46 2 0 1 0
+c
+d 73 1 0 1 0
+c
+d 1150 2 0 0 0
+c
+d 50 3 0 2 0
+c
+d 371 1 0 1 0
+c
+d 372 1 0 0 0
+c
+d 373 1 0 1 0
+c
+d 1125 2 0 0 0
+c
+d 510 3 1 0 0
+c
+d 623 2 1 0 0
+c
+d 624 1 0 0 0
+c
+d 129 1 0 0 0
+c
+d 523 1 0 0 0
+c
+d 1163 2 0 0 0
+c
+d 181 1 0 0 0
+c
+d 195 1 0 0 0
+c
+d 203 1 0 0 0
+c
+d 226 3 0 0 0
+c
+d 5 3 1 0 0
+c
+d 753 2 0 0 0
+c
+d 789 4 1 0 0
+c
+d 580 1 0 1 0
+c
+d 584 1 0 0 0
+c
+d 591 1 0 1 0
+c
+d 534 1 0 0 0
+c
+d 543 1 0 0 0
+c
+d 544 1 0 1 0
+c
+d 545 1 1 0 0
+c
+d 99 1 0 1 0
+c
+d 1003 2 0 1 0
+c
+d 66 1 0 1 0
+c
+d 69 1 0 1 0
+c
+d 829 2 0 0 0
+c
+d 1192 4 0 0 0
+c
+d 146 3 1 0 0
+c
+d 1184 3 1 0 0
+c
+d 534 4 1 0 0
+c
+d 146 2 0 0 0
+c
+d 1022 1 1 0 0
+c
+d 1023 2 0 0 0
+c
+d 373 2 0 0 0
+c
+d 156 2 0 0 0
+c
+d 400 1 0 0 0
+c
+d 157 2 0 0 0
+c
+d 33 2 0 2 0
+c
+d 775 1 0 0 0
+c
+d 882 2 0 0 0
+c
+d 734 2 0 2 0
+c
+d 167 1 0 0 0
+c
+d 1105 2 1 0 0
+c
+d 551 2 0 1 0
+c
+d 1156 3 0 0 0
+c
+d 87 2 0 2 0
+c
+d 1070 1 0 0 0
+c
+d 1071 2 1 0 0
+c
+d 437 2 0 2 0
+c
+d 457 1 0 0 0
+c
+d 169 1 0 0 0
+c
+d 376 1 1 0 0
+c
+d 1136 1 0 1 0
+c
+d 477 1 0 0 0
+c
+d 478 1 0 0 0
+c
+d 883 2 0 2 0
+c
+d 650 2 0 0 0
+c
+d 47 3 1 1 0
+c
+d 836 2 0 0 0
+c
+d 592 2 0 0 0
+c
+d 395 3 1 0 0
+c
+d 803 3 1 0 0
+c
+d 507 1 1 0 0
+c
+d 1060 1 0 0 0
+c
+d 1061 1 0 1 0
+c
+d 882 2 0 0 0
+c
+d 887 1 0 0 0
+c
+d 734 1 0 0 0
+c
+d 735 2 0 0 0
+c
+d 554 1 0 0 0
+c
+d 555 1 0 1 0
+c
+d 59 1 0 0 0
+c
+d 60 1 0 0 0
+c
+d 75 2 0 0 0
+c
+d 84 1 1 0 0
+c
+d 878 1 0 0 0
+c
+d 882 2 0 0 0
+c
+d 146 3 1 0 0
+c
+d 19 1 1 0 0
+c
+d 1024 1 0 1 0
+c
+d 1060 3 1 0 0
+c
+d 286 1 0 1 0
+c
+d 1221 2 0 1 0
+c
+d 743 1 0 0 0
+c
+d 753 2 1 0 0
+c
+d 286 2 0 1 0
+c
+d 101 1 0 0 0
+c
+d 1095 1 0 1 0
+c
+d 470 1 0 1 0
+c
+d 478 1 0 1 0
+c
+d 1266 1 0 0 0
+c
+d 1274 2 0 0 0
+c
+d 608 2 0 0 0
+c
+d 18 2 0 0 0
+c
+d 77 1 1 0 0
+c
+d 228 2 0 0 0
+c
+d 1195 2 0 1 0
+c
+d 1198 1 0 1 0
+c
+d 87 1 0 1 0
+c
+d 89 1 0 0 0
+c
+d 1013 1 0 0 0
+c
+d 1017 2 1 0 0
+c
+d 1018 1 0 0 0
+c
+d 341 1 0 0 0
+c
+d 343 1 0 0 0
+c
+d 286 2 0 2 0
+c
+d 1221 1 0 0 0
+c
+d 394 1 1 0 0
+c
+d 1109 1 0 0 0
+c
+d 1111 2 0 0 0
+c
+d 527 1 0 0 0
+c
+d 543 2 1 0 0
+c
+d 437 3 1 0 0
+c
+d 437 2 0 2 0
+c
+d 60 1 0 1 0
+c
+d 66 1 0 1 0
+c
+d 854 1 0 0 0
+c
+d 855 1 0 0 0
+c
+d 21 1 0 0 0
+c
+d 1021 1 1 0 0
+c
+d 1022 2 0 0 0
+c
+d 146 1 0 0 0
+c
+d 153 1 0 0 0
+c
+d 226 2 0 0 0
+c
+d 604 1 0 0 0
+c
+d 640 1 0 0 0
+c
+d 1106 4 0 0 0
+c
+d 477 1 0 0 0
+c
+d 486 1 0 0 0
+c
+d 17 2 0 0 0
+c
+d 93 1 1 0 0
+c
+d 569 1 1 0 0
+c
+d 574 1 0 0 0
+c
+d 1051 2 0 0 0
+c
+d 291 2 1 0 0
+c
+d 299 1 0 0 0
+c
+d 273 3 0 1 0
+c
+d 132 1 0 1 0
+c
+d 133 2 0 0 0
+c
+d 556 1 0 0 0
+c
+d 557 1 0 0 0
+c
+d 511 1 0 1 0
+c
+d 521 2 0 0 0
+c
+d 428 3 1 0 0
+c
+d 343 3 0 0 0
+c
+d 510 1 0 1 0
+c
+d 517 1 0 0 0
+c
+d 695 3 1 0 0
+c
+d 294 2 0 1 0
+c
+d 1097 2 0 0 0
+c
+d 1101 1 0 0 0
+c
+d 31 2 0 0 0
+c
+d 1318 1 0 0 0
+c
+d 87 2 0 1 0
+c
+d 592 3 1 0 0
+c
+d 863 2 0 0 0
+c
+d 875 2 0 1 0
+c
+d 86 1 0 0 0
+c
+d 87 1 0 1 0
+c
+d 499 1 0 1 0
+c
+d 505 1 0 1 0
+c
+d 565 1 0 0 0
+c
+d 566 1 0 0 0
+c
+d 568 1 0 1 0
+c
+d 811 1 0 0 0
+c
+d 812 3 0 0 0
+c
+d 551 2 0 1 0
+c
+d 157 2 0 0 0
+c
+d 580 1 0 0 0
+c
+d 581 1 0 1 0
+c
+d 582 1 0 1 0
+c
+d 752 1 1 0 0
+c
+d 753 1 0 0 0
+c
+d 761 1 0 0 0
+c
+d 876 1 0 0 0
+c
+d 878 1 0 0 0
+c
+d 888 2 0 2 0
+c
+d 475 2 0 0 0
+c
+d 337 2 0 0 0
+c
+d 338 1 0 0 0
+c
+d 556 3 0 0 0
+c
+d 470 4 1 0 0
+c
+d 340 3 0 0 0
+c
+d 54 1 0 0 0
+c
+d 697 2 0 0 0
+c
+d 26 1 0 0 0
+c
+d 39 1 0 0 0
+c
+d 427 2 0 1 0
+c
+d 428 1 0 1 0
+c
+d 767 1 0 0 0
+c
+d 876 1 0 0 0
+c
+d 877 1 0 0 0
+c
+d 19 1 0 0 0
+c
+d 1013 1 0 0 0
+c
+d 833 2 0 1 0
+c
+d 411 2 0 0 0
+c
+d 482 1 0 1 0
+c
+d 484 1 0 0 0
+c
+d 487 2 0 1 0
+c
+d 691 2 1 0 0
+c
+d 315 1 0 0 0
+c
+d 316 1 0 0 0
+c
+d 301 2 0 0 0
+c
+d 89 1 0 0 0
+c
+d 550 1 0 1 0
+c
+d 46 2 0 0 0
+c
+d 73 1 0 0 0
+c
+d 806 1 0 0 0
+c
+d 807 1 0 0 0
+c
+d 808 1 0 0 0
+c
+d 529 3 1 0 0
+c
+d 340 2 0 0 0
+c
+d 491 1 0 0 0
+c
+d 75 1 0 0 0
+c
+d 86 1 0 1 0
+c
+d 467 1 1 0 0
+c
+d 468 2 0 0 0
+c
+d 1174 1 0 1 0
+c
+d 1185 1 0 1 0
+c
+d 1177 2 0 0 0
+c
+d 132 1 0 0 0
+c
+d 1257 1 0 0 0
+c
+d 1258 1 0 0 0
+c
+d 584 2 0 2 0
+c
+d 586 1 0 0 0
+c
+d 152 2 0 0 0
+c
+d 413 1 1 0 0
+c
+d 990 2 0 0 0
+c
+d 93 1 0 1 0
+c
+d 114 1 0 1 0
+c
+d 651 2 0 0 0
+c
+d 181 1 0 1 0
+c
+d 190 1 0 0 0
+c
+d 500 2 0 0 0
+c
+d 46 2 0 0 0
+c
+d 802 2 0 0 0
+c
+d 791 3 0 0 0
+c
+d 146 3 1 0 0
+c
+d 604 2 0 0 0
+c
+d 749 2 0 0 0
+c
+d 894 1 1 0 0
+c
+d 858 3 1 0 0
+c
+d 1015 3 1 0 0
+c
+d 787 2 0 1 0
+c
+d 436 3 0 0 0
+c
+d 393 1 0 0 0
+c
+d 394 1 0 0 0
+c
+d 1109 1 0 0 0
+c
+d 470 1 0 1 0
+c
+d 477 2 0 1 0
+c
+d 302 2 0 0 0
+c
+d 303 1 0 0 0
+c
+d 734 2 0 2 0
+c
+d 437 2 0 0 0
+c
+d 807 1 0 0 0
+c
+d 823 1 0 0 0
+c
+d 204 2 0 1 0
+c
+d 205 1 0 0 0
+c
+d 46 2 0 0 0
+c
+d 1314 1 0 0 0
+c
+d 511 1 0 0 0
+c
+d 516 1 0 1 0
+c
+d 520 1 0 1 0
+c
+d 1296 2 0 0 0
+c
+d 276 3 1 0 0
+c
+d 1269 3 1 0 0
+c
+d 157 3 0 2 0
+c
+d 980 3 1 0 0
+c
+d 395 1 0 0 0
+c
+d 1106 1 0 0 0
+c
+d 298 2 0 1 0
+c
+d 457 1 0 0 0
+c
+d 466 1 0 0 0
+c
+d 511 2 0 0 0
+c
+d 1170 2 0 0 0
+c
+d 1173 1 1 0 0
+c
+d 565 3 0 0 0
+c
+d 374 2 1 0 0
+c
+d 697 3 1 0 0
+c
+d 1 2 0 0 0
+c
+d 353 3 1 0 0
+c
+d 1279 1 1 0 0
+c
+d 1280 1 0 0 0
+c
+d 1270 4 0 0 0
+c
+d 610 2 0 0 0
+c
+d 1127 1 0 0 0
+c
+d 1128 1 0 0 0
+c
+d 167 1 0 0 0
+c
+d 168 2 0 2 0
+c
+d 1195 2 1 0 0
+c
+d 1197 1 0 0 0
+c
+d 602 3 1 0 0
+c
+d 157 1 0 0 0
+c
+d 1142 1 0 0 0
+c
+d 115 3 1 0 0
+c
+d 377 2 1 0 0
+c
+d 379 1 0 0 0
+c
+d 800 2 0 0 0
+c
+d 977 1 0 0 0
+c
+d 978 1 0 0 0
+c
+d 610 4 1 0 0
+c
+d 28 2 0 0 0
+c
+d 29 1 0 0 0
+c
+d 54 1 0 0 0
+c
+d 719 2 1 0 0
+c
+d 1241 3 1 0 0
+c
+d 248 3 0 1 0
+c
+d 797 3 0 2 0
+c
+d 124 2 0 0 0
+c
+d 164 1 0 0 0
+c
+d 166 1 0 0 0
+c
+d 153 2 0 0 0
+c
+d 228 1 1 0 0
+c
+d 989 3 0 0 0
+c
+d 786 2 0 1 0
+c
+d 795 1 0 1 0
+c
+d 823 1 0 1 0
+c
+d 825 1 0 0 0
+c
+d 523 1 0 1 0
+c
+d 525 3 1 0 0
+c
+d 194 2 1 0 0
+c
+d 224 2 0 0 0
+c
+d 18 3 0 0 0
+c
+d 737 1 0 0 0
+c
+d 740 1 0 0 0
+c
+d 191 2 0 2 0
+c
+d 532 2 0 0 0
+c
+d 537 1 1 0 0
+c
+d 49 3 0 0 0
+c
+d 5 3 1 0 0
+c
+d 507 1 0 0 0
+c
+d 508 1 0 0 0
+c
+d 164 1 0 1 0
+c
+d 167 2 0 1 0
+c
+d 1170 3 0 0 0
+c
+d 691 2 0 1 0
+c
+d 800 1 1 0 0
+c
+d 120 1 0 0 0
+c
+d 126 1 0 0 0
+c
+d 133 1 0 0 0
+c
+d 134 1 0 0 0
+c
+d 694 2 0 0 0
+c
+d 77 2 0 0 0
+c
+d 1296 2 0 0 0
+c
+d 274 1 0 1 0
+c
+d 277 1 0 0 0
+c
+d 46 2 1 0 0
+c
+d 1314 1 0 0 0
+c
+d 852 1 1 0 0
+c
+d 861 2 0 0 0
+c
+d 133 1 0 0 0
+c
+d 134 1 0 0 0
+c
+d 373 1 0 1 0
+c
+d 374 2 0 1 0
+c
+d 807 1 0 0 0
+c
+d 823 1 0 0 0
+c
+d 591 2 0 0 0
+c
+d 369 2 0 1 0
+c
+d 382 1 0 1 0
+c
+d 289 3 0 0 0
+c
+d 690 1 0 0 0
+c
+d 705 1 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 1157 1 0 0 0
+c
+d 508 3 0 0 0
+c
+d 509 1 1 0 0
+c
+d 1195 2 0 1 0
+c
+d 286 4 1 0 0
+c
+d 457 2 0 0 0
+c
+d 465 1 0 0 0
+c
+d 1170 2 1 0 0
+c
+d 1185 1 0 0 0
+c
+d 146 2 0 0 0
+c
+d 294 3 1 0 0
+c
+d 842 3 1 0 0
+c
+d 225 2 0 1 0
+c
+d 691 2 0 0 0
+c
+d 437 3 1 0 0
+c
+d 691 2 0 0 0
+c
+d 709 1 0 0 0
+c
+d 86 2 1 0 0
+c
+d 168 3 0 0 0
+c
+d 738 3 1 0 0
+c
+d 52 1 0 0 0
+c
+d 719 1 0 0 0
+c
+d 162 2 0 0 0
+c
+d 840 2 0 0 0
+c
+d 807 2 0 0 0
+c
+d 823 1 0 1 0
+c
+d 437 3 0 0 0
+c
+d 1188 3 0 0 0
+c
+d 301 2 0 0 0
+c
+d 457 2 1 0 0
+c
+d 458 1 0 0 0
+c
+d 276 2 0 1 0
+c
+d 301 1 0 1 0
+c
+d 842 2 0 2 0
+c
+d 505 3 0 2 0
+c
+d 278 4 1 0 0
+c
+d 455 3 0 0 0
+c
+d 204 1 1 0 0
+c
+d 1241 1 0 0 0
+c
+d 54 1 0 1 0
+c
+d 66 1 0 1 0
+c
+d 75 2 0 0 0
+c
+d 1131 3 0 0 0
+c
+d 348 1 0 0 0
+c
+d 407 2 1 1 0
+c
+d 132 1 0 0 0
+c
+d 340 3 0 0 0
+c
+d 606 4 0 0 0
+c
+d 734 3 1 0 0
+c
+d 1318 2 0 0 0
+c
+d 578 2 0 0 0
+c
+d 579 1 0 0 0
+c
+d 183 1 0 0 0
+c
+d 184 1 0 0 0
+c
+d 196 1 0 0 0
+c
+d 882 1 1 0 0
+c
+d 886 2 0 0 0
+c
+d 620 2 0 1 0
+c
+d 621 3 1 0 0
+c
+d 300 1 0 0 0
+c
+d 314 2 0 0 0
+c
+d 133 2 1 0 0
+c
+d 101 2 0 0 0
+c
+d 610 1 1 0 0
+c
+d 327 1 1 0 0
+c
+d 348 1 0 1 0
+c
+d 349 3 1 0 0
+c
+d 1145 1 0 0 0
+c
+d 120 2 1 0 0
+c
+d 121 1 0 1 0
+c
+d 437 2 0 0 0
+c
+d 840 1 0 0 0
+c
+d 842 1 0 0 0
+c
+d 93 2 0 0 0
+c
+d 130 1 0 0 0
+c
+d 763 4 0 0 0
+c
+d 622 2 1 0 0
+c
+d 965 1 0 0 0
+c
+d 507 3 1 0 0
+c
+d 734 2 0 0 0
+c
+d 592 3 0 2 0
+c
+d 757 3 0 1 0
+c
+d 133 3 1 0 0
+c
+d 61 2 1 0 0
+c
+d 62 2 0 0 0
+c
+d 64 1 0 0 0
+c
+d 1127 2 0 0 0
+c
+d 686 2 1 0 0
+c
+d 700 1 0 0 0
+c
+d 373 2 0 0 0
+c
+d 374 1 1 0 0
+c
+d 262 2 0 1 0
+c
+d 273 1 0 1 0
+c
+d 861 3 0 0 0
+c
+d 341 3 1 0 0
+c
+d 373 1 0 0 0
+c
+d 382 1 0 0 0
+c
+d 369 1 0 0 0
+c
+d 382 1 0 0 0
+c
+d 340 2 1 0 0
+c
+d 343 1 0 0 0
+c
+d 753 3 1 0 0
+c
+d 833 2 0 2 0
+c
+d 763 2 0 2 0
+c
+d 766 1 0 0 0
+c
+d 755 1 0 1 0
+c
+d 764 1 0 0 0
+c
+d 765 1 0 1 0
+c
+d 839 2 0 2 0
+c
+d 854 2 0 0 0
+c
+d 838 3 0 0 0
+c
+d 157 3 0 2 0
+c
+d 168 1 0 1 0
+c
+d 169 1 0 1 0
+c
+d 7 3 0 1 0
+c
+d 1022 2 1 0 0
+c
+d 1023 1 0 0 0
+c
+d 294 1 0 1 0
+c
+d 296 1 0 0 0
+c
+d 46 2 0 0 0
+c
+d 806 5 1 0 0
+c
+d 878 2 0 0 0
+c
+d 502 3 1 0 0
+c
+d 101 3 0 0 0
+c
+d 301 2 0 2 0
+c
+d 243 3 1 0 0
+c
+d 593 2 1 0 0
+c
+d 4 2 0 0 0
+c
+d 1003 2 0 0 0
+c
+d 133 1 0 1 0
+c
+d 134 2 0 1 0
+c
+d 839 1 1 0 0
+c
+d 842 2 0 0 0
+c
+d 153 3 1 0 0
+c
+d 734 2 0 0 0
+c
+d 286 3 1 0 0
+c
+d 480 1 0 0 0
+c
+d 481 1 0 1 0
+c
+d 484 1 0 0 0
+c
+d 1157 1 0 0 0
+c
+d 1158 1 0 0 0
+c
+d 1163 2 0 0 0
+c
+d 286 1 0 0 0
+c
+d 291 1 0 0 0
+c
+d 348 2 1 1 0
+c
+d 120 1 0 0 0
+c
+d 121 1 1 0 0
+c
+d 301 4 1 0 0
+c
+d 168 1 0 1 0
+c
+d 369 2 1 0 0
+c
+d 757 2 1 0 0
+c
+d 764 1 0 0 0
+c
+d 286 1 0 0 0
+c
+d 291 1 0 0 0
+c
+d 428 3 0 0 0
+c
+d 120 1 0 0 0
+c
+d 121 1 0 0 0
+c
+d 298 2 0 0 0
+c
+d 159 3 1 0 0
+c
+d 183 1 1 0 0
+c
+d 184 2 0 0 0
+c
+d 241 1 0 0 0
+c
+d 242 1 0 0 0
+c
+d 177 3 1 0 0
+c
+d 384 1 0 1 0
+c
+d 1111 1 1 0 0
+c
+d 111 1 0 1 0
+c
+d 146 2 1 0 0
+c
+d 156 5 1 0 0
+c
+d 634 3 1 0 0
+c
+d 642 1 0 1 0
+c
+d 643 1 0 0 0
+c
+d 101 1 1 0 0
+c
+d 111 1 0 0 0
+c
+d 87 2 0 0 0
+c
+d 756 1 0 0 0
+c
+d 757 2 0 0 0
+c
+d 324 3 1 0 0
+c
+d 836 3 1 0 0
+c
+d 131 2 1 0 0
+c
+d 132 1 0 0 0
+c
+d 211 2 0 0 0
+c
+d 1156 2 0 0 0
+c
+d 1192 1 0 0 0
+c
+d 1 3 0 2 0
+c
+d 437 2 0 2 0
+c
+d 575 1 0 0 0
+c
+d 114 1 0 0 0
+c
+d 115 1 0 1 0
+c
+d 86 3 1 0 0
+c
+d 878 3 0 2 0
+c
+d 341 1 0 0 0
+c
+d 470 1 0 0 0
+c
+d 797 2 0 0 0
+c
+d 927 1 1 0 0
+c
+d 437 1 0 0 0
+c
+d 454 1 1 0 0
+c
+d 455 2 0 0 0
+c
+d 477 2 0 0 0
+c
+d 478 1 1 0 0
+c
+d 437 2 0 0 0
+c
+d 467 2 0 0 0
+c
+d 760 2 0 0 0
+c
+d 276 2 1 0 0
+c
+d 475 2 0 1 0
+c
+d 400 1 0 0 0
+c
+d 408 1 0 0 0
+c
+d 301 2 1 0 0
+c
+d 315 1 0 0 0
+c
+d 395 1 0 1 0
+c
+d 396 1 0 1 0
+c
+d 397 1 0 0 0
+c
+d 159 2 0 0 0
+c
+d 18 3 0 0 0
+c
+d 52 3 1 0 0
+c
+d 274 2 0 0 0
+c
+d 606 3 0 2 0
+c
+d 348 1 0 1 0
+c
+d 1145 1 0 0 0
+c
+d 1185 3 0 0 0
+c
+d 1188 1 1 0 0
+c
+d 341 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 1111 2 1 0 0
+c
+d 1113 1 0 0 0
+c
+d 428 1 0 1 0
+c
+d 436 1 0 1 0
+c
+d 424 1 0 1 0
+c
+d 426 1 0 0 0
+c
+d 162 2 1 0 0
+c
+d 355 1 0 0 0
+c
+d 467 1 0 0 0
+c
+d 468 2 0 0 0
+c
+d 767 1 0 1 0
+c
+d 888 1 0 0 0
+c
+d 44 2 0 0 0
+c
+d 1020 1 0 0 0
+c
+d 47 1 0 1 0
+c
+d 48 3 1 0 0
+c
+d 789 2 0 0 0
+c
+d 29 3 0 1 0
+c
+d 507 3 0 0 0
+c
+d 430 1 0 0 0
+c
+d 470 1 0 0 0
+c
+d 575 2 0 0 0
+c
+d 60 1 0 0 0
+c
+d 61 2 0 1 0
+c
+d 368 1 0 1 0
+c
+d 369 2 1 0 0
+c
+d 738 3 1 0 0
+c
+d 204 3 1 0 0
+c
+d 224 1 1 0 0
+c
+d 1241 1 0 0 0
+c
+d 437 1 0 1 0
+c
+d 457 1 0 1 0
+c
+d 333 3 0 0 0
+c
+d 1003 3 0 0 0
+c
+d 581 2 0 0 0
+c
+d 185 2 1 0 0
+c
+d 186 1 0 1 0
+c
+d 194 3 1 0 0
+c
+d 580 1 0 0 0
+c
+d 582 1 0 1 0
+c
+d 584 1 0 1 0
+c
+d 799 3 0 0 0
+c
+d 278 2 1 0 0
+c
+d 146 1 0 1 0
+c
+d 1097 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 355 1 0 0 0
+c
+d 31 6 1 0 0
+c
+d 797 2 0 0 0
+c
+d 311 1 1 0 0
+c
+d 325 2 0 0 0
+c
+d 26 3 0 0 0
+c
+d 749 3 0 0 0
+c
+d 838 1 1 0 0
+c
+d 839 2 0 0 0
+c
+d 468 1 0 1 0
+c
+d 471 1 0 0 0
+c
+d 472 1 0 1 0
+c
+d 304 4 1 1 0
+c
+d 787 2 0 2 0
+c
+d 32 1 0 0 0
+c
+d 1320 2 0 0 0
+c
+d 168 2 0 0 0
+c
+d 26 1 0 0 0
+c
+d 28 2 0 0 0
+c
+d 1080 3 1 0 0
+c
+d 127 4 1 0 0
+c
+d 1185 3 1 0 0
+c
+d 1001 3 1 0 0
+c
+d 662 1 0 0 0
+c
+d 663 2 1 0 0
+c
+d 686 4 1 1 0
+c
+d 862 1 0 0 0
+c
+d 865 1 0 0 0
+c
+d 691 3 0 1 0
+c
+d 699 1 1 0 0
+c
+d 311 1 1 0 0
+c
+d 327 2 0 0 0
+c
+d 509 3 1 0 0
+c
+d 842 3 1 0 0
+c
+d 167 1 1 0 0
+c
+d 369 1 0 0 0
+c
+d 213 2 0 0 0
+c
+d 424 1 0 0 0
+c
+d 591 2 0 0 0
+c
+d 301 3 1 0 0
+c
+d 44 4 1 0 0
+c
+d 51 2 0 0 0
+c
+d 1153 2 1 0 0
+c
+d 1154 1 0 0 0
+c
+d 1195 3 1 0 0
+c
+d 1188 3 0 0 0
+c
+d 124 3 0 1 0
+c
+d 273 1 0 1 0
+c
+d 287 1 0 1 0
+c
+d 775 4 1 0 0
+c
+d 799 2 0 1 0
+c
+d 800 1 0 1 0
+c
+d 327 2 1 0 0
+c
+d 334 1 0 0 0
+c
+d 50 1 0 0 0
+c
+d 52 1 0 0 0
+c
+d 723 1 0 0 0
+c
+d 829 1 0 0 0
+c
+d 835 2 0 0 0
+c
+d 167 2 0 0 0
+c
+d 152 1 0 1 0
+c
+d 153 1 0 0 0
+c
+d 305 2 0 0 0
+c
+d 1142 1 1 0 0
+c
+d 806 1 0 0 0
+c
+d 807 1 0 0 0
+c
+d 324 1 0 0 0
+c
+d 325 2 1 0 0
+c
+d 69 1 0 1 0
+c
+d 70 2 1 0 0
+c
+d 623 1 0 0 0
+c
+d 626 1 0 0 0
+c
+d 591 4 0 0 0
+c
+d 510 1 0 0 0
+c
+d 517 1 0 0 0
+c
+d 367 2 0 1 0
+c
+d 811 2 0 0 0
+c
+d 50 1 0 1 0
+c
+d 724 2 0 1 0
+c
+d 604 1 0 0 0
+c
+d 640 1 1 0 0
+c
+d 641 2 0 0 0
+c
+d 799 2 0 1 0
+c
+d 806 2 0 0 0
+c
+d 1070 4 1 0 0
+c
+d 59 2 0 1 0
+c
+d 1011 1 0 1 0
+c
+d 540 1 0 0 0
+c
+d 541 1 0 1 0
+c
+d 811 2 0 0 0
+c
+d 914 1 0 0 0
+c
+d 557 1 0 0 0
+c
+d 1060 1 0 0 0
+c
+d 861 1 0 0 0
+c
+d 875 1 0 0 0
+c
+d 162 1 0 0 0
+c
+d 358 3 0 1 0
+c
+d 99 1 0 0 0
+c
+d 100 1 0 0 0
+c
+d 1002 1 1 0 0
+c
+d 862 3 0 1 0
+c
+d 324 1 0 0 0
+c
+d 325 2 1 0 0
+c
+d 437 1 0 0 0
+c
+d 468 1 0 0 0
+c
+d 471 1 1 0 0
+c
+d 662 1 0 0 0
+c
+d 667 1 1 0 0
+c
+d 668 1 0 0 0
+c
+d 424 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 146 3 1 0 0
+c
+d 423 2 0 1 0
+c
+d 1203 1 1 0 0
+c
+d 1204 1 0 1 0
+c
+d 1194 1 0 0 0
+c
+d 1195 1 1 0 0
+c
+d 1202 1 0 0 0
+c
+d 867 1 0 0 0
+c
+d 868 2 0 0 0
+c
+d 789 2 0 0 0
+c
+d 686 1 1 0 0
+c
+d 712 3 0 0 0
+c
+d 799 3 1 0 0
+c
+d 369 1 0 0 0
+c
+d 380 2 0 0 0
+c
+d 115 2 0 0 0
+c
+d 116 1 0 0 0
+c
+d 341 1 0 0 0
+c
+d 1147 1 0 1 0
+c
+d 287 2 0 0 0
+c
+d 1027 2 0 0 0
+c
+d 1028 1 0 0 0
+c
+d 301 3 0 0 0
+c
+d 737 4 0 2 0
+c
+d 384 2 0 0 0
+c
+d 1111 1 0 0 0
+c
+d 54 1 0 0 0
+c
+d 1311 1 0 0 0
+c
+d 334 1 0 0 0
+c
+d 340 1 0 0 0
+c
+d 341 1 1 0 0
+c
+d 840 2 0 0 0
+c
+d 289 2 1 1 0
+c
+d 560 2 0 0 0
+c
+d 749 3 1 1 0
+c
+d 906 2 0 0 0
+c
+d 52 1 0 0 0
+c
+d 54 2 0 0 0
+c
+d 1221 2 0 0 0
+c
+d 1222 1 0 0 0
+c
+d 133 2 0 1 0
+c
+d 691 1 1 0 0
+c
+d 693 2 0 0 0
+c
+d 604 3 1 0 0
+c
+d 699 3 0 0 0
+c
+d 796 5 2 0 0
+c
+d 287 2 0 0 0
+c
+d 775 1 0 1 0
+c
+d 882 1 0 0 0
+c
+d 883 1 0 1 0
+c
+d 121 1 1 0 0
+c
+d 123 1 0 1 0
+c
+d 124 1 0 0 0
+c
+d 806 1 0 0 0
+c
+d 807 2 0 2 0
+c
+d 130 2 0 0 0
+c
+d 1259 2 0 0 0
+c
+d 18 2 0 2 0
+c
+d 19 1 0 0 0
+c
+d 635 2 0 0 0
+c
+d 1023 4 1 0 0
+c
+d 1185 1 0 0 0
+c
+d 1201 1 0 1 0
+c
+d 79 2 0 0 0
+c
+d 80 1 0 0 0
+c
+d 91 2 0 0 0
+c
+d 882 1 0 0 0
+c
+d 886 1 0 0 0
+c
+d 887 1 0 0 0
+c
+d 1185 1 0 0 0
+c
+d 1188 1 0 0 0
+c
+d 341 1 0 1 0
+c
+d 343 2 0 1 0
+c
+d 427 3 1 0 0
+c
+d 1194 3 0 0 0
+c
+d 21 4 2 0 0
+c
+d 52 2 0 2 0
+c
+d 211 3 0 0 0
+c
+d 511 1 1 0 0
+c
+d 528 1 0 1 0
+c
+d 529 1 0 0 0
+c
+d 369 2 0 0 0
+c
+d 382 1 0 0 0
+c
+d 458 2 0 0 0
+c
+d 489 1 1 0 0
+c
+d 470 1 0 0 0
+c
+d 477 1 0 0 0
+c
+d 507 2 0 0 0
+c
+d 550 1 0 0 0
+c
+d 556 1 0 0 0
+c
+d 369 1 0 1 0
+c
+d 371 2 0 1 0
+c
+d 1170 1 0 0 0
+c
+d 1173 2 0 0 0
+c
+d 86 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 301 1 0 1 0
+c
+d 314 2 1 0 0
+c
+d 1113 2 0 2 0
+c
+d 580 1 1 0 0
+c
+d 581 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 355 2 1 0 0
+c
+d 584 2 0 1 0
+c
+d 585 1 0 1 0
+c
+d 424 3 1 0 0
+c
+d 457 1 0 1 0
+c
+d 459 3 1 0 0
+c
+d 985 1 0 0 0
+c
+d 987 1 0 0 0
+c
+d 988 1 0 0 0
+c
+d 806 1 0 0 0
+c
+d 910 1 0 0 0
+c
+d 277 1 0 0 0
+c
+d 278 1 0 0 0
+c
+d 1163 1 0 0 0
+c
+d 211 3 1 0 0
+c
+d 168 3 0 2 0
+c
+d 301 2 0 0 0
+c
+d 300 1 0 0 0
+c
+d 315 1 0 0 0
+c
+d 341 3 0 0 0
+c
+d 327 1 0 1 0
+c
+d 348 1 0 0 0
+c
+d 351 1 0 0 0
+c
+d 1229 4 1 0 0
+c
+d 334 1 0 0 0
+c
+d 341 1 0 0 0
+c
+d 12 2 0 0 0
+c
+d 355 1 0 1 0
+c
+d 358 1 0 1 0
+c
+d 411 1 0 0 0
+c
+d 415 1 0 0 0
+c
+d 1111 1 0 0 0
+c
+d 1112 2 0 0 0
+c
+d 2 1 0 0 0
+c
+d 3 3 0 0 0
+c
+d 101 3 0 1 0
+c
+d 21 3 1 1 0
+c
+d 510 3 1 0 0
+c
+d 507 3 1 0 0
+c
+d 662 1 0 0 0
+c
+d 663 2 0 0 0
+c
+d 1105 2 0 2 0
+c
+d 1106 1 0 0 0
+c
+d 789 2 0 0 0
+c
+d 18 2 0 1 0
+c
+d 887 1 1 0 0
+c
+d 888 2 0 0 0
+c
+d 470 1 0 1 0
+c
+d 477 1 0 1 0
+c
+d 369 2 0 0 0
+c
+d 19 1 1 0 0
+c
+d 622 1 0 0 0
+c
+d 628 1 0 0 0
+c
+d 1315 2 0 0 0
+c
+d 1316 1 0 0 0
+c
+d 777 4 0 0 0
+c
+d 1168 1 1 0 0
+c
+d 1170 2 0 0 0
+c
+d 301 1 0 0 0
+c
+d 313 2 1 0 0
+c
+d 262 1 0 1 0
+c
+d 270 1 0 0 0
+c
+d 1185 3 0 0 0
+c
+d 337 2 0 2 0
+c
+d 437 3 1 0 0
+c
+d 167 2 1 1 0
+c
+d 842 3 1 0 0
+c
+d 843 1 0 0 0
+c
+d 844 2 0 0 0
+c
+d 395 3 1 0 0
+c
+d 769 2 1 0 0
+c
+d 771 1 0 0 0
+c
+d 509 1 1 0 0
+c
+d 514 1 0 0 0
+c
+d 515 1 0 0 0
+c
+d 509 2 0 0 0
+c
+d 1071 1 1 0 0
+c
+d 836 2 0 0 0
+c
+d 133 3 0 2 0
+c
+d 168 3 1 0 0
+c
+d 882 1 0 0 0
+c
+d 884 1 0 1 0
+c
+d 885 1 0 1 0
+c
+d 59 2 0 2 0
+c
+d 472 1 0 0 0
+c
+d 475 1 0 0 0
+c
+d 507 1 0 1 0
+c
+d 514 2 0 0 0
+c
+d 11 1 1 0 0
+c
+d 12 1 0 0 0
+c
+d 262 2 0 1 0
+c
+d 278 1 0 1 0
+c
+d 509 1 1 0 0
+c
+d 510 1 0 0 0
+c
+d 517 1 0 0 0
+c
+d 348 2 0 0 0
+c
+d 157 2 0 0 0
+c
+d 324 2 0 0 0
+c
+d 1 1 0 0 0
+c
+d 2 1 1 0 0
+c
+d 842 2 0 1 0
+c
+d 157 1 0 0 0
+c
+d 1142 1 0 1 0
+c
+d 1143 2 0 0 0
+c
+d 315 2 0 1 0
+c
+d 138 2 0 0 0
+c
+d 21 1 0 0 0
+c
+d 29 1 0 0 0
+c
+d 21 3 1 0 0
+c
+d 205 1 0 0 0
+c
+d 211 1 0 0 0
+c
+d 182 1 0 0 0
+c
+d 183 1 1 0 0
+c
+d 191 1 0 0 0
+c
+d 789 3 1 0 0
+c
+d 156 1 0 0 0
+c
+d 164 1 0 0 0
+c
+d 165 1 0 0 0
+c
+d 301 2 0 1 0
+c
+d 1150 1 1 0 0
+c
+d 697 2 1 0 0
+c
+d 717 1 0 0 0
+c
+d 127 1 0 0 0
+c
+d 128 1 0 0 0
+c
+d 129 1 0 0 0
+c
+d 823 3 1 0 0
+c
+d 115 2 1 1 0
+c
+d 305 3 1 0 0
+c
+d 211 2 0 1 0
+c
+d 241 1 0 1 0
+c
+d 242 2 1 0 0
+c
+d 740 1 0 0 0
+c
+d 741 2 1 0 0
+c
+d 199 2 0 0 0
+c
+d 74 2 1 0 0
+c
+d 1299 2 0 0 0
+c
+d 1083 3 1 0 0
+c
+d 134 1 0 0 0
+c
+d 138 1 0 0 0
+c
+d 357 3 1 0 0
+c
+d 159 1 1 0 0
+c
+d 242 3 0 0 0
+c
+d 60 1 0 0 0
+c
+d 630 1 0 0 0
+c
+d 699 1 1 0 0
+c
+d 844 1 0 0 0
+c
+d 898 2 0 0 0
+c
+d 6 1 0 1 0
+c
+d 10 1 0 1 0
+c
+d 348 2 0 0 0
+c
+d 806 1 0 0 0
+c
+d 811 2 1 0 0
+c
+d 278 2 0 0 0
+c
+d 1170 1 1 0 0
+c
+d 1170 1 0 0 0
+c
+d 1184 1 0 0 0
+c
+d 1209 1 0 0 0
+c
+d 806 2 0 0 0
+c
+d 1084 2 0 0 0
+c
+d 875 3 0 0 0
+c
+d 89 2 0 1 0
+c
+d 437 4 1 0 0
+c
+d 507 2 0 1 0
+c
+d 529 1 0 1 0
+c
+d 1061 1 0 0 0
+c
+d 525 1 0 1 0
+c
+d 545 1 1 0 0
+c
+d 546 1 0 0 0
+c
+d 162 4 1 1 0
+c
+d 364 1 0 1 0
+c
+d 315 2 0 0 0
+c
+d 584 1 0 1 0
+c
+d 585 3 1 0 0
+c
+d 875 2 0 0 0
+c
+d 929 3 1 0 0
+c
+d 932 1 0 0 0
+c
+d 4 1 0 0 0
+c
+d 12 1 0 0 0
+c
+d 304 1 1 0 0
+c
+d 307 1 0 0 0
+c
+d 507 3 0 0 0
+c
+d 691 3 0 2 0
+c
+d 853 1 0 0 0
+c
+d 866 1 0 0 0
+c
+d 18 1 0 1 0
+c
+d 1279 1 0 1 0
+c
+d 159 1 0 0 0
+c
+d 183 2 0 0 0
+c
+d 1195 1 0 1 0
+c
+d 1202 2 0 0 0
+c
+d 26 2 0 1 0
+c
+d 164 4 1 0 0
+c
+d 4 4 0 0 0
+c
+d 276 3 0 2 0
+c
+d 378 1 0 0 0
+c
+d 384 1 0 1 0
+c
+d 315 2 0 0 0
+c
+d 324 1 1 0 0
+c
+d 522 2 0 0 0
+c
+d 278 1 0 0 0
+c
+d 1170 1 0 0 0
+c
+d 937 3 1 0 0
+c
+d 755 1 0 0 0
+c
+d 757 2 1 0 0
+c
+d 622 1 0 0 0
+c
+d 628 2 1 0 0
+c
+d 861 2 0 0 0
+c
+d 764 1 0 0 0
+c
+d 766 1 1 0 0
+c
+d 44 2 0 1 0
+c
+d 1020 1 0 1 0
+c
+d 89 1 0 0 0
+c
+d 91 2 0 0 0
+c
+d 1170 3 1 1 0
+c
+d 788 3 1 0 0
+c
+d 211 1 0 0 0
+c
+d 242 1 0 0 0
+c
+d 1231 1 0 0 0
+c
+d 132 3 0 1 0
+c
+d 148 5 1 1 0
+c
+d 1123 3 0 0 0
+c
+d 91 3 1 1 0
+c
+d 1163 3 0 0 0
+c
+d 521 2 0 1 0
+c
+d 799 2 0 1 0
+c
+d 842 1 1 0 0
+c
+d 527 2 0 0 0
+c
+d 424 1 0 1 0
+c
+d 584 1 0 1 0
+c
+d 591 1 0 0 0
+c
+d 1270 3 1 0 0
+c
+d 1111 4 1 0 0
+c
+d 131 1 0 0 0
+c
+d 132 1 0 0 0
+c
+d 523 1 1 0 0
+c
+d 157 1 0 0 0
+c
+d 1141 1 0 0 0
+c
+d 1142 1 0 0 0
+c
+d 96 3 1 0 0
+c
+d 882 2 1 0 0
+c
+d 888 1 0 0 0
+c
+d 1012 1 0 0 0
+c
+d 1015 3 0 0 0
+c
+d 1105 3 1 0 0
+c
+d 30 2 0 0 0
+c
+d 502 1 0 0 0
+c
+d 507 2 0 0 0
+c
+d 157 2 0 0 0
+c
+d 101 2 0 2 0
+c
+d 1095 1 0 0 0
+c
+d 757 1 1 0 0
+c
+d 758 1 0 0 0
+c
+d 737 2 0 0 0
+c
+d 323 3 1 0 0
+c
+d 54 1 0 0 0
+c
+d 1311 1 0 0 0
+c
+d 1240 1 0 0 0
+c
+d 1241 1 0 0 0
+c
+d 1170 4 0 0 0
+c
+d 300 1 0 0 0
+c
+d 315 1 0 0 0
+c
+d 886 1 0 1 0
+c
+d 888 2 0 1 0
+c
+d 529 1 0 0 0
+c
+d 550 1 0 0 0
+c
+d 305 2 1 1 0
+c
+d 1 4 1 1 0
+c
+d 529 1 0 0 0
+c
+d 532 1 0 0 0
+c
+d 851 1 0 1 0
+c
+d 853 1 0 1 0
+c
+d 896 1 0 0 0
+c
+d 1170 1 0 0 0
+c
+d 1184 2 1 1 0
+c
+d 204 1 0 1 0
+c
+d 224 4 1 0 0
+c
+d 55 2 1 0 0
+c
+d 691 1 0 0 0
+c
+d 133 1 0 0 0
+c
+d 294 1 1 0 0
+c
+d 298 1 0 0 0
+c
+d 755 1 0 1 0
+c
+d 762 1 0 1 0
+c
+d 196 1 1 0 0
+c
+d 197 1 0 0 0
+c
+d 734 2 0 0 0
+c
+d 157 1 0 0 0
+c
+d 305 2 0 0 0
+c
+d 19 2 0 1 0
+c
+d 534 3 0 0 0
+c
+d 241 1 0 0 0
+c
+d 248 1 0 0 0
+c
+d 424 2 0 0 0
+c
+d 425 1 0 0 0
+c
+d 211 1 1 0 0
+c
+d 1238 2 0 1 0
+c
+d 262 1 0 0 0
+c
+d 278 1 0 0 0
+c
+d 279 1 0 0 0
+c
+d 429 1 0 1 0
+c
+d 432 1 0 1 0
+c
+d 424 3 0 2 0
+c
+d 4 1 0 0 0
+c
+d 6 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 445 1 0 0 0
+c
+d 427 1 0 0 0
+c
+d 428 1 0 0 0
+c
+d 724 1 0 0 0
+c
+d 734 1 0 0 0
+c
+d 11 1 0 0 0
+c
+d 12 2 1 0 0
+c
+d 302 2 1 0 0
+c
+d 1156 1 0 1 0
+c
+d 437 2 0 1 0
+c
+d 341 1 0 0 0
+c
+d 348 1 0 0 0
+c
+d 1165 5 1 2 0
+c
+d 146 2 0 0 0
+c
+d 540 2 1 0 0
+c
+d 541 1 0 0 0
+c
+d 558 2 0 0 0
+c
+d 1059 2 0 0 0
+c
+d 167 2 0 0 0
+c
+d 724 2 0 0 0
+c
+d 152 2 0 0 0
+c
+d 413 1 0 0 0
+c
+d 31 3 1 0 0
+c
+d 208 1 0 1 0
+c
+d 211 2 0 1 0
+c
+d 998 3 0 0 0
+c
+d 44 1 1 0 0
+c
+d 46 2 0 0 0
+c
+d 505 3 0 0 0
+c
+d 775 2 0 1 0
+c
+d 777 1 0 1 0
+c
+d 294 2 0 0 0
+c
+d 298 1 0 0 0
+c
+d 132 1 0 0 0
+c
+d 496 1 0 1 0
+c
+d 499 1 0 1 0
+c
+d 1185 2 1 0 0
+c
+d 1188 1 0 0 0
+c
+d 84 3 0 2 0
+c
+d 301 3 0 0 0
+c
+d 312 1 0 0 0
+c
+d 1168 2 1 0 0
+c
+d 1176 4 1 0 0
+c
+d 301 3 0 0 0
+c
+d 270 1 0 0 0
+c
+d 271 1 0 0 0
+c
+d 527 2 0 0 0
+c
+d 178 1 0 0 0
+c
+d 181 2 1 0 0
+c
+d 1 1 0 1 0
+c
+d 4 2 0 0 0
+c
+d 95 2 0 0 0
+c
+d 98 1 1 0 0
+c
+d 242 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 686 2 1 0 0
+c
+d 767 1 0 0 0
+c
+d 891 1 0 0 0
+c
+d 167 1 0 1 0
+c
+d 1121 1 0 1 0
+c
+d 788 3 0 0 0
+c
+d 217 2 1 1 0
+c
+d 218 1 0 0 0
+c
+d 19 3 0 0 0
+c
+d 359 2 0 0 0
+c
+d 52 2 0 1 0
+c
+d 54 1 1 0 0
+c
+d 314 1 0 1 0
+c
+d 315 1 0 1 0
+c
+d 146 2 0 0 0
+c
+d 1061 3 0 1 0
+c
+d 373 1 0 0 0
+c
+d 374 3 0 0 0
+c
+d 288 2 0 1 0
+c
+d 300 1 0 0 0
+c
+d 274 1 0 0 0
+c
+d 275 2 1 0 0
+c
+d 712 4 1 0 0
+c
+d 148 3 1 1 0
+c
+d 127 2 0 0 0
+c
+d 599 2 0 0 0
+c
+d 606 1 0 1 0
+c
+d 178 3 0 1 0
+c
+d 183 1 1 0 0
+c
+d 1126 3 1 0 0
+c
+d 436 1 0 0 0
+c
+d 581 2 1 0 0
+c
+d 142 1 1 0 0
+c
+d 143 1 0 1 0
+c
+d 998 4 1 0 0
+c
+d 1000 1 0 0 0
+c
+d 844 3 0 0 0
+c
+d 842 3 1 1 0
+c
+d 889 1 0 0 0
+c
+d 890 1 1 0 0
+c
+d 891 1 0 0 0
+c
+d 594 1 0 0 0
+c
+d 652 1 0 0 0
+c
+d 133 1 0 0 0
+c
+d 137 1 1 0 0
+c
+d 377 1 0 1 0
+c
+d 378 1 0 1 0
+c
+d 1113 2 1 0 0
+c
+d 1119 5 0 0 0
+c
+d 455 4 1 1 0
+c
+d 1281 4 1 0 0
+c
+d 44 1 0 1 0
+c
+d 1156 2 0 0 0
+c
+d 93 1 1 0 0
+c
+d 95 1 0 0 0
+c
+d 437 2 0 0 0
+c
+d 457 1 1 0 0
+c
+d 47 3 0 2 0
+c
+d 499 1 0 0 0
+c
+d 511 1 0 0 0
+c
+d 788 4 0 0 0
+c
+d 168 1 0 1 0
+c
+d 373 1 0 1 0
+c
+d 168 3 0 0 0
+c
+d 437 2 1 0 0
+c
+d 457 1 0 0 0
+c
+d 262 2 0 0 0
+c
+d 29 1 0 0 0
+c
+d 30 1 0 0 0
+c
+d 789 2 0 0 0
+c
+d 790 1 1 0 0
+c
+d 51 3 1 1 0
+c
+d 101 1 1 0 0
+c
+d 1087 2 0 0 0
+c
+d 50 2 0 0 0
+c
+d 52 1 0 0 0
+c
+d 262 3 0 2 0
+c
+d 278 2 0 0 0
+c
+d 704 2 0 1 0
+c
+d 705 1 0 1 0
+c
+d 1165 4 1 1 0
+c
+d 1211 1 0 0 0
+c
+d 879 4 0 0 0
+c
+d 2 2 0 1 0
+c
+d 21 4 1 2 0
+c
+d 882 4 1 0 0
+c
+d 99 2 0 0 0
+c
+d 101 1 1 0 0
+c
+d 848 1 0 1 0
+c
+d 849 1 0 1 0
+c
+d 29 1 1 0 0
+c
+d 30 1 0 1 0
+c
+d 840 2 1 0 0
+c
+d 842 1 0 0 0
+c
+d 168 3 0 0 0
+c
+d 133 1 0 0 0
+c
+d 134 1 0 0 0
+c
+d 395 3 1 0 0
+c
+d 844 1 0 1 0
+c
+d 851 1 0 1 0
+c
+d 811 2 0 1 0
+c
+d 910 1 0 1 0
+c
+d 278 4 1 0 0
+c
+d 162 2 0 1 0
+c
+d 1251 1 0 1 0
+c
+d 1170 5 1 0 0
+c
+d 531 2 0 1 0
+c
+d 536 1 0 1 0
+c
+d 26 1 0 0 0
+c
+d 35 1 0 1 0
+c
+d 1315 3 1 0 0
+c
+d 1316 1 0 0 0
+c
+d 594 3 1 1 0
+c
+d 61 1 0 0 0
+c
+d 65 2 1 0 0
+c
+d 1083 2 1 0 0
+c
+d 268 1 1 0 0
+c
+d 282 1 0 0 0
+c
+d 539 2 0 0 0
+c
+d 547 1 1 0 0
+c
+d 765 2 0 1 0
+c
+d 54 1 0 1 0
+c
+d 60 1 0 0 0
+c
+d 1303 1 0 1 0
+c
+d 60 2 1 0 0
+c
+d 964 1 0 1 0
+c
+d 127 3 1 0 0
+c
+d 46 3 0 0 0
+c
+d 133 2 0 1 0
+c
+d 52 1 1 0 0
+c
+d 719 1 0 0 0
+c
+d 723 1 0 0 0
+c
+d 575 1 0 1 0
+c
+d 577 1 0 1 0
+c
+d 259 2 0 2 0
+c
+d 602 2 0 1 0
+c
+d 642 1 0 1 0
+c
+d 126 4 0 1 0
+c
+d 507 2 0 0 0
+c
+d 508 1 1 0 0
+c
+d 50 1 0 0 0
+c
+d 51 2 1 1 0
+c
+d 167 2 1 0 0
+c
+d 369 1 0 0 0
+c
+d 50 1 0 1 0
+c
+d 734 2 0 1 0
+c
+d 509 1 0 0 0
+c
+d 510 1 0 0 0
+c
+d 158 3 1 0 0
+c
+d 594 1 0 0 0
+c
+d 651 1 0 0 0
+c
+d 253 2 1 0 0
+c
+d 258 1 0 1 0
+c
+d 89 2 1 0 0
+c
+d 120 1 0 0 0
+c
+d 424 2 0 0 0
+c
+d 1079 1 1 0 0
+c
+d 1170 2 0 0 0
+c
+d 334 2 1 0 0
+c
+d 341 1 0 1 0
+c
+d 1239 2 1 0 0
+c
+d 1240 1 0 0 0
+c
+d 1241 1 0 0 0
+c
+d 348 3 1 0 0
+c
+d 530 4 1 0 0
+c
+d 21 1 0 0 0
+c
+d 25 2 0 0 0
+c
+d 26 1 0 0 0
+c
+d 457 1 0 0 0
+c
+d 460 1 0 0 0
+c
+d 635 2 0 0 0
+c
+d 636 1 0 0 0
+c
+d 46 1 0 0 0
+c
+d 47 2 1 0 0
+c
+d 559 1 0 1 0
+c
+d 566 1 0 0 0
+c
+d 457 2 0 0 0
+c
+d 458 1 1 0 0
+c
+d 300 3 1 0 0
+c
+d 314 1 0 0 0
+c
+d 152 1 0 1 0
+c
+d 153 1 0 0 0
+c
+d 155 1 0 1 0
+c
+d 559 1 0 0 0
+c
+d 560 1 0 0 0
+c
+d 101 2 0 0 0
+c
+d 419 1 0 0 0
+c
+d 1083 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 959 2 0 0 0
+c
+d 134 1 0 0 0
+c
+d 139 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 305 2 1 0 0
+c
+d 46 1 0 1 0
+c
+d 60 1 0 1 0
+c
+d 647 2 0 1 0
+c
+d 557 1 1 0 0
+c
+d 558 2 0 0 0
+c
+d 424 2 0 0 0
+c
+d 286 2 1 1 0
+c
+d 578 2 1 0 0
+c
+d 755 4 1 0 0
+c
+d 431 4 1 0 0
+c
+d 578 3 1 0 0
+c
+d 44 2 0 0 0
+c
+d 46 1 0 0 0
+c
+d 803 6 1 1 0
+c
+d 196 2 1 0 0
+c
+d 198 1 0 1 0
+c
+d 621 2 0 1 0
+c
+d 623 1 1 0 0
+c
+d 437 1 0 0 0
+c
+d 457 1 0 0 0
+c
+d 458 1 0 0 0
+c
+d 686 3 0 1 0
+c
+d 93 4 1 1 0
+c
+d 49 1 0 0 0
+c
+d 50 2 1 0 0
+c
+d 262 3 1 1 0
+c
+d 242 3 1 0 0
+c
+d 285 1 0 0 0
+c
+d 286 1 0 1 0
+c
+d 540 2 0 1 0
+c
+d 541 1 0 1 0
+c
+d 369 1 0 0 0
+c
+d 382 1 0 0 0
+c
+d 391 1 0 0 0
+c
+d 101 2 0 0 0
+c
+d 426 1 0 0 0
+c
+d 507 2 1 0 0
+c
+d 1076 1 0 1 0
+c
+d 737 3 0 0 0
+c
+d 467 1 0 0 0
+c
+d 468 2 0 0 0
+c
+d 751 2 0 1 0
+c
+d 359 2 1 0 0
+c
+d 360 1 0 1 0
+c
+d 221 2 0 0 0
+c
+d 737 2 1 0 0
+c
+d 740 1 0 0 0
+c
+d 622 2 0 0 0
+c
+d 1008 1 1 0 0
+c
+d 965 3 1 1 0
+c
+d 155 1 1 0 0
+c
+d 176 1 0 0 0
+c
+d 922 1 0 1 0
+c
+d 923 1 0 1 0
+c
+d 217 1 0 0 0
+c
+d 1241 2 1 1 0
+c
+d 1242 1 0 0 0
+c
+d 358 2 1 0 0
+c
+d 359 1 0 0 0
+c
+d 592 3 1 0 0
+c
+d 879 3 1 0 0
+c
+d 457 3 1 0 0
+c
+d 558 3 1 0 0
+c
+d 565 1 0 0 0
+c
+d 393 2 0 0 0
+c
+d 395 1 0 0 0
+c
+d 1124 2 0 0 0
+c
+d 146 1 0 1 0
+c
+d 229 1 0 0 0
+c
+d 287 1 0 0 0
+c
+d 288 2 0 0 0
+c
+d 587 1 0 1 0
+c
+d 588 2 0 1 0
+c
+d 114 3 0 2 0
+c
+d 730 3 1 0 0
+c
+d 622 4 1 0 0
+c
+d 382 2 0 0 0
+c
+d 388 1 1 0 0
+c
+d 389 1 0 0 0
+c
+d 606 3 1 1 0
+c
+d 276 3 0 0 0
+c
+d 602 2 1 0 0
+c
+d 631 1 0 1 0
+c
+d 99 1 0 1 0
+c
+d 101 2 0 1 0
+c
+d 242 2 0 2 0
+c
+d 211 3 1 1 0
+c
+d 733 2 1 0 0
+c
+d 736 1 0 1 0
+c
+d 1125 3 1 0 0
+c
+d 541 2 0 1 0
+c
+d 542 1 0 1 0
+c
+d 582 1 0 1 0
+c
+d 588 1 1 0 0
+c
+d 590 1 0 0 0
+c
+d 1168 4 1 0 0
+c
+d 1179 1 1 0 0
+c
+d 373 3 1 0 0
+c
+d 21 2 1 0 0
+c
+d 28 1 0 1 0
+c
+d 86 3 0 1 0
+c
+d 419 3 1 0 0
+c
+d 141 1 0 0 0
+c
+d 142 2 0 0 0
+c
+d 968 2 1 0 0
+c
+d 578 4 1 0 0
+c
+d 686 2 0 0 0
+c
+d 1156 3 1 1 0
+c
+d 419 3 1 1 0
+c
+d 19 5 1 0 0
+c
+d 734 3 1 0 0
+c
+d 878 1 1 0 0
+c
+d 882 1 0 0 0
+c
+d 737 2 0 0 0
+c
+d 686 2 1 1 0
+c
+d 373 4 1 0 0
+c
+d 134 1 0 0 0
+c
+d 138 2 1 1 0
+c
+d 52 2 0 1 0
+c
+d 437 4 1 0 0
+c
+d 729 2 0 0 0
+c
+d 923 1 0 0 0
+c
+d 924 2 0 0 0
+c
+d 575 3 1 1 0
+c
+d 242 2 1 0 0
+c
+d 262 4 0 0 0
+c
+d 246 3 1 0 0
+c
+d 734 2 0 0 0
+c
+d 772 2 0 0 0
+c
+d 132 3 0 0 0
+c
+d 1008 3 1 1 0
+c
+d 836 1 0 0 0
+c
+d 838 2 1 0 0
+c
+d 572 3 0 0 0
+c
+d 1195 4 1 1 0
+c
+d 392 2 1 0 0
+c
+d 146 2 0 0 0
+c
+d 592 2 1 0 0
+c
+d 716 2 1 0 0
+c
+d 718 1 0 1 0
+c
+d 5 1 1 0 0
+c
+d 6 2 0 0 0
+c
+d 748 2 0 0 0
+c
+d 750 1 0 0 0
+c
+d 218 4 1 0 0
+c
+d 60 1 0 1 0
+c
+d 62 1 1 0 0
+c
+d 65 1 0 0 0
+c
+d 1170 4 1 0 0
+c
+d 55 2 0 0 0
+c
+d 274 4 1 0 0
+c
+d 985 2 0 1 0
+c
+d 986 1 0 1 0
+c
+d 26 3 0 1 0
+c
+d 168 2 0 0 0
+c
+d 196 4 1 0 0
+c
+d 213 1 0 0 0
+c
+d 242 2 0 0 0
+c
+d 277 1 0 0 0
+c
+d 278 2 0 0 0
+c
+d 531 1 0 1 0
+c
+d 536 1 0 0 0
+c
+d 540 1 0 1 0
+c
+d 861 3 0 0 0
+c
+d 804 1 0 0 0
+c
+d 915 1 1 0 0
+c
+d 115 3 0 1 0
+c
+d 530 3 0 0 0
+c
+d 789 3 0 0 0
+c
+d 686 3 0 0 0
+c
+d 132 1 0 0 0
+c
+d 133 1 0 0 0
+c
+d 789 3 0 2 0
+c
+d 599 2 0 2 0
+c
+d 327 3 1 0 0
+c
+d 352 1 0 0 0
+c
+d 353 1 0 0 0
+c
+d 575 1 1 0 0
+c
+d 578 2 0 1 0
+c
+d 591 1 0 0 0
+c
+d 602 3 1 1 0
+c
+d 603 1 0 0 0
+c
+d 801 2 0 1 0
+c
+d 1 2 1 1 0
+c
+d 2 1 0 0 0
+c
+d 217 3 1 1 0
+c
+d 13 2 0 0 0
+c
+d 15 1 0 1 0
+c
+d 559 3 0 0 0
+c
+d 114 1 0 0 0
+c
+d 120 2 0 0 0
+c
+d 844 3 0 2 0
+c
+d 965 1 0 0 0
+c
+d 973 2 1 0 0
+c
+d 699 3 1 0 0
+c
+d 616 2 1 0 0
+c
+d 734 2 1 0 0
+c
+d 737 1 0 0 0
+c
+d 965 1 0 1 0
+c
+d 973 2 1 0 0
+c
+d 3 3 0 0 0
+c
+d 100 1 0 1 0
+c
+d 105 5 1 0 0
+c
+d 10 1 1 0 0
+c
+d 1269 1 0 0 0
+c
+d 511 2 0 2 0
+c
+d 114 1 0 0 0
+c
+d 120 2 0 0 0
+c
+d 890 2 0 0 0
+c
+d 738 2 0 1 0
+c
+d 133 3 0 2 0
+c
+d 384 1 0 0 0
+c
+d 388 2 0 0 0
+c
+d 26 2 0 0 0
+c
+d 162 1 0 0 0
+c
+d 171 1 1 0 0
+c
+d 16 4 1 0 0
+c
+d 1134 1 0 0 0
+c
+d 1135 1 0 0 0
+c
+d 599 3 0 2 0
+c
+d 159 3 1 0 0
+c
+d 160 1 0 0 0
+c
+d 4 1 0 0 0
+c
+d 5 2 0 0 0
+c
+d 754 2 1 0 0
+c
+d 1170 3 1 0 0
+c
+d 1173 1 0 0 0
+c
+d 977 1 0 0 0
+c
+d 980 1 1 0 0
+c
+d 162 1 0 0 0
+c
+d 355 1 0 0 0
+c
+d 55 2 0 0 0
+c
+d 690 1 1 0 0
+c
+d 540 2 0 0 0
+c
+d 662 2 0 0 0
+c
+d 795 1 1 0 0
+c
+d 818 1 0 0 0
+c
+d 904 2 0 1 0
+c
+d 437 2 1 0 0
+c
+d 442 1 0 0 0
+c
+d 423 2 1 0 0
+c
+d 1078 1 0 1 0
+c
+d 775 2 1 0 0
+c
+d 348 3 1 0 0
+c
+d 31 3 1 0 0
+c
+d 75 1 0 1 0
+c
+d 82 2 1 0 0
+c
+d 1295 1 0 0 0
+c
+d 101 2 1 0 0
+c
+d 426 1 0 0 0
+c
+d 101 2 1 0 0
+c
+d 111 1 0 1 0
+c
+d 574 3 1 1 0
+c
+d 944 4 1 0 0
+c
+d 945 2 0 0 0
+c
+d 734 2 0 1 0
+c
+d 427 1 0 1 0
+c
+d 584 1 0 1 0
+c
+d 855 2 0 0 0
+c
+d 264 2 0 0 0
+c
+d 869 3 1 1 0
+c
+d 95 1 0 0 0
+c
+d 96 1 0 0 0
+c
+d 865 1 0 0 0
+c
+d 875 2 1 0 0
+c
+d 694 2 0 1 0
+c
+d 696 1 1 0 0
+c
+d 660 2 1 0 0
+c
+d 661 2 1 0 0
+c
+d 120 1 0 0 0
+c
+d 124 2 1 0 0
+c
+d 10 2 0 0 0
+c
+d 11 1 0 0 0
+c
+d 1017 1 1 0 0
+c
+d 1021 1 0 0 0
+c
+d 1022 1 0 0 0
+c
+d 157 2 0 2 0
+c
+d 726 1 1 0 0
+c
+d 727 1 0 0 0
+c
+d 948 1 0 0 0
+c
+d 437 3 1 0 0
+c
+d 132 2 0 0 0
+c
+d 133 1 1 0 0
+c
+d 424 1 0 0 0
+c
+d 425 1 0 0 0
+c
+d 368 2 0 0 0
+c
+d 1125 1 0 0 0
+c
+d 606 3 0 2 0
+c
+d 839 1 0 0 0
+c
+d 840 1 1 0 0
+c
+d 841 1 0 0 0
+c
+d 720 1 1 0 0
+c
+d 726 1 0 1 0
+c
+d 851 3 0 0 0
+c
+d 1194 2 1 0 0
+c
+d 1208 1 0 0 0
+c
+d 51 1 0 0 0
+c
+d 52 2 0 0 0
+c
+d 507 1 1 0 0
+c
+d 558 1 0 0 0
+c
+d 155 1 0 0 0
+c
+d 176 1 0 0 0
+c
+d 1191 1 0 0 0
+c
+d 1192 2 0 0 0
+c
+d 1207 1 0 0 0
+c
+d 799 1 1 0 0
+c
+d 919 2 0 0 0
+c
+d 1202 3 0 0 0
+c
+d 101 1 0 0 0
+c
+d 103 1 0 1 0
+c
+d 104 1 0 1 0
+c
+d 1173 6 1 1 0
+c
+d 656 2 1 1 0
+c
+d 657 1 0 0 0
+c
+d 763 1 0 0 0
+c
+d 767 2 1 0 0
+c
+d 686 3 1 0 0
+c
+d 534 3 0 0 0
+c
+d 193 4 0 0 0
+c
+d 662 2 0 0 0
+c
+d 453 1 1 0 0
+c
+d 455 1 0 0 0
+c
+d 789 3 1 0 0
+c
+d 1275 2 0 0 0
+c
+d 1276 2 0 0 0
+c
+d 301 2 1 1 0
+c
+d 340 2 0 0 0
+c
+d 491 2 0 1 0
+c
+d 286 1 1 0 0
+c
+d 291 2 0 0 0
+c
+d 299 1 0 0 0
+c
+d 478 1 0 0 0
+c
+d 487 1 0 0 0
+c
+d 735 1 1 0 0
+c
+d 737 2 0 1 0
+c
+d 842 3 1 0 0
+c
+d 112 3 0 1 0
+c
+d 796 2 0 1 0
+c
+d 813 1 0 1 0
+c
+d 11 1 0 0 0
+c
+d 1269 1 1 0 0
+c
+d 1270 1 0 0 0
+c
+d 799 2 0 0 0
+c
+d 843 1 0 0 0
+c
+d 1170 3 1 0 0
+c
+d 55 1 0 1 0
+c
+d 691 1 1 0 0
+c
+d 1 2 1 1 0
+c
+d 279 1 0 1 0
+c
+d 306 3 1 0 0
+c
+d 769 3 1 1 0
+c
+d 428 3 0 0 0
+c
+d 911 2 1 0 0
+c
+d 753 1 0 0 0
+c
+d 759 1 0 0 0
+c
+d 762 2 0 0 0
+c
+d 341 1 0 0 0
+c
+d 348 2 0 1 0
+c
+d 328 3 1 0 0
+c
+d 341 1 0 0 0
+c
+d 348 1 0 0 0
+c
+d 10 2 0 0 0
+c
+d 1269 1 1 0 0
+c
+d 534 3 1 0 0
+c
+d 234 2 0 0 0
+c
+d 235 1 0 0 0
+c
+d 199 1 0 1 0
+c
+d 211 1 1 0 0
+c
+d 1295 2 1 1 0
+c
+d 340 3 0 2 0
+c
+d 1169 3 0 1 0
+c
+d 281 3 0 0 0
+c
+d 734 3 0 0 0
+c
+d 735 1 0 1 0
+c
+d 54 3 1 0 0
+c
+d 417 2 0 0 0
+c
+d 691 1 0 0 0
+c
+d 692 1 0 0 0
+c
+d 693 1 0 0 0
+c
+d 746 2 0 0 0
+c
+d 218 2 1 1 0
+c
+d 220 1 0 0 0
+c
+d 242 1 0 0 0
+c
+d 262 1 0 1 0
+c
+d 176 1 0 1 0
+c
+d 177 2 0 0 0
+c
+d 180 1 0 0 0
+c
+d 608 2 1 0 0
+c
+d 616 1 0 0 0
+c
+d 998 4 1 1 0
+c
+d 60 1 0 0 0
+c
+d 630 1 0 0 0
+c
+d 1195 2 0 1 0
+c
+d 1196 1 0 1 0
+c
+d 48 1 0 0 0
+c
+d 49 1 0 0 0
+c
+d 286 2 0 1 0
+c
+d 299 1 1 0 0
+c
+d 788 3 1 0 0
+c
+d 159 1 1 0 0
+c
+d 160 1 0 0 0
+c
+d 803 3 1 1 0
+c
+d 418 2 1 1 0
+c
+d 341 1 0 0 0
+c
+d 347 1 0 0 0
+c
+d 348 1 0 0 0
+c
+d 532 4 0 0 0
+c
+d 799 2 0 0 0
+c
+d 855 3 1 0 0
+c
+d 132 1 0 1 0
+c
+d 340 1 1 0 0
+c
+d 492 1 0 0 0
+c
+d 797 1 0 0 0
+c
+d 799 1 0 0 0
+c
+d 437 2 1 0 0
+c
+d 604 1 0 0 0
+c
+d 605 2 0 0 0
+c
+d 129 4 1 0 0
+c
+d 768 1 0 0 0
+c
+d 769 1 1 0 0
+c
+d 889 1 0 0 0
+c
+d 328 3 1 0 0
+c
+d 575 4 2 0 0
+c
+d 1044 1 0 0 0
+c
+d 1168 4 0 0 0
+c
+d 1270 3 1 0 0
+c
+d 309 3 1 0 0
+c
+d 67 1 0 0 0
+c
+d 68 1 0 1 0
+c
+d 77 1 0 0 0
+c
+d 78 1 1 0 0
+c
+d 83 1 0 0 0
+c
+d 334 2 0 1 0
+c
+d 60 1 0 0 0
+c
+d 61 1 0 0 0
+c
+d 157 2 1 0 0
+c
+d 305 1 0 0 0
+c
+d 278 3 1 1 0
+c
+d 368 1 0 0 0
+c
+d 1126 1 0 0 0
+c
+d 608 2 0 0 0
+c
+d 333 2 0 1 0
+c
+d 339 1 1 0 0
+c
+d 719 3 0 0 0
+c
+d 656 3 1 0 0
+c
+d 274 2 0 0 0
+c
+d 1230 1 0 0 0
+c
+d 300 1 0 1 0
+c
+d 301 1 0 1 0
+c
+d 314 1 0 0 0
+c
+d 353 2 1 0 0
+c
+d 734 2 1 0 0
+c
+d 287 2 0 0 0
+c
+d 806 2 1 0 0
+c
+d 807 1 0 0 0
+c
+d 75 1 0 1 0
+c
+d 86 1 0 1 0
+c
+d 789 2 0 0 0
+c
+d 811 4 1 0 0
+c
+d 60 2 0 1 0
+c
+d 1306 1 0 1 0
+c
+d 457 1 0 0 0
+c
+d 461 3 0 0 0
+c
+d 718 1 0 1 0
+c
+d 729 1 1 0 0
+c
+d 946 1 0 0 0
+c
+d 428 1 0 0 0
+c
+d 436 2 1 1 0
+c
+d 789 3 0 1 0
+c
+d 32 3 1 0 0
+c
+d 642 3 0 0 0
+c
+d 444 3 1 0 0
+c
+d 598 2 1 0 0
+c
+d 600 1 0 0 0
+c
+d 12 1 0 0 0
+c
+d 1272 1 0 0 0
+c
+d 167 4 1 0 0
+c
+d 550 1 0 1 0
+c
+d 866 1 1 0 0
+c
+d 868 1 0 0 0
+c
+d 323 2 0 0 0
+c
+d 19 3 1 1 0
+c
+d 19 1 0 1 0
+c
+d 983 1 0 1 0
+c
+d 618 1 0 1 0
+c
+d 620 1 0 0 0
+c
+d 634 1 1 0 0
+c
+d 647 3 0 0 0
+c
+d 648 1 0 0 0
+c
+d 1163 2 1 0 0
+c
+d 248 3 1 1 0
+c
+d 584 2 0 0 0
+c
+d 878 2 0 0 0
+c
+d 67 3 0 1 0
+c
+d 294 3 1 0 0
+c
+d 1170 1 0 0 0
+c
+d 1171 1 1 0 0
+c
+d 1172 1 0 1 0
+c
+d 667 1 0 0 0
+c
+d 668 1 1 0 0
+c
+d 75 2 1 0 0
+c
+d 621 2 1 0 0
+c
+d 875 1 0 0 0
+c
+d 876 1 0 0 0
+c
+d 183 1 0 0 0
+c
+d 196 1 0 0 0
+c
+d 369 1 1 0 0
+c
+d 373 1 0 0 0
+c
+d 888 1 0 0 0
+c
+d 889 2 0 2 0
+c
+d 634 2 1 0 0
+c
+d 635 1 0 1 0
+c
+d 148 2 1 1 0
+c
+d 232 1 0 0 0
+c
+d 51 1 0 0 0
+c
+d 57 1 1 0 0
+c
+d 799 2 1 0 0
+c
+d 800 3 1 0 0
+c
+d 437 2 0 0 0
+c
+d 437 1 0 0 0
+c
+d 574 1 0 1 0
+c
+d 1050 2 1 0 0
+c
+d 878 1 0 1 0
+c
+d 879 1 0 1 0
+c
+d 880 2 0 0 0
+c
+d 22 3 0 0 0
+c
+d 101 3 1 0 0
+c
+d 423 1 0 0 0
+c
+d 427 1 0 0 0
+c
+d 338 1 1 0 0
+c
+d 340 1 0 0 0
+c
+d 675 1 0 0 0
+c
+d 676 1 0 0 0
+c
+d 181 2 0 1 0
+c
+d 194 1 0 1 0
+c
+d 286 3 0 0 0
+c
+d 376 3 1 0 0
+c
+d 534 4 1 0 0
+c
+d 1173 1 0 0 0
+c
+d 1174 2 1 0 0
+c
+d 101 2 0 1 0
+c
+d 423 2 0 0 0
+c
+d 836 1 1 0 0
+c
+d 839 1 0 1 0
+c
+d 130 1 0 1 0
+c
+d 131 2 1 0 0
+c
+d 888 4 0 2 0
+c
+d 348 3 1 1 0
+c
+d 493 3 1 1 0
+c
+d 653 1 0 0 0
+c
+d 661 2 1 1 0
+c
+d 178 1 0 1 0
+c
+d 181 1 0 0 0
+c
+d 854 4 1 0 0
+c
+d 18 2 1 0 0
+c
+d 132 3 1 0 0
+c
+d 557 1 0 1 0
+c
+d 1065 1 0 0 0
+c
+d 1066 2 0 0 0
+c
+d 311 2 0 1 0
+c
+d 327 1 1 0 0
+c
+d 89 1 0 1 0
+c
+d 353 1 0 1 0
+c
+d 1140 2 1 0 0
+c
+d 304 1 0 0 0
+c
+d 311 2 1 0 0
+c
+d 10 1 0 0 0
+c
+d 11 1 0 0 0
+c
+d 12 1 1 0 0
+c
+d 515 2 0 1 0
+c
+d 246 1 0 0 0
+c
+d 248 4 1 1 0
+c
+d 598 1 0 0 0
+c
+d 606 2 1 0 0
+c
+d 323 1 0 0 0
+c
+d 324 2 0 0 0
+c
+d 199 2 1 0 0
+c
+d 208 1 0 0 0
+c
+d 115 1 1 0 0
+c
+d 120 1 0 1 0
+c
+d 419 1 1 0 0
+c
+d 435 1 0 1 0
+c
+d 925 1 0 1 0
+c
+d 926 2 1 0 0
+c
+d 1196 4 0 1 0
+c
+d 89 3 1 1 0
+c
+d 606 2 0 0 0
+c
+d 578 3 1 1 0
+c
+d 436 1 1 0 0
+c
+d 1045 1 0 0 0
+c
+d 1048 1 0 1 0
+c
+d 618 1 0 0 0
+c
+d 965 1 0 0 0
+c
+d 529 1 0 1 0
+c
+d 580 3 0 2 0
+c
+d 615 2 0 0 0
+c
+d 966 1 0 1 0
+c
+d 977 1 0 1 0
+c
+d 978 1 0 0 0
+c
+d 30 1 0 0 0
+c
+d 32 1 0 0 0
+c
+d 496 1 0 0 0
+c
+d 497 1 0 0 0
+c
+d 498 1 0 0 0
+c
+d 1165 2 0 0 0
+c
+d 1168 1 1 0 0
+c
+d 411 2 0 0 0
+c
+d 789 2 0 0 0
+c
+d 863 5 1 0 0
+c
+d 101 2 0 0 0
+c
+d 205 2 0 0 0
+c
+d 101 1 0 0 0
+c
+d 102 1 0 0 0
+c
+d 1188 3 1 0 0
+c
+d 811 1 0 0 0
+c
+d 812 1 0 0 0
+c
+d 419 1 1 0 0
+c
+d 423 1 0 0 0
+c
+d 1080 1 0 0 0
+c
+d 55 4 1 0 0
+c
+d 689 2 0 0 0
+c
+d 46 3 0 2 0
+c
+d 47 1 1 0 0
+c
+d 195 3 1 0 0
+c
+d 152 1 0 1 0
+c
+d 155 1 0 0 0
+c
+d 919 3 1 1 0
+c
+d 924 1 0 0 0
+c
+d 806 3 1 0 0
+c
+d 114 1 0 0 0
+c
+d 116 1 1 0 0
+c
+d 118 2 0 0 0
+c
+d 169 2 0 0 0
+c
+d 591 2 0 0 0
+c
+d 592 1 0 1 0
+c
+d 164 3 0 0 0
+c
+d 1287 3 0 0 0
+c
+d 242 3 0 0 0
+c
+d 673 3 1 1 0
+c
+d 324 1 0 0 0
+c
+d 332 2 1 0 0
+c
+d 529 1 0 1 0
+c
+d 1060 1 0 0 0
+c
+d 1062 1 1 0 0
+c
+d 1063 2 0 0 0
+c
+d 54 3 1 1 0
+c
+d 4 2 0 0 0
+c
+d 608 1 0 0 0
+c
+d 616 1 1 0 0
+c
+d 989 2 0 0 0
+c
+d 217 4 1 1 0
+c
+d 259 4 1 1 0
+c
+d 261 1 0 0 0
+c
+d 262 1 0 1 0
+c
+d 11 4 1 0 0
+c
+d 70 4 1 1 0
+c
+d 167 1 0 0 0
+c
+d 395 1 0 0 0
+c
+d 791 3 1 0 0
+c
+d 1274 4 1 0 0
+c
+d 1284 2 0 1 0
+c
+d 1290 1 0 1 0
+c
+d 1168 4 1 0 0
+c
+d 842 1 0 0 0
+c
+d 848 1 0 1 0
+c
+d 861 1 0 1 0
+c
+d 1275 2 0 0 0
+c
+d 604 3 0 0 0
+c
+d 114 1 0 0 0
+c
+d 127 1 0 0 0
+c
+d 162 1 0 0 0
+c
+d 171 2 1 0 0
+c
+d 172 1 0 1 0
+c
+d 858 2 1 1 0
+c
+d 872 1 0 0 0
+c
+d 157 2 0 2 0
+c
+d 158 1 0 0 0
+c
+d 392 1 0 0 0
+c
+d 393 2 1 1 0
+c
+d 1168 4 1 0 0
+c
+d 716 2 0 0 0
+c
+d 717 2 0 0 0
+c
+d 159 2 0 0 0
+c
+d 185 1 0 0 0
+c
+d 273 1 0 1 0
+c
+d 287 1 0 0 0
+c
+d 289 1 1 0 0
+c
+d 701 1 0 1 0
+c
+d 712 1 0 0 0
+c
+d 713 4 0 0 0
+c
+d 132 3 1 0 0
+c
+d 455 1 0 0 0
+c
+d 457 1 0 0 0
+c
+d 378 3 0 0 0
+c
+d 1168 1 0 0 0
+c
+d 1170 2 1 0 0
+c
+d 1173 1 0 1 0
+c
+d 842 1 0 2 0
+c
+d 458 2 0 0 0
+c
+d 575 1 0 0 0
+c
+d 796 2 1 1 0
+c
+d 1286 1 0 1 0
+c
+d 769 3 0 1 0
+c
+d 1013 2 0 1 0
+c
+d 1033 2 1 0 0
+c
+d 327 1 1 0 0
+c
+d 328 1 0 0 0
+c
+d 329 2 1 0 0
+c
+d 468 1 0 1 0
+c
+d 469 1 0 0 0
+c
+d 478 1 0 1 0
+c
+d 1106 3 1 0 0
+c
+d 529 4 1 0 0
+c
+d 56 1 0 0 0
+c
+d 1309 2 1 0 0
+c
+d 1310 1 0 0 0
+c
+d 803 1 0 1 0
+c
+d 804 2 0 0 0
+c
+d 264 2 1 0 0
+c
+d 737 4 2 0 0
+c
+d 393 1 0 1 0
+c
+d 395 1 0 0 0
+c
+d 1109 1 0 1 0
+c
+d 663 1 1 0 0
+c
+d 682 1 0 1 0
+c
+d 684 1 0 0 0
+c
+d 470 1 0 0 0
+c
+d 478 1 0 0 0
+c
+d 46 1 0 0 0
+c
+d 75 1 0 1 0
+c
+d 775 1 0 1 0
+c
+d 74 3 0 0 0
+c
+d 86 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 821 3 0 0 0
+c
+d 693 1 0 0 0
+c
+d 695 1 1 0 0
+c
+d 951 1 0 1 0
+c
+d 532 1 0 1 0
+c
+d 534 1 0 1 0
+c
+d 537 1 0 0 0
+c
+d 132 1 0 0 0
+c
+d 499 1 0 1 0
+c
+d 511 1 0 1 0
+c
+d 26 3 0 0 0
+c
+d 852 2 0 0 0
+c
+d 529 2 1 1 0
+c
+d 532 1 0 0 0
+c
+d 423 3 1 0 0
+c
+d 858 1 0 1 0
+c
+d 868 1 0 1 0
+c
+d 869 1 0 0 0
+c
+d 697 4 1 0 0
+c
+d 951 1 0 0 0
+c
+d 952 1 1 0 0
+c
+d 276 2 0 0 0
+c
+d 166 2 1 0 0
+c
+d 395 1 0 1 0
+c
+d 262 2 0 0 0
+c
+d 101 1 1 0 0
+c
+d 423 1 0 1 0
+c
+d 162 5 1 0 0
+c
+d 2 1 1 0 0
+c
+d 211 2 1 0 0
+c
+d 29 3 1 0 0
+c
+d 101 3 0 1 0
+c
+d 261 5 1 1 0
+c
+d 93 2 0 0 0
+c
+d 98 1 0 1 0
+c
+d 99 2 1 0 0
+c
+d 194 2 0 1 0
+c
+d 204 1 0 1 0
+c
+d 283 3 1 1 0
+c
+d 423 2 0 0 0
+c
+d 262 2 0 2 0
+c
+d 681 3 0 1 0
+c
+d 844 1 1 0 0
+c
+d 851 1 0 0 0
+c
+d 748 2 1 0 0
+c
+d 99 3 1 0 0
+c
+d 824 4 1 0 0
+c
+d 332 1 0 1 0
+c
+d 333 1 1 0 0
+c
+d 93 2 1 1 0
+c
+d 523 2 1 0 0
+c
+d 524 1 0 0 0
+c
+d 167 3 1 1 0
+c
+d 58 3 1 0 0
+c
+d 130 2 0 0 0
+c
+d 537 2 0 0 0
+c
+d 548 1 0 1 0
+c
+d 369 1 0 0 0
+c
+d 371 1 0 0 0
+c
+d 372 1 0 0 0
+c
+d 437 4 1 0 0
+c
+d 842 2 0 0 0
+c
+d 842 3 1 0 0
+c
+d 341 2 0 0 0
+c
+d 346 1 0 0 0
+c
+d 475 3 0 0 0
+c
+d 608 1 0 0 0
+c
+d 614 2 1 1 0
+c
+d 278 2 1 0 0
+c
+d 1228 1 0 0 0
+c
+d 418 4 1 0 0
+c
+d 419 1 0 1 0
+c
+d 753 2 1 0 0
+c
+d 943 1 0 0 0
+c
+d 395 2 0 0 0
+c
+d 437 1 0 1 0
+c
+d 507 1 0 1 0
+c
+d 477 1 0 1 0
+c
+d 478 2 0 0 0
+c
+d 791 2 1 1 0
+c
+d 829 3 0 0 0
+c
+d 769 2 1 0 0
+c
+d 771 2 0 0 0
+c
+d 21 4 1 2 0
+c
+d 606 1 1 0 0
+c
+d 608 2 0 0 0
+c
+d 1300 2 1 1 0
+c
+d 56 2 0 1 0
+c
+d 1306 1 0 0 0
+c
+d 754 3 1 0 0
+c
+d 167 2 1 0 0
+c
+d 318 3 1 0 0
+c
+d 753 3 1 1 0
+c
+d 525 1 0 0 0
+c
+d 545 2 0 0 0
+c
+d 146 1 0 0 0
+c
+d 232 1 1 0 0
+c
+d 233 3 0 0 0
+c
+d 1195 1 0 1 0
+c
+d 1196 2 0 1 0
+c
+d 101 3 0 2 0
+c
+d 437 2 0 0 0
+c
+d 507 1 1 0 0
+c
+d 784 2 0 0 0
+c
+d 133 1 0 1 0
+c
+d 134 1 0 0 0
+c
+d 1274 3 1 1 0
+c
+d 1283 1 0 1 0
+c
+d 1284 1 0 0 0
+c
+d 400 2 0 0 0
+c
+d 405 2 0 0 0
+c
+d 755 4 1 0 0
+c
+d 757 1 0 0 0
+c
+d 1168 1 0 0 0
+c
+d 1170 1 0 0 0
+c
+d 146 2 0 0 0
+c
+d 278 2 0 0 0
+c
+d 1165 1 1 0 0
+c
+d 806 3 0 0 0
+c
+d 75 1 0 0 0
+c
+d 1300 1 0 0 0
+c
+d 699 3 0 2 0
+c
+d 529 1 0 0 0
+c
+d 532 1 0 0 0
+c
+d 19 1 1 0 0
+c
+d 21 1 0 0 0
+c
+d 23 1 0 0 0
+c
+d 168 1 0 0 0
+c
+d 378 1 0 0 0
+c
+d 101 2 0 0 0
+c
+d 277 1 0 1 0
+c
+d 1157 2 0 1 0
+c
+d 1158 2 1 0 0
+c
+d 842 2 0 1 0
+c
+d 881 1 0 1 0
+c
+d 591 4 1 0 0
+c
+d 5 2 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 1192 2 1 0 0
+c
+d 1150 5 2 0 0
+c
+d 531 1 0 0 0
+c
+d 540 1 0 1 0
+c
+d 383 2 0 1 0
+c
+d 384 1 1 0 0
+c
+d 324 1 0 0 0
+c
+d 331 1 0 0 0
+c
+d 868 1 0 0 0
+c
+d 872 1 1 0 0
+c
+d 788 3 0 0 0
+c
+d 169 1 1 0 0
+c
+d 376 2 0 0 0
+c
+d 604 4 1 1 0
+c
+d 799 1 0 0 0
+c
+d 800 1 0 0 0
+c
+d 801 1 1 0 0
+c
+d 1126 3 1 1 0
+c
+d 1131 1 0 1 0
+c
+d 769 4 1 0 0
+c
+d 511 4 1 1 0
+c
+d 907 2 0 0 0
+c
+d 7 1 1 0 0
+c
+d 1279 2 0 0 0
+c
+d 861 1 0 1 0
+c
+d 862 2 0 0 0
+c
+d 863 1 0 0 0
+c
+d 551 2 0 0 0
+c
+d 564 1 0 0 0
+c
+d 200 1 1 0 0
+c
+d 201 1 0 0 0
+c
+d 202 1 0 0 0
+c
+d 507 2 0 1 0
+c
+d 558 1 1 0 0
+c
+d 54 2 0 1 0
+c
+d 1311 5 1 0 0
+c
+d 768 4 0 0 0
+c
+d 12 1 0 0 0
+c
+d 13 1 0 0 0
+c
+d 148 3 1 1 0
+c
+d 195 1 0 0 0
+c
+d 205 2 1 0 0
+c
+d 755 3 0 0 0
+c
+d 791 2 1 0 0
+c
+d 794 1 0 0 0
+c
+d 217 1 0 0 0
+c
+d 220 1 0 0 0
+c
+d 344 2 1 0 0
+c
+d 875 3 1 0 0
+c
+d 1111 1 0 1 0
+c
+d 1112 1 0 0 0
+c
+d 852 2 0 1 0
+c
+d 455 3 1 1 0
+c
+d 697 3 1 1 0
+c
+d 617 1 1 0 0
+c
+d 989 3 0 0 0
+c
+d 602 4 0 0 0
+c
+d 1184 1 0 0 0
+c
+d 1199 2 1 0 0
+c
+d 699 1 0 0 0
+c
+d 799 1 0 0 0
+c
+d 898 1 1 0 0
+c
+d 551 1 0 0 0
+c
+d 775 2 1 0 0
+c
+d 232 1 0 0 0
+c
+d 233 3 1 0 0
+c
+d 866 2 0 0 0
+c
+d 606 1 0 0 0
+c
+d 608 2 1 0 0
+c
+d 1110 3 0 0 0
+c
+d 535 1 0 0 0
+c
+d 536 2 1 0 0
+c
+d 86 2 0 0 0
+c
+d 87 1 1 0 0
+c
+d 5 1 0 1 0
+c
+d 6 1 0 0 0
+c
+d 437 2 0 0 0
+c
+d 743 2 1 0 0
+c
+d 753 1 0 0 0
+c
+d 341 1 0 0 0
+c
+d 344 1 0 0 0
+c
+d 1147 1 0 0 0
+c
+d 107 5 1 0 0
+c
+d 91 1 0 0 0
+c
+d 117 1 0 0 0
+c
+d 146 2 0 0 0
+c
+d 437 2 1 1 0
+c
+d 456 2 0 0 0
+c
+d 207 5 1 1 0
+c
+d 101 1 0 0 0
+c
+d 423 1 1 0 0
+c
+d 691 3 0 0 0
+c
+d 818 1 1 0 0
+c
+d 904 1 0 1 0
+c
+d 437 1 1 0 0
+c
+d 457 1 0 0 0
+c
+d 530 1 0 0 0
+c
+d 531 2 0 0 0
+c
+d 101 3 0 0 0
+c
+d 169 2 1 0 0
+c
+d 1137 1 0 0 0
+c
+d 315 1 1 0 0
+c
+d 324 1 0 0 0
+c
+d 278 2 0 1 0
+c
+d 1165 1 1 0 0
+c
+d 261 2 0 0 0
+c
+d 844 2 1 0 0
+c
+d 851 1 0 0 0
+c
+d 763 1 1 0 0
+c
+d 767 1 0 1 0
+c
+d 382 3 0 0 0
+c
+d 75 1 0 0 0
+c
+d 86 1 0 0 0
+c
+d 204 1 1 0 0
+c
+d 225 2 0 0 0
+c
+d 47 3 0 0 0
+c
+d 608 3 1 0 0
+c
+d 211 1 0 0 0
+c
+d 242 2 0 0 0
+c
+d 735 2 1 1 0
+c
+d 737 1 0 0 0
+c
+d 919 1 0 0 0
+c
+d 922 3 1 0 0
+c
+d 923 1 0 0 0
+c
+d 1275 1 1 0 0
+c
+d 1278 2 1 0 0
+c
+d 1280 1 0 0 0
+c
+d 1281 1 0 0 0
+c
+d 395 1 0 0 0
+c
+d 1106 1 1 0 0
+c
+d 527 4 2 0 0
+c
+d 66 3 0 0 0
+c
+d 423 1 0 0 0
+c
+d 427 1 0 0 0
+c
+d 1078 5 1 0 0
+c
+d 429 1 0 0 0
+c
+d 430 2 1 0 0
+c
+d 470 2 1 0 0
+c
+d 114 2 1 0 0
+c
+d 767 2 0 1 0
+c
+d 891 1 0 0 0
+c
+d 47 1 0 1 0
+c
+d 48 1 0 0 0
+c
+d 939 1 0 1 0
+c
+d 815 1 0 0 0
+c
+d 817 1 0 0 0
+c
+d 1274 2 0 0 0
+c
+d 1284 1 0 0 0
+c
+d 755 1 0 0 0
+c
+d 765 1 0 0 0
+c
+d 511 4 1 0 0
+c
+d 799 2 0 0 0
+c
+d 1082 2 0 0 0
+c
+d 1194 1 0 0 0
+c
+d 1195 2 1 0 0
+c
+d 343 1 0 1 0
+c
+d 437 1 0 0 0
+c
+d 1080 3 1 0 0
+c
+d 789 3 1 0 0
+c
+d 101 2 0 0 0
+c
+d 278 1 1 0 0
+c
+d 1170 2 0 0 0
+c
+d 1195 2 1 1 0
+c
+d 89 1 0 1 0
+c
+d 575 1 1 0 0
+c
+d 796 2 0 0 0
+c
+d 861 3 1 1 0
+c
+d 572 3 1 1 0
+c
+d 159 2 1 1 0
+c
+d 183 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 423 1 1 0 0
+c
+d 1080 2 1 0 0
+c
+d 608 2 1 0 0
+c
+d 1040 1 0 0 0
+c
+d 1011 3 1 0 0
+c
+d 157 2 0 1 0
+c
+d 1143 1 1 0 0
+c
+d 1163 3 1 0 0
+c
+d 157 1 1 0 0
+c
+d 159 1 0 0 0
+c
+d 242 1 0 0 0
+c
+d 374 4 1 0 0
+c
+d 515 1 0 1 0
+c
+d 517 1 0 1 0
+c
+d 288 1 0 0 0
+c
+d 291 1 0 0 0
+c
+d 300 1 1 0 0
+c
+d 92 2 0 0 0
+c
+d 272 2 1 0 0
+c
+d 273 1 0 0 0
+c
+d 610 1 0 1 0
+c
+d 611 1 0 1 0
+c
+d 990 1 0 0 0
+c
+d 430 2 0 0 0
+c
+d 436 1 0 0 0
+c
+d 1194 2 1 0 0
+c
+d 851 3 0 0 0
+c
+d 382 1 0 0 0
+c
+d 383 1 1 0 0
+c
+d 164 4 1 0 0
+c
+d 183 3 1 0 0
+c
+d 168 3 1 0 0
+c
+d 523 1 0 1 0
+c
+d 525 2 0 0 0
+c
+d 1170 4 0 0 0
+c
+d 1185 1 0 0 0
+c
+d 1192 1 0 0 0
+c
+d 423 2 0 0 0
+c
+d 432 1 1 0 0
+c
+d 559 3 0 0 0
+c
+d 738 2 0 0 0
+c
+d 559 2 1 0 0
+c
+d 562 1 0 0 0
+c
+d 568 2 1 0 0
+c
+d 572 1 0 0 0
+c
+d 966 3 1 0 0
+c
+d 509 1 0 0 0
+c
+d 1070 1 0 0 0
+c
+d 564 2 0 1 0
+c
+d 136 2 0 1 0
+c
+d 530 2 0 0 0
+c
+d 7 1 0 0 0
+c
+d 1279 2 1 0 0
+c
+d 1266 1 0 1 0
+c
+d 1285 2 1 0 0
+c
+d 273 2 0 0 0
+c
+d 276 1 1 0 0
+c
+d 508 3 1 1 0
+c
+d 89 2 1 1 0
+c
+d 324 2 0 2 0
+c
+d 324 1 0 0 0
+c
+d 1149 2 0 1 0
+c
+d 365 4 0 0 0
+c
+d 2 4 1 0 0
+c
+d 16 1 0 1 0
+c
+d 101 1 0 0 0
+c
+d 108 1 1 0 0
+c
+d 111 1 0 0 0
+c
+d 32 4 1 0 0
+c
+d 1315 2 1 0 0
+c
+d 517 1 0 1 0
+c
+d 518 1 0 0 0
+c
+d 519 1 0 0 0
+c
+d 767 2 0 0 0
+c
+d 311 1 0 0 0
+c
+d 327 2 0 0 0
+c
+d 1110 3 1 0 0
+c
+d 662 2 0 1 0
+c
+d 565 4 1 0 0
+c
+d 301 3 1 0 0
+c
+d 313 1 0 0 0
+c
+d 248 1 0 0 0
+c
+d 249 4 1 0 0
+c
+d 753 6 2 0 0
+c
+d 875 2 1 0 0
+c
+d 691 4 1 0 0
+c
+d 159 1 0 0 0
+c
+d 178 1 0 0 0
+c
+d 305 3 0 0 0
+c
+d 565 2 1 0 0
+c
+d 132 2 0 1 0
+c
+d 133 2 0 0 0
+c
+d 1194 2 1 1 0
+c
+d 697 2 1 0 0
+c
+d 854 1 0 0 0
+c
+d 855 4 1 1 0
+c
+d 875 3 1 0 0
+c
+d 126 1 0 0 0
+c
+d 127 1 0 0 0
+c
+d 32 4 1 0 0
+c
+d 167 3 1 0 0
+c
+d 591 2 0 1 0
+c
+d 5 1 0 0 0
+c
+d 6 2 1 0 0
+c
+d 756 1 1 0 0
+c
+d 763 2 0 0 0
+c
+d 324 2 1 0 0
+c
+d 332 1 0 0 0
+c
+d 749 3 1 0 0
+c
+d 156 1 0 1 0
+c
+d 157 2 0 1 0
+c
+d 89 1 0 0 0
+c
+d 120 1 0 0 0
+c
+d 129 3 1 0 0
+c
+d 1105 1 0 0 0
+c
+d 1106 1 0 0 0
+c
+d 552 1 0 0 0
+c
+d 159 1 0 1 0
+c
+d 183 1 0 1 0
+c
+d 842 3 0 0 0
+c
+d 424 4 1 0 0
+c
+d 155 3 0 0 0
+c
+d 1150 1 0 0 0
+c
+d 1151 1 0 1 0
+c
+d 1 1 1 0 0
+c
+d 17 1 0 0 0
+c
+d 1170 2 1 0 0
+c
+d 1184 1 0 1 0
+c
+d 301 2 1 0 0
+c
+d 1156 1 0 0 0
+c
+d 169 1 0 0 0
+c
+d 1136 2 0 0 0
+c
+d 1080 2 0 0 0
+c
+d 1082 1 1 0 0
+c
+d 395 4 1 1 0
+c
+d 424 2 1 0 0
+c
+d 425 1 0 1 0
+c
+d 101 5 1 1 0
+c
+d 1136 2 0 0 0
+c
+d 511 1 1 0 0
+c
+d 528 1 0 0 0
+c
+d 120 1 0 0 0
+c
+d 124 1 0 0 0
+c
+d 311 2 0 0 0
+c
+d 326 1 0 0 0
+c
+d 31 2 1 0 0
+c
+d 32 3 1 0 0
+c
+d 1080 3 1 1 0
+c
+d 851 3 1 0 0
+c
+d 854 1 1 0 0
+c
+d 857 1 0 0 0
+c
+d 469 2 1 1 0
+c
+d 663 1 1 0 0
+c
+d 681 2 0 1 0
+c
+d 205 2 1 0 0
+c
+d 206 2 1 0 0
+c
+d 208 1 0 0 0
+c
+d 85 1 0 0 0
+c
+d 1275 1 0 0 0
+c
+d 1277 1 0 0 0
+c
+d 46 4 1 0 0
+c
+d 584 5 1 1 0
+c
+d 157 1 0 0 0
+c
+d 178 1 0 0 0
+c
+d 377 1 0 0 0
+c
+d 1134 3 1 1 0
+c
+d 787 1 1 0 0
+c
+d 259 4 2 0 0
+c
+d 532 1 0 0 0
+c
+d 537 2 0 0 0
+c
+d 763 1 0 1 0
+c
+d 766 1 0 0 0
+c
+d 126 2 0 0 0
+c
+d 328 5 1 0 0
+c
+d 242 2 0 0 0
+c
+d 395 2 0 0 0
+c
+d 1 2 0 0 0
+c
+d 1322 3 1 0 0
+c
+d 1233 4 1 2 0
+c
+d 1174 2 0 0 0
+c
+d 93 2 1 1 0
+c
+d 95 1 0 0 0
+c
+d 146 3 1 0 0
+c
+d 148 2 0 1 0
+c
+d 75 2 0 0 0
+c
+d 437 1 0 1 0
+c
+d 445 2 1 0 0
+c
+d 447 2 0 0 0
+c
+d 55 3 1 0 0
+c
+d 693 2 0 1 0
+c
+d 374 1 0 0 0
+c
+d 377 1 0 0 0
+c
+d 686 3 1 0 0
+c
+d 284 1 1 0 0
+c
+d 1226 1 0 1 0
+c
+d 689 1 1 0 0
+c
+d 704 1 0 0 0
+c
+d 278 1 1 0 0
+c
+d 1170 1 0 0 0
+c
+d 535 2 0 1 0
+c
+d 848 4 0 0 0
+c
+d 507 3 1 1 0
+c
+d 738 5 1 0 0
+c
+d 1172 1 0 0 0
+c
+d 1185 1 1 0 0
+c
+d 686 3 1 0 0
+c
+d 133 1 0 0 0
+c
+d 294 1 1 0 0
+c
+d 455 3 0 2 0
+c
+d 437 1 0 0 0
+c
+d 470 1 0 0 0
+c
+d 796 2 0 0 0
+c
+d 46 1 0 0 0
+c
+d 75 1 0 0 0
+c
+d 168 2 1 0 0
+c
+d 167 2 0 1 0
+c
+d 262 1 0 0 0
+c
+d 270 1 1 0 0
+c
+d 1192 1 0 0 0
+c
+d 1194 1 0 1 0
+c
+d 1195 1 1 0 0
+c
+d 599 3 1 0 0
+c
+d 167 1 0 1 0
+c
+d 395 1 1 0 0
+c
+d 301 2 0 0 0
+c
+d 1156 1 1 0 0
+c
+d 890 2 0 0 0
+c
+d 4 2 0 1 0
+c
+d 315 1 0 0 0
+c
+d 318 1 1 0 0
+c
+d 324 1 0 0 0
+c
+d 1266 1 1 0 0
+c
+d 1285 1 0 0 0
+c
+d 152 4 1 2 0
+c
+d 153 1 0 0 0
+c
+d 54 4 1 1 0
+c
+d 1311 1 0 0 0
+c
+d 642 2 0 0 0
+c
+d 644 2 0 0 0
+c
+d 211 3 1 0 0
+c
+d 156 2 0 2 0
+c
+d 163 1 0 0 0
+c
+d 1125 3 0 0 0
+c
+d 620 1 1 0 0
+c
+d 632 2 0 0 0
+c
+d 60 1 0 0 0
+c
+d 62 2 0 0 0
+c
+d 1076 3 1 0 0
+c
+d 753 2 0 2 0
+c
+d 242 1 0 0 0
+c
+d 262 2 1 0 0
+c
+d 274 1 0 1 0
+c
+d 275 1 0 1 0
+c
+d 171 2 0 0 0
+c
+d 172 1 0 0 0
+c
+d 400 1 0 0 0
+c
+d 409 1 0 0 0
+c
+d 46 2 0 0 0
+c
+d 47 1 1 0 0
+c
+d 16 4 1 0 0
+c
+d 276 3 0 0 0
+c
+d 577 1 0 0 0
+c
+d 578 2 1 0 0
+c
+d 52 1 0 1 0
+c
+d 56 1 0 0 0
+c
+d 1303 1 0 1 0
+c
+d 1080 1 1 0 0
+c
+d 1083 1 0 0 0
+c
+d 686 2 0 2 0
+c
+d 159 1 0 0 0
+c
+d 183 1 0 0 0
+c
+d 87 2 0 0 0
+c
+d 89 1 1 0 0
+c
+d 278 2 0 1 0
+c
+d 1168 1 0 1 0
+c
+d 101 1 1 0 0
+c
+d 597 1 0 1 0
+c
+d 101 2 0 1 0
+c
+d 1084 1 0 1 0
+c
+d 242 1 0 1 0
+c
+d 246 1 1 0 0
+c
+d 318 3 1 0 0
+c
+d 157 2 0 0 0
+c
+d 175 1 0 0 0
+c
+d 878 1 0 0 0
+c
+d 879 2 1 0 0
+c
+d 635 4 1 1 0
+c
+d 280 2 0 0 0
+c
+d 813 1 0 0 0
+c
+d 815 2 0 0 0
+c
+d 817 1 0 1 0
+c
+d 575 2 1 0 0
+c
+d 796 3 0 0 0
+c
+d 970 1 1 0 0
+c
+d 972 1 0 1 0
+c
+d 686 2 0 0 0
+c
+d 146 2 0 0 0
+c
+d 1098 1 0 0 0
+c
+d 437 2 0 0 0
+c
+d 437 2 0 1 0
+c
+d 471 1 1 0 0
+c
+d 559 4 1 0 0
+c
+d 168 2 0 2 0
+c
+d 479 2 1 0 0
+c
+d 480 1 0 0 0
+c
+d 55 1 0 0 0
+c
+d 691 1 0 0 0
+c
+d 509 1 1 0 0
+c
+d 515 1 0 0 0
+c
+d 517 1 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 1195 2 1 0 0
+c
+d 1061 3 0 0 0
+c
+d 695 2 0 0 0
+c
+d 423 4 1 0 0
+c
+d 427 1 0 1 0
+c
+d 1156 1 0 0 0
+c
+d 1163 1 1 0 0
+c
+d 1165 1 0 0 0
+c
+d 395 2 1 0 0
+c
+d 1106 1 0 0 0
+c
+d 734 2 0 0 0
+c
+d 614 1 0 0 0
+c
+d 615 1 0 0 0
+c
+d 355 2 1 0 0
+c
+d 367 2 0 1 0
+c
+d 167 1 0 0 0
+c
+d 369 2 0 2 0
+c
+d 369 2 0 1 0
+c
+d 89 2 1 0 0
+c
+d 1263 3 1 1 0
+c
+d 943 3 0 0 0
+c
+d 133 3 1 0 0
+c
+d 294 1 0 0 0
+c
+d 18 1 0 0 0
+c
+d 95 1 1 0 0
+c
+d 1263 1 0 0 0
+c
+d 508 1 0 0 0
+c
+d 509 1 0 0 0
+c
+d 514 1 1 0 0
+c
+d 46 2 0 1 0
+c
+d 74 3 1 0 0
+c
+d 549 1 0 1 0
+c
+d 734 2 1 1 0
+c
+d 796 1 1 0 0
+c
+d 797 1 0 1 0
+c
+d 1192 4 2 0 0
+c
+d 1206 2 0 0 0
+c
+d 127 1 0 0 0
+c
+d 129 4 2 0 0
+c
+d 75 1 0 1 0
+c
+d 1300 2 0 0 0
+c
+d 799 2 0 1 0
+c
+d 800 1 1 0 0
+c
+d 156 1 0 1 0
+c
+d 411 4 1 1 0
+c
+d 393 3 1 0 0
+c
+d 728 2 0 0 0
+c
+d 729 2 0 0 0
+c
+d 1170 1 0 1 0
+c
+d 1184 2 1 0 0
+c
+d 262 2 1 0 0
+c
+d 278 1 0 0 0
+c
+d 156 2 1 0 0
+c
+d 406 2 0 0 0
+c
+d 763 1 0 0 0
+c
+d 767 2 0 0 0
+c
+d 100 3 1 0 0
+c
+d 105 1 0 1 0
+c
+d 166 2 0 0 0
+c
+d 400 1 0 0 0
+c
+d 217 2 0 1 0
+c
+d 1243 1 1 0 0
+c
+d 46 2 1 0 0
+c
+d 482 1 0 1 0
+c
+d 487 1 0 0 0
+c
+d 488 1 1 0 0
+c
+d 470 1 0 1 0
+c
+d 477 2 1 0 0
+c
+d 478 1 0 0 0
+c
+d 479 1 0 0 0
+c
+d 369 1 1 0 0
+c
+d 381 3 0 0 0
+c
+d 382 1 0 0 0
+c
+d 146 5 1 2 0
+c
+d 686 2 0 0 0
+c
+d 961 1 0 0 0
+c
+d 594 2 1 1 0
+c
+d 558 2 0 0 0
+c
+d 59 1 1 0 0
+c
+d 60 1 0 0 0
+c
+d 799 1 0 0 0
+c
+d 919 1 1 0 0
+c
+d 933 1 0 1 0
+c
+d 356 2 0 0 0
+c
+d 927 4 1 0 0
+c
+d 928 1 0 0 0
+c
+d 591 2 0 0 0
+c
+d 55 3 0 0 0
+c
+d 470 3 0 1 0
+c
+d 340 3 1 0 0
+c
+d 358 2 0 0 0
+c
+d 262 4 1 0 0
+c
+d 47 1 0 0 0
+c
+d 777 1 0 1 0
+c
+d 369 1 0 0 0
+c
+d 380 1 0 0 0
+c
+d 558 2 0 0 0
+c
+d 1059 1 0 0 0
+c
+d 167 1 0 0 0
+c
+d 1104 2 0 0 0
+c
+d 84 1 0 1 0
+c
+d 1288 1 0 0 0
+c
+d 75 2 0 0 0
+c
+d 167 2 0 0 0
+c
+d 1170 2 1 0 0
+c
+d 1175 1 0 0 0
+c
+d 46 2 0 1 0
+c
+d 47 1 1 0 0
+c
+d 133 3 0 2 0
+c
+d 437 1 0 1 0
+c
+d 457 2 1 0 0
+c
+d 575 2 1 1 0
+c
+d 796 1 0 0 0
+c
+d 69 2 1 0 0
+c
+d 242 3 1 0 0
+c
+d 162 1 0 1 0
+c
+d 368 1 0 1 0
+c
+d 437 3 0 0 0
+c
+d 527 2 1 0 0
+c
+d 125 2 0 0 0
+c
+d 354 3 1 0 0
+c
+d 951 1 0 1 0
+c
+d 952 1 0 0 0
+c
+d 953 1 1 0 0
+c
+d 129 4 1 2 0
+c
+d 44 3 1 0 0
+c
+d 796 1 1 0 0
+c
+d 797 1 0 0 0
+c
+d 982 3 0 0 0
+c
+d 5 3 1 0 0
+c
+d 7 1 0 0 0
+c
+d 87 2 1 0 0
+c
+d 199 2 1 1 0
+c
+d 148 3 1 0 0
+c
+d 134 2 1 0 0
+c
+d 138 1 0 0 0
+c
+d 139 1 0 0 0
+c
+d 88 4 1 0 0
+c
+d 382 1 0 0 0
+c
+d 383 1 0 0 0
+c
+d 1134 1 0 1 0
+c
+d 368 4 1 0 0
+c
+d 592 2 0 0 0
+c
+d 86 1 1 0 0
+c
+d 87 1 0 0 0
+c
+d 973 3 1 1 0
+c
+d 1290 3 0 0 0
+c
+d 1165 1 1 0 0
+c
+d 1166 3 1 0 0
+c
+d 162 1 0 0 0
+c
+d 171 1 0 0 0
+c
+d 769 2 1 1 0
+c
+d 770 1 0 0 0
+c
+d 213 3 0 1 0
+c
+d 364 2 0 0 0
+c
+d 133 4 1 0 0
+c
+d 699 1 0 0 0
+c
+d 716 1 0 0 0
+c
+d 353 2 0 0 0
+c
+d 21 2 0 0 0
+c
+d 453 3 1 0 0
+c
+d 811 2 1 0 0
+c
+d 835 3 1 1 0
+c
+d 393 1 0 0 0
+c
+d 407 1 0 0 0
+c
+d 75 2 0 1 0
+c
+d 858 1 0 0 0
+c
+d 870 2 0 0 0
+c
+d 922 3 1 0 0
+c
+d 77 2 0 1 0
+c
+d 81 1 1 0 0
+c
+d 185 3 1 0 0
+c
+d 196 1 1 0 0
+c
+d 1008 1 0 0 0
+c
+d 1009 2 0 0 0
+c
+d 46 5 2 0 0
+c
+d 119 1 0 0 0
+c
+d 120 1 0 0 0
+c
+d 763 2 0 0 0
+c
+d 89 2 1 0 0
+c
+d 1285 2 1 0 0
+c
+d 1292 1 0 0 0
+c
+d 737 3 0 0 0
+c
+d 742 3 0 0 0
+c
+d 796 1 1 0 0
+c
+d 813 1 0 0 0
+c
+d 815 1 0 1 0
+c
+d 419 2 1 0 0
+c
+d 132 2 1 0 0
+c
+d 800 1 0 0 0
+c
+d 801 2 0 0 0
+c
+d 199 3 0 0 0
+c
+d 424 3 1 1 0
+c
+d 28 3 0 1 0
+c
+d 426 1 0 1 0
+c
+d 591 1 1 0 0
+c
+d 18 1 1 0 0
+c
+d 93 2 0 1 0
+c
+d 523 3 0 0 0
+c
+d 829 3 1 1 0
+c
+d 799 4 1 1 0
+c
+d 164 3 0 0 0
+c
+d 132 3 1 0 0
+c
+d 858 3 0 2 0
+c
+d 265 3 0 0 0
+c
+d 157 2 0 1 0
+c
+d 305 1 0 1 0
+c
+d 1011 3 0 0 0
+c
+d 437 1 0 0 0
+c
+d 444 3 1 1 0
+c
+d 18 1 0 1 0
+c
+d 990 1 0 0 0
+c
+d 437 3 1 0 0
+c
+d 341 1 0 1 0
+c
+d 344 1 1 0 0
+c
+d 345 1 0 0 0
+c
+d 559 1 0 0 0
+c
+d 560 2 1 0 0
+c
+d 719 1 0 0 0
+c
+d 720 3 1 0 0
+c
+d 16 3 1 1 0
+c
+d 93 1 0 0 0
+c
+d 1174 2 0 0 0
+c
+d 196 2 0 0 0
+c
+d 655 2 0 0 0
+c
+d 348 1 0 1 0
+c
+d 349 1 0 1 0
+c
+d 164 1 0 0 0
+c
+d 368 1 0 0 0
+c
+d 369 1 0 0 0
+c
+d 18 2 1 1 0
+c
+d 990 1 0 0 0
+c
+d 132 2 0 0 0
+c
+d 18 1 0 0 0
+c
+d 19 1 1 0 0
+c
+d 21 1 0 1 0
+c
+d 259 2 1 0 0
+c
+d 261 1 0 1 0
+c
+d 591 1 0 0 0
+c
+d 602 2 1 1 0
+c
+d 343 3 1 1 0
+c
+d 876 2 1 1 0
+c
+d 878 1 0 0 0
+c
+d 261 6 1 0 0
+c
+d 166 1 1 0 0
+c
+d 395 2 0 0 0
+c
+d 301 1 0 0 0
+c
+d 315 1 0 0 0
+c
+d 418 3 1 0 0
+c
+d 419 2 0 1 0
+c
+d 574 3 0 0 0
+c
+d 1194 2 1 0 0
+c
+d 1202 1 0 1 0
+c
+d 608 1 1 0 0
+c
+d 618 1 0 1 0
+c
+d 437 2 0 1 0
+c
+d 50 1 0 0 0
+c
+d 51 2 1 0 0
+c
+d 101 4 1 0 0
+c
+d 1063 3 1 0 0
+c
+d 1065 1 0 0 0
+c
+d 1066 2 1 0 0
+c
+d 276 3 1 1 0
+c
+d 1045 1 0 0 0
+c
+d 1047 1 0 0 0
+c
+d 1048 1 0 0 0
+c
+d 836 4 1 0 0
+c
+d 101 2 0 1 0
+c
+d 610 1 1 0 0
+c
+d 156 1 1 0 0
+c
+d 400 1 0 0 0
+c
+d 405 1 0 0 0
+c
+d 406 1 0 1 0
+c
+d 311 1 0 0 0
+c
+d 327 1 0 0 0
+c
+d 743 4 1 1 0
+c
+d 753 1 0 0 0
+c
+d 840 2 0 0 0
+c
+d 842 1 0 0 0
+c
+d 557 2 0 0 0
+c
+d 1060 1 0 0 0
+c
+d 268 2 1 0 0
+c
+d 591 2 0 0 0
+c
+d 663 6 1 0 0
+c
+d 667 1 1 0 0
+c
+d 668 1 0 1 0
+c
+d 764 4 0 0 0
+c
+d 697 2 1 0 0
+c
+d 953 4 0 0 0
+c
+d 437 3 0 0 0
+c
+d 437 2 0 0 0
+c
+d 451 2 0 1 0
+c
+d 437 2 1 0 0
+c
+d 715 2 1 1 0
+c
+d 887 2 0 0 0
+c
+d 206 1 0 0 0
+c
+d 208 1 0 0 0
+c
+d 199 3 1 0 0
+c
+d 1 2 0 0 0
+c
+d 167 3 0 0 0
+c
+d 2 2 0 0 0
+c
+d 327 1 0 1 0
+c
+d 349 2 1 0 0
+c
+d 350 1 0 0 0
+c
+d 93 3 0 0 0
+c
+d 769 3 1 0 0
+c
+d 341 2 0 0 0
+c
+d 346 2 0 0 0
+c
+d 60 3 1 0 0
+c
+d 72 1 0 0 0
+c
+d 965 1 0 0 0
+c
+d 977 1 0 0 0
+c
+d 1051 2 1 0 0
+c
+d 50 2 1 0 0
+c
+d 724 1 0 0 0
+c
+d 1195 1 0 1 0
+c
+d 1196 1 0 0 0
+c
+d 689 1 0 0 0
+c
+d 691 1 0 0 0
+c
+d 701 1 0 1 0
+c
+d 702 2 0 0 0
+c
+d 826 3 0 0 0
+c
+d 153 2 1 0 0
+c
+d 155 1 1 0 0
+c
+d 47 1 0 0 0
+c
+d 48 1 0 0 0
+c
+d 49 1 0 0 0
+c
+d 616 1 0 0 0
+c
+d 617 1 0 0 0
+c
+d 59 2 0 0 0
+c
+d 1032 1 1 0 0
+c
+d 1071 1 0 0 0
+c
+d 1072 1 1 0 0
+c
+d 419 1 0 0 0
+c
+d 433 1 0 0 0
+c
+d 434 1 0 0 0
+c
+d 829 1 0 0 0
+c
+d 833 1 0 1 0
+c
+d 835 1 0 1 0
+c
+d 763 3 0 0 0
+c
+d 799 5 2 0 0
+c
+d 597 1 0 0 0
+c
+d 598 2 1 1 0
+c
+d 377 2 0 0 0
+c
+d 1117 2 0 0 0
+c
+d 205 3 1 0 0
+c
+d 1239 1 0 0 0
+c
+d 305 3 2 0 0
+c
+d 1150 2 0 0 0
+c
+d 498 1 0 0 0
+c
+d 499 1 0 1 0
+c
+d 369 2 1 0 0
+c
+d 760 3 1 0 0
+c
+d 1070 4 1 0 0
+c
+d 1134 2 0 0 0
+c
+d 1013 1 0 1 0
+c
+d 1017 1 0 0 0
+c
+d 328 4 0 0 0
+c
+d 329 1 0 0 0
+c
+d 234 6 1 0 0
+c
+d 159 1 0 0 0
+c
+d 160 1 0 0 0
+c
+d 337 3 1 0 0
+c
+d 246 5 1 0 0
+c
+d 252 1 0 1 0
+c
+d 907 3 1 1 0
+c
+d 414 1 0 0 0
+c
+d 418 1 0 0 0
+c
+d 517 1 0 0 0
+c
+d 518 1 0 0 0
+c
+d 423 2 0 0 0
+c
+d 429 1 0 0 0
+c
+d 550 1 0 1 0
+c
+d 551 2 1 0 0
+c
+d 779 1 0 0 0
+c
+d 241 2 0 0 0
+c
+d 247 1 0 0 0
+c
+d 737 4 2 0 0
+c
+d 746 1 0 0 0
+c
+d 748 1 0 1 0
+c
+d 752 1 0 0 0
+c
+d 334 3 1 1 0
+c
+d 855 1 1 0 0
+c
+d 856 2 0 1 0
+c
+d 551 1 1 0 0
+c
+d 554 1 0 1 0
+c
+d 767 1 0 0 0
+c
+d 890 1 0 0 0
+c
+d 650 3 1 0 0
+c
+d 656 1 0 1 0
+c
+d 120 2 1 0 0
+c
+d 127 1 0 1 0
+c
+d 1168 1 0 1 0
+c
+d 1176 3 1 1 0
+c
+d 315 4 1 1 0
+c
+d 152 1 0 0 0
+c
+d 155 1 0 0 0
+c
+d 395 3 1 0 0
+c
+d 24 3 2 0 0
+c
+d 25 1 0 0 0
+c
+d 369 1 0 0 0
+c
+d 382 1 0 1 0
+c
+d 392 1 0 1 0
+c
+d 602 5 2 0 0
+c
+d 44 1 1 0 0
+c
+d 46 1 0 0 0
+c
+d 59 2 0 0 0
+c
+d 1032 1 0 0 0
+c
+d 87 2 0 0 0
+c
+d 458 1 1 0 0
+c
+d 460 1 0 0 0
+c
+d 301 1 0 1 0
+c
+d 1156 1 1 0 0
+c
+d 167 1 0 0 0
+c
+d 1106 1 0 1 0
+c
+d 1110 1 1 0 0
+c
+d 555 1 0 0 0
+c
+d 556 1 1 0 0
+c
+d 734 2 1 0 0
+c
+d 159 3 1 0 0
+c
+d 242 1 0 1 0
+c
+d 125 1 0 0 0
+c
+d 533 1 0 0 0
+c
+d 574 2 1 0 0
+c
+d 340 2 0 0 0
+c
+d 578 1 1 0 0
+c
+d 1043 3 1 0 0
+c
+d 552 2 1 0 0
+c
+d 374 1 0 0 0
+c
+d 377 1 0 0 0
+c
+d 374 1 0 1 0
+c
+d 375 1 0 0 0
+c
+d 348 3 1 0 0
+c
+d 350 1 1 0 0
+c
+d 93 1 0 1 0
+c
+d 96 2 0 1 0
+c
+d 32 2 0 1 0
+c
+d 787 1 1 0 0
+c
+d 882 2 0 0 0
+c
+d 153 2 1 0 0
+c
+d 155 1 0 1 0
+c
+d 502 4 0 0 0
+c
+d 604 4 1 1 0
+c
+d 602 1 1 0 0
+c
+d 604 3 1 0 0
+c
+d 499 1 1 0 0
+c
+d 500 1 0 0 0
+c
+d 661 1 0 0 0
+c
+d 673 4 1 0 0
+c
+d 195 3 1 0 0
+c
+d 796 1 0 0 0
+c
+d 797 2 0 0 0
+c
+d 829 3 0 0 0
+c
+d 301 2 0 0 0
+c
+d 311 3 1 0 0
+c
+d 1067 4 0 0 0
+c
+d 411 2 1 1 0
+c
+d 415 4 1 0 0
+c
+d 1083 1 0 1 0
+c
+d 1084 2 1 0 0
+c
+d 119 2 1 0 0
+c
+d 86 1 1 0 0
+c
+d 74 4 1 0 0
+c
+d 787 1 0 1 0
+c
+d 148 1 1 0 0
+c
+d 234 1 0 1 0
+c
+d 400 3 1 0 0
+c
+d 606 4 0 0 0
+c
+d 373 4 0 0 0
+c
+d 1045 5 1 0 0
+c
+d 1047 2 0 0 0
+c
+d 95 5 1 0 0
+c
+d 574 3 1 0 0
+c
+d 575 1 0 1 0
+c
+d 305 3 1 1 0
+c
+d 306 2 0 1 0
+c
+d 606 1 1 0 0
+c
+d 619 1 0 0 0
+c
+d 384 1 0 0 0
+c
+d 392 2 1 0 0
+c
+d 737 4 2 0 0
+c
+d 838 1 1 0 0
+c
+d 839 2 0 0 0
+c
+d 145 1 0 0 0
+c
+d 146 2 0 2 0
+c
+d 48 2 1 0 0
+c
+d 301 3 1 0 0
+c
+d 1156 2 0 1 0
+c
+d 564 1 0 0 0
+c
+d 789 1 0 1 0
+c
+d 100 2 0 0 0
+c
+d 565 1 1 0 0
+c
+d 567 1 0 0 0
+c
+d 568 2 0 1 0
+c
+d 572 2 1 0 0
+c
+d 191 3 1 1 0
+c
+d 743 3 0 0 0
+c
+d 507 1 0 0 0
+c
+d 1070 1 0 0 0
+c
+d 550 1 0 0 0
+c
+d 556 1 0 0 0
+c
+d 54 1 0 0 0
+c
+d 66 1 0 0 0
+c
+d 32 1 0 0 0
+c
+d 33 2 0 0 0
+c
+d 34 2 0 0 0
+c
+d 529 1 0 0 0
+c
+d 532 1 0 0 0
+c
+d 91 3 0 0 0
+c
+d 1079 3 0 1 0
+c
+d 1156 1 0 0 0
+c
+d 1195 1 1 0 0
+c
+d 1269 2 0 0 0
+c
+d 217 4 1 0 0
+c
+d 218 1 0 1 0
+c
+d 1109 7 1 1 0
+c
+d 1 2 1 0 0
+c
+d 799 1 0 1 0
+c
+d 844 3 1 0 0
+c
+d 897 1 0 0 0
+c
+d 796 4 0 1 0
+c
+d 54 2 1 0 0
+c
+d 719 1 0 0 0
+c
+d 394 4 1 0 0
+c
+d 1111 1 0 1 0
+c
+d 661 1 0 0 0
+c
+d 662 1 0 0 0
+c
+d 666 3 0 0 0
+c
+d 242 5 1 0 0
+c
+d 369 1 1 0 0
+c
+d 382 4 1 0 0
+c
+d 323 3 0 0 0
+c
+d 349 1 1 0 0
+c
+d 1145 3 1 0 0
+c
+d 0 1 1 0 0
+c
+d 1 1 0 1 0
+c
+d 408 3 1 0 0
+c
+d 305 1 0 1 0
+c
+d 1141 2 1 0 0
+c
+d 749 1 0 0 0
+c
+d 893 1 0 0 0
+c
+d 894 3 1 0 0
+c
+d 273 1 0 1 0
+c
+d 287 2 0 1 0
+c
+d 159 1 0 0 0
+c
+d 178 1 1 0 0
+c
+d 377 1 0 0 0
+c
+d 378 1 0 0 0
+c
+d 1172 4 1 1 0
+c
+d 1246 6 1 0 0
+c
+d 167 3 0 2 0
+c
+d 734 4 1 0 0
+c
+d 570 2 1 0 0
+c
+d 791 1 0 0 0
+c
+d 507 2 0 0 0
+c
+d 508 1 0 0 0
+c
+d 259 4 1 0 0
+c
+d 1185 1 0 1 0
+c
+d 1188 2 1 0 0
+c
+d 1158 2 0 0 0
+c
+d 1163 1 0 1 0
+c
+d 691 4 1 1 0
+c
+d 697 1 0 1 0
+c
+d 610 2 0 0 0
+c
+d 881 3 0 0 0
+c
+d 146 1 0 0 0
+c
+d 1098 1 0 0 0
+c
+d 1086 2 0 0 0
+c
+d 427 3 1 0 0
+c
+d 428 2 0 0 0
+c
+d 12 3 0 0 0
+c
+d 14 1 0 0 0
+c
+d 532 1 0 0 0
+c
+d 548 1 0 0 0
+c
+d 1205 2 0 0 0
+c
+d 799 1 0 1 0
+c
+d 843 3 1 0 0
+c
+d 764 2 0 0 0
+c
+d 285 1 1 0 0
+c
+d 1226 3 1 0 0
+c
+d 262 1 1 0 0
+c
+d 272 1 0 0 0
+c
+d 273 1 0 1 0
+c
+d 926 1 0 1 0
+c
+d 927 1 1 0 0
+c
+d 1318 1 0 0 0
+c
+d 1319 1 1 0 0
+c
+d 305 2 0 0 0
+c
+d 1140 1 0 1 0
+c
+d 278 3 0 0 0
+c
+d 337 4 1 0 0
+c
+d 357 3 1 0 0
+c
+d 368 2 0 0 0
+c
+d 743 1 0 0 0
+c
+d 744 2 0 1 0
+c
+d 745 1 1 0 0
+c
+d 532 1 0 1 0
+c
+d 534 1 0 1 0
+c
+d 348 3 1 0 0
+c
+d 788 4 1 0 0
+c
+d 1177 2 0 0 0
+c
+d 1184 5 1 1 0
+c
+d 70 2 0 0 0
+c
+d 341 1 0 0 0
+c
+d 401 2 0 0 0
+c
+d 402 2 0 0 0
+c
+d 1285 2 1 1 0
+c
+d 754 1 0 1 0
+c
+d 755 2 1 0 0
+c
+d 301 4 1 0 0
+c
+d 551 2 0 2 0
+c
+d 564 1 0 0 0
+c
+d 133 1 0 0 0
+c
+d 134 2 0 0 0
+c
+d 660 1 0 0 0
+c
+d 662 4 2 0 0
+c
+d 93 1 0 1 0
+c
+d 95 2 1 0 0
+c
+d 96 1 0 0 0
+c
+d 1020 2 1 0 0
+c
+d 1021 3 1 0 0
+c
+d 1029 1 0 0 0
+c
+d 1060 1 1 0 0
+c
+d 1063 3 1 0 0
+c
+d 1067 1 0 0 0
+c
+d 318 3 1 0 0
+c
+d 199 2 1 0 0
+c
+d 211 1 0 0 0
+c
+d 353 1 0 0 0
+c
+d 355 1 1 0 0
+c
+d 992 2 0 0 0
+c
+d 1194 1 0 0 0
+c
+d 1195 1 0 1 0
+c
+d 1208 1 1 0 0
+c
+d 1184 1 0 0 0
+c
+d 1195 1 1 0 0
+c
+d 1197 1 0 1 0
+c
+d 424 3 1 1 0
+c
+d 1125 4 1 0 0
+c
+d 148 2 0 0 0
+c
+d 1225 3 1 0 0
+c
+d 384 2 1 0 0
+c
+d 755 1 0 0 0
+c
+d 764 2 1 0 0
+c
+d 348 2 0 0 0
+c
+d 1113 4 0 0 0
+c
+d 18 2 0 0 0
+c
+d 965 3 1 1 0
+c
+d 278 3 0 2 0
+c
+d 1173 2 0 0 0
+c
+d 1174 1 1 0 0
+c
+d 876 1 0 0 0
+c
+d 878 1 0 0 0
+c
+d 888 2 0 0 0
+c
+d 753 5 2 0 0
+c
+d 691 3 1 0 0
+c
+d 32 1 1 0 0
+c
+d 75 3 1 0 0
+c
+d 76 1 0 0 0
+c
+d 373 2 1 0 0
+c
+d 793 4 1 0 0
+c
+d 662 4 1 0 0
+c
+d 599 1 0 0 0
+c
+d 604 4 1 1 0
+c
+d 86 2 0 0 0
+c
+d 159 4 1 1 0
+c
+d 161 1 1 0 0
+c
+d 1291 1 1 0 0
+c
+d 1292 2 0 0 0
+c
+d 262 2 0 0 0
+c
+d 159 3 0 0 0
+c
+d 1009 3 0 0 0
+c
+d 763 3 0 2 0
+c
+d 532 1 1 0 0
+c
+d 534 2 0 1 0
+c
+d 767 1 0 0 0
+c
+d 890 2 1 0 0
+c
+d 208 3 1 1 0
+c
+d 211 2 0 1 0
+c
+d 146 4 1 1 0
+c
+d 54 3 1 0 0
+c
+d 206 4 0 0 0
+c
+d 1194 2 0 1 0
+c
+d 1203 3 0 0 0
+c
+d 133 1 0 0 0
+c
+d 324 1 1 0 0
+c
+d 181 1 0 1 0
+c
+d 194 4 1 1 0
+c
+d 529 1 0 0 0
+c
+d 550 1 0 0 0
+c
+d 393 1 0 1 0
+c
+d 396 2 1 0 0
+c
+d 156 1 0 1 0
+c
+d 164 3 1 0 0
+c
+d 165 1 0 0 0
+c
+d 301 2 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 757 3 0 1 0
+c
+d 178 3 0 0 0
+c
+d 183 1 0 0 0
+c
+d 382 3 1 0 0
+c
+d 28 1 0 0 0
+c
+d 29 2 1 0 0
+c
+d 30 1 0 1 0
+c
+d 737 4 1 0 0
+c
+d 743 3 1 0 0
+c
+d 1087 3 1 1 0
+c
+d 1045 5 2 0 0
+c
+d 157 4 1 0 0
+c
+d 99 1 0 0 0
+c
+d 100 5 1 1 0
+c
+d 275 3 0 0 0
+c
+d 31 2 0 2 0
+c
+d 278 3 1 1 0
+c
+d 19 3 0 0 0
+c
+d 842 5 0 0 0
+c
+d 318 1 0 1 0
+c
+d 1149 1 0 0 0
+c
+d 89 2 1 0 0
+c
+d 532 3 0 0 0
+c
+d 556 1 1 0 0
+c
+d 564 1 0 0 0
+c
+d 565 1 0 0 0
+c
+d 1009 5 0 0 0
+c
+d 211 5 2 0 0
+c
+d 675 4 1 0 0
+c
+d 676 1 1 0 0
+c
+d 167 2 1 0 0
+c
+d 1121 1 0 1 0
+c
+d 1002 2 1 0 0
+c
+d 1003 3 1 0 0
+c
+d 99 1 0 1 0
+c
+d 111 6 1 0 0
+c
+d 458 1 0 1 0
+c
+d 461 3 1 1 0
+c
+d 489 1 0 0 0
+c
+d 32 1 0 1 0
+c
+d 46 1 1 0 0
+c
+d 74 2 0 0 0
+c
+d 5 1 0 1 0
+c
+d 17 4 1 0 0
+c
+d 16 5 1 1 0
+c
+d 1195 2 0 2 0
+c
+d 84 4 1 0 0
+c
+d 384 2 1 0 0
+c
+d 437 2 0 1 0
+c
+d 1045 1 1 0 0
+c
+d 301 3 1 0 0
+c
+d 1156 2 1 0 0
+c
+d 737 1 1 0 0
+c
+d 738 1 0 0 0
+c
+d 740 2 0 0 0
+c
+d 741 1 0 0 0
+c
+d 965 1 0 0 0
+c
+d 970 1 1 0 0
+c
+d 973 1 0 1 0
+c
+d 305 3 1 0 0
+c
+d 1144 1 0 1 0
+c
+d 457 1 0 0 0
+c
+d 459 1 0 1 0
+c
+d 460 1 0 0 0
+c
+d 686 1 0 0 0
+c
+d 689 3 1 0 0
+c
+d 704 1 0 0 0
+c
+d 99 1 0 1 0
+c
+d 101 1 1 0 0
+c
+d 2 2 1 0 0
+c
+d 143 4 1 0 0
+c
+d 196 2 0 0 0
+c
+d 197 1 0 0 0
+c
+d 65 4 1 0 0
+c
+d 1303 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 107 3 0 0 0
+c
+d 108 1 0 0 0
+c
+d 753 1 0 0 0
+c
+d 759 1 0 0 0
+c
+d 19 1 0 0 0
+c
+d 622 3 2 0 0
+c
+d 626 1 0 0 0
+c
+d 1111 4 1 0 0
+c
+d 620 5 1 0 0
+c
+d 829 2 1 0 0
+c
+d 833 1 0 1 0
+c
+d 90 6 1 0 0
+c
+d 1127 3 1 0 0
+c
+d 1009 4 0 0 0
+c
+d 32 1 0 0 0
+c
+d 75 1 1 0 0
+c
+d 620 1 0 0 0
+c
+d 621 2 1 0 0
+c
+d 749 4 2 0 0
+c
+d 93 4 1 1 0
+c
+d 95 1 0 0 0
+c
+d 625 5 0 0 0
+c
+d 455 4 1 0 0
+c
+d 734 2 1 0 0
+c
+d 211 6 1 0 0
+c
+d 1318 1 0 0 0
+c
+d 1319 1 0 1 0
+c
+d 1320 2 1 0 0
+c
+d 21 3 2 0 0
+c
+d 26 1 0 0 0
+c
+d 1027 1 0 0 0
+c
+d 554 3 1 1 0
+c
+d 193 1 1 0 0
+c
+d 195 1 0 0 0
+c
+d 1013 1 1 0 0
+c
+d 1016 1 0 1 0
+c
+d 1017 1 0 0 0
+c
+d 529 2 0 0 0
+c
+d 532 1 0 0 0
+c
+d 594 2 0 0 0
+c
+d 959 1 0 0 0
+c
+d 274 1 0 0 0
+c
+d 277 2 0 0 0
+c
+d 823 3 1 1 0
+c
+d 51 3 1 1 0
+c
+d 52 1 0 0 0
+c
+d 594 3 0 0 0
+c
+d 575 2 1 0 0
+c
+d 577 1 0 0 0
+c
+d 927 1 0 1 0
+c
+d 930 1 0 0 0
+c
+d 196 1 0 1 0
+c
+d 197 1 0 0 0
+c
+d 592 1 0 0 0
+c
+d 594 2 0 0 0
+c
+d 280 1 0 1 0
+c
+d 281 4 1 0 0
+c
+d 111 7 1 0 0
+c
+d 225 5 1 0 0
+c
+d 101 1 0 0 0
+c
+d 1080 1 0 0 0
+c
+d 1081 1 0 0 0
+c
+d 1177 2 1 0 0
+c
+d 1178 1 0 0 0
+c
+d 534 1 0 1 0
+c
+d 545 3 1 0 0
+c
+d 686 4 1 0 0
+c
+d 963 2 0 0 0
+c
+d 16 7 0 1 0
+c
+d 437 3 0 1 0
+c
+d 565 3 1 0 0
+c
+d 52 4 2 0 0
+c
+d 723 1 0 0 0
+c
+d 701 4 1 0 0
+c
+d 146 2 0 0 0
+c
+d 1255 1 0 0 0
+c
+d 394 1 0 1 0
+c
+d 1111 1 0 1 0
+c
+d 184 3 1 0 0
+c
+d 232 2 0 0 0
+c
+d 229 2 0 0 0
+c
+d 231 2 0 0 0
+c
+d 661 5 1 0 0
+c
+d 667 2 0 0 0
+c
+d 528 3 0 0 0
+c
+d 1185 3 1 1 0
+c
+d 199 1 0 0 0
+c
+d 211 2 1 0 0
+c
+d 217 1 0 0 0
+c
+d 96 3 1 0 0
+c
+d 111 2 1 0 0
+c
+d 580 8 0 0 0
+c
+d 534 2 1 0 0
+c
+d 353 6 1 1 0
+c
+d 591 6 1 1 0
+c
+d 769 6 1 1 0
+c
+d 729 5 1 0 0
+c
+d 730 1 0 1 0
+c
+d 196 1 0 0 0
+c
+d 200 2 0 0 0
+c
+d 393 3 2 0 0
+c
+d 769 3 1 1 0
+c
+d 301 2 0 0 0
+c
+d 641 5 1 0 0
+c
+d 51 6 1 0 0
+c
+d 19 1 0 0 0
+c
+d 1008 1 0 0 0
+c
+d 1013 1 0 0 0
+c
+d 578 2 0 1 0
+c
+d 955 4 1 0 0
+c
+d 565 3 0 0 0
+c
+d 457 6 1 0 0
+c
+d 384 2 0 1 0
+c
+d 394 1 0 1 0
+c
+d 634 1 1 0 0
+c
+d 635 1 0 1 0
+c
+d 301 2 1 0 0
+c
+d 1150 3 1 0 0
+c
+d 28 1 0 0 0
+c
+d 29 3 0 0 0
+c
+d 753 3 1 0 0
+c
+d 1177 2 0 2 0
+c
+d 1184 3 1 0 0
+c
+d 661 3 1 0 0
+c
+d 668 1 0 0 0
+c
+d 278 1 1 0 0
+c
+d 1168 4 1 0 0
+c
+d 746 4 1 0 0
+c
+d 1 2 1 0 0
+c
+d 1323 2 0 0 0
+c
+d 606 1 0 0 0
+c
+d 608 1 0 0 0
+c
+d 262 3 0 0 0
+c
+d 418 2 1 0 0
+c
+d 799 4 1 2 0
+c
+d 111 1 0 1 0
+c
+d 1087 1 0 0 0
+c
+d 1096 2 0 0 0
+c
+d 1071 3 0 0 0
+c
+d 164 1 1 0 0
+c
+d 167 2 0 1 0
+c
+d 196 2 1 0 0
+c
+d 199 2 0 0 0
+c
+d 217 2 0 0 0
+c
+d 221 4 0 0 0
+c
+d 101 2 0 0 0
+c
+d 382 3 1 1 0
+c
+d 1061 1 0 0 0
+c
+d 1062 2 1 0 0
+c
+d 133 2 1 0 0
+c
+d 146 3 0 0 0
+c
+d 148 1 0 0 0
+c
+d 789 1 0 1 0
+c
+d 833 2 0 1 0
+c
+d 620 5 1 0 0
+c
+d 437 4 0 0 0
+c
+d 618 2 0 0 0
+c
+d 638 2 1 0 0
+c
+d 1045 5 0 0 0
+c
+d 973 1 0 0 0
+c
+d 974 1 0 0 0
+c
+d 975 4 1 0 0
+c
+d 1173 3 1 0 0
+c
+d 753 2 0 0 0
+c
+d 631 4 2 0 0
+c
+d 31 6 0 2 0
+c
+d 295 1 1 0 0
+c
+d 296 1 0 0 0
+c
+d 297 2 0 0 0
+c
+d 1009 4 1 0 0
+c
+d 477 1 0 0 0
+c
+d 479 3 1 0 0
+c
+d 1224 6 1 1 0
+c
+d 243 1 0 0 0
+c
+d 245 3 0 0 0
+c
+d 246 1 0 0 0
+c
+d 91 2 0 1 0
+c
+d 437 4 2 0 0
+c
+d 469 1 0 0 0
+c
+d 621 4 0 0 0
+c
+d 622 1 0 0 0
+c
+d 990 3 0 0 0
+c
+d 261 6 1 0 0
+c
+d 246 5 1 0 0
+c
+d 251 1 0 1 0
+c
+d 479 1 0 0 0
+c
+d 487 3 0 0 0
+c
+d 199 1 0 0 0
+c
+d 211 2 1 0 0
+c
+d 875 3 1 0 0
+c
+d 26 1 1 0 0
+c
+d 28 2 0 0 0
+c
+d 29 1 0 0 0
+c
+d 1315 1 0 0 0
+c
+d 144 1 0 0 0
+c
+d 145 4 1 0 0
+c
+d 591 3 0 1 0
+c
+d 799 3 1 1 0
+c
+d 565 1 0 0 0
+c
+d 791 1 0 0 0
+c
+d 574 1 0 0 0
+c
+d 575 4 0 0 0
+c
+d 965 6 0 0 0
+c
+d 16 2 0 0 0
+c
+d 90 2 0 0 0
+c
+d 93 1 1 0 0
+c
+d 159 2 0 0 0
+c
+d 185 3 1 0 0
+c
+d 186 1 0 1 0
+c
+d 163 2 1 0 0
+c
+d 606 2 1 1 0
+c
+d 525 5 1 1 0
+c
+d 526 1 0 0 0
+c
+d 802 2 0 0 0
+c
+d 803 2 1 0 0
+c
+d 283 1 0 0 0
+c
+d 284 2 0 0 0
+c
+d 392 2 1 0 0
+c
+d 146 2 0 0 0
+c
+d 285 1 0 1 0
+c
+d 1224 1 0 0 0
+c
+d 1255 1 0 0 0
+c
+d 487 5 0 0 0
+c
+d 551 1 0 0 0
+c
+d 784 1 0 0 0
+c
+d 938 1 0 0 0
+c
+d 578 3 0 0 0
+c
+d 686 1 1 0 0
+c
+d 955 2 0 0 0
+c
+d 163 1 0 0 0
+c
+d 172 2 0 0 0
+c
+d 437 6 1 0 0
+c
+d 569 1 0 0 0
+c
+d 278 2 1 0 0
+c
+d 1168 1 0 1 0
+c
+d 50 3 0 0 0
+c
+d 51 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 463 4 1 0 0
+c
+d 232 4 0 0 0
+c
+d 156 1 0 0 0
+c
+d 163 2 0 0 0
+c
+d 211 4 1 0 0
+c
+d 1237 1 0 1 0
+c
+d 204 4 1 0 0
+c
+d 737 1 0 0 0
+c
+d 756 1 0 0 0
+c
+d 1115 1 0 0 0
+c
+d 1116 1 0 1 0
+c
+d 46 4 1 0 0
+c
+d 134 2 0 0 0
+c
+d 140 2 0 0 0
+c
+d 500 3 1 0 0
+c
+d 327 3 0 0 0
+c
+d 329 1 0 0 0
+c
+d 400 1 0 0 0
+c
+d 402 1 0 0 0
+c
+d 575 1 0 0 0
+c
+d 796 2 0 0 0
+c
+d 814 1 0 0 0
+c
+d 32 4 1 1 0
+c
+d 74 1 0 0 0
+c
+d 315 5 1 1 0
+c
+d 316 1 0 0 0
+c
+d 157 3 0 0 0
+c
+d 1284 5 1 1 0
+c
+d 334 2 1 0 0
+c
+d 336 2 0 0 0
+c
+d 437 2 0 0 0
+c
+d 457 1 1 0 0
+c
+d 278 1 0 1 0
+c
+d 280 5 1 0 0
+c
+d 534 2 1 0 0
+c
+d 537 1 0 0 0
+c
+d 294 6 1 1 0
+c
+d 663 2 1 0 0
+c
+d 665 3 0 0 0
+c
+d 680 1 0 0 0
+c
+d 211 1 0 0 0
+c
+d 242 3 1 0 0
+c
+d 602 3 1 0 0
+c
+d 878 2 0 0 0
+c
+d 532 1 0 1 0
+c
+d 208 1 1 0 0
+c
+d 211 2 0 0 0
+c
+d 1244 1 0 0 0
+c
+d 167 3 1 0 0
+c
+d 369 1 0 0 0
+c
+d 373 3 1 1 0
+c
+d 769 4 1 1 0
+c
+d 775 1 0 0 0
+c
+d 301 1 0 0 0
+c
+d 1156 3 1 1 0
+c
+d 1192 1 0 1 0
+c
+d 1303 1 0 0 0
+c
+d 1304 3 0 0 0
+c
+d 1305 1 0 0 0
+c
+d 24 1 0 0 0
+c
+d 25 2 1 0 0
+c
+d 27 1 1 0 0
+c
+d 1176 3 1 0 0
+c
+d 7 1 0 0 0
+c
+d 1269 2 0 0 0
+c
+d 843 1 0 0 0
+c
+d 844 1 0 0 0
+c
+d 87 2 1 0 0
+c
+d 826 1 0 0 0
+c
+d 827 2 0 0 0
+c
+d 829 1 0 0 0
+c
+d 668 3 0 0 0
+c
+d 670 1 1 0 0
+c
+d 671 1 0 0 0
+c
+d 437 2 0 0 0
+c
+d 1050 3 2 0 0
+c
+d 1 3 0 0 0
+c
+d 327 1 0 0 0
+c
+d 334 1 0 0 0
+c
+d 277 1 1 0 0
+c
+d 1158 2 0 0 0
+c
+d 54 7 1 0 0
+c
+d 156 2 1 0 0
+c
+d 163 3 0 0 0
+c
+d 285 1 0 0 0
+c
+d 286 2 0 0 0
+c
+d 276 2 1 0 0
+c
+d 300 1 0 0 0
+c
+d 301 1 0 0 0
+c
+d 743 3 1 0 0
+c
+d 570 1 0 0 0
+c
+d 572 1 0 1 0
+c
+d 827 3 0 0 0
+c
+d 631 3 0 0 0
+c
+d 645 3 1 0 0
+c
+d 753 1 0 0 0
+c
+d 763 5 2 0 0
+c
+d 242 2 0 0 0
+c
+d 246 1 0 0 0
+c
+d 341 1 0 0 0
+c
+d 423 1 0 0 0
+c
+d 763 3 0 0 0
+c
+d 634 2 0 0 0
+c
+d 437 3 0 0 0
+c
+d 558 3 1 0 0
+c
+d 563 1 0 0 0
+c
+d 164 5 1 0 0
+c
+d 166 1 0 0 0
+c
+d 651 1 0 0 0
+c
+d 686 1 0 1 0
+c
+d 689 4 1 0 0
+c
+d 575 4 1 0 0
+c
+d 686 1 0 0 0
+c
+d 737 1 0 0 0
+c
+d 753 3 1 0 0
+c
+d 755 1 0 0 0
+c
+d 757 1 1 0 0
+c
+d 765 1 0 0 0
+c
+d 647 4 1 0 0
+c
+d 964 1 0 1 0
+c
+d 455 1 0 0 0
+c
+d 456 2 0 0 0
+c
+d 7 4 1 0 0
+c
+d 169 5 2 0 0
+c
+d 167 3 1 0 0
+c
+d 157 4 1 0 0
+c
+d 364 1 1 0 0
+c
+d 623 1 0 1 0
+c
+d 625 2 1 0 0
+c
+d 1111 1 0 0 0
+c
+d 1115 1 0 0 0
+c
+d 205 7 1 0 0
+c
+d 787 3 1 0 0
+c
+d 1106 1 0 0 0
+c
+d 1107 2 1 0 0
+c
+d 843 1 0 0 0
+c
+d 844 3 0 0 0
+c
+d 111 5 1 0 0
+c
+d 1092 1 0 1 0
+c
+d 755 2 1 0 0
+c
+d 764 1 0 0 0
+c
+d 157 5 1 1 0
+c
+d 100 5 1 0 0
+c
+d 1002 1 0 1 0
+c
+d 46 1 0 0 0
+c
+d 584 4 1 0 0
+c
+d 591 1 0 0 0
+c
+d 1286 1 0 1 0
+c
+d 1287 3 0 0 0
+c
+d 1111 1 0 0 0
+c
+d 1115 2 0 0 0
+c
+d 564 3 0 0 0
+c
+d 788 1 0 1 0
+c
+d 937 2 0 0 0
+c
+d 355 5 1 0 0
+c
+d 1266 2 0 2 0
+c
+d 1285 1 0 0 0
+c
+d 610 1 0 1 0
+c
+d 1004 1 0 0 0
+c
+d 1005 2 1 0 0
+c
+d 29 4 0 1 0
+c
+d 1318 1 0 0 0
+c
+d 1021 4 0 1 0
+c
+d 1029 2 0 0 0
+c
+d 242 1 0 1 0
+c
+d 246 3 1 0 0
+c
+d 262 1 0 1 0
+c
+d 33 2 0 1 0
+c
+d 34 1 1 0 0
+c
+d 1163 3 1 0 0
+c
+d 618 1 1 0 0
+c
+d 621 3 0 0 0
+c
+d 592 4 0 1 0
+c
+d 133 2 0 0 0
+c
+d 134 1 0 0 0
+c
+d 277 1 1 0 0
+c
+d 1158 3 0 0 0
+c
+d 1114 1 0 0 0
+c
+d 1115 2 0 0 0
+c
+d 1118 1 0 0 0
+c
+d 769 4 2 0 0
+c
+d 1278 2 0 0 0
+c
+d 1283 2 0 0 0
+c
+d 775 2 1 0 0
+c
+d 183 1 0 0 0
+c
+d 193 3 0 1 0
+c
+d 195 1 0 0 0
+c
+d 21 1 1 0 0
+c
+d 1020 3 1 0 0
+c
+d 1021 1 0 0 0
+c
+d 51 1 0 0 0
+c
+d 52 1 0 0 0
+c
+d 56 3 1 0 0
+c
+d 1125 4 2 0 0
+c
+d 1127 1 0 0 0
+c
+d 853 1 0 0 0
+c
+d 854 1 1 0 0
+c
+d 866 1 0 0 0
+c
+d 811 6 2 0 0
+c
+d 1121 2 1 0 0
+c
+d 1165 1 0 0 0
+c
+d 1168 3 1 0 0
+c
+d 1177 1 1 0 0
+c
+d 18 6 1 1 0
+c
+d 650 4 0 0 0
+c
+d 89 1 0 0 0
+c
+d 533 1 0 0 0
+c
+d 97 2 1 0 0
+c
+d 99 2 1 0 0
+c
+d 1274 3 1 0 0
+c
+d 185 1 1 0 0
+c
+d 186 2 1 0 0
+c
+d 187 3 0 0 0
+c
+d 291 1 0 0 0
+c
+d 299 3 1 0 0
+c
+d 319 1 0 0 0
+c
+d 599 2 0 1 0
+c
+d 602 4 1 0 0
+c
+d 60 1 1 0 0
+c
+d 621 4 0 0 0
+c
+d 580 1 0 0 0
+c
+d 582 3 1 0 0
+c
+d 583 1 0 1 0
+c
+d 301 2 0 1 0
+c
+d 304 1 1 0 0
+c
+d 423 1 0 1 0
+c
+d 470 2 1 0 0
+c
+d 347 4 1 0 0
+c
+d 858 2 1 0 0
+c
+d 872 1 0 0 0
+c
+d 437 3 1 0 0
+c
+d 444 2 0 1 0
+c
+d 274 1 0 0 0
+c
+d 276 2 0 0 0
+c
+d 75 1 0 1 0
+c
+d 86 2 0 0 0
+c
+d 54 1 0 0 0
+c
+d 697 2 1 0 0
+c
+d 101 1 0 0 0
+c
+d 109 3 1 0 0
+c
+d 110 1 1 0 0
+c
+d 110 1 0 1 0
+c
+d 111 2 1 0 0
+c
+d 229 1 0 0 0
+c
+d 838 2 0 0 0
+c
+d 96 3 1 0 0
+c
+d 97 2 1 0 0
+c
+d 18 5 2 1 0
+c
+d 95 1 0 0 0
+c
+d 5 4 0 0 0
+c
+d 129 4 2 0 0
+c
+d 131 1 0 0 0
+c
+d 52 1 0 0 0
+c
+d 54 3 1 0 0
+c
+d 60 1 0 0 0
+c
+d 54 1 0 1 0
+c
+d 719 1 0 1 0
+c
+d 75 3 0 0 0
+c
+d 84 2 1 0 0
+c
+d 242 1 0 1 0
+c
+d 262 2 1 0 0
+c
+d 270 1 0 0 0
+c
+d 1012 1 0 0 0
+c
+d 1030 1 0 0 0
+c
+d 1031 1 0 0 0
+c
+d 575 5 1 0 0
+c
+d 19 2 0 0 0
+c
+d 20 3 0 0 0
+c
+d 851 4 1 0 0
+c
+d 608 1 0 1 0
+c
+d 616 2 0 0 0
+c
+d 1037 4 0 0 0
+c
+d 1038 1 0 0 0
+c
+d 111 1 0 0 0
+c
+d 229 1 0 1 0
+c
+d 231 1 1 0 0
+c
+d 101 4 1 0 0
+c
+d 111 2 0 1 0
+c
+d 1221 4 1 1 0
+c
+d 1222 1 0 0 0
+c
+d 93 1 0 1 0
+c
+d 133 1 0 1 0
+c
+d 840 4 1 0 0
+c
+d 842 1 0 1 0
+c
+d 793 2 0 0 0
+c
+d 164 1 0 0 0
+c
+d 368 1 0 0 0
+c
+d 7 5 1 1 0
+c
+d 970 1 0 0 0
+c
+d 972 5 0 0 0
+c
+d 578 4 1 1 0
+c
+d 523 2 0 0 0
+c
+d 559 1 0 0 0
+c
+d 568 2 0 0 0
+c
+d 93 3 1 0 0
+c
+d 127 1 0 0 0
+c
+d 130 1 1 0 0
+c
+d 618 4 1 0 0
+c
+d 985 2 1 0 0
+c
+d 31 1 0 0 0
+c
+d 32 1 0 0 0
+c
+d 507 4 1 0 0
+c
+d 558 1 0 1 0
+c
+d 1241 4 2 0 0
+c
+d 529 2 0 0 0
+c
+d 1069 3 0 1 0
+c
+d 101 1 0 0 0
+c
+d 111 4 1 1 0
+c
+d 604 3 0 0 0
+c
+d 605 1 0 0 0
+c
+d 640 1 0 0 0
+c
+d 844 2 0 0 0
+c
+d 845 2 0 0 0
+c
+d 846 1 0 0 0
+c
+d 437 3 1 0 0
+c
+d 457 1 0 0 0
+c
+d 52 3 0 0 0
+c
+d 719 1 0 0 0
+c
+d 1113 4 1 0 0
+c
+d 7 1 0 0 0
+c
+d 8 1 1 0 0
+c
+d 9 3 1 0 0
+c
+d 1173 1 0 0 0
+c
+d 1174 1 0 0 0
+c
+d 641 3 1 1 0
+c
+d 642 1 0 0 0
+c
+d 229 4 1 0 0
+c
+d 97 4 0 0 0
+c
+d 6 1 0 0 0
+c
+d 12 1 0 1 0
+c
+d 550 5 1 1 0
+c
+d 101 1 0 0 0
+c
+d 1087 1 1 0 0
+c
+d 115 2 0 0 0
+c
+d 120 1 1 0 0
+c
+d 811 5 1 0 0
+c
+d 817 1 0 1 0
+c
+d 101 3 1 0 0
+c
+d 109 1 1 0 0
+c
+d 97 1 0 1 0
+c
+d 99 4 1 0 0
+c
+d 208 2 0 0 0
+c
+d 1244 1 1 0 0
+c
+d 846 2 1 0 0
+c
+d 851 1 0 0 0
+c
+d 853 1 0 0 0
+c
+d 143 3 0 0 0
+c
+d 21 1 0 0 0
+c
+d 1027 3 1 0 0
+c
+d 96 4 0 0 0
+c
+d 101 4 1 0 0
+c
+d 96 6 1 0 0
+c
+d 479 1 0 0 0
+c
+d 480 3 1 0 0
+c
+d 156 2 1 1 0
+c
+d 406 2 0 0 0
+c
+d 878 1 0 0 0
+c
+d 882 3 1 0 0
+c
+d 885 1 0 0 0
+c
+d 111 1 0 1 0
+c
+d 143 3 1 0 0
+c
+d 317 1 0 0 0
+c
+d 318 3 0 0 0
+c
+d 96 6 1 1 0
+c
+d 99 3 1 0 0
+c
+d 101 2 0 1 0
+c
+d 143 1 1 0 0
+c
+d 144 1 0 0 0
+c
+d 145 3 1 0 0
+c
+d 368 2 0 0 0
+c
+d 369 1 0 0 0
+c
+d 229 1 1 0 0
+c
+d 230 5 1 0 0
+c
+d 21 1 0 0 0
+c
+d 1023 1 0 1 0
+c
+d 143 1 1 0 0
+c
+d 144 3 1 0 0
+c
+d 148 2 0 0 0
+c
+d 232 1 0 0 0
+c
+d 259 1 0 0 0
+c
+d 157 3 1 0 0
+c
+d 176 1 0 1 0
+c
+d 194 4 1 0 0
+c
+d 32 3 1 0 0
+c
+d 1320 1 0 1 0
+c
+d 1321 2 0 0 0
+c
+d 96 1 1 0 0
+c
+d 99 3 1 0 0
+c
+d 1009 1 0 0 0
+c
+d 1010 4 0 0 0
+c
+d 1012 1 0 0 0
+c
+d 749 5 1 1 0
+c
+d 857 3 1 0 0
+c
+d 858 1 1 0 0
+c
+d 101 1 0 1 0
+c
+d 110 4 1 0 0
+c
+d 52 4 1 0 0
+c
+d 96 4 2 0 0
+c
+d 97 1 0 0 0
+c
+d 98 1 0 0 0
+c
+d 1292 4 1 0 0
+c
+d 134 2 1 0 0
+c
+d 136 1 0 0 0
+c
+d 48 1 0 0 0
+c
+d 49 1 0 0 0
+c
+d 199 2 1 0 0
+c
+d 200 4 1 0 0
+c
+d 243 3 1 1 0
+c
+d 244 1 0 0 0
+c
+d 799 2 0 1 0
+c
+d 919 5 1 0 0
+c
+d 529 3 0 0 0
+c
+d 550 2 0 0 0
+c
+d 111 1 0 1 0
+c
+d 143 3 1 1 0
+c
+d 26 1 0 0 0
+c
+d 39 2 0 0 0
+c
+d 40 1 0 0 0
+c
+d 989 2 1 0 0
+c
+d 996 3 0 0 0
+c
+d 799 3 0 0 0
+c
+d 806 1 0 0 0
+c
+d 594 2 0 0 0
+c
+d 148 5 1 0 0
+c
+d 531 4 1 0 0
+c
+d 532 1 0 0 0
+c
+d 535 1 0 0 0
+c
+d 1179 1 0 0 0
+c
+d 1181 1 0 0 0
+c
+d 211 4 1 1 0
+c
+d 1238 1 0 0 0
+c
+d 753 2 0 1 0
+c
+d 594 1 1 0 0
+c
+d 959 5 1 0 0
+c
+d 280 1 1 0 0
+c
+d 281 3 0 1 0
+c
+d 594 1 0 0 0
+c
+d 686 1 0 0 0
+c
+d 281 4 1 0 0
+c
+d 1156 1 0 0 0
+c
+d 1214 1 0 0 0
+c
+d 95 2 0 0 0
+c
+d 96 1 0 0 0
+c
+d 96 1 0 1 0
+c
+d 98 4 1 0 0
+c
+d 99 3 1 0 0
+c
+d 100 1 0 0 0
+c
+d 738 4 0 1 0
+c
+d 743 1 0 1 0
+c
+d 276 4 1 0 0
+c
+d 287 1 0 0 0
+c
+d 1156 3 0 1 0
+c
+d 1215 2 1 0 0
+c
+d 1303 2 1 0 0
+c
+d 1304 1 0 0 0
+c
+d 93 5 1 1 0
+c
+d 98 1 0 0 0
+c
+d 99 2 1 0 0
+c
+d 100 1 0 1 0
+c
+d 353 3 1 0 0
+c
+d 1138 2 0 0 0
+c
+d 1139 1 0 0 0
+c
+d 686 2 0 0 0
+c
+d 925 1 1 0 0
+c
+d 1 4 1 1 0
+c
+d 17 1 0 0 0
+c
+d 111 2 1 0 0
+c
+d 143 3 1 0 0
+c
+d 145 2 1 0 0
+c
+d 230 1 0 0 0
+c
+d 237 2 0 0 0
+c
+d 457 7 1 0 0
+c
+d 457 3 1 0 0
+c
+d 458 1 0 1 0
+c
+d 144 1 0 0 0
+c
+d 145 3 1 0 0
+c
+d 101 3 0 0 0
+c
+d 424 1 0 0 0
+c
+d 1170 1 0 0 0
+c
+d 1185 2 0 0 0
+c
+d 689 1 0 1 0
+c
+d 704 4 1 0 0
+c
+d 594 3 1 0 0
+c
+d 594 4 1 0 0
+c
+d 787 1 0 0 0
+c
+d 884 2 0 1 0
+c
+d 594 3 1 0 0
+c
+d 737 6 1 1 0
+c
+d 594 1 1 0 0
+c
+d 959 2 0 1 0
+c
+d 148 1 0 1 0
+c
+d 252 1 0 0 0
+c
+d 253 2 1 0 0
+c
+d 686 3 1 0 0
+c
+d 963 1 0 1 0
+c
+d 7 2 0 0 0
+c
+d 1279 1 0 0 0
+c
+d 1121 3 1 0 0
+c
+d 1122 1 1 0 0
+c
+d 594 5 1 1 0
+c
+d 686 5 0 0 0
+c
+d 705 4 2 0 0
+c
+d 706 1 0 0 0
+c
+d 686 1 1 0 0
+c
+d 689 2 1 0 0
+c
+d 704 1 0 0 0
+c
+d 18 1 0 1 0
+c
+d 84 4 1 0 0
+c
+d 509 1 0 1 0
+c
+d 510 2 0 0 0
+c
+d 686 1 0 0 0
+c
+d 689 2 1 0 0
+c
+d 690 1 0 1 0
+c
+d 959 5 1 1 0
+c
+d 146 4 2 0 0
+c
+d 237 1 0 0 0
+c
+d 69 1 0 0 0
+c
+d 650 2 1 0 0
+c
+d 655 1 0 0 0
+c
+d 52 1 0 1 0
+c
+d 54 2 1 0 0
+c
+d 1303 1 0 0 0
+c
+d 5 2 1 0 0
+c
+d 9 3 0 0 0
+c
+d 51 1 0 0 0
+c
+d 52 1 1 0 0
+c
+d 177 1 1 0 0
+c
+d 180 1 0 1 0
+c
+d 32 2 0 0 0
+c
+d 1320 1 0 0 0
+c
+d 1321 3 0 1 0
+c
+d 17 1 0 1 0
+c
+d 93 2 1 0 0
+c
+d 95 1 0 0 0
+c
+d 62 4 1 0 0
+c
+d 63 1 0 1 0
+c
+d 594 6 2 0 0
+c
+d 162 3 1 0 0
+c
+d 171 1 0 0 0
+c
+d 608 6 1 0 0
+c
+d 959 5 2 0 0
+c
+d 281 2 0 0 0
+c
+d 1214 3 1 0 0
+c
+d 277 1 1 0 0
+c
+d 1158 1 0 0 0
+c
+d 1163 3 0 0 0
+c
+d 266 1 1 0 0
+c
+d 268 1 0 0 0
+c
+d 282 2 0 0 0
+c
+d 51 1 0 0 0
+c
+d 1310 5 1 0 0
+c
+d 262 1 1 0 0
+c
+d 264 5 1 0 0
+c
+d 145 4 1 0 0
+c
+d 146 1 0 0 0
+c
+d 168 4 2 0 0
+c
+d 705 5 2 0 0
+c
+d 707 1 0 0 0
+c
+d 529 2 0 0 0
+c
+d 532 1 0 0 0
+c
+d 550 1 0 0 0
+c
+d 98 5 1 0 0
+c
+d 99 1 1 0 0
+c
+d 95 1 1 0 0
+c
+d 96 4 1 0 0
+c
+d 98 1 0 0 0
+c
+d 705 2 1 1 0
+c
+d 710 3 1 0 0
+c
+d 711 1 0 0 0
+c
+d 604 1 0 1 0
+c
+d 641 1 0 0 0
+c
+d 642 4 1 0 0
+c
+d 686 3 1 1 0
+c
+d 691 5 1 1 0
+c
+d 1156 3 2 0 0
+c
+d 1161 1 0 0 0
+c
+d 111 1 0 0 0
+c
+d 229 1 0 1 0
+c
+d 231 3 1 0 0
+c
+d 803 4 0 0 0
+c
+d 804 1 0 0 0
+c
+d 146 4 1 0 0
+c
+d 606 2 0 1 0
+c
+d 608 2 1 0 0
+c
+d 615 1 0 1 0
+c
+d 274 4 1 1 0
+c
+d 275 1 0 0 0
+c
+d 660 4 1 1 0
+c
+d 86 4 0 1 0
+c
+d 686 5 2 0 0
+c
+d 428 2 1 0 0
+c
+d 436 1 0 0 0
+c
+d 690 1 0 0 0
+c
+d 704 1 0 0 0
+c
+d 705 1 0 0 0
+c
+d 1 1 1 0 0
+c
+d 2 1 0 0 0
+c
+d 17 2 0 0 0
+c
+d 626 3 0 2 0
+c
+d 627 2 1 0 0
+c
+d 225 1 0 0 0
+c
+d 241 3 1 0 0
+c
+d 50 1 0 0 0
+c
+d 51 2 1 0 0
+c
+d 279 1 0 0 0
+c
+d 305 4 1 0 0
+c
+d 306 1 0 0 0
+c
+d 143 5 0 0 0
+c
+d 144 1 1 0 0
+c
+d 162 2 1 0 0
+c
+d 359 3 1 0 0
+c
+d 691 1 0 1 0
+c
+d 706 1 0 0 0
+c
+d 707 2 1 0 0
+c
+d 251 1 0 0 0
+c
+d 253 2 1 0 0
+c
+d 255 1 0 0 0
+c
+d 256 1 0 0 0
+c
+d 706 1 0 0 0
+c
+d 707 3 1 0 0
+c
+d 660 4 1 0 0
+c
+d 662 1 0 1 0
+c
+d 50 3 1 0 0
+c
+d 51 1 1 0 0
+c
+d 594 2 0 0 0
+c
+d 51 4 2 0 0
+c
+d 959 5 1 1 0
+c
+d 1156 5 2 0 0
+c
+d 581 1 0 0 0
+c
+d 582 4 0 0 0
+c
+d 686 2 0 0 0
+c
+d 963 3 1 0 0
+c
+d 60 3 2 0 0
+c
+d 630 2 0 0 0
+c
+d 738 4 0 1 0
+c
+d 748 1 0 0 0
+c
+d 750 1 0 0 0
+c
+d 285 1 0 0 0
+c
+d 286 2 1 0 0
+c
+d 291 2 1 0 0
+c
+d 44 5 2 1 0
+c
+d 1185 1 0 0 0
+c
+d 1188 1 0 0 0
+c
+d 51 4 1 2 0
+c
+d 620 5 1 0 0
+c
+d 645 1 0 0 0
+c
+d 705 1 0 0 0
+c
+d 706 3 1 1 0
+c
+d 12 6 1 0 0
+c
+d 241 1 0 1 0
+c
+d 253 2 1 0 0
+c
+d 254 1 0 1 0
+c
+d 286 3 0 0 0
+c
+d 1223 1 0 0 0
+c
+d 148 1 1 0 0
+c
+d 238 3 1 0 0
+c
+d 240 2 0 0 0
+c
+d 1309 1 0 0 0
+c
+d 1310 4 0 0 0
+c
+d 660 4 1 0 0
+c
+d 60 1 0 1 0
+c
+d 1009 4 0 1 0
+c
+d 254 5 1 0 0
+c
+d 255 1 0 0 0
+c
+d 98 4 0 0 0
+c
+d 61 2 0 0 0
+c
+d 65 2 0 0 0
+c
+d 217 4 1 0 0
+c
+d 221 1 0 0 0
+c
+d 592 1 1 0 0
+c
+d 594 3 1 0 0
+c
+d 959 1 0 0 0
+c
+d 65 1 1 0 0
+c
+d 1303 2 0 0 0
+c
+d 225 4 2 0 0
+c
+d 705 1 0 1 0
+c
+d 706 4 1 0 0
+c
+d 146 4 2 0 0
+c
+d 737 4 1 0 0
+c
+d 225 5 1 1 0
+c
+d 737 3 1 0 0
+c
+d 51 2 0 0 0
+c
+d 1309 2 1 0 0
+c
+d 594 5 1 2 0
+c
+d 89 1 0 1 0
+c
+d 91 4 1 0 0
+c
+d 242 6 2 0 0
+c
+d 594 3 0 0 0
+c
+d 653 1 1 0 0
+c
+d 1156 7 2 0 0
+c
+d 780 1 0 0 0
+c
+d 781 1 0 0 0
+c
+d 782 3 0 0 0
+c
+d 855 4 0 0 0
+c
+d 50 1 1 0 0
+c
+d 51 3 0 1 0
+c
+d 1153 5 2 0 0
+c
+d 253 1 0 0 0
+c
+d 258 3 1 0 0
+c
+d 60 2 0 1 0
+c
+d 647 4 1 0 0
+c
+d 622 3 1 1 0
+c
+d 1008 2 0 0 0
+c
+d 578 1 0 0 0
+c
+d 956 3 1 0 0
+c
+d 509 4 1 0 0
+c
+d 510 1 0 0 0
+c
+d 60 3 0 1 0
+c
+d 62 1 0 0 0
+c
+d 621 1 0 1 0
+c
+d 212 3 0 0 0
+c
+d 1126 4 0 0 0
+c
+d 46 5 1 1 0
+c
+d 225 2 1 0 0
+c
+d 241 4 1 0 0
+c
+d 148 1 1 0 0
+c
+d 225 4 1 0 0
+c
+d 959 3 2 0 0
+c
+d 960 1 0 0 0
+c
+d 660 5 2 0 0
+c
+d 963 2 0 0 0
+c
+d 1156 3 1 0 0
+c
+d 1161 1 0 0 0
+c
+d 1214 1 0 0 0
+c
+d 61 5 2 0 0
+c
+d 65 1 0 0 0
+c
+d 959 5 1 1 0
+c
+d 280 2 0 0 0
+c
+d 1156 2 1 1 0
+c
+d 621 6 1 1 0
+c
+d 1303 1 0 0 0
+c
+d 1305 1 0 0 0
+c
+d 686 5 2 0 0
+c
+d 686 3 0 0 0
+c
+d 575 3 1 0 0
+c
+d 252 1 0 0 0
+c
+d 259 3 2 0 0
+c
+d 262 1 0 0 0
+c
+d 592 4 1 1 0
+c
+d 591 1 0 1 0
+c
+d 595 3 1 0 0
+c
+d 211 1 0 0 0
+c
+d 215 2 1 0 0
+c
+d 217 1 0 0 0
+c
+d 223 1 1 0 0
+c
+d 704 1 0 1 0
+c
+d 705 3 1 1 0
+c
+d 622 2 0 1 0
+c
+d 625 3 1 0 0
+c
+d 575 5 2 0 0
+c
+d 265 2 1 0 0
+c
+d 286 1 0 0 0
+c
+d 756 1 1 0 0
+c
+d 768 1 0 0 0
+c
+d 769 3 0 1 0
+c
+d 686 3 1 1 0
+c
+d 959 1 0 1 0
+c
+d 577 6 2 0 0
+c
+d 143 1 0 0 0
+c
+d 144 4 2 0 0
+c
+d 1153 1 0 0 0
+c
+d 1156 3 1 1 0
+c
+d 55 1 0 0 0
+c
+d 691 3 1 0 0
+c
+d 707 1 0 1 0
+c
+d 708 1 1 0 0
+c
+d 723 1 0 0 0
+c
+d 724 2 1 0 0
+c
+d 734 1 0 0 0
+c
+d 944 1 1 0 0
+c
+d 55 2 0 0 0
+c
+d 691 2 1 0 0
+c
+d 706 1 0 1 0
+c
+d 319 3 1 0 0
+c
+d 320 1 0 0 0
+c
+d 268 2 0 1 0
+c
+d 282 1 1 0 0
+c
+d 690 1 0 0 0
+c
+d 705 1 0 0 0
+c
+d 691 2 0 1 0
+c
+d 708 5 1 0 0
+c
+d 146 5 1 0 0
+c
+d 1256 2 1 0 0
+c
+d 574 1 0 1 0
+c
+d 795 2 0 0 0
+c
+d 817 2 0 0 0
+c
+d 818 1 0 0 0
+c
+d 294 5 1 2 0
+c
+d 789 3 1 0 0
+c
+d 253 1 0 0 0
+c
+d 255 2 1 0 0
+c
+d 256 3 0 0 0
+c
+d 250 1 1 0 0
+c
+d 251 3 0 1 0
+c
+d 673 3 1 1 0
+c
+d 225 3 1 0 0
+c
+d 241 2 1 0 0
+c
+d 253 2 0 0 0
+c
+d 254 1 0 1 0
+c
+d 255 1 1 0 0
+c
+d 95 1 0 1 0
+c
+d 96 2 1 0 0
+c
+d 97 1 0 1 0
+c
+d 148 2 0 1 0
+c
+d 238 2 1 0 0
+c
+d 680 5 1 1 0
+c
+d 575 2 0 0 0
+c
+d 577 1 1 0 0
+c
+d 259 1 0 0 0
+c
+d 262 3 1 0 0
+c
+d 263 1 0 0 0
+c
+d 263 2 1 0 0
+c
+d 264 2 0 0 0
+c
+d 264 3 1 1 0
+c
+d 285 1 0 1 0
+c
+d 266 3 1 0 0
+c
+d 268 1 1 0 0
+c
+d 269 1 0 0 0
+c
+d 1153 5 2 0 0
+c
+d 915 3 1 0 0
+c
+d 916 2 0 0 0
+c
+d 1303 1 0 0 0
+c
+d 1304 4 1 0 0
+c
+d 334 3 1 0 0
+c
+d 335 1 0 0 0
+c
+d 336 1 0 0 0
+c
+d 705 3 1 0 0
+c
+d 708 1 1 0 0
+c
+d 710 1 0 0 0
+c
+d 1156 5 2 0 0
+c
+d 217 1 0 0 0
+c
+d 1241 1 1 0 0
+c
+d 1242 4 1 0 0
+c
+d 51 1 0 0 0
+c
+d 52 1 0 0 0
+c
+d 89 3 0 0 0
+c
+d 218 5 2 0 0
+c
+d 1 1 0 0 0
+c
+d 17 4 1 0 0
+c
+d 93 1 1 0 0
+c
+d 494 1 1 0 0
+c
+d 495 1 0 0 0
+c
+d 496 1 0 0 0
+c
+d 686 1 0 0 0
+c
+d 701 5 1 1 0
+c
+d 1176 3 1 1 0
+c
+d 225 4 1 2 0
+c
+d 253 6 2 0 0
+c
+d 591 2 1 0 0
+c
+d 959 1 0 1 0
+c
+d 266 4 1 0 0
+c
+d 267 3 0 0 0
+c
+d 299 1 0 1 0
+c
+d 319 2 1 0 0
+c
+d 320 2 0 0 0
+c
+d 60 2 0 0 0
+c
+d 623 2 0 0 0
+c
+d 624 1 0 0 0
+c
+d 217 2 1 1 0
+c
+d 280 1 0 0 0
+c
+d 281 4 2 0 0
+c
+d 264 4 1 0 0
+c
+d 861 1 1 0 0
+c
+d 862 2 1 0 0
+c
+d 865 1 0 0 0
+c
+d 55 2 1 1 0
+c
+d 694 2 0 0 0
+c
+d 281 3 1 0 0
+c
+d 211 4 1 0 0
+c
+d 959 3 1 1 0
+c
+d 263 4 1 0 0
+c
+d 686 2 1 0 0
+c
+d 922 1 0 1 0
+c
+d 186 1 0 1 0
+c
+d 213 2 1 0 0
+c
+d 214 1 0 1 0
+c
+d 51 2 1 0 0
+c
+d 52 2 1 0 0
+c
+d 1303 1 0 0 0
+c
+d 262 1 0 1 0
+c
+d 266 4 1 0 0
+c
+d 268 1 0 0 0
+c
+d 301 3 1 0 0
+c
+d 1156 2 1 0 0
+c
+d 217 4 2 0 0
+c
+d 225 1 0 0 0
+c
+d 360 4 2 0 0
+c
+d 274 1 0 1 0
+c
+d 278 1 0 0 0
+c
+d 52 3 1 0 0
+c
+d 53 2 1 0 0
+c
+d 599 1 0 1 0
+c
+d 604 2 0 0 0
+c
+d 606 1 1 0 0
+c
+d 662 3 1 0 0
+c
+d 667 1 1 0 0
+c
+d 686 4 1 0 0
+c
+d 660 6 0 0 0
+c
+d 631 4 0 0 0
+c
+d 60 2 0 1 0
+c
+d 62 3 1 1 0
+c
+d 875 2 1 1 0
+c
+d 252 3 1 0 0
+c
+d 259 1 0 0 0
+c
+d 217 5 2 0 0
+c
+d 716 2 0 1 0
+c
+d 844 3 1 0 0
+c
+d 577 3 2 0 0
+c
+d 578 2 0 0 0
+c
+d 577 3 1 1 0
+c
+d 60 1 0 0 0
+c
+d 62 2 0 0 0
+c
+d 64 1 0 0 0
+c
+d 18 3 1 0 0
+c
+d 93 1 0 0 0
+c
+d 46 2 0 0 0
+c
+d 341 2 0 1 0
+c
+d 411 1 1 0 0
+c
+d 422 1 0 0 0
+c
+d 1279 2 0 0 0
+c
+d 1281 2 0 0 0
+c
+d 582 1 0 0 0
+c
+d 587 3 1 0 0
+c
+d 252 2 1 0 0
+c
+d 258 1 1 0 0
+c
+d 259 1 0 0 0
+c
+d 217 2 0 1 0
+c
+d 225 4 1 0 0
+c
+d 145 1 0 1 0
+c
+d 146 3 1 0 0
+c
+d 2 2 1 0 0
+c
+d 16 1 0 1 0
+c
+d 89 3 1 0 0
+c
+d 55 3 1 0 0
+c
+d 691 1 1 0 0
+c
+d 694 1 0 0 0
+c
+d 428 4 1 1 0
+c
+d 430 1 0 0 0
+c
+d 251 5 1 0 0
+c
+d 252 1 0 0 0
+c
+d 211 1 0 0 0
+c
+d 1233 1 0 0 0
+c
+d 1235 3 1 1 0
+c
+d 1236 1 0 0 0
+c
+d 211 2 0 1 0
+c
+d 215 2 1 0 0
+c
+d 780 4 1 0 0
+c
+d 781 1 0 1 0
+c
+d 50 1 1 0 0
+c
+d 51 2 1 0 0
+c
+d 57 1 0 0 0
+c
+d 775 1 1 0 0
+c
+d 780 5 1 0 0
+c
+d 355 1 0 0 0
+c
+d 358 3 1 0 0
+c
+d 362 1 0 0 0
+c
+d 18 1 0 1 0
+c
+d 93 3 1 0 0
+c
+d 264 5 1 0 0
+c
+d 286 1 1 0 0
+c
+d 691 1 0 1 0
+c
+d 700 3 0 1 0
+c
+d 701 2 1 0 0
+c
+d 217 6 2 0 0
+c
+d 659 4 1 1 0
+c
+d 660 1 0 0 0
+c
+d 276 4 1 0 0
+c
+d 288 2 1 0 0
+c
+d 60 3 0 2 0
+c
+d 61 2 1 0 0
+c
+d 152 4 1 0 0
+c
+d 262 3 1 1 0
+c
+d 217 5 2 0 0
+c
+d 65 4 1 1 0
+c
+d 578 3 1 0 0
+c
+d 249 1 1 0 0
+c
+d 250 4 1 0 0
+c
+d 253 1 0 0 0
+c
+d 252 4 1 0 0
+c
+d 257 2 0 0 0
+c
+d 259 1 1 0 0
+c
+d 989 3 0 0 0
+c
+d 241 2 1 0 0
+c
+d 249 2 1 0 0
+c
+d 253 1 0 0 0
+c
+d 96 1 1 0 0
+c
+d 142 4 1 0 0
+c
+d 647 4 1 1 0
+c
+d 686 3 1 0 0
+c
+d 688 1 0 0 0
+c
+d 701 1 1 0 0
+c
+d 93 4 1 1 0
+c
+d 62 4 1 1 0
+c
+d 575 5 1 0 0
+c
+d 577 1 0 0 0
+c
+d 428 2 1 0 0
+c
+d 586 3 1 0 0
+c
+d 196 1 1 0 0
+c
+d 1246 1 0 0 0
+c
+d 1247 4 1 0 0
+c
+d 305 1 1 0 0
+c
+d 306 4 1 0 0
+c
+d 686 3 1 0 0
+c
+d 959 1 0 1 0
+c
+d 591 1 0 1 0
+c
+d 595 3 1 0 0
+c
+d 253 4 1 1 0
+c
+d 254 1 0 0 0
+c
+d 199 3 1 0 0
+c
+d 200 1 0 0 0
+c
+d 575 1 0 0 0
+c
+d 578 1 0 0 0
+c
+d 955 5 0 0 0
+c
+d 249 1 0 0 0
+c
+d 250 2 0 0 0
+c
+d 60 4 1 0 0
+c
+d 1307 1 0 0 0
+c
+d 577 3 1 0 0
+c
+d 1009 3 0 0 0
+c
+d 55 2 1 0 0
+c
+d 694 3 1 0 0
+c
+d 919 4 1 0 0
+c
+d 922 1 1 0 0
+c
+d 359 4 1 0 0
+c
+d 56 4 1 0 0
+c
+d 734 3 1 0 0
+c
+d 737 1 0 0 0
+c
+d 428 1 0 0 0
+c
+d 436 2 1 0 0
+c
+d 437 1 1 0 0
+c
+d 622 1 0 0 0
+c
+d 965 4 0 0 0
+c
+d 968 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 686 2 1 0 0
+c
+d 686 6 2 0 0
+c
+d 278 1 0 0 0
+c
+d 1156 3 1 0 0
+c
+d 60 4 2 0 0
+c
+d 647 1 0 0 0
+c
+d 162 1 0 1 0
+c
+d 359 1 0 0 0
+c
+d 361 2 0 0 0
+c
+d 686 2 1 0 0
+c
+d 701 4 1 0 0
+c
+d 659 7 1 0 0
+c
+d 457 4 0 0 0
+c
+d 252 4 1 0 0
+c
+d 259 2 1 0 0
+c
+d 1303 2 0 0 0
+c
+d 1305 2 0 0 0
+c
+d 264 3 1 1 0
+c
+d 286 1 0 0 0
+c
+d 686 2 1 0 0
+c
+d 925 1 0 1 0
+c
+d 411 1 1 0 0
+c
+d 415 4 0 0 0
+c
+d 705 1 1 0 0
+c
+d 708 5 1 0 0
+c
+d 259 1 1 0 0
+c
+d 260 3 1 0 0
+c
+d 602 2 0 1 0
+c
+d 680 1 1 0 0
+c
+d 621 5 1 0 0
+c
+d 205 1 0 0 0
+c
+d 211 2 0 0 0
+c
+d 146 1 1 0 0
+c
+d 148 1 0 0 0
+c
+d 232 3 0 0 0
+c
+d 264 1 1 0 0
+c
+d 285 5 1 0 0
+c
+d 662 1 1 0 0
+c
+d 671 1 0 0 0
+c
+d 672 2 0 0 0
+c
+d 252 2 1 0 0
+c
+d 259 3 1 0 0
+c
+d 260 1 0 0 0
+c
+d 101 1 1 0 0
+c
+d 107 6 1 0 0
+c
+d 737 1 0 0 0
+c
+d 753 1 1 0 0
+c
+d 578 4 1 0 0
+c
+d 663 4 2 0 0
+c
+d 665 1 0 0 0
+c
+d 241 3 1 1 0
+c
+d 253 2 0 0 0
+c
+d 588 4 1 0 0
+c
+d 575 1 1 0 0
+c
+d 796 4 1 0 0
+c
+d 60 4 1 1 0
+c
+d 466 5 2 0 0
+c
+d 52 4 1 0 0
+c
+d 285 5 1 1 0
+c
+d 274 1 0 1 0
+c
+d 276 4 1 0 0
+c
+d 46 2 1 0 0
+c
+d 75 1 0 0 0
+c
+d 51 1 1 0 0
+c
+d 52 2 1 0 0
+c
+d 53 1 0 0 0
+c
+d 54 1 0 0 0
+c
+d 591 2 1 0 0
+c
+d 595 3 1 0 0
+c
+d 691 5 1 1 0
+c
+d 279 1 0 0 0
+c
+d 1150 3 0 0 0
+c
+d 1153 1 0 0 0
+c
+d 146 3 1 0 0
+c
+d 234 1 0 1 0
+c
+d 196 3 1 0 0
+c
+d 198 1 0 1 0
+c
+d 199 1 0 1 0
+c
+d 49 4 1 0 0
+c
+d 278 3 1 1 0
+c
+d 279 1 0 0 0
+c
+d 50 2 1 0 0
+c
+d 51 1 1 0 0
+c
+d 734 1 0 0 0
+c
+d 264 5 2 0 0
+c
+d 50 1 1 0 0
+c
+d 51 4 1 0 0
+c
+d 146 2 0 0 0
+c
+d 233 1 0 0 0
+c
+d 234 2 0 0 0
+c
+d 145 1 0 1 0
+c
+d 146 3 1 1 0
+c
+d 578 3 2 0 0
+c
+d 686 1 0 0 0
+c
+d 211 4 1 1 0
+c
+d 212 1 0 0 0
+c
+d 199 5 1 0 0
+c
+d 211 1 1 0 0
+c
+d 60 4 1 1 0
+c
+d 301 3 1 1 0
+c
+d 1156 2 0 0 0
+c
+d 1161 1 0 0 0
+c
+d 225 3 1 1 0
+c
+d 241 2 1 0 0
+c
+d 199 4 1 1 0
+c
+d 745 1 0 0 0
+c
+d 746 3 1 1 0
+c
+d 689 4 1 0 0
+c
+d 701 1 0 1 0
+c
+d 702 1 1 0 0
+c
+d 278 1 0 0 0
+c
+d 279 2 0 0 0
+c
+d 305 2 1 0 0
+c
+d 18 4 1 0 0
+c
+d 93 1 1 0 0
+c
+d 359 4 2 0 0
+c
+d 361 1 0 0 0
+c
+d 152 2 1 0 0
+c
+d 412 1 0 0 0
+c
+d 413 2 1 0 0
+c
+d 358 1 0 1 0
+c
+d 359 3 1 1 0
+c
+d 47 1 0 0 0
+c
+d 769 2 1 0 0
+c
+d 249 2 0 0 0
+c
+d 253 2 1 1 0
+c
+d 284 4 1 1 0
+c
+d 285 1 1 0 0
+c
+d 89 4 1 0 0
+c
+d 1285 1 0 0 0
+c
+d 755 6 2 0 0
+c
+d 353 6 1 1 0
+c
+d 578 3 1 0 0
+c
+d 217 4 1 1 0
+c
+d 241 1 0 0 0
+c
+d 578 2 1 0 0
+c
+d 956 4 1 0 0
+c
+d 437 3 2 0 0
+c
+d 467 1 0 0 0
+c
+d 629 3 1 0 0
+c
+d 965 1 0 0 0
+c
+d 1303 4 1 0 0
+c
+d 686 1 0 0 0
+c
+d 691 3 0 0 0
+c
+d 1156 4 0 0 0
+c
+d 392 2 1 0 0
+c
+d 393 3 1 0 0
+c
+d 259 4 1 0 0
+c
+d 262 1 0 1 0
+c
+d 663 6 2 0 0
+c
+d 718 3 1 0 0
+c
+d 730 1 1 0 0
+c
+d 735 1 0 0 0
+c
+d 211 4 1 0 0
+c
+d 215 1 1 0 0
+c
+d 332 1 1 0 0
+c
+d 337 3 1 0 0
+c
+d 338 1 0 0 0
+c
+d 19 2 1 0 0
+c
+d 1008 4 1 0 0
+c
+d 630 3 1 0 0
+c
+d 647 2 1 0 0
+c
+d 259 2 1 0 0
+c
+d 260 1 0 0 0
+c
+d 146 4 1 0 0
+c
+d 51 1 0 1 0
+c
+d 57 3 1 0 0
+c
+d 305 1 0 0 0
+c
+d 353 1 1 0 0
+c
+d 1144 4 1 0 0
+c
+d 19 4 1 0 0
+c
+d 979 1 1 0 0
+c
+d 185 2 1 0 0
+c
+d 196 1 0 1 0
+c
+d 199 1 0 0 0
+c
+d 65 5 0 0 0
+c
+d 286 4 1 2 0
+c
+d 919 3 1 0 0
+c
+d 923 3 1 0 0
+c
+d 730 2 1 0 0
+c
+d 733 4 1 1 0
+c
+d 142 4 1 0 0
+c
+d 55 4 2 0 0
+c
+d 694 1 0 0 0
+c
+d 178 3 1 0 0
+c
+d 181 2 0 1 0
+c
+d 578 3 1 0 0
+c
+d 580 1 1 0 0
+c
+d 286 2 0 0 0
+c
+d 211 1 1 0 0
+c
+d 242 2 0 1 0
+c
+d 419 4 2 0 0
+c
+d 423 1 0 0 0
+c
+d 211 4 1 1 0
+c
+d 419 5 1 2 0
+c
+d 691 1 0 1 0
+c
+d 693 3 1 0 0
+c
+d 156 2 0 0 0
+c
+d 406 1 0 0 0
+c
+d 168 2 1 1 0
+c
+d 371 1 0 0 0
+c
+d 204 1 0 1 0
+c
+d 224 5 0 1 0
+c
+d 580 3 1 0 0
+c
+d 956 1 0 0 0
+c
+d 958 2 1 0 0
+c
+d 49 4 1 1 0
+c
+d 278 1 0 1 0
+c
+d 279 3 1 0 0
+c
+d 306 2 0 1 0
+c
+d 19 1 0 1 0
+c
+d 629 3 1 1 0
+c
+d 268 1 0 1 0
+c
+d 282 4 1 0 0
+c
+d 146 4 2 0 0
+c
+d 575 5 2 0 0
+c
+d 876 3 0 0 0
+c
+d 622 6 2 0 0
+c
+d 211 4 1 0 0
+c
+d 242 1 1 0 0
+c
+d 327 1 0 1 0
+c
+d 348 3 1 0 0
+c
+d 349 1 0 0 0
+c
+d 46 1 0 1 0
+c
+d 285 1 0 1 0
+c
+d 286 4 1 1 0
+c
+d 686 4 1 0 0
+c
+d 211 5 2 0 0
+c
+d 17 1 0 1 0
+c
+d 93 2 1 0 0
+c
+d 95 1 0 1 0
+c
+d 623 5 2 0 0
+c
+d 626 1 0 0 0
+c
+d 686 6 2 0 0
+c
+d 729 2 1 0 0
+c
+d 618 5 1 2 0
+c
+d 284 4 2 0 0
+c
+d 737 2 0 0 0
+c
+d 578 1 0 1 0
+c
+d 1043 4 1 1 0
+c
+d 54 1 0 0 0
+c
+d 55 3 1 1 0
+c
+d 66 1 0 1 0
+c
+d 733 3 1 0 0
+c
+d 734 1 0 0 0
+c
+d 737 3 1 0 0
+c
+d 743 1 0 1 0
+c
+d 582 2 0 0 0
+c
+d 583 1 0 0 0
+c
+d 621 3 0 1 0
+c
+d 626 1 1 0 0
+c
+d 743 4 2 0 0
+c
+d 753 1 0 0 0
+c
+d 621 3 1 1 0
+c
+d 301 4 1 1 0
+c
+d 730 1 0 0 0
+c
+d 735 2 0 0 0
+c
+d 479 4 1 0 0
+c
+d 487 1 0 1 0
+c
+d 730 1 0 1 0
+c
+d 735 5 1 0 0
+c
+d 419 3 1 1 0
+c
+d 420 3 1 0 0
+c
+d 260 1 1 0 0
+c
+d 261 5 1 0 0
+c
+d 1203 1 0 0 0
+c
+d 1207 5 1 1 0
+c
+d 146 3 1 0 0
+c
+d 285 1 0 0 0
+c
+d 286 1 1 0 0
+c
+d 5 4 1 1 0
+c
+d 18 1 0 1 0
+c
+d 419 4 2 0 0
+c
+d 423 1 0 0 0
+c
+d 775 2 1 0 0
+c
+d 776 2 1 0 0
+c
+d 753 4 2 0 0
+c
+d 60 2 1 0 0
+c
+d 62 1 0 0 0
+c
+d 630 1 0 1 0
+c
+d 217 4 1 0 0
+c
+d 736 5 1 0 0
+c
+d 471 5 1 1 0
+c
+d 298 3 1 0 0
+c
+d 319 2 1 0 0
+c
+d 602 1 1 0 0
+c
+d 621 4 1 0 0
+c
+d 46 2 0 1 0
+c
+d 775 1 0 1 0
+c
+d 578 2 0 0 0
+c
+d 686 1 0 0 0
+c
+d 282 4 1 0 0
+c
+d 287 1 0 0 0
+c
+d 1227 1 0 0 0
+c
+d 199 4 0 0 0
+c
+d 242 1 0 1 0
+c
+d 262 2 1 0 0
+c
+d 266 1 0 1 0
+c
+d 610 2 0 1 0
+c
+d 612 1 0 1 0
+c
+d 613 2 1 0 0
+c
+d 578 5 1 1 0
+c
+d 199 1 1 0 0
+c
+d 211 4 1 0 0
+c
+d 262 2 0 0 0
+c
+d 266 1 0 0 0
+c
+d 268 1 0 0 0
+c
+d 55 1 0 0 0
+c
+d 691 2 0 0 0
+c
+d 927 3 1 0 0
+c
+d 930 1 0 0 0
+c
+d 217 4 1 1 0
+c
+d 221 1 0 1 0
+c
+d 359 4 2 0 0
+c
+d 328 3 0 0 0
+c
+d 148 4 1 0 0
+c
+d 239 1 1 0 0
+c
+d 575 1 0 0 0
+c
+d 925 1 0 0 0
+c
+d 926 2 0 0 0
+c
+d 16 2 1 0 0
+c
+d 93 2 0 0 0
+c
+d 60 1 0 1 0
+c
+d 647 2 1 0 0
+c
+d 753 3 0 1 0
+c
+d 755 1 1 0 0
+c
+d 689 1 1 0 0
+c
+d 703 2 1 0 0
+c
+d 705 1 0 0 0
+c
+d 419 4 1 1 0
+c
+d 647 1 0 1 0
+c
+d 649 2 1 0 0
+c
+d 655 2 0 0 0
+c
+d 919 3 1 0 0
+c
+d 933 1 0 0 0
+c
+d 934 2 1 0 0
+c
+d 206 1 0 1 0
+c
+d 207 1 0 1 0
+c
+d 60 1 0 0 0
+c
+d 647 5 2 0 0
+c
+d 748 4 2 0 0
+c
+d 894 1 0 0 0
+c
+d 148 1 1 0 0
+c
+d 232 2 0 1 0
+c
+d 266 4 2 0 0
+c
+d 268 1 0 0 0
+c
+d 400 5 0 0 0
+c
+d 148 2 1 0 0
+c
+d 239 3 1 0 0
+c
+d 621 1 0 1 0
+c
+d 626 2 1 0 0
+c
+d 591 1 0 0 0
+c
+d 592 5 1 2 0
+c
+d 21 5 1 1 0
+c
+d 575 1 0 0 0
+c
+d 686 3 2 0 0
+c
+d 925 1 0 0 0
+c
+d 729 1 0 0 0
+c
+d 730 4 1 0 0
+c
+d 703 1 0 0 0
+c
+d 705 3 2 0 0
+c
+d 728 1 1 0 0
+c
+d 729 3 1 0 0
+c
+d 694 5 1 2 0
+c
+d 727 1 1 0 0
+c
+d 728 5 1 0 0
+c
+d 148 3 1 1 0
+c
+d 479 3 2 0 0
+c
+d 487 1 0 0 0
+c
+d 306 5 2 0 0
+c
+d 919 5 1 0 0
+c
+d 921 1 0 0 0
+c
+d 436 3 1 0 0
+c
+d 1043 1 0 0 0
+c
+d 1153 3 1 1 0
+c
+d 618 5 2 0 0
+c
+d 621 2 0 0 0
+c
+d 623 3 0 0 0
+c
+d 268 3 0 0 0
+c
+d 353 5 1 1 0
+c
+d 268 6 1 1 0
+c
+d 75 2 0 0 0
+c
+d 1300 4 0 0 0
+c
+d 419 5 1 1 0
+c
+d 26 6 1 1 0
+c
+d 218 5 1 1 0
+c
+d 804 1 0 1 0
+c
+d 915 3 1 0 0
+c
+d 919 1 0 0 0
+c
+d 738 1 0 1 0
+c
+d 745 3 1 0 0
+c
+d 28 4 2 0 0
+c
+d 661 1 0 0 0
+c
+d 667 1 0 0 0
+c
+d 424 3 1 0 0
+c
+d 591 1 0 0 0
+c
+d 356 1 0 1 0
+c
+d 358 3 1 0 0
+c
+d 264 1 0 0 0
+c
+d 284 1 0 0 0
+c
+d 285 2 1 0 0
+c
+d 286 1 1 0 0
+c
+d 622 1 0 0 0
+c
+d 965 3 1 0 0
+c
+d 968 2 1 0 0
+c
+d 727 1 1 0 0
+c
+d 728 4 1 0 0
+c
+d 729 1 0 0 0
+c
+d 1153 4 2 0 0
+c
+d 1156 2 0 0 0
+c
+d 769 1 1 0 0
+c
+d 772 1 0 0 0
+c
+d 774 5 1 0 0
+c
+d 419 2 0 0 0
+c
+d 801 1 0 1 0
+c
+d 802 3 1 1 0
+c
+d 1303 1 0 1 0
+c
+d 1304 4 1 0 0
+c
+d 728 5 1 0 0
+c
+d 618 3 0 0 0
+c
+d 1269 3 1 1 0
+c
+d 359 3 1 0 0
+c
+d 360 1 0 1 0
+c
+d 195 4 1 1 0
+c
+d 353 4 1 1 0
+c
+d 142 1 0 1 0
+c
+d 143 2 1 0 0
+c
+d 145 1 0 0 0
+c
+d 288 1 1 0 0
+c
+d 300 3 1 0 0
+c
+d 18 3 2 0 0
+c
+d 29 1 0 0 0
+c
+d 1013 2 1 0 0
+c
+d 1014 1 0 0 0
+c
+d 1033 1 0 0 0
+c
+d 93 4 2 0 0
+c
+d 94 1 0 0 0
+c
+d 437 2 1 0 0
+c
+d 466 1 1 0 0
+c
+d 1047 1 0 0 0
+c
+d 299 1 0 1 0
+c
+d 319 2 1 0 0
+c
+d 320 2 0 1 0
+c
+d 1300 2 1 0 0
+c
+d 1301 1 0 0 0
+c
+d 1302 2 1 0 0
+c
+d 213 3 1 0 0
+c
+d 242 1 0 0 0
+c
+d 437 3 0 1 0
+c
+d 1047 1 1 0 0
+c
+d 618 1 0 1 0
+c
+d 621 5 1 0 0
+c
+d 726 1 0 0 0
+c
+d 727 4 1 0 0
+c
+d 278 2 1 0 0
+c
+d 1228 4 0 0 0
+c
+d 1 2 1 0 0
+c
+d 5 1 0 0 0
+c
+d 17 1 0 0 0
+c
+d 662 4 1 1 0
+c
+d 663 1 0 0 0
+c
+d 168 2 0 0 0
+c
+d 369 3 0 0 0
+c
+d 89 2 1 1 0
+c
+d 66 5 1 0 0
+c
+d 69 1 1 0 0
+c
+d 737 1 0 0 0
+c
+d 743 4 2 0 0
+c
+d 286 3 2 0 0
+c
+d 294 1 0 0 0
+c
+d 1223 1 0 0 0
+c
+d 468 4 1 0 0
+c
+d 478 1 1 0 0
+c
+d 278 1 0 1 0
+c
+d 280 4 1 1 0
+c
+d 18 2 0 1 0
+c
+d 997 3 1 0 0
+c
+d 242 3 1 0 0
+c
+d 243 1 0 0 0
+c
+d 244 1 1 0 0
+c
+d 1235 3 1 0 0
+c
+d 1237 3 1 0 0
+c
+d 48 5 1 1 0
+c
+d 745 3 1 0 0
+c
+d 746 1 0 1 0
+c
+d 69 5 1 1 0
+c
+d 965 1 0 0 0
+c
+d 968 1 0 1 0
+c
+d 969 2 1 0 0
+c
+d 970 1 0 1 0
+c
+d 650 5 1 1 0
+c
+d 651 1 0 0 0
+c
+d 764 1 0 0 0
+c
+d 766 1 0 0 0
+c
+d 286 3 1 0 0
+c
+d 299 1 0 1 0
+c
+d 48 4 0 0 0
+c
+d 89 2 0 0 0
+c
+d 647 3 0 0 0
+c
+d 659 1 0 0 0
+c
+d 964 2 1 1 0
+c
+d 695 3 1 0 0
+c
+d 696 1 0 1 0
+c
+d 954 1 0 1 0
+c
+d 57 3 1 0 0
+c
+d 59 2 0 0 0
+c
+d 93 4 2 0 0
+c
+d 46 1 0 1 0
+c
+d 775 2 1 0 0
+c
+d 782 1 0 0 0
+c
+d 284 5 1 0 0
+c
+d 285 1 0 0 0
+c
+d 991 4 1 0 0
+c
+d 358 2 1 0 0
+c
+d 359 3 1 0 0
+c
+d 242 5 1 0 0
+c
+d 48 5 1 0 0
+c
+d 1008 4 2 0 0
+c
+d 28 3 1 1 0
+c
+d 19 1 0 0 0
+c
+d 622 4 1 0 0
+c
+d 626 1 1 0 0
+c
+d 618 1 0 1 0
+c
+d 965 3 1 0 0
+c
+d 973 1 0 0 0
+c
+d 797 1 0 0 0
+c
+d 799 2 1 0 0
+c
+d 810 1 0 1 0
+c
+d 723 1 0 1 0
+c
+d 726 2 1 0 0
+c
+d 728 1 0 0 0
+c
+d 734 1 0 0 0
+c
+d 48 2 0 1 0
+c
+d 49 2 1 0 0
+c
+d 58 1 0 1 0
+c
+d 602 5 1 0 0
+c
+d 358 4 1 0 0
+c
+d 366 1 0 1 0
+c
+d 69 5 1 1 0
+c
+d 694 4 2 0 0
+c
+d 211 5 1 0 0
+c
+d 108 1 0 0 0
+c
+d 111 3 0 0 0
+c
+d 650 4 1 0 0
+c
+d 575 1 0 1 0
+c
+d 931 4 1 1 0
+c
+d 358 3 1 0 0
+c
+d 359 1 1 0 0
+c
+d 651 3 1 0 0
+c
+d 689 1 0 0 0
+c
+d 437 2 1 0 0
+c
+d 466 1 0 0 0
+c
+d 1047 2 0 0 0
+c
+d 413 3 1 0 0
+c
+d 419 2 1 0 0
+c
+d 670 1 1 0 0
+c
+d 671 2 0 0 0
+c
+d 48 4 1 1 0
+c
+d 1009 4 1 2 0
+c
+d 694 1 1 0 0
+c
+d 695 2 1 0 0
+c
+d 696 1 0 0 0
+c
+d 697 2 0 0 0
+c
+d 353 1 0 0 0
+c
+d 355 4 1 1 0
+c
+d 50 2 0 0 0
+c
+d 734 1 0 0 0
+c
+d 305 4 0 1 0
+c
+d 1141 1 0 0 0
+c
+d 211 4 2 0 0
+c
+d 199 4 1 0 0
+c
+d 618 1 0 0 0
+c
+d 965 3 1 0 0
+c
+d 970 1 1 0 0
+c
+d 487 1 0 1 0
+c
+d 488 3 1 1 0
+c
+d 278 1 0 1 0
+c
+d 1170 3 1 0 0
+c
+d 1173 2 0 0 0
+c
+d 647 2 1 0 0
+c
+d 659 1 0 1 0
+c
+d 2 1 0 0 0
+c
+d 16 1 0 1 0
+c
+d 17 2 1 0 0
+c
+d 634 2 0 0 0
+c
+d 635 1 0 0 0
+c
+d 974 3 1 0 0
+c
+d 975 1 0 0 0
+c
+d 242 4 1 1 0
+c
+d 46 1 0 0 0
+c
+d 74 3 0 0 0
+c
+d 56 2 0 1 0
+c
+d 1309 4 1 0 0
+c
+d 69 4 1 2 0
+c
+d 1304 5 1 1 0
+c
+d 1177 3 1 0 0
+c
+d 1178 3 0 0 0
+c
+d 185 3 1 1 0
+c
+d 196 1 0 0 0
+c
+d 287 3 1 0 0
+c
+d 288 2 1 0 0
+c
+d 18 2 0 0 0
+c
+d 93 1 0 1 0
+c
+d 1263 1 0 0 0
+c
+d 791 5 1 2 0
+c
+d 746 3 1 0 0
+c
+d 753 1 1 0 0
+c
+d 146 4 1 1 0
+c
+d 578 3 2 0 0
+c
+d 580 2 0 0 0
+c
+d 720 1 0 0 0
+c
+d 723 3 1 1 0
+c
+d 726 1 0 1 0
+c
+d 1304 4 2 0 0
+c
+d 204 2 1 0 0
+c
+d 224 1 0 0 0
+c
+d 919 4 0 1 0
+c
+d 618 4 1 0 0
+c
+d 639 1 1 0 0
+c
+d 965 1 0 0 0
+c
+d 413 3 1 0 0
+c
+d 419 1 0 1 0
+c
+d 355 1 0 0 0
+c
+d 358 2 1 1 0
+c
+d 60 2 0 1 0
+c
+d 1307 4 1 0 0
+c
+d 662 3 2 0 0
+c
+d 668 1 0 0 0
+c
+d 915 2 1 0 0
+c
+d 919 3 1 0 0
+c
+d 689 4 1 0 0
+c
+d 701 1 1 0 0
+c
+d 734 1 0 1 0
+c
+d 756 4 1 1 0
+c
+d 68 1 0 0 0
+c
+d 69 3 1 0 0
+c
+d 1172 4 1 0 0
+c
+d 1192 1 0 1 0
+c
+d 655 4 1 1 0
+c
+d 686 4 1 1 0
+c
+d 689 1 0 0 0
+c
+d 799 1 0 0 0
+c
+d 810 3 1 1 0
+c
+d 686 5 1 1 0
+c
+d 575 5 1 1 0
+c
+d 925 4 1 1 0
+c
+d 650 4 0 0 0
+c
+d 661 1 0 0 0
+c
+d 574 4 1 0 0
+c
+d 1053 1 0 1 0
+c
+d 19 2 1 0 0
+c
+d 965 3 0 0 0
+c
+d 966 1 0 0 0
+c
+d 54 3 1 0 0
+c
+d 55 2 1 0 0
+c
+d 3 1 0 0 0
+c
+d 13 1 0 0 0
+c
+d 57 2 1 0 0
+c
+d 59 2 0 1 0
+c
+d 152 1 0 0 0
+c
+d 1254 4 1 0 0
+c
+d 735 4 1 0 0
+c
+d 569 5 1 0 0
+c
+d 1050 1 0 1 0
+c
+d 729 4 2 0 0
+c
+d 946 2 0 0 0
+c
+d 319 1 1 0 0
+c
+d 320 3 1 0 0
+c
+d 321 1 0 0 0
+c
+d 1008 4 1 1 0
+c
+d 955 5 2 0 0
+c
+d 19 1 1 0 0
+c
+d 621 1 0 0 0
+c
+d 622 3 1 0 0
+c
+d 618 4 1 0 0
+c
+d 620 1 1 0 0
+c
+d 621 1 0 0 0
+c
+d 718 4 1 1 0
+c
+d 55 1 1 0 0
+c
+d 66 5 1 0 0
+c
+d 21 2 1 0 0
+c
+d 24 1 0 0 0
+c
+d 95 1 1 0 0
+c
+d 98 1 0 1 0
+c
+d 1003 1 0 0 0
+c
+d 1170 3 0 1 0
+c
+d 1174 2 1 0 0
+c
+d 753 5 2 0 0
+c
+d 305 4 1 0 0
+c
+d 719 4 1 0 0
+c
+d 722 2 0 0 0
+c
+d 965 4 1 1 0
+c
+d 966 1 0 0 0
+c
+d 211 5 1 1 0
+c
+d 738 3 1 1 0
+c
+d 743 1 0 0 0
+c
+d 604 4 1 1 0
+c
+d 142 1 0 1 0
+c
+d 143 2 1 0 0
+c
+d 145 2 0 1 0
+c
+d 281 3 0 0 0
+c
+d 26 1 0 0 0
+c
+d 28 1 0 1 0
+c
+d 1315 2 1 0 0
+c
+d 213 1 0 0 0
+c
+d 242 5 2 0 0
+c
+d 738 1 0 0 0
+c
+d 745 1 0 0 0
+c
+d 748 1 0 0 0
+c
+d 718 7 2 0 0
+c
+d 569 2 0 1 0
+c
+d 574 3 1 0 0
+c
+d 304 6 1 1 0
+c
+d 68 3 1 0 0
+c
+d 69 1 0 1 0
+c
+d 146 1 0 0 0
+c
+d 226 1 0 0 0
+c
+d 238 2 0 0 0
+c
+d 799 4 2 0 0
+c
+d 806 1 0 0 0
+c
+d 18 4 1 1 0
+c
+d 280 2 1 0 0
+c
+d 281 1 0 1 0
+c
+d 1192 1 0 0 0
+c
+d 1048 5 1 0 0
+c
+d 19 5 1 1 0
+c
+d 622 1 0 0 0
+c
+d 304 5 0 0 0
+c
+d 311 1 0 0 0
+c
+d 145 1 0 1 0
+c
+d 146 4 0 1 0
+c
+d 694 1 0 0 0
+c
+d 695 4 1 0 0
+c
+d 696 1 1 0 0
+c
+d 701 2 1 0 0
+c
+d 712 2 0 0 0
+c
+d 618 2 0 0 0
+c
+d 620 1 0 0 0
+c
+d 699 1 0 1 0
+c
+d 800 4 1 1 0
+c
+d 50 1 1 0 0
+c
+d 51 5 1 0 0
+c
+d 591 1 0 1 0
+c
+d 592 3 1 0 0
+c
+d 568 3 1 0 0
+c
+d 569 1 1 0 0
+c
+d 101 2 1 0 0
+c
+d 107 1 0 1 0
+c
+d 720 3 1 0 0
+c
+d 721 1 0 0 0
+c
+d 722 1 0 0 0
+c
+d 353 2 0 1 0
+c
+d 355 3 1 0 0
+c
+d 320 3 1 0 0
+c
+d 951 1 1 0 0
+c
+d 953 5 1 0 0
+c
+d 1153 3 0 0 0
+c
+d 1303 1 0 0 0
+c
+d 1304 2 1 0 0
+c
+d 196 1 0 1 0
+c
+d 199 3 0 0 0
+c
+d 200 1 0 0 0
+c
+d 746 3 1 0 0
+c
+d 747 1 1 0 0
+c
+d 753 1 0 0 0
+c
+d 55 3 1 0 0
+c
+d 691 1 0 1 0
+c
+d 477 1 0 0 0
+c
+d 480 2 0 0 0
+c
+d 485 2 0 0 0
+c
+d 169 3 0 0 0
+c
+d 377 1 0 0 0
+c
+d 378 1 0 0 0
+c
+d 278 2 0 0 0
+c
+d 280 4 1 0 0
+c
+d 599 4 0 1 0
+c
+d 602 1 0 0 0
+c
+d 280 3 1 0 0
+c
+d 281 1 0 0 0
+c
+d 575 2 0 0 0
+c
+d 384 1 0 0 0
+c
+d 388 1 0 0 0
+c
+d 389 3 0 0 0
+c
+d 261 3 1 0 0
+c
+d 262 1 0 0 0
+c
+d 283 1 1 0 0
+c
+d 419 1 0 0 0
+c
+d 420 4 1 0 0
+c
+d 421 1 1 0 0
+c
+d 888 1 0 0 0
+c
+d 890 3 1 0 0
+c
+d 466 3 1 0 0
+c
+d 1013 6 2 0 0
+c
+d 341 3 1 0 0
+c
+d 955 4 1 0 0
+c
+d 956 1 1 0 0
+c
+d 7 4 1 0 0
+c
+d 64 1 0 1 0
+c
+d 65 4 1 0 0
+c
+d 59 1 0 1 0
+c
+d 60 3 1 0 0
+c
+d 72 1 0 1 0
+c
+d 723 1 0 0 0
+c
+d 724 3 1 0 0
+c
+d 725 1 0 0 0
+c
+d 734 1 0 1 0
+c
+d 956 2 0 0 0
+c
+d 211 1 0 1 0
+c
+d 215 2 1 0 0
+c
+d 217 2 1 0 0
+c
+d 799 1 0 0 0
+c
+d 919 1 0 0 0
+c
+d 933 4 1 0 0
+c
+d 167 3 0 1 0
+c
+d 835 1 0 1 0
+c
+d 900 2 1 0 0
+c
+d 437 2 1 0 0
+c
+d 578 4 1 0 0
+c
+d 1185 6 0 0 0
+c
+d 55 1 0 0 0
+c
+d 66 2 1 0 0
+c
+d 67 2 1 0 0
+c
+d 1174 2 1 0 0
+c
+d 1175 1 0 0 0
+c
+d 121 1 0 0 0
+c
+d 124 1 0 0 0
+c
+d 242 1 0 0 0
+c
+d 262 3 1 0 0
+c
+d 578 2 1 0 0
+c
+d 580 2 1 0 0
+c
+d 581 1 0 0 0
+c
+d 283 6 1 0 0
+c
+d 618 1 0 0 0
+c
+d 965 5 1 1 0
+c
+d 793 1 0 0 0
+c
+d 795 4 1 1 0
+c
+d 92 1 0 1 0
+c
+d 93 4 0 1 0
+c
+d 114 1 0 0 0
+c
+d 59 2 0 1 0
+c
+d 60 2 1 0 0
+c
+d 199 2 0 0 0
+c
+d 591 1 0 0 0
+c
+d 597 3 0 1 0
+c
+d 598 1 0 1 0
+c
+d 719 4 0 0 0
+c
+d 949 1 0 0 0
+c
+d 468 5 2 0 0
+c
+d 152 1 0 0 0
+c
+d 153 2 0 0 0
+c
+d 155 2 0 2 0
+c
+d 411 1 0 0 0
+c
+d 419 1 0 1 0
+c
+d 422 3 1 0 0
+c
+d 305 2 0 0 0
+c
+d 353 3 1 1 0
+c
+d 278 1 0 1 0
+c
+d 279 2 1 0 0
+c
+d 305 1 0 1 0
+c
+d 756 1 1 0 0
+c
+d 763 4 1 0 0
+c
+d 719 1 0 0 0
+c
+d 720 1 0 0 0
+c
+d 722 1 0 0 0
+c
+d 211 5 1 1 0
+c
+d 470 2 0 0 0
+c
+d 478 1 1 0 0
+c
+d 278 2 0 0 0
+c
+d 1156 3 1 1 0
+c
+d 720 5 1 1 0
+c
+d 413 2 1 0 0
+c
+d 419 1 0 0 0
+c
+d 578 4 1 1 0
+c
+d 955 1 0 0 0
+c
+d 606 5 1 0 0
+c
+d 720 1 0 1 0
+c
+d 723 2 1 0 0
+c
+d 726 1 0 0 0
+c
+d 69 5 2 0 0
+c
+d 479 1 0 0 0
+c
+d 487 4 2 0 0
+c
+d 1170 3 1 0 0
+c
+d 169 4 1 0 0
+c
+d 378 1 0 0 0
+c
+d 146 4 1 1 0
+c
+d 199 3 1 1 0
+c
+d 208 2 0 1 0
+c
+d 156 5 1 0 0
+c
+d 1 1 0 0 0
+c
+d 5 3 2 0 0
+c
+d 1322 1 0 0 0
+c
+d 437 5 2 0 0
+c
+d 719 4 0 1 0
+c
+d 973 4 1 0 0
+c
+d 65 3 1 0 0
+c
+d 728 4 1 0 0
+c
+d 615 4 2 0 0
+c
+d 724 2 0 1 0
+c
+d 725 3 1 0 0
+c
+d 919 1 0 0 0
+c
+d 922 1 0 1 0
+c
+d 923 2 1 0 0
+c
+d 924 1 0 0 0
+c
+d 455 2 0 0 0
+c
+d 457 1 0 1 0
+c
+d 468 1 1 0 0
+c
+d 799 5 2 0 0
+c
+d 487 5 1 0 0
+c
+d 282 1 1 0 0
+c
+d 287 6 1 0 0
+c
+d 463 5 1 1 0
+c
+d 60 2 1 0 0
+c
+d 622 1 0 1 0
+c
+d 623 3 1 0 0
+c
+d 811 3 1 0 0
+c
+d 904 1 0 0 0
+c
+d 914 1 0 1 0
+c
+d 769 4 1 0 0
+c
+d 889 2 0 1 0
+c
+d 621 4 1 1 0
+c
+d 301 1 0 1 0
+c
+d 1156 4 1 0 0
+c
+d 54 4 0 1 0
+c
+d 242 4 1 1 0
+c
+d 1194 1 0 1 0
+c
+d 1195 4 0 1 0
+c
+d 751 1 1 0 0
+c
+d 753 3 1 0 0
+c
+d 943 1 0 0 0
+c
+d 355 2 1 0 0
+c
+d 358 1 0 0 0
+c
+d 159 1 0 0 0
+c
+d 185 4 1 0 0
+c
+d 159 6 1 1 0
+c
+d 734 2 1 0 0
+c
+d 737 1 0 0 0
+c
+d 26 1 0 1 0
+c
+d 28 3 1 1 0
+c
+d 922 1 1 0 0
+c
+d 925 5 1 0 0
+c
+d 428 1 0 1 0
+c
+d 586 4 1 0 0
+c
+d 568 5 1 0 0
+c
+d 569 1 0 1 0
+c
+d 686 1 0 0 0
+c
+d 691 1 0 0 0
+c
+d 803 4 1 0 0
+c
+d 305 1 0 0 0
+c
+d 1142 4 2 0 0
+c
+d 997 3 1 0 0
+c
+d 998 1 0 1 0
+c
+d 60 4 1 0 0
+c
+d 60 3 1 0 0
+c
+d 62 1 0 1 0
+c
+d 647 1 0 1 0
+c
+d 301 1 0 0 0
+c
+d 304 4 0 0 0
+c
+d 738 1 0 1 0
+c
+d 748 1 0 0 0
+c
+d 750 2 1 0 0
+c
+d 581 2 0 0 0
+c
+d 582 1 0 1 0
+c
+d 590 2 1 0 0
+c
+d 281 3 1 0 0
+c
+d 1156 2 1 0 0
+c
+d 488 6 2 0 0
+c
+d 1150 4 1 0 0
+c
+d 304 5 1 0 0
+c
+d 621 3 0 0 0
+c
+d 622 2 0 0 0
+c
+d 965 1 0 0 0
+c
+d 301 3 1 0 0
+c
+d 304 2 0 0 0
+c
+d 419 5 1 0 0
+c
+d 423 1 1 0 0
+c
+d 218 3 1 0 0
+c
+d 799 2 0 0 0
+c
+d 810 1 0 0 0
+c
+d 729 1 0 0 0
+c
+d 730 5 1 0 0
+c
+d 479 4 1 0 0
+c
+d 480 1 1 0 0
+c
+d 718 3 2 0 0
+c
+d 946 1 0 0 0
+c
+d 199 1 0 0 0
+c
+d 211 4 2 0 0
+c
+d 1184 5 0 0 0
+c
+d 1185 2 0 0 0
+c
+d 16 1 1 0 0
+c
+d 93 5 1 0 0
+c
+d 286 1 0 1 0
+c
+d 1223 4 1 0 0
+c
+d 729 3 0 0 0
+c
+d 733 1 0 0 0
+c
+d 621 1 0 0 0
+c
+d 622 4 2 0 0
+c
+d 718 1 0 0 0
+c
+d 946 5 2 0 0
+c
+d 436 6 2 0 0
+c
+d 478 3 1 0 0
+c
+d 480 2 0 0 0
+c
+d 108 4 1 1 0
+c
+d 111 1 0 0 0
+c
+d 318 1 0 1 0
+c
+d 319 3 1 0 0
+c
+d 320 1 0 0 0
+c
+d 754 1 0 0 0
+c
+d 756 2 0 0 0
+c
+d 763 1 1 0 0
+c
+d 66 1 1 0 0
+c
+d 68 1 0 0 0
+c
+d 69 3 1 0 0
+c
+d 835 2 1 0 0
+c
+d 900 4 1 0 0
+c
+d 793 4 1 0 0
+c
+d 795 1 0 1 0
+c
+d 377 3 0 0 0
+c
+d 378 1 0 0 0
+c
+d 1170 2 0 0 0
+c
+d 155 2 0 0 0
+c
+d 156 1 0 0 0
+c
+d 341 1 0 0 0
+c
+d 423 3 1 0 0
+c
+d 686 1 0 1 0
+c
+d 803 1 0 0 0
+c
+d 804 2 1 0 0
+c
+d 805 1 1 0 0
+c
+d 763 2 0 0 0
+c
+d 767 2 0 1 0
+c
+d 653 4 0 0 0
+c
+d 756 1 0 0 0
+c
+d 763 1 0 0 0
+c
+d 301 1 0 0 0
+c
+d 304 3 0 0 0
+c
+d 69 1 0 0 0
+c
+d 647 2 1 0 0
+c
+d 648 1 0 0 0
+c
+d 443 4 0 0 0
+c
+d 445 2 0 0 0
+c
+d 661 1 0 0 0
+c
+d 662 1 0 0 0
+c
+d 670 1 1 0 0
+c
+d 671 2 1 0 0
+c
+d 638 5 0 1 0
+c
+d 738 5 1 1 0
+c
+d 615 1 0 0 0
+c
+d 616 2 1 0 0
+c
+d 617 1 1 0 0
+c
+d 264 5 1 1 0
+c
+d 437 4 1 0 0
+c
+d 568 1 0 1 0
+c
+d 157 1 0 0 0
+c
+d 159 2 0 0 0
+c
+d 178 1 0 0 0
+c
+d 697 4 0 0 0
+c
+d 719 1 0 0 0
+c
+d 300 1 0 1 0
+c
+d 315 2 1 0 0
+c
+d 316 3 1 0 0
+c
+d 570 5 1 0 0
+c
+d 571 1 0 0 0
+c
+d 478 4 2 0 0
+c
+d 304 4 0 0 0
+c
+d 443 5 0 0 0
+c
+d 444 1 0 0 0
+c
+d 12 1 1 0 0
+c
+d 13 2 0 0 0
+c
+d 15 3 0 0 0
+c
+d 904 1 0 1 0
+c
+d 911 3 1 0 0
+c
+d 912 1 0 0 0
+c
+d 272 4 2 0 0
+c
+d 287 1 0 0 0
+c
+d 457 4 1 1 0
+c
+d 799 3 0 0 0
+c
+d 806 1 0 0 0
+c
+d 622 4 2 0 0
+c
+d 157 4 2 0 0
+c
+d 358 1 0 0 0
+c
+d 797 1 0 0 0
+c
+d 799 2 1 0 0
+c
+d 393 4 0 0 0
+c
+d 801 4 1 0 0
+c
+d 95 1 0 0 0
+c
+d 96 2 0 0 0
+c
+d 97 1 0 0 0
+c
+d 1115 2 0 0 0
+c
+d 1087 2 0 0 0
+c
+d 1089 1 0 1 0
+c
+d 327 2 0 1 0
+c
+d 328 3 1 0 0
+c
+d 329 1 0 0 0
+c
+d 1008 4 1 0 0
+c
+d 1013 1 0 0 0
+c
+d 18 1 0 1 0
+c
+d 19 5 1 0 0
+c
+d 49 7 1 1 0
+c
+d 58 1 0 0 0
+c
+d 977 5 1 0 0
+c
+d 980 1 1 0 0
+c
+d 437 2 0 0 0
+c
+d 496 1 0 0 0
+c
+d 497 3 0 0 0
+c
+d 686 1 0 0 0
+c
+d 689 3 1 0 0
+c
+d 168 1 1 0 0
+c
+d 369 1 0 0 0
+c
+d 370 1 0 0 0
+c
+d 371 2 1 0 0
+c
+d 753 4 1 0 0
+c
+d 66 4 1 0 0
+c
+d 753 1 0 0 0
+c
+d 755 2 0 0 0
+c
+d 756 1 0 0 0
+c
+d 211 4 0 0 0
+c
+d 763 3 1 0 0
+c
+d 973 3 2 0 0
+c
+d 974 1 0 0 0
+c
+d 232 6 1 2 0
+c
+d 694 3 1 0 0
+c
+d 695 2 1 0 0
+c
+d 18 2 0 0 0
+c
+d 999 3 1 0 0
+c
+d 55 2 0 0 0
+c
+d 691 2 0 0 0
+c
+d 703 2 0 0 0
+c
+d 278 1 0 1 0
+c
+d 280 2 0 1 0
+c
+d 281 1 0 0 0
+c
+d 484 4 1 0 0
+c
+d 67 1 0 1 0
+c
+d 68 3 1 0 0
+c
+d 211 1 0 0 0
+c
+d 241 3 0 0 0
+c
+d 1232 2 0 0 0
+c
+d 797 1 1 0 0
+c
+d 799 3 1 0 0
+c
+d 650 3 0 1 0
+c
+d 655 1 0 0 0
+c
+d 658 1 0 0 0
+c
+d 107 6 2 0 0
+c
+d 1185 1 1 0 0
+c
+d 1201 3 1 0 0
+c
+d 65 1 0 0 0
+c
+d 1303 3 1 0 0
+c
+d 1304 1 1 0 0
+c
+d 483 1 1 0 0
+c
+d 487 3 1 0 0
+c
+d 488 1 0 0 0
+c
+d 148 4 1 0 0
+c
+d 1184 1 0 1 0
+c
+d 1185 2 0 0 0
+c
+d 1199 1 1 0 0
+c
+d 1110 4 0 0 0
+c
+d 413 1 0 0 0
+c
+d 419 4 0 0 0
+c
+d 356 2 1 0 0
+c
+d 358 3 1 0 0
+c
+d 695 3 1 0 0
+c
+d 951 1 0 1 0
+c
+d 395 3 0 0 0
+c
+d 396 1 0 1 0
+c
+d 397 1 0 1 0
+c
+d 581 5 1 0 0
+c
+d 66 1 0 1 0
+c
+d 69 3 1 0 0
+c
+d 60 2 1 1 0
+c
+d 225 4 0 0 0
+c
+d 261 4 1 1 0
+c
+d 1226 1 0 0 0
+c
+d 18 1 0 0 0
+c
+d 990 1 0 0 0
+c
+d 999 1 0 1 0
+c
+d 457 5 1 0 0
+c
+d 463 1 1 0 0
+c
+d 718 1 1 0 0
+c
+d 731 2 0 0 0
+c
+d 5 4 1 1 0
+c
+d 591 2 1 1 0
+c
+d 602 4 1 0 0
+c
+d 477 1 0 0 0
+c
+d 478 3 0 0 0
+c
+d 479 1 0 0 0
+c
+d 169 1 0 0 0
+c
+d 377 5 1 0 0
+c
+d 432 4 1 0 0
+c
+d 756 1 1 0 0
+c
+d 763 2 0 0 0
+c
+d 93 4 0 0 0
+c
+d 94 1 0 0 0
+c
+d 18 4 2 0 0
+c
+d 1170 4 1 0 0
+c
+d 1184 1 0 1 0
+c
+d 795 1 0 0 0
+c
+d 820 3 0 0 0
+c
+d 822 1 0 0 0
+c
+d 799 3 1 0 0
+c
+d 919 1 0 0 0
+c
+d 723 1 0 0 0
+c
+d 724 3 1 0 0
+c
+d 419 4 1 1 0
+c
+d 653 5 0 0 0
+c
+d 729 3 0 2 0
+c
+d 437 1 0 0 0
+c
+d 494 1 0 0 0
+c
+d 496 2 0 0 0
+c
+d 1107 1 0 0 0
+c
+d 1109 2 0 0 0
+c
+d 348 1 0 1 0
+c
+d 352 5 1 0 0
+c
+d 580 5 1 0 0
+c
+d 55 2 0 1 0
+c
+d 66 2 1 0 0
+c
+d 67 1 0 1 0
+c
+d 1013 1 0 0 0
+c
+d 1017 2 1 0 0
+c
+d 278 1 1 0 0
+c
+d 1156 4 1 0 0
+c
+d 127 1 0 1 0
+c
+d 130 5 1 0 0
+c
+d 1110 4 0 0 0
+c
+d 1120 1 1 0 0
+c
+d 591 2 0 0 0
+c
+d 595 3 1 0 0
+c
+d 309 1 0 0 0
+c
+d 311 2 0 0 0
+c
+d 327 1 0 0 0
+c
+d 196 1 0 1 0
+c
+d 207 1 0 1 0
+c
+d 1246 2 0 0 0
+c
+d 305 1 1 0 0
+c
+d 1150 4 1 0 0
+c
+d 701 1 0 0 0
+c
+d 712 2 0 0 0
+c
+d 419 4 0 0 0
+c
+d 421 1 0 0 0
+c
+d 434 1 0 0 0
+c
+d 281 4 2 0 0
+c
+d 1192 1 0 0 0
+c
+d 591 2 0 2 0
+c
+d 597 3 0 0 0
+c
+d 56 5 2 0 0
+c
+d 1112 1 0 0 0
+c
+d 1114 3 0 0 0
+c
+d 908 6 1 0 0
+c
+d 291 2 0 0 0
+c
+d 299 1 0 0 0
+c
+d 91 2 1 0 0
+c
+d 1265 1 0 0 0
+c
+d 822 1 1 0 0
+c
+d 823 2 0 0 0
+c
+d 826 2 0 0 0
+c
+d 422 4 0 0 0
+c
+d 720 1 1 0 0
+c
+d 723 2 0 0 0
+c
+d 51 1 1 0 0
+c
+d 52 3 1 0 0
+c
+d 621 1 0 0 0
+c
+d 1034 4 0 0 0
+c
+d 1263 5 0 1 0
+c
+d 905 5 2 0 0
+c
+d 906 1 0 0 0
+c
+d 18 1 0 0 0
+c
+d 95 3 1 0 0
+c
+d 998 1 0 0 0
+c
+d 746 5 1 0 0
+c
+d 157 3 1 0 0
+c
+d 1142 2 0 0 0
+c
+d 146 1 0 1 0
+c
+d 152 3 1 0 0
+c
+d 753 2 0 0 0
+c
+d 859 1 0 0 0
+c
+d 599 4 1 0 0
+c
+d 302 1 0 0 0
+c
+d 1218 3 0 0 0
+c
+d 1219 1 0 0 0
+c
+d 288 4 1 0 0
+c
+d 857 1 0 0 0
+c
+d 860 3 1 0 0
+c
+d 419 4 1 2 0
+c
+d 48 1 0 0 0
+c
+d 49 4 0 0 0
+c
+d 348 2 0 1 0
+c
+d 407 1 1 0 0
+c
+d 662 2 0 0 0
+c
+d 667 4 0 0 0
+c
+d 46 1 1 0 0
+c
+d 47 3 1 0 0
+c
+d 58 1 0 0 0
+c
+d 915 3 1 0 0
+c
+d 916 2 0 0 0
+c
+d 341 1 0 0 0
+c
+d 437 3 0 0 0
+c
+d 262 1 0 0 0
+c
+d 264 4 0 0 0
+c
+d 989 3 1 0 0
+c
+d 995 3 1 0 0
+c
+d 608 2 1 1 0
+c
+d 1037 1 0 0 0
+c
+d 791 2 0 0 0
+c
+d 831 2 0 2 0
+c
+d 301 1 0 1 0
+c
+d 1212 1 0 0 0
+c
+d 1213 2 0 0 0
+c
+d 155 1 0 0 0
+c
+d 156 2 1 0 0
+c
+d 753 4 1 1 0
+c
+d 755 1 0 0 0
+c
+d 101 1 0 1 0
+c
+d 111 2 1 0 0
+c
+d 990 1 0 0 0
+c
+d 994 5 0 0 0
+c
+d 647 2 0 1 0
+c
+d 649 1 0 0 0
+c
+d 655 2 0 0 0
+c
+d 658 1 0 0 0
+c
+d 455 5 1 1 0
+c
+d 618 2 0 0 0
+c
+d 591 2 0 0 0
+c
+d 148 1 0 0 0
+c
+d 149 3 1 0 0
+c
+d 997 4 1 0 0
+c
+d 998 2 1 0 0
+c
+d 622 1 0 0 0
+c
+d 626 1 0 0 0
+c
+d 1114 1 0 0 0
+c
+d 1115 2 0 0 0
+c
+d 1117 1 0 0 0
+c
+d 805 3 1 0 0
+c
+d 915 2 0 1 0
+c
+d 359 1 0 1 0
+c
+d 360 2 1 0 0
+c
+d 364 1 0 1 0
+c
+d 199 4 1 2 0
+c
+d 200 1 0 0 0
+c
+d 905 1 0 0 0
+c
+d 906 3 1 0 0
+c
+d 378 2 0 0 0
+c
+d 1111 4 0 0 0
+c
+d 478 1 1 0 0
+c
+d 480 2 0 0 0
+c
+d 485 4 1 0 0
+c
+d 280 2 0 1 0
+c
+d 1192 2 1 0 0
+c
+d 480 2 1 0 0
+c
+d 481 3 1 0 0
+c
+d 973 3 1 0 0
+c
+d 974 1 1 0 0
+c
+d 146 6 0 0 0
+c
+d 437 3 2 0 0
+c
+d 457 1 0 0 0
+c
+d 196 3 0 0 0
+c
+d 200 2 1 0 0
+c
+d 211 4 1 2 0
+c
+d 662 4 1 0 0
+c
+d 77 1 0 0 0
+c
+d 81 3 1 0 0
+c
+d 82 1 0 0 0
+c
+d 83 1 1 0 0
+c
+d 437 4 1 1 0
+c
+d 787 1 0 1 0
+c
+d 789 2 1 0 0
+c
+d 689 5 1 0 0
+c
+d 19 1 0 1 0
+c
+d 980 6 0 0 0
+c
+d 737 1 0 1 0
+c
+d 846 4 1 1 0
+c
+d 602 3 1 0 0
+c
+d 604 1 0 0 0
+c
+d 799 3 1 0 0
+c
+d 810 2 0 0 0
+c
+d 195 4 1 0 0
+c
+d 206 1 0 0 0
+c
+d 266 2 1 0 0
+c
+d 286 2 0 1 0
+c
+d 718 4 2 0 0
+c
+d 718 3 0 0 0
+c
+d 720 1 0 0 0
+c
+d 291 1 0 1 0
+c
+d 299 3 1 1 0
+c
+d 608 4 1 1 0
+c
+d 318 3 1 0 0
+c
+d 319 1 0 1 0
+c
+d 320 1 1 0 0
+c
+d 575 3 0 0 0
+c
+d 931 1 0 0 0
+c
+d 54 1 0 1 0
+c
+d 719 1 0 0 0
+c
+d 950 4 1 0 0
+c
+d 353 4 1 1 0
+c
+d 1022 4 0 0 0
+c
+d 437 3 0 0 0
+c
+d 719 3 1 0 0
+c
+d 720 1 0 1 0
+c
+d 950 1 0 1 0
+c
+d 1170 4 1 1 0
+c
+d 602 2 0 1 0
+c
+d 575 5 1 1 0
+c
+d 193 1 0 0 0
+c
+d 195 1 0 0 0
+c
+d 622 2 0 1 0
+c
+d 1035 2 1 0 0
+c
+d 915 1 1 0 0
+c
+d 919 4 0 0 0
+c
+d 327 4 0 0 0
+c
+d 650 3 0 0 0
+c
+d 651 3 0 0 0
+c
+d 870 4 0 1 0
+c
+d 871 1 0 1 0
+c
+d 301 1 0 0 0
+c
+d 304 3 0 0 0
+c
+d 60 4 1 0 0
+c
+d 1303 1 1 0 0
+c
+d 111 4 1 0 0
+c
+d 1096 1 0 0 0
+c
+d 288 2 1 0 0
+c
+d 300 1 0 0 0
+c
+d 926 1 1 0 0
+c
+d 927 4 0 0 0
+c
+d 570 1 1 0 0
+c
+d 791 1 0 0 0
+c
+d 793 1 0 0 0
+c
+d 622 4 1 1 0
+c
+d 623 1 0 1 0
+c
+d 720 2 0 2 0
+c
+d 1125 1 0 0 0
+c
+d 1127 2 0 0 0
+c
+d 1185 6 2 0 0
+c
+d 1110 4 0 0 0
+c
+d 1112 1 1 0 0
+c
+d 697 2 1 0 0
+c
+d 951 3 1 0 0
+c
+d 594 1 1 0 0
+c
+d 653 3 1 0 0
+c
+d 111 1 0 0 0
+c
+d 113 2 1 0 0
+c
+d 146 1 0 1 0
+c
+d 1110 3 0 1 0
+c
+d 1001 3 1 0 0
+c
+d 1003 1 0 1 0
+c
+d 477 1 0 0 0
+c
+d 478 1 1 0 0
+c
+d 486 2 1 0 0
+c
+d 218 3 0 0 0
+c
+d 411 1 0 0 0
+c
+d 412 2 1 0 0
+c
+d 735 5 1 1 0
+c
+d 437 1 0 0 0
+c
+d 457 5 1 0 0
+c
+d 437 2 0 1 0
+c
+d 463 3 0 1 0
+c
+d 101 3 1 0 0
+c
+d 111 2 0 0 0
+c
+d 252 2 0 0 0
+c
+d 259 1 0 0 0
+c
+d 211 5 1 0 0
+c
+d 78 4 2 0 0
+c
+d 79 1 0 0 0
+c
+d 57 3 1 0 0
+c
+d 59 1 1 0 0
+c
+d 594 1 1 0 0
+c
+d 686 4 0 0 0
+c
+d 301 4 0 1 0
+c
+d 304 1 0 1 0
+c
+d 425 3 2 0 0
+c
+d 426 1 0 0 0
+c
+d 68 1 0 1 0
+c
+d 69 3 1 0 0
+c
+d 205 1 1 0 0
+c
+d 206 1 0 0 0
+c
+d 208 4 1 0 0
+c
+d 130 2 0 0 0
+c
+d 1259 3 1 0 0
+c
+d 799 6 2 0 0
+c
+d 424 1 0 1 0
+c
+d 591 3 1 0 0
+c
+d 592 1 0 1 0
+c
+d 650 1 0 0 0
+c
+d 658 1 0 1 0
+c
+d 661 1 0 1 0
+c
+d 1150 2 0 0 0
+c
+d 1153 2 1 0 0
+c
+d 557 5 0 1 0
+c
+d 301 5 1 0 0
+c
+d 1153 1 0 0 0
+c
+d 212 1 0 0 0
+c
+d 213 3 1 0 0
+c
+d 214 1 1 0 0
+c
+d 599 4 2 0 0
+c
+d 602 1 0 0 0
+c
+d 599 2 1 0 0
+c
+d 618 1 0 0 0
+c
+d 638 1 1 0 0
+c
+d 7 1 0 1 0
+c
+d 10 1 0 0 0
+c
+d 1269 2 1 0 0
+c
+d 156 1 0 0 0
+c
+d 157 4 0 0 0
+c
+d 718 3 1 0 0
+c
+d 719 1 0 1 0
+c
+d 574 3 2 0 0
+c
+d 795 1 0 0 0
+c
+d 795 5 0 0 0
+c
+d 796 1 0 0 0
+c
+d 211 4 1 0 0
+c
+d 215 1 1 0 0
+c
+d 1165 5 1 0 0
+c
+d 54 3 0 0 0
+c
+d 904 4 1 0 0
+c
+d 905 1 0 1 0
+c
+d 906 1 1 0 0
+c
+d 1184 1 0 0 0
+c
+d 1199 1 0 1 0
+c
+d 1200 2 1 0 0
+c
+d 199 1 0 0 0
+c
+d 200 2 1 0 0
+c
+d 201 1 0 0 0
+c
+d 511 5 0 2 0
+c
+d 204 6 2 0 0
+c
+d 457 4 1 1 0
+c
+d 52 1 1 0 0
+c
+d 54 1 0 0 0
+c
+d 54 5 1 0 0
+c
+d 970 1 1 0 0
+c
+d 972 4 1 0 0
+c
+d 753 4 0 0 0
+c
+d 797 4 1 1 0
+c
+d 718 3 1 1 0
+c
+d 889 1 0 1 0
+c
+d 890 3 1 0 0
+c
+d 891 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 109 3 0 0 0
+c
+d 110 1 0 0 0
+c
+d 413 4 1 0 0
+c
+d 418 2 1 0 0
+c
+d 748 1 0 1 0
+c
+d 894 4 1 0 0
+c
+d 60 1 0 0 0
+c
+d 62 3 1 0 0
+c
+d 146 5 1 0 0
+c
+d 557 1 0 0 0
+c
+d 1058 5 0 0 0
+c
+d 305 1 1 0 0
+c
+d 353 5 1 0 0
+c
+d 634 2 1 0 0
+c
+d 635 1 0 0 0
+c
+d 686 4 1 1 0
+c
+d 882 4 1 0 0
+c
+d 886 2 0 1 0
+c
+d 437 2 0 0 0
+c
+d 439 2 0 0 0
+c
+d 574 5 0 0 0
+c
+d 926 4 0 0 0
+c
+d 927 1 0 0 0
+c
+d 471 2 1 0 0
+c
+d 472 2 1 0 0
+c
+d 475 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 445 1 0 0 0
+c
+d 799 4 1 0 0
+c
+d 810 1 0 0 0
+c
+d 437 1 0 1 0
+c
+d 439 1 0 1 0
+c
+d 441 1 0 0 0
+c
+d 1194 4 1 0 0
+c
+d 752 5 0 1 0
+c
+d 437 2 1 0 0
+c
+d 443 3 1 0 0
+c
+d 444 1 0 0 0
+c
+d 990 1 0 0 0
+c
+d 994 5 2 0 0
+c
+d 578 5 2 0 0
+c
+d 146 3 1 0 0
+c
+d 234 1 1 0 0
+c
+d 743 1 0 0 0
+c
+d 744 1 0 0 0
+c
+d 436 3 1 0 0
+c
+d 280 3 2 0 0
+c
+d 281 1 0 0 0
+c
+d 621 1 0 0 0
+c
+d 622 1 0 1 0
+c
+d 1034 3 1 0 0
+c
+d 1115 4 1 0 0
+c
+d 218 3 0 0 0
+c
+d 1235 1 1 0 0
+c
+d 973 1 0 0 0
+c
+d 975 4 1 0 0
+c
+d 976 2 1 0 0
+c
+d 418 3 0 0 0
+c
+d 1087 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 498 5 0 0 0
+c
+d 915 4 1 1 0
+c
+d 916 1 1 0 0
+c
+d 378 1 0 0 0
+c
+d 1111 2 0 0 0
+c
+d 1112 1 0 0 0
+c
+d 59 5 1 0 0
+c
+d 155 2 0 2 0
+c
+d 221 2 0 0 0
+c
+d 806 1 0 0 0
+c
+d 910 3 1 0 0
+c
+d 436 1 0 1 0
+c
+d 578 1 0 0 0
+c
+d 1043 4 1 0 0
+c
+d 261 1 0 0 0
+c
+d 283 1 0 0 0
+c
+d 284 2 0 0 0
+c
+d 168 1 0 0 0
+c
+d 369 4 1 0 0
+c
+d 211 3 2 0 0
+c
+d 212 1 0 0 0
+c
+d 294 3 1 0 0
+c
+d 578 2 1 0 0
+c
+d 580 1 0 0 0
+c
+d 204 1 0 1 0
+c
+d 217 1 0 1 0
+c
+d 1241 1 0 0 0
+c
+d 155 1 0 0 0
+c
+d 156 1 0 0 0
+c
+d 395 2 0 0 0
+c
+d 396 3 0 1 0
+c
+d 51 1 0 0 0
+c
+d 57 2 1 0 0
+c
+d 686 4 1 0 0
+c
+d 67 1 0 0 0
+c
+d 68 3 1 1 0
+c
+d 301 1 0 1 0
+c
+d 302 1 0 1 0
+c
+d 1218 4 0 0 0
+c
+d 211 1 0 0 0
+c
+d 212 3 1 0 0
+c
+d 213 1 0 1 0
+c
+d 570 3 0 0 0
+c
+d 618 1 0 0 0
+c
+d 634 5 0 0 0
+c
+d 599 4 1 0 0
+c
+d 862 1 0 1 0
+c
+d 863 3 0 1 0
+c
+d 799 3 1 0 0
+c
+d 809 1 0 1 0
+c
+d 933 1 0 0 0
+c
+d 305 1 0 0 0
+c
+d 353 3 1 0 0
+c
+d 578 1 0 0 0
+c
+d 580 2 1 0 0
+c
+d 581 1 1 0 0
+c
+d 1168 1 0 0 0
+c
+d 1170 3 1 0 0
+c
+d 1194 4 0 1 0
+c
+d 1205 1 0 0 0
+c
+d 437 4 0 1 0
+c
+d 497 1 0 0 0
+c
+d 46 3 1 0 0
+c
+d 775 1 1 0 0
+c
+d 1314 1 0 0 0
+c
+d 111 2 1 0 0
+c
+d 146 2 0 0 0
+c
+d 1262 1 0 0 0
+c
+d 822 1 0 0 0
+c
+d 823 2 0 0 0
+c
+d 826 1 0 0 0
+c
+d 575 3 1 0 0
+c
+d 796 2 1 0 0
+c
+d 301 6 0 0 0
+c
+d 602 2 0 1 0
+c
+d 604 2 1 0 0
+c
+d 301 5 2 0 0
+c
+d 719 2 1 0 0
+c
+d 720 1 0 1 0
+c
+d 949 1 0 0 0
+c
+d 253 6 1 0 0
+c
+d 475 1 0 0 0
+c
+d 476 4 1 0 0
+c
+d 478 1 0 1 0
+c
+d 570 4 2 0 0
+c
+d 878 2 1 0 0
+c
+d 959 1 0 0 0
+c
+d 960 2 0 0 0
+c
+d 961 1 0 1 0
+c
+d 156 1 0 0 0
+c
+d 157 2 0 0 0
+c
+d 437 4 2 0 0
+c
+d 463 1 0 0 0
+c
+d 686 3 1 1 0
+c
+d 691 1 0 0 0
+c
+d 1185 5 2 0 0
+c
+d 835 3 1 1 0
+c
+d 836 1 0 0 0
+c
+d 96 1 0 0 0
+c
+d 98 2 0 0 0
+c
+d 301 4 0 0 0
+c
+d 1150 1 0 0 0
+c
+d 443 3 0 0 0
+c
+d 449 1 0 0 0
+c
+d 466 1 1 0 0
+c
+d 467 5 1 0 0
+c
+d 55 1 0 1 0
+c
+d 693 4 1 0 0
+c
+d 694 1 0 0 0
+c
+d 592 4 2 0 0
+c
+d 806 4 1 1 0
+c
+d 1043 2 1 0 0
+c
+d 1045 1 0 0 0
+c
+d 1046 2 0 0 0
+c
+d 286 5 1 1 0
+c
+d 666 2 0 0 0
+c
+d 673 1 0 0 0
+c
+d 51 1 0 0 0
+c
+d 56 3 1 1 0
+c
+d 262 4 1 1 0
+c
+d 270 1 0 0 0
+c
+d 748 3 1 0 0
+c
+d 152 1 0 1 0
+c
+d 153 4 0 0 0
+c
+d 507 4 1 1 0
+c
+d 756 1 1 0 0
+c
+d 763 3 1 0 0
+c
+d 942 1 0 0 0
+c
+d 726 5 1 0 0
+c
+d 727 1 0 0 0
+c
+d 795 1 0 0 0
+c
+d 820 4 0 0 0
+c
+d 288 2 0 1 0
+c
+d 1221 2 1 0 0
+c
+d 1222 2 0 0 0
+c
+d 52 5 2 0 0
+c
+d 418 1 0 0 0
+c
+d 1087 2 0 0 0
+c
+d 1093 1 0 0 0
+c
+d 199 5 0 0 0
+c
+d 1 1 0 0 0
+c
+d 5 1 0 0 0
+c
+d 17 2 1 0 0
+c
+d 18 1 1 0 0
+c
+d 855 4 1 1 0
+c
+d 218 3 0 2 0
+c
+d 1235 2 0 0 0
+c
+d 699 3 1 0 0
+c
+d 716 2 1 0 0
+c
+d 811 2 0 0 0
+c
+d 812 1 0 0 0
+c
+d 622 1 0 0 0
+c
+d 1008 1 0 0 0
+c
+d 606 1 0 0 0
+c
+d 618 2 0 0 0
+c
+d 965 1 0 0 0
+c
+d 444 3 0 0 0
+c
+d 446 1 0 1 0
+c
+d 218 4 1 1 0
+c
+d 796 1 0 0 0
+c
+d 797 2 1 0 0
+c
+d 1008 2 0 0 0
+c
+d 1009 3 1 0 0
+c
+d 101 2 1 0 0
+c
+d 112 1 0 0 0
+c
+d 608 1 1 0 0
+c
+d 904 5 1 1 0
+c
+d 699 3 1 0 0
+c
+d 800 1 0 0 0
+c
+d 159 3 1 0 0
+c
+d 152 4 1 0 0
+c
+d 1096 1 1 0 0
+c
+d 49 5 0 0 0
+c
+d 686 3 0 0 0
+c
+d 565 3 1 1 0
+c
+d 568 1 0 0 0
+c
+d 1087 5 0 1 0
+c
+d 21 5 0 2 0
+c
+d 745 1 0 0 0
+c
+d 746 3 0 0 0
+c
+d 18 4 1 1 0
+c
+d 437 5 1 1 0
+c
+d 650 5 0 0 0
+c
+d 656 1 0 1 0
+c
+d 437 5 1 2 0
+c
+d 218 3 1 0 0
+c
+d 1235 2 0 0 0
+c
+d 610 4 1 0 0
+c
+d 612 1 0 0 0
+c
+d 304 1 0 0 0
+c
+d 310 1 0 0 0
+c
+d 618 4 0 0 0
+c
+d 620 1 0 0 0
+c
+d 54 7 1 0 0
+c
+d 304 4 0 0 0
+c
+d 802 4 1 0 0
+c
+d 803 1 0 1 0
+c
+d 315 1 1 0 0
+c
+d 316 1 0 0 0
+c
+d 317 4 1 0 0
+c
+d 278 5 1 0 0
+c
+d 280 2 0 2 0
+c
+d 1163 3 0 0 0
+c
+d 288 3 1 0 0
+c
+d 796 1 0 0 0
+c
+d 799 1 1 0 0
+c
+d 811 3 1 0 0
+c
+d 813 1 0 0 0
+c
+d 411 2 1 0 0
+c
+d 413 1 0 0 0
+c
+d 419 1 0 1 0
+c
+d 618 3 0 0 0
+c
+d 990 4 2 0 0
+c
+d 1096 1 0 0 0
+c
+d 1097 4 0 0 0
+c
+d 155 2 0 1 0
+c
+d 56 1 0 0 0
+c
+d 1303 3 0 0 0
+c
+d 218 2 1 0 0
+c
+d 1236 3 0 0 0
+c
+d 155 1 0 0 0
+c
+d 156 4 1 1 0
+c
+d 52 2 0 1 0
+c
+d 53 2 1 0 0
+c
+d 599 4 0 1 0
+c
+d 208 4 1 0 0
+c
+d 211 1 0 0 0
+c
+d 340 1 0 1 0
+c
+d 491 1 0 0 0
+c
+d 492 4 1 0 0
+c
+d 153 3 1 0 0
+c
+d 204 1 0 1 0
+c
+d 228 1 0 0 0
+c
+d 213 4 0 0 0
+c
+d 803 5 1 1 0
+c
+d 505 5 0 2 0
+c
+d 400 5 0 0 0
+c
+d 403 2 0 0 0
+c
+d 594 3 0 0 0
+c
+d 1042 2 0 0 0
+c
+d 146 3 2 0 0
+c
+d 150 1 0 0 0
+c
+d 242 1 0 0 0
+c
+d 246 1 0 0 0
+c
+d 301 1 0 1 0
+c
+d 1156 1 0 1 0
+c
+d 31 5 0 0 0
+c
+d 965 1 0 1 0
+c
+d 970 3 1 0 0
+c
+d 971 2 0 0 0
+c
+d 990 3 1 1 0
+c
+d 991 1 0 0 0
+c
+d 992 1 0 0 0
+c
+d 185 1 0 0 0
+c
+d 186 3 1 1 0
+c
+d 304 3 0 0 0
+c
+d 305 1 0 0 0
+c
+d 813 3 0 0 0
+c
+d 815 2 0 0 0
+c
+d 816 1 0 0 0
+c
+d 499 4 0 0 0
+c
+d 500 2 1 0 0
+c
+d 242 4 2 0 0
+c
+d 437 1 0 0 0
+c
+d 449 2 0 0 0
+c
+d 167 3 1 1 0
+c
+d 153 1 0 0 0
+c
+d 155 1 0 0 0
+c
+d 620 1 0 0 0
+c
+d 632 3 0 0 0
+c
+d 424 3 1 1 0
+c
+d 836 3 1 1 0
+c
+d 839 1 0 0 0
+c
+d 738 2 0 0 0
+c
+d 854 1 0 0 0
+c
+d 763 4 0 0 0
+c
+d 942 2 0 0 0
+c
+d 1109 3 0 0 0
+c
+d 557 3 0 0 0
+c
+d 565 1 0 1 0
+c
+d 1058 1 0 1 0
+c
+d 437 1 0 0 0
+c
+d 453 3 0 0 0
+c
+d 989 2 1 0 0
+c
+d 995 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 457 1 1 0 0
+c
+d 463 2 0 1 0
+c
+d 65 2 0 1 0
+c
+d 1303 3 1 0 0
+c
+d 829 3 0 0 0
+c
+d 716 4 1 1 0
+c
+d 718 1 0 1 0
+c
+d 196 2 0 0 0
+c
+d 200 1 0 0 0
+c
+d 437 3 1 1 0
+c
+d 453 1 0 1 0
+c
+d 718 6 2 0 0
+c
+d 18 7 1 0 0
+c
+d 348 5 1 2 0
+c
+d 54 1 0 0 0
+c
+d 66 4 1 1 0
+c
+d 482 7 1 0 0
+c
+d 753 2 0 0 0
+c
+d 755 1 0 0 0
+c
+d 763 4 1 0 0
+c
+d 768 1 1 0 0
+c
+d 919 1 0 1 0
+c
+d 922 2 0 1 0
+c
+d 455 1 0 0 0
+c
+d 457 4 0 2 0
+c
+d 168 1 0 0 0
+c
+d 169 1 1 0 0
+c
+d 373 1 0 0 0
+c
+d 375 1 0 0 0
+c
+d 148 2 0 1 0
+c
+d 259 3 1 0 0
+c
+d 457 1 0 0 0
+c
+d 466 1 0 0 0
+c
+d 467 3 0 0 0
+c
+d 195 1 0 0 0
+c
+d 205 1 0 0 0
+c
+d 206 3 0 0 0
+c
+d 157 4 0 0 0
+c
+d 1168 3 0 0 0
+c
+d 1177 1 0 0 0
+c
+d 301 2 0 0 0
+c
+d 1212 2 0 0 0
+c
+d 46 1 0 0 0
+c
+d 775 3 1 0 0
+c
+d 49 5 1 0 0
+c
+d 861 4 0 0 0
+c
+d 502 3 1 0 0
+c
+d 1008 3 1 1 0
+c
+d 1009 1 0 0 0
+c
+d 1010 1 0 1 0
+c
+d 1110 3 0 0 0
+c
+d 1120 1 0 0 0
+c
+d 701 4 2 0 0
+c
+d 712 1 0 0 0
+c
+d 60 1 0 1 0
+c
+d 62 3 1 0 0
+c
+d 63 1 0 0 0
+c
+d 299 5 1 0 0
+c
+d 300 1 0 0 0
+c
+d 315 1 1 0 0
+c
+d 436 2 0 0 0
+c
+d 437 1 0 0 0
+c
+d 437 2 1 0 0
+c
+d 1185 4 1 0 0
+c
+d 718 4 0 1 0
+c
+d 946 1 0 1 0
+c
+d 1202 3 1 1 0
+c
+d 471 2 1 0 0
+c
+d 473 2 0 1 0
+c
+d 10 1 0 1 0
+c
+d 1269 4 1 0 0
+c
+d 1113 3 0 0 0
+c
+d 1116 1 0 0 0
+c
+d 1119 1 0 1 0
+c
+d 217 4 1 1 0
+c
+d 341 4 1 0 0
+c
+d 342 1 0 0 0
+c
+d 355 3 1 0 0
+c
+d 356 2 1 0 0
+c
+d 757 2 0 0 0
+c
+d 758 1 0 0 0
+c
+d 763 1 0 0 0
+c
+d 443 5 0 1 0
+c
+d 444 1 0 1 0
+c
+d 453 1 0 0 0
+c
+d 455 3 1 1 0
+c
+d 18 3 0 0 0
+c
+d 93 1 0 0 0
+c
+d 453 3 1 0 0
+c
+d 455 1 0 1 0
+c
+d 1043 3 0 0 0
+c
+d 1045 1 0 0 0
+c
+d 1046 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 568 2 1 0 0
+c
+d 569 3 1 0 0
+c
+d 1192 1 0 1 0
+c
+d 1194 1 0 1 0
+c
+d 1205 3 0 0 0
+c
+d 1 4 2 0 0
+c
+d 262 5 0 2 0
+c
+d 293 1 0 0 0
+c
+d 716 1 0 1 0
+c
+d 844 3 1 0 0
+c
+d 428 2 0 0 0
+c
+d 400 4 0 0 0
+c
+d 408 2 0 2 0
+c
+d 1315 2 1 0 0
+c
+d 1316 3 1 0 0
+c
+d 1317 3 0 0 0
+c
+d 146 1 0 0 0
+c
+d 152 3 0 1 0
+c
+d 153 1 0 0 0
+c
+d 6 1 0 1 0
+c
+d 12 2 0 1 0
+c
+d 1163 3 1 0 0
+c
+d 301 3 1 0 0
+c
+d 1154 2 0 0 0
+c
+d 667 1 1 0 0
+c
+d 668 2 1 0 0
+c
+d 669 1 0 0 0
+c
+d 418 3 0 0 0
+c
+d 185 4 1 0 0
+c
+d 188 2 1 0 0
+c
+d 341 1 0 0 0
+c
+d 348 3 1 1 0
+c
+d 272 4 1 0 0
+c
+d 146 1 1 0 0
+c
+d 238 1 0 0 0
+c
+d 239 4 1 0 0
+c
+d 1150 1 0 0 0
+c
+d 1153 1 0 0 0
+c
+d 218 3 1 0 0
+c
+d 220 1 0 0 0
+c
+d 1243 1 0 0 0
+c
+d 1008 3 0 0 0
+c
+d 1013 1 0 0 0
+c
+d 737 5 2 0 0
+c
+d 54 3 0 2 0
+c
+d 575 3 0 0 0
+c
+d 578 1 0 0 0
+c
+d 930 1 1 0 0
+c
+d 393 3 0 0 0
+c
+d 395 1 0 0 0
+c
+d 436 2 0 0 0
+c
+d 437 1 0 0 0
+c
+d 1235 1 1 0 0
+c
+d 1237 5 1 0 0
+c
+d 55 1 0 1 0
+c
+d 69 4 0 1 0
+c
+d 191 1 0 0 0
+c
+d 192 2 0 0 0
+c
+d 719 2 0 0 0
+c
+d 720 1 0 0 0
+c
+d 55 2 1 0 0
+c
+d 691 1 0 1 0
+c
+d 694 1 0 1 0
+c
+d 91 5 1 0 0
+c
+d 965 1 1 0 0
+c
+d 968 3 1 0 0
+c
+d 970 1 0 0 0
+c
+d 1153 4 1 0 0
+c
+d 225 1 0 1 0
+c
+d 226 1 0 0 0
+c
+d 227 2 1 0 0
+c
+d 242 1 0 0 0
+c
+d 243 3 0 0 0
+c
+d 823 1 0 0 0
+c
+d 826 1 0 0 0
+c
+d 827 1 0 0 0
+c
+d 49 4 1 0 0
+c
+d 348 3 1 0 0
+c
+d 363 3 0 0 0
+c
+d 418 1 0 0 0
+c
+d 419 3 0 0 0
+c
+d 421 1 0 0 0
+c
+d 18 2 1 0 0
+c
+d 30 3 1 0 0
+c
+d 22 4 1 1 0
+c
+d 23 1 0 1 0
+c
+d 49 5 1 1 0
+c
+d 101 4 1 0 0
+c
+d 168 4 0 0 0
+c
+d 170 1 0 0 0
+c
+d 511 2 1 0 0
+c
+d 520 4 1 0 0
+c
+d 1168 3 1 1 0
+c
+d 1169 1 0 1 0
+c
+d 806 1 0 1 0
+c
+d 807 1 0 0 0
+c
+d 906 2 1 0 0
+c
+d 908 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 599 3 0 0 0
+c
+d 93 1 0 0 0
+c
+d 127 3 0 0 0
+c
+d 101 4 2 0 0
+c
+d 437 1 0 1 0
+c
+d 443 2 1 0 0
+c
+d 444 1 0 1 0
+c
+d 1009 2 0 0 0
+c
+d 1012 1 0 0 0
+c
+d 90 1 0 1 0
+c
+d 117 4 0 0 0
+c
+d 578 4 1 1 0
+c
+d 629 4 0 0 0
+c
+d 16 1 0 1 0
+c
+d 17 2 1 0 0
+c
+d 93 2 0 0 0
+c
+d 608 5 2 0 0
+c
+d 618 5 1 0 0
+c
+d 638 1 0 1 0
+c
+d 287 4 1 0 0
+c
+d 288 1 0 1 0
+c
+d 1221 1 0 0 0
+c
+d 148 2 0 0 0
+c
+d 127 3 1 1 0
+c
+d 129 1 0 0 0
+c
+d 811 1 0 0 0
+c
+d 815 4 0 0 0
+c
+d 594 1 0 0 0
+c
+d 651 3 0 0 0
+c
+d 719 4 0 2 0
+c
+d 19 3 0 0 0
+c
+d 981 1 0 0 0
+c
+d 471 1 0 0 0
+c
+d 473 3 1 0 0
+c
+d 162 4 2 0 0
+c
+d 360 1 0 0 0
+c
+d 1168 1 0 1 0
+c
+d 1169 1 0 0 0
+c
+d 1170 1 0 0 0
+c
+d 1210 1 1 0 0
+c
+d 811 2 0 0 0
+c
+d 815 1 0 0 0
+c
+d 49 1 0 0 0
+c
+d 734 5 1 0 0
+c
+d 437 1 0 1 0
+c
+d 574 3 0 0 0
+c
+d 575 1 0 1 0
+c
+d 1097 1 0 0 0
+c
+d 1098 2 0 2 0
+c
+d 1099 1 0 0 0
+c
+d 580 1 1 0 0
+c
+d 584 3 1 0 0
+c
+d 582 1 0 0 0
+c
+d 584 1 1 0 0
+c
+d 586 3 1 0 0
+c
+d 188 1 0 1 0
+c
+d 211 1 0 1 0
+c
+d 212 3 0 0 0
+c
+d 615 4 1 1 0
+c
+d 716 5 1 0 0
+c
+d 926 5 1 0 0
+c
+d 455 4 1 1 0
+c
+d 638 5 0 1 0
+c
+d 69 1 0 0 0
+c
+d 70 3 0 0 0
+c
+d 650 1 1 0 0
+c
+d 384 5 1 0 0
+c
+d 385 1 0 0 0
+c
+d 1112 5 1 0 0
+c
+d 262 1 0 0 0
+c
+d 264 2 0 0 0
+c
+d 457 5 1 0 0
+c
+d 926 5 0 0 0
+c
+d 393 4 0 0 0
+c
+d 418 5 0 0 0
+c
+d 353 3 1 0 0
+c
+d 355 2 1 0 0
+c
+d 93 3 0 0 0
+c
+d 95 3 0 0 0
+c
+d 96 1 1 0 0
+c
+d 591 6 0 0 0
+c
+d 753 1 0 1 0
+c
+d 755 3 0 1 0
+c
+d 764 1 0 0 0
+c
+d 55 4 1 1 0
+c
+d 66 1 0 1 0
+c
+d 691 6 2 0 0
+c
+d 470 1 0 1 0
+c
+d 477 3 0 1 0
+c
+d 479 1 0 0 0
+c
+d 437 6 0 1 0
+c
+d 1110 1 0 0 0
+c
+d 1115 2 0 2 0
+c
+d 720 5 1 0 0
+c
+d 721 1 0 0 0
+c
+d 18 1 0 1 0
+c
+d 78 1 0 0 0
+c
+d 79 2 0 0 0
+c
+d 84 1 0 0 0
+c
+d 51 1 0 0 0
+c
+d 56 1 0 0 0
+c
+d 1309 3 0 0 0
+c
+d 384 2 0 2 0
+c
+d 385 2 0 0 0
+c
+d 13 2 0 0 0
+c
+d 14 1 0 1 0
+c
+d 341 4 1 0 0
+c
+d 345 1 0 0 0
+c
+d 507 4 1 0 0
+c
+d 400 2 0 2 0
+c
+d 408 1 0 0 0
+c
+d 437 3 0 0 0
+c
+d 156 2 1 0 0
+c
+d 406 3 1 0 0
+c
+d 378 1 0 0 0
+c
+d 1112 2 0 0 0
+c
+d 29 2 0 1 0
+c
+d 31 3 1 1 0
+c
+d 574 2 0 0 0
+c
+d 795 3 0 0 0
+c
+d 447 3 1 0 0
+c
+d 591 4 0 0 0
+c
+d 1185 3 1 1 0
+c
+d 1202 1 0 0 0
+c
+d 353 4 1 1 0
+c
+d 1107 3 0 0 0
+c
+d 1109 1 0 1 0
+c
+d 1110 1 0 1 0
+c
+d 557 2 0 0 0
+c
+d 565 2 1 0 0
+c
+d 437 5 2 0 0
+c
+d 511 4 0 1 0
+c
+d 715 2 0 1 0
+c
+d 716 3 1 1 0
+c
+d 437 2 1 1 0
+c
+d 569 2 0 0 0
+c
+d 1163 4 1 0 0
+c
+d 286 4 2 0 0
+c
+d 291 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 1094 3 0 0 0
+c
+d 1095 1 0 0 0
+c
+d 353 1 1 0 0
+c
+d 1138 1 0 0 0
+c
+d 1139 2 1 0 0
+c
+d 341 1 0 0 0
+c
+d 423 1 0 0 0
+c
+d 301 2 0 0 0
+c
+d 302 4 0 0 0
+c
+d 101 1 0 1 0
+c
+d 610 3 0 1 0
+c
+d 612 1 0 0 0
+c
+d 613 1 0 0 0
+c
+d 718 5 0 0 0
+c
+d 638 2 0 0 0
+c
+d 906 1 0 0 0
+c
+d 908 5 2 0 0
+c
+d 213 4 2 0 0
+c
+d 242 1 0 0 0
+c
+d 1114 1 0 0 0
+c
+d 1115 2 0 0 0
+c
+d 1117 2 0 0 0
+c
+d 471 1 0 1 0
+c
+d 472 2 1 0 0
+c
+d 475 2 0 1 0
+c
+d 47 1 1 0 0
+c
+d 48 4 0 0 0
+c
+d 16 4 2 0 0
+c
+d 90 1 0 0 0
+c
+d 162 4 1 0 0
+c
+d 360 2 1 0 0
+c
+d 305 1 0 0 0
+c
+d 353 2 0 0 0
+c
+d 1138 1 0 0 0
+c
+d 749 2 0 0 0
+c
+d 751 1 1 0 0
+c
+d 217 2 0 0 0
+c
+d 220 1 0 0 0
+c
+d 241 1 0 0 0
+c
+d 926 3 0 0 0
+c
+d 927 2 1 0 0
+c
+d 758 7 1 0 0
+c
+d 1237 1 1 0 0
+c
+d 1239 2 0 0 0
+c
+d 272 2 1 0 0
+c
+d 282 1 0 0 0
+c
+d 494 1 0 0 0
+c
+d 496 2 0 0 0
+c
+d 498 2 1 0 0
+c
+d 7 1 1 0 0
+c
+d 1275 1 0 0 0
+c
+d 1278 2 1 0 0
+c
+d 1283 1 0 0 0
+c
+d 159 3 1 0 0
+c
+d 185 2 0 1 0
+c
+d 90 5 1 0 0
+c
+d 844 3 1 1 0
+c
+d 748 6 2 0 0
+c
+d 406 1 0 1 0
+c
+d 411 3 1 0 0
+c
+d 415 1 0 1 0
+c
+d 93 3 1 1 0
+c
+d 114 1 0 1 0
+c
+d 965 2 0 0 0
+c
+d 973 2 1 0 0
+c
+d 395 2 0 0 0
+c
+d 397 3 0 0 0
+c
+d 101 1 1 0 0
+c
+d 610 4 0 0 0
+c
+d 101 1 0 0 0
+c
+d 608 3 1 0 0
+c
+d 610 1 0 0 0
+c
+d 787 5 1 1 0
+c
+d 152 4 0 2 0
+c
+d 858 4 2 0 0
+c
+d 638 3 0 1 0
+c
+d 262 1 1 0 0
+c
+d 263 1 0 0 0
+c
+d 283 1 0 0 0
+c
+d 799 2 0 0 0
+c
+d 919 1 0 0 0
+c
+d 920 3 0 0 0
+c
+d 574 4 1 1 0
+c
+d 1053 1 0 0 0
+c
+d 343 3 1 1 0
+c
+d 437 1 0 1 0
+c
+d 623 3 1 0 0
+c
+d 625 1 0 0 0
+c
+d 626 1 0 1 0
+c
+d 606 4 1 0 0
+c
+d 799 2 0 0 0
+c
+d 91 4 1 0 0
+c
+d 117 1 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 1192 2 1 1 0
+c
+d 478 3 1 1 0
+c
+d 218 1 0 0 0
+c
+d 1240 2 0 0 0
+c
+d 100 6 1 2 0
+c
+d 1087 4 1 0 0
+c
+d 1088 1 0 0 0
+c
+d 246 1 0 0 0
+c
+d 262 3 0 1 0
+c
+d 265 1 0 1 0
+c
+d 146 5 1 0 0
+c
+d 989 1 0 0 0
+c
+d 990 1 0 0 0
+c
+d 278 3 1 1 0
+c
+d 280 1 0 1 0
+c
+d 84 5 1 0 0
+c
+d 807 3 1 0 0
+c
+d 1067 5 1 0 0
+c
+d 1068 1 0 0 0
+c
+d 858 4 0 2 0
+c
+d 602 1 0 0 0
+c
+d 682 3 0 1 0
+c
+d 683 1 0 1 0
+c
+d 1299 3 1 0 0
+c
+d 1300 2 1 0 0
+c
+d 19 4 1 0 0
+c
+d 983 1 1 0 0
+c
+d 75 3 1 1 0
+c
+d 1298 2 0 0 0
+c
+d 662 4 1 1 0
+c
+d 437 2 1 0 0
+c
+d 439 1 0 0 0
+c
+d 32 2 0 0 0
+c
+d 1318 4 0 0 0
+c
+d 748 4 1 0 0
+c
+d 749 1 1 0 0
+c
+d 634 5 1 0 0
+c
+d 213 4 0 0 0
+c
+d 1043 1 1 0 0
+c
+d 1045 4 1 0 0
+c
+d 132 4 2 0 0
+c
+d 338 1 0 0 0
+c
+d 301 3 0 0 0
+c
+d 858 5 1 0 0
+c
+d 153 1 0 0 0
+c
+d 155 2 1 0 0
+c
+d 156 1 0 1 0
+c
+d 153 1 1 0 0
+c
+d 204 3 1 0 0
+c
+d 1248 1 0 0 0
+c
+d 775 3 0 0 0
+c
+d 412 4 1 0 0
+c
+d 413 2 0 0 0
+c
+d 47 1 1 0 0
+c
+d 49 1 0 0 0
+c
+d 58 1 0 0 0
+c
+d 394 5 1 0 0
+c
+d 569 4 0 0 0
+c
+d 610 4 0 1 0
+c
+d 1096 2 1 0 0
+c
+d 1097 3 0 0 0
+c
+d 1100 1 0 0 0
+c
+d 716 8 2 0 0
+c
+d 49 3 0 1 0
+c
+d 734 1 0 0 0
+c
+d 1022 5 2 0 0
+c
+d 591 5 1 1 0
+c
+d 286 4 1 0 0
+c
+d 572 2 0 1 0
+c
+d 573 1 0 1 0
+c
+d 574 1 0 0 0
+c
+d 146 4 0 1 0
+c
+d 147 1 0 0 0
+c
+d 168 2 0 0 0
+c
+d 169 1 1 0 0
+c
+d 597 1 0 0 0
+c
+d 598 2 0 0 0
+c
+d 599 1 0 0 0
+c
+d 618 6 2 0 0
+c
+d 472 1 1 0 0
+c
+d 473 2 1 0 0
+c
+d 474 1 0 0 0
+c
+d 111 2 0 0 0
+c
+d 1262 1 0 0 0
+c
+d 242 3 0 2 0
+c
+d 21 4 1 0 0
+c
+d 323 5 1 1 0
+c
+d 715 5 1 1 0
+c
+d 418 3 0 0 0
+c
+d 1087 1 0 0 0
+c
+d 407 2 0 0 0
+c
+d 410 4 0 0 0
+c
+d 437 2 0 0 0
+c
+d 470 1 0 0 0
+c
+d 49 1 0 0 0
+c
+d 734 3 0 0 0
+c
+d 168 1 0 0 0
+c
+d 369 2 0 1 0
+c
+d 608 5 0 2 0
+c
+d 384 4 0 0 0
+c
+d 599 3 1 0 0
+c
+d 301 5 1 0 0
+c
+d 264 1 0 1 0
+c
+d 285 2 1 0 0
+c
+d 286 1 0 0 0
+c
+d 796 5 0 2 0
+c
+d 650 3 0 0 0
+c
+d 661 2 1 0 0
+c
+d 286 3 1 0 0
+c
+d 291 1 0 1 0
+c
+d 749 1 0 0 0
+c
+d 855 1 1 0 0
+c
+d 857 2 1 0 0
+c
+d 574 2 0 1 0
+c
+d 795 1 0 1 0
+c
+d 278 4 1 0 0
+c
+d 279 1 0 1 0
+c
+d 54 1 0 1 0
+c
+d 697 2 1 0 0
+c
+d 951 1 0 0 0
+c
+d 954 2 0 0 0
+c
+d 820 5 0 0 0
+c
+d 821 1 1 0 0
+c
+d 592 4 0 0 0
+c
+d 594 1 1 0 0
+c
+d 101 3 1 0 0
+c
+d 111 1 0 0 0
+c
+d 608 1 1 0 0
+c
+d 437 2 1 0 0
+c
+d 445 1 0 0 0
+c
+d 651 3 0 2 0
+c
+d 977 2 0 1 0
+c
+d 981 4 1 0 0
+c
+d 242 5 0 1 0
+c
+d 1013 1 0 0 0
+c
+d 1017 3 1 0 0
+c
+d 1022 1 0 1 0
+c
+d 811 4 2 0 0
+c
+d 913 1 0 0 0
+c
+d 691 1 0 0 0
+c
+d 697 1 1 0 0
+c
+d 699 3 0 0 0
+c
+d 575 2 0 0 0
+c
+d 796 1 0 0 0
+c
+d 1044 1 1 0 0
+c
+d 353 5 1 2 0
+c
+d 457 4 2 0 0
+c
+d 466 1 0 0 0
+c
+d 1008 3 0 0 0
+c
+d 1009 1 0 0 0
+c
+d 565 1 0 1 0
+c
+d 568 2 1 0 0
+c
+d 697 1 0 1 0
+c
+d 717 4 1 0 0
+c
+d 155 1 1 0 0
+c
+d 156 3 0 0 0
+c
+d 157 1 0 0 0
+c
+d 265 2 0 2 0
+c
+d 286 4 0 0 0
+c
+d 753 4 1 0 0
+c
+d 755 1 0 0 0
+c
+d 1188 2 1 0 0
+c
+d 1191 1 0 0 0
+c
+d 1207 1 0 1 0
+c
+d 620 4 0 1 0
+c
+d 634 1 0 1 0
+c
+d 424 1 1 0 0
+c
+d 591 3 1 0 0
+c
+d 595 1 0 0 0
+c
+d 305 1 0 0 0
+c
+d 1141 1 1 0 0
+c
+d 1142 1 0 1 0
+c
+d 734 5 0 0 0
+c
+d 437 2 0 0 0
+c
+d 449 1 0 1 0
+c
+d 217 3 0 0 0
+c
+d 221 2 0 2 0
+c
+d 452 3 1 0 0
+c
+d 453 2 0 0 0
+c
+d 662 6 0 0 0
+c
+d 54 1 0 0 0
+c
+d 1311 1 0 0 0
+c
+d 1312 5 0 0 0
+c
+d 1185 3 1 0 0
+c
+d 1202 1 0 0 0
+c
+d 1204 1 1 0 0
+c
+d 650 3 1 0 0
+c
+d 270 1 0 1 0
+c
+d 272 5 1 0 0
+c
+d 93 1 0 0 0
+c
+d 95 1 0 1 0
+c
+d 1263 1 0 1 0
+c
+d 1264 2 0 0 0
+c
+d 12 4 0 0 0
+c
+d 436 5 2 0 0
+c
+d 437 1 0 0 0
+c
+d 392 1 0 1 0
+c
+d 393 3 0 1 0
+c
+d 395 1 0 0 0
+c
+d 756 1 0 1 0
+c
+d 757 1 0 1 0
+c
+d 763 1 0 0 0
+c
+d 1165 5 1 0 0
+c
+d 91 3 0 0 0
+c
+d 117 2 1 0 0
+c
+d 1110 4 0 2 0
+c
+d 278 3 1 0 0
+c
+d 217 2 1 0 0
+c
+d 220 2 1 0 0
+c
+d 241 1 0 0 0
+c
+d 54 4 1 0 0
+c
+d 55 1 0 1 0
+c
+d 101 3 0 0 0
+c
+d 341 4 0 0 0
+c
+d 715 1 1 0 0
+c
+d 716 3 1 0 0
+c
+d 615 2 0 1 0
+c
+d 616 3 1 0 0
+c
+d 369 3 1 0 0
+c
+d 382 1 0 0 0
+c
+d 157 5 2 0 0
+c
+d 509 2 0 1 0
+c
+d 510 4 1 0 0
+c
+d 358 5 1 0 0
+c
+d 359 1 0 1 0
+c
+d 242 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 143 4 0 0 0
+c
+d 146 2 0 0 0
+c
+d 153 2 0 0 0
+c
+d 734 1 0 1 0
+c
+d 737 3 1 0 0
+c
+d 167 1 0 0 0
+c
+d 369 3 1 0 0
+c
+d 381 1 0 1 0
+c
+d 48 1 0 0 0
+c
+d 939 3 2 0 0
+c
+d 578 1 0 0 0
+c
+d 580 2 1 0 0
+c
+d 146 1 0 0 0
+c
+d 1224 4 1 0 0
+c
+d 278 5 2 0 0
+c
+d 1008 4 0 1 0
+c
+d 1009 1 0 1 0
+c
+d 691 1 1 0 0
+c
+d 802 1 0 0 0
+c
+d 803 3 0 1 0
+c
+d 699 1 0 0 0
+c
+d 715 3 2 0 0
+c
+d 718 4 1 1 0
+c
+d 580 3 1 0 0
+c
+d 686 2 0 1 0
+c
+d 477 1 0 0 0
+c
+d 478 1 0 0 0
+c
+d 208 1 0 1 0
+c
+d 209 5 1 0 0
+c
+d 54 6 2 0 0
+c
+d 826 4 1 1 0
+c
+d 827 1 0 1 0
+c
+d 1045 5 0 1 0
+c
+d 232 5 2 0 0
+c
+d 384 5 0 2 0
+c
+d 340 5 2 0 0
+c
+d 77 4 2 0 0
+c
+d 31 1 0 1 0
+c
+d 32 3 1 0 0
+c
+d 75 2 0 1 0
+c
+d 682 5 0 0 0
+c
+d 618 3 1 0 0
+c
+d 468 4 0 0 0
+c
+d 145 1 0 0 0
+c
+d 146 3 2 0 0
+c
+d 1226 6 2 0 0
+c
+d 111 1 1 0 0
+c
+d 146 3 1 0 0
+c
+d 238 1 0 0 0
+c
+d 608 5 2 0 0
+c
+d 418 5 1 2 0
+c
+d 591 3 1 1 0
+c
+d 602 1 0 1 0
+c
+d 305 3 1 0 0
+c
+d 306 1 0 0 0
+c
+d 353 1 0 1 0
+c
+d 16 4 0 0 0
+c
+d 93 1 0 1 0
+c
+d 419 5 1 1 0
+c
+d 598 1 0 1 0
+c
+d 599 1 0 1 0
+c
+d 565 2 0 0 0
+c
+d 568 1 0 0 0
+c
+d 1058 1 0 0 0
+c
+d 277 5 0 0 0
+c
+d 278 1 0 0 0
+c
+d 800 2 0 0 0
+c
+d 801 2 1 1 0
+c
+d 1008 5 2 0 0
+c
+d 1150 1 0 0 0
+c
+d 1152 3 0 0 0
+c
+d 18 5 2 0 0
+c
+d 69 1 0 1 0
+c
+d 650 3 0 1 0
+c
+d 656 1 0 0 0
+c
+d 568 2 1 0 0
+c
+d 570 1 0 0 0
+c
+d 572 1 0 1 0
+c
+d 281 1 0 0 0
+c
+d 1192 2 1 0 0
+c
+d 1206 1 0 1 0
+c
+d 608 4 1 0 0
+c
+d 1039 1 1 0 0
+c
+d 663 3 1 0 0
+c
+d 665 1 0 0 0
+c
+d 681 2 1 0 0
+c
+d 475 1 0 0 0
+c
+d 476 1 0 0 0
+c
+d 478 1 0 0 0
+c
+d 355 1 0 0 0
+c
+d 356 3 1 0 0
+c
+d 146 1 0 1 0
+c
+d 153 2 0 1 0
+c
+d 185 1 1 0 0
+c
+d 186 3 1 0 0
+c
+d 187 1 0 0 0
+c
+d 620 4 0 0 0
+c
+d 167 1 0 0 0
+c
+d 369 3 0 0 0
+c
+d 1185 5 2 0 0
+c
+d 93 1 0 0 0
+c
+d 95 2 0 0 0
+c
+d 96 1 0 0 0
+c
+d 621 4 1 0 0
+c
+d 437 1 0 0 0
+c
+d 443 3 0 2 0
+c
+d 846 5 2 0 0
+c
+d 847 1 0 0 0
+c
+d 1009 4 0 0 0
+c
+d 437 2 0 0 0
+c
+d 1050 3 0 0 0
+c
+d 294 2 1 0 0
+c
+d 298 1 0 0 0
+c
+d 428 4 0 0 0
+c
+d 734 4 1 0 0
+c
+d 437 5 2 0 0
+c
+d 797 4 1 1 0
+c
+d 480 4 1 0 0
+c
+d 487 1 0 0 0
+c
+d 1021 4 0 0 0
+c
+d 375 1 0 1 0
+c
+d 376 1 1 0 0
+c
+d 730 1 0 0 0
+c
+d 733 2 1 0 0
+c
+d 769 1 1 0 0
+c
+d 889 2 0 0 0
+c
+d 796 1 0 0 0
+c
+d 797 2 0 1 0
+c
+d 155 1 0 0 0
+c
+d 156 3 0 0 0
+c
+d 1195 3 0 1 0
+c
+d 1196 1 0 1 0
+c
+d 575 1 0 1 0
+c
+d 796 2 0 1 0
+c
+d 815 1 0 0 0
+c
+d 799 4 1 0 0
+c
+d 806 1 1 0 0
+c
+d 341 3 0 0 0
+c
+d 344 1 0 0 0
+c
+d 345 1 0 0 0
+c
+d 569 1 0 1 0
+c
+d 572 3 1 0 0
+c
+d 437 3 1 1 0
+c
+d 438 1 0 1 0
+c
+d 851 1 0 0 0
+c
+d 853 4 0 0 0
+c
+d 691 1 0 0 0
+c
+d 699 2 1 0 0
+c
+d 715 1 1 0 0
+c
+d 716 1 0 0 0
+c
+d 262 5 0 1 0
+c
+d 301 6 0 0 0
+c
+d 811 3 0 0 0
+c
+d 575 2 1 0 0
+c
+d 578 3 0 0 0
+c
+d 157 1 0 1 0
+c
+d 353 3 1 1 0
+c
+d 213 2 0 0 0
+c
+d 214 4 0 0 0
+c
+d 591 2 0 0 0
+c
+d 597 2 0 0 0
+c
+d 749 1 0 0 0
+c
+d 751 1 1 0 0
+c
+d 752 1 0 0 0
+c
+d 558 3 1 0 0
+c
+d 620 6 2 0 0
+c
+d 510 1 0 0 0
+c
+d 521 3 1 0 0
+c
+d 522 1 1 0 0
+c
+d 185 3 1 0 0
+c
+d 188 2 1 0 0
+c
+d 1202 3 1 0 0
+c
+d 716 3 2 0 0
+c
+d 718 1 0 0 0
+c
+d 91 5 1 0 0
+c
+d 75 1 0 0 0
+c
+d 80 1 0 0 0
+c
+d 81 3 1 1 0
+c
+d 211 5 1 0 0
+c
+d 216 1 0 0 0
+c
+d 146 5 0 0 0
+c
+d 318 3 1 0 0
+c
+d 323 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 1090 4 0 0 0
+c
+d 691 5 1 0 0
+c
+d 802 1 0 0 0
+c
+d 691 4 1 1 0
+c
+d 699 1 0 0 0
+c
+d 888 4 1 1 0
+c
+d 892 1 0 1 0
+c
+d 1172 1 0 0 0
+c
+d 1185 2 0 0 0
+c
+d 1192 1 1 0 0
+c
+d 511 6 2 0 0
+c
+d 1009 6 1 0 0
+c
+d 146 4 0 0 0
+c
+d 965 2 0 0 0
+c
+d 977 1 0 0 0
+c
+d 591 2 1 0 0
+c
+d 593 4 0 0 0
+c
+d 19 4 1 0 0
+c
+d 979 2 1 0 0
+c
+d 675 5 1 1 0
+c
+d 218 4 2 0 0
+c
+d 219 1 0 0 0
+c
+d 208 2 0 0 0
+c
+d 310 4 0 1 0
+c
+d 92 3 0 0 0
+c
+d 429 2 0 0 0
+c
+d 430 1 0 0 0
+c
+d 30 3 1 0 0
+c
+d 437 1 0 1 0
+c
+d 558 3 1 0 0
+c
+d 395 1 1 0 0
+c
+d 1106 3 0 0 0
+c
+d 1107 1 0 0 0
+c
+d 72 1 0 0 0
+c
+d 622 2 1 0 0
+c
+d 156 1 0 0 0
+c
+d 400 4 0 0 0
+c
+d 806 6 1 1 0
+c
+d 225 3 0 0 0
+c
+d 60 1 0 0 0
+c
+d 1009 3 0 0 0
+c
+d 806 5 1 0 0
+c
+d 811 1 1 0 0
+c
+d 152 4 1 1 0
+c
+d 806 4 1 0 0
+c
+d 807 1 1 0 0
+c
+d 193 4 1 0 0
+c
+d 429 4 0 0 0
+c
+d 1008 3 0 0 0
+c
+d 1009 1 0 0 0
+c
+d 1168 5 0 1 0
+c
+d 1177 1 0 1 0
+c
+d 206 1 1 0 0
+c
+d 208 3 1 0 0
+c
+d 10 2 0 0 0
+c
+d 11 1 0 1 0
+c
+d 513 1 1 0 0
+c
+d 523 4 1 0 0
+c
+d 524 1 0 0 0
+c
+d 715 4 2 0 0
+c
+d 716 1 0 0 0
+c
+d 878 1 0 0 0
+c
+d 882 6 2 0 0
+c
+d 437 5 1 1 0
+c
+d 327 5 1 0 0
+c
+d 348 2 0 0 0
+c
+d 618 3 1 0 0
+c
+d 340 4 1 1 0
+c
+d 19 1 0 0 0
+c
+d 982 1 1 0 0
+c
+d 983 3 1 0 0
+c
+d 168 2 0 0 0
+c
+d 378 1 1 0 0
+c
+d 507 1 0 0 0
+c
+d 1070 1 0 1 0
+c
+d 1071 2 1 0 0
+c
+d 1072 1 0 0 0
+c
+d 278 1 0 0 0
+c
+d 279 2 1 0 0
+c
+d 305 1 0 0 0
+c
+d 392 5 0 0 0
+c
+d 49 1 0 0 0
+c
+d 50 3 1 0 0
+c
+d 1192 1 0 0 0
+c
+d 1195 2 0 0 0
+c
+d 21 1 0 1 0
+c
+d 28 1 0 0 0
+c
+d 29 1 1 0 0
+c
+d 594 5 1 0 0
+c
+d 91 4 0 1 0
+c
+d 1265 2 1 0 0
+c
+d 1020 2 0 0 0
+c
+d 1021 1 0 0 0
+c
+d 30 1 1 0 0
+c
+d 31 4 1 0 0
+c
+d 32 1 0 0 0
+c
+d 156 1 0 0 0
+c
+d 163 2 0 0 0
+c
+d 858 4 1 0 0
+c
+d 859 1 1 0 0
+c
+d 81 1 0 0 0
+c
+d 82 1 0 0 0
+c
+d 156 1 0 0 0
+c
+d 157 3 0 0 0
+c
+d 177 1 0 0 0
+c
+d 493 7 1 0 0
+c
+d 50 1 0 1 0
+c
+d 51 2 0 1 0
+c
+d 795 2 1 0 0
+c
+d 807 1 0 0 0
+c
+d 32 1 0 1 0
+c
+d 1296 3 1 0 0
+c
+d 1297 1 0 0 0
+c
+d 217 1 0 0 0
+c
+d 241 3 0 0 0
+c
+d 247 2 0 0 0
+c
+d 301 2 0 0 0
+c
+d 1156 3 0 2 0
+c
+d 811 6 2 0 0
+c
+d 1115 2 1 0 0
+c
+d 1117 1 0 0 0
+c
+d 1118 3 0 0 0
+c
+d 311 4 0 0 0
+c
+d 846 2 0 0 0
+c
+d 478 1 0 0 0
+c
+d 481 2 1 0 0
+c
+d 484 1 1 0 0
+c
+d 965 5 0 2 0
+c
+d 305 3 1 0 0
+c
+d 353 1 1 0 0
+c
+d 142 1 1 0 0
+c
+d 145 1 0 0 0
+c
+d 1256 1 0 1 0
+c
+d 965 1 1 0 0
+c
+d 970 1 0 0 0
+c
+d 973 1 0 0 0
+c
+d 974 1 0 0 0
+c
+d 650 1 0 0 0
+c
+d 661 2 0 1 0
+c
+d 667 1 0 1 0
+c
+d 822 1 0 0 0
+c
+d 823 3 0 0 0
+c
+d 594 1 0 0 0
+c
+d 673 2 1 0 0
+c
+d 691 4 1 0 0
+c
+d 692 1 1 0 0
+c
+d 359 1 0 0 0
+c
+d 360 2 1 0 0
+c
+d 364 2 1 0 0
+c
+d 348 5 2 0 0
+c
+d 351 1 0 0 0
+c
+d 242 3 2 0 0
+c
+d 244 1 0 0 0
+c
+d 114 2 1 0 0
+c
+d 115 1 0 0 0
+c
+d 18 3 1 0 0
+c
+d 95 1 0 0 0
+c
+d 804 1 0 0 0
+c
+d 915 4 1 0 0
+c
+d 494 2 0 0 0
+c
+d 496 2 0 0 0
+c
+d 498 1 1 0 0
+c
+d 616 5 1 0 0
+c
+d 1315 1 0 0 0
+c
+d 1316 4 0 0 0
+c
+d 1317 1 0 0 0
+c
+d 262 3 0 0 0
+c
+d 264 1 0 0 0
+c
+d 565 1 1 0 0
+c
+d 568 1 0 0 0
+c
+d 1056 1 0 1 0
+c
+d 278 4 1 0 0
+c
+d 279 1 0 0 0
+c
+d 437 3 0 0 0
+c
+d 218 4 0 0 0
+c
+d 220 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 91 4 0 0 0
+c
+d 92 1 0 0 0
+c
+d 437 4 1 0 0
+c
+d 445 1 1 0 0
+c
+d 853 1 0 0 0
+c
+d 861 2 1 1 0
+c
+d 866 2 1 0 0
+c
+d 301 2 1 0 0
+c
+d 1155 3 0 0 0
+c
+d 157 4 1 1 0
+c
+d 355 2 0 0 0
+c
+d 222 3 1 0 0
+c
+d 1233 1 0 0 0
+c
+d 1236 1 0 1 0
+c
+d 384 2 0 0 0
+c
+d 386 3 1 0 0
+c
+d 509 4 2 0 0
+c
+d 517 1 0 0 0
+c
+d 565 4 1 0 0
+c
+d 567 1 0 1 0
+c
+d 494 1 0 1 0
+c
+d 495 4 0 1 0
+c
+d 919 1 0 0 0
+c
+d 924 3 2 0 0
+c
+d 1170 5 1 0 0
+c
+d 597 1 0 1 0
+c
+d 606 3 0 0 0
+c
+d 608 1 0 1 0
+c
+d 793 1 0 1 0
+c
+d 794 4 1 0 0
+c
+d 795 1 0 0 0
+c
+d 153 3 0 0 0
+c
+d 572 1 0 0 0
+c
+d 574 3 1 0 0
+c
+d 795 1 1 0 0
+c
+d 1 1 0 0 0
+c
+d 17 3 1 1 0
+c
+d 826 1 0 0 0
+c
+d 827 2 0 0 0
+c
+d 829 1 0 0 0
+c
+d 437 2 0 0 0
+c
+d 441 1 0 0 0
+c
+d 734 3 1 0 0
+c
+d 737 1 1 0 0
+c
+d 89 1 0 0 0
+c
+d 119 5 0 0 0
+c
+d 1179 2 1 0 0
+c
+d 1183 1 0 1 0
+c
+d 424 4 2 0 0
+c
+d 211 4 2 0 0
+c
+d 301 6 0 1 0
+c
+d 856 5 2 0 0
+c
+d 990 4 0 0 0
+c
+d 572 3 0 2 0
+c
+d 574 1 0 0 0
+c
+d 505 1 0 1 0
+c
+d 514 3 0 0 0
+c
+d 516 1 0 0 0
+c
+d 608 3 1 0 0
+c
+d 1040 4 1 0 0
+c
+d 743 1 0 0 0
+c
+d 744 2 0 0 0
+c
+d 745 1 0 0 0
+c
+d 854 1 1 0 0
+c
+d 855 5 0 0 0
+c
+d 424 4 1 0 0
+c
+d 1079 1 1 0 0
+c
+d 1163 1 0 0 0
+c
+d 1165 4 0 0 0
+c
+d 598 4 0 1 0
+c
+d 301 4 0 1 0
+c
+d 304 1 0 0 0
+c
+d 1158 1 0 0 0
+c
+d 1163 3 0 0 0
+c
+d 446 6 1 0 0
+c
+d 277 3 0 2 0
+c
+d 159 1 0 1 0
+c
+d 185 2 1 0 0
+c
+d 186 3 1 0 0
+c
+d 574 1 1 0 0
+c
+d 1051 4 0 1 0
+c
+d 495 7 0 1 0
+c
+d 811 1 0 0 0
+c
+d 813 1 1 0 0
+c
+d 815 1 0 0 0
+c
+d 816 2 0 0 0
+c
+d 191 5 1 1 0
+c
+d 192 1 0 1 0
+c
+d 478 1 0 0 0
+c
+d 483 1 1 0 0
+c
+d 207 1 1 0 0
+c
+d 208 3 1 0 0
+c
+d 610 1 0 0 0
+c
+d 611 2 1 0 0
+c
+d 612 4 0 0 0
+c
+d 208 5 0 0 0
+c
+d 1244 1 0 0 0
+c
+d 211 1 0 0 0
+c
+d 217 2 0 0 0
+c
+d 18 4 1 0 0
+c
+d 989 1 1 0 0
+c
+d 803 5 1 2 0
+c
+d 1047 4 1 0 0
+c
+d 1048 1 0 1 0
+c
+d 855 3 1 1 0
+c
+d 856 1 0 0 0
+c
+d 906 2 0 0 0
+c
+d 994 1 0 0 0
+c
+d 998 3 2 0 0
+c
+d 507 1 1 0 0
+c
+d 1071 3 1 0 0
+c
+d 1072 1 0 0 0
+c
+d 59 1 0 0 0
+c
+d 60 1 0 0 0
+c
+d 1011 3 0 0 0
+c
+d 498 3 0 1 0
+c
+d 499 1 0 1 0
+c
+d 152 1 1 0 0
+c
+d 153 2 0 0 0
+c
+d 155 1 0 0 0
+c
+d 343 4 1 0 0
+c
+d 437 1 0 1 0
+c
+d 1168 1 0 0 0
+c
+d 1177 4 0 0 0
+c
+d 56 1 0 0 0
+c
+d 65 5 1 0 0
+c
+d 855 1 0 1 0
+c
+d 857 3 1 1 0
+c
+d 620 3 1 0 0
+c
+d 621 1 0 0 0
+c
+d 1036 1 1 0 0
+c
+d 437 2 1 0 0
+c
+d 575 1 0 0 0
+c
+d 1156 4 1 0 0
+c
+d 1160 1 0 0 0
+c
+d 630 5 1 0 0
+c
+d 751 2 0 0 0
+c
+d 761 1 0 0 0
+c
+d 495 3 0 0 0
+c
+d 507 3 1 0 0
+c
+d 1070 2 0 1 0
+c
+d 1023 1 0 0 0
+c
+d 1024 2 0 0 0
+c
+d 1025 1 0 0 0
+c
+d 955 4 0 0 0
+c
+d 956 1 0 1 0
+c
+d 957 1 0 0 0
+c
+d 502 4 1 0 0
+c
+d 505 1 0 0 0
+c
+d 807 3 0 0 0
+c
+d 907 1 0 0 0
+c
+d 272 3 0 0 0
+c
+d 468 4 2 0 0
+c
+d 443 1 0 0 0
+c
+d 444 4 1 0 0
+c
+d 111 1 0 0 0
+c
+d 1091 4 1 0 0
+c
+d 178 4 0 0 0
+c
+d 795 2 1 0 0
+c
+d 815 3 1 0 0
+c
+d 817 1 0 0 0
+c
+d 101 1 1 0 0
+c
+d 111 2 1 0 0
+c
+d 146 1 0 0 0
+c
+d 1 2 0 0 0
+c
+d 17 2 0 0 0
+c
+d 1323 1 0 0 0
+c
+d 54 6 2 0 0
+c
+d 1237 2 1 0 0
+c
+d 1239 4 1 0 0
+c
+d 159 1 0 0 0
+c
+d 178 2 1 0 0
+c
+d 270 1 0 0 0
+c
+d 272 3 0 0 0
+c
+d 427 1 0 0 0
+c
+d 428 3 2 0 0
+c
+d 588 1 0 0 0
+c
+d 93 4 1 1 0
+c
+d 130 1 0 0 0
+c
+d 1258 4 2 0 0
+c
+d 807 2 1 0 0
+c
+d 808 1 0 1 0
+c
+d 899 1 0 0 0
+c
+d 565 3 2 0 0
+c
+d 568 1 0 0 0
+c
+d 1058 1 0 0 0
+c
+d 19 2 0 0 0
+c
+d 1013 1 0 0 0
+c
+d 822 1 0 0 0
+c
+d 823 3 0 0 0
+c
+d 156 3 2 0 0
+c
+d 163 1 0 0 0
+c
+d 400 1 0 0 0
+c
+d 638 6 1 0 0
+c
+d 1156 1 0 0 0
+c
+d 1192 1 0 0 0
+c
+d 1195 1 0 0 0
+c
+d 470 1 0 0 0
+c
+d 475 2 1 0 0
+c
+d 476 1 0 1 0
+c
+d 111 5 1 0 0
+c
+d 26 1 0 1 0
+c
+d 37 4 1 0 0
+c
+d 767 4 0 1 0
+c
+d 863 1 0 1 0
+c
+d 1071 3 2 0 0
+c
+d 1073 1 0 0 0
+c
+d 754 4 1 1 0
+c
+d 608 1 0 0 0
+c
+d 615 3 2 0 0
+c
+d 188 3 0 0 0
+c
+d 212 1 0 0 0
+c
+d 855 7 1 0 0
+c
+d 16 4 1 0 0
+c
+d 93 1 0 1 0
+c
+d 622 1 0 0 0
+c
+d 1008 2 1 0 0
+c
+d 1009 1 0 0 0
+c
+d 815 2 1 0 0
+c
+d 817 3 1 0 0
+c
+d 195 2 1 0 0
+c
+d 205 3 1 0 0
+c
+d 19 4 0 1 0
+c
+d 22 1 0 1 0
+c
+d 419 6 1 0 0
+c
+d 1087 1 0 0 0
+c
+d 1090 1 0 0 0
+c
+d 274 1 0 0 0
+c
+d 277 3 1 0 0
+c
+d 159 1 0 0 0
+c
+d 185 4 0 0 0
+c
+d 621 1 0 1 0
+c
+d 622 2 1 0 0
+c
+d 965 1 0 1 0
+c
+d 423 1 0 1 0
+c
+d 470 4 0 0 0
+c
+d 824 1 0 0 0
+c
+d 836 1 0 0 0
+c
+d 839 1 0 1 0
+c
+d 899 1 1 0 0
+c
+d 392 3 1 0 0
+c
+d 1126 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 162 3 0 0 0
+c
+d 843 3 2 0 0
+c
+d 844 1 0 0 0
+c
+d 373 3 1 0 0
+c
+d 620 5 0 1 0
+c
+d 693 2 1 1 0
+c
+d 695 2 0 0 0
+c
+d 21 6 1 0 0
+c
+d 130 3 1 0 0
+c
+d 1259 2 1 0 0
+c
+d 21 4 0 0 0
+c
+d 22 1 1 0 0
+c
+d 23 1 0 0 0
+c
+d 301 5 0 0 0
+c
+d 608 3 0 0 0
+c
+d 614 1 0 0 0
+c
+d 332 1 0 0 0
+c
+d 333 2 0 0 0
+c
+d 337 2 1 0 0
+c
+d 148 1 0 0 0
+c
+d 238 1 0 0 0
+c
+d 239 3 0 0 0
+c
+d 1295 5 1 0 0
+c
+d 69 1 0 0 0
+c
+d 650 2 0 0 0
+c
+d 591 1 0 0 0
+c
+d 602 2 1 1 0
+c
+d 603 2 0 0 0
+c
+d 842 6 1 1 0
+c
+d 285 1 0 0 0
+c
+d 286 1 0 0 0
+c
+d 199 5 1 0 0
+c
+d 211 1 0 0 0
+c
+d 487 4 0 0 0
+c
+d 168 5 1 0 0
+c
+d 763 2 0 0 0
+c
+d 768 2 0 0 0
+c
+d 773 1 0 0 0
+c
+d 185 2 0 0 0
+c
+d 186 4 0 0 0
+c
+d 188 1 0 0 0
+c
+d 26 6 0 1 0
+c
+d 7 4 1 0 0
+c
+d 195 3 0 0 0
+c
+d 205 1 0 0 0
+c
+d 218 1 1 0 0
+c
+d 1235 1 0 0 0
+c
+d 1237 1 0 0 0
+c
+d 734 4 1 0 0
+c
+d 878 1 0 1 0
+c
+d 881 5 0 1 0
+c
+d 132 4 2 0 0
+c
+d 338 1 0 0 0
+c
+d 353 1 0 0 0
+c
+d 357 3 0 0 0
+c
+d 447 4 1 0 0
+c
+d 1016 5 1 0 0
+c
+d 584 1 0 0 0
+c
+d 585 2 0 0 0
+c
+d 19 3 0 0 0
+c
+d 22 1 0 0 0
+c
+d 787 2 0 0 0
+c
+d 790 3 0 0 0
+c
+d 855 4 1 0 0
+c
+d 856 2 0 1 0
+c
+d 886 2 0 1 0
+c
+d 892 4 1 0 0
+c
+d 294 5 1 1 0
+c
+d 274 1 0 0 0
+c
+d 277 1 0 0 0
+c
+d 194 1 1 0 0
+c
+d 204 1 0 0 0
+c
+d 224 1 0 0 0
+c
+d 60 4 2 0 0
+c
+d 623 1 0 0 0
+c
+d 866 2 0 1 0
+c
+d 867 4 1 0 0
+c
+d 1303 2 0 2 0
+c
+d 1304 3 0 0 0
+c
+d 414 3 1 1 0
+c
+d 418 2 0 1 0
+c
+d 270 1 0 0 0
+c
+d 272 2 1 0 0
+c
+d 492 6 2 0 0
+c
+d 493 1 0 0 0
+c
+d 1156 5 0 2 0
+c
+d 655 5 0 0 0
+c
+d 656 1 0 0 0
+c
+d 734 2 0 0 0
+c
+d 599 4 1 1 0
+c
+d 606 2 0 0 0
+c
+d 264 1 0 0 0
+c
+d 265 2 0 0 0
+c
+d 286 1 0 0 0
+c
+d 734 1 0 0 0
+c
+d 769 1 0 1 0
+c
+d 939 3 1 0 0
+c
+d 275 4 2 0 0
+c
+d 185 6 1 0 0
+c
+d 294 5 2 0 0
+c
+d 195 2 0 0 0
+c
+d 206 1 0 0 0
+c
+d 343 1 0 0 0
+c
+d 437 2 1 0 0
+c
+d 572 4 1 0 0
+c
+d 574 1 0 0 0
+c
+d 529 1 0 0 0
+c
+d 550 3 1 0 0
+c
+d 157 3 1 0 0
+c
+d 305 1 1 0 0
+c
+d 437 1 0 0 0
+c
+d 493 3 0 0 0
+c
+d 217 3 1 1 0
+c
+d 806 1 0 1 0
+c
+d 807 1 0 0 0
+c
+d 808 4 1 0 0
+c
+d 437 1 1 0 0
+c
+d 455 3 1 0 0
+c
+d 469 1 0 0 0
+c
+d 929 4 1 0 0
+c
+d 931 2 0 0 0
+c
+d 836 1 0 0 0
+c
+d 839 2 1 0 0
+c
+d 840 1 0 1 0
+c
+d 807 4 0 0 0
+c
+d 821 2 0 0 0
+c
+d 208 1 0 1 0
+c
+d 1245 3 1 0 0
+c
+d 616 3 0 1 0
+c
+d 36 2 0 0 0
+c
+d 37 3 0 0 0
+c
+d 754 1 0 0 0
+c
+d 756 2 1 0 0
+c
+d 340 1 0 1 0
+c
+d 344 4 1 0 0
+c
+d 437 1 0 0 0
+c
+d 457 2 1 1 0
+c
+d 54 2 1 0 0
+c
+d 55 1 0 1 0
+c
+d 719 1 0 0 0
+c
+d 802 3 0 0 0
+c
+d 803 1 0 0 0
+c
+d 242 4 2 0 0
+c
+d 157 3 1 1 0
+c
+d 158 1 0 0 0
+c
+d 153 4 1 0 0
+c
+d 132 2 1 0 0
+c
+d 494 4 1 0 0
+c
+d 341 5 1 0 0
+c
+d 156 1 0 0 0
+c
+d 163 3 1 0 0
+c
+d 173 1 0 0 0
+c
+d 207 5 1 0 0
+c
+d 209 1 0 0 0
+c
+d 599 2 0 2 0
+c
+d 599 4 0 0 0
+c
+d 508 5 1 0 0
+c
+d 159 5 1 1 0
+c
+d 1163 5 0 0 0
+c
+d 19 3 0 2 0
+c
+d 977 1 0 0 0
+c
+d 981 1 0 0 0
+c
+d 575 1 0 0 0
+c
+d 796 2 0 0 0
+c
+d 797 1 0 0 0
+c
+d 424 4 1 0 0
+c
+d 584 1 0 1 0
+c
+d 1170 4 0 0 0
+c
+d 7 4 1 0 0
+c
+d 1283 2 0 1 0
+c
+d 272 1 0 1 0
+c
+d 282 4 0 0 0
+c
+d 1227 1 0 1 0
+c
+d 304 3 2 0 0
+c
+d 309 2 0 0 0
+c
+d 861 4 0 0 0
+c
+d 863 1 0 0 0
+c
+d 932 7 1 0 0
+c
+d 833 5 1 0 0
+c
+d 881 1 0 0 0
+c
+d 439 2 1 0 0
+c
+d 440 2 1 0 0
+c
+d 178 3 1 0 0
+c
+d 179 2 0 0 0
+c
+d 419 5 1 0 0
+c
+d 167 7 1 0 0
+c
+d 854 3 1 0 0
+c
+d 855 2 1 0 0
+c
+d 822 2 1 0 0
+c
+d 823 2 0 0 0
+c
+d 826 1 0 0 0
+c
+d 21 3 1 0 0
+c
+d 178 1 0 1 0
+c
+d 179 5 1 0 0
+c
+d 48 1 0 0 0
+c
+d 49 2 1 0 0
+c
+d 50 1 1 0 0
+c
+d 606 4 1 2 0
+c
+d 424 4 1 1 0
+c
+d 591 1 0 1 0
+c
+d 799 6 1 1 0
+c
+d 341 3 0 1 0
+c
+d 411 1 1 0 0
+c
+d 153 4 0 0 0
+c
+d 333 3 1 0 0
+c
+d 340 1 1 0 0
+c
+d 799 1 1 0 0
+c
+d 806 3 1 0 0
+c
+d 650 7 1 0 0
+c
+d 30 5 2 0 0
+c
+d 622 4 1 0 0
+c
+d 353 2 1 0 0
+c
+d 1138 1 0 0 0
+c
+d 114 1 0 0 0
+c
+d 127 3 2 0 0
+c
+d 1235 5 2 0 0
+c
+d 278 1 0 1 0
+c
+d 1170 2 1 0 0
+c
+d 146 3 1 1 0
+c
+d 151 1 0 0 0
+c
+d 211 5 1 0 0
+c
+d 989 1 0 1 0
+c
+d 995 4 1 0 0
+c
+d 1087 6 1 1 0
+c
+d 48 7 1 0 0
+c
+d 75 5 1 0 0
+c
+d 854 5 1 0 0
+c
+d 608 1 0 1 0
+c
+d 610 1 0 1 0
+c
+d 611 2 1 0 0
+c
+d 612 1 0 0 0
+c
+d 597 1 0 0 0
+c
+d 606 3 0 1 0
+c
+d 157 4 0 0 0
+c
+d 5 4 0 0 0
+c
+d 305 4 1 1 0
+c
+d 66 3 1 0 0
+c
+d 67 3 0 0 0
+c
+d 511 3 1 0 0
+c
+d 513 2 1 0 0
+c
+d 836 5 0 1 0
+c
+d 527 1 0 0 0
+c
+d 543 3 1 0 0
+c
+d 544 2 1 0 0
+c
+d 176 1 0 1 0
+c
+d 177 3 1 0 0
+c
+d 856 4 1 1 0
+c
+d 1170 4 0 1 0
+c
+d 308 1 0 0 0
+c
+d 311 1 0 0 0
+c
+d 327 1 1 0 0
+c
+d 738 4 1 1 0
+c
+d 513 6 1 0 0
+c
+d 45 2 0 1 0
+c
+d 46 2 0 0 0
+c
+d 791 2 0 2 0
+c
+d 794 2 0 0 0
+c
+d 54 7 1 0 0
+c
+d 437 3 1 0 0
+c
+d 444 1 0 0 0
+c
+d 470 1 1 0 0
+c
+d 301 7 2 0 0
+c
+d 795 1 0 0 0
+c
+d 907 4 1 0 0
+c
+d 833 1 0 0 0
+c
+d 881 3 0 1 0
+c
+d 599 4 1 1 0
+c
+d 323 6 1 1 0
+c
+d 208 4 2 0 0
+c
+d 209 1 0 0 0
+c
+d 796 1 1 0 0
+c
+d 797 1 0 0 0
+c
+d 305 1 1 0 0
+c
+d 353 3 1 0 0
+c
+d 1140 1 0 0 0
+c
+d 437 3 1 0 0
+c
+d 457 1 0 1 0
+c
+d 574 1 0 1 0
+c
+d 120 3 0 1 0
+c
+d 1084 5 1 1 0
+c
+d 46 4 0 0 0
+c
+d 75 4 2 0 0
+c
+d 76 1 0 0 0
+c
+d 836 3 1 0 0
+c
+d 839 2 1 0 0
+c
+d 178 1 0 1 0
+c
+d 181 2 1 0 0
+c
+d 193 1 0 1 0
+c
+d 199 3 0 0 0
+c
+d 208 1 0 0 0
+c
+d 873 2 0 0 0
+c
+d 874 1 0 0 0
+c
+d 927 3 0 1 0
+c
+d 929 1 0 1 0
+c
+d 193 4 0 0 0
+c
+d 611 1 0 0 0
+c
+d 990 3 1 0 0
+c
+d 991 1 0 0 0
+c
+d 353 2 0 0 0
+c
+d 1138 2 1 0 0
+c
+d 559 4 1 1 0
+c
+d 560 1 0 0 0
+c
+d 395 1 0 0 0
+c
+d 1106 5 0 0 0
+c
+d 734 3 0 0 0
+c
+d 283 2 1 0 0
+c
+d 284 2 0 1 0
+c
+d 650 3 1 0 0
+c
+d 653 1 1 0 0
+c
+d 54 4 1 2 0
+c
+d 55 1 0 0 0
+c
+d 70 3 0 0 0
+c
+d 415 7 1 0 0
+c
+d 12 1 0 0 0
+c
+d 1266 2 1 0 0
+c
+d 1269 1 0 0 0
+c
+d 745 1 0 1 0
+c
+d 748 4 1 1 0
+c
+d 146 1 0 1 0
+c
+d 153 3 1 0 0
+c
+d 437 1 0 0 0
+c
+d 568 2 1 0 0
+c
+d 569 1 1 0 0
+c
+d 799 1 0 1 0
+c
+d 842 2 0 1 0
+c
+d 843 3 1 0 0
+c
+d 21 4 2 0 0
+c
+d 23 1 0 0 0
+c
+d 491 4 1 1 0
+c
+d 505 1 0 0 0
+c
+d 514 3 0 0 0
+c
+d 354 1 0 1 0
+c
+d 1125 2 0 1 0
+c
+d 101 4 1 1 0
+c
+d 510 1 0 0 0
+c
+d 520 3 0 0 0
+c
+d 521 1 0 0 0
+c
+d 718 2 1 0 0
+c
+d 731 3 0 0 0
+c
+d 511 6 1 0 0
+c
+d 532 2 0 0 0
+c
+d 753 1 0 0 0
+c
+d 861 6 1 0 0
+c
+d 606 4 0 0 0
+c
+d 1285 4 0 1 0
+c
+d 1291 1 0 1 0
+c
+d 572 2 0 0 0
+c
+d 1054 1 1 0 0
+c
+d 1106 4 0 1 0
+c
+d 1107 1 0 0 0
+c
+d 982 4 2 0 0
+c
+d 983 1 0 0 0
+c
+d 155 3 0 0 0
+c
+d 176 2 0 0 0
+c
+d 304 6 2 0 0
+c
+d 382 1 0 0 0
+c
+d 383 2 0 0 0
+c
+d 989 5 2 0 0
+c
+d 16 6 1 0 0
+c
+d 908 7 2 0 0
+c
+d 337 1 1 0 0
+c
+d 338 4 1 0 0
+c
+d 146 3 0 1 0
+c
+d 153 2 1 0 0
+c
+d 743 3 1 1 0
+c
+d 756 2 1 0 0
+c
+d 763 1 0 0 0
+c
+d 768 1 0 1 0
+c
+d 51 1 0 0 0
+c
+d 57 3 1 0 0
+c
+d 59 1 0 1 0
+c
+d 157 5 2 0 0
+c
+d 168 1 0 0 0
+c
+d 1110 2 0 0 0
+c
+d 1112 1 1 0 0
+c
+d 89 1 0 1 0
+c
+d 548 2 0 0 0
+c
+d 574 2 1 0 0
+c
+d 795 2 0 0 0
+c
+d 908 1 0 0 0
+c
+d 148 1 0 1 0
+c
+d 232 1 0 0 0
+c
+d 234 2 0 1 0
+c
+d 181 1 0 0 0
+c
+d 195 3 1 0 0
+c
+d 673 3 0 0 0
+c
+d 675 2 1 0 0
+c
+d 101 2 0 0 0
+c
+d 608 1 0 0 0
+c
+d 1090 1 0 0 0
+c
+d 1091 1 0 0 0
+c
+d 162 1 0 0 0
+c
+d 163 3 0 0 0
+c
+d 871 5 0 0 0
+c
+d 288 1 1 0 0
+c
+d 1221 2 0 0 0
+c
+d 1222 2 1 0 0
+c
+d 829 1 1 0 0
+c
+d 830 2 1 0 0
+c
+d 831 1 0 0 0
+c
+d 989 5 0 0 0
+c
+d 50 4 1 0 0
+c
+d 51 2 1 0 0
+c
+d 61 4 0 0 0
+c
+d 1239 6 1 0 0
+c
+d 799 1 0 0 0
+c
+d 806 1 0 0 0
+c
+d 156 1 0 0 0
+c
+d 400 4 0 2 0
+c
+d 436 3 1 0 0
+c
+d 26 1 0 0 0
+c
+d 39 2 0 0 0
+c
+d 40 1 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 1192 5 0 1 0
+c
+d 100 5 1 0 0
+c
+d 300 4 1 1 0
+c
+d 314 1 0 0 0
+c
+d 419 5 1 0 0
+c
+d 434 1 1 0 0
+c
+d 799 5 2 0 0
+c
+d 806 1 0 0 0
+c
+d 304 1 0 1 0
+c
+d 309 1 0 0 0
+c
+d 311 1 0 1 0
+c
+d 211 1 1 0 0
+c
+d 217 4 0 1 0
+c
+d 100 5 0 0 0
+c
+d 162 6 0 0 0
+c
+d 1047 3 1 1 0
+c
+d 1048 1 0 0 0
+c
+d 1049 1 0 0 0
+c
+d 591 3 0 0 0
+c
+d 592 1 1 0 0
+c
+d 16 1 0 0 0
+c
+d 93 2 1 0 0
+c
+d 96 1 0 0 0
+c
+d 142 3 2 0 0
+c
+d 157 2 1 0 0
+c
+d 176 1 0 0 0
+c
+d 177 1 0 1 0
+c
+d 1110 4 0 0 0
+c
+d 144 3 0 0 0
+c
+d 145 1 0 0 0
+c
+d 623 5 1 1 0
+c
+d 919 4 1 2 0
+c
+d 934 1 0 0 0
+c
+d 602 3 0 1 0
+c
+d 632 1 0 1 0
+c
+d 307 1 0 0 0
+c
+d 308 1 0 1 0
+c
+d 327 1 1 0 0
+c
+d 328 1 0 0 0
+c
+d 493 4 0 1 0
+c
+d 494 1 0 0 0
+c
+d 436 5 0 0 0
+c
+d 305 6 0 0 0
+c
+d 30 1 0 0 0
+c
+d 32 2 0 0 0
+c
+d 1170 5 2 0 0
+c
+d 829 4 0 0 0
+c
+d 468 4 1 0 0
+c
+d 471 2 1 0 0
+c
+d 184 1 0 0 0
+c
+d 196 3 1 0 0
+c
+d 916 3 1 0 0
+c
+d 919 2 1 0 0
+c
+d 179 1 0 1 0
+c
+d 182 2 1 0 0
+c
+d 191 1 0 0 0
+c
+d 544 2 1 0 0
+c
+d 18 2 0 0 0
+c
+d 95 3 0 0 0
+c
+d 1229 4 1 0 0
+c
+d 208 2 0 0 0
+c
+d 209 1 1 0 0
+c
+d 1245 3 0 0 0
+c
+d 155 1 0 0 0
+c
+d 156 2 0 1 0
+c
+d 157 1 0 0 0
+c
+d 301 6 1 1 0
+c
+d 193 3 0 0 0
+c
+d 195 1 0 0 0
+c
+d 428 3 1 0 0
+c
+d 588 2 1 0 0
+c
+d 437 1 0 0 0
+c
+d 457 3 0 0 0
+c
+d 458 1 0 1 0
+c
+d 419 4 0 0 0
+c
+d 119 4 0 1 0
+c
+d 120 1 0 1 0
+c
+d 437 6 1 1 0
+c
+d 875 1 0 0 0
+c
+d 876 2 0 0 0
+c
+d 176 1 1 0 0
+c
+d 194 2 1 0 0
+c
+d 204 1 0 0 0
+c
+d 224 1 0 0 0
+c
+d 810 6 1 1 0
+c
+d 437 2 0 1 0
+c
+d 457 3 1 0 0
+c
+d 502 1 0 0 0
+c
+d 505 1 0 0 0
+c
+d 507 1 0 0 0
+c
+d 826 1 0 0 0
+c
+d 827 3 1 0 0
+c
+d 829 1 0 0 0
+c
+d 437 5 1 1 0
+c
+d 119 5 1 0 0
+c
+d 823 6 1 2 0
+c
+d 353 1 0 1 0
+c
+d 354 3 1 0 0
+c
+d 199 4 0 0 0
+c
+d 569 1 0 0 0
+c
+d 574 3 1 0 0
+c
+d 1050 1 1 0 0
+c
+d 218 3 1 0 0
+c
+d 152 5 1 0 0
+c
+d 734 5 0 1 0
+c
+d 769 1 0 1 0
+c
+d 419 2 0 1 0
+c
+d 1080 3 1 1 0
+c
+d 146 1 0 0 0
+c
+d 294 5 1 0 0
+c
+d 743 4 1 1 0
+c
+d 753 1 0 0 0
+c
+d 177 3 1 1 0
+c
+d 178 1 0 0 0
+c
+d 54 1 0 0 0
+c
+d 55 3 2 0 0
+c
+d 120 1 0 1 0
+c
+d 121 3 0 0 0
+c
+d 122 1 0 0 0
+c
+d 791 2 0 0 0
+c
+d 936 2 0 1 0
+c
+d 886 1 1 0 0
+c
+d 888 1 0 0 0
+c
+d 892 3 1 0 0
+c
+d 90 1 0 0 0
+c
+d 91 3 0 0 0
+c
+d 737 7 1 0 0
+c
+d 156 6 1 0 0
+c
+d 1152 1 0 0 0
+c
+d 1153 2 0 0 0
+c
+d 1154 1 1 0 0
+c
+d 806 3 1 1 0
+c
+d 840 1 0 1 0
+c
+d 592 4 0 0 0
+c
+d 821 3 0 0 0
+c
+d 822 2 1 0 0
+c
+d 132 1 0 0 0
+c
+d 511 2 0 0 0
+c
+d 157 1 0 0 0
+c
+d 365 2 0 0 0
+c
+d 425 1 0 0 0
+c
+d 426 2 1 0 0
+c
+d 749 6 2 0 0
+c
+d 872 2 0 1 0
+c
+d 873 4 1 1 0
+c
+d 246 1 0 0 0
+c
+d 252 4 0 1 0
+c
+d 318 1 0 0 0
+c
+d 320 1 0 1 0
+c
+d 321 3 1 0 0
+c
+d 509 2 1 0 0
+c
+d 1071 3 1 0 0
+c
+d 272 1 0 1 0
+c
+d 273 3 1 0 0
+c
+d 437 3 0 0 0
+c
+d 441 2 1 0 0
+c
+d 498 1 0 0 0
+c
+d 157 4 2 0 0
+c
+d 1143 1 0 0 0
+c
+d 93 1 0 0 0
+c
+d 96 1 0 0 0
+c
+d 142 2 0 0 0
+c
+d 498 3 0 0 0
+c
+d 499 1 0 0 0
+c
+d 854 3 1 0 0
+c
+d 855 1 0 1 0
+c
+d 311 4 0 1 0
+c
+d 327 1 0 0 0
+c
+d 509 5 1 1 0
+c
+d 662 4 0 0 0
+c
+d 775 2 1 0 0
+c
+d 780 3 0 1 0
+c
+d 507 3 1 0 0
+c
+d 558 1 0 1 0
+c
+d 301 5 1 1 0
+c
+d 275 4 0 0 0
+c
+d 505 4 0 0 0
+c
+d 878 1 0 0 0
+c
+d 879 1 0 0 0
+c
+d 285 5 1 0 0
+c
+d 388 3 0 0 0
+c
+d 389 1 0 0 0
+c
+d 1300 2 0 1 0
+c
+d 1301 4 1 0 0
+c
+d 578 4 1 0 0
+c
+d 608 3 0 1 0
+c
+d 609 2 1 0 0
+c
+d 510 4 1 1 0
+c
+d 167 1 0 1 0
+c
+d 369 3 1 1 0
+c
+d 264 3 0 2 0
+c
+d 881 5 0 2 0
+c
+d 301 6 0 0 0
+c
+d 829 3 1 0 0
+c
+d 833 1 0 0 0
+c
+d 572 2 0 0 0
+c
+d 574 1 0 0 0
+c
+d 437 1 0 1 0
+c
+d 1045 4 0 0 0
+c
+d 152 2 0 1 0
+c
+d 1254 4 2 0 0
+c
+d 498 1 0 0 0
+c
+d 499 3 0 1 0
+c
+d 504 1 1 0 0
+c
+d 608 2 0 0 0
+c
+d 618 2 1 0 0
+c
+d 294 2 0 2 0
+c
+d 298 4 0 0 0
+c
+d 305 5 0 2 0
+c
+d 756 1 0 0 0
+c
+d 757 3 0 0 0
+c
+d 1269 4 0 0 0
+c
+d 428 5 1 1 0
+c
+d 1097 1 0 0 0
+c
+d 1098 4 0 0 0
+c
+d 458 3 0 0 0
+c
+d 489 1 0 0 0
+c
+d 861 1 1 0 0
+c
+d 875 4 1 0 0
+c
+d 574 3 1 0 0
+c
+d 795 1 0 0 0
+c
+d 26 3 0 0 0
+c
+d 28 2 0 0 0
+c
+d 195 5 1 1 0
+c
+d 108 2 1 0 0
+c
+d 111 1 0 0 0
+c
+d 278 1 0 0 0
+c
+d 280 3 1 0 0
+c
+d 1170 1 1 0 0
+c
+d 318 5 1 0 0
+c
+d 320 1 0 1 0
+c
+d 100 1 0 0 0
+c
+d 990 1 0 0 0
+c
+d 1004 2 0 0 0
+c
+d 852 1 0 1 0
+c
+d 853 4 1 0 0
+c
+d 974 3 0 0 0
+c
+d 975 1 0 0 0
+c
+d 767 5 2 0 0
+c
+d 888 1 0 0 0
+c
+d 178 3 1 0 0
+c
+d 181 1 0 1 0
+c
+d 811 1 0 0 0
+c
+d 904 2 1 1 0
+c
+d 905 3 0 0 0
+c
+d 181 1 1 0 0
+c
+d 191 2 0 1 0
+c
+d 791 1 0 0 0
+c
+d 829 3 0 1 0
+c
+d 507 1 0 0 0
+c
+d 1070 3 0 0 0
+c
+d 1074 1 1 0 0
+c
+d 591 4 1 0 0
+c
+d 592 2 0 1 0
+c
+d 288 1 0 0 0
+c
+d 300 3 2 0 0
+c
+d 314 1 0 0 0
+c
+d 529 2 0 1 0
+c
+d 532 1 0 0 0
+c
+d 262 3 0 0 0
+c
+d 274 2 0 0 0
+c
+d 705 1 0 0 0
+c
+d 706 3 1 0 0
+c
+d 602 1 0 1 0
+c
+d 633 4 1 0 0
+c
+d 318 1 1 0 0
+c
+d 320 1 0 1 0
+c
+d 856 3 1 0 0
+c
+d 853 1 0 1 0
+c
+d 866 3 1 0 0
+c
+d 338 3 0 0 0
+c
+d 509 1 0 1 0
+c
+d 1070 1 0 0 0
+c
+d 1073 3 1 0 0
+c
+d 1110 3 0 0 0
+c
+d 673 2 0 0 0
+c
+d 675 2 0 0 0
+c
+d 676 1 0 0 0
+c
+d 795 1 0 0 0
+c
+d 907 4 1 0 0
+c
+d 1315 2 1 0 0
+c
+d 1316 1 0 1 0
+c
+d 1317 1 0 0 0
+c
+d 1163 3 0 0 0
+c
+d 1165 2 1 0 0
+c
+d 748 3 1 0 0
+c
+d 749 1 0 0 0
+c
+d 662 1 0 0 0
+c
+d 667 5 1 0 0
+c
+d 614 2 1 0 0
+c
+d 615 1 0 0 0
+c
+d 304 4 0 0 0
+c
+d 308 1 0 0 0
+c
+d 437 1 0 1 0
+c
+d 568 2 1 0 0
+c
+d 569 1 0 0 0
+c
+d 281 1 0 0 0
+c
+d 1192 1 0 0 0
+c
+d 529 5 0 1 0
+c
+d 673 1 0 0 0
+c
+d 676 3 0 0 0
+c
+d 91 2 0 1 0
+c
+d 92 1 0 1 0
+c
+d 156 1 0 1 0
+c
+d 157 5 0 1 0
+c
+d 23 4 1 0 0
+c
+d 610 1 0 0 0
+c
+d 990 1 0 0 0
+c
+d 1004 3 1 0 0
+c
+d 509 5 1 0 0
+c
+d 554 2 0 0 0
+c
+d 555 1 0 0 0
+c
+d 557 2 0 0 0
+c
+d 1063 1 1 0 0
+c
+d 1065 1 0 0 0
+c
+d 1168 1 0 1 0
+c
+d 1179 2 1 0 0
+c
+d 1182 2 0 0 0
+c
+d 618 4 1 0 0
+c
+d 965 1 0 1 0
+c
+d 66 5 0 0 0
+c
+d 835 2 1 0 0
+c
+d 836 3 0 0 0
+c
+d 523 1 0 0 0
+c
+d 524 5 1 1 0
+c
+d 437 1 0 0 0
+c
+d 575 1 0 0 0
+c
+d 576 2 1 0 0
+c
+d 989 3 1 1 0
+c
+d 990 1 0 0 0
+c
+d 142 5 1 0 0
+c
+d 100 1 0 0 0
+c
+d 1006 4 1 0 0
+c
+d 1016 1 0 0 0
+c
+d 1017 3 0 0 0
+c
+d 1020 1 0 0 0
+c
+d 1030 2 0 0 0
+c
+d 965 1 0 0 0
+c
+d 966 2 1 0 0
+c
+d 967 1 0 0 0
+c
+d 119 4 0 0 0
+c
+d 333 4 2 0 0
+c
+d 437 3 2 0 0
+c
+d 507 1 0 0 0
+c
+d 1286 3 1 1 0
+c
+d 1287 1 0 1 0
+c
+d 437 1 0 0 0
+c
+d 469 5 2 0 0
+c
+d 608 3 1 0 0
+c
+d 609 1 0 0 0
+c
+d 611 1 1 0 0
+c
+d 111 4 2 0 0
+c
+d 146 1 0 0 0
+c
+d 608 1 1 0 0
+c
+d 615 5 1 0 0
+c
+d 75 5 1 0 0
+c
+d 318 1 0 0 0
+c
+d 324 2 1 0 0
+c
+d 331 1 0 0 0
+c
+d 332 1 0 1 0
+c
+d 211 4 0 0 0
+c
+d 1238 1 1 0 0
+c
+d 437 1 0 0 0
+c
+d 444 2 0 0 0
+c
+d 915 3 1 0 0
+c
+d 916 1 0 0 0
+c
+d 918 1 1 0 0
+c
+d 457 4 1 1 0
+c
+d 99 2 1 0 0
+c
+d 101 2 1 0 0
+c
+d 110 1 0 1 0
+c
+d 246 1 0 0 0
+c
+d 262 2 0 0 0
+c
+d 265 1 0 1 0
+c
+d 535 3 1 0 0
+c
+d 536 2 1 0 0
+c
+d 608 1 0 0 0
+c
+d 614 3 0 0 0
+c
+d 591 5 0 1 0
+c
+d 844 2 1 0 0
+c
+d 851 1 0 0 0
+c
+d 156 2 0 0 0
+c
+d 163 1 0 0 0
+c
+d 400 1 0 0 0
+c
+d 157 3 0 1 0
+c
+d 178 2 0 0 0
+c
+d 282 1 0 0 0
+c
+d 286 1 1 0 0
+c
+d 287 2 0 1 0
+c
+d 606 1 0 0 0
+c
+d 607 1 1 0 0
+c
+d 608 1 0 0 0
+c
+d 559 2 1 0 0
+c
+d 568 2 0 0 0
+c
+d 572 1 0 0 0
+c
+d 636 1 0 1 0
+c
+d 638 3 0 1 0
+c
+d 101 1 0 0 0
+c
+d 109 2 1 0 0
+c
+d 110 2 1 0 0
+c
+d 211 1 0 1 0
+c
+d 215 4 1 0 0
+c
+d 216 1 1 0 0
+c
+d 1233 1 0 0 0
+c
+d 568 3 1 0 0
+c
+d 301 1 0 0 0
+c
+d 311 2 0 1 0
+c
+d 737 6 1 0 0
+c
+d 534 4 0 1 0
+c
+d 168 1 0 0 0
+c
+d 169 1 0 0 0
+c
+d 378 1 0 0 0
+c
+d 550 1 0 0 0
+c
+d 556 2 0 0 0
+c
+d 557 1 0 0 0
+c
+d 436 2 0 0 0
+c
+d 437 1 0 0 0
+c
+d 584 4 2 0 0
+c
+d 157 5 1 0 0
+c
+d 661 1 0 1 0
+c
+d 662 3 1 1 0
+c
+d 666 1 0 0 0
+c
+d 602 4 2 0 0
+c
+d 675 1 0 0 0
+c
+d 676 1 0 0 0
+c
+d 565 1 0 0 0
+c
+d 568 2 1 0 0
+c
+d 570 1 1 0 0
+c
+d 529 1 0 0 0
+c
+d 1069 3 0 0 0
+c
+d 146 2 0 0 0
+c
+d 151 1 0 0 0
+c
+d 1013 1 0 0 0
+c
+d 1033 1 1 0 0
+c
+d 719 1 0 0 0
+c
+d 949 3 2 0 0
+c
+d 328 1 0 1 0
+c
+d 353 2 0 1 0
+c
+d 354 2 0 0 0
+c
+d 101 1 0 1 0
+c
+d 424 3 1 0 0
+c
+d 343 4 1 0 0
+c
+d 598 4 1 0 0
+c
+d 599 1 0 1 0
+c
+d 843 1 1 0 0
+c
+d 844 3 0 0 0
+c
+d 341 4 0 0 0
+c
+d 795 1 0 0 0
+c
+d 907 4 0 0 0
+c
+d 315 1 0 0 0
+c
+d 316 3 1 0 0
+c
+d 318 1 0 1 0
+c
+d 159 4 1 0 0
+c
+d 213 1 0 1 0
+c
+d 119 5 1 0 0
+c
+d 340 7 2 0 0
+c
+d 436 2 0 1 0
+c
+d 581 3 1 0 0
+c
+d 1185 2 0 1 0
+c
+d 1186 2 0 0 0
+c
+d 1187 1 0 0 0
+c
+d 836 1 0 0 0
+c
+d 839 2 1 0 0
+c
+d 840 2 1 0 0
+c
+d 34 4 0 0 0
+c
+d 835 1 1 0 0
+c
+d 836 4 0 0 0
+c
+d 246 4 1 2 0
+c
+d 252 1 0 0 0
+c
+d 145 1 0 1 0
+c
+d 146 4 1 1 0
+c
+d 327 2 0 0 0
+c
+d 328 2 1 0 0
+c
+d 716 1 0 1 0
+c
+d 718 3 1 0 0
+c
+d 699 5 2 0 0
+c
+d 30 2 0 0 0
+c
+d 593 1 0 0 0
+c
+d 673 1 0 1 0
+c
+d 676 3 0 0 0
+c
+d 677 1 0 0 0
+c
+d 32 5 0 0 0
+c
+d 799 4 1 1 0
+c
+d 800 1 0 0 0
+c
+d 100 1 0 0 0
+c
+d 101 1 1 0 0
+c
+d 1005 3 0 0 0
+c
+d 424 6 2 0 0
+c
+d 1285 3 0 2 0
+c
+d 1291 1 0 0 0
+c
+d 74 5 1 1 0
+c
+d 1097 5 0 0 0
+c
+d 146 5 1 0 0
+c
+d 119 3 1 0 0
+c
+d 120 1 0 0 0
+c
+d 423 1 0 1 0
+c
+d 427 4 1 0 0
+c
+d 157 4 1 0 0
+c
+d 977 4 1 0 0
+c
+d 218 1 0 0 0
+c
+d 1237 1 0 0 0
+c
+d 1240 1 0 0 0
+c
+d 797 1 0 0 0
+c
+d 799 4 1 0 0
+c
+d 1168 3 2 0 0
+c
+d 1177 1 0 0 0
+c
+d 1201 3 0 0 0
+c
+d 1202 1 0 0 0
+c
+d 355 1 0 0 0
+c
+d 357 3 1 0 0
+c
+d 305 3 0 0 0
+c
+d 1150 1 0 0 0
+c
+d 737 2 0 1 0
+c
+d 756 3 1 0 0
+c
+d 427 4 1 0 0
+c
+d 428 1 0 1 0
+c
+d 839 2 1 0 0
+c
+d 840 2 0 0 0
+c
+d 841 1 0 0 0
+c
+d 178 2 1 0 0
+c
+d 618 4 0 1 0
+c
+d 965 1 0 1 0
+c
+d 749 1 0 0 0
+c
+d 751 3 1 0 0
+c
+d 592 1 0 0 0
+c
+d 594 3 1 0 0
+c
+d 635 1 0 0 0
+c
+d 636 2 0 0 0
+c
+d 638 1 0 0 0
+c
+d 578 5 1 0 0
+c
+d 598 2 0 0 0
+c
+d 606 3 0 0 0
+c
+d 12 3 0 0 0
+c
+d 1269 2 0 2 0
+c
+d 108 4 1 1 0
+c
+d 111 1 0 0 0
+c
+d 572 1 1 0 0
+c
+d 795 3 1 0 0
+c
+d 820 1 0 0 0
+c
+d 550 1 0 1 0
+c
+d 552 3 0 0 0
+c
+d 827 1 0 0 0
+c
+d 829 3 0 0 0
+c
+d 973 5 0 0 0
+c
+d 477 1 0 1 0
+c
+d 478 3 1 0 0
+c
+d 482 1 0 1 0
+c
+d 649 2 0 0 0
+c
+d 650 2 0 0 0
+c
+d 655 1 0 0 0
+c
+d 738 5 1 1 0
+c
+d 93 5 0 1 0
+c
+d 114 1 0 1 0
+c
+d 1176 3 1 0 0
+c
+d 101 1 0 0 0
+c
+d 102 1 0 0 0
+c
+d 103 3 1 0 0
+c
+d 787 3 0 0 0
+c
+d 513 2 0 0 0
+c
+d 75 5 2 0 0
+c
+d 44 1 0 0 0
+c
+d 1020 2 0 0 0
+c
+d 1030 4 0 0 0
+c
+d 1163 4 0 0 0
+c
+d 311 4 1 1 0
+c
+d 327 1 0 0 0
+c
+d 544 1 0 0 0
+c
+d 546 4 1 0 0
+c
+d 1185 1 0 0 0
+c
+d 1186 3 0 0 0
+c
+d 1187 1 0 0 0
+c
+d 817 1 1 0 0
+c
+d 904 1 0 0 0
+c
+d 913 3 1 0 0
+c
+d 425 3 1 1 0
+c
+d 426 2 0 1 0
+c
+d 84 5 0 1 0
+c
+d 178 1 1 0 0
+c
+d 182 2 1 0 0
+c
+d 191 1 0 0 0
+c
+d 455 3 0 0 0
+c
+d 468 3 2 0 0
+c
+d 469 1 0 0 0
+c
+d 428 5 2 0 0
+c
+d 691 1 0 0 0
+c
+d 801 1 1 0 0
+c
+d 802 4 1 0 0
+c
+d 157 1 0 0 0
+c
+d 159 1 0 0 0
+c
+d 1252 4 0 0 0
+c
+d 287 5 1 2 0
+c
+d 348 1 0 0 0
+c
+d 393 4 1 0 0
+c
+d 799 1 0 0 0
+c
+d 840 3 1 0 0
+c
+d 842 1 0 1 0
+c
+d 129 4 0 0 0
+c
+d 523 1 1 0 0
+c
+d 799 1 1 0 0
+c
+d 916 3 1 0 0
+c
+d 919 1 0 0 0
+c
+d 807 1 0 0 0
+c
+d 839 4 2 0 0
+c
+d 276 2 0 1 0
+c
+d 301 3 1 1 0
+c
+d 507 1 1 0 0
+c
+d 1070 2 1 0 0
+c
+d 1071 1 0 0 0
+c
+d 491 1 0 0 0
+c
+d 492 1 0 1 0
+c
+d 493 1 0 0 0
+c
+d 1192 3 1 0 0
+c
+d 332 1 1 0 0
+c
+d 333 2 1 0 0
+c
+d 339 1 0 0 0
+c
+d 35 1 1 0 0
+c
+d 36 4 0 0 0
+c
+d 89 1 0 1 0
+c
+d 1266 1 0 1 0
+c
+d 1285 4 0 0 0
+c
+d 167 6 0 0 0
+c
+d 294 3 1 1 0
+c
+d 298 1 0 0 0
+c
+d 110 1 0 1 0
+c
+d 111 2 1 0 0
+c
+d 875 1 0 0 0
+c
+d 876 3 2 0 0
+c
+d 248 4 1 1 0
+c
+d 955 6 0 0 0
+c
+d 699 6 1 0 0
+c
+d 1106 2 1 0 0
+c
+d 1107 2 0 0 0
+c
+d 1165 2 1 0 0
+c
+d 1168 2 1 0 0
+c
+d 1176 1 0 0 0
+c
+d 1110 1 0 0 0
+c
+d 1111 2 0 0 0
+c
+d 1113 1 0 1 0
+c
+d 1115 1 0 0 0
+c
+d 153 4 1 2 0
+c
+d 154 1 0 0 0
+c
+d 211 4 0 0 0
+c
+d 1231 1 1 0 0
+c
+d 156 2 0 0 0
+c
+d 163 1 0 0 0
+c
+d 655 5 0 0 0
+c
+d 32 2 1 0 0
+c
+d 74 1 0 1 0
+c
+d 167 1 0 0 0
+c
+d 168 3 0 0 0
+c
+d 1110 1 0 0 0
+c
+d 242 1 0 0 0
+c
+d 262 3 1 0 0
+c
+d 270 1 0 1 0
+c
+d 509 3 1 0 0
+c
+d 1070 1 0 1 0
+c
+d 1170 1 0 1 0
+c
+d 1174 3 1 0 0
+c
+d 1185 1 0 0 0
+c
+d 1298 4 1 0 0
+c
+d 273 1 1 0 0
+c
+d 274 1 0 0 0
+c
+d 275 1 0 0 0
+c
+d 691 1 1 0 0
+c
+d 706 1 0 0 0
+c
+d 707 3 0 0 0
+c
+d 767 2 0 0 0
+c
+d 891 2 1 0 0
+c
+d 616 2 1 1 0
+c
+d 617 2 0 0 0
+c
+d 989 1 0 0 0
+c
+d 550 1 1 0 0
+c
+d 554 2 0 0 0
+c
+d 556 1 0 0 0
+c
+d 511 3 1 1 0
+c
+d 437 5 1 2 0
+c
+d 156 3 0 1 0
+c
+d 163 1 0 0 0
+c
+d 400 1 0 1 0
+c
+d 990 1 1 0 0
+c
+d 992 3 1 0 0
+c
+d 993 1 0 0 0
+c
+d 734 4 0 0 0
+c
+d 737 1 0 0 0
+c
+d 551 4 1 2 0
+c
+d 775 1 0 0 0
+c
+d 126 4 0 1 0
+c
+d 127 2 0 0 0
+c
+d 146 1 0 0 0
+c
+d 229 2 1 0 0
+c
+d 237 1 1 0 0
+c
+d 155 5 1 0 0
+c
+d 411 1 0 1 0
+c
+d 840 4 1 0 0
+c
+d 153 3 1 0 0
+c
+d 204 2 1 0 0
+c
+d 455 4 1 0 0
+c
+d 469 1 1 0 0
+c
+d 341 3 2 0 0
+c
+d 344 1 0 0 0
+c
+d 96 1 0 1 0
+c
+d 111 4 1 0 0
+c
+d 597 3 0 0 0
+c
+d 129 4 1 0 0
+c
+d 48 1 0 1 0
+c
+d 49 1 0 1 0
+c
+d 428 1 1 0 0
+c
+d 430 1 0 0 0
+c
+d 436 1 0 0 0
+c
+d 509 4 1 0 0
+c
+d 1070 2 1 0 0
+c
+d 119 1 0 0 0
+c
+d 120 4 0 1 0
+c
+d 426 1 0 0 0
+c
+d 591 3 0 0 0
+c
+d 344 4 0 0 0
+c
+d 799 4 0 0 0
+c
+d 183 1 0 1 0
+c
+d 191 5 0 1 0
+c
+d 1009 1 0 0 0
+c
+d 1012 2 1 0 0
+c
+d 1015 1 0 0 0
+c
+d 1016 1 0 0 0
+c
+d 818 4 0 0 0
+c
+d 208 1 0 0 0
+c
+d 211 4 1 0 0
+c
+d 278 4 2 0 0
+c
+d 806 4 1 0 0
+c
+d 811 1 0 1 0
+c
+d 437 1 1 0 0
+c
+d 493 1 0 1 0
+c
+d 556 1 0 0 0
+c
+d 557 2 0 0 0
+c
+d 565 1 0 0 0
+c
+d 502 1 0 0 0
+c
+d 505 4 1 0 0
+c
+d 791 3 0 0 0
+c
+d 369 2 0 0 0
+c
+d 382 1 0 0 0
+c
+d 597 4 0 1 0
+c
+d 598 1 0 0 0
+c
+d 270 1 1 0 0
+c
+d 272 2 0 1 0
+c
+d 551 2 0 1 0
+c
+d 84 1 0 0 0
+c
+d 1285 3 0 0 0
+c
+d 599 3 0 0 0
+c
+d 606 1 0 0 0
+c
+d 129 1 1 0 0
+c
+d 130 3 1 0 0
+c
+d 131 1 0 0 0
+c
+d 793 1 0 0 0
+c
+d 795 1 0 0 0
+c
+d 204 4 2 0 0
+c
+d 224 1 0 0 0
+c
+d 101 2 0 0 0
+c
+d 108 1 0 0 0
+c
+d 610 1 1 0 0
+c
+d 1005 1 0 0 0
+c
+d 120 2 0 1 0
+c
+d 125 1 0 1 0
+c
+d 623 6 2 0 0
+c
+d 453 2 1 1 0
+c
+d 493 4 1 0 0
+c
+d 1077 1 0 0 0
+c
+d 858 1 0 0 0
+c
+d 868 1 1 0 0
+c
+d 872 1 0 1 0
+c
+d 1195 1 1 0 0
+c
+d 1198 4 1 0 0
+c
+d 608 1 0 0 0
+c
+d 614 1 0 0 0
+c
+d 615 3 0 1 0
+c
+d 554 4 0 0 0
+c
+d 606 4 0 0 0
+c
+d 855 4 1 1 0
+c
+d 551 3 1 0 0
+c
+d 784 1 0 0 0
+c
+d 406 2 1 0 0
+c
+d 411 2 0 0 0
+c
+d 19 1 0 0 0
+c
+d 628 3 0 0 0
+c
+d 152 1 0 0 0
+c
+d 412 4 1 0 0
+c
+d 413 1 0 0 0
+c
+d 1266 4 0 0 0
+c
+d 159 6 1 0 0
+c
+d 101 4 2 0 0
+c
+d 104 1 0 0 0
+c
+d 532 2 0 1 0
+c
+d 537 1 0 1 0
+c
+d 574 4 2 0 0
+c
+d 795 1 0 0 0
+c
+d 615 4 1 1 0
+c
+d 616 1 0 0 0
+c
+d 691 1 1 0 0
+c
+d 697 2 0 0 0
+c
+d 698 3 0 0 0
+c
+d 243 1 1 0 0
+c
+d 246 1 0 1 0
+c
+d 248 1 0 0 0
+c
+d 419 2 1 1 0
+c
+d 423 1 0 0 0
+c
+d 567 1 1 0 0
+c
+d 568 4 0 0 0
+c
+d 332 3 1 0 0
+c
+d 333 1 0 1 0
+c
+d 283 2 1 0 0
+c
+d 529 4 0 0 0
+c
+d 1069 1 0 0 0
+c
+d 341 3 0 0 0
+c
+d 347 2 0 0 0
+c
+d 572 4 1 0 0
+c
+d 437 2 0 1 0
+c
+d 438 2 0 1 0
+c
+d 159 5 1 0 0
+c
+d 126 1 0 0 0
+c
+d 127 2 0 0 0
+c
+d 157 3 1 0 0
+c
+d 158 1 1 0 0
+c
+d 178 1 1 0 0
+c
+d 181 3 1 0 0
+c
+d 190 1 0 0 0
+c
+d 146 4 0 0 0
+c
+d 1318 5 1 0 0
+c
+d 348 1 1 0 0
+c
+d 407 2 0 0 0
+c
+d 409 1 0 0 0
+c
+d 410 1 0 0 0
+c
+d 39 1 0 0 0
+c
+d 40 3 0 0 0
+c
+d 661 1 0 0 0
+c
+d 662 3 0 0 0
+c
+d 120 2 0 0 0
+c
+d 121 1 0 0 0
+c
+d 122 2 0 0 0
+c
+d 284 2 0 2 0
+c
+d 285 1 0 0 0
+c
+d 348 4 1 0 0
+c
+d 836 1 0 0 0
+c
+d 838 4 0 0 0
+c
+d 686 1 0 0 0
+c
+d 700 4 0 0 0
+c
+d 564 2 1 0 0
+c
+d 565 1 0 0 0
+c
+d 429 6 1 0 0
+c
+d 46 4 0 0 0
+c
+d 73 1 0 1 0
+c
+d 89 1 0 1 0
+c
+d 1266 3 0 1 0
+c
+d 340 6 1 1 0
+c
+d 87 1 0 0 0
+c
+d 89 3 0 0 0
+c
+d 550 1 0 1 0
+c
+d 1087 1 0 0 0
+c
+d 1090 4 2 0 0
+c
+d 550 4 0 0 0
+c
+d 1266 3 0 0 0
+c
+d 1285 1 0 0 0
+c
+d 737 5 1 0 0
+c
+d 157 1 0 1 0
+c
+d 358 1 0 0 0
+c
+d 359 3 0 0 0
+c
+d 811 2 1 0 0
+c
+d 914 4 0 0 0
+c
+d 91 5 0 1 0
+c
+d 92 1 0 1 0
+c
+d 75 2 1 0 0
+c
+d 84 1 0 0 0
+c
+d 1294 2 0 0 0
+c
+d 120 2 0 0 0
+c
+d 121 3 0 0 0
+c
+d 476 1 0 0 0
+c
+d 478 2 1 0 0
+c
+d 48 2 0 1 0
+c
+d 807 4 1 1 0
+c
+d 551 1 0 0 0
+c
+d 554 1 0 0 0
+c
+d 663 1 0 1 0
+c
+d 665 4 1 0 0
+c
+d 753 4 0 0 0
+c
+d 754 1 0 0 0
+c
+d 36 2 0 1 0
+c
+d 37 2 1 0 0
+c
+d 276 1 0 1 0
+c
+d 277 2 1 0 0
+c
+d 301 1 0 1 0
+c
+d 455 4 1 0 0
+c
+d 456 1 0 1 0
+c
+d 463 5 1 0 0
+c
+d 467 2 1 0 0
+c
+d 468 1 0 1 0
+c
+d 156 1 0 0 0
+c
+d 157 2 0 1 0
+c
+d 177 1 0 1 0
+c
+d 861 4 0 0 0
+c
+d 870 1 0 0 0
+c
+d 852 1 0 0 0
+c
+d 853 3 1 1 0
+c
+d 279 2 0 0 0
+c
+d 305 2 1 0 0
+c
+d 353 1 0 1 0
+c
+d 288 2 1 0 0
+c
+d 300 1 0 0 0
+c
+d 1080 2 0 1 0
+c
+d 1083 2 1 0 0
+c
+d 797 4 1 2 0
+c
+d 929 1 0 0 0
+c
+d 691 3 0 0 0
+c
+d 575 3 1 0 0
+c
+d 355 3 1 0 0
+c
+d 795 5 1 1 0
+c
+d 156 3 0 0 0
+c
+d 163 2 1 0 0
+c
+d 195 1 0 0 0
+c
+d 205 4 1 1 0
+c
+d 211 1 0 0 0
+c
+d 858 3 1 1 0
+c
+d 338 2 1 0 0
+c
+d 340 2 0 1 0
+c
+d 551 2 0 0 0
+c
+d 965 1 0 0 0
+c
+d 971 1 1 0 0
+c
+d 972 3 1 0 0
+c
+d 1274 3 0 0 0
+c
+d 1285 2 0 0 0
+c
+d 9 3 0 0 0
+c
+d 157 4 2 0 0
+c
+d 811 5 1 0 0
+c
+d 812 1 1 0 0
+c
+d 157 1 1 0 0
+c
+d 305 2 0 0 0
+c
+d 1143 1 0 1 0
+c
+d 437 3 1 0 0
+c
+d 507 1 0 0 0
+c
+d 558 1 0 1 0
+c
+d 120 3 1 0 0
+c
+d 121 1 0 1 0
+c
+d 437 6 0 0 0
+c
+d 26 4 0 0 0
+c
+d 570 4 1 0 0
+c
+d 157 1 0 0 0
+c
+d 1252 4 1 0 0
+c
+d 18 4 2 0 0
+c
+d 77 1 0 0 0
+c
+d 93 1 0 0 0
+c
+d 142 3 0 0 0
+c
+d 143 1 0 0 0
+c
+d 46 1 0 0 0
+c
+d 1314 1 1 0 0
+c
+d 186 1 0 0 0
+c
+d 187 3 0 0 0
+c
+d 437 4 1 0 0
+c
+d 470 1 0 1 0
+c
+d 1279 1 0 0 0
+c
+d 1282 4 0 0 0
+c
+d 130 3 1 1 0
+c
+d 131 1 0 0 0
+c
+d 132 1 0 1 0
+c
+d 534 5 0 1 0
+c
+d 341 4 1 0 0
+c
+d 342 1 0 0 0
+c
+d 16 4 0 0 0
+c
+d 159 1 0 0 0
+c
+d 178 5 1 0 0
+c
+d 159 4 1 0 0
+c
+d 213 1 0 0 0
+c
+d 195 1 0 0 0
+c
+d 205 5 0 0 0
+c
+d 132 4 1 0 0
+c
+d 437 1 0 0 0
+c
+d 466 2 0 0 0
+c
+d 211 1 0 0 0
+c
+d 1239 6 2 0 0
+c
+d 753 3 0 0 0
+c
+d 858 1 0 0 0
+c
+d 159 1 1 0 0
+c
+d 183 5 1 0 0
+c
+d 46 1 0 1 0
+c
+d 75 1 0 1 0
+c
+d 965 2 0 0 0
+c
+d 982 2 0 0 0
+c
+d 69 1 0 0 0
+c
+d 649 1 1 0 0
+c
+d 650 1 0 0 0
+c
+d 177 1 0 1 0
+c
+d 178 3 0 1 0
+c
+d 355 2 0 0 0
+c
+d 357 1 0 0 0
+c
+d 650 3 0 0 0
+c
+d 655 1 0 1 0
+c
+d 656 1 0 0 0
+c
+d 88 1 0 1 0
+c
+d 89 3 0 1 0
+c
+d 550 1 0 0 0
+c
+d 282 4 1 0 0
+c
+d 287 1 0 1 0
+c
+d 276 1 0 0 0
+c
+d 301 3 1 0 0
+c
+d 310 1 1 0 0
+c
+d 821 2 1 0 0
+c
+d 822 3 0 0 0
+c
+d 551 1 0 0 0
+c
+d 554 2 1 0 0
+c
+d 437 4 2 0 0
+c
+d 651 2 0 0 0
+c
+d 690 2 1 0 0
+c
+d 823 4 1 0 0
+c
+d 835 1 1 0 0
+c
+d 791 1 0 0 0
+c
+d 793 3 0 0 0
+c
+d 650 3 0 0 0
+c
+d 661 1 0 0 0
+c
+d 146 3 0 0 0
+c
+d 148 1 0 0 0
+c
+d 835 1 0 0 0
+c
+d 836 3 0 0 0
+c
+d 551 1 0 0 0
+c
+d 564 4 0 0 0
+c
+d 213 1 0 1 0
+c
+d 242 1 1 0 0
+c
+d 427 4 2 0 0
+c
+d 428 1 0 0 0
+c
+d 101 1 0 1 0
+c
+d 111 1 0 0 0
+c
+d 1262 4 0 0 0
+c
+d 734 1 0 0 0
+c
+d 769 2 1 0 0
+c
+d 772 3 1 0 0
+c
+d 570 2 0 0 0
+c
+d 572 1 0 0 0
+c
+d 1113 2 0 1 0
+c
+d 1115 1 0 1 0
+c
+d 327 5 1 1 0
+c
+d 861 1 1 0 0
+c
+d 875 5 1 0 0
+c
+d 46 4 0 1 0
+c
+d 74 1 0 0 0
+c
+d 1313 1 0 1 0
+c
+d 551 1 0 1 0
+c
+d 564 3 0 0 0
+c
+d 565 1 0 0 0
+c
+d 84 2 0 0 0
+c
+d 1294 2 0 1 0
+c
+d 536 1 1 0 0
+c
+d 537 1 0 0 0
+c
+d 539 1 0 0 0
+c
+d 547 1 0 0 0
+c
+d 565 7 1 0 0
+c
+d 558 1 0 0 0
+c
+d 559 1 0 0 0
+c
+d 551 2 0 1 0
+c
+d 608 2 1 1 0
+c
+d 990 1 0 0 0
+c
+d 507 4 1 2 0
+c
+d 806 3 1 1 0
+c
+d 807 1 0 1 0
+c
+d 694 4 2 0 0
+c
+d 43 3 0 1 0
+c
+d 44 2 0 0 0
+c
+d 1185 4 0 0 0
+c
+d 1201 1 0 0 0
+c
+d 513 1 0 0 0
+c
+d 523 4 0 0 0
+c
+d 524 2 1 0 0
+c
+d 554 1 0 0 0
+c
+d 556 2 1 0 0
+c
+d 927 5 0 0 0
+c
+d 120 1 0 0 0
+c
+d 126 1 0 1 0
+c
+d 21 5 0 0 0
+c
+d 570 4 0 2 0
+c
+d 1057 1 0 0 0
+c
+d 1158 4 0 1 0
+c
+d 1163 1 0 1 0
+c
+d 131 1 0 1 0
+c
+d 523 3 1 0 0
+c
+d 524 1 0 1 0
+c
+d 437 4 1 1 0
+c
+d 21 4 0 0 0
+c
+d 737 1 0 0 0
+c
+d 753 3 0 1 0
+c
+d 754 1 0 0 0
+c
+d 597 5 1 0 0
+c
+d 1266 5 0 0 0
+c
+d 5 6 0 0 0
+c
+d 550 1 0 0 0
+c
+d 551 1 0 1 0
+c
+d 550 2 0 0 0
+c
+d 551 1 0 0 0
+c
+d 553 1 0 0 0
+c
+d 101 3 0 0 0
+c
+d 111 1 0 0 0
+c
+d 1177 5 0 0 0
+c
+d 62 5 1 0 0
+c
+d 64 1 0 0 0
+c
+d 65 1 1 0 0
+c
+d 419 1 0 1 0
+c
+d 423 3 1 0 0
+c
+d 432 1 0 0 0
+c
+d 156 1 0 0 0
+c
+d 400 3 0 0 0
+c
+d 384 4 0 0 0
+c
+d 386 1 1 0 0
+c
+d 1073 1 1 0 0
+c
+d 1074 3 1 0 0
+c
+d 602 4 0 0 0
+c
+d 806 5 2 0 0
+c
+d 164 3 0 0 0
+c
+d 1104 1 0 1 0
+c
+d 551 2 0 2 0
+c
+d 1110 5 0 0 0
+c
+d 532 1 0 0 0
+c
+d 533 1 0 0 0
+c
+d 534 2 0 0 0
+c
+d 608 3 2 0 0
+c
+d 616 1 0 0 0
+c
+d 1040 1 0 0 0
+c
+d 888 3 0 0 0
+c
+d 606 3 1 0 0
+c
+d 618 1 1 0 0
+c
+d 619 1 0 0 0
+c
+d 84 1 0 0 0
+c
+d 1285 4 0 0 0
+c
+d 1286 1 0 0 0
+c
+d 795 5 1 0 0
+c
+d 825 1 0 0 0
+c
+d 467 1 0 0 0
+c
+d 468 2 1 0 0
+c
+d 84 2 0 1 0
+c
+d 796 4 0 0 0
+c
+d 844 1 1 0 0
+c
+d 851 5 1 0 0
+c
+d 241 1 0 0 0
+c
+d 248 1 0 0 0
+c
+d 39 1 0 1 0
+c
+d 43 3 0 0 0
+c
+d 87 4 0 0 0
+c
+d 89 1 0 1 0
+c
+d 157 5 0 0 0
+c
+d 853 1 1 0 0
+c
+d 861 5 1 0 0
+c
+d 87 2 0 0 0
+c
+d 89 1 0 0 0
+c
+d 157 4 2 0 0
+c
+d 791 3 0 0 0
+c
+d 985 1 0 0 0
+c
+d 986 1 0 0 0
+c
+d 987 2 0 0 0
+c
+d 635 5 0 0 0
+c
+d 636 1 0 0 0
+c
+d 348 4 2 0 0
+c
+d 363 1 0 0 0
+c
+d 276 6 1 1 0
+c
+d 436 2 1 0 0
+c
+d 437 4 1 0 0
+c
+d 1281 5 1 0 0
+c
+d 574 3 1 0 0
+c
+d 795 1 0 0 0
+c
+d 377 3 1 0 0
+c
+d 413 4 0 0 0
+c
+d 419 1 1 0 0
+c
+d 767 4 0 1 0
+c
+d 861 1 0 1 0
+c
+d 208 5 1 0 0
+c
+d 1244 1 0 0 0
+c
+d 166 5 1 0 0
+c
+d 551 4 1 0 0
+c
+d 564 1 0 0 0
+c
+d 276 1 0 0 0
+c
+d 277 2 0 1 0
+c
+d 301 3 1 1 0
+c
+d 734 2 1 1 0
+c
+d 737 1 0 0 0
+c
+d 127 1 0 0 0
+c
+d 129 1 0 0 0
+c
+d 533 3 0 0 0
+c
+d 276 1 0 0 0
+c
+d 288 1 0 0 0
+c
+d 300 3 1 1 0
+c
+d 836 5 2 0 0
+c
+d 353 2 0 0 0
+c
+d 168 2 0 1 0
+c
+d 369 2 1 0 0
+c
+d 370 1 0 0 0
+c
+d 334 2 0 2 0
+c
+d 335 3 1 0 0
+c
+d 823 3 1 0 0
+c
+d 507 5 1 1 0
+c
+d 570 4 0 1 0
+c
+d 1057 1 0 1 0
+c
+d 799 3 1 0 0
+c
+d 844 2 1 0 0
+c
+d 1009 3 0 0 0
+c
+d 990 4 1 1 0
+c
+d 785 3 0 0 0
+c
+d 815 1 0 0 0
+c
+d 817 4 0 1 0
+c
+d 204 1 0 1 0
+c
+d 205 4 1 0 0
+c
+d 1241 1 0 0 0
+c
+d 340 3 0 0 0
+c
+d 167 5 1 1 0
+c
+d 152 1 1 0 0
+c
+d 1096 3 0 1 0
+c
+d 334 2 1 0 0
+c
+d 335 3 1 0 0
+c
+d 87 1 0 0 0
+c
+d 89 1 0 1 0
+c
+d 651 1 0 0 0
+c
+d 690 2 0 0 0
+c
+d 101 5 1 1 0
+c
+d 749 4 2 0 0
+c
+d 989 5 1 2 0
+c
+d 565 1 0 1 0
+c
+d 570 2 0 1 0
+c
+d 457 1 0 0 0
+c
+d 460 3 1 1 0
+c
+d 749 6 2 0 0
+c
+d 195 1 0 0 0
+c
+d 205 4 1 1 0
+c
+d 75 6 1 0 0
+c
+d 551 1 0 0 0
+c
+d 564 1 0 0 0
+c
+d 1017 2 0 0 0
+c
+d 1021 3 0 0 0
+c
+d 811 2 0 0 0
+c
+d 815 2 0 1 0
+c
+d 570 6 1 0 0
+c
+d 572 1 0 0 0
+c
+d 21 3 0 0 0
+c
+d 550 1 1 0 0
+c
+d 556 2 1 0 0
+c
+d 557 1 0 0 0
+c
+d 18 1 0 0 0
+c
+d 77 3 1 0 0
+c
+d 157 3 1 0 0
+c
+d 551 5 1 0 0
+c
+d 259 3 1 1 0
+c
+d 1226 1 0 0 0
+c
+d 75 5 1 0 0
+c
+d 556 2 0 0 0
+c
+d 557 3 0 0 0
+c
+d 565 1 0 0 0
+c
+d 315 4 1 0 0
+c
+d 836 3 1 1 0
+c
+d 837 3 0 0 0
+c
+d 343 6 1 1 0
+c
+d 437 5 1 0 0
+c
+d 427 2 0 0 0
+c
+d 584 3 1 0 0
+c
+d 653 4 0 0 0
+c
+d 654 1 0 0 0
+c
+d 661 1 0 0 0
+c
+d 196 4 1 1 0
+c
+d 197 1 0 0 0
+c
+d 176 1 0 0 0
+c
+d 194 2 0 0 0
+c
+d 204 1 0 0 0
+c
+d 286 3 1 0 0
+c
+d 299 1 1 0 0
+c
+d 835 3 1 0 0
+c
+d 836 2 0 0 0
+c
+d 978 4 0 2 0
+c
+d 979 1 0 0 0
+c
+d 775 4 0 1 0
+c
+d 883 1 0 0 0
+c
+d 842 3 1 1 0
+c
+d 848 1 0 0 0
+c
+d 769 5 0 1 0
+c
+d 184 2 0 0 0
+c
+d 185 1 1 0 0
+c
+d 196 1 0 0 0
+c
+d 348 4 2 0 0
+c
+d 146 1 0 0 0
+c
+d 294 2 0 0 0
+c
+d 1185 2 0 0 0
+c
+d 1186 2 0 0 0
+c
+d 1187 1 0 0 0
+c
+d 437 1 1 0 0
+c
+d 507 2 1 0 0
+c
+d 508 1 0 0 0
+c
+d 1070 1 1 0 0
+c
+d 1073 2 0 0 0
+c
+d 1074 3 1 0 0
+c
+d 989 4 1 2 0
+c
+d 424 4 1 1 0
+c
+d 1079 1 0 1 0
+c
+d 835 4 0 0 0
+c
+d 836 2 0 0 0
+c
+d 550 3 1 0 0
+c
+d 551 1 0 0 0
+c
+d 458 4 2 0 0
+c
+d 101 3 1 0 0
+c
+d 112 2 0 0 0
+c
+d 608 1 1 0 0
+c
+d 111 2 1 0 0
+c
+d 146 3 0 0 0
+c
+d 681 1 0 1 0
+c
+d 682 4 0 1 0
+c
+d 19 1 1 0 0
+c
+d 1008 3 1 0 0
+c
+d 559 3 1 0 0
+c
+d 560 2 1 0 0
+c
+d 533 2 0 0 0
+c
+d 156 8 2 0 0
+c
+d 686 4 2 0 0
+c
+d 156 4 0 0 0
+c
+d 166 1 0 0 0
+c
+d 400 1 0 0 0
+c
+d 156 4 1 0 0
+c
+d 163 1 0 0 0
+c
+d 806 4 1 1 0
+c
+d 807 1 0 0 0
+c
+d 46 1 0 1 0
+c
+d 75 1 0 0 0
+c
+d 622 5 0 1 0
+c
+d 75 1 0 0 0
+c
+d 86 2 0 0 0
+c
+d 551 5 0 1 0
+c
+d 507 6 1 0 0
+c
+d 74 3 1 0 0
+c
+d 75 2 1 0 0
+c
+d 757 1 1 0 0
+c
+d 758 4 0 1 0
+c
+d 1110 2 0 1 0
+c
+d 1111 1 0 0 0
+c
+d 344 1 0 1 0
+c
+d 346 3 1 0 0
+c
+d 1146 1 0 0 0
+c
+d 527 5 1 1 0
+c
+d 888 1 0 0 0
+c
+d 889 5 1 0 0
+c
+d 157 3 0 0 0
+c
+d 162 1 0 0 0
+c
+d 101 5 2 0 0
+c
+d 125 1 0 0 0
+c
+d 126 4 0 0 0
+c
+d 127 1 0 1 0
+c
+d 532 1 0 0 0
+c
+d 537 4 0 0 0
+c
+d 554 1 0 0 0
+c
+d 556 4 0 0 0
+c
+d 734 1 0 0 0
+c
+d 735 3 1 0 0
+c
+d 737 1 0 0 0
+c
+d 89 1 0 1 0
+c
+d 550 3 0 0 0
+c
+d 778 1 0 1 0
+c
+d 419 5 0 0 0
+c
+d 205 5 0 0 0
+c
+d 206 1 0 0 0
+c
+d 146 1 0 0 0
+c
+d 292 2 0 0 0
+c
+d 294 1 1 0 0
+c
+d 534 3 1 0 0
+c
+d 423 2 0 0 0
+c
+d 427 3 1 0 0
+c
+d 430 1 0 1 0
+c
+d 428 3 0 1 0
+c
+d 734 3 1 0 0
+c
+d 126 2 0 0 0
+c
+d 127 2 0 0 0
+c
+d 46 2 0 1 0
+c
+d 1170 1 0 0 0
+c
+d 1185 3 1 0 0
+c
+d 1188 1 1 0 0
+c
+d 889 3 2 0 0
+c
+d 891 1 0 0 0
+c
+d 46 4 0 1 0
+c
+d 75 2 0 0 0
+c
+d 270 1 0 0 0
+c
+d 272 1 0 1 0
+c
+d 558 1 0 1 0
+c
+d 559 2 1 0 0
+c
+d 560 1 0 0 0
+c
+d 806 4 2 0 0
+c
+d 570 1 0 0 0
+c
+d 795 4 0 0 0
+c
+d 591 2 0 1 0
+c
+d 75 1 0 0 0
+c
+d 86 4 0 1 0
+c
+d 743 1 0 1 0
+c
+d 746 3 1 0 0
+c
+d 1165 4 2 0 0
+c
+d 1106 1 0 0 0
+c
+d 1107 1 1 0 0
+c
+d 1108 2 0 0 0
+c
+d 1110 1 0 1 0
+c
+d 132 2 1 0 0
+c
+d 513 1 0 0 0
+c
+d 87 2 0 0 0
+c
+d 419 2 0 1 0
+c
+d 1080 3 1 1 0
+c
+d 606 1 0 0 0
+c
+d 608 1 0 1 0
+c
+d 499 4 1 1 0
+c
+d 511 1 0 0 0
+c
+d 823 2 1 0 0
+c
+d 835 2 1 0 0
+c
+d 900 1 0 0 0
+c
+d 24 1 0 0 0
+c
+d 25 2 0 0 0
+c
+d 26 1 0 0 0
+c
+d 27 1 0 0 0
+c
+d 1269 2 1 0 0
+c
+d 1270 3 1 0 0
+c
+d 1110 4 0 0 0
+c
+d 392 3 0 0 0
+c
+d 393 2 0 0 0
+c
+d 26 1 0 0 0
+c
+d 39 3 0 0 0
+c
+d 75 2 0 1 0
+c
+d 334 1 0 1 0
+c
+d 341 3 1 0 0
+c
+d 287 6 2 0 0
+c
+d 157 3 0 2 0
+c
+d 101 5 1 1 0
+c
+d 33 1 1 0 0
+c
+d 34 2 0 0 0
+c
+d 686 3 0 0 0
+c
+d 691 2 0 0 0
+c
+d 101 5 1 0 0
+c
+d 130 3 2 0 0
+c
+d 132 1 0 0 0
+c
+d 1258 1 0 0 0
+c
+d 1195 4 1 0 0
+c
+d 556 4 0 0 0
+c
+d 565 1 0 1 0
+c
+d 437 6 1 1 0
+c
+d 836 3 1 1 0
+c
+d 838 2 0 0 0
+c
+d 1176 1 0 1 0
+c
+d 1179 2 1 0 0
+c
+d 46 1 0 0 0
+c
+d 59 2 0 0 0
+c
+d 554 1 0 1 0
+c
+d 556 4 0 1 0
+c
+d 99 1 1 0 0
+c
+d 1002 1 0 0 0
+c
+d 1003 3 1 0 0
+c
+d 753 3 0 0 0
+c
+d 754 1 0 0 0
+c
+d 848 4 1 0 0
+c
+d 424 4 2 0 0
+c
+d 795 5 0 2 0
+c
+d 148 3 1 0 0
+c
+d 240 1 1 0 0
+c
+d 419 1 0 0 0
+c
+d 1080 2 1 0 0
+c
+d 46 1 0 1 0
+c
+d 75 1 0 0 0
+c
+d 185 1 0 0 0
+c
+d 186 4 0 0 0
+c
+d 749 4 1 2 0
+c
+d 959 2 1 0 0
+c
+d 962 3 1 0 0
+c
+d 965 3 1 0 0
+c
+d 966 1 0 1 0
+c
+d 965 5 1 0 0
+c
+d 970 1 1 0 0
+c
+d 572 1 0 0 0
+c
+d 574 2 1 0 0
+c
+d 795 2 1 0 0
+c
+d 568 1 0 0 0
+c
+d 572 5 1 0 0
+c
+d 311 1 0 0 0
+c
+d 327 3 1 0 0
+c
+d 88 1 0 0 0
+c
+d 775 3 0 0 0
+c
+d 780 1 0 1 0
+c
+d 838 4 1 2 0
+c
+d 157 3 1 1 0
+c
+d 159 1 0 0 0
+c
+d 507 3 1 0 0
+c
+d 558 1 0 0 0
+c
+d 93 1 0 0 0
+c
+d 114 3 0 0 0
+c
+d 437 2 0 0 0
+c
+d 438 1 0 0 0
+c
+d 498 1 0 0 0
+c
+d 132 3 1 0 0
+c
+d 133 1 1 0 0
+c
+d 965 2 0 2 0
+c
+d 982 1 0 0 0
+c
+d 1087 4 0 1 0
+c
+d 1094 1 0 0 0
+c
+d 30 3 1 1 0
+c
+d 157 2 1 0 0
+c
+d 356 1 0 0 0
+c
+d 358 1 0 0 0
+c
+d 18 3 1 0 0
+c
+d 424 6 1 1 0
+c
+d 298 1 1 0 0
+c
+d 323 3 1 0 0
+c
+d 565 1 1 0 0
+c
+d 568 2 0 0 0
+c
+d 854 5 2 0 0
+c
+d 559 2 0 0 0
+c
+d 560 3 1 0 0
+c
+d 768 1 0 1 0
+c
+d 769 3 1 0 0
+c
+d 354 3 1 1 0
+c
+d 355 3 1 0 0
+c
+d 791 2 0 1 0
+c
+d 793 1 0 1 0
+c
+d 156 5 0 0 0
+c
+d 273 3 1 0 0
+c
+d 1229 2 0 0 0
+c
+d 87 4 0 0 0
+c
+d 89 1 1 0 0
+c
+d 348 4 2 0 0
+c
+d 384 2 0 0 0
+c
+d 385 1 1 0 0
+c
+d 386 1 0 0 0
+c
+d 724 4 1 1 0
+c
+d 734 1 0 1 0
+c
+d 287 1 0 0 0
+c
+d 288 2 1 0 0
+c
+d 248 5 1 0 0
+c
+d 253 5 1 1 0
+c
+d 602 3 1 0 0
+c
+d 878 4 1 0 0
+c
+d 881 1 0 0 0
+c
+d 19 1 1 0 0
+c
+d 622 2 0 0 0
+c
+d 1008 1 0 0 0
+c
+d 125 3 0 0 0
+c
+d 990 4 1 0 0
+c
+d 823 5 0 1 0
+c
+d 29 1 1 0 0
+c
+d 30 3 1 0 0
+c
+d 791 3 0 0 0
+c
+d 792 1 0 0 0
+c
+d 793 1 0 0 0
+c
+d 511 3 1 1 0
+c
+d 1012 1 1 0 0
+c
+d 1013 2 0 1 0
+c
+d 1033 1 0 0 0
+c
+d 753 1 0 0 0
+c
+d 755 2 1 0 0
+c
+d 182 1 0 0 0
+c
+d 191 3 1 1 0
+c
+d 775 1 0 0 0
+c
+d 786 3 0 1 0
+c
+d 395 4 0 0 0
+c
+d 155 1 0 0 0
+c
+d 176 3 0 0 0
+c
+d 177 1 1 0 0
+c
+d 775 1 0 1 0
+c
+d 782 1 0 0 0
+c
+d 783 2 1 0 0
+c
+d 784 1 1 0 0
+c
+d 152 4 1 1 0
+c
+d 575 4 1 0 0
+c
+d 578 1 1 0 0
+c
+d 478 5 2 0 0
+c
+d 46 2 0 0 0
+c
+d 437 1 0 0 0
+c
+d 574 3 2 0 0
+c
+d 157 1 0 1 0
+c
+d 178 2 0 0 0
+c
+d 591 3 2 0 0
+c
+d 597 1 0 0 0
+c
+d 534 4 1 0 0
+c
+d 539 1 0 0 0
+c
+d 547 1 0 1 0
+c
+d 75 5 1 0 0
+c
+d 753 1 0 1 0
+c
+d 754 1 0 1 0
+c
+d 755 1 0 0 0
+c
+d 906 3 0 0 0
+c
+d 911 1 0 0 0
+c
+d 84 4 1 0 0
+c
+d 181 1 0 0 0
+c
+d 195 2 1 0 0
+c
+d 203 1 0 1 0
+c
+d 205 1 0 1 0
+c
+d 507 3 1 0 0
+c
+d 558 1 0 1 0
+c
+d 437 2 0 1 0
+c
+d 558 2 1 0 0
+c
+d 1071 1 0 0 0
+c
+d 1072 3 0 0 0
+c
+d 89 1 0 1 0
+c
+d 550 4 0 1 0
+c
+d 305 8 2 0 0
+c
+d 437 1 1 0 0
+c
+d 457 5 1 0 0
+c
+d 560 1 0 0 0
+c
+d 561 3 1 1 0
+c
+d 509 2 0 1 0
+c
+d 1070 2 1 0 0
+c
+d 1073 1 0 1 0
+c
+d 418 1 0 0 0
+c
+d 419 1 0 0 0
+c
+d 1086 1 0 0 0
+c
+d 1194 6 1 1 0
+c
+d 734 4 0 1 0
+c
+d 735 1 0 0 0
+c
+d 146 4 1 2 0
+c
+d 516 3 0 2 0
+c
+d 517 1 0 0 0
+c
+d 520 2 0 0 0
+c
+d 84 4 1 0 0
+c
+d 87 3 0 2 0
+c
+d 44 4 1 1 0
+c
+d 162 1 0 0 0
+c
+d 163 3 1 0 0
+c
+d 164 1 0 0 0
+c
+d 511 1 0 0 0
+c
+d 522 5 1 1 0
+c
+d 599 5 2 0 0
+c
+d 146 4 1 0 0
+c
+d 33 1 0 0 0
+c
+d 46 3 0 0 0
+c
+d 1313 2 0 0 0
+c
+d 75 4 0 2 0
+c
+d 86 1 0 0 0
+c
+d 88 1 0 0 0
+c
+d 276 1 0 1 0
+c
+d 301 3 1 0 0
+c
+d 312 1 0 0 0
+c
+d 572 2 0 0 0
+c
+d 574 1 0 0 0
+c
+d 246 1 1 0 0
+c
+d 252 1 0 0 0
+c
+d 262 1 0 1 0
+c
+d 505 4 0 0 0
+c
+d 74 1 0 1 0
+c
+d 75 1 0 0 0
+c
+d 1298 1 0 1 0
+c
+d 1299 2 0 0 0
+c
+d 1269 3 1 1 0
+c
+d 1270 1 0 1 0
+c
+d 159 3 1 0 0
+c
+d 527 4 2 0 0
+c
+d 544 1 0 0 0
+c
+d 253 4 1 1 0
+c
+d 195 2 0 1 0
+c
+d 206 1 0 0 0
+c
+d 1246 1 0 0 0
+c
+d 54 1 0 0 0
+c
+d 55 3 0 0 0
+c
+d 66 1 0 0 0
+c
+d 132 6 1 1 0
+c
+d 167 1 0 0 0
+c
+d 369 3 0 1 0
+c
+d 382 1 0 1 0
+c
+d 196 4 0 1 0
+c
+d 737 1 0 1 0
+c
+d 738 3 1 0 0
+c
+d 599 3 0 1 0
+c
+d 455 5 0 1 0
+c
+d 570 3 0 0 0
+c
+d 572 1 0 0 0
+c
+d 18 4 2 0 0
+c
+d 498 4 1 0 0
+c
+d 500 1 0 0 0
+c
+d 246 3 0 0 0
+c
+d 252 1 0 0 0
+c
+d 559 1 1 0 0
+c
+d 561 1 0 0 0
+c
+d 568 1 0 0 0
+c
+d 599 1 0 1 0
+c
+d 606 4 1 0 0
+c
+d 767 4 0 0 0
+c
+d 540 1 0 0 0
+c
+d 543 4 0 0 0
+c
+d 333 5 2 0 0
+c
+d 686 5 2 0 0
+c
+d 437 2 1 0 0
+c
+d 454 4 1 0 0
+c
+d 217 1 0 0 0
+c
+d 241 3 0 0 0
+c
+d 242 1 0 0 0
+c
+d 7 2 1 0 0
+c
+d 262 1 0 0 0
+c
+d 279 2 0 1 0
+c
+d 634 1 0 0 0
+c
+d 635 1 0 0 0
+c
+d 637 1 0 0 0
+c
+d 334 3 1 1 0
+c
+d 341 1 0 1 0
+c
+d 693 4 1 0 0
+c
+d 951 1 1 0 0
+c
+d 19 1 1 0 0
+c
+d 21 3 1 0 0
+c
+d 1024 1 0 0 0
+c
+d 327 1 0 1 0
+c
+d 334 3 1 1 0
+c
+d 716 5 1 1 0
+c
+d 610 4 0 2 0
+c
+d 341 4 0 1 0
+c
+d 1148 1 0 1 0
+c
+d 801 3 1 1 0
+c
+d 802 1 0 1 0
+c
+d 167 4 1 1 0
+c
+d 168 1 0 0 0
+c
+d 157 5 1 0 0
+c
+d 305 1 1 0 0
+c
+d 341 3 1 0 0
+c
+d 550 2 1 0 0
+c
+d 554 3 0 0 0
+c
+d 1007 1 0 0 0
+c
+d 1008 4 1 1 0
+c
+d 737 4 1 0 0
+c
+d 846 1 1 0 0
+c
+d 262 1 0 0 0
+c
+d 273 2 0 0 0
+c
+d 791 5 1 0 0
+c
+d 75 2 0 2 0
+c
+d 529 5 2 0 0
+c
+d 1062 1 0 0 0
+c
+d 159 1 1 0 0
+c
+d 213 1 0 0 0
+c
+d 242 2 1 0 0
+c
+d 262 1 0 0 0
+c
+d 1073 4 1 1 0
+c
+d 1074 2 0 0 0
+c
+d 131 4 1 0 0
+c
+d 46 2 0 1 0
+c
+d 1314 1 0 0 0
+c
+d 164 3 0 1 0
+c
+d 166 1 0 0 0
+c
+d 861 3 0 0 0
+c
+d 869 1 1 0 0
+c
+d 870 1 0 1 0
+c
+d 1113 2 0 0 0
+c
+d 1114 3 0 0 0
+c
+d 1115 1 0 0 0
+c
+d 39 1 0 0 0
+c
+d 40 1 0 0 0
+c
+d 41 1 0 0 0
+c
+d 56 1 1 0 0
+c
+d 1303 4 1 0 0
+c
+d 1304 1 0 0 0
+c
+d 568 1 0 0 0
+c
+d 569 2 0 0 0
+c
+d 572 4 0 0 0
+c
+d 10 1 0 0 0
+c
+d 11 3 1 0 0
+c
+d 78 1 0 0 0
+c
+d 79 3 1 1 0
+c
+d 734 6 2 0 0
+c
+d 749 1 0 0 0
+c
+d 857 1 0 1 0
+c
+d 893 2 1 0 0
+c
+d 423 1 0 1 0
+c
+d 424 2 0 0 0
+c
+d 157 3 1 1 0
+c
+d 159 1 0 0 0
+c
+d 1266 5 0 2 0
+c
+d 502 2 0 0 0
+c
+d 503 4 0 0 0
+c
+d 608 2 0 1 0
+c
+d 614 1 1 0 0
+c
+d 101 1 0 1 0
+c
+d 597 4 0 0 0
+c
+d 178 1 0 0 0
+c
+d 181 1 0 0 0
+c
+d 558 4 1 0 0
+c
+d 559 1 1 0 0
+c
+d 125 5 0 0 0
+c
+d 126 1 0 0 0
+c
+d 301 6 2 0 0
+c
+d 132 1 0 0 0
+c
+d 513 2 0 0 0
+c
+d 146 5 1 0 0
+c
+d 151 1 0 0 0
+c
+d 332 3 0 0 0
+c
+d 56 1 0 0 0
+c
+d 65 4 0 0 0
+c
+d 829 4 0 1 0
+c
+d 835 1 0 1 0
+c
+d 69 5 1 1 0
+c
+d 71 1 0 0 0
+c
+d 623 4 0 0 0
+c
+d 626 1 0 0 0
+c
+d 1 4 0 0 0
+c
+d 276 1 1 0 0
+c
+d 301 3 1 0 0
+c
+d 312 1 0 0 0
+c
+d 133 4 1 2 0
+c
+d 146 1 0 0 0
+c
+d 164 4 2 0 0
+c
+d 523 5 2 0 0
+c
+d 426 1 0 0 0
+c
+d 591 3 0 2 0
+c
+d 384 4 0 0 0
+c
+d 1134 1 0 0 0
+c
+d 392 3 0 0 0
+c
+d 393 1 0 0 0
+c
+d 394 1 0 0 0
+c
+d 556 1 0 0 0
+c
+d 564 2 0 0 0
+c
+d 565 2 0 2 0
+c
+d 921 3 1 0 0
+c
+d 922 1 0 0 0
+c
+d 166 1 0 0 0
+c
+d 395 2 0 1 0
+c
+d 1103 3 1 0 0
+c
+d 188 1 0 0 0
+c
+d 212 1 0 0 0
+c
+d 186 1 0 1 0
+c
+d 213 3 1 0 0
+c
+d 242 1 0 1 0
+c
+d 965 1 0 1 0
+c
+d 983 2 0 0 0
+c
+d 984 3 0 0 0
+c
+d 7 6 2 0 0
+c
+d 211 4 1 1 0
+c
+d 1238 1 0 1 0
+c
+d 167 3 1 0 0
+c
+d 395 1 0 1 0
+c
+d 24 1 0 0 0
+c
+d 26 4 2 0 0
+c
+d 159 4 0 2 0
+c
+d 225 3 1 1 0
+c
+d 989 3 1 1 0
+c
+d 152 4 1 1 0
+c
+d 155 1 0 0 0
+c
+d 417 1 0 0 0
+c
+d 922 2 0 1 0
+c
+d 926 3 1 1 0
+c
+d 167 5 1 1 0
+c
+d 369 1 0 0 0
+c
+d 533 1 0 0 0
+c
+d 534 4 0 2 0
+c
+d 302 1 0 0 0
+c
+d 303 1 0 0 0
+c
+d 1157 2 1 0 0
+c
+d 1159 3 0 0 0
+c
+d 514 1 0 0 0
+c
+d 515 1 0 0 0
+c
+d 516 4 0 0 0
+c
+d 1158 4 0 0 0
+c
+d 457 6 2 0 0
+c
+d 458 1 0 0 0
+c
+d 597 1 0 0 0
+c
+d 598 1 0 0 0
+c
+d 599 4 0 0 0
+c
+d 529 3 0 1 0
+c
+d 84 3 0 0 0
+c
+d 1285 2 0 2 0
+c
+d 343 2 0 1 0
+c
+d 437 2 1 0 0
+c
+d 451 1 0 1 0
+c
+d 167 5 1 0 0
+c
+d 168 1 0 0 0
+c
+d 51 2 1 0 0
+c
+d 56 2 1 0 0
+c
+d 57 1 0 1 0
+c
+d 507 2 1 0 0
+c
+d 1070 2 0 1 0
+c
+d 367 3 1 0 0
+c
+d 1125 2 0 1 0
+c
+d 348 4 0 0 0
+c
+d 12 3 0 0 0
+c
+d 1271 1 0 0 0
+c
+d 1272 1 0 0 0
+c
+d 650 5 2 1 0
+c
+d 157 1 1 0 0
+c
+d 242 1 0 0 0
+c
+d 279 1 0 0 0
+c
+d 305 1 0 1 0
+c
+d 84 1 0 0 0
+c
+d 85 1 1 0 0
+c
+d 1278 1 0 0 0
+c
+d 1192 6 1 0 0
+c
+d 763 3 1 0 0
+c
+d 942 1 0 1 0
+c
+d 388 4 0 0 0
+c
+d 146 1 0 0 0
+c
+d 153 2 1 0 0
+c
+d 155 1 0 1 0
+c
+d 846 1 0 0 0
+c
+d 854 2 0 0 0
+c
+d 348 6 2 0 0
+c
+d 275 4 0 0 0
+c
+d 597 2 0 0 0
+c
+d 606 1 0 0 0
+c
+d 301 4 1 1 0
+c
+d 313 1 0 1 0
+c
+d 148 1 0 0 0
+c
+d 252 4 1 0 0
+c
+d 823 5 2 0 0
+c
+d 565 5 1 1 0
+c
+d 840 5 1 2 0
+c
+d 795 1 1 0 0
+c
+d 807 1 0 0 0
+c
+d 907 1 0 0 0
+c
+d 301 2 0 0 0
+c
+d 310 1 0 0 0
+c
+d 311 1 0 0 0
+c
+d 966 1 0 0 0
+c
+d 967 3 0 0 0
+c
+d 429 3 0 0 0
+c
+d 844 1 0 0 0
+c
+d 845 3 1 0 0
+c
+d 29 1 1 0 0
+c
+d 31 4 1 0 0
+c
+d 551 1 0 0 0
+c
+d 564 6 0 0 0
+c
+d 855 5 0 0 0
+c
+d 262 3 2 0 0
+c
+d 278 1 0 0 0
+c
+d 753 3 0 0 0
+c
+d 430 1 1 0 0
+c
+d 436 3 1 0 0
+c
+d 437 1 0 0 0
+c
+d 505 5 2 0 0
+c
+d 133 1 0 0 0
+c
+d 294 3 0 0 0
+c
+d 157 4 0 1 0
+c
+d 159 1 0 1 0
+c
+d 294 4 0 0 0
+c
+d 335 6 1 0 0
+c
+d 738 5 1 0 0
+c
+d 157 4 0 1 0
+c
+d 1252 1 0 0 0
+c
+d 423 4 1 0 0
+c
+d 1087 3 0 0 0
+c
+d 1090 1 0 0 0
+c
+d 29 1 0 1 0
+c
+d 1315 1 0 0 0
+c
+d 1318 1 0 1 0
+c
+d 769 2 0 0 0
+c
+d 939 2 1 0 0
+c
+d 875 3 1 0 0
+c
+d 876 1 0 0 0
+c
+d 167 3 1 1 0
+c
+d 369 1 0 0 0
+c
+d 156 1 0 1 0
+c
+d 400 3 0 1 0
+c
+d 378 1 1 0 0
+c
+d 1111 4 0 0 0
+c
+d 75 1 0 0 0
+c
+d 84 1 1 0 0
+c
+d 660 5 2 1 0
+c
+d 662 1 0 0 0
+c
+d 686 1 0 1 0
+c
+d 959 2 1 0 0
+c
+d 153 1 0 0 0
+c
+d 155 2 0 0 0
+c
+d 176 1 0 1 0
+c
+d 541 5 1 1 0
+c
+d 753 5 1 0 0
+c
+d 943 1 0 1 0
+c
+d 84 1 1 0 0
+c
+d 1274 4 1 0 0
+c
+d 1275 1 0 0 0
+c
+d 437 3 1 1 0
+c
+d 157 3 1 0 0
+c
+d 175 1 0 0 0
+c
+d 437 3 0 0 0
+c
+d 1045 1 0 0 0
+c
+d 1108 1 0 1 0
+c
+d 1110 4 1 1 0
+c
+d 340 5 0 1 0
+c
+d 11 1 0 1 0
+c
+d 12 1 1 0 0
+c
+d 1270 1 0 0 0
+c
+d 859 2 0 0 0
+c
+d 871 2 0 1 0
+c
+d 55 3 1 0 0
+c
+d 691 1 0 0 0
+c
+d 694 1 1 0 0
+c
+d 121 1 1 0 0
+c
+d 124 3 1 0 0
+c
+d 836 2 1 0 0
+c
+d 838 3 0 0 0
+c
+d 650 1 0 0 0
+c
+d 656 3 0 0 0
+c
+d 931 6 1 0 0
+c
+d 932 1 0 0 0
+c
+d 575 1 0 0 0
+c
+d 925 4 0 0 0
+c
+d 178 3 0 0 0
+c
+d 181 2 1 0 0
+c
+d 429 1 0 0 0
+c
+d 430 2 1 0 0
+c
+d 470 1 0 0 0
+c
+d 157 5 2 0 0
+c
+d 132 2 1 0 0
+c
+d 133 3 0 0 0
+c
+d 178 3 0 0 0
+c
+d 181 2 1 0 0
+c
+d 276 1 0 0 0
+c
+d 289 1 0 0 0
+c
+d 290 1 0 0 0
+c
+d 561 1 0 0 0
+c
+d 566 4 1 0 0
+c
+d 568 1 1 0 0
+c
+d 575 4 2 0 0
+c
+d 578 1 0 0 0
+c
+d 529 5 0 0 0
+c
+d 143 1 0 1 0
+c
+d 144 3 1 1 0
+c
+d 535 4 1 0 0
+c
+d 537 1 0 0 0
+c
+d 262 4 2 0 0
+c
+d 348 4 2 0 0
+c
+d 710 5 2 0 0
+c
+d 711 1 0 0 0
+c
+d 176 1 0 1 0
+c
+d 194 2 0 1 0
+c
+d 1005 4 2 0 0
+c
+d 21 3 0 0 0
+c
+d 1024 1 0 0 0
+c
+d 75 1 0 1 0
+c
+d 775 1 0 1 0
+c
+d 791 4 1 0 0
+c
+d 826 2 0 0 0
+c
+d 876 3 1 1 0
+c
+d 878 1 0 0 0
+c
+d 511 5 1 0 0
+c
+d 516 1 0 0 0
+c
+d 301 2 0 0 0
+c
+d 311 3 0 2 0
+c
+d 775 4 1 0 0
+c
+d 886 2 1 0 0
+c
+d 66 2 0 0 0
+c
+d 597 1 0 0 0
+c
+d 598 3 0 0 0
+c
+d 600 1 0 0 0
+c
+d 10 1 0 0 0
+c
+d 1269 2 0 0 0
+c
+d 1269 3 1 0 0
+c
+d 1270 1 0 0 0
+c
+d 152 1 0 0 0
+c
+d 155 1 0 0 0
+c
+d 61 1 1 0 0
+c
+d 65 2 1 0 0
+c
+d 1303 1 0 1 0
+c
+d 436 3 1 1 0
+c
+d 806 1 0 0 0
+c
+d 807 2 0 0 0
+c
+d 808 1 0 0 0
+c
+d 96 3 1 0 0
+c
+d 111 2 1 1 0
+c
+d 262 1 0 1 0
+c
+d 270 2 1 0 0
+c
+d 437 1 0 0 0
+c
+d 453 1 0 0 0
+c
+d 454 3 1 0 0
+c
+d 7 4 1 0 0
+c
+d 1284 1 0 0 0
+c
+d 86 1 0 1 0
+c
+d 88 2 0 0 0
+c
+d 89 1 0 1 0
+c
+d 332 5 2 0 0
+c
+d 578 4 1 2 0
+c
+d 983 1 0 1 0
+c
+d 989 3 1 0 0
+c
+d 382 6 0 0 0
+c
+d 19 3 1 0 0
+c
+d 20 1 0 0 0
+c
+d 152 3 0 2 0
+c
+d 153 1 0 0 0
+c
+d 582 3 1 0 0
+c
+d 294 3 0 2 0
+c
+d 30 4 2 0 0
+c
+d 889 4 2 0 0
+c
+d 891 1 0 0 0
+c
+d 177 2 1 0 0
+c
+d 178 4 1 0 0
+c
+d 437 1 1 0 0
+c
+d 558 3 1 0 0
+c
+d 157 4 2 0 0
+c
+d 148 5 2 0 0
+c
+d 327 1 0 0 0
+c
+d 334 3 0 0 0
+c
+d 101 4 0 0 0
+c
+d 105 1 0 0 0
+c
+d 108 1 0 0 0
+c
+d 565 2 0 0 0
+c
+d 1056 1 0 0 0
+c
+d 734 2 0 0 0
+c
+d 662 2 0 2 0
+c
+d 667 2 1 0 0
+c
+d 550 1 1 0 0
+c
+d 552 3 0 0 0
+c
+d 553 1 0 0 0
+c
+d 500 1 1 0 0
+c
+d 504 1 0 0 0
+c
+d 505 1 0 1 0
+c
+d 162 4 1 2 0
+c
+d 965 1 0 1 0
+c
+d 968 2 1 0 0
+c
+d 970 1 0 1 0
+c
+d 755 5 1 0 0
+c
+d 564 2 1 0 0
+c
+d 565 3 0 0 0
+c
+d 33 1 0 0 0
+c
+d 34 1 0 0 0
+c
+d 146 4 1 0 0
+c
+d 294 1 1 0 0
+c
+d 264 2 1 0 0
+c
+d 285 3 1 0 0
+c
+d 568 1 0 0 0
+c
+d 570 1 0 1 0
+c
+d 1056 1 0 0 0
+c
+d 1057 2 0 0 0
+c
+d 157 5 2 0 0
+c
+d 74 4 0 2 0
+c
+d 242 3 2 0 0
+c
+d 262 1 0 0 0
+c
+d 273 1 1 0 0
+c
+d 287 3 1 0 0
+c
+d 51 4 2 0 0
+c
+d 52 1 0 0 0
+c
+d 86 1 0 1 0
+c
+d 87 4 0 1 0
+c
+d 278 4 2 0 0
+c
+d 578 1 0 1 0
+c
+d 686 3 1 1 0
+c
+d 287 3 1 0 0
+c
+d 428 1 0 0 0
+c
+d 430 2 1 0 0
+c
+d 431 1 1 0 0
+c
+d 400 5 1 0 0
+c
+d 529 4 1 0 0
+c
+d 540 1 0 0 0
+c
+d 437 1 0 1 0
+c
+d 470 1 0 0 0
+c
+d 89 2 0 0 0
+c
+d 532 1 1 0 0
+c
+d 548 2 0 0 0
+c
+d 276 5 1 2 0
+c
+d 550 1 0 0 0
+c
+d 551 1 0 1 0
+c
+d 131 1 0 1 0
+c
+d 523 3 1 1 0
+c
+d 700 1 1 0 0
+c
+d 701 4 1 0 0
+c
+d 772 5 1 1 0
+c
+d 774 1 0 1 0
+c
+d 906 3 1 0 0
+c
+d 907 1 1 0 0
+c
+d 427 1 0 0 0
+c
+d 584 1 0 0 0
+c
+d 585 2 0 0 0
+c
+d 565 4 0 1 0
+c
+d 791 1 0 1 0
+c
+d 101 1 0 0 0
+c
+d 1080 2 0 0 0
+c
+d 1083 1 0 0 0
+c
+d 1084 1 0 0 0
+c
+d 142 3 0 0 0
+c
+d 143 1 0 0 0
+c
+d 437 4 1 0 0
+c
+d 454 1 0 0 0
+c
+d 502 1 1 0 0
+c
+d 965 1 0 0 0
+c
+d 973 3 1 0 0
+c
+d 799 4 1 0 0
+c
+d 844 1 0 0 0
+c
+d 428 3 1 0 0
+c
+d 430 1 0 0 0
+c
+d 590 6 2 0 0
+c
+d 327 1 0 1 0
+c
+d 334 4 1 1 0
+c
+d 1185 1 0 1 0
+c
+d 1202 6 0 0 0
+c
+d 861 3 1 0 0
+c
+d 868 1 0 0 0
+c
+d 869 1 1 0 0
+c
+d 733 1 0 0 0
+c
+d 734 4 1 0 0
+c
+d 353 3 0 0 0
+c
+d 423 6 2 0 0
+c
+d 120 1 0 0 0
+c
+d 121 5 1 0 0
+c
+d 146 3 1 1 0
+c
+d 205 1 1 0 0
+c
+d 1239 3 1 0 0
+c
+d 374 1 0 1 0
+c
+d 377 3 0 1 0
+c
+d 86 2 0 0 0
+c
+d 87 2 0 0 0
+c
+d 734 5 2 0 0
+c
+d 115 3 1 0 0
+c
+d 119 1 1 0 0
+c
+d 1261 2 0 0 0
+c
+d 1009 1 0 0 0
+c
+d 1012 3 0 1 0
+c
+d 565 1 0 0 0
+c
+d 791 4 1 0 0
+c
+d 60 4 2 0 0
+c
+d 382 3 1 0 0
+c
+d 33 4 1 2 0
+c
+d 46 1 0 0 0
+c
+d 341 2 0 0 0
+c
+d 348 1 0 0 0
+c
+d 470 1 0 0 0
+c
+d 753 5 2 0 0
+c
+d 75 1 0 0 0
+c
+d 86 1 0 0 0
+c
+d 1080 5 2 0 0
+c
+d 738 2 0 0 0
+c
+d 743 3 0 1 0
+c
+d 145 3 1 0 0
+c
+d 146 1 1 0 0
+c
+d 786 4 0 0 0
+c
+d 194 3 1 0 0
+c
+d 205 1 0 0 0
+c
+d 1287 3 1 0 0
+c
+d 737 5 2 1 0
+c
+d 1127 2 1 0 0
+c
+d 1131 3 0 0 0
+c
+d 787 4 0 0 0
+c
+d 21 1 0 1 0
+c
+d 39 5 1 0 0
+c
+d 836 3 0 0 0
+c
+d 315 3 1 0 0
+c
+d 93 1 0 0 0
+c
+d 114 4 0 0 0
+c
+d 273 4 1 1 0
+c
+d 550 1 0 0 0
+c
+d 551 4 0 0 0
+c
+d 575 1 0 0 0
+c
+d 1043 1 0 0 0
+c
+d 1044 3 0 0 0
+c
+d 799 5 1 1 0
+c
+d 101 5 1 1 0
+c
+d 168 3 0 0 0
+c
+d 169 1 1 0 0
+c
+d 1136 2 1 0 0
+c
+d 1137 1 0 0 0
+c
+d 618 2 1 0 0
+c
+d 621 3 1 0 0
+c
+d 46 4 0 0 0
+c
+d 705 1 0 0 0
+c
+d 710 1 0 0 0
+c
+d 157 4 2 0 0
+c
+d 164 4 1 0 0
+c
+d 752 1 0 0 0
+c
+d 753 4 0 1 0
+c
+d 159 3 0 0 0
+c
+d 178 1 0 0 0
+c
+d 213 2 0 0 0
+c
+d 242 2 1 0 0
+c
+d 580 3 1 1 0
+c
+d 686 1 0 1 0
+c
+d 955 1 0 0 0
+c
+d 87 2 0 1 0
+c
+d 876 2 0 0 0
+c
+d 878 4 1 0 0
+c
+d 565 1 0 0 0
+c
+d 791 4 0 0 0
+c
+d 369 4 1 1 0
+c
+d 391 1 0 1 0
+c
+d 301 4 1 1 0
+c
+d 313 1 0 0 0
+c
+d 1241 7 2 0 0
+c
+d 853 1 0 0 0
+c
+d 896 5 1 0 0
+c
+d 689 1 1 0 0
+c
+d 690 1 0 0 0
+c
+d 704 3 1 1 0
+c
+d 101 3 0 0 0
+c
+d 111 1 1 0 0
+c
+d 301 3 1 0 0
+c
+d 536 1 0 0 0
+c
+d 540 2 0 0 0
+c
+d 542 3 0 0 0
+c
+d 315 1 0 1 0
+c
+d 316 4 1 1 0
+c
+d 799 6 1 1 0
+c
+d 266 1 0 0 0
+c
+d 268 1 1 0 0
+c
+d 269 2 0 1 0
+c
+d 101 1 0 1 0
+c
+d 426 4 1 0 0
+c
+d 354 1 0 1 0
+c
+d 1125 3 1 0 0
+c
+d 1128 3 0 0 0
+c
+d 550 1 0 0 0
+c
+d 551 4 1 0 0
+c
+d 75 1 0 0 0
+c
+d 86 3 0 0 0
+c
+d 88 1 0 1 0
+c
+d 575 4 2 0 0
+c
+d 733 4 1 0 0
+c
+d 511 4 1 1 0
+c
+d 274 4 1 0 0
+c
+d 276 1 1 0 0
+c
+d 737 6 2 0 0
+c
+d 49 1 0 0 0
+c
+d 50 1 1 0 0
+c
+d 734 1 0 1 0
+c
+d 608 1 0 0 0
+c
+d 990 4 2 0 0
+c
+d 75 2 0 1 0
+c
+d 274 2 0 0 0
+c
+d 276 1 0 0 0
+c
+d 580 2 0 1 0
+c
+d 956 1 0 1 0
+c
+d 957 1 1 0 0
+c
+d 858 1 0 0 0
+c
+d 872 2 0 0 0
+c
+d 1165 1 0 0 0
+c
+d 1168 3 0 0 0
+c
+d 990 3 1 0 0
+c
+d 994 3 1 0 0
+c
+d 163 1 0 0 0
+c
+d 1249 4 0 0 0
+c
+d 564 1 0 1 0
+c
+d 565 2 0 1 0
+c
+d 575 1 0 1 0
+c
+d 578 4 1 1 0
+c
+d 86 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 876 2 0 1 0
+c
+d 878 3 0 1 0
+c
+d 217 5 1 0 0
+c
+d 854 1 0 0 0
+c
+d 856 1 0 0 0
+c
+d 868 1 1 0 0
+c
+d 1083 2 0 1 0
+c
+d 1084 3 1 0 0
+c
+d 211 3 1 1 0
+c
+d 101 5 2 0 0
+c
+d 382 2 1 1 0
+c
+d 385 1 0 0 0
+c
+d 157 2 0 1 0
+c
+d 305 1 1 0 0
+c
+d 1266 4 2 0 0
+c
+d 1274 1 0 0 0
+c
+d 315 3 1 0 0
+c
+d 753 2 1 0 0
+c
+d 859 5 0 0 0
+c
+d 132 1 0 0 0
+c
+d 511 1 0 0 0
+c
+d 602 4 0 2 0
+c
+d 682 1 0 0 0
+c
+d 281 2 1 0 0
+c
+d 84 3 0 0 0
+c
+d 18 1 0 0 0
+c
+d 30 2 1 0 0
+c
+d 343 5 1 2 0
+c
+d 875 4 1 1 0
+c
+d 46 1 0 0 0
+c
+d 75 4 0 2 0
+c
+d 167 4 1 0 0
+c
+d 1105 1 1 0 0
+c
+d 663 3 1 0 0
+c
+d 278 5 1 2 0
+c
+d 799 2 0 1 0
+c
+d 806 2 1 0 0
+c
+d 811 1 1 0 0
+c
+d 142 5 1 0 0
+c
+d 534 4 0 0 0
+c
+d 340 5 2 0 0
+c
+d 93 1 0 0 0
+c
+d 1263 3 1 1 0
+c
+d 1264 1 1 0 0
+c
+d 1 1 0 0 0
+c
+d 4 2 0 0 0
+c
+d 119 5 0 0 0
+c
+d 120 1 0 1 0
+c
+d 568 1 0 0 0
+c
+d 570 3 0 0 0
+c
+d 1201 3 0 0 0
+c
+d 1202 1 0 0 0
+c
+d 650 3 2 0 0
+c
+d 651 1 0 0 0
+c
+d 514 1 0 1 0
+c
+d 515 4 1 0 0
+c
+d 516 1 0 0 0
+c
+d 861 4 1 1 0
+c
+d 795 1 0 0 0
+c
+d 818 2 0 0 0
+c
+d 650 3 0 2 0
+c
+d 685 1 1 0 0
+c
+d 806 2 0 1 0
+c
+d 1045 4 0 0 0
+c
+d 1126 1 1 0 0
+c
+d 1127 1 0 0 0
+c
+d 1129 1 0 1 0
+c
+d 208 1 0 0 0
+c
+d 211 2 1 0 0
+c
+d 1244 2 0 0 0
+c
+d 534 4 0 2 0
+c
+d 334 4 1 0 0
+c
+d 340 1 0 1 0
+c
+d 320 1 0 1 0
+c
+d 321 4 1 0 0
+c
+d 322 1 1 0 0
+c
+d 157 7 2 0 0
+c
+d 318 4 2 0 0
+c
+d 1007 1 1 0 0
+c
+d 1009 4 1 0 0
+c
+d 423 3 1 0 0
+c
+d 844 1 0 0 0
+c
+d 851 4 2 0 0
+c
+d 437 4 1 1 0
+c
+d 789 1 0 1 0
+c
+d 833 1 0 0 0
+c
+d 186 1 0 0 0
+c
+d 213 3 1 1 0
+c
+d 242 1 1 0 0
+c
+d 21 1 1 0 0
+c
+d 28 3 1 0 0
+c
+d 529 2 0 0 0
+c
+d 530 3 0 0 0
+c
+d 145 4 2 0 0
+c
+d 146 1 0 0 0
+c
+d 301 6 1 0 0
+c
+d 437 1 0 0 0
+c
+d 558 3 2 0 0
+c
+d 1070 2 1 0 0
+c
+d 1076 1 0 0 0
+c
+d 395 2 0 1 0
+c
+d 398 2 1 0 0
+c
+d 21 1 0 0 0
+c
+d 26 3 0 0 0
+c
+d 729 2 1 0 0
+c
+d 730 1 0 1 0
+c
+d 301 4 0 0 0
+c
+d 568 1 0 0 0
+c
+d 572 2 0 0 0
+c
+d 573 1 0 0 0
+c
+d 564 1 0 0 0
+c
+d 565 3 0 0 0
+c
+d 534 4 0 2 0
+c
+d 320 3 1 0 0
+c
+d 829 2 1 0 0
+c
+d 830 1 0 1 0
+c
+d 167 4 2 0 0
+c
+d 735 2 0 0 0
+c
+d 737 4 0 2 0
+c
+d 1023 3 0 0 0
+c
+d 1024 1 0 0 0
+c
+d 167 1 1 0 0
+c
+d 369 2 1 0 0
+c
+d 373 1 0 0 0
+c
+d 1168 2 1 0 0
+c
+d 1170 2 1 0 0
+c
+d 1183 2 0 0 0
+c
+d 1275 4 1 0 0
+c
+d 1277 3 0 0 0
+c
+d 341 3 2 0 0
+c
+d 437 1 0 0 0
+c
+d 278 4 2 0 0
+c
+d 752 1 0 1 0
+c
+d 753 5 0 1 0
+c
+d 567 3 1 0 0
+c
+d 392 1 0 0 0
+c
+d 1126 1 0 0 0
+c
+d 430 1 0 1 0
+c
+d 431 1 0 0 0
+c
+d 436 4 1 0 0
+c
+d 529 3 0 0 0
+c
+d 532 1 0 0 0
+c
+d 775 2 1 0 0
+c
+d 785 1 0 1 0
+c
+d 341 3 2 0 0
+c
+d 437 1 0 0 0
+c
+d 763 1 0 1 0
+c
+d 767 1 0 1 0
+c
+d 829 4 0 0 0
+c
+d 832 1 0 0 0
+c
+d 727 2 1 0 0
+c
+d 948 3 0 0 0
+c
+d 101 3 1 0 0
+c
+d 1080 1 0 0 0
+c
+d 1082 1 1 0 0
+c
+d 602 5 2 0 0
+c
+d 430 1 1 0 0
+c
+d 436 1 0 1 0
+c
+d 437 3 1 0 0
+c
+d 470 1 0 0 0
+c
+d 217 2 1 1 0
+c
+d 101 4 0 0 0
+c
+d 112 1 0 0 0
+c
+d 1013 3 1 0 0
+c
+d 89 1 0 1 0
+c
+d 550 1 0 1 0
+c
+d 552 1 0 0 0
+c
+d 863 3 0 0 0
+c
+d 876 2 0 0 0
+c
+d 877 1 0 0 0
+c
+d 787 4 0 0 0
+c
+d 789 1 0 0 0
+c
+d 327 1 0 0 0
+c
+d 328 2 0 0 0
+c
+d 329 2 0 0 0
+c
+d 164 4 0 0 0
+c
+d 301 4 2 0 0
+c
+d 369 1 0 0 0
+c
+d 373 1 1 0 0
+c
+d 382 1 0 0 0
+c
+d 797 2 0 0 0
+c
+d 798 2 0 0 0
+c
+d 728 1 1 0 0
+c
+d 729 2 0 0 0
+c
+d 806 1 0 1 0
+c
+d 807 3 1 0 0
+c
+d 276 1 0 1 0
+c
+d 289 4 1 0 0
+c
+d 1173 3 1 1 0
+c
+d 551 3 0 0 0
+c
+d 89 6 1 0 0
+c
+d 50 2 1 0 0
+c
+d 51 1 0 0 0
+c
+d 734 5 0 0 0
+c
+d 769 1 0 0 0
+c
+d 377 1 0 0 0
+c
+d 384 1 1 0 0
+c
+d 1134 1 0 0 0
+c
+d 727 1 0 0 0
+c
+d 728 2 1 0 0
+c
+d 734 1 1 0 0
+c
+d 720 1 0 0 0
+c
+d 728 1 0 1 0
+c
+d 729 4 2 0 0
+c
+d 299 2 1 0 0
+c
+d 300 1 0 0 0
+c
+d 34 3 1 0 0
+c
+d 1313 2 0 1 0
+c
+d 48 5 1 0 0
+c
+d 729 2 1 0 0
+c
+d 732 4 0 1 0
+c
+d 87 1 0 1 0
+c
+d 89 1 0 0 0
+c
+d 301 4 0 0 0
+c
+d 315 4 1 0 0
+c
+d 424 4 0 2 0
+c
+d 199 1 0 0 0
+c
+d 200 1 0 1 0
+c
+d 208 2 0 1 0
+c
+d 210 3 0 0 0
+c
+d 537 4 0 1 0
+c
+d 538 1 0 0 0
+c
+d 388 2 0 0 0
+c
+d 389 1 0 0 0
+c
+d 437 5 1 1 0
+c
+d 463 5 2 0 0
+c
+d 787 2 0 0 0
+c
+d 882 1 0 0 0
+c
+d 510 1 0 0 0
+c
+d 516 1 0 0 0
+c
+d 520 2 0 0 0
+c
+d 738 5 1 0 0
+c
+d 775 3 1 0 0
+c
+d 777 1 0 0 0
+c
+d 734 1 0 0 0
+c
+d 769 4 1 1 0
+c
+d 437 4 2 0 0
+c
+d 507 1 0 0 0
+c
+d 610 2 0 1 0
+c
+d 1004 3 1 0 0
+c
+d 531 3 1 1 0
+c
+d 536 1 0 0 0
+c
+d 357 4 1 0 0
+c
+d 1108 1 0 0 0
+c
+d 1110 4 0 0 0
+c
+d 241 1 0 0 0
+c
+d 242 2 0 0 0
+c
+d 247 1 0 0 0
+c
+d 1231 1 0 0 0
+c
+d 457 5 1 2 0
+c
+d 459 1 0 0 0
+c
+d 723 1 0 0 0
+c
+d 726 2 1 0 0
+c
+d 752 3 1 0 0
+c
+d 753 1 1 0 0
+c
+d 101 1 0 0 0
+c
+d 597 4 1 0 0
+c
+d 686 2 1 0 0
+c
+d 689 3 1 0 0
+c
+d 703 1 0 0 0
+c
+d 1174 1 0 0 0
+c
+d 1185 3 0 0 0
+c
+d 1201 1 0 0 0
+c
+d 294 1 0 0 0
+c
+d 298 3 0 0 0
+c
+d 458 4 1 1 0
+c
+d 348 4 0 0 0
+c
+d 990 1 0 1 0
+c
+d 992 3 1 0 0
+c
+d 908 6 2 0 0
+c
+d 213 4 1 0 0
+c
+d 199 4 2 0 0
+c
+d 86 2 1 1 0
+c
+d 1293 3 0 0 0
+c
+d 858 5 1 1 0
+c
+d 348 4 0 2 0
+c
+d 1145 1 0 0 0
+c
+d 436 3 1 1 0
+c
+d 581 1 0 0 0
+c
+d 590 1 1 0 0
+c
+d 738 3 0 2 0
+c
+d 133 3 1 0 0
+c
+d 323 1 0 0 0
+c
+d 775 5 0 0 0
+c
+d 388 5 2 0 0
+c
+d 21 1 0 0 0
+c
+d 1026 1 0 0 0
+c
+d 1027 1 0 0 0
+c
+d 1028 1 0 0 0
+c
+d 842 1 0 0 0
+c
+d 879 4 2 0 0
+c
+d 880 2 0 0 0
+c
+d 1 1 1 0 0
+c
+d 1322 3 1 0 0
+c
+d 278 1 1 0 0
+c
+d 279 1 0 0 0
+c
+d 989 4 1 1 0
+c
+d 995 1 0 0 0
+c
+d 564 2 0 0 0
+c
+d 565 1 0 0 0
+c
+d 789 2 0 1 0
+c
+d 276 4 1 2 0
+c
+d 290 1 0 0 0
+c
+d 157 4 1 0 0
+c
+d 355 1 0 0 0
+c
+d 133 2 0 0 0
+c
+d 134 1 0 0 0
+c
+d 1070 1 0 0 0
+c
+d 1073 1 1 0 0
+c
+d 1074 1 0 0 0
+c
+d 278 4 2 0 0
+c
+d 348 4 1 0 0
+c
+d 982 3 0 0 0
+c
+d 983 2 1 0 0
+c
+d 418 1 1 0 0
+c
+d 1086 1 0 0 0
+c
+d 1087 2 0 0 0
+c
+d 854 1 0 0 0
+c
+d 855 1 1 0 0
+c
+d 857 2 1 0 0
+c
+d 44 5 1 2 0
+c
+d 753 3 1 0 0
+c
+d 437 3 1 0 0
+c
+d 438 1 0 0 0
+c
+d 52 3 1 1 0
+c
+d 53 1 0 0 0
+c
+d 146 2 1 0 0
+c
+d 294 3 0 0 0
+c
+d 843 3 1 1 0
+c
+d 844 1 0 0 0
+c
+d 196 2 0 1 0
+c
+d 198 3 1 0 0
+c
+d 183 4 1 1 0
+c
+d 184 2 0 1 0
+c
+d 101 4 1 1 0
+c
+d 133 2 0 2 0
+c
+d 156 4 2 0 0
+c
+d 59 1 0 0 0
+c
+d 60 2 1 0 0
+c
+d 622 1 0 1 0
+c
+d 46 3 1 0 0
+c
+d 318 3 1 1 0
+c
+d 323 1 0 1 0
+c
+d 46 3 0 1 0
+c
+d 75 1 0 0 0
+c
+d 1188 5 1 0 0
+c
+d 1191 2 1 0 0
+c
+d 737 3 1 0 0
+c
+d 217 4 0 0 0
+c
+d 1243 1 0 0 0
+c
+d 558 1 1 0 0
+c
+d 559 4 1 0 0
+c
+d 562 1 0 0 0
+c
+d 282 1 0 1 0
+c
+d 287 4 0 0 0
+c
+d 101 7 2 0 0
+c
+d 584 3 1 0 0
+c
+d 585 2 1 1 0
+c
+d 827 1 0 1 0
+c
+d 901 3 1 0 0
+c
+d 902 1 0 0 0
+c
+d 854 1 1 0 0
+c
+d 856 3 1 0 0
+c
+d 278 2 1 0 0
+c
+d 1228 1 0 0 0
+c
+d 107 1 0 1 0
+c
+d 111 3 1 1 0
+c
+d 236 1 0 0 0
+c
+d 1205 5 2 0 0
+c
+d 419 5 2 0 0
+c
+d 146 3 0 1 0
+c
+d 1097 1 0 1 0
+c
+d 217 1 1 0 0
+c
+d 241 2 1 0 0
+c
+d 249 1 0 0 0
+c
+d 756 2 0 0 0
+c
+d 763 1 1 0 0
+c
+d 1269 4 1 0 0
+c
+d 802 1 1 0 0
+c
+d 803 3 1 0 0
+c
+d 101 4 1 1 0
+c
+d 104 1 0 0 0
+c
+d 882 3 0 0 0
+c
+d 886 2 0 0 0
+c
+d 607 1 0 0 0
+c
+d 608 2 0 0 0
+c
+d 43 2 0 0 0
+c
+d 44 1 0 0 0
+c
+d 276 5 2 0 0
+c
+d 302 4 2 0 0
+c
+d 1156 1 0 0 0
+c
+d 989 4 1 1 0
+c
+d 990 1 0 1 0
+c
+d 24 1 0 0 0
+c
+d 25 3 0 1 0
+c
+d 26 1 0 1 0
+c
+d 608 1 0 0 0
+c
+d 990 5 2 0 0
+c
+d 84 4 0 0 0
+c
+d 1275 1 0 0 0
+c
+d 608 1 0 0 0
+c
+d 615 3 0 0 0
+c
+d 1037 1 0 0 0
+c
+d 430 3 1 0 0
+c
+d 432 1 0 1 0
+c
+d 470 1 0 0 0
+c
+d 101 1 0 1 0
+c
+d 424 2 1 0 0
+c
+d 425 1 0 0 0
+c
+d 262 1 1 0 0
+c
+d 273 2 0 1 0
+c
+d 428 4 1 0 0
+c
+d 373 4 1 1 0
+c
+d 734 1 0 0 0
+c
+d 939 5 1 1 0
+c
+d 551 1 0 1 0
+c
+d 564 2 0 1 0
+c
+d 373 4 1 1 0
+c
+d 375 1 0 1 0
+c
+d 755 3 0 2 0
+c
+d 757 1 0 0 0
+c
+d 1285 4 1 1 0
+c
+d 1163 1 0 0 0
+c
+d 1165 3 0 0 0
+c
+d 152 1 0 0 0
+c
+d 413 2 1 0 0
+c
+d 414 1 1 0 0
+c
+d 787 5 0 0 0
+c
+d 882 1 0 0 0
+c
+d 878 6 0 0 0
+c
+d 580 4 1 0 0
+c
+d 584 1 0 0 0
+c
+d 1150 6 2 1 0
+c
+d 340 1 0 0 0
+c
+d 343 4 1 0 0
+c
+d 491 1 0 0 0
+c
+d 318 4 1 0 0
+c
+d 199 4 2 1 0
+c
+d 343 4 1 2 0
+c
+d 591 1 0 0 0
+c
+d 597 1 1 0 0
+c
+d 599 1 0 0 0
+c
+d 206 5 2 0 0
+c
+d 373 4 1 2 0
+c
+d 58 3 0 1 0
+c
+d 1308 1 1 0 0
+c
+d 488 4 1 0 0
+c
+d 965 1 1 0 0
+c
+d 970 3 0 0 0
+c
+d 817 5 1 0 0
+c
+d 818 1 0 0 0
+c
+d 581 3 1 0 0
+c
+d 582 1 0 0 0
+c
+d 699 3 0 0 0
+c
+d 101 6 1 1 0
+c
+d 384 2 0 0 0
+c
+d 385 1 0 0 0
+c
+d 690 4 1 0 0
+c
+d 705 1 0 0 0
+c
+d 168 4 0 2 0
+c
+d 1195 3 1 1 0
+c
+d 1196 1 0 1 0
+c
+d 48 3 1 0 0
+c
+d 49 1 0 0 0
+c
+d 564 3 0 0 0
+c
+d 133 3 2 0 0
+c
+d 294 1 0 0 0
+c
+d 444 6 1 1 0
+c
+d 34 3 1 1 0
+c
+d 35 1 0 0 0
+c
+d 878 3 0 0 0
+c
+d 1017 1 0 0 0
+c
+d 1019 3 0 0 0
+c
+d 1202 4 0 1 0
+c
+d 278 4 0 0 0
+c
+d 279 1 0 0 0
+c
+d 427 2 1 1 0
+c
+d 428 1 0 0 0
+c
+d 437 2 1 0 0
+c
+d 444 1 1 0 0
+c
+d 470 1 0 0 0
+c
+d 655 1 0 0 0
+c
+d 658 2 1 0 0
+c
+d 659 1 1 0 0
+c
+d 661 1 0 1 0
+c
+d 159 1 0 1 0
+c
+d 183 4 1 1 0
+c
+d 939 1 0 1 0
+c
+d 940 5 1 0 0
+c
+d 75 3 0 1 0
+c
+d 79 1 1 0 0
+c
+d 1300 1 0 0 0
+c
+d 437 4 0 0 0
+c
+d 457 1 1 0 0
+c
+d 1185 3 1 1 0
+c
+d 618 1 1 0 0
+c
+d 621 1 0 1 0
+c
+d 965 2 0 0 0
+c
+d 301 3 1 0 0
+c
+d 1161 1 1 0 0
+c
+d 114 1 0 0 0
+c
+d 120 1 0 0 0
+c
+d 127 2 0 0 0
+c
+d 341 3 1 1 0
+c
+d 422 1 0 1 0
+c
+d 423 1 1 0 0
+c
+d 1201 1 1 0 0
+c
+d 1202 4 1 1 0
+c
+d 368 5 0 0 0
+c
+d 1172 3 1 1 0
+c
+d 1192 2 0 1 0
+c
+d 592 1 0 0 0
+c
+d 594 1 0 0 0
+c
+d 164 4 0 1 0
+c
+d 1104 1 0 1 0
+c
+d 5 3 2 0 0
+c
+d 28 4 2 0 0
+c
+d 29 1 0 0 0
+c
+d 332 3 0 0 0
+c
+d 333 1 0 0 0
+c
+d 965 4 2 0 0
+c
+d 162 1 0 0 0
+c
+d 355 3 1 1 0
+c
+d 737 5 2 0 0
+c
+d 659 1 1 0 0
+c
+d 661 4 1 0 0
+c
+d 668 1 0 0 0
+c
+d 304 1 1 0 0
+c
+d 307 1 0 0 0
+c
+d 328 3 1 0 0
+c
+d 7 2 0 0 0
+c
+d 8 2 0 0 0
+c
+d 177 2 1 0 0
+c
+d 178 3 1 0 0
+c
+d 1125 1 0 0 0
+c
+d 1127 4 1 0 0
+c
+d 129 2 1 0 0
+c
+d 130 2 1 0 0
+c
+d 131 1 0 0 0
+c
+d 373 4 2 0 0
+c
+d 374 1 0 0 0
+c
+d 168 2 0 1 0
+c
+d 311 1 0 0 0
+c
+d 315 1 0 0 0
+c
+d 325 1 1 0 0
+c
+d 326 1 0 0 0
+c
+d 157 3 0 0 0
+c
+d 355 1 0 0 0
+c
+d 101 6 2 0 0
+c
+d 564 1 0 0 0
+c
+d 565 3 0 0 0
+c
+d 133 4 1 0 0
+c
+d 177 5 1 0 0
+c
+d 178 1 0 0 0
+c
+d 473 3 1 0 0
+c
+d 474 1 0 0 0
+c
+d 39 3 1 0 0
+c
+d 40 1 0 0 0
+c
+d 507 3 1 1 0
+c
+d 1070 1 0 1 0
+c
+d 686 4 2 0 0
+c
+d 691 1 0 1 0
+c
+d 268 3 1 1 0
+c
+d 50 1 1 0 0
+c
+d 51 3 1 0 0
+c
+d 52 1 0 0 0
+c
+d 60 3 2 0 0
+c
+d 663 3 1 0 0
+c
+d 424 1 0 1 0
+c
+d 426 2 0 0 0
+c
+d 591 1 0 0 0
+c
+d 738 3 2 0 0
+c
+d 748 1 0 0 0
+c
+d 178 1 0 1 0
+c
+d 181 1 0 1 0
+c
+d 775 1 0 0 0
+c
+d 882 1 0 0 0
+c
+d 886 1 1 0 0
+c
+d 599 3 0 0 0
+c
+d 606 1 0 0 0
+c
+d 437 3 0 2 0
+c
+d 75 3 1 0 0
+c
+d 84 1 1 0 0
+c
+d 75 2 0 1 0
+c
+d 86 1 0 1 0
+c
+d 437 3 1 0 0
+c
+d 775 3 2 0 0
+c
+d 882 2 0 0 0
+c
+d 921 2 0 0 0
+c
+d 926 2 0 0 0
+c
+d 791 5 1 0 0
+c
+d 793 1 0 0 0
+c
+d 507 6 1 1 0
+c
+d 615 1 0 0 0
+c
+d 616 3 1 0 0
+c
+d 617 1 0 1 0
+c
+d 75 2 0 0 0
+c
+d 1300 1 0 1 0
+c
+d 69 4 2 1 0
+c
+d 615 4 1 0 0
+c
+d 810 3 2 0 0
+c
+d 1126 2 0 0 0
+c
+d 1129 1 0 0 0
+c
+d 1130 2 0 0 0
+c
+d 273 4 0 0 0
+c
+d 157 5 1 1 0
+c
+d 791 3 0 1 0
+c
+d 9 4 2 0 0
+c
+d 10 1 0 1 0
+c
+d 252 3 1 0 0
+c
+d 253 1 0 1 0
+c
+d 626 1 0 0 0
+c
+d 627 2 1 0 0
+c
+d 511 3 0 0 0
+c
+d 513 1 0 1 0
+c
+d 527 1 1 0 0
+c
+d 686 4 2 0 0
+c
+d 955 1 0 0 0
+c
+d 789 6 2 0 0
+c
+d 26 3 0 0 0
+c
+d 39 1 0 0 0
+c
+d 989 5 2 0 0
+c
+d 1060 5 1 0 0
+c
+d 46 1 0 0 0
+c
+d 75 5 1 2 0
+c
+d 217 3 0 0 0
+c
+d 1240 1 0 0 0
+c
+d 737 1 0 0 0
+c
+d 854 4 1 1 0
+c
+d 855 1 0 0 0
+c
+d 857 1 0 0 0
+c
+d 858 3 0 0 0
+c
+d 872 1 0 0 0
+c
+d 156 5 0 0 0
+c
+d 101 3 0 2 0
+c
+d 104 2 1 0 0
+c
+d 301 1 1 0 0
+c
+d 315 3 1 0 0
+c
+d 1071 1 0 0 0
+c
+d 1073 4 1 0 0
+c
+d 608 8 2 0 0
+c
+d 927 3 0 0 0
+c
+d 928 3 1 0 0
+c
+d 294 4 0 0 0
+c
+d 298 1 0 0 0
+c
+d 279 2 1 0 0
+c
+d 1150 1 0 0 0
+c
+d 55 2 1 0 0
+c
+d 691 1 0 0 0
+c
+d 457 4 1 2 0
+c
+d 460 1 0 0 0
+c
+d 376 1 1 0 0
+c
+d 1136 3 1 0 0
+c
+d 1170 2 0 0 0
+c
+d 392 2 0 0 0
+c
+d 1127 2 0 0 0
+c
+d 1131 1 0 0 0
+c
+d 572 3 0 0 0
+c
+d 795 1 0 0 0
+c
+d 602 5 1 0 0
+c
+d 49 5 2 0 0
+c
+d 610 6 2 0 0
+c
+d 100 1 0 0 0
+c
+d 990 2 1 0 0
+c
+d 992 1 0 0 0
+c
+d 1001 1 1 0 0
+c
+d 89 3 1 1 0
+c
+d 1266 1 0 0 0
+c
+d 1087 1 0 0 0
+c
+d 1096 2 0 0 0
+c
+d 1100 2 0 0 0
+c
+d 262 4 1 1 0
+c
+d 271 1 0 0 0
+c
+d 799 5 1 0 0
+c
+d 842 1 1 0 0
+c
+d 278 4 2 0 0
+c
+d 1170 1 0 0 0
+c
+d 457 4 1 1 0
+c
+d 490 1 1 0 0
+c
+d 274 4 1 1 0
+c
+d 276 1 0 0 0
+c
+d 597 2 0 1 0
+c
+d 167 1 0 0 0
+c
+d 168 2 1 1 0
+c
+d 157 4 1 0 0
+c
+d 159 1 0 0 0
+c
+d 132 2 1 0 0
+c
+d 511 1 1 0 0
+c
+d 1258 1 0 0 0
+c
+d 328 5 1 1 0
+c
+d 1194 6 1 2 0
+c
+d 101 1 0 1 0
+c
+d 423 3 1 0 0
+c
+d 427 1 0 1 0
+c
+d 21 2 1 0 0
+c
+d 787 1 0 0 0
+c
+d 790 3 0 0 0
+c
+d 718 1 0 0 0
+c
+d 946 3 2 0 0
+c
+d 298 2 0 0 0
+c
+d 323 3 1 0 0
+c
+d 662 6 2 0 0
+c
+d 663 1 0 0 0
+c
+d 28 1 0 1 0
+c
+d 29 4 2 0 0
+c
+d 340 1 0 1 0
+c
+d 343 2 1 0 0
+c
+d 157 3 2 0 0
+c
+d 159 1 0 0 0
+c
+d 482 3 1 0 0
+c
+d 483 1 1 0 0
+c
+d 488 1 0 1 0
+c
+d 477 1 1 0 0
+c
+d 478 2 1 0 0
+c
+d 482 1 0 1 0
+c
+d 723 4 1 0 0
+c
+d 87 1 0 0 0
+c
+d 89 4 0 0 0
+c
+d 1185 2 1 0 0
+c
+d 1188 1 0 0 0
+c
+d 1204 1 0 0 0
+c
+d 691 2 0 1 0
+c
+d 800 3 1 0 0
+c
+d 801 1 0 0 0
+c
+d 1195 5 0 2 0
+c
+d 157 6 2 0 0
+c
+d 340 2 1 0 0
+c
+d 343 2 1 0 0
+c
+d 437 4 0 0 0
+c
+d 556 1 1 0 0
+c
+d 557 2 0 1 0
+c
+d 1066 1 0 0 0
+c
+d 264 4 1 2 0
+c
+d 803 1 0 0 0
+c
+d 804 2 1 0 0
+c
+d 915 1 1 0 0
+c
+d 61 4 2 0 0
+c
+d 155 1 0 0 0
+c
+d 415 3 1 0 0
+c
+d 416 1 0 0 0
+c
+d 417 2 0 0 0
+c
+d 738 5 1 1 0
+c
+d 1110 4 0 0 0
+c
+d 1120 1 0 0 0
+c
+d 46 2 0 0 0
+c
+d 286 2 1 1 0
+c
+d 294 1 0 0 0
+c
+d 418 3 0 0 0
+c
+d 435 2 0 0 0
+c
+d 767 4 1 1 0
+c
+d 69 3 0 1 0
+c
+d 301 3 0 0 0
+c
+d 507 4 0 0 0
+c
+d 1070 1 0 0 0
+c
+d 118 4 1 0 0
+c
+d 1261 1 0 1 0
+c
+d 343 3 0 1 0
+c
+d 437 1 0 0 0
+c
+d 419 5 2 0 0
+c
+d 578 2 0 0 0
+c
+d 262 1 1 0 0
+c
+d 264 4 1 0 0
+c
+d 1185 3 1 0 0
+c
+d 213 4 0 0 0
+c
+d 242 1 0 0 0
+c
+d 500 1 0 1 0
+c
+d 502 3 1 0 0
+c
+d 505 1 0 0 0
+c
+d 529 2 0 0 0
+c
+d 1062 3 1 0 0
+c
+d 1023 3 0 0 0
+c
+d 1024 1 0 0 0
+c
+d 602 1 0 1 0
+c
+d 681 3 0 0 0
+c
+d 682 1 0 1 0
+c
+d 31 4 1 1 0
+c
+d 606 5 1 1 0
+c
+d 559 3 1 1 0
+c
+d 561 1 0 0 0
+c
+d 566 1 0 1 0
+c
+d 1285 1 1 0 0
+c
+d 1286 1 0 0 0
+c
+d 582 2 0 0 0
+c
+d 583 1 0 0 0
+c
+d 507 5 0 0 0
+c
+d 1113 4 0 0 0
+c
+d 1114 1 0 0 0
+c
+d 1173 3 1 0 0
+c
+d 1174 2 1 0 0
+c
+d 844 1 0 1 0
+c
+d 848 1 0 0 0
+c
+d 851 1 0 1 0
+c
+d 199 5 2 1 0
+c
+d 737 5 1 0 0
+c
+d 756 1 1 0 0
+c
+d 120 1 0 1 0
+c
+d 127 6 1 0 0
+c
+d 1260 1 0 0 0
+c
+d 211 4 0 0 0
+c
+d 1233 1 0 0 0
+c
+d 1234 1 0 0 0
+c
+d 493 6 1 0 0
+c
+d 767 2 1 0 0
+c
+d 889 1 0 0 0
+c
+d 891 1 0 0 0
+c
+d 829 3 0 2 0
+c
+d 833 2 0 0 0
+c
+d 384 1 0 0 0
+c
+d 394 2 0 0 0
+c
+d 1109 1 0 0 0
+c
+d 46 4 2 0 0
+c
+d 753 1 1 0 0
+c
+d 755 5 1 0 0
+c
+d 737 5 2 0 0
+c
+d 242 4 1 1 0
+c
+d 262 1 0 1 0
+c
+d 723 2 1 0 0
+c
+d 724 1 0 0 0
+c
+d 725 2 0 0 0
+c
+d 318 2 0 0 0
+c
+d 437 1 1 0 0
+c
+d 457 3 1 0 0
+c
+d 464 1 0 0 0
+c
+d 858 2 0 1 0
+c
+d 872 4 1 0 0
+c
+d 610 4 2 0 0
+c
+d 46 2 0 0 0
+c
+d 775 1 1 0 0
+c
+d 592 4 2 1 0
+c
+d 686 1 1 0 0
+c
+d 803 1 0 0 0
+c
+d 804 2 1 0 0
+c
+d 593 3 1 0 0
+c
+d 678 4 1 0 0
+c
+d 558 1 0 0 0
+c
+d 559 3 1 0 0
+c
+d 563 1 0 0 0
+c
+d 276 3 0 0 0
+c
+d 32 5 1 0 0
+c
+d 1321 1 0 0 0
+c
+d 472 1 0 0 0
+c
+d 473 1 1 0 0
+c
+d 373 4 1 0 0
+c
+d 18 6 2 0 0
+c
+d 101 2 0 0 0
+c
+d 104 1 0 0 0
+c
+d 1315 2 1 0 0
+c
+d 1316 2 1 0 0
+c
+d 259 5 2 0 0
+c
+d 262 1 0 0 0
+c
+d 334 3 1 0 0
+c
+d 844 1 0 0 0
+c
+d 851 2 0 1 0
+c
+d 897 3 1 0 0
+c
+d 437 3 1 0 0
+c
+d 159 2 0 0 0
+c
+d 183 1 1 0 0
+c
+d 278 2 0 0 0
+c
+d 1228 3 0 0 0
+c
+d 50 2 1 0 0
+c
+d 51 1 0 0 0
+c
+d 734 1 1 0 0
+c
+d 324 3 1 0 0
+c
+d 325 1 1 0 0
+c
+d 423 1 0 0 0
+c
+d 432 4 1 0 0
+c
+d 374 3 1 0 0
+c
+d 5 6 1 0 0
+c
+d 510 1 0 0 0
+c
+d 517 3 1 0 0
+c
+d 518 1 0 0 0
+c
+d 602 4 0 0 0
+c
+d 851 3 1 1 0
+c
+d 133 2 0 0 0
+c
+d 134 1 0 0 0
+c
+d 141 1 0 0 0
+c
+d 142 1 0 0 0
+c
+d 875 5 2 0 0
+c
+d 888 4 0 0 0
+c
+d 93 1 0 0 0
+c
+d 141 5 0 0 0
+c
+d 32 1 0 0 0
+c
+d 75 1 1 0 0
+c
+d 77 1 0 0 0
+c
+d 217 2 1 0 0
+c
+d 241 1 0 0 0
+c
+d 602 2 0 2 0
+c
+d 642 3 0 0 0
+c
+d 644 1 0 0 0
+c
+d 167 3 1 0 0
+c
+d 467 4 1 0 0
+c
+d 468 2 0 0 0
+c
+d 1087 3 1 1 0
+c
+d 1088 1 0 0 0
+c
+d 919 3 1 1 0
+c
+d 921 1 0 0 0
+c
+d 933 1 0 0 0
+c
+d 934 2 0 0 0
+c
+d 591 2 2 0 0
+c
+d 595 4 1 0 0
+c
+d 419 1 0 0 0
+c
+d 1083 3 1 0 0
+c
+d 1102 2 0 0 0
+c
+d 276 1 0 0 0
+c
+d 301 2 1 1 0
+c
+d 575 1 1 0 0
+c
+d 578 4 1 0 0
+c
+d 836 4 1 1 0
+c
+d 837 1 1 0 0
+c
+d 965 4 1 2 0
+c
+d 775 1 0 0 0
+c
+d 882 1 0 1 0
+c
+d 883 1 1 0 0
+c
+d 487 2 0 0 0
+c
+d 472 1 1 0 0
+c
+d 475 4 1 0 0
+c
+d 278 1 0 0 0
+c
+d 279 2 0 0 0
+c
+d 305 1 0 0 0
+c
+d 621 1 1 0 0
+c
+d 626 1 0 0 0
+c
+d 627 2 1 0 0
+c
+d 275 7 2 0 0
+c
+d 242 5 2 0 0
+c
+d 24 4 0 0 0
+c
+d 25 1 0 0 0
+c
+d 86 2 1 0 0
+c
+d 1293 5 1 0 0
+c
+d 835 4 1 0 0
+c
+d 836 2 1 0 0
+c
+d 796 4 2 1 0
+c
+d 799 1 0 0 0
+c
+d 802 1 1 0 0
+c
+d 803 3 1 1 0
+c
+d 179 1 0 1 0
+c
+d 182 3 1 1 0
+c
+d 191 1 0 0 0
+c
+d 861 4 1 0 0
+c
+d 862 1 0 0 0
+c
+d 1269 5 2 0 0
+c
+d 457 3 1 0 0
+c
+d 461 1 1 0 0
+c
+d 167 1 1 0 0
+c
+d 369 4 0 0 0
+c
+d 756 4 2 1 0
+c
+d 31 1 0 0 0
+c
+d 32 2 0 0 0
+c
+d 75 1 0 0 0
+c
+d 1318 1 1 0 0
+c
+d 840 3 1 1 0
+c
+d 842 2 0 1 0
+c
+d 1 2 0 1 0
+c
+d 1323 2 1 0 0
+c
+d 846 3 1 0 0
+c
+d 847 1 1 0 0
+c
+d 853 1 0 1 0
+c
+d 854 1 1 0 0
+c
+d 152 2 1 0 0
+c
+d 153 1 0 0 0
+c
+d 1096 1 0 0 0
+c
+d 55 1 1 0 0
+c
+d 69 4 0 0 0
+c
+d 70 1 0 0 0
+c
+d 757 5 1 0 0
+c
+d 764 1 0 1 0
+c
+d 152 2 1 0 0
+c
+d 413 2 1 0 0
+c
+d 1254 1 0 0 0
+c
+d 46 5 2 0 0
+c
+d 75 1 0 0 0
+c
+d 735 1 0 0 0
+c
+d 737 2 1 1 0
+c
+d 795 1 0 0 0
+c
+d 796 2 0 0 0
+c
+d 815 2 1 0 0
+c
+d 817 1 1 0 0
+c
+d 1185 1 0 0 0
+c
+d 1202 1 0 0 0
+c
+d 436 1 0 0 0
+c
+d 437 3 1 0 0
+c
+d 468 1 0 1 0
+c
+d 46 3 2 0 0
+c
+d 47 1 0 0 0
+c
+d 769 3 0 1 0
+c
+d 775 1 0 0 0
+c
+d 886 1 1 0 0
+c
+d 1108 1 0 0 0
+c
+d 1110 4 0 0 0
+c
+d 789 2 0 1 0
+c
+d 926 3 2 0 0
+c
+d 927 1 0 0 0
+c
+d 78 1 0 1 0
+c
+d 79 1 0 0 0
+c
+d 81 1 1 0 0
+c
+d 1013 5 1 0 0
+c
+d 1014 1 0 0 0
+c
+d 152 3 1 0 0
+c
+d 155 1 0 1 0
+c
+d 301 3 1 0 0
+c
+d 1156 4 0 1 0
+c
+d 1168 1 0 0 0
+c
+d 19 5 1 0 0
+c
+d 49 1 1 0 0
+c
+d 50 3 1 0 0
+c
+d 51 1 0 0 0
+c
+d 1009 4 0 1 0
+c
+d 1012 1 0 1 0
+c
+d 60 1 1 0 0
+c
+d 647 5 1 0 0
+c
+d 152 3 1 1 0
+c
+d 1254 1 0 0 0
+c
+d 437 3 1 0 0
+c
+d 453 1 1 0 0
+c
+d 437 4 1 0 0
+c
+d 463 1 1 0 0
+c
+d 276 3 1 0 0
+c
+d 199 1 1 0 0
+c
+d 211 3 1 0 0
+c
+d 215 1 0 0 0
+c
+d 369 1 0 0 0
+c
+d 382 3 0 1 0
+c
+d 1165 2 1 0 0
+c
+d 1166 4 1 0 0
+c
+d 622 1 0 0 0
+c
+d 965 2 1 0 0
+c
+d 968 1 1 0 0
+c
+d 93 1 0 1 0
+c
+d 130 2 0 1 0
+c
+d 1259 1 0 0 0
+c
+d 855 4 1 0 0
+c
+d 857 2 0 0 0
+c
+d 851 5 1 2 0
+c
+d 120 4 0 0 0
+c
+d 84 1 0 1 0
+c
+d 1290 3 0 0 0
+c
+d 437 5 1 0 0
+c
+d 152 3 2 0 0
+c
+d 413 1 0 0 0
+c
+d 477 5 2 0 0
+c
+d 480 1 0 0 0
+c
+d 54 1 1 0 0
+c
+d 719 2 0 1 0
+c
+d 950 1 0 1 0
+c
+d 445 5 2 0 0
+c
+d 204 3 1 1 0
+c
+d 392 2 0 0 0
+c
+d 1126 2 1 0 0
+c
+d 101 1 0 0 0
+c
+d 597 1 0 0 0
+c
+d 502 3 0 0 0
+c
+d 287 2 1 1 0
+c
+d 284 6 2 0 0
+c
+d 838 1 0 0 0
+c
+d 839 2 1 0 0
+c
+d 842 1 0 1 0
+c
+d 444 1 0 1 0
+c
+d 445 3 2 0 0
+c
+d 371 1 0 0 0
+c
+d 372 1 0 1 0
+c
+d 373 2 1 0 0
+c
+d 311 1 0 0 0
+c
+d 324 1 0 1 0
+c
+d 325 2 1 0 0
+c
+d 327 1 1 0 0
+c
+d 457 5 2 0 0
+c
+d 839 2 1 0 0
+c
+d 840 2 0 1 0
+c
+d 437 1 0 0 0
+c
+d 457 2 1 1 0
+c
+d 463 2 0 0 0
+c
+d 872 6 0 0 0
+c
+d 873 1 0 0 0
+c
+d 1080 4 0 0 0
+c
+d 133 6 2 0 0
+c
+d 437 3 2 0 0
+c
+d 443 1 0 0 0
+c
+d 162 1 0 0 0
+c
+d 368 2 1 0 0
+c
+d 673 1 1 0 0
+c
+d 675 2 0 1 0
+c
+d 437 4 1 1 0
+c
+d 470 1 1 0 0
+c
+d 471 1 0 0 0
+c
+d 720 2 0 0 0
+c
+d 443 3 1 0 0
+c
+d 449 1 1 0 0
+c
+d 437 5 1 0 0
+c
+d 534 2 0 0 0
+c
+d 829 5 2 0 0
+c
+d 478 1 0 0 0
+c
+d 482 1 0 0 0
+c
+d 276 1 0 0 0
+c
+d 301 4 0 0 0
+c
+d 580 2 1 0 0
+c
+d 581 3 1 1 0
+c
+d 478 1 1 0 0
+c
+d 481 3 1 0 0
+c
+d 484 1 0 0 0
+c
+d 1022 1 0 1 0
+c
+d 1023 2 1 0 0
+c
+d 1024 3 1 0 0
+c
+d 272 4 2 0 0
+c
+d 890 3 0 0 0
+c
+d 1194 4 1 1 0
+c
+d 842 2 0 0 0
+c
+d 848 3 1 1 0
+c
+d 1176 2 0 0 0
+c
+d 1179 2 0 0 0
+c
+d 1180 1 0 0 0
+c
+d 569 2 1 0 0
+c
+d 574 1 0 1 0
+c
+d 1020 2 0 1 0
+c
+d 1021 2 1 0 0
+c
+d 1029 1 1 0 0
+c
+d 133 2 0 1 0
+c
+d 341 4 0 0 0
+c
+d 343 1 0 0 0
+c
+d 437 1 0 1 0
+c
+d 457 4 1 0 0
+c
+d 888 4 0 0 0
+c
+d 890 1 1 0 0
+c
+d 1153 5 2 1 0
+c
+d 437 4 2 0 0
+c
+d 800 3 1 1 0
+c
+d 801 1 1 0 0
+c
+d 1192 2 0 0 0
+c
+d 1207 4 2 0 0
+c
+d 167 1 0 0 0
+c
+d 1121 1 0 0 0
+c
+d 1122 2 0 1 0
+c
+d 286 6 2 0 0
+c
+d 559 3 1 0 0
+c
+d 560 1 1 0 0
+c
+d 561 1 0 0 0
+c
+d 1194 4 1 1 0
+c
+d 457 1 0 0 0
+c
+d 458 1 0 1 0
+c
+d 460 3 1 0 0
+c
+d 301 2 0 1 0
+c
+d 304 3 1 1 0
+c
+d 341 4 2 0 0
+c
+d 342 1 0 0 0
+c
+d 457 6 2 1 0
+c
+d 767 1 0 0 0
+c
+d 891 3 1 0 0
+c
+d 208 4 0 0 0
+c
+d 1237 3 0 1 0
+c
+d 1239 1 0 0 0
+c
+d 1240 1 0 0 0
+c
+d 327 4 1 2 0
+c
+d 402 1 0 1 0
+c
+d 403 1 0 0 0
+c
+d 404 3 1 0 0
+c
+d 243 3 0 0 0
+c
+d 244 1 0 0 0
+c
+d 60 2 1 0 0
+c
+d 875 1 1 0 0
+c
+d 876 1 0 0 0
+c
+d 878 4 1 0 0
+c
+d 457 5 2 0 0
+c
+d 465 1 0 0 0
+c
+d 206 3 0 0 0
+c
+d 906 1 1 0 0
+c
+d 912 4 1 0 0
+c
+d 615 3 1 1 0
+c
+d 616 1 0 0 0
+c
+d 157 2 0 0 0
+c
+d 242 1 0 0 0
+c
+d 578 3 1 1 0
+c
+d 956 1 0 0 0
+c
+d 958 2 0 0 0
+c
+d 84 1 0 0 0
+c
+d 1275 3 0 0 0
+c
+d 393 5 2 0 0
+c
+d 382 1 0 0 0
+c
+d 392 1 0 0 0
+c
+d 1237 4 2 1 0
+c
+d 204 1 0 0 0
+c
+d 224 3 2 0 0
+c
+d 156 1 0 0 0
+c
+d 163 2 0 0 0
+c
+d 172 1 0 1 0
+c
+d 1250 2 0 0 0
+c
+d 458 2 0 0 0
+c
+d 101 2 0 2 0
+c
+d 597 3 0 0 0
+c
+d 575 4 2 1 0
+c
+d 930 1 0 0 0
+c
+d 153 1 0 1 0
+c
+d 155 2 0 1 0
+c
+d 176 1 0 0 0
+c
+d 591 3 1 1 0
+c
+d 592 2 0 0 0
+c
+d 146 3 0 0 0
+c
+d 148 1 0 0 0
+c
+d 167 1 0 1 0
+c
+d 369 2 1 0 0
+c
+d 382 1 0 1 0
+c
+d 169 4 1 0 0
+c
+d 377 1 0 1 0
+c
+d 300 1 1 0 0
+c
+d 315 2 0 0 0
+c
+d 1194 3 1 1 0
+c
+d 369 1 0 0 0
+c
+d 370 5 1 0 0
+c
+d 572 2 1 0 0
+c
+d 574 4 1 0 0
+c
+d 340 5 2 0 0
+c
+d 22 3 1 1 0
+c
+d 23 2 1 0 0
+c
+d 1194 1 0 1 0
+c
+d 1195 3 1 0 0
+c
+d 1202 1 0 0 0
+c
+d 763 2 1 0 0
+c
+d 764 1 0 0 0
+c
+d 767 1 0 1 0
+c
+d 52 1 0 0 0
+c
+d 54 2 1 0 0
+c
+d 1303 2 0 1 0
+c
+d 51 1 0 0 0
+c
+d 52 3 1 1 0
+c
+d 276 1 0 0 0
+c
+d 289 1 0 1 0
+c
+d 290 3 1 0 0
+c
+d 842 3 1 1 0
+c
+d 848 1 0 1 0
+c
+d 26 1 0 0 0
+c
+d 37 2 1 0 0
+c
+d 38 2 1 0 0
+c
+d 1168 2 0 1 0
+c
+d 1169 3 1 0 0
+c
+d 1105 3 0 0 0
+c
+d 1106 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 162 3 0 0 0
+c
+d 129 2 0 0 0
+c
+d 437 3 1 0 0
+c
+d 457 5 2 0 0
+c
+d 461 2 0 0 0
+c
+d 697 1 0 0 0
+c
+d 717 3 0 0 0
+c
+d 634 4 2 0 0
+c
+d 635 1 0 1 0
+c
+d 1080 5 2 0 0
+c
+d 56 1 0 0 0
+c
+d 1306 3 2 0 0
+c
+d 59 2 0 0 0
+c
+d 60 1 0 0 0
+c
+d 557 2 0 1 0
+c
+d 565 1 1 0 0
+c
+d 597 2 1 0 0
+c
+d 598 1 0 0 0
+c
+d 844 1 0 1 0
+c
+d 848 3 1 0 0
+c
+d 288 4 2 0 0
+c
+d 291 1 0 0 0
+c
+d 84 1 0 0 0
+c
+d 85 2 0 0 0
+c
+d 1277 1 0 1 0
+c
+d 1278 1 0 1 0
+c
+d 324 3 1 0 0
+c
+d 1149 1 1 0 0
+c
+d 101 5 0 0 0
+c
+d 334 5 2 1 0
+c
+d 575 4 1 1 0
+c
+d 578 1 1 0 0
+c
+d 557 4 2 0 0
+c
+d 1065 1 0 0 0
+c
+d 568 3 1 0 0
+c
+d 572 1 1 0 0
+c
+d 1188 4 1 0 0
+c
+d 1204 2 0 0 0
+c
+d 157 5 1 0 0
+c
+d 311 1 0 0 0
+c
+d 325 4 0 0 0
+c
+d 1269 1 0 0 0
+c
+d 1271 2 0 0 0
+c
+d 592 2 1 0 0
+c
+d 594 3 1 0 0
+c
+d 769 2 1 1 0
+c
+d 770 3 0 0 0
+c
+d 1233 1 1 0 0
+c
+d 1235 1 0 0 0
+c
+d 1236 4 1 0 0
+c
+d 753 1 0 1 0
+c
+d 755 5 0 1 0
+c
+d 575 3 1 0 0
+c
+d 592 3 1 1 0
+c
+d 594 1 0 0 0
+c
+d 558 3 1 1 0
+c
+d 559 1 0 1 0
+c
+d 592 4 1 2 0
+c
+d 1195 3 1 1 0
+c
+d 1196 1 0 1 0
+c
+d 1318 2 0 1 0
+c
+d 1319 2 0 0 0
+c
+d 835 3 1 0 0
+c
+d 900 1 0 0 0
+c
+d 157 4 1 0 0
+c
+d 301 3 1 0 0
+c
+d 313 1 0 1 0
+c
+d 101 2 1 0 0
+c
+d 102 3 1 0 0
+c
+d 861 1 0 0 0
+c
+d 868 3 0 1 0
+c
+d 807 3 0 0 0
+c
+d 965 2 1 0 0
+c
+d 966 1 1 0 0
+c
+d 972 2 0 0 0
+c
+d 328 1 0 1 0
+c
+d 352 1 1 0 0
+c
+d 353 2 1 0 0
+c
+d 354 1 0 0 0
+c
+d 341 1 0 1 0
+c
+d 470 2 1 0 0
+c
+d 477 1 1 0 0
+c
+d 159 1 0 1 0
+c
+d 183 3 1 0 0
+c
+d 184 1 0 0 0
+c
+d 734 4 1 0 0
+c
+d 323 3 0 0 0
+c
+d 568 3 1 0 0
+c
+d 572 1 0 1 0
+c
+d 572 4 0 0 0
+c
+d 1055 2 0 0 0
+c
+d 354 1 0 1 0
+c
+d 355 2 1 0 0
+c
+d 367 1 0 0 0
+c
+d 527 4 0 0 0
+c
+d 87 3 0 0 0
+c
+d 98 6 1 1 0
+c
+d 498 1 0 1 0
+c
+d 499 3 0 0 0
+c
+d 511 1 0 0 0
+c
+d 888 6 1 0 0
+c
+d 888 5 1 1 0
+c
+d 584 2 0 0 0
+c
+d 48 2 1 0 0
+c
+d 940 1 0 1 0
+c
+d 941 2 0 0 0
+c
+d 768 3 1 0 0
+c
+d 242 1 0 0 0
+c
+d 243 3 1 1 0
+c
+d 248 1 0 0 0
+c
+d 565 4 0 0 0
+c
+d 568 1 1 0 0
+c
+d 278 4 1 1 0
+c
+d 449 4 1 0 0
+c
+d 450 2 1 0 0
+c
+d 1156 5 2 1 0
+c
+d 1017 1 0 1 0
+c
+d 1020 1 0 0 0
+c
+d 1021 3 0 0 0
+c
+d 274 1 1 0 0
+c
+d 277 3 0 1 0
+c
+d 1084 4 1 1 0
+c
+d 215 1 0 0 0
+c
+d 221 1 0 1 0
+c
+d 1233 4 1 0 0
+c
+d 1165 4 2 0 0
+c
+d 622 5 2 0 0
+c
+d 891 8 2 0 0
+c
+d 505 4 1 1 0
+c
+d 506 1 0 1 0
+c
+d 389 3 1 0 0
+c
+d 390 1 1 0 0
+c
+d 686 4 2 0 0
+c
+d 1168 2 1 0 0
+c
+d 1177 3 1 1 0
+c
+d 621 1 0 1 0
+c
+d 645 5 1 0 0
+c
+d 646 1 1 0 0
+c
+d 89 1 0 0 0
+c
+d 606 5 2 0 0
+c
+d 1184 3 2 0 0
+c
+d 1185 2 0 0 0
+c
+d 183 2 1 0 0
+c
+d 184 2 0 1 0
+c
+d 189 2 1 0 0
+c
+d 537 4 0 0 0
+c
+d 538 2 0 0 0
+c
+d 341 1 1 0 0
+c
+d 348 4 1 0 0
+c
+d 724 5 2 0 0
+c
+d 734 1 0 0 0
+c
+d 101 4 2 0 0
+c
+d 610 1 0 0 0
+c
+d 716 4 1 1 0
+c
+d 373 5 1 1 0
+c
+d 44 3 2 0 0
+c
+d 46 1 0 0 0
+c
+d 278 1 0 0 0
+c
+d 1165 3 0 0 0
+c
+d 1211 1 0 0 0
+c
+d 716 1 0 0 0
+c
+d 718 3 2 0 0
+c
+d 493 3 2 0 0
+c
+d 1077 1 0 0 0
+c
+d 1270 5 1 0 0
+c
+d 55 1 1 0 0
+c
+d 694 3 1 0 0
+c
+d 26 3 0 0 0
+c
+d 101 4 1 1 0
+c
+d 102 1 0 0 0
+c
+d 829 5 1 0 0
+c
+d 835 1 0 0 0
+c
+d 47 4 0 0 0
+c
+d 737 3 1 0 0
+c
+d 262 2 1 0 0
+c
+d 270 1 0 0 0
+c
+d 271 3 1 0 0
+c
+d 572 4 1 1 0
+c
+d 574 2 1 0 0
+c
+d 566 3 0 2 0
+c
+d 568 1 0 0 0
+c
+d 691 5 2 0 0
+c
+d 156 4 1 0 0
+c
+d 406 1 1 0 0
+c
+d 127 1 1 0 0
+c
+d 129 3 1 0 0
+c
+d 1260 2 0 0 0
+c
+d 1013 1 0 0 0
+c
+d 1017 3 0 0 0
+c
+d 1021 1 0 0 0
+c
+d 634 1 0 0 0
+c
+d 642 2 0 1 0
+c
+d 643 3 1 0 0
+c
+d 888 1 0 0 0
+c
+d 890 3 0 0 0
+c
+d 152 1 0 1 0
+c
+d 153 2 1 0 0
+c
+d 155 1 1 0 0
+c
+d 842 1 0 1 0
+c
+d 881 4 0 1 0
+c
+d 598 1 0 0 0
+c
+d 606 2 0 0 0
+c
+d 608 1 0 0 0
+c
+d 146 2 1 0 0
+c
+d 153 3 1 0 0
+c
+d 46 2 1 0 0
+c
+d 75 4 0 0 0
+c
+d 437 3 1 0 0
+c
+d 568 1 1 0 0
+c
+d 1194 1 0 0 0
+c
+d 1195 3 2 0 0
+c
+d 19 2 1 0 0
+c
+d 1008 4 1 0 0
+c
+d 853 1 1 0 0
+c
+d 866 1 0 0 0
+c
+d 54 2 1 0 0
+c
+d 694 3 1 1 0
+c
+d 1073 1 1 0 0
+c
+d 1074 3 1 0 0
+c
+d 304 3 1 0 0
+c
+d 309 3 0 0 0
+c
+d 301 2 1 0 0
+c
+d 313 3 0 0 0
+c
+d 368 5 2 0 0
+c
+d 300 1 0 0 0
+c
+d 315 4 2 0 0
+c
+d 597 2 0 0 0
+c
+d 373 2 0 0 0
+c
+d 375 1 1 0 0
+c
+d 18 1 0 1 0
+c
+d 77 4 2 0 0
+c
+d 551 2 0 0 0
+c
+d 95 2 0 0 0
+c
+d 965 1 0 1 0
+c
+d 977 4 2 0 0
+c
+d 355 3 1 1 0
+c
+d 842 2 0 0 0
+c
+d 878 1 0 0 0
+c
+d 148 5 2 0 0
+c
+d 167 1 0 0 0
+c
+d 369 3 1 0 0
+c
+d 382 1 1 0 0
+c
+d 443 1 0 1 0
+c
+d 445 4 1 0 0
+c
+d 1127 1 0 1 0
+c
+d 1131 5 2 0 0
+c
+d 93 1 1 0 0
+c
+d 130 1 0 0 0
+c
+d 132 1 0 0 0
+c
+d 1257 2 0 0 0
+c
+d 455 5 0 0 0
+c
+d 753 3 1 0 0
+c
+d 858 1 1 0 0
+c
+d 382 1 1 0 0
+c
+d 1134 5 1 0 0
+c
+d 861 5 2 0 0
+c
+d 373 4 1 2 0
+c
+d 888 6 1 0 0
+c
+d 516 1 0 0 0
+c
+d 517 2 0 0 0
+c
+d 1008 2 1 0 0
+c
+d 1009 3 1 0 0
+c
+d 532 2 1 0 0
+c
+d 537 2 1 0 0
+c
+d 539 1 0 0 0
+c
+d 716 3 1 1 0
+c
+d 718 1 1 0 0
+c
+d 301 4 0 0 0
+c
+d 767 2 1 0 0
+c
+d 1168 2 0 0 0
+c
+d 1176 4 1 0 0
+c
+d 1084 4 2 0 0
+c
+d 1085 1 0 0 0
+c
+d 196 1 0 0 0
+c
+d 199 3 0 0 0
+c
+d 842 2 1 0 0
+c
+d 875 3 1 0 0
+c
+d 1170 1 0 1 0
+c
+d 1174 4 1 1 0
+c
+d 278 4 1 2 0
+c
+d 1156 1 0 0 0
+c
+d 348 1 0 0 0
+c
+d 392 2 0 1 0
+c
+d 157 3 1 0 0
+c
+d 19 2 0 0 0
+c
+d 1013 3 0 1 0
+c
+d 400 3 0 0 0
+c
+d 408 2 0 0 0
+c
+d 55 1 0 0 0
+c
+d 690 1 0 1 0
+c
+d 691 2 1 0 0
+c
+d 709 1 0 0 0
+c
+d 970 1 0 0 0
+c
+d 971 3 1 1 0
+c
+d 550 1 0 0 0
+c
+d 556 2 0 0 0
+c
+d 557 1 0 0 0
+c
+d 1163 4 0 2 0
+c
+d 802 3 1 1 0
+c
+d 803 1 1 0 0
+c
+d 262 1 1 0 0
+c
+d 278 3 0 1 0
+c
+d 738 4 2 1 0
+c
+d 743 1 0 0 0
+c
+d 615 5 1 0 0
+c
+d 469 1 1 0 0
+c
+d 470 1 0 0 0
+c
+d 478 1 0 0 0
+c
+d 84 2 1 1 0
+c
+d 1285 1 0 0 0
+c
+d 1288 2 0 0 0
+c
+d 294 1 0 1 0
+c
+d 298 2 1 0 0
+c
+d 211 3 1 0 0
+c
+d 1237 2 0 0 0
+c
+d 1238 1 0 0 0
+c
+d 315 3 1 1 0
+c
+d 318 1 0 0 0
+c
+d 181 1 1 0 0
+c
+d 195 1 0 0 0
+c
+d 203 3 0 0 0
+c
+d 375 1 0 0 0
+c
+d 377 3 0 0 0
+c
+d 379 1 0 0 0
+c
+d 333 1 0 0 0
+c
+d 334 3 0 0 0
+c
+d 335 1 0 0 0
+c
+d 301 4 0 1 0
+c
+d 1220 2 0 0 0
+c
+d 537 1 0 0 0
+c
+d 539 3 0 1 0
+c
+d 547 1 0 1 0
+c
+d 369 4 1 0 0
+c
+d 633 1 0 1 0
+c
+d 634 4 2 0 0
+c
+d 300 2 1 0 0
+c
+d 314 4 1 0 0
+c
+d 39 1 0 1 0
+c
+d 43 3 1 0 0
+c
+d 437 4 2 0 0
+c
+d 217 4 1 0 0
+c
+d 775 3 1 1 0
+c
+d 782 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 278 4 1 1 0
+c
+d 622 1 1 0 0
+c
+d 628 3 1 0 0
+c
+d 629 1 0 0 0
+c
+d 86 1 0 0 0
+c
+d 87 4 0 0 0
+c
+d 89 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 120 4 0 0 0
+c
+d 662 4 1 2 0
+c
+d 182 3 1 0 0
+c
+d 183 3 1 0 0
+c
+d 423 4 1 1 0
+c
+d 1078 1 0 0 0
+c
+d 304 2 0 0 0
+c
+d 308 3 0 0 0
+c
+d 1020 3 0 0 0
+c
+d 146 1 1 0 0
+c
+d 153 4 1 0 0
+c
+d 228 1 0 0 0
+c
+d 157 4 0 2 0
+c
+d 127 1 0 1 0
+c
+d 129 3 2 0 0
+c
+d 1170 3 1 1 0
+c
+d 534 2 1 0 0
+c
+d 540 3 1 0 0
+c
+d 50 4 0 2 0
+c
+d 724 1 0 0 0
+c
+d 26 4 1 0 0
+c
+d 765 4 0 0 0
+c
+d 156 1 0 0 0
+c
+d 163 1 0 0 0
+c
+d 784 4 1 0 0
+c
+d 374 1 0 1 0
+c
+d 377 2 0 0 0
+c
+d 788 4 1 0 0
+c
+d 206 1 0 1 0
+c
+d 207 3 1 0 0
+c
+d 1246 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 178 2 1 0 0
+c
+d 181 1 0 1 0
+c
+d 28 2 1 0 0
+c
+d 1315 2 0 1 0
+c
+d 1087 3 0 0 0
+c
+d 851 3 1 1 0
+c
+d 852 4 1 0 0
+c
+d 101 3 0 0 0
+c
+d 423 1 0 1 0
+c
+d 424 3 0 1 0
+c
+d 426 2 1 0 0
+c
+d 199 4 2 1 0
+c
+d 208 1 0 0 0
+c
+d 210 1 0 0 0
+c
+d 419 2 1 0 0
+c
+d 1102 3 1 0 0
+c
+d 155 2 0 1 0
+c
+d 176 1 1 0 0
+c
+d 1150 4 1 0 0
+c
+d 18 3 1 0 0
+c
+d 30 2 1 0 0
+c
+d 745 4 1 1 0
+c
+d 746 1 0 0 0
+c
+d 132 1 1 0 0
+c
+d 133 5 1 0 0
+c
+d 211 1 0 0 0
+c
+d 212 3 2 0 0
+c
+d 513 5 0 0 0
+c
+d 437 2 0 0 0
+c
+d 92 1 0 0 0
+c
+d 93 1 1 0 0
+c
+d 114 4 1 0 0
+c
+d 157 1 1 0 0
+c
+d 1142 3 1 0 0
+c
+d 133 5 0 0 0
+c
+d 737 1 0 0 0
+c
+d 854 1 0 1 0
+c
+d 895 1 0 0 0
+c
+d 89 3 0 1 0
+c
+d 125 1 0 1 0
+c
+d 1279 1 0 1 0
+c
+d 1281 3 0 0 0
+c
+d 1282 1 0 1 0
+c
+d 204 4 2 0 0
+c
+d 1241 1 0 0 0
+c
+d 242 4 1 0 0
+c
+d 262 1 1 0 0
+c
+d 719 5 2 0 0
+c
+d 950 2 0 0 0
+c
+d 157 4 2 1 0
+c
+d 863 1 0 0 0
+c
+d 865 1 0 1 0
+c
+d 875 2 1 0 0
+c
+d 807 4 0 0 0
+c
+d 823 2 0 0 0
+c
+d 445 2 0 0 0
+c
+d 446 1 0 0 0
+c
+d 568 1 0 0 0
+c
+d 570 1 0 0 0
+c
+d 286 1 0 0 0
+c
+d 1221 4 2 0 0
+c
+d 838 2 1 0 0
+c
+d 839 2 0 0 0
+c
+d 842 1 0 0 0
+c
+d 662 4 1 0 0
+c
+d 671 1 0 0 0
+c
+d 672 3 1 0 0
+c
+d 1165 3 0 1 0
+c
+d 437 3 0 0 0
+c
+d 457 1 0 0 0
+c
+d 466 1 0 0 0
+c
+d 787 1 0 1 0
+c
+d 789 1 0 1 0
+c
+d 304 1 1 0 0
+c
+d 308 3 1 0 0
+c
+d 246 1 1 0 0
+c
+d 251 1 0 0 0
+c
+d 252 3 1 1 0
+c
+d 852 4 1 2 0
+c
+d 268 2 0 1 0
+c
+d 269 2 1 0 0
+c
+d 178 1 0 0 0
+c
+d 181 1 1 0 0
+c
+d 182 2 0 0 0
+c
+d 511 5 0 2 0
+c
+d 191 4 2 0 0
+c
+d 859 1 0 0 0
+c
+d 861 2 0 0 0
+c
+d 871 1 0 0 0
+c
+d 418 3 1 1 0
+c
+d 419 1 0 0 0
+c
+d 382 1 0 0 0
+c
+d 392 4 0 0 0
+c
+d 797 5 0 0 0
+c
+d 95 1 0 1 0
+c
+d 1000 1 0 1 0
+c
+d 1001 3 0 0 0
+c
+d 88 1 0 0 0
+c
+d 775 2 1 0 0
+c
+d 778 1 0 0 0
+c
+d 374 6 0 1 0
+c
+d 59 2 0 0 0
+c
+d 60 3 0 0 0
+c
+d 840 3 1 1 0
+c
+d 842 1 1 0 0
+c
+d 838 6 1 0 0
+c
+d 729 1 0 0 0
+c
+d 731 3 1 0 0
+c
+d 732 1 1 0 0
+c
+d 437 1 0 1 0
+c
+d 445 2 1 0 0
+c
+d 447 2 0 0 0
+c
+d 302 5 1 1 0
+c
+d 1157 1 0 0 0
+c
+d 1159 1 0 0 0
+c
+d 132 3 0 0 0
+c
+d 764 4 1 1 0
+c
+d 765 1 0 1 0
+c
+d 424 3 1 1 0
+c
+d 836 4 0 0 0
+c
+d 301 3 1 0 0
+c
+d 302 1 0 0 0
+c
+d 1156 1 1 0 0
+c
+d 167 5 2 0 0
+c
+d 54 6 2 0 0
+c
+d 1170 2 1 0 0
+c
+d 697 3 1 1 0
+c
+d 753 1 0 0 0
+c
+d 943 4 2 0 0
+c
+d 821 3 0 1 0
+c
+d 822 1 0 0 0
+c
+d 763 1 0 1 0
+c
+d 767 2 1 0 0
+c
+d 891 1 0 0 0
+c
+d 532 2 0 0 0
+c
+d 549 2 0 0 0
+c
+d 159 4 1 1 0
+c
+d 160 1 1 0 0
+c
+d 735 1 0 1 0
+c
+d 737 2 1 0 0
+c
+d 738 2 0 1 0
+c
+d 318 3 1 0 0
+c
+d 324 1 0 1 0
+c
+d 89 1 0 0 0
+c
+d 532 1 0 0 0
+c
+d 840 3 1 1 0
+c
+d 842 1 0 1 0
+c
+d 152 1 0 0 0
+c
+d 1087 1 0 0 0
+c
+d 1096 2 0 1 0
+c
+d 1100 1 0 0 0
+c
+d 218 1 0 1 0
+c
+d 1240 3 1 0 0
+c
+d 965 2 0 1 0
+c
+d 974 3 2 0 0
+c
+d 787 5 1 0 0
+c
+d 164 1 1 0 0
+c
+d 166 1 0 0 0
+c
+d 1103 1 0 0 0
+c
+d 1104 1 1 0 0
+c
+d 5 5 2 0 0
+c
+d 159 1 1 0 0
+c
+d 183 3 1 0 0
+c
+d 5 1 0 1 0
+c
+d 6 2 0 0 0
+c
+d 10 1 0 0 0
+c
+d 369 1 0 0 0
+c
+d 372 2 1 0 0
+c
+d 305 1 1 0 0
+c
+d 1143 3 1 0 0
+c
+d 1165 3 1 0 0
+c
+d 1168 1 0 0 0
+c
+d 101 2 1 0 0
+c
+d 111 1 0 0 0
+c
+d 608 1 1 0 0
+c
+d 1039 2 0 0 0
+c
+d 334 4 1 0 0
+c
+d 574 1 1 0 0
+c
+d 795 2 1 0 0
+c
+d 908 2 0 1 0
+c
+d 152 2 0 0 0
+c
+d 153 1 1 0 0
+c
+d 77 4 1 1 0
+c
+d 81 1 0 0 0
+c
+d 272 4 1 0 0
+c
+d 282 1 0 0 0
+c
+d 807 3 1 0 0
+c
+d 821 1 0 1 0
+c
+d 101 3 1 0 0
+c
+d 610 2 1 0 0
+c
+d 611 1 0 0 0
+c
+d 1111 1 0 0 0
+c
+d 1113 5 2 0 0
+c
+d 19 3 1 1 0
+c
+d 979 1 1 0 0
+c
+d 980 2 0 0 0
+c
+d 650 1 0 1 0
+c
+d 661 2 1 0 0
+c
+d 662 2 1 0 0
+c
+d 868 5 1 0 0
+c
+d 211 1 1 0 0
+c
+d 242 3 1 0 0
+c
+d 836 1 0 1 0
+c
+d 838 1 0 0 0
+c
+d 839 1 1 0 0
+c
+d 132 2 0 0 0
+c
+d 1258 1 0 0 0
+c
+d 753 1 1 0 0
+c
+d 761 6 0 0 0
+c
+d 127 1 1 0 0
+c
+d 129 2 0 1 0
+c
+d 799 5 2 1 0
+c
+d 734 1 0 0 0
+c
+d 737 3 0 0 0
+c
+d 738 1 0 0 0
+c
+d 740 1 0 0 0
+c
+d 120 1 1 0 0
+c
+d 126 5 1 0 0
+c
+d 470 1 0 0 0
+c
+d 477 2 1 0 0
+c
+d 478 1 1 0 0
+c
+d 315 5 1 2 0
+c
+d 111 2 1 0 0
+c
+d 146 2 0 1 0
+c
+d 675 4 1 1 0
+c
+d 54 1 0 1 0
+c
+d 694 3 1 1 0
+c
+d 796 1 1 0 0
+c
+d 797 2 1 0 0
+c
+d 799 1 0 0 0
+c
+d 775 4 2 0 0
+c
+d 784 2 0 1 0
+c
+d 46 7 1 0 0
+c
+d 148 4 0 0 0
+c
+d 418 3 1 1 0
+c
+d 1087 1 0 1 0
+c
+d 167 1 0 0 0
+c
+d 369 3 1 1 0
+c
+d 475 4 2 0 0
+c
+d 476 1 0 1 0
+c
+d 591 5 2 1 0
+c
+d 699 4 2 0 0
+c
+d 799 1 0 0 0
+c
+d 437 4 1 0 0
+c
+d 441 2 1 0 0
+c
+d 127 3 1 0 0
+c
+d 901 1 0 0 0
+c
+d 902 4 1 0 0
+c
+d 167 1 1 0 0
+c
+d 395 5 1 0 0
+c
+d 371 2 1 1 0
+c
+d 373 1 0 0 0
+c
+d 51 5 2 0 0
+c
+d 406 1 0 1 0
+c
+d 411 2 1 0 0
+c
+d 415 1 0 1 0
+c
+d 663 4 1 0 0
+c
+d 724 5 1 1 0
+c
+d 574 1 0 1 0
+c
+d 795 1 0 0 0
+c
+d 796 1 1 0 0
+c
+d 359 1 1 0 0
+c
+d 360 4 0 0 0
+c
+d 344 3 2 0 0
+c
+d 346 1 0 0 0
+c
+d 876 6 1 1 0
+c
+d 101 3 2 0 0
+c
+d 111 1 0 0 0
+c
+d 581 5 2 0 0
+c
+d 26 3 1 1 0
+c
+d 1315 1 0 0 0
+c
+d 21 2 1 0 0
+c
+d 29 3 1 1 0
+c
+d 615 1 1 0 0
+c
+d 616 3 1 1 0
+c
+d 7 1 0 0 0
+c
+d 10 4 0 0 0
+c
+d 49 5 1 0 0
+c
+d 59 1 1 0 0
+c
+d 844 1 0 1 0
+c
+d 851 4 1 1 0
+c
+d 60 1 1 0 0
+c
+d 647 4 0 0 0
+c
+d 93 3 2 0 0
+c
+d 142 1 0 0 0
+c
+d 86 1 0 0 0
+c
+d 89 1 1 0 0
+c
+d 276 5 2 0 0
+c
+d 86 4 2 0 0
+c
+d 848 4 0 0 0
+c
+d 157 3 1 0 0
+c
+d 159 1 0 0 0
+c
+d 133 2 0 0 0
+c
+d 134 1 0 0 0
+c
+d 842 4 2 0 0
+c
+d 879 1 0 0 0
+c
+d 839 1 0 0 0
+c
+d 842 3 0 0 0
+c
+d 799 1 0 0 0
+c
+d 806 2 2 0 0
+c
+d 368 4 0 0 0
+c
+d 286 1 0 1 0
+c
+d 292 1 0 0 0
+c
+d 294 3 1 1 0
+c
+d 101 1 0 0 0
+c
+d 111 3 1 0 0
+c
+d 146 1 1 0 0
+c
+d 52 2 0 0 0
+c
+d 1303 1 0 1 0
+c
+d 557 1 0 0 0
+c
+d 565 3 2 0 0
+c
+d 457 6 1 0 0
+c
+d 192 2 1 0 0
+c
+d 193 2 1 0 0
+c
+d 18 4 1 1 0
+c
+d 29 1 0 1 0
+c
+d 341 1 1 0 0
+c
+d 437 3 1 0 0
+c
+d 146 2 1 0 0
+c
+d 228 3 1 1 0
+c
+d 1185 2 1 0 0
+c
+d 1189 2 0 0 0
+c
+d 1190 1 0 0 0
+c
+d 799 1 0 0 0
+c
+d 806 3 1 2 0
+c
+d 529 1 1 0 0
+c
+d 530 3 1 0 0
+c
+d 1013 1 1 0 0
+c
+d 1033 4 1 0 0
+c
+d 1188 4 1 0 0
+c
+d 1191 1 0 1 0
+c
+d 650 2 0 1 0
+c
+d 661 1 1 0 0
+c
+d 18 3 2 0 0
+c
+d 1279 1 0 0 0
+c
+d 90 4 0 0 0
+c
+d 91 1 0 0 0
+c
+d 430 1 0 0 0
+c
+d 470 2 1 0 0
+c
+d 477 1 0 1 0
+c
+d 478 1 1 0 0
+c
+d 153 1 0 0 0
+c
+d 155 1 0 0 0
+c
+d 177 3 0 0 0
+c
+d 178 1 0 0 0
+c
+d 753 2 1 0 0
+c
+d 943 2 0 0 0
+c
+d 132 4 1 0 0
+c
+d 340 1 1 0 0
+c
+d 153 1 0 0 0
+c
+d 155 1 0 0 0
+c
+d 86 1 0 0 0
+c
+d 87 2 1 1 0
+c
+d 618 3 1 1 0
+c
+d 965 1 1 0 0
+c
+d 838 1 0 0 0
+c
+d 839 3 1 0 0
+c
+d 436 3 1 0 0
+c
+d 578 2 1 0 0
+c
+d 157 2 1 0 0
+c
+d 158 1 1 0 0
+c
+d 305 1 0 1 0
+c
+d 748 4 1 0 0
+c
+d 749 1 1 0 0
+c
+d 1070 1 0 0 0
+c
+d 1071 2 0 0 0
+c
+d 1073 1 0 0 0
+c
+d 46 3 1 0 0
+c
+d 12 3 1 0 0
+c
+d 1272 1 0 0 0
+c
+d 301 4 2 0 0
+c
+d 506 3 1 0 0
+c
+d 507 1 1 0 0
+c
+d 514 1 0 0 0
+c
+d 427 1 0 1 0
+c
+d 428 2 1 0 0
+c
+d 430 1 0 0 0
+c
+d 411 3 0 1 0
+c
+d 412 1 0 0 0
+c
+d 276 4 0 0 0
+c
+d 301 1 0 0 0
+c
+d 436 3 2 0 0
+c
+d 1043 2 0 1 0
+c
+d 159 3 1 0 0
+c
+d 184 1 0 1 0
+c
+d 787 5 2 0 0
+c
+d 457 4 1 0 0
+c
+d 458 1 0 0 0
+c
+d 459 1 0 0 0
+c
+d 662 1 1 0 0
+c
+d 666 1 0 0 0
+c
+d 675 3 1 0 0
+c
+d 273 3 1 1 0
+c
+d 287 1 0 0 0
+c
+d 159 1 1 0 0
+c
+d 183 2 1 0 0
+c
+d 196 1 0 0 0
+c
+d 839 1 0 0 0
+c
+d 842 3 1 1 0
+c
+d 881 1 0 1 0
+c
+d 146 1 0 0 0
+c
+d 153 2 1 0 0
+c
+d 155 1 1 0 0
+c
+d 821 4 1 1 0
+c
+d 748 3 1 0 0
+c
+d 242 2 0 1 0
+c
+d 243 1 1 0 0
+c
+d 1 1 0 0 0
+c
+d 17 3 1 0 0
+c
+d 93 1 1 0 0
+c
+d 875 4 1 0 0
+c
+d 592 4 1 1 0
+c
+d 21 7 2 0 0
+c
+d 304 1 0 1 0
+c
+d 307 4 1 0 0
+c
+d 328 2 0 0 0
+c
+d 715 1 1 0 0
+c
+d 716 5 1 0 0
+c
+d 602 4 1 0 0
+c
+d 1145 4 1 0 0
+c
+d 467 1 0 0 0
+c
+d 468 3 1 1 0
+c
+d 87 1 0 0 0
+c
+d 89 4 1 0 0
+c
+d 552 1 1 0 0
+c
+d 622 6 2 0 0
+c
+d 392 1 0 0 0
+c
+d 1126 1 0 0 0
+c
+d 1127 3 0 0 0
+c
+d 1131 1 0 0 0
+c
+d 1083 2 0 1 0
+c
+d 1084 4 1 1 0
+c
+d 554 1 0 0 0
+c
+d 556 1 0 0 0
+c
+d 564 1 1 0 0
+c
+d 737 1 0 0 0
+c
+d 753 4 1 0 0
+c
+d 754 1 1 0 0
+c
+d 510 3 2 0 0
+c
+d 521 1 0 0 0
+c
+d 844 4 1 1 0
+c
+d 152 1 0 0 0
+c
+d 413 2 1 0 0
+c
+d 414 1 1 0 0
+c
+d 418 1 1 0 0
+c
+d 419 2 0 1 0
+c
+d 534 4 2 0 0
+c
+d 547 1 0 0 0
+c
+d 132 2 1 0 0
+c
+d 133 1 0 1 0
+c
+d 495 2 0 1 0
+c
+d 207 1 0 0 0
+c
+d 1246 4 1 1 0
+c
+d 795 1 1 0 0
+c
+d 906 3 1 0 0
+c
+d 911 1 0 0 0
+c
+d 453 3 2 0 0
+c
+d 455 1 0 0 0
+c
+d 437 4 1 1 0
+c
+d 457 1 0 1 0
+c
+d 259 1 0 1 0
+c
+d 261 4 1 1 0
+c
+d 767 5 1 0 0
+c
+d 848 4 1 0 0
+c
+d 851 1 0 1 0
+c
+d 686 1 0 0 0
+c
+d 691 4 2 0 0
+c
+d 692 1 0 0 0
+c
+d 217 6 2 0 0
+c
+d 195 4 1 0 0
+c
+d 205 1 0 1 0
+c
+d 21 5 1 0 0
+c
+d 1022 1 1 0 0
+c
+d 529 2 1 0 0
+c
+d 532 2 0 0 0
+c
+d 425 1 0 0 0
+c
+d 426 2 0 0 0
+c
+d 591 1 0 0 0
+c
+d 753 3 0 0 0
+c
+d 760 1 0 0 0
+c
+d 120 1 0 0 0
+c
+d 121 2 0 0 0
+c
+d 6 3 0 0 0
+c
+d 101 3 0 0 0
+c
+d 1087 1 0 1 0
+c
+d 1095 1 0 1 0
+c
+d 507 1 1 0 0
+c
+d 508 2 1 0 0
+c
+d 509 1 0 1 0
+c
+d 287 3 1 2 0
+c
+d 5 4 0 0 0
+c
+d 6 1 0 0 0
+c
+d 7 1 0 0 0
+c
+d 1266 1 0 0 0
+c
+d 1274 2 1 0 0
+c
+d 1284 1 1 0 0
+c
+d 18 4 2 0 0
+c
+d 989 1 0 0 0
+c
+d 1176 6 1 0 0
+c
+d 242 4 1 1 0
+c
+d 246 1 1 0 0
+c
+d 574 3 1 0 0
+c
+d 795 1 0 1 0
+c
+d 86 3 1 0 0
+c
+d 87 1 0 0 0
+c
+d 430 1 0 0 0
+c
+d 470 3 0 0 0
+c
+d 863 2 0 0 0
+c
+d 876 2 1 1 0
+c
+d 259 2 1 0 0
+c
+d 437 1 1 0 0
+c
+d 443 3 1 0 0
+c
+d 232 1 0 0 0
+c
+d 233 1 0 0 0
+c
+d 234 4 1 1 0
+c
+d 382 2 0 0 0
+c
+d 383 1 0 0 0
+c
+d 384 1 0 0 0
+c
+d 146 1 1 0 0
+c
+d 148 3 1 0 0
+c
+d 239 1 0 0 0
+c
+d 622 3 1 1 0
+c
+d 625 1 0 1 0
+c
+d 1008 2 0 0 0
+c
+d 156 5 1 1 0
+c
+d 852 4 1 0 0
+c
+d 47 1 0 0 0
+c
+d 777 3 1 0 0
+c
+d 206 3 2 0 0
+c
+d 207 1 0 0 0
+c
+d 787 4 0 0 0
+c
+d 882 1 0 0 0
+c
+d 697 1 1 0 0
+c
+d 952 3 1 0 0
+c
+d 953 1 0 0 0
+c
+d 806 1 0 0 0
+c
+d 811 4 2 0 0
+c
+d 564 6 1 0 0
+c
+d 1110 1 0 1 0
+c
+d 1112 1 0 0 0
+c
+d 1115 1 1 0 0
+c
+d 529 1 0 0 0
+c
+d 550 3 2 0 0
+c
+d 835 2 1 0 0
+c
+d 901 3 0 0 0
+c
+d 194 7 2 0 0
+c
+d 262 2 1 0 0
+c
+d 278 1 0 0 0
+c
+d 593 1 1 0 0
+c
+d 677 5 1 0 0
+c
+d 511 3 1 1 0
+c
+d 514 1 0 1 0
+c
+d 719 2 0 0 0
+c
+d 47 5 1 1 0
+c
+d 1170 4 2 0 0
+c
+d 1210 1 0 0 0
+c
+d 650 1 0 1 0
+c
+d 655 2 1 0 0
+c
+d 658 1 0 0 0
+c
+d 177 1 0 0 0
+c
+d 178 2 1 1 0
+c
+d 789 2 0 0 0
+c
+d 510 4 1 0 0
+c
+d 807 1 1 0 0
+c
+d 823 3 1 0 0
+c
+d 682 2 0 0 0
+c
+d 965 1 0 0 0
+c
+d 977 1 1 0 0
+c
+d 982 1 0 0 0
+c
+d 305 1 0 0 0
+c
+d 353 2 1 0 0
+c
+d 1144 1 0 0 0
+c
+d 211 2 1 0 0
+c
+d 215 2 0 0 0
+c
+d 852 3 1 1 0
+c
+d 853 1 0 0 0
+c
+d 431 1 1 0 0
+c
+d 436 3 1 0 0
+c
+d 437 1 0 1 0
+c
+d 157 2 0 0 0
+c
+d 159 1 0 0 0
+c
+d 157 3 2 0 0
+c
+d 159 1 0 0 0
+c
+d 343 4 1 0 0
+c
+d 1148 1 1 0 0
+c
+d 341 3 1 1 0
+c
+d 437 1 1 0 0
+c
+d 565 4 1 0 0
+c
+d 162 4 0 0 0
+c
+d 360 1 1 0 0
+c
+d 1096 6 1 1 0
+c
+d 1097 1 0 0 0
+c
+d 737 3 0 0 0
+c
+d 650 2 0 1 0
+c
+d 661 1 1 0 0
+c
+d 510 1 0 0 0
+c
+d 511 4 1 0 0
+c
+d 252 3 2 0 0
+c
+d 259 1 0 0 0
+c
+d 276 5 2 0 0
+c
+d 277 1 0 1 0
+c
+d 1113 2 1 0 0
+c
+d 1115 1 0 0 0
+c
+d 1116 2 0 0 0
+c
+d 164 1 0 0 0
+c
+d 1104 3 0 1 0
+c
+d 169 3 1 0 0
+c
+d 377 1 1 0 0
+c
+d 66 1 0 0 0
+c
+d 67 3 1 0 0
+c
+d 30 4 1 0 0
+c
+d 48 5 2 1 0
+c
+d 148 1 1 0 0
+c
+d 259 3 1 0 0
+c
+d 242 3 2 0 0
+c
+d 262 1 0 0 0
+c
+d 157 2 1 0 0
+c
+d 159 1 0 1 0
+c
+d 19 3 2 0 0
+c
+d 980 1 0 1 0
+c
+d 981 1 0 0 0
+c
+d 411 4 0 0 0
+c
+d 575 3 1 0 0
+c
+d 796 1 1 0 0
+c
+d 218 2 1 0 0
+c
+d 1243 3 1 0 0
+c
+d 557 6 1 0 0
+c
+d 1063 1 0 0 0
+c
+d 1158 5 0 0 0
+c
+d 46 2 1 0 0
+c
+d 168 3 1 1 0
+c
+d 169 2 1 0 0
+c
+d 0 1 0 0 0
+c
+d 1 3 0 1 0
+c
+d 1323 1 0 1 0
+c
+d 182 3 1 0 0
+c
+d 190 1 1 0 0
+c
+d 191 1 0 0 0
+c
+d 3 1 0 0 0
+c
+d 13 3 1 0 0
+c
+d 393 2 0 1 0
+c
+d 407 1 0 1 0
+c
+d 132 4 1 1 0
+c
+d 843 4 0 2 0
+c
+d 279 1 0 1 0
+c
+d 305 2 1 0 0
+c
+d 353 2 0 0 0
+c
+d 691 1 0 1 0
+c
+d 801 4 1 0 0
+c
+d 511 6 2 0 0
+c
+d 400 3 1 1 0
+c
+d 409 1 1 0 0
+c
+d 410 2 0 0 0
+c
+d 167 4 0 0 0
+c
+d 499 2 1 0 0
+c
+d 505 2 1 0 0
+c
+d 906 1 0 1 0
+c
+d 910 4 2 0 0
+c
+d 374 5 1 0 0
+c
+d 375 1 0 0 0
+c
+d 48 4 1 1 0
+c
+d 39 1 0 1 0
+c
+d 127 4 2 0 0
+c
+d 129 1 0 0 0
+c
+d 608 5 2 0 0
+c
+d 119 1 0 1 0
+c
+d 120 3 1 0 0
+c
+d 225 4 1 0 0
+c
+d 1269 1 0 0 0
+c
+d 1270 3 1 1 0
+c
+d 1271 1 0 0 0
+c
+d 965 4 2 0 0
+c
+d 966 1 0 0 0
+c
+d 424 1 0 0 0
+c
+d 591 2 1 0 0
+c
+d 592 2 1 0 0
+c
+d 133 5 1 0 0
+c
+d 134 1 1 0 0
+c
+d 156 2 1 1 0
+c
+d 157 1 0 0 0
+c
+d 341 1 0 0 0
+c
+d 348 4 2 0 0
+c
+d 395 3 1 1 0
+c
+d 598 2 0 0 0
+c
+d 534 3 1 1 0
+c
+d 382 1 0 0 0
+c
+d 389 3 0 0 0
+c
+d 390 1 0 0 0
+c
+d 734 1 0 0 0
+c
+d 737 2 1 0 0
+c
+d 740 1 0 1 0
+c
+d 1172 3 0 0 0
+c
+d 93 4 0 0 0
+c
+d 823 1 1 0 0
+c
+d 835 2 0 1 0
+c
+d 753 5 1 2 0
+c
+d 334 2 0 1 0
+c
+d 335 1 0 1 0
+c
+d 336 2 0 0 0
+c
+d 91 2 1 0 0
+c
+d 92 3 1 0 0
+c
+d 787 1 0 1 0
+c
+d 716 1 0 0 0
+c
+d 717 2 1 1 0
+c
+d 718 4 1 0 0
+c
+d 46 1 1 0 0
+c
+d 437 4 1 0 0
+c
+d 568 1 0 0 0
+c
+d 159 4 1 0 0
+c
+d 101 5 2 1 0
+c
+d 1194 3 1 0 0
+c
+d 807 1 0 0 0
+c
+d 823 1 1 0 0
+c
+d 824 1 0 0 0
+c
+d 903 2 0 0 0
+c
+d 534 4 2 0 0
+c
+d 764 1 0 0 0
+c
+d 766 4 1 1 0
+c
+d 21 1 1 0 0
+c
+d 39 3 1 0 0
+c
+d 578 2 1 0 0
+c
+d 956 4 1 0 0
+c
+d 400 2 1 0 0
+c
+d 401 2 1 0 0
+c
+d 403 1 0 0 0
+c
+d 404 1 1 0 0
+c
+d 261 4 2 0 0
+c
+d 1226 1 0 0 0
+c
+d 734 4 2 0 0
+c
+d 54 1 0 0 0
+c
+d 55 2 1 0 0
+c
+d 74 1 1 0 0
+c
+d 75 1 0 0 0
+c
+d 1299 3 1 0 0
+c
+d 168 2 0 0 0
+c
+d 806 2 0 1 0
+c
+d 807 2 1 0 0
+c
+d 32 3 1 0 0
+c
+d 1296 1 1 0 0
+c
+d 301 3 1 0 0
+c
+d 302 1 0 0 0
+c
+d 1152 1 0 1 0
+c
+d 167 4 0 0 0
+c
+d 419 1 0 0 0
+c
+d 1083 3 2 0 0
+c
+d 133 1 1 0 0
+c
+d 134 3 1 0 0
+c
+d 139 1 0 0 0
+c
+d 807 1 1 0 0
+c
+d 906 4 1 0 0
+c
+d 354 2 0 1 0
+c
+d 1125 1 1 0 0
+c
+d 300 1 0 0 0
+c
+d 301 3 1 0 0
+c
+d 314 1 0 0 0
+c
+d 842 4 0 1 0
+c
+d 430 3 0 0 0
+c
+d 470 1 0 0 0
+c
+d 26 4 2 0 0
+c
+d 855 4 1 0 0
+c
+d 856 1 0 0 0
+c
+d 1195 2 0 0 0
+c
+d 279 1 0 1 0
+c
+d 305 2 1 0 0
+c
+d 353 2 0 1 0
+c
+d 207 5 2 0 0
+c
+d 1185 4 0 0 0
+c
+d 1192 1 0 0 0
+c
+d 799 4 2 0 0
+c
+d 196 1 0 1 0
+c
+d 199 3 1 0 0
+c
+d 749 1 0 0 0
+c
+d 751 1 0 0 0
+c
+d 162 1 0 1 0
+c
+d 1251 3 1 0 0
+c
+d 318 4 1 0 0
+c
+d 1149 1 0 1 0
+c
+d 157 4 1 1 0
+c
+d 820 4 1 1 0
+c
+d 19 3 0 0 0
+c
+d 207 2 0 1 0
+c
+d 208 1 0 1 0
+c
+d 1245 1 1 0 0
+c
+d 301 1 0 0 0
+c
+d 1150 2 1 0 0
+c
+d 1151 2 0 0 0
+c
+d 1216 2 1 0 0
+c
+d 318 4 2 0 0
+c
+d 19 4 2 0 0
+c
+d 133 3 1 1 0
+c
+d 114 1 0 0 0
+c
+d 120 1 0 0 0
+c
+d 133 3 1 0 0
+c
+d 301 2 1 0 0
+c
+d 304 1 0 0 0
+c
+d 217 3 1 0 0
+c
+d 218 1 1 0 0
+c
+d 221 1 0 0 0
+c
+d 92 1 1 0 0
+c
+d 93 3 1 0 0
+c
+d 532 1 1 0 0
+c
+d 537 4 1 0 0
+c
+d 539 1 0 0 0
+c
+d 455 3 1 0 0
+c
+d 527 2 0 1 0
+c
+d 529 1 0 1 0
+c
+d 543 1 1 0 0
+c
+d 599 3 1 0 0
+c
+d 882 2 0 0 0
+c
+d 886 3 0 2 0
+c
+d 315 1 1 0 0
+c
+d 324 4 1 0 0
+c
+d 436 1 0 0 0
+c
+d 437 3 1 0 0
+c
+d 471 1 1 0 0
+c
+d 400 4 0 0 0
+c
+d 195 3 1 0 0
+c
+d 686 4 1 0 0
+c
+d 1266 2 0 2 0
+c
+d 1268 1 1 0 0
+c
+d 789 1 1 0 0
+c
+d 829 2 0 0 0
+c
+d 830 1 0 0 0
+c
+d 1111 4 1 0 0
+c
+d 620 5 1 2 0
+c
+d 1156 3 1 0 0
+c
+d 1195 1 1 0 0
+c
+d 101 5 1 0 0
+c
+d 376 4 2 0 0
+c
+d 286 5 1 1 0
+c
+d 768 5 1 0 0
+c
+d 773 2 1 0 0
+c
+d 211 1 0 0 0
+c
+d 242 4 1 0 0
+c
+d 248 1 1 0 0
+c
+d 457 1 0 1 0
+c
+d 458 2 0 0 0
+c
+d 489 1 0 0 0
+c
+d 75 2 0 0 0
+c
+d 84 2 1 1 0
+c
+d 5 3 1 1 0
+c
+d 6 1 0 0 0
+c
+d 246 3 1 0 0
+c
+d 248 1 1 0 0
+c
+d 1270 1 1 0 0
+c
+d 1272 3 1 0 0
+c
+d 1273 1 0 0 0
+c
+d 16 2 1 1 0
+c
+d 93 1 0 0 0
+c
+d 10 2 1 0 0
+c
+d 11 4 1 0 0
+c
+d 807 1 0 1 0
+c
+d 823 5 2 0 0
+c
+d 286 3 1 1 0
+c
+d 337 1 0 0 0
+c
+d 338 1 0 0 0
+c
+d 340 4 1 0 0
+c
+d 16 4 0 0 0
+c
+d 301 1 0 1 0
+c
+d 1156 2 1 1 0
+c
+d 842 1 0 0 0
+c
+d 878 1 0 0 0
+c
+d 879 3 0 0 0
+c
+d 208 7 2 0 0
+c
+d 311 3 2 0 0
+c
+d 327 1 0 0 0
+c
+d 377 1 0 0 0
+c
+d 384 3 1 0 0
+c
+d 387 1 0 0 0
+c
+d 75 3 1 0 0
+c
+d 1300 2 1 0 0
+c
+d 146 4 1 1 0
+c
+d 507 2 1 0 0
+c
+d 558 2 1 0 0
+c
+d 157 1 0 1 0
+c
+d 159 2 1 0 0
+c
+d 183 1 0 1 0
+c
+d 535 1 0 0 0
+c
+d 536 2 1 0 0
+c
+d 541 1 0 0 0
+c
+d 89 5 1 1 0
+c
+d 90 1 0 0 0
+c
+d 606 1 0 1 0
+c
+d 608 3 1 0 0
+c
+d 618 1 0 0 0
+c
+d 133 3 1 1 0
+c
+d 374 4 1 0 0
+c
+d 377 1 0 0 0
+c
+d 157 3 1 1 0
+c
+d 242 1 0 0 0
+c
+d 787 1 0 0 0
+c
+d 882 2 0 0 0
+c
+d 887 2 0 0 0
+c
+d 1195 5 1 0 0
+c
+d 114 1 0 1 0
+c
+d 115 4 1 0 0
+c
+d 116 1 1 0 0
+c
+d 278 5 2 0 0
+c
+d 551 1 0 0 0
+c
+d 775 4 2 1 0
+c
+d 608 8 2 0 0
+c
+d 311 5 0 0 0
+c
+d 1192 1 0 1 0
+c
+d 1205 4 1 0 0
+c
+d 262 3 1 0 0
+c
+d 523 4 2 0 0
+c
+d 524 1 0 0 0
+c
+d 315 1 0 1 0
+c
+d 324 2 0 1 0
+c
+d 325 1 0 0 0
+c
+d 862 1 1 0 0
+c
+d 863 3 0 0 0
+c
+d 864 1 0 0 0
+c
+d 301 5 1 1 0
+c
+d 599 1 0 0 0
+c
+d 606 4 1 2 0
+c
+d 285 2 0 0 0
+c
+d 1226 1 1 0 0
+c
+d 114 1 0 0 0
+c
+d 120 1 0 0 0
+c
+d 156 3 1 0 0
+c
+d 163 2 1 0 0
+c
+d 1212 3 1 0 0
+c
+d 132 1 1 0 0
+c
+d 337 2 0 0 0
+c
+d 338 1 0 0 0
+c
+d 525 2 0 0 0
+c
+d 526 2 0 0 0
+c
+d 272 2 0 1 0
+c
+d 273 2 1 0 0
+c
+d 1229 1 0 1 0
+c
+d 699 1 1 0 0
+c
+d 844 5 1 0 0
+c
+d 300 2 1 0 0
+c
+d 315 1 0 1 0
+c
+d 377 4 1 0 0
+c
+d 839 1 0 0 0
+c
+d 840 3 2 0 0
+c
+d 1195 4 1 0 0
+c
+d 1198 1 0 0 0
+c
+d 878 4 0 0 0
+c
+d 111 1 0 0 0
+c
+d 146 3 2 0 0
+c
+d 168 4 2 0 0
+c
+d 194 3 1 0 0
+c
+d 204 1 0 0 0
+c
+d 101 1 0 1 0
+c
+d 1091 3 1 0 0
+c
+d 115 3 1 1 0
+c
+d 211 4 1 1 0
+c
+d 1238 1 0 1 0
+c
+d 12 2 1 0 0
+c
+d 89 1 0 0 0
+c
+d 853 1 0 1 0
+c
+d 896 1 0 1 0
+c
+d 418 1 1 0 0
+c
+d 419 3 1 0 0
+c
+d 420 1 0 0 0
+c
+d 1270 5 0 0 0
+c
+d 120 2 1 1 0
+c
+d 127 2 0 0 0
+c
+d 129 1 0 0 0
+c
+d 532 1 0 1 0
+c
+d 535 4 1 0 0
+c
+d 427 3 1 2 0
+c
+d 1078 1 0 0 0
+c
+d 749 3 1 1 0
+c
+d 857 1 1 0 0
+c
+d 344 4 2 0 0
+c
+d 301 2 1 0 0
+c
+d 304 2 0 0 0
+c
+d 78 1 0 1 0
+c
+d 79 2 1 0 0
+c
+d 84 2 1 0 0
+c
+d 85 1 0 0 0
+c
+d 737 1 1 0 0
+c
+d 740 1 0 1 0
+c
+d 741 2 0 0 0
+c
+d 32 1 0 0 0
+c
+d 75 4 0 0 0
+c
+d 159 1 0 0 0
+c
+d 178 3 2 0 0
+c
+d 784 3 0 0 0
+c
+d 785 1 0 0 0
+c
+d 437 5 2 0 0
+c
+d 355 1 0 0 0
+c
+d 358 3 0 0 0
+c
+d 564 4 2 0 0
+c
+d 789 1 0 0 0
+c
+d 152 2 1 0 0
+c
+d 153 1 1 0 0
+c
+d 55 3 1 1 0
+c
+d 66 4 1 0 0
+c
+d 878 2 0 2 0
+c
+d 554 1 0 0 0
+c
+d 555 4 2 0 0
+c
+d 661 3 1 0 0
+c
+d 673 1 0 1 0
+c
+d 437 3 1 1 0
+c
+d 851 3 1 0 0
+c
+d 155 1 0 1 0
+c
+d 176 3 0 1 0
+c
+d 180 1 0 0 0
+c
+d 796 5 1 0 0
+c
+d 1125 2 0 0 0
+c
+d 1127 3 0 0 0
+c
+d 1128 1 0 0 0
+c
+d 737 2 0 0 0
+c
+d 742 1 0 0 0
+c
+d 49 2 0 1 0
+c
+d 58 1 1 0 0
+c
+d 886 6 1 1 0
+c
+d 854 1 0 0 0
+c
+d 866 5 2 0 0
+c
+d 868 1 0 1 0
+c
+d 301 2 1 0 0
+c
+d 302 1 0 1 0
+c
+d 303 2 1 0 0
+c
+d 32 1 0 0 0
+c
+d 1319 1 0 0 0
+c
+d 1320 7 2 0 0
+c
+d 152 3 1 1 0
+c
+d 153 1 0 0 0
+c
+d 1150 2 1 0 0
+c
+d 1152 4 1 0 0
+c
+d 1 4 1 1 0
+c
+d 4 1 0 1 0
+c
+d 470 2 0 0 0
+c
+d 477 1 1 0 0
+c
+d 527 4 2 1 0
+c
+d 195 1 0 1 0
+c
+d 205 3 2 0 0
+c
+d 338 2 0 1 0
+c
+d 339 3 1 0 0
+c
+d 437 3 1 0 0
+c
+d 457 2 0 1 0
+c
+d 419 1 0 0 0
+c
+d 423 4 1 0 0
+c
+d 429 1 1 0 0
+c
+d 323 2 1 0 0
+c
+d 324 2 1 0 0
+c
+d 754 3 1 0 0
+c
+d 756 1 0 0 0
+c
+d 532 7 2 0 0
+c
+d 734 2 1 0 0
+c
+d 737 1 0 0 0
+c
+d 1192 1 1 0 0
+c
+d 1203 4 1 0 0
+c
+d 46 5 1 0 0
+c
+d 534 4 1 0 0
+c
+d 183 5 2 0 0
+c
+d 437 1 0 1 0
+c
+d 575 3 1 0 0
+c
+d 576 1 0 0 0
+c
+d 18 3 1 1 0
+c
+d 77 1 0 0 0
+c
+d 75 4 1 0 0
+c
+d 86 1 0 1 0
+c
+d 301 1 0 1 0
+c
+d 304 3 1 0 0
+c
+d 307 2 0 0 0
+c
+d 620 4 2 0 0
+c
+d 621 1 0 0 0
+c
+d 604 1 0 1 0
+c
+d 635 4 1 0 0
+c
+d 637 1 0 0 0
+c
+d 120 1 1 0 0
+c
+d 124 3 1 0 0
+c
+d 525 6 1 1 0
+c
+d 753 2 1 0 0
+c
+d 759 2 1 0 0
+c
+d 760 1 0 0 0
+c
+d 943 1 0 0 0
+c
+d 559 2 1 0 0
+c
+d 560 2 1 0 0
+c
+d 799 1 0 0 0
+c
+d 844 1 1 0 0
+c
+d 898 1 0 1 0
+c
+d 1084 1 0 0 0
+c
+d 1085 3 1 0 0
+c
+d 120 5 1 2 0
+c
+d 21 4 2 0 0
+c
+d 1275 3 2 0 0
+c
+d 1278 1 0 0 0
+c
+d 718 4 1 0 0
+c
+d 731 1 1 0 0
+c
+d 1177 4 1 0 0
+c
+d 1178 1 1 0 0
+c
+d 101 2 1 0 0
+c
+d 111 1 0 1 0
+c
+d 608 4 1 0 0
+c
+d 1039 1 0 0 0
+c
+d 56 2 1 0 0
+c
+d 1309 4 1 0 0
+c
+d 341 1 0 1 0
+c
+d 411 4 1 1 0
+c
+d 861 4 0 1 0
+c
+d 875 1 0 1 0
+c
+d 457 1 0 1 0
+c
+d 458 3 2 0 0
+c
+d 91 1 0 1 0
+c
+d 92 2 1 0 0
+c
+d 118 2 0 1 0
+c
+d 43 1 0 1 0
+c
+d 44 1 0 0 0
+c
+d 164 1 1 0 0
+c
+d 167 2 0 1 0
+c
+d 152 1 1 0 0
+c
+d 155 4 1 0 0
+c
+d 787 1 0 1 0
+c
+d 882 3 0 0 0
+c
+d 883 1 0 0 0
+c
+d 217 3 0 0 0
+c
+d 241 1 0 0 0
+c
+d 47 1 1 0 0
+c
+d 775 1 0 1 0
+c
+d 777 2 0 0 0
+c
+d 369 2 1 1 0
+c
+d 382 1 0 0 0
+c
+d 172 1 0 0 0
+c
+d 173 1 1 0 0
+c
+d 174 2 1 0 0
+c
+d 1195 4 1 1 0
+c
+d 100 1 0 1 0
+c
+d 101 2 1 0 0
+c
+d 105 2 1 0 0
+c
+d 106 1 0 0 0
+c
+d 341 1 0 0 0
+c
+d 347 4 0 0 0
+c
+d 836 6 2 0 0
+c
+d 101 5 1 0 0
+c
+d 103 1 1 0 0
+c
+d 338 4 1 0 0
+c
+d 331 1 1 0 0
+c
+d 332 2 1 0 0
+c
+d 1195 3 1 0 0
+c
+d 470 1 1 0 0
+c
+d 477 3 1 0 0
+c
+d 478 1 0 0 0
+c
+d 486 1 0 0 0
+c
+d 81 2 0 0 0
+c
+d 83 1 0 0 0
+c
+d 1295 1 0 0 0
+c
+d 923 2 1 0 0
+c
+d 924 4 1 0 0
+c
+d 706 3 1 0 0
+c
+d 127 3 0 0 0
+c
+d 128 1 0 0 0
+c
+d 276 5 2 0 0
+c
+d 983 1 1 0 0
+c
+d 985 1 0 0 0
+c
+d 323 4 2 0 0
+c
+d 324 1 0 1 0
+c
+d 86 6 2 0 0
+c
+d 26 1 1 0 0
+c
+d 28 4 1 0 0
+c
+d 29 1 0 0 0
+c
+d 2 1 1 0 0
+c
+d 3 1 0 0 0
+c
+d 12 1 0 0 0
+c
+d 13 1 0 0 0
+c
+d 60 1 0 0 0
+c
+d 62 3 1 1 0
+c
+d 734 1 0 1 0
+c
+d 756 3 1 0 0
+c
+d 772 1 1 0 0
+c
+d 383 1 0 1 0
+c
+d 384 1 1 0 0
+c
+d 1134 1 0 0 0
+c
+d 1135 3 0 0 0
+c
+d 437 1 1 0 0
+c
+d 458 2 0 0 0
+c
+d 157 1 0 0 0
+c
+d 159 2 0 0 0
+c
+d 178 1 0 1 0
+c
+d 341 1 1 0 0
+c
+d 348 3 1 0 0
+c
+d 746 1 0 0 0
+c
+d 748 4 1 0 0
+c
+d 6 2 1 0 0
+c
+d 12 2 1 0 0
+c
+d 90 1 0 1 0
+c
+d 146 2 1 0 0
+c
+d 507 3 1 1 0
+c
+d 1070 1 0 1 0
+c
+d 787 2 0 0 0
+c
+d 833 2 1 1 0
+c
+d 395 4 1 1 0
+c
+d 397 1 1 0 0
+c
+d 24 4 1 0 0
+c
+d 25 2 1 0 0
+c
+d 340 1 0 0 0
+c
+d 341 1 1 0 0
+c
+d 344 3 1 0 0
+c
+d 373 3 1 0 0
+c
+d 743 1 0 0 0
+c
+d 746 3 1 0 0
+c
+d 747 1 0 0 0
+c
+d 536 1 0 1 0
+c
+d 541 3 1 0 0
+c
+d 1196 4 1 0 0
+c
+d 455 2 1 1 0
+c
+d 457 2 1 0 0
+c
+d 46 1 0 0 0
+c
+d 74 2 0 0 0
+c
+d 368 2 1 0 0
+c
+d 1126 1 0 1 0
+c
+d 597 1 0 0 0
+c
+d 598 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 89 2 1 0 0
+c
+d 205 3 1 0 0
+c
+d 341 1 0 0 0
+c
+d 402 2 1 0 0
+c
+d 404 1 0 0 0
+c
+d 411 1 0 1 0
+c
+d 848 1 1 0 0
+c
+d 849 2 1 0 0
+c
+d 850 2 0 0 0
+c
+d 334 4 2 0 0
+c
+d 393 5 1 1 0
+c
+d 399 1 0 0 0
+c
+d 133 1 0 0 0
+c
+d 134 2 0 0 0
+c
+d 136 1 0 0 0
+c
+d 49 2 0 0 0
+c
+d 50 2 0 0 0
+c
+d 51 1 1 0 0
+c
+d 807 1 0 0 0
+c
+d 907 2 0 0 0
+c
+d 46 4 0 0 0
+c
+d 159 1 0 1 0
+c
+d 183 2 1 0 0
+c
+d 184 1 0 1 0
+c
+d 183 2 1 0 0
+c
+d 184 2 0 1 0
+c
+d 340 5 2 0 0
+c
+d 669 6 1 1 0
+c
+d 785 1 0 0 0
+c
+d 436 1 0 0 0
+c
+d 437 2 0 0 0
+c
+d 470 1 0 0 0
+c
+d 1024 1 0 0 0
+c
+d 1025 2 0 0 0
+c
+d 1026 1 0 0 0
+c
+d 882 2 1 0 0
+c
+d 888 2 0 1 0
+c
+d 1 5 0 0 0
+c
+d 278 3 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 193 3 1 1 0
+c
+d 575 1 0 0 0
+c
+d 796 4 0 0 0
+c
+d 886 5 2 0 0
+c
+d 1171 3 1 0 0
+c
+d 1172 2 0 1 0
+c
+d 298 1 1 0 0
+c
+d 318 3 1 0 0
+c
+d 319 1 0 0 0
+c
+d 551 3 1 0 0
+c
+d 554 1 1 0 0
+c
+d 550 2 0 1 0
+c
+d 552 1 0 0 0
+c
+d 553 2 1 0 0
+c
+d 155 4 2 0 0
+c
+d 156 1 0 0 0
+c
+d 606 3 1 2 0
+c
+d 509 3 1 0 0
+c
+d 510 1 1 0 0
+c
+d 1194 3 1 0 0
+c
+d 101 3 1 0 0
+c
+d 662 3 1 0 0
+c
+d 682 2 0 0 0
+c
+d 259 1 0 0 0
+c
+d 261 1 0 0 0
+c
+d 1226 1 0 0 0
+c
+d 21 5 1 0 0
+c
+d 25 1 0 0 0
+c
+d 75 3 0 0 0
+c
+d 86 1 0 0 0
+c
+d 801 4 0 0 0
+c
+d 369 1 0 0 0
+c
+d 372 3 1 0 0
+c
+d 373 2 0 0 0
+c
+d 591 4 0 0 0
+c
+d 789 5 2 0 0
+c
+d 756 4 2 0 0
+c
+d 772 1 0 1 0
+c
+d 1111 2 1 0 0
+c
+d 1112 2 1 0 0
+c
+d 1114 1 0 0 0
+c
+d 44 6 2 0 0
+c
+d 608 1 0 0 0
+c
+d 616 4 2 0 0
+c
+d 1165 1 0 0 0
+c
+d 1168 3 0 0 0
+c
+d 1176 1 1 0 0
+c
+d 157 1 0 0 0
+c
+d 162 1 0 0 0
+c
+d 365 1 0 0 0
+c
+d 755 1 1 0 0
+c
+d 756 4 1 0 0
+c
+d 757 1 0 0 0
+c
+d 384 4 1 1 0
+c
+d 384 3 1 0 0
+c
+d 1111 1 0 1 0
+c
+d 46 6 0 2 0
+c
+d 511 1 0 0 0
+c
+d 527 4 1 0 0
+c
+d 221 3 1 0 0
+c
+d 222 1 0 0 0
+c
+d 1233 2 0 0 0
+c
+d 75 2 0 0 0
+c
+d 852 3 1 1 0
+c
+d 853 1 1 0 0
+c
+d 133 3 1 0 0
+c
+d 323 1 0 0 0
+c
+d 300 1 0 0 0
+c
+d 314 4 0 0 0
+c
+d 311 4 2 0 0
+c
+d 327 1 0 0 0
+c
+d 88 4 2 1 0
+c
+d 89 1 0 0 0
+c
+d 1110 4 0 0 0
+c
+d 1120 1 0 0 0
+c
+d 829 2 1 0 0
+c
+d 830 2 0 0 0
+c
+d 831 1 0 0 0
+c
+d 1 3 1 0 0
+c
+d 17 1 0 0 0
+c
+d 1174 2 1 0 0
+c
+d 753 2 0 0 0
+c
+d 755 1 1 0 0
+c
+d 1061 4 1 0 0
+c
+d 556 1 0 0 0
+c
+d 557 2 0 0 0
+c
+d 1168 1 1 0 0
+c
+d 1179 3 0 0 0
+c
+d 1194 1 0 1 0
+c
+d 1203 3 1 0 0
+c
+d 842 4 1 0 0
+c
+d 848 1 1 0 0
+c
+d 275 4 1 1 0
+c
+d 382 1 1 0 0
+c
+d 384 1 0 1 0
+c
+d 385 2 0 0 0
+c
+d 578 4 2 0 0
+c
+d 579 1 1 0 0
+c
+d 152 3 0 0 0
+c
+d 413 1 0 0 0
+c
+d 509 4 1 2 0
+c
+d 262 1 0 0 0
+c
+d 274 3 1 0 0
+c
+d 1172 1 0 1 0
+c
+d 1185 4 0 1 0
+c
+d 791 1 0 0 0
+c
+d 794 1 0 0 0
+c
+d 795 1 0 0 0
+c
+d 523 1 0 1 0
+c
+d 527 3 1 1 0
+c
+d 882 2 0 0 0
+c
+d 885 1 0 0 0
+c
+d 478 1 0 0 0
+c
+d 481 2 1 0 0
+c
+d 482 1 0 0 0
+c
+d 484 1 0 0 0
+c
+d 146 5 2 0 0
+c
+d 152 1 0 0 0
+c
+d 615 1 0 1 0
+c
+d 616 1 1 0 0
+c
+d 617 2 0 0 0
+c
+d 985 1 0 0 0
+c
+d 791 1 1 0 0
+c
+d 831 2 1 1 0
+c
+d 178 1 0 0 0
+c
+d 181 2 1 0 0
+c
+d 195 1 0 1 0
+c
+d 262 2 0 0 0
+c
+d 270 1 0 0 0
+c
+d 4 6 0 0 0
+c
+d 301 1 0 0 0
+c
+d 1157 4 0 0 0
+c
+d 555 3 1 0 0
+c
+d 1185 1 0 1 0
+c
+d 1192 4 1 0 0
+c
+d 534 5 0 0 0
+c
+d 875 5 2 1 0
+c
+d 392 5 1 1 0
+c
+d 217 6 1 0 0
+c
+d 494 5 2 1 0
+c
+d 369 4 2 0 0
+c
+d 371 1 0 0 0
+c
+d 839 2 1 0 0
+c
+d 842 3 1 1 0
+c
+d 157 3 1 0 0
+c
+d 159 1 0 0 0
+c
+d 242 1 0 1 0
+c
+d 602 3 1 0 0
+c
+d 604 1 1 0 0
+c
+d 278 5 2 1 0
+c
+d 146 3 1 0 0
+c
+d 1255 3 0 0 0
+c
+d 737 5 2 0 0
+c
+d 91 5 1 0 0
+c
+d 532 3 1 1 0
+c
+d 799 2 1 1 0
+c
+d 806 1 0 0 0
+c
+d 840 1 0 0 0
+c
+d 301 4 1 0 0
+c
+d 457 2 1 0 0
+c
+d 466 1 0 1 0
+c
+d 493 3 0 1 0
+c
+d 1077 1 1 0 0
+c
+d 557 5 1 0 0
+c
+d 558 1 0 0 0
+c
+d 517 1 0 0 0
+c
+d 518 2 0 0 0
+c
+d 519 1 0 0 0
+c
+d 107 3 1 0 0
+c
+d 1195 2 1 0 0
+c
+d 1196 4 1 0 0
+c
+d 232 5 1 0 0
+c
+d 233 1 1 0 0
+c
+d 823 1 0 1 0
+c
+d 835 4 2 0 0
+c
+d 368 2 1 0 0
+c
+d 369 3 1 0 0
+c
+d 848 5 1 0 0
+c
+d 849 1 0 0 0
+c
+d 1165 2 0 0 0
+c
+d 1166 1 0 0 0
+c
+d 801 3 1 0 0
+c
+d 802 1 0 0 0
+c
+d 789 2 0 1 0
+c
+d 598 4 1 1 0
+c
+d 600 1 0 0 0
+c
+d 340 5 1 0 0
+c
+d 262 3 1 0 0
+c
+d 278 1 0 1 0
+c
+d 383 3 0 0 0
+c
+d 1134 1 1 0 0
+c
+d 1135 1 0 1 0
+c
+d 691 3 1 0 0
+c
+d 697 1 1 0 0
+c
+d 550 3 1 0 0
+c
+d 556 1 1 0 0
+c
+d 114 1 1 0 0
+c
+d 115 4 1 0 0
+c
+d 527 2 0 0 0
+c
+d 528 1 0 1 0
+c
+d 529 3 1 0 0
+c
+d 455 1 0 0 0
+c
+d 456 1 0 0 0
+c
+d 457 2 0 1 0
+c
+d 459 1 1 0 0
+c
+d 324 3 2 0 0
+c
+d 332 1 0 1 0
+c
+d 881 5 0 0 0
+c
+d 129 4 2 0 0
+c
+d 159 1 0 1 0
+c
+d 183 3 2 0 0
+c
+d 734 3 0 0 0
+c
+d 89 3 1 1 0
+c
+d 437 1 1 0 0
+c
+d 470 1 0 0 0
+c
+d 100 1 0 0 0
+c
+d 1002 4 1 0 0
+c
+d 1003 1 0 0 0
+c
+d 152 2 1 0 0
+c
+d 1096 1 0 0 0
+c
+d 1097 1 1 0 0
+c
+d 663 6 2 1 0
+c
+d 978 1 1 0 0
+c
+d 979 2 0 0 0
+c
+d 980 3 1 1 0
+c
+d 733 1 0 0 0
+c
+d 734 3 1 1 0
+c
+d 736 2 0 0 0
+c
+d 795 2 0 0 0
+c
+d 834 1 0 0 0
+c
+d 1087 2 0 0 0
+c
+d 1093 1 0 0 0
+c
+d 1094 2 0 0 0
+c
+d 564 5 0 0 0
+c
+d 854 3 1 1 0
+c
+d 734 5 2 0 0
+c
+d 502 1 0 0 0
+c
+d 507 2 1 0 0
+c
+d 508 1 1 0 0
+c
+d 803 4 2 0 0
+c
+d 101 1 1 0 0
+c
+d 1095 3 0 0 0
+c
+d 423 2 1 0 0
+c
+d 1080 4 1 0 0
+c
+d 1082 1 0 0 0
+c
+d 523 6 1 0 0
+c
+d 47 1 0 0 0
+c
+d 49 1 0 0 0
+c
+d 58 1 0 0 0
+c
+d 799 4 1 0 0
+c
+d 806 1 1 0 0
+c
+d 878 2 0 0 0
+c
+d 129 2 1 1 0
+c
+d 131 3 0 0 0
+c
+d 382 4 1 1 0
+c
+d 388 1 1 0 0
+c
+d 878 3 0 0 0
+c
+d 879 1 0 0 0
+c
+d 377 1 0 0 0
+c
+d 378 2 1 0 0
+c
+d 423 5 1 0 0
+c
+d 1170 5 2 1 0
+c
+d 508 4 1 0 0
+c
+d 509 1 1 0 0
+c
+d 152 1 0 0 0
+c
+d 411 1 0 1 0
+c
+d 412 1 0 0 0
+c
+d 417 1 1 0 0
+c
+d 564 1 0 0 0
+c
+d 788 1 0 0 0
+c
+d 789 3 0 2 0
+c
+d 369 1 1 0 0
+c
+d 371 1 0 0 0
+c
+d 380 2 1 0 0
+c
+d 287 3 1 1 0
+c
+d 1084 5 2 0 0
+c
+d 283 6 2 0 0
+c
+d 39 2 0 1 0
+c
+d 168 1 0 0 0
+c
+d 169 2 1 0 0
+c
+d 377 1 1 0 0
+c
+d 169 2 1 1 0
+c
+d 1136 5 1 0 0
+c
+d 318 1 0 0 0
+c
+d 324 2 1 0 0
+c
+d 332 1 0 1 0
+c
+d 1149 1 1 0 0
+c
+d 650 1 1 0 0
+c
+d 656 3 1 0 0
+c
+d 965 4 1 0 0
+c
+d 970 1 0 0 0
+c
+d 19 6 0 0 0
+c
+d 211 1 0 0 0
+c
+d 1233 1 0 0 0
+c
+d 1234 2 0 0 0
+c
+d 457 4 1 1 0
+c
+d 460 1 0 0 0
+c
+d 146 3 0 0 0
+c
+d 148 4 1 1 0
+c
+d 149 1 1 0 0
+c
+d 21 1 0 1 0
+c
+d 1027 2 0 1 0
+c
+d 1028 2 0 0 0
+c
+d 540 6 2 1 0
+c
+d 788 1 0 0 0
+c
+d 789 2 0 1 0
+c
+d 756 4 0 0 0
+c
+d 768 1 1 0 0
+c
+d 823 3 0 0 0
+c
+d 824 1 1 0 0
+c
+d 835 1 0 1 0
+c
+d 97 3 1 1 0
+c
+d 99 2 1 0 0
+c
+d 101 1 0 1 0
+c
+d 862 1 0 1 0
+c
+d 865 3 1 0 0
+c
+d 146 1 0 1 0
+c
+d 1097 4 2 0 0
+c
+d 1 5 1 1 0
+c
+d 277 1 1 0 0
+c
+d 301 2 0 1 0
+c
+d 559 5 1 0 0
+c
+d 55 5 1 1 0
+c
+d 12 3 1 1 0
+c
+d 1270 1 1 0 0
+c
+d 1272 1 0 0 0
+c
+d 811 4 2 0 0
+c
+d 734 2 1 0 0
+c
+d 737 3 1 0 0
+c
+d 155 4 1 0 0
+c
+d 1127 4 0 0 0
+c
+d 1131 1 0 0 0
+c
+d 427 1 0 0 0
+c
+d 428 3 0 0 0
+c
+d 430 1 0 1 0
+c
+d 157 1 0 1 0
+c
+d 305 4 1 1 0
+c
+d 635 1 0 0 0
+c
+d 636 2 1 0 0
+c
+d 638 2 1 0 0
+c
+d 16 1 1 0 0
+c
+d 90 3 0 1 0
+c
+d 101 1 0 0 0
+c
+d 104 4 2 0 0
+c
+d 494 2 1 0 0
+c
+d 496 2 1 0 0
+c
+d 498 1 0 1 0
+c
+d 791 2 0 0 0
+c
+d 793 1 0 0 0
+c
+d 1170 5 2 1 0
+c
+d 789 1 0 1 0
+c
+d 791 3 1 0 0
+c
+d 829 1 0 0 0
+c
+d 44 3 1 1 0
+c
+d 2 1 0 1 0
+c
+d 3 1 0 0 0
+c
+d 842 4 0 0 0
+c
+d 878 1 0 0 0
+c
+d 120 2 1 0 0
+c
+d 120 5 1 0 0
+c
+d 301 4 2 0 0
+c
+d 39 1 0 0 0
+c
+d 41 2 0 1 0
+c
+d 167 1 0 0 0
+c
+d 1121 3 1 0 0
+c
+d 5 5 1 0 0
+c
+d 18 1 1 0 0
+c
+d 919 3 2 0 0
+c
+d 923 2 0 0 0
+c
+d 934 1 0 0 0
+c
+d 606 3 1 0 0
+c
+d 168 3 0 0 0
+c
+d 371 1 0 0 0
+c
+d 373 1 0 0 0
+c
+d 966 2 1 0 0
+c
+d 967 3 1 0 0
+c
+d 1013 4 1 1 0
+c
+d 1017 1 1 0 0
+c
+d 157 1 0 0 0
+c
+d 178 3 1 0 0
+c
+d 181 1 1 0 0
+c
+d 168 5 1 0 0
+c
+d 694 1 0 0 0
+c
+d 695 3 0 0 0
+c
+d 437 7 1 0 0
+c
+d 532 2 0 0 0
+c
+d 548 1 1 0 0
+c
+d 18 1 0 1 0
+c
+d 990 3 1 1 0
+c
+d 93 4 2 0 0
+c
+d 94 2 0 0 0
+c
+d 16 5 1 1 0
+c
+d 373 1 0 1 0
+c
+d 374 3 1 0 0
+c
+d 12 1 0 1 0
+c
+d 90 2 1 0 0
+c
+d 91 1 0 0 0
+c
+d 1013 3 2 0 0
+c
+d 1019 2 0 0 0
+c
+d 1105 2 0 0 0
+c
+d 1123 1 0 0 0
+c
+d 93 4 2 0 0
+c
+d 96 1 0 0 0
+c
+d 54 4 2 0 0
+c
+d 697 1 0 0 0
+c
+d 552 3 1 0 0
+c
+d 553 1 0 0 0
+c
+d 156 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 1 1 0 0 0
+c
+d 4 2 1 0 0
+c
+d 12 3 1 0 0
+c
+d 1267 1 1 0 0
+c
+d 52 2 0 1 0
+c
+d 54 1 1 0 0
+c
+d 384 1 0 1 0
+c
+d 389 1 0 0 0
+c
+d 390 2 1 0 0
+c
+d 791 1 1 0 0
+c
+d 829 3 1 0 0
+c
+d 832 1 0 0 0
+c
+d 764 4 1 0 0
+c
+d 554 4 0 0 0
+c
+d 48 1 1 0 0
+c
+d 49 3 1 0 0
+c
+d 58 1 0 0 0
+c
+d 1168 2 1 0 0
+c
+d 1170 2 0 1 0
+c
+d 1183 1 0 0 0
+c
+d 119 4 1 0 0
+c
+d 120 1 0 0 0
+c
+d 1121 2 1 1 0
+c
+d 737 3 2 0 0
+c
+d 754 2 0 0 0
+c
+d 4 2 1 0 0
+c
+d 878 5 0 0 0
+c
+d 355 4 0 0 0
+c
+d 356 2 0 0 0
+c
+d 662 5 2 0 0
+c
+d 667 1 0 0 0
+c
+d 111 1 0 0 0
+c
+d 146 1 0 0 0
+c
+d 1096 1 1 0 0
+c
+d 120 1 0 0 0
+c
+d 121 2 0 0 0
+c
+d 123 1 0 1 0
+c
+d 719 6 1 1 0
+c
+d 89 4 0 0 0
+c
+d 550 1 1 0 0
+c
+d 262 4 1 0 0
+c
+d 162 1 0 0 0
+c
+d 364 3 0 1 0
+c
+d 365 3 2 0 0
+c
+d 159 7 1 0 0
+c
+d 146 3 1 1 0
+c
+d 148 1 0 0 0
+c
+d 1134 5 1 0 0
+c
+d 719 1 0 0 0
+c
+d 720 6 0 2 0
+c
+d 89 2 1 0 0
+c
+d 119 1 1 0 0
+c
+d 1285 1 0 0 0
+c
+d 697 2 1 0 0
+c
+d 953 1 0 1 0
+c
+d 882 2 1 0 0
+c
+d 884 2 0 1 0
+c
+d 888 1 0 1 0
+c
+d 423 1 0 0 0
+c
+d 470 1 0 0 0
+c
+d 554 3 0 0 0
+c
+d 555 1 0 0 0
+c
+d 348 4 0 0 0
+c
+d 351 1 0 0 0
+c
+d 19 1 0 0 0
+c
+d 978 1 1 0 0
+c
+d 979 2 0 0 0
+c
+d 75 1 0 1 0
+c
+d 84 2 1 0 0
+c
+d 85 2 1 0 0
+c
+d 1277 1 0 1 0
+c
+d 101 4 2 0 0
+c
+d 102 1 0 0 0
+c
+d 756 1 1 0 0
+c
+d 757 2 0 1 0
+c
+d 348 3 0 0 0
+c
+d 351 1 0 0 0
+c
+d 217 2 1 0 0
+c
+d 220 1 0 0 0
+c
+d 241 1 1 0 0
+c
+d 1126 4 1 0 0
+c
+d 565 1 1 0 0
+c
+d 567 4 1 0 0
+c
+d 796 4 1 0 0
+c
+d 813 1 0 0 0
+c
+d 888 3 0 2 0
+c
+d 889 1 0 0 0
+c
+d 890 1 0 0 0
+c
+d 1009 2 0 0 0
+c
+d 1011 3 1 1 0
+c
+d 427 4 0 0 0
+c
+d 428 1 0 0 0
+c
+d 1078 1 0 0 0
+c
+d 176 1 1 0 0
+c
+d 194 2 0 0 0
+c
+d 204 1 0 0 0
+c
+d 799 1 0 1 0
+c
+d 803 4 1 1 0
+c
+d 835 6 2 0 0
+c
+d 12 1 0 0 0
+c
+d 1266 2 1 0 0
+c
+d 1267 3 1 0 0
+c
+d 789 1 1 0 0
+c
+d 833 2 0 0 0
+c
+d 686 3 1 1 0
+c
+d 712 4 1 0 0
+c
+d 713 1 0 0 0
+c
+d 1168 1 1 0 0
+c
+d 1179 1 0 1 0
+c
+d 2 2 1 0 0
+c
+d 16 1 0 1 0
+c
+d 5 5 1 1 0
+c
+d 1195 4 1 0 0
+c
+d 1196 1 0 0 0
+c
+d 565 1 0 0 0
+c
+d 568 5 2 0 0
+c
+d 844 1 0 0 0
+c
+d 848 2 1 0 0
+c
+d 148 1 0 0 0
+c
+d 259 1 1 0 0
+c
+d 529 2 1 0 0
+c
+d 530 3 0 0 0
+c
+d 369 1 1 0 0
+c
+d 382 2 1 0 0
+c
+d 388 1 0 0 0
+c
+d 232 2 0 0 0
+c
+d 204 3 1 0 0
+c
+d 225 1 0 0 0
+c
+d 1248 2 0 0 0
+c
+d 46 1 0 1 0
+c
+d 133 2 1 0 0
+c
+d 294 1 0 1 0
+c
+d 558 3 1 0 0
+c
+d 559 1 1 0 0
+c
+d 1 2 0 0 0
+c
+d 17 2 0 0 0
+c
+d 212 2 1 0 0
+c
+d 213 3 1 1 0
+c
+d 164 2 0 0 0
+c
+d 568 1 0 0 0
+c
+d 570 3 1 0 0
+c
+d 86 1 1 0 0
+c
+d 87 3 1 0 0
+c
+d 556 4 2 1 0
+c
+d 32 1 1 0 0
+c
+d 33 3 1 0 0
+c
+d 242 1 0 0 0
+c
+d 245 4 1 0 0
+c
+d 246 1 1 0 0
+c
+d 101 1 0 1 0
+c
+d 423 4 1 0 0
+c
+d 806 4 1 0 0
+c
+d 840 2 1 0 0
+c
+d 851 2 1 0 0
+c
+d 852 2 0 1 0
+c
+d 75 4 1 0 0
+c
+d 84 1 0 0 0
+c
+d 218 1 0 0 0
+c
+d 220 4 2 0 0
+c
+d 400 2 0 0 0
+c
+d 407 3 1 1 0
+c
+d 408 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 507 3 0 0 0
+c
+d 159 5 1 1 0
+c
+d 132 2 1 0 0
+c
+d 133 3 1 0 0
+c
+d 806 4 2 0 0
+c
+d 767 4 0 1 0
+c
+d 890 2 0 0 0
+c
+d 46 1 0 0 0
+c
+d 75 3 2 0 0
+c
+d 262 1 0 1 0
+c
+d 265 1 1 0 0
+c
+d 266 3 1 0 0
+c
+d 75 5 1 0 0
+c
+d 81 1 0 0 0
+c
+d 211 4 1 0 0
+c
+d 212 1 0 0 0
+c
+d 529 1 1 0 0
+c
+d 1069 5 1 0 0
+c
+d 4 1 0 1 0
+c
+d 5 1 0 1 0
+c
+d 6 4 0 0 0
+c
+d 594 1 1 0 0
+c
+d 686 1 0 1 0
+c
+d 959 1 0 1 0
+c
+d 274 1 0 1 0
+c
+d 277 2 1 0 0
+c
+d 529 1 0 1 0
+c
+d 531 4 1 0 0
+c
+d 278 1 0 1 0
+c
+d 1165 1 1 0 0
+c
+d 1168 1 0 0 0
+c
+d 167 4 2 0 0
+c
+d 369 1 0 0 0
+c
+d 12 2 1 0 0
+c
+d 13 1 0 1 0
+c
+d 14 3 1 0 0
+c
+d 1070 1 0 1 0
+c
+d 1071 3 1 1 0
+c
+d 1115 1 0 0 0
+c
+d 1117 3 1 0 0
+c
+d 1118 1 0 0 0
+c
+d 697 1 0 0 0
+c
+d 699 1 0 0 0
+c
+d 716 1 0 0 0
+c
+d 167 3 1 0 0
+c
+d 1105 1 1 0 0
+c
+d 162 1 0 1 0
+c
+d 163 2 1 0 0
+c
+d 171 2 0 0 0
+c
+d 498 3 1 0 0
+c
+d 499 2 0 0 0
+c
+d 278 5 1 0 0
+c
+d 1168 1 0 0 0
+c
+d 148 1 0 0 0
+c
+d 225 1 1 0 0
+c
+d 240 3 1 0 0
+c
+d 286 4 2 1 0
+c
+d 394 1 1 0 0
+c
+d 1111 2 1 0 0
+c
+d 1113 2 0 0 0
+c
+d 276 2 1 1 0
+c
+d 56 1 0 1 0
+c
+d 1303 3 1 0 0
+c
+d 12 3 2 0 0
+c
+d 1267 1 0 0 0
+c
+d 301 2 1 0 0
+c
+d 302 4 0 0 0
+c
+d 1150 2 1 0 0
+c
+d 890 5 0 2 0
+c
+d 301 5 1 1 0
+c
+d 1163 2 0 0 0
+c
+d 556 5 2 0 0
+c
+d 46 1 0 1 0
+c
+d 594 3 1 1 0
+c
+d 650 1 1 0 0
+c
+d 119 1 1 0 0
+c
+d 120 2 0 0 0
+c
+d 121 1 0 0 0
+c
+d 699 1 0 0 0
+c
+d 715 4 0 0 0
+c
+d 2 5 0 0 0
+c
+d 753 3 1 1 0
+c
+d 943 1 0 1 0
+c
+d 129 2 0 0 0
+c
+d 525 1 0 0 0
+c
+d 384 1 0 0 0
+c
+d 1134 5 1 0 0
+c
+d 755 1 0 0 0
+c
+d 764 1 0 0 0
+c
+d 765 1 1 0 0
+c
+d 662 1 1 0 0
+c
+d 663 4 1 0 0
+c
+d 527 5 2 0 0
+c
+d 1126 5 0 0 0
+c
+d 591 3 0 0 0
+c
+d 199 2 0 0 0
+c
+d 211 1 0 0 0
+c
+d 24 3 1 0 0
+c
+d 26 1 0 0 0
+c
+d 327 3 1 0 0
+c
+d 348 3 0 0 0
+c
+d 148 1 1 0 0
+c
+d 252 2 0 0 0
+c
+d 704 1 0 1 0
+c
+d 705 3 0 1 0
+c
+d 46 1 0 0 0
+c
+d 775 2 1 1 0
+c
+d 650 3 0 2 0
+c
+d 120 1 0 0 0
+c
+d 121 1 0 0 0
+c
+d 122 2 0 0 0
+c
+d 213 3 0 0 0
+c
+d 242 2 0 0 0
+c
+d 602 2 0 0 0
+c
+d 87 6 2 0 0
+c
+d 557 1 0 0 0
+c
+d 558 2 0 1 0
+c
+d 565 3 1 1 0
+c
+d 131 5 1 1 0
+c
+d 132 1 0 0 0
+c
+d 767 1 0 1 0
+c
+d 888 1 0 0 0
+c
+d 890 2 0 0 0
+c
+d 69 1 0 0 0
+c
+d 70 4 1 0 0
+c
+d 690 1 0 1 0
+c
+d 274 1 1 0 0
+c
+d 1230 5 0 0 0
+c
+d 273 1 0 1 0
+c
+d 274 2 1 0 0
+c
+d 275 1 0 0 0
+c
+d 276 1 0 0 0
+c
+d 789 6 2 0 0
+c
+d 324 2 0 1 0
+c
+d 330 2 0 0 0
+c
+d 111 2 1 0 0
+c
+d 146 2 1 0 0
+c
+d 238 1 0 1 0
+c
+d 789 3 1 1 0
+c
+d 790 2 0 1 0
+c
+d 817 3 0 0 0
+c
+d 44 5 2 1 0
+c
+d 861 5 0 0 0
+c
+d 157 3 0 0 0
+c
+d 159 1 0 0 0
+c
+d 1013 2 0 0 0
+c
+d 1017 2 0 2 0
+c
+d 1033 1 0 0 0
+c
+d 1185 1 0 0 0
+c
+d 1188 1 0 0 0
+c
+d 1189 2 1 0 0
+c
+d 1190 1 0 0 0
+c
+d 423 1 0 0 0
+c
+d 1080 3 1 0 0
+c
+d 1082 1 1 0 0
+c
+d 551 1 0 0 0
+c
+d 554 1 1 0 0
+c
+d 428 1 0 0 0
+c
+d 430 3 1 0 0
+c
+d 575 1 1 0 0
+c
+d 577 1 0 0 0
+c
+d 1173 5 1 1 0
+c
+d 1170 5 1 0 0
+c
+d 458 5 2 0 0
+c
+d 119 4 0 1 0
+c
+d 162 3 1 1 0
+c
+d 163 2 0 1 0
+c
+d 1251 2 0 0 0
+c
+d 842 1 0 0 0
+c
+d 878 1 0 0 0
+c
+d 880 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 592 2 1 1 0
+c
+d 125 1 0 0 0
+c
+d 127 1 0 1 0
+c
+d 533 1 1 0 0
+c
+d 959 2 1 0 0
+c
+d 960 1 0 0 0
+c
+d 961 4 2 0 0
+c
+d 318 6 2 0 0
+c
+d 321 1 0 0 0
+c
+d 1266 2 0 1 0
+c
+d 1274 1 1 0 0
+c
+d 343 1 0 0 0
+c
+d 344 3 1 1 0
+c
+d 1148 2 0 0 0
+c
+d 529 3 1 0 0
+c
+d 532 1 1 0 0
+c
+d 130 1 1 0 0
+c
+d 132 1 0 0 0
+c
+d 1257 1 0 1 0
+c
+d 1258 3 1 0 0
+c
+d 602 2 1 1 0
+c
+d 621 1 0 0 0
+c
+d 631 1 0 1 0
+c
+d 965 1 0 1 0
+c
+d 970 2 1 0 0
+c
+d 971 1 0 0 0
+c
+d 191 4 1 1 0
+c
+d 168 3 0 1 0
+c
+d 530 1 0 0 0
+c
+d 531 2 1 1 0
+c
+d 1194 3 1 1 0
+c
+d 1202 1 0 1 0
+c
+d 1203 1 0 0 0
+c
+d 499 1 0 0 0
+c
+d 505 1 0 1 0
+c
+d 511 4 1 1 0
+c
+d 822 4 1 0 0
+c
+d 823 1 0 0 0
+c
+d 369 1 0 0 0
+c
+d 371 1 0 1 0
+c
+d 380 2 1 0 0
+c
+d 1060 2 1 0 0
+c
+d 1063 2 1 0 0
+c
+d 152 2 0 0 0
+c
+d 413 2 1 0 0
+c
+d 382 1 0 0 0
+c
+d 384 3 0 1 0
+c
+d 1132 1 1 0 0
+c
+d 1313 3 0 1 0
+c
+d 737 5 2 0 0
+c
+d 32 2 0 0 0
+c
+d 1296 1 0 0 0
+c
+d 262 1 1 0 0
+c
+d 263 3 1 0 0
+c
+d 347 1 0 1 0
+c
+d 348 1 1 0 0
+c
+d 241 1 0 1 0
+c
+d 242 2 1 0 0
+c
+d 247 1 0 0 0
+c
+d 1231 1 0 1 0
+c
+d 46 1 0 0 0
+c
+d 75 1 0 0 0
+c
+d 21 4 2 0 0
+c
+d 75 1 0 0 0
+c
+d 86 1 0 0 0
+c
+d 272 1 0 0 0
+c
+d 273 2 1 0 0
+c
+d 183 1 1 0 0
+c
+d 196 4 1 0 0
+c
+d 424 1 0 0 0
+c
+d 426 2 0 1 0
+c
+d 591 1 0 1 0
+c
+d 311 4 1 0 0
+c
+d 737 1 0 1 0
+c
+d 753 3 1 0 0
+c
+d 1087 2 0 2 0
+c
+d 753 1 0 0 0
+c
+d 755 3 1 1 0
+c
+d 756 1 1 0 0
+c
+d 511 3 1 0 0
+c
+d 521 1 1 0 0
+c
+d 522 2 0 0 0
+c
+d 196 1 1 0 0
+c
+d 198 3 1 0 0
+c
+d 425 3 0 0 0
+c
+d 426 1 0 0 0
+c
+d 95 4 1 0 0
+c
+d 1263 1 0 0 0
+c
+d 738 3 1 0 0
+c
+d 327 1 0 1 0
+c
+d 334 3 1 0 0
+c
+d 348 2 0 0 0
+c
+d 262 4 1 1 0
+c
+d 602 3 0 0 0
+c
+d 678 3 1 1 0
+c
+d 341 1 1 0 0
+c
+d 346 1 0 1 0
+c
+d 1146 4 0 0 0
+c
+d 676 1 0 0 0
+c
+d 678 4 1 0 0
+c
+d 659 1 0 0 0
+c
+d 660 5 1 0 0
+c
+d 52 4 0 0 0
+c
+d 93 7 1 0 0
+c
+d 196 5 2 0 0
+c
+d 199 3 1 0 0
+c
+d 304 2 0 0 0
+c
+d 305 3 1 0 0
+c
+d 264 1 0 0 0
+c
+d 286 3 2 0 0
+c
+d 291 1 0 0 0
+c
+d 34 3 1 0 0
+c
+d 35 1 1 0 0
+c
+d 167 3 2 0 0
+c
+d 369 1 0 0 0
+c
+d 1110 1 1 0 0
+c
+d 1111 2 1 0 0
+c
+d 1115 1 0 0 0
+c
+d 927 3 1 0 0
+c
+d 928 1 0 1 0
+c
+d 565 2 1 0 0
+c
+d 301 1 0 1 0
+c
+d 315 4 0 1 0
+c
+d 374 3 2 0 0
+c
+d 377 1 0 0 0
+c
+d 1274 4 1 1 0
+c
+d 1285 2 0 0 0
+c
+d 622 2 0 0 0
+c
+d 628 1 0 0 0
+c
+d 620 8 2 0 0
+c
+d 114 4 0 0 0
+c
+d 577 2 0 0 0
+c
+d 578 3 2 0 0
+c
+d 686 1 1 0 0
+c
+d 168 4 0 0 0
+c
+d 12 1 0 0 0
+c
+d 89 1 1 0 0
+c
+d 90 1 0 0 0
+c
+d 527 4 0 0 0
+c
+d 97 4 0 0 0
+c
+d 1105 1 0 1 0
+c
+d 1121 2 0 0 0
+c
+d 1123 1 1 0 0
+c
+d 1156 1 0 1 0
+c
+d 1177 3 1 1 0
+c
+d 164 5 2 1 0
+c
+d 110 1 0 1 0
+c
+d 111 2 1 0 0
+c
+d 231 1 0 0 0
+c
+d 557 1 0 0 0
+c
+d 565 3 2 0 0
+c
+d 686 1 0 1 0
+c
+d 955 6 2 1 0
+c
+d 455 1 0 0 0
+c
+d 457 4 2 0 0
+c
+d 423 1 0 1 0
+c
+d 427 3 1 0 0
+c
+d 428 1 0 0 0
+c
+d 47 1 1 0 0
+c
+d 49 3 1 0 0
+c
+d 990 3 1 0 0
+c
+d 994 1 0 0 0
+c
+d 997 1 0 1 0
+c
+d 167 3 1 0 0
+c
+d 1105 1 0 0 0
+c
+d 133 3 0 0 0
+c
+d 525 5 1 0 0
+c
+d 564 1 0 0 0
+c
+d 565 4 2 0 0
+c
+d 602 2 0 0 0
+c
+d 682 1 0 0 0
+c
+d 738 1 0 1 0
+c
+d 748 1 0 0 0
+c
+d 893 3 1 1 0
+c
+d 764 1 0 0 0
+c
+d 766 4 2 0 0
+c
+d 789 1 1 0 0
+c
+d 882 3 1 0 0
+c
+d 206 2 1 0 0
+c
+d 437 1 0 0 0
+c
+d 454 3 0 0 0
+c
+d 455 3 2 0 0
+c
+d 650 4 0 0 0
+c
+d 651 2 0 0 0
+c
+d 746 2 1 1 0
+c
+d 747 2 1 0 0
+c
+d 127 3 1 1 0
+c
+d 129 1 1 0 0
+c
+d 5 1 0 0 0
+c
+d 6 1 0 0 0
+c
+d 90 1 1 0 0
+c
+d 93 3 1 0 0
+c
+d 1269 4 1 0 0
+c
+d 990 1 1 0 0
+c
+d 994 3 1 0 0
+c
+d 395 3 1 0 0
+c
+d 397 1 0 0 0
+c
+d 1106 1 0 1 0
+c
+d 21 4 2 0 0
+c
+d 799 1 1 0 0
+c
+d 806 4 1 0 0
+c
+d 889 4 1 1 0
+c
+d 927 4 2 0 0
+c
+d 930 4 1 0 0
+c
+d 133 1 0 0 0
+c
+d 134 2 0 0 0
+c
+d 139 1 0 0 0
+c
+d 2 1 1 0 0
+c
+d 159 6 2 0 0
+c
+d 242 1 0 0 0
+c
+d 799 1 0 1 0
+c
+d 842 3 1 0 0
+c
+d 353 1 0 0 0
+c
+d 357 2 1 0 0
+c
+d 195 5 2 0 0
+c
+d 133 1 0 0 0
+c
+d 294 4 1 0 0
+c
+d 570 5 0 0 0
+c
+d 301 5 1 2 0
+c
+d 21 4 1 0 0
+c
+d 26 1 1 0 0
+c
+d 28 1 0 1 0
+c
+d 531 1 1 0 0
+c
+d 540 4 1 0 0
+c
+d 133 4 1 0 0
+c
+d 134 1 1 0 0
+c
+d 140 1 0 0 0
+c
+d 75 4 1 0 0
+c
+d 414 3 1 0 0
+c
+d 418 1 1 0 0
+c
+d 1206 6 2 0 0
+c
+d 551 5 1 0 0
+c
+d 564 1 0 0 0
+c
+d 96 6 0 0 0
+c
+d 301 4 0 0 0
+c
+d 302 2 0 0 0
+c
+d 827 3 1 0 0
+c
+d 829 1 0 0 0
+c
+d 301 1 0 0 0
+c
+d 1156 3 2 0 0
+c
+d 75 2 1 0 0
+c
+d 79 1 0 1 0
+c
+d 134 1 0 0 0
+c
+d 135 3 1 0 0
+c
+d 136 2 1 0 0
+c
+d 734 1 1 0 0
+c
+d 769 2 0 0 0
+c
+d 772 1 0 0 0
+c
+d 143 5 2 0 0
+c
+d 212 3 2 0 0
+c
+d 213 3 1 0 0
+c
+d 274 1 0 0 0
+c
+d 277 2 0 0 0
+c
+d 1158 1 1 0 0
+c
+d 152 1 0 0 0
+c
+d 413 1 0 1 0
+c
+d 1087 1 1 0 0
+c
+d 355 4 2 1 0
+c
+d 28 4 1 0 0
+c
+d 29 1 1 0 0
+c
+d 414 1 0 0 0
+c
+d 418 3 1 0 0
+c
+d 91 2 1 0 0
+c
+d 1265 4 1 0 0
+c
+d 487 2 1 1 0
+c
+d 488 3 1 0 0
+c
+d 211 4 2 0 0
+c
+d 799 1 0 0 0
+c
+d 803 1 0 0 0
+c
+d 935 1 0 0 0
+c
+d 262 3 2 0 0
+c
+d 273 1 0 0 0
+c
+d 534 5 2 1 0
+c
+d 52 1 0 1 0
+c
+d 54 2 1 0 0
+c
+d 60 1 0 1 0
+c
+d 509 3 1 0 0
+c
+d 1071 1 1 0 0
+c
+d 146 5 2 0 0
+c
+d 591 1 1 0 0
+c
+d 597 1 0 1 0
+c
+d 134 2 0 1 0
+c
+d 135 1 0 0 0
+c
+d 364 4 1 0 0
+c
+d 1275 3 1 1 0
+c
+d 1278 1 1 0 0
+c
+d 599 4 1 1 0
+c
+d 1009 1 0 1 0
+c
+d 1012 2 1 0 0
+c
+d 1013 1 0 0 0
+c
+d 1194 1 0 0 0
+c
+d 1202 2 1 0 0
+c
+d 11 4 1 0 0
+c
+d 1269 1 1 0 0
+c
+d 211 2 1 1 0
+c
+d 1237 3 1 0 0
+c
+d 93 3 1 0 0
+c
+d 141 1 0 0 0
+c
+d 142 1 1 0 0
+c
+d 418 6 2 0 0
+c
+d 111 1 0 0 0
+c
+d 231 1 0 0 0
+c
+d 236 1 0 1 0
+c
+d 333 1 0 0 0
+c
+d 337 1 0 0 0
+c
+d 338 2 0 0 0
+c
+d 339 1 0 0 0
+c
+d 787 1 1 0 0
+c
+d 884 4 1 0 0
+c
+d 119 5 1 0 0
+c
+d 120 1 1 0 0
+c
+d 618 1 0 1 0
+c
+d 638 2 1 0 0
+c
+d 748 3 2 0 0
+c
+d 894 2 0 0 0
+c
+d 558 1 0 0 0
+c
+d 559 4 0 0 0
+c
+d 823 2 1 0 0
+c
+d 901 3 1 0 0
+c
+d 21 5 1 0 0
+c
+d 156 1 0 0 0
+c
+d 400 4 1 0 0
+c
+d 407 1 0 0 0
+c
+d 51 2 0 0 0
+c
+d 52 2 1 0 0
+c
+d 56 1 0 1 0
+c
+d 977 7 3 0 0
+c
+d 134 1 0 1 0
+c
+d 135 1 1 0 0
+c
+d 138 2 1 0 0
+c
+d 556 2 1 0 0
+c
+d 564 4 0 1 0
+c
+d 852 4 0 0 0
+c
+d 278 5 1 0 0
+c
+d 1211 1 1 0 0
+c
+d 413 1 1 0 0
+c
+d 1087 4 1 0 0
+c
+d 84 1 0 0 0
+c
+d 1274 1 1 0 0
+c
+d 1275 3 0 0 0
+c
+d 1278 1 1 0 0
+c
+d 734 5 1 0 0
+c
+d 533 3 1 0 0
+c
+d 829 1 0 0 0
+c
+d 835 2 1 0 0
+c
+d 836 1 1 0 0
+c
+d 494 1 0 0 0
+c
+d 496 2 1 0 0
+c
+d 497 1 0 0 0
+c
+d 498 1 0 0 0
+c
+d 144 1 1 0 0
+c
+d 145 4 1 0 0
+c
+d 152 8 2 1 0
+c
+d 1096 1 0 0 0
+c
+d 833 2 1 0 0
+c
+d 318 1 0 0 0
+c
+d 320 1 0 0 0
+c
+d 225 1 1 0 0
+c
+d 238 1 0 0 0
+c
+d 240 1 0 0 0
+c
+d 621 5 1 0 0
+c
+d 318 4 1 1 0
+c
+d 769 1 1 0 0
+c
+d 775 3 1 0 0
+c
+d 886 1 0 0 0
+c
+d 132 3 0 0 0
+c
+d 1 2 1 0 0
+c
+d 2 1 1 0 0
+c
+d 12 1 0 0 0
+c
+d 301 5 2 0 0
+c
+d 87 2 0 0 0
+c
+d 46 2 0 0 0
+c
+d 75 1 0 0 0
+c
+d 286 3 1 0 0
+c
+d 1221 2 1 1 0
+c
+d 19 1 1 0 0
+c
+d 1013 1 0 1 0
+c
+d 1022 2 0 1 0
+c
+d 418 1 0 0 0
+c
+d 1087 2 0 0 0
+c
+d 133 5 1 0 0
+c
+d 1156 4 1 1 0
+c
+d 318 3 1 0 0
+c
+d 11 1 0 0 0
+c
+d 12 3 1 0 0
+c
+d 1270 1 0 1 0
+c
+d 185 1 1 0 0
+c
+d 186 3 1 0 0
+c
+d 60 6 1 1 0
+c
+d 604 1 1 0 0
+c
+d 641 5 1 0 0
+c
+d 286 1 0 0 0
+c
+d 291 3 1 0 0
+c
+d 300 1 0 0 0
+c
+d 32 5 2 0 0
+c
+d 301 3 0 0 0
+c
+d 1156 1 1 0 0
+c
+d 592 4 1 1 0
+c
+d 498 1 0 1 0
+c
+d 499 2 1 0 0
+c
+d 500 1 0 0 0
+c
+d 4 3 1 0 0
+c
+d 5 2 0 1 0
+c
+d 281 1 0 1 0
+c
+d 301 1 0 0 0
+c
+d 1156 2 1 0 0
+c
+d 1161 1 0 0 0
+c
+d 156 6 1 2 0
+c
+d 101 3 1 0 0
+c
+d 111 2 1 0 0
+c
+d 602 1 0 0 0
+c
+d 642 4 1 0 0
+c
+d 457 6 2 0 0
+c
+d 133 1 1 0 0
+c
+d 150 5 0 0 0
+c
+d 46 1 0 0 0
+c
+d 75 1 0 0 0
+c
+d 775 1 0 0 0
+c
+d 218 3 0 1 0
+c
+d 220 1 1 0 0
+c
+d 697 1 0 0 0
+c
+d 716 3 1 0 0
+c
+d 757 3 1 0 0
+c
+d 758 1 0 0 0
+c
+d 26 4 1 0 0
+c
+d 28 2 1 0 0
+c
+d 211 3 1 0 0
+c
+d 250 5 1 0 0
+c
+d 60 5 2 0 0
+c
+d 7 4 1 0 0
+c
+d 1269 1 0 0 0
+c
+d 215 1 0 1 0
+c
+d 221 2 0 0 0
+c
+d 223 3 1 0 0
+c
+d 606 5 1 0 0
+c
+d 428 4 2 0 0
+c
+d 588 3 1 0 0
+c
+d 589 1 0 0 0
+c
+d 54 1 1 0 0
+c
+d 55 2 1 0 0
+c
+d 66 1 0 0 0
+c
+d 211 5 0 2 0
+c
+d 799 2 0 1 0
+c
+d 843 2 0 0 0
+c
+d 1266 1 0 0 0
+c
+d 1274 7 3 0 0
+c
+d 146 5 2 0 0
+c
+d 301 4 1 0 0
+c
+d 1157 1 1 0 0
+c
+d 753 3 2 0 0
+c
+d 755 1 0 0 0
+c
+d 5 1 1 0 0
+c
+d 7 1 0 0 0
+c
+d 1279 1 0 0 0
+c
+d 21 1 1 0 0
+c
+d 23 6 2 0 0
+c
+d 1184 1 1 0 0
+c
+d 1195 3 1 0 0
+c
+d 1199 2 0 0 0
+c
+d 419 4 1 0 0
+c
+d 599 1 0 0 0
+c
+d 602 3 1 0 0
+c
+d 919 4 1 0 0
+c
+d 922 1 0 0 0
+c
+d 923 1 1 0 0
+c
+d 395 3 1 0 0
+c
+d 396 2 0 0 0
+c
+d 510 3 1 0 0
+c
+d 478 1 0 0 0
+c
+d 482 1 0 0 0
+c
+d 437 2 0 0 0
+c
+d 507 4 0 0 0
+c
+d 1285 4 1 0 0
+c
+d 272 1 0 0 0
+c
+d 273 1 0 0 0
+c
+d 55 5 2 0 0
+c
+d 691 1 0 0 0
+c
+d 282 2 0 1 0
+c
+d 287 3 1 0 0
+c
+d 241 1 0 0 0
+c
+d 253 2 0 0 0
+c
+d 254 1 0 0 0
+c
+d 959 3 1 0 0
+c
+d 532 1 0 0 0
+c
+d 548 1 0 0 0
+c
+d 549 1 0 0 0
+c
+d 6 1 0 0 0
+c
+d 10 1 0 0 0
+c
+d 1194 1 0 1 0
+c
+d 1203 1 1 0 0
+c
+d 686 2 0 1 0
+c
+d 689 5 2 1 0
+c
+d 1170 3 1 1 0
+c
+d 1185 1 0 1 0
+c
+d 575 1 1 0 0
+c
+d 796 6 2 0 0
+c
+d 686 3 1 0 0
+c
+d 689 1 0 0 0
+c
+d 835 2 0 0 0
+c
+d 838 1 1 0 0
+c
+d 839 2 0 0 0
+c
+d 268 1 0 0 0
+c
+d 282 2 1 0 0
+c
+d 286 1 0 1 0
+c
+d 799 4 1 0 0
+c
+d 915 1 0 1 0
+c
+d 916 1 0 0 0
+c
+d 917 2 0 0 0
+c
+d 369 4 0 0 0
+c
+d 372 1 0 0 0
+c
+d 89 4 1 0 0
+c
+d 1285 2 1 0 0
+c
+d 264 6 2 0 0
+c
+d 1110 5 2 0 0
+c
+d 319 6 1 0 0
+c
+d 320 1 0 0 0
+c
+d 455 4 0 0 0
+c
+d 199 4 1 1 0
+c
+d 157 1 0 0 0
+c
+d 159 3 0 0 0
+c
+d 1070 2 0 1 0
+c
+d 1075 2 0 0 0
+c
+d 1112 3 0 1 0
+c
+d 1114 1 1 0 0
+c
+d 7 2 0 1 0
+c
+d 8 1 1 0 0
+c
+d 32 1 0 0 0
+c
+d 34 1 0 1 0
+c
+d 1315 2 1 0 0
+c
+d 1316 2 1 0 0
+c
+d 500 5 2 1 0
+c
+d 503 1 0 1 0
+c
+d 1156 5 1 0 0
+c
+d 162 6 1 0 0
+c
+d 366 1 0 0 0
+c
+d 129 4 1 1 0
+c
+d 26 5 2 0 0
+c
+d 12 1 0 0 0
+c
+d 1267 2 0 0 0
+c
+d 1268 1 0 0 0
+c
+d 1192 2 1 0 0
+c
+d 1206 1 0 1 0
+c
+d 341 5 1 0 0
+c
+d 1147 1 0 0 0
+c
+d 789 4 0 0 0
+c
+d 49 4 2 0 0
+c
+d 50 1 0 0 0
+c
+d 497 4 1 0 0
+c
+d 498 1 1 0 0
+c
+d 755 1 0 0 0
+c
+d 757 5 1 0 0
+c
+d 765 1 0 1 0
+c
+d 686 6 2 1 0
+c
+d 428 1 0 0 0
+c
+d 436 5 0 0 0
+c
+d 262 2 0 1 0
+c
+d 270 1 0 0 0
+c
+d 271 2 1 0 0
+c
+d 922 6 1 0 0
+c
+d 734 6 2 0 0
+c
+d 355 1 0 0 0
+c
+d 358 3 0 0 0
+c
+d 362 2 0 0 0
+c
+d 498 3 2 0 0
+c
+d 499 1 0 0 0
+c
+d 606 5 2 0 0
+c
+d 101 2 0 0 0
+c
+d 102 3 1 0 0
+c
+d 1045 5 0 0 0
+c
+d 334 1 0 1 0
+c
+d 341 3 2 0 0
+c
+d 1168 1 0 0 0
+c
+d 1179 1 1 0 0
+c
+d 1183 2 1 0 0
+c
+d 217 4 2 0 0
+c
+d 225 1 0 0 0
+c
+d 1195 5 2 0 0
+c
+d 1196 1 0 0 0
+c
+d 286 3 1 1 0
+c
+d 299 1 0 0 0
+c
+d 146 5 2 0 0
+c
+d 437 4 1 0 0
+c
+d 1045 1 1 0 0
+c
+d 582 2 0 0 0
+c
+d 583 3 1 0 0
+c
+d 146 4 2 0 0
+c
+d 28 1 1 0 0
+c
+d 29 4 1 0 0
+c
+d 753 2 1 0 0
+c
+d 943 3 1 0 0
+c
+d 1109 5 1 2 0
+c
+d 217 3 1 1 0
+c
+d 241 1 0 0 0
+c
+d 1232 1 0 0 0
+c
+d 51 3 1 1 0
+c
+d 56 2 0 0 0
+c
+d 278 4 0 0 0
+c
+d 279 1 0 1 0
+c
+d 1150 3 2 0 0
+c
+d 927 4 1 0 0
+c
+d 928 1 0 0 0
+c
+d 288 2 0 1 0
+c
+d 1221 3 1 0 0
+c
+d 875 1 0 1 0
+c
+d 876 3 1 1 0
+c
+d 594 1 0 0 0
+c
+d 673 4 1 0 0
+c
+d 211 1 0 0 0
+c
+d 1232 3 1 1 0
+c
+d 242 4 1 2 0
+c
+d 34 2 0 1 0
+c
+d 1008 6 2 0 0
+c
+d 1013 2 0 0 0
+c
+d 101 1 0 1 0
+c
+d 1084 3 1 0 0
+c
+d 701 5 2 0 0
+c
+d 437 3 1 1 0
+c
+d 508 1 0 1 0
+c
+d 514 4 1 1 0
+c
+d 853 1 0 0 0
+c
+d 854 1 1 0 0
+c
+d 199 3 0 0 0
+c
+d 594 6 0 0 0
+c
+d 211 7 2 1 0
+c
+d 592 1 0 0 0
+c
+d 594 4 1 0 0
+c
+d 882 2 0 1 0
+c
+d 886 4 2 0 0
+c
+d 101 6 2 0 0
+c
+d 167 3 0 0 0
+c
+d 1122 1 0 0 0
+c
+d 575 2 1 0 0
+c
+d 927 3 0 0 0
+c
+d 60 2 0 0 0
+c
+d 62 1 0 0 0
+c
+d 621 5 1 0 0
+c
+d 89 3 1 0 0
+c
+d 532 1 1 0 0
+c
+d 570 1 0 0 0
+c
+d 572 6 2 0 0
+c
+d 686 2 1 0 0
+c
+d 959 4 1 0 0
+c
+d 68 1 0 0 0
+c
+d 69 3 2 0 0
+c
+d 686 1 0 0 0
+c
+d 701 1 0 0 0
+c
+d 714 2 0 0 0
+c
+d 691 5 2 0 0
+c
+d 419 2 1 0 0
+c
+d 55 3 1 0 0
+c
+d 689 1 1 0 0
+c
+d 691 2 1 0 0
+c
+d 887 1 1 0 0
+c
+d 888 3 1 0 0
+c
+d 353 6 1 0 0
+c
+d 265 3 1 1 0
+c
+d 286 2 0 0 0
+c
+d 61 8 2 0 0
+c
+d 65 1 0 0 0
+c
+d 457 6 2 0 0
+c
+d 19 4 1 2 0
+c
+d 428 4 1 1 0
+c
+d 436 1 0 1 0
+c
+d 575 3 1 0 0
+c
+d 577 2 0 0 0
+c
+d 353 5 2 0 0
+c
+d 164 1 0 0 0
+c
+d 166 3 2 0 0
+c
+d 395 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 602 4 0 0 0
+c
+d 218 5 2 0 0
+c
+d 222 1 0 0 0
+c
+d 838 1 0 1 0
+c
+d 839 2 1 0 0
+c
+d 842 1 1 0 0
+c
+d 225 5 0 0 0
+c
+d 51 1 0 0 0
+c
+d 52 5 1 0 0
+c
+d 281 5 1 1 0
+c
+d 1097 4 1 0 0
+c
+d 1098 1 0 0 0
+c
+d 599 3 1 0 0
+c
+d 278 1 0 0 0
+c
+d 1165 3 1 1 0
+c
+d 1167 1 0 0 0
+c
+d 7 7 2 1 0
+c
+d 551 1 0 0 0
+c
+d 780 3 1 0 0
+c
+d 558 3 0 1 0
+c
+d 1059 5 1 0 0
+c
+d 551 4 1 0 0
+c
+d 564 1 0 1 0
+c
+d 775 1 0 0 0
+c
+d 811 4 0 0 0
+c
+d 815 1 0 0 0
+c
+d 817 1 0 0 0
+c
+d 51 3 0 2 0
+c
+d 1310 1 1 0 0
+c
+d 477 1 0 0 0
+c
+d 479 1 0 0 0
+c
+d 480 1 1 0 0
+c
+d 1110 1 0 0 0
+c
+d 1111 2 0 0 0
+c
+d 1115 1 0 0 0
+c
+d 1170 4 1 0 0
+c
+d 1184 1 0 0 0
+c
+d 662 5 2 0 0
+c
+d 668 3 1 0 0
+c
+d 669 1 0 1 0
+c
+d 670 2 1 0 0
+c
+d 671 2 0 0 0
+c
+d 610 1 1 0 0
+c
+d 990 2 1 0 0
+c
+d 991 1 0 0 0
+c
+d 992 1 0 0 0
+c
+d 146 4 1 0 0
+c
+d 151 3 2 0 0
+c
+d 199 5 1 1 0
+c
+d 168 5 2 0 0
+c
+d 1279 1 1 0 0
+c
+d 1281 4 1 0 0
+c
+d 55 3 0 0 0
+c
+d 769 1 0 1 0
+c
+d 775 4 1 0 0
+c
+d 886 1 0 0 0
+c
+d 620 8 2 0 0
+c
+d 568 2 0 0 0
+c
+d 1057 3 0 0 0
+c
+d 419 2 0 0 0
+c
+d 211 5 2 0 0
+c
+d 294 4 2 0 0
+c
+d 298 1 0 0 0
+c
+d 66 1 1 0 0
+c
+d 69 2 0 1 0
+c
+d 647 1 0 0 0
+c
+d 146 2 1 0 0
+c
+d 232 4 1 1 0
+c
+d 556 6 0 0 0
+c
+d 19 1 0 0 0
+c
+d 20 1 1 0 0
+c
+d 965 5 1 1 0
+c
+d 457 6 2 0 0
+c
+d 93 1 0 0 0
+c
+d 95 2 1 0 0
+c
+d 96 2 1 0 0
+c
+d 111 1 0 0 0
+c
+d 423 1 1 0 0
+c
+d 429 3 0 1 0
+c
+d 734 5 1 0 0
+c
+d 1168 1 0 1 0
+c
+d 1170 3 1 1 0
+c
+d 167 5 2 0 0
+c
+d 1105 1 0 0 0
+c
+d 1106 1 0 0 0
+c
+d 686 3 0 2 0
+c
+d 689 2 0 0 0
+c
+d 807 1 1 0 0
+c
+d 823 3 1 0 0
+c
+d 651 4 2 0 0
+c
+d 689 1 0 0 0
+c
+d 599 1 0 0 0
+c
+d 602 3 1 1 0
+c
+d 437 5 2 0 0
+c
+d 17 3 0 0 0
+c
+d 93 4 2 0 0
+c
+d 763 1 0 0 0
+c
+d 766 2 0 0 0
+c
+d 558 1 1 0 0
+c
+d 559 1 0 1 0
+c
+d 565 1 0 0 0
+c
+d 566 2 0 0 0
+c
+d 133 3 1 0 0
+c
+d 142 1 0 0 0
+c
+d 1256 1 1 0 0
+c
+d 753 1 0 0 0
+c
+d 754 3 1 0 0
+c
+d 968 1 0 0 0
+c
+d 969 1 1 0 0
+c
+d 970 2 1 0 0
+c
+d 972 1 0 0 0
+c
+d 54 1 0 0 0
+c
+d 55 2 1 0 0
+c
+d 66 1 1 0 0
+c
+d 694 2 0 0 0
+c
+d 1070 5 0 0 0
+c
+d 1071 1 1 0 0
+c
+d 620 1 0 0 0
+c
+d 621 3 1 0 0
+c
+d 626 1 1 0 0
+c
+d 627 1 0 0 0
+c
+d 54 1 0 0 0
+c
+d 719 3 1 0 0
+c
+d 730 5 1 0 0
+c
+d 732 1 0 0 0
+c
+d 457 5 1 1 0
+c
+d 835 1 0 1 0
+c
+d 900 8 3 0 0
+c
+d 487 3 1 1 0
+c
+d 922 1 0 1 0
+c
+d 925 1 1 0 0
+c
+d 926 4 0 0 0
+c
+d 720 4 1 0 0
+c
+d 727 1 1 0 0
+c
+d 242 5 0 1 0
+c
+d 245 1 0 1 0
+c
+d 130 4 2 0 0
+c
+d 1259 1 0 0 0
+c
+d 96 1 0 0 0
+c
+d 111 3 0 1 0
+c
+d 428 1 0 0 0
+c
+d 588 1 0 0 0
+c
+d 211 4 2 0 0
+c
+d 242 1 0 0 0
+c
+d 1090 1 0 0 0
+c
+d 1091 1 0 1 0
+c
+d 1092 2 1 0 0
+c
+d 734 4 1 0 0
+c
+d 787 4 1 0 0
+c
+d 19 1 1 0 0
+c
+d 965 3 1 0 0
+c
+d 1 6 1 1 0
+c
+d 133 3 1 0 0
+c
+d 248 2 0 1 0
+c
+d 249 3 1 0 0
+c
+d 111 1 0 0 0
+c
+d 146 2 1 0 0
+c
+d 226 4 1 0 0
+c
+d 19 1 0 0 0
+c
+d 1008 4 2 0 0
+c
+d 167 1 0 0 0
+c
+d 395 3 1 1 0
+c
+d 718 2 1 0 0
+c
+d 845 1 0 0 0
+c
+d 846 1 0 0 0
+c
+d 906 3 2 0 0
+c
+d 910 1 0 0 0
+c
+d 445 2 1 0 0
+c
+d 447 1 0 0 0
+c
+d 448 2 0 0 0
+c
+d 1304 2 1 0 0
+c
+d 1305 2 0 0 0
+c
+d 686 4 1 0 0
+c
+d 919 1 0 0 0
+c
+d 315 1 0 1 0
+c
+d 317 5 1 0 0
+c
+d 318 1 1 0 0
+c
+d 1150 5 1 0 0
+c
+d 132 2 0 0 0
+c
+d 511 1 0 0 0
+c
+d 1258 1 0 0 0
+c
+d 371 7 2 0 0
+c
+d 753 3 0 0 0
+c
+d 156 3 0 0 0
+c
+d 406 1 0 0 0
+c
+d 16 6 1 1 0
+c
+d 39 4 2 0 0
+c
+d 34 3 1 0 0
+c
+d 529 2 1 0 0
+c
+d 532 1 0 0 0
+c
+d 156 2 0 1 0
+c
+d 163 1 1 0 0
+c
+d 215 1 1 0 0
+c
+d 221 5 1 0 0
+c
+d 183 1 1 0 0
+c
+d 196 3 1 0 0
+c
+d 200 1 0 0 0
+c
+d 437 1 1 0 0
+c
+d 1047 2 1 0 0
+c
+d 1049 2 0 0 0
+c
+d 327 4 1 0 0
+c
+d 353 1 0 0 0
+c
+d 599 3 0 0 0
+c
+d 604 1 0 0 0
+c
+d 556 1 1 0 0
+c
+d 557 2 1 0 0
+c
+d 565 1 0 0 0
+c
+d 86 1 0 0 0
+c
+d 87 3 2 0 0
+c
+d 50 5 2 0 0
+c
+d 52 1 0 0 0
+c
+d 723 1 0 0 0
+c
+d 724 1 1 0 0
+c
+d 21 3 1 0 0
+c
+d 24 1 0 0 0
+c
+d 253 1 0 0 0
+c
+d 255 1 0 0 0
+c
+d 256 1 0 1 0
+c
+d 177 8 2 0 0
+c
+d 178 1 0 0 0
+c
+d 437 3 1 0 0
+c
+d 800 5 0 1 0
+c
+d 844 3 2 0 0
+c
+d 845 1 0 0 0
+c
+d 1170 1 0 1 0
+c
+d 1173 1 0 0 0
+c
+d 1184 1 1 0 0
+c
+d 1185 1 0 0 0
+c
+d 604 4 1 0 0
+c
+d 575 1 0 0 0
+c
+d 796 5 1 1 0
+c
+d 134 2 0 1 0
+c
+d 138 5 1 0 0
+c
+d 278 1 0 0 0
+c
+d 280 1 0 1 0
+c
+d 1156 2 1 0 0
+c
+d 2 1 0 0 0
+c
+d 13 4 2 0 0
+c
+d 16 1 0 0 0
+c
+d 277 3 1 1 0
+c
+d 1158 1 0 1 0
+c
+d 393 4 1 0 0
+c
+d 437 4 1 2 0
+c
+d 152 1 0 1 0
+c
+d 413 3 1 0 0
+c
+d 427 1 0 0 0
+c
+d 428 1 0 1 0
+c
+d 585 4 1 0 0
+c
+d 694 4 1 1 0
+c
+d 767 2 0 2 0
+c
+d 133 1 0 0 0
+c
+d 332 1 1 0 0
+c
+d 337 3 1 1 0
+c
+d 811 8 1 0 0
+c
+d 797 1 0 0 0
+c
+d 799 2 1 0 0
+c
+d 217 3 1 0 0
+c
+d 46 2 1 0 0
+c
+d 74 1 0 0 0
+c
+d 1313 1 0 1 0
+c
+d 599 4 1 1 0
+c
+d 211 5 0 0 0
+c
+d 650 1 1 0 0
+c
+d 653 2 0 0 0
+c
+d 654 1 1 0 0
+c
+d 1106 4 0 1 0
+c
+d 1108 1 0 0 0
+c
+d 1070 6 2 0 0
+c
+d 1071 2 1 0 0
+c
+d 811 1 0 0 0
+c
+d 812 5 0 0 0
+c
+d 287 1 0 0 0
+c
+d 288 2 1 0 0
+c
+d 69 4 0 2 0
+c
+d 199 7 1 0 0
+c
+d 305 5 1 2 0
+c
+d 686 1 0 1 0
+c
+d 689 2 1 0 0
+c
+d 704 1 0 0 0
+c
+d 855 8 3 0 0
+c
+d 48 4 2 0 0
+c
+d 569 1 0 0 0
+c
+d 574 2 1 0 0
+c
+d 795 1 0 1 0
+c
+d 286 3 1 0 0
+c
+d 424 4 0 0 0
+c
+d 591 1 0 0 0
+c
+d 181 4 0 0 0
+c
+d 195 1 0 0 0
+c
+d 46 4 1 0 0
+c
+d 578 3 0 0 0
+c
+d 580 1 0 0 0
+c
+d 958 1 1 0 0
+c
+d 641 7 3 0 0
+c
+d 1170 4 2 0 0
+c
+d 1184 1 0 0 0
+c
+d 578 3 0 1 0
+c
+d 580 1 0 0 0
+c
+d 281 3 1 1 0
+c
+d 1192 4 1 0 0
+c
+d 650 1 1 0 0
+c
+d 661 2 1 0 0
+c
+d 667 1 0 0 0
+c
+d 811 3 1 0 0
+c
+d 46 5 2 0 0
+c
+d 1176 1 0 1 0
+c
+d 1177 4 1 0 0
+c
+d 74 1 0 1 0
+c
+d 1300 3 0 0 0
+c
+d 133 1 0 0 0
+c
+d 134 1 0 0 0
+c
+d 137 4 2 0 0
+c
+d 1318 1 0 0 0
+c
+d 1319 6 1 0 0
+c
+d 424 5 2 0 0
+c
+d 132 1 0 0 0
+c
+d 133 4 2 0 0
+c
+d 162 4 0 0 0
+c
+d 1251 1 0 0 0
+c
+d 444 1 0 1 0
+c
+d 445 1 0 0 0
+c
+d 446 3 1 0 0
+c
+d 341 1 0 1 0
+c
+d 470 3 2 0 0
+c
+d 477 1 0 0 0
+c
+d 446 1 0 1 0
+c
+d 447 4 1 0 0
+c
+d 327 1 0 0 0
+c
+d 348 1 0 0 0
+c
+d 349 2 0 0 0
+c
+d 350 1 0 0 0
+c
+d 608 5 1 0 0
+c
+d 268 4 1 0 0
+c
+d 799 4 1 0 0
+c
+d 915 2 1 0 0
+c
+d 918 1 0 0 0
+c
+d 60 1 0 0 0
+c
+d 630 2 0 0 0
+c
+d 529 7 2 0 0
+c
+d 532 1 0 0 0
+c
+d 278 2 1 0 0
+c
+d 1170 2 0 0 0
+c
+d 1185 1 0 0 0
+c
+d 565 1 0 0 0
+c
+d 791 3 1 0 0
+c
+d 84 5 1 1 0
+c
+d 131 1 0 0 0
+c
+d 132 6 2 0 0
+c
+d 523 1 0 0 0
+c
+d 1176 4 0 0 0
+c
+d 1179 1 0 0 0
+c
+d 46 1 0 1 0
+c
+d 212 1 0 0 0
+c
+d 213 3 1 1 0
+c
+d 691 3 1 1 0
+c
+d 803 1 0 1 0
+c
+d 159 7 1 0 0
+c
+d 965 1 0 0 0
+c
+d 973 5 2 0 0
+c
+d 974 1 0 0 0
+c
+d 572 1 0 1 0
+c
+d 574 1 0 0 0
+c
+d 1053 3 1 0 0
+c
+d 550 4 2 0 0
+c
+d 838 3 0 0 0
+c
+d 839 1 0 0 0
+c
+d 1008 4 2 1 0
+c
+d 569 6 0 0 0
+c
+d 107 1 0 0 0
+c
+d 108 1 0 1 0
+c
+d 111 1 1 0 0
+c
+d 591 3 1 1 0
+c
+d 593 3 1 0 0
+c
+d 348 1 0 0 0
+c
+d 354 1 0 0 0
+c
+d 1125 2 1 1 0
+c
+d 274 1 0 1 0
+c
+d 275 5 2 0 0
+c
+d 1230 1 0 1 0
+c
+d 101 3 1 0 0
+c
+d 103 1 1 0 0
+c
+d 565 2 0 0 0
+c
+d 568 2 1 1 0
+c
+d 1058 1 0 0 0
+c
+d 1269 8 2 0 0
+c
+d 799 5 2 0 0
+c
+d 811 1 0 0 0
+c
+d 419 5 2 0 0
+c
+d 17 1 0 1 0
+c
+d 93 2 1 0 0
+c
+d 1110 1 0 1 0
+c
+d 1112 3 1 0 0
+c
+d 208 1 0 1 0
+c
+d 1244 5 2 0 0
+c
+d 437 1 0 1 0
+c
+d 457 2 1 0 0
+c
+d 464 2 1 0 0
+c
+d 393 1 0 0 0
+c
+d 395 1 0 0 0
+c
+d 407 3 1 1 0
+c
+d 806 3 1 0 0
+c
+d 807 1 0 1 0
+c
+d 1113 3 0 0 0
+c
+d 1114 1 0 0 0
+c
+d 574 5 0 0 0
+c
+d 608 1 1 0 0
+c
+d 611 4 1 0 0
+c
+d 990 1 0 0 0
+c
+d 93 4 1 0 0
+c
+d 141 1 0 1 0
+c
+d 854 3 1 0 0
+c
+d 194 1 0 0 0
+c
+d 195 1 1 0 0
+c
+d 205 2 1 0 0
+c
+d 443 4 1 2 0
+c
+d 449 1 1 0 0
+c
+d 915 5 0 0 0
+c
+d 916 3 0 0 0
+c
+d 111 1 1 0 0
+c
+d 113 2 0 0 0
+c
+d 146 1 0 0 0
+c
+d 34 3 2 0 0
+c
+d 35 3 1 0 0
+c
+d 36 1 0 0 0
+c
+d 418 4 1 1 0
+c
+d 433 3 1 0 0
+c
+d 591 5 2 0 0
+c
+d 193 3 1 1 0
+c
+d 195 1 1 0 0
+c
+d 878 3 1 0 0
+c
+d 882 1 0 1 0
+c
+d 620 1 1 0 0
+c
+d 621 3 1 0 0
+c
+d 622 1 0 0 0
+c
+d 626 1 0 0 0
+c
+d 65 6 2 1 0
+c
+d 1303 1 0 0 0
+c
+d 157 4 2 0 0
+c
+d 1096 2 1 1 0
+c
+d 1097 3 1 0 0
+c
+d 1101 1 0 0 0
+c
+d 650 7 3 0 0
+c
+d 653 1 0 0 0
+c
+d 602 3 1 0 0
+c
+d 632 1 1 0 0
+c
+d 1022 3 2 0 0
+c
+d 1023 1 0 0 0
+c
+d 44 4 1 1 0
+c
+d 1030 1 0 0 0
+c
+d 1031 1 0 0 0
+c
+d 84 3 1 0 0
+c
+d 1288 1 0 1 0
+c
+d 572 1 0 0 0
+c
+d 574 1 1 0 0
+c
+d 795 2 1 0 0
+c
+d 820 1 0 1 0
+c
+d 718 1 0 1 0
+c
+d 735 4 0 1 0
+c
+d 787 4 1 1 0
+c
+d 884 1 0 0 0
+c
+d 371 1 0 0 0
+c
+d 373 8 2 0 0
+c
+d 606 1 0 0 0
+c
+d 1041 5 1 0 0
+c
+d 437 1 1 0 0
+c
+d 439 2 1 0 0
+c
+d 440 1 0 0 0
+c
+d 164 1 0 0 0
+c
+d 167 4 2 0 0
+c
+d 455 4 1 1 0
+c
+d 842 1 1 0 0
+c
+d 879 3 1 0 0
+c
+d 212 1 0 1 0
+c
+d 213 2 1 0 0
+c
+d 811 5 2 0 0
+c
+d 615 4 1 1 0
+c
+d 616 1 0 0 0
+c
+d 1043 3 2 0 0
+c
+d 1045 2 0 0 0
+c
+d 1195 1 1 0 0
+c
+d 1202 5 1 0 0
+c
+d 1180 1 0 0 0
+c
+d 1181 2 1 0 0
+c
+d 1182 1 0 1 0
+c
+d 753 4 0 0 0
+c
+d 580 4 1 0 0
+c
+d 737 2 0 0 0
+c
+d 738 2 1 0 0
+c
+d 743 1 1 0 0
+c
+d 48 4 0 1 0
+c
+d 939 1 1 0 0
+c
+d 1194 1 0 0 0
+c
+d 1195 3 1 0 0
+c
+d 1208 1 0 0 0
+c
+d 348 5 2 0 0
+c
+d 69 5 1 0 0
+c
+d 318 1 0 0 0
+c
+d 323 3 1 0 0
+c
+d 426 1 0 0 0
+c
+d 591 2 1 0 0
+c
+d 856 1 0 0 0
+c
+d 868 1 0 1 0
+c
+d 873 1 1 0 0
+c
+d 874 1 0 0 0
+c
+d 90 1 0 0 0
+c
+d 91 3 1 0 0
+c
+d 574 6 2 0 0
+c
+d 500 1 1 0 0
+c
+d 505 5 1 0 0
+c
+d 101 2 1 0 0
+c
+d 608 1 0 0 0
+c
+d 1087 1 0 1 0
+c
+d 1090 1 0 0 0
+c
+d 395 3 0 0 0
+c
+d 1109 3 1 0 0
+c
+d 599 4 1 0 0
+c
+d 606 1 0 1 0
+c
+d 159 1 0 0 0
+c
+d 185 3 1 1 0
+c
+d 186 1 1 0 0
+c
+d 437 1 1 0 0
+c
+d 507 2 0 0 0
+c
+d 844 4 2 0 0
+c
+d 621 1 0 0 0
+c
+d 622 2 1 0 0
+c
+d 1034 1 0 1 0
+c
+d 124 6 0 0 0
+c
+d 287 5 1 0 0
+c
+d 289 2 1 0 0
+c
+d 1106 2 1 0 0
+c
+d 1108 1 0 0 0
+c
+d 1125 1 0 0 0
+c
+d 1127 1 1 0 0
+c
+d 1128 4 1 0 0
+c
+d 49 1 1 0 0
+c
+d 58 3 0 0 0
+c
+d 1308 1 0 0 0
+c
+d 18 1 0 0 0
+c
+d 95 4 1 0 0
+c
+d 998 2 1 0 0
+c
+d 803 3 0 1 0
+c
+d 804 1 1 0 0
+c
+d 426 3 1 0 0
+c
+d 591 2 1 0 0
+c
+d 499 1 0 0 0
+c
+d 511 1 0 0 0
+c
+d 344 3 2 0 0
+c
+d 345 1 0 0 0
+c
+d 1109 3 1 0 0
+c
+d 1111 1 0 1 0
+c
+d 341 4 2 0 0
+c
+d 278 4 1 1 0
+c
+d 280 1 0 0 0
+c
+d 559 1 0 0 0
+c
+d 560 1 1 0 0
+c
+d 561 1 0 1 0
+c
+d 54 6 3 0 0
+c
+d 694 1 0 0 0
+c
+d 858 6 2 1 0
+c
+d 91 3 0 0 0
+c
+d 168 3 2 0 0
+c
+d 378 1 0 0 0
+c
+d 101 3 2 0 0
+c
+d 424 2 1 0 0
+c
+d 425 1 0 0 0
+c
+d 507 5 2 0 0
+c
+d 915 3 1 1 0
+c
+d 919 2 0 1 0
+c
+d 437 2 1 0 0
+c
+d 438 1 0 0 0
+c
+d 441 1 0 1 0
+c
+d 101 3 1 0 0
+c
+d 109 3 0 0 0
+c
+d 159 1 0 1 0
+c
+d 178 3 1 1 0
+c
+d 44 1 1 0 0
+c
+d 19 1 1 0 0
+c
+d 982 3 1 0 0
+c
+d 983 2 0 0 0
+c
+d 305 4 1 1 0
+c
+d 353 1 0 0 0
+c
+d 445 1 0 0 0
+c
+d 447 3 1 1 0
+c
+d 448 1 0 0 0
+c
+d 111 3 1 0 0
+c
+d 231 1 0 1 0
+c
+d 236 1 0 0 0
+c
+d 278 1 1 0 0
+c
+d 1170 3 1 0 0
+c
+d 1163 2 0 0 0
+c
+d 32 6 1 1 0
+c
+d 34 1 0 0 0
+c
+d 353 1 1 0 0
+c
+d 355 3 1 0 0
+c
+d 357 1 0 0 0
+c
+d 799 3 1 1 0
+c
+d 806 2 0 0 0
+c
+d 167 5 1 0 0
+c
+d 369 1 0 1 0
+c
+d 186 1 0 0 0
+c
+d 188 1 0 0 0
+c
+d 212 1 0 1 0
+c
+d 861 3 0 1 0
+c
+d 862 1 0 0 0
+c
+d 870 1 0 1 0
+c
+d 311 1 0 1 0
+c
+d 327 4 2 0 0
+c
+d 51 4 0 0 0
+c
+d 59 1 0 1 0
+c
+d 60 4 2 0 0
+c
+d 835 4 1 1 0
+c
+d 836 1 0 1 0
+c
+d 133 1 0 1 0
+c
+d 324 3 1 0 0
+c
+d 855 1 0 0 0
+c
+d 856 4 2 0 0
+c
+d 457 6 2 1 0
+c
+d 490 2 0 0 0
+c
+d 196 5 2 0 0
+c
+d 107 1 0 1 0
+c
+d 111 3 1 0 0
+c
+d 803 4 1 0 0
+c
+d 207 4 2 0 0
+c
+d 800 1 0 0 0
+c
+d 801 3 0 0 0
+c
+d 87 2 0 0 0
+c
+d 992 6 2 0 0
+c
+d 686 4 1 0 0
+c
+d 729 4 1 1 0
+c
+d 730 1 0 0 0
+c
+d 733 1 0 1 0
+c
+d 592 4 1 1 0
+c
+d 594 1 0 0 0
+c
+d 795 2 1 0 0
+c
+d 965 1 0 1 0
+c
+d 983 3 0 0 0
+c
+d 985 1 1 0 0
+c
+d 775 1 0 0 0
+c
+d 883 1 0 0 0
+c
+d 535 1 0 1 0
+c
+d 536 4 1 0 0
+c
+d 133 2 1 0 0
+c
+d 278 2 1 0 0
+c
+d 1170 5 1 0 0
+c
+d 301 3 1 1 0
+c
+d 532 3 1 0 0
+c
+d 534 1 0 1 0
+c
+d 195 5 2 1 0
+c
+d 965 7 1 0 0
+c
+d 966 1 0 0 0
+c
+d 114 4 1 1 0
+c
+d 120 1 0 1 0
+c
+d 529 2 1 0 0
+c
+d 532 1 1 0 0
+c
+d 550 1 0 0 0
+c
+d 16 4 0 0 0
+c
+d 428 4 2 0 0
+c
+d 301 7 2 0 0
+c
+d 35 4 1 0 0
+c
+d 37 1 1 0 0
+c
+d 50 1 0 0 0
+c
+d 724 1 0 0 0
+c
+d 734 2 1 0 0
+c
+d 7 1 0 0 0
+c
+d 1278 1 1 0 0
+c
+d 1279 2 0 0 0
+c
+d 1280 2 1 0 0
+c
+d 301 3 1 0 0
+c
+d 162 1 1 0 0
+c
+d 355 2 1 0 0
+c
+d 357 1 0 0 0
+c
+d 367 2 0 0 0
+c
+d 218 3 0 0 0
+c
+d 220 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 159 1 1 0 0
+c
+d 364 4 1 0 0
+c
+d 152 2 1 0 0
+c
+d 153 2 1 0 0
+c
+d 155 1 0 1 0
+c
+d 994 1 1 0 0
+c
+d 998 5 1 0 0
+c
+d 67 1 0 1 0
+c
+d 68 4 0 1 0
+c
+d 109 1 0 0 0
+c
+d 110 1 0 0 0
+c
+d 623 5 1 1 0
+c
+d 159 3 1 1 0
+c
+d 437 2 0 0 0
+c
+d 467 2 0 1 0
+c
+d 472 1 1 0 0
+c
+d 473 5 1 0 0
+c
+d 301 2 1 0 0
+c
+d 313 5 1 0 0
+c
+d 599 1 0 0 0
+c
+d 606 3 1 0 0
+c
+d 608 1 1 0 0
+c
+d 101 5 1 0 0
+c
+d 424 1 0 1 0
+c
+d 719 3 0 0 0
+c
+d 720 1 0 0 0
+c
+d 723 1 1 0 0
+c
+d 634 3 2 0 0
+c
+d 635 1 0 0 0
+c
+d 157 4 1 0 0
+c
+d 691 1 0 0 0
+c
+d 693 4 2 0 0
+c
+d 691 4 1 1 0
+c
+d 156 5 1 1 0
+c
+d 21 3 1 0 0
+c
+d 29 1 1 0 0
+c
+d 341 3 1 0 0
+c
+d 348 2 0 0 0
+c
+d 437 1 1 0 0
+c
+d 989 2 1 0 0
+c
+d 990 3 1 0 0
+c
+d 419 5 1 0 0
+c
+d 434 1 1 0 0
+c
+d 185 4 1 0 0
+c
+d 146 5 1 0 0
+c
+d 419 3 1 1 0
+c
+d 1083 1 0 0 0
+c
+d 1086 3 1 1 0
+c
+d 1 3 1 0 0
+c
+d 2 1 0 0 0
+c
+d 1323 1 0 0 0
+c
+d 550 1 0 0 0
+c
+d 778 3 1 0 0
+c
+d 779 1 1 0 0
+c
+d 906 1 0 0 0
+c
+d 908 4 1 1 0
+c
+d 101 1 0 1 0
+c
+d 426 1 1 0 0
+c
+d 591 1 0 1 0
+c
+d 597 1 0 0 0
+c
+d 418 3 1 1 0
+c
+d 1087 1 0 0 0
+c
+d 799 3 2 0 0
+c
+d 915 2 0 0 0
+c
+d 477 1 0 0 0
+c
+d 478 2 1 0 0
+c
+d 482 1 0 1 0
+c
+d 178 2 1 0 0
+c
+d 181 2 1 0 0
+c
+d 195 1 0 0 0
+c
+d 400 3 1 0 0
+c
+d 32 2 1 1 0
+c
+d 75 3 1 0 0
+c
+d 76 1 1 0 0
+c
+d 205 2 0 0 0
+c
+d 206 3 2 0 0
+c
+d 419 1 0 1 0
+c
+d 1080 3 1 1 0
+c
+d 753 6 3 0 0
+c
+d 430 3 1 0 0
+c
+d 432 1 0 1 0
+c
+d 470 1 0 0 0
+c
+d 821 3 1 1 0
+c
+d 120 1 0 1 0
+c
+d 123 1 0 0 0
+c
+d 124 4 1 1 0
+c
+d 301 4 1 2 0
+c
+d 513 4 1 1 0
+c
+d 523 1 0 0 0
+c
+d 598 1 1 0 0
+c
+d 606 4 0 0 0
+c
+d 93 2 0 0 0
+c
+d 130 3 1 0 0
+c
+d 1259 1 1 0 0
+c
+d 155 1 0 0 0
+c
+d 156 2 0 0 0
+c
+d 157 1 0 0 0
+c
+d 806 7 2 0 0
+c
+d 196 2 1 0 0
+c
+d 89 5 1 0 0
+c
+d 341 1 0 0 0
+c
+d 437 4 0 0 0
+c
+d 443 3 1 0 0
+c
+d 650 1 0 0 0
+c
+d 653 1 0 0 0
+c
+d 661 2 1 0 0
+c
+d 673 2 1 0 0
+c
+d 120 1 0 1 0
+c
+d 121 2 1 0 0
+c
+d 124 1 0 1 0
+c
+d 757 4 1 1 0
+c
+d 758 1 0 1 0
+c
+d 115 4 0 0 0
+c
+d 146 2 2 0 0
+c
+d 151 5 1 0 0
+c
+d 44 1 0 0 0
+c
+d 1020 5 3 0 0
+c
+d 86 5 2 0 0
+c
+d 565 1 1 0 0
+c
+d 568 2 0 1 0
+c
+d 121 1 0 0 0
+c
+d 124 3 1 0 0
+c
+d 527 5 1 0 0
+c
+d 544 1 1 0 0
+c
+d 156 3 1 0 0
+c
+d 406 2 1 0 0
+c
+d 1195 2 0 1 0
+c
+d 1198 1 1 0 0
+c
+d 400 3 1 1 0
+c
+d 402 2 1 0 0
+c
+d 403 2 0 1 0
+c
+d 101 2 1 0 0
+c
+d 423 3 0 0 0
+c
+d 424 3 1 0 0
+c
+d 720 1 0 1 0
+c
+d 726 2 1 0 0
+c
+d 948 1 0 1 0
+c
+d 400 1 1 0 0
+c
+d 401 2 1 0 0
+c
+d 402 1 0 0 0
+c
+d 404 3 1 0 0
+c
+d 217 1 0 0 0
+c
+d 1241 4 1 1 0
+c
+d 1242 3 0 0 0
+c
+d 148 5 1 1 0
+c
+d 300 4 0 0 0
+c
+d 301 1 0 0 0
+c
+d 133 1 1 0 0
+c
+d 142 3 1 1 0
+c
+d 811 4 2 0 0
+c
+d 572 5 1 1 0
+c
+d 886 1 1 0 0
+c
+d 888 1 0 0 0
+c
+d 889 1 0 0 0
+c
+d 892 1 1 0 0
+c
+d 565 1 1 0 0
+c
+d 791 3 1 0 0
+c
+d 341 4 2 0 0
+c
+d 1195 1 1 0 0
+c
+d 1197 5 1 0 0
+c
+d 1156 1 0 0 0
+c
+d 1184 1 0 0 0
+c
+d 1195 1 0 0 0
+c
+d 1192 2 0 0 0
+c
+d 606 3 1 0 0
+c
+d 607 1 0 0 0
+c
+d 608 1 0 0 0
+c
+d 532 2 0 1 0
+c
+d 787 1 0 0 0
+c
+d 789 1 0 0 0
+c
+d 882 4 1 0 0
+c
+d 815 1 0 0 0
+c
+d 817 2 0 0 0
+c
+d 818 1 1 0 0
+c
+d 819 1 0 1 0
+c
+d 242 1 1 0 0
+c
+d 262 2 0 0 0
+c
+d 266 2 0 0 0
+c
+d 691 5 1 0 0
+c
+d 693 2 0 1 0
+c
+d 153 2 1 1 0
+c
+d 155 2 0 0 0
+c
+d 691 6 2 1 0
+c
+d 697 1 0 1 0
+c
+d 487 4 1 0 0
+c
+d 288 3 1 0 0
+c
+d 1165 4 2 1 0
+c
+d 111 4 1 0 0
+c
+d 89 1 0 0 0
+c
+d 550 2 0 0 0
+c
+d 606 1 1 0 0
+c
+d 635 2 1 0 0
+c
+d 636 1 0 0 0
+c
+d 30 3 1 0 0
+c
+d 1110 1 0 0 0
+c
+d 1115 1 0 0 0
+c
+d 272 3 1 1 0
+c
+d 159 1 1 0 0
+c
+d 186 1 0 0 0
+c
+d 213 4 1 0 0
+c
+d 686 5 0 0 0
+c
+d 286 4 1 2 0
+c
+d 288 1 0 0 0
+c
+d 75 1 0 1 0
+c
+d 84 3 1 0 0
+c
+d 85 2 1 0 0
+c
+d 1275 1 0 1 0
+c
+d 570 1 1 0 0
+c
+d 572 1 0 1 0
+c
+d 795 2 0 0 0
+c
+d 353 6 2 0 0
+c
+d 354 1 0 0 0
+c
+d 355 1 0 0 0
+c
+d 213 4 2 0 0
+c
+d 568 1 0 1 0
+c
+d 569 2 1 0 0
+c
+d 1051 1 0 1 0
+c
+d 1158 4 2 0 0
+c
+d 1163 1 0 0 0
+c
+d 599 5 1 1 0
+c
+d 811 5 1 0 0
+c
+d 812 1 1 0 0
+c
+d 129 1 0 1 0
+c
+d 523 4 2 0 0
+c
+d 523 1 0 0 0
+c
+d 525 4 1 1 0
+c
+d 303 3 1 0 0
+c
+d 1157 1 1 0 0
+c
+d 1159 1 0 0 0
+c
+d 46 1 1 0 0
+c
+d 74 3 1 0 0
+c
+d 1300 1 0 0 0
+c
+d 1163 1 1 0 0
+c
+d 1165 3 0 0 0
+c
+d 851 1 0 0 0
+c
+d 853 7 1 1 0
+c
+d 205 1 0 0 0
+c
+d 206 2 0 0 0
+c
+d 208 2 1 0 0
+c
+d 177 1 0 0 0
+c
+d 178 3 1 1 0
+c
+d 87 2 0 0 0
+c
+d 337 4 1 0 0
+c
+d 338 1 0 1 0
+c
+d 1090 3 1 0 0
+c
+d 213 5 2 0 0
+c
+d 634 3 1 0 0
+c
+d 635 1 1 0 0
+c
+d 637 1 0 0 0
+c
+d 99 1 0 0 0
+c
+d 1003 4 1 0 0
+c
+d 129 5 2 0 0
+c
+d 558 3 1 1 0
+c
+d 559 1 0 1 0
+c
+d 272 4 1 0 0
+c
+d 282 1 0 1 0
+c
+d 301 1 0 0 0
+c
+d 314 1 0 0 0
+c
+d 315 1 0 0 0
+c
+d 738 3 2 0 0
+c
+d 745 3 1 0 0
+c
+d 52 4 1 1 0
+c
+d 1269 5 2 0 0
+c
+d 1270 1 0 0 0
+c
+d 134 1 1 0 0
+c
+d 135 2 0 0 0
+c
+d 136 1 0 0 0
+c
+d 138 2 0 0 0
+c
+d 384 2 1 0 0
+c
+d 385 2 0 1 0
+c
+d 691 3 1 1 0
+c
+d 1150 3 1 0 0
+c
+d 1152 4 1 0 0
+c
+d 77 5 2 0 0
+c
+d 83 1 0 0 0
+c
+d 157 2 0 0 0
+c
+d 355 3 1 1 0
+c
+d 429 1 0 1 0
+c
+d 430 2 1 0 0
+c
+d 470 2 0 1 0
+c
+d 477 1 0 0 0
+c
+d 598 7 2 0 0
+c
+d 861 2 1 0 0
+c
+d 862 2 0 0 0
+c
+d 865 1 0 0 0
+c
+d 162 4 2 0 0
+c
+d 163 3 1 0 0
+c
+d 904 5 1 0 0
+c
+d 913 1 0 0 0
+c
+d 437 1 0 1 0
+c
+d 463 3 1 1 0
+c
+d 156 1 0 0 0
+c
+d 163 3 0 0 0
+c
+d 1250 1 0 0 0
+c
+d 65 5 2 1 0
+c
+d 54 2 0 0 0
+c
+d 1311 5 0 0 0
+c
+d 478 1 0 1 0
+c
+d 479 3 0 0 0
+c
+d 487 1 1 0 0
+c
+d 610 1 0 0 0
+c
+d 612 4 0 0 0
+c
+d 127 1 1 0 0
+c
+d 128 1 0 0 0
+c
+d 129 4 1 0 0
+c
+d 373 1 1 0 0
+c
+d 374 1 0 1 0
+c
+d 377 4 1 0 0
+c
+d 153 4 2 1 0
+c
+d 155 1 0 0 0
+c
+d 301 4 1 0 0
+c
+d 1156 1 0 0 0
+c
+d 159 1 0 0 0
+c
+d 178 2 0 0 0
+c
+d 179 1 0 1 0
+c
+d 875 4 1 0 0
+c
+d 1170 1 0 1 0
+c
+d 1172 3 1 0 0
+c
+d 54 2 0 0 0
+c
+d 695 1 1 0 0
+c
+d 697 1 1 0 0
+c
+d 1311 1 0 0 0
+c
+d 554 1 0 0 0
+c
+d 555 1 1 0 0
+c
+d 556 1 0 0 0
+c
+d 797 3 1 0 0
+c
+d 927 2 0 1 0
+c
+d 301 3 1 0 0
+c
+d 1155 1 0 0 0
+c
+d 1219 1 0 0 0
+c
+d 169 5 2 1 0
+c
+d 195 6 2 0 0
+c
+d 206 1 1 0 0
+c
+d 44 5 0 0 0
+c
+d 343 4 1 0 0
+c
+d 437 1 1 0 0
+c
+d 168 3 0 0 0
+c
+d 369 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 305 5 0 0 0
+c
+d 1140 1 0 0 0
+c
+d 591 5 1 0 0
+c
+d 791 6 0 0 0
+c
+d 502 1 0 1 0
+c
+d 507 4 1 0 0
+c
+d 508 1 0 0 0
+c
+d 575 4 1 0 0
+c
+d 796 3 0 0 0
+c
+d 797 1 0 0 0
+c
+d 1315 2 1 0 0
+c
+d 1316 1 1 0 0
+c
+d 1318 2 1 0 0
+c
+d 324 5 1 0 0
+c
+d 168 1 0 0 0
+c
+d 169 2 0 0 0
+c
+d 662 4 1 2 0
+c
+d 667 1 0 0 0
+c
+d 56 3 0 0 0
+c
+d 1309 4 1 1 0
+c
+d 1111 4 1 0 0
+c
+d 1112 1 1 0 0
+c
+d 1195 4 1 0 0
+c
+d 437 5 2 0 0
+c
+d 457 1 0 1 0
+c
+d 989 2 1 0 0
+c
+d 737 6 3 0 0
+c
+d 437 4 2 0 0
+c
+d 502 1 0 0 0
+c
+d 1199 3 1 0 0
+c
+d 650 1 0 0 0
+c
+d 655 1 0 0 0
+c
+d 656 3 0 0 0
+c
+d 594 3 0 1 0
+c
+d 686 3 1 1 0
+c
+d 111 1 0 0 0
+c
+d 146 3 1 1 0
+c
+d 75 1 0 1 0
+c
+d 81 1 0 0 0
+c
+d 82 2 0 0 0
+c
+d 1295 1 1 0 0
+c
+d 836 1 0 0 0
+c
+d 837 3 0 0 0
+c
+d 101 1 0 1 0
+c
+d 111 2 1 0 0
+c
+d 1092 2 1 0 0
+c
+d 86 2 1 0 0
+c
+d 1290 1 0 0 0
+c
+d 457 5 1 1 0
+c
+d 749 8 2 0 0
+c
+d 278 2 1 1 0
+c
+d 1170 1 0 0 0
+c
+d 591 5 1 1 0
+c
+d 597 1 0 0 0
+c
+d 478 1 1 0 0
+c
+d 480 2 0 0 0
+c
+d 481 1 0 0 0
+c
+d 1060 4 1 1 0
+c
+d 1062 2 1 0 0
+c
+d 1064 1 0 0 0
+c
+d 277 1 0 0 0
+c
+d 278 4 2 0 0
+c
+d 146 3 1 0 0
+c
+d 147 2 0 0 0
+c
+d 294 1 1 0 0
+c
+d 525 1 1 0 0
+c
+d 527 1 0 1 0
+c
+d 544 1 0 0 0
+c
+d 546 1 0 0 0
+c
+d 393 4 2 1 0
+c
+d 851 1 1 0 0
+c
+d 853 4 1 0 0
+c
+d 896 1 0 0 0
+c
+d 100 2 1 0 0
+c
+d 1004 1 0 0 0
+c
+d 1006 1 0 1 0
+c
+d 878 5 1 1 0
+c
+d 167 9 2 0 0
+c
+d 127 3 1 0 0
+c
+d 129 1 0 0 0
+c
+d 130 1 0 0 0
+c
+d 125 3 1 0 0
+c
+d 126 1 0 0 0
+c
+d 602 4 2 0 0
+c
+d 682 1 0 0 0
+c
+d 46 4 1 0 0
+c
+d 132 5 2 0 0
+c
+d 286 3 2 0 0
+c
+d 807 2 1 0 0
+c
+d 823 4 1 0 0
+c
+d 906 1 1 0 0
+c
+d 40 3 1 0 0
+c
+d 41 1 1 0 0
+c
+d 1022 3 1 0 0
+c
+d 1023 2 0 1 0
+c
+d 191 1 0 0 0
+c
+d 192 3 1 0 0
+c
+d 193 1 0 1 0
+c
+d 91 1 0 0 0
+c
+d 93 1 0 0 0
+c
+d 117 1 0 0 0
+c
+d 48 4 2 0 0
+c
+d 278 3 1 0 0
+c
+d 279 1 1 0 0
+c
+d 211 1 1 0 0
+c
+d 217 2 1 0 0
+c
+d 437 1 0 0 0
+c
+d 457 5 1 0 0
+c
+d 49 3 1 0 0
+c
+d 59 1 0 0 0
+c
+d 343 5 1 2 0
+c
+d 558 1 0 0 0
+c
+d 559 5 2 0 0
+c
+d 563 1 0 0 0
+c
+d 384 5 2 0 0
+c
+d 437 1 0 0 0
+c
+d 493 1 1 0 0
+c
+d 494 3 1 0 0
+c
+d 355 1 1 0 0
+c
+d 358 2 0 1 0
+c
+d 171 1 1 0 0
+c
+d 172 5 1 0 0
+c
+d 182 2 1 0 0
+c
+d 191 1 0 1 0
+c
+d 1185 2 1 0 0
+c
+d 1192 1 1 0 0
+c
+d 181 1 0 0 0
+c
+d 191 1 0 1 0
+c
+d 192 2 0 0 0
+c
+d 193 1 0 0 0
+c
+d 844 4 1 0 0
+c
+d 897 1 0 0 0
+c
+d 591 4 1 0 0
+c
+d 840 3 2 0 0
+c
+d 842 1 0 0 0
+c
+d 608 1 0 0 0
+c
+d 610 1 0 0 0
+c
+d 611 2 0 0 0
+c
+d 612 1 0 0 0
+c
+d 100 4 1 0 0
+c
+d 101 4 0 0 0
+c
+d 107 1 0 0 0
+c
+d 1012 6 2 0 0
+c
+d 134 1 0 0 0
+c
+d 135 3 0 0 0
+c
+d 183 1 0 1 0
+c
+d 196 3 1 0 0
+c
+d 1246 1 1 0 0
+c
+d 1 1 0 1 0
+c
+d 4 2 1 0 0
+c
+d 6 1 0 1 0
+c
+d 12 1 0 0 0
+c
+d 437 1 1 0 0
+c
+d 494 6 1 0 0
+c
+d 753 2 0 1 0
+c
+d 760 1 1 0 0
+c
+d 691 4 1 0 0
+c
+d 697 1 0 0 0
+c
+d 951 1 1 0 0
+c
+d 1194 3 1 1 0
+c
+d 437 2 0 1 0
+c
+d 444 1 1 0 0
+c
+d 470 1 0 0 0
+c
+d 101 1 1 0 0
+c
+d 111 2 0 1 0
+c
+d 888 3 2 0 0
+c
+d 890 1 0 0 0
+c
+d 966 3 1 0 0
+c
+d 978 3 1 0 0
+c
+d 111 1 0 0 0
+c
+d 143 1 0 0 0
+c
+d 229 3 0 0 0
+c
+d 230 3 0 0 0
+c
+d 252 2 1 0 0
+c
+d 253 3 1 1 0
+c
+d 257 2 0 0 0
+c
+d 427 1 0 0 0
+c
+d 428 2 1 1 0
+c
+d 861 3 0 0 0
+c
+d 867 1 1 0 0
+c
+d 868 2 0 0 0
+c
+d 862 1 1 0 0
+c
+d 863 1 0 0 0
+c
+d 865 3 1 0 0
+c
+d 423 4 2 0 0
+c
+d 1080 1 0 0 0
+c
+d 457 2 1 0 0
+c
+d 461 2 1 0 0
+c
+d 540 3 1 0 0
+c
+d 543 2 0 1 0
+c
+d 1070 1 0 0 0
+c
+d 1071 2 1 1 0
+c
+d 340 5 1 1 0
+c
+d 12 1 1 0 0
+c
+d 90 3 1 0 0
+c
+d 91 1 0 1 0
+c
+d 187 4 1 0 0
+c
+d 188 2 1 0 0
+c
+d 131 3 2 0 0
+c
+d 523 1 0 0 0
+c
+d 84 2 1 0 0
+c
+d 1285 3 1 0 0
+c
+d 835 2 0 1 0
+c
+d 836 1 1 0 0
+c
+d 574 1 1 0 0
+c
+d 795 4 1 0 0
+c
+d 796 1 0 0 0
+c
+d 146 2 1 0 0
+c
+d 238 5 2 0 0
+c
+d 239 1 0 0 0
+c
+d 608 3 2 0 0
+c
+d 616 2 0 1 0
+c
+d 1037 5 0 0 0
+c
+d 1038 1 0 0 0
+c
+d 413 5 1 1 0
+c
+d 89 3 1 0 0
+c
+d 533 1 0 0 0
+c
+d 807 4 0 0 0
+c
+d 899 1 0 0 0
+c
+d 133 5 1 1 0
+c
+d 509 5 1 0 0
+c
+d 1070 1 0 1 0
+c
+d 146 1 0 0 0
+c
+d 152 3 2 0 0
+c
+d 572 3 0 0 0
+c
+d 574 1 0 0 0
+c
+d 274 4 1 2 0
+c
+d 615 1 0 0 0
+c
+d 618 1 0 0 0
+c
+d 985 3 0 0 0
+c
+d 987 1 0 0 0
+c
+d 499 1 0 0 0
+c
+d 504 1 0 0 0
+c
+d 505 1 0 0 0
+c
+d 278 3 0 0 0
+c
+d 1168 2 0 0 0
+c
+d 146 3 1 1 0
+c
+d 150 1 0 0 0
+c
+d 1194 3 1 0 0
+c
+d 1195 1 0 0 0
+c
+d 606 3 1 1 0
+c
+d 635 1 1 0 0
+c
+d 636 1 0 0 0
+c
+d 675 1 1 0 0
+c
+d 676 3 1 0 0
+c
+d 677 1 0 1 0
+c
+d 791 4 1 0 0
+c
+d 830 1 1 0 0
+c
+d 831 1 0 0 0
+c
+d 1165 2 1 0 0
+c
+d 1167 6 1 0 0
+c
+d 662 1 0 0 0
+c
+d 663 4 2 0 0
+c
+d 354 1 0 1 0
+c
+d 1125 2 1 0 0
+c
+d 1128 1 0 1 0
+c
+d 572 6 1 1 0
+c
+d 573 1 0 0 0
+c
+d 557 1 0 0 0
+c
+d 565 4 2 0 0
+c
+d 12 1 1 0 0
+c
+d 1266 3 1 0 0
+c
+d 1266 1 1 0 0
+c
+d 1285 1 0 1 0
+c
+d 31 4 0 1 0
+c
+d 32 1 1 0 0
+c
+d 769 3 1 0 0
+c
+d 774 1 1 0 0
+c
+d 724 1 0 0 0
+c
+d 726 1 1 0 0
+c
+d 734 5 1 0 0
+c
+d 622 2 0 0 0
+c
+d 629 1 1 0 0
+c
+d 965 3 1 0 0
+c
+d 1287 1 0 0 0
+c
+d 1289 3 0 0 0
+c
+d 565 2 0 0 0
+c
+d 567 3 1 1 0
+c
+d 751 1 1 0 0
+c
+d 752 3 1 1 0
+c
+d 301 1 1 0 0
+c
+d 302 1 0 0 0
+c
+d 303 3 1 0 0
+c
+d 200 2 1 0 0
+c
+d 207 2 1 0 0
+c
+d 132 2 0 0 0
+c
+d 492 1 0 0 0
+c
+d 341 5 2 1 0
+c
+d 418 5 2 0 0
+c
+d 333 3 0 0 0
+c
+d 340 3 1 1 0
+c
+d 195 1 0 0 0
+c
+d 205 5 2 0 0
+c
+d 31 4 2 0 0
+c
+d 32 1 0 1 0
+c
+d 580 3 0 0 0
+c
+d 584 1 0 0 0
+c
+d 1107 2 1 0 0
+c
+d 1110 1 0 1 0
+c
+d 301 2 1 1 0
+c
+d 312 1 0 0 0
+c
+d 686 1 0 0 0
+c
+d 919 2 1 1 0
+c
+d 922 5 1 0 0
+c
+d 199 4 1 1 0
+c
+d 208 1 0 0 0
+c
+d 802 1 0 0 0
+c
+d 803 4 2 0 0
+c
+d 804 1 0 1 0
+c
+d 383 5 0 0 0
+c
+d 55 3 0 0 0
+c
+d 691 1 0 0 0
+c
+d 694 1 1 0 0
+c
+d 734 3 2 0 0
+c
+d 939 1 0 0 0
+c
+d 348 3 2 0 0
+c
+d 393 1 0 0 0
+c
+d 407 1 0 1 0
+c
+d 163 1 1 0 0
+c
+d 171 2 0 0 0
+c
+d 172 2 1 0 0
+c
+d 185 5 2 0 0
+c
+d 291 5 1 0 0
+c
+d 300 1 1 0 0
+c
+d 749 3 1 0 0
+c
+d 751 1 0 0 0
+c
+d 857 1 0 0 0
+c
+d 163 2 1 0 0
+c
+d 1249 3 1 0 0
+c
+d 276 5 2 0 0
+c
+d 305 5 1 0 0
+c
+d 353 2 1 0 0
+c
+d 1138 1 0 0 0
+c
+d 341 2 1 0 0
+c
+d 348 1 1 0 0
+c
+d 470 2 0 0 0
+c
+d 169 3 1 0 0
+c
+d 1136 3 1 0 0
+c
+d 425 3 1 0 0
+c
+d 426 1 0 0 0
+c
+d 594 7 2 0 0
+c
+d 337 1 0 1 0
+c
+d 338 5 1 0 0
+c
+d 1083 1 1 0 0
+c
+d 1086 3 0 0 0
+c
+d 338 1 0 0 0
+c
+d 340 3 0 0 0
+c
+d 373 3 1 1 0
+c
+d 523 3 1 0 0
+c
+d 146 6 3 0 0
+c
+d 294 1 0 0 0
+c
+d 305 2 0 0 0
+c
+d 306 3 1 1 0
+c
+d 753 3 1 0 0
+c
+d 858 1 0 1 0
+c
+d 859 1 0 0 0
+c
+d 101 7 2 0 0
+c
+d 272 5 2 1 0
+c
+d 56 3 0 0 0
+c
+d 1309 1 0 1 0
+c
+d 1310 5 1 0 0
+c
+d 75 1 1 0 0
+c
+d 88 3 1 0 0
+c
+d 557 3 1 0 0
+c
+d 565 1 1 0 0
+c
+d 1060 1 0 1 0
+c
+d 1080 2 1 1 0
+c
+d 1082 1 0 0 0
+c
+d 985 3 0 0 0
+c
+d 986 1 1 0 0
+c
+d 987 1 1 0 0
+c
+d 988 2 0 0 0
+c
+d 737 2 1 0 0
+c
+d 740 2 1 0 0
+c
+d 457 4 1 1 0
+c
+d 463 2 0 0 0
+c
+d 1126 2 1 0 0
+c
+d 1130 1 0 0 0
+c
+d 470 2 1 0 0
+c
+d 475 3 0 0 0
+c
+d 476 1 0 0 0
+c
+d 156 4 1 1 0
+c
+d 157 1 1 0 0
+c
+d 248 4 0 0 0
+c
+d 167 1 0 1 0
+c
+d 1103 1 1 0 0
+c
+d 1104 1 0 0 0
+c
+d 1309 3 1 0 0
+c
+d 1310 1 0 0 0
+c
+d 324 1 0 1 0
+c
+d 325 2 1 0 0
+c
+d 327 1 0 1 0
+c
+d 332 1 0 0 0
+c
+d 87 2 1 0 0
+c
+d 213 1 0 1 0
+c
+d 242 4 1 1 0
+c
+d 738 1 0 0 0
+c
+d 745 6 2 1 0
+c
+d 556 1 1 0 0
+c
+d 1066 1 0 0 0
+c
+d 1067 2 1 0 0
+c
+d 49 1 1 0 0
+c
+d 734 6 1 1 0
+c
+d 49 1 0 0 0
+c
+d 59 2 1 0 0
+c
+d 1011 2 1 0 0
+c
+d 31 1 0 1 0
+c
+d 1318 4 2 0 0
+c
+d 115 2 1 0 0
+c
+d 120 3 1 0 0
+c
+d 48 1 0 0 0
+c
+d 49 2 1 0 0
+c
+d 621 1 0 0 0
+c
+d 965 6 3 0 0
+c
+d 178 5 1 1 0
+c
+d 572 4 2 0 0
+c
+d 1055 4 1 0 0
+c
+d 1008 3 0 0 0
+c
+d 753 5 1 0 0
+c
+d 857 1 0 1 0
+c
+d 304 5 1 0 0
+c
+d 310 1 0 0 0
+c
+d 311 2 1 0 0
+c
+d 348 3 1 1 0
+c
+d 47 2 0 1 0
+c
+d 769 2 1 0 0
+c
+d 771 2 0 0 0
+c
+d 829 5 0 1 0
+c
+d 833 1 0 1 0
+c
+d 127 1 0 0 0
+c
+d 129 3 2 0 0
+c
+d 530 7 2 0 0
+c
+d 377 4 1 0 0
+c
+d 878 1 0 0 0
+c
+d 879 6 1 1 0
+c
+d 101 2 0 1 0
+c
+d 1084 1 0 0 0
+c
+d 1085 1 1 0 0
+c
+d 509 2 0 0 0
+c
+d 515 5 1 1 0
+c
+d 5 1 0 0 0
+c
+d 18 1 0 0 0
+c
+d 1279 1 0 0 0
+c
+d 286 1 0 0 0
+c
+d 291 3 2 0 0
+c
+d 299 1 0 1 0
+c
+d 718 1 1 0 0
+c
+d 720 3 1 0 0
+c
+d 75 1 0 0 0
+c
+d 84 3 1 0 0
+c
+d 96 4 1 1 0
+c
+d 97 1 0 0 0
+c
+d 99 1 0 0 0
+c
+d 111 1 0 0 0
+c
+d 848 5 2 0 0
+c
+d 206 1 0 1 0
+c
+d 207 3 1 0 0
+c
+d 1245 1 0 0 0
+c
+d 511 1 0 0 0
+c
+d 522 3 0 0 0
+c
+d 184 8 1 0 0
+c
+d 594 7 2 0 0
+c
+d 21 1 0 0 0
+c
+d 22 1 0 0 0
+c
+d 23 4 1 1 0
+c
+d 377 5 2 0 0
+c
+d 101 6 1 1 0
+c
+d 111 1 0 1 0
+c
+d 437 3 1 0 0
+c
+d 453 1 0 1 0
+c
+d 261 4 1 1 0
+c
+d 437 6 1 1 0
+c
+d 457 3 1 1 0
+c
+d 569 1 0 0 0
+c
+d 84 1 0 0 0
+c
+d 1266 1 0 1 0
+c
+d 1285 3 2 0 0
+c
+d 1288 1 0 0 0
+c
+d 334 5 2 0 0
+c
+d 341 1 0 1 0
+c
+d 348 1 0 0 0
+c
+d 368 3 0 0 0
+c
+d 369 1 0 0 0
+c
+d 597 6 2 1 0
+c
+d 598 1 0 0 0
+c
+d 601 1 1 0 0
+c
+d 807 1 0 0 0
+c
+d 822 4 0 0 0
+c
+d 767 4 1 1 0
+c
+d 32 2 1 0 0
+c
+d 1298 1 1 0 0
+c
+d 1318 1 0 0 0
+c
+d 1320 1 0 1 0
+c
+d 253 4 0 0 0
+c
+d 254 3 2 0 0
+c
+d 854 4 1 1 0
+c
+d 866 1 1 0 0
+c
+d 455 6 3 0 0
+c
+d 1300 3 0 0 0
+c
+d 1302 2 0 0 0
+c
+d 418 5 2 1 0
+c
+d 419 1 0 0 0
+c
+d 568 1 0 1 0
+c
+d 572 3 1 0 0
+c
+d 167 1 0 1 0
+c
+d 1121 2 0 1 0
+c
+d 806 3 0 0 0
+c
+d 811 1 0 0 0
+c
+d 910 1 0 0 0
+c
+d 369 1 0 0 0
+c
+d 382 2 0 0 0
+c
+d 799 4 1 0 0
+c
+d 843 1 0 0 0
+c
+d 801 4 2 0 0
+c
+d 651 1 0 0 0
+c
+d 689 3 1 0 0
+c
+d 690 1 0 1 0
+c
+d 878 5 1 1 0
+c
+d 801 5 1 1 0
+c
+d 802 1 0 1 0
+c
+d 7 4 2 0 0
+c
+d 1279 1 0 0 0
+c
+d 119 2 1 0 0
+c
+d 394 1 1 0 0
+c
+d 1111 2 1 0 0
+c
+d 1113 1 0 0 0
+c
+d 152 1 0 1 0
+c
+d 153 3 1 0 0
+c
+d 154 1 0 0 0
+c
+d 152 4 2 0 0
+c
+d 437 4 2 0 0
+c
+d 438 1 0 0 0
+c
+d 437 2 1 0 0
+c
+d 466 3 1 0 0
+c
+d 467 1 1 0 0
+c
+d 1047 1 0 0 0
+c
+d 301 1 0 0 0
+c
+d 1156 8 2 0 0
+c
+d 276 7 1 1 0
+c
+d 132 5 1 1 0
+c
+d 100 1 0 1 0
+c
+d 101 3 2 0 0
+c
+d 105 2 1 0 0
+c
+d 492 4 1 0 0
+c
+d 493 3 2 0 0
+c
+d 262 1 0 0 0
+c
+d 266 3 2 0 0
+c
+d 268 1 0 0 0
+c
+d 734 3 1 0 0
+c
+d 944 1 0 0 0
+c
+d 945 1 0 0 0
+c
+d 796 4 1 1 0
+c
+d 797 1 0 0 0
+c
+d 315 7 2 0 0
+c
+d 119 5 2 1 0
+c
+d 575 5 2 1 0
+c
+d 796 1 0 1 0
+c
+d 17 1 0 0 0
+c
+d 93 2 0 0 0
+c
+d 95 2 1 0 0
+c
+d 96 2 1 0 0
+c
+d 536 3 1 1 0
+c
+d 79 2 1 0 0
+c
+d 84 4 1 0 0
+c
+d 1278 1 0 0 0
+c
+d 775 2 1 1 0
+c
+d 786 1 0 0 0
+c
+d 276 3 1 0 0
+c
+d 301 3 0 1 0
+c
+d 312 1 0 0 0
+c
+d 1080 2 1 1 0
+c
+d 1083 1 0 0 0
+c
+d 507 1 1 0 0
+c
+d 509 3 1 1 0
+c
+d 1071 1 0 0 0
+c
+d 767 1 1 0 0
+c
+d 863 1 0 0 0
+c
+d 876 1 0 1 0
+c
+d 877 3 1 0 0
+c
+d 795 3 1 0 0
+c
+d 911 1 0 0 0
+c
+d 629 3 0 0 0
+c
+d 965 4 1 1 0
+c
+d 54 1 0 0 0
+c
+d 60 6 2 0 0
+c
+d 66 1 0 0 0
+c
+d 196 4 2 0 0
+c
+d 200 2 1 0 0
+c
+d 54 1 0 0 0
+c
+d 60 6 2 0 0
+c
+d 602 2 1 0 0
+c
+d 644 1 1 0 0
+c
+d 242 4 1 0 0
+c
+d 262 3 1 0 0
+c
+d 769 5 0 1 0
+c
+d 98 1 1 0 0
+c
+d 99 3 1 0 0
+c
+d 100 1 0 0 0
+c
+d 60 7 1 0 0
+c
+d 1001 3 1 0 0
+c
+d 1002 1 0 0 0
+c
+d 1003 3 0 0 0
+c
+d 1172 3 2 0 0
+c
+d 1185 1 0 0 0
+c
+d 477 5 1 0 0
+c
+d 478 1 1 0 0
+c
+d 482 3 1 0 0
+c
+d 488 3 1 1 0
+c
+d 763 2 1 0 0
+c
+d 767 4 0 0 0
+c
+d 529 2 0 1 0
+c
+d 1060 1 0 0 0
+c
+d 1062 3 0 0 0
+c
+d 1063 2 1 0 0
+c
+d 604 4 0 0 0
+c
+d 605 1 0 0 0
+c
+d 52 1 1 0 0
+c
+d 54 4 1 0 0
+c
+d 55 1 0 0 0
+c
+d 1191 4 1 1 0
+c
+d 494 2 1 0 0
+c
+d 495 2 0 1 0
+c
+d 594 5 2 0 0
+c
+d 686 1 0 0 0
+c
+d 1042 1 1 0 0
+c
+d 570 3 1 1 0
+c
+d 572 3 0 0 0
+c
+d 211 7 2 0 0
+c
+d 212 1 0 1 0
+c
+d 592 4 2 1 0
+c
+d 851 1 1 0 0
+c
+d 852 3 0 0 0
+c
+d 853 1 0 1 0
+c
+d 278 3 1 0 0
+c
+d 1170 1 0 1 0
+c
+d 18 1 1 0 0
+c
+d 21 2 0 0 0
+c
+d 29 1 0 1 0
+c
+d 168 5 2 0 0
+c
+d 369 1 0 0 0
+c
+d 132 2 0 0 0
+c
+d 1257 2 1 0 0
+c
+d 262 1 1 0 0
+c
+d 270 2 1 0 0
+c
+d 272 1 0 0 0
+c
+d 242 4 1 0 0
+c
+d 243 2 1 0 0
+c
+d 492 1 0 0 0
+c
+d 493 6 2 0 0
+c
+d 494 1 0 1 0
+c
+d 32 4 2 0 0
+c
+d 1315 1 0 0 0
+c
+d 842 1 0 1 0
+c
+d 875 3 1 1 0
+c
+d 690 4 1 0 0
+c
+d 705 1 1 0 0
+c
+d 17 1 0 0 0
+c
+d 93 2 0 0 0
+c
+d 95 1 0 0 0
+c
+d 101 3 0 0 0
+c
+d 108 1 0 0 0
+c
+d 610 1 0 0 0
+c
+d 95 4 1 0 0
+c
+d 998 1 0 1 0
+c
+d 457 3 1 0 0
+c
+d 119 2 1 1 0
+c
+d 120 2 0 0 0
+c
+d 551 5 2 0 0
+c
+d 436 7 1 0 0
+c
+d 437 1 0 0 0
+c
+d 578 2 1 1 0
+c
+d 955 6 1 0 0
+c
+d 437 1 0 0 0
+c
+d 438 3 1 0 0
+c
+d 93 3 1 0 0
+c
+d 95 1 0 0 0
+c
+d 437 1 1 0 0
+c
+d 500 5 1 0 0
+c
+d 501 2 1 0 0
+c
+d 156 1 1 0 0
+c
+d 162 3 0 1 0
+c
+d 163 1 0 0 0
+c
+d 157 3 1 0 0
+c
+d 737 7 2 0 0
+c
+d 62 1 0 0 0
+c
+d 64 4 1 0 0
+c
+d 65 1 1 0 0
+c
+d 294 3 1 0 0
+c
+d 296 2 0 0 0
+c
+d 297 1 0 0 0
+c
+d 937 3 1 0 0
+c
+d 938 1 0 0 0
+c
+d 799 2 0 1 0
+c
+d 810 4 1 0 0
+c
+d 437 5 1 0 0
+c
+d 455 2 0 1 0
+c
+d 95 1 0 1 0
+c
+d 96 2 1 0 0
+c
+d 97 2 1 0 0
+c
+d 99 1 0 1 0
+c
+d 767 3 1 0 0
+c
+d 768 3 1 0 0
+c
+d 358 1 0 0 0
+c
+d 359 5 2 0 0
+c
+d 213 5 1 0 0
+c
+d 242 4 1 1 0
+c
+d 427 1 0 1 0
+c
+d 428 3 1 0 0
+c
+d 19 2 1 1 0
+c
+d 21 5 1 0 0
+c
+d 51 4 2 0 0
+c
+d 56 1 0 0 0
+c
+d 1310 1 0 0 0
+c
+d 570 4 1 0 0
+c
+d 1153 7 2 1 0
+c
+d 799 4 0 1 0
+c
+d 809 1 0 0 0
+c
+d 729 6 0 0 0
+c
+d 1024 2 0 0 0
+c
+d 262 1 0 1 0
+c
+d 264 4 1 0 0
+c
+d 75 2 1 0 0
+c
+d 164 1 0 1 0
+c
+d 167 3 1 1 0
+c
+d 729 6 1 0 0
+c
+d 730 1 0 1 0
+c
+d 732 1 0 0 0
+c
+d 46 4 1 0 0
+c
+d 775 2 1 1 0
+c
+d 1009 6 3 0 0
+c
+d 204 2 1 0 0
+c
+d 1248 2 1 0 0
+c
+d 281 1 0 1 0
+c
+d 1156 5 1 0 0
+c
+d 1192 1 0 0 0
+c
+d 196 3 1 0 0
+c
+d 197 1 1 0 0
+c
+d 419 7 2 1 0
+c
+d 509 1 0 0 0
+c
+d 510 4 2 0 0
+c
+d 517 1 1 0 0
+c
+d 341 2 0 0 0
+c
+d 411 3 0 0 0
+c
+d 28 2 0 0 0
+c
+d 29 3 2 0 0
+c
+d 93 1 0 0 0
+c
+d 95 3 1 0 0
+c
+d 96 1 1 0 0
+c
+d 278 2 1 0 0
+c
+d 280 2 1 0 0
+c
+d 281 1 0 0 0
+c
+d 60 1 0 0 0
+c
+d 66 1 0 0 0
+c
+d 647 3 1 1 0
+c
+d 217 1 0 1 0
+c
+d 241 2 1 0 0
+c
+d 242 1 0 1 0
+c
+d 248 1 0 0 0
+c
+d 862 1 0 0 0
+c
+d 863 2 1 1 0
+c
+d 400 2 1 0 0
+c
+d 402 3 1 0 0
+c
+d 403 1 0 0 0
+c
+d 405 3 1 0 0
+c
+d 787 3 1 0 0
+c
+d 661 1 1 0 0
+c
+d 667 1 0 0 0
+c
+d 668 2 1 0 0
+c
+d 669 2 0 1 0
+c
+d 615 4 0 0 0
+c
+d 616 2 1 0 0
+c
+d 570 5 2 0 0
+c
+d 292 5 1 0 0
+c
+d 294 2 0 0 0
+c
+d 704 1 1 0 0
+c
+d 705 3 0 0 0
+c
+d 575 7 1 1 0
+c
+d 494 1 0 1 0
+c
+d 496 2 1 0 0
+c
+d 498 1 0 0 0
+c
+d 591 1 0 1 0
+c
+d 597 1 1 0 0
+c
+d 730 1 0 1 0
+c
+d 733 2 1 0 0
+c
+d 736 1 0 0 0
+c
+d 876 1 1 0 0
+c
+d 878 2 0 0 0
+c
+d 156 5 2 0 0
+c
+d 400 1 0 0 0
+c
+d 599 7 2 0 0
+c
+d 604 1 0 0 0
+c
+d 763 5 0 0 0
+c
+d 301 1 0 0 0
+c
+d 304 2 1 0 0
+c
+d 310 4 1 0 0
+c
+d 348 4 2 0 0
+c
+d 395 4 1 1 0
+c
+d 1106 1 0 1 0
+c
+d 795 1 0 0 0
+c
+d 907 2 0 0 0
+c
+d 908 4 2 0 0
+c
+d 268 3 0 0 0
+c
+d 282 1 0 0 0
+c
+d 1227 1 0 0 0
+c
+d 46 2 1 0 0
+c
+d 75 1 0 0 0
+c
+d 690 1 0 0 0
+c
+d 705 5 2 0 0
+c
+d 534 3 1 0 0
+c
+d 259 2 1 0 0
+c
+d 262 1 0 0 0
+c
+d 728 5 2 0 0
+c
+d 729 3 1 0 0
+c
+d 743 2 0 0 0
+c
+d 753 7 0 0 0
+c
+d 727 4 2 0 0
+c
+d 948 3 0 0 0
+c
+d 428 4 1 0 0
+c
+d 599 4 1 0 0
+c
+d 606 1 0 0 0
+c
+d 119 1 0 0 0
+c
+d 120 2 1 0 0
+c
+d 263 1 0 1 0
+c
+d 264 4 0 0 0
+c
+d 283 1 1 0 0
+c
+d 413 1 0 1 0
+c
+d 418 1 1 0 0
+c
+d 419 3 0 0 0
+c
+d 420 1 0 0 0
+c
+d 44 1 1 0 0
+c
+d 1020 4 1 0 0
+c
+d 133 1 0 1 0
+c
+d 324 1 0 1 0
+c
+d 331 3 1 0 0
+c
+d 728 1 0 0 0
+c
+d 729 1 1 0 0
+c
+d 733 2 1 0 0
+c
+d 301 5 1 1 0
+c
+d 621 8 2 1 0
+c
+d 575 7 2 0 0
+c
+d 99 1 0 0 0
+c
+d 101 3 1 1 0
+c
+d 111 4 1 0 0
+c
+d 264 5 1 2 0
+c
+d 283 3 0 0 0
+c
+d 529 6 2 1 0
+c
+d 550 1 0 0 0
+c
+d 540 1 1 0 0
+c
+d 541 4 1 0 0
+c
+d 572 6 2 0 0
+c
+d 574 1 0 0 0
+c
+d 621 2 0 0 0
+c
+d 630 1 0 0 0
+c
+d 663 2 1 0 0
+c
+d 664 2 0 0 0
+c
+d 753 3 1 1 0
+c
+d 755 3 1 0 0
+c
+d 54 1 0 0 0
+c
+d 66 2 0 0 0
+c
+d 581 4 0 0 0
+c
+d 755 1 0 1 0
+c
+d 764 4 1 1 0
+c
+d 594 2 1 0 0
+c
+d 651 1 1 0 0
+c
+d 686 4 1 1 0
+c
+d 1042 1 0 0 0
+c
+d 301 3 0 0 0
+c
+d 311 1 0 1 0
+c
+d 315 1 1 0 0
+c
+d 199 3 0 0 0
+c
+d 200 2 1 0 0
+c
+d 18 1 0 0 0
+c
+d 1263 7 1 0 0
+c
+d 111 3 0 1 0
+c
+d 142 5 1 0 0
+c
+d 584 3 1 1 0
+c
+d 585 1 0 0 0
+c
+d 591 1 0 1 0
+c
+d 242 1 0 1 0
+c
+d 262 2 1 0 0
+c
+d 270 1 0 1 0
+c
+d 133 2 0 0 0
+c
+d 134 2 0 0 0
+c
+d 738 4 0 0 0
+c
+d 126 1 1 0 0
+c
+d 127 2 0 1 0
+c
+d 199 6 2 0 0
+c
+d 529 2 1 0 0
+c
+d 530 2 0 0 0
+c
+d 1061 1 0 1 0
+c
+d 93 3 1 1 0
+c
+d 130 1 0 1 0
+c
+d 568 1 0 0 0
+c
+d 569 2 1 0 0
+c
+d 1051 4 1 0 0
+c
+d 921 1 0 0 0
+c
+d 922 2 1 0 0
+c
+d 923 1 0 1 0
+c
+d 926 1 1 0 0
+c
+d 59 1 0 1 0
+c
+d 60 2 1 0 0
+c
+d 622 3 0 1 0
+c
+d 157 1 0 0 0
+c
+d 355 1 0 0 0
+c
+d 356 4 1 1 0
+c
+d 358 1 0 1 0
+c
+d 568 1 0 1 0
+c
+d 570 5 2 0 0
+c
+d 499 4 1 0 0
+c
+d 500 1 0 1 0
+c
+d 48 1 0 0 0
+c
+d 49 2 1 0 0
+c
+d 50 1 1 0 0
+c
+d 152 3 1 0 0
+c
+d 746 6 2 0 0
+c
+d 747 2 1 0 0
+c
+d 278 5 0 0 0
+c
+d 423 2 1 0 0
+c
+d 429 5 1 0 0
+c
+d 430 1 0 0 0
+c
+d 1016 5 1 0 0
+c
+d 1111 3 1 0 0
+c
+d 1112 2 1 0 0
+c
+d 54 1 0 0 0
+c
+d 60 1 0 1 0
+c
+d 1303 2 1 0 0
+c
+d 276 1 0 0 0
+c
+d 290 5 1 0 0
+c
+d 436 6 2 0 0
+c
+d 686 2 0 0 0
+c
+d 687 3 1 0 0
+c
+d 688 3 0 0 0
+c
+d 581 3 1 0 0
+c
+d 582 1 0 0 0
+c
+d 602 4 0 0 0
+c
+d 631 1 0 0 0
+c
+d 606 3 0 1 0
+c
+d 619 2 0 0 0
+c
+d 617 1 0 0 0
+c
+d 989 2 1 0 0
+c
+d 996 3 1 0 0
+c
+d 763 1 0 0 0
+c
+d 764 2 1 0 0
+c
+d 152 1 0 0 0
+c
+d 413 4 0 0 0
+c
+d 348 1 0 1 0
+c
+d 400 1 0 0 0
+c
+d 407 3 1 0 0
+c
+d 550 2 1 0 0
+c
+d 551 2 1 0 0
+c
+d 553 1 0 1 0
+c
+d 276 5 2 0 0
+c
+d 93 6 1 0 0
+c
+d 95 2 1 1 0
+c
+d 418 6 1 1 0
+c
+d 419 1 1 0 0
+c
+d 77 1 0 0 0
+c
+d 81 4 1 0 0
+c
+d 82 1 0 0 0
+c
+d 83 3 0 0 0
+c
+d 1163 4 1 0 0
+c
+d 1168 4 1 2 0
+c
+d 46 1 0 0 0
+c
+d 568 5 2 1 0
+c
+d 167 1 0 1 0
+c
+d 1105 4 1 0 0
+c
+d 606 4 1 0 0
+c
+d 618 2 0 0 0
+c
+d 965 1 0 0 0
+c
+d 75 3 1 0 0
+c
+d 278 2 0 0 0
+c
+d 1168 1 0 0 0
+c
+d 1008 1 0 0 0
+c
+d 1009 2 1 0 0
+c
+d 1012 1 0 0 0
+c
+d 157 5 0 1 0
+c
+d 746 4 0 0 0
+c
+d 752 1 1 0 0
+c
+d 753 1 0 1 0
+c
+d 767 1 1 0 0
+c
+d 768 3 1 0 0
+c
+d 889 1 0 1 0
+c
+d 283 4 1 0 0
+c
+d 284 2 1 0 0
+c
+d 743 6 0 0 0
+c
+d 1269 6 2 1 0
+c
+d 453 4 1 1 0
+c
+d 454 2 0 0 0
+c
+d 455 1 0 0 0
+c
+d 25 3 1 0 0
+c
+d 26 2 1 0 0
+c
+d 511 1 1 0 0
+c
+d 520 1 0 0 0
+c
+d 521 4 0 0 0
+c
+d 537 1 1 0 0
+c
+d 539 3 1 0 0
+c
+d 547 1 0 0 0
+c
+d 630 5 1 0 0
+c
+d 660 2 1 0 0
+c
+d 574 5 1 2 0
+c
+d 795 2 0 0 0
+c
+d 305 1 1 0 0
+c
+d 353 4 1 1 0
+c
+d 1008 3 1 1 0
+c
+d 1013 2 1 0 0
+c
+d 575 5 1 0 0
+c
+d 928 2 1 0 0
+c
+d 929 1 1 0 0
+c
+d 738 4 1 0 0
+c
+d 743 2 1 0 0
+c
+d 745 1 0 1 0
+c
+d 854 1 0 0 0
+c
+d 686 6 1 0 0
+c
+d 963 3 2 0 0
+c
+d 572 2 0 0 0
+c
+d 662 6 2 0 0
+c
+d 663 3 0 0 0
+c
+d 811 2 1 0 0
+c
+d 905 1 0 0 0
+c
+d 906 1 1 0 0
+c
+d 914 1 0 0 0
+c
+d 39 3 1 0 0
+c
+d 556 3 1 1 0
+c
+d 666 3 0 2 0
+c
+d 673 1 0 0 0
+c
+d 675 1 0 0 0
+c
+d 205 1 0 1 0
+c
+d 1239 5 1 0 0
+c
+d 1240 1 0 0 0
+c
+d 1241 1 1 0 0
+c
+d 523 3 0 0 0
+c
+d 525 3 1 1 0
+c
+d 159 1 0 0 0
+c
+d 178 1 1 0 0
+c
+d 183 1 1 0 0
+c
+d 752 1 1 0 0
+c
+d 753 4 1 0 0
+c
+d 749 4 1 0 0
+c
+d 617 3 1 0 0
+c
+d 989 2 1 0 0
+c
+d 996 1 0 0 0
+c
+d 757 1 0 1 0
+c
+d 763 2 1 0 0
+c
+d 767 2 0 1 0
+c
+d 436 1 0 0 0
+c
+d 1045 1 1 0 0
+c
+d 284 3 1 1 0
+c
+d 285 2 1 0 0
+c
+d 286 1 0 0 0
+c
+d 635 1 0 1 0
+c
+d 641 1 1 0 0
+c
+d 642 3 1 0 0
+c
+d 1184 2 1 0 0
+c
+d 1209 3 1 0 0
+c
+d 281 4 1 2 0
+c
+d 169 1 1 0 0
+c
+d 377 4 0 0 0
+c
+d 384 1 0 0 0
+c
+d 373 1 0 0 0
+c
+d 377 1 1 0 0
+c
+d 382 5 1 0 0
+c
+d 829 2 0 0 0
+c
+d 835 2 0 0 0
+c
+d 252 1 0 1 0
+c
+d 259 2 1 0 0
+c
+d 262 3 0 1 0
+c
+d 378 2 0 1 0
+c
+d 384 1 0 0 0
+c
+d 1111 2 1 0 0
+c
+d 44 6 1 1 0
+c
+d 1020 1 1 0 0
+c
+d 334 3 1 0 0
+c
+d 335 1 1 0 0
+c
+d 769 3 1 0 0
+c
+d 889 5 1 0 0
+c
+d 26 1 1 0 0
+c
+d 39 4 1 0 0
+c
+d 341 3 0 0 0
+c
+d 422 3 2 0 0
+c
+d 592 4 1 1 0
+c
+d 594 1 0 0 0
+c
+d 369 5 2 0 0
+c
+d 382 1 0 1 0
+c
+d 391 1 0 0 0
+c
+d 591 1 1 0 0
+c
+d 593 1 0 0 0
+c
+d 678 3 1 0 0
+c
+d 282 4 1 0 0
+c
+d 24 1 0 1 0
+c
+d 26 4 2 0 0
+c
+d 19 3 1 1 0
+c
+d 622 1 0 1 0
+c
+d 628 1 0 0 0
+c
+d 1008 1 0 0 0
+c
+d 507 3 0 0 0
+c
+d 1070 2 1 0 0
+c
+d 1071 1 1 0 0
+c
+d 478 1 0 0 0
+c
+d 483 4 2 0 0
+c
+d 488 1 0 0 0
+c
+d 691 1 1 0 0
+c
+d 699 4 1 0 0
+c
+d 716 1 0 0 0
+c
+d 21 3 0 1 0
+c
+d 1023 1 1 0 0
+c
+d 61 1 0 1 0
+c
+d 64 1 1 0 0
+c
+d 65 3 0 0 0
+c
+d 437 5 1 0 0
+c
+d 575 3 1 1 0
+c
+d 301 1 1 0 0
+c
+d 305 3 1 0 0
+c
+d 168 6 2 1 0
+c
+d 369 1 0 0 0
+c
+d 47 1 0 0 0
+c
+d 48 4 2 0 0
+c
+d 49 3 0 0 0
+c
+d 287 1 0 1 0
+c
+d 288 4 1 0 0
+c
+d 411 3 1 0 0
+c
+d 419 1 0 1 0
+c
+d 422 3 1 0 0
+c
+d 262 1 1 0 0
+c
+d 264 3 1 0 0
+c
+d 286 2 0 0 0
+c
+d 152 4 2 0 0
+c
+d 423 4 0 0 0
+c
+d 427 1 0 1 0
+c
+d 1078 1 1 0 0
+c
+d 120 1 1 0 0
+c
+d 125 5 1 0 0
+c
+d 294 1 0 0 0
+c
+d 298 2 0 0 0
+c
+d 437 4 1 0 0
+c
+d 497 1 1 0 0
+c
+d 108 7 2 0 0
+c
+d 111 1 0 0 0
+c
+d 509 3 0 0 0
+c
+d 515 3 0 1 0
+c
+d 517 1 0 0 0
+c
+d 444 1 0 0 0
+c
+d 445 4 1 0 0
+c
+d 447 3 2 0 0
+c
+d 70 5 2 0 0
+c
+d 650 1 0 0 0
+c
+d 480 1 0 0 0
+c
+d 481 3 0 0 0
+c
+d 484 4 1 0 0
+c
+d 101 4 1 0 0
+c
+d 532 4 2 0 0
+c
+d 273 4 1 0 0
+c
+d 274 2 0 1 0
+c
+d 618 6 2 0 0
+c
+d 620 2 1 1 0
+c
+d 430 1 0 0 0
+c
+d 436 4 0 0 0
+c
+d 1185 1 0 1 0
+c
+d 1201 4 2 0 0
+c
+d 1202 1 0 0 0
+c
+d 217 1 0 1 0
+c
+d 241 2 1 0 0
+c
+d 242 1 1 0 0
+c
+d 262 5 1 2 0
+c
+d 196 4 1 0 0
+c
+d 199 3 1 0 0
+c
+d 797 2 0 1 0
+c
+d 927 3 1 0 0
+c
+d 208 1 1 0 0
+c
+d 211 2 0 1 0
+c
+d 301 4 2 0 0
+c
+d 54 1 0 0 0
+c
+d 55 7 2 0 0
+c
+d 66 1 1 0 0
+c
+d 716 1 0 0 0
+c
+d 718 6 2 0 0
+c
+d 55 5 1 0 0
+c
+d 694 1 1 0 0
+c
+d 836 4 1 1 0
+c
+d 838 1 0 1 0
+c
+d 315 3 0 1 0
+c
+d 316 1 1 0 0
+c
+d 437 1 0 0 0
+c
+d 457 3 1 0 0
+c
+d 458 1 0 0 0
+c
+d 437 2 0 1 0
+c
+d 443 2 1 0 0
+c
+d 444 2 1 0 0
+c
+d 475 3 0 0 0
+c
+d 476 4 2 0 0
+c
+d 551 1 0 1 0
+c
+d 775 4 2 0 0
+c
+d 780 2 0 0 0
+c
+d 691 1 0 0 0
+c
+d 699 2 0 0 0
+c
+d 715 3 1 1 0
+c
+d 807 2 1 0 0
+c
+d 823 3 1 0 0
+c
+d 156 3 1 0 0
+c
+d 164 1 1 0 0
+c
+d 165 1 0 0 0
+c
+d 745 4 1 0 0
+c
+d 746 1 1 0 0
+c
+d 748 1 1 0 0
+c
+d 757 1 1 0 0
+c
+d 758 2 0 1 0
+c
+d 733 1 1 0 0
+c
+d 735 1 0 1 0
+c
+d 551 6 1 0 0
+c
+d 738 1 0 0 0
+c
+d 743 3 0 0 0
+c
+d 26 5 1 1 0
+c
+d 27 1 0 0 0
+c
+d 1275 5 1 0 0
+c
+d 1276 1 0 1 0
+c
+d 424 2 0 1 0
+c
+d 1079 4 2 0 0
+c
+d 56 1 0 0 0
+c
+d 59 1 0 1 0
+c
+d 60 2 1 0 0
+c
+d 1306 1 0 0 0
+c
+d 120 3 1 1 0
+c
+d 126 1 0 0 0
+c
+d 127 1 0 0 0
+c
+d 89 1 1 0 0
+c
+d 120 1 0 0 0
+c
+d 811 4 1 2 0
+c
+d 812 4 1 0 0
+c
+d 820 1 0 0 0
+c
+d 822 3 2 0 0
+c
+d 437 6 2 0 0
+c
+d 568 1 0 1 0
+c
+d 482 8 1 0 0
+c
+d 488 1 0 1 0
+c
+d 507 1 0 0 0
+c
+d 508 5 1 0 0
+c
+d 509 2 1 0 0
+c
+d 400 1 1 0 0
+c
+d 407 1 0 0 0
+c
+d 408 4 1 0 0
+c
+d 1009 4 2 0 0
+c
+d 1012 2 0 0 0
+c
+d 1030 2 0 0 0
+c
+d 695 3 0 0 0
+c
+d 696 1 0 0 0
+c
+d 697 1 0 0 0
+c
+d 954 1 0 0 0
+c
+d 195 5 1 2 0
+c
+d 842 9 3 0 0
+c
+d 850 1 0 0 0
+c
+d 301 2 1 0 0
+c
+d 1161 2 0 0 0
+c
+d 1162 2 1 0 0
+c
+d 288 4 0 0 0
+c
+d 291 1 0 0 0
+c
+d 400 5 2 1 0
+c
+d 437 7 3 0 0
+c
+d 599 7 2 0 0
+c
+d 606 1 0 0 0
+c
+d 437 2 0 0 0
+c
+d 463 2 1 0 0
+c
+d 795 3 2 0 0
+c
+d 796 2 1 0 0
+c
+d 815 2 0 0 0
+c
+d 704 3 0 1 0
+c
+d 705 1 1 0 0
+c
+d 54 6 2 0 0
+c
+d 55 1 0 0 0
+c
+d 359 3 0 0 0
+c
+d 361 1 0 0 0
+c
+d 507 1 0 0 0
+c
+d 1070 1 1 0 0
+c
+d 1076 3 0 0 0
+c
+d 651 3 1 0 0
+c
+d 690 1 0 0 0
+c
+d 108 1 0 0 0
+c
+d 111 3 1 0 0
+c
+d 146 1 0 1 0
+c
+d 787 1 1 0 0
+c
+d 789 2 0 0 0
+c
+d 790 2 1 0 0
+c
+d 730 1 1 0 0
+c
+d 733 3 1 1 0
+c
+d 608 1 0 1 0
+c
+d 618 5 1 0 0
+c
+d 91 2 0 1 0
+c
+d 93 3 1 1 0
+c
+d 510 1 0 1 0
+c
+d 511 2 0 0 0
+c
+d 522 2 1 0 0
+c
+d 789 3 1 0 0
+c
+d 790 1 1 0 0
+c
+d 121 1 0 0 0
+c
+d 124 3 1 0 0
+c
+d 413 3 1 1 0
+c
+d 419 3 2 0 0
+c
+d 55 3 1 0 0
+c
+d 70 1 0 0 0
+c
+d 690 4 2 0 0
+c
+d 437 3 2 0 0
+c
+d 493 3 0 0 0
+c
+d 842 1 1 0 0
+c
+d 881 3 1 0 0
+c
+d 511 6 3 0 0
+c
+d 634 1 1 0 0
+c
+d 635 2 1 0 0
+c
+d 641 2 0 0 0
+c
+d 1195 3 1 1 0
+c
+d 1196 1 0 0 0
+c
+d 511 3 0 1 0
+c
+d 522 1 1 0 0
+c
+d 528 1 0 0 0
+c
+d 471 5 2 0 0
+c
+d 473 2 0 0 0
+c
+d 570 2 1 0 0
+c
+d 791 3 1 0 0
+c
+d 148 4 2 0 0
+c
+d 239 3 0 0 0
+c
+d 341 1 0 0 0
+c
+d 437 6 2 0 0
+c
+d 799 3 2 0 0
+c
+d 919 2 0 0 0
+c
+d 301 7 2 0 0
+c
+d 1212 1 0 0 0
+c
+d 48 1 0 1 0
+c
+d 49 2 1 0 0
+c
+d 59 3 1 0 0
+c
+d 60 1 0 1 0
+c
+d 604 2 1 0 0
+c
+d 605 1 1 0 0
+c
+d 242 1 1 0 0
+c
+d 246 5 1 0 0
+c
+d 1111 1 0 0 0
+c
+d 1113 1 0 0 0
+c
+d 301 5 2 0 0
+c
+d 304 1 1 0 0
+c
+d 1185 1 0 1 0
+c
+d 1191 3 1 0 0
+c
+d 575 1 0 0 0
+c
+d 931 2 1 0 0
+c
+d 932 3 2 0 0
+c
+d 791 3 1 0 0
+c
+d 793 1 0 1 0
+c
+d 829 3 1 0 0
+c
+d 144 1 0 0 0
+c
+d 145 4 1 0 0
+c
+d 146 2 1 0 0
+c
+d 511 3 1 1 0
+c
+d 276 6 2 0 0
+c
+d 301 5 2 1 0
+c
+d 304 1 1 0 0
+c
+d 145 1 0 0 0
+c
+d 146 5 2 0 0
+c
+d 48 1 1 0 0
+c
+d 49 5 2 0 0
+c
+d 50 1 0 0 0
+c
+d 413 2 1 0 0
+c
+d 419 3 1 0 0
+c
+d 697 4 1 0 0
+c
+d 698 1 0 0 0
+c
+d 716 1 0 0 0
+c
+d 791 1 1 0 0
+c
+d 829 6 2 0 0
+c
+d 691 7 2 0 0
+c
+d 801 1 0 0 0
+c
+d 802 1 0 0 0
+c
+d 799 1 0 0 0
+c
+d 915 2 0 0 0
+c
+d 935 4 1 0 0
+c
+d 575 1 1 0 0
+c
+d 577 2 0 0 0
+c
+d 578 1 0 1 0
+c
+d 69 3 1 0 0
+c
+d 649 1 1 0 0
+c
+d 186 4 0 0 0
+c
+d 213 2 0 0 0
+c
+d 18 6 2 0 0
+c
+d 30 1 0 0 0
+c
+d 608 1 0 1 0
+c
+d 615 5 1 0 0
+c
+d 46 3 1 0 0
+c
+d 689 5 2 0 0
+c
+d 200 5 1 0 0
+c
+d 202 1 0 0 0
+c
+d 1194 2 0 1 0
+c
+d 1205 1 0 1 0
+c
+d 1013 2 1 0 0
+c
+d 1014 1 0 0 0
+c
+d 1015 3 1 0 0
+c
+d 437 1 0 1 0
+c
+d 468 1 0 0 0
+c
+d 471 2 1 0 0
+c
+d 473 4 1 0 0
+c
+d 75 1 0 0 0
+c
+d 79 3 1 0 0
+c
+d 80 1 1 0 0
+c
+d 81 4 1 0 0
+c
+d 55 2 0 0 0
+c
+d 889 2 0 1 0
+c
+d 890 3 1 1 0
+c
+d 891 1 0 0 0
+c
+d 176 4 1 0 0
+c
+d 177 5 1 0 0
+c
+d 795 1 0 1 0
+c
+d 820 4 1 0 0
+c
+d 821 1 0 0 0
+c
+d 19 2 2 0 0
+c
+d 1022 1 0 0 0
+c
+d 1023 2 0 1 0
+c
+d 572 7 1 1 0
+c
+d 1054 1 1 0 0
+c
+d 634 2 1 0 0
+c
+d 635 4 2 0 0
+c
+d 638 1 0 0 0
+c
+d 622 1 0 0 0
+c
+d 965 2 0 0 0
+c
+d 968 3 1 0 0
+c
+d 970 1 1 0 0
+c
+d 763 4 1 1 0
+c
+d 69 7 2 0 0
+c
+d 71 1 0 0 0
+c
+d 419 2 0 1 0
+c
+d 423 4 1 0 0
+c
+d 663 4 1 0 0
+c
+d 665 4 0 0 0
+c
+d 680 2 1 0 0
+c
+d 529 1 0 1 0
+c
+d 1292 4 1 1 0
+c
+d 970 5 1 0 0
+c
+d 971 1 1 0 0
+c
+d 972 1 0 1 0
+c
+d 534 1 0 0 0
+c
+d 540 2 1 0 0
+c
+d 791 3 1 0 0
+c
+d 795 1 0 0 0
+c
+d 825 2 1 0 0
+c
+d 21 3 2 0 0
+c
+d 1024 1 0 1 0
+c
+d 1025 1 0 0 0
+c
+d 735 1 0 0 0
+c
+d 737 2 1 0 0
+c
+d 854 1 0 1 0
+c
+d 46 3 0 1 0
+c
+d 73 4 2 0 0
+c
+d 507 2 1 0 0
+c
+d 514 2 0 0 0
+c
+d 341 1 0 0 0
+c
+d 344 5 2 0 0
+c
+d 346 1 0 0 0
+c
+d 278 1 0 0 0
+c
+d 1170 3 2 0 0
+c
+d 1185 1 0 1 0
+c
+d 184 1 0 0 0
+c
+d 196 3 0 0 0
+c
+d 200 1 0 0 0
+c
+d 18 5 1 0 0
+c
+d 989 1 0 0 0
+c
+d 146 6 2 1 0
+c
+d 719 4 1 1 0
+c
+d 720 1 0 0 0
+c
+d 572 8 3 0 0
+c
+d 337 2 1 0 0
+c
+d 338 2 1 0 0
+c
+d 340 3 0 0 0
+c
+d 606 7 2 0 0
+c
+d 876 3 2 0 0
+c
+d 878 1 0 0 0
+c
+d 309 3 0 1 0
+c
+d 311 2 0 0 0
+c
+d 327 1 0 0 0
+c
+d 584 3 1 0 0
+c
+d 586 1 0 0 0
+c
+d 19 5 2 0 0
+c
+d 132 1 0 1 0
+c
+d 499 1 0 0 0
+c
+d 511 2 0 0 0
+c
+d 767 4 2 0 0
+c
+d 876 1 0 1 0
+c
+d 888 1 0 0 0
+c
+d 915 1 1 0 0
+c
+d 919 4 1 0 0
+c
+d 54 6 3 0 0
+c
+d 950 1 0 0 0
+c
+d 323 4 0 0 0
+c
+d 689 5 2 0 0
+c
+d 989 6 2 0 0
+c
+d 995 1 0 1 0
+c
+d 176 5 1 0 0
+c
+d 177 1 1 0 0
+c
+d 18 2 1 1 0
+c
+d 990 2 0 0 0
+c
+d 534 4 0 1 0
+c
+d 536 1 0 0 0
+c
+d 540 1 0 1 0
+c
+d 180 1 1 0 0
+c
+d 194 4 1 0 0
+c
+d 66 4 1 0 0
+c
+d 68 1 1 0 0
+c
+d 69 1 0 0 0
+c
+d 965 5 1 0 0
+c
+d 976 1 1 0 0
+c
+d 46 2 1 1 0
+c
+d 775 4 1 0 0
+c
+d 686 1 0 0 0
+c
+d 691 3 0 1 0
+c
+d 692 2 1 0 0
+c
+d 693 1 1 0 0
+c
+d 157 5 1 1 0
+c
+d 246 4 0 0 0
+c
+d 248 1 0 0 0
+c
+d 250 1 0 1 0
+c
+d 251 1 1 0 0
+c
+d 1087 5 0 0 0
+c
+d 211 6 2 0 0
+c
+d 1244 1 0 0 0
+c
+d 101 3 1 1 0
+c
+d 102 1 0 0 0
+c
+d 103 1 0 0 0
+c
+d 157 4 2 0 0
+c
+d 355 1 0 1 0
+c
+d 1142 1 1 0 0
+c
+d 334 3 1 0 0
+c
+d 4 1 0 1 0
+c
+d 5 4 1 1 0
+c
+d 305 2 1 0 0
+c
+d 1142 5 2 0 0
+c
+d 264 4 1 1 0
+c
+d 310 1 0 0 0
+c
+d 311 1 0 0 0
+c
+d 418 5 0 2 0
+c
+d 458 5 1 1 0
+c
+d 16 5 1 0 0
+c
+d 17 2 1 0 0
+c
+d 93 1 0 1 0
+c
+d 436 2 0 0 0
+c
+d 437 2 0 0 0
+c
+d 843 1 0 0 0
+c
+d 844 3 1 0 0
+c
+d 897 1 1 0 0
+c
+d 54 5 2 0 0
+c
+d 719 1 0 0 0
+c
+d 217 3 1 0 0
+c
+d 218 1 0 1 0
+c
+d 241 1 0 1 0
+c
+d 889 4 1 0 0
+c
+d 891 1 1 0 0
+c
+d 769 5 1 0 0
+c
+d 49 4 1 2 0
+c
+d 618 1 1 0 0
+c
+d 965 3 1 0 0
+c
+d 973 1 0 0 0
+c
+d 1270 4 0 0 0
+c
+d 1 4 2 0 0
+c
+d 610 4 1 1 0
+c
+d 536 3 1 1 0
+c
+d 405 4 0 0 0
+c
+d 411 2 1 1 0
+c
+d 826 7 2 0 0
+c
+d 564 1 0 1 0
+c
+d 565 7 2 0 0
+c
+d 18 3 1 0 0
+c
+d 84 1 0 0 0
+c
+d 858 6 3 0 0
+c
+d 872 1 0 0 0
+c
+d 634 1 0 0 0
+c
+d 641 1 0 0 0
+c
+d 642 4 2 0 0
+c
+d 643 3 0 0 0
+c
+d 606 2 0 1 0
+c
+d 635 5 1 0 0
+c
+d 21 1 0 1 0
+c
+d 26 6 1 0 0
+c
+d 39 1 0 0 0
+c
+d 842 1 0 0 0
+c
+d 848 2 1 0 0
+c
+d 650 3 1 0 0
+c
+d 655 1 0 0 0
+c
+d 656 3 1 0 0
+c
+d 623 1 0 0 0
+c
+d 626 5 2 0 0
+c
+d 262 1 0 0 0
+c
+d 278 4 1 0 0
+c
+d 19 5 2 0 0
+c
+d 861 4 0 1 0
+c
+d 871 1 0 0 0
+c
+d 475 4 1 0 0
+c
+d 476 2 0 1 0
+c
+d 855 7 3 1 0
+c
+d 856 1 0 0 0
+c
+d 146 1 1 0 0
+c
+d 153 2 0 0 0
+c
+d 228 5 1 0 0
+c
+d 274 2 1 0 0
+c
+d 275 4 1 0 0
+c
+d 965 5 1 1 0
+c
+d 763 2 1 0 0
+c
+d 942 3 1 0 0
+c
+d 120 1 1 0 0
+c
+d 121 1 0 1 0
+c
+d 123 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 463 6 2 1 0
+c
+d 753 1 0 0 0
+c
+d 755 2 0 1 0
+c
+d 764 1 0 1 0
+c
+d 418 3 1 1 0
+c
+d 419 1 0 0 0
+c
+d 435 1 1 0 0
+c
+d 194 5 1 0 0
+c
+d 1235 6 2 0 0
+c
+d 437 1 1 0 0
+c
+d 458 2 0 1 0
+c
+d 591 3 2 0 0
+c
+d 596 1 0 0 0
+c
+d 686 3 0 0 0
+c
+d 21 4 2 0 0
+c
+d 46 4 1 0 0
+c
+d 594 1 0 0 0
+c
+d 650 1 0 0 0
+c
+d 651 3 1 0 0
+c
+d 652 3 1 0 0
+c
+d 661 2 1 0 0
+c
+d 662 2 1 0 0
+c
+d 666 4 1 0 0
+c
+d 1156 5 2 1 0
+c
+d 1192 2 0 1 0
+c
+d 551 3 1 0 0
+c
+d 286 2 1 0 0
+c
+d 294 1 0 0 0
+c
+d 298 1 0 0 0
+c
+d 565 1 0 1 0
+c
+d 789 3 1 0 0
+c
+d 1185 1 1 0 0
+c
+d 1188 6 1 1 0
+c
+d 551 1 1 0 0
+c
+d 554 3 1 0 0
+c
+d 555 1 0 0 0
+c
+d 378 7 3 0 0
+c
+d 353 5 0 0 0
+c
+d 737 1 0 0 0
+c
+d 854 3 1 1 0
+c
+d 855 1 0 0 0
+c
+d 856 1 0 0 0
+c
+d 327 4 2 0 0
+c
+d 349 2 0 0 0
+c
+d 350 1 0 0 0
+c
+d 493 5 0 0 0
+c
+d 494 1 0 0 0
+c
+d 552 3 1 1 0
+c
+d 146 1 0 0 0
+c
+d 285 1 0 0 0
+c
+d 286 2 1 0 0
+c
+d 292 1 0 0 0
+c
+d 21 2 1 0 0
+c
+d 1027 4 1 0 0
+c
+d 572 1 0 0 0
+c
+d 573 4 1 0 0
+c
+d 353 5 0 0 0
+c
+d 704 4 1 0 0
+c
+d 705 3 0 0 0
+c
+d 591 5 1 0 0
+c
+d 167 5 1 1 0
+c
+d 599 4 2 0 0
+c
+d 926 3 0 2 0
+c
+d 927 1 0 0 0
+c
+d 532 2 1 1 0
+c
+d 534 1 0 0 0
+c
+d 537 1 0 0 0
+c
+d 54 7 1 1 0
+c
+d 1312 1 0 1 0
+c
+d 111 1 0 0 0
+c
+d 146 2 0 1 0
+c
+d 153 1 1 0 0
+c
+d 228 4 1 0 0
+c
+d 101 3 1 1 0
+c
+d 610 1 0 0 0
+c
+d 660 3 0 0 0
+c
+d 662 1 0 1 0
+c
+d 663 3 1 1 0
+c
+d 749 2 0 1 0
+c
+d 751 2 1 0 0
+c
+d 167 6 2 0 0
+c
+d 218 5 0 0 0
+c
+d 219 1 0 0 0
+c
+d 353 1 0 0 0
+c
+d 355 4 0 0 0
+c
+d 77 2 1 0 0
+c
+d 1296 3 0 0 0
+c
+d 1297 2 0 0 0
+c
+d 5 1 0 0 0
+c
+d 7 1 1 0 0
+c
+d 9 1 0 0 0
+c
+d 656 4 1 0 0
+c
+d 657 1 0 0 0
+c
+d 276 1 0 0 0
+c
+d 277 2 0 0 0
+c
+d 301 3 1 1 0
+c
+d 60 1 0 0 0
+c
+d 647 4 1 0 0
+c
+d 964 3 1 0 0
+c
+d 602 4 1 2 0
+c
+d 653 10 2 0 0
+c
+d 511 6 2 0 0
+c
+d 513 1 0 0 0
+c
+d 835 1 0 0 0
+c
+d 900 6 1 0 0
+c
+d 529 2 1 0 0
+c
+d 532 2 1 0 0
+c
+d 537 1 1 0 0
+c
+d 550 1 0 0 0
+c
+d 262 1 0 1 0
+c
+d 263 3 1 0 0
+c
+d 264 2 1 0 0
+c
+d 157 2 0 0 0
+c
+d 75 3 1 0 0
+c
+d 84 1 1 0 0
+c
+d 272 3 0 1 0
+c
+d 584 4 0 0 0
+c
+d 591 2 1 0 0
+c
+d 596 1 0 0 0
+c
+d 1173 3 0 0 0
+c
+d 1174 1 1 0 0
+c
+d 1185 1 0 0 0
+c
+d 565 5 1 2 0
+c
+d 791 1 0 0 0
+c
+d 737 2 1 0 0
+c
+d 846 3 1 0 0
+c
+d 21 3 1 0 0
+c
+d 22 3 2 0 0
+c
+d 591 8 3 0 0
+c
+d 59 6 1 1 0
+c
+d 86 1 1 0 0
+c
+d 87 3 1 0 0
+c
+d 167 6 1 1 0
+c
+d 965 1 1 0 0
+c
+d 966 2 1 0 0
+c
+d 967 4 1 0 0
+c
+d 354 6 2 0 0
+c
+d 686 1 1 0 0
+c
+d 701 5 1 0 0
+c
+d 712 2 0 1 0
+c
+d 384 4 1 0 0
+c
+d 394 2 1 0 0
+c
+d 1109 1 0 1 0
+c
+d 246 2 0 0 0
+c
+d 262 3 1 0 0
+c
+d 293 1 0 0 0
+c
+d 19 1 0 1 0
+c
+d 629 1 0 1 0
+c
+d 167 7 1 0 0
+c
+d 21 2 0 0 0
+c
+d 23 5 2 0 0
+c
+d 327 5 1 0 0
+c
+d 352 1 0 0 0
+c
+d 353 2 0 0 0
+c
+d 610 2 0 0 0
+c
+d 1173 1 0 1 0
+c
+d 1174 3 1 1 0
+c
+d 46 1 0 0 0
+c
+d 47 3 0 0 0
+c
+d 48 1 1 0 0
+c
+d 280 3 1 0 0
+c
+d 281 3 1 1 0
+c
+d 211 8 1 0 0
+c
+d 213 1 0 1 0
+c
+d 437 1 0 1 0
+c
+d 507 7 1 0 0
+c
+d 368 1 0 0 0
+c
+d 369 4 2 0 0
+c
+d 1126 1 0 0 0
+c
+d 211 6 2 1 0
+c
+d 882 1 0 0 0
+c
+d 888 3 2 0 0
+c
+d 423 1 0 0 0
+c
+d 427 2 1 0 0
+c
+d 428 1 0 1 0
+c
+d 19 6 1 0 0
+c
+d 21 1 0 0 0
+c
+d 22 1 1 0 0
+c
+d 23 1 0 1 0
+c
+d 826 1 0 0 0
+c
+d 827 5 2 0 0
+c
+d 828 2 0 0 0
+c
+d 829 1 1 0 0
+c
+d 437 2 1 0 0
+c
+d 449 4 1 0 0
+c
+d 650 1 0 0 0
+c
+d 656 3 1 0 0
+c
+d 657 1 1 0 0
+c
+d 437 5 1 0 0
+c
+d 507 1 0 0 0
+c
+d 608 1 0 0 0
+c
+d 618 3 1 0 0
+c
+d 985 2 1 0 0
+c
+d 987 1 0 0 0
+c
+d 988 1 0 0 0
+c
+d 638 4 1 0 0
+c
+d 639 1 0 0 0
+c
+d 789 5 2 1 0
+c
+d 660 3 2 0 0
+c
+d 661 3 1 1 0
+c
+d 662 1 0 0 0
+c
+d 839 1 0 0 0
+c
+d 842 2 0 0 0
+c
+d 1174 1 0 1 0
+c
+d 1185 4 1 1 0
+c
+d 1201 1 1 0 0
+c
+d 428 1 0 1 0
+c
+d 436 3 1 0 0
+c
+d 437 1 0 0 0
+c
+d 60 1 1 0 0
+c
+d 72 1 0 0 0
+c
+d 622 1 0 0 0
+c
+d 1007 4 0 0 0
+c
+d 507 7 2 0 0
+c
+d 301 7 3 1 0
+c
+d 259 1 0 0 0
+c
+d 261 4 2 0 0
+c
+d 479 7 2 1 0
+c
+d 480 1 0 0 0
+c
+d 19 1 1 0 0
+c
+d 983 1 0 0 0
+c
+d 989 3 1 1 0
+c
+d 836 7 2 1 0
+c
+d 1153 2 0 0 0
+c
+d 50 2 1 0 0
+c
+d 51 1 0 1 0
+c
+d 734 2 0 1 0
+c
+d 556 5 2 0 0
+c
+d 564 1 0 0 0
+c
+d 143 3 1 0 0
+c
+d 144 4 2 0 0
+c
+d 145 1 0 1 0
+c
+d 65 6 2 0 0
+c
+d 1303 2 0 0 0
+c
+d 1304 1 0 0 0
+c
+d 111 1 1 0 0
+c
+d 146 2 0 0 0
+c
+d 844 7 2 0 0
+c
+d 334 4 2 0 0
+c
+d 146 3 2 0 0
+c
+d 1224 1 0 0 0
+c
+d 34 3 1 0 0
+c
+d 204 3 1 0 0
+c
+d 205 2 1 0 0
+c
+d 1241 1 0 1 0
+c
+d 682 1 0 0 0
+c
+d 683 2 0 0 0
+c
+d 684 1 0 0 0
+c
+d 799 2 1 0 0
+c
+d 800 3 1 0 0
+c
+d 801 1 0 0 0
+c
+d 1170 1 0 0 0
+c
+d 1185 5 2 1 0
+c
+d 1023 3 1 1 0
+c
+d 1024 1 1 0 0
+c
+d 75 1 0 0 0
+c
+d 86 2 1 0 0
+c
+d 87 1 0 1 0
+c
+d 854 4 1 0 0
+c
+d 868 2 1 0 0
+c
+d 55 4 1 0 0
+c
+d 691 2 1 0 0
+c
+d 706 1 0 1 0
+c
+d 707 3 1 0 0
+c
+d 159 3 1 1 0
+c
+d 160 1 0 0 0
+c
+d 185 2 0 0 0
+c
+d 317 1 0 1 0
+c
+d 318 6 1 1 0
+c
+d 509 5 2 0 0
+c
+d 510 1 0 1 0
+c
+d 517 1 0 0 0
+c
+d 592 7 0 0 0
+c
+d 55 5 1 1 0
+c
+d 31 1 0 0 0
+c
+d 32 4 0 0 0
+c
+d 117 4 0 0 0
+c
+d 157 3 1 1 0
+c
+d 364 1 0 0 0
+c
+d 1192 3 1 1 0
+c
+d 1206 2 0 1 0
+c
+d 183 2 0 0 0
+c
+d 193 3 2 0 0
+c
+d 195 1 0 1 0
+c
+d 594 3 0 0 0
+c
+d 653 3 1 0 0
+c
+d 18 1 0 0 0
+c
+d 93 5 0 0 0
+c
+d 323 7 1 2 0
+c
+d 686 8 2 0 0
+c
+d 211 5 1 0 0
+c
+d 1231 1 1 0 0
+c
+d 18 1 1 0 0
+c
+d 95 2 0 1 0
+c
+d 998 1 0 0 0
+c
+d 311 5 1 0 0
+c
+d 327 2 1 1 0
+c
+d 974 5 1 0 0
+c
+d 975 1 0 1 0
+c
+d 610 6 3 0 0
+c
+d 1004 1 0 0 0
+c
+d 719 7 3 0 0
+c
+d 723 1 0 1 0
+c
+d 949 1 0 0 0
+c
+d 51 1 0 0 0
+c
+d 56 1 0 1 0
+c
+d 1309 6 3 0 0
+c
+d 1113 1 0 0 0
+c
+d 1115 1 0 0 0
+c
+d 1116 2 1 0 0
+c
+d 87 1 0 0 0
+c
+d 89 2 1 0 0
+c
+d 1016 2 0 0 0
+c
+d 1017 4 0 1 0
+c
+d 50 4 1 1 0
+c
+d 734 1 0 0 0
+c
+d 285 3 1 0 0
+c
+d 286 2 1 0 0
+c
+d 525 1 0 1 0
+c
+d 545 5 1 0 0
+c
+d 98 1 0 1 0
+c
+d 99 4 0 0 0
+c
+d 1003 1 0 0 0
+c
+d 959 4 1 0 0
+c
+d 960 3 1 0 0
+c
+d 961 1 0 0 0
+c
+d 259 2 1 0 0
+c
+d 262 2 1 0 0
+c
+d 264 4 1 0 0
+c
+d 393 3 2 0 0
+c
+d 395 1 0 0 0
+c
+d 399 1 0 0 0
+c
+d 734 2 1 0 0
+c
+d 939 7 1 0 0
+c
+d 324 1 0 0 0
+c
+d 331 3 0 0 0
+c
+d 592 2 0 0 0
+c
+d 594 4 1 1 0
+c
+d 959 1 0 0 0
+c
+d 608 1 0 0 0
+c
+d 614 4 1 0 0
+c
+d 615 1 0 0 0
+c
+d 749 2 0 1 0
+c
+d 894 7 2 0 0
+c
+d 384 3 1 0 0
+c
+d 387 1 0 0 0
+c
+d 578 4 1 0 0
+c
+d 579 2 0 0 0
+c
+d 211 5 1 1 0
+c
+d 215 3 0 0 0
+c
+d 591 4 0 0 0
+c
+d 602 3 2 0 0
+c
+d 965 2 1 0 0
+c
+d 976 1 0 1 0
+c
+d 982 5 1 0 0
+c
+d 785 1 0 0 0
+c
+d 786 2 0 0 0
+c
+d 575 7 2 0 0
+c
+d 54 1 0 0 0
+c
+d 697 3 1 0 0
+c
+d 954 4 1 0 0
+c
+d 787 1 0 0 0
+c
+d 788 1 1 0 0
+c
+d 789 1 1 0 0
+c
+d 790 3 0 0 0
+c
+d 48 6 2 0 0
+c
+d 734 1 0 1 0
+c
+d 939 1 0 0 0
+c
+d 424 4 1 0 0
+c
+d 591 1 0 1 0
+c
+d 93 1 0 0 0
+c
+d 96 8 2 0 0
+c
+d 48 3 1 0 0
+c
+d 49 3 0 0 0
+c
+d 59 1 0 0 0
+c
+d 455 4 2 0 0
+c
+d 457 2 0 1 0
+c
+d 146 3 0 1 0
+c
+d 151 1 1 0 0
+c
+d 1098 1 0 0 0
+c
+d 602 1 0 0 0
+c
+d 662 1 0 0 0
+c
+d 682 1 1 0 0
+c
+d 647 2 0 0 0
+c
+d 649 1 1 0 0
+c
+d 655 2 1 0 0
+c
+d 658 2 0 0 0
+c
+d 659 3 0 0 0
+c
+d 523 6 2 2 0
+c
+d 527 1 0 0 0
+c
+d 178 1 1 0 0
+c
+d 181 2 1 0 0
+c
+d 193 4 1 0 0
+c
+d 602 3 0 0 0
+c
+d 681 4 1 1 0
+c
+d 353 2 1 0 0
+c
+d 355 4 1 0 0
+c
+d 787 6 1 1 0
+c
+d 882 1 0 1 0
+c
+d 861 4 0 0 0
+c
+d 868 1 0 1 0
+c
+d 869 3 1 0 0
+c
+d 84 1 0 0 0
+c
+d 1288 4 1 0 0
+c
+d 89 1 0 0 0
+c
+d 532 4 1 0 0
+c
+d 548 3 1 0 0
+c
+d 146 3 1 0 0
+c
+d 148 2 0 0 0
+c
+d 12 3 1 0 0
+c
+d 1266 2 0 0 0
+c
+d 157 5 2 0 0
+c
+d 159 1 0 0 0
+c
+d 305 1 0 0 0
+c
+d 836 5 0 0 0
+c
+d 838 1 1 0 0
+c
+d 284 3 1 0 0
+c
+d 285 2 0 1 0
+c
+d 378 1 1 0 0
+c
+d 1111 2 1 0 0
+c
+d 1112 1 0 0 0
+c
+d 334 1 0 0 0
+c
+d 341 4 1 0 0
+c
+d 564 4 1 1 0
+c
+d 1185 1 1 0 0
+c
+d 1202 8 0 1 0
+c
+d 689 1 0 0 0
+c
+d 704 2 1 0 0
+c
+d 705 3 1 0 0
+c
+d 753 3 0 0 0
+c
+d 755 1 1 0 0
+c
+d 384 3 1 0 0
+c
+d 394 1 1 0 0
+c
+d 101 4 1 0 0
+c
+d 107 4 1 0 0
+c
+d 829 1 1 0 0
+c
+d 835 4 1 0 0
+c
+d 836 1 0 0 0
+c
+d 211 7 2 0 0
+c
+d 647 1 0 0 0
+c
+d 659 1 1 0 0
+c
+d 660 6 1 0 0
+c
+d 101 1 0 0 0
+c
+d 597 3 1 0 0
+c
+d 608 1 1 0 0
+c
+d 69 3 1 0 0
+c
+d 650 2 1 0 0
+c
+d 655 1 0 0 0
+c
+d 195 5 3 0 0
+c
+d 206 1 0 0 0
+c
+d 1111 1 0 0 0
+c
+d 1113 1 0 0 0
+c
+d 608 3 1 0 0
+c
+d 614 3 0 0 0
+c
+d 615 1 1 0 0
+c
+d 274 1 0 0 0
+c
+d 275 3 1 0 0
+c
+d 797 4 2 0 0
+c
+d 929 3 1 0 0
+c
+d 340 7 1 0 0
+c
+d 56 1 0 0 0
+c
+d 60 1 0 0 0
+c
+d 65 5 2 1 0
+c
+d 1307 2 0 0 0
+c
+d 424 2 0 1 0
+c
+d 425 1 1 0 0
+c
+d 426 1 0 0 0
+c
+d 343 1 0 0 0
+c
+d 437 3 0 1 0
+c
+d 451 1 0 0 0
+c
+d 799 5 2 0 0
+c
+d 810 2 0 0 0
+c
+d 575 2 0 0 0
+c
+d 796 2 0 0 0
+c
+d 814 2 0 0 0
+c
+d 575 1 0 0 0
+c
+d 796 3 1 0 0
+c
+d 26 4 1 0 0
+c
+d 37 1 1 0 0
+c
+d 437 7 2 0 0
+c
+d 599 2 0 0 0
+c
+d 168 3 0 0 0
+c
+d 686 3 1 0 0
+c
+d 689 2 1 0 0
+c
+d 392 3 1 0 0
+c
+d 393 1 1 0 0
+c
+d 393 7 1 0 0
+c
+d 396 1 0 1 0
+c
+d 754 3 0 0 0
+c
+d 756 2 1 0 0
+c
+d 763 2 1 0 0
+c
+d 493 2 0 0 0
+c
+d 494 1 0 0 0
+c
+d 695 5 1 0 0
+c
+d 951 2 1 0 0
+c
+d 719 1 0 1 0
+c
+d 720 3 1 0 0
+c
+d 604 2 0 0 0
+c
+d 635 1 0 1 0
+c
+d 640 6 2 0 0
+c
+d 641 2 0 0 0
+c
+d 429 1 0 1 0
+c
+d 430 3 1 0 0
+c
+d 470 2 0 0 0
+c
+d 477 1 0 0 0
+c
+d 720 1 0 0 0
+c
+d 723 3 0 0 0
+c
+d 726 1 1 0 0
+c
+d 626 4 1 0 0
+c
+d 627 2 0 0 0
+c
+d 1170 3 1 0 0
+c
+d 1172 1 0 0 0
+c
+d 1179 3 1 0 0
+c
+d 1183 1 0 0 0
+c
+d 799 3 0 0 0
+c
+d 842 3 1 0 0
+c
+d 844 2 1 0 0
+c
+d 1013 2 0 0 0
+c
+d 1017 2 0 0 0
+c
+d 274 3 1 0 0
+c
+d 275 1 0 0 0
+c
+d 276 1 1 0 0
+c
+d 686 2 0 2 0
+c
+d 700 7 2 0 0
+c
+d 701 1 0 0 0
+c
+d 906 3 0 1 0
+c
+d 907 2 1 0 0
+c
+d 908 1 0 1 0
+c
+d 686 2 1 0 0
+c
+d 620 1 0 0 0
+c
+d 632 3 1 0 0
+c
+d 633 3 1 0 0
+c
+d 634 1 0 0 0
+c
+d 7 2 0 0 0
+c
+d 10 1 0 0 0
+c
+d 1269 3 1 1 0
+c
+d 217 1 0 0 0
+c
+d 220 5 2 0 0
+c
+d 591 2 1 0 0
+c
+d 592 2 0 0 0
+c
+d 304 4 0 0 0
+c
+d 307 1 0 0 0
+c
+d 1165 5 1 0 0
+c
+d 1166 3 0 0 0
+c
+d 69 6 1 0 0
+c
+d 650 1 0 1 0
+c
+d 620 1 0 1 0
+c
+d 621 5 3 0 0
+c
+d 162 5 2 0 0
+c
+d 171 1 0 1 0
+c
+d 990 3 1 0 0
+c
+d 992 3 1 0 0
+c
+d 993 2 1 0 0
+c
+d 569 3 0 0 0
+c
+d 574 1 0 0 0
+c
+d 382 4 1 0 0
+c
+d 384 3 1 1 0
+c
+d 47 1 0 1 0
+c
+d 775 2 0 0 0
+c
+d 777 1 0 1 0
+c
+d 253 2 0 0 0
+c
+d 254 1 0 0 0
+c
+d 255 2 1 1 0
+c
+d 965 1 0 1 0
+c
+d 970 5 2 0 0
+c
+d 971 1 0 0 0
+c
+d 735 7 1 0 0
+c
+d 101 2 1 0 0
+c
+d 608 1 0 0 0
+c
+d 1091 1 0 1 0
+c
+d 266 1 0 0 0
+c
+d 282 1 1 0 0
+c
+d 286 4 1 0 0
+c
+d 509 5 1 0 0
+c
+d 1070 1 0 1 0
+c
+d 18 6 1 0 0
+c
+d 1087 1 1 0 0
+c
+d 1090 3 1 0 0
+c
+d 60 3 0 1 0
+c
+d 61 1 0 0 0
+c
+d 62 1 0 0 0
+c
+d 647 1 1 0 0
+c
+d 608 5 0 1 0
+c
+d 1040 3 1 0 0
+c
+d 618 5 1 0 0
+c
+d 634 6 2 0 0
+c
+d 650 5 1 1 0
+c
+d 756 3 1 1 0
+c
+d 763 3 1 0 0
+c
+d 318 1 0 0 0
+c
+d 324 1 0 0 0
+c
+d 148 8 2 0 0
+c
+d 488 7 1 1 0
+c
+d 60 3 1 1 0
+c
+d 61 2 0 0 0
+c
+d 65 1 0 0 0
+c
+d 39 1 0 0 0
+c
+d 41 2 0 0 0
+c
+d 650 5 2 1 0
+c
+d 653 1 0 0 0
+c
+d 826 5 1 1 0
+c
+d 827 1 0 0 0
+c
+d 194 1 0 0 0
+c
+d 204 5 2 0 0
+c
+d 205 1 0 0 0
+c
+d 48 4 1 0 0
+c
+d 60 2 1 0 0
+c
+d 621 4 1 0 0
+c
+d 419 6 1 2 0
+c
+d 423 1 0 0 0
+c
+d 21 7 2 0 0
+c
+d 1020 2 1 0 0
+c
+d 1169 1 0 0 0
+c
+d 1170 7 3 0 0
+c
+d 602 3 1 1 0
+c
+d 663 1 0 1 0
+c
+d 680 3 0 0 0
+c
+d 630 1 1 0 0
+c
+d 660 1 0 0 0
+c
+d 663 3 1 0 0
+c
+d 278 3 1 0 0
+c
+d 1170 3 1 0 0
+c
+d 1173 1 0 0 0
+c
+d 855 5 1 1 0
+c
+d 860 1 0 0 0
+c
+d 618 4 0 0 0
+c
+d 965 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 597 3 2 0 0
+c
+d 598 3 1 0 0
+c
+d 1087 1 0 0 0
+c
+d 1094 4 1 0 0
+c
+d 132 1 0 1 0
+c
+d 133 4 1 0 0
+c
+d 324 1 0 0 0
+c
+d 806 1 0 1 0
+c
+d 807 4 1 0 0
+c
+d 423 1 0 1 0
+c
+d 424 1 0 1 0
+c
+d 427 4 1 0 0
+c
+d 584 1 0 0 0
+c
+d 338 3 0 0 0
+c
+d 340 3 1 1 0
+c
+d 578 5 1 0 0
+c
+d 738 4 1 0 0
+c
+d 750 1 0 0 0
+c
+d 854 1 1 0 0
+c
+d 866 5 1 0 0
+c
+d 18 2 0 1 0
+c
+d 990 2 1 0 0
+c
+d 997 1 0 0 0
+c
+d 999 4 1 0 0
+c
+d 1008 1 1 0 0
+c
+d 1009 1 0 1 0
+c
+d 1010 6 1 0 0
+c
+d 1012 1 0 0 0
+c
+d 305 7 2 0 0
+c
+d 1009 3 1 0 0
+c
+d 1012 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 686 6 1 0 0
+c
+d 505 1 0 0 0
+c
+d 514 3 0 1 0
+c
+d 516 1 0 1 0
+c
+d 691 4 1 1 0
+c
+d 551 3 1 1 0
+c
+d 821 1 0 0 0
+c
+d 822 6 0 0 0
+c
+d 46 5 2 0 0
+c
+d 622 2 1 0 0
+c
+d 625 1 0 1 0
+c
+d 1008 2 1 0 0
+c
+d 87 2 0 0 0
+c
+d 369 1 0 0 0
+c
+d 371 2 1 0 0
+c
+d 380 3 1 0 0
+c
+d 29 1 0 0 0
+c
+d 30 3 0 0 0
+c
+d 101 1 0 0 0
+c
+d 608 5 1 0 0
+c
+d 437 1 0 1 0
+c
+d 439 4 1 0 0
+c
+d 440 2 0 0 0
+c
+d 1168 5 1 0 0
+c
+d 1177 3 1 1 0
+c
+d 46 5 1 0 0
+c
+d 208 6 2 0 0
+c
+d 211 1 1 0 0
+c
+d 99 6 1 0 0
+c
+d 100 2 0 0 0
+c
+d 1098 3 1 0 0
+c
+d 1099 2 1 0 0
+c
+d 181 1 0 1 0
+c
+d 195 6 2 0 0
+c
+d 146 5 1 1 0
+c
+d 2 1 1 0 0
+c
+d 16 4 1 0 0
+c
+d 622 1 0 0 0
+c
+d 965 5 2 0 0
+c
+d 966 1 0 0 0
+c
+d 968 2 1 0 0
+c
+d 89 1 0 1 0
+c
+d 119 5 1 0 0
+c
+d 279 6 3 0 0
+c
+d 305 1 0 0 0
+c
+d 1150 1 0 0 0
+c
+d 159 8 3 1 0
+c
+d 213 1 0 0 0
+c
+d 1113 3 1 0 0
+c
+d 1119 1 0 1 0
+c
+d 157 6 2 0 0
+c
+d 305 1 0 0 0
+c
+d 1266 4 1 1 0
+c
+d 1285 3 1 0 0
+c
+d 467 2 0 0 0
+c
+d 468 3 0 0 0
+c
+d 18 1 0 0 0
+c
+d 95 7 1 0 0
+c
+d 998 1 0 0 0
+c
+d 811 1 0 0 0
+c
+d 813 5 1 1 0
+c
+d 815 1 0 1 0
+c
+d 816 2 1 0 0
+c
+d 806 1 0 0 0
+c
+d 906 3 2 0 0
+c
+d 909 2 1 0 0
+c
+d 437 1 1 0 0
+c
+d 456 2 0 0 0
+c
+d 457 1 0 1 0
+c
+d 215 1 1 0 0
+c
+d 221 5 1 0 0
+c
+d 737 1 0 1 0
+c
+d 743 5 1 0 0
+c
+d 753 1 0 0 0
+c
+d 384 3 1 1 0
+c
+d 386 3 1 0 0
+c
+d 1163 1 1 0 0
+c
+d 1165 1 0 0 0
+c
+d 1211 6 1 0 0
+c
+d 559 1 0 0 0
+c
+d 568 4 1 0 0
+c
+d 572 2 1 1 0
+c
+d 623 6 2 0 0
+c
+d 624 1 0 1 0
+c
+d 1278 2 0 1 0
+c
+d 1281 2 1 0 0
+c
+d 276 2 1 1 0
+c
+d 301 3 1 1 0
+c
+d 304 1 0 0 0
+c
+d 795 5 1 0 0
+c
+d 820 1 1 0 0
+c
+d 862 1 0 0 0
+c
+d 863 2 1 0 0
+c
+d 875 1 0 0 0
+c
+d 876 1 0 0 0
+c
+d 529 1 0 0 0
+c
+d 531 1 1 0 0
+c
+d 532 5 1 0 0
+c
+d 535 1 0 1 0
+c
+d 241 1 0 1 0
+c
+d 248 4 1 0 0
+c
+d 249 1 0 0 0
+c
+d 718 7 1 1 0
+c
+d 730 1 0 1 0
+c
+d 731 1 0 0 0
+c
+d 264 1 0 0 0
+c
+d 283 3 1 0 0
+c
+d 284 4 1 0 0
+c
+d 285 1 0 0 0
+c
+d 572 2 0 0 0
+c
+d 574 4 2 0 0
+c
+d 821 1 0 1 0
+c
+d 822 4 2 0 0
+c
+d 823 1 1 0 0
+c
+d 578 1 0 1 0
+c
+d 686 5 1 0 0
+c
+d 701 1 0 0 0
+c
+d 120 3 1 0 0
+c
+d 121 2 1 0 0
+c
+d 124 1 0 0 0
+c
+d 46 1 0 1 0
+c
+d 1176 7 1 0 0
+c
+d 348 1 1 0 0
+c
+d 400 1 0 0 0
+c
+d 407 3 1 0 0
+c
+d 409 3 1 0 0
+c
+d 661 1 0 0 0
+c
+d 673 6 2 0 0
+c
+d 675 1 1 0 0
+c
+d 676 1 0 0 0
+c
+d 1313 5 2 0 0
+c
+d 19 3 2 0 0
+c
+d 21 1 0 0 0
+c
+d 22 2 1 0 0
+c
+d 369 4 2 0 0
+c
+d 505 7 2 1 0
+c
+d 610 8 2 1 0
+c
+d 552 3 1 1 0
+c
+d 1009 1 1 0 0
+c
+d 1012 2 1 0 0
+c
+d 1030 1 0 0 0
+c
+d 120 4 1 0 0
+c
+d 926 7 2 0 0
+c
+d 927 1 0 1 0
+c
+d 1174 5 2 0 0
+c
+d 278 5 0 0 0
+c
+d 591 2 0 0 0
+c
+d 592 4 1 0 0
+c
+d 60 5 1 0 0
+c
+d 1126 4 1 1 0
+c
+d 1130 3 1 0 0
+c
+d 580 1 0 0 0
+c
+d 581 1 1 0 0
+c
+d 582 2 1 0 0
+c
+d 341 7 2 1 0
+c
+d 443 7 1 0 0
+c
+d 445 2 1 0 0
+c
+d 799 5 2 0 0
+c
+d 919 3 0 0 0
+c
+d 606 5 1 0 0
+c
+d 826 1 0 1 0
+c
+d 827 2 1 0 0
+c
+d 829 2 0 0 0
+c
+d 575 6 1 0 0
+c
+d 33 2 0 0 0
+c
+d 34 1 0 0 0
+c
+d 550 1 1 0 0
+c
+d 554 3 1 0 0
+c
+d 327 1 0 0 0
+c
+d 348 1 0 1 0
+c
+d 349 2 0 0 0
+c
+d 350 2 0 0 0
+c
+d 341 7 2 0 0
+c
+d 347 2 0 0 0
+c
+d 1196 6 1 0 0
+c
+d 167 5 1 0 0
+c
+d 369 5 1 0 0
+c
+d 755 9 2 1 0
+c
+d 311 1 0 0 0
+c
+d 324 1 0 0 0
+c
+d 325 4 2 0 0
+c
+d 326 1 0 1 0
+c
+d 46 6 1 0 0
+c
+d 74 1 0 0 0
+c
+d 75 1 0 0 0
+c
+d 54 1 1 0 0
+c
+d 719 3 1 0 0
+c
+d 686 2 0 0 0
+c
+d 959 1 0 0 0
+c
+d 960 2 0 0 0
+c
+d 961 2 0 0 0
+c
+d 274 2 1 0 0
+c
+d 275 2 0 1 0
+c
+d 277 2 1 0 0
+c
+d 1158 1 0 1 0
+c
+d 66 6 1 1 0
+c
+d 1107 1 0 1 0
+c
+d 1110 4 2 0 0
+c
+d 965 1 0 0 0
+c
+d 982 1 0 1 0
+c
+d 983 3 2 0 0
+c
+d 984 3 1 0 0
+c
+d 168 4 2 0 0
+c
+d 369 1 0 0 0
+c
+d 965 4 1 0 0
+c
+d 967 1 0 1 0
+c
+d 157 3 1 0 0
+c
+d 355 4 2 0 0
+c
+d 356 1 0 1 0
+c
+d 98 1 0 0 0
+c
+d 99 4 0 0 0
+c
+d 1156 8 1 1 0
+c
+d 787 2 1 0 0
+c
+d 882 1 0 0 0
+c
+d 262 3 1 1 0
+c
+d 278 2 0 0 0
+c
+d 795 4 2 0 0
+c
+d 621 1 0 1 0
+c
+d 622 2 0 0 0
+c
+d 1034 5 2 0 0
+c
+d 1035 2 1 0 0
+c
+d 21 3 1 0 0
+c
+d 24 3 2 0 0
+c
+d 720 1 0 0 0
+c
+d 723 2 1 0 0
+c
+d 301 1 0 0 0
+c
+d 302 6 2 0 0
+c
+d 1218 1 0 0 0
+c
+d 836 6 1 1 0
+c
+d 837 1 0 0 0
+c
+d 694 7 1 1 0
+c
+d 146 6 1 1 0
+c
+d 147 1 0 0 0
+c
+d 507 3 1 1 0
+c
+d 558 1 0 0 0
+c
+d 60 1 1 0 0
+c
+d 62 3 0 0 0
+c
+d 65 1 0 0 0
+c
+d 373 4 1 0 0
+c
+d 374 2 0 1 0
+c
+d 52 1 0 0 0
+c
+d 1303 4 2 0 0
+c
+d 791 5 2 0 0
+c
+d 936 1 0 0 0
+c
+d 56 1 0 0 0
+c
+d 1303 3 0 0 0
+c
+d 1304 1 0 0 0
+c
+d 597 1 1 0 0
+c
+d 598 2 1 0 0
+c
+d 600 2 0 0 0
+c
+d 606 1 0 0 0
+c
+d 797 4 0 1 0
+c
+d 799 3 1 0 0
+c
+d 476 1 0 0 0
+c
+d 478 3 2 0 0
+c
+d 480 2 0 0 0
+c
+d 621 1 0 0 0
+c
+d 622 3 1 0 0
+c
+d 965 1 0 0 0
+c
+d 159 1 0 1 0
+c
+d 184 5 1 1 0
+c
+d 185 1 1 0 0
+c
+d 148 1 1 0 0
+c
+d 232 6 2 0 0
+c
+d 157 3 0 0 0
+c
+d 159 2 1 0 0
+c
+d 183 1 1 0 0
+c
+d 148 1 0 0 0
+c
+d 238 3 1 0 0
+c
+d 239 2 1 0 0
+c
+d 437 5 1 1 0
+c
+d 445 1 0 0 0
+c
+d 1136 2 1 0 0
+c
+d 1137 2 0 0 0
+c
+d 591 6 1 1 0
+c
+d 1195 7 3 0 0
+c
+d 478 1 0 0 0
+c
+d 480 7 3 0 0
+c
+d 485 1 0 0 0
+c
+d 574 3 0 0 0
+c
+d 575 1 0 0 0
+c
+d 437 4 1 0 0
+c
+d 569 2 0 1 0
+c
+d 264 3 1 0 0
+c
+d 285 4 1 0 0
+c
+d 716 4 1 1 0
+c
+d 718 1 0 0 0
+c
+d 392 1 0 0 0
+c
+d 1125 2 1 0 0
+c
+d 1127 4 1 0 0
+c
+d 457 7 2 1 0
+c
+d 458 1 0 0 0
+c
+d 208 1 0 0 0
+c
+d 211 9 3 1 0
+c
+d 701 4 1 1 0
+c
+d 714 3 1 0 0
+c
+d 1274 7 2 1 0
+c
+d 578 3 1 1 0
+c
+d 580 2 1 0 0
+c
+d 582 1 0 0 0
+c
+d 6 1 1 0 0
+c
+d 10 1 0 1 0
+c
+d 12 1 0 0 0
+c
+d 437 6 1 1 0
+c
+d 5 3 1 0 0
+c
+d 6 1 1 0 0
+c
+d 28 4 0 0 0
+c
+d 437 3 1 0 0
+c
+d 559 1 0 0 0
+c
+d 568 2 1 0 0
+c
+d 822 5 0 1 0
+c
+d 823 1 1 0 0
+c
+d 572 1 1 0 0
+c
+d 574 3 0 0 0
+c
+d 795 1 0 0 0
+c
+d 153 3 1 1 0
+c
+d 176 2 0 0 0
+c
+d 194 2 0 0 0
+c
+d 718 1 0 0 0
+c
+d 729 3 1 1 0
+c
+d 731 1 0 0 0
+c
+d 946 1 0 0 0
+c
+d 686 6 2 0 0
+c
+d 252 3 0 1 0
+c
+d 258 1 0 1 0
+c
+d 259 3 0 0 0
+c
+d 260 1 0 0 0
+c
+d 18 1 0 0 0
+c
+d 19 3 1 0 0
+c
+d 21 1 0 0 0
+c
+d 205 1 1 0 0
+c
+d 206 2 1 0 0
+c
+d 207 4 0 0 0
+c
+d 114 3 1 1 0
+c
+d 127 1 0 0 0
+c
+d 686 3 0 0 0
+c
+d 691 1 0 0 0
+c
+d 52 1 1 0 0
+c
+d 1303 6 2 0 0
+c
+d 1304 1 0 0 0
+c
+d 525 2 0 1 0
+c
+d 545 2 1 1 0
+c
+d 159 6 1 0 0
+c
+d 160 1 1 0 0
+c
+d 1013 1 1 0 0
+c
+d 1017 2 1 0 0
+c
+d 1021 1 0 1 0
+c
+d 575 4 1 0 0
+c
+d 578 1 0 0 0
+c
+d 437 1 0 1 0
+c
+d 452 3 0 1 0
+c
+d 453 3 0 0 0
+c
+d 315 6 2 0 0
+c
+d 75 2 0 0 0
+c
+d 86 1 1 0 0
+c
+d 753 6 1 1 0
+c
+d 858 1 0 1 0
+c
+d 211 6 2 0 0
+c
+d 1315 1 0 1 0
+c
+d 1317 4 2 0 0
+c
+d 185 4 0 0 0
+c
+d 196 1 1 0 0
+c
+d 199 1 0 1 0
+c
+d 91 2 1 0 0
+c
+d 1265 3 0 0 0
+c
+d 217 4 0 0 0
+c
+d 221 2 1 1 0
+c
+d 591 3 2 0 0
+c
+d 597 3 1 0 0
+c
+d 601 1 0 0 0
+c
+d 554 8 2 0 0
+c
+d 143 1 1 0 0
+c
+d 144 4 2 0 0
+c
+d 145 1 0 0 0
+c
+d 230 1 0 0 0
+c
+d 840 3 0 0 0
+c
+d 842 2 0 0 0
+c
+d 46 1 0 0 0
+c
+d 75 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 507 4 0 1 0
+c
+d 1076 1 1 0 0
+c
+d 602 2 2 0 0
+c
+d 680 3 0 0 0
+c
+d 681 1 0 0 0
+c
+d 168 1 0 1 0
+c
+d 369 6 2 0 0
+c
+d 157 3 1 0 0
+c
+d 1252 3 1 0 0
+c
+d 1253 1 0 0 0
+c
+d 196 7 2 0 0
+c
+d 199 1 0 1 0
+c
+d 424 5 1 0 0
+c
+d 686 6 2 1 0
+c
+d 713 1 0 0 0
+c
+d 96 1 0 1 0
+c
+d 142 5 1 0 0
+c
+d 368 4 1 1 0
+c
+d 101 5 2 0 0
+c
+d 1087 2 0 1 0
+c
+d 153 1 0 0 0
+c
+d 155 3 1 0 0
+c
+d 156 2 1 0 0
+c
+d 157 1 0 1 0
+c
+d 48 1 0 0 0
+c
+d 49 2 1 0 0
+c
+d 795 2 0 0 0
+c
+d 818 1 0 0 0
+c
+d 904 2 0 0 0
+c
+d 911 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 592 3 0 2 0
+c
+d 990 3 1 0 0
+c
+d 992 3 0 0 0
+c
+d 998 2 0 1 0
+c
+d 532 6 2 0 0
+c
+d 537 1 0 0 0
+c
+d 341 1 0 0 0
+c
+d 344 6 3 0 0
+c
+d 1146 1 0 0 0
+c
+d 989 5 2 0 0
+c
+d 996 4 0 0 0
+c
+d 597 1 1 0 0
+c
+d 598 2 0 0 0
+c
+d 599 1 0 0 0
+c
+d 755 2 0 0 0
+c
+d 764 1 0 0 0
+c
+d 19 4 1 0 0
+c
+d 22 1 1 0 0
+c
+d 981 1 0 0 0
+c
+d 101 5 2 1 0
+c
+d 1080 2 0 0 0
+c
+d 1083 1 0 0 0
+c
+d 1084 1 0 0 0
+c
+d 167 5 2 0 0
+c
+d 369 1 0 0 0
+c
+d 101 4 0 1 0
+c
+d 103 1 1 0 0
+c
+d 104 1 0 0 0
+c
+d 965 3 1 0 0
+c
+d 343 5 1 1 0
+c
+d 159 6 2 0 0
+c
+d 294 10 2 1 0
+c
+d 12 1 0 1 0
+c
+d 1266 2 1 0 0
+c
+d 1274 3 1 1 0
+c
+d 840 3 1 1 0
+c
+d 842 4 1 0 0
+c
+d 689 1 0 0 0
+c
+d 703 1 0 0 0
+c
+d 704 2 0 0 0
+c
+d 705 3 0 1 0
+c
+d 152 1 0 0 0
+c
+d 153 6 2 1 0
+c
+d 427 2 0 0 0
+c
+d 428 4 2 0 0
+c
+d 55 1 1 0 0
+c
+d 693 4 0 0 0
+c
+d 694 1 0 1 0
+c
+d 720 1 0 0 0
+c
+d 726 7 1 0 0
+c
+d 727 1 0 0 0
+c
+d 505 5 0 0 0
+c
+d 54 1 0 0 0
+c
+d 719 1 0 0 0
+c
+d 950 5 0 0 0
+c
+d 120 1 0 0 0
+c
+d 125 2 0 0 0
+c
+d 155 1 0 0 0
+c
+d 415 4 1 0 0
+c
+d 416 3 1 0 0
+c
+d 417 2 0 0 0
+c
+d 262 1 0 0 0
+c
+d 283 5 1 0 0
+c
+d 855 3 0 0 0
+c
+d 856 2 1 0 0
+c
+d 872 1 0 0 0
+c
+d 873 1 0 0 0
+c
+d 294 5 0 0 0
+c
+d 146 3 1 0 0
+c
+d 148 2 1 0 0
+c
+d 1224 1 1 0 0
+c
+d 1318 3 1 0 0
+c
+d 1319 1 0 0 0
+c
+d 1320 1 0 1 0
+c
+d 163 3 1 0 0
+c
+d 164 2 0 0 0
+c
+d 418 5 2 0 0
+c
+d 720 5 1 0 0
+c
+d 729 1 0 0 0
+c
+d 946 1 0 1 0
+c
+d 89 2 0 0 0
+c
+d 91 3 0 0 0
+c
+d 1265 3 1 0 0
+c
+d 634 3 1 1 0
+c
+d 642 3 0 1 0
+c
+d 392 1 0 1 0
+c
+d 393 3 1 0 0
+c
+d 1110 3 1 1 0
+c
+d 1111 2 1 0 0
+c
+d 1115 1 0 0 0
+c
+d 324 5 1 1 0
+c
+d 49 2 0 1 0
+c
+d 50 4 1 0 0
+c
+d 51 1 0 1 0
+c
+d 437 9 3 0 0
+c
+d 477 1 0 0 0
+c
+d 478 2 0 0 0
+c
+d 486 2 0 0 0
+c
+d 689 1 0 0 0
+c
+d 691 1 0 0 0
+c
+d 703 2 0 0 0
+c
+d 705 4 0 0 0
+c
+d 31 5 2 0 0
+c
+d 262 9 2 0 0
+c
+d 274 1 0 0 0
+c
+d 1112 1 0 0 0
+c
+d 1114 4 2 0 0
+c
+d 1115 1 0 0 0
+c
+d 46 2 0 0 0
+c
+d 69 2 0 1 0
+c
+d 649 5 1 0 0
+c
+d 650 2 0 0 0
+c
+d 655 1 0 0 0
+c
+d 1169 4 0 0 0
+c
+d 1170 1 0 0 0
+c
+d 382 5 1 0 0
+c
+d 101 1 0 0 0
+c
+d 424 3 1 0 0
+c
+d 425 1 1 0 0
+c
+d 621 1 0 0 0
+c
+d 646 3 1 1 0
+c
+d 559 1 0 0 0
+c
+d 566 4 2 0 0
+c
+d 1070 3 1 0 0
+c
+d 1071 1 0 0 0
+c
+d 1073 5 2 0 0
+c
+d 842 1 0 0 0
+c
+d 848 1 1 0 0
+c
+d 861 5 1 0 0
+c
+d 218 7 0 0 0
+c
+d 219 2 0 0 0
+c
+d 12 3 1 0 0
+c
+d 1269 1 1 0 0
+c
+d 1271 3 1 0 0
+c
+d 807 3 0 1 0
+c
+d 808 1 1 0 0
+c
+d 899 1 0 0 0
+c
+d 159 3 0 1 0
+c
+d 183 2 0 1 0
+c
+d 182 1 0 0 0
+c
+d 183 4 1 1 0
+c
+d 191 1 0 0 0
+c
+d 823 4 1 1 0
+c
+d 75 4 1 1 0
+c
+d 84 1 0 0 0
+c
+d 1300 1 1 0 0
+c
+d 618 3 0 0 0
+c
+d 965 2 0 0 0
+c
+d 502 4 2 0 0
+c
+d 507 1 0 0 0
+c
+d 146 4 0 0 0
+c
+d 745 1 0 0 0
+c
+d 748 5 2 0 0
+c
+d 894 1 0 0 0
+c
+d 333 6 2 0 0
+c
+d 334 1 1 0 0
+c
+d 1022 4 0 0 0
+c
+d 1023 1 0 0 0
+c
+d 565 1 0 1 0
+c
+d 566 1 0 0 0
+c
+d 568 2 1 0 0
+c
+d 18 4 1 0 0
+c
+d 30 1 1 0 0
+c
+d 591 1 0 0 0
+c
+d 959 6 1 0 0
+c
+d 960 1 0 0 0
+c
+d 791 4 1 0 0
+c
+d 795 1 0 1 0
+c
+d 825 1 0 0 0
+c
+d 793 5 0 2 0
+c
+d 794 1 0 0 0
+c
+d 1115 5 2 0 0
+c
+d 1117 2 0 0 0
+c
+d 54 5 0 0 0
+c
+d 697 1 1 0 0
+c
+d 204 1 0 1 0
+c
+d 224 4 1 0 0
+c
+d 10 1 0 0 0
+c
+d 11 2 1 0 0
+c
+d 12 2 1 0 0
+c
+d 752 3 1 0 0
+c
+d 753 1 0 0 0
+c
+d 761 1 0 1 0
+c
+d 653 5 3 0 0
+c
+d 673 3 0 0 0
+c
+d 674 1 0 0 0
+c
+d 327 3 1 1 0
+c
+d 328 3 1 0 0
+c
+d 329 2 1 0 0
+c
+d 437 2 0 1 0
+c
+d 1048 4 1 0 0
+c
+d 557 1 0 0 0
+c
+d 1060 4 1 0 0
+c
+d 1061 1 0 1 0
+c
+d 1062 1 1 0 0
+c
+d 159 5 0 0 0
+c
+d 183 1 0 0 0
+c
+d 795 1 0 0 0
+c
+d 820 1 1 0 0
+c
+d 775 1 0 0 0
+c
+d 785 3 1 0 0
+c
+d 786 1 1 0 0
+c
+d 749 1 0 1 0
+c
+d 752 3 1 0 0
+c
+d 395 3 1 1 0
+c
+d 396 1 0 0 0
+c
+d 1124 2 1 0 0
+c
+d 246 3 1 0 0
+c
+d 262 3 1 0 0
+c
+d 457 8 2 1 0
+c
+d 46 1 0 0 0
+c
+d 75 2 0 0 0
+c
+d 86 1 0 0 0
+c
+d 1043 4 1 0 0
+c
+d 1045 1 0 1 0
+c
+d 1046 2 0 0 0
+c
+d 374 4 2 0 0
+c
+d 602 3 1 0 0
+c
+d 633 1 1 0 0
+c
+d 634 1 0 0 0
+c
+d 178 2 0 0 0
+c
+d 179 6 0 0 0
+c
+d 348 6 1 1 0
+c
+d 437 5 1 0 0
+c
+d 466 1 1 0 0
+c
+d 1150 6 0 0 0
+c
+d 5 5 2 1 0
+c
+d 622 3 1 0 0
+c
+d 965 1 0 0 0
+c
+d 806 1 0 0 0
+c
+d 807 5 2 0 0
+c
+d 861 4 2 0 0
+c
+d 870 4 1 0 0
+c
+d 871 1 0 0 0
+c
+d 84 7 2 0 0
+c
+d 749 1 0 0 0
+c
+d 857 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 470 4 2 0 0
+c
+d 259 7 2 1 0
+c
+d 225 1 1 0 0
+c
+d 226 2 0 0 0
+c
+d 238 2 0 1 0
+c
+d 288 5 0 0 0
+c
+d 300 1 0 0 0
+c
+d 753 1 0 0 0
+c
+d 857 3 1 0 0
+c
+d 858 2 1 0 0
+c
+d 872 1 0 1 0
+c
+d 132 5 1 0 0
+c
+d 340 1 0 0 0
+c
+d 878 5 0 0 0
+c
+d 324 1 0 1 0
+c
+d 1149 4 0 0 0
+c
+d 989 3 0 0 0
+c
+d 990 2 0 0 0
+c
+d 523 2 0 0 0
+c
+d 524 6 1 0 0
+c
+d 101 5 1 0 0
+c
+d 111 1 0 0 0
+c
+d 112 1 0 0 0
+c
+d 763 1 0 1 0
+c
+d 767 1 0 0 0
+c
+d 768 2 0 0 0
+c
+d 773 1 0 0 0
+c
+d 882 2 1 0 0
+c
+d 887 4 1 0 0
+c
+d 697 4 1 1 0
+c
+d 717 1 1 0 0
+c
+d 418 4 1 0 0
+c
+d 1087 2 1 0 0
+c
+d 424 3 1 0 0
+c
+d 1079 4 0 0 0
+c
+d 100 3 0 0 0
+c
+d 105 3 1 0 0
+c
+d 106 1 0 0 0
+c
+d 554 5 2 0 0
+c
+d 437 4 1 0 0
+c
+d 854 2 1 0 0
+c
+d 855 5 1 0 0
+c
+d 87 2 1 0 0
+c
+d 29 1 0 1 0
+c
+d 31 3 0 0 0
+c
+d 1318 1 0 0 0
+c
+d 217 4 1 0 0
+c
+d 241 2 1 0 0
+c
+d 248 1 1 0 0
+c
+d 437 4 2 1 0
+c
+d 439 3 1 0 0
+c
+d 509 5 1 1 0
+c
+d 756 4 0 0 0
+c
+d 757 1 1 0 0
+c
+d 575 3 1 1 0
+c
+d 797 1 0 0 0
+c
+d 929 4 1 0 0
+c
+d 931 2 0 1 0
+c
+d 1285 3 1 0 0
+c
+d 1286 3 1 1 0
+c
+d 162 3 0 1 0
+c
+d 355 1 0 0 0
+c
+d 358 1 1 0 0
+c
+d 21 3 1 1 0
+c
+d 28 3 1 1 0
+c
+d 340 1 1 0 0
+c
+d 491 1 0 0 0
+c
+d 492 5 0 1 0
+c
+d 926 1 0 1 0
+c
+d 927 3 1 1 0
+c
+d 1170 5 0 0 0
+c
+d 1171 1 0 0 0
+c
+d 341 7 2 0 0
+c
+d 811 4 2 0 0
+c
+d 904 2 0 0 0
+c
+d 913 2 0 0 0
+c
+d 301 7 2 1 0
+c
+d 312 1 0 0 0
+c
+d 159 3 0 0 0
+c
+d 160 1 0 0 0
+c
+d 185 4 1 1 0
+c
+d 437 1 0 0 0
+c
+d 470 3 1 0 0
+c
+d 534 7 2 1 0
+c
+d 157 4 0 0 0
+c
+d 159 1 0 0 0
+c
+d 311 5 2 0 0
+c
+d 327 2 1 0 0
+c
+d 334 1 0 0 0
+c
+d 919 4 0 0 0
+c
+d 922 1 0 0 0
+c
+d 2 1 0 0 0
+c
+d 16 3 1 0 0
+c
+d 17 2 1 0 0
+c
+d 93 2 1 0 0
+c
+d 1110 8 3 0 0
+c
+d 621 4 1 0 0
+c
+d 623 2 1 0 0
+c
+d 697 1 0 0 0
+c
+d 717 3 1 0 0
+c
+d 719 2 1 0 0
+c
+d 690 7 1 0 0
+c
+d 691 1 0 0 0
+c
+d 705 1 0 0 0
+c
+d 844 1 0 0 0
+c
+d 845 3 1 0 0
+c
+d 846 3 1 0 0
+c
+d 851 1 0 0 0
+c
+d 838 5 2 0 0
+c
+d 839 2 1 0 0
+c
+d 343 4 2 0 0
+c
+d 437 1 0 0 0
+c
+d 799 1 0 0 0
+c
+d 810 1 0 0 0
+c
+d 811 5 2 0 0
+c
+d 52 4 1 0 0
+c
+d 719 1 0 0 0
+c
+d 164 4 1 0 0
+c
+d 167 2 1 0 0
+c
+d 368 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 592 3 1 1 0
+c
+d 593 3 0 0 0
+c
+d 697 3 1 1 0
+c
+d 719 4 1 0 0
+c
+d 348 7 1 0 0
+c
+d 734 4 1 0 0
+c
+d 737 1 1 0 0
+c
+d 618 5 1 0 0
+c
+d 169 2 1 0 0
+c
+d 378 3 0 1 0
+c
+d 1111 1 0 0 0
+c
+d 419 4 2 0 0
+c
+d 422 1 0 0 0
+c
+d 273 2 0 0 0
+c
+d 276 5 1 0 0
+c
+d 856 6 1 0 0
+c
+d 164 4 1 0 0
+c
+d 858 6 2 0 0
+c
+d 869 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 470 2 1 0 0
+c
+d 477 1 0 0 0
+c
+d 691 1 1 0 0
+c
+d 697 4 1 1 0
+c
+d 183 1 0 0 0
+c
+d 196 3 1 0 0
+c
+d 1247 1 0 1 0
+c
+d 54 3 0 0 0
+c
+d 55 2 1 0 0
+c
+d 66 2 0 0 0
+c
+d 915 2 0 0 0
+c
+d 916 4 0 0 0
+c
+d 919 1 1 0 0
+c
+d 436 2 1 0 0
+c
+d 578 2 0 0 0
+c
+d 581 2 0 0 0
+c
+d 193 4 1 0 0
+c
+d 195 1 0 1 0
+c
+d 878 1 1 0 0
+c
+d 881 6 1 0 0
+c
+d 568 1 0 1 0
+c
+d 572 5 0 0 0
+c
+d 1063 4 2 0 0
+c
+d 1065 5 1 0 0
+c
+d 89 5 1 0 0
+c
+d 119 1 0 0 0
+c
+d 120 2 0 0 0
+c
+d 199 7 2 1 0
+c
+d 786 1 0 0 0
+c
+d 787 6 2 0 0
+c
+d 510 1 0 0 0
+c
+d 517 3 1 0 0
+c
+d 518 1 0 0 0
+c
+d 519 2 1 0 0
+c
+d 520 1 0 0 0
+c
+d 470 2 0 0 0
+c
+d 477 3 1 0 0
+c
+d 478 1 1 0 0
+c
+d 382 4 1 0 0
+c
+d 392 1 0 0 0
+c
+d 286 1 0 0 0
+c
+d 291 2 0 1 0
+c
+d 299 3 1 1 0
+c
+d 30 1 1 0 0
+c
+d 32 6 1 0 0
+c
+d 1195 2 1 0 0
+c
+d 1198 4 0 0 0
+c
+d 1194 7 2 0 0
+c
+d 470 1 0 0 0
+c
+d 471 3 2 0 0
+c
+d 472 2 0 0 0
+c
+d 475 1 0 0 0
+c
+d 598 1 0 0 0
+c
+d 599 6 2 0 0
+c
+d 715 1 1 0 0
+c
+d 716 4 0 1 0
+c
+d 120 4 1 0 0
+c
+d 124 1 0 0 0
+c
+d 146 2 1 0 0
+c
+d 294 6 2 0 0
+c
+d 608 1 0 0 0
+c
+d 615 5 2 0 0
+c
+d 551 7 2 1 0
+c
+d 132 1 0 0 0
+c
+d 494 1 0 1 0
+c
+d 496 3 0 0 0
+c
+d 575 1 0 0 0
+c
+d 796 4 2 0 0
+c
+d 49 6 2 1 0
+c
+d 734 3 0 0 0
+c
+d 565 6 2 0 0
+c
+d 568 1 1 0 0
+c
+d 311 4 2 0 0
+c
+d 325 4 0 0 0
+c
+d 327 1 0 1 0
+c
+d 70 1 0 0 0
+c
+d 650 6 2 0 0
+c
+d 651 1 0 0 0
+c
+d 1063 2 0 0 0
+c
+d 1065 1 0 1 0
+c
+d 1066 5 1 0 0
+c
+d 1067 1 0 0 0
+c
+d 597 1 0 0 0
+c
+d 598 2 0 0 0
+c
+d 95 1 0 1 0
+c
+d 98 4 1 0 0
+c
+d 157 1 0 0 0
+c
+d 305 2 0 0 0
+c
+d 1141 3 2 0 0
+c
+d 1045 1 0 0 0
+c
+d 1048 3 1 0 0
+c
+d 753 6 2 0 0
+c
+d 146 1 0 0 0
+c
+d 229 3 1 0 0
+c
+d 507 7 2 1 0
+c
+d 166 1 0 1 0
+c
+d 395 5 1 1 0
+c
+d 396 1 0 0 0
+c
+d 437 4 2 0 0
+c
+d 445 1 0 0 0
+c
+d 789 5 2 0 0
+c
+d 437 2 1 1 0
+c
+d 148 1 1 0 0
+c
+d 232 5 1 0 0
+c
+d 19 7 2 0 0
+c
+d 983 2 1 0 0
+c
+d 169 1 0 1 0
+c
+d 375 1 0 1 0
+c
+d 376 3 1 0 0
+c
+d 523 1 0 0 0
+c
+d 524 4 2 0 0
+c
+d 377 1 0 1 0
+c
+d 384 3 1 1 0
+c
+d 1134 1 0 0 0
+c
+d 74 4 1 0 0
+c
+d 75 4 1 0 0
+c
+d 854 5 1 0 0
+c
+d 855 2 0 0 0
+c
+d 857 1 0 0 0
+c
+d 574 1 0 1 0
+c
+d 795 2 1 0 0
+c
+d 906 1 0 0 0
+c
+d 911 3 0 1 0
+c
+d 46 2 0 1 0
+c
+d 775 2 1 0 0
+c
+d 782 1 0 1 0
+c
+d 748 3 0 0 0
+c
+d 749 2 1 0 0
+c
+d 168 3 1 1 0
+c
+d 378 1 0 0 0
+c
+d 1112 1 1 0 0
+c
+d 225 8 3 0 0
+c
+d 304 3 1 1 0
+c
+d 305 3 2 0 0
+c
+d 803 2 1 0 0
+c
+d 915 4 1 1 0
+c
+d 916 2 0 0 0
+c
+d 878 6 3 0 0
+c
+d 881 1 0 0 0
+c
+d 882 1 0 0 0
+c
+d 1266 3 0 0 0
+c
+d 1285 1 0 0 0
+c
+d 419 5 2 0 0
+c
+d 1083 1 0 0 0
+c
+d 262 4 1 0 0
+c
+d 279 1 0 0 0
+c
+d 510 1 0 1 0
+c
+d 511 1 1 0 0
+c
+d 516 1 0 0 0
+c
+d 520 3 1 0 0
+c
+d 47 1 1 0 0
+c
+d 48 1 1 0 0
+c
+d 769 2 1 0 0
+c
+d 771 1 0 0 0
+c
+d 939 2 0 0 0
+c
+d 353 3 0 0 0
+c
+d 355 3 1 0 0
+c
+d 357 1 0 0 0
+c
+d 358 1 0 1 0
+c
+d 242 1 0 0 0
+c
+d 246 4 1 0 0
+c
+d 262 1 1 0 0
+c
+d 470 1 0 0 0
+c
+d 477 3 1 0 0
+c
+d 478 1 0 0 0
+c
+d 572 1 1 0 0
+c
+d 574 4 1 0 0
+c
+d 91 4 1 0 0
+c
+d 92 2 1 0 0
+c
+d 119 1 0 1 0
+c
+d 608 2 0 1 0
+c
+d 614 3 1 0 0
+c
+d 437 5 1 0 0
+c
+d 734 7 1 1 0
+c
+d 305 3 0 0 0
+c
+d 306 1 0 0 0
+c
+d 353 1 1 0 0
+c
+d 242 1 1 0 0
+c
+d 262 3 1 0 0
+c
+d 270 1 0 0 0
+c
+d 259 1 1 0 0
+c
+d 262 5 1 0 0
+c
+d 7 5 2 0 0
+c
+d 85 1 0 0 0
+c
+d 1278 2 0 0 0
+c
+d 1279 1 1 0 0
+c
+d 1282 1 0 0 0
+c
+d 755 4 1 1 0
+c
+d 759 1 1 0 0
+c
+d 164 3 1 1 0
+c
+d 300 1 0 0 0
+c
+d 315 2 0 0 0
+c
+d 316 1 0 0 0
+c
+d 317 3 0 0 0
+c
+d 608 1 0 0 0
+c
+d 615 3 1 0 0
+c
+d 990 3 1 0 0
+c
+d 991 1 0 0 0
+c
+d 992 3 1 1 0
+c
+d 919 5 2 1 0
+c
+d 924 1 0 0 0
+c
+d 301 3 0 0 0
+c
+d 1153 1 1 0 0
+c
+d 1154 2 1 0 0
+c
+d 7 6 2 0 0
+c
+d 304 1 0 1 0
+c
+d 308 4 1 0 0
+c
+d 734 2 0 1 0
+c
+d 737 5 1 1 0
+c
+d 30 6 2 0 0
+c
+d 31 2 1 0 0
+c
+d 162 1 0 0 0
+c
+d 355 1 1 0 0
+c
+d 101 7 2 0 0
+c
+d 111 1 0 0 0
+c
+d 112 1 1 0 0
+c
+d 211 1 1 0 0
+c
+d 1233 1 0 1 0
+c
+d 1235 3 1 0 0
+c
+d 1236 1 0 0 0
+c
+d 208 4 0 1 0
+c
+d 211 1 1 0 0
+c
+d 468 6 1 0 0
+c
+d 56 6 2 0 0
+c
+d 65 2 0 0 0
+c
+d 650 4 2 0 0
+c
+d 656 1 0 1 0
+c
+d 661 1 0 0 0
+c
+d 455 5 2 1 0
+c
+d 456 2 0 0 0
+c
+d 155 1 1 0 0
+c
+d 176 2 0 0 0
+c
+d 194 1 0 0 0
+c
+d 54 3 0 1 0
+c
+d 55 1 1 0 0
+c
+d 719 1 0 0 0
+c
+d 300 4 1 0 0
+c
+d 314 1 1 0 0
+c
+d 315 1 0 0 0
+c
+d 99 1 0 0 0
+c
+d 101 3 0 0 0
+c
+d 109 4 1 1 0
+c
+d 110 1 0 0 0
+c
+d 284 1 1 0 0
+c
+d 285 5 0 1 0
+c
+d 1192 6 1 0 0
+c
+d 1193 1 0 0 0
+c
+d 120 6 2 1 0
+c
+d 121 1 0 0 0
+c
+d 787 2 1 0 0
+c
+d 348 7 2 0 0
+c
+d 340 5 1 0 0
+c
+d 343 1 0 0 0
+c
+d 491 1 0 0 0
+c
+d 598 3 0 0 0
+c
+d 599 1 0 0 0
+c
+d 600 1 0 0 0
+c
+d 100 10 2 1 0
+c
+d 1002 1 0 0 0
+c
+d 829 2 0 0 0
+c
+d 835 2 0 0 0
+c
+d 548 1 0 1 0
+c
+d 572 7 1 1 0
+c
+d 858 3 1 0 0
+c
+d 859 2 1 0 0
+c
+d 871 2 0 0 0
+c
+d 167 1 1 0 0
+c
+d 1121 2 0 1 0
+c
+d 101 6 1 1 0
+c
+d 423 1 0 0 0
+c
+d 737 8 2 0 0
+c
+d 753 1 0 0 0
+c
+d 539 2 0 1 0
+c
+d 547 5 1 0 0
+c
+d 572 3 0 0 0
+c
+d 574 4 2 0 0
+c
+d 148 1 0 1 0
+c
+d 259 1 1 0 0
+c
+d 285 1 0 0 0
+c
+d 1224 1 0 0 0
+c
+d 1225 5 1 0 0
+c
+d 494 2 1 0 0
+c
+d 496 2 1 0 0
+c
+d 498 4 1 0 0
+c
+d 499 1 0 0 0
+c
+d 168 3 2 0 0
+c
+d 169 3 1 0 0
+c
+d 186 2 0 0 0
+c
+d 213 3 0 0 0
+c
+d 242 1 1 0 0
+c
+d 301 7 2 0 0
+c
+d 620 1 0 0 0
+c
+d 631 1 0 1 0
+c
+d 645 4 0 1 0
+c
+d 10 1 1 0 0
+c
+d 11 1 0 0 0
+c
+d 12 3 1 0 0
+c
+d 743 7 2 0 0
+c
+d 753 1 0 1 0
+c
+d 148 1 0 1 0
+c
+d 225 1 0 0 0
+c
+d 253 6 2 0 0
+c
+d 54 4 1 0 0
+c
+d 719 4 1 0 0
+c
+d 453 3 0 0 0
+c
+d 455 3 0 1 0
+c
+d 356 1 1 0 0
+c
+d 358 4 1 0 0
+c
+d 1022 3 0 1 0
+c
+d 1023 3 1 0 0
+c
+d 119 2 0 1 0
+c
+d 120 1 1 0 0
+c
+d 294 4 2 1 0
+c
+d 295 3 1 0 0
+c
+d 499 2 1 0 0
+c
+d 500 3 0 1 0
+c
+d 604 1 1 0 0
+c
+d 606 1 0 0 0
+c
+d 635 4 1 0 0
+c
+d 637 1 0 0 0
+c
+d 46 1 0 1 0
+c
+d 75 2 1 0 0
+c
+d 86 1 0 0 0
+c
+d 311 4 1 1 0
+c
+d 327 2 1 0 0
+c
+d 334 1 0 1 0
+c
+d 54 7 2 1 0
+c
+d 384 1 1 0 0
+c
+d 1111 7 1 0 0
+c
+d 156 1 0 1 0
+c
+d 162 3 1 1 0
+c
+d 163 2 1 0 0
+c
+d 168 4 1 0 0
+c
+d 377 3 1 0 0
+c
+d 1134 3 1 0 0
+c
+d 5 4 2 0 0
+c
+d 9 2 1 0 0
+c
+d 10 1 0 1 0
+c
+d 655 1 1 0 0
+c
+d 656 4 0 0 0
+c
+d 823 2 1 0 0
+c
+d 903 2 1 0 0
+c
+d 1111 1 0 0 0
+c
+d 1112 1 0 0 0
+c
+d 1113 5 1 0 0
+c
+d 393 1 0 0 0
+c
+d 395 1 0 0 0
+c
+d 396 3 1 0 0
+c
+d 50 5 1 0 0
+c
+d 51 1 0 0 0
+c
+d 724 1 0 0 0
+c
+d 208 5 2 0 0
+c
+d 1244 1 0 1 0
+c
+d 19 4 1 1 0
+c
+d 983 1 0 0 0
+c
+d 19 3 1 1 0
+c
+d 1024 1 1 0 0
+c
+d 272 1 0 0 0
+c
+d 273 2 0 0 0
+c
+d 1229 4 1 0 0
+c
+d 146 7 3 0 0
+c
+d 148 1 0 1 0
+c
+d 301 1 0 0 0
+c
+d 1218 6 1 0 0
+c
+d 1219 2 1 0 0
+c
+d 564 1 1 0 0
+c
+d 789 3 1 0 0
+c
+d 507 4 0 0 0
+c
+d 60 1 1 0 0
+c
+d 1007 4 1 0 0
+c
+d 1008 2 0 0 0
+c
+d 1009 1 0 0 0
+c
+d 838 5 1 0 0
+c
+d 839 2 0 1 0
+c
+d 457 5 1 1 0
+c
+d 465 2 1 0 0
+c
+d 99 3 0 0 0
+c
+d 101 2 0 0 0
+c
+d 91 7 1 1 0
+c
+d 1170 1 0 0 0
+c
+d 1173 2 0 0 0
+c
+d 378 2 0 0 0
+c
+d 1111 6 1 0 0
+c
+d 1112 2 1 0 0
+c
+d 35 1 0 0 0
+c
+d 36 5 2 0 0
+c
+d 37 3 1 0 0
+c
+d 21 1 0 0 0
+c
+d 1021 3 1 0 0
+c
+d 1022 2 0 1 0
+c
+d 1029 2 1 0 0
+c
+d 699 6 1 0 0
+c
+d 715 1 0 0 0
+c
+d 716 1 1 0 0
+c
+d 279 1 0 0 0
+c
+d 1150 5 2 1 0
+c
+d 21 4 1 0 0
+c
+d 1028 1 1 0 0
+c
+d 278 2 1 0 0
+c
+d 1170 2 1 0 0
+c
+d 1173 2 0 1 0
+c
+d 1228 1 0 1 0
+c
+d 332 2 0 0 0
+c
+d 333 4 2 0 0
+c
+d 75 2 0 0 0
+c
+d 806 7 1 1 0
+c
+d 341 2 0 0 0
+c
+d 343 3 2 0 0
+c
+d 437 1 0 0 0
+c
+d 876 3 0 0 0
+c
+d 1173 6 1 0 0
+c
+d 437 3 1 0 0
+c
+d 568 3 1 0 0
+c
+d 569 1 0 1 0
+c
+d 87 3 1 0 0
+c
+d 775 2 1 0 0
+c
+d 882 3 1 0 0
+c
+d 348 6 2 0 0
+c
+d 1145 1 0 0 0
+c
+d 89 1 1 0 0
+c
+d 550 2 1 0 0
+c
+d 551 1 0 0 0
+c
+d 194 2 1 0 0
+c
+d 204 1 0 0 0
+c
+d 205 2 1 0 0
+c
+d 1241 1 0 0 0
+c
+d 88 1 0 0 0
+c
+d 89 3 0 0 0
+c
+d 550 1 0 0 0
+c
+d 7 1 0 0 0
+c
+d 1279 3 0 0 0
+c
+d 299 1 1 0 0
+c
+d 319 2 1 0 0
+c
+d 320 3 0 0 0
+c
+d 321 1 0 0 0
+c
+d 152 4 1 0 0
+c
+d 153 1 0 0 0
+c
+d 157 5 2 0 0
+c
+d 162 3 1 0 0
+c
+d 365 1 0 0 0
+c
+d 75 1 0 0 0
+c
+d 86 1 1 0 0
+c
+d 341 2 1 0 0
+c
+d 348 1 0 1 0
+c
+d 470 2 1 0 0
+c
+d 477 2 0 0 0
+c
+d 168 1 1 0 0
+c
+d 169 4 1 0 0
+c
+d 54 7 2 1 0
+c
+d 697 7 3 0 0
+c
+d 195 1 0 0 0
+c
+d 205 5 1 1 0
+c
+d 211 2 2 0 0
+c
+d 1239 1 0 0 0
+c
+d 594 5 2 0 0
+c
+d 653 2 0 1 0
+c
+d 673 1 0 0 0
+c
+d 4 2 1 0 0
+c
+d 5 2 0 0 0
+c
+d 749 4 1 0 0
+c
+d 261 3 0 0 0
+c
+d 283 1 0 0 0
+c
+d 284 3 0 0 0
+c
+d 799 6 2 0 0
+c
+d 919 1 0 1 0
+c
+d 920 1 0 0 0
+c
+d 101 4 1 0 0
+c
+d 104 1 0 1 0
+c
+d 205 1 0 0 0
+c
+d 206 3 0 0 0
+c
+d 207 1 0 0 0
+c
+d 68 1 0 1 0
+c
+d 69 6 1 0 0
+c
+d 46 3 1 0 0
+c
+d 75 1 0 0 0
+c
+d 157 4 2 1 0
+c
+d 159 1 0 0 0
+c
+d 60 2 1 0 0
+c
+d 1009 5 2 0 0
+c
+d 829 5 1 1 0
+c
+d 835 1 0 0 0
+c
+d 1125 3 1 0 0
+c
+d 1126 3 2 0 0
+c
+d 1127 1 0 0 0
+c
+d 1188 6 2 0 0
+c
+d 1191 1 0 0 0
+c
+d 1168 1 0 0 0
+c
+d 1177 5 2 0 0
+c
+d 1178 1 0 0 0
+c
+d 96 3 0 0 0
+c
+d 111 2 1 0 0
+c
+d 143 1 0 1 0
+c
+d 662 5 2 0 0
+c
+d 663 1 0 1 0
+c
+d 683 1 0 0 0
+c
+d 393 3 0 1 0
+c
+d 395 4 2 0 0
+c
+d 400 1 0 1 0
+c
+d 407 1 0 0 0
+c
+d 74 4 2 1 0
+c
+d 922 1 0 0 0
+c
+d 926 6 2 0 0
+c
+d 734 3 0 1 0
+c
+d 735 4 2 0 0
+c
+d 737 1 0 0 0
+c
+d 1170 6 2 0 0
+c
+d 1173 2 1 0 0
+c
+d 98 1 1 0 0
+c
+d 99 2 1 0 0
+c
+d 100 2 0 0 0
+c
+d 532 2 0 1 0
+c
+d 100 1 0 1 0
+c
+d 990 2 1 0 0
+c
+d 992 3 0 0 0
+c
+d 738 1 0 0 0
+c
+d 745 8 1 0 0
+c
+d 746 1 0 1 0
+c
+d 767 4 1 2 0
+c
+d 558 3 0 0 0
+c
+d 559 1 1 0 0
+c
+d 1059 2 0 0 0
+c
+d 594 1 0 1 0
+c
+d 686 3 1 1 0
+c
+d 738 5 1 0 0
+c
+d 829 2 1 0 0
+c
+d 835 3 1 0 0
+c
+d 836 1 0 0 0
+c
+d 32 2 0 0 0
+c
+d 33 6 2 0 0
+c
+d 12 1 1 0 0
+c
+d 89 4 0 0 0
+c
+d 1266 1 0 0 0
+c
+d 1267 1 0 0 0
+c
+d 855 6 0 0 0
+c
+d 1163 5 0 0 0
+c
+d 806 5 1 0 0
+c
+d 807 1 0 1 0
+c
+d 808 1 0 0 0
+c
+d 737 7 1 1 0
+c
+d 75 4 1 0 0
+c
+d 76 1 0 0 0
+c
+d 111 4 2 0 0
+c
+d 146 2 1 0 0
+c
+d 226 1 0 0 0
+c
+d 799 2 1 0 0
+c
+d 806 2 1 0 0
+c
+d 807 1 0 0 0
+c
+d 86 1 0 0 0
+c
+d 87 1 0 0 0
+c
+d 315 4 1 0 0
+c
+d 324 2 1 0 0
+c
+d 325 1 0 1 0
+c
+d 839 5 1 0 0
+c
+d 841 1 0 0 0
+c
+d 842 2 1 0 0
+c
+d 120 1 1 0 0
+c
+d 126 3 1 0 0
+c
+d 225 3 1 1 0
+c
+d 241 3 0 0 0
+c
+d 18 6 2 2 0
+c
+d 1 1 0 1 0
+c
+d 2 4 2 0 0
+c
+d 3 1 1 0 0
+c
+d 533 1 1 0 0
+c
+d 534 1 0 0 0
+c
+d 532 2 1 0 0
+c
+d 537 2 1 0 0
+c
+d 539 3 0 0 0
+c
+d 1170 5 1 0 0
+c
+d 1185 1 0 1 0
+c
+d 278 3 1 0 0
+c
+d 1156 4 0 0 0
+c
+d 195 3 1 0 0
+c
+d 205 6 2 0 0
+c
+d 206 1 0 0 0
+c
+d 795 2 0 0 0
+c
+d 907 5 1 0 0
+c
+d 52 1 1 0 0
+c
+d 54 2 0 0 0
+c
+d 1303 1 0 0 0
+c
+d 686 3 1 1 0
+c
+d 962 1 0 0 0
+c
+d 963 1 0 0 0
+c
+d 18 3 0 1 0
+c
+d 93 4 1 0 0
+c
+d 551 5 2 1 0
+c
+d 784 1 0 0 0
+c
+d 937 1 0 0 0
+c
+d 938 3 0 0 0
+c
+d 788 5 1 0 0
+c
+d 127 2 0 0 0
+c
+d 128 3 0 0 0
+c
+d 564 4 2 0 0
+c
+d 120 1 0 1 0
+c
+d 125 1 0 0 0
+c
+d 126 5 2 0 0
+c
+d 84 1 0 1 0
+c
+d 1287 3 1 0 0
+c
+d 1289 2 0 0 0
+c
+d 278 1 0 0 0
+c
+d 280 5 0 0 0
+c
+d 734 1 0 0 0
+c
+d 735 2 0 0 0
+c
+d 737 3 1 0 0
+c
+d 738 2 0 1 0
+c
+d 168 1 1 0 0
+c
+d 373 6 2 0 0
+c
+d 487 1 0 0 0
+c
+d 488 2 0 0 0
+c
+d 1303 2 0 0 0
+c
+d 1304 3 0 0 0
+c
+d 324 1 0 1 0
+c
+d 332 2 1 0 0
+c
+d 333 2 1 0 0
+c
+d 339 1 0 1 0
+c
+d 294 6 2 0 0
+c
+d 875 4 0 0 0
+c
+d 876 2 1 0 0
+c
+d 207 2 0 0 0
+c
+d 208 1 1 0 0
+c
+d 209 4 0 1 0
+c
+d 101 4 1 0 0
+c
+d 610 4 1 0 0
+c
+d 599 5 1 0 0
+c
+d 606 1 1 0 0
+c
+d 806 1 0 0 0
+c
+d 906 1 1 0 0
+c
+d 910 4 1 0 0
+c
+d 799 3 1 0 0
+c
+d 806 2 1 0 0
+c
+d 811 4 1 1 0
+c
+d 577 7 1 2 0
+c
+d 88 1 0 0 0
+c
+d 775 4 1 1 0
+c
+d 776 1 1 0 0
+c
+d 778 3 0 0 0
+c
+d 12 1 1 0 0
+c
+d 1272 4 1 0 0
+c
+d 1273 2 0 0 0
+c
+d 622 1 0 0 0
+c
+d 628 3 0 0 0
+c
+d 509 5 1 0 0
+c
+d 517 1 0 1 0
+c
+d 734 5 1 1 0
+c
+d 199 3 0 0 0
+c
+d 211 1 0 0 0
+c
+d 155 6 2 0 0
+c
+d 176 2 1 0 0
+c
+d 307 1 1 0 0
+c
+d 328 5 2 0 0
+c
+d 575 9 1 0 0
+c
+d 577 1 1 0 0
+c
+d 156 3 1 1 0
+c
+d 163 3 1 0 0
+c
+d 400 1 0 0 0
+c
+d 286 5 0 2 0
+c
+d 152 1 0 0 0
+c
+d 413 2 0 0 0
+c
+d 414 3 1 1 0
+c
+d 44 1 1 0 0
+c
+d 45 1 0 0 0
+c
+d 46 3 1 1 0
+c
+d 470 1 0 0 0
+c
+d 477 1 0 0 0
+c
+d 204 1 0 0 0
+c
+d 217 8 2 0 0
+c
+d 663 3 2 0 0
+c
+d 682 1 0 0 0
+c
+d 684 1 0 0 0
+c
+d 241 1 1 0 0
+c
+d 253 5 1 0 0
+c
+d 254 1 0 0 0
+c
+d 101 4 1 0 0
+c
+d 111 2 0 0 0
+c
+d 146 1 0 0 0
+c
+d 369 4 1 0 0
+c
+d 146 3 1 0 0
+c
+d 153 1 0 1 0
+c
+d 437 4 0 0 0
+c
+d 89 1 0 0 0
+c
+d 550 1 1 0 0
+c
+d 217 2 0 1 0
+c
+d 241 3 1 0 0
+c
+d 249 2 0 0 0
+c
+d 253 1 0 0 0
+c
+d 60 2 1 0 0
+c
+d 647 2 1 0 0
+c
+d 62 5 1 0 0
+c
+d 63 1 0 0 0
+c
+d 921 2 1 0 0
+c
+d 926 4 1 0 0
+c
+d 1096 1 0 0 0
+c
+d 1097 4 1 0 0
+c
+d 217 4 2 0 0
+c
+d 1240 1 0 0 0
+c
+d 1241 5 1 0 0
+c
+d 419 1 0 0 0
+c
+d 1080 1 0 0 0
+c
+d 1083 2 1 0 0
+c
+d 1102 1 0 1 0
+c
+d 1009 4 1 0 0
+c
+d 1011 2 1 1 0
+c
+d 578 3 1 0 0
+c
+d 580 2 0 0 0
+c
+d 734 3 1 0 0
+c
+d 736 1 0 1 0
+c
+d 944 3 0 0 0
+c
+d 945 3 0 0 0
+c
+d 1177 4 1 1 0
+c
+d 1178 1 0 0 0
+c
+d 968 4 0 0 0
+c
+d 75 1 1 0 0
+c
+d 84 3 1 1 0
+c
+d 31 5 1 1 0
+c
+d 157 5 0 1 0
+c
+d 175 2 1 0 0
+c
+d 795 7 2 0 0
+c
+d 823 1 0 0 0
+c
+d 825 1 0 1 0
+c
+d 1202 8 1 0 0
+c
+d 148 1 0 0 0
+c
+d 259 4 2 0 0
+c
+d 261 1 0 1 0
+c
+d 1226 1 0 0 0
+c
+d 217 2 1 0 0
+c
+d 241 3 1 0 0
+c
+d 247 1 0 0 0
+c
+d 529 1 1 0 0
+c
+d 550 4 0 0 0
+c
+d 556 1 0 0 0
+c
+d 1156 5 2 0 0
+c
+d 1161 1 0 1 0
+c
+d 1215 2 0 0 0
+c
+d 575 1 0 0 0
+c
+d 686 5 1 0 0
+c
+d 925 1 0 0 0
+c
+d 286 4 1 1 0
+c
+d 291 1 1 0 0
+c
+d 242 3 0 0 0
+c
+d 262 1 1 0 0
+c
+d 699 4 1 1 0
+c
+d 898 1 1 0 0
+c
+d 550 4 1 1 0
+c
+d 554 1 1 0 0
+c
+d 277 1 0 1 0
+c
+d 278 4 1 0 0
+c
+d 50 1 0 0 0
+c
+d 52 1 0 1 0
+c
+d 723 6 1 0 0
+c
+d 593 1 0 1 0
+c
+d 673 1 0 0 0
+c
+d 676 4 1 0 0
+c
+d 677 1 1 0 0
+c
+d 213 4 1 0 0
+c
+d 242 1 1 0 0
+c
+d 301 1 0 1 0
+c
+d 1152 2 1 0 0
+c
+d 1154 1 1 0 0
+c
+d 1155 3 0 0 0
+c
+d 146 2 1 0 0
+c
+d 285 2 0 0 0
+c
+d 1224 3 1 1 0
+c
+d 1255 1 0 0 0
+c
+d 810 4 1 0 0
+c
+d 811 1 1 0 0
+c
+d 806 4 1 0 0
+c
+d 807 1 1 0 0
+c
+d 881 7 1 0 0
+c
+d 615 1 0 1 0
+c
+d 616 2 1 0 0
+c
+d 617 3 1 0 0
+c
+d 985 1 0 1 0
+c
+d 5 1 0 0 0
+c
+d 6 2 1 0 0
+c
+d 12 2 0 1 0
+c
+d 90 1 0 0 0
+c
+d 622 2 0 0 0
+c
+d 625 2 1 0 0
+c
+d 626 1 0 0 0
+c
+d 242 3 2 0 0
+c
+d 262 3 0 0 0
+c
+d 686 4 2 0 0
+c
+d 262 1 1 0 0
+c
+d 270 2 1 0 0
+c
+d 9 4 1 1 0
+c
+d 606 2 1 1 0
+c
+d 607 5 1 0 0
+c
+d 608 1 0 0 0
+c
+d 43 1 0 1 0
+c
+d 44 3 1 0 0
+c
+d 578 9 3 0 0
+c
+d 34 2 1 0 0
+c
+d 1313 4 1 0 0
+c
+d 1115 1 0 0 0
+c
+d 1117 4 1 0 0
+c
+d 1118 2 0 0 0
+c
+d 86 3 0 0 0
+c
+d 167 6 2 0 0
+c
+d 369 1 0 0 0
+c
+d 534 1 0 1 0
+c
+d 536 1 1 0 0
+c
+d 547 4 1 0 0
+c
+d 262 7 1 0 0
+c
+d 278 1 0 0 0
+c
+d 763 2 1 0 0
+c
+d 764 4 1 0 0
+c
+d 767 1 0 1 0
+c
+d 377 1 0 1 0
+c
+d 384 5 2 0 0
+c
+d 1111 1 0 0 0
+c
+d 701 5 1 0 0
+c
+d 712 2 0 0 0
+c
+d 714 2 0 0 0
+c
+d 19 1 1 0 0
+c
+d 966 1 0 0 0
+c
+d 978 1 1 0 0
+c
+d 111 1 0 0 0
+c
+d 1087 3 1 0 0
+c
+d 1089 1 0 0 0
+c
+d 1096 2 0 0 0
+c
+d 108 1 0 0 0
+c
+d 111 4 1 1 0
+c
+d 101 1 0 0 0
+c
+d 111 1 1 0 0
+c
+d 112 6 1 0 0
+c
+d 767 5 1 0 0
+c
+d 890 1 1 0 0
+c
+d 32 1 1 0 0
+c
+d 75 3 1 1 0
+c
+d 1298 2 0 0 0
+c
+d 919 9 3 0 0
+c
+d 921 2 0 0 0
+c
+d 101 4 1 0 0
+c
+d 111 2 1 0 0
+c
+d 146 3 1 1 0
+c
+d 1184 2 1 0 0
+c
+d 1199 1 0 0 0
+c
+d 1200 2 0 0 0
+c
+d 437 3 0 0 0
+c
+d 457 1 0 0 0
+c
+d 195 4 1 0 0
+c
+d 196 2 1 0 0
+c
+d 1246 2 1 0 0
+c
+d 791 1 1 0 0
+c
+d 793 1 0 0 0
+c
+d 794 6 1 0 0
+c
+d 795 1 0 0 0
+c
+d 384 1 0 0 0
+c
+d 392 4 2 0 0
+c
+d 133 4 2 0 0
+c
+d 862 3 1 0 0
+c
+d 863 4 1 0 0
+c
+d 915 1 0 0 0
+c
+d 916 2 0 0 0
+c
+d 919 4 2 0 0
+c
+d 1163 3 1 0 0
+c
+d 1165 3 1 1 0
+c
+d 168 4 0 0 0
+c
+d 369 1 0 0 0
+c
+d 101 2 0 1 0
+c
+d 111 2 1 0 0
+c
+d 113 2 1 0 0
+c
+d 55 1 1 0 0
+c
+d 694 7 1 1 0
+c
+d 745 1 0 0 0
+c
+d 746 4 1 0 0
+c
+d 747 1 0 1 0
+c
+d 99 2 1 1 0
+c
+d 101 2 0 0 0
+c
+d 109 1 0 0 0
+c
+d 467 5 0 0 0
+c
+d 468 2 0 0 0
+c
+d 618 6 2 0 0
+c
+d 638 1 0 0 0
+c
+d 382 2 0 0 0
+c
+d 383 4 1 0 0
+c
+d 746 4 0 0 0
+c
+d 753 3 2 0 0
+c
+d 348 1 0 0 0
+c
+d 352 4 1 1 0
+c
+d 353 1 0 0 0
+c
+d 1060 4 1 0 0
+c
+d 1061 3 1 0 0
+c
+d 19 1 1 0 0
+c
+d 629 4 0 1 0
+c
+d 178 1 0 0 0
+c
+d 181 3 1 1 0
+c
+d 203 1 0 0 0
+c
+d 261 1 0 0 0
+c
+d 284 2 0 0 0
+c
+d 1226 1 0 0 0
+c
+d 705 6 1 0 0
+c
+d 707 1 0 1 0
+c
+d 710 1 0 1 0
+c
+d 1105 1 0 0 0
+c
+d 1106 2 0 0 0
+c
+d 1108 2 1 0 0
+c
+d 1110 4 1 0 0
+c
+d 424 7 2 0 0
+c
+d 1079 1 0 0 0
+c
+d 663 3 0 0 0
+c
+d 681 2 0 0 0
+c
+d 75 4 1 1 0
+c
+d 86 1 0 1 0
+c
+d 70 1 1 0 0
+c
+d 650 6 2 0 0
+c
+d 191 7 1 1 0
+c
+d 437 6 2 0 0
+c
+d 442 1 0 0 0
+c
+d 146 2 1 1 0
+c
+d 233 3 0 0 0
+c
+d 234 2 0 0 0
+c
+d 618 1 1 0 0
+c
+d 638 3 1 0 0
+c
+d 204 5 0 0 0
+c
+d 224 1 0 0 0
+c
+d 301 2 1 0 0
+c
+d 304 3 0 0 0
+c
+d 307 1 0 0 0
+c
+d 1217 2 1 0 0
+c
+d 101 2 0 1 0
+c
+d 1083 1 0 0 0
+c
+d 1084 4 1 0 0
+c
+d 686 6 1 2 0
+c
+d 620 4 1 1 0
+c
+d 1126 1 0 0 0
+c
+d 1127 1 0 1 0
+c
+d 1129 4 1 0 0
+c
+d 145 2 0 0 0
+c
+d 146 1 0 0 0
+c
+d 230 1 1 0 0
+c
+d 237 3 0 0 0
+c
+d 618 9 1 1 0
+c
+d 965 1 0 0 0
+c
+d 973 4 1 0 0
+c
+d 974 1 1 0 0
+c
+d 278 3 2 0 0
+c
+d 1170 2 0 1 0
+c
+d 1173 2 0 0 0
+c
+d 375 1 0 0 0
+c
+d 376 4 1 0 0
+c
+d 377 4 1 0 0
+c
+d 379 1 0 0 0
+c
+d 840 2 1 0 0
+c
+d 842 5 2 0 0
+c
+d 126 6 1 0 0
+c
+d 127 1 0 0 0
+c
+d 12 2 1 0 0
+c
+d 13 4 0 1 0
+c
+d 14 1 1 0 0
+c
+d 1112 1 0 0 0
+c
+d 1113 1 0 0 0
+c
+d 1114 2 1 0 0
+c
+d 1115 1 1 0 0
+c
+d 734 5 1 1 0
+c
+d 737 1 0 0 0
+c
+d 211 5 1 1 0
+c
+d 217 1 0 0 0
+c
+d 241 3 1 0 0
+c
+d 507 3 2 0 0
+c
+d 1070 2 0 0 0
+c
+d 1071 1 0 0 0
+c
+d 556 1 0 1 0
+c
+d 557 1 0 0 0
+c
+d 565 5 0 0 0
+c
+d 567 1 0 0 0
+c
+d 211 7 2 0 0
+c
+d 285 1 1 0 0
+c
+d 286 4 0 1 0
+c
+d 429 4 1 0 0
+c
+d 48 1 0 0 0
+c
+d 49 2 0 0 0
+c
+d 58 1 0 0 0
+c
+d 318 3 1 1 0
+c
+d 320 1 0 1 0
+c
+d 1149 1 0 0 0
+c
+d 532 1 0 1 0
+c
+d 535 4 2 0 0
+c
+d 537 1 0 0 0
+c
+d 797 6 1 1 0
+c
+d 798 2 1 0 0
+c
+d 584 1 0 0 0
+c
+d 585 4 0 0 0
+c
+d 74 7 2 0 0
+c
+d 242 5 1 0 0
+c
+d 578 1 0 0 0
+c
+d 955 7 2 0 0
+c
+d 529 2 1 0 0
+c
+d 530 1 0 0 0
+c
+d 1061 1 1 0 0
+c
+d 1062 2 0 0 0
+c
+d 618 4 1 0 0
+c
+d 621 4 1 0 0
+c
+d 278 1 0 0 0
+c
+d 279 2 0 0 0
+c
+d 305 2 1 0 0
+c
+d 353 3 1 1 0
+c
+d 861 5 0 0 0
+c
+d 1192 1 0 0 0
+c
+d 1194 2 1 0 0
+c
+d 1195 3 0 0 0
+c
+d 650 1 0 0 0
+c
+d 655 2 0 1 0
+c
+d 658 2 1 0 0
+c
+d 661 1 1 0 0
+c
+d 148 2 0 0 0
+c
+d 232 1 0 0 0
+c
+d 259 1 0 0 0
+c
+d 419 5 1 1 0
+c
+d 836 1 0 0 0
+c
+d 838 6 2 1 0
+c
+d 753 7 2 0 0
+c
+d 384 3 0 0 0
+c
+d 392 2 1 0 0
+c
+d 1126 1 0 0 0
+c
+d 1127 3 1 0 0
+c
+d 1131 1 1 0 0
+c
+d 720 4 2 0 0
+c
+d 217 6 1 0 0
+c
+d 241 1 1 0 0
+c
+d 101 7 3 0 0
+c
+d 763 1 0 0 0
+c
+d 767 6 2 1 0
+c
+d 60 1 0 0 0
+c
+d 647 6 1 0 0
+c
+d 660 1 1 0 0
+c
+d 429 1 0 0 0
+c
+d 430 4 1 0 0
+c
+d 432 1 1 0 0
+c
+d 470 2 0 0 0
+c
+d 65 6 1 0 0
+c
+d 763 4 1 0 0
+c
+d 768 3 1 0 0
+c
+d 1110 2 0 1 0
+c
+d 1120 6 1 0 0
+c
+d 973 4 1 0 0
+c
+d 974 1 0 1 0
+c
+d 217 2 0 1 0
+c
+d 225 4 1 0 0
+c
+d 54 2 2 0 0
+c
+d 719 6 1 0 0
+c
+d 252 1 0 0 0
+c
+d 259 2 0 0 0
+c
+d 260 3 0 0 0
+c
+d 534 1 0 1 0
+c
+d 539 3 1 0 0
+c
+d 547 3 1 0 0
+c
+d 507 1 0 1 0
+c
+d 557 4 1 0 0
+c
+d 558 1 1 0 0
+c
+d 262 7 2 0 0
+c
+d 264 1 0 1 0
+c
+d 293 1 0 0 0
+c
+d 582 2 0 0 0
+c
+d 588 3 1 0 0
+c
+d 590 1 0 1 0
+c
+d 1177 2 0 0 0
+c
+d 1184 3 1 1 0
+c
+d 301 2 1 0 0
+c
+d 310 1 0 0 0
+c
+d 311 3 0 0 0
+c
+d 565 2 0 1 0
+c
+d 791 4 2 1 0
+c
+d 507 4 1 1 0
+c
+d 557 5 1 0 0
+c
+d 558 1 0 0 0
+c
+d 26 4 1 0 0
+c
+d 39 3 1 0 0
+c
+d 40 1 0 1 0
+c
+d 1285 3 0 0 0
+c
+d 1286 2 1 0 0
+c
+d 550 5 2 1 0
+c
+d 556 1 0 0 0
+c
+d 278 1 0 0 0
+c
+d 280 3 1 0 0
+c
+d 281 1 0 0 0
+c
+d 259 1 0 1 0
+c
+d 261 7 1 1 0
+c
+d 977 2 0 0 0
+c
+d 980 3 2 0 0
+c
+d 55 3 1 0 0
+c
+d 691 2 0 1 0
+c
+d 694 1 0 1 0
+c
+d 708 1 0 0 0
+c
+d 1185 2 1 0 0
+c
+d 1186 5 1 0 0
+c
+d 1187 2 0 0 0
+c
+d 259 1 0 0 0
+c
+d 262 7 1 0 0
+c
+d 550 1 1 0 0
+c
+d 554 5 1 0 0
+c
+d 753 5 1 1 0
+c
+d 754 1 0 0 0
+c
+d 18 3 0 0 0
+c
+d 997 4 1 0 0
+c
+d 551 5 1 0 0
+c
+d 554 3 1 1 0
+c
+d 193 2 0 0 0
+c
+d 195 4 2 0 0
+c
+d 167 7 1 1 0
+c
+d 199 4 2 0 0
+c
+d 208 2 0 1 0
+c
+d 101 5 1 1 0
+c
+d 753 4 1 1 0
+c
+d 759 1 0 0 0
+c
+d 720 4 0 0 0
+c
+d 723 2 1 0 0
+c
+d 384 4 1 1 0
+c
+d 385 2 1 0 0
+c
+d 218 2 1 0 0
+c
+d 1235 6 2 0 0
+c
+d 419 5 1 1 0
+c
+d 44 1 1 0 0
+c
+d 59 2 0 1 0
+c
+d 1031 1 0 0 0
+c
+d 1032 4 1 0 0
+c
+d 635 4 0 1 0
+c
+d 638 1 1 0 0
+c
+d 28 5 1 0 0
+c
+d 502 1 0 1 0
+c
+d 507 2 1 0 0
+c
+d 508 2 1 0 0
+c
+d 509 2 0 1 0
+c
+d 358 3 0 0 0
+c
+d 359 3 2 0 0
+c
+d 861 3 1 0 0
+c
+d 875 3 1 1 0
+c
+d 437 4 0 0 0
+c
+d 507 1 1 0 0
+c
+d 167 5 0 0 0
+c
+d 395 1 1 0 0
+c
+d 509 2 1 0 0
+c
+d 1071 5 1 0 0
+c
+d 1192 1 1 0 0
+c
+d 1203 1 0 0 0
+c
+d 1207 1 0 0 0
+c
+d 52 1 1 0 0
+c
+d 54 2 0 1 0
+c
+d 1303 2 0 0 0
+c
+d 393 1 0 1 0
+c
+d 407 2 1 0 0
+c
+d 408 4 1 0 0
+c
+d 618 3 1 0 0
+c
+d 620 3 1 0 0
+c
+d 621 1 0 0 0
+c
+d 148 1 0 0 0
+c
+d 252 3 1 0 0
+c
+d 257 2 0 0 0
+c
+d 259 3 1 0 0
+c
+d 602 5 1 0 0
+c
+d 604 1 0 0 0
+c
+d 457 6 3 1 0
+c
+d 724 3 1 1 0
+c
+d 725 4 1 0 0
+c
+d 990 1 0 0 0
+c
+d 994 6 1 0 0
+c
+d 998 3 1 1 0
+c
+d 793 4 0 0 0
+c
+d 795 1 0 0 0
+c
+d 354 2 1 0 0
+c
+d 367 1 0 1 0
+c
+d 615 7 1 1 0
+c
+d 616 2 0 0 0
+c
+d 851 5 1 0 0
+c
+d 304 5 3 0 0
+c
+d 309 1 0 1 0
+c
+d 311 2 0 0 0
+c
+d 1303 2 1 0 0
+c
+d 1304 3 0 1 0
+c
+d 199 2 1 0 0
+c
+d 200 3 1 0 0
+c
+d 201 1 0 0 0
+c
+d 202 2 0 0 0
+c
+d 763 6 1 1 0
+c
+d 767 2 0 1 0
+c
+d 252 1 1 0 0
+c
+d 259 2 1 0 0
+c
+d 260 1 0 0 0
+c
+d 195 1 1 0 0
+c
+d 205 3 1 0 0
+c
+d 211 1 0 0 0
+c
+d 843 4 1 0 0
+c
+d 844 1 0 1 0
+c
+d 469 1 0 1 0
+c
+d 478 6 1 0 0
+c
+d 481 1 0 0 0
+c
+d 414 1 0 0 0
+c
+d 418 3 0 0 0
+c
+d 1087 1 0 0 0
+c
+d 428 1 1 0 0
+c
+d 430 3 1 0 0
+c
+d 334 1 0 1 0
+c
+d 341 4 2 0 0
+c
+d 344 1 0 0 0
+c
+d 242 1 0 0 0
+c
+d 262 2 0 0 0
+c
+d 270 2 1 0 0
+c
+d 272 3 1 1 0
+c
+d 1168 5 1 1 0
+c
+d 1177 1 0 0 0
+c
+d 418 1 1 0 0
+c
+d 419 6 2 0 0
+c
+d 421 2 0 0 0
+c
+d 434 1 0 1 0
+c
+d 129 2 0 0 0
+c
+d 591 3 0 0 0
+c
+d 599 4 1 1 0
+c
+d 602 1 1 0 0
+c
+d 92 4 1 0 0
+c
+d 437 5 1 0 0
+c
+d 493 4 2 0 0
+c
+d 1077 1 0 0 0
+c
+d 301 6 3 0 0
+c
+d 304 3 1 0 0
+c
+d 55 1 0 0 0
+c
+d 691 2 0 0 0
+c
+d 707 1 0 0 0
+c
+d 708 3 0 0 0
+c
+d 1 1 1 0 0
+c
+d 5 1 0 0 0
+c
+d 17 6 1 0 0
+c
+d 159 5 1 0 0
+c
+d 242 1 0 1 0
+c
+d 686 5 0 0 0
+c
+d 437 5 1 1 0
+c
+d 56 1 0 0 0
+c
+d 65 2 0 0 0
+c
+d 1303 5 1 0 0
+c
+d 1304 1 0 0 0
+c
+d 510 2 1 0 0
+c
+d 521 4 1 0 0
+c
+d 369 4 1 1 0
+c
+d 380 2 1 0 0
+c
+d 19 1 0 0 0
+c
+d 977 2 1 0 0
+c
+d 980 1 0 1 0
+c
+d 981 6 0 0 0
+c
+d 599 4 2 0 0
+c
+d 734 3 2 0 0
+c
+d 737 3 0 0 0
+c
+d 833 1 1 0 0
+c
+d 878 1 0 0 0
+c
+d 881 1 0 1 0
+c
+d 882 3 1 0 0
+c
+d 466 9 2 0 0
+c
+d 691 4 1 0 0
+c
+d 708 1 0 1 0
+c
+d 709 1 0 0 0
+c
+d 318 1 0 0 0
+c
+d 1149 3 0 0 0
+c
+d 575 1 0 0 0
+c
+d 926 4 2 0 0
+c
+d 927 5 2 0 0
+c
+d 1016 4 1 0 0
+c
+d 1030 5 2 0 0
+c
+d 6 4 2 0 0
+c
+d 12 1 0 0 0
+c
+d 955 3 1 0 0
+c
+d 956 2 0 1 0
+c
+d 957 4 1 0 0
+c
+d 437 6 2 0 0
+c
+d 494 1 0 0 0
+c
+d 496 2 0 0 0
+c
+d 56 1 0 1 0
+c
+d 60 1 0 1 0
+c
+d 65 1 0 0 0
+c
+d 1306 4 2 0 0
+c
+d 92 1 0 0 0
+c
+d 118 1 0 0 0
+c
+d 119 3 1 0 0
+c
+d 820 1 0 1 0
+c
+d 822 4 2 0 0
+c
+d 823 2 1 0 0
+c
+d 826 1 0 1 0
+c
+d 541 6 1 0 0
+c
+d 542 1 0 0 0
+c
+d 575 3 1 0 0
+c
+d 578 1 1 0 0
+c
+d 930 6 1 0 0
+c
+d 199 9 1 0 0
+c
+d 211 1 0 1 0
+c
+d 146 4 1 0 0
+c
+d 285 3 1 1 0
+c
+d 1255 1 0 0 0
+c
+d 865 1 0 1 0
+c
+d 875 7 1 0 0
+c
+d 75 3 1 0 0
+c
+d 79 2 1 0 0
+c
+d 852 5 1 0 0
+c
+d 853 1 0 0 0
+c
+d 31 1 0 0 0
+c
+d 32 3 1 0 0
+c
+d 1165 5 2 1 0
+c
+d 1166 3 0 0 0
+c
+d 16 4 0 1 0
+c
+d 93 1 1 0 0
+c
+d 559 5 1 0 0
+c
+d 561 1 1 0 0
+c
+d 568 2 0 0 0
+c
+d 904 5 0 0 0
+c
+d 1194 1 0 0 0
+c
+d 1195 5 3 0 0
+c
+d 1080 5 2 0 0
+c
+d 1081 1 0 0 0
+c
+d 168 2 0 1 0
+c
+d 369 5 1 0 0
+c
+d 370 1 1 0 0
+c
+d 419 6 1 0 0
+c
+d 423 1 0 0 0
+c
+d 755 1 0 0 0
+c
+d 762 1 1 0 0
+c
+d 764 2 0 0 0
+c
+d 796 6 1 0 0
+c
+d 797 3 1 0 0
+c
+d 799 1 1 0 0
+c
+d 675 1 0 0 0
+c
+d 676 2 1 0 0
+c
+d 678 4 2 0 0
+c
+d 156 1 0 0 0
+c
+d 400 8 2 0 0
+c
+d 855 7 1 0 0
+c
+d 857 2 0 0 0
+c
+d 860 1 1 0 0
+c
+d 12 1 1 0 0
+c
+d 15 3 1 0 0
+c
+d 16 1 0 0 0
+c
+d 90 4 1 0 0
+c
+d 861 5 1 0 0
+c
+d 865 2 1 0 0
+c
+d 875 1 0 1 0
+c
+d 550 4 1 1 0
+c
+d 551 2 1 0 0
+c
+d 779 1 0 0 0
+c
+d 487 6 1 0 0
+c
+d 580 5 2 0 0
+c
+d 958 1 0 0 0
+c
+d 16 6 2 0 0
+c
+d 93 1 0 1 0
+c
+d 965 2 0 0 0
+c
+d 977 3 1 1 0
+c
+d 262 2 1 0 0
+c
+d 274 1 0 0 0
+c
+d 278 2 1 0 0
+c
+d 437 6 2 0 0
+c
+d 456 1 0 0 0
+c
+d 572 4 1 0 0
+c
+d 1051 1 0 0 0
+c
+d 1052 1 0 0 0
+c
+d 550 1 0 1 0
+c
+d 551 3 1 0 0
+c
+d 554 1 1 0 0
+c
+d 852 3 1 0 0
+c
+d 861 2 0 0 0
+c
+d 787 3 1 0 0
+c
+d 423 3 1 0 0
+c
+d 429 1 0 0 0
+c
+d 432 4 1 1 0
+c
+d 540 1 0 0 0
+c
+d 541 4 1 1 0
+c
+d 341 1 1 0 0
+c
+d 400 8 2 0 0
+c
+d 409 1 0 0 0
+c
+d 1168 4 2 0 0
+c
+d 1170 2 0 0 0
+c
+d 839 1 0 0 0
+c
+d 840 3 1 0 0
+c
+d 841 2 1 0 0
+c
+d 132 3 1 0 0
+c
+d 133 1 1 0 0
+c
+d 493 1 0 0 0
+c
+d 494 3 0 0 0
+c
+d 89 3 1 0 0
+c
+d 532 1 0 1 0
+c
+d 729 4 2 0 0
+c
+d 946 1 0 0 0
+c
+d 947 1 0 0 0
+c
+d 278 4 1 0 0
+c
+d 279 2 1 0 0
+c
+d 305 2 1 0 0
+c
+d 353 1 0 0 0
+c
+d 4 3 1 0 0
+c
+d 5 1 0 0 0
+c
+d 468 6 2 0 0
+c
+d 472 1 0 0 0
+c
+d 101 4 1 0 0
+c
+d 423 1 0 0 0
+c
+d 509 1 0 0 0
+c
+d 1071 2 1 0 0
+c
+d 1072 3 1 0 0
+c
+d 925 2 0 1 0
+c
+d 926 4 1 1 0
+c
+d 572 1 0 0 0
+c
+d 574 1 0 0 0
+c
+d 1051 1 0 1 0
+c
+d 1052 2 1 0 0
+c
+d 1053 3 1 0 0
+c
+d 615 1 1 0 0
+c
+d 616 3 1 0 0
+c
+d 617 3 0 0 0
+c
+d 989 1 0 0 0
+c
+d 111 1 0 0 0
+c
+d 143 4 2 0 0
+c
+d 1150 5 2 0 0
+c
+d 1151 1 0 0 0
+c
+d 69 1 0 0 0
+c
+d 70 3 1 0 0
+c
+d 650 2 0 0 0
+c
+d 656 3 0 0 0
+c
+d 437 1 0 0 0
+c
+d 569 4 0 1 0
+c
+d 1050 1 1 0 0
+c
+d 75 2 1 0 0
+c
+d 1290 5 1 0 0
+c
+d 768 6 1 1 0
+c
+d 88 1 0 0 0
+c
+d 775 2 0 0 0
+c
+d 780 4 0 0 0
+c
+d 719 1 1 0 0
+c
+d 720 6 2 0 0
+c
+d 721 1 0 0 0
+c
+d 722 1 1 0 0
+c
+d 734 1 0 0 0
+c
+d 769 1 0 0 0
+c
+d 939 3 0 0 0
+c
+d 21 7 1 0 0
+c
+d 129 1 0 0 0
+c
+d 131 4 1 1 0
+c
+d 157 5 1 1 0
+c
+d 158 3 1 0 0
+c
+d 75 6 1 0 0
+c
+d 1295 1 1 0 0
+c
+d 204 1 1 0 0
+c
+d 225 4 1 0 0
+c
+d 791 2 1 1 0
+c
+d 826 1 0 0 0
+c
+d 827 2 0 0 0
+c
+d 829 1 0 0 0
+c
+d 686 1 1 0 0
+c
+d 691 1 1 0 0
+c
+d 803 5 0 0 0
+c
+d 565 1 0 0 0
+c
+d 570 1 1 0 0
+c
+d 1056 5 2 0 0
+c
+d 12 1 0 1 0
+c
+d 1266 2 1 0 0
+c
+d 1267 2 1 0 0
+c
+d 1268 3 1 0 0
+c
+d 46 4 1 0 0
+c
+d 159 5 2 0 0
+c
+d 185 1 0 1 0
+c
+d 753 4 1 1 0
+c
+d 755 2 0 0 0
+c
+d 348 6 3 1 0
+c
+d 309 1 0 0 0
+c
+d 311 2 0 0 0
+c
+d 327 5 3 0 0
+c
+d 178 3 1 1 0
+c
+d 181 2 1 0 0
+c
+d 195 2 0 1 0
+c
+d 498 1 0 0 0
+c
+d 499 2 0 0 0
+c
+d 500 3 2 0 0
+c
+d 718 3 2 0 0
+c
+d 720 4 2 0 0
+c
+d 721 2 0 0 0
+c
+d 185 4 0 1 0
+c
+d 186 2 1 0 0
+c
+d 187 1 1 0 0
+c
+d 577 3 0 0 0
+c
+d 578 2 1 0 0
+c
+d 207 5 0 0 0
+c
+d 208 1 0 0 0
+c
+d 775 8 2 0 0
+c
+d 1156 7 2 0 0
+c
+d 274 5 2 0 0
+c
+d 275 1 0 0 0
+c
+d 1230 1 0 0 0
+c
+d 54 10 2 0 0
+c
+d 1312 1 0 0 0
+c
+d 1266 6 2 0 0
+c
+d 1267 1 1 0 0
+c
+d 1268 1 0 0 0
+c
+d 1163 2 0 0 0
+c
+d 1165 1 1 0 0
+c
+d 167 7 2 1 0
+c
+d 419 11 3 0 0
+c
+d 133 3 1 0 0
+c
+d 134 1 0 1 0
+c
+d 511 6 1 0 0
+c
+d 512 1 1 0 0
+c
+d 26 1 0 0 0
+c
+d 28 1 0 0 0
+c
+d 1315 3 0 0 0
+c
+d 393 1 0 1 0
+c
+d 395 3 1 0 0
+c
+d 399 3 0 0 0
+c
+d 608 5 0 0 0
+c
+d 1037 1 0 0 0
+c
+d 133 4 2 1 0
+c
+d 384 5 0 0 0
+c
+d 608 4 0 1 0
+c
+d 610 1 0 1 0
+c
+d 611 2 1 0 0
+c
+d 612 4 1 0 0
+c
+d 789 1 0 0 0
+c
+d 833 5 2 0 0
+c
+d 1073 3 1 1 0
+c
+d 1074 4 1 0 0
+c
+d 5 4 1 1 0
+c
+d 265 1 0 0 0
+c
+d 286 4 0 0 0
+c
+d 686 5 1 1 0
+c
+d 855 6 1 0 0
+c
+d 856 2 0 2 0
+c
+d 716 1 1 0 0
+c
+d 718 3 0 0 0
+c
+d 505 1 0 0 0
+c
+d 506 1 0 0 0
+c
+d 514 6 2 0 0
+c
+d 511 5 1 1 0
+c
+d 551 3 1 0 0
+c
+d 784 4 1 0 0
+c
+d 242 6 2 0 0
+c
+d 243 3 1 0 0
+c
+d 51 1 1 0 0
+c
+d 57 4 0 1 0
+c
+d 455 3 0 0 0
+c
+d 457 1 0 0 0
+c
+d 343 4 1 1 0
+c
+d 133 1 0 0 0
+c
+d 134 1 0 0 0
+c
+d 301 7 2 1 0
+c
+d 610 1 0 0 0
+c
+d 611 1 0 0 0
+c
+d 990 1 0 0 0
+c
+d 145 3 0 0 0
+c
+d 146 1 0 0 0
+c
+d 1256 1 0 0 0
+c
+d 4 8 3 0 0
+c
+d 582 3 1 0 0
+c
+d 583 1 0 0 0
+c
+d 586 1 0 0 0
+c
+d 587 1 1 0 0
+c
+d 602 5 2 1 0
+c
+d 642 1 0 0 0
+c
+d 1184 1 0 0 0
+c
+d 1185 5 1 1 0
+c
+d 532 1 0 0 0
+c
+d 537 4 2 0 0
+c
+d 538 2 1 0 0
+c
+d 799 2 0 0 0
+c
+d 843 4 2 0 0
+c
+d 334 4 1 0 0
+c
+d 340 1 0 0 0
+c
+d 93 2 1 0 0
+c
+d 96 3 1 0 0
+c
+d 437 1 0 0 0
+c
+d 568 2 0 0 0
+c
+d 569 3 1 0 0
+c
+d 572 1 0 1 0
+c
+d 878 4 2 0 0
+c
+d 618 6 1 1 0
+c
+d 620 1 0 0 0
+c
+d 570 6 2 0 0
+c
+d 571 2 0 0 0
+c
+d 838 1 0 0 0
+c
+d 839 6 1 1 0
+c
+d 842 1 0 0 0
+c
+d 218 4 2 1 0
+c
+d 1235 2 0 0 0
+c
+d 157 8 3 2 0
+c
+d 46 3 0 0 0
+c
+d 242 5 2 0 0
+c
+d 101 2 0 1 0
+c
+d 597 5 2 1 0
+c
+d 1017 4 1 1 0
+c
+d 1018 2 0 0 0
+c
+d 994 1 1 0 0
+c
+d 998 5 1 0 0
+c
+d 1170 3 1 0 0
+c
+d 1174 3 1 0 0
+c
+d 1175 1 0 0 0
+c
+d 838 1 0 1 0
+c
+d 839 2 1 0 0
+c
+d 842 4 0 0 0
+c
+d 19 4 1 0 0
+c
+d 622 2 0 0 0
+c
+d 1008 2 2 0 0
+c
+d 859 3 1 1 0
+c
+d 871 2 1 0 0
+c
+d 426 1 0 0 0
+c
+d 591 4 2 0 0
+c
+d 46 3 0 1 0
+c
+d 47 2 1 0 0
+c
+d 58 1 0 1 0
+c
+d 500 3 1 0 0
+c
+d 502 3 2 0 0
+c
+d 50 2 0 0 0
+c
+d 51 3 2 0 0
+c
+d 734 1 0 0 0
+c
+d 395 7 2 0 0
+c
+d 1124 1 0 0 0
+c
+d 46 3 1 0 0
+c
+d 75 2 1 0 0
+c
+d 5 5 1 0 0
+c
+d 10 1 1 0 0
+c
+d 246 4 1 0 0
+c
+d 252 1 0 1 0
+c
+d 411 5 1 0 0
+c
+d 412 1 0 1 0
+c
+d 1043 1 0 0 0
+c
+d 1045 7 2 0 0
+c
+d 93 1 0 0 0
+c
+d 114 4 1 0 0
+c
+d 115 1 1 0 0
+c
+d 163 1 0 0 0
+c
+d 172 6 3 0 0
+c
+d 173 1 0 0 0
+c
+d 620 7 2 0 0
+c
+d 167 4 1 1 0
+c
+d 1106 3 1 1 0
+c
+d 795 4 0 0 0
+c
+d 242 4 1 1 0
+c
+d 301 5 2 0 0
+c
+d 789 5 2 1 0
+c
+d 829 1 0 1 0
+c
+d 196 1 0 0 0
+c
+d 1246 4 1 1 0
+c
+d 1247 3 0 0 0
+c
+d 799 3 1 1 0
+c
+d 915 2 0 0 0
+c
+d 787 5 2 1 0
+c
+d 790 2 1 0 0
+c
+d 275 5 0 0 0
+c
+d 437 4 2 0 0
+c
+d 443 2 0 0 0
+c
+d 75 4 0 0 0
+c
+d 79 1 0 0 0
+c
+d 1300 1 1 0 0
+c
+d 423 1 0 0 0
+c
+d 470 3 1 0 0
+c
+d 477 1 1 0 0
+c
+d 340 3 1 0 0
+c
+d 343 1 0 0 0
+c
+d 437 5 1 0 0
+c
+d 467 1 1 0 0
+c
+d 178 5 2 0 0
+c
+d 179 1 0 0 0
+c
+d 182 1 0 0 0
+c
+d 419 3 1 0 0
+c
+d 423 1 1 0 0
+c
+d 1080 1 0 0 0
+c
+d 155 3 1 0 0
+c
+d 156 2 0 1 0
+c
+d 167 1 0 0 0
+c
+d 395 4 0 0 0
+c
+d 833 2 1 0 0
+c
+d 839 1 0 0 0
+c
+d 842 3 1 0 0
+c
+d 455 1 0 0 0
+c
+d 457 6 2 1 0
+c
+d 578 3 1 0 0
+c
+d 580 2 0 0 0
+c
+d 582 1 0 0 0
+c
+d 622 4 1 1 0
+c
+d 965 2 0 1 0
+c
+d 1201 3 1 0 0
+c
+d 1202 5 1 0 0
+c
+d 340 6 2 2 0
+c
+d 491 1 0 0 0
+c
+d 578 1 0 0 0
+c
+d 955 8 1 0 0
+c
+d 956 1 0 0 0
+c
+d 217 8 2 0 0
+c
+d 211 1 0 0 0
+c
+d 1237 3 2 0 0
+c
+d 1239 3 0 0 0
+c
+d 204 3 1 0 0
+c
+d 217 1 0 0 0
+c
+d 224 1 0 1 0
+c
+d 225 1 1 0 0
+c
+d 755 3 1 1 0
+c
+d 764 1 0 1 0
+c
+d 18 3 2 0 0
+c
+d 30 5 0 0 0
+c
+d 437 5 1 1 0
+c
+d 449 1 0 0 0
+c
+d 157 2 1 0 0
+c
+d 1143 3 0 0 0
+c
+d 551 3 1 1 0
+c
+d 784 3 1 0 0
+c
+d 195 4 0 0 0
+c
+d 205 1 0 0 0
+c
+d 148 5 1 0 0
+c
+d 149 3 1 0 0
+c
+d 153 1 0 0 0
+c
+d 155 2 1 0 0
+c
+d 156 3 1 0 0
+c
+d 591 1 1 0 0
+c
+d 593 2 1 0 0
+c
+d 677 3 0 0 0
+c
+d 678 1 0 0 0
+c
+d 679 2 0 0 0
+c
+d 1318 1 0 0 0
+c
+d 1319 5 1 0 0
+c
+d 1320 3 2 0 0
+c
+d 19 1 0 0 0
+c
+d 982 3 1 1 0
+c
+d 983 3 0 1 0
+c
+d 919 2 1 1 0
+c
+d 921 3 1 0 0
+c
+d 922 3 1 0 0
+c
+d 923 1 0 0 0
+c
+d 156 6 1 0 0
+c
+d 406 2 0 0 0
+c
+d 195 4 1 1 0
+c
+d 127 1 0 0 0
+c
+d 129 2 1 0 0
+c
+d 1260 2 0 0 0
+c
+d 470 1 0 0 0
+c
+d 477 5 2 0 0
+c
+d 479 1 0 0 0
+c
+d 608 1 1 0 0
+c
+d 615 3 1 0 0
+c
+d 1037 4 0 0 0
+c
+d 1038 3 0 0 0
+c
+d 132 1 1 0 0
+c
+d 511 7 2 0 0
+c
+d 60 1 1 0 0
+c
+d 61 8 1 1 0
+c
+d 65 1 0 0 0
+c
+d 355 1 0 1 0
+c
+d 356 1 0 0 0
+c
+d 358 5 0 0 0
+c
+d 437 1 0 0 0
+c
+d 499 4 1 0 0
+c
+d 500 2 1 0 0
+c
+d 502 3 0 0 0
+c
+d 503 1 0 1 0
+c
+d 796 1 0 0 0
+c
+d 813 1 0 0 0
+c
+d 815 4 1 0 0
+c
+d 817 1 1 0 0
+c
+d 274 3 1 0 0
+c
+d 276 2 0 1 0
+c
+d 290 1 0 0 0
+c
+d 157 1 1 0 0
+c
+d 178 2 0 1 0
+c
+d 795 5 2 1 0
+c
+d 907 4 1 0 0
+c
+d 301 1 1 0 0
+c
+d 1156 5 1 0 0
+c
+d 876 1 0 0 0
+c
+d 878 4 1 1 0
+c
+d 1 1 0 0 0
+c
+d 17 3 1 0 0
+c
+d 93 2 1 0 0
+c
+d 95 1 0 1 0
+c
+d 444 1 0 0 0
+c
+d 446 2 0 0 0
+c
+d 447 1 0 0 0
+c
+d 754 1 0 1 0
+c
+d 756 2 1 0 0
+c
+d 763 2 1 0 0
+c
+d 990 6 2 0 0
+c
+d 994 1 0 0 0
+c
+d 91 5 1 0 0
+c
+d 117 1 1 0 0
+c
+d 204 1 0 0 0
+c
+d 224 8 3 0 0
+c
+d 115 4 1 0 0
+c
+d 888 2 1 0 0
+c
+d 890 3 1 0 0
+c
+d 60 1 0 0 0
+c
+d 62 4 1 0 0
+c
+d 63 2 0 0 0
+c
+d 1184 1 0 1 0
+c
+d 1195 3 1 0 0
+c
+d 1197 1 0 0 0
+c
+d 89 4 1 1 0
+c
+d 101 2 0 0 0
+c
+d 108 1 0 0 0
+c
+d 610 3 1 0 0
+c
+d 1005 1 1 0 0
+c
+d 755 3 1 0 0
+c
+d 756 2 1 0 0
+c
+d 757 1 0 1 0
+c
+d 341 5 1 0 0
+c
+d 346 3 1 0 0
+c
+d 594 1 1 0 0
+c
+d 959 5 0 1 0
+c
+d 57 3 0 0 0
+c
+d 59 2 1 0 0
+c
+d 60 1 0 1 0
+c
+d 86 2 0 0 0
+c
+d 87 4 1 1 0
+c
+d 663 7 2 0 0
+c
+d 680 1 0 0 0
+c
+d 157 6 1 2 0
+c
+d 582 1 0 0 0
+c
+d 588 6 1 1 0
+c
+d 589 1 1 0 0
+c
+d 242 5 1 1 0
+c
+d 244 1 0 0 0
+c
+d 353 8 2 0 0
+c
+d 650 1 0 0 0
+c
+d 655 6 1 0 0
+c
+d 656 1 0 0 0
+c
+d 199 8 3 0 0
+c
+d 575 7 1 0 0
+c
+d 796 3 1 1 0
+c
+d 478 1 0 0 0
+c
+d 482 3 0 0 0
+c
+d 487 3 1 0 0
+c
+d 570 1 1 0 0
+c
+d 793 3 1 0 0
+c
+d 795 1 0 0 0
+c
+d 2 3 0 0 0
+c
+d 16 1 0 1 0
+c
+d 418 1 0 0 0
+c
+d 1087 5 0 0 0
+c
+d 1088 1 0 0 0
+c
+d 395 1 0 0 0
+c
+d 1105 1 0 0 0
+c
+d 1106 2 0 0 0
+c
+d 1108 2 0 0 0
+c
+d 1110 4 2 0 0
+c
+d 206 3 0 0 0
+c
+d 207 2 0 0 0
+c
+d 1245 1 1 0 0
+c
+d 135 5 2 0 0
+c
+d 193 4 0 0 0
+c
+d 638 6 2 0 0
+c
+d 787 4 1 1 0
+c
+d 181 1 0 0 0
+c
+d 195 3 1 0 0
+c
+d 203 5 1 0 0
+c
+d 718 1 1 0 0
+c
+d 737 1 0 1 0
+c
+d 846 4 0 0 0
+c
+d 273 2 1 1 0
+c
+d 287 1 0 0 0
+c
+d 153 1 0 0 0
+c
+d 155 2 1 0 0
+c
+d 176 2 1 0 0
+c
+d 194 2 0 0 0
+c
+d 204 1 0 0 0
+c
+d 75 1 0 0 0
+c
+d 86 5 1 0 0
+c
+d 88 1 1 0 0
+c
+d 436 4 1 0 0
+c
+d 437 1 1 0 0
+c
+d 1083 2 0 1 0
+c
+d 1084 3 1 0 0
+c
+d 368 2 1 0 0
+c
+d 1125 5 1 1 0
+c
+d 915 3 0 0 0
+c
+d 916 3 1 0 0
+c
+d 917 1 0 0 0
+c
+d 211 5 2 1 0
+c
+d 1233 1 0 0 0
+c
+d 1234 2 1 0 0
+c
+d 1185 3 2 0 0
+c
+d 1186 1 0 1 0
+c
+d 1192 1 0 0 0
+c
+d 534 5 1 1 0
+c
+d 411 3 1 0 0
+c
+d 415 4 1 0 0
+c
+d 16 2 0 0 0
+c
+d 93 4 2 0 0
+c
+d 278 7 3 1 0
+c
+d 1156 1 0 0 0
+c
+d 49 5 1 0 0
+c
+d 734 4 3 0 0
+c
+d 115 1 0 1 0
+c
+d 116 1 1 0 0
+c
+d 118 5 1 1 0
+c
+d 1261 1 0 0 0
+c
+d 307 1 0 0 0
+c
+d 308 1 0 0 0
+c
+d 327 3 1 0 0
+c
+d 328 1 1 0 0
+c
+d 1009 8 3 1 0
+c
+d 251 1 0 0 0
+c
+d 253 2 1 0 0
+c
+d 256 1 0 1 0
+c
+d 341 1 0 1 0
+c
+d 423 5 1 0 0
+c
+d 801 3 0 0 0
+c
+d 802 1 0 0 0
+c
+d 753 5 1 1 0
+c
+d 755 2 0 0 0
+c
+d 756 1 0 0 0
+c
+d 498 1 1 0 0
+c
+d 499 3 1 0 0
+c
+d 504 5 1 0 0
+c
+d 36 2 0 0 0
+c
+d 37 2 1 0 0
+c
+d 38 2 1 0 0
+c
+d 556 1 0 0 0
+c
+d 557 2 0 0 0
+c
+d 565 2 0 0 0
+c
+d 606 3 0 1 0
+c
+d 635 3 1 0 0
+c
+d 636 1 0 0 0
+c
+d 599 8 2 1 0
+c
+d 575 1 0 1 0
+c
+d 796 3 1 1 0
+c
+d 797 1 0 0 0
+c
+d 242 1 0 1 0
+c
+d 262 2 1 0 0
+c
+d 270 1 0 1 0
+c
+d 738 7 1 0 0
+c
+d 854 1 0 0 0
+c
+d 286 5 1 0 0
+c
+d 784 1 0 0 0
+c
+d 785 2 0 0 0
+c
+d 167 1 0 0 0
+c
+d 369 6 3 0 0
+c
+d 382 1 0 1 0
+c
+d 846 1 1 0 0
+c
+d 854 6 2 0 0
+c
+d 218 7 2 0 0
+c
+d 1235 2 0 1 0
+c
+d 21 1 0 0 0
+c
+d 1024 2 1 0 0
+c
+d 1027 3 0 0 0
+c
+d 1028 1 0 0 0
+c
+d 1185 8 2 0 0
+c
+d 400 3 1 0 0
+c
+d 407 1 0 0 0
+c
+d 408 4 1 0 0
+c
+d 876 4 2 0 0
+c
+d 878 4 0 0 0
+c
+d 133 3 1 1 0
+c
+d 294 4 2 0 0
+c
+d 829 6 2 2 0
+c
+d 633 1 0 0 0
+c
+d 634 5 0 0 0
+c
+d 635 1 0 0 0
+c
+d 341 2 1 0 0
+c
+d 347 4 0 0 0
+c
+d 423 1 0 1 0
+c
+d 470 1 0 0 0
+c
+d 152 2 1 0 0
+c
+d 153 3 1 0 0
+c
+d 413 1 0 0 0
+c
+d 287 7 1 0 0
+c
+d 1179 2 1 0 0
+c
+d 1180 2 0 0 0
+c
+d 1181 3 1 0 0
+c
+d 60 4 1 0 0
+c
+d 61 1 0 1 0
+c
+d 647 1 0 0 0
+c
+d 7 1 0 0 0
+c
+d 9 1 0 0 0
+c
+d 10 6 1 0 0
+c
+d 278 6 1 0 0
+c
+d 279 1 0 0 0
+c
+d 720 1 0 1 0
+c
+d 726 1 0 0 0
+c
+d 727 7 2 0 0
+c
+d 606 1 0 1 0
+c
+d 608 2 1 0 0
+c
+d 1041 3 0 0 0
+c
+d 341 3 1 0 0
+c
+d 437 4 1 1 0
+c
+d 443 1 0 0 0
+c
+d 133 4 1 0 0
+c
+d 294 2 0 1 0
+c
+d 298 2 1 0 0
+c
+d 1112 1 0 1 0
+c
+d 1114 4 2 0 0
+c
+d 1115 2 1 0 0
+c
+d 1117 1 0 1 0
+c
+d 353 4 0 0 0
+c
+d 827 7 2 0 0
+c
+d 828 1 1 0 0
+c
+d 787 1 0 0 0
+c
+d 882 3 0 0 0
+c
+d 883 2 0 0 0
+c
+d 49 5 1 2 0
+c
+d 734 1 0 0 0
+c
+d 167 1 0 0 0
+c
+d 1121 3 2 0 0
+c
+d 1122 2 0 0 0
+c
+d 211 8 2 0 0
+c
+d 146 4 2 0 0
+c
+d 153 2 0 0 0
+c
+d 767 1 0 0 0
+c
+d 890 5 2 0 0
+c
+d 156 3 1 1 0
+c
+d 400 1 0 0 0
+c
+d 405 1 0 0 0
+c
+d 406 1 0 0 0
+c
+d 157 5 2 0 0
+c
+d 175 1 0 0 0
+c
+d 1105 1 0 0 0
+c
+d 1106 4 0 0 0
+c
+d 1108 3 1 0 0
+c
+d 1110 1 1 0 0
+c
+d 305 5 2 0 0
+c
+d 1150 2 0 0 0
+c
+d 7 2 0 0 0
+c
+d 1279 2 1 0 0
+c
+d 1280 2 1 0 0
+c
+d 1281 1 0 1 0
+c
+d 146 6 2 0 0
+c
+d 148 1 0 0 0
+c
+d 507 1 1 0 0
+c
+d 1071 2 0 0 0
+c
+d 1072 1 0 0 0
+c
+d 211 4 2 0 0
+c
+d 242 2 0 1 0
+c
+d 1231 1 0 0 0
+c
+d 574 3 1 0 0
+c
+d 575 1 0 0 0
+c
+d 796 2 1 0 0
+c
+d 815 1 0 1 0
+c
+d 738 6 2 0 0
+c
+d 919 1 0 0 0
+c
+d 921 7 2 0 0
+c
+d 922 1 0 1 0
+c
+d 699 1 0 0 0
+c
+d 715 5 2 0 0
+c
+d 157 6 3 0 0
+c
+d 159 1 0 0 0
+c
+d 597 5 2 0 0
+c
+d 101 7 2 0 0
+c
+d 1080 1 0 1 0
+c
+d 1081 1 0 0 0
+c
+d 13 1 0 1 0
+c
+d 16 6 1 0 0
+c
+d 90 1 0 0 0
+c
+d 965 4 1 1 0
+c
+d 982 1 0 1 0
+c
+d 26 1 1 0 0
+c
+d 28 2 1 0 0
+c
+d 29 1 0 1 0
+c
+d 749 4 1 0 0
+c
+d 167 7 1 0 0
+c
+d 369 3 1 0 0
+c
+d 591 5 2 0 0
+c
+d 593 4 1 0 0
+c
+d 40 3 0 0 0
+c
+d 41 2 0 0 0
+c
+d 42 1 0 0 0
+c
+d 167 4 1 0 0
+c
+d 395 4 1 0 0
+c
+d 763 1 0 0 0
+c
+d 767 4 2 0 0
+c
+d 301 4 2 0 0
+c
+d 661 1 1 0 0
+c
+d 662 2 1 0 0
+c
+d 667 6 1 0 0
+c
+d 156 3 1 0 0
+c
+d 163 1 0 1 0
+c
+d 551 2 1 0 0
+c
+d 775 4 1 1 0
+c
+d 779 1 0 0 0
+c
+d 534 2 1 0 0
+c
+d 545 3 0 0 0
+c
+d 132 5 1 0 0
+c
+d 133 1 1 0 0
+c
+d 184 1 1 0 0
+c
+d 196 6 2 0 0
+c
+d 1235 1 0 0 0
+c
+d 1237 2 1 0 0
+c
+d 1239 4 1 0 0
+c
+d 791 1 1 0 0
+c
+d 823 1 0 1 0
+c
+d 826 5 2 0 0
+c
+d 299 1 0 0 0
+c
+d 319 2 0 0 0
+c
+d 320 2 0 0 0
+c
+d 788 7 1 0 0
+c
+d 789 1 1 0 0
+c
+d 620 3 0 0 0
+c
+d 621 3 2 0 0
+c
+d 753 3 0 0 0
+c
+d 943 1 0 0 0
+c
+d 181 1 0 0 0
+c
+d 193 7 2 0 0
+c
+d 618 4 0 0 0
+c
+d 621 3 2 1 0
+c
+d 299 2 0 0 0
+c
+d 318 1 1 0 0
+c
+d 319 2 0 0 0
+c
+d 320 1 0 1 0
+c
+d 274 2 1 0 0
+c
+d 275 3 0 1 0
+c
+d 277 1 0 0 0
+c
+d 7 5 1 0 0
+c
+d 1266 1 1 0 0
+c
+d 1269 2 1 0 0
+c
+d 101 5 2 1 0
+c
+d 100 4 0 0 0
+c
+d 1005 1 1 0 0
+c
+d 1006 2 0 0 0
+c
+d 95 2 0 1 0
+c
+d 99 1 0 0 0
+c
+d 1003 9 1 0 0
+c
+d 437 2 0 0 0
+c
+d 444 3 1 0 0
+c
+d 157 1 1 0 0
+c
+d 159 4 1 0 0
+c
+d 178 2 0 0 0
+c
+d 334 3 1 0 0
+c
+d 335 3 0 0 0
+c
+d 157 3 0 0 0
+c
+d 305 2 1 0 0
+c
+d 1140 2 0 1 0
+c
+d 716 1 0 0 0
+c
+d 718 4 1 0 0
+c
+d 731 3 1 0 0
+c
+d 101 6 2 0 0
+c
+d 1085 2 0 0 0
+c
+d 304 1 1 0 0
+c
+d 309 1 0 0 0
+c
+d 311 4 1 0 0
+c
+d 575 6 1 0 0
+c
+d 686 1 0 0 0
+c
+d 211 7 2 0 0
+c
+d 1237 2 1 0 0
+c
+d 1238 1 0 0 0
+c
+d 554 1 0 1 0
+c
+d 555 3 1 0 0
+c
+d 55 1 1 0 0
+c
+d 694 6 0 0 0
+c
+d 395 1 0 0 0
+c
+d 1106 2 1 0 0
+c
+d 1107 2 1 0 0
+c
+d 437 1 0 0 0
+c
+d 443 1 1 0 0
+c
+d 445 3 0 0 0
+c
+d 449 3 1 1 0
+c
+d 796 2 1 0 0
+c
+d 797 2 0 1 0
+c
+d 965 5 2 1 0
+c
+d 87 5 2 1 0
+c
+d 89 2 0 0 0
+c
+d 727 1 0 0 0
+c
+d 728 2 0 0 0
+c
+d 733 2 0 0 0
+c
+d 734 3 0 0 0
+c
+d 353 4 0 0 0
+c
+d 1138 1 1 0 0
+c
+d 1139 2 1 0 0
+c
+d 418 3 1 0 0
+c
+d 419 2 1 0 0
+c
+d 433 1 0 0 0
+c
+d 734 7 2 2 0
+c
+d 155 1 0 0 0
+c
+d 156 4 2 0 0
+c
+d 157 1 0 1 0
+c
+d 75 4 2 0 0
+c
+d 148 1 1 0 0
+c
+d 259 4 0 0 0
+c
+d 1226 1 0 0 0
+c
+d 357 6 2 0 0
+c
+d 207 1 0 0 0
+c
+d 208 1 0 0 0
+c
+d 209 1 1 0 0
+c
+d 1245 4 2 0 0
+c
+d 965 9 2 2 0
+c
+d 970 1 0 0 0
+c
+d 753 3 1 1 0
+c
+d 859 4 1 0 0
+c
+d 861 1 0 0 0
+c
+d 768 1 0 0 0
+c
+d 769 5 1 0 0
+c
+d 889 1 1 0 0
+c
+d 419 2 0 1 0
+c
+d 1080 3 0 0 0
+c
+d 743 1 1 0 0
+c
+d 744 1 0 0 0
+c
+d 746 4 0 0 0
+c
+d 716 3 1 0 0
+c
+d 718 4 1 1 0
+c
+d 799 3 2 0 0
+c
+d 806 4 0 0 0
+c
+d 32 4 1 1 0
+c
+d 602 3 0 0 0
+c
+d 604 4 2 0 0
+c
+d 1185 2 1 0 0
+c
+d 1201 4 2 0 0
+c
+d 1202 1 0 1 0
+c
+d 188 1 1 0 0
+c
+d 199 3 1 0 0
+c
+d 211 1 0 0 0
+c
+d 212 3 0 0 0
+c
+d 565 3 1 0 0
+c
+d 791 3 1 0 0
+c
+d 793 1 0 0 0
+c
+d 608 1 0 0 0
+c
+d 614 1 0 0 0
+c
+d 615 6 1 1 0
+c
+d 167 1 0 0 0
+c
+d 369 3 1 0 0
+c
+d 382 3 1 0 0
+c
+d 383 1 0 1 0
+c
+d 1163 3 1 0 0
+c
+d 1164 1 0 0 0
+c
+d 1165 3 1 0 0
+c
+d 152 2 0 1 0
+c
+d 1254 6 0 0 0
+c
+d 285 4 1 0 0
+c
+d 1224 1 1 0 0
+c
+d 111 1 0 1 0
+c
+d 146 2 1 0 0
+c
+d 148 3 0 0 0
+c
+d 229 2 0 0 0
+c
+d 239 1 1 0 0
+c
+d 694 2 0 0 0
+c
+d 695 3 1 1 0
+c
+d 696 3 0 0 0
+c
+d 505 6 1 1 0
+c
+d 132 1 0 0 0
+c
+d 513 9 2 1 0
+c
+d 523 1 0 0 0
+c
+d 24 1 0 0 0
+c
+d 26 5 2 0 0
+c
+d 39 1 0 0 0
+c
+d 50 4 1 1 0
+c
+d 51 4 1 0 0
+c
+d 52 1 0 0 0
+c
+d 1286 1 0 0 0
+c
+d 1291 4 1 0 0
+c
+d 142 1 1 0 0
+c
+d 143 2 0 0 0
+c
+d 145 1 0 0 0
+c
+d 578 1 0 1 0
+c
+d 1043 5 1 0 0
+c
+d 1044 1 0 0 0
+c
+d 1126 2 0 0 0
+c
+d 591 2 0 0 0
+c
+d 595 7 2 0 0
+c
+d 690 1 0 0 0
+c
+d 705 3 0 0 0
+c
+d 710 1 0 0 0
+c
+d 262 1 0 1 0
+c
+d 264 4 1 0 0
+c
+d 285 3 0 0 0
+c
+d 858 1 0 1 0
+c
+d 872 9 3 1 0
+c
+d 873 1 0 0 0
+c
+d 46 2 0 0 0
+c
+d 775 2 1 1 0
+c
+d 529 8 3 0 0
+c
+d 1067 1 0 1 0
+c
+d 1068 1 0 0 0
+c
+d 348 5 1 1 0
+c
+d 363 4 1 0 0
+c
+d 1192 4 1 1 0
+c
+d 602 1 0 1 0
+c
+d 662 7 3 0 0
+c
+d 675 1 0 0 0
+c
+d 12 3 0 0 0
+c
+d 1272 4 0 0 0
+c
+d 1273 1 0 0 0
+c
+d 359 1 0 0 0
+c
+d 360 3 0 0 0
+c
+d 364 1 1 0 0
+c
+d 211 3 1 0 0
+c
+d 1231 3 2 0 0
+c
+d 1303 1 0 0 0
+c
+d 1304 4 0 0 0
+c
+d 311 4 0 0 0
+c
+d 327 2 0 0 0
+c
+d 301 4 1 0 0
+c
+d 315 1 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 1195 4 1 2 0
+c
+d 279 2 0 0 0
+c
+d 305 4 1 0 0
+c
+d 306 1 0 0 0
+c
+d 1150 2 1 0 0
+c
+d 21 5 2 0 0
+c
+d 424 3 1 1 0
+c
+d 591 1 1 0 0
+c
+d 394 3 0 0 0
+c
+d 1111 2 1 0 0
+c
+d 1113 1 0 1 0
+c
+d 156 5 3 0 0
+c
+d 163 3 1 0 0
+c
+d 1249 1 0 0 0
+c
+d 274 1 0 0 0
+c
+d 275 7 4 0 0
+c
+d 661 1 0 0 0
+c
+d 667 2 0 1 0
+c
+d 668 2 1 0 0
+c
+d 669 1 0 1 0
+c
+d 437 3 0 1 0
+c
+d 558 3 1 0 0
+c
+d 51 1 0 0 0
+c
+d 52 4 0 0 0
+c
+d 1303 2 0 0 0
+c
+d 558 1 1 0 0
+c
+d 559 4 2 0 0
+c
+d 568 1 0 0 0
+c
+d 852 1 0 0 0
+c
+d 853 3 0 0 0
+c
+d 896 1 0 0 0
+c
+d 965 4 1 1 0
+c
+d 763 7 3 0 0
+c
+d 768 2 0 0 0
+c
+d 773 1 0 0 0
+c
+d 18 3 0 1 0
+c
+d 93 2 0 1 0
+c
+d 1263 1 1 0 0
+c
+d 715 5 1 0 0
+c
+d 716 5 2 0 0
+c
+d 217 1 0 0 0
+c
+d 218 1 1 0 0
+c
+d 1237 1 0 1 0
+c
+d 1240 2 0 0 0
+c
+d 1241 1 0 0 0
+c
+d 50 2 0 1 0
+c
+d 51 5 1 0 0
+c
+d 52 1 1 0 0
+c
+d 754 1 1 0 0
+c
+d 755 1 0 0 0
+c
+d 756 6 1 0 0
+c
+d 311 3 2 0 0
+c
+d 327 2 0 0 0
+c
+d 334 1 0 0 0
+c
+d 748 3 1 1 0
+c
+d 749 2 0 1 0
+c
+d 1080 3 0 0 0
+c
+d 1082 3 2 0 0
+c
+d 551 5 2 0 0
+c
+d 564 1 0 0 0
+c
+d 4 2 0 0 0
+c
+d 5 1 1 0 0
+c
+d 6 4 1 0 0
+c
+d 211 6 3 0 0
+c
+d 242 1 0 1 0
+c
+d 835 7 3 0 0
+c
+d 836 2 1 0 0
+c
+d 1165 4 1 0 0
+c
+d 1168 1 0 0 0
+c
+d 1008 5 2 0 0
+c
+d 1010 3 0 0 0
+c
+d 1013 1 0 0 0
+c
+d 286 2 1 0 0
+c
+d 1223 6 1 0 0
+c
+d 75 2 1 0 0
+c
+d 436 1 1 0 0
+c
+d 578 1 1 0 0
+c
+d 1043 6 0 0 0
+c
+d 246 1 0 1 0
+c
+d 248 4 1 0 0
+c
+d 249 1 0 0 0
+c
+d 250 1 0 0 0
+c
+d 91 4 2 0 0
+c
+d 1265 3 0 0 0
+c
+d 341 1 0 0 0
+c
+d 402 2 1 0 0
+c
+d 404 1 1 0 0
+c
+d 405 1 0 0 0
+c
+d 411 1 0 0 0
+c
+d 301 7 3 0 0
+c
+d 1 2 0 0 0
+c
+d 4 1 0 0 0
+c
+d 5 5 2 0 0
+c
+d 7 3 1 0 0
+c
+d 1283 4 0 0 0
+c
+d 1284 1 0 1 0
+c
+d 443 4 1 0 0
+c
+d 444 5 1 0 0
+c
+d 724 1 0 1 0
+c
+d 734 5 1 0 0
+c
+d 426 1 1 0 0
+c
+d 591 3 1 1 0
+c
+d 243 6 2 0 0
+c
+d 248 1 0 1 0
+c
+d 878 5 3 0 0
+c
+d 882 1 0 0 0
+c
+d 86 1 0 0 0
+c
+d 88 4 0 0 0
+c
+d 842 8 1 0 0
+c
+d 875 1 1 0 0
+c
+d 878 1 1 0 0
+c
+d 419 2 0 0 0
+c
+d 1080 3 0 0 0
+c
+d 168 1 0 0 0
+c
+d 369 5 1 0 0
+c
+d 100 5 1 1 0
+c
+d 1005 2 0 0 0
+c
+d 206 1 0 0 0
+c
+d 207 8 2 0 0
+c
+d 209 1 0 0 0
+c
+d 457 6 2 0 0
+c
+d 466 1 0 0 0
+c
+d 93 4 1 1 0
+c
+d 114 1 0 0 0
+c
+d 51 5 1 1 0
+c
+d 52 2 0 1 0
+c
+d 799 6 1 0 0
+c
+d 479 3 0 0 0
+c
+d 480 1 0 0 0
+c
+d 301 4 2 0 0
+c
+d 1156 1 0 0 0
+c
+d 21 1 1 0 0
+c
+d 24 3 1 0 0
+c
+d 25 3 0 0 0
+c
+d 261 1 0 0 0
+c
+d 262 5 2 0 0
+c
+d 263 1 1 0 0
+c
+d 283 1 0 0 0
+c
+d 146 1 1 0 0
+c
+d 1097 4 1 0 0
+c
+d 1098 4 1 0 0
+c
+d 1158 1 0 1 0
+c
+d 1163 3 1 0 0
+c
+d 811 1 0 1 0
+c
+d 813 3 0 0 0
+c
+d 815 5 2 0 0
+c
+d 816 1 0 0 0
+c
+d 602 7 1 0 0
+c
+d 675 1 0 0 0
+c
+d 676 1 0 0 0
+c
+d 529 1 0 1 0
+c
+d 550 2 1 0 0
+c
+d 1069 4 2 0 0
+c
+d 348 1 0 0 0
+c
+d 349 1 0 0 0
+c
+d 1145 2 1 1 0
+c
+d 1173 7 2 0 0
+c
+d 46 7 2 1 0
+c
+d 1313 2 1 0 0
+c
+d 1168 1 0 0 0
+c
+d 1179 1 0 0 0
+c
+d 153 1 0 0 0
+c
+d 155 3 1 0 0
+c
+d 156 3 1 1 0
+c
+d 606 8 4 0 0
+c
+d 348 7 2 0 0
+c
+d 93 1 0 1 0
+c
+d 114 3 1 0 0
+c
+d 127 1 0 0 0
+c
+d 91 5 2 2 0
+c
+d 92 1 0 0 0
+c
+d 167 7 2 1 0
+c
+d 369 1 0 0 0
+c
+d 101 4 1 0 0
+c
+d 107 3 0 1 0
+c
+d 305 6 2 1 0
+c
+d 50 3 1 1 0
+c
+d 51 2 0 0 0
+c
+d 57 3 0 0 0
+c
+d 75 1 0 0 0
+c
+d 84 3 1 1 0
+c
+d 1294 3 1 0 0
+c
+d 164 6 1 0 0
+c
+d 165 1 0 0 0
+c
+d 166 1 1 0 0
+c
+d 162 1 1 0 0
+c
+d 171 2 1 1 0
+c
+d 172 2 0 0 0
+c
+d 155 1 0 0 0
+c
+d 156 2 0 0 0
+c
+d 157 3 1 0 0
+c
+d 176 1 1 0 0
+c
+d 49 1 0 0 0
+c
+d 50 5 1 1 0
+c
+d 51 1 0 1 0
+c
+d 608 9 1 0 0
+c
+d 609 1 1 0 0
+c
+d 1233 4 0 0 0
+c
+d 1234 1 0 0 0
+c
+d 756 1 1 0 0
+c
+d 768 4 1 0 0
+c
+d 301 7 2 0 0
+c
+d 1220 1 1 0 0
+c
+d 437 2 1 0 0
+c
+d 575 3 0 1 0
+c
+d 576 3 0 0 0
+c
+d 262 1 0 0 0
+c
+d 268 4 1 0 0
+c
+d 270 1 0 0 0
+c
+d 46 3 1 0 0
+c
+d 75 1 0 0 0
+c
+d 93 4 1 1 0
+c
+d 114 1 1 0 0
+c
+d 115 1 0 0 0
+c
+d 120 1 0 1 0
+c
+d 60 3 1 0 0
+c
+d 623 6 1 0 0
+c
+d 624 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 159 5 1 1 0
+c
+d 178 1 1 0 0
+c
+d 691 1 0 0 0
+c
+d 700 3 0 0 0
+c
+d 701 2 0 0 0
+c
+d 301 1 0 0 0
+c
+d 1156 1 0 1 0
+c
+d 1212 2 2 0 0
+c
+d 1213 3 1 0 0
+c
+d 1156 1 0 0 0
+c
+d 1192 5 3 0 0
+c
+d 1194 1 0 0 0
+c
+d 436 6 0 1 0
+c
+d 428 1 1 0 0
+c
+d 436 3 1 0 0
+c
+d 437 3 0 0 0
+c
+d 18 3 1 0 0
+c
+d 32 1 0 1 0
+c
+d 77 1 0 0 0
+c
+d 95 1 1 0 0
+c
+d 111 1 1 0 0
+c
+d 229 2 0 1 0
+c
+d 231 2 1 0 0
+c
+d 301 4 1 0 0
+c
+d 313 3 1 0 0
+c
+d 1156 4 2 0 0
+c
+d 1160 1 0 0 0
+c
+d 1195 1 0 1 0
+c
+d 842 2 1 1 0
+c
+d 878 3 1 0 0
+c
+d 881 1 0 0 0
+c
+d 1185 1 1 0 0
+c
+d 1191 1 0 1 0
+c
+d 1192 4 1 1 0
+c
+d 1207 1 0 0 0
+c
+d 796 5 2 0 0
+c
+d 167 1 0 0 0
+c
+d 369 2 1 0 0
+c
+d 373 1 0 0 0
+c
+d 54 4 0 1 0
+c
+d 55 1 1 0 0
+c
+d 157 5 1 0 0
+c
+d 365 3 0 0 0
+c
+d 529 3 1 0 0
+c
+d 530 4 1 0 0
+c
+d 531 1 1 0 0
+c
+d 382 7 1 0 0
+c
+d 388 1 1 0 0
+c
+d 686 1 0 0 0
+c
+d 805 1 0 0 0
+c
+d 915 6 1 0 0
+c
+d 919 4 2 0 0
+c
+d 162 3 1 0 0
+c
+d 368 3 2 0 0
+c
+d 19 6 1 0 0
+c
+d 20 1 1 0 0
+c
+d 965 1 0 1 0
+c
+d 51 1 0 0 0
+c
+d 52 1 1 0 0
+c
+d 56 5 1 0 0
+c
+d 176 1 0 0 0
+c
+d 194 5 1 0 0
+c
+d 204 1 0 1 0
+c
+d 224 2 0 0 0
+c
+d 990 3 0 0 0
+c
+d 991 3 1 0 0
+c
+d 992 1 0 0 0
+c
+d 1 5 1 0 0
+c
+d 1323 2 1 0 0
+c
+d 888 4 0 0 0
+c
+d 892 1 0 0 0
+c
+d 802 3 0 0 0
+c
+d 803 3 1 0 0
+c
+d 437 4 1 0 0
+c
+d 457 3 1 0 0
+c
+d 458 1 1 0 0
+c
+d 294 1 1 0 0
+c
+d 298 4 1 1 0
+c
+d 323 3 1 0 0
+c
+d 1194 5 1 2 0
+c
+d 558 3 0 0 0
+c
+d 565 1 0 0 0
+c
+d 796 1 0 0 0
+c
+d 815 2 0 1 0
+c
+d 817 3 2 0 0
+c
+d 46 1 1 0 0
+c
+d 75 4 1 0 0
+c
+d 340 2 1 1 0
+c
+d 344 4 0 0 0
+c
+d 908 7 2 0 0
+c
+d 622 10 2 1 0
+c
+d 120 1 0 0 0
+c
+d 124 4 1 0 0
+c
+d 591 1 0 0 0
+c
+d 602 4 1 0 0
+c
+d 603 3 0 0 0
+c
+d 753 2 0 1 0
+c
+d 943 6 1 0 0
+c
+d 1168 2 1 0 0
+c
+d 1170 1 1 0 0
+c
+d 1183 1 0 1 0
+c
+d 854 3 1 1 0
+c
+d 855 4 1 0 0
+c
+d 857 2 0 0 0
+c
+d 842 5 1 1 0
+c
+d 878 1 0 0 0
+c
+d 880 1 1 0 0
+c
+d 427 1 0 0 0
+c
+d 428 3 0 0 0
+c
+d 430 1 0 0 0
+c
+d 575 2 0 0 0
+c
+d 1043 1 0 1 0
+c
+d 1044 7 2 0 0
+c
+d 217 4 1 1 0
+c
+d 218 1 0 0 0
+c
+d 511 8 2 0 0
+c
+d 1 1 0 0 0
+c
+d 1323 4 0 0 0
+c
+d 507 4 0 1 0
+c
+d 1070 1 1 0 0
+c
+d 55 1 0 1 0
+c
+d 66 2 1 0 0
+c
+d 67 4 1 0 0
+c
+d 823 1 1 0 0
+c
+d 827 2 0 0 0
+c
+d 901 2 1 1 0
+c
+d 902 1 0 0 0
+c
+d 615 1 0 0 0
+c
+d 616 4 1 1 0
+c
+d 1037 1 0 0 0
+c
+d 836 6 3 0 0
+c
+d 146 3 1 0 0
+c
+d 153 3 1 0 0
+c
+d 789 5 1 1 0
+c
+d 353 6 2 1 0
+c
+d 1194 1 1 0 0
+c
+d 1195 6 1 0 0
+c
+d 437 4 1 0 0
+c
+d 575 1 0 1 0
+c
+d 156 1 1 0 0
+c
+d 157 3 0 0 0
+c
+d 178 1 0 0 0
+c
+d 737 5 2 0 0
+c
+d 469 4 1 0 0
+c
+d 478 1 0 1 0
+c
+d 168 4 2 0 0
+c
+d 369 5 0 0 0
+c
+d 84 1 0 0 0
+c
+d 1289 3 0 0 0
+c
+d 1290 5 2 0 0
+c
+d 133 1 0 0 0
+c
+d 142 9 4 0 0
+c
+d 659 6 2 0 0
+c
+d 660 1 0 0 0
+c
+d 46 2 0 0 0
+c
+d 74 4 2 0 0
+c
+d 840 5 0 0 0
+c
+d 800 2 0 1 0
+c
+d 801 4 1 0 0
+c
+d 301 2 0 0 0
+c
+d 1156 3 1 0 0
+c
+d 1195 3 1 0 0
+c
+d 55 2 1 0 0
+c
+d 689 3 0 0 0
+c
+d 691 2 1 0 0
+c
+d 703 3 1 0 0
+c
+d 211 9 2 1 0
+c
+d 21 5 0 0 0
+c
+d 115 2 0 0 0
+c
+d 119 4 1 0 0
+c
+d 1261 2 0 0 0
+c
+d 132 7 2 0 0
+c
+d 338 1 0 0 0
+c
+d 134 1 0 1 0
+c
+d 136 5 1 0 0
+c
+d 567 5 1 0 0
+c
+d 568 4 1 1 0
+c
+d 554 4 0 0 0
+c
+d 555 1 1 0 0
+c
+d 89 3 1 1 0
+c
+d 550 2 0 0 0
+c
+d 167 5 0 1 0
+c
+d 1121 1 1 0 0
+c
+d 156 2 0 1 0
+c
+d 411 3 1 0 0
+c
+d 455 6 2 1 0
+c
+d 457 4 1 0 0
+c
+d 1007 1 0 0 0
+c
+d 1008 1 0 0 0
+c
+d 1009 6 0 0 0
+c
+d 162 4 2 0 0
+c
+d 355 1 0 0 0
+c
+d 610 1 0 0 0
+c
+d 990 1 0 0 0
+c
+d 1004 5 2 0 0
+c
+d 1005 1 0 0 0
+c
+d 1006 2 1 0 0
+c
+d 424 3 2 0 0
+c
+d 425 3 0 0 0
+c
+d 426 2 0 0 0
+c
+d 60 2 1 0 0
+c
+d 623 3 1 0 0
+c
+d 624 2 0 0 0
+c
+d 797 1 0 0 0
+c
+d 929 6 1 0 0
+c
+d 932 1 1 0 0
+c
+d 164 1 0 1 0
+c
+d 166 5 1 0 0
+c
+d 400 1 0 0 0
+c
+d 494 5 2 0 0
+c
+d 495 2 0 1 0
+c
+d 496 1 0 0 0
+c
+d 162 5 1 1 0
+c
+d 359 3 1 1 0
+c
+d 366 4 0 0 0
+c
+d 1163 6 1 0 0
+c
+d 21 1 1 0 0
+c
+d 25 2 0 0 0
+c
+d 26 6 1 0 0
+c
+d 162 1 0 0 0
+c
+d 367 3 1 0 0
+c
+d 368 1 0 0 0
+c
+d 557 1 0 0 0
+c
+d 565 6 2 0 0
+c
+d 568 1 0 1 0
+c
+d 829 1 0 0 0
+c
+d 835 4 1 0 0
+c
+d 836 4 2 0 0
+c
+d 663 6 2 0 0
+c
+d 665 1 0 0 0
+c
+d 680 1 0 0 0
+c
+d 836 1 1 0 0
+c
+d 839 3 1 0 0
+c
+d 840 1 0 0 0
+c
+d 12 5 1 1 0
+c
+d 1272 1 0 0 0
+c
+d 502 7 2 0 0
+c
+d 503 2 0 0 0
+c
+d 18 1 0 0 0
+c
+d 989 5 0 1 0
+c
+d 592 5 2 1 0
+c
+d 594 2 0 1 0
+c
+d 1179 3 1 0 0
+c
+d 1180 3 1 0 0
+c
+d 1181 1 0 0 0
+c
+d 1182 1 0 0 0
+c
+d 19 3 2 0 0
+c
+d 979 4 0 0 0
+c
+d 802 3 1 1 0
+c
+d 803 4 1 1 0
+c
+d 804 1 0 0 0
+c
+d 1266 2 0 0 0
+c
+d 1267 1 0 0 0
+c
+d 1268 2 0 0 0
+c
+d 332 5 1 0 0
+c
+d 333 2 0 0 0
+c
+d 505 7 2 1 0
+c
+d 514 1 0 0 0
+c
+d 789 5 0 0 0
+c
+d 790 1 0 0 0
+c
+d 510 1 0 0 0
+c
+d 511 1 0 0 0
+c
+d 516 5 2 0 0
+c
+d 520 2 1 0 0
+c
+d 157 1 1 0 0
+c
+d 355 4 1 0 0
+c
+d 356 1 0 0 0
+c
+d 88 4 1 0 0
+c
+d 89 2 1 0 0
+c
+d 550 1 1 0 0
+c
+d 383 2 0 1 0
+c
+d 384 5 1 0 0
+c
+d 217 3 1 0 0
+c
+d 221 2 0 1 0
+c
+d 223 1 1 0 0
+c
+d 47 5 0 1 0
+c
+d 48 3 0 1 0
+c
+d 418 1 0 0 0
+c
+d 419 1 1 0 0
+c
+d 1086 5 1 1 0
+c
+d 1087 1 0 0 0
+c
+d 1009 1 0 0 0
+c
+d 1011 3 0 1 0
+c
+d 1012 3 1 0 0
+c
+d 1030 1 0 0 0
+c
+d 1031 1 0 0 0
+c
+d 693 5 1 0 0
+c
+d 348 6 1 1 0
+c
+d 242 1 0 1 0
+c
+d 262 2 1 0 0
+c
+d 266 3 0 0 0
+c
+d 268 1 0 0 0
+c
+d 1163 1 1 0 0
+c
+d 1165 4 2 0 0
+c
+d 1168 3 1 0 0
+c
+d 1177 1 0 0 0
+c
+d 1073 4 0 1 0
+c
+d 1074 3 1 0 0
+c
+d 737 5 3 0 0
+c
+d 756 4 0 0 0
+c
+d 159 3 1 0 0
+c
+d 178 1 0 1 0
+c
+d 1252 3 0 0 0
+c
+d 1253 1 0 0 0
+c
+d 395 3 1 0 0
+c
+d 1106 2 1 0 0
+c
+d 1107 2 1 0 0
+c
+d 791 3 0 1 0
+c
+d 830 1 0 0 0
+c
+d 831 2 1 0 0
+c
+d 273 1 1 0 0
+c
+d 276 1 0 0 0
+c
+d 287 1 0 1 0
+c
+d 289 2 0 0 0
+c
+d 146 4 0 0 0
+c
+d 101 1 0 0 0
+c
+d 423 2 0 0 0
+c
+d 427 1 0 0 0
+c
+d 1080 3 1 0 0
+c
+d 424 5 2 0 0
+c
+d 1079 1 0 0 0
+c
+d 565 2 0 0 0
+c
+d 568 2 1 0 0
+c
+d 570 1 0 1 0
+c
+d 74 3 0 0 0
+c
+d 1300 3 1 0 0
+c
+d 1184 1 0 0 0
+c
+d 1185 2 1 1 0
+c
+d 1199 2 0 0 0
+c
+d 1200 1 0 0 0
+c
+d 1202 5 1 1 0
+c
+d 507 10 2 1 0
+c
+d 265 2 1 0 0
+c
+d 286 3 1 0 0
+c
+d 610 2 1 0 0
+c
+d 1004 4 0 0 0
+c
+d 185 4 1 0 0
+c
+d 196 2 1 0 0
+c
+d 197 1 0 0 0
+c
+d 662 4 0 1 0
+c
+d 667 1 1 0 0
+c
+d 668 3 1 0 0
+c
+d 120 3 2 0 0
+c
+d 121 3 1 1 0
+c
+d 122 2 0 0 0
+c
+d 125 1 0 0 0
+c
+d 217 1 0 0 0
+c
+d 218 4 1 0 0
+c
+d 221 4 1 0 0
+c
+d 0 3 0 0 0
+c
+d 1 1 0 0 0
+c
+d 2 6 1 0 0
+c
+d 753 7 2 0 0
+c
+d 318 5 1 1 0
+c
+d 320 1 0 1 0
+c
+d 322 1 0 0 0
+c
+d 305 1 0 1 0
+c
+d 353 4 1 1 0
+c
+d 1195 1 0 1 0
+c
+d 1196 5 1 0 0
+c
+d 662 1 0 1 0
+c
+d 663 6 2 0 0
+c
+d 34 4 1 0 0
+c
+d 35 1 0 1 0
+c
+d 602 5 1 2 0
+c
+d 156 4 2 0 0
+c
+d 400 2 0 0 0
+c
+d 811 1 0 0 0
+c
+d 817 3 1 0 0
+c
+d 904 1 1 0 0
+c
+d 913 2 1 0 0
+c
+d 470 2 0 0 0
+c
+d 478 2 1 0 0
+c
+d 482 1 0 1 0
+c
+d 374 5 1 1 0
+c
+d 375 3 1 0 0
+c
+d 167 5 0 0 0
+c
+d 384 5 2 0 0
+c
+d 394 1 1 0 0
+c
+d 1134 1 0 0 0
+c
+d 157 3 0 2 0
+c
+d 1252 4 1 0 0
+c
+d 551 2 0 0 0
+c
+d 301 4 2 1 0
+c
+d 1212 3 0 0 0
+c
+d 508 2 0 0 0
+c
+d 509 3 1 0 0
+c
+d 96 2 0 1 0
+c
+d 97 4 0 0 0
+c
+d 84 5 1 1 0
+c
+d 28 1 0 0 0
+c
+d 29 2 0 0 0
+c
+d 30 3 1 0 0
+c
+d 162 3 0 0 0
+c
+d 360 4 2 0 0
+c
+d 364 1 0 0 0
+c
+d 835 3 1 1 0
+c
+d 836 2 0 0 0
+c
+d 46 2 0 1 0
+c
+d 47 5 1 0 0
+c
+d 1185 3 1 0 0
+c
+d 1186 2 0 0 0
+c
+d 1187 1 0 0 0
+c
+d 1192 1 1 0 0
+c
+d 24 1 1 0 0
+c
+d 25 2 1 0 0
+c
+d 26 1 0 0 0
+c
+d 27 3 0 0 0
+c
+d 93 1 1 0 0
+c
+d 95 3 1 0 0
+c
+d 96 3 0 0 0
+c
+d 111 1 0 0 0
+c
+d 159 1 0 0 0
+c
+d 184 1 0 1 0
+c
+d 185 7 2 1 0
+c
+d 133 2 0 0 0
+c
+d 134 2 1 0 0
+c
+d 138 1 0 0 0
+c
+d 139 1 0 0 0
+c
+d 140 1 1 0 0
+c
+d 39 1 0 0 0
+c
+d 43 5 2 0 0
+c
+d 341 5 1 1 0
+c
+d 878 5 0 0 0
+c
+d 1163 5 1 1 0
+c
+d 152 1 0 1 0
+c
+d 153 4 1 0 0
+c
+d 93 3 0 0 0
+c
+d 133 2 1 0 0
+c
+d 134 1 0 0 0
+c
+d 804 1 0 0 0
+c
+d 915 3 0 0 0
+c
+d 468 5 1 0 0
+c
+d 469 4 2 0 0
+c
+d 324 1 0 0 0
+c
+d 332 2 0 0 0
+c
+d 333 3 1 0 0
+c
+d 339 1 0 0 0
+c
+d 424 4 0 0 0
+c
+d 1079 1 0 0 0
+c
+d 279 1 0 0 0
+c
+d 305 6 2 0 0
+c
+d 353 1 0 0 0
+c
+d 878 7 3 1 0
+c
+d 879 1 0 0 0
+c
+d 1202 8 1 1 0
+c
+d 193 5 0 0 0
+c
+d 195 1 0 0 0
+c
+d 132 2 0 0 0
+c
+d 133 1 0 0 0
+c
+d 495 3 0 0 0
+c
+d 301 1 1 0 0
+c
+d 1150 1 0 0 0
+c
+d 1152 5 1 0 0
+c
+d 1155 1 0 0 0
+c
+d 164 2 0 0 0
+c
+d 368 1 0 0 0
+c
+d 305 3 1 0 0
+c
+d 1150 4 1 0 0
+c
+d 1151 1 1 0 0
+c
+d 1194 9 3 0 0
+c
+d 529 3 1 0 0
+c
+d 532 1 0 1 0
+c
+d 550 3 0 0 0
+c
+d 54 2 1 0 0
+c
+d 55 1 0 0 0
+c
+d 719 1 1 0 0
+c
+d 575 8 2 0 0
+c
+d 931 1 1 0 0
+c
+d 534 5 2 0 0
+c
+d 437 5 1 0 0
+c
+d 101 1 0 0 0
+c
+d 423 9 2 1 0
+c
+d 799 7 1 2 0
+c
+d 286 4 1 0 0
+c
+d 594 1 1 0 0
+c
+d 673 4 1 0 0
+c
+d 674 3 0 0 0
+c
+d 591 5 2 0 0
+c
+d 592 2 0 1 0
+c
+d 556 3 0 0 0
+c
+d 557 2 1 0 0
+c
+d 1066 1 0 0 0
+c
+d 919 5 1 0 0
+c
+d 923 2 1 0 0
+c
+d 924 1 0 0 0
+c
+d 852 1 0 0 0
+c
+d 861 10 2 1 0
+c
+d 2 1 0 0 0
+c
+d 16 5 2 0 0
+c
+d 93 1 1 0 0
+c
+d 328 1 0 0 0
+c
+d 353 3 1 0 0
+c
+d 354 2 0 1 0
+c
+d 565 3 1 1 0
+c
+d 570 1 0 0 0
+c
+d 437 6 0 0 0
+c
+d 507 1 0 0 0
+c
+d 278 1 0 0 0
+c
+d 280 2 0 0 0
+c
+d 281 4 1 0 0
+c
+d 157 1 0 0 0
+c
+d 178 2 0 0 0
+c
+d 181 1 0 0 0
+c
+d 888 1 0 0 0
+c
+d 890 6 2 0 0
+c
+d 96 1 0 0 0
+c
+d 97 3 0 1 0
+c
+d 99 1 0 0 0
+c
+d 737 2 2 0 0
+c
+d 756 3 0 0 0
+c
+d 853 3 0 0 0
+c
+d 866 2 1 0 0
+c
+d 591 1 0 0 0
+c
+d 592 5 1 0 0
+c
+d 965 5 2 1 0
+c
+d 966 1 0 1 0
+c
+d 7 3 1 1 0
+c
+d 564 1 1 0 0
+c
+d 565 5 0 0 0
+c
+d 791 1 0 0 0
+c
+d 46 3 1 1 0
+c
+d 75 1 0 0 0
+c
+d 133 1 0 0 0
+c
+d 134 2 1 0 0
+c
+d 135 1 0 1 0
+c
+d 138 1 0 0 0
+c
+d 348 3 1 1 0
+c
+d 352 1 1 0 0
+c
+d 354 1 0 0 0
+c
+d 343 7 1 1 0
+c
+d 84 5 2 0 0
+c
+d 1286 3 1 0 0
+c
+d 737 1 0 0 0
+c
+d 738 4 1 0 0
+c
+d 739 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 497 1 0 0 0
+c
+d 498 6 2 0 0
+c
+d 500 1 0 1 0
+c
+d 737 8 3 1 0
+c
+d 48 4 2 0 0
+c
+d 49 1 0 0 0
+c
+d 44 5 2 0 0
+c
+d 46 1 0 0 0
+c
+d 753 1 0 0 0
+c
+d 754 4 1 0 0
+c
+d 756 2 1 0 0
+c
+d 763 1 0 0 0
+c
+d 278 2 1 0 0
+c
+d 1163 1 0 0 0
+c
+d 1211 1 0 1 0
+c
+d 1202 5 1 1 0
+c
+d 807 1 0 0 0
+c
+d 822 1 1 0 0
+c
+d 823 4 2 0 0
+c
+d 901 1 0 1 0
+c
+d 167 3 1 0 0
+c
+d 168 1 0 0 0
+c
+d 507 2 0 1 0
+c
+d 510 1 0 1 0
+c
+d 511 4 1 0 0
+c
+d 529 1 0 0 0
+c
+d 699 4 1 0 0
+c
+d 844 5 1 0 0
+c
+d 898 2 0 0 0
+c
+d 164 1 0 1 0
+c
+d 368 5 2 0 0
+c
+d 723 1 0 0 0
+c
+d 724 2 0 0 0
+c
+d 734 1 1 0 0
+c
+d 944 3 0 1 0
+c
+d 262 5 0 2 0
+c
+d 5 1 0 0 0
+c
+d 6 2 0 0 0
+c
+d 10 3 0 0 0
+c
+d 11 1 0 0 0
+c
+d 39 1 1 0 0
+c
+d 40 4 2 0 0
+c
+d 41 3 0 0 0
+c
+d 42 1 0 0 0
+c
+d 84 1 0 0 0
+c
+d 85 2 0 0 0
+c
+d 1277 1 1 0 0
+c
+d 1278 1 0 1 0
+c
+d 157 1 0 1 0
+c
+d 159 2 1 0 0
+c
+d 178 2 1 0 0
+c
+d 179 3 0 0 0
+c
+d 304 2 1 1 0
+c
+d 311 6 1 0 0
+c
+d 278 4 0 0 0
+c
+d 280 3 1 1 0
+c
+d 989 5 0 0 0
+c
+d 995 1 0 0 0
+c
+d 455 4 0 0 0
+c
+d 1170 1 0 0 0
+c
+d 1171 3 0 0 0
+c
+d 1172 1 1 0 0
+c
+d 167 1 0 1 0
+c
+d 369 4 1 0 0
+c
+d 382 1 0 0 0
+c
+d 46 7 2 0 0
+c
+d 75 2 0 0 0
+c
+d 167 1 0 0 0
+c
+d 369 4 0 0 0
+c
+d 1107 1 1 0 0
+c
+d 1109 6 1 0 0
+c
+d 1111 1 1 0 0
+c
+d 51 5 2 1 0
+c
+d 437 3 2 0 0
+c
+d 452 1 0 0 0
+c
+d 453 3 0 0 0
+c
+d 534 6 1 1 0
+c
+d 78 1 1 0 0
+c
+d 79 2 0 1 0
+c
+d 84 4 0 0 0
+c
+d 85 1 0 0 0
+c
+d 989 2 0 2 0
+c
+d 995 5 0 0 0
+c
+d 807 2 0 0 0
+c
+d 823 3 2 0 0
+c
+d 906 1 0 0 0
+c
+d 592 3 0 0 0
+c
+d 594 4 2 0 0
+c
+d 673 1 0 0 0
+c
+d 676 1 0 0 0
+c
+d 120 1 0 0 0
+c
+d 125 7 3 0 0
+c
+d 126 2 0 0 0
+c
+d 75 2 0 0 0
+c
+d 355 4 1 1 0
+c
+d 367 2 0 0 0
+c
+d 1286 1 0 0 0
+c
+d 1287 3 0 0 0
+c
+d 1013 5 1 0 0
+c
+d 1014 3 0 0 0
+c
+d 1033 1 0 0 0
+c
+d 129 2 0 0 0
+c
+d 525 4 2 0 0
+c
+d 534 2 0 1 0
+c
+d 101 7 2 0 0
+c
+d 111 1 0 1 0
+c
+d 927 3 1 0 0
+c
+d 929 2 1 0 0
+c
+d 932 2 0 0 0
+c
+d 301 3 1 1 0
+c
+d 305 1 0 0 0
+c
+d 1216 3 1 0 0
+c
+d 142 3 0 0 0
+c
+d 145 1 0 0 0
+c
+d 1256 1 0 0 0
+c
+d 96 1 0 0 0
+c
+d 99 3 0 0 0
+c
+d 111 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 552 3 1 0 0
+c
+d 487 7 2 0 0
+c
+d 488 1 0 0 0
+c
+d 89 4 1 0 0
+c
+d 1266 3 1 0 0
+c
+d 552 3 0 0 0
+c
+d 553 3 2 0 0
+c
+d 529 1 0 0 0
+c
+d 550 5 1 0 0
+c
+d 556 1 1 0 0
+c
+d 315 5 0 0 0
+c
+d 242 5 1 0 0
+c
+d 244 1 0 1 0
+c
+d 437 1 0 1 0
+c
+d 453 1 1 0 0
+c
+d 454 3 0 0 0
+c
+d 455 3 0 0 0
+c
+d 217 4 0 0 0
+c
+d 278 5 2 0 0
+c
+d 1170 1 1 0 0
+c
+d 493 7 2 0 0
+c
+d 494 1 0 0 0
+c
+d 559 6 2 1 0
+c
+d 568 2 1 0 0
+c
+d 572 1 0 1 0
+c
+d 1156 1 0 0 0
+c
+d 1192 6 2 0 0
+c
+d 564 6 2 0 0
+c
+d 556 10 2 0 0
+c
+d 565 1 0 0 0
+c
+d 211 9 2 0 0
+c
+d 216 1 0 0 0
+c
+d 0 1 0 0 0
+c
+d 1 2 0 0 0
+c
+d 2 1 0 0 0
+c
+d 382 1 1 0 0
+c
+d 384 1 0 0 0
+c
+d 388 6 3 0 0
+c
+d 389 1 0 0 0
+c
+d 86 3 1 0 0
+c
+d 87 3 1 0 0
+c
+d 851 5 1 0 0
+c
+d 852 1 0 1 0
+c
+d 152 2 0 0 0
+c
+d 413 3 2 0 0
+c
+d 414 3 0 1 0
+c
+d 393 4 2 0 0
+c
+d 399 3 1 0 0
+c
+d 157 9 2 0 0
+c
+d 1252 1 0 0 0
+c
+d 737 3 1 0 0
+c
+d 738 1 0 1 0
+c
+d 740 2 0 0 0
+c
+d 741 2 0 0 0
+c
+d 146 1 0 1 0
+c
+d 294 8 2 1 0
+c
+d 298 1 0 0 0
+c
+d 888 1 0 1 0
+c
+d 889 5 1 0 0
+c
+d 101 1 0 0 0
+c
+d 107 4 1 0 0
+c
+d 108 1 0 0 0
+c
+d 111 1 1 0 0
+c
+d 217 4 1 1 0
+c
+d 437 11 3 0 0
+c
+d 457 2 0 0 0
+c
+d 458 1 1 0 0
+c
+d 460 5 1 0 0
+c
+d 55 1 0 0 0
+c
+d 686 1 1 0 0
+c
+d 691 5 1 0 0
+c
+d 692 1 0 0 0
+c
+d 194 2 0 0 0
+c
+d 204 3 2 0 0
+c
+d 26 3 1 1 0
+c
+d 28 2 1 0 0
+c
+d 29 1 0 0 0
+c
+d 1315 1 0 1 0
+c
+d 272 5 0 0 0
+c
+d 262 5 1 0 0
+c
+d 270 1 0 0 0
+c
+d 271 3 0 0 0
+c
+d 60 1 0 1 0
+c
+d 72 3 0 0 0
+c
+d 622 3 1 0 0
+c
+d 529 1 0 0 0
+c
+d 550 6 2 0 0
+c
+d 384 3 1 0 0
+c
+d 392 4 2 0 0
+c
+d 393 2 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 1165 3 0 0 0
+c
+d 1168 5 2 0 0
+c
+d 634 8 3 0 0
+c
+d 807 3 2 0 0
+c
+d 907 5 1 0 0
+c
+d 75 1 0 0 0
+c
+d 88 3 1 0 0
+c
+d 775 1 1 0 0
+c
+d 163 5 0 0 0
+c
+d 171 1 0 0 0
+c
+d 1250 1 1 0 0
+c
+d 157 5 1 2 0
+c
+d 159 1 0 0 0
+c
+d 787 5 1 1 0
+c
+d 699 7 1 0 0
+c
+d 693 1 0 0 0
+c
+d 694 2 0 1 0
+c
+d 695 3 2 0 0
+c
+d 797 1 0 0 0
+c
+d 799 2 1 0 0
+c
+d 811 3 1 0 0
+c
+d 813 1 0 0 0
+c
+d 660 6 1 1 0
+c
+d 661 3 0 0 0
+c
+d 673 5 2 0 0
+c
+d 111 3 1 0 0
+c
+d 143 3 0 1 0
+c
+d 75 6 3 0 0
+c
+d 84 1 0 1 0
+c
+d 618 4 1 0 0
+c
+d 620 1 1 0 0
+c
+d 634 1 0 0 0
+c
+d 242 1 1 0 0
+c
+d 262 2 1 0 0
+c
+d 266 1 0 0 0
+c
+d 146 4 0 0 0
+c
+d 152 3 0 0 0
+c
+d 301 7 1 0 0
+c
+d 769 4 1 0 0
+c
+d 775 2 0 1 0
+c
+d 46 6 1 2 0
+c
+d 47 1 0 0 0
+c
+d 332 2 1 0 0
+c
+d 333 4 1 0 0
+c
+d 337 2 0 0 0
+c
+d 529 7 2 0 0
+c
+d 532 1 0 1 0
+c
+d 513 7 2 0 0
+c
+d 523 1 0 0 0
+c
+d 1110 6 3 0 0
+c
+d 429 2 0 1 0
+c
+d 430 2 1 0 0
+c
+d 470 1 0 0 0
+c
+d 125 3 0 1 0
+c
+d 533 3 1 0 0
+c
+d 395 3 2 0 0
+c
+d 397 1 0 0 0
+c
+d 1106 1 0 1 0
+c
+d 60 3 0 0 0
+c
+d 66 3 2 0 0
+c
+d 176 1 0 0 0
+c
+d 177 6 2 1 0
+c
+d 178 1 0 0 0
+c
+d 1192 2 1 0 0
+c
+d 1194 4 0 0 0
+c
+d 1205 3 1 0 0
+c
+d 301 6 0 0 0
+c
+d 21 4 1 0 0
+c
+d 24 3 0 0 0
+c
+d 26 1 0 0 0
+c
+d 458 1 0 1 0
+c
+d 461 4 1 0 0
+c
+d 462 3 0 0 0
+c
+d 489 1 0 0 0
+c
+d 529 2 1 0 0
+c
+d 532 3 0 0 0
+c
+d 1062 2 1 0 0
+c
+d 769 3 0 0 0
+c
+d 775 1 1 0 0
+c
+d 886 3 1 0 0
+c
+d 729 1 0 1 0
+c
+d 730 4 1 0 0
+c
+d 305 3 2 0 0
+c
+d 306 3 0 0 0
+c
+d 93 1 0 0 0
+c
+d 95 1 1 0 0
+c
+d 1263 2 0 1 0
+c
+d 1264 2 0 0 0
+c
+d 697 5 2 0 0
+c
+d 951 1 0 0 0
+c
+d 952 3 0 0 0
+c
+d 753 5 2 0 0
+c
+d 755 1 0 1 0
+c
+d 875 5 1 1 0
+c
+d 437 3 1 0 0
+c
+d 452 1 0 0 0
+c
+d 1239 9 2 0 0
+c
+d 283 1 1 0 0
+c
+d 284 5 1 1 0
+c
+d 6 1 0 0 0
+c
+d 12 2 1 0 0
+c
+d 13 1 0 1 0
+c
+d 854 4 1 1 0
+c
+d 855 2 0 0 0
+c
+d 769 11 2 0 0
+c
+d 132 2 0 0 0
+c
+d 133 2 1 0 0
+c
+d 495 1 0 0 0
+c
+d 729 5 1 1 0
+c
+d 532 3 1 0 0
+c
+d 533 2 0 0 0
+c
+d 534 2 0 0 0
+c
+d 574 1 0 0 0
+c
+d 795 3 1 0 0
+c
+d 807 1 1 0 0
+c
+d 820 1 0 0 0
+c
+d 152 1 0 1 0
+c
+d 1087 1 0 0 0
+c
+d 1096 2 1 0 0
+c
+d 1100 2 0 0 0
+c
+d 1101 1 0 0 0
+c
+d 241 3 1 0 0
+c
+d 253 3 1 0 0
+c
+d 1233 3 0 0 0
+c
+d 1235 1 0 0 0
+c
+d 1236 3 1 0 0
+c
+d 599 2 0 0 0
+c
+d 602 3 2 0 0
+c
+d 604 3 1 0 0
+c
+d 60 1 0 0 0
+c
+d 647 3 0 0 0
+c
+d 660 1 0 0 0
+c
+d 580 7 1 0 0
+c
+d 955 4 2 0 0
+c
+d 288 3 1 1 0
+c
+d 1221 2 0 0 0
+c
+d 1222 3 0 0 0
+c
+d 9 1 0 0 0
+c
+d 10 3 1 0 0
+c
+d 1269 1 1 0 0
+c
+d 791 1 0 1 0
+c
+d 829 2 1 0 0
+c
+d 831 2 0 0 0
+c
+d 832 2 1 0 0
+c
+d 833 1 0 1 0
+c
+d 286 1 0 0 0
+c
+d 291 2 0 0 0
+c
+d 299 2 0 0 0
+c
+d 319 1 0 1 0
+c
+d 430 1 0 0 0
+c
+d 470 5 1 0 0
+c
+d 471 3 0 0 0
+c
+d 472 1 0 0 0
+c
+d 359 7 0 0 0
+c
+d 842 4 1 1 0
+c
+d 849 1 0 0 0
+c
+d 850 2 0 0 0
+c
+d 426 1 0 0 0
+c
+d 591 5 3 0 0
+c
+d 592 6 0 0 0
+c
+d 738 1 0 1 0
+c
+d 743 6 2 0 0
+c
+d 100 5 1 0 0
+c
+d 105 1 0 0 0
+c
+d 1002 1 1 0 0
+c
+d 93 1 1 0 0
+c
+d 132 3 1 0 0
+c
+d 133 1 0 0 0
+c
+d 507 6 1 1 0
+c
+d 558 1 0 1 0
+c
+d 46 1 0 0 0
+c
+d 75 3 0 0 0
+c
+d 86 1 0 0 0
+c
+d 529 2 0 0 0
+c
+d 550 4 1 0 0
+c
+d 554 3 1 1 0
+c
+d 100 4 1 1 0
+c
+d 1006 2 1 0 0
+c
+d 301 3 0 1 0
+c
+d 1156 2 1 0 0
+c
+d 1195 1 0 1 0
+c
+d 281 3 1 1 0
+c
+d 1156 4 0 1 0
+c
+d 1270 9 2 0 0
+c
+d 1271 1 0 1 0
+c
+d 196 1 0 0 0
+c
+d 199 6 2 1 0
+c
+d 382 1 0 0 0
+c
+d 388 3 1 0 0
+c
+d 389 4 1 0 0
+c
+d 390 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 107 1 0 0 0
+c
+d 111 2 0 0 0
+c
+d 231 1 0 1 0
+c
+d 236 1 1 0 0
+c
+d 353 6 1 1 0
+c
+d 789 3 2 0 0
+c
+d 829 4 1 0 0
+c
+d 598 5 1 0 0
+c
+d 1170 2 1 0 0
+c
+d 1173 4 1 0 0
+c
+d 1174 1 0 0 0
+c
+d 55 2 0 0 0
+c
+d 691 2 0 1 0
+c
+d 706 1 0 1 0
+c
+d 843 1 0 0 0
+c
+d 844 2 0 1 0
+c
+d 851 2 1 0 0
+c
+d 164 7 2 0 0
+c
+d 622 1 0 1 0
+c
+d 625 5 1 0 0
+c
+d 68 3 0 1 0
+c
+d 69 1 1 0 0
+c
+d 554 4 2 0 0
+c
+d 556 4 1 1 0
+c
+d 259 7 2 0 0
+c
+d 261 1 0 0 0
+c
+d 278 1 0 0 0
+c
+d 1153 6 0 0 0
+c
+d 18 1 0 0 0
+c
+d 77 5 2 0 0
+c
+d 78 1 0 0 0
+c
+d 510 1 1 0 0
+c
+d 511 2 0 0 0
+c
+d 559 5 0 0 0
+c
+d 560 1 0 0 0
+c
+d 562 2 0 0 0
+c
+d 1 2 1 0 0
+c
+d 12 6 1 0 0
+c
+d 574 3 0 0 0
+c
+d 795 3 1 0 0
+c
+d 807 1 1 0 0
+c
+d 156 1 1 0 0
+c
+d 162 1 0 0 0
+c
+d 163 5 0 0 0
+c
+d 164 1 0 0 0
+c
+d 499 4 0 0 0
+c
+d 500 1 0 0 0
+c
+d 388 2 0 0 0
+c
+d 389 4 2 0 0
+c
+d 858 3 1 0 0
+c
+d 859 2 0 0 0
+c
+d 871 4 1 0 0
+c
+d 854 1 1 0 0
+c
+d 855 4 0 0 0
+c
+d 857 2 1 0 0
+c
+d 829 5 1 0 0
+c
+d 830 1 1 0 0
+c
+d 594 3 1 0 0
+c
+d 959 2 1 0 0
+c
+d 437 2 0 0 0
+c
+d 445 4 1 0 0
+c
+d 448 1 1 0 0
+c
+d 787 1 1 0 0
+c
+d 437 2 1 1 0
+c
+d 574 1 0 0 0
+c
+d 1050 5 0 0 0
+c
+d 208 3 1 0 0
+c
+d 211 6 2 0 0
+c
+d 478 1 0 1 0
+c
+d 483 2 0 0 0
+c
+d 487 2 1 1 0
+c
+d 488 1 0 0 0
+c
+d 1110 5 0 0 0
+c
+d 19 2 1 0 0
+c
+d 965 3 0 0 0
+c
+d 1013 1 1 0 0
+c
+d 377 1 0 0 0
+c
+d 378 4 1 0 0
+c
+d 1111 2 1 0 0
+c
+d 384 3 2 0 0
+c
+d 386 1 0 0 0
+c
+d 388 1 0 0 0
+c
+d 389 3 0 0 0
+c
+d 437 7 2 1 0
+c
+d 1013 1 0 0 0
+c
+d 1017 1 0 1 0
+c
+d 1019 7 1 0 0
+c
+d 1 7 2 0 0
+c
+d 168 2 0 0 0
+c
+d 169 1 1 0 0
+c
+d 369 2 0 0 0
+c
+d 370 1 0 0 0
+c
+d 378 1 0 1 0
+c
+d 65 3 0 0 0
+c
+d 1303 2 0 0 0
+c
+d 1304 1 0 0 0
+c
+d 1185 4 2 0 0
+c
+d 427 3 0 0 0
+c
+d 584 6 0 0 0
+c
+d 437 4 1 1 0
+c
+d 438 1 0 0 0
+c
+d 441 1 1 0 0
+c
+d 445 1 0 0 0
+c
+d 449 2 0 0 0
+c
+d 282 4 0 0 0
+c
+d 287 1 0 0 0
+c
+d 1227 5 0 0 0
+c
+d 629 3 1 0 0
+c
+d 965 5 1 0 0
+c
+d 494 1 0 1 0
+c
+d 496 2 1 0 0
+c
+d 498 4 2 0 0
+c
+d 453 3 0 0 0
+c
+d 455 1 0 0 0
+c
+d 691 2 0 0 0
+c
+d 693 5 0 0 0
+c
+d 775 1 0 0 0
+c
+d 781 3 0 0 0
+c
+d 782 3 1 0 0
+c
+d 374 2 1 0 0
+c
+d 377 5 1 0 0
+c
+d 757 2 1 0 0
+c
+d 758 5 2 0 0
+c
+d 763 2 0 0 0
+c
+d 7 3 1 0 0
+c
+d 10 3 0 0 0
+c
+d 52 6 2 0 0
+c
+d 146 7 0 1 0
+c
+d 650 4 2 0 0
+c
+d 655 3 0 1 0
+c
+d 661 1 0 0 0
+c
+d 423 5 1 0 0
+c
+d 1078 1 0 0 0
+c
+d 270 1 0 0 0
+c
+d 272 5 1 0 0
+c
+d 436 7 1 0 0
+c
+d 594 5 1 1 0
+c
+d 101 3 2 0 0
+c
+d 102 6 1 0 0
+c
+d 103 1 0 0 0
+c
+d 662 5 2 0 0
+c
+d 682 2 0 1 0
+c
+d 437 2 0 0 0
+c
+d 507 3 1 0 0
+c
+d 508 1 0 1 0
+c
+d 87 1 1 0 0
+c
+d 89 7 2 1 0
+c
+d 532 1 0 0 0
+c
+d 127 1 0 1 0
+c
+d 129 1 0 0 0
+c
+d 533 4 2 0 0
+c
+d 534 1 0 0 0
+c
+d 56 5 1 0 0
+c
+d 604 10 2 0 0
+c
+d 605 1 0 0 0
+c
+d 842 2 1 0 0
+c
+d 843 1 0 0 0
+c
+d 844 3 1 0 0
+c
+d 343 1 0 1 0
+c
+d 437 3 1 0 0
+c
+d 442 2 0 0 0
+c
+d 299 1 1 0 0
+c
+d 319 2 0 0 0
+c
+d 320 1 0 0 0
+c
+d 67 2 1 0 0
+c
+d 68 3 1 0 0
+c
+d 1110 6 1 0 0
+c
+d 327 4 1 1 0
+c
+d 101 1 1 0 0
+c
+d 597 6 1 0 0
+c
+d 608 6 1 1 0
+c
+d 616 1 1 0 0
+c
+d 990 1 0 0 0
+c
+d 1040 1 0 0 0
+c
+d 186 2 0 1 0
+c
+d 187 1 0 0 0
+c
+d 188 3 0 0 0
+c
+d 212 1 1 0 0
+c
+d 167 5 1 0 0
+c
+d 1105 1 0 1 0
+c
+d 1122 2 1 0 0
+c
+d 338 1 1 0 0
+c
+d 340 6 1 0 0
+c
+d 650 1 0 1 0
+c
+d 661 2 1 0 0
+c
+d 662 1 0 0 0
+c
+d 666 3 0 0 0
+c
+d 32 1 1 0 0
+c
+d 75 4 1 1 0
+c
+d 234 4 1 0 0
+c
+d 235 3 0 0 0
+c
+d 75 1 1 0 0
+c
+d 86 2 1 0 0
+c
+d 1290 1 0 0 0
+c
+d 686 2 0 0 0
+c
+d 689 2 0 0 0
+c
+d 704 1 0 0 0
+c
+d 5 5 3 0 0
+c
+d 7 1 0 0 0
+c
+d 373 6 2 1 0
+c
+d 959 5 1 0 0
+c
+d 738 7 1 0 0
+c
+d 743 1 1 0 0
+c
+d 861 5 1 0 0
+c
+d 871 3 1 0 0
+c
+d 551 3 1 0 0
+c
+d 784 3 0 0 0
+c
+d 785 3 1 0 0
+c
+d 282 1 0 1 0
+c
+d 286 2 1 0 0
+c
+d 287 2 0 0 0
+c
+d 1221 1 0 0 0
+c
+d 93 8 2 1 0
+c
+d 94 2 0 0 0
+c
+d 156 5 1 0 0
+c
+d 406 1 0 1 0
+c
+d 729 1 0 0 0
+c
+d 730 4 2 0 0
+c
+d 733 2 1 0 0
+c
+d 734 1 0 0 0
+c
+d 736 1 0 1 0
+c
+d 419 4 1 1 0
+c
+d 420 3 0 0 0
+c
+d 95 1 1 0 0
+c
+d 998 3 1 0 0
+c
+d 1000 1 0 0 0
+c
+d 1001 3 0 0 0
+c
+d 148 2 0 1 0
+c
+d 238 2 0 0 0
+c
+d 101 5 0 0 0
+c
+d 133 4 1 1 0
+c
+d 134 2 0 0 0
+c
+d 138 1 0 0 0
+c
+d 140 1 0 0 0
+c
+d 294 8 2 0 0
+c
+d 16 6 2 0 0
+c
+d 176 1 0 0 0
+c
+d 177 8 3 0 0
+c
+d 178 1 0 0 0
+c
+d 663 2 0 0 0
+c
+d 665 1 0 0 0
+c
+d 680 1 0 0 0
+c
+d 681 4 1 0 0
+c
+d 250 1 0 0 0
+c
+d 251 1 0 0 0
+c
+d 253 3 0 0 0
+c
+d 255 2 0 0 0
+c
+d 256 1 0 0 0
+c
+d 308 1 0 1 0
+c
+d 311 1 1 0 0
+c
+d 327 6 0 1 0
+c
+d 130 6 1 0 0
+c
+d 132 1 0 0 0
+c
+d 1258 1 0 0 0
+c
+d 965 3 0 0 0
+c
+d 966 1 0 0 0
+c
+d 968 1 0 0 0
+c
+d 288 7 1 0 0
+c
+d 591 1 0 0 0
+c
+d 592 3 0 0 0
+c
+d 763 4 2 0 0
+c
+d 766 1 0 0 0
+c
+d 767 4 1 0 0
+c
+d 211 7 1 0 0
+c
+d 217 1 0 1 0
+c
+d 424 1 1 0 0
+c
+d 426 4 0 0 0
+c
+d 591 1 0 0 0
+c
+d 266 3 0 0 0
+c
+d 268 1 1 0 0
+c
+d 282 2 1 0 0
+c
+d 1170 1 0 1 0
+c
+d 1173 6 1 0 0
+c
+d 763 8 2 0 0
+c
+d 766 2 0 0 0
+c
+d 1 2 1 0 0
+c
+d 2 3 0 0 0
+c
+d 373 4 1 1 0
+c
+d 606 5 1 0 0
+c
+d 608 2 0 0 0
+c
+d 594 3 0 0 0
+c
+d 650 4 0 0 0
+c
+d 651 1 0 0 0
+c
+d 697 4 1 0 0
+c
+d 951 2 1 0 0
+c
+d 953 1 0 0 0
+c
+d 99 3 1 0 0
+c
+d 1003 3 0 0 0
+c
+d 133 2 1 0 0
+c
+d 134 2 1 0 0
+c
+d 136 1 0 1 0
+c
+d 141 5 1 0 0
+c
+d 205 7 1 2 0
+c
+d 278 2 1 1 0
+c
+d 1170 3 1 0 0
+c
+d 1174 1 0 0 0
+c
+d 153 3 1 0 0
+c
+d 155 2 0 0 0
+c
+d 176 1 0 0 0
+c
+d 574 1 0 0 0
+c
+d 795 3 0 0 0
+c
+d 815 2 0 0 0
+c
+d 817 1 0 0 0
+c
+d 457 6 2 0 0
+c
+d 458 1 0 0 0
+c
+d 459 3 1 1 0
+c
+d 393 1 0 0 0
+c
+d 395 2 1 0 0
+c
+d 396 2 0 0 0
+c
+d 397 1 0 0 0
+c
+d 653 2 0 0 0
+c
+d 661 3 1 0 0
+c
+d 673 1 0 0 0
+c
+d 419 2 0 0 0
+c
+d 1080 4 2 0 0
+c
+d 46 6 0 0 0
+c
+d 1314 1 1 0 0
+c
+d 444 7 2 1 0
+c
+d 445 1 0 0 0
+c
+d 446 2 0 0 0
+c
+d 334 7 2 1 0
+c
+d 120 5 2 0 0
+c
+d 127 2 1 1 0
+c
+d 749 4 0 0 0
+c
+d 857 3 1 0 0
+c
+d 157 7 1 1 0
+c
+d 842 4 1 0 0
+c
+d 848 2 0 0 0
+c
+d 477 1 0 0 0
+c
+d 478 2 0 1 0
+c
+d 479 4 1 0 0
+c
+d 480 1 0 0 0
+c
+d 511 1 0 0 0
+c
+d 527 8 3 0 0
+c
+d 178 1 0 0 0
+c
+d 181 6 1 0 0
+c
+d 182 2 1 0 0
+c
+d 242 5 1 0 0
+c
+d 262 1 0 0 0
+c
+d 796 3 0 2 0
+c
+d 813 3 0 0 0
+c
+d 62 4 1 0 0
+c
+d 64 1 1 0 0
+c
+d 65 3 0 0 0
+c
+d 423 2 1 0 0
+c
+d 427 3 1 0 0
+c
+d 430 2 0 0 0
+c
+d 436 1 0 0 0
+c
+d 719 3 2 0 0
+c
+d 720 1 0 1 0
+c
+d 551 4 1 0 0
+c
+d 554 1 0 0 0
+c
+d 564 2 2 0 0
+c
+d 647 4 0 0 0
+c
+d 556 2 0 1 0
+c
+d 565 3 1 0 0
+c
+d 568 1 0 1 0
+c
+d 753 1 0 0 0
+c
+d 763 3 1 0 0
+c
+d 767 1 0 1 0
+c
+d 733 1 0 0 0
+c
+d 735 3 0 0 0
+c
+d 737 1 0 0 0
+c
+d 156 4 0 0 0
+c
+d 406 3 1 1 0
+c
+d 1170 1 0 0 0
+c
+d 1184 3 0 0 0
+c
+d 1197 1 0 0 0
+c
+d 799 3 0 0 0
+c
+d 919 5 2 1 0
+c
+d 318 5 1 0 0
+c
+d 1149 1 0 0 0
+c
+d 133 3 1 1 0
+c
+d 294 1 1 0 0
+c
+d 304 5 1 0 0
+c
+d 305 4 0 0 0
+c
+d 46 1 1 0 0
+c
+d 47 1 0 0 0
+c
+d 49 1 0 0 0
+c
+d 59 4 0 0 0
+c
+d 718 5 2 0 0
+c
+d 550 4 1 0 0
+c
+d 159 1 0 1 0
+c
+d 185 5 2 0 0
+c
+d 186 4 1 0 0
+c
+d 188 1 0 0 0
+c
+d 301 4 1 0 0
+c
+d 310 1 0 0 0
+c
+d 311 1 0 0 0
+c
+d 559 2 0 0 0
+c
+d 560 6 2 0 0
+c
+d 827 3 2 0 0
+c
+d 829 3 1 0 0
+c
+d 1113 1 0 0 0
+c
+d 1115 1 0 1 0
+c
+d 1116 3 1 0 0
+c
+d 791 1 0 0 0
+c
+d 829 6 2 1 0
+c
+d 591 6 2 1 0
+c
+d 597 2 0 0 0
+c
+d 19 2 0 0 0
+c
+d 628 1 0 0 0
+c
+d 1008 3 2 0 0
+c
+d 276 7 2 0 0
+c
+d 540 2 0 0 0
+c
+d 541 1 0 0 0
+c
+d 686 6 2 0 0
+c
+d 199 3 0 0 0
+c
+d 211 2 1 0 0
+c
+d 217 1 1 0 0
+c
+d 811 1 0 0 0
+c
+d 904 4 0 1 0
+c
+d 905 3 1 0 0
+c
+d 437 3 0 0 0
+c
+d 1045 6 0 1 0
+c
+d 1047 3 1 0 0
+c
+d 101 1 0 0 0
+c
+d 418 1 0 0 0
+c
+d 1087 2 1 0 0
+c
+d 1093 4 2 0 0
+c
+d 1094 1 0 0 0
+c
+d 348 1 0 1 0
+c
+d 393 4 2 0 0
+c
+d 400 1 0 0 0
+c
+d 407 2 0 1 0
+c
+d 410 1 0 0 0
+c
+d 419 5 0 0 0
+c
+d 621 5 1 1 0
+c
+d 650 3 2 0 0
+c
+d 653 3 0 0 0
+c
+d 654 3 0 0 0
+c
+d 775 1 0 0 0
+c
+d 886 2 0 0 0
+c
+d 888 1 0 0 0
+c
+d 892 3 0 0 0
+c
+d 301 1 0 0 0
+c
+d 304 5 2 0 0
+c
+d 310 1 0 1 0
+c
+d 114 3 1 0 0
+c
+d 127 3 0 0 0
+c
+d 32 3 0 0 0
+c
+d 75 3 1 1 0
+c
+d 76 1 0 0 0
+c
+d 580 1 0 0 0
+c
+d 686 3 1 0 0
+c
+d 701 3 1 0 0
+c
+d 301 2 1 1 0
+c
+d 314 4 0 0 0
+c
+d 334 3 1 0 0
+c
+d 341 2 0 0 0
+c
+d 551 9 3 1 0
+c
+d 162 4 1 1 0
+c
+d 171 1 0 0 0
+c
+d 620 3 1 0 0
+c
+d 632 4 1 0 0
+c
+d 146 8 1 0 0
+c
+d 151 1 0 0 0
+c
+d 686 6 2 0 0
+c
+d 164 4 1 0 0
+c
+d 1104 3 0 0 0
+c
+d 185 1 1 0 0
+c
+d 186 4 1 0 0
+c
+d 187 3 1 0 0
+c
+d 188 1 0 0 0
+c
+d 52 2 1 0 0
+c
+d 53 4 1 0 0
+c
+d 728 3 1 1 0
+c
+d 729 2 0 0 0
+c
+d 274 1 0 1 0
+c
+d 277 2 1 0 0
+c
+d 301 2 0 1 0
+c
+d 395 2 1 0 0
+c
+d 396 1 1 0 0
+c
+d 397 7 1 0 0
+c
+d 564 1 0 0 0
+c
+d 788 1 0 1 0
+c
+d 789 5 2 0 0
+c
+d 568 3 0 0 0
+c
+d 569 2 1 1 0
+c
+d 48 8 2 1 0
+c
+d 738 1 0 0 0
+c
+d 743 4 1 0 0
+c
+d 744 1 0 0 0
+c
+d 1087 3 0 0 0
+c
+d 1096 3 1 1 0
+c
+d 1097 3 0 0 0
+c
+d 1100 1 0 0 0
+c
+d 129 3 0 0 0
+c
+d 130 3 1 0 0
+c
+d 131 1 0 0 0
+c
+d 673 2 1 0 0
+c
+d 675 2 1 0 0
+c
+d 676 2 1 0 0
+c
+d 678 4 1 0 0
+c
+d 799 1 0 0 0
+c
+d 843 4 1 0 0
+c
+d 274 1 0 0 0
+c
+d 277 4 2 0 0
+c
+d 1184 1 0 0 0
+c
+d 1199 7 2 0 0
+c
+d 119 8 3 0 0
+c
+d 196 2 1 0 0
+c
+d 197 2 0 0 0
+c
+d 198 5 1 0 0
+c
+d 46 1 0 0 0
+c
+d 775 2 0 0 0
+c
+d 782 3 1 0 0
+c
+d 783 1 0 0 0
+c
+d 377 4 1 0 0
+c
+d 378 2 1 1 0
+c
+d 431 3 1 0 0
+c
+d 436 4 1 0 0
+c
+d 437 1 0 0 0
+c
+d 582 1 0 0 0
+c
+d 584 2 0 0 0
+c
+d 586 4 2 0 0
+c
+d 437 1 0 0 0
+c
+d 558 4 0 0 0
+c
+d 1125 2 0 0 0
+c
+d 1126 1 0 0 0
+c
+d 1127 4 2 0 0
+c
+d 1128 1 0 1 0
+c
+d 691 4 1 0 0
+c
+d 699 2 0 0 0
+c
+d 280 3 1 1 0
+c
+d 281 3 0 0 0
+c
+d 1192 1 0 0 0
+c
+d 437 8 1 0 0
+c
+d 498 1 0 1 0
+c
+d 493 4 0 0 0
+c
+d 89 3 1 0 0
+c
+d 32 1 0 0 0
+c
+d 33 1 1 0 0
+c
+d 46 2 1 0 0
+c
+d 74 2 0 0 0
+c
+d 1021 7 4 0 0
+c
+d 1022 2 0 0 0
+c
+d 142 1 0 0 0
+c
+d 143 2 0 1 0
+c
+d 144 1 0 0 0
+c
+d 145 2 1 1 0
+c
+d 551 1 0 0 0
+c
+d 554 2 1 0 0
+c
+d 557 6 1 0 0
+c
+d 1058 4 2 0 0
+c
+d 26 5 0 0 0
+c
+d 28 1 0 0 0
+c
+d 369 3 0 0 0
+c
+d 371 2 1 0 0
+c
+d 380 2 0 0 0
+c
+d 348 7 1 1 0
+c
+d 1145 1 0 0 0
+c
+d 157 3 1 0 0
+c
+d 242 1 1 0 0
+c
+d 279 1 0 1 0
+c
+d 305 1 0 0 0
+c
+d 1113 5 1 0 0
+c
+d 1114 3 1 0 0
+c
+d 1115 1 1 0 0
+c
+d 50 3 2 0 0
+c
+d 51 4 0 0 0
+c
+d 52 1 0 0 0
+c
+d 699 3 0 0 0
+c
+d 799 1 1 0 0
+c
+d 800 2 0 0 0
+c
+d 835 4 2 0 0
+c
+d 836 5 1 0 0
+c
+d 837 1 0 0 0
+c
+d 157 7 2 1 0
+c
+d 356 1 0 0 0
+c
+d 358 1 0 0 0
+c
+d 242 3 1 0 0
+c
+d 262 3 0 1 0
+c
+d 266 1 0 0 0
+c
+d 268 1 0 0 0
+c
+d 737 1 0 0 0
+c
+d 743 5 1 0 0
+c
+d 753 1 1 0 0
+c
+d 651 1 1 0 0
+c
+d 690 4 1 0 0
+c
+d 705 1 0 0 0
+c
+d 570 8 3 1 0
+c
+d 572 2 0 0 0
+c
+d 337 3 2 0 0
+c
+d 338 2 1 0 0
+c
+d 339 1 0 0 0
+c
+d 1013 1 1 0 0
+c
+d 1033 4 1 0 0
+c
+d 445 1 1 0 0
+c
+d 447 7 0 0 0
+c
+d 673 5 0 0 0
+c
+d 1168 1 0 0 0
+c
+d 1179 2 0 0 0
+c
+d 1182 2 0 0 0
+c
+d 1183 1 0 0 0
+c
+d 799 1 0 1 0
+c
+d 810 3 1 0 0
+c
+d 100 1 0 1 0
+c
+d 1002 2 1 0 0
+c
+d 1003 3 1 1 0
+c
+d 66 3 2 1 0
+c
+d 68 1 0 0 0
+c
+d 69 3 0 0 0
+c
+d 16 10 3 0 0
+c
+d 205 1 0 0 0
+c
+d 211 1 1 0 0
+c
+d 1239 7 1 0 0
+c
+d 799 1 0 0 0
+c
+d 919 1 0 0 0
+c
+d 933 7 1 0 0
+c
+d 146 1 0 0 0
+c
+d 1096 1 0 1 0
+c
+d 1097 5 2 0 0
+c
+d 1098 2 0 0 0
+c
+d 1099 1 0 0 0
+c
+d 213 6 2 0 0
+c
+d 214 4 1 0 0
+c
+d 650 3 0 0 0
+c
+d 661 2 1 0 0
+c
+d 662 3 2 0 0
+c
+d 101 2 0 0 0
+c
+d 112 2 0 0 0
+c
+d 608 4 1 1 0
+c
+d 795 1 1 0 0
+c
+d 818 6 1 1 0
+c
+d 904 2 0 0 0
+c
+d 90 1 1 0 0
+c
+d 91 4 1 0 0
+c
+d 117 5 1 0 0
+c
+d 217 2 0 0 0
+c
+d 1243 4 1 0 0
+c
+d 358 5 0 1 0
+c
+d 359 1 1 0 0
+c
+d 1106 4 1 0 0
+c
+d 1107 2 1 0 0
+c
+d 437 2 0 0 0
+c
+d 463 5 1 1 0
+c
+d 120 8 3 0 0
+c
+d 868 1 0 1 0
+c
+d 872 4 1 0 0
+c
+d 507 2 1 0 0
+c
+d 529 4 0 0 0
+c
+d 530 1 0 0 0
+c
+d 1061 1 1 0 0
+c
+d 515 1 1 0 0
+c
+d 516 3 0 0 0
+c
+d 517 1 0 0 0
+c
+d 505 1 0 1 0
+c
+d 514 3 2 0 0
+c
+d 516 4 0 0 0
+c
+d 799 4 1 1 0
+c
+d 801 1 0 0 0
+c
+d 802 3 0 0 0
+c
+d 437 6 2 0 0
+c
+d 449 1 0 0 0
+c
+d 965 2 0 0 0
+c
+d 973 6 2 0 0
+c
+d 606 7 1 0 0
+c
+d 606 3 1 0 0
+c
+d 636 1 0 0 0
+c
+d 638 3 0 1 0
+c
+d 1158 2 0 0 0
+c
+d 1163 6 2 0 0
+c
+d 904 3 1 0 0
+c
+d 911 2 0 0 0
+c
+d 912 1 0 1 0
+c
+d 278 4 1 1 0
+c
+d 213 3 0 0 0
+c
+d 242 1 0 0 0
+c
+d 458 6 1 2 0
+c
+d 460 1 0 0 0
+c
+d 467 1 0 0 0
+c
+d 468 3 0 0 0
+c
+d 471 2 0 1 0
+c
+d 842 2 0 0 0
+c
+d 848 7 2 1 0
+c
+d 111 3 0 1 0
+c
+d 146 1 1 0 0
+c
+d 1262 1 0 0 0
+c
+d 418 6 2 0 0
+c
+d 435 2 0 0 0
+c
+d 1087 1 0 0 0
+c
+d 882 2 1 0 0
+c
+d 886 3 1 0 0
+c
+d 888 2 0 0 0
+c
+d 651 4 1 0 0
+c
+d 243 3 2 0 0
+c
+d 244 1 0 1 0
+c
+d 217 1 0 0 0
+c
+d 1241 3 0 0 0
+c
+d 1242 1 1 0 0
+c
+d 305 3 0 0 0
+c
+d 353 4 1 1 0
+c
+d 437 3 2 0 0
+c
+d 445 2 0 0 0
+c
+d 446 1 0 0 0
+c
+d 574 6 1 0 0
+c
+d 1050 1 0 0 0
+c
+d 799 7 2 0 0
+c
+d 809 3 1 0 0
+c
+d 933 1 0 0 0
+c
+d 97 1 0 0 0
+c
+d 99 3 0 0 0
+c
+d 101 3 0 1 0
+c
+d 110 1 1 0 0
+c
+d 753 4 1 0 0
+c
+d 755 4 2 0 0
+c
+d 578 3 1 0 0
+c
+d 686 2 1 0 0
+c
+d 687 1 0 0 0
+c
+d 701 1 0 0 0
+c
+d 714 2 0 1 0
+c
+d 164 2 2 0 0
+c
+d 167 1 0 0 0
+c
+d 1104 4 1 0 0
+c
+d 162 1 0 0 0
+c
+d 358 4 2 0 0
+c
+d 366 1 0 1 0
+c
+d 1087 1 1 0 0
+c
+d 1090 5 1 1 0
+c
+d 1092 1 0 0 0
+c
+d 400 4 2 0 0
+c
+d 407 1 0 0 0
+c
+d 410 5 1 0 0
+c
+d 534 1 0 0 0
+c
+d 537 5 1 0 0
+c
+d 1156 8 2 1 0
+c
+d 101 5 2 0 0
+c
+d 610 1 0 1 0
+c
+d 719 3 0 0 0
+c
+d 720 2 1 1 0
+c
+d 949 1 0 0 0
+c
+d 164 5 2 0 0
+c
+d 229 5 0 1 0
+c
+d 557 3 0 0 0
+c
+d 565 3 1 0 0
+c
+d 568 1 1 0 0
+c
+d 1058 1 0 0 0
+c
+d 959 8 2 0 0
+c
+d 284 4 0 0 0
+c
+d 285 2 1 0 0
+c
+d 1226 1 1 0 0
+c
+d 749 6 1 0 0
+c
+d 751 1 1 0 0
+c
+d 1192 2 0 1 0
+c
+d 1206 6 1 0 0
+c
+d 318 5 0 1 0
+c
+d 320 1 1 0 0
+c
+d 411 1 0 0 0
+c
+d 412 4 1 0 0
+c
+d 413 3 1 1 0
+c
+d 878 1 0 0 0
+c
+d 879 6 2 1 0
+c
+d 821 1 1 0 0
+c
+d 822 4 2 0 0
+c
+d 823 3 1 0 0
+c
+d 400 1 0 0 0
+c
+d 402 2 0 0 0
+c
+d 403 2 0 1 0
+c
+d 404 2 1 0 0
+c
+d 437 5 0 0 0
+c
+d 1087 5 1 0 0
+c
+d 1094 1 0 1 0
+c
+d 406 1 0 1 0
+c
+d 411 3 2 0 0
+c
+d 415 1 0 0 0
+c
+d 146 6 3 0 0
+c
+d 294 3 0 0 0
+c
+d 341 9 2 0 0
+c
+d 1148 1 0 0 0
+c
+d 789 7 2 0 0
+c
+d 166 4 1 1 0
+c
+d 395 2 1 0 0
+c
+d 400 1 0 0 0
+c
+d 602 3 0 1 0
+c
+d 604 3 1 1 0
+c
+d 1266 8 3 1 0
+c
+d 1285 1 0 0 0
+c
+d 133 1 1 0 0
+c
+d 323 5 0 1 0
+c
+d 594 4 1 1 0
+c
+d 650 1 1 0 0
+c
+d 652 1 0 0 0
+c
+d 156 7 3 1 0
+c
+d 50 2 0 0 0
+c
+d 51 2 0 0 0
+c
+d 157 4 2 0 0
+c
+d 660 1 0 0 0
+c
+d 662 7 1 0 0
+c
+d 129 7 2 0 0
+c
+d 598 5 1 0 0
+c
+d 599 1 0 0 0
+c
+d 606 3 1 0 0
+c
+d 608 1 1 0 0
+c
+d 602 7 2 1 0
+c
+d 748 7 1 1 0
+c
+d 1192 2 0 0 0
+c
+d 1203 1 0 1 0
+c
+d 1207 6 1 0 0
+c
+d 729 4 0 0 0
+c
+d 730 2 1 0 0
+c
+d 196 4 0 1 0
+c
+d 199 2 1 0 0
+c
+d 200 1 0 0 0
+c
+d 1270 7 2 1 0
+c
+d 686 1 1 0 0
+c
+d 925 5 1 0 0
+c
+d 148 6 3 0 0
+c
+d 238 1 0 0 0
+c
+d 239 3 0 0 0
+c
+d 689 1 1 0 0
+c
+d 691 1 0 0 0
+c
+d 701 4 1 0 0
+c
+d 702 3 1 0 0
+c
+d 75 3 1 0 0
+c
+d 1300 3 1 0 0
+c
+d 1301 1 0 0 0
+c
+d 597 1 0 1 0
+c
+d 598 4 1 0 0
+c
+d 599 1 0 1 0
+c
+d 18 3 0 0 0
+c
+d 989 3 1 2 0
+c
+d 715 3 0 1 0
+c
+d 716 3 2 0 0
+c
+d 132 3 1 0 0
+c
+d 133 3 0 0 0
+c
+d 153 1 0 1 0
+c
+d 155 2 1 0 0
+c
+d 176 2 1 0 0
+c
+d 177 1 0 0 0
+c
+d 478 6 1 0 0
+c
+d 481 1 1 0 0
+c
+d 157 1 1 0 0
+c
+d 159 4 1 0 0
+c
+d 183 2 0 0 0
+c
+d 184 1 0 0 0
+c
+d 196 1 0 0 0
+c
+d 341 5 2 1 0
+c
+d 346 1 0 0 0
+c
+d 1146 4 0 0 0
+c
+d 738 4 1 1 0
+c
+d 854 2 1 0 0
+c
+d 437 7 1 0 0
+c
+d 148 3 1 1 0
+c
+d 240 3 0 0 0
+c
+d 820 2 0 2 0
+c
+d 821 4 2 0 0
+c
+d 822 1 0 0 0
+c
+d 767 1 0 1 0
+c
+d 890 1 0 1 0
+c
+d 891 2 1 0 0
+c
+d 101 6 2 0 0
+c
+d 120 6 1 1 0
+c
+d 121 5 2 0 0
+c
+d 122 1 0 0 0
+c
+d 304 5 1 1 0
+c
+d 309 3 0 0 0
+c
+d 146 3 0 0 0
+c
+d 285 1 0 0 0
+c
+d 286 2 0 0 0
+c
+d 437 5 2 0 0
+c
+d 188 3 2 0 0
+c
+d 212 3 1 0 0
+c
+d 133 1 0 0 0
+c
+d 294 4 1 1 0
+c
+d 297 1 0 0 0
+c
+d 298 1 0 0 0
+c
+d 16 10 2 1 0
+c
+d 608 1 0 0 0
+c
+d 614 4 0 1 0
+c
+d 615 1 1 0 0
+c
+d 301 2 1 1 0
+c
+d 1156 2 0 0 0
+c
+d 1160 2 0 0 0
+c
+d 155 1 0 1 0
+c
+d 156 4 1 0 0
+c
+d 1157 6 1 0 0
+c
+d 1158 1 0 1 0
+c
+d 1163 2 0 0 0
+c
+d 797 5 1 1 0
+c
+d 799 1 0 0 0
+c
+d 926 2 0 0 0
+c
+d 130 4 1 0 0
+c
+d 131 1 0 0 0
+c
+d 132 1 0 0 0
+c
+d 301 11 2 1 0
+c
+d 47 1 1 0 0
+c
+d 769 3 1 0 0
+c
+d 771 1 1 0 0
+c
+d 287 5 1 1 0
+c
+d 52 8 2 0 0
+c
+d 132 4 1 0 0
+c
+d 513 1 0 1 0
+c
+d 90 1 0 0 0
+c
+d 91 7 3 1 0
+c
+d 34 4 1 1 0
+c
+d 35 2 1 0 0
+c
+d 36 3 1 1 0
+c
+d 662 5 0 0 0
+c
+d 799 3 1 1 0
+c
+d 842 2 0 1 0
+c
+d 843 2 0 0 0
+c
+d 989 6 0 0 0
+c
+d 990 1 0 0 0
+c
+d 686 8 2 0 0
+c
+d 423 5 2 0 0
+c
+d 606 3 0 0 0
+c
+d 608 3 1 0 0
+c
+d 618 1 1 0 0
+c
+d 619 3 1 0 0
+c
+d 763 5 2 1 0
+c
+d 767 1 0 0 0
+c
+d 127 4 0 0 0
+c
+d 129 3 0 0 0
+c
+d 580 5 1 0 0
+c
+d 584 1 0 1 0
+c
+d 591 1 1 0 0
+c
+d 686 1 0 0 0
+c
+d 378 1 1 0 0
+c
+d 1111 1 0 0 0
+c
+d 1112 5 1 0 0
+c
+d 301 7 1 1 0
+c
+d 156 5 1 0 0
+c
+d 163 1 1 0 0
+c
+d 146 5 1 0 0
+c
+d 427 3 2 0 0
+c
+d 428 3 0 0 0
+c
+d 591 2 0 1 0
+c
+d 592 4 1 0 0
+c
+d 356 4 0 0 0
+c
+d 358 4 2 0 0
+c
+d 608 1 0 0 0
+c
+d 990 5 1 0 0
+c
+d 991 1 0 0 0
+c
+d 286 1 0 0 0
+c
+d 1221 6 1 0 0
+c
+d 1222 2 0 0 0
+c
+d 252 1 0 1 0
+c
+d 259 5 1 0 0
+c
+d 262 1 0 0 0
+c
+d 745 1 1 0 0
+c
+d 748 4 0 0 0
+c
+d 472 2 0 0 0
+c
+d 473 2 1 0 0
+c
+d 474 1 0 0 0
+c
+d 475 1 0 0 0
+c
+d 195 4 1 0 0
+c
+d 206 1 1 0 0
+c
+d 1246 1 0 0 0
+c
+d 608 4 0 0 0
+c
+d 458 6 2 0 0
+c
+d 638 5 1 0 0
+c
+d 557 6 1 0 0
+c
+d 1060 1 0 0 0
+c
+d 217 2 0 0 0
+c
+d 220 5 2 0 0
+c
+d 241 1 0 0 0
+c
+d 1243 2 0 0 0
+c
+d 1 3 1 2 0
+c
+d 1323 3 0 0 0
+c
+d 734 4 1 0 0
+c
+d 737 1 0 1 0
+c
+d 866 7 1 1 0
+c
+d 867 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 608 3 0 0 0
+c
+d 610 2 1 0 0
+c
+d 611 2 1 0 0
+c
+d 273 5 0 1 0
+c
+d 274 1 0 0 0
+c
+d 275 3 1 0 0
+c
+d 550 1 0 1 0
+c
+d 556 2 1 0 0
+c
+d 557 2 1 0 0
+c
+d 565 2 1 0 0
+c
+d 567 1 0 0 0
+c
+d 418 3 1 1 0
+c
+d 1087 5 2 0 0
+c
+d 1088 1 0 0 0
+c
+d 878 2 1 0 0
+c
+d 881 4 1 0 0
+c
+d 262 7 1 1 0
+c
+d 418 8 2 1 0
+c
+d 1087 1 0 1 0
+c
+d 753 1 1 0 0
+c
+d 767 1 1 0 0
+c
+d 861 6 1 0 0
+c
+d 863 1 0 0 0
+c
+d 551 1 0 1 0
+c
+d 554 2 1 0 0
+c
+d 555 1 0 0 0
+c
+d 373 2 1 1 0
+c
+d 374 5 1 0 0
+c
+d 882 2 1 0 0
+c
+d 884 3 0 1 0
+c
+d 888 1 0 1 0
+c
+d 276 3 0 1 0
+c
+d 287 2 0 0 0
+c
+d 289 1 0 0 0
+c
+d 491 1 0 0 0
+c
+d 492 1 0 0 0
+c
+d 493 3 0 0 0
+c
+d 32 4 1 0 0
+c
+d 1320 1 0 0 0
+c
+d 1321 6 1 0 0
+c
+d 148 9 2 0 0
+c
+d 745 4 1 0 0
+c
+d 746 1 0 0 0
+c
+d 511 1 0 0 0
+c
+d 522 7 2 1 0
+c
+d 1150 7 2 1 0
+c
+d 617 1 0 0 0
+c
+d 985 5 1 0 0
+c
+d 986 1 0 0 0
+c
+d 622 3 1 0 0
+c
+d 623 1 1 0 0
+c
+d 156 2 1 0 0
+c
+d 163 2 1 0 0
+c
+d 400 1 0 1 0
+c
+d 1249 4 1 0 0
+c
+d 152 3 0 0 0
+c
+d 1096 2 1 0 0
+c
+d 457 10 2 0 0
+c
+d 463 2 0 1 0
+c
+d 464 1 1 0 0
+c
+d 662 5 0 1 0
+c
+d 667 5 2 0 0
+c
+d 273 2 1 0 0
+c
+d 276 3 0 0 0
+c
+d 1229 3 0 1 0
+c
+d 153 2 1 1 0
+c
+d 155 3 0 0 0
+c
+d 156 1 0 0 0
+c
+d 618 1 1 0 0
+c
+d 965 6 2 0 0
+c
+d 968 2 0 0 0
+c
+d 686 4 0 0 0
+c
+d 915 1 0 0 0
+c
+d 167 1 0 0 0
+c
+d 369 2 0 0 0
+c
+d 381 1 1 0 0
+c
+d 382 2 0 0 0
+c
+d 436 5 2 1 0
+c
+d 437 1 0 0 0
+c
+d 806 3 0 0 0
+c
+d 807 1 0 0 0
+c
+d 872 1 0 0 0
+c
+d 873 2 0 0 0
+c
+d 874 1 0 0 0
+c
+d 795 1 1 0 0
+c
+d 908 8 0 1 0
+c
+d 272 4 0 0 0
+c
+d 617 3 1 0 0
+c
+d 989 6 1 0 0
+c
+d 996 1 0 0 0
+c
+d 1 8 1 1 0
+c
+d 373 7 1 0 0
+c
+d 382 1 1 0 0
+c
+d 10 1 1 0 0
+c
+d 11 3 1 0 0
+c
+d 1269 4 1 0 0
+c
+d 1270 1 0 0 0
+c
+d 691 6 1 1 0
+c
+d 505 1 0 0 0
+c
+d 506 4 2 0 0
+c
+d 507 3 2 0 0
+c
+d 514 2 0 0 0
+c
+d 437 1 0 0 0
+c
+d 457 3 2 0 0
+c
+d 466 3 1 0 0
+c
+d 194 9 2 0 0
+c
+d 5 3 0 0 0
+c
+d 6 1 0 0 0
+c
+d 54 5 1 0 0
+c
+d 55 1 1 0 0
+c
+d 204 1 0 0 0
+c
+d 225 4 1 1 0
+c
+d 199 3 1 1 0
+c
+d 211 7 1 0 0
+c
+d 686 3 0 1 0
+c
+d 689 2 1 0 0
+c
+d 704 1 1 0 0
+c
+d 145 3 2 0 0
+c
+d 146 4 0 0 0
+c
+d 301 3 1 0 0
+c
+d 313 3 1 0 0
+c
+d 315 1 0 1 0
+c
+d 169 3 2 0 0
+c
+d 377 3 1 1 0
+c
+d 373 1 1 0 0
+c
+d 374 3 0 0 0
+c
+d 375 1 0 0 0
+c
+d 559 3 0 0 0
+c
+d 561 1 1 0 0
+c
+d 566 1 0 1 0
+c
+d 84 1 0 0 0
+c
+d 1274 4 1 0 0
+c
+d 1285 4 1 0 0
+c
+d 1127 5 2 0 0
+c
+d 178 3 0 0 0
+c
+d 181 2 1 1 0
+c
+d 755 6 0 1 0
+c
+d 757 1 0 0 0
+c
+d 765 1 0 1 0
+c
+d 66 1 1 0 0
+c
+d 67 3 1 0 0
+c
+d 578 1 0 0 0
+c
+d 580 2 0 0 0
+c
+d 584 3 2 0 0
+c
+d 157 5 2 0 0
+c
+d 305 3 0 0 0
+c
+d 580 1 0 0 0
+c
+d 581 4 2 0 0
+c
+d 582 1 0 1 0
+c
+d 437 2 0 0 0
+c
+d 457 4 0 0 0
+c
+d 621 1 0 1 0
+c
+d 622 6 2 0 0
+c
+d 686 8 1 0 0
+c
+d 959 1 1 0 0
+c
+d 565 10 3 1 0
+c
+d 276 1 0 0 0
+c
+d 289 4 1 0 0
+c
+d 290 2 1 1 0
+c
+d 575 2 1 0 0
+c
+d 931 4 1 0 0
+c
+d 1080 4 0 0 0
+c
+d 1083 2 0 0 0
+c
+d 274 1 1 0 0
+c
+d 276 6 1 1 0
+c
+d 290 1 0 0 0
+c
+d 557 8 2 0 0
+c
+d 565 1 0 1 0
+c
+d 252 3 0 0 0
+c
+d 253 3 1 0 0
+c
+d 257 3 0 0 0
+c
+d 167 2 0 1 0
+c
+d 168 1 0 0 0
+c
+d 369 2 1 0 0
+c
+d 287 1 0 0 0
+c
+d 288 2 0 0 0
+c
+d 300 3 1 1 0
+c
+d 301 2 1 0 0
+c
+d 311 2 1 0 0
+c
+d 919 1 0 0 0
+c
+d 922 1 0 0 0
+c
+d 923 2 0 0 0
+c
+d 924 2 1 0 0
+c
+d 262 1 0 0 0
+c
+d 264 4 1 0 0
+c
+d 266 1 1 0 0
+c
+d 268 5 1 0 0
+c
+d 269 2 0 0 0
+c
+d 753 3 2 0 0
+c
+d 754 8 1 0 0
+c
+d 455 2 1 0 0
+c
+d 457 6 0 0 0
+c
+d 169 3 1 0 0
+c
+d 377 1 1 0 0
+c
+d 378 2 1 0 0
+c
+d 1111 3 1 0 0
+c
+d 301 4 1 0 0
+c
+d 1212 1 1 0 0
+c
+d 382 1 1 0 0
+c
+d 392 6 1 0 0
+c
+d 101 7 2 1 0
+c
+d 800 3 0 1 0
+c
+d 801 3 2 0 0
+c
+d 1168 6 2 0 0
+c
+d 1176 2 1 0 0
+c
+d 591 1 1 0 0
+c
+d 599 7 0 1 0
+c
+d 153 3 1 0 0
+c
+d 204 3 1 0 0
+c
+d 115 4 1 1 0
+c
+d 119 4 1 0 0
+c
+d 120 1 1 0 0
+c
+d 75 1 0 0 0
+c
+d 84 4 0 0 0
+c
+d 85 2 0 0 0
+c
+d 115 3 1 0 0
+c
+d 120 1 1 0 0
+c
+d 177 5 2 0 0
+c
+d 178 1 0 0 0
+c
+d 77 1 0 0 0
+c
+d 78 3 1 0 0
+c
+d 81 2 1 0 0
+c
+d 83 5 1 0 0
+c
+d 1295 1 0 1 0
+c
+d 835 4 2 1 0
+c
+d 900 3 0 0 0
+c
+d 418 1 0 0 0
+c
+d 419 2 0 1 0
+c
+d 433 3 0 0 0
+c
+d 434 4 1 0 0
+c
+d 691 2 1 0 0
+c
+d 699 4 1 0 0
+c
+d 715 3 0 0 0
+c
+d 716 1 0 0 0
+c
+d 767 4 0 0 0
+c
+d 863 4 2 0 0
+c
+d 737 4 2 0 0
+c
+d 753 4 0 0 0
+c
+d 196 3 0 0 0
+c
+d 198 1 0 0 0
+c
+d 199 2 1 1 0
+c
+d 186 1 0 0 0
+c
+d 213 3 0 1 0
+c
+d 242 3 1 0 0
+c
+d 262 1 1 0 0
+c
+d 164 1 0 0 0
+c
+d 368 2 0 0 0
+c
+d 369 5 3 0 0
+c
+d 301 8 2 0 0
+c
+d 19 3 0 0 0
+c
+d 1013 1 0 0 0
+c
+d 1022 2 1 1 0
+c
+d 1008 3 0 1 0
+c
+d 1009 5 1 0 0
+c
+d 437 6 1 1 0
+c
+d 507 1 1 0 0
+c
+d 48 4 1 0 0
+c
+d 49 2 1 0 0
+c
+d 734 1 0 0 0
+c
+d 718 1 0 0 0
+c
+d 719 2 1 0 0
+c
+d 720 5 1 0 0
+c
+d 721 1 0 0 0
+c
+d 208 3 1 0 0
+c
+d 209 3 0 1 0
+c
+d 428 1 0 0 0
+c
+d 436 5 1 0 0
+c
+d 470 1 0 0 0
+c
+d 476 1 0 0 0
+c
+d 478 2 0 0 0
+c
+d 888 4 1 0 0
+c
+d 797 4 1 0 0
+c
+d 929 1 0 0 0
+c
+d 384 3 1 0 0
+c
+d 394 2 0 0 0
+c
+d 1109 1 0 0 0
+c
+d 1133 2 1 0 0
+c
+d 49 2 0 1 0
+c
+d 734 4 0 0 0
+c
+d 217 3 1 1 0
+c
+d 221 3 1 0 0
+c
+d 861 1 0 0 0
+c
+d 862 5 1 0 0
+c
+d 863 1 1 0 0
+c
+d 92 1 0 0 0
+c
+d 93 3 1 0 0
+c
+d 114 6 1 0 0
+c
+d 738 1 0 0 0
+c
+d 748 1 0 0 0
+c
+d 854 1 0 0 0
+c
+d 857 1 0 1 0
+c
+d 893 3 2 0 0
+c
+d 211 4 1 1 0
+c
+d 1238 2 1 0 0
+c
+d 1153 8 2 0 0
+c
+d 199 5 1 0 0
+c
+d 200 1 1 0 0
+c
+d 965 6 0 1 0
+c
+d 977 1 1 0 0
+c
+d 55 4 1 0 0
+c
+d 690 1 0 0 0
+c
+d 691 1 0 0 0
+c
+d 4 1 0 0 0
+c
+d 5 6 1 0 0
+c
+d 867 1 0 0 0
+c
+d 868 6 0 1 0
+c
+d 565 6 2 0 0
+c
+d 566 1 0 0 0
+c
+d 582 6 0 0 0
+c
+d 588 2 0 0 0
+c
+d 355 3 0 0 0
+c
+d 358 1 1 0 0
+c
+d 861 5 0 0 0
+c
+d 868 3 2 0 0
+c
+d 157 2 0 0 0
+c
+d 159 2 1 0 0
+c
+d 183 1 1 0 0
+c
+d 31 7 1 1 0
+c
+d 806 3 1 1 0
+c
+d 807 3 1 0 0
+c
+d 49 8 2 0 0
+c
+d 101 1 0 0 0
+c
+d 108 3 1 0 0
+c
+d 111 1 0 1 0
+c
+d 1170 5 0 1 0
+c
+d 1184 1 0 0 0
+c
+d 1209 1 0 0 0
+c
+d 1210 3 1 0 0
+c
+d 686 2 1 0 0
+c
+d 701 5 0 0 0
+c
+d 836 4 1 0 0
+c
+d 839 2 1 0 0
+c
+d 623 3 2 0 0
+c
+d 625 1 0 0 0
+c
+d 626 1 0 1 0
+c
+d 152 8 2 0 0
+c
+d 153 2 0 0 0
+c
+d 327 1 1 0 0
+c
+d 348 3 1 0 0
+c
+d 532 1 1 0 0
+c
+d 537 6 1 0 0
+c
+d 538 2 0 0 0
+c
+d 756 2 0 1 0
+c
+d 757 1 1 0 0
+c
+d 763 1 0 0 0
+c
+d 359 1 0 0 0
+c
+d 360 2 0 0 0
+c
+d 364 5 2 0 0
+c
+d 429 4 2 0 0
+c
+d 430 2 0 0 0
+c
+d 470 1 0 0 0
+c
+d 1110 4 2 0 0
+c
+d 1115 3 0 0 0
+c
+d 749 3 0 0 0
+c
+d 855 1 1 0 0
+c
+d 857 2 0 0 0
+c
+d 860 1 0 1 0
+c
+d 507 7 1 1 0
+c
+d 169 1 0 1 0
+c
+d 377 6 1 0 0
+c
+d 378 1 0 0 0
+c
+d 437 4 1 0 0
+c
+d 467 2 1 0 0
+c
+d 510 1 0 0 0
+c
+d 517 6 1 1 0
+c
+d 518 1 1 0 0
+c
+d 1195 3 1 1 0
+c
+d 1196 2 1 0 0
+c
+d 21 1 1 0 0
+c
+d 29 3 1 0 0
+c
+d 30 3 0 0 0
+c
+d 119 8 2 1 0
+c
+d 120 1 0 0 0
+c
+d 716 7 1 0 0
+c
+d 132 1 0 0 0
+c
+d 511 4 1 0 0
+c
+d 1105 1 1 0 0
+c
+d 1106 6 1 0 0
+c
+d 1108 1 0 0 0
+c
+d 789 3 0 0 0
+c
+d 882 4 2 0 0
+c
+d 1269 3 1 1 0
+c
+d 1270 5 1 0 0
+c
+d 394 1 0 0 0
+c
+d 1111 3 0 0 0
+c
+d 1113 1 0 0 0
+c
+d 156 2 0 0 0
+c
+d 163 3 1 0 0
+c
+d 172 1 1 0 0
+c
+d 400 3 0 0 0
+c
+d 437 4 1 0 0
+c
+d 568 1 0 0 0
+c
+d 284 4 1 1 0
+c
+d 285 1 0 1 0
+c
+d 791 3 1 0 0
+c
+d 936 4 0 0 0
+c
+d 727 4 0 0 0
+c
+d 728 4 1 1 0
+c
+d 556 1 0 0 0
+c
+d 564 3 1 0 0
+c
+d 565 4 0 0 0
+c
+d 662 1 0 1 0
+c
+d 663 1 0 0 0
+c
+d 682 1 1 0 0
+c
+d 683 7 2 0 0
+c
+d 684 2 0 0 0
+c
+d 737 8 1 0 0
+c
+d 534 1 0 0 0
+c
+d 537 2 1 1 0
+c
+d 539 2 1 0 0
+c
+d 635 1 0 0 0
+c
+d 636 2 0 0 0
+c
+d 638 4 1 0 0
+c
+d 146 4 2 0 0
+c
+d 285 1 0 0 0
+c
+d 286 2 0 0 0
+c
+d 686 3 1 0 0
+c
+d 959 1 1 0 0
+c
+d 960 2 0 0 0
+c
+d 961 1 0 0 0
+c
+d 86 7 2 0 0
+c
+d 89 1 0 0 0
+c
+d 1012 3 1 0 0
+c
+d 1013 2 0 0 0
+c
+d 1033 1 1 0 0
+c
+d 457 5 1 1 0
+c
+d 48 6 3 0 0
+c
+d 939 1 0 1 0
+c
+d 941 4 1 0 0
+c
+d 168 3 1 0 0
+c
+d 169 4 1 0 0
+c
+d 170 1 1 0 0
+c
+d 378 1 0 0 0
+c
+d 823 6 0 0 0
+c
+d 1125 6 1 1 0
+c
+d 1128 1 0 0 0
+c
+d 724 1 0 0 0
+c
+d 734 2 0 0 0
+c
+d 575 5 1 0 0
+c
+d 796 1 1 0 0
+c
+d 1185 2 0 1 0
+c
+d 1188 4 0 0 0
+c
+d 193 1 0 0 0
+c
+d 195 5 1 0 0
+c
+d 594 5 2 0 0
+c
+d 278 1 0 0 0
+c
+d 279 1 0 0 0
+c
+d 1150 2 1 1 0
+c
+d 1153 5 1 0 0
+c
+d 592 1 1 0 0
+c
+d 594 5 1 0 0
+c
+d 507 3 1 0 0
+c
+d 1070 2 1 0 0
+c
+d 1071 2 1 0 0
+c
+d 1073 1 0 1 0
+c
+d 101 1 0 0 0
+c
+d 597 5 1 0 0
+c
+d 606 1 1 0 0
+c
+d 199 1 0 1 0
+c
+d 211 7 1 1 0
+c
+d 311 1 0 0 0
+c
+d 327 2 0 0 0
+c
+d 333 1 1 0 0
+c
+d 334 3 0 1 0
+c
+d 573 1 0 0 0
+c
+d 574 6 1 0 0
+c
+d 475 1 1 0 0
+c
+d 476 1 0 0 0
+c
+d 478 4 1 0 0
+c
+d 481 1 0 0 0
+c
+d 62 5 1 0 0
+c
+d 129 4 1 0 0
+c
+d 525 2 0 1 0
+c
+d 69 1 0 1 0
+c
+d 650 3 1 0 0
+c
+d 656 2 1 0 0
+c
+d 657 1 0 0 0
+c
+d 661 1 0 0 0
+c
+d 662 3 1 0 0
+c
+d 666 1 0 1 0
+c
+d 60 1 0 1 0
+c
+d 621 6 1 0 0
+c
+d 623 3 0 0 0
+c
+d 1020 5 2 0 0
+c
+d 1021 1 0 0 0
+c
+d 635 5 1 2 0
+c
+d 852 1 0 0 0
+c
+d 853 4 0 0 0
+c
+d 1275 8 1 0 0
+c
+d 1276 2 1 0 0
+c
+d 536 2 1 0 0
+c
+d 537 4 1 0 0
+c
+d 539 1 0 0 0
+c
+d 437 4 2 1 0
+c
+d 470 1 0 0 0
+c
+d 418 9 1 0 0
+c
+d 1 1 0 0 0
+c
+d 5 1 0 0 0
+c
+d 17 2 0 0 0
+c
+d 18 2 0 0 0
+c
+d 93 1 1 0 0
+c
+d 752 6 1 0 0
+c
+d 753 3 1 0 0
+c
+d 133 1 0 1 0
+c
+d 134 3 1 0 0
+c
+d 139 4 1 0 0
+c
+d 133 1 0 0 0
+c
+d 324 2 1 0 0
+c
+d 330 4 1 0 0
+c
+d 331 2 1 0 0
+c
+d 592 1 0 1 0
+c
+d 594 7 1 0 0
+c
+d 807 1 0 1 0
+c
+d 824 1 0 0 0
+c
+d 836 1 0 0 0
+c
+d 839 1 1 0 0
+c
+d 899 5 0 0 0
+c
+d 12 2 1 0 0
+c
+d 1269 3 1 0 0
+c
+d 604 5 1 1 0
+c
+d 605 1 1 0 0
+c
+d 635 1 0 0 0
+c
+d 745 2 0 0 0
+c
+d 746 3 0 0 0
+c
+d 44 5 2 1 0
+c
+d 46 1 0 1 0
+c
+d 413 3 0 0 0
+c
+d 414 1 0 0 0
+c
+d 418 5 2 0 0
+c
+d 795 7 2 0 0
+c
+d 825 1 0 0 0
+c
+d 59 2 1 0 0
+c
+d 60 3 0 0 0
+c
+d 1156 6 1 0 0
+c
+d 1160 3 1 0 0
+c
+d 767 3 1 0 0
+c
+d 890 3 1 1 0
+c
+d 340 7 3 0 0
+c
+d 323 4 1 0 0
+c
+d 324 1 1 0 0
+c
+d 276 1 0 0 0
+c
+d 289 3 1 0 0
+c
+d 290 1 0 0 0
+c
+d 29 4 1 0 0
+c
+d 1318 1 1 0 0
+c
+d 1083 1 0 0 0
+c
+d 1084 6 1 0 0
+c
+d 1085 1 1 0 0
+c
+d 121 1 1 0 0
+c
+d 123 5 0 0 0
+c
+d 570 4 1 0 0
+c
+d 791 3 0 1 0
+c
+d 792 1 0 0 0
+c
+d 697 5 1 0 0
+c
+d 698 1 0 0 0
+c
+d 294 1 0 0 0
+c
+d 298 2 0 0 0
+c
+d 323 3 2 0 0
+c
+d 159 6 1 1 0
+c
+d 185 1 0 0 0
+c
+d 211 4 3 0 0
+c
+d 1238 1 0 0 0
+c
+d 49 4 0 1 0
+c
+d 59 3 1 0 0
+c
+d 1011 1 1 0 0
+c
+d 602 4 1 0 0
+c
+d 631 6 3 0 0
+c
+d 632 1 0 0 0
+c
+d 19 3 1 0 0
+c
+d 22 2 1 0 0
+c
+d 977 1 0 0 0
+c
+d 981 1 0 1 0
+c
+d 769 7 2 0 0
+c
+d 311 1 0 1 0
+c
+d 327 2 1 0 0
+c
+d 332 1 0 1 0
+c
+d 333 1 0 0 0
+c
+d 301 4 1 0 0
+c
+d 302 4 1 0 0
+c
+d 1150 3 0 0 0
+c
+d 810 6 2 0 0
+c
+d 811 1 0 0 0
+c
+d 168 2 0 0 0
+c
+d 169 4 2 0 0
+c
+d 19 1 0 0 0
+c
+d 622 5 1 0 0
+c
+d 626 1 1 0 0
+c
+d 775 4 2 0 0
+c
+d 785 1 0 0 0
+c
+d 618 1 0 0 0
+c
+d 634 1 0 0 0
+c
+d 635 1 0 0 0
+c
+d 638 6 2 0 0
+c
+d 328 5 1 1 0
+c
+d 1235 4 1 0 0
+c
+d 1237 3 1 0 0
+c
+d 196 1 0 0 0
+c
+d 200 1 0 0 0
+c
+d 207 1 1 0 0
+c
+d 1246 2 0 0 0
+c
+d 78 3 0 0 0
+c
+d 79 2 0 0 0
+c
+d 84 4 2 0 0
+c
+d 1278 1 0 0 0
+c
+d 277 3 1 0 0
+c
+d 1158 3 1 0 0
+c
+d 54 5 2 0 0
+c
+d 55 1 0 0 0
+c
+d 87 2 0 0 0
+c
+d 183 4 1 0 0
+c
+d 184 1 0 0 0
+c
+d 189 2 0 0 0
+c
+d 168 1 1 0 0
+c
+d 1110 2 0 1 0
+c
+d 1112 5 1 1 0
+c
+d 55 4 1 0 0
+c
+d 69 4 1 0 0
+c
+d 70 2 0 0 0
+c
+d 568 1 0 0 0
+c
+d 572 4 2 1 0
+c
+d 573 1 0 0 0
+c
+d 574 1 0 0 0
+c
+d 1303 2 1 0 0
+c
+d 1304 3 2 0 0
+c
+d 2 1 0 0 0
+c
+d 3 5 2 0 0
+c
+d 13 1 0 0 0
+c
+d 806 1 0 0 0
+c
+d 811 7 1 0 0
+c
+d 152 1 0 0 0
+c
+d 413 10 2 0 0
+c
+d 926 3 0 0 0
+c
+d 927 6 3 0 0
+c
+d 811 5 0 0 0
+c
+d 914 5 1 0 0
+c
+d 575 8 3 0 0
+c
+d 1087 4 2 0 0
+c
+d 1096 2 0 0 0
+c
+d 1100 2 0 0 0
+c
+d 19 5 1 0 0
+c
+d 979 3 1 1 0
+c
+d 575 4 2 1 0
+c
+d 927 6 0 0 0
+c
+d 928 1 0 0 0
+c
+d 529 5 2 0 0
+c
+d 550 1 0 1 0
+c
+d 855 6 1 1 0
+c
+d 101 1 1 0 0
+c
+d 1084 4 1 0 0
+c
+d 1085 1 0 0 0
+c
+d 477 1 0 0 0
+c
+d 478 2 1 0 0
+c
+d 482 1 0 1 0
+c
+d 486 2 0 0 0
+c
+d 49 3 0 0 0
+c
+d 50 2 1 0 0
+c
+d 51 3 1 0 0
+c
+d 57 2 0 0 0
+c
+d 132 1 0 0 0
+c
+d 492 6 1 0 0
+c
+d 493 1 0 0 0
+c
+d 143 1 1 0 0
+c
+d 144 5 2 0 0
+c
+d 145 3 0 0 0
+c
+d 823 4 1 0 0
+c
+d 835 2 1 0 0
+c
+d 900 1 0 1 0
+c
+d 21 8 2 1 0
+c
+d 507 3 0 1 0
+c
+d 558 2 1 0 0
+c
+d 559 4 1 0 0
+c
+d 666 1 0 0 0
+c
+d 675 6 1 1 0
+c
+d 621 6 1 0 0
+c
+d 647 1 1 0 0
+c
+d 649 2 1 0 0
+c
+d 655 2 0 1 0
+c
+d 655 8 1 0 0
+c
+d 734 7 2 0 0
+c
+d 315 5 0 0 0
+c
+d 157 5 1 0 0
+c
+d 358 1 0 0 0
+c
+d 211 6 2 1 0
+c
+d 217 9 2 0 0
+c
+d 966 5 1 0 0
+c
+d 967 3 0 0 0
+c
+d 127 3 1 1 0
+c
+d 128 5 1 0 0
+c
+d 129 2 0 0 0
+c
+d 718 4 0 0 0
+c
+d 731 2 1 0 0
+c
+d 91 3 0 1 0
+c
+d 92 2 1 0 0
+c
+d 93 3 0 0 0
+c
+d 804 1 0 0 0
+c
+d 915 7 3 0 0
+c
+d 919 1 0 1 0
+c
+d 574 6 2 0 0
+c
+d 795 2 0 1 0
+c
+d 807 1 0 0 0
+c
+d 178 3 0 0 0
+c
+d 181 2 1 0 0
+c
+d 190 1 0 0 0
+c
+d 152 3 1 0 0
+c
+d 155 5 1 0 0
+c
+d 286 6 0 0 0
+c
+d 291 1 0 0 0
+c
+d 248 5 1 0 0
+c
+d 249 1 0 0 0
+c
+d 719 2 0 0 0
+c
+d 949 5 0 0 0
+c
+d 126 8 0 0 0
+c
+d 305 6 2 0 0
+c
+d 437 5 1 0 0
+c
+d 457 5 1 0 0
+c
+d 1170 6 1 1 0
+c
+d 84 2 1 0 0
+c
+d 1278 4 1 0 0
+c
+d 1279 1 1 0 0
+c
+d 294 1 0 0 0
+c
+d 298 3 0 1 0
+c
+d 318 2 1 0 0
+c
+d 319 1 1 0 0
+c
+d 1170 1 1 0 0
+c
+d 1185 5 1 0 0
+c
+d 1188 2 0 0 0
+c
+d 1189 1 0 0 0
+c
+d 568 2 1 0 0
+c
+d 570 3 0 0 0
+c
+d 1057 5 1 0 0
+c
+d 159 2 0 0 0
+c
+d 183 5 0 0 0
+c
+d 791 3 1 0 0
+c
+d 829 3 1 1 0
+c
+d 832 2 0 0 0
+c
+d 936 1 0 0 0
+c
+d 199 2 1 0 0
+c
+d 211 2 1 0 0
+c
+d 217 2 1 0 0
+c
+d 18 7 0 0 0
+c
+d 301 4 1 1 0
+c
+d 304 1 0 0 0
+c
+d 1217 1 1 0 0
+c
+d 437 2 1 1 0
+c
+d 1045 4 1 0 0
+c
+d 423 1 0 1 0
+c
+d 424 6 1 0 0
+c
+d 705 3 0 1 0
+c
+d 706 4 1 1 0
+c
+d 302 1 0 0 0
+c
+d 303 1 0 0 0
+c
+d 1156 3 2 0 0
+c
+d 1157 2 1 0 0
+c
+d 1159 3 0 0 0
+c
+d 621 1 1 0 0
+c
+d 626 3 0 0 0
+c
+d 627 1 0 1 0
+c
+d 989 7 2 0 0
+c
+d 990 1 0 0 0
+c
+d 574 1 1 0 0
+c
+d 795 4 1 0 0
+c
+d 54 3 1 1 0
+c
+d 1311 3 1 0 0
+c
+d 1312 1 0 0 0
+c
+d 527 3 1 0 0
+c
+d 528 4 1 0 0
+c
+d 428 8 2 0 0
+c
+d 436 1 0 0 0
+c
+d 436 1 0 0 0
+c
+d 437 4 0 0 0
+c
+d 467 1 1 0 0
+c
+d 468 2 1 0 0
+c
+d 511 3 1 2 0
+c
+d 521 5 0 0 0
+c
+d 522 2 0 0 0
+c
+d 272 1 1 0 0
+c
+d 287 6 1 0 0
+c
+d 213 4 1 1 0
+c
+d 242 1 0 0 0
+c
+d 276 7 1 1 0
+c
+d 1188 3 0 0 0
+c
+d 1202 1 0 1 0
+c
+d 1204 5 1 0 0
+c
+d 21 4 1 0 0
+c
+d 26 4 2 0 0
+c
+d 39 1 1 0 0
+c
+d 1022 8 1 0 0
+c
+d 1023 2 1 1 0
+c
+d 691 4 1 0 0
+c
+d 697 2 1 0 0
+c
+d 698 3 0 0 0
+c
+d 287 2 1 0 0
+c
+d 288 3 1 1 0
+c
+d 89 9 2 0 0
+c
+d 119 1 1 0 0
+c
+d 157 1 0 0 0
+c
+d 159 3 0 1 0
+c
+d 183 1 1 0 0
+c
+d 842 6 0 0 0
+c
+d 578 4 1 0 0
+c
+d 580 2 0 0 0
+c
+d 956 1 0 1 0
+c
+d 958 3 2 0 0
+c
+d 109 1 1 0 0
+c
+d 110 2 1 0 0
+c
+d 111 2 0 0 0
+c
+d 229 1 0 0 0
+c
+d 50 1 0 0 0
+c
+d 51 4 1 0 0
+c
+d 1309 2 1 0 0
+c
+d 505 2 2 0 0
+c
+d 511 1 0 0 0
+c
+d 514 4 0 0 0
+c
+d 516 1 0 0 0
+c
+d 21 6 1 0 0
+c
+d 23 1 1 0 0
+c
+d 286 3 0 0 0
+c
+d 167 1 0 0 0
+c
+d 369 3 1 0 0
+c
+d 382 1 0 1 0
+c
+d 1009 5 2 1 0
+c
+d 806 1 0 0 0
+c
+d 910 4 2 0 0
+c
+d 395 1 0 0 0
+c
+d 1106 8 3 0 0
+c
+d 1107 1 0 0 0
+c
+d 1168 2 0 0 0
+c
+d 1176 4 1 1 0
+c
+d 602 6 1 0 0
+c
+d 642 1 1 0 0
+c
+d 697 1 0 0 0
+c
+d 716 5 1 1 0
+c
+d 555 1 0 0 0
+c
+d 556 4 1 0 0
+c
+d 457 4 1 1 0
+c
+d 460 1 0 0 0
+c
+d 842 2 1 0 0
+c
+d 881 6 0 1 0
+c
+d 46 6 1 0 0
+c
+d 73 3 1 0 0
+c
+d 368 4 1 0 0
+c
+d 1126 4 2 0 0
+c
+d 84 1 1 0 0
+c
+d 1279 2 1 0 0
+c
+d 1281 3 0 0 0
+c
+d 1282 1 0 0 0
+c
+d 1283 3 0 0 0
+c
+d 1284 4 1 0 0
+c
+d 343 1 0 0 0
+c
+d 491 5 0 0 0
+c
+d 492 2 0 0 0
+c
+d 208 5 2 0 0
+c
+d 1244 4 1 0 0
+c
+d 343 3 1 1 0
+c
+d 437 1 1 0 0
+c
+d 753 4 2 0 0
+c
+d 859 4 1 0 0
+c
+d 505 4 2 0 0
+c
+d 506 2 0 0 0
+c
+d 146 3 0 0 0
+c
+d 152 3 1 0 0
+c
+d 1097 1 1 0 0
+c
+d 18 3 0 0 0
+c
+d 989 3 1 1 0
+c
+d 990 2 0 0 0
+c
+d 424 6 1 0 0
+c
+d 591 1 0 1 0
+c
+d 146 6 1 1 0
+c
+d 147 2 0 0 0
+c
+d 294 2 0 0 0
+c
+d 622 3 1 0 0
+c
+d 1035 2 1 0 0
+c
+d 132 10 2 0 0
+c
+d 133 2 0 0 0
+c
+d 340 3 0 0 0
+c
+d 344 5 3 0 0
+c
+d 578 4 1 1 0
+c
+d 580 1 0 1 0
+c
+d 581 1 0 0 0
+c
+d 1 4 0 0 0
+c
+d 5 1 0 0 0
+c
+d 1322 3 1 0 0
+c
+d 276 1 0 0 0
+c
+d 301 3 0 0 0
+c
+d 1156 5 0 0 0
+c
+d 1215 3 0 0 0
+c
+d 129 1 0 0 0
+c
+d 131 1 0 0 0
+c
+d 523 3 1 0 0
+c
+d 622 1 0 0 0
+c
+d 965 3 2 0 0
+c
+d 968 5 1 0 0
+c
+d 564 6 1 0 0
+c
+d 565 4 2 0 0
+c
+d 659 2 1 0 0
+c
+d 660 5 0 0 0
+c
+d 661 3 1 0 0
+c
+d 670 1 0 0 0
+c
+d 772 6 1 0 0
+c
+d 774 2 0 0 0
+c
+d 262 6 1 0 0
+c
+d 218 5 1 0 0
+c
+d 527 9 3 0 0
+c
+d 146 2 0 1 0
+c
+d 150 1 0 0 0
+c
+d 294 2 1 0 0
+c
+d 295 1 0 0 0
+c
+d 296 1 0 0 0
+c
+d 769 8 2 1 0
+c
+d 565 1 0 0 0
+c
+d 570 2 1 0 0
+c
+d 791 3 1 0 0
+c
+d 878 3 1 1 0
+c
+d 879 1 0 0 0
+c
+d 880 2 0 0 0
+c
+d 5 8 3 1 0
+c
+d 787 2 0 0 0
+c
+d 789 1 0 0 0
+c
+d 882 4 1 0 0
+c
+d 884 3 1 0 0
+c
+d 829 7 3 0 0
+c
+d 246 3 0 0 0
+c
+d 252 4 1 0 0
+c
+d 259 1 1 0 0
+c
+d 43 5 1 0 0
+c
+d 44 1 0 1 0
+c
+d 374 1 0 0 0
+c
+d 377 3 1 0 0
+c
+d 384 1 0 1 0
+c
+d 261 4 1 0 0
+c
+d 1226 1 0 1 0
+c
+d 527 1 0 1 0
+c
+d 543 4 1 0 0
+c
+d 544 3 0 0 0
+c
+d 268 2 1 0 0
+c
+d 272 1 0 0 0
+c
+d 282 4 0 0 0
+c
+d 1227 1 0 1 0
+c
+d 162 2 0 0 0
+c
+d 164 2 0 0 0
+c
+d 368 2 0 0 0
+c
+d 1269 3 2 0 0
+c
+d 1270 3 0 0 0
+c
+d 75 2 0 0 0
+c
+d 79 3 1 0 0
+c
+d 80 1 0 0 0
+c
+d 1300 1 0 0 0
+c
+d 181 1 0 0 0
+c
+d 195 2 0 0 0
+c
+d 203 1 0 0 0
+c
+d 205 1 0 1 0
+c
+d 1173 2 0 1 0
+c
+d 1174 6 2 0 0
+c
+d 206 1 1 0 0
+c
+d 207 6 0 1 0
+c
+d 209 1 0 0 0
+c
+d 1245 1 0 0 0
+c
+d 558 4 1 0 0
+c
+d 559 3 0 0 0
+c
+d 563 2 0 0 0
+c
+d 1176 4 1 0 0
+c
+d 1179 2 1 0 0
+c
+d 1180 2 1 0 0
+c
+d 1181 1 1 0 0
+c
+d 559 7 2 2 0
+c
+d 560 1 0 0 0
+c
+d 686 5 3 0 0
+c
+d 689 3 0 0 0
+c
+d 703 1 0 0 0
+c
+d 393 1 0 0 0
+c
+d 395 1 0 0 0
+c
+d 407 3 1 0 0
+c
+d 408 3 1 0 0
+c
+d 1168 2 2 0 0
+c
+d 1169 5 0 0 0
+c
+d 1170 1 0 0 0
+c
+d 509 4 1 0 0
+c
+d 510 1 0 0 0
+c
+d 1071 1 1 0 0
+c
+d 152 4 1 0 0
+c
+d 155 1 0 1 0
+c
+d 301 6 2 0 0
+c
+d 1157 1 0 1 0
+c
+d 1220 2 0 0 0
+c
+d 699 5 2 0 0
+c
+d 844 1 0 0 0
+c
+d 1163 5 2 0 0
+c
+d 1164 1 0 0 0
+c
+d 217 9 3 0 0
+c
+d 1240 1 0 0 0
+c
+d 1243 1 0 0 0
+c
+d 618 6 2 0 0
+c
+d 621 2 1 0 0
+c
+d 153 1 0 1 0
+c
+d 155 2 1 0 0
+c
+d 176 3 1 0 0
+c
+d 180 1 0 0 0
+c
+d 751 1 0 1 0
+c
+d 753 3 1 1 0
+c
+d 943 2 0 0 0
+c
+d 789 3 1 1 0
+c
+d 878 1 0 0 0
+c
+d 882 4 1 0 0
+c
+d 152 1 0 0 0
+c
+d 153 5 2 0 0
+c
+d 505 1 0 1 0
+c
+d 511 5 2 0 0
+c
+d 836 3 1 0 0
+c
+d 839 3 1 0 0
+c
+d 840 1 0 0 0
+c
+d 132 1 1 0 0
+c
+d 495 1 0 0 0
+c
+d 496 1 0 0 0
+c
+d 157 6 3 0 0
+c
+d 364 1 0 0 0
+c
+d 487 4 1 0 0
+c
+d 488 1 0 1 0
+c
+d 482 1 0 0 0
+c
+d 484 4 0 0 0
+c
+d 534 5 1 1 0
+c
+d 301 2 1 0 0
+c
+d 1157 2 1 0 0
+c
+d 1163 3 1 0 0
+c
+d 133 4 1 0 0
+c
+d 146 1 1 0 0
+c
+d 152 2 0 0 0
+c
+d 153 3 1 0 0
+c
+d 154 2 0 0 0
+c
+d 1171 2 0 0 0
+c
+d 1172 5 2 0 0
+c
+d 661 2 0 0 0
+c
+d 662 1 0 0 0
+c
+d 670 3 1 0 0
+c
+d 671 2 1 0 0
+c
+d 299 2 1 0 0
+c
+d 300 3 1 0 0
+c
+d 294 3 0 0 0
+c
+d 298 1 0 0 0
+c
+d 437 5 0 0 0
+c
+d 445 1 1 0 0
+c
+d 262 3 1 1 0
+c
+d 264 1 1 0 0
+c
+d 265 3 1 0 0
+c
+d 286 1 0 0 0
+c
+d 551 1 0 0 0
+c
+d 775 4 1 0 0
+c
+d 152 2 1 0 0
+c
+d 153 3 1 0 0
+c
+d 155 2 0 0 0
+c
+d 156 1 0 0 0
+c
+d 1195 3 1 0 0
+c
+d 1196 3 0 0 0
+c
+d 31 7 3 1 0
+c
+d 101 1 0 0 0
+c
+d 591 1 0 0 0
+c
+d 597 5 1 0 0
+c
+d 157 6 2 0 0
+c
+d 851 6 1 0 0
+c
+d 853 1 0 0 0
+c
+d 896 1 0 0 0
+c
+d 1113 1 1 0 0
+c
+d 1114 2 1 0 0
+c
+d 1115 2 1 0 0
+c
+d 1118 1 0 0 0
+c
+d 327 1 0 1 0
+c
+d 334 4 2 0 0
+c
+d 272 1 0 0 0
+c
+d 282 1 0 0 0
+c
+d 287 4 2 0 0
+c
+d 591 3 2 0 0
+c
+d 595 2 0 0 0
+c
+d 596 1 0 0 0
+c
+d 686 1 0 0 0
+c
+d 419 4 2 1 0
+c
+d 1102 2 0 0 0
+c
+d 159 4 1 1 0
+c
+d 184 1 0 1 0
+c
+d 248 2 0 0 0
+c
+d 249 4 1 0 0
+c
+d 250 2 1 0 0
+c
+d 101 1 0 0 0
+c
+d 424 3 0 0 0
+c
+d 425 4 2 0 0
+c
+d 426 1 0 1 0
+c
+d 858 1 0 0 0
+c
+d 861 3 2 0 0
+c
+d 869 3 1 0 0
+c
+d 870 1 0 0 0
+c
+d 278 7 2 0 0
+c
+d 753 2 0 0 0
+c
+d 755 5 1 0 0
+c
+d 686 1 0 1 0
+c
+d 689 8 1 0 0
+c
+d 169 7 1 0 0
+c
+d 376 2 0 1 0
+c
+d 844 8 2 1 0
+c
+d 851 1 0 0 0
+c
+d 897 1 0 0 0
+c
+d 304 5 2 1 0
+c
+d 308 4 1 0 0
+c
+d 130 1 0 0 0
+c
+d 132 1 0 1 0
+c
+d 1258 6 1 0 0
+c
+d 575 2 1 0 0
+c
+d 577 3 0 0 0
+c
+d 544 1 0 1 0
+c
+d 545 2 0 0 0
+c
+d 546 6 1 0 0
+c
+d 132 4 1 0 0
+c
+d 133 1 1 0 0
+c
+d 337 1 0 0 0
+c
+d 663 3 1 0 0
+c
+d 665 3 0 0 0
+c
+d 681 1 0 0 0
+c
+d 457 1 0 1 0
+c
+d 458 4 0 0 0
+c
+d 459 1 0 0 0
+c
+d 460 2 1 0 0
+c
+d 572 1 0 0 0
+c
+d 574 3 1 0 0
+c
+d 795 3 1 0 0
+c
+d 908 1 0 1 0
+c
+d 32 3 0 0 0
+c
+d 77 1 0 0 0
+c
+d 1296 4 2 0 0
+c
+d 52 3 1 1 0
+c
+d 54 1 0 0 0
+c
+d 89 1 0 0 0
+c
+d 550 1 0 0 0
+c
+d 552 1 0 0 0
+c
+d 507 3 0 0 0
+c
+d 1070 1 0 0 0
+c
+d 806 8 2 0 0
+c
+d 84 8 2 0 0
+c
+d 1275 1 0 0 0
+c
+d 301 8 3 2 0
+c
+d 242 1 0 1 0
+c
+d 246 3 1 0 0
+c
+d 262 3 0 0 0
+c
+d 556 1 1 0 0
+c
+d 564 2 0 0 0
+c
+d 565 1 0 0 0
+c
+d 341 3 1 0 0
+c
+d 411 3 1 1 0
+c
+d 68 1 0 0 0
+c
+d 69 3 0 0 0
+c
+d 75 3 1 0 0
+c
+d 84 1 0 1 0
+c
+d 18 5 1 1 0
+c
+d 578 3 1 1 0
+c
+d 955 3 0 0 0
+c
+d 807 3 0 0 0
+c
+d 906 2 1 0 0
+c
+d 341 5 2 0 0
+c
+d 342 1 0 0 0
+c
+d 437 3 0 0 0
+c
+d 686 2 1 0 0
+c
+d 959 2 1 0 0
+c
+d 962 1 0 0 0
+c
+d 963 3 0 0 0
+c
+d 572 7 2 0 0
+c
+d 757 5 1 0 0
+c
+d 787 1 0 0 0
+c
+d 882 2 0 1 0
+c
+d 886 1 1 0 0
+c
+d 887 4 1 0 0
+c
+d 754 1 0 0 0
+c
+d 755 5 1 0 0
+c
+d 756 1 0 0 0
+c
+d 61 5 2 0 0
+c
+d 62 1 0 0 0
+c
+d 64 1 1 0 0
+c
+d 855 5 1 0 0
+c
+d 856 1 1 0 0
+c
+d 857 1 0 0 0
+c
+d 507 7 1 1 0
+c
+d 1070 1 0 1 0
+c
+d 551 1 1 0 0
+c
+d 564 6 2 0 0
+c
+d 146 6 0 0 0
+c
+d 151 4 2 0 0
+c
+d 511 3 0 0 0
+c
+d 528 1 1 0 0
+c
+d 529 1 0 1 0
+c
+d 159 1 0 0 0
+c
+d 183 2 0 0 0
+c
+d 184 1 1 0 0
+c
+d 769 8 2 0 0
+c
+d 737 8 1 0 0
+c
+d 734 7 0 0 0
+c
+d 1195 7 1 0 0
+c
+d 1198 1 0 0 0
+c
+d 101 7 2 0 0
+c
+d 114 1 0 0 0
+c
+d 120 5 2 0 0
+c
+d 811 8 2 0 0
+c
+d 507 1 0 0 0
+c
+d 1070 3 0 0 0
+c
+d 1074 4 0 0 0
+c
+d 1075 1 0 1 0
+c
+d 1013 1 0 0 0
+c
+d 1017 5 0 0 0
+c
+d 1022 1 0 0 0
+c
+d 733 3 2 0 0
+c
+d 734 3 0 0 0
+c
+d 735 1 0 0 0
+c
+d 75 5 2 0 0
+c
+d 84 2 0 1 0
+c
+d 54 1 0 0 0
+c
+d 55 3 2 0 0
+c
+d 66 1 0 1 0
+c
+d 1170 6 1 0 0
+c
+d 1171 2 0 0 0
+c
+d 208 9 1 1 0
+c
+d 1244 1 1 0 0
+c
+d 341 2 1 0 0
+c
+d 348 3 0 0 0
+c
+d 470 2 1 0 0
+c
+d 477 1 0 0 0
+c
+d 48 2 1 0 0
+c
+d 939 2 1 0 0
+c
+d 940 6 0 0 0
+c
+d 21 7 0 0 0
+c
+d 591 1 0 1 0
+c
+d 597 4 1 0 0
+c
+d 598 1 0 1 0
+c
+d 601 1 0 0 0
+c
+d 334 2 1 0 0
+c
+d 335 1 0 1 0
+c
+d 336 2 1 0 0
+c
+d 529 1 0 0 0
+c
+d 530 4 1 0 0
+c
+d 531 6 1 0 0
+c
+d 127 1 0 0 0
+c
+d 129 1 0 0 0
+c
+d 606 7 4 0 0
+c
+d 1156 1 1 0 0
+c
+d 1177 2 0 0 0
+c
+d 1184 7 2 0 0
+c
+d 157 3 1 1 0
+c
+d 1142 3 1 0 0
+c
+d 551 1 0 0 0
+c
+d 564 10 2 0 0
+c
+d 753 4 1 1 0
+c
+d 755 1 1 0 0
+c
+d 718 1 0 0 0
+c
+d 729 1 0 0 0
+c
+d 946 4 1 0 0
+c
+d 947 1 0 0 0
+c
+d 294 6 1 0 0
+c
+d 298 1 0 1 0
+c
+d 196 3 0 0 0
+c
+d 1246 1 0 0 0
+c
+d 1247 2 1 0 0
+c
+d 157 4 0 0 0
+c
+d 1141 1 0 0 0
+c
+d 1142 3 1 0 0
+c
+d 507 5 0 0 0
+c
+d 508 1 0 0 0
+c
+d 514 1 0 0 0
+c
+d 1110 1 0 0 0
+c
+d 1111 2 0 0 0
+c
+d 1113 1 0 0 0
+c
+d 1115 2 0 0 0
+c
+d 1269 6 0 0 0
+c
+d 164 7 2 1 0
+c
+d 395 9 2 1 0
+c
+d 47 1 0 0 0
+c
+d 769 1 0 0 0
+c
+d 775 3 2 1 0
+c
+d 835 1 1 0 0
+c
+d 901 4 0 0 0
+c
+d 902 5 0 0 0
+c
+d 875 5 1 0 0
+c
+d 574 10 2 0 0
+c
+d 1053 1 0 0 0
+c
+d 341 1 0 0 0
+c
+d 348 3 0 0 0
+c
+d 1194 2 0 1 0
+c
+d 1203 1 0 0 0
+c
+d 1205 6 2 0 0
+c
+d 534 7 2 0 0
+c
+d 621 3 0 0 0
+c
+d 623 1 1 0 0
+c
+d 626 2 1 0 0
+c
+d 550 3 1 1 0
+c
+d 556 3 1 0 0
+c
+d 557 3 0 0 0
+c
+d 565 1 0 0 0
+c
+d 206 2 1 1 0
+c
+d 207 4 0 0 0
+c
+d 1246 1 0 0 0
+c
+d 532 2 0 1 0
+c
+d 535 4 1 0 0
+c
+d 537 1 1 0 0
+c
+d 951 1 0 0 0
+c
+d 952 1 0 0 0
+c
+d 953 3 1 0 0
+c
+d 341 5 1 0 0
+c
+d 342 3 1 0 0
+c
+d 737 2 0 0 0
+c
+d 738 6 2 1 0
+c
+d 287 6 1 0 0
+c
+d 288 2 1 0 0
+c
+d 846 7 1 0 0
+c
+d 847 1 0 0 0
+c
+d 767 2 0 0 0
+c
+d 891 4 0 0 0
+c
+d 796 1 1 0 0
+c
+d 797 2 0 0 0
+c
+d 799 2 0 0 0
+c
+d 769 5 1 0 0
+c
+d 775 3 1 0 0
+c
+d 886 1 0 1 0
+c
+d 437 2 0 0 0
+c
+d 454 2 0 0 0
+c
+d 507 2 1 0 0
+c
+d 508 1 1 0 0
+c
+d 753 7 2 1 0
+c
+d 56 7 2 1 0
+c
+d 1310 1 0 0 0
+c
+d 7 8 3 0 0
+c
+d 8 2 0 0 0
+c
+d 529 2 1 0 0
+c
+d 532 1 1 0 0
+c
+d 1069 4 0 0 0
+c
+d 318 1 1 0 0
+c
+d 323 6 1 0 0
+c
+d 86 1 1 0 0
+c
+d 87 3 0 0 0
+c
+d 157 1 1 0 0
+c
+d 305 6 1 0 0
+c
+d 1141 1 0 0 0
+c
+d 641 3 0 0 0
+c
+d 642 1 0 0 0
+c
+d 157 1 1 0 0
+c
+d 159 2 1 0 0
+c
+d 183 4 0 0 0
+c
+d 534 7 2 0 0
+c
+d 537 1 0 0 0
+c
+d 101 3 2 0 0
+c
+d 424 4 1 0 0
+c
+d 575 1 0 0 0
+c
+d 578 5 1 1 0
+c
+d 304 5 1 0 0
+c
+d 309 1 1 0 0
+c
+d 194 1 0 0 0
+c
+d 204 5 2 1 0
+c
+d 96 6 1 2 0
+c
+d 998 7 2 0 0
+c
+d 888 7 1 0 0
+c
+d 146 7 3 0 0
+c
+d 965 3 1 0 0
+c
+d 966 6 0 0 0
+c
+d 972 2 0 0 0
+c
+d 152 3 0 0 0
+c
+d 413 3 1 0 0
+c
+d 419 2 1 0 0
+c
+d 791 2 0 0 0
+c
+d 793 3 2 0 0
+c
+d 19 1 0 1 0
+c
+d 21 4 0 0 0
+c
+d 22 4 1 0 0
+c
+d 23 1 0 0 0
+c
+d 31 1 0 0 0
+c
+d 32 5 2 0 0
+c
+d 261 3 1 1 0
+c
+d 262 1 0 0 0
+c
+d 283 3 0 0 0
+c
+d 284 1 0 0 0
+c
+d 556 1 0 0 0
+c
+d 557 2 0 0 0
+c
+d 565 2 0 1 0
+c
+d 567 3 1 0 0
+c
+d 310 5 1 1 0
+c
+d 305 2 0 0 0
+c
+d 353 4 1 0 0
+c
+d 1140 1 0 0 0
+c
+d 437 3 2 0 0
+c
+d 1047 2 1 0 0
+c
+d 1049 1 0 0 0
+c
+d 575 7 2 0 0
+c
+d 578 2 1 0 0
+c
+d 495 6 2 0 0
+c
+d 691 2 1 1 0
+c
+d 801 5 0 0 0
+c
+d 93 1 0 0 0
+c
+d 114 3 1 0 0
+c
+d 115 1 0 1 0
+c
+d 691 8 1 0 0
+c
+d 213 6 1 0 0
+c
+d 214 1 0 0 0
+c
+d 749 6 2 0 0
+c
+d 146 10 1 0 0
+c
+d 51 3 1 1 0
+c
+d 56 2 0 0 0
+c
+d 57 1 0 0 0
+c
+d 59 1 0 0 0
+c
+d 817 6 1 0 0
+c
+d 818 1 0 0 0
+c
+d 819 2 1 0 0
+c
+d 101 1 1 0 0
+c
+d 608 3 1 0 0
+c
+d 1037 1 1 0 0
+c
+d 756 2 0 0 0
+c
+d 768 3 0 0 0
+c
+d 769 3 1 1 0
+c
+d 772 1 0 0 0
+c
+d 578 2 0 0 0
+c
+d 955 3 0 0 0
+c
+d 965 1 0 0 0
+c
+d 970 3 0 1 0
+c
+d 972 2 1 1 0
+c
+d 437 7 2 0 0
+c
+d 457 1 1 0 0
+c
+d 466 1 0 0 0
+c
+d 457 1 0 0 0
+c
+d 466 1 0 0 0
+c
+d 467 4 1 1 0
+c
+d 468 3 1 0 0
+c
+d 96 6 2 0 0
+c
+d 854 2 0 0 0
+c
+d 855 1 0 0 0
+c
+d 895 3 0 0 0
+c
+d 738 3 1 0 0
+c
+d 743 2 1 0 0
+c
+d 744 2 0 0 0
+c
+d 745 1 0 1 0
+c
+d 550 3 1 0 0
+c
+d 556 2 1 0 0
+c
+d 557 2 1 0 0
+c
+d 565 1 0 0 0
+c
+d 49 1 0 0 0
+c
+d 59 4 2 0 0
+c
+d 60 1 1 0 0
+c
+d 167 2 0 0 0
+c
+d 70 5 1 1 0
+c
+d 651 1 0 0 0
+c
+d 400 6 3 0 0
+c
+d 408 3 1 0 0
+c
+d 764 1 0 0 0
+c
+d 765 5 1 0 0
+c
+d 550 3 1 0 0
+c
+d 1067 4 1 0 0
+c
+d 493 5 2 0 0
+c
+d 494 6 1 1 0
+c
+d 496 2 0 0 0
+c
+d 74 4 1 0 0
+c
+d 75 1 0 0 0
+c
+d 1298 1 1 0 0
+c
+d 1299 2 0 0 0
+c
+d 21 3 1 0 0
+c
+d 1022 4 0 0 0
+c
+d 1023 1 0 1 0
+c
+d 60 4 2 0 0
+c
+d 1009 4 1 1 0
+c
+d 437 5 2 0 0
+c
+d 10 1 1 0 0
+c
+d 11 5 1 0 0
+c
+d 650 2 0 0 0
+c
+d 651 2 1 0 0
+c
+d 685 2 1 0 0
+c
+d 152 5 1 0 0
+c
+d 1254 1 0 0 0
+c
+d 145 1 0 0 0
+c
+d 146 5 2 0 0
+c
+d 1279 1 0 0 0
+c
+d 1281 4 1 0 0
+c
+d 1282 4 1 0 0
+c
+d 152 2 1 0 0
+c
+d 153 3 1 0 0
+c
+d 155 1 0 0 0
+c
+d 836 2 0 0 0
+c
+d 838 6 3 0 0
+c
+d 87 6 1 0 0
+c
+d 89 3 1 0 0
+c
+d 791 5 1 0 0
+c
+d 794 2 1 0 0
+c
+d 340 7 2 0 0
+c
+d 344 2 0 0 0
+c
+d 55 7 2 0 0
+c
+d 691 1 0 0 0
+c
+d 799 1 1 0 0
+c
+d 806 7 1 0 0
+c
+d 455 2 1 1 0
+c
+d 457 1 0 1 0
+c
+d 467 1 0 0 0
+c
+d 468 3 0 0 0
+c
+d 29 3 1 1 0
+c
+d 31 3 0 0 0
+c
+d 428 4 1 0 0
+c
+d 153 2 0 0 0
+c
+d 155 6 2 0 0
+c
+d 148 3 1 0 0
+c
+d 232 1 1 0 0
+c
+d 234 2 0 0 0
+c
+d 259 1 0 0 0
+c
+d 211 1 0 0 0
+c
+d 242 2 0 0 0
+c
+d 248 3 2 0 0
+c
+d 437 1 0 0 0
+c
+d 574 6 0 0 0
+c
+d 437 2 0 0 0
+c
+d 444 4 0 0 0
+c
+d 75 1 0 1 0
+c
+d 86 2 1 0 0
+c
+d 87 1 1 0 0
+c
+d 795 5 1 0 0
+c
+d 834 1 0 0 0
+c
+d 1165 5 1 0 0
+c
+d 1168 2 1 0 0
+c
+d 1177 1 1 0 0
+c
+d 1121 4 0 0 0
+c
+d 1123 1 0 0 0
+c
+d 133 6 2 0 0
+c
+d 134 2 0 0 0
+c
+d 509 1 1 0 0
+c
+d 1070 2 1 0 0
+c
+d 1073 1 0 0 0
+c
+d 734 5 2 0 0
+c
+d 5 6 1 0 0
+c
+d 9 2 1 1 0
+c
+d 650 4 1 1 0
+c
+d 653 3 0 0 0
+c
+d 507 3 0 0 0
+c
+d 508 5 1 0 0
+c
+d 509 4 2 0 0
+c
+d 156 6 1 0 0
+c
+d 157 1 0 1 0
+c
+d 55 3 1 0 0
+c
+d 691 1 0 1 0
+c
+d 694 5 2 0 0
+c
+d 120 4 1 2 0
+c
+d 125 1 0 0 0
+c
+d 133 3 1 1 0
+c
+d 323 2 0 1 0
+c
+d 767 5 0 0 0
+c
+d 863 1 0 0 0
+c
+d 22 4 0 0 0
+c
+d 23 1 0 0 0
+c
+d 727 3 1 0 0
+c
+d 728 1 1 0 0
+c
+d 948 3 1 1 0
+c
+d 437 1 0 0 0
+c
+d 453 3 1 0 0
+c
+d 749 3 1 0 0
+c
+d 751 3 0 0 0
+c
+d 125 1 1 0 0
+c
+d 533 4 2 0 0
+c
+d 534 1 0 0 0
+c
+d 525 6 2 0 0
+c
+d 526 2 0 0 0
+c
+d 341 1 0 0 0
+c
+d 343 3 0 1 0
+c
+d 1148 3 1 0 0
+c
+d 288 1 0 1 0
+c
+d 300 3 1 0 0
+c
+d 314 4 1 0 0
+c
+d 278 2 1 1 0
+c
+d 1165 6 1 0 0
+c
+d 1166 1 0 0 0
+c
+d 1211 1 0 0 0
+c
+d 616 5 1 1 0
+c
+d 1165 4 0 0 0
+c
+d 1168 3 1 0 0
+c
+d 1176 1 0 1 0
+c
+d 93 5 2 0 0
+c
+d 114 3 1 1 0
+c
+d 156 1 0 1 0
+c
+d 157 2 1 0 0
+c
+d 177 2 0 0 0
+c
+d 178 3 1 0 0
+c
+d 801 1 1 0 0
+c
+d 802 3 1 0 0
+c
+d 54 2 1 0 0
+c
+d 694 3 1 0 0
+c
+d 695 1 1 0 0
+c
+d 1311 1 0 1 0
+c
+d 775 3 0 0 0
+c
+d 776 1 0 0 0
+c
+d 143 6 2 0 0
+c
+d 120 6 2 1 0
+c
+d 123 1 0 0 0
+c
+d 101 3 2 1 0
+c
+d 597 1 0 0 0
+c
+d 272 2 1 0 0
+c
+d 273 2 0 0 0
+c
+d 276 1 0 0 0
+c
+d 1229 1 0 0 0
+c
+d 26 1 0 0 0
+c
+d 1315 3 0 1 0
+c
+d 1316 1 1 0 0
+c
+d 1317 1 1 0 0
+c
+d 86 3 1 0 0
+c
+d 1293 3 0 0 0
+c
+d 384 1 0 1 0
+c
+d 392 2 1 0 0
+c
+d 1126 5 0 1 0
+c
+d 1127 1 0 0 0
+c
+d 620 5 1 0 0
+c
+d 621 2 0 1 0
+c
+d 645 1 1 0 0
+c
+d 646 4 1 0 0
+c
+d 148 3 0 0 0
+c
+d 238 1 0 0 0
+c
+d 239 2 0 0 0
+c
+d 16 1 0 0 0
+c
+d 93 3 1 0 0
+c
+d 141 5 0 1 0
+c
+d 527 2 1 0 0
+c
+d 528 1 0 0 0
+c
+d 529 6 2 0 0
+c
+d 1158 1 0 0 0
+c
+d 1163 5 0 0 0
+c
+d 858 4 2 0 0
+c
+d 340 7 2 2 0
+c
+d 341 1 0 0 0
+c
+d 359 4 0 0 0
+c
+d 360 5 1 0 0
+c
+d 217 8 2 0 0
+c
+d 241 1 0 0 0
+c
+d 299 5 1 1 0
+c
+d 300 1 0 0 0
+c
+d 315 2 0 0 0
+c
+d 318 1 0 0 0
+c
+d 324 3 1 1 0
+c
+d 1149 3 0 0 0
+c
+d 52 7 2 0 0
+c
+d 341 4 1 1 0
+c
+d 401 2 1 0 0
+c
+d 402 2 0 0 0
+c
+d 148 2 0 0 0
+c
+d 232 1 0 0 0
+c
+d 252 2 1 0 0
+c
+d 799 3 0 1 0
+c
+d 811 4 1 0 0
+c
+d 262 1 1 0 0
+c
+d 270 4 1 0 0
+c
+d 271 1 1 0 0
+c
+d 272 1 0 1 0
+c
+d 875 4 0 0 0
+c
+d 749 2 0 1 0
+c
+d 855 1 0 1 0
+c
+d 857 4 2 0 0
+c
+d 858 3 1 0 0
+c
+d 872 1 0 0 0
+c
+d 480 4 2 0 0
+c
+d 481 3 0 1 0
+c
+d 242 10 2 1 0
+c
+d 167 6 1 0 0
+c
+d 1122 1 1 0 0
+c
+d 19 9 1 1 0
+c
+d 622 1 0 0 0
+c
+d 564 4 0 0 0
+c
+d 565 2 1 1 0
+c
+d 211 6 1 0 0
+c
+d 241 1 0 0 0
+c
+d 242 3 1 0 0
+c
+d 1300 3 1 0 0
+c
+d 1301 7 0 0 0
+c
+d 529 5 1 0 0
+c
+d 550 3 2 0 0
+c
+d 1069 1 0 1 0
+c
+d 509 1 0 0 0
+c
+d 510 5 0 0 0
+c
+d 511 1 0 0 0
+c
+d 91 6 2 0 0
+c
+d 756 7 1 1 0
+c
+d 990 3 1 0 0
+c
+d 992 1 0 0 0
+c
+d 994 2 1 0 0
+c
+d 998 1 1 0 0
+c
+d 84 6 2 0 0
+c
+d 811 6 2 0 0
+c
+d 419 2 1 0 0
+c
+d 1080 3 0 0 0
+c
+d 570 4 0 0 0
+c
+d 572 4 0 0 0
+c
+d 315 3 0 0 0
+c
+d 324 2 1 0 0
+c
+d 278 6 0 0 0
+c
+d 279 2 1 0 0
+c
+d 748 6 0 0 0
+c
+d 750 1 1 0 0
+c
+d 894 2 0 0 0
+c
+d 353 1 0 0 0
+c
+d 354 4 0 0 0
+c
+d 211 2 1 1 0
+c
+d 217 3 0 0 0
+c
+d 578 1 0 0 0
+c
+d 580 2 0 0 0
+c
+d 581 3 2 0 0
+c
+d 159 1 0 0 0
+c
+d 178 2 0 0 0
+c
+d 179 1 1 0 0
+c
+d 182 2 1 0 0
+c
+d 28 4 1 0 0
+c
+d 1315 2 1 0 0
+c
+d 274 2 0 0 0
+c
+d 275 3 2 0 0
+c
+d 277 2 0 0 0
+c
+d 156 3 0 0 0
+c
+d 163 1 0 0 0
+c
+d 400 4 2 0 0
+c
+d 1170 3 1 1 0
+c
+d 1184 4 1 0 0
+c
+d 1185 2 0 0 0
+c
+d 804 1 0 1 0
+c
+d 805 2 1 0 0
+c
+d 915 3 0 0 0
+c
+d 959 7 2 1 0
+c
+d 89 3 1 0 0
+c
+d 1285 4 0 0 0
+c
+d 1292 3 1 0 0
+c
+d 599 1 1 0 0
+c
+d 606 7 0 0 0
+c
+d 806 3 1 1 0
+c
+d 811 5 1 1 0
+c
+d 1111 1 0 0 0
+c
+d 1115 3 1 0 0
+c
+d 1116 1 1 0 0
+c
+d 21 6 1 1 0
+c
+d 1020 2 1 1 0
+c
+d 1021 1 0 0 0
+c
+d 48 7 2 1 0
+c
+d 19 6 3 0 0
+c
+d 20 1 0 1 0
+c
+d 204 5 1 0 0
+c
+d 1241 1 1 0 0
+c
+d 470 1 0 0 0
+c
+d 477 2 1 0 0
+c
+d 478 2 1 0 0
+c
+d 482 1 0 1 0
+c
+d 592 11 3 1 0
+c
+d 844 1 1 0 0
+c
+d 851 5 1 0 0
+c
+d 807 1 1 0 0
+c
+d 823 3 0 0 0
+c
+d 824 2 1 0 0
+c
+d 903 3 0 0 0
+c
+d 302 4 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 1157 2 0 0 0
+c
+d 1159 1 0 0 0
+c
+d 775 1 0 0 0
+c
+d 882 1 0 0 0
+c
+d 883 4 0 0 0
+c
+d 1194 6 0 0 0
+c
+d 101 2 1 0 0
+c
+d 608 1 1 0 0
+c
+d 1090 2 0 0 0
+c
+d 1091 2 0 0 0
+c
+d 618 1 0 0 0
+c
+d 965 1 0 0 0
+c
+d 983 3 1 0 0
+c
+d 985 3 1 0 0
+c
+d 148 3 1 1 0
+c
+d 252 8 1 0 0
+c
+d 253 1 0 0 0
+c
+d 472 1 1 0 0
+c
+d 475 4 1 0 0
+c
+d 476 1 0 0 0
+c
+d 133 2 0 1 0
+c
+d 294 3 2 0 0
+c
+d 159 7 2 0 0
+c
+d 160 1 1 0 0
+c
+d 185 2 0 0 0
+c
+d 799 5 2 0 0
+c
+d 810 3 0 1 0
+c
+d 146 5 1 0 0
+c
+d 1097 1 0 1 0
+c
+d 1098 2 0 0 0
+c
+d 437 3 2 0 0
+c
+d 453 3 0 0 0
+c
+d 608 7 3 0 0
+c
+d 753 3 0 0 0
+c
+d 755 3 1 1 0
+c
+d 1163 1 0 1 0
+c
+d 1165 5 2 0 0
+c
+d 56 4 0 1 0
+c
+d 1303 3 1 0 0
+c
+d 1304 1 0 0 0
+c
+d 355 1 0 0 0
+c
+d 358 4 1 1 0
+c
+d 362 1 0 0 0
+c
+d 318 1 0 1 0
+c
+d 324 2 1 0 0
+c
+d 332 3 1 0 0
+c
+d 333 1 0 0 0
+c
+d 1185 3 1 1 0
+c
+d 1201 3 0 1 0
+c
+d 523 4 2 0 0
+c
+d 525 3 0 0 0
+c
+d 527 1 0 0 0
+c
+d 720 1 0 0 0
+c
+d 726 2 0 0 0
+c
+d 727 1 0 0 0
+c
+d 948 1 0 0 0
+c
+d 791 11 2 0 0
+c
+d 793 1 1 0 0
+c
+d 217 2 0 0 0
+c
+d 225 4 2 0 0
+c
+d 218 7 3 0 0
+c
+d 374 4 1 0 0
+c
+d 377 1 0 1 0
+c
+d 977 1 1 0 0
+c
+d 978 2 1 0 0
+c
+d 979 2 0 0 0
+c
+d 980 2 0 0 0
+c
+d 618 5 2 1 0
+c
+d 634 1 0 0 0
+c
+d 333 1 1 0 0
+c
+d 338 3 0 0 0
+c
+d 340 1 1 0 0
+c
+d 286 7 1 0 0
+c
+d 199 11 2 1 0
+c
+d 752 1 0 0 0
+c
+d 753 4 0 0 0
+c
+d 148 1 0 0 0
+c
+d 232 3 2 0 0
+c
+d 348 6 1 0 0
+c
+d 45 1 1 0 0
+c
+d 46 5 1 0 0
+c
+d 428 3 1 0 0
+c
+d 436 1 0 0 0
+c
+d 590 1 0 0 0
+c
+d 341 3 0 0 0
+c
+d 437 3 0 0 0
+c
+d 167 1 1 0 0
+c
+d 369 2 1 0 0
+c
+d 382 4 0 0 0
+c
+d 853 2 1 0 0
+c
+d 896 8 1 0 0
+c
+d 564 6 1 0 0
+c
+d 565 1 1 0 0
+c
+d 1084 7 1 0 0
+c
+d 4 5 0 0 0
+c
+d 88 7 1 0 0
+c
+d 727 1 1 0 0
+c
+d 728 2 1 0 0
+c
+d 734 6 0 0 0
+c
+d 827 5 1 0 0
+c
+d 829 1 0 0 0
+c
+d 96 2 0 1 0
+c
+d 111 7 1 0 0
+c
+d 142 1 0 0 0
+c
+d 281 1 1 0 0
+c
+d 1192 4 0 0 0
+c
+d 52 3 1 0 0
+c
+d 1303 1 0 1 0
+c
+d 253 4 0 1 0
+c
+d 254 2 0 0 0
+c
+d 255 3 1 0 0
+c
+d 527 5 1 0 0
+c
+d 544 1 0 1 0
+c
+d 46 5 1 0 0
+c
+d 75 1 0 0 0
+c
+d 835 1 0 0 0
+c
+d 836 5 0 1 0
+c
+d 838 3 1 0 0
+c
+d 133 1 0 0 0
+c
+d 134 3 1 0 0
+c
+d 138 3 1 0 0
+c
+d 139 2 0 0 0
+c
+d 1156 2 0 0 0
+c
+d 1168 1 0 0 0
+c
+d 1177 3 0 0 0
+c
+d 419 6 1 0 0
+c
+d 422 1 0 0 0
+c
+d 423 4 1 1 0
+c
+d 429 1 1 0 0
+c
+d 384 3 1 0 0
+c
+d 385 3 1 0 0
+c
+d 386 1 0 0 0
+c
+d 1133 2 0 0 0
+c
+d 445 1 1 0 0
+c
+d 446 6 1 0 0
+c
+d 26 3 1 0 0
+c
+d 28 3 0 1 0
+c
+d 29 1 0 0 0
+c
+d 575 4 2 0 0
+c
+d 578 2 0 0 0
+c
+d 579 1 0 0 0
+c
+d 21 9 2 0 0
+c
+d 282 2 1 0 0
+c
+d 287 2 1 0 0
+c
+d 594 3 2 0 0
+c
+d 686 5 1 1 0
+c
+d 87 6 2 2 0
+c
+d 374 7 2 0 0
+c
+d 1165 1 0 0 0
+c
+d 1168 7 2 1 0
+c
+d 1176 1 0 0 0
+c
+d 1177 2 0 0 0
+c
+d 592 4 1 0 0
+c
+d 859 2 1 0 0
+c
+d 861 1 0 0 0
+c
+d 871 5 1 0 0
+c
+d 876 7 2 0 0
+c
+d 878 1 0 0 0
+c
+d 262 1 0 0 0
+c
+d 270 2 0 1 0
+c
+d 272 2 1 1 0
+c
+d 1008 4 1 0 0
+c
+d 1010 1 0 0 0
+c
+d 1012 1 0 0 0
+c
+d 1013 2 1 1 0
+c
+d 304 2 0 0 0
+c
+d 305 1 0 1 0
+c
+d 307 1 0 0 0
+c
+d 328 2 1 0 0
+c
+d 353 1 1 0 0
+c
+d 46 2 0 1 0
+c
+d 75 6 0 1 0
+c
+d 6 1 0 0 0
+c
+d 12 4 2 0 0
+c
+d 90 1 1 0 0
+c
+d 734 4 1 0 0
+c
+d 737 1 0 0 0
+c
+d 734 6 1 0 0
+c
+d 769 4 1 0 0
+c
+d 836 4 1 1 0
+c
+d 837 2 1 0 0
+c
+d 842 2 0 0 0
+c
+d 848 2 1 0 0
+c
+d 850 1 1 0 0
+c
+d 49 2 0 0 0
+c
+d 58 4 1 1 0
+c
+d 75 2 0 0 0
+c
+d 81 1 0 0 0
+c
+d 82 2 0 0 0
+c
+d 1295 2 1 0 0
+c
+d 1020 3 0 0 0
+c
+d 1021 2 0 0 0
+c
+d 1029 1 1 0 0
+c
+d 565 5 2 0 0
+c
+d 568 2 0 1 0
+c
+d 1058 1 0 0 0
+c
+d 1110 1 0 0 0
+c
+d 1115 3 1 0 0
+c
+d 1117 1 1 0 0
+c
+d 836 11 2 0 0
+c
+d 48 4 2 0 0
+c
+d 49 3 1 0 0
+c
+d 59 1 0 0 0
+c
+d 60 3 1 1 0
+c
+d 65 1 0 1 0
+c
+d 1307 5 1 0 0
+c
+d 101 1 0 0 0
+c
+d 111 3 0 0 0
+c
+d 146 2 0 0 0
+c
+d 915 4 1 0 0
+c
+d 916 1 0 0 0
+c
+d 918 2 0 0 0
+c
+d 1269 8 3 1 0
+c
+d 428 1 0 0 0
+c
+d 582 2 0 1 0
+c
+d 588 2 0 0 0
+c
+d 590 6 1 0 0
+c
+d 437 3 0 0 0
+c
+d 443 4 1 0 0
+c
+d 723 1 0 0 0
+c
+d 724 5 0 0 0
+c
+d 423 1 0 0 0
+c
+d 427 3 0 0 0
+c
+d 428 1 0 0 0
+c
+d 378 5 1 1 0
+c
+d 1111 4 1 1 0
+c
+d 304 2 1 0 0
+c
+d 305 8 3 0 0
+c
+d 1144 1 0 0 0
+c
+d 101 3 0 0 0
+c
+d 610 2 0 0 0
+c
+d 612 2 1 0 0
+c
+d 185 1 0 0 0
+c
+d 196 6 1 0 0
+c
+d 197 1 0 0 0
+c
+d 276 4 1 0 0
+c
+d 288 3 1 0 0
+c
+d 842 3 1 1 0
+c
+d 879 3 0 1 0
+c
+d 31 1 0 1 0
+c
+d 32 2 0 0 0
+c
+d 75 1 0 0 0
+c
+d 1318 4 2 0 0
+c
+d 1319 1 0 1 0
+c
+d 54 6 2 1 0
+c
+d 852 1 0 1 0
+c
+d 853 4 2 0 0
+c
+d 705 2 0 0 0
+c
+d 710 5 1 0 0
+c
+d 711 2 1 0 0
+c
+d 1153 6 2 1 0
+c
+d 1154 1 0 0 0
+c
+d 532 3 1 0 0
+c
+d 549 1 1 0 0
+c
+d 129 4 1 0 0
+c
+d 130 2 0 0 0
+c
+d 131 1 0 0 0
+c
+d 509 3 0 0 0
+c
+d 510 5 2 0 0
+c
+d 517 1 0 0 0
+c
+d 445 6 2 1 0
+c
+d 446 2 0 0 0
+c
+d 341 2 1 0 0
+c
+d 411 3 1 0 0
+c
+d 422 1 1 0 0
+c
+d 167 2 0 0 0
+c
+d 369 3 0 0 0
+c
+d 381 1 0 0 0
+c
+d 694 5 0 2 0
+c
+d 205 1 0 1 0
+c
+d 206 3 1 0 0
+c
+d 207 1 1 0 0
+c
+d 208 6 1 0 0
+c
+d 597 1 0 0 0
+c
+d 598 2 1 0 0
+c
+d 606 5 2 0 0
+c
+d 1 7 2 0 0
+c
+d 18 1 1 0 0
+c
+d 1263 8 2 0 0
+c
+d 436 1 1 0 0
+c
+d 578 6 1 1 0
+c
+d 242 1 1 0 0
+c
+d 243 4 2 0 0
+c
+d 244 1 0 0 0
+c
+d 248 1 0 0 0
+c
+d 276 7 2 0 0
+c
+d 277 1 0 0 0
+c
+d 428 7 1 1 0
+c
+d 430 1 0 0 0
+c
+d 572 7 1 0 0
+c
+d 574 1 0 1 0
+c
+d 1054 2 1 0 0
+c
+d 602 3 1 0 0
+c
+d 634 3 0 0 0
+c
+d 642 1 1 0 0
+c
+d 682 1 0 1 0
+c
+d 578 3 2 0 0
+c
+d 956 4 0 0 0
+c
+d 382 4 0 0 0
+c
+d 1134 4 1 0 0
+c
+d 1 9 2 1 0
+c
+d 262 7 1 1 0
+c
+d 787 7 1 0 0
+c
+d 788 2 1 1 0
+c
+d 262 1 0 0 0
+c
+d 264 6 1 0 0
+c
+d 75 7 1 1 0
+c
+d 280 3 1 0 0
+c
+d 281 1 0 0 0
+c
+d 878 10 3 0 0
+c
+d 16 2 0 0 0
+c
+d 90 2 1 0 0
+c
+d 93 3 1 1 0
+c
+d 787 2 0 0 0
+c
+d 789 1 0 1 0
+c
+d 790 6 2 1 0
+c
+d 185 1 0 1 0
+c
+d 186 3 1 0 0
+c
+d 213 1 0 0 0
+c
+d 21 2 1 0 0
+c
+d 39 4 1 0 0
+c
+d 591 5 1 1 0
+c
+d 602 3 0 0 0
+c
+d 520 1 0 1 0
+c
+d 521 5 1 0 0
+c
+d 131 1 0 0 0
+c
+d 132 1 0 0 0
+c
+d 513 1 1 0 0
+c
+d 523 6 2 0 0
+c
+d 177 4 1 0 0
+c
+d 178 3 0 0 0
+c
+d 181 1 1 0 0
+c
+d 591 3 0 0 0
+c
+d 602 2 1 0 0
+c
+d 574 1 1 0 0
+c
+d 575 6 2 0 0
+c
+d 796 1 0 1 0
+c
+d 121 1 0 0 0
+c
+d 124 6 1 1 0
+c
+d 12 2 1 0 0
+c
+d 13 4 1 1 0
+c
+d 291 1 0 0 0
+c
+d 299 1 0 0 0
+c
+d 300 3 0 0 0
+c
+d 315 1 1 0 0
+c
+d 280 3 0 0 0
+c
+d 281 4 1 0 0
+c
+d 1156 2 1 1 0
+c
+d 1214 1 0 1 0
+c
+d 167 1 0 1 0
+c
+d 1110 4 2 0 0
+c
+d 120 2 0 1 0
+c
+d 121 2 1 0 0
+c
+d 499 2 0 0 0
+c
+d 511 5 1 1 0
+c
+d 602 6 2 0 0
+c
+d 681 1 0 0 0
+c
+d 1177 9 2 0 0
+c
+d 1184 1 0 0 0
+c
+d 1210 1 0 0 0
+c
+d 523 5 1 0 0
+c
+d 524 1 0 0 0
+c
+d 527 3 1 1 0
+c
+d 114 1 0 0 0
+c
+d 120 2 1 0 0
+c
+d 121 1 1 0 0
+c
+d 26 6 2 1 0
+c
+d 38 1 0 0 0
+c
+d 39 1 0 0 0
+c
+d 570 4 2 0 0
+c
+d 572 5 0 0 0
+c
+d 686 2 0 0 0
+c
+d 689 2 0 1 0
+c
+d 690 1 1 0 0
+c
+d 156 4 0 0 0
+c
+d 164 3 0 0 0
+c
+d 165 2 0 0 0
+c
+d 178 1 1 0 0
+c
+d 181 2 0 0 0
+c
+d 195 2 0 0 0
+c
+d 168 3 1 0 0
+c
+d 169 1 1 0 0
+c
+d 369 2 0 0 0
+c
+d 662 7 3 0 0
+c
+d 667 1 0 0 0
+c
+d 168 7 3 0 0
+c
+d 369 1 0 0 0
+c
+d 378 1 0 1 0
+c
+d 111 4 1 0 0
+c
+d 1087 1 0 0 0
+c
+d 1090 1 1 0 0
+c
+d 1096 1 0 0 0
+c
+d 1173 3 0 0 0
+c
+d 1174 5 2 0 0
+c
+d 19 4 2 0 0
+c
+d 965 5 0 0 0
+c
+d 966 1 0 0 0
+c
+d 278 3 2 0 0
+c
+d 1170 5 0 0 0
+c
+d 568 3 1 0 0
+c
+d 570 4 2 1 0
+c
+d 1057 1 0 0 0
+c
+d 196 2 0 0 0
+c
+d 198 1 0 0 0
+c
+d 199 4 1 0 0
+c
+d 200 1 1 0 0
+c
+d 159 3 0 0 0
+c
+d 183 3 1 0 0
+c
+d 196 1 1 0 0
+c
+d 743 6 1 0 0
+c
+d 753 1 1 0 0
+c
+d 1170 7 2 0 0
+c
+d 1184 1 1 0 0
+c
+d 75 7 2 0 0
+c
+d 86 1 0 0 0
+c
+d 88 1 0 0 0
+c
+d 829 7 4 0 0
+c
+d 835 2 0 1 0
+c
+d 152 4 1 0 0
+c
+d 155 1 0 0 0
+c
+d 417 1 0 0 0
+c
+d 749 4 0 0 0
+c
+d 857 1 0 0 0
+c
+d 133 2 1 1 0
+c
+d 323 1 0 0 0
+c
+d 324 4 0 0 0
+c
+d 1113 7 2 1 0
+c
+d 1114 1 0 0 0
+c
+d 54 5 0 1 0
+c
+d 697 6 1 0 0
+c
+d 156 3 0 0 0
+c
+d 157 2 1 1 0
+c
+d 162 3 0 0 0
+c
+d 163 1 0 0 0
+c
+d 16 1 0 0 0
+c
+d 93 5 2 0 0
+c
+d 159 3 1 0 0
+c
+d 178 4 1 1 0
+c
+d 167 5 2 0 0
+c
+d 1121 1 0 1 0
+c
+d 1097 6 2 0 0
+c
+d 1100 1 0 0 0
+c
+d 1101 1 0 0 0
+c
+d 1008 6 2 0 0
+c
+d 89 1 1 0 0
+c
+d 548 2 0 0 0
+c
+d 18 3 0 0 0
+c
+d 29 1 0 0 0
+c
+d 30 3 2 0 0
+c
+d 437 1 0 0 0
+c
+d 445 2 0 0 0
+c
+d 447 2 0 0 0
+c
+d 157 7 2 0 0
+c
+d 162 1 0 0 0
+c
+d 661 1 1 0 0
+c
+d 662 2 1 0 0
+c
+d 666 4 1 0 0
+c
+d 673 1 0 0 0
+c
+d 675 1 0 0 0
+c
+d 551 2 0 0 0
+c
+d 536 1 0 1 0
+c
+d 540 2 1 0 0
+c
+d 541 1 0 0 0
+c
+d 542 5 0 0 0
+c
+d 1022 3 2 0 0
+c
+d 1023 6 0 1 0
+c
+d 599 8 2 0 0
+c
+d 162 4 1 0 0
+c
+d 368 1 0 0 0
+c
+d 1315 1 0 0 0
+c
+d 1318 5 1 0 0
+c
+d 1319 2 1 0 0
+c
+d 132 3 1 0 0
+c
+d 511 2 0 1 0
+c
+d 512 1 0 0 0
+c
+d 1258 1 1 0 0
+c
+d 578 7 1 0 0
+c
+d 580 3 1 0 0
+c
+d 925 5 0 0 0
+c
+d 217 6 1 0 0
+c
+d 225 1 0 1 0
+c
+d 437 2 1 0 0
+c
+d 457 4 1 0 0
+c
+d 1105 6 1 0 0
+c
+d 1106 1 0 0 0
+c
+d 1123 1 0 0 0
+c
+d 211 1 0 0 0
+c
+d 212 4 2 0 0
+c
+d 213 1 1 0 0
+c
+d 791 8 3 0 0
+c
+d 795 1 0 0 0
+c
+d 825 1 0 0 0
+c
+d 19 1 0 1 0
+c
+d 21 5 1 0 0
+c
+d 591 1 0 0 0
+c
+d 686 1 1 0 0
+c
+d 959 3 1 0 0
+c
+d 691 9 2 0 0
+c
+d 746 1 1 0 0
+c
+d 748 6 2 0 0
+c
+d 749 1 0 0 0
+c
+d 393 5 1 0 0
+c
+d 407 1 0 0 0
+c
+d 69 5 2 0 0
+c
+d 650 2 0 0 0
+c
+d 655 1 0 0 0
+c
+d 965 2 0 0 0
+c
+d 973 5 1 1 0
+c
+d 146 5 2 1 0
+c
+d 148 1 0 0 0
+c
+d 232 4 0 0 0
+c
+d 156 1 1 0 0
+c
+d 157 2 1 0 0
+c
+d 176 1 0 0 0
+c
+d 177 1 0 1 0
+c
+d 49 6 1 0 0
+c
+d 734 3 1 0 0
+c
+d 575 1 1 0 0
+c
+d 796 8 1 0 0
+c
+d 797 1 0 0 0
+c
+d 661 3 0 0 0
+c
+d 667 1 1 0 0
+c
+d 668 2 1 0 0
+c
+d 669 1 0 0 0
+c
+d 670 1 0 0 0
+c
+d 133 5 1 0 0
+c
+d 137 1 1 0 0
+c
+d 142 1 0 0 0
+c
+d 1110 2 1 0 0
+c
+d 1111 3 1 0 0
+c
+d 1115 1 0 1 0
+c
+d 46 2 1 1 0
+c
+d 75 5 1 0 0
+c
+d 807 1 0 1 0
+c
+d 839 3 1 0 0
+c
+d 840 2 0 0 0
+c
+d 333 6 2 0 0
+c
+d 340 1 0 1 0
+c
+d 18 1 0 0 0
+c
+d 30 4 2 0 0
+c
+d 32 1 0 1 0
+c
+d 301 4 1 0 0
+c
+d 304 1 0 0 0
+c
+d 829 8 2 0 0
+c
+d 835 1 1 0 0
+c
+d 69 4 1 0 0
+c
+d 564 1 0 0 0
+c
+d 565 4 0 1 0
+c
+d 789 3 1 0 0
+c
+d 734 1 0 0 0
+c
+d 939 4 0 0 0
+c
+d 940 1 0 1 0
+c
+d 941 1 0 0 0
+c
+d 878 1 1 0 0
+c
+d 879 7 0 0 0
+c
+d 1013 3 1 1 0
+c
+d 1016 1 0 0 0
+c
+d 1017 1 1 0 0
+c
+d 606 4 0 0 0
+c
+d 1041 1 0 0 0
+c
+d 278 8 2 1 0
+c
+d 279 1 0 0 0
+c
+d 529 2 1 0 0
+c
+d 550 3 0 0 0
+c
+d 164 1 1 0 0
+c
+d 368 8 2 1 0
+c
+d 369 1 0 0 0
+c
+d 5 6 3 0 0
+c
+d 622 5 1 0 0
+c
+d 1008 3 1 1 0
+c
+d 369 7 1 0 0
+c
+d 371 2 1 0 0
+c
+d 372 1 0 0 0
+c
+d 168 2 0 0 0
+c
+d 169 2 0 0 0
+c
+d 1136 2 1 0 0
+c
+d 1137 1 1 0 0
+c
+d 93 8 1 0 0
+c
+d 96 2 1 0 0
+c
+d 19 4 1 0 0
+c
+d 622 1 0 1 0
+c
+d 457 3 2 0 0
+c
+d 461 3 0 1 0
+c
+d 462 1 0 0 0
+c
+d 763 4 1 0 0
+c
+d 768 1 1 0 0
+c
+d 942 1 0 0 0
+c
+d 87 7 2 0 0
+c
+d 89 1 0 0 0
+c
+d 699 1 0 0 0
+c
+d 716 1 0 0 0
+c
+d 844 4 2 0 0
+c
+d 377 11 2 0 0
+c
+d 378 1 1 0 0
+c
+d 807 3 1 0 0
+c
+d 840 4 2 0 0
+c
+d 842 2 0 1 0
+c
+d 715 1 0 0 0
+c
+d 716 4 0 0 0
+c
+d 718 4 1 0 0
+c
+d 578 6 1 1 0
+c
+d 580 1 0 0 0
+c
+d 734 10 3 1 0
+c
+d 599 5 2 1 0
+c
+d 353 10 2 1 0
+c
+d 218 3 1 0 0
+c
+d 1243 5 0 0 0
+c
+d 157 7 2 1 0
+c
+d 158 1 0 0 0
+c
+d 152 2 1 0 0
+c
+d 413 4 1 0 0
+c
+d 414 1 0 0 0
+c
+d 1254 3 0 0 0
+c
+d 427 7 1 0 0
+c
+d 428 1 0 1 0
+c
+d 1078 1 0 0 0
+c
+d 5 1 0 0 0
+c
+d 18 6 1 0 0
+c
+d 93 1 0 1 0
+c
+d 7 1 0 1 0
+c
+d 9 1 0 0 0
+c
+d 10 1 0 0 0
+c
+d 861 4 2 0 0
+c
+d 875 3 0 0 0
+c
+d 699 4 1 1 0
+c
+d 799 1 0 1 0
+c
+d 898 2 0 0 0
+c
+d 507 1 0 0 0
+c
+d 514 3 0 1 0
+c
+d 515 2 1 0 0
+c
+d 516 1 0 0 0
+c
+d 823 4 0 0 0
+c
+d 835 2 1 0 0
+c
+d 597 5 1 1 0
+c
+d 598 1 0 1 0
+c
+d 208 9 2 0 0
+c
+d 1244 1 0 0 0
+c
+d 720 2 0 1 0
+c
+d 721 2 0 0 0
+c
+d 726 1 1 0 0
+c
+d 334 1 0 0 0
+c
+d 341 4 1 0 0
+c
+d 344 1 0 1 0
+c
+d 1147 1 1 0 0
+c
+d 922 4 0 1 0
+c
+d 926 3 1 0 0
+c
+d 927 1 0 1 0
+c
+d 373 5 2 0 0
+c
+d 318 7 2 0 0
+c
+d 321 1 0 0 0
+c
+d 101 7 0 0 0
+c
+d 762 1 0 0 0
+c
+d 763 1 1 0 0
+c
+d 764 3 0 0 0
+c
+d 766 1 0 0 0
+c
+d 7 7 2 0 0
+c
+d 1284 1 0 0 0
+c
+d 353 1 0 0 0
+c
+d 354 4 1 0 0
+c
+d 355 3 1 0 0
+c
+d 575 3 1 0 0
+c
+d 578 5 0 0 0
+c
+d 301 3 0 1 0
+c
+d 1156 2 1 0 0
+c
+d 1161 2 1 0 0
+c
+d 1162 1 0 0 0
+c
+d 1214 2 1 0 0
+c
+d 153 1 0 1 0
+c
+d 155 2 1 0 0
+c
+d 176 2 1 0 0
+c
+d 100 1 0 1 0
+c
+d 101 2 1 0 0
+c
+d 108 1 0 0 0
+c
+d 1005 5 0 0 0
+c
+d 100 3 1 0 0
+c
+d 101 5 0 0 0
+c
+d 105 1 1 0 0
+c
+d 106 2 1 0 0
+c
+d 107 1 0 0 0
+c
+d 195 1 0 1 0
+c
+d 205 6 1 0 0
+c
+d 206 1 1 0 0
+c
+d 208 3 1 0 0
+c
+d 211 1 0 0 0
+c
+d 829 4 0 0 0
+c
+d 833 3 0 0 0
+c
+d 324 5 1 0 0
+c
+d 332 1 1 0 0
+c
+d 437 1 0 0 0
+c
+d 453 4 1 0 0
+c
+d 455 1 1 0 0
+c
+d 767 1 0 0 0
+c
+d 890 6 1 0 0
+c
+d 529 2 0 0 0
+c
+d 1062 2 0 0 0
+c
+d 1064 1 0 0 0
+c
+d 148 1 0 0 0
+c
+d 225 4 1 0 0
+c
+d 240 2 1 0 0
+c
+d 7 1 1 0 0
+c
+d 1279 3 1 1 0
+c
+d 1280 1 0 0 0
+c
+d 1281 1 0 0 0
+c
+d 395 5 1 1 0
+c
+d 397 2 0 0 0
+c
+d 211 1 0 0 0
+c
+d 217 2 1 0 0
+c
+d 220 1 1 0 0
+c
+d 241 2 0 0 0
+c
+d 242 2 0 0 0
+c
+d 1231 1 0 0 0
+c
+d 19 1 1 0 0
+c
+d 622 1 0 1 0
+c
+d 628 6 2 0 0
+c
+d 392 2 0 1 0
+c
+d 393 1 0 1 0
+c
+d 1125 1 0 0 0
+c
+d 1127 5 0 0 0
+c
+d 437 1 0 0 0
+c
+d 568 2 0 0 0
+c
+d 569 2 1 0 0
+c
+d 1051 1 1 0 0
+c
+d 55 1 0 0 0
+c
+d 691 2 0 0 0
+c
+d 705 1 0 0 0
+c
+d 706 2 0 1 0
+c
+d 163 1 1 0 0
+c
+d 172 1 0 0 0
+c
+d 173 3 1 0 0
+c
+d 174 1 0 0 0
+c
+d 28 1 1 0 0
+c
+d 29 2 1 0 0
+c
+d 30 1 0 0 0
+c
+d 31 3 0 0 0
+c
+d 155 5 1 0 0
+c
+d 415 2 1 0 0
+c
+d 32 1 0 1 0
+c
+d 75 3 1 0 0
+c
+d 77 2 0 0 0
+c
+d 81 1 0 0 0
+c
+d 785 3 1 0 0
+c
+d 152 1 0 1 0
+c
+d 411 1 0 0 0
+c
+d 412 1 1 0 0
+c
+d 415 1 0 0 0
+c
+d 417 3 0 0 0
+c
+d 1274 9 1 0 0
+c
+d 1284 1 0 0 0
+c
+d 1285 2 1 0 0
+c
+d 369 1 0 0 0
+c
+d 382 4 0 1 0
+c
+d 385 1 1 0 0
+c
+d 101 4 1 0 0
+c
+d 104 5 1 0 0
+c
+d 575 1 0 1 0
+c
+d 686 11 2 1 0
+c
+d 700 1 0 0 0
+c
+d 925 1 1 0 0
+c
+d 1170 5 1 0 0
+c
+d 1185 1 1 0 0
+c
+d 424 8 1 0 0
+c
+d 591 3 1 0 0
+c
+d 595 1 0 1 0
+c
+d 18 6 3 0 0
+c
+d 77 1 0 0 0
+c
+d 95 1 0 0 0
+c
+d 437 4 0 0 0
+c
+d 457 1 0 0 0
+c
+d 167 1 1 0 0
+c
+d 369 3 1 0 0
+c
+d 373 4 0 0 0
+c
+d 753 3 1 1 0
+c
+d 754 1 0 0 0
+c
+d 755 1 0 0 0
+c
+d 419 8 1 1 0
+c
+d 422 1 0 0 0
+c
+d 797 4 1 0 0
+c
+d 557 6 1 1 0
+c
+d 1060 3 0 1 0
+c
+d 1063 1 1 0 0
+c
+d 532 1 1 0 0
+c
+d 535 4 0 1 0
+c
+d 1194 1 0 0 0
+c
+d 1195 4 2 0 0
+c
+d 1202 1 0 0 0
+c
+d 51 4 1 0 0
+c
+d 52 1 1 0 0
+c
+d 99 2 1 0 0
+c
+d 100 4 1 0 0
+c
+d 101 1 0 1 0
+c
+d 55 1 0 0 0
+c
+d 66 4 2 0 0
+c
+d 353 5 2 1 0
+c
+d 111 5 1 1 0
+c
+d 1091 4 1 0 0
+c
+d 211 3 1 0 0
+c
+d 215 2 1 0 0
+c
+d 221 4 0 0 0
+c
+d 242 6 2 0 0
+c
+d 534 6 1 0 0
+c
+d 207 5 1 0 0
+c
+d 208 3 2 0 0
+c
+d 262 3 1 1 0
+c
+d 270 3 0 0 0
+c
+d 271 2 0 0 0
+c
+d 259 6 1 0 0
+c
+d 261 2 1 0 0
+c
+d 568 1 1 0 0
+c
+d 572 7 1 0 0
+c
+d 574 3 1 1 0
+c
+d 7 1 1 0 0
+c
+d 1266 7 1 0 0
+c
+d 1274 1 0 0 0
+c
+d 305 1 1 0 0
+c
+d 353 3 1 0 0
+c
+d 21 3 1 0 0
+c
+d 26 4 1 0 0
+c
+d 270 1 1 0 0
+c
+d 272 6 1 0 0
+c
+d 755 1 0 0 0
+c
+d 759 3 1 0 0
+c
+d 760 3 0 0 0
+c
+d 762 1 1 0 0
+c
+d 46 9 2 0 0
+c
+d 152 3 1 0 0
+c
+d 1096 2 0 0 0
+c
+d 1097 2 0 0 0
+c
+d 1101 1 0 0 0
+c
+d 620 6 1 0 0
+c
+d 621 2 1 0 0
+c
+d 622 1 0 1 0
+c
+d 626 1 1 0 0
+c
+d 1036 2 0 0 0
+c
+d 278 1 1 0 0
+c
+d 1168 3 1 0 0
+c
+d 1176 3 0 0 0
+c
+d 1179 1 0 1 0
+c
+d 615 2 1 1 0
+c
+d 616 2 0 0 0
+c
+d 617 2 0 0 0
+c
+d 985 1 0 0 0
+c
+d 242 4 2 0 0
+c
+d 246 2 0 0 0
+c
+d 242 1 0 0 0
+c
+d 262 4 1 0 0
+c
+d 266 1 1 0 0
+c
+d 1195 5 3 0 0
+c
+d 1199 2 0 0 0
+c
+d 34 3 1 1 0
+c
+d 35 2 0 0 0
+c
+d 36 1 0 0 0
+c
+d 746 4 1 0 0
+c
+d 747 2 0 0 0
+c
+d 753 1 0 0 0
+c
+d 580 1 0 0 0
+c
+d 582 5 1 0 0
+c
+d 583 6 0 0 0
+c
+d 718 1 1 0 0
+c
+d 735 4 0 0 0
+c
+d 737 3 1 0 0
+c
+d 620 6 2 1 0
+c
+d 631 1 0 0 0
+c
+d 632 1 0 0 0
+c
+d 46 2 0 1 0
+c
+d 775 4 1 0 0
+c
+d 1314 1 0 0 0
+c
+d 730 5 1 0 0
+c
+d 732 1 0 1 0
+c
+d 735 4 1 0 0
+c
+d 101 3 1 0 0
+c
+d 597 2 1 0 0
+c
+d 598 2 1 0 0
+c
+d 1095 1 0 0 0
+c
+d 606 3 0 0 0
+c
+d 618 2 1 0 0
+c
+d 619 1 1 0 0
+c
+d 965 1 0 1 0
+c
+d 3 1 0 1 0
+c
+d 13 4 2 0 0
+c
+d 15 1 0 0 0
+c
+d 16 5 0 1 0
+c
+d 90 1 0 0 0
+c
+d 1158 3 2 0 0
+c
+d 1163 4 0 0 0
+c
+d 437 5 1 0 0
+c
+d 457 1 1 0 0
+c
+d 844 1 0 0 0
+c
+d 851 4 1 0 0
+c
+d 853 2 1 0 0
+c
+d 896 1 0 0 0
+c
+d 423 2 0 0 0
+c
+d 430 2 1 0 0
+c
+d 432 1 0 0 0
+c
+d 470 1 1 0 0
+c
+d 1080 1 0 0 0
+c
+d 146 2 1 0 0
+c
+d 152 5 1 0 0
+c
+d 153 1 0 0 0
+c
+d 101 2 1 0 0
+c
+d 597 1 0 0 0
+c
+d 1087 2 1 0 0
+c
+d 1093 1 0 0 0
+c
+d 1094 3 1 0 0
+c
+d 392 3 1 0 0
+c
+d 1126 1 1 0 0
+c
+d 93 1 1 0 0
+c
+d 96 1 0 1 0
+c
+d 142 4 1 1 0
+c
+d 143 3 1 0 0
+c
+d 145 1 0 0 0
+c
+d 286 5 1 0 0
+c
+d 1221 1 1 0 0
+c
+d 32 4 1 1 0
+c
+d 1315 3 0 1 0
+c
+d 1316 1 0 0 0
+c
+d 16 7 2 0 0
+c
+d 52 1 0 0 0
+c
+d 53 1 0 0 0
+c
+d 54 3 0 0 0
+c
+d 1303 2 0 0 0
+c
+d 211 4 1 0 0
+c
+d 215 3 1 0 0
+c
+d 1233 1 0 1 0
+c
+d 757 4 1 0 0
+c
+d 758 2 1 0 0
+c
+d 633 1 0 0 0
+c
+d 634 5 1 0 0
+c
+d 642 1 0 1 0
+c
+d 278 7 1 1 0
+c
+d 568 5 1 0 0
+c
+d 572 1 0 1 0
+c
+d 146 5 1 0 0
+c
+d 237 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 305 3 2 0 0
+c
+d 1142 1 1 0 0
+c
+d 1143 4 0 0 0
+c
+d 686 8 2 0 0
+c
+d 919 1 1 0 0
+c
+d 922 1 1 0 0
+c
+d 369 1 1 0 0
+c
+d 373 3 1 0 0
+c
+d 382 1 0 0 0
+c
+d 888 5 2 1 0
+c
+d 890 4 1 1 0
+c
+d 757 1 0 0 0
+c
+d 763 2 0 1 0
+c
+d 767 2 1 0 0
+c
+d 428 1 0 0 0
+c
+d 436 9 2 0 0
+c
+d 437 2 1 0 0
+c
+d 177 1 0 0 0
+c
+d 178 4 2 0 0
+c
+d 278 6 2 0 0
+c
+d 32 7 2 0 0
+c
+d 34 1 0 0 0
+c
+d 33 5 2 0 0
+c
+d 34 3 0 1 0
+c
+d 568 1 0 0 0
+c
+d 569 3 0 0 0
+c
+d 574 1 1 0 0
+c
+d 1051 1 0 0 0
+c
+d 152 6 1 1 0
+c
+d 413 1 1 0 0
+c
+d 120 3 1 0 0
+c
+d 126 4 0 0 0
+c
+d 191 3 0 0 0
+c
+d 192 2 1 1 0
+c
+d 60 6 1 0 0
+c
+d 62 2 1 0 0
+c
+d 64 1 1 0 0
+c
+d 737 7 2 0 0
+c
+d 740 2 0 0 0
+c
+d 755 5 2 0 0
+c
+d 757 1 0 1 0
+c
+d 734 8 2 1 0
+c
+d 511 5 2 1 0
+c
+d 514 2 1 0 0
+c
+d 516 2 0 0 0
+c
+d 1009 1 0 1 0
+c
+d 1012 2 1 0 0
+c
+d 1015 1 0 0 0
+c
+d 1016 2 0 1 0
+c
+d 797 2 1 0 0
+c
+d 799 1 0 1 0
+c
+d 500 2 1 1 0
+c
+d 502 2 0 0 0
+c
+d 505 1 0 0 0
+c
+d 148 5 1 0 0
+c
+d 965 1 0 1 0
+c
+d 977 6 2 0 0
+c
+d 981 1 0 0 0
+c
+d 854 5 1 1 0
+c
+d 496 2 1 0 0
+c
+d 498 5 1 0 0
+c
+d 499 2 0 0 0
+c
+d 858 1 0 1 0
+c
+d 872 5 1 0 0
+c
+d 86 7 2 0 0
+c
+d 437 2 0 0 0
+c
+d 445 2 1 0 0
+c
+d 447 1 0 1 0
+c
+d 448 2 0 0 0
+c
+d 469 1 0 0 0
+c
+d 799 6 1 1 0
+c
+d 529 2 0 1 0
+c
+d 532 3 1 1 0
+c
+d 383 3 2 0 0
+c
+d 1134 4 0 0 0
+c
+d 1135 1 0 0 0
+c
+d 1185 4 0 0 0
+c
+d 1186 4 0 0 0
+c
+d 1187 2 0 0 0
+c
+d 213 9 4 0 0
+c
+d 246 3 0 0 0
+c
+d 251 1 0 0 0
+c
+d 252 3 1 1 0
+c
+d 424 4 1 0 0
+c
+d 426 2 0 0 0
+c
+d 591 1 1 0 0
+c
+d 157 2 0 1 0
+c
+d 355 4 2 0 0
+c
+d 356 4 1 0 0
+c
+d 575 7 2 0 0
+c
+d 763 1 0 0 0
+c
+d 764 1 1 0 0
+c
+d 766 5 1 0 0
+c
+d 101 2 0 0 0
+c
+d 111 2 1 0 0
+c
+d 1262 5 1 0 0
+c
+d 168 3 1 0 0
+c
+d 369 1 0 0 0
+c
+d 370 1 1 0 0
+c
+d 371 2 0 0 0
+c
+d 876 1 0 0 0
+c
+d 878 1 0 1 0
+c
+d 888 4 1 0 0
+c
+d 575 6 1 0 0
+c
+d 796 2 0 0 0
+c
+d 854 1 1 0 0
+c
+d 855 6 2 0 0
+c
+d 185 1 0 1 0
+c
+d 199 7 1 0 0
+c
+d 697 1 0 0 0
+c
+d 716 2 0 0 0
+c
+d 717 6 1 0 0
+c
+d 718 3 0 1 0
+c
+d 990 7 2 0 0
+c
+d 994 1 0 0 0
+c
+d 146 9 2 0 0
+c
+d 602 1 0 0 0
+c
+d 604 1 0 0 0
+c
+d 641 1 0 1 0
+c
+d 642 8 2 0 0
+c
+d 686 2 0 0 0
+c
+d 700 9 2 1 0
+c
+d 701 1 0 1 0
+c
+d 1176 4 1 0 0
+c
+d 1179 1 1 0 0
+c
+d 359 5 1 0 0
+c
+d 1194 2 1 1 0
+c
+d 1195 3 0 0 0
+c
+d 1208 5 1 0 0
+c
+d 12 1 1 0 0
+c
+d 1266 6 1 0 0
+c
+d 1267 3 1 0 0
+c
+d 18 6 0 0 0
+c
+d 21 2 1 0 0
+c
+d 29 1 1 0 0
+c
+d 572 5 1 0 0
+c
+d 574 2 1 0 0
+c
+d 795 2 1 0 0
+c
+d 908 1 0 0 0
+c
+d 1051 1 0 0 0
+c
+d 1052 1 0 0 0
+c
+d 77 2 1 0 0
+c
+d 81 2 1 0 0
+c
+d 82 1 0 0 0
+c
+d 1296 3 0 0 0
+c
+d 1297 2 0 0 0
+c
+d 60 1 0 0 0
+c
+d 647 4 0 0 0
+c
+d 659 1 1 0 0
+c
+d 262 3 0 0 0
+c
+d 273 2 1 1 0
+c
+d 1 2 1 0 0
+c
+d 2 1 0 1 0
+c
+d 17 3 1 0 0
+c
+d 89 8 1 1 0
+c
+d 91 2 0 0 0
+c
+d 846 5 2 0 0
+c
+d 851 1 0 1 0
+c
+d 853 1 0 0 0
+c
+d 1185 1 0 0 0
+c
+d 1188 4 2 0 0
+c
+d 1189 2 0 0 0
+c
+d 1190 3 1 0 0
+c
+d 473 7 2 1 0
+c
+d 474 2 0 0 0
+c
+d 146 7 2 0 0
+c
+d 146 6 1 1 0
+c
+d 152 1 1 0 0
+c
+d 1098 1 0 0 0
+c
+d 593 3 0 0 0
+c
+d 678 6 2 0 0
+c
+d 556 1 0 0 0
+c
+d 557 1 0 0 0
+c
+d 565 7 2 0 0
+c
+d 567 2 1 1 0
+c
+d 568 2 0 0 0
+c
+d 278 2 1 0 0
+c
+d 1165 2 0 0 0
+c
+d 1167 1 0 0 0
+c
+d 1168 1 1 0 0
+c
+d 686 4 0 0 0
+c
+d 701 3 0 0 0
+c
+d 712 2 1 1 0
+c
+d 34 3 1 1 0
+c
+d 18 6 1 0 0
+c
+d 19 1 0 0 0
+c
+d 989 1 1 0 0
+c
+d 301 7 1 1 0
+c
+d 1156 1 0 0 0
+c
+d 264 3 1 0 0
+c
+d 285 2 1 0 0
+c
+d 662 2 0 0 0
+c
+d 667 3 0 1 0
+c
+d 668 1 1 0 0
+c
+d 1012 1 0 0 0
+c
+d 1013 3 1 0 0
+c
+d 1014 2 0 1 0
+c
+d 1015 5 1 0 0
+c
+d 146 1 0 0 0
+c
+d 294 6 1 1 0
+c
+d 1172 3 0 0 0
+c
+d 1192 2 0 0 0
+c
+d 348 4 1 0 0
+c
+d 132 1 0 1 0
+c
+d 494 1 0 0 0
+c
+d 496 5 1 0 0
+c
+d 499 2 0 0 0
+c
+d 511 1 0 0 0
+c
+d 650 3 1 0 0
+c
+d 661 2 1 0 0
+c
+d 662 3 1 0 0
+c
+d 799 5 0 0 0
+c
+d 806 3 2 0 0
+c
+d 737 3 0 0 0
+c
+d 743 3 2 0 0
+c
+d 821 1 0 0 0
+c
+d 822 9 2 0 0
+c
+d 823 2 1 0 0
+c
+d 436 6 1 0 0
+c
+d 1043 2 0 1 0
+c
+d 799 5 2 2 0
+c
+d 806 1 0 0 0
+c
+d 840 1 0 0 0
+c
+d 259 1 0 1 0
+c
+d 262 2 1 0 0
+c
+d 264 4 0 0 0
+c
+d 919 2 1 1 0
+c
+d 922 9 2 0 0
+c
+d 565 1 0 0 0
+c
+d 791 4 1 1 0
+c
+d 437 4 0 0 0
+c
+d 439 1 0 0 0
+c
+d 341 3 0 1 0
+c
+d 348 2 1 0 0
+c
+d 400 1 0 0 0
+c
+d 407 2 0 0 0
+c
+d 341 1 0 0 0
+c
+d 423 4 1 0 0
+c
+d 75 3 0 0 0
+c
+d 1168 2 1 0 0
+c
+d 1176 3 1 0 0
+c
+d 280 3 1 0 0
+c
+d 281 2 1 0 0
+c
+d 89 4 1 1 0
+c
+d 159 8 3 0 0
+c
+d 183 1 0 0 0
+c
+d 534 4 3 0 0
+c
+d 719 6 2 1 0
+c
+d 720 1 0 0 0
+c
+d 722 2 1 0 0
+c
+d 618 1 1 0 0
+c
+d 965 2 1 1 0
+c
+d 973 5 0 0 0
+c
+d 278 5 2 0 0
+c
+d 1156 1 1 0 0
+c
+d 799 1 0 0 0
+c
+d 806 5 1 0 0
+c
+d 75 6 1 0 0
+c
+d 79 2 0 0 0
+c
+d 80 1 1 0 0
+c
+d 81 1 1 0 0
+c
+d 1194 5 2 0 0
+c
+d 411 5 2 0 0
+c
+d 412 3 1 0 0
+c
+d 507 8 3 1 0
+c
+d 1070 1 0 1 0
+c
+d 606 2 0 0 0
+c
+d 608 2 0 0 0
+c
+d 615 1 1 0 0
+c
+d 266 1 0 0 0
+c
+d 268 1 1 0 0
+c
+d 282 2 1 0 0
+c
+d 286 4 0 0 0
+c
+d 861 5 2 1 0
+c
+d 101 2 0 0 0
+c
+d 610 6 2 0 0
+c
+d 427 1 0 0 0
+c
+d 428 1 0 0 0
+c
+d 584 1 1 0 0
+c
+d 585 3 1 0 0
+c
+d 586 6 1 0 0
+c
+d 211 8 3 0 0
+c
+d 99 3 0 0 0
+c
+d 101 4 0 0 0
+c
+d 109 3 0 0 0
+c
+d 101 3 2 0 0
+c
+d 111 3 0 0 0
+c
+d 113 2 0 0 0
+c
+d 146 1 0 0 0
+c
+d 392 2 1 0 0
+c
+d 1127 3 1 0 0
+c
+d 1131 5 1 0 0
+c
+d 635 2 0 1 0
+c
+d 636 2 0 0 0
+c
+d 638 1 1 0 0
+c
+d 748 6 1 0 0
+c
+d 301 1 0 1 0
+c
+d 315 7 1 0 0
+c
+d 608 3 1 0 0
+c
+d 990 1 0 0 0
+c
+d 1040 1 0 0 0
+c
+d 437 3 0 0 0
+c
+d 499 1 0 0 0
+c
+d 500 5 1 0 0
+c
+d 501 1 0 0 0
+c
+d 502 1 0 0 0
+c
+d 615 3 0 0 0
+c
+d 616 4 1 0 0
+c
+d 617 1 0 0 0
+c
+d 384 6 2 0 0
+c
+d 540 6 1 0 0
+c
+d 541 1 0 1 0
+c
+d 543 2 0 1 0
+c
+d 610 3 1 1 0
+c
+d 612 1 0 1 0
+c
+d 613 1 0 0 0
+c
+d 270 2 0 0 0
+c
+d 272 1 0 0 0
+c
+d 301 3 1 0 0
+c
+d 304 1 1 0 0
+c
+d 799 3 1 1 0
+c
+d 844 3 0 0 0
+c
+d 418 4 1 0 0
+c
+d 419 2 0 0 0
+c
+d 870 3 1 0 0
+c
+d 871 5 1 0 0
+c
+d 509 1 0 1 0
+c
+d 1070 4 1 0 0
+c
+d 1071 4 2 0 0
+c
+d 249 2 0 0 0
+c
+d 250 1 0 0 0
+c
+d 251 1 0 0 0
+c
+d 253 7 2 1 0
+c
+d 255 2 0 0 0
+c
+d 256 1 0 0 0
+c
+d 775 1 0 0 0
+c
+d 786 5 1 0 0
+c
+d 787 1 0 0 0
+c
+d 883 1 1 0 0
+c
+d 100 1 1 0 0
+c
+d 101 3 0 0 0
+c
+d 105 2 0 0 0
+c
+d 106 1 0 0 0
+c
+d 437 3 1 0 0
+c
+d 444 1 0 1 0
+c
+d 470 2 0 0 0
+c
+d 477 1 0 0 0
+c
+d 119 6 2 0 0
+c
+d 132 1 1 0 0
+c
+d 511 4 1 0 0
+c
+d 513 3 1 0 0
+c
+d 11 1 1 0 0
+c
+d 12 3 1 0 0
+c
+d 1270 2 0 0 0
+c
+d 807 2 0 0 0
+c
+d 821 1 1 0 0
+c
+d 822 3 0 0 0
+c
+d 907 2 0 0 0
+c
+d 795 1 0 0 0
+c
+d 822 3 0 0 0
+c
+d 823 1 0 0 0
+c
+d 493 6 2 0 0
+c
+d 1077 2 0 0 0
+c
+d 655 1 0 1 0
+c
+d 658 2 1 0 0
+c
+d 659 3 0 0 0
+c
+d 661 1 1 0 0
+c
+d 734 1 0 0 0
+c
+d 737 7 2 0 0
+c
+d 738 1 0 1 0
+c
+d 739 2 1 0 0
+c
+d 740 1 0 0 0
+c
+d 108 1 0 0 0
+c
+d 111 5 1 0 0
+c
+d 113 1 0 0 0
+c
+d 146 1 0 0 0
+c
+d 164 3 0 1 0
+c
+d 167 2 1 0 0
+c
+d 184 6 2 0 0
+c
+d 196 3 1 0 0
+c
+d 200 1 0 1 0
+c
+d 965 5 1 0 0
+c
+d 966 3 0 0 0
+c
+d 157 5 1 0 0
+c
+d 242 1 1 0 0
+c
+d 343 6 1 0 0
+c
+d 875 1 0 1 0
+c
+d 876 4 2 0 0
+c
+d 878 1 0 1 0
+c
+d 437 3 0 1 0
+c
+d 439 2 1 0 0
+c
+d 441 4 1 0 0
+c
+d 1168 2 0 0 0
+c
+d 1170 4 2 0 0
+c
+d 1183 2 0 0 0
+c
+d 93 1 1 0 0
+c
+d 95 3 1 0 0
+c
+d 98 1 0 0 0
+c
+d 1003 1 0 0 0
+c
+d 195 2 1 0 0
+c
+d 205 4 1 0 0
+c
+d 285 1 0 0 0
+c
+d 286 2 0 0 0
+c
+d 291 3 1 0 0
+c
+d 299 1 1 0 0
+c
+d 1070 1 0 0 0
+c
+d 1071 3 2 0 0
+c
+d 1073 1 0 0 0
+c
+d 159 1 0 0 0
+c
+d 178 5 2 0 0
+c
+d 181 1 0 0 0
+c
+d 842 4 0 0 0
+c
+d 848 1 0 0 0
+c
+d 262 4 1 0 0
+c
+d 273 2 0 1 0
+c
+d 55 1 0 0 0
+c
+d 690 1 1 0 0
+c
+d 691 2 0 0 0
+c
+d 708 1 1 0 0
+c
+d 709 3 0 0 0
+c
+d 906 3 2 0 0
+c
+d 911 1 0 0 0
+c
+d 912 3 0 0 0
+c
+d 591 1 1 0 0
+c
+d 602 8 2 0 0
+c
+d 35 1 0 0 0
+c
+d 36 1 0 0 0
+c
+d 37 3 2 0 0
+c
+d 411 4 0 0 0
+c
+d 415 3 0 1 0
+c
+d 749 1 1 0 0
+c
+d 751 3 0 1 0
+c
+d 418 5 2 0 0
+c
+d 437 5 3 0 0
+c
+d 455 2 0 0 0
+c
+d 851 5 1 0 0
+c
+d 852 2 1 0 0
+c
+d 591 3 0 0 0
+c
+d 593 2 0 0 0
+c
+d 199 6 0 0 0
+c
+d 208 1 0 0 0
+c
+d 210 1 0 0 0
+c
+d 246 2 0 0 0
+c
+d 262 9 4 0 0
+c
+d 264 1 0 0 0
+c
+d 293 1 1 0 0
+c
+d 68 1 0 0 0
+c
+d 69 7 2 0 0
+c
+d 60 8 1 1 0
+c
+d 647 1 0 0 0
+c
+d 47 6 1 0 0
+c
+d 437 4 1 1 0
+c
+d 438 1 0 0 0
+c
+d 454 2 0 0 0
+c
+d 455 1 0 0 0
+c
+d 132 4 1 1 0
+c
+d 340 7 1 0 0
+c
+d 89 1 0 0 0
+c
+d 91 6 2 0 0
+c
+d 92 1 0 0 0
+c
+d 686 4 0 0 0
+c
+d 691 2 1 0 0
+c
+d 803 5 1 0 0
+c
+d 419 2 1 0 0
+c
+d 423 2 1 0 0
+c
+d 429 3 0 0 0
+c
+d 60 4 1 0 0
+c
+d 623 5 1 0 0
+c
+d 624 2 0 0 0
+c
+d 18 1 1 0 0
+c
+d 989 1 0 0 0
+c
+d 990 4 0 0 0
+c
+d 833 1 1 0 0
+c
+d 842 1 0 0 0
+c
+d 881 6 1 0 0
+c
+d 1013 3 1 0 0
+c
+d 1017 2 0 0 0
+c
+d 1019 1 0 1 0
+c
+d 598 1 0 0 0
+c
+d 606 4 1 0 0
+c
+d 608 1 0 0 0
+c
+d 320 5 1 0 0
+c
+d 494 4 0 0 0
+c
+d 495 1 0 0 0
+c
+d 496 4 1 0 0
+c
+d 498 1 0 1 0
+c
+d 1016 2 0 0 0
+c
+d 1017 6 1 0 0
+c
+d 1018 2 0 0 0
+c
+d 1021 1 1 0 0
+c
+d 578 3 0 1 0
+c
+d 686 2 0 1 0
+c
+d 687 3 1 0 0
+c
+d 688 3 0 0 0
+c
+d 101 2 0 0 0
+c
+d 424 1 0 0 0
+c
+d 426 5 2 0 0
+c
+d 46 1 1 0 0
+c
+d 75 4 1 0 0
+c
+d 86 2 0 0 0
+c
+d 66 1 0 0 0
+c
+d 69 4 0 0 0
+c
+d 569 3 0 0 0
+c
+d 574 4 1 1 0
+c
+d 795 1 0 0 0
+c
+d 795 1 0 1 0
+c
+d 907 2 2 0 0
+c
+d 908 6 1 0 0
+c
+d 789 8 3 0 0
+c
+d 630 5 1 0 0
+c
+d 647 1 0 1 0
+c
+d 660 1 0 0 0
+c
+d 734 6 0 1 0
+c
+d 737 1 1 0 0
+c
+d 437 2 1 1 0
+c
+d 453 1 0 0 0
+c
+d 455 3 0 0 0
+c
+d 469 1 0 1 0
+c
+d 551 6 1 1 0
+c
+d 789 1 0 0 0
+c
+d 829 2 0 0 0
+c
+d 830 2 1 0 0
+c
+d 831 1 1 0 0
+c
+d 716 3 1 1 0
+c
+d 718 1 0 0 0
+c
+d 97 3 0 0 0
+c
+d 99 2 1 0 0
+c
+d 101 2 1 1 0
+c
+d 133 4 1 1 0
+c
+d 114 1 0 0 0
+c
+d 120 1 0 0 0
+c
+d 127 3 1 0 0
+c
+d 129 3 2 0 0
+c
+d 720 1 0 1 0
+c
+d 727 1 0 0 0
+c
+d 728 4 1 0 0
+c
+d 132 3 2 0 0
+c
+d 133 2 0 0 0
+c
+d 478 1 1 0 0
+c
+d 482 2 0 0 0
+c
+d 484 1 0 0 0
+c
+d 487 2 0 0 0
+c
+d 75 3 2 0 0
+c
+d 86 3 0 1 0
+c
+d 280 1 1 0 0
+c
+d 281 3 1 0 0
+c
+d 59 8 1 1 0
+c
+d 60 1 0 0 0
+c
+d 242 4 0 0 0
+c
+d 243 1 0 0 0
+c
+d 245 1 0 0 0
+c
+d 991 4 1 0 0
+c
+d 992 5 2 0 0
+c
+d 341 2 1 0 0
+c
+d 344 8 2 1 0
+c
+d 346 1 0 0 0
+c
+d 46 8 2 1 0
+c
+d 262 1 0 0 0
+c
+d 278 1 1 0 0
+c
+d 279 2 1 0 0
+c
+d 305 2 0 1 0
+c
+d 353 2 0 0 0
+c
+d 191 1 0 1 0
+c
+d 192 3 1 0 0
+c
+d 193 3 0 1 0
+c
+d 973 1 0 0 0
+c
+d 974 4 1 0 0
+c
+d 975 4 1 0 0
+c
+d 84 5 2 0 0
+c
+d 1290 1 0 1 0
+c
+d 875 5 1 1 0
+c
+d 304 11 2 1 0
+c
+d 307 1 0 0 0
+c
+d 1217 2 0 0 0
+c
+d 922 1 0 0 0
+c
+d 923 3 1 0 0
+c
+d 924 3 0 0 0
+c
+d 157 5 1 0 0
+c
+d 364 4 1 0 0
+c
+d 177 3 0 0 0
+c
+d 178 3 1 0 0
+c
+d 437 2 0 0 0
+c
+d 466 3 0 0 0
+c
+d 1047 3 1 0 0
+c
+d 1049 2 1 0 0
+c
+d 458 6 2 0 0
+c
+d 489 1 1 0 0
+c
+d 479 1 1 0 0
+c
+d 487 5 1 0 0
+c
+d 488 4 0 1 0
+c
+d 278 4 1 0 0
+c
+d 1170 1 0 1 0
+c
+d 348 8 3 0 0
+c
+d 351 1 0 1 0
+c
+d 1185 1 0 0 0
+c
+d 1188 6 2 0 0
+c
+d 1191 3 1 0 0
+c
+d 148 2 0 0 0
+c
+d 259 3 1 0 0
+c
+d 285 1 1 0 0
+c
+d 1224 1 0 0 0
+c
+d 1225 3 0 0 0
+c
+d 806 4 0 0 0
+c
+d 807 1 1 0 0
+c
+d 527 1 0 0 0
+c
+d 529 6 1 0 0
+c
+d 540 1 1 0 0
+c
+d 70 1 1 0 0
+c
+d 650 6 1 0 0
+c
+d 656 1 1 0 0
+c
+d 737 7 3 1 0
+c
+d 754 2 0 1 0
+c
+d 529 2 0 0 0
+c
+d 1060 1 1 0 0
+c
+d 1062 3 0 1 0
+c
+d 1063 2 1 0 0
+c
+d 1067 2 1 0 0
+c
+d 1068 2 0 0 0
+c
+d 315 5 2 0 0
+c
+d 301 6 2 0 0
+c
+d 304 1 0 1 0
+c
+d 159 1 1 0 0
+c
+d 184 3 0 1 0
+c
+d 185 3 0 0 0
+c
+d 46 5 2 0 0
+c
+d 73 1 0 0 0
+c
+d 355 4 1 0 0
+c
+d 358 3 1 0 0
+c
+d 50 1 0 0 0
+c
+d 51 4 0 0 0
+c
+d 922 2 0 1 0
+c
+d 926 6 3 1 0
+c
+d 663 3 0 0 0
+c
+d 681 1 1 0 0
+c
+d 682 2 0 0 0
+c
+d 764 3 1 0 0
+c
+d 765 1 0 0 0
+c
+d 775 4 0 0 0
+c
+d 886 4 1 1 0
+c
+d 1192 2 0 0 0
+c
+d 1195 3 1 0 0
+c
+d 556 4 1 0 0
+c
+d 565 1 1 0 0
+c
+d 734 2 0 0 0
+c
+d 769 4 1 0 0
+c
+d 770 1 0 0 0
+c
+d 939 3 1 0 0
+c
+d 101 2 1 0 0
+c
+d 111 1 0 1 0
+c
+d 608 3 0 0 0
+c
+d 609 1 0 0 0
+c
+d 1039 3 0 0 0
+c
+d 650 4 2 1 0
+c
+d 651 3 0 0 0
+c
+d 686 2 0 0 0
+c
+d 532 2 1 0 0
+c
+d 537 6 1 0 0
+c
+d 89 3 2 0 0
+c
+d 550 6 1 0 0
+c
+d 129 7 1 0 0
+c
+d 131 1 1 0 0
+c
+d 341 3 0 0 0
+c
+d 422 1 0 0 0
+c
+d 423 3 0 0 0
+c
+d 132 1 0 0 0
+c
+d 337 3 0 1 0
+c
+d 338 4 0 0 0
+c
+d 340 1 0 0 0
+c
+d 301 7 2 1 0
+c
+d 1126 1 0 1 0
+c
+d 1127 1 0 0 0
+c
+d 1131 5 1 0 0
+c
+d 46 3 0 0 0
+c
+d 74 1 0 0 0
+c
+d 1313 1 0 0 0
+c
+d 12 1 1 0 0
+c
+d 90 2 0 0 0
+c
+d 91 2 0 0 0
+c
+d 49 5 0 0 0
+c
+d 59 3 1 0 0
+c
+d 132 3 0 1 0
+c
+d 1257 2 1 0 0
+c
+d 591 3 0 0 0
+c
+d 597 2 1 1 0
+c
+d 734 5 1 1 0
+c
+d 737 1 0 1 0
+c
+d 787 1 1 0 0
+c
+d 882 2 1 0 0
+c
+d 888 2 1 0 0
+c
+d 155 1 0 0 0
+c
+d 176 2 0 0 0
+c
+d 177 2 0 0 0
+c
+d 180 2 1 0 0
+c
+d 753 8 3 0 0
+c
+d 159 2 0 0 0
+c
+d 213 1 1 0 0
+c
+d 242 2 1 0 0
+c
+d 262 1 0 1 0
+c
+d 568 4 2 0 0
+c
+d 572 3 0 0 0
+c
+d 419 8 3 0 0
+c
+d 420 1 0 0 0
+c
+d 30 4 1 0 0
+c
+d 32 1 0 0 0
+c
+d 575 6 2 0 0
+c
+d 591 4 0 0 0
+c
+d 592 3 1 0 0
+c
+d 594 2 1 0 0
+c
+d 959 1 0 1 0
+c
+d 204 5 1 0 0
+c
+d 457 8 2 0 0
+c
+d 465 1 0 0 0
+c
+d 393 5 0 0 0
+c
+d 399 1 0 0 0
+c
+d 691 4 1 1 0
+c
+d 699 4 1 0 0
+c
+d 716 1 0 0 0
+c
+d 307 4 0 0 0
+c
+d 328 5 1 1 0
+c
+d 329 1 1 0 0
+c
+d 132 2 1 0 0
+c
+d 133 6 1 1 0
+c
+d 495 3 0 1 0
+c
+d 384 4 2 0 0
+c
+d 394 2 0 0 0
+c
+d 1111 1 0 0 0
+c
+d 301 5 1 0 0
+c
+d 1157 3 1 0 0
+c
+d 844 1 0 0 0
+c
+d 851 4 2 0 0
+c
+d 807 1 0 0 0
+c
+d 820 1 0 1 0
+c
+d 821 4 2 0 0
+c
+d 822 3 0 0 0
+c
+d 882 2 1 0 0
+c
+d 884 2 1 0 0
+c
+d 888 1 0 0 0
+c
+d 734 1 0 0 0
+c
+d 737 4 1 1 0
+c
+d 742 1 0 1 0
+c
+d 1285 6 0 0 0
+c
+d 7 3 1 0 0
+c
+d 1275 1 0 0 0
+c
+d 1278 2 0 0 0
+c
+d 1279 1 0 0 0
+c
+d 1283 1 0 0 0
+c
+d 91 3 1 0 0
+c
+d 92 1 0 0 0
+c
+d 93 1 0 0 0
+c
+d 152 1 0 0 0
+c
+d 153 2 0 1 0
+c
+d 155 2 1 0 0
+c
+d 156 1 0 1 0
+c
+d 305 1 1 0 0
+c
+d 353 4 1 1 0
+c
+d 1144 4 0 0 0
+c
+d 424 1 0 0 0
+c
+d 591 3 1 1 0
+c
+d 592 1 1 0 0
+c
+d 168 1 0 0 0
+c
+d 169 4 1 0 0
+c
+d 373 1 0 1 0
+c
+d 375 1 0 0 0
+c
+d 838 2 0 1 0
+c
+d 839 2 1 0 0
+c
+d 842 3 1 1 0
+c
+d 243 3 2 0 0
+c
+d 246 1 0 0 0
+c
+d 248 1 0 0 0
+c
+d 575 8 2 0 0
+c
+d 1044 1 0 0 0
+c
+d 575 2 1 0 0
+c
+d 796 6 1 0 0
+c
+d 510 3 1 1 0
+c
+d 517 3 0 1 0
+c
+d 518 1 0 0 0
+c
+d 93 3 2 0 0
+c
+d 141 1 0 0 0
+c
+d 142 3 0 1 0
+c
+d 746 3 1 1 0
+c
+d 753 8 3 1 0
+c
+d 19 2 0 0 0
+c
+d 1013 5 1 0 0
+c
+d 1017 1 0 1 0
+c
+d 1019 1 1 0 0
+c
+d 392 2 1 0 0
+c
+d 1126 3 0 1 0
+c
+d 1130 1 0 0 0
+c
+d 795 1 1 0 0
+c
+d 820 5 1 0 0
+c
+d 167 1 0 0 0
+c
+d 369 2 0 0 0
+c
+d 382 2 2 0 0
+c
+d 650 1 0 1 0
+c
+d 661 2 1 0 0
+c
+d 662 3 1 1 0
+c
+d 919 4 1 0 0
+c
+d 923 2 0 0 0
+c
+d 924 2 0 1 0
+c
+d 934 1 0 1 0
+c
+d 44 6 1 0 0
+c
+d 1020 1 0 0 0
+c
+d 1030 1 0 0 0
+c
+d 1031 1 0 0 0
+c
+d 532 4 0 0 0
+c
+d 534 1 0 0 0
+c
+d 537 1 0 0 0
+c
+d 602 5 1 1 0
+c
+d 642 1 0 0 0
+c
+d 644 2 0 0 0
+c
+d 682 1 1 0 0
+c
+d 74 1 0 0 0
+c
+d 1299 3 0 0 0
+c
+d 1300 6 2 0 0
+c
+d 686 4 1 0 0
+c
+d 689 2 0 0 0
+c
+d 704 1 0 0 0
+c
+d 1194 1 0 0 0
+c
+d 1202 4 1 1 0
+c
+d 662 8 2 0 0
+c
+d 663 2 0 0 0
+c
+d 101 6 1 1 0
+c
+d 110 1 1 0 0
+c
+d 111 2 0 0 0
+c
+d 799 7 2 0 0
+c
+d 384 3 1 1 0
+c
+d 394 1 0 0 0
+c
+d 1111 1 1 0 0
+c
+d 276 4 1 0 0
+c
+d 301 2 0 0 0
+c
+d 304 2 0 0 0
+c
+d 310 1 0 0 0
+c
+d 262 1 1 0 0
+c
+d 279 5 0 1 0
+c
+d 301 7 2 1 0
+c
+d 276 1 1 0 0
+c
+d 301 3 1 0 0
+c
+d 48 4 2 0 0
+c
+d 49 1 0 1 0
+c
+d 1170 6 2 1 0
+c
+d 1184 1 0 0 0
+c
+d 315 3 0 1 0
+c
+d 324 3 1 0 0
+c
+d 325 1 1 0 0
+c
+d 559 5 1 0 0
+c
+d 560 2 1 0 0
+c
+d 159 5 1 0 0
+c
+d 213 1 0 0 0
+c
+d 1195 7 1 1 0
+c
+d 1196 1 0 0 0
+c
+d 211 1 0 1 0
+c
+d 1237 6 2 0 0
+c
+d 250 5 1 0 0
+c
+d 251 3 1 0 0
+c
+d 806 3 0 0 0
+c
+d 840 1 1 0 0
+c
+d 694 6 2 0 0
+c
+d 1303 2 1 0 0
+c
+d 1304 6 1 0 0
+c
+d 1305 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 107 1 0 0 0
+c
+d 111 2 0 1 0
+c
+d 229 2 1 0 0
+c
+d 231 2 1 0 0
+c
+d 236 4 0 0 0
+c
+d 719 4 1 1 0
+c
+d 550 1 1 0 0
+c
+d 556 2 1 0 0
+c
+d 557 2 0 0 0
+c
+d 565 2 0 0 0
+c
+d 167 6 0 0 0
+c
+d 1105 2 1 0 0
+c
+d 1106 1 1 0 0
+c
+d 424 6 2 0 0
+c
+d 591 1 0 0 0
+c
+d 621 4 0 0 0
+c
+d 1021 4 2 0 0
+c
+d 1022 1 0 0 0
+c
+d 1087 4 1 1 0
+c
+d 66 5 1 0 0
+c
+d 68 1 0 0 0
+c
+d 69 3 0 0 0
+c
+d 858 4 1 0 0
+c
+d 868 1 0 0 0
+c
+d 869 1 0 1 0
+c
+d 620 1 0 0 0
+c
+d 621 1 0 1 0
+c
+d 631 3 1 0 0
+c
+d 645 5 0 0 0
+c
+d 811 6 2 1 0
+c
+d 812 5 1 0 0
+c
+d 400 8 3 0 0
+c
+d 719 3 0 0 0
+c
+d 720 1 0 0 0
+c
+d 723 5 1 0 0
+c
+d 724 1 0 1 0
+c
+d 146 7 1 0 0
+c
+d 232 1 0 0 0
+c
+d 233 3 0 1 0
+c
+d 234 2 1 0 0
+c
+d 437 1 0 0 0
+c
+d 457 10 3 1 0
+c
+d 54 7 2 0 0
+c
+d 697 1 0 0 0
+c
+d 337 3 1 0 0
+c
+d 338 6 1 0 0
+c
+d 340 2 0 0 0
+c
+d 557 1 0 0 0
+c
+d 565 6 1 2 0
+c
+d 557 4 2 0 0
+c
+d 565 3 1 1 0
+c
+d 1060 1 0 1 0
+c
+d 574 2 1 1 0
+c
+d 795 4 2 0 0
+c
+d 796 2 0 1 0
+c
+d 815 2 0 0 0
+c
+d 301 6 1 0 0
+c
+d 423 1 0 1 0
+c
+d 470 3 1 0 0
+c
+d 477 2 1 0 0
+c
+d 478 1 0 0 0
+c
+d 479 1 0 0 0
+c
+d 286 7 1 0 0
+c
+d 763 1 1 0 0
+c
+d 767 2 0 0 0
+c
+d 26 5 1 1 0
+c
+d 27 3 0 0 0
+c
+d 5 1 0 0 0
+c
+d 9 5 0 0 0
+c
+d 10 2 1 0 0
+c
+d 19 6 2 1 0
+c
+d 21 3 1 1 0
+c
+d 1279 4 0 0 0
+c
+d 1281 4 1 1 0
+c
+d 93 9 2 0 0
+c
+d 48 1 0 1 0
+c
+d 49 5 1 0 0
+c
+d 58 1 0 1 0
+c
+d 807 2 1 0 0
+c
+d 823 5 1 0 0
+c
+d 286 5 1 0 0
+c
+d 291 2 0 0 0
+c
+d 299 1 0 1 0
+c
+d 803 2 0 0 0
+c
+d 804 3 1 0 0
+c
+d 915 3 1 0 0
+c
+d 530 7 2 1 0
+c
+d 531 1 0 0 0
+c
+d 565 1 1 0 0
+c
+d 791 5 1 0 0
+c
+d 829 3 0 0 0
+c
+d 559 1 0 1 0
+c
+d 560 6 1 0 0
+c
+d 561 1 0 0 0
+c
+d 689 9 0 1 0
+c
+d 2 5 2 0 0
+c
+d 16 1 0 0 0
+c
+d 29 3 1 0 0
+c
+d 31 3 1 0 0
+c
+d 1318 1 0 0 0
+c
+d 531 1 0 0 0
+c
+d 535 3 0 0 0
+c
+d 536 4 1 0 0
+c
+d 437 7 3 0 0
+c
+d 437 9 3 0 0
+c
+d 442 1 0 0 0
+c
+d 213 1 0 0 0
+c
+d 242 2 1 0 0
+c
+d 262 1 0 1 0
+c
+d 291 3 2 0 0
+c
+d 300 3 0 1 0
+c
+d 314 1 0 0 0
+c
+d 164 6 1 0 0
+c
+d 166 3 1 0 0
+c
+d 353 1 0 1 0
+c
+d 355 2 0 0 0
+c
+d 357 5 0 0 0
+c
+d 164 4 0 0 0
+c
+d 167 5 2 0 0
+c
+d 368 1 0 0 0
+c
+d 608 1 0 0 0
+c
+d 615 9 2 0 0
+c
+d 44 5 2 0 0
+c
+d 327 8 2 0 0
+c
+d 328 1 0 0 0
+c
+d 348 1 0 0 0
+c
+d 349 2 0 0 0
+c
+d 350 1 0 0 0
+c
+d 691 1 1 0 0
+c
+d 693 5 2 0 0
+c
+d 695 2 0 0 0
+c
+d 454 1 0 0 0
+c
+d 455 9 2 0 0
+c
+d 168 7 1 2 0
+c
+d 348 1 1 0 0
+c
+d 1145 7 0 0 0
+c
+d 93 1 0 0 0
+c
+d 95 2 0 0 0
+c
+d 96 2 1 0 0
+c
+d 97 2 1 0 0
+c
+d 99 2 0 0 0
+c
+d 286 1 1 0 0
+c
+d 291 2 1 0 0
+c
+d 299 4 0 0 0
+c
+d 457 8 1 1 0
+c
+d 461 2 0 0 0
+c
+d 490 2 1 0 0
+c
+d 5 3 0 1 0
+c
+d 6 1 1 0 0
+c
+d 498 1 0 1 0
+c
+d 499 2 1 0 0
+c
+d 500 1 0 0 0
+c
+d 276 5 0 0 0
+c
+d 290 1 0 0 0
+c
+d 594 7 1 0 0
+c
+d 686 1 0 0 0
+c
+d 1042 3 1 0 0
+c
+d 348 1 0 0 0
+c
+d 392 2 0 0 0
+c
+d 1125 3 0 0 0
+c
+d 168 2 0 1 0
+c
+d 378 3 1 0 0
+c
+d 193 2 1 0 0
+c
+d 195 4 1 0 0
+c
+d 205 3 1 0 0
+c
+d 265 5 0 1 0
+c
+d 286 3 1 0 0
+c
+d 1184 1 0 0 0
+c
+d 1195 5 2 0 0
+c
+d 1197 1 0 0 0
+c
+d 39 8 1 0 0
+c
+d 46 6 2 0 0
+c
+d 74 1 0 0 0
+c
+d 75 1 1 0 0
+c
+d 1313 1 0 0 0
+c
+d 301 1 0 0 0
+c
+d 1156 3 0 0 0
+c
+d 1192 3 1 1 0
+c
+d 718 4 1 0 0
+c
+d 455 5 2 0 0
+c
+d 456 3 0 1 0
+c
+d 699 7 2 0 0
+c
+d 715 1 0 0 0
+c
+d 622 1 0 1 0
+c
+d 1007 2 0 0 0
+c
+d 1008 4 0 0 0
+c
+d 848 3 1 1 0
+c
+d 851 1 0 0 0
+c
+d 852 5 1 0 0
+c
+d 861 2 1 0 0
+c
+d 101 2 1 0 0
+c
+d 608 2 1 1 0
+c
+d 1091 3 0 0 0
+c
+d 185 4 0 0 0
+c
+d 186 2 0 0 0
+c
+d 187 1 0 0 0
+c
+d 188 2 0 0 0
+c
+d 457 1 0 0 0
+c
+d 460 3 0 0 0
+c
+d 46 3 0 0 0
+c
+d 75 1 0 0 0
+c
+d 126 1 0 0 0
+c
+d 127 4 1 0 0
+c
+d 1168 3 0 1 0
+c
+d 1176 1 0 0 0
+c
+d 1177 5 2 1 0
+c
+d 482 3 0 0 0
+c
+d 488 3 1 0 0
+c
+d 262 5 2 0 0
+c
+d 278 2 1 0 0
+c
+d 280 2 1 0 0
+c
+d 281 1 0 1 0
+c
+d 1228 3 0 0 0
+c
+d 21 8 1 0 0
+c
+d 24 4 2 0 0
+c
+d 26 1 0 0 0
+c
+d 301 3 1 0 0
+c
+d 302 4 0 0 0
+c
+d 1150 4 1 0 0
+c
+d 1151 1 0 1 0
+c
+d 574 3 0 0 0
+c
+d 795 4 1 0 0
+c
+d 911 1 0 1 0
+c
+d 989 4 2 1 0
+c
+d 111 1 0 0 0
+c
+d 113 2 0 0 0
+c
+d 146 2 0 0 0
+c
+d 153 3 0 0 0
+c
+d 228 4 1 0 0
+c
+d 341 2 1 0 0
+c
+d 347 1 0 0 0
+c
+d 348 3 0 0 0
+c
+d 470 2 1 1 0
+c
+d 261 7 2 0 0
+c
+d 284 1 1 0 0
+c
+d 1226 1 1 0 0
+c
+d 120 1 0 0 0
+c
+d 125 6 0 0 0
+c
+d 126 1 0 0 0
+c
+d 132 6 2 0 0
+c
+d 906 3 1 0 0
+c
+d 907 4 1 0 0
+c
+d 908 1 0 0 0
+c
+d 348 5 2 1 0
+c
+d 393 1 0 0 0
+c
+d 407 2 1 0 0
+c
+d 409 1 0 1 0
+c
+d 410 1 0 0 0
+c
+d 146 3 1 0 0
+c
+d 148 6 1 0 0
+c
+d 149 2 1 0 0
+c
+d 729 9 2 0 0
+c
+d 732 4 0 0 0
+c
+d 176 4 1 0 0
+c
+d 177 3 0 0 0
+c
+d 180 4 1 0 0
+c
+d 181 1 1 0 0
+c
+d 787 8 3 0 0
+c
+d 882 1 0 0 0
+c
+d 281 4 1 0 0
+c
+d 1156 3 0 0 0
+c
+d 1192 1 1 0 0
+c
+d 667 1 0 0 0
+c
+d 668 5 1 0 0
+c
+d 669 1 0 0 0
+c
+d 670 2 0 0 0
+c
+d 671 2 1 0 0
+c
+d 107 4 2 0 0
+c
+d 111 3 0 0 0
+c
+d 236 1 0 0 0
+c
+d 437 1 0 0 0
+c
+d 469 6 2 0 0
+c
+d 479 5 0 1 0
+c
+d 487 1 1 0 0
+c
+d 437 2 0 1 0
+c
+d 471 6 2 0 0
+c
+d 473 2 0 0 0
+c
+d 251 2 0 1 0
+c
+d 252 4 0 0 0
+c
+d 253 1 1 0 0
+c
+d 1023 8 2 0 0
+c
+d 1024 1 0 0 0
+c
+d 606 1 0 0 0
+c
+d 608 4 0 0 0
+c
+d 614 1 0 0 0
+c
+d 84 3 1 0 0
+c
+d 1266 1 0 0 0
+c
+d 1285 3 1 0 0
+c
+d 568 1 1 0 0
+c
+d 572 4 1 0 0
+c
+d 573 6 0 0 0
+c
+d 574 2 0 0 0
+c
+d 54 1 0 0 0
+c
+d 60 3 0 0 0
+c
+d 1303 3 1 0 0
+c
+d 157 1 0 0 0
+c
+d 279 1 0 0 0
+c
+d 305 10 2 1 0
+c
+d 353 1 1 0 0
+c
+d 167 1 0 0 0
+c
+d 369 2 0 1 0
+c
+d 382 6 2 0 0
+c
+d 418 7 2 0 0
+c
+d 559 1 0 0 0
+c
+d 568 2 1 0 0
+c
+d 572 6 1 0 0
+c
+d 574 1 0 0 0
+c
+d 60 1 0 0 0
+c
+d 621 2 0 0 0
+c
+d 630 3 0 0 0
+c
+d 663 4 2 1 0
+c
+d 664 2 1 0 0
+c
+d 146 5 1 0 0
+c
+d 148 1 0 1 0
+c
+d 229 1 0 1 0
+c
+d 793 3 0 1 0
+c
+d 795 1 1 0 0
+c
+d 559 1 0 0 0
+c
+d 565 1 0 0 0
+c
+d 566 5 1 0 0
+c
+d 568 1 0 0 0
+c
+d 430 4 0 0 0
+c
+d 470 5 0 0 0
+c
+d 475 1 0 0 0
+c
+d 207 2 0 1 0
+c
+d 208 2 0 1 0
+c
+d 1245 2 1 0 0
+c
+d 787 3 0 0 0
+c
+d 789 2 0 1 0
+c
+d 790 3 1 0 0
+c
+d 93 6 2 0 0
+c
+d 94 1 0 0 0
+c
+d 1163 1 1 0 0
+c
+d 1165 5 1 0 0
+c
+d 1168 1 0 0 0
+c
+d 205 1 0 0 0
+c
+d 1241 8 2 0 0
+c
+d 199 6 0 1 0
+c
+d 211 1 1 0 0
+c
+d 301 4 2 1 0
+c
+d 302 7 0 0 0
+c
+d 1218 1 0 0 0
+c
+d 30 2 0 1 0
+c
+d 32 6 2 0 0
+c
+d 620 7 2 0 0
+c
+d 621 1 0 0 0
+c
+d 1165 6 2 0 0
+c
+d 1168 1 0 0 0
+c
+d 428 1 0 0 0
+c
+d 582 3 2 0 0
+c
+d 583 1 0 1 0
+c
+d 586 1 0 0 0
+c
+d 587 5 0 0 0
+c
+d 588 1 0 0 0
+c
+d 179 1 1 0 0
+c
+d 182 2 0 0 0
+c
+d 191 2 0 0 0
+c
+d 5 6 1 0 0
+c
+d 17 1 0 0 0
+c
+d 56 2 0 1 0
+c
+d 1309 5 1 0 0
+c
+d 101 3 1 0 0
+c
+d 111 2 1 0 0
+c
+d 1090 1 0 1 0
+c
+d 1092 3 1 0 0
+c
+d 753 3 0 0 0
+c
+d 858 3 1 0 0
+c
+d 859 1 0 0 0
+c
+d 886 1 0 0 0
+c
+d 887 4 2 0 0
+c
+d 888 3 1 1 0
+c
+d 801 6 2 0 0
+c
+d 19 4 2 0 0
+c
+d 21 1 0 0 0
+c
+d 22 4 1 0 0
+c
+d 23 1 0 0 0
+c
+d 12 1 0 0 0
+c
+d 89 2 1 0 0
+c
+d 90 1 0 1 0
+c
+d 591 6 2 0 0
+c
+d 597 1 0 0 0
+c
+d 623 7 1 0 0
+c
+d 625 1 0 0 0
+c
+d 341 1 0 0 0
+c
+d 348 6 2 0 0
+c
+d 428 3 2 0 0
+c
+d 588 4 1 0 0
+c
+d 1008 1 0 0 0
+c
+d 1009 3 2 0 0
+c
+d 1012 5 0 0 0
+c
+d 1013 1 0 0 0
+c
+d 273 1 1 0 0
+c
+d 274 2 0 0 0
+c
+d 275 1 0 0 0
+c
+d 276 1 1 0 0
+c
+d 55 6 1 1 0
+c
+d 694 4 2 0 0
+c
+d 618 1 0 1 0
+c
+d 965 2 1 0 0
+c
+d 970 2 0 1 0
+c
+d 18 3 0 0 0
+c
+d 93 2 2 0 0
+c
+d 1263 2 0 0 0
+c
+d 21 3 0 0 0
+c
+d 1024 1 0 0 0
+c
+d 1025 4 1 0 0
+c
+d 1026 2 0 1 0
+c
+d 767 6 1 0 0
+c
+d 890 2 1 0 0
+c
+d 718 3 0 0 0
+c
+d 720 5 1 1 0
+c
+d 311 5 1 0 0
+c
+d 327 2 1 0 0
+c
+d 334 2 0 1 0
+c
+d 194 1 0 1 0
+c
+d 195 2 1 0 0
+c
+d 203 1 1 0 0
+c
+d 205 3 0 0 0
+c
+d 1239 1 0 0 0
+c
+d 46 1 0 1 0
+c
+d 75 2 1 0 0
+c
+d 86 6 1 0 0
+c
+d 437 3 1 0 0
+c
+d 507 1 1 0 0
+c
+d 558 2 0 0 0
+c
+d 509 4 0 0 0
+c
+d 1071 8 2 0 0
+c
+d 394 1 0 0 0
+c
+d 1109 4 1 0 0
+c
+d 787 1 0 1 0
+c
+d 426 1 0 0 0
+c
+d 591 4 1 0 0
+c
+d 592 2 1 0 0
+c
+d 400 4 1 0 0
+c
+d 409 2 0 0 0
+c
+d 410 2 0 0 0
+c
+d 101 1 0 0 0
+c
+d 424 2 1 0 0
+c
+d 425 4 1 0 0
+c
+d 426 1 1 0 0
+c
+d 418 4 2 0 0
+c
+d 419 1 0 0 0
+c
+d 433 4 0 1 0
+c
+d 437 2 1 0 0
+c
+d 443 1 0 0 0
+c
+d 444 2 1 0 0
+c
+d 470 1 0 1 0
+c
+d 430 1 0 0 0
+c
+d 470 2 0 0 0
+c
+d 477 1 1 0 0
+c
+d 478 3 0 0 0
+c
+d 1184 1 0 1 0
+c
+d 1185 8 1 0 0
+c
+d 1201 1 0 0 0
+c
+d 470 2 0 0 0
+c
+d 477 3 0 0 0
+c
+d 478 3 1 0 0
+c
+d 482 1 1 0 0
+c
+d 578 1 0 0 0
+c
+d 580 9 3 0 0
+c
+d 958 1 0 0 0
+c
+d 162 4 0 0 0
+c
+d 368 7 3 1 0
+c
+d 213 1 0 0 0
+c
+d 242 7 2 0 0
+c
+d 437 3 1 0 0
+c
+d 457 4 0 0 0
+c
+d 569 1 0 1 0
+c
+d 477 4 0 0 0
+c
+d 478 2 1 0 0
+c
+d 483 1 0 0 0
+c
+d 373 5 1 0 0
+c
+d 374 1 0 0 0
+c
+d 377 3 1 0 0
+c
+d 382 1 1 0 0
+c
+d 89 1 1 0 0
+c
+d 532 2 0 0 0
+c
+d 533 1 0 1 0
+c
+d 548 1 0 0 0
+c
+d 549 1 0 0 0
+c
+d 217 4 1 0 0
+c
+d 146 7 2 0 0
+c
+d 152 1 0 0 0
+c
+d 965 1 1 0 0
+c
+d 977 6 0 1 0
+c
+d 878 8 3 1 0
+c
+d 879 1 0 0 0
+c
+d 393 5 1 0 0
+c
+d 395 1 0 0 0
+c
+d 1109 1 0 0 0
+c
+d 1124 2 0 0 0
+c
+d 829 1 0 0 0
+c
+d 835 2 1 0 0
+c
+d 836 3 1 1 0
+c
+d 156 1 0 0 0
+c
+d 163 2 1 1 0
+c
+d 164 3 2 0 0
+c
+d 165 1 0 0 0
+c
+d 1126 4 1 0 0
+c
+d 1129 1 0 0 0
+c
+d 1130 2 0 0 0
+c
+d 287 5 0 0 0
+c
+d 288 1 0 1 0
+c
+d 1221 1 1 0 0
+c
+d 318 6 2 0 0
+c
+d 320 1 0 0 0
+c
+d 321 3 1 0 0
+c
+d 1149 1 0 1 0
+c
+d 511 3 0 0 0
+c
+d 513 8 2 0 0
+c
+d 523 1 0 0 0
+c
+d 211 9 2 1 0
+c
+d 1232 3 0 0 0
+c
+d 19 1 0 0 0
+c
+d 977 2 0 0 0
+c
+d 980 7 2 0 0
+c
+d 225 3 0 1 0
+c
+d 241 2 1 0 0
+c
+d 253 5 1 0 0
+c
+d 254 1 0 1 0
+c
+d 775 4 2 0 0
+c
+d 777 1 0 0 0
+c
+d 278 3 1 0 0
+c
+d 1170 2 1 0 0
+c
+d 1173 2 0 1 0
+c
+d 1228 1 0 1 0
+c
+d 167 6 2 0 0
+c
+d 789 3 2 0 0
+c
+d 829 1 0 0 0
+c
+d 833 2 0 0 0
+c
+d 753 5 1 1 0
+c
+d 858 4 2 0 0
+c
+d 52 2 1 0 0
+c
+d 54 4 1 0 0
+c
+d 66 2 0 0 0
+c
+d 75 2 1 0 0
+c
+d 78 1 0 0 0
+c
+d 79 6 1 0 0
+c
+d 80 1 0 0 0
+c
+d 84 1 0 1 0
+c
+d 1300 1 0 0 0
+c
+d 274 1 0 0 0
+c
+d 277 2 0 0 0
+c
+d 1158 2 0 0 0
+c
+d 1163 3 2 0 0
+c
+d 89 2 0 0 0
+c
+d 1 2 1 0 0
+c
+d 17 6 1 1 0
+c
+d 1323 1 1 0 0
+c
+d 580 4 0 0 0
+c
+d 686 3 1 0 0
+c
+d 955 1 0 1 0
+c
+d 162 1 1 0 0
+c
+d 163 4 2 0 0
+c
+d 171 1 0 0 0
+c
+d 172 2 0 0 0
+c
+d 173 2 0 0 0
+c
+d 174 1 0 0 0
+c
+d 274 7 2 0 0
+c
+d 836 1 0 0 0
+c
+d 839 3 0 0 0
+c
+d 840 4 2 0 0
+c
+d 841 2 0 0 0
+c
+d 570 8 3 0 0
+c
+d 571 2 0 0 0
+c
+d 196 2 0 0 0
+c
+d 200 3 1 0 0
+c
+d 207 3 1 0 0
+c
+d 208 2 1 0 0
+c
+d 701 8 0 0 0
+c
+d 6 1 1 0 0
+c
+d 10 4 0 1 0
+c
+d 11 1 0 0 0
+c
+d 423 1 0 0 0
+c
+d 429 3 1 1 0
+c
+d 430 3 0 0 0
+c
+d 470 1 0 0 0
+c
+d 1170 3 0 0 0
+c
+d 1185 2 1 0 0
+c
+d 1189 1 0 0 0
+c
+d 1112 3 0 0 0
+c
+d 1114 3 2 0 0
+c
+d 1115 1 1 0 0
+c
+d 157 1 1 0 0
+c
+d 178 3 1 0 0
+c
+d 181 1 0 0 0
+c
+d 799 7 2 0 0
+c
+d 806 2 0 0 0
+c
+d 933 1 0 0 0
+c
+d 799 2 0 1 0
+c
+d 800 6 2 0 0
+c
+d 437 7 1 0 0
+c
+d 1045 1 0 0 0
+c
+d 878 4 0 0 0
+c
+d 882 1 0 0 0
+c
+d 861 3 1 0 0
+c
+d 866 2 1 0 0
+c
+d 867 6 1 0 0
+c
+d 868 3 0 0 0
+c
+d 77 6 3 0 0
+c
+d 81 1 0 0 0
+c
+d 93 1 0 0 0
+c
+d 1263 3 0 0 0
+c
+d 1264 2 0 0 0
+c
+d 606 3 1 0 0
+c
+d 608 2 1 0 0
+c
+d 1041 5 1 0 0
+c
+d 378 4 0 0 0
+c
+d 384 3 1 0 0
+c
+d 387 1 0 0 0
+c
+d 572 8 0 1 0
+c
+d 574 1 0 0 0
+c
+d 1055 2 1 0 0
+c
+d 559 3 0 0 0
+c
+d 560 3 0 0 0
+c
+d 561 1 0 0 0
+c
+d 60 4 1 0 0
+c
+d 72 3 0 0 0
+c
+d 622 1 0 0 0
+c
+d 1007 4 1 1 0
+c
+d 86 1 1 0 0
+c
+d 87 4 1 1 0
+c
+d 89 1 0 0 0
+c
+d 252 3 1 0 0
+c
+d 253 4 0 1 0
+c
+d 258 1 1 0 0
+c
+d 259 3 1 0 0
+c
+d 260 1 0 1 0
+c
+d 148 1 0 0 0
+c
+d 259 7 2 0 0
+c
+d 727 1 0 0 0
+c
+d 728 2 1 0 0
+c
+d 733 7 2 0 0
+c
+d 734 4 0 0 0
+c
+d 168 6 3 0 0
+c
+d 169 4 0 0 0
+c
+d 427 1 0 0 0
+c
+d 428 5 1 0 0
+c
+d 430 1 0 0 0
+c
+d 530 1 0 0 0
+c
+d 531 3 1 0 0
+c
+d 540 1 1 0 0
+c
+d 575 1 0 0 0
+c
+d 796 2 1 1 0
+c
+d 797 5 1 0 0
+c
+d 929 3 0 0 0
+c
+d 162 1 0 0 0
+c
+d 171 2 1 0 0
+c
+d 172 5 2 0 0
+c
+d 575 3 1 1 0
+c
+d 577 2 1 0 0
+c
+d 927 1 0 0 0
+c
+d 930 1 0 0 0
+c
+d 1266 3 0 0 0
+c
+d 1274 3 1 1 0
+c
+d 502 6 0 1 0
+c
+d 507 3 1 0 0
+c
+d 508 1 0 0 0
+c
+d 835 1 0 1 0
+c
+d 836 5 2 0 0
+c
+d 84 1 0 1 0
+c
+d 1275 3 1 0 0
+c
+d 1278 2 1 0 0
+c
+d 1283 1 0 1 0
+c
+d 551 1 0 0 0
+c
+d 564 9 2 0 0
+c
+d 529 1 1 0 0
+c
+d 550 4 1 0 0
+c
+d 1194 6 0 0 0
+c
+d 1195 5 2 0 0
+c
+d 662 8 3 0 0
+c
+d 199 7 2 0 0
+c
+d 1266 1 1 0 0
+c
+d 1285 3 1 0 0
+c
+d 1291 1 0 1 0
+c
+d 1292 3 0 0 0
+c
+d 799 1 0 0 0
+c
+d 842 4 1 0 0
+c
+d 100 1 0 0 0
+c
+d 990 2 1 0 0
+c
+d 992 1 1 0 0
+c
+d 1000 1 0 0 0
+c
+d 1001 6 0 0 0
+c
+d 246 1 1 0 0
+c
+d 252 4 1 0 0
+c
+d 259 1 0 0 0
+c
+d 262 1 0 1 0
+c
+d 753 4 0 1 0
+c
+d 761 6 1 0 0
+c
+d 532 1 0 0 0
+c
+d 535 4 0 0 0
+c
+d 537 1 0 0 0
+c
+d 294 6 2 1 0
+c
+d 296 2 0 0 0
+c
+d 297 1 0 1 0
+c
+d 602 5 1 0 0
+c
+d 604 5 1 0 0
+c
+d 18 6 2 0 0
+c
+d 990 2 0 0 0
+c
+d 195 6 0 0 0
+c
+d 206 3 2 0 0
+c
+d 157 5 1 0 0
+c
+d 1141 2 0 0 0
+c
+d 602 2 0 0 0
+c
+d 663 3 0 0 0
+c
+d 681 5 2 0 0
+c
+d 164 1 1 0 0
+c
+d 166 5 1 0 0
+c
+d 395 1 0 0 0
+c
+d 301 7 1 1 0
+c
+d 310 1 0 0 0
+c
+d 311 3 0 0 0
+c
+d 313 1 0 1 0
+c
+d 276 7 3 0 0
+c
+d 852 1 1 0 0
+c
+d 853 3 1 1 0
+c
+d 861 3 0 0 0
+c
+d 551 1 0 1 0
+c
+d 775 5 1 0 0
+c
+d 780 2 1 1 0
+c
+d 5 7 2 0 0
+c
+d 18 1 0 0 0
+c
+d 622 1 1 0 0
+c
+d 629 3 1 0 0
+c
+d 965 2 0 0 0
+c
+d 1008 3 0 0 0
+c
+d 1009 1 1 0 0
+c
+d 1010 5 0 0 0
+c
+d 1012 1 0 1 0
+c
+d 120 8 1 0 0
+c
+d 125 2 0 0 0
+c
+d 1170 7 1 1 0
+c
+d 789 1 0 0 0
+c
+d 829 3 1 0 0
+c
+d 830 1 1 0 0
+c
+d 276 5 0 0 0
+c
+d 218 9 2 1 0
+c
+d 219 1 0 0 0
+c
+d 220 1 0 0 0
+c
+d 55 4 0 1 0
+c
+d 689 3 1 1 0
+c
+d 691 2 1 0 0
+c
+d 703 3 1 0 0
+c
+d 705 1 0 0 0
+c
+d 453 1 0 0 0
+c
+d 455 7 3 1 0
+c
+d 21 3 0 0 0
+c
+d 28 5 2 1 0
+c
+d 756 3 1 0 0
+c
+d 763 3 0 0 0
+c
+d 844 1 0 0 0
+c
+d 848 2 0 0 0
+c
+d 550 1 0 0 0
+c
+d 552 1 1 0 0
+c
+d 553 3 1 0 0
+c
+d 121 1 0 0 0
+c
+d 124 5 3 0 0
+c
+d 598 3 1 0 0
+c
+d 599 4 0 0 0
+c
+d 600 1 0 1 0
+c
+d 854 3 1 0 0
+c
+d 856 1 1 0 0
+c
+d 868 3 0 0 0
+c
+d 107 1 0 0 0
+c
+d 111 3 1 0 0
+c
+d 146 2 1 0 0
+c
+d 238 1 0 1 0
+c
+d 802 3 1 0 0
+c
+d 803 3 1 0 0
+c
+d 799 4 0 0 0
+c
+d 803 4 1 1 0
+c
+d 1150 6 1 0 0
+c
+d 111 1 0 0 0
+c
+d 146 2 0 0 0
+c
+d 153 1 1 0 0
+c
+d 225 1 1 0 0
+c
+d 226 7 1 0 0
+c
+d 227 1 0 0 0
+c
+d 196 7 2 0 0
+c
+d 197 2 0 0 0
+c
+d 199 1 0 0 0
+c
+d 532 1 0 0 0
+c
+d 534 8 3 0 0
+c
+d 93 4 0 0 0
+c
+d 114 2 1 0 0
+c
+d 395 3 1 1 0
+c
+d 1107 2 1 0 0
+c
+d 1109 6 1 0 0
+c
+d 195 3 0 0 0
+c
+d 205 11 2 0 0
+c
+d 206 1 0 0 0
+c
+d 60 8 2 0 0
+c
+d 630 2 0 0 0
+c
+d 119 3 0 0 0
+c
+d 120 2 1 0 0
+c
+d 121 3 1 0 0
+c
+d 593 1 0 0 0
+c
+d 676 1 0 0 0
+c
+d 678 5 0 0 0
+c
+d 679 2 0 0 0
+c
+d 304 5 2 0 0
+c
+d 309 3 1 0 0
+c
+d 597 2 0 0 0
+c
+d 598 3 1 1 0
+c
+d 145 3 0 0 0
+c
+d 146 3 2 0 0
+c
+d 835 3 0 1 0
+c
+d 900 7 2 0 0
+c
+d 101 5 2 0 0
+c
+d 424 2 0 0 0
+c
+d 425 1 0 0 0
+c
+d 93 3 0 1 0
+c
+d 130 2 1 0 0
+c
+d 1259 1 1 0 0
+c
+d 283 8 1 2 0
+c
+d 592 4 2 0 0
+c
+d 594 3 0 0 0
+c
+d 273 2 1 0 0
+c
+d 287 3 0 0 0
+c
+d 101 2 0 0 0
+c
+d 608 4 0 0 0
+c
+d 1090 4 0 0 0
+c
+d 84 4 2 1 0
+c
+d 1285 1 0 0 0
+c
+d 1288 2 0 0 0
+c
+d 75 1 0 0 0
+c
+d 84 2 0 1 0
+c
+d 85 2 1 0 0
+c
+d 1277 1 0 0 0
+c
+d 152 1 0 0 0
+c
+d 153 7 1 1 0
+c
+d 564 6 1 1 0
+c
+d 788 4 0 0 0
+c
+d 511 6 1 0 0
+c
+d 522 1 0 1 0
+c
+d 527 1 0 0 0
+c
+d 54 3 1 0 0
+c
+d 694 3 0 0 0
+c
+d 1311 3 2 0 0
+c
+d 1312 1 0 0 0
+c
+d 835 3 1 0 0
+c
+d 836 1 0 0 0
+c
+d 838 7 1 0 0
+c
+d 839 1 1 0 0
+c
+d 888 5 1 0 0
+c
+d 889 1 0 0 0
+c
+d 890 1 0 0 0
+c
+d 156 1 1 0 0
+c
+d 400 5 2 0 0
+c
+d 408 1 0 0 0
+c
+d 60 7 1 1 0
+c
+d 591 1 0 0 0
+c
+d 597 4 1 0 0
+c
+d 598 2 0 0 0
+c
+d 599 2 0 0 0
+c
+d 799 6 2 0 0
+c
+d 919 6 1 0 0
+c
+d 920 3 1 0 0
+c
+d 686 8 2 0 0
+c
+d 700 1 0 0 0
+c
+d 129 2 1 0 0
+c
+d 523 3 1 0 0
+c
+d 525 3 0 0 0
+c
+d 753 2 0 0 0
+c
+d 755 3 0 0 0
+c
+d 764 1 0 0 0
+c
+d 606 12 3 0 0
+c
+d 90 1 0 0 0
+c
+d 91 4 1 1 0
+c
+d 117 5 2 0 0
+c
+d 286 9 1 0 0
+c
+d 291 1 0 1 0
+c
+d 195 7 1 0 0
+c
+d 508 2 1 0 0
+c
+d 509 5 2 0 0
+c
+d 418 4 1 1 0
+c
+d 419 1 0 0 0
+c
+d 435 2 0 0 0
+c
+d 767 5 0 1 0
+c
+d 863 1 1 0 0
+c
+d 876 1 0 1 0
+c
+d 877 2 0 0 0
+c
+d 767 3 0 0 0
+c
+d 768 3 1 0 0
+c
+d 889 1 1 0 0
+c
+d 891 1 0 1 0
+c
+d 46 8 2 0 0
+c
+d 280 1 0 0 0
+c
+d 1172 1 1 0 0
+c
+d 1192 3 1 0 0
+c
+d 594 7 1 1 0
+c
+d 101 7 2 0 0
+c
+d 1086 1 0 0 0
+c
+d 1087 3 0 0 0
+c
+d 413 3 1 0 0
+c
+d 419 5 2 0 0
+c
+d 444 5 1 0 0
+c
+d 446 2 0 1 0
+c
+d 447 1 1 0 0
+c
+d 466 3 0 0 0
+c
+d 467 3 1 1 0
+c
+d 532 3 1 0 0
+c
+d 534 3 0 1 0
+c
+d 262 2 0 0 0
+c
+d 264 3 1 1 0
+c
+d 286 2 1 0 0
+c
+d 699 1 0 0 0
+c
+d 715 7 2 0 0
+c
+d 716 1 0 0 0
+c
+d 167 5 2 0 0
+c
+d 1105 1 0 1 0
+c
+d 1106 1 1 0 0
+c
+d 373 6 1 1 0
+c
+d 374 4 0 1 0
+c
+d 1170 4 1 0 0
+c
+d 1184 1 0 0 0
+c
+d 101 1 0 0 0
+c
+d 1083 2 0 0 0
+c
+d 1084 1 0 0 0
+c
+d 1086 4 1 0 0
+c
+d 1087 1 0 0 0
+c
+d 218 1 0 0 0
+c
+d 221 3 1 1 0
+c
+d 222 4 0 0 0
+c
+d 1233 2 0 0 0
+c
+d 610 3 2 0 0
+c
+d 990 2 0 0 0
+c
+d 991 1 0 0 0
+c
+d 992 1 0 0 0
+c
+d 49 1 0 1 0
+c
+d 50 2 1 0 0
+c
+d 51 7 1 0 0
+c
+d 101 8 1 0 0
+c
+d 102 1 0 0 0
+c
+d 103 1 0 0 0
+c
+d 382 1 0 1 0
+c
+d 383 2 0 0 0
+c
+d 1134 5 0 0 0
+c
+d 301 3 0 2 0
+c
+d 1150 3 0 0 0
+c
+d 26 6 1 0 0
+c
+d 28 5 1 0 0
+c
+d 689 1 0 0 0
+c
+d 703 2 1 0 0
+c
+d 704 2 0 0 0
+c
+d 705 6 1 0 0
+c
+d 706 1 0 0 0
+c
+d 196 5 2 0 0
+c
+d 199 5 1 0 0
+c
+d 534 6 1 2 0
+c
+d 547 1 0 0 0
+c
+d 430 1 0 1 0
+c
+d 431 1 0 0 0
+c
+d 436 5 2 0 0
+c
+d 69 10 3 1 0
+c
+d 132 1 0 0 0
+c
+d 133 5 1 1 0
+c
+d 134 1 1 0 0
+c
+d 554 1 0 0 0
+c
+d 555 5 1 0 0
+c
+d 556 2 1 1 0
+c
+d 694 3 1 0 0
+c
+d 695 3 1 1 0
+c
+d 570 3 2 0 0
+c
+d 791 1 0 0 0
+c
+d 793 2 0 0 0
+c
+d 795 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 355 1 1 0 0
+c
+d 356 4 2 0 0
+c
+d 358 3 1 0 0
+c
+d 599 1 1 0 0
+c
+d 606 4 1 0 0
+c
+d 608 2 0 0 0
+c
+d 49 6 1 0 0
+c
+d 734 3 0 0 0
+c
+d 697 9 2 1 0
+c
+d 716 1 0 0 0
+c
+d 717 3 0 0 0
+c
+d 51 1 0 0 0
+c
+d 52 9 2 0 0
+c
+d 723 1 0 1 0
+c
+d 836 4 0 0 0
+c
+d 838 1 1 0 0
+c
+d 839 3 1 0 0
+c
+d 529 2 0 0 0
+c
+d 532 2 1 0 0
+c
+d 537 3 1 1 0
+c
+d 550 1 0 0 0
+c
+d 728 6 2 0 0
+c
+d 729 3 0 1 0
+c
+d 574 7 1 0 0
+c
+d 795 1 1 0 0
+c
+d 21 1 0 0 0
+c
+d 24 4 2 0 0
+c
+d 25 2 1 0 0
+c
+d 26 1 0 0 0
+c
+d 27 3 0 1 0
+c
+d 855 4 0 1 0
+c
+d 856 3 1 1 0
+c
+d 156 1 0 0 0
+c
+d 157 1 0 0 0
+c
+d 162 4 0 0 0
+c
+d 163 2 0 0 0
+c
+d 278 4 0 0 0
+c
+d 280 5 1 0 0
+c
+d 159 2 1 0 0
+c
+d 178 3 1 0 0
+c
+d 60 4 1 0 0
+c
+d 1009 6 1 0 0
+c
+d 1011 1 1 0 0
+c
+d 217 1 1 0 0
+c
+d 218 3 1 0 0
+c
+d 220 7 2 0 0
+c
+d 89 4 1 0 0
+c
+d 120 2 0 1 0
+c
+d 213 3 1 0 0
+c
+d 242 6 1 0 0
+c
+d 315 1 0 0 0
+c
+d 317 3 0 0 0
+c
+d 318 3 2 0 0
+c
+d 114 1 0 1 0
+c
+d 115 4 0 1 0
+c
+d 116 2 0 0 0
+c
+d 146 6 2 0 0
+c
+d 150 1 0 1 0
+c
+d 32 4 1 0 0
+c
+d 74 1 0 1 0
+c
+d 305 5 0 0 0
+c
+d 353 2 1 0 0
+c
+d 1138 1 1 0 0
+c
+d 1163 3 1 1 0
+c
+d 1165 3 0 1 0
+c
+d 60 2 1 0 0
+c
+d 62 1 0 1 0
+c
+d 621 8 1 0 0
+c
+d 436 4 2 0 0
+c
+d 437 2 0 1 0
+c
+d 467 1 0 0 0
+c
+d 126 1 0 0 0
+c
+d 127 6 1 1 0
+c
+d 129 1 1 0 0
+c
+d 499 1 0 1 0
+c
+d 500 4 2 0 0
+c
+d 505 4 0 1 0
+c
+d 494 3 0 0 0
+c
+d 496 2 0 1 0
+c
+d 498 4 2 0 0
+c
+d 499 1 0 1 0
+c
+d 1045 9 1 1 0
+c
+d 89 2 0 0 0
+c
+d 91 1 0 0 0
+c
+d 92 3 0 0 0
+c
+d 119 4 2 1 0
+c
+d 575 2 1 0 0
+c
+d 578 1 0 0 0
+c
+d 796 5 1 0 0
+c
+d 1044 1 1 0 0
+c
+d 1170 1 0 0 0
+c
+d 1185 5 2 0 0
+c
+d 1188 1 0 0 0
+c
+d 1204 1 1 0 0
+c
+d 55 1 0 0 0
+c
+d 691 2 0 0 0
+c
+d 705 1 1 0 0
+c
+d 706 1 0 0 0
+c
+d 707 4 1 0 0
+c
+d 708 3 1 1 0
+c
+d 301 8 1 0 0
+c
+d 304 1 0 1 0
+c
+d 1220 3 1 0 0
+c
+d 502 3 0 0 0
+c
+d 505 6 2 0 0
+c
+d 506 2 0 0 0
+c
+d 1170 1 0 0 0
+c
+d 1174 7 2 1 0
+c
+d 1175 2 0 0 0
+c
+d 437 1 0 0 0
+c
+d 569 3 1 0 0
+c
+d 574 3 1 0 0
+c
+d 1050 2 0 0 0
+c
+d 87 2 0 1 0
+c
+d 89 2 1 0 0
+c
+d 861 1 0 0 0
+c
+d 862 8 2 0 0
+c
+d 863 3 0 0 0
+c
+d 864 1 0 0 0
+c
+d 806 1 1 0 0
+c
+d 906 6 1 0 0
+c
+d 909 1 0 0 0
+c
+d 911 1 0 0 0
+c
+d 622 1 0 0 0
+c
+d 965 3 0 0 0
+c
+d 968 3 0 0 0
+c
+d 969 1 0 0 0
+c
+d 437 2 1 0 0
+c
+d 507 7 2 0 0
+c
+d 508 1 0 0 0
+c
+d 1070 1 0 0 0
+c
+d 120 1 0 0 0
+c
+d 125 3 0 0 0
+c
+d 533 4 2 0 0
+c
+d 1070 1 0 0 0
+c
+d 1071 5 1 0 0
+c
+d 1073 1 1 0 0
+c
+d 157 7 2 0 0
+c
+d 618 3 1 1 0
+c
+d 965 2 0 0 0
+c
+d 973 1 0 0 0
+c
+d 157 5 2 0 0
+c
+d 168 4 1 0 0
+c
+d 371 1 1 0 0
+c
+d 1156 10 2 0 0
+c
+d 1172 1 0 0 0
+c
+d 1185 3 0 0 0
+c
+d 1192 2 1 0 0
+c
+d 1206 2 1 0 0
+c
+d 746 4 1 0 0
+c
+d 752 2 0 0 0
+c
+d 753 3 2 0 0
+c
+d 599 10 2 0 0
+c
+d 604 1 0 0 0
+c
+d 477 2 0 0 0
+c
+d 478 5 2 0 0
+c
+d 483 1 1 0 0
+c
+d 486 2 0 0 0
+c
+d 18 6 1 0 0
+c
+d 1279 1 0 1 0
+c
+d 578 4 0 0 0
+c
+d 580 1 1 0 0
+c
+d 581 1 0 0 0
+c
+d 16 1 1 0 0
+c
+d 93 9 1 0 0
+c
+d 353 4 1 0 0
+c
+d 355 5 2 0 0
+c
+d 55 2 0 0 0
+c
+d 70 1 0 0 0
+c
+d 651 2 1 0 0
+c
+d 690 6 1 1 0
+c
+d 156 1 0 0 0
+c
+d 157 3 1 0 0
+c
+d 178 3 0 0 0
+c
+d 181 1 0 0 0
+c
+d 21 4 1 1 0
+c
+d 28 1 0 0 0
+c
+d 29 2 1 0 0
+c
+d 30 1 0 1 0
+c
+d 211 4 0 0 0
+c
+d 1237 1 0 0 0
+c
+d 1238 1 1 0 0
+c
+d 133 8 2 0 0
+c
+d 140 1 0 0 0
+c
+d 164 6 2 0 0
+c
+d 368 4 2 0 0
+c
+d 46 6 1 0 0
+c
+d 47 1 1 0 0
+c
+d 49 1 0 1 0
+c
+d 59 4 1 0 0
+c
+d 1111 5 2 0 0
+c
+d 1112 2 0 0 0
+c
+d 554 6 2 0 0
+c
+d 555 1 0 0 0
+c
+d 1125 9 2 1 0
+c
+d 1127 1 0 0 0
+c
+d 1128 1 0 0 0
+c
+d 382 6 1 0 0
+c
+d 391 1 0 0 0
+c
+d 1113 1 0 1 0
+c
+d 1115 1 0 0 0
+c
+d 1116 4 2 0 0
+c
+d 1117 1 0 0 0
+c
+d 1118 1 0 0 0
+c
+d 748 3 1 0 0
+c
+d 749 5 1 0 0
+c
+d 341 7 1 0 0
+c
+d 437 1 1 0 0
+c
+d 55 4 0 0 0
+c
+d 66 3 0 0 0
+c
+d 120 5 1 0 0
+c
+d 127 2 1 0 0
+c
+d 129 1 1 0 0
+c
+d 167 5 1 0 0
+c
+d 369 1 0 0 0
+c
+d 146 6 1 0 0
+c
+d 151 3 1 1 0
+c
+d 1098 1 0 1 0
+c
+d 301 1 0 1 0
+c
+d 314 1 1 0 0
+c
+d 315 3 0 1 0
+c
+d 592 1 0 0 0
+c
+d 594 9 3 0 0
+c
+d 334 6 3 0 0
+c
+d 336 2 0 0 0
+c
+d 419 1 1 0 0
+c
+d 1083 4 1 0 0
+c
+d 1084 1 0 0 0
+c
+d 769 6 0 0 0
+c
+d 889 4 2 0 0
+c
+d 301 8 3 0 0
+c
+d 304 3 0 0 0
+c
+d 507 8 2 1 0
+c
+d 52 4 2 1 0
+c
+d 54 3 0 0 0
+c
+d 1303 1 0 0 0
+c
+d 734 7 2 0 0
+c
+d 736 3 0 0 0
+c
+d 195 8 1 0 0
+c
+d 242 1 1 0 0
+c
+d 262 3 1 0 0
+c
+d 266 3 0 0 0
+c
+d 268 1 0 0 0
+c
+d 1156 1 0 0 0
+c
+d 1192 7 2 1 0
+c
+d 1193 3 0 0 0
+c
+d 1156 3 2 0 0
+c
+d 1195 4 0 0 0
+c
+d 39 2 1 0 0
+c
+d 40 2 1 0 0
+c
+d 341 1 0 0 0
+c
+d 344 8 1 0 0
+c
+d 346 1 1 0 0
+c
+d 1146 1 0 1 0
+c
+d 718 1 0 1 0
+c
+d 729 1 0 0 0
+c
+d 730 1 0 0 0
+c
+d 731 6 2 0 0
+c
+d 732 2 0 0 0
+c
+d 1315 3 1 0 0
+c
+d 1316 1 0 0 0
+c
+d 1318 4 1 0 0
+c
+d 907 1 0 0 0
+c
+d 908 11 3 0 0
+c
+d 437 4 0 0 0
+c
+d 444 2 1 0 0
+c
+d 445 1 1 0 0
+c
+d 470 1 0 0 0
+c
+d 1 1 0 0 0
+c
+d 17 3 1 0 0
+c
+d 93 2 1 0 0
+c
+d 133 2 1 0 0
+c
+d 134 4 1 0 0
+c
+d 139 4 0 0 0
+c
+d 146 1 0 0 0
+c
+d 229 7 1 0 0
+c
+d 237 3 1 0 0
+c
+d 577 1 0 0 0
+c
+d 578 5 0 0 0
+c
+d 686 2 0 0 0
+c
+d 955 2 0 0 0
+c
+d 686 3 2 0 0
+c
+d 691 6 1 0 0
+c
+d 861 6 0 0 0
+c
+d 870 4 2 0 0
+c
+d 871 1 1 0 0
+c
+d 19 1 0 0 0
+c
+d 628 1 0 0 0
+c
+d 629 5 1 0 0
+c
+d 100 1 1 0 0
+c
+d 990 4 1 0 0
+c
+d 992 3 0 0 0
+c
+d 993 1 0 0 0
+c
+d 1004 2 0 0 0
+c
+d 424 1 0 0 0
+c
+d 426 2 0 0 0
+c
+d 591 3 0 0 0
+c
+d 268 10 2 0 0
+c
+d 282 1 1 0 0
+c
+d 1227 1 1 0 0
+c
+d 133 9 1 1 0
+c
+d 183 1 1 0 0
+c
+d 195 1 0 1 0
+c
+d 196 3 0 0 0
+c
+d 1246 2 0 0 0
+c
+d 748 2 1 0 0
+c
+d 749 4 0 0 0
+c
+d 894 1 0 1 0
+c
+d 437 8 1 1 0
+c
+d 1050 3 1 0 0
+c
+d 46 3 0 0 0
+c
+d 74 1 0 0 0
+c
+d 1313 6 1 1 0
+c
+d 755 6 2 0 0
+c
+d 762 1 0 0 0
+c
+d 764 1 0 0 0
+c
+d 166 1 0 0 0
+c
+d 167 1 1 0 0
+c
+d 395 1 0 0 0
+c
+d 1103 3 0 0 0
+c
+d 1104 1 0 1 0
+c
+d 148 6 2 0 0
+c
+d 239 3 1 0 0
+c
+d 186 1 0 0 0
+c
+d 213 5 1 0 0
+c
+d 214 1 1 0 0
+c
+d 21 9 2 0 0
+c
+d 148 4 0 1 0
+c
+d 232 4 2 1 0
+c
+d 252 1 0 0 0
+c
+d 272 4 2 0 0
+c
+d 273 3 1 0 0
+c
+d 287 1 0 0 0
+c
+d 604 5 2 0 0
+c
+d 640 1 0 0 0
+c
+d 641 3 0 0 0
+c
+d 811 3 1 0 0
+c
+d 905 1 0 0 0
+c
+d 906 2 0 0 0
+c
+d 910 1 0 0 0
+c
+d 914 1 1 0 0
+c
+d 152 3 1 0 0
+c
+d 153 1 0 0 0
+c
+d 424 3 2 0 0
+c
+d 591 2 0 0 0
+c
+d 592 1 0 0 0
+c
+d 18 1 0 0 0
+c
+d 77 1 0 0 0
+c
+d 78 4 0 0 0
+c
+d 79 2 1 0 0
+c
+d 84 1 1 0 0
+c
+d 965 4 1 0 0
+c
+d 973 1 0 0 0
+c
+d 975 2 1 0 0
+c
+d 976 3 0 0 0
+c
+d 157 1 0 0 0
+c
+d 162 5 2 1 0
+c
+d 364 2 0 0 0
+c
+d 365 1 0 0 0
+c
+d 427 1 0 1 0
+c
+d 584 6 3 0 0
+c
+d 585 2 0 0 0
+c
+d 278 6 1 0 0
+c
+d 279 4 2 0 0
+c
+d 306 2 0 0 0
+c
+d 686 2 1 0 0
+c
+d 689 6 2 0 0
+c
+d 46 2 2 0 0
+c
+d 47 3 0 0 0
+c
+d 49 3 0 0 0
+c
+d 89 1 0 0 0
+c
+d 550 2 1 0 0
+c
+d 551 1 1 0 0
+c
+d 552 5 1 0 0
+c
+d 152 3 1 1 0
+c
+d 1096 8 1 0 0
+c
+d 1097 1 0 0 0
+c
+d 60 8 1 0 0
+c
+d 1307 3 0 0 0
+c
+d 375 1 0 0 0
+c
+d 376 3 2 0 0
+c
+d 377 1 0 0 0
+c
+d 437 4 2 0 0
+c
+d 558 1 0 0 0
+c
+d 768 6 2 0 0
+c
+d 773 5 0 0 0
+c
+d 294 2 0 1 0
+c
+d 298 5 2 1 0
+c
+d 915 1 0 0 0
+c
+d 916 2 1 0 0
+c
+d 919 4 2 0 0
+c
+d 933 1 0 1 0
+c
+d 934 4 0 0 0
+c
+d 425 1 1 0 0
+c
+d 426 3 0 1 0
+c
+d 591 2 0 0 0
+c
+d 132 5 0 1 0
+c
+d 513 1 1 0 0
+c
+d 1258 1 0 0 0
+c
+d 263 1 0 0 0
+c
+d 264 3 1 1 0
+c
+d 283 8 2 0 0
+c
+d 341 5 1 0 0
+c
+d 342 1 0 0 0
+c
+d 437 3 1 0 0
+c
+d 568 1 0 0 0
+c
+d 570 2 0 1 0
+c
+d 572 3 0 0 0
+c
+d 806 1 0 1 0
+c
+d 811 8 4 0 0
+c
+d 914 1 0 0 0
+c
+d 753 1 0 0 0
+c
+d 754 5 1 0 0
+c
+d 756 1 1 0 0
+c
+d 309 1 0 1 0
+c
+d 311 2 1 0 0
+c
+d 327 6 2 1 0
+c
+d 334 1 0 0 0
+c
+d 348 2 0 0 0
+c
+d 791 7 1 2 0
+c
+d 60 4 1 0 0
+c
+d 61 2 0 0 0
+c
+d 647 3 1 0 0
+c
+d 660 1 1 0 0
+c
+d 211 2 0 0 0
+c
+d 217 3 1 0 0
+c
+d 1232 1 0 1 0
+c
+d 369 2 1 0 0
+c
+d 382 5 1 0 0
+c
+d 384 1 0 0 0
+c
+d 842 3 0 0 0
+c
+d 848 4 2 1 0
+c
+d 849 3 0 0 0
+c
+d 437 3 1 1 0
+c
+d 491 1 0 0 0
+c
+d 493 5 1 1 0
+c
+d 803 7 1 0 0
+c
+d 550 3 0 0 0
+c
+d 552 1 0 0 0
+c
+d 554 4 1 1 0
+c
+d 242 4 1 0 0
+c
+d 246 1 0 0 0
+c
+d 1106 1 0 0 0
+c
+d 1108 2 1 0 0
+c
+d 1110 5 1 1 0
+c
+d 1120 1 0 0 0
+c
+d 796 3 0 0 0
+c
+d 813 1 0 0 0
+c
+d 815 1 0 0 0
+c
+d 46 2 0 0 0
+c
+d 47 5 1 1 0
+c
+d 48 3 1 1 0
+c
+d 156 8 1 0 0
+c
+d 166 1 0 0 0
+c
+d 400 2 1 0 0
+c
+d 43 1 0 0 0
+c
+d 44 6 1 0 0
+c
+d 168 8 1 0 0
+c
+d 170 1 0 0 0
+c
+d 19 5 0 0 0
+c
+d 983 4 2 0 0
+c
+d 62 1 1 0 0
+c
+d 64 4 1 0 0
+c
+d 65 7 1 0 0
+c
+d 324 3 0 0 0
+c
+d 325 2 0 0 0
+c
+d 332 1 0 0 0
+c
+d 340 5 2 0 0
+c
+d 217 1 0 0 0
+c
+d 241 3 0 0 0
+c
+d 242 2 1 0 0
+c
+d 1231 3 1 0 0
+c
+d 114 4 0 0 0
+c
+d 127 3 1 0 0
+c
+d 128 3 0 0 0
+c
+d 965 3 1 0 0
+c
+d 973 6 2 0 0
+c
+d 974 1 0 0 0
+c
+d 96 1 1 0 0
+c
+d 99 3 0 0 0
+c
+d 111 2 1 0 0
+c
+d 143 6 2 0 0
+c
+d 753 1 0 0 0
+c
+d 767 7 2 0 0
+c
+d 922 3 1 0 0
+c
+d 925 3 2 1 0
+c
+d 926 3 0 0 0
+c
+d 95 1 0 0 0
+c
+d 96 3 1 0 0
+c
+d 97 3 1 0 0
+c
+d 99 1 1 0 0
+c
+d 195 1 0 0 0
+c
+d 206 7 1 0 0
+c
+d 437 2 0 1 0
+c
+d 463 6 2 1 0
+c
+d 44 1 0 1 0
+c
+d 1012 1 0 0 0
+c
+d 1020 2 1 0 0
+c
+d 1030 5 0 0 0
+c
+d 1031 3 0 0 0
+c
+d 1032 1 0 0 0
+c
+d 650 5 2 0 0
+c
+d 656 5 2 0 0
+c
+d 657 1 0 0 0
+c
+d 661 1 0 1 0
+c
+d 419 4 1 1 0
+c
+d 423 1 0 1 0
+c
+d 132 8 4 0 0
+c
+d 133 3 0 0 0
+c
+d 737 8 2 0 0
+c
+d 753 3 1 0 0
+c
+d 755 1 0 0 0
+c
+d 943 5 1 0 0
+c
+d 47 1 0 0 0
+c
+d 48 6 3 0 0
+c
+d 49 3 0 1 0
+c
+d 602 3 2 0 0
+c
+d 662 1 0 0 0
+c
+d 682 2 0 0 0
+c
+d 844 4 2 0 0
+c
+d 851 1 0 1 0
+c
+d 597 1 0 0 0
+c
+d 598 4 1 0 0
+c
+d 599 1 1 0 0
+c
+d 803 1 1 0 0
+c
+d 804 1 0 0 0
+c
+d 915 3 0 0 0
+c
+d 799 7 1 0 0
+c
+d 915 2 0 0 0
+c
+d 50 2 1 0 0
+c
+d 51 3 1 0 0
+c
+d 57 4 1 0 0
+c
+d 437 1 0 0 0
+c
+d 568 2 0 0 0
+c
+d 569 2 1 0 0
+c
+d 572 4 2 0 0
+c
+d 1051 1 0 0 0
+c
+d 18 4 1 0 0
+c
+d 29 3 0 0 0
+c
+d 50 1 0 0 0
+c
+d 724 6 1 1 0
+c
+d 734 2 1 0 0
+c
+d 861 8 2 0 0
+c
+d 862 2 0 0 0
+c
+d 865 1 1 0 0
+c
+d 477 2 0 1 0
+c
+d 479 2 0 0 0
+c
+d 480 6 1 0 0
+c
+d 485 2 1 0 0
+c
+d 115 2 1 0 0
+c
+d 118 3 0 0 0
+c
+d 119 5 0 0 0
+c
+d 1261 3 1 0 0
+c
+d 343 6 1 0 0
+c
+d 437 1 1 0 0
+c
+d 305 6 2 0 0
+c
+d 306 2 1 0 0
+c
+d 1150 2 0 1 0
+c
+d 37 1 0 0 0
+c
+d 38 2 0 0 0
+c
+d 39 4 1 0 0
+c
+d 41 2 1 0 0
+c
+d 44 3 0 0 0
+c
+d 45 1 0 0 0
+c
+d 46 5 1 1 0
+c
+d 1080 1 0 0 0
+c
+d 1083 4 1 0 0
+c
+d 594 1 0 0 0
+c
+d 650 1 0 0 0
+c
+d 653 9 3 0 0
+c
+d 95 1 0 0 0
+c
+d 96 2 0 1 0
+c
+d 98 7 2 0 0
+c
+d 18 1 0 1 0
+c
+d 95 5 1 0 0
+c
+d 998 1 1 0 0
+c
+d 1263 2 0 0 0
+c
+d 301 4 1 0 0
+c
+d 1156 2 1 0 0
+c
+d 1160 2 0 1 0
+c
+d 168 4 1 0 0
+c
+d 369 6 2 0 0
+c
+d 370 2 0 0 0
+c
+d 371 1 0 0 0
+c
+d 737 9 2 0 0
+c
+d 905 1 0 1 0
+c
+d 906 7 2 0 0
+c
+d 910 1 0 0 0
+c
+d 599 6 1 1 0
+c
+d 60 3 1 0 0
+c
+d 62 2 1 0 0
+c
+d 63 1 0 0 0
+c
+d 621 6 1 0 0
+c
+d 50 8 2 0 0
+c
+d 51 1 0 0 0
+c
+d 724 2 0 0 0
+c
+d 84 4 2 0 0
+c
+d 1275 3 0 1 0
+c
+d 558 4 1 1 0
+c
+d 559 5 1 0 0
+c
+d 560 2 0 0 0
+c
+d 1059 2 0 0 0
+c
+d 775 1 1 0 0
+c
+d 785 3 1 0 0
+c
+d 786 5 0 0 0
+c
+d 467 5 2 0 0
+c
+d 468 6 2 0 0
+c
+d 471 3 0 0 0
+c
+d 457 8 2 1 0
+c
+d 458 1 0 0 0
+c
+d 826 7 3 0 0
+c
+d 827 2 1 0 0
+c
+d 829 1 0 0 0
+c
+d 343 1 0 1 0
+c
+d 437 5 2 0 0
+c
+d 451 5 1 0 0
+c
+d 75 5 1 0 0
+c
+d 262 3 2 0 0
+c
+d 264 3 0 0 0
+c
+d 686 1 0 0 0
+c
+d 689 2 0 0 0
+c
+d 701 1 1 0 0
+c
+d 712 1 0 1 0
+c
+d 713 5 0 0 0
+c
+d 558 2 0 0 0
+c
+d 559 2 0 0 0
+c
+d 562 1 0 0 0
+c
+d 602 9 2 0 0
+c
+d 467 1 0 1 0
+c
+d 468 3 1 0 0
+c
+d 471 4 1 0 0
+c
+d 472 1 0 0 0
+c
+d 473 2 0 0 0
+c
+d 162 2 0 0 0
+c
+d 164 2 0 1 0
+c
+d 368 7 3 1 0
+c
+d 49 1 0 0 0
+c
+d 59 2 0 0 0
+c
+d 1011 3 0 0 0
+c
+d 56 1 0 0 0
+c
+d 65 3 2 1 0
+c
+d 1303 7 1 0 0
+c
+d 1304 3 0 0 0
+c
+d 787 1 1 0 0
+c
+d 882 7 1 0 0
+c
+d 886 2 0 0 0
+c
+d 557 1 0 0 0
+c
+d 1060 4 0 0 0
+c
+d 1061 1 1 0 0
+c
+d 1062 3 1 0 0
+c
+d 1064 1 0 0 0
+c
+d 1269 8 2 0 0
+c
+d 697 4 2 0 0
+c
+d 719 3 0 0 0
+c
+d 328 5 0 0 0
+c
+d 534 5 2 0 0
+c
+d 67 4 2 0 0
+c
+d 68 3 0 0 0
+c
+d 28 3 0 0 0
+c
+d 29 5 1 0 0
+c
+d 31 5 2 1 0
+c
+d 833 4 1 0 0
+c
+d 839 1 0 1 0
+c
+d 842 2 1 0 0
+c
+d 333 1 0 0 0
+c
+d 334 3 0 0 0
+c
+d 340 5 2 1 0
+c
+d 550 1 0 1 0
+c
+d 551 1 1 0 0
+c
+d 775 1 0 0 0
+c
+d 778 3 0 0 0
+c
+d 779 5 1 0 0
+c
+d 159 5 2 0 0
+c
+d 185 3 0 1 0
+c
+d 101 4 2 0 0
+c
+d 423 3 0 1 0
+c
+d 424 3 0 0 0
+c
+d 455 6 2 0 0
+c
+d 457 6 1 0 0
+c
+d 737 7 2 0 0
+c
+d 75 3 0 0 0
+c
+d 86 5 1 2 0
+c
+d 87 2 1 0 0
+c
+d 157 3 0 0 0
+c
+d 159 2 1 0 0
+c
+d 183 3 2 0 0
+c
+d 274 7 1 0 0
+c
+d 275 1 1 0 0
+c
+d 1230 1 0 1 0
+c
+d 46 4 0 0 0
+c
+d 1314 4 2 0 0
+c
+d 16 7 2 1 0
+c
+d 90 3 0 0 0
+c
+d 185 10 3 0 0
+c
+d 799 1 0 1 0
+c
+d 843 7 2 0 0
+c
+d 844 1 1 0 0
+c
+d 591 1 1 0 0
+c
+d 592 5 1 0 0
+c
+d 594 1 0 0 0
+c
+d 1315 3 1 0 0
+c
+d 1316 2 0 0 0
+c
+d 1317 2 0 0 0
+c
+d 48 1 0 0 0
+c
+d 49 2 0 0 0
+c
+d 59 3 0 0 0
+c
+d 60 1 0 0 0
+c
+d 301 3 1 1 0
+c
+d 1156 2 1 0 0
+c
+d 1195 9 2 0 0
+c
+d 1198 1 0 0 0
+c
+d 575 1 0 0 0
+c
+d 578 5 1 0 0
+c
+d 579 3 1 0 0
+c
+d 4 1 0 0 0
+c
+d 5 4 0 0 0
+c
+d 660 9 1 0 0
+c
+d 661 3 1 1 0
+c
+d 21 1 0 0 0
+c
+d 22 5 2 0 0
+c
+d 23 5 0 0 0
+c
+d 650 4 0 0 0
+c
+d 656 4 0 0 0
+c
+d 661 1 0 0 0
+c
+d 196 6 2 0 0
+c
+d 200 1 0 0 0
+c
+d 369 1 0 0 0
+c
+d 372 2 1 0 0
+c
+d 373 3 1 0 0
+c
+d 294 1 0 0 0
+c
+d 295 2 1 0 0
+c
+d 296 1 1 0 0
+c
+d 297 2 0 0 0
+c
+d 618 1 0 0 0
+c
+d 620 1 1 0 0
+c
+d 633 1 0 0 0
+c
+d 634 7 1 0 0
+c
+d 635 2 0 0 0
+c
+d 2 1 1 0 0
+c
+d 16 2 1 0 0
+c
+d 17 2 0 0 0
+c
+d 93 3 0 0 0
+c
+d 95 1 0 0 0
+c
+d 111 3 0 0 0
+c
+d 142 6 1 0 0
+c
+d 143 1 0 0 0
+c
+d 686 3 1 1 0
+c
+d 959 3 0 0 0
+c
+d 962 5 0 0 0
+c
+d 963 1 0 0 0
+c
+d 195 4 0 0 0
+c
+d 196 2 0 0 0
+c
+d 1246 3 1 0 0
+c
+d 51 5 2 0 0
+c
+d 56 3 1 1 0
+c
+d 753 1 0 0 0
+c
+d 755 2 0 0 0
+c
+d 764 4 1 1 0
+c
+d 766 1 1 0 0
+c
+d 167 8 4 0 0
+c
+d 168 1 0 0 0
+c
+d 990 4 2 0 0
+c
+d 994 3 0 0 0
+c
+d 1173 4 0 0 0
+c
+d 1174 3 1 0 0
+c
+d 111 1 1 0 0
+c
+d 146 3 1 0 0
+c
+d 238 5 0 0 0
+c
+d 239 1 0 0 0
+c
+d 424 10 3 0 0
+c
+d 738 5 1 1 0
+c
+d 743 1 0 1 0
+c
+d 301 2 0 0 0
+c
+d 304 1 0 0 0
+c
+d 305 4 2 0 0
+c
+d 127 8 1 0 0
+c
+d 129 1 1 0 0
+c
+d 575 1 0 0 0
+c
+d 578 9 1 1 0
+c
+d 733 1 0 0 0
+c
+d 734 3 1 1 0
+c
+d 736 2 0 0 0
+c
+d 591 3 1 1 0
+c
+d 599 4 1 0 0
+c
+d 602 2 0 0 0
+c
+d 196 2 0 0 0
+c
+d 198 4 0 0 0
+c
+d 199 2 1 1 0
+c
+d 152 1 0 0 0
+c
+d 153 2 0 0 0
+c
+d 155 3 1 0 0
+c
+d 156 2 1 0 0
+c
+d 157 1 1 0 0
+c
+d 278 5 1 1 0
+c
+d 1168 1 0 0 0
+c
+d 301 5 2 0 0
+c
+d 302 2 0 0 0
+c
+d 1155 1 0 1 0
+c
+d 1218 4 0 0 0
+c
+d 1219 3 0 0 0
+c
+d 146 5 1 1 0
+c
+d 148 1 0 0 0
+c
+d 424 6 2 0 0
+c
+d 425 4 1 0 0
+c
+d 1079 1 0 0 0
+c
+d 49 4 0 0 0
+c
+d 58 5 2 0 0
+c
+d 1308 3 1 0 0
+c
+d 661 1 1 0 0
+c
+d 673 6 1 0 0
+c
+d 675 2 0 0 0
+c
+d 676 1 0 0 0
+c
+d 211 8 2 0 0
+c
+d 507 10 2 0 0
+c
+d 795 1 1 0 0
+c
+d 796 2 1 0 0
+c
+d 815 2 1 0 0
+c
+d 817 2 0 1 0
+c
+d 818 1 0 0 0
+c
+d 274 2 0 0 0
+c
+d 275 3 2 0 0
+c
+d 277 3 0 0 0
+c
+d 1158 2 0 0 0
+c
+d 1115 4 0 1 0
+c
+d 1117 5 1 0 0
+c
+d 1118 1 1 0 0
+c
+d 132 1 0 0 0
+c
+d 340 2 1 0 0
+c
+d 491 1 1 0 0
+c
+d 492 5 1 0 0
+c
+d 162 1 1 0 0
+c
+d 359 4 0 0 0
+c
+d 360 1 0 1 0
+c
+d 361 4 0 0 0
+c
+d 84 5 1 0 0
+c
+d 1288 1 1 0 0
+c
+d 1 5 0 1 0
+c
+d 2 2 1 0 0
+c
+d 12 1 0 1 0
+c
+d 806 4 1 1 0
+c
+d 807 4 1 0 0
+c
+d 823 1 0 1 0
+c
+d 111 1 0 0 0
+c
+d 146 3 1 0 0
+c
+d 153 6 2 0 0
+c
+d 155 2 0 0 0
+c
+d 176 1 0 0 0
+c
+d 655 5 1 0 0
+c
+d 656 4 0 1 0
+c
+d 437 2 1 0 0
+c
+d 457 7 1 0 0
+c
+d 458 1 0 1 0
+c
+d 156 1 0 0 0
+c
+d 400 9 3 0 0
+c
+d 157 4 0 1 0
+c
+d 305 2 1 0 0
+c
+d 353 1 0 1 0
+c
+d 1140 3 1 0 0
+c
+d 1141 3 0 0 0
+c
+d 787 1 0 0 0
+c
+d 788 2 1 1 0
+c
+d 789 3 1 0 0
+c
+d 790 4 0 0 0
+c
+d 534 1 0 0 0
+c
+d 543 1 0 0 0
+c
+d 544 1 0 0 0
+c
+d 545 6 0 0 0
+c
+d 546 6 0 0 0
+c
+d 252 1 0 0 0
+c
+d 259 3 0 0 0
+c
+d 261 1 0 1 0
+c
+d 262 3 2 0 0
+c
+d 437 10 2 0 0
+c
+d 87 6 1 1 0
+c
+d 89 2 1 0 0
+c
+d 634 4 0 0 0
+c
+d 635 2 1 0 0
+c
+d 641 2 1 0 0
+c
+d 437 2 1 1 0
+c
+d 453 6 1 0 0
+c
+d 455 3 0 0 0
+c
+d 311 7 2 1 0
+c
+d 326 1 0 0 0
+c
+d 5 6 2 0 0
+c
+d 75 4 0 0 0
+c
+d 88 5 0 0 0
+c
+d 615 1 1 0 0
+c
+d 616 2 1 0 0
+c
+d 617 3 0 1 0
+c
+d 985 1 0 0 0
+c
+d 734 6 2 1 0
+c
+d 769 2 0 0 0
+c
+d 772 1 0 0 0
+c
+d 146 1 1 0 0
+c
+d 148 1 0 0 0
+c
+d 226 1 0 1 0
+c
+d 238 6 1 0 0
+c
+d 239 2 0 0 0
+c
+d 87 1 0 0 0
+c
+d 89 2 0 0 0
+c
+d 315 9 2 0 0
+c
+d 318 1 0 0 0
+c
+d 259 3 1 0 0
+c
+d 262 4 1 0 0
+c
+d 264 3 0 0 0
+c
+d 570 1 0 0 0
+c
+d 572 5 1 0 0
+c
+d 795 2 1 1 0
+c
+d 834 1 1 0 0
+c
+d 323 9 2 0 0
+c
+d 413 4 1 0 0
+c
+d 414 1 0 1 0
+c
+d 1087 3 0 0 0
+c
+d 10 3 1 0 0
+c
+d 11 1 0 0 0
+c
+d 12 3 1 0 0
+c
+d 204 3 0 0 0
+c
+d 217 1 0 1 0
+c
+d 224 1 0 0 0
+c
+d 225 8 2 0 0
+c
+d 217 3 1 0 0
+c
+d 218 1 0 0 0
+c
+d 220 3 0 0 0
+c
+d 241 1 1 0 0
+c
+d 156 2 1 1 0
+c
+d 163 3 0 1 0
+c
+d 172 1 0 0 0
+c
+d 173 2 0 0 0
+c
+d 348 1 0 0 0
+c
+d 392 1 0 0 0
+c
+d 393 5 0 0 0
+c
+d 400 1 1 0 0
+c
+d 407 2 1 0 0
+c
+d 410 1 0 0 0
+c
+d 621 1 0 1 0
+c
+d 622 2 1 0 0
+c
+d 965 1 0 1 0
+c
+d 789 7 1 1 0
+c
+d 621 1 0 1 0
+c
+d 622 7 0 1 0
+c
+d 1034 1 1 0 0
+c
+d 1035 2 1 0 0
+c
+d 144 1 0 0 0
+c
+d 145 4 1 0 0
+c
+d 146 4 0 0 0
+c
+d 301 3 2 0 0
+c
+d 1156 2 0 0 0
+c
+d 1195 1 0 0 0
+c
+d 393 1 0 0 0
+c
+d 395 3 1 0 0
+c
+d 396 8 2 0 0
+c
+d 591 2 0 0 0
+c
+d 593 3 1 0 0
+c
+d 677 3 1 0 0
+c
+d 678 1 0 0 0
+c
+d 679 2 0 0 0
+c
+d 156 4 2 1 0
+c
+d 400 1 0 0 0
+c
+d 405 1 0 0 0
+c
+d 406 1 0 0 0
+c
+d 133 2 0 0 0
+c
+d 134 2 0 0 0
+c
+d 135 2 0 1 0
+c
+d 136 1 0 0 0
+c
+d 138 2 1 0 0
+c
+d 861 8 2 0 0
+c
+d 863 1 1 0 0
+c
+d 871 1 0 0 0
+c
+d 437 5 1 1 0
+c
+d 445 2 0 0 0
+c
+d 446 1 0 0 0
+c
+d 120 3 0 0 0
+c
+d 121 1 0 0 0
+c
+d 126 9 4 0 0
+c
+d 523 5 1 0 0
+c
+d 524 1 0 0 0
+c
+d 527 1 1 0 0
+c
+d 690 1 0 0 0
+c
+d 704 1 0 0 0
+c
+d 705 5 2 0 0
+c
+d 710 1 1 0 0
+c
+d 278 2 0 0 0
+c
+d 1165 3 0 0 0
+c
+d 1167 1 0 0 0
+c
+d 686 9 2 0 0
+c
+d 599 2 0 0 0
+c
+d 604 1 1 0 0
+c
+d 606 3 0 1 0
+c
+d 437 7 0 0 0
+c
+d 439 3 0 0 0
+c
+d 93 1 0 0 0
+c
+d 96 6 2 0 0
+c
+d 111 4 0 0 0
+c
+d 1170 1 0 0 0
+c
+d 1174 6 1 0 0
+c
+d 1185 1 1 0 0
+c
+d 498 3 0 0 0
+c
+d 499 4 1 0 0
+c
+d 500 1 0 0 0
+c
+d 504 4 0 0 0
+c
+d 393 5 1 0 0
+c
+d 396 3 0 0 0
+c
+d 397 1 0 0 0
+c
+d 57 3 0 0 0
+c
+d 59 2 1 0 0
+c
+d 60 2 1 0 0
+c
+d 72 1 1 0 0
+c
+d 733 1 0 1 0
+c
+d 735 7 2 0 0
+c
+d 737 4 0 0 0
+c
+d 69 6 0 0 0
+c
+d 650 2 1 0 0
+c
+d 655 1 1 0 0
+c
+d 157 5 3 0 0
+c
+d 175 2 0 0 0
+c
+d 242 5 1 0 0
+c
+d 243 5 1 0 0
+c
+d 244 1 0 0 0
+c
+d 54 8 1 1 0
+c
+d 694 1 0 0 0
+c
+d 18 7 1 1 0
+c
+d 77 1 0 0 0
+c
+d 84 1 0 0 0
+c
+d 120 3 0 0 0
+c
+d 121 1 0 0 0
+c
+d 122 2 0 0 0
+c
+d 125 4 2 0 0
+c
+d 146 3 2 0 0
+c
+d 294 3 1 1 0
+c
+d 1255 4 0 0 0
+c
+d 554 1 0 0 0
+c
+d 556 4 1 1 0
+c
+d 50 3 2 0 0
+c
+d 51 5 0 0 0
+c
+d 57 3 0 0 0
+c
+d 591 4 2 0 0
+c
+d 593 4 0 0 0
+c
+d 157 4 1 1 0
+c
+d 159 2 0 0 0
+c
+d 183 3 0 0 0
+c
+d 284 4 1 0 0
+c
+d 285 4 1 0 0
+c
+d 1226 3 0 0 0
+c
+d 1269 1 1 0 0
+c
+d 1270 5 1 1 0
+c
+d 1271 1 0 0 0
+c
+d 575 5 2 0 0
+c
+d 796 4 1 0 0
+c
+d 797 1 0 0 0
+c
+d 168 7 1 0 0
+c
+d 169 1 0 0 0
+c
+d 51 3 0 0 0
+c
+d 1309 2 1 0 0
+c
+d 1310 3 1 0 0
+c
+d 737 1 0 0 0
+c
+d 753 4 0 1 0
+c
+d 754 4 1 0 0
+c
+d 178 2 1 0 0
+c
+d 182 1 1 0 0
+c
+d 183 5 1 0 0
+c
+d 191 1 0 0 0
+c
+d 353 5 0 1 0
+c
+d 355 2 1 0 0
+c
+d 357 1 1 0 0
+c
+d 511 3 1 0 0
+c
+d 522 2 0 0 0
+c
+d 528 1 1 0 0
+c
+d 437 1 0 0 0
+c
+d 453 3 0 0 0
+c
+d 454 4 1 0 0
+c
+d 455 3 1 0 0
+c
+d 437 4 2 0 0
+c
+d 493 6 2 0 0
+c
+d 1077 3 0 0 0
+c
+d 606 4 1 1 0
+c
+d 635 3 0 1 0
+c
+d 636 1 0 0 0
+c
+d 301 3 1 0 0
+c
+d 1156 1 0 0 0
+c
+d 1212 5 0 0 0
+c
+d 1213 1 0 0 0
+c
+d 142 3 0 1 0
+c
+d 143 2 1 0 0
+c
+d 145 6 2 0 0
+c
+d 146 2 0 0 0
+c
+d 1256 1 0 1 0
+c
+d 177 3 2 0 0
+c
+d 178 3 0 0 0
+c
+d 594 3 0 1 0
+c
+d 673 4 1 1 0
+c
+d 674 3 1 0 0
+c
+d 575 6 1 0 0
+c
+d 927 6 2 0 0
+c
+d 928 1 0 0 0
+c
+d 930 1 1 0 0
+c
+d 730 1 1 0 0
+c
+d 733 4 2 0 0
+c
+d 735 1 0 1 0
+c
+d 840 3 1 0 0
+c
+d 842 7 0 1 0
+c
+d 554 9 2 1 0
+c
+d 886 5 1 0 0
+c
+d 888 2 1 0 0
+c
+d 183 3 0 1 0
+c
+d 184 2 1 0 0
+c
+d 691 6 1 1 0
+c
+d 693 5 1 0 0
+c
+d 697 1 0 0 0
+c
+d 791 4 1 0 0
+c
+d 795 1 0 0 0
+c
+d 825 4 0 0 0
+c
+d 755 2 2 0 0
+c
+d 764 1 0 0 0
+c
+d 765 4 1 0 0
+c
+d 1192 4 0 1 0
+c
+d 1194 4 2 0 0
+c
+d 1205 4 1 0 0
+c
+d 261 3 1 0 0
+c
+d 283 6 2 0 0
+c
+d 284 3 1 0 0
+c
+d 133 6 1 1 0
+c
+d 437 7 1 1 0
+c
+d 438 2 1 0 0
+c
+d 452 1 0 0 0
+c
+d 498 1 0 0 0
+c
+d 133 2 1 0 0
+c
+d 134 1 1 0 0
+c
+d 137 1 0 0 0
+c
+d 141 1 0 1 0
+c
+d 142 3 1 0 0
+c
+d 791 4 1 0 0
+c
+d 792 3 1 0 0
+c
+d 793 3 2 0 0
+c
+d 96 1 0 0 0
+c
+d 97 1 0 0 0
+c
+d 98 4 1 1 0
+c
+d 99 3 1 0 0
+c
+d 100 1 0 0 0
+c
+d 468 1 1 0 0
+c
+d 472 2 1 0 0
+c
+d 473 1 0 0 0
+c
+d 475 2 0 0 0
+c
+d 476 1 0 0 0
+c
+d 478 3 1 1 0
+c
+d 481 1 0 0 0
+c
+d 437 5 2 0 0
+c
+d 457 2 0 0 0
+c
+d 60 1 0 0 0
+c
+d 66 1 0 0 0
+c
+d 69 1 0 0 0
+c
+d 647 5 1 0 0
+c
+d 648 3 0 0 0
+c
+d 876 1 0 0 0
+c
+d 878 9 3 1 0
+c
+d 1113 6 1 1 0
+c
+d 1116 1 1 0 0
+c
+d 1119 1 1 0 0
+c
+d 75 5 1 0 0
+c
+d 1298 2 0 0 0
+c
+d 1299 1 0 0 0
+c
+d 1300 3 1 1 0
+c
+d 1301 7 1 0 0
+c
+d 686 5 3 0 0
+c
+d 803 3 1 1 0
+c
+d 804 2 1 0 0
+c
+d 805 3 0 0 0
+c
+d 915 1 0 0 0
+c
+d 436 1 1 0 0
+c
+d 437 5 1 1 0
+c
+d 471 2 0 0 0
+c
+d 473 1 0 0 0
+c
+d 19 3 0 0 0
+c
+d 966 1 0 1 0
+c
+d 978 2 1 0 0
+c
+d 979 2 1 0 0
+c
+d 838 1 0 0 0
+c
+d 839 2 0 0 0
+c
+d 842 3 0 0 0
+c
+d 178 3 1 1 0
+c
+d 181 2 1 0 0
+c
+d 193 3 0 0 0
+c
+d 195 1 0 1 0
+c
+d 355 3 1 0 0
+c
+d 357 1 0 1 0
+c
+d 358 1 0 0 0
+c
+d 114 1 0 1 0
+c
+d 120 2 1 0 0
+c
+d 121 1 1 0 0
+c
+d 153 1 0 0 0
+c
+d 155 2 0 0 0
+c
+d 176 2 1 0 0
+c
+d 194 2 1 0 0
+c
+d 204 1 0 0 0
+c
+d 823 3 0 0 0
+c
+d 824 3 0 0 0
+c
+d 835 1 0 0 0
+c
+d 836 3 1 1 0
+c
+d 564 1 1 0 0
+c
+d 565 6 1 0 0
+c
+d 734 3 2 0 0
+c
+d 737 3 0 0 0
+c
+d 740 2 0 0 0
+c
+d 437 5 2 1 0
+c
+d 457 4 1 0 0
+c
+d 574 1 1 0 0
+c
+d 32 2 0 1 0
+c
+d 33 8 1 0 0
+c
+d 46 1 1 0 0
+c
+d 697 1 1 0 0
+c
+d 699 2 1 0 0
+c
+d 716 7 0 0 0
+c
+d 508 1 0 0 0
+c
+d 509 1 0 0 0
+c
+d 514 7 1 0 0
+c
+d 515 1 1 0 0
+c
+d 457 8 1 1 0
+c
+d 21 7 2 0 0
+c
+d 26 1 1 0 0
+c
+d 1027 1 0 0 0
+c
+d 618 3 0 0 0
+c
+d 620 5 1 0 0
+c
+d 621 1 0 0 0
+c
+d 1036 1 1 0 0
+c
+d 46 1 0 0 0
+c
+d 74 6 2 0 0
+c
+d 492 1 1 0 0
+c
+d 493 8 1 0 0
+c
+d 494 2 1 0 0
+c
+d 101 2 0 0 0
+c
+d 108 9 2 0 0
+c
+d 111 1 1 0 0
+c
+d 367 2 1 0 0
+c
+d 368 3 0 0 0
+c
+d 1125 3 1 0 0
+c
+d 807 3 0 0 0
+c
+d 906 5 1 0 0
+c
+d 907 2 0 0 0
+c
+d 908 1 0 0 0
+c
+d 157 1 1 0 0
+c
+d 159 2 1 0 0
+c
+d 183 3 1 0 0
+c
+d 1194 7 1 2 0
+c
+d 1203 4 0 0 0
+c
+d 278 1 0 1 0
+c
+d 279 2 1 0 0
+c
+d 305 2 1 0 0
+c
+d 353 3 1 1 0
+c
+d 277 1 0 0 0
+c
+d 278 1 0 0 0
+c
+d 1163 8 3 1 0
+c
+d 691 4 1 0 0
+c
+d 699 1 0 0 0
+c
+d 800 2 0 0 0
+c
+d 801 1 1 0 0
+c
+d 1045 6 1 0 0
+c
+d 1048 2 0 0 0
+c
+d 505 1 0 0 0
+c
+d 506 1 0 0 0
+c
+d 514 8 2 0 0
+c
+d 515 1 0 0 0
+c
+d 516 4 1 0 0
+c
+d 75 1 0 0 0
+c
+d 88 3 0 1 0
+c
+d 775 2 1 0 0
+c
+d 780 1 1 0 0
+c
+d 781 3 0 0 0
+c
+d 334 3 2 0 0
+c
+d 341 4 1 0 0
+c
+d 344 1 0 0 0
+c
+d 51 4 2 0 0
+c
+d 52 4 1 0 0
+c
+d 1303 1 0 0 0
+c
+d 437 6 1 0 0
+c
+d 463 1 0 1 0
+c
+d 796 1 0 0 0
+c
+d 813 1 1 0 0
+c
+d 815 5 1 0 0
+c
+d 817 5 1 0 0
+c
+d 748 4 0 1 0
+c
+d 749 6 3 0 0
+c
+d 436 1 1 0 0
+c
+d 581 7 0 0 0
+c
+d 1110 6 0 0 0
+c
+d 1120 9 1 0 0
+c
+d 510 1 1 0 0
+c
+d 517 5 1 0 0
+c
+d 518 2 1 0 0
+c
+d 519 1 0 0 0
+c
+d 21 6 2 0 0
+c
+d 24 1 1 0 0
+c
+d 1024 1 0 0 0
+c
+d 1025 1 0 0 0
+c
+d 272 4 2 0 0
+c
+d 282 1 0 1 0
+c
+d 1195 7 1 0 0
+c
+d 1196 1 1 0 0
+c
+d 787 1 0 0 0
+c
+d 882 6 1 0 0
+c
+d 886 3 1 0 0
+c
+d 888 2 1 1 0
+c
+d 6 4 2 0 0
+c
+d 12 2 0 0 0
+c
+d 90 1 0 0 0
+c
+d 199 6 2 0 0
+c
+d 211 2 1 1 0
+c
+d 437 1 0 0 0
+c
+d 574 6 2 0 0
+c
+d 1050 4 0 0 0
+c
+d 101 1 0 0 0
+c
+d 111 3 1 0 0
+c
+d 146 3 0 0 0
+c
+d 384 5 1 1 0
+c
+d 386 4 1 0 0
+c
+d 311 4 0 0 0
+c
+d 327 5 1 0 0
+c
+d 349 1 1 0 0
+c
+d 48 7 2 0 0
+c
+d 46 2 1 0 0
+c
+d 75 7 1 0 0
+c
+d 86 2 0 0 0
+c
+d 66 3 2 0 0
+c
+d 67 1 0 0 0
+c
+d 68 2 0 0 0
+c
+d 69 1 0 0 0
+c
+d 529 6 2 1 0
+c
+d 550 2 0 0 0
+c
+d 382 1 0 0 0
+c
+d 384 4 1 0 0
+c
+d 386 1 0 1 0
+c
+d 388 2 0 0 0
+c
+d 1132 1 0 0 0
+c
+d 855 9 3 0 0
+c
+d 856 1 1 0 0
+c
+d 5 1 0 0 0
+c
+d 7 2 1 0 0
+c
+d 9 1 1 0 0
+c
+d 1279 1 0 0 0
+c
+d 1303 6 2 0 0
+c
+d 1304 3 0 0 0
+c
+d 1305 1 0 1 0
+c
+d 217 5 0 1 0
+c
+d 1241 3 1 0 0
+c
+d 1242 2 1 0 0
+c
+d 720 2 1 0 0
+c
+d 723 4 0 0 0
+c
+d 726 1 0 0 0
+c
+d 152 7 2 0 0
+c
+d 242 8 2 0 0
+c
+d 244 1 0 0 0
+c
+d 60 2 0 0 0
+c
+d 62 10 3 1 0
+c
+d 19 1 0 0 0
+c
+d 965 5 1 0 0
+c
+d 977 3 0 0 0
+c
+d 982 3 0 0 0
+c
+d 550 2 0 0 0
+c
+d 556 7 1 0 0
+c
+d 557 2 1 0 0
+c
+d 565 2 0 0 0
+c
+d 493 1 0 0 0
+c
+d 494 7 2 0 0
+c
+d 5 1 0 0 0
+c
+d 18 8 1 0 0
+c
+d 93 1 0 0 0
+c
+d 129 4 0 0 0
+c
+d 523 5 1 1 0
+c
+d 734 4 2 0 0
+c
+d 737 4 2 0 0
+c
+d 61 1 0 1 0
+c
+d 65 6 1 0 0
+c
+d 1303 1 0 0 0
+c
+d 598 1 1 0 0
+c
+d 606 5 1 1 0
+c
+d 607 4 0 0 0
+c
+d 608 1 0 1 0
+c
+d 437 2 0 0 0
+c
+d 497 1 0 1 0
+c
+d 498 6 2 0 0
+c
+d 500 1 0 1 0
+c
+d 211 1 0 0 0
+c
+d 212 4 0 0 0
+c
+d 213 3 2 0 0
+c
+d 49 9 1 1 0
+c
+d 50 2 1 1 0
+c
+d 132 1 0 0 0
+c
+d 133 7 1 1 0
+c
+d 795 7 2 0 0
+c
+d 834 2 0 0 0
+c
+d 1107 1 0 1 0
+c
+d 1110 4 2 0 0
+c
+d 1111 2 1 0 0
+c
+d 1115 1 0 0 0
+c
+d 101 2 0 0 0
+c
+d 423 4 0 1 0
+c
+d 427 3 1 0 0
+c
+d 430 2 1 0 0
+c
+d 436 1 0 0 0
+c
+d 194 1 1 0 0
+c
+d 204 8 1 0 0
+c
+d 205 1 0 0 0
+c
+d 224 1 0 1 0
+c
+d 96 4 0 0 0
+c
+d 97 8 2 0 0
+c
+d 311 1 0 0 0
+c
+d 327 2 0 0 0
+c
+d 348 4 2 0 0
+c
+d 349 2 0 0 0
+c
+d 1145 1 0 1 0
+c
+d 217 5 1 1 0
+c
+d 241 4 0 0 0
+c
+d 248 2 0 0 0
+c
+d 249 2 0 0 0
+c
+d 87 3 0 0 0
+c
+d 89 1 0 0 0
+c
+d 341 10 1 0 0
+c
+d 347 2 0 0 0
+c
+d 1185 1 0 1 0
+c
+d 1202 7 1 0 0
+c
+d 550 2 1 0 0
+c
+d 551 5 2 0 0
+c
+d 553 1 1 0 0
+c
+d 554 2 0 0 0
+c
+d 555 1 0 0 0
+c
+d 262 3 0 0 0
+c
+d 274 1 0 0 0
+c
+d 278 4 2 0 0
+c
+d 159 6 2 0 0
+c
+d 183 1 0 0 0
+c
+d 242 1 0 0 0
+c
+d 691 6 2 0 0
+c
+d 697 1 0 0 0
+c
+d 54 9 3 0 0
+c
+d 719 1 0 0 0
+c
+d 49 1 0 0 0
+c
+d 734 7 2 0 0
+c
+d 939 1 1 0 0
+c
+d 133 4 1 0 0
+c
+d 134 2 1 0 0
+c
+d 139 1 0 1 0
+c
+d 511 9 2 0 0
+c
+d 457 4 0 1 0
+c
+d 465 1 0 0 0
+c
+d 466 1 1 0 0
+c
+d 787 3 1 0 0
+c
+d 789 5 0 0 0
+c
+d 413 3 1 1 0
+c
+d 414 1 0 0 0
+c
+d 418 6 1 0 0
+c
+d 419 2 1 0 0
+c
+d 420 1 0 1 0
+c
+d 556 1 0 0 0
+c
+d 557 2 0 0 0
+c
+d 565 4 2 0 0
+c
+d 567 2 0 0 0
+c
+d 568 2 0 0 0
+c
+d 276 4 0 1 0
+c
+d 301 3 1 0 0
+c
+d 312 1 0 0 0
+c
+d 146 10 2 0 0
+c
+d 147 2 0 0 0
+c
+d 294 2 1 0 0
+c
+d 1255 3 0 0 0
+c
+d 21 8 2 1 0
+c
+d 797 4 1 0 0
+c
+d 798 1 0 0 0
+c
+d 965 5 0 0 0
+c
+d 970 6 2 0 0
+c
+d 971 1 1 0 0
+c
+d 1017 1 1 0 0
+c
+d 1022 8 2 0 0
+c
+d 1023 1 0 0 0
+c
+d 169 1 0 0 0
+c
+d 375 1 1 0 0
+c
+d 376 2 0 0 0
+c
+d 377 5 1 0 0
+c
+d 379 3 1 0 0
+c
+d 91 2 1 0 0
+c
+d 92 2 0 0 0
+c
+d 118 4 0 0 0
+c
+d 423 1 0 0 0
+c
+d 1080 5 2 0 0
+c
+d 1082 1 0 0 0
+c
+d 616 1 0 1 0
+c
+d 617 1 0 0 0
+c
+d 989 5 1 0 0
+c
+d 996 2 1 0 0
+c
+d 207 2 0 0 0
+c
+d 208 2 1 0 0
+c
+d 209 3 1 0 0
+c
+d 1245 3 0 0 0
+c
+d 575 1 1 0 0
+c
+d 926 5 0 0 0
+c
+d 927 5 2 0 0
+c
+d 635 1 1 0 0
+c
+d 641 8 1 0 0
+c
+d 423 5 1 1 0
+c
+d 427 5 0 1 0
+c
+d 1078 1 1 0 0
+c
+d 70 8 0 0 0
+c
+d 650 1 0 0 0
+c
+d 651 1 1 0 0
+c
+d 167 9 2 0 0
+c
+d 1008 6 1 1 0
+c
+d 1009 1 0 0 0
+c
+d 695 3 2 0 0
+c
+d 951 3 1 0 0
+c
+d 953 3 0 0 0
+c
+d 204 5 1 0 0
+c
+d 224 1 0 0 0
+c
+d 225 3 1 0 0
+c
+d 1248 2 0 0 0
+c
+d 384 4 0 0 0
+c
+d 385 3 0 0 0
+c
+d 1133 1 0 0 0
+c
+d 437 6 1 0 0
+c
+d 558 3 2 0 0
+c
+d 157 1 1 0 0
+c
+d 305 8 2 0 0
+c
+d 55 4 0 0 0
+c
+d 691 2 0 0 0
+c
+d 706 1 1 0 0
+c
+d 707 3 0 0 0
+c
+d 21 5 0 1 0
+c
+d 26 1 0 0 0
+c
+d 1027 2 1 1 0
+c
+d 1028 2 1 0 0
+c
+d 606 1 1 0 0
+c
+d 608 8 1 0 0
+c
+d 1041 3 0 0 0
+c
+d 737 10 1 0 0
+c
+d 753 3 1 0 0
+c
+d 618 3 1 0 0
+c
+d 638 5 0 0 0
+c
+d 639 3 1 0 0
+c
+d 252 2 0 0 0
+c
+d 253 1 0 0 0
+c
+d 258 2 0 0 0
+c
+d 259 2 0 1 0
+c
+d 260 1 1 0 0
+c
+d 570 8 1 2 0
+c
+d 1057 1 0 0 0
+c
+d 608 5 0 0 0
+c
+d 610 1 1 0 0
+c
+d 611 2 0 0 0
+c
+d 612 1 0 0 0
+c
+d 199 7 3 0 0
+c
+d 437 3 1 0 0
+c
+d 454 1 0 0 0
+c
+d 502 3 1 0 0
+c
+d 507 1 0 0 0
+c
+d 300 1 0 1 0
+c
+d 315 5 2 0 0
+c
+d 316 3 0 0 0
+c
+d 277 1 0 1 0
+c
+d 1158 8 3 0 0
+c
+d 1163 1 0 0 0
+c
+d 16 10 4 0 0
+c
+d 93 1 0 0 0
+c
+d 686 1 0 0 0
+c
+d 805 1 0 0 0
+c
+d 915 6 1 0 0
+c
+d 919 6 1 0 0
+c
+d 923 1 0 0 0
+c
+d 823 1 0 1 0
+c
+d 826 1 0 0 0
+c
+d 827 8 2 0 0
+c
+d 828 2 0 0 0
+c
+d 1112 2 1 0 0
+c
+d 1114 4 0 1 0
+c
+d 1115 2 0 0 0
+c
+d 1117 2 0 0 0
+c
+d 565 6 2 0 0
+c
+d 384 4 2 0 0
+c
+d 392 1 0 0 0
+c
+d 393 1 0 0 0
+c
+d 394 2 1 0 0
+c
+d 1109 1 0 0 0
+c
+d 21 11 3 0 0
+c
+d 22 2 0 0 0
+c
+d 738 6 1 0 0
+c
+d 745 3 2 0 0
+c
+d 278 5 1 0 0
+c
+d 1170 3 2 0 0
+c
+d 1083 3 1 1 0
+c
+d 1084 6 0 0 0
+c
+d 358 1 0 1 0
+c
+d 359 10 2 0 0
+c
+d 315 1 1 0 0
+c
+d 318 6 0 0 0
+c
+d 324 1 1 0 0
+c
+d 428 8 2 0 0
+c
+d 430 3 0 0 0
+c
+d 341 2 0 0 0
+c
+d 348 1 1 0 0
+c
+d 437 3 0 0 0
+c
+d 470 2 0 0 0
+c
+d 477 2 0 0 0
+c
+d 597 5 1 0 0
+c
+d 598 1 1 0 0
+c
+d 601 2 0 0 0
+c
+d 575 1 0 1 0
+c
+d 578 8 1 0 0
+c
+d 580 1 0 0 0
+c
+d 55 10 2 0 0
+c
+d 811 7 2 1 0
+c
+d 812 2 0 0 0
+c
+d 704 3 2 0 0
+c
+d 705 3 1 0 0
+c
+d 710 2 0 0 0
+c
+d 711 1 0 0 0
+c
+d 287 3 0 0 0
+c
+d 288 4 2 0 0
+c
+d 213 2 0 0 0
+c
+d 242 4 0 0 0
+c
+d 262 3 1 0 0
+c
+d 266 1 0 0 0
+c
+d 268 1 1 0 0
+c
+d 536 1 1 0 0
+c
+d 540 1 0 0 0
+c
+d 541 3 0 0 0
+c
+d 542 1 1 0 0
+c
+d 799 5 0 0 0
+c
+d 806 6 2 1 0
+c
+d 807 1 0 0 0
+c
+d 348 8 1 1 0
+c
+d 753 2 2 0 0
+c
+d 760 3 0 0 0
+c
+d 620 1 0 0 0
+c
+d 621 3 1 0 0
+c
+d 622 3 1 0 0
+c
+d 628 1 0 1 0
+c
+d 662 1 0 1 0
+c
+d 666 4 2 0 0
+c
+d 673 6 2 0 0
+c
+d 50 4 2 0 0
+c
+d 51 4 0 0 0
+c
+d 52 1 0 1 0
+c
+d 724 3 0 0 0
+c
+d 716 1 0 1 0
+c
+d 844 5 2 0 0
+c
+d 845 1 1 0 0
+c
+d 437 3 0 1 0
+c
+d 449 8 1 0 0
+c
+d 450 1 0 0 0
+c
+d 44 7 1 0 0
+c
+d 1045 12 3 0 0
+c
+d 392 4 0 0 0
+c
+d 393 4 0 0 0
+c
+d 157 7 2 0 0
+c
+d 720 4 1 1 0
+c
+d 726 1 1 0 0
+c
+d 727 9 2 0 0
+c
+d 157 5 1 0 0
+c
+d 158 1 0 0 0
+c
+d 159 1 0 0 0
+c
+d 305 1 0 1 0
+c
+d 278 3 0 0 0
+c
+d 1156 9 3 0 0
+c
+d 437 8 2 1 0
+c
+d 568 1 0 1 0
+c
+d 799 9 2 0 0
+c
+d 87 1 0 0 0
+c
+d 89 3 1 0 0
+c
+d 550 2 1 0 0
+c
+d 551 1 0 1 0
+c
+d 162 5 1 0 0
+c
+d 163 3 2 0 0
+c
+d 1251 1 0 0 0
+c
+d 301 6 2 1 0
+c
+d 1212 2 0 0 0
+c
+d 1218 1 1 0 0
+c
+d 101 2 1 0 0
+c
+d 111 3 0 0 0
+c
+d 112 5 1 0 0
+c
+d 753 3 0 0 0
+c
+d 858 2 0 0 0
+c
+d 872 1 1 0 0
+c
+d 341 4 1 0 0
+c
+d 348 7 1 0 0
+c
+d 204 1 1 0 0
+c
+d 217 8 1 1 0
+c
+d 225 1 0 0 0
+c
+d 12 3 0 0 0
+c
+d 1269 4 1 1 0
+c
+d 1271 2 0 0 0
+c
+d 305 2 1 0 0
+c
+d 306 8 1 0 0
+c
+d 54 1 0 0 0
+c
+d 66 5 2 0 0
+c
+d 69 2 0 0 0
+c
+d 529 1 0 0 0
+c
+d 550 4 0 0 0
+c
+d 554 3 0 1 0
+c
+d 556 1 1 0 0
+c
+d 1195 6 1 1 0
+c
+d 1196 1 1 0 0
+c
+d 287 10 0 0 0
+c
+d 288 4 2 0 0
+c
+d 146 9 2 1 0
+c
+d 468 3 2 0 0
+c
+d 469 1 0 1 0
+c
+d 478 5 0 0 0
+c
+d 481 1 0 0 0
+c
+d 159 4 1 0 0
+c
+d 160 1 0 0 0
+c
+d 185 5 2 0 0
+c
+d 186 2 0 0 0
+c
+d 457 5 0 1 0
+c
+d 461 3 1 0 0
+c
+d 557 1 0 0 0
+c
+d 565 8 1 0 0
+c
+d 578 6 0 1 0
+c
+d 580 2 0 0 0
+c
+d 956 3 2 0 0
+c
+d 753 5 1 0 0
+c
+d 762 1 0 1 0
+c
+d 763 1 1 0 0
+c
+d 529 2 0 0 0
+c
+d 532 2 0 0 0
+c
+d 537 3 2 0 0
+c
+d 550 1 0 0 0
+c
+d 856 4 0 1 0
+c
+d 872 1 0 0 0
+c
+d 873 2 1 0 0
+c
+d 874 3 0 0 0
+c
+d 91 3 1 0 0
+c
+d 92 4 1 0 0
+c
+d 1265 3 1 0 0
+c
+d 100 6 0 1 0
+c
+d 1002 2 0 0 0
+c
+d 1004 1 1 0 0
+c
+d 1006 2 1 0 0
+c
+d 301 7 2 0 0
+c
+d 262 9 2 0 0
+c
+d 278 1 0 1 0
+c
+d 93 4 1 0 0
+c
+d 114 2 0 0 0
+c
+d 127 1 0 0 0
+c
+d 119 2 0 1 0
+c
+d 120 3 1 0 0
+c
+d 594 4 0 0 0
+c
+d 650 5 2 0 0
+c
+d 651 6 1 0 0
+c
+d 218 5 2 0 0
+c
+d 1240 2 0 0 0
+c
+d 1243 5 1 0 0
+c
+d 1185 3 0 0 0
+c
+d 1202 7 0 0 0
+c
+d 75 1 0 0 0
+c
+d 86 2 0 0 0
+c
+d 87 1 0 0 0
+c
+d 457 1 1 0 0
+c
+d 466 10 1 0 0
+c
+d 799 5 0 0 0
+c
+d 810 1 0 0 0
+c
+d 811 3 0 0 0
+c
+d 205 1 1 0 0
+c
+d 1239 3 0 0 0
+c
+d 1240 2 0 0 0
+c
+d 1241 3 0 1 0
+c
+d 152 3 1 0 0
+c
+d 413 4 0 0 0
+c
+d 1254 3 1 0 0
+c
+d 875 1 1 0 0
+c
+d 876 4 0 1 0
+c
+d 878 1 0 0 0
+c
+d 120 6 3 0 0
+c
+d 123 1 0 0 0
+c
+d 120 6 1 0 0
+c
+d 121 1 0 0 0
+c
+d 126 1 0 0 0
+c
+d 127 1 0 0 0
+a
+b 60
+b 68
+b 67
+b 1
+b 458
+b 456
+b 1
+b 207
+b 204
+b 1
+b 213
+b 215
+b 62
+b 64
+b 66
+b 64
+b 1
+b 3
+b 5
+b 15
+b 17
+b 15
+b 1
+b 71
+b 69
+b 1
+b 4
+b 2
+b 1
+b 75
+b 77
+b 79
+b 4
+b 22
+b 4
+b 1
+b 543
+b 545
+b 540
+b 1
+b 13
+b 1
+b 859
+b 989
+b 859
+b 1
+b 984
+b 1
+b 209
+b 208
+b 1
+b 492
+b 23
+b 27
+b 45
+b 22
+b 1
+b 23
+b 1
+b 43
+b 40
+b 1
+b 29
+b 28
+b 1
+b 113
+b 115
+b 117
+b 115
+b 129
+b 131
+b 114
+b 1
+b 52
+b 49
+b 1
+b 96
+b 1
+b 156
+b 158
+b 160
+b 158
+b 1
+b 4
+b 6
+b 19
+b 18
+b 1
+b 57
+b 86
+b 98
+b 85
+b 1
+b 4
+b 71
+b 17
+b 33
+b 41
+b 14
+b 1
+b 38
+b 1
+b 345
+b 347
+b 349
+b 351
+b 342
+b 1
+b 42
+b 22
+b 24
+b 433
+b 435
+b 447
+b 446
+b 1
+b 60
+b 60
+b 1
+b 33
+b 244
+b 246
+b 264
+b 8
+b 6
+b 1
+b 20
+b 0
+b 2
+b 2
+b 1
+b 30
+b 32
+b 34
+b 30
+b 1
+b 149
+b 38
+b 385
+b 387
+b 389
+b 385
+b 1
+b 42
+b 52
+b 54
+b 41
+b 1
+b 19
+b 21
+b 23
+b 328
+b 34
+b 33
+b 1
+b 34
+b 35
+b 37
+b 32
+b 1
+b 11
+b 10
+b 1
+b 116
+b 115
+b 1
+b 199
+b 225
+b 224
+b 1
+b 38
+b 46
+b 48
+b 35
+b 1
+b 46
+b 1
+b 250
+b 247
+b 1
+b 77
+b 45
+b 47
+b 49
+b 51
+b 45
+b 1
+b 96
+b 95
+b 1
+b 46
+b 43
+b 1
+b 22
+b 21
+b 136
+b 138
+b 25
+b 13
+b 12
+b 1
+b 180
+b 186
+b 188
+b 179
+b 1
+b 351
+b 353
+b 351
+b 1
+b 16
+b 54
+b 83
+b 13
+b 1
+b 78
+b 1
+b 28
+b 27
+b 1
+b 51
+b 50
+b 1
+b 51
+b 61
+b 50
+b 1
+b 348
+b 358
+b 6
+b 8
+b 10
+b 12
+b 238
+b 240
+b 240
+b 1
+b 163
+b 162
+b 1
+b 187
+b 189
+b 191
+b 184
+b 1
+b 189
+b 1
+b 84
+b 86
+b 88
+b 90
+b 86
+b 1
+b 32
+b 15
+b 144
+b 146
+b 148
+b 141
+b 1
+b 24
+b 16
+b 3
+b 5
+b 7
+b 5
+b 1
+b 32
+b 46
+b 44
+b 1
+b 71
+b 89
+b 88
+b 1
+b 164
+b 184
+b 164
+b 1
+b 60
+b 58
+b 1
+b 36
+b 38
+b 38
+b 1
+b 259
+b 261
+b 263
+b 16
+b 18
+b 20
+b 22
+b 20
+b 1
+b 134
+b 144
+b 15
+b 14
+b 1
+b 117
+b 137
+b 18
+b 28
+b 27
+b 1
+b 4
+b 263
+b 260
+b 1
+b 89
+b 89
+b 1
+b 79
+b 81
+b 83
+b 79
+b 1
+b 44
+b 46
+b 56
+b 44
+b 1
+b 208
+b 224
+b 56
+b 55
+b 1
+b 10
+b 7
+b 1
+b 298
+b 312
+b 324
+b 297
+b 1
+b 308
+b 1
+b 19
+b 16
+b 1
+b 59
+b 58
+b 1
+b 152
+b 154
+b 156
+b 154
+b 1
+b 7
+b 95
+b 60
+b 3
+b 23
+b 130
+b 132
+b 134
+b 132
+b 1
+b 170
+b 21
+b 23
+b 21
+b 1
+b 87
+b 84
+b 1
+b 127
+b 126
+b 1
+b 122
+b 144
+b 122
+b 1
+b 139
+b 1
+b 30
+b 20
+b 198
+b 197
+b 1
+b 9
+b 19
+b 37
+b 45
+b 132
+b 134
+b 136
+b 134
+b 1
+b 194
+b 218
+b 330
+b 30
+b 7
+b 17
+b 4
+b 1
+b 14
+b 1
+b 366
+b 368
+b 370
+b 48
+b 60
+b 26
+b 21
+b 7
+b 15
+b 17
+b 169
+b 193
+b 168
+b 1
+b 4
+b 6
+b 14
+b 13
+b 1
+b 249
+b 283
+b 199
+b 281
+b 198
+b 1
+b 276
+b 1
+b 8
+b 7
+b 1
+b 3
+b 3
+b 1
+b 163
+b 173
+b 14
+b 11
+b 1
+b 10
+b 9
+b 1
+b 49
+b 49
+b 1
+b 9
+b 6
+b 1
+b 187
+b 189
+b 215
+b 187
+b 1
+b 210
+b 12
+b 11
+b 1
+b 164
+b 176
+b 32
+b 112
+b 29
+b 7
+b 3
+b 5
+b 7
+b 3
+b 1
+b 225
+b 251
+b 253
+b 224
+b 1
+b 8
+b 4
+b 122
+b 0
+b 2
+b 1
+b 0
+b 1
+b 159
+b 161
+b 163
+b 165
+b 159
+b 1
+b 14
+b 13
+b 1
+b 79
+b 93
+b 119
+b 36
+b 42
+b 35
+b 1
+b 189
+b 191
+b 193
+b 195
+b 197
+b 101
+b 103
+b 105
+b 101
+b 1
+b 23
+b 25
+b 27
+b 23
+b 1
+b 22
+b 42
+b 39
+b 1
+b 0
+b 45
+b 55
+b 57
+b 42
+b 56
+b 39
+b 1
+b 53
+b 1
+b 300
+b 302
+b 300
+b 1
+b 44
+b 46
+b 48
+b 167
+b 169
+b 171
+b 6
+b 36
+b 14
+b 6
+b 4
+b 6
+b 8
+b 4
+b 1
+b 12
+b 14
+b 16
+b 32
+b 31
+b 1
+b 7
+b 56
+b 91
+b 1
+b 1268
+b 1270
+b 1270
+b 1
+b 48
+b 47
+b 1
+b 16
+b 18
+b 16
+b 1
+b 81
+b 105
+b 107
+b 70
+b 0
+b 362
+b 361
+b 1
+b 8
+b 46
+b 56
+b 5
+b 1
+b 18
+b 40
+b 32
+b 22
+b 24
+b 48
+b 50
+b 48
+b 1
+b 69
+b 22
+b 20
+b 1
+b 18
+b 18
+b 1
+b 24
+b 21
+b 1
+b 50
+b 122
+b 60
+b 59
+b 1
+b 0
+b 123
+b 137
+b 123
+b 1
+b 133
+b 1
+b 24
+b 26
+b 28
+b 182
+b 184
+b 192
+b 234
+b 94
+b 119
+b 135
+b 132
+b 1
+b 1266
+b 46
+b 27
+b 11
+b 1
+b 9
+b 0
+b 1
+b 369
+b 395
+b 74
+b 71
+b 1
+b 0
+b 6
+b 8
+b 10
+b 15
+b 73
+b 72
+b 1
+b 1
+b 77
+b 1
+b 11
+b 22
+b 25
+b 355
+b 419
+b 475
+b 7
+b 15
+b 6
+b 1
+b 72
+b 98
+b 173
+b 71
+b 1
+b 93
+b 1
+b 20
+b 357
+b 356
+b 1
+b 33
+b 75
+b 77
+b 101
+b 100
+b 1
+b 46
+b 56
+b 45
+b 1
+b 12
+b 11
+b 1
+b 46
+b 60
+b 43
+b 1
+b 35
+b 37
+b 142
+b 150
+b 21
+b 37
+b 39
+b 20
+b 1
+b 295
+b 294
+b 1
+b 53
+b 55
+b 19
+b 75
+b 72
+b 1
+b 3
+b 5
+b 7
+b 3
+b 1
+b 92
+b 227
+b 10
+b 12
+b 7
+b 1
+b 35
+b 33
+b 1
+b 163
+b 165
+b 167
+b 169
+b 8
+b 22
+b 21
+b 1
+b 10
+b 7
+b 1
+b 56
+b 53
+b 1
+b 28
+b 27
+b 1
+b 5
+b 35
+b 34
+b 1
+b 92
+b 117
+b 100
+b 102
+b 100
+b 1
+b 71
+b 148
+b 147
+b 1
+b 21
+b 23
+b 505
+b 525
+b 57
+b 56
+b 1
+b 48
+b 3
+b 5
+b 3
+b 1
+b 175
+b 562
+b 564
+b 3
+b 15
+b 10
+b 18
+b 321
+b 331
+b 156
+b 4
+b 77
+b 79
+b 7
+b 51
+b 50
+b 1
+b 90
+b 92
+b 94
+b 87
+b 1
+b 11
+b 9
+b 1
+b 7
+b 7
+b 1
+b 89
+b 97
+b 321
+b 331
+b 333
+b 319
+b 1
+b 331
+b 1
+b 323
+b 325
+b 2
+b 342
+b 360
+b 374
+b 341
+b 1
+b 411
+b 453
+b 452
+b 1
+b 283
+b 255
+b 49
+b 48
+b 50
+b 129
+b 135
+b 137
+b 137
+b 1
+b 83
+b 157
+b 159
+b 161
+b 53
+b 53
+b 1
+b 167
+b 64
+b 2
+b 4
+b 332
+b 334
+b 47
+b 63
+b 46
+b 1
+b 24
+b 23
+b 1
+b 2
+b 18
+b 170
+b 189
+b 169
+b 1
+b 69
+b 97
+b 99
+b 118
+b 228
+b 230
+b 115
+b 1
+b 312
+b 9
+b 8
+b 1
+b 57
+b 99
+b 304
+b 328
+b 304
+b 1
+b 323
+b 1
+b 53
+b 55
+b 57
+b 59
+b 31
+b 127
+b 127
+b 1
+b 28
+b 69
+b 94
+b 68
+b 1
+b 90
+b 1
+b 55
+b 65
+b 103
+b 64
+b 1
+b 17
+b 161
+b 14
+b 1
+b 158
+b 1
+b 179
+b 13
+b 961
+b 963
+b 965
+b 963
+b 1
+b 5
+b 7
+b 9
+b 67
+b 73
+b 75
+b 12
+b 25
+b 11
+b 1
+b 13
+b 147
+b 175
+b 99
+b 157
+b 98
+b 1
+b 13
+b 3
+b 139
+b 185
+b 187
+b 8
+b 18
+b 26
+b 28
+b 42
+b 28
+b 1
+b 38
+b 1
+b 32
+b 34
+b 36
+b 38
+b 29
+b 1
+b 123
+b 125
+b 127
+b 80
+b 79
+b 1
+b 137
+b 137
+b 1
+b 122
+b 124
+b 126
+b 122
+b 1
+b 37
+b 81
+b 83
+b 81
+b 1
+b 25
+b 22
+b 1
+b 0
+b 2
+b 2
+b 1
+b 469
+b 509
+b 20
+b 22
+b 24
+b 12
+b 0
+b 2
+b 394
+b 177
+b 176
+b 1
+b 56
+b 74
+b 53
+b 1
+b 170
+b 172
+b 174
+b 176
+b 170
+b 1
+b 44
+b 46
+b 56
+b 41
+b 1
+b 53
+b 1
+b 119
+b 116
+b 1
+b 15
+b 57
+b 56
+b 1
+b 205
+b 204
+b 1
+b 21
+b 29
+b 172
+b 170
+b 1
+b 7
+b 15
+b 4
+b 1
+b 52
+b 54
+b 217
+b 237
+b 239
+b 237
+b 1
+b 174
+b 2
+b 173
+b 175
+b 177
+b 365
+b 399
+b 417
+b 414
+b 1
+b 11
+b 13
+b 15
+b 17
+b 11
+b 1
+b 33
+b 109
+b 32
+b 1
+b 92
+b 94
+b 96
+b 98
+b 96
+b 1
+b 37
+b 49
+b 48
+b 1
+b 50
+b 52
+b 113
+b 101
+b 41
+b 38
+b 40
+b 50
+b 51
+b 53
+b 63
+b 51
+b 1
+b 244
+b 106
+b 134
+b 105
+b 1
+b 229
+b 231
+b 233
+b 5
+b 7
+b 9
+b 5
+b 1
+b 28
+b 38
+b 40
+b 26
+b 1
+b 38
+b 1
+b 61
+b 63
+b 65
+b 67
+b 85
+b 20
+b 111
+b 113
+b 4
+b 81
+b 83
+b 85
+b 28
+b 5
+b 2
+b 1
+b 398
+b 400
+b 402
+b 404
+b 400
+b 1
+b 157
+b 159
+b 161
+b 111
+b 39
+b 140
+b 154
+b 16
+b 18
+b 16
+b 1
+b 6
+b 0
+b 2
+b 135
+b 137
+b 41
+b 1253
+b 1255
+b 1257
+b 1259
+b 1255
+b 1
+b 3
+b 0
+b 1
+b 47
+b 69
+b 0
+b 8
+b 11
+b 13
+b 15
+b 39
+b 47
+b 49
+b 53
+b 51
+b 1
+b 57
+b 174
+b 173
+b 1
+b 9
+b 11
+b 13
+b 95
+b 94
+b 1
+b 14
+b 9
+b 16
+b 38
+b 40
+b 15
+b 1
+b 2
+b 62
+b 1
+b 89
+b 99
+b 98
+b 1
+b 87
+b 89
+b 91
+b 28
+b 58
+b 224
+b 83
+b 85
+b 4
+b 21
+b 108
+b 110
+b 112
+b 110
+b 1
+b 394
+b 409
+b 271
+b 273
+b 275
+b 277
+b 273
+b 1
+b 212
+b 222
+b 274
+b 318
+b 320
+b 273
+b 1
+b 31
+b 41
+b 3
+b 2
+b 1
+b 84
+b 86
+b 201
+b 223
+b 222
+b 1
+b 146
+b 145
+b 1
+b 4
+b 14
+b 2
+b 1
+b 7
+b 35
+b 6
+b 1
+b 1
+b 94
+b 96
+b 0
+b 6
+b 8
+b 16
+b 3
+b 1
+b 13
+b 1
+b 45
+b 114
+b 44
+b 1
+b 111
+b 1
+b 10
+b 5
+b 3
+b 1
+b 344
+b 343
+b 1
+b 23
+b 166
+b 165
+b 1
+b 18
+b 96
+b 130
+b 138
+b 137
+b 1
+b 15
+b 32
+b 34
+b 36
+b 58
+b 74
+b 73
+b 1
+b 46
+b 56
+b 55
+b 1
+b 42
+b 0
+b 8
+b 122
+b 172
+b 120
+b 1
+b 76
+b 94
+b 104
+b 75
+b 1
+b 89
+b 1
+b 150
+b 71
+b 73
+b 71
+b 1
+b 2
+b 4
+b 6
+b 4
+b 1
+b 196
+b 194
+b 1
+b 9
+b 6
+b 1
+b 57
+b 56
+b 1
+b 75
+b 6
+b 126
+b 128
+b 130
+b 132
+b 126
+b 1
+b 49
+b 1
+b 5
+b 126
+b 134
+b 132
+b 1
+b 14
+b 16
+b 18
+b 20
+b 43
+b 45
+b 47
+b 19
+b 21
+b 23
+b 81
+b 80
+b 1
+b 17
+b 28
+b 109
+b 73
+b 73
+b 1
+b 22
+b 24
+b 26
+b 24
+b 1
+b 50
+b 60
+b 49
+b 1
+b 56
+b 1
+b 5
+b 164
+b 166
+b 168
+b 168
+b 1
+b 40
+b 42
+b 22
+b 132
+b 194
+b 227
+b 239
+b 226
+b 1
+b 43
+b 45
+b 55
+b 43
+b 1
+b 85
+b 84
+b 1
+b 25
+b 22
+b 1
+b 253
+b 14
+b 13
+b 1
+b 5
+b 4
+b 1
+b 136
+b 51
+b 48
+b 1
+b 6
+b 23
+b 35
+b 22
+b 1
+b 30
+b 1
+b 18
+b 4
+b 13
+b 45
+b 47
+b 45
+b 1
+b 361
+b 421
+b 423
+b 421
+b 1
+b 39
+b 47
+b 45
+b 1
+b 11
+b 25
+b 189
+b 191
+b 193
+b 101
+b 473
+b 470
+b 1
+b 111
+b 113
+b 115
+b 179
+b 203
+b 53
+b 55
+b 57
+b 59
+b 55
+b 1
+b 6
+b 8
+b 7
+b 121
+b 118
+b 1
+b 101
+b 125
+b 127
+b 129
+b 48
+b 65
+b 45
+b 1
+b 63
+b 1
+b 393
+b 395
+b 423
+b 23
+b 22
+b 1
+b 3
+b 390
+b 400
+b 402
+b 388
+b 1
+b 400
+b 1
+b 320
+b 356
+b 358
+b 319
+b 1
+b 351
+b 1
+b 186
+b 204
+b 185
+b 1
+b 89
+b 100
+b 99
+b 1
+b 7
+b 99
+b 0
+b 11
+b 66
+b 68
+b 66
+b 1
+b 27
+b 1
+b 11
+b 0
+b 1
+b 7
+b 1
+b 70
+b 72
+b 21
+b 7
+b 17
+b 19
+b 17
+b 1
+b 172
+b 71
+b 70
+b 1
+b 28
+b 34
+b 32
+b 1
+b 12
+b 77
+b 76
+b 1
+b 322
+b 324
+b 324
+b 1
+b 92
+b 243
+b 242
+b 1
+b 75
+b 77
+b 101
+b 100
+b 1
+b 48
+b 45
+b 1
+b 50
+b 21
+b 332
+b 374
+b 331
+b 1
+b 50
+b 56
+b 54
+b 1
+b 57
+b 55
+b 1
+b 6
+b 5
+b 4
+b 1
+b 6
+b 8
+b 10
+b 435
+b 437
+b 461
+b 235
+b 237
+b 121
+b 123
+b 125
+b 123
+b 1
+b 71
+b 123
+b 125
+b 70
+b 1
+b 122
+b 124
+b 126
+b 5
+b 4
+b 1
+b 17
+b 19
+b 21
+b 23
+b 551
+b 553
+b 118
+b 134
+b 117
+b 1
+b 130
+b 1
+b 101
+b 119
+b 9
+b 142
+b 144
+b 146
+b 144
+b 1
+b 27
+b 43
+b 30
+b 32
+b 34
+b 213
+b 233
+b 232
+b 1
+b 198
+b 197
+b 1
+b 24
+b 21
+b 1
+b 101
+b 103
+b 105
+b 15
+b 17
+b 15
+b 1
+b 344
+b 346
+b 348
+b 350
+b 182
+b 57
+b 0
+b 86
+b 19
+b 17
+b 1
+b 24
+b 26
+b 21
+b 1
+b 68
+b 70
+b 72
+b 257
+b 259
+b 55
+b 54
+b 1
+b 361
+b 361
+b 1
+b 188
+b 185
+b 1
+b 42
+b 0
+b 10
+b 9
+b 1
+b 6
+b 8
+b 10
+b 12
+b 6
+b 1
+b 98
+b 100
+b 102
+b 100
+b 1
+b 5
+b 31
+b 239
+b 249
+b 236
+b 1
+b 185
+b 95
+b 62
+b 76
+b 302
+b 3
+b 0
+b 1
+b 129
+b 9
+b 8
+b 1
+b 13
+b 1
+b 16
+b 42
+b 58
+b 40
+b 1
+b 229
+b 231
+b 19
+b 29
+b 158
+b 188
+b 12
+b 76
+b 106
+b 108
+b 118
+b 76
+b 78
+b 80
+b 82
+b 387
+b 49
+b 105
+b 5
+b 2
+b 1
+b 0
+b 92
+b 94
+b 104
+b 89
+b 1
+b 101
+b 1
+b 96
+b 98
+b 104
+b 235
+b 237
+b 239
+b 237
+b 1
+b 24
+b 26
+b 28
+b 30
+b 326
+b 328
+b 358
+b 326
+b 1
+b 5
+b 25
+b 4
+b 1
+b 138
+b 140
+b 162
+b 161
+b 1
+b 3
+b 5
+b 3
+b 1
+b 7
+b 17
+b 49
+b 5
+b 20
+b 22
+b 24
+b 13
+b 27
+b 12
+b 1
+b 51
+b 53
+b 55
+b 51
+b 1
+b 257
+b 259
+b 261
+b 17
+b 19
+b 19
+b 1
+b 405
+b 417
+b 402
+b 1
+b 110
+b 9
+b 18
+b 104
+b 106
+b 108
+b 106
+b 1
+b 156
+b 4
+b 3
+b 1
+b 186
+b 188
+b 190
+b 186
+b 1
+b 5
+b 13
+b 11
+b 1
+b 143
+b 145
+b 147
+b 135
+b 134
+b 1
+b 49
+b 11
+b 25
+b 27
+b 29
+b 31
+b 125
+b 155
+b 124
+b 1
+b 13
+b 214
+b 277
+b 213
+b 2
+b 275
+b 1
+b 66
+b 18
+b 229
+b 228
+b 1
+b 18
+b 77
+b 137
+b 76
+b 1
+b 13
+b 23
+b 75
+b 77
+b 79
+b 81
+b 83
+b 87
+b 22
+b 21
+b 1
+b 3
+b 2
+b 1
+b 36
+b 38
+b 52
+b 51
+b 1
+b 133
+b 10
+b 23
+b 15
+b 14
+b 1
+b 3
+b 128
+b 125
+b 1
+b 90
+b 92
+b 92
+b 1
+b 246
+b 248
+b 243
+b 1
+b 118
+b 55
+b 128
+b 138
+b 4
+b 14
+b 172
+b 560
+b 48
+b 50
+b 60
+b 48
+b 1
+b 138
+b 140
+b 84
+b 115
+b 83
+b 1
+b 211
+b 315
+b 85
+b 84
+b 1
+b 13
+b 23
+b 22
+b 1
+b 1
+b 11
+b 9
+b 1
+b 87
+b 11
+b 21
+b 16
+b 48
+b 116
+b 132
+b 131
+b 1
+b 93
+b 95
+b 97
+b 93
+b 1
+b 91
+b 90
+b 1
+b 1
+b 11
+b 96
+b 114
+b 113
+b 1
+b 4
+b 166
+b 195
+b 165
+b 1
+b 0
+b 13
+b 13
+b 23
+b 96
+b 21
+b 0
+b 104
+b 104
+b 1
+b 44
+b 1
+b 0
+b 1
+b 48
+b 50
+b 52
+b 54
+b 52
+b 1
+b 4
+b 30
+b 140
+b 217
+b 235
+b 216
+b 1
+b 223
+b 238
+b 141
+b 79
+b 15
+b 17
+b 9
+b 6
+b 1
+b 19
+b 18
+b 1
+b 221
+b 223
+b 225
+b 221
+b 1
+b 936
+b 956
+b 958
+b 960
+b 958
+b 1
+b 6
+b 8
+b 10
+b 10
+b 1
+b 175
+b 36
+b 119
+b 127
+b 119
+b 0
+b 328
+b 327
+b 1
+b 63
+b 73
+b 480
+b 482
+b 482
+b 1
+b 9
+b 8
+b 1
+b 349
+b 351
+b 353
+b 355
+b 747
+b 59
+b 58
+b 1
+b 136
+b 192
+b 3
+b 360
+b 362
+b 360
+b 1
+b 213
+b 181
+b 216
+b 252
+b 254
+b 256
+b 258
+b 285
+b 287
+b 289
+b 289
+b 1
+b 543
+b 542
+b 1
+b 136
+b 138
+b 26
+b 28
+b 30
+b 26
+b 1
+b 255
+b 257
+b 337
+b 339
+b 341
+b 343
+b 341
+b 1
+b 155
+b 167
+b 194
+b 154
+b 1
+b 31
+b 45
+b 14
+b 42
+b 3
+b 3
+b 9
+b 8
+b 1
+b 19
+b 161
+b 171
+b 160
+b 1
+b 17
+b 19
+b 21
+b 19
+b 1
+b 67
+b 13
+b 23
+b 12
+b 1
+b 74
+b 6
+b 275
+b 315
+b 138
+b 140
+b 142
+b 144
+b 172
+b 184
+b 74
+b 76
+b 78
+b 76
+b 1
+b 30
+b 32
+b 34
+b 36
+b 338
+b 340
+b 342
+b 340
+b 1
+b 72
+b 0
+b 2
+b 15
+b 25
+b 27
+b 64
+b 6
+b 14
+b 3
+b 1
+b 50
+b 52
+b 54
+b 46
+b 48
+b 7
+b 269
+b 271
+b 7
+b 5
+b 17
+b 4
+b 1
+b 38
+b 58
+b 12
+b 11
+b 1
+b 201
+b 8
+b 1
+b 0
+b 1
+b 40
+b 42
+b 44
+b 46
+b 70
+b 8
+b 0
+b 6
+b 6
+b 3
+b 139
+b 149
+b 45
+b 47
+b 49
+b 69
+b 71
+b 114
+b 116
+b 114
+b 1
+b 91
+b 8
+b 63
+b 140
+b 208
+b 210
+b 248
+b 247
+b 1
+b 24
+b 23
+b 1
+b 45
+b 39
+b 67
+b 66
+b 1
+b 5
+b 2
+b 1
+b 15
+b 14
+b 0
+b 15
+b 25
+b 54
+b 8
+b 40
+b 42
+b 4
+b 5
+b 9
+b 85
+b 163
+b 162
+b 1
+b 136
+b 158
+b 135
+b 1
+b 13
+b 15
+b 48
+b 46
+b 1
+b 12
+b 0
+b 18
+b 17
+b 1
+b 138
+b 140
+b 138
+b 1
+b 14
+b 24
+b 18
+b 17
+b 1
+b 46
+b 48
+b 41
+b 40
+b 1
+b 1271
+b 19
+b 103
+b 20
+b 19
+b 1
+b 40
+b 60
+b 11
+b 16
+b 26
+b 28
+b 10
+b 16
+b 18
+b 72
+b 101
+b 109
+b 23
+b 33
+b 35
+b 21
+b 1
+b 33
+b 1
+b 20
+b 22
+b 24
+b 24
+b 1
+b 339
+b 341
+b 351
+b 394
+b 393
+b 1
+b 5
+b 37
+b 21
+b 20
+b 1
+b 7
+b 21
+b 29
+b 26
+b 50
+b 1
+b 0
+b 1
+b 462
+b 490
+b 512
+b 489
+b 1
+b 59
+b 61
+b 63
+b 65
+b 63
+b 1
+b 24
+b 26
+b 28
+b 30
+b 14
+b 13
+b 1
+b 24
+b 26
+b 161
+b 163
+b 165
+b 165
+b 1
+b 20
+b 54
+b 207
+b 300
+b 206
+b 1
+b 69
+b 87
+b 101
+b 66
+b 1
+b 98
+b 1
+b 198
+b 195
+b 1
+b 328
+b 102
+b 104
+b 110
+b 99
+b 1
+b 108
+b 1
+b 79
+b 78
+b 1
+b 1
+b 23
+b 27
+b 29
+b 31
+b 33
+b 35
+b 29
+b 1
+b 325
+b 327
+b 329
+b 322
+b 1
+b 327
+b 1
+b 8
+b 10
+b 12
+b 425
+b 465
+b 471
+b 464
+b 1
+b 10
+b 23
+b 7
+b 1
+b 0
+b 2
+b 2
+b 1
+b 32
+b 13
+b 40
+b 39
+b 1
+b 11
+b 1
+b 103
+b 113
+b 112
+b 1
+b 7
+b 21
+b 333
+b 357
+b 331
+b 1
+b 355
+b 1
+b 15
+b 37
+b 45
+b 65
+b 64
+b 1
+b 25
+b 3
+b 5
+b 3
+b 1
+b 90
+b 92
+b 94
+b 90
+b 1
+b 194
+b 202
+b 222
+b 193
+b 1
+b 198
+b 1
+b 56
+b 70
+b 49
+b 51
+b 49
+b 1
+b 15
+b 156
+b 158
+b 160
+b 88
+b 5
+b 399
+b 399
+b 1
+b 185
+b 185
+b 1
+b 22
+b 7
+b 336
+b 338
+b 356
+b 338
+b 1
+b 352
+b 1
+b 44
+b 44
+b 1
+b 148
+b 147
+b 1
+b 85
+b 87
+b 89
+b 91
+b 82
+b 1
+b 47
+b 49
+b 51
+b 44
+b 1
+b 97
+b 61
+b 63
+b 61
+b 1
+b 111
+b 9
+b 13
+b 107
+b 52
+b 54
+b 93
+b 95
+b 97
+b 42
+b 52
+b 18
+b 65
+b 45
+b 47
+b 49
+b 60
+b 112
+b 111
+b 1
+b 71
+b 106
+b 82
+b 111
+b 81
+b 1
+b 16
+b 18
+b 20
+b 18
+b 1
+b 202
+b 22
+b 17
+b 19
+b 21
+b 506
+b 538
+b 549
+b 3
+b 5
+b 7
+b 0
+b 1
+b 177
+b 193
+b 192
+b 1
+b 7
+b 5
+b 1
+b 11
+b 11
+b 1
+b 240
+b 252
+b 239
+b 1
+b 248
+b 1
+b 41
+b 81
+b 78
+b 1
+b 61
+b 52
+b 54
+b 54
+b 1
+b 12
+b 10
+b 1
+b 62
+b 64
+b 66
+b 62
+b 1
+b 74
+b 82
+b 73
+b 1
+b 78
+b 1
+b 225
+b 433
+b 432
+b 1
+b 296
+b 298
+b 87
+b 89
+b 128
+b 4
+b 6
+b 40
+b 50
+b 860
+b 859
+b 1
+b 305
+b 307
+b 120
+b 119
+b 1
+b 2
+b 47
+b 49
+b 63
+b 44
+b 46
+b 48
+b 7
+b 20
+b 42
+b 44
+b 53
+b 7
+b 6
+b 1
+b 386
+b 410
+b 383
+b 1
+b 407
+b 1
+b 190
+b 322
+b 321
+b 1
+b 1
+b 160
+b 196
+b 294
+b 293
+b 1
+b 54
+b 81
+b 54
+b 1
+b 77
+b 1
+b 20
+b 102
+b 101
+b 1
+b 218
+b 217
+b 1
+b 151
+b 172
+b 199
+b 8
+b 0
+b 2
+b 230
+b 230
+b 1
+b 100
+b 52
+b 60
+b 24
+b 3
+b 2
+b 1
+b 270
+b 272
+b 270
+b 1
+b 16
+b 4
+b 14
+b 2
+b 1
+b 12
+b 1
+b 55
+b 101
+b 111
+b 110
+b 1
+b 3
+b 9
+b 7
+b 1
+b 190
+b 2
+b 4
+b 179
+b 181
+b 183
+b 227
+b 181
+b 1
+b 42
+b 52
+b 54
+b 52
+b 1
+b 124
+b 3
+b 13
+b 15
+b 17
+b 17
+b 1
+b 64
+b 20
+b 22
+b 89
+b 116
+b 40
+b 52
+b 1
+b 26
+b 28
+b 3
+b 462
+b 19
+b 115
+b 93
+b 95
+b 97
+b 93
+b 1
+b 10
+b 76
+b 12
+b 14
+b 12
+b 1
+b 220
+b 219
+b 1
+b 193
+b 221
+b 223
+b 225
+b 138
+b 9
+b 163
+b 165
+b 167
+b 165
+b 1
+b 31
+b 167
+b 28
+b 30
+b 32
+b 32
+b 1
+b 45
+b 4
+b 6
+b 8
+b 6
+b 1
+b 31
+b 31
+b 11
+b 89
+b 111
+b 121
+b 120
+b 1
+b 76
+b 245
+b 100
+b 41
+b 2
+b 16
+b 55
+b 75
+b 77
+b 4
+b 4
+b 189
+b 191
+b 1
+b 13
+b 93
+b 91
+b 1
+b 71
+b 73
+b 75
+b 39
+b 51
+b 38
+b 1
+b 72
+b 94
+b 286
+b 13
+b 207
+b 209
+b 211
+b 213
+b 209
+b 1
+b 28
+b 116
+b 27
+b 1
+b 111
+b 1
+b 79
+b 89
+b 5
+b 25
+b 24
+b 1
+b 10
+b 12
+b 128
+b 130
+b 1
+b 0
+b 1
+b 62
+b 5
+b 338
+b 340
+b 342
+b 340
+b 1
+b 139
+b 29
+b 39
+b 464
+b 476
+b 475
+b 1
+b 34
+b 36
+b 38
+b 36
+b 1
+b 11
+b 13
+b 15
+b 13
+b 1
+b 181
+b 189
+b 194
+b 196
+b 198
+b 392
+b 225
+b 6
+b 8
+b 10
+b 10
+b 1
+b 181
+b 199
+b 277
+b 180
+b 1
+b 18
+b 20
+b 22
+b 32
+b 18
+b 1
+b 22
+b 22
+b 1
+b 25
+b 31
+b 28
+b 1
+b 10
+b 1
+b 15
+b 14
+b 1
+b 155
+b 157
+b 159
+b 161
+b 17
+b 75
+b 15
+b 1
+b 34
+b 53
+b 4
+b 324
+b 310
+b 318
+b 320
+b 309
+b 1
+b 54
+b 56
+b 58
+b 165
+b 177
+b 179
+b 164
+b 1
+b 97
+b 94
+b 1
+b 0
+b 2
+b 0
+b 1
+b 141
+b 143
+b 145
+b 33
+b 35
+b 37
+b 33
+b 1
+b 214
+b 213
+b 1
+b 145
+b 204
+b 206
+b 208
+b 103
+b 73
+b 199
+b 211
+b 210
+b 1
+b 41
+b 39
+b 1
+b 115
+b 117
+b 119
+b 110
+b 41
+b 216
+b 218
+b 218
+b 1
+b 23
+b 25
+b 27
+b 8
+b 31
+b 30
+b 1
+b 0
+b 200
+b 210
+b 199
+b 1
+b 223
+b 225
+b 227
+b 20
+b 19
+b 1
+b 249
+b 265
+b 14
+b 22
+b 20
+b 1
+b 41
+b 51
+b 40
+b 1
+b 259
+b 278
+b 21
+b 121
+b 152
+b 212
+b 152
+b 1
+b 208
+b 1
+b 58
+b 60
+b 62
+b 64
+b 58
+b 1
+b 18
+b 2
+b 30
+b 32
+b 34
+b 64
+b 66
+b 64
+b 1
+b 104
+b 106
+b 108
+b 108
+b 1
+b 22
+b 19
+b 1
+b 15
+b 12
+b 1
+b 367
+b 401
+b 400
+b 1
+b 58
+b 55
+b 1
+b 65
+b 317
+b 319
+b 349
+b 20
+b 22
+b 38
+b 194
+b 71
+b 81
+b 80
+b 1
+b 200
+b 66
+b 99
+b 22
+b 353
+b 19
+b 16
+b 1
+b 44
+b 46
+b 48
+b 41
+b 1
+b 152
+b 61
+b 27
+b 39
+b 49
+b 69
+b 77
+b 68
+b 1
+b 346
+b 154
+b 153
+b 1
+b 1
+b 110
+b 118
+b 116
+b 1
+b 192
+b 200
+b 210
+b 209
+b 1
+b 152
+b 164
+b 166
+b 407
+b 5
+b 76
+b 78
+b 80
+b 80
+b 1
+b 451
+b 453
+b 455
+b 457
+b 137
+b 136
+b 1
+b 5
+b 213
+b 215
+b 37
+b 89
+b 91
+b 93
+b 89
+b 1
+b 338
+b 346
+b 348
+b 346
+b 1
+b 48
+b 50
+b 52
+b 54
+b 54
+b 1
+b 108
+b 107
+b 1
+b 80
+b 21
+b 72
+b 74
+b 2
+b 128
+b 130
+b 132
+b 104
+b 106
+b 212
+b 240
+b 30
+b 32
+b 30
+b 1
+b 192
+b 90
+b 87
+b 1
+b 0
+b 54
+b 60
+b 74
+b 53
+b 1
+b 56
+b 1
+b 12
+b 14
+b 75
+b 81
+b 162
+b 164
+b 166
+b 164
+b 1
+b 102
+b 144
+b 99
+b 1
+b 142
+b 1
+b 57
+b 59
+b 61
+b 59
+b 1
+b 116
+b 50
+b 11
+b 10
+b 1
+b 166
+b 166
+b 1
+b 12
+b 10
+b 1
+b 134
+b 133
+b 1
+b 8
+b 13
+b 15
+b 17
+b 19
+b 10
+b 1
+b 81
+b 356
+b 421
+b 420
+b 1
+b 80
+b 77
+b 1
+b 12
+b 11
+b 1
+b 187
+b 195
+b 194
+b 1
+b 62
+b 60
+b 1
+b 8
+b 42
+b 233
+b 249
+b 232
+b 1
+b 5
+b 7
+b 9
+b 7
+b 1
+b 38
+b 36
+b 1
+b 4
+b 0
+b 149
+b 148
+b 1
+b 3
+b 107
+b 105
+b 1
+b 15
+b 3
+b 2
+b 1
+b 425
+b 427
+b 461
+b 425
+b 1
+b 32
+b 31
+b 1
+b 3
+b 303
+b 25
+b 24
+b 1
+b 73
+b 81
+b 83
+b 261
+b 263
+b 265
+b 267
+b 5
+b 719
+b 745
+b 716
+b 1
+b 743
+b 1
+b 23
+b 36
+b 94
+b 47
+b 490
+b 43
+b 53
+b 55
+b 50
+b 1
+b 46
+b 48
+b 50
+b 88
+b 1
+b 3
+b 2
+b 1
+b 72
+b 0
+b 2
+b 2
+b 1
+b 69
+b 69
+b 1
+b 69
+b 83
+b 84
+b 94
+b 83
+b 1
+b 23
+b 25
+b 27
+b 23
+b 1
+b 886
+b 888
+b 883
+b 1
+b 30
+b 46
+b 61
+b 45
+b 1
+b 42
+b 39
+b 1
+b 17
+b 14
+b 1
+b 372
+b 384
+b 369
+b 1
+b 381
+b 1
+b 42
+b 54
+b 39
+b 1
+b 51
+b 1
+b 150
+b 152
+b 157
+b 10
+b 10
+b 18
+b 94
+b 17
+b 16
+b 1
+b 21
+b 19
+b 1
+b 230
+b 232
+b 13
+b 24
+b 48
+b 47
+b 1
+b 0
+b 7
+b 13
+b 15
+b 17
+b 19
+b 17
+b 1
+b 229
+b 289
+b 228
+b 1
+b 60
+b 76
+b 76
+b 86
+b 28
+b 27
+b 1
+b 57
+b 59
+b 61
+b 54
+b 1
+b 39
+b 41
+b 43
+b 57
+b 479
+b 481
+b 476
+b 1
+b 479
+b 1
+b 205
+b 203
+b 1
+b 84
+b 86
+b 13
+b 15
+b 9
+b 0
+b 2
+b 44
+b 0
+b 1
+b 43
+b 1
+b 70
+b 78
+b 76
+b 1
+b 17
+b 19
+b 21
+b 59
+b 191
+b 102
+b 151
+b 53
+b 79
+b 81
+b 79
+b 1
+b 60
+b 58
+b 1
+b 31
+b 33
+b 6
+b 8
+b 10
+b 150
+b 236
+b 196
+b 62
+b 61
+b 1
+b 1
+b 161
+b 171
+b 73
+b 3
+b 14
+b 16
+b 18
+b 42
+b 35
+b 18
+b 20
+b 15
+b 1
+b 18
+b 1
+b 13
+b 15
+b 18
+b 17
+b 1
+b 8
+b 10
+b 6
+b 8
+b 10
+b 12
+b 6
+b 1
+b 27
+b 37
+b 25
+b 27
+b 77
+b 76
+b 1
+b 257
+b 285
+b 287
+b 256
+b 1
+b 280
+b 1
+b 11
+b 148
+b 238
+b 240
+b 238
+b 1
+b 44
+b 65
+b 64
+b 1
+b 0
+b 2
+b 50
+b 52
+b 54
+b 47
+b 1
+b 330
+b 348
+b 350
+b 348
+b 1
+b 126
+b 128
+b 8
+b 66
+b 68
+b 88
+b 87
+b 1
+b 283
+b 285
+b 287
+b 58
+b 72
+b 57
+b 1
+b 8
+b 47
+b 3
+b 239
+b 253
+b 251
+b 1
+b 203
+b 245
+b 255
+b 200
+b 1
+b 252
+b 1
+b 18
+b 187
+b 94
+b 163
+b 93
+b 1
+b 340
+b 342
+b 344
+b 57
+b 59
+b 61
+b 160
+b 168
+b 444
+b 652
+b 654
+b 656
+b 4
+b 3
+b 1
+b 24
+b 50
+b 52
+b 58
+b 50
+b 1
+b 47
+b 44
+b 1
+b 63
+b 65
+b 67
+b 67
+b 1
+b 317
+b 339
+b 354
+b 316
+b 1
+b 103
+b 105
+b 320
+b 319
+b 1
+b 29
+b 31
+b 130
+b 132
+b 134
+b 193
+b 132
+b 1
+b 49
+b 71
+b 48
+b 1
+b 61
+b 35
+b 32
+b 1
+b 38
+b 48
+b 209
+b 211
+b 221
+b 220
+b 1
+b 59
+b 61
+b 63
+b 65
+b 63
+b 1
+b 117
+b 127
+b 129
+b 114
+b 1
+b 127
+b 1
+b 42
+b 44
+b 39
+b 1
+b 19
+b 17
+b 1
+b 151
+b 51
+b 12
+b 20
+b 11
+b 1
+b 11
+b 13
+b 15
+b 17
+b 15
+b 1
+b 106
+b 103
+b 1
+b 3
+b 137
+b 139
+b 141
+b 143
+b 141
+b 1
+b 10
+b 16
+b 155
+b 175
+b 177
+b 179
+b 175
+b 1
+b 1286
+b 31
+b 368
+b 386
+b 388
+b 4
+b 6
+b 4
+b 1
+b 4
+b 74
+b 84
+b 73
+b 1
+b 153
+b 163
+b 59
+b 58
+b 1
+b 15
+b 848
+b 300
+b 58
+b 83
+b 58
+b 1
+b 316
+b 217
+b 219
+b 221
+b 6
+b 9
+b 29
+b 39
+b 56
+b 7
+b 9
+b 491
+b 507
+b 24
+b 47
+b 49
+b 56
+b 151
+b 153
+b 161
+b 60
+b 57
+b 1
+b 2
+b 2
+b 1
+b 275
+b 19
+b 18
+b 1
+b 5
+b 67
+b 262
+b 268
+b 92
+b 3
+b 5
+b 3
+b 1
+b 3
+b 5
+b 13
+b 3
+b 1
+b 72
+b 72
+b 71
+b 1
+b 5
+b 54
+b 106
+b 36
+b 38
+b 196
+b 177
+b 175
+b 1
+b 525
+b 527
+b 725
+b 727
+b 729
+b 18
+b 20
+b 22
+b 15
+b 1
+b 20
+b 1
+b 17
+b 19
+b 21
+b 23
+b 17
+b 1
+b 4
+b 6
+b 8
+b 80
+b 79
+b 1
+b 21
+b 23
+b 25
+b 77
+b 79
+b 81
+b 248
+b 233
+b 110
+b 112
+b 114
+b 112
+b 1
+b 92
+b 94
+b 96
+b 96
+b 1
+b 0
+b 51
+b 61
+b 63
+b 2
+b 22
+b 21
+b 1
+b 60
+b 112
+b 30
+b 199
+b 201
+b 199
+b 1
+b 60
+b 60
+b 1
+b 6
+b 257
+b 280
+b 282
+b 220
+b 220
+b 1
+b 49
+b 748
+b 772
+b 748
+b 1
+b 173
+b 172
+b 1
+b 38
+b 50
+b 35
+b 1
+b 10
+b 12
+b 14
+b 2
+b 4
+b 2
+b 1
+b 184
+b 308
+b 182
+b 1
+b 21
+b 20
+b 1
+b 532
+b 542
+b 46
+b 7
+b 312
+b 328
+b 343
+b 311
+b 1
+b 22
+b 104
+b 103
+b 1
+b 246
+b 288
+b 47
+b 62
+b 46
+b 1
+b 61
+b 463
+b 51
+b 53
+b 51
+b 1
+b 309
+b 308
+b 1
+b 15
+b 17
+b 55
+b 3
+b 25
+b 21
+b 23
+b 54
+b 370
+b 369
+b 1
+b 44
+b 46
+b 188
+b 206
+b 47
+b 49
+b 51
+b 53
+b 47
+b 1
+b 49
+b 51
+b 51
+b 1
+b 42
+b 40
+b 1
+b 13
+b 21
+b 41
+b 12
+b 1
+b 328
+b 353
+b 86
+b 88
+b 90
+b 92
+b 90
+b 1
+b 66
+b 68
+b 1
+b 75
+b 77
+b 105
+b 16
+b 36
+b 10
+b 90
+b 2
+b 4
+b 2
+b 1
+b 94
+b 96
+b 14
+b 13
+b 1
+b 218
+b 216
+b 1
+b 2
+b 4
+b 4
+b 1
+b 110
+b 146
+b 107
+b 1
+b 4
+b 6
+b 8
+b 126
+b 13
+b 57
+b 75
+b 56
+b 1
+b 1316
+b 1318
+b 1320
+b 1322
+b 1318
+b 1
+b 61
+b 135
+b 133
+b 132
+b 1
+b 103
+b 129
+b 102
+b 1
+b 124
+b 1
+b 708
+b 710
+b 111
+b 111
+b 81
+b 61
+b 61
+b 1
+b 8
+b 7
+b 1
+b 67
+b 165
+b 64
+b 1
+b 572
+b 569
+b 1
+b 32
+b 34
+b 49
+b 64
+b 289
+b 287
+b 1
+b 15
+b 5
+b 4
+b 1
+b 79
+b 81
+b 83
+b 81
+b 1
+b 46
+b 63
+b 62
+b 1
+b 103
+b 105
+b 119
+b 103
+b 1
+b 319
+b 321
+b 316
+b 1
+b 319
+b 1
+b 7
+b 9
+b 11
+b 110
+b 109
+b 1
+b 15
+b 14
+b 31
+b 0
+b 10
+b 65
+b 67
+b 69
+b 65
+b 1
+b 105
+b 147
+b 104
+b 1
+b 142
+b 1
+b 82
+b 95
+b 23
+b 25
+b 69
+b 23
+b 1
+b 228
+b 228
+b 1
+b 84
+b 45
+b 47
+b 45
+b 1
+b 107
+b 117
+b 144
+b 154
+b 76
+b 78
+b 80
+b 95
+b 118
+b 115
+b 1
+b 57
+b 210
+b 212
+b 214
+b 216
+b 216
+b 1
+b 140
+b 100
+b 102
+b 363
+b 365
+b 367
+b 369
+b 215
+b 217
+b 219
+b 217
+b 1
+b 172
+b 185
+b 256
+b 258
+b 260
+b 48
+b 50
+b 69
+b 48
+b 1
+b 555
+b 8
+b 8
+b 1
+b 4
+b 2
+b 1
+b 38
+b 37
+b 1
+b 2
+b 316
+b 318
+b 320
+b 318
+b 1
+b 50
+b 52
+b 41
+b 40
+b 1
+b 40
+b 64
+b 46
+b 27
+b 73
+b 75
+b 77
+b 79
+b 73
+b 1
+b 7
+b 21
+b 46
+b 6
+b 1
+b 9
+b 11
+b 13
+b 76
+b 16
+b 117
+b 119
+b 121
+b 123
+b 114
+b 1
+b 121
+b 1
+b 236
+b 238
+b 240
+b 242
+b 823
+b 820
+b 1
+b 49
+b 159
+b 158
+b 1
+b 205
+b 207
+b 209
+b 148
+b 145
+b 1
+b 83
+b 85
+b 107
+b 109
+b 129
+b 131
+b 36
+b 44
+b 28
+b 38
+b 37
+b 1
+b 23
+b 60
+b 68
+b 70
+b 59
+b 1
+b 7
+b 21
+b 20
+b 1
+b 25
+b 6
+b 45
+b 3
+b 1
+b 17
+b 39
+b 16
+b 1
+b 88
+b 102
+b 342
+b 362
+b 149
+b 160
+b 0
+b 2
+b 37
+b 39
+b 41
+b 98
+b 43
+b 32
+b 9
+b 8
+b 1
+b 4
+b 6
+b 8
+b 9
+b 39
+b 6
+b 1
+b 37
+b 1
+b 15
+b 17
+b 19
+b 21
+b 509
+b 508
+b 1
+b 20
+b 22
+b 155
+b 157
+b 159
+b 161
+b 155
+b 1
+b 28
+b 20
+b 334
+b 333
+b 1
+b 96
+b 96
+b 1
+b 72
+b 92
+b 238
+b 240
+b 242
+b 244
+b 242
+b 1
+b 165
+b 167
+b 162
+b 1
+b 21
+b 20
+b 1
+b 34
+b 233
+b 232
+b 1
+b 199
+b 217
+b 198
+b 1
+b 212
+b 1
+b 213
+b 249
+b 849
+b 306
+b 81
+b 16
+b 201
+b 225
+b 227
+b 55
+b 57
+b 59
+b 55
+b 1
+b 75
+b 77
+b 426
+b 428
+b 427
+b 1
+b 7
+b 28
+b 302
+b 304
+b 304
+b 1
+b 23
+b 20
+b 1
+b 29
+b 138
+b 24
+b 23
+b 1
+b 23
+b 31
+b 30
+b 1
+b 264
+b 266
+b 7
+b 154
+b 156
+b 158
+b 160
+b 162
+b 158
+b 1
+b 28
+b 96
+b 156
+b 93
+b 1
+b 157
+b 188
+b 27
+b 7
+b 19
+b 21
+b 6
+b 1
+b 179
+b 199
+b 298
+b 297
+b 1
+b 7
+b 0
+b 28
+b 30
+b 0
+b 75
+b 24
+b 23
+b 1
+b 11
+b 86
+b 93
+b 95
+b 2
+b 30
+b 112
+b 130
+b 129
+b 1
+b 121
+b 65
+b 67
+b 0
+b 2
+b 8
+b 42
+b 44
+b 74
+b 73
+b 1
+b 166
+b 168
+b 170
+b 172
+b 174
+b 168
+b 1
+b 243
+b 263
+b 311
+b 321
+b 28
+b 30
+b 32
+b 34
+b 25
+b 1
+b 32
+b 1
+b 38
+b 40
+b 42
+b 59
+b 61
+b 63
+b 65
+b 15
+b 20
+b 19
+b 1
+b 1
+b 633
+b 104
+b 1
+b 0
+b 1
+b 58
+b 57
+b 1
+b 4
+b 123
+b 145
+b 147
+b 145
+b 1
+b 42
+b 5
+b 68
+b 78
+b 80
+b 67
+b 1
+b 711
+b 725
+b 724
+b 1
+b 236
+b 235
+b 1
+b 78
+b 13
+b 351
+b 350
+b 1
+b 40
+b 42
+b 45
+b 61
+b 24
+b 23
+b 1
+b 312
+b 314
+b 5
+b 4
+b 1
+b 16
+b 18
+b 20
+b 22
+b 44
+b 53
+b 77
+b 52
+b 1
+b 72
+b 1
+b 43
+b 53
+b 67
+b 87
+b 77
+b 12
+b 65
+b 122
+b 122
+b 1
+b 21
+b 58
+b 2
+b 186
+b 188
+b 190
+b 192
+b 194
+b 186
+b 1
+b 195
+b 3
+b 48
+b 50
+b 52
+b 45
+b 1
+b 51
+b 48
+b 1
+b 103
+b 102
+b 1
+b 325
+b 38
+b 35
+b 1
+b 14
+b 16
+b 18
+b 20
+b 78
+b 80
+b 82
+b 84
+b 25
+b 39
+b 56
+b 58
+b 58
+b 1
+b 27
+b 26
+b 1
+b 706
+b 113
+b 115
+b 113
+b 1
+b 26
+b 16
+b 6
+b 5
+b 1
+b 112
+b 114
+b 289
+b 291
+b 293
+b 295
+b 12
+b 14
+b 16
+b 18
+b 9
+b 1
+b 16
+b 1
+b 8
+b 52
+b 70
+b 8
+b 1
+b 47
+b 1
+b 26
+b 28
+b 30
+b 28
+b 1
+b 41
+b 59
+b 58
+b 1
+b 21
+b 66
+b 68
+b 70
+b 72
+b 37
+b 39
+b 41
+b 43
+b 39
+b 1
+b 29
+b 217
+b 108
+b 63
+b 65
+b 67
+b 69
+b 63
+b 1
+b 135
+b 137
+b 139
+b 132
+b 1
+b 187
+b 198
+b 1
+b 12
+b 11
+b 1
+b 94
+b 96
+b 239
+b 66
+b 78
+b 116
+b 118
+b 120
+b 17
+b 32
+b 30
+b 1
+b 52
+b 78
+b 49
+b 1
+b 0
+b 2
+b 17
+b 154
+b 277
+b 276
+b 1
+b 5
+b 2
+b 1
+b 210
+b 31
+b 106
+b 108
+b 110
+b 638
+b 746
+b 354
+b 353
+b 1
+b 172
+b 0
+b 57
+b 80
+b 37
+b 39
+b 37
+b 1
+b 354
+b 356
+b 291
+b 315
+b 325
+b 52
+b 80
+b 82
+b 29
+b 28
+b 1
+b 43
+b 11
+b 13
+b 11
+b 1
+b 12
+b 33
+b 32
+b 1
+b 41
+b 43
+b 155
+b 157
+b 159
+b 161
+b 70
+b 97
+b 501
+b 14
+b 14
+b 306
+b 25
+b 32
+b 25
+b 103
+b 105
+b 15
+b 49
+b 74
+b 76
+b 8
+b 10
+b 12
+b 25
+b 10
+b 1
+b 67
+b 1
+b 4
+b 3
+b 1
+b 0
+b 27
+b 35
+b 37
+b 166
+b 176
+b 26
+b 28
+b 0
+b 2
+b 120
+b 122
+b 152
+b 122
+b 1
+b 147
+b 1
+b 587
+b 21
+b 20
+b 1
+b 21
+b 18
+b 1
+b 90
+b 92
+b 94
+b 96
+b 135
+b 137
+b 139
+b 141
+b 92
+b 89
+b 1
+b 77
+b 74
+b 1
+b 43
+b 113
+b 3
+b 5
+b 3
+b 1
+b 186
+b 188
+b 190
+b 234
+b 183
+b 1
+b 222
+b 224
+b 226
+b 224
+b 1
+b 56
+b 66
+b 170
+b 187
+b 32
+b 29
+b 31
+b 33
+b 31
+b 1
+b 29
+b 31
+b 33
+b 35
+b 31
+b 1
+b 127
+b 139
+b 116
+b 118
+b 134
+b 122
+b 121
+b 1
+b 21
+b 3
+b 2
+b 1
+b 77
+b 79
+b 41
+b 142
+b 152
+b 168
+b 151
+b 1
+b 145
+b 147
+b 147
+b 1
+b 145
+b 161
+b 144
+b 1
+b 156
+b 1
+b 16
+b 13
+b 1
+b 6
+b 5
+b 1
+b 76
+b 78
+b 80
+b 78
+b 1
+b 16
+b 25
+b 0
+b 400
+b 85
+b 87
+b 225
+b 233
+b 241
+b 222
+b 1
+b 156
+b 155
+b 1
+b 15
+b 451
+b 450
+b 1
+b 7
+b 9
+b 230
+b 240
+b 268
+b 239
+b 1
+b 264
+b 1
+b 32
+b 0
+b 2
+b 16
+b 15
+b 1
+b 30
+b 17
+b 17
+b 15
+b 1
+b 0
+b 7
+b 21
+b 6
+b 29
+b 31
+b 45
+b 41
+b 65
+b 93
+b 64
+b 1
+b 444
+b 446
+b 50
+b 132
+b 142
+b 188
+b 141
+b 1
+b 185
+b 1
+b 141
+b 141
+b 1
+b 124
+b 123
+b 1
+b 166
+b 190
+b 165
+b 1
+b 1
+b 20
+b 38
+b 17
+b 1
+b 36
+b 1
+b 96
+b 22
+b 15
+b 14
+b 1
+b 113
+b 115
+b 117
+b 119
+b 38
+b 3
+b 250
+b 252
+b 83
+b 85
+b 87
+b 89
+b 83
+b 1
+b 16
+b 26
+b 25
+b 24
+b 1
+b 21
+b 23
+b 16
+b 1
+b 48
+b 82
+b 81
+b 1
+b 325
+b 91
+b 54
+b 72
+b 228
+b 50
+b 768
+b 770
+b 765
+b 1
+b 768
+b 1
+b 217
+b 219
+b 217
+b 1
+b 7
+b 43
+b 41
+b 1
+b 192
+b 11
+b 0
+b 2
+b 4
+b 2
+b 4
+b 6
+b 73
+b 107
+b 106
+b 1
+b 7
+b 29
+b 29
+b 40
+b 17
+b 19
+b 30
+b 0
+b 2
+b 18
+b 18
+b 20
+b 44
+b 43
+b 1
+b 50
+b 49
+b 1
+b 130
+b 88
+b 90
+b 112
+b 88
+b 1
+b 234
+b 45
+b 44
+b 1
+b 5
+b 3
+b 13
+b 33
+b 33
+b 1
+b 8
+b 80
+b 64
+b 66
+b 7
+b 127
+b 129
+b 131
+b 127
+b 1
+b 66
+b 83
+b 85
+b 83
+b 1
+b 10
+b 7
+b 1
+b 0
+b 8
+b 7
+b 1
+b 75
+b 77
+b 79
+b 77
+b 1
+b 152
+b 182
+b 408
+b 422
+b 424
+b 426
+b 424
+b 1
+b 160
+b 174
+b 176
+b 36
+b 46
+b 9
+b 8
+b 1
+b 10
+b 18
+b 30
+b 9
+b 2
+b 14
+b 1
+b 6
+b 22
+b 23
+b 25
+b 27
+b 29
+b 178
+b 207
+b 61
+b 79
+b 87
+b 86
+b 1
+b 24
+b 26
+b 26
+b 1
+b 39
+b 41
+b 230
+b 40
+b 42
+b 159
+b 175
+b 177
+b 134
+b 0
+b 2
+b 12
+b 72
+b 70
+b 1
+b 13
+b 15
+b 10
+b 1
+b 88
+b 171
+b 3
+b 5
+b 7
+b 0
+b 1
+b 314
+b 316
+b 79
+b 12
+b 14
+b 12
+b 1
+b 167
+b 179
+b 60
+b 68
+b 46
+b 7
+b 9
+b 44
+b 54
+b 42
+b 1
+b 4
+b 14
+b 14
+b 16
+b 18
+b 16
+b 1
+b 194
+b 196
+b 198
+b 200
+b 198
+b 1
+b 15
+b 17
+b 19
+b 21
+b 12
+b 1
+b 304
+b 314
+b 303
+b 1
+b 143
+b 286
+b 142
+b 1
+b 0
+b 8
+b 184
+b 23
+b 25
+b 23
+b 1
+b 143
+b 141
+b 1
+b 3
+b 41
+b 40
+b 1
+b 56
+b 56
+b 1
+b 7
+b 7
+b 1
+b 184
+b 41
+b 112
+b 114
+b 116
+b 114
+b 1
+b 276
+b 16
+b 0
+b 386
+b 404
+b 188
+b 190
+b 188
+b 1
+b 8
+b 58
+b 60
+b 201
+b 12
+b 14
+b 16
+b 18
+b 14
+b 1
+b 158
+b 190
+b 172
+b 196
+b 198
+b 196
+b 1
+b 50
+b 58
+b 80
+b 48
+b 1
+b 56
+b 123
+b 55
+b 1
+b 118
+b 1
+b 164
+b 166
+b 168
+b 170
+b 24
+b 8
+b 10
+b 9
+b 1
+b 15
+b 17
+b 19
+b 346
+b 348
+b 360
+b 346
+b 1
+b 35
+b 34
+b 1
+b 2
+b 7
+b 9
+b 11
+b 11
+b 1
+b 40
+b 58
+b 60
+b 156
+b 178
+b 155
+b 1
+b 173
+b 1
+b 225
+b 51
+b 37
+b 55
+b 96
+b 0
+b 2
+b 40
+b 197
+b 199
+b 201
+b 194
+b 1
+b 99
+b 98
+b 1
+b 32
+b 42
+b 383
+b 385
+b 387
+b 49
+b 167
+b 166
+b 1
+b 1
+b 8
+b 73
+b 75
+b 181
+b 269
+b 271
+b 273
+b 275
+b 271
+b 1
+b 400
+b 43
+b 71
+b 71
+b 1
+b 65
+b 62
+b 1
+b 15
+b 17
+b 19
+b 410
+b 412
+b 414
+b 416
+b 410
+b 1
+b 91
+b 93
+b 15
+b 14
+b 1
+b 5
+b 15
+b 23
+b 31
+b 28
+b 1
+b 1
+b 3
+b 5
+b 3
+b 1
+b 211
+b 233
+b 93
+b 95
+b 103
+b 107
+b 279
+b 281
+b 215
+b 225
+b 29
+b 194
+b 196
+b 148
+b 164
+b 132
+b 134
+b 168
+b 11
+b 13
+b 15
+b 17
+b 185
+b 51
+b 13
+b 29
+b 354
+b 356
+b 354
+b 1
+b 70
+b 72
+b 74
+b 76
+b 74
+b 1
+b 39
+b 125
+b 38
+b 1
+b 271
+b 273
+b 275
+b 273
+b 1
+b 140
+b 16
+b 36
+b 35
+b 37
+b 39
+b 41
+b 81
+b 80
+b 1
+b 59
+b 87
+b 27
+b 29
+b 45
+b 44
+b 1
+b 143
+b 167
+b 246
+b 256
+b 244
+b 1
+b 11
+b 8
+b 1
+b 154
+b 176
+b 92
+b 102
+b 89
+b 1
+b 100
+b 1
+b 85
+b 87
+b 89
+b 4
+b 34
+b 2
+b 1
+b 31
+b 1
+b 3
+b 66
+b 106
+b 39
+b 4
+b 0
+b 9
+b 308
+b 305
+b 1
+b 47
+b 44
+b 1
+b 12
+b 14
+b 16
+b 1197
+b 1508
+b 1510
+b 1196
+b 1
+b 1514
+b 1516
+b 0
+b 2
+b 389
+b 391
+b 393
+b 395
+b 389
+b 1
+b 10
+b 15
+b 207
+b 247
+b 207
+b 1
+b 243
+b 1
+b 98
+b 100
+b 102
+b 104
+b 98
+b 1
+b 21
+b 23
+b 41
+b 40
+b 1
+b 24
+b 26
+b 28
+b 65
+b 75
+b 64
+b 1
+b 71
+b 1
+b 4
+b 28
+b 26
+b 1
+b 25
+b 22
+b 1
+b 1
+b 65
+b 75
+b 64
+b 1
+b 20
+b 82
+b 292
+b 132
+b 110
+b 9
+b 279
+b 57
+b 56
+b 1
+b 36
+b 233
+b 101
+b 109
+b 70
+b 72
+b 74
+b 76
+b 44
+b 104
+b 103
+b 1
+b 104
+b 185
+b 187
+b 189
+b 191
+b 185
+b 1
+b 88
+b 113
+b 115
+b 113
+b 1
+b 7
+b 9
+b 11
+b 7
+b 1
+b 0
+b 106
+b 114
+b 134
+b 136
+b 138
+b 140
+b 134
+b 1
+b 11
+b 13
+b 25
+b 25
+b 27
+b 29
+b 4
+b 6
+b 8
+b 519
+b 521
+b 283
+b 305
+b 280
+b 1
+b 67
+b 69
+b 71
+b 73
+b 319
+b 318
+b 1
+b 27
+b 10
+b 72
+b 15
+b 125
+b 159
+b 161
+b 159
+b 1
+b 1250
+b 1249
+b 2
+b 27
+b 55
+b 136
+b 3
+b 478
+b 18
+b 20
+b 22
+b 0
+b 79
+b 129
+b 15
+b 14
+b 1
+b 60
+b 24
+b 26
+b 4
+b 14
+b 18
+b 20
+b 22
+b 20
+b 1
+b 24
+b 26
+b 1
+b 0
+b 1
+b 71
+b 73
+b 81
+b 80
+b 1
+b 70
+b 72
+b 0
+b 2
+b 85
+b 95
+b 95
+b 1
+b 194
+b 196
+b 1
+b 3
+b 5
+b 7
+b 54
+b 56
+b 58
+b 60
+b 225
+b 352
+b 209
+b 1
+b 11
+b 10
+b 1
+b 78
+b 160
+b 71
+b 181
+b 183
+b 86
+b 118
+b 124
+b 107
+b 106
+b 1
+b 13
+b 11
+b 1
+b 54
+b 56
+b 58
+b 56
+b 1
+b 88
+b 43
+b 57
+b 38
+b 11
+b 64
+b 66
+b 61
+b 1
+b 8
+b 7
+b 1
+b 396
+b 39
+b 41
+b 22
+b 36
+b 35
+b 1
+b 23
+b 22
+b 1
+b 86
+b 96
+b 10
+b 12
+b 14
+b 16
+b 7
+b 1
+b 14
+b 1
+b 103
+b 111
+b 132
+b 132
+b 1
+b 17
+b 16
+b 1
+b 46
+b 48
+b 50
+b 48
+b 86
+b 88
+b 103
+b 105
+b 107
+b 103
+b 1
+b 67
+b 69
+b 71
+b 69
+b 1
+b 211
+b 227
+b 229
+b 400
+b 399
+b 1
+b 45
+b 395
+b 27
+b 338
+b 340
+b 58
+b 165
+b 167
+b 169
+b 91
+b 90
+b 1
+b 4
+b 2
+b 1
+b 9
+b 145
+b 147
+b 9
+b 11
+b 13
+b 15
+b 9
+b 1
+b 5
+b 19
+b 246
+b 248
+b 250
+b 252
+b 72
+b 24
+b 26
+b 69
+b 79
+b 66
+b 1
+b 227
+b 309
+b 224
+b 1
+b 361
+b 360
+b 1
+b 299
+b 299
+b 1
+b 57
+b 54
+b 1
+b 129
+b 155
+b 128
+b 1
+b 205
+b 2
+b 4
+b 35
+b 55
+b 34
+b 1
+b 358
+b 6
+b 98
+b 108
+b 110
+b 97
+b 1
+b 40
+b 39
+b 1
+b 2
+b 5
+b 7
+b 9
+b 12
+b 11
+b 1
+b 17
+b 90
+b 89
+b 1
+b 130
+b 129
+b 1
+b 134
+b 144
+b 13
+b 15
+b 10
+b 1
+b 23
+b 22
+b 1
+b 303
+b 363
+b 1
+b 94
+b 104
+b 78
+b 140
+b 77
+b 1
+b 135
+b 1
+b 66
+b 159
+b 181
+b 183
+b 158
+b 1
+b 19
+b 33
+b 32
+b 1
+b 196
+b 218
+b 220
+b 222
+b 195
+b 1
+b 213
+b 1
+b 22
+b 19
+b 35
+b 32
+b 1
+b 132
+b 129
+b 1
+b 92
+b 94
+b 96
+b 98
+b 127
+b 129
+b 131
+b 127
+b 1
+b 184
+b 183
+b 1
+b 1
+b 15
+b 14
+b 1
+b 441
+b 443
+b 445
+b 215
+b 51
+b 218
+b 220
+b 10
+b 12
+b 14
+b 26
+b 18
+b 135
+b 134
+b 1
+b 95
+b 109
+b 96
+b 98
+b 100
+b 102
+b 54
+b 56
+b 58
+b 19
+b 457
+b 501
+b 36
+b 38
+b 40
+b 42
+b 38
+b 1
+b 340
+b 364
+b 2
+b 4
+b 34
+b 52
+b 49
+b 1
+b 38
+b 62
+b 67
+b 89
+b 403
+b 25
+b 131
+b 133
+b 135
+b 137
+b 133
+b 1
+b 316
+b 318
+b 320
+b 313
+b 1
+b 318
+b 1
+b 29
+b 53
+b 26
+b 1
+b 50
+b 1
+b 287
+b 289
+b 291
+b 17
+b 31
+b 37
+b 36
+b 35
+b 1
+b 36
+b 190
+b 192
+b 407
+b 409
+b 5
+b 21
+b 131
+b 13
+b 10
+b 1
+b 99
+b 98
+b 1
+b 60
+b 5
+b 75
+b 75
+b 1
+b 33
+b 24
+b 26
+b 28
+b 30
+b 35
+b 324
+b 33
+b 52
+b 54
+b 56
+b 54
+b 1
+b 1445
+b 1442
+b 1
+b 17
+b 17
+b 1
+b 417
+b 414
+b 1
+b 164
+b 164
+b 1
+b 6
+b 26
+b 125
+b 127
+b 129
+b 125
+b 1
+b 12
+b 14
+b 16
+b 38
+b 42
+b 44
+b 46
+b 39
+b 1
+b 44
+b 1
+b 90
+b 116
+b 87
+b 89
+b 103
+b 105
+b 107
+b 121
+b 105
+b 1
+b 48
+b 48
+b 1
+b 13
+b 12
+b 1
+b 63
+b 65
+b 113
+b 112
+b 1
+b 79
+b 87
+b 26
+b 66
+b 29
+b 119
+b 121
+b 28
+b 1
+b 30
+b 38
+b 37
+b 1
+b 25
+b 4
+b 6
+b 4
+b 1
+b 27
+b 190
+b 1
+b 0
+b 1
+b 164
+b 174
+b 163
+b 1
+b 222
+b 224
+b 244
+b 243
+b 1
+b 116
+b 124
+b 248
+b 250
+b 252
+b 215
+b 213
+b 1
+b 15
+b 17
+b 19
+b 12
+b 1
+b 115
+b 179
+b 114
+b 1
+b 32
+b 34
+b 36
+b 36
+b 1
+b 79
+b 79
+b 1
+b 4
+b 2
+b 1
+b 338
+b 366
+b 335
+b 1
+b 98
+b 113
+b 3
+b 9
+b 0
+b 1
+b 7
+b 1
+b 4
+b 6
+b 8
+b 6
+b 1
+b 69
+b 79
+b 30
+b 44
+b 157
+b 159
+b 161
+b 163
+b 154
+b 1
+b 161
+b 1
+b 21
+b 31
+b 20
+b 1
+b 27
+b 1
+b 92
+b 102
+b 187
+b 189
+b 191
+b 193
+b 61
+b 3
+b 5
+b 12
+b 22
+b 11
+b 35
+b 45
+b 34
+b 1
+b 125
+b 151
+b 12
+b 14
+b 16
+b 9
+b 1
+b 86
+b 84
+b 1
+b 107
+b 109
+b 164
+b 109
+b 1
+b 160
+b 1
+b 37
+b 43
+b 45
+b 35
+b 1
+b 43
+b 1
+b 55
+b 52
+b 1
+b 43
+b 42
+b 1
+b 10
+b 15
+b 72
+b 74
+b 76
+b 72
+b 1
+b 188
+b 190
+b 192
+b 188
+b 1
+b 22
+b 30
+b 52
+b 29
+b 1
+b 48
+b 1
+b 278
+b 280
+b 282
+b 11
+b 103
+b 10
+b 1
+b 944
+b 946
+b 948
+b 946
+b 1
+b 88
+b 90
+b 92
+b 94
+b 88
+b 1
+b 30
+b 116
+b 29
+b 1
+b 111
+b 1
+b 52
+b 19
+b 121
+b 9
+b 8
+b 1
+b 0
+b 24
+b 76
+b 23
+b 1
+b 717
+b 729
+b 714
+b 1
+b 726
+b 1
+b 49
+b 28
+b 43
+b 45
+b 47
+b 45
+b 1
+b 127
+b 137
+b 126
+b 1
+b 133
+b 1
+b 49
+b 6
+b 8
+b 10
+b 12
+b 14
+b 10
+b 1
+b 78
+b 98
+b 100
+b 77
+b 1
+b 44
+b 7
+b 9
+b 20
+b 44
+b 23
+b 33
+b 35
+b 22
+b 20
+b 1
+b 45
+b 44
+b 1
+b 0
+b 2
+b 129
+b 147
+b 18
+b 20
+b 22
+b 24
+b 102
+b 104
+b 106
+b 108
+b 106
+b 1
+b 7
+b 9
+b 11
+b 13
+b 11
+b 1
+b 60
+b 57
+b 1
+b 14
+b 4
+b 37
+b 68
+b 116
+b 3
+b 260
+b 257
+b 1
+b 20
+b 406
+b 405
+b 1
+b 94
+b 96
+b 98
+b 126
+b 128
+b 126
+b 1
+b 55
+b 167
+b 165
+b 1
+b 29
+b 26
+b 44
+b 43
+b 1
+b 21
+b 20
+b 1
+b 993
+b 1003
+b 990
+b 1
+b 1000
+b 1
+b 78
+b 29
+b 47
+b 58
+b 56
+b 1
+b 24
+b 21
+b 22
+b 24
+b 4
+b 157
+b 159
+b 169
+b 168
+b 1
+b 117
+b 87
+b 201
+b 213
+b 198
+b 1
+b 13
+b 21
+b 42
+b 124
+b 155
+b 157
+b 122
+b 1
+b 155
+b 1
+b 361
+b 377
+b 387
+b 66
+b 149
+b 63
+b 1
+b 38
+b 37
+b 1
+b 114
+b 111
+b 1
+b 127
+b 127
+b 1
+b 10
+b 27
+b 74
+b 73
+b 1
+b 0
+b 2
+b 10
+b 0
+b 1
+b 243
+b 259
+b 242
+b 1
+b 192
+b 202
+b 7
+b 95
+b 20
+b 46
+b 45
+b 1
+b 71
+b 41
+b 9
+b 8
+b 1
+b 6
+b 8
+b 64
+b 66
+b 68
+b 38
+b 40
+b 42
+b 44
+b 42
+b 1
+b 116
+b 176
+b 175
+b 1
+b 198
+b 49
+b 73
+b 48
+b 1
+b 69
+b 1
+b 118
+b 120
+b 118
+b 1
+b 0
+b 2
+b 471
+b 488
+b 470
+b 1
+b 185
+b 217
+b 219
+b 119
+b 127
+b 129
+b 118
+b 1
+b 14
+b 84
+b 83
+b 1
+b 111
+b 109
+b 1
+b 64
+b 62
+b 1
+b 2
+b 2
+b 1
+b 223
+b 21
+b 20
+b 1
+b 8
+b 10
+b 18
+b 17
+b 1
+b 31
+b 33
+b 35
+b 37
+b 82
+b 118
+b 79
+b 1
+b 116
+b 1
+b 322
+b 30
+b 34
+b 36
+b 38
+b 34
+b 1
+b 46
+b 48
+b 50
+b 60
+b 48
+b 1
+b 3
+b 5
+b 7
+b 9
+b 23
+b 25
+b 27
+b 20
+b 1
+b 233
+b 235
+b 233
+b 1
+b 6
+b 294
+b 177
+b 179
+b 181
+b 183
+b 55
+b 57
+b 59
+b 122
+b 124
+b 126
+b 124
+b 1
+b 17
+b 19
+b 16
+b 142
+b 6
+b 50
+b 52
+b 54
+b 179
+b 181
+b 183
+b 185
+b 183
+b 1
+b 85
+b 84
+b 83
+b 1
+b 168
+b 170
+b 24
+b 33
+b 45
+b 54
+b 56
+b 58
+b 56
+b 1
+b 83
+b 82
+b 1
+b 162
+b 230
+b 232
+b 230
+b 1
+b 4
+b 6
+b 8
+b 122
+b 136
+b 119
+b 1
+b 133
+b 1
+b 35
+b 132
+b 151
+b 150
+b 1
+b 4
+b 6
+b 170
+b 169
+b 1
+b 4
+b 18
+b 62
+b 61
+b 1
+b 248
+b 250
+b 252
+b 248
+b 1
+b 18
+b 15
+b 1
+b 11
+b 108
+b 110
+b 112
+b 1
+b 11
+b 21
+b 10
+b 1
+b 38
+b 35
+b 1
+b 116
+b 115
+b 1
+b 49
+b 86
+b 47
+b 46
+b 1
+b 37
+b 36
+b 1
+b 16
+b 107
+b 109
+b 111
+b 113
+b 104
+b 1
+b 111
+b 1
+b 122
+b 121
+b 1
+b 11
+b 13
+b 1387
+b 1389
+b 1391
+b 1393
+b 1387
+b 1
+b 3
+b 5
+b 3
+b 1
+b 85
+b 99
+b 115
+b 98
+b 1
+b 111
+b 1
+b 105
+b 104
+b 1
+b 10
+b 50
+b 297
+b 344
+b 296
+b 1
+b 1
+b 65
+b 132
+b 129
+b 1
+b 1
+b 0
+b 1
+b 88
+b 102
+b 104
+b 87
+b 1
+b 147
+b 157
+b 159
+b 157
+b 1
+b 178
+b 2
+b 24
+b 34
+b 23
+b 1
+b 388
+b 390
+b 385
+b 1
+b 454
+b 3
+b 23
+b 177
+b 179
+b 181
+b 177
+b 1
+b 32
+b 34
+b 36
+b 105
+b 41
+b 40
+b 23
+b 22
+b 1
+b 4
+b 14
+b 13
+b 1
+b 135
+b 11
+b 104
+b 106
+b 108
+b 104
+b 1
+b 261
+b 140
+b 218
+b 139
+b 1
+b 214
+b 1
+b 131
+b 62
+b 88
+b 86
+b 1
+b 28
+b 42
+b 165
+b 173
+b 342
+b 379
+b 341
+b 1
+b 374
+b 1
+b 7
+b 9
+b 27
+b 7
+b 1
+b 316
+b 318
+b 320
+b 318
+b 1
+b 48
+b 47
+b 1
+b 45
+b 59
+b 58
+b 1
+b 286
+b 286
+b 1
+b 3
+b 3
+b 1
+b 437
+b 439
+b 441
+b 437
+b 1
+b 53
+b 79
+b 116
+b 155
+b 262
+b 357
+b 356
+b 1
+b 102
+b 5
+b 31
+b 93
+b 92
+b 1
+b 60
+b 6
+b 5
+b 1
+b 1
+b 69
+b 79
+b 81
+b 68
+b 1
+b 78
+b 90
+b 88
+b 1
+b 53
+b 55
+b 57
+b 59
+b 53
+b 1
+b 75
+b 77
+b 79
+b 81
+b 77
+b 1
+b 132
+b 131
+b 1
+b 35
+b 35
+b 1
+b 96
+b 98
+b 100
+b 4
+b 109
+b 111
+b 178
+b 109
+b 1
+b 31
+b 39
+b 41
+b 30
+b 1
+b 251
+b 253
+b 255
+b 255
+b 1
+b 12
+b 14
+b 16
+b 52
+b 140
+b 9
+b 11
+b 9
+b 1
+b 56
+b 58
+b 60
+b 62
+b 44
+b 43
+b 1
+b 114
+b 116
+b 118
+b 287
+b 289
+b 291
+b 1
+b 9
+b 168
+b 170
+b 144
+b 160
+b 182
+b 226
+b 236
+b 238
+b 225
+b 1
+b 72
+b 74
+b 76
+b 78
+b 58
+b 19
+b 455
+b 457
+b 465
+b 463
+b 1
+b 57
+b 56
+b 1
+b 462
+b 470
+b 10
+b 12
+b 14
+b 10
+b 1
+b 157
+b 159
+b 161
+b 16
+b 18
+b 611
+b 613
+b 615
+b 617
+b 608
+b 1
+b 3
+b 22
+b 24
+b 22
+b 1
+b 6
+b 34
+b 1015
+b 1033
+b 1013
+b 1
+b 277
+b 51
+b 53
+b 55
+b 53
+b 1
+b 37
+b 39
+b 41
+b 43
+b 1469
+b 1466
+b 1
+b 8
+b 5
+b 1
+b 108
+b 120
+b 107
+b 1
+b 167
+b 169
+b 171
+b 32
+b 34
+b 36
+b 38
+b 32
+b 34
+b 54
+b 51
+b 1
+b 30
+b 40
+b 7
+b 5
+b 120
+b 122
+b 124
+b 126
+b 82
+b 97
+b 81
+b 1
+b 252
+b 254
+b 256
+b 258
+b 57
+b 65
+b 67
+b 126
+b 18
+b 8
+b 23
+b 0
+b 41
+b 43
+b 53
+b 300
+b 0
+b 2
+b 1
+b 127
+b 129
+b 139
+b 138
+b 1
+b 3
+b 13
+b 149
+b 151
+b 153
+b 155
+b 153
+b 1
+b 176
+b 265
+b 267
+b 159
+b 175
+b 34
+b 186
+b 184
+b 1
+b 39
+b 59
+b 56
+b 1
+b 53
+b 52
+b 1
+b 165
+b 177
+b 590
+b 3
+b 33
+b 33
+b 1
+b 15
+b 15
+b 1
+b 324
+b 323
+b 1
+b 43
+b 40
+b 1
+b 84
+b 229
+b 231
+b 467
+b 469
+b 471
+b 55
+b 57
+b 59
+b 57
+b 1
+b 448
+b 25
+b 19
+b 21
+b 23
+b 28
+b 36
+b 60
+b 59
+b 1
+b 22
+b 27
+b 25
+b 1
+b 404
+b 2
+b 12
+b 4
+b 35
+b 34
+b 1
+b 16
+b 131
+b 133
+b 131
+b 1
+b 11
+b 13
+b 196
+b 3
+b 493
+b 492
+b 1
+b 6
+b 64
+b 66
+b 5
+b 1
+b 59
+b 1
+b 251
+b 248
+b 1
+b 1
+b 0
+b 326
+b 388
+b 34
+b 33
+b 1
+b 99
+b 101
+b 68
+b 82
+b 68
+b 1
+b 78
+b 1
+b 181
+b 183
+b 11
+b 40
+b 54
+b 56
+b 63
+b 79
+b 10
+b 24
+b 9
+b 1
+b 154
+b 169
+b 171
+b 169
+b 1
+b 161
+b 173
+b 60
+b 275
+b 277
+b 431
+b 433
+b 116
+b 139
+b 141
+b 143
+b 141
+b 1
+b 140
+b 210
+b 212
+b 210
+b 1
+b 126
+b 125
+b 1
+b 114
+b 27
+b 24
+b 1
+b 12
+b 10
+b 1
+b 87
+b 102
+b 85
+b 1
+b 21
+b 19
+b 1
+b 380
+b 396
+b 14
+b 16
+b 14
+b 175
+b 182
+b 99
+b 101
+b 103
+b 105
+b 99
+b 1
+b 17
+b 19
+b 21
+b 36
+b 35
+b 1
+b 7
+b 206
+b 208
+b 91
+b 90
+b 1
+b 45
+b 47
+b 49
+b 88
+b 90
+b 92
+b 116
+b 117
+b 129
+b 128
+b 1
+b 92
+b 100
+b 122
+b 202
+b 204
+b 4
+b 6
+b 175
+b 25
+b 98
+b 100
+b 3
+b 149
+b 0
+b 2
+b 31
+b 20
+b 22
+b 121
+b 123
+b 135
+b 121
+b 1
+b 30
+b 59
+b 0
+b 258
+b 260
+b 262
+b 264
+b 258
+b 1
+b 16
+b 86
+b 85
+b 1
+b 26
+b 28
+b 30
+b 32
+b 76
+b 102
+b 152
+b 101
+b 1
+b 148
+b 1
+b 175
+b 177
+b 186
+b 175
+b 1
+b 350
+b 352
+b 380
+b 377
+b 1
+b 231
+b 5
+b 28
+b 4
+b 22
+b 114
+b 112
+b 1
+b 180
+b 182
+b 9
+b 21
+b 15
+b 5
+b 433
+b 441
+b 137
+b 157
+b 339
+b 349
+b 337
+b 1
+b 86
+b 85
+b 1
+b 18
+b 23
+b 25
+b 23
+b 1
+b 24
+b 26
+b 92
+b 91
+b 1
+b 95
+b 92
+b 1
+b 328
+b 27
+b 24
+b 1
+b 163
+b 36
+b 35
+b 1
+b 0
+b 3
+b 19
+b 2
+b 1
+b 14
+b 1
+b 126
+b 128
+b 182
+b 181
+b 1
+b 8
+b 10
+b 12
+b 14
+b 12
+b 1
+b 163
+b 183
+b 185
+b 162
+b 1
+b 1109
+b 1123
+b 73
+b 193
+b 3
+b 195
+b 205
+b 133
+b 130
+b 1
+b 225
+b 237
+b 222
+b 1
+b 217
+b 214
+b 1
+b 53
+b 266
+b 264
+b 1
+b 60
+b 62
+b 62
+b 1
+b 27
+b 29
+b 47
+b 624
+b 626
+b 640
+b 119
+b 121
+b 89
+b 130
+b 7
+b 15
+b 14
+b 1
+b 156
+b 213
+b 175
+b 177
+b 179
+b 175
+b 1
+b 99
+b 198
+b 38
+b 58
+b 38
+b 1
+b 104
+b 20
+b 13
+b 102
+b 104
+b 99
+b 1
+b 46
+b 25
+b 798
+b 795
+b 1
+b 12
+b 12
+b 1
+b 652
+b 654
+b 654
+b 1
+b 8
+b 15
+b 17
+b 7
+b 1
+b 66
+b 68
+b 244
+b 28
+b 30
+b 32
+b 30
+b 1
+b 78
+b 98
+b 97
+b 1
+b 16
+b 110
+b 124
+b 109
+b 1
+b 119
+b 1
+b 16
+b 72
+b 80
+b 128
+b 70
+b 1
+b 126
+b 1
+b 197
+b 243
+b 118
+b 120
+b 179
+b 178
+b 1
+b 13
+b 15
+b 414
+b 448
+b 413
+b 1
+b 79
+b 81
+b 83
+b 79
+b 1
+b 29
+b 31
+b 29
+b 1
+b 106
+b 12
+b 10
+b 57
+b 18
+b 20
+b 28
+b 26
+b 1
+b 74
+b 70
+b 8
+b 0
+b 2
+b 69
+b 79
+b 97
+b 96
+b 1
+b 191
+b 193
+b 195
+b 62
+b 76
+b 0
+b 53
+b 55
+b 57
+b 4
+b 3
+b 1
+b 130
+b 132
+b 134
+b 24
+b 26
+b 23
+b 22
+b 1
+b 523
+b 525
+b 248
+b 29
+b 28
+b 1
+b 53
+b 0
+b 223
+b 237
+b 220
+b 1
+b 234
+b 1
+b 79
+b 31
+b 437
+b 439
+b 441
+b 439
+b 1
+b 93
+b 14
+b 11
+b 1
+b 1
+b 0
+b 1
+b 11
+b 58
+b 72
+b 55
+b 1
+b 52
+b 54
+b 56
+b 96
+b 98
+b 93
+b 1
+b 0
+b 181
+b 178
+b 1
+b 47
+b 44
+b 1
+b 166
+b 168
+b 168
+b 1
+b 28
+b 27
+b 1
+b 113
+b 115
+b 117
+b 213
+b 77
+b 18
+b 20
+b 22
+b 24
+b 22
+b 1
+b 18
+b 30
+b 15
+b 1
+b 27
+b 1
+b 233
+b 235
+b 35
+b 311
+b 349
+b 310
+b 1
+b 344
+b 1
+b 35
+b 61
+b 34
+b 1
+b 117
+b 125
+b 12
+b 14
+b 16
+b 12
+b 1
+b 231
+b 168
+b 167
+b 1
+b 68
+b 77
+b 117
+b 119
+b 127
+b 125
+b 1
+b 421
+b 24
+b 26
+b 54
+b 62
+b 53
+b 1
+b 36
+b 35
+b 1
+b 26
+b 135
+b 167
+b 134
+b 1
+b 65
+b 26
+b 25
+b 1
+b 4
+b 2
+b 1
+b 1
+b 8
+b 22
+b 5
+b 15
+b 147
+b 144
+b 1
+b 4
+b 47
+b 46
+b 1
+b 87
+b 89
+b 58
+b 368
+b 47
+b 49
+b 61
+b 44
+b 1
+b 58
+b 1
+b 127
+b 139
+b 14
+b 13
+b 1
+b 56
+b 3
+b 108
+b 110
+b 112
+b 114
+b 24
+b 38
+b 40
+b 23
+b 1
+b 472
+b 474
+b 476
+b 478
+b 34
+b 29
+b 28
+b 1
+b 64
+b 66
+b 103
+b 64
+b 1
+b 59
+b 61
+b 1
+b 304
+b 306
+b 308
+b 306
+b 1
+b 8
+b 74
+b 82
+b 73
+b 1
+b 78
+b 1
+b 25
+b 72
+b 16
+b 18
+b 79
+b 81
+b 83
+b 83
+b 1
+b 30
+b 28
+b 1
+b 9
+b 7
+b 1
+b 13
+b 137
+b 139
+b 141
+b 139
+b 1
+b 21
+b 23
+b 1
+b 81
+b 83
+b 85
+b 140
+b 142
+b 158
+b 138
+b 213
+b 136
+b 1
+b 70
+b 72
+b 70
+b 1
+b 246
+b 447
+b 449
+b 451
+b 453
+b 444
+b 1
+b 451
+b 1
+b 57
+b 0
+b 163
+b 165
+b 28
+b 17
+b 25
+b 39
+b 36
+b 1
+b 23
+b 70
+b 82
+b 166
+b 165
+b 1
+b 19
+b 119
+b 28
+b 13
+b 39
+b 77
+b 97
+b 76
+b 1
+b 54
+b 64
+b 66
+b 53
+b 1
+b 225
+b 227
+b 229
+b 22
+b 30
+b 601
+b 603
+b 605
+b 607
+b 601
+b 1
+b 24
+b 78
+b 22
+b 1
+b 75
+b 1
+b 68
+b 84
+b 83
+b 1
+b 6
+b 13
+b 49
+b 10
+b 1
+b 1148
+b 1145
+b 1
+b 1
+b 40
+b 42
+b 103
+b 48
+b 36
+b 60
+b 10
+b 9
+b 1
+b 68
+b 70
+b 160
+b 68
+b 1
+b 127
+b 156
+b 155
+b 1
+b 410
+b 412
+b 428
+b 7
+b 9
+b 11
+b 186
+b 188
+b 190
+b 63
+b 77
+b 62
+b 1
+b 73
+b 1
+b 3
+b 1115
+b 1117
+b 1119
+b 1115
+b 1
+b 41
+b 40
+b 1
+b 2
+b 69
+b 83
+b 66
+b 1
+b 80
+b 1
+b 88
+b 88
+b 1
+b 23
+b 22
+b 1
+b 82
+b 81
+b 1
+b 99
+b 96
+b 1
+b 14
+b 22
+b 30
+b 44
+b 28
+b 36
+b 26
+b 1
+b 33
+b 1
+b 174
+b 173
+b 1
+b 117
+b 2
+b 9
+b 11
+b 33
+b 118
+b 117
+b 1
+b 106
+b 130
+b 163
+b 184
+b 186
+b 88
+b 90
+b 92
+b 94
+b 88
+b 1
+b 20
+b 47
+b 46
+b 1
+b 166
+b 31
+b 41
+b 43
+b 41
+b 1
+b 26
+b 48
+b 234
+b 244
+b 254
+b 233
+b 1
+b 170
+b 168
+b 1
+b 20
+b 20
+b 1
+b 51
+b 78
+b 50
+b 1
+b 124
+b 104
+b 106
+b 108
+b 111
+b 113
+b 115
+b 108
+b 1
+b 113
+b 1
+b 67
+b 98
+b 35
+b 37
+b 39
+b 230
+b 342
+b 341
+b 1
+b 59
+b 91
+b 21
+b 126
+b 138
+b 123
+b 1
+b 107
+b 25
+b 58
+b 55
+b 246
+b 118
+b 20
+b 22
+b 17
+b 1
+b 87
+b 85
+b 1
+b 74
+b 90
+b 89
+b 1
+b 102
+b 40
+b 122
+b 121
+b 1
+b 408
+b 478
+b 138
+b 148
+b 109
+b 129
+b 50
+b 0
+b 2
+b 22
+b 194
+b 196
+b 194
+b 1
+b 211
+b 450
+b 468
+b 470
+b 449
+b 1
+b 94
+b 96
+b 98
+b 94
+b 1
+b 7
+b 9
+b 11
+b 13
+b 11
+b 1
+b 45
+b 8
+b 262
+b 348
+b 105
+b 107
+b 109
+b 107
+b 1
+b 92
+b 112
+b 16
+b 15
+b 84
+b 94
+b 83
+b 1
+b 124
+b 126
+b 128
+b 124
+b 1
+b 403
+b 405
+b 407
+b 409
+b 76
+b 64
+b 75
+b 77
+b 79
+b 81
+b 75
+b 1
+b 149
+b 151
+b 153
+b 155
+b 56
+b 56
+b 1
+b 11
+b 1
+b 27
+b 24
+b 1
+b 10
+b 12
+b 12
+b 10
+b 1
+b 71
+b 68
+b 1
+b 93
+b 150
+b 164
+b 147
+b 1
+b 161
+b 1
+b 1068
+b 1114
+b 41
+b 43
+b 61
+b 41
+b 1
+b 98
+b 100
+b 98
+b 1
+b 5
+b 412
+b 442
+b 103
+b 105
+b 471
+b 36
+b 12
+b 74
+b 73
+b 1
+b 2
+b 4
+b 55
+b 54
+b 1
+b 9
+b 100
+b 7
+b 1
+b 75
+b 77
+b 77
+b 1
+b 36
+b 48
+b 453
+b 465
+b 216
+b 218
+b 238
+b 235
+b 1
+b 615
+b 10
+b 7
+b 1
+b 0
+b 257
+b 446
+b 27
+b 26
+b 1
+b 55
+b 57
+b 69
+b 25
+b 27
+b 45
+b 22
+b 1
+b 42
+b 1
+b 72
+b 74
+b 76
+b 48
+b 56
+b 225
+b 3
+b 374
+b 400
+b 402
+b 400
+b 1
+b 14
+b 24
+b 23
+b 1
+b 18
+b 227
+b 90
+b 101
+b 125
+b 149
+b 148
+b 1
+b 77
+b 14
+b 16
+b 7
+b 9
+b 15
+b 43
+b 14
+b 1
+b 219
+b 217
+b 1
+b 47
+b 49
+b 18
+b 20
+b 22
+b 20
+b 1
+b 61
+b 63
+b 28
+b 66
+b 68
+b 27
+b 1
+b 61
+b 1
+b 195
+b 197
+b 51
+b 198
+b 214
+b 33
+b 41
+b 40
+b 1
+b 73
+b 75
+b 70
+b 72
+b 74
+b 159
+b 37
+b 33
+b 35
+b 37
+b 33
+b 1
+b 240
+b 21
+b 23
+b 21
+b 1
+b 51
+b 71
+b 50
+b 1
+b 43
+b 20
+b 19
+b 1
+b 5
+b 78
+b 77
+b 1
+b 31
+b 41
+b 79
+b 6
+b 10
+b 7
+b 1
+b 12
+b 21
+b 20
+b 1
+b 66
+b 68
+b 63
+b 1
+b 34
+b 33
+b 1
+b 14
+b 1
+b 68
+b 32
+b 108
+b 110
+b 126
+b 108
+b 1
+b 102
+b 333
+b 332
+b 1
+b 7
+b 15
+b 29
+b 14
+b 1
+b 11
+b 10
+b 1
+b 29
+b 54
+b 0
+b 40
+b 42
+b 36
+b 176
+b 176
+b 1
+b 45
+b 44
+b 1
+b 59
+b 69
+b 68
+b 1
+b 106
+b 114
+b 58
+b 60
+b 62
+b 60
+b 1
+b 192
+b 15
+b 14
+b 1
+b 127
+b 147
+b 149
+b 125
+b 1
+b 147
+b 1
+b 29
+b 31
+b 33
+b 41
+b 118
+b 120
+b 122
+b 118
+b 1
+b 43
+b 33
+b 0
+b 10
+b 24
+b 68
+b 70
+b 65
+b 1
+b 96
+b 95
+b 1
+b 84
+b 83
+b 1
+b 50
+b 52
+b 54
+b 29
+b 269
+b 133
+b 28
+b 25
+b 1
+b 29
+b 26
+b 1
+b 753
+b 755
+b 9
+b 73
+b 95
+b 26
+b 28
+b 30
+b 28
+b 1
+b 12
+b 14
+b 16
+b 26
+b 25
+b 1
+b 5
+b 26
+b 28
+b 26
+b 1
+b 180
+b 49
+b 11
+b 10
+b 1
+b 44
+b 56
+b 58
+b 56
+b 1
+b 23
+b 31
+b 33
+b 31
+b 1
+b 247
+b 35
+b 34
+b 1
+b 131
+b 137
+b 139
+b 100
+b 102
+b 104
+b 256
+b 258
+b 260
+b 326
+b 328
+b 330
+b 328
+b 1
+b 26
+b 28
+b 155
+b 157
+b 159
+b 130
+b 144
+b 146
+b 127
+b 1
+b 12
+b 14
+b 9
+b 1
+b 99
+b 101
+b 112
+b 111
+b 1
+b 192
+b 254
+b 189
+b 1
+b 44
+b 68
+b 67
+b 1
+b 9
+b 9
+b 11
+b 9
+b 1
+b 178
+b 123
+b 122
+b 1
+b 97
+b 107
+b 131
+b 96
+b 1
+b 1
+b 90
+b 92
+b 94
+b 98
+b 114
+b 125
+b 113
+b 1
+b 5
+b 7
+b 9
+b 26
+b 7
+b 1
+b 185
+b 1178
+b 1439
+b 31
+b 65
+b 67
+b 79
+b 77
+b 79
+b 27
+b 25
+b 1
+b 91
+b 153
+b 155
+b 89
+b 1
+b 90
+b 10
+b 362
+b 426
+b 442
+b 361
+b 1
+b 185
+b 201
+b 203
+b 183
+b 1
+b 79
+b 121
+b 131
+b 136
+b 146
+b 215
+b 217
+b 215
+b 1
+b 23
+b 19
+b 26
+b 28
+b 143
+b 167
+b 169
+b 171
+b 142
+b 1
+b 162
+b 1
+b 6
+b 8
+b 10
+b 12
+b 12
+b 14
+b 16
+b 52
+b 67
+b 178
+b 45
+b 43
+b 1
+b 3
+b 103
+b 103
+b 105
+b 107
+b 44
+b 46
+b 48
+b 83
+b 85
+b 464
+b 474
+b 476
+b 474
+b 1
+b 46
+b 70
+b 103
+b 119
+b 139
+b 102
+b 1
+b 29
+b 1
+b 9
+b 0
+b 1
+b 5
+b 1
+b 88
+b 90
+b 153
+b 52
+b 70
+b 51
+b 1
+b 66
+b 1
+b 39
+b 82
+b 78
+b 646
+b 28
+b 25
+b 1
+b 210
+b 209
+b 1
+b 71
+b 6
+b 22
+b 8
+b 7
+b 1
+b 19
+b 19
+b 1
+b 150
+b 226
+b 149
+b 1
+b 63
+b 65
+b 67
+b 77
+b 79
+b 33
+b 76
+b 86
+b 74
+b 1
+b 233
+b 235
+b 230
+b 1
+b 233
+b 1
+b 3
+b 5
+b 101
+b 10
+b 3
+b 146
+b 155
+b 157
+b 155
+b 1
+b 81
+b 83
+b 85
+b 15
+b 17
+b 53
+b 51
+b 53
+b 55
+b 52
+b 49
+b 1
+b 94
+b 96
+b 96
+b 1
+b 20
+b 17
+b 1
+b 19
+b 4
+b 13
+b 5
+b 7
+b 9
+b 11
+b 7
+b 1
+b 19
+b 63
+b 18
+b 1
+b 3
+b 4
+b 56
+b 100
+b 110
+b 112
+b 110
+b 1
+b 92
+b 76
+b 78
+b 226
+b 238
+b 224
+b 1
+b 235
+b 1
+b 7
+b 9
+b 46
+b 56
+b 124
+b 126
+b 128
+b 130
+b 28
+b 30
+b 32
+b 34
+b 32
+b 1
+b 46
+b 54
+b 164
+b 188
+b 37
+b 9
+b 58
+b 68
+b 70
+b 57
+b 1
+b 157
+b 159
+b 161
+b 163
+b 151
+b 41
+b 3
+b 13
+b 70
+b 69
+b 1
+b 22
+b 24
+b 139
+b 149
+b 138
+b 1
+b 100
+b 102
+b 104
+b 102
+b 1
+b 480
+b 609
+b 429
+b 431
+b 433
+b 113
+b 121
+b 119
+b 1
+b 3
+b 124
+b 134
+b 133
+b 1
+b 19
+b 18
+b 1
+b 48
+b 56
+b 22
+b 64
+b 7
+b 70
+b 67
+b 1
+b 2
+b 2
+b 1
+b 22
+b 28
+b 559
+b 561
+b 559
+b 1
+b 106
+b 108
+b 110
+b 112
+b 112
+b 1
+b 33
+b 35
+b 31
+b 204
+b 102
+b 119
+b 191
+b 118
+b 1
+b 44
+b 47
+b 46
+b 1
+b 15
+b 189
+b 322
+b 17
+b 33
+b 8
+b 10
+b 12
+b 10
+b 1
+b 211
+b 207
+b 11
+b 17
+b 15
+b 1
+b 101
+b 103
+b 14
+b 13
+b 1
+b 60
+b 70
+b 80
+b 79
+b 1
+b 175
+b 183
+b 22
+b 36
+b 36
+b 3
+b 8
+b 5
+b 1
+b 2
+b 4
+b 4
+b 1
+b 78
+b 80
+b 82
+b 80
+b 1
+b 100
+b 102
+b 3
+b 2
+b 1
+b 7
+b 17
+b 19
+b 6
+b 1
+b 169
+b 213
+b 215
+b 65
+b 74
+b 76
+b 74
+b 1
+b 287
+b 297
+b 179
+b 181
+b 183
+b 191
+b 176
+b 1
+b 227
+b 6
+b 8
+b 10
+b 12
+b 6
+b 1
+b 32
+b 5
+b 28
+b 30
+b 32
+b 42
+b 21
+b 23
+b 25
+b 27
+b 90
+b 106
+b 89
+b 1
+b 1
+b 95
+b 97
+b 31
+b 30
+b 1
+b 53
+b 69
+b 147
+b 0
+b 2
+b 25
+b 11
+b 92
+b 151
+b 6
+b 14
+b 13
+b 1
+b 240
+b 37
+b 30
+b 54
+b 64
+b 105
+b 123
+b 102
+b 1
+b 168
+b 167
+b 1
+b 103
+b 199
+b 68
+b 70
+b 92
+b 91
+b 1
+b 132
+b 134
+b 158
+b 157
+b 1
+b 62
+b 72
+b 74
+b 72
+b 1
+b 66
+b 68
+b 70
+b 63
+b 1
+b 68
+b 1
+b 40
+b 42
+b 44
+b 6
+b 14
+b 28
+b 28
+b 30
+b 104
+b 19
+b 39
+b 17
+b 19
+b 21
+b 61
+b 69
+b 20
+b 58
+b 60
+b 58
+b 1
+b 54
+b 81
+b 52
+b 1
+b 35
+b 32
+b 1
+b 152
+b 160
+b 159
+b 1
+b 7
+b 6
+b 1
+b 46
+b 48
+b 50
+b 52
+b 52
+b 1
+b 41
+b 43
+b 54
+b 225
+b 31
+b 1055
+b 73
+b 97
+b 96
+b 1
+b 76
+b 78
+b 88
+b 636
+b 34
+b 16
+b 18
+b 20
+b 20
+b 22
+b 24
+b 26
+b 20
+b 1
+b 117
+b 190
+b 114
+b 1
+b 187
+b 1
+b 162
+b 123
+b 1022
+b 1143
+b 1021
+b 1
+b 1138
+b 1
+b 19
+b 4
+b 15
+b 27
+b 14
+b 1
+b 261
+b 305
+b 343
+b 260
+b 1
+b 21
+b 23
+b 23
+b 1
+b 84
+b 76
+b 85
+b 84
+b 1
+b 22
+b 39
+b 28
+b 27
+b 1
+b 98
+b 126
+b 125
+b 1
+b 6
+b 20
+b 26
+b 70
+b 54
+b 56
+b 0
+b 2
+b 97
+b 0
+b 1
+b 1
+b 4
+b 6
+b 8
+b 4
+b 1
+b 12
+b 14
+b 103
+b 12
+b 1
+b 66
+b 68
+b 70
+b 66
+b 1
+b 403
+b 0
+b 2
+b 38
+b 37
+b 1
+b 134
+b 133
+b 1
+b 5
+b 152
+b 11
+b 41
+b 38
+b 1
+b 87
+b 89
+b 91
+b 93
+b 87
+b 1
+b 6
+b 8
+b 10
+b 20
+b 8
+b 1
+b 232
+b 234
+b 236
+b 234
+b 1
+b 36
+b 35
+b 1
+b 73
+b 75
+b 42
+b 55
+b 154
+b 156
+b 154
+b 1
+b 155
+b 1473
+b 31
+b 22
+b 100
+b 205
+b 211
+b 203
+b 1
+b 1
+b 0
+b 1
+b 6
+b 8
+b 10
+b 12
+b 10
+b 22
+b 79
+b 81
+b 83
+b 85
+b 10
+b 22
+b 9
+b 1
+b 93
+b 183
+b 168
+b 170
+b 165
+b 1
+b 194
+b 192
+b 1
+b 15
+b 43
+b 14
+b 1
+b 0
+b 2
+b 10
+b 26
+b 60
+b 25
+b 1
+b 27
+b 29
+b 31
+b 27
+b 1
+b 16
+b 15
+b 1
+b 27
+b 0
+b 10
+b 181
+b 183
+b 185
+b 187
+b 183
+b 1
+b 410
+b 444
+b 475
+b 474
+b 1
+b 32
+b 31
+b 1
+b 27
+b 29
+b 14
+b 16
+b 18
+b 16
+b 1
+b 0
+b 20
+b 9
+b 39
+b 11
+b 53
+b 14
+b 44
+b 43
+b 1
+b 46
+b 48
+b 47
+b 55
+b 57
+b 46
+b 1
+b 76
+b 90
+b 75
+b 1
+b 85
+b 1
+b 101
+b 103
+b 115
+b 114
+b 1
+b 596
+b 598
+b 600
+b 598
+b 1
+b 136
+b 151
+b 135
+b 1
+b 53
+b 255
+b 252
+b 1
+b 101
+b 150
+b 92
+b 91
+b 1
+b 49
+b 1
+b 281
+b 283
+b 285
+b 281
+b 1
+b 24
+b 26
+b 11
+b 3
+b 5
+b 257
+b 259
+b 120
+b 76
+b 91
+b 66
+b 86
+b 65
+b 1
+b 61
+b 63
+b 10
+b 77
+b 37
+b 6
+b 17
+b 54
+b 56
+b 71
+b 70
+b 1
+b 59
+b 1
+b 44
+b 79
+b 131
+b 133
+b 135
+b 131
+b 1
+b 47
+b 83
+b 96
+b 12
+b 1
+b 26
+b 24
+b 1
+b 21
+b 21
+b 1
+b 18
+b 20
+b 126
+b 134
+b 8
+b 20
+b 22
+b 20
+b 1
+b 320
+b 322
+b 324
+b 326
+b 317
+b 1
+b 324
+b 1
+b 75
+b 77
+b 194
+b 53
+b 6
+b 87
+b 89
+b 17
+b 127
+b 4
+b 69
+b 66
+b 1
+b 0
+b 2
+b 2
+b 1
+b 35
+b 0
+b 2
+b 8
+b 271
+b 269
+b 1
+b 115
+b 117
+b 91
+b 63
+b 19
+b 22
+b 78
+b 77
+b 1
+b 68
+b 8
+b 295
+b 297
+b 295
+b 1
+b 200
+b 14
+b 26
+b 12
+b 1
+b 46
+b 45
+b 1
+b 108
+b 59
+b 113
+b 115
+b 117
+b 119
+b 117
+b 1
+b 232
+b 240
+b 229
+b 1
+b 146
+b 145
+b 1
+b 62
+b 90
+b 10
+b 104
+b 15
+b 100
+b 191
+b 6
+b 24
+b 23
+b 1
+b 6
+b 12
+b 25
+b 27
+b 11
+b 387
+b 182
+b 177
+b 176
+b 1
+b 0
+b 2
+b 12
+b 11
+b 1
+b 83
+b 97
+b 104
+b 103
+b 1
+b 3
+b 12
+b 15
+b 31
+b 170
+b 169
+b 1
+b 51
+b 57
+b 429
+b 431
+b 433
+b 435
+b 350
+b 358
+b 441
+b 356
+b 1
+b 435
+b 437
+b 439
+b 437
+b 1
+b 314
+b 312
+b 1
+b 345
+b 347
+b 347
+b 1
+b 192
+b 189
+b 1
+b 0
+b 2
+b 10
+b 9
+b 1
+b 69
+b 71
+b 73
+b 157
+b 156
+b 1
+b 144
+b 152
+b 116
+b 118
+b 120
+b 122
+b 122
+b 1
+b 5
+b 7
+b 9
+b 17
+b 51
+b 16
+b 86
+b 3
+b 85
+b 93
+b 95
+b 93
+b 1
+b 338
+b 400
+b 337
+b 1
+b 9
+b 175
+b 177
+b 179
+b 1409
+b 1407
+b 1
+b 54
+b 56
+b 51
+b 1
+b 23
+b 25
+b 27
+b 29
+b 27
+b 1
+b 332
+b 329
+b 1
+b 7
+b 6
+b 1
+b 229
+b 240
+b 310
+b 239
+b 1
+b 306
+b 1
+b 90
+b 72
+b 74
+b 72
+b 1
+b 97
+b 58
+b 47
+b 127
+b 147
+b 46
+b 1
+b 122
+b 1
+b 111
+b 111
+b 1
+b 19
+b 33
+b 16
+b 1
+b 140
+b 184
+b 137
+b 1
+b 182
+b 1
+b 111
+b 317
+b 9
+b 18
+b 20
+b 18
+b 1
+b 188
+b 90
+b 119
+b 121
+b 126
+b 259
+b 256
+b 1
+b 6
+b 6
+b 1
+b 10
+b 12
+b 77
+b 76
+b 1
+b 91
+b 93
+b 120
+b 934
+b 1386
+b 1406
+b 933
+b 1
+b 1403
+b 1
+b 118
+b 120
+b 118
+b 1
+b 23
+b 163
+b 165
+b 201
+b 199
+b 1
+b 21
+b 20
+b 1
+b 0
+b 2
+b 0
+b 1
+b 166
+b 174
+b 176
+b 167
+b 207
+b 76
+b 78
+b 80
+b 82
+b 132
+b 3
+b 3
+b 13
+b 140
+b 142
+b 144
+b 146
+b 142
+b 1
+b 19
+b 45
+b 44
+b 1
+b 1
+b 417
+b 9
+b 5
+b 7
+b 9
+b 11
+b 5
+b 1
+b 14
+b 16
+b 16
+b 1
+b 25
+b 24
+b 1
+b 159
+b 169
+b 178
+b 158
+b 1
+b 222
+b 224
+b 279
+b 56
+b 58
+b 352
+b 437
+b 439
+b 441
+b 443
+b 1001
+b 1000
+b 1
+b 73
+b 48
+b 30
+b 39
+b 2
+b 4
+b 74
+b 96
+b 4
+b 6
+b 8
+b 57
+b 59
+b 61
+b 19
+b 21
+b 23
+b 19
+b 1
+b 315
+b 317
+b 319
+b 315
+b 1
+b 320
+b 28
+b 43
+b 45
+b 69
+b 144
+b 144
+b 1
+b 64
+b 61
+b 1
+b 28
+b 308
+b 32
+b 34
+b 36
+b 32
+b 1
+b 68
+b 70
+b 75
+b 12
+b 14
+b 19
+b 17
+b 1
+b 21
+b 23
+b 35
+b 29
+b 117
+b 156
+b 28
+b 1
+b 112
+b 1
+b 101
+b 103
+b 113
+b 376
+b 378
+b 388
+b 46
+b 48
+b 283
+b 282
+b 1
+b 33
+b 35
+b 37
+b 39
+b 174
+b 17
+b 321
+b 13
+b 10
+b 1
+b 156
+b 174
+b 437
+b 439
+b 453
+b 437
+b 1
+b 36
+b 38
+b 40
+b 42
+b 59
+b 61
+b 63
+b 102
+b 131
+b 133
+b 131
+b 1
+b 70
+b 72
+b 74
+b 76
+b 234
+b 236
+b 238
+b 236
+b 1
+b 95
+b 93
+b 1
+b 0
+b 2
+b 111
+b 109
+b 1
+b 101
+b 468
+b 467
+b 1
+b 90
+b 15
+b 24
+b 26
+b 28
+b 30
+b 24
+b 1
+b 3
+b 5
+b 3
+b 1
+b 45
+b 1
+b 320
+b 319
+b 1
+b 27
+b 37
+b 36
+b 1
+b 234
+b 305
+b 231
+b 1
+b 303
+b 1
+b 3
+b 31
+b 30
+b 1
+b 310
+b 254
+b 256
+b 254
+b 1
+b 90
+b 90
+b 1
+b 284
+b 121
+b 15
+b 14
+b 1
+b 93
+b 92
+b 1
+b 11
+b 31
+b 8
+b 1
+b 18
+b 44
+b 312
+b 314
+b 316
+b 312
+b 1
+b 420
+b 428
+b 430
+b 432
+b 428
+b 1
+b 3
+b 5
+b 173
+b 27
+b 56
+b 78
+b 101
+b 8
+b 42
+b 44
+b 46
+b 48
+b 46
+b 1
+b 125
+b 119
+b 14
+b 11
+b 1
+b 107
+b 109
+b 104
+b 1
+b 58
+b 57
+b 1
+b 7
+b 15
+b 4
+b 1
+b 1179
+b 1481
+b 46
+b 45
+b 1
+b 0
+b 2
+b 18
+b 0
+b 1
+b 52
+b 49
+b 1
+b 5
+b 1131
+b 1133
+b 1135
+b 1133
+b 1
+b 23
+b 1
+b 33
+b 35
+b 37
+b 35
+b 1
+b 220
+b 32
+b 65
+b 142
+b 141
+b 1
+b 12
+b 9
+b 1
+b 38
+b 48
+b 55
+b 63
+b 8
+b 10
+b 13
+b 12
+b 1
+b 211
+b 210
+b 1
+b 365
+b 5
+b 18
+b 1
+b 24
+b 23
+b 1
+b 5
+b 1
+b 80
+b 82
+b 84
+b 158
+b 160
+b 16
+b 30
+b 28
+b 1
+b 187
+b 237
+b 184
+b 1
+b 530
+b 595
+b 530
+b 1
+b 210
+b 220
+b 219
+b 1
+b 98
+b 116
+b 113
+b 1
+b 175
+b 177
+b 179
+b 29
+b 9
+b 11
+b 152
+b 90
+b 7
+b 16
+b 18
+b 6
+b 1
+b 28
+b 1
+b 14
+b 270
+b 294
+b 302
+b 324
+b 354
+b 319
+b 95
+b 100
+b 118
+b 8
+b 7
+b 1
+b 269
+b 61
+b 230
+b 232
+b 242
+b 230
+b 1
+b 105
+b 14
+b 72
+b 74
+b 76
+b 78
+b 76
+b 1
+b 247
+b 12
+b 11
+b 1
+b 4
+b 6
+b 8
+b 10
+b 55
+b 57
+b 701
+b 8
+b 59
+b 242
+b 239
+b 1
+b 114
+b 142
+b 141
+b 1
+b 30
+b 32
+b 34
+b 32
+b 1
+b 19
+b 28
+b 40
+b 42
+b 40
+b 1
+b 27
+b 29
+b 31
+b 33
+b 31
+b 1
+b 246
+b 264
+b 21
+b 37
+b 148
+b 150
+b 152
+b 56
+b 53
+b 52
+b 1
+b 7
+b 448
+b 479
+b 478
+b 1
+b 494
+b 496
+b 498
+b 500
+b 494
+b 1
+b 136
+b 138
+b 140
+b 142
+b 136
+b 1
+b 29
+b 70
+b 80
+b 4
+b 2
+b 55
+b 57
+b 59
+b 19
+b 96
+b 48
+b 47
+b 1
+b 59
+b 61
+b 61
+b 1
+b 4
+b 6
+b 8
+b 10
+b 82
+b 79
+b 1
+b 17
+b 65
+b 84
+b 65
+b 1
+b 213
+b 212
+b 1
+b 3
+b 52
+b 62
+b 64
+b 51
+b 1
+b 230
+b 232
+b 234
+b 1428
+b 1430
+b 1432
+b 1434
+b 1428
+b 1
+b 97
+b 99
+b 57
+b 56
+b 1
+b 43
+b 43
+b 1
+b 100
+b 110
+b 10
+b 12
+b 6
+b 5
+b 1
+b 73
+b 75
+b 77
+b 70
+b 1
+b 430
+b 432
+b 434
+b 427
+b 1
+b 199
+b 207
+b 78
+b 101
+b 71
+b 73
+b 71
+b 1
+b 1
+b 436
+b 456
+b 455
+b 1
+b 12
+b 14
+b 56
+b 55
+b 1
+b 173
+b 61
+b 63
+b 1
+b 4
+b 6
+b 8
+b 10
+b 18
+b 20
+b 18
+b 1
+b 25
+b 37
+b 63
+b 72
+b 74
+b 93
+b 69
+b 1
+b 175
+b 177
+b 179
+b 192
+b 73
+b 95
+b 73
+b 1
+b 196
+b 195
+b 1
+b 279
+b 286
+b 285
+b 1
+b 53
+b 83
+b 85
+b 50
+b 1
+b 83
+b 1
+b 8
+b 28
+b 30
+b 165
+b 228
+b 227
+b 1
+b 35
+b 45
+b 10
+b 12
+b 14
+b 12
+b 1
+b 96
+b 98
+b 100
+b 12
+b 121
+b 111
+b 121
+b 123
+b 110
+b 1
+b 8
+b 24
+b 26
+b 24
+b 1
+b 7
+b 9
+b 9
+b 8
+b 1
+b 130
+b 4
+b 752
+b 754
+b 756
+b 754
+b 1
+b 306
+b 0
+b 2
+b 10
+b 62
+b 5
+b 318
+b 10
+b 18
+b 17
+b 1
+b 24
+b 34
+b 33
+b 1
+b 30
+b 30
+b 1
+b 4
+b 24
+b 3
+b 1
+b 48
+b 68
+b 76
+b 86
+b 108
+b 85
+b 1
+b 339
+b 359
+b 3
+b 36
+b 785
+b 787
+b 789
+b 791
+b 72
+b 90
+b 124
+b 132
+b 134
+b 136
+b 499
+b 501
+b 503
+b 505
+b 75
+b 77
+b 79
+b 77
+b 1
+b 329
+b 339
+b 94
+b 112
+b 7
+b 9
+b 11
+b 13
+b 36
+b 124
+b 126
+b 123
+b 1
+b 8
+b 61
+b 60
+b 1
+b 217
+b 219
+b 1
+b 3
+b 11
+b 170
+b 168
+b 1
+b 125
+b 3
+b 19
+b 112
+b 186
+b 185
+b 1
+b 0
+b 50
+b 52
+b 54
+b 3
+b 5
+b 20
+b 3
+b 1
+b 81
+b 91
+b 192
+b 202
+b 248
+b 108
+b 233
+b 232
+b 1
+b 5
+b 4
+b 1
+b 6
+b 52
+b 50
+b 1
+b 4
+b 6
+b 34
+b 33
+b 1
+b 14
+b 14
+b 16
+b 14
+b 1
+b 22
+b 24
+b 26
+b 22
+b 1
+b 44
+b 46
+b 46
+b 1
+b 196
+b 195
+b 1
+b 28
+b 50
+b 25
+b 1
+b 29
+b 31
+b 33
+b 35
+b 37
+b 31
+b 1
+b 182
+b 44
+b 93
+b 103
+b 90
+b 1
+b 7
+b 4
+b 1
+b 67
+b 69
+b 106
+b 67
+b 1
+b 7
+b 9
+b 11
+b 7
+b 1
+b 1026
+b 1034
+b 1025
+b 1
+b 276
+b 294
+b 296
+b 275
+b 1
+b 265
+b 267
+b 269
+b 271
+b 265
+b 1
+b 60
+b 70
+b 72
+b 59
+b 1
+b 247
+b 249
+b 249
+b 1
+b 71
+b 70
+b 1
+b 47
+b 177
+b 193
+b 195
+b 127
+b 25
+b 67
+b 80
+b 168
+b 228
+b 230
+b 39
+b 32
+b 23
+b 25
+b 27
+b 29
+b 27
+b 1
+b 1001
+b 8
+b 71
+b 70
+b 1
+b 495
+b 509
+b 342
+b 344
+b 0
+b 2
+b 294
+b 296
+b 298
+b 300
+b 86
+b 94
+b 85
+b 1
+b 90
+b 1
+b 5
+b 1121
+b 2
+b 11
+b 51
+b 77
+b 10
+b 1
+b 46
+b 48
+b 3
+b 15
+b 41
+b 43
+b 12
+b 14
+b 16
+b 18
+b 18
+b 1
+b 167
+b 175
+b 166
+b 1
+b 171
+b 1
+b 18
+b 102
+b 57
+b 56
+b 1
+b 5
+b 142
+b 99
+b 46
+b 48
+b 58
+b 46
+b 1
+b 169
+b 33
+b 32
+b 40
+b 42
+b 40
+b 1
+b 183
+b 185
+b 187
+b 185
+b 1
+b 220
+b 230
+b 650
+b 762
+b 36
+b 110
+b 35
+b 1
+b 153
+b 52
+b 51
+b 1
+b 12
+b 11
+b 1
+b 455
+b 513
+b 515
+b 207
+b 206
+b 1
+b 71
+b 183
+b 191
+b 122
+b 124
+b 132
+b 113
+b 319
+b 321
+b 11
+b 19
+b 446
+b 469
+b 89
+b 134
+b 163
+b 88
+b 1
+b 101
+b 189
+b 6
+b 43
+b 147
+b 716
+b 27
+b 49
+b 63
+b 201
+b 218
+b 200
+b 1
+b 213
+b 1
+b 5
+b 7
+b 9
+b 2
+b 1
+b 7
+b 1
+b 5
+b 7
+b 9
+b 11
+b 20
+b 22
+b 36
+b 20
+b 1
+b 29
+b 2
+b 12
+b 25
+b 27
+b 29
+b 138
+b 12
+b 258
+b 260
+b 4
+b 13
+b 27
+b 41
+b 12
+b 1
+b 23
+b 1
+b 92
+b 94
+b 96
+b 79
+b 81
+b 83
+b 85
+b 39
+b 57
+b 65
+b 26
+b 42
+b 49
+b 23
+b 1
+b 46
+b 1
+b 163
+b 165
+b 251
+b 1410
+b 1408
+b 1
+b 5
+b 23
+b 3
+b 1
+b 21
+b 63
+b 54
+b 75
+b 77
+b 53
+b 1
+b 89
+b 91
+b 93
+b 86
+b 1
+b 32
+b 34
+b 0
+b 83
+b 186
+b 111
+b 110
+b 1
+b 43
+b 45
+b 98
+b 114
+b 129
+b 97
+b 1
+b 110
+b 1
+b 168
+b 170
+b 172
+b 13
+b 15
+b 17
+b 27
+b 13
+b 1
+b 30
+b 39
+b 27
+b 1
+b 37
+b 1
+b 6
+b 8
+b 10
+b 87
+b 89
+b 97
+b 84
+b 1
+b 94
+b 1
+b 303
+b 305
+b 313
+b 95
+b 2
+b 12
+b 14
+b 24
+b 23
+b 1
+b 24
+b 15
+b 139
+b 153
+b 161
+b 138
+b 1
+b 149
+b 1
+b 381
+b 380
+b 1
+b 79
+b 81
+b 56
+b 58
+b 60
+b 62
+b 58
+b 1
+b 106
+b 108
+b 110
+b 112
+b 103
+b 1
+b 110
+b 1
+b 590
+b 587
+b 1
+b 3
+b 0
+b 1
+b 41
+b 43
+b 13
+b 12
+b 1
+b 97
+b 141
+b 141
+b 1
+b 10
+b 12
+b 130
+b 132
+b 134
+b 136
+b 29
+b 52
+b 60
+b 21
+b 37
+b 18
+b 1
+b 46
+b 48
+b 50
+b 218
+b 232
+b 234
+b 217
+b 1
+b 177
+b 2
+b 4
+b 18
+b 102
+b 130
+b 5
+b 18
+b 86
+b 85
+b 1
+b 15
+b 17
+b 21
+b 20
+b 1
+b 21
+b 20
+b 1
+b 6
+b 8
+b 85
+b 94
+b 40
+b 49
+b 157
+b 159
+b 251
+b 250
+b 1
+b 28
+b 54
+b 26
+b 1
+b 4
+b 124
+b 126
+b 128
+b 121
+b 1
+b 581
+b 580
+b 1
+b 144
+b 146
+b 55
+b 57
+b 59
+b 61
+b 55
+b 1
+b 30
+b 236
+b 7
+b 6
+b 1
+b 73
+b 174
+b 1
+b 6
+b 23
+b 3
+b 1
+b 9
+b 6
+b 1
+b 137
+b 136
+b 1
+b 12
+b 11
+b 1
+b 172
+b 3
+b 113
+b 115
+b 428
+b 149
+b 161
+b 201
+b 148
+b 1
+b 249
+b 295
+b 249
+b 1
+b 290
+b 1
+b 516
+b 524
+b 515
+b 1
+b 133
+b 18
+b 20
+b 22
+b 22
+b 1
+b 168
+b 10
+b 96
+b 157
+b 95
+b 1
+b 155
+b 1
+b 232
+b 234
+b 236
+b 60
+b 74
+b 60
+b 1
+b 70
+b 1
+b 31
+b 53
+b 63
+b 52
+b 1
+b 59
+b 1
+b 3
+b 12
+b 2
+b 1
+b 125
+b 127
+b 122
+b 1
+b 5
+b 3
+b 1
+b 162
+b 182
+b 161
+b 1
+b 25
+b 27
+b 29
+b 25
+b 1
+b 12
+b 13
+b 10
+b 1
+b 124
+b 168
+b 168
+b 1
+b 16
+b 56
+b 72
+b 71
+b 1
+b 19
+b 16
+b 0
+b 134
+b 3
+b 5
+b 48
+b 3
+b 0
+b 1
+b 78
+b 80
+b 82
+b 1
+b 28
+b 30
+b 32
+b 105
+b 103
+b 1
+b 157
+b 22
+b 24
+b 26
+b 19
+b 1
+b 125
+b 158
+b 118
+b 164
+b 87
+b 89
+b 9
+b 4
+b 21
+b 386
+b 395
+b 397
+b 22
+b 24
+b 26
+b 28
+b 120
+b 119
+b 1
+b 56
+b 56
+b 1
+b 41
+b 38
+b 1
+b 23
+b 62
+b 64
+b 66
+b 68
+b 141
+b 156
+b 164
+b 155
+b 1
+b 142
+b 3
+b 398
+b 486
+b 397
+b 1
+b 83
+b 94
+b 96
+b 8
+b 98
+b 10
+b 7
+b 79
+b 7
+b 1
+b 74
+b 1
+b 173
+b 175
+b 177
+b 176
+b 0
+b 2
+b 15
+b 2
+b 1
+b 44
+b 54
+b 42
+b 427
+b 0
+b 83
+b 131
+b 141
+b 140
+b 1
+b 294
+b 296
+b 298
+b 285
+b 186
+b 5
+b 7
+b 9
+b 11
+b 5
+b 1
+b 454
+b 456
+b 458
+b 460
+b 458
+b 1
+b 138
+b 154
+b 156
+b 137
+b 1
+b 12
+b 26
+b 92
+b 94
+b 89
+b 1
+b 3
+b 1
+b 1
+b 57
+b 56
+b 1
+b 8
+b 10
+b 88
+b 56
+b 106
+b 108
+b 116
+b 115
+b 1
+b 8
+b 18
+b 14
+b 11
+b 16
+b 24
+b 46
+b 62
+b 44
+b 1
+b 60
+b 1
+b 64
+b 18
+b 73
+b 75
+b 77
+b 79
+b 39
+b 55
+b 36
+b 1
+b 52
+b 1
+b 6
+b 8
+b 10
+b 12
+b 6
+b 1
+b 164
+b 208
+b 10
+b 62
+b 107
+b 109
+b 111
+b 107
+b 1
+b 84
+b 86
+b 100
+b 60
+b 59
+b 1
+b 69
+b 98
+b 108
+b 110
+b 108
+b 1
+b 188
+b 187
+b 1
+b 11
+b 11
+b 1
+b 19
+b 21
+b 23
+b 1
+b 636
+b 638
+b 31
+b 30
+b 3
+b 219
+b 221
+b 223
+b 225
+b 223
+b 1
+b 12
+b 2
+b 67
+b 77
+b 66
+b 1
+b 6
+b 72
+b 74
+b 76
+b 78
+b 76
+b 1
+b 205
+b 207
+b 209
+b 24
+b 45
+b 43
+b 1
+b 104
+b 106
+b 24
+b 37
+b 45
+b 53
+b 44
+b 1
+b 56
+b 78
+b 54
+b 1
+b 7
+b 5
+b 1
+b 72
+b 71
+b 1
+b 0
+b 2
+b 0
+b 1
+b 15
+b 14
+b 22
+b 13
+b 1
+b 14
+b 3
+b 60
+b 62
+b 224
+b 62
+b 84
+b 107
+b 67
+b 93
+b 71
+b 157
+b 42
+b 41
+b 1
+b 70
+b 60
+b 62
+b 116
+b 115
+b 1
+b 12
+b 22
+b 217
+b 227
+b 229
+b 134
+b 160
+b 159
+b 1
+b 222
+b 224
+b 226
+b 228
+b 222
+b 1
+b 7
+b 7
+b 69
+b 71
+b 73
+b 69
+b 1
+b 68
+b 70
+b 82
+b 592
+b 594
+b 596
+b 598
+b 592
+b 1
+b 382
+b 6
+b 5
+b 1
+b 1
+b 12
+b 40
+b 104
+b 37
+b 1
+b 10
+b 7
+b 9
+b 7
+b 1
+b 87
+b 89
+b 84
+b 1
+b 9
+b 8
+b 1
+b 124
+b 126
+b 128
+b 124
+b 1
+b 54
+b 56
+b 21
+b 128
+b 130
+b 132
+b 134
+b 128
+b 1
+b 33
+b 35
+b 37
+b 33
+b 1
+b 116
+b 29
+b 278
+b 288
+b 65
+b 64
+b 1
+b 84
+b 215
+b 13
+b 12
+b 1
+b 69
+b 35
+b 105
+b 98
+b 48
+b 50
+b 45
+b 1
+b 47
+b 45
+b 1
+b 15
+b 31
+b 15
+b 1
+b 18
+b 36
+b 162
+b 164
+b 166
+b 168
+b 96
+b 105
+b 45
+b 47
+b 49
+b 47
+b 1
+b 23
+b 20
+b 1
+b 32
+b 18
+b 58
+b 18
+b 1
+b 115
+b 125
+b 114
+b 1
+b 121
+b 1
+b 537
+b 102
+b 119
+b 121
+b 101
+b 1
+b 11
+b 13
+b 15
+b 17
+b 12
+b 25
+b 23
+b 1
+b 0
+b 2
+b 13
+b 15
+b 17
+b 47
+b 10
+b 1
+b 68
+b 86
+b 1410
+b 1412
+b 23
+b 22
+b 1
+b 2
+b 4
+b 6
+b 124
+b 126
+b 136
+b 135
+b 1
+b 37
+b 71
+b 117
+b 36
+b 1
+b 66
+b 1
+b 16
+b 18
+b 26
+b 62
+b 61
+b 1
+b 4
+b 1
+b 224
+b 30
+b 236
+b 252
+b 14
+b 127
+b 139
+b 162
+b 12
+b 12
+b 14
+b 16
+b 14
+b 1
+b 43
+b 20
+b 297
+b 299
+b 301
+b 303
+b 297
+b 1
+b 37
+b 36
+b 1
+b 26
+b 61
+b 63
+b 65
+b 67
+b 1427
+b 1449
+b 1424
+b 1
+b 14
+b 13
+b 1
+b 0
+b 2
+b 43
+b 6
+b 4
+b 1
+b 542
+b 544
+b 542
+b 1
+b 6
+b 37
+b 6
+b 77
+b 76
+b 1
+b 28
+b 30
+b 32
+b 30
+b 1
+b 196
+b 198
+b 200
+b 52
+b 59
+b 58
+b 1
+b 137
+b 70
+b 72
+b 74
+b 529
+b 531
+b 533
+b 535
+b 533
+b 1
+b 16
+b 42
+b 44
+b 128
+b 2
+b 32
+b 34
+b 29
+b 1
+b 1
+b 0
+b 1
+b 3
+b 17
+b 19
+b 2
+b 1
+b 752
+b 754
+b 756
+b 28
+b 30
+b 32
+b 25
+b 1
+b 30
+b 1
+b 5
+b 7
+b 9
+b 11
+b 803
+b 802
+b 1
+b 6
+b 8
+b 0
+b 69
+b 79
+b 89
+b 88
+b 1
+b 74
+b 7
+b 6
+b 1
+b 1
+b 32
+b 48
+b 239
+b 241
+b 243
+b 245
+b 45
+b 25
+b 27
+b 25
+b 1
+b 53
+b 52
+b 1
+b 5
+b 73
+b 5
+b 17
+b 68
+b 96
+b 166
+b 58
+b 60
+b 2
+b 4
+b 47
+b 49
+b 51
+b 47
+b 1
+b 170
+b 1
+b 11
+b 260
+b 257
+b 1
+b 66
+b 68
+b 72
+b 74
+b 69
+b 1
+b 6
+b 5
+b 1
+b 271
+b 273
+b 317
+b 32
+b 34
+b 100
+b 102
+b 140
+b 20
+b 22
+b 24
+b 254
+b 256
+b 67
+b 16
+b 89
+b 18
+b 20
+b 22
+b 24
+b 14
+b 16
+b 18
+b 4
+b 145
+b 147
+b 145
+b 1
+b 52
+b 494
+b 508
+b 46
+b 70
+b 68
+b 70
+b 7
+b 380
+b 79
+b 81
+b 79
+b 1
+b 30
+b 32
+b 34
+b 152
+b 172
+b 22
+b 33
+b 25
+b 25
+b 1
+b 16
+b 13
+b 1
+b 82
+b 37
+b 80
+b 88
+b 90
+b 88
+b 1
+b 78
+b 86
+b 77
+b 1
+b 82
+b 1
+b 13
+b 144
+b 160
+b 162
+b 141
+b 1
+b 160
+b 1
+b 157
+b 177
+b 150
+b 190
+b 192
+b 147
+b 1
+b 190
+b 1
+b 277
+b 307
+b 323
+b 276
+b 1
+b 52
+b 49
+b 1
+b 13
+b 10
+b 1
+b 10
+b 26
+b 59
+b 9
+b 1
+b 21
+b 1
+b 112
+b 114
+b 21
+b 146
+b 31
+b 28
+b 1
+b 9
+b 6
+b 1
+b 15
+b 0
+b 125
+b 81
+b 443
+b 445
+b 447
+b 449
+b 443
+b 1
+b 85
+b 101
+b 103
+b 40
+b 3
+b 335
+b 4
+b 6
+b 4
+b 1
+b 228
+b 240
+b 225
+b 1
+b 1
+b 0
+b 1
+b 56
+b 32
+b 34
+b 32
+b 1
+b 27
+b 29
+b 56
+b 29
+b 1
+b 11
+b 13
+b 1
+b 193
+b 192
+b 1
+b 49
+b 81
+b 167
+b 169
+b 164
+b 1
+b 57
+b 3
+b 62
+b 20
+b 22
+b 20
+b 1
+b 134
+b 136
+b 136
+b 1
+b 7
+b 6
+b 1
+b 88
+b 87
+b 1
+b 45
+b 35
+b 37
+b 39
+b 37
+b 1
+b 32
+b 34
+b 32
+b 1
+b 14
+b 16
+b 9
+b 19
+b 176
+b 87
+b 1
+b 9
+b 8
+b 1
+b 107
+b 109
+b 119
+b 104
+b 1
+b 116
+b 1
+b 27
+b 29
+b 37
+b 35
+b 1
+b 64
+b 66
+b 1
+b 183
+b 226
+b 223
+b 1
+b 4
+b 237
+b 236
+b 1
+b 3
+b 13
+b 35
+b 37
+b 39
+b 88
+b 103
+b 127
+b 136
+b 138
+b 125
+b 1
+b 136
+b 1
+b 14
+b 32
+b 13
+b 1
+b 14
+b 2
+b 4
+b 6
+b 42
+b 81
+b 105
+b 107
+b 109
+b 111
+b 107
+b 1
+b 289
+b 288
+b 1
+b 179
+b 179
+b 1
+b 24
+b 26
+b 28
+b 58
+b 76
+b 73
+b 1
+b 35
+b 34
+b 1
+b 155
+b 73
+b 75
+b 73
+b 1
+b 34
+b 42
+b 7
+b 35
+b 37
+b 6
+b 1
+b 22
+b 3
+b 20
+b 111
+b 17
+b 1
+b 156
+b 158
+b 190
+b 189
+b 1
+b 76
+b 78
+b 80
+b 82
+b 76
+b 1
+b 8
+b 18
+b 20
+b 7
+b 1
+b 159
+b 21
+b 29
+b 20
+b 1
+b 0
+b 8
+b 41
+b 149
+b 151
+b 149
+b 1
+b 131
+b 133
+b 10
+b 8
+b 10
+b 18
+b 17
+b 1
+b 21
+b 23
+b 25
+b 21
+b 1
+b 25
+b 304
+b 30
+b 32
+b 34
+b 25
+b 27
+b 29
+b 25
+b 1
+b 137
+b 139
+b 141
+b 143
+b 141
+b 1
+b 3
+b 35
+b 164
+b 174
+b 172
+b 1
+b 30
+b 44
+b 270
+b 272
+b 17
+b 16
+b 1
+b 41
+b 24
+b 259
+b 267
+b 34
+b 42
+b 31
+b 1
+b 173
+b 175
+b 230
+b 175
+b 1
+b 226
+b 1
+b 32
+b 40
+b 42
+b 40
+b 1
+b 179
+b 88
+b 90
+b 88
+b 1
+b 32
+b 31
+b 1
+b 362
+b 364
+b 359
+b 1
+b 172
+b 17
+b 16
+b 1
+b 20
+b 2
+b 4
+b 6
+b 4
+b 1
+b 228
+b 230
+b 404
+b 228
+b 1
+b 0
+b 35
+b 37
+b 39
+b 791
+b 801
+b 800
+b 1
+b 10
+b 186
+b 196
+b 185
+b 1
+b 82
+b 84
+b 86
+b 195
+b 197
+b 192
+b 1
+b 195
+b 1
+b 194
+b 277
+b 88
+b 126
+b 11
+b 10
+b 1
+b 45
+b 47
+b 84
+b 86
+b 88
+b 98
+b 125
+b 123
+b 1
+b 32
+b 47
+b 55
+b 19
+b 21
+b 23
+b 25
+b 21
+b 1
+b 6
+b 8
+b 10
+b 12
+b 48
+b 6
+b 85
+b 87
+b 4
+b 3
+b 1
+b 5
+b 27
+b 29
+b 27
+b 1
+b 74
+b 76
+b 78
+b 80
+b 43
+b 58
+b 40
+b 1
+b 22
+b 19
+b 1
+b 97
+b 99
+b 286
+b 197
+b 4
+b 12
+b 99
+b 109
+b 96
+b 1
+b 18
+b 15
+b 1
+b 215
+b 212
+b 1
+b 9
+b 23
+b 22
+b 1
+b 45
+b 55
+b 42
+b 1
+b 65
+b 62
+b 1
+b 1358
+b 3
+b 0
+b 1
+b 13
+b 15
+b 17
+b 70
+b 90
+b 91
+b 93
+b 95
+b 97
+b 100
+b 102
+b 73
+b 732
+b 731
+b 1
+b 46
+b 1
+b 64
+b 114
+b 112
+b 114
+b 3
+b 67
+b 69
+b 71
+b 73
+b 64
+b 1
+b 71
+b 1
+b 3
+b 13
+b 18
+b 28
+b 50
+b 17
+b 1
+b 24
+b 1
+b 101
+b 103
+b 5
+b 13
+b 51
+b 172
+b 152
+b 154
+b 152
+b 1
+b 90
+b 233
+b 9
+b 8
+b 1
+b 118
+b 120
+b 120
+b 1
+b 114
+b 113
+b 1
+b 107
+b 109
+b 10
+b 9
+b 1
+b 133
+b 135
+b 137
+b 137
+b 1
+b 45
+b 57
+b 135
+b 137
+b 139
+b 141
+b 135
+b 1
+b 9
+b 43
+b 61
+b 148
+b 95
+b 108
+b 1
+b 175
+b 177
+b 179
+b 415
+b 7
+b 283
+b 319
+b 58
+b 58
+b 1
+b 37
+b 37
+b 1
+b 83
+b 82
+b 1
+b 73
+b 80
+b 4
+b 65
+b 2
+b 4
+b 23
+b 2
+b 1
+b 70
+b 103
+b 388
+b 407
+b 385
+b 1
+b 402
+b 1
+b 19
+b 64
+b 33
+b 32
+b 1
+b 23
+b 25
+b 335
+b 376
+b 62
+b 167
+b 169
+b 39
+b 91
+b 38
+b 1
+b 86
+b 1
+b 157
+b 159
+b 161
+b 11
+b 13
+b 23
+b 22
+b 1
+b 26
+b 48
+b 1394
+b 45
+b 47
+b 42
+b 52
+b 166
+b 157
+b 112
+b 111
+b 1
+b 29
+b 26
+b 1
+b 15
+b 46
+b 43
+b 1
+b 15
+b 17
+b 170
+b 35
+b 75
+b 77
+b 79
+b 81
+b 185
+b 222
+b 182
+b 1
+b 220
+b 1
+b 81
+b 101
+b 96
+b 21
+b 23
+b 8
+b 10
+b 113
+b 46
+b 48
+b 45
+b 116
+b 4
+b 73
+b 70
+b 1
+b 123
+b 123
+b 1
+b 101
+b 101
+b 1
+b 9
+b 85
+b 87
+b 89
+b 101
+b 89
+b 1
+b 411
+b 413
+b 158
+b 73
+b 87
+b 49
+b 51
+b 53
+b 28
+b 46
+b 45
+b 1
+b 43
+b 3
+b 21
+b 5
+b 7
+b 9
+b 11
+b 9
+b 1
+b 5
+b 22
+b 137
+b 145
+b 206
+b 136
+b 1
+b 141
+b 1
+b 82
+b 102
+b 104
+b 79
+b 1
+b 102
+b 1
+b 10
+b 67
+b 69
+b 67
+b 1
+b 140
+b 150
+b 152
+b 139
+b 1
+b 367
+b 387
+b 81
+b 21
+b 31
+b 20
+b 1
+b 124
+b 132
+b 131
+b 1
+b 5
+b 227
+b 229
+b 231
+b 233
+b 229
+b 1
+b 320
+b 318
+b 1
+b 17
+b 14
+b 1
+b 38
+b 40
+b 42
+b 41
+b 1
+b 50
+b 52
+b 3
+b 34
+b 60
+b 84
+b 33
+b 1
+b 55
+b 1
+b 258
+b 304
+b 306
+b 304
+b 1
+b 112
+b 128
+b 138
+b 127
+b 1
+b 270
+b 14
+b 13
+b 1
+b 5
+b 4
+b 1
+b 143
+b 155
+b 173
+b 25
+b 170
+b 172
+b 170
+b 1
+b 5
+b 15
+b 17
+b 4
+b 1
+b 18
+b 20
+b 22
+b 210
+b 246
+b 85
+b 87
+b 89
+b 85
+b 1
+b 51
+b 75
+b 51
+b 1
+b 262
+b 63
+b 139
+b 0
+b 2
+b 9
+b 30
+b 32
+b 14
+b 25
+b 34
+b 24
+b 1
+b 30
+b 1
+b 24
+b 185
+b 199
+b 201
+b 360
+b 231
+b 230
+b 1
+b 94
+b 122
+b 119
+b 1
+b 228
+b 332
+b 334
+b 332
+b 1
+b 37
+b 39
+b 49
+b 48
+b 1
+b 17
+b 30
+b 16
+b 1
+b 133
+b 198
+b 5
+b 4
+b 1
+b 144
+b 162
+b 141
+b 1
+b 159
+b 1
+b 1
+b 91
+b 16
+b 3
+b 393
+b 395
+b 393
+b 1
+b 81
+b 206
+b 366
+b 368
+b 79
+b 26
+b 34
+b 33
+b 1
+b 138
+b 169
+b 43
+b 45
+b 47
+b 49
+b 154
+b 191
+b 203
+b 190
+b 1
+b 199
+b 1
+b 37
+b 33
+b 13
+b 15
+b 17
+b 19
+b 112
+b 114
+b 116
+b 118
+b 112
+b 1
+b 24
+b 56
+b 23
+b 1
+b 0
+b 2
+b 154
+b 211
+b 154
+b 1
+b 5
+b 9
+b 11
+b 9
+b 1
+b 73
+b 83
+b 72
+b 74
+b 76
+b 78
+b 76
+b 1
+b 11
+b 13
+b 15
+b 17
+b 363
+b 361
+b 1
+b 75
+b 72
+b 1
+b 381
+b 383
+b 178
+b 54
+b 6
+b 82
+b 6
+b 14
+b 5
+b 1
+b 201
+b 199
+b 1
+b 36
+b 35
+b 1
+b 91
+b 66
+b 10
+b 11
+b 49
+b 56
+b 76
+b 15
+b 88
+b 3
+b 5
+b 7
+b 9
+b 3
+b 1
+b 83
+b 81
+b 1
+b 4
+b 6
+b 5
+b 1
+b 181
+b 183
+b 181
+b 1
+b 514
+b 522
+b 31
+b 33
+b 21
+b 20
+b 1
+b 80
+b 77
+b 1
+b 77
+b 34
+b 3
+b 112
+b 114
+b 116
+b 118
+b 26
+b 42
+b 44
+b 25
+b 1
+b 184
+b 186
+b 188
+b 35
+b 37
+b 39
+b 35
+b 1
+b 51
+b 50
+b 1
+b 112
+b 6
+b 8
+b 10
+b 20
+b 6
+b 1
+b 135
+b 200
+b 253
+b 62
+b 7
+b 4
+b 91
+b 91
+b 1
+b 10
+b 12
+b 3
+b 65
+b 7
+b 164
+b 162
+b 1
+b 128
+b 128
+b 1
+b 155
+b 171
+b 184
+b 154
+b 1
+b 166
+b 1
+b 106
+b 108
+b 0
+b 424
+b 434
+b 116
+b 129
+b 13
+b 48
+b 1
+b 37
+b 89
+b 91
+b 93
+b 95
+b 97
+b 91
+b 1
+b 83
+b 80
+b 1
+b 143
+b 142
+b 1
+b 1138
+b 5
+b 47
+b 49
+b 51
+b 53
+b 45
+b 75
+b 44
+b 1
+b 84
+b 131
+b 133
+b 24
+b 44
+b 112
+b 43
+b 1
+b 8
+b 106
+b 108
+b 5
+b 1
+b 40
+b 54
+b 49
+b 51
+b 60
+b 49
+b 1
+b 261
+b 263
+b 265
+b 261
+b 1
+b 116
+b 113
+b 1
+b 110
+b 112
+b 47
+b 6
+b 5
+b 1
+b 1
+b 42
+b 44
+b 46
+b 48
+b 57
+b 59
+b 61
+b 59
+b 1
+b 17
+b 27
+b 53
+b 16
+b 1
+b 39
+b 39
+b 1
+b 28
+b 26
+b 1
+b 8
+b 50
+b 148
+b 239
+b 46
+b 48
+b 50
+b 46
+b 1
+b 152
+b 172
+b 194
+b 196
+b 198
+b 196
+b 1
+b 88
+b 90
+b 92
+b 88
+b 1
+b 111
+b 18
+b 228
+b 241
+b 225
+b 1
+b 238
+b 1
+b 74
+b 76
+b 78
+b 92
+b 74
+b 1
+b 31
+b 46
+b 199
+b 201
+b 199
+b 1
+b 374
+b 226
+b 224
+b 1
+b 37
+b 0
+b 38
+b 40
+b 42
+b 19
+b 21
+b 19
+b 1
+b 1
+b 27
+b 37
+b 66
+b 97
+b 99
+b 97
+b 1
+b 230
+b 44
+b 46
+b 61
+b 63
+b 65
+b 67
+b 148
+b 29
+b 28
+b 1
+b 5
+b 26
+b 28
+b 22
+b 75
+b 35
+b 37
+b 37
+b 1
+b 46
+b 45
+b 1
+b 53
+b 55
+b 10
+b 174
+b 173
+b 1
+b 19
+b 21
+b 5
+b 2
+b 1
+b 6
+b 4
+b 1
+b 100
+b 113
+b 32
+b 34
+b 36
+b 56
+b 20
+b 76
+b 217
+b 226
+b 228
+b 220
+b 222
+b 37
+b 36
+b 1
+b 67
+b 66
+b 1
+b 0
+b 34
+b 39
+b 41
+b 0
+b 23
+b 34
+b 7
+b 9
+b 5
+b 38
+b 168
+b 200
+b 278
+b 296
+b 310
+b 278
+b 1
+b 292
+b 1
+b 55
+b 77
+b 79
+b 53
+b 1
+b 77
+b 1
+b 139
+b 149
+b 138
+b 1
+b 145
+b 1
+b 153
+b 165
+b 163
+b 1
+b 69
+b 71
+b 85
+b 84
+b 1
+b 91
+b 114
+b 323
+b 322
+b 1
+b 84
+b 86
+b 200
+b 42
+b 20
+b 22
+b 53
+b 62
+b 52
+b 50
+b 1
+b 4
+b 6
+b 94
+b 120
+b 22
+b 24
+b 34
+b 33
+b 1
+b 67
+b 77
+b 61
+b 108
+b 124
+b 7
+b 1
+b 19
+b 100
+b 110
+b 346
+b 358
+b 60
+b 3
+b 476
+b 6
+b 19
+b 18
+b 1
+b 47
+b 49
+b 51
+b 49
+b 1
+b 141
+b 143
+b 145
+b 147
+b 141
+b 1
+b 189
+b 201
+b 214
+b 159
+b 167
+b 54
+b 64
+b 81
+b 80
+b 1
+b 104
+b 112
+b 188
+b 190
+b 192
+b 194
+b 190
+b 1
+b 16
+b 18
+b 17
+b 62
+b 122
+b 59
+b 1
+b 0
+b 141
+b 503
+b 513
+b 18
+b 20
+b 22
+b 24
+b 18
+b 33
+b 32
+b 1
+b 321
+b 323
+b 4
+b 324
+b 344
+b 346
+b 34
+b 36
+b 38
+b 53
+b 36
+b 1
+b 103
+b 105
+b 107
+b 109
+b 577
+b 586
+b 576
+b 1
+b 17
+b 7
+b 12
+b 76
+b 75
+b 1
+b 148
+b 157
+b 156
+b 1
+b 45
+b 142
+b 30
+b 32
+b 5
+b 4
+b 1
+b 291
+b 305
+b 17
+b 19
+b 39
+b 38
+b 1
+b 19
+b 21
+b 51
+b 50
+b 1
+b 11
+b 13
+b 29
+b 13
+b 1
+b 25
+b 1
+b 22
+b 4
+b 112
+b 3
+b 1
+b 141
+b 143
+b 4
+b 67
+b 85
+b 64
+b 1
+b 80
+b 1
+b 1065
+b 15
+b 20
+b 24
+b 117
+b 125
+b 135
+b 123
+b 1
+b 20
+b 22
+b 24
+b 20
+b 1
+b 98
+b 59
+b 69
+b 68
+b 1
+b 8
+b 7
+b 1
+b 57
+b 67
+b 20
+b 22
+b 51
+b 50
+b 1
+b 37
+b 6
+b 348
+b 0
+b 2
+b 4
+b 212
+b 76
+b 75
+b 1
+b 31
+b 28
+b 30
+b 32
+b 30
+b 1
+b 21
+b 23
+b 66
+b 65
+b 1
+b 96
+b 108
+b 110
+b 110
+b 17
+b 365
+b 389
+b 363
+b 1
+b 77
+b 74
+b 1
+b 38
+b 40
+b 1
+b 11
+b 293
+b 193
+b 760
+b 759
+b 1
+b 5
+b 5
+b 1
+b 304
+b 306
+b 308
+b 304
+b 1
+b 289
+b 291
+b 3
+b 61
+b 205
+b 207
+b 34
+b 36
+b 38
+b 40
+b 36
+b 1
+b 54
+b 56
+b 54
+b 1
+b 0
+b 2
+b 63
+b 81
+b 36
+b 44
+b 46
+b 70
+b 72
+b 74
+b 67
+b 1
+b 0
+b 136
+b 171
+b 170
+b 1
+b 95
+b 93
+b 1
+b 231
+b 233
+b 235
+b 237
+b 235
+b 1
+b 453
+b 464
+b 486
+b 463
+b 1
+b 482
+b 1
+b 106
+b 108
+b 122
+b 108
+b 1
+b 118
+b 1
+b 288
+b 96
+b 17
+b 27
+b 29
+b 15
+b 1
+b 27
+b 1
+b 95
+b 121
+b 40
+b 42
+b 44
+b 16
+b 75
+b 74
+b 1
+b 71
+b 9
+b 152
+b 202
+b 198
+b 200
+b 200
+b 1
+b 93
+b 92
+b 1
+b 41
+b 51
+b 88
+b 87
+b 1
+b 2
+b 4
+b 92
+b 106
+b 334
+b 331
+b 1
+b 17
+b 19
+b 14
+b 1
+b 181
+b 178
+b 1
+b 20
+b 0
+b 6
+b 8
+b 22
+b 6
+b 1
+b 70
+b 72
+b 100
+b 71
+b 1
+b 96
+b 1
+b 170
+b 172
+b 5
+b 54
+b 56
+b 0
+b 2
+b 44
+b 46
+b 48
+b 46
+b 1
+b 307
+b 21
+b 86
+b 85
+b 1
+b 43
+b 107
+b 730
+b 3
+b 177
+b 179
+b 79
+b 1
+b 1264
+b 1262
+b 1
+b 37
+b 39
+b 34
+b 1
+b 85
+b 87
+b 100
+b 210
+b 212
+b 238
+b 237
+b 1
+b 463
+b 465
+b 70
+b 72
+b 123
+b 120
+b 1
+b 162
+b 21
+b 23
+b 31
+b 30
+b 1
+b 128
+b 114
+b 14
+b 64
+b 74
+b 13
+b 1
+b 66
+b 63
+b 1
+b 27
+b 0
+b 61
+b 8
+b 80
+b 60
+b 62
+b 60
+b 1
+b 14
+b 18
+b 75
+b 91
+b 14
+b 16
+b 81
+b 75
+b 114
+b 144
+b 113
+b 1
+b 139
+b 1
+b 380
+b 410
+b 412
+b 410
+b 1
+b 106
+b 108
+b 110
+b 305
+b 19
+b 522
+b 236
+b 45
+b 47
+b 49
+b 51
+b 49
+b 1
+b 169
+b 179
+b 181
+b 168
+b 1
+b 25
+b 39
+b 103
+b 112
+b 170
+b 9
+b 19
+b 48
+b 56
+b 45
+b 1
+b 54
+b 1
+b 63
+b 65
+b 1
+b 65
+b 67
+b 62
+b 1
+b 26
+b 25
+b 1
+b 421
+b 423
+b 421
+b 1
+b 13
+b 9
+b 19
+b 220
+b 238
+b 11
+b 8
+b 1
+b 49
+b 28
+b 30
+b 43
+b 28
+b 1
+b 124
+b 180
+b 60
+b 2
+b 716
+b 714
+b 1
+b 256
+b 142
+b 139
+b 1
+b 20
+b 0
+b 55
+b 16
+b 1
+b 367
+b 398
+b 82
+b 179
+b 178
+b 1
+b 1
+b 19
+b 21
+b 23
+b 16
+b 1
+b 21
+b 1
+b 399
+b 397
+b 1
+b 87
+b 8
+b 8
+b 1
+b 9
+b 11
+b 157
+b 156
+b 1
+b 26
+b 35
+b 25
+b 1
+b 28
+b 26
+b 1
+b 3
+b 0
+b 1
+b 223
+b 284
+b 286
+b 221
+b 1
+b 284
+b 1
+b 579
+b 581
+b 19
+b 236
+b 233
+b 1
+b 143
+b 142
+b 1
+b 30
+b 32
+b 34
+b 16
+b 46
+b 1
+b 44
+b 51
+b 138
+b 152
+b 154
+b 137
+b 1
+b 434
+b 457
+b 32
+b 190
+b 57
+b 52
+b 74
+b 51
+b 1
+b 163
+b 165
+b 183
+b 13
+b 23
+b 231
+b 233
+b 245
+b 231
+b 1
+b 125
+b 141
+b 72
+b 6
+b 95
+b 224
+b 173
+b 8
+b 15
+b 17
+b 6
+b 1
+b 15
+b 1
+b 87
+b 97
+b 119
+b 96
+b 1
+b 115
+b 1
+b 13
+b 15
+b 17
+b 19
+b 15
+b 1
+b 63
+b 2
+b 23
+b 35
+b 22
+b 1
+b 12
+b 20
+b 19
+b 1
+b 36
+b 159
+b 161
+b 130
+b 8
+b 95
+b 92
+b 1
+b 450
+b 450
+b 1
+b 32
+b 42
+b 41
+b 1
+b 45
+b 57
+b 19
+b 31
+b 18
+b 1
+b 125
+b 127
+b 197
+b 86
+b 61
+b 63
+b 69
+b 66
+b 1
+b 29
+b 28
+b 1
+b 72
+b 74
+b 3
+b 168
+b 170
+b 172
+b 172
+b 1
+b 52
+b 51
+b 1
+b 74
+b 76
+b 30
+b 32
+b 34
+b 30
+b 1
+b 138
+b 138
+b 1
+b 30
+b 27
+b 1
+b 61
+b 79
+b 61
+b 1
+b 74
+b 1
+b 14
+b 119
+b 10
+b 12
+b 14
+b 16
+b 49
+b 193
+b 130
+b 162
+b 53
+b 55
+b 1
+b 12
+b 14
+b 12
+b 1
+b 9
+b 28
+b 54
+b 25
+b 1
+b 1
+b 0
+b 1
+b 46
+b 15
+b 12
+b 1
+b 171
+b 170
+b 1
+b 4
+b 240
+b 242
+b 26
+b 28
+b 64
+b 71
+b 73
+b 63
+b 1
+b 116
+b 128
+b 78
+b 11
+b 86
+b 88
+b 102
+b 38
+b 40
+b 42
+b 40
+b 1
+b 473
+b 505
+b 576
+b 575
+b 1
+b 4
+b 6
+b 16
+b 476
+b 535
+b 534
+b 1
+b 4
+b 68
+b 4
+b 249
+b 19
+b 1
+b 126
+b 128
+b 130
+b 8
+b 7
+b 6
+b 1
+b 19
+b 64
+b 66
+b 64
+b 1
+b 35
+b 37
+b 39
+b 41
+b 41
+b 1
+b 90
+b 87
+b 1
+b 31
+b 29
+b 1
+b 162
+b 174
+b 176
+b 27
+b 29
+b 39
+b 38
+b 1
+b 102
+b 104
+b 11
+b 10
+b 1
+b 46
+b 86
+b 85
+b 1
+b 9
+b 75
+b 83
+b 154
+b 198
+b 200
+b 153
+b 1
+b 193
+b 1
+b 22
+b 24
+b 26
+b 15
+b 17
+b 19
+b 21
+b 35
+b 47
+b 32
+b 1
+b 44
+b 1
+b 15
+b 25
+b 211
+b 213
+b 28
+b 103
+b 105
+b 123
+b 103
+b 1
+b 87
+b 103
+b 105
+b 84
+b 1
+b 103
+b 1
+b 59
+b 81
+b 83
+b 58
+b 1
+b 130
+b 132
+b 134
+b 36
+b 38
+b 40
+b 42
+b 36
+b 1
+b 17
+b 15
+b 17
+b 15
+b 1
+b 2
+b 4
+b 6
+b 2
+b 1
+b 12
+b 14
+b 16
+b 12
+b 1
+b 34
+b 1
+b 21
+b 301
+b 317
+b 319
+b 43
+b 69
+b 169
+b 215
+b 220
+b 222
+b 183
+b 193
+b 180
+b 1
+b 190
+b 1
+b 22
+b 24
+b 26
+b 28
+b 22
+b 1
+b 56
+b 64
+b 13
+b 12
+b 1
+b 60
+b 62
+b 78
+b 60
+b 1
+b 37
+b 39
+b 41
+b 193
+b 195
+b 197
+b 199
+b 195
+b 1
+b 180
+b 180
+b 1
+b 11
+b 0
+b 164
+b 178
+b 37
+b 36
+b 1
+b 4
+b 12
+b 11
+b 1
+b 24
+b 305
+b 303
+b 1
+b 57
+b 89
+b 57
+b 1
+b 84
+b 1
+b 141
+b 151
+b 82
+b 81
+b 1
+b 6
+b 5
+b 4
+b 1
+b 10
+b 3
+b 5
+b 69
+b 71
+b 3
+b 21
+b 80
+b 316
+b 318
+b 313
+b 1
+b 92
+b 91
+b 1
+b 28
+b 26
+b 1
+b 97
+b 99
+b 148
+b 150
+b 94
+b 93
+b 1
+b 51
+b 53
+b 63
+b 62
+b 1
+b 6
+b 8
+b 10
+b 12
+b 60
+b 0
+b 2
+b 104
+b 1344
+b 11
+b 10
+b 7
+b 1
+b 35
+b 35
+b 1
+b 29
+b 47
+b 46
+b 1
+b 35
+b 243
+b 245
+b 255
+b 240
+b 1
+b 71
+b 103
+b 29
+b 31
+b 33
+b 29
+b 1
+b 221
+b 223
+b 225
+b 227
+b 9
+b 4
+b 69
+b 68
+b 1
+b 83
+b 82
+b 1
+b 19
+b 44
+b 236
+b 42
+b 56
+b 47
+b 49
+b 51
+b 53
+b 51
+b 1
+b 86
+b 85
+b 1
+b 155
+b 157
+b 157
+b 1
+b 133
+b 99
+b 97
+b 1
+b 109
+b 106
+b 1
+b 369
+b 77
+b 76
+b 1
+b 19
+b 17
+b 1
+b 10
+b 9
+b 1
+b 11
+b 10
+b 1
+b 111
+b 90
+b 362
+b 364
+b 389
+b 359
+b 1
+b 386
+b 1
+b 67
+b 24
+b 11
+b 13
+b 11
+b 1
+b 34
+b 67
+b 53
+b 55
+b 53
+b 1
+b 104
+b 3
+b 90
+b 92
+b 94
+b 139
+b 141
+b 143
+b 139
+b 1
+b 88
+b 109
+b 165
+b 203
+b 163
+b 1
+b 201
+b 1
+b 52
+b 195
+b 49
+b 1
+b 62
+b 120
+b 61
+b 1
+b 6
+b 8
+b 3
+b 1
+b 74
+b 72
+b 1
+b 152
+b 154
+b 183
+b 182
+b 1
+b 38
+b 40
+b 16
+b 13
+b 1
+b 19
+b 27
+b 302
+b 355
+b 355
+b 1
+b 82
+b 114
+b 76
+b 78
+b 1
+b 169
+b 168
+b 1
+b 51
+b 51
+b 1
+b 37
+b 7
+b 157
+b 154
+b 1
+b 22
+b 0
+b 11
+b 27
+b 35
+b 37
+b 35
+b 1
+b 223
+b 237
+b 239
+b 11
+b 13
+b 15
+b 11
+b 1
+b 90
+b 125
+b 227
+b 258
+b 135
+b 132
+b 1
+b 75
+b 77
+b 72
+b 1
+b 24
+b 34
+b 32
+b 1
+b 125
+b 139
+b 122
+b 1
+b 175
+b 174
+b 1
+b 55
+b 57
+b 59
+b 61
+b 59
+b 1
+b 63
+b 65
+b 63
+b 1
+b 1
+b 6
+b 123
+b 109
+b 38
+b 35
+b 1
+b 4
+b 414
+b 411
+b 1
+b 0
+b 2
+b 14
+b 44
+b 58
+b 57
+b 1
+b 1
+b 4
+b 6
+b 22
+b 19
+b 1
+b 129
+b 131
+b 133
+b 135
+b 139
+b 141
+b 143
+b 139
+b 1
+b 16
+b 0
+b 2
+b 23
+b 20
+b 1
+b 136
+b 150
+b 147
+b 1
+b 261
+b 259
+b 1
+b 3
+b 111
+b 113
+b 137
+b 4
+b 14
+b 3
+b 1
+b 10
+b 1
+b 66
+b 65
+b 1
+b 2
+b 3
+b 13
+b 0
+b 1
+b 11
+b 1
+b 55
+b 57
+b 52
+b 1
+b 1
+b 0
+b 1
+b 477
+b 479
+b 481
+b 483
+b 481
+b 1
+b 195
+b 219
+b 68
+b 202
+b 204
+b 265
+b 264
+b 1
+b 134
+b 148
+b 147
+b 1
+b 212
+b 210
+b 1
+b 111
+b 108
+b 1
+b 3
+b 5
+b 7
+b 5
+b 1
+b 169
+b 9
+b 104
+b 89
+b 91
+b 283
+b 285
+b 62
+b 61
+b 1
+b 204
+b 201
+b 1
+b 2
+b 4
+b 157
+b 169
+b 168
+b 1
+b 127
+b 38
+b 6
+b 276
+b 273
+b 1
+b 63
+b 61
+b 1
+b 375
+b 372
+b 1
+b 75
+b 77
+b 72
+b 1
+b 109
+b 31
+b 16
+b 49
+b 51
+b 49
+b 1
+b 53
+b 55
+b 57
+b 59
+b 57
+b 1
+b 20
+b 19
+b 1
+b 45
+b 1
+b 34
+b 30
+b 37
+b 73
+b 70
+b 1
+b 53
+b 55
+b 55
+b 1
+b 256
+b 258
+b 62
+b 61
+b 1
+b 118
+b 180
+b 121
+b 126
+b 128
+b 261
+b 431
+b 179
+b 181
+b 183
+b 185
+b 183
+b 1
+b 51
+b 3
+b 86
+b 102
+b 8
+b 18
+b 7
+b 1
+b 307
+b 309
+b 311
+b 89
+b 105
+b 104
+b 1
+b 318
+b 317
+b 1
+b 6
+b 22
+b 115
+b 9
+b 214
+b 76
+b 161
+b 75
+b 1
+b 156
+b 1
+b 122
+b 17
+b 19
+b 12
+b 49
+b 9
+b 1
+b 65
+b 167
+b 116
+b 129
+b 126
+b 1
+b 5
+b 4
+b 1
+b 19
+b 3
+b 53
+b 77
+b 79
+b 52
+b 1
+b 13
+b 0
+b 2
+b 22
+b 11
+b 13
+b 13
+b 1
+b 34
+b 33
+b 1
+b 104
+b 22
+b 29
+b 26
+b 1
+b 220
+b 217
+b 1
+b 28
+b 174
+b 12
+b 412
+b 422
+b 596
+b 594
+b 1
+b 41
+b 61
+b 38
+b 1
+b 7
+b 158
+b 184
+b 157
+b 1
+b 180
+b 1
+b 211
+b 213
+b 81
+b 78
+b 1
+b 152
+b 154
+b 156
+b 152
+b 1
+b 203
+b 205
+b 248
+b 205
+b 1
+b 243
+b 1
+b 24
+b 45
+b 44
+b 1
+b 173
+b 16
+b 321
+b 323
+b 337
+b 336
+b 1
+b 42
+b 42
+b 1
+b 31
+b 30
+b 1
+b 267
+b 152
+b 243
+b 263
+b 329
+b 262
+b 1
+b 15
+b 139
+b 137
+b 1
+b 56
+b 55
+b 1
+b 25
+b 1
+b 234
+b 234
+b 1
+b 34
+b 32
+b 1
+b 109
+b 117
+b 9
+b 24
+b 350
+b 352
+b 354
+b 362
+b 75
+b 77
+b 72
+b 1
+b 13
+b 457
+b 465
+b 25
+b 41
+b 24
+b 1
+b 36
+b 1
+b 45
+b 64
+b 66
+b 76
+b 118
+b 120
+b 111
+b 110
+b 1
+b 177
+b 94
+b 86
+b 105
+b 154
+b 156
+b 158
+b 114
+b 113
+b 1
+b 38
+b 54
+b 75
+b 77
+b 110
+b 163
+b 165
+b 160
+b 1
+b 49
+b 46
+b 1
+b 144
+b 154
+b 102
+b 2
+b 14
+b 87
+b 63
+b 73
+b 75
+b 62
+b 1
+b 232
+b 234
+b 236
+b 238
+b 27
+b 29
+b 31
+b 33
+b 31
+b 1
+b 36
+b 56
+b 53
+b 1
+b 1
+b 43
+b 71
+b 154
+b 1
+b 19
+b 166
+b 168
+b 170
+b 73
+b 75
+b 77
+b 79
+b 70
+b 1
+b 49
+b 51
+b 53
+b 55
+b 51
+b 1
+b 194
+b 196
+b 198
+b 654
+b 761
+b 1051
+b 1053
+b 1055
+b 1051
+b 1
+b 37
+b 39
+b 39
+b 1
+b 134
+b 133
+b 1
+b 393
+b 476
+b 392
+b 1
+b 32
+b 23
+b 113
+b 123
+b 12
+b 65
+b 23
+b 36
+b 227
+b 242
+b 310
+b 312
+b 29
+b 28
+b 1
+b 24
+b 71
+b 73
+b 71
+b 1
+b 29
+b 51
+b 28
+b 1
+b 6
+b 32
+b 34
+b 67
+b 29
+b 1
+b 65
+b 1
+b 112
+b 109
+b 1
+b 21
+b 36
+b 18
+b 1
+b 63
+b 65
+b 85
+b 84
+b 1
+b 16
+b 18
+b 20
+b 22
+b 265
+b 426
+b 97
+b 99
+b 14
+b 13
+b 1
+b 6
+b 52
+b 54
+b 8
+b 34
+b 43
+b 73
+b 110
+b 112
+b 35
+b 14
+b 11
+b 1
+b 117
+b 129
+b 114
+b 1
+b 57
+b 59
+b 61
+b 63
+b 59
+b 1
+b 11
+b 13
+b 15
+b 17
+b 8
+b 1
+b 15
+b 1
+b 14
+b 16
+b 18
+b 14
+b 1
+b 344
+b 363
+b 365
+b 341
+b 1
+b 18
+b 20
+b 32
+b 45
+b 47
+b 99
+b 98
+b 1
+b 38
+b 40
+b 42
+b 49
+b 40
+b 1
+b 57
+b 120
+b 275
+b 307
+b 8
+b 73
+b 75
+b 46
+b 16
+b 56
+b 37
+b 113
+b 149
+b 177
+b 148
+b 1
+b 104
+b 114
+b 103
+b 1
+b 6
+b 74
+b 76
+b 78
+b 80
+b 76
+b 1
+b 77
+b 79
+b 81
+b 83
+b 77
+b 1
+b 96
+b 98
+b 100
+b 102
+b 57
+b 59
+b 61
+b 360
+b 386
+b 17
+b 65
+b 41
+b 57
+b 68
+b 1
+b 99
+b 21
+b 38
+b 40
+b 90
+b 106
+b 124
+b 138
+b 123
+b 1
+b 144
+b 146
+b 148
+b 16
+b 18
+b 20
+b 72
+b 71
+b 1
+b 2
+b 32
+b 54
+b 31
+b 1
+b 142
+b 10
+b 30
+b 17
+b 30
+b 32
+b 30
+b 1
+b 4
+b 6
+b 8
+b 135
+b 137
+b 153
+b 152
+b 1
+b 171
+b 109
+b 23
+b 22
+b 1
+b 6
+b 54
+b 56
+b 58
+b 54
+b 1
+b 44
+b 42
+b 1
+b 10
+b 8
+b 7
+b 1
+b 342
+b 344
+b 369
+b 368
+b 1
+b 66
+b 112
+b 47
+b 35
+b 32
+b 34
+b 36
+b 38
+b 36
+b 1
+b 174
+b 192
+b 173
+b 1
+b 187
+b 1
+b 76
+b 73
+b 1
+b 27
+b 154
+b 152
+b 1
+b 140
+b 142
+b 137
+b 1
+b 29
+b 31
+b 33
+b 43
+b 26
+b 1
+b 343
+b 350
+b 358
+b 349
+b 1
+b 354
+b 1
+b 16
+b 18
+b 20
+b 18
+b 1
+b 146
+b 148
+b 159
+b 146
+b 1
+b 28
+b 30
+b 48
+b 153
+b 166
+b 163
+b 1
+b 24
+b 37
+b 34
+b 1
+b 1
+b 188
+b 220
+b 54
+b 51
+b 1
+b 116
+b 114
+b 1
+b 22
+b 12
+b 11
+b 1
+b 13
+b 13
+b 1
+b 274
+b 296
+b 442
+b 444
+b 446
+b 448
+b 442
+b 1
+b 127
+b 128
+b 128
+b 1
+b 100
+b 72
+b 70
+b 1
+b 93
+b 92
+b 1
+b 14
+b 0
+b 2
+b 99
+b 107
+b 96
+b 1
+b 40
+b 39
+b 1
+b 48
+b 50
+b 50
+b 1
+b 9
+b 8
+b 1
+b 98
+b 100
+b 102
+b 98
+b 1
+b 64
+b 66
+b 68
+b 93
+b 95
+b 97
+b 99
+b 93
+b 1
+b 80
+b 94
+b 130
+b 78
+b 1
+b 127
+b 1
+b 3
+b 19
+b 53
+b 75
+b 50
+b 1
+b 12
+b 10
+b 1
+b 287
+b 5
+b 7
+b 269
+b 154
+b 58
+b 60
+b 62
+b 95
+b 106
+b 108
+b 106
+b 1
+b 11
+b 87
+b 522
+b 8
+b 106
+b 316
+b 103
+b 1
+b 314
+b 1
+b 9
+b 11
+b 49
+b 9
+b 1
+b 29
+b 31
+b 13
+b 328
+b 338
+b 415
+b 327
+b 1
+b 37
+b 47
+b 49
+b 35
+b 1
+b 47
+b 1
+b 30
+b 48
+b 38
+b 40
+b 42
+b 44
+b 40
+b 1
+b 186
+b 188
+b 17
+b 35
+b 37
+b 39
+b 178
+b 180
+b 182
+b 184
+b 131
+b 133
+b 135
+b 137
+b 135
+b 1
+b 317
+b 349
+b 40
+b 50
+b 45
+b 47
+b 56
+b 45
+b 1
+b 11
+b 8
+b 1
+b 20
+b 19
+b 1
+b 7
+b 29
+b 7
+b 1
+b 24
+b 1
+b 57
+b 65
+b 63
+b 1
+b 45
+b 1318
+b 1342
+b 130
+b 60
+b 110
+b 59
+b 1
+b 148
+b 158
+b 11
+b 25
+b 10
+b 1
+b 1
+b 6
+b 30
+b 926
+b 934
+b 10
+b 12
+b 112
+b 111
+b 1
+b 35
+b 3
+b 234
+b 253
+b 301
+b 252
+b 1
+b 203
+b 205
+b 207
+b 209
+b 203
+b 1
+b 175
+b 177
+b 175
+b 1
+b 17
+b 4
+b 6
+b 8
+b 4
+b 1
+b 52
+b 51
+b 1
+b 60
+b 29
+b 48
+b 47
+b 1
+b 17
+b 41
+b 299
+b 301
+b 296
+b 1
+b 299
+b 1
+b 108
+b 110
+b 52
+b 59
+b 71
+b 55
+b 73
+b 52
+b 1
+b 0
+b 238
+b 236
+b 1
+b 146
+b 148
+b 143
+b 1
+b 147
+b 35
+b 70
+b 76
+b 75
+b 1
+b 27
+b 38
+b 97
+b 3
+b 163
+b 173
+b 149
+b 151
+b 153
+b 146
+b 134
+b 30
+b 54
+b 113
+b 121
+b 112
+b 1
+b 87
+b 89
+b 91
+b 93
+b 89
+b 1
+b 22
+b 44
+b 297
+b 299
+b 301
+b 308
+b 297
+b 1
+b 191
+b 415
+b 414
+b 1
+b 206
+b 214
+b 16
+b 13
+b 1
+b 2
+b 0
+b 986
+b 988
+b 990
+b 992
+b 988
+b 1
+b 13
+b 19
+b 21
+b 14
+b 0
+b 2
+b 12
+b 168
+b 170
+b 178
+b 74
+b 76
+b 1
+b 45
+b 47
+b 49
+b 51
+b 45
+b 1
+b 46
+b 67
+b 66
+b 1
+b 329
+b 359
+b 230
+b 227
+b 1
+b 140
+b 137
+b 1
+b 84
+b 81
+b 1
+b 6
+b 11
+b 8
+b 1
+b 86
+b 44
+b 34
+b 61
+b 63
+b 30
+b 26
+b 25
+b 1
+b 230
+b 232
+b 234
+b 236
+b 232
+b 1
+b 47
+b 11
+b 124
+b 123
+b 1
+b 0
+b 2
+b 28
+b 0
+b 1
+b 5
+b 4
+b 1
+b 1
+b 471
+b 43
+b 67
+b 69
+b 349
+b 351
+b 102
+b 101
+b 1
+b 6
+b 5
+b 1
+b 4
+b 13
+b 44
+b 43
+b 1
+b 20
+b 22
+b 113
+b 115
+b 53
+b 51
+b 1
+b 10
+b 17
+b 16
+b 1
+b 19
+b 21
+b 23
+b 25
+b 21
+b 1
+b 81
+b 91
+b 217
+b 219
+b 587
+b 589
+b 37
+b 36
+b 1
+b 24
+b 26
+b 41
+b 618
+b 620
+b 622
+b 620
+b 1
+b 90
+b 46
+b 18
+b 20
+b 22
+b 15
+b 1
+b 20
+b 1
+b 18
+b 16
+b 1
+b 15
+b 53
+b 13
+b 1
+b 145
+b 155
+b 299
+b 301
+b 303
+b 305
+b 2
+b 4
+b 26
+b 10
+b 21
+b 20
+b 179
+b 181
+b 19
+b 1
+b 56
+b 212
+b 57
+b 59
+b 57
+b 1
+b 10
+b 64
+b 61
+b 1
+b 12
+b 12
+b 1
+b 72
+b 82
+b 81
+b 1
+b 337
+b 332
+b 342
+b 350
+b 341
+b 1
+b 508
+b 508
+b 1
+b 3
+b 3
+b 1
+b 135
+b 137
+b 37
+b 36
+b 1
+b 1311
+b 1349
+b 1349
+b 1
+b 355
+b 47
+b 223
+b 262
+b 264
+b 266
+b 262
+b 1
+b 50
+b 9
+b 9
+b 8
+b 1
+b 9
+b 0
+b 2
+b 26
+b 70
+b 67
+b 1
+b 0
+b 86
+b 105
+b 36
+b 49
+b 48
+b 1
+b 10
+b 163
+b 165
+b 3
+b 2
+b 23
+b 173
+b 16
+b 31
+b 13
+b 1
+b 0
+b 2
+b 2
+b 1
+b 33
+b 35
+b 48
+b 353
+b 351
+b 1
+b 49
+b 6
+b 3
+b 1
+b 580
+b 89
+b 91
+b 67
+b 69
+b 71
+b 73
+b 67
+b 1
+b 327
+b 329
+b 331
+b 333
+b 331
+b 1
+b 145
+b 155
+b 84
+b 81
+b 1
+b 99
+b 101
+b 101
+b 1
+b 7
+b 31
+b 50
+b 52
+b 54
+b 52
+b 1
+b 28
+b 25
+b 1
+b 13
+b 15
+b 10
+b 1
+b 1040
+b 89
+b 63
+b 62
+b 1
+b 39
+b 285
+b 609
+b 606
+b 1
+b 62
+b 59
+b 1
+b 16
+b 2
+b 1463
+b 4
+b 29
+b 52
+b 79
+b 28
+b 30
+b 28
+b 1
+b 161
+b 163
+b 161
+b 1
+b 0
+b 7
+b 10
+b 9
+b 1
+b 11
+b 13
+b 13
+b 1
+b 179
+b 49
+b 46
+b 44
+b 1
+b 59
+b 58
+b 1
+b 122
+b 51
+b 77
+b 79
+b 4
+b 3
+b 24
+b 40
+b 42
+b 54
+b 9
+b 11
+b 9
+b 1
+b 167
+b 187
+b 182
+b 140
+b 91
+b 91
+b 6
+b 37
+b 39
+b 41
+b 43
+b 37
+b 1
+b 44
+b 46
+b 48
+b 50
+b 48
+b 1
+b 14
+b 16
+b 32
+b 14
+b 1
+b 12
+b 11
+b 1
+b 13
+b 1439
+b 34
+b 12
+b 11
+b 1
+b 29
+b 31
+b 33
+b 35
+b 29
+b 1
+b 54
+b 64
+b 4
+b 4
+b 1
+b 3
+b 162
+b 34
+b 25
+b 17
+b 3
+b 176
+b 203
+b 102
+b 17
+b 800
+b 798
+b 1
+b 256
+b 253
+b 1
+b 1357
+b 1372
+b 1374
+b 13
+b 44
+b 46
+b 94
+b 1
+b 25
+b 29
+b 31
+b 33
+b 84
+b 107
+b 121
+b 83
+b 1
+b 350
+b 366
+b 374
+b 347
+b 1
+b 371
+b 1
+b 325
+b 327
+b 381
+b 53
+b 50
+b 1
+b 35
+b 35
+b 1
+b 39
+b 41
+b 43
+b 45
+b 2
+b 4
+b 6
+b 4
+b 1
+b 189
+b 191
+b 193
+b 191
+b 1
+b 373
+b 373
+b 1
+b 43
+b 43
+b 1
+b 40
+b 62
+b 26
+b 25
+b 1
+b 3
+b 38
+b 295
+b 306
+b 303
+b 1
+b 14
+b 11
+b 1
+b 49
+b 68
+b 13
+b 6
+b 16
+b 8
+b 40
+b 82
+b 48
+b 59
+b 47
+b 1
+b 14
+b 16
+b 18
+b 14
+b 1
+b 41
+b 43
+b 73
+b 72
+b 1
+b 25
+b 12
+b 26
+b 11
+b 1
+b 110
+b 130
+b 132
+b 109
+b 1
+b 125
+b 1
+b 419
+b 421
+b 423
+b 421
+b 1
+b 410
+b 57
+b 0
+b 127
+b 135
+b 126
+b 1
+b 358
+b 373
+b 355
+b 1
+b 83
+b 29
+b 1
+b 24
+b 26
+b 28
+b 4
+b 6
+b 8
+b 10
+b 34
+b 48
+b 50
+b 33
+b 1
+b 272
+b 280
+b 57
+b 59
+b 61
+b 59
+b 1
+b 802
+b 258
+b 278
+b 257
+b 1
+b 274
+b 1
+b 107
+b 109
+b 111
+b 107
+b 1
+b 107
+b 178
+b 104
+b 1
+b 175
+b 1
+b 72
+b 74
+b 76
+b 78
+b 156
+b 179
+b 193
+b 154
+b 1
+b 190
+b 1
+b 121
+b 123
+b 125
+b 244
+b 246
+b 248
+b 250
+b 244
+b 1
+b 21
+b 26
+b 25
+b 1
+b 59
+b 61
+b 63
+b 65
+b 63
+b 1
+b 38
+b 29
+b 85
+b 84
+b 1
+b 7
+b 31
+b 45
+b 47
+b 49
+b 51
+b 1041
+b 1043
+b 1045
+b 1047
+b 1045
+b 1
+b 110
+b 109
+b 1
+b 17
+b 77
+b 76
+b 1
+b 54
+b 138
+b 140
+b 138
+b 1
+b 58
+b 74
+b 270
+b 300
+b 326
+b 299
+b 1
+b 322
+b 1
+b 52
+b 62
+b 51
+b 53
+b 55
+b 51
+b 1
+b 455
+b 165
+b 164
+b 1
+b 41
+b 22
+b 0
+b 19
+b 56
+b 58
+b 60
+b 56
+b 1
+b 164
+b 117
+b 116
+b 1
+b 5
+b 7
+b 9
+b 2
+b 1
+b 7
+b 1
+b 187
+b 31
+b 269
+b 345
+b 353
+b 268
+b 1
+b 340
+b 1
+b 95
+b 109
+b 94
+b 1
+b 182
+b 55
+b 52
+b 1
+b 93
+b 35
+b 37
+b 369
+b 366
+b 1
+b 45
+b 55
+b 44
+b 46
+b 44
+b 1
+b 5
+b 289
+b 291
+b 289
+b 1
+b 5
+b 45
+b 47
+b 49
+b 42
+b 1
+b 0
+b 8
+b 5
+b 1
+b 9
+b 63
+b 65
+b 63
+b 1
+b 208
+b 1155
+b 1445
+b 7
+b 21
+b 23
+b 6
+b 1
+b 72
+b 100
+b 74
+b 76
+b 78
+b 80
+b 64
+b 66
+b 68
+b 70
+b 64
+b 1
+b 80
+b 86
+b 88
+b 86
+b 1
+b 138
+b 140
+b 135
+b 1
+b 13
+b 11
+b 1
+b 97
+b 99
+b 119
+b 97
+b 1
+b 291
+b 289
+b 1
+b 241
+b 251
+b 239
+b 1
+b 5
+b 7
+b 250
+b 249
+b 1
+b 196
+b 198
+b 200
+b 198
+b 1
+b 16
+b 30
+b 60
+b 15
+b 1
+b 328
+b 327
+b 1
+b 45
+b 493
+b 495
+b 497
+b 499
+b 495
+b 1
+b 43
+b 67
+b 66
+b 1
+b 53
+b 1
+b 0
+b 1
+b 49
+b 59
+b 48
+b 1
+b 55
+b 1
+b 9
+b 95
+b 39
+b 55
+b 54
+b 1
+b 92
+b 94
+b 92
+b 1
+b 0
+b 2
+b 7
+b 9
+b 11
+b 7
+b 1
+b 51
+b 50
+b 1
+b 194
+b 196
+b 196
+b 1
+b 98
+b 135
+b 241
+b 243
+b 210
+b 27
+b 47
+b 54
+b 53
+b 55
+b 57
+b 59
+b 55
+b 1
+b 159
+b 161
+b 163
+b 165
+b 42
+b 40
+b 1
+b 141
+b 143
+b 138
+b 1
+b 62
+b 72
+b 88
+b 61
+b 1
+b 149
+b 221
+b 220
+b 1
+b 42
+b 5
+b 2
+b 1
+b 9
+b 19
+b 8
+b 5
+b 1
+b 9
+b 218
+b 215
+b 1
+b 1
+b 1
+b 1
+b 231
+b 249
+b 257
+b 228
+b 1
+b 39
+b 49
+b 51
+b 3
+b 5
+b 13
+b 11
+b 1
+b 348
+b 346
+b 1
+b 76
+b 75
+b 1
+b 0
+b 2
+b 336
+b 338
+b 359
+b 20
+b 119
+b 83
+b 340
+b 14
+b 36
+b 250
+b 323
+b 325
+b 249
+b 1
+b 318
+b 1
+b 523
+b 532
+b 1435
+b 8
+b 225
+b 227
+b 55
+b 42
+b 44
+b 46
+b 403
+b 405
+b 426
+b 403
+b 1
+b 64
+b 66
+b 4
+b 3
+b 1
+b 157
+b 159
+b 7
+b 6
+b 1
+b 33
+b 49
+b 51
+b 136
+b 102
+b 104
+b 102
+b 1
+b 12
+b 14
+b 16
+b 12
+b 1
+b 1258
+b 1266
+b 1268
+b 1257
+b 1
+b 28
+b 27
+b 1
+b 39
+b 46
+b 45
+b 1
+b 150
+b 179
+b 44
+b 3
+b 1396
+b 11
+b 10
+b 1
+b 576
+b 150
+b 1
+b 22
+b 30
+b 100
+b 107
+b 106
+b 1
+b 0
+b 2
+b 710
+b 736
+b 735
+b 1
+b 57
+b 55
+b 1
+b 72
+b 74
+b 76
+b 86
+b 358
+b 370
+b 355
+b 1
+b 440
+b 450
+b 437
+b 1
+b 38
+b 50
+b 87
+b 100
+b 102
+b 154
+b 71
+b 12
+b 14
+b 16
+b 14
+b 1
+b 3
+b 24
+b 75
+b 47
+b 12
+b 14
+b 16
+b 18
+b 14
+b 1
+b 102
+b 104
+b 106
+b 232
+b 234
+b 285
+b 234
+b 1
+b 280
+b 1
+b 348
+b 378
+b 397
+b 347
+b 1
+b 103
+b 113
+b 33
+b 22
+b 0
+b 300
+b 307
+b 349
+b 306
+b 1
+b 73
+b 75
+b 77
+b 73
+b 1
+b 106
+b 108
+b 118
+b 139
+b 141
+b 143
+b 141
+b 1
+b 63
+b 1
+b 105
+b 367
+b 369
+b 371
+b 373
+b 116
+b 24
+b 266
+b 268
+b 270
+b 266
+b 1
+b 85
+b 120
+b 84
+b 1
+b 116
+b 1
+b 139
+b 128
+b 146
+b 145
+b 1
+b 97
+b 168
+b 182
+b 184
+b 378
+b 380
+b 476
+b 378
+b 1
+b 42
+b 44
+b 76
+b 75
+b 1
+b 35
+b 28
+b 35
+b 85
+b 84
+b 1
+b 3
+b 0
+b 2
+b 325
+b 9
+b 10
+b 49
+b 18
+b 15
+b 1
+b 8
+b 115
+b 160
+b 114
+b 1
+b 160
+b 184
+b 181
+b 1
+b 25
+b 24
+b 1
+b 4
+b 6
+b 779
+b 781
+b 912
+b 131
+b 234
+b 231
+b 1
+b 3
+b 0
+b 1
+b 33
+b 3
+b 44
+b 114
+b 61
+b 61
+b 1
+b 3
+b 25
+b 27
+b 29
+b 31
+b 31
+b 33
+b 164
+b 163
+b 1
+b 260
+b 270
+b 259
+b 1
+b 56
+b 37
+b 70
+b 1
+b 189
+b 187
+b 1
+b 52
+b 62
+b 61
+b 1
+b 19
+b 21
+b 23
+b 19
+b 1
+b 13
+b 15
+b 30
+b 129
+b 131
+b 182
+b 32
+b 29
+b 1
+b 34
+b 33
+b 1
+b 43
+b 59
+b 317
+b 0
+b 2
+b 16
+b 60
+b 17
+b 14
+b 1
+b 42
+b 41
+b 1
+b 52
+b 54
+b 43
+b 45
+b 62
+b 61
+b 1
+b 52
+b 86
+b 88
+b 86
+b 1
+b 56
+b 54
+b 1
+b 103
+b 17
+b 16
+b 1
+b 32
+b 3
+b 186
+b 185
+b 1
+b 15
+b 22
+b 24
+b 89
+b 13
+b 12
+b 1
+b 11
+b 13
+b 73
+b 95
+b 71
+b 1
+b 0
+b 23
+b 25
+b 27
+b 160
+b 162
+b 186
+b 183
+b 1
+b 34
+b 36
+b 99
+b 98
+b 1
+b 53
+b 55
+b 55
+b 1
+b 140
+b 139
+b 1
+b 138
+b 137
+b 1
+b 62
+b 64
+b 59
+b 1
+b 284
+b 286
+b 302
+b 286
+b 1
+b 298
+b 1
+b 183
+b 180
+b 1
+b 260
+b 270
+b 258
+b 1
+b 204
+b 222
+b 3
+b 2
+b 236
+b 17
+b 98
+b 100
+b 102
+b 104
+b 100
+b 1
+b 8
+b 10
+b 12
+b 8
+b 1
+b 21
+b 23
+b 25
+b 17
+b 19
+b 8
+b 235
+b 232
+b 1
+b 169
+b 166
+b 1
+b 142
+b 5
+b 23
+b 41
+b 63
+b 22
+b 1
+b 182
+b 26
+b 46
+b 45
+b 1
+b 21
+b 31
+b 101
+b 103
+b 105
+b 101
+b 1
+b 272
+b 290
+b 300
+b 271
+b 1
+b 51
+b 64
+b 66
+b 49
+b 1
+b 64
+b 1
+b 7
+b 7
+b 111
+b 108
+b 1
+b 5
+b 15
+b 3
+b 1
+b 14
+b 112
+b 53
+b 68
+b 70
+b 52
+b 1
+b 73
+b 72
+b 1
+b 49
+b 51
+b 899
+b 901
+b 903
+b 905
+b 901
+b 1
+b 14
+b 12
+b 38
+b 208
+b 36
+b 73
+b 33
+b 1
+b 356
+b 358
+b 360
+b 356
+b 1
+b 1
+b 10
+b 9
+b 1
+b 245
+b 273
+b 68
+b 67
+b 1
+b 73
+b 75
+b 20
+b 29
+b 16
+b 26
+b 75
+b 102
+b 101
+b 1
+b 218
+b 39
+b 92
+b 94
+b 96
+b 98
+b 94
+b 1
+b 29
+b 31
+b 33
+b 41
+b 12
+b 20
+b 11
+b 1
+b 16
+b 1
+b 17
+b 45
+b 67
+b 73
+b 84
+b 70
+b 1
+b 0
+b 40
+b 0
+b 2
+b 10
+b 21
+b 47
+b 167
+b 164
+b 1
+b 25
+b 27
+b 32
+b 30
+b 1
+b 19
+b 42
+b 41
+b 1
+b 4
+b 12
+b 14
+b 12
+b 1
+b 41
+b 38
+b 1
+b 8
+b 68
+b 66
+b 1
+b 57
+b 59
+b 72
+b 342
+b 76
+b 87
+b 89
+b 91
+b 93
+b 87
+b 1
+b 92
+b 53
+b 138
+b 33
+b 66
+b 6
+b 48
+b 66
+b 17
+b 67
+b 150
+b 11
+b 46
+b 3
+b 3
+b 1
+b 54
+b 56
+b 58
+b 189
+b 128
+b 125
+b 1
+b 5
+b 2
+b 1
+b 9
+b 11
+b 13
+b 31
+b 46
+b 1134
+b 1422
+b 1419
+b 1
+b 9
+b 8
+b 1
+b 9
+b 11
+b 13
+b 111
+b 113
+b 115
+b 111
+b 1
+b 25
+b 27
+b 48
+b 25
+b 1
+b 158
+b 160
+b 162
+b 162
+b 1
+b 4
+b 6
+b 8
+b 10
+b 67
+b 69
+b 67
+b 1
+b 11
+b 120
+b 176
+b 173
+b 1
+b 0
+b 78
+b 80
+b 56
+b 67
+b 69
+b 77
+b 22
+b 30
+b 32
+b 21
+b 1
+b 17
+b 19
+b 21
+b 23
+b 19
+b 1
+b 23
+b 25
+b 27
+b 29
+b 23
+b 25
+b 27
+b 29
+b 317
+b 316
+b 1
+b 50
+b 64
+b 48
+b 1
+b 62
+b 64
+b 100
+b 76
+b 0
+b 2
+b 1
+b 15
+b 14
+b 1
+b 28
+b 42
+b 5
+b 13
+b 15
+b 4
+b 1
+b 25
+b 27
+b 22
+b 1
+b 5
+b 4
+b 1
+b 307
+b 309
+b 345
+b 307
+b 1
+b 42
+b 60
+b 42
+b 1
+b 31
+b 33
+b 35
+b 31
+b 1
+b 399
+b 407
+b 431
+b 398
+b 1
+b 403
+b 1
+b 7
+b 9
+b 11
+b 4
+b 1
+b 9
+b 1
+b 108
+b 110
+b 112
+b 3
+b 191
+b 190
+b 1
+b 63
+b 63
+b 1
+b 448
+b 450
+b 452
+b 454
+b 65
+b 79
+b 41
+b 43
+b 45
+b 45
+b 1
+b 161
+b 160
+b 1
+b 11
+b 10
+b 1
+b 5
+b 60
+b 11
+b 17
+b 16
+b 1
+b 61
+b 58
+b 1
+b 6
+b 46
+b 70
+b 77
+b 45
+b 1
+b 143
+b 153
+b 155
+b 153
+b 1
+b 93
+b 90
+b 1
+b 45
+b 37
+b 89
+b 89
+b 1
+b 118
+b 103
+b 118
+b 102
+b 1
+b 89
+b 99
+b 69
+b 7
+b 9
+b 99
+b 98
+b 1
+b 48
+b 50
+b 32
+b 44
+b 169
+b 171
+b 15
+b 23
+b 14
+b 1
+b 90
+b 92
+b 87
+b 1
+b 25
+b 22
+b 1
+b 149
+b 159
+b 12
+b 9
+b 1
+b 10
+b 7
+b 4
+b 1
+b 22
+b 400
+b 114
+b 172
+b 112
+b 1
+b 3
+b 62
+b 64
+b 62
+b 1
+b 37
+b 83
+b 5
+b 106
+b 108
+b 110
+b 108
+b 1
+b 57
+b 65
+b 6
+b 28
+b 30
+b 28
+b 1
+b 94
+b 104
+b 1315
+b 1331
+b 1315
+b 1
+b 1327
+b 1
+b 7
+b 53
+b 46
+b 46
+b 1
+b 18
+b 8
+b 8
+b 1
+b 5
+b 4
+b 1
+b 89
+b 135
+b 259
+b 258
+b 1
+b 40
+b 42
+b 42
+b 1
+b 9
+b 8
+b 1
+b 4
+b 20
+b 19
+b 1
+b 53
+b 71
+b 8
+b 3
+b 5
+b 20
+b 40
+b 37
+b 1
+b 90
+b 104
+b 88
+b 1
+b 102
+b 1
+b 89
+b 122
+b 7
+b 108
+b 23
+b 33
+b 22
+b 1
+b 82
+b 53
+b 52
+b 1
+b 7
+b 5
+b 1
+b 189
+b 223
+b 188
+b 1
+b 218
+b 1
+b 33
+b 86
+b 88
+b 67
+b 66
+b 1
+b 51
+b 53
+b 81
+b 333
+b 353
+b 355
+b 332
+b 1
+b 5
+b 15
+b 2
+b 1
+b 445
+b 478
+b 122
+b 124
+b 119
+b 1
+b 1
+b 1
+b 1
+b 200
+b 245
+b 198
+b 1
+b 7
+b 6
+b 1
+b 76
+b 78
+b 7
+b 9
+b 11
+b 94
+b 113
+b 149
+b 2
+b 79
+b 78
+b 1
+b 17
+b 19
+b 314
+b 316
+b 318
+b 314
+b 1
+b 58
+b 9
+b 24
+b 26
+b 28
+b 66
+b 7
+b 44
+b 24
+b 26
+b 268
+b 304
+b 265
+b 1
+b 302
+b 1
+b 193
+b 195
+b 197
+b 193
+b 1
+b 12
+b 14
+b 16
+b 12
+b 1
+b 51
+b 149
+b 180
+b 41
+b 99
+b 13
+b 15
+b 13
+b 21
+b 352
+b 43
+b 2
+b 56
+b 337
+b 339
+b 341
+b 28
+b 48
+b 56
+b 27
+b 1
+b 44
+b 1
+b 52
+b 49
+b 1
+b 41
+b 38
+b 1
+b 66
+b 83
+b 65
+b 1
+b 208
+b 314
+b 339
+b 338
+b 1
+b 0
+b 1
+b 19
+b 143
+b 23
+b 45
+b 23
+b 1
+b 40
+b 1
+b 63
+b 91
+b 127
+b 125
+b 127
+b 197
+b 3
+b 90
+b 92
+b 94
+b 96
+b 92
+b 1
+b 66
+b 65
+b 1
+b 14
+b 24
+b 1008
+b 1024
+b 1292
+b 1294
+b 1296
+b 1298
+b 1294
+b 1
+b 3
+b 25
+b 96
+b 96
+b 1
+b 37
+b 34
+b 1
+b 590
+b 596
+b 641
+b 640
+b 1
+b 20
+b 22
+b 24
+b 26
+b 22
+b 1
+b 105
+b 125
+b 181
+b 175
+b 77
+b 58
+b 196
+b 198
+b 3
+b 1
+b 1
+b 52
+b 54
+b 56
+b 58
+b 72
+b 100
+b 13
+b 15
+b 17
+b 13
+b 1
+b 187
+b 189
+b 191
+b 187
+b 1
+b 40
+b 0
+b 2
+b 41
+b 31
+b 10
+b 34
+b 33
+b 1
+b 9
+b 331
+b 119
+b 17
+b 19
+b 21
+b 23
+b 14
+b 1
+b 21
+b 1
+b 25
+b 43
+b 2
+b 4
+b 6
+b 20
+b 22
+b 24
+b 34
+b 212
+b 43
+b 382
+b 40
+b 473
+b 520
+b 59
+b 82
+b 70
+b 72
+b 74
+b 84
+b 22
+b 52
+b 1290
+b 1299
+b 1287
+b 1
+b 1296
+b 1
+b 11
+b 91
+b 45
+b 47
+b 119
+b 118
+b 1
+b 5
+b 23
+b 2
+b 1
+b 21
+b 1
+b 35
+b 69
+b 68
+b 1
+b 380
+b 86
+b 58
+b 116
+b 113
+b 1
+b 112
+b 95
+b 1
+b 6
+b 13
+b 3
+b 1
+b 10
+b 1
+b 30
+b 49
+b 70
+b 217
+b 13
+b 15
+b 13
+b 1
+b 24
+b 23
+b 1
+b 77
+b 77
+b 1
+b 103
+b 122
+b 124
+b 122
+b 1
+b 197
+b 194
+b 1
+b 38
+b 142
+b 144
+b 146
+b 144
+b 1
+b 159
+b 163
+b 165
+b 163
+b 1
+b 201
+b 5
+b 46
+b 61
+b 50
+b 47
+b 1
+b 29
+b 27
+b 1
+b 113
+b 4
+b 6
+b 8
+b 81
+b 83
+b 85
+b 57
+b 198
+b 2
+b 4
+b 6
+b 8
+b 93
+b 95
+b 97
+b 99
+b 95
+b 1
+b 383
+b 385
+b 387
+b 389
+b 69
+b 71
+b 73
+b 75
+b 110
+b 112
+b 114
+b 116
+b 114
+b 1
+b 20
+b 87
+b 92
+b 34
+b 238
+b 248
+b 250
+b 237
+b 1
+b 110
+b 112
+b 114
+b 116
+b 112
+b 1
+b 289
+b 337
+b 352
+b 288
+b 1
+b 96
+b 98
+b 112
+b 111
+b 1
+b 371
+b 379
+b 395
+b 370
+b 1
+b 55
+b 54
+b 1
+b 116
+b 118
+b 5
+b 36
+b 17
+b 37
+b 39
+b 114
+b 2
+b 11
+b 12
+b 64
+b 86
+b 63
+b 1
+b 47
+b 64
+b 74
+b 63
+b 1
+b 70
+b 1
+b 31
+b 41
+b 28
+b 1
+b 39
+b 1
+b 134
+b 131
+b 1
+b 96
+b 47
+b 1
+b 27
+b 4
+b 349
+b 348
+b 1
+b 5
+b 42
+b 44
+b 39
+b 1
+b 10
+b 7
+b 19
+b 46
+b 48
+b 46
+b 1
+b 61
+b 137
+b 175
+b 136
+b 1
+b 14
+b 2
+b 4
+b 2
+b 1
+b 166
+b 168
+b 170
+b 172
+b 163
+b 1
+b 170
+b 1
+b 247
+b 267
+b 269
+b 246
+b 1
+b 36
+b 25
+b 3
+b 16
+b 1
+b 1
+b 14
+b 1
+b 64
+b 92
+b 59
+b 6
+b 8
+b 36
+b 45
+b 47
+b 142
+b 144
+b 142
+b 1
+b 1
+b 110
+b 16
+b 53
+b 55
+b 57
+b 71
+b 73
+b 87
+b 68
+b 1
+b 84
+b 1
+b 15
+b 17
+b 17
+b 1
+b 233
+b 235
+b 237
+b 245
+b 243
+b 1
+b 3
+b 5
+b 54
+b 1
+b 7
+b 59
+b 61
+b 63
+b 56
+b 1
+b 167
+b 175
+b 177
+b 166
+b 1
+b 140
+b 142
+b 140
+b 1
+b 31
+b 10
+b 12
+b 14
+b 25
+b 34
+b 196
+b 220
+b 293
+b 12
+b 0
+b 8
+b 47
+b 49
+b 29
+b 28
+b 1
+b 85
+b 84
+b 1
+b 8
+b 6
+b 3
+b 1
+b 243
+b 271
+b 273
+b 271
+b 1
+b 199
+b 201
+b 217
+b 199
+b 1
+b 47
+b 83
+b 94
+b 96
+b 28
+b 27
+b 1
+b 79
+b 150
+b 8
+b 10
+b 26
+b 5
+b 1
+b 23
+b 1
+b 100
+b 114
+b 116
+b 98
+b 1
+b 114
+b 1
+b 37
+b 39
+b 39
+b 1
+b 10
+b 192
+b 69
+b 35
+b 57
+b 100
+b 44
+b 7
+b 6
+b 1
+b 189
+b 191
+b 191
+b 1
+b 46
+b 45
+b 1
+b 137
+b 159
+b 161
+b 159
+b 1
+b 162
+b 79
+b 38
+b 29
+b 8
+b 77
+b 31
+b 50
+b 57
+b 49
+b 1
+b 60
+b 87
+b 89
+b 59
+b 1
+b 328
+b 129
+b 131
+b 731
+b 755
+b 31
+b 41
+b 30
+b 1
+b 13
+b 159
+b 210
+b 445
+b 513
+b 444
+b 1
+b 509
+b 1
+b 5
+b 320
+b 366
+b 234
+b 73
+b 25
+b 16
+b 18
+b 20
+b 11
+b 13
+b 15
+b 17
+b 15
+b 1
+b 18
+b 28
+b 2
+b 4
+b 6
+b 46
+b 43
+b 1
+b 11
+b 210
+b 207
+b 1
+b 58
+b 60
+b 89
+b 88
+b 1
+b 92
+b 94
+b 96
+b 98
+b 96
+b 1
+b 60
+b 36
+b 108
+b 110
+b 112
+b 114
+b 108
+b 1
+b 52
+b 62
+b 122
+b 119
+b 1
+b 91
+b 89
+b 1
+b 271
+b 329
+b 270
+b 1
+b 117
+b 10
+b 7
+b 1
+b 6
+b 5
+b 27
+b 26
+b 1
+b 189
+b 199
+b 186
+b 1
+b 30
+b 29
+b 1
+b 112
+b 200
+b 9
+b 2
+b 156
+b 199
+b 155
+b 1
+b 194
+b 1
+b 592
+b 589
+b 1
+b 13
+b 11
+b 1
+b 6
+b 1157
+b 1434
+b 45
+b 7
+b 6
+b 1
+b 1
+b 175
+b 187
+b 186
+b 1
+b 152
+b 1126
+b 38
+b 107
+b 96
+b 104
+b 114
+b 103
+b 1
+b 45
+b 71
+b 126
+b 152
+b 123
+b 1
+b 149
+b 1
+b 250
+b 272
+b 249
+b 1
+b 58
+b 104
+b 106
+b 57
+b 1
+b 5
+b 7
+b 44
+b 7
+b 1
+b 39
+b 1
+b 46
+b 8
+b 90
+b 8
+b 105
+b 137
+b 21
+b 20
+b 1
+b 1
+b 11
+b 121
+b 120
+b 1
+b 79
+b 81
+b 81
+b 1
+b 17
+b 5
+b 1
+b 26
+b 28
+b 100
+b 16
+b 407
+b 409
+b 425
+b 68
+b 11
+b 10
+b 1
+b 16
+b 18
+b 46
+b 16
+b 1
+b 49
+b 51
+b 51
+b 1
+b 87
+b 86
+b 1
+b 38
+b 43
+b 709
+b 724
+b 706
+b 1
+b 721
+b 1
+b 248
+b 250
+b 21
+b 20
+b 1
+b 163
+b 165
+b 167
+b 165
+b 1
+b 46
+b 7
+b 21
+b 31
+b 33
+b 19
+b 1
+b 26
+b 6
+b 114
+b 23
+b 46
+b 22
+b 1
+b 188
+b 198
+b 60
+b 59
+b 1
+b 5
+b 7
+b 95
+b 93
+b 1
+b 105
+b 467
+b 469
+b 171
+b 181
+b 183
+b 170
+b 1
+b 91
+b 124
+b 126
+b 124
+b 1
+b 193
+b 192
+b 1
+b 1
+b 47
+b 133
+b 51
+b 50
+b 1
+b 318
+b 198
+b 1355
+b 1357
+b 1359
+b 1361
+b 1357
+b 1
+b 32
+b 34
+b 36
+b 38
+b 271
+b 13
+b 125
+b 124
+b 1
+b 72
+b 126
+b 1
+b 133
+b 3
+b 52
+b 41
+b 47
+b 45
+b 1
+b 3
+b 5
+b 7
+b 5
+b 1
+b 133
+b 135
+b 137
+b 19
+b 29
+b 387
+b 47
+b 49
+b 47
+b 1
+b 276
+b 288
+b 16
+b 26
+b 214
+b 216
+b 41
+b 7
+b 9
+b 11
+b 52
+b 141
+b 140
+b 1
+b 8
+b 37
+b 34
+b 1
+b 32
+b 29
+b 1
+b 7
+b 160
+b 188
+b 167
+b 50
+b 82
+b 116
+b 118
+b 81
+b 1
+b 27
+b 9
+b 43
+b 65
+b 115
+b 123
+b 125
+b 123
+b 1
+b 68
+b 9
+b 1
+b 201
+b 203
+b 239
+b 201
+b 1
+b 80
+b 88
+b 87
+b 1
+b 24
+b 21
+b 1
+b 7
+b 4
+b 14
+b 696
+b 702
+b 704
+b 63
+b 27
+b 85
+b 87
+b 89
+b 91
+b 55
+b 7
+b 584
+b 638
+b 56
+b 6
+b 5
+b 1
+b 74
+b 30
+b 32
+b 34
+b 36
+b 34
+b 1
+b 39
+b 41
+b 43
+b 45
+b 176
+b 178
+b 180
+b 23
+b 25
+b 49
+b 48
+b 1
+b 49
+b 51
+b 53
+b 4
+b 18
+b 0
+b 2
+b 93
+b 7
+b 11
+b 2
+b 26
+b 48
+b 13
+b 12
+b 1
+b 16
+b 13
+b 1
+b 402
+b 411
+b 410
+b 1
+b 51
+b 167
+b 169
+b 167
+b 1
+b 31
+b 29
+b 1
+b 70
+b 99
+b 101
+b 51
+b 401
+b 400
+b 1
+b 4
+b 310
+b 337
+b 307
+b 1
+b 141
+b 197
+b 1
+b 33
+b 14
+b 4
+b 7
+b 6
+b 1
+b 254
+b 266
+b 253
+b 1
+b 18
+b 318
+b 25
+b 52
+b 73
+b 75
+b 51
+b 1
+b 68
+b 3
+b 86
+b 88
+b 86
+b 1
+b 115
+b 136
+b 144
+b 198
+b 218
+b 138
+b 140
+b 142
+b 144
+b 138
+b 1
+b 64
+b 66
+b 106
+b 64
+b 1
+b 88
+b 4
+b 14
+b 1
+b 62
+b 61
+b 1
+b 27
+b 164
+b 228
+b 230
+b 232
+b 234
+b 228
+b 1
+b 22
+b 29
+b 43
+b 74
+b 40
+b 1
+b 129
+b 127
+b 22
+b 24
+b 22
+b 1
+b 25
+b 31
+b 27
+b 72
+b 71
+b 1
+b 25
+b 27
+b 22
+b 1
+b 7
+b 6
+b 1
+b 228
+b 225
+b 1
+b 54
+b 68
+b 78
+b 78
+b 1
+b 275
+b 21
+b 18
+b 1
+b 94
+b 309
+b 311
+b 309
+b 1
+b 37
+b 63
+b 34
+b 1
+b 61
+b 1
+b 6
+b 8
+b 10
+b 10
+b 1
+b 18
+b 16
+b 1
+b 1
+b 9
+b 19
+b 41
+b 49
+b 2
+b 5
+b 7
+b 59
+b 7
+b 1
+b 55
+b 1
+b 170
+b 209
+b 169
+b 1
+b 97
+b 105
+b 104
+b 1
+b 3
+b 64
+b 4
+b 131
+b 161
+b 175
+b 160
+b 1
+b 170
+b 1
+b 118
+b 120
+b 9
+b 84
+b 9
+b 1
+b 81
+b 1
+b 53
+b 73
+b 75
+b 73
+b 1
+b 62
+b 64
+b 66
+b 237
+b 239
+b 254
+b 237
+b 1
+b 98
+b 95
+b 1
+b 11
+b 8
+b 1
+b 239
+b 273
+b 237
+b 1
+b 20
+b 17
+b 1
+b 42
+b 44
+b 62
+b 38
+b 18
+b 61
+b 80
+b 79
+b 1
+b 1
+b 92
+b 111
+b 113
+b 9
+b 11
+b 13
+b 11
+b 1
+b 201
+b 30
+b 29
+b 1
+b 24
+b 22
+b 1
+b 24
+b 48
+b 50
+b 15
+b 79
+b 215
+b 214
+b 1
+b 16
+b 18
+b 20
+b 22
+b 554
+b 556
+b 558
+b 556
+b 1
+b 87
+b 97
+b 99
+b 97
+b 1
+b 88
+b 87
+b 1
+b 5
+b 5
+b 1
+b 26
+b 99
+b 101
+b 25
+b 1
+b 2
+b 32
+b 23
+b 56
+b 26
+b 52
+b 54
+b 25
+b 1
+b 130
+b 127
+b 1
+b 43
+b 42
+b 1
+b 158
+b 166
+b 3
+b 5
+b 7
+b 9
+b 7
+b 1
+b 25
+b 27
+b 97
+b 25
+b 1
+b 49
+b 63
+b 153
+b 155
+b 157
+b 28
+b 55
+b 472
+b 28
+b 33
+b 74
+b 107
+b 104
+b 1
+b 83
+b 82
+b 1
+b 0
+b 2
+b 65
+b 156
+b 215
+b 225
+b 234
+b 212
+b 1
+b 231
+b 1
+b 4
+b 6
+b 8
+b 10
+b 25
+b 27
+b 35
+b 246
+b 5
+b 47
+b 44
+b 1
+b 317
+b 339
+b 315
+b 1
+b 17
+b 7
+b 14
+b 16
+b 18
+b 41
+b 131
+b 130
+b 1
+b 8
+b 21
+b 124
+b 123
+b 1
+b 22
+b 24
+b 108
+b 3
+b 102
+b 18
+b 20
+b 18
+b 1
+b 6
+b 8
+b 11
+b 9
+b 1
+b 20
+b 21
+b 89
+b 98
+b 11
+b 50
+b 218
+b 37
+b 9
+b 7
+b 1
+b 3
+b 4
+b 73
+b 70
+b 1
+b 54
+b 56
+b 58
+b 54
+b 1
+b 77
+b 90
+b 89
+b 1
+b 3
+b 0
+b 1
+b 8
+b 289
+b 26
+b 21
+b 1
+b 308
+b 10
+b 12
+b 10
+b 1
+b 34
+b 36
+b 38
+b 31
+b 1
+b 36
+b 1
+b 59
+b 69
+b 8
+b 5
+b 55
+b 54
+b 1
+b 4
+b 138
+b 172
+b 249
+b 248
+b 1
+b 172
+b 360
+b 376
+b 217
+b 219
+b 221
+b 217
+b 1
+b 94
+b 104
+b 48
+b 50
+b 40
+b 165
+b 231
+b 233
+b 164
+b 1
+b 49
+b 51
+b 53
+b 55
+b 13
+b 15
+b 14
+b 13
+b 1
+b 10
+b 25
+b 9
+b 1
+b 7
+b 48
+b 50
+b 52
+b 205
+b 202
+b 1
+b 102
+b 58
+b 57
+b 1
+b 25
+b 22
+b 1
+b 12
+b 244
+b 211
+b 231
+b 210
+b 1
+b 81
+b 1
+b 15
+b 134
+b 136
+b 138
+b 140
+b 27
+b 29
+b 53
+b 29
+b 1
+b 121
+b 128
+b 19
+b 18
+b 1
+b 3
+b 5
+b 67
+b 85
+b 87
+b 24
+b 22
+b 1
+b 93
+b 91
+b 1
+b 117
+b 119
+b 121
+b 117
+b 1
+b 27
+b 197
+b 196
+b 1
+b 211
+b 208
+b 1
+b 47
+b 154
+b 1128
+b 4
+b 14
+b 13
+b 1
+b 30
+b 133
+b 147
+b 17
+b 33
+b 30
+b 1
+b 33
+b 35
+b 1
+b 16
+b 27
+b 12
+b 53
+b 11
+b 1
+b 50
+b 1
+b 1
+b 37
+b 1
+b 20
+b 4
+b 261
+b 27
+b 29
+b 75
+b 85
+b 87
+b 85
+b 1
+b 881
+b 883
+b 885
+b 881
+b 1
+b 99
+b 129
+b 131
+b 98
+b 1
+b 124
+b 1
+b 53
+b 55
+b 57
+b 59
+b 53
+b 1
+b 254
+b 256
+b 254
+b 1
+b 145
+b 143
+b 1
+b 2
+b 2
+b 1
+b 14
+b 16
+b 16
+b 1
+b 17
+b 19
+b 1
+b 121
+b 19
+b 109
+b 306
+b 498
+b 495
+b 1
+b 19
+b 416
+b 430
+b 438
+b 414
+b 1
+b 73
+b 75
+b 35
+b 34
+b 1
+b 272
+b 280
+b 271
+b 1
+b 10
+b 38
+b 8
+b 1
+b 120
+b 122
+b 124
+b 117
+b 1
+b 122
+b 1
+b 411
+b 413
+b 413
+b 1
+b 4
+b 2
+b 1
+b 61
+b 60
+b 1
+b 53
+b 55
+b 63
+b 169
+b 171
+b 60
+b 1
+b 169
+b 1
+b 166
+b 19
+b 18
+b 1
+b 24
+b 15
+b 21
+b 47
+b 79
+b 33
+b 157
+b 16
+b 15
+b 1
+b 288
+b 290
+b 290
+b 1
+b 11
+b 10
+b 1
+b 19
+b 33
+b 19
+b 1
+b 50
+b 66
+b 0
+b 2
+b 131
+b 11
+b 10
+b 65
+b 296
+b 295
+b 1
+b 284
+b 1
+b 41
+b 43
+b 45
+b 47
+b 45
+b 1
+b 47
+b 49
+b 51
+b 53
+b 1007
+b 1009
+b 1019
+b 112
+b 124
+b 111
+b 1
+b 32
+b 34
+b 36
+b 38
+b 36
+b 1
+b 19
+b 18
+b 1
+b 20
+b 33
+b 17
+b 1
+b 146
+b 148
+b 150
+b 152
+b 146
+b 1
+b 26
+b 28
+b 30
+b 26
+b 1
+b 145
+b 147
+b 15
+b 14
+b 1
+b 309
+b 8
+b 184
+b 186
+b 188
+b 186
+b 1
+b 42
+b 44
+b 46
+b 48
+b 42
+b 1
+b 366
+b 3
+b 273
+b 275
+b 277
+b 273
+b 1
+b 65
+b 67
+b 67
+b 1
+b 1
+b 1
+b 1
+b 34
+b 31
+b 1
+b 2
+b 16
+b 24
+b 46
+b 18
+b 18
+b 1
+b 298
+b 334
+b 1147
+b 1423
+b 3
+b 5
+b 7
+b 15
+b 54
+b 53
+b 1
+b 78
+b 14
+b 13
+b 1
+b 132
+b 134
+b 136
+b 28
+b 30
+b 28
+b 1
+b 16
+b 76
+b 94
+b 32
+b 52
+b 62
+b 28
+b 37
+b 36
+b 1
+b 727
+b 729
+b 747
+b 8
+b 10
+b 17
+b 127
+b 170
+b 79
+b 37
+b 39
+b 37
+b 1
+b 15
+b 17
+b 19
+b 17
+b 1
+b 9
+b 33
+b 32
+b 34
+b 29
+b 1
+b 32
+b 1
+b 240
+b 242
+b 244
+b 4
+b 40
+b 39
+b 1
+b 18
+b 20
+b 64
+b 18
+b 1
+b 39
+b 60
+b 259
+b 25
+b 11
+b 25
+b 239
+b 248
+b 250
+b 238
+b 1
+b 241
+b 261
+b 72
+b 74
+b 93
+b 80
+b 90
+b 69
+b 71
+b 7
+b 45
+b 47
+b 17
+b 14
+b 1
+b 56
+b 213
+b 54
+b 1
+b 208
+b 1
+b 7
+b 789
+b 256
+b 21
+b 58
+b 18
+b 1
+b 50
+b 49
+b 1
+b 296
+b 304
+b 47
+b 55
+b 88
+b 98
+b 100
+b 86
+b 1
+b 98
+b 1
+b 398
+b 415
+b 278
+b 286
+b 14
+b 66
+b 913
+b 915
+b 1343
+b 910
+b 1
+b 1338
+b 1
+b 6
+b 5
+b 1
+b 0
+b 58
+b 63
+b 65
+b 7
+b 184
+b 210
+b 181
+b 1
+b 1
+b 0
+b 1
+b 128
+b 130
+b 132
+b 134
+b 115
+b 114
+b 1
+b 386
+b 423
+b 383
+b 1
+b 10
+b 12
+b 34
+b 98
+b 3
+b 5
+b 3
+b 1
+b 107
+b 133
+b 135
+b 106
+b 1
+b 128
+b 1
+b 53
+b 55
+b 196
+b 33
+b 8
+b 22
+b 7
+b 1
+b 146
+b 92
+b 62
+b 128
+b 61
+b 1
+b 0
+b 2
+b 4
+b 6
+b 8
+b 74
+b 84
+b 72
+b 1
+b 3
+b 2
+b 212
+b 228
+b 83
+b 141
+b 126
+b 126
+b 1
+b 67
+b 64
+b 1
+b 296
+b 298
+b 306
+b 304
+b 1
+b 149
+b 148
+b 1
+b 7
+b 0
+b 10
+b 292
+b 3
+b 5
+b 37
+b 39
+b 2
+b 116
+b 118
+b 69
+b 68
+b 1
+b 103
+b 105
+b 107
+b 100
+b 1
+b 138
+b 56
+b 58
+b 56
+b 1
+b 170
+b 20
+b 19
+b 1
+b 79
+b 130
+b 0
+b 2
+b 12
+b 123
+b 79
+b 105
+b 78
+b 1
+b 1359
+b 44
+b 171
+b 173
+b 187
+b 171
+b 1
+b 10
+b 20
+b 723
+b 751
+b 720
+b 1
+b 97
+b 99
+b 107
+b 57
+b 67
+b 166
+b 178
+b 165
+b 1
+b 212
+b 226
+b 209
+b 1
+b 224
+b 1
+b 90
+b 156
+b 158
+b 115
+b 122
+b 121
+b 1
+b 29
+b 31
+b 33
+b 63
+b 65
+b 67
+b 69
+b 102
+b 113
+b 427
+b 429
+b 431
+b 429
+b 1
+b 60
+b 62
+b 70
+b 72
+b 69
+b 1
+b 51
+b 1
+b 0
+b 1
+b 4
+b 35
+b 2
+b 1
+b 147
+b 149
+b 151
+b 151
+b 1
+b 163
+b 165
+b 167
+b 169
+b 171
+b 167
+b 1
+b 4
+b 6
+b 8
+b 10
+b 4
+b 1
+b 172
+b 198
+b 170
+b 1
+b 196
+b 1
+b 460
+b 484
+b 58
+b 57
+b 1
+b 418
+b 420
+b 422
+b 15
+b 215
+b 231
+b 344
+b 4
+b 118
+b 133
+b 205
+b 117
+b 1
+b 151
+b 167
+b 169
+b 150
+b 1
+b 269
+b 271
+b 266
+b 1
+b 264
+b 261
+b 1
+b 1035
+b 1042
+b 18
+b 25
+b 74
+b 81
+b 83
+b 180
+b 187
+b 189
+b 179
+b 1
+b 26
+b 46
+b 48
+b 25
+b 1
+b 322
+b 364
+b 132
+b 134
+b 4
+b 205
+b 207
+b 209
+b 211
+b 202
+b 1
+b 209
+b 1
+b 51
+b 53
+b 3
+b 2
+b 1
+b 47
+b 49
+b 51
+b 53
+b 47
+b 1
+b 28
+b 30
+b 102
+b 209
+b 221
+b 14
+b 16
+b 9
+b 50
+b 52
+b 54
+b 47
+b 1
+b 99
+b 101
+b 103
+b 912
+b 924
+b 926
+b 43
+b 40
+b 1
+b 44
+b 3
+b 2
+b 1
+b 43
+b 3
+b 142
+b 121
+b 22
+b 30
+b 62
+b 29
+b 1
+b 57
+b 1
+b 15
+b 17
+b 39
+b 38
+b 1
+b 177
+b 10
+b 410
+b 5
+b 163
+b 163
+b 1
+b 25
+b 24
+b 1
+b 235
+b 237
+b 261
+b 10
+b 407
+b 38
+b 16
+b 81
+b 15
+b 1
+b 77
+b 1
+b 19
+b 45
+b 9
+b 151
+b 167
+b 1314
+b 15
+b 12
+b 19
+b 123
+b 21
+b 17
+b 181
+b 189
+b 14
+b 1
+b 119
+b 524
+b 526
+b 524
+b 1
+b 117
+b 99
+b 109
+b 80
+b 128
+b 375
+b 0
+b 2
+b 45
+b 47
+b 49
+b 29
+b 110
+b 112
+b 114
+b 110
+b 1
+b 96
+b 98
+b 100
+b 102
+b 96
+b 1
+b 66
+b 66
+b 1
+b 69
+b 68
+b 1
+b 99
+b 110
+b 96
+b 1
+b 58
+b 60
+b 68
+b 17
+b 12
+b 3
+b 301
+b 319
+b 47
+b 97
+b 44
+b 1
+b 21
+b 23
+b 25
+b 18
+b 1
+b 113
+b 197
+b 82
+b 84
+b 82
+b 1
+b 14
+b 0
+b 33
+b 35
+b 43
+b 11
+b 29
+b 228
+b 238
+b 129
+b 131
+b 133
+b 62
+b 60
+b 1
+b 18
+b 33
+b 15
+b 1
+b 25
+b 27
+b 39
+b 38
+b 1
+b 7
+b 163
+b 117
+b 116
+b 1
+b 150
+b 166
+b 147
+b 1
+b 163
+b 1
+b 23
+b 25
+b 27
+b 29
+b 85
+b 94
+b 93
+b 1
+b 83
+b 85
+b 175
+b 91
+b 111
+b 88
+b 1
+b 109
+b 1
+b 288
+b 290
+b 84
+b 83
+b 1
+b 81
+b 32
+b 1253
+b 1282
+b 1250
+b 1
+b 42
+b 202
+b 3
+b 5
+b 7
+b 9
+b 36
+b 105
+b 17
+b 27
+b 51
+b 14
+b 1
+b 48
+b 1
+b 23
+b 37
+b 46
+b 45
+b 1
+b 2
+b 10
+b 376
+b 378
+b 376
+b 1
+b 0
+b 2
+b 95
+b 39
+b 64
+b 80
+b 104
+b 103
+b 1
+b 9
+b 34
+b 33
+b 1
+b 1
+b 7
+b 9
+b 33
+b 32
+b 1
+b 139
+b 153
+b 155
+b 153
+b 1
+b 27
+b 60
+b 24
+b 1
+b 52
+b 51
+b 1
+b 151
+b 15
+b 25
+b 14
+b 1
+b 21
+b 1
+b 435
+b 434
+b 1
+b 193
+b 54
+b 0
+b 16
+b 15
+b 1
+b 53
+b 86
+b 20
+b 0
+b 2
+b 14
+b 63
+b 63
+b 1
+b 160
+b 160
+b 1
+b 35
+b 33
+b 1
+b 12
+b 26
+b 25
+b 1
+b 9
+b 41
+b 59
+b 8
+b 1
+b 79
+b 19
+b 26
+b 178
+b 25
+b 20
+b 148
+b 147
+b 1
+b 76
+b 78
+b 80
+b 73
+b 1
+b 78
+b 1
+b 26
+b 28
+b 30
+b 32
+b 28
+b 1
+b 1228
+b 1226
+b 1
+b 3
+b 3
+b 1
+b 60
+b 159
+b 158
+b 1
+b 6
+b 12
+b 24
+b 67
+b 11
+b 1
+b 20
+b 1
+b 173
+b 44
+b 2
+b 103
+b 105
+b 116
+b 114
+b 1
+b 35
+b 43
+b 48
+b 34
+b 1
+b 205
+b 222
+b 203
+b 1
+b 29
+b 28
+b 1
+b 123
+b 137
+b 139
+b 59
+b 61
+b 3
+b 187
+b 76
+b 75
+b 1
+b 7
+b 8
+b 10
+b 12
+b 0
+b 43
+b 53
+b 109
+b 173
+b 175
+b 183
+b 182
+b 1
+b 168
+b 3
+b 28
+b 36
+b 51
+b 60
+b 70
+b 50
+b 1
+b 240
+b 249
+b 195
+b 574
+b 53
+b 75
+b 63
+b 65
+b 67
+b 91
+b 90
+b 1
+b 74
+b 84
+b 100
+b 102
+b 104
+b 102
+b 1
+b 211
+b 25
+b 11
+b 109
+b 127
+b 129
+b 108
+b 1
+b 101
+b 15
+b 68
+b 3
+b 145
+b 147
+b 149
+b 151
+b 14
+b 16
+b 18
+b 16
+b 1
+b 40
+b 42
+b 18
+b 22
+b 34
+b 59
+b 7
+b 6
+b 1
+b 149
+b 163
+b 148
+b 1
+b 43
+b 71
+b 106
+b 147
+b 5
+b 21
+b 4
+b 1
+b 174
+b 171
+b 1
+b 59
+b 56
+b 1
+b 7
+b 124
+b 28
+b 56
+b 296
+b 296
+b 1
+b 80
+b 79
+b 1
+b 397
+b 399
+b 401
+b 394
+b 1
+b 399
+b 1
+b 696
+b 721
+b 728
+b 24
+b 21
+b 1
+b 0
+b 2
+b 9
+b 8
+b 1
+b 11
+b 13
+b 15
+b 8
+b 1
+b 7
+b 378
+b 35
+b 50
+b 52
+b 4
+b 112
+b 114
+b 116
+b 118
+b 116
+b 1
+b 6
+b 16
+b 153
+b 155
+b 430
+b 432
+b 434
+b 436
+b 438
+b 436
+b 1
+b 41
+b 43
+b 45
+b 47
+b 41
+b 1
+b 32
+b 42
+b 31
+b 1
+b 212
+b 37
+b 152
+b 6
+b 5
+b 1
+b 0
+b 2
+b 12
+b 0
+b 1
+b 38
+b 53
+b 11
+b 24
+b 33
+b 35
+b 22
+b 1
+b 33
+b 1
+b 27
+b 35
+b 37
+b 26
+b 1
+b 42
+b 44
+b 46
+b 48
+b 51
+b 6
+b 40
+b 4
+b 8
+b 5
+b 1
+b 47
+b 4
+b 247
+b 249
+b 251
+b 29
+b 31
+b 33
+b 29
+b 1
+b 9
+b 11
+b 9
+b 1
+b 9
+b 14
+b 33
+b 30
+b 1
+b 6
+b 49
+b 48
+b 1
+b 453
+b 5
+b 177
+b 230
+b 229
+b 1
+b 67
+b 65
+b 1
+b 182
+b 320
+b 319
+b 1
+b 86
+b 216
+b 215
+b 1
+b 35
+b 53
+b 145
+b 144
+b 1
+b 35
+b 0
+b 74
+b 113
+b 115
+b 73
+b 1
+b 84
+b 96
+b 84
+b 1
+b 92
+b 1
+b 175
+b 177
+b 179
+b 181
+b 175
+b 1
+b 152
+b 105
+b 107
+b 105
+b 1
+b 24
+b 26
+b 50
+b 21
+b 1
+b 47
+b 1
+b 4
+b 155
+b 27
+b 35
+b 47
+b 363
+b 372
+b 143
+b 145
+b 168
+b 143
+b 1
+b 40
+b 50
+b 78
+b 39
+b 1
+b 46
+b 1
+b 55
+b 57
+b 59
+b 57
+b 1
+b 26
+b 39
+b 525
+b 2
+b 12
+b 440
+b 488
+b 437
+b 1
+b 234
+b 70
+b 72
+b 34
+b 43
+b 232
+b 15
+b 10
+b 20
+b 22
+b 322
+b 330
+b 332
+b 330
+b 1
+b 23
+b 25
+b 27
+b 29
+b 27
+b 1
+b 21
+b 38
+b 18
+b 1
+b 10
+b 9
+b 1
+b 227
+b 234
+b 236
+b 195
+b 27
+b 24
+b 1
+b 129
+b 126
+b 1
+b 9
+b 9
+b 1
+b 7
+b 181
+b 272
+b 272
+b 1
+b 1
+b 1
+b 1
+b 91
+b 93
+b 95
+b 97
+b 91
+b 1
+b 97
+b 41
+b 49
+b 40
+b 1
+b 47
+b 59
+b 61
+b 60
+b 108
+b 163
+b 165
+b 164
+b 163
+b 1
+b 229
+b 231
+b 233
+b 231
+b 1
+b 9
+b 11
+b 27
+b 26
+b 1
+b 151
+b 153
+b 50
+b 49
+b 1
+b 102
+b 182
+b 192
+b 134
+b 136
+b 146
+b 145
+b 1
+b 29
+b 190
+b 43
+b 42
+b 1
+b 142
+b 139
+b 1
+b 33
+b 35
+b 6
+b 8
+b 30
+b 9
+b 11
+b 13
+b 15
+b 15
+b 1
+b 106
+b 43
+b 19
+b 16
+b 18
+b 20
+b 22
+b 20
+b 1
+b 376
+b 378
+b 380
+b 382
+b 107
+b 123
+b 90
+b 99
+b 6
+b 56
+b 262
+b 261
+b 1
+b 18
+b 7
+b 9
+b 11
+b 13
+b 7
+b 1
+b 77
+b 3
+b 323
+b 325
+b 327
+b 329
+b 323
+b 1
+b 115
+b 156
+b 248
+b 323
+b 41
+b 43
+b 25
+b 24
+b 1
+b 9
+b 11
+b 13
+b 387
+b 424
+b 307
+b 306
+b 1
+b 33
+b 1
+b 10
+b 118
+b 0
+b 2
+b 30
+b 27
+b 1
+b 131
+b 40
+b 82
+b 42
+b 52
+b 198
+b 61
+b 170
+b 167
+b 1
+b 54
+b 56
+b 56
+b 1
+b 36
+b 74
+b 92
+b 33
+b 1
+b 87
+b 1
+b 64
+b 76
+b 78
+b 21
+b 298
+b 62
+b 106
+b 9
+b 11
+b 13
+b 167
+b 166
+b 1
+b 56
+b 33
+b 260
+b 258
+b 1
+b 18
+b 83
+b 80
+b 1
+b 176
+b 178
+b 20
+b 40
+b 42
+b 44
+b 40
+b 1
+b 15
+b 24
+b 12
+b 1
+b 16
+b 15
+b 1
+b 179
+b 177
+b 1
+b 40
+b 74
+b 71
+b 1
+b 44
+b 46
+b 64
+b 63
+b 1
+b 149
+b 39
+b 41
+b 54
+b 75
+b 76
+b 78
+b 76
+b 1
+b 1
+b 316
+b 346
+b 343
+b 1
+b 69
+b 68
+b 1
+b 143
+b 145
+b 45
+b 43
+b 1
+b 237
+b 4
+b 3
+b 1
+b 6
+b 47
+b 46
+b 1
+b 37
+b 39
+b 39
+b 1
+b 312
+b 314
+b 40
+b 37
+b 1
+b 223
+b 225
+b 225
+b 1
+b 192
+b 194
+b 196
+b 198
+b 262
+b 308
+b 65
+b 62
+b 1
+b 35
+b 5
+b 16
+b 15
+b 1
+b 110
+b 112
+b 12
+b 14
+b 16
+b 18
+b 12
+b 1
+b 145
+b 200
+b 15
+b 14
+b 1
+b 28
+b 43
+b 102
+b 104
+b 106
+b 108
+b 102
+b 1
+b 161
+b 158
+b 1
+b 184
+b 0
+b 11
+b 22
+b 85
+b 21
+b 1
+b 82
+b 1
+b 12
+b 14
+b 14
+b 1
+b 15
+b 14
+b 1
+b 6
+b 8
+b 10
+b 8
+b 1
+b 20
+b 0
+b 10
+b 174
+b 176
+b 178
+b 174
+b 1
+b 16
+b 18
+b 20
+b 13
+b 1
+b 558
+b 15
+b 113
+b 120
+b 122
+b 120
+b 1
+b 193
+b 227
+b 339
+b 341
+b 349
+b 348
+b 1
+b 90
+b 89
+b 1
+b 3
+b 13
+b 44
+b 90
+b 88
+b 1
+b 366
+b 368
+b 370
+b 372
+b 164
+b 45
+b 0
+b 2
+b 45
+b 47
+b 57
+b 45
+b 1
+b 364
+b 363
+b 1
+b 27
+b 24
+b 1
+b 1
+b 7
+b 9
+b 78
+b 77
+b 1
+b 5
+b 7
+b 3
+b 26
+b 108
+b 35
+b 34
+b 1
+b 67
+b 69
+b 38
+b 48
+b 83
+b 4
+b 9
+b 8
+b 1
+b 1
+b 26
+b 92
+b 94
+b 96
+b 359
+b 361
+b 7
+b 45
+b 62
+b 65
+b 75
+b 90
+b 64
+b 1
+b 12
+b 29
+b 189
+b 188
+b 1
+b 16
+b 18
+b 51
+b 70
+b 90
+b 89
+b 1
+b 36
+b 120
+b 122
+b 159
+b 21
+b 31
+b 33
+b 15
+b 17
+b 19
+b 21
+b 15
+b 1
+b 441
+b 13
+b 27
+b 49
+b 84
+b 260
+b 262
+b 133
+b 145
+b 592
+b 594
+b 750
+b 749
+b 1
+b 83
+b 146
+b 145
+b 1
+b 8
+b 233
+b 235
+b 320
+b 457
+b 467
+b 456
+b 1
+b 27
+b 285
+b 287
+b 289
+b 282
+b 1
+b 12
+b 20
+b 19
+b 1
+b 14
+b 114
+b 138
+b 137
+b 1
+b 93
+b 40
+b 42
+b 229
+b 183
+b 192
+b 117
+b 130
+b 449
+b 451
+b 453
+b 455
+b 449
+b 1
+b 20
+b 22
+b 24
+b 26
+b 22
+b 1
+b 11
+b 8
+b 7
+b 199
+b 201
+b 215
+b 55
+b 108
+b 1
+b 46
+b 60
+b 50
+b 49
+b 1
+b 114
+b 31
+b 3
+b 20
+b 28
+b 130
+b 170
+b 172
+b 96
+b 2
+b 6
+b 8
+b 10
+b 6
+b 1
+b 102
+b 124
+b 126
+b 124
+b 1
+b 209
+b 219
+b 8
+b 7
+b 1
+b 67
+b 69
+b 69
+b 1
+b 259
+b 272
+b 271
+b 1
+b 59
+b 58
+b 1
+b 24
+b 37
+b 112
+b 120
+b 109
+b 1
+b 94
+b 112
+b 91
+b 1
+b 168
+b 166
+b 1
+b 222
+b 3
+b 88
+b 85
+b 1
+b 57
+b 59
+b 54
+b 1
+b 159
+b 130
+b 228
+b 227
+b 1
+b 25
+b 22
+b 1
+b 310
+b 316
+b 318
+b 316
+b 1
+b 44
+b 72
+b 1
+b 4
+b 6
+b 1
+b 111
+b 113
+b 115
+b 117
+b 111
+b 1
+b 159
+b 179
+b 156
+b 1
+b 24
+b 30
+b 32
+b 30
+b 1
+b 6
+b 8
+b 5
+b 187
+b 189
+b 191
+b 187
+b 1
+b 61
+b 71
+b 92
+b 11
+b 398
+b 400
+b 402
+b 404
+b 395
+b 1
+b 402
+b 1
+b 57
+b 3
+b 227
+b 323
+b 325
+b 323
+b 1
+b 29
+b 47
+b 28
+b 38
+b 22
+b 21
+b 1
+b 2
+b 4
+b 225
+b 234
+b 38
+b 34
+b 44
+b 33
+b 1
+b 6
+b 73
+b 75
+b 77
+b 73
+b 1
+b 59
+b 61
+b 63
+b 65
+b 61
+b 1
+b 14
+b 16
+b 18
+b 324
+b 336
+b 85
+b 100
+b 83
+b 1
+b 98
+b 1
+b 101
+b 98
+b 1
+b 132
+b 34
+b 33
+b 1
+b 36
+b 115
+b 28
+b 50
+b 52
+b 66
+b 65
+b 1
+b 6
+b 8
+b 50
+b 52
+b 54
+b 50
+b 1
+b 136
+b 138
+b 136
+b 1
+b 15
+b 58
+b 60
+b 70
+b 68
+b 1
+b 84
+b 86
+b 104
+b 103
+b 1
+b 117
+b 127
+b 177
+b 61
+b 60
+b 1
+b 69
+b 67
+b 1
+b 108
+b 110
+b 112
+b 114
+b 112
+b 1
+b 140
+b 147
+b 146
+b 1
+b 141
+b 45
+b 47
+b 49
+b 1261
+b 1298
+b 1260
+b 1
+b 1293
+b 1
+b 27
+b 44
+b 46
+b 48
+b 50
+b 89
+b 118
+b 130
+b 88
+b 1
+b 47
+b 2
+b 221
+b 34
+b 75
+b 74
+b 1
+b 98
+b 15
+b 136
+b 138
+b 140
+b 142
+b 14
+b 16
+b 27
+b 14
+b 1
+b 516
+b 546
+b 548
+b 6
+b 41
+b 40
+b 1
+b 117
+b 145
+b 8
+b 19
+b 26
+b 28
+b 30
+b 32
+b 60
+b 73
+b 17
+b 16
+b 1
+b 51
+b 62
+b 13
+b 12
+b 1
+b 3
+b 5
+b 5
+b 1
+b 19
+b 35
+b 37
+b 35
+b 1
+b 68
+b 78
+b 188
+b 190
+b 192
+b 190
+b 1
+b 6
+b 6
+b 1
+b 13
+b 116
+b 118
+b 120
+b 116
+b 1
+b 72
+b 96
+b 226
+b 95
+b 1
+b 185
+b 193
+b 182
+b 1
+b 7
+b 77
+b 21
+b 161
+b 173
+b 1
+b 71
+b 70
+b 1
+b 17
+b 29
+b 28
+b 1
+b 31
+b 1
+b 37
+b 36
+b 1
+b 1113
+b 3
+b 8
+b 10
+b 16
+b 15
+b 1
+b 1
+b 254
+b 256
+b 276
+b 254
+b 1
+b 44
+b 50
+b 52
+b 50
+b 1
+b 278
+b 280
+b 282
+b 284
+b 280
+b 1
+b 182
+b 1
+b 87
+b 89
+b 891
+b 893
+b 895
+b 902
+b 893
+b 1
+b 108
+b 116
+b 5
+b 15
+b 17
+b 15
+b 1
+b 113
+b 122
+b 297
+b 332
+b 11
+b 13
+b 15
+b 17
+b 26
+b 15
+b 23
+b 1318
+b 1320
+b 1322
+b 1324
+b 1322
+b 1
+b 154
+b 153
+b 1
+b 117
+b 124
+b 123
+b 1
+b 118
+b 162
+b 168
+b 170
+b 168
+b 1
+b 8
+b 208
+b 210
+b 212
+b 210
+b 1
+b 180
+b 188
+b 190
+b 75
+b 35
+b 8
+b 28
+b 26
+b 1
+b 276
+b 319
+b 318
+b 1
+b 120
+b 466
+b 578
+b 56
+b 68
+b 70
+b 55
+b 1
+b 294
+b 296
+b 298
+b 296
+b 1
+b 132
+b 31
+b 291
+b 62
+b 9
+b 11
+b 29
+b 9
+b 1
+b 149
+b 176
+b 163
+b 173
+b 95
+b 116
+b 92
+b 1
+b 21
+b 20
+b 1
+b 17
+b 75
+b 74
+b 1
+b 40
+b 52
+b 15
+b 3
+b 2
+b 1
+b 1
+b 0
+b 1
+b 97
+b 99
+b 101
+b 310
+b 320
+b 9
+b 11
+b 13
+b 15
+b 9
+b 1
+b 71
+b 83
+b 85
+b 83
+b 1
+b 112
+b 122
+b 121
+b 1
+b 69
+b 43
+b 42
+b 1
+b 55
+b 57
+b 331
+b 330
+b 1
+b 3
+b 9
+b 46
+b 45
+b 1
+b 17
+b 26
+b 15
+b 1
+b 26
+b 28
+b 30
+b 32
+b 30
+b 1
+b 21
+b 39
+b 41
+b 126
+b 160
+b 124
+b 1
+b 158
+b 1
+b 3
+b 93
+b 16
+b 27
+b 53
+b 9
+b 11
+b 9
+b 1
+b 53
+b 7
+b 22
+b 24
+b 54
+b 52
+b 1
+b 159
+b 239
+b 241
+b 243
+b 245
+b 236
+b 1
+b 243
+b 1
+b 46
+b 5
+b 293
+b 366
+b 292
+b 1
+b 0
+b 116
+b 114
+b 1
+b 39
+b 41
+b 36
+b 1
+b 119
+b 152
+b 154
+b 117
+b 1
+b 152
+b 1
+b 194
+b 208
+b 96
+b 211
+b 213
+b 43
+b 17
+b 33
+b 16
+b 1
+b 29
+b 1
+b 54
+b 56
+b 58
+b 60
+b 56
+b 1
+b 54
+b 56
+b 58
+b 60
+b 78
+b 130
+b 132
+b 134
+b 132
+b 1
+b 25
+b 27
+b 29
+b 31
+b 121
+b 25
+b 89
+b 104
+b 106
+b 88
+b 1
+b 48
+b 50
+b 66
+b 48
+b 1
+b 86
+b 42
+b 65
+b 469
+b 471
+b 473
+b 4
+b 6
+b 8
+b 10
+b 4
+b 1
+b 14
+b 13
+b 1
+b 4
+b 6
+b 79
+b 81
+b 79
+b 1
+b 6
+b 34
+b 31
+b 1
+b 20
+b 19
+b 1
+b 5
+b 2
+b 49
+b 69
+b 1
+b 0
+b 1
+b 293
+b 64
+b 74
+b 63
+b 1
+b 14
+b 13
+b 103
+b 111
+b 113
+b 175
+b 174
+b 1
+b 3
+b 54
+b 56
+b 58
+b 54
+b 1
+b 101
+b 117
+b 119
+b 98
+b 1
+b 117
+b 1
+b 132
+b 140
+b 131
+b 1
+b 65
+b 47
+b 34
+b 36
+b 60
+b 62
+b 64
+b 96
+b 62
+b 1
+b 83
+b 17
+b 16
+b 18
+b 20
+b 22
+b 13
+b 1
+b 20
+b 1
+b 113
+b 151
+b 153
+b 151
+b 1
+b 72
+b 84
+b 69
+b 1
+b 13
+b 11
+b 1
+b 39
+b 41
+b 43
+b 167
+b 181
+b 4
+b 6
+b 8
+b 10
+b 6
+b 1
+b 301
+b 8
+b 16
+b 16
+b 28
+b 30
+b 32
+b 4
+b 6
+b 48
+b 374
+b 376
+b 378
+b 380
+b 197
+b 196
+b 1
+b 574
+b 632
+b 631
+b 1
+b 158
+b 160
+b 77
+b 10
+b 10
+b 1
+b 7
+b 6
+b 1
+b 307
+b 309
+b 25
+b 125
+b 138
+b 124
+b 1
+b 137
+b 139
+b 5
+b 189
+b 188
+b 1
+b 368
+b 404
+b 365
+b 1
+b 23
+b 20
+b 1
+b 0
+b 2
+b 2
+b 1
+b 98
+b 95
+b 1
+b 48
+b 45
+b 1
+b 34
+b 36
+b 38
+b 46
+b 597
+b 599
+b 715
+b 597
+b 1
+b 205
+b 223
+b 204
+b 1
+b 86
+b 66
+b 5
+b 124
+b 126
+b 124
+b 1
+b 82
+b 1236
+b 1246
+b 221
+b 220
+b 1
+b 658
+b 660
+b 97
+b 3
+b 114
+b 116
+b 168
+b 116
+b 1
+b 164
+b 1
+b 72
+b 17
+b 19
+b 17
+b 1
+b 65
+b 101
+b 100
+b 1
+b 34
+b 32
+b 1
+b 16
+b 31
+b 28
+b 1
+b 93
+b 47
+b 93
+b 115
+b 4
+b 1
+b 49
+b 59
+b 58
+b 1
+b 54
+b 60
+b 2
+b 133
+b 135
+b 137
+b 6
+b 18
+b 17
+b 1
+b 0
+b 2
+b 8
+b 0
+b 1
+b 113
+b 19
+b 21
+b 690
+b 692
+b 690
+b 1
+b 19
+b 376
+b 388
+b 208
+b 210
+b 220
+b 208
+b 1
+b 177
+b 175
+b 1
+b 84
+b 94
+b 82
+b 1
+b 86
+b 85
+b 1
+b 13
+b 10
+b 12
+b 14
+b 16
+b 18
+b 26
+b 25
+b 1
+b 11
+b 10
+b 1
+b 17
+b 11
+b 10
+b 1
+b 16
+b 18
+b 16
+b 1
+b 1
+b 89
+b 91
+b 93
+b 91
+b 1
+b 167
+b 169
+b 171
+b 164
+b 1
+b 14
+b 47
+b 49
+b 3
+b 70
+b 72
+b 70
+b 1
+b 96
+b 910
+b 912
+b 914
+b 912
+b 1
+b 116
+b 115
+b 1
+b 180
+b 53
+b 67
+b 64
+b 22
+b 53
+b 21
+b 1
+b 302
+b 304
+b 306
+b 308
+b 184
+b 204
+b 147
+b 149
+b 151
+b 8
+b 32
+b 77
+b 79
+b 81
+b 74
+b 1
+b 79
+b 1
+b 69
+b 71
+b 1
+b 1
+b 1
+b 50
+b 52
+b 50
+b 1
+b 5
+b 54
+b 54
+b 56
+b 54
+b 1
+b 30
+b 29
+b 1
+b 24
+b 31
+b 12
+b 18
+b 0
+b 255
+b 257
+b 271
+b 252
+b 1
+b 268
+b 1
+b 194
+b 206
+b 208
+b 8
+b 33
+b 65
+b 32
+b 34
+b 191
+b 207
+b 190
+b 1
+b 202
+b 1
+b 325
+b 290
+b 289
+b 1
+b 4
+b 28
+b 35
+b 34
+b 1
+b 18
+b 13
+b 22
+b 22
+b 38
+b 40
+b 21
+b 1
+b 81
+b 83
+b 97
+b 96
+b 1
+b 89
+b 88
+b 1
+b 129
+b 128
+b 1
+b 0
+b 24
+b 20
+b 28
+b 17
+b 1
+b 66
+b 65
+b 1
+b 4
+b 6
+b 127
+b 129
+b 131
+b 133
+b 131
+b 1
+b 108
+b 107
+b 1
+b 1
+b 11
+b 40
+b 42
+b 44
+b 54
+b 136
+b 138
+b 140
+b 136
+b 1
+b 310
+b 328
+b 327
+b 1
+b 166
+b 184
+b 50
+b 71
+b 70
+b 1
+b 150
+b 152
+b 154
+b 150
+b 1
+b 111
+b 206
+b 10
+b 19
+b 21
+b 19
+b 1
+b 317
+b 198
+b 79
+b 78
+b 1
+b 3
+b 5
+b 0
+b 1
+b 569
+b 85
+b 132
+b 144
+b 129
+b 1
+b 141
+b 1
+b 155
+b 168
+b 10
+b 300
+b 356
+b 32
+b 1
+b 0
+b 1
+b 229
+b 237
+b 239
+b 103
+b 105
+b 107
+b 109
+b 103
+b 1
+b 117
+b 8
+b 255
+b 257
+b 12
+b 11
+b 1
+b 12
+b 22
+b 24
+b 22
+b 1
+b 527
+b 526
+b 1
+b 4
+b 567
+b 87
+b 88
+b 102
+b 69
+b 71
+b 73
+b 75
+b 71
+b 1
+b 137
+b 147
+b 148
+b 64
+b 0
+b 70
+b 31
+b 94
+b 101
+b 112
+b 100
+b 1
+b 107
+b 1
+b 14
+b 22
+b 24
+b 13
+b 1
+b 128
+b 165
+b 120
+b 122
+b 120
+b 1
+b 48
+b 154
+b 47
+b 87
+b 99
+b 1040
+b 1076
+b 145
+b 144
+b 1
+b 172
+b 174
+b 44
+b 46
+b 48
+b 22
+b 34
+b 44
+b 55
+b 43
+b 1
+b 0
+b 2
+b 79
+b 98
+b 100
+b 78
+b 1
+b 55
+b 52
+b 1
+b 137
+b 134
+b 1
+b 44
+b 190
+b 198
+b 188
+b 1
+b 238
+b 5
+b 7
+b 5
+b 1
+b 43
+b 45
+b 47
+b 45
+b 1
+b 160
+b 186
+b 28
+b 42
+b 38
+b 46
+b 44
+b 1
+b 1
+b 131
+b 157
+b 14
+b 13
+b 1
+b 74
+b 110
+b 10
+b 18
+b 28
+b 9
+b 1
+b 14
+b 1
+b 9
+b 11
+b 8
+b 7
+b 1
+b 131
+b 172
+b 141
+b 85
+b 104
+b 106
+b 72
+b 74
+b 14
+b 13
+b 1
+b 358
+b 366
+b 368
+b 82
+b 84
+b 86
+b 79
+b 1
+b 81
+b 14
+b 196
+b 204
+b 55
+b 65
+b 67
+b 54
+b 1
+b 413
+b 423
+b 38
+b 51
+b 35
+b 1
+b 49
+b 1
+b 16
+b 18
+b 30
+b 29
+b 1
+b 279
+b 281
+b 283
+b 285
+b 279
+b 1
+b 14
+b 12
+b 1
+b 25
+b 25
+b 1
+b 107
+b 109
+b 111
+b 107
+b 1
+b 41
+b 108
+b 0
+b 269
+b 271
+b 273
+b 3
+b 35
+b 1083
+b 1097
+b 1099
+b 0
+b 120
+b 127
+b 13
+b 12
+b 1
+b 81
+b 164
+b 264
+b 134
+b 145
+b 159
+b 132
+b 1
+b 127
+b 4
+b 109
+b 249
+b 1
+b 0
+b 1
+b 129
+b 141
+b 143
+b 126
+b 1
+b 212
+b 214
+b 216
+b 218
+b 38
+b 52
+b 1
+b 62
+b 94
+b 59
+b 61
+b 71
+b 61
+b 97
+b 144
+b 132
+b 9
+b 11
+b 13
+b 11
+b 1
+b 18
+b 17
+b 1
+b 3
+b 9
+b 3
+b 5
+b 7
+b 9
+b 3
+b 1
+b 155
+b 160
+b 162
+b 285
+b 284
+b 1
+b 83
+b 176
+b 11
+b 10
+b 1
+b 47
+b 12
+b 232
+b 234
+b 236
+b 238
+b 130
+b 149
+b 148
+b 1
+b 220
+b 37
+b 49
+b 36
+b 1
+b 45
+b 1
+b 305
+b 313
+b 304
+b 1
+b 28
+b 120
+b 174
+b 173
+b 1
+b 1
+b 1025
+b 19
+b 70
+b 169
+b 171
+b 173
+b 1130
+b 1397
+b 1129
+b 1
+b 0
+b 2
+b 23
+b 25
+b 27
+b 31
+b 12
+b 14
+b 12
+b 1
+b 36
+b 35
+b 1
+b 344
+b 341
+b 1
+b 0
+b 2
+b 202
+b 204
+b 0
+b 1
+b 203
+b 1
+b 157
+b 156
+b 1
+b 23
+b 25
+b 14
+b 23
+b 22
+b 1
+b 87
+b 134
+b 133
+b 1
+b 33
+b 46
+b 213
+b 215
+b 215
+b 1
+b 225
+b 227
+b 229
+b 227
+b 1
+b 58
+b 60
+b 20
+b 19
+b 1
+b 101
+b 2
+b 34
+b 27
+b 39
+b 41
+b 43
+b 39
+b 1
+b 108
+b 320
+b 12
+b 11
+b 1
+b 9
+b 11
+b 11
+b 1
+b 207
+b 215
+b 214
+b 1
+b 4
+b 23
+b 1
+b 47
+b 49
+b 44
+b 1
+b 8
+b 6
+b 1
+b 302
+b 316
+b 141
+b 155
+b 154
+b 1
+b 279
+b 281
+b 279
+b 1
+b 3
+b 14
+b 2
+b 4
+b 2
+b 1
+b 290
+b 53
+b 55
+b 230
+b 34
+b 36
+b 44
+b 14
+b 40
+b 42
+b 44
+b 27
+b 17
+b 23
+b 113
+b 126
+b 128
+b 4
+b 3
+b 1
+b 213
+b 36
+b 216
+b 148
+b 150
+b 6
+b 8
+b 10
+b 12
+b 6
+b 1
+b 71
+b 78
+b 91
+b 77
+b 1
+b 401
+b 403
+b 405
+b 26
+b 28
+b 30
+b 32
+b 26
+b 54
+b 119
+b 130
+b 121
+b 123
+b 125
+b 127
+b 164
+b 166
+b 164
+b 1
+b 1
+b 24
+b 69
+b 85
+b 91
+b 68
+b 1
+b 141
+b 143
+b 145
+b 147
+b 138
+b 1
+b 145
+b 1
+b 77
+b 92
+b 9
+b 89
+b 104
+b 104
+b 1
+b 52
+b 52
+b 1
+b 172
+b 11
+b 10
+b 1
+b 1
+b 0
+b 1
+b 495
+b 493
+b 1
+b 56
+b 74
+b 73
+b 1
+b 3
+b 5
+b 7
+b 26
+b 5
+b 1
+b 8
+b 28
+b 7
+b 1
+b 39
+b 4
+b 31
+b 28
+b 1
+b 36
+b 38
+b 19
+b 21
+b 19
+b 1
+b 11
+b 20
+b 22
+b 24
+b 17
+b 1
+b 22
+b 1
+b 64
+b 66
+b 80
+b 64
+b 1
+b 40
+b 39
+b 1
+b 20
+b 18
+b 18
+b 16
+b 1
+b 3
+b 1
+b 1
+b 69
+b 129
+b 191
+b 75
+b 77
+b 185
+b 75
+b 1
+b 9
+b 8
+b 1
+b 24
+b 62
+b 159
+b 161
+b 163
+b 165
+b 161
+b 1
+b 4
+b 6
+b 8
+b 10
+b 8
+b 1
+b 39
+b 60
+b 62
+b 60
+b 1
+b 2
+b 4
+b 6
+b 4
+b 1
+b 14
+b 24
+b 13
+b 1
+b 41
+b 38
+b 1
+b 1
+b 11
+b 1304
+b 9
+b 264
+b 278
+b 23
+b 25
+b 27
+b 25
+b 1
+b 5
+b 7
+b 9
+b 7
+b 1
+b 217
+b 49
+b 51
+b 195
+b 194
+b 1
+b 63
+b 65
+b 9
+b 19
+b 16
+b 19
+b 150
+b 168
+b 205
+b 207
+b 209
+b 15
+b 17
+b 139
+b 17
+b 1
+b 135
+b 1
+b 140
+b 31
+b 35
+b 37
+b 39
+b 41
+b 41
+b 1
+b 87
+b 123
+b 86
+b 1
+b 118
+b 1
+b 41
+b 13
+b 414
+b 416
+b 418
+b 238
+b 251
+b 3
+b 20
+b 94
+b 104
+b 106
+b 91
+b 1
+b 18
+b 17
+b 1
+b 8
+b 146
+b 148
+b 150
+b 152
+b 152
+b 1
+b 150
+b 162
+b 12
+b 11
+b 1
+b 42
+b 65
+b 151
+b 150
+b 1
+b 40
+b 106
+b 170
+b 103
+b 1
+b 10
+b 25
+b 45
+b 24
+b 1
+b 41
+b 1
+b 127
+b 137
+b 45
+b 48
+b 50
+b 31
+b 0
+b 2
+b 10
+b 19
+b 21
+b 51
+b 16
+b 1
+b 48
+b 1
+b 85
+b 337
+b 191
+b 3
+b 118
+b 9
+b 121
+b 131
+b 120
+b 1
+b 24
+b 2
+b 4
+b 6
+b 8
+b 2
+b 1
+b 732
+b 4
+b 3
+b 1
+b 136
+b 138
+b 49
+b 39
+b 41
+b 5
+b 4
+b 1
+b 127
+b 14
+b 455
+b 457
+b 459
+b 461
+b 459
+b 1
+b 44
+b 46
+b 60
+b 62
+b 4
+b 135
+b 137
+b 47
+b 45
+b 1
+b 75
+b 4
+b 3
+b 1
+b 26
+b 23
+b 1
+b 15
+b 47
+b 49
+b 47
+b 1
+b 123
+b 40
+b 49
+b 39
+b 1
+b 59
+b 203
+b 21
+b 23
+b 39
+b 21
+b 1
+b 204
+b 70
+b 123
+b 168
+b 198
+b 122
+b 1
+b 123
+b 145
+b 144
+b 1
+b 0
+b 2
+b 18
+b 20
+b 18
+b 1
+b 17
+b 263
+b 265
+b 267
+b 269
+b 260
+b 1
+b 267
+b 1
+b 27
+b 29
+b 31
+b 33
+b 29
+b 1
+b 33
+b 41
+b 43
+b 32
+b 1
+b 121
+b 123
+b 125
+b 123
+b 1
+b 66
+b 25
+b 131
+b 130
+b 1
+b 2
+b 4
+b 22
+b 38
+b 40
+b 42
+b 19
+b 1
+b 40
+b 1
+b 135
+b 137
+b 139
+b 141
+b 132
+b 1
+b 198
+b 254
+b 5
+b 7
+b 9
+b 2
+b 1
+b 7
+b 1
+b 20
+b 22
+b 24
+b 26
+b 24
+b 1
+b 53
+b 9
+b 16
+b 18
+b 20
+b 133
+b 143
+b 130
+b 1
+b 246
+b 243
+b 1
+b 23
+b 25
+b 64
+b 44
+b 4
+b 6
+b 4
+b 1
+b 24
+b 26
+b 33
+b 94
+b 93
+b 1
+b 127
+b 1
+b 21
+b 23
+b 25
+b 35
+b 18
+b 1
+b 4
+b 6
+b 8
+b 10
+b 11
+b 13
+b 15
+b 11
+b 1
+b 151
+b 153
+b 301
+b 47
+b 47
+b 1
+b 244
+b 241
+b 1
+b 23
+b 20
+b 1
+b 19
+b 208
+b 210
+b 212
+b 214
+b 210
+b 1
+b 47
+b 49
+b 57
+b 47
+b 1
+b 19
+b 29
+b 18
+b 1
+b 249
+b 294
+b 333
+b 293
+b 1
+b 138
+b 6
+b 19
+b 37
+b 36
+b 1
+b 100
+b 114
+b 168
+b 99
+b 1
+b 349
+b 455
+b 348
+b 1
+b 29
+b 5
+b 7
+b 9
+b 44
+b 46
+b 18
+b 8
+b 3
+b 5
+b 15
+b 69
+b 1
+b 10
+b 32
+b 0
+b 2
+b 168
+b 178
+b 123
+b 123
+b 1
+b 21
+b 20
+b 1
+b 27
+b 26
+b 1
+b 109
+b 111
+b 362
+b 397
+b 359
+b 1
+b 394
+b 1
+b 93
+b 90
+b 1
+b 23
+b 1
+b 0
+b 1
+b 98
+b 154
+b 156
+b 45
+b 42
+b 1
+b 9
+b 47
+b 46
+b 1
+b 21
+b 23
+b 25
+b 21
+b 1
+b 174
+b 184
+b 111
+b 139
+b 18
+b 18
+b 19
+b 10
+b 50
+b 9
+b 11
+b 9
+b 1
+b 34
+b 32
+b 1
+b 88
+b 101
+b 85
+b 1
+b 131
+b 133
+b 189
+b 612
+b 27
+b 29
+b 94
+b 109
+b 108
+b 1
+b 17
+b 15
+b 1
+b 187
+b 186
+b 1
+b 187
+b 5
+b 4
+b 1
+b 16
+b 15
+b 108
+b 6
+b 94
+b 96
+b 102
+b 22
+b 89
+b 103
+b 105
+b 103
+b 1
+b 30
+b 32
+b 34
+b 36
+b 52
+b 90
+b 92
+b 90
+b 1
+b 19
+b 21
+b 21
+b 1
+b 58
+b 27
+b 178
+b 180
+b 318
+b 158
+b 160
+b 236
+b 233
+b 1
+b 6
+b 58
+b 56
+b 1
+b 349
+b 351
+b 399
+b 398
+b 1
+b 978
+b 980
+b 1000
+b 191
+b 205
+b 190
+b 1
+b 35
+b 32
+b 1
+b 108
+b 149
+b 105
+b 1
+b 20
+b 20
+b 149
+b 2
+b 51
+b 113
+b 115
+b 30
+b 27
+b 1
+b 113
+b 102
+b 87
+b 29
+b 40
+b 18
+b 15
+b 1
+b 41
+b 41
+b 1
+b 338
+b 348
+b 350
+b 337
+b 1
+b 112
+b 413
+b 75
+b 77
+b 79
+b 81
+b 81
+b 1
+b 4
+b 6
+b 104
+b 103
+b 1
+b 76
+b 78
+b 80
+b 82
+b 220
+b 225
+b 5
+b 4
+b 1
+b 86
+b 88
+b 106
+b 104
+b 1
+b 13
+b 15
+b 17
+b 400
+b 157
+b 38
+b 40
+b 1
+b 116
+b 118
+b 10
+b 69
+b 51
+b 73
+b 50
+b 1
+b 34
+b 43
+b 583
+b 585
+b 4
+b 88
+b 0
+b 2
+b 11
+b 14
+b 19
+b 152
+b 151
+b 1
+b 31
+b 0
+b 2
+b 0
+b 1
+b 66
+b 68
+b 87
+b 86
+b 1
+b 95
+b 92
+b 1
+b 54
+b 4
+b 3
+b 1
+b 107
+b 188
+b 187
+b 1
+b 461
+b 460
+b 1
+b 55
+b 77
+b 24
+b 3
+b 159
+b 157
+b 1
+b 22
+b 21
+b 1
+b 1
+b 33
+b 43
+b 32
+b 1
+b 3
+b 17
+b 131
+b 3
+b 88
+b 90
+b 85
+b 1
+b 88
+b 1
+b 53
+b 2
+b 53
+b 147
+b 18
+b 20
+b 22
+b 24
+b 80
+b 82
+b 84
+b 86
+b 80
+b 1
+b 156
+b 158
+b 160
+b 162
+b 160
+b 1
+b 7
+b 23
+b 25
+b 131
+b 131
+b 1
+b 104
+b 103
+b 1
+b 340
+b 339
+b 1
+b 101
+b 121
+b 37
+b 4
+b 214
+b 222
+b 87
+b 101
+b 84
+b 1
+b 26
+b 25
+b 1
+b 83
+b 85
+b 83
+b 1
+b 15
+b 20
+b 22
+b 24
+b 26
+b 76
+b 117
+b 21
+b 23
+b 13
+b 10
+b 1
+b 121
+b 123
+b 129
+b 127
+b 1
+b 110
+b 68
+b 78
+b 67
+b 1
+b 74
+b 1
+b 513
+b 537
+b 539
+b 512
+b 1
+b 51
+b 61
+b 63
+b 50
+b 1
+b 184
+b 560
+b 115
+b 129
+b 229
+b 231
+b 233
+b 235
+b 229
+b 1
+b 107
+b 118
+b 167
+b 117
+b 1
+b 162
+b 1
+b 424
+b 424
+b 1
+b 35
+b 34
+b 1
+b 201
+b 33
+b 50
+b 122
+b 124
+b 119
+b 1
+b 122
+b 1
+b 21
+b 29
+b 31
+b 19
+b 33
+b 21
+b 20
+b 1
+b 365
+b 1
+b 37
+b 115
+b 117
+b 115
+b 1
+b 19
+b 101
+b 98
+b 1
+b 117
+b 158
+b 246
+b 85
+b 118
+b 120
+b 10
+b 20
+b 437
+b 21
+b 99
+b 98
+b 1
+b 265
+b 263
+b 1
+b 72
+b 74
+b 74
+b 1
+b 3
+b 11
+b 13
+b 2
+b 1
+b 6
+b 32
+b 229
+b 231
+b 233
+b 235
+b 229
+b 1
+b 137
+b 137
+b 1
+b 26
+b 23
+b 1
+b 11
+b 66
+b 68
+b 8
+b 1
+b 59
+b 56
+b 1
+b 56
+b 58
+b 58
+b 1
+b 12
+b 14
+b 16
+b 18
+b 9
+b 1
+b 16
+b 1
+b 413
+b 415
+b 417
+b 419
+b 24
+b 26
+b 13
+b 15
+b 10
+b 1
+b 1
+b 144
+b 144
+b 1
+b 1091
+b 1091
+b 1
+b 152
+b 154
+b 163
+b 152
+b 1
+b 13
+b 43
+b 45
+b 43
+b 1
+b 47
+b 49
+b 47
+b 1
+b 17
+b 49
+b 59
+b 122
+b 130
+b 130
+b 1
+b 50
+b 52
+b 54
+b 47
+b 1
+b 137
+b 23
+b 122
+b 2
+b 12
+b 10
+b 40
+b 40
+b 1
+b 15
+b 12
+b 1
+b 240
+b 242
+b 244
+b 246
+b 242
+b 1
+b 593
+b 595
+b 10
+b 296
+b 306
+b 308
+b 294
+b 1
+b 306
+b 1
+b 28
+b 157
+b 159
+b 25
+b 33
+b 35
+b 24
+b 1
+b 3
+b 5
+b 7
+b 3
+b 1
+b 196
+b 196
+b 1
+b 9
+b 9
+b 1
+b 152
+b 169
+b 179
+b 168
+b 1
+b 175
+b 1
+b 13
+b 21
+b 13
+b 12
+b 1
+b 53
+b 50
+b 1
+b 30
+b 32
+b 34
+b 123
+b 150
+b 169
+b 121
+b 1
+b 166
+b 1
+b 100
+b 117
+b 116
+b 1
+b 108
+b 179
+b 12
+b 14
+b 22
+b 21
+b 1
+b 140
+b 142
+b 140
+b 1
+b 18
+b 35
+b 45
+b 57
+b 85
+b 87
+b 89
+b 91
+b 297
+b 299
+b 297
+b 1
+b 12
+b 2
+b 1
+b 0
+b 1
+b 14
+b 13
+b 1
+b 99
+b 101
+b 101
+b 1
+b 1
+b 51
+b 58
+b 116
+b 19
+b 19
+b 18
+b 25
+b 24
+b 1
+b 38
+b 76
+b 35
+b 1
+b 73
+b 1
+b 7
+b 25
+b 6
+b 1
+b 20
+b 1
+b 77
+b 114
+b 33
+b 121
+b 79
+b 81
+b 134
+b 79
+b 1
+b 2
+b 4
+b 6
+b 8
+b 6
+b 1
+b 430
+b 432
+b 434
+b 436
+b 35
+b 115
+b 117
+b 34
+b 1
+b 111
+b 15
+b 12
+b 14
+b 16
+b 18
+b 12
+b 1
+b 173
+b 175
+b 177
+b 175
+b 1
+b 54
+b 56
+b 1
+b 23
+b 0
+b 1
+b 68
+b 40
+b 66
+b 46
+b 48
+b 50
+b 48
+b 1
+b 133
+b 135
+b 137
+b 161
+b 183
+b 223
+b 160
+b 1
+b 178
+b 1
+b 24
+b 70
+b 113
+b 25
+b 19
+b 41
+b 16
+b 1
+b 241
+b 251
+b 253
+b 240
+b 1
+b 115
+b 129
+b 138
+b 114
+b 1
+b 125
+b 1
+b 66
+b 76
+b 65
+b 1
+b 72
+b 1
+b 104
+b 122
+b 81
+b 83
+b 85
+b 18
+b 15
+b 1
+b 25
+b 125
+b 45
+b 23
+b 249
+b 285
+b 284
+b 1
+b 59
+b 420
+b 419
+b 1
+b 1
+b 171
+b 191
+b 275
+b 67
+b 79
+b 81
+b 79
+b 1
+b 102
+b 111
+b 138
+b 101
+b 1
+b 106
+b 1
+b 184
+b 186
+b 188
+b 190
+b 188
+b 1
+b 79
+b 79
+b 1
+b 112
+b 174
+b 182
+b 173
+b 1
+b 59
+b 4
+b 3
+b 120
+b 194
+b 72
+b 71
+b 1
+b 750
+b 747
+b 1
+b 14
+b 13
+b 1
+b 369
+b 379
+b 47
+b 69
+b 256
+b 110
+b 112
+b 110
+b 1
+b 106
+b 117
+b 119
+b 104
+b 1
+b 36
+b 19
+b 83
+b 85
+b 87
+b 80
+b 1
+b 47
+b 49
+b 51
+b 51
+b 1
+b 214
+b 216
+b 237
+b 211
+b 1
+b 234
+b 1
+b 157
+b 156
+b 1
+b 43
+b 42
+b 1
+b 25
+b 27
+b 30
+b 225
+b 330
+b 71
+b 0
+b 2
+b 0
+b 130
+b 85
+b 140
+b 138
+b 1
+b 81
+b 78
+b 1
+b 10
+b 45
+b 86
+b 43
+b 1
+b 0
+b 2
+b 2
+b 1
+b 116
+b 115
+b 1
+b 376
+b 41
+b 40
+b 1
+b 93
+b 115
+b 446
+b 459
+b 445
+b 1
+b 113
+b 115
+b 127
+b 126
+b 1
+b 123
+b 125
+b 12
+b 11
+b 1
+b 134
+b 136
+b 138
+b 134
+b 1
+b 155
+b 165
+b 167
+b 154
+b 1
+b 97
+b 115
+b 117
+b 115
+b 1
+b 8
+b 10
+b 12
+b 14
+b 10
+b 1
+b 60
+b 62
+b 64
+b 66
+b 64
+b 1
+b 252
+b 2
+b 4
+b 14
+b 22
+b 1212
+b 20
+b 18
+b 1
+b 258
+b 260
+b 260
+b 1
+b 150
+b 147
+b 1
+b 274
+b 312
+b 198
+b 207
+b 217
+b 206
+b 1
+b 144
+b 146
+b 148
+b 144
+b 1
+b 73
+b 73
+b 1
+b 14
+b 11
+b 1
+b 42
+b 44
+b 46
+b 48
+b 42
+b 1
+b 100
+b 102
+b 21
+b 20
+b 1
+b 13
+b 23
+b 12
+b 1
+b 52
+b 17
+b 57
+b 59
+b 105
+b 57
+b 1
+b 55
+b 3
+b 58
+b 13
+b 15
+b 13
+b 1
+b 19
+b 16
+b 128
+b 130
+b 132
+b 13
+b 15
+b 23
+b 55
+b 63
+b 91
+b 54
+b 1
+b 59
+b 1
+b 6
+b 8
+b 6
+b 1
+b 3
+b 112
+b 111
+b 1
+b 4
+b 137
+b 17
+b 7
+b 9
+b 127
+b 129
+b 68
+b 46
+b 90
+b 92
+b 43
+b 1
+b 138
+b 140
+b 142
+b 144
+b 8
+b 8
+b 1
+b 14
+b 11
+b 1
+b 247
+b 249
+b 257
+b 183
+b 183
+b 1
+b 61
+b 61
+b 1
+b 261
+b 263
+b 265
+b 258
+b 1
+b 247
+b 297
+b 296
+b 1
+b 84
+b 44
+b 46
+b 63
+b 44
+b 1
+b 95
+b 7
+b 6
+b 1
+b 7
+b 6
+b 1
+b 5
+b 105
+b 107
+b 109
+b 111
+b 105
+b 1
+b 6
+b 8
+b 20
+b 288
+b 295
+b 286
+b 1
+b 14
+b 13
+b 1
+b 6
+b 65
+b 76
+b 14
+b 311
+b 6
+b 97
+b 99
+b 101
+b 10
+b 12
+b 14
+b 10
+b 1
+b 288
+b 287
+b 1
+b 9
+b 69
+b 92
+b 94
+b 158
+b 155
+b 1
+b 71
+b 83
+b 69
+b 1
+b 103
+b 102
+b 1
+b 5
+b 7
+b 7
+b 1
+b 4
+b 26
+b 1
+b 39
+b 165
+b 189
+b 36
+b 1
+b 186
+b 1
+b 48
+b 50
+b 52
+b 54
+b 15
+b 17
+b 12
+b 1
+b 1
+b 1
+b 1
+b 13
+b 24
+b 26
+b 175
+b 175
+b 1
+b 2
+b 0
+b 1
+b 38
+b 7
+b 46
+b 7
+b 24
+b 50
+b 4
+b 6
+b 8
+b 10
+b 48
+b 18
+b 16
+b 2
+b 65
+b 98
+b 2
+b 4
+b 2
+b 1
+b 37
+b 151
+b 6
+b 8
+b 10
+b 148
+b 150
+b 145
+b 1
+b 41
+b 38
+b 1
+b 105
+b 88
+b 10
+b 9
+b 1
+b 1
+b 7
+b 24
+b 3
+b 99
+b 98
+b 1
+b 37
+b 1
+b 0
+b 1
+b 69
+b 71
+b 33
+b 72
+b 4
+b 145
+b 144
+b 1
+b 33
+b 30
+b 1
+b 2
+b 4
+b 309
+b 328
+b 340
+b 327
+b 1
+b 116
+b 116
+b 1
+b 14
+b 11
+b 1
+b 158
+b 160
+b 168
+b 132
+b 129
+b 1
+b 125
+b 124
+b 1
+b 119
+b 121
+b 123
+b 125
+b 123
+b 1
+b 13
+b 0
+b 6
+b 7
+b 9
+b 48
+b 9
+b 1
+b 44
+b 1
+b 82
+b 9
+b 54
+b 133
+b 65
+b 67
+b 77
+b 76
+b 1
+b 107
+b 109
+b 111
+b 113
+b 46
+b 3
+b 171
+b 170
+b 1
+b 16
+b 91
+b 93
+b 95
+b 103
+b 105
+b 107
+b 115
+b 100
+b 1
+b 333
+b 335
+b 337
+b 339
+b 45
+b 61
+b 63
+b 735
+b 734
+b 1
+b 13
+b 12
+b 1
+b 71
+b 79
+b 66
+b 65
+b 1
+b 180
+b 182
+b 177
+b 1
+b 180
+b 1
+b 45
+b 47
+b 49
+b 47
+b 1
+b 39
+b 41
+b 43
+b 45
+b 226
+b 134
+b 290
+b 359
+b 23
+b 34
+b 22
+b 123
+b 302
+b 304
+b 306
+b 35
+b 119
+b 389
+b 388
+b 1
+b 9
+b 11
+b 11
+b 1
+b 333
+b 3
+b 5
+b 21
+b 33
+b 118
+b 128
+b 513
+b 11
+b 0
+b 2
+b 34
+b 36
+b 38
+b 40
+b 10
+b 36
+b 38
+b 9
+b 1
+b 9
+b 36
+b 34
+b 1
+b 348
+b 347
+b 1
+b 15
+b 3
+b 5
+b 7
+b 29
+b 5
+b 45
+b 47
+b 49
+b 51
+b 55
+b 57
+b 37
+b 0
+b 314
+b 316
+b 318
+b 320
+b 130
+b 60
+b 154
+b 156
+b 158
+b 160
+b 156
+b 1
+b 6
+b 24
+b 21
+b 1
+b 46
+b 48
+b 50
+b 48
+b 1
+b 670
+b 56
+b 58
+b 56
+b 1
+b 176
+b 174
+b 1
+b 12
+b 12
+b 1
+b 91
+b 93
+b 91
+b 1
+b 11
+b 65
+b 75
+b 65
+b 65
+b 1
+b 43
+b 41
+b 1
+b 173
+b 67
+b 69
+b 264
+b 2
+b 4
+b 2
+b 1
+b 60
+b 59
+b 1
+b 24
+b 0
+b 28
+b 30
+b 32
+b 30
+b 1
+b 307
+b 309
+b 311
+b 313
+b 309
+b 1
+b 60
+b 11
+b 10
+b 1
+b 4
+b 243
+b 253
+b 132
+b 138
+b 137
+b 1
+b 85
+b 84
+b 1
+b 132
+b 158
+b 131
+b 1
+b 154
+b 1
+b 30
+b 50
+b 49
+b 1
+b 11
+b 18
+b 29
+b 28
+b 1
+b 1
+b 26
+b 25
+b 1
+b 37
+b 21
+b 20
+b 1
+b 90
+b 108
+b 87
+b 1
+b 576
+b 23
+b 49
+b 6
+b 3
+b 38
+b 54
+b 77
+b 77
+b 1
+b 185
+b 184
+b 1
+b 21
+b 148
+b 150
+b 148
+b 1
+b 10
+b 13
+b 10
+b 38
+b 37
+b 1
+b 45
+b 4
+b 81
+b 66
+b 284
+b 286
+b 284
+b 1
+b 193
+b 195
+b 223
+b 193
+b 1
+b 84
+b 14
+b 77
+b 4
+b 4
+b 1
+b 36
+b 35
+b 1
+b 146
+b 2
+b 165
+b 167
+b 244
+b 331
+b 126
+b 9
+b 8
+b 1
+b 1
+b 11
+b 211
+b 23
+b 22
+b 1
+b 150
+b 253
+b 64
+b 64
+b 1
+b 96
+b 95
+b 1
+b 20
+b 22
+b 14
+b 16
+b 11
+b 1
+b 0
+b 2
+b 170
+b 169
+b 1
+b 125
+b 127
+b 253
+b 255
+b 257
+b 267
+b 266
+b 1
+b 91
+b 93
+b 109
+b 108
+b 1
+b 173
+b 175
+b 177
+b 179
+b 175
+b 1
+b 30
+b 32
+b 34
+b 8
+b 15
+b 17
+b 19
+b 15
+b 1
+b 4
+b 6
+b 6
+b 1
+b 9
+b 8
+b 1
+b 6
+b 8
+b 10
+b 12
+b 107
+b 109
+b 21
+b 32
+b 34
+b 41
+b 252
+b 254
+b 262
+b 252
+b 1
+b 82
+b 92
+b 12
+b 21
+b 3
+b 5
+b 7
+b 3
+b 1
+b 30
+b 40
+b 21
+b 45
+b 6
+b 279
+b 278
+b 1
+b 49
+b 0
+b 2
+b 323
+b 325
+b 320
+b 1
+b 136
+b 135
+b 1
+b 260
+b 262
+b 264
+b 266
+b 260
+b 1
+b 237
+b 100
+b 85
+b 87
+b 89
+b 91
+b 89
+b 4
+b 1
+b 9
+b 0
+b 1
+b 141
+b 4
+b 6
+b 8
+b 4
+b 1
+b 26
+b 23
+b 1
+b 109
+b 106
+b 1
+b 106
+b 108
+b 178
+b 177
+b 1
+b 45
+b 47
+b 4
+b 3
+b 1
+b 45
+b 52
+b 73
+b 85
+b 87
+b 72
+b 1
+b 22
+b 24
+b 26
+b 22
+b 1
+b 115
+b 127
+b 309
+b 306
+b 1
+b 188
+b 185
+b 1
+b 15
+b 17
+b 19
+b 292
+b 302
+b 301
+b 1
+b 17
+b 15
+b 1
+b 164
+b 7
+b 17
+b 4
+b 1
+b 48
+b 57
+b 47
+b 1
+b 23
+b 114
+b 113
+b 1
+b 72
+b 93
+b 95
+b 104
+b 93
+b 1
+b 38
+b 40
+b 42
+b 38
+b 1
+b 319
+b 332
+b 331
+b 1
+b 72
+b 69
+b 1
+b 31
+b 38
+b 5
+b 7
+b 9
+b 11
+b 7
+b 1
+b 145
+b 191
+b 66
+b 64
+b 1
+b 14
+b 30
+b 29
+b 1
+b 117
+b 125
+b 2
+b 10
+b 37
+b 39
+b 41
+b 43
+b 41
+b 1
+b 44
+b 54
+b 56
+b 43
+b 1
+b 58
+b 60
+b 0
+b 82
+b 92
+b 89
+b 109
+b 57
+b 54
+b 1
+b 3
+b 5
+b 0
+b 1
+b 140
+b 150
+b 139
+b 1
+b 12
+b 46
+b 56
+b 82
+b 84
+b 86
+b 88
+b 48
+b 20
+b 22
+b 28
+b 30
+b 46
+b 10
+b 16
+b 18
+b 12
+b 11
+b 1
+b 17
+b 58
+b 55
+b 1
+b 28
+b 40
+b 6
+b 8
+b 10
+b 83
+b 3
+b 19
+b 43
+b 40
+b 1
+b 159
+b 177
+b 179
+b 158
+b 1
+b 14
+b 41
+b 43
+b 13
+b 1
+b 78
+b 180
+b 77
+b 1
+b 1
+b 7
+b 224
+b 226
+b 228
+b 226
+b 1
+b 224
+b 13
+b 32
+b 34
+b 4
+b 30
+b 115
+b 117
+b 147
+b 149
+b 159
+b 158
+b 1
+b 4
+b 32
+b 153
+b 168
+b 150
+b 1
+b 0
+b 65
+b 67
+b 69
+b 71
+b 67
+b 1
+b 143
+b 145
+b 147
+b 149
+b 200
+b 210
+b 208
+b 1
+b 389
+b 418
+b 436
+b 388
+b 1
+b 413
+b 1
+b 75
+b 77
+b 79
+b 81
+b 75
+b 1
+b 115
+b 154
+b 114
+b 1
+b 1110
+b 12
+b 11
+b 1
+b 117
+b 114
+b 1
+b 90
+b 101
+b 207
+b 218
+b 200
+b 202
+b 32
+b 31
+b 1
+b 55
+b 57
+b 7
+b 185
+b 185
+b 1
+b 97
+b 95
+b 1
+b 11
+b 33
+b 38
+b 40
+b 48
+b 122
+b 135
+b 2
+b 10
+b 133
+b 12
+b 39
+b 22
+b 69
+b 67
+b 1
+b 17
+b 14
+b 1
+b 37
+b 35
+b 1
+b 2
+b 2
+b 1
+b 480
+b 482
+b 1
+b 86
+b 88
+b 90
+b 83
+b 1
+b 0
+b 236
+b 235
+b 1
+b 2
+b 4
+b 106
+b 108
+b 110
+b 112
+b 106
+b 1
+b 37
+b 16
+b 15
+b 29
+b 8
+b 18
+b 20
+b 183
+b 185
+b 187
+b 189
+b 183
+b 1
+b 91
+b 93
+b 93
+b 1
+b 7
+b 4
+b 1
+b 110
+b 112
+b 122
+b 120
+b 1
+b 152
+b 71
+b 105
+b 107
+b 109
+b 111
+b 105
+b 1
+b 143
+b 145
+b 155
+b 180
+b 177
+b 1
+b 8
+b 7
+b 1
+b 41
+b 15
+b 283
+b 285
+b 287
+b 289
+b 287
+b 1
+b 315
+b 314
+b 1
+b 103
+b 113
+b 100
+b 1
+b 308
+b 32
+b 92
+b 137
+b 58
+b 57
+b 1
+b 4
+b 7
+b 9
+b 25
+b 7
+b 1
+b 518
+b 515
+b 1
+b 49
+b 16
+b 14
+b 1
+b 215
+b 337
+b 212
+b 1
+b 125
+b 127
+b 135
+b 294
+b 316
+b 291
+b 1
+b 314
+b 1
+b 84
+b 121
+b 129
+b 83
+b 1
+b 15
+b 26
+b 25
+b 1
+b 42
+b 40
+b 1
+b 282
+b 316
+b 57
+b 59
+b 61
+b 63
+b 22
+b 1
+b 92
+b 94
+b 96
+b 94
+b 1
+b 12
+b 31
+b 45
+b 44
+b 1
+b 11
+b 13
+b 15
+b 17
+b 11
+b 1
+b 97
+b 107
+b 94
+b 1
+b 105
+b 1
+b 54
+b 7
+b 22
+b 6
+b 1
+b 35
+b 37
+b 39
+b 37
+b 1
+b 35
+b 37
+b 62
+b 64
+b 35
+b 1
+b 24
+b 344
+b 38
+b 37
+b 1
+b 9
+b 11
+b 123
+b 125
+b 157
+b 123
+b 1
+b 38
+b 40
+b 53
+b 144
+b 161
+b 167
+b 143
+b 1
+b 9
+b 16
+b 14
+b 1
+b 146
+b 177
+b 143
+b 1
+b 96
+b 104
+b 103
+b 1
+b 39
+b 37
+b 1
+b 173
+b 170
+b 1
+b 30
+b 27
+b 1
+b 214
+b 216
+b 232
+b 211
+b 1
+b 229
+b 1
+b 5
+b 7
+b 62
+b 100
+b 110
+b 19
+b 277
+b 11
+b 250
+b 252
+b 250
+b 1
+b 71
+b 73
+b 75
+b 85
+b 174
+b 258
+b 257
+b 1
+b 17
+b 15
+b 1
+b 143
+b 174
+b 0
+b 4
+b 3
+b 1256
+b 1275
+b 15
+b 25
+b 27
+b 25
+b 1
+b 330
+b 81
+b 83
+b 310
+b 66
+b 48
+b 50
+b 50
+b 1
+b 84
+b 119
+b 121
+b 83
+b 1
+b 110
+b 112
+b 106
+b 110
+b 108
+b 1
+b 95
+b 62
+b 95
+b 200
+b 210
+b 199
+b 1
+b 206
+b 1
+b 5
+b 12
+b 17
+b 14
+b 132
+b 148
+b 8
+b 209
+b 76
+b 78
+b 80
+b 82
+b 80
+b 1
+b 108
+b 110
+b 119
+b 118
+b 1
+b 155
+b 31
+b 61
+b 63
+b 65
+b 61
+b 1
+b 330
+b 11
+b 25
+b 24
+b 1
+b 18
+b 15
+b 1
+b 24
+b 83
+b 33
+b 71
+b 42
+b 112
+b 52
+b 1
+b 0
+b 1
+b 0
+b 148
+b 150
+b 0
+b 178
+b 254
+b 119
+b 119
+b 1
+b 67
+b 75
+b 74
+b 1
+b 6
+b 130
+b 132
+b 134
+b 132
+b 1
+b 170
+b 188
+b 169
+b 1
+b 53
+b 55
+b 57
+b 50
+b 1
+b 92
+b 98
+b 97
+b 1
+b 4
+b 2
+b 1
+b 261
+b 263
+b 261
+b 1
+b 0
+b 12
+b 14
+b 16
+b 16
+b 1
+b 160
+b 162
+b 160
+b 1
+b 27
+b 25
+b 116
+b 118
+b 181
+b 31
+b 12
+b 5
+b 84
+b 46
+b 43
+b 1
+b 1
+b 79
+b 110
+b 109
+b 1
+b 19
+b 126
+b 159
+b 323
+b 325
+b 327
+b 329
+b 320
+b 1
+b 57
+b 59
+b 61
+b 63
+b 8
+b 18
+b 24
+b 19
+b 16
+b 1
+b 101
+b 170
+b 977
+b 17
+b 17
+b 1
+b 1
+b 36
+b 44
+b 46
+b 35
+b 1
+b 143
+b 4
+b 32
+b 51
+b 12
+b 7
+b 34
+b 467
+b 466
+b 1
+b 30
+b 32
+b 14
+b 24
+b 34
+b 13
+b 1
+b 134
+b 136
+b 146
+b 144
+b 1
+b 779
+b 781
+b 270
+b 269
+b 1
+b 103
+b 118
+b 117
+b 1
+b 1
+b 39
+b 57
+b 103
+b 102
+b 1
+b 102
+b 104
+b 102
+b 1
+b 13
+b 386
+b 383
+b 1
+b 142
+b 144
+b 160
+b 39
+b 41
+b 142
+b 184
+b 141
+b 1
+b 12
+b 36
+b 38
+b 36
+b 1
+b 224
+b 17
+b 31
+b 105
+b 107
+b 27
+b 15
+b 4
+b 1
+b 14
+b 163
+b 161
+b 1
+b 23
+b 19
+b 16
+b 1
+b 115
+b 123
+b 37
+b 71
+b 36
+b 1
+b 0
+b 35
+b 45
+b 47
+b 33
+b 1
+b 104
+b 106
+b 257
+b 259
+b 261
+b 21
+b 30
+b 38
+b 144
+b 62
+b 14
+b 7
+b 17
+b 93
+b 95
+b 97
+b 93
+b 1
+b 34
+b 36
+b 50
+b 64
+b 61
+b 1
+b 125
+b 35
+b 33
+b 1
+b 55
+b 70
+b 5
+b 4
+b 1
+b 117
+b 127
+b 141
+b 116
+b 1
+b 79
+b 81
+b 83
+b 85
+b 81
+b 1
+b 1348
+b 7
+b 9
+b 176
+b 204
+b 175
+b 1
+b 64
+b 2
+b 4
+b 254
+b 196
+b 198
+b 200
+b 142
+b 149
+b 102
+b 19
+b 7
+b 9
+b 11
+b 9
+b 225
+b 231
+b 63
+b 90
+b 62
+b 1
+b 23
+b 20
+b 83
+b 85
+b 17
+b 27
+b 185
+b 18
+b 20
+b 57
+b 65
+b 67
+b 65
+b 1
+b 6
+b 8
+b 10
+b 0
+b 2
+b 71
+b 73
+b 75
+b 77
+b 71
+b 1
+b 92
+b 114
+b 315
+b 480
+b 479
+b 1
+b 67
+b 96
+b 82
+b 84
+b 86
+b 88
+b 82
+b 1
+b 25
+b 27
+b 29
+b 31
+b 29
+b 31
+b 128
+b 54
+b 56
+b 58
+b 60
+b 56
+b 1
+b 10
+b 76
+b 102
+b 114
+b 63
+b 65
+b 83
+b 60
+b 1
+b 80
+b 1
+b 163
+b 177
+b 179
+b 22
+b 24
+b 26
+b 28
+b 24
+b 1
+b 194
+b 196
+b 194
+b 1
+b 24
+b 5
+b 19
+b 21
+b 51
+b 32
+b 105
+b 31
+b 1
+b 102
+b 1
+b 54
+b 90
+b 51
+b 1
+b 85
+b 1
+b 67
+b 92
+b 122
+b 91
+b 1
+b 39
+b 41
+b 8
+b 7
+b 1
+b 125
+b 127
+b 38
+b 58
+b 57
+b 1
+b 403
+b 401
+b 1
+b 9
+b 7
+b 28
+b 12
+b 139
+b 138
+b 1
+b 107
+b 125
+b 42
+b 44
+b 46
+b 48
+b 39
+b 1
+b 26
+b 40
+b 95
+b 94
+b 1
+b 4
+b 61
+b 87
+b 11
+b 27
+b 89
+b 88
+b 1
+b 26
+b 128
+b 144
+b 146
+b 144
+b 1
+b 7
+b 9
+b 11
+b 37
+b 59
+b 61
+b 36
+b 1
+b 103
+b 105
+b 107
+b 21
+b 23
+b 25
+b 27
+b 21
+b 1
+b 55
+b 57
+b 59
+b 8
+b 123
+b 125
+b 123
+b 1
+b 42
+b 84
+b 128
+b 142
+b 71
+b 46
+b 161
+b 200
+b 161
+b 1
+b 2
+b 12
+b 10
+b 1
+b 26
+b 5
+b 4
+b 1
+b 5
+b 2
+b 1
+b 41
+b 55
+b 52
+b 2
+b 91
+b 149
+b 187
+b 218
+b 218
+b 1
+b 82
+b 96
+b 33
+b 35
+b 37
+b 39
+b 37
+b 1
+b 6
+b 8
+b 10
+b 8
+b 1
+b 58
+b 86
+b 88
+b 57
+b 1
+b 146
+b 153
+b 78
+b 88
+b 160
+b 77
+b 1
+b 79
+b 0
+b 2
+b 3
+b 14
+b 91
+b 93
+b 13
+b 1
+b 3
+b 5
+b 7
+b 5
+b 1
+b 293
+b 295
+b 255
+b 138
+b 217
+b 219
+b 137
+b 1
+b 52
+b 51
+b 1
+b 44
+b 41
+b 1
+b 18
+b 485
+b 487
+b 181
+b 89
+b 91
+b 101
+b 89
+b 1
+b 138
+b 46
+b 45
+b 1
+b 27
+b 29
+b 31
+b 33
+b 31
+b 1
+b 6
+b 16
+b 256
+b 255
+b 1
+b 311
+b 321
+b 323
+b 321
+b 1
+b 4
+b 6
+b 8
+b 10
+b 3
+b 51
+b 53
+b 80
+b 79
+b 1
+b 164
+b 4
+b 6
+b 8
+b 10
+b 51
+b 48
+b 1
+b 59
+b 92
+b 94
+b 96
+b 98
+b 72
+b 71
+b 1
+b 5
+b 7
+b 204
+b 211
+b 184
+b 186
+b 188
+b 184
+b 1
+b 274
+b 276
+b 278
+b 276
+b 1
+b 255
+b 257
+b 259
+b 166
+b 168
+b 170
+b 172
+b 166
+b 1
+b 108
+b 118
+b 83
+b 85
+b 83
+b 1
+b 0
+b 2
+b 25
+b 34
+b 96
+b 33
+b 1
+b 72
+b 33
+b 16
+b 145
+b 163
+b 142
+b 1
+b 161
+b 1
+b 169
+b 7
+b 0
+b 44
+b 183
+b 197
+b 18
+b 86
+b 644
+b 643
+b 1
+b 18
+b 20
+b 20
+b 1
+b 78
+b 77
+b 1
+b 376
+b 378
+b 48
+b 0
+b 2
+b 10
+b 8
+b 1
+b 227
+b 226
+b 1
+b 395
+b 397
+b 403
+b 171
+b 168
+b 1
+b 37
+b 36
+b 1
+b 244
+b 243
+b 1
+b 5
+b 172
+b 181
+b 8
+b 12
+b 14
+b 388
+b 216
+b 146
+b 162
+b 66
+b 68
+b 70
+b 72
+b 140
+b 200
+b 197
+b 1
+b 23
+b 25
+b 27
+b 29
+b 25
+b 1
+b 25
+b 49
+b 51
+b 293
+b 295
+b 293
+b 1
+b 21
+b 10
+b 12
+b 21
+b 20
+b 20
+b 1
+b 47
+b 315
+b 323
+b 3
+b 85
+b 0
+b 2
+b 46
+b 0
+b 1
+b 120
+b 136
+b 138
+b 119
+b 1
+b 4
+b 6
+b 8
+b 10
+b 49
+b 75
+b 77
+b 267
+b 12
+b 37
+b 39
+b 46
+b 37
+b 1
+b 66
+b 68
+b 70
+b 72
+b 70
+b 1
+b 453
+b 558
+b 579
+b 557
+b 1
+b 576
+b 1
+b 21
+b 21
+b 1
+b 4
+b 43
+b 2
+b 1
+b 17
+b 7
+b 9
+b 22
+b 24
+b 21
+b 20
+b 1
+b 43
+b 45
+b 47
+b 85
+b 118
+b 31
+b 33
+b 35
+b 37
+b 35
+b 1
+b 116
+b 19
+b 140
+b 51
+b 65
+b 50
+b 1
+b 11
+b 8
+b 1
+b 4
+b 4
+b 1
+b 46
+b 21
+b 138
+b 137
+b 1
+b 1062
+b 1085
+b 1084
+b 1
+b 18
+b 29
+b 17
+b 19
+b 14
+b 1
+b 70
+b 68
+b 1
+b 50
+b 95
+b 94
+b 1
+b 39
+b 49
+b 58
+b 82
+b 84
+b 86
+b 88
+b 86
+b 1
+b 114
+b 113
+b 1
+b 8
+b 10
+b 14
+b 11
+b 1
+b 2
+b 50
+b 52
+b 50
+b 1
+b 10
+b 78
+b 14
+b 226
+b 50
+b 73
+b 75
+b 77
+b 79
+b 73
+b 1
+b 22
+b 56
+b 64
+b 55
+b 1
+b 501
+b 511
+b 500
+b 1
+b 67
+b 140
+b 142
+b 144
+b 146
+b 65
+b 67
+b 89
+b 19
+b 32
+b 18
+b 1
+b 23
+b 32
+b 65
+b 75
+b 64
+b 1
+b 9
+b 11
+b 13
+b 15
+b 6
+b 1
+b 13
+b 1
+b 393
+b 51
+b 48
+b 1
+b 1
+b 0
+b 1
+b 248
+b 250
+b 252
+b 254
+b 410
+b 41
+b 43
+b 47
+b 49
+b 59
+b 23
+b 25
+b 27
+b 20
+b 1
+b 25
+b 1
+b 55
+b 55
+b 19
+b 21
+b 19
+b 1
+b 258
+b 255
+b 1
+b 17
+b 38
+b 50
+b 20
+b 1
+b 9
+b 16
+b 18
+b 26
+b 25
+b 1
+b 23
+b 45
+b 156
+b 35
+b 34
+b 1
+b 92
+b 94
+b 102
+b 75
+b 77
+b 43
+b 42
+b 1
+b 63
+b 155
+b 154
+b 1
+b 13
+b 126
+b 154
+b 196
+b 72
+b 4
+b 6
+b 8
+b 4
+b 1
+b 100
+b 102
+b 104
+b 106
+b 51
+b 49
+b 1
+b 32
+b 34
+b 71
+b 70
+b 1
+b 115
+b 117
+b 75
+b 77
+b 79
+b 254
+b 256
+b 251
+b 1
+b 7
+b 6
+b 1
+b 162
+b 13
+b 37
+b 3
+b 110
+b 2
+b 150
+b 152
+b 150
+b 1
+b 4
+b 419
+b 429
+b 417
+b 1
+b 427
+b 1
+b 21
+b 23
+b 57
+b 27
+b 47
+b 32
+b 34
+b 42
+b 41
+b 1
+b 135
+b 137
+b 139
+b 141
+b 137
+b 1
+b 37
+b 11
+b 9
+b 11
+b 13
+b 15
+b 6
+b 1
+b 10
+b 12
+b 136
+b 7
+b 1
+b 133
+b 1
+b 149
+b 225
+b 227
+b 148
+b 1
+b 220
+b 1
+b 101
+b 98
+b 1
+b 3
+b 5
+b 5
+b 1
+b 18
+b 55
+b 57
+b 55
+b 1
+b 45
+b 47
+b 3
+b 20
+b 281
+b 295
+b 280
+b 1
+b 172
+b 3
+b 19
+b 3
+b 91
+b 141
+b 91
+b 1
+b 45
+b 47
+b 63
+b 330
+b 264
+b 263
+b 1
+b 14
+b 76
+b 78
+b 80
+b 42
+b 41
+b 1
+b 3
+b 11
+b 25
+b 83
+b 182
+b 151
+b 153
+b 155
+b 157
+b 148
+b 1
+b 28
+b 30
+b 28
+b 1
+b 10
+b 67
+b 69
+b 8
+b 7
+b 1
+b 543
+b 3
+b 13
+b 12
+b 1
+b 192
+b 194
+b 1
+b 121
+b 31
+b 290
+b 304
+b 289
+b 1
+b 11
+b 209
+b 145
+b 1
+b 18
+b 15
+b 46
+b 194
+b 196
+b 146
+b 163
+b 146
+b 1
+b 159
+b 1
+b 35
+b 37
+b 410
+b 11
+b 13
+b 30
+b 2
+b 2
+b 1
+b 28
+b 33
+b 30
+b 159
+b 201
+b 200
+b 1
+b 1
+b 35
+b 43
+b 42
+b 1
+b 29
+b 37
+b 39
+b 243
+b 48
+b 1
+b 34
+b 36
+b 38
+b 40
+b 524
+b 526
+b 528
+b 644
+b 672
+b 643
+b 1
+b 668
+b 1
+b 22
+b 188
+b 190
+b 188
+b 1
+b 3
+b 38
+b 40
+b 42
+b 44
+b 51
+b 57
+b 31
+b 43
+b 15
+b 51
+b 58
+b 14
+b 1
+b 10
+b 5
+b 10
+b 7
+b 300
+b 308
+b 24
+b 26
+b 28
+b 397
+b 399
+b 35
+b 37
+b 32
+b 1
+b 96
+b 95
+b 1
+b 262
+b 291
+b 299
+b 290
+b 1
+b 554
+b 556
+b 95
+b 92
+b 1
+b 149
+b 163
+b 165
+b 163
+b 1
+b 37
+b 36
+b 1
+b 50
+b 11
+b 404
+b 40
+b 89
+b 17
+b 126
+b 160
+b 111
+b 108
+b 1
+b 135
+b 132
+b 1
+b 210
+b 234
+b 236
+b 209
+b 1
+b 15
+b 17
+b 19
+b 21
+b 419
+b 421
+b 423
+b 425
+b 199
+b 23
+b 252
+b 139
+b 149
+b 18
+b 20
+b 11
+b 140
+b 199
+b 138
+b 1
+b 44
+b 199
+b 201
+b 203
+b 205
+b 201
+b 1
+b 29
+b 31
+b 106
+b 108
+b 126
+b 108
+b 1
+b 7
+b 9
+b 11
+b 9
+b 1
+b 84
+b 11
+b 143
+b 179
+b 181
+b 142
+b 1
+b 174
+b 1
+b 51
+b 73
+b 34
+b 33
+b 1
+b 307
+b 68
+b 174
+b 176
+b 178
+b 180
+b 178
+b 1
+b 134
+b 154
+b 44
+b 100
+b 102
+b 170
+b 186
+b 64
+b 82
+b 10
+b 129
+b 10
+b 1
+b 53
+b 3
+b 5
+b 3
+b 1
+b 172
+b 20
+b 57
+b 59
+b 99
+b 98
+b 1
+b 274
+b 272
+b 1
+b 9
+b 67
+b 39
+b 13
+b 12
+b 1
+b 80
+b 4
+b 330
+b 350
+b 382
+b 329
+b 1
+b 345
+b 1
+b 37
+b 39
+b 37
+b 1
+b 120
+b 288
+b 285
+b 1
+b 7
+b 9
+b 4
+b 1
+b 4
+b 66
+b 34
+b 69
+b 116
+b 118
+b 45
+b 35
+b 9
+b 71
+b 73
+b 75
+b 77
+b 73
+b 1
+b 4
+b 0
+b 2
+b 0
+b 107
+b 134
+b 136
+b 104
+b 1
+b 134
+b 1
+b 86
+b 120
+b 122
+b 85
+b 1
+b 50
+b 52
+b 54
+b 52
+b 1
+b 18
+b 31
+b 29
+b 1
+b 151
+b 3
+b 0
+b 33
+b 5
+b 7
+b 5
+b 1
+b 44
+b 54
+b 54
+b 1
+b 386
+b 8
+b 8
+b 1
+b 138
+b 136
+b 1
+b 18
+b 20
+b 22
+b 24
+b 24
+b 1
+b 35
+b 93
+b 382
+b 407
+b 381
+b 1
+b 404
+b 1
+b 48
+b 96
+b 95
+b 1
+b 7
+b 9
+b 266
+b 268
+b 270
+b 272
+b 266
+b 1
+b 101
+b 103
+b 101
+b 1
+b 51
+b 6
+b 20
+b 66
+b 68
+b 70
+b 72
+b 70
+b 1
+b 9
+b 11
+b 13
+b 48
+b 15
+b 8
+b 18
+b 25
+b 49
+b 48
+b 1
+b 50
+b 0
+b 2
+b 256
+b 5
+b 89
+b 8
+b 10
+b 8
+b 1
+b 287
+b 284
+b 1
+b 16
+b 15
+b 1
+b 119
+b 118
+b 1
+b 171
+b 38
+b 35
+b 1
+b 56
+b 20
+b 5
+b 32
+b 31
+b 1
+b 63
+b 63
+b 1
+b 74
+b 18
+b 17
+b 1
+b 11
+b 8
+b 10
+b 20
+b 141
+b 169
+b 171
+b 140
+b 1
+b 164
+b 1
+b 114
+b 122
+b 124
+b 111
+b 1
+b 122
+b 1
+b 24
+b 23
+b 1
+b 0
+b 10
+b 16
+b 51
+b 9
+b 11
+b 9
+b 1
+b 6
+b 8
+b 10
+b 12
+b 10
+b 1
+b 29
+b 53
+b 55
+b 193
+b 195
+b 28
+b 7
+b 17
+b 19
+b 22
+b 24
+b 26
+b 28
+b 139
+b 141
+b 143
+b 193
+b 7
+b 6
+b 1
+b 70
+b 67
+b 1
+b 87
+b 102
+b 84
+b 1
+b 40
+b 39
+b 1
+b 194
+b 13
+b 66
+b 84
+b 40
+b 39
+b 1
+b 7
+b 7
+b 6
+b 1
+b 66
+b 63
+b 1
+b 121
+b 141
+b 138
+b 1
+b 39
+b 41
+b 43
+b 41
+b 1
+b 93
+b 6
+b 45
+b 47
+b 13
+b 155
+b 157
+b 159
+b 161
+b 159
+b 1
+b 67
+b 66
+b 1
+b 32
+b 34
+b 3
+b 19
+b 2
+b 1
+b 155
+b 192
+b 150
+b 152
+b 259
+b 150
+b 1
+b 53
+b 55
+b 57
+b 59
+b 185
+b 185
+b 1
+b 19
+b 72
+b 70
+b 1
+b 8
+b 9
+b 6
+b 1
+b 30
+b 186
+b 205
+b 394
+b 393
+b 1
+b 6
+b 8
+b 24
+b 26
+b 38
+b 24
+b 1
+b 236
+b 114
+b 17
+b 30
+b 16
+b 1
+b 3
+b 132
+b 134
+b 136
+b 134
+b 1
+b 1064
+b 1066
+b 1083
+b 1064
+b 1
+b 320
+b 202
+b 96
+b 9
+b 54
+b 56
+b 58
+b 60
+b 54
+b 87
+b 89
+b 20
+b 30
+b 40
+b 153
+b 194
+b 95
+b 54
+b 56
+b 40
+b 36
+b 201
+b 209
+b 200
+b 1
+b 219
+b 26
+b 147
+b 37
+b 284
+b 23
+b 21
+b 1
+b 1
+b 0
+b 1
+b 22
+b 24
+b 19
+b 1
+b 165
+b 164
+b 1
+b 91
+b 11
+b 65
+b 67
+b 69
+b 144
+b 3
+b 5
+b 7
+b 9
+b 0
+b 1
+b 63
+b 63
+b 1
+b 12
+b 31
+b 41
+b 93
+b 101
+b 277
+b 274
+b 1
+b 41
+b 40
+b 1
+b 23
+b 22
+b 1
+b 117
+b 119
+b 9
+b 84
+b 34
+b 33
+b 1
+b 29
+b 38
+b 29
+b 28
+b 1
+b 68
+b 0
+b 44
+b 41
+b 1
+b 239
+b 236
+b 1
+b 6
+b 4
+b 1
+b 29
+b 26
+b 1
+b 35
+b 121
+b 133
+b 118
+b 1
+b 131
+b 1
+b 25
+b 9
+b 348
+b 356
+b 28
+b 38
+b 80
+b 54
+b 53
+b 1
+b 71
+b 73
+b 87
+b 85
+b 1
+b 80
+b 82
+b 84
+b 86
+b 52
+b 54
+b 202
+b 200
+b 1
+b 27
+b 29
+b 31
+b 33
+b 15
+b 25
+b 231
+b 78
+b 30
+b 29
+b 1
+b 1
+b 11
+b 14
+b 32
+b 11
+b 1
+b 30
+b 1
+b 91
+b 129
+b 88
+b 1
+b 266
+b 268
+b 270
+b 268
+b 1
+b 124
+b 160
+b 162
+b 160
+b 1
+b 162
+b 21
+b 228
+b 225
+b 1
+b 204
+b 206
+b 201
+b 1
+b 99
+b 101
+b 117
+b 116
+b 1
+b 21
+b 23
+b 25
+b 27
+b 25
+b 1
+b 85
+b 110
+b 112
+b 171
+b 170
+b 1
+b 45
+b 47
+b 250
+b 252
+b 263
+b 247
+b 1
+b 260
+b 1
+b 10
+b 8
+b 1
+b 81
+b 83
+b 78
+b 1
+b 130
+b 152
+b 150
+b 1
+b 98
+b 0
+b 2
+b 2
+b 1
+b 79
+b 81
+b 4
+b 6
+b 8
+b 4
+b 1
+b 132
+b 146
+b 45
+b 44
+b 1
+b 145
+b 33
+b 66
+b 68
+b 70
+b 72
+b 70
+b 1
+b 335
+b 332
+b 1
+b 11
+b 8
+b 1
+b 18
+b 13
+b 18
+b 42
+b 58
+b 60
+b 41
+b 1
+b 107
+b 172
+b 190
+b 189
+b 1
+b 62
+b 62
+b 1
+b 162
+b 164
+b 166
+b 162
+b 1
+b 110
+b 312
+b 314
+b 316
+b 240
+b 50
+b 34
+b 58
+b 60
+b 87
+b 59
+b 1
+b 82
+b 1
+b 24
+b 26
+b 28
+b 30
+b 2
+b 32
+b 2
+b 1
+b 27
+b 1
+b 23
+b 75
+b 75
+b 1
+b 152
+b 151
+b 1
+b 17
+b 19
+b 21
+b 201
+b 223
+b 258
+b 308
+b 310
+b 259
+b 261
+b 263
+b 261
+b 1
+b 19
+b 21
+b 23
+b 21
+b 1
+b 157
+b 17
+b 20
+b 22
+b 24
+b 26
+b 20
+b 1
+b 140
+b 193
+b 195
+b 193
+b 1
+b 248
+b 250
+b 252
+b 254
+b 231
+b 230
+b 1
+b 74
+b 76
+b 12
+b 59
+b 47
+b 63
+b 133
+b 141
+b 131
+b 1
+b 7
+b 4
+b 1
+b 149
+b 148
+b 1
+b 29
+b 1
+b 52
+b 18
+b 24
+b 38
+b 23
+b 1
+b 33
+b 1
+b 115
+b 71
+b 73
+b 75
+b 77
+b 15
+b 17
+b 19
+b 21
+b 17
+b 1
+b 721
+b 723
+b 718
+b 1
+b 10
+b 9
+b 1
+b 175
+b 255
+b 94
+b 96
+b 112
+b 94
+b 1
+b 6
+b 8
+b 10
+b 15
+b 16
+b 7
+b 37
+b 39
+b 6
+b 1
+b 81
+b 80
+b 1
+b 24
+b 1
+b 22
+b 34
+b 27
+b 26
+b 1
+b 62
+b 59
+b 1
+b 30
+b 32
+b 34
+b 27
+b 1
+b 39
+b 41
+b 43
+b 174
+b 176
+b 178
+b 180
+b 178
+b 1
+b 16
+b 26
+b 56
+b 58
+b 60
+b 53
+b 1
+b 11
+b 13
+b 31
+b 57
+b 56
+b 1
+b 8
+b 8
+b 1
+b 15
+b 17
+b 19
+b 21
+b 17
+b 1
+b 205
+b 207
+b 202
+b 1
+b 9
+b 8
+b 1
+b 29
+b 39
+b 18
+b 20
+b 22
+b 24
+b 18
+b 1
+b 97
+b 97
+b 1
+b 11
+b 0
+b 11
+b 24
+b 26
+b 21
+b 1
+b 1
+b 0
+b 1
+b 149
+b 159
+b 148
+b 1
+b 155
+b 1
+b 1
+b 563
+b 18
+b 53
+b 55
+b 50
+b 1
+b 96
+b 95
+b 1
+b 23
+b 25
+b 35
+b 23
+b 1
+b 26
+b 28
+b 36
+b 26
+b 1
+b 417
+b 419
+b 432
+b 414
+b 1
+b 429
+b 1
+b 152
+b 151
+b 1
+b 47
+b 49
+b 89
+b 100
+b 88
+b 1
+b 17
+b 36
+b 33
+b 1
+b 9
+b 7
+b 1
+b 44
+b 8
+b 50
+b 52
+b 74
+b 71
+b 1
+b 52
+b 3
+b 121
+b 131
+b 133
+b 120
+b 1
+b 236
+b 250
+b 252
+b 235
+b 1
+b 3
+b 35
+b 37
+b 0
+b 1
+b 163
+b 79
+b 3
+b 2
+b 1
+b 91
+b 93
+b 91
+b 1
+b 15
+b 92
+b 8
+b 10
+b 214
+b 213
+b 1
+b 635
+b 641
+b 37
+b 39
+b 41
+b 43
+b 43
+b 1
+b 45
+b 155
+b 78
+b 80
+b 107
+b 78
+b 1
+b 18
+b 34
+b 36
+b 17
+b 1
+b 105
+b 107
+b 105
+b 1
+b 7
+b 74
+b 76
+b 104
+b 76
+b 1
+b 99
+b 1
+b 28
+b 26
+b 1
+b 235
+b 232
+b 1
+b 206
+b 205
+b 1
+b 19
+b 9
+b 11
+b 13
+b 31
+b 33
+b 35
+b 37
+b 28
+b 1
+b 35
+b 1
+b 14
+b 16
+b 18
+b 81
+b 331
+b 48
+b 50
+b 48
+b 1
+b 20
+b 306
+b 25
+b 1
+b 34
+b 36
+b 49
+b 59
+b 61
+b 305
+b 60
+b 62
+b 82
+b 35
+b 33
+b 30
+b 1
+b 5
+b 49
+b 46
+b 1
+b 14
+b 60
+b 62
+b 13
+b 1
+b 157
+b 159
+b 157
+b 1
+b 1
+b 218
+b 228
+b 230
+b 217
+b 1
+b 19
+b 16
+b 1
+b 1
+b 24
+b 23
+b 1
+b 105
+b 104
+b 1
+b 126
+b 45
+b 44
+b 1
+b 8
+b 18
+b 241
+b 6
+b 1
+b 238
+b 1
+b 126
+b 136
+b 125
+b 1
+b 299
+b 313
+b 330
+b 312
+b 1
+b 10
+b 51
+b 117
+b 27
+b 29
+b 27
+b 1
+b 39
+b 4
+b 6
+b 291
+b 307
+b 306
+b 1
+b 79
+b 101
+b 115
+b 114
+b 1
+b 31
+b 28
+b 1
+b 52
+b 72
+b 42
+b 44
+b 58
+b 44
+b 1
+b 54
+b 1
+b 132
+b 146
+b 165
+b 164
+b 1
+b 108
+b 5
+b 16
+b 16
+b 1
+b 89
+b 88
+b 1
+b 280
+b 282
+b 284
+b 286
+b 22
+b 21
+b 1
+b 4
+b 6
+b 28
+b 138
+b 12
+b 28
+b 6
+b 8
+b 28
+b 27
+b 1
+b 88
+b 44
+b 18
+b 2
+b 44
+b 56
+b 60
+b 62
+b 60
+b 1
+b 180
+b 182
+b 184
+b 186
+b 184
+b 1
+b 419
+b 428
+b 427
+b 1
+b 9
+b 177
+b 179
+b 177
+b 1
+b 7
+b 7
+b 36
+b 38
+b 7
+b 6
+b 1
+b 73
+b 41
+b 55
+b 54
+b 1
+b 7
+b 87
+b 96
+b 98
+b 96
+b 1
+b 256
+b 295
+b 297
+b 9
+b 11
+b 13
+b 6
+b 1
+b 11
+b 1
+b 456
+b 458
+b 460
+b 462
+b 79
+b 81
+b 8
+b 96
+b 6
+b 8
+b 133
+b 135
+b 137
+b 139
+b 75
+b 24
+b 23
+b 1
+b 1
+b 142
+b 144
+b 40
+b 37
+b 1
+b 25
+b 24
+b 1
+b 13
+b 10
+b 1
+b 1
+b 80
+b 114
+b 142
+b 192
+b 44
+b 93
+b 44
+b 1
+b 21
+b 33
+b 20
+b 1
+b 18
+b 20
+b 20
+b 1
+b 74
+b 71
+b 1
+b 37
+b 24
+b 26
+b 24
+b 1
+b 5
+b 28
+b 2
+b 1
+b 26
+b 1
+b 6
+b 3
+b 1
+b 32
+b 50
+b 60
+b 59
+b 1
+b 43
+b 154
+b 156
+b 190
+b 0
+b 2
+b 16
+b 2
+b 1
+b 0
+b 20
+b 15
+b 25
+b 14
+b 1
+b 21
+b 1
+b 177
+b 38
+b 7
+b 6
+b 1
+b 35
+b 131
+b 130
+b 1
+b 34
+b 58
+b 60
+b 21
+b 20
+b 1
+b 70
+b 72
+b 72
+b 1
+b 66
+b 65
+b 1
+b 1
+b 27
+b 67
+b 78
+b 77
+b 1
+b 42
+b 334
+b 336
+b 338
+b 414
+b 336
+b 1
+b 130
+b 147
+b 210
+b 78
+b 161
+b 160
+b 1
+b 1
+b 347
+b 375
+b 90
+b 138
+b 137
+b 1
+b 284
+b 12
+b 14
+b 7
+b 6
+b 1
+b 52
+b 66
+b 14
+b 13
+b 1
+b 88
+b 98
+b 5
+b 2
+b 21
+b 2
+b 10
+b 1
+b 1
+b 50
+b 26
+b 99
+b 159
+b 58
+b 4
+b 216
+b 218
+b 330
+b 218
+b 1
+b 326
+b 1
+b 29
+b 28
+b 1
+b 124
+b 121
+b 1
+b 230
+b 34
+b 33
+b 1
+b 8
+b 10
+b 126
+b 128
+b 156
+b 155
+b 1
+b 81
+b 109
+b 120
+b 122
+b 124
+b 122
+b 1
+b 95
+b 105
+b 59
+b 58
+b 1
+b 44
+b 46
+b 121
+b 165
+b 44
+b 46
+b 48
+b 146
+b 148
+b 73
+b 10
+b 20
+b 18
+b 1
+b 43
+b 63
+b 42
+b 1
+b 58
+b 1
+b 73
+b 18
+b 114
+b 40
+b 82
+b 311
+b 342
+b 308
+b 1
+b 109
+b 111
+b 109
+b 1
+b 12
+b 4
+b 2
+b 74
+b 76
+b 78
+b 74
+b 1
+b 626
+b 10
+b 0
+b 130
+b 2
+b 24
+b 26
+b 28
+b 30
+b 28
+b 1
+b 21
+b 51
+b 400
+b 471
+b 37
+b 0
+b 2
+b 83
+b 97
+b 99
+b 30
+b 42
+b 26
+b 40
+b 42
+b 99
+b 98
+b 1
+b 12
+b 22
+b 9
+b 1
+b 141
+b 171
+b 140
+b 1
+b 167
+b 1
+b 7
+b 53
+b 50
+b 1
+b 122
+b 121
+b 1
+b 0
+b 22
+b 168
+b 167
+b 1
+b 77
+b 6
+b 286
+b 0
+b 2
+b 19
+b 16
+b 1
+b 76
+b 86
+b 74
+b 1
+b 15
+b 17
+b 27
+b 15
+b 1
+b 125
+b 141
+b 124
+b 1
+b 17
+b 8
+b 47
+b 46
+b 1
+b 3
+b 13
+b 12
+b 1
+b 227
+b 229
+b 231
+b 233
+b 26
+b 28
+b 30
+b 28
+b 1
+b 82
+b 93
+b 30
+b 40
+b 29
+b 1
+b 8
+b 21
+b 23
+b 18
+b 1
+b 21
+b 1
+b 112
+b 169
+b 27
+b 29
+b 13
+b 19
+b 49
+b 16
+b 1
+b 46
+b 1
+b 74
+b 76
+b 83
+b 74
+b 1
+b 159
+b 7
+b 4
+b 1
+b 156
+b 155
+b 1
+b 34
+b 62
+b 64
+b 33
+b 1
+b 56
+b 179
+b 181
+b 42
+b 62
+b 1
+b 40
+b 42
+b 44
+b 46
+b 40
+b 1
+b 136
+b 117
+b 0
+b 16
+b 13
+b 1
+b 133
+b 148
+b 130
+b 1
+b 146
+b 1
+b 34
+b 31
+b 1
+b 64
+b 66
+b 41
+b 43
+b 65
+b 12
+b 8
+b 158
+b 156
+b 1
+b 13
+b 10
+b 1
+b 493
+b 508
+b 13
+b 67
+b 69
+b 71
+b 73
+b 30
+b 29
+b 1
+b 7
+b 3
+b 3
+b 1
+b 64
+b 69
+b 23
+b 35
+b 37
+b 22
+b 1
+b 287
+b 19
+b 409
+b 423
+b 409
+b 1
+b 12
+b 19
+b 33
+b 10
+b 1
+b 30
+b 1
+b 6
+b 8
+b 48
+b 3
+b 1
+b 45
+b 1
+b 92
+b 5
+b 23
+b 0
+b 62
+b 64
+b 66
+b 64
+b 1
+b 278
+b 278
+b 1
+b 3
+b 3
+b 1
+b 214
+b 243
+b 245
+b 153
+b 152
+b 1
+b 6
+b 21
+b 4
+b 1
+b 95
+b 97
+b 99
+b 101
+b 99
+b 1
+b 53
+b 64
+b 81
+b 108
+b 78
+b 80
+b 141
+b 143
+b 145
+b 147
+b 51
+b 53
+b 30
+b 177
+b 99
+b 33
+b 57
+b 30
+b 40
+b 29
+b 1
+b 0
+b 103
+b 500
+b 502
+b 258
+b 260
+b 116
+b 82
+b 112
+b 81
+b 1
+b 107
+b 1
+b 19
+b 380
+b 5
+b 7
+b 5
+b 1
+b 171
+b 173
+b 168
+b 1
+b 7
+b 6
+b 1
+b 57
+b 59
+b 61
+b 54
+b 1
+b 12
+b 30
+b 773
+b 775
+b 777
+b 779
+b 40
+b 39
+b 1
+b 31
+b 66
+b 65
+b 1
+b 63
+b 73
+b 75
+b 72
+b 71
+b 1
+b 115
+b 115
+b 1
+b 28
+b 58
+b 55
+b 1
+b 198
+b 235
+b 237
+b 197
+b 1
+b 31
+b 0
+b 35
+b 34
+b 1
+b 66
+b 68
+b 66
+b 1
+b 14
+b 174
+b 235
+b 174
+b 1
+b 230
+b 1
+b 50
+b 31
+b 1
+b 32
+b 31
+b 1
+b 16
+b 1
+b 0
+b 1
+b 67
+b 64
+b 1
+b 3
+b 3
+b 1
+b 31
+b 33
+b 132
+b 124
+b 162
+b 121
+b 1
+b 121
+b 119
+b 1
+b 89
+b 91
+b 93
+b 95
+b 93
+b 1
+b 54
+b 81
+b 51
+b 1
+b 107
+b 105
+b 1
+b 2
+b 723
+b 243
+b 1
+b 68
+b 70
+b 34
+b 122
+b 124
+b 122
+b 1
+b 201
+b 5
+b 29
+b 156
+b 158
+b 160
+b 162
+b 14
+b 6
+b 87
+b 89
+b 91
+b 226
+b 71
+b 25
+b 113
+b 123
+b 23
+b 1
+b 120
+b 1
+b 180
+b 179
+b 1
+b 138
+b 140
+b 201
+b 19
+b 21
+b 19
+b 1
+b 121
+b 129
+b 32
+b 31
+b 1
+b 28
+b 25
+b 1
+b 2
+b 4
+b 4
+b 1
+b 78
+b 75
+b 163
+b 160
+b 1
+b 0
+b 2
+b 245
+b 243
+b 1
+b 102
+b 104
+b 106
+b 104
+b 1
+b 6
+b 8
+b 8
+b 1
+b 11
+b 10
+b 1
+b 347
+b 378
+b 346
+b 1
+b 374
+b 1
+b 3
+b 34
+b 36
+b 38
+b 18
+b 168
+b 170
+b 67
+b 66
+b 1
+b 106
+b 118
+b 157
+b 156
+b 1
+b 11
+b 13
+b 15
+b 212
+b 214
+b 216
+b 229
+b 139
+b 141
+b 143
+b 143
+b 1
+b 15
+b 17
+b 19
+b 21
+b 32
+b 34
+b 36
+b 475
+b 3
+b 154
+b 164
+b 166
+b 164
+b 1
+b 40
+b 8
+b 7
+b 1
+b 15
+b 12
+b 1
+b 256
+b 113
+b 27
+b 57
+b 21
+b 36
+b 268
+b 267
+b 1
+b 3
+b 190
+b 190
+b 1
+b 27
+b 27
+b 1
+b 78
+b 126
+b 200
+b 623
+b 66
+b 65
+b 1
+b 2
+b 69
+b 78
+b 80
+b 68
+b 1
+b 81
+b 2
+b 88
+b 3
+b 160
+b 174
+b 74
+b 71
+b 1
+b 45
+b 47
+b 42
+b 1
+b 166
+b 4
+b 31
+b 26
+b 28
+b 30
+b 54
+b 68
+b 193
+b 34
+b 45
+b 108
+b 110
+b 112
+b 114
+b 110
+b 1
+b 298
+b 308
+b 5
+b 33
+b 34
+b 3
+b 123
+b 133
+b 140
+b 108
+b 118
+b 116
+b 1
+b 48
+b 62
+b 311
+b 495
+b 0
+b 191
+b 205
+b 245
+b 244
+b 1
+b 37
+b 39
+b 41
+b 37
+b 1
+b 152
+b 154
+b 156
+b 158
+b 156
+b 1
+b 294
+b 15
+b 17
+b 98
+b 1
+b 8
+b 129
+b 137
+b 152
+b 136
+b 1
+b 62
+b 15
+b 125
+b 133
+b 132
+b 1
+b 9
+b 24
+b 26
+b 28
+b 45
+b 115
+b 114
+b 1
+b 74
+b 76
+b 56
+b 58
+b 60
+b 53
+b 92
+b 141
+b 52
+b 1
+b 116
+b 115
+b 1
+b 9
+b 186
+b 132
+b 142
+b 144
+b 131
+b 1
+b 33
+b 52
+b 91
+b 32
+b 1
+b 45
+b 68
+b 72
+b 9
+b 35
+b 47
+b 34
+b 1
+b 10
+b 23
+b 1
+b 28
+b 3
+b 1
+b 1
+b 34
+b 44
+b 35
+b 13
+b 15
+b 13
+b 1
+b 102
+b 104
+b 106
+b 108
+b 104
+b 1
+b 197
+b 194
+b 1
+b 22
+b 45
+b 44
+b 1
+b 15
+b 1
+b 27
+b 29
+b 9
+b 27
+b 24
+b 1
+b 4
+b 4
+b 1
+b 76
+b 89
+b 0
+b 191
+b 203
+b 97
+b 156
+b 158
+b 122
+b 121
+b 1
+b 8
+b 10
+b 87
+b 97
+b 216
+b 215
+b 1
+b 3
+b 47
+b 97
+b 99
+b 101
+b 103
+b 99
+b 1
+b 16
+b 13
+b 1
+b 44
+b 42
+b 1
+b 873
+b 882
+b 16
+b 15
+b 1
+b 130
+b 132
+b 134
+b 136
+b 134
+b 1
+b 122
+b 124
+b 126
+b 124
+b 1
+b 330
+b 88
+b 87
+b 1
+b 1
+b 41
+b 41
+b 1
+b 0
+b 2
+b 9
+b 0
+b 1
+b 3
+b 5
+b 19
+b 3
+b 1
+b 136
+b 133
+b 1
+b 3
+b 5
+b 36
+b 2
+b 4
+b 173
+b 172
+b 1
+b 77
+b 89
+b 26
+b 28
+b 30
+b 32
+b 101
+b 103
+b 101
+b 1
+b 15
+b 31
+b 45
+b 42
+b 1
+b 4
+b 6
+b 8
+b 4
+b 1
+b 333
+b 335
+b 337
+b 339
+b 337
+b 1
+b 108
+b 110
+b 169
+b 168
+b 1
+b 92
+b 100
+b 470
+b 472
+b 470
+b 1
+b 89
+b 97
+b 124
+b 139
+b 88
+b 1
+b 47
+b 93
+b 122
+b 46
+b 1
+b 88
+b 1
+b 202
+b 65
+b 231
+b 229
+b 1
+b 51
+b 53
+b 53
+b 1
+b 32
+b 52
+b 9
+b 8
+b 1
+b 144
+b 184
+b 141
+b 1
+b 181
+b 1
+b 259
+b 267
+b 266
+b 1
+b 199
+b 177
+b 185
+b 192
+b 24
+b 68
+b 21
+b 1
+b 328
+b 325
+b 1
+b 127
+b 124
+b 1
+b 278
+b 288
+b 277
+b 1
+b 74
+b 373
+b 415
+b 55
+b 57
+b 59
+b 61
+b 59
+b 1
+b 45
+b 82
+b 24
+b 50
+b 64
+b 49
+b 1
+b 113
+b 115
+b 117
+b 119
+b 113
+b 1
+b 38
+b 4
+b 56
+b 58
+b 60
+b 62
+b 150
+b 159
+b 169
+b 147
+b 1
+b 110
+b 129
+b 109
+b 1
+b 17
+b 38
+b 48
+b 198
+b 200
+b 195
+b 1
+b 13
+b 11
+b 1
+b 88
+b 90
+b 116
+b 88
+b 1
+b 96
+b 106
+b 105
+b 1
+b 50
+b 49
+b 1
+b 11
+b 8
+b 1
+b 21
+b 23
+b 18
+b 1
+b 281
+b 281
+b 1
+b 9
+b 9
+b 1
+b 500
+b 545
+b 547
+b 127
+b 8
+b 10
+b 150
+b 149
+b 1
+b 0
+b 2
+b 31
+b 0
+b 1
+b 53
+b 8
+b 79
+b 81
+b 83
+b 101
+b 76
+b 1
+b 4
+b 36
+b 38
+b 37
+b 1
+b 54
+b 90
+b 89
+b 1
+b 35
+b 45
+b 47
+b 32
+b 1
+b 45
+b 1
+b 55
+b 92
+b 53
+b 59
+b 61
+b 87
+b 94
+b 10
+b 20
+b 19
+b 1
+b 3
+b 8
+b 7
+b 20
+b 19
+b 1
+b 117
+b 12
+b 14
+b 12
+b 1
+b 35
+b 64
+b 66
+b 68
+b 22
+b 58
+b 109
+b 8
+b 72
+b 82
+b 241
+b 243
+b 241
+b 1
+b 209
+b 44
+b 52
+b 54
+b 43
+b 1
+b 152
+b 164
+b 151
+b 1
+b 159
+b 1
+b 69
+b 395
+b 446
+b 446
+b 1
+b 152
+b 11
+b 11
+b 13
+b 15
+b 17
+b 11
+b 1
+b 74
+b 76
+b 74
+b 1
+b 7
+b 2
+b 12
+b 11
+b 1
+b 8
+b 6
+b 1
+b 7
+b 9
+b 4
+b 1
+b 244
+b 267
+b 269
+b 401
+b 52
+b 51
+b 1
+b 418
+b 416
+b 1
+b 114
+b 116
+b 148
+b 116
+b 1
+b 20
+b 28
+b 17
+b 1
+b 20
+b 20
+b 1
+b 71
+b 86
+b 57
+b 14
+b 3
+b 23
+b 0
+b 1
+b 21
+b 1
+b 6
+b 8
+b 6
+b 1
+b 0
+b 32
+b 34
+b 36
+b 32
+b 1
+b 6
+b 17
+b 16
+b 1
+b 52
+b 54
+b 56
+b 58
+b 56
+b 1
+b 101
+b 103
+b 101
+b 1
+b 1
+b 89
+b 118
+b 53
+b 55
+b 57
+b 59
+b 73
+b 75
+b 105
+b 104
+b 1
+b 1172
+b 7
+b 118
+b 12
+b 147
+b 157
+b 145
+b 1
+b 9
+b 8
+b 1
+b 243
+b 275
+b 414
+b 426
+b 428
+b 413
+b 1
+b 34
+b 22
+b 64
+b 13
+b 12
+b 1
+b 3
+b 16
+b 18
+b 20
+b 22
+b 20
+b 1
+b 19
+b 53
+b 61
+b 18
+b 1
+b 31
+b 43
+b 45
+b 30
+b 1
+b 361
+b 363
+b 375
+b 374
+b 1
+b 80
+b 77
+b 52
+b 71
+b 18
+b 28
+b 42
+b 17
+b 1
+b 6
+b 5
+b 7
+b 41
+b 4
+b 3
+b 244
+b 261
+b 5
+b 4
+b 1
+b 45
+b 120
+b 13
+b 15
+b 42
+b 13
+b 1
+b 62
+b 64
+b 66
+b 68
+b 66
+b 1
+b 154
+b 156
+b 151
+b 1
+b 22
+b 12
+b 14
+b 20
+b 12
+b 1
+b 75
+b 58
+b 36
+b 33
+b 1
+b 4
+b 69
+b 67
+b 1
+b 30
+b 40
+b 39
+b 1
+b 0
+b 115
+b 135
+b 114
+b 1
+b 29
+b 134
+b 148
+b 0
+b 127
+b 129
+b 1
+b 147
+b 144
+b 1
+b 169
+b 0
+b 2
+b 2
+b 1
+b 186
+b 327
+b 329
+b 40
+b 0
+b 2
+b 29
+b 20
+b 8
+b 23
+b 4
+b 6
+b 8
+b 10
+b 4
+b 1
+b 212
+b 267
+b 198
+b 208
+b 237
+b 236
+b 1
+b 98
+b 175
+b 91
+b 56
+b 26
+b 28
+b 30
+b 32
+b 26
+b 1
+b 17
+b 31
+b 33
+b 31
+b 1
+b 98
+b 97
+b 1
+b 0
+b 2
+b 0
+b 1
+b 1
+b 9
+b 18
+b 163
+b 165
+b 167
+b 163
+b 1
+b 139
+b 155
+b 60
+b 84
+b 86
+b 57
+b 1
+b 84
+b 1
+b 34
+b 62
+b 59
+b 1
+b 29
+b 55
+b 53
+b 1
+b 91
+b 3
+b 257
+b 267
+b 254
+b 1
+b 265
+b 1
+b 332
+b 98
+b 0
+b 16
+b 15
+b 1
+b 50
+b 52
+b 52
+b 1
+b 359
+b 4
+b 1
+b 220
+b 21
+b 18
+b 1
+b 33
+b 30
+b 1
+b 36
+b 38
+b 40
+b 5
+b 7
+b 9
+b 11
+b 9
+b 1
+b 17
+b 76
+b 86
+b 75
+b 1
+b 30
+b 25
+b 34
+b 120
+b 6
+b 24
+b 44
+b 43
+b 1
+b 283
+b 285
+b 287
+b 283
+b 1
+b 228
+b 228
+b 1
+b 69
+b 66
+b 1
+b 57
+b 59
+b 61
+b 43
+b 122
+b 36
+b 38
+b 40
+b 33
+b 1
+b 67
+b 80
+b 90
+b 47
+b 49
+b 51
+b 53
+b 51
+b 1
+b 6
+b 8
+b 10
+b 0
+b 66
+b 119
+b 12
+b 30
+b 45
+b 47
+b 52
+b 12
+b 0
+b 2
+b 43
+b 42
+b 1
+b 31
+b 33
+b 70
+b 69
+b 1
+b 124
+b 82
+b 182
+b 179
+b 1
+b 333
+b 333
+b 1
+b 84
+b 81
+b 1
+b 0
+b 2
+b 15
+b 74
+b 5
+b 19
+b 4
+b 1
+b 14
+b 1
+b 89
+b 91
+b 58
+b 88
+b 113
+b 10
+b 26
+b 71
+b 77
+b 69
+b 1
+b 37
+b 39
+b 41
+b 55
+b 39
+b 1
+b 48
+b 62
+b 149
+b 161
+b 163
+b 148
+b 1
+b 152
+b 154
+b 156
+b 158
+b 134
+b 7
+b 151
+b 9
+b 110
+b 112
+b 114
+b 116
+b 86
+b 88
+b 4
+b 3
+b 1
+b 45
+b 25
+b 24
+b 1
+b 5
+b 2
+b 1
+b 43
+b 3
+b 11
+b 21
+b 9
+b 1
+b 150
+b 152
+b 7
+b 6
+b 1
+b 5
+b 9
+b 49
+b 77
+b 101
+b 76
+b 1
+b 276
+b 74
+b 17
+b 19
+b 21
+b 19
+b 1
+b 32
+b 31
+b 1
+b 172
+b 174
+b 169
+b 1
+b 283
+b 285
+b 293
+b 291
+b 1
+b 28
+b 94
+b 96
+b 199
+b 201
+b 11
+b 10
+b 1
+b 195
+b 214
+b 211
+b 1
+b 94
+b 47
+b 49
+b 83
+b 34
+b 36
+b 38
+b 40
+b 34
+b 1
+b 50
+b 52
+b 50
+b 1
+b 11
+b 65
+b 64
+b 1
+b 19
+b 198
+b 200
+b 206
+b 4
+b 6
+b 8
+b 10
+b 4
+b 1
+b 70
+b 82
+b 84
+b 69
+b 1
+b 428
+b 15
+b 175
+b 177
+b 57
+b 55
+b 1
+b 22
+b 156
+b 37
+b 36
+b 1
+b 5
+b 7
+b 13
+b 5
+b 1
+b 45
+b 108
+b 1
+b 228
+b 70
+b 72
+b 74
+b 48
+b 13
+b 223
+b 225
+b 649
+b 648
+b 1
+b 26
+b 28
+b 30
+b 28
+b 1
+b 8
+b 10
+b 12
+b 14
+b 12
+b 1
+b 82
+b 10
+b 19
+b 18
+b 1
+b 35
+b 49
+b 58
+b 35
+b 1
+b 45
+b 1
+b 331
+b 333
+b 335
+b 337
+b 335
+b 1
+b 6
+b 14
+b 16
+b 14
+b 1
+b 67
+b 69
+b 0
+b 2
+b 0
+b 1
+b 107
+b 12
+b 10
+b 12
+b 14
+b 65
+b 84
+b 94
+b 93
+b 1
+b 134
+b 7
+b 396
+b 398
+b 410
+b 393
+b 1
+b 407
+b 1
+b 7
+b 29
+b 31
+b 52
+b 51
+b 1
+b 10
+b 20
+b 19
+b 1
+b 50
+b 8
+b 188
+b 190
+b 23
+b 63
+b 78
+b 61
+b 1
+b 0
+b 2
+b 2
+b 1
+b 65
+b 80
+b 100
+b 102
+b 151
+b 73
+b 83
+b 100
+b 72
+b 1
+b 79
+b 1
+b 30
+b 19
+b 92
+b 61
+b 270
+b 287
+b 284
+b 1
+b 281
+b 23
+b 97
+b 99
+b 101
+b 103
+b 97
+b 1
+b 6
+b 16
+b 75
+b 11
+b 44
+b 63
+b 243
+b 245
+b 266
+b 240
+b 1
+b 263
+b 1
+b 236
+b 234
+b 1
+b 16
+b 16
+b 1
+b 11
+b 25
+b 27
+b 10
+b 1
+b 86
+b 110
+b 148
+b 179
+b 147
+b 1
+b 46
+b 373
+b 465
+b 467
+b 16
+b 18
+b 20
+b 22
+b 24
+b 18
+b 1
+b 16
+b 98
+b 119
+b 14
+b 1
+b 116
+b 1
+b 59
+b 109
+b 40
+b 217
+b 81
+b 166
+b 29
+b 36
+b 38
+b 202
+b 201
+b 1
+b 55
+b 63
+b 53
+b 1
+b 5
+b 11
+b 163
+b 197
+b 213
+b 160
+b 1
+b 210
+b 1
+b 27
+b 29
+b 41
+b 39
+b 1
+b 9
+b 11
+b 13
+b 9
+b 1
+b 47
+b 45
+b 1
+b 185
+b 187
+b 187
+b 1
+b 121
+b 121
+b 1
+b 1
+b 17
+b 19
+b 85
+b 17
+b 1
+b 64
+b 6
+b 8
+b 132
+b 9
+b 11
+b 9
+b 1
+b 32
+b 34
+b 36
+b 38
+b 32
+b 1
+b 15
+b 25
+b 63
+b 65
+b 67
+b 77
+b 11
+b 31
+b 313
+b 313
+b 1
+b 283
+b 280
+b 1
+b 78
+b 92
+b 108
+b 77
+b 1
+b 73
+b 75
+b 16
+b 129
+b 131
+b 147
+b 13
+b 12
+b 1
+b 11
+b 6
+b 8
+b 36
+b 35
+b 1
+b 124
+b 187
+b 79
+b 5
+b 3
+b 1
+b 25
+b 27
+b 29
+b 31
+b 22
+b 1
+b 36
+b 46
+b 35
+b 1
+b 24
+b 66
+b 65
+b 1
+b 27
+b 14
+b 45
+b 13
+b 1
+b 1
+b 53
+b 92
+b 1268
+b 1267
+b 1
+b 25
+b 154
+b 35
+b 15
+b 17
+b 19
+b 12
+b 1
+b 13
+b 15
+b 17
+b 19
+b 17
+b 1
+b 102
+b 114
+b 192
+b 34
+b 115
+b 122
+b 124
+b 58
+b 3
+b 460
+b 484
+b 31
+b 55
+b 57
+b 29
+b 1
+b 46
+b 48
+b 50
+b 52
+b 46
+b 1
+b 20
+b 22
+b 24
+b 26
+b 17
+b 1
+b 50
+b 59
+b 60
+b 62
+b 64
+b 64
+b 1
+b 36
+b 36
+b 1
+b 19
+b 256
+b 5
+b 7
+b 22
+b 20
+b 1
+b 50
+b 74
+b 47
+b 1
+b 94
+b 10
+b 46
+b 7
+b 74
+b 76
+b 1
+b 289
+b 56
+b 70
+b 55
+b 1
+b 101
+b 120
+b 129
+b 131
+b 141
+b 140
+b 1
+b 31
+b 5
+b 29
+b 51
+b 26
+b 1
+b 15
+b 14
+b 1
+b 218
+b 238
+b 19
+b 21
+b 58
+b 19
+b 1
+b 22
+b 24
+b 26
+b 28
+b 19
+b 1
+b 26
+b 1
+b 238
+b 50
+b 71
+b 81
+b 10
+b 119
+b 354
+b 361
+b 555
+b 120
+b 113
+b 178
+b 180
+b 182
+b 180
+b 1
+b 20
+b 30
+b 17
+b 1
+b 27
+b 1
+b 68
+b 70
+b 72
+b 26
+b 36
+b 38
+b 107
+b 106
+b 1
+b 4
+b 6
+b 26
+b 28
+b 15
+b 51
+b 64
+b 80
+b 48
+b 1
+b 77
+b 1
+b 144
+b 188
+b 190
+b 143
+b 1
+b 183
+b 1
+b 7
+b 30
+b 83
+b 82
+b 1
+b 15
+b 12
+b 1
+b 52
+b 60
+b 69
+b 68
+b 1
+b 2
+b 32
+b 32
+b 1
+b 8
+b 10
+b 34
+b 10
+b 1
+b 30
+b 1
+b 16
+b 48
+b 15
+b 1
+b 44
+b 1
+b 1
+b 8
+b 54
+b 68
+b 84
+b 99
+b 101
+b 34
+b 40
+b 48
+b 39
+b 1
+b 6
+b 5
+b 4
+b 1
+b 52
+b 49
+b 1
+b 71
+b 73
+b 75
+b 77
+b 71
+b 1
+b 32
+b 34
+b 36
+b 34
+b 1
+b 65
+b 40
+b 31
+b 39
+b 30
+b 1
+b 35
+b 1
+b 11
+b 24
+b 3
+b 5
+b 211
+b 213
+b 215
+b 217
+b 211
+b 1
+b 175
+b 123
+b 144
+b 75
+b 77
+b 21
+b 23
+b 25
+b 27
+b 8
+b 18
+b 41
+b 51
+b 61
+b 40
+b 1
+b 118
+b 120
+b 115
+b 1
+b 42
+b 39
+b 1
+b 204
+b 78
+b 77
+b 87
+b 104
+b 103
+b 1
+b 31
+b 13
+b 68
+b 102
+b 158
+b 157
+b 1
+b 237
+b 239
+b 8
+b 14
+b 162
+b 188
+b 197
+b 199
+b 62
+b 64
+b 66
+b 1
+b 235
+b 263
+b 151
+b 253
+b 8
+b 5
+b 1
+b 12
+b 88
+b 90
+b 92
+b 94
+b 92
+b 1
+b 140
+b 142
+b 137
+b 1
+b 1
+b 206
+b 208
+b 210
+b 208
+b 1
+b 132
+b 134
+b 136
+b 132
+b 1
+b 128
+b 146
+b 148
+b 109
+b 111
+b 113
+b 109
+b 1
+b 288
+b 330
+b 173
+b 172
+b 1
+b 50
+b 48
+b 1
+b 13
+b 175
+b 197
+b 194
+b 238
+b 150
+b 168
+b 170
+b 148
+b 1
+b 114
+b 116
+b 118
+b 120
+b 116
+b 1
+b 311
+b 341
+b 308
+b 1
+b 338
+b 1
+b 174
+b 178
+b 0
+b 2
+b 18
+b 29
+b 48
+b 28
+b 1
+b 40
+b 7
+b 461
+b 36
+b 30
+b 9
+b 11
+b 11
+b 1
+b 273
+b 282
+b 281
+b 1
+b 7
+b 99
+b 12
+b 11
+b 1
+b 39
+b 50
+b 50
+b 1
+b 6
+b 5
+b 1
+b 24
+b 91
+b 264
+b 274
+b 283
+b 261
+b 1
+b 280
+b 1
+b 30
+b 18
+b 26
+b 17
+b 1
+b 22
+b 1
+b 101
+b 111
+b 54
+b 56
+b 58
+b 60
+b 85
+b 134
+b 1096
+b 1359
+b 1358
+b 1
+b 172
+b 4
+b 74
+b 76
+b 78
+b 80
+b 263
+b 30
+b 69
+b 29
+b 1
+b 64
+b 1
+b 196
+b 195
+b 1
+b 9
+b 11
+b 6
+b 1
+b 98
+b 108
+b 6
+b 100
+b 211
+b 99
+b 1
+b 206
+b 1
+b 129
+b 131
+b 162
+b 161
+b 1
+b 24
+b 26
+b 61
+b 60
+b 1
+b 246
+b 248
+b 250
+b 246
+b 1
+b 332
+b 410
+b 1
+b 0
+b 1
+b 28
+b 30
+b 32
+b 6
+b 37
+b 5
+b 160
+b 168
+b 8
+b 7
+b 1
+b 61
+b 71
+b 69
+b 1
+b 63
+b 81
+b 61
+b 1
+b 21
+b 23
+b 25
+b 27
+b 21
+b 1
+b 316
+b 327
+b 46
+b 41
+b 36
+b 116
+b 118
+b 35
+b 1
+b 323
+b 325
+b 333
+b 323
+b 1
+b 38
+b 40
+b 47
+b 141
+b 143
+b 145
+b 141
+b 1
+b 241
+b 243
+b 245
+b 247
+b 35
+b 46
+b 0
+b 2
+b 509
+b 511
+b 513
+b 515
+b 511
+b 1
+b 499
+b 16
+b 18
+b 17
+b 1
+b 243
+b 218
+b 387
+b 401
+b 111
+b 129
+b 131
+b 133
+b 108
+b 1
+b 131
+b 1
+b 96
+b 77
+b 76
+b 1
+b 1
+b 38
+b 37
+b 1
+b 269
+b 271
+b 271
+b 1
+b 79
+b 7
+b 274
+b 284
+b 286
+b 169
+b 1
+b 30
+b 1
+b 1
+b 26
+b 1
+b 33
+b 35
+b 37
+b 39
+b 362
+b 4
+b 3
+b 1
+b 1
+b 152
+b 154
+b 156
+b 21
+b 32
+b 475
+b 1
+b 11
+b 75
+b 77
+b 101
+b 99
+b 1
+b 75
+b 98
+b 100
+b 98
+b 1
+b 40
+b 52
+b 51
+b 1
+b 94
+b 93
+b 1
+b 21
+b 23
+b 38
+b 21
+b 1
+b 49
+b 51
+b 53
+b 53
+b 1
+b 114
+b 111
+b 1
+b 58
+b 69
+b 55
+b 1
+b 22
+b 35
+b 34
+b 1
+b 29
+b 131
+b 17
+b 19
+b 21
+b 23
+b 56
+b 55
+b 1
+b 14
+b 12
+b 1
+b 7
+b 29
+b 4
+b 1
+b 26
+b 1
+b 75
+b 77
+b 89
+b 153
+b 155
+b 157
+b 159
+b 19
+b 31
+b 45
+b 44
+b 1
+b 6
+b 34
+b 17
+b 16
+b 1
+b 3
+b 5
+b 281
+b 283
+b 285
+b 294
+b 127
+b 129
+b 131
+b 127
+b 1
+b 55
+b 28
+b 6
+b 2
+b 3
+b 5
+b 19
+b 3
+b 1
+b 15
+b 25
+b 0
+b 2
+b 8
+b 10
+b 12
+b 14
+b 12
+b 1
+b 25
+b 27
+b 29
+b 38
+b 22
+b 1
+b 120
+b 122
+b 124
+b 126
+b 163
+b 191
+b 193
+b 191
+b 1
+b 353
+b 353
+b 1
+b 0
+b 2
+b 0
+b 1
+b 30
+b 29
+b 1
+b 30
+b 27
+b 1
+b 94
+b 137
+b 18
+b 19
+b 3
+b 5
+b 21
+b 5
+b 1
+b 17
+b 1
+b 244
+b 243
+b 1
+b 211
+b 31
+b 12
+b 95
+b 118
+b 23
+b 22
+b 1
+b 27
+b 40
+b 49
+b 75
+b 101
+b 74
+b 1
+b 97
+b 1
+b 6
+b 71
+b 146
+b 143
+b 1
+b 15
+b 15
+b 13
+b 1
+b 202
+b 212
+b 10
+b 81
+b 36
+b 25
+b 25
+b 1
+b 10
+b 12
+b 34
+b 40
+b 37
+b 1
+b 42
+b 41
+b 1
+b 58
+b 60
+b 98
+b 97
+b 1
+b 74
+b 76
+b 87
+b 86
+b 1
+b 6
+b 16
+b 18
+b 5
+b 1
+b 81
+b 83
+b 85
+b 83
+b 1
+b 268
+b 276
+b 278
+b 102
+b 104
+b 106
+b 108
+b 102
+b 1
+b 12
+b 11
+b 1
+b 6
+b 8
+b 286
+b 332
+b 283
+b 1
+b 330
+b 1
+b 38
+b 40
+b 38
+b 1
+b 29
+b 17
+b 19
+b 21
+b 23
+b 111
+b 24
+b 158
+b 157
+b 1
+b 37
+b 39
+b 41
+b 433
+b 435
+b 437
+b 437
+b 1
+b 12
+b 70
+b 10
+b 1
+b 0
+b 16
+b 11
+b 32
+b 10
+b 1
+b 49
+b 144
+b 20
+b 30
+b 146
+b 257
+b 105
+b 107
+b 0
+b 2
+b 73
+b 75
+b 77
+b 70
+b 1
+b 75
+b 1
+b 32
+b 34
+b 36
+b 29
+b 1
+b 1
+b 0
+b 1
+b 121
+b 131
+b 12
+b 21
+b 28
+b 44
+b 46
+b 27
+b 1
+b 39
+b 1
+b 102
+b 104
+b 106
+b 104
+b 106
+b 18
+b 16
+b 1
+b 98
+b 44
+b 88
+b 103
+b 15
+b 129
+b 131
+b 131
+b 1
+b 164
+b 162
+b 1
+b 60
+b 92
+b 94
+b 92
+b 1
+b 201
+b 7
+b 93
+b 147
+b 51
+b 53
+b 73
+b 72
+b 1
+b 130
+b 36
+b 35
+b 1
+b 88
+b 87
+b 1
+b 440
+b 442
+b 45
+b 44
+b 1
+b 398
+b 400
+b 406
+b 106
+b 4
+b 6
+b 42
+b 41
+b 1
+b 4
+b 11
+b 49
+b 48
+b 1
+b 3
+b 0
+b 1
+b 1
+b 23
+b 103
+b 170
+b 172
+b 198
+b 172
+b 1
+b 194
+b 1
+b 231
+b 233
+b 265
+b 21
+b 39
+b 72
+b 38
+b 1
+b 68
+b 1
+b 245
+b 271
+b 273
+b 244
+b 1
+b 54
+b 62
+b 223
+b 52
+b 31
+b 37
+b 136
+b 154
+b 55
+b 65
+b 67
+b 65
+b 1
+b 6
+b 36
+b 0
+b 290
+b 305
+b 83
+b 85
+b 83
+b 82
+b 1
+b 22
+b 24
+b 40
+b 39
+b 1
+b 128
+b 130
+b 132
+b 134
+b 130
+b 1
+b 103
+b 34
+b 1
+b 25
+b 163
+b 171
+b 162
+b 1
+b 167
+b 1
+b 127
+b 129
+b 131
+b 107
+b 2
+b 22
+b 24
+b 26
+b 40
+b 24
+b 1
+b 168
+b 204
+b 203
+b 1
+b 93
+b 9
+b 174
+b 39
+b 17
+b 16
+b 1
+b 4
+b 1
+b 30
+b 28
+b 1
+b 80
+b 82
+b 77
+b 1
+b 314
+b 329
+b 462
+b 461
+b 1
+b 32
+b 34
+b 150
+b 152
+b 147
+b 1
+b 0
+b 2
+b 2
+b 1
+b 19
+b 18
+b 1
+b 111
+b 113
+b 280
+b 295
+b 246
+b 256
+b 283
+b 26
+b 292
+b 1
+b 27
+b 0
+b 1
+b 25
+b 33
+b 43
+b 32
+b 1
+b 4
+b 6
+b 22
+b 271
+b 273
+b 271
+b 1
+b 0
+b 16
+b 28
+b 6
+b 78
+b 80
+b 78
+b 1
+b 33
+b 43
+b 16
+b 22
+b 24
+b 56
+b 76
+b 76
+b 1
+b 298
+b 310
+b 312
+b 314
+b 323
+b 322
+b 1
+b 0
+b 2
+b 16
+b 8
+b 35
+b 63
+b 6
+b 134
+b 69
+b 47
+b 49
+b 51
+b 62
+b 64
+b 62
+b 1
+b 50
+b 6
+b 12
+b 20
+b 22
+b 20
+b 1
+b 4
+b 197
+b 57
+b 59
+b 1
+b 143
+b 145
+b 71
+b 70
+b 1
+b 33
+b 99
+b 109
+b 108
+b 1
+b 2
+b 4
+b 1
+b 27
+b 29
+b 31
+b 33
+b 379
+b 431
+b 457
+b 378
+b 1
+b 426
+b 1
+b 6
+b 3
+b 5
+b 169
+b 199
+b 169
+b 1
+b 195
+b 1
+b 116
+b 118
+b 120
+b 113
+b 1
+b 118
+b 1
+b 93
+b 52
+b 180
+b 228
+b 227
+b 1
+b 66
+b 184
+b 183
+b 1
+b 49
+b 51
+b 46
+b 1
+b 105
+b 10
+b 282
+b 303
+b 115
+b 114
+b 1
+b 24
+b 26
+b 26
+b 1
+b 5
+b 15
+b 251
+b 253
+b 263
+b 261
+b 1
+b 19
+b 1
+b 11
+b 10
+b 1
+b 30
+b 110
+b 112
+b 84
+b 81
+b 1
+b 0
+b 2
+b 28
+b 25
+b 1
+b 38
+b 50
+b 275
+b 277
+b 279
+b 281
+b 275
+b 1
+b 247
+b 257
+b 259
+b 246
+b 1
+b 6
+b 14
+b 16
+b 18
+b 16
+b 1
+b 13
+b 135
+b 925
+b 3
+b 58
+b 57
+b 1
+b 3
+b 2
+b 1
+b 16
+b 18
+b 70
+b 1097
+b 1359
+b 17
+b 71
+b 70
+b 1
+b 51
+b 53
+b 51
+b 1
+b 2
+b 146
+b 210
+b 23
+b 20
+b 1
+b 5
+b 3
+b 1
+b 26
+b 50
+b 25
+b 1
+b 13
+b 4
+b 39
+b 69
+b 71
+b 73
+b 75
+b 73
+b 1
+b 36
+b 38
+b 40
+b 36
+b 1
+b 145
+b 167
+b 169
+b 144
+b 1
+b 20
+b 43
+b 40
+b 1
+b 29
+b 36
+b 48
+b 47
+b 1
+b 6
+b 4
+b 1
+b 112
+b 31
+b 33
+b 26
+b 43
+b 25
+b 1
+b 206
+b 63
+b 0
+b 195
+b 5
+b 7
+b 5
+b 1
+b 370
+b 372
+b 374
+b 376
+b 64
+b 83
+b 63
+b 1
+b 61
+b 84
+b 104
+b 112
+b 101
+b 1
+b 18
+b 47
+b 49
+b 17
+b 1
+b 76
+b 0
+b 2
+b 11
+b 3
+b 5
+b 7
+b 9
+b 7
+b 1
+b 176
+b 178
+b 180
+b 182
+b 180
+b 1
+b 108
+b 0
+b 2
+b 25
+b 24
+b 1
+b 35
+b 43
+b 40
+b 39
+b 1
+b 223
+b 225
+b 225
+b 1
+b 122
+b 297
+b 53
+b 70
+b 224
+b 80
+b 77
+b 1
+b 357
+b 12
+b 26
+b 25
+b 1
+b 40
+b 50
+b 164
+b 190
+b 160
+b 162
+b 88
+b 151
+b 13
+b 16
+b 18
+b 20
+b 16
+b 1
+b 36
+b 49
+b 51
+b 211
+b 235
+b 249
+b 234
+b 1
+b 122
+b 124
+b 9
+b 53
+b 55
+b 57
+b 164
+b 163
+b 1
+b 46
+b 48
+b 9
+b 6
+b 1
+b 3
+b 5
+b 123
+b 125
+b 127
+b 129
+b 127
+b 1
+b 150
+b 31
+b 8
+b 18
+b 65
+b 81
+b 80
+b 1
+b 1
+b 67
+b 28
+b 1
+b 14
+b 16
+b 18
+b 20
+b 18
+b 1
+b 98
+b 5
+b 120
+b 122
+b 117
+b 1
+b 120
+b 1
+b 8
+b 18
+b 4
+b 4
+b 1
+b 9
+b 14
+b 30
+b 38
+b 159
+b 152
+b 452
+b 451
+b 1
+b 6
+b 3
+b 1
+b 62
+b 61
+b 1
+b 99
+b 136
+b 55
+b 2
+b 4
+b 2
+b 1
+b 114
+b 208
+b 73
+b 96
+b 173
+b 175
+b 177
+b 179
+b 173
+b 1
+b 10
+b 15
+b 275
+b 91
+b 121
+b 87
+b 89
+b 121
+b 346
+b 345
+b 1
+b 5
+b 13
+b 30
+b 18
+b 20
+b 18
+b 1
+b 96
+b 95
+b 1
+b 46
+b 9
+b 44
+b 46
+b 48
+b 7
+b 9
+b 11
+b 13
+b 44
+b 42
+b 1
+b 43
+b 45
+b 45
+b 1
+b 22
+b 32
+b 3
+b 75
+b 24
+b 92
+b 91
+b 1
+b 63
+b 259
+b 285
+b 284
+b 1
+b 39
+b 45
+b 61
+b 42
+b 44
+b 54
+b 53
+b 1
+b 45
+b 54
+b 290
+b 292
+b 294
+b 296
+b 11
+b 88
+b 74
+b 83
+b 93
+b 71
+b 1
+b 90
+b 1
+b 3
+b 5
+b 3
+b 1
+b 107
+b 504
+b 167
+b 169
+b 20
+b 6
+b 65
+b 185
+b 187
+b 195
+b 182
+b 1
+b 23
+b 25
+b 27
+b 121
+b 123
+b 125
+b 127
+b 121
+b 1
+b 121
+b 137
+b 196
+b 208
+b 12
+b 14
+b 12
+b 11
+b 1
+b 122
+b 124
+b 126
+b 128
+b 122
+b 1
+b 261
+b 260
+b 1
+b 0
+b 2
+b 0
+b 1
+b 14
+b 40
+b 54
+b 8
+b 33
+b 6
+b 8
+b 18
+b 17
+b 1
+b 266
+b 0
+b 2
+b 15
+b 29
+b 13
+b 12
+b 1
+b 177
+b 75
+b 93
+b 72
+b 1
+b 91
+b 1
+b 257
+b 259
+b 261
+b 261
+b 1
+b 95
+b 8
+b 18
+b 17
+b 1
+b 0
+b 6
+b 5
+b 28
+b 7
+b 72
+b 98
+b 34
+b 142
+b 144
+b 31
+b 1
+b 142
+b 1
+b 173
+b 179
+b 42
+b 39
+b 1
+b 43
+b 1
+b 0
+b 1
+b 23
+b 43
+b 60
+b 2
+b 101
+b 8
+b 10
+b 87
+b 151
+b 420
+b 133
+b 135
+b 166
+b 144
+b 94
+b 22
+b 36
+b 19
+b 1
+b 194
+b 192
+b 1
+b 3
+b 0
+b 1
+b 6
+b 8
+b 9
+b 8
+b 1
+b 92
+b 139
+b 76
+b 78
+b 105
+b 104
+b 1
+b 124
+b 121
+b 1
+b 0
+b 2
+b 10
+b 9
+b 1
+b 347
+b 349
+b 158
+b 439
+b 441
+b 457
+b 455
+b 1
+b 31
+b 85
+b 3
+b 128
+b 0
+b 1
+b 125
+b 1
+b 197
+b 199
+b 201
+b 203
+b 201
+b 1
+b 133
+b 143
+b 145
+b 132
+b 1
+b 6
+b 58
+b 55
+b 1
+b 65
+b 67
+b 173
+b 38
+b 10
+b 12
+b 153
+b 3
+b 198
+b 214
+b 211
+b 1
+b 46
+b 48
+b 136
+b 40
+b 18
+b 62
+b 52
+b 54
+b 56
+b 66
+b 66
+b 1
+b 9
+b 8
+b 1
+b 36
+b 58
+b 307
+b 320
+b 26
+b 28
+b 91
+b 89
+b 1
+b 140
+b 166
+b 168
+b 139
+b 1
+b 13
+b 16
+b 72
+b 82
+b 94
+b 71
+b 1
+b 186
+b 1
+b 11
+b 145
+b 195
+b 8
+b 52
+b 44
+b 43
+b 1
+b 108
+b 108
+b 1
+b 97
+b 110
+b 112
+b 96
+b 1
+b 212
+b 259
+b 39
+b 41
+b 43
+b 45
+b 12
+b 11
+b 1
+b 8
+b 10
+b 60
+b 79
+b 59
+b 1
+b 75
+b 1
+b 9
+b 285
+b 287
+b 289
+b 291
+b 287
+b 1
+b 82
+b 84
+b 86
+b 3
+b 5
+b 7
+b 9
+b 8
+b 10
+b 12
+b 10
+b 1
+b 31
+b 33
+b 35
+b 53
+b 52
+b 1
+b 44
+b 46
+b 33
+b 35
+b 37
+b 159
+b 2
+b 69
+b 78
+b 77
+b 22
+b 315
+b 331
+b 333
+b 3
+b 30
+b 236
+b 235
+b 1
+b 205
+b 212
+b 34
+b 21
+b 23
+b 53
+b 63
+b 50
+b 1
+b 60
+b 1
+b 242
+b 252
+b 254
+b 241
+b 1
+b 31
+b 51
+b 152
+b 151
+b 1
+b 23
+b 25
+b 25
+b 1
+b 19
+b 1
+b 33
+b 201
+b 76
+b 10
+b 7
+b 1
+b 3
+b 2
+b 1
+b 103
+b 110
+b 132
+b 101
+b 1
+b 129
+b 1
+b 58
+b 92
+b 25
+b 41
+b 38
+b 1
+b 187
+b 189
+b 191
+b 187
+b 1
+b 34
+b 36
+b 3
+b 14
+b 5
+b 4
+b 1
+b 25
+b 22
+b 1
+b 34
+b 57
+b 59
+b 33
+b 1
+b 341
+b 343
+b 345
+b 343
+b 1
+b 3
+b 5
+b 7
+b 9
+b 5
+b 1
+b 271
+b 301
+b 300
+b 1
+b 62
+b 7
+b 47
+b 6
+b 22
+b 20
+b 1
+b 87
+b 89
+b 91
+b 101
+b 89
+b 1
+b 153
+b 200
+b 211
+b 323
+b 178
+b 2
+b 203
+b 240
+b 203
+b 1
+b 238
+b 1
+b 118
+b 127
+b 129
+b 117
+b 1
+b 48
+b 50
+b 52
+b 45
+b 1
+b 5
+b 7
+b 9
+b 7
+b 26
+b 7
+b 1
+b 22
+b 1
+b 224
+b 226
+b 286
+b 78
+b 80
+b 78
+b 1
+b 9
+b 33
+b 35
+b 37
+b 33
+b 1
+b 18
+b 6
+b 5
+b 1
+b 223
+b 233
+b 254
+b 220
+b 1
+b 251
+b 1
+b 117
+b 116
+b 1
+b 24
+b 32
+b 76
+b 4
+b 2
+b 68
+b 76
+b 51
+b 68
+b 70
+b 50
+b 1
+b 17
+b 135
+b 137
+b 68
+b 106
+b 66
+b 1
+b 95
+b 92
+b 1
+b 26
+b 40
+b 25
+b 1
+b 35
+b 1
+b 34
+b 36
+b 4
+b 188
+b 5
+b 68
+b 70
+b 72
+b 74
+b 72
+b 1
+b 161
+b 8
+b 24
+b 7
+b 1
+b 19
+b 1
+b 10
+b 12
+b 198
+b 130
+b 162
+b 164
+b 86
+b 96
+b 95
+b 1
+b 176
+b 175
+b 1
+b 128
+b 125
+b 1
+b 202
+b 184
+b 13
+b 15
+b 69
+b 71
+b 1
+b 91
+b 93
+b 233
+b 235
+b 237
+b 239
+b 233
+b 1
+b 42
+b 41
+b 1
+b 152
+b 154
+b 5
+b 15
+b 22
+b 4
+b 1
+b 62
+b 64
+b 62
+b 1
+b 149
+b 375
+b 389
+b 119
+b 133
+b 132
+b 1
+b 38
+b 195
+b 192
+b 1
+b 28
+b 1
+b 11
+b 133
+b 9
+b 97
+b 99
+b 101
+b 103
+b 50
+b 52
+b 47
+b 1
+b 50
+b 49
+b 1
+b 86
+b 85
+b 1
+b 4
+b 22
+b 68
+b 102
+b 94
+b 128
+b 91
+b 1
+b 10
+b 7
+b 1
+b 203
+b 205
+b 207
+b 209
+b 205
+b 1
+b 23
+b 25
+b 39
+b 14
+b 16
+b 18
+b 45
+b 11
+b 1
+b 110
+b 138
+b 137
+b 1
+b 92
+b 24
+b 23
+b 1
+b 12
+b 14
+b 3
+b 5
+b 7
+b 3
+b 1
+b 33
+b 35
+b 35
+b 1
+b 37
+b 0
+b 2
+b 4
+b 7
+b 6
+b 1
+b 49
+b 51
+b 1
+b 401
+b 38
+b 8
+b 12
+b 12
+b 34
+b 43
+b 11
+b 1
+b 29
+b 1
+b 76
+b 78
+b 76
+b 1
+b 23
+b 18
+b 32
+b 38
+b 17
+b 1
+b 27
+b 1
+b 24
+b 26
+b 28
+b 30
+b 28
+b 1
+b 73
+b 95
+b 70
+b 1
+b 93
+b 1
+b 75
+b 72
+b 1
+b 0
+b 2
+b 22
+b 19
+b 1
+b 99
+b 125
+b 157
+b 177
+b 20
+b 22
+b 24
+b 26
+b 54
+b 56
+b 89
+b 54
+b 1
+b 20
+b 38
+b 18
+b 1
+b 1
+b 0
+b 1
+b 27
+b 37
+b 35
+b 1
+b 94
+b 44
+b 0
+b 63
+b 65
+b 67
+b 107
+b 127
+b 126
+b 1
+b 24
+b 26
+b 28
+b 30
+b 24
+b 1
+b 101
+b 146
+b 166
+b 190
+b 192
+b 13
+b 188
+b 319
+b 318
+b 1
+b 1
+b 216
+b 230
+b 232
+b 56
+b 58
+b 68
+b 67
+b 1
+b 248
+b 255
+b 257
+b 247
+b 1
+b 51
+b 53
+b 101
+b 75
+b 77
+b 79
+b 25
+b 40
+b 328
+b 32
+b 0
+b 127
+b 129
+b 127
+b 1
+b 98
+b 5
+b 106
+b 105
+b 1
+b 9
+b 6
+b 1
+b 41
+b 40
+b 1
+b 37
+b 39
+b 48
+b 2
+b 28
+b 30
+b 25
+b 1
+b 0
+b 42
+b 14
+b 11
+b 1
+b 448
+b 486
+b 491
+b 447
+b 1
+b 109
+b 30
+b 32
+b 30
+b 1
+b 160
+b 170
+b 159
+b 1
+b 12
+b 15
+b 84
+b 7
+b 9
+b 137
+b 153
+b 135
+b 1
+b 151
+b 1
+b 85
+b 91
+b 99
+b 82
+b 1
+b 96
+b 1
+b 51
+b 59
+b 50
+b 1
+b 12
+b 254
+b 251
+b 1
+b 59
+b 54
+b 51
+b 1
+b 105
+b 107
+b 109
+b 111
+b 82
+b 84
+b 0
+b 2
+b 108
+b 110
+b 124
+b 105
+b 1
+b 121
+b 1
+b 145
+b 208
+b 406
+b 412
+b 410
+b 1
+b 34
+b 9
+b 11
+b 13
+b 15
+b 6
+b 1
+b 232
+b 234
+b 280
+b 279
+b 1
+b 36
+b 59
+b 157
+b 17
+b 35
+b 45
+b 34
+b 1
+b 41
+b 1
+b 195
+b 32
+b 24
+b 1
+b 1
+b 63
+b 11
+b 185
+b 199
+b 197
+b 1
+b 574
+b 690
+b 573
+b 1
+b 10
+b 84
+b 86
+b 104
+b 84
+b 1
+b 95
+b 104
+b 86
+b 108
+b 85
+b 1
+b 104
+b 1
+b 198
+b 195
+b 1
+b 5
+b 104
+b 103
+b 1
+b 34
+b 18
+b 20
+b 73
+b 72
+b 1
+b 6
+b 8
+b 3
+b 13
+b 12
+b 14
+b 16
+b 18
+b 465
+b 18
+b 26
+b 25
+b 1
+b 189
+b 203
+b 186
+b 1
+b 16
+b 18
+b 20
+b 22
+b 18
+b 1
+b 51
+b 95
+b 50
+b 1
+b 51
+b 83
+b 85
+b 50
+b 1
+b 291
+b 293
+b 295
+b 297
+b 295
+b 1
+b 167
+b 185
+b 187
+b 166
+b 1
+b 152
+b 33
+b 37
+b 36
+b 1
+b 24
+b 0
+b 8
+b 12
+b 25
+b 8
+b 30
+b 3
+b 2
+b 1
+b 37
+b 36
+b 1
+b 21
+b 23
+b 34
+b 31
+b 1
+b 6
+b 69
+b 15
+b 67
+b 67
+b 87
+b 66
+b 1
+b 45
+b 7
+b 362
+b 372
+b 371
+b 1
+b 28
+b 82
+b 194
+b 196
+b 198
+b 200
+b 50
+b 52
+b 54
+b 84
+b 91
+b 224
+b 274
+b 15
+b 53
+b 12
+b 1
+b 54
+b 53
+b 1
+b 87
+b 89
+b 91
+b 91
+b 93
+b 95
+b 133
+b 74
+b 76
+b 54
+b 56
+b 58
+b 56
+b 1
+b 10
+b 30
+b 29
+b 1
+b 275
+b 274
+b 1
+b 94
+b 63
+b 82
+b 62
+b 1
+b 161
+b 163
+b 165
+b 167
+b 161
+b 1
+b 169
+b 194
+b 89
+b 5
+b 4
+b 1
+b 56
+b 80
+b 419
+b 459
+b 489
+b 418
+b 1
+b 455
+b 1
+b 263
+b 265
+b 267
+b 269
+b 104
+b 101
+b 1
+b 9
+b 9
+b 1
+b 3
+b 5
+b 7
+b 3
+b 1
+b 207
+b 3
+b 227
+b 234
+b 233
+b 1
+b 0
+b 52
+b 9
+b 1
+b 25
+b 101
+b 20
+b 22
+b 24
+b 26
+b 20
+b 1
+b 7
+b 29
+b 7
+b 1
+b 47
+b 94
+b 96
+b 44
+b 1
+b 94
+b 1
+b 95
+b 97
+b 99
+b 97
+b 1
+b 17
+b 19
+b 21
+b 110
+b 117
+b 108
+b 1
+b 21
+b 18
+b 1
+b 169
+b 171
+b 181
+b 26
+b 36
+b 23
+b 1
+b 9
+b 11
+b 39
+b 38
+b 1
+b 35
+b 0
+b 14
+b 63
+b 80
+b 88
+b 102
+b 104
+b 87
+b 1
+b 334
+b 395
+b 394
+b 1
+b 4
+b 72
+b 74
+b 76
+b 78
+b 72
+b 1
+b 28
+b 53
+b 516
+b 518
+b 520
+b 522
+b 371
+b 130
+b 132
+b 130
+b 1
+b 52
+b 54
+b 77
+b 76
+b 1
+b 446
+b 458
+b 38
+b 37
+b 1
+b 31
+b 33
+b 1
+b 1
+b 1
+b 680
+b 694
+b 52
+b 69
+b 87
+b 51
+b 1
+b 65
+b 1
+b 134
+b 70
+b 128
+b 126
+b 1
+b 41
+b 40
+b 1
+b 0
+b 8
+b 85
+b 101
+b 82
+b 1
+b 98
+b 1
+b 144
+b 146
+b 148
+b 150
+b 146
+b 1
+b 143
+b 178
+b 180
+b 20
+b 19
+b 19
+b 1
+b 84
+b 86
+b 88
+b 81
+b 1
+b 86
+b 1
+b 27
+b 29
+b 47
+b 27
+b 1
+b 188
+b 206
+b 21
+b 20
+b 1
+b 139
+b 141
+b 143
+b 145
+b 12
+b 28
+b 163
+b 165
+b 178
+b 163
+b 1
+b 12
+b 32
+b 11
+b 1
+b 29
+b 31
+b 23
+b 100
+b 4
+b 196
+b 195
+b 1
+b 76
+b 92
+b 91
+b 1
+b 4
+b 211
+b 210
+b 1
+b 5
+b 23
+b 25
+b 27
+b 154
+b 95
+b 201
+b 203
+b 205
+b 207
+b 74
+b 4
+b 15
+b 60
+b 20
+b 22
+b 24
+b 26
+b 31
+b 44
+b 4
+b 6
+b 8
+b 27
+b 40
+b 29
+b 4
+b 26
+b 28
+b 30
+b 32
+b 28
+b 1
+b 28
+b 55
+b 1
+b 85
+b 87
+b 89
+b 99
+b 84
+b 183
+b 182
+b 1
+b 0
+b 149
+b 157
+b 76
+b 96
+b 9
+b 7
+b 9
+b 7
+b 1
+b 28
+b 0
+b 2
+b 100
+b 25
+b 27
+b 25
+b 1
+b 7
+b 122
+b 124
+b 126
+b 122
+b 1
+b 132
+b 5
+b 44
+b 46
+b 48
+b 50
+b 353
+b 413
+b 433
+b 412
+b 1
+b 428
+b 1
+b 91
+b 93
+b 95
+b 88
+b 1
+b 93
+b 1
+b 375
+b 377
+b 385
+b 375
+b 1
+b 109
+b 111
+b 113
+b 115
+b 111
+b 1
+b 4
+b 18
+b 62
+b 167
+b 87
+b 89
+b 115
+b 114
+b 1
+b 48
+b 50
+b 52
+b 54
+b 50
+b 1
+b 49
+b 77
+b 684
+b 686
+b 688
+b 690
+b 76
+b 12
+b 86
+b 88
+b 86
+b 1
+b 28
+b 90
+b 92
+b 94
+b 94
+b 1
+b 117
+b 119
+b 121
+b 22
+b 24
+b 39
+b 38
+b 1
+b 17
+b 16
+b 1
+b 1
+b 20
+b 0
+b 1
+b 8
+b 152
+b 93
+b 92
+b 1
+b 283
+b 293
+b 56
+b 58
+b 171
+b 122
+b 124
+b 126
+b 128
+b 119
+b 1
+b 113
+b 235
+b 245
+b 110
+b 1
+b 242
+b 1
+b 141
+b 167
+b 139
+b 1
+b 193
+b 193
+b 1
+b 9
+b 9
+b 1
+b 273
+b 64
+b 280
+b 55
+b 54
+b 1
+b 108
+b 118
+b 107
+b 1
+b 114
+b 1
+b 83
+b 112
+b 114
+b 116
+b 118
+b 255
+b 252
+b 1
+b 111
+b 109
+b 1
+b 48
+b 1
+b 54
+b 4
+b 2
+b 1
+b 28
+b 5
+b 2
+b 1
+b 98
+b 106
+b 108
+b 97
+b 1
+b 17
+b 228
+b 24
+b 343
+b 345
+b 343
+b 1
+b 33
+b 114
+b 69
+b 79
+b 66
+b 1
+b 5
+b 4
+b 1
+b 96
+b 173
+b 93
+b 1
+b 86
+b 3
+b 79
+b 81
+b 83
+b 85
+b 205
+b 207
+b 209
+b 211
+b 205
+b 1
+b 188
+b 9
+b 8
+b 1
+b 24
+b 69
+b 68
+b 1
+b 44
+b 43
+b 1
+b 12
+b 14
+b 28
+b 27
+b 1
+b 74
+b 169
+b 171
+b 73
+b 1
+b 3
+b 13
+b 11
+b 1
+b 53
+b 91
+b 8
+b 19
+b 39
+b 67
+b 35
+b 37
+b 39
+b 37
+b 1
+b 49
+b 12
+b 273
+b 299
+b 73
+b 372
+b 4
+b 6
+b 8
+b 10
+b 8
+b 1
+b 105
+b 125
+b 127
+b 102
+b 1
+b 155
+b 179
+b 37
+b 49
+b 65
+b 78
+b 3
+b 31
+b 87
+b 89
+b 87
+b 1
+b 6
+b 37
+b 39
+b 53
+b 144
+b 146
+b 235
+b 34
+b 32
+b 1
+b 0
+b 86
+b 16
+b 116
+b 118
+b 82
+b 112
+b 111
+b 1
+b 1
+b 8
+b 60
+b 80
+b 79
+b 1
+b 254
+b 256
+b 258
+b 256
+b 1
+b 322
+b 324
+b 326
+b 328
+b 330
+b 324
+b 1
+b 124
+b 126
+b 79
+b 78
+b 1
+b 98
+b 100
+b 102
+b 104
+b 104
+b 1
+b 11
+b 165
+b 10
+b 1
+b 160
+b 1
+b 23
+b 23
+b 20
+b 1
+b 25
+b 25
+b 1
+b 129
+b 129
+b 1
+b 109
+b 106
+b 1
+b 107
+b 29
+b 315
+b 317
+b 330
+b 312
+b 1
+b 327
+b 1
+b 52
+b 54
+b 56
+b 52
+b 1
+b 123
+b 52
+b 177
+b 179
+b 181
+b 1
+b 19
+b 27
+b 74
+b 41
+b 153
+b 0
+b 2
+b 38
+b 80
+b 82
+b 84
+b 16
+b 18
+b 40
+b 39
+b 1
+b 30
+b 68
+b 70
+b 29
+b 1
+b 294
+b 44
+b 321
+b 319
+b 1
+b 206
+b 203
+b 1
+b 135
+b 44
+b 119
+b 121
+b 121
+b 1
+b 121
+b 120
+b 1
+b 40
+b 39
+b 1
+b 32
+b 60
+b 29
+b 1
+b 199
+b 201
+b 203
+b 199
+b 1
+b 8
+b 0
+b 2
+b 61
+b 71
+b 85
+b 70
+b 1
+b 80
+b 1
+b 108
+b 7
+b 6
+b 1
+b 3
+b 9
+b 73
+b 75
+b 7
+b 4
+b 1
+b 33
+b 35
+b 37
+b 39
+b 30
+b 1
+b 55
+b 11
+b 67
+b 304
+b 306
+b 9
+b 32
+b 107
+b 131
+b 938
+b 65
+b 6
+b 209
+b 10
+b 12
+b 24
+b 7
+b 1
+b 33
+b 13
+b 10
+b 1
+b 62
+b 88
+b 115
+b 125
+b 227
+b 124
+b 1
+b 222
+b 1
+b 92
+b 128
+b 63
+b 65
+b 67
+b 69
+b 67
+b 1
+b 37
+b 138
+b 75
+b 72
+b 1
+b 155
+b 0
+b 8
+b 24
+b 6
+b 1
+b 8
+b 146
+b 101
+b 115
+b 9
+b 11
+b 53
+b 68
+b 81
+b 80
+b 1
+b 0
+b 59
+b 69
+b 58
+b 1
+b 59
+b 42
+b 54
+b 41
+b 1
+b 50
+b 1
+b 0
+b 2
+b 36
+b 0
+b 1
+b 33
+b 1
+b 1
+b 115
+b 163
+b 112
+b 1
+b 161
+b 1
+b 130
+b 146
+b 128
+b 1
+b 206
+b 203
+b 1
+b 59
+b 84
+b 83
+b 1
+b 24
+b 182
+b 150
+b 1
+b 274
+b 276
+b 1
+b 38
+b 40
+b 38
+b 1
+b 0
+b 2
+b 12
+b 27
+b 26
+b 1
+b 8
+b 7
+b 1
+b 90
+b 92
+b 90
+b 1
+b 131
+b 6
+b 8
+b 6
+b 1
+b 116
+b 155
+b 154
+b 1
+b 4
+b 2
+b 1
+b 50
+b 6
+b 13
+b 40
+b 42
+b 288
+b 287
+b 1
+b 96
+b 98
+b 100
+b 28
+b 30
+b 32
+b 332
+b 331
+b 1
+b 3
+b 0
+b 1
+b 35
+b 37
+b 39
+b 32
+b 1
+b 37
+b 1
+b 58
+b 60
+b 62
+b 64
+b 58
+b 1
+b 12
+b 10
+b 1
+b 9
+b 25
+b 6
+b 1
+b 22
+b 32
+b 183
+b 201
+b 181
+b 1
+b 108
+b 110
+b 20
+b 42
+b 41
+b 1
+b 10
+b 7
+b 1
+b 39
+b 55
+b 52
+b 1
+b 13
+b 23
+b 167
+b 12
+b 1
+b 19
+b 1
+b 76
+b 78
+b 80
+b 82
+b 80
+b 1
+b 5
+b 7
+b 9
+b 11
+b 48
+b 50
+b 52
+b 54
+b 45
+b 1
+b 52
+b 1
+b 204
+b 206
+b 208
+b 210
+b 204
+b 1
+b 69
+b 71
+b 73
+b 75
+b 73
+b 1
+b 90
+b 92
+b 94
+b 96
+b 11
+b 180
+b 175
+b 173
+b 1
+b 26
+b 24
+b 1
+b 91
+b 93
+b 95
+b 46
+b 56
+b 28
+b 25
+b 1
+b 6
+b 5
+b 7
+b 9
+b 7
+b 1
+b 41
+b 51
+b 224
+b 223
+b 1
+b 40
+b 100
+b 138
+b 140
+b 156
+b 135
+b 1
+b 153
+b 1
+b 12
+b 14
+b 16
+b 18
+b 12
+b 1
+b 56
+b 94
+b 177
+b 179
+b 177
+b 1
+b 15
+b 94
+b 176
+b 178
+b 93
+b 1
+b 22
+b 31
+b 188
+b 234
+b 236
+b 187
+b 1
+b 92
+b 92
+b 1
+b 56
+b 56
+b 1
+b 50
+b 52
+b 54
+b 14
+b 21
+b 71
+b 20
+b 1
+b 47
+b 49
+b 63
+b 13
+b 15
+b 17
+b 19
+b 13
+b 1
+b 94
+b 100
+b 44
+b 53
+b 112
+b 111
+b 1
+b 15
+b 199
+b 201
+b 15
+b 14
+b 1
+b 59
+b 56
+b 1
+b 14
+b 11
+b 1
+b 43
+b 81
+b 42
+b 1
+b 76
+b 1
+b 1
+b 9
+b 24
+b 33
+b 55
+b 127
+b 180
+b 19
+b 18
+b 1
+b 19
+b 21
+b 23
+b 25
+b 23
+b 1
+b 14
+b 111
+b 113
+b 115
+b 117
+b 108
+b 1
+b 19
+b 20
+b 34
+b 19
+b 1
+b 30
+b 1
+b 17
+b 27
+b 81
+b 91
+b 39
+b 41
+b 43
+b 36
+b 1
+b 41
+b 1
+b 17
+b 15
+b 1
+b 15
+b 131
+b 130
+b 1
+b 41
+b 43
+b 3
+b 2
+b 1
+b 78
+b 9
+b 11
+b 110
+b 107
+b 1
+b 4
+b 4
+b 1
+b 126
+b 125
+b 1
+b 22
+b 19
+b 1
+b 43
+b 18
+b 20
+b 22
+b 90
+b 12
+b 56
+b 11
+b 1
+b 52
+b 1
+b 4
+b 93
+b 139
+b 149
+b 138
+b 1
+b 529
+b 93
+b 89
+b 99
+b 88
+b 1
+b 172
+b 206
+b 205
+b 1
+b 78
+b 75
+b 1
+b 109
+b 119
+b 118
+b 1
+b 18
+b 66
+b 121
+b 154
+b 153
+b 1
+b 31
+b 33
+b 35
+b 7
+b 14
+b 16
+b 5
+b 1
+b 14
+b 1
+b 205
+b 207
+b 209
+b 205
+b 1
+b 52
+b 62
+b 23
+b 1
+b 23
+b 16
+b 29
+b 23
+b 33
+b 22
+b 1
+b 30
+b 44
+b 119
+b 7
+b 32
+b 65
+b 1
+b 107
+b 109
+b 58
+b 5
+b 7
+b 368
+b 375
+b 174
+b 176
+b 178
+b 180
+b 176
+b 1
+b 40
+b 37
+b 1
+b 0
+b 12
+b 62
+b 64
+b 62
+b 1
+b 66
+b 77
+b 174
+b 1
+b 15
+b 206
+b 288
+b 302
+b 205
+b 1
+b 248
+b 250
+b 252
+b 254
+b 25
+b 63
+b 65
+b 24
+b 1
+b 123
+b 120
+b 1
+b 11
+b 46
+b 48
+b 50
+b 52
+b 139
+b 138
+b 1
+b 47
+b 53
+b 2
+b 168
+b 170
+b 10
+b 103
+b 102
+b 1
+b 19
+b 24
+b 11
+b 61
+b 1
+b 8
+b 24
+b 7
+b 1
+b 19
+b 1
+b 9
+b 8
+b 1
+b 218
+b 220
+b 222
+b 211
+b 7
+b 6
+b 1
+b 1
+b 7
+b 17
+b 15
+b 1
+b 41
+b 59
+b 1
+b 107
+b 109
+b 111
+b 31
+b 12
+b 44
+b 42
+b 1
+b 145
+b 147
+b 142
+b 1
+b 84
+b 86
+b 88
+b 86
+b 1
+b 82
+b 84
+b 86
+b 88
+b 82
+b 1
+b 185
+b 187
+b 189
+b 182
+b 1
+b 18
+b 17
+b 1
+b 35
+b 51
+b 73
+b 70
+b 1
+b 11
+b 8
+b 1
+b 195
+b 209
+b 289
+b 194
+b 1
+b 72
+b 10
+b 21
+b 9
+b 1
+b 17
+b 1
+b 249
+b 271
+b 248
+b 1
+b 5
+b 116
+b 115
+b 1
+b 21
+b 462
+b 464
+b 466
+b 468
+b 459
+b 1
+b 81
+b 83
+b 85
+b 95
+b 259
+b 257
+b 1
+b 41
+b 12
+b 3
+b 20
+b 37
+b 132
+b 134
+b 88
+b 90
+b 92
+b 90
+b 1
+b 41
+b 43
+b 105
+b 43
+b 1
+b 101
+b 1
+b 250
+b 258
+b 260
+b 249
+b 1
+b 94
+b 63
+b 112
+b 27
+b 22
+b 21
+b 1
+b 3
+b 17
+b 119
+b 121
+b 116
+b 1
+b 15
+b 14
+b 1
+b 122
+b 148
+b 124
+b 36
+b 38
+b 109
+b 111
+b 106
+b 1
+b 91
+b 93
+b 29
+b 9
+b 16
+b 37
+b 39
+b 49
+b 65
+b 67
+b 16
+b 466
+b 4
+b 96
+b 4
+b 2
+b 4
+b 2
+b 1
+b 114
+b 29
+b 92
+b 94
+b 96
+b 98
+b 94
+b 1
+b 59
+b 61
+b 63
+b 65
+b 59
+b 1
+b 138
+b 140
+b 140
+b 1
+b 54
+b 53
+b 1
+b 110
+b 241
+b 254
+b 108
+b 1
+b 251
+b 1
+b 45
+b 44
+b 1
+b 3
+b 7
+b 26
+b 28
+b 30
+b 32
+b 32
+b 1
+b 195
+b 205
+b 188
+b 196
+b 198
+b 196
+b 1
+b 267
+b 21
+b 120
+b 122
+b 117
+b 1
+b 166
+b 165
+b 1
+b 22
+b 71
+b 21
+b 1
+b 66
+b 1
+b 203
+b 13
+b 107
+b 129
+b 252
+b 266
+b 268
+b 76
+b 78
+b 80
+b 78
+b 1
+b 92
+b 94
+b 96
+b 98
+b 96
+b 1
+b 110
+b 133
+b 180
+b 132
+b 1
+b 175
+b 1
+b 74
+b 82
+b 81
+b 1
+b 45
+b 44
+b 1
+b 103
+b 105
+b 119
+b 100
+b 1
+b 116
+b 1
+b 49
+b 59
+b 48
+b 1
+b 42
+b 44
+b 46
+b 48
+b 42
+b 1
+b 60
+b 62
+b 65
+b 25
+b 27
+b 29
+b 31
+b 228
+b 242
+b 121
+b 123
+b 6
+b 21
+b 112
+b 114
+b 112
+b 1
+b 87
+b 89
+b 84
+b 1
+b 85
+b 82
+b 1
+b 295
+b 294
+b 1
+b 3
+b 5
+b 71
+b 85
+b 269
+b 2
+b 10
+b 42
+b 55
+b 13
+b 21
+b 51
+b 50
+b 1
+b 177
+b 179
+b 181
+b 164
+b 38
+b 40
+b 78
+b 99
+b 101
+b 77
+b 1
+b 94
+b 1
+b 15
+b 17
+b 41
+b 171
+b 170
+b 1
+b 21
+b 20
+b 1
+b 32
+b 30
+b 1
+b 5
+b 18
+b 20
+b 18
+b 75
+b 77
+b 79
+b 25
+b 45
+b 47
+b 24
+b 1
+b 3
+b 22
+b 18
+b 39
+b 16
+b 1
+b 37
+b 1
+b 223
+b 222
+b 1
+b 13
+b 15
+b 29
+b 23
+b 22
+b 1
+b 5
+b 211
+b 213
+b 236
+b 211
+b 1
+b 3
+b 5
+b 7
+b 5
+b 1
+b 221
+b 8
+b 0
+b 10
+b 78
+b 93
+b 95
+b 82
+b 174
+b 81
+b 83
+b 85
+b 308
+b 323
+b 328
+b 330
+b 332
+b 334
+b 372
+b 191
+b 54
+b 0
+b 2
+b 12
+b 55
+b 75
+b 77
+b 36
+b 6
+b 213
+b 21
+b 23
+b 88
+b 31
+b 30
+b 1
+b 310
+b 308
+b 1
+b 20
+b 22
+b 22
+b 1
+b 381
+b 197
+b 2
+b 4
+b 6
+b 345
+b 397
+b 22
+b 30
+b 32
+b 30
+b 1
+b 86
+b 7
+b 171
+b 171
+b 1
+b 24
+b 21
+b 1
+b 3
+b 3
+b 8
+b 5
+b 13
+b 11
+b 1
+b 15
+b 17
+b 19
+b 21
+b 15
+b 1
+b 60
+b 59
+b 1
+b 6
+b 13
+b 131
+b 72
+b 133
+b 71
+b 1
+b 167
+b 169
+b 164
+b 1
+b 0
+b 13
+b 11
+b 33
+b 32
+b 1
+b 48
+b 23
+b 35
+b 49
+b 34
+b 1
+b 45
+b 1
+b 60
+b 59
+b 1
+b 15
+b 17
+b 74
+b 192
+b 194
+b 192
+b 1
+b 3
+b 2
+b 1
+b 11
+b 13
+b 205
+b 207
+b 202
+b 1
+b 34
+b 33
+b 1
+b 200
+b 199
+b 1
+b 44
+b 20
+b 467
+b 466
+b 1
+b 0
+b 2
+b 66
+b 68
+b 66
+b 1
+b 11
+b 193
+b 5
+b 5
+b 1
+b 73
+b 81
+b 36
+b 38
+b 199
+b 198
+b 1
+b 211
+b 4
+b 6
+b 4
+b 1
+b 25
+b 22
+b 1
+b 33
+b 35
+b 57
+b 86
+b 199
+b 198
+b 1
+b 21
+b 23
+b 24
+b 26
+b 28
+b 38
+b 62
+b 3
+b 120
+b 122
+b 228
+b 108
+b 110
+b 417
+b 487
+b 506
+b 486
+b 1
+b 502
+b 1
+b 128
+b 152
+b 12
+b 14
+b 30
+b 22
+b 57
+b 95
+b 94
+b 1
+b 206
+b 208
+b 12
+b 54
+b 179
+b 2
+b 3
+b 5
+b 21
+b 5
+b 1
+b 17
+b 1
+b 13
+b 15
+b 15
+b 1
+b 26
+b 25
+b 1
+b 183
+b 195
+b 19
+b 21
+b 23
+b 63
+b 65
+b 109
+b 63
+b 1
+b 156
+b 168
+b 324
+b 326
+b 328
+b 330
+b 65
+b 83
+b 81
+b 1
+b 199
+b 29
+b 45
+b 78
+b 80
+b 78
+b 1
+b 229
+b 3
+b 2
+b 1
+b 140
+b 142
+b 16
+b 64
+b 66
+b 68
+b 80
+b 82
+b 31
+b 301
+b 195
+b 250
+b 252
+b 254
+b 215
+b 235
+b 213
+b 1
+b 232
+b 1
+b 0
+b 36
+b 55
+b 33
+b 1
+b 52
+b 1
+b 27
+b 29
+b 15
+b 188
+b 190
+b 192
+b 194
+b 185
+b 1
+b 192
+b 1
+b 78
+b 172
+b 58
+b 60
+b 62
+b 64
+b 58
+b 1
+b 0
+b 2
+b 22
+b 0
+b 1
+b 19
+b 1
+b 1
+b 9
+b 9
+b 1
+b 15
+b 204
+b 269
+b 103
+b 105
+b 107
+b 109
+b 32
+b 27
+b 62
+b 26
+b 1
+b 57
+b 1
+b 256
+b 258
+b 260
+b 262
+b 256
+b 1
+b 14
+b 23
+b 40
+b 42
+b 44
+b 46
+b 253
+b 12
+b 14
+b 12
+b 1
+b 14
+b 24
+b 114
+b 113
+b 1
+b 56
+b 58
+b 34
+b 52
+b 164
+b 166
+b 168
+b 108
+b 177
+b 184
+b 107
+b 1
+b 232
+b 234
+b 236
+b 7
+b 9
+b 11
+b 13
+b 127
+b 129
+b 139
+b 137
+b 1
+b 104
+b 16
+b 17
+b 19
+b 27
+b 25
+b 1
+b 56
+b 56
+b 1
+b 73
+b 70
+b 1
+b 9
+b 6
+b 1
+b 129
+b 145
+b 144
+b 1
+b 51
+b 53
+b 55
+b 57
+b 53
+b 1
+b 11
+b 13
+b 15
+b 61
+b 70
+b 79
+b 69
+b 1
+b 122
+b 124
+b 134
+b 122
+b 1
+b 66
+b 23
+b 260
+b 268
+b 270
+b 157
+b 159
+b 171
+b 192
+b 198
+b 200
+b 248
+b 258
+b 2
+b 22
+b 40
+b 54
+b 39
+b 1
+b 25
+b 36
+b 45
+b 35
+b 1
+b 4
+b 69
+b 145
+b 400
+b 121
+b 60
+b 70
+b 59
+b 1
+b 17
+b 328
+b 327
+b 1
+b 25
+b 33
+b 35
+b 49
+b 2
+b 4
+b 6
+b 55
+b 57
+b 59
+b 109
+b 111
+b 113
+b 115
+b 528
+b 530
+b 0
+b 2
+b 0
+b 1
+b 79
+b 79
+b 1
+b 44
+b 44
+b 1
+b 7
+b 29
+b 54
+b 52
+b 1
+b 2
+b 39
+b 41
+b 53
+b 51
+b 1
+b 173
+b 3
+b 18
+b 20
+b 22
+b 24
+b 22
+b 1
+b 10
+b 60
+b 40
+b 124
+b 126
+b 124
+b 1
+b 21
+b 23
+b 25
+b 27
+b 27
+b 1
+b 44
+b 79
+b 123
+b 125
+b 8
+b 58
+b 60
+b 62
+b 64
+b 143
+b 143
+b 1
+b 50
+b 121
+b 120
+b 1
+b 30
+b 50
+b 78
+b 60
+b 62
+b 119
+b 121
+b 123
+b 125
+b 121
+b 1
+b 158
+b 68
+b 3
+b 5
+b 7
+b 9
+b 7
+b 1
+b 31
+b 85
+b 95
+b 11
+b 11
+b 10
+b 1
+b 7
+b 1
+b 292
+b 294
+b 292
+b 1
+b 144
+b 16
+b 26
+b 72
+b 25
+b 1
+b 67
+b 1
+b 12
+b 14
+b 16
+b 18
+b 12
+b 1
+b 140
+b 140
+b 1
+b 90
+b 28
+b 10
+b 0
+b 2
+b 34
+b 60
+b 88
+b 98
+b 63
+b 65
+b 67
+b 69
+b 63
+b 1
+b 120
+b 146
+b 148
+b 146
+b 1
+b 23
+b 25
+b 27
+b 188
+b 190
+b 192
+b 203
+b 185
+b 1
+b 86
+b 88
+b 1
+b 160
+b 178
+b 43
+b 136
+b 138
+b 136
+b 1
+b 104
+b 114
+b 116
+b 103
+b 1
+b 189
+b 5
+b 19
+b 4
+b 1
+b 12
+b 25
+b 72
+b 146
+b 148
+b 176
+b 43
+b 27
+b 22
+b 141
+b 459
+b 461
+b 16
+b 226
+b 225
+b 1
+b 197
+b 199
+b 199
+b 1
+b 150
+b 5
+b 2
+b 1
+b 41
+b 43
+b 52
+b 128
+b 127
+b 1
+b 135
+b 1
+b 748
+b 750
+b 752
+b 754
+b 89
+b 99
+b 101
+b 88
+b 1
+b 41
+b 11
+b 148
+b 150
+b 152
+b 145
+b 1
+b 23
+b 25
+b 27
+b 29
+b 25
+b 1
+b 23
+b 9
+b 27
+b 37
+b 54
+b 26
+b 4
+b 16
+b 25
+b 145
+b 155
+b 143
+b 1
+b 152
+b 1
+b 143
+b 179
+b 0
+b 20
+b 29
+b 6
+b 5
+b 1
+b 5
+b 7
+b 185
+b 247
+b 184
+b 1
+b 243
+b 1
+b 3
+b 28
+b 46
+b 27
+b 1
+b 41
+b 1
+b 125
+b 138
+b 6
+b 21
+b 20
+b 1
+b 32
+b 48
+b 50
+b 197
+b 217
+b 219
+b 196
+b 1
+b 4
+b 20
+b 0
+b 136
+b 146
+b 146
+b 1
+b 60
+b 178
+b 34
+b 36
+b 38
+b 40
+b 36
+b 1
+b 32
+b 4
+b 153
+b 174
+b 182
+b 150
+b 1
+b 179
+b 1
+b 174
+b 198
+b 199
+b 31
+b 33
+b 97
+b 99
+b 94
+b 1
+b 70
+b 68
+b 1
+b 3
+b 21
+b 11
+b 8
+b 1
+b 20
+b 34
+b 4
+b 14
+b 3
+b 1
+b 10
+b 1
+b 228
+b 264
+b 77
+b 35
+b 32
+b 1
+b 104
+b 114
+b 116
+b 103
+b 1
+b 515
+b 168
+b 7
+b 3
+b 2
+b 1
+b 392
+b 390
+b 1
+b 113
+b 333
+b 335
+b 92
+b 324
+b 75
+b 73
+b 1
+b 69
+b 71
+b 73
+b 75
+b 73
+b 1
+b 41
+b 4
+b 62
+b 26
+b 26
+b 1
+b 30
+b 52
+b 96
+b 51
+b 1
+b 91
+b 1
+b 251
+b 15
+b 14
+b 1
+b 326
+b 18
+b 20
+b 22
+b 24
+b 10
+b 7
+b 1
+b 22
+b 21
+b 1
+b 55
+b 12
+b 25
+b 9
+b 1
+b 81
+b 100
+b 102
+b 100
+b 1
+b 9
+b 11
+b 13
+b 15
+b 11
+b 1
+b 167
+b 181
+b 164
+b 166
+b 4
+b 59
+b 71
+b 24
+b 26
+b 28
+b 30
+b 26
+b 1
+b 65
+b 64
+b 1
+b 84
+b 105
+b 5
+b 15
+b 17
+b 3
+b 1
+b 99
+b 98
+b 1
+b 17
+b 19
+b 29
+b 39
+b 167
+b 176
+b 164
+b 1
+b 173
+b 1
+b 104
+b 170
+b 102
+b 1
+b 54
+b 52
+b 1
+b 74
+b 76
+b 20
+b 125
+b 144
+b 146
+b 4
+b 0
+b 17
+b 37
+b 45
+b 55
+b 36
+b 1
+b 41
+b 1
+b 76
+b 90
+b 89
+b 1
+b 1
+b 255
+b 277
+b 14
+b 16
+b 18
+b 16
+b 1
+b 1109
+b 1372
+b 78
+b 3
+b 5
+b 110
+b 112
+b 114
+b 112
+b 1
+b 52
+b 54
+b 67
+b 52
+b 1
+b 37
+b 6
+b 79
+b 4
+b 2
+b 1
+b 1
+b 0
+b 1
+b 200
+b 38
+b 38
+b 1
+b 140
+b 171
+b 140
+b 1
+b 0
+b 4
+b 6
+b 8
+b 28
+b 84
+b 98
+b 63
+b 36
+b 10
+b 48
+b 141
+b 141
+b 1
+b 217
+b 217
+b 1
+b 482
+b 484
+b 4
+b 17
+b 43
+b 18
+b 20
+b 22
+b 20
+b 1
+b 18
+b 20
+b 22
+b 24
+b 20
+b 1
+b 21
+b 70
+b 78
+b 20
+b 1
+b 19
+b 23
+b 20
+b 1
+b 155
+b 216
+b 305
+b 46
+b 48
+b 98
+b 50
+b 96
+b 423
+b 47
+b 49
+b 82
+b 57
+b 59
+b 61
+b 59
+b 1
+b 167
+b 177
+b 1203
+b 1301
+b 1300
+b 1
+b 34
+b 33
+b 1
+b 168
+b 199
+b 53
+b 2
+b 16
+b 24
+b 51
+b 53
+b 55
+b 51
+b 1
+b 42
+b 62
+b 131
+b 128
+b 1
+b 205
+b 81
+b 78
+b 1
+b 191
+b 201
+b 220
+b 219
+b 1
+b 11
+b 13
+b 15
+b 17
+b 17
+b 1
+b 19
+b 222
+b 5
+b 188
+b 190
+b 192
+b 194
+b 192
+b 1
+b 28
+b 17
+b 27
+b 41
+b 24
+b 1
+b 38
+b 1
+b 199
+b 207
+b 198
+b 1
+b 12
+b 190
+b 200
+b 191
+b 20
+b 1
+b 151
+b 4
+b 122
+b 119
+b 1
+b 41
+b 38
+b 1
+b 156
+b 164
+b 22
+b 49
+b 586
+b 586
+b 1
+b 64
+b 32
+b 1
+b 11
+b 0
+b 1
+b 7
+b 1
+b 618
+b 713
+b 38
+b 40
+b 42
+b 44
+b 40
+b 1
+b 121
+b 127
+b 120
+b 1
+b 38
+b 84
+b 152
+b 35
+b 1
+b 149
+b 1
+b 30
+b 15
+b 17
+b 140
+b 142
+b 16
+b 20
+b 22
+b 24
+b 26
+b 20
+b 1
+b 49
+b 59
+b 40
+b 43
+b 173
+b 59
+b 56
+b 1
+b 338
+b 382
+b 382
+b 1
+b 104
+b 95
+b 97
+b 95
+b 1
+b 90
+b 92
+b 107
+b 106
+b 1
+b 98
+b 113
+b 873
+b 894
+b 320
+b 328
+b 227
+b 227
+b 1
+b 47
+b 44
+b 1
+b 465
+b 467
+b 469
+b 471
+b 37
+b 39
+b 41
+b 43
+b 39
+b 1
+b 140
+b 138
+b 1
+b 86
+b 88
+b 83
+b 1
+b 37
+b 53
+b 52
+b 1
+b 54
+b 56
+b 58
+b 60
+b 56
+b 1
+b 88
+b 90
+b 100
+b 99
+b 1
+b 35
+b 45
+b 290
+b 76
+b 165
+b 167
+b 177
+b 16
+b 28
+b 40
+b 14
+b 1
+b 143
+b 143
+b 1
+b 9
+b 8
+b 1
+b 65
+b 154
+b 39
+b 13
+b 228
+b 230
+b 251
+b 250
+b 1
+b 73
+b 99
+b 3
+b 13
+b 4
+b 3
+b 97
+b 2
+b 77
+b 76
+b 1
+b 21
+b 31
+b 1
+b 14
+b 60
+b 59
+b 1
+b 200
+b 210
+b 212
+b 199
+b 1
+b 43
+b 45
+b 47
+b 49
+b 47
+b 1
+b 44
+b 3
+b 26
+b 25
+b 1
+b 5
+b 45
+b 3
+b 1
+b 158
+b 156
+b 1
+b 111
+b 101
+b 100
+b 1
+b 8
+b 10
+b 12
+b 14
+b 12
+b 1
+b 5
+b 4
+b 14
+b 70
+b 191
+b 190
+b 1
+b 197
+b 211
+b 223
+b 196
+b 1
+b 249
+b 5
+b 351
+b 380
+b 394
+b 379
+b 1
+b 389
+b 1
+b 128
+b 130
+b 132
+b 134
+b 128
+b 1
+b 13
+b 130
+b 225
+b 15
+b 27
+b 29
+b 13
+b 1
+b 27
+b 1
+b 80
+b 103
+b 105
+b 103
+b 1
+b 82
+b 56
+b 0
+b 253
+b 263
+b 6
+b 36
+b 3
+b 1
+b 34
+b 1
+b 8
+b 10
+b 10
+b 1
+b 7
+b 6
+b 1
+b 233
+b 232
+b 1
+b 42
+b 39
+b 1
+b 52
+b 54
+b 96
+b 155
+b 43
+b 45
+b 56
+b 66
+b 55
+b 1
+b 62
+b 1
+b 45
+b 6
+b 8
+b 10
+b 3
+b 1
+b 95
+b 97
+b 92
+b 1
+b 95
+b 1
+b 195
+b 3
+b 216
+b 3
+b 35
+b 101
+b 33
+b 1
+b 26
+b 24
+b 1
+b 274
+b 276
+b 271
+b 1
+b 96
+b 95
+b 1
+b 32
+b 34
+b 0
+b 2
+b 65
+b 111
+b 118
+b 110
+b 1
+b 34
+b 77
+b 1
+b 0
+b 1
+b 16
+b 64
+b 328
+b 359
+b 361
+b 326
+b 1
+b 359
+b 1
+b 50
+b 52
+b 54
+b 56
+b 96
+b 95
+b 1
+b 11
+b 0
+b 2
+b 82
+b 79
+b 1
+b 22
+b 22
+b 1
+b 32
+b 32
+b 1
+b 17
+b 283
+b 297
+b 299
+b 66
+b 79
+b 15
+b 48
+b 47
+b 1
+b 4
+b 6
+b 28
+b 30
+b 60
+b 9
+b 27
+b 29
+b 69
+b 26
+b 1
+b 67
+b 1
+b 59
+b 19
+b 132
+b 3
+b 5
+b 3
+b 1
+b 23
+b 25
+b 27
+b 23
+b 1
+b 9
+b 1
+b 11
+b 24
+b 5
+b 231
+b 40
+b 37
+b 1
+b 59
+b 472
+b 491
+b 96
+b 106
+b 27
+b 26
+b 1
+b 15
+b 17
+b 16
+b 15
+b 1
+b 23
+b 0
+b 18
+b 20
+b 22
+b 24
+b 216
+b 218
+b 254
+b 253
+b 1
+b 23
+b 25
+b 20
+b 1
+b 171
+b 169
+b 1
+b 154
+b 156
+b 166
+b 26
+b 127
+b 167
+b 126
+b 1
+b 162
+b 1
+b 8
+b 31
+b 8
+b 1
+b 28
+b 1
+b 1215
+b 1226
+b 3
+b 5
+b 7
+b 5
+b 1
+b 56
+b 64
+b 62
+b 1
+b 172
+b 174
+b 176
+b 86
+b 145
+b 65
+b 64
+b 1
+b 70
+b 69
+b 1
+b 11
+b 26
+b 25
+b 1
+b 7
+b 6
+b 1
+b 6
+b 12
+b 11
+b 1
+b 34
+b 32
+b 1
+b 262
+b 1
+b 6
+b 14
+b 192
+b 202
+b 222
+b 221
+b 1
+b 44
+b 51
+b 284
+b 281
+b 1
+b 157
+b 154
+b 1
+b 61
+b 73
+b 75
+b 191
+b 205
+b 189
+b 1
+b 202
+b 1
+b 176
+b 178
+b 5
+b 167
+b 184
+b 167
+b 1
+b 67
+b 66
+b 1
+b 19
+b 2
+b 16
+b 26
+b 16
+b 32
+b 58
+b 57
+b 1
+b 173
+b 183
+b 171
+b 1
+b 8
+b 7
+b 1
+b 107
+b 117
+b 54
+b 53
+b 1
+b 219
+b 229
+b 231
+b 218
+b 1
+b 45
+b 65
+b 67
+b 185
+b 187
+b 185
+b 1
+b 34
+b 31
+b 33
+b 35
+b 37
+b 35
+b 1
+b 172
+b 184
+b 171
+b 1
+b 451
+b 453
+b 451
+b 1
+b 2
+b 50
+b 49
+b 1
+b 13
+b 10
+b 1
+b 4
+b 22
+b 21
+b 1
+b 78
+b 88
+b 98
+b 97
+b 1
+b 279
+b 293
+b 84
+b 116
+b 118
+b 241
+b 28
+b 30
+b 43
+b 46
+b 224
+b 237
+b 223
+b 1
+b 232
+b 1
+b 108
+b 26
+b 53
+b 220
+b 230
+b 255
+b 254
+b 1
+b 67
+b 69
+b 71
+b 67
+b 1
+b 14
+b 16
+b 26
+b 25
+b 1
+b 122
+b 124
+b 126
+b 128
+b 11
+b 58
+b 6
+b 12
+b 1
+b 76
+b 75
+b 1
+b 5
+b 7
+b 14
+b 16
+b 18
+b 20
+b 14
+b 1
+b 80
+b 82
+b 77
+b 1
+b 9
+b 7
+b 1
+b 131
+b 147
+b 7
+b 48
+b 67
+b 13
+b 35
+b 37
+b 47
+b 35
+b 1
+b 113
+b 17
+b 25
+b 229
+b 255
+b 257
+b 228
+b 1
+b 117
+b 0
+b 2
+b 91
+b 103
+b 13
+b 1
+b 0
+b 72
+b 109
+b 298
+b 3
+b 0
+b 1
+b 137
+b 155
+b 164
+b 154
+b 1
+b 889
+b 7
+b 9
+b 140
+b 156
+b 158
+b 139
+b 1
+b 11
+b 13
+b 15
+b 8
+b 1
+b 14
+b 37
+b 27
+b 26
+b 1
+b 238
+b 255
+b 58
+b 60
+b 9
+b 51
+b 61
+b 37
+b 39
+b 41
+b 43
+b 43
+b 1
+b 77
+b 85
+b 210
+b 223
+b 220
+b 1
+b 0
+b 1
+b 107
+b 34
+b 13
+b 10
+b 1
+b 123
+b 123
+b 1
+b 93
+b 95
+b 97
+b 99
+b 27
+b 4
+b 553
+b 552
+b 1
+b 20
+b 125
+b 152
+b 160
+b 34
+b 16
+b 241
+b 28
+b 30
+b 159
+b 35
+b 37
+b 31
+b 28
+b 1
+b 21
+b 21
+b 1
+b 164
+b 166
+b 168
+b 170
+b 63
+b 60
+b 1
+b 6
+b 6
+b 1
+b 16
+b 18
+b 50
+b 48
+b 1
+b 8
+b 10
+b 12
+b 14
+b 79
+b 81
+b 83
+b 81
+b 1
+b 184
+b 194
+b 93
+b 95
+b 97
+b 99
+b 62
+b 81
+b 333
+b 123
+b 97
+b 99
+b 107
+b 106
+b 2
+b 94
+b 1
+b 3
+b 5
+b 143
+b 158
+b 160
+b 158
+b 1
+b 164
+b 169
+b 105
+b 104
+b 1
+b 9
+b 25
+b 27
+b 7
+b 1
+b 264
+b 266
+b 268
+b 270
+b 264
+b 1
+b 437
+b 436
+b 1
+b 19
+b 16
+b 1
+b 267
+b 269
+b 64
+b 3
+b 19
+b 0
+b 1
+b 17
+b 1
+b 169
+b 71
+b 73
+b 71
+b 1
+b 144
+b 17
+b 35
+b 51
+b 30
+b 3
+b 49
+b 59
+b 7
+b 56
+b 58
+b 176
+b 178
+b 180
+b 96
+b 98
+b 100
+b 102
+b 179
+b 181
+b 181
+b 1
+b 17
+b 16
+b 1
+b 328
+b 79
+b 327
+b 324
+b 1
+b 0
+b 2
+b 0
+b 54
+b 9
+b 122
+b 136
+b 119
+b 1
+b 12
+b 11
+b 1
+b 46
+b 48
+b 50
+b 52
+b 48
+b 1
+b 155
+b 157
+b 159
+b 166
+b 155
+b 1
+b 551
+b 549
+b 1
+b 79
+b 123
+b 77
+b 1
+b 39
+b 49
+b 36
+b 1
+b 47
+b 1
+b 20
+b 22
+b 24
+b 22
+b 1
+b 35
+b 22
+b 43
+b 21
+b 1
+b 39
+b 1
+b 112
+b 114
+b 2
+b 3
+b 5
+b 7
+b 15
+b 131
+b 149
+b 26
+b 55
+b 52
+b 1
+b 20
+b 3
+b 45
+b 47
+b 65
+b 45
+b 1
+b 173
+b 41
+b 17
+b 19
+b 15
+b 14
+b 1
+b 67
+b 69
+b 71
+b 73
+b 67
+b 1
+b 97
+b 109
+b 96
+b 1
+b 137
+b 64
+b 146
+b 145
+b 1
+b 12
+b 2
+b 4
+b 8
+b 15
+b 14
+b 1
+b 1
+b 20
+b 22
+b 24
+b 26
+b 22
+b 1
+b 24
+b 23
+b 1
+b 15
+b 208
+b 63
+b 17
+b 117
+b 117
+b 1
+b 15
+b 15
+b 1
+b 147
+b 185
+b 31
+b 33
+b 47
+b 134
+b 144
+b 131
+b 1
+b 305
+b 307
+b 314
+b 313
+b 1
+b 12
+b 36
+b 72
+b 71
+b 1
+b 0
+b 2
+b 180
+b 0
+b 1
+b 318
+b 334
+b 80
+b 82
+b 84
+b 86
+b 80
+b 1
+b 479
+b 478
+b 1
+b 2
+b 429
+b 49
+b 48
+b 1
+b 54
+b 2
+b 4
+b 6
+b 8
+b 6
+b 1
+b 88
+b 98
+b 217
+b 219
+b 244
+b 214
+b 1
+b 241
+b 1
+b 43
+b 85
+b 87
+b 2
+b 4
+b 6
+b 4
+b 1
+b 59
+b 1
+b 20
+b 19
+b 1
+b 27
+b 29
+b 31
+b 33
+b 166
+b 173
+b 175
+b 173
+b 1
+b 154
+b 156
+b 140
+b 25
+b 24
+b 1
+b 5
+b 12
+b 69
+b 81
+b 40
+b 39
+b 1
+b 2
+b 4
+b 14
+b 16
+b 102
+b 4
+b 6
+b 27
+b 4
+b 1
+b 211
+b 17
+b 43
+b 17
+b 86
+b 106
+b 86
+b 1
+b 7
+b 33
+b 72
+b 34
+b 208
+b 229
+b 207
+b 1
+b 3
+b 297
+b 338
+b 301
+b 298
+b 1
+b 96
+b 94
+b 1
+b 317
+b 316
+b 1
+b 1
+b 27
+b 53
+b 57
+b 55
+b 57
+b 65
+b 55
+b 1
+b 4
+b 1
+b 47
+b 3
+b 5
+b 70
+b 17
+b 19
+b 20
+b 22
+b 1
+b 5
+b 56
+b 212
+b 32
+b 29
+b 1
+b 104
+b 106
+b 108
+b 110
+b 73
+b 89
+b 89
+b 1
+b 344
+b 372
+b 372
+b 380
+b 111
+b 113
+b 1
+b 351
+b 0
+b 2
+b 25
+b 157
+b 159
+b 161
+b 163
+b 169
+b 199
+b 44
+b 60
+b 178
+b 180
+b 182
+b 180
+b 1
+b 93
+b 95
+b 111
+b 110
+b 1
+b 31
+b 41
+b 43
+b 30
+b 1
+b 81
+b 81
+b 1
+b 296
+b 293
+b 1
+b 15
+b 33
+b 14
+b 1
+b 73
+b 137
+b 150
+b 7
+b 20
+b 56
+b 53
+b 1
+b 171
+b 173
+b 175
+b 177
+b 177
+b 1
+b 132
+b 134
+b 136
+b 138
+b 136
+b 1
+b 64
+b 85
+b 95
+b 94
+b 1
+b 127
+b 124
+b 1
+b 204
+b 1
+b 0
+b 1
+b 16
+b 31
+b 123
+b 125
+b 127
+b 129
+b 123
+b 1
+b 193
+b 37
+b 39
+b 130
+b 137
+b 125
+b 167
+b 166
+b 1
+b 11
+b 5
+b 173
+b 2
+b 1
+b 171
+b 1
+b 44
+b 12
+b 14
+b 147
+b 145
+b 1
+b 0
+b 2
+b 133
+b 3
+b 47
+b 9
+b 1
+b 63
+b 96
+b 61
+b 1
+b 94
+b 1
+b 2
+b 10
+b 9
+b 11
+b 13
+b 13
+b 1
+b 5
+b 20
+b 22
+b 20
+b 1
+b 12
+b 75
+b 77
+b 74
+b 76
+b 74
+b 1
+b 0
+b 374
+b 376
+b 378
+b 380
+b 152
+b 236
+b 384
+b 16
+b 18
+b 240
+b 242
+b 244
+b 246
+b 237
+b 1
+b 38
+b 54
+b 56
+b 37
+b 1
+b 20
+b 39
+b 17
+b 1
+b 98
+b 97
+b 1
+b 32
+b 170
+b 25
+b 27
+b 37
+b 36
+b 1
+b 169
+b 178
+b 102
+b 260
+b 48
+b 88
+b 367
+b 377
+b 14
+b 24
+b 23
+b 1
+b 39
+b 38
+b 1
+b 278
+b 15
+b 17
+b 15
+b 1
+b 2
+b 19
+b 1
+b 1
+b 17
+b 1
+b 550
+b 560
+b 151
+b 153
+b 155
+b 41
+b 43
+b 41
+b 1
+b 5
+b 51
+b 59
+b 7
+b 15
+b 17
+b 6
+b 1
+b 8
+b 10
+b 7
+b 196
+b 195
+b 1
+b 44
+b 66
+b 29
+b 31
+b 33
+b 29
+b 1
+b 12
+b 9
+b 1
+b 190
+b 187
+b 1
+b 5
+b 11
+b 0
+b 9
+b 1
+b 24
+b 35
+b 49
+b 50
+b 52
+b 54
+b 62
+b 64
+b 66
+b 68
+b 62
+b 1
+b 107
+b 117
+b 104
+b 1
+b 245
+b 244
+b 1
+b 28
+b 11
+b 64
+b 25
+b 190
+b 278
+b 280
+b 189
+b 1
+b 40
+b 42
+b 37
+b 1
+b 161
+b 3
+b 96
+b 98
+b 100
+b 102
+b 65
+b 65
+b 1
+b 2
+b 73
+b 75
+b 81
+b 81
+b 1
+b 64
+b 21
+b 64
+b 71
+b 153
+b 62
+b 1
+b 150
+b 1
+b 19
+b 119
+b 121
+b 123
+b 60
+b 90
+b 33
+b 35
+b 20
+b 3
+b 43
+b 154
+b 156
+b 8
+b 7
+b 1
+b 12
+b 20
+b 10
+b 1
+b 8
+b 7
+b 1
+b 55
+b 84
+b 4
+b 188
+b 310
+b 312
+b 314
+b 316
+b 310
+b 1
+b 110
+b 131
+b 6
+b 13
+b 41
+b 43
+b 11
+b 306
+b 326
+b 439
+b 436
+b 1
+b 19
+b 18
+b 1
+b 21
+b 95
+b 97
+b 95
+b 1
+b 9
+b 7
+b 35
+b 119
+b 68
+b 70
+b 119
+b 93
+b 127
+b 136
+b 171
+b 170
+b 1
+b 1
+b 9
+b 11
+b 13
+b 9
+b 1
+b 29
+b 31
+b 31
+b 30
+b 1
+b 25
+b 22
+b 1
+b 30
+b 27
+b 1
+b 23
+b 656
+b 658
+b 57
+b 56
+b 1
+b 129
+b 163
+b 207
+b 126
+b 1
+b 204
+b 1
+b 37
+b 39
+b 41
+b 59
+b 55
+b 71
+b 36
+b 38
+b 40
+b 168
+b 30
+b 27
+b 1
+b 69
+b 66
+b 1
+b 189
+b 191
+b 230
+b 189
+b 1
+b 211
+b 276
+b 331
+b 209
+b 1
+b 84
+b 2
+b 6
+b 44
+b 5
+b 1
+b 40
+b 1
+b 20
+b 155
+b 195
+b 197
+b 154
+b 1
+b 31
+b 33
+b 49
+b 31
+b 1
+b 147
+b 42
+b 52
+b 105
+b 102
+b 1
+b 178
+b 176
+b 1
+b 194
+b 196
+b 194
+b 1
+b 194
+b 196
+b 198
+b 194
+b 1
+b 16
+b 317
+b 39
+b 64
+b 38
+b 1
+b 59
+b 1
+b 21
+b 39
+b 56
+b 118
+b 168
+b 115
+b 1
+b 165
+b 1
+b 37
+b 39
+b 49
+b 37
+b 1
+b 40
+b 42
+b 44
+b 46
+b 44
+b 1
+b 207
+b 209
+b 285
+b 207
+b 1
+b 47
+b 4
+b 41
+b 40
+b 1
+b 5
+b 15
+b 3
+b 1
+b 13
+b 20
+b 31
+b 19
+b 1
+b 27
+b 1
+b 48
+b 48
+b 1
+b 72
+b 69
+b 1
+b 51
+b 53
+b 55
+b 57
+b 64
+b 66
+b 68
+b 76
+b 150
+b 160
+b 162
+b 149
+b 1
+b 74
+b 3
+b 3
+b 1
+b 76
+b 105
+b 192
+b 204
+b 240
+b 189
+b 1
+b 85
+b 87
+b 85
+b 1
+b 3
+b 32
+b 54
+b 56
+b 54
+b 1
+b 107
+b 139
+b 106
+b 1
+b 27
+b 434
+b 436
+b 438
+b 57
+b 59
+b 70
+b 188
+b 198
+b 185
+b 1
+b 426
+b 40
+b 39
+b 1
+b 31
+b 103
+b 31
+b 30
+b 1
+b 31
+b 194
+b 230
+b 229
+b 1
+b 105
+b 103
+b 1
+b 76
+b 85
+b 73
+b 1
+b 26
+b 36
+b 23
+b 1
+b 34
+b 1
+b 203
+b 629
+b 50
+b 17
+b 1
+b 148
+b 147
+b 1
+b 14
+b 16
+b 16
+b 1
+b 218
+b 220
+b 222
+b 224
+b 4
+b 6
+b 8
+b 21
+b 165
+b 5
+b 35
+b 4
+b 1
+b 79
+b 81
+b 81
+b 1
+b 17
+b 16
+b 1
+b 95
+b 97
+b 99
+b 92
+b 1
+b 16
+b 16
+b 18
+b 16
+b 1
+b 239
+b 238
+b 1
+b 63
+b 60
+b 1
+b 1
+b 81
+b 2
+b 4
+b 27
+b 89
+b 21
+b 55
+b 90
+b 92
+b 108
+b 105
+b 1
+b 1211
+b 1226
+b 102
+b 110
+b 112
+b 100
+b 1
+b 78
+b 88
+b 80
+b 82
+b 94
+b 8
+b 25
+b 32
+b 107
+b 33
+b 13
+b 20
+b 34
+b 95
+b 139
+b 145
+b 57
+b 69
+b 138
+b 137
+b 34
+b 36
+b 38
+b 32
+b 42
+b 506
+b 524
+b 11
+b 75
+b 333
+b 61
+b 63
+b 5
+b 1
+b 41
+b 30
+b 32
+b 34
+b 36
+b 34
+b 1
+b 19
+b 21
+b 23
+b 25
+b 12
+b 14
+b 16
+b 18
+b 12
+b 1
+b 97
+b 107
+b 4
+b 107
+b 106
+b 1
+b 448
+b 466
+b 548
+b 547
+b 1
+b 56
+b 58
+b 5
+b 221
+b 218
+b 1
+b 70
+b 69
+b 1
+b 36
+b 50
+b 52
+b 65
+b 160
+b 158
+b 5
+b 42
+b 4
+b 1
+b 30
+b 32
+b 9
+b 175
+b 177
+b 189
+b 36
+b 57
+b 23
+b 57
+b 49
+b 28
+b 23
+b 32
+b 42
+b 461
+b 475
+b 12
+b 28
+b 11
+b 1
+b 68
+b 70
+b 68
+b 1
+b 34
+b 243
+b 245
+b 247
+b 245
+b 1
+b 198
+b 200
+b 202
+b 204
+b 198
+b 1
+b 200
+b 210
+b 197
+b 1
+b 47
+b 44
+b 1
+b 61
+b 69
+b 68
+b 1
+b 5
+b 2
+b 3
+b 1089
+b 1091
+b 1089
+b 1
+b 4
+b 348
+b 364
+b 346
+b 1
+b 343
+b 345
+b 345
+b 1
+b 21
+b 20
+b 1
+b 38
+b 40
+b 42
+b 44
+b 42
+b 1
+b 136
+b 154
+b 164
+b 163
+b 1
+b 103
+b 113
+b 15
+b 14
+b 1
+b 7
+b 14
+b 24
+b 4
+b 1
+b 21
+b 1
+b 33
+b 33
+b 1
+b 49
+b 49
+b 1
+b 11
+b 13
+b 15
+b 8
+b 1
+b 15
+b 28
+b 36
+b 55
+b 52
+b 1
+b 24
+b 23
+b 1
+b 35
+b 45
+b 23
+b 25
+b 38
+b 0
+b 8
+b 10
+b 12
+b 8
+b 1
+b 52
+b 61
+b 68
+b 49
+b 1
+b 65
+b 1
+b 184
+b 186
+b 236
+b 184
+b 1
+b 134
+b 178
+b 180
+b 132
+b 1
+b 312
+b 312
+b 1
+b 63
+b 76
+b 3
+b 318
+b 317
+b 1
+b 6
+b 116
+b 152
+b 113
+b 1
+b 66
+b 13
+b 15
+b 13
+b 1
+b 49
+b 78
+b 202
+b 204
+b 206
+b 4
+b 29
+b 28
+b 1
+b 25
+b 27
+b 21
+b 1
+b 11
+b 308
+b 310
+b 72
+b 69
+b 1
+b 58
+b 56
+b 43
+b 16
+b 93
+b 147
+b 179
+b 3
+b 128
+b 130
+b 132
+b 14
+b 16
+b 11
+b 10
+b 1
+b 121
+b 5
+b 7
+b 5
+b 1
+b 79
+b 81
+b 83
+b 85
+b 58
+b 56
+b 1
+b 63
+b 38
+b 37
+b 1
+b 59
+b 2
+b 89
+b 99
+b 429
+b 426
+b 1
+b 3
+b 0
+b 1
+b 4
+b 2
+b 234
+b 244
+b 250
+b 242
+b 1
+b 165
+b 64
+b 62
+b 1
+b 47
+b 71
+b 167
+b 70
+b 1
+b 8
+b 34
+b 327
+b 157
+b 177
+b 67
+b 75
+b 40
+b 39
+b 1
+b 51
+b 53
+b 53
+b 1
+b 9
+b 18
+b 63
+b 85
+b 61
+b 1
+b 82
+b 1
+b 43
+b 45
+b 53
+b 52
+b 1
+b 50
+b 31
+b 33
+b 138
+b 135
+b 1
+b 29
+b 6
+b 5
+b 1
+b 152
+b 152
+b 1
+b 40
+b 39
+b 1
+b 41
+b 58
+b 51
+b 87
+b 99
+b 15
+b 29
+b 55
+b 57
+b 21
+b 225
+b 222
+b 1
+b 24
+b 34
+b 21
+b 1
+b 32
+b 21
+b 7
+b 100
+b 93
+b 4
+b 154
+b 13
+b 107
+b 115
+b 192
+b 114
+b 1
+b 188
+b 1
+b 86
+b 100
+b 195
+b 197
+b 197
+b 1
+b 41
+b 40
+b 1
+b 52
+b 16
+b 77
+b 15
+b 8
+b 10
+b 8
+b 1
+b 5
+b 12
+b 14
+b 47
+b 44
+b 1
+b 37
+b 39
+b 41
+b 43
+b 37
+b 1
+b 4
+b 6
+b 8
+b 155
+b 157
+b 155
+b 1
+b 108
+b 481
+b 483
+b 511
+b 319
+b 316
+b 1
+b 76
+b 0
+b 2
+b 2
+b 1
+b 64
+b 66
+b 68
+b 70
+b 68
+b 1
+b 82
+b 64
+b 66
+b 64
+b 1
+b 174
+b 187
+b 187
+b 1
+b 222
+b 6
+b 80
+b 288
+b 11
+b 10
+b 1
+b 115
+b 117
+b 119
+b 121
+b 119
+b 1
+b 187
+b 189
+b 191
+b 193
+b 101
+b 103
+b 10
+b 9
+b 1
+b 3
+b 5
+b 15
+b 14
+b 1
+b 231
+b 241
+b 214
+b 224
+b 226
+b 211
+b 1
+b 224
+b 1
+b 191
+b 211
+b 213
+b 189
+b 1
+b 211
+b 1
+b 71
+b 133
+b 0
+b 212
+b 2
+b 38
+b 32
+b 31
+b 1
+b 68
+b 116
+b 123
+b 114
+b 1
+b 121
+b 1
+b 195
+b 197
+b 205
+b 204
+b 1
+b 48
+b 278
+b 2
+b 4
+b 6
+b 8
+b 4
+b 1
+b 37
+b 35
+b 1
+b 46
+b 48
+b 49
+b 0
+b 2
+b 1
+b 19
+b 43
+b 8
+b 10
+b 8
+b 1
+b 176
+b 67
+b 69
+b 82
+b 16
+b 68
+b 16
+b 1
+b 36
+b 1
+b 266
+b 265
+b 1
+b 46
+b 22
+b 19
+b 1
+b 31
+b 33
+b 28
+b 1
+b 130
+b 132
+b 134
+b 136
+b 854
+b 895
+b 897
+b 64
+b 14
+b 16
+b 14
+b 1
+b 41
+b 43
+b 41
+b 1
+b 45
+b 1
+b 11
+b 13
+b 11
+b 1
+b 32
+b 3
+b 3
+b 1
+b 64
+b 86
+b 63
+b 1
+b 1
+b 1
+b 1
+b 125
+b 122
+b 1
+b 109
+b 10
+b 8
+b 1
+b 111
+b 3
+b 230
+b 240
+b 59
+b 5
+b 7
+b 266
+b 268
+b 270
+b 268
+b 1
+b 0
+b 139
+b 141
+b 21
+b 20
+b 1
+b 8
+b 10
+b 32
+b 8
+b 1
+b 103
+b 118
+b 232
+b 11
+b 11
+b 7
+b 24
+b 324
+b 11
+b 120
+b 136
+b 157
+b 119
+b 1
+b 132
+b 1
+b 365
+b 367
+b 367
+b 1
+b 129
+b 127
+b 1
+b 101
+b 117
+b 27
+b 37
+b 20
+b 33
+b 14
+b 26
+b 132
+b 150
+b 151
+b 153
+b 155
+b 153
+b 1
+b 1
+b 10
+b 12
+b 14
+b 14
+b 1
+b 674
+b 683
+b 685
+b 286
+b 146
+b 30
+b 13
+b 245
+b 244
+b 1
+b 44
+b 46
+b 46
+b 1
+b 49
+b 61
+b 63
+b 61
+b 1
+b 71
+b 2
+b 4
+b 2
+b 1
+b 29
+b 31
+b 1
+b 19
+b 5
+b 5
+b 1
+b 8
+b 7
+b 1
+b 172
+b 229
+b 16
+b 15
+b 1
+b 148
+b 150
+b 6
+b 5
+b 1
+b 260
+b 262
+b 284
+b 260
+b 1
+b 8
+b 10
+b 20
+b 18
+b 1
+b 39
+b 69
+b 71
+b 69
+b 1
+b 70
+b 67
+b 1
+b 6
+b 8
+b 3
+b 1
+b 278
+b 284
+b 276
+b 1
+b 66
+b 65
+b 1
+b 131
+b 133
+b 135
+b 137
+b 135
+b 1
+b 104
+b 4
+b 3
+b 1
+b 19
+b 25
+b 35
+b 149
+b 24
+b 1
+b 31
+b 1
+b 772
+b 774
+b 776
+b 778
+b 64
+b 66
+b 68
+b 70
+b 6
+b 26
+b 2
+b 4
+b 6
+b 13
+b 77
+b 76
+b 1
+b 64
+b 61
+b 1
+b 1
+b 95
+b 103
+b 1
+b 360
+b 357
+b 1
+b 20
+b 19
+b 1
+b 177
+b 175
+b 1
+b 137
+b 258
+b 260
+b 262
+b 170
+b 167
+b 1
+b 101
+b 98
+b 1
+b 1090
+b 136
+b 138
+b 146
+b 136
+b 1
+b 3
+b 5
+b 0
+b 1
+b 47
+b 60
+b 84
+b 132
+b 134
+b 165
+b 129
+b 1
+b 162
+b 1
+b 36
+b 38
+b 40
+b 42
+b 42
+b 1
+b 90
+b 23
+b 4
+b 3
+b 298
+b 311
+b 313
+b 297
+b 1
+b 35
+b 52
+b 56
+b 38
+b 4
+b 2
+b 4
+b 6
+b 8
+b 58
+b 60
+b 62
+b 64
+b 58
+b 1
+b 199
+b 201
+b 627
+b 626
+b 1
+b 90
+b 99
+b 11
+b 139
+b 164
+b 463
+b 33
+b 0
+b 2
+b 15
+b 17
+b 15
+b 1
+b 32
+b 689
+b 10
+b 43
+b 45
+b 64
+b 63
+b 1
+b 24
+b 6
+b 9
+b 164
+b 8
+b 1
+b 5
+b 97
+b 99
+b 107
+b 97
+b 1
+b 23
+b 14
+b 67
+b 69
+b 71
+b 14
+b 3
+b 15
+b 25
+b 15
+b 23
+b 1
+b 0
+b 1
+b 167
+b 19
+b 27
+b 18
+b 1
+b 45
+b 47
+b 49
+b 51
+b 53
+b 85
+b 120
+b 138
+b 22
+b 74
+b 114
+b 116
+b 240
+b 52
+b 66
+b 68
+b 81
+b 65
+b 1
+b 154
+b 152
+b 1
+b 2
+b 4
+b 22
+b 2
+b 1
+b 122
+b 117
+b 130
+b 116
+b 1
+b 126
+b 1
+b 23
+b 34
+b 36
+b 34
+b 1
+b 20
+b 19
+b 1
+b 1
+b 11
+b 13
+b 25
+b 48
+b 24
+b 1
+b 44
+b 1
+b 9
+b 11
+b 6
+b 1
+b 7
+b 6
+b 1
+b 87
+b 101
+b 86
+b 1
+b 45
+b 113
+b 16
+b 14
+b 27
+b 45
+b 27
+b 1
+b 41
+b 1
+b 164
+b 119
+b 753
+b 771
+b 773
+b 353
+b 67
+b 6
+b 8
+b 10
+b 3
+b 1
+b 10
+b 243
+b 242
+b 1
+b 40
+b 42
+b 16
+b 2
+b 183
+b 191
+b 17
+b 19
+b 14
+b 1
+b 14
+b 11
+b 1
+b 253
+b 283
+b 285
+b 251
+b 1
+b 58
+b 60
+b 77
+b 74
+b 1
+b 6
+b 49
+b 22
+b 2
+b 35
+b 43
+b 42
+b 1
+b 0
+b 15
+b 65
+b 72
+b 76
+b 6
+b 8
+b 10
+b 1
+b 43
+b 1
+b 9
+b 41
+b 5
+b 4
+b 1
+b 17
+b 98
+b 6
+b 5
+b 1
+b 76
+b 78
+b 80
+b 90
+b 78
+b 1
+b 45
+b 44
+b 1
+b 31
+b 28
+b 1
+b 0
+b 2
+b 241
+b 248
+b 270
+b 238
+b 1
+b 144
+b 162
+b 142
+b 1
+b 301
+b 299
+b 1
+b 64
+b 148
+b 803
+b 821
+b 12
+b 9
+b 8
+b 1
+b 1
+b 39
+b 5
+b 4
+b 1
+b 7
+b 5
+b 1
+b 206
+b 1
+b 15
+b 81
+b 120
+b 78
+b 1
+b 124
+b 48
+b 12
+b 14
+b 12
+b 1
+b 1
+b 84
+b 160
+b 29
+b 31
+b 29
+b 1
+b 0
+b 2
+b 354
+b 356
+b 119
+b 118
+b 1
+b 74
+b 76
+b 78
+b 78
+b 1
+b 58
+b 60
+b 62
+b 58
+b 1
+b 47
+b 61
+b 130
+b 45
+b 1
+b 127
+b 1
+b 32
+b 29
+b 1
+b 52
+b 51
+b 1
+b 3
+b 121
+b 129
+b 53
+b 77
+b 76
+b 1
+b 50
+b 52
+b 59
+b 58
+b 1
+b 17
+b 14
+b 1
+b 35
+b 35
+b 1
+b 84
+b 38
+b 43
+b 45
+b 43
+b 1
+b 29
+b 3
+b 0
+b 1
+b 0
+b 24
+b 437
+b 553
+b 434
+b 1
+b 13
+b 12
+b 1
+b 19
+b 16
+b 1
+b 13
+b 15
+b 15
+b 1
+b 144
+b 146
+b 148
+b 144
+b 1
+b 16
+b 30
+b 32
+b 13
+b 1
+b 39
+b 97
+b 95
+b 1
+b 128
+b 139
+b 141
+b 42
+b 76
+b 57
+b 211
+b 209
+b 1
+b 141
+b 138
+b 1
+b 107
+b 142
+b 103
+b 134
+b 102
+b 1
+b 130
+b 1
+b 453
+b 469
+b 450
+b 1
+b 20
+b 22
+b 24
+b 26
+b 22
+b 1
+b 246
+b 289
+b 243
+b 1
+b 313
+b 310
+b 1
+b 208
+b 14
+b 17
+b 49
+b 28
+b 25
+b 1
+b 9
+b 11
+b 6
+b 1
+b 176
+b 178
+b 189
+b 188
+b 1
+b 64
+b 66
+b 68
+b 70
+b 66
+b 1
+b 171
+b 173
+b 29
+b 95
+b 0
+b 2
+b 25
+b 207
+b 5
+b 2
+b 4
+b 6
+b 8
+b 2
+b 1
+b 129
+b 139
+b 286
+b 285
+b 1
+b 383
+b 118
+b 120
+b 118
+b 1
+b 162
+b 8
+b 10
+b 8
+b 1
+b 56
+b 58
+b 9
+b 267
+b 269
+b 271
+b 273
+b 271
+b 1
+b 62
+b 70
+b 60
+b 1
+b 4
+b 3
+b 1
+b 108
+b 114
+b 116
+b 114
+b 1
+b 23
+b 25
+b 25
+b 1
+b 54
+b 51
+b 1
+b 299
+b 301
+b 308
+b 307
+b 1
+b 18
+b 17
+b 1
+b 32
+b 34
+b 308
+b 310
+b 312
+b 319
+b 310
+b 1
+b 86
+b 88
+b 105
+b 83
+b 1
+b 102
+b 1
+b 7
+b 9
+b 11
+b 13
+b 7
+b 1
+b 41
+b 155
+b 40
+b 1
+b 0
+b 2
+b 172
+b 182
+b 149
+b 100
+b 11
+b 21
+b 8
+b 1
+b 18
+b 1
+b 238
+b 198
+b 210
+b 208
+b 1
+b 17
+b 73
+b 72
+b 1
+b 4
+b 6
+b 23
+b 38
+b 21
+b 1
+b 36
+b 1
+b 163
+b 171
+b 436
+b 433
+b 1
+b 27
+b 59
+b 24
+b 1
+b 19
+b 37
+b 67
+b 36
+b 1
+b 63
+b 1
+b 5
+b 1
+b 133
+b 135
+b 137
+b 137
+b 1
+b 23
+b 188
+b 190
+b 188
+b 1
+b 258
+b 27
+b 26
+b 1
+b 6
+b 14
+b 326
+b 222
+b 242
+b 221
+b 1
+b 70
+b 5
+b 104
+b 106
+b 108
+b 110
+b 101
+b 1
+b 108
+b 1
+b 114
+b 116
+b 126
+b 124
+b 1
+b 121
+b 96
+b 106
+b 105
+b 1
+b 178
+b 68
+b 21
+b 13
+b 90
+b 98
+b 100
+b 168
+b 165
+b 1
+b 58
+b 56
+b 1
+b 9
+b 18
+b 6
+b 1
+b 1
+b 0
+b 1
+b 193
+b 83
+b 60
+b 108
+b 0
+b 2
+b 35
+b 61
+b 141
+b 282
+b 284
+b 282
+b 1
+b 67
+b 72
+b 74
+b 29
+b 31
+b 3
+b 2
+b 1
+b 3
+b 5
+b 3
+b 22
+b 24
+b 26
+b 28
+b 16
+b 18
+b 36
+b 16
+b 1
+b 61
+b 63
+b 70
+b 41
+b 70
+b 69
+b 1
+b 16
+b 27
+b 5
+b 4
+b 1
+b 176
+b 135
+b 1
+b 74
+b 6
+b 5
+b 1
+b 94
+b 93
+b 51
+b 242
+b 13
+b 78
+b 46
+b 91
+b 93
+b 95
+b 54
+b 56
+b 73
+b 51
+b 1
+b 293
+b 319
+b 24
+b 26
+b 28
+b 302
+b 304
+b 306
+b 302
+b 1
+b 137
+b 146
+b 148
+b 100
+b 98
+b 1
+b 271
+b 268
+b 1
+b 3
+b 119
+b 121
+b 116
+b 1
+b 0
+b 2
+b 2
+b 1
+b 54
+b 65
+b 308
+b 9
+b 71
+b 5
+b 56
+b 115
+b 58
+b 60
+b 7
+b 296
+b 3
+b 47
+b 46
+b 1
+b 234
+b 236
+b 238
+b 240
+b 238
+b 1
+b 224
+b 232
+b 19
+b 18
+b 1
+b 6
+b 0
+b 2
+b 108
+b 172
+b 171
+b 1
+b 3
+b 190
+b 238
+b 237
+b 1
+b 7
+b 130
+b 77
+b 65
+b 147
+b 149
+b 132
+b 161
+b 163
+b 226
+b 277
+b 225
+b 1
+b 117
+b 166
+b 184
+b 183
+b 1
+b 268
+b 287
+b 8
+b 18
+b 20
+b 5
+b 1
+b 18
+b 1
+b 108
+b 110
+b 108
+b 1
+b 45
+b 62
+b 64
+b 89
+b 77
+b 86
+b 137
+b 127
+b 45
+b 1
+b 160
+b 190
+b 92
+b 122
+b 16
+b 18
+b 20
+b 22
+b 20
+b 1
+b 130
+b 5
+b 322
+b 117
+b 65
+b 121
+b 64
+b 1
+b 116
+b 1
+b 150
+b 148
+b 1
+b 171
+b 170
+b 1
+b 466
+b 528
+b 466
+b 1
+b 523
+b 1
+b 84
+b 86
+b 88
+b 134
+b 11
+b 177
+b 121
+b 175
+b 189
+b 188
+b 1
+b 1
+b 17
+b 283
+b 321
+b 94
+b 96
+b 98
+b 100
+b 108
+b 105
+b 1
+b 15
+b 17
+b 12
+b 1
+b 218
+b 220
+b 222
+b 224
+b 218
+b 1
+b 174
+b 184
+b 213
+b 173
+b 1
+b 6
+b 8
+b 72
+b 71
+b 1
+b 238
+b 240
+b 23
+b 29
+b 39
+b 43
+b 53
+b 18
+b 20
+b 22
+b 24
+b 18
+b 1
+b 1368
+b 1370
+b 1372
+b 1374
+b 1368
+b 1
+b 74
+b 107
+b 122
+b 44
+b 46
+b 44
+b 1
+b 53
+b 55
+b 57
+b 24
+b 31
+b 23
+b 43
+b 37
+b 88
+b 222
+b 224
+b 304
+b 337
+b 336
+b 1
+b 25
+b 22
+b 1
+b 86
+b 223
+b 36
+b 169
+b 60
+b 60
+b 1
+b 27
+b 34
+b 24
+b 1
+b 108
+b 107
+b 1
+b 127
+b 135
+b 124
+b 1
+b 13
+b 12
+b 1
+b 26
+b 28
+b 114
+b 116
+b 216
+b 84
+b 104
+b 106
+b 25
+b 27
+b 29
+b 25
+b 1
+b 18
+b 3
+b 57
+b 65
+b 56
+b 1
+b 4
+b 5
+b 545
+b 14
+b 24
+b 242
+b 244
+b 246
+b 248
+b 150
+b 75
+b 130
+b 24
+b 36
+b 48
+b 50
+b 52
+b 94
+b 48
+b 1
+b 200
+b 22
+b 19
+b 1
+b 0
+b 16
+b 35
+b 16
+b 1
+b 31
+b 1
+b 49
+b 51
+b 53
+b 55
+b 46
+b 1
+b 63
+b 71
+b 70
+b 1
+b 57
+b 69
+b 49
+b 57
+b 59
+b 14
+b 16
+b 18
+b 14
+b 1
+b 31
+b 33
+b 26
+b 25
+b 1
+b 16
+b 18
+b 20
+b 144
+b 179
+b 181
+b 179
+b 1
+b 31
+b 42
+b 28
+b 1
+b 98
+b 95
+b 1
+b 12
+b 14
+b 24
+b 12
+b 1
+b 7
+b 9
+b 11
+b 143
+b 169
+b 178
+b 168
+b 1
+b 11
+b 3
+b 5
+b 7
+b 166
+b 121
+b 8
+b 3
+b 183
+b 221
+b 4
+b 6
+b 8
+b 3
+b 5
+b 7
+b 5
+b 1
+b 3
+b 13
+b 0
+b 1
+b 74
+b 76
+b 78
+b 80
+b 281
+b 283
+b 291
+b 281
+b 1
+b 51
+b 11
+b 81
+b 83
+b 85
+b 87
+b 89
+b 36
+b 38
+b 40
+b 0
+b 29
+b 46
+b 108
+b 332
+b 370
+b 368
+b 1
+b 21
+b 23
+b 25
+b 183
+b 185
+b 195
+b 194
+b 1
+b 440
+b 442
+b 444
+b 51
+b 146
+b 19
+b 21
+b 106
+b 129
+b 118
+b 0
+b 2
+b 188
+b 190
+b 192
+b 205
+b 169
+b 110
+b 339
+b 353
+b 28
+b 30
+b 32
+b 28
+b 1
+b 0
+b 37
+b 20
+b 661
+b 22
+b 49
+b 115
+b 25
+b 290
+b 13
+b 12
+b 1
+b 5
+b 101
+b 100
+b 1
+b 18
+b 20
+b 25
+b 162
+b 361
+b 385
+b 358
+b 1
+b 183
+b 72
+b 29
+b 31
+b 33
+b 31
+b 1
+b 240
+b 248
+b 32
+b 29
+b 1
+b 11
+b 33
+b 35
+b 63
+b 30
+b 1
+b 60
+b 1
+b 205
+b 207
+b 209
+b 211
+b 207
+b 1
+b 35
+b 4
+b 6
+b 28
+b 25
+b 1
+b 101
+b 113
+b 123
+b 120
+b 1
+b 147
+b 149
+b 149
+b 1
+b 108
+b 110
+b 19
+b 18
+b 1
+b 5
+b 178
+b 221
+b 3
+b 79
+b 101
+b 10
+b 2
+b 10
+b 12
+b 28
+b 171
+b 173
+b 182
+b 181
+b 1
+b 84
+b 86
+b 115
+b 84
+b 1
+b 82
+b 91
+b 6
+b 5
+b 1
+b 3
+b 30
+b 104
+b 1
+b 163
+b 165
+b 37
+b 35
+b 1
+b 23
+b 61
+b 63
+b 4
+b 6
+b 20
+b 4
+b 1
+b 19
+b 21
+b 9
+b 63
+b 65
+b 8
+b 1
+b 143
+b 21
+b 0
+b 2
+b 808
+b 818
+b 820
+b 818
+b 1
+b 8
+b 5
+b 1
+b 14
+b 0
+b 87
+b 89
+b 91
+b 93
+b 91
+b 1
+b 50
+b 177
+b 176
+b 1
+b 83
+b 12
+b 2
+b 13
+b 15
+b 17
+b 26
+b 167
+b 1
+b 10
+b 123
+b 133
+b 135
+b 122
+b 1
+b 54
+b 0
+b 2
+b 25
+b 15
+b 155
+b 33
+b 35
+b 37
+b 1
+b 33
+b 32
+b 1
+b 155
+b 157
+b 10
+b 32
+b 41
+b 55
+b 40
+b 1
+b 50
+b 1
+b 2
+b 1294
+b 1296
+b 44
+b 0
+b 76
+b 170
+b 170
+b 1
+b 4
+b 3
+b 1
+b 3
+b 151
+b 153
+b 148
+b 1
+b 32
+b 31
+b 1
+b 16
+b 32
+b 22
+b 38
+b 21
+b 1
+b 34
+b 1
+b 184
+b 43
+b 42
+b 1
+b 7
+b 35
+b 47
+b 49
+b 91
+b 244
+b 246
+b 254
+b 241
+b 1
+b 251
+b 1
+b 318
+b 337
+b 345
+b 139
+b 138
+b 1
+b 51
+b 53
+b 124
+b 126
+b 45
+b 44
+b 1
+b 7
+b 66
+b 422
+b 430
+b 429
+b 1
+b 41
+b 25
+b 25
+b 1
+b 52
+b 363
+b 391
+b 430
+b 360
+b 1
+b 427
+b 1
+b 3
+b 3
+b 1
+b 0
+b 2
+b 22
+b 32
+b 69
+b 6
+b 8
+b 6
+b 1
+b 260
+b 277
+b 259
+b 1
+b 50
+b 119
+b 121
+b 123
+b 125
+b 35
+b 37
+b 17
+b 38
+b 16
+b 1
+b 12
+b 37
+b 173
+b 175
+b 187
+b 7
+b 16
+b 25
+b 50
+b 77
+b 49
+b 1
+b 59
+b 394
+b 396
+b 142
+b 2
+b 4
+b 69
+b 115
+b 136
+b 157
+b 133
+b 1
+b 70
+b 69
+b 1
+b 185
+b 217
+b 219
+b 184
+b 1
+b 46
+b 45
+b 1
+b 35
+b 34
+b 1
+b 216
+b 224
+b 278
+b 215
+b 1
+b 220
+b 1
+b 10
+b 33
+b 35
+b 61
+b 63
+b 81
+b 78
+b 1
+b 95
+b 97
+b 99
+b 101
+b 95
+b 1
+b 122
+b 124
+b 126
+b 128
+b 124
+b 1
+b 122
+b 129
+b 131
+b 230
+b 232
+b 246
+b 157
+b 68
+b 37
+b 55
+b 57
+b 36
+b 1
+b 50
+b 1
+b 97
+b 118
+b 42
+b 55
+b 41
+b 1
+b 6
+b 6
+b 4
+b 3
+b 27
+b 210
+b 223
+b 15
+b 17
+b 19
+b 21
+b 12
+b 1
+b 132
+b 139
+b 141
+b 123
+b 125
+b 151
+b 55
+b 57
+b 52
+b 1
+b 5
+b 4
+b 1
+b 125
+b 188
+b 190
+b 122
+b 1
+b 188
+b 1
+b 10
+b 28
+b 45
+b 7
+b 1
+b 42
+b 1
+b 155
+b 25
+b 27
+b 25
+b 1
+b 67
+b 69
+b 71
+b 73
+b 64
+b 1
+b 71
+b 1
+b 7
+b 9
+b 23
+b 7
+b 1
+b 128
+b 7
+b 632
+b 721
+b 631
+b 1
+b 16
+b 70
+b 2
+b 4
+b 229
+b 231
+b 248
+b 245
+b 1
+b 56
+b 59
+b 44
+b 46
+b 48
+b 50
+b 48
+b 1
+b 38
+b 38
+b 162
+b 20
+b 22
+b 221
+b 28
+b 300
+b 268
+b 224
+b 188
+b 17
+b 19
+b 35
+b 19
+b 1
+b 31
+b 1
+b 527
+b 7
+b 67
+b 17
+b 49
+b 85
+b 47
+b 1
+b 27
+b 44
+b 235
+b 252
+b 32
+b 7
+b 9
+b 7
+b 1
+b 5
+b 85
+b 0
+b 254
+b 263
+b 11
+b 10
+b 1
+b 241
+b 248
+b 35
+b 43
+b 81
+b 72
+b 29
+b 31
+b 1
+b 35
+b 34
+b 202
+b 204
+b 0
+b 2
+b 0
+b 1
+b 98
+b 100
+b 110
+b 98
+b 1
+b 18
+b 20
+b 22
+b 18
+b 1
+b 191
+b 188
+b 1
+b 42
+b 42
+b 44
+b 46
+b 48
+b 83
+b 105
+b 135
+b 80
+b 1
+b 132
+b 1
+b 49
+b 51
+b 49
+b 1
+b 16
+b 57
+b 176
+b 1
+b 14
+b 16
+b 50
+b 92
+b 262
+b 53
+b 6
+b 18
+b 20
+b 22
+b 24
+b 221
+b 220
+b 1
+b 94
+b 104
+b 103
+b 1
+b 216
+b 101
+b 110
+b 20
+b 22
+b 17
+b 1
+b 0
+b 2
+b 30
+b 32
+b 23
+b 149
+b 12
+b 186
+b 13
+b 63
+b 92
+b 62
+b 1
+b 59
+b 301
+b 303
+b 324
+b 64
+b 0
+b 2
+b 14
+b 93
+b 19
+b 63
+b 73
+b 93
+b 95
+b 35
+b 143
+b 145
+b 147
+b 143
+b 1
+b 22
+b 24
+b 26
+b 24
+b 1
+b 143
+b 149
+b 159
+b 158
+b 1
+b 242
+b 244
+b 14
+b 16
+b 18
+b 18
+b 1
+b 324
+b 326
+b 328
+b 330
+b 324
+b 1
+b 180
+b 199
+b 201
+b 7
+b 17
+b 19
+b 21
+b 31
+b 19
+b 1
+b 41
+b 72
+b 24
+b 24
+b 1
+b 3
+b 0
+b 1
+b 88
+b 90
+b 258
+b 257
+b 1
+b 148
+b 147
+b 1
+b 6
+b 40
+b 118
+b 191
+b 203
+b 190
+b 1
+b 198
+b 1
+b 191
+b 41
+b 51
+b 58
+b 60
+b 78
+b 106
+b 229
+b 8
+b 47
+b 49
+b 51
+b 53
+b 55
+b 283
+b 10
+b 4
+b 3
+b 1
+b 117
+b 33
+b 59
+b 32
+b 1
+b 104
+b 71
+b 73
+b 71
+b 1
+b 27
+b 29
+b 31
+b 33
+b 24
+b 1
+b 31
+b 1
+b 45
+b 47
+b 42
+b 1
+b 14
+b 11
+b 1
+b 37
+b 53
+b 37
+b 1
+b 48
+b 1
+b 173
+b 172
+b 1
+b 36
+b 46
+b 72
+b 71
+b 1
+b 18
+b 20
+b 23
+b 25
+b 27
+b 29
+b 27
+b 1
+b 384
+b 12
+b 19
+b 21
+b 23
+b 25
+b 17
+b 19
+b 21
+b 23
+b 33
+b 35
+b 71
+b 70
+b 1
+b 30
+b 76
+b 34
+b 56
+b 152
+b 166
+b 41
+b 294
+b 2
+b 4
+b 57
+b 59
+b 0
+b 164
+b 166
+b 18
+b 105
+b 104
+b 1
+b 183
+b 185
+b 18
+b 28
+b 17
+b 1
+b 24
+b 1
+b 13
+b 22
+b 21
+b 1
+b 1
+b 59
+b 125
+b 127
+b 58
+b 1
+b 120
+b 1
+b 288
+b 290
+b 73
+b 72
+b 1
+b 77
+b 89
+b 14
+b 16
+b 13
+b 11
+b 1
+b 151
+b 33
+b 35
+b 50
+b 47
+b 1
+b 6
+b 6
+b 1
+b 15
+b 33
+b 200
+b 200
+b 1
+b 66
+b 66
+b 1
+b 27
+b 29
+b 467
+b 473
+b 464
+b 1
+b 471
+b 1
+b 111
+b 1
+b 52
+b 3
+b 108
+b 118
+b 117
+b 1
+b 68
+b 49
+b 8
+b 12
+b 203
+b 203
+b 1
+b 29
+b 28
+b 1
+b 1
+b 21
+b 20
+b 1
+b 27
+b 29
+b 44
+b 27
+b 1
+b 93
+b 209
+b 243
+b 90
+b 1
+b 240
+b 1
+b 229
+b 231
+b 201
+b 200
+b 1
+b 20
+b 58
+b 58
+b 1
+b 62
+b 9
+b 25
+b 8
+b 1
+b 247
+b 278
+b 277
+b 1
+b 1
+b 10
+b 97
+b 99
+b 9
+b 1
+b 27
+b 49
+b 24
+b 26
+b 28
+b 30
+b 28
+b 1
+b 4
+b 42
+b 47
+b 66
+b 65
+b 1
+b 49
+b 62
+b 64
+b 64
+b 16
+b 1
+b 0
+b 1
+b 193
+b 195
+b 195
+b 1
+b 1
+b 1
+b 1
+b 10
+b 17
+b 5
+b 53
+b 54
+b 65
+b 64
+b 1
+b 1
+b 10
+b 5
+b 183
+b 185
+b 187
+b 189
+b 183
+b 1
+b 4
+b 6
+b 8
+b 14
+b 14
+b 1
+b 6
+b 4
+b 1
+b 162
+b 172
+b 171
+b 1
+b 25
+b 6
+b 0
+b 2
+b 36
+b 35
+b 1
+b 15
+b 11
+b 46
+b 85
+b 77
+b 79
+b 81
+b 109
+b 306
+b 43
+b 84
+b 83
+b 1
+b 40
+b 38
+b 1
+b 13
+b 34
+b 44
+b 119
+b 143
+b 162
+b 164
+b 166
+b 159
+b 1
+b 164
+b 1
+b 107
+b 168
+b 170
+b 106
+b 1
+b 118
+b 117
+b 1
+b 25
+b 27
+b 318
+b 88
+b 20
+b 0
+b 2
+b 0
+b 1
+b 97
+b 99
+b 132
+b 371
+b 76
+b 75
+b 1
+b 36
+b 167
+b 169
+b 8
+b 203
+b 205
+b 207
+b 209
+b 203
+b 1
+b 202
+b 222
+b 137
+b 139
+b 147
+b 137
+b 1
+b 304
+b 3
+b 9
+b 2
+b 1
+b 102
+b 104
+b 106
+b 108
+b 99
+b 1
+b 148
+b 158
+b 28
+b 27
+b 1
+b 16
+b 23
+b 15
+b 1
+b 10
+b 25
+b 165
+b 177
+b 187
+b 162
+b 1
+b 184
+b 1
+b 398
+b 400
+b 402
+b 398
+b 1
+b 8
+b 10
+b 12
+b 8
+b 1
+b 147
+b 149
+b 31
+b 438
+b 440
+b 435
+b 1
+b 438
+b 1
+b 52
+b 97
+b 8
+b 133
+b 7
+b 17
+b 104
+b 113
+b 115
+b 102
+b 1
+b 113
+b 1
+b 121
+b 129
+b 145
+b 120
+b 1
+b 125
+b 1
+b 145
+b 187
+b 22
+b 20
+b 19
+b 1
+b 4
+b 37
+b 67
+b 34
+b 1
+b 65
+b 1
+b 115
+b 1
+b 17
+b 72
+b 24
+b 271
+b 273
+b 275
+b 277
+b 44
+b 74
+b 76
+b 43
+b 1
+b 69
+b 1
+b 125
+b 135
+b 137
+b 123
+b 1
+b 848
+b 298
+b 63
+b 71
+b 18
+b 37
+b 36
+b 1
+b 44
+b 22
+b 24
+b 7
+b 77
+b 79
+b 89
+b 77
+b 1
+b 253
+b 267
+b 2
+b 4
+b 6
+b 17
+b 26
+b 28
+b 26
+b 1
+b 10
+b 60
+b 296
+b 311
+b 308
+b 1
+b 53
+b 3
+b 0
+b 1
+b 230
+b 136
+b 1
+b 24
+b 38
+b 40
+b 157
+b 159
+b 161
+b 163
+b 159
+b 1
+b 156
+b 208
+b 210
+b 231
+b 261
+b 230
+b 1
+b 256
+b 1
+b 185
+b 187
+b 189
+b 191
+b 185
+b 1
+b 163
+b 174
+b 160
+b 1
+b 41
+b 40
+b 1
+b 20
+b 25
+b 3
+b 2
+b 1
+b 36
+b 35
+b 1
+b 25
+b 27
+b 45
+b 9
+b 9
+b 1
+b 109
+b 123
+b 170
+b 106
+b 1
+b 167
+b 1
+b 17
+b 19
+b 19
+b 1
+b 177
+b 176
+b 1
+b 20
+b 22
+b 24
+b 17
+b 1
+b 22
+b 1
+b 153
+b 11
+b 0
+b 90
+b 88
+b 1
+b 86
+b 110
+b 140
+b 109
+b 1
+b 7
+b 6
+b 1
+b 12
+b 14
+b 14
+b 1
+b 11
+b 9
+b 1
+b 16
+b 99
+b 98
+b 1
+b 222
+b 221
+b 1
+b 6
+b 16
+b 124
+b 140
+b 42
+b 14
+b 129
+b 131
+b 133
+b 135
+b 129
+b 1
+b 29
+b 6
+b 22
+b 5
+b 1
+b 144
+b 146
+b 146
+b 1
+b 47
+b 44
+b 1
+b 223
+b 225
+b 227
+b 229
+b 223
+b 1
+b 245
+b 255
+b 271
+b 244
+b 1
+b 251
+b 1
+b 90
+b 92
+b 90
+b 1
+b 99
+b 187
+b 10
+b 9
+b 1
+b 15
+b 14
+b 1
+b 10
+b 0
+b 2
+b 36
+b 31
+b 33
+b 35
+b 80
+b 82
+b 84
+b 86
+b 82
+b 1
+b 65
+b 104
+b 104
+b 1
+b 63
+b 75
+b 232
+b 234
+b 17
+b 62
+b 76
+b 75
+b 1
+b 59
+b 40
+b 42
+b 239
+b 47
+b 49
+b 51
+b 53
+b 65
+b 79
+b 81
+b 64
+b 1
+b 22
+b 19
+b 1
+b 11
+b 10
+b 1
+b 159
+b 159
+b 1
+b 137
+b 55
+b 75
+b 52
+b 1
+b 101
+b 103
+b 159
+b 103
+b 1
+b 155
+b 1
+b 85
+b 209
+b 207
+b 1
+b 17
+b 112
+b 136
+b 201
+b 111
+b 1
+b 132
+b 1
+b 2
+b 4
+b 20
+b 29
+b 31
+b 42
+b 197
+b 199
+b 147
+b 190
+b 299
+b 301
+b 303
+b 305
+b 4
+b 6
+b 8
+b 20
+b 22
+b 24
+b 26
+b 17
+b 1
+b 150
+b 152
+b 154
+b 156
+b 152
+b 1
+b 323
+b 460
+b 462
+b 460
+b 1
+b 22
+b 19
+b 1
+b 14
+b 0
+b 2
+b 2
+b 1
+b 144
+b 170
+b 144
+b 1
+b 165
+b 1
+b 313
+b 315
+b 341
+b 313
+b 1
+b 110
+b 12
+b 160
+b 162
+b 162
+b 1
+b 9
+b 11
+b 42
+b 440
+b 442
+b 466
+b 106
+b 108
+b 110
+b 112
+b 112
+b 1
+b 3
+b 2
+b 103
+b 199
+b 100
+b 1
+b 196
+b 1
+b 227
+b 236
+b 17
+b 27
+b 29
+b 15
+b 1
+b 27
+b 1
+b 165
+b 3
+b 78
+b 146
+b 78
+b 1
+b 24
+b 26
+b 8
+b 66
+b 75
+b 81
+b 6
+b 8
+b 111
+b 121
+b 35
+b 37
+b 39
+b 41
+b 37
+b 1
+b 20
+b 26
+b 10
+b 12
+b 24
+b 10
+b 1
+b 201
+b 210
+b 209
+b 1
+b 110
+b 191
+b 198
+b 109
+b 1
+b 163
+b 173
+b 175
+b 160
+b 1
+b 173
+b 1
+b 10
+b 12
+b 14
+b 16
+b 7
+b 1
+b 19
+b 19
+b 1
+b 70
+b 1
+b 0
+b 1
+b 55
+b 45
+b 41
+b 51
+b 197
+b 199
+b 201
+b 203
+b 197
+b 1
+b 117
+b 4
+b 1
+b 179
+b 178
+b 1
+b 26
+b 144
+b 214
+b 224
+b 213
+b 1
+b 220
+b 1
+b 175
+b 10
+b 102
+b 112
+b 120
+b 101
+b 1
+b 49
+b 7
+b 72
+b 2
+b 198
+b 208
+b 197
+b 1
+b 102
+b 104
+b 1
+b 6
+b 2
+b 9
+b 11
+b 13
+b 15
+b 9
+b 1
+b 282
+b 300
+b 302
+b 281
+b 1
+b 295
+b 1
+b 133
+b 135
+b 137
+b 139
+b 135
+b 1
+b 48
+b 50
+b 83
+b 48
+b 1
+b 182
+b 21
+b 6
+b 29
+b 43
+b 28
+b 1
+b 77
+b 79
+b 81
+b 83
+b 79
+b 1
+b 49
+b 51
+b 53
+b 55
+b 46
+b 1
+b 60
+b 57
+b 1
+b 4
+b 6
+b 8
+b 8
+b 1
+b 135
+b 61
+b 63
+b 721
+b 731
+b 741
+b 720
+b 1
+b 727
+b 1
+b 36
+b 13
+b 21
+b 168
+b 62
+b 20
+b 20
+b 1
+b 20
+b 19
+b 1
+b 19
+b 21
+b 31
+b 30
+b 1
+b 53
+b 161
+b 158
+b 1
+b 55
+b 52
+b 1
+b 68
+b 86
+b 88
+b 67
+b 1
+b 34
+b 26
+b 28
+b 26
+b 1
+b 124
+b 126
+b 128
+b 126
+b 1
+b 45
+b 47
+b 49
+b 51
+b 173
+b 189
+b 99
+b 25
+b 209
+b 211
+b 209
+b 1
+b 48
+b 334
+b 334
+b 1
+b 4
+b 44
+b 44
+b 1
+b 55
+b 69
+b 23
+b 25
+b 27
+b 25
+b 1
+b 103
+b 105
+b 171
+b 103
+b 1
+b 92
+b 94
+b 96
+b 98
+b 94
+b 1
+b 207
+b 217
+b 204
+b 1
+b 192
+b 191
+b 1
+b 20
+b 77
+b 79
+b 159
+b 176
+b 178
+b 158
+b 1
+b 7
+b 9
+b 11
+b 13
+b 21
+b 8
+b 6
+b 1
+b 1
+b 25
+b 27
+b 37
+b 35
+b 1
+b 25
+b 24
+b 1
+b 23
+b 55
+b 60
+b 69
+b 71
+b 59
+b 1
+b 235
+b 10
+b 12
+b 10
+b 1
+b 79
+b 86
+b 77
+b 1
+b 83
+b 1
+b 280
+b 300
+b 304
+b 314
+b 339
+b 301
+b 1
+b 334
+b 1
+b 218
+b 217
+b 1
+b 37
+b 39
+b 829
+b 843
+b 153
+b 167
+b 153
+b 1
+b 162
+b 1
+b 157
+b 94
+b 11
+b 21
+b 28
+b 51
+b 44
+b 168
+b 186
+b 185
+b 1
+b 244
+b 262
+b 259
+b 1
+b 206
+b 11
+b 33
+b 35
+b 10
+b 1
+b 211
+b 221
+b 223
+b 210
+b 1
+b 106
+b 108
+b 110
+b 112
+b 106
+b 1
+b 449
+b 471
+b 448
+b 1
+b 66
+b 76
+b 56
+b 95
+b 93
+b 1
+b 13
+b 6
+b 3
+b 1
+b 26
+b 26
+b 1
+b 5
+b 7
+b 15
+b 2
+b 1
+b 12
+b 1
+b 262
+b 264
+b 266
+b 264
+b 1
+b 11
+b 13
+b 15
+b 17
+b 28
+b 78
+b 85
+b 84
+b 1
+b 63
+b 117
+b 3
+b 2
+b 1
+b 8
+b 5
+b 1
+b 24
+b 24
+b 1
+b 8
+b 36
+b 205
+b 239
+b 267
+b 238
+b 1
+b 262
+b 1
+b 45
+b 12
+b 14
+b 12
+b 1
+b 183
+b 185
+b 39
+b 21
+b 29
+b 70
+b 116
+b 122
+b 69
+b 1
+b 45
+b 44
+b 1
+b 174
+b 176
+b 4
+b 6
+b 51
+b 23
+b 22
+b 1
+b 6
+b 90
+b 110
+b 88
+b 125
+b 134
+b 38
+b 40
+b 42
+b 44
+b 40
+b 1
+b 4
+b 3
+b 1
+b 30
+b 32
+b 32
+b 1
+b 43
+b 58
+b 18
+b 15
+b 1
+b 70
+b 70
+b 1
+b 311
+b 67
+b 69
+b 47
+b 46
+b 1
+b 11
+b 67
+b 24
+b 23
+b 1
+b 10
+b 48
+b 113
+b 121
+b 34
+b 33
+b 1
+b 105
+b 107
+b 209
+b 211
+b 235
+b 45
+b 47
+b 56
+b 45
+b 1
+b 110
+b 118
+b 127
+b 109
+b 1
+b 114
+b 1
+b 207
+b 220
+b 1
+b 58
+b 5
+b 39
+b 180
+b 182
+b 181
+b 189
+b 179
+b 1
+b 117
+b 116
+b 1
+b 18
+b 20
+b 22
+b 24
+b 22
+b 1
+b 145
+b 147
+b 149
+b 151
+b 149
+b 1
+b 47
+b 62
+b 44
+b 1
+b 60
+b 1
+b 71
+b 107
+b 86
+b 86
+b 1
+b 12
+b 9
+b 1
+b 48
+b 72
+b 198
+b 226
+b 125
+b 127
+b 125
+b 1
+b 1
+b 149
+b 201
+b 43
+b 81
+b 83
+b 42
+b 1
+b 313
+b 315
+b 336
+b 335
+b 1
+b 43
+b 56
+b 7
+b 9
+b 11
+b 122
+b 124
+b 132
+b 119
+b 1
+b 129
+b 1
+b 317
+b 326
+b 328
+b 314
+b 1
+b 16
+b 13
+b 1
+b 2
+b 4
+b 22
+b 73
+b 75
+b 77
+b 79
+b 73
+b 1
+b 96
+b 127
+b 129
+b 95
+b 1
+b 122
+b 1
+b 12
+b 14
+b 31
+b 137
+b 52
+b 209
+b 211
+b 213
+b 211
+b 1
+b 218
+b 229
+b 231
+b 217
+b 1
+b 224
+b 1
+b 26
+b 23
+b 1
+b 10
+b 23
+b 21
+b 1
+b 9
+b 19
+b 30
+b 18
+b 1
+b 6
+b 5
+b 1
+b 52
+b 52
+b 1
+b 75
+b 13
+b 97
+b 107
+b 109
+b 107
+b 1
+b 124
+b 126
+b 128
+b 130
+b 121
+b 1
+b 128
+b 1
+b 410
+b 420
+b 401
+b 411
+b 164
+b 162
+b 1
+b 19
+b 1
+b 1
+b 1
+b 182
+b 181
+b 1
+b 19
+b 26
+b 25
+b 1
+b 137
+b 146
+b 0
+b 206
+b 22
+b 24
+b 22
+b 1
+b 267
+b 269
+b 271
+b 273
+b 271
+b 1
+b 171
+b 191
+b 169
+b 1
+b 189
+b 1
+b 110
+b 204
+b 212
+b 225
+b 227
+b 211
+b 1
+b 37
+b 39
+b 34
+b 1
+b 1
+b 4
+b 6
+b 8
+b 133
+b 162
+b 131
+b 1
+b 295
+b 47
+b 45
+b 1
+b 186
+b 188
+b 208
+b 186
+b 1
+b 138
+b 140
+b 142
+b 144
+b 140
+b 1
+b 14
+b 24
+b 26
+b 46
+b 242
+b 258
+b 241
+b 1
+b 253
+b 1
+b 80
+b 89
+b 256
+b 255
+b 1
+b 7
+b 51
+b 18
+b 27
+b 1
+b 14
+b 37
+b 11
+b 1
+b 34
+b 1
+b 2
+b 4
+b 6
+b 95
+b 94
+b 1
+b 3
+b 187
+b 189
+b 191
+b 189
+b 1
+b 77
+b 79
+b 81
+b 83
+b 33
+b 80
+b 45
+b 57
+b 59
+b 57
+b 1
+b 143
+b 36
+b 97
+b 168
+b 72
+b 72
+b 1
+b 6
+b 33
+b 40
+b 164
+b 42
+b 84
+b 12
+b 11
+b 10
+b 1
+b 5
+b 19
+b 21
+b 3
+b 1
+b 8
+b 175
+b 213
+b 33
+b 214
+b 216
+b 218
+b 327
+b 326
+b 1
+b 3
+b 3
+b 1
+b 424
+b 150
+b 152
+b 150
+b 1
+b 161
+b 187
+b 161
+b 1
+b 183
+b 1
+b 84
+b 98
+b 97
+b 1
+b 157
+b 159
+b 17
+b 14
+b 1
+b 30
+b 41
+b 63
+b 40
+b 1
+b 59
+b 1
+b 102
+b 18
+b 6
+b 40
+b 18
+b 152
+b 42
+b 179
+b 178
+b 1
+b 21
+b 103
+b 105
+b 107
+b 109
+b 48
+b 0
+b 2
+b 22
+b 49
+b 135
+b 126
+b 128
+b 130
+b 132
+b 130
+b 1
+b 163
+b 182
+b 215
+b 181
+b 1
+b 211
+b 1
+b 250
+b 252
+b 254
+b 40
+b 39
+b 1
+b 43
+b 45
+b 40
+b 1
+b 102
+b 118
+b 100
+b 1
+b 116
+b 1
+b 8
+b 10
+b 27
+b 72
+b 74
+b 243
+b 242
+b 1
+b 150
+b 39
+b 51
+b 50
+b 1
+b 45
+b 47
+b 25
+b 10
+b 10
+b 1
+b 14
+b 93
+b 95
+b 97
+b 95
+b 1
+b 140
+b 171
+b 203
+b 170
+b 1
+b 98
+b 104
+b 97
+b 1
+b 157
+b 159
+b 161
+b 163
+b 159
+b 1
+b 364
+b 426
+b 428
+b 363
+b 1
+b 57
+b 57
+b 1
+b 158
+b 155
+b 1
+b 58
+b 87
+b 9
+b 133
+b 144
+b 146
+b 132
+b 1
+b 139
+b 1
+b 27
+b 41
+b 55
+b 161
+b 169
+b 160
+b 1
+b 96
+b 112
+b 114
+b 116
+b 302
+b 20
+b 27
+b 37
+b 19
+b 1
+b 3
+b 20
+b 3
+b 1
+b 319
+b 321
+b 91
+b 16
+b 27
+b 5
+b 4
+b 1
+b 188
+b 185
+b 1
+b 29
+b 28
+b 1
+b 118
+b 124
+b 117
+b 1
+b 120
+b 1
+b 199
+b 80
+b 104
+b 144
+b 143
+b 1
+b 144
+b 22
+b 171
+b 173
+b 175
+b 177
+b 13
+b 53
+b 33
+b 35
+b 6
+b 5
+b 1
+b 178
+b 0
+b 8
+b 301
+b 53
+b 50
+b 1
+b 215
+b 214
+b 1
+b 3
+b 323
+b 93
+b 377
+b 374
+b 1
+b 104
+b 91
+b 93
+b 95
+b 97
+b 65
+b 64
+b 1
+b 31
+b 31
+b 1
+b 209
+b 3
+b 30
+b 25
+b 269
+b 278
+b 280
+b 99
+b 27
+b 29
+b 68
+b 86
+b 32
+b 13
+b 5
+b 264
+b 0
+b 2
+b 8
+b 100
+b 102
+b 104
+b 106
+b 100
+b 1
+b 308
+b 3
+b 11
+b 13
+b 15
+b 273
+b 275
+b 277
+b 31
+b 83
+b 80
+b 1
+b 15
+b 14
+b 1
+b 73
+b 75
+b 95
+b 129
+b 148
+b 105
+b 109
+b 108
+b 125
+b 152
+b 107
+b 1
+b 218
+b 220
+b 234
+b 42
+b 3
+b 287
+b 298
+b 300
+b 201
+b 203
+b 7
+b 96
+b 98
+b 110
+b 139
+b 152
+b 1306
+b 1319
+b 1305
+b 1
+b 132
+b 148
+b 132
+b 1
+b 147
+b 183
+b 185
+b 148
+b 150
+b 152
+b 526
+b 528
+b 526
+b 1
+b 65
+b 97
+b 139
+b 239
+b 251
+b 236
+b 1
+b 248
+b 1
+b 462
+b 464
+b 466
+b 462
+b 1
+b 294
+b 318
+b 8
+b 30
+b 5
+b 1
+b 375
+b 415
+b 337
+b 375
+b 194
+b 194
+b 1
+b 5
+b 294
+b 293
+b 1
+b 53
+b 55
+b 57
+b 59
+b 53
+b 1
+b 110
+b 112
+b 114
+b 116
+b 53
+b 55
+b 53
+b 1
+b 67
+b 89
+b 18
+b 0
+b 17
+b 16
+b 1
+b 1
+b 8
+b 5
+b 2
+b 1
+b 3
+b 3
+b 1
+b 13
+b 21
+b 46
+b 45
+b 1
+b 45
+b 64
+b 137
+b 3
+b 141
+b 143
+b 145
+b 147
+b 141
+b 1
+b 244
+b 3
+b 16
+b 38
+b 35
+b 1
+b 147
+b 146
+b 1
+b 142
+b 166
+b 31
+b 25
+b 27
+b 11
+b 13
+b 15
+b 17
+b 11
+b 1
+b 107
+b 117
+b 106
+b 1
+b 113
+b 1
+b 40
+b 125
+b 139
+b 136
+b 1
+b 35
+b 34
+b 1
+b 26
+b 54
+b 14
+b 11
+b 24
+b 23
+b 1
+b 119
+b 121
+b 121
+b 1
+b 1
+b 1
+b 15
+b 13
+b 32
+b 133
+b 176
+b 23
+b 25
+b 27
+b 25
+b 1
+b 37
+b 39
+b 41
+b 6
+b 5
+b 1
+b 65
+b 151
+b 148
+b 1
+b 183
+b 185
+b 183
+b 1
+b 33
+b 138
+b 138
+b 1
+b 62
+b 59
+b 1
+b 221
+b 219
+b 1
+b 5
+b 5
+b 1
+b 419
+b 421
+b 423
+b 425
+b 26
+b 4
+b 75
+b 122
+b 56
+b 58
+b 60
+b 79
+b 155
+b 169
+b 154
+b 1
+b 456
+b 458
+b 456
+b 1
+b 0
+b 2
+b 8
+b 36
+b 8
+b 1
+b 32
+b 1
+b 99
+b 98
+b 1
+b 161
+b 171
+b 370
+b 388
+b 387
+b 1
+b 45
+b 124
+b 147
+b 131
+b 170
+b 187
+b 69
+b 71
+b 69
+b 1
+b 106
+b 433
+b 435
+b 437
+b 439
+b 214
+b 216
+b 393
+b 492
+b 491
+b 1
+b 169
+b 167
+b 1
+b 47
+b 49
+b 100
+b 99
+b 1
+b 50
+b 60
+b 70
+b 49
+b 1
+b 58
+b 77
+b 132
+b 149
+b 132
+b 1
+b 144
+b 1
+b 125
+b 16
+b 76
+b 94
+b 96
+b 94
+b 1
+b 146
+b 160
+b 182
+b 181
+b 1
+b 1
+b 128
+b 130
+b 5
+b 15
+b 3
+b 408
+b 3
+b 284
+b 286
+b 288
+b 11
+b 235
+b 217
+b 25
+b 1
+b 112
+b 114
+b 132
+b 205
+b 223
+b 204
+b 1
+b 108
+b 201
+b 203
+b 205
+b 207
+b 25
+b 188
+b 10
+b 18
+b 9
+b 1
+b 75
+b 19
+b 21
+b 23
+b 25
+b 23
+b 1
+b 37
+b 63
+b 60
+b 1
+b 5
+b 2
+b 1
+b 3
+b 5
+b 5
+b 1
+b 164
+b 163
+b 1
+b 16
+b 18
+b 13
+b 1
+b 138
+b 3
+b 17
+b 27
+b 61
+b 27
+b 1
+b 57
+b 1
+b 630
+b 629
+b 1
+b 160
+b 162
+b 162
+b 1
+b 180
+b 16
+b 157
+b 159
+b 215
+b 157
+b 1
+b 40
+b 42
+b 44
+b 42
+b 1
+b 32
+b 31
+b 1
+b 2
+b 198
+b 1
+b 25
+b 30
+b 92
+b 85
+b 131
+b 130
+b 1
+b 121
+b 13
+b 43
+b 28
+b 30
+b 11
+b 111
+b 147
+b 240
+b 239
+b 1
+b 773
+b 274
+b 276
+b 278
+b 276
+b 1
+b 428
+b 427
+b 1
+b 38
+b 35
+b 1
+b 155
+b 107
+b 104
+b 1
+b 31
+b 44
+b 29
+b 1
+b 284
+b 282
+b 1
+b 167
+b 169
+b 171
+b 167
+b 1
+b 362
+b 429
+b 443
+b 428
+b 1
+b 10
+b 12
+b 30
+b 155
+b 74
+b 33
+b 32
+b 1
+b 371
+b 371
+b 1
+b 106
+b 106
+b 1
+b 38
+b 40
+b 38
+b 1
+b 8
+b 85
+b 172
+b 85
+b 1
+b 169
+b 1
+b 13
+b 15
+b 17
+b 19
+b 13
+b 1
+b 231
+b 233
+b 103
+b 257
+b 288
+b 288
+b 1
+b 35
+b 44
+b 66
+b 43
+b 1
+b 64
+b 50
+b 302
+b 300
+b 1
+b 408
+b 422
+b 148
+b 147
+b 1
+b 26
+b 44
+b 39
+b 59
+b 37
+b 1
+b 6
+b 3
+b 1
+b 85
+b 84
+b 1
+b 37
+b 39
+b 51
+b 104
+b 102
+b 1
+b 19
+b 34
+b 154
+b 218
+b 141
+b 143
+b 151
+b 141
+b 1
+b 186
+b 188
+b 12
+b 68
+b 67
+b 1
+b 153
+b 152
+b 1
+b 129
+b 131
+b 126
+b 1
+b 2
+b 4
+b 7
+b 101
+b 129
+b 100
+b 1
+b 124
+b 1
+b 199
+b 211
+b 225
+b 198
+b 1
+b 207
+b 1
+b 30
+b 32
+b 34
+b 36
+b 32
+b 1
+b 145
+b 147
+b 142
+b 1
+b 16
+b 15
+b 1
+b 38
+b 22
+b 11
+b 13
+b 13
+b 1
+b 9
+b 6
+b 1
+b 2
+b 4
+b 6
+b 2
+b 1
+b 456
+b 458
+b 468
+b 377
+b 379
+b 413
+b 379
+b 1
+b 409
+b 1
+b 115
+b 42
+b 20
+b 22
+b 24
+b 26
+b 24
+b 1
+b 58
+b 60
+b 62
+b 60
+b 1
+b 46
+b 12
+b 12
+b 14
+b 16
+b 18
+b 31
+b 30
+b 1
+b 24
+b 24
+b 1
+b 6
+b 17
+b 180
+b 64
+b 42
+b 103
+b 270
+b 272
+b 274
+b 276
+b 272
+b 1
+b 11
+b 29
+b 31
+b 197
+b 206
+b 3
+b 9
+b 8
+b 1
+b 5
+b 15
+b 69
+b 2
+b 73
+b 21
+b 20
+b 1
+b 21
+b 57
+b 141
+b 10
+b 9
+b 1
+b 106
+b 105
+b 1
+b 21
+b 43
+b 133
+b 131
+b 1
+b 39
+b 65
+b 37
+b 1
+b 10
+b 28
+b 13
+b 12
+b 1
+b 73
+b 75
+b 77
+b 79
+b 70
+b 1
+b 77
+b 1
+b 81
+b 43
+b 176
+b 209
+b 208
+b 1
+b 12
+b 67
+b 24
+b 23
+b 1
+b 0
+b 186
+b 188
+b 190
+b 192
+b 118
+b 158
+b 115
+b 1
+b 151
+b 148
+b 1
+b 61
+b 59
+b 1
+b 111
+b 113
+b 112
+b 111
+b 1
+b 132
+b 131
+b 1
+b 71
+b 73
+b 198
+b 197
+b 1
+b 124
+b 131
+b 74
+b 76
+b 84
+b 64
+b 92
+b 123
+b 63
+b 1
+b 87
+b 1
+b 13
+b 29
+b 26
+b 98
+b 81
+b 170
+b 172
+b 170
+b 1
+b 221
+b 5
+b 409
+b 423
+b 425
+b 406
+b 1
+b 128
+b 56
+b 313
+b 315
+b 317
+b 52
+b 5
+b 182
+b 184
+b 186
+b 56
+b 3
+b 110
+b 151
+b 6
+b 7
+b 9
+b 315
+b 312
+b 1
+b 152
+b 149
+b 1
+b 50
+b 49
+b 1
+b 75
+b 10
+b 12
+b 72
+b 3
+b 28
+b 26
+b 1
+b 15
+b 15
+b 1
+b 239
+b 251
+b 253
+b 54
+b 12
+b 1
+b 29
+b 29
+b 1
+b 192
+b 190
+b 1
+b 43
+b 45
+b 19
+b 21
+b 23
+b 19
+b 1
+b 142
+b 144
+b 202
+b 37
+b 47
+b 49
+b 36
+b 1
+b 73
+b 11
+b 202
+b 204
+b 17
+b 16
+b 1
+b 24
+b 26
+b 12
+b 11
+b 1
+b 213
+b 210
+b 1
+b 0
+b 2
+b 218
+b 217
+b 1
+b 42
+b 44
+b 46
+b 73
+b 39
+b 1
+b 141
+b 199
+b 211
+b 637
+b 67
+b 64
+b 1
+b 31
+b 3
+b 5
+b 61
+b 124
+b 126
+b 501
+b 509
+b 78
+b 137
+b 595
+b 597
+b 599
+b 601
+b 595
+b 1
+b 10
+b 20
+b 19
+b 1
+b 1
+b 2
+b 4
+b 17
+b 15
+b 12
+b 1
+b 60
+b 60
+b 1
+b 108
+b 110
+b 112
+b 114
+b 11
+b 13
+b 15
+b 17
+b 13
+b 1
+b 77
+b 40
+b 20
+b 19
+b 1
+b 271
+b 279
+b 14
+b 112
+b 114
+b 6
+b 8
+b 10
+b 12
+b 33
+b 35
+b 37
+b 84
+b 86
+b 88
+b 86
+b 1
+b 411
+b 27
+b 29
+b 34
+b 2
+b 21
+b 20
+b 1
+b 24
+b 148
+b 196
+b 9
+b 29
+b 24
+b 2
+b 59
+b 61
+b 59
+b 1
+b 39
+b 138
+b 204
+b 206
+b 147
+b 149
+b 144
+b 1
+b 147
+b 1
+b 16
+b 35
+b 155
+b 154
+b 1
+b 2
+b 12
+b 59
+b 66
+b 68
+b 58
+b 1
+b 254
+b 8
+b 10
+b 8
+b 1
+b 220
+b 212
+b 19
+b 43
+b 109
+b 17
+b 38
+b 37
+b 1
+b 73
+b 107
+b 44
+b 83
+b 80
+b 1
+b 29
+b 64
+b 66
+b 68
+b 467
+b 517
+b 93
+b 8
+b 21
+b 20
+b 1
+b 182
+b 184
+b 184
+b 1
+b 58
+b 60
+b 62
+b 1
+b 0
+b 1
+b 10
+b 12
+b 10
+b 1
+b 31
+b 144
+b 314
+b 340
+b 313
+b 1
+b 4
+b 122
+b 174
+b 119
+b 1
+b 171
+b 1
+b 1
+b 22
+b 42
+b 337
+b 339
+b 341
+b 343
+b 341
+b 1
+b 62
+b 64
+b 72
+b 70
+b 1
+b 4
+b 2
+b 1
+b 65
+b 67
+b 62
+b 1
+b 36
+b 35
+b 1
+b 17
+b 19
+b 19
+b 1
+b 125
+b 140
+b 56
+b 86
+b 94
+b 96
+b 106
+b 163
+b 173
+b 162
+b 1
+b 6
+b 54
+b 56
+b 56
+b 1
+b 0
+b 2
+b 0
+b 1
+b 281
+b 283
+b 285
+b 287
+b 278
+b 1
+b 3
+b 5
+b 7
+b 9
+b 5
+b 1
+b 17
+b 19
+b 21
+b 23
+b 19
+b 1
+b 114
+b 116
+b 136
+b 135
+b 1
+b 56
+b 58
+b 60
+b 306
+b 50
+b 47
+b 1
+b 9
+b 6
+b 1
+b 66
+b 68
+b 70
+b 72
+b 74
+b 33
+b 47
+b 49
+b 32
+b 1
+b 9
+b 36
+b 38
+b 229
+b 229
+b 1
+b 76
+b 76
+b 1
+b 47
+b 49
+b 51
+b 53
+b 249
+b 258
+b 248
+b 1
+b 52
+b 59
+b 56
+b 25
+b 3
+b 5
+b 7
+b 9
+b 5
+b 1
+b 40
+b 42
+b 40
+b 1
+b 72
+b 16
+b 45
+b 47
+b 45
+b 1
+b 52
+b 54
+b 80
+b 52
+b 1
+b 620
+b 622
+b 634
+b 617
+b 1
+b 631
+b 1
+b 449
+b 449
+b 1
+b 35
+b 34
+b 1
+b 22
+b 21
+b 1
+b 167
+b 169
+b 164
+b 1
+b 224
+b 156
+b 153
+b 1
+b 128
+b 34
+b 39
+b 73
+b 34
+b 48
+b 31
+b 1
+b 45
+b 1
+b 37
+b 17
+b 84
+b 86
+b 88
+b 81
+b 1
+b 18
+b 17
+b 1
+b 89
+b 86
+b 1
+b 454
+b 469
+b 468
+b 1
+b 7
+b 98
+b 111
+b 121
+b 97
+b 1
+b 107
+b 1
+b 60
+b 61
+b 63
+b 437
+b 535
+b 125
+b 127
+b 127
+b 1
+b 77
+b 76
+b 1
+b 428
+b 448
+b 474
+b 447
+b 1
+b 470
+b 1
+b 68
+b 192
+b 212
+b 191
+b 1
+b 208
+b 1
+b 206
+b 208
+b 206
+b 1
+b 15
+b 119
+b 139
+b 141
+b 118
+b 1
+b 39
+b 55
+b 39
+b 72
+b 74
+b 72
+b 1
+b 12
+b 14
+b 38
+b 17
+b 28
+b 30
+b 11
+b 13
+b 15
+b 12
+b 20
+b 22
+b 20
+b 1
+b 131
+b 133
+b 153
+b 131
+b 1
+b 5
+b 25
+b 2
+b 1
+b 22
+b 1
+b 44
+b 46
+b 48
+b 44
+b 1
+b 126
+b 144
+b 126
+b 1
+b 139
+b 1
+b 63
+b 70
+b 92
+b 69
+b 1
+b 33
+b 35
+b 37
+b 39
+b 33
+b 1
+b 34
+b 36
+b 50
+b 49
+b 1
+b 38
+b 40
+b 42
+b 44
+b 136
+b 138
+b 140
+b 133
+b 1
+b 138
+b 1
+b 62
+b 3
+b 332
+b 0
+b 2
+b 19
+b 410
+b 412
+b 414
+b 432
+b 431
+b 1
+b 248
+b 247
+b 1
+b 72
+b 74
+b 74
+b 1
+b 50
+b 13
+b 10
+b 121
+b 123
+b 151
+b 197
+b 27
+b 45
+b 27
+b 1
+b 15
+b 17
+b 15
+b 1
+b 30
+b 113
+b 115
+b 110
+b 1
+b 18
+b 17
+b 1
+b 15
+b 64
+b 45
+b 55
+b 55
+b 1
+b 264
+b 262
+b 1
+b 72
+b 89
+b 88
+b 1
+b 10
+b 12
+b 9
+b 52
+b 9
+b 622
+b 630
+b 158
+b 160
+b 8
+b 392
+b 389
+b 1
+b 30
+b 27
+b 1
+b 1153
+b 1151
+b 1
+b 7
+b 9
+b 14
+b 6
+b 5
+b 1
+b 6
+b 1007
+b 1015
+b 1017
+b 1006
+b 1
+b 62
+b 72
+b 28
+b 30
+b 32
+b 124
+b 126
+b 67
+b 65
+b 1
+b 244
+b 246
+b 241
+b 1
+b 41
+b 40
+b 1
+b 187
+b 189
+b 191
+b 189
+b 1
+b 102
+b 104
+b 106
+b 108
+b 37
+b 21
+b 20
+b 1
+b 7
+b 123
+b 125
+b 127
+b 129
+b 127
+b 1
+b 137
+b 136
+b 1
+b 16
+b 18
+b 87
+b 103
+b 87
+b 1
+b 99
+b 1
+b 208
+b 210
+b 208
+b 1
+b 8
+b 40
+b 57
+b 39
+b 1
+b 7
+b 8
+b 100
+b 145
+b 210
+b 144
+b 1
+b 206
+b 1
+b 16
+b 202
+b 204
+b 206
+b 204
+b 1
+b 450
+b 466
+b 90
+b 92
+b 108
+b 90
+b 1
+b 473
+b 475
+b 509
+b 508
+b 1
+b 175
+b 186
+b 183
+b 1
+b 22
+b 11
+b 20
+b 10
+b 1
+b 174
+b 174
+b 1
+b 4
+b 2
+b 1
+b 53
+b 50
+b 1
+b 12
+b 14
+b 14
+b 1
+b 95
+b 97
+b 95
+b 1
+b 159
+b 10
+b 12
+b 29
+b 28
+b 1
+b 30
+b 43
+b 45
+b 29
+b 1
+b 27
+b 29
+b 31
+b 33
+b 27
+b 1
+b 153
+b 30
+b 103
+b 105
+b 107
+b 109
+b 267
+b 269
+b 271
+b 273
+b 203
+b 224
+b 202
+b 1
+b 220
+b 1
+b 106
+b 327
+b 324
+b 1
+b 206
+b 206
+b 1
+b 122
+b 14
+b 205
+b 213
+b 211
+b 1
+b 15
+b 25
+b 17
+b 65
+b 340
+b 441
+b 337
+b 1
+b 8
+b 7
+b 1
+b 71
+b 73
+b 73
+b 1
+b 31
+b 28
+b 1
+b 122
+b 39
+b 18
+b 17
+b 1
+b 18
+b 20
+b 22
+b 24
+b 27
+b 133
+b 8
+b 10
+b 75
+b 74
+b 1
+b 196
+b 195
+b 1
+b 35
+b 0
+b 2
+b 3
+b 5
+b 7
+b 9
+b 85
+b 84
+b 1
+b 122
+b 124
+b 12
+b 73
+b 42
+b 72
+b 74
+b 317
+b 314
+b 1
+b 255
+b 285
+b 176
+b 178
+b 180
+b 178
+b 1
+b 1126
+b 29
+b 58
+b 60
+b 62
+b 64
+b 89
+b 91
+b 106
+b 89
+b 1
+b 26
+b 40
+b 170
+b 6
+b 28
+b 50
+b 49
+b 1
+b 102
+b 8
+b 10
+b 5
+b 4
+b 1
+b 129
+b 139
+b 141
+b 73
+b 82
+b 19
+b 70
+b 69
+b 1
+b 77
+b 76
+b 1
+b 400
+b 402
+b 404
+b 46
+b 61
+b 1
+b 624
+b 626
+b 628
+b 76
+b 78
+b 80
+b 82
+b 3
+b 35
+b 2
+b 1
+b 30
+b 1
+b 8
+b 7
+b 1
+b 80
+b 82
+b 62
+b 21
+b 36
+b 38
+b 57
+b 56
+b 1
+b 10
+b 66
+b 18
+b 20
+b 38
+b 37
+b 1
+b 4
+b 3
+b 1
+b 27
+b 26
+b 1
+b 191
+b 193
+b 195
+b 188
+b 1
+b 193
+b 1
+b 15
+b 36
+b 14
+b 1
+b 32
+b 1
+b 57
+b 76
+b 78
+b 17
+b 19
+b 21
+b 23
+b 14
+b 1
+b 21
+b 1
+b 57
+b 59
+b 57
+b 1
+b 3
+b 171
+b 173
+b 184
+b 273
+b 272
+b 1
+b 45
+b 79
+b 208
+b 9
+b 51
+b 59
+b 2
+b 50
+b 72
+b 3
+b 9
+b 21
+b 27
+b 26
+b 1
+b 2
+b 4
+b 126
+b 228
+b 126
+b 1
+b 224
+b 1
+b 148
+b 37
+b 10
+b 7
+b 1
+b 339
+b 355
+b 336
+b 1
+b 353
+b 1
+b 91
+b 125
+b 127
+b 90
+b 1
+b 217
+b 210
+b 27
+b 29
+b 31
+b 27
+b 1
+b 100
+b 85
+b 87
+b 31
+b 33
+b 35
+b 105
+b 38
+b 151
+b 150
+b 1
+b 63
+b 63
+b 1
+b 86
+b 88
+b 90
+b 230
+b 229
+b 1
+b 3
+b 5
+b 166
+b 182
+b 164
+b 1
+b 180
+b 1
+b 53
+b 52
+b 1
+b 64
+b 0
+b 17
+b 32
+b 128
+b 190
+b 192
+b 5
+b 7
+b 16
+b 2
+b 1
+b 13
+b 1
+b 94
+b 180
+b 196
+b 36
+b 44
+b 52
+b 43
+b 1
+b 79
+b 344
+b 92
+b 91
+b 1
+b 16
+b 15
+b 1
+b 52
+b 51
+b 1
+b 2
+b 4
+b 96
+b 149
+b 151
+b 149
+b 1
+b 128
+b 125
+b 1
+b 20
+b 10
+b 9
+b 1
+b 146
+b 155
+b 157
+b 58
+b 25
+b 104
+b 114
+b 18
+b 20
+b 28
+b 26
+b 1
+b 110
+b 109
+b 1
+b 41
+b 14
+b 74
+b 2
+b 37
+b 3
+b 5
+b 7
+b 52
+b 11
+b 35
+b 58
+b 28
+b 46
+b 69
+b 19
+b 21
+b 19
+b 1
+b 78
+b 91
+b 93
+b 77
+b 1
+b 22
+b 24
+b 26
+b 28
+b 67
+b 77
+b 79
+b 66
+b 1
+b 59
+b 61
+b 102
+b 79
+b 81
+b 97
+b 96
+b 1
+b 364
+b 414
+b 48
+b 50
+b 52
+b 6
+b 8
+b 62
+b 61
+b 1
+b 30
+b 40
+b 119
+b 70
+b 18
+b 17
+b 1
+b 2
+b 4
+b 34
+b 33
+b 1
+b 3
+b 5
+b 384
+b 407
+b 383
+b 1
+b 104
+b 33
+b 35
+b 37
+b 39
+b 63
+b 82
+b 275
+b 300
+b 22
+b 21
+b 1
+b 17
+b 19
+b 75
+b 23
+b 204
+b 11
+b 86
+b 88
+b 90
+b 88
+b 1
+b 149
+b 214
+b 11
+b 13
+b 34
+b 92
+b 94
+b 96
+b 98
+b 287
+b 90
+b 89
+b 1
+b 26
+b 25
+b 1
+b 194
+b 0
+b 2
+b 51
+b 60
+b 107
+b 104
+b 1
+b 33
+b 35
+b 32
+b 32
+b 1
+b 190
+b 188
+b 1
+b 17
+b 19
+b 21
+b 23
+b 17
+b 1
+b 12
+b 6
+b 135
+b 137
+b 139
+b 141
+b 135
+b 1
+b 28
+b 62
+b 61
+b 1
+b 48
+b 7
+b 15
+b 17
+b 6
+b 1
+b 26
+b 50
+b 24
+b 1
+b 47
+b 1
+b 9
+b 221
+b 229
+b 28
+b 19
+b 35
+b 81
+b 106
+b 79
+b 1
+b 23
+b 20
+b 1
+b 110
+b 146
+b 160
+b 109
+b 1
+b 141
+b 1
+b 303
+b 305
+b 305
+b 1
+b 0
+b 2
+b 0
+b 1
+b 35
+b 37
+b 39
+b 37
+b 1
+b 25
+b 6
+b 172
+b 174
+b 176
+b 178
+b 176
+b 1
+b 17
+b 5
+b 119
+b 121
+b 116
+b 1
+b 4
+b 2
+b 1
+b 92
+b 94
+b 9
+b 6
+b 1
+b 34
+b 53
+b 23
+b 17
+b 19
+b 12
+b 289
+b 56
+b 67
+b 66
+b 1
+b 9
+b 8
+b 1
+b 32
+b 34
+b 36
+b 38
+b 36
+b 1
+b 85
+b 95
+b 84
+b 1
+b 519
+b 89
+b 326
+b 334
+b 73
+b 89
+b 91
+b 128
+b 130
+b 1
+b 267
+b 366
+b 32
+b 114
+b 113
+b 1
+b 0
+b 16
+b 104
+b 27
+b 29
+b 31
+b 33
+b 58
+b 60
+b 58
+b 1
+b 57
+b 118
+b 120
+b 122
+b 124
+b 115
+b 1
+b 122
+b 1
+b 223
+b 263
+b 299
+b 262
+b 1
+b 13
+b 15
+b 17
+b 19
+b 806
+b 803
+b 1
+b 58
+b 68
+b 65
+b 8
+b 2
+b 323
+b 320
+b 1
+b 10
+b 12
+b 14
+b 16
+b 235
+b 210
+b 40
+b 38
+b 1
+b 73
+b 75
+b 70
+b 1
+b 190
+b 214
+b 131
+b 28
+b 142
+b 144
+b 146
+b 144
+b 1
+b 10
+b 30
+b 9
+b 1
+b 70
+b 102
+b 125
+b 0
+b 81
+b 83
+b 9
+b 16
+b 18
+b 32
+b 366
+b 36
+b 38
+b 192
+b 194
+b 613
+b 136
+b 77
+b 50
+b 81
+b 100
+b 49
+b 1
+b 313
+b 310
+b 1
+b 79
+b 57
+b 35
+b 164
+b 8
+b 16
+b 7
+b 1
+b 12
+b 1
+b 4
+b 9
+b 11
+b 9
+b 1
+b 7
+b 52
+b 106
+b 108
+b 108
+b 1
+b 14
+b 11
+b 1
+b 47
+b 49
+b 62
+b 47
+b 1
+b 48
+b 47
+b 1
+b 6
+b 3
+b 1
+b 86
+b 3
+b 56
+b 58
+b 60
+b 62
+b 307
+b 305
+b 1
+b 23
+b 51
+b 16
+b 4
+b 37
+b 39
+b 41
+b 41
+b 1
+b 72
+b 71
+b 1
+b 300
+b 12
+b 14
+b 123
+b 125
+b 127
+b 123
+b 1
+b 109
+b 108
+b 110
+b 112
+b 114
+b 323
+b 13
+b 18
+b 17
+b 1
+b 6
+b 13
+b 280
+b 21
+b 9
+b 22
+b 24
+b 8
+b 1
+b 165
+b 197
+b 48
+b 47
+b 1
+b 15
+b 24
+b 44
+b 70
+b 44
+b 46
+b 64
+b 46
+b 1
+b 33
+b 35
+b 37
+b 33
+b 1
+b 69
+b 66
+b 1
+b 7
+b 9
+b 296
+b 295
+b 1
+b 130
+b 1
+b 59
+b 3
+b 589
+b 606
+b 608
+b 606
+b 1
+b 86
+b 107
+b 112
+b 85
+b 1
+b 175
+b 87
+b 89
+b 109
+b 169
+b 166
+b 1
+b 265
+b 23
+b 23
+b 25
+b 27
+b 29
+b 20
+b 1
+b 30
+b 58
+b 60
+b 58
+b 1
+b 9
+b 8
+b 1
+b 3
+b 5
+b 0
+b 1
+b 11
+b 31
+b 350
+b 367
+b 366
+b 1
+b 136
+b 171
+b 7
+b 114
+b 4
+b 3
+b 1
+b 7
+b 433
+b 435
+b 437
+b 439
+b 46
+b 43
+b 1
+b 0
+b 2
+b 56
+b 55
+b 1
+b 57
+b 59
+b 34
+b 33
+b 1
+b 14
+b 30
+b 11
+b 1
+b 63
+b 31
+b 30
+b 1
+b 8
+b 67
+b 66
+b 1
+b 10
+b 12
+b 37
+b 63
+b 3
+b 47
+b 103
+b 46
+b 1
+b 39
+b 57
+b 67
+b 56
+b 1
+b 63
+b 1
+b 65
+b 32
+b 34
+b 36
+b 38
+b 34
+b 1
+b 156
+b 335
+b 14
+b 45
+b 13
+b 1
+b 40
+b 1
+b 24
+b 40
+b 56
+b 65
+b 92
+b 91
+b 1
+b 67
+b 66
+b 1
+b 737
+b 106
+b 108
+b 157
+b 320
+b 216
+b 41
+b 79
+b 38
+b 1
+b 76
+b 1
+b 1121
+b 1120
+b 1
+b 9
+b 21
+b 20
+b 1
+b 40
+b 42
+b 44
+b 37
+b 1
+b 4
+b 12
+b 4
+b 17
+b 52
+b 66
+b 68
+b 66
+b 1
+b 71
+b 78
+b 4
+b 159
+b 177
+b 158
+b 1
+b 143
+b 193
+b 202
+b 201
+b 1
+b 12
+b 16
+b 18
+b 16
+b 1
+b 179
+b 7
+b 115
+b 124
+b 123
+b 1
+b 18
+b 16
+b 39
+b 113
+b 143
+b 145
+b 123
+b 42
+b 44
+b 15
+b 76
+b 81
+b 13
+b 1
+b 71
+b 1
+b 23
+b 25
+b 27
+b 20
+b 1
+b 25
+b 1
+b 107
+b 109
+b 111
+b 113
+b 109
+b 1
+b 14
+b 19
+b 19
+b 1
+b 95
+b 102
+b 92
+b 1
+b 71
+b 73
+b 71
+b 1
+b 61
+b 60
+b 1
+b 56
+b 56
+b 1
+b 313
+b 321
+b 323
+b 312
+b 1
+b 174
+b 196
+b 216
+b 173
+b 1
+b 37
+b 39
+b 41
+b 43
+b 34
+b 1
+b 26
+b 2
+b 119
+b 7
+b 30
+b 6
+b 1
+b 9
+b 6
+b 1
+b 36
+b 36
+b 1
+b 4
+b 6
+b 8
+b 10
+b 73
+b 70
+b 1
+b 58
+b 58
+b 1
+b 18
+b 17
+b 1
+b 5
+b 7
+b 12
+b 24
+b 225
+b 239
+b 7
+b 6
+b 1
+b 307
+b 309
+b 73
+b 72
+b 1
+b 12
+b 14
+b 16
+b 18
+b 16
+b 1
+b 124
+b 226
+b 122
+b 1
+b 68
+b 14
+b 97
+b 112
+b 73
+b 75
+b 77
+b 79
+b 31
+b 33
+b 40
+b 145
+b 155
+b 144
+b 1
+b 151
+b 1
+b 4
+b 24
+b 46
+b 2
+b 1
+b 43
+b 1
+b 81
+b 102
+b 101
+b 1
+b 31
+b 105
+b 157
+b 232
+b 231
+b 1
+b 107
+b 4
+b 6
+b 4
+b 1
+b 92
+b 91
+b 1
+b 414
+b 293
+b 302
+b 13
+b 63
+b 65
+b 116
+b 331
+b 0
+b 8
+b 10
+b 62
+b 438
+b 458
+b 457
+b 1
+b 120
+b 19
+b 21
+b 19
+b 1
+b 41
+b 43
+b 45
+b 47
+b 41
+b 1
+b 289
+b 36
+b 22
+b 24
+b 26
+b 28
+b 34
+b 44
+b 43
+b 1
+b 10
+b 21
+b 35
+b 70
+b 69
+b 1
+b 78
+b 80
+b 82
+b 84
+b 78
+b 1
+b 106
+b 145
+b 103
+b 1
+b 140
+b 1
+b 5
+b 12
+b 14
+b 16
+b 177
+b 176
+b 1
+b 6
+b 4
+b 1
+b 453
+b 1
+b 17
+b 16
+b 1
+b 10
+b 12
+b 12
+b 100
+b 52
+b 18
+b 33
+b 43
+b 15
+b 1
+b 29
+b 44
+b 1
+b 48
+b 50
+b 52
+b 54
+b 73
+b 70
+b 1
+b 10
+b 515
+b 517
+b 515
+b 1
+b 35
+b 185
+b 192
+b 194
+b 184
+b 1
+b 23
+b 25
+b 27
+b 129
+b 162
+b 29
+b 31
+b 66
+b 97
+b 99
+b 111
+b 110
+b 1
+b 428
+b 430
+b 425
+b 1
+b 24
+b 26
+b 75
+b 72
+b 74
+b 76
+b 78
+b 72
+b 1
+b 591
+b 604
+b 309
+b 319
+b 321
+b 319
+b 1
+b 109
+b 106
+b 1
+b 13
+b 10
+b 1
+b 155
+b 18
+b 23
+b 25
+b 133
+b 20
+b 1
+b 130
+b 1
+b 258
+b 255
+b 1
+b 6
+b 36
+b 17
+b 19
+b 10
+b 12
+b 14
+b 16
+b 223
+b 225
+b 245
+b 244
+b 1
+b 465
+b 518
+b 9
+b 46
+b 47
+b 46
+b 1
+b 7
+b 9
+b 221
+b 247
+b 83
+b 85
+b 17
+b 14
+b 24
+b 182
+b 259
+b 50
+b 60
+b 144
+b 154
+b 153
+b 1
+b 13
+b 1
+b 39
+b 0
+b 1
+b 35
+b 1
+b 261
+b 263
+b 280
+b 261
+b 1
+b 137
+b 36
+b 18
+b 20
+b 40
+b 18
+b 1
+b 352
+b 365
+b 8
+b 10
+b 8
+b 1
+b 3
+b 141
+b 162
+b 138
+b 1
+b 159
+b 1
+b 17
+b 19
+b 21
+b 23
+b 17
+b 1
+b 328
+b 330
+b 332
+b 328
+b 1
+b 47
+b 49
+b 51
+b 48
+b 59
+b 61
+b 1347
+b 1349
+b 1351
+b 1363
+b 294
+b 71
+b 185
+b 184
+b 1
+b 30
+b 27
+b 1
+b 190
+b 192
+b 68
+b 107
+b 106
+b 1
+b 20
+b 18
+b 1
+b 30
+b 115
+b 27
+b 1
+b 113
+b 1
+b 361
+b 414
+b 80
+b 82
+b 84
+b 86
+b 108
+b 138
+b 150
+b 66
+b 20
+b 53
+b 47
+b 7
+b 21
+b 29
+b 255
+b 185
+b 8
+b 19
+b 18
+b 1
+b 40
+b 270
+b 280
+b 310
+b 269
+b 1
+b 2
+b 4
+b 2
+b 1
+b 3
+b 42
+b 41
+b 1
+b 15
+b 17
+b 13
+b 20
+b 167
+b 97
+b 99
+b 12
+b 187
+b 11
+b 13
+b 11
+b 1
+b 26
+b 42
+b 44
+b 23
+b 1
+b 42
+b 1
+b 46
+b 48
+b 68
+b 65
+b 1
+b 322
+b 183
+b 322
+b 362
+b 63
+b 62
+b 1
+b 27
+b 0
+b 34
+b 36
+b 36
+b 1
+b 125
+b 124
+b 1
+b 222
+b 224
+b 54
+b 1
+b 125
+b 46
+b 21
+b 1
+b 15
+b 30
+b 32
+b 30
+b 1
+b 33
+b 9
+b 11
+b 13
+b 11
+b 1
+b 78
+b 77
+b 1
+b 8
+b 0
+b 2
+b 14
+b 71
+b 321
+b 210
+b 432
+b 45
+b 31
+b 70
+b 245
+b 243
+b 1
+b 65
+b 73
+b 62
+b 1
+b 10
+b 9
+b 1
+b 179
+b 3
+b 3
+b 13
+b 11
+b 1
+b 254
+b 251
+b 1
+b 4
+b 3
+b 1
+b 5
+b 70
+b 72
+b 74
+b 76
+b 76
+b 78
+b 80
+b 0
+b 237
+b 236
+b 1
+b 205
+b 39
+b 0
+b 2
+b 0
+b 30
+b 32
+b 34
+b 52
+b 70
+b 69
+b 1
+b 115
+b 112
+b 1
+b 57
+b 59
+b 61
+b 39
+b 49
+b 51
+b 36
+b 1
+b 49
+b 1
+b 41
+b 43
+b 45
+b 47
+b 38
+b 1
+b 35
+b 48
+b 50
+b 189
+b 215
+b 181
+b 72
+b 74
+b 94
+b 152
+b 151
+b 1
+b 93
+b 95
+b 97
+b 99
+b 99
+b 1
+b 166
+b 168
+b 181
+b 20
+b 28
+b 47
+b 5
+b 3
+b 16
+b 13
+b 1
+b 176
+b 227
+b 233
+b 22
+b 95
+b 97
+b 95
+b 1
+b 43
+b 45
+b 40
+b 39
+b 1
+b 91
+b 105
+b 90
+b 109
+b 8
+b 10
+b 12
+b 14
+b 8
+b 1
+b 48
+b 47
+b 1
+b 3
+b 5
+b 26
+b 24
+b 1
+b 45
+b 52
+b 43
+b 1
+b 37
+b 39
+b 37
+b 1
+b 35
+b 25
+b 35
+b 33
+b 1
+b 18
+b 41
+b 157
+b 175
+b 174
+b 1
+b 18
+b 16
+b 36
+b 54
+b 15
+b 1
+b 666
+b 665
+b 1
+b 14
+b 45
+b 12
+b 1
+b 45
+b 47
+b 42
+b 1
+b 0
+b 22
+b 24
+b 26
+b 28
+b 60
+b 57
+b 1
+b 14
+b 23
+b 11
+b 1
+b 52
+b 54
+b 56
+b 58
+b 52
+b 1
+b 125
+b 127
+b 129
+b 125
+b 1
+b 70
+b 72
+b 70
+b 1
+b 47
+b 106
+b 108
+b 110
+b 112
+b 77
+b 79
+b 9
+b 23
+b 46
+b 48
+b 46
+b 1
+b 381
+b 29
+b 31
+b 29
+b 1
+b 6
+b 13
+b 33
+b 35
+b 37
+b 39
+b 37
+b 1
+b 147
+b 238
+b 236
+b 249
+b 134
+b 9
+b 77
+b 86
+b 85
+b 1
+b 17
+b 75
+b 125
+b 159
+b 72
+b 1
+b 156
+b 1
+b 189
+b 191
+b 186
+b 1
+b 1081
+b 1079
+b 1
+b 267
+b 292
+b 294
+b 292
+b 1
+b 88
+b 90
+b 4
+b 13
+b 15
+b 66
+b 80
+b 13
+b 1
+b 91
+b 100
+b 102
+b 100
+b 1
+b 24
+b 26
+b 34
+b 189
+b 9
+b 23
+b 123
+b 22
+b 1
+b 1
+b 24
+b 103
+b 105
+b 23
+b 1
+b 14
+b 45
+b 13
+b 1
+b 10
+b 439
+b 6
+b 136
+b 170
+b 135
+b 1
+b 264
+b 179
+b 179
+b 1
+b 217
+b 233
+b 10
+b 28
+b 30
+b 28
+b 1
+b 2
+b 37
+b 2
+b 4
+b 6
+b 4
+b 1
+b 138
+b 140
+b 142
+b 138
+b 1
+b 26
+b 28
+b 56
+b 26
+b 1
+b 24
+b 13
+b 38
+b 145
+b 377
+b 387
+b 376
+b 1
+b 21
+b 29
+b 31
+b 20
+b 1
+b 18
+b 20
+b 22
+b 24
+b 22
+b 1
+b 33
+b 60
+b 30
+b 28
+b 1
+b 34
+b 34
+b 1
+b 24
+b 26
+b 28
+b 30
+b 51
+b 53
+b 55
+b 57
+b 6
+b 5
+b 28
+b 106
+b 108
+b 108
+b 1
+b 7
+b 6
+b 1
+b 20
+b 30
+b 103
+b 129
+b 62
+b 70
+b 72
+b 61
+b 1
+b 39
+b 74
+b 90
+b 121
+b 134
+b 120
+b 1
+b 92
+b 94
+b 96
+b 98
+b 98
+b 1
+b 129
+b 39
+b 38
+b 1
+b 1
+b 82
+b 111
+b 312
+b 13
+b 0
+b 45
+b 62
+b 62
+b 1
+b 427
+b 429
+b 441
+b 62
+b 3
+b 5
+b 160
+b 1
+b 81
+b 70
+b 72
+b 82
+b 115
+b 114
+b 1
+b 8
+b 28
+b 25
+b 1
+b 610
+b 618
+b 1
+b 45
+b 52
+b 54
+b 52
+b 1
+b 156
+b 2
+b 260
+b 273
+b 8
+b 7
+b 1
+b 4
+b 6
+b 170
+b 2
+b 13
+b 27
+b 29
+b 27
+b 1
+b 1096
+b 1098
+b 1337
+b 1093
+b 1
+b 1334
+b 1
+b 28
+b 30
+b 25
+b 1
+b 10
+b 9
+b 1
+b 6
+b 8
+b 10
+b 90
+b 92
+b 120
+b 90
+b 1
+b 52
+b 8
+b 62
+b 64
+b 77
+b 62
+b 1
+b 206
+b 216
+b 205
+b 1
+b 212
+b 1
+b 80
+b 135
+b 137
+b 139
+b 141
+b 139
+b 1
+b 255
+b 257
+b 259
+b 261
+b 252
+b 1
+b 259
+b 1
+b 2
+b 4
+b 6
+b 157
+b 159
+b 161
+b 163
+b 157
+b 1
+b 79
+b 81
+b 83
+b 193
+b 297
+b 192
+b 1
+b 5
+b 135
+b 149
+b 66
+b 65
+b 1
+b 28
+b 1
+b 0
+b 1
+b 82
+b 81
+b 1
+b 38
+b 40
+b 172
+b 191
+b 193
+b 171
+b 1
+b 87
+b 89
+b 125
+b 122
+b 1
+b 106
+b 136
+b 135
+b 1
+b 6
+b 135
+b 32
+b 10
+b 73
+b 21
+b 67
+b 59
+b 61
+b 63
+b 59
+b 1
+b 65
+b 67
+b 69
+b 185
+b 184
+b 1
+b 5
+b 4
+b 8
+b 24
+b 31
+b 5
+b 1
+b 29
+b 1
+b 119
+b 121
+b 73
+b 112
+b 304
+b 306
+b 110
+b 1
+b 304
+b 1
+b 104
+b 134
+b 101
+b 1
+b 131
+b 1
+b 54
+b 71
+b 166
+b 168
+b 184
+b 183
+b 1
+b 4
+b 21
+b 45
+b 47
+b 49
+b 51
+b 47
+b 1
+b 597
+b 90
+b 92
+b 32
+b 54
+b 56
+b 692
+b 700
+b 691
+b 1
+b 696
+b 1
+b 494
+b 4
+b 12
+b 14
+b 132
+b 134
+b 194
+b 77
+b 79
+b 137
+b 136
+b 1
+b 54
+b 56
+b 58
+b 60
+b 58
+b 1
+b 13
+b 15
+b 17
+b 15
+b 1
+b 12
+b 24
+b 26
+b 24
+b 1
+b 136
+b 138
+b 140
+b 138
+b 1
+b 72
+b 74
+b 76
+b 78
+b 74
+b 1
+b 656
+b 47
+b 30
+b 93
+b 95
+b 93
+b 1
+b 99
+b 13
+b 27
+b 55
+b 150
+b 152
+b 154
+b 156
+b 47
+b 44
+b 1
+b 12
+b 12
+b 1
+b 415
+b 33
+b 254
+b 261
+b 10
+b 1
+b 93
+b 92
+b 1
+b 33
+b 35
+b 87
+b 86
+b 1
+b 19
+b 21
+b 29
+b 185
+b 215
+b 231
+b 184
+b 1
+b 60
+b 75
+b 84
+b 57
+b 1
+b 81
+b 1
+b 17
+b 19
+b 21
+b 547
+b 549
+b 551
+b 553
+b 547
+b 1
+b 178
+b 265
+b 175
+b 1
+b 262
+b 1
+b 113
+b 115
+b 117
+b 119
+b 113
+b 1
+b 133
+b 156
+b 158
+b 42
+b 39
+b 1
+b 21
+b 23
+b 84
+b 83
+b 1
+b 55
+b 57
+b 16
+b 128
+b 0
+b 80
+b 93
+b 121
+b 120
+b 1
+b 9
+b 8
+b 1
+b 8
+b 10
+b 37
+b 58
+b 5
+b 7
+b 55
+b 53
+b 1
+b 87
+b 89
+b 91
+b 87
+b 1
+b 23
+b 25
+b 49
+b 18
+b 42
+b 120
+b 17
+b 19
+b 18
+b 11
+b 85
+b 147
+b 149
+b 151
+b 65
+b 84
+b 64
+b 1
+b 79
+b 1
+b 424
+b 49
+b 49
+b 1
+b 270
+b 3
+b 157
+b 27
+b 45
+b 173
+b 11
+b 9
+b 1
+b 532
+b 15
+b 74
+b 71
+b 1
+b 9
+b 7
+b 1
+b 25
+b 35
+b 98
+b 23
+b 1
+b 94
+b 1
+b 93
+b 19
+b 16
+b 1
+b 113
+b 148
+b 158
+b 112
+b 1
+b 155
+b 1
+b 133
+b 34
+b 80
+b 119
+b 127
+b 118
+b 1
+b 33
+b 35
+b 37
+b 35
+b 1
+b 87
+b 99
+b 86
+b 1
+b 95
+b 1
+b 58
+b 13
+b 15
+b 23
+b 64
+b 229
+b 4
+b 3
+b 1
+b 3
+b 97
+b 94
+b 1
+b 9
+b 11
+b 6
+b 1
+b 61
+b 63
+b 35
+b 34
+b 1
+b 78
+b 26
+b 63
+b 65
+b 67
+b 69
+b 26
+b 23
+b 1
+b 0
+b 2
+b 43
+b 42
+b 1
+b 7
+b 9
+b 1
+b 120
+b 122
+b 124
+b 82
+b 92
+b 91
+b 1
+b 3
+b 4
+b 6
+b 16
+b 15
+b 1
+b 324
+b 335
+b 113
+b 133
+b 29
+b 91
+b 42
+b 74
+b 113
+b 115
+b 117
+b 119
+b 115
+b 1
+b 21
+b 119
+b 57
+b 59
+b 61
+b 59
+b 1
+b 516
+b 3
+b 5
+b 123
+b 125
+b 127
+b 125
+b 1
+b 13
+b 15
+b 7
+b 6
+b 1
+b 287
+b 307
+b 309
+b 286
+b 1
+b 10
+b 33
+b 157
+b 159
+b 258
+b 19
+b 33
+b 18
+b 1
+b 29
+b 1
+b 25
+b 9
+b 11
+b 13
+b 15
+b 252
+b 2
+b 4
+b 8
+b 8
+b 1
+b 293
+b 303
+b 291
+b 1
+b 112
+b 2
+b 65
+b 146
+b 148
+b 80
+b 82
+b 53
+b 52
+b 1
+b 93
+b 95
+b 31
+b 30
+b 1
+b 103
+b 123
+b 37
+b 10
+b 89
+b 87
+b 1
+b 69
+b 142
+b 140
+b 1
+b 44
+b 44
+b 1
+b 155
+b 154
+b 1
+b 4
+b 2
+b 80
+b 82
+b 92
+b 43
+b 57
+b 56
+b 1
+b 11
+b 32
+b 34
+b 44
+b 43
+b 1
+b 48
+b 50
+b 52
+b 61
+b 210
+b 262
+b 207
+b 1
+b 258
+b 1
+b 66
+b 95
+b 2
+b 4
+b 6
+b 8
+b 283
+b 282
+b 1
+b 134
+b 136
+b 88
+b 6
+b 684
+b 686
+b 498
+b 14
+b 13
+b 1
+b 7
+b 7
+b 1
+b 38
+b 30
+b 27
+b 1
+b 0
+b 105
+b 17
+b 19
+b 17
+b 1
+b 6
+b 22
+b 3
+b 1
+b 20
+b 1
+b 31
+b 77
+b 30
+b 1
+b 72
+b 1
+b 0
+b 2
+b 9
+b 17
+b 9
+b 33
+b 149
+b 179
+b 34
+b 84
+b 5
+b 15
+b 46
+b 37
+b 104
+b 103
+b 1
+b 11
+b 55
+b 161
+b 62
+b 76
+b 75
+b 1
+b 8
+b 34
+b 5
+b 1
+b 14
+b 19
+b 29
+b 31
+b 250
+b 258
+b 249
+b 1
+b 322
+b 324
+b 352
+b 319
+b 1
+b 350
+b 1
+b 147
+b 164
+b 146
+b 1
+b 10
+b 150
+b 152
+b 154
+b 4
+b 263
+b 265
+b 295
+b 263
+b 1
+b 36
+b 13
+b 347
+b 544
+b 7
+b 30
+b 330
+b 344
+b 150
+b 150
+b 1
+b 10
+b 8
+b 1
+b 1
+b 264
+b 274
+b 120
+b 3
+b 156
+b 216
+b 8
+b 31
+b 33
+b 40
+b 42
+b 64
+b 29
+b 90
+b 92
+b 90
+b 1
+b 10
+b 70
+b 21
+b 145
+b 147
+b 145
+b 1
+b 125
+b 127
+b 125
+b 1
+b 0
+b 2
+b 14
+b 23
+b 41
+b 13
+b 1
+b 248
+b 245
+b 1
+b 3
+b 73
+b 75
+b 112
+b 183
+b 3
+b 211
+b 218
+b 209
+b 1
+b 1
+b 0
+b 1
+b 54
+b 56
+b 58
+b 60
+b 54
+b 1
+b 49
+b 51
+b 53
+b 55
+b 46
+b 1
+b 88
+b 90
+b 100
+b 85
+b 1
+b 97
+b 1
+b 120
+b 260
+b 77
+b 79
+b 81
+b 79
+b 1
+b 101
+b 125
+b 127
+b 125
+b 1
+b 3
+b 17
+b 101
+b 103
+b 105
+b 107
+b 98
+b 1
+b 8
+b 8
+b 1
+b 11
+b 10
+b 1
+b 46
+b 48
+b 50
+b 46
+b 1
+b 78
+b 64
+b 52
+b 73
+b 38
+b 37
+b 1
+b 46
+b 48
+b 48
+b 1
+b 10
+b 293
+b 295
+b 28
+b 27
+b 1
+b 85
+b 87
+b 89
+b 643
+b 653
+b 5
+b 32
+b 140
+b 16
+b 123
+b 15
+b 1
+b 50
+b 119
+b 121
+b 75
+b 18
+b 37
+b 36
+b 1
+b 2
+b 4
+b 6
+b 33
+b 43
+b 45
+b 43
+b 1
+b 245
+b 247
+b 249
+b 251
+b 249
+b 1
+b 9
+b 31
+b 40
+b 30
+b 1
+b 20
+b 22
+b 24
+b 26
+b 17
+b 1
+b 123
+b 75
+b 55
+b 45
+b 25
+b 50
+b 139
+b 136
+b 1
+b 295
+b 293
+b 1
+b 60
+b 62
+b 72
+b 208
+b 234
+b 233
+b 1
+b 203
+b 205
+b 207
+b 203
+b 1
+b 107
+b 3
+b 84
+b 100
+b 155
+b 245
+b 18
+b 28
+b 85
+b 82
+b 1
+b 6
+b 4
+b 1
+b 216
+b 278
+b 280
+b 278
+b 1
+b 110
+b 73
+b 57
+b 56
+b 1
+b 0
+b 2
+b 0
+b 1
+b 43
+b 110
+b 203
+b 205
+b 49
+b 51
+b 95
+b 180
+b 234
+b 6
+b 8
+b 11
+b 61
+b 69
+b 20
+b 19
+b 1
+b 4
+b 6
+b 40
+b 42
+b 44
+b 37
+b 1
+b 42
+b 1
+b 104
+b 118
+b 116
+b 130
+b 100
+b 122
+b 12
+b 14
+b 31
+b 30
+b 1
+b 87
+b 87
+b 1
+b 103
+b 100
+b 1
+b 0
+b 110
+b 112
+b 114
+b 116
+b 38
+b 50
+b 34
+b 36
+b 34
+b 1
+b 9
+b 100
+b 102
+b 104
+b 106
+b 97
+b 1
+b 104
+b 1
+b 67
+b 141
+b 204
+b 216
+b 218
+b 201
+b 1
+b 216
+b 1
+b 290
+b 292
+b 294
+b 296
+b 37
+b 39
+b 41
+b 43
+b 81
+b 83
+b 85
+b 148
+b 5
+b 7
+b 84
+b 86
+b 94
+b 63
+b 65
+b 65
+b 1
+b 10
+b 14
+b 11
+b 1
+b 11
+b 20
+b 22
+b 17
+b 1
+b 38
+b 37
+b 1
+b 193
+b 192
+b 1
+b 9
+b 23
+b 268
+b 275
+b 105
+b 107
+b 109
+b 111
+b 105
+b 1
+b 61
+b 36
+b 38
+b 36
+b 1
+b 57
+b 59
+b 61
+b 63
+b 134
+b 143
+b 137
+b 139
+b 141
+b 143
+b 146
+b 12
+b 121
+b 123
+b 121
+b 1
+b 90
+b 91
+b 101
+b 103
+b 101
+b 1
+b 12
+b 20
+b 63
+b 65
+b 67
+b 69
+b 60
+b 1
+b 67
+b 1
+b 52
+b 14
+b 16
+b 100
+b 126
+b 38
+b 37
+b 1
+b 15
+b 17
+b 13
+b 38
+b 57
+b 61
+b 8
+b 5
+b 1
+b 58
+b 56
+b 1
+b 56
+b 59
+b 61
+b 63
+b 65
+b 59
+b 1
+b 25
+b 22
+b 1
+b 15
+b 12
+b 1
+b 126
+b 128
+b 130
+b 126
+b 1
+b 149
+b 151
+b 161
+b 160
+b 1
+b 88
+b 90
+b 92
+b 88
+b 1
+b 245
+b 247
+b 249
+b 247
+b 1
+b 50
+b 18
+b 20
+b 18
+b 1
+b 103
+b 116
+b 102
+b 1
+b 111
+b 1
+b 80
+b 108
+b 110
+b 360
+b 38
+b 37
+b 1
+b 126
+b 38
+b 29
+b 173
+b 170
+b 1
+b 54
+b 25
+b 27
+b 93
+b 92
+b 1
+b 99
+b 97
+b 1
+b 66
+b 63
+b 1
+b 255
+b 253
+b 1
+b 92
+b 94
+b 34
+b 14
+b 16
+b 14
+b 1
+b 56
+b 23
+b 131
+b 133
+b 149
+b 131
+b 1
+b 55
+b 67
+b 66
+b 1
+b 287
+b 130
+b 66
+b 68
+b 70
+b 90
+b 66
+b 1
+b 27
+b 33
+b 32
+b 1
+b 41
+b 53
+b 318
+b 335
+b 105
+b 107
+b 109
+b 107
+b 1
+b 150
+b 3
+b 5
+b 166
+b 168
+b 4
+b 1
+b 109
+b 111
+b 120
+b 245
+b 252
+b 89
+b 66
+b 37
+b 50
+b 14
+b 13
+b 1
+b 9
+b 128
+b 102
+b 35
+b 156
+b 164
+b 163
+b 1
+b 120
+b 119
+b 1
+b 343
+b 436
+b 438
+b 425
+b 439
+b 1
+b 57
+b 100
+b 17
+b 271
+b 281
+b 118
+b 128
+b 370
+b 451
+b 453
+b 451
+b 1
+b 121
+b 123
+b 125
+b 121
+b 1
+b 15
+b 77
+b 3
+b 35
+b 109
+b 111
+b 113
+b 77
+b 91
+b 300
+b 3
+b 116
+b 18
+b 87
+b 44
+b 46
+b 44
+b 1
+b 93
+b 72
+b 417
+b 0
+b 2
+b 35
+b 220
+b 4
+b 11
+b 35
+b 37
+b 13
+b 21
+b 103
+b 102
+b 1
+b 33
+b 150
+b 160
+b 149
+b 1
+b 156
+b 1
+b 1
+b 356
+b 353
+b 1
+b 49
+b 59
+b 58
+b 1
+b 201
+b 203
+b 205
+b 0
+b 2
+b 732
+b 774
+b 787
+b 731
+b 1
+b 769
+b 1
+b 265
+b 272
+b 274
+b 264
+b 1
+b 21
+b 5
+b 7
+b 31
+b 372
+b 154
+b 156
+b 57
+b 85
+b 87
+b 55
+b 1
+b 85
+b 1
+b 42
+b 16
+b 67
+b 69
+b 94
+b 93
+b 1
+b 57
+b 79
+b 8
+b 10
+b 12
+b 8
+b 1
+b 8
+b 10
+b 14
+b 13
+b 1
+b 38
+b 50
+b 59
+b 105
+b 114
+b 58
+b 1
+b 5
+b 7
+b 9
+b 137
+b 150
+b 152
+b 22
+b 117
+b 1
+b 5
+b 33
+b 31
+b 33
+b 35
+b 37
+b 169
+b 171
+b 173
+b 175
+b 171
+b 1
+b 28
+b 38
+b 55
+b 54
+b 1
+b 3
+b 5
+b 7
+b 9
+b 3
+b 1
+b 14
+b 25
+b 22
+b 28
+b 36
+b 260
+b 276
+b 278
+b 276
+b 1
+b 134
+b 136
+b 6
+b 5
+b 1
+b 76
+b 86
+b 6
+b 16
+b 5
+b 1
+b 17
+b 120
+b 66
+b 68
+b 78
+b 63
+b 1
+b 75
+b 1
+b 6
+b 46
+b 48
+b 3
+b 1
+b 46
+b 1
+b 15
+b 49
+b 24
+b 23
+b 1
+b 24
+b 2
+b 4
+b 21
+b 162
+b 164
+b 7
+b 6
+b 1
+b 16
+b 15
+b 1
+b 4
+b 15
+b 17
+b 19
+b 17
+b 1
+b 62
+b 75
+b 59
+b 1
+b 1
+b 10
+b 9
+b 1
+b 174
+b 39
+b 141
+b 15
+b 454
+b 456
+b 458
+b 460
+b 94
+b 127
+b 202
+b 204
+b 206
+b 208
+b 208
+b 1
+b 160
+b 162
+b 160
+b 1
+b 23
+b 147
+b 41
+b 117
+b 161
+b 163
+b 116
+b 1
+b 58
+b 58
+b 106
+b 108
+b 110
+b 112
+b 106
+b 1
+b 21
+b 56
+b 56
+b 58
+b 60
+b 62
+b 56
+b 1
+b 27
+b 29
+b 44
+b 43
+b 1
+b 235
+b 243
+b 250
+b 249
+b 1
+b 77
+b 7
+b 38
+b 45
+b 8
+b 19
+b 18
+b 1
+b 60
+b 59
+b 1
+b 117
+b 119
+b 135
+b 117
+b 1
+b 10
+b 20
+b 83
+b 85
+b 83
+b 1
+b 41
+b 46
+b 48
+b 56
+b 55
+b 1
+b 56
+b 58
+b 60
+b 62
+b 56
+b 1
+b 27
+b 39
+b 71
+b 26
+b 1
+b 22
+b 43
+b 45
+b 21
+b 1
+b 91
+b 93
+b 95
+b 91
+b 1
+b 16
+b 16
+b 1
+b 106
+b 20
+b 22
+b 24
+b 22
+b 1
+b 129
+b 131
+b 133
+b 129
+b 1
+b 19
+b 21
+b 26
+b 74
+b 120
+b 139
+b 289
+b 299
+b 301
+b 288
+b 1
+b 12
+b 21
+b 64
+b 20
+b 1
+b 40
+b 57
+b 37
+b 1
+b 44
+b 42
+b 1
+b 26
+b 43
+b 67
+b 42
+b 1
+b 68
+b 105
+b 20
+b 22
+b 24
+b 26
+b 20
+b 1
+b 5
+b 7
+b 9
+b 173
+b 175
+b 177
+b 179
+b 177
+b 1
+b 73
+b 92
+b 0
+b 10
+b 175
+b 177
+b 179
+b 175
+b 1
+b 5
+b 7
+b 9
+b 11
+b 9
+b 1
+b 9
+b 53
+b 8
+b 1
+b 50
+b 1
+b 0
+b 2
+b 29
+b 28
+b 1
+b 6
+b 8
+b 3
+b 1
+b 138
+b 56
+b 157
+b 159
+b 242
+b 157
+b 1
+b 3
+b 13
+b 140
+b 142
+b 150
+b 140
+b 1
+b 1064
+b 1326
+b 1061
+b 1
+b 1321
+b 1
+b 232
+b 231
+b 1
+b 26
+b 35
+b 23
+b 1
+b 133
+b 135
+b 195
+b 194
+b 1
+b 26
+b 35
+b 34
+b 1
+b 307
+b 309
+b 311
+b 304
+b 1
+b 309
+b 1
+b 97
+b 97
+b 1
+b 3
+b 253
+b 4
+b 3
+b 1
+b 4
+b 263
+b 210
+b 58
+b 60
+b 62
+b 64
+b 62
+b 1
+b 74
+b 172
+b 139
+b 203
+b 136
+b 1
+b 5
+b 4
+b 31
+b 789
+b 791
+b 786
+b 1
+b 9
+b 8
+b 1
+b 222
+b 221
+b 1
+b 7
+b 59
+b 61
+b 63
+b 65
+b 65
+b 1
+b 108
+b 39
+b 38
+b 1
+b 7
+b 5
+b 1
+b 28
+b 30
+b 30
+b 1
+b 31
+b 28
+b 1
+b 139
+b 174
+b 85
+b 84
+b 1
+b 60
+b 62
+b 38
+b 37
+b 1
+b 60
+b 57
+b 1
+b 1
+b 19
+b 17
+b 19
+b 41
+b 56
+b 170
+b 205
+b 33
+b 35
+b 30
+b 1
+b 8
+b 51
+b 53
+b 293
+b 48
+b 1
+b 290
+b 1
+b 109
+b 111
+b 113
+b 106
+b 1
+b 224
+b 234
+b 310
+b 326
+b 310
+b 1
+b 162
+b 172
+b 171
+b 1
+b 25
+b 24
+b 1
+b 59
+b 61
+b 63
+b 65
+b 56
+b 1
+b 63
+b 1
+b 95
+b 97
+b 159
+b 11
+b 8
+b 1
+b 61
+b 55
+b 57
+b 59
+b 61
+b 55
+b 1
+b 173
+b 172
+b 1
+b 83
+b 129
+b 128
+b 1
+b 34
+b 36
+b 38
+b 34
+b 1
+b 119
+b 121
+b 123
+b 121
+b 1
+b 3
+b 152
+b 166
+b 21
+b 54
+b 53
+b 1
+b 83
+b 49
+b 59
+b 403
+b 405
+b 407
+b 409
+b 176
+b 173
+b 1
+b 0
+b 2
+b 46
+b 44
+b 1
+b 118
+b 132
+b 117
+b 1
+b 16
+b 71
+b 85
+b 87
+b 70
+b 1
+b 80
+b 1
+b 99
+b 0
+b 2
+b 11
+b 10
+b 1
+b 51
+b 27
+b 303
+b 18
+b 54
+b 51
+b 1
+b 40
+b 114
+b 81
+b 83
+b 102
+b 138
+b 140
+b 127
+b 126
+b 1
+b 6
+b 8
+b 6
+b 1
+b 255
+b 90
+b 98
+b 100
+b 102
+b 104
+b 100
+b 1
+b 45
+b 54
+b 42
+b 44
+b 46
+b 44
+b 1
+b 19
+b 21
+b 23
+b 25
+b 79
+b 81
+b 83
+b 81
+b 1
+b 78
+b 75
+b 1
+b 12
+b 11
+b 1
+b 45
+b 10
+b 9
+b 1
+b 4
+b 54
+b 63
+b 65
+b 63
+b 1
+b 42
+b 40
+b 1
+b 24
+b 24
+b 24
+b 1
+b 69
+b 88
+b 90
+b 68
+b 1
+b 42
+b 284
+b 332
+b 342
+b 102
+b 120
+b 28
+b 30
+b 30
+b 1
+b 6
+b 3
+b 1
+b 11
+b 13
+b 8
+b 1
+b 51
+b 50
+b 1
+b 186
+b 96
+b 88
+b 71
+b 118
+b 117
+b 1
+b 97
+b 99
+b 99
+b 1
+b 203
+b 213
+b 215
+b 1258
+b 1274
+b 1256
+b 1
+b 10
+b 9
+b 1
+b 85
+b 87
+b 100
+b 118
+b 124
+b 126
+b 163
+b 165
+b 167
+b 52
+b 4
+b 56
+b 58
+b 3
+b 271
+b 273
+b 271
+b 1
+b 244
+b 31
+b 31
+b 1
+b 19
+b 16
+b 1
+b 15
+b 40
+b 6
+b 83
+b 166
+b 165
+b 1
+b 6
+b 3
+b 1
+b 65
+b 88
+b 246
+b 245
+b 1
+b 27
+b 36
+b 25
+b 1
+b 79
+b 81
+b 89
+b 5
+b 13
+b 2
+b 1
+b 11
+b 1
+b 41
+b 43
+b 45
+b 58
+b 8
+b 10
+b 12
+b 5
+b 1
+b 8
+b 12
+b 11
+b 1
+b 108
+b 110
+b 28
+b 30
+b 30
+b 1
+b 0
+b 2
+b 0
+b 1
+b 125
+b 127
+b 64
+b 271
+b 273
+b 275
+b 277
+b 275
+b 1
+b 111
+b 113
+b 115
+b 111
+b 1
+b 89
+b 91
+b 93
+b 130
+b 132
+b 11
+b 79
+b 81
+b 76
+b 1
+b 79
+b 1
+b 145
+b 36
+b 88
+b 35
+b 1
+b 85
+b 1
+b 226
+b 255
+b 257
+b 19
+b 33
+b 32
+b 1
+b 15
+b 33
+b 143
+b 145
+b 140
+b 1
+b 39
+b 37
+b 1
+b 34
+b 36
+b 38
+b 31
+b 1
+b 36
+b 1
+b 233
+b 235
+b 263
+b 262
+b 1
+b 12
+b 14
+b 16
+b 12
+b 1
+b 249
+b 91
+b 136
+b 90
+b 1
+b 131
+b 1
+b 8
+b 10
+b 34
+b 33
+b 1
+b 33
+b 47
+b 56
+b 55
+b 1
+b 131
+b 139
+b 128
+b 1
+b 51
+b 51
+b 1
+b 221
+b 15
+b 25
+b 14
+b 1
+b 21
+b 1
+b 56
+b 58
+b 113
+b 223
+b 225
+b 227
+b 229
+b 225
+b 1
+b 871
+b 4
+b 109
+b 1
+b 15
+b 71
+b 71
+b 1
+b 16
+b 0
+b 21
+b 7
+b 13
+b 15
+b 17
+b 19
+b 15
+b 1
+b 37
+b 34
+b 1
+b 0
+b 2
+b 38
+b 43
+b 42
+b 1
+b 9
+b 11
+b 6
+b 1
+b 32
+b 31
+b 1
+b 5
+b 7
+b 262
+b 264
+b 274
+b 262
+b 1
+b 120
+b 174
+b 119
+b 1
+b 4
+b 44
+b 3
+b 9
+b 2
+b 1
+b 85
+b 87
+b 97
+b 96
+b 1
+b 14
+b 16
+b 18
+b 20
+b 11
+b 1
+b 687
+b 737
+b 93
+b 93
+b 1
+b 27
+b 24
+b 1
+b 8
+b 7
+b 1
+b 3
+b 11
+b 10
+b 1
+b 36
+b 46
+b 35
+b 1
+b 18
+b 370
+b 152
+b 16
+b 18
+b 20
+b 162
+b 174
+b 182
+b 173
+b 1
+b 178
+b 1
+b 40
+b 42
+b 44
+b 46
+b 44
+b 1
+b 37
+b 64
+b 1
+b 26
+b 56
+b 58
+b 97
+b 130
+b 132
+b 96
+b 1
+b 46
+b 48
+b 50
+b 52
+b 48
+b 1
+b 37
+b 75
+b 1
+b 18
+b 28
+b 17
+b 1
+b 70
+b 72
+b 74
+b 72
+b 1
+b 8
+b 18
+b 5
+b 1
+b 4
+b 3
+b 28
+b 79
+b 164
+b 190
+b 1
+b 105
+b 121
+b 9
+b 11
+b 13
+b 55
+b 57
+b 59
+b 61
+b 52
+b 1
+b 275
+b 324
+b 350
+b 349
+b 1
+b 87
+b 19
+b 40
+b 50
+b 39
+b 1
+b 46
+b 1
+b 101
+b 2
+b 4
+b 6
+b 8
+b 10
+b 4
+b 1
+b 43
+b 45
+b 47
+b 49
+b 43
+b 1
+b 32
+b 31
+b 1
+b 9
+b 8
+b 1
+b 69
+b 22
+b 24
+b 26
+b 24
+b 46
+b 114
+b 132
+b 134
+b 171
+b 186
+b 791
+b 813
+b 276
+b 233
+b 235
+b 237
+b 239
+b 233
+b 1
+b 85
+b 87
+b 89
+b 91
+b 139
+b 138
+b 1
+b 49
+b 51
+b 120
+b 122
+b 124
+b 85
+b 82
+b 1
+b 0
+b 2
+b 17
+b 0
+b 1
+b 771
+b 785
+b 40
+b 42
+b 47
+b 46
+b 1
+b 111
+b 117
+b 110
+b 1
+b 113
+b 1
+b 9
+b 18
+b 16
+b 1
+b 9
+b 11
+b 6
+b 1
+b 2
+b 2
+b 1
+b 3
+b 35
+b 34
+b 1
+b 0
+b 2
+b 7
+b 696
+b 484
+b 486
+b 11
+b 13
+b 15
+b 13
+b 1
+b 140
+b 142
+b 144
+b 142
+b 1
+b 4
+b 247
+b 161
+b 158
+b 1
+b 17
+b 4
+b 10
+b 12
+b 14
+b 16
+b 14
+b 1
+b 8
+b 16
+b 38
+b 5
+b 1
+b 35
+b 1
+b 6
+b 8
+b 11
+b 10
+b 1
+b 214
+b 213
+b 1
+b 0
+b 2
+b 31
+b 0
+b 1
+b 32
+b 34
+b 44
+b 32
+b 1
+b 46
+b 63
+b 62
+b 1
+b 8
+b 2
+b 4
+b 6
+b 8
+b 6
+b 1
+b 481
+b 147
+b 149
+b 147
+b 1
+b 264
+b 333
+b 246
+b 248
+b 250
+b 252
+b 248
+b 1
+b 153
+b 97
+b 80
+b 82
+b 80
+b 1
+b 0
+b 5
+b 38
+b 38
+b 1
+b 7
+b 274
+b 315
+b 325
+b 273
+b 1
+b 185
+b 211
+b 29
+b 59
+b 67
+b 66
+b 1
+b 156
+b 158
+b 17
+b 16
+b 1
+b 10
+b 1
+b 103
+b 84
+b 17
+b 42
+b 44
+b 0
+b 2
+b 17
+b 77
+b 7
+b 159
+b 183
+b 156
+b 166
+b 37
+b 76
+b 113
+b 36
+b 1
+b 428
+b 42
+b 34
+b 225
+b 257
+b 256
+b 1
+b 7
+b 16
+b 18
+b 16
+b 1
+b 269
+b 3
+b 11
+b 78
+b 10
+b 1
+b 3
+b 264
+b 251
+b 32
+b 34
+b 42
+b 41
+b 1
+b 128
+b 139
+b 138
+b 1
+b 123
+b 122
+b 1
+b 186
+b 203
+b 12
+b 3
+b 165
+b 175
+b 795
+b 809
+b 45
+b 47
+b 49
+b 51
+b 49
+b 1
+b 199
+b 68
+b 49
+b 48
+b 1
+b 0
+b 2
+b 0
+b 1
+b 7
+b 271
+b 17
+b 111
+b 110
+b 1
+b 50
+b 76
+b 213
+b 212
+b 1
+b 74
+b 1
+b 0
+b 1
+b 16
+b 18
+b 20
+b 22
+b 12
+b 9
+b 1
+b 12
+b 4
+b 3
+b 1
+b 85
+b 115
+b 84
+b 1
+b 14
+b 83
+b 93
+b 76
+b 4
+b 73
+b 10
+b 42
+b 70
+b 41
+b 1
+b 21
+b 50
+b 158
+b 28
+b 114
+b 3
+b 247
+b 257
+b 66
+b 63
+b 1
+b 10
+b 21
+b 20
+b 1
+b 36
+b 38
+b 40
+b 51
+b 59
+b 49
+b 1
+b 57
+b 1
+b 101
+b 99
+b 1
+b 75
+b 91
+b 90
+b 1
+b 31
+b 40
+b 42
+b 40
+b 1
+b 164
+b 166
+b 168
+b 170
+b 164
+b 1
+b 61
+b 71
+b 80
+b 82
+b 84
+b 112
+b 166
+b 165
+b 1
+b 37
+b 39
+b 23
+b 118
+b 198
+b 200
+b 202
+b 204
+b 6
+b 8
+b 34
+b 139
+b 138
+b 1
+b 121
+b 40
+b 3
+b 5
+b 105
+b 3
+b 1
+b 28
+b 30
+b 41
+b 40
+b 1
+b 215
+b 269
+b 30
+b 38
+b 36
+b 1
+b 1
+b 8
+b 166
+b 195
+b 165
+b 1
+b 191
+b 1
+b 6
+b 23
+b 35
+b 37
+b 22
+b 1
+b 19
+b 17
+b 16
+b 1
+b 35
+b 380
+b 424
+b 114
+b 113
+b 1
+b 9
+b 17
+b 27
+b 16
+b 1
+b 59
+b 56
+b 1
+b 163
+b 110
+b 109
+b 1
+b 51
+b 163
+b 88
+b 68
+b 70
+b 458
+b 460
+b 462
+b 4
+b 46
+b 120
+b 143
+b 321
+b 328
+b 330
+b 320
+b 1
+b 259
+b 261
+b 263
+b 265
+b 259
+b 1
+b 94
+b 96
+b 98
+b 100
+b 94
+b 1
+b 35
+b 37
+b 39
+b 35
+b 1
+b 205
+b 31
+b 147
+b 149
+b 34
+b 33
+b 1
+b 542
+b 541
+b 1
+b 48
+b 16
+b 47
+b 49
+b 51
+b 53
+b 49
+b 1
+b 6
+b 34
+b 36
+b 5
+b 1
+b 29
+b 1
+b 111
+b 113
+b 119
+b 96
+b 154
+b 196
+b 195
+b 1
+b 68
+b 83
+b 82
+b 1
+b 6
+b 3
+b 1
+b 85
+b 4
+b 39
+b 3
+b 365
+b 134
+b 72
+b 33
+b 35
+b 33
+b 1
+b 155
+b 3
+b 43
+b 52
+b 54
+b 52
+b 1
+b 0
+b 2
+b 48
+b 1
+b 119
+b 13
+b 41
+b 50
+b 15
+b 52
+b 41
+b 40
+b 1
+b 106
+b 108
+b 110
+b 112
+b 149
+b 236
+b 21
+b 108
+b 156
+b 184
+b 194
+b 183
+b 1
+b 190
+b 1
+b 38
+b 40
+b 42
+b 62
+b 40
+b 1
+b 79
+b 81
+b 83
+b 85
+b 79
+b 1
+b 121
+b 11
+b 20
+b 22
+b 22
+b 1
+b 45
+b 44
+b 1
+b 49
+b 57
+b 93
+b 48
+b 1
+b 53
+b 1
+b 241
+b 68
+b 68
+b 1
+b 147
+b 42
+b 41
+b 1
+b 10
+b 179
+b 178
+b 1
+b 1
+b 13
+b 12
+b 1
+b 12
+b 22
+b 29
+b 11
+b 1
+b 18
+b 1
+b 159
+b 142
+b 3
+b 19
+b 50
+b 1
+b 333
+b 123
+b 6
+b 8
+b 10
+b 12
+b 16
+b 2
+b 4
+b 2
+b 1
+b 63
+b 162
+b 22
+b 28
+b 5
+b 37
+b 34
+b 1
+b 107
+b 109
+b 111
+b 368
+b 370
+b 372
+b 374
+b 365
+b 1
+b 372
+b 1
+b 71
+b 12
+b 35
+b 11
+b 1
+b 186
+b 208
+b 37
+b 36
+b 1
+b 172
+b 92
+b 23
+b 30
+b 42
+b 41
+b 1
+b 150
+b 167
+b 169
+b 135
+b 137
+b 5
+b 205
+b 207
+b 205
+b 1
+b 28
+b 30
+b 28
+b 1
+b 17
+b 187
+b 203
+b 208
+b 186
+b 1
+b 68
+b 67
+b 1
+b 1
+b 100
+b 56
+b 70
+b 16
+b 18
+b 16
+b 1
+b 2
+b 21
+b 23
+b 47
+b 45
+b 1
+b 167
+b 226
+b 96
+b 79
+b 321
+b 323
+b 325
+b 343
+b 318
+b 1
+b 358
+b 360
+b 108
+b 2
+b 15
+b 104
+b 106
+b 104
+b 1
+b 37
+b 38
+b 124
+b 126
+b 124
+b 1
+b 5
+b 36
+b 0
+b 2
+b 260
+b 270
+b 272
+b 270
+b 1
+b 165
+b 202
+b 1
+b 646
+b 50
+b 49
+b 1
+b 0
+b 23
+b 116
+b 105
+b 4
+b 27
+b 55
+b 52
+b 1
+b 3
+b 16
+b 1099
+b 1101
+b 39
+b 39
+b 1
+b 17
+b 95
+b 97
+b 82
+b 131
+b 0
+b 310
+b 312
+b 328
+b 312
+b 1
+b 324
+b 1
+b 23
+b 11
+b 44
+b 60
+b 33
+b 32
+b 1
+b 0
+b 2
+b 40
+b 39
+b 1
+b 52
+b 54
+b 56
+b 58
+b 56
+b 1
+b 133
+b 135
+b 137
+b 139
+b 133
+b 1
+b 94
+b 103
+b 154
+b 93
+b 1
+b 67
+b 69
+b 9
+b 6
+b 1
+b 199
+b 56
+b 95
+b 94
+b 1
+b 3
+b 17
+b 3
+b 1
+b 32
+b 31
+b 1
+b 5
+b 1
+b 36
+b 120
+b 103
+b 100
+b 1
+b 3
+b 5
+b 5
+b 1
+b 154
+b 168
+b 0
+b 2
+b 794
+b 796
+b 13
+b 19
+b 21
+b 31
+b 30
+b 1
+b 5
+b 24
+b 32
+b 42
+b 23
+b 1
+b 28
+b 1
+b 130
+b 146
+b 4
+b 3
+b 1
+b 152
+b 154
+b 179
+b 152
+b 1
+b 23
+b 22
+b 1
+b 87
+b 106
+b 84
+b 1
+b 60
+b 76
+b 134
+b 142
+b 47
+b 49
+b 51
+b 49
+b 1
+b 421
+b 418
+b 1
+b 64
+b 70
+b 69
+b 1
+b 39
+b 49
+b 49
+b 61
+b 63
+b 48
+b 1
+b 98
+b 100
+b 102
+b 95
+b 1
+b 34
+b 36
+b 34
+b 1
+b 1
+b 70
+b 69
+b 1
+b 137
+b 0
+b 64
+b 73
+b 63
+b 1
+b 7
+b 105
+b 107
+b 127
+b 139
+b 126
+b 1
+b 5
+b 63
+b 71
+b 51
+b 25
+b 43
+b 4
+b 6
+b 8
+b 6
+b 1
+b 182
+b 97
+b 94
+b 1
+b 13
+b 11
+b 1
+b 43
+b 123
+b 120
+b 1
+b 44
+b 43
+b 1
+b 7
+b 46
+b 4
+b 1
+b 44
+b 1
+b 159
+b 171
+b 173
+b 758
+b 265
+b 14
+b 95
+b 136
+b 138
+b 140
+b 138
+b 1
+b 37
+b 39
+b 41
+b 43
+b 39
+b 1
+b 221
+b 229
+b 227
+b 1
+b 1
+b 14
+b 4
+b 29
+b 37
+b 94
+b 167
+b 169
+b 167
+b 1
+b 12
+b 14
+b 16
+b 18
+b 14
+b 1
+b 46
+b 135
+b 11
+b 23
+b 25
+b 23
+b 1
+b 5
+b 43
+b 5
+b 1
+b 16
+b 2
+b 14
+b 22
+b 19
+b 1
+b 1
+b 0
+b 1
+b 299
+b 51
+b 167
+b 169
+b 171
+b 173
+b 175
+b 175
+b 1
+b 4
+b 6
+b 8
+b 17
+b 19
+b 21
+b 23
+b 21
+b 1
+b 183
+b 183
+b 1
+b 161
+b 160
+b 1
+b 775
+b 56
+b 40
+b 55
+b 71
+b 70
+b 1
+b 212
+b 246
+b 58
+b 66
+b 68
+b 57
+b 1
+b 201
+b 241
+b 243
+b 198
+b 1
+b 241
+b 1
+b 59
+b 87
+b 8
+b 242
+b 244
+b 246
+b 248
+b 242
+b 1
+b 211
+b 226
+b 228
+b 226
+b 1
+b 100
+b 102
+b 104
+b 97
+b 1
+b 102
+b 1
+b 53
+b 69
+b 53
+b 1
+b 65
+b 1
+b 683
+b 737
+b 739
+b 18
+b 31
+b 64
+b 0
+b 65
+b 51
+b 53
+b 74
+b 10
+b 163
+b 0
+b 5
+b 19
+b 4
+b 3
+b 33
+b 30
+b 1
+b 42
+b 39
+b 1
+b 26
+b 28
+b 12
+b 160
+b 178
+b 180
+b 207
+b 231
+b 204
+b 1
+b 100
+b 98
+b 1
+b 515
+b 37
+b 37
+b 50
+b 36
+b 89
+b 5
+b 13
+b 4
+b 1
+b 8
+b 10
+b 33
+b 9
+b 1
+b 26
+b 59
+b 23
+b 1
+b 56
+b 1
+b 287
+b 7
+b 94
+b 103
+b 5
+b 123
+b 125
+b 134
+b 123
+b 1
+b 45
+b 42
+b 1
+b 29
+b 26
+b 1
+b 5
+b 8
+b 7
+b 1
+b 180
+b 182
+b 29
+b 37
+b 39
+b 37
+b 1
+b 178
+b 257
+b 1
+b 18
+b 14
+b 23
+b 22
+b 1
+b 219
+b 221
+b 223
+b 66
+b 68
+b 70
+b 63
+b 1
+b 72
+b 74
+b 76
+b 78
+b 72
+b 1
+b 26
+b 26
+b 1
+b 7
+b 6
+b 1
+b 1
+b 45
+b 47
+b 49
+b 45
+b 1
+b 11
+b 31
+b 10
+b 1
+b 181
+b 209
+b 211
+b 180
+b 1
+b 204
+b 1
+b 70
+b 72
+b 102
+b 70
+b 1
+b 5
+b 52
+b 60
+b 51
+b 1
+b 56
+b 1
+b 70
+b 72
+b 74
+b 72
+b 1
+b 22
+b 48
+b 188
+b 200
+b 667
+b 666
+b 1
+b 25
+b 38
+b 23
+b 1
+b 59
+b 120
+b 1
+b 92
+b 6
+b 86
+b 389
+b 65
+b 99
+b 111
+b 98
+b 1
+b 98
+b 97
+b 1
+b 197
+b 199
+b 31
+b 44
+b 46
+b 44
+b 1
+b 72
+b 71
+b 1
+b 39
+b 38
+b 1
+b 12
+b 136
+b 146
+b 122
+b 176
+b 278
+b 320
+b 100
+b 102
+b 196
+b 195
+b 1
+b 12
+b 14
+b 23
+b 12
+b 1
+b 34
+b 36
+b 38
+b 36
+b 1
+b 429
+b 439
+b 441
+b 11
+b 26
+b 835
+b 837
+b 835
+b 1
+b 11
+b 132
+b 48
+b 50
+b 68
+b 35
+b 37
+b 55
+b 61
+b 59
+b 1
+b 1
+b 33
+b 31
+b 1
+b 5
+b 26
+b 25
+b 1
+b 3
+b 27
+b 37
+b 425
+b 427
+b 425
+b 1
+b 218
+b 3
+b 59
+b 80
+b 13
+b 12
+b 1
+b 44
+b 46
+b 46
+b 1
+b 21
+b 18
+b 1
+b 12
+b 22
+b 21
+b 1
+b 259
+b 286
+b 1
+b 2
+b 4
+b 6
+b 16
+b 37
+b 277
+b 279
+b 286
+b 277
+b 1
+b 7
+b 5
+b 1
+b 7
+b 120
+b 71
+b 187
+b 237
+b 239
+b 185
+b 1
+b 232
+b 1
+b 89
+b 91
+b 11
+b 10
+b 1
+b 838
+b 840
+b 840
+b 1
+b 13
+b 12
+b 1
+b 40
+b 39
+b 1
+b 21
+b 18
+b 1
+b 60
+b 62
+b 64
+b 698
+b 697
+b 1
+b 8
+b 6
+b 1
+b 474
+b 29
+b 0
+b 2
+b 1
+b 25
+b 23
+b 1
+b 21
+b 20
+b 1
+b 0
+b 14
+b 25
+b 44
+b 46
+b 44
+b 1
+b 507
+b 585
+b 584
+b 1
+b 83
+b 81
+b 1
+b 319
+b 355
+b 375
+b 316
+b 1
+b 43
+b 43
+b 1
+b 7
+b 7
+b 1
+b 61
+b 69
+b 71
+b 59
+b 1
+b 12
+b 9
+b 1
+b 2
+b 4
+b 4
+b 1
+b 116
+b 118
+b 127
+b 116
+b 1
+b 25
+b 27
+b 34
+b 33
+b 54
+b 66
+b 65
+b 1
+b 57
+b 73
+b 54
+b 1
+b 70
+b 1
+b 175
+b 26
+b 132
+b 141
+b 153
+b 131
+b 1
+b 49
+b 12
+b 14
+b 12
+b 1
+b 32
+b 29
+b 1
+b 7
+b 20
+b 4
+b 1
+b 30
+b 32
+b 34
+b 47
+b 5
+b 7
+b 7
+b 52
+b 54
+b 66
+b 54
+b 1
+b 126
+b 128
+b 164
+b 46
+b 84
+b 45
+b 1
+b 113
+b 8
+b 16
+b 29
+b 40
+b 28
+b 1
+b 126
+b 125
+b 1
+b 216
+b 216
+b 1
+b 176
+b 174
+b 1
+b 0
+b 2
+b 6
+b 3
+b 1
+b 141
+b 143
+b 154
+b 141
+b 1
+b 265
+b 367
+b 262
+b 1
+b 364
+b 1
+b 98
+b 100
+b 33
+b 26
+b 66
+b 314
+b 325
+b 327
+b 329
+b 311
+b 1
+b 22
+b 48
+b 184
+b 94
+b 4
+b 6
+b 8
+b 10
+b 4
+b 1
+b 42
+b 44
+b 74
+b 14
+b 12
+b 1
+b 2
+b 4
+b 4
+b 1
+b 14
+b 6
+b 951
+b 949
+b 1
+b 7
+b 9
+b 9
+b 1
+b 109
+b 111
+b 113
+b 115
+b 113
+b 1
+b 79
+b 87
+b 99
+b 201
+b 203
+b 201
+b 1
+b 609
+b 700
+b 93
+b 101
+b 100
+b 1
+b 12
+b 11
+b 1
+b 5
+b 18
+b 19
+b 39
+b 19
+b 1
+b 35
+b 1
+b 82
+b 90
+b 81
+b 1
+b 14
+b 6
+b 11
+b 13
+b 11
+b 1
+b 26
+b 44
+b 29
+b 31
+b 33
+b 31
+b 1
+b 264
+b 9
+b 0
+b 293
+b 292
+b 1
+b 10
+b 3
+b 209
+b 218
+b 142
+b 4
+b 136
+b 138
+b 140
+b 150
+b 228
+b 256
+b 277
+b 227
+b 1
+b 10
+b 37
+b 402
+b 448
+b 52
+b 54
+b 87
+b 52
+b 1
+b 7
+b 46
+b 5
+b 7
+b 17
+b 16
+b 1
+b 154
+b 162
+b 169
+b 153
+b 1
+b 158
+b 1
+b 133
+b 146
+b 148
+b 146
+b 1
+b 92
+b 90
+b 1
+b 72
+b 74
+b 74
+b 1
+b 109
+b 111
+b 113
+b 115
+b 106
+b 1
+b 5
+b 2
+b 1
+b 4
+b 170
+b 194
+b 196
+b 167
+b 1
+b 194
+b 1
+b 135
+b 137
+b 154
+b 32
+b 34
+b 36
+b 38
+b 32
+b 1
+b 44
+b 10
+b 9
+b 1
+b 1
+b 28
+b 91
+b 13
+b 7
+b 15
+b 10
+b 12
+b 10
+b 1
+b 0
+b 2
+b 31
+b 33
+b 35
+b 37
+b 33
+b 1
+b 21
+b 23
+b 25
+b 27
+b 4
+b 6
+b 8
+b 10
+b 31
+b 28
+b 1
+b 7
+b 0
+b 100
+b 102
+b 104
+b 106
+b 100
+b 1
+b 70
+b 87
+b 430
+b 432
+b 434
+b 436
+b 432
+b 1
+b 48
+b 125
+b 127
+b 45
+b 1
+b 125
+b 1
+b 15
+b 14
+b 1
+b 0
+b 2
+b 0
+b 1
+b 2
+b 152
+b 154
+b 30
+b 29
+b 1
+b 23
+b 22
+b 1
+b 4
+b 6
+b 28
+b 25
+b 1
+b 29
+b 26
+b 1
+b 14
+b 14
+b 1
+b 30
+b 271
+b 19
+b 21
+b 205
+b 207
+b 209
+b 205
+b 1
+b 56
+b 58
+b 60
+b 1
+b 238
+b 240
+b 242
+b 244
+b 242
+b 1
+b 107
+b 106
+b 1
+b 107
+b 185
+b 38
+b 52
+b 54
+b 20
+b 46
+b 171
+b 179
+b 181
+b 179
+b 1
+b 3
+b 5
+b 15
+b 164
+b 174
+b 243
+b 251
+b 249
+b 1
+b 28
+b 60
+b 169
+b 166
+b 1
+b 56
+b 55
+b 1
+b 83
+b 81
+b 2
+b 315
+b 323
+b 322
+b 1
+b 30
+b 62
+b 14
+b 20
+b 12
+b 1
+b 18
+b 1
+b 84
+b 3
+b 122
+b 120
+b 1
+b 99
+b 113
+b 96
+b 1
+b 24
+b 26
+b 0
+b 2
+b 83
+b 80
+b 1
+b 4
+b 6
+b 6
+b 1
+b 124
+b 149
+b 123
+b 1
+b 0
+b 2
+b 125
+b 127
+b 129
+b 131
+b 122
+b 1
+b 129
+b 1
+b 8
+b 66
+b 65
+b 1
+b 13
+b 15
+b 17
+b 31
+b 13
+b 1
+b 114
+b 124
+b 2
+b 33
+b 33
+b 1
+b 414
+b 427
+b 441
+b 426
+b 1
+b 437
+b 1
+b 36
+b 38
+b 49
+b 239
+b 256
+b 48
+b 326
+b 325
+b 1
+b 186
+b 188
+b 86
+b 36
+b 35
+b 1
+b 8
+b 7
+b 1
+b 107
+b 116
+b 118
+b 106
+b 1
+b 121
+b 158
+b 160
+b 9
+b 8
+b 1
+b 58
+b 60
+b 29
+b 28
+b 1
+b 25
+b 22
+b 1
+b 40
+b 48
+b 55
+b 38
+b 1
+b 10
+b 12
+b 10
+b 1
+b 62
+b 9
+b 8
+b 1
+b 1
+b 7
+b 9
+b 7
+b 9
+b 11
+b 13
+b 9
+b 1
+b 128
+b 138
+b 362
+b 380
+b 11
+b 13
+b 15
+b 17
+b 11
+b 1
+b 8
+b 10
+b 12
+b 12
+b 1
+b 49
+b 203
+b 96
+b 109
+b 301
+b 70
+b 1
+b 159
+b 89
+b 14
+b 16
+b 18
+b 20
+b 18
+b 1
+b 71
+b 89
+b 42
+b 42
+b 1
+b 12
+b 1
+b 0
+b 1
+b 64
+b 74
+b 63
+b 1
+b 70
+b 1
+b 13
+b 122
+b 124
+b 126
+b 128
+b 124
+b 1
+b 8
+b 10
+b 12
+b 14
+b 8
+b 1
+b 26
+b 2
+b 4
+b 2
+b 1
+b 209
+b 211
+b 230
+b 229
+b 1
+b 53
+b 62
+b 19
+b 11
+b 10
+b 1
+b 219
+b 249
+b 11
+b 16
+b 6
+b 171
+b 182
+b 184
+b 186
+b 24
+b 26
+b 28
+b 30
+b 24
+b 1
+b 193
+b 195
+b 197
+b 199
+b 197
+b 1
+b 5
+b 54
+b 113
+b 173
+b 112
+b 1
+b 6
+b 37
+b 64
+b 5
+b 7
+b 9
+b 5
+b 1
+b 141
+b 151
+b 153
+b 151
+b 1
+b 348
+b 350
+b 350
+b 1
+b 123
+b 121
+b 1
+b 181
+b 197
+b 167
+b 166
+b 1
+b 65
+b 67
+b 50
+b 57
+b 56
+b 1
+b 11
+b 61
+b 60
+b 1
+b 152
+b 151
+b 1
+b 7
+b 102
+b 110
+b 169
+b 167
+b 1
+b 88
+b 90
+b 90
+b 1
+b 19
+b 21
+b 23
+b 19
+b 1
+b 88
+b 97
+b 107
+b 87
+b 1
+b 97
+b 95
+b 1
+b 19
+b 21
+b 21
+b 1
+b 7
+b 56
+b 43
+b 45
+b 47
+b 47
+b 1
+b 407
+b 417
+b 10
+b 12
+b 14
+b 16
+b 14
+b 1
+b 41
+b 90
+b 92
+b 18
+b 20
+b 22
+b 24
+b 20
+b 1
+b 29
+b 31
+b 36
+b 18
+b 87
+b 7
+b 105
+b 102
+b 1
+b 0
+b 2
+b 0
+b 1
+b 1
+b 218
+b 256
+b 127
+b 4
+b 6
+b 34
+b 62
+b 33
+b 1
+b 29
+b 31
+b 33
+b 35
+b 37
+b 29
+b 1
+b 53
+b 55
+b 34
+b 31
+b 1
+b 30
+b 27
+b 1
+b 49
+b 0
+b 2
+b 12
+b 196
+b 198
+b 209
+b 196
+b 1
+b 127
+b 126
+b 1
+b 3
+b 13
+b 87
+b 89
+b 91
+b 93
+b 95
+b 93
+b 1
+b 33
+b 35
+b 37
+b 39
+b 31
+b 1
+b 129
+b 126
+b 1
+b 93
+b 92
+b 1
+b 35
+b 32
+b 1
+b 9
+b 6
+b 1
+b 8
+b 46
+b 59
+b 45
+b 1
+b 0
+b 2
+b 21
+b 85
+b 12
+b 3
+b 10
+b 40
+b 305
+b 74
+b 7
+b 79
+b 5
+b 2
+b 5
+b 7
+b 9
+b 11
+b 75
+b 2
+b 19
+b 33
+b 32
+b 1
+b 1
+b 209
+b 79
+b 78
+b 2
+b 39
+b 36
+b 1
+b 31
+b 33
+b 46
+b 248
+b 250
+b 252
+b 254
+b 248
+b 1
+b 50
+b 88
+b 90
+b 49
+b 1
+b 6
+b 21
+b 74
+b 84
+b 73
+b 1
+b 80
+b 1
+b 14
+b 66
+b 64
+b 1
+b 101
+b 103
+b 103
+b 1
+b 364
+b 363
+b 1
+b 28
+b 25
+b 1
+b 63
+b 91
+b 99
+b 98
+b 1
+b 222
+b 243
+b 219
+b 1
+b 3
+b 1
+b 1
+b 6
+b 62
+b 61
+b 1
+b 77
+b 92
+b 97
+b 99
+b 72
+b 76
+b 84
+b 29
+b 7
+b 6
+b 1
+b 307
+b 326
+b 304
+b 1
+b 107
+b 109
+b 111
+b 104
+b 1
+b 109
+b 1
+b 59
+b 61
+b 61
+b 1
+b 2
+b 0
+b 1
+b 99
+b 114
+b 121
+b 113
+b 1
+b 111
+b 144
+b 143
+b 1
+b 55
+b 55
+b 1
+b 5
+b 12
+b 14
+b 16
+b 18
+b 390
+b 401
+b 429
+b 389
+b 1
+b 396
+b 1
+b 139
+b 12
+b 26
+b 28
+b 30
+b 26
+b 1
+b 66
+b 88
+b 95
+b 97
+b 99
+b 101
+b 46
+b 45
+b 1
+b 24
+b 26
+b 138
+b 136
+b 1
+b 17
+b 25
+b 14
+b 1
+b 7
+b 17
+b 31
+b 16
+b 1
+b 26
+b 1
+b 386
+b 429
+b 68
+b 379
+b 139
+b 154
+b 36
+b 166
+b 3
+b 83
+b 85
+b 95
+b 86
+b 107
+b 109
+b 107
+b 1
+b 144
+b 146
+b 4
+b 3
+b 1
+b 27
+b 29
+b 21
+b 330
+b 376
+b 82
+b 84
+b 82
+b 1
+b 65
+b 61
+b 21
+b 57
+b 20
+b 1
+b 54
+b 1
+b 129
+b 2
+b 54
+b 56
+b 58
+b 60
+b 104
+b 49
+b 48
+b 1
+b 64
+b 121
+b 129
+b 53
+b 70
+b 1
+b 39
+b 41
+b 95
+b 93
+b 1
+b 155
+b 157
+b 159
+b 161
+b 159
+b 1
+b 75
+b 108
+b 110
+b 74
+b 1
+b 69
+b 76
+b 67
+b 1
+b 38
+b 18
+b 1
+b 110
+b 109
+b 1
+b 176
+b 3
+b 5
+b 38
+b 37
+b 1
+b 22
+b 4
+b 94
+b 96
+b 98
+b 100
+b 98
+b 1
+b 162
+b 197
+b 194
+b 1
+b 124
+b 123
+b 1
+b 149
+b 168
+b 167
+b 1
+b 42
+b 263
+b 0
+b 2
+b 190
+b 192
+b 218
+b 190
+b 1
+b 168
+b 170
+b 172
+b 170
+b 1
+b 148
+b 155
+b 174
+b 154
+b 1
+b 169
+b 1
+b 46
+b 51
+b 58
+b 67
+b 209
+b 293
+b 48
+b 45
+b 1
+b 32
+b 30
+b 1
+b 1110
+b 1112
+b 24
+b 31
+b 33
+b 35
+b 37
+b 100
+b 99
+b 1
+b 5
+b 129
+b 13
+b 63
+b 56
+b 334
+b 33
+b 97
+b 111
+b 8
+b 7
+b 1
+b 6
+b 3
+b 1
+b 25
+b 23
+b 1
+b 158
+b 160
+b 162
+b 164
+b 270
+b 312
+b 269
+b 1
+b 95
+b 97
+b 110
+b 107
+b 1
+b 51
+b 53
+b 55
+b 57
+b 114
+b 122
+b 111
+b 1
+b 119
+b 1
+b 228
+b 238
+b 240
+b 226
+b 1
+b 238
+b 1
+b 150
+b 27
+b 54
+b 56
+b 54
+b 1
+b 140
+b 137
+b 1
+b 28
+b 30
+b 30
+b 1
+b 32
+b 31
+b 1
+b 22
+b 19
+b 21
+b 23
+b 40
+b 16
+b 1
+b 46
+b 3
+b 5
+b 3
+b 1
+b 11
+b 13
+b 15
+b 17
+b 15
+b 1
+b 89
+b 129
+b 128
+b 1
+b 18
+b 15
+b 22
+b 21
+b 1
+b 37
+b 65
+b 137
+b 136
+b 1
+b 325
+b 327
+b 327
+b 1
+b 55
+b 71
+b 54
+b 1
+b 46
+b 62
+b 44
+b 278
+b 280
+b 278
+b 1
+b 32
+b 34
+b 76
+b 59
+b 61
+b 63
+b 65
+b 59
+b 1
+b 40
+b 10
+b 19
+b 218
+b 2
+b 122
+b 124
+b 126
+b 799
+b 801
+b 835
+b 109
+b 119
+b 146
+b 108
+b 1
+b 115
+b 1
+b 199
+b 108
+b 107
+b 109
+b 123
+b 104
+b 1
+b 120
+b 1
+b 271
+b 270
+b 1
+b 194
+b 71
+b 70
+b 1
+b 16
+b 15
+b 1
+b 22
+b 18
+b 20
+b 51
+b 50
+b 1
+b 13
+b 171
+b 59
+b 61
+b 63
+b 181
+b 183
+b 181
+b 1
+b 163
+b 314
+b 332
+b 24
+b 26
+b 28
+b 30
+b 24
+b 1
+b 13
+b 15
+b 82
+b 108
+b 193
+b 14
+b 8
+b 6
+b 8
+b 10
+b 6
+b 1
+b 5
+b 81
+b 284
+b 286
+b 288
+b 290
+b 288
+b 1
+b 147
+b 144
+b 1
+b 28
+b 220
+b 222
+b 272
+b 220
+b 1
+b 231
+b 258
+b 229
+b 1
+b 5
+b 2
+b 1
+b 246
+b 27
+b 72
+b 74
+b 128
+b 10
+b 12
+b 14
+b 16
+b 10
+b 1
+b 24
+b 26
+b 28
+b 30
+b 32
+b 1
+b 4
+b 21
+b 23
+b 25
+b 53
+b 10
+b 9
+b 1
+b 0
+b 19
+b 21
+b 19
+b 1
+b 7
+b 137
+b 62
+b 69
+b 60
+b 54
+b 53
+b 1
+b 5
+b 42
+b 41
+b 1
+b 135
+b 134
+b 1
+b 32
+b 81
+b 29
+b 1
+b 79
+b 363
+b 362
+b 1
+b 3
+b 5
+b 7
+b 5
+b 1
+b 20
+b 26
+b 28
+b 22
+b 21
+b 1
+b 9
+b 10
+b 32
+b 34
+b 36
+b 1
+b 22
+b 81
+b 21
+b 1
+b 361
+b 34
+b 40
+b 5
+b 4
+b 1
+b 41
+b 1
+b 181
+b 7
+b 15
+b 25
+b 12
+b 1
+b 4
+b 41
+b 50
+b 52
+b 50
+b 1
+b 120
+b 281
+b 319
+b 318
+b 1
+b 145
+b 147
+b 149
+b 151
+b 122
+b 144
+b 121
+b 1
+b 68
+b 96
+b 117
+b 98
+b 112
+b 95
+b 1
+b 12
+b 11
+b 1
+b 14
+b 24
+b 26
+b 60
+b 60
+b 1
+b 1
+b 10
+b 12
+b 14
+b 16
+b 7
+b 1
+b 66
+b 79
+b 136
+b 147
+b 135
+b 1
+b 198
+b 220
+b 259
+b 219
+b 1
+b 97
+b 111
+b 96
+b 1
+b 106
+b 1
+b 16
+b 163
+b 189
+b 191
+b 161
+b 1
+b 189
+b 1
+b 355
+b 355
+b 1
+b 53
+b 67
+b 134
+b 79
+b 6
+b 8
+b 39
+b 38
+b 1
+b 10
+b 16
+b 186
+b 167
+b 174
+b 4
+b 3
+b 1
+b 6
+b 4
+b 1
+b 53
+b 52
+b 1
+b 38
+b 48
+b 45
+b 69
+b 42
+b 1
+b 67
+b 1
+b 8
+b 30
+b 9
+b 11
+b 23
+b 16
+b 25
+b 35
+b 34
+b 1
+b 83
+b 240
+b 237
+b 1
+b 118
+b 55
+b 1
+b 358
+b 360
+b 362
+b 370
+b 360
+b 1
+b 62
+b 60
+b 264
+b 266
+b 278
+b 264
+b 1
+b 151
+b 211
+b 232
+b 210
+b 1
+b 228
+b 1
+b 266
+b 268
+b 270
+b 268
+b 1
+b 358
+b 360
+b 362
+b 364
+b 49
+b 51
+b 89
+b 86
+b 1
+b 129
+b 128
+b 1
+b 1
+b 33
+b 72
+b 71
+b 1
+b 16
+b 31
+b 1051
+b 1309
+b 212
+b 235
+b 212
+b 1
+b 93
+b 95
+b 97
+b 3
+b 2
+b 1
+b 97
+b 99
+b 111
+b 110
+b 1
+b 297
+b 331
+b 330
+b 1
+b 73
+b 16
+b 18
+b 30
+b 182
+b 181
+b 1
+b 0
+b 2
+b 28
+b 0
+b 1
+b 9
+b 11
+b 40
+b 38
+b 1
+b 28
+b 42
+b 1
+b 391
+b 144
+b 143
+b 1
+b 2
+b 8
+b 97
+b 25
+b 25
+b 1
+b 249
+b 446
+b 246
+b 1
+b 12
+b 10
+b 1
+b 45
+b 63
+b 30
+b 32
+b 58
+b 30
+b 1
+b 13
+b 15
+b 67
+b 8
+b 94
+b 15
+b 17
+b 19
+b 19
+b 1
+b 161
+b 169
+b 171
+b 169
+b 1
+b 86
+b 141
+b 231
+b 233
+b 235
+b 24
+b 68
+b 23
+b 1
+b 1
+b 70
+b 80
+b 69
+b 1
+b 82
+b 84
+b 86
+b 84
+b 1
+b 5
+b 159
+b 161
+b 159
+b 1
+b 125
+b 106
+b 76
+b 664
+b 664
+b 1
+b 1
+b 1
+b 1
+b 5
+b 6
+b 69
+b 71
+b 73
+b 45
+b 44
+b 1
+b 21
+b 52
+b 18
+b 1
+b 64
+b 66
+b 61
+b 1
+b 1
+b 32
+b 75
+b 77
+b 31
+b 1
+b 27
+b 36
+b 9
+b 8
+b 1
+b 37
+b 79
+b 81
+b 51
+b 141
+b 151
+b 167
+b 148
+b 1
+b 165
+b 1
+b 248
+b 250
+b 248
+b 1
+b 81
+b 7
+b 16
+b 4
+b 1
+b 14
+b 1
+b 120
+b 122
+b 124
+b 122
+b 1
+b 29
+b 28
+b 47
+b 340
+b 338
+b 1
+b 42
+b 58
+b 57
+b 1
+b 12
+b 14
+b 16
+b 26
+b 46
+b 48
+b 50
+b 52
+b 14
+b 1
+b 19
+b 1
+b 1
+b 15
+b 1
+b 6
+b 5
+b 1
+b 4
+b 5
+b 53
+b 82
+b 52
+b 1
+b 77
+b 1
+b 115
+b 153
+b 114
+b 1
+b 1
+b 25
+b 44
+b 45
+b 7
+b 9
+b 7
+b 1
+b 368
+b 370
+b 372
+b 374
+b 374
+b 1
+b 50
+b 52
+b 37
+b 195
+b 197
+b 199
+b 201
+b 199
+b 1
+b 8
+b 21
+b 108
+b 132
+b 162
+b 127
+b 33
+b 35
+b 72
+b 71
+b 1
+b 277
+b 293
+b 306
+b 305
+b 1
+b 153
+b 150
+b 1
+b 223
+b 220
+b 1
+b 239
+b 241
+b 86
+b 85
+b 1
+b 29
+b 38
+b 38
+b 1
+b 124
+b 126
+b 128
+b 130
+b 124
+b 1
+b 567
+b 581
+b 88
+b 125
+b 124
+b 1
+b 87
+b 293
+b 67
+b 471
+b 150
+b 82
+b 112
+b 80
+b 1
+b 104
+b 102
+b 1
+b 85
+b 115
+b 37
+b 68
+b 70
+b 36
+b 1
+b 17
+b 19
+b 21
+b 23
+b 14
+b 1
+b 110
+b 126
+b 109
+b 1
+b 5
+b 32
+b 8
+b 18
+b 53
+b 55
+b 63
+b 61
+b 1
+b 17
+b 19
+b 21
+b 23
+b 17
+b 24
+b 13
+b 31
+b 33
+b 5
+b 7
+b 9
+b 11
+b 2
+b 1
+b 30
+b 32
+b 30
+b 1
+b 70
+b 113
+b 121
+b 110
+b 1
+b 31
+b 30
+b 1
+b 182
+b 137
+b 209
+b 136
+b 1
+b 63
+b 73
+b 75
+b 72
+b 74
+b 117
+b 74
+b 1
+b 129
+b 307
+b 309
+b 15
+b 31
+b 6
+b 11
+b 0
+b 204
+b 228
+b 0
+b 9
+b 17
+b 61
+b 28
+b 30
+b 79
+b 78
+b 1
+b 1304
+b 1306
+b 1308
+b 43
+b 32
+b 31
+b 1
+b 64
+b 28
+b 21
+b 23
+b 25
+b 21
+b 1
+b 63
+b 65
+b 7
+b 23
+b 61
+b 58
+b 1
+b 49
+b 51
+b 82
+b 730
+b 744
+b 727
+b 1
+b 89
+b 88
+b 1
+b 3
+b 5
+b 221
+b 236
+b 233
+b 1
+b 0
+b 11
+b 47
+b 11
+b 1
+b 42
+b 1
+b 52
+b 35
+b 5
+b 21
+b 8
+b 24
+b 26
+b 7
+b 1
+b 16
+b 0
+b 2
+b 6
+b 29
+b 51
+b 80
+b 28
+b 1
+b 46
+b 1
+b 366
+b 378
+b 125
+b 124
+b 1
+b 386
+b 236
+b 235
+b 1
+b 87
+b 102
+b 104
+b 106
+b 108
+b 262
+b 286
+b 259
+b 1
+b 283
+b 1
+b 3
+b 49
+b 51
+b 409
+b 46
+b 3
+b 37
+b 34
+b 33
+b 1
+b 29
+b 373
+b 383
+b 385
+b 387
+b 92
+b 118
+b 120
+b 118
+b 1
+b 53
+b 33
+b 47
+b 32
+b 1
+b 42
+b 1
+b 362
+b 377
+b 376
+b 1
+b 12
+b 26
+b 0
+b 2
+b 152
+b 154
+b 156
+b 158
+b 156
+b 1
+b 43
+b 48
+b 40
+b 1
+b 45
+b 1
+b 116
+b 289
+b 113
+b 1
+b 287
+b 1
+b 83
+b 85
+b 87
+b 83
+b 1
+b 311
+b 313
+b 315
+b 317
+b 313
+b 1
+b 416
+b 418
+b 425
+b 416
+b 1
+b 37
+b 53
+b 55
+b 36
+b 1
+b 27
+b 288
+b 290
+b 126
+b 49
+b 48
+b 1
+b 148
+b 218
+b 68
+b 78
+b 67
+b 1
+b 206
+b 224
+b 205
+b 1
+b 220
+b 1
+b 7
+b 254
+b 256
+b 258
+b 260
+b 251
+b 1
+b 258
+b 1
+b 21
+b 21
+b 1
+b 32
+b 47
+b 29
+b 1
+b 6
+b 8
+b 10
+b 12
+b 3
+b 1
+b 10
+b 1
+b 156
+b 163
+b 281
+b 283
+b 285
+b 287
+b 287
+b 1
+b 96
+b 98
+b 114
+b 113
+b 1
+b 131
+b 131
+b 1
+b 311
+b 310
+b 1
+b 65
+b 79
+b 42
+b 41
+b 1
+b 24
+b 68
+b 157
+b 5
+b 62
+b 64
+b 1
+b 25
+b 27
+b 25
+b 1
+b 5
+b 58
+b 57
+b 1
+b 20
+b 22
+b 56
+b 39
+b 99
+b 109
+b 111
+b 109
+b 1
+b 224
+b 226
+b 278
+b 277
+b 1
+b 27
+b 38
+b 40
+b 96
+b 162
+b 132
+b 146
+b 129
+b 1
+b 29
+b 28
+b 1
+b 163
+b 162
+b 1
+b 12
+b 9
+b 1
+b 95
+b 177
+b 0
+b 8
+b 13
+b 12
+b 1
+b 167
+b 169
+b 164
+b 1
+b 167
+b 1
+b 112
+b 114
+b 116
+b 118
+b 109
+b 1
+b 239
+b 62
+b 61
+b 1
+b 1
+b 140
+b 142
+b 144
+b 57
+b 56
+b 1
+b 44
+b 44
+b 1
+b 179
+b 181
+b 183
+b 185
+b 179
+b 1
+b 344
+b 266
+b 268
+b 23
+b 35
+b 156
+b 158
+b 160
+b 162
+b 160
+b 1
+b 798
+b 795
+b 1
+b 241
+b 243
+b 243
+b 1
+b 8
+b 7
+b 1
+b 1
+b 19
+b 17
+b 76
+b 124
+b 62
+b 64
+b 66
+b 68
+b 7
+b 9
+b 11
+b 9
+b 1
+b 75
+b 68
+b 1058
+b 1060
+b 1060
+b 1
+b 35
+b 33
+b 1
+b 163
+b 16
+b 9
+b 59
+b 58
+b 1
+b 47
+b 76
+b 8
+b 159
+b 236
+b 238
+b 240
+b 242
+b 236
+b 1
+b 75
+b 6
+b 8
+b 6
+b 1
+b 185
+b 198
+b 200
+b 184
+b 1
+b 626
+b 161
+b 193
+b 160
+b 1
+b 76
+b 1
+b 15
+b 14
+b 1
+b 240
+b 21
+b 20
+b 1
+b 38
+b 40
+b 54
+b 51
+b 1
+b 25
+b 8
+b 16
+b 7
+b 1
+b 12
+b 1
+b 40
+b 46
+b 39
+b 1
+b 16
+b 16
+b 569
+b 659
+b 4
+b 6
+b 8
+b 10
+b 136
+b 153
+b 42
+b 41
+b 1
+b 122
+b 144
+b 146
+b 144
+b 1
+b 31
+b 33
+b 35
+b 37
+b 33
+b 1
+b 30
+b 1
+b 43
+b 0
+b 1
+b 38
+b 1
+b 195
+b 185
+b 22
+b 2
+b 84
+b 86
+b 88
+b 90
+b 30
+b 30
+b 1
+b 4
+b 21
+b 44
+b 20
+b 22
+b 37
+b 20
+b 1
+b 3
+b 5
+b 13
+b 12
+b 1
+b 138
+b 206
+b 297
+b 299
+b 301
+b 294
+b 1
+b 71
+b 73
+b 75
+b 71
+b 1
+b 86
+b 88
+b 90
+b 1083
+b 1082
+b 1
+b 13
+b 15
+b 52
+b 52
+b 1
+b 9
+b 9
+b 1
+b 154
+b 163
+b 13
+b 20
+b 22
+b 24
+b 26
+b 28
+b 8
+b 10
+b 12
+b 14
+b 12
+b 1
+b 150
+b 216
+b 150
+b 1
+b 24
+b 5
+b 241
+b 243
+b 245
+b 19
+b 16
+b 1
+b 115
+b 181
+b 6
+b 41
+b 16
+b 18
+b 20
+b 22
+b 13
+b 1
+b 20
+b 1
+b 78
+b 3
+b 5
+b 86
+b 103
+b 111
+b 85
+b 1
+b 18
+b 20
+b 22
+b 24
+b 22
+b 1
+b 246
+b 280
+b 279
+b 1
+b 24
+b 21
+b 1
+b 5
+b 51
+b 48
+b 1
+b 205
+b 207
+b 209
+b 211
+b 205
+b 1
+b 121
+b 159
+b 29
+b 28
+b 1
+b 69
+b 71
+b 204
+b 203
+b 1
+b 11
+b 27
+b 29
+b 12
+b 11
+b 1
+b 3
+b 2
+b 1
+b 357
+b 359
+b 156
+b 26
+b 28
+b 28
+b 1
+b 11
+b 42
+b 7
+b 4
+b 1
+b 4
+b 11
+b 13
+b 3
+b 1
+b 228
+b 7
+b 9
+b 7
+b 1
+b 112
+b 0
+b 2
+b 2
+b 1
+b 253
+b 300
+b 1
+b 184
+b 7
+b 31
+b 30
+b 1
+b 6
+b 3
+b 1
+b 7
+b 241
+b 240
+b 1
+b 82
+b 84
+b 303
+b 0
+b 16
+b 2
+b 4
+b 14
+b 12
+b 1
+b 122
+b 124
+b 122
+b 1
+b 83
+b 74
+b 76
+b 78
+b 80
+b 71
+b 1
+b 78
+b 1
+b 10
+b 9
+b 1
+b 25
+b 1
+b 3
+b 24
+b 0
+b 1
+b 48
+b 58
+b 47
+b 1
+b 58
+b 25
+b 27
+b 25
+b 1
+b 144
+b 188
+b 23
+b 5
+b 127
+b 77
+b 14
+b 13
+b 1
+b 6
+b 12
+b 246
+b 245
+b 1
+b 12
+b 216
+b 215
+b 1
+b 34
+b 36
+b 125
+b 139
+b 54
+b 68
+b 53
+b 1
+b 115
+b 34
+b 4
+b 4
+b 63
+b 8
+b 7
+b 1
+b 139
+b 149
+b 153
+b 32
+b 34
+b 3
+b 5
+b 7
+b 9
+b 7
+b 1
+b 86
+b 119
+b 1054
+b 1052
+b 1
+b 35
+b 37
+b 37
+b 1
+b 91
+b 138
+b 146
+b 88
+b 1
+b 9
+b 14
+b 16
+b 14
+b 1
+b 0
+b 2
+b 58
+b 0
+b 2
+b 1070
+b 1077
+b 1069
+b 1
+b 17
+b 39
+b 41
+b 13
+b 468
+b 511
+b 513
+b 511
+b 1
+b 80
+b 31
+b 3
+b 2
+b 1
+b 246
+b 248
+b 250
+b 252
+b 246
+b 1
+b 247
+b 249
+b 247
+b 1
+b 132
+b 79
+b 207
+b 208
+b 210
+b 212
+b 208
+b 1
+b 50
+b 26
+b 149
+b 151
+b 153
+b 155
+b 84
+b 86
+b 88
+b 81
+b 1
+b 168
+b 170
+b 172
+b 174
+b 174
+b 1
+b 6
+b 16
+b 186
+b 188
+b 190
+b 376
+b 378
+b 380
+b 106
+b 126
+b 4
+b 43
+b 45
+b 43
+b 1
+b 80
+b 93
+b 95
+b 93
+b 1
+b 142
+b 139
+b 1
+b 28
+b 8
+b 10
+b 32
+b 8
+b 1
+b 168
+b 11
+b 258
+b 22
+b 84
+b 195
+b 22
+b 4
+b 6
+b 8
+b 370
+b 372
+b 374
+b 370
+b 1
+b 26
+b 34
+b 23
+b 1
+b 32
+b 1
+b 306
+b 207
+b 204
+b 1
+b 137
+b 136
+b 1
+b 12
+b 82
+b 60
+b 70
+b 72
+b 58
+b 1
+b 70
+b 1
+b 21
+b 6
+b 129
+b 127
+b 1
+b 54
+b 8
+b 6
+b 1
+b 3
+b 0
+b 1
+b 11
+b 10
+b 1
+b 1
+b 32
+b 458
+b 457
+b 1
+b 265
+b 262
+b 1
+b 5
+b 159
+b 156
+b 1
+b 0
+b 2
+b 73
+b 81
+b 38
+b 57
+b 196
+b 195
+b 1
+b 8
+b 6
+b 1
+b 103
+b 38
+b 112
+b 0
+b 105
+b 145
+b 206
+b 208
+b 208
+b 1
+b 39
+b 11
+b 13
+b 13
+b 1
+b 5
+b 2
+b 1
+b 776
+b 46
+b 20
+b 9
+b 1
+b 87
+b 1
+b 167
+b 169
+b 0
+b 0
+b 1
+b 75
+b 77
+b 79
+b 81
+b 77
+b 1
+b 122
+b 124
+b 73
+b 116
+b 113
+b 1
+b 31
+b 66
+b 65
+b 1
+b 60
+b 70
+b 57
+b 1
+b 3
+b 2
+b 1
+b 22
+b 8
+b 14
+b 25
+b 37
+b 24
+b 1
+b 33
+b 1
+b 260
+b 277
+b 259
+b 1
+b 179
+b 209
+b 211
+b 209
+b 1
+b 54
+b 19
+b 0
+b 2
+b 232
+b 231
+b 1
+b 14
+b 16
+b 71
+b 17
+b 19
+b 60
+b 62
+b 64
+b 66
+b 64
+b 1
+b 19
+b 1
+b 0
+b 1
+b 230
+b 240
+b 250
+b 249
+b 1
+b 42
+b 23
+b 249
+b 262
+b 213
+b 215
+b 249
+b 215
+b 1
+b 245
+b 1
+b 233
+b 232
+b 1
+b 256
+b 264
+b 31
+b 30
+b 1
+b 0
+b 2
+b 6
+b 4
+b 18
+b 20
+b 18
+b 1
+b 89
+b 106
+b 105
+b 1
+b 4
+b 2
+b 1
+b 139
+b 19
+b 21
+b 19
+b 1
+b 34
+b 81
+b 116
+b 115
+b 1
+b 124
+b 166
+b 165
+b 1
+b 7
+b 10
+b 21
+b 12
+b 14
+b 16
+b 18
+b 246
+b 243
+b 1
+b 35
+b 34
+b 1
+b 391
+b 4
+b 18
+b 336
+b 94
+b 92
+b 1
+b 23
+b 32
+b 34
+b 32
+b 1
+b 93
+b 113
+b 24
+b 43
+b 52
+b 40
+b 1
+b 103
+b 113
+b 109
+b 197
+b 196
+b 1
+b 182
+b 159
+b 197
+b 199
+b 18
+b 27
+b 43
+b 42
+b 1
+b 79
+b 81
+b 79
+b 1
+b 17
+b 191
+b 190
+b 1
+b 43
+b 86
+b 85
+b 1
+b 13
+b 108
+b 110
+b 274
+b 43
+b 87
+b 89
+b 87
+b 1
+b 203
+b 92
+b 48
+b 47
+b 1
+b 12
+b 11
+b 1
+b 76
+b 76
+b 1
+b 132
+b 215
+b 217
+b 215
+b 1
+b 20
+b 22
+b 24
+b 40
+b 21
+b 20
+b 1
+b 1
+b 132
+b 160
+b 90
+b 98
+b 96
+b 1
+b 162
+b 179
+b 190
+b 189
+b 1
+b 57
+b 94
+b 113
+b 123
+b 133
+b 112
+b 1
+b 119
+b 1
+b 14
+b 30
+b 12
+b 1
+b 24
+b 23
+b 1
+b 105
+b 152
+b 103
+b 1
+b 34
+b 33
+b 1
+b 8
+b 39
+b 8
+b 18
+b 16
+b 1
+b 0
+b 2
+b 2
+b 4
+b 23
+b 35
+b 37
+b 327
+b 349
+b 34
+b 50
+b 57
+b 49
+b 1
+b 14
+b 12
+b 1
+b 5
+b 7
+b 139
+b 141
+b 143
+b 141
+b 1
+b 99
+b 174
+b 171
+b 1
+b 136
+b 166
+b 168
+b 166
+b 1
+b 94
+b 96
+b 94
+b 1
+b 11
+b 329
+b 331
+b 347
+b 329
+b 1
+b 70
+b 83
+b 101
+b 133
+b 592
+b 229
+b 231
+b 34
+b 11
+b 13
+b 15
+b 150
+b 158
+b 184
+b 157
+b 1
+b 57
+b 59
+b 69
+b 57
+b 1
+b 116
+b 142
+b 114
+b 1
+b 140
+b 1
+b 116
+b 2
+b 13
+b 26
+b 13
+b 1
+b 21
+b 1
+b 59
+b 0
+b 13
+b 12
+b 1
+b 7
+b 38
+b 40
+b 116
+b 121
+b 20
+b 19
+b 1
+b 222
+b 3
+b 2
+b 1
+b 29
+b 63
+b 175
+b 2
+b 1
+b 27
+b 29
+b 8
+b 7
+b 1
+b 39
+b 63
+b 6
+b 47
+b 30
+b 3
+b 30
+b 32
+b 54
+b 27
+b 1
+b 51
+b 1
+b 154
+b 192
+b 151
+b 1
+b 110
+b 109
+b 1
+b 372
+b 369
+b 1
+b 161
+b 158
+b 1
+b 75
+b 108
+b 110
+b 313
+b 311
+b 1
+b 194
+b 191
+b 1
+b 168
+b 170
+b 7
+b 6
+b 1
+b 72
+b 88
+b 12
+b 11
+b 1
+b 25
+b 24
+b 1
+b 40
+b 39
+b 50
+b 38
+b 1
+b 46
+b 1
+b 155
+b 3
+b 271
+b 349
+b 359
+b 348
+b 1
+b 355
+b 1
+b 395
+b 394
+b 1
+b 0
+b 2
+b 27
+b 26
+b 1
+b 126
+b 138
+b 137
+b 1
+b 178
+b 178
+b 1
+b 48
+b 101
+b 9
+b 23
+b 6
+b 1
+b 140
+b 192
+b 70
+b 68
+b 2
+b 15
+b 28
+b 12
+b 1
+b 55
+b 52
+b 1
+b 226
+b 223
+b 1
+b 1
+b 203
+b 205
+b 207
+b 209
+b 205
+b 1
+b 23
+b 24
+b 111
+b 113
+b 131
+b 111
+b 1
+b 7
+b 3
+b 183
+b 201
+b 200
+b 1
+b 49
+b 8
+b 45
+b 52
+b 9
+b 88
+b 85
+b 1
+b 395
+b 98
+b 97
+b 1
+b 22
+b 26
+b 28
+b 26
+b 1
+b 13
+b 15
+b 17
+b 19
+b 463
+b 473
+b 461
+b 1
+b 62
+b 59
+b 1
+b 146
+b 148
+b 150
+b 152
+b 143
+b 1
+b 266
+b 277
+b 263
+b 1
+b 74
+b 73
+b 2
+b 258
+b 260
+b 5
+b 4
+b 1
+b 449
+b 446
+b 1
+b 39
+b 54
+b 37
+b 1
+b 34
+b 36
+b 38
+b 40
+b 38
+b 1
+b 8
+b 0
+b 2
+b 12
+b 2
+b 10
+b 32
+b 62
+b 64
+b 112
+b 120
+b 122
+b 27
+b 45
+b 0
+b 0
+b 1
+b 460
+b 243
+b 242
+b 1
+b 34
+b 74
+b 57
+b 67
+b 75
+b 11
+b 617
+b 631
+b 616
+b 1
+b 115
+b 122
+b 124
+b 112
+b 1
+b 125
+b 127
+b 129
+b 6
+b 8
+b 1
+b 28
+b 30
+b 20
+b 19
+b 1
+b 164
+b 166
+b 173
+b 164
+b 1
+b 18
+b 20
+b 22
+b 24
+b 18
+b 1
+b 8
+b 17
+b 16
+b 1
+b 11
+b 108
+b 107
+b 1
+b 148
+b 150
+b 145
+b 1
+b 224
+b 226
+b 12
+b 5
+b 7
+b 2
+b 1
+b 1
+b 30
+b 10
+b 16
+b 18
+b 9
+b 1
+b 200
+b 232
+b 234
+b 232
+b 1
+b 121
+b 153
+b 152
+b 1
+b 1
+b 161
+b 195
+b 299
+b 232
+b 234
+b 27
+b 18
+b 17
+b 1
+b 1
+b 120
+b 132
+b 246
+b 245
+b 1
+b 0
+b 2
+b 117
+b 133
+b 17
+b 46
+b 43
+b 1
+b 449
+b 0
+b 17
+b 19
+b 21
+b 23
+b 19
+b 1
+b 153
+b 17
+b 16
+b 1
+b 4
+b 14
+b 13
+b 15
+b 17
+b 19
+b 17
+b 1
+b 66
+b 68
+b 76
+b 75
+b 1
+b 164
+b 178
+b 177
+b 1
+b 46
+b 45
+b 1
+b 10
+b 7
+b 1
+b 51
+b 53
+b 7
+b 6
+b 1
+b 13
+b 64
+b 427
+b 19
+b 18
+b 1
+b 177
+b 189
+b 224
+b 226
+b 228
+b 244
+b 228
+b 1
+b 240
+b 1
+b 13
+b 38
+b 12
+b 1
+b 33
+b 1
+b 48
+b 0
+b 77
+b 110
+b 192
+b 96
+b 98
+b 96
+b 1
+b 36
+b 43
+b 60
+b 62
+b 74
+b 72
+b 1
+b 44
+b 43
+b 1
+b 24
+b 34
+b 214
+b 220
+b 2
+b 4
+b 6
+b 16
+b 233
+b 243
+b 245
+b 151
+b 164
+b 166
+b 164
+b 1
+b 109
+b 108
+b 1
+b 4
+b 14
+b 1
+b 1
+b 85
+b 1
+b 37
+b 68
+b 67
+b 1
+b 8
+b 10
+b 5
+b 1
+b 156
+b 180
+b 179
+b 1
+b 381
+b 389
+b 45
+b 47
+b 62
+b 61
+b 1
+b 201
+b 274
+b 276
+b 6
+b 36
+b 200
+b 2
+b 15
+b 33
+b 300
+b 4
+b 49
+b 51
+b 49
+b 1
+b 0
+b 2
+b 135
+b 134
+b 1
+b 110
+b 112
+b 87
+b 97
+b 5
+b 45
+b 5
+b 1
+b 41
+b 1
+b 52
+b 31
+b 30
+b 1
+b 1
+b 102
+b 104
+b 106
+b 102
+b 1
+b 15
+b 18
+b 20
+b 18
+b 1
+b 3
+b 5
+b 21
+b 27
+b 29
+b 27
+b 1
+b 32
+b 52
+b 29
+b 1
+b 5
+b 3
+b 1
+b 8
+b 53
+b 76
+b 96
+b 75
+b 1
+b 0
+b 55
+b 76
+b 54
+b 1
+b 270
+b 272
+b 274
+b 276
+b 11
+b 13
+b 15
+b 48
+b 80
+b 254
+b 280
+b 108
+b 165
+b 81
+b 83
+b 85
+b 6
+b 5
+b 1
+b 141
+b 10
+b 58
+b 57
+b 59
+b 54
+b 1
+b 1
+b 97
+b 121
+b 94
+b 1
+b 118
+b 1
+b 343
+b 395
+b 25
+b 27
+b 29
+b 31
+b 31
+b 38
+b 60
+b 37
+b 1
+b 64
+b 66
+b 68
+b 112
+b 61
+b 1
+b 8
+b 58
+b 57
+b 1
+b 3
+b 0
+b 1
+b 60
+b 62
+b 57
+b 1
+b 3
+b 1
+b 1
+b 132
+b 134
+b 136
+b 138
+b 50
+b 79
+b 7
+b 27
+b 4
+b 1
+b 34
+b 91
+b 115
+b 114
+b 1
+b 27
+b 29
+b 29
+b 1
+b 12
+b 26
+b 38
+b 102
+b 88
+b 0
+b 2
+b 365
+b 367
+b 369
+b 371
+b 99
+b 11
+b 98
+b 95
+b 1
+b 6
+b 122
+b 120
+b 1
+b 51
+b 12
+b 11
+b 1
+b 80
+b 84
+b 83
+b 1
+b 120
+b 9
+b 44
+b 36
+b 61
+b 60
+b 1
+b 35
+b 37
+b 37
+b 1
+b 47
+b 123
+b 51
+b 67
+b 6
+b 3
+b 38
+b 74
+b 91
+b 117
+b 119
+b 20
+b 32
+b 41
+b 18
+b 1
+b 116
+b 124
+b 126
+b 124
+b 1
+b 91
+b 101
+b 214
+b 32
+b 14
+b 26
+b 314
+b 316
+b 318
+b 311
+b 1
+b 316
+b 1
+b 123
+b 125
+b 127
+b 129
+b 82
+b 102
+b 144
+b 146
+b 148
+b 150
+b 148
+b 1
+b 549
+b 21
+b 20
+b 1
+b 38
+b 65
+b 88
+b 65
+b 1
+b 83
+b 1
+b 58
+b 119
+b 121
+b 115
+b 81
+b 98
+b 110
+b 112
+b 26
+b 13
+b 15
+b 278
+b 277
+b 1
+b 241
+b 264
+b 263
+b 1
+b 94
+b 106
+b 108
+b 93
+b 1
+b 101
+b 1
+b 114
+b 61
+b 63
+b 92
+b 1
+b 9
+b 7
+b 1
+b 211
+b 273
+b 20
+b 94
+b 12
+b 56
+b 542
+b 544
+b 546
+b 548
+b 546
+b 1
+b 5
+b 7
+b 22
+b 2
+b 1
+b 19
+b 1
+b 8
+b 42
+b 56
+b 55
+b 1
+b 10
+b 12
+b 10
+b 9
+b 1
+b 72
+b 72
+b 1
+b 221
+b 223
+b 225
+b 227
+b 225
+b 1
+b 769
+b 781
+b 117
+b 116
+b 1
+b 61
+b 1
+b 82
+b 123
+b 189
+b 130
+b 140
+b 129
+b 1
+b 78
+b 117
+b 77
+b 1
+b 28
+b 10
+b 43
+b 40
+b 1
+b 113
+b 115
+b 117
+b 113
+b 1
+b 29
+b 36
+b 35
+b 1
+b 11
+b 10
+b 1
+b 21
+b 20
+b 1
+b 59
+b 61
+b 3
+b 34
+b 79
+b 78
+b 1
+b 110
+b 120
+b 149
+b 119
+b 1
+b 8
+b 19
+b 18
+b 1
+b 7
+b 105
+b 149
+b 148
+b 1
+b 0
+b 2
+b 75
+b 19
+b 43
+b 53
+b 156
+b 214
+b 243
+b 245
+b 203
+b 223
+b 2
+b 10
+b 8
+b 29
+b 254
+b 256
+b 297
+b 254
+b 1
+b 45
+b 43
+b 1
+b 7
+b 5
+b 2
+b 1
+b 47
+b 26
+b 12
+b 3
+b 5
+b 3
+b 1
+b 4
+b 3
+b 77
+b 79
+b 91
+b 77
+b 1
+b 5
+b 12
+b 53
+b 0
+b 2
+b 0
+b 1
+b 1
+b 126
+b 128
+b 130
+b 132
+b 126
+b 1
+b 229
+b 250
+b 252
+b 228
+b 1
+b 10
+b 8
+b 1
+b 11
+b 13
+b 8
+b 1
+b 74
+b 68
+b 34
+b 4
+b 145
+b 150
+b 325
+b 324
+b 1
+b 758
+b 768
+b 21
+b 23
+b 31
+b 185
+b 198
+b 249
+b 248
+b 1
+b 160
+b 160
+b 1
+b 20
+b 39
+b 111
+b 1
+b 146
+b 155
+b 21
+b 41
+b 43
+b 12
+b 32
+b 31
+b 1
+b 5
+b 207
+b 209
+b 218
+b 207
+b 1
+b 36
+b 113
+b 115
+b 35
+b 1
+b 108
+b 1
+b 4
+b 6
+b 0
+b 2
+b 36
+b 38
+b 60
+b 38
+b 1
+b 56
+b 1
+b 345
+b 271
+b 167
+b 214
+b 13
+b 12
+b 1
+b 107
+b 104
+b 1
+b 74
+b 74
+b 1
+b 20
+b 10
+b 177
+b 184
+b 175
+b 1
+b 403
+b 402
+b 1
+b 74
+b 11
+b 10
+b 1
+b 23
+b 25
+b 27
+b 23
+b 1
+b 204
+b 206
+b 208
+b 210
+b 210
+b 1
+b 111
+b 110
+b 1
+b 0
+b 2
+b 0
+b 1
+b 8
+b 57
+b 56
+b 1
+b 10
+b 13
+b 12
+b 1
+b 95
+b 9
+b 17
+b 8
+b 1
+b 269
+b 271
+b 273
+b 275
+b 262
+b 65
+b 401
+b 72
+b 69
+b 1
+b 0
+b 1
+b 45
+b 120
+b 1054
+b 29
+b 13
+b 42
+b 44
+b 42
+b 1
+b 53
+b 16
+b 18
+b 353
+b 359
+b 379
+b 352
+b 1
+b 355
+b 1
+b 12
+b 9
+b 1
+b 144
+b 141
+b 1
+b 159
+b 14
+b 49
+b 48
+b 1
+b 0
+b 2
+b 124
+b 0
+b 1
+b 58
+b 60
+b 62
+b 90
+b 67
+b 67
+b 1
+b 14
+b 13
+b 1
+b 115
+b 130
+b 114
+b 1
+b 19
+b 11
+b 13
+b 22
+b 113
+b 17
+b 6
+b 8
+b 28
+b 27
+b 1
+b 69
+b 71
+b 69
+b 1
+b 15
+b 246
+b 248
+b 250
+b 243
+b 1
+b 248
+b 1
+b 581
+b 73
+b 4
+b 6
+b 8
+b 72
+b 17
+b 39
+b 41
+b 43
+b 45
+b 47
+b 39
+b 1
+b 191
+b 211
+b 190
+b 1
+b 206
+b 1
+b 183
+b 195
+b 37
+b 55
+b 8
+b 10
+b 8
+b 1
+b 122
+b 192
+b 203
+b 189
+b 1
+b 200
+b 1
+b 9
+b 8
+b 1
+b 5
+b 70
+b 69
+b 1
+b 216
+b 218
+b 23
+b 22
+b 1
+b 3
+b 3
+b 1
+b 3
+b 0
+b 1
+b 172
+b 181
+b 233
+b 20
+b 22
+b 49
+b 46
+b 1
+b 13
+b 28
+b 155
+b 20
+b 50
+b 82
+b 84
+b 42
+b 54
+b 41
+b 1
+b 49
+b 1
+b 17
+b 114
+b 163
+b 80
+b 82
+b 1
+b 65
+b 76
+b 25
+b 27
+b 29
+b 27
+b 1
+b 14
+b 16
+b 5
+b 4
+b 1
+b 100
+b 102
+b 104
+b 102
+b 1
+b 19
+b 45
+b 8
+b 18
+b 5
+b 1
+b 16
+b 1
+b 108
+b 107
+b 1
+b 37
+b 39
+b 34
+b 1
+b 9
+b 18
+b 8
+b 1
+b 23
+b 84
+b 94
+b 20
+b 22
+b 43
+b 20
+b 1
+b 95
+b 94
+b 1
+b 124
+b 121
+b 1
+b 25
+b 60
+b 57
+b 1
+b 227
+b 224
+b 1
+b 368
+b 394
+b 402
+b 366
+b 1
+b 399
+b 1
+b 12
+b 14
+b 16
+b 18
+b 38
+b 97
+b 436
+b 438
+b 440
+b 442
+b 22
+b 10
+b 12
+b 10
+b 1
+b 78
+b 75
+b 1
+b 35
+b 37
+b 37
+b 1
+b 64
+b 76
+b 410
+b 412
+b 414
+b 410
+b 1
+b 462
+b 464
+b 466
+b 466
+b 1
+b 12
+b 18
+b 20
+b 22
+b 12
+b 5
+b 47
+b 45
+b 1
+b 396
+b 1
+b 0
+b 1
+b 149
+b 159
+b 96
+b 81
+b 83
+b 40
+b 72
+b 43
+b 45
+b 47
+b 61
+b 40
+b 1
+b 58
+b 1
+b 37
+b 3
+b 136
+b 138
+b 232
+b 136
+b 1
+b 22
+b 31
+b 30
+b 1
+b 16
+b 13
+b 1
+b 180
+b 182
+b 250
+b 182
+b 1
+b 246
+b 1
+b 42
+b 70
+b 41
+b 1
+b 115
+b 10
+b 55
+b 54
+b 1
+b 0
+b 2
+b 22
+b 42
+b 40
+b 1
+b 7
+b 9
+b 4
+b 1
+b 175
+b 156
+b 158
+b 174
+b 208
+b 47
+b 89
+b 91
+b 46
+b 1
+b 27
+b 57
+b 7
+b 129
+b 41
+b 40
+b 1
+b 49
+b 66
+b 137
+b 11
+b 41
+b 43
+b 45
+b 4
+b 29
+b 94
+b 96
+b 94
+b 1
+b 112
+b 290
+b 300
+b 247
+b 264
+b 284
+b 286
+b 13
+b 97
+b 258
+b 257
+b 1
+b 19
+b 17
+b 1
+b 60
+b 330
+b 51
+b 60
+b 66
+b 68
+b 70
+b 72
+b 66
+b 1
+b 33
+b 32
+b 1
+b 5
+b 13
+b 23
+b 25
+b 39
+b 110
+b 62
+b 64
+b 62
+b 1
+b 210
+b 22
+b 11
+b 180
+b 3
+b 11
+b 2
+b 1
+b 151
+b 153
+b 148
+b 1
+b 0
+b 180
+b 182
+b 184
+b 182
+b 1
+b 186
+b 188
+b 190
+b 186
+b 1
+b 55
+b 3
+b 149
+b 148
+b 1
+b 30
+b 32
+b 91
+b 128
+b 12
+b 11
+b 1
+b 344
+b 342
+b 1
+b 123
+b 28
+b 25
+b 1
+b 9
+b 6
+b 1
+b 4
+b 144
+b 146
+b 144
+b 1
+b 127
+b 10
+b 7
+b 1
+b 26
+b 26
+b 1
+b 1060
+b 1060
+b 1
+b 23
+b 21
+b 1
+b 148
+b 164
+b 146
+b 1
+b 161
+b 1
+b 1
+b 150
+b 160
+b 159
+b 1
+b 4
+b 35
+b 151
+b 207
+b 32
+b 1
+b 204
+b 1
+b 278
+b 312
+b 250
+b 252
+b 313
+b 312
+b 1
+b 128
+b 136
+b 135
+b 1
+b 30
+b 29
+b 1
+b 261
+b 322
+b 75
+b 77
+b 79
+b 142
+b 144
+b 146
+b 142
+b 1
+b 246
+b 10
+b 244
+b 255
+b 50
+b 79
+b 81
+b 79
+b 1
+b 21
+b 90
+b 21
+b 1
+b 86
+b 1
+b 165
+b 164
+b 1
+b 419
+b 449
+b 81
+b 79
+b 1
+b 45
+b 53
+b 52
+b 1
+b 5
+b 5
+b 101
+b 103
+b 13
+b 22
+b 11
+b 1
+b 20
+b 1
+b 80
+b 82
+b 84
+b 86
+b 80
+b 1
+b 48
+b 35
+b 50
+b 48
+b 1
+b 15
+b 12
+b 1
+b 242
+b 38
+b 6
+b 3
+b 1
+b 142
+b 236
+b 234
+b 1
+b 233
+b 232
+b 1
+b 43
+b 117
+b 116
+b 1
+b 12
+b 29
+b 11
+b 1
+b 25
+b 1
+b 196
+b 38
+b 68
+b 32
+b 34
+b 18
+b 9
+b 298
+b 310
+b 309
+b 1
+b 265
+b 267
+b 318
+b 265
+b 1
+b 280
+b 308
+b 310
+b 279
+b 1
+b 188
+b 216
+b 23
+b 46
+b 81
+b 80
+b 1
+b 25
+b 23
+b 1
+b 0
+b 2
+b 13
+b 12
+b 1
+b 330
+b 352
+b 354
+b 352
+b 1
+b 136
+b 147
+b 135
+b 1
+b 43
+b 64
+b 64
+b 1
+b 237
+b 239
+b 152
+b 8
+b 10
+b 6
+b 5
+b 1
+b 21
+b 41
+b 49
+b 51
+b 53
+b 96
+b 139
+b 227
+b 229
+b 138
+b 1
+b 124
+b 215
+b 87
+b 89
+b 91
+b 93
+b 120
+b 122
+b 124
+b 444
+b 453
+b 107
+b 109
+b 111
+b 107
+b 1
+b 29
+b 3
+b 65
+b 9
+b 38
+b 40
+b 19
+b 72
+b 69
+b 1
+b 30
+b 19
+b 21
+b 23
+b 191
+b 227
+b 238
+b 226
+b 1
+b 94
+b 71
+b 81
+b 152
+b 149
+b 1
+b 17
+b 0
+b 2
+b 48
+b 50
+b 21
+b 76
+b 73
+b 1
+b 28
+b 25
+b 1
+b 9
+b 243
+b 224
+b 226
+b 228
+b 230
+b 460
+b 10
+b 88
+b 87
+b 1
+b 40
+b 42
+b 42
+b 1
+b 937
+b 1
+b 3
+b 12
+b 36
+b 33
+b 1
+b 577
+b 77
+b 16
+b 23
+b 69
+b 79
+b 81
+b 66
+b 1
+b 79
+b 1
+b 155
+b 188
+b 68
+b 70
+b 24
+b 23
+b 1
+b 119
+b 121
+b 123
+b 125
+b 78
+b 110
+b 47
+b 55
+b 57
+b 44
+b 1
+b 31
+b 33
+b 35
+b 37
+b 33
+b 1
+b 278
+b 280
+b 290
+b 289
+b 1
+b 59
+b 57
+b 1
+b 8
+b 5
+b 1
+b 1
+b 23
+b 44
+b 69
+b 71
+b 73
+b 75
+b 16
+b 26
+b 58
+b 57
+b 1
+b 22
+b 57
+b 144
+b 259
+b 203
+b 210
+b 212
+b 202
+b 1
+b 201
+b 48
+b 47
+b 1
+b 13
+b 10
+b 1
+b 366
+b 388
+b 134
+b 133
+b 1
+b 79
+b 7
+b 6
+b 1
+b 48
+b 50
+b 60
+b 145
+b 6
+b 24
+b 26
+b 39
+b 38
+b 1
+b 34
+b 58
+b 57
+b 1
+b 63
+b 8
+b 28
+b 25
+b 1
+b 14
+b 16
+b 18
+b 20
+b 87
+b 86
+b 1
+b 138
+b 73
+b 72
+b 1
+b 34
+b 3
+b 254
+b 256
+b 258
+b 254
+b 1
+b 61
+b 63
+b 55
+b 54
+b 1
+b 77
+b 77
+b 1
+b 13
+b 12
+b 1
+b 57
+b 76
+b 54
+b 1
+b 10
+b 17
+b 16
+b 1
+b 110
+b 332
+b 350
+b 55
+b 57
+b 59
+b 61
+b 70
+b 1
+b 20
+b 28
+b 97
+b 22
+b 21
+b 1
+b 31
+b 6
+b 5
+b 4
+b 1
+b 153
+b 42
+b 3
+b 2
+b 1
+b 242
+b 244
+b 4
+b 11
+b 111
+b 111
+b 1
+b 230
+b 240
+b 228
+b 1
+b 238
+b 1
+b 10
+b 19
+b 101
+b 103
+b 105
+b 103
+b 1
+b 230
+b 232
+b 234
+b 236
+b 40
+b 42
+b 51
+b 40
+b 1
+b 5
+b 17
+b 3
+b 1
+b 39
+b 54
+b 121
+b 142
+b 144
+b 120
+b 1
+b 76
+b 88
+b 45
+b 93
+b 115
+b 114
+b 1
+b 248
+b 250
+b 245
+b 1
+b 24
+b 23
+b 1
+b 9
+b 11
+b 13
+b 15
+b 9
+b 1
+b 1043
+b 1045
+b 1290
+b 11
+b 13
+b 296
+b 144
+b 154
+b 164
+b 143
+b 1
+b 150
+b 1
+b 216
+b 102
+b 104
+b 102
+b 1
+b 95
+b 113
+b 112
+b 1
+b 0
+b 2
+b 0
+b 1
+b 60
+b 59
+b 1
+b 77
+b 79
+b 79
+b 1
+b 74
+b 343
+b 345
+b 173
+b 204
+b 0
+b 2
+b 485
+b 487
+b 489
+b 491
+b 71
+b 92
+b 13
+b 23
+b 12
+b 1
+b 72
+b 74
+b 181
+b 74
+b 1
+b 177
+b 1
+b 104
+b 106
+b 197
+b 28
+b 15
+b 18
+b 37
+b 36
+b 1
+b 305
+b 307
+b 307
+b 1
+b 111
+b 110
+b 1
+b 183
+b 231
+b 8
+b 10
+b 12
+b 3
+b 108
+b 25
+b 189
+b 7
+b 204
+b 206
+b 208
+b 210
+b 114
+b 116
+b 163
+b 104
+b 135
+b 23
+b 25
+b 27
+b 29
+b 27
+b 1
+b 35
+b 87
+b 25
+b 40
+b 42
+b 114
+b 128
+b 14
+b 10
+b 47
+b 137
+b 139
+b 137
+b 1
+b 60
+b 76
+b 78
+b 76
+b 1
+b 2
+b 12
+b 45
+b 47
+b 49
+b 51
+b 45
+b 1
+b 308
+b 207
+b 806
+b 817
+b 109
+b 3
+b 10
+b 9
+b 1
+b 2
+b 4
+b 39
+b 49
+b 105
+b 38
+b 1
+b 66
+b 90
+b 59
+b 58
+b 1
+b 56
+b 70
+b 192
+b 194
+b 196
+b 221
+b 237
+b 220
+b 1
+b 22
+b 33
+b 35
+b 37
+b 39
+b 0
+b 27
+b 61
+b 63
+b 34
+b 57
+b 20
+b 23
+b 22
+b 1
+b 6
+b 57
+b 56
+b 1
+b 0
+b 2
+b 0
+b 1
+b 4
+b 76
+b 89
+b 152
+b 161
+b 160
+b 1
+b 65
+b 63
+b 1
+b 78
+b 88
+b 101
+b 850
+b 1208
+b 849
+b 1
+b 1205
+b 1
+b 0
+b 2
+b 31
+b 33
+b 91
+b 485
+b 495
+b 44
+b 43
+b 1
+b 90
+b 89
+b 1
+b 28
+b 249
+b 87
+b 89
+b 87
+b 1
+b 369
+b 371
+b 373
+b 369
+b 1
+b 253
+b 4
+b 25
+b 3
+b 1
+b 32
+b 31
+b 1
+b 20
+b 22
+b 65
+b 20
+b 32
+b 43
+b 42
+b 1
+b 19
+b 17
+b 1
+b 35
+b 37
+b 51
+b 50
+b 1
+b 205
+b 215
+b 217
+b 204
+b 1
+b 386
+b 3
+b 387
+b 389
+b 0
+b 3
+b 11
+b 47
+b 17
+b 3
+b 2
+b 1
+b 17
+b 45
+b 8
+b 1
+b 1
+b 71
+b 73
+b 75
+b 68
+b 1
+b 73
+b 1
+b 41
+b 43
+b 45
+b 47
+b 45
+b 1
+b 12
+b 14
+b 35
+b 12
+b 1
+b 13
+b 10
+b 1
+b 239
+b 238
+b 1
+b 19
+b 53
+b 78
+b 52
+b 1
+b 552
+b 560
+b 588
+b 559
+b 1
+b 141
+b 17
+b 16
+b 1
+b 164
+b 162
+b 1
+b 78
+b 77
+b 1
+b 6
+b 4
+b 1
+b 10
+b 128
+b 168
+b 127
+b 1
+b 1
+b 9
+b 53
+b 141
+b 143
+b 141
+b 1
+b 18
+b 20
+b 22
+b 24
+b 685
+b 698
+b 0
+b 148
+b 150
+b 244
+b 243
+b 1
+b 39
+b 48
+b 166
+b 168
+b 170
+b 163
+b 1
+b 12
+b 26
+b 34
+b 70
+b 103
+b 100
+b 1
+b 57
+b 95
+b 95
+b 1
+b 382
+b 384
+b 382
+b 1
+b 1
+b 2
+b 4
+b 12
+b 15
+b 3
+b 130
+b 127
+b 1
+b 70
+b 72
+b 9
+b 221
+b 223
+b 225
+b 227
+b 234
+b 236
+b 246
+b 245
+b 1
+b 200
+b 202
+b 1
+b 11
+b 0
+b 1
+b 192
+b 221
+b 223
+b 221
+b 1
+b 1
+b 96
+b 4
+b 10
+b 3
+b 1
+b 50
+b 60
+b 32
+b 46
+b 61
+b 63
+b 65
+b 67
+b 63
+b 1
+b 78
+b 111
+b 222
+b 252
+b 222
+b 1
+b 247
+b 1
+b 569
+b 577
+b 439
+b 441
+b 94
+b 96
+b 98
+b 100
+b 16
+b 15
+b 1
+b 21
+b 23
+b 25
+b 27
+b 43
+b 42
+b 1
+b 238
+b 237
+b 1
+b 3
+b 10
+b 184
+b 193
+b 56
+b 58
+b 67
+b 339
+b 394
+b 107
+b 105
+b 1
+b 94
+b 96
+b 96
+b 1
+b 145
+b 37
+b 36
+b 1
+b 9
+b 7
+b 9
+b 11
+b 9
+b 1
+b 169
+b 168
+b 1
+b 17
+b 79
+b 44
+b 51
+b 50
+b 1
+b 47
+b 44
+b 1
+b 32
+b 29
+b 1
+b 615
+b 202
+b 57
+b 59
+b 11
+b 10
+b 28
+b 254
+b 253
+b 1
+b 7
+b 50
+b 94
+b 94
+b 1
+b 53
+b 52
+b 1
+b 46
+b 104
+b 248
+b 258
+b 246
+b 1
+b 4
+b 4
+b 1
+b 12
+b 26
+b 248
+b 40
+b 11
+b 36
+b 10
+b 1
+b 31
+b 1
+b 11
+b 246
+b 53
+b 17
+b 23
+b 20
+b 1
+b 240
+b 247
+b 365
+b 164
+b 28
+b 43
+b 90
+b 42
+b 1
+b 125
+b 127
+b 127
+b 1
+b 70
+b 69
+b 1
+b 32
+b 29
+b 1
+b 13
+b 4
+b 646
+b 662
+b 722
+b 661
+b 1
+b 718
+b 1
+b 120
+b 77
+b 3
+b 5
+b 7
+b 9
+b 329
+b 331
+b 333
+b 384
+b 201
+b 4
+b 14
+b 281
+b 0
+b 6
+b 260
+b 27
+b 76
+b 78
+b 4
+b 53
+b 64
+b 52
+b 1
+b 24
+b 56
+b 54
+b 1
+b 7
+b 0
+b 2
+b 214
+b 216
+b 256
+b 72
+b 10
+b 12
+b 10
+b 1
+b 366
+b 364
+b 1
+b 56
+b 58
+b 53
+b 1
+b 2
+b 4
+b 16
+b 43
+b 36
+b 38
+b 36
+b 1
+b 217
+b 219
+b 253
+b 252
+b 1
+b 62
+b 61
+b 1
+b 4
+b 2
+b 1
+b 136
+b 182
+b 134
+b 1
+b 4
+b 26
+b 23
+b 1
+b 1
+b 0
+b 1
+b 44
+b 46
+b 44
+b 1
+b 1
+b 70
+b 72
+b 72
+b 1
+b 115
+b 117
+b 144
+b 143
+b 1
+b 6
+b 8
+b 10
+b 6
+b 1
+b 95
+b 97
+b 51
+b 85
+b 84
+b 1
+b 11
+b 98
+b 15
+b 31
+b 59
+b 29
+b 41
+b 20
+b 22
+b 33
+b 89
+b 99
+b 88
+b 1
+b 58
+b 101
+b 39
+b 16
+b 19
+b 2
+b 4
+b 6
+b 8
+b 6
+b 1
+b 129
+b 131
+b 131
+b 1
+b 15
+b 14
+b 1
+b 16
+b 18
+b 20
+b 22
+b 36
+b 53
+b 1
+b 52
+b 62
+b 57
+b 55
+b 1
+b 72
+b 94
+b 92
+b 1
+b 64
+b 63
+b 1
+b 35
+b 83
+b 82
+b 1
+b 150
+b 28
+b 201
+b 225
+b 255
+b 224
+b 1
+b 250
+b 1
+b 730
+b 729
+b 1
+b 88
+b 85
+b 1
+b 372
+b 398
+b 400
+b 371
+b 1
+b 56
+b 55
+b 1
+b 21
+b 23
+b 158
+b 181
+b 180
+b 1
+b 118
+b 36
+b 38
+b 36
+b 1
+b 18
+b 17
+b 70
+b 72
+b 15
+b 1
+b 65
+b 79
+b 47
+b 115
+b 125
+b 177
+b 179
+b 177
+b 1
+b 122
+b 124
+b 166
+b 74
+b 19
+b 21
+b 738
+b 740
+b 742
+b 42
+b 23
+b 203
+b 205
+b 279
+b 203
+b 1
+b 241
+b 251
+b 250
+b 1
+b 49
+b 637
+b 44
+b 659
+b 479
+b 52
+b 91
+b 9
+b 61
+b 56
+b 78
+b 34
+b 66
+b 92
+b 31
+b 1
+b 87
+b 1
+b 3
+b 43
+b 12
+b 11
+b 1
+b 27
+b 1
+b 1
+b 1
+b 1
+b 228
+b 230
+b 251
+b 250
+b 1
+b 8
+b 20
+b 292
+b 294
+b 316
+b 210
+b 212
+b 222
+b 207
+b 1
+b 219
+b 1
+b 7
+b 4
+b 1
+b 2
+b 2
+b 1
+b 140
+b 142
+b 144
+b 140
+b 1
+b 24
+b 1
+b 41
+b 43
+b 45
+b 47
+b 39
+b 20
+b 189
+b 187
+b 1
+b 3
+b 13
+b 0
+b 1
+b 38
+b 46
+b 35
+b 1
+b 44
+b 1
+b 428
+b 49
+b 35
+b 1
+b 13
+b 57
+b 59
+b 54
+b 1
+b 1
+b 0
+b 1
+b 340
+b 340
+b 1
+b 40
+b 37
+b 1
+b 68
+b 70
+b 72
+b 559
+b 561
+b 583
+b 559
+b 1
+b 12
+b 22
+b 9
+b 1
+b 19
+b 1
+b 91
+b 152
+b 48
+b 111
+b 121
+b 110
+b 1
+b 117
+b 1
+b 95
+b 149
+b 151
+b 149
+b 1
+b 11
+b 13
+b 15
+b 17
+b 29
+b 42
+b 193
+b 192
+b 1
+b 36
+b 6
+b 13
+b 27
+b 47
+b 20
+b 22
+b 20
+b 1
+b 19
+b 29
+b 39
+b 41
+b 27
+b 1
+b 43
+b 61
+b 60
+b 1
+b 18
+b 175
+b 195
+b 2
+b 73
+b 124
+b 126
+b 128
+b 285
+b 298
+b 298
+b 1
+b 32
+b 123
+b 120
+b 122
+b 136
+b 120
+b 1
+b 40
+b 46
+b 34
+b 64
+b 132
+b 33
+b 1
+b 51
+b 64
+b 50
+b 1
+b 59
+b 1
+b 3
+b 38
+b 40
+b 42
+b 40
+b 1
+b 57
+b 70
+b 90
+b 88
+b 2
+b 69
+b 1
+b 672
+b 469
+b 471
+b 469
+b 1
+b 209
+b 615
+b 93
+b 131
+b 95
+b 104
+b 92
+b 1
+b 38
+b 37
+b 1
+b 118
+b 120
+b 120
+b 1
+b 6
+b 3
+b 1
+b 171
+b 30
+b 148
+b 147
+b 1
+b 18
+b 20
+b 28
+b 18
+b 1
+b 381
+b 389
+b 29
+b 122
+b 149
+b 28
+b 1
+b 117
+b 1
+b 80
+b 82
+b 84
+b 80
+b 1
+b 44
+b 54
+b 43
+b 1
+b 5
+b 163
+b 162
+b 1
+b 5
+b 22
+b 21
+b 1
+b 36
+b 6
+b 60
+b 62
+b 64
+b 80
+b 62
+b 1
+b 5
+b 4
+b 1
+b 5
+b 10
+b 7
+b 1
+b 8
+b 10
+b 12
+b 14
+b 10
+b 1
+b 166
+b 181
+b 165
+b 1
+b 56
+b 58
+b 60
+b 58
+b 1
+b 79
+b 1
+b 30
+b 0
+b 1
+b 50
+b 11
+b 3
+b 5
+b 7
+b 5
+b 1
+b 121
+b 129
+b 120
+b 1
+b 15
+b 28
+b 30
+b 79
+b 195
+b 205
+b 27
+b 29
+b 39
+b 82
+b 90
+b 99
+b 106
+b 18
+b 17
+b 1
+b 18
+b 49
+b 26
+b 28
+b 26
+b 1
+b 0
+b 61
+b 38
+b 37
+b 1
+b 25
+b 22
+b 1
+b 20
+b 52
+b 54
+b 105
+b 113
+b 112
+b 1
+b 131
+b 146
+b 146
+b 49
+b 48
+b 1
+b 1
+b 34
+b 36
+b 38
+b 40
+b 34
+b 1
+b 78
+b 80
+b 82
+b 84
+b 82
+b 1
+b 92
+b 15
+b 46
+b 61
+b 60
+b 1
+b 6
+b 4
+b 1
+b 55
+b 71
+b 66
+b 195
+b 253
+b 65
+b 1
+b 190
+b 1
+b 99
+b 141
+b 98
+b 1
+b 146
+b 175
+b 174
+b 1
+b 75
+b 74
+b 1
+b 54
+b 323
+b 312
+b 314
+b 316
+b 318
+b 316
+b 1
+b 315
+b 373
+b 420
+b 372
+b 1
+b 4
+b 15
+b 310
+b 319
+b 239
+b 250
+b 252
+b 238
+b 1
+b 140
+b 138
+b 1
+b 1
+b 17
+b 17
+b 1
+b 130
+b 132
+b 149
+b 148
+b 1
+b 54
+b 69
+b 71
+b 562
+b 578
+b 580
+b 561
+b 1
+b 187
+b 16
+b 15
+b 1
+b 1
+b 3
+b 2
+b 334
+b 348
+b 251
+b 309
+b 61
+b 72
+b 74
+b 44
+b 25
+b 79
+b 114
+b 76
+b 1
+b 1
+b 0
+b 1
+b 115
+b 117
+b 119
+b 121
+b 115
+b 1
+b 14
+b 16
+b 18
+b 20
+b 146
+b 239
+b 241
+b 77
+b 79
+b 101
+b 74
+b 1
+b 98
+b 1
+b 86
+b 153
+b 42
+b 44
+b 6
+b 5
+b 1
+b 84
+b 83
+b 1
+b 39
+b 49
+b 48
+b 1
+b 143
+b 145
+b 147
+b 149
+b 143
+b 1
+b 48
+b 59
+b 0
+b 305
+b 307
+b 327
+b 305
+b 1
+b 18
+b 32
+b 18
+b 20
+b 22
+b 4
+b 348
+b 117
+b 79
+b 81
+b 97
+b 79
+b 1
+b 94
+b 96
+b 98
+b 0
+b 0
+b 1
+b 52
+b 54
+b 56
+b 58
+b 56
+b 1
+b 26
+b 28
+b 23
+b 1
+b 53
+b 52
+b 1
+b 306
+b 319
+b 74
+b 76
+b 71
+b 1
+b 58
+b 56
+b 1
+b 19
+b 29
+b 17
+b 20
+b 6
+b 26
+b 134
+b 147
+b 336
+b 374
+b 157
+b 46
+b 107
+b 143
+b 147
+b 149
+b 0
+b 96
+b 142
+b 144
+b 146
+b 15
+b 22
+b 21
+b 1
+b 14
+b 11
+b 1
+b 359
+b 1
+b 3
+b 33
+b 23
+b 102
+b 101
+b 1
+b 21
+b 51
+b 18
+b 1
+b 46
+b 99
+b 1071
+b 35
+b 365
+b 367
+b 22
+b 269
+b 22
+b 30
+b 32
+b 34
+b 36
+b 183
+b 185
+b 180
+b 1
+b 0
+b 88
+b 77
+b 0
+b 388
+b 17
+b 48
+b 0
+b 2
+b 194
+b 27
+b 23
+b 25
+b 31
+b 23
+b 1
+b 220
+b 238
+b 217
+b 1
+b 236
+b 1
+b 132
+b 184
+b 183
+b 1
+b 18
+b 244
+b 120
+b 122
+b 99
+b 123
+b 120
+b 1
+b 69
+b 79
+b 78
+b 1
+b 31
+b 198
+b 200
+b 210
+b 89
+b 13
+b 16
+b 18
+b 34
+b 36
+b 38
+b 36
+b 1
+b 12
+b 32
+b 9
+b 1
+b 29
+b 1
+b 97
+b 94
+b 1
+b 42
+b 39
+b 1
+b 26
+b 72
+b 89
+b 91
+b 99
+b 89
+b 1
+b 101
+b 120
+b 499
+b 19
+b 14
+b 65
+b 76
+b 64
+b 1
+b 258
+b 266
+b 91
+b 89
+b 1
+b 121
+b 25
+b 24
+b 1
+b 54
+b 54
+b 1
+b 207
+b 9
+b 15
+b 8
+b 2
+b 11
+b 1
+b 28
+b 11
+b 4
+b 44
+b 2
+b 1
+b 1
+b 128
+b 204
+b 203
+b 1
+b 27
+b 0
+b 11
+b 8
+b 1
+b 51
+b 53
+b 63
+b 51
+b 1
+b 29
+b 47
+b 21
+b 35
+b 20
+b 1
+b 30
+b 1
+b 148
+b 147
+b 1
+b 136
+b 138
+b 123
+b 125
+b 56
+b 55
+b 1
+b 18
+b 20
+b 22
+b 52
+b 132
+b 16
+b 28
+b 7
+b 112
+b 114
+b 112
+b 1
+b 95
+b 228
+b 84
+b 98
+b 112
+b 83
+b 1
+b 129
+b 128
+b 1
+b 72
+b 24
+b 68
+b 270
+b 286
+b 310
+b 350
+b 349
+b 1
+b 11
+b 28
+b 38
+b 27
+b 1
+b 34
+b 1
+b 0
+b 2
+b 192
+b 219
+b 221
+b 189
+b 1
+b 71
+b 61
+b 289
+b 8
+b 189
+b 209
+b 211
+b 209
+b 1
+b 147
+b 207
+b 253
+b 146
+b 1
+b 180
+b 182
+b 184
+b 186
+b 3
+b 13
+b 15
+b 251
+b 277
+b 250
+b 1
+b 7
+b 121
+b 129
+b 145
+b 180
+b 195
+b 75
+b 72
+b 1
+b 13
+b 11
+b 1
+b 277
+b 112
+b 161
+b 111
+b 1
+b 156
+b 1
+b 216
+b 218
+b 220
+b 222
+b 162
+b 164
+b 3
+b 71
+b 73
+b 71
+b 1
+b 7
+b 105
+b 209
+b 29
+b 55
+b 54
+b 1
+b 0
+b 19
+b 21
+b 23
+b 25
+b 21
+b 1
+b 110
+b 120
+b 122
+b 75
+b 77
+b 79
+b 11
+b 13
+b 11
+b 1
+b 14
+b 14
+b 14
+b 54
+b 56
+b 58
+b 60
+b 26
+b 12
+b 9
+b 1
+b 23
+b 25
+b 27
+b 23
+b 1
+b 12
+b 26
+b 101
+b 118
+b 176
+b 42
+b 44
+b 52
+b 50
+b 1
+b 145
+b 154
+b 4
+b 6
+b 8
+b 10
+b 8
+b 1
+b 121
+b 135
+b 6
+b 9
+b 44
+b 57
+b 41
+b 1
+b 14
+b 13
+b 1
+b 44
+b 4
+b 3
+b 184
+b 199
+b 183
+b 1
+b 85
+b 97
+b 176
+b 188
+b 187
+b 1
+b 38
+b 40
+b 63
+b 76
+b 78
+b 1
+b 255
+b 263
+b 265
+b 253
+b 1
+b 263
+b 1
+b 39
+b 4
+b 2
+b 1
+b 14
+b 16
+b 1
+b 83
+b 85
+b 87
+b 89
+b 80
+b 1
+b 26
+b 36
+b 23
+b 1
+b 33
+b 1
+b 33
+b 32
+b 1
+b 6
+b 4
+b 1
+b 7
+b 2
+b 4
+b 12
+b 45
+b 47
+b 49
+b 51
+b 221
+b 255
+b 279
+b 254
+b 1
+b 14
+b 23
+b 25
+b 12
+b 1
+b 136
+b 198
+b 178
+b 3
+b 5
+b 3
+b 1
+b 273
+b 272
+b 1
+b 2
+b 143
+b 149
+b 151
+b 153
+b 155
+b 149
+b 1
+b 8
+b 1
+b 0
+b 1
+b 12
+b 91
+b 93
+b 91
+b 1
+b 52
+b 54
+b 80
+b 54
+b 1
+b 76
+b 1
+b 80
+b 90
+b 92
+b 79
+b 1
+b 61
+b 63
+b 65
+b 48
+b 61
+b 85
+b 47
+b 1
+b 57
+b 1
+b 769
+b 793
+b 795
+b 768
+b 1
+b 17
+b 45
+b 55
+b 54
+b 1
+b 114
+b 116
+b 126
+b 114
+b 1
+b 2
+b 4
+b 6
+b 8
+b 2
+b 1
+b 126
+b 128
+b 273
+b 271
+b 1
+b 64
+b 143
+b 162
+b 142
+b 1
+b 158
+b 1
+b 97
+b 99
+b 115
+b 37
+b 39
+b 37
+b 1
+b 4
+b 114
+b 3
+b 51
+b 89
+b 178
+b 275
+b 175
+b 1
+b 38
+b 35
+b 1
+b 159
+b 161
+b 161
+b 1
+b 7
+b 5
+b 1
+b 34
+b 33
+b 1
+b 14
+b 16
+b 73
+b 7
+b 28
+b 62
+b 64
+b 62
+b 1
+b 587
+b 586
+b 1
+b 218
+b 220
+b 51
+b 53
+b 55
+b 48
+b 1
+b 53
+b 1
+b 675
+b 687
+b 689
+b 674
+b 1
+b 159
+b 161
+b 159
+b 1
+b 89
+b 33
+b 59
+b 189
+b 176
+b 186
+b 638
+b 640
+b 662
+b 638
+b 1
+b 111
+b 147
+b 27
+b 26
+b 1
+b 88
+b 117
+b 56
+b 76
+b 78
+b 53
+b 1
+b 4
+b 6
+b 20
+b 131
+b 130
+b 1
+b 315
+b 317
+b 77
+b 121
+b 3
+b 20
+b 143
+b 3
+b 588
+b 216
+b 72
+b 185
+b 187
+b 71
+b 1
+b 256
+b 266
+b 276
+b 255
+b 1
+b 262
+b 1
+b 136
+b 152
+b 151
+b 1
+b 75
+b 58
+b 309
+b 308
+b 1
+b 72
+b 72
+b 1
+b 16
+b 347
+b 58
+b 68
+b 70
+b 68
+b 1
+b 280
+b 282
+b 277
+b 1
+b 11
+b 10
+b 1
+b 25
+b 27
+b 29
+b 31
+b 29
+b 1
+b 82
+b 96
+b 98
+b 81
+b 1
+b 45
+b 19
+b 44
+b 46
+b 48
+b 50
+b 44
+b 1
+b 191
+b 222
+b 221
+b 1
+b 9
+b 51
+b 50
+b 1
+b 56
+b 55
+b 1
+b 0
+b 2
+b 207
+b 206
+b 1
+b 3
+b 5
+b 119
+b 137
+b 28
+b 30
+b 32
+b 175
+b 75
+b 24
+b 23
+b 1
+b 32
+b 30
+b 1
+b 23
+b 25
+b 143
+b 74
+b 76
+b 74
+b 1
+b 128
+b 127
+b 1
+b 79
+b 81
+b 24
+b 5
+b 4
+b 1
+b 1
+b 92
+b 94
+b 96
+b 114
+b 223
+b 225
+b 7
+b 6
+b 1
+b 21
+b 18
+b 1
+b 127
+b 126
+b 1
+b 1
+b 4
+b 130
+b 119
+b 116
+b 1
+b 27
+b 1
+b 0
+b 1
+b 138
+b 140
+b 142
+b 144
+b 382
+b 229
+b 1
+b 0
+b 1
+b 0
+b 2
+b 0
+b 1
+b 159
+b 161
+b 210
+b 212
+b 254
+b 274
+b 9
+b 31
+b 8
+b 1
+b 208
+b 218
+b 207
+b 1
+b 7
+b 0
+b 3
+b 782
+b 225
+b 109
+b 165
+b 91
+b 93
+b 95
+b 91
+b 1
+b 139
+b 141
+b 143
+b 145
+b 141
+b 1
+b 140
+b 160
+b 66
+b 68
+b 82
+b 38
+b 48
+b 8
+b 10
+b 12
+b 14
+b 16
+b 14
+b 1
+b 76
+b 78
+b 80
+b 82
+b 76
+b 1
+b 14
+b 24
+b 23
+b 1
+b 46
+b 45
+b 1
+b 12
+b 2
+b 7
+b 8
+b 7
+b 1
+b 18
+b 16
+b 1
+b 199
+b 201
+b 221
+b 234
+b 218
+b 1
+b 256
+b 255
+b 1
+b 98
+b 4
+b 100
+b 114
+b 122
+b 273
+b 275
+b 88
+b 90
+b 112
+b 110
+b 1
+b 271
+b 273
+b 275
+b 277
+b 6
+b 35
+b 3
+b 1
+b 33
+b 1
+b 20
+b 1
+b 1
+b 121
+b 120
+b 1
+b 74
+b 76
+b 24
+b 26
+b 28
+b 26
+b 1
+b 122
+b 119
+b 1
+b 14
+b 11
+b 1
+b 137
+b 139
+b 6
+b 79
+b 333
+b 332
+b 1
+b 0
+b 61
+b 63
+b 26
+b 227
+b 229
+b 231
+b 233
+b 231
+b 1
+b 34
+b 36
+b 38
+b 40
+b 34
+b 1
+b 264
+b 266
+b 268
+b 270
+b 268
+b 1
+b 73
+b 5
+b 90
+b 135
+b 90
+b 1
+b 131
+b 1
+b 41
+b 0
+b 2
+b 128
+b 2
+b 46
+b 45
+b 1
+b 53
+b 55
+b 87
+b 53
+b 1
+b 219
+b 246
+b 8
+b 0
+b 2
+b 43
+b 42
+b 1
+b 77
+b 62
+b 14
+b 2
+b 87
+b 128
+b 23
+b 22
+b 1
+b 44
+b 50
+b 42
+b 1
+b 6
+b 5
+b 1
+b 44
+b 60
+b 118
+b 120
+b 122
+b 120
+b 1
+b 9
+b 11
+b 13
+b 15
+b 24
+b 34
+b 22
+b 1
+b 17
+b 15
+b 1
+b 135
+b 6
+b 40
+b 6
+b 8
+b 6
+b 1
+b 54
+b 50
+b 125
+b 133
+b 122
+b 1
+b 8
+b 283
+b 285
+b 285
+b 1
+b 4
+b 2
+b 1
+b 16
+b 18
+b 9
+b 216
+b 257
+b 232
+b 234
+b 196
+b 186
+b 188
+b 190
+b 192
+b 188
+b 1
+b 36
+b 3
+b 241
+b 0
+b 2
+b 44
+b 87
+b 86
+b 1
+b 11
+b 49
+b 48
+b 1
+b 124
+b 271
+b 35
+b 37
+b 32
+b 1
+b 24
+b 23
+b 1
+b 125
+b 171
+b 34
+b 36
+b 34
+b 1
+b 345
+b 137
+b 155
+b 157
+b 134
+b 1
+b 155
+b 1
+b 115
+b 113
+b 1
+b 22
+b 9
+b 7
+b 1
+b 50
+b 66
+b 68
+b 49
+b 1
+b 25
+b 27
+b 3
+b 8
+b 21
+b 1
+b 13
+b 15
+b 25
+b 13
+b 1
+b 20
+b 30
+b 18
+b 1
+b 98
+b 108
+b 26
+b 28
+b 30
+b 28
+b 1
+b 15
+b 17
+b 19
+b 21
+b 93
+b 153
+b 291
+b 152
+b 1
+b 288
+b 1
+b 138
+b 186
+b 17
+b 14
+b 1
+b 129
+b 18
+b 20
+b 18
+b 1
+b 9
+b 6
+b 5
+b 1
+b 282
+b 9
+b 230
+b 59
+b 61
+b 59
+b 1
+b 23
+b 25
+b 27
+b 29
+b 198
+b 197
+b 1
+b 72
+b 74
+b 230
+b 252
+b 28
+b 25
+b 1
+b 114
+b 130
+b 208
+b 127
+b 1
+b 24
+b 26
+b 28
+b 30
+b 113
+b 66
+b 6
+b 23
+b 3
+b 1
+b 20
+b 1
+b 83
+b 85
+b 87
+b 97
+b 19
+b 18
+b 1
+b 3
+b 3
+b 1
+b 64
+b 66
+b 68
+b 70
+b 64
+b 1
+b 240
+b 237
+b 1
+b 91
+b 91
+b 1
+b 71
+b 73
+b 81
+b 71
+b 1
+b 47
+b 49
+b 47
+b 1
+b 155
+b 145
+b 147
+b 149
+b 151
+b 149
+b 1
+b 273
+b 288
+b 55
+b 69
+b 111
+b 64
+b 610
+b 609
+b 1
+b 203
+b 205
+b 33
+b 122
+b 207
+b 209
+b 246
+b 209
+b 1
+b 242
+b 1
+b 8
+b 31
+b 33
+b 31
+b 1
+b 51
+b 50
+b 1
+b 28
+b 27
+b 1
+b 269
+b 287
+b 56
+b 3
+b 10
+b 93
+b 92
+b 1
+b 18
+b 10
+b 20
+b 230
+b 232
+b 234
+b 232
+b 1
+b 5
+b 40
+b 28
+b 30
+b 43
+b 40
+b 2
+b 4
+b 79
+b 78
+b 1
+b 153
+b 55
+b 53
+b 1
+b 271
+b 290
+b 15
+b 23
+b 25
+b 14
+b 1
+b 80
+b 105
+b 77
+b 1
+b 67
+b 66
+b 1
+b 57
+b 145
+b 35
+b 139
+b 34
+b 1
+b 0
+b 2
+b 250
+b 272
+b 125
+b 0
+b 2
+b 10
+b 612
+b 202
+b 177
+b 35
+b 51
+b 34
+b 1
+b 16
+b 18
+b 20
+b 175
+b 184
+b 193
+b 174
+b 1
+b 121
+b 12
+b 11
+b 1
+b 0
+b 2
+b 12
+b 3
+b 5
+b 93
+b 92
+b 1
+b 2
+b 3
+b 19
+b 20
+b 3
+b 1
+b 17
+b 1
+b 60
+b 135
+b 2
+b 4
+b 2
+b 1
+b 287
+b 339
+b 246
+b 248
+b 81
+b 79
+b 1
+b 185
+b 223
+b 183
+b 1
+b 15
+b 14
+b 1
+b 56
+b 84
+b 81
+b 1
+b 149
+b 151
+b 153
+b 155
+b 149
+b 1
+b 43
+b 68
+b 40
+b 1
+b 66
+b 1
+b 149
+b 148
+b 1
+b 25
+b 7
+b 111
+b 5
+b 21
+b 23
+b 25
+b 31
+b 17
+b 16
+b 1
+b 25
+b 25
+b 1
+b 94
+b 96
+b 98
+b 100
+b 94
+b 1
+b 323
+b 325
+b 333
+b 331
+b 1
+b 4
+b 38
+b 200
+b 220
+b 222
+b 197
+b 1
+b 54
+b 56
+b 51
+b 1
+b 2
+b 1
+b 1
+b 263
+b 293
+b 104
+b 106
+b 108
+b 775
+b 783
+b 785
+b 774
+b 1
+b 676
+b 684
+b 129
+b 143
+b 16
+b 18
+b 20
+b 22
+b 20
+b 1
+b 127
+b 127
+b 1
+b 62
+b 59
+b 1
+b 576
+b 578
+b 580
+b 582
+b 243
+b 269
+b 19
+b 17
+b 1
+b 2
+b 112
+b 130
+b 265
+b 291
+b 35
+b 37
+b 59
+b 37
+b 1
+b 55
+b 1
+b 793
+b 206
+b 91
+b 88
+b 1
+b 19
+b 16
+b 1
+b 72
+b 74
+b 76
+b 78
+b 72
+b 1
+b 88
+b 147
+b 149
+b 151
+b 87
+b 1
+b 247
+b 90
+b 590
+b 592
+b 212
+b 211
+b 1
+b 454
+b 456
+b 458
+b 460
+b 458
+b 1
+b 104
+b 62
+b 154
+b 153
+b 1
+b 141
+b 265
+b 13
+b 28
+b 42
+b 44
+b 25
+b 1
+b 270
+b 284
+b 218
+b 248
+b 250
+b 119
+b 168
+b 167
+b 1
+b 25
+b 76
+b 46
+b 66
+b 45
+b 1
+b 768
+b 770
+b 772
+b 774
+b 772
+b 1
+b 206
+b 208
+b 296
+b 260
+b 262
+b 260
+b 1
+b 4
+b 216
+b 268
+b 276
+b 267
+b 1
+b 272
+b 1
+b 345
+b 355
+b 47
+b 46
+b 1
+b 10
+b 29
+b 9
+b 1
+b 30
+b 188
+b 11
+b 10
+b 1
+b 134
+b 19
+b 165
+b 163
+b 2
+b 19
+b 1
+b 39
+b 41
+b 43
+b 45
+b 43
+b 1
+b 114
+b 122
+b 143
+b 121
+b 1
+b 785
+b 787
+b 785
+b 1
+b 214
+b 43
+b 40
+b 1
+b 91
+b 150
+b 88
+b 1
+b 71
+b 71
+b 1
+b 33
+b 439
+b 441
+b 443
+b 445
+b 12
+b 9
+b 1
+b 1
+b 1
+b 0
+b 1
+b 235
+b 242
+b 244
+b 38
+b 46
+b 41
+b 61
+b 54
+b 11
+b 16
+b 8
+b 1
+b 91
+b 90
+b 1
+b 24
+b 31
+b 173
+b 194
+b 187
+b 23
+b 21
+b 1
+b 19
+b 17
+b 1
+b 148
+b 150
+b 152
+b 150
+b 1
+b 78
+b 100
+b 99
+b 1
+b 19
+b 100
+b 102
+b 139
+b 100
+b 1
+b 357
+b 371
+b 100
+b 108
+b 39
+b 68
+b 36
+b 1
+b 65
+b 1
+b 74
+b 85
+b 72
+b 1
+b 9
+b 7
+b 1
+b 37
+b 68
+b 683
+b 227
+b 52
+b 54
+b 56
+b 58
+b 49
+b 1
+b 13
+b 9
+b 21
+b 8
+b 1
+b 17
+b 1
+b 215
+b 1027
+b 125
+b 153
+b 163
+b 152
+b 1
+b 172
+b 186
+b 61
+b 63
+b 65
+b 61
+b 1
+b 20
+b 57
+b 57
+b 1
+b 162
+b 164
+b 166
+b 162
+b 1
+b 133
+b 132
+b 1
+b 28
+b 30
+b 85
+b 87
+b 130
+b 85
+b 1
+b 9
+b 6
+b 1
+b 1
+b 18
+b 17
+b 1
+b 26
+b 41
+b 89
+b 23
+b 1
+b 86
+b 1
+b 463
+b 462
+b 1
+b 60
+b 60
+b 1
+b 5
+b 7
+b 17
+b 15
+b 1
+b 5
+b 7
+b 9
+b 11
+b 28
+b 38
+b 36
+b 1
+b 56
+b 71
+b 97
+b 106
+b 40
+b 42
+b 44
+b 594
+b 621
+b 788
+b 211
+b 255
+b 290
+b 292
+b 290
+b 1
+b 83
+b 96
+b 89
+b 22
+b 21
+b 1
+b 1
+b 124
+b 126
+b 128
+b 130
+b 41
+b 50
+b 36
+b 35
+b 1
+b 33
+b 47
+b 83
+b 143
+b 0
+b 18
+b 7
+b 65
+b 67
+b 69
+b 71
+b 69
+b 1
+b 31
+b 53
+b 5
+b 7
+b 36
+b 131
+b 159
+b 161
+b 159
+b 1
+b 290
+b 292
+b 290
+b 1
+b 6
+b 36
+b 38
+b 38
+b 1
+b 345
+b 344
+b 1
+b 32
+b 46
+b 48
+b 46
+b 1
+b 198
+b 214
+b 88
+b 24
+b 26
+b 24
+b 1
+b 69
+b 86
+b 68
+b 1
+b 73
+b 71
+b 1
+b 50
+b 58
+b 47
+b 1
+b 107
+b 196
+b 211
+b 137
+b 144
+b 21
+b 37
+b 18
+b 1
+b 35
+b 1
+b 103
+b 100
+b 1
+b 68
+b 0
+b 282
+b 284
+b 292
+b 282
+b 1
+b 78
+b 5
+b 36
+b 36
+b 1
+b 61
+b 58
+b 1
+b 299
+b 309
+b 6
+b 26
+b 29
+b 31
+b 29
+b 1
+b 120
+b 52
+b 112
+b 103
+b 105
+b 107
+b 1
+b 55
+b 57
+b 65
+b 55
+b 1
+b 281
+b 41
+b 17
+b 16
+b 1
+b 135
+b 6
+b 8
+b 173
+b 175
+b 170
+b 1
+b 5
+b 4
+b 1
+b 243
+b 241
+b 1
+b 94
+b 101
+b 100
+b 1
+b 571
+b 581
+b 569
+b 1
+b 9
+b 6
+b 1
+b 11
+b 13
+b 15
+b 17
+b 382
+b 390
+b 379
+b 1
+b 388
+b 1
+b 457
+b 470
+b 469
+b 1
+b 232
+b 52
+b 51
+b 1
+b 38
+b 38
+b 1
+b 42
+b 44
+b 46
+b 42
+b 1
+b 18
+b 4
+b 216
+b 252
+b 24
+b 11
+b 10
+b 1
+b 769
+b 787
+b 46
+b 3
+b 103
+b 105
+b 107
+b 116
+b 3
+b 5
+b 7
+b 5
+b 1
+b 80
+b 7
+b 89
+b 122
+b 80
+b 79
+b 1
+b 45
+b 1
+b 147
+b 179
+b 146
+b 1
+b 174
+b 1
+b 5
+b 185
+b 227
+b 229
+b 55
+b 47
+b 99
+b 97
+b 1
+b 36
+b 42
+b 41
+b 1
+b 21
+b 23
+b 25
+b 43
+b 367
+b 369
+b 371
+b 373
+b 371
+b 1
+b 72
+b 69
+b 1
+b 98
+b 81
+b 2
+b 4
+b 42
+b 32
+b 49
+b 65
+b 67
+b 46
+b 1
+b 65
+b 1
+b 817
+b 816
+b 1
+b 7
+b 9
+b 23
+b 123
+b 78
+b 76
+b 1
+b 41
+b 43
+b 38
+b 1
+b 179
+b 203
+b 202
+b 1
+b 33
+b 168
+b 70
+b 69
+b 1
+b 1
+b 20
+b 3
+b 61
+b 86
+b 233
+b 8
+b 75
+b 7
+b 1
+b 102
+b 104
+b 106
+b 3
+b 13
+b 43
+b 60
+b 69
+b 59
+b 1
+b 275
+b 273
+b 1
+b 92
+b 110
+b 89
+b 1
+b 72
+b 74
+b 76
+b 69
+b 1
+b 11
+b 21
+b 29
+b 20
+b 1
+b 25
+b 1
+b 36
+b 128
+b 127
+b 1
+b 27
+b 71
+b 73
+b 75
+b 77
+b 29
+b 31
+b 39
+b 38
+b 1
+b 201
+b 211
+b 37
+b 35
+b 34
+b 1
+b 27
+b 35
+b 24
+b 1
+b 136
+b 135
+b 1
+b 27
+b 623
+b 2
+b 14
+b 4
+b 6
+b 8
+b 73
+b 58
+b 73
+b 75
+b 340
+b 73
+b 75
+b 77
+b 79
+b 608
+b 171
+b 196
+b 195
+b 1
+b 54
+b 56
+b 58
+b 60
+b 161
+b 160
+b 1
+b 15
+b 17
+b 13
+b 13
+b 1
+b 15
+b 13
+b 1
+b 13
+b 8
+b 12
+b 102
+b 115
+b 36
+b 77
+b 74
+b 1
+b 26
+b 19
+b 18
+b 1
+b 213
+b 215
+b 217
+b 219
+b 29
+b 31
+b 33
+b 31
+b 1
+b 18
+b 8
+b 40
+b 19
+b 72
+b 74
+b 18
+b 1
+b 226
+b 228
+b 230
+b 232
+b 228
+b 1
+b 423
+b 437
+b 757
+b 17
+b 22
+b 3
+b 5
+b 5
+b 13
+b 15
+b 17
+b 19
+b 283
+b 285
+b 15
+b 113
+b 115
+b 117
+b 182
+b 181
+b 1
+b 7
+b 9
+b 138
+b 135
+b 1
+b 3
+b 9
+b 1
+b 1
+b 71
+b 68
+b 1
+b 0
+b 2
+b 18
+b 17
+b 1
+b 22
+b 122
+b 195
+b 197
+b 95
+b 7
+b 9
+b 18
+b 7
+b 1
+b 317
+b 335
+b 337
+b 316
+b 1
+b 8
+b 18
+b 20
+b 5
+b 1
+b 774
+b 790
+b 128
+b 164
+b 125
+b 1
+b 5
+b 4
+b 1
+b 726
+b 258
+b 14
+b 194
+b 13
+b 53
+b 20
+b 22
+b 77
+b 76
+b 1
+b 7
+b 4
+b 170
+b 180
+b 179
+b 1
+b 9
+b 57
+b 6
+b 20
+b 5
+b 1
+b 15
+b 1
+b 27
+b 38
+b 36
+b 1
+b 27
+b 1
+b 32
+b 41
+b 43
+b 41
+b 1
+b 28
+b 38
+b 40
+b 38
+b 1
+b 587
+b 599
+b 586
+b 1
+b 209
+b 105
+b 115
+b 159
+b 167
+b 38
+b 31
+b 45
+b 31
+b 1
+b 68
+b 12
+b 106
+b 41
+b 57
+b 40
+b 1
+b 559
+b 69
+b 71
+b 98
+b 97
+b 1
+b 14
+b 16
+b 14
+b 16
+b 18
+b 20
+b 11
+b 1
+b 18
+b 1
+b 166
+b 165
+b 1
+b 40
+b 42
+b 22
+b 19
+b 21
+b 0
+b 589
+b 591
+b 108
+b 107
+b 1
+b 52
+b 66
+b 91
+b 51
+b 1
+b 61
+b 1
+b 31
+b 57
+b 30
+b 1
+b 4
+b 74
+b 250
+b 0
+b 2
+b 186
+b 196
+b 185
+b 1
+b 5
+b 7
+b 20
+b 22
+b 6
+b 1
+b 176
+b 190
+b 378
+b 380
+b 10
+b 12
+b 14
+b 12
+b 1
+b 91
+b 105
+b 107
+b 89
+b 1
+b 105
+b 1
+b 44
+b 9
+b 77
+b 106
+b 76
+b 1
+b 267
+b 266
+b 1
+b 4
+b 24
+b 671
+b 673
+b 690
+b 689
+b 1
+b 32
+b 5
+b 254
+b 55
+b 54
+b 1
+b 5
+b 2
+b 1
+b 2
+b 24
+b 91
+b 38
+b 79
+b 37
+b 1
+b 350
+b 106
+b 30
+b 44
+b 135
+b 3
+b 65
+b 74
+b 73
+b 1
+b 50
+b 74
+b 49
+b 1
+b 26
+b 15
+b 17
+b 51
+b 454
+b 232
+b 234
+b 7
+b 23
+b 22
+b 1
+b 316
+b 217
+b 231
+b 216
+b 1
+b 227
+b 1
+b 139
+b 141
+b 1
+b 70
+b 72
+b 72
+b 1
+b 33
+b 30
+b 1
+b 112
+b 181
+b 1
+b 58
+b 60
+b 62
+b 58
+b 1
+b 8
+b 18
+b 36
+b 38
+b 72
+b 47
+b 11
+b 255
+b 2
+b 240
+b 249
+b 248
+b 1
+b 174
+b 184
+b 182
+b 1
+b 4
+b 16
+b 15
+b 1
+b 9
+b 11
+b 13
+b 183
+b 193
+b 55
+b 54
+b 1
+b 49
+b 51
+b 99
+b 107
+b 109
+b 107
+b 1
+b 7
+b 25
+b 156
+b 11
+b 122
+b 131
+b 133
+b 120
+b 1
+b 97
+b 7
+b 9
+b 31
+b 33
+b 35
+b 37
+b 31
+b 1
+b 7
+b 22
+b 27
+b 37
+b 253
+b 255
+b 257
+b 259
+b 257
+b 1
+b 7
+b 9
+b 11
+b 13
+b 17
+b 16
+b 1
+b 3
+b 5
+b 0
+b 1
+b 53
+b 67
+b 52
+b 1
+b 62
+b 1
+b 14
+b 8
+b 10
+b 10
+b 1
+b 11
+b 10
+b 1
+b 35
+b 34
+b 1
+b 14
+b 11
+b 16
+b 18
+b 20
+b 18
+b 1
+b 185
+b 7
+b 1
+b 20
+b 2
+b 18
+b 20
+b 38
+b 18
+b 1
+b 29
+b 31
+b 33
+b 35
+b 29
+b 1
+b 9
+b 11
+b 9
+b 1
+b 6
+b 161
+b 189
+b 191
+b 160
+b 1
+b 4
+b 3
+b 1
+b 5
+b 7
+b 7
+b 1
+b 240
+b 271
+b 281
+b 280
+b 1
+b 233
+b 230
+b 1
+b 84
+b 86
+b 81
+b 1
+b 4
+b 14
+b 4
+b 49
+b 51
+b 53
+b 3
+b 62
+b 64
+b 82
+b 79
+b 1
+b 345
+b 362
+b 515
+b 517
+b 527
+b 525
+b 1
+b 4
+b 42
+b 44
+b 232
+b 2
+b 37
+b 52
+b 36
+b 2
+b 47
+b 1
+b 3
+b 5
+b 14
+b 132
+b 134
+b 9
+b 8
+b 1
+b 54
+b 56
+b 1
+b 43
+b 59
+b 359
+b 366
+b 356
+b 1
+b 173
+b 170
+b 1
+b 16
+b 18
+b 4
+b 3
+b 1
+b 35
+b 85
+b 95
+b 97
+b 99
+b 97
+b 1
+b 4
+b 26
+b 28
+b 30
+b 32
+b 113
+b 115
+b 117
+b 113
+b 1
+b 6
+b 17
+b 6
+b 1
+b 13
+b 1
+b 23
+b 343
+b 364
+b 209
+b 219
+b 229
+b 208
+b 1
+b 215
+b 1
+b 222
+b 224
+b 1
+b 198
+b 195
+b 1
+b 11
+b 308
+b 310
+b 319
+b 318
+b 1
+b 234
+b 236
+b 59
+b 58
+b 1
+b 5
+b 60
+b 59
+b 61
+b 7
+b 165
+b 167
+b 169
+b 171
+b 68
+b 70
+b 72
+b 63
+b 65
+b 9
+b 12
+b 20
+b 30
+b 19
+b 1
+b 59
+b 66
+b 68
+b 66
+b 1
+b 36
+b 46
+b 48
+b 3
+b 62
+b 60
+b 62
+b 80
+b 72
+b 102
+b 42
+b 58
+b 39
+b 1
+b 36
+b 21
+b 15
+b 18
+b 30
+b 32
+b 160
+b 159
+b 1
+b 9
+b 11
+b 6
+b 1
+b 215
+b 232
+b 38
+b 35
+b 1
+b 25
+b 23
+b 1
+b 174
+b 245
+b 247
+b 302
+b 304
+b 306
+b 299
+b 1
+b 304
+b 1
+b 8
+b 10
+b 8
+b 1
+b 41
+b 13
+b 15
+b 17
+b 19
+b 17
+b 1
+b 438
+b 437
+b 1
+b 52
+b 50
+b 1
+b 3
+b 58
+b 60
+b 62
+b 64
+b 62
+b 1
+b 571
+b 581
+b 580
+b 1
+b 70
+b 68
+b 1
+b 49
+b 49
+b 1
+b 8
+b 5
+b 1
+b 105
+b 11
+b 36
+b 38
+b 31
+b 6
+b 5
+b 1
+b 14
+b 16
+b 11
+b 1
+b 1
+b 0
+b 1
+b 44
+b 46
+b 57
+b 44
+b 1
+b 123
+b 122
+b 1
+b 7
+b 232
+b 0
+b 2
+b 12
+b 3
+b 12
+b 85
+b 87
+b 93
+b 91
+b 1
+b 128
+b 127
+b 1
+b 65
+b 102
+b 62
+b 1
+b 32
+b 52
+b 31
+b 1
+b 105
+b 117
+b 104
+b 1
+b 366
+b 173
+b 195
+b 197
+b 199
+b 201
+b 195
+b 1
+b 914
+b 916
+b 918
+b 914
+b 1
+b 7
+b 4
+b 1
+b 1
+b 60
+b 59
+b 1
+b 31
+b 33
+b 31
+b 1
+b 589
+b 106
+b 65
+b 65
+b 1
+b 41
+b 40
+b 1
+b 4
+b 6
+b 8
+b 10
+b 22
+b 12
+b 11
+b 1
+b 4
+b 10
+b 12
+b 14
+b 24
+b 275
+b 299
+b 33
+b 32
+b 1
+b 2
+b 6
+b 6
+b 1
+b 50
+b 49
+b 1
+b 171
+b 185
+b 203
+b 34
+b 44
+b 115
+b 124
+b 230
+b 114
+b 1
+b 16
+b 24
+b 26
+b 24
+b 1
+b 316
+b 376
+b 375
+b 1
+b 180
+b 18
+b 20
+b 580
+b 582
+b 584
+b 582
+b 1
+b 60
+b 73
+b 75
+b 73
+b 1
+b 69
+b 8
+b 56
+b 55
+b 1
+b 12
+b 9
+b 1
+b 128
+b 160
+b 27
+b 49
+b 48
+b 1
+b 27
+b 35
+b 37
+b 35
+b 1
+b 14
+b 53
+b 69
+b 13
+b 1
+b 20
+b 17
+b 1
+b 93
+b 90
+b 1
+b 19
+b 35
+b 51
+b 34
+b 1
+b 1
+b 66
+b 27
+b 107
+b 6
+b 30
+b 90
+b 112
+b 111
+b 1
+b 355
+b 367
+b 369
+b 367
+b 1
+b 709
+b 711
+b 713
+b 709
+b 1
+b 142
+b 158
+b 4
+b 46
+b 88
+b 90
+b 5
+b 6
+b 140
+b 162
+b 164
+b 166
+b 164
+b 1
+b 3
+b 5
+b 49
+b 48
+b 1
+b 9
+b 0
+b 2
+b 124
+b 123
+b 1
+b 3
+b 5
+b 21
+b 23
+b 33
+b 22
+b 1
+b 49
+b 51
+b 61
+b 59
+b 1
+b 99
+b 101
+b 116
+b 206
+b 39
+b 183
+b 211
+b 180
+b 1
+b 40
+b 39
+b 1
+b 11
+b 13
+b 23
+b 22
+b 1
+b 149
+b 17
+b 14
+b 1
+b 4
+b 13
+b 3
+b 140
+b 139
+b 1
+b 0
+b 2
+b 39
+b 50
+b 38
+b 1
+b 45
+b 1
+b 1
+b 16
+b 7
+b 150
+b 224
+b 238
+b 147
+b 1
+b 235
+b 1
+b 50
+b 52
+b 64
+b 104
+b 156
+b 158
+b 103
+b 1
+b 52
+b 54
+b 56
+b 106
+b 114
+b 37
+b 39
+b 39
+b 1
+b 98
+b 96
+b 1
+b 27
+b 77
+b 85
+b 84
+b 1
+b 52
+b 5
+b 4
+b 1
+b 4
+b 3
+b 1
+b 51
+b 49
+b 1
+b 114
+b 111
+b 1
+b 134
+b 140
+b 138
+b 1
+b 17
+b 19
+b 14
+b 1
+b 11
+b 10
+b 1
+b 51
+b 86
+b 9
+b 56
+b 58
+b 7
+b 1
+b 56
+b 1
+b 38
+b 47
+b 320
+b 319
+b 1
+b 231
+b 233
+b 233
+b 1
+b 70
+b 1
+b 19
+b 191
+b 32
+b 57
+b 56
+b 1
+b 217
+b 223
+b 230
+b 79
+b 68
+b 526
+b 534
+b 7
+b 31
+b 7
+b 1
+b 26
+b 1
+b 807
+b 291
+b 22
+b 21
+b 1
+b 1
+b 7
+b 45
+b 47
+b 57
+b 42
+b 1
+b 54
+b 1
+b 226
+b 228
+b 230
+b 232
+b 79
+b 76
+b 1
+b 202
+b 201
+b 1
+b 32
+b 88
+b 1
+b 46
+b 914
+b 923
+b 922
+b 1
+b 174
+b 176
+b 178
+b 180
+b 176
+b 1
+b 707
+b 714
+b 41
+b 50
+b 86
+b 49
+b 1
+b 47
+b 49
+b 51
+b 53
+b 47
+b 1
+b 216
+b 218
+b 1
+b 106
+b 108
+b 155
+b 108
+b 1
+b 152
+b 1
+b 109
+b 129
+b 149
+b 128
+b 1
+b 145
+b 1
+b 128
+b 33
+b 63
+b 91
+b 60
+b 1
+b 89
+b 1
+b 32
+b 75
+b 77
+b 31
+b 1
+b 133
+b 135
+b 137
+b 150
+b 135
+b 1
+b 9
+b 3
+b 91
+b 74
+b 140
+b 241
+b 240
+b 1
+b 8
+b 27
+b 29
+b 31
+b 33
+b 31
+b 1
+b 25
+b 27
+b 55
+b 92
+b 9
+b 28
+b 41
+b 13
+b 12
+b 1
+b 298
+b 300
+b 302
+b 320
+b 295
+b 1
+b 84
+b 94
+b 92
+b 1
+b 31
+b 57
+b 56
+b 1
+b 53
+b 55
+b 84
+b 124
+b 122
+b 1
+b 48
+b 0
+b 10
+b 291
+b 108
+b 10
+b 12
+b 14
+b 16
+b 14
+b 1
+b 12
+b 19
+b 104
+b 113
+b 70
+b 124
+b 59
+b 88
+b 90
+b 58
+b 1
+b 33
+b 35
+b 51
+b 35
+b 1
+b 47
+b 1
+b 28
+b 7
+b 1
+b 76
+b 75
+b 1
+b 3
+b 195
+b 197
+b 199
+b 201
+b 38
+b 40
+b 42
+b 44
+b 56
+b 87
+b 54
+b 1
+b 0
+b 2
+b 126
+b 31
+b 108
+b 23
+b 37
+b 105
+b 36
+b 1
+b 14
+b 16
+b 27
+b 14
+b 1
+b 64
+b 206
+b 206
+b 208
+b 216
+b 215
+b 1
+b 98
+b 18
+b 118
+b 158
+b 50
+b 58
+b 72
+b 47
+b 1
+b 69
+b 1
+b 67
+b 83
+b 25
+b 43
+b 6
+b 15
+b 25
+b 645
+b 474
+b 488
+b 643
+b 487
+b 64
+b 118
+b 76
+b 75
+b 1
+b 189
+b 58
+b 60
+b 261
+b 283
+b 289
+b 282
+b 2
+b 26
+b 41
+b 43
+b 2
+b 4
+b 14
+b 97
+b 152
+b 34
+b 42
+b 295
+b 6
+b 59
+b 5
+b 1
+b 46
+b 270
+b 72
+b 74
+b 69
+b 1
+b 24
+b 22
+b 1
+b 151
+b 179
+b 229
+b 71
+b 85
+b 29
+b 375
+b 383
+b 381
+b 1
+b 378
+b 5
+b 3
+b 23
+b 35
+b 14
+b 140
+b 160
+b 169
+b 16
+b 15
+b 1
+b 82
+b 130
+b 165
+b 167
+b 125
+b 134
+b 136
+b 134
+b 1
+b 138
+b 136
+b 1
+b 5
+b 7
+b 75
+b 0
+b 2
+b 7
+b 325
+b 381
+b 237
+b 236
+b 1
+b 180
+b 182
+b 184
+b 74
+b 74
+b 1
+b 30
+b 30
+b 1
+b 131
+b 163
+b 157
+b 181
+b 66
+b 5
+b 4
+b 1
+b 51
+b 50
+b 1
+b 5
+b 7
+b 117
+b 119
+b 114
+b 1
+b 117
+b 1
+b 20
+b 63
+b 386
+b 3
+b 92
+b 108
+b 110
+b 91
+b 1
+b 9
+b 11
+b 13
+b 15
+b 11
+b 74
+b 17
+b 19
+b 21
+b 23
+b 14
+b 1
+b 21
+b 1
+b 35
+b 48
+b 50
+b 48
+b 1
+b 81
+b 80
+b 3
+b 5
+b 0
+b 2
+b 256
+b 292
+b 29
+b 4
+b 27
+b 29
+b 0
+b 2
+b 276
+b 286
+b 288
+b 290
+b 274
+b 2
+b 288
+b 1
+b 71
+b 93
+b 70
+b 1
+b 89
+b 1
+b 212
+b 214
+b 216
+b 218
+b 209
+b 1
+b 40
+b 37
+b 1
+b 2
+b 2
+b 1
+b 6
+b 8
+b 10
+b 12
+b 12
+b 22
+b 4
+b 21
+b 168
+b 176
+b 175
+b 1
+b 14
+b 13
+b 36
+b 11
+b 1
+b 7
+b 5
+b 2
+b 17
+b 32
+b 15
+b 1
+b 1
+b 45
+b 54
+b 56
+b 44
+b 1
+b 10
+b 7
+b 1
+b 126
+b 140
+b 123
+b 1
+b 75
+b 109
+b 111
+b 72
+b 1
+b 57
+b 71
+b 57
+b 1
+b 265
+b 267
+b 269
+b 271
+b 53
+b 73
+b 52
+b 1
+b 15
+b 27
+b 14
+b 1
+b 3
+b 5
+b 150
+b 15
+b 218
+b 7
+b 77
+b 79
+b 81
+b 77
+b 1
+b 297
+b 4
+b 35
+b 6
+b 10
+b 9
+b 1
+b 43
+b 45
+b 59
+b 58
+b 1
+b 142
+b 144
+b 171
+b 16
+b 16
+b 15
+b 1
+b 50
+b 72
+b 5
+b 7
+b 31
+b 39
+b 41
+b 15
+b 17
+b 39
+b 6
+b 3
+b 1
+b 51
+b 69
+b 98
+b 96
+b 1
+b 68
+b 1
+b 136
+b 17
+b 48
+b 67
+b 67
+b 1
+b 10
+b 3
+b 71
+b 113
+b 115
+b 411
+b 454
+b 408
+b 1
+b 451
+b 1
+b 223
+b 232
+b 252
+b 222
+b 1
+b 21
+b 23
+b 25
+b 24
+b 1
+b 21
+b 23
+b 21
+b 1
+b 245
+b 12
+b 14
+b 12
+b 1
+b 98
+b 100
+b 102
+b 116
+b 130
+b 132
+b 475
+b 486
+b 204
+b 224
+b 18
+b 20
+b 40
+b 18
+b 1
+b 5
+b 7
+b 22
+b 24
+b 2
+b 1
+b 0
+b 1
+b 74
+b 71
+b 1
+b 53
+b 50
+b 1
+b 1
+b 228
+b 240
+b 227
+b 1
+b 236
+b 1
+b 196
+b 273
+b 275
+b 277
+b 279
+b 207
+b 215
+b 214
+b 2
+b 124
+b 123
+b 1
+b 66
+b 76
+b 257
+b 271
+b 256
+b 1
+b 195
+b 22
+b 91
+b 93
+b 65
+b 67
+b 69
+b 67
+b 1
+b 12
+b 9
+b 1
+b 29
+b 29
+b 1
+b 486
+b 6
+b 26
+b 53
+b 55
+b 25
+b 1
+b 488
+b 17
+b 240
+b 242
+b 261
+b 240
+b 1
+b 9
+b 11
+b 13
+b 15
+b 13
+b 1
+b 234
+b 254
+b 79
+b 78
+b 1
+b 6
+b 8
+b 41
+b 58
+b 60
+b 101
+b 103
+b 105
+b 107
+b 101
+b 1
+b 55
+b 57
+b 60
+b 59
+b 1
+b 44
+b 46
+b 48
+b 156
+b 1
+b 310
+b 27
+b 26
+b 1
+b 188
+b 43
+b 77
+b 40
+b 1
+b 10
+b 9
+b 1
+b 155
+b 154
+b 1
+b 65
+b 87
+b 43
+b 45
+b 47
+b 49
+b 187
+b 186
+b 1
+b 2
+b 204
+b 243
+b 245
+b 243
+b 1
+b 131
+b 133
+b 135
+b 131
+b 1
+b 36
+b 43
+b 42
+b 1
+b 16
+b 18
+b 20
+b 22
+b 20
+b 47
+b 53
+b 137
+b 30
+b 30
+b 1
+b 148
+b 2
+b 63
+b 70
+b 69
+b 1
+b 13
+b 15
+b 10
+b 1
+b 25
+b 97
+b 109
+b 96
+b 1
+b 207
+b 227
+b 10
+b 12
+b 20
+b 19
+b 1
+b 46
+b 39
+b 41
+b 39
+b 1
+b 81
+b 94
+b 78
+b 1
+b 91
+b 1
+b 332
+b 334
+b 336
+b 332
+b 1
+b 33
+b 24
+b 89
+b 91
+b 93
+b 138
+b 91
+b 1
+b 7
+b 17
+b 36
+b 47
+b 62
+b 64
+b 181
+b 62
+b 1
+b 26
+b 28
+b 30
+b 26
+b 1
+b 49
+b 64
+b 47
+b 1
+b 44
+b 42
+b 1
+b 17
+b 33
+b 36
+b 101
+b 111
+b 100
+b 1
+b 48
+b 47
+b 1
+b 35
+b 37
+b 32
+b 1
+b 4
+b 14
+b 16
+b 3
+b 1
+b 7
+b 14
+b 50
+b 4
+b 1
+b 47
+b 1
+b 285
+b 287
+b 289
+b 291
+b 156
+b 164
+b 166
+b 44
+b 43
+b 2
+b 0
+b 2
+b 23
+b 0
+b 1
+b 32
+b 31
+b 1
+b 60
+b 8
+b 127
+b 31
+b 5
+b 20
+b 22
+b 4
+b 1
+b 11
+b 10
+b 1
+b 0
+b 0
+b 2
+b 74
+b 73
+b 1
+b 0
+b 2
+b 17
+b 44
+b 46
+b 98
+b 108
+b 33
+b 32
+b 1
+b 326
+b 356
+b 354
+b 2
+b 325
+b 1
+b 15
+b 191
+b 3
+b 10
+b 7
+b 1
+b 147
+b 144
+b 1
+b 17
+b 3
+b 13
+b 11
+b 1
+b 86
+b 18
+b 83
+b 85
+b 87
+b 264
+b 117
+b 152
+b 151
+b 1
+b 32
+b 34
+b 36
+b 235
+b 64
+b 63
+b 1
+b 11
+b 52
+b 77
+b 79
+b 51
+b 1
+b 102
+b 104
+b 152
+b 102
+b 1
+b 107
+b 109
+b 111
+b 113
+b 18
+b 0
+b 18
+b 17
+b 1
+b 269
+b 311
+b 313
+b 60
+b 44
+b 46
+b 61
+b 60
+b 1
+b 13
+b 15
+b 154
+b 153
+b 1
+b 38
+b 0
+b 15
+b 17
+b 75
+b 15
+b 1
+b 94
+b 107
+b 14
+b 11
+b 1
+b 259
+b 5
+b 7
+b 9
+b 98
+b 96
+b 1
+b 54
+b 51
+b 1
+b 101
+b 106
+b 59
+b 53
+b 63
+b 52
+b 1
+b 47
+b 54
+b 293
+b 333
+b 32
+b 31
+b 1
+b 59
+b 133
+b 217
+b 132
+b 1
+b 63
+b 170
+b 172
+b 38
+b 83
+b 80
+b 30
+b 28
+b 1
+b 43
+b 60
+b 62
+b 60
+b 1
+b 15
+b 35
+b 37
+b 14
+b 1
+b 30
+b 1
+b 5
+b 7
+b 9
+b 10
+b 12
+b 14
+b 24
+b 7
+b 1
+b 29
+b 31
+b 71
+b 40
+b 42
+b 90
+b 89
+b 1
+b 143
+b 142
+b 1
+b 23
+b 67
+b 103
+b 67
+b 1
+b 98
+b 1
+b 40
+b 28
+b 9
+b 8
+b 1
+b 63
+b 77
+b 112
+b 111
+b 1
+b 10
+b 15
+b 166
+b 58
+b 27
+b 9
+b 24
+b 12
+b 14
+b 12
+b 1
+b 46
+b 48
+b 50
+b 125
+b 123
+b 1
+b 305
+b 303
+b 1
+b 4
+b 14
+b 16
+b 3
+b 1
+b 24
+b 23
+b 1
+b 73
+b 75
+b 77
+b 86
+b 85
+b 1
+b 350
+b 360
+b 362
+b 349
+b 1
+b 72
+b 74
+b 76
+b 78
+b 76
+b 1
+b 110
+b 109
+b 1
+b 7
+b 15
+b 5
+b 1
+b 201
+b 128
+b 35
+b 37
+b 39
+b 41
+b 16
+b 18
+b 18
+b 1
+b 31
+b 30
+b 1
+b 47
+b 7
+b 14
+b 16
+b 18
+b 20
+b 18
+b 1
+b 10
+b 12
+b 26
+b 50
+b 86
+b 124
+b 126
+b 128
+b 18
+b 20
+b 22
+b 24
+b 106
+b 72
+b 47
+b 49
+b 59
+b 58
+b 1
+b 15
+b 12
+b 1
+b 5
+b 21
+b 20
+b 1
+b 34
+b 113
+b 32
+b 1
+b 111
+b 1
+b 49
+b 91
+b 93
+b 14
+b 28
+b 39
+b 13
+b 1
+b 359
+b 83
+b 120
+b 119
+b 1
+b 7
+b 7
+b 40
+b 42
+b 72
+b 40
+b 1
+b 92
+b 103
+b 103
+b 1
+b 333
+b 39
+b 284
+b 298
+b 283
+b 1
+b 293
+b 1
+b 25
+b 33
+b 331
+b 328
+b 1
+b 37
+b 35
+b 1
+b 119
+b 121
+b 123
+b 121
+b 1
+b 35
+b 59
+b 32
+b 1
+b 57
+b 1
+b 12
+b 10
+b 1
+b 13
+b 149
+b 146
+b 1
+b 1
+b 190
+b 192
+b 194
+b 10
+b 12
+b 14
+b 10
+b 1
+b 563
+b 5
+b 415
+b 417
+b 435
+b 415
+b 1
+b 89
+b 91
+b 89
+b 1
+b 127
+b 9
+b 11
+b 343
+b 724
+b 726
+b 736
+b 724
+b 1
+b 55
+b 65
+b 64
+b 1
+b 9
+b 187
+b 189
+b 191
+b 193
+b 191
+b 1
+b 466
+b 475
+b 477
+b 475
+b 1
+b 24
+b 34
+b 36
+b 23
+b 1
+b 755
+b 757
+b 759
+b 794
+b 752
+b 1
+b 518
+b 601
+b 603
+b 515
+b 1
+b 29
+b 31
+b 45
+b 26
+b 1
+b 42
+b 1
+b 192
+b 194
+b 196
+b 0
+b 105
+b 103
+b 1
+b 73
+b 75
+b 70
+b 1
+b 41
+b 65
+b 67
+b 40
+b 1
+b 91
+b 101
+b 64
+b 66
+b 68
+b 70
+b 20
+b 3
+b 105
+b 36
+b 47
+b 45
+b 2
+b 35
+b 1
+b 40
+b 49
+b 48
+b 1
+b 72
+b 79
+b 727
+b 729
+b 731
+b 733
+b 19
+b 26
+b 111
+b 25
+b 1
+b 722
+b 737
+b 721
+b 1
+b 204
+b 50
+b 106
+b 108
+b 110
+b 112
+b 103
+b 1
+b 110
+b 1
+b 217
+b 253
+b 4
+b 14
+b 705
+b 707
+b 755
+b 705
+b 1
+b 799
+b 6
+b 293
+b 704
+b 5
+b 208
+b 205
+b 1
+b 0
+b 14
+b 16
+b 18
+b 20
+b 150
+b 152
+b 154
+b 156
+b 70
+b 278
+b 70
+b 1
+b 273
+b 1
+b 427
+b 597
+b 599
+b 597
+b 1
+b 742
+b 744
+b 25
+b 24
+b 1
+b 7
+b 19
+b 181
+b 223
+b 57
+b 56
+b 1
+b 746
+b 26
+b 194
+b 25
+b 1
+b 189
+b 1
+b 420
+b 433
+b 419
+b 1
+b 44
+b 17
+b 25
+b 31
+b 30
+b 1
+b 132
+b 134
+b 142
+b 75
+b 72
+b 1
+b 33
+b 35
+b 271
+b 8
+b 4
+b 12
+b 26
+b 28
+b 35
+b 6
+b 40
+b 39
+b 1
+b 269
+b 5
+b 3
+b 1
+b 59
+b 61
+b 145
+b 12
+b 10
+b 1
+b 132
+b 134
+b 210
+b 245
+b 247
+b 209
+b 1
+b 78
+b 80
+b 133
+b 80
+b 1
+b 129
+b 1
+b 40
+b 42
+b 309
+b 308
+b 1
+b 638
+b 640
+b 153
+b 662
+b 664
+b 666
+b 668
+b 666
+b 1
+b 43
+b 167
+b 39
+b 37
+b 190
+b 92
+b 53
+b 5
+b 14
+b 62
+b 64
+b 66
+b 74
+b 706
+b 724
+b 750
+b 705
+b 1
+b 113
+b 115
+b 79
+b 224
+b 221
+b 1
+b 11
+b 10
+b 1
+b 242
+b 254
+b 253
+b 1
+b 318
+b 320
+b 330
+b 318
+b 1
+b 754
+b 785
+b 548
+b 714
+b 547
+b 1
+b 191
+b 24
+b 45
+b 44
+b 2
+b 4
+b 4
+b 1
+b 300
+b 9
+b 420
+b 430
+b 7
+b 9
+b 11
+b 13
+b 8
+b 21
+b 4
+b 41
+b 75
+b 96
+b 322
+b 321
+b 1
+b 74
+b 76
+b 250
+b 264
+b 202
+b 199
+b 1
+b 49
+b 96
+b 93
+b 1
+b 422
+b 432
+b 434
+b 432
+b 1
+b 20
+b 11
+b 13
+b 608
+b 634
+b 633
+b 1
+b 167
+b 99
+b 37
+b 39
+b 8
+b 10
+b 12
+b 8
+b 1
+b 8
+b 10
+b 12
+b 14
+b 10
+b 1
+b 40
+b 49
+b 39
+b 1
+b 41
+b 61
+b 40
+b 1
+b 11
+b 10
+b 12
+b 14
+b 12
+b 1
+b 131
+b 51
+b 194
+b 208
+b 193
+b 1
+b 203
+b 1
+b 64
+b 44
+b 737
+b 736
+b 1
+b 12
+b 22
+b 94
+b 96
+b 98
+b 96
+b 1
+b 111
+b 109
+b 1
+b 77
+b 75
+b 1
+b 446
+b 448
+b 450
+b 452
+b 450
+b 1
+b 85
+b 120
+b 363
+b 365
+b 367
+b 365
+b 1
+b 163
+b 183
+b 77
+b 91
+b 63
+b 145
+b 147
+b 145
+b 1
+b 53
+b 68
+b 52
+b 1
+b 18
+b 26
+b 161
+b 219
+b 221
+b 160
+b 1
+b 214
+b 1
+b 6
+b 8
+b 10
+b 264
+b 280
+b 221
+b 223
+b 225
+b 227
+b 221
+b 1
+b 192
+b 206
+b 189
+b 1
+b 204
+b 1
+b 168
+b 165
+b 1
+b 96
+b 46
+b 43
+b 1
+b 9
+b 11
+b 13
+b 15
+b 6
+b 1
+b 145
+b 144
+b 1
+b 30
+b 32
+b 32
+b 1
+b 87
+b 86
+b 1
+b 129
+b 193
+b 62
+b 3
+b 262
+b 282
+b 284
+b 260
+b 1
+b 282
+b 1
+b 267
+b 265
+b 1
+b 60
+b 73
+b 70
+b 1
+b 616
+b 618
+b 620
+b 622
+b 99
+b 101
+b 144
+b 496
+b 506
+b 495
+b 1
+b 502
+b 1
+b 80
+b 505
+b 559
+b 508
+b 86
+b 5
+b 15
+b 59
+b 61
+b 63
+b 65
+b 56
+b 1
+b 63
+b 1
+b 494
+b 78
+b 54
+b 0
+b 2
+b 12
+b 0
+b 1
+b 281
+b 283
+b 285
+b 5
+b 7
+b 5
+b 1
+b 49
+b 96
+b 95
+b 1
+b 73
+b 18
+b 20
+b 22
+b 18
+b 1
+b 4
+b 3
+b 1
+b 51
+b 53
+b 53
+b 1
+b 433
+b 435
+b 437
+b 439
+b 67
+b 69
+b 172
+b 174
+b 169
+b 1
+b 172
+b 1
+b 211
+b 210
+b 1
+b 38
+b 35
+b 1
+b 479
+b 481
+b 483
+b 485
+b 178
+b 180
+b 182
+b 184
+b 178
+b 1
+b 10
+b 12
+b 14
+b 16
+b 80
+b 96
+b 258
+b 284
+b 255
+b 1
+b 6
+b 15
+b 38
+b 37
+b 1
+b 141
+b 141
+b 1
+b 10
+b 151
+b 7
+b 20
+b 18
+b 1
+b 0
+b 28
+b 28
+b 1
+b 60
+b 40
+b 42
+b 593
+b 595
+b 610
+b 593
+b 1
+b 151
+b 1
+b 7
+b 689
+b 691
+b 759
+b 689
+b 1
+b 12
+b 14
+b 12
+b 1
+b 133
+b 189
+b 76
+b 73
+b 1
+b 8
+b 7
+b 1
+b 656
+b 658
+b 667
+b 656
+b 1
+b 86
+b 103
+b 84
+b 1
+b 98
+b 1
+b 30
+b 32
+b 34
+b 30
+b 32
+b 34
+b 489
+b 506
+b 4
+b 33
+b 32
+b 1
+b 6
+b 6
+b 1
+b 50
+b 50
+b 1
+b 56
+b 19
+b 625
+b 627
+b 629
+b 627
+b 1
+b 0
+b 484
+b 481
+b 1
+b 66
+b 4
+b 3
+b 216
+b 218
+b 220
+b 230
+b 1026
+b 25
+b 583
+b 585
+b 587
+b 583
+b 1
+b 55
+b 62
+b 130
+b 158
+b 76
+b 78
+b 80
+b 328
+b 336
+b 327
+b 1
+b 50
+b 49
+b 1
+b 68
+b 65
+b 1
+b 4
+b 3
+b 83
+b 93
+b 45
+b 98
+b 132
+b 134
+b 136
+b 40
+b 39
+b 1
+b 7
+b 9
+b 9
+b 1
+b 153
+b 175
+b 177
+b 152
+b 1
+b 102
+b 76
+b 78
+b 79
+b 95
+b 76
+b 1
+b 45
+b 43
+b 1
+b 212
+b 225
+b 224
+b 1
+b 4
+b 12
+b 2
+b 16
+b 19
+b 77
+b 77
+b 1
+b 5
+b 48
+b 59
+b 6
+b 8
+b 15
+b 6
+b 1
+b 57
+b 72
+b 74
+b 55
+b 1
+b 1
+b 82
+b 84
+b 36
+b 38
+b 73
+b 72
+b 1
+b 453
+b 467
+b 469
+b 451
+b 1
+b 144
+b 146
+b 148
+b 150
+b 148
+b 1
+b 37
+b 39
+b 41
+b 133
+b 142
+b 161
+b 163
+b 31
+b 200
+b 219
+b 47
+b 49
+b 51
+b 49
+b 1
+b 36
+b 38
+b 52
+b 36
+b 1
+b 10
+b 12
+b 1
+b 176
+b 183
+b 359
+b 357
+b 1
+b 58
+b 75
+b 55
+b 1
+b 24
+b 26
+b 28
+b 30
+b 21
+b 1
+b 28
+b 1
+b 619
+b 6
+b 9
+b 8
+b 1
+b 110
+b 128
+b 165
+b 51
+b 53
+b 51
+b 1
+b 145
+b 181
+b 76
+b 75
+b 1
+b 371
+b 245
+b 24
+b 26
+b 4
+b 119
+b 131
+b 117
+b 1
+b 76
+b 75
+b 1
+b 16
+b 29
+b 15
+b 1
+b 25
+b 1
+b 11
+b 438
+b 440
+b 442
+b 22
+b 24
+b 26
+b 28
+b 19
+b 1
+b 155
+b 157
+b 159
+b 62
+b 84
+b 93
+b 95
+b 97
+b 99
+b 29
+b 31
+b 29
+b 1
+b 3
+b 411
+b 413
+b 436
+b 501
+b 559
+b 46
+b 48
+b 7
+b 14
+b 80
+b 79
+b 1
+b 0
+b 9
+b 3
+b 5
+b 7
+b 57
+b 59
+b 61
+b 63
+b 0
+b 2
+b 15
+b 57
+b 59
+b 61
+b 63
+b 213
+b 90
+b 27
+b 1
+b 0
+b 1
+b 687
+b 14
+b 13
+b 1
+b 0
+b 68
+b 70
+b 80
+b 21
+b 28
+b 27
+b 1
+b 40
+b 93
+b 95
+b 95
+b 1
+b 5
+b 4
+b 1
+b 60
+b 68
+b 29
+b 31
+b 47
+b 29
+b 1
+b 44
+b 21
+b 477
+b 485
+b 91
+b 9
+b 1
+b 57
+b 59
+b 61
+b 63
+b 57
+b 1
+b 163
+b 171
+b 173
+b 160
+b 1
+b 171
+b 1
+b 37
+b 1
+b 12
+b 93
+b 4
+b 3
+b 126
+b 137
+b 136
+b 1
+b 176
+b 193
+b 207
+b 192
+b 1
+b 203
+b 1
+b 73
+b 119
+b 5
+b 19
+b 114
+b 143
+b 151
+b 159
+b 183
+b 156
+b 1
+b 3
+b 0
+b 1
+b 163
+b 165
+b 167
+b 45
+b 95
+b 114
+b 113
+b 1
+b 79
+b 89
+b 129
+b 29
+b 31
+b 33
+b 35
+b 62
+b 64
+b 83
+b 62
+b 1
+b 51
+b 83
+b 91
+b 82
+b 1
+b 3
+b 5
+b 7
+b 9
+b 7
+b 1
+b 174
+b 221
+b 237
+b 220
+b 1
+b 96
+b 98
+b 118
+b 96
+b 1
+b 33
+b 57
+b 82
+b 43
+b 41
+b 1
+b 98
+b 11
+b 10
+b 1
+b 39
+b 1
+b 10
+b 12
+b 51
+b 41
+b 39
+b 1
+b 78
+b 75
+b 1
+b 4
+b 154
+b 156
+b 172
+b 171
+b 1
+b 163
+b 53
+b 46
+b 48
+b 24
+b 23
+b 1
+b 64
+b 80
+b 82
+b 88
+b 90
+b 92
+b 94
+b 92
+b 1
+b 185
+b 0
+b 2
+b 14
+b 12
+b 1
+b 19
+b 9
+b 73
+b 82
+b 84
+b 71
+b 1
+b 82
+b 1
+b 84
+b 82
+b 2
+b 17
+b 0
+b 2
+b 28
+b 36
+b 26
+b 1
+b 34
+b 1
+b 373
+b 375
+b 377
+b 379
+b 377
+b 1
+b 116
+b 169
+b 116
+b 1
+b 164
+b 1
+b 351
+b 50
+b 441
+b 451
+b 17
+b 19
+b 29
+b 17
+b 1
+b 5
+b 7
+b 19
+b 81
+b 94
+b 210
+b 7
+b 0
+b 33
+b 5
+b 33
+b 32
+b 1
+b 11
+b 20
+b 11
+b 13
+b 15
+b 17
+b 8
+b 1
+b 77
+b 102
+b 130
+b 152
+b 159
+b 151
+b 1
+b 37
+b 39
+b 41
+b 43
+b 39
+b 1
+b 10
+b 12
+b 14
+b 10
+b 12
+b 22
+b 20
+b 1
+b 60
+b 68
+b 59
+b 2
+b 64
+b 1
+b 119
+b 42
+b 44
+b 223
+b 34
+b 5
+b 33
+b 35
+b 30
+b 1
+b 1
+b 11
+b 200
+b 198
+b 1
+b 42
+b 23
+b 22
+b 1
+b 385
+b 409
+b 409
+b 1
+b 382
+b 1
+b 187
+b 219
+b 216
+b 1
+b 21
+b 43
+b 20
+b 1
+b 39
+b 1
+b 7
+b 8
+b 5
+b 7
+b 5
+b 1
+b 283
+b 283
+b 1
+b 50
+b 49
+b 1
+b 2
+b 3
+b 94
+b 37
+b 23
+b 35
+b 37
+b 35
+b 1
+b 732
+b 752
+b 818
+b 731
+b 1
+b 7
+b 314
+b 316
+b 314
+b 1
+b 9
+b 11
+b 1
+b 1
+b 29
+b 31
+b 29
+b 1
+b 34
+b 32
+b 1
+b 0
+b 2
+b 2
+b 1
+b 717
+b 719
+b 719
+b 1
+b 74
+b 71
+b 1
+b 11
+b 41
+b 43
+b 41
+b 1
+b 2
+b 4
+b 6
+b 4
+b 1
+b 35
+b 67
+b 86
+b 88
+b 90
+b 84
+b 1
+b 72
+b 120
+b 122
+b 120
+b 1
+b 27
+b 37
+b 36
+b 1
+b 82
+b 133
+b 130
+b 1
+b 133
+b 135
+b 135
+b 1
+b 379
+b 381
+b 379
+b 1
+b 18
+b 12
+b 8
+b 125
+b 127
+b 129
+b 131
+b 42
+b 224
+b 23
+b 105
+b 1
+b 13
+b 5
+b 2
+b 4
+b 6
+b 8
+b 6
+b 1
+b 18
+b 17
+b 1
+b 23
+b 25
+b 3
+b 5
+b 7
+b 17
+b 0
+b 1
+b 63
+b 65
+b 67
+b 4
+b 22
+b 105
+b 86
+b 9
+b 6
+b 365
+b 6
+b 4
+b 1
+b 13
+b 51
+b 53
+b 51
+b 1
+b 112
+b 114
+b 114
+b 1
+b 6
+b 5
+b 1
+b 107
+b 109
+b 84
+b 314
+b 366
+b 311
+b 1
+b 363
+b 1
+b 69
+b 71
+b 69
+b 1
+b 18
+b 15
+b 17
+b 19
+b 21
+b 21
+b 69
+b 19
+b 1
+b 67
+b 1
+b 278
+b 280
+b 282
+b 313
+b 3
+b 188
+b 2
+b 1
+b 184
+b 1
+b 123
+b 133
+b 63
+b 84
+b 83
+b 2
+b 60
+b 1
+b 37
+b 34
+b 1
+b 3
+b 287
+b 284
+b 1
+b 32
+b 32
+b 1
+b 153
+b 43
+b 59
+b 61
+b 71
+b 7
+b 62
+b 72
+b 62
+b 1
+b 69
+b 1
+b 125
+b 127
+b 129
+b 131
+b 127
+b 1
+b 5
+b 20
+b 294
+b 293
+b 1
+b 9
+b 26
+b 30
+b 3
+b 5
+b 47
+b 1
+b 41
+b 43
+b 45
+b 120
+b 38
+b 1
+b 430
+b 421
+b 126
+b 151
+b 109
+b 123
+b 31
+b 33
+b 40
+b 28
+b 1
+b 37
+b 1
+b 25
+b 4
+b 6
+b 4
+b 1
+b 97
+b 99
+b 9
+b 8
+b 1
+b 95
+b 5
+b 7
+b 5
+b 1
+b 141
+b 138
+b 1
+b 4
+b 4
+b 1
+b 159
+b 156
+b 1
+b 25
+b 34
+b 22
+b 1
+b 38
+b 35
+b 1
+b 220
+b 218
+b 1
+b 14
+b 14
+b 1
+b 257
+b 0
+b 101
+b 103
+b 105
+b 107
+b 103
+b 1
+b 14
+b 20
+b 22
+b 18
+b 1
+b 13
+b 1
+b 206
+b 19
+b 19
+b 1
+b 102
+b 149
+b 5
+b 7
+b 9
+b 7
+b 1
+b 367
+b 365
+b 1
+b 163
+b 254
+b 256
+b 258
+b 260
+b 254
+b 1
+b 128
+b 130
+b 128
+b 1
+b 6
+b 223
+b 225
+b 227
+b 223
+b 1
+b 3
+b 30
+b 32
+b 34
+b 36
+b 32
+b 1
+b 23
+b 22
+b 1
+b 123
+b 125
+b 80
+b 92
+b 77
+b 1
+b 35
+b 57
+b 6
+b 214
+b 9
+b 195
+b 2
+b 2
+b 1
+b 0
+b 45
+b 47
+b 57
+b 56
+b 1
+b 32
+b 34
+b 36
+b 38
+b 38
+b 1
+b 47
+b 110
+b 72
+b 70
+b 1
+b 14
+b 166
+b 165
+b 1
+b 94
+b 96
+b 98
+b 100
+b 32
+b 41
+b 99
+b 40
+b 1
+b 12
+b 39
+b 41
+b 24
+b 20
+b 27
+b 10
+b 16
+b 1
+b 45
+b 12
+b 139
+b 141
+b 35
+b 87
+b 101
+b 103
+b 85
+b 2
+b 101
+b 1
+b 181
+b 188
+b 207
+b 206
+b 2
+b 179
+b 1
+b 126
+b 136
+b 156
+b 135
+b 1
+b 66
+b 20
+b 1
+b 38
+b 62
+b 17
+b 44
+b 46
+b 765
+b 764
+b 1
+b 275
+b 277
+b 139
+b 28
+b 67
+b 5
+b 20
+b 123
+b 19
+b 1
+b 51
+b 173
+b 21
+b 151
+b 153
+b 153
+b 1
+b 75
+b 73
+b 1
+b 33
+b 20
+b 2
+b 4
+b 30
+b 2
+b 4
+b 6
+b 8
+b 11
+b 13
+b 21
+b 474
+b 491
+b 119
+b 219
+b 28
+b 33
+b 51
+b 50
+b 1
+b 795
+b 794
+b 2
+b 2
+b 4
+b 331
+b 337
+b 349
+b 335
+b 1
+b 67
+b 81
+b 66
+b 12
+b 14
+b 12
+b 1
+b 2
+b 20
+b 129
+b 24
+b 200
+b 199
+b 1
+b 26
+b 83
+b 18
+b 64
+b 74
+b 63
+b 1
+b 4
+b 11
+b 13
+b 3
+b 1
+b 64
+b 19
+b 76
+b 84
+b 75
+b 1
+b 0
+b 54
+b 63
+b 38
+b 1
+b 15
+b 34
+b 44
+b 89
+b 91
+b 86
+b 1
+b 28
+b 36
+b 36
+b 38
+b 36
+b 1
+b 27
+b 35
+b 62
+b 33
+b 2
+b 26
+b 1
+b 96
+b 98
+b 100
+b 65
+b 62
+b 1
+b 101
+b 103
+b 98
+b 1
+b 30
+b 29
+b 1
+b 299
+b 0
+b 543
+b 545
+b 547
+b 141
+b 138
+b 1
+b 6
+b 0
+b 2
+b 2
+b 1
+b 47
+b 27
+b 11
+b 13
+b 15
+b 17
+b 1
+b 13
+b 31
+b 12
+b 1
+b 38
+b 37
+b 1
+b 3
+b 0
+b 1
+b 39
+b 41
+b 1
+b 336
+b 355
+b 335
+b 1
+b 39
+b 41
+b 43
+b 45
+b 43
+b 1
+b 16
+b 26
+b 211
+b 209
+b 1
+b 3
+b 0
+b 0
+b 1
+b 53
+b 53
+b 1
+b 29
+b 28
+b 1
+b 227
+b 226
+b 1
+b 48
+b 50
+b 3
+b 5
+b 7
+b 3
+b 1
+b 49
+b 47
+b 1
+b 9
+b 11
+b 11
+b 1
+b 34
+b 42
+b 131
+b 133
+b 135
+b 158
+b 3
+b 24
+b 298
+b 329
+b 331
+b 297
+b 1
+b 9
+b 25
+b 327
+b 329
+b 408
+b 327
+b 1
+b 33
+b 0
+b 2
+b 0
+b 124
+b 134
+b 142
+b 133
+b 1
+b 138
+b 1
+b 17
+b 27
+b 29
+b 25
+b 39
+b 119
+b 142
+b 165
+b 29
+b 90
+b 92
+b 94
+b 96
+b 94
+b 1
+b 143
+b 0
+b 28
+b 26
+b 1
+b 35
+b 98
+b 97
+b 1
+b 51
+b 239
+b 254
+b 54
+b 56
+b 33
+b 32
+b 1
+b 45
+b 59
+b 232
+b 238
+b 231
+b 1
+b 46
+b 14
+b 65
+b 130
+b 132
+b 134
+b 10
+b 2
+b 4
+b 2
+b 1
+b 29
+b 3
+b 103
+b 103
+b 1
+b 13
+b 12
+b 1
+b 327
+b 360
+b 105
+b 107
+b 115
+b 91
+b 90
+b 1
+b 18
+b 45
+b 112
+b 65
+b 103
+b 152
+b 189
+b 149
+b 1
+b 5
+b 4
+b 1
+b 20
+b 22
+b 24
+b 23
+b 25
+b 27
+b 1
+b 0
+b 1
+b 30
+b 39
+b 26
+b 28
+b 30
+b 32
+b 28
+b 1
+b 366
+b 372
+b 69
+b 71
+b 73
+b 69
+b 1
+b 20
+b 22
+b 15
+b 14
+b 1
+b 24
+b 34
+b 98
+b 95
+b 1
+b 0
+b 2
+b 8
+b 305
+b 32
+b 34
+b 32
+b 1
+b 57
+b 59
+b 61
+b 63
+b 10
+b 12
+b 14
+b 4
+b 6
+b 8
+b 176
+b 217
+b 220
+b 222
+b 222
+b 1
+b 18
+b 17
+b 1
+b 14
+b 34
+b 33
+b 1
+b 511
+b 527
+b 544
+b 526
+b 1
+b 44
+b 58
+b 71
+b 57
+b 1
+b 55
+b 105
+b 425
+b 413
+b 6
+b 16
+b 9
+b 27
+b 19
+b 21
+b 23
+b 16
+b 1
+b 21
+b 1
+b 9
+b 8
+b 1
+b 17
+b 60
+b 59
+b 1
+b 10
+b 12
+b 50
+b 106
+b 108
+b 110
+b 112
+b 108
+b 1
+b 166
+b 168
+b 170
+b 227
+b 226
+b 1
+b 45
+b 25
+b 41
+b 42
+b 48
+b 41
+b 2
+b 44
+b 1
+b 1
+b 184
+b 192
+b 154
+b 156
+b 158
+b 94
+b 91
+b 1
+b 4
+b 4
+b 1
+b 37
+b 2
+b 4
+b 2
+b 1
+b 192
+b 4
+b 3
+b 1
+b 5
+b 46
+b 48
+b 50
+b 336
+b 338
+b 340
+b 342
+b 27
+b 45
+b 43
+b 2
+b 5
+b 95
+b 97
+b 99
+b 101
+b 101
+b 1
+b 92
+b 1
+b 3
+b 5
+b 7
+b 98
+b 104
+b 103
+b 1
+b 7
+b 65
+b 136
+b 50
+b 57
+b 56
+b 1
+b 4
+b 90
+b 92
+b 100
+b 87
+b 1
+b 97
+b 1
+b 200
+b 202
+b 204
+b 200
+b 1
+b 109
+b 121
+b 119
+b 1
+b 109
+b 1
+b 126
+b 59
+b 271
+b 315
+b 314
+b 2
+b 125
+b 148
+b 91
+b 121
+b 140
+b 196
+b 214
+b 61
+b 30
+b 41
+b 43
+b 45
+b 43
+b 1
+b 48
+b 50
+b 48
+b 1
+b 83
+b 80
+b 1
+b 5
+b 7
+b 7
+b 1
+b 801
+b 803
+b 805
+b 801
+b 1
+b 1
+b 35
+b 20
+b 23
+b 33
+b 31
+b 1
+b 72
+b 14
+b 60
+b 62
+b 2
+b 93
+b 105
+b 359
+b 358
+b 1
+b 173
+b 175
+b 215
+b 224
+b 34
+b 67
+b 33
+b 1
+b 62
+b 1
+b 6
+b 150
+b 64
+b 150
+b 87
+b 89
+b 87
+b 1
+b 79
+b 81
+b 83
+b 81
+b 1
+b 1
+b 151
+b 9
+b 9
+b 8
+b 1
+b 78
+b 78
+b 1
+b 8
+b 10
+b 17
+b 16
+b 1
+b 98
+b 71
+b 70
+b 1
+b 9
+b 6
+b 1
+b 151
+b 25
+b 72
+b 74
+b 0
+b 2
+b 2
+b 1
+b 14
+b 32
+b 11
+b 1
+b 29
+b 1
+b 170
+b 172
+b 180
+b 178
+b 1
+b 319
+b 321
+b 323
+b 325
+b 323
+b 1
+b 632
+b 642
+b 644
+b 14
+b 16
+b 18
+b 20
+b 115
+b 115
+b 1
+b 9
+b 9
+b 1
+b 161
+b 163
+b 165
+b 161
+b 1
+b 65
+b 142
+b 131
+b 0
+b 2
+b 184
+b 186
+b 203
+b 81
+b 89
+b 80
+b 1
+b 42
+b 3
+b 17
+b 24
+b 15
+b 2
+b 3
+b 1
+b 67
+b 134
+b 80
+b 229
+b 228
+b 1
+b 0
+b 15
+b 638
+b 673
+b 671
+b 1
+b 352
+b 350
+b 1
+b 63
+b 112
+b 7
+b 6
+b 1
+b 38
+b 55
+b 52
+b 1
+b 5
+b 4
+b 1
+b 164
+b 224
+b 166
+b 176
+b 21
+b 23
+b 25
+b 27
+b 81
+b 112
+b 114
+b 112
+b 1
+b 600
+b 610
+b 612
+b 610
+b 1
+b 149
+b 159
+b 28
+b 27
+b 1
+b 68
+b 76
+b 65
+b 1
+b 35
+b 26
+b 3
+b 8
+b 1
+b 1
+b 6
+b 1
+b 78
+b 80
+b 82
+b 78
+b 1
+b 51
+b 76
+b 75
+b 1
+b 75
+b 55
+b 598
+b 613
+b 69
+b 93
+b 95
+b 93
+b 1
+b 141
+b 150
+b 182
+b 179
+b 1
+b 187
+b 201
+b 184
+b 1
+b 79
+b 78
+b 1
+b 113
+b 148
+b 132
+b 44
+b 46
+b 44
+b 1
+b 525
+b 533
+b 524
+b 1
+b 484
+b 486
+b 488
+b 490
+b 76
+b 78
+b 98
+b 97
+b 1
+b 30
+b 2
+b 4
+b 82
+b 94
+b 93
+b 1
+b 53
+b 55
+b 64
+b 256
+b 25
+b 27
+b 1
+b 190
+b 192
+b 202
+b 201
+b 1
+b 3
+b 5
+b 3
+b 1
+b 186
+b 203
+b 247
+b 246
+b 1
+b 108
+b 170
+b 4
+b 16
+b 35
+b 37
+b 39
+b 41
+b 37
+b 1
+b 544
+b 620
+b 645
+b 619
+b 1
+b 17
+b 19
+b 14
+b 1
+b 17
+b 1
+b 41
+b 43
+b 45
+b 108
+b 136
+b 105
+b 1
+b 133
+b 1
+b 508
+b 510
+b 510
+b 1
+b 88
+b 87
+b 1
+b 543
+b 545
+b 547
+b 0
+b 510
+b 520
+b 509
+b 1
+b 695
+b 4
+b 19
+b 3
+b 1
+b 606
+b 13
+b 530
+b 532
+b 534
+b 536
+b 52
+b 55
+b 17
+b 16
+b 1
+b 535
+b 118
+b 181
+b 180
+b 1
+b 601
+b 620
+b 622
+b 152
+b 162
+b 98
+b 4
+b 46
+b 45
+b 1
+b 511
+b 513
+b 515
+b 517
+b 511
+b 1
+b 62
+b 90
+b 139
+b 59
+b 1
+b 134
+b 1
+b 58
+b 69
+b 83
+b 68
+b 1
+b 79
+b 1
+b 104
+b 122
+b 195
+b 1
+b 9
+b 0
+b 1
+b 5
+b 1
+b 146
+b 29
+b 31
+b 29
+b 1
+b 30
+b 32
+b 91
+b 27
+b 1
+b 88
+b 1
+b 24
+b 61
+b 63
+b 61
+b 1
+b 116
+b 151
+b 175
+b 115
+b 1
+b 619
+b 640
+b 212
+b 226
+b 228
+b 209
+b 1
+b 226
+b 1
+b 26
+b 32
+b 33
+b 253
+b 255
+b 257
+b 253
+b 1
+b 1
+b 505
+b 507
+b 43
+b 45
+b 47
+b 49
+b 40
+b 1
+b 47
+b 1
+b 70
+b 72
+b 74
+b 76
+b 74
+b 1
+b 306
+b 308
+b 310
+b 320
+b 109
+b 108
+b 1
+b 0
+b 2
+b 16
+b 0
+b 1
+b 74
+b 81
+b 83
+b 81
+b 1
+b 553
+b 563
+b 552
+b 1
+b 559
+b 1
+b 6
+b 117
+b 148
+b 162
+b 79
+b 236
+b 238
+b 247
+b 246
+b 1
+b 26
+b 56
+b 36
+b 57
+b 59
+b 34
+b 1
+b 57
+b 1
+b 562
+b 564
+b 566
+b 568
+b 153
+b 1
+b 63
+b 149
+b 151
+b 153
+b 155
+b 153
+b 1
+b 72
+b 5
+b 567
+b 577
+b 597
+b 576
+b 1
+b 86
+b 3
+b 153
+b 162
+b 30
+b 33
+b 43
+b 157
+b 159
+b 161
+b 163
+b 157
+b 1
+b 79
+b 81
+b 59
+b 58
+b 1
+b 38
+b 37
+b 421
+b 3
+b 5
+b 419
+b 421
+b 583
+b 419
+b 1
+b 2
+b 3
+b 34
+b 3
+b 2
+b 1
+b 100
+b 14
+b 0
+b 2
+b 631
+b 630
+b 1
+b 65
+b 64
+b 1
+b 148
+b 461
+b 475
+b 460
+b 1
+b 471
+b 1
+b 1
+b 3
+b 5
+b 7
+b 5
+b 1
+b 130
+b 257
+b 129
+b 1
+b 252
+b 1
+b 473
+b 472
+b 1
+b 109
+b 3
+b 161
+b 69
+b 84
+b 83
+b 1
+b 82
+b 90
+b 244
+b 138
+b 31
+b 33
+b 31
+b 1
+b 21
+b 527
+b 529
+b 536
+b 524
+b 1
+b 533
+b 1
+b 555
+b 588
+b 11
+b 10
+b 1
+b 119
+b 144
+b 146
+b 118
+b 1
+b 139
+b 1
+b 285
+b 146
+b 148
+b 63
+b 144
+b 184
+b 186
+b 188
+b 186
+b 1
+b 70
+b 72
+b 74
+b 116
+b 52
+b 10
+b 0
+b 2
+b 26
+b 25
+b 1
+b 10
+b 22
+b 32
+b 134
+b 31
+b 1
+b 0
+b 2
+b 39
+b 15
+b 172
+b 174
+b 176
+b 178
+b 180
+b 172
+b 1
+b 283
+b 325
+b 282
+b 1
+b 463
+b 465
+b 467
+b 469
+b 465
+b 1
+b 5
+b 7
+b 17
+b 121
+b 137
+b 120
+b 1
+b 264
+b 266
+b 268
+b 270
+b 264
+b 1
+b 135
+b 137
+b 137
+b 1
+b 153
+b 152
+b 2
+b 359
+b 359
+b 1
+b 75
+b 74
+b 1
+b 127
+b 129
+b 153
+b 621
+b 628
+b 636
+b 635
+b 1
+b 35
+b 50
+b 72
+b 32
+b 1
+b 69
+b 1
+b 37
+b 51
+b 24
+b 40
+b 23
+b 1
+b 36
+b 1
+b 27
+b 486
+b 488
+b 490
+b 488
+b 1
+b 150
+b 158
+b 149
+b 1
+b 154
+b 1
+b 36
+b 93
+b 132
+b 91
+b 1
+b 1
+b 0
+b 1
+b 511
+b 531
+b 262
+b 285
+b 61
+b 69
+b 10
+b 5
+b 189
+b 209
+b 211
+b 53
+b 52
+b 1
+b 13
+b 15
+b 14
+b 13
+b 1
+b 11
+b 13
+b 8
+b 1
+b 165
+b 164
+b 1
+b 52
+b 1
+b 26
+b 25
+b 1
+b 64
+b 68
+b 78
+b 65
+b 1
+b 1
+b 0
+b 2
+b 111
+b 113
+b 111
+b 1
+b 2
+b 74
+b 84
+b 73
+b 1
+b 80
+b 1
+b 7
+b 169
+b 181
+b 180
+b 1
+b 271
+b 270
+b 1
+b 629
+b 5
+b 4
+b 6
+b 8
+b 136
+b 144
+b 23
+b 25
+b 27
+b 61
+b 71
+b 40
+b 42
+b 59
+b 228
+b 42
+b 10
+b 12
+b 14
+b 16
+b 12
+b 1
+b 14
+b 13
+b 1
+b 53
+b 53
+b 1
+b 279
+b 281
+b 279
+b 1
+b 38
+b 51
+b 53
+b 55
+b 53
+b 1
+b 1
+b 196
+b 203
+b 64
+b 108
+b 107
+b 1
+b 1
+b 56
+b 67
+b 69
+b 55
+b 1
+b 324
+b 334
+b 321
+b 1
+b 40
+b 331
+b 331
+b 1
+b 0
+b 2
+b 0
+b 1
+b 293
+b 5
+b 7
+b 70
+b 86
+b 15
+b 14
+b 1
+b 371
+b 368
+b 1
+b 73
+b 282
+b 284
+b 282
+b 1
+b 145
+b 147
+b 145
+b 1
+b 75
+b 19
+b 21
+b 48
+b 47
+b 1
+b 56
+b 17
+b 14
+b 1
+b 0
+b 2
+b 2
+b 1
+b 130
+b 41
+b 5
+b 4
+b 1
+b 89
+b 88
+b 1
+b 6
+b 8
+b 3
+b 1
+b 22
+b 39
+b 85
+b 102
+b 66
+b 3
+b 16
+b 15
+b 1
+b 94
+b 1
+b 8
+b 28
+b 27
+b 1
+b 138
+b 46
+b 192
+b 215
+b 142
+b 150
+b 139
+b 1
+b 148
+b 1
+b 47
+b 293
+b 295
+b 293
+b 1
+b 40
+b 39
+b 1
+b 27
+b 1
+b 102
+b 4
+b 15
+b 3
+b 1
+b 77
+b 93
+b 278
+b 76
+b 1
+b 88
+b 1
+b 110
+b 134
+b 109
+b 1
+b 129
+b 1
+b 5
+b 7
+b 9
+b 9
+b 1
+b 7
+b 6
+b 1
+b 38
+b 122
+b 242
+b 289
+b 158
+b 169
+b 1
+b 10
+b 11
+b 13
+b 15
+b 0
+b 1
+b 8
+b 1
+b 537
+b 539
+b 541
+b 543
+b 537
+b 1
+b 435
+b 449
+b 15
+b 14
+b 1
+b 0
+b 2
+b 23
+b 0
+b 1
+b 156
+b 158
+b 174
+b 206
+b 208
+b 254
+b 68
+b 8
+b 161
+b 163
+b 165
+b 163
+b 1
+b 314
+b 354
+b 38
+b 52
+b 116
+b 130
+b 132
+b 115
+b 1
+b 27
+b 310
+b 70
+b 83
+b 24
+b 21
+b 1
+b 47
+b 13
+b 108
+b 154
+b 168
+b 105
+b 1
+b 149
+b 1
+b 14
+b 58
+b 52
+b 87
+b 81
+b 34
+b 46
+b 33
+b 1
+b 247
+b 309
+b 417
+b 245
+b 1
+b 414
+b 1
+b 140
+b 169
+b 70
+b 90
+b 14
+b 16
+b 18
+b 34
+b 12
+b 1
+b 38
+b 48
+b 50
+b 35
+b 1
+b 267
+b 265
+b 1
+b 29
+b 29
+b 1
+b 286
+b 298
+b 300
+b 284
+b 1
+b 298
+b 1
+b 84
+b 97
+b 99
+b 83
+b 1
+b 7
+b 58
+b 60
+b 58
+b 1
+b 76
+b 75
+b 1
+b 112
+b 5
+b 4
+b 1
+b 210
+b 121
+b 129
+b 153
+b 152
+b 1
+b 41
+b 43
+b 45
+b 54
+b 41
+b 1
+b 15
+b 16
+b 79
+b 15
+b 1
+b 76
+b 1
+b 88
+b 115
+b 11
+b 13
+b 15
+b 17
+b 26
+b 41
+b 26
+b 1
+b 163
+b 165
+b 1
+b 0
+b 1
+b 16
+b 47
+b 173
+b 182
+b 182
+b 1
+b 170
+b 1
+b 134
+b 200
+b 207
+b 209
+b 211
+b 92
+b 161
+b 160
+b 1
+b 3
+b 7
+b 9
+b 7
+b 1
+b 1
+b 134
+b 136
+b 6
+b 50
+b 52
+b 54
+b 47
+b 1
+b 52
+b 1
+b 27
+b 37
+b 178
+b 186
+b 183
+b 209
+b 182
+b 1
+b 205
+b 1
+b 78
+b 193
+b 190
+b 1
+b 2
+b 2
+b 1
+b 12
+b 28
+b 36
+b 35
+b 1
+b 201
+b 13
+b 126
+b 128
+b 130
+b 132
+b 126
+b 1
+b 71
+b 2
+b 4
+b 15
+b 17
+b 19
+b 21
+b 7
+b 9
+b 28
+b 30
+b 37
+b 218
+b 220
+b 254
+b 220
+b 1
+b 250
+b 1
+b 86
+b 93
+b 95
+b 22
+b 24
+b 35
+b 119
+b 121
+b 131
+b 116
+b 1
+b 128
+b 1
+b 92
+b 35
+b 0
+b 2
+b 14
+b 22
+b 13
+b 1
+b 18
+b 1
+b 18
+b 64
+b 63
+b 1
+b 18
+b 25
+b 125
+b 142
+b 1
+b 0
+b 1
+b 53
+b 67
+b 36
+b 89
+b 91
+b 93
+b 89
+b 1
+b 73
+b 63
+b 69
+b 63
+b 1
+b 66
+b 1
+b 141
+b 157
+b 26
+b 8
+b 10
+b 39
+b 8
+b 1
+b 306
+b 308
+b 340
+b 80
+b 82
+b 182
+b 179
+b 1
+b 204
+b 137
+b 134
+b 1
+b 4
+b 33
+b 85
+b 2
+b 1
+b 80
+b 1
+b 98
+b 100
+b 107
+b 98
+b 1
+b 20
+b 22
+b 20
+b 1
+b 51
+b 39
+b 7
+b 6
+b 1
+b 67
+b 107
+b 106
+b 1
+b 9
+b 52
+b 5
+b 4
+b 1
+b 3
+b 10
+b 11
+b 11
+b 1
+b 90
+b 87
+b 1
+b 14
+b 16
+b 14
+b 1
+b 57
+b 77
+b 268
+b 433
+b 442
+b 206
+b 231
+b 19
+b 21
+b 23
+b 25
+b 21
+b 1
+b 30
+b 100
+b 2
+b 4
+b 2
+b 1
+b 117
+b 140
+b 116
+b 1
+b 254
+b 279
+b 224
+b 223
+b 1
+b 6
+b 34
+b 80
+b 82
+b 118
+b 84
+b 76
+b 84
+b 46
+b 88
+b 90
+b 76
+b 75
+b 1
+b 40
+b 42
+b 232
+b 41
+b 29
+b 312
+b 311
+b 1
+b 6
+b 5
+b 1
+b 177
+b 175
+b 1
+b 8
+b 7
+b 1
+b 1
+b 8
+b 28
+b 102
+b 113
+b 52
+b 3
+b 3
+b 1
+b 52
+b 80
+b 34
+b 71
+b 176
+b 190
+b 197
+b 175
+b 1
+b 10
+b 12
+b 14
+b 10
+b 1
+b 20
+b 22
+b 304
+b 178
+b 180
+b 188
+b 176
+b 1
+b 186
+b 1
+b 315
+b 237
+b 273
+b 30
+b 118
+b 134
+b 136
+b 3
+b 12
+b 113
+b 132
+b 113
+b 1
+b 127
+b 1
+b 3
+b 29
+b 55
+b 54
+b 1
+b 49
+b 51
+b 61
+b 60
+b 1
+b 90
+b 16
+b 15
+b 1
+b 60
+b 62
+b 64
+b 66
+b 62
+b 1
+b 66
+b 68
+b 82
+b 66
+b 1
+b 87
+b 86
+b 1
+b 16
+b 172
+b 271
+b 127
+b 129
+b 131
+b 133
+b 20
+b 48
+b 37
+b 70
+b 72
+b 43
+b 128
+b 43
+b 1
+b 126
+b 1
+b 46
+b 48
+b 50
+b 52
+b 195
+b 192
+b 1
+b 2
+b 4
+b 85
+b 131
+b 84
+b 1
+b 127
+b 1
+b 64
+b 18
+b 50
+b 49
+b 1
+b 125
+b 221
+b 32
+b 23
+b 25
+b 42
+b 63
+b 79
+b 81
+b 46
+b 48
+b 56
+b 46
+b 1
+b 50
+b 52
+b 54
+b 56
+b 28
+b 77
+b 27
+b 1
+b 0
+b 2
+b 69
+b 162
+b 66
+b 1
+b 160
+b 1
+b 426
+b 428
+b 430
+b 432
+b 27
+b 44
+b 436
+b 438
+b 433
+b 1
+b 436
+b 1
+b 5
+b 7
+b 9
+b 11
+b 198
+b 208
+b 207
+b 1
+b 75
+b 26
+b 45
+b 43
+b 105
+b 107
+b 105
+b 1
+b 48
+b 50
+b 52
+b 48
+b 1
+b 4
+b 22
+b 47
+b 49
+b 51
+b 53
+b 51
+b 1
+b 181
+b 183
+b 185
+b 218
+b 207
+b 72
+b 74
+b 6
+b 2
+b 15
+b 29
+b 37
+b 10
+b 33
+b 187
+b 186
+b 1
+b 22
+b 180
+b 179
+b 1
+b 54
+b 76
+b 78
+b 76
+b 1
+b 7
+b 9
+b 11
+b 26
+b 24
+b 1
+b 4
+b 1
+b 300
+b 302
+b 326
+b 325
+b 1
+b 266
+b 301
+b 22
+b 36
+b 38
+b 133
+b 141
+b 139
+b 1
+b 25
+b 33
+b 24
+b 2
+b 29
+b 1
+b 15
+b 73
+b 93
+b 95
+b 72
+b 1
+b 8
+b 18
+b 7
+b 1
+b 39
+b 45
+b 39
+b 1
+b 42
+b 1
+b 182
+b 81
+b 122
+b 323
+b 79
+b 1
+b 319
+b 1
+b 75
+b 78
+b 105
+b 185
+b 187
+b 104
+b 1
+b 3
+b 5
+b 7
+b 5
+b 1
+b 4
+b 6
+b 8
+b 173
+b 44
+b 3
+b 3
+b 29
+b 52
+b 60
+b 95
+b 51
+b 2
+b 56
+b 1
+b 125
+b 97
+b 146
+b 155
+b 154
+b 2
+b 29
+b 26
+b 1
+b 49
+b 67
+b 368
+b 66
+b 1
+b 32
+b 2
+b 4
+b 2
+b 1
+b 37
+b 39
+b 41
+b 43
+b 39
+b 41
+b 7
+b 102
+b 201
+b 96
+b 98
+b 126
+b 125
+b 1
+b 22
+b 24
+b 26
+b 28
+b 88
+b 87
+b 1
+b 71
+b 1
+b 39
+b 41
+b 37
+b 1
+b 0
+b 2
+b 0
+b 1
+b 87
+b 89
+b 91
+b 93
+b 63
+b 72
+b 60
+b 1
+b 1
+b 0
+b 1
+b 20
+b 28
+b 30
+b 28
+b 1
+b 32
+b 31
+b 1
+b 25
+b 8
+b 18
+b 20
+b 6
+b 1
+b 123
+b 134
+b 122
+b 1
+b 1
+b 122
+b 124
+b 126
+b 128
+b 122
+b 1
+b 80
+b 79
+b 1
+b 148
+b 150
+b 150
+b 1
+b 223
+b 243
+b 245
+b 243
+b 1
+b 57
+b 14
+b 356
+b 361
+b 353
+b 1
+b 359
+b 1
+b 80
+b 82
+b 80
+b 1
+b 193
+b 692
+b 707
+b 709
+b 689
+b 1
+b 9
+b 11
+b 13
+b 286
+b 52
+b 150
+b 150
+b 1
+b 59
+b 61
+b 478
+b 503
+b 540
+b 475
+b 1
+b 537
+b 1
+b 153
+b 168
+b 505
+b 532
+b 502
+b 1
+b 529
+b 1
+b 346
+b 344
+b 62
+b 70
+b 82
+b 60
+b 1
+b 79
+b 1
+b 184
+b 5
+b 4
+b 1
+b 189
+b 189
+b 1
+b 57
+b 55
+b 2
+b 1
+b 133
+b 145
+b 143
+b 2
+b 132
+b 1
+b 30
+b 10
+b 9
+b 1
+b 11
+b 11
+b 1
+b 141
+b 164
+b 166
+b 138
+b 1
+b 107
+b 120
+b 318
+b 332
+b 331
+b 1
+b 36
+b 38
+b 40
+b 38
+b 26
+b 23
+b 1
+b 115
+b 144
+b 115
+b 1
+b 48
+b 32
+b 1
+b 14
+b 48
+b 62
+b 76
+b 60
+b 1
+b 74
+b 1
+b 60
+b 76
+b 59
+b 2
+b 0
+b 0
+b 136
+b 49
+b 51
+b 69
+b 50
+b 13
+b 12
+b 1
+b 73
+b 75
+b 9
+b 8
+b 1
+b 6
+b 56
+b 384
+b 397
+b 399
+b 401
+b 401
+b 1
+b 381
+b 1
+b 5
+b 15
+b 4
+b 1
+b 104
+b 111
+b 110
+b 1
+b 480
+b 487
+b 57
+b 71
+b 30
+b 16
+b 15
+b 2
+b 17
+b 16
+b 1
+b 91
+b 117
+b 88
+b 1
+b 115
+b 1
+b 1042
+b 1044
+b 5
+b 496
+b 498
+b 500
+b 230
+b 232
+b 234
+b 23
+b 105
+b 22
+b 1
+b 101
+b 1
+b 14
+b 15
+b 7
+b 9
+b 7
+b 1
+b 187
+b 0
+b 2
+b 196
+b 198
+b 198
+b 1
+b 9
+b 8
+b 1
+b 66
+b 124
+b 6
+b 116
+b 140
+b 139
+b 1
+b 55
+b 54
+b 1
+b 47
+b 46
+b 1
+b 4
+b 180
+b 188
+b 551
+b 553
+b 555
+b 553
+b 1
+b 33
+b 31
+b 33
+b 21
+b 12
+b 3
+b 5
+b 7
+b 9
+b 7
+b 1
+b 182
+b 184
+b 184
+b 1
+b 50
+b 47
+b 1
+b 457
+b 152
+b 14
+b 21
+b 23
+b 21
+b 1
+b 98
+b 100
+b 98
+b 1
+b 158
+b 76
+b 73
+b 1
+b 22
+b 75
+b 115
+b 0
+b 8
+b 7
+b 9
+b 11
+b 61
+b 75
+b 77
+b 75
+b 1
+b 89
+b 87
+b 2
+b 42
+b 1
+b 7
+b 6
+b 1
+b 61
+b 63
+b 65
+b 67
+b 65
+b 1
+b 20
+b 10
+b 50
+b 49
+b 1
+b 172
+b 174
+b 176
+b 174
+b 1
+b 44
+b 43
+b 1
+b 167
+b 20
+b 19
+b 1
+b 46
+b 48
+b 25
+b 24
+b 1
+b 10
+b 2
+b 71
+b 73
+b 75
+b 87
+b 4
+b 494
+b 510
+b 100
+b 9
+b 6
+b 1
+b 49
+b 1
+b 26
+b 36
+b 35
+b 1
+b 30
+b 95
+b 56
+b 31
+b 29
+b 1
+b 232
+b 306
+b 230
+b 1
+b 1
+b 0
+b 1
+b 56
+b 54
+b 1
+b 47
+b 88
+b 90
+b 92
+b 94
+b 70
+b 77
+b 68
+b 1
+b 76
+b 1
+b 39
+b 49
+b 221
+b 246
+b 57
+b 25
+b 27
+b 27
+b 26
+b 1
+b 3
+b 2
+b 1
+b 92
+b 109
+b 135
+b 137
+b 139
+b 141
+b 143
+b 135
+b 1
+b 273
+b 272
+b 1
+b 71
+b 518
+b 596
+b 247
+b 3
+b 0
+b 1
+b 160
+b 170
+b 64
+b 63
+b 1
+b 3
+b 3
+b 1
+b 74
+b 11
+b 51
+b 63
+b 65
+b 79
+b 50
+b 2
+b 62
+b 61
+b 1
+b 11
+b 18
+b 25
+b 46
+b 23
+b 1
+b 42
+b 1
+b 4
+b 8
+b 33
+b 35
+b 7
+b 1
+b 163
+b 133
+b 155
+b 132
+b 1
+b 124
+b 152
+b 100
+b 112
+b 138
+b 111
+b 1
+b 134
+b 1
+b 95
+b 97
+b 92
+b 1
+b 113
+b 173
+b 175
+b 112
+b 1
+b 10
+b 12
+b 14
+b 16
+b 360
+b 369
+b 371
+b 371
+b 1
+b 358
+b 1
+b 89
+b 86
+b 1
+b 58
+b 57
+b 1
+b 5
+b 17
+b 19
+b 10
+b 136
+b 136
+b 1
+b 13
+b 12
+b 1
+b 103
+b 120
+b 102
+b 1
+b 9
+b 109
+b 29
+b 28
+b 1
+b 289
+b 319
+b 78
+b 80
+b 18
+b 35
+b 36
+b 35
+b 1
+b 8
+b 5
+b 1
+b 353
+b 259
+b 67
+b 268
+b 270
+b 272
+b 299
+b 268
+b 1
+b 60
+b 62
+b 64
+b 3
+b 6
+b 8
+b 10
+b 6
+b 1
+b 18
+b 26
+b 17
+b 1
+b 22
+b 1
+b 4
+b 3
+b 5
+b 7
+b 5
+b 1
+b 424
+b 426
+b 428
+b 430
+b 54
+b 56
+b 8
+b 10
+b 12
+b 14
+b 8
+b 1
+b 520
+b 644
+b 646
+b 519
+b 1
+b 119
+b 118
+b 1
+b 98
+b 148
+b 542
+b 614
+b 102
+b 101
+b 1
+b 3
+b 1
+b 1
+b 34
+b 4
+b 31
+b 44
+b 3
+b 1
+b 26
+b 1
+b 69
+b 132
+b 69
+b 1
+b 128
+b 1
+b 171
+b 181
+b 11
+b 13
+b 11
+b 1
+b 54
+b 29
+b 69
+b 0
+b 18
+b 20
+b 22
+b 20
+b 1
+b 9
+b 7
+b 1
+b 4
+b 27
+b 4
+b 521
+b 641
+b 520
+b 1
+b 636
+b 1
+b 375
+b 389
+b 391
+b 372
+b 1
+b 389
+b 1
+b 35
+b 32
+b 1
+b 1
+b 14
+b 19
+b 21
+b 23
+b 21
+b 1
+b 95
+b 111
+b 74
+b 76
+b 95
+b 71
+b 1
+b 92
+b 1
+b 258
+b 260
+b 269
+b 268
+b 1
+b 129
+b 157
+b 48
+b 46
+b 1
+b 361
+b 32
+b 13
+b 69
+b 81
+b 66
+b 8
+b 7
+b 1
+b 21
+b 20
+b 1
+b 57
+b 58
+b 236
+b 45
+b 1
+b 0
+b 1
+b 342
+b 362
+b 4
+b 6
+b 19
+b 13
+b 657
+b 345
+b 347
+b 345
+b 1
+b 25
+b 48
+b 22
+b 1
+b 45
+b 1
+b 529
+b 1
+b 37
+b 47
+b 36
+b 1
+b 36
+b 50
+b 52
+b 50
+b 1
+b 25
+b 46
+b 137
+b 156
+b 137
+b 1
+b 152
+b 1
+b 7
+b 9
+b 11
+b 7
+b 1
+b 642
+b 654
+b 347
+b 353
+b 12
+b 14
+b 21
+b 518
+b 643
+b 515
+b 1
+b 641
+b 1
+b 410
+b 0
+b 2
+b 18
+b 3
+b 20
+b 92
+b 36
+b 38
+b 36
+b 1
+b 39
+b 41
+b 69
+b 30
+b 60
+b 166
+b 20
+b 262
+b 264
+b 262
+b 1
+b 9
+b 40
+b 42
+b 44
+b 46
+b 44
+b 1
+b 84
+b 86
+b 19
+b 82
+b 84
+b 86
+b 82
+b 1
+b 25
+b 21
+b 18
+b 1
+b 338
+b 340
+b 363
+b 362
+b 1
+b 4
+b 14
+b 64
+b 91
+b 99
+b 3
+b 204
+b 201
+b 1
+b 7
+b 74
+b 84
+b 412
+b 46
+b 1
+b 7
+b 14
+b 514
+b 90
+b 85
+b 87
+b 1
+b 321
+b 323
+b 325
+b 327
+b 321
+b 1
+b 201
+b 207
+b 112
+b 47
+b 49
+b 57
+b 56
+b 1
+b 190
+b 5
+b 14
+b 23
+b 25
+b 23
+b 1
+b 52
+b 52
+b 1
+b 45
+b 42
+b 1
+b 246
+b 0
+b 2
+b 15
+b 12
+b 1
+b 98
+b 100
+b 102
+b 104
+b 598
+b 614
+b 616
+b 597
+b 1
+b 273
+b 303
+b 272
+b 1
+b 426
+b 429
+b 20
+b 41
+b 19
+b 1
+b 288
+b 7
+b 406
+b 408
+b 406
+b 1
+b 17
+b 564
+b 583
+b 585
+b 561
+b 1
+b 583
+b 1
+b 176
+b 178
+b 173
+b 1
+b 204
+b 202
+b 1
+b 40
+b 42
+b 44
+b 46
+b 44
+b 1
+b 488
+b 68
+b 70
+b 68
+b 1
+b 156
+b 158
+b 174
+b 20
+b 95
+b 17
+b 1
+b 92
+b 1
+b 32
+b 47
+b 30
+b 1
+b 45
+b 1
+b 31
+b 33
+b 35
+b 27
+b 33
+b 35
+b 83
+b 85
+b 83
+b 1
+b 44
+b 53
+b 74
+b 271
+b 428
+b 4
+b 12
+b 10
+b 1
+b 40
+b 18
+b 36
+b 59
+b 68
+b 67
+b 1
+b 167
+b 164
+b 1
+b 235
+b 234
+b 1
+b 244
+b 281
+b 49
+b 61
+b 310
+b 44
+b 43
+b 1
+b 1
+b 24
+b 26
+b 28
+b 30
+b 30
+b 1
+b 21
+b 1
+b 104
+b 114
+b 113
+b 1
+b 41
+b 38
+b 1
+b 320
+b 367
+b 319
+b 1
+b 5
+b 100
+b 102
+b 104
+b 106
+b 102
+b 1
+b 72
+b 72
+b 1
+b 192
+b 13
+b 17
+b 11
+b 31
+b 0
+b 26
+b 28
+b 30
+b 32
+b 28
+b 1
+b 20
+b 15
+b 275
+b 274
+b 1
+b 29
+b 29
+b 1
+b 124
+b 134
+b 124
+b 1
+b 131
+b 1
+b 102
+b 104
+b 114
+b 112
+b 1
+b 107
+b 125
+b 142
+b 50
+b 25
+b 34
+b 187
+b 198
+b 186
+b 1
+b 22
+b 87
+b 25
+b 42
+b 44
+b 42
+b 1
+b 425
+b 443
+b 424
+b 1
+b 6
+b 102
+b 100
+b 1
+b 1
+b 18
+b 15
+b 1
+b 116
+b 5
+b 54
+b 73
+b 125
+b 133
+b 135
+b 9
+b 8
+b 1
+b 1
+b 1
+b 28
+b 27
+b 1
+b 6
+b 6
+b 1
+b 19
+b 40
+b 70
+b 70
+b 1
+b 2
+b 2
+b 1
+b 96
+b 107
+b 95
+b 1
+b 102
+b 65
+b 45
+b 49
+b 129
+b 131
+b 126
+b 1
+b 18
+b 29
+b 28
+b 1
+b 183
+b 185
+b 187
+b 250
+b 277
+b 134
+b 136
+b 138
+b 140
+b 404
+b 403
+b 1
+b 13
+b 15
+b 87
+b 86
+b 1
+b 8
+b 31
+b 95
+b 105
+b 107
+b 105
+b 1
+b 94
+b 100
+b 214
+b 216
+b 216
+b 1
+b 6
+b 8
+b 50
+b 52
+b 54
+b 50
+b 1
+b 262
+b 70
+b 83
+b 69
+b 1
+b 135
+b 132
+b 1
+b 15
+b 43
+b 189
+b 191
+b 240
+b 63
+b 69
+b 23
+b 23
+b 1
+b 17
+b 14
+b 1
+b 196
+b 73
+b 72
+b 1
+b 74
+b 199
+b 284
+b 29
+b 31
+b 7
+b 440
+b 460
+b 550
+b 439
+b 1
+b 106
+b 104
+b 1
+b 3
+b 3
+b 1
+b 360
+b 358
+b 1
+b 128
+b 130
+b 125
+b 1
+b 238
+b 236
+b 1
+b 191
+b 1
+b 0
+b 1
+b 91
+b 101
+b 103
+b 90
+b 1
+b 86
+b 88
+b 12
+b 46
+b 4
+b 6
+b 28
+b 35
+b 24
+b 23
+b 1
+b 13
+b 29
+b 30
+b 53
+b 51
+b 50
+b 1
+b 3
+b 5
+b 169
+b 181
+b 189
+b 23
+b 25
+b 27
+b 23
+b 1
+b 128
+b 12
+b 11
+b 1
+b 0
+b 1054
+b 1080
+b 19
+b 32
+b 29
+b 1
+b 12
+b 181
+b 183
+b 181
+b 1
+b 166
+b 175
+b 177
+b 179
+b 181
+b 47
+b 59
+b 57
+b 1
+b 30
+b 2
+b 63
+b 1
+b 1
+b 140
+b 142
+b 60
+b 70
+b 72
+b 59
+b 1
+b 45
+b 5
+b 32
+b 46
+b 32
+b 1
+b 42
+b 1
+b 67
+b 69
+b 83
+b 69
+b 1
+b 79
+b 1
+b 20
+b 19
+b 1
+b 10
+b 9
+b 17
+b 97
+b 95
+b 1
+b 121
+b 317
+b 316
+b 1
+b 24
+b 94
+b 180
+b 16
+b 100
+b 102
+b 112
+b 114
+b 64
+b 71
+b 63
+b 1
+b 107
+b 109
+b 111
+b 113
+b 107
+b 1
+b 174
+b 52
+b 51
+b 1
+b 29
+b 171
+b 27
+b 24
+b 1
+b 106
+b 141
+b 143
+b 104
+b 1
+b 39
+b 3
+b 14
+b 45
+b 44
+b 1
+b 238
+b 235
+b 1
+b 159
+b 3
+b 2
+b 1
+b 41
+b 66
+b 41
+b 1
+b 405
+b 404
+b 1
+b 1
+b 311
+b 310
+b 1
+b 6
+b 5
+b 1
+b 49
+b 26
+b 29
+b 43
+b 130
+b 27
+b 146
+b 145
+b 1
+b 15
+b 21
+b 23
+b 32
+b 37
+b 84
+b 86
+b 36
+b 1
+b 79
+b 1
+b 24
+b 0
+b 2
+b 9
+b 38
+b 40
+b 42
+b 38
+b 1
+b 42
+b 52
+b 261
+b 270
+b 269
+b 2
+b 17
+b 16
+b 1
+b 32
+b 34
+b 36
+b 0
+b 49
+b 51
+b 53
+b 4
+b 6
+b 8
+b 10
+b 4
+b 1
+b 323
+b 39
+b 7
+b 40
+b 46
+b 39
+b 1
+b 42
+b 1
+b 67
+b 74
+b 139
+b 164
+b 186
+b 163
+b 1
+b 181
+b 1
+b 49
+b 8
+b 10
+b 8
+b 1
+b 66
+b 2
+b 18
+b 64
+b 97
+b 11
+b 22
+b 24
+b 10
+b 1
+b 8
+b 19
+b 5
+b 1
+b 39
+b 36
+b 1
+b 12
+b 14
+b 24
+b 45
+b 52
+b 23
+b 1
+b 92
+b 94
+b 522
+b 533
+b 590
+b 589
+b 2
+b 519
+b 1
+b 162
+b 187
+b 159
+b 1
+b 185
+b 1
+b 608
+b 607
+b 1
+b 6
+b 8
+b 84
+b 86
+b 16
+b 208
+b 216
+b 214
+b 2
+b 207
+b 1
+b 10
+b 70
+b 68
+b 1
+b 2
+b 4
+b 4
+b 1
+b 36
+b 9
+b 8
+b 1
+b 511
+b 612
+b 510
+b 1
+b 307
+b 309
+b 311
+b 44
+b 58
+b 42
+b 1
+b 56
+b 1
+b 21
+b 18
+b 1
+b 120
+b 117
+b 1
+b 151
+b 161
+b 46
+b 48
+b 19
+b 18
+b 1
+b 385
+b 390
+b 392
+b 394
+b 383
+b 1
+b 392
+b 1
+b 24
+b 37
+b 34
+b 1
+b 8
+b 138
+b 151
+b 3
+b 5
+b 7
+b 9
+b 7
+b 1
+b 96
+b 107
+b 109
+b 93
+b 1
+b 107
+b 1
+b 65
+b 63
+b 1
+b 46
+b 45
+b 1
+b 252
+b 58
+b 92
+b 91
+b 1
+b 67
+b 66
+b 1
+b 58
+b 66
+b 74
+b 64
+b 1
+b 28
+b 38
+b 152
+b 30
+b 32
+b 30
+b 1
+b 22
+b 34
+b 34
+b 1
+b 49
+b 94
+b 151
+b 93
+b 2
+b 146
+b 1
+b 179
+b 181
+b 261
+b 260
+b 1
+b 79
+b 87
+b 13
+b 20
+b 19
+b 1
+b 58
+b 98
+b 57
+b 1
+b 53
+b 278
+b 141
+b 118
+b 137
+b 74
+b 2
+b 10
+b 12
+b 14
+b 16
+b 10
+b 1
+b 31
+b 2
+b 176
+b 49
+b 102
+b 113
+b 132
+b 101
+b 1
+b 108
+b 1
+b 5
+b 7
+b 9
+b 65
+b 64
+b 1
+b 0
+b 2
+b 17
+b 0
+b 1
+b 276
+b 278
+b 273
+b 1
+b 276
+b 1
+b 41
+b 53
+b 53
+b 1
+b 38
+b 1
+b 66
+b 76
+b 113
+b 112
+b 1
+b 28
+b 13
+b 15
+b 27
+b 13
+b 1
+b 205
+b 264
+b 2
+b 4
+b 6
+b 8
+b 6
+b 8
+b 6
+b 1
+b 16
+b 113
+b 2
+b 246
+b 252
+b 245
+b 1
+b 181
+b 175
+b 67
+b 1
+b 131
+b 133
+b 135
+b 133
+b 1
+b 51
+b 68
+b 67
+b 1
+b 42
+b 44
+b 3
+b 23
+b 238
+b 250
+b 64
+b 66
+b 66
+b 1
+b 1
+b 0
+b 1
+b 11
+b 13
+b 15
+b 11
+b 1
+b 45
+b 43
+b 1
+b 14
+b 55
+b 11
+b 1
+b 26
+b 40
+b 23
+b 1
+b 81
+b 83
+b 1
+b 230
+b 227
+b 1
+b 209
+b 203
+b 271
+b 3
+b 8
+b 10
+b 12
+b 14
+b 9
+b 48
+b 50
+b 6
+b 1
+b 48
+b 1
+b 5
+b 17
+b 17
+b 1
+b 2
+b 1
+b 224
+b 226
+b 228
+b 230
+b 123
+b 125
+b 127
+b 129
+b 64
+b 66
+b 301
+b 334
+b 358
+b 333
+b 1
+b 21
+b 23
+b 25
+b 23
+b 1
+b 57
+b 59
+b 57
+b 1
+b 165
+b 3
+b 5
+b 3
+b 1
+b 112
+b 16
+b 138
+b 34
+b 156
+b 172
+b 179
+b 154
+b 1
+b 176
+b 1
+b 149
+b 92
+b 28
+b 38
+b 66
+b 68
+b 70
+b 68
+b 1
+b 28
+b 36
+b 294
+b 21
+b 23
+b 25
+b 21
+b 1
+b 54
+b 4
+b 3
+b 1
+b 7
+b 5
+b 1
+b 194
+b 315
+b 29
+b 5
+b 282
+b 4
+b 3
+b 1
+b 57
+b 44
+b 44
+b 1
+b 6
+b 5
+b 1
+b 87
+b 92
+b 91
+b 2
+b 42
+b 64
+b 66
+b 68
+b 70
+b 177
+b 175
+b 1
+b 207
+b 209
+b 204
+b 1
+b 132
+b 35
+b 37
+b 126
+b 128
+b 130
+b 126
+b 1
+b 143
+b 30
+b 29
+b 1
+b 21
+b 19
+b 1
+b 99
+b 66
+b 63
+b 1
+b 13
+b 11
+b 1
+b 3
+b 5
+b 7
+b 3
+b 1
+b 26
+b 36
+b 145
+b 155
+b 85
+b 101
+b 116
+b 84
+b 1
+b 167
+b 82
+b 46
+b 64
+b 182
+b 193
+b 4
+b 3
+b 1
+b 44
+b 15
+b 93
+b 81
+b 43
+b 37
+b 1
+b 139
+b 158
+b 155
+b 1
+b 129
+b 131
+b 133
+b 135
+b 137
+b 131
+b 1
+b 46
+b 113
+b 110
+b 1
+b 11
+b 99
+b 106
+b 96
+b 1
+b 9
+b 131
+b 133
+b 135
+b 131
+b 1
+b 87
+b 102
+b 101
+b 1
+b 57
+b 59
+b 57
+b 1
+b 30
+b 3
+b 48
+b 56
+b 58
+b 60
+b 56
+b 1
+b 91
+b 93
+b 95
+b 19
+b 72
+b 3
+b 5
+b 7
+b 9
+b 7
+b 1
+b 0
+b 2
+b 4
+b 175
+b 182
+b 31
+b 33
+b 35
+b 31
+b 1
+b 75
+b 75
+b 1
+b 37
+b 34
+b 1
+b 62
+b 61
+b 1
+b 7
+b 9
+b 40
+b 37
+b 1
+b 3
+b 11
+b 1
+b 1
+b 128
+b 25
+b 141
+b 138
+b 1
+b 21
+b 21
+b 1
+b 50
+b 48
+b 1
+b 79
+b 161
+b 177
+b 207
+b 176
+b 2
+b 203
+b 1
+b 21
+b 23
+b 40
+b 61
+b 3
+b 89
+b 112
+b 38
+b 50
+b 35
+b 1
+b 11
+b 10
+b 1
+b 29
+b 31
+b 33
+b 29
+b 1
+b 26
+b 28
+b 30
+b 26
+b 1
+b 66
+b 78
+b 80
+b 82
+b 78
+b 1
+b 48
+b 66
+b 65
+b 1
+b 9
+b 7
+b 1
+b 185
+b 19
+b 21
+b 19
+b 1
+b 179
+b 52
+b 13
+b 23
+b 47
+b 83
+b 142
+b 144
+b 146
+b 148
+b 146
+b 1
+b 73
+b 93
+b 73
+b 1
+b 173
+b 3
+b 110
+b 117
+b 33
+b 32
+b 1
+b 42
+b 44
+b 42
+b 1
+b 1
+b 54
+b 344
+b 355
+b 379
+b 425
+b 424
+b 1
+b 169
+b 168
+b 1
+b 161
+b 173
+b 134
+b 148
+b 150
+b 133
+b 1
+b 286
+b 319
+b 97
+b 99
+b 109
+b 97
+b 1
+b 42
+b 5
+b 7
+b 58
+b 6
+b 22
+b 24
+b 26
+b 218
+b 11
+b 20
+b 19
+b 1
+b 386
+b 388
+b 395
+b 56
+b 64
+b 66
+b 54
+b 2
+b 111
+b 113
+b 111
+b 1
+b 93
+b 119
+b 65
+b 64
+b 1
+b 26
+b 28
+b 295
+b 325
+b 326
+b 325
+b 1
+b 5
+b 3
+b 2
+b 116
+b 141
+b 162
+b 164
+b 166
+b 168
+b 534
+b 561
+b 531
+b 1
+b 558
+b 1
+b 74
+b 73
+b 1
+b 16
+b 9
+b 162
+b 172
+b 42
+b 41
+b 1
+b 324
+b 332
+b 334
+b 323
+b 1
+b 33
+b 53
+b 30
+b 1
+b 30
+b 27
+b 1
+b 11
+b 13
+b 27
+b 24
+b 1
+b 9
+b 23
+b 25
+b 44
+b 46
+b 44
+b 1
+b 188
+b 29
+b 7
+b 112
+b 5
+b 4
+b 1
+b 18
+b 363
+b 365
+b 367
+b 363
+b 1
+b 172
+b 187
+b 267
+b 171
+b 1
+b 157
+b 11
+b 21
+b 0
+b 11
+b 297
+b 346
+b 89
+b 88
+b 1
+b 10
+b 10
+b 1
+b 49
+b 51
+b 53
+b 8
+b 7
+b 1
+b 16
+b 35
+b 153
+b 161
+b 284
+b 292
+b 24
+b 26
+b 34
+b 24
+b 1
+b 174
+b 13
+b 37
+b 44
+b 36
+b 1
+b 40
+b 1
+b 40
+b 39
+b 1
+b 0
+b 2
+b 10
+b 188
+b 190
+b 200
+b 185
+b 1
+b 219
+b 221
+b 223
+b 225
+b 12
+b 14
+b 16
+b 12
+b 1
+b 17
+b 21
+b 19
+b 1
+b 97
+b 97
+b 1
+b 84
+b 84
+b 1
+b 5
+b 15
+b 14
+b 1
+b 29
+b 31
+b 33
+b 110
+b 43
+b 15
+b 39
+b 5
+b 4
+b 7
+b 16
+b 15
+b 28
+b 12
+b 1
+b 26
+b 1
+b 108
+b 107
+b 1
+b 109
+b 111
+b 136
+b 168
+b 48
+b 47
+b 1
+b 306
+b 1
+b 18
+b 58
+b 122
+b 8
+b 14
+b 16
+b 14
+b 1
+b 29
+b 35
+b 29
+b 1
+b 18
+b 86
+b 88
+b 17
+b 1
+b 123
+b 145
+b 147
+b 121
+b 2
+b 145
+b 1
+b 20
+b 18
+b 1
+b 27
+b 29
+b 24
+b 1
+b 52
+b 52
+b 1
+b 5
+b 4
+b 1
+b 624
+b 7
+b 61
+b 4
+b 4
+b 1
+b 12
+b 10
+b 1
+b 83
+b 45
+b 44
+b 1
+b 162
+b 164
+b 166
+b 168
+b 170
+b 168
+b 1
+b 53
+b 55
+b 64
+b 53
+b 1
+b 20
+b 27
+b 536
+b 553
+b 10
+b 12
+b 14
+b 8
+b 1
+b 11
+b 20
+b 32
+b 19
+b 1
+b 91
+b 13
+b 41
+b 12
+b 1
+b 8
+b 22
+b 24
+b 22
+b 1
+b 63
+b 70
+b 62
+b 1
+b 7
+b 14
+b 2
+b 4
+b 6
+b 6
+b 1
+b 57
+b 10
+b 57
+b 56
+b 1
+b 280
+b 0
+b 14
+b 23
+b 25
+b 27
+b 64
+b 820
+b 4
+b 6
+b 135
+b 15
+b 164
+b 166
+b 168
+b 170
+b 164
+b 1
+b 34
+b 33
+b 1
+b 34
+b 31
+b 1
+b 20
+b 151
+b 175
+b 177
+b 148
+b 1
+b 175
+b 1
+b 6
+b 33
+b 30
+b 1
+b 70
+b 69
+b 1
+b 20
+b 28
+b 89
+b 91
+b 227
+b 232
+b 267
+b 266
+b 1
+b 422
+b 431
+b 449
+b 430
+b 1
+b 21
+b 32
+b 21
+b 23
+b 42
+b 21
+b 1
+b 59
+b 61
+b 299
+b 297
+b 1
+b 51
+b 53
+b 2
+b 4
+b 6
+b 15
+b 4
+b 1
+b 88
+b 90
+b 1
+b 36
+b 38
+b 40
+b 40
+b 1
+b 0
+b 73
+b 85
+b 87
+b 86
+b 1
+b 12
+b 46
+b 149
+b 159
+b 95
+b 101
+b 28
+b 82
+b 26
+b 1
+b 53
+b 52
+b 1
+b 39
+b 39
+b 1
+b 2
+b 8
+b 13
+b 7
+b 1
+b 49
+b 48
+b 1
+b 0
+b 2
+b 26
+b 0
+b 1
+b 213
+b 221
+b 260
+b 212
+b 1
+b 107
+b 109
+b 119
+b 118
+b 1
+b 15
+b 27
+b 0
+b 2
+b 46
+b 53
+b 171
+b 42
+b 106
+b 108
+b 110
+b 112
+b 13
+b 91
+b 13
+b 1
+b 89
+b 1
+b 4
+b 51
+b 36
+b 44
+b 35
+b 1
+b 40
+b 1
+b 13
+b 13
+b 15
+b 27
+b 10
+b 12
+b 14
+b 16
+b 10
+b 1
+b 65
+b 70
+b 70
+b 1
+b 649
+b 651
+b 649
+b 1
+b 12
+b 182
+b 195
+b 150
+b 14
+b 45
+b 118
+b 118
+b 1
+b 181
+b 202
+b 52
+b 58
+b 60
+b 58
+b 1
+b 15
+b 17
+b 19
+b 21
+b 19
+b 1
+b 50
+b 100
+b 112
+b 49
+b 1
+b 95
+b 1
+b 38
+b 66
+b 87
+b 65
+b 1
+b 85
+b 8
+b 36
+b 35
+b 1
+b 5
+b 75
+b 7
+b 4
+b 1
+b 16
+b 1
+b 289
+b 314
+b 80
+b 87
+b 48
+b 47
+b 1
+b 32
+b 40
+b 252
+b 169
+b 171
+b 169
+b 1
+b 106
+b 134
+b 105
+b 1
+b 129
+b 1
+b 0
+b 2
+b 49
+b 30
+b 29
+b 1
+b 27
+b 60
+b 78
+b 90
+b 59
+b 1
+b 73
+b 1
+b 17
+b 19
+b 21
+b 23
+b 17
+b 1
+b 11
+b 10
+b 1
+b 2
+b 2
+b 1
+b 233
+b 18
+b 8
+b 7
+b 1
+b 64
+b 99
+b 115
+b 117
+b 119
+b 121
+b 119
+b 1
+b 292
+b 5
+b 4
+b 1
+b 61
+b 15
+b 2
+b 600
+b 627
+b 92
+b 90
+b 1
+b 6
+b 33
+b 32
+b 1
+b 119
+b 116
+b 1
+b 24
+b 157
+b 159
+b 161
+b 163
+b 159
+b 1
+b 43
+b 45
+b 0
+b 2
+b 331
+b 333
+b 0
+b 2
+b 95
+b 97
+b 99
+b 101
+b 95
+b 1
+b 12
+b 14
+b 12
+b 1
+b 26
+b 45
+b 47
+b 25
+b 1
+b 40
+b 1
+b 668
+b 675
+b 667
+b 1
+b 167
+b 165
+b 1
+b 3
+b 0
+b 1
+b 498
+b 60
+b 67
+b 80
+b 79
+b 1
+b 177
+b 189
+b 308
+b 307
+b 1
+b 208
+b 210
+b 46
+b 45
+b 1
+b 8
+b 516
+b 518
+b 516
+b 1
+b 100
+b 102
+b 133
+b 146
+b 132
+b 1
+b 59
+b 74
+b 3
+b 99
+b 173
+b 56
+b 153
+b 161
+b 143
+b 155
+b 162
+b 161
+b 1
+b 126
+b 125
+b 1
+b 24
+b 22
+b 1
+b 51
+b 53
+b 1
+b 383
+b 382
+b 1
+b 52
+b 73
+b 55
+b 62
+b 54
+b 1
+b 58
+b 1
+b 66
+b 43
+b 4
+b 66
+b 73
+b 90
+b 72
+b 1
+b 282
+b 282
+b 1
+b 184
+b 183
+b 1
+b 51
+b 50
+b 1
+b 36
+b 8
+b 55
+b 71
+b 276
+b 275
+b 1
+b 22
+b 45
+b 47
+b 45
+b 1
+b 166
+b 189
+b 221
+b 165
+b 1
+b 250
+b 280
+b 278
+b 1
+b 249
+b 1
+b 13
+b 86
+b 93
+b 222
+b 230
+b 13
+b 12
+b 1
+b 89
+b 116
+b 191
+b 4
+b 6
+b 1
+b 8
+b 10
+b 12
+b 151
+b 153
+b 155
+b 184
+b 153
+b 1
+b 294
+b 316
+b 293
+b 1
+b 79
+b 343
+b 359
+b 29
+b 28
+b 1
+b 71
+b 73
+b 87
+b 51
+b 81
+b 83
+b 24
+b 5
+b 11
+b 47
+b 113
+b 122
+b 121
+b 1
+b 314
+b 4
+b 1
+b 0
+b 1
+b 105
+b 120
+b 122
+b 104
+b 1
+b 189
+b 191
+b 189
+b 1
+b 20
+b 248
+b 5
+b 211
+b 213
+b 215
+b 228
+b 22
+b 84
+b 20
+b 1
+b 38
+b 36
+b 1
+b 44
+b 46
+b 8
+b 7
+b 1
+b 622
+b 636
+b 46
+b 60
+b 148
+b 157
+b 43
+b 321
+b 330
+b 340
+b 329
+b 1
+b 62
+b 64
+b 66
+b 62
+b 1
+b 582
+b 584
+b 28
+b 55
+b 27
+b 1
+b 29
+b 52
+b 54
+b 56
+b 58
+b 54
+b 1
+b 14
+b 13
+b 1
+b 99
+b 106
+b 96
+b 1
+b 54
+b 60
+b 118
+b 125
+b 139
+b 138
+b 1
+b 968
+b 970
+b 1207
+b 1206
+b 1
+b 9
+b 18
+b 8
+b 1
+b 14
+b 1
+b 75
+b 152
+b 38
+b 84
+b 86
+b 88
+b 86
+b 1
+b 205
+b 204
+b 1
+b 152
+b 154
+b 154
+b 1
+b 34
+b 53
+b 55
+b 156
+b 153
+b 1
+b 39
+b 36
+b 1
+b 20
+b 72
+b 70
+b 1
+b 46
+b 44
+b 1
+b 46
+b 48
+b 50
+b 46
+b 1
+b 23
+b 41
+b 43
+b 41
+b 1
+b 71
+b 7
+b 8
+b 10
+b 84
+b 8
+b 1
+b 5
+b 26
+b 43
+b 2
+b 1
+b 40
+b 1
+b 190
+b 192
+b 60
+b 93
+b 270
+b 92
+b 1
+b 23
+b 45
+b 157
+b 2
+b 26
+b 28
+b 30
+b 26
+b 1
+b 2
+b 82
+b 5
+b 33
+b 35
+b 47
+b 33
+b 1
+b 868
+b 877
+b 84
+b 86
+b 97
+b 96
+b 1
+b 121
+b 134
+b 666
+b 675
+b 677
+b 665
+b 1
+b 158
+b 160
+b 4
+b 3
+b 1
+b 99
+b 187
+b 98
+b 1
+b 46
+b 45
+b 1
+b 3
+b 5
+b 452
+b 449
+b 1
+b 93
+b 110
+b 90
+b 1
+b 27
+b 37
+b 158
+b 160
+b 162
+b 164
+b 158
+b 1
+b 106
+b 108
+b 110
+b 161
+b 159
+b 161
+b 163
+b 159
+b 1
+b 335
+b 353
+b 355
+b 286
+b 190
+b 216
+b 52
+b 1
+b 69
+b 84
+b 92
+b 68
+b 1
+b 79
+b 1
+b 158
+b 160
+b 177
+b 176
+b 1
+b 23
+b 28
+b 27
+b 1
+b 15
+b 46
+b 14
+b 1
+b 42
+b 1
+b 7
+b 21
+b 6
+b 9
+b 26
+b 120
+b 119
+b 1
+b 5
+b 12
+b 17
+b 25
+b 9
+b 1
+b 160
+b 170
+b 172
+b 170
+b 1
+b 34
+b 45
+b 45
+b 47
+b 49
+b 42
+b 1
+b 0
+b 593
+b 595
+b 597
+b 599
+b 27
+b 4
+b 58
+b 71
+b 58
+b 1
+b 46
+b 45
+b 1
+b 28
+b 25
+b 1
+b 13
+b 347
+b 415
+b 417
+b 56
+b 58
+b 60
+b 62
+b 58
+b 1
+b 42
+b 41
+b 1
+b 3
+b 1
+b 1099
+b 1120
+b 44
+b 54
+b 70
+b 53
+b 1
+b 11
+b 13
+b 11
+b 1
+b 1
+b 155
+b 202
+b 220
+b 201
+b 1
+b 217
+b 1
+b 6
+b 19
+b 5
+b 1
+b 33
+b 67
+b 93
+b 66
+b 1
+b 89
+b 1
+b 9
+b 14
+b 12
+b 1
+b 181
+b 181
+b 1
+b 55
+b 53
+b 1
+b 125
+b 46
+b 1
+b 26
+b 28
+b 3
+b 15
+b 28
+b 30
+b 14
+b 1
+b 34
+b 20
+b 33
+b 19
+b 1
+b 9
+b 297
+b 9
+b 1
+b 5
+b 11
+b 45
+b 47
+b 137
+b 45
+b 1
+b 11
+b 21
+b 91
+b 93
+b 100
+b 91
+b 1
+b 19
+b 8
+b 67
+b 69
+b 67
+b 1
+b 28
+b 482
+b 481
+b 1
+b 5
+b 5
+b 1
+b 37
+b 232
+b 1
+b 89
+b 146
+b 23
+b 82
+b 5
+b 73
+b 75
+b 4
+b 1
+b 67
+b 69
+b 71
+b 73
+b 64
+b 1
+b 10
+b 7
+b 1
+b 15
+b 12
+b 1
+b 7
+b 23
+b 34
+b 8
+b 15
+b 23
+b 7
+b 1
+b 131
+b 130
+b 1
+b 34
+b 36
+b 38
+b 269
+b 278
+b 266
+b 1
+b 9
+b 8
+b 1
+b 167
+b 169
+b 171
+b 62
+b 23
+b 23
+b 20
+b 1
+b 57
+b 54
+b 1
+b 69
+b 5
+b 242
+b 244
+b 246
+b 17
+b 19
+b 16
+b 0
+b 48
+b 86
+b 88
+b 88
+b 1
+b 4
+b 12
+b 14
+b 141
+b 143
+b 145
+b 147
+b 39
+b 41
+b 4
+b 133
+b 148
+b 150
+b 133
+b 1
+b 12
+b 37
+b 34
+b 1
+b 3
+b 5
+b 7
+b 9
+b 5
+b 1
+b 179
+b 176
+b 1
+b 7
+b 9
+b 9
+b 1
+b 61
+b 1
+b 42
+b 4
+b 8
+b 10
+b 12
+b 24
+b 26
+b 28
+b 3
+b 12
+b 63
+b 65
+b 67
+b 69
+b 60
+b 1
+b 67
+b 1
+b 40
+b 10
+b 105
+b 107
+b 109
+b 105
+b 1
+b 21
+b 23
+b 25
+b 85
+b 99
+b 374
+b 376
+b 378
+b 380
+b 374
+b 1
+b 77
+b 79
+b 112
+b 111
+b 1
+b 9
+b 16
+b 103
+b 133
+b 150
+b 132
+b 1
+b 37
+b 138
+b 154
+b 137
+b 1
+b 150
+b 1
+b 34
+b 39
+b 37
+b 1
+b 22
+b 24
+b 55
+b 54
+b 1
+b 122
+b 124
+b 126
+b 122
+b 1
+b 5
+b 292
+b 294
+b 308
+b 292
+b 1
+b 92
+b 54
+b 275
+b 303
+b 33
+b 3
+b 134
+b 136
+b 138
+b 134
+b 1
+b 30
+b 257
+b 282
+b 15
+b 17
+b 15
+b 1
+b 14
+b 84
+b 86
+b 81
+b 1
+b 11
+b 9
+b 1
+b 31
+b 11
+b 52
+b 51
+b 1
+b 32
+b 60
+b 31
+b 1
+b 55
+b 1
+b 13
+b 75
+b 74
+b 1
+b 70
+b 67
+b 1
+b 57
+b 58
+b 72
+b 7
+b 9
+b 11
+b 13
+b 9
+b 1
+b 12
+b 20
+b 2
+b 4
+b 6
+b 2
+b 1
+b 28
+b 30
+b 40
+b 25
+b 1
+b 37
+b 1
+b 136
+b 138
+b 140
+b 142
+b 136
+b 1
+b 0
+b 187
+b 199
+b 187
+b 1
+b 157
+b 159
+b 154
+b 1
+b 90
+b 2
+b 0
+b 48
+b 99
+b 47
+b 1
+b 94
+b 1
+b 13
+b 31
+b 58
+b 60
+b 70
+b 69
+b 1
+b 95
+b 152
+b 61
+b 63
+b 65
+b 79
+b 58
+b 1
+b 48
+b 50
+b 50
+b 1
+b 81
+b 80
+b 1
+b 17
+b 89
+b 87
+b 1
+b 6
+b 30
+b 29
+b 1
+b 98
+b 176
+b 127
+b 129
+b 3
+b 51
+b 56
+b 48
+b 1
+b 89
+b 87
+b 1
+b 53
+b 127
+b 271
+b 270
+b 1
+b 178
+b 177
+b 1
+b 185
+b 17
+b 19
+b 17
+b 1
+b 1
+b 111
+b 111
+b 1
+b 0
+b 2
+b 0
+b 1
+b 1
+b 92
+b 94
+b 96
+b 98
+b 182
+b 5
+b 112
+b 21
+b 40
+b 20
+b 1
+b 33
+b 32
+b 1
+b 8
+b 96
+b 118
+b 62
+b 64
+b 66
+b 68
+b 62
+b 1
+b 342
+b 353
+b 394
+b 21
+b 62
+b 61
+b 1
+b 131
+b 133
+b 5
+b 4
+b 1
+b 18
+b 17
+b 1
+b 71
+b 73
+b 73
+b 1
+b 47
+b 74
+b 76
+b 46
+b 1
+b 70
+b 67
+b 1
+b 0
+b 2
+b 12
+b 0
+b 1
+b 19
+b 29
+b 2
+b 4
+b 6
+b 8
+b 2
+b 1
+b 426
+b 434
+b 423
+b 1
+b 432
+b 1
+b 132
+b 149
+b 29
+b 19
+b 21
+b 2
+b 24
+b 36
+b 3
+b 5
+b 7
+b 5
+b 1
+b 55
+b 81
+b 80
+b 1
+b 272
+b 271
+b 1
+b 75
+b 74
+b 1
+b 93
+b 92
+b 1
+b 1
+b 48
+b 7
+b 26
+b 34
+b 70
+b 10
+b 1
+b 18
+b 20
+b 6
+b 224
+b 226
+b 246
+b 28
+b 45
+b 43
+b 1
+b 1
+b 0
+b 1
+b 96
+b 98
+b 100
+b 56
+b 58
+b 56
+b 1
+b 19
+b 419
+b 421
+b 423
+b 419
+b 1
+b 101
+b 138
+b 49
+b 59
+b 56
+b 1
+b 451
+b 467
+b 516
+b 450
+b 1
+b 136
+b 29
+b 28
+b 1
+b 4
+b 153
+b 155
+b 22
+b 21
+b 1
+b 149
+b 151
+b 164
+b 202
+b 204
+b 214
+b 357
+b 367
+b 192
+b 191
+b 1
+b 11
+b 32
+b 153
+b 161
+b 189
+b 160
+b 1
+b 41
+b 43
+b 151
+b 153
+b 155
+b 13
+b 22
+b 5
+b 7
+b 21
+b 20
+b 1
+b 5
+b 15
+b 3
+b 1
+b 89
+b 88
+b 1
+b 96
+b 98
+b 136
+b 96
+b 1
+b 46
+b 60
+b 45
+b 1
+b 56
+b 1
+b 9
+b 9
+b 13
+b 129
+b 180
+b 182
+b 14
+b 75
+b 104
+b 106
+b 108
+b 110
+b 18
+b 34
+b 32
+b 1
+b 247
+b 19
+b 18
+b 1
+b 51
+b 48
+b 1
+b 72
+b 71
+b 1
+b 3
+b 0
+b 1
+b 173
+b 63
+b 65
+b 14
+b 34
+b 334
+b 168
+b 402
+b 410
+b 66
+b 123
+b 39
+b 6
+b 83
+b 90
+b 4
+b 17
+b 24
+b 234
+b 236
+b 241
+b 149
+b 3
+b 1
+b 1
+b 178
+b 180
+b 182
+b 178
+b 1
+b 139
+b 480
+b 479
+b 1
+b 198
+b 200
+b 31
+b 28
+b 1
+b 31
+b 30
+b 1
+b 9
+b 69
+b 109
+b 108
+b 1
+b 0
+b 11
+b 57
+b 54
+b 1
+b 53
+b 51
+b 1
+b 239
+b 241
+b 243
+b 245
+b 167
+b 180
+b 127
+b 80
+b 97
+b 79
+b 1
+b 70
+b 92
+b 80
+b 10
+b 9
+b 1
+b 32
+b 10
+b 13
+b 53
+b 6
+b 6
+b 5
+b 4
+b 1
+b 20
+b 18
+b 1
+b 5
+b 42
+b 41
+b 1
+b 4
+b 16
+b 0
+b 32
+b 30
+b 1
+b 106
+b 35
+b 34
+b 1
+b 86
+b 83
+b 1
+b 10
+b 7
+b 1
+b 13
+b 17
+b 110
+b 120
+b 109
+b 1
+b 47
+b 25
+b 23
+b 1
+b 83
+b 85
+b 87
+b 89
+b 83
+b 1
+b 387
+b 401
+b 82
+b 108
+b 13
+b 15
+b 17
+b 13
+b 1
+b 25
+b 61
+b 60
+b 1
+b 7
+b 4
+b 1
+b 94
+b 50
+b 52
+b 183
+b 32
+b 649
+b 10
+b 76
+b 78
+b 80
+b 82
+b 143
+b 145
+b 2
+b 24
+b 51
+b 45
+b 36
+b 279
+b 298
+b 297
+b 1
+b 5
+b 12
+b 14
+b 16
+b 12
+b 1
+b 92
+b 109
+b 111
+b 303
+b 110
+b 116
+b 118
+b 152
+b 151
+b 1
+b 408
+b 3
+b 192
+b 210
+b 36
+b 77
+b 50
+b 52
+b 54
+b 56
+b 47
+b 1
+b 54
+b 1
+b 185
+b 39
+b 46
+b 45
+b 1
+b 133
+b 135
+b 127
+b 89
+b 89
+b 1
+b 110
+b 110
+b 1
+b 43
+b 45
+b 68
+b 45
+b 1
+b 63
+b 1
+b 30
+b 27
+b 1
+b 47
+b 49
+b 49
+b 1
+b 33
+b 33
+b 1
+b 9
+b 6
+b 1
+b 75
+b 77
+b 79
+b 88
+b 82
+b 63
+b 69
+b 88
+b 90
+b 113
+b 90
+b 1
+b 108
+b 1
+b 288
+b 290
+b 292
+b 294
+b 285
+b 1
+b 12
+b 109
+b 132
+b 28
+b 9
+b 7
+b 1
+b 2
+b 12
+b 45
+b 9
+b 1
+b 0
+b 10
+b 260
+b 280
+b 5
+b 7
+b 9
+b 11
+b 642
+b 7
+b 26
+b 25
+b 1
+b 10
+b 30
+b 138
+b 157
+b 135
+b 1
+b 155
+b 1
+b 111
+b 113
+b 115
+b 117
+b 39
+b 38
+b 1
+b 45
+b 47
+b 47
+b 1
+b 72
+b 82
+b 13
+b 20
+b 29
+b 18
+b 1
+b 150
+b 171
+b 173
+b 171
+b 1
+b 37
+b 69
+b 37
+b 47
+b 88
+b 90
+b 92
+b 94
+b 92
+b 1
+b 65
+b 67
+b 8
+b 27
+b 29
+b 31
+b 29
+b 1
+b 75
+b 7
+b 17
+b 19
+b 21
+b 83
+b 90
+b 172
+b 82
+b 1
+b 86
+b 1
+b 122
+b 124
+b 124
+b 1
+b 200
+b 202
+b 204
+b 202
+b 1
+b 9
+b 19
+b 7
+b 1
+b 16
+b 1
+b 219
+b 221
+b 223
+b 235
+b 221
+b 1
+b 28
+b 27
+b 1
+b 93
+b 95
+b 129
+b 40
+b 112
+b 111
+b 1
+b 32
+b 0
+b 2
+b 144
+b 143
+b 1
+b 63
+b 65
+b 26
+b 9
+b 11
+b 16
+b 81
+b 94
+b 96
+b 59
+b 61
+b 97
+b 59
+b 1
+b 38
+b 17
+b 24
+b 13
+b 40
+b 38
+b 1
+b 18
+b 17
+b 1
+b 57
+b 116
+b 54
+b 1
+b 113
+b 1
+b 380
+b 380
+b 1
+b 58
+b 58
+b 1
+b 22
+b 29
+b 31
+b 21
+b 1
+b 35
+b 37
+b 61
+b 35
+b 1
+b 161
+b 168
+b 11
+b 29
+b 4
+b 6
+b 20
+b 30
+b 32
+b 41
+b 3
+b 5
+b 7
+b 9
+b 7
+b 1
+b 76
+b 86
+b 73
+b 1
+b 83
+b 1
+b 104
+b 114
+b 116
+b 102
+b 1
+b 101
+b 98
+b 1
+b 6
+b 79
+b 81
+b 83
+b 133
+b 135
+b 147
+b 8
+b 7
+b 24
+b 2
+b 34
+b 34
+b 1
+b 269
+b 25
+b 27
+b 29
+b 166
+b 168
+b 30
+b 47
+b 73
+b 1
+b 126
+b 160
+b 37
+b 36
+b 1
+b 8
+b 5
+b 1
+b 38
+b 37
+b 1
+b 41
+b 43
+b 166
+b 168
+b 30
+b 29
+b 1
+b 66
+b 15
+b 163
+b 55
+b 57
+b 16
+b 21
+b 14
+b 1
+b 0
+b 2
+b 66
+b 68
+b 11
+b 10
+b 1
+b 110
+b 125
+b 100
+b 107
+b 36
+b 38
+b 73
+b 154
+b 156
+b 4
+b 235
+b 248
+b 250
+b 234
+b 1
+b 8
+b 79
+b 76
+b 1
+b 13
+b 11
+b 1
+b 76
+b 115
+b 128
+b 33
+b 136
+b 21
+b 23
+b 34
+b 167
+b 182
+b 25
+b 44
+b 72
+b 74
+b 107
+b 106
+b 1
+b 25
+b 56
+b 72
+b 6
+b 109
+b 108
+b 1
+b 99
+b 101
+b 42
+b 44
+b 3
+b 11
+b 142
+b 151
+b 2
+b 111
+b 113
+b 55
+b 37
+b 5
+b 37
+b 34
+b 1
+b 15
+b 14
+b 1
+b 1
+b 255
+b 257
+b 276
+b 275
+b 1
+b 12
+b 27
+b 94
+b 14
+b 30
+b 37
+b 78
+b 78
+b 1
+b 143
+b 547
+b 635
+b 637
+b 639
+b 637
+b 1
+b 161
+b 223
+b 225
+b 32
+b 8
+b 5
+b 1
+b 25
+b 114
+b 113
+b 1
+b 6
+b 17
+b 215
+b 217
+b 76
+b 66
+b 11
+b 10
+b 12
+b 14
+b 77
+b 85
+b 426
+b 64
+b 83
+b 63
+b 1
+b 79
+b 1
+b 31
+b 38
+b 33
+b 41
+b 9
+b 76
+b 7
+b 1
+b 1077
+b 1100
+b 50
+b 52
+b 54
+b 50
+b 1
+b 5
+b 20
+b 6
+b 8
+b 10
+b 4
+b 79
+b 93
+b 78
+b 1
+b 89
+b 1
+b 165
+b 167
+b 169
+b 209
+b 208
+b 1
+b 1
+b 59
+b 128
+b 158
+b 19
+b 18
+b 1
+b 65
+b 67
+b 62
+b 1
+b 165
+b 164
+b 1
+b 190
+b 22
+b 21
+b 1
+b 8
+b 4
+b 20
+b 3
+b 1
+b 823
+b 849
+b 848
+b 1
+b 6
+b 56
+b 58
+b 56
+b 1
+b 117
+b 43
+b 7
+b 14
+b 6
+b 1
+b 14
+b 16
+b 18
+b 14
+b 1
+b 56
+b 58
+b 59
+b 91
+b 93
+b 58
+b 2
+b 53
+b 1
+b 84
+b 1
+b 136
+b 147
+b 149
+b 135
+b 1
+b 18
+b 253
+b 51
+b 10
+b 16
+b 39
+b 38
+b 1
+b 22
+b 32
+b 8
+b 971
+b 1207
+b 1120
+b 1117
+b 1
+b 3
+b 2
+b 1
+b 328
+b 67
+b 113
+b 210
+b 73
+b 58
+b 54
+b 3
+b 74
+b 73
+b 1
+b 113
+b 115
+b 12
+b 20
+b 19
+b 1
+b 23
+b 235
+b 242
+b 244
+b 3
+b 5
+b 1
+b 1
+b 1
+b 6
+b 24
+b 26
+b 24
+b 1
+b 48
+b 58
+b 60
+b 58
+b 1
+b 112
+b 114
+b 13
+b 148
+b 150
+b 203
+b 202
+b 1
+b 49
+b 51
+b 46
+b 1
+b 66
+b 63
+b 1
+b 10
+b 12
+b 14
+b 12
+b 1
+b 37
+b 4
+b 64
+b 125
+b 20
+b 20
+b 137
+b 9
+b 20
+b 19
+b 1
+b 60
+b 69
+b 4
+b 234
+b 236
+b 243
+b 241
+b 1
+b 42
+b 44
+b 46
+b 48
+b 32
+b 2
+b 16
+b 18
+b 20
+b 36
+b 41
+b 43
+b 34
+b 3
+b 25
+b 27
+b 29
+b 31
+b 35
+b 2
+b 4
+b 2
+b 1
+b 38
+b 40
+b 42
+b 44
+b 78
+b 107
+b 97
+b 41
+b 114
+b 113
+b 1
+b 120
+b 7
+b 320
+b 319
+b 1
+b 77
+b 74
+b 1
+b 110
+b 41
+b 66
+b 3
+b 1
+b 1
+b 67
+b 64
+b 1
+b 12
+b 10
+b 1
+b 230
+b 68
+b 67
+b 1
+b 9
+b 112
+b 73
+b 17
+b 16
+b 1
+b 17
+b 19
+b 25
+b 27
+b 29
+b 22
+b 1
+b 27
+b 1
+b 117
+b 119
+b 5
+b 4
+b 1
+b 291
+b 301
+b 298
+b 1
+b 107
+b 1
+b 0
+b 1
+b 105
+b 107
+b 109
+b 107
+b 1
+b 9
+b 21
+b 23
+b 25
+b 42
+b 23
+b 1
+b 57
+b 59
+b 61
+b 59
+b 1
+b 205
+b 63
+b 77
+b 76
+b 1
+b 287
+b 289
+b 291
+b 287
+b 1
+b 17
+b 19
+b 24
+b 42
+b 64
+b 73
+b 75
+b 15
+b 94
+b 93
+b 2
+b 5
+b 7
+b 29
+b 69
+b 13
+b 1106
+b 17
+b 19
+b 17
+b 1
+b 74
+b 76
+b 78
+b 1
+b 3
+b 303
+b 298
+b 318
+b 326
+b 317
+b 1
+b 322
+b 1
+b 23
+b 89
+b 0
+b 2
+b 34
+b 42
+b 42
+b 1
+b 31
+b 1
+b 17
+b 50
+b 6
+b 91
+b 93
+b 16
+b 15
+b 1
+b 51
+b 58
+b 78
+b 50
+b 1
+b 54
+b 1
+b 52
+b 54
+b 56
+b 58
+b 52
+b 1
+b 1088
+b 1121
+b 1123
+b 1087
+b 1
+b 25
+b 27
+b 29
+b 70
+b 78
+b 76
+b 85
+b 87
+b 45
+b 3
+b 27
+b 34
+b 44
+b 26
+b 1
+b 14
+b 22
+b 24
+b 12
+b 1
+b 22
+b 1
+b 404
+b 7
+b 9
+b 7
+b 1
+b 26
+b 20
+b 19
+b 1
+b 1
+b 34
+b 36
+b 38
+b 40
+b 34
+b 1
+b 38
+b 40
+b 42
+b 108
+b 110
+b 6
+b 3
+b 1
+b 6
+b 3
+b 1
+b 57
+b 55
+b 1
+b 75
+b 75
+b 1
+b 12
+b 9
+b 1
+b 61
+b 63
+b 65
+b 185
+b 201
+b 45
+b 210
+b 122
+b 124
+b 4
+b 3
+b 1
+b 144
+b 4
+b 6
+b 4
+b 1
+b 41
+b 41
+b 1
+b 7
+b 17
+b 67
+b 23
+b 240
+b 260
+b 188
+b 185
+b 1
+b 37
+b 35
+b 1
+b 2
+b 10
+b 68
+b 27
+b 2
+b 4
+b 6
+b 8
+b 6
+b 1
+b 756
+b 773
+b 267
+b 266
+b 1
+b 17
+b 19
+b 34
+b 46
+b 33
+b 1
+b 42
+b 1
+b 4
+b 16
+b 23
+b 86
+b 88
+b 50
+b 49
+b 1
+b 88
+b 95
+b 104
+b 106
+b 108
+b 101
+b 1
+b 27
+b 13
+b 72
+b 86
+b 168
+b 170
+b 192
+b 191
+b 1
+b 50
+b 52
+b 54
+b 56
+b 54
+b 1
+b 91
+b 101
+b 103
+b 105
+b 60
+b 70
+b 753
+b 51
+b 53
+b 67
+b 69
+b 58
+b 57
+b 1
+b 5
+b 11
+b 13
+b 11
+b 1
+b 62
+b 97
+b 25
+b 39
+b 262
+b 262
+b 1
+b 70
+b 69
+b 1
+b 250
+b 3
+b 13
+b 2
+b 1
+b 151
+b 153
+b 155
+b 161
+b 153
+b 1
+b 68
+b 70
+b 65
+b 1
+b 68
+b 1
+b 91
+b 100
+b 102
+b 100
+b 1
+b 12
+b 25
+b 24
+b 1
+b 177
+b 70
+b 72
+b 0
+b 2
+b 42
+b 18
+b 1
+b 126
+b 134
+b 11
+b 62
+b 59
+b 58
+b 1
+b 0
+b 31
+b 68
+b 55
+b 164
+b 174
+b 37
+b 42
+b 44
+b 88
+b 338
+b 337
+b 1
+b 0
+b 2
+b 144
+b 174
+b 176
+b 174
+b 1
+b 124
+b 16
+b 6
+b 47
+b 11
+b 68
+b 14
+b 198
+b 197
+b 1
+b 98
+b 109
+b 108
+b 1
+b 20
+b 17
+b 1
+b 283
+b 280
+b 1
+b 8
+b 76
+b 74
+b 1
+b 3
+b 15
+b 226
+b 235
+b 234
+b 1
+b 100
+b 99
+b 1
+b 13
+b 23
+b 23
+b 1
+b 38
+b 169
+b 168
+b 1
+b 1
+b 122
+b 124
+b 124
+b 1
+b 39
+b 51
+b 53
+b 55
+b 53
+b 1
+b 3
+b 13
+b 12
+b 1
+b 32
+b 41
+b 43
+b 31
+b 1
+b 4
+b 22
+b 9
+b 11
+b 13
+b 9
+b 1
+b 4
+b 6
+b 4
+b 1
+b 20
+b 90
+b 51
+b 76
+b 83
+b 75
+b 1
+b 148
+b 190
+b 189
+b 1
+b 19
+b 316
+b 315
+b 1
+b 38
+b 0
+b 19
+b 108
+b 110
+b 108
+b 1
+b 26
+b 2
+b 9
+b 4
+b 66
+b 2
+b 1
+b 5
+b 2
+b 1
+b 85
+b 90
+b 6
+b 5
+b 1
+b 0
+b 47
+b 343
+b 372
+b 374
+b 96
+b 149
+b 184
+b 183
+b 1
+b 115
+b 13
+b 13
+b 1
+b 212
+b 47
+b 163
+b 165
+b 167
+b 88
+b 98
+b 222
+b 221
+b 1
+b 94
+b 96
+b 38
+b 185
+b 72
+b 85
+b 87
+b 85
+b 1
+b 23
+b 25
+b 27
+b 29
+b 54
+b 56
+b 58
+b 60
+b 27
+b 48
+b 27
+b 1
+b 44
+b 1
+b 9
+b 11
+b 13
+b 15
+b 9
+b 1
+b 78
+b 44
+b 78
+b 77
+b 1
+b 0
+b 2
+b 0
+b 1
+b 39
+b 6
+b 30
+b 3
+b 1
+b 27
+b 1
+b 54
+b 54
+b 1
+b 3
+b 2
+b 1
+b 140
+b 156
+b 156
+b 1
+b 22
+b 21
+b 1
+b 270
+b 292
+b 269
+b 1
+b 119
+b 1152
+b 41
+b 103
+b 102
+b 1
+b 133
+b 135
+b 58
+b 100
+b 19
+b 58
+b 3
+b 10
+b 66
+b 21
+b 20
+b 1
+b 148
+b 150
+b 152
+b 150
+b 1
+b 66
+b 9
+b 57
+b 54
+b 1
+b 5
+b 22
+b 21
+b 1
+b 32
+b 31
+b 1
+b 20
+b 6
+b 69
+b 55
+b 57
+b 34
+b 78
+b 171
+b 77
+b 1
+b 363
+b 405
+b 362
+b 1
+b 401
+b 1
+b 174
+b 32
+b 129
+b 165
+b 28
+b 196
+b 195
+b 1
+b 116
+b 144
+b 143
+b 1
+b 34
+b 36
+b 92
+b 90
+b 1
+b 19
+b 1
+b 173
+b 188
+b 30
+b 42
+b 2
+b 264
+b 263
+b 1
+b 19
+b 15
+b 2
+b 1046
+b 29
+b 7
+b 9
+b 11
+b 319
+b 319
+b 1
+b 36
+b 39
+b 47
+b 14
+b 24
+b 26
+b 30
+b 32
+b 30
+b 1
+b 6
+b 17
+b 16
+b 1
+b 19
+b 21
+b 21
+b 1
+b 222
+b 224
+b 203
+b 202
+b 1
+b 8
+b 25
+b 22
+b 1
+b 143
+b 140
+b 1
+b 37
+b 34
+b 1
+b 80
+b 79
+b 1
+b 7
+b 9
+b 9
+b 1
+b 5
+b 4
+b 20
+b 44
+b 43
+b 45
+b 43
+b 1
+b 7
+b 65
+b 79
+b 50
+b 60
+b 3
+b 34
+b 87
+b 93
+b 95
+b 97
+b 99
+b 289
+b 374
+b 0
+b 2
+b 26
+b 28
+b 30
+b 39
+b 49
+b 286
+b 284
+b 1
+b 135
+b 0
+b 20
+b 32
+b 34
+b 36
+b 117
+b 138
+b 114
+b 1
+b 135
+b 1
+b 60
+b 62
+b 75
+b 74
+b 1
+b 18
+b 26
+b 99
+b 0
+b 8
+b 47
+b 64
+b 16
+b 13
+b 1
+b 3
+b 0
+b 1
+b 195
+b 204
+b 18
+b 17
+b 1
+b 126
+b 128
+b 13
+b 10
+b 1
+b 64
+b 74
+b 127
+b 126
+b 2
+b 61
+b 1
+b 133
+b 135
+b 133
+b 1
+b 10
+b 15
+b 46
+b 44
+b 1
+b 1
+b 0
+b 1
+b 11
+b 13
+b 15
+b 17
+b 8
+b 1
+b 7
+b 1
+b 42
+b 96
+b 93
+b 956
+b 958
+b 956
+b 1
+b 63
+b 93
+b 62
+b 1
+b 39
+b 7
+b 23
+b 269
+b 271
+b 273
+b 275
+b 273
+b 1
+b 107
+b 105
+b 1
+b 19
+b 16
+b 1
+b 133
+b 132
+b 1
+b 14
+b 24
+b 11
+b 1
+b 122
+b 120
+b 1
+b 8
+b 14
+b 11
+b 1
+b 23
+b 54
+b 113
+b 116
+b 140
+b 142
+b 140
+b 1
+b 62
+b 62
+b 1
+b 11
+b 24
+b 26
+b 28
+b 156
+b 158
+b 160
+b 138
+b 140
+b 182
+b 138
+b 1
+b 183
+b 185
+b 180
+b 1
+b 111
+b 105
+b 24
+b 58
+b 55
+b 1
+b 45
+b 47
+b 49
+b 51
+b 45
+b 1
+b 218
+b 220
+b 222
+b 52
+b 76
+b 74
+b 151
+b 72
+b 1
+b 148
+b 1
+b 49
+b 51
+b 53
+b 46
+b 1
+b 28
+b 181
+b 204
+b 180
+b 182
+b 184
+b 186
+b 82
+b 79
+b 1
+b 3
+b 0
+b 1
+b 13
+b 36
+b 40
+b 38
+b 1
+b 6
+b 58
+b 383
+b 431
+b 93
+b 90
+b 1
+b 82
+b 79
+b 1
+b 184
+b 112
+b 54
+b 62
+b 53
+b 1
+b 58
+b 1
+b 5
+b 48
+b 59
+b 73
+b 75
+b 77
+b 79
+b 75
+b 1
+b 84
+b 86
+b 93
+b 84
+b 1
+b 34
+b 36
+b 38
+b 4
+b 6
+b 8
+b 4
+b 1
+b 26
+b 13
+b 82
+b 84
+b 86
+b 110
+b 84
+b 1
+b 131
+b 167
+b 165
+b 1
+b 223
+b 290
+b 17
+b 24
+b 26
+b 15
+b 1
+b 24
+b 1
+b 156
+b 153
+b 1
+b 79
+b 23
+b 0
+b 65
+b 72
+b 74
+b 79
+b 105
+b 107
+b 87
+b 125
+b 85
+b 1
+b 63
+b 60
+b 1
+b 202
+b 25
+b 30
+b 0
+b 127
+b 184
+b 126
+b 1
+b 53
+b 151
+b 5
+b 546
+b 4
+b 3
+b 1
+b 3
+b 1213
+b 6
+b 25
+b 3
+b 11
+b 13
+b 15
+b 17
+b 11
+b 1
+b 115
+b 117
+b 119
+b 121
+b 10
+b 12
+b 137
+b 25
+b 139
+b 146
+b 138
+b 1
+b 294
+b 319
+b 321
+b 323
+b 325
+b 321
+b 1
+b 91
+b 117
+b 121
+b 120
+b 1
+b 127
+b 129
+b 129
+b 1
+b 45
+b 82
+b 226
+b 228
+b 9
+b 29
+b 41
+b 28
+b 1
+b 37
+b 1
+b 147
+b 161
+b 12
+b 14
+b 9
+b 1
+b 1
+b 1
+b 1
+b 21
+b 23
+b 23
+b 1
+b 9
+b 7
+b 1
+b 24
+b 39
+b 55
+b 38
+b 1
+b 50
+b 1
+b 303
+b 321
+b 323
+b 321
+b 1
+b 90
+b 443
+b 441
+b 1
+b 0
+b 51
+b 5
+b 25
+b 4
+b 1
+b 13
+b 15
+b 17
+b 795
+b 64
+b 63
+b 1
+b 3
+b 145
+b 144
+b 1
+b 4
+b 6
+b 38
+b 37
+b 1
+b 91
+b 93
+b 18
+b 33
+b 10
+b 78
+b 14
+b 16
+b 18
+b 14
+b 1
+b 28
+b 53
+b 116
+b 118
+b 116
+b 1
+b 114
+b 3
+b 25
+b 28
+b 30
+b 28
+b 1
+b 658
+b 1
+b 13
+b 52
+b 2
+b 370
+b 369
+b 1
+b 9
+b 56
+b 75
+b 77
+b 55
+b 1
+b 54
+b 56
+b 58
+b 56
+b 1
+b 6
+b 9
+b 6
+b 8
+b 10
+b 61
+b 76
+b 60
+b 1
+b 1
+b 53
+b 35
+b 26
+b 33
+b 35
+b 25
+b 1
+b 256
+b 81
+b 97
+b 80
+b 1
+b 8
+b 108
+b 110
+b 112
+b 105
+b 1
+b 4
+b 21
+b 26
+b 129
+b 2
+b 785
+b 792
+b 794
+b 792
+b 1
+b 283
+b 285
+b 287
+b 289
+b 283
+b 1
+b 11
+b 60
+b 167
+b 169
+b 33
+b 17
+b 96
+b 95
+b 1
+b 4
+b 22
+b 21
+b 1
+b 23
+b 36
+b 20
+b 1
+b 467
+b 480
+b 103
+b 129
+b 102
+b 1
+b 3
+b 142
+b 177
+b 234
+b 246
+b 3
+b 5
+b 16
+b 15
+b 1
+b 19
+b 53
+b 18
+b 1
+b 0
+b 7
+b 91
+b 206
+b 483
+b 116
+b 0
+b 125
+b 134
+b 152
+b 121
+b 14
+b 125
+b 51
+b 10
+b 64
+b 11
+b 13
+b 5
+b 4
+b 2
+b 1
+b 1
+b 8
+b 92
+b 90
+b 1
+b 14
+b 14
+b 1
+b 75
+b 77
+b 91
+b 41
+b 57
+b 108
+b 110
+b 112
+b 114
+b 34
+b 3
+b 11
+b 2
+b 1
+b 533
+b 19
+b 508
+b 507
+b 1
+b 63
+b 65
+b 389
+b 399
+b 25
+b 27
+b 59
+b 56
+b 1
+b 53
+b 35
+b 3
+b 2
+b 1
+b 197
+b 218
+b 71
+b 85
+b 83
+b 90
+b 128
+b 130
+b 132
+b 130
+b 1
+b 91
+b 93
+b 91
+b 1
+b 91
+b 29
+b 31
+b 47
+b 46
+b 1
+b 31
+b 56
+b 67
+b 66
+b 1
+b 100
+b 102
+b 104
+b 106
+b 108
+b 124
+b 121
+b 1
+b 0
+b 2
+b 13
+b 105
+b 123
+b 125
+b 123
+b 1
+b 9
+b 19
+b 21
+b 8
+b 1
+b 5
+b 26
+b 23
+b 1
+b 74
+b 72
+b 1
+b 9
+b 11
+b 17
+b 28
+b 68
+b 70
+b 104
+b 161
+b 22
+b 108
+b 110
+b 112
+b 114
+b 112
+b 1
+b 47
+b 78
+b 44
+b 1
+b 58
+b 0
+b 2
+b 0
+b 86
+b 88
+b 90
+b 88
+b 1
+b 188
+b 190
+b 192
+b 190
+b 1
+b 51
+b 0
+b 22
+b 76
+b 74
+b 1
+b 16
+b 18
+b 18
+b 1
+b 160
+b 162
+b 160
+b 1
+b 73
+b 10
+b 9
+b 1
+b 55
+b 57
+b 77
+b 79
+b 81
+b 10
+b 33
+b 56
+b 32
+b 1
+b 51
+b 1
+b 110
+b 2
+b 20
+b 1
+b 1
+b 37
+b 39
+b 46
+b 45
+b 1
+b 14
+b 16
+b 18
+b 20
+b 11
+b 16
+b 10
+b 1
+b 12
+b 1
+b 5
+b 9
+b 1
+b 17
+b 1
+b 1
+b 13
+b 1
+b 147
+b 11
+b 213
+b 215
+b 222
+b 221
+b 1
+b 3
+b 18
+b 19
+b 18
+b 1
+b 15
+b 29
+b 157
+b 156
+b 1
+b 16
+b 23
+b 96
+b 98
+b 100
+b 98
+b 1
+b 95
+b 46
+b 48
+b 44
+b 1
+b 41
+b 38
+b 1
+b 12
+b 20
+b 9
+b 1
+b 40
+b 37
+b 1
+b 38
+b 11
+b 32
+b 266
+b 278
+b 79
+b 1
+b 35
+b 32
+b 1
+b 7
+b 7
+b 1
+b 5
+b 13
+b 9
+b 11
+b 13
+b 20
+b 6
+b 1
+b 22
+b 37
+b 104
+b 104
+b 1
+b 63
+b 62
+b 1
+b 185
+b 3
+b 173
+b 195
+b 170
+b 1
+b 0
+b 0
+b 1
+b 43
+b 41
+b 2
+b 81
+b 0
+b 7
+b 8
+b 31
+b 7
+b 1
+b 90
+b 90
+b 1
+b 156
+b 153
+b 1
+b 55
+b 57
+b 59
+b 61
+b 59
+b 1
+b 50
+b 52
+b 54
+b 118
+b 120
+b 133
+b 130
+b 1
+b 78
+b 80
+b 82
+b 84
+b 81
+b 15
+b 17
+b 15
+b 1
+b 29
+b 44
+b 76
+b 28
+b 1
+b 169
+b 190
+b 1072
+b 1097
+b 29
+b 31
+b 33
+b 31
+b 1
+b 755
+b 277
+b 279
+b 281
+b 6
+b 5
+b 1
+b 8
+b 10
+b 278
+b 294
+b 407
+b 409
+b 427
+b 425
+b 1
+b 60
+b 62
+b 12
+b 163
+b 165
+b 221
+b 19
+b 37
+b 18
+b 1
+b 32
+b 1
+b 22
+b 33
+b 41
+b 32
+b 1
+b 110
+b 19
+b 40
+b 48
+b 26
+b 118
+b 120
+b 181
+b 178
+b 1
+b 70
+b 150
+b 4
+b 249
+b 251
+b 253
+b 255
+b 253
+b 1
+b 12
+b 7
+b 26
+b 34
+b 26
+b 1
+b 31
+b 1
+b 4
+b 44
+b 52
+b 54
+b 277
+b 279
+b 281
+b 277
+b 1
+b 39
+b 46
+b 48
+b 38
+b 1
+b 23
+b 43
+b 79
+b 160
+b 162
+b 68
+b 135
+b 68
+b 1
+b 130
+b 1
+b 4
+b 103
+b 110
+b 109
+b 1
+b 262
+b 286
+b 313
+b 261
+b 1
+b 282
+b 1
+b 21
+b 56
+b 0
+b 7
+b 9
+b 9
+b 1
+b 50
+b 47
+b 1
+b 66
+b 7
+b 1
+b 74
+b 73
+b 1
+b 2
+b 4
+b 253
+b 252
+b 1
+b 18
+b 20
+b 20
+b 1
+b 29
+b 37
+b 287
+b 150
+b 9
+b 17
+b 7
+b 1
+b 15
+b 1
+b 12
+b 11
+b 1
+b 0
+b 2
+b 0
+b 117
+b 119
+b 128
+b 64
+b 80
+b 90
+b 63
+b 1
+b 76
+b 1
+b 39
+b 72
+b 36
+b 1
+b 70
+b 1
+b 53
+b 15
+b 14
+b 1
+b 73
+b 75
+b 77
+b 73
+b 1
+b 285
+b 2
+b 41
+b 43
+b 45
+b 43
+b 1
+b 79
+b 113
+b 50
+b 69
+b 56
+b 68
+b 50
+b 57
+b 305
+b 326
+b 305
+b 1
+b 321
+b 1
+b 10
+b 9
+b 1
+b 0
+b 16
+b 19
+b 33
+b 201
+b 203
+b 205
+b 207
+b 244
+b 19
+b 30
+b 29
+b 1
+b 45
+b 70
+b 43
+b 1
+b 45
+b 44
+b 1
+b 18
+b 17
+b 1
+b 11
+b 3
+b 5
+b 25
+b 50
+b 0
+b 2
+b 22
+b 78
+b 83
+b 315
+b 317
+b 337
+b 313
+b 1
+b 335
+b 1
+b 4
+b 12
+b 10
+b 1
+b 3
+b 1
+b 167
+b 165
+b 1
+b 111
+b 39
+b 41
+b 43
+b 36
+b 1
+b 45
+b 61
+b 215
+b 40
+b 81
+b 100
+b 102
+b 80
+b 1
+b 3
+b 0
+b 1
+b 43
+b 3
+b 1
+b 1
+b 96
+b 98
+b 128
+b 96
+b 1
+b 49
+b 14
+b 16
+b 38
+b 37
+b 1
+b 13
+b 15
+b 17
+b 19
+b 10
+b 1
+b 17
+b 1
+b 113
+b 65
+b 67
+b 14
+b 16
+b 18
+b 20
+b 56
+b 67
+b 69
+b 58
+b 60
+b 60
+b 1
+b 22
+b 93
+b 12
+b 29
+b 31
+b 82
+b 77
+b 79
+b 81
+b 77
+b 1
+b 23
+b 22
+b 2
+b 306
+b 305
+b 1
+b 16
+b 167
+b 183
+b 36
+b 45
+b 42
+b 1
+b 1
+b 0
+b 1
+b 4
+b 3
+b 14
+b 16
+b 18
+b 14
+b 1
+b 70
+b 67
+b 1
+b 39
+b 38
+b 1
+b 3
+b 2
+b 1
+b 11
+b 19
+b 43
+b 56
+b 43
+b 98
+b 100
+b 102
+b 104
+b 100
+b 1
+b 15
+b 24
+b 284
+b 294
+b 292
+b 1
+b 161
+b 2
+b 4
+b 159
+b 166
+b 91
+b 90
+b 1
+b 8
+b 1
+b 127
+b 134
+b 104
+b 106
+b 104
+b 1
+b 46
+b 9
+b 10
+b 12
+b 14
+b 16
+b 133
+b 142
+b 37
+b 36
+b 1
+b 122
+b 4
+b 36
+b 6
+b 1
+b 5
+b 528
+b 92
+b 109
+b 108
+b 1
+b 15
+b 25
+b 9
+b 11
+b 28
+b 27
+b 1
+b 65
+b 74
+b 8
+b 15
+b 5
+b 4
+b 1
+b 3
+b 3
+b 1
+b 12
+b 9
+b 1
+b 264
+b 280
+b 282
+b 261
+b 1
+b 280
+b 1
+b 13
+b 19
+b 1
+b 127
+b 126
+b 1
+b 22
+b 60
+b 61
+b 28
+b 27
+b 1
+b 1
+b 0
+b 1
+b 33
+b 259
+b 248
+b 6
+b 8
+b 10
+b 12
+b 6
+b 1
+b 108
+b 123
+b 105
+b 1
+b 120
+b 1
+b 102
+b 102
+b 169
+b 167
+b 1
+b 43
+b 43
+b 1
+b 16
+b 33
+b 35
+b 37
+b 97
+b 1
+b 10
+b 26
+b 48
+b 56
+b 47
+b 1
+b 43
+b 56
+b 58
+b 38
+b 37
+b 1
+b 13
+b 13
+b 1
+b 52
+b 73
+b 75
+b 108
+b 107
+b 2
+b 4
+b 2
+b 1
+b 18
+b 40
+b 242
+b 7
+b 55
+b 62
+b 115
+b 115
+b 50
+b 48
+b 1
+b 18
+b 20
+b 15
+b 1
+b 140
+b 142
+b 144
+b 146
+b 34
+b 36
+b 34
+b 1
+b 48
+b 10
+b 12
+b 24
+b 23
+b 1
+b 7
+b 9
+b 35
+b 37
+b 49
+b 6
+b 8
+b 10
+b 12
+b 6
+b 1
+b 132
+b 129
+b 1
+b 27
+b 208
+b 207
+b 1
+b 126
+b 123
+b 1
+b 109
+b 106
+b 1
+b 15
+b 16
+b 20
+b 19
+b 1
+b 17
+b 19
+b 118
+b 135
+b 137
+b 34
+b 49
+b 46
+b 1
+b 34
+b 47
+b 119
+b 125
+b 138
+b 19
+b 17
+b 19
+b 196
+b 195
+b 1
+b 3
+b 66
+b 64
+b 1
+b 108
+b 110
+b 29
+b 31
+b 33
+b 35
+b 33
+b 1
+b 89
+b 91
+b 89
+b 1
+b 49
+b 125
+b 157
+b 146
+b 194
+b 4
+b 28
+b 30
+b 7
+b 9
+b 11
+b 13
+b 6
+b 8
+b 10
+b 3
+b 1
+b 8
+b 1
+b 253
+b 252
+b 1
+b 9
+b 11
+b 41
+b 49
+b 40
+b 1
+b 2
+b 18
+b 50
+b 31
+b 40
+b 198
+b 10
+b 336
+b 335
+b 1
+b 79
+b 81
+b 83
+b 81
+b 1
+b 42
+b 44
+b 285
+b 284
+b 1
+b 237
+b 244
+b 246
+b 236
+b 1
+b 33
+b 73
+b 193
+b 25
+b 91
+b 24
+b 1
+b 16
+b 9
+b 48
+b 57
+b 46
+b 1
+b 54
+b 1
+b 7
+b 6
+b 1
+b 3
+b 5
+b 4
+b 30
+b 29
+b 1
+b 32
+b 45
+b 240
+b 242
+b 242
+b 1
+b 8
+b 7
+b 4
+b 1
+b 3
+b 26
+b 25
+b 2
+b 37
+b 34
+b 1
+b 1
+b 24
+b 11
+b 13
+b 15
+b 17
+b 167
+b 234
+b 18
+b 26
+b 28
+b 2
+b 4
+b 6
+b 94
+b 96
+b 75
+b 72
+b 1
+b 23
+b 30
+b 22
+b 1
+b 47
+b 11
+b 20
+b 24
+b 40
+b 23
+b 1
+b 35
+b 1
+b 230
+b 6
+b 38
+b 40
+b 53
+b 38
+b 1
+b 123
+b 125
+b 127
+b 129
+b 120
+b 1
+b 628
+b 648
+b 628
+b 1
+b 42
+b 3
+b 42
+b 41
+b 1
+b 45
+b 47
+b 49
+b 6
+b 37
+b 65
+b 37
+b 1
+b 0
+b 59
+b 31
+b 28
+b 1
+b 193
+b 6
+b 3
+b 1
+b 23
+b 28
+b 20
+b 1
+b 50
+b 14
+b 28
+b 13
+b 1
+b 24
+b 1
+b 79
+b 81
+b 99
+b 98
+b 1
+b 134
+b 136
+b 138
+b 136
+b 1
+b 97
+b 86
+b 96
+b 95
+b 1
+b 1
+b 40
+b 42
+b 44
+b 46
+b 40
+b 1
+b 84
+b 93
+b 113
+b 133
+b 361
+b 363
+b 361
+b 1
+b 20
+b 13
+b 50
+b 15
+b 14
+b 1
+b 399
+b 574
+b 67
+b 69
+b 71
+b 95
+b 71
+b 1
+b 92
+b 1
+b 13
+b 26
+b 28
+b 26
+b 1
+b 152
+b 154
+b 152
+b 1
+b 3
+b 22
+b 24
+b 26
+b 65
+b 75
+b 64
+b 1
+b 71
+b 1
+b 6
+b 5
+b 15
+b 13
+b 1
+b 80
+b 82
+b 84
+b 86
+b 80
+b 1
+b 12
+b 111
+b 52
+b 10
+b 169
+b 232
+b 157
+b 156
+b 1
+b 119
+b 116
+b 1
+b 178
+b 242
+b 28
+b 39
+b 27
+b 1
+b 16
+b 31
+b 41
+b 13
+b 1
+b 0
+b 130
+b 148
+b 150
+b 148
+b 1
+b 186
+b 185
+b 1
+b 77
+b 75
+b 1
+b 83
+b 113
+b 43
+b 53
+b 4
+b 6
+b 5
+b 4
+b 1
+b 11
+b 31
+b 103
+b 10
+b 9
+b 1
+b 123
+b 20
+b 19
+b 1
+b 139
+b 147
+b 162
+b 3
+b 111
+b 128
+b 110
+b 1
+b 124
+b 1
+b 314
+b 19
+b 16
+b 1
+b 2
+b 4
+b 51
+b 53
+b 55
+b 53
+b 1
+b 116
+b 118
+b 120
+b 120
+b 1
+b 183
+b 562
+b 34
+b 36
+b 38
+b 34
+b 1
+b 381
+b 380
+b 1
+b 35
+b 37
+b 22
+b 35
+b 19
+b 40
+b 42
+b 72
+b 95
+b 8
+b 63
+b 5
+b 1
+b 0
+b 8
+b 133
+b 218
+b 133
+b 1
+b 215
+b 1
+b 30
+b 48
+b 13
+b 38
+b 40
+b 100
+b 102
+b 117
+b 100
+b 1
+b 111
+b 110
+b 1
+b 6
+b 8
+b 55
+b 54
+b 1
+b 31
+b 33
+b 28
+b 1
+b 47
+b 55
+b 44
+b 1
+b 0
+b 37
+b 36
+b 1
+b 23
+b 131
+b 107
+b 5
+b 7
+b 5
+b 1
+b 71
+b 79
+b 26
+b 35
+b 37
+b 35
+b 1
+b 226
+b 9
+b 56
+b 58
+b 73
+b 56
+b 1
+b 83
+b 42
+b 39
+b 1
+b 13
+b 12
+b 1
+b 21
+b 15
+b 91
+b 91
+b 1
+b 70
+b 69
+b 1
+b 2
+b 4
+b 6
+b 19
+b 34
+b 64
+b 82
+b 49
+b 48
+b 1
+b 5
+b 7
+b 85
+b 84
+b 1
+b 5
+b 7
+b 2
+b 1
+b 18
+b 636
+b 641
+b 635
+b 1
+b 12
+b 185
+b 211
+b 213
+b 211
+b 1
+b 12
+b 14
+b 9
+b 1
+b 12
+b 11
+b 1
+b 149
+b 151
+b 153
+b 155
+b 151
+b 1
+b 104
+b 106
+b 147
+b 104
+b 1
+b 21
+b 28
+b 108
+b 58
+b 26
+b 28
+b 30
+b 26
+b 1
+b 3
+b 79
+b 87
+b 94
+b 71
+b 50
+b 77
+b 76
+b 1
+b 24
+b 22
+b 1
+b 72
+b 38
+b 9
+b 42
+b 75
+b 41
+b 1
+b 71
+b 1
+b 83
+b 101
+b 111
+b 80
+b 1
+b 108
+b 1
+b 5
+b 7
+b 9
+b 11
+b 139
+b 141
+b 172
+b 132
+b 29
+b 206
+b 1
+b 141
+b 140
+b 1
+b 4
+b 41
+b 48
+b 50
+b 52
+b 48
+b 1
+b 29
+b 53
+b 55
+b 53
+b 1
+b 3
+b 3
+b 305
+b 5
+b 15
+b 4
+b 1
+b 11
+b 1
+b 44
+b 46
+b 59
+b 44
+b 1
+b 36
+b 18
+b 17
+b 1
+b 11
+b 9
+b 1
+b 304
+b 303
+b 1
+b 3
+b 5
+b 351
+b 350
+b 1
+b 6
+b 178
+b 50
+b 3
+b 62
+b 64
+b 59
+b 1
+b 62
+b 1
+b 213
+b 213
+b 1
+b 4
+b 42
+b 128
+b 363
+b 365
+b 367
+b 369
+b 369
+b 1
+b 360
+b 1
+b 175
+b 217
+b 184
+b 197
+b 199
+b 197
+b 1
+b 15
+b 17
+b 25
+b 12
+b 1
+b 22
+b 1
+b 137
+b 8
+b 84
+b 67
+b 82
+b 64
+b 1
+b 79
+b 1
+b 161
+b 163
+b 165
+b 167
+b 161
+b 1
+b 180
+b 200
+b 209
+b 216
+b 215
+b 1
+b 35
+b 16
+b 13
+b 1
+b 13
+b 83
+b 187
+b 3
+b 5
+b 7
+b 9
+b 7
+b 1
+b 114
+b 102
+b 104
+b 129
+b 131
+b 32
+b 487
+b 19
+b 17
+b 1
+b 0
+b 23
+b 92
+b 110
+b 89
+b 1
+b 107
+b 1
+b 39
+b 81
+b 105
+b 5
+b 210
+b 0
+b 8
+b 7
+b 1
+b 30
+b 32
+b 58
+b 27
+b 1
+b 55
+b 1
+b 184
+b 192
+b 194
+b 196
+b 182
+b 1
+b 194
+b 1
+b 110
+b 128
+b 130
+b 64
+b 9
+b 8
+b 1
+b 133
+b 131
+b 1
+b 57
+b 136
+b 146
+b 135
+b 1
+b 22
+b 24
+b 22
+b 1
+b 19
+b 13
+b 13
+b 1
+b 219
+b 216
+b 1
+b 97
+b 125
+b 39
+b 38
+b 1
+b 75
+b 77
+b 77
+b 1
+b 32
+b 58
+b 60
+b 3
+b 11
+b 213
+b 43
+b 14
+b 3
+b 10
+b 31
+b 0
+b 2
+b 0
+b 1
+b 105
+b 152
+b 85
+b 92
+b 84
+b 1
+b 17
+b 19
+b 3
+b 2
+b 1
+b 14
+b 13
+b 1
+b 11
+b 26
+b 12
+b 27
+b 2
+b 14
+b 7
+b 6
+b 1
+b 147
+b 28
+b 30
+b 28
+b 1
+b 62
+b 81
+b 60
+b 1
+b 33
+b 31
+b 1
+b 192
+b 191
+b 1
+b 29
+b 8
+b 5
+b 1
+b 157
+b 186
+b 154
+b 1
+b 184
+b 1
+b 44
+b 55
+b 43
+b 1
+b 705
+b 713
+b 233
+b 245
+b 0
+b 7
+b 9
+b 11
+b 9
+b 1
+b 66
+b 138
+b 64
+b 1
+b 135
+b 1
+b 14
+b 16
+b 18
+b 103
+b 140
+b 142
+b 140
+b 1
+b 81
+b 118
+b 36
+b 20
+b 166
+b 168
+b 170
+b 172
+b 166
+b 1
+b 99
+b 107
+b 109
+b 449
+b 451
+b 11
+b 10
+b 1
+b 6
+b 8
+b 3
+b 1
+b 23
+b 52
+b 63
+b 7
+b 12
+b 13
+b 24
+b 156
+b 155
+b 1
+b 103
+b 61
+b 79
+b 81
+b 79
+b 1
+b 32
+b 267
+b 299
+b 233
+b 235
+b 257
+b 64
+b 16
+b 18
+b 16
+b 1
+b 125
+b 134
+b 20
+b 2
+b 16
+b 13
+b 1
+b 17
+b 15
+b 1
+b 41
+b 52
+b 39
+b 1
+b 50
+b 1
+b 38
+b 16
+b 18
+b 16
+b 1
+b 15
+b 23
+b 25
+b 23
+b 1
+b 22
+b 20
+b 1
+b 55
+b 4
+b 3
+b 1
+b 26
+b 28
+b 30
+b 34
+b 36
+b 54
+b 63
+b 53
+b 1
+b 6
+b 5
+b 1
+b 10
+b 52
+b 7
+b 1
+b 34
+b 36
+b 34
+b 1
+b 46
+b 92
+b 94
+b 96
+b 98
+b 98
+b 1
+b 87
+b 18
+b 17
+b 1
+b 6
+b 264
+b 57
+b 56
+b 1
+b 173
+b 175
+b 177
+b 231
+b 280
+b 279
+b 1
+b 252
+b 12
+b 11
+b 1
+b 3
+b 50
+b 52
+b 64
+b 50
+b 1
+b 93
+b 101
+b 103
+b 92
+b 1
+b 118
+b 134
+b 134
+b 1
+b 163
+b 161
+b 1
+b 83
+b 40
+b 50
+b 57
+b 49
+b 1
+b 53
+b 1
+b 10
+b 51
+b 7
+b 1
+b 48
+b 1
+b 119
+b 126
+b 133
+b 118
+b 1
+b 41
+b 65
+b 7
+b 17
+b 104
+b 6
+b 1
+b 16
+b 34
+b 33
+b 1
+b 3
+b 12
+b 14
+b 16
+b 16
+b 1
+b 68
+b 6
+b 12
+b 83
+b 85
+b 1
+b 0
+b 1
+b 309
+b 0
+b 2
+b 86
+b 88
+b 118
+b 106
+b 128
+b 130
+b 132
+b 128
+b 1
+b 17
+b 10
+b 32
+b 19
+b 103
+b 103
+b 1
+b 38
+b 1
+b 0
+b 1
+b 373
+b 15
+b 23
+b 14
+b 1
+b 11
+b 102
+b 9
+b 1
+b 99
+b 1
+b 90
+b 153
+b 8
+b 24
+b 125
+b 123
+b 1
+b 42
+b 40
+b 1
+b 10
+b 4
+b 16
+b 15
+b 1
+b 157
+b 24
+b 4
+b 50
+b 96
+b 104
+b 59
+b 58
+b 1
+b 36
+b 12
+b 21
+b 5
+b 7
+b 9
+b 2
+b 1
+b 76
+b 86
+b 73
+b 1
+b 147
+b 145
+b 1
+b 104
+b 117
+b 101
+b 1
+b 115
+b 1
+b 150
+b 179
+b 181
+b 148
+b 1
+b 83
+b 90
+b 82
+b 1
+b 33
+b 22
+b 29
+b 21
+b 1
+b 25
+b 1
+b 339
+b 354
+b 85
+b 53
+b 82
+b 81
+b 1
+b 81
+b 91
+b 90
+b 1
+b 10
+b 8
+b 1
+b 9
+b 219
+b 229
+b 231
+b 218
+b 1
+b 54
+b 56
+b 69
+b 111
+b 175
+b 109
+b 1
+b 172
+b 1
+b 105
+b 104
+b 1
+b 63
+b 65
+b 10
+b 12
+b 8
+b 4
+b 6
+b 8
+b 10
+b 4
+b 1
+b 150
+b 149
+b 1
+b 147
+b 144
+b 1
+b 77
+b 6
+b 8
+b 6
+b 1
+b 31
+b 43
+b 29
+b 31
+b 16
+b 18
+b 27
+b 39
+b 41
+b 43
+b 45
+b 9
+b 28
+b 30
+b 28
+b 1
+b 79
+b 77
+b 1
+b 53
+b 55
+b 50
+b 1
+b 7
+b 19
+b 2
+b 140
+b 155
+b 165
+b 8
+b 18
+b 251
+b 253
+b 255
+b 257
+b 255
+b 1
+b 51
+b 64
+b 66
+b 167
+b 36
+b 50
+b 58
+b 35
+b 1
+b 45
+b 1
+b 70
+b 80
+b 82
+b 80
+b 1
+b 95
+b 11
+b 28
+b 15
+b 205
+b 283
+b 204
+b 1
+b 1
+b 218
+b 217
+b 1
+b 17
+b 30
+b 14
+b 1
+b 189
+b 17
+b 105
+b 112
+b 102
+b 1
+b 109
+b 1
+b 110
+b 54
+b 56
+b 54
+b 1
+b 148
+b 176
+b 175
+b 1
+b 56
+b 58
+b 68
+b 58
+b 1
+b 65
+b 1
+b 39
+b 4
+b 49
+b 61
+b 219
+b 218
+b 1
+b 18
+b 0
+b 93
+b 112
+b 92
+b 1
+b 108
+b 1
+b 13
+b 241
+b 42
+b 81
+b 80
+b 1
+b 22
+b 0
+b 17
+b 16
+b 2
+b 56
+b 27
+b 132
+b 140
+b 7
+b 9
+b 11
+b 17
+b 16
+b 1
+b 5
+b 7
+b 139
+b 136
+b 1
+b 32
+b 16
+b 15
+b 1
+b 32
+b 30
+b 1
+b 60
+b 62
+b 64
+b 57
+b 1
+b 6
+b 72
+b 74
+b 76
+b 78
+b 13
+b 15
+b 17
+b 2
+b 4
+b 6
+b 2
+b 1
+b 156
+b 154
+b 1
+b 10
+b 7
+b 5
+b 1
+b 213
+b 212
+b 1
+b 117
+b 114
+b 1
+b 9
+b 19
+b 21
+b 23
+b 25
+b 16
+b 1
+b 23
+b 1
+b 38
+b 40
+b 42
+b 40
+b 1
+b 58
+b 60
+b 22
+b 21
+b 28
+b 3
+b 5
+b 5
+b 1
+b 12
+b 10
+b 1
+b 19
+b 0
+b 2
+b 97
+b 99
+b 97
+b 1
+b 57
+b 97
+b 8
+b 35
+b 37
+b 39
+b 41
+b 102
+b 0
+b 2
+b 32
+b 30
+b 1
+b 72
+b 74
+b 11
+b 206
+b 206
+b 1
+b 30
+b 29
+b 1
+b 72
+b 93
+b 71
+b 1
+b 97
+b 161
+b 9
+b 2
+b 5
+b 7
+b 21
+b 20
+b 1
+b 15
+b 3
+b 5
+b 7
+b 17
+b 73
+b 75
+b 77
+b 79
+b 73
+b 1
+b 128
+b 125
+b 1
+b 105
+b 113
+b 103
+b 1
+b 84
+b 86
+b 56
+b 55
+b 1
+b 61
+b 73
+b 72
+b 1
+b 49
+b 2
+b 4
+b 6
+b 8
+b 220
+b 222
+b 53
+b 52
+b 1
+b 578
+b 593
+b 139
+b 141
+b 152
+b 151
+b 1
+b 165
+b 164
+b 1
+b 27
+b 29
+b 22
+b 153
+b 325
+b 119
+b 18
+b 17
+b 1
+b 20
+b 28
+b 19
+b 1
+b 4
+b 33
+b 20
+b 3
+b 142
+b 144
+b 146
+b 148
+b 144
+b 1
+b 1038
+b 27
+b 4
+b 6
+b 25
+b 4
+b 1
+b 39
+b 57
+b 38
+b 1
+b 53
+b 1
+b 30
+b 60
+b 65
+b 59
+b 1
+b 28
+b 100
+b 44
+b 59
+b 10
+b 15
+b 41
+b 69
+b 14
+b 98
+b 119
+b 131
+b 38
+b 26
+b 28
+b 9
+b 11
+b 22
+b 21
+b 1
+b 72
+b 84
+b 100
+b 83
+b 1
+b 52
+b 59
+b 90
+b 51
+b 1
+b 76
+b 84
+b 99
+b 21
+b 23
+b 21
+b 1
+b 52
+b 72
+b 32
+b 34
+b 36
+b 32
+b 1
+b 3
+b 5
+b 7
+b 125
+b 122
+b 1
+b 101
+b 103
+b 98
+b 1
+b 83
+b 7
+b 4
+b 1
+b 0
+b 8
+b 0
+b 1
+b 7
+b 5
+b 1
+b 4
+b 53
+b 52
+b 1
+b 37
+b 45
+b 19
+b 18
+b 1
+b 49
+b 47
+b 1
+b 8
+b 22
+b 22
+b 1
+b 2
+b 9
+b 28
+b 186
+b 188
+b 195
+b 194
+b 1
+b 13
+b 27
+b 14
+b 16
+b 1
+b 19
+b 21
+b 17
+b 16
+b 1
+b 96
+b 114
+b 116
+b 114
+b 1
+b 46
+b 67
+b 76
+b 66
+b 1
+b 17
+b 27
+b 56
+b 26
+b 1
+b 52
+b 1
+b 20
+b 22
+b 89
+b 86
+b 1
+b 4
+b 21
+b 120
+b 117
+b 1
+b 268
+b 265
+b 1
+b 281
+b 298
+b 300
+b 280
+b 1
+b 74
+b 53
+b 140
+b 142
+b 144
+b 146
+b 140
+b 1
+b 38
+b 36
+b 1
+b 0
+b 2
+b 10
+b 9
+b 1
+b 283
+b 64
+b 202
+b 144
+b 141
+b 1
+b 5
+b 3
+b 1
+b 167
+b 3
+b 302
+b 8
+b 60
+b 7
+b 5
+b 1
+b 116
+b 113
+b 1
+b 82
+b 81
+b 1
+b 2
+b 31
+b 41
+b 40
+b 1
+b 8
+b 6
+b 1
+b 302
+b 312
+b 319
+b 300
+b 1
+b 286
+b 291
+b 293
+b 12
+b 28
+b 30
+b 11
+b 1
+b 266
+b 268
+b 270
+b 272
+b 157
+b 166
+b 156
+b 1
+b 8
+b 5
+b 1
+b 1
+b 39
+b 38
+b 1
+b 71
+b 76
+b 117
+b 117
+b 1
+b 19
+b 17
+b 1
+b 161
+b 158
+b 1
+b 23
+b 23
+b 1
+b 14
+b 19
+b 21
+b 38
+b 38
+b 1
+b 22
+b 46
+b 45
+b 1
+b 17
+b 25
+b 24
+b 1
+b 89
+b 88
+b 87
+b 1
+b 192
+b 197
+b 41
+b 38
+b 1
+b 12
+b 213
+b 210
+b 1
+b 25
+b 27
+b 133
+b 135
+b 137
+b 139
+b 10
+b 31
+b 33
+b 35
+b 31
+b 1
+b 20
+b 38
+b 151
+b 19
+b 1
+b 33
+b 1
+b 41
+b 43
+b 182
+b 184
+b 87
+b 2
+b 188
+b 196
+b 195
+b 1
+b 39
+b 20
+b 135
+b 134
+b 1
+b 163
+b 161
+b 1
+b 47
+b 49
+b 51
+b 44
+b 1
+b 189
+b 205
+b 188
+b 1
+b 200
+b 1
+b 111
+b 125
+b 206
+b 222
+b 224
+b 226
+b 203
+b 1
+b 224
+b 1
+b 105
+b 107
+b 109
+b 111
+b 107
+b 1
+b 198
+b 209
+b 211
+b 197
+b 1
+b 120
+b 122
+b 124
+b 126
+b 120
+b 1
+b 247
+b 12
+b 14
+b 34
+b 48
+b 78
+b 77
+b 1
+b 7
+b 1
+b 12
+b 11
+b 1
+b 81
+b 88
+b 90
+b 80
+b 1
+b 144
+b 152
+b 141
+b 1
+b 150
+b 1
+b 89
+b 3
+b 62
+b 71
+b 60
+b 1
+b 68
+b 1
+b 11
+b 13
+b 39
+b 38
+b 1
+b 21
+b 23
+b 33
+b 21
+b 1
+b 86
+b 1
+b 12
+b 28
+b 42
+b 41
+b 1
+b 198
+b 207
+b 209
+b 207
+b 1
+b 250
+b 302
+b 249
+b 1
+b 297
+b 1
+b 7
+b 14
+b 16
+b 18
+b 20
+b 137
+b 139
+b 141
+b 143
+b 30
+b 7
+b 26
+b 36
+b 96
+b 98
+b 93
+b 1
+b 57
+b 55
+b 1
+b 9
+b 21
+b 23
+b 21
+b 1
+b 4
+b 43
+b 1
+b 0
+b 1
+b 48
+b 46
+b 1
+b 23
+b 21
+b 1
+b 132
+b 134
+b 134
+b 1
+b 47
+b 44
+b 1
+b 189
+b 178
+b 101
+b 100
+b 1
+b 3
+b 0
+b 2
+b 66
+b 78
+b 144
+b 63
+b 1
+b 139
+b 1
+b 28
+b 30
+b 32
+b 28
+b 1
+b 80
+b 82
+b 84
+b 82
+b 1
+b 39
+b 47
+b 67
+b 46
+b 1
+b 170
+b 194
+b 215
+b 168
+b 1
+b 212
+b 1
+b 237
+b 234
+b 1
+b 10
+b 9
+b 1
+b 26
+b 37
+b 0
+b 27
+b 41
+b 18
+b 60
+b 62
+b 17
+b 1
+b 5
+b 36
+b 38
+b 2
+b 1
+b 31
+b 1
+b 19
+b 21
+b 23
+b 25
+b 23
+b 1
+b 130
+b 132
+b 127
+b 1
+b 45
+b 42
+b 1
+b 42
+b 49
+b 3
+b 26
+b 35
+b 25
+b 1
+b 3
+b 5
+b 7
+b 3
+b 1
+b 11
+b 18
+b 27
+b 26
+b 1
+b 127
+b 76
+b 1
+b 17
+b 92
+b 91
+b 1
+b 1
+b 7
+b 35
+b 42
+b 41
+b 1
+b 57
+b 13
+b 3
+b 18
+b 20
+b 22
+b 22
+b 1
+b 2
+b 2
+b 1
+b 3
+b 2
+b 1
+b 481
+b 480
+b 1
+b 4
+b 13
+b 15
+b 78
+b 13
+b 3
+b 9
+b 1
+b 12
+b 107
+b 35
+b 37
+b 239
+b 241
+b 18
+b 56
+b 58
+b 74
+b 56
+b 1
+b 62
+b 64
+b 109
+b 108
+b 1
+b 0
+b 119
+b 138
+b 118
+b 1
+b 39
+b 30
+b 44
+b 76
+b 86
+b 88
+b 75
+b 1
+b 20
+b 22
+b 24
+b 20
+b 1
+b 23
+b 18
+b 91
+b 14
+b 13
+b 1
+b 64
+b 2
+b 103
+b 105
+b 107
+b 105
+b 1
+b 20
+b 14
+b 181
+b 192
+b 180
+b 1
+b 187
+b 1
+b 18
+b 223
+b 6
+b 16
+b 37
+b 39
+b 41
+b 43
+b 37
+b 1
+b 457
+b 459
+b 461
+b 454
+b 1
+b 459
+b 1
+b 72
+b 74
+b 76
+b 74
+b 1
+b 81
+b 113
+b 112
+b 1
+b 25
+b 0
+b 2
+b 31
+b 185
+b 193
+b 182
+b 1
+b 79
+b 77
+b 2
+b 295
+b 292
+b 1
+b 11
+b 8
+b 1
+b 286
+b 331
+b 286
+b 1
+b 117
+b 167
+b 10
+b 37
+b 39
+b 41
+b 37
+b 1
+b 69
+b 68
+b 1
+b 81
+b 94
+b 20
+b 38
+b 40
+b 38
+b 1
+b 43
+b 38
+b 1
+b 2
+b 29
+b 22
+b 31
+b 60
+b 79
+b 57
+b 1
+b 75
+b 1
+b 137
+b 153
+b 155
+b 153
+b 1
+b 52
+b 70
+b 12
+b 11
+b 1
+b 23
+b 3
+b 169
+b 196
+b 19
+b 171
+b 0
+b 121
+b 123
+b 6
+b 5
+b 1
+b 5
+b 24
+b 48
+b 45
+b 1
+b 34
+b 31
+b 1
+b 33
+b 78
+b 83
+b 89
+b 88
+b 1
+b 259
+b 278
+b 65
+b 74
+b 125
+b 64
+b 1
+b 70
+b 1
+b 14
+b 22
+b 140
+b 140
+b 1
+b 11
+b 4
+b 6
+b 8
+b 74
+b 109
+b 86
+b 97
+b 99
+b 97
+b 1
+b 60
+b 93
+b 596
+b 46
+b 76
+b 93
+b 74
+b 1
+b 14
+b 13
+b 1
+b 48
+b 27
+b 55
+b 26
+b 1
+b 23
+b 30
+b 146
+b 1
+b 36
+b 24
+b 29
+b 124
+b 155
+b 44
+b 52
+b 43
+b 1
+b 164
+b 171
+b 170
+b 1
+b 16
+b 32
+b 70
+b 77
+b 45
+b 47
+b 49
+b 119
+b 18
+b 29
+b 539
+b 541
+b 543
+b 539
+b 1
+b 378
+b 377
+b 1
+b 19
+b 25
+b 16
+b 1
+b 20
+b 42
+b 41
+b 1
+b 39
+b 207
+b 221
+b 207
+b 1
+b 218
+b 1
+b 65
+b 67
+b 69
+b 71
+b 19
+b 18
+b 1
+b 135
+b 187
+b 237
+b 234
+b 1
+b 3
+b 5
+b 7
+b 0
+b 1
+b 61
+b 63
+b 65
+b 67
+b 45
+b 65
+b 44
+b 1
+b 61
+b 1
+b 318
+b 90
+b 659
+b 658
+b 1
+b 11
+b 41
+b 22
+b 24
+b 26
+b 28
+b 30
+b 24
+b 1
+b 74
+b 88
+b 90
+b 104
+b 112
+b 114
+b 102
+b 1
+b 112
+b 1
+b 43
+b 42
+b 1
+b 53
+b 55
+b 50
+b 1
+b 1019
+b 31
+b 30
+b 1
+b 1
+b 33
+b 35
+b 41
+b 0
+b 2
+b 0
+b 1
+b 24
+b 34
+b 21
+b 1
+b 97
+b 119
+b 126
+b 96
+b 1
+b 114
+b 1
+b 45
+b 96
+b 616
+b 613
+b 1
+b 212
+b 40
+b 39
+b 1
+b 8
+b 31
+b 30
+b 1
+b 1
+b 93
+b 204
+b 45
+b 59
+b 253
+b 255
+b 257
+b 122
+b 3
+b 18
+b 3
+b 3
+b 1
+b 135
+b 143
+b 132
+b 1
+b 141
+b 1
+b 302
+b 304
+b 33
+b 32
+b 1
+b 3
+b 0
+b 1
+b 126
+b 133
+b 132
+b 1
+b 170
+b 172
+b 174
+b 172
+b 1
+b 36
+b 38
+b 33
+b 1
+b 50
+b 18
+b 136
+b 13
+b 0
+b 97
+b 99
+b 5
+b 17
+b 35
+b 45
+b 34
+b 1
+b 232
+b 234
+b 236
+b 238
+b 238
+b 1
+b 49
+b 48
+b 1
+b 11
+b 25
+b 223
+b 224
+b 91
+b 105
+b 74
+b 76
+b 55
+b 52
+b 1
+b 126
+b 123
+b 1
+b 32
+b 31
+b 1
+b 15
+b 29
+b 605
+b 607
+b 8
+b 7
+b 1
+b 160
+b 143
+b 0
+b 39
+b 55
+b 55
+b 1
+b 91
+b 93
+b 36
+b 12
+b 11
+b 1
+b 6
+b 0
+b 25
+b 123
+b 18
+b 14
+b 11
+b 1
+b 32
+b 34
+b 19
+b 237
+b 5
+b 17
+b 37
+b 47
+b 85
+b 46
+b 1
+b 16
+b 23
+b 31
+b 30
+b 1
+b 34
+b 159
+b 15
+b 21
+b 44
+b 20
+b 1
+b 92
+b 89
+b 1
+b 4
+b 3
+b 1
+b 56
+b 16
+b 15
+b 1
+b 0
+b 218
+b 49
+b 51
+b 49
+b 1
+b 222
+b 224
+b 222
+b 1
+b 124
+b 153
+b 306
+b 303
+b 1
+b 45
+b 42
+b 1
+b 63
+b 62
+b 1
+b 42
+b 89
+b 11
+b 18
+b 35
+b 66
+b 74
+b 154
+b 167
+b 166
+b 1
+b 23
+b 22
+b 1
+b 18
+b 29
+b 46
+b 48
+b 46
+b 1
+b 88
+b 318
+b 332
+b 8
+b 10
+b 12
+b 14
+b 12
+b 1
+b 14
+b 38
+b 40
+b 38
+b 1
+b 112
+b 114
+b 188
+b 185
+b 1
+b 2
+b 12
+b 19
+b 11
+b 1
+b 8
+b 18
+b 97
+b 99
+b 137
+b 136
+b 1
+b 123
+b 120
+b 1
+b 6
+b 0
+b 8
+b 24
+b 26
+b 7
+b 1
+b 170
+b 178
+b 107
+b 251
+b 295
+b 250
+b 1
+b 290
+b 1
+b 258
+b 269
+b 255
+b 1
+b 266
+b 1
+b 211
+b 213
+b 215
+b 217
+b 211
+b 1
+b 136
+b 135
+b 1
+b 185
+b 194
+b 193
+b 1
+b 23
+b 25
+b 27
+b 29
+b 10
+b 26
+b 108
+b 110
+b 112
+b 114
+b 112
+b 1
+b 70
+b 69
+b 1
+b 64
+b 115
+b 114
+b 1
+b 8
+b 10
+b 12
+b 129
+b 131
+b 133
+b 131
+b 1
+b 87
+b 89
+b 99
+b 98
+b 1
+b 492
+b 95
+b 9
+b 22
+b 38
+b 40
+b 51
+b 35
+b 1
+b 48
+b 1
+b 40
+b 48
+b 50
+b 38
+b 1
+b 48
+b 1
+b 57
+b 59
+b 61
+b 63
+b 55
+b 57
+b 59
+b 173
+b 183
+b 181
+b 1
+b 206
+b 41
+b 60
+b 62
+b 64
+b 66
+b 630
+b 646
+b 667
+b 629
+b 1
+b 194
+b 196
+b 198
+b 124
+b 126
+b 128
+b 124
+b 1
+b 6
+b 24
+b 19
+b 107
+b 117
+b 106
+b 1
+b 113
+b 1
+b 32
+b 30
+b 1
+b 5
+b 7
+b 6
+b 2
+b 55
+b 65
+b 107
+b 112
+b 5
+b 4
+b 1
+b 157
+b 15
+b 17
+b 170
+b 172
+b 170
+b 1
+b 15
+b 69
+b 71
+b 73
+b 69
+b 1
+b 28
+b 26
+b 1
+b 7
+b 342
+b 344
+b 352
+b 342
+b 1
+b 64
+b 277
+b 28
+b 3
+b 5
+b 7
+b 160
+b 169
+b 92
+b 97
+b 0
+b 2
+b 6
+b 30
+b 29
+b 1
+b 1
+b 57
+b 56
+b 1
+b 14
+b 35
+b 80
+b 82
+b 12
+b 19
+b 787
+b 70
+b 69
+b 1
+b 59
+b 133
+b 135
+b 5
+b 11
+b 13
+b 128
+b 302
+b 304
+b 309
+b 153
+b 177
+b 201
+b 223
+b 7
+b 26
+b 7
+b 1
+b 22
+b 1
+b 119
+b 169
+b 59
+b 61
+b 56
+b 1
+b 59
+b 1
+b 10
+b 3
+b 204
+b 1
+b 8
+b 58
+b 66
+b 68
+b 56
+b 1
+b 66
+b 1
+b 264
+b 13
+b 50
+b 394
+b 396
+b 398
+b 170
+b 172
+b 174
+b 71
+b 106
+b 68
+b 1
+b 15
+b 14
+b 1
+b 92
+b 96
+b 94
+b 1
+b 27
+b 24
+b 1
+b 25
+b 24
+b 1
+b 3
+b 0
+b 1
+b 211
+b 84
+b 86
+b 161
+b 163
+b 205
+b 209
+b 158
+b 1
+b 200
+b 1
+b 49
+b 1
+b 15
+b 0
+b 1
+b 10
+b 1
+b 6
+b 8
+b 25
+b 66
+b 22
+b 25
+b 289
+b 288
+b 1
+b 0
+b 133
+b 132
+b 1
+b 8
+b 10
+b 85
+b 87
+b 89
+b 68
+b 111
+b 113
+b 67
+b 1
+b 146
+b 148
+b 162
+b 161
+b 1
+b 30
+b 38
+b 45
+b 30
+b 51
+b 74
+b 76
+b 328
+b 98
+b 136
+b 97
+b 1
+b 276
+b 297
+b 112
+b 111
+b 1
+b 25
+b 0
+b 13
+b 3
+b 47
+b 47
+b 1
+b 200
+b 199
+b 1
+b 13
+b 15
+b 17
+b 15
+b 1
+b 102
+b 195
+b 43
+b 51
+b 50
+b 1
+b 470
+b 476
+b 501
+b 501
+b 1
+b 468
+b 1
+b 267
+b 3
+b 5
+b 60
+b 153
+b 152
+b 1
+b 39
+b 36
+b 1
+b 208
+b 210
+b 6
+b 17
+b 118
+b 120
+b 118
+b 1
+b 136
+b 146
+b 146
+b 6
+b 19
+b 5
+b 1
+b 15
+b 1
+b 52
+b 80
+b 49
+b 1
+b 13
+b 10
+b 1
+b 29
+b 54
+b 89
+b 98
+b 125
+b 88
+b 1
+b 94
+b 1
+b 38
+b 35
+b 1
+b 1
+b 54
+b 53
+b 1
+b 53
+b 60
+b 62
+b 64
+b 72
+b 62
+b 1
+b 46
+b 57
+b 45
+b 1
+b 0
+b 56
+b 29
+b 59
+b 67
+b 22
+b 3
+b 12
+b 5
+b 7
+b 12
+b 40
+b 153
+b 170
+b 152
+b 1
+b 206
+b 231
+b 20
+b 22
+b 24
+b 26
+b 24
+b 1
+b 43
+b 42
+b 1
+b 51
+b 51
+b 49
+b 1
+b 110
+b 17
+b 16
+b 13
+b 1
+b 1
+b 0
+b 1
+b 81
+b 79
+b 1
+b 16
+b 18
+b 13
+b 1
+b 14
+b 12
+b 1
+b 3
+b 3
+b 1
+b 20
+b 27
+b 59
+b 61
+b 63
+b 65
+b 362
+b 384
+b 386
+b 361
+b 1
+b 6
+b 8
+b 10
+b 6
+b 1
+b 172
+b 174
+b 176
+b 178
+b 176
+b 1
+b 297
+b 338
+b 45
+b 44
+b 1
+b 22
+b 51
+b 21
+b 30
+b 287
+b 297
+b 13
+b 74
+b 145
+b 34
+b 39
+b 31
+b 1
+b 37
+b 1
+b 32
+b 94
+b 104
+b 181
+b 194
+b 178
+b 1
+b 191
+b 1
+b 356
+b 33
+b 41
+b 32
+b 1
+b 113
+b 134
+b 131
+b 1
+b 164
+b 169
+b 171
+b 24
+b 42
+b 23
+b 1
+b 38
+b 1
+b 54
+b 6
+b 8
+b 6
+b 1
+b 217
+b 227
+b 216
+b 1
+b 223
+b 1
+b 243
+b 12
+b 22
+b 21
+b 2
+b 23
+b 20
+b 1
+b 75
+b 2
+b 6
+b 15
+b 5
+b 1
+b 11
+b 1
+b 161
+b 171
+b 36
+b 53
+b 69
+b 67
+b 2
+b 53
+b 1
+b 29
+b 116
+b 46
+b 88
+b 59
+b 67
+b 92
+b 91
+b 1
+b 29
+b 31
+b 39
+b 29
+b 1
+b 274
+b 272
+b 1
+b 42
+b 20
+b 18
+b 1
+b 61
+b 63
+b 18
+b 296
+b 12
+b 14
+b 24
+b 3
+b 1
+b 1
+b 36
+b 14
+b 252
+b 254
+b 78
+b 77
+b 1
+b 91
+b 17
+b 19
+b 386
+b 388
+b 400
+b 399
+b 1
+b 163
+b 163
+b 1
+b 5
+b 3
+b 1
+b 12
+b 14
+b 28
+b 27
+b 1
+b 221
+b 220
+b 1
+b 3
+b 5
+b 5
+b 1
+b 100
+b 37
+b 51
+b 50
+b 1
+b 206
+b 215
+b 214
+b 1
+b 329
+b 8
+b 7
+b 1
+b 10
+b 7
+b 1
+b 73
+b 71
+b 1
+b 114
+b 1
+b 8
+b 169
+b 203
+b 68
+b 70
+b 27
+b 26
+b 1
+b 6
+b 16
+b 211
+b 213
+b 208
+b 1
+b 9
+b 6
+b 1
+b 123
+b 121
+b 1
+b 53
+b 64
+b 31
+b 53
+b 52
+b 1
+b 4
+b 12
+b 2
+b 233
+b 249
+b 233
+b 1
+b 245
+b 1
+b 17
+b 10
+b 9
+b 1
+b 35
+b 22
+b 24
+b 62
+b 6
+b 23
+b 5
+b 1
+b 119
+b 121
+b 123
+b 119
+b 1
+b 195
+b 204
+b 192
+b 1
+b 201
+b 1
+b 287
+b 284
+b 1
+b 2
+b 2
+b 1
+b 74
+b 12
+b 275
+b 32
+b 31
+b 1
+b 4
+b 65
+b 461
+b 13
+b 0
+b 2
+b 48
+b 6
+b 70
+b 72
+b 74
+b 76
+b 35
+b 2
+b 52
+b 54
+b 294
+b 293
+b 1
+b 19
+b 18
+b 1
+b 170
+b 0
+b 2
+b 22
+b 24
+b 22
+b 1
+b 35
+b 15
+b 33
+b 35
+b 14
+b 1
+b 81
+b 79
+b 1
+b 18
+b 20
+b 110
+b 14
+b 51
+b 50
+b 1
+b 29
+b 31
+b 19
+b 21
+b 29
+b 19
+b 1
+b 111
+b 113
+b 115
+b 38
+b 35
+b 1
+b 23
+b 26
+b 28
+b 30
+b 26
+b 1
+b 8
+b 10
+b 10
+b 1
+b 4
+b 25
+b 2
+b 12
+b 53
+b 28
+b 145
+b 152
+b 143
+b 1
+b 10
+b 12
+b 41
+b 40
+b 1
+b 29
+b 41
+b 77
+b 139
+b 76
+b 1
+b 54
+b 29
+b 27
+b 1
+b 20
+b 20
+b 1
+b 42
+b 41
+b 1
+b 242
+b 22
+b 82
+b 81
+b 1
+b 90
+b 0
+b 2
+b 15
+b 209
+b 218
+b 207
+b 1
+b 330
+b 339
+b 24
+b 14
+b 13
+b 1
+b 38
+b 37
+b 1
+b 6
+b 5
+b 1
+b 115
+b 7
+b 77
+b 79
+b 97
+b 107
+b 96
+b 1
+b 103
+b 1
+b 29
+b 37
+b 24
+b 26
+b 9
+b 32
+b 34
+b 44
+b 127
+b 129
+b 131
+b 133
+b 127
+b 1
+b 37
+b 39
+b 41
+b 141
+b 15
+b 26
+b 73
+b 19
+b 46
+b 54
+b 53
+b 1
+b 127
+b 126
+b 1
+b 67
+b 93
+b 1
+b 225
+b 7
+b 41
+b 51
+b 49
+b 1
+b 60
+b 89
+b 6
+b 5
+b 1
+b 11
+b 1
+b 66
+b 65
+b 1
+b 178
+b 183
+b 177
+b 1
+b 54
+b 3
+b 556
+b 566
+b 50
+b 152
+b 150
+b 1
+b 48
+b 114
+b 1
+b 131
+b 50
+b 1
+b 115
+b 143
+b 145
+b 143
+b 1
+b 126
+b 132
+b 11
+b 124
+b 47
+b 46
+b 1
+b 44
+b 43
+b 1
+b 12
+b 14
+b 65
+b 62
+b 1
+b 52
+b 49
+b 1
+b 16
+b 29
+b 43
+b 4
+b 1
+b 10
+b 32
+b 9
+b 1
+b 28
+b 1
+b 3
+b 234
+b 236
+b 81
+b 80
+b 1
+b 79
+b 134
+b 65
+b 62
+b 1
+b 27
+b 24
+b 1
+b 18
+b 20
+b 75
+b 74
+b 1
+b 2
+b 4
+b 12
+b 290
+b 313
+b 13
+b 36
+b 22
+b 30
+b 32
+b 272
+b 306
+b 308
+b 271
+b 1
+b 59
+b 61
+b 30
+b 49
+b 6
+b 5
+b 1
+b 20
+b 28
+b 35
+b 19
+b 1
+b 4
+b 6
+b 8
+b 4
+b 1
+b 97
+b 110
+b 109
+b 1
+b 94
+b 107
+b 109
+b 126
+b 2
+b 19
+b 18
+b 17
+b 1
+b 5
+b 7
+b 7
+b 1
+b 39
+b 41
+b 0
+b 135
+b 153
+b 134
+b 1
+b 148
+b 1
+b 420
+b 431
+b 81
+b 56
+b 87
+b 126
+b 87
+b 1
+b 1
+b 180
+b 182
+b 9
+b 60
+b 21
+b 20
+b 1
+b 8
+b 6
+b 1
+b 3
+b 10
+b 52
+b 226
+b 228
+b 226
+b 1
+b 68
+b 99
+b 101
+b 99
+b 1
+b 173
+b 194
+b 282
+b 170
+b 1
+b 279
+b 1
+b 3
+b 26
+b 28
+b 26
+b 1
+b 56
+b 69
+b 32
+b 39
+b 31
+b 1
+b 298
+b 1
+b 113
+b 145
+b 125
+b 127
+b 30
+b 29
+b 1
+b 86
+b 88
+b 90
+b 82
+b 84
+b 82
+b 1
+b 61
+b 63
+b 72
+b 71
+b 1
+b 162
+b 175
+b 35
+b 37
+b 51
+b 35
+b 1
+b 39
+b 39
+b 1
+b 2
+b 12
+b 14
+b 16
+b 18
+b 41
+b 95
+b 57
+b 3
+b 382
+b 17
+b 37
+b 16
+b 1
+b 33
+b 1
+b 23
+b 201
+b 22
+b 1
+b 7
+b 115
+b 117
+b 119
+b 117
+b 1
+b 376
+b 29
+b 10
+b 19
+b 47
+b 46
+b 1
+b 45
+b 55
+b 53
+b 1
+b 0
+b 5
+b 27
+b 24
+b 3
+b 74
+b 76
+b 78
+b 80
+b 76
+b 1
+b 37
+b 97
+b 14
+b 44
+b 107
+b 109
+b 107
+b 1
+b 40
+b 42
+b 54
+b 40
+b 1
+b 48
+b 55
+b 64
+b 54
+b 1
+b 29
+b 46
+b 66
+b 28
+b 1
+b 42
+b 1
+b 3
+b 26
+b 124
+b 25
+b 10
+b 19
+b 9
+b 8
+b 1
+b 93
+b 108
+b 116
+b 3
+b 21
+b 0
+b 1
+b 161
+b 158
+b 1
+b 151
+b 150
+b 1
+b 7
+b 21
+b 20
+b 1
+b 6
+b 33
+b 57
+b 4
+b 2
+b 15
+b 17
+b 15
+b 1
+b 0
+b 2
+b 125
+b 127
+b 129
+b 119
+b 8
+b 6
+b 27
+b 6
+b 1
+b 23
+b 1
+b 40
+b 42
+b 13
+b 12
+b 1
+b 41
+b 43
+b 45
+b 101
+b 103
+b 105
+b 103
+b 1
+b 44
+b 28
+b 57
+b 55
+b 1
+b 26
+b 28
+b 23
+b 1
+b 224
+b 226
+b 228
+b 195
+b 210
+b 192
+b 1
+b 15
+b 14
+b 2
+b 184
+b 13
+b 263
+b 71
+b 37
+b 62
+b 9
+b 11
+b 1
+b 12
+b 70
+b 67
+b 1
+b 12
+b 184
+b 186
+b 184
+b 1
+b 7
+b 16
+b 15
+b 1
+b 125
+b 161
+b 324
+b 10
+b 65
+b 62
+b 1
+b 26
+b 34
+b 33
+b 1
+b 106
+b 21
+b 118
+b 160
+b 44
+b 62
+b 42
+b 1
+b 8
+b 8
+b 1
+b 16
+b 18
+b 25
+b 36
+b 45
+b 296
+b 2
+b 14
+b 16
+b 18
+b 18
+b 17
+b 1
+b 231
+b 240
+b 238
+b 1
+b 60
+b 62
+b 64
+b 66
+b 60
+b 1
+b 305
+b 398
+b 1
+b 243
+b 245
+b 243
+b 1
+b 134
+b 389
+b 397
+b 72
+b 104
+b 120
+b 71
+b 1
+b 42
+b 84
+b 86
+b 41
+b 1
+b 37
+b 47
+b 36
+b 1
+b 167
+b 175
+b 445
+b 447
+b 449
+b 445
+b 1
+b 6
+b 8
+b 2
+b 76
+b 78
+b 76
+b 1
+b 126
+b 128
+b 130
+b 71
+b 73
+b 88
+b 87
+b 1
+b 152
+b 118
+b 97
+b 103
+b 39
+b 96
+b 77
+b 79
+b 58
+b 57
+b 1
+b 614
+b 654
+b 656
+b 41
+b 50
+b 57
+b 17
+b 57
+b 182
+b 200
+b 199
+b 1
+b 23
+b 189
+b 202
+b 201
+b 1
+b 142
+b 141
+b 1
+b 22
+b 29
+b 19
+b 1
+b 26
+b 1
+b 63
+b 65
+b 67
+b 60
+b 1
+b 65
+b 1
+b 149
+b 151
+b 153
+b 155
+b 151
+b 1
+b 78
+b 80
+b 82
+b 81
+b 80
+b 1
+b 27
+b 29
+b 26
+b 1
+b 15
+b 12
+b 1
+b 113
+b 115
+b 6
+b 8
+b 21
+b 211
+b 3
+b 9
+b 2
+b 2
+b 5
+b 1
+b 122
+b 0
+b 2
+b 8
+b 201
+b 203
+b 205
+b 207
+b 177
+b 179
+b 186
+b 185
+b 1
+b 3
+b 8
+b 187
+b 189
+b 2
+b 44
+b 28
+b 44
+b 101
+b 100
+b 1
+b 31
+b 33
+b 41
+b 99
+b 98
+b 1
+b 77
+b 78
+b 80
+b 76
+b 1
+b 23
+b 6
+b 8
+b 81
+b 115
+b 80
+b 1
+b 119
+b 128
+b 106
+b 105
+b 1
+b 66
+b 64
+b 1
+b 3
+b 1
+b 1
+b 0
+b 2
+b 3
+b 0
+b 2
+b 6
+b 111
+b 121
+b 120
+b 2
+b 10
+b 10
+b 1
+b 519
+b 530
+b 85
+b 180
+b 137
+b 151
+b 26
+b 3
+b 5
+b 7
+b 9
+b 7
+b 52
+b 6
+b 1
+b 94
+b 174
+b 183
+b 185
+b 183
+b 1
+b 199
+b 207
+b 53
+b 66
+b 77
+b 65
+b 1
+b 73
+b 1
+b 21
+b 23
+b 25
+b 25
+b 1
+b 204
+b 206
+b 208
+b 206
+b 1
+b 47
+b 49
+b 47
+b 1
+b 0
+b 2
+b 1
+b 17
+b 29
+b 519
+b 535
+b 518
+b 2
+b 17
+b 144
+b 146
+b 11
+b 10
+b 1
+b 362
+b 374
+b 373
+b 1
+b 80
+b 77
+b 1
+b 42
+b 49
+b 51
+b 267
+b 288
+b 290
+b 288
+b 1
+b 12
+b 126
+b 89
+b 73
+b 138
+b 150
+b 137
+b 1
+b 34
+b 211
+b 225
+b 227
+b 210
+b 1
+b 13
+b 34
+b 12
+b 1
+b 30
+b 1
+b 14
+b 81
+b 11
+b 1
+b 76
+b 1
+b 11
+b 61
+b 60
+b 1
+b 31
+b 16
+b 13
+b 1
+b 8
+b 16
+b 5
+b 1
+b 14
+b 1
+b 15
+b 46
+b 69
+b 71
+b 83
+b 187
+b 201
+b 206
+b 200
+b 1
+b 202
+b 1
+b 106
+b 105
+b 1
+b 90
+b 87
+b 1
+b 69
+b 97
+b 99
+b 67
+b 1
+b 52
+b 54
+b 52
+b 1
+b 0
+b 208
+b 206
+b 1
+b 3
+b 100
+b 159
+b 173
+b 175
+b 177
+b 179
+b 181
+b 173
+b 1
+b 109
+b 144
+b 8
+b 17
+b 27
+b 16
+b 1
+b 375
+b 377
+b 379
+b 25
+b 38
+b 23
+b 1
+b 35
+b 1
+b 19
+b 36
+b 38
+b 19
+b 1
+b 6
+b 8
+b 6
+b 1
+b 24
+b 52
+b 4
+b 19
+b 265
+b 264
+b 1
+b 3
+b 75
+b 0
+b 1
+b 40
+b 39
+b 1
+b 49
+b 51
+b 161
+b 163
+b 190
+b 161
+b 1
+b 139
+b 147
+b 192
+b 194
+b 196
+b 194
+b 1
+b 25
+b 7
+b 6
+b 1
+b 15
+b 14
+b 5
+b 42
+b 55
+b 165
+b 30
+b 79
+b 141
+b 77
+b 1
+b 140
+b 1
+b 107
+b 6
+b 5
+b 1
+b 767
+b 769
+b 771
+b 773
+b 769
+b 1
+b 24
+b 23
+b 1
+b 173
+b 197
+b 197
+b 1
+b 22
+b 34
+b 33
+b 1
+b 53
+b 167
+b 32
+b 80
+b 102
+b 113
+b 159
+b 23
+b 44
+b 46
+b 295
+b 302
+b 304
+b 294
+b 1
+b 79
+b 78
+b 1
+b 12
+b 14
+b 51
+b 20
+b 23
+b 25
+b 34
+b 23
+b 1
+b 63
+b 60
+b 1
+b 52
+b 52
+b 1
+b 126
+b 123
+b 1
+b 465
+b 467
+b 463
+b 1
+b 118
+b 120
+b 122
+b 124
+b 126
+b 118
+b 1
+b 12
+b 13
+b 19
+b 11
+b 1
+b 40
+b 39
+b 1
+b 3
+b 248
+b 247
+b 1
+b 193
+b 64
+b 112
+b 3
+b 4
+b 6
+b 53
+b 82
+b 84
+b 52
+b 1
+b 113
+b 115
+b 166
+b 113
+b 1
+b 26
+b 35
+b 34
+b 1
+b 10
+b 480
+b 493
+b 183
+b 192
+b 115
+b 2
+b 4
+b 32
+b 4
+b 1
+b 28
+b 1
+b 217
+b 225
+b 216
+b 1
+b 221
+b 1
+b 25
+b 26
+b 3
+b 0
+b 1
+b 132
+b 134
+b 136
+b 132
+b 1
+b 153
+b 155
+b 168
+b 155
+b 1
+b 164
+b 1
+b 214
+b 41
+b 90
+b 104
+b 27
+b 26
+b 1
+b 697
+b 21
+b 19
+b 1
+b 0
+b 7
+b 20
+b 27
+b 93
+b 92
+b 1
+b 89
+b 91
+b 0
+b 2
+b 9
+b 11
+b 9
+b 38
+b 37
+b 1
+b 13
+b 20
+b 18
+b 1
+b 127
+b 34
+b 82
+b 84
+b 80
+b 1
+b 77
+b 140
+b 139
+b 1
+b 8
+b 6
+b 1
+b 19
+b 293
+b 305
+b 20
+b 22
+b 85
+b 45
+b 47
+b 80
+b 79
+b 1
+b 40
+b 45
+b 105
+b 124
+b 137
+b 123
+b 1
+b 133
+b 1
+b 16
+b 13
+b 1
+b 19
+b 131
+b 133
+b 135
+b 1
+b 0
+b 1
+b 184
+b 954
+b 40
+b 63
+b 61
+b 2
+b 83
+b 49
+b 46
+b 1
+b 38
+b 36
+b 1
+b 170
+b 168
+b 1
+b 4
+b 70
+b 72
+b 70
+b 1
+b 55
+b 45
+b 1
+b 10
+b 74
+b 71
+b 1
+b 109
+b 36
+b 38
+b 12
+b 30
+b 29
+b 1
+b 0
+b 2
+b 119
+b 0
+b 1
+b 51
+b 77
+b 82
+b 84
+b 86
+b 79
+b 1
+b 69
+b 71
+b 73
+b 20
+b 96
+b 51
+b 67
+b 212
+b 32
+b 51
+b 29
+b 1
+b 66
+b 63
+b 1
+b 18
+b 20
+b 20
+b 1
+b 27
+b 39
+b 78
+b 77
+b 1
+b 76
+b 77
+b 79
+b 76
+b 2
+b 34
+b 34
+b 1
+b 29
+b 132
+b 131
+b 1
+b 255
+b 252
+b 1
+b 49
+b 51
+b 60
+b 22
+b 24
+b 31
+b 3
+b 24
+b 41
+b 57
+b 39
+b 1
+b 55
+b 54
+b 1
+b 49
+b 62
+b 64
+b 48
+b 1
+b 33
+b 30
+b 28
+b 1
+b 35
+b 33
+b 1
+b 287
+b 312
+b 314
+b 279
+b 316
+b 278
+b 1
+b 611
+b 609
+b 1
+b 20
+b 340
+b 109
+b 78
+b 80
+b 108
+b 109
+b 111
+b 113
+b 107
+b 1
+b 94
+b 103
+b 56
+b 55
+b 1
+b 13
+b 31
+b 160
+b 166
+b 168
+b 20
+b 40
+b 63
+b 60
+b 59
+b 1
+b 21
+b 23
+b 24
+b 24
+b 1
+b 52
+b 1
+b 0
+b 1
+b 160
+b 162
+b 164
+b 166
+b 166
+b 1
+b 157
+b 1
+b 89
+b 96
+b 88
+b 1
+b 92
+b 1
+b 95
+b 14
+b 22
+b 74
+b 107
+b 167
+b 36
+b 38
+b 41
+b 43
+b 51
+b 41
+b 1
+b 53
+b 55
+b 57
+b 67
+b 65
+b 2
+b 102
+b 104
+b 106
+b 102
+b 1
+b 7
+b 9
+b 11
+b 7
+b 1
+b 163
+b 5
+b 64
+b 63
+b 1
+b 238
+b 253
+b 254
+b 272
+b 252
+b 1
+b 237
+b 1
+b 3
+b 3
+b 229
+b 231
+b 233
+b 226
+b 1
+b 1
+b 0
+b 1
+b 75
+b 74
+b 1
+b 21
+b 23
+b 31
+b 33
+b 35
+b 31
+b 1
+b 41
+b 43
+b 75
+b 41
+b 1
+b 326
+b 325
+b 1
+b 142
+b 134
+b 144
+b 103
+b 65
+b 67
+b 493
+b 495
+b 590
+b 588
+b 1
+b 45
+b 47
+b 49
+b 51
+b 45
+b 1
+b 186
+b 195
+b 48
+b 85
+b 84
+b 1
+b 2
+b 19
+b 21
+b 198
+b 19
+b 1
+b 15
+b 23
+b 28
+b 4
+b 6
+b 44
+b 41
+b 1
+b 4
+b 2
+b 1
+b 47
+b 44
+b 1
+b 186
+b 188
+b 190
+b 192
+b 186
+b 1
+b 397
+b 406
+b 394
+b 1
+b 1
+b 0
+b 1
+b 26
+b 28
+b 26
+b 1
+b 15
+b 107
+b 167
+b 53
+b 68
+b 28
+b 30
+b 76
+b 95
+b 147
+b 147
+b 1
+b 173
+b 248
+b 255
+b 10
+b 9
+b 1
+b 149
+b 5
+b 103
+b 18
+b 20
+b 18
+b 1
+b 149
+b 148
+b 1
+b 6
+b 17
+b 4
+b 1
+b 61
+b 26
+b 136
+b 138
+b 140
+b 142
+b 30
+b 17
+b 5
+b 16
+b 15
+b 1
+b 96
+b 192
+b 112
+b 111
+b 1
+b 5
+b 13
+b 12
+b 1
+b 46
+b 8
+b 7
+b 1
+b 0
+b 38
+b 161
+b 163
+b 158
+b 1
+b 47
+b 85
+b 84
+b 86
+b 88
+b 90
+b 84
+b 1
+b 16
+b 18
+b 13
+b 1
+b 26
+b 25
+b 1
+b 40
+b 30
+b 30
+b 1
+b 110
+b 112
+b 6
+b 92
+b 8
+b 145
+b 4
+b 66
+b 0
+b 2
+b 24
+b 22
+b 1
+b 69
+b 25
+b 17
+b 16
+b 1
+b 20
+b 22
+b 24
+b 17
+b 1
+b 90
+b 10
+b 12
+b 10
+b 1
+b 44
+b 6
+b 39
+b 38
+b 1
+b 84
+b 28
+b 27
+b 1
+b 0
+b 106
+b 73
+b 158
+b 200
+b 202
+b 200
+b 1
+b 56
+b 63
+b 55
+b 1
+b 3
+b 1
+b 1
+b 3
+b 3
+b 1
+b 115
+b 67
+b 66
+b 1
+b 95
+b 6
+b 1
+b 15
+b 34
+b 81
+b 266
+b 264
+b 1
+b 12
+b 14
+b 15
+b 317
+b 319
+b 341
+b 340
+b 1
+b 224
+b 4
+b 6
+b 36
+b 58
+b 1
+b 89
+b 4
+b 3
+b 1
+b 31
+b 97
+b 4
+b 10
+b 0
+b 318
+b 328
+b 330
+b 18
+b 20
+b 22
+b 24
+b 15
+b 1
+b 22
+b 1
+b 63
+b 65
+b 50
+b 156
+b 5
+b 99
+b 61
+b 109
+b 108
+b 1
+b 12
+b 24
+b 3
+b 11
+b 11
+b 1
+b 0
+b 1
+b 15
+b 24
+b 22
+b 24
+b 38
+b 36
+b 2
+b 24
+b 1
+b 61
+b 69
+b 143
+b 34
+b 36
+b 30
+b 32
+b 1
+b 42
+b 54
+b 52
+b 1
+b 75
+b 74
+b 1
+b 5
+b 26
+b 33
+b 35
+b 37
+b 35
+b 1
+b 78
+b 80
+b 90
+b 154
+b 167
+b 169
+b 170
+b 183
+b 152
+b 1
+b 168
+b 1
+b 56
+b 63
+b 44
+b 44
+b 1
+b 90
+b 1
+b 0
+b 1
+b 20
+b 19
+b 2
+b 7
+b 6
+b 1
+b 19
+b 135
+b 8
+b 15
+b 7
+b 1
+b 11
+b 1
+b 21
+b 59
+b 0
+b 2
+b 186
+b 292
+b 185
+b 1
+b 289
+b 1
+b 1
+b 30
+b 32
+b 32
+b 37
+b 39
+b 41
+b 39
+b 1
+b 61
+b 19
+b 16
+b 1
+b 23
+b 28
+b 4
+b 74
+b 113
+b 67
+b 1
+b 0
+b 140
+b 48
+b 14
+b 13
+b 1
+b 4
+b 6
+b 6
+b 1
+b 29
+b 31
+b 49
+b 48
+b 1
+b 64
+b 76
+b 84
+b 228
+b 270
+b 271
+b 280
+b 270
+b 1
+b 277
+b 1
+b 94
+b 136
+b 91
+b 1
+b 133
+b 1
+b 4
+b 30
+b 54
+b 16
+b 16
+b 1
+b 7
+b 4
+b 1
+b 34
+b 33
+b 35
+b 16
+b 13
+b 15
+b 2
+b 1
+b 1
+b 16
+b 3
+b 125
+b 202
+b 89
+b 107
+b 189
+b 189
+b 1
+b 18
+b 28
+b 15
+b 1
+b 154
+b 74
+b 82
+b 131
+b 77
+b 13
+b 12
+b 1
+b 19
+b 28
+b 17
+b 1
+b 18
+b 28
+b 15
+b 1
+b 26
+b 1
+b 7
+b 6
+b 1
+b 28
+b 358
+b 78
+b 100
+b 99
+b 1
+b 56
+b 73
+b 54
+b 1
+b 6
+b 3
+b 1
+b 139
+b 141
+b 161
+b 160
+b 1
+b 460
+b 457
+b 1
+b 3
+b 5
+b 7
+b 7
+b 1
+b 20
+b 3
+b 3
+b 52
+b 16
+b 71
+b 18
+b 3
+b 109
+b 117
+b 173
+b 108
+b 1
+b 198
+b 200
+b 219
+b 195
+b 1
+b 216
+b 1
+b 664
+b 678
+b 4
+b 7
+b 262
+b 288
+b 290
+b 116
+b 115
+b 1
+b 38
+b 1
+b 4
+b 6
+b 8
+b 10
+b 4
+b 1
+b 97
+b 108
+b 22
+b 24
+b 59
+b 56
+b 1
+b 3
+b 0
+b 1
+b 28
+b 20
+b 84
+b 3
+b 5
+b 12
+b 0
+b 2
+b 14
+b 344
+b 346
+b 348
+b 341
+b 1
+b 308
+b 315
+b 331
+b 330
+b 2
+b 306
+b 1
+b 63
+b 65
+b 67
+b 63
+b 1
+b 267
+b 273
+b 275
+b 273
+b 1
+b 186
+b 22
+b 24
+b 11
+b 19
+b 10
+b 1
+b 15
+b 1
+b 26
+b 26
+b 89
+b 14
+b 89
+b 86
+b 1
+b 10
+b 9
+b 1
+b 10
+b 12
+b 30
+b 27
+b 1
+b 23
+b 21
+b 1
+b 167
+b 178
+b 248
+b 247
+b 1
+b 99
+b 2
+b 40
+b 42
+b 10
+b 5
+b 7
+b 9
+b 11
+b 106
+b 105
+b 1
+b 76
+b 133
+b 102
+b 7
+b 14
+b 6
+b 1
+b 209
+b 207
+b 1
+b 25
+b 116
+b 118
+b 120
+b 8
+b 39
+b 8
+b 1
+b 35
+b 1
+b 115
+b 126
+b 128
+b 126
+b 1
+b 306
+b 334
+b 306
+b 1
+b 330
+b 1
+b 51
+b 53
+b 63
+b 51
+b 1
+b 47
+b 27
+b 29
+b 14
+b 16
+b 18
+b 16
+b 1
+b 126
+b 139
+b 138
+b 1
+b 3
+b 27
+b 26
+b 1
+b 50
+b 7
+b 101
+b 108
+b 68
+b 67
+b 1
+b 120
+b 159
+b 80
+b 103
+b 110
+b 102
+b 1
+b 106
+b 1
+b 163
+b 175
+b 177
+b 162
+b 1
+b 41
+b 20
+b 18
+b 1
+b 1
+b 0
+b 1
+b 11
+b 13
+b 8
+b 1
+b 11
+b 1
+b 10
+b 24
+b 8
+b 7
+b 1
+b 38
+b 40
+b 9
+b 7
+b 1
+b 2
+b 400
+b 402
+b 397
+b 1
+b 397
+b 395
+b 1
+b 53
+b 52
+b 1
+b 24
+b 11
+b 141
+b 158
+b 344
+b 351
+b 36
+b 61
+b 45
+b 61
+b 59
+b 1
+b 104
+b 119
+b 117
+b 1
+b 382
+b 15
+b 12
+b 1
+b 0
+b 14
+b 102
+b 111
+b 101
+b 1
+b 16
+b 18
+b 140
+b 66
+b 12
+b 14
+b 16
+b 14
+b 1
+b 55
+b 7
+b 28
+b 9
+b 8
+b 1
+b 15
+b 28
+b 30
+b 87
+b 28
+b 1
+b 279
+b 141
+b 4
+b 434
+b 449
+b 448
+b 1
+b 101
+b 100
+b 2
+b 53
+b 62
+b 52
+b 1
+b 5
+b 84
+b 9
+b 104
+b 32
+b 102
+b 104
+b 31
+b 1
+b 21
+b 41
+b 19
+b 1
+b 40
+b 1
+b 238
+b 240
+b 242
+b 238
+b 1
+b 436
+b 453
+b 433
+b 1
+b 77
+b 76
+b 1
+b 2
+b 3
+b 0
+b 2
+b 4
+b 0
+b 2
+b 0
+b 1
+b 99
+b 192
+b 42
+b 49
+b 48
+b 1
+b 4
+b 11
+b 34
+b 36
+b 38
+b 36
+b 1
+b 45
+b 3
+b 28
+b 30
+b 32
+b 28
+b 1
+b 98
+b 97
+b 2
+b 317
+b 319
+b 321
+b 170
+b 7
+b 57
+b 56
+b 1
+b 52
+b 0
+b 10
+b 8
+b 6
+b 1
+b 49
+b 47
+b 1
+b 249
+b 259
+b 32
+b 74
+b 83
+b 82
+b 1
+b 145
+b 158
+b 165
+b 164
+b 1
+b 16
+b 24
+b 4
+b 114
+b 138
+b 52
+b 68
+b 37
+b 39
+b 115
+b 117
+b 130
+b 129
+b 1
+b 796
+b 798
+b 800
+b 808
+b 798
+b 1
+b 258
+b 268
+b 255
+b 1
+b 40
+b 38
+b 1
+b 16
+b 41
+b 39
+b 1
+b 15
+b 13
+b 2
+b 6
+b 15
+b 21
+b 22
+b 30
+b 19
+b 2
+b 14
+b 1
+b 9
+b 6
+b 1
+b 76
+b 86
+b 73
+b 72
+b 1
+b 6
+b 8
+b 10
+b 10
+b 1
+b 88
+b 98
+b 4
+b 6
+b 8
+b 4
+b 1
+b 16
+b 3
+b 124
+b 126
+b 125
+b 1
+b 2
+b 249
+b 251
+b 259
+b 185
+b 197
+b 227
+b 196
+b 1
+b 223
+b 1
+b 32
+b 3
+b 19
+b 16
+b 1
+b 13
+b 12
+b 1
+b 57
+b 34
+b 36
+b 65
+b 62
+b 1
+b 82
+b 93
+b 109
+b 125
+b 122
+b 1
+b 123
+b 125
+b 127
+b 129
+b 123
+b 1
+b 36
+b 38
+b 40
+b 42
+b 75
+b 77
+b 101
+b 77
+b 1
+b 97
+b 1
+b 4
+b 57
+b 56
+b 1
+b 89
+b 99
+b 97
+b 96
+b 1
+b 24
+b 34
+b 205
+b 253
+b 2
+b 4
+b 6
+b 2
+b 1
+b 95
+b 14
+b 16
+b 14
+b 1
+b 89
+b 7
+b 9
+b 7
+b 1
+b 103
+b 140
+b 18
+b 17
+b 17
+b 1
+b 42
+b 54
+b 39
+b 1
+b 8
+b 7
+b 1
+b 265
+b 65
+b 85
+b 249
+b 261
+b 267
+b 266
+b 2
+b 246
+b 1
+b 2
+b 4
+b 6
+b 2
+b 1
+b 453
+b 2
+b 11
+b 142
+b 144
+b 185
+b 184
+b 1
+b 147
+b 149
+b 151
+b 152
+b 154
+b 151
+b 2
+b 144
+b 1
+b 2
+b 4
+b 6
+b 76
+b 105
+b 111
+b 75
+b 2
+b 100
+b 1
+b 52
+b 71
+b 83
+b 7
+b 30
+b 29
+b 1
+b 305
+b 307
+b 302
+b 1
+b 226
+b 224
+b 2
+b 89
+b 96
+b 93
+b 90
+b 1
+b 53
+b 52
+b 1
+b 57
+b 23
+b 42
+b 54
+b 41
+b 1
+b 69
+b 71
+b 73
+b 81
+b 71
+b 1
+b 24
+b 12
+b 44
+b 43
+b 1
+b 368
+b 14
+b 1
+b 110
+b 112
+b 114
+b 110
+b 1
+b 42
+b 44
+b 42
+b 1
+b 93
+b 21
+b 0
+b 2
+b 9
+b 30
+b 32
+b 34
+b 30
+b 1
+b 80
+b 91
+b 21
+b 32
+b 34
+b 556
+b 563
+b 330
+b 359
+b 329
+b 1
+b 354
+b 1
+b 6
+b 29
+b 27
+b 1
+b 4
+b 81
+b 94
+b 5
+b 7
+b 27
+b 26
+b 1
+b 162
+b 8
+b 2
+b 3
+b 209
+b 211
+b 213
+b 215
+b 12
+b 16
+b 9
+b 8
+b 1
+b 16
+b 18
+b 18
+b 1
+b 154
+b 35
+b 67
+b 100
+b 67
+b 1
+b 96
+b 1
+b 77
+b 86
+b 87
+b 94
+b 85
+b 1
+b 76
+b 1
+b 93
+b 11
+b 76
+b 74
+b 1
+b 61
+b 60
+b 1
+b 0
+b 44
+b 46
+b 54
+b 45
+b 2
+b 50
+b 1
+b 95
+b 94
+b 1
+b 11
+b 13
+b 14
+b 36
+b 11
+b 2
+b 116
+b 118
+b 116
+b 1
+b 13
+b 183
+b 174
+b 173
+b 1
+b 0
+b 20
+b 20
+b 1
+b 3
+b 2
+b 1
+b 164
+b 163
+b 1
+b 4
+b 230
+b 248
+b 567
+b 191
+b 193
+b 136
+b 145
+b 133
+b 1
+b 119
+b 121
+b 123
+b 48
+b 9
+b 179
+b 181
+b 1
+b 90
+b 89
+b 2
+b 1
+b 14
+b 11
+b 1
+b 253
+b 417
+b 55
+b 48
+b 45
+b 1
+b 11
+b 8
+b 1
+b 127
+b 170
+b 172
+b 126
+b 1
+b 165
+b 1
+b 6
+b 37
+b 999
+b 21
+b 12
+b 5
+b 28
+b 264
+b 3
+b 8
+b 10
+b 8
+b 1
+b 16
+b 28
+b 14
+b 2
+b 292
+b 289
+b 1
+b 555
+b 579
+b 554
+b 1
+b 208
+b 227
+b 70
+b 72
+b 74
+b 75
+b 122
+b 74
+b 2
+b 67
+b 1
+b 115
+b 1
+b 188
+b 250
+b 15
+b 36
+b 14
+b 1
+b 24
+b 59
+b 105
+b 0
+b 8
+b 180
+b 250
+b 2
+b 33
+b 137
+b 139
+b 100
+b 7
+b 15
+b 17
+b 15
+b 1
+b 110
+b 109
+b 1
+b 97
+b 99
+b 99
+b 1
+b 38
+b 40
+b 51
+b 120
+b 119
+b 1
+b 23
+b 139
+b 44
+b 46
+b 48
+b 41
+b 43
+b 38
+b 1
+b 12
+b 9
+b 1
+b 170
+b 172
+b 1
+b 48
+b 6
+b 5
+b 1
+b 1
+b 0
+b 1
+b 144
+b 146
+b 144
+b 1
+b 52
+b 101
+b 103
+b 105
+b 98
+b 1
+b 103
+b 1
+b 115
+b 117
+b 119
+b 3
+b 79
+b 81
+b 81
+b 1
+b 4
+b 5
+b 7
+b 9
+b 4
+b 2
+b 583
+b 598
+b 600
+b 37
+b 5
+b 20
+b 31
+b 50
+b 9
+b 27
+b 26
+b 1
+b 137
+b 136
+b 1
+b 19
+b 21
+b 37
+b 39
+b 34
+b 33
+b 1
+b 344
+b 238
+b 51
+b 68
+b 51
+b 1
+b 142
+b 16
+b 158
+b 157
+b 1
+b 21
+b 18
+b 1
+b 6
+b 8
+b 10
+b 99
+b 110
+b 108
+b 2
+b 98
+b 1
+b 1
+b 128
+b 130
+b 149
+b 23
+b 30
+b 119
+b 121
+b 116
+b 1
+b 13
+b 11
+b 1
+b 12
+b 11
+b 1
+b 24
+b 24
+b 1
+b 225
+b 406
+b 3
+b 5
+b 22
+b 21
+b 1
+b 101
+b 0
+b 2
+b 21
+b 60
+b 93
+b 59
+b 1
+b 39
+b 2
+b 11
+b 13
+b 11
+b 1
+b 3
+b 5
+b 7
+b 9
+b 7
+b 1
+b 104
+b 106
+b 108
+b 108
+b 1
+b 101
+b 1
+b 64
+b 70
+b 208
+b 216
+b 154
+b 153
+b 1
+b 155
+b 157
+b 159
+b 159
+b 1
+b 3
+b 3
+b 1
+b 18
+b 23
+b 30
+b 29
+b 1
+b 169
+b 35
+b 37
+b 35
+b 1
+b 82
+b 80
+b 2
+b 21
+b 21
+b 1
+b 24
+b 46
+b 57
+b 58
+b 57
+b 1
+b 0
+b 55
+b 76
+b 78
+b 66
+b 68
+b 97
+b 64
+b 1
+b 95
+b 1
+b 43
+b 34
+b 33
+b 1
+b 5
+b 152
+b 3
+b 204
+b 9
+b 8
+b 1
+b 109
+b 108
+b 1
+b 3
+b 0
+b 1
+b 28
+b 44
+b 27
+b 2
+b 0
+b 2
+b 4
+b 6
+b 8
+b 6
+b 8
+b 10
+b 12
+b 4
+b 1
+b 11
+b 1
+b 22
+b 24
+b 26
+b 28
+b 26
+b 1
+b 3
+b 2
+b 1
+b 104
+b 115
+b 252
+b 250
+b 2
+b 22
+b 196
+b 206
+b 251
+b 250
+b 1
+b 36
+b 38
+b 49
+b 38
+b 1
+b 45
+b 1
+b 6
+b 127
+b 27
+b 29
+b 31
+b 39
+b 192
+b 191
+b 1
+b 128
+b 127
+b 1
+b 5
+b 7
+b 9
+b 113
+b 129
+b 128
+b 1
+b 254
+b 350
+b 403
+b 63
+b 3
+b 51
+b 53
+b 24
+b 23
+b 1
+b 22
+b 32
+b 42
+b 32
+b 1
+b 39
+b 1
+b 361
+b 360
+b 1
+b 6
+b 16
+b 103
+b 105
+b 163
+b 381
+b 385
+b 387
+b 378
+b 1
+b 385
+b 1
+b 50
+b 270
+b 28
+b 30
+b 25
+b 1
+b 28
+b 27
+b 1
+b 38
+b 40
+b 41
+b 47
+b 40
+b 2
+b 43
+b 1
+b 13
+b 25
+b 27
+b 29
+b 31
+b 1
+b 15
+b 14
+b 1
+b 217
+b 230
+b 231
+b 264
+b 228
+b 2
+b 216
+b 1
+b 259
+b 1
+b 88
+b 90
+b 92
+b 94
+b 90
+b 1
+b 13
+b 15
+b 0
+b 0
+b 1
+b 24
+b 21
+b 1
+b 2
+b 2
+b 1
+b 54
+b 52
+b 1
+b 34
+b 34
+b 1
+b 73
+b 75
+b 73
+b 1
+b 188
+b 3
+b 11
+b 13
+b 116
+b 26
+b 136
+b 138
+b 140
+b 136
+b 1
+b 107
+b 106
+b 1
+b 64
+b 63
+b 1
+b 106
+b 108
+b 108
+b 1
+b 12
+b 9
+b 1
+b 77
+b 79
+b 81
+b 83
+b 79
+b 1
+b 74
+b 86
+b 85
+b 1
+b 5
+b 2
+b 1
+b 270
+b 272
+b 274
+b 276
+b 278
+b 270
+b 1
+b 24
+b 29
+b 21
+b 1
+b 4
+b 3
+b 1
+b 114
+b 19
+b 18
+b 1
+b 1
+b 2
+b 51
+b 0
+b 1
+b 1
+b 13
+b 15
+b 39
+b 15
+b 1
+b 35
+b 1
+b 21
+b 13
+b 31
+b 30
+b 1
+b 17
+b 19
+b 17
+b 1
+b 8
+b 7
+b 1
+b 3
+b 5
+b 7
+b 18
+b 17
+b 1
+b 3
+b 19
+b 16
+b 1
+b 15
+b 13
+b 1
+b 296
+b 80
+b 77
+b 1
+b 239
+b 241
+b 241
+b 1
+b 4
+b 2
+b 1
+b 30
+b 40
+b 50
+b 39
+b 1
+b 169
+b 171
+b 181
+b 55
+b 275
+b 53
+b 1
+b 147
+b 146
+b 1
+b 120
+b 32
+b 267
+b 264
+b 1
+b 11
+b 10
+b 1
+b 136
+b 151
+b 133
+b 1
+b 149
+b 1
+b 96
+b 109
+b 108
+b 1
+b 12
+b 11
+b 1
+b 43
+b 45
+b 47
+b 49
+b 40
+b 1
+b 38
+b 40
+b 26
+b 25
+b 1
+b 43
+b 66
+b 74
+b 66
+b 1
+b 71
+b 1
+b 125
+b 134
+b 133
+b 1
+b 70
+b 79
+b 78
+b 1
+b 220
+b 256
+b 255
+b 1
+b 63
+b 12
+b 6
+b 8
+b 10
+b 8
+b 1
+b 145
+b 59
+b 63
+b 80
+b 79
+b 2
+b 10
+b 7
+b 1
+b 166
+b 187
+b 186
+b 1
+b 202
+b 115
+b 117
+b 17
+b 16
+b 1
+b 201
+b 232
+b 77
+b 79
+b 75
+b 1
+b 190
+b 190
+b 1
+b 22
+b 38
+b 21
+b 1
+b 0
+b 1
+b 155
+b 169
+b 171
+b 154
+b 1
+b 10
+b 12
+b 14
+b 16
+b 12
+b 1
+b 182
+b 17
+b 24
+b 1
+b 399
+b 9
+b 64
+b 66
+b 14
+b 67
+b 25
+b 37
+b 24
+b 1
+b 28
+b 27
+b 1
+b 3
+b 211
+b 264
+b 37
+b 36
+b 1
+b 27
+b 29
+b 31
+b 27
+b 1
+b 0
+b 150
+b 150
+b 1
+b 181
+b 115
+b 114
+b 1
+b 82
+b 5
+b 625
+b 678
+b 72
+b 28
+b 32
+b 102
+b 104
+b 35
+b 3
+b 602
+b 145
+b 155
+b 154
+b 1
+b 224
+b 224
+b 1
+b 251
+b 249
+b 1
+b 51
+b 66
+b 48
+b 1
+b 111
+b 110
+b 1
+b 3
+b 5
+b 36
+b 51
+b 225
+b 232
+b 223
+b 2
+b 230
+b 1
+b 7
+b 31
+b 30
+b 1
+b 48
+b 50
+b 52
+b 54
+b 48
+b 1
+b 3
+b 5
+b 7
+b 9
+b 7
+b 1
+b 170
+b 187
+b 194
+b 169
+b 1
+b 74
+b 116
+b 21
+b 32
+b 34
+b 36
+b 37
+b 39
+b 41
+b 34
+b 2
+b 39
+b 1
+b 115
+b 117
+b 113
+b 1
+b 14
+b 13
+b 1
+b 143
+b 160
+b 159
+b 1
+b 77
+b 76
+b 2
+b 585
+b 6
+b 0
+b 437
+b 499
+b 501
+b 434
+b 1
+b 270
+b 272
+b 285
+b 298
+b 272
+b 1
+b 282
+b 1
+b 188
+b 58
+b 60
+b 58
+b 1
+b 68
+b 76
+b 78
+b 78
+b 1
+b 66
+b 1
+b 134
+b 183
+b 220
+b 181
+b 2
+b 74
+b 132
+b 129
+b 1
+b 51
+b 53
+b 48
+b 1
+b 11
+b 10
+b 1
+b 31
+b 18
+b 4
+b 378
+b 380
+b 47
+b 88
+b 90
+b 90
+b 1
+b 5
+b 4
+b 1
+b 171
+b 173
+b 186
+b 22
+b 27
+b 29
+b 5
+b 12
+b 3
+b 1
+b 64
+b 66
+b 62
+b 1
+b 28
+b 26
+b 1
+b 5
+b 7
+b 109
+b 111
+b 107
+b 1
+b 12
+b 150
+b 152
+b 13
+b 12
+b 1
+b 5
+b 27
+b 36
+b 36
+b 1
+b 3
+b 1
+b 15
+b 13
+b 1
+b 19
+b 18
+b 15
+b 1
+b 14
+b 12
+b 1
+b 224
+b 36
+b 50
+b 49
+b 2
+b 35
+b 1
+b 5
+b 36
+b 38
+b 34
+b 1
+b 20
+b 80
+b 149
+b 169
+b 168
+b 1
+b 3
+b 22
+b 24
+b 2
+b 1
+b 305
+b 386
+b 388
+b 386
+b 1
+b 6
+b 8
+b 10
+b 6
+b 1
+b 252
+b 116
+b 118
+b 37
+b 0
+b 5
+b 372
+b 369
+b 1
+b 7
+b 118
+b 0
+b 2
+b 7
+b 4
+b 1
+b 1
+b 10
+b 9
+b 1
+b 68
+b 70
+b 89
+b 65
+b 1
+b 84
+b 1
+b 1
+b 15
+b 17
+b 17
+b 1
+b 188
+b 190
+b 192
+b 194
+b 188
+b 1
+b 50
+b 52
+b 25
+b 24
+b 1
+b 8
+b 61
+b 80
+b 140
+b 79
+b 2
+b 136
+b 1
+b 80
+b 87
+b 89
+b 233
+b 269
+b 269
+b 1
+b 9
+b 7
+b 1
+b 51
+b 49
+b 1
+b 60
+b 69
+b 58
+b 1
+b 314
+b 353
+b 312
+b 1
+b 351
+b 1
+b 116
+b 141
+b 163
+b 140
+b 2
+b 159
+b 1
+b 29
+b 31
+b 31
+b 1
+b 4
+b 2
+b 1
+b 61
+b 63
+b 65
+b 63
+b 1
+b 7
+b 14
+b 4
+b 1
+b 3
+b 3
+b 1
+b 5
+b 5
+b 1
+b 19
+b 17
+b 2
+b 6
+b 86
+b 88
+b 89
+b 91
+b 88
+b 2
+b 20
+b 20
+b 1
+b 90
+b 92
+b 106
+b 88
+b 1
+b 157
+b 164
+b 163
+b 2
+b 48
+b 46
+b 1
+b 60
+b 62
+b 87
+b 86
+b 1
+b 153
+b 177
+b 187
+b 152
+b 1
+b 11
+b 1
+b 20
+b 26
+b 32
+b 26
+b 1
+b 150
+b 152
+b 154
+b 156
+b 154
+b 1
+b 390
+b 407
+b 17
+b 30
+b 75
+b 29
+b 2
+b 70
+b 1
+b 221
+b 269
+b 271
+b 219
+b 2
+b 269
+b 1
+b 136
+b 137
+b 139
+b 141
+b 170
+b 136
+b 2
+b 358
+b 360
+b 362
+b 360
+b 1
+b 85
+b 84
+b 1
+b 38
+b 182
+b 189
+b 414
+b 463
+b 463
+b 1
+b 411
+b 1
+b 108
+b 110
+b 112
+b 114
+b 108
+b 1
+b 41
+b 7
+b 15
+b 13
+b 1
+b 6
+b 1
+b 51
+b 75
+b 48
+b 1
+b 527
+b 529
+b 531
+b 533
+b 531
+b 1
+b 6
+b 60
+b 19
+b 0
+b 12
+b 157
+b 180
+b 182
+b 178
+b 1
+b 157
+b 1
+b 230
+b 249
+b 230
+b 1
+b 0
+b 26
+b 28
+b 30
+b 63
+b 65
+b 67
+b 63
+b 1
+b 73
+b 86
+b 6
+b 24
+b 2
+b 4
+b 6
+b 66
+b 81
+b 149
+b 147
+b 1
+b 80
+b 1
+b 152
+b 20
+b 22
+b 20
+b 1
+b 1
+b 6
+b 8
+b 182
+b 184
+b 185
+b 211
+b 184
+b 1
+b 179
+b 1
+b 15
+b 17
+b 15
+b 1
+b 106
+b 124
+b 146
+b 156
+b 156
+b 1
+b 18
+b 20
+b 16
+b 1
+b 10
+b 8
+b 1
+b 194
+b 193
+b 1
+b 21
+b 40
+b 23
+b 25
+b 4
+b 61
+b 63
+b 65
+b 67
+b 63
+b 1
+b 141
+b 140
+b 1
+b 43
+b 41
+b 1
+b 70
+b 75
+b 77
+b 79
+b 81
+b 79
+b 1
+b 19
+b 40
+b 11
+b 26
+b 28
+b 30
+b 10
+b 1
+b 4
+b 13
+b 2
+b 1
+b 3
+b 0
+b 1
+b 154
+b 156
+b 168
+b 167
+b 1
+b 207
+b 215
+b 99
+b 101
+b 103
+b 105
+b 103
+b 1
+b 106
+b 277
+b 279
+b 61
+b 6
+b 8
+b 12
+b 9
+b 1
+b 6
+b 50
+b 48
+b 1
+b 133
+b 150
+b 152
+b 19
+b 44
+b 43
+b 2
+b 2
+b 4
+b 47
+b 46
+b 1
+b 27
+b 33
+b 35
+b 52
+b 72
+b 74
+b 421
+b 423
+b 446
+b 155
+b 83
+b 35
+b 48
+b 78
+b 34
+b 1
+b 44
+b 1
+b 83
+b 217
+b 80
+b 1
+b 214
+b 1
+b 115
+b 117
+b 118
+b 117
+b 1
+b 17
+b 0
+b 200
+b 198
+b 2
+b 75
+b 81
+b 81
+b 1
+b 262
+b 153
+b 163
+b 164
+b 162
+b 1
+b 152
+b 1
+b 0
+b 40
+b 58
+b 37
+b 1
+b 35
+b 41
+b 35
+b 1
+b 38
+b 1
+b 56
+b 165
+b 170
+b 201
+b 169
+b 2
+b 196
+b 1
+b 20
+b 22
+b 3
+b 2
+b 1
+b 44
+b 53
+b 59
+b 79
+b 110
+b 112
+b 38
+b 45
+b 86
+b 44
+b 1
+b 81
+b 1
+b 164
+b 22
+b 24
+b 22
+b 1
+b 29
+b 31
+b 33
+b 27
+b 1
+b 16
+b 34
+b 15
+b 1
+b 241
+b 271
+b 240
+b 1
+b 59
+b 182
+b 179
+b 1
+b 15
+b 17
+b 17
+b 1
+b 6
+b 8
+b 10
+b 22
+b 19
+b 1
+b 9
+b 11
+b 13
+b 14
+b 20
+b 13
+b 2
+b 21
+b 20
+b 1
+b 50
+b 124
+b 140
+b 121
+b 1
+b 137
+b 1
+b 40
+b 100
+b 102
+b 25
+b 42
+b 36
+b 43
+b 35
+b 1
+b 288
+b 299
+b 301
+b 286
+b 1
+b 299
+b 1
+b 174
+b 10
+b 35
+b 150
+b 170
+b 123
+b 11
+b 9
+b 1
+b 12
+b 22
+b 24
+b 26
+b 24
+b 1
+b 15
+b 3
+b 39
+b 225
+b 234
+b 38
+b 1
+b 220
+b 1
+b 188
+b 190
+b 192
+b 188
+b 1
+b 5
+b 45
+b 4
+b 6
+b 25
+b 51
+b 23
+b 1
+b 141
+b 143
+b 145
+b 143
+b 1
+b 0
+b 32
+b 21
+b 21
+b 1
+b 75
+b 51
+b 102
+b 104
+b 51
+b 50
+b 1
+b 31
+b 40
+b 191
+b 198
+b 36
+b 36
+b 1
+b 10
+b 0
+b 2
+b 2
+b 1
+b 882
+b 884
+b 882
+b 1
+b 1
+b 128
+b 130
+b 126
+b 1
+b 9
+b 6
+b 1
+b 190
+b 209
+b 207
+b 2
+b 97
+b 99
+b 101
+b 97
+b 1
+b 68
+b 70
+b 72
+b 70
+b 1
+b 364
+b 363
+b 1
+b 0
+b 2
+b 0
+b 1
+b 12
+b 380
+b 576
+b 379
+b 1
+b 45
+b 122
+b 132
+b 120
+b 2
+b 146
+b 143
+b 1
+b 26
+b 28
+b 40
+b 24
+b 1
+b 38
+b 1
+b 5
+b 7
+b 9
+b 10
+b 7
+b 2
+b 0
+b 2
+b 234
+b 243
+b 231
+b 1
+b 74
+b 71
+b 1
+b 75
+b 72
+b 1
+b 118
+b 126
+b 51
+b 74
+b 5
+b 7
+b 9
+b 3
+b 1
+b 8
+b 1
+b 10
+b 39
+b 14
+b 1
+b 60
+b 59
+b 1
+b 65
+b 97
+b 63
+b 1
+b 5
+b 3
+b 2
+b 10
+b 63
+b 61
+b 2
+b 1
+b 12
+b 0
+b 1
+b 87
+b 12
+b 40
+b 39
+b 1
+b 39
+b 41
+b 9
+b 22
+b 21
+b 1
+b 11
+b 14
+b 490
+b 528
+b 490
+b 1
+b 523
+b 1
+b 21
+b 20
+b 1
+b 21
+b 6
+b 948
+b 950
+b 1190
+b 948
+b 1
+b 157
+b 169
+b 81
+b 80
+b 1
+b 179
+b 3
+b 9
+b 25
+b 72
+b 21
+b 50
+b 68
+b 20
+b 1
+b 45
+b 1
+b 43
+b 33
+b 31
+b 2
+b 1
+b 108
+b 106
+b 1
+b 30
+b 27
+b 1
+b 0
+b 25
+b 103
+b 127
+b 159
+b 157
+b 2
+b 3
+b 171
+b 29
+b 31
+b 293
+b 292
+b 1
+b 34
+b 16
+b 21
+b 15
+b 0
+b 2
+b 8
+b 119
+b 119
+b 1
+b 115
+b 117
+b 32
+b 52
+b 54
+b 512
+b 9
+b 6
+b 1
+b 10
+b 9
+b 1
+b 7
+b 56
+b 57
+b 59
+b 61
+b 63
+b 56
+b 2
+b 5
+b 1
+b 22
+b 51
+b 49
+b 2
+b 19
+b 1
+b 1
+b 53
+b 3
+b 16
+b 15
+b 1
+b 181
+b 183
+b 188
+b 181
+b 1
+b 148
+b 150
+b 160
+b 59
+b 61
+b 63
+b 65
+b 102
+b 170
+b 39
+b 37
+b 1
+b 21
+b 98
+b 100
+b 169
+b 168
+b 1
+b 40
+b 42
+b 0
+b 2
+b 494
+b 504
+b 504
+b 1
+b 491
+b 1
+b 122
+b 124
+b 13
+b 21
+b 12
+b 1
+b 113
+b 112
+b 1
+b 0
+b 2
+b 18
+b 115
+b 21
+b 66
+b 65
+b 2
+b 21
+b 30
+b 18
+b 1
+b 44
+b 68
+b 70
+b 43
+b 1
+b 5
+b 7
+b 9
+b 9
+b 1
+b 32
+b 39
+b 38
+b 1
+b 17
+b 16
+b 1
+b 28
+b 36
+b 35
+b 1
+b 13
+b 359
+b 361
+b 18
+b 174
+b 181
+b 208
+b 180
+b 1
+b 201
+b 198
+b 1
+b 71
+b 69
+b 1
+b 122
+b 131
+b 122
+b 1
+b 127
+b 1
+b 31
+b 30
+b 1
+b 0
+b 2
+b 13
+b 0
+b 1
+b 47
+b 49
+b 64
+b 45
+b 1
+b 62
+b 1
+b 22
+b 24
+b 26
+b 5
+b 17
+b 15
+b 1
+b 189
+b 6
+b 0
+b 10
+b 196
+b 235
+b 269
+b 232
+b 1
+b 53
+b 55
+b 62
+b 53
+b 1
+b 204
+b 227
+b 15
+b 17
+b 53
+b 51
+b 2
+b 166
+b 168
+b 181
+b 166
+b 1
+b 6
+b 28
+b 1
+b 179
+b 179
+b 1
+b 308
+b 306
+b 1
+b 2
+b 16
+b 0
+b 1
+b 12
+b 1
+b 158
+b 165
+b 167
+b 155
+b 1
+b 165
+b 1
+b 7
+b 9
+b 11
+b 4
+b 1
+b 41
+b 43
+b 45
+b 278
+b 280
+b 282
+b 1
+b 0
+b 1
+b 280
+b 282
+b 295
+b 280
+b 1
+b 3
+b 5
+b 77
+b 4
+b 1
+b 11
+b 78
+b 7
+b 23
+b 6
+b 2
+b 19
+b 1
+b 4
+b 349
+b 221
+b 218
+b 1
+b 29
+b 26
+b 1
+b 0
+b 2
+b 13
+b 157
+b 178
+b 156
+b 1
+b 22
+b 42
+b 48
+b 49
+b 55
+b 48
+b 1
+b 52
+b 1
+b 166
+b 5
+b 17
+b 189
+b 187
+b 1
+b 42
+b 39
+b 1
+b 182
+b 17
+b 107
+b 109
+b 109
+b 1
+b 14
+b 14
+b 1
+b 4
+b 12
+b 14
+b 12
+b 1
+b 316
+b 315
+b 1
+b 10
+b 15
+b 55
+b 57
+b 53
+b 1
+b 14
+b 1
+b 14
+b 47
+b 12
+b 1
+b 46
+b 1
+b 287
+b 11
+b 207
+b 91
+b 93
+b 95
+b 97
+b 82
+b 96
+b 93
+b 99
+b 101
+b 97
+b 1
+b 110
+b 109
+b 1
+b 114
+b 112
+b 2
+b 9
+b 82
+b 44
+b 1037
+b 1050
+b 1035
+b 1
+b 92
+b 0
+b 2
+b 94
+b 96
+b 98
+b 100
+b 94
+b 1
+b 52
+b 7
+b 6
+b 1
+b 27
+b 23
+b 25
+b 30
+b 29
+b 1
+b 91
+b 93
+b 94
+b 119
+b 93
+b 1
+b 116
+b 2
+b 12
+b 90
+b 92
+b 94
+b 96
+b 56
+b 62
+b 64
+b 54
+b 1
+b 9
+b 11
+b 13
+b 7
+b 1
+b 26
+b 9
+b 9
+b 1
+b 46
+b 4
+b 3
+b 2
+b 10
+b 89
+b 132
+b 129
+b 1
+b 222
+b 9
+b 480
+b 534
+b 479
+b 1
+b 212
+b 190
+b 207
+b 217
+b 206
+b 2
+b 213
+b 1
+b 62
+b 8
+b 150
+b 163
+b 13
+b 26
+b 26
+b 1
+b 7
+b 6
+b 2
+b 7
+b 9
+b 11
+b 26
+b 28
+b 35
+b 26
+b 1
+b 36
+b 48
+b 7
+b 64
+b 63
+b 1
+b 11
+b 8
+b 1
+b 24
+b 189
+b 226
+b 226
+b 1
+b 226
+b 249
+b 248
+b 1
+b 90
+b 106
+b 145
+b 147
+b 145
+b 1
+b 3
+b 155
+b 155
+b 1
+b 65
+b 64
+b 1
+b 18
+b 27
+b 30
+b 36
+b 37
+b 39
+b 35
+b 1
+b 69
+b 82
+b 66
+b 1
+b 5
+b 4
+b 1
+b 57
+b 0
+b 2
+b 21
+b 109
+b 106
+b 1
+b 37
+b 36
+b 2
+b 1
+b 89
+b 69
+b 157
+b 155
+b 2
+b 68
+b 1
+b 73
+b 75
+b 99
+b 97
+b 1
+b 4
+b 38
+b 40
+b 3
+b 2
+b 5
+b 28
+b 30
+b 32
+b 50
+b 52
+b 31
+b 2
+b 26
+b 55
+b 25
+b 1
+b 3
+b 27
+b 11
+b 9
+b 11
+b 13
+b 15
+b 9
+b 1
+b 4
+b 3
+b 1
+b 36
+b 35
+b 1
+b 19
+b 12
+b 19
+b 24
+b 26
+b 28
+b 28
+b 1
+b 21
+b 1
+b 13
+b 10
+b 1
+b 19
+b 19
+b 1
+b 187
+b 184
+b 1
+b 6
+b 34
+b 33
+b 2
+b 79
+b 81
+b 83
+b 0
+b 44
+b 53
+b 43
+b 1
+b 30
+b 32
+b 45
+b 28
+b 1
+b 43
+b 1
+b 56
+b 65
+b 6
+b 15
+b 5
+b 30
+b 32
+b 3
+b 1
+b 182
+b 192
+b 226
+b 191
+b 1
+b 289
+b 3
+b 2
+b 2
+b 18
+b 16
+b 1
+b 10
+b 16
+b 15
+b 1
+b 365
+b 375
+b 375
+b 1
+b 112
+b 133
+b 111
+b 2
+b 119
+b 26
+b 40
+b 42
+b 153
+b 152
+b 1
+b 2
+b 44
+b 3
+b 50
+b 2
+b 1
+b 46
+b 1
+b 61
+b 63
+b 63
+b 1
+b 10
+b 9
+b 1
+b 53
+b 140
+b 52
+b 2
+b 135
+b 1
+b 19
+b 4
+b 1
+b 0
+b 1
+b 335
+b 369
+b 333
+b 1
+b 35
+b 36
+b 44
+b 35
+b 1
+b 1130
+b 1145
+b 232
+b 221
+b 218
+b 1
+b 0
+b 2
+b 0
+b 1
+b 130
+b 129
+b 1
+b 11
+b 10
+b 1
+b 0
+b 2
+b 15
+b 17
+b 19
+b 684
+b 686
+b 688
+b 684
+b 1
+b 151
+b 80
+b 36
+b 35
+b 1
+b 28
+b 9
+b 7
+b 4
+b 14
+b 2
+b 1
+b 75
+b 72
+b 1
+b 46
+b 48
+b 50
+b 6
+b 8
+b 16
+b 6
+b 1
+b 159
+b 161
+b 163
+b 165
+b 161
+b 1
+b 44
+b 12
+b 14
+b 12
+b 1
+b 637
+b 653
+b 652
+b 1
+b 165
+b 181
+b 59
+b 59
+b 1
+b 73
+b 70
+b 1
+b 3
+b 3
+b 1
+b 1
+b 31
+b 30
+b 2
+b 108
+b 110
+b 112
+b 114
+b 105
+b 1
+b 112
+b 1
+b 150
+b 152
+b 171
+b 148
+b 1
+b 169
+b 1
+b 2
+b 4
+b 28
+b 26
+b 2
+b 4
+b 1
+b 10
+b 83
+b 95
+b 93
+b 2
+b 82
+b 1
+b 58
+b 55
+b 1
+b 33
+b 36
+b 38
+b 40
+b 42
+b 38
+b 1
+b 160
+b 205
+b 204
+b 1
+b 176
+b 189
+b 191
+b 174
+b 1
+b 50
+b 48
+b 1
+b 5
+b 1
+b 10
+b 100
+b 102
+b 97
+b 1
+b 36
+b 34
+b 1
+b 109
+b 106
+b 1
+b 207
+b 205
+b 1
+b 2
+b 4
+b 4
+b 1
+b 79
+b 17
+b 85
+b 16
+b 1
+b 55
+b 1
+b 11
+b 10
+b 1
+b 4
+b 13
+b 3
+b 1
+b 16
+b 33
+b 39
+b 40
+b 42
+b 38
+b 1
+b 32
+b 1
+b 45
+b 238
+b 240
+b 238
+b 1
+b 8
+b 1
+b 11
+b 60
+b 204
+b 203
+b 2
+b 11
+b 11
+b 10
+b 2
+b 94
+b 91
+b 1
+b 4
+b 2
+b 1
+b 3
+b 0
+b 1
+b 29
+b 28
+b 1
+b 6
+b 8
+b 4
+b 1
+b 23
+b 35
+b 37
+b 44
+b 20
+b 1
+b 236
+b 238
+b 251
+b 234
+b 1
+b 250
+b 1
+b 117
+b 119
+b 215
+b 226
+b 228
+b 228
+b 1
+b 212
+b 1
+b 118
+b 116
+b 2
+b 47
+b 17
+b 16
+b 1
+b 65
+b 145
+b 185
+b 182
+b 1
+b 68
+b 75
+b 104
+b 66
+b 1
+b 101
+b 1
+b 27
+b 34
+b 7
+b 7
+b 1
+b 22
+b 19
+b 1
+b 1
+b 68
+b 9
+b 32
+b 16
+b 0
+b 127
+b 129
+b 26
+b 25
+b 1
+b 39
+b 49
+b 108
+b 154
+b 32
+b 34
+b 36
+b 38
+b 40
+b 34
+b 1
+b 230
+b 270
+b 106
+b 114
+b 550
+b 8
+b 8
+b 34
+b 43
+b 7
+b 1
+b 47
+b 8
+b 311
+b 310
+b 1
+b 66
+b 26
+b 44
+b 46
+b 48
+b 50
+b 46
+b 1
+b 26
+b 42
+b 0
+b 2
+b 13
+b 2
+b 1
+b 11
+b 1
+b 1
+b 0
+b 2
+b 91
+b 93
+b 95
+b 91
+b 1
+b 185
+b 183
+b 1
+b 142
+b 57
+b 91
+b 92
+b 90
+b 1
+b 56
+b 1
+b 5
+b 193
+b 195
+b 205
+b 203
+b 2
+b 12
+b 4
+b 3
+b 1
+b 0
+b 7
+b 71
+b 83
+b 93
+b 95
+b 19
+b 17
+b 1
+b 29
+b 74
+b 76
+b 3
+b 5
+b 13
+b 98
+b 143
+b 145
+b 3
+b 11
+b 13
+b 13
+b 1
+b 1
+b 1
+b 67
+b 24
+b 26
+b 24
+b 1
+b 72
+b 69
+b 1
+b 22
+b 24
+b 22
+b 1
+b 0
+b 1
+b 98
+b 112
+b 114
+b 110
+b 1
+b 97
+b 1
+b 59
+b 69
+b 184
+b 28
+b 27
+b 2
+b 86
+b 88
+b 208
+b 223
+b 224
+b 230
+b 222
+b 1
+b 229
+b 1
+b 88
+b 90
+b 92
+b 93
+b 92
+b 2
+b 85
+b 1
+b 62
+b 17
+b 16
+b 1
+b 14
+b 22
+b 23
+b 25
+b 22
+b 2
+b 27
+b 29
+b 30
+b 37
+b 29
+b 1
+b 24
+b 1
+b 54
+b 101
+b 72
+b 74
+b 76
+b 72
+b 1
+b 3
+b 5
+b 6
+b 26
+b 3
+b 2
+b 13
+b 21
+b 11
+b 1
+b 3
+b 3
+b 1
+b 30
+b 32
+b 34
+b 36
+b 34
+b 1
+b 151
+b 54
+b 53
+b 1
+b 169
+b 167
+b 1
+b 20
+b 30
+b 56
+b 62
+b 95
+b 83
+b 86
+b 138
+b 16
+b 17
+b 15
+b 1
+b 3
+b 2
+b 1
+b 53
+b 68
+b 52
+b 2
+b 64
+b 1
+b 14
+b 547
+b 582
+b 546
+b 1
+b 577
+b 1
+b 12
+b 90
+b 15
+b 53
+b 14
+b 2
+b 48
+b 1
+b 146
+b 148
+b 150
+b 159
+b 148
+b 1
+b 9
+b 11
+b 0
+b 23
+b 202
+b 220
+b 95
+b 28
+b 27
+b 1
+b 59
+b 19
+b 17
+b 2
+b 62
+b 59
+b 1
+b 6
+b 0
+b 2
+b 4
+b 6
+b 93
+b 95
+b 104
+b 103
+b 1
+b 149
+b 422
+b 44
+b 46
+b 67
+b 97
+b 136
+b 137
+b 135
+b 1
+b 4
+b 3
+b 1
+b 8
+b 5
+b 1
+b 6
+b 1
+b 58
+b 70
+b 119
+b 119
+b 130
+b 128
+b 2
+b 118
+b 1
+b 14
+b 11
+b 1
+b 18
+b 32
+b 34
+b 17
+b 1
+b 67
+b 96
+b 93
+b 1
+b 1
+b 11
+b 10
+b 2
+b 144
+b 142
+b 2
+b 14
+b 4
+b 5
+b 3
+b 1
+b 70
+b 68
+b 1
+b 6
+b 41
+b 39
+b 1
+b 3
+b 5
+b 13
+b 3
+b 1
+b 16
+b 18
+b 20
+b 22
+b 20
+b 1
+b 42
+b 27
+b 29
+b 29
+b 1
+b 0
+b 93
+b 90
+b 1
+b 12
+b 14
+b 55
+b 70
+b 53
+b 2
+b 133
+b 145
+b 146
+b 169
+b 131
+b 1
+b 144
+b 1
+b 116
+b 115
+b 1
+b 39
+b 7
+b 6
+b 1
+b 91
+b 91
+b 1
+b 13
+b 10
+b 1
+b 1
+b 2
+b 63
+b 225
+b 19
+b 18
+b 1
+b 129
+b 128
+b 1
+b 51
+b 53
+b 58
+b 42
+b 17
+b 17
+b 19
+b 21
+b 17
+b 42
+b 40
+b 1
+b 8
+b 7
+b 1
+b 94
+b 93
+b 1
+b 155
+b 152
+b 1
+b 50
+b 46
+b 0
+b 0
+b 1
+b 210
+b 209
+b 1
+b 48
+b 82
+b 88
+b 34
+b 65
+b 133
+b 156
+b 132
+b 2
+b 152
+b 1
+b 52
+b 171
+b 173
+b 175
+b 171
+b 1
+b 70
+b 68
+b 1
+b 41
+b 38
+b 1
+b 1
+b 100
+b 101
+b 130
+b 137
+b 98
+b 2
+b 0
+b 1
+b 0
+b 1
+b 128
+b 136
+b 16
+b 18
+b 14
+b 1
+b 147
+b 146
+b 1
+b 304
+b 326
+b 491
+b 491
+b 1
+b 161
+b 161
+b 1
+b 76
+b 78
+b 80
+b 82
+b 84
+b 76
+b 1
+b 44
+b 44
+b 1
+b 437
+b 449
+b 447
+b 1
+b 17
+b 19
+b 34
+b 33
+b 1
+b 647
+b 649
+b 656
+b 654
+b 1
+b 65
+b 67
+b 79
+b 89
+b 90
+b 63
+b 1
+b 85
+b 1
+b 296
+b 325
+b 21
+b 20
+b 1
+b 76
+b 88
+b 87
+b 2
+b 40
+b 53
+b 52
+b 1
+b 109
+b 108
+b 1
+b 24
+b 43
+b 52
+b 51
+b 2
+b 22
+b 1
+b 167
+b 174
+b 277
+b 311
+b 277
+b 1
+b 306
+b 1
+b 0
+b 9
+b 17
+b 16
+b 1
+b 20
+b 20
+b 1
+b 22
+b 77
+b 91
+b 90
+b 1
+b 80
+b 82
+b 84
+b 82
+b 1
+b 3
+b 5
+b 7
+b 9
+b 5
+b 1
+b 29
+b 29
+b 1
+b 16
+b 16
+b 1
+b 94
+b 105
+b 92
+b 2
+b 103
+b 1
+b 38
+b 94
+b 93
+b 1
+b 1
+b 266
+b 287
+b 289
+b 285
+b 1
+b 265
+b 1
+b 2
+b 4
+b 11
+b 10
+b 2
+b 17
+b 59
+b 24
+b 62
+b 5
+b 4
+b 1
+b 182
+b 36
+b 0
+b 39
+b 41
+b 43
+b 45
+b 39
+b 1
+b 140
+b 151
+b 108
+b 114
+b 127
+b 126
+b 1
+b 75
+b 77
+b 11
+b 8
+b 10
+b 12
+b 66
+b 6
+b 14
+b 12
+b 2
+b 5
+b 1
+b 118
+b 120
+b 118
+b 1
+b 5
+b 63
+b 65
+b 66
+b 68
+b 63
+b 2
+b 7
+b 6
+b 1
+b 232
+b 234
+b 232
+b 1
+b 19
+b 108
+b 110
+b 688
+b 685
+b 1
+b 47
+b 46
+b 1
+b 49
+b 48
+b 1
+b 118
+b 120
+b 49
+b 57
+b 55
+b 2
+b 48
+b 1
+b 92
+b 103
+b 126
+b 125
+b 127
+b 125
+b 1
+b 0
+b 2
+b 213
+b 226
+b 227
+b 256
+b 226
+b 2
+b 210
+b 1
+b 250
+b 1
+b 204
+b 203
+b 1
+b 42
+b 44
+b 9
+b 18
+b 7
+b 1
+b 16
+b 1
+b 9
+b 11
+b 11
+b 1
+b 9
+b 28
+b 44
+b 46
+b 27
+b 1
+b 360
+b 378
+b 377
+b 1
+b 19
+b 28
+b 33
+b 18
+b 1
+b 148
+b 150
+b 208
+b 150
+b 1
+b 205
+b 1
+b 23
+b 8
+b 10
+b 408
+b 11
+b 10
+b 2
+b 2
+b 12
+b 13
+b 13
+b 12
+b 1
+b 2
+b 4
+b 4
+b 1
+b 398
+b 408
+b 410
+b 395
+b 1
+b 408
+b 1
+b 657
+b 659
+b 77
+b 76
+b 1
+b 8
+b 28
+b 311
+b 308
+b 1
+b 4
+b 39
+b 40
+b 53
+b 39
+b 2
+b 48
+b 1
+b 8
+b 5
+b 1
+b 16
+b 79
+b 80
+b 1
+b 10
+b 89
+b 91
+b 93
+b 94
+b 93
+b 1
+b 12
+b 102
+b 74
+b 363
+b 371
+b 53
+b 55
+b 61
+b 60
+b 1
+b 156
+b 202
+b 210
+b 309
+b 27
+b 53
+b 62
+b 77
+b 51
+b 1
+b 74
+b 1
+b 129
+b 46
+b 29
+b 28
+b 1
+b 8
+b 16
+b 46
+b 55
+b 504
+b 514
+b 19
+b 18
+b 1
+b 18
+b 32
+b 15
+b 1
+b 0
+b 1
+b 0
+b 2
+b 28
+b 76
+b 75
+b 1
+b 43
+b 40
+b 1
+b 255
+b 257
+b 259
+b 261
+b 259
+b 1
+b 179
+b 206
+b 176
+b 109
+b 111
+b 109
+b 1
+b 49
+b 65
+b 67
+b 68
+b 78
+b 47
+b 2
+b 65
+b 1
+b 6
+b 44
+b 44
+b 1
+b 14
+b 31
+b 30
+b 1
+b 7
+b 5
+b 2
+b 20
+b 6
+b 33
+b 8
+b 7
+b 1
+b 32
+b 34
+b 36
+b 57
+b 56
+b 1
+b 12
+b 26
+b 20
+b 22
+b 24
+b 26
+b 18
+b 1
+b 25
+b 1
+b 332
+b 38
+b 47
+b 46
+b 1
+b 47
+b 61
+b 62
+b 59
+b 2
+b 47
+b 1
+b 5
+b 2
+b 1
+b 33
+b 35
+b 37
+b 39
+b 35
+b 1
+b 149
+b 151
+b 153
+b 155
+b 147
+b 1
+b 154
+b 1
+b 29
+b 49
+b 5
+b 4
+b 1
+b 17
+b 25
+b 33
+b 32
+b 1
+b 27
+b 29
+b 1
+b 71
+b 73
+b 53
+b 33
+b 33
+b 1
+b 3
+b 0
+b 97
+b 212
+b 95
+b 1
+b 51
+b 51
+b 1
+b 240
+b 242
+b 237
+b 1
+b 0
+b 2
+b 4
+b 16
+b 18
+b 15
+b 3
+b 13
+b 21
+b 23
+b 25
+b 117
+b 31
+b 133
+b 139
+b 155
+b 153
+b 1
+b 138
+b 1
+b 65
+b 56
+b 58
+b 56
+b 1
+b 115
+b 117
+b 145
+b 6
+b 93
+b 92
+b 1
+b 7
+b 114
+b 37
+b 5
+b 26
+b 5
+b 1
+b 55
+b 66
+b 84
+b 83
+b 1
+b 96
+b 95
+b 1
+b 18
+b 7
+b 24
+b 24
+b 1
+b 49
+b 104
+b 127
+b 127
+b 1
+b 47
+b 1
+b 110
+b 120
+b 122
+b 118
+b 1
+b 109
+b 1
+b 14
+b 13
+b 2
+b 3
+b 5
+b 7
+b 75
+b 77
+b 79
+b 81
+b 49
+b 11
+b 26
+b 10
+b 1
+b 48
+b 403
+b 5
+b 4
+b 1
+b 34
+b 163
+b 165
+b 161
+b 1
+b 38
+b 6
+b 7
+b 9
+b 5
+b 1
+b 18
+b 23
+b 200
+b 29
+b 38
+b 37
+b 1
+b 22
+b 24
+b 187
+b 28
+b 13
+b 35
+b 34
+b 1
+b 56
+b 87
+b 71
+b 70
+b 1
+b 199
+b 199
+b 1
+b 13
+b 707
+b 737
+b 82
+b 98
+b 81
+b 1
+b 52
+b 89
+b 13
+b 2
+b 9
+b 29
+b 30
+b 32
+b 34
+b 28
+b 1
+b 127
+b 20
+b 267
+b 310
+b 614
+b 624
+b 622
+b 2
+b 613
+b 1
+b 0
+b 2
+b 4
+b 16
+b 17
+b 19
+b 21
+b 16
+b 2
+b 2
+b 1
+b 483
+b 103
+b 102
+b 1
+b 242
+b 244
+b 268
+b 5
+b 5
+b 1
+b 11
+b 9
+b 1
+b 269
+b 267
+b 1
+b 195
+b 34
+b 3
+b 5
+b 463
+b 473
+b 475
+b 24
+b 41
+b 40
+b 2
+b 3
+b 114
+b 112
+b 1
+b 87
+b 45
+b 47
+b 47
+b 1
+b 55
+b 55
+b 1
+b 43
+b 52
+b 86
+b 88
+b 86
+b 1
+b 36
+b 98
+b 96
+b 1
+b 156
+b 154
+b 1
+b 56
+b 58
+b 60
+b 151
+b 63
+b 56
+b 55
+b 1
+b 1
+b 9
+b 24
+b 30
+b 32
+b 85
+b 99
+b 101
+b 99
+b 1
+b 485
+b 37
+b 55
+b 21
+b 60
+b 20
+b 2
+b 55
+b 1
+b 32
+b 103
+b 0
+b 2
+b 4
+b 2
+b 1
+b 1
+b 15
+b 13
+b 1
+b 13
+b 14
+b 12
+b 1
+b 1
+b 0
+b 73
+b 37
+b 37
+b 1
+b 4
+b 6
+b 7
+b 14
+b 4
+b 2
+b 12
+b 1
+b 94
+b 96
+b 98
+b 144
+b 62
+b 0
+b 2
+b 4
+b 11
+b 12
+b 4
+b 1
+b 21
+b 5
+b 6
+b 4
+b 1
+b 76
+b 78
+b 74
+b 1
+b 54
+b 61
+b 61
+b 1
+b 133
+b 135
+b 130
+b 1
+b 1
+b 67
+b 64
+b 1
+b 4
+b 4
+b 2
+b 1
+b 11
+b 9
+b 26
+b 38
+b 18
+b 88
+b 8
+b 128
+b 130
+b 132
+b 134
+b 130
+b 1
+b 291
+b 301
+b 3
+b 13
+b 119
+b 70
+b 72
+b 70
+b 1
+b 120
+b 117
+b 1
+b 895
+b 98
+b 100
+b 102
+b 102
+b 1
+b 65
+b 67
+b 104
+b 103
+b 1
+b 434
+b 441
+b 196
+b 195
+b 2
+b 240
+b 242
+b 56
+b 67
+b 56
+b 1
+b 63
+b 1
+b 76
+b 75
+b 1
+b 16
+b 15
+b 1
+b 17
+b 19
+b 105
+b 114
+b 134
+b 133
+b 2
+b 103
+b 1
+b 223
+b 240
+b 242
+b 238
+b 1
+b 222
+b 1
+b 106
+b 112
+b 110
+b 1
+b 105
+b 1
+b 118
+b 453
+b 88
+b 86
+b 2
+b 0
+b 2
+b 0
+b 1
+b 195
+b 197
+b 197
+b 1
+b 1
+b 17
+b 19
+b 21
+b 17
+b 1
+b 389
+b 413
+b 387
+b 1
+b 9
+b 8
+b 2
+b 108
+b 110
+b 112
+b 108
+b 1
+b 617
+b 616
+b 1
+b 96
+b 318
+b 45
+b 47
+b 49
+b 51
+b 49
+b 1
+b 22
+b 19
+b 1
+b 3
+b 0
+b 1
+b 87
+b 39
+b 33
+b 32
+b 1
+b 25
+b 41
+b 57
+b 86
+b 84
+b 2
+b 1
+b 64
+b 62
+b 1
+b 18
+b 15
+b 1
+b 101
+b 41
+b 43
+b 10
+b 112
+b 122
+b 120
+b 1
+b 6
+b 17
+b 19
+b 111
+b 25
+b 25
+b 1
+b 91
+b 93
+b 95
+b 97
+b 95
+b 1
+b 68
+b 70
+b 81
+b 68
+b 1
+b 68
+b 70
+b 87
+b 86
+b 1
+b 23
+b 22
+b 1
+b 1
+b 3
+b 187
+b 189
+b 191
+b 193
+b 185
+b 15
+b 52
+b 73
+b 18
+b 17
+b 1
+b 8
+b 41
+b 63
+b 48
+b 55
+b 68
+b 70
+b 68
+b 1
+b 2
+b 116
+b 118
+b 116
+b 1
+b 146
+b 12
+b 14
+b 16
+b 10
+b 1
+b 113
+b 4
+b 99
+b 114
+b 99
+b 1
+b 4
+b 10
+b 9
+b 1
+b 6
+b 19
+b 8
+b 28
+b 30
+b 28
+b 1
+b 13
+b 12
+b 1
+b 86
+b 95
+b 84
+b 2
+b 30
+b 32
+b 27
+b 26
+b 1
+b 4
+b 6
+b 15
+b 2
+b 1
+b 13
+b 1
+b 216
+b 224
+b 215
+b 2
+b 220
+b 1
+b 46
+b 55
+b 44
+b 1
+b 53
+b 1
+b 41
+b 1
+b 11
+b 0
+b 1
+b 6
+b 8
+b 10
+b 12
+b 31
+b 32
+b 34
+b 36
+b 31
+b 2
+b 46
+b 45
+b 1
+b 119
+b 30
+b 29
+b 1
+b 142
+b 123
+b 140
+b 141
+b 143
+b 139
+b 1
+b 44
+b 46
+b 42
+b 1
+b 20
+b 19
+b 1
+b 4
+b 1
+b 93
+b 110
+b 65
+b 11
+b 13
+b 76
+b 78
+b 80
+b 78
+b 1
+b 118
+b 135
+b 115
+b 1
+b 66
+b 68
+b 70
+b 72
+b 66
+b 1
+b 71
+b 73
+b 75
+b 69
+b 1
+b 20
+b 30
+b 18
+b 20
+b 21
+b 23
+b 18
+b 2
+b 30
+b 32
+b 41
+b 42
+b 44
+b 46
+b 32
+b 1
+b 39
+b 1
+b 103
+b 121
+b 103
+b 1
+b 133
+b 154
+b 155
+b 164
+b 153
+b 1
+b 2
+b 103
+b 70
+b 88
+b 95
+b 244
+b 294
+b 294
+b 1
+b 202
+b 214
+b 201
+b 1
+b 0
+b 2
+b 132
+b 154
+b 132
+b 1
+b 150
+b 1
+b 23
+b 31
+b 23
+b 1
+b 75
+b 8
+b 10
+b 11
+b 21
+b 8
+b 2
+b 18
+b 1
+b 93
+b 105
+b 107
+b 105
+b 1
+b 48
+b 25
+b 118
+b 120
+b 122
+b 124
+b 120
+b 1
+b 32
+b 69
+b 98
+b 31
+b 1
+b 212
+b 219
+b 209
+b 1
+b 195
+b 17
+b 19
+b 17
+b 1
+b 47
+b 46
+b 1
+b 130
+b 132
+b 34
+b 59
+b 33
+b 1
+b 20
+b 66
+b 74
+b 76
+b 74
+b 1
+b 120
+b 119
+b 1
+b 99
+b 123
+b 122
+b 1
+b 156
+b 221
+b 87
+b 89
+b 108
+b 107
+b 1
+b 9
+b 27
+b 13
+b 300
+b 300
+b 1
+b 121
+b 118
+b 1
+b 64
+b 85
+b 87
+b 198
+b 200
+b 210
+b 212
+b 198
+b 1
+b 137
+b 139
+b 141
+b 112
+b 3
+b 0
+b 1
+b 49
+b 47
+b 1
+b 23
+b 48
+b 102
+b 46
+b 2
+b 54
+b 52
+b 1
+b 665
+b 686
+b 685
+b 1
+b 262
+b 18
+b 18
+b 27
+b 12
+b 14
+b 8
+b 7
+b 1
+b 23
+b 30
+b 32
+b 34
+b 34
+b 1
+b 20
+b 1
+b 187
+b 189
+b 185
+b 1
+b 12
+b 10
+b 1
+b 81
+b 88
+b 89
+b 91
+b 93
+b 88
+b 2
+b 78
+b 1
+b 9
+b 11
+b 19
+b 18
+b 1
+b 3
+b 85
+b 14
+b 44
+b 46
+b 4
+b 66
+b 73
+b 72
+b 2
+b 51
+b 52
+b 64
+b 50
+b 1
+b 58
+b 68
+b 70
+b 70
+b 1
+b 56
+b 1
+b 43
+b 83
+b 85
+b 83
+b 1
+b 103
+b 102
+b 1
+b 6
+b 11
+b 25
+b 9
+b 1
+b 24
+b 1
+b 97
+b 95
+b 1
+b 14
+b 22
+b 21
+b 1
+b 96
+b 106
+b 94
+b 2
+b 14
+b 15
+b 14
+b 1
+b 67
+b 13
+b 20
+b 1
+b 12
+b 21
+b 22
+b 133
+b 20
+b 1
+b 16
+b 18
+b 20
+b 21
+b 40
+b 18
+b 2
+b 37
+b 1
+b 31
+b 94
+b 27
+b 3
+b 4
+b 30
+b 3
+b 2
+b 26
+b 1
+b 28
+b 28
+b 1
+b 43
+b 57
+b 58
+b 67
+b 57
+b 1
+b 64
+b 1
+b 92
+b 46
+b 48
+b 16
+b 15
+b 1
+b 7
+b 30
+b 32
+b 37
+b 39
+b 41
+b 43
+b 45
+b 35
+b 1
+b 323
+b 338
+b 27
+b 43
+b 90
+b 92
+b 4
+b 5
+b 7
+b 3
+b 1
+b 2
+b 16
+b 17
+b 19
+b 14
+b 2
+b 2
+b 1
+b 15
+b 1
+b 30
+b 47
+b 263
+b 295
+b 262
+b 2
+b 291
+b 1
+b 40
+b 152
+b 153
+b 155
+b 152
+b 2
+b 9
+b 19
+b 18
+b 1
+b 64
+b 74
+b 977
+b 976
+b 1
+b 15
+b 16
+b 15
+b 1
+b 27
+b 35
+b 190
+b 201
+b 202
+b 200
+b 1
+b 30
+b 44
+b 27
+b 1
+b 62
+b 34
+b 29
+b 31
+b 33
+b 31
+b 1
+b 11
+b 9
+b 2
+b 19
+b 19
+b 1
+b 84
+b 84
+b 1
+b 2
+b 139
+b 138
+b 1
+b 158
+b 9
+b 25
+b 23
+b 1
+b 61
+b 63
+b 65
+b 72
+b 201
+b 203
+b 213
+b 203
+b 1
+b 210
+b 1
+b 145
+b 146
+b 148
+b 172
+b 174
+b 145
+b 2
+b 35
+b 170
+b 170
+b 1
+b 156
+b 158
+b 160
+b 156
+b 1
+b 206
+b 194
+b 193
+b 2
+b 120
+b 141
+b 143
+b 119
+b 1
+b 136
+b 1
+b 8
+b 121
+b 129
+b 143
+b 326
+b 150
+b 157
+b 164
+b 156
+b 1
+b 177
+b 243
+b 177
+b 1
+b 212
+b 44
+b 43
+b 1
+b 135
+b 5
+b 4
+b 1
+b 96
+b 94
+b 1
+b 139
+b 200
+b 207
+b 138
+b 1
+b 57
+b 54
+b 1
+b 84
+b 84
+b 1
+b 570
+b 600
+b 219
+b 218
+b 1
+b 61
+b 70
+b 18
+b 60
+b 17
+b 1
+b 117
+b 42
+b 41
+b 1
+b 46
+b 34
+b 34
+b 1
+b 35
+b 138
+b 144
+b 145
+b 153
+b 142
+b 2
+b 137
+b 1
+b 149
+b 1
+b 171
+b 146
+b 241
+b 242
+b 244
+b 241
+b 2
+b 144
+b 1
+b 1
+b 18
+b 20
+b 0
+b 2
+b 259
+b 267
+b 269
+b 258
+b 2
+b 190
+b 207
+b 189
+b 1
+b 203
+b 1
+b 31
+b 25
+b 27
+b 29
+b 23
+b 22
+b 2
+b 4
+b 16
+b 155
+b 31
+b 33
+b 2
+b 4
+b 6
+b 2
+b 1
+b 167
+b 180
+b 166
+b 1
+b 175
+b 1
+b 335
+b 235
+b 237
+b 235
+b 1
+b 103
+b 101
+b 1
+b 3
+b 0
+b 1
+b 11
+b 13
+b 7
+b 141
+b 9
+b 56
+b 58
+b 19
+b 18
+b 1
+b 5
+b 7
+b 8
+b 15
+b 7
+b 1
+b 157
+b 165
+b 167
+b 31
+b 49
+b 54
+b 48
+b 1
+b 13
+b 12
+b 1
+b 69
+b 17
+b 16
+b 1
+b 72
+b 72
+b 1
+b 3
+b 93
+b 107
+b 91
+b 1
+b 105
+b 1
+b 86
+b 90
+b 95
+b 104
+b 67
+b 66
+b 1
+b 60
+b 72
+b 71
+b 1
+b 72
+b 71
+b 1
+b 308
+b 308
+b 1
+b 129
+b 126
+b 1
+b 398
+b 413
+b 412
+b 1
+b 17
+b 14
+b 1
+b 163
+b 160
+b 1
+b 59
+b 57
+b 2
+b 64
+b 92
+b 94
+b 63
+b 1
+b 94
+b 96
+b 4
+b 134
+b 13
+b 36
+b 35
+b 1
+b 26
+b 32
+b 33
+b 57
+b 32
+b 1
+b 53
+b 1
+b 76
+b 88
+b 11
+b 25
+b 26
+b 18
+b 15
+b 1
+b 129
+b 162
+b 161
+b 1
+b 135
+b 136
+b 138
+b 6
+b 4
+b 1
+b 3
+b 0
+b 1
+b 129
+b 145
+b 597
+b 599
+b 5
+b 77
+b 79
+b 16
+b 25
+b 24
+b 1
+b 29
+b 28
+b 2
+b 95
+b 97
+b 99
+b 101
+b 97
+b 1
+b 148
+b 198
+b 146
+b 1
+b 193
+b 1
+b 34
+b 41
+b 40
+b 1
+b 8
+b 153
+b 49
+b 38
+b 36
+b 2
+b 22
+b 3
+b 206
+b 115
+b 159
+b 158
+b 1
+b 13
+b 15
+b 17
+b 32
+b 39
+b 109
+b 111
+b 113
+b 114
+b 113
+b 1
+b 13
+b 13
+b 1
+b 297
+b 61
+b 60
+b 1
+b 145
+b 48
+b 50
+b 48
+b 1
+b 69
+b 17
+b 33
+b 25
+b 83
+b 41
+b 43
+b 39
+b 1
+b 0
+b 2
+b 2
+b 1
+b 117
+b 52
+b 66
+b 51
+b 1
+b 62
+b 1
+b 206
+b 214
+b 203
+b 1
+b 126
+b 138
+b 137
+b 1
+b 17
+b 22
+b 24
+b 15
+b 2
+b 22
+b 1
+b 14
+b 16
+b 23
+b 167
+b 183
+b 184
+b 183
+b 1
+b 177
+b 114
+b 81
+b 79
+b 2
+b 2
+b 8
+b 25
+b 48
+b 47
+b 1
+b 370
+b 385
+b 384
+b 1
+b 44
+b 45
+b 47
+b 43
+b 1
+b 6
+b 3
+b 1
+b 331
+b 344
+b 329
+b 1
+b 343
+b 1
+b 83
+b 83
+b 1
+b 11
+b 11
+b 1
+b 73
+b 74
+b 84
+b 98
+b 72
+b 1
+b 96
+b 2
+b 15
+b 21
+b 35
+b 23
+b 24
+b 42
+b 49
+b 23
+b 1
+b 39
+b 2
+b 262
+b 261
+b 1
+b 14
+b 46
+b 370
+b 372
+b 372
+b 1
+b 33
+b 31
+b 2
+b 83
+b 81
+b 1
+b 3
+b 4
+b 8
+b 20
+b 3
+b 2
+b 4
+b 1
+b 55
+b 57
+b 79
+b 78
+b 1
+b 24
+b 34
+b 70
+b 72
+b 40
+b 39
+b 1
+b 40
+b 42
+b 42
+b 1
+b 283
+b 390
+b 282
+b 2
+b 390
+b 104
+b 111
+b 103
+b 1
+b 27
+b 29
+b 61
+b 96
+b 98
+b 26
+b 28
+b 30
+b 24
+b 1
+b 10
+b 9
+b 1
+b 5
+b 7
+b 7
+b 126
+b 159
+b 124
+b 1
+b 5
+b 3
+b 2
+b 288
+b 299
+b 298
+b 1
+b 15
+b 14
+b 1
+b 71
+b 23
+b 22
+b 2
+b 69
+b 68
+b 1
+b 53
+b 54
+b 53
+b 1
+b 121
+b 1
+b 63
+b 63
+b 1
+b 4
+b 6
+b 7
+b 0
+b 77
+b 109
+b 110
+b 112
+b 120
+b 107
+b 2
+b 77
+b 1
+b 115
+b 1
+b 199
+b 206
+b 1
+b 176
+b 213
+b 211
+b 1
+b 176
+b 1
+b 10
+b 21
+b 70
+b 69
+b 1
+b 63
+b 141
+b 77
+b 76
+b 2
+b 7
+b 5
+b 1
+b 11
+b 27
+b 80
+b 82
+b 84
+b 85
+b 82
+b 2
+b 9
+b 130
+b 148
+b 162
+b 179
+b 181
+b 106
+b 108
+b 130
+b 103
+b 1
+b 180
+b 194
+b 196
+b 194
+b 1
+b 56
+b 75
+b 284
+b 286
+b 288
+b 290
+b 284
+b 1
+b 42
+b 6
+b 5
+b 1
+b 210
+b 10
+b 47
+b 105
+b 1
+b 47
+b 7
+b 9
+b 52
+b 51
+b 1
+b 3
+b 195
+b 202
+b 349
+b 376
+b 162
+b 164
+b 162
+b 1
+b 2
+b 34
+b 52
+b 51
+b 1
+b 13
+b 13
+b 1
+b 11
+b 36
+b 60
+b 8
+b 1
+b 57
+b 1
+b 270
+b 270
+b 1
+b 115
+b 192
+b 113
+b 2
+b 84
+b 99
+b 83
+b 2
+b 95
+b 1
+b 74
+b 89
+b 110
+b 108
+b 1
+b 191
+b 193
+b 195
+b 191
+b 1
+b 82
+b 81
+b 1
+b 1
+b 1
+b 1
+b 336
+b 338
+b 340
+b 33
+b 43
+b 43
+b 1
+b 42
+b 44
+b 20
+b 22
+b 42
+b 41
+b 2
+b 5
+b 4
+b 1
+b 4
+b 3
+b 3
+b 1
+b 82
+b 106
+b 107
+b 115
+b 106
+b 2
+b 79
+b 1
+b 109
+b 1
+b 27
+b 29
+b 31
+b 29
+b 1
+b 79
+b 78
+b 1
+b 5
+b 14
+b 16
+b 18
+b 95
+b 96
+b 98
+b 93
+b 2
+b 9
+b 58
+b 117
+b 57
+b 1
+b 245
+b 267
+b 265
+b 1
+b 245
+b 1
+b 192
+b 194
+b 196
+b 192
+b 1
+b 37
+b 39
+b 37
+b 1
+b 14
+b 1
+b 35
+b 37
+b 39
+b 58
+b 33
+b 1
+b 147
+b 1
+b 19
+b 16
+b 1
+b 24
+b 26
+b 28
+b 30
+b 26
+b 1
+b 27
+b 99
+b 32
+b 31
+b 1
+b 7
+b 40
+b 42
+b 50
+b 42
+b 1
+b 47
+b 1
+b 7
+b 9
+b 11
+b 94
+b 94
+b 1
+b 0
+b 2
+b 10
+b 0
+b 1
+b 116
+b 7
+b 101
+b 115
+b 100
+b 2
+b 111
+b 1
+b 3
+b 80
+b 82
+b 84
+b 84
+b 1
+b 3
+b 5
+b 82
+b 84
+b 86
+b 88
+b 80
+b 1
+b 10
+b 123
+b 185
+b 227
+b 301
+b 308
+b 44
+b 51
+b 58
+b 43
+b 1
+b 162
+b 175
+b 162
+b 1
+b 96
+b 106
+b 108
+b 108
+b 1
+b 94
+b 1
+b 23
+b 31
+b 97
+b 131
+b 97
+b 1
+b 77
+b 1
+b 19
+b 30
+b 32
+b 34
+b 30
+b 1
+b 2
+b 4
+b 4
+b 1
+b 28
+b 26
+b 1
+b 10
+b 11
+b 41
+b 10
+b 1
+b 91
+b 91
+b 1
+b 25
+b 86
+b 117
+b 10
+b 22
+b 23
+b 112
+b 128
+b 8
+b 1
+b 21
+b 1
+b 74
+b 34
+b 21
+b 35
+b 176
+b 187
+b 185
+b 1
+b 80
+b 87
+b 86
+b 2
+b 14
+b 196
+b 209
+b 211
+b 0
+b 2
+b 4
+b 28
+b 26
+b 2
+b 13
+b 24
+b 21
+b 1
+b 155
+b 167
+b 155
+b 1
+b 106
+b 114
+b 112
+b 2
+b 18
+b 6
+b 8
+b 113
+b 120
+b 122
+b 133
+b 158
+b 160
+b 160
+b 1
+b 130
+b 1
+b 41
+b 43
+b 91
+b 90
+b 1
+b 27
+b 26
+b 1
+b 119
+b 119
+b 1
+b 4
+b 3
+b 2
+b 284
+b 323
+b 322
+b 1
+b 8
+b 10
+b 64
+b 6
+b 40
+b 77
+b 39
+b 2
+b 73
+b 1
+b 273
+b 274
+b 276
+b 322
+b 273
+b 2
+b 318
+b 1
+b 20
+b 34
+b 36
+b 156
+b 158
+b 160
+b 158
+b 1
+b 46
+b 48
+b 55
+b 43
+b 1
+b 52
+b 1
+b 31
+b 33
+b 35
+b 535
+b 537
+b 532
+b 1
+b 203
+b 202
+b 1
+b 8
+b 10
+b 12
+b 969
+b 37
+b 38
+b 40
+b 35
+b 2
+b 38
+b 1
+b 263
+b 260
+b 1
+b 2
+b 671
+b 673
+b 675
+b 673
+b 1
+b 52
+b 49
+b 1
+b 74
+b 74
+b 1
+b 0
+b 87
+b 11
+b 28
+b 27
+b 1
+b 70
+b 0
+b 2
+b 45
+b 43
+b 2
+b 75
+b 90
+b 91
+b 90
+b 1
+b 72
+b 1
+b 91
+b 20
+b 56
+b 30
+b 32
+b 29
+b 44
+b 21
+b 19
+b 1
+b 8
+b 5
+b 1
+b 44
+b 86
+b 8
+b 239
+b 257
+b 255
+b 2
+b 238
+b 1
+b 9
+b 78
+b 86
+b 178
+b 3
+b 2
+b 2
+b 3
+b 0
+b 1
+b 39
+b 61
+b 37
+b 1
+b 19
+b 18
+b 1
+b 302
+b 5
+b 16
+b 14
+b 1
+b 4
+b 1
+b 58
+b 74
+b 76
+b 72
+b 1
+b 57
+b 1
+b 51
+b 65
+b 63
+b 2
+b 50
+b 1
+b 3
+b 68
+b 70
+b 72
+b 73
+b 75
+b 77
+b 72
+b 2
+b 12
+b 11
+b 1
+b 144
+b 146
+b 57
+b 26
+b 94
+b 115
+b 116
+b 114
+b 1
+b 12
+b 32
+b 10
+b 1
+b 209
+b 211
+b 213
+b 104
+b 111
+b 102
+b 2
+b 97
+b 96
+b 1
+b 33
+b 31
+b 2
+b 8
+b 8
+b 1
+b 710
+b 1073
+b 1070
+b 1
+b 87
+b 122
+b 168
+b 121
+b 1
+b 556
+b 558
+b 560
+b 562
+b 558
+b 1
+b 6
+b 8
+b 9
+b 6
+b 2
+b 7
+b 0
+b 2
+b 2
+b 1
+b 13
+b 15
+b 17
+b 17
+b 1
+b 10
+b 1
+b 55
+b 26
+b 2
+b 167
+b 169
+b 171
+b 173
+b 173
+b 1
+b 132
+b 134
+b 129
+b 1
+b 23
+b 22
+b 2
+b 193
+b 191
+b 2
+b 78
+b 9
+b 1
+b 0
+b 1
+b 113
+b 60
+b 101
+b 102
+b 104
+b 106
+b 100
+b 1
+b 105
+b 1
+b 34
+b 90
+b 92
+b 50
+b 97
+b 99
+b 2
+b 39
+b 44
+b 43
+b 1
+b 234
+b 236
+b 124
+b 126
+b 128
+b 130
+b 132
+b 134
+b 122
+b 1
+b 22
+b 20
+b 1
+b 12
+b 12
+b 1
+b 50
+b 52
+b 54
+b 56
+b 34
+b 54
+b 33
+b 1
+b 0
+b 2
+b 13
+b 15
+b 387
+b 438
+b 440
+b 1131
+b 1133
+b 1
+b 9
+b 0
+b 1
+b 579
+b 587
+b 585
+b 1
+b 38
+b 45
+b 36
+b 1
+b 44
+b 1
+b 5
+b 12
+b 7
+b 80
+b 149
+b 163
+b 170
+b 169
+b 1
+b 19
+b 95
+b 127
+b 136
+b 138
+b 29
+b 36
+b 103
+b 100
+b 1
+b 10
+b 11
+b 9
+b 1
+b 4
+b 139
+b 160
+b 162
+b 150
+b 159
+b 169
+b 158
+b 2
+b 65
+b 67
+b 0
+b 2
+b 38
+b 40
+b 42
+b 36
+b 1
+b 0
+b 234
+b 51
+b 7
+b 19
+b 7
+b 1
+b 113
+b 123
+b 121
+b 2
+b 15
+b 150
+b 147
+b 1
+b 22
+b 62
+b 60
+b 4
+b 3
+b 1
+b 5
+b 6
+b 7
+b 9
+b 22
+b 52
+b 54
+b 50
+b 1
+b 1
+b 0
+b 1
+b 15
+b 186
+b 0
+b 56
+b 3
+b 3
+b 10
+b 4
+b 3
+b 1
+b 52
+b 7
+b 6
+b 2
+b 21
+b 3
+b 0
+b 111
+b 51
+b 48
+b 1
+b 3
+b 0
+b 1
+b 74
+b 76
+b 78
+b 250
+b 252
+b 286
+b 287
+b 301
+b 248
+b 1
+b 285
+b 1
+b 86
+b 16
+b 68
+b 66
+b 2
+b 15
+b 1
+b 15
+b 24
+b 8
+b 16
+b 24
+b 26
+b 28
+b 24
+b 1
+b 10
+b 20
+b 21
+b 41
+b 20
+b 1
+b 38
+b 2
+b 70
+b 85
+b 55
+b 56
+b 53
+b 1
+b 153
+b 155
+b 153
+b 1
+b 5
+b 7
+b 13
+b 5
+b 1
+b 73
+b 75
+b 77
+b 79
+b 71
+b 1
+b 23
+b 36
+b 31
+b 31
+b 1
+b 2
+b 10
+b 12
+b 13
+b 24
+b 5
+b 5
+b 7
+b 9
+b 10
+b 12
+b 14
+b 7
+b 2
+b 183
+b 3
+b 16
+b 23
+b 29
+b 15
+b 1
+b 21
+b 23
+b 25
+b 26
+b 28
+b 23
+b 2
+b 13
+b 11
+b 1
+b 8
+b 10
+b 21
+b 6
+b 1
+b 19
+b 1
+b 25
+b 26
+b 14
+b 3
+b 28
+b 30
+b 16
+b 188
+b 187
+b 1
+b 0
+b 2
+b 0
+b 1
+b 3
+b 61
+b 63
+b 4
+b 141
+b 170
+b 171
+b 179
+b 140
+b 2
+b 167
+b 1
+b 58
+b 82
+b 81
+b 1
+b 29
+b 22
+b 30
+b 32
+b 28
+b 1
+b 21
+b 1
+b 41
+b 39
+b 2
+b 10
+b 27
+b 7
+b 1
+b 212
+b 210
+b 2
+b 19
+b 19
+b 1
+b 127
+b 2
+b 71
+b 72
+b 96
+b 71
+b 2
+b 4
+b 1
+b 1
+b 144
+b 146
+b 142
+b 1
+b 59
+b 58
+b 1
+b 73
+b 71
+b 1
+b 2
+b 3
+b 9
+b 0
+b 2
+b 6
+b 1
+b 27
+b 43
+b 44
+b 57
+b 41
+b 2
+b 54
+b 1
+b 163
+b 124
+b 5
+b 7
+b 9
+b 5
+b 1
+b 16
+b 36
+b 37
+b 16
+b 1
+b 34
+b 1
+b 3
+b 24
+b 38
+b 37
+b 1
+b 14
+b 11
+b 1
+b 226
+b 228
+b 230
+b 231
+b 249
+b 228
+b 2
+b 247
+b 1
+b 71
+b 70
+b 1
+b 14
+b 0
+b 1
+b 5
+b 26
+b 34
+b 44
+b 44
+b 1
+b 18
+b 661
+b 659
+b 1
+b 256
+b 254
+b 1
+b 352
+b 5
+b 5
+b 1
+b 47
+b 45
+b 2
+b 25
+b 10
+b 9
+b 1
+b 116
+b 124
+b 115
+b 2
+b 95
+b 99
+b 100
+b 99
+b 1
+b 307
+b 304
+b 1
+b 20
+b 15
+b 194
+b 201
+b 193
+b 1
+b 7
+b 16
+b 142
+b 140
+b 2
+b 19
+b 20
+b 42
+b 19
+b 1
+b 4
+b 33
+b 3
+b 1
+b 66
+b 38
+b 14
+b 11
+b 1
+b 5
+b 24
+b 25
+b 47
+b 23
+b 1
+b 1
+b 1
+b 1
+b 201
+b 199
+b 1
+b 3
+b 22
+b 1
+b 1
+b 14
+b 28
+b 28
+b 1
+b 14
+b 13
+b 1
+b 74
+b 81
+b 91
+b 93
+b 93
+b 1
+b 52
+b 51
+b 1
+b 18
+b 20
+b 22
+b 24
+b 16
+b 27
+b 28
+b 35
+b 26
+b 1
+b 33
+b 1
+b 81
+b 79
+b 1
+b 14
+b 15
+b 28
+b 13
+b 1
+b 46
+b 45
+b 2
+b 22
+b 84
+b 25
+b 27
+b 28
+b 69
+b 27
+b 1
+b 47
+b 49
+b 80
+b 47
+b 1
+b 146
+b 37
+b 39
+b 8
+b 10
+b 38
+b 384
+b 389
+b 26
+b 28
+b 39
+b 26
+b 1
+b 11
+b 13
+b 15
+b 17
+b 13
+b 19
+b 17
+b 1
+b 12
+b 1
+b 0
+b 2
+b 3
+b 16
+b 0
+b 2
+b 13
+b 12
+b 1
+b 8
+b 25
+b 24
+b 2
+b 15
+b 40
+b 14
+b 1
+b 103
+b 103
+b 1
+b 5
+b 7
+b 9
+b 11
+b 7
+b 1
+b 84
+b 83
+b 1
+b 21
+b 21
+b 1
+b 15
+b 12
+b 1
+b 53
+b 55
+b 68
+b 66
+b 2
+b 77
+b 79
+b 81
+b 130
+b 72
+b 74
+b 76
+b 90
+b 24
+b 57
+b 58
+b 72
+b 78
+b 57
+b 2
+b 0
+b 27
+b 46
+b 48
+b 54
+b 55
+b 57
+b 52
+b 2
+b 230
+b 232
+b 233
+b 230
+b 2
+b 8
+b 8
+b 1
+b 48
+b 54
+b 55
+b 52
+b 2
+b 47
+b 1
+b 7
+b 21
+b 20
+b 1
+b 9
+b 7
+b 1
+b 3
+b 164
+b 32
+b 34
+b 32
+b 1
+b 264
+b 271
+b 272
+b 281
+b 271
+b 1
+b 278
+b 1
+b 9
+b 8
+b 1
+b 37
+b 46
+b 7
+b 252
+b 308
+b 251
+b 1
+b 303
+b 1
+b 140
+b 168
+b 167
+b 2
+b 705
+b 707
+b 708
+b 707
+b 1
+b 264
+b 266
+b 266
+b 1
+b 127
+b 21
+b 19
+b 1
+b 55
+b 62
+b 144
+b 142
+b 2
+b 22
+b 0
+b 2
+b 2
+b 1
+b 67
+b 77
+b 76
+b 1
+b 24
+b 26
+b 28
+b 22
+b 1
+b 27
+b 1
+b 27
+b 29
+b 63
+b 61
+b 29
+b 94
+b 100
+b 30
+b 19
+b 141
+b 38
+b 39
+b 0
+b 58
+b 101
+b 23
+b 53
+b 55
+b 119
+b 3
+b 5
+b 19
+b 0
+b 1
+b 251
+b 209
+b 207
+b 1
+b 106
+b 122
+b 21
+b 27
+b 28
+b 30
+b 27
+b 2
+b 4
+b 2
+b 1
+b 16
+b 18
+b 20
+b 22
+b 23
+b 25
+b 27
+b 20
+b 2
+b 25
+b 1
+b 117
+b 131
+b 116
+b 1
+b 369
+b 367
+b 1
+b 31
+b 33
+b 34
+b 31
+b 2
+b 6
+b 149
+b 154
+b 155
+b 170
+b 148
+b 1
+b 70
+b 72
+b 70
+b 1
+b 33
+b 22
+b 23
+b 25
+b 27
+b 21
+b 1
+b 35
+b 33
+b 1
+b 78
+b 3
+b 0
+b 1
+b 23
+b 36
+b 38
+b 40
+b 41
+b 51
+b 38
+b 2
+b 59
+b 58
+b 2
+b 3
+b 4
+b 6
+b 53
+b 2
+b 1
+b 70
+b 72
+b 74
+b 2
+b 2
+b 1
+b 3
+b 4
+b 13
+b 2
+b 1
+b 4
+b 2
+b 1
+b 31
+b 31
+b 1
+b 26
+b 28
+b 35
+b 26
+b 1
+b 180
+b 178
+b 1
+b 2
+b 4
+b 0
+b 1
+b 47
+b 13
+b 0
+b 2
+b 4
+b 2
+b 1
+b 20
+b 17
+b 1
+b 49
+b 51
+b 46
+b 1
+b 20
+b 147
+b 146
+b 1
+b 95
+b 29
+b 8
+b 10
+b 39
+b 47
+b 37
+b 2
+b 10
+b 1
+b 8
+b 10
+b 12
+b 13
+b 15
+b 17
+b 8
+b 1
+b 24
+b 103
+b 105
+b 23
+b 1
+b 98
+b 1
+b 280
+b 282
+b 284
+b 286
+b 284
+b 1
+b 113
+b 115
+b 113
+b 1
+b 179
+b 50
+b 52
+b 30
+b 9
+b 43
+b 44
+b 55
+b 43
+b 1
+b 110
+b 110
+b 1
+b 11
+b 13
+b 9
+b 1
+b 7
+b 9
+b 38
+b 36
+b 1
+b 244
+b 245
+b 259
+b 269
+b 244
+b 2
+b 255
+b 1
+b 102
+b 99
+b 1
+b 18
+b 27
+b 40
+b 42
+b 44
+b 578
+b 18
+b 8
+b 13
+b 66
+b 67
+b 69
+b 65
+b 1
+b 154
+b 166
+b 126
+b 127
+b 129
+b 3
+b 148
+b 10
+b 2
+b 26
+b 348
+b 348
+b 1
+b 14
+b 15
+b 31
+b 14
+b 2
+b 26
+b 36
+b 10
+b 10
+b 1
+b 0
+b 2
+b 12
+b 0
+b 1
+b 313
+b 312
+b 2
+b 106
+b 37
+b 37
+b 1
+b 84
+b 81
+b 1
+b 23
+b 21
+b 1
+b 43
+b 12
+b 11
+b 1
+b 169
+b 171
+b 8
+b 7
+b 1
+b 132
+b 143
+b 168
+b 10
+b 12
+b 14
+b 30
+b 10
+b 1
+b 14
+b 21
+b 23
+b 21
+b 1
+b 48
+b 74
+b 8
+b 5
+b 6
+b 2
+b 1
+b 7
+b 7
+b 1
+b 104
+b 104
+b 1
+b 151
+b 148
+b 1
+b 226
+b 228
+b 230
+b 230
+b 1
+b 14
+b 16
+b 18
+b 20
+b 18
+b 1
+b 77
+b 83
+b 12
+b 18
+b 19
+b 21
+b 23
+b 17
+b 1
+b 11
+b 1
+b 7
+b 14
+b 275
+b 0
+b 2
+b 0
+b 2
+b 48
+b 65
+b 48
+b 1
+b 61
+b 1
+b 36
+b 35
+b 1
+b 134
+b 152
+b 151
+b 2
+b 315
+b 317
+b 319
+b 321
+b 317
+b 1
+b 82
+b 184
+b 81
+b 1
+b 179
+b 1
+b 37
+b 295
+b 12
+b 14
+b 35
+b 191
+b 193
+b 194
+b 207
+b 193
+b 1
+b 204
+b 2
+b 252
+b 250
+b 1
+b 29
+b 30
+b 28
+b 1
+b 127
+b 25
+b 27
+b 27
+b 1
+b 25
+b 27
+b 28
+b 25
+b 2
+b 7
+b 19
+b 18
+b 2
+b 4
+b 5
+b 9
+b 3
+b 1
+b 2
+b 96
+b 118
+b 120
+b 94
+b 2
+b 186
+b 251
+b 185
+b 1
+b 298
+b 238
+b 16
+b 16
+b 1
+b 29
+b 36
+b 120
+b 74
+b 74
+b 1
+b 1
+b 0
+b 1
+b 28
+b 183
+b 181
+b 2
+b 11
+b 8
+b 1
+b 72
+b 79
+b 81
+b 81
+b 1
+b 69
+b 1
+b 23
+b 31
+b 32
+b 38
+b 30
+b 1
+b 8
+b 10
+b 2
+b 4
+b 5
+b 0
+b 1
+b 37
+b 70
+b 36
+b 1
+b 50
+b 21
+b 23
+b 21
+b 1
+b 122
+b 127
+b 72
+b 74
+b 76
+b 78
+b 33
+b 44
+b 208
+b 220
+b 231
+b 218
+b 2
+b 207
+b 1
+b 148
+b 150
+b 158
+b 145
+b 1
+b 155
+b 1
+b 46
+b 62
+b 8
+b 7
+b 1
+b 73
+b 79
+b 95
+b 101
+b 38
+b 46
+b 47
+b 55
+b 64
+b 45
+b 1
+b 62
+b 2
+b 141
+b 146
+b 148
+b 140
+b 1
+b 68
+b 68
+b 1
+b 374
+b 376
+b 377
+b 374
+b 2
+b 4
+b 19
+b 32
+b 17
+b 1
+b 36
+b 38
+b 40
+b 47
+b 34
+b 1
+b 174
+b 176
+b 178
+b 180
+b 176
+b 1
+b 160
+b 62
+b 67
+b 68
+b 76
+b 76
+b 1
+b 64
+b 1
+b 83
+b 91
+b 205
+b 249
+b 250
+b 273
+b 248
+b 1
+b 204
+b 1
+b 0
+b 0
+b 3
+b 9
+b 8
+b 2
+b 0
+b 2
+b 352
+b 359
+b 300
+b 302
+b 314
+b 53
+b 58
+b 64
+b 8
+b 38
+b 64
+b 37
+b 1
+b 60
+b 1
+b 128
+b 127
+b 2
+b 34
+b 66
+b 31
+b 1
+b 119
+b 8
+b 10
+b 8
+b 1
+b 41
+b 42
+b 50
+b 39
+b 2
+b 47
+b 1
+b 170
+b 172
+b 172
+b 1
+b 197
+b 198
+b 200
+b 202
+b 196
+b 1
+b 201
+b 1
+b 163
+b 172
+b 174
+b 162
+b 1
+b 40
+b 42
+b 44
+b 46
+b 32
+b 67
+b 30
+b 1
+b 13
+b 21
+b 22
+b 94
+b 4
+b 3
+b 1
+b 14
+b 13
+b 1
+b 45
+b 65
+b 66
+b 72
+b 63
+b 2
+b 44
+b 1
+b 161
+b 21
+b 70
+b 67
+b 1
+b 9
+b 28
+b 7
+b 2
+b 258
+b 255
+b 1
+b 92
+b 114
+b 115
+b 113
+b 1
+b 1
+b 549
+b 561
+b 197
+b 7
+b 9
+b 61
+b 60
+b 1
+b 157
+b 158
+b 160
+b 16
+b 8
+b 21
+b 23
+b 21
+b 1
+b 56
+b 54
+b 55
+b 54
+b 1
+b 32
+b 29
+b 1
+b 315
+b 317
+b 318
+b 320
+b 315
+b 2
+b 31
+b 32
+b 61
+b 30
+b 1
+b 56
+b 78
+b 126
+b 76
+b 2
+b 55
+b 1
+b 19
+b 30
+b 37
+b 38
+b 40
+b 29
+b 2
+b 34
+b 1
+b 189
+b 191
+b 193
+b 195
+b 193
+b 1
+b 61
+b 3
+b 13
+b 15
+b 16
+b 18
+b 13
+b 2
+b 2
+b 1
+b 30
+b 32
+b 46
+b 3
+b 22
+b 0
+b 1
+b 19
+b 1
+b 64
+b 66
+b 68
+b 68
+b 1
+b 61
+b 1
+b 4
+b 12
+b 19
+b 118
+b 120
+b 121
+b 130
+b 132
+b 113
+b 110
+b 1
+b 18
+b 107
+b 115
+b 106
+b 1
+b 153
+b 155
+b 156
+b 50
+b 49
+b 1
+b 5
+b 129
+b 68
+b 99
+b 100
+b 102
+b 104
+b 109
+b 118
+b 119
+b 121
+b 139
+b 108
+b 2
+b 115
+b 1
+b 14
+b 15
+b 17
+b 19
+b 14
+b 2
+b 3
+b 1
+b 1
+b 251
+b 285
+b 284
+b 2
+b 7
+b 4
+b 1
+b 2
+b 4
+b 4
+b 1
+b 7
+b 8
+b 15
+b 7
+b 1
+b 7
+b 6
+b 1
+b 41
+b 43
+b 44
+b 46
+b 48
+b 50
+b 43
+b 2
+b 17
+b 16
+b 1
+b 8
+b 10
+b 11
+b 10
+b 2
+b 5
+b 1
+b 0
+b 152
+b 151
+b 1
+b 361
+b 359
+b 2
+b 61
+b 67
+b 51
+b 51
+b 1
+b 61
+b 63
+b 65
+b 66
+b 59
+b 1
+b 69
+b 70
+b 72
+b 103
+b 116
+b 69
+b 2
+b 98
+b 1
+b 100
+b 118
+b 100
+b 1
+b 114
+b 1
+b 5
+b 7
+b 9
+b 11
+b 11
+b 1
+b 42
+b 63
+b 63
+b 1
+b 168
+b 174
+b 165
+b 1
+b 7
+b 6
+b 2
+b 650
+b 651
+b 671
+b 650
+b 1
+b 244
+b 246
+b 246
+b 1
+b 118
+b 116
+b 2
+b 8
+b 0
+b 2
+b 3
+b 142
+b 39
+b 38
+b 2
+b 48
+b 45
+b 1
+b 78
+b 80
+b 82
+b 76
+b 1
+b 4
+b 3
+b 1
+b 404
+b 4
+b 2
+b 1
+b 1
+b 113
+b 90
+b 92
+b 93
+b 90
+b 2
+b 12
+b 17
+b 17
+b 1
+b 19
+b 19
+b 1
+b 27
+b 38
+b 25
+b 2
+b 55
+b 57
+b 71
+b 73
+b 55
+b 1
+b 94
+b 107
+b 3
+b 15
+b 28
+b 29
+b 37
+b 36
+b 1
+b 96
+b 87
+b 44
+b 46
+b 47
+b 0
+b 181
+b 8
+b 270
+b 115
+b 116
+b 123
+b 115
+b 1
+b 120
+b 2
+b 14
+b 44
+b 54
+b 55
+b 68
+b 53
+b 1
+b 92
+b 100
+b 101
+b 103
+b 105
+b 100
+b 2
+b 117
+b 130
+b 115
+b 2
+b 42
+b 41
+b 1
+b 40
+b 42
+b 44
+b 46
+b 47
+b 49
+b 40
+b 1
+b 19
+b 21
+b 27
+b 25
+b 3
+b 74
+b 93
+b 94
+b 111
+b 74
+b 323
+b 321
+b 1
+b 73
+b 62
+b 64
+b 62
+b 1
+b 29
+b 30
+b 41
+b 43
+b 29
+b 1
+b 38
+b 1
+b 256
+b 257
+b 261
+b 265
+b 255
+b 1
+b 263
+b 1
+b 37
+b 5
+b 7
+b 9
+b 11
+b 13
+b 96
+b 107
+b 108
+b 110
+b 105
+b 2
+b 274
+b 291
+b 290
+b 1
+b 129
+b 141
+b 143
+b 144
+b 146
+b 148
+b 146
+b 1
+b 36
+b 17
+b 16
+b 1
+b 1
+b 17
+b 0
+b 1
+b 86
+b 169
+b 170
+b 85
+b 2
+b 166
+b 1
+b 157
+b 16
+b 72
+b 79
+b 102
+b 101
+b 2
+b 70
+b 1
+b 42
+b 41
+b 1
+b 140
+b 70
+b 69
+b 2
+b 22
+b 20
+b 1
+b 46
+b 164
+b 166
+b 64
+b 78
+b 119
+b 60
+b 65
+b 16
+b 18
+b 6
+b 126
+b 128
+b 124
+b 1
+b 5
+b 1
+b 131
+b 156
+b 157
+b 155
+b 1
+b 131
+b 1
+b 18
+b 62
+b 154
+b 165
+b 254
+b 255
+b 254
+b 1
+b 7
+b 66
+b 63
+b 1
+b 1
+b 159
+b 156
+b 1
+b 6
+b 175
+b 19
+b 171
+b 71
+b 68
+b 1
+b 67
+b 69
+b 70
+b 78
+b 67
+b 2
+b 106
+b 108
+b 110
+b 112
+b 113
+b 115
+b 117
+b 108
+b 1
+b 98
+b 104
+b 105
+b 107
+b 109
+b 107
+b 1
+b 414
+b 100
+b 0
+b 40
+b 42
+b 40
+b 1
+b 9
+b 106
+b 103
+b 1
+b 2
+b 3
+b 18
+b 2
+b 1
+b 54
+b 56
+b 57
+b 59
+b 54
+b 2
+b 11
+b 18
+b 150
+b 152
+b 154
+b 156
+b 158
+b 160
+b 162
+b 147
+b 1
+b 381
+b 442
+b 444
+b 380
+b 1
+b 16
+b 100
+b 107
+b 106
+b 1
+b 81
+b 144
+b 145
+b 152
+b 144
+b 1
+b 149
+b 2
+b 34
+b 15
+b 21
+b 22
+b 30
+b 21
+b 1
+b 17
+b 60
+b 5
+b 25
+b 22
+b 1
+b 39
+b 37
+b 1
+b 27
+b 29
+b 41
+b 40
+b 1
+b 30
+b 39
+b 4
+b 6
+b 1
+b 3
+b 30
+b 32
+b 34
+b 36
+b 38
+b 34
+b 1
+b 0
+b 1
+b 2
+b 9
+b 11
+b 148
+b 154
+b 158
+b 156
+b 1
+b 153
+b 1
+b 184
+b 293
+b 294
+b 293
+b 1
+b 50
+b 48
+b 49
+b 51
+b 47
+b 1
+b 35
+b 37
+b 33
+b 1
+b 72
+b 74
+b 76
+b 78
+b 79
+b 81
+b 83
+b 85
+b 21
+b 45
+b 20
+b 1
+b 151
+b 178
+b 180
+b 181
+b 183
+b 229
+b 178
+b 2
+b 226
+b 1
+b 16
+b 21
+b 22
+b 24
+b 26
+b 28
+b 20
+b 1
+b 27
+b 1
+b 48
+b 53
+b 55
+b 56
+b 80
+b 88
+b 53
+b 2
+b 85
+b 1
+b 95
+b 97
+b 99
+b 101
+b 102
+b 101
+b 1
+b 27
+b 26
+b 1
+b 39
+b 2
+b 4
+b 110
+b 116
+b 118
+b 109
+b 2
+b 112
+b 1
+b 135
+b 137
+b 139
+b 139
+b 1
+b 132
+b 1
+b 421
+b 435
+b 8
+b 10
+b 12
+b 13
+b 29
+b 8
+b 1
+b 102
+b 104
+b 106
+b 108
+b 109
+b 130
+b 106
+b 2
+b 219
+b 151
+b 3
+b 58
+b 93
+b 56
+b 1
+b 25
+b 27
+b 28
+b 30
+b 25
+b 2
+b 36
+b 60
+b 62
+b 137
+b 139
+b 141
+b 143
+b 145
+b 147
+b 145
+b 1
+b 82
+b 106
+b 80
+b 1
+b 12
+b 11
+b 1
+b 72
+b 72
+b 1
+b 40
+b 39
+b 1
+b 406
+b 428
+b 404
+b 2
+b 95
+b 96
+b 100
+b 94
+b 1
+b 82
+b 7
+b 45
+b 47
+b 303
+b 305
+b 307
+b 305
+b 1
+b 24
+b 34
+b 23
+b 1
+b 30
+b 1
+b 2
+b 3
+b 5
+b 0
+b 2
+b 16
+b 22
+b 23
+b 21
+b 1
+b 20
+b 58
+b 56
+b 2
+b 65
+b 67
+b 69
+b 70
+b 67
+b 2
+b 31
+b 39
+b 40
+b 50
+b 38
+b 1
+b 25
+b 89
+b 24
+b 1
+b 0
+b 2
+b 3
+b 8
+b 6
+b 16
+b 18
+b 96
+b 113
+b 95
+b 1
+b 306
+b 334
+b 335
+b 353
+b 334
+b 2
+b 303
+b 1
+b 346
+b 1
+b 201
+b 200
+b 1
+b 99
+b 0
+b 2
+b 19
+b 21
+b 23
+b 59
+b 59
+b 1
+b 27
+b 36
+b 35
+b 1
+b 139
+b 141
+b 139
+b 1
+b 16
+b 17
+b 20
+b 22
+b 42
+b 44
+b 45
+b 47
+b 319
+b 340
+b 6
+b 24
+b 47
+b 23
+b 2
+b 43
+b 1
+b 6
+b 1
+b 8
+b 7
+b 1
+b 49
+b 262
+b 261
+b 1
+b 121
+b 122
+b 140
+b 1
+b 144
+b 142
+b 1
+b 6
+b 8
+b 8
+b 1
+b 44
+b 93
+b 94
+b 96
+b 98
+b 93
+b 2
+b 171
+b 173
+b 175
+b 177
+b 100
+b 110
+b 14
+b 37
+b 36
+b 1
+b 59
+b 64
+b 66
+b 67
+b 69
+b 9
+b 1
+b 1
+b 3
+b 5
+b 13
+b 1
+b 1
+b 17
+b 19
+b 39
+b 38
+b 1
+b 293
+b 313
+b 12
+b 21
+b 22
+b 24
+b 10
+b 1
+b 20
+b 2
+b 29
+b 94
+b 96
+b 98
+b 105
+b 106
+b 27
+b 1
+b 89
+b 1
+b 5
+b 3
+b 2
+b 2
+b 0
+b 2
+b 18
+b 20
+b 22
+b 24
+b 18
+b 1
+b 55
+b 3
+b 4
+b 6
+b 2
+b 1
+b 5
+b 17
+b 19
+b 21
+b 23
+b 24
+b 15
+b 1
+b 4
+b 1
+b 30
+b 0
+b 8
+b 9
+b 0
+b 11
+b 25
+b 8
+b 1
+b 976
+b 1001
+b 1002
+b 1008
+b 975
+b 2
+b 998
+b 1
+b 18
+b 21
+b 23
+b 24
+b 40
+b 21
+b 8
+b 13
+b 26
+b 8
+b 10
+b 11
+b 13
+b 15
+b 37
+b 36
+b 1
+b 15
+b 17
+b 19
+b 20
+b 25
+b 17
+b 2
+b 13
+b 10
+b 1
+b 12
+b 16
+b 17
+b 29
+b 215
+b 190
+b 192
+b 190
+b 1
+b 47
+b 49
+b 89
+b 87
+b 2
+b 173
+b 172
+b 1
+b 27
+b 28
+b 22
+b 28
+b 31
+b 30
+b 31
+b 33
+b 71
+b 30
+b 2
+b 175
+b 180
+b 182
+b 174
+b 1
+b 180
+b 189
+b 212
+b 212
+b 1
+b 177
+b 1
+b 55
+b 124
+b 232
+b 0
+b 2
+b 4
+b 6
+b 90
+b 92
+b 94
+b 96
+b 98
+b 100
+b 6
+b 16
+b 44
+b 50
+b 36
+b 35
+b 1
+b 186
+b 192
+b 105
+b 107
+b 108
+b 107
+b 1
+b 16
+b 13
+b 1
+b 62
+b 69
+b 61
+b 1
+b 125
+b 132
+b 123
+b 2
+b 130
+b 1
+b 42
+b 46
+b 57
+b 59
+b 60
+b 44
+b 2
+b 41
+b 1
+b 4
+b 40
+b 42
+b 16
+b 18
+b 16
+b 1
+b 38
+b 7
+b 14
+b 3
+b 25
+b 2
+b 1
+b 14
+b 15
+b 37
+b 34
+b 1
+b 1
+b 3
+b 49
+b 51
+b 53
+b 54
+b 59
+b 52
+b 17
+b 4
+b 42
+b 43
+b 45
+b 289
+b 288
+b 1
+b 1
+b 17
+b 46
+b 20
+b 22
+b 270
+b 272
+b 274
+b 275
+b 277
+b 279
+b 277
+b 1
+b 60
+b 92
+b 99
+b 98
+b 2
+b 85
+b 84
+b 1
+b 14
+b 21
+b 22
+b 19
+b 553
+b 2
+b 4
+b 6
+b 8
+b 4
+b 1
+b 12
+b 48
+b 49
+b 58
+b 219
+b 45
+b 47
+b 70
+b 82
+b 84
+b 85
+b 84
+b 1
+b 18
+b 17
+b 1
+b 3
+b 4
+b 6
+b 16
+b 3
+b 2
+b 246
+b 55
+b 51
+b 10
+b 9
+b 1
+b 98
+b 99
+b 142
+b 144
+b 142
+b 1
+b 43
+b 45
+b 0
+b 8
+b 27
+b 29
+b 31
+b 29
+b 1
+b 136
+b 138
+b 139
+b 1
+b 82
+b 13
+b 25
+b 36
+b 38
+b 1
+b 95
+b 150
+b 151
+b 153
+b 149
+b 1
+b 94
+b 1
+b 69
+b 52
+b 127
+b 129
+b 131
+b 132
+b 129
+b 2
+b 51
+b 1
+b 5
+b 484
+b 503
+b 518
+b 4
+b 12
+b 13
+b 15
+b 17
+b 12
+b 2
+b 2
+b 1
+b 124
+b 126
+b 124
+b 1
+b 3
+b 4
+b 565
+b 567
+b 9
+b 7
+b 1
+b 225
+b 223
+b 1
+b 62
+b 64
+b 66
+b 67
+b 77
+b 64
+b 2
+b 158
+b 160
+b 158
+b 1
+b 54
+b 107
+b 109
+b 111
+b 113
+b 114
+b 151
+b 113
+b 1
+b 104
+b 1
+b 108
+b 109
+b 107
+b 1
+b 0
+b 2
+b 10
+b 5
+b 465
+b 25
+b 27
+b 29
+b 27
+b 1
+b 140
+b 147
+b 159
+b 146
+b 1
+b 30
+b 51
+b 114
+b 112
+b 1
+b 106
+b 105
+b 1
+b 96
+b 98
+b 3
+b 236
+b 238
+b 246
+b 244
+b 1
+b 142
+b 6
+b 7
+b 21
+b 4
+b 2
+b 18
+b 1
+b 58
+b 74
+b 75
+b 81
+b 74
+b 2
+b 77
+b 1
+b 4
+b 543
+b 185
+b 193
+b 194
+b 191
+b 2
+b 184
+b 1
+b 119
+b 116
+b 1
+b 46
+b 17
+b 32
+b 33
+b 1
+b 33
+b 5
+b 6
+b 4
+b 1
+b 2
+b 0
+b 1
+b 29
+b 42
+b 50
+b 28
+b 1
+b 113
+b 119
+b 121
+b 6
+b 3
+b 20
+b 40
+b 19
+b 1
+b 43
+b 2
+b 3
+b 1
+b 4
+b 6
+b 7
+b 3
+b 2
+b 2
+b 9
+b 243
+b 271
+b 8
+b 17
+b 18
+b 6
+b 1
+b 16
+b 1
+b 139
+b 164
+b 176
+b 18
+b 6
+b 28
+b 27
+b 1
+b 12
+b 14
+b 189
+b 191
+b 193
+b 194
+b 196
+b 198
+b 209
+b 193
+b 2
+b 242
+b 244
+b 242
+b 1
+b 63
+b 65
+b 66
+b 87
+b 131
+b 148
+b 105
+b 127
+b 126
+b 1
+b 52
+b 3
+b 82
+b 92
+b 94
+b 92
+b 1
+b 5
+b 68
+b 68
+b 1
+b 49
+b 51
+b 53
+b 2
+b 4
+b 14
+b 10
+b 12
+b 13
+b 10
+b 2
+b 176
+b 23
+b 30
+b 31
+b 33
+b 46
+b 22
+b 2
+b 27
+b 1
+b 164
+b 166
+b 74
+b 223
+b 8
+b 1
+b 11
+b 13
+b 10
+b 20
+b 386
+b 394
+b 422
+b 12
+b 18
+b 19
+b 17
+b 1
+b 1
+b 124
+b 133
+b 134
+b 136
+b 138
+b 133
+b 2
+b 0
+b 39
+b 97
+b 96
+b 1
+b 111
+b 112
+b 114
+b 121
+b 109
+b 2
+b 284
+b 309
+b 311
+b 312
+b 283
+b 1
+b 315
+b 332
+b 347
+b 361
+b 363
+b 346
+b 1
+b 90
+b 17
+b 16
+b 1
+b 6
+b 20
+b 28
+b 29
+b 37
+b 27
+b 1
+b 9
+b 8
+b 1
+b 132
+b 5
+b 11
+b 90
+b 123
+b 125
+b 127
+b 125
+b 1
+b 44
+b 70
+b 72
+b 73
+b 78
+b 72
+b 1
+b 75
+b 2
+b 160
+b 170
+b 172
+b 170
+b 1
+b 163
+b 165
+b 166
+b 168
+b 165
+b 2
+b 28
+b 26
+b 2
+b 14
+b 13
+b 1
+b 3
+b 15
+b 15
+b 1
+b 4
+b 54
+b 104
+b 106
+b 108
+b 109
+b 111
+b 113
+b 115
+b 113
+b 1
+b 115
+b 117
+b 119
+b 117
+b 1
+b 56
+b 4
+b 11
+b 10
+b 1
+b 8
+b 5
+b 7
+b 9
+b 215
+b 217
+b 218
+b 220
+b 237
+b 217
+b 2
+b 9
+b 6
+b 1
+b 45
+b 47
+b 45
+b 1
+b 17
+b 68
+b 74
+b 75
+b 77
+b 143
+b 74
+b 2
+b 139
+b 1
+b 77
+b 79
+b 81
+b 82
+b 88
+b 79
+b 2
+b 3
+b 1
+b 1
+b 321
+b 1
+b 17
+b 44
+b 45
+b 43
+b 1
+b 50
+b 18
+b 16
+b 1
+b 0
+b 1
+b 14
+b 8
+b 58
+b 60
+b 138
+b 139
+b 146
+b 28
+b 25
+b 1
+b 0
+b 7
+b 82
+b 84
+b 86
+b 88
+b 90
+b 86
+b 1
+b 17
+b 26
+b 16
+b 1
+b 22
+b 1
+b 80
+b 118
+b 115
+b 1
+b 12
+b 0
+b 2
+b 0
+b 1
+b 25
+b 27
+b 28
+b 30
+b 30
+b 1
+b 22
+b 18
+b 33
+b 34
+b 46
+b 30
+b 1
+b 0
+b 2
+b 162
+b 159
+b 1
+b 63
+b 64
+b 76
+b 61
+b 2
+b 136
+b 133
+b 1
+b 22
+b 24
+b 19
+b 1
+b 14
+b 13
+b 2
+b 95
+b 97
+b 118
+b 117
+b 1
+b 129
+b 128
+b 1
+b 13
+b 15
+b 43
+b 72
+b 74
+b 76
+b 167
+b 166
+b 1
+b 296
+b 298
+b 10
+b 21
+b 20
+b 1
+b 2
+b 4
+b 6
+b 8
+b 10
+b 11
+b 6
+b 78
+b 80
+b 81
+b 145
+b 78
+b 2
+b 141
+b 2
+b 4
+b 6
+b 2
+b 4
+b 36
+b 38
+b 36
+b 1
+b 15
+b 63
+b 77
+b 78
+b 60
+b 1
+b 153
+b 256
+b 255
+b 2
+b 21
+b 23
+b 24
+b 21
+b 2
+b 28
+b 70
+b 6
+b 75
+b 90
+b 91
+b 74
+b 2
+b 19
+b 32
+b 34
+b 35
+b 18
+b 2
+b 30
+b 2
+b 44
+b 46
+b 26
+b 25
+b 1
+b 13
+b 19
+b 21
+b 23
+b 25
+b 26
+b 150
+b 23
+b 2
+b 146
+b 2
+b 18
+b 24
+b 22
+b 1
+b 140
+b 1
+b 9
+b 10
+b 8
+b 1
+b 15
+b 15
+b 1
+b 25
+b 27
+b 28
+b 30
+b 61
+b 63
+b 25
+b 2
+b 61
+b 1
+b 46
+b 55
+b 56
+b 117
+b 143
+b 3
+b 12
+b 14
+b 10
+b 1
+b 19
+b 20
+b 18
+b 1
+b 17
+b 19
+b 31
+b 30
+b 1
+b 37
+b 37
+b 1
+b 54
+b 55
+b 53
+b 1
+b 0
+b 2
+b 14
+b 4
+b 19
+b 20
+b 22
+b 19
+b 2
+b 32
+b 147
+b 156
+b 156
+b 1
+b 36
+b 38
+b 39
+b 41
+b 38
+b 2
+b 157
+b 156
+b 1
+b 121
+b 123
+b 124
+b 145
+b 27
+b 27
+b 29
+b 30
+b 29
+b 1
+b 1
+b 0
+b 1
+b 334
+b 341
+b 341
+b 1
+b 162
+b 161
+b 2
+b 18
+b 18
+b 1
+b 63
+b 65
+b 65
+b 1
+b 2
+b 10
+b 12
+b 14
+b 12
+b 1
+b 8
+b 10
+b 8
+b 1
+b 29
+b 954
+b 955
+b 957
+b 954
+b 2
+b 23
+b 25
+b 25
+b 1
+b 90
+b 37
+b 39
+b 172
+b 172
+b 1
+b 68
+b 70
+b 144
+b 3
+b 5
+b 5
+b 1
+b 29
+b 9
+b 10
+b 12
+b 9
+b 2
+b 28
+b 27
+b 2
+b 10
+b 9
+b 1
+b 61
+b 62
+b 61
+b 1
+b 21
+b 14
+b 44
+b 76
+b 77
+b 79
+b 76
+b 2
+b 16
+b 36
+b 34
+b 2
+b 107
+b 109
+b 111
+b 112
+b 123
+b 111
+b 2
+b 119
+b 2
+b 104
+b 1
+b 82
+b 108
+b 119
+b 120
+b 128
+b 62
+b 76
+b 77
+b 79
+b 61
+b 2
+b 73
+b 1
+b 12
+b 118
+b 16
+b 17
+b 19
+b 16
+b 2
+b 283
+b 35
+b 32
+b 1
+b 110
+b 110
+b 1
+b 251
+b 253
+b 254
+b 135
+b 142
+b 134
+b 1
+b 270
+b 269
+b 1
+b 183
+b 184
+b 183
+b 1
+b 9
+b 5
+b 20
+b 1
+b 84
+b 90
+b 91
+b 105
+b 107
+b 83
+b 1
+b 184
+b 189
+b 0
+b 1
+b 10
+b 87
+b 89
+b 91
+b 93
+b 93
+b 1
+b 151
+b 149
+b 1
+b 11
+b 20
+b 0
+b 2
+b 10
+b 11
+b 1
+b 63
+b 19
+b 16
+b 1
+b 12
+b 11
+b 2
+b 6
+b 7
+b 9
+b 11
+b 4
+b 2
+b 46
+b 53
+b 43
+b 1
+b 4
+b 10
+b 11
+b 13
+b 9
+b 1
+b 3
+b 1
+b 5
+b 152
+b 152
+b 1
+b 251
+b 249
+b 1
+b 84
+b 86
+b 87
+b 89
+b 86
+b 2
+b 163
+b 160
+b 1
+b 15
+b 22
+b 40
+b 83
+b 97
+b 105
+b 106
+b 108
+b 117
+b 104
+b 1
+b 96
+b 1
+b 10
+b 2
+b 4
+b 5
+b 7
+b 18
+b 121
+b 169
+b 171
+b 172
+b 171
+b 1
+b 118
+b 1
+b 16
+b 70
+b 110
+b 128
+b 130
+b 109
+b 121
+b 122
+b 121
+b 1
+b 101
+b 34
+b 32
+b 2
+b 24
+b 26
+b 27
+b 29
+b 24
+b 2
+b 8
+b 14
+b 14
+b 1
+b 58
+b 50
+b 282
+b 284
+b 285
+b 287
+b 282
+b 2
+b 33
+b 33
+b 1
+b 18
+b 20
+b 22
+b 40
+b 22
+b 1
+b 37
+b 1
+b 76
+b 98
+b 3
+b 4
+b 18
+b 0
+b 1
+b 277
+b 219
+b 225
+b 226
+b 228
+b 224
+b 1
+b 218
+b 1
+b 42
+b 43
+b 45
+b 3
+b 4
+b 101
+b 120
+b 0
+b 1
+b 1
+b 236
+b 252
+b 254
+b 235
+b 1
+b 224
+b 86
+b 138
+b 139
+b 114
+b 41
+b 43
+b 45
+b 47
+b 43
+b 1
+b 13
+b 3
+b 2
+b 2
+b 1
+b 2
+b 33
+b 0
+b 1
+b 63
+b 6
+b 16
+b 23
+b 24
+b 23
+b 2
+b 13
+b 1
+b 39
+b 22
+b 24
+b 25
+b 32
+b 24
+b 1
+b 25
+b 27
+b 29
+b 31
+b 14
+b 81
+b 80
+b 1
+b 36
+b 63
+b 64
+b 66
+b 84
+b 62
+b 1
+b 35
+b 1
+b 347
+b 4
+b 2
+b 1
+b 7
+b 9
+b 94
+b 93
+b 1
+b 134
+b 135
+b 137
+b 139
+b 141
+b 134
+b 2
+b 40
+b 37
+b 1
+b 25
+b 26
+b 28
+b 24
+b 1
+b 7
+b 5
+b 1
+b 26
+b 24
+b 1
+b 37
+b 39
+b 40
+b 51
+b 37
+b 2
+b 47
+b 49
+b 15
+b 14
+b 1
+b 6
+b 31
+b 30
+b 1
+b 68
+b 54
+b 41
+b 57
+b 59
+b 57
+b 5
+b 6
+b 8
+b 5
+b 2
+b 90
+b 103
+b 110
+b 112
+b 171
+b 176
+b 178
+b 180
+b 178
+b 1
+b 116
+b 125
+b 127
+b 128
+b 130
+b 132
+b 125
+b 2
+b 29
+b 12
+b 14
+b 16
+b 14
+b 1
+b 158
+b 190
+b 188
+b 1
+b 157
+b 1
+b 5
+b 7
+b 86
+b 33
+b 35
+b 36
+b 33
+b 2
+b 2
+b 31
+b 29
+b 1
+b 24
+b 25
+b 87
+b 22
+b 2
+b 9
+b 1
+b 11
+b 13
+b 78
+b 80
+b 81
+b 88
+b 114
+b 127
+b 78
+b 2
+b 124
+b 1
+b 33
+b 34
+b 36
+b 33
+b 2
+b 34
+b 36
+b 36
+b 1
+b 18
+b 16
+b 2
+b 37
+b 21
+b 23
+b 24
+b 21
+b 2
+b 88
+b 90
+b 6
+b 30
+b 28
+b 1
+b 2
+b 3
+b 5
+b 7
+b 9
+b 2
+b 2
+b 205
+b 38
+b 36
+b 1
+b 77
+b 75
+b 2
+b 3
+b 4
+b 36
+b 3
+b 1
+b 36
+b 37
+b 31
+b 10
+b 99
+b 104
+b 119
+b 118
+b 1
+b 18
+b 17
+b 1
+b 25
+b 27
+b 28
+b 36
+b 27
+b 1
+b 122
+b 124
+b 125
+b 124
+b 1
+b 9
+b 6
+b 1
+b 0
+b 2
+b 51
+b 51
+b 1
+b 3
+b 4
+b 10
+b 2
+b 1
+b 121
+b 0
+b 2
+b 12
+b 13
+b 34
+b 18
+b 19
+b 21
+b 59
+b 67
+b 65
+b 2
+b 58
+b 1
+b 30
+b 39
+b 40
+b 38
+b 1
+b 5
+b 4
+b 2
+b 35
+b 34
+b 1
+b 13
+b 19
+b 20
+b 27
+b 17
+b 2
+b 49
+b 68
+b 69
+b 87
+b 67
+b 1
+b 92
+b 93
+b 95
+b 97
+b 91
+b 1
+b 96
+b 1
+b 28
+b 1
+b 4
+b 5
+b 7
+b 9
+b 4
+b 2
+b 63
+b 65
+b 63
+b 1
+b 3
+b 160
+b 79
+b 24
+b 26
+b 26
+b 1
+b 35
+b 36
+b 38
+b 40
+b 35
+b 2
+b 7
+b 44
+b 45
+b 44
+b 2
+b 5
+b 1
+b 4
+b 104
+b 115
+b 114
+b 1
+b 123
+b 125
+b 126
+b 128
+b 130
+b 123
+b 2
+b 174
+b 175
+b 177
+b 1
+b 9
+b 35
+b 32
+b 1
+b 27
+b 28
+b 42
+b 25
+b 2
+b 40
+b 1
+b 67
+b 24
+b 25
+b 2
+b 12
+b 29
+b 27
+b 2
+b 0
+b 2
+b 8
+b 189
+b 204
+b 205
+b 9
+b 89
+b 94
+b 75
+b 83
+b 85
+b 87
+b 100
+b 74
+b 2
+b 28
+b 29
+b 31
+b 33
+b 31
+b 1
+b 8
+b 1
+b 31
+b 3
+b 97
+b 118
+b 120
+b 121
+b 118
+b 2
+b 96
+b 1
+b 6
+b 158
+b 186
+b 184
+b 1
+b 76
+b 74
+b 2
+b 62
+b 73
+b 74
+b 76
+b 78
+b 73
+b 2
+b 55
+b 53
+b 2
+b 57
+b 59
+b 61
+b 54
+b 1
+b 123
+b 18
+b 67
+b 69
+b 71
+b 72
+b 67
+b 1
+b 50
+b 4
+b 23
+b 25
+b 69
+b 104
+b 101
+b 1
+b 26
+b 27
+b 34
+b 44
+b 24
+b 2
+b 40
+b 42
+b 43
+b 42
+b 2
+b 2
+b 121
+b 123
+b 125
+b 127
+b 127
+b 1
+b 5
+b 3
+b 1
+b 76
+b 83
+b 85
+b 86
+b 83
+b 2
+b 64
+b 43
+b 45
+b 47
+b 40
+b 1
+b 3
+b 4
+b 2
+b 1
+b 63
+b 69
+b 67
+b 2
+b 43
+b 99
+b 130
+b 132
+b 133
+b 143
+b 132
+b 1
+b 140
+b 1
+b 6
+b 51
+b 52
+b 51
+b 1
+b 13
+b 12
+b 1
+b 164
+b 166
+b 167
+b 164
+b 2
+b 8
+b 13
+b 1
+b 355
+b 357
+b 4
+b 3
+b 1
+b 34
+b 49
+b 50
+b 52
+b 48
+b 1
+b 33
+b 1
+b 29
+b 37
+b 43
+b 42
+b 2
+b 31
+b 32
+b 34
+b 31
+b 2
+b 44
+b 45
+b 44
+b 1
+b 4
+b 0
+b 9
+b 206
+b 208
+b 210
+b 212
+b 213
+b 215
+b 235
+b 212
+b 2
+b 3
+b 4
+b 9
+b 2
+b 1
+b 2
+b 2
+b 1
+b 24
+b 34
+b 35
+b 57
+b 34
+b 2
+b 575
+b 577
+b 578
+b 193
+b 226
+b 123
+b 125
+b 94
+b 92
+b 1
+b 16
+b 17
+b 31
+b 33
+b 14
+b 2
+b 64
+b 91
+b 150
+b 149
+b 1
+b 82
+b 100
+b 111
+b 113
+b 111
+b 1
+b 49
+b 3
+b 5
+b 5
+b 1
+b 78
+b 80
+b 114
+b 113
+b 1
+b 88
+b 137
+b 167
+b 168
+b 170
+b 172
+b 167
+b 2
+b 85
+b 1
+b 43
+b 42
+b 2
+b 77
+b 120
+b 74
+b 1
+b 80
+b 79
+b 1
+b 83
+b 3
+b 5
+b 5
+b 1
+b 119
+b 120
+b 147
+b 119
+b 2
+b 6
+b 3
+b 1
+b 16
+b 18
+b 33
+b 24
+b 30
+b 31
+b 30
+b 1
+b 3
+b 3
+b 1
+b 21
+b 56
+b 57
+b 59
+b 162
+b 54
+b 2
+b 20
+b 1
+b 43
+b 45
+b 47
+b 48
+b 66
+b 18
+b 20
+b 69
+b 70
+b 16
+b 1
+b 68
+b 1
+b 0
+b 106
+b 106
+b 1
+b 94
+b 95
+b 93
+b 1
+b 17
+b 39
+b 36
+b 1
+b 186
+b 188
+b 189
+b 201
+b 186
+b 2
+b 71
+b 68
+b 1
+b 2
+b 4
+b 102
+b 99
+b 100
+b 99
+b 2
+b 1
+b 0
+b 1
+b 33
+b 35
+b 37
+b 38
+b 69
+b 35
+b 2
+b 67
+b 1
+b 338
+b 339
+b 341
+b 351
+b 338
+b 2
+b 347
+b 2
+b 6
+b 113
+b 9
+b 10
+b 9
+b 2
+b 18
+b 108
+b 107
+b 1
+b 7
+b 8
+b 7
+b 2
+b 60
+b 109
+b 111
+b 109
+b 1
+b 9
+b 11
+b 12
+b 141
+b 7
+b 7
+b 1
+b 25
+b 23
+b 1
+b 8
+b 8
+b 1
+b 91
+b 96
+b 9
+b 1
+b 9
+b 10
+b 0
+b 1
+b 20
+b 20
+b 1
+b 231
+b 232
+b 231
+b 2
+b 14
+b 55
+b 57
+b 59
+b 60
+b 59
+b 2
+b 3
+b 0
+b 1
+b 26
+b 28
+b 30
+b 32
+b 33
+b 35
+b 30
+b 2
+b 33
+b 1
+b 129
+b 137
+b 138
+b 136
+b 1
+b 18
+b 207
+b 209
+b 211
+b 213
+b 215
+b 217
+b 215
+b 1
+b 73
+b 109
+b 116
+b 117
+b 119
+b 73
+b 1
+b 115
+b 2
+b 72
+b 74
+b 2
+b 3
+b 5
+b 1
+b 1
+b 69
+b 68
+b 1
+b 39
+b 0
+b 1
+b 12
+b 9
+b 8
+b 1
+b 2
+b 0
+b 2
+b 54
+b 7
+b 8
+b 10
+b 12
+b 14
+b 10
+b 1
+b 69
+b 68
+b 2
+b 29
+b 43
+b 44
+b 46
+b 48
+b 43
+b 2
+b 19
+b 24
+b 67
+b 68
+b 18
+b 1
+b 311
+b 136
+b 147
+b 148
+b 196
+b 134
+b 1
+b 146
+b 1
+b 51
+b 53
+b 54
+b 56
+b 58
+b 51
+b 2
+b 56
+b 1
+b 12
+b 158
+b 159
+b 58
+b 23
+b 5
+b 7
+b 9
+b 10
+b 17
+b 7
+b 2
+b 57
+b 55
+b 2
+b 34
+b 32
+b 2
+b 111
+b 113
+b 114
+b 116
+b 113
+b 2
+b 26
+b 24
+b 60
+b 22
+b 1
+b 58
+b 1
+b 0
+b 2
+b 3
+b 0
+b 2
+b 3
+b 21
+b 18
+b 1
+b 27
+b 0
+b 2
+b 3
+b 32
+b 2
+b 1
+b 61
+b 80
+b 109
+b 78
+b 2
+b 60
+b 1
+b 123
+b 125
+b 127
+b 128
+b 138
+b 127
+b 2
+b 134
+b 1
+b 52
+b 136
+b 137
+b 52
+b 1
+b 134
+b 1
+b 8
+b 60
+b 10
+b 7
+b 1
+b 8
+b 9
+b 13
+b 7
+b 1
+b 81
+b 96
+b 98
+b 99
+b 3
+b 216
+b 273
+b 372
+b 383
+b 371
+b 1
+b 204
+b 219
+b 202
+b 1
+b 44
+b 45
+b 42
+b 2
+b 93
+b 93
+b 1
+b 9
+b 30
+b 31
+b 33
+b 33
+b 1
+b 27
+b 1
+b 15
+b 21
+b 23
+b 58
+b 69
+b 57
+b 2
+b 66
+b 1
+b 69
+b 78
+b 79
+b 95
+b 68
+b 1
+b 17
+b 25
+b 36
+b 37
+b 53
+b 15
+b 1
+b 35
+b 1
+b 55
+b 85
+b 84
+b 1
+b 65
+b 2
+b 22
+b 29
+b 39
+b 38
+b 2
+b 55
+b 13
+b 15
+b 11
+b 21
+b 42
+b 10
+b 1
+b 17
+b 1
+b 2
+b 3
+b 0
+b 2
+b 114
+b 9
+b 10
+b 22
+b 9
+b 2
+b 67
+b 100
+b 109
+b 108
+b 1
+b 25
+b 27
+b 29
+b 31
+b 32
+b 27
+b 1
+b 27
+b 22
+b 24
+b 71
+b 73
+b 74
+b 1
+b 0
+b 1
+b 40
+b 42
+b 42
+b 1
+b 25
+b 27
+b 28
+b 25
+b 2
+b 39
+b 39
+b 1
+b 24
+b 2
+b 3
+b 0
+b 2
+b 2
+b 49
+b 50
+b 47
+b 2
+b 14
+b 1
+b 30
+b 6
+b 7
+b 15
+b 6
+b 2
+b 41
+b 42
+b 44
+b 52
+b 41
+b 2
+b 207
+b 207
+b 1
+b 12
+b 24
+b 25
+b 23
+b 1
+b 25
+b 23
+b 2
+b 84
+b 137
+b 109
+b 121
+b 122
+b 153
+b 120
+b 1
+b 151
+b 2
+b 57
+b 59
+b 61
+b 62
+b 68
+b 61
+b 2
+b 54
+b 1
+b 39
+b 56
+b 57
+b 66
+b 128
+b 56
+b 1
+b 63
+b 2
+b 16
+b 8
+b 39
+b 41
+b 42
+b 109
+b 111
+b 5
+b 6
+b 8
+b 5
+b 2
+b 167
+b 168
+b 179
+b 167
+b 1
+b 176
+b 2
+b 22
+b 28
+b 135
+b 137
+b 138
+b 174
+b 173
+b 1
+b 29
+b 0
+b 85
+b 150
+b 151
+b 149
+b 1
+b 10
+b 12
+b 8
+b 1
+b 48
+b 50
+b 60
+b 61
+b 63
+b 50
+b 1
+b 57
+b 2
+b 60
+b 1
+b 140
+b 48
+b 103
+b 128
+b 129
+b 140
+b 128
+b 2
+b 100
+b 1
+b 133
+b 1
+b 33
+b 34
+b 36
+b 38
+b 40
+b 36
+b 1
+b 3
+b 70
+b 8
+b 9
+b 23
+b 8
+b 2
+b 18
+b 1
+b 128
+b 130
+b 132
+b 134
+b 136
+b 138
+b 130
+b 1
+b 19
+b 18
+b 1
+b 16
+b 17
+b 16
+b 2
+b 17
+b 16
+b 1
+b 44
+b 52
+b 54
+b 5
+b 106
+b 105
+b 2
+b 30
+b 31
+b 33
+b 30
+b 2
+b 0
+b 12
+b 32
+b 4
+b 6
+b 14
+b 15
+b 3
+b 12
+b 13
+b 59
+b 12
+b 1
+b 27
+b 26
+b 1
+b 7
+b 14
+b 15
+b 27
+b 11
+b 1
+b 8
+b 16
+b 18
+b 20
+b 21
+b 7
+b 2
+b 0
+b 32
+b 34
+b 36
+b 38
+b 12
+b 19
+b 9
+b 11
+b 5
+b 7
+b 8
+b 10
+b 5
+b 2
+b 0
+b 67
+b 66
+b 2
+b 8
+b 9
+b 36
+b 8
+b 1
+b 107
+b 26
+b 25
+b 1
+b 90
+b 92
+b 26
+b 33
+b 34
+b 49
+b 33
+b 1
+b 46
+b 1
+b 68
+b 66
+b 1
+b 6
+b 7
+b 21
+b 23
+b 4
+b 2
+b 188
+b 230
+b 231
+b 260
+b 229
+b 1
+b 259
+b 1
+b 321
+b 323
+b 325
+b 343
+b 323
+b 1
+b 31
+b 49
+b 50
+b 52
+b 54
+b 49
+b 2
+b 28
+b 1
+b 326
+b 328
+b 340
+b 338
+b 1
+b 59
+b 61
+b 41
+b 43
+b 41
+b 3
+b 22
+b 24
+b 46
+b 47
+b 57
+b 44
+b 2
+b 24
+b 1
+b 52
+b 1
+b 258
+b 257
+b 1
+b 35
+b 36
+b 38
+b 59
+b 34
+b 1
+b 199
+b 224
+b 225
+b 232
+b 234
+b 236
+b 224
+b 1
+b 229
+b 1
+b 143
+b 145
+b 194
+b 41
+b 39
+b 2
+b 117
+b 119
+b 121
+b 122
+b 124
+b 126
+b 128
+b 115
+b 1
+b 120
+b 2
+b 6
+b 5
+b 0
+b 1
+b 16
+b 11
+b 13
+b 15
+b 17
+b 34
+b 32
+b 2
+b 27
+b 56
+b 58
+b 24
+b 1
+b 30
+b 63
+b 64
+b 66
+b 68
+b 28
+b 1
+b 62
+b 2
+b 56
+b 3
+b 10
+b 11
+b 3
+b 1
+b 254
+b 256
+b 256
+b 1
+b 62
+b 64
+b 66
+b 67
+b 66
+b 2
+b 133
+b 145
+b 146
+b 144
+b 1
+b 132
+b 1
+b 14
+b 30
+b 229
+b 22
+b 23
+b 33
+b 22
+b 2
+b 52
+b 54
+b 55
+b 81
+b 52
+b 2
+b 22
+b 140
+b 147
+b 148
+b 144
+b 1
+b 37
+b 164
+b 163
+b 1
+b 20
+b 22
+b 27
+b 5
+b 7
+b 9
+b 11
+b 186
+b 195
+b 196
+b 202
+b 204
+b 194
+b 1
+b 185
+b 1
+b 96
+b 104
+b 94
+b 2
+b 11
+b 12
+b 14
+b 16
+b 11
+b 2
+b 86
+b 84
+b 2
+b 56
+b 89
+b 90
+b 98
+b 89
+b 1
+b 6
+b 7
+b 28
+b 5
+b 1
+b 27
+b 1
+b 4
+b 14
+b 16
+b 60
+b 61
+b 63
+b 16
+b 1
+b 59
+b 2
+b 3
+b 8
+b 50
+b 130
+b 131
+b 49
+b 1
+b 6
+b 5
+b 23
+b 37
+b 38
+b 40
+b 42
+b 22
+b 2
+b 34
+b 1
+b 31
+b 96
+b 98
+b 100
+b 112
+b 114
+b 111
+b 3
+b 93
+b 1
+b 68
+b 80
+b 34
+b 42
+b 33
+b 2
+b 38
+b 1
+b 150
+b 158
+b 160
+b 161
+b 163
+b 174
+b 160
+b 2
+b 148
+b 1
+b 48
+b 3
+b 313
+b 315
+b 316
+b 323
+b 337
+b 315
+b 1
+b 320
+b 1
+b 412
+b 467
+b 469
+b 273
+b 285
+b 287
+b 272
+b 1
+b 33
+b 94
+b 95
+b 114
+b 94
+b 1
+b 111
+b 2
+b 25
+b 147
+b 161
+b 162
+b 168
+b 159
+b 2
+b 146
+b 1
+b 24
+b 21
+b 1
+b 6
+b 15
+b 17
+b 4
+b 2
+b 250
+b 10
+b 11
+b 10
+b 1
+b 4
+b 4
+b 2
+b 2
+b 5
+b 2
+b 1
+b 12
+b 13
+b 67
+b 10
+b 2
+b 65
+b 1
+b 124
+b 126
+b 121
+b 1
+b 14
+b 20
+b 22
+b 19
+b 3
+b 276
+b 277
+b 279
+b 318
+b 329
+b 276
+b 2
+b 314
+b 2
+b 21
+b 23
+b 21
+b 1
+b 226
+b 97
+b 95
+b 3
+b 58
+b 0
+b 1
+b 21
+b 20
+b 1
+b 203
+b 204
+b 211
+b 201
+b 2
+b 208
+b 1
+b 84
+b 81
+b 1
+b 17
+b 19
+b 21
+b 23
+b 24
+b 36
+b 15
+b 1
+b 22
+b 1
+b 67
+b 5
+b 6
+b 28
+b 30
+b 4
+b 1
+b 29
+b 1
+b 68
+b 4
+b 5
+b 72
+b 4
+b 2
+b 67
+b 1
+b 126
+b 29
+b 31
+b 32
+b 29
+b 2
+b 14
+b 11
+b 1
+b 1
+b 0
+b 2
+b 41
+b 39
+b 40
+b 38
+b 1
+b 341
+b 4
+b 2
+b 1
+b 143
+b 145
+b 39
+b 40
+b 39
+b 2
+b 14
+b 11
+b 1
+b 21
+b 23
+b 25
+b 23
+b 1
+b 19
+b 11
+b 13
+b 8
+b 1
+b 7
+b 5
+b 1
+b 12
+b 35
+b 22
+b 24
+b 19
+b 1
+b 16
+b 18
+b 20
+b 22
+b 23
+b 14
+b 1
+b 169
+b 171
+b 173
+b 174
+b 244
+b 171
+b 2
+b 0
+b 10
+b 0
+b 1
+b 141
+b 138
+b 1
+b 30
+b 31
+b 0
+b 2
+b 17
+b 47
+b 75
+b 76
+b 92
+b 99
+b 73
+b 2
+b 46
+b 1
+b 94
+b 1
+b 29
+b 76
+b 78
+b 76
+b 1
+b 37
+b 11
+b 12
+b 10
+b 1
+b 0
+b 2
+b 10
+b 7
+b 6
+b 2
+b 3
+b 5
+b 7
+b 0
+b 1
+b 30
+b 47
+b 64
+b 45
+b 1
+b 30
+b 1
+b 77
+b 108
+b 109
+b 107
+b 1
+b 4
+b 6
+b 6
+b 1
+b 57
+b 59
+b 4
+b 3
+b 1
+b 4
+b 2
+b 2
+b 15
+b 13
+b 1
+b 60
+b 61
+b 58
+b 2
+b 3
+b 0
+b 1
+b 112
+b 152
+b 151
+b 1
+b 32
+b 34
+b 32
+b 3
+b 2
+b 4
+b 6
+b 17
+b 19
+b 6
+b 1
+b 13
+b 1
+b 250
+b 252
+b 9
+b 8
+b 1
+b 119
+b 1
+b 30
+b 31
+b 30
+b 1
+b 0
+b 3
+b 17
+b 2
+b 1
+b 0
+b 1
+b 47
+b 72
+b 73
+b 72
+b 2
+b 44
+b 1
+b 70
+b 69
+b 1
+b 20
+b 21
+b 33
+b 19
+b 1
+b 5
+b 3
+b 2
+b 0
+b 9
+b 11
+b 12
+b 19
+b 21
+b 11
+b 1
+b 16
+b 1
+b 57
+b 81
+b 82
+b 56
+b 1
+b 13
+b 20
+b 59
+b 37
+b 39
+b 40
+b 55
+b 37
+b 2
+b 90
+b 129
+b 130
+b 128
+b 1
+b 13
+b 0
+b 44
+b 45
+b 47
+b 44
+b 2
+b 4
+b 2
+b 1
+b 14
+b 55
+b 61
+b 81
+b 82
+b 84
+b 61
+b 1
+b 79
+b 1
+b 225
+b 33
+b 31
+b 1
+b 0
+b 2
+b 3
+b 8
+b 0
+b 2
+b 141
+b 19
+b 129
+b 131
+b 133
+b 16
+b 35
+b 36
+b 56
+b 127
+b 14
+b 1
+b 34
+b 1
+b 46
+b 26
+b 28
+b 29
+b 31
+b 28
+b 2
+b 238
+b 237
+b 2
+b 43
+b 42
+b 1
+b 30
+b 3
+b 296
+b 30
+b 32
+b 34
+b 36
+b 37
+b 36
+b 2
+b 27
+b 1
+b 25
+b 53
+b 63
+b 25
+b 1
+b 49
+b 1
+b 64
+b 81
+b 82
+b 104
+b 79
+b 2
+b 63
+b 1
+b 99
+b 1
+b 11
+b 89
+b 90
+b 92
+b 94
+b 96
+b 11
+b 1
+b 88
+b 2
+b 18
+b 19
+b 17
+b 1
+b 91
+b 91
+b 1
+b 31
+b 33
+b 39
+b 41
+b 33
+b 1
+b 0
+b 2
+b 3
+b 3
+b 2
+b 1
+b 9
+b 10
+b 9
+b 2
+b 3
+b 5
+b 103
+b 105
+b 39
+b 40
+b 5
+b 49
+b 59
+b 59
+b 1
+b 47
+b 1
+b 55
+b 61
+b 62
+b 77
+b 79
+b 60
+b 1
+b 78
+b 1
+b 31
+b 41
+b 42
+b 46
+b 39
+b 2
+b 46
+b 44
+b 1
+b 6
+b 7
+b 6
+b 1
+b 7
+b 144
+b 219
+b 217
+b 2
+b 143
+b 1
+b 11
+b 13
+b 56
+b 83
+b 85
+b 83
+b 1
+b 387
+b 495
+b 496
+b 498
+b 494
+b 1
+b 20
+b 26
+b 39
+b 24
+b 1
+b 19
+b 1
+b 9
+b 11
+b 13
+b 15
+b 9
+b 1
+b 345
+b 346
+b 344
+b 1
+b 52
+b 49
+b 1
+b 28
+b 25
+b 1
+b 71
+b 72
+b 71
+b 2
+b 8
+b 7
+b 1
+b 147
+b 149
+b 145
+b 1
+b 24
+b 25
+b 23
+b 1
+b 35
+b 141
+b 139
+b 1
+b 10
+b 12
+b 14
+b 15
+b 12
+b 2
+b 0
+b 493
+b 505
+b 506
+b 504
+b 1
+b 100
+b 106
+b 98
+b 2
+b 262
+b 263
+b 265
+b 267
+b 261
+b 1
+b 266
+b 1
+b 63
+b 15
+b 27
+b 34
+b 35
+b 27
+b 1
+b 32
+b 1
+b 20
+b 17
+b 1
+b 2
+b 102
+b 103
+b 105
+b 102
+b 2
+b 3
+b 10
+b 9
+b 2
+b 166
+b 165
+b 1
+b 52
+b 54
+b 109
+b 109
+b 1
+b 28
+b 35
+b 36
+b 35
+b 1
+b 31
+b 31
+b 1
+b 334
+b 341
+b 351
+b 369
+b 333
+b 1
+b 42
+b 44
+b 46
+b 47
+b 49
+b 51
+b 13
+b 15
+b 17
+b 19
+b 180
+b 185
+b 184
+b 1
+b 18
+b 19
+b 56
+b 16
+b 2
+b 51
+b 1
+b 35
+b 111
+b 35
+b 1
+b 107
+b 1
+b 6
+b 38
+b 39
+b 37
+b 1
+b 90
+b 60
+b 66
+b 67
+b 69
+b 74
+b 65
+b 1
+b 72
+b 2
+b 50
+b 62
+b 47
+b 1
+b 112
+b 113
+b 115
+b 112
+b 2
+b 23
+b 30
+b 31
+b 23
+b 1
+b 28
+b 1
+b 40
+b 47
+b 2
+b 18
+b 37
+b 2
+b 1
+b 14
+b 1
+b 191
+b 4
+b 5
+b 3
+b 72
+b 90
+b 91
+b 89
+b 1
+b 319
+b 254
+b 283
+b 234
+b 236
+b 236
+b 1
+b 64
+b 62
+b 2
+b 21
+b 14
+b 16
+b 28
+b 30
+b 20
+b 3
+b 4
+b 6
+b 2
+b 1
+b 45
+b 46
+b 44
+b 1
+b 2
+b 0
+b 1
+b 78
+b 253
+b 255
+b 255
+b 1
+b 67
+b 68
+b 70
+b 72
+b 65
+b 2
+b 55
+b 52
+b 1
+b 276
+b 319
+b 320
+b 319
+b 2
+b 44
+b 45
+b 44
+b 2
+b 151
+b 150
+b 1
+b 108
+b 110
+b 112
+b 108
+b 1
+b 121
+b 122
+b 124
+b 120
+b 1
+b 25
+b 23
+b 2
+b 27
+b 10
+b 19
+b 20
+b 28
+b 18
+b 1
+b 9
+b 1
+b 56
+b 6
+b 10
+b 12
+b 14
+b 15
+b 6
+b 1
+b 1
+b 145
+b 7
+b 1
+b 2
+b 12
+b 1
+b 1
+b 9
+b 1
+b 1
+b 240
+b 248
+b 237
+b 1
+b 12
+b 14
+b 14
+b 1
+b 8
+b 16
+b 17
+b 25
+b 16
+b 2
+b 3
+b 1
+b 1
+b 20
+b 18
+b 1
+b 16
+b 17
+b 15
+b 1
+b 28
+b 149
+b 149
+b 1
+b 10
+b 12
+b 14
+b 15
+b 25
+b 12
+b 2
+b 63
+b 9
+b 10
+b 12
+b 8
+b 1
+b 4
+b 84
+b 83
+b 1
+b 313
+b 314
+b 324
+b 313
+b 2
+b 111
+b 113
+b 115
+b 117
+b 118
+b 115
+b 2
+b 153
+b 151
+b 1
+b 54
+b 51
+b 1
+b 0
+b 2
+b 4
+b 4
+b 1
+b 0
+b 1
+b 0
+b 2
+b 229
+b 231
+b 233
+b 235
+b 236
+b 260
+b 227
+b 1
+b 234
+b 1
+b 14
+b 25
+b 27
+b 28
+b 25
+b 2
+b 13
+b 1
+b 6
+b 96
+b 98
+b 99
+b 106
+b 96
+b 2
+b 12
+b 25
+b 10
+b 2
+b 215
+b 242
+b 286
+b 213
+b 1
+b 281
+b 1
+b 0
+b 1
+b 0
+b 2
+b 150
+b 152
+b 154
+b 156
+b 150
+b 1
+b 44
+b 45
+b 64
+b 44
+b 1
+b 60
+b 1
+b 172
+b 182
+b 183
+b 216
+b 246
+b 182
+b 1
+b 213
+b 1
+b 41
+b 43
+b 44
+b 50
+b 43
+b 2
+b 38
+b 1
+b 9
+b 27
+b 29
+b 27
+b 1
+b 7
+b 6
+b 2
+b 11
+b 13
+b 14
+b 16
+b 11
+b 2
+b 43
+b 64
+b 66
+b 67
+b 69
+b 66
+b 2
+b 0
+b 2
+b 1
+b 0
+b 1
+b 103
+b 132
+b 150
+b 23
+b 25
+b 25
+b 1
+b 0
+b 1
+b 0
+b 1
+b 25
+b 10
+b 8
+b 2
+b 53
+b 54
+b 56
+b 75
+b 52
+b 1
+b 45
+b 50
+b 51
+b 61
+b 50
+b 1
+b 58
+b 1
+b 285
+b 287
+b 288
+b 285
+b 2
+b 2
+b 60
+b 60
+b 1
+b 283
+b 291
+b 292
+b 323
+b 289
+b 2
+b 318
+b 1
+b 12
+b 47
+b 48
+b 61
+b 47
+b 2
+b 11
+b 1
+b 259
+b 324
+b 326
+b 328
+b 330
+b 258
+b 2
+b 1
+b 131
+b 142
+b 129
+b 2
+b 6
+b 13
+b 14
+b 12
+b 1
+b 16
+b 15
+b 2
+b 23
+b 2
+b 3
+b 5
+b 7
+b 2
+b 2
+b 32
+b 32
+b 1
+b 20
+b 22
+b 24
+b 25
+b 22
+b 2
+b 164
+b 182
+b 183
+b 182
+b 1
+b 11
+b 9
+b 1
+b 48
+b 45
+b 1
+b 14
+b 21
+b 22
+b 20
+b 1
+b 61
+b 62
+b 70
+b 92
+b 61
+b 2
+b 89
+b 1
+b 0
+b 47
+b 48
+b 70
+b 47
+b 2
+b 39
+b 121
+b 117
+b 21
+b 23
+b 29
+b 30
+b 49
+b 10
+b 0
+b 10
+b 130
+b 132
+b 133
+b 135
+b 130
+b 2
+b 9
+b 17
+b 30
+b 32
+b 30
+b 1
+b 87
+b 89
+b 110
+b 122
+b 131
+b 130
+b 2
+b 25
+b 26
+b 33
+b 24
+b 1
+b 28
+b 30
+b 32
+b 33
+b 30
+b 2
+b 25
+b 25
+b 1
+b 41
+b 47
+b 48
+b 64
+b 45
+b 2
+b 72
+b 76
+b 77
+b 83
+b 76
+b 2
+b 180
+b 192
+b 194
+b 179
+b 2
+b 82
+b 42
+b 31
+b 32
+b 30
+b 1
+b 24
+b 22
+b 1
+b 63
+b 69
+b 71
+b 72
+b 74
+b 1
+b 37
+b 207
+b 215
+b 213
+b 2
+b 317
+b 397
+b 466
+b 467
+b 469
+b 471
+b 315
+b 2
+b 464
+b 2
+b 313
+b 7
+b 8
+b 65
+b 6
+b 1
+b 232
+b 244
+b 245
+b 256
+b 231
+b 2
+b 241
+b 1
+b 62
+b 38
+b 35
+b 1
+b 27
+b 2
+b 4
+b 247
+b 259
+b 245
+b 2
+b 64
+b 66
+b 67
+b 69
+b 66
+b 2
+b 12
+b 26
+b 28
+b 29
+b 31
+b 33
+b 41
+b 26
+b 2
+b 309
+b 311
+b 313
+b 325
+b 58
+b 60
+b 61
+b 63
+b 60
+b 2
+b 48
+b 70
+b 46
+b 2
+b 50
+b 55
+b 5
+b 7
+b 108
+b 120
+b 121
+b 120
+b 2
+b 105
+b 1
+b 173
+b 301
+b 327
+b 326
+b 2
+b 9
+b 7
+b 1
+b 11
+b 10
+b 1
+b 3
+b 4
+b 6
+b 8
+b 42
+b 40
+b 1
+b 5
+b 6
+b 8
+b 10
+b 12
+b 5
+b 2
+b 72
+b 72
+b 1
+b 3
+b 4
+b 11
+b 3
+b 1
+b 247
+b 263
+b 245
+b 1
+b 13
+b 11
+b 1
+b 131
+b 133
+b 135
+b 137
+b 139
+b 137
+b 1
+b 52
+b 3
+b 5
+b 392
+b 391
+b 1
+b 135
+b 4
+b 5
+b 7
+b 83
+b 82
+b 2
+b 77
+b 78
+b 80
+b 82
+b 84
+b 77
+b 2
+b 210
+b 209
+b 2
+b 4
+b 4
+b 6
+b 50
+b 59
+b 48
+b 2
+b 67
+b 69
+b 70
+b 69
+b 1
+b 1
+b 54
+b 52
+b 2
+b 14
+b 16
+b 17
+b 19
+b 21
+b 23
+b 16
+b 2
+b 325
+b 362
+b 361
+b 1
+b 78
+b 80
+b 82
+b 84
+b 84
+b 1
+b 12
+b 54
+b 55
+b 110
+b 53
+b 1
+b 108
+b 2
+b 1
+b 3
+b 21
+b 22
+b 19
+b 2
+b 3
+b 1
+b 21
+b 23
+b 9
+b 11
+b 28
+b 30
+b 11
+b 1
+b 156
+b 156
+b 1
+b 133
+b 160
+b 162
+b 163
+b 162
+b 1
+b 240
+b 255
+b 262
+b 281
+b 280
+b 2
+b 261
+b 1
+b 16
+b 23
+b 24
+b 26
+b 41
+b 15
+b 2
+b 20
+b 1
+b 59
+b 60
+b 92
+b 97
+b 91
+b 1
+b 23
+b 25
+b 27
+b 28
+b 41
+b 25
+b 2
+b 39
+b 1
+b 72
+b 70
+b 1
+b 45
+b 212
+b 213
+b 221
+b 212
+b 2
+b 236
+b 238
+b 236
+b 1
+b 47
+b 155
+b 153
+b 1
+b 34
+b 35
+b 33
+b 1
+b 13
+b 1
+b 23
+b 31
+b 30
+b 2
+b 16
+b 17
+b 19
+b 16
+b 2
+b 12
+b 14
+b 16
+b 17
+b 19
+b 16
+b 2
+b 9
+b 1
+b 4
+b 13
+b 14
+b 16
+b 23
+b 204
+b 205
+b 215
+b 204
+b 2
+b 21
+b 20
+b 1
+b 115
+b 116
+b 130
+b 113
+b 2
+b 10
+b 9
+b 1
+b 133
+b 133
+b 1
+b 187
+b 189
+b 191
+b 198
+b 197
+b 2
+b 286
+b 325
+b 326
+b 325
+b 2
+b 283
+b 1
+b 5
+b 67
+b 68
+b 67
+b 1
+b 105
+b 105
+b 1
+b 212
+b 12
+b 19
+b 20
+b 36
+b 50
+b 18
+b 1
+b 48
+b 2
+b 53
+b 51
+b 1
+b 82
+b 84
+b 85
+b 126
+b 82
+b 2
+b 208
+b 378
+b 9
+b 0
+b 25
+b 62
+b 59
+b 1
+b 286
+b 306
+b 307
+b 306
+b 2
+b 284
+b 1
+b 15
+b 22
+b 23
+b 14
+b 2
+b 19
+b 1
+b 288
+b 318
+b 382
+b 383
+b 491
+b 380
+b 2
+b 317
+b 1
+b 0
+b 244
+b 246
+b 248
+b 250
+b 251
+b 248
+b 2
+b 276
+b 276
+b 1
+b 213
+b 221
+b 229
+b 234
+b 212
+b 2
+b 217
+b 1
+b 491
+b 506
+b 507
+b 506
+b 2
+b 488
+b 1
+b 105
+b 113
+b 10
+b 71
+b 101
+b 102
+b 101
+b 3
+b 68
+b 1
+b 0
+b 2
+b 0
+b 1
+b 134
+b 135
+b 141
+b 149
+b 134
+b 2
+b 137
+b 1
+b 49
+b 2
+b 3
+b 69
+b 0
+b 2
+b 64
+b 1
+b 17
+b 32
+b 33
+b 35
+b 32
+b 2
+b 8
+b 6
+b 1
+b 1
+b 0
+b 2
+b 358
+b 41
+b 42
+b 110
+b 112
+b 110
+b 1
+b 8
+b 80
+b 81
+b 83
+b 80
+b 2
+b 305
+b 304
+b 2
+b 19
+b 31
+b 32
+b 53
+b 31
+b 1
+b 50
+b 2
+b 1
+b 237
+b 239
+b 239
+b 1
+b 15
+b 4
+b 5
+b 3
+b 1
+b 73
+b 73
+b 1
+b 8
+b 9
+b 41
+b 8
+b 2
+b 37
+b 1
+b 49
+b 112
+b 124
+b 111
+b 1
+b 2
+b 4
+b 27
+b 41
+b 26
+b 2
+b 37
+b 1
+b 13
+b 56
+b 57
+b 71
+b 55
+b 1
+b 10
+b 1
+b 1
+b 0
+b 2
+b 164
+b 172
+b 173
+b 186
+b 163
+b 1
+b 93
+b 128
+b 138
+b 139
+b 141
+b 143
+b 145
+b 126
+b 1
+b 137
+b 2
+b 78
+b 80
+b 82
+b 83
+b 85
+b 87
+b 80
+b 2
+b 85
+b 1
+b 5
+b 28
+b 30
+b 4
+b 1
+b 125
+b 140
+b 141
+b 143
+b 139
+b 1
+b 124
+b 1
+b 30
+b 219
+b 221
+b 217
+b 1
+b 18
+b 20
+b 21
+b 33
+b 18
+b 2
+b 72
+b 78
+b 79
+b 70
+b 1
+b 77
+b 1
+b 35
+b 17
+b 19
+b 20
+b 19
+b 1
+b 4
+b 32
+b 34
+b 36
+b 38
+b 36
+b 1
+b 437
+b 81
+b 82
+b 84
+b 3
+b 67
+b 68
+b 74
+b 56
+b 58
+b 58
+b 1
+b 103
+b 104
+b 106
+b 102
+b 1
+b 108
+b 110
+b 111
+b 119
+b 110
+b 2
+b 27
+b 26
+b 1
+b 66
+b 68
+b 70
+b 72
+b 73
+b 85
+b 70
+b 2
+b 83
+b 1
+b 71
+b 78
+b 79
+b 78
+b 1
+b 43
+b 41
+b 2
+b 41
+b 220
+b 254
+b 256
+b 257
+b 256
+b 1
+b 4
+b 2
+b 2
+b 7
+b 5
+b 2
+b 4
+b 5
+b 7
+b 4
+b 2
+b 48
+b 221
+b 223
+b 223
+b 1
+b 147
+b 149
+b 150
+b 152
+b 147
+b 2
+b 18
+b 19
+b 21
+b 18
+b 2
+b 0
+b 6
+b 0
+b 1
+b 74
+b 76
+b 74
+b 1
+b 6
+b 123
+b 134
+b 136
+b 138
+b 136
+b 1
+b 12
+b 11
+b 1
+b 11
+b 12
+b 14
+b 11
+b 2
+b 81
+b 55
+b 53
+b 1
+b 0
+b 2
+b 3
+b 5
+b 0
+b 2
+b 121
+b 165
+b 166
+b 168
+b 165
+b 2
+b 18
+b 16
+b 1
+b 20
+b 22
+b 18
+b 1
+b 99
+b 96
+b 1
+b 151
+b 10
+b 18
+b 19
+b 21
+b 23
+b 64
+b 120
+b 121
+b 136
+b 118
+b 2
+b 63
+b 1
+b 132
+b 1
+b 40
+b 48
+b 50
+b 50
+b 1
+b 20
+b 22
+b 23
+b 20
+b 2
+b 2
+b 20
+b 2
+b 1
+b 0
+b 2
+b 3
+b 28
+b 0
+b 2
+b 26
+b 1
+b 54
+b 68
+b 70
+b 72
+b 70
+b 1
+b 180
+b 202
+b 203
+b 205
+b 179
+b 2
+b 199
+b 1
+b 3
+b 18
+b 78
+b 79
+b 77
+b 1
+b 57
+b 63
+b 55
+b 1
+b 223
+b 239
+b 240
+b 238
+b 1
+b 28
+b 28
+b 1
+b 227
+b 236
+b 478
+b 478
+b 1
+b 63
+b 104
+b 103
+b 1
+b 270
+b 285
+b 286
+b 288
+b 268
+b 1
+b 284
+b 2
+b 56
+b 381
+b 475
+b 477
+b 487
+b 473
+b 1
+b 381
+b 1
+b 217
+b 254
+b 256
+b 257
+b 292
+b 256
+b 2
+b 214
+b 1
+b 286
+b 1
+b 231
+b 231
+b 1
+b 7
+b 8
+b 24
+b 6
+b 1
+b 152
+b 154
+b 11
+b 169
+b 177
+b 175
+b 1
+b 168
+b 1
+b 7
+b 44
+b 42
+b 1
+b 19
+b 20
+b 22
+b 24
+b 26
+b 16
+b 1
+b 67
+b 68
+b 70
+b 66
+b 1
+b 24
+b 0
+b 2
+b 2
+b 1
+b 106
+b 148
+b 149
+b 160
+b 147
+b 1
+b 105
+b 1
+b 336
+b 335
+b 1
+b 24
+b 26
+b 27
+b 26
+b 2
+b 16
+b 26
+b 13
+b 1
+b 218
+b 218
+b 1
+b 14
+b 15
+b 21
+b 12
+b 2
+b 18
+b 1
+b 13
+b 12
+b 1
+b 10
+b 12
+b 14
+b 16
+b 16
+b 1
+b 219
+b 258
+b 259
+b 276
+b 257
+b 1
+b 275
+b 1
+b 264
+b 282
+b 284
+b 285
+b 293
+b 263
+b 2
+b 280
+b 2
+b 72
+b 74
+b 76
+b 31
+b 33
+b 35
+b 37
+b 38
+b 68
+b 35
+b 2
+b 65
+b 2
+b 427
+b 465
+b 466
+b 468
+b 465
+b 2
+b 60
+b 60
+b 1
+b 107
+b 105
+b 1
+b 31
+b 32
+b 40
+b 30
+b 1
+b 15
+b 264
+b 264
+b 1
+b 54
+b 53
+b 1
+b 15
+b 21
+b 22
+b 41
+b 21
+b 2
+b 37
+b 1
+b 352
+b 364
+b 365
+b 375
+b 363
+b 1
+b 305
+b 307
+b 318
+b 319
+b 344
+b 307
+b 1
+b 316
+b 1
+b 16
+b 13
+b 1
+b 227
+b 228
+b 225
+b 2
+b 9
+b 6
+b 1
+b 33
+b 53
+b 55
+b 57
+b 58
+b 32
+b 2
+b 53
+b 2
+b 20
+b 292
+b 294
+b 472
+b 473
+b 475
+b 477
+b 290
+b 1
+b 471
+b 2
+b 93
+b 103
+b 92
+b 1
+b 105
+b 113
+b 114
+b 149
+b 161
+b 113
+b 2
+b 102
+b 1
+b 142
+b 1
+b 48
+b 56
+b 65
+b 66
+b 48
+b 1
+b 64
+b 1
+b 75
+b 94
+b 136
+b 134
+b 1
+b 1
+b 14
+b 15
+b 47
+b 14
+b 2
+b 42
+b 1
+b 184
+b 11
+b 56
+b 57
+b 54
+b 2
+b 10
+b 1
+b 68
+b 66
+b 1
+b 31
+b 33
+b 43
+b 41
+b 2
+b 315
+b 315
+b 335
+b 348
+b 313
+b 1
+b 36
+b 34
+b 1
+b 21
+b 36
+b 5
+b 89
+b 91
+b 134
+b 133
+b 1
+b 27
+b 25
+b 2
+b 33
+b 44
+b 45
+b 47
+b 31
+b 1
+b 43
+b 2
+b 57
+b 125
+b 127
+b 140
+b 138
+b 1
+b 127
+b 1
+b 525
+b 527
+b 528
+b 541
+b 525
+b 2
+b 539
+b 1
+b 29
+b 26
+b 33
+b 16
+b 18
+b 19
+b 30
+b 18
+b 2
+b 13
+b 11
+b 1
+b 42
+b 41
+b 1
+b 32
+b 34
+b 36
+b 37
+b 39
+b 34
+b 2
+b 96
+b 125
+b 205
+b 94
+b 2
+b 202
+b 1
+b 1
+b 2
+b 11
+b 0
+b 1
+b 9
+b 7
+b 1
+b 1
+b 75
+b 77
+b 78
+b 80
+b 77
+b 2
+b 8
+b 3
+b 16
+b 17
+b 19
+b 20
+b 16
+b 3
+b 0
+b 1
+b 21
+b 22
+b 55
+b 21
+b 1
+b 36
+b 0
+b 0
+b 1
+b 64
+b 66
+b 68
+b 69
+b 68
+b 2
+b 61
+b 1
+b 11
+b 11
+b 1
+b 181
+b 263
+b 264
+b 274
+b 180
+b 2
+b 260
+b 1
+b 39
+b 196
+b 205
+b 196
+b 1
+b 0
+b 2
+b 0
+b 1
+b 364
+b 371
+b 372
+b 380
+b 371
+b 1
+b 377
+b 1
+b 154
+b 155
+b 152
+b 2
+b 22
+b 3
+b 0
+b 1
+b 49
+b 51
+b 53
+b 55
+b 49
+b 1
+b 3
+b 5
+b 6
+b 8
+b 10
+b 5
+b 2
+b 12
+b 14
+b 16
+b 18
+b 25
+b 10
+b 1
+b 23
+b 1
+b 38
+b 40
+b 41
+b 38
+b 2
+b 3
+b 5
+b 1
+b 1
+b 266
+b 264
+b 2
+b 103
+b 114
+b 115
+b 117
+b 114
+b 2
+b 89
+b 151
+b 86
+b 1
+b 58
+b 56
+b 1
+b 20
+b 22
+b 286
+b 20
+b 22
+b 23
+b 25
+b 22
+b 2
+b 15
+b 8
+b 144
+b 146
+b 148
+b 150
+b 232
+b 229
+b 1
+b 152
+b 153
+b 150
+b 2
+b 39
+b 36
+b 1
+b 14
+b 31
+b 30
+b 1
+b 15
+b 12
+b 1
+b 1
+b 2
+b 1
+b 3
+b 55
+b 62
+b 68
+b 69
+b 71
+b 68
+b 2
+b 52
+b 1
+b 204
+b 202
+b 2
+b 164
+b 166
+b 167
+b 183
+b 164
+b 2
+b 154
+b 156
+b 23
+b 56
+b 114
+b 13
+b 17
+b 61
+b 67
+b 68
+b 66
+b 1
+b 5
+b 14
+b 15
+b 30
+b 35
+b 12
+b 2
+b 32
+b 1
+b 11
+b 8
+b 1
+b 13
+b 32
+b 33
+b 44
+b 32
+b 1
+b 41
+b 1
+b 49
+b 61
+b 63
+b 151
+b 153
+b 155
+b 156
+b 153
+b 2
+b 2
+b 0
+b 1
+b 294
+b 32
+b 0
+b 1
+b 82
+b 84
+b 82
+b 1
+b 86
+b 88
+b 192
+b 192
+b 1
+b 6
+b 8
+b 8
+b 1
+b 334
+b 336
+b 338
+b 338
+b 1
+b 123
+b 122
+b 2
+b 73
+b 71
+b 2
+b 10
+b 11
+b 9
+b 1
+b 7
+b 213
+b 241
+b 243
+b 245
+b 213
+b 1
+b 237
+b 1
+b 74
+b 71
+b 1
+b 3
+b 4
+b 3
+b 2
+b 4
+b 6
+b 67
+b 75
+b 76
+b 75
+b 1
+b 3
+b 0
+b 2
+b 2
+b 1
+b 79
+b 78
+b 1
+b 3
+b 0
+b 1
+b 194
+b 11
+b 13
+b 14
+b 16
+b 28
+b 11
+b 2
+b 25
+b 2
+b 14
+b 24
+b 37
+b 38
+b 12
+b 2
+b 35
+b 1
+b 19
+b 40
+b 40
+b 1
+b 25
+b 27
+b 22
+b 1
+b 21
+b 22
+b 24
+b 26
+b 20
+b 1
+b 25
+b 1
+b 54
+b 92
+b 94
+b 95
+b 103
+b 105
+b 159
+b 161
+b 161
+b 1
+b 7
+b 8
+b 17
+b 7
+b 1
+b 87
+b 84
+b 1
+b 27
+b 33
+b 32
+b 2
+b 3
+b 0
+b 2
+b 46
+b 47
+b 73
+b 44
+b 2
+b 2
+b 1
+b 68
+b 1
+b 91
+b 93
+b 155
+b 156
+b 158
+b 154
+b 1
+b 93
+b 1
+b 298
+b 296
+b 297
+b 468
+b 295
+b 1
+b 467
+b 1
+b 11
+b 99
+b 18
+b 20
+b 22
+b 24
+b 22
+b 1
+b 8
+b 4
+b 5
+b 68
+b 4
+b 1
+b 65
+b 1
+b 39
+b 38
+b 2
+b 54
+b 61
+b 62
+b 60
+b 1
+b 12
+b 19
+b 38
+b 39
+b 59
+b 38
+b 2
+b 10
+b 1
+b 53
+b 1
+b 10
+b 9
+b 2
+b 16
+b 18
+b 19
+b 21
+b 44
+b 16
+b 2
+b 57
+b 106
+b 116
+b 104
+b 2
+b 56
+b 1
+b 14
+b 15
+b 34
+b 13
+b 1
+b 32
+b 2
+b 13
+b 3
+b 10
+b 11
+b 13
+b 15
+b 9
+b 1
+b 14
+b 1
+b 117
+b 125
+b 126
+b 128
+b 130
+b 116
+b 1
+b 0
+b 127
+b 128
+b 137
+b 126
+b 1
+b 6
+b 35
+b 37
+b 50
+b 49
+b 2
+b 32
+b 1
+b 105
+b 107
+b 109
+b 110
+b 157
+b 107
+b 2
+b 155
+b 1
+b 147
+b 158
+b 66
+b 72
+b 73
+b 10
+b 12
+b 14
+b 126
+b 128
+b 130
+b 144
+b 173
+b 124
+b 1
+b 171
+b 1
+b 44
+b 49
+b 55
+b 57
+b 59
+b 60
+b 57
+b 2
+b 41
+b 1
+b 225
+b 227
+b 10
+b 11
+b 13
+b 15
+b 133
+b 191
+b 193
+b 194
+b 206
+b 193
+b 2
+b 130
+b 1
+b 23
+b 38
+b 40
+b 41
+b 43
+b 45
+b 40
+b 2
+b 20
+b 1
+b 47
+b 59
+b 61
+b 62
+b 142
+b 59
+b 2
+b 46
+b 1
+b 15
+b 14
+b 1
+b 19
+b 21
+b 22
+b 21
+b 2
+b 0
+b 159
+b 158
+b 1
+b 19
+b 20
+b 52
+b 18
+b 1
+b 63
+b 70
+b 71
+b 85
+b 69
+b 1
+b 83
+b 2
+b 38
+b 3
+b 134
+b 149
+b 150
+b 147
+b 2
+b 76
+b 34
+b 33
+b 1
+b 45
+b 46
+b 81
+b 43
+b 2
+b 54
+b 32
+b 51
+b 52
+b 50
+b 1
+b 12
+b 10
+b 2
+b 51
+b 86
+b 87
+b 89
+b 86
+b 2
+b 17
+b 19
+b 19
+b 1
+b 28
+b 27
+b 2
+b 10
+b 12
+b 13
+b 15
+b 10
+b 2
+b 74
+b 51
+b 64
+b 65
+b 67
+b 50
+b 2
+b 61
+b 1
+b 0
+b 2
+b 23
+b 22
+b 2
+b 11
+b 0
+b 2
+b 3
+b 5
+b 12
+b 2
+b 2
+b 145
+b 164
+b 56
+b 54
+b 1
+b 8
+b 9
+b 41
+b 6
+b 2
+b 38
+b 1
+b 68
+b 67
+b 1
+b 43
+b 44
+b 46
+b 48
+b 43
+b 2
+b 41
+b 43
+b 45
+b 47
+b 49
+b 41
+b 1
+b 152
+b 154
+b 160
+b 104
+b 124
+b 131
+b 130
+b 2
+b 101
+b 1
+b 3
+b 64
+b 65
+b 62
+b 2
+b 2
+b 2
+b 1
+b 72
+b 106
+b 107
+b 109
+b 106
+b 2
+b 70
+b 1
+b 133
+b 139
+b 140
+b 148
+b 137
+b 2
+b 145
+b 1
+b 67
+b 67
+b 1
+b 10
+b 11
+b 10
+b 2
+b 14
+b 38
+b 36
+b 1
+b 44
+b 45
+b 57
+b 44
+b 1
+b 154
+b 155
+b 164
+b 154
+b 1
+b 161
+b 1
+b 71
+b 87
+b 88
+b 87
+b 1
+b 4
+b 18
+b 266
+b 298
+b 299
+b 304
+b 266
+b 1
+b 296
+b 1
+b 1
+b 94
+b 95
+b 94
+b 1
+b 7
+b 5
+b 1
+b 7
+b 9
+b 7
+b 1
+b 12
+b 13
+b 10
+b 2
+b 11
+b 13
+b 8
+b 1
+b 22
+b 41
+b 20
+b 1
+b 7
+b 0
+b 1
+b 0
+b 1
+b 15
+b 25
+b 26
+b 25
+b 2
+b 109
+b 96
+b 114
+b 144
+b 143
+b 1
+b 5
+b 3
+b 2
+b 124
+b 123
+b 1
+b 47
+b 49
+b 50
+b 52
+b 54
+b 49
+b 2
+b 13
+b 34
+b 36
+b 37
+b 45
+b 34
+b 2
+b 214
+b 216
+b 214
+b 1
+b 1
+b 2
+b 4
+b 6
+b 63
+b 74
+b 62
+b 1
+b 23
+b 55
+b 96
+b 171
+b 179
+b 180
+b 179
+b 1
+b 93
+b 1
+b 20
+b 133
+b 149
+b 237
+b 238
+b 240
+b 122
+b 137
+b 137
+b 1
+b 119
+b 1
+b 44
+b 46
+b 48
+b 50
+b 51
+b 48
+b 2
+b 2
+b 0
+b 1
+b 332
+b 35
+b 36
+b 38
+b 40
+b 34
+b 1
+b 39
+b 1
+b 49
+b 50
+b 60
+b 49
+b 1
+b 57
+b 2
+b 5
+b 3
+b 61
+b 63
+b 65
+b 66
+b 63
+b 2
+b 37
+b 35
+b 1
+b 193
+b 192
+b 1
+b 12
+b 13
+b 21
+b 26
+b 10
+b 2
+b 23
+b 1
+b 137
+b 183
+b 135
+b 1
+b 15
+b 16
+b 18
+b 14
+b 1
+b 77
+b 78
+b 89
+b 76
+b 1
+b 34
+b 9
+b 7
+b 1
+b 4
+b 6
+b 7
+b 6
+b 1
+b 38
+b 40
+b 42
+b 36
+b 1
+b 115
+b 117
+b 119
+b 121
+b 123
+b 123
+b 1
+b 112
+b 1
+b 17
+b 53
+b 54
+b 53
+b 1
+b 6
+b 6
+b 1
+b 6
+b 61
+b 96
+b 97
+b 99
+b 94
+b 2
+b 60
+b 1
+b 120
+b 31
+b 28
+b 1
+b 0
+b 1
+b 0
+b 2
+b 13
+b 11
+b 1
+b 197
+b 205
+b 206
+b 208
+b 210
+b 204
+b 1
+b 196
+b 1
+b 52
+b 4
+b 2
+b 83
+b 89
+b 90
+b 89
+b 2
+b 4
+b 4
+b 1
+b 18
+b 32
+b 33
+b 105
+b 124
+b 132
+b 29
+b 31
+b 32
+b 34
+b 1
+b 7
+b 5
+b 2
+b 0
+b 1
+b 7
+b 8
+b 14
+b 5
+b 2
+b 9
+b 6
+b 1
+b 3
+b 2
+b 1
+b 15
+b 17
+b 18
+b 15
+b 2
+b 51
+b 53
+b 82
+b 111
+b 112
+b 119
+b 82
+b 1
+b 109
+b 1
+b 198
+b 197
+b 1
+b 120
+b 121
+b 120
+b 1
+b 10
+b 27
+b 29
+b 31
+b 33
+b 34
+b 29
+b 1
+b 49
+b 4
+b 6
+b 8
+b 10
+b 6
+b 1
+b 39
+b 78
+b 37
+b 2
+b 14
+b 15
+b 31
+b 14
+b 1
+b 198
+b 200
+b 201
+b 209
+b 211
+b 198
+b 2
+b 27
+b 29
+b 109
+b 110
+b 127
+b 109
+b 1
+b 82
+b 93
+b 94
+b 109
+b 82
+b 1
+b 91
+b 1
+b 45
+b 67
+b 86
+b 65
+b 2
+b 44
+b 1
+b 253
+b 102
+b 104
+b 105
+b 107
+b 104
+b 2
+b 1
+b 1
+b 1
+b 30
+b 29
+b 1
+b 164
+b 165
+b 167
+b 163
+b 1
+b 19
+b 74
+b 37
+b 38
+b 37
+b 1
+b 3
+b 2
+b 1
+b 19
+b 17
+b 1
+b 4
+b 5
+b 4
+b 2
+b 1
+b 355
+b 167
+b 169
+b 169
+b 1
+b 22
+b 23
+b 20
+b 2
+b 20
+b 20
+b 1
+b 247
+b 257
+b 259
+b 260
+b 271
+b 246
+b 1
+b 22
+b 24
+b 26
+b 32
+b 20
+b 1
+b 2
+b 1
+b 1
+b 22
+b 24
+b 43
+b 44
+b 74
+b 43
+b 2
+b 70
+b 1
+b 7
+b 41
+b 42
+b 48
+b 7
+b 1
+b 39
+b 1
+b 192
+b 194
+b 196
+b 197
+b 217
+b 194
+b 2
+b 6
+b 89
+b 91
+b 93
+b 159
+b 161
+b 163
+b 165
+b 163
+b 1
+b 165
+b 164
+b 1
+b 10
+b 11
+b 17
+b 23
+b 10
+b 2
+b 13
+b 1
+b 43
+b 73
+b 74
+b 72
+b 1
+b 12
+b 10
+b 1
+b 6
+b 32
+b 33
+b 5
+b 1
+b 104
+b 88
+b 89
+b 88
+b 2
+b 38
+b 10
+b 12
+b 54
+b 56
+b 57
+b 54
+b 2
+b 130
+b 132
+b 132
+b 1
+b 5
+b 4
+b 1
+b 3
+b 5
+b 108
+b 127
+b 128
+b 170
+b 127
+b 2
+b 165
+b 1
+b 3
+b 75
+b 76
+b 86
+b 73
+b 2
+b 3
+b 1
+b 81
+b 1
+b 88
+b 87
+b 2
+b 3
+b 4
+b 2
+b 1
+b 5
+b 0
+b 2
+b 44
+b 3
+b 5
+b 6
+b 13
+b 3
+b 2
+b 10
+b 1
+b 68
+b 70
+b 214
+b 178
+b 185
+b 240
+b 241
+b 177
+b 1
+b 7
+b 299
+b 314
+b 315
+b 336
+b 297
+b 1
+b 313
+b 1
+b 180
+b 234
+b 235
+b 246
+b 233
+b 1
+b 78
+b 125
+b 126
+b 128
+b 124
+b 1
+b 17
+b 15
+b 2
+b 41
+b 40
+b 1
+b 4
+b 5
+b 43
+b 4
+b 2
+b 40
+b 1
+b 115
+b 113
+b 1
+b 147
+b 148
+b 150
+b 146
+b 1
+b 67
+b 75
+b 37
+b 46
+b 35
+b 1
+b 30
+b 29
+b 1
+b 55
+b 152
+b 151
+b 1
+b 11
+b 12
+b 10
+b 1
+b 35
+b 37
+b 4
+b 3
+b 5
+b 25
+b 3
+b 1
+b 0
+b 85
+b 143
+b 144
+b 159
+b 141
+b 2
+b 156
+b 1
+b 371
+b 17
+b 18
+b 20
+b 56
+b 80
+b 54
+b 1
+b 8
+b 9
+b 11
+b 13
+b 8
+b 2
+b 48
+b 65
+b 66
+b 83
+b 65
+b 2
+b 45
+b 1
+b 77
+b 1
+b 13
+b 15
+b 16
+b 35
+b 49
+b 13
+b 2
+b 45
+b 1
+b 33
+b 81
+b 83
+b 32
+b 1
+b 0
+b 1
+b 10
+b 16
+b 17
+b 33
+b 14
+b 2
+b 30
+b 1
+b 95
+b 86
+b 106
+b 107
+b 106
+b 1
+b 33
+b 35
+b 31
+b 1
+b 87
+b 89
+b 281
+b 280
+b 1
+b 33
+b 72
+b 74
+b 85
+b 86
+b 88
+b 83
+b 2
+b 74
+b 1
+b 84
+b 1
+b 24
+b 25
+b 36
+b 24
+b 1
+b 26
+b 24
+b 1
+b 134
+b 155
+b 156
+b 179
+b 155
+b 2
+b 132
+b 1
+b 201
+b 249
+b 250
+b 201
+b 1
+b 247
+b 1
+b 0
+b 9
+b 61
+b 5
+b 7
+b 8
+b 7
+b 2
+b 2
+b 1
+b 14
+b 11
+b 1
+b 9
+b 17
+b 18
+b 29
+b 17
+b 1
+b 26
+b 1
+b 61
+b 69
+b 60
+b 2
+b 28
+b 122
+b 130
+b 131
+b 141
+b 127
+b 1
+b 74
+b 76
+b 77
+b 84
+b 74
+b 2
+b 4
+b 2
+b 1
+b 126
+b 28
+b 30
+b 31
+b 28
+b 2
+b 135
+b 135
+b 1
+b 79
+b 16
+b 24
+b 16
+b 1
+b 20
+b 1
+b 89
+b 118
+b 87
+b 1
+b 3
+b 5
+b 6
+b 12
+b 3
+b 2
+b 87
+b 88
+b 98
+b 87
+b 1
+b 95
+b 1
+b 3
+b 12
+b 14
+b 14
+b 1
+b 11
+b 12
+b 49
+b 10
+b 1
+b 9
+b 13
+b 14
+b 16
+b 13
+b 2
+b 47
+b 45
+b 1
+b 90
+b 89
+b 1
+b 70
+b 71
+b 85
+b 110
+b 68
+b 2
+b 107
+b 1
+b 34
+b 14
+b 15
+b 49
+b 14
+b 2
+b 13
+b 21
+b 22
+b 24
+b 19
+b 2
+b 33
+b 32
+b 1
+b 19
+b 31
+b 32
+b 42
+b 30
+b 1
+b 18
+b 1
+b 127
+b 154
+b 156
+b 157
+b 156
+b 2
+b 124
+b 1
+b 0
+b 60
+b 4
+b 5
+b 24
+b 4
+b 1
+b 21
+b 1
+b 311
+b 379
+b 380
+b 393
+b 395
+b 379
+b 2
+b 308
+b 1
+b 26
+b 53
+b 54
+b 56
+b 58
+b 53
+b 2
+b 23
+b 1
+b 8
+b 14
+b 15
+b 33
+b 14
+b 2
+b 5
+b 1
+b 60
+b 101
+b 102
+b 108
+b 64
+b 129
+b 150
+b 151
+b 153
+b 150
+b 2
+b 3
+b 1
+b 1
+b 175
+b 177
+b 177
+b 1
+b 320
+b 322
+b 323
+b 0
+b 155
+b 169
+b 170
+b 168
+b 1
+b 64
+b 66
+b 66
+b 1
+b 11
+b 3
+b 21
+b 32
+b 30
+b 1
+b 61
+b 76
+b 75
+b 1
+b 229
+b 9
+b 11
+b 13
+b 14
+b 11
+b 2
+b 53
+b 60
+b 62
+b 63
+b 60
+b 2
+b 53
+b 59
+b 61
+b 63
+b 64
+b 61
+b 2
+b 13
+b 12
+b 1
+b 11
+b 32
+b 33
+b 35
+b 9
+b 1
+b 31
+b 2
+b 0
+b 22
+b 14
+b 12
+b 1
+b 14
+b 15
+b 35
+b 13
+b 1
+b 0
+b 70
+b 76
+b 77
+b 97
+b 74
+b 2
+b 95
+b 1
+b 16
+b 18
+b 34
+b 35
+b 44
+b 18
+b 1
+b 32
+b 1
+b 233
+b 231
+b 2
+b 62
+b 98
+b 99
+b 101
+b 97
+b 1
+b 124
+b 125
+b 127
+b 129
+b 124
+b 2
+b 64
+b 62
+b 2
+b 51
+b 97
+b 99
+b 100
+b 109
+b 97
+b 2
+b 107
+b 1
+b 74
+b 72
+b 1
+b 80
+b 82
+b 84
+b 85
+b 102
+b 82
+b 2
+b 241
+b 275
+b 274
+b 1
+b 13
+b 38
+b 36
+b 1
+b 35
+b 32
+b 1
+b 24
+b 150
+b 152
+b 154
+b 147
+b 1
+b 1
+b 37
+b 0
+b 1
+b 26
+b 67
+b 69
+b 70
+b 274
+b 69
+b 1
+b 271
+b 2
+b 39
+b 41
+b 43
+b 45
+b 43
+b 1
+b 59
+b 61
+b 63
+b 65
+b 63
+b 1
+b 4
+b 5
+b 59
+b 305
+b 306
+b 321
+b 304
+b 1
+b 58
+b 1
+b 1
+b 198
+b 211
+b 212
+b 256
+b 258
+b 211
+b 2
+b 251
+b 1
+b 103
+b 117
+b 118
+b 116
+b 1
+b 102
+b 1
+b 7
+b 6
+b 7
+b 9
+b 71
+b 5
+b 1
+b 67
+b 1
+b 63
+b 60
+b 1
+b 6
+b 7
+b 4
+b 2
+b 3
+b 10
+b 1
+b 1
+b 52
+b 54
+b 86
+b 116
+b 13
+b 12
+b 1
+b 7
+b 9
+b 9
+b 1
+b 28
+b 112
+b 113
+b 115
+b 117
+b 119
+b 111
+b 1
+b 118
+b 1
+b 150
+b 27
+b 15
+b 61
+b 63
+b 65
+b 67
+b 68
+b 70
+b 72
+b 65
+b 2
+b 70
+b 1
+b 45
+b 47
+b 47
+b 1
+b 176
+b 177
+b 179
+b 176
+b 2
+b 147
+b 149
+b 151
+b 152
+b 154
+b 156
+b 151
+b 2
+b 144
+b 1
+b 8
+b 27
+b 28
+b 25
+b 2
+b 19
+b 18
+b 1
+b 410
+b 8
+b 0
+b 2
+b 83
+b 85
+b 86
+b 93
+b 85
+b 1
+b 90
+b 2
+b 3
+b 209
+b 218
+b 219
+b 228
+b 218
+b 1
+b 225
+b 1
+b 21
+b 22
+b 21
+b 1
+b 26
+b 23
+b 1
+b 46
+b 9
+b 11
+b 13
+b 14
+b 16
+b 11
+b 2
+b 233
+b 248
+b 249
+b 251
+b 253
+b 246
+b 2
+b 251
+b 1
+b 102
+b 67
+b 69
+b 78
+b 80
+b 81
+b 85
+b 46
+b 45
+b 1
+b 262
+b 310
+b 311
+b 350
+b 307
+b 1
+b 50
+b 10
+b 12
+b 14
+b 15
+b 12
+b 2
+b 0
+b 0
+b 1
+b 52
+b 71
+b 52
+b 1
+b 0
+b 2
+b 126
+b 174
+b 58
+b 35
+b 32
+b 1
+b 6
+b 7
+b 17
+b 19
+b 6
+b 2
+b 12
+b 1
+b 88
+b 86
+b 1
+b 164
+b 166
+b 168
+b 170
+b 171
+b 168
+b 2
+b 75
+b 73
+b 1
+b 6
+b 7
+b 38
+b 4
+b 2
+b 163
+b 165
+b 166
+b 163
+b 2
+b 42
+b 42
+b 1
+b 64
+b 66
+b 66
+b 1
+b 5
+b 4
+b 1
+b 51
+b 70
+b 71
+b 50
+b 1
+b 3
+b 1
+b 57
+b 223
+b 55
+b 1
+b 6
+b 8
+b 9
+b 6
+b 2
+b 17
+b 19
+b 37
+b 35
+b 1
+b 7
+b 7
+b 1
+b 5
+b 6
+b 8
+b 10
+b 12
+b 5
+b 2
+b 7
+b 13
+b 34
+b 88
+b 6
+b 8
+b 6
+b 1
+b 131
+b 129
+b 1
+b 18
+b 20
+b 21
+b 32
+b 20
+b 21
+b 39
+b 19
+b 1
+b 12
+b 10
+b 1
+b 30
+b 74
+b 101
+b 102
+b 99
+b 2
+b 3
+b 0
+b 1
+b 64
+b 7
+b 9
+b 6
+b 7
+b 90
+b 92
+b 93
+b 87
+b 38
+b 220
+b 222
+b 67
+b 69
+b 70
+b 78
+b 69
+b 2
+b 109
+b 120
+b 121
+b 123
+b 117
+b 1
+b 27
+b 6
+b 27
+b 28
+b 25
+b 2
+b 4
+b 267
+b 295
+b 166
+b 34
+b 0
+b 1
+b 17
+b 55
+b 56
+b 62
+b 54
+b 1
+b 13
+b 31
+b 30
+b 2
+b 100
+b 3
+b 5
+b 7
+b 8
+b 5
+b 2
+b 0
+b 0
+b 1
+b 53
+b 24
+b 40
+b 41
+b 40
+b 1
+b 23
+b 25
+b 33
+b 23
+b 1
+b 33
+b 46
+b 48
+b 49
+b 51
+b 53
+b 46
+b 2
+b 51
+b 1
+b 224
+b 250
+b 290
+b 249
+b 1
+b 31
+b 44
+b 45
+b 52
+b 43
+b 1
+b 11
+b 10
+b 2
+b 70
+b 75
+b 76
+b 82
+b 75
+b 1
+b 12
+b 11
+b 1
+b 55
+b 56
+b 58
+b 87
+b 54
+b 1
+b 56
+b 54
+b 1
+b 43
+b 44
+b 46
+b 41
+b 2
+b 3
+b 0
+b 1
+b 33
+b 40
+b 41
+b 43
+b 43
+b 1
+b 5
+b 339
+b 338
+b 1
+b 8
+b 15
+b 244
+b 243
+b 1
+b 6
+b 7
+b 4
+b 2
+b 0
+b 2
+b 0
+b 1
+b 116
+b 101
+b 0
+b 2
+b 4
+b 10
+b 8
+b 2
+b 133
+b 141
+b 146
+b 130
+b 1
+b 58
+b 55
+b 1
+b 15
+b 16
+b 15
+b 1
+b 236
+b 260
+b 235
+b 2
+b 80
+b 82
+b 84
+b 86
+b 82
+b 1
+b 180
+b 182
+b 184
+b 186
+b 187
+b 189
+b 57
+b 68
+b 69
+b 67
+b 1
+b 10
+b 12
+b 12
+b 1
+b 42
+b 44
+b 40
+b 1
+b 1
+b 10
+b 27
+b 266
+b 180
+b 182
+b 184
+b 182
+b 1
+b 236
+b 238
+b 234
+b 1
+b 20
+b 21
+b 20
+b 1
+b 12
+b 5
+b 10
+b 55
+b 57
+b 58
+b 60
+b 4
+b 1
+b 78
+b 110
+b 112
+b 114
+b 115
+b 121
+b 114
+b 2
+b 107
+b 1
+b 25
+b 178
+b 209
+b 210
+b 212
+b 207
+b 2
+b 177
+b 1
+b 37
+b 36
+b 1
+b 3
+b 13
+b 15
+b 16
+b 1
+b 1
+b 0
+b 40
+b 50
+b 49
+b 1
+b 3
+b 4
+b 3
+b 1
+b 138
+b 162
+b 336
+b 18
+b 19
+b 25
+b 24
+b 1
+b 80
+b 77
+b 1
+b 114
+b 128
+b 130
+b 131
+b 1
+b 39
+b 41
+b 48
+b 49
+b 62
+b 41
+b 1
+b 46
+b 1
+b 69
+b 89
+b 90
+b 42
+b 50
+b 41
+b 1
+b 46
+b 1
+b 63
+b 156
+b 155
+b 1
+b 4
+b 5
+b 22
+b 4
+b 2
+b 115
+b 117
+b 99
+b 100
+b 124
+b 97
+b 2
+b 121
+b 1
+b 355
+b 355
+b 1
+b 43
+b 44
+b 43
+b 2
+b 114
+b 113
+b 1
+b 52
+b 50
+b 2
+b 124
+b 126
+b 127
+b 129
+b 124
+b 2
+b 57
+b 71
+b 3
+b 208
+b 210
+b 253
+b 254
+b 256
+b 253
+b 2
+b 205
+b 1
+b 4
+b 6
+b 64
+b 63
+b 1
+b 228
+b 230
+b 20
+b 21
+b 23
+b 18
+b 2
+b 21
+b 1
+b 12
+b 14
+b 16
+b 18
+b 35
+b 18
+b 1
+b 32
+b 1
+b 21
+b 27
+b 20
+b 2
+b 145
+b 84
+b 188
+b 189
+b 191
+b 186
+b 2
+b 83
+b 1
+b 56
+b 2
+b 30
+b 31
+b 33
+b 35
+b 33
+b 1
+b 29
+b 29
+b 1
+b 9
+b 10
+b 8
+b 1
+b 6
+b 63
+b 65
+b 67
+b 68
+b 97
+b 65
+b 2
+b 95
+b 1
+b 20
+b 8
+b 9
+b 32
+b 46
+b 8
+b 1
+b 29
+b 2
+b 46
+b 48
+b 96
+b 94
+b 1
+b 94
+b 96
+b 98
+b 100
+b 96
+b 1
+b 40
+b 212
+b 254
+b 255
+b 268
+b 254
+b 2
+b 263
+b 1
+b 198
+b 199
+b 209
+b 198
+b 2
+b 205
+b 1
+b 19
+b 33
+b 32
+b 1
+b 125
+b 140
+b 141
+b 153
+b 161
+b 123
+b 2
+b 75
+b 21
+b 22
+b 29
+b 20
+b 1
+b 27
+b 2
+b 1
+b 384
+b 386
+b 387
+b 405
+b 407
+b 386
+b 1
+b 402
+b 1
+b 50
+b 52
+b 54
+b 60
+b 59
+b 1
+b 8
+b 10
+b 12
+b 14
+b 12
+b 1
+b 45
+b 53
+b 88
+b 87
+b 1
+b 22
+b 24
+b 26
+b 28
+b 24
+b 1
+b 47
+b 49
+b 50
+b 58
+b 47
+b 2
+b 56
+b 1
+b 42
+b 46
+b 45
+b 1
+b 3
+b 4
+b 6
+b 2
+b 1
+b 91
+b 5
+b 4
+b 1
+b 3
+b 4
+b 3
+b 2
+b 19
+b 71
+b 79
+b 356
+b 353
+b 1
+b 76
+b 74
+b 1
+b 104
+b 106
+b 107
+b 115
+b 117
+b 104
+b 2
+b 115
+b 1
+b 5
+b 53
+b 55
+b 56
+b 68
+b 53
+b 2
+b 25
+b 24
+b 2
+b 17
+b 19
+b 20
+b 22
+b 24
+b 26
+b 19
+b 2
+b 19
+b 28
+b 30
+b 31
+b 48
+b 30
+b 1
+b 17
+b 1
+b 54
+b 95
+b 52
+b 2
+b 165
+b 164
+b 1
+b 1
+b 2
+b 4
+b 0
+b 1
+b 111
+b 112
+b 160
+b 110
+b 1
+b 41
+b 2
+b 1
+b 1
+b 9
+b 10
+b 12
+b 14
+b 9
+b 2
+b 19
+b 21
+b 16
+b 1
+b 90
+b 92
+b 94
+b 103
+b 88
+b 1
+b 101
+b 1
+b 532
+b 529
+b 1
+b 124
+b 125
+b 127
+b 155
+b 123
+b 1
+b 175
+b 190
+b 191
+b 198
+b 196
+b 1
+b 99
+b 101
+b 103
+b 128
+b 103
+b 1
+b 124
+b 1
+b 142
+b 141
+b 1
+b 86
+b 88
+b 89
+b 123
+b 83
+b 1
+b 9
+b 7
+b 1
+b 122
+b 123
+b 125
+b 122
+b 2
+b 6
+b 73
+b 75
+b 73
+b 1
+b 14
+b 196
+b 87
+b 89
+b 90
+b 92
+b 89
+b 2
+b 188
+b 190
+b 191
+b 193
+b 195
+b 258
+b 188
+b 2
+b 255
+b 1
+b 196
+b 217
+b 216
+b 1
+b 76
+b 126
+b 126
+b 1
+b 9
+b 10
+b 12
+b 7
+b 2
+b 10
+b 1
+b 45
+b 43
+b 2
+b 1
+b 16
+b 17
+b 19
+b 21
+b 16
+b 2
+b 142
+b 142
+b 1
+b 2
+b 4
+b 14
+b 15
+b 0
+b 1
+b 155
+b 157
+b 159
+b 167
+b 168
+b 165
+b 3
+b 27
+b 26
+b 1
+b 424
+b 81
+b 70
+b 72
+b 73
+b 106
+b 72
+b 2
+b 232
+b 7
+b 8
+b 19
+b 21
+b 6
+b 1
+b 20
+b 1
+b 3
+b 4
+b 12
+b 2
+b 1
+b 3
+b 0
+b 1
+b 56
+b 58
+b 60
+b 62
+b 56
+b 1
+b 155
+b 180
+b 181
+b 180
+b 2
+b 3
+b 0
+b 1
+b 2
+b 1
+b 1
+b 239
+b 15
+b 17
+b 18
+b 63
+b 145
+b 142
+b 1
+b 19
+b 6
+b 8
+b 5
+b 3
+b 40
+b 50
+b 1
+b 0
+b 1
+b 9
+b 11
+b 7
+b 1
+b 56
+b 78
+b 79
+b 78
+b 1
+b 122
+b 128
+b 127
+b 2
+b 10
+b 12
+b 14
+b 15
+b 22
+b 51
+b 12
+b 2
+b 47
+b 2
+b 33
+b 35
+b 37
+b 44
+b 35
+b 1
+b 16
+b 65
+b 66
+b 82
+b 84
+b 82
+b 1
+b 0
+b 2
+b 14
+b 0
+b 1
+b 93
+b 292
+b 301
+b 302
+b 291
+b 1
+b 31
+b 33
+b 250
+b 251
+b 253
+b 255
+b 257
+b 250
+b 2
+b 41
+b 41
+b 1
+b 45
+b 60
+b 68
+b 44
+b 1
+b 62
+b 74
+b 6
+b 80
+b 4
+b 6
+b 8
+b 10
+b 11
+b 6
+b 1
+b 19
+b 21
+b 23
+b 24
+b 21
+b 2
+b 17
+b 17
+b 1
+b 35
+b 106
+b 107
+b 33
+b 1
+b 105
+b 1
+b 6
+b 204
+b 186
+b 200
+b 201
+b 207
+b 185
+b 2
+b 197
+b 1
+b 53
+b 55
+b 57
+b 72
+b 73
+b 0
+b 2
+b 78
+b 76
+b 2
+b 36
+b 38
+b 40
+b 41
+b 79
+b 38
+b 2
+b 35
+b 32
+b 1
+b 2
+b 4
+b 6
+b 7
+b 0
+b 1
+b 67
+b 74
+b 75
+b 36
+b 22
+b 8
+b 9
+b 19
+b 47
+b 8
+b 1
+b 16
+b 2
+b 107
+b 8
+b 9
+b 11
+b 13
+b 15
+b 7
+b 1
+b 14
+b 1
+b 147
+b 152
+b 168
+b 169
+b 171
+b 173
+b 151
+b 2
+b 166
+b 2
+b 21
+b 23
+b 25
+b 21
+b 1
+b 42
+b 44
+b 12
+b 20
+b 21
+b 23
+b 19
+b 1
+b 11
+b 1
+b 119
+b 8
+b 5
+b 1
+b 19
+b 20
+b 22
+b 19
+b 2
+b 18
+b 44
+b 38
+b 39
+b 113
+b 112
+b 1
+b 57
+b 55
+b 2
+b 34
+b 12
+b 13
+b 47
+b 11
+b 1
+b 80
+b 89
+b 78
+b 2
+b 10
+b 11
+b 13
+b 17
+b 10
+b 2
+b 6
+b 8
+b 10
+b 11
+b 8
+b 2
+b 209
+b 208
+b 1
+b 84
+b 91
+b 92
+b 33
+b 74
+b 125
+b 104
+b 111
+b 73
+b 227
+b 3
+b 4
+b 25
+b 3
+b 1
+b 416
+b 413
+b 1
+b 95
+b 5
+b 6
+b 5
+b 1
+b 0
+b 0
+b 1
+b 92
+b 104
+b 175
+b 183
+b 174
+b 1
+b 16
+b 27
+b 28
+b 30
+b 41
+b 114
+b 242
+b 21
+b 22
+b 59
+b 79
+b 61
+b 62
+b 60
+b 1
+b 2
+b 69
+b 71
+b 72
+b 74
+b 53
+b 60
+b 6
+b 203
+b 10
+b 8
+b 1
+b 0
+b 2
+b 0
+b 1
+b 18
+b 30
+b 32
+b 33
+b 41
+b 40
+b 1
+b 90
+b 92
+b 94
+b 95
+b 121
+b 94
+b 2
+b 116
+b 1
+b 60
+b 53
+b 54
+b 52
+b 1
+b 5
+b 5
+b 1
+b 72
+b 74
+b 76
+b 77
+b 82
+b 74
+b 2
+b 79
+b 1
+b 293
+b 295
+b 297
+b 299
+b 291
+b 1
+b 158
+b 157
+b 1
+b 236
+b 13
+b 14
+b 140
+b 39
+b 40
+b 42
+b 44
+b 15
+b 8
+b 8
+b 1
+b 11
+b 12
+b 11
+b 2
+b 0
+b 2
+b 18
+b 0
+b 1
+b 54
+b 144
+b 146
+b 148
+b 149
+b 146
+b 2
+b 1
+b 36
+b 42
+b 43
+b 50
+b 42
+b 1
+b 47
+b 1
+b 23
+b 57
+b 58
+b 91
+b 63
+b 65
+b 67
+b 68
+b 76
+b 56
+b 104
+b 103
+b 1
+b 24
+b 34
+b 0
+b 1
+b 6
+b 23
+b 20
+b 1
+b 11
+b 13
+b 14
+b 11
+b 2
+b 3
+b 47
+b 49
+b 51
+b 52
+b 45
+b 1
+b 50
+b 1
+b 39
+b 115
+b 127
+b 128
+b 136
+b 125
+b 2
+b 133
+b 1
+b 227
+b 229
+b 231
+b 176
+b 10
+b 41
+b 42
+b 51
+b 41
+b 1
+b 48
+b 1
+b 272
+b 287
+b 288
+b 290
+b 271
+b 2
+b 284
+b 1
+b 55
+b 12
+b 15
+b 32
+b 13
+b 2
+b 28
+b 39
+b 40
+b 62
+b 5
+b 25
+b 26
+b 35
+b 25
+b 1
+b 17
+b 62
+b 63
+b 7
+b 5
+b 7
+b 75
+b 123
+b 1
+b 0
+b 1
+b 124
+b 135
+b 121
+b 1
+b 17
+b 18
+b 20
+b 17
+b 2
+b 0
+b 120
+b 122
+b 128
+b 129
+b 120
+b 1
+b 28
+b 249
+b 246
+b 1
+b 0
+b 5
+b 6
+b 8
+b 10
+b 5
+b 2
+b 5
+b 7
+b 9
+b 11
+b 12
+b 14
+b 16
+b 9
+b 2
+b 14
+b 1
+b 24
+b 32
+b 33
+b 35
+b 37
+b 39
+b 32
+b 2
+b 19
+b 17
+b 2
+b 783
+b 785
+b 34
+b 0
+b 1
+b 17
+b 150
+b 1
+b 22
+b 40
+b 39
+b 1
+b 163
+b 162
+b 2
+b 216
+b 7
+b 1
+b 2
+b 1
+b 1
+b 7
+b 87
+b 88
+b 254
+b 6
+b 1
+b 30
+b 32
+b 34
+b 36
+b 30
+b 1
+b 311
+b 107
+b 108
+b 8
+b 126
+b 134
+b 135
+b 148
+b 127
+b 142
+b 144
+b 142
+b 1
+b 4
+b 5
+b 22
+b 3
+b 1
+b 21
+b 1
+b 2
+b 24
+b 41
+b 55
+b 57
+b 59
+b 60
+b 59
+b 3
+b 22
+b 1
+b 50
+b 1
+b 38
+b 48
+b 49
+b 47
+b 1
+b 14
+b 16
+b 16
+b 1
+b 185
+b 196
+b 3
+b 4
+b 6
+b 2
+b 1
+b 143
+b 152
+b 37
+b 38
+b 0
+b 2
+b 207
+b 205
+b 1
+b 33
+b 34
+b 30
+b 1
+b 10
+b 6
+b 8
+b 10
+b 12
+b 8
+b 1
+b 30
+b 29
+b 1
+b 13
+b 14
+b 20
+b 13
+b 2
+b 375
+b 72
+b 74
+b 75
+b 0
+b 10
+b 76
+b 75
+b 2
+b 37
+b 38
+b 54
+b 37
+b 1
+b 77
+b 78
+b 80
+b 74
+b 1
+b 34
+b 1
+b 4
+b 6
+b 8
+b 9
+b 11
+b 23
+b 2
+b 1
+b 7
+b 2
+b 33
+b 33
+b 1
+b 3
+b 4
+b 31
+b 3
+b 1
+b 37
+b 90
+b 92
+b 93
+b 92
+b 1
+b 4
+b 2
+b 2
+b 13
+b 11
+b 2
+b 19
+b 21
+b 22
+b 19
+b 2
+b 35
+b 162
+b 164
+b 166
+b 168
+b 166
+b 1
+b 51
+b 49
+b 1
+b 4
+b 29
+b 18
+b 17
+b 2
+b 132
+b 133
+b 135
+b 148
+b 10
+b 148
+b 149
+b 151
+b 153
+b 28
+b 30
+b 30
+b 1
+b 42
+b 43
+b 68
+b 41
+b 1
+b 8
+b 15
+b 29
+b 6
+b 2
+b 18
+b 17
+b 1
+b 22
+b 23
+b 25
+b 16
+b 14
+b 1
+b 9
+b 8
+b 1
+b 23
+b 46
+b 47
+b 49
+b 51
+b 46
+b 2
+b 52
+b 49
+b 1
+b 8
+b 9
+b 50
+b 7
+b 1
+b 68
+b 82
+b 68
+b 1
+b 78
+b 1
+b 51
+b 59
+b 60
+b 78
+b 20
+b 22
+b 23
+b 29
+b 22
+b 2
+b 25
+b 1
+b 6
+b 198
+b 12
+b 4
+b 3
+b 1
+b 70
+b 72
+b 74
+b 75
+b 88
+b 72
+b 2
+b 36
+b 34
+b 2
+b 98
+b 97
+b 1
+b 9
+b 21
+b 47
+b 55
+b 56
+b 58
+b 55
+b 2
+b 44
+b 1
+b 248
+b 286
+b 247
+b 2
+b 281
+b 1
+b 0
+b 2
+b 3
+b 96
+b 0
+b 2
+b 47
+b 109
+b 111
+b 112
+b 9
+b 91
+b 77
+b 85
+b 86
+b 88
+b 90
+b 88
+b 1
+b 4
+b 10
+b 22
+b 23
+b 4
+b 1
+b 36
+b 35
+b 1
+b 99
+b 111
+b 296
+b 306
+b 312
+b 313
+b 3
+b 193
+b 202
+b 203
+b 212
+b 193
+b 1
+b 200
+b 1
+b 89
+b 91
+b 106
+b 107
+b 106
+b 2
+b 54
+b 53
+b 1
+b 133
+b 0
+b 2
+b 9
+b 15
+b 68
+b 76
+b 91
+b 67
+b 1
+b 133
+b 24
+b 52
+b 53
+b 55
+b 50
+b 2
+b 196
+b 201
+b 202
+b 235
+b 201
+b 1
+b 193
+b 1
+b 19
+b 21
+b 23
+b 24
+b 36
+b 14
+b 16
+b 27
+b 11
+b 1
+b 24
+b 1
+b 787
+b 71
+b 33
+b 35
+b 7
+b 41
+b 43
+b 82
+b 81
+b 1
+b 4
+b 6
+b 7
+b 9
+b 11
+b 6
+b 2
+b 88
+b 95
+b 96
+b 98
+b 100
+b 94
+b 1
+b 61
+b 63
+b 63
+b 1
+b 66
+b 67
+b 66
+b 2
+b 6
+b 4
+b 1
+b 50
+b 6
+b 13
+b 5
+b 1
+b 298
+b 297
+b 2
+b 12
+b 13
+b 15
+b 55
+b 11
+b 1
+b 105
+b 102
+b 1
+b 38
+b 39
+b 41
+b 43
+b 45
+b 36
+b 2
+b 99
+b 100
+b 155
+b 167
+b 4
+b 3
+b 1
+b 46
+b 48
+b 12
+b 20
+b 21
+b 10
+b 1
+b 15
+b 101
+b 102
+b 39
+b 31
+b 31
+b 1
+b 56
+b 55
+b 1
+b 0
+b 28
+b 22
+b 22
+b 1
+b 38
+b 39
+b 41
+b 67
+b 37
+b 1
+b 68
+b 1
+b 10
+b 106
+b 107
+b 109
+b 111
+b 4
+b 4
+b 23
+b 25
+b 27
+b 28
+b 21
+b 1
+b 26
+b 1
+b 50
+b 182
+b 330
+b 181
+b 1
+b 325
+b 1
+b 20
+b 21
+b 23
+b 20
+b 27
+b 28
+b 39
+b 41
+b 27
+b 1
+b 36
+b 1
+b 19
+b 21
+b 22
+b 30
+b 16
+b 57
+b 59
+b 60
+b 62
+b 64
+b 57
+b 2
+b 10
+b 18
+b 17
+b 65
+b 67
+b 63
+b 1
+b 13
+b 21
+b 20
+b 1
+b 139
+b 140
+b 4
+b 6
+b 8
+b 10
+b 12
+b 14
+b 27
+b 26
+b 1
+b 11
+b 17
+b 65
+b 65
+b 1
+b 0
+b 2
+b 4
+b 0
+b 1
+b 28
+b 3
+b 4
+b 6
+b 8
+b 1
+b 8
+b 9
+b 11
+b 13
+b 0
+b 1
+b 5
+b 6
+b 8
+b 10
+b 12
+b 4
+b 1
+b 11
+b 1
+b 28
+b 112
+b 79
+b 80
+b 93
+b 79
+b 1
+b 0
+b 30
+b 47
+b 48
+b 54
+b 56
+b 54
+b 1
+b 317
+b 366
+b 367
+b 364
+b 2
+b 14
+b 29
+b 484
+b 484
+b 1
+b 0
+b 2
+b 24
+b 0
+b 1
+b 156
+b 158
+b 19
+b 111
+b 113
+b 115
+b 117
+b 115
+b 1
+b 11
+b 2
+b 3
+b 5
+b 4
+b 12
+b 21
+b 22
+b 24
+b 20
+b 1
+b 15
+b 4
+b 5
+b 7
+b 2
+b 2
+b 85
+b 86
+b 101
+b 207
+b 83
+b 2
+b 98
+b 1
+b 203
+b 1
+b 157
+b 26
+b 27
+b 29
+b 31
+b 156
+b 191
+b 153
+b 1
+b 7
+b 6
+b 2
+b 27
+b 29
+b 14
+b 16
+b 18
+b 19
+b 4
+b 3
+b 2
+b 5
+b 6
+b 8
+b 5
+b 2
+b 3
+b 49
+b 82
+b 83
+b 48
+b 1
+b 3
+b 10
+b 162
+b 897
+b 898
+b 1119
+b 37
+b 24
+b 25
+b 27
+b 29
+b 71
+b 73
+b 156
+b 73
+b 1
+b 1
+b 2
+b 4
+b 1
+b 2
+b 109
+b 117
+b 109
+b 1
+b 114
+b 1
+b 5
+b 66
+b 73
+b 6
+b 13
+b 5
+b 1
+b 9
+b 1
+b 621
+b 620
+b 1
+b 6
+b 0
+b 1
+b 92
+b 54
+b 61
+b 53
+b 1
+b 274
+b 314
+b 320
+b 321
+b 318
+b 2
+b 313
+b 1
+b 115
+b 266
+b 263
+b 1
+b 218
+b 230
+b 229
+b 2
+b 23
+b 21
+b 23
+b 25
+b 26
+b 32
+b 48
+b 70
+b 46
+b 1
+b 0
+b 0
+b 1
+b 14
+b 57
+b 89
+b 91
+b 93
+b 95
+b 87
+b 1
+b 56
+b 1
+b 22
+b 29
+b 164
+b 173
+b 137
+b 4
+b 6
+b 8
+b 4
+b 1
+b 4
+b 5
+b 7
+b 9
+b 4
+b 2
+b 3
+b 5
+b 5
+b 1
+b 100
+b 6
+b 31
+b 21
+b 22
+b 2
+b 3
+b 5
+b 6
+b 3
+b 2
+b 1
+b 11
+b 11
+b 1
+b 56
+b 53
+b 1
+b 6
+b 7
+b 6
+b 2
+b 13
+b 10
+b 1
+b 29
+b 45
+b 46
+b 70
+b 43
+b 2
+b 28
+b 1
+b 65
+b 1
+b 37
+b 6
+b 26
+b 27
+b 34
+b 25
+b 1
+b 39
+b 41
+b 95
+b 96
+b 98
+b 103
+b 5
+b 3
+b 2
+b 11
+b 34
+b 0
+b 2
+b 3
+b 5
+b 2
+b 2
+b 18
+b 20
+b 15
+b 1
+b 36
+b 44
+b 34
+b 2
+b 25
+b 27
+b 27
+b 1
+b 5
+b 6
+b 8
+b 4
+b 1
+b 32
+b 33
+b 53
+b 32
+b 1
+b 5
+b 5
+b 1
+b 79
+b 81
+b 87
+b 89
+b 90
+b 92
+b 530
+b 545
+b 546
+b 530
+b 1
+b 543
+b 1
+b 41
+b 60
+b 61
+b 63
+b 13
+b 15
+b 13
+b 1
+b 61
+b 72
+b 73
+b 83
+b 72
+b 2
+b 58
+b 1
+b 77
+b 1
+b 131
+b 133
+b 135
+b 137
+b 133
+b 1
+b 38
+b 18
+b 19
+b 21
+b 17
+b 1
+b 4
+b 6
+b 4
+b 2
+b 330
+b 339
+b 350
+b 352
+b 352
+b 1
+b 327
+b 1
+b 126
+b 123
+b 1
+b 119
+b 121
+b 121
+b 1
+b 28
+b 33
+b 34
+b 50
+b 52
+b 27
+b 1
+b 66
+b 65
+b 1
+b 7
+b 9
+b 10
+b 12
+b 14
+b 16
+b 12
+b 9
+b 1
+b 10
+b 16
+b 17
+b 34
+b 14
+b 2
+b 9
+b 1
+b 48
+b 50
+b 69
+b 48
+b 1
+b 0
+b 15
+b 27
+b 28
+b 27
+b 1
+b 0
+b 31
+b 161
+b 177
+b 179
+b 180
+b 160
+b 1
+b 37
+b 5
+b 6
+b 4
+b 1
+b 209
+b 226
+b 206
+b 1
+b 29
+b 109
+b 110
+b 124
+b 109
+b 1
+b 121
+b 1
+b 118
+b 133
+b 134
+b 71
+b 24
+b 24
+b 1
+b 28
+b 29
+b 44
+b 28
+b 2
+b 39
+b 1
+b 115
+b 117
+b 118
+b 136
+b 115
+b 2
+b 133
+b 1
+b 69
+b 70
+b 82
+b 68
+b 1
+b 3
+b 2
+b 1
+b 0
+b 0
+b 1
+b 204
+b 211
+b 212
+b 14
+b 39
+b 38
+b 1
+b 98
+b 0
+b 2
+b 3
+b 13
+b 2
+b 2
+b 104
+b 116
+b 117
+b 166
+b 114
+b 2
+b 163
+b 1
+b 19
+b 21
+b 23
+b 25
+b 760
+b 779
+b 860
+b 87
+b 88
+b 94
+b 85
+b 2
+b 15
+b 12
+b 1
+b 12
+b 9
+b 1
+b 3
+b 52
+b 53
+b 92
+b 51
+b 1
+b 3
+b 1
+b 30
+b 41
+b 28
+b 1
+b 132
+b 134
+b 136
+b 137
+b 143
+b 136
+b 2
+b 129
+b 1
+b 45
+b 141
+b 25
+b 27
+b 27
+b 1
+b 4
+b 5
+b 4
+b 1
+b 8
+b 7
+b 1
+b 14
+b 15
+b 23
+b 44
+b 38
+b 46
+b 47
+b 56
+b 146
+b 216
+b 217
+b 0
+b 2
+b 35
+b 7
+b 9
+b 11
+b 12
+b 12
+b 1
+b 20
+b 18
+b 1
+b 303
+b 35
+b 36
+b 45
+b 248
+b 249
+b 251
+b 253
+b 248
+b 2
+b 73
+b 72
+b 2
+b 190
+b 191
+b 193
+b 195
+b 193
+b 1
+b 4
+b 37
+b 51
+b 50
+b 1
+b 40
+b 24
+b 23
+b 1
+b 5
+b 6
+b 46
+b 55
+b 116
+b 115
+b 1
+b 175
+b 7
+b 146
+b 154
+b 155
+b 161
+b 154
+b 2
+b 157
+b 1
+b 7
+b 5
+b 1
+b 8
+b 31
+b 7
+b 1
+b 26
+b 1
+b 32
+b 46
+b 58
+b 13
+b 15
+b 16
+b 18
+b 37
+b 39
+b 15
+b 2
+b 33
+b 1
+b 112
+b 119
+b 120
+b 127
+b 45
+b 44
+b 1
+b 15
+b 17
+b 17
+b 1
+b 11
+b 13
+b 14
+b 11
+b 2
+b 190
+b 190
+b 1
+b 42
+b 43
+b 50
+b 41
+b 1
+b 132
+b 8
+b 9
+b 8
+b 3
+b 424
+b 421
+b 1
+b 128
+b 130
+b 137
+b 136
+b 1
+b 5
+b 6
+b 12
+b 4
+b 1
+b 3
+b 0
+b 1
+b 29
+b 89
+b 87
+b 1
+b 3
+b 4
+b 3
+b 1
+b 62
+b 75
+b 129
+b 40
+b 1
+b 3
+b 1
+b 1
+b 28
+b 30
+b 31
+b 36
+b 50
+b 28
+b 2
+b 47
+b 1
+b 255
+b 176
+b 178
+b 180
+b 182
+b 183
+b 176
+b 1
+b 278
+b 293
+b 292
+b 1
+b 58
+b 60
+b 61
+b 55
+b 1
+b 114
+b 116
+b 117
+b 116
+b 1
+b 133
+b 135
+b 24
+b 26
+b 94
+b 370
+b 372
+b 374
+b 375
+b 388
+b 370
+b 1
+b 8
+b 10
+b 19
+b 20
+b 10
+b 1
+b 17
+b 1
+b 5
+b 13
+b 17
+b 18
+b 17
+b 1
+b 53
+b 53
+b 1
+b 114
+b 113
+b 1
+b 9
+b 10
+b 44
+b 64
+b 220
+b 235
+b 236
+b 238
+b 218
+b 1
+b 9
+b 7
+b 1
+b 6
+b 33
+b 34
+b 6
+b 1
+b 31
+b 1
+b 3
+b 17
+b 16
+b 1
+b 23
+b 24
+b 31
+b 21
+b 2
+b 67
+b 65
+b 1
+b 5
+b 75
+b 76
+b 78
+b 80
+b 75
+b 2
+b 27
+b 29
+b 7
+b 16
+b 17
+b 5
+b 1
+b 136
+b 156
+b 157
+b 159
+b 161
+b 211
+b 134
+b 2
+b 154
+b 2
+b 143
+b 143
+b 1
+b 1
+b 69
+b 70
+b 69
+b 2
+b 1
+b 0
+b 1
+b 77
+b 3
+b 2
+b 1
+b 37
+b 34
+b 1
+b 15
+b 56
+b 10
+b 21
+b 20
+b 1
+b 63
+b 70
+b 71
+b 73
+b 75
+b 62
+b 1
+b 479
+b 491
+b 492
+b 494
+b 496
+b 494
+b 1
+b 68
+b 26
+b 64
+b 65
+b 67
+b 63
+b 1
+b 6
+b 4
+b 2
+b 89
+b 129
+b 130
+b 142
+b 129
+b 1
+b 139
+b 2
+b 33
+b 87
+b 131
+b 86
+b 1
+b 73
+b 57
+b 56
+b 1
+b 120
+b 118
+b 1
+b 5
+b 126
+b 131
+b 124
+b 2
+b 57
+b 38
+b 56
+b 57
+b 59
+b 5
+b 137
+b 138
+b 137
+b 1
+b 1
+b 0
+b 1
+b 38
+b 86
+b 87
+b 36
+b 1
+b 85
+b 1
+b 89
+b 0
+b 1
+b 15
+b 17
+b 19
+b 1
+b 217
+b 218
+b 220
+b 222
+b 217
+b 2
+b 17
+b 15
+b 2
+b 13
+b 15
+b 16
+b 137
+b 139
+b 137
+b 1
+b 70
+b 83
+b 85
+b 20
+b 22
+b 24
+b 25
+b 22
+b 2
+b 10
+b 7
+b 1
+b 0
+b 0
+b 1
+b 47
+b 19
+b 19
+b 1
+b 2
+b 3
+b 0
+b 2
+b 45
+b 41
+b 42
+b 41
+b 3
+b 2
+b 54
+b 63
+b 64
+b 75
+b 87
+b 74
+b 1
+b 83
+b 1
+b 5
+b 7
+b 9
+b 10
+b 33
+b 35
+b 7
+b 2
+b 33
+b 1
+b 129
+b 140
+b 152
+b 161
+b 139
+b 2
+b 148
+b 1
+b 115
+b 114
+b 1
+b 19
+b 94
+b 222
+b 226
+b 227
+b 262
+b 93
+b 1
+b 12
+b 12
+b 1
+b 8
+b 9
+b 11
+b 13
+b 8
+b 2
+b 5
+b 89
+b 91
+b 93
+b 61
+b 88
+b 89
+b 101
+b 87
+b 1
+b 61
+b 1
+b 7
+b 116
+b 136
+b 114
+b 1
+b 6
+b 1
+b 39
+b 38
+b 1
+b 30
+b 32
+b 33
+b 32
+b 1
+b 5
+b 10
+b 3
+b 16
+b 17
+b 0
+b 61
+b 62
+b 64
+b 66
+b 61
+b 2
+b 4
+b 6
+b 2
+b 1
+b 51
+b 48
+b 1
+b 8
+b 15
+b 16
+b 18
+b 15
+b 2
+b 172
+b 7
+b 9
+b 11
+b 7
+b 1
+b 447
+b 452
+b 488
+b 489
+b 577
+b 576
+b 1
+b 36
+b 4
+b 6
+b 8
+b 10
+b 11
+b 150
+b 148
+b 2
+b 108
+b 110
+b 112
+b 113
+b 166
+b 110
+b 2
+b 39
+b 57
+b 56
+b 1
+b 6
+b 313
+b 315
+b 351
+b 373
+b 350
+b 2
+b 369
+b 1
+b 92
+b 94
+b 96
+b 97
+b 94
+b 2
+b 29
+b 31
+b 26
+b 1
+b 756
+b 860
+b 0
+b 1
+b 17
+b 47
+b 48
+b 73
+b 75
+b 17
+b 19
+b 21
+b 22
+b 3
+b 6
+b 12
+b 4
+b 2
+b 16
+b 17
+b 16
+b 1
+b 9
+b 1057
+b 38
+b 19
+b 21
+b 23
+b 24
+b 19
+b 1
+b 41
+b 1070
+b 1069
+b 1
+b 12
+b 9
+b 1
+b 5
+b 15
+b 17
+b 19
+b 129
+b 128
+b 1
+b 18
+b 20
+b 22
+b 41
+b 43
+b 22
+b 1
+b 1123
+b 1125
+b 1125
+b 1
+b 0
+b 2
+b 3
+b 0
+b 2
+b 2
+b 69
+b 10
+b 12
+b 13
+b 15
+b 17
+b 10
+b 2
+b 15
+b 1
+b 120
+b 132
+b 134
+b 135
+b 151
+b 119
+b 2
+b 130
+b 2
+b 194
+b 195
+b 211
+b 194
+b 1
+b 17
+b 16
+b 2
+b 8
+b 2
+b 70
+b 72
+b 74
+b 72
+b 1
+b 4
+b 25
+b 26
+b 2
+b 1
+b 24
+b 1
+b 6
+b 30
+b 85
+b 82
+b 1
+b 1
+b 2
+b 10
+b 0
+b 1
+b 32
+b 34
+b 36
+b 38
+b 32
+b 1
+b 76
+b 78
+b 80
+b 23
+b 22
+b 1
+b 10
+b 6
+b 8
+b 10
+b 11
+b 8
+b 2
+b 1
+b 9
+b 0
+b 2
+b 147
+b 175
+b 176
+b 48
+b 724
+b 63
+b 65
+b 67
+b 68
+b 79
+b 29
+b 41
+b 83
+b 84
+b 82
+b 1
+b 26
+b 1
+b 0
+b 0
+b 1
+b 32
+b 86
+b 87
+b 14
+b 68
+b 72
+b 74
+b 76
+b 78
+b 68
+b 1
+b 63
+b 72
+b 60
+b 1
+b 70
+b 1
+b 23
+b 37
+b 54
+b 5
+b 16
+b 17
+b 16
+b 2
+b 129
+b 127
+b 1
+b 127
+b 0
+b 2
+b 3
+b 13
+b 2
+b 2
+b 44
+b 33
+b 4
+b 5
+b 26
+b 187
+b 188
+b 190
+b 203
+b 202
+b 1
+b 321
+b 343
+b 344
+b 321
+b 1
+b 341
+b 1
+b 5
+b 171
+b 210
+b 212
+b 210
+b 1
+b 169
+b 171
+b 169
+b 1
+b 3
+b 65
+b 62
+b 1
+b 212
+b 211
+b 1
+b 30
+b 75
+b 50
+b 19
+b 21
+b 15
+b 16
+b 18
+b 12
+b 1
+b 8
+b 6
+b 8
+b 8
+b 1
+b 174
+b 184
+b 225
+b 227
+b 173
+b 1
+b 18
+b 4
+b 5
+b 27
+b 2
+b 2
+b 24
+b 1
+b 603
+b 602
+b 1
+b 3
+b 0
+b 1
+b 6
+b 8
+b 9
+b 17
+b 445
+b 2
+b 45
+b 46
+b 43
+b 3
+b 16
+b 13
+b 1
+b 112
+b 137
+b 144
+b 153
+b 45
+b 47
+b 49
+b 50
+b 86
+b 10
+b 52
+b 53
+b 65
+b 51
+b 1
+b 18
+b 16
+b 1
+b 30
+b 31
+b 41
+b 31
+b 1
+b 111
+b 112
+b 176
+b 111
+b 1
+b 1
+b 0
+b 1
+b 12
+b 154
+b 168
+b 169
+b 190
+b 167
+b 1
+b 231
+b 15
+b 16
+b 14
+b 1
+b 6
+b 4
+b 1
+b 103
+b 55
+b 56
+b 83
+b 55
+b 2
+b 11
+b 13
+b 14
+b 130
+b 129
+b 1
+b 12
+b 760
+b 772
+b 774
+b 775
+b 769
+b 1
+b 2
+b 175
+b 177
+b 178
+b 175
+b 2
+b 87
+b 85
+b 2
+b 3
+b 148
+b 149
+b 147
+b 1
+b 436
+b 438
+b 3
+b 22
+b 137
+b 138
+b 8
+b 5
+b 17
+b 18
+b 17
+b 1
+b 23
+b 33
+b 32
+b 2
+b 250
+b 252
+b 291
+b 292
+b 294
+b 296
+b 42
+b 68
+b 67
+b 1
+b 2
+b 3
+b 2
+b 1
+b 482
+b 483
+b 485
+b 487
+b 556
+b 482
+b 2
+b 552
+b 1
+b 87
+b 118
+b 85
+b 2
+b 19
+b 16
+b 1
+b 5
+b 7
+b 9
+b 78
+b 80
+b 81
+b 87
+b 7
+b 1
+b 17
+b 0
+b 2
+b 13
+b 14
+b 11
+b 2
+b 21
+b 20
+b 1
+b 20
+b 29
+b 30
+b 55
+b 28
+b 1
+b 54
+b 1
+b 116
+b 131
+b 130
+b 1
+b 4
+b 6
+b 7
+b 6
+b 5
+b 1
+b 59
+b 58
+b 85
+b 438
+b 439
+b 473
+b 531
+b 438
+b 1
+b 528
+b 2
+b 9
+b 383
+b 427
+b 428
+b 427
+b 2
+b 381
+b 1
+b 69
+b 7
+b 9
+b 17
+b 19
+b 20
+b 9
+b 1
+b 16
+b 2
+b 103
+b 131
+b 132
+b 129
+b 2
+b 102
+b 1
+b 40
+b 89
+b 3
+b 10
+b 389
+b 391
+b 392
+b 398
+b 90
+b 43
+b 44
+b 56
+b 8
+b 29
+b 28
+b 2
+b 6
+b 8
+b 9
+b 11
+b 29
+b 6
+b 2
+b 188
+b 186
+b 1
+b 32
+b 34
+b 36
+b 37
+b 36
+b 2
+b 1
+b 29
+b 76
+b 77
+b 123
+b 76
+b 1
+b 120
+b 1
+b 102
+b 121
+b 122
+b 128
+b 121
+b 2
+b 99
+b 1
+b 32
+b 34
+b 32
+b 1
+b 3
+b 1
+b 2
+b 67
+b 69
+b 71
+b 72
+b 80
+b 71
+b 2
+b 76
+b 1
+b 18
+b 20
+b 2
+b 41
+b 10
+b 18
+b 29
+b 16
+b 2
+b 9
+b 1
+b 187
+b 189
+b 191
+b 192
+b 191
+b 1
+b 184
+b 1
+b 40
+b 76
+b 78
+b 80
+b 78
+b 1
+b 108
+b 105
+b 1
+b 105
+b 107
+b 108
+b 120
+b 96
+b 97
+b 105
+b 207
+b 96
+b 1
+b 102
+b 1
+b 42
+b 42
+b 1
+b 116
+b 117
+b 119
+b 116
+b 2
+b 3
+b 18
+b 20
+b 21
+b 23
+b 29
+b 18
+b 2
+b 17
+b 114
+b 28
+b 29
+b 41
+b 43
+b 60
+b 62
+b 62
+b 1
+b 0
+b 2
+b 0
+b 1
+b 7
+b 8
+b 47
+b 59
+b 61
+b 62
+b 88
+b 46
+b 2
+b 57
+b 2
+b 181
+b 35
+b 36
+b 2
+b 100
+b 102
+b 103
+b 105
+b 115
+b 59
+b 48
+b 50
+b 51
+b 49
+b 1
+b 1
+b 0
+b 1
+b 48
+b 60
+b 107
+b 139
+b 137
+b 2
+b 106
+b 1
+b 81
+b 82
+b 91
+b 78
+b 1
+b 80
+b 1
+b 24
+b 49
+b 64
+b 65
+b 67
+b 64
+b 2
+b 68
+b 70
+b 70
+b 1
+b 43
+b 170
+b 6
+b 130
+b 11
+b 14
+b 55
+b 56
+b 140
+b 28
+b 46
+b 47
+b 20
+b 17
+b 1
+b 19
+b 30
+b 31
+b 112
+b 30
+b 2
+b 110
+b 1
+b 76
+b 7
+b 9
+b 7
+b 1
+b 100
+b 102
+b 118
+b 125
+b 126
+b 116
+b 1
+b 261
+b 262
+b 260
+b 1
+b 6
+b 122
+b 121
+b 2
+b 8
+b 16
+b 17
+b 26
+b 28
+b 16
+b 2
+b 5
+b 1
+b 26
+b 35
+b 36
+b 35
+b 1
+b 4
+b 195
+b 254
+b 255
+b 253
+b 1
+b 114
+b 121
+b 122
+b 124
+b 120
+b 1
+b 27
+b 26
+b 2
+b 121
+b 122
+b 124
+b 126
+b 167
+b 194
+b 205
+b 220
+b 191
+b 198
+b 199
+b 198
+b 2
+b 188
+b 1
+b 33
+b 61
+b 67
+b 68
+b 70
+b 82
+b 59
+b 1
+b 68
+b 70
+b 76
+b 77
+b 92
+b 77
+b 1
+b 88
+b 1
+b 50
+b 2
+b 3
+b 62
+b 163
+b 164
+b 204
+b 217
+b 163
+b 1
+b 200
+b 1
+b 315
+b 328
+b 329
+b 331
+b 333
+b 327
+b 1
+b 314
+b 1
+b 34
+b 36
+b 37
+b 39
+b 41
+b 43
+b 41
+b 1
+b 799
+b 810
+b 821
+b 822
+b 838
+b 821
+b 2
+b 797
+b 1
+b 832
+b 1
+b 62
+b 70
+b 71
+b 61
+b 1
+b 12
+b 19
+b 46
+b 47
+b 49
+b 51
+b 45
+b 1
+b 10
+b 8
+b 12
+b 173
+b 175
+b 176
+b 183
+b 56
+b 258
+b 260
+b 262
+b 264
+b 266
+b 268
+b 270
+b 264
+b 1
+b 30
+b 46
+b 47
+b 106
+b 15
+b 17
+b 30
+b 31
+b 30
+b 2
+b 8
+b 7
+b 1
+b 8
+b 8
+b 1
+b 13
+b 0
+b 2
+b 3
+b 12
+b 0
+b 2
+b 117
+b 161
+b 162
+b 164
+b 166
+b 159
+b 2
+b 37
+b 46
+b 34
+b 1
+b 44
+b 1
+b 26
+b 28
+b 86
+b 39
+b 47
+b 49
+b 39
+b 1
+b 61
+b 4
+b 2
+b 1
+b 0
+b 2
+b 3
+b 0
+b 2
+b 1
+b 74
+b 75
+b 73
+b 1
+b 8
+b 146
+b 145
+b 1
+b 140
+b 156
+b 168
+b 33
+b 64
+b 65
+b 72
+b 64
+b 1
+b 69
+b 1
+b 10
+b 44
+b 46
+b 47
+b 63
+b 69
+b 74
+b 72
+b 1
+b 57
+b 13
+b 14
+b 20
+b 41
+b 66
+b 65
+b 2
+b 2
+b 11
+b 12
+b 96
+b 70
+b 71
+b 73
+b 75
+b 69
+b 1
+b 74
+b 1
+b 40
+b 50
+b 38
+b 1
+b 2
+b 4
+b 4
+b 1
+b 37
+b 38
+b 40
+b 219
+b 218
+b 1
+b 73
+b 80
+b 81
+b 96
+b 95
+b 1
+b 17
+b 116
+b 113
+b 1
+b 16
+b 0
+b 2
+b 3
+b 28
+b 2
+b 2
+b 18
+b 20
+b 21
+b 20
+b 2
+b 19
+b 17
+b 1
+b 7
+b 78
+b 87
+b 88
+b 90
+b 62
+b 64
+b 72
+b 73
+b 98
+b 72
+b 2
+b 94
+b 1
+b 7
+b 27
+b 55
+b 57
+b 58
+b 6
+b 1
+b 22
+b 1
+b 90
+b 96
+b 97
+b 99
+b 101
+b 0
+b 2
+b 79
+b 89
+b 127
+b 0
+b 7
+b 160
+b 161
+b 168
+b 159
+b 1
+b 167
+b 1
+b 2
+b 172
+b 67
+b 546
+b 543
+b 1
+b 181
+b 178
+b 1
+b 7
+b 9
+b 11
+b 12
+b 44
+b 129
+b 127
+b 1
+b 27
+b 28
+b 30
+b 26
+b 1
+b 6
+b 15
+b 79
+b 134
+b 135
+b 134
+b 2
+b 79
+b 1
+b 10
+b 0
+b 95
+b 16
+b 29
+b 31
+b 27
+b 1
+b 15
+b 1
+b 157
+b 163
+b 164
+b 2
+b 9
+b 10
+b 12
+b 26
+b 46
+b 0
+b 57
+b 59
+b 60
+b 62
+b 46
+b 48
+b 46
+b 1
+b 95
+b 129
+b 130
+b 158
+b 128
+b 1
+b 157
+b 1
+b 1051
+b 3
+b 18
+b 314
+b 325
+b 327
+b 312
+b 2
+b 325
+b 1
+b 100
+b 60
+b 21
+b 6
+b 14
+b 15
+b 24
+b 122
+b 160
+b 23
+b 2
+b 117
+b 1
+b 77
+b 100
+b 101
+b 100
+b 2
+b 74
+b 1
+b 57
+b 93
+b 119
+b 92
+b 110
+b 147
+b 149
+b 150
+b 0
+b 8
+b 6
+b 8
+b 42
+b 34
+b 35
+b 44
+b 214
+b 213
+b 1
+b 9
+b 6
+b 1
+b 1007
+b 9
+b 10
+b 36
+b 78
+b 80
+b 78
+b 1
+b 12
+b 276
+b 100
+b 98
+b 1
+b 52
+b 57
+b 49
+b 1
+b 43
+b 89
+b 88
+b 1
+b 0
+b 94
+b 96
+b 0
+b 1
+b 42
+b 69
+b 71
+b 22
+b 23
+b 90
+b 92
+b 20
+b 2
+b 90
+b 1
+b 12
+b 10
+b 1
+b 43
+b 53
+b 3
+b 991
+b 1003
+b 1004
+b 1003
+b 2
+b 988
+b 1
+b 13
+b 11
+b 1
+b 50
+b 52
+b 54
+b 55
+b 62
+b 72
+b 52
+b 2
+b 70
+b 1
+b 245
+b 247
+b 249
+b 250
+b 252
+b 254
+b 256
+b 247
+b 2
+b 29
+b 41
+b 42
+b 66
+b 68
+b 41
+b 2
+b 27
+b 1
+b 59
+b 1
+b 24
+b 14
+b 16
+b 17
+b 46
+b 16
+b 1
+b 42
+b 1
+b 14
+b 16
+b 18
+b 19
+b 21
+b 23
+b 43
+b 16
+b 2
+b 248
+b 295
+b 56
+b 129
+b 136
+b 137
+b 139
+b 135
+b 1
+b 18
+b 17
+b 2
+b 34
+b 32
+b 1
+b 17
+b 19
+b 19
+b 1
+b 84
+b 352
+b 354
+b 355
+b 357
+b 349
+b 1
+b 355
+b 1
+b 183
+b 6
+b 5
+b 1
+b 123
+b 17
+b 14
+b 23
+b 11
+b 1
+b 22
+b 23
+b 29
+b 22
+b 2
+b 327
+b 27
+b 10
+b 11
+b 19
+b 129
+b 87
+b 22
+b 23
+b 80
+b 40
+b 54
+b 55
+b 61
+b 113
+b 114
+b 141
+b 54
+b 583
+b 585
+b 5
+b 16
+b 190
+b 100
+b 112
+b 114
+b 99
+b 1
+b 141
+b 143
+b 145
+b 147
+b 149
+b 143
+b 1
+b 18
+b 20
+b 21
+b 32
+b 39
+b 56
+b 58
+b 38
+b 1
+b 88
+b 105
+b 106
+b 105
+b 2
+b 86
+b 1
+b 115
+b 1
+b 0
+b 1
+b 101
+b 102
+b 151
+b 2
+b 39
+b 47
+b 49
+b 50
+b 37
+b 2
+b 47
+b 1
+b 4
+b 161
+b 158
+b 1
+b 15
+b 16
+b 18
+b 15
+b 2
+b 4
+b 23
+b 25
+b 27
+b 41
+b 42
+b 21
+b 1
+b 0
+b 1
+b 0
+b 1
+b 111
+b 113
+b 59
+b 744
+b 759
+b 743
+b 1
+b 38
+b 40
+b 42
+b 44
+b 38
+b 1
+b 27
+b 100
+b 101
+b 116
+b 115
+b 1
+b 9
+b 8
+b 1
+b 16
+b 26
+b 60
+b 59
+b 2
+b 14
+b 1
+b 34
+b 41
+b 40
+b 2
+b 11
+b 18
+b 17
+b 1
+b 3
+b 1
+b 1
+b 19
+b 54
+b 55
+b 128
+b 53
+b 1
+b 31
+b 32
+b 34
+b 3
+b 5
+b 2
+b 1
+b 72
+b 74
+b 76
+b 86
+b 85
+b 2
+b 69
+b 1
+b 1
+b 143
+b 144
+b 165
+b 164
+b 1
+b 0
+b 92
+b 114
+b 115
+b 113
+b 1
+b 5
+b 7
+b 7
+b 1
+b 44
+b 45
+b 14
+b 95
+b 33
+b 35
+b 37
+b 38
+b 62
+b 61
+b 1
+b 62
+b 60
+b 1
+b 31
+b 52
+b 53
+b 96
+b 52
+b 2
+b 91
+b 1
+b 75
+b 80
+b 81
+b 299
+b 4
+b 38
+b 39
+b 38
+b 1
+b 19
+b 16
+b 1
+b 17
+b 34
+b 35
+b 1
+b 0
+b 395
+b 139
+b 140
+b 138
+b 1
+b 5
+b 7
+b 9
+b 3
+b 1
+b 84
+b 83
+b 1
+b 12
+b 9
+b 1
+b 10
+b 11
+b 13
+b 102
+b 129
+b 130
+b 132
+b 100
+b 1
+b 128
+b 2
+b 53
+b 88
+b 89
+b 91
+b 93
+b 52
+b 1
+b 83
+b 1
+b 3
+b 62
+b 59
+b 1
+b 106
+b 107
+b 119
+b 106
+b 2
+b 127
+b 132
+b 113
+b 115
+b 117
+b 118
+b 8
+b 21
+b 7
+b 1
+b 17
+b 1
+b 38
+b 40
+b 36
+b 1
+b 10
+b 11
+b 13
+b 10
+b 2
+b 1
+b 11
+b 13
+b 469
+b 30
+b 32
+b 33
+b 33
+b 1
+b 68
+b 30
+b 27
+b 1
+b 111
+b 113
+b 108
+b 1
+b 101
+b 112
+b 114
+b 99
+b 1
+b 474
+b 475
+b 558
+b 557
+b 1
+b 3
+b 11
+b 6
+b 6
+b 1
+b 16
+b 17
+b 15
+b 1
+b 1
+b 81
+b 83
+b 126
+b 20
+b 22
+b 24
+b 25
+b 22
+b 2
+b 4
+b 11
+b 10
+b 2
+b 207
+b 204
+b 205
+b 228
+b 202
+b 2
+b 226
+b 1
+b 65
+b 78
+b 79
+b 89
+b 78
+b 1
+b 386
+b 384
+b 2
+b 14
+b 9
+b 11
+b 13
+b 14
+b 11
+b 2
+b 60
+b 6
+b 77
+b 98
+b 99
+b 76
+b 1
+b 18
+b 13
+b 119
+b 121
+b 122
+b 30
+b 79
+b 81
+b 86
+b 87
+b 131
+b 81
+b 1
+b 84
+b 1
+b 86
+b 88
+b 90
+b 83
+b 1
+b 88
+b 1
+b 182
+b 229
+b 230
+b 57
+b 12
+b 11
+b 1
+b 29
+b 30
+b 38
+b 148
+b 56
+b 71
+b 49
+b 40
+b 40
+b 1
+b 28
+b 30
+b 32
+b 33
+b 35
+b 30
+b 2
+b 82
+b 79
+b 1
+b 109
+b 125
+b 126
+b 128
+b 106
+b 1
+b 47
+b 0
+b 2
+b 73
+b 75
+b 5
+b 101
+b 102
+b 99
+b 2
+b 7
+b 4
+b 1
+b 66
+b 65
+b 1
+b 94
+b 96
+b 98
+b 99
+b 101
+b 94
+b 1
+b 77
+b 75
+b 2
+b 9
+b 10
+b 12
+b 8
+b 1
+b 6
+b 3
+b 36
+b 37
+b 45
+b 36
+b 1
+b 37
+b 34
+b 1
+b 11
+b 2
+b 4
+b 1
+b 3
+b 45
+b 8
+b 9
+b 38
+b 131
+b 16
+b 41
+b 25
+b 32
+b 33
+b 41
+b 40
+b 1
+b 155
+b 157
+b 176
+b 157
+b 1
+b 0
+b 2
+b 3
+b 47
+b 109
+b 110
+b 112
+b 2
+b 128
+b 133
+b 126
+b 2
+b 80
+b 81
+b 83
+b 80
+b 2
+b 25
+b 30
+b 42
+b 43
+b 40
+b 2
+b 29
+b 1
+b 10
+b 9
+b 1
+b 170
+b 172
+b 188
+b 189
+b 191
+b 188
+b 2
+b 167
+b 1
+b 615
+b 626
+b 628
+b 630
+b 628
+b 1
+b 66
+b 88
+b 89
+b 91
+b 2
+b 53
+b 55
+b 51
+b 1
+b 9
+b 10
+b 12
+b 14
+b 9
+b 2
+b 134
+b 135
+b 148
+b 132
+b 2
+b 143
+b 1
+b 4
+b 4
+b 1
+b 66
+b 63
+b 1
+b 88
+b 48
+b 49
+b 47
+b 1
+b 43
+b 302
+b 104
+b 106
+b 108
+b 114
+b 99
+b 100
+b 102
+b 121
+b 128
+b 129
+b 138
+b 121
+b 1
+b 126
+b 1
+b 1096
+b 1096
+b 1
+b 8
+b 9
+b 6
+b 2
+b 12
+b 10
+b 1
+b 101
+b 103
+b 22
+b 37
+b 34
+b 1
+b 1
+b 14
+b 15
+b 17
+b 135
+b 142
+b 143
+b 154
+b 142
+b 1
+b 150
+b 1
+b 4
+b 10
+b 11
+b 21
+b 137
+b 136
+b 1
+b 0
+b 2
+b 0
+b 1
+b 204
+b 211
+b 125
+b 127
+b 128
+b 225
+b 227
+b 127
+b 1
+b 222
+b 1
+b 64
+b 66
+b 68
+b 69
+b 71
+b 66
+b 2
+b 55
+b 52
+b 1
+b 3
+b 5
+b 6
+b 8
+b 5
+b 2
+b 43
+b 40
+b 1
+b 19
+b 111
+b 138
+b 96
+b 106
+b 107
+b 106
+b 2
+b 93
+b 1
+b 115
+b 16
+b 38
+b 39
+b 41
+b 43
+b 122
+b 46
+b 48
+b 60
+b 28
+b 37
+b 38
+b 74
+b 38
+b 1
+b 70
+b 1
+b 52
+b 54
+b 56
+b 10
+b 18
+b 2
+b 4
+b 34
+b 2
+b 1
+b 33
+b 34
+b 124
+b 136
+b 33
+b 1
+b 121
+b 2
+b 16
+b 130
+b 127
+b 1
+b 6
+b 8
+b 4
+b 2
+b 2
+b 6
+b 14
+b 40
+b 162
+b 15
+b 35
+b 37
+b 38
+b 159
+b 158
+b 1
+b 208
+b 205
+b 1
+b 218
+b 226
+b 227
+b 1
+b 0
+b 1
+b 58
+b 11
+b 12
+b 8
+b 1
+b 10
+b 1
+b 1
+b 33
+b 31
+b 1
+b 23
+b 34
+b 35
+b 33
+b 1
+b 22
+b 29
+b 27
+b 2
+b 7
+b 8
+b 10
+b 6
+b 1
+b 14
+b 11
+b 1
+b 332
+b 329
+b 1
+b 15
+b 16
+b 31
+b 23
+b 40
+b 68
+b 76
+b 38
+b 2
+b 22
+b 1
+b 52
+b 54
+b 55
+b 61
+b 63
+b 54
+b 2
+b 73
+b 75
+b 77
+b 79
+b 80
+b 73
+b 1
+b 20
+b 26
+b 27
+b 44
+b 26
+b 2
+b 18
+b 1
+b 7
+b 17
+b 19
+b 20
+b 31
+b 28
+b 1
+b 118
+b 18
+b 45
+b 46
+b 29
+b 28
+b 1
+b 117
+b 119
+b 121
+b 122
+b 124
+b 117
+b 1
+b 16
+b 25
+b 27
+b 29
+b 30
+b 32
+b 25
+b 1
+b 79
+b 116
+b 118
+b 290
+b 292
+b 294
+b 295
+b 315
+b 290
+b 1
+b 33
+b 35
+b 50
+b 51
+b 53
+b 24
+b 43
+b 44
+b 58
+b 119
+b 137
+b 200
+b 201
+b 203
+b 170
+b 186
+b 187
+b 186
+b 1
+b 61
+b 63
+b 59
+b 1
+b 208
+b 214
+b 216
+b 0
+b 2
+b 3
+b 28
+b 27
+b 1
+b 256
+b 258
+b 260
+b 262
+b 263
+b 290
+b 240
+b 239
+b 1
+b 37
+b 38
+b 40
+b 40
+b 1
+b 11
+b 15
+b 40
+b 48
+b 49
+b 48
+b 2
+b 12
+b 1
+b 31
+b 30
+b 1
+b 74
+b 76
+b 82
+b 83
+b 85
+b 87
+b 81
+b 1
+b 86
+b 1
+b 73
+b 72
+b 1
+b 57
+b 58
+b 80
+b 79
+b 1
+b 4
+b 728
+b 735
+b 737
+b 738
+b 740
+b 758
+b 727
+b 1
+b 158
+b 34
+b 49
+b 33
+b 1
+b 45
+b 1
+b 58
+b 60
+b 62
+b 96
+b 97
+b 60
+b 1
+b 1
+b 46
+b 45
+b 1
+b 22
+b 0
+b 1
+b 191
+b 61
+b 76
+b 2
+b 4
+b 5
+b 91
+b 96
+b 90
+b 1
+b 92
+b 1
+b 7
+b 8
+b 4
+b 21
+b 7
+b 4
+b 1
+b 54
+b 56
+b 58
+b 60
+b 52
+b 1
+b 4
+b 128
+b 130
+b 161
+b 175
+b 159
+b 2
+b 16
+b 27
+b 15
+b 1
+b 22
+b 1
+b 3
+b 883
+b 1099
+b 1105
+b 108
+b 141
+b 140
+b 2
+b 21
+b 23
+b 24
+b 21
+b 2
+b 61
+b 27
+b 33
+b 38
+b 40
+b 35
+b 1
+b 23
+b 24
+b 33
+b 21
+b 2
+b 30
+b 1
+b 184
+b 194
+b 7
+b 9
+b 10
+b 15
+b 22
+b 30
+b 21
+b 1
+b 190
+b 320
+b 321
+b 331
+b 57
+b 58
+b 69
+b 56
+b 1
+b 68
+b 1
+b 21
+b 81
+b 87
+b 141
+b 143
+b 85
+b 2
+b 80
+b 1
+b 6
+b 8
+b 9
+b 39
+b 36
+b 1
+b 11
+b 8
+b 1
+b 31
+b 33
+b 212
+b 213
+b 211
+b 1
+b 944
+b 975
+b 1024
+b 1026
+b 1027
+b 974
+b 2
+b 1022
+b 2
+b 61
+b 83
+b 84
+b 92
+b 91
+b 1
+b 25
+b 27
+b 22
+b 1
+b 26
+b 80
+b 81
+b 80
+b 2
+b 24
+b 1
+b 269
+b 283
+b 281
+b 2
+b 268
+b 1
+b 42
+b 50
+b 11
+b 102
+b 103
+b 109
+b 101
+b 1
+b 92
+b 115
+b 117
+b 118
+b 92
+b 1
+b 114
+b 2
+b 1
+b 290
+b 5
+b 12
+b 13
+b 1
+b 142
+b 142
+b 1
+b 2
+b 3
+b 4
+b 3
+b 1
+b 223
+b 5
+b 446
+b 448
+b 42
+b 44
+b 46
+b 47
+b 167
+b 165
+b 1
+b 12
+b 13
+b 15
+b 15
+b 1
+b 15
+b 0
+b 105
+b 109
+b 111
+b 112
+b 122
+b 38
+b 61
+b 46
+b 45
+b 47
+b 48
+b 50
+b 52
+b 45
+b 2
+b 50
+b 1
+b 9
+b 27
+b 28
+b 47
+b 27
+b 1
+b 44
+b 2
+b 112
+b 33
+b 19
+b 20
+b 4
+b 20
+b 12
+b 11
+b 1
+b 14
+b 15
+b 12
+b 2
+b 11
+b 20
+b 19
+b 1
+b 63
+b 62
+b 1
+b 2
+b 3
+b 24
+b 113
+b 30
+b 31
+b 33
+b 35
+b 29
+b 1
+b 34
+b 1
+b 26
+b 25
+b 27
+b 29
+b 30
+b 27
+b 2
+b 10
+b 12
+b 8
+b 1
+b 86
+b 62
+b 63
+b 5
+b 103
+b 105
+b 23
+b 22
+b 2
+b 99
+b 100
+b 24
+b 53
+b 14
+b 25
+b 26
+b 7
+b 9
+b 7
+b 1
+b 9
+b 11
+b 13
+b 15
+b 17
+b 19
+b 21
+b 15
+b 1
+b 12
+b 12
+b 1
+b 1
+b 30
+b 31
+b 47
+b 30
+b 1
+b 36
+b 67
+b 28
+b 29
+b 4
+b 6
+b 4
+b 1
+b 25
+b 23
+b 2
+b 9
+b 7
+b 8
+b 7
+b 1
+b 0
+b 211
+b 213
+b 214
+b 213
+b 1
+b 78
+b 84
+b 75
+b 1
+b 21
+b 23
+b 25
+b 27
+b 29
+b 23
+b 1
+b 52
+b 62
+b 69
+b 52
+b 1
+b 59
+b 1
+b 40
+b 41
+b 43
+b 45
+b 47
+b 63
+b 40
+b 2
+b 59
+b 2
+b 2
+b 1
+b 1
+b 25
+b 26
+b 34
+b 23
+b 2
+b 24
+b 22
+b 1
+b 44
+b 73
+b 74
+b 71
+b 2
+b 44
+b 1
+b 55
+b 52
+b 1
+b 137
+b 139
+b 27
+b 49
+b 26
+b 1
+b 24
+b 44
+b 7
+b 8
+b 10
+b 110
+b 109
+b 1
+b 18
+b 22
+b 23
+b 95
+b 190
+b 265
+b 266
+b 273
+b 264
+b 1
+b 0
+b 67
+b 69
+b 71
+b 72
+b 80
+b 69
+b 2
+b 78
+b 1
+b 4
+b 19
+b 20
+b 39
+b 3
+b 1
+b 14
+b 1
+b 25
+b 90
+b 91
+b 104
+b 90
+b 1
+b 101
+b 1
+b 1
+b 3
+b 23
+b 20
+b 1
+b 9
+b 8
+b 1
+b 8
+b 17
+b 49
+b 61
+b 135
+b 0
+b 2
+b 3
+b 111
+b 113
+b 114
+b 125
+b 113
+b 1
+b 122
+b 1
+b 3
+b 96
+b 120
+b 121
+b 118
+b 2
+b 96
+b 1
+b 846
+b 843
+b 1
+b 24
+b 26
+b 27
+b 26
+b 1
+b 17
+b 15
+b 14
+b 1
+b 204
+b 211
+b 212
+b 219
+b 211
+b 1
+b 95
+b 100
+b 46
+b 118
+b 119
+b 132
+b 131
+b 1
+b 8
+b 132
+b 60
+b 96
+b 94
+b 2
+b 59
+b 1
+b 7
+b 9
+b 14
+b 14
+b 1
+b 4
+b 1
+b 87
+b 5
+b 7
+b 26
+b 28
+b 43
+b 44
+b 46
+b 48
+b 41
+b 2
+b 28
+b 1
+b 44
+b 1
+b 49
+b 51
+b 115
+b 116
+b 49
+b 1
+b 1
+b 59
+b 116
+b 118
+b 119
+b 113
+b 1
+b 9
+b 7
+b 1
+b 6
+b 8
+b 9
+b 67
+b 69
+b 67
+b 1
+b 139
+b 32
+b 167
+b 190
+b 191
+b 190
+b 2
+b 164
+b 1
+b 8
+b 5
+b 1
+b 188
+b 190
+b 192
+b 194
+b 200
+b 194
+b 1
+b 39
+b 41
+b 49
+b 41
+b 1
+b 5
+b 7
+b 9
+b 18
+b 19
+b 7
+b 1
+b 1
+b 49
+b 51
+b 52
+b 83
+b 52
+b 1
+b 78
+b 1
+b 171
+b 19
+b 20
+b 32
+b 31
+b 1
+b 12
+b 10
+b 1
+b 6
+b 8
+b 9
+b 8
+b 1
+b 1
+b 22
+b 0
+b 1
+b 12
+b 13
+b 15
+b 35
+b 11
+b 1
+b 13
+b 12
+b 2
+b 302
+b 310
+b 311
+b 309
+b 1
+b 301
+b 1
+b 1
+b 11
+b 84
+b 101
+b 102
+b 118
+b 101
+b 2
+b 113
+b 1
+b 845
+b 1055
+b 1054
+b 2
+b 8
+b 81
+b 83
+b 32
+b 33
+b 35
+b 37
+b 46
+b 48
+b 50
+b 51
+b 48
+b 2
+b 25
+b 25
+b 1
+b 38
+b 40
+b 41
+b 53
+b 55
+b 53
+b 1
+b 43
+b 50
+b 51
+b 69
+b 41
+b 41
+b 1
+b 31
+b 36
+b 37
+b 39
+b 36
+b 2
+b 99
+b 120
+b 121
+b 123
+b 97
+b 2
+b 118
+b 2
+b 6
+b 472
+b 559
+b 587
+b 26
+b 27
+b 29
+b 83
+b 85
+b 83
+b 1
+b 139
+b 93
+b 94
+b 91
+b 2
+b 68
+b 66
+b 1
+b 16
+b 14
+b 2
+b 19
+b 20
+b 22
+b 19
+b 2
+b 5
+b 165
+b 167
+b 180
+b 11
+b 13
+b 15
+b 16
+b 11
+b 1
+b 0
+b 2
+b 8
+b 7
+b 1
+b 6
+b 5
+b 18
+b 24
+b 26
+b 28
+b 30
+b 26
+b 1
+b 21
+b 23
+b 25
+b 27
+b 56
+b 58
+b 59
+b 66
+b 64
+b 1
+b 12
+b 14
+b 12
+b 1
+b 40
+b 42
+b 43
+b 0
+b 86
+b 88
+b 90
+b 92
+b 93
+b 95
+b 97
+b 99
+b 84
+b 1
+b 91
+b 2
+b 146
+b 156
+b 157
+b 153
+b 1
+b 28
+b 26
+b 28
+b 29
+b 38
+b 47
+b 28
+b 1
+b 35
+b 2
+b 270
+b 272
+b 274
+b 275
+b 277
+b 274
+b 2
+b 267
+b 1
+b 103
+b 105
+b 107
+b 109
+b 105
+b 1
+b 119
+b 127
+b 116
+b 1
+b 7
+b 4
+b 1
+b 14
+b 2
+b 3
+b 5
+b 79
+b 5
+b 1
+b 3
+b 62
+b 92
+b 104
+b 103
+b 1
+b 80
+b 68
+b 69
+b 7
+b 130
+b 132
+b 134
+b 135
+b 137
+b 139
+b 128
+b 1
+b 133
+b 2
+b 7
+b 7
+b 1
+b 23
+b 24
+b 23
+b 1
+b 2
+b 150
+b 152
+b 1
+b 116
+b 201
+b 231
+b 200
+b 1
+b 226
+b 1
+b 43
+b 66
+b 67
+b 78
+b 42
+b 1
+b 18
+b 38
+b 39
+b 41
+b 43
+b 38
+b 2
+b 15
+b 1
+b 24
+b 39
+b 50
+b 58
+b 59
+b 37
+b 2
+b 23
+b 1
+b 143
+b 182
+b 183
+b 34
+b 14
+b 16
+b 2
+b 3
+b 5
+b 7
+b 893
+b 895
+b 25
+b 162
+b 154
+b 160
+b 161
+b 63
+b 227
+b 229
+b 224
+b 1
+b 113
+b 117
+b 118
+b 123
+b 129
+b 110
+b 1
+b 116
+b 1
+b 84
+b 86
+b 88
+b 90
+b 69
+b 71
+b 83
+b 82
+b 1
+b 201
+b 223
+b 224
+b 226
+b 228
+b 226
+b 1
+b 60
+b 58
+b 1
+b 55
+b 56
+b 54
+b 1
+b 21
+b 83
+b 85
+b 86
+b 95
+b 104
+b 94
+b 1
+b 100
+b 1
+b 100
+b 101
+b 103
+b 64
+b 66
+b 64
+b 1
+b 109
+b 117
+b 118
+b 115
+b 2
+b 5
+b 3
+b 1
+b 51
+b 86
+b 84
+b 1
+b 18
+b 19
+b 18
+b 1
+b 121
+b 128
+b 118
+b 1
+b 43
+b 42
+b 1
+b 275
+b 277
+b 304
+b 305
+b 304
+b 2
+b 1
+b 0
+b 1
+b 121
+b 118
+b 1
+b 11
+b 12
+b 11
+b 2
+b 18
+b 0
+b 8
+b 23
+b 25
+b 27
+b 44
+b 45
+b 1
+b 0
+b 1
+b 109
+b 111
+b 174
+b 175
+b 173
+b 172
+b 1
+b 261
+b 263
+b 264
+b 261
+b 2
+b 213
+b 104
+b 104
+b 1
+b 936
+b 1018
+b 935
+b 1
+b 32
+b 7
+b 18
+b 29
+b 6
+b 1
+b 13
+b 1
+b 36
+b 60
+b 33
+b 1
+b 4
+b 5
+b 7
+b 9
+b 2
+b 2
+b 81
+b 83
+b 84
+b 137
+b 139
+b 84
+b 1
+b 16
+b 7
+b 9
+b 10
+b 9
+b 1
+b 22
+b 19
+b 1
+b 114
+b 115
+b 117
+b 127
+b 114
+b 2
+b 123
+b 2
+b 6
+b 201
+b 79
+b 78
+b 1
+b 3
+b 4
+b 6
+b 105
+b 106
+b 118
+b 8
+b 7
+b 1
+b 133
+b 147
+b 148
+b 198
+b 211
+b 147
+b 2
+b 131
+b 1
+b 192
+b 1
+b 324
+b 325
+b 327
+b 329
+b 323
+b 1
+b 328
+b 1
+b 25
+b 92
+b 96
+b 97
+b 123
+b 208
+b 208
+b 1
+b 47
+b 49
+b 49
+b 1
+b 40
+b 39
+b 1
+b 6
+b 8
+b 9
+b 17
+b 6
+b 2
+b 53
+b 52
+b 1
+b 5
+b 7
+b 8
+b 5
+b 6
+b 14
+b 5
+b 1
+b 10
+b 1
+b 169
+b 170
+b 172
+b 174
+b 286
+b 288
+b 298
+b 299
+b 286
+b 1
+b 61
+b 23
+b 24
+b 22
+b 1
+b 13
+b 8
+b 7
+b 1
+b 10
+b 17
+b 18
+b 20
+b 8
+b 1
+b 30
+b 29
+b 1
+b 90
+b 90
+b 1
+b 51
+b 52
+b 54
+b 51
+b 2
+b 9
+b 231
+b 9
+b 8
+b 2
+b 5
+b 3
+b 1
+b 21
+b 23
+b 25
+b 27
+b 29
+b 1033
+b 1035
+b 20
+b 19
+b 1
+b 13
+b 14
+b 25
+b 11
+b 41
+b 10
+b 1
+b 37
+b 1
+b 3
+b 5
+b 6
+b 5
+b 1
+b 0
+b 43
+b 56
+b 58
+b 60
+b 62
+b 63
+b 70
+b 212
+b 11
+b 0
+b 2
+b 4
+b 6
+b 8
+b 76
+b 83
+b 84
+b 83
+b 1
+b 37
+b 10
+b 8
+b 1
+b 162
+b 169
+b 171
+b 169
+b 1
+b 32
+b 29
+b 1
+b 98
+b 99
+b 101
+b 103
+b 105
+b 96
+b 2
+b 265
+b 48
+b 47
+b 1
+b 24
+b 21
+b 1
+b 4
+b 5
+b 97
+b 99
+b 107
+b 108
+b 52
+b 54
+b 55
+b 57
+b 59
+b 52
+b 2
+b 57
+b 1
+b 47
+b 62
+b 61
+b 1
+b 88
+b 96
+b 97
+b 85
+b 1
+b 0
+b 34
+b 32
+b 1
+b 46
+b 46
+b 1
+b 97
+b 3
+b 14
+b 140
+b 147
+b 148
+b 2
+b 1
+b 120
+b 121
+b 130
+b 10
+b 21
+b 9
+b 1
+b 18
+b 82
+b 177
+b 178
+b 81
+b 1
+b 172
+b 1
+b 48
+b 231
+b 233
+b 231
+b 1
+b 89
+b 90
+b 88
+b 1
+b 1
+b 33
+b 0
+b 1
+b 65
+b 161
+b 163
+b 165
+b 167
+b 167
+b 1
+b 58
+b 56
+b 1
+b 212
+b 223
+b 234
+b 24
+b 36
+b 37
+b 67
+b 29
+b 27
+b 1
+b 32
+b 72
+b 73
+b 72
+b 1
+b 63
+b 65
+b 65
+b 1
+b 60
+b 61
+b 63
+b 60
+b 2
+b 93
+b 95
+b 114
+b 113
+b 1
+b 89
+b 147
+b 149
+b 150
+b 172
+b 202
+b 147
+b 2
+b 199
+b 2
+b 61
+b 63
+b 63
+b 1
+b 10
+b 11
+b 58
+b 70
+b 8
+b 2
+b 51
+b 53
+b 55
+b 57
+b 58
+b 57
+b 2
+b 2
+b 2
+b 1
+b 249
+b 167
+b 23
+b 32
+b 33
+b 40
+b 460
+b 461
+b 60
+b 62
+b 138
+b 136
+b 1
+b 163
+b 174
+b 180
+b 180
+b 1
+b 191
+b 73
+b 74
+b 76
+b 73
+b 2
+b 3
+b 2
+b 1
+b 6
+b 3
+b 4
+b 11
+b 3
+b 1
+b 8
+b 2
+b 211
+b 33
+b 45
+b 44
+b 1
+b 93
+b 6
+b 7
+b 9
+b 11
+b 9
+b 1
+b 11
+b 23
+b 24
+b 26
+b 28
+b 9
+b 1
+b 22
+b 2
+b 3
+b 5
+b 6
+b 21
+b 20
+b 1
+b 75
+b 74
+b 1
+b 92
+b 90
+b 1
+b 25
+b 0
+b 1
+b 63
+b 62
+b 1
+b 18
+b 3
+b 4
+b 44
+b 2
+b 1
+b 41
+b 1
+b 11
+b 21
+b 22
+b 24
+b 21
+b 2
+b 8
+b 1
+b 87
+b 88
+b 90
+b 87
+b 2
+b 214
+b 239
+b 212
+b 1
+b 35
+b 91
+b 24
+b 23
+b 1
+b 4
+b 6
+b 8
+b 9
+b 11
+b 6
+b 2
+b 68
+b 85
+b 98
+b 99
+b 101
+b 103
+b 66
+b 2
+b 96
+b 2
+b 11
+b 19
+b 20
+b 35
+b 17
+b 2
+b 10
+b 1
+b 37
+b 36
+b 1
+b 11
+b 16
+b 18
+b 19
+b 26
+b 10
+b 1
+b 16
+b 18
+b 47
+b 48
+b 50
+b 18
+b 1
+b 46
+b 2
+b 18
+b 19
+b 21
+b 75
+b 77
+b 15
+b 1
+b 19
+b 1
+b 127
+b 129
+b 135
+b 136
+b 143
+b 135
+b 1
+b 140
+b 1
+b 18
+b 28
+b 29
+b 49
+b 28
+b 1
+b 46
+b 1
+b 65
+b 64
+b 1
+b 43
+b 44
+b 46
+b 41
+b 2
+b 360
+b 374
+b 357
+b 1
+b 21
+b 23
+b 30
+b 31
+b 33
+b 79
+b 81
+b 83
+b 81
+b 1
+b 34
+b 52
+b 69
+b 71
+b 15
+b 270
+b 282
+b 283
+b 268
+b 1
+b 281
+b 1
+b 3
+b 5
+b 7
+b 9
+b 10
+b 23
+b 7
+b 2
+b 19
+b 1
+b 84
+b 82
+b 1
+b 381
+b 383
+b 384
+b 381
+b 2
+b 12
+b 141
+b 143
+b 144
+b 180
+b 214
+b 141
+b 2
+b 211
+b 2
+b 24
+b 35
+b 36
+b 60
+b 64
+b 33
+b 2
+b 23
+b 1
+b 59
+b 1
+b 265
+b 279
+b 280
+b 277
+b 2
+b 265
+b 1
+b 19
+b 17
+b 1
+b 92
+b 94
+b 95
+b 94
+b 2
+b 4
+b 66
+b 65
+b 1
+b 124
+b 126
+b 128
+b 129
+b 194
+b 193
+b 1
+b 219
+b 274
+b 276
+b 278
+b 280
+b 272
+b 1
+b 218
+b 1
+b 55
+b 53
+b 1
+b 23
+b 23
+b 1
+b 217
+b 218
+b 60
+b 3
+b 54
+b 56
+b 58
+b 60
+b 61
+b 11
+b 23
+b 34
+b 16
+b 44
+b 15
+b 2
+b 40
+b 1
+b 80
+b 81
+b 83
+b 108
+b 128
+b 80
+b 2
+b 104
+b 2
+b 78
+b 6
+b 17
+b 18
+b 164
+b 166
+b 183
+b 184
+b 186
+b 166
+b 1
+b 181
+b 1
+b 112
+b 109
+b 1
+b 18
+b 20
+b 21
+b 15
+b 1
+b 29
+b 52
+b 54
+b 54
+b 1
+b 1
+b 70
+b 69
+b 1
+b 25
+b 46
+b 47
+b 45
+b 1
+b 11
+b 8
+b 1
+b 215
+b 229
+b 230
+b 239
+b 228
+b 1
+b 3
+b 2
+b 2
+b 96
+b 97
+b 99
+b 96
+b 2
+b 7
+b 8
+b 10
+b 6
+b 1
+b 30
+b 7
+b 23
+b 114
+b 3
+b 4
+b 31
+b 2
+b 1
+b 455
+b 453
+b 1
+b 56
+b 58
+b 53
+b 1
+b 64
+b 62
+b 1
+b 44
+b 45
+b 47
+b 44
+b 2
+b 1
+b 3
+b 49
+b 50
+b 82
+b 261
+b 94
+b 95
+b 110
+b 61
+b 63
+b 64
+b 75
+b 77
+b 63
+b 1
+b 72
+b 1
+b 219
+b 13
+b 14
+b 58
+b 27
+b 35
+b 36
+b 57
+b 33
+b 2
+b 1073
+b 17
+b 18
+b 32
+b 14
+b 1
+b 29
+b 1
+b 33
+b 35
+b 37
+b 38
+b 40
+b 31
+b 1
+b 36
+b 2
+b 3
+b 18
+b 30
+b 31
+b 66
+b 219
+b 230
+b 2
+b 3
+b 16
+b 11
+b 30
+b 28
+b 2
+b 43
+b 54
+b 56
+b 68
+b 80
+b 2
+b 10
+b 11
+b 42
+b 41
+b 1
+b 890
+b 1097
+b 1099
+b 1101
+b 1102
+b 1095
+b 1
+b 1100
+b 1
+b 17
+b 66
+b 67
+b 74
+b 64
+b 2
+b 17
+b 1
+b 19
+b 20
+b 22
+b 24
+b 19
+b 2
+b 4
+b 4
+b 16
+b 17
+b 33
+b 8
+b 5
+b 1
+b 5
+b 5
+b 1
+b 23
+b 7
+b 9
+b 7
+b 1
+b 60
+b 59
+b 2
+b 2
+b 4
+b 99
+b 20
+b 27
+b 26
+b 1
+b 89
+b 64
+b 65
+b 85
+b 127
+b 138
+b 139
+b 124
+b 1
+b 16
+b 13
+b 1
+b 10
+b 7
+b 1
+b 15
+b 16
+b 12
+b 1
+b 18
+b 191
+b 198
+b 199
+b 201
+b 197
+b 1
+b 138
+b 136
+b 1
+b 60
+b 61
+b 63
+b 67
+b 5
+b 5
+b 4
+b 1
+b 165
+b 238
+b 239
+b 238
+b 1
+b 670
+b 676
+b 677
+b 674
+b 2
+b 669
+b 1
+b 3
+b 0
+b 1
+b 70
+b 56
+b 58
+b 60
+b 62
+b 190
+b 11
+b 12
+b 11
+b 1
+b 8
+b 6
+b 2
+b 106
+b 46
+b 53
+b 54
+b 65
+b 67
+b 45
+b 1
+b 604
+b 616
+b 715
+b 717
+b 718
+b 726
+b 35
+b 141
+b 143
+b 227
+b 229
+b 227
+b 1
+b 55
+b 56
+b 58
+b 345
+b 342
+b 1
+b 166
+b 168
+b 169
+b 168
+b 2
+b 163
+b 1
+b 54
+b 66
+b 0
+b 2
+b 3
+b 7
+b 298
+b 300
+b 2
+b 4
+b 98
+b 25
+b 24
+b 1
+b 21
+b 74
+b 76
+b 78
+b 76
+b 1
+b 73
+b 75
+b 108
+b 109
+b 111
+b 113
+b 71
+b 1
+b 107
+b 2
+b 63
+b 13
+b 14
+b 16
+b 13
+b 2
+b 20
+b 18
+b 2
+b 18
+b 24
+b 25
+b 24
+b 1
+b 0
+b 2
+b 0
+b 1
+b 63
+b 69
+b 77
+b 62
+b 1
+b 29
+b 30
+b 74
+b 28
+b 1
+b 73
+b 1
+b 29
+b 29
+b 31
+b 40
+b 41
+b 51
+b 29
+b 1
+b 324
+b 1
+b 3
+b 4
+b 6
+b 2
+b 1
+b 5
+b 1
+b 162
+b 169
+b 171
+b 172
+b 211
+b 210
+b 1
+b 4
+b 37
+b 39
+b 40
+b 56
+b 58
+b 82
+b 123
+b 124
+b 123
+b 1
+b 42
+b 274
+b 0
+b 2
+b 29
+b 31
+b 93
+b 128
+b 129
+b 131
+b 133
+b 131
+b 1
+b 23
+b 171
+b 177
+b 183
+b 184
+b 181
+b 2
+b 176
+b 1
+b 16
+b 27
+b 38
+b 39
+b 47
+b 38
+b 2
+b 43
+b 1
+b 11
+b 10
+b 1
+b 27
+b 154
+b 156
+b 25
+b 24
+b 1
+b 134
+b 147
+b 209
+b 210
+b 212
+b 214
+b 146
+b 2
+b 207
+b 2
+b 16
+b 33
+b 35
+b 36
+b 38
+b 40
+b 38
+b 1
+b 433
+b 476
+b 477
+b 564
+b 220
+b 229
+b 43
+b 223
+b 225
+b 223
+b 1
+b 20
+b 21
+b 23
+b 30
+b 86
+b 87
+b 89
+b 114
+b 85
+b 1
+b 12
+b 18
+b 10
+b 2
+b 32
+b 38
+b 40
+b 42
+b 44
+b 42
+b 3
+b 29
+b 1
+b 105
+b 111
+b 112
+b 122
+b 103
+b 1
+b 110
+b 1
+b 1
+b 81
+b 92
+b 11
+b 13
+b 15
+b 17
+b 8
+b 1
+b 32
+b 34
+b 36
+b 25
+b 27
+b 8
+b 10
+b 12
+b 22
+b 10
+b 1
+b 408
+b 405
+b 1
+b 68
+b 69
+b 85
+b 68
+b 2
+b 58
+b 57
+b 1
+b 40
+b 41
+b 49
+b 20
+b 4
+b 150
+b 157
+b 149
+b 1
+b 186
+b 55
+b 56
+b 58
+b 60
+b 155
+b 156
+b 158
+b 160
+b 184
+b 198
+b 153
+b 2
+b 195
+b 1
+b 3
+b 5
+b 7
+b 24
+b 12
+b 13
+b 21
+b 13
+b 14
+b 16
+b 18
+b 30
+b 12
+b 1
+b 67
+b 65
+b 2
+b 74
+b 84
+b 85
+b 105
+b 82
+b 2
+b 73
+b 1
+b 154
+b 179
+b 180
+b 182
+b 178
+b 1
+b 24
+b 23
+b 2
+b 5
+b 16
+b 17
+b 27
+b 14
+b 2
+b 11
+b 20
+b 22
+b 24
+b 48
+b 90
+b 91
+b 118
+b 122
+b 124
+b 125
+b 127
+b 129
+b 119
+b 1
+b 63
+b 61
+b 1
+b 9
+b 9
+b 1
+b 69
+b 70
+b 80
+b 68
+b 1
+b 29
+b 31
+b 15
+b 12
+b 1
+b 25
+b 23
+b 2
+b 50
+b 52
+b 53
+b 55
+b 50
+b 2
+b 7
+b 9
+b 17
+b 18
+b 46
+b 17
+b 1
+b 44
+b 2
+b 78
+b 90
+b 3
+b 5
+b 6
+b 16
+b 17
+b 19
+b 3
+b 2
+b 14
+b 2
+b 293
+b 295
+b 297
+b 299
+b 301
+b 291
+b 1
+b 300
+b 1
+b 48
+b 50
+b 52
+b 54
+b 55
+b 48
+b 1
+b 257
+b 263
+b 9
+b 17
+b 19
+b 9
+b 1
+b 98
+b 100
+b 125
+b 137
+b 123
+b 2
+b 100
+b 1
+b 36
+b 22
+b 20
+b 1
+b 8
+b 9
+b 11
+b 8
+b 2
+b 48
+b 56
+b 53
+b 52
+b 1
+b 129
+b 75
+b 72
+b 1
+b 43
+b 44
+b 41
+b 2
+b 1
+b 333
+b 35
+b 36
+b 33
+b 2
+b 104
+b 73
+b 75
+b 77
+b 78
+b 86
+b 92
+b 10
+b 24
+b 26
+b 9
+b 1
+b 110
+b 97
+b 101
+b 138
+b 136
+b 1
+b 46
+b 52
+b 52
+b 1
+b 160
+b 162
+b 163
+b 183
+b 185
+b 183
+b 1
+b 35
+b 54
+b 55
+b 109
+b 107
+b 1
+b 0
+b 2
+b 0
+b 1
+b 28
+b 30
+b 24
+b 57
+b 55
+b 2
+b 69
+b 71
+b 72
+b 74
+b 71
+b 2
+b 1
+b 236
+b 73
+b 75
+b 71
+b 73
+b 74
+b 98
+b 71
+b 2
+b 1
+b 0
+b 1
+b 19
+b 2
+b 26
+b 11
+b 12
+b 14
+b 82
+b 15
+b 49
+b 51
+b 52
+b 54
+b 56
+b 58
+b 56
+b 1
+b 5
+b 5
+b 1
+b 5
+b 7
+b 7
+b 1
+b 78
+b 94
+b 93
+b 1
+b 120
+b 33
+b 32
+b 1
+b 5
+b 7
+b 8
+b 7
+b 1
+b 4
+b 100
+b 51
+b 52
+b 54
+b 0
+b 2
+b 615
+b 617
+b 202
+b 203
+b 205
+b 199
+b 1
+b 203
+b 1
+b 150
+b 152
+b 154
+b 155
+b 169
+b 185
+b 154
+b 1
+b 166
+b 1
+b 14
+b 16
+b 14
+b 1
+b 17
+b 0
+b 2
+b 3
+b 82
+b 90
+b 91
+b 93
+b 8
+b 28
+b 42
+b 17
+b 18
+b 16
+b 1
+b 5
+b 3
+b 1
+b 19
+b 30
+b 298
+b 299
+b 306
+b 18
+b 1
+b 25
+b 1
+b 78
+b 80
+b 81
+b 80
+b 1
+b 56
+b 56
+b 1
+b 32
+b 30
+b 2
+b 2
+b 6
+b 3
+b 1
+b 195
+b 194
+b 2
+b 48
+b 39
+b 12
+b 82
+b 43
+b 44
+b 44
+b 1
+b 14
+b 13
+b 1
+b 68
+b 3
+b 4
+b 127
+b 180
+b 41
+b 50
+b 40
+b 1
+b 66
+b 222
+b 223
+b 231
+b 221
+b 1
+b 1
+b 0
+b 1
+b 54
+b 4
+b 5
+b 3
+b 1
+b 13
+b 15
+b 15
+b 1
+b 69
+b 70
+b 117
+b 119
+b 121
+b 69
+b 1
+b 114
+b 1
+b 4
+b 73
+b 74
+b 90
+b 73
+b 1
+b 87
+b 1
+b 5
+b 28
+b 36
+b 27
+b 2
+b 3
+b 117
+b 119
+b 121
+b 119
+b 1
+b 82
+b 20
+b 29
+b 37
+b 38
+b 82
+b 28
+b 1
+b 61
+b 63
+b 24
+b 25
+b 9
+b 8
+b 1
+b 5
+b 7
+b 8
+b 10
+b 12
+b 7
+b 2
+b 42
+b 4
+b 6
+b 7
+b 9
+b 9
+b 68
+b 69
+b 79
+b 82
+b 135
+b 133
+b 2
+b 8
+b 7
+b 4
+b 1
+b 309
+b 311
+b 312
+b 314
+b 309
+b 2
+b 11
+b 883
+b 1080
+b 1093
+b 22
+b 23
+b 25
+b 27
+b 9
+b 242
+b 75
+b 77
+b 79
+b 80
+b 1
+b 1004
+b 1009
+b 1011
+b 1012
+b 1009
+b 2
+b 36
+b 34
+b 1
+b 30
+b 76
+b 84
+b 76
+b 1
+b 81
+b 1
+b 1
+b 2
+b 0
+b 1
+b 464
+b 466
+b 464
+b 1
+b 2
+b 3
+b 5
+b 333
+b 335
+b 337
+b 338
+b 337
+b 2
+b 330
+b 1
+b 90
+b 92
+b 4
+b 6
+b 7
+b 4
+b 2
+b 1
+b 7
+b 6
+b 1
+b 122
+b 124
+b 9
+b 11
+b 13
+b 9
+b 1
+b 48
+b 49
+b 86
+b 95
+b 47
+b 1
+b 93
+b 2
+b 7
+b 161
+b 189
+b 190
+b 192
+b 189
+b 2
+b 12
+b 11
+b 1
+b 17
+b 16
+b 1
+b 6
+b 7
+b 9
+b 20
+b 9
+b 1
+b 49
+b 2
+b 3
+b 10
+b 2
+b 1
+b 7
+b 1
+b 238
+b 240
+b 241
+b 243
+b 264
+b 240
+b 2
+b 132
+b 129
+b 1
+b 249
+b 250
+b 252
+b 66
+b 65
+b 1
+b 27
+b 26
+b 1
+b 6
+b 8
+b 10
+b 11
+b 4
+b 1
+b 171
+b 111
+b 124
+b 140
+b 222
+b 107
+b 108
+b 110
+b 107
+b 2
+b 49
+b 47
+b 1
+b 48
+b 27
+b 28
+b 30
+b 26
+b 1
+b 29
+b 1
+b 35
+b 6
+b 7
+b 7
+b 1019
+b 1021
+b 11
+b 217
+b 218
+b 236
+b 216
+b 1
+b 66
+b 66
+b 1
+b 189
+b 93
+b 95
+b 97
+b 98
+b 104
+b 28
+b 30
+b 26
+b 1
+b 7
+b 6
+b 1
+b 64
+b 81
+b 82
+b 89
+b 81
+b 1
+b 86
+b 1
+b 293
+b 309
+b 310
+b 319
+b 293
+b 1
+b 307
+b 1
+b 186
+b 206
+b 208
+b 209
+b 211
+b 213
+b 185
+b 1
+b 32
+b 34
+b 41
+b 42
+b 51
+b 34
+b 1
+b 39
+b 1
+b 35
+b 62
+b 63
+b 72
+b 204
+b 211
+b 212
+b 201
+b 1
+b 210
+b 1
+b 98
+b 16
+b 15
+b 1
+b 1
+b 7
+b 8
+b 13
+b 149
+b 151
+b 153
+b 147
+b 1
+b 2
+b 4
+b 6
+b 7
+b 6
+b 1
+b 4
+b 5
+b 6
+b 5
+b 61
+b 60
+b 2
+b 29
+b 31
+b 32
+b 34
+b 36
+b 53
+b 70
+b 71
+b 73
+b 70
+b 2
+b 11
+b 10
+b 2
+b 111
+b 31
+b 32
+b 34
+b 95
+b 9
+b 20
+b 21
+b 56
+b 55
+b 1
+b 205
+b 212
+b 213
+b 215
+b 202
+b 1
+b 3
+b 26
+b 29
+b 30
+b 84
+b 7
+b 9
+b 11
+b 12
+b 14
+b 21
+b 11
+b 2
+b 32
+b 34
+b 36
+b 29
+b 1
+b 34
+b 1
+b 159
+b 158
+b 1
+b 102
+b 109
+b 108
+b 2
+b 0
+b 2
+b 3
+b 0
+b 2
+b 143
+b 143
+b 1
+b 3
+b 5
+b 19
+b 20
+b 0
+b 1
+b 8
+b 14
+b 16
+b 17
+b 19
+b 21
+b 23
+b 7
+b 1
+b 4
+b 5
+b 4
+b 1
+b 42
+b 3
+b 4
+b 35
+b 37
+b 39
+b 41
+b 42
+b 41
+b 2
+b 32
+b 1
+b 13
+b 10
+b 1
+b 92
+b 8
+b 7
+b 1
+b 16
+b 16
+b 1
+b 55
+b 56
+b 108
+b 54
+b 1
+b 8
+b 6
+b 8
+b 6
+b 1
+b 0
+b 2
+b 3
+b 5
+b 47
+b 112
+b 113
+b 115
+b 117
+b 13
+b 248
+b 2
+b 6
+b 226
+b 227
+b 229
+b 244
+b 226
+b 2
+b 59
+b 57
+b 2
+b 5
+b 58
+b 59
+b 72
+b 74
+b 56
+b 2
+b 4
+b 1
+b 70
+b 1
+b 13
+b 15
+b 17
+b 18
+b 15
+b 2
+b 8
+b 8
+b 1
+b 70
+b 71
+b 81
+b 81
+b 1
+b 67
+b 1
+b 48
+b 6
+b 17
+b 9
+b 11
+b 12
+b 22
+b 10
+b 1
+b 21
+b 1
+b 133
+b 133
+b 1
+b 45
+b 46
+b 48
+b 45
+b 2
+b 5
+b 24
+b 17
+b 0
+b 2
+b 9
+b 6
+b 39
+b 40
+b 40
+b 1
+b 41
+b 40
+b 1
+b 47
+b 46
+b 1
+b 79
+b 80
+b 38
+b 92
+b 94
+b 118
+b 119
+b 90
+b 1
+b 837
+b 836
+b 1
+b 116
+b 45
+b 56
+b 57
+b 85
+b 41
+b 91
+b 92
+b 94
+b 96
+b 98
+b 96
+b 1
+b 78
+b 75
+b 1
+b 23
+b 43
+b 44
+b 41
+b 2
+b 23
+b 1
+b 66
+b 67
+b 69
+b 65
+b 1
+b 56
+b 4
+b 2
+b 1
+b 189
+b 196
+b 188
+b 1
+b 48
+b 167
+b 175
+b 177
+b 178
+b 166
+b 1
+b 3
+b 13
+b 15
+b 19
+b 20
+b 22
+b 13
+b 1
+b 14
+b 16
+b 3
+b 11
+b 25
+b 27
+b 122
+b 123
+b 178
+b 122
+b 2
+b 79
+b 88
+b 76
+b 1
+b 43
+b 16
+b 17
+b 3
+b 35
+b 37
+b 39
+b 40
+b 12
+b 11
+b 1
+b 7
+b 42
+b 48
+b 49
+b 51
+b 48
+b 2
+b 70
+b 103
+b 104
+b 112
+b 10
+b 60
+b 62
+b 79
+b 37
+b 48
+b 49
+b 58
+b 35
+b 1
+b 47
+b 1
+b 13
+b 61
+b 62
+b 64
+b 66
+b 64
+b 1
+b 209
+b 8
+b 9
+b 11
+b 18
+b 6
+b 2
+b 106
+b 117
+b 118
+b 128
+b 23
+b 29
+b 27
+b 1
+b 0
+b 2
+b 3
+b 0
+b 2
+b 1
+b 181
+b 180
+b 2
+b 155
+b 156
+b 155
+b 1
+b 482
+b 50
+b 51
+b 28
+b 32
+b 11
+b 199
+b 201
+b 203
+b 204
+b 242
+b 255
+b 201
+b 2
+b 238
+b 2
+b 6
+b 8
+b 8
+b 1
+b 33
+b 34
+b 36
+b 38
+b 32
+b 1
+b 12
+b 112
+b 138
+b 110
+b 2
+b 4
+b 2
+b 3
+b 19
+b 39
+b 116
+b 117
+b 124
+b 116
+b 1
+b 121
+b 2
+b 4
+b 78
+b 95
+b 96
+b 115
+b 95
+b 2
+b 76
+b 1
+b 14
+b 6
+b 8
+b 15
+b 16
+b 8
+b 1
+b 13
+b 1
+b 58
+b 59
+b 57
+b 1
+b 7
+b 4
+b 1
+b 5
+b 215
+b 216
+b 254
+b 215
+b 1
+b 252
+b 2
+b 61
+b 1
+b 206
+b 208
+b 5
+b 63
+b 8
+b 9
+b 120
+b 208
+b 217
+b 218
+b 207
+b 2
+b 214
+b 1
+b 49
+b 34
+b 9
+b 11
+b 13
+b 15
+b 16
+b 31
+b 9
+b 1
+b 162
+b 108
+b 103
+b 95
+b 4
+b 5
+b 4
+b 1
+b 19
+b 16
+b 1
+b 218
+b 220
+b 222
+b 223
+b 228
+b 220
+b 2
+b 106
+b 105
+b 1
+b 14
+b 15
+b 17
+b 24
+b 14
+b 2
+b 48
+b 60
+b 61
+b 63
+b 45
+b 1
+b 13
+b 11
+b 1
+b 17
+b 25
+b 26
+b 15
+b 1
+b 24
+b 1
+b 13
+b 31
+b 33
+b 35
+b 37
+b 37
+b 1
+b 28
+b 1
+b 101
+b 3
+b 13
+b 14
+b 3
+b 1
+b 11
+b 1
+b 7
+b 12
+b 13
+b 17
+b 105
+b 107
+b 109
+b 110
+b 112
+b 114
+b 116
+b 105
+b 1
+b 47
+b 49
+b 50
+b 59
+b 47
+b 2
+b 37
+b 35
+b 1
+b 123
+b 30
+b 31
+b 29
+b 1
+b 111
+b 13
+b 15
+b 11
+b 1
+b 12
+b 13
+b 24
+b 11
+b 1
+b 125
+b 127
+b 123
+b 1
+b 85
+b 86
+b 88
+b 84
+b 1
+b 76
+b 78
+b 79
+b 96
+b 95
+b 1
+b 16
+b 14
+b 1
+b 79
+b 203
+b 204
+b 206
+b 208
+b 210
+b 202
+b 1
+b 41
+b 3
+b 40
+b 46
+b 47
+b 60
+b 45
+b 1
+b 227
+b 37
+b 39
+b 40
+b 53
+b 18
+b 16
+b 1
+b 4
+b 5
+b 2
+b 2
+b 83
+b 82
+b 1
+b 13
+b 12
+b 1
+b 54
+b 56
+b 58
+b 59
+b 7
+b 57
+b 73
+b 72
+b 1
+b 1
+b 0
+b 1
+b 8
+b 17
+b 18
+b 17
+b 1
+b 35
+b 124
+b 4
+b 5
+b 145
+b 22
+b 47
+b 48
+b 22
+b 1
+b 45
+b 1
+b 30
+b 18
+b 23
+b 25
+b 23
+b 1
+b 9
+b 10
+b 12
+b 14
+b 46
+b 45
+b 1
+b 18
+b 33
+b 18
+b 1
+b 29
+b 1
+b 20
+b 34
+b 30
+b 95
+b 96
+b 98
+b 100
+b 102
+b 100
+b 1
+b 51
+b 52
+b 54
+b 50
+b 1
+b 1
+b 7
+b 7
+b 1
+b 26
+b 28
+b 29
+b 97
+b 45
+b 44
+b 1
+b 1
+b 177
+b 179
+b 191
+b 192
+b 194
+b 55
+b 57
+b 59
+b 4
+b 7
+b 3
+b 5
+b 1
+b 2
+b 0
+b 1
+b 151
+b 18
+b 5
+b 6
+b 15
+b 3
+b 5
+b 7
+b 14
+b 15
+b 5
+b 1
+b 112
+b 20
+b 22
+b 239
+b 89
+b 143
+b 141
+b 1
+b 88
+b 1
+b 1
+b 2
+b 182
+b 195
+b 196
+b 198
+b 200
+b 202
+b 195
+b 2
+b 179
+b 1
+b 44
+b 7
+b 202
+b 204
+b 205
+b 207
+b 209
+b 207
+b 1
+b 195
+b 11
+b 25
+b 26
+b 30
+b 72
+b 73
+b 85
+b 108
+b 110
+b 108
+b 1
+b 108
+b 147
+b 2
+b 3
+b 0
+b 68
+b 77
+b 29
+b 31
+b 33
+b 34
+b 20
+b 20
+b 22
+b 24
+b 25
+b 27
+b 32
+b 30
+b 1
+b 85
+b 120
+b 122
+b 124
+b 84
+b 1
+b 101
+b 110
+b 111
+b 70
+b 83
+b 82
+b 1
+b 46
+b 1
+b 287
+b 289
+b 291
+b 293
+b 291
+b 1
+b 163
+b 162
+b 1
+b 29
+b 31
+b 32
+b 34
+b 52
+b 26
+b 1
+b 121
+b 128
+b 129
+b 176
+b 120
+b 2
+b 125
+b 1
+b 4
+b 180
+b 16
+b 18
+b 19
+b 10
+b 12
+b 14
+b 16
+b 10
+b 1
+b 13
+b 15
+b 21
+b 23
+b 24
+b 13
+b 1
+b 6
+b 9
+b 15
+b 93
+b 100
+b 101
+b 7
+b 133
+b 135
+b 13
+b 14
+b 16
+b 70
+b 71
+b 73
+b 75
+b 70
+b 2
+b 38
+b 50
+b 35
+b 1
+b 38
+b 51
+b 50
+b 1
+b 2
+b 4
+b 5
+b 12
+b 2
+b 2
+b 128
+b 133
+b 134
+b 160
+b 201
+b 132
+b 1
+b 198
+b 1
+b 51
+b 29
+b 12
+b 11
+b 2
+b 33
+b 6
+b 82
+b 96
+b 97
+b 103
+b 81
+b 2
+b 93
+b 1
+b 35
+b 5
+b 31
+b 31
+b 1
+b 0
+b 2
+b 3
+b 11
+b 2
+b 2
+b 27
+b 40
+b 26
+b 1
+b 36
+b 1
+b 19
+b 21
+b 22
+b 4
+b 32
+b 33
+b 30
+b 2
+b 4
+b 1
+b 1
+b 15
+b 14
+b 1
+b 14
+b 10
+b 36
+b 35
+b 1
+b 10
+b 12
+b 14
+b 16
+b 17
+b 19
+b 8
+b 1
+b 15
+b 2
+b 85
+b 168
+b 170
+b 172
+b 173
+b 192
+b 173
+b 1
+b 187
+b 1
+b 21
+b 23
+b 25
+b 26
+b 43
+b 26
+b 250
+b 286
+b 209
+b 221
+b 222
+b 224
+b 219
+b 2
+b 208
+b 1
+b 162
+b 164
+b 115
+b 0
+b 2
+b 166
+b 7
+b 90
+b 89
+b 1
+b 15
+b 16
+b 37
+b 13
+b 2
+b 4
+b 24
+b 25
+b 51
+b 4
+b 1
+b 22
+b 1
+b 41
+b 43
+b 51
+b 52
+b 54
+b 56
+b 49
+b 2
+b 102
+b 141
+b 142
+b 148
+b 150
+b 140
+b 1
+b 149
+b 1
+b 130
+b 166
+b 23
+b 110
+b 798
+b 815
+b 814
+b 1
+b 171
+b 182
+b 183
+b 192
+b 170
+b 1
+b 32
+b 151
+b 31
+b 32
+b 85
+b 29
+b 2
+b 526
+b 534
+b 535
+b 534
+b 1
+b 164
+b 162
+b 1
+b 775
+b 8
+b 9
+b 20
+b 29
+b 30
+b 75
+b 28
+b 1
+b 74
+b 1
+b 122
+b 119
+b 1
+b 45
+b 0
+b 2
+b 3
+b 10
+b 2
+b 1
+b 938
+b 937
+b 2
+b 55
+b 56
+b 64
+b 54
+b 1
+b 16
+b 21
+b 23
+b 25
+b 26
+b 21
+b 1
+b 1
+b 6
+b 87
+b 68
+b 69
+b 68
+b 1
+b 15
+b 15
+b 1
+b 124
+b 125
+b 127
+b 129
+b 11
+b 13
+b 14
+b 11
+b 1
+b 4
+b 14
+b 15
+b 12
+b 2
+b 6
+b 12
+b 31
+b 3
+b 1
+b 17
+b 19
+b 0
+b 2
+b 4
+b 37
+b 24
+b 31
+b 23
+b 1
+b 181
+b 178
+b 1
+b 33
+b 34
+b 40
+b 42
+b 33
+b 2
+b 524
+b 9
+b 37
+b 9
+b 1
+b 33
+b 1
+b 36
+b 37
+b 36
+b 1
+b 22
+b 19
+b 1
+b 90
+b 5
+b 38
+b 39
+b 15
+b 68
+b 93
+b 94
+b 123
+b 67
+b 2
+b 90
+b 1
+b 501
+b 503
+b 511
+b 503
+b 1
+b 508
+b 1
+b 7
+b 109
+b 142
+b 150
+b 152
+b 141
+b 2
+b 76
+b 88
+b 87
+b 2
+b 3
+b 5
+b 7
+b 8
+b 5
+b 2
+b 28
+b 30
+b 32
+b 33
+b 71
+b 28
+b 1
+b 162
+b 7
+b 18
+b 19
+b 6
+b 1
+b 8
+b 7
+b 20
+b 21
+b 23
+b 25
+b 6
+b 1
+b 1
+b 12
+b 48
+b 11
+b 1
+b 43
+b 1
+b 55
+b 85
+b 86
+b 115
+b 27
+b 29
+b 31
+b 37
+b 38
+b 27
+b 1
+b 135
+b 153
+b 154
+b 160
+b 162
+b 153
+b 2
+b 132
+b 1
+b 71
+b 73
+b 75
+b 76
+b 140
+b 47
+b 49
+b 50
+b 44
+b 1
+b 48
+b 1
+b 54
+b 6
+b 145
+b 143
+b 157
+b 42
+b 43
+b 60
+b 61
+b 63
+b 60
+b 2
+b 51
+b 49
+b 1
+b 28
+b 30
+b 31
+b 47
+b 25
+b 49
+b 50
+b 52
+b 49
+b 2
+b 1
+b 11
+b 1
+b 1
+b 25
+b 22
+b 1
+b 28
+b 30
+b 31
+b 33
+b 0
+b 0
+b 1
+b 58
+b 86
+b 87
+b 58
+b 1
+b 84
+b 1
+b 4
+b 6
+b 24
+b 26
+b 28
+b 29
+b 5
+b 4
+b 6
+b 8
+b 10
+b 11
+b 13
+b 15
+b 4
+b 1
+b 16
+b 18
+b 20
+b 21
+b 23
+b 16
+b 1
+b 21
+b 9
+b 14
+b 14
+b 1
+b 0
+b 2
+b 0
+b 1
+b 112
+b 133
+b 134
+b 132
+b 1
+b 4
+b 29
+b 12
+b 28
+b 29
+b 31
+b 38
+b 11
+b 1
+b 174
+b 176
+b 178
+b 179
+b 181
+b 183
+b 185
+b 176
+b 2
+b 105
+b 107
+b 109
+b 103
+b 1
+b 0
+b 2
+b 0
+b 1
+b 26
+b 28
+b 26
+b 1
+b 133
+b 134
+b 12
+b 34
+b 72
+b 91
+b 90
+b 1
+b 129
+b 128
+b 1
+b 16
+b 18
+b 20
+b 22
+b 23
+b 22
+b 2
+b 87
+b 88
+b 89
+b 87
+b 1
+b 4
+b 2
+b 1
+b 171
+b 173
+b 174
+b 205
+b 173
+b 2
+b 168
+b 1
+b 198
+b 1
+b 72
+b 94
+b 96
+b 97
+b 96
+b 2
+b 70
+b 1
+b 63
+b 62
+b 1
+b 115
+b 153
+b 159
+b 160
+b 162
+b 164
+b 158
+b 1
+b 152
+b 1
+b 235
+b 253
+b 255
+b 255
+b 1
+b 57
+b 55
+b 1
+b 121
+b 127
+b 128
+b 134
+b 26
+b 28
+b 29
+b 28
+b 1
+b 32
+b 32
+b 1
+b 189
+b 189
+b 1
+b 16
+b 22
+b 23
+b 22
+b 1
+b 118
+b 131
+b 133
+b 135
+b 136
+b 138
+b 140
+b 138
+b 1
+b 18
+b 43
+b 45
+b 46
+b 68
+b 17
+b 2
+b 41
+b 2
+b 31
+b 51
+b 53
+b 55
+b 53
+b 1
+b 58
+b 205
+b 203
+b 1
+b 1
+b 56
+b 91
+b 92
+b 109
+b 90
+b 1
+b 107
+b 2
+b 16
+b 29
+b 31
+b 32
+b 43
+b 14
+b 2
+b 29
+b 1
+b 139
+b 137
+b 1
+b 148
+b 150
+b 146
+b 1
+b 495
+b 496
+b 578
+b 494
+b 1
+b 574
+b 1
+b 15
+b 26
+b 33
+b 34
+b 48
+b 50
+b 25
+b 1
+b 79
+b 78
+b 1
+b 7
+b 9
+b 11
+b 13
+b 5
+b 1
+b 45
+b 106
+b 108
+b 110
+b 111
+b 127
+b 108
+b 2
+b 42
+b 1
+b 40
+b 45
+b 61
+b 62
+b 64
+b 66
+b 68
+b 66
+b 1
+b 259
+b 266
+b 268
+b 269
+b 275
+b 266
+b 2
+b 77
+b 79
+b 81
+b 115
+b 116
+b 79
+b 1
+b 197
+b 195
+b 1
+b 47
+b 46
+b 1
+b 8
+b 9
+b 8
+b 2
+b 4
+b 132
+b 241
+b 242
+b 248
+b 247
+b 1
+b 41
+b 42
+b 53
+b 205
+b 14
+b 16
+b 29
+b 31
+b 175
+b 222
+b 224
+b 226
+b 220
+b 1
+b 174
+b 1
+b 65
+b 84
+b 86
+b 84
+b 1
+b 0
+b 1
+b 29
+b 155
+b 175
+b 176
+b 175
+b 1
+b 3
+b 32
+b 1
+b 2
+b 17
+b 19
+b 20
+b 120
+b 122
+b 20
+b 1
+b 56
+b 7
+b 20
+b 21
+b 18
+b 2
+b 0
+b 2
+b 0
+b 1
+b 44
+b 44
+b 1
+b 11
+b 12
+b 20
+b 11
+b 2
+b 10
+b 23
+b 24
+b 31
+b 22
+b 1
+b 30
+b 1
+b 235
+b 262
+b 263
+b 272
+b 259
+b 1
+b 16
+b 132
+b 74
+b 73
+b 1
+b 52
+b 64
+b 65
+b 89
+b 63
+b 1
+b 87
+b 1
+b 33
+b 35
+b 41
+b 42
+b 44
+b 51
+b 39
+b 2
+b 3
+b 4
+b 0
+b 1
+b 135
+b 137
+b 90
+b 103
+b 89
+b 1
+b 98
+b 1
+b 0
+b 2
+b 41
+b 43
+b 45
+b 47
+b 48
+b 50
+b 74
+b 41
+b 1
+b 893
+b 894
+b 898
+b 892
+b 1
+b 19
+b 13
+b 12
+b 2
+b 162
+b 164
+b 166
+b 167
+b 169
+b 171
+b 173
+b 160
+b 1
+b 165
+b 2
+b 70
+b 28
+b 36
+b 37
+b 48
+b 36
+b 2
+b 24
+b 7
+b 8
+b 19
+b 8
+b 1
+b 59
+b 81
+b 82
+b 119
+b 81
+b 2
+b 57
+b 1
+b 1
+b 71
+b 73
+b 74
+b 76
+b 84
+b 73
+b 2
+b 1
+b 1
+b 48
+b 49
+b 51
+b 107
+b 47
+b 1
+b 105
+b 2
+b 5
+b 94
+b 94
+b 1
+b 16
+b 154
+b 152
+b 2
+b 160
+b 161
+b 168
+b 159
+b 1
+b 6
+b 211
+b 212
+b 223
+b 209
+b 2
+b 208
+b 207
+b 1
+b 206
+b 205
+b 1
+b 6
+b 15
+b 190
+b 3
+b 1
+b 28
+b 45
+b 47
+b 48
+b 64
+b 45
+b 2
+b 59
+b 1
+b 340
+b 352
+b 353
+b 378
+b 345
+b 347
+b 361
+b 362
+b 343
+b 1
+b 360
+b 1
+b 5
+b 79
+b 88
+b 89
+b 88
+b 1
+b 63
+b 65
+b 61
+b 1
+b 73
+b 73
+b 1
+b 48
+b 49
+b 48
+b 2
+b 6
+b 4
+b 1
+b 190
+b 191
+b 201
+b 15
+b 8
+b 10
+b 3
+b 17
+b 34
+b 35
+b 31
+b 1
+b 6
+b 5
+b 1
+b 14
+b 21
+b 22
+b 33
+b 15
+b 92
+b 94
+b 95
+b 94
+b 1
+b 1
+b 66
+b 68
+b 10
+b 11
+b 9
+b 1
+b 10
+b 38
+b 39
+b 47
+b 38
+b 1
+b 44
+b 1
+b 18
+b 56
+b 42
+b 43
+b 45
+b 47
+b 61
+b 143
+b 145
+b 164
+b 44
+b 51
+b 50
+b 2
+b 24
+b 26
+b 26
+b 1
+b 120
+b 128
+b 129
+b 128
+b 1
+b 4
+b 2
+b 1
+b 187
+b 189
+b 190
+b 198
+b 189
+b 2
+b 184
+b 1
+b 192
+b 1
+b 1
+b 24
+b 38
+b 40
+b 2
+b 10
+b 12
+b 13
+b 15
+b 17
+b 19
+b 10
+b 2
+b 51
+b 102
+b 120
+b 101
+b 1
+b 112
+b 31
+b 30
+b 1
+b 10
+b 11
+b 38
+b 59
+b 8
+b 2
+b 56
+b 1
+b 426
+b 423
+b 1
+b 24
+b 25
+b 35
+b 22
+b 2
+b 380
+b 140
+b 141
+b 140
+b 1
+b 10
+b 10
+b 1
+b 308
+b 306
+b 1
+b 206
+b 215
+b 212
+b 1
+b 0
+b 2
+b 3
+b 0
+b 2
+b 22
+b 23
+b 25
+b 114
+b 22
+b 2
+b 110
+b 1
+b 26
+b 6
+b 8
+b 10
+b 12
+b 4
+b 1
+b 11
+b 1
+b 12
+b 11
+b 12
+b 24
+b 6
+b 5
+b 1
+b 26
+b 37
+b 37
+b 1
+b 576
+b 632
+b 633
+b 649
+b 630
+b 2
+b 576
+b 1
+b 46
+b 7
+b 14
+b 15
+b 4
+b 76
+b 78
+b 76
+b 1
+b 17
+b 18
+b 20
+b 66
+b 68
+b 70
+b 71
+b 154
+b 156
+b 68
+b 2
+b 117
+b 132
+b 164
+b 3
+b 5
+b 6
+b 8
+b 10
+b 12
+b 10
+b 1
+b 49
+b 56
+b 57
+b 72
+b 42
+b 67
+b 69
+b 70
+b 64
+b 1
+b 3
+b 0
+b 1
+b 65
+b 74
+b 5
+b 4
+b 1
+b 46
+b 54
+b 55
+b 57
+b 43
+b 1
+b 12
+b 6
+b 8
+b 23
+b 24
+b 8
+b 1
+b 21
+b 1
+b 6
+b 31
+b 32
+b 34
+b 41
+b 43
+b 36
+b 38
+b 40
+b 41
+b 110
+b 127
+b 38
+b 2
+b 124
+b 2
+b 105
+b 4
+b 23
+b 121
+b 127
+b 128
+b 140
+b 142
+b 127
+b 1
+b 137
+b 1
+b 86
+b 88
+b 90
+b 91
+b 93
+b 95
+b 93
+b 1
+b 11
+b 13
+b 15
+b 17
+b 18
+b 20
+b 52
+b 9
+b 1
+b 16
+b 2
+b 14
+b 13
+b 2
+b 14
+b 15
+b 17
+b 27
+b 13
+b 1
+b 405
+b 407
+b 409
+b 402
+b 1
+b 0
+b 1
+b 0
+b 2
+b 61
+b 80
+b 102
+b 100
+b 1
+b 79
+b 1
+b 96
+b 98
+b 94
+b 1
+b 133
+b 20
+b 19
+b 1
+b 6
+b 2
+b 4
+b 5
+b 2
+b 2
+b 47
+b 44
+b 1
+b 47
+b 70
+b 71
+b 73
+b 146
+b 46
+b 2
+b 67
+b 1
+b 38
+b 49
+b 111
+b 39
+b 38
+b 1
+b 81
+b 78
+b 1
+b 3
+b 4
+b 99
+b 101
+b 99
+b 1
+b 53
+b 54
+b 55
+b 30
+b 28
+b 1
+b 29
+b 3
+b 9
+b 8
+b 1
+b 34
+b 36
+b 37
+b 44
+b 34
+b 2
+b 19
+b 21
+b 22
+b 4
+b 6
+b 4
+b 1
+b 270
+b 271
+b 74
+b 30
+b 0
+b 139
+b 8
+b 9
+b 15
+b 2
+b 4
+b 5
+b 17
+b 34
+b 54
+b 54
+b 1
+b 8
+b 24
+b 2
+b 3
+b 2
+b 1
+b 142
+b 141
+b 2
+b 11
+b 12
+b 10
+b 1
+b 5
+b 103
+b 120
+b 122
+b 123
+b 125
+b 85
+b 86
+b 88
+b 99
+b 85
+b 2
+b 155
+b 168
+b 153
+b 2
+b 12
+b 14
+b 15
+b 22
+b 25
+b 27
+b 29
+b 31
+b 39
+b 40
+b 23
+b 1
+b 202
+b 136
+b 219
+b 20
+b 29
+b 30
+b 110
+b 26
+b 1
+b 107
+b 1
+b 135
+b 137
+b 157
+b 135
+b 1
+b 63
+b 22
+b 23
+b 4
+b 156
+b 98
+b 100
+b 101
+b 103
+b 115
+b 114
+b 1
+b 30
+b 32
+b 34
+b 36
+b 38
+b 36
+b 1
+b 17
+b 25
+b 26
+b 28
+b 25
+b 2
+b 14
+b 1
+b 0
+b 24
+b 40
+b 41
+b 43
+b 45
+b 40
+b 2
+b 11
+b 9
+b 1
+b 170
+b 172
+b 174
+b 176
+b 177
+b 168
+b 1
+b 175
+b 1
+b 2
+b 92
+b 91
+b 1
+b 19
+b 105
+b 105
+b 1
+b 252
+b 251
+b 2
+b 35
+b 37
+b 38
+b 52
+b 38
+b 1
+b 64
+b 66
+b 72
+b 73
+b 75
+b 43
+b 50
+b 51
+b 53
+b 55
+b 57
+b 9
+b 19
+b 20
+b 17
+b 2
+b 8
+b 1
+b 0
+b 1
+b 152
+b 154
+b 171
+b 99
+b 98
+b 1
+b 124
+b 177
+b 186
+b 185
+b 1
+b 6
+b 47
+b 48
+b 57
+b 47
+b 1
+b 54
+b 2
+b 6
+b 8
+b 8
+b 1
+b 50
+b 76
+b 75
+b 1
+b 0
+b 1
+b 16
+b 172
+b 6
+b 25
+b 26
+b 28
+b 42
+b 58
+b 59
+b 61
+b 63
+b 58
+b 2
+b 39
+b 1
+b 59
+b 75
+b 76
+b 84
+b 75
+b 2
+b 57
+b 1
+b 77
+b 1
+b 4
+b 205
+b 206
+b 216
+b 202
+b 1
+b 9
+b 8
+b 1
+b 10
+b 12
+b 11
+b 1
+b 77
+b 75
+b 2
+b 7
+b 69
+b 70
+b 72
+b 95
+b 72
+b 1
+b 12
+b 89
+b 91
+b 93
+b 94
+b 137
+b 197
+b 199
+b 200
+b 202
+b 211
+b 213
+b 75
+b 15
+b 17
+b 58
+b 76
+b 77
+b 107
+b 109
+b 75
+b 1
+b 108
+b 1
+b 26
+b 51
+b 52
+b 59
+b 3
+b 5
+b 7
+b 8
+b 7
+b 1
+b 31
+b 33
+b 33
+b 1
+b 34
+b 46
+b 79
+b 81
+b 45
+b 1
+b 4
+b 6
+b 7
+b 4
+b 2
+b 61
+b 63
+b 59
+b 1
+b 19
+b 16
+b 1
+b 15
+b 16
+b 15
+b 2
+b 9
+b 2
+b 12
+b 2
+b 1
+b 113
+b 115
+b 80
+b 81
+b 83
+b 2
+b 11
+b 12
+b 14
+b 11
+b 2
+b 16
+b 18
+b 13
+b 12
+b 1
+b 0
+b 16
+b 17
+b 51
+b 3
+b 4
+b 4
+b 1
+b 1
+b 631
+b 633
+b 635
+b 636
+b 654
+b 715
+b 633
+b 2
+b 712
+b 1
+b 61
+b 67
+b 68
+b 142
+b 63
+b 111
+b 112
+b 110
+b 1
+b 7
+b 25
+b 23
+b 2
+b 242
+b 183
+b 184
+b 200
+b 23
+b 21
+b 1
+b 82
+b 196
+b 197
+b 210
+b 114
+b 121
+b 122
+b 124
+b 111
+b 1
+b 7
+b 6
+b 1
+b 981
+b 983
+b 985
+b 986
+b 990
+b 992
+b 985
+b 2
+b 978
+b 1
+b 125
+b 40
+b 42
+b 10
+b 10
+b 1
+b 15
+b 16
+b 15
+b 1
+b 83
+b 1
+b 20
+b 26
+b 35
+b 36
+b 38
+b 40
+b 35
+b 2
+b 18
+b 1
+b 202
+b 208
+b 199
+b 1
+b 203
+b 210
+b 211
+b 210
+b 1
+b 52
+b 78
+b 15
+b 33
+b 8
+b 9
+b 35
+b 34
+b 1
+b 9
+b 544
+b 587
+b 589
+b 590
+b 606
+b 589
+b 1
+b 603
+b 1
+b 7
+b 9
+b 10
+b 45
+b 47
+b 45
+b 1
+b 34
+b 63
+b 64
+b 66
+b 68
+b 70
+b 61
+b 2
+b 34
+b 1
+b 66
+b 1
+b 16
+b 14
+b 1
+b 41
+b 42
+b 44
+b 41
+b 2
+b 68
+b 82
+b 83
+b 179
+b 42
+b 178
+b 180
+b 181
+b 180
+b 1
+b 11
+b 9
+b 2
+b 72
+b 100
+b 112
+b 111
+b 1
+b 67
+b 68
+b 70
+b 72
+b 86
+b 70
+b 1
+b 4
+b 6
+b 8
+b 9
+b 43
+b 42
+b 1
+b 88
+b 85
+b 1
+b 272
+b 282
+b 279
+b 1
+b 36
+b 37
+b 55
+b 36
+b 2
+b 51
+b 1
+b 28
+b 18
+b 19
+b 21
+b 23
+b 25
+b 23
+b 1
+b 43
+b 45
+b 46
+b 70
+b 45
+b 1
+b 67
+b 1
+b 49
+b 17
+b 34
+b 35
+b 34
+b 1
+b 14
+b 1
+b 43
+b 224
+b 17
+b 18
+b 32
+b 17
+b 1
+b 29
+b 2
+b 163
+b 162
+b 1
+b 33
+b 50
+b 51
+b 0
+b 14
+b 38
+b 1
+b 8
+b 0
+b 1
+b 34
+b 33
+b 2
+b 23
+b 5
+b 6
+b 8
+b 4
+b 1
+b 10
+b 6
+b 7
+b 28
+b 249
+b 251
+b 253
+b 254
+b 256
+b 258
+b 282
+b 249
+b 1
+b 232
+b 234
+b 242
+b 273
+b 274
+b 276
+b 232
+b 1
+b 12
+b 1
+b 38
+b 6
+b 5
+b 1
+b 157
+b 167
+b 168
+b 167
+b 2
+b 154
+b 1
+b 60
+b 57
+b 1
+b 23
+b 83
+b 84
+b 115
+b 26
+b 36
+b 37
+b 43
+b 45
+b 43
+b 1
+b 32
+b 180
+b 182
+b 135
+b 4
+b 14
+b 30
+b 5
+b 12
+b 11
+b 1
+b 109
+b 111
+b 119
+b 120
+b 122
+b 124
+b 107
+b 1
+b 118
+b 2
+b 4
+b 39
+b 4
+b 1
+b 0
+b 2
+b 3
+b 9
+b 2
+b 2
+b 5
+b 1
+b 30
+b 17
+b 18
+b 20
+b 25
+b 23
+b 1
+b 55
+b 9
+b 8
+b 1
+b 4
+b 5
+b 12
+b 2
+b 2
+b 81
+b 88
+b 87
+b 2
+b 34
+b 56
+b 57
+b 56
+b 1
+b 83
+b 80
+b 1
+b 7
+b 8
+b 14
+b 5
+b 2
+b 699
+b 700
+b 702
+b 8
+b 14
+b 7
+b 2
+b 60
+b 306
+b 355
+b 356
+b 367
+b 355
+b 1
+b 364
+b 2
+b 11
+b 166
+b 4
+b 44
+b 46
+b 16
+b 29
+b 30
+b 29
+b 64
+b 66
+b 68
+b 62
+b 1
+b 11
+b 10
+b 1
+b 117
+b 126
+b 134
+b 135
+b 125
+b 1
+b 69
+b 32
+b 39
+b 40
+b 42
+b 44
+b 38
+b 1
+b 43
+b 1
+b 46
+b 54
+b 55
+b 64
+b 139
+b 141
+b 137
+b 1
+b 22
+b 24
+b 25
+b 19
+b 1
+b 270
+b 280
+b 281
+b 280
+b 3
+b 26
+b 23
+b 1
+b 178
+b 186
+b 187
+b 193
+b 195
+b 184
+b 2
+b 177
+b 1
+b 21
+b 51
+b 52
+b 63
+b 25
+b 27
+b 29
+b 39
+b 152
+b 25
+b 5
+b 15
+b 17
+b 18
+b 29
+b 28
+b 1
+b 12
+b 32
+b 33
+b 2
+b 26
+b 34
+b 24
+b 1
+b 0
+b 2
+b 3
+b 10
+b 2
+b 1
+b 159
+b 161
+b 163
+b 165
+b 163
+b 1
+b 237
+b 248
+b 256
+b 246
+b 1
+b 1
+b 2
+b 1
+b 1
+b 11
+b 54
+b 55
+b 57
+b 53
+b 1
+b 11
+b 1
+b 154
+b 151
+b 1
+b 66
+b 67
+b 69
+b 64
+b 2
+b 67
+b 1
+b 77
+b 87
+b 99
+b 86
+b 1
+b 95
+b 1
+b 12
+b 26
+b 47
+b 49
+b 50
+b 11
+b 1
+b 22
+b 1
+b 148
+b 150
+b 152
+b 154
+b 155
+b 248
+b 131
+b 133
+b 135
+b 133
+b 1
+b 1
+b 150
+b 176
+b 26
+b 154
+b 153
+b 1
+b 51
+b 53
+b 54
+b 64
+b 178
+b 228
+b 225
+b 1
+b 1
+b 2
+b 4
+b 6
+b 0
+b 1
+b 5
+b 1
+b 28
+b 25
+b 27
+b 28
+b 22
+b 1
+b 1
+b 0
+b 1
+b 11
+b 18
+b 11
+b 39
+b 38
+b 1
+b 81
+b 88
+b 80
+b 1
+b 84
+b 1
+b 20
+b 22
+b 24
+b 25
+b 12
+b 41
+b 51
+b 52
+b 88
+b 11
+b 1
+b 36
+b 1
+b 27
+b 48
+b 50
+b 52
+b 74
+b 76
+b 78
+b 87
+b 91
+b 93
+b 99
+b 100
+b 102
+b 99
+b 2
+b 88
+b 1
+b 56
+b 11
+b 13
+b 15
+b 17
+b 5
+b 7
+b 9
+b 3
+b 144
+b 144
+b 1
+b 12
+b 13
+b 15
+b 47
+b 12
+b 2
+b 39
+b 83
+b 84
+b 81
+b 2
+b 87
+b 134
+b 166
+b 167
+b 1
+b 17
+b 28
+b 47
+b 49
+b 50
+b 71
+b 49
+b 2
+b 25
+b 1
+b 21
+b 23
+b 21
+b 1
+b 124
+b 180
+b 9
+b 10
+b 12
+b 9
+b 2
+b 262
+b 261
+b 2
+b 18
+b 20
+b 21
+b 23
+b 46
+b 18
+b 2
+b 23
+b 20
+b 1
+b 61
+b 106
+b 0
+b 20
+b 54
+b 53
+b 1
+b 16
+b 17
+b 19
+b 39
+b 14
+b 2
+b 20
+b 26
+b 27
+b 3
+b 39
+b 71
+b 73
+b 74
+b 76
+b 39
+b 1
+b 70
+b 2
+b 103
+b 37
+b 58
+b 59
+b 58
+b 2
+b 33
+b 32
+b 1
+b 105
+b 23
+b 31
+b 29
+b 2
+b 22
+b 1
+b 0
+b 1
+b 11
+b 54
+b 52
+b 2
+b 28
+b 34
+b 33
+b 1
+b 47
+b 2
+b 86
+b 87
+b 83
+b 1
+b 57
+b 25
+b 26
+b 28
+b 10
+b 9
+b 1
+b 180
+b 202
+b 203
+b 205
+b 178
+b 2
+b 102
+b 179
+b 99
+b 1
+b 49
+b 33
+b 34
+b 54
+b 33
+b 1
+b 51
+b 2
+b 22
+b 170
+b 188
+b 185
+b 1
+b 68
+b 326
+b 328
+b 329
+b 3
+b 5
+b 58
+b 2
+b 3
+b 23
+b 1
+b 1
+b 201
+b 198
+b 1
+b 3
+b 4
+b 10
+b 12
+b 3
+b 2
+b 48
+b 48
+b 1
+b 25
+b 25
+b 1
+b 12
+b 19
+b 21
+b 11
+b 1
+b 38
+b 37
+b 1
+b 8
+b 9
+b 28
+b 8
+b 1
+b 21
+b 37
+b 39
+b 95
+b 92
+b 1
+b 6
+b 14
+b 16
+b 17
+b 14
+b 2
+b 57
+b 59
+b 103
+b 10
+b 20
+b 6
+b 7
+b 8
+b 64
+b 38
+b 39
+b 41
+b 43
+b 41
+b 1
+b 4
+b 6
+b 2
+b 1
+b 5
+b 3
+b 1
+b 7
+b 91
+b 121
+b 122
+b 20
+b 22
+b 20
+b 1
+b 40
+b 50
+b 51
+b 50
+b 1
+b 14
+b 40
+b 30
+b 31
+b 33
+b 35
+b 37
+b 35
+b 1
+b 13
+b 27
+b 12
+b 1
+b 74
+b 40
+b 104
+b 105
+b 107
+b 6
+b 286
+b 285
+b 1
+b 149
+b 150
+b 148
+b 1
+b 21
+b 28
+b 48
+b 64
+b 77
+b 79
+b 80
+b 94
+b 63
+b 1
+b 55
+b 20
+b 21
+b 23
+b 132
+b 138
+b 129
+b 1
+b 31
+b 29
+b 1
+b 89
+b 88
+b 1
+b 80
+b 82
+b 84
+b 85
+b 87
+b 87
+b 1
+b 9
+b 17
+b 18
+b 32
+b 31
+b 1
+b 71
+b 104
+b 1
+b 3
+b 5
+b 3
+b 1
+b 15
+b 106
+b 107
+b 109
+b 111
+b 106
+b 2
+b 34
+b 49
+b 13
+b 61
+b 70
+b 17
+b 16
+b 1
+b 1
+b 104
+b 101
+b 1
+b 36
+b 37
+b 34
+b 2
+b 0
+b 2
+b 58
+b 60
+b 61
+b 66
+b 58
+b 2
+b 118
+b 117
+b 1
+b 27
+b 34
+b 36
+b 37
+b 46
+b 124
+b 126
+b 124
+b 1
+b 43
+b 44
+b 65
+b 88
+b 0
+b 2
+b 10
+b 11
+b 18
+b 8
+b 2
+b 15
+b 1
+b 172
+b 54
+b 2
+b 3
+b 0
+b 2
+b 107
+b 113
+b 114
+b 113
+b 2
+b 104
+b 1
+b 41
+b 25
+b 27
+b 36
+b 37
+b 39
+b 25
+b 1
+b 48
+b 3
+b 5
+b 11
+b 12
+b 3
+b 1
+b 9
+b 38
+b 40
+b 41
+b 1
+b 0
+b 2
+b 240
+b 27
+b 36
+b 26
+b 1
+b 7
+b 42
+b 61
+b 62
+b 71
+b 15
+b 23
+b 24
+b 30
+b 22
+b 1
+b 29
+b 1
+b 440
+b 486
+b 487
+b 438
+b 1
+b 485
+b 1
+b 90
+b 6
+b 17
+b 18
+b 17
+b 2
+b 4
+b 1
+b 2
+b 2
+b 1
+b 898
+b 15
+b 17
+b 19
+b 20
+b 31
+b 19
+b 1
+b 29
+b 2
+b 242
+b 244
+b 245
+b 242
+b 2
+b 5
+b 3
+b 3
+b 1
+b 104
+b 111
+b 112
+b 121
+b 111
+b 1
+b 118
+b 2
+b 404
+b 99
+b 97
+b 1
+b 1
+b 13
+b 14
+b 16
+b 18
+b 13
+b 2
+b 155
+b 164
+b 165
+b 182
+b 184
+b 182
+b 1
+b 111
+b 25
+b 26
+b 25
+b 1
+b 9
+b 10
+b 9
+b 1
+b 42
+b 85
+b 86
+b 88
+b 8
+b 7
+b 1
+b 878
+b 9
+b 17
+b 50
+b 66
+b 67
+b 65
+b 1
+b 21
+b 1
+b 0
+b 1
+b 193
+b 221
+b 222
+b 237
+b 220
+b 1
+b 192
+b 1
+b 29
+b 31
+b 27
+b 1
+b 32
+b 33
+b 30
+b 2
+b 20
+b 19
+b 1
+b 63
+b 118
+b 119
+b 23
+b 22
+b 1
+b 4
+b 30
+b 31
+b 30
+b 3
+b 1
+b 9
+b 0
+b 1
+b 53
+b 2
+b 3
+b 5
+b 96
+b 145
+b 146
+b 148
+b 153
+b 151
+b 1
+b 90
+b 92
+b 90
+b 1
+b 58
+b 183
+b 184
+b 32
+b 52
+b 18
+b 20
+b 21
+b 15
+b 1
+b 3
+b 12
+b 11
+b 205
+b 203
+b 2
+b 0
+b 2
+b 2
+b 1
+b 223
+b 3
+b 2
+b 1
+b 50
+b 111
+b 113
+b 111
+b 1
+b 122
+b 123
+b 153
+b 3
+b 1
+b 1
+b 43
+b 44
+b 52
+b 44
+b 1
+b 8
+b 13
+b 15
+b 11
+b 1
+b 1
+b 2
+b 1
+b 1
+b 213
+b 211
+b 1
+b 17
+b 19
+b 20
+b 22
+b 19
+b 2
+b 1
+b 0
+b 2
+b 21
+b 69
+b 71
+b 84
+b 83
+b 1
+b 90
+b 4
+b 30
+b 4
+b 1
+b 254
+b 271
+b 279
+b 280
+b 282
+b 284
+b 282
+b 1
+b 43
+b 45
+b 47
+b 49
+b 40
+b 1
+b 58
+b 107
+b 51
+b 75
+b 114
+b 115
+b 22
+b 79
+b 106
+b 57
+b 5
+b 13
+b 14
+b 20
+b 12
+b 1
+b 19
+b 1
+b 472
+b 480
+b 481
+b 483
+b 540
+b 480
+b 2
+b 57
+b 55
+b 1
+b 12
+b 13
+b 49
+b 12
+b 2
+b 45
+b 1
+b 11
+b 123
+b 148
+b 150
+b 151
+b 121
+b 2
+b 148
+b 1
+b 38
+b 0
+b 191
+b 31
+b 32
+b 30
+b 1
+b 21
+b 21
+b 1
+b 98
+b 3
+b 4
+b 14
+b 492
+b 494
+b 17
+b 45
+b 8
+b 7
+b 1
+b 114
+b 2
+b 3
+b 10
+b 2
+b 1
+b 7
+b 1
+b 41
+b 40
+b 1
+b 8
+b 9
+b 9
+b 1
+b 1
+b 9
+b 614
+b 612
+b 1
+b 20
+b 22
+b 147
+b 18
+b 1
+b 64
+b 66
+b 67
+b 96
+b 66
+b 2
+b 36
+b 38
+b 46
+b 47
+b 46
+b 2
+b 25
+b 23
+b 1
+b 32
+b 31
+b 2
+b 13
+b 15
+b 17
+b 82
+b 118
+b 120
+b 122
+b 72
+b 30
+b 32
+b 34
+b 35
+b 129
+b 9
+b 10
+b 12
+b 9
+b 2
+b 32
+b 29
+b 1
+b 129
+b 130
+b 132
+b 134
+b 127
+b 2
+b 123
+b 123
+b 1
+b 47
+b 49
+b 55
+b 56
+b 79
+b 78
+b 1
+b 168
+b 170
+b 172
+b 174
+b 175
+b 177
+b 179
+b 166
+b 1
+b 173
+b 2
+b 133
+b 154
+b 130
+b 1
+b 30
+b 32
+b 33
+b 30
+b 2
+b 184
+b 186
+b 186
+b 1
+b 13
+b 14
+b 0
+b 93
+b 59
+b 60
+b 58
+b 1
+b 4
+b 6
+b 2
+b 1
+b 19
+b 21
+b 23
+b 25
+b 19
+b 18
+b 1
+b 122
+b 123
+b 131
+b 133
+b 7
+b 31
+b 32
+b 38
+b 31
+b 2
+b 5
+b 1
+b 32
+b 1
+b 19
+b 11
+b 11
+b 1
+b 273
+b 275
+b 277
+b 278
+b 277
+b 2
+b 270
+b 1
+b 98
+b 140
+b 0
+b 2
+b 0
+b 1
+b 25
+b 25
+b 1
+b 12
+b 13
+b 15
+b 12
+b 2
+b 58
+b 64
+b 66
+b 67
+b 80
+b 57
+b 2
+b 62
+b 2
+b 39
+b 44
+b 2
+b 57
+b 56
+b 1
+b 18
+b 19
+b 25
+b 0
+b 43
+b 56
+b 58
+b 59
+b 61
+b 331
+b 333
+b 334
+b 340
+b 333
+b 2
+b 336
+b 1
+b 26
+b 35
+b 90
+b 89
+b 2
+b 19
+b 21
+b 22
+b 10
+b 12
+b 13
+b 15
+b 26
+b 28
+b 12
+b 2
+b 22
+b 1
+b 40
+b 69
+b 70
+b 37
+b 1
+b 68
+b 1
+b 3
+b 63
+b 65
+b 66
+b 68
+b 70
+b 63
+b 2
+b 68
+b 1
+b 6
+b 23
+b 24
+b 26
+b 32
+b 21
+b 45
+b 47
+b 49
+b 50
+b 45
+b 1
+b 85
+b 99
+b 108
+b 107
+b 1
+b 22
+b 137
+b 136
+b 1
+b 62
+b 73
+b 74
+b 85
+b 73
+b 2
+b 66
+b 132
+b 134
+b 136
+b 134
+b 1
+b 11
+b 31
+b 37
+b 39
+b 37
+b 1
+b 84
+b 3
+b 3
+b 71
+b 39
+b 40
+b 42
+b 44
+b 42
+b 1
+b 116
+b 117
+b 136
+b 115
+b 1
+b 133
+b 2
+b 59
+b 7
+b 25
+b 26
+b 11
+b 56
+b 4
+b 5
+b 35
+b 2
+b 2
+b 16
+b 17
+b 35
+b 85
+b 189
+b 195
+b 194
+b 1
+b 59
+b 60
+b 102
+b 58
+b 1
+b 35
+b 36
+b 38
+b 40
+b 35
+b 2
+b 29
+b 29
+b 1
+b 49
+b 56
+b 48
+b 1
+b 0
+b 1
+b 4
+b 20
+b 72
+b 20
+b 1
+b 13
+b 36
+b 37
+b 43
+b 42
+b 1
+b 136
+b 133
+b 1
+b 106
+b 17
+b 19
+b 21
+b 17
+b 1
+b 167
+b 168
+b 169
+b 179
+b 168
+b 2
+b 71
+b 2
+b 3
+b 42
+b 78
+b 85
+b 86
+b 88
+b 173
+b 172
+b 1
+b 31
+b 33
+b 232
+b 233
+b 235
+b 49
+b 50
+b 52
+b 82
+b 110
+b 81
+b 1
+b 105
+b 1
+b 5
+b 7
+b 9
+b 10
+b 9
+b 1
+b 2
+b 1
+b 115
+b 15
+b 15
+b 1
+b 113
+b 114
+b 116
+b 113
+b 2
+b 24
+b 114
+b 111
+b 1
+b 17
+b 18
+b 20
+b 14
+b 16
+b 17
+b 31
+b 28
+b 30
+b 47
+b 49
+b 50
+b 6
+b 4
+b 1
+b 62
+b 63
+b 65
+b 60
+b 2
+b 11
+b 8
+b 1
+b 5
+b 14
+b 0
+b 1
+b 10
+b 14
+b 25
+b 26
+b 28
+b 76
+b 24
+b 1
+b 13
+b 1
+b 51
+b 53
+b 55
+b 57
+b 58
+b 58
+b 1
+b 29
+b 28
+b 1
+b 6
+b 8
+b 16
+b 14
+b 1
+b 573
+b 12
+b 1
+b 2
+b 13
+b 1
+b 2
+b 117
+b 125
+b 127
+b 3
+b 28
+b 203
+b 216
+b 217
+b 219
+b 233
+b 216
+b 2
+b 229
+b 1
+b 54
+b 0
+b 2
+b 1
+b 14
+b 15
+b 17
+b 31
+b 82
+b 83
+b 139
+b 109
+b 111
+b 112
+b 118
+b 111
+b 2
+b 114
+b 1
+b 63
+b 10
+b 2
+b 3
+b 5
+b 7
+b 1
+b 1
+b 162
+b 6
+b 7
+b 9
+b 4
+b 40
+b 38
+b 2
+b 11
+b 2
+b 3
+b 5
+b 2
+b 2
+b 12
+b 23
+b 24
+b 23
+b 2
+b 10
+b 1
+b 17
+b 19
+b 14
+b 1
+b 68
+b 81
+b 82
+b 84
+b 86
+b 67
+b 1
+b 118
+b 118
+b 1
+b 9
+b 10
+b 9
+b 1
+b 5
+b 90
+b 98
+b 105
+b 51
+b 63
+b 64
+b 50
+b 2
+b 60
+b 1
+b 4
+b 56
+b 63
+b 64
+b 71
+b 103
+b 63
+b 1
+b 68
+b 2
+b 130
+b 60
+b 58
+b 2
+b 21
+b 22
+b 24
+b 26
+b 20
+b 1
+b 369
+b 29
+b 0
+b 2
+b 3
+b 15
+b 27
+b 77
+b 78
+b 87
+b 102
+b 75
+b 2
+b 26
+b 1
+b 97
+b 1
+b 94
+b 4
+b 5
+b 7
+b 9
+b 7
+b 1
+b 260
+b 58
+b 60
+b 61
+b 60
+b 2
+b 197
+b 194
+b 1
+b 14
+b 55
+b 56
+b 63
+b 27
+b 26
+b 1
+b 125
+b 124
+b 2
+b 12
+b 13
+b 15
+b 12
+b 2
+b 66
+b 52
+b 71
+b 78
+b 79
+b 84
+b 70
+b 2
+b 75
+b 1
+b 193
+b 195
+b 195
+b 1
+b 138
+b 139
+b 175
+b 138
+b 2
+b 171
+b 1
+b 107
+b 107
+b 1
+b 51
+b 52
+b 51
+b 1
+b 4
+b 3
+b 24
+b 21
+b 1
+b 1
+b 35
+b 37
+b 39
+b 35
+b 1
+b 22
+b 22
+b 1
+b 10
+b 11
+b 10
+b 1
+b 5
+b 5
+b 4
+b 1
+b 4
+b 5
+b 13
+b 18
+b 184
+b 183
+b 1
+b 11
+b 8
+b 1
+b 81
+b 83
+b 84
+b 86
+b 209
+b 214
+b 253
+b 254
+b 256
+b 258
+b 85
+b 86
+b 93
+b 85
+b 1
+b 90
+b 1
+b 23
+b 5
+b 2
+b 1
+b 48
+b 50
+b 46
+b 1
+b 111
+b 18
+b 27
+b 28
+b 16
+b 1
+b 26
+b 1
+b 40
+b 52
+b 54
+b 55
+b 52
+b 2
+b 37
+b 1
+b 45
+b 47
+b 49
+b 50
+b 52
+b 57
+b 66
+b 68
+b 70
+b 72
+b 73
+b 82
+b 70
+b 2
+b 37
+b 39
+b 37
+b 1
+b 21
+b 22
+b 63
+b 109
+b 108
+b 2
+b 58
+b 59
+b 57
+b 1
+b 11
+b 7
+b 12
+b 13
+b 21
+b 20
+b 1
+b 57
+b 145
+b 164
+b 172
+b 173
+b 170
+b 2
+b 142
+b 1
+b 161
+b 1
+b 1
+b 390
+b 392
+b 393
+b 395
+b 15
+b 14
+b 1
+b 214
+b 216
+b 52
+b 38
+b 40
+b 48
+b 50
+b 52
+b 89
+b 90
+b 88
+b 1
+b 69
+b 69
+b 1
+b 338
+b 36
+b 37
+b 39
+b 47
+b 246
+b 167
+b 168
+b 170
+b 166
+b 1
+b 17
+b 15
+b 1
+b 7
+b 9
+b 10
+b 7
+b 2
+b 21
+b 21
+b 1
+b 195
+b 193
+b 1
+b 52
+b 64
+b 65
+b 50
+b 1
+b 50
+b 3
+b 5
+b 7
+b 9
+b 5
+b 1
+b 62
+b 61
+b 1
+b 96
+b 3
+b 20
+b 19
+b 1
+b 19
+b 4
+b 5
+b 13
+b 134
+b 136
+b 16
+b 18
+b 16
+b 1
+b 34
+b 42
+b 40
+b 1
+b 33
+b 1
+b 21
+b 22
+b 20
+b 97
+b 96
+b 1
+b 76
+b 78
+b 91
+b 185
+b 198
+b 208
+b 183
+b 1
+b 204
+b 1
+b 409
+b 411
+b 452
+b 453
+b 473
+b 450
+b 2
+b 411
+b 1
+b 468
+b 1
+b 187
+b 188
+b 194
+b 193
+b 1
+b 36
+b 48
+b 46
+b 1
+b 109
+b 109
+b 1
+b 23
+b 25
+b 26
+b 25
+b 1
+b 0
+b 252
+b 254
+b 255
+b 257
+b 53
+b 14
+b 15
+b 23
+b 71
+b 14
+b 2
+b 19
+b 1
+b 65
+b 1
+b 165
+b 28
+b 34
+b 35
+b 42
+b 40
+b 1
+b 34
+b 36
+b 310
+b 12
+b 13
+b 12
+b 1
+b 4
+b 2
+b 2
+b 101
+b 103
+b 105
+b 106
+b 108
+b 103
+b 2
+b 7
+b 5
+b 1
+b 13
+b 19
+b 20
+b 40
+b 17
+b 2
+b 34
+b 36
+b 37
+b 34
+b 2
+b 2
+b 14
+b 13
+b 2
+b 56
+b 57
+b 59
+b 61
+b 56
+b 2
+b 14
+b 12
+b 1
+b 89
+b 90
+b 111
+b 88
+b 1
+b 110
+b 1
+b 9
+b 12
+b 11
+b 1
+b 0
+b 2
+b 4
+b 19
+b 0
+b 1
+b 62
+b 64
+b 87
+b 30
+b 32
+b 34
+b 36
+b 32
+b 1
+b 147
+b 144
+b 1
+b 80
+b 80
+b 1
+b 38
+b 37
+b 1
+b 64
+b 29
+b 95
+b 97
+b 116
+b 117
+b 114
+b 3
+b 0
+b 2
+b 0
+b 1
+b 66
+b 36
+b 38
+b 39
+b 70
+b 68
+b 1
+b 30
+b 108
+b 110
+b 112
+b 32
+b 41
+b 42
+b 71
+b 281
+b 283
+b 285
+b 287
+b 9
+b 8
+b 1
+b 12
+b 14
+b 16
+b 17
+b 45
+b 42
+b 1
+b 95
+b 18
+b 19
+b 16
+b 2
+b 8
+b 0
+b 16
+b 18
+b 20
+b 22
+b 70
+b 13
+b 14
+b 20
+b 22
+b 20
+b 1
+b 240
+b 261
+b 262
+b 304
+b 261
+b 1
+b 301
+b 1
+b 36
+b 38
+b 40
+b 42
+b 34
+b 1
+b 91
+b 89
+b 1
+b 760
+b 760
+b 1
+b 5
+b 2
+b 1
+b 118
+b 25
+b 26
+b 173
+b 50
+b 76
+b 77
+b 79
+b 81
+b 79
+b 1
+b 10
+b 70
+b 83
+b 117
+b 119
+b 106
+b 68
+b 78
+b 79
+b 81
+b 65
+b 1
+b 64
+b 16
+b 16
+b 1
+b 35
+b 54
+b 53
+b 1
+b 129
+b 154
+b 126
+b 1
+b 113
+b 7
+b 9
+b 16
+b 171
+b 173
+b 175
+b 135
+b 118
+b 117
+b 2
+b 5
+b 6
+b 40
+b 4
+b 1
+b 38
+b 25
+b 169
+b 69
+b 76
+b 78
+b 79
+b 67
+b 2
+b 76
+b 1
+b 3
+b 91
+b 92
+b 33
+b 105
+b 104
+b 1
+b 15
+b 183
+b 200
+b 181
+b 1
+b 35
+b 34
+b 1
+b 10
+b 12
+b 14
+b 15
+b 17
+b 19
+b 8
+b 1
+b 13
+b 2
+b 12
+b 32
+b 12
+b 1
+b 28
+b 1
+b 8
+b 10
+b 16
+b 17
+b 8
+b 1
+b 6
+b 57
+b 37
+b 35
+b 1
+b 9
+b 6
+b 1
+b 209
+b 207
+b 1
+b 3
+b 4
+b 6
+b 8
+b 3
+b 2
+b 47
+b 9
+b 75
+b 76
+b 91
+b 90
+b 1
+b 86
+b 88
+b 90
+b 92
+b 41
+b 47
+b 48
+b 58
+b 21
+b 23
+b 43
+b 125
+b 41
+b 2
+b 23
+b 1
+b 32
+b 42
+b 43
+b 40
+b 2
+b 11
+b 12
+b 14
+b 14
+b 1
+b 0
+b 14
+b 213
+b 6
+b 16
+b 17
+b 168
+b 7
+b 9
+b 16
+b 17
+b 5
+b 1
+b 1
+b 47
+b 55
+b 56
+b 63
+b 111
+b 142
+b 163
+b 164
+b 166
+b 168
+b 166
+b 1
+b 580
+b 581
+b 598
+b 614
+b 580
+b 1
+b 595
+b 2
+b 12
+b 69
+b 77
+b 67
+b 1
+b 36
+b 33
+b 1
+b 123
+b 124
+b 130
+b 132
+b 122
+b 1
+b 131
+b 1
+b 40
+b 86
+b 96
+b 97
+b 99
+b 94
+b 2
+b 85
+b 1
+b 57
+b 196
+b 195
+b 1
+b 78
+b 104
+b 0
+b 2
+b 4
+b 24
+b 23
+b 2
+b 4
+b 2
+b 1
+b 46
+b 245
+b 255
+b 253
+b 1
+b 244
+b 1
+b 54
+b 18
+b 17
+b 1
+b 1
+b 16
+b 17
+b 23
+b 38
+b 39
+b 49
+b 38
+b 2
+b 45
+b 45
+b 1
+b 20
+b 26
+b 24
+b 1
+b 104
+b 138
+b 139
+b 141
+b 9
+b 246
+b 279
+b 280
+b 0
+b 14
+b 3
+b 4
+b 57
+b 60
+b 57
+b 3
+b 651
+b 682
+b 650
+b 1
+b 4
+b 5
+b 5
+b 1
+b 191
+b 193
+b 195
+b 197
+b 199
+b 195
+b 1
+b 54
+b 1
+b 17
+b 448
+b 484
+b 485
+b 483
+b 1
+b 5
+b 3
+b 1
+b 75
+b 74
+b 2
+b 57
+b 58
+b 60
+b 57
+b 2
+b 4
+b 23
+b 25
+b 27
+b 47
+b 13
+b 15
+b 17
+b 48
+b 50
+b 13
+b 1
+b 98
+b 97
+b 1
+b 12
+b 13
+b 4
+b 1
+b 20
+b 6
+b 7
+b 15
+b 53
+b 14
+b 15
+b 43
+b 15
+b 178
+b 46
+b 4
+b 5
+b 36
+b 41
+b 35
+b 1
+b 37
+b 1
+b 42
+b 7
+b 238
+b 249
+b 250
+b 6
+b 2
+b 130
+b 74
+b 75
+b 77
+b 79
+b 431
+b 3
+b 9
+b 10
+b 22
+b 28
+b 86
+b 85
+b 1
+b 23
+b 36
+b 38
+b 40
+b 42
+b 43
+b 45
+b 40
+b 2
+b 90
+b 91
+b 93
+b 141
+b 6
+b 5
+b 1
+b 188
+b 187
+b 1
+b 7
+b 8
+b 10
+b 4
+b 1
+b 73
+b 75
+b 77
+b 78
+b 80
+b 82
+b 77
+b 2
+b 70
+b 1
+b 126
+b 43
+b 45
+b 46
+b 144
+b 142
+b 1
+b 105
+b 7
+b 9
+b 10
+b 21
+b 7
+b 2
+b 19
+b 1
+b 38
+b 54
+b 55
+b 65
+b 34
+b 35
+b 46
+b 27
+b 141
+b 143
+b 144
+b 212
+b 214
+b 212
+b 1
+b 257
+b 254
+b 1
+b 56
+b 0
+b 1
+b 59
+b 176
+b 178
+b 174
+b 1
+b 1
+b 3
+b 5
+b 7
+b 85
+b 86
+b 88
+b 90
+b 92
+b 82
+b 1
+b 7
+b 5
+b 1
+b 212
+b 234
+b 211
+b 1
+b 62
+b 0
+b 2
+b 157
+b 159
+b 31
+b 52
+b 53
+b 16
+b 9
+b 10
+b 8
+b 1
+b 141
+b 146
+b 138
+b 1
+b 21
+b 34
+b 35
+b 48
+b 33
+b 1
+b 47
+b 1
+b 147
+b 25
+b 56
+b 56
+b 1
+b 3
+b 4
+b 6
+b 8
+b 3
+b 2
+b 376
+b 378
+b 380
+b 381
+b 4
+b 12
+b 14
+b 9
+b 1
+b 9
+b 19
+b 17
+b 2
+b 216
+b 213
+b 1
+b 8
+b 9
+b 8
+b 2
+b 147
+b 146
+b 1
+b 109
+b 111
+b 113
+b 114
+b 111
+b 2
+b 3
+b 0
+b 1
+b 6
+b 13
+b 30
+b 31
+b 41
+b 12
+b 1
+b 32
+b 40
+b 30
+b 1
+b 15
+b 14
+b 1
+b 37
+b 14
+b 15
+b 15
+b 1
+b 77
+b 76
+b 1
+b 37
+b 38
+b 40
+b 49
+b 6
+b 48
+b 22
+b 23
+b 31
+b 20
+b 2
+b 29
+b 1
+b 48
+b 50
+b 114
+b 115
+b 112
+b 2
+b 96
+b 93
+b 1
+b 26
+b 32
+b 25
+b 1
+b 40
+b 46
+b 48
+b 43
+b 1
+b 8
+b 9
+b 8
+b 1
+b 39
+b 51
+b 52
+b 83
+b 51
+b 2
+b 36
+b 1
+b 77
+b 1
+b 14
+b 150
+b 152
+b 154
+b 154
+b 156
+b 158
+b 154
+b 1
+b 69
+b 71
+b 85
+b 69
+b 1
+b 69
+b 81
+b 82
+b 84
+b 86
+b 81
+b 2
+b 66
+b 1
+b 189
+b 190
+b 192
+b 38
+b 40
+b 38
+b 1
+b 11
+b 26
+b 32
+b 33
+b 50
+b 31
+b 1
+b 25
+b 1
+b 1
+b 54
+b 60
+b 62
+b 58
+b 1
+b 53
+b 1
+b 12
+b 28
+b 27
+b 2
+b 5
+b 18
+b 17
+b 1
+b 116
+b 130
+b 258
+b 11
+b 10
+b 2
+b 6
+b 13
+b 14
+b 12
+b 1
+b 53
+b 64
+b 65
+b 1
+b 8
+b 3
+b 5
+b 30
+b 39
+b 43
+b 44
+b 58
+b 43
+b 1
+b 55
+b 1
+b 69
+b 71
+b 73
+b 74
+b 80
+b 71
+b 2
+b 13
+b 11
+b 2
+b 384
+b 382
+b 2
+b 186
+b 199
+b 5
+b 4
+b 1
+b 472
+b 474
+b 475
+b 472
+b 2
+b 93
+b 49
+b 48
+b 1
+b 119
+b 137
+b 144
+b 143
+b 2
+b 15
+b 14
+b 1
+b 329
+b 334
+b 336
+b 337
+b 339
+b 341
+b 6
+b 135
+b 136
+b 165
+b 99
+b 101
+b 103
+b 105
+b 103
+b 1
+b 359
+b 6
+b 7
+b 9
+b 11
+b 9
+b 1
+b 24
+b 41
+b 50
+b 51
+b 40
+b 2
+b 47
+b 1
+b 48
+b 162
+b 33
+b 40
+b 41
+b 1
+b 173
+b 5
+b 4
+b 1
+b 39
+b 4
+b 5
+b 12
+b 849
+b 851
+b 852
+b 1053
+b 849
+b 2
+b 27
+b 27
+b 1
+b 4
+b 3
+b 4
+b 6
+b 8
+b 6
+b 7
+b 41
+b 6
+b 2
+b 38
+b 1
+b 36
+b 1
+b 1
+b 1
+b 14
+b 25
+b 26
+b 28
+b 36
+b 34
+b 1
+b 8
+b 9
+b 20
+b 146
+b 7
+b 1
+b 5
+b 13
+b 15
+b 17
+b 19
+b 26
+b 139
+b 149
+b 151
+b 153
+b 154
+b 149
+b 1
+b 123
+b 125
+b 126
+b 136
+b 135
+b 1
+b 125
+b 51
+b 35
+b 37
+b 39
+b 41
+b 42
+b 23
+b 25
+b 27
+b 29
+b 27
+b 1
+b 91
+b 8
+b 16
+b 70
+b 2
+b 4
+b 5
+b 7
+b 9
+b 11
+b 2
+b 2
+b 9
+b 1
+b 132
+b 133
+b 196
+b 14
+b 78
+b 78
+b 1
+b 56
+b 57
+b 59
+b 61
+b 63
+b 56
+b 2
+b 277
+b 274
+b 1
+b 78
+b 75
+b 1
+b 178
+b 179
+b 3
+b 5
+b 85
+b 11
+b 10
+b 2
+b 6
+b 36
+b 35
+b 1
+b 37
+b 38
+b 56
+b 34
+b 1
+b 40
+b 54
+b 5
+b 68
+b 69
+b 81
+b 49
+b 47
+b 1
+b 0
+b 30
+b 29
+b 1
+b 3
+b 5
+b 6
+b 0
+b 1
+b 173
+b 39
+b 41
+b 43
+b 44
+b 41
+b 2
+b 17
+b 16
+b 1
+b 171
+b 126
+b 128
+b 129
+b 126
+b 2
+b 2
+b 0
+b 1
+b 40
+b 42
+b 40
+b 1
+b 0
+b 1
+b 39
+b 139
+b 31
+b 39
+b 38
+b 1
+b 625
+b 659
+b 660
+b 672
+b 623
+b 2
+b 657
+b 1
+b 18
+b 19
+b 17
+b 19
+b 17
+b 1
+b 24
+b 96
+b 98
+b 99
+b 98
+b 1
+b 58
+b 56
+b 2
+b 173
+b 4
+b 5
+b 10
+b 70
+b 79
+b 80
+b 41
+b 320
+b 360
+b 361
+b 128
+b 34
+b 6
+b 7
+b 28
+b 172
+b 35
+b 36
+b 38
+b 78
+b 113
+b 110
+b 1
+b 249
+b 247
+b 1
+b 30
+b 31
+b 41
+b 43
+b 30
+b 1
+b 38
+b 1
+b 13
+b 175
+b 172
+b 1
+b 148
+b 0
+b 2
+b 4
+b 6
+b 68
+b 44
+b 45
+b 43
+b 1
+b 1
+b 2
+b 4
+b 1
+b 2
+b 9
+b 40
+b 56
+b 35
+b 48
+b 47
+b 1
+b 4
+b 2
+b 1
+b 68
+b 70
+b 84
+b 85
+b 87
+b 84
+b 2
+b 65
+b 1
+b 158
+b 156
+b 2
+b 14
+b 16
+b 17
+b 19
+b 39
+b 16
+b 2
+b 327
+b 328
+b 330
+b 369
+b 330
+b 1
+b 0
+b 14
+b 12
+b 1
+b 180
+b 177
+b 1
+b 24
+b 25
+b 27
+b 4
+b 35
+b 60
+b 1
+b 6
+b 0
+b 1
+b 29
+b 28
+b 1
+b 0
+b 23
+b 3
+b 90
+b 92
+b 94
+b 96
+b 97
+b 99
+b 101
+b 90
+b 1
+b 72
+b 101
+b 108
+b 117
+b 116
+b 1
+b 165
+b 187
+b 164
+b 2
+b 182
+b 1
+b 87
+b 174
+b 217
+b 218
+b 270
+b 217
+b 2
+b 172
+b 1
+b 263
+b 1
+b 52
+b 70
+b 71
+b 70
+b 2
+b 50
+b 1
+b 69
+b 66
+b 1
+b 24
+b 26
+b 27
+b 57
+b 26
+b 1
+b 54
+b 1
+b 5
+b 22
+b 23
+b 3
+b 1
+b 0
+b 7
+b 13
+b 34
+b 35
+b 37
+b 11
+b 46
+b 0
+b 53
+b 55
+b 56
+b 18
+b 24
+b 17
+b 2
+b 52
+b 21
+b 62
+b 20
+b 1
+b 46
+b 69
+b 70
+b 72
+b 79
+b 154
+b 23
+b 23
+b 1
+b 244
+b 255
+b 256
+b 258
+b 271
+b 57
+b 58
+b 66
+b 91
+b 65
+b 1
+b 87
+b 1
+b 10
+b 37
+b 38
+b 40
+b 42
+b 34
+b 1
+b 14
+b 13
+b 1
+b 22
+b 19
+b 1
+b 38
+b 39
+b 47
+b 36
+b 2
+b 5
+b 2
+b 1
+b 537
+b 539
+b 541
+b 547
+b 541
+b 1
+b 544
+b 1
+b 69
+b 71
+b 72
+b 87
+b 241
+b 372
+b 384
+b 385
+b 369
+b 1
+b 0
+b 56
+b 91
+b 92
+b 103
+b 105
+b 103
+b 1
+b 55
+b 57
+b 59
+b 60
+b 91
+b 34
+b 36
+b 38
+b 39
+b 75
+b 134
+b 141
+b 105
+b 105
+b 1
+b 125
+b 126
+b 132
+b 14
+b 170
+b 176
+b 177
+b 153
+b 70
+b 72
+b 73
+b 75
+b 77
+b 34
+b 36
+b 37
+b 39
+b 54
+b 34
+b 2
+b 10
+b 59
+b 58
+b 2
+b 235
+b 234
+b 1
+b 41
+b 43
+b 44
+b 43
+b 1
+b 15
+b 211
+b 29
+b 30
+b 104
+b 107
+b 114
+b 120
+b 121
+b 7
+b 6
+b 1
+b 4
+b 4
+b 1
+b 2
+b 18
+b 19
+b 18
+b 1
+b 9
+b 51
+b 52
+b 58
+b 97
+b 104
+b 105
+b 119
+b 121
+b 104
+b 1
+b 116
+b 1
+b 31
+b 70
+b 71
+b 14
+b 11
+b 1
+b 125
+b 142
+b 123
+b 1
+b 140
+b 1
+b 34
+b 61
+b 62
+b 64
+b 101
+b 127
+b 32
+b 2
+b 3
+b 152
+b 153
+b 162
+b 152
+b 1
+b 159
+b 2
+b 22
+b 5
+b 15
+b 26
+b 28
+b 10
+b 11
+b 23
+b 10
+b 1
+b 48
+b 47
+b 2
+b 1
+b 46
+b 51
+b 53
+b 55
+b 56
+b 1
+b 144
+b 146
+b 148
+b 149
+b 151
+b 144
+b 1
+b 5
+b 24
+b 18
+b 20
+b 18
+b 1
+b 39
+b 56
+b 53
+b 1
+b 39
+b 51
+b 52
+b 62
+b 88
+b 86
+b 2
+b 49
+b 51
+b 53
+b 55
+b 56
+b 53
+b 2
+b 31
+b 3
+b 65
+b 64
+b 1
+b 4
+b 5
+b 19
+b 47
+b 133
+b 134
+b 146
+b 26
+b 23
+b 1
+b 240
+b 256
+b 257
+b 259
+b 261
+b 24
+b 22
+b 2
+b 82
+b 100
+b 101
+b 103
+b 105
+b 100
+b 2
+b 122
+b 124
+b 43
+b 495
+b 519
+b 520
+b 527
+b 495
+b 1
+b 517
+b 1
+b 35
+b 37
+b 42
+b 23
+b 5
+b 0
+b 2
+b 67
+b 69
+b 70
+b 72
+b 74
+b 4
+b 148
+b 172
+b 173
+b 187
+b 171
+b 1
+b 186
+b 1
+b 1
+b 196
+b 198
+b 200
+b 201
+b 203
+b 221
+b 200
+b 2
+b 193
+b 1
+b 38
+b 47
+b 36
+b 2
+b 30
+b 32
+b 33
+b 35
+b 30
+b 2
+b 3
+b 10
+b 11
+b 13
+b 15
+b 13
+b 1
+b 130
+b 143
+b 153
+b 152
+b 1
+b 26
+b 70
+b 103
+b 105
+b 103
+b 1
+b 46
+b 48
+b 52
+b 53
+b 121
+b 120
+b 1
+b 10
+b 27
+b 28
+b 30
+b 7
+b 1
+b 9
+b 6
+b 1
+b 99
+b 101
+b 111
+b 117
+b 118
+b 99
+b 1
+b 9
+b 26
+b 28
+b 30
+b 31
+b 39
+b 26
+b 1
+b 168
+b 169
+b 171
+b 173
+b 171
+b 1
+b 31
+b 195
+b 0
+b 2
+b 2
+b 1
+b 138
+b 139
+b 163
+b 138
+b 2
+b 158
+b 1
+b 89
+b 97
+b 88
+b 2
+b 93
+b 1
+b 185
+b 14
+b 31
+b 20
+b 21
+b 23
+b 99
+b 24
+b 42
+b 43
+b 45
+b 41
+b 1
+b 44
+b 1
+b 46
+b 62
+b 63
+b 78
+b 80
+b 62
+b 1
+b 75
+b 1
+b 34
+b 44
+b 55
+b 57
+b 52
+b 1
+b 214
+b 215
+b 213
+b 1
+b 0
+b 110
+b 134
+b 108
+b 1
+b 131
+b 1
+b 3
+b 4
+b 19
+b 1
+b 2
+b 52
+b 54
+b 56
+b 54
+b 1
+b 163
+b 223
+b 224
+b 226
+b 251
+b 221
+b 2
+b 162
+b 1
+b 25
+b 55
+b 56
+b 89
+b 22
+b 1
+b 8
+b 5
+b 1
+b 324
+b 325
+b 327
+b 324
+b 2
+b 34
+b 36
+b 36
+b 1
+b 73
+b 75
+b 77
+b 42
+b 56
+b 57
+b 78
+b 54
+b 2
+b 42
+b 1
+b 9
+b 18
+b 20
+b 26
+b 16
+b 18
+b 19
+b 35
+b 19
+b 1
+b 90
+b 89
+b 1
+b 5
+b 7
+b 8
+b 10
+b 5
+b 2
+b 19
+b 75
+b 82
+b 156
+b 178
+b 213
+b 215
+b 216
+b 252
+b 215
+b 2
+b 175
+b 1
+b 106
+b 104
+b 2
+b 28
+b 30
+b 32
+b 32
+b 1
+b 110
+b 112
+b 112
+b 1
+b 3
+b 4
+b 19
+b 3
+b 1
+b 118
+b 47
+b 45
+b 1
+b 22
+b 9
+b 11
+b 371
+b 373
+b 374
+b 389
+b 478
+b 371
+b 2
+b 475
+b 1
+b 3
+b 89
+b 90
+b 101
+b 2
+b 2
+b 86
+b 1
+b 87
+b 95
+b 96
+b 98
+b 140
+b 93
+b 2
+b 86
+b 1
+b 136
+b 1
+b 120
+b 117
+b 1
+b 73
+b 75
+b 75
+b 1
+b 365
+b 5
+b 6
+b 19
+b 5
+b 2
+b 15
+b 1
+b 75
+b 109
+b 111
+b 113
+b 114
+b 120
+b 75
+b 1
+b 110
+b 2
+b 110
+b 71
+b 72
+b 93
+b 105
+b 71
+b 1
+b 89
+b 1
+b 196
+b 198
+b 200
+b 202
+b 203
+b 212
+b 196
+b 1
+b 166
+b 33
+b 27
+b 29
+b 5
+b 6
+b 15
+b 20
+b 123
+b 29
+b 30
+b 30
+b 1
+b 113
+b 115
+b 116
+b 118
+b 120
+b 122
+b 120
+b 1
+b 30
+b 5
+b 7
+b 9
+b 78
+b 76
+b 1
+b 108
+b 109
+b 108
+b 1
+b 16
+b 115
+b 15
+b 17
+b 19
+b 15
+b 1
+b 184
+b 189
+b 208
+b 183
+b 1
+b 8
+b 69
+b 76
+b 77
+b 84
+b 83
+b 1
+b 20
+b 28
+b 29
+b 18
+b 2
+b 27
+b 1
+b 2
+b 210
+b 228
+b 229
+b 231
+b 233
+b 231
+b 1
+b 87
+b 93
+b 0
+b 2
+b 3
+b 143
+b 79
+b 81
+b 83
+b 85
+b 79
+b 1
+b 101
+b 102
+b 157
+b 99
+b 2
+b 154
+b 1
+b 0
+b 2
+b 13
+b 9
+b 16
+b 50
+b 51
+b 53
+b 55
+b 48
+b 2
+b 15
+b 1
+b 126
+b 128
+b 130
+b 131
+b 149
+b 126
+b 1
+b 67
+b 78
+b 52
+b 62
+b 63
+b 50
+b 1
+b 6
+b 8
+b 10
+b 11
+b 3
+b 84
+b 79
+b 85
+b 151
+b 152
+b 83
+b 1
+b 78
+b 1
+b 0
+b 13
+b 18
+b 19
+b 82
+b 79
+b 81
+b 82
+b 79
+b 2
+b 2
+b 0
+b 1
+b 105
+b 119
+b 120
+b 104
+b 1
+b 45
+b 47
+b 8
+b 15
+b 21
+b 22
+b 7
+b 1
+b 11
+b 1
+b 1
+b 45
+b 62
+b 63
+b 65
+b 59
+b 1
+b 5
+b 173
+b 174
+b 185
+b 173
+b 1
+b 182
+b 1
+b 19
+b 31
+b 54
+b 55
+b 60
+b 62
+b 30
+b 1
+b 36
+b 47
+b 6
+b 5
+b 1
+b 80
+b 44
+b 51
+b 52
+b 159
+b 44
+b 1
+b 49
+b 1
+b 34
+b 43
+b 45
+b 155
+b 160
+b 4
+b 5
+b 3
+b 608
+b 606
+b 1
+b 43
+b 44
+b 43
+b 1
+b 26
+b 39
+b 37
+b 2
+b 0
+b 2
+b 4
+b 16
+b 17
+b 15
+b 1
+b 8
+b 33
+b 34
+b 70
+b 33
+b 2
+b 5
+b 1
+b 64
+b 1
+b 2
+b 28
+b 29
+b 47
+b 26
+b 2
+b 1
+b 1
+b 9
+b 6
+b 1
+b 38
+b 92
+b 130
+b 131
+b 0
+b 2
+b 148
+b 150
+b 158
+b 157
+b 1
+b 94
+b 22
+b 42
+b 43
+b 69
+b 22
+b 1
+b 40
+b 1
+b 243
+b 244
+b 246
+b 243
+b 2
+b 8
+b 14
+b 206
+b 204
+b 1
+b 175
+b 177
+b 175
+b 1
+b 497
+b 498
+b 508
+b 25
+b 22
+b 1
+b 1
+b 3
+b 5
+b 7
+b 7
+b 1
+b 214
+b 214
+b 1
+b 55
+b 56
+b 68
+b 54
+b 1
+b 45
+b 47
+b 48
+b 45
+b 2
+b 10
+b 12
+b 12
+b 1
+b 6
+b 35
+b 27
+b 29
+b 31
+b 33
+b 34
+b 36
+b 38
+b 40
+b 31
+b 2
+b 38
+b 1
+b 71
+b 80
+b 81
+b 97
+b 71
+b 1
+b 77
+b 2
+b 242
+b 243
+b 245
+b 247
+b 3
+b 9
+b 120
+b 149
+b 150
+b 161
+b 160
+b 1
+b 1
+b 71
+b 87
+b 88
+b 90
+b 85
+b 2
+b 70
+b 1
+b 65
+b 280
+b 280
+b 1
+b 80
+b 27
+b 58
+b 66
+b 67
+b 69
+b 63
+b 1
+b 110
+b 36
+b 38
+b 18
+b 52
+b 54
+b 55
+b 57
+b 15
+b 1
+b 131
+b 133
+b 135
+b 136
+b 138
+b 143
+b 131
+b 1
+b 27
+b 29
+b 30
+b 29
+b 1
+b 198
+b 215
+b 214
+b 2
+b 39
+b 38
+b 2
+b 5
+b 7
+b 8
+b 19
+b 16
+b 1
+b 3
+b 170
+b 167
+b 1
+b 9
+b 57
+b 56
+b 1
+b 7
+b 8
+b 10
+b 5
+b 2
+b 1
+b 40
+b 50
+b 51
+b 59
+b 61
+b 48
+b 2
+b 39
+b 1
+b 46
+b 45
+b 47
+b 49
+b 51
+b 53
+b 43
+b 1
+b 102
+b 113
+b 114
+b 6
+b 480
+b 482
+b 484
+b 485
+b 500
+b 478
+b 1
+b 483
+b 1
+b 49
+b 2
+b 4
+b 5
+b 7
+b 6
+b 5
+b 1
+b 77
+b 35
+b 36
+b 38
+b 67
+b 54
+b 58
+b 60
+b 62
+b 63
+b 267
+b 10
+b 12
+b 13
+b 10
+b 2
+b 39
+b 2
+b 0
+b 1
+b 172
+b 173
+b 175
+b 5
+b 2
+b 1
+b 26
+b 36
+b 38
+b 39
+b 45
+b 68
+b 105
+b 107
+b 109
+b 110
+b 0
+b 26
+b 2
+b 8
+b 16
+b 15
+b 1
+b 141
+b 143
+b 145
+b 143
+b 1
+b 78
+b 84
+b 0
+b 2
+b 3
+b 2
+b 1
+b 42
+b 41
+b 1
+b 125
+b 127
+b 135
+b 134
+b 1
+b 246
+b 252
+b 278
+b 245
+b 1
+b 8
+b 54
+b 0
+b 2
+b 253
+b 264
+b 262
+b 1
+b 245
+b 120
+b 121
+b 123
+b 120
+b 2
+b 2
+b 2
+b 1
+b 20
+b 29
+b 30
+b 20
+b 1
+b 27
+b 1
+b 24
+b 207
+b 209
+b 210
+b 212
+b 212
+b 1
+b 0
+b 17
+b 12
+b 8
+b 5
+b 1
+b 78
+b 77
+b 1
+b 84
+b 85
+b 83
+b 1
+b 28
+b 81
+b 90
+b 91
+b 102
+b 79
+b 1
+b 89
+b 1
+b 107
+b 168
+b 191
+b 192
+b 198
+b 113
+b 127
+b 113
+b 1
+b 50
+b 9
+b 23
+b 24
+b 26
+b 20
+b 1
+b 90
+b 90
+b 1
+b 13
+b 14
+b 69
+b 11
+b 2
+b 70
+b 77
+b 78
+b 91
+b 70
+b 1
+b 75
+b 1
+b 34
+b 27
+b 25
+b 1
+b 0
+b 1
+b 23
+b 20
+b 1
+b 20
+b 22
+b 20
+b 1
+b 8
+b 14
+b 43
+b 258
+b 262
+b 261
+b 1
+b 32
+b 33
+b 53
+b 32
+b 2
+b 49
+b 1
+b 246
+b 58
+b 55
+b 1
+b 12
+b 13
+b 15
+b 20
+b 11
+b 1
+b 18
+b 1
+b 107
+b 102
+b 104
+b 100
+b 1
+b 52
+b 53
+b 52
+b 1
+b 25
+b 31
+b 6
+b 7
+b 13
+b 3
+b 7
+b 71
+b 5
+b 2
+b 31
+b 33
+b 34
+b 31
+b 2
+b 44
+b 46
+b 48
+b 50
+b 47
+b 53
+b 54
+b 101
+b 114
+b 94
+b 0
+b 2
+b 9
+b 101
+b 117
+b 117
+b 1
+b 91
+b 88
+b 1
+b 92
+b 104
+b 105
+b 104
+b 2
+b 30
+b 32
+b 62
+b 64
+b 65
+b 104
+b 32
+b 1
+b 61
+b 2
+b 170
+b 225
+b 246
+b 224
+b 1
+b 242
+b 1
+b 573
+b 575
+b 583
+b 584
+b 590
+b 581
+b 2
+b 587
+b 1
+b 26
+b 25
+b 1
+b 8
+b 10
+b 378
+b 418
+b 419
+b 68
+b 70
+b 132
+b 134
+b 135
+b 153
+b 155
+b 132
+b 2
+b 8
+b 9
+b 52
+b 8
+b 1
+b 49
+b 1
+b 3
+b 12
+b 153
+b 155
+b 157
+b 159
+b 157
+b 1
+b 52
+b 53
+b 55
+b 57
+b 129
+b 127
+b 1
+b 752
+b 754
+b 756
+b 757
+b 763
+b 765
+b 756
+b 2
+b 749
+b 1
+b 114
+b 133
+b 134
+b 133
+b 2
+b 112
+b 1
+b 26
+b 28
+b 21
+b 20
+b 1
+b 7
+b 9
+b 5
+b 1
+b 10
+b 2
+b 4
+b 56
+b 55
+b 1
+b 56
+b 64
+b 65
+b 72
+b 71
+b 1
+b 57
+b 56
+b 2
+b 17
+b 7
+b 9
+b 10
+b 9
+b 1
+b 372
+b 380
+b 381
+b 2
+b 28
+b 30
+b 36
+b 38
+b 38
+b 1
+b 50
+b 55
+b 56
+b 66
+b 48
+b 1
+b 54
+b 1
+b 132
+b 140
+b 142
+b 143
+b 149
+b 137
+b 1
+b 146
+b 1
+b 82
+b 83
+b 95
+b 81
+b 1
+b 10
+b 8
+b 2
+b 254
+b 27
+b 29
+b 29
+b 1
+b 222
+b 222
+b 1
+b 41
+b 97
+b 2
+b 4
+b 6
+b 8
+b 9
+b 80
+b 81
+b 107
+b 78
+b 2
+b 8
+b 1
+b 103
+b 1
+b 16
+b 36
+b 14
+b 2
+b 1
+b 2
+b 4
+b 0
+b 1
+b 59
+b 276
+b 277
+b 274
+b 2
+b 18
+b 18
+b 1
+b 213
+b 246
+b 248
+b 250
+b 251
+b 250
+b 1
+b 38
+b 36
+b 2
+b 191
+b 88
+b 89
+b 88
+b 1
+b 61
+b 63
+b 59
+b 1
+b 98
+b 98
+b 99
+b 101
+b 103
+b 105
+b 103
+b 1
+b 58
+b 3
+b 5
+b 7
+b 5
+b 1
+b 42
+b 131
+b 133
+b 134
+b 18
+b 15
+b 1
+b 25
+b 36
+b 37
+b 55
+b 36
+b 2
+b 23
+b 1
+b 48
+b 1
+b 433
+b 434
+b 472
+b 431
+b 2
+b 470
+b 1
+b 77
+b 180
+b 201
+b 202
+b 199
+b 2
+b 37
+b 62
+b 43
+b 44
+b 60
+b 670
+b 671
+b 2
+b 62
+b 174
+b 183
+b 184
+b 182
+b 1
+b 4
+b 3
+b 2
+b 163
+b 177
+b 162
+b 1
+b 173
+b 1
+b 7
+b 12
+b 22
+b 23
+b 25
+b 11
+b 1
+b 8
+b 45
+b 47
+b 58
+b 56
+b 1
+b 47
+b 1
+b 262
+b 277
+b 276
+b 1
+b 17
+b 52
+b 210
+b 216
+b 218
+b 216
+b 1
+b 30
+b 32
+b 34
+b 36
+b 37
+b 50
+b 28
+b 1
+b 36
+b 1
+b 9
+b 9
+b 1
+b 53
+b 54
+b 73
+b 52
+b 1
+b 214
+b 213
+b 1
+b 71
+b 73
+b 74
+b 81
+b 109
+b 111
+b 112
+b 72
+b 1
+b 108
+b 2
+b 51
+b 68
+b 1
+b 2
+b 4
+b 1
+b 2
+b 50
+b 49
+b 1
+b 4
+b 5
+b 15
+b 2
+b 2
+b 24
+b 33
+b 34
+b 33
+b 2
+b 21
+b 1
+b 0
+b 2
+b 25
+b 0
+b 1
+b 129
+b 137
+b 126
+b 1
+b 14
+b 13
+b 1
+b 114
+b 119
+b 121
+b 122
+b 148
+b 46
+b 47
+b 49
+b 46
+b 2
+b 10
+b 14
+b 49
+b 123
+b 131
+b 132
+b 24
+b 23
+b 1
+b 197
+b 211
+b 212
+b 227
+b 211
+b 1
+b 224
+b 1
+b 117
+b 169
+b 14
+b 13
+b 1
+b 0
+b 4
+b 6
+b 31
+b 32
+b 29
+b 2
+b 6
+b 1
+b 283
+b 280
+b 1
+b 96
+b 4
+b 15
+b 3
+b 1
+b 25
+b 27
+b 42
+b 43
+b 45
+b 42
+b 2
+b 4
+b 58
+b 73
+b 74
+b 76
+b 72
+b 1
+b 2
+b 1
+b 195
+b 197
+b 211
+b 210
+b 1
+b 173
+b 175
+b 177
+b 178
+b 173
+b 1
+b 21
+b 229
+b 228
+b 1
+b 98
+b 102
+b 42
+b 34
+b 36
+b 54
+b 40
+b 54
+b 55
+b 72
+b 70
+b 1
+b 64
+b 70
+b 71
+b 73
+b 75
+b 63
+b 1
+b 59
+b 59
+b 1
+b 7
+b 8
+b 21
+b 7
+b 1
+b 172
+b 173
+b 185
+b 1
+b 3
+b 33
+b 39
+b 44
+b 33
+b 1
+b 36
+b 1
+b 48
+b 46
+b 2
+b 81
+b 83
+b 78
+b 1
+b 15
+b 234
+b 27
+b 34
+b 26
+b 1
+b 8
+b 3
+b 4
+b 24
+b 2
+b 1
+b 22
+b 1
+b 74
+b 6
+b 7
+b 14
+b 12
+b 1
+b 86
+b 88
+b 89
+b 113
+b 27
+b 34
+b 36
+b 37
+b 5
+b 4
+b 1
+b 112
+b 109
+b 1
+b 13
+b 2
+b 3
+b 0
+b 2
+b 0
+b 0
+b 1
+b 167
+b 169
+b 170
+b 223
+b 169
+b 2
+b 164
+b 1
+b 289
+b 293
+b 294
+b 296
+b 293
+b 2
+b 11
+b 9
+b 2
+b 30
+b 32
+b 33
+b 42
+b 44
+b 30
+b 2
+b 42
+b 1
+b 265
+b 270
+b 205
+b 195
+b 196
+b 203
+b 195
+b 1
+b 200
+b 1
+b 18
+b 17
+b 1
+b 14
+b 74
+b 280
+b 287
+b 288
+b 279
+b 2
+b 284
+b 1
+b 6
+b 155
+b 157
+b 159
+b 160
+b 159
+b 1
+b 3
+b 16
+b 13
+b 1
+b 8
+b 10
+b 11
+b 28
+b 30
+b 28
+b 1
+b 341
+b 341
+b 1
+b 32
+b 29
+b 1
+b 125
+b 8
+b 9
+b 15
+b 2
+b 176
+b 178
+b 180
+b 192
+b 178
+b 1
+b 25
+b 17
+b 18
+b 15
+b 2
+b 1
+b 0
+b 1
+b 34
+b 32
+b 1
+b 178
+b 201
+b 202
+b 201
+b 2
+b 35
+b 32
+b 1
+b 395
+b 455
+b 392
+b 1
+b 57
+b 59
+b 59
+b 1
+b 51
+b 2
+b 8
+b 9
+b 29
+b 28
+b 1
+b 151
+b 152
+b 154
+b 156
+b 148
+b 1
+b 116
+b 118
+b 120
+b 122
+b 123
+b 125
+b 127
+b 129
+b 114
+b 1
+b 121
+b 2
+b 100
+b 98
+b 2
+b 228
+b 256
+b 258
+b 260
+b 261
+b 260
+b 1
+b 20
+b 0
+b 2
+b 13
+b 11
+b 1
+b 2
+b 1
+b 108
+b 110
+b 110
+b 1
+b 13
+b 14
+b 11
+b 2
+b 24
+b 22
+b 1
+b 187
+b 57
+b 18
+b 40
+b 47
+b 48
+b 50
+b 52
+b 54
+b 46
+b 1
+b 53
+b 1
+b 256
+b 258
+b 260
+b 262
+b 262
+b 1
+b 1
+b 168
+b 218
+b 219
+b 235
+b 216
+b 2
+b 167
+b 1
+b 230
+b 1
+b 8
+b 26
+b 27
+b 7
+b 1
+b 21
+b 1
+b 25
+b 0
+b 2
+b 32
+b 34
+b 36
+b 38
+b 32
+b 1
+b 6
+b 8
+b 139
+b 3
+b 1
+b 137
+b 1
+b 74
+b 84
+b 101
+b 103
+b 73
+b 2
+b 80
+b 1
+b 94
+b 78
+b 87
+b 88
+b 77
+b 1
+b 1
+b 5
+b 10
+b 24
+b 26
+b 27
+b 33
+b 24
+b 2
+b 9
+b 1
+b 130
+b 150
+b 151
+b 153
+b 155
+b 149
+b 1
+b 154
+b 1
+b 112
+b 120
+b 121
+b 127
+b 120
+b 2
+b 18
+b 325
+b 326
+b 365
+b 0
+b 2
+b 9
+b 30
+b 31
+b 33
+b 7
+b 1
+b 31
+b 1
+b 0
+b 1
+b 169
+b 166
+b 1
+b 121
+b 123
+b 124
+b 121
+b 2
+b 0
+b 192
+b 199
+b 90
+b 32
+b 31
+b 2
+b 21
+b 87
+b 87
+b 1
+b 5
+b 47
+b 53
+b 54
+b 49
+b 48
+b 1
+b 286
+b 9
+b 6
+b 1
+b 0
+b 1
+b 31
+b 32
+b 40
+b 29
+b 2
+b 38
+b 1
+b 11
+b 9
+b 1
+b 37
+b 39
+b 41
+b 37
+b 1
+b 7
+b 9
+b 10
+b 36
+b 9
+b 1
+b 33
+b 2
+b 6
+b 17
+b 27
+b 28
+b 30
+b 25
+b 2
+b 16
+b 1
+b 175
+b 176
+b 172
+b 1
+b 40
+b 7
+b 28
+b 22
+b 24
+b 25
+b 20
+b 127
+b 129
+b 131
+b 132
+b 134
+b 136
+b 131
+b 2
+b 124
+b 1
+b 287
+b 120
+b 121
+b 123
+b 123
+b 1
+b 108
+b 107
+b 1
+b 47
+b 76
+b 77
+b 146
+b 46
+b 1
+b 111
+b 110
+b 1
+b 5
+b 6
+b 15
+b 4
+b 1
+b 35
+b 37
+b 64
+b 62
+b 1
+b 93
+b 129
+b 135
+b 136
+b 143
+b 126
+b 1
+b 31
+b 43
+b 44
+b 50
+b 21
+b 61
+b 62
+b 80
+b 19
+b 1
+b 60
+b 1
+b 67
+b 68
+b 70
+b 72
+b 70
+b 1
+b 55
+b 9
+b 21
+b 22
+b 13
+b 117
+b 116
+b 1
+b 6
+b 103
+b 207
+b 206
+b 1
+b 169
+b 199
+b 200
+b 202
+b 199
+b 2
+b 7
+b 9
+b 10
+b 24
+b 12
+b 12
+b 13
+b 15
+b 17
+b 32
+b 34
+b 46
+b 48
+b 49
+b 30
+b 1
+b 45
+b 2
+b 6
+b 8
+b 65
+b 66
+b 68
+b 4
+b 1
+b 64
+b 2
+b 608
+b 615
+b 614
+b 2
+b 13
+b 14
+b 16
+b 18
+b 12
+b 1
+b 91
+b 55
+b 57
+b 58
+b 7
+b 47
+b 52
+b 51
+b 1
+b 211
+b 49
+b 58
+b 48
+b 1
+b 63
+b 14
+b 3
+b 56
+b 78
+b 79
+b 76
+b 2
+b 56
+b 1
+b 114
+b 113
+b 1
+b 12
+b 14
+b 15
+b 17
+b 12
+b 2
+b 4
+b 2
+b 1
+b 137
+b 135
+b 2
+b 50
+b 51
+b 53
+b 49
+b 1
+b 5
+b 11
+b 10
+b 1
+b 2
+b 3
+b 103
+b 2
+b 2
+b 101
+b 1
+b 10
+b 85
+b 92
+b 93
+b 95
+b 92
+b 2
+b 8
+b 1
+b 86
+b 98
+b 99
+b 101
+b 95
+b 1
+b 99
+b 1
+b 44
+b 46
+b 47
+b 49
+b 41
+b 1
+b 3
+b 2
+b 1
+b 31
+b 54
+b 55
+b 52
+b 2
+b 30
+b 1
+b 14
+b 12
+b 1
+b 333
+b 335
+b 336
+b 347
+b 335
+b 2
+b 343
+b 1
+b 35
+b 384
+b 396
+b 397
+b 399
+b 401
+b 396
+b 2
+b 175
+b 173
+b 2
+b 173
+b 175
+b 181
+b 179
+b 1
+b 99
+b 101
+b 99
+b 1
+b 78
+b 79
+b 93
+b 13
+b 1
+b 7
+b 8
+b 19
+b 7
+b 2
+b 14
+b 1
+b 19
+b 20
+b 22
+b 24
+b 19
+b 2
+b 18
+b 18
+b 1
+b 284
+b 37
+b 39
+b 1
+b 3
+b 5
+b 7
+b 9
+b 1
+b 1
+b 80
+b 93
+b 78
+b 1
+b 91
+b 1
+b 56
+b 58
+b 59
+b 61
+b 83
+b 56
+b 2
+b 80
+b 2
+b 20
+b 119
+b 117
+b 2
+b 125
+b 257
+b 258
+b 257
+b 1
+b 184
+b 7
+b 21
+b 36
+b 37
+b 34
+b 2
+b 20
+b 1
+b 0
+b 19
+b 5
+b 21
+b 23
+b 25
+b 4
+b 2
+b 177
+b 179
+b 179
+b 1
+b 1
+b 116
+b 117
+b 128
+b 127
+b 1
+b 25
+b 54
+b 56
+b 57
+b 15
+b 13
+b 2
+b 2
+b 0
+b 1
+b 50
+b 56
+b 0
+b 2
+b 3
+b 0
+b 10
+b 12
+b 6
+b 53
+b 51
+b 2
+b 3
+b 5
+b 6
+b 8
+b 3
+b 2
+b 1
+b 129
+b 0
+b 2
+b 156
+b 157
+b 159
+b 161
+b 43
+b 2
+b 4
+b 6
+b 4
+b 1
+b 12
+b 12
+b 13
+b 20
+b 11
+b 1
+b 18
+b 1
+b 54
+b 56
+b 58
+b 60
+b 61
+b 75
+b 58
+b 2
+b 73
+b 1
+b 42
+b 12
+b 9
+b 1
+b 0
+b 14
+b 0
+b 1
+b 162
+b 160
+b 1
+b 1
+b 3
+b 178
+b 211
+b 212
+b 209
+b 2
+b 178
+b 1
+b 9
+b 30
+b 50
+b 66
+b 67
+b 84
+b 29
+b 1
+b 45
+b 1
+b 4
+b 32
+b 4
+b 6
+b 8
+b 9
+b 63
+b 86
+b 85
+b 1
+b 15
+b 14
+b 2
+b 278
+b 277
+b 1
+b 118
+b 119
+b 121
+b 132
+b 49
+b 24
+b 63
+b 70
+b 72
+b 73
+b 70
+b 2
+b 86
+b 86
+b 1
+b 46
+b 48
+b 50
+b 51
+b 57
+b 3
+b 639
+b 653
+b 654
+b 656
+b 658
+b 660
+b 637
+b 1
+b 652
+b 2
+b 23
+b 4
+b 6
+b 551
+b 557
+b 559
+b 561
+b 562
+b 551
+b 1
+b 0
+b 26
+b 28
+b 42
+b 11
+b 66
+b 68
+b 69
+b 77
+b 90
+b 92
+b 93
+b 104
+b 103
+b 1
+b 9
+b 7
+b 1
+b 32
+b 97
+b 99
+b 101
+b 102
+b 101
+b 2
+b 29
+b 1
+b 3
+b 39
+b 48
+b 49
+b 51
+b 21
+b 11
+b 12
+b 20
+b 97
+b 130
+b 129
+b 2
+b 22
+b 118
+b 119
+b 118
+b 1
+b 2
+b 201
+b 209
+b 210
+b 223
+b 209
+b 2
+b 198
+b 1
+b 217
+b 1
+b 157
+b 88
+b 96
+b 97
+b 106
+b 86
+b 1
+b 95
+b 1
+b 66
+b 76
+b 78
+b 79
+b 94
+b 66
+b 1
+b 75
+b 2
+b 18
+b 94
+b 95
+b 145
+b 91
+b 1
+b 142
+b 1
+b 24
+b 26
+b 27
+b 68
+b 9
+b 49
+b 51
+b 52
+b 112
+b 0
+b 35
+b 16
+b 17
+b 1
+b 8
+b 0
+b 1
+b 4
+b 1
+b 10
+b 19
+b 20
+b 9
+b 1
+b 4
+b 35
+b 98
+b 100
+b 95
+b 1
+b 0
+b 1
+b 7
+b 0
+b 2
+b 15
+b 19
+b 5
+b 4
+b 1
+b 98
+b 99
+b 107
+b 96
+b 2
+b 241
+b 238
+b 1
+b 153
+b 152
+b 1
+b 25
+b 33
+b 0
+b 2
+b 3
+b 36
+b 43
+b 44
+b 46
+b 68
+b 78
+b 35
+b 2
+b 40
+b 1
+b 106
+b 110
+b 111
+b 121
+b 110
+b 2
+b 117
+b 1
+b 4
+b 2
+b 1
+b 42
+b 52
+b 53
+b 52
+b 2
+b 79
+b 76
+b 1
+b 6
+b 45
+b 47
+b 48
+b 72
+b 47
+b 1
+b 69
+b 2
+b 184
+b 194
+b 195
+b 200
+b 191
+b 1
+b 197
+b 1
+b 12
+b 24
+b 33
+b 11
+b 2
+b 19
+b 1
+b 57
+b 59
+b 138
+b 138
+b 1
+b 54
+b 1
+b 160
+b 161
+b 163
+b 169
+b 159
+b 1
+b 167
+b 1
+b 122
+b 6
+b 14
+b 16
+b 16
+b 1
+b 38
+b 39
+b 46
+b 36
+b 2
+b 43
+b 1
+b 113
+b 121
+b 122
+b 124
+b 126
+b 120
+b 1
+b 112
+b 1
+b 63
+b 26
+b 10
+b 12
+b 13
+b 27
+b 7
+b 1
+b 24
+b 1
+b 29
+b 11
+b 3
+b 5
+b 3
+b 1
+b 0
+b 2
+b 3
+b 32
+b 18
+b 0
+b 2
+b 3
+b 29
+b 34
+b 42
+b 48
+b 49
+b 231
+b 233
+b 235
+b 237
+b 238
+b 240
+b 229
+b 1
+b 236
+b 2
+b 31
+b 10
+b 67
+b 0
+b 2
+b 3
+b 85
+b 175
+b 177
+b 179
+b 172
+b 1
+b 46
+b 47
+b 49
+b 22
+b 54
+b 21
+b 1
+b 49
+b 1
+b 78
+b 80
+b 75
+b 1
+b 795
+b 796
+b 795
+b 2
+b 2
+b 0
+b 1
+b 332
+b 334
+b 336
+b 337
+b 358
+b 357
+b 1
+b 0
+b 15
+b 32
+b 31
+b 2
+b 0
+b 1
+b 0
+b 2
+b 23
+b 23
+b 1
+b 71
+b 80
+b 69
+b 2
+b 28
+b 30
+b 25
+b 1
+b 7
+b 9
+b 10
+b 9
+b 1
+b 50
+b 61
+b 60
+b 1
+b 199
+b 209
+b 210
+b 227
+b 40
+b 41
+b 61
+b 7
+b 1
+b 39
+b 52
+b 53
+b 106
+b 108
+b 52
+b 2
+b 102
+b 1
+b 36
+b 1
+b 523
+b 521
+b 2
+b 281
+b 52
+b 116
+b 115
+b 1
+b 165
+b 4
+b 3
+b 1
+b 24
+b 71
+b 73
+b 75
+b 76
+b 82
+b 84
+b 82
+b 1
+b 119
+b 123
+b 142
+b 141
+b 2
+b 5
+b 4
+b 1
+b 6
+b 13
+b 14
+b 31
+b 434
+b 46
+b 47
+b 45
+b 1
+b 6
+b 4
+b 1
+b 20
+b 5
+b 7
+b 48
+b 159
+b 216
+b 218
+b 220
+b 221
+b 158
+b 2
+b 216
+b 2
+b 50
+b 64
+b 65
+b 74
+b 117
+b 131
+b 237
+b 94
+b 102
+b 103
+b 113
+b 100
+b 2
+b 93
+b 1
+b 1
+b 0
+b 1
+b 42
+b 66
+b 67
+b 69
+b 76
+b 65
+b 1
+b 32
+b 33
+b 38
+b 60
+b 86
+b 31
+b 1
+b 84
+b 2
+b 254
+b 256
+b 258
+b 271
+b 273
+b 252
+b 1
+b 267
+b 1
+b 22
+b 33
+b 34
+b 76
+b 80
+b 33
+b 2
+b 20
+b 1
+b 70
+b 1
+b 71
+b 70
+b 1
+b 112
+b 33
+b 102
+b 103
+b 19
+b 1
+b 21
+b 3
+b 4
+b 12
+b 7
+b 28
+b 37
+b 105
+b 4
+b 6
+b 8
+b 4
+b 1
+b 46
+b 46
+b 1
+b 76
+b 78
+b 79
+b 83
+b 76
+b 2
+b 70
+b 39
+b 41
+b 42
+b 44
+b 46
+b 72
+b 45
+b 47
+b 49
+b 50
+b 57
+b 302
+b 350
+b 351
+b 302
+b 1
+b 348
+b 1
+b 336
+b 94
+b 96
+b 239
+b 60
+b 58
+b 1
+b 24
+b 26
+b 27
+b 24
+b 2
+b 21
+b 0
+b 63
+b 71
+b 94
+b 95
+b 0
+b 1
+b 92
+b 1
+b 175
+b 152
+b 153
+b 190
+b 360
+b 368
+b 369
+b 373
+b 372
+b 1
+b 49
+b 48
+b 1
+b 73
+b 75
+b 77
+b 79
+b 5
+b 7
+b 9
+b 11
+b 20
+b 21
+b 11
+b 1
+b 50
+b 52
+b 54
+b 56
+b 58
+b 56
+b 1
+b 338
+b 349
+b 350
+b 352
+b 335
+b 1
+b 4
+b 100
+b 108
+b 119
+b 121
+b 98
+b 1
+b 99
+b 100
+b 119
+b 11
+b 24
+b 23
+b 1
+b 28
+b 15
+b 14
+b 1
+b 87
+b 89
+b 1
+b 10
+b 10
+b 1
+b 94
+b 111
+b 112
+b 111
+b 1
+b 28
+b 240
+b 253
+b 254
+b 251
+b 2
+b 240
+b 1
+b 96
+b 201
+b 198
+b 1
+b 36
+b 38
+b 40
+b 40
+b 1
+b 22
+b 21
+b 1
+b 68
+b 69
+b 71
+b 73
+b 258
+b 156
+b 155
+b 1
+b 25
+b 35
+b 37
+b 38
+b 50
+b 23
+b 3
+b 32
+b 2
+b 44
+b 1
+b 190
+b 28
+b 26
+b 1
+b 37
+b 42
+b 42
+b 1
+b 66
+b 23
+b 24
+b 35
+b 33
+b 1
+b 11
+b 13
+b 25
+b 31
+b 32
+b 13
+b 1
+b 21
+b 1
+b 124
+b 197
+b 199
+b 201
+b 202
+b 201
+b 2
+b 8
+b 7
+b 1
+b 117
+b 115
+b 1
+b 41
+b 42
+b 44
+b 46
+b 41
+b 2
+b 1
+b 121
+b 168
+b 170
+b 121
+b 1
+b 164
+b 1
+b 52
+b 68
+b 69
+b 68
+b 2
+b 3
+b 142
+b 144
+b 146
+b 52
+b 11
+b 10
+b 1
+b 31
+b 33
+b 34
+b 58
+b 33
+b 2
+b 53
+b 1
+b 84
+b 154
+b 155
+b 157
+b 159
+b 83
+b 1
+b 25
+b 24
+b 1
+b 5
+b 3
+b 1
+b 13
+b 9
+b 11
+b 28
+b 29
+b 29
+b 1
+b 109
+b 111
+b 112
+b 111
+b 2
+b 23
+b 13
+b 11
+b 2
+b 14
+b 12
+b 1
+b 5
+b 23
+b 24
+b 23
+b 1
+b 128
+b 130
+b 128
+b 1
+b 27
+b 28
+b 30
+b 57
+b 9
+b 10
+b 21
+b 5
+b 7
+b 9
+b 15
+b 17
+b 18
+b 15
+b 2
+b 0
+b 279
+b 8
+b 10
+b 11
+b 28
+b 29
+b 60
+b 61
+b 36
+b 38
+b 36
+b 1
+b 33
+b 16
+b 17
+b 15
+b 1
+b 82
+b 134
+b 136
+b 148
+b 149
+b 158
+b 136
+b 1
+b 146
+b 1
+b 54
+b 56
+b 54
+b 1
+b 244
+b 245
+b 301
+b 23
+b 64
+b 65
+b 40
+b 42
+b 40
+b 1
+b 82
+b 2
+b 19
+b 8
+b 10
+b 12
+b 14
+b 15
+b 14
+b 1
+b 101
+b 99
+b 2
+b 162
+b 164
+b 166
+b 167
+b 160
+b 1
+b 165
+b 1
+b 69
+b 60
+b 61
+b 63
+b 77
+b 79
+b 57
+b 55
+b 1
+b 10
+b 11
+b 21
+b 10
+b 2
+b 17
+b 1
+b 15
+b 17
+b 19
+b 20
+b 15
+b 1
+b 7
+b 126
+b 128
+b 129
+b 136
+b 126
+b 2
+b 134
+b 1
+b 40
+b 53
+b 54
+b 126
+b 53
+b 1
+b 123
+b 1
+b 7
+b 9
+b 11
+b 19
+b 20
+b 11
+b 1
+b 16
+b 3
+b 0
+b 4
+b 2
+b 1
+b 3
+b 5
+b 0
+b 1
+b 2
+b 11
+b 12
+b 18
+b 2
+b 1
+b 9
+b 1
+b 184
+b 185
+b 210
+b 21
+b 21
+b 20
+b 1
+b 128
+b 127
+b 1
+b 23
+b 25
+b 27
+b 28
+b 23
+b 1
+b 24
+b 42
+b 12
+b 13
+b 31
+b 12
+b 2
+b 26
+b 1
+b 35
+b 56
+b 80
+b 81
+b 83
+b 85
+b 83
+b 1
+b 17
+b 81
+b 88
+b 29
+b 30
+b 32
+b 26
+b 1
+b 30
+b 1
+b 24
+b 26
+b 27
+b 29
+b 24
+b 2
+b 35
+b 37
+b 37
+b 1
+b 3
+b 11
+b 111
+b 25
+b 27
+b 28
+b 4
+b 20
+b 39
+b 41
+b 26
+b 27
+b 40
+b 26
+b 1
+b 1
+b 146
+b 107
+b 4
+b 2
+b 2
+b 4
+b 5
+b 2
+b 2
+b 70
+b 67
+b 1
+b 97
+b 105
+b 110
+b 97
+b 1
+b 102
+b 1
+b 105
+b 57
+b 59
+b 6
+b 36
+b 37
+b 50
+b 35
+b 1
+b 11
+b 27
+b 9
+b 3
+b 22
+b 1
+b 173
+b 170
+b 1
+b 26
+b 33
+b 24
+b 1
+b 616
+b 47
+b 4
+b 6
+b 8
+b 4
+b 1
+b 51
+b 52
+b 59
+b 61
+b 50
+b 1
+b 5
+b 14
+b 13
+b 1
+b 14
+b 15
+b 11
+b 10
+b 1
+b 30
+b 32
+b 43
+b 44
+b 46
+b 32
+b 1
+b 42
+b 2
+b 73
+b 87
+b 88
+b 169
+b 87
+b 2
+b 70
+b 1
+b 162
+b 1
+b 17
+b 16
+b 1
+b 0
+b 2
+b 38
+b 0
+b 1
+b 111
+b 127
+b 129
+b 131
+b 132
+b 140
+b 145
+b 175
+b 176
+b 144
+b 1
+b 4
+b 22
+b 30
+b 31
+b 20
+b 1
+b 29
+b 1
+b 59
+b 8
+b 15
+b 41
+b 7
+b 2
+b 96
+b 115
+b 128
+b 95
+b 1
+b 110
+b 1
+b 4
+b 23
+b 24
+b 37
+b 23
+b 1
+b 34
+b 1
+b 14
+b 33
+b 35
+b 36
+b 13
+b 2
+b 31
+b 2
+b 7
+b 26
+b 28
+b 24
+b 1
+b 43
+b 44
+b 46
+b 48
+b 43
+b 2
+b 450
+b 450
+b 1
+b 54
+b 55
+b 80
+b 53
+b 1
+b 145
+b 158
+b 159
+b 168
+b 143
+b 1
+b 157
+b 1
+b 55
+b 63
+b 64
+b 69
+b 89
+b 54
+b 2
+b 60
+b 1
+b 26
+b 15
+b 16
+b 31
+b 77
+b 79
+b 80
+b 82
+b 0
+b 1
+b 120
+b 122
+b 3
+b 273
+b 280
+b 32
+b 77
+b 29
+b 1
+b 74
+b 1
+b 25
+b 26
+b 23
+b 2
+b 130
+b 129
+b 1
+b 29
+b 31
+b 33
+b 8
+b 9
+b 8
+b 2
+b 4
+b 59
+b 59
+b 1
+b 34
+b 117
+b 118
+b 122
+b 115
+b 2
+b 34
+b 1
+b 117
+b 1
+b 69
+b 66
+b 1
+b 5
+b 6
+b 3
+b 2
+b 3
+b 0
+b 1
+b 59
+b 61
+b 74
+b 75
+b 96
+b 95
+b 1
+b 112
+b 114
+b 112
+b 1
+b 41
+b 42
+b 44
+b 24
+b 12
+b 104
+b 105
+b 107
+b 109
+b 104
+b 2
+b 173
+b 171
+b 1
+b 65
+b 67
+b 67
+b 1
+b 62
+b 63
+b 75
+b 62
+b 1
+b 10
+b 59
+b 58
+b 1
+b 7
+b 0
+b 1
+b 373
+b 375
+b 377
+b 378
+b 390
+b 371
+b 1
+b 376
+b 1
+b 13
+b 24
+b 25
+b 31
+b 12
+b 1
+b 19
+b 1
+b 158
+b 170
+b 171
+b 158
+b 1
+b 168
+b 1
+b 130
+b 18
+b 17
+b 2
+b 40
+b 41
+b 52
+b 40
+b 1
+b 64
+b 71
+b 72
+b 74
+b 63
+b 2
+b 68
+b 1
+b 2
+b 33
+b 32
+b 1
+b 8
+b 9
+b 11
+b 135
+b 11
+b 1
+b 228
+b 274
+b 275
+b 290
+b 228
+b 1
+b 272
+b 1
+b 28
+b 25
+b 1
+b 251
+b 258
+b 259
+b 258
+b 2
+b 249
+b 1
+b 39
+b 53
+b 55
+b 53
+b 1
+b 18
+b 55
+b 56
+b 54
+b 1
+b 2
+b 0
+b 1
+b 31
+b 33
+b 100
+b 101
+b 108
+b 107
+b 1
+b 7
+b 9
+b 11
+b 12
+b 11
+b 1
+b 26
+b 849
+b 846
+b 1
+b 7
+b 68
+b 83
+b 146
+b 145
+b 1
+b 0
+b 2
+b 134
+b 162
+b 163
+b 170
+b 172
+b 160
+b 2
+b 133
+b 1
+b 168
+b 1
+b 134
+b 104
+b 104
+b 1
+b 14
+b 11
+b 1
+b 32
+b 33
+b 85
+b 30
+b 2
+b 83
+b 1
+b 6
+b 5
+b 2
+b 3
+b 13
+b 14
+b 16
+b 13
+b 2
+b 3
+b 5
+b 6
+b 16
+b 23
+b 5
+b 2
+b 12
+b 1
+b 7
+b 6
+b 1
+b 56
+b 67
+b 68
+b 67
+b 1
+b 2
+b 0
+b 1
+b 64
+b 60
+b 12
+b 20
+b 74
+b 76
+b 77
+b 88
+b 87
+b 1
+b 142
+b 141
+b 1
+b 374
+b 74
+b 90
+b 0
+b 1
+b 52
+b 57
+b 58
+b 7
+b 600
+b 602
+b 603
+b 605
+b 600
+b 2
+b 13
+b 13
+b 12
+b 2
+b 123
+b 44
+b 45
+b 52
+b 42
+b 2
+b 332
+b 334
+b 335
+b 347
+b 334
+b 1
+b 38
+b 32
+b 33
+b 54
+b 31
+b 1
+b 67
+b 3
+b 9
+b 15
+b 17
+b 19
+b 20
+b 1
+b 2
+b 15
+b 2
+b 19
+b 17
+b 1
+b 8
+b 9
+b 36
+b 106
+b 6
+b 2
+b 102
+b 1
+b 80
+b 77
+b 1
+b 35
+b 36
+b 38
+b 40
+b 42
+b 44
+b 63
+b 64
+b 88
+b 62
+b 1
+b 8
+b 10
+b 9
+b 2
+b 44
+b 305
+b 306
+b 308
+b 310
+b 305
+b 2
+b 145
+b 147
+b 169
+b 123
+b 125
+b 127
+b 128
+b 138
+b 140
+b 125
+b 2
+b 138
+b 1
+b 29
+b 35
+b 36
+b 38
+b 40
+b 42
+b 40
+b 1
+b 287
+b 292
+b 315
+b 291
+b 2
+b 311
+b 1
+b 18
+b 16
+b 1
+b 11
+b 12
+b 22
+b 11
+b 1
+b 37
+b 36
+b 1
+b 4
+b 5
+b 16
+b 5
+b 1
+b 17
+b 26
+b 2
+b 3
+b 94
+b 117
+b 119
+b 120
+b 135
+b 93
+b 2
+b 115
+b 2
+b 21
+b 23
+b 24
+b 21
+b 2
+b 19
+b 18
+b 2
+b 0
+b 8
+b 106
+b 28
+b 29
+b 43
+b 40
+b 1
+b 64
+b 126
+b 127
+b 129
+b 131
+b 129
+b 1
+b 151
+b 162
+b 163
+b 170
+b 162
+b 1
+b 167
+b 1
+b 29
+b 31
+b 33
+b 29
+b 1
+b 5
+b 16
+b 17
+b 19
+b 14
+b 2
+b 4
+b 1
+b 15
+b 1
+b 325
+b 187
+b 188
+b 196
+b 29
+b 41
+b 62
+b 63
+b 65
+b 317
+b 62
+b 2
+b 313
+b 1
+b 105
+b 38
+b 63
+b 70
+b 71
+b 73
+b 75
+b 69
+b 1
+b 74
+b 1
+b 20
+b 73
+b 20
+b 21
+b 56
+b 55
+b 1
+b 25
+b 50
+b 51
+b 48
+b 2
+b 275
+b 275
+b 1
+b 3
+b 5
+b 14
+b 16
+b 42
+b 48
+b 49
+b 46
+b 2
+b 15
+b 5
+b 7
+b 9
+b 5
+b 1
+b 267
+b 284
+b 285
+b 291
+b 293
+b 284
+b 2
+b 287
+b 1
+b 265
+b 1
+b 6
+b 8
+b 6
+b 1
+b 8
+b 9
+b 21
+b 77
+b 87
+b 88
+b 96
+b 299
+b 296
+b 1
+b 33
+b 35
+b 36
+b 38
+b 40
+b 35
+b 2
+b 21
+b 109
+b 111
+b 116
+b 127
+b 129
+b 116
+b 1
+b 9
+b 2
+b 4
+b 5
+b 17
+b 38
+b 40
+b 41
+b 49
+b 40
+b 2
+b 35
+b 1
+b 126
+b 120
+b 122
+b 123
+b 133
+b 63
+b 27
+b 0
+b 1
+b 15
+b 223
+b 245
+b 246
+b 271
+b 273
+b 244
+b 1
+b 272
+b 1
+b 397
+b 408
+b 418
+b 419
+b 421
+b 416
+b 2
+b 407
+b 1
+b 74
+b 100
+b 102
+b 21
+b 19
+b 1
+b 14
+b 15
+b 14
+b 1
+b 1
+b 86
+b 104
+b 84
+b 2
+b 1
+b 11
+b 12
+b 10
+b 1
+b 110
+b 117
+b 118
+b 131
+b 33
+b 6
+b 55
+b 64
+b 65
+b 87
+b 64
+b 1
+b 84
+b 1
+b 11
+b 13
+b 103
+b 105
+b 11
+b 1
+b 13
+b 95
+b 96
+b 98
+b 233
+b 231
+b 1
+b 28
+b 30
+b 32
+b 147
+b 73
+b 86
+b 223
+b 225
+b 223
+b 1
+b 71
+b 81
+b 82
+b 81
+b 2
+b 68
+b 1
+b 235
+b 233
+b 1
+b 9
+b 38
+b 48
+b 37
+b 1
+b 59
+b 61
+b 8
+b 9
+b 11
+b 13
+b 8
+b 2
+b 57
+b 102
+b 117
+b 118
+b 120
+b 15
+b 17
+b 28
+b 29
+b 26
+b 2
+b 17
+b 1
+b 3
+b 0
+b 1
+b 83
+b 85
+b 86
+b 95
+b 85
+b 1
+b 92
+b 1
+b 13
+b 4
+b 6
+b 8
+b 10
+b 11
+b 13
+b 15
+b 8
+b 2
+b 13
+b 1
+b 49
+b 1
+b 3
+b 5
+b 14
+b 15
+b 5
+b 1
+b 89
+b 87
+b 2
+b 0
+b 18
+b 19
+b 21
+b 16
+b 2
+b 19
+b 1
+b 221
+b 223
+b 225
+b 187
+b 186
+b 1
+b 29
+b 31
+b 38
+b 37
+b 1
+b 19
+b 0
+b 2
+b 2
+b 6
+b 7
+b 123
+b 123
+b 1
+b 3
+b 5
+b 6
+b 14
+b 5
+b 2
+b 9
+b 1
+b 112
+b 113
+b 115
+b 117
+b 119
+b 155
+b 111
+b 1
+b 118
+b 1
+b 18
+b 50
+b 48
+b 2
+b 1
+b 3
+b 3
+b 1
+b 513
+b 513
+b 1
+b 38
+b 39
+b 41
+b 47
+b 37
+b 1
+b 19
+b 16
+b 1
+b 42
+b 43
+b 45
+b 40
+b 2
+b 0
+b 2
+b 11
+b 144
+b 89
+b 91
+b 93
+b 94
+b 89
+b 1
+b 37
+b 3
+b 4
+b 6
+b 7
+b 6
+b 1
+b 23
+b 42
+b 43
+b 53
+b 21
+b 1
+b 41
+b 1
+b 9
+b 11
+b 13
+b 15
+b 9
+b 1
+b 120
+b 122
+b 124
+b 196
+b 194
+b 2
+b 117
+b 1
+b 71
+b 73
+b 74
+b 81
+b 71
+b 2
+b 41
+b 40
+b 2
+b 88
+b 90
+b 91
+b 93
+b 95
+b 120
+b 88
+b 2
+b 93
+b 1
+b 172
+b 52
+b 51
+b 2
+b 168
+b 167
+b 1
+b 178
+b 83
+b 84
+b 86
+b 129
+b 83
+b 2
+b 125
+b 1
+b 72
+b 93
+b 72
+b 1
+b 88
+b 90
+b 3
+b 64
+b 72
+b 71
+b 1
+b 22
+b 21
+b 1
+b 4
+b 2
+b 3
+b 9
+b 21
+b 23
+b 122
+b 22
+b 23
+b 39
+b 69
+b 115
+b 117
+b 113
+b 1
+b 1
+b 2
+b 4
+b 1
+b 2
+b 33
+b 4
+b 6
+b 8
+b 9
+b 13
+b 11
+b 1
+b 8
+b 103
+b 102
+b 1
+b 108
+b 106
+b 1
+b 99
+b 100
+b 110
+b 140
+b 99
+b 2
+b 106
+b 1
+b 39
+b 18
+b 1
+b 43
+b 1
+b 1
+b 0
+b 1
+b 19
+b 18
+b 1
+b 215
+b 229
+b 238
+b 239
+b 245
+b 238
+b 2
+b 39
+b 17
+b 27
+b 26
+b 1
+b 21
+b 38
+b 18
+b 1
+b 48
+b 49
+b 62
+b 47
+b 1
+b 274
+b 336
+b 338
+b 272
+b 3
+b 335
+b 1
+b 547
+b 600
+b 601
+b 607
+b 609
+b 599
+b 1
+b 608
+b 1
+b 85
+b 91
+b 89
+b 1
+b 84
+b 1
+b 2
+b 362
+b 364
+b 364
+b 1
+b 177
+b 175
+b 2
+b 95
+b 96
+b 105
+b 112
+b 95
+b 1
+b 102
+b 2
+b 8
+b 95
+b 103
+b 105
+b 103
+b 1
+b 146
+b 148
+b 146
+b 1
+b 23
+b 25
+b 27
+b 29
+b 30
+b 32
+b 179
+b 108
+b 165
+b 166
+b 168
+b 105
+b 1
+b 166
+b 1
+b 15
+b 7
+b 18
+b 7
+b 1
+b 75
+b 83
+b 85
+b 125
+b 64
+b 66
+b 64
+b 1
+b 5
+b 50
+b 70
+b 71
+b 77
+b 70
+b 2
+b 3
+b 1
+b 71
+b 1
+b 67
+b 72
+b 73
+b 117
+b 72
+b 2
+b 65
+b 1
+b 216
+b 3
+b 30
+b 31
+b 33
+b 27
+b 1
+b 31
+b 1
+b 62
+b 64
+b 65
+b 87
+b 62
+b 2
+b 4
+b 2
+b 1
+b 58
+b 74
+b 91
+b 72
+b 2
+b 71
+b 73
+b 74
+b 212
+b 214
+b 73
+b 2
+b 68
+b 1
+b 205
+b 1
+b 76
+b 171
+b 170
+b 1
+b 4
+b 5
+b 4
+b 2
+b 60
+b 59
+b 2
+b 14
+b 27
+b 28
+b 32
+b 34
+b 13
+b 1
+b 44
+b 68
+b 69
+b 78
+b 51
+b 53
+b 61
+b 62
+b 174
+b 61
+b 1
+b 173
+b 1
+b 258
+b 19
+b 25
+b 26
+b 23
+b 2
+b 18
+b 1
+b 1
+b 0
+b 2
+b 115
+b 23
+b 25
+b 20
+b 29
+b 31
+b 32
+b 34
+b 44
+b 42
+b 1
+b 41
+b 10
+b 11
+b 36
+b 2
+b 31
+b 32
+b 5
+b 173
+b 180
+b 181
+b 171
+b 1
+b 179
+b 1
+b 49
+b 34
+b 33
+b 1
+b 12
+b 14
+b 16
+b 17
+b 14
+b 2
+b 1
+b 78
+b 80
+b 81
+b 96
+b 80
+b 2
+b 75
+b 1
+b 31
+b 13
+b 15
+b 192
+b 194
+b 196
+b 189
+b 1
+b 194
+b 1
+b 3
+b 1
+b 3
+b 54
+b 60
+b 51
+b 1
+b 27
+b 37
+b 39
+b 41
+b 26
+b 25
+b 2
+b 46
+b 3
+b 2
+b 1
+b 37
+b 92
+b 145
+b 144
+b 1
+b 0
+b 19
+b 77
+b 88
+b 89
+b 124
+b 85
+b 1
+b 121
+b 1
+b 89
+b 90
+b 92
+b 120
+b 89
+b 2
+b 54
+b 51
+b 1
+b 7
+b 4
+b 1
+b 4
+b 6
+b 8
+b 9
+b 6
+b 2
+b 0
+b 0
+b 1
+b 463
+b 475
+b 477
+b 479
+b 480
+b 496
+b 498
+b 477
+b 2
+b 496
+b 1
+b 62
+b 78
+b 79
+b 116
+b 60
+b 1
+b 77
+b 1
+b 8
+b 6
+b 2
+b 4
+b 6
+b 7
+b 9
+b 6
+b 2
+b 47
+b 56
+b 64
+b 55
+b 1
+b 90
+b 57
+b 58
+b 60
+b 75
+b 57
+b 2
+b 71
+b 2
+b 407
+b 416
+b 417
+b 423
+b 416
+b 2
+b 419
+b 1
+b 136
+b 133
+b 1
+b 10
+b 18
+b 80
+b 91
+b 92
+b 89
+b 2
+b 79
+b 1
+b 232
+b 230
+b 1
+b 136
+b 134
+b 1
+b 40
+b 41
+b 56
+b 40
+b 2
+b 25
+b 27
+b 25
+b 37
+b 38
+b 35
+b 39
+b 41
+b 42
+b 33
+b 2
+b 39
+b 1
+b 283
+b 322
+b 324
+b 326
+b 327
+b 329
+b 331
+b 329
+b 1
+b 449
+b 50
+b 51
+b 83
+b 50
+b 1
+b 80
+b 2
+b 31
+b 36
+b 35
+b 1
+b 1
+b 64
+b 78
+b 64
+b 1
+b 0
+b 1
+b 0
+b 3
+b 302
+b 52
+b 53
+b 65
+b 80
+b 87
+b 78
+b 1
+b 14
+b 12
+b 1
+b 331
+b 370
+b 371
+b 379
+b 86
+b 88
+b 89
+b 1
+b 104
+b 35
+b 36
+b 52
+b 22
+b 31
+b 32
+b 49
+b 28
+b 1
+b 46
+b 1
+b 16
+b 22
+b 28
+b 16
+b 1
+b 140
+b 142
+b 142
+b 1
+b 6
+b 3
+b 1
+b 234
+b 253
+b 254
+b 267
+b 253
+b 1
+b 264
+b 1
+b 41
+b 53
+b 0
+b 2
+b 3
+b 15
+b 3
+b 1
+b 11
+b 1
+b 24
+b 45
+b 46
+b 14
+b 283
+b 281
+b 1
+b 127
+b 128
+b 126
+b 1
+b 6
+b 98
+b 99
+b 97
+b 1
+b 57
+b 59
+b 59
+b 1
+b 0
+b 2
+b 15
+b 17
+b 18
+b 31
+b 15
+b 2
+b 0
+b 2
+b 12
+b 120
+b 165
+b 166
+b 120
+b 1
+b 163
+b 1
+b 809
+b 147
+b 160
+b 161
+b 171
+b 147
+b 1
+b 158
+b 1
+b 7
+b 6
+b 1
+b 101
+b 103
+b 104
+b 106
+b 226
+b 98
+b 1
+b 7
+b 15
+b 25
+b 14
+b 1
+b 20
+b 37
+b 48
+b 46
+b 1
+b 8
+b 0
+b 2
+b 3
+b 17
+b 2
+b 2
+b 98
+b 100
+b 108
+b 27
+b 89
+b 100
+b 87
+b 2
+b 10
+b 10
+b 1
+b 116
+b 167
+b 168
+b 115
+b 2
+b 164
+b 1
+b 813
+b 50
+b 47
+b 1
+b 83
+b 80
+b 1
+b 113
+b 119
+b 120
+b 122
+b 4
+b 31
+b 33
+b 31
+b 1
+b 1
+b 9
+b 10
+b 401
+b 403
+b 404
+b 401
+b 2
+b 3
+b 2
+b 0
+b 1
+b 7
+b 53
+b 54
+b 56
+b 78
+b 53
+b 2
+b 74
+b 1
+b 36
+b 35
+b 2
+b 12
+b 9
+b 1
+b 0
+b 2
+b 3
+b 0
+b 2
+b 104
+b 197
+b 221
+b 219
+b 2
+b 197
+b 1
+b 194
+b 235
+b 237
+b 238
+b 11
+b 35
+b 42
+b 44
+b 34
+b 1
+b 43
+b 40
+b 1
+b 133
+b 132
+b 1
+b 1
+b 18
+b 20
+b 21
+b 48
+b 77
+b 4
+b 93
+b 103
+b 104
+b 106
+b 123
+b 125
+b 5
+b 7
+b 6
+b 7
+b 42
+b 44
+b 46
+b 48
+b 609
+b 620
+b 621
+b 629
+b 607
+b 1
+b 619
+b 1
+b 125
+b 8
+b 7
+b 1
+b 110
+b 26
+b 33
+b 1
+b 3
+b 32
+b 30
+b 1
+b 56
+b 58
+b 163
+b 160
+b 1
+b 12
+b 14
+b 16
+b 16
+b 1
+b 27
+b 27
+b 1
+b 13
+b 15
+b 16
+b 20
+b 13
+b 2
+b 15
+b 40
+b 42
+b 42
+b 1
+b 12
+b 1
+b 18
+b 20
+b 51
+b 211
+b 213
+b 217
+b 218
+b 220
+b 222
+b 211
+b 1
+b 29
+b 31
+b 29
+b 1
+b 51
+b 46
+b 48
+b 50
+b 51
+b 62
+b 73
+b 27
+b 30
+b 29
+b 1
+b 2
+b 37
+b 3
+b 4
+b 3
+b 1
+b 324
+b 323
+b 2
+b 79
+b 40
+b 39
+b 1
+b 17
+b 18
+b 20
+b 22
+b 15
+b 2
+b 20
+b 1
+b 32
+b 34
+b 34
+b 1
+b 9
+b 28
+b 30
+b 31
+b 30
+b 1
+b 7
+b 27
+b 26
+b 1
+b 56
+b 58
+b 70
+b 71
+b 94
+b 56
+b 1
+b 34
+b 36
+b 32
+b 1
+b 5
+b 7
+b 9
+b 10
+b 2
+b 1
+b 106
+b 103
+b 1
+b 42
+b 637
+b 648
+b 649
+b 655
+b 66
+b 68
+b 70
+b 72
+b 68
+b 1
+b 87
+b 109
+b 110
+b 116
+b 86
+b 1
+b 104
+b 1
+b 49
+b 19
+b 17
+b 1
+b 5
+b 7
+b 2
+b 1
+b 0
+b 2
+b 3
+b 30
+b 37
+b 65
+b 66
+b 36
+b 1
+b 0
+b 28
+b 30
+b 4
+b 551
+b 571
+b 572
+b 574
+b 576
+b 570
+b 1
+b 575
+b 1
+b 37
+b 45
+b 46
+b 48
+b 50
+b 43
+b 2
+b 48
+b 1
+b 15
+b 17
+b 66
+b 40
+b 21
+b 3
+b 4
+b 152
+b 154
+b 156
+b 158
+b 160
+b 156
+b 1
+b 42
+b 44
+b 46
+b 44
+b 1
+b 1
+b 49
+b 72
+b 74
+b 75
+b 129
+b 74
+b 1
+b 127
+b 1
+b 410
+b 468
+b 469
+b 562
+b 468
+b 1
+b 559
+b 2
+b 75
+b 75
+b 108
+b 72
+b 1
+b 7
+b 8
+b 10
+b 5
+b 2
+b 12
+b 20
+b 25
+b 18
+b 2
+b 11
+b 1
+b 3
+b 6
+b 8
+b 23
+b 30
+b 29
+b 2
+b 7
+b 27
+b 28
+b 30
+b 60
+b 56
+b 8
+b 9
+b 1
+b 5
+b 362
+b 364
+b 366
+b 367
+b 384
+b 366
+b 2
+b 359
+b 1
+b 378
+b 1
+b 4
+b 7
+b 8
+b 10
+b 8
+b 1
+b 24
+b 30
+b 31
+b 30
+b 1
+b 14
+b 12
+b 1
+b 292
+b 93
+b 95
+b 101
+b 102
+b 93
+b 1
+b 137
+b 139
+b 135
+b 1
+b 69
+b 71
+b 72
+b 71
+b 1
+b 12
+b 60
+b 44
+b 46
+b 47
+b 14
+b 131
+b 14
+b 16
+b 18
+b 12
+b 47
+b 48
+b 63
+b 46
+b 1
+b 11
+b 1
+b 95
+b 101
+b 102
+b 114
+b 115
+b 114
+b 1
+b 5
+b 21
+b 27
+b 3
+b 2
+b 18
+b 20
+b 22
+b 23
+b 35
+b 37
+b 22
+b 1
+b 32
+b 1
+b 100
+b 102
+b 104
+b 111
+b 102
+b 1
+b 31
+b 39
+b 40
+b 87
+b 37
+b 2
+b 85
+b 1
+b 94
+b 127
+b 92
+b 1
+b 125
+b 1
+b 1
+b 8
+b 9
+b 18
+b 20
+b 22
+b 23
+b 82
+b 20
+b 2
+b 80
+b 1
+b 2
+b 3
+b 8
+b 243
+b 3
+b 1
+b 239
+b 1
+b 7
+b 136
+b 137
+b 150
+b 134
+b 2
+b 145
+b 1
+b 35
+b 10
+b 9
+b 2
+b 90
+b 92
+b 94
+b 87
+b 1
+b 92
+b 1
+b 112
+b 114
+b 115
+b 114
+b 2
+b 2
+b 133
+b 143
+b 175
+b 176
+b 188
+b 4
+b 15
+b 16
+b 18
+b 29
+b 2
+b 1
+b 14
+b 2
+b 178
+b 3
+b 0
+b 4
+b 86
+b 9
+b 10
+b 12
+b 14
+b 8
+b 1
+b 13
+b 1
+b 1
+b 7
+b 87
+b 87
+b 1
+b 2
+b 7
+b 8
+b 7
+b 3
+b 301
+b 301
+b 1
+b 26
+b 60
+b 128
+b 130
+b 131
+b 130
+b 2
+b 57
+b 1
+b 0
+b 113
+b 115
+b 43
+b 171
+b 178
+b 170
+b 1
+b 47
+b 48
+b 56
+b 144
+b 47
+b 2
+b 52
+b 1
+b 138
+b 1
+b 15
+b 266
+b 282
+b 283
+b 317
+b 316
+b 1
+b 99
+b 274
+b 276
+b 20
+b 19
+b 27
+b 25
+b 2
+b 8
+b 233
+b 250
+b 251
+b 294
+b 233
+b 1
+b 248
+b 1
+b 18
+b 39
+b 40
+b 50
+b 39
+b 1
+b 4
+b 23
+b 24
+b 2
+b 4
+b 2
+b 1
+b 185
+b 184
+b 1
+b 16
+b 10
+b 22
+b 98
+b 109
+b 107
+b 1
+b 3
+b 4
+b 3
+b 1
+b 13
+b 15
+b 17
+b 18
+b 81
+b 17
+b 2
+b 10
+b 1
+b 74
+b 1
+b 109
+b 111
+b 215
+b 109
+b 1
+b 623
+b 625
+b 640
+b 639
+b 1
+b 9
+b 91
+b 92
+b 96
+b 89
+b 2
+b 94
+b 1
+b 1
+b 38
+b 59
+b 58
+b 1
+b 47
+b 48
+b 55
+b 25
+b 35
+b 36
+b 35
+b 2
+b 22
+b 1
+b 22
+b 125
+b 127
+b 127
+b 1
+b 2
+b 3
+b 13
+b 0
+b 2
+b 60
+b 80
+b 81
+b 103
+b 78
+b 2
+b 59
+b 1
+b 0
+b 2
+b 2
+b 1
+b 200
+b 226
+b 228
+b 230
+b 230
+b 1
+b 197
+b 1
+b 25
+b 39
+b 22
+b 1
+b 36
+b 1
+b 218
+b 258
+b 259
+b 269
+b 216
+b 1
+b 256
+b 1
+b 57
+b 48
+b 49
+b 46
+b 2
+b 156
+b 153
+b 1
+b 34
+b 36
+b 44
+b 42
+b 1
+b 72
+b 118
+b 119
+b 118
+b 3
+b 69
+b 1
+b 42
+b 42
+b 1
+b 283
+b 284
+b 286
+b 286
+b 1
+b 77
+b 32
+b 34
+b 35
+b 37
+b 51
+b 32
+b 2
+b 0
+b 5
+b 4
+b 2
+b 80
+b 82
+b 115
+b 80
+b 1
+b 130
+b 169
+b 170
+b 172
+b 5
+b 30
+b 28
+b 1
+b 57
+b 59
+b 61
+b 62
+b 59
+b 2
+b 3
+b 40
+b 38
+b 1
+b 26
+b 27
+b 63
+b 65
+b 346
+b 348
+b 350
+b 351
+b 353
+b 355
+b 357
+b 344
+b 1
+b 349
+b 2
+b 3
+b 4
+b 14
+b 2
+b 1
+b 1
+b 7
+b 0
+b 2
+b 3
+b 1
+b 22
+b 21
+b 1
+b 9
+b 11
+b 12
+b 9
+b 2
+b 4
+b 45
+b 45
+b 1
+b 5
+b 6
+b 14
+b 4
+b 1
+b 103
+b 189
+b 102
+b 1
+b 3
+b 15
+b 14
+b 1
+b 59
+b 60
+b 66
+b 59
+b 2
+b 62
+b 1
+b 5
+b 8
+b 15
+b 22
+b 23
+b 25
+b 14
+b 2
+b 19
+b 1
+b 126
+b 170
+b 171
+b 173
+b 225
+b 168
+b 2
+b 222
+b 2
+b 509
+b 516
+b 517
+b 517
+b 1
+b 18
+b 15
+b 1
+b 146
+b 144
+b 1
+b 22
+b 23
+b 22
+b 1
+b 3
+b 100
+b 102
+b 128
+b 128
+b 1
+b 51
+b 53
+b 90
+b 91
+b 51
+b 1
+b 24
+b 24
+b 1
+b 2
+b 3
+b 57
+b 2
+b 1
+b 412
+b 431
+b 433
+b 434
+b 431
+b 2
+b 412
+b 1
+b 0
+b 70
+b 72
+b 73
+b 15
+b 24
+b 4
+b 46
+b 48
+b 16
+b 18
+b 9
+b 59
+b 104
+b 128
+b 129
+b 131
+b 57
+b 2
+b 126
+b 2
+b 6
+b 12
+b 13
+b 24
+b 12
+b 1
+b 21
+b 1
+b 234
+b 72
+b 73
+b 75
+b 93
+b 70
+b 2
+b 73
+b 1
+b 45
+b 44
+b 1
+b 29
+b 8
+b 9
+b 11
+b 11
+b 1
+b 11
+b 9
+b 1
+b 154
+b 47
+b 76
+b 77
+b 79
+b 122
+b 46
+b 2
+b 73
+b 1
+b 124
+b 130
+b 131
+b 133
+b 22
+b 99
+b 6
+b 8
+b 9
+b 3
+b 31
+b 32
+b 34
+b 31
+b 2
+b 3
+b 0
+b 1
+b 102
+b 595
+b 593
+b 1
+b 147
+b 148
+b 147
+b 2
+b 11
+b 287
+b 287
+b 1
+b 51
+b 63
+b 60
+b 1
+b 34
+b 41
+b 43
+b 51
+b 33
+b 1
+b 53
+b 59
+b 60
+b 89
+b 57
+b 2
+b 86
+b 1
+b 18
+b 20
+b 21
+b 23
+b 25
+b 27
+b 19
+b 1
+b 26
+b 1
+b 56
+b 53
+b 1
+b 59
+b 138
+b 136
+b 1
+b 108
+b 123
+b 124
+b 130
+b 123
+b 2
+b 126
+b 1
+b 11
+b 9
+b 1
+b 81
+b 91
+b 92
+b 79
+b 1
+b 90
+b 1
+b 10
+b 32
+b 39
+b 40
+b 60
+b 39
+b 1
+b 30
+b 1
+b 118
+b 22
+b 23
+b 123
+b 188
+b 75
+b 76
+b 75
+b 1
+b 5
+b 5
+b 1
+b 75
+b 89
+b 90
+b 92
+b 94
+b 23
+b 98
+b 161
+b 163
+b 165
+b 166
+b 176
+b 36
+b 37
+b 39
+b 41
+b 39
+b 1
+b 33
+b 21
+b 27
+b 28
+b 30
+b 32
+b 52
+b 20
+b 2
+b 23
+b 2
+b 28
+b 1
+b 116
+b 29
+b 30
+b 32
+b 34
+b 32
+b 1
+b 6
+b 27
+b 29
+b 31
+b 33
+b 31
+b 1
+b 61
+b 69
+b 70
+b 77
+b 67
+b 2
+b 75
+b 1
+b 60
+b 1
+b 16
+b 41
+b 42
+b 52
+b 39
+b 2
+b 16
+b 1
+b 48
+b 1
+b 279
+b 8
+b 7
+b 1
+b 87
+b 33
+b 50
+b 51
+b 53
+b 71
+b 50
+b 2
+b 67
+b 2
+b 26
+b 39
+b 40
+b 54
+b 39
+b 2
+b 24
+b 1
+b 48
+b 1
+b 15
+b 17
+b 19
+b 12
+b 1
+b 3
+b 1
+b 3
+b 32
+b 34
+b 36
+b 44
+b 42
+b 3
+b 113
+b 112
+b 1
+b 14
+b 16
+b 22
+b 24
+b 26
+b 28
+b 29
+b 40
+b 24
+b 1
+b 1
+b 8
+b 16
+b 17
+b 7
+b 1
+b 4
+b 21
+b 39
+b 69
+b 374
+b 376
+b 377
+b 379
+b 438
+b 452
+b 376
+b 2
+b 433
+b 1
+b 170
+b 172
+b 12
+b 14
+b 31
+b 32
+b 42
+b 41
+b 1
+b 36
+b 114
+b 125
+b 126
+b 133
+b 111
+b 1
+b 124
+b 1
+b 163
+b 164
+b 181
+b 161
+b 2
+b 178
+b 1
+b 32
+b 29
+b 1
+b 77
+b 86
+b 87
+b 76
+b 1
+b 84
+b 67
+b 120
+b 122
+b 152
+b 172
+b 173
+b 150
+b 1
+b 171
+b 1
+b 154
+b 11
+b 13
+b 15
+b 16
+b 18
+b 20
+b 13
+b 2
+b 18
+b 1
+b 4
+b 47
+b 48
+b 47
+b 1
+b 1
+b 1
+b 20
+b 110
+b 128
+b 130
+b 3
+b 0
+b 2
+b 4
+b 51
+b 83
+b 84
+b 96
+b 84
+b 1
+b 241
+b 300
+b 307
+b 308
+b 32
+b 17
+b 27
+b 17
+b 1
+b 24
+b 1
+b 11
+b 818
+b 819
+b 818
+b 1
+b 3
+b 3
+b 1
+b 19
+b 5
+b 7
+b 8
+b 7
+b 1
+b 4
+b 2
+b 3
+b 32
+b 29
+b 1
+b 78
+b 77
+b 1
+b 58
+b 78
+b 79
+b 97
+b 78
+b 2
+b 93
+b 1
+b 30
+b 30
+b 1
+b 1
+b 2
+b 4
+b 6
+b 8
+b 0
+b 1
+b 254
+b 256
+b 257
+b 251
+b 1
+b 24
+b 22
+b 1
+b 33
+b 511
+b 513
+b 514
+b 553
+b 396
+b 395
+b 1
+b 140
+b 142
+b 183
+b 138
+b 1
+b 179
+b 1
+b 78
+b 77
+b 2
+b 6
+b 5
+b 1
+b 93
+b 99
+b 473
+b 474
+b 481
+b 472
+b 1
+b 2
+b 2
+b 1
+b 74
+b 103
+b 78
+b 80
+b 212
+b 213
+b 228
+b 210
+b 2
+b 225
+b 1
+b 15
+b 12
+b 1
+b 0
+b 0
+b 1
+b 29
+b 27
+b 1
+b 0
+b 7
+b 8
+b 71
+b 7
+b 2
+b 67
+b 1
+b 50
+b 65
+b 71
+b 72
+b 96
+b 25
+b 26
+b 28
+b 23
+b 2
+b 26
+b 1
+b 26
+b 28
+b 28
+b 1
+b 57
+b 6
+b 26
+b 75
+b 76
+b 82
+b 72
+b 1
+b 4
+b 3
+b 1
+b 79
+b 87
+b 111
+b 86
+b 2
+b 107
+b 2
+b 45
+b 47
+b 48
+b 63
+b 47
+b 1
+b 60
+b 2
+b 46
+b 13
+b 15
+b 17
+b 4
+b 29
+b 51
+b 52
+b 54
+b 27
+b 1
+b 50
+b 2
+b 67
+b 41
+b 42
+b 51
+b 41
+b 1
+b 48
+b 1
+b 87
+b 90
+b 107
+b 108
+b 126
+b 107
+b 1
+b 123
+b 1
+b 15
+b 14
+b 2
+b 23
+b 25
+b 26
+b 28
+b 23
+b 2
+b 21
+b 131
+b 130
+b 2
+b 18
+b 49
+b 50
+b 52
+b 49
+b 2
+b 117
+b 119
+b 0
+b 4
+b 38
+b 57
+b 56
+b 2
+b 31
+b 32
+b 56
+b 30
+b 1
+b 15
+b 28
+b 30
+b 36
+b 37
+b 28
+b 1
+b 106
+b 121
+b 119
+b 1
+b 0
+b 1
+b 0
+b 1
+b 0
+b 123
+b 130
+b 131
+b 133
+b 122
+b 2
+b 127
+b 1
+b 9
+b 179
+b 192
+b 189
+b 1
+b 35
+b 70
+b 22
+b 21
+b 2
+b 5
+b 286
+b 287
+b 313
+b 92
+b 506
+b 508
+b 510
+b 511
+b 530
+b 532
+b 508
+b 2
+b 530
+b 1
+b 108
+b 39
+b 40
+b 46
+b 9
+b 11
+b 13
+b 28
+b 11
+b 1
+b 36
+b 37
+b 39
+b 41
+b 43
+b 41
+b 1
+b 32
+b 12
+b 14
+b 15
+b 12
+b 2
+b 1
+b 12
+b 14
+b 16
+b 12
+b 1
+b 10
+b 108
+b 109
+b 179
+b 106
+b 2
+b 176
+b 1
+b 48
+b 45
+b 1
+b 370
+b 372
+b 402
+b 403
+b 368
+b 1
+b 401
+b 2
+b 74
+b 72
+b 1
+b 29
+b 41
+b 43
+b 39
+b 1
+b 28
+b 1
+b 77
+b 75
+b 2
+b 138
+b 139
+b 157
+b 137
+b 1
+b 28
+b 52
+b 61
+b 83
+b 60
+b 2
+b 79
+b 1
+b 31
+b 33
+b 39
+b 31
+b 1
+b 159
+b 158
+b 1
+b 33
+b 34
+b 114
+b 129
+b 130
+b 137
+b 129
+b 1
+b 134
+b 1
+b 15
+b 72
+b 71
+b 1
+b 57
+b 57
+b 1
+b 28
+b 92
+b 31
+b 30
+b 1
+b 172
+b 173
+b 175
+b 136
+b 280
+b 286
+b 288
+b 277
+b 1
+b 286
+b 1
+b 145
+b 159
+b 160
+b 158
+b 1
+b 2
+b 0
+b 1
+b 105
+b 118
+b 103
+b 1
+b 44
+b 42
+b 1
+b 404
+b 466
+b 468
+b 403
+b 1
+b 22
+b 29
+b 30
+b 20
+b 2
+b 27
+b 1
+b 86
+b 93
+b 13
+b 14
+b 73
+b 77
+b 131
+b 133
+b 135
+b 136
+b 170
+b 169
+b 1
+b 1
+b 14
+b 16
+b 18
+b 19
+b 21
+b 23
+b 18
+b 2
+b 11
+b 1
+b 50
+b 41
+b 42
+b 44
+b 41
+b 2
+b 19
+b 16
+b 1
+b 260
+b 262
+b 27
+b 26
+b 1
+b 38
+b 51
+b 52
+b 67
+b 49
+b 2
+b 65
+b 1
+b 37
+b 1
+b 81
+b 83
+b 84
+b 97
+b 83
+b 1
+b 2
+b 21
+b 27
+b 20
+b 2
+b 23
+b 2
+b 49
+b 50
+b 5
+b 0
+b 7
+b 58
+b 60
+b 62
+b 64
+b 492
+b 507
+b 508
+b 510
+b 531
+b 505
+b 2
+b 492
+b 1
+b 39
+b 44
+b 46
+b 38
+b 1
+b 18
+b 20
+b 22
+b 23
+b 16
+b 1
+b 21
+b 2
+b 16
+b 13
+b 1
+b 4
+b 38
+b 40
+b 2
+b 2
+b 40
+b 37
+b 1
+b 5
+b 7
+b 9
+b 7
+b 1
+b 153
+b 161
+b 162
+b 36
+b 35
+b 1
+b 19
+b 17
+b 1
+b 234
+b 242
+b 243
+b 255
+b 233
+b 2
+b 238
+b 2
+b 7
+b 52
+b 54
+b 56
+b 58
+b 59
+b 105
+b 56
+b 2
+b 103
+b 1
+b 52
+b 61
+b 62
+b 20
+b 3
+b 33
+b 35
+b 36
+b 49
+b 33
+b 2
+b 46
+b 2
+b 3
+b 5
+b 35
+b 36
+b 42
+b 34
+b 1
+b 289
+b 107
+b 109
+b 111
+b 112
+b 123
+b 111
+b 2
+b 104
+b 1
+b 117
+b 1
+b 178
+b 179
+b 186
+b 14
+b 21
+b 51
+b 52
+b 54
+b 56
+b 49
+b 2
+b 54
+b 1
+b 65
+b 35
+b 0
+b 2
+b 3
+b 29
+b 106
+b 112
+b 113
+b 115
+b 123
+b 425
+b 429
+b 547
+b 429
+b 1
+b 542
+b 1
+b 1
+b 2
+b 1
+b 2
+b 67
+b 67
+b 1
+b 26
+b 27
+b 36
+b 26
+b 1
+b 23
+b 10
+b 11
+b 16
+b 34
+b 15
+b 1
+b 212
+b 214
+b 216
+b 218
+b 219
+b 221
+b 223
+b 225
+b 216
+b 2
+b 223
+b 1
+b 71
+b 77
+b 78
+b 3
+b 5
+b 7
+b 3
+b 1
+b 91
+b 129
+b 130
+b 132
+b 20
+b 8
+b 15
+b 14
+b 1
+b 6
+b 117
+b 119
+b 117
+b 1
+b 28
+b 243
+b 355
+b 356
+b 369
+b 353
+b 2
+b 242
+b 1
+b 364
+b 1
+b 9
+b 22
+b 22
+b 1
+b 0
+b 1
+b 8
+b 0
+b 1
+b 33
+b 45
+b 38
+b 62
+b 8
+b 9
+b 10
+b 18
+b 20
+b 22
+b 177
+b 113
+b 115
+b 122
+b 123
+b 125
+b 113
+b 1
+b 105
+b 126
+b 127
+b 134
+b 148
+b 125
+b 1
+b 146
+b 2
+b 61
+b 68
+b 75
+b 76
+b 78
+b 107
+b 67
+b 2
+b 72
+b 1
+b 69
+b 101
+b 102
+b 101
+b 1
+b 30
+b 16
+b 14
+b 1
+b 179
+b 180
+b 194
+b 177
+b 2
+b 191
+b 1
+b 1
+b 85
+b 16
+b 17
+b 3
+b 5
+b 264
+b 270
+b 271
+b 278
+b 268
+b 2
+b 263
+b 1
+b 9
+b 249
+b 251
+b 253
+b 255
+b 256
+b 253
+b 2
+b 198
+b 196
+b 1
+b 107
+b 108
+b 150
+b 183
+b 106
+b 1
+b 181
+b 2
+b 138
+b 65
+b 71
+b 72
+b 81
+b 71
+b 1
+b 63
+b 1
+b 4
+b 2
+b 3
+b 66
+b 68
+b 69
+b 74
+b 66
+b 2
+b 71
+b 1
+b 184
+b 50
+b 60
+b 60
+b 1
+b 326
+b 1
+b 15
+b 13
+b 1
+b 1
+b 1
+b 351
+b 353
+b 355
+b 356
+b 351
+b 1
+b 47
+b 36
+b 37
+b 36
+b 1
+b 183
+b 183
+b 1
+b 3
+b 18
+b 28
+b 29
+b 31
+b 43
+b 26
+b 2
+b 40
+b 1
+b 30
+b 52
+b 58
+b 59
+b 61
+b 63
+b 56
+b 2
+b 51
+b 1
+b 59
+b 1
+b 415
+b 412
+b 1
+b 85
+b 86
+b 100
+b 83
+b 2
+b 6
+b 4
+b 1
+b 258
+b 267
+b 257
+b 1
+b 130
+b 8
+b 9
+b 20
+b 87
+b 2
+b 3
+b 16
+b 2
+b 2
+b 12
+b 1
+b 5
+b 7
+b 52
+b 53
+b 72
+b 71
+b 1
+b 140
+b 142
+b 144
+b 146
+b 147
+b 149
+b 138
+b 1
+b 145
+b 2
+b 1
+b 77
+b 76
+b 1
+b 0
+b 11
+b 12
+b 35
+b 0
+b 1
+b 9
+b 1
+b 140
+b 140
+b 1
+b 13
+b 15
+b 11
+b 1
+b 378
+b 394
+b 395
+b 378
+b 1
+b 392
+b 1
+b 66
+b 29
+b 31
+b 32
+b 29
+b 2
+b 0
+b 0
+b 1
+b 29
+b 28
+b 1
+b 12
+b 10
+b 1
+b 66
+b 67
+b 64
+b 2
+b 22
+b 19
+b 1
+b 31
+b 33
+b 35
+b 37
+b 35
+b 1
+b 77
+b 61
+b 68
+b 69
+b 79
+b 84
+b 91
+b 83
+b 1
+b 15
+b 7
+b 158
+b 171
+b 170
+b 1
+b 8
+b 10
+b 11
+b 8
+b 2
+b 1
+b 8
+b 32
+b 34
+b 35
+b 53
+b 29
+b 1
+b 50
+b 1
+b 410
+b 421
+b 422
+b 424
+b 426
+b 428
+b 420
+b 1
+b 427
+b 1
+b 130
+b 137
+b 128
+b 1
+b 17
+b 18
+b 17
+b 1
+b 310
+b 386
+b 387
+b 434
+b 127
+b 125
+b 2
+b 32
+b 46
+b 29
+b 1
+b 6
+b 10
+b 20
+b 21
+b 33
+b 20
+b 2
+b 7
+b 1
+b 26
+b 1
+b 40
+b 22
+b 23
+b 22
+b 3
+b 39
+b 39
+b 1
+b 23
+b 25
+b 26
+b 40
+b 25
+b 2
+b 36
+b 1
+b 118
+b 9
+b 24
+b 25
+b 23
+b 1
+b 0
+b 1
+b 7
+b 46
+b 47
+b 49
+b 60
+b 62
+b 45
+b 1
+b 61
+b 1
+b 26
+b 59
+b 61
+b 62
+b 12
+b 244
+b 257
+b 57
+b 68
+b 57
+b 1
+b 64
+b 1
+b 7
+b 63
+b 64
+b 150
+b 0
+b 6
+b 142
+b 148
+b 149
+b 156
+b 146
+b 2
+b 154
+b 1
+b 100
+b 102
+b 114
+b 113
+b 1
+b 364
+b 366
+b 382
+b 110
+b 111
+b 163
+b 165
+b 72
+b 3
+b 15
+b 16
+b 18
+b 15
+b 2
+b 3
+b 1
+b 1
+b 78
+b 85
+b 86
+b 75
+b 1
+b 728
+b 32
+b 33
+b 35
+b 49
+b 51
+b 32
+b 2
+b 45
+b 1
+b 86
+b 155
+b 30
+b 29
+b 2
+b 4
+b 5
+b 9
+b 11
+b 4
+b 2
+b 23
+b 25
+b 27
+b 25
+b 1
+b 115
+b 117
+b 119
+b 120
+b 250
+b 15
+b 14
+b 1
+b 42
+b 44
+b 45
+b 42
+b 2
+b 65
+b 46
+b 48
+b 3
+b 4
+b 6
+b 3
+b 2
+b 30
+b 39
+b 40
+b 22
+b 208
+b 205
+b 1
+b 22
+b 24
+b 25
+b 0
+b 0
+b 1
+b 28
+b 30
+b 32
+b 59
+b 32
+b 1
+b 56
+b 1
+b 87
+b 101
+b 102
+b 104
+b 106
+b 101
+b 2
+b 84
+b 1
+b 23
+b 31
+b 32
+b 29
+b 2
+b 22
+b 1
+b 11
+b 11
+b 9
+b 1
+b 52
+b 50
+b 1
+b 5
+b 28
+b 30
+b 3
+b 156
+b 158
+b 199
+b 200
+b 242
+b 7
+b 51
+b 52
+b 54
+b 1
+b 21
+b 32
+b 33
+b 32
+b 1
+b 16
+b 54
+b 14
+b 2
+b 16
+b 15
+b 1
+b 67
+b 18
+b 17
+b 1
+b 34
+b 87
+b 88
+b 100
+b 158
+b 87
+b 2
+b 96
+b 2
+b 31
+b 1
+b 156
+b 162
+b 184
+b 185
+b 187
+b 183
+b 1
+b 52
+b 51
+b 2
+b 129
+b 128
+b 1
+b 59
+b 65
+b 66
+b 68
+b 70
+b 71
+b 68
+b 2
+b 3
+b 125
+b 132
+b 134
+b 135
+b 9
+b 5
+b 68
+b 85
+b 87
+b 89
+b 91
+b 92
+b 87
+b 1
+b 140
+b 149
+b 148
+b 1
+b 24
+b 22
+b 123
+b 125
+b 126
+b 120
+b 1
+b 124
+b 1
+b 3
+b 37
+b 98
+b 7
+b 8
+b 27
+b 107
+b 118
+b 119
+b 128
+b 118
+b 1
+b 125
+b 1
+b 291
+b 291
+b 1
+b 64
+b 65
+b 67
+b 69
+b 71
+b 64
+b 2
+b 238
+b 250
+b 251
+b 273
+b 286
+b 249
+b 1
+b 285
+b 1
+b 265
+b 267
+b 289
+b 290
+b 289
+b 2
+b 262
+b 1
+b 191
+b 189
+b 1
+b 26
+b 28
+b 28
+b 1
+b 48
+b 1
+b 7
+b 50
+b 86
+b 251
+b 249
+b 1
+b 96
+b 97
+b 111
+b 96
+b 1
+b 4
+b 34
+b 40
+b 39
+b 1
+b 15
+b 16
+b 18
+b 40
+b 13
+b 2
+b 28
+b 30
+b 32
+b 80
+b 32
+b 1
+b 77
+b 1
+b 192
+b 201
+b 108
+b 107
+b 1
+b 12
+b 26
+b 27
+b 78
+b 12
+b 1
+b 23
+b 2
+b 74
+b 1
+b 389
+b 389
+b 1
+b 86
+b 1
+b 2
+b 0
+b 1
+b 25
+b 26
+b 28
+b 25
+b 2
+b 13
+b 21
+b 22
+b 24
+b 24
+b 1
+b 25
+b 2
+b 3
+b 16
+b 0
+b 2
+b 2
+b 45
+b 136
+b 178
+b 95
+b 101
+b 102
+b 104
+b 106
+b 104
+b 1
+b 3
+b 2
+b 17
+b 16
+b 1
+b 45
+b 55
+b 56
+b 77
+b 53
+b 2
+b 52
+b 54
+b 56
+b 57
+b 82
+b 84
+b 54
+b 2
+b 82
+b 1
+b 429
+b 431
+b 4
+b 18
+b 31
+b 16
+b 2
+b 12
+b 13
+b 11
+b 1
+b 89
+b 91
+b 93
+b 94
+b 115
+b 93
+b 1
+b 112
+b 2
+b 45
+b 84
+b 86
+b 114
+b 86
+b 1
+b 25
+b 28
+b 30
+b 30
+b 1
+b 1
+b 10
+b 11
+b 0
+b 2
+b 849
+b 872
+b 874
+b 872
+b 1
+b 48
+b 50
+b 27
+b 25
+b 2
+b 98
+b 190
+b 0
+b 7
+b 8
+b 57
+b 58
+b 56
+b 1
+b 91
+b 189
+b 187
+b 1
+b 49
+b 72
+b 73
+b 70
+b 2
+b 2
+b 0
+b 1
+b 68
+b 0
+b 9
+b 17
+b 18
+b 16
+b 1
+b 16
+b 26
+b 73
+b 25
+b 1
+b 133
+b 135
+b 146
+b 147
+b 149
+b 151
+b 133
+b 1
+b 22
+b 11
+b 12
+b 30
+b 10
+b 1
+b 1
+b 91
+b 97
+b 98
+b 109
+b 43
+b 51
+b 69
+b 69
+b 1
+b 40
+b 1
+b 221
+b 222
+b 60
+b 13
+b 0
+b 40
+b 80
+b 96
+b 97
+b 99
+b 38
+b 2
+b 94
+b 2
+b 84
+b 92
+b 93
+b 95
+b 148
+b 7
+b 8
+b 10
+b 12
+b 14
+b 35
+b 312
+b 310
+b 2
+b 1
+b 97
+b 103
+b 101
+b 2
+b 48
+b 165
+b 172
+b 164
+b 1
+b 168
+b 1
+b 20
+b 21
+b 23
+b 1
+b 173
+b 181
+b 192
+b 190
+b 2
+b 12
+b 14
+b 16
+b 17
+b 12
+b 1
+b 28
+b 64
+b 98
+b 117
+b 118
+b 115
+b 2
+b 95
+b 1
+b 2
+b 90
+b 91
+b 93
+b 88
+b 2
+b 91
+b 1
+b 24
+b 1
+b 1
+b 9
+b 12
+b 54
+b 10
+b 1
+b 52
+b 2
+b 0
+b 2
+b 3
+b 7
+b 0
+b 2
+b 63
+b 21
+b 22
+b 37
+b 20
+b 1
+b 0
+b 7
+b 114
+b 5
+b 18
+b 4
+b 2
+b 14
+b 1
+b 169
+b 167
+b 2
+b 55
+b 57
+b 58
+b 60
+b 57
+b 2
+b 39
+b 68
+b 69
+b 71
+b 68
+b 2
+b 37
+b 1
+b 8
+b 6
+b 3
+b 33
+b 44
+b 45
+b 57
+b 42
+b 2
+b 33
+b 1
+b 52
+b 1
+b 36
+b 83
+b 81
+b 1
+b 1
+b 0
+b 1
+b 56
+b 63
+b 6
+b 4
+b 1
+b 25
+b 26
+b 28
+b 30
+b 25
+b 2
+b 314
+b 36
+b 37
+b 104
+b 74
+b 72
+b 2
+b 7
+b 4
+b 5
+b 4
+b 1
+b 39
+b 66
+b 68
+b 70
+b 72
+b 73
+b 85
+b 38
+b 2
+b 68
+b 2
+b 154
+b 172
+b 173
+b 182
+b 198
+b 172
+b 1
+b 179
+b 2
+b 12
+b 14
+b 36
+b 37
+b 1
+b 111
+b 122
+b 109
+b 1
+b 0
+b 2
+b 3
+b 5
+b 7
+b 2
+b 2
+b 107
+b 109
+b 111
+b 112
+b 111
+b 2
+b 48
+b 50
+b 46
+b 1
+b 35
+b 55
+b 56
+b 58
+b 35
+b 1
+b 52
+b 2
+b 55
+b 1
+b 276
+b 38
+b 36
+b 1
+b 17
+b 18
+b 37
+b 15
+b 2
+b 34
+b 1
+b 15
+b 13
+b 1
+b 16
+b 17
+b 23
+b 16
+b 2
+b 19
+b 1
+b 12
+b 44
+b 50
+b 51
+b 53
+b 50
+b 2
+b 4
+b 7
+b 60
+b 61
+b 80
+b 82
+b 60
+b 1
+b 77
+b 1
+b 20
+b 21
+b 32
+b 19
+b 1
+b 3
+b 3
+b 1
+b 270
+b 269
+b 1
+b 93
+b 95
+b 96
+b 114
+b 60
+b 61
+b 71
+b 95
+b 60
+b 2
+b 67
+b 1
+b 89
+b 1
+b 43
+b 74
+b 75
+b 271
+b 27
+b 26
+b 1
+b 43
+b 60
+b 61
+b 60
+b 2
+b 41
+b 1
+b 171
+b 175
+b 169
+b 1
+b 69
+b 80
+b 66
+b 1
+b 1
+b 16
+b 14
+b 2
+b 23
+b 24
+b 38
+b 21
+b 2
+b 1
+b 0
+b 1
+b 42
+b 39
+b 1
+b 1
+b 0
+b 2
+b 107
+b 108
+b 107
+b 1
+b 146
+b 24
+b 71
+b 70
+b 2
+b 108
+b 110
+b 111
+b 115
+b 0
+b 20
+b 30
+b 31
+b 33
+b 35
+b 30
+b 2
+b 52
+b 49
+b 1
+b 196
+b 197
+b 194
+b 2
+b 39
+b 68
+b 67
+b 2
+b 12
+b 250
+b 274
+b 276
+b 277
+b 279
+b 248
+b 2
+b 274
+b 2
+b 75
+b 17
+b 26
+b 30
+b 26
+b 1
+b 27
+b 1
+b 21
+b 0
+b 2
+b 2
+b 3
+b 2
+b 2
+b 3
+b 3
+b 1
+b 59
+b 23
+b 42
+b 38
+b 40
+b 41
+b 40
+b 1
+b 4
+b 2
+b 1
+b 52
+b 53
+b 60
+b 52
+b 1
+b 57
+b 1
+b 16
+b 49
+b 59
+b 60
+b 56
+b 1
+b 6
+b 52
+b 51
+b 2
+b 3
+b 23
+b 24
+b 64
+b 71
+b 111
+b 132
+b 132
+b 1
+b 53
+b 54
+b 61
+b 53
+b 1
+b 58
+b 2
+b 16
+b 9
+b 7
+b 1
+b 15
+b 7
+b 7
+b 1
+b 67
+b 69
+b 86
+b 88
+b 89
+b 67
+b 1
+b 1
+b 131
+b 143
+b 144
+b 143
+b 1
+b 109
+b 109
+b 1
+b 39
+b 49
+b 51
+b 39
+b 1
+b 221
+b 247
+b 249
+b 250
+b 220
+b 1
+b 4
+b 235
+b 237
+b 238
+b 240
+b 242
+b 235
+b 2
+b 99
+b 97
+b 3
+b 32
+b 33
+b 35
+b 31
+b 1
+b 53
+b 43
+b 58
+b 59
+b 87
+b 86
+b 1
+b 10
+b 9
+b 1
+b 173
+b 172
+b 2
+b 13
+b 15
+b 16
+b 18
+b 20
+b 15
+b 2
+b 165
+b 167
+b 191
+b 167
+b 1
+b 188
+b 1
+b 2
+b 877
+b 897
+b 898
+b 897
+b 1
+b 7
+b 5
+b 1
+b 278
+b 280
+b 281
+b 293
+b 278
+b 2
+b 21
+b 20
+b 2
+b 104
+b 123
+b 125
+b 103
+b 1
+b 224
+b 224
+b 1
+b 228
+b 233
+b 234
+b 232
+b 1
+b 1
+b 123
+b 108
+b 109
+b 126
+b 123
+b 1
+b 86
+b 88
+b 84
+b 1
+b 3
+b 5
+b 7
+b 8
+b 5
+b 2
+b 46
+b 62
+b 63
+b 62
+b 1
+b 11
+b 10
+b 2
+b 106
+b 105
+b 1
+b 25
+b 26
+b 22
+b 1
+b 13
+b 2
+b 4
+b 6
+b 110
+b 2
+b 1
+b 0
+b 2
+b 29
+b 35
+b 36
+b 44
+b 75
+b 33
+b 2
+b 28
+b 1
+b 39
+b 1
+b 179
+b 187
+b 188
+b 199
+b 14
+b 13
+b 1
+b 4
+b 5
+b 13
+b 61
+b 63
+b 64
+b 75
+b 77
+b 75
+b 1
+b 171
+b 182
+b 183
+b 169
+b 1
+b 181
+b 1
+b 75
+b 59
+b 60
+b 62
+b 64
+b 74
+b 58
+b 1
+b 71
+b 3
+b 5
+b 54
+b 52
+b 3
+b 76
+b 78
+b 73
+b 1
+b 8
+b 5
+b 1
+b 54
+b 56
+b 57
+b 65
+b 67
+b 56
+b 1
+b 62
+b 1
+b 26
+b 32
+b 38
+b 36
+b 3
+b 24
+b 1
+b 14
+b 16
+b 14
+b 31
+b 30
+b 1
+b 281
+b 104
+b 6
+b 26
+b 28
+b 35
+b 58
+b 56
+b 1
+b 35
+b 1
+b 17
+b 49
+b 50
+b 52
+b 54
+b 56
+b 16
+b 2
+b 47
+b 2
+b 50
+b 24
+b 25
+b 24
+b 2
+b 29
+b 29
+b 1
+b 34
+b 32
+b 1
+b 2
+b 3
+b 10
+b 0
+b 2
+b 8
+b 1
+b 33
+b 1
+b 1
+b 1
+b 43
+b 56
+b 41
+b 2
+b 52
+b 79
+b 77
+b 1
+b 7
+b 8
+b 5
+b 2
+b 1
+b 0
+b 1
+b 23
+b 25
+b 27
+b 28
+b 36
+b 21
+b 1
+b 26
+b 2
+b 72
+b 78
+b 76
+b 1
+b 16
+b 38
+b 37
+b 1
+b 471
+b 38
+b 62
+b 36
+b 3
+b 57
+b 1
+b 0
+b 1
+b 0
+b 2
+b 20
+b 32
+b 34
+b 35
+b 1
+b 24
+b 26
+b 67
+b 77
+b 200
+b 202
+b 204
+b 206
+b 207
+b 214
+b 204
+b 2
+b 212
+b 1
+b 787
+b 979
+b 980
+b 785
+b 1
+b 977
+b 1
+b 2
+b 82
+b 3
+b 10
+b 2
+b 1
+b 6
+b 5
+b 2
+b 11
+b 18
+b 9
+b 1
+b 10
+b 11
+b 13
+b 15
+b 8
+b 2
+b 13
+b 1
+b 113
+b 111
+b 2
+b 7
+b 6
+b 27
+b 39
+b 40
+b 48
+b 39
+b 2
+b 6
+b 4
+b 1
+b 295
+b 297
+b 298
+b 381
+b 383
+b 381
+b 1
+b 46
+b 61
+b 74
+b 76
+b 77
+b 79
+b 81
+b 74
+b 2
+b 79
+b 1
+b 52
+b 5
+b 165
+b 115
+b 116
+b 150
+b 170
+b 8
+b 10
+b 10
+b 1
+b 0
+b 1
+b 24
+b 0
+b 2
+b 20
+b 1
+b 21
+b 19
+b 1
+b 8
+b 10
+b 11
+b 8
+b 2
+b 0
+b 38
+b 35
+b 1
+b 50
+b 51
+b 50
+b 2
+b 0
+b 2
+b 11
+b 0
+b 1
+b 59
+b 68
+b 69
+b 80
+b 59
+b 1
+b 66
+b 1
+b 26
+b 36
+b 38
+b 41
+b 79
+b 80
+b 86
+b 77
+b 2
+b 41
+b 1
+b 164
+b 166
+b 6
+b 7
+b 9
+b 4
+b 2
+b 7
+b 1
+b 4
+b 17
+b 11
+b 12
+b 9
+b 16
+b 26
+b 14
+b 2
+b 149
+b 146
+b 1
+b 32
+b 43
+b 42
+b 1
+b 22
+b 23
+b 20
+b 2
+b 5
+b 3
+b 2
+b 16
+b 23
+b 15
+b 1
+b 9
+b 10
+b 17
+b 138
+b 0
+b 505
+b 504
+b 1
+b 372
+b 373
+b 381
+b 383
+b 370
+b 2
+b 3
+b 57
+b 58
+b 71
+b 48
+b 47
+b 1
+b 43
+b 47
+b 64
+b 72
+b 73
+b 63
+b 2
+b 68
+b 2
+b 40
+b 1
+b 829
+b 842
+b 843
+b 855
+b 840
+b 2
+b 853
+b 1
+b 5
+b 14
+b 15
+b 14
+b 2
+b 2
+b 1
+b 10
+b 10
+b 1
+b 4
+b 10
+b 4
+b 5
+b 7
+b 9
+b 3
+b 1
+b 8
+b 1
+b 90
+b 33
+b 7
+b 8
+b 4
+b 1
+b 24
+b 26
+b 28
+b 29
+b 52
+b 95
+b 28
+b 2
+b 48
+b 2
+b 19
+b 27
+b 28
+b 27
+b 1
+b 18
+b 16
+b 2
+b 12
+b 21
+b 37
+b 79
+b 110
+b 36
+b 2
+b 75
+b 1
+b 344
+b 70
+b 69
+b 1
+b 3
+b 4
+b 17
+b 2
+b 1
+b 205
+b 254
+b 203
+b 1
+b 25
+b 26
+b 49
+b 23
+b 2
+b 46
+b 1
+b 131
+b 132
+b 147
+b 149
+b 131
+b 1
+b 144
+b 1
+b 1
+b 145
+b 147
+b 149
+b 151
+b 152
+b 165
+b 143
+b 1
+b 150
+b 2
+b 159
+b 1
+b 134
+b 18
+b 19
+b 25
+b 18
+b 2
+b 76
+b 82
+b 83
+b 94
+b 2
+b 4
+b 5
+b 5
+b 1
+b 29
+b 1
+b 94
+b 100
+b 112
+b 135
+b 133
+b 3
+b 92
+b 1
+b 109
+b 1
+b 8
+b 6
+b 1
+b 8
+b 6
+b 7
+b 15
+b 6
+b 2
+b 7
+b 38
+b 39
+b 6
+b 76
+b 97
+b 96
+b 1
+b 27
+b 25
+b 2
+b 17
+b 116
+b 117
+b 119
+b 121
+b 116
+b 2
+b 247
+b 248
+b 250
+b 252
+b 254
+b 246
+b 1
+b 253
+b 1
+b 3
+b 29
+b 31
+b 69
+b 3
+b 3
+b 1
+b 2
+b 4
+b 6
+b 7
+b 6
+b 3
+b 47
+b 53
+b 54
+b 53
+b 2
+b 44
+b 1
+b 45
+b 496
+b 519
+b 270
+b 187
+b 188
+b 199
+b 187
+b 2
+b 195
+b 1
+b 18
+b 1
+b 9
+b 119
+b 24
+b 40
+b 42
+b 36
+b 63
+b 64
+b 66
+b 68
+b 34
+b 1
+b 62
+b 2
+b 37
+b 5
+b 13
+b 20
+b 21
+b 34
+b 11
+b 1
+b 19
+b 2
+b 28
+b 1
+b 45
+b 16
+b 25
+b 26
+b 14
+b 1
+b 24
+b 1
+b 210
+b 52
+b 53
+b 14
+b 13
+b 1
+b 1
+b 7
+b 16
+b 42
+b 291
+b 323
+b 290
+b 1
+b 318
+b 1
+b 93
+b 95
+b 96
+b 171
+b 208
+b 214
+b 215
+b 207
+b 2
+b 210
+b 2
+b 170
+b 1
+b 10
+b 62
+b 61
+b 1
+b 19
+b 20
+b 20
+b 1
+b 29
+b 8
+b 9
+b 55
+b 6
+b 2
+b 52
+b 1
+b 41
+b 43
+b 128
+b 129
+b 138
+b 3
+b 182
+b 180
+b 1
+b 69
+b 70
+b 67
+b 2
+b 62
+b 59
+b 1
+b 30
+b 76
+b 78
+b 79
+b 76
+b 2
+b 65
+b 62
+b 1
+b 2
+b 1
+b 2
+b 2
+b 4
+b 79
+b 84
+b 102
+b 83
+b 2
+b 98
+b 1
+b 203
+b 2
+b 4
+b 6
+b 8
+b 10
+b 4
+b 1
+b 73
+b 75
+b 71
+b 1
+b 4
+b 5
+b 7
+b 9
+b 4
+b 2
+b 25
+b 69
+b 74
+b 75
+b 77
+b 23
+b 1
+b 73
+b 2
+b 21
+b 38
+b 39
+b 38
+b 2
+b 18
+b 1
+b 6
+b 8
+b 4
+b 1
+b 88
+b 87
+b 1
+b 55
+b 57
+b 58
+b 57
+b 1
+b 84
+b 75
+b 76
+b 75
+b 2
+b 44
+b 131
+b 130
+b 1
+b 31
+b 0
+b 2
+b 2
+b 1
+b 46
+b 48
+b 48
+b 1
+b 144
+b 37
+b 66
+b 140
+b 64
+b 3
+b 36
+b 1
+b 36
+b 6
+b 3
+b 1
+b 4
+b 6
+b 7
+b 6
+b 1
+b 179
+b 181
+b 182
+b 181
+b 2
+b 176
+b 1
+b 23
+b 22
+b 1
+b 93
+b 8
+b 10
+b 10
+b 1
+b 1
+b 2
+b 0
+b 1
+b 105
+b 127
+b 125
+b 1
+b 0
+b 1
+b 14
+b 0
+b 2
+b 10
+b 12
+b 14
+b 23
+b 111
+b 11
+b 12
+b 132
+b 22
+b 47
+b 869
+b 876
+b 878
+b 869
+b 1
+b 47
+b 133
+b 134
+b 136
+b 138
+b 46
+b 2
+b 130
+b 1
+b 12
+b 14
+b 55
+b 3
+b 4
+b 17
+b 0
+b 1
+b 27
+b 29
+b 0
+b 2
+b 23
+b 1
+b 1
+b 0
+b 1
+b 49
+b 51
+b 53
+b 54
+b 64
+b 51
+b 2
+b 62
+b 1
+b 5
+b 4
+b 6
+b 7
+b 2
+b 1
+b 5
+b 1
+b 44
+b 46
+b 1
+b 65
+b 73
+b 72
+b 1
+b 231
+b 229
+b 1
+b 26
+b 28
+b 26
+b 1
+b 70
+b 8
+b 7
+b 1
+b 25
+b 26
+b 28
+b 25
+b 2
+b 55
+b 63
+b 64
+b 71
+b 63
+b 1
+b 68
+b 2
+b 36
+b 147
+b 6
+b 7
+b 7
+b 6
+b 1
+b 20
+b 18
+b 1
+b 35
+b 36
+b 52
+b 34
+b 1
+b 11
+b 10
+b 2
+b 380
+b 382
+b 384
+b 386
+b 388
+b 10
+b 12
+b 30
+b 31
+b 43
+b 8
+b 1
+b 29
+b 2
+b 37
+b 1
+b 110
+b 111
+b 122
+b 136
+b 110
+b 2
+b 118
+b 1
+b 93
+b 91
+b 2
+b 38
+b 48
+b 49
+b 57
+b 48
+b 1
+b 54
+b 2
+b 3
+b 79
+b 92
+b 93
+b 92
+b 1
+b 94
+b 94
+b 1
+b 14
+b 16
+b 18
+b 19
+b 16
+b 2
+b 0
+b 2
+b 36
+b 175
+b 177
+b 178
+b 193
+b 192
+b 1
+b 46
+b 11
+b 13
+b 22
+b 23
+b 66
+b 2
+b 4
+b 155
+b 157
+b 153
+b 1
+b 156
+b 157
+b 159
+b 155
+b 1
+b 83
+b 97
+b 95
+b 1
+b 82
+b 1
+b 0
+b 2
+b 4
+b 5
+b 3
+b 2
+b 0
+b 3
+b 4
+b 6
+b 8
+b 3
+b 2
+b 219
+b 218
+b 1
+b 6
+b 7
+b 9
+b 11
+b 23
+b 22
+b 1
+b 243
+b 256
+b 258
+b 256
+b 1
+b 42
+b 51
+b 52
+b 51
+b 1
+b 39
+b 1
+b 4
+b 37
+b 84
+b 85
+b 84
+b 2
+b 34
+b 1
+b 60
+b 58
+b 1
+b 32
+b 64
+b 65
+b 118
+b 64
+b 2
+b 30
+b 1
+b 111
+b 1
+b 2
+b 3
+b 40
+b 2
+b 2
+b 35
+b 1
+b 10
+b 7
+b 1
+b 7
+b 43
+b 6
+b 1
+b 0
+b 2
+b 40
+b 42
+b 44
+b 40
+b 1
+b 3
+b 126
+b 130
+b 131
+b 146
+b 145
+b 1
+b 23
+b 35
+b 56
+b 21
+b 2
+b 2
+b 0
+b 1
+b 469
+b 497
+b 495
+b 1
+b 2
+b 4
+b 5
+b 2
+b 2
+b 65
+b 3
+b 4
+b 13
+b 4
+b 1
+b 75
+b 77
+b 79
+b 243
+b 244
+b 243
+b 1
+b 28
+b 26
+b 2
+b 0
+b 16
+b 36
+b 33
+b 1
+b 10
+b 10
+b 1
+b 6
+b 7
+b 4
+b 2
+b 0
+b 189
+b 187
+b 1
+b 37
+b 38
+b 35
+b 2
+b 31
+b 29
+b 1
+b 261
+b 261
+b 1
+b 92
+b 94
+b 95
+b 94
+b 2
+b 1
+b 77
+b 79
+b 81
+b 87
+b 77
+b 1
+b 55
+b 57
+b 73
+b 55
+b 57
+b 65
+b 63
+b 3
+b 83
+b 82
+b 1
+b 121
+b 123
+b 124
+b 133
+b 1
+b 8
+b 26
+b 25
+b 1
+b 27
+b 29
+b 25
+b 1
+b 4
+b 23
+b 25
+b 39
+b 59
+b 23
+b 25
+b 27
+b 9
+b 11
+b 13
+b 14
+b 16
+b 18
+b 11
+b 2
+b 16
+b 1
+b 24
+b 21
+b 1
+b 7
+b 8
+b 10
+b 105
+b 59
+b 61
+b 69
+b 70
+b 72
+b 74
+b 59
+b 1
+b 13
+b 30
+b 31
+b 33
+b 35
+b 30
+b 2
+b 10
+b 1
+b 22
+b 27
+b 42
+b 43
+b 41
+b 1
+b 4
+b 3
+b 1
+b 0
+b 7
+b 42
+b 44
+b 51
+b 42
+b 1
+b 26
+b 13
+b 14
+b 16
+b 13
+b 2
+b 10
+b 1
+b 17
+b 207
+b 208
+b 243
+b 261
+b 72
+b 71
+b 1
+b 87
+b 88
+b 90
+b 196
+b 86
+b 1
+b 195
+b 1
+b 16
+b 18
+b 20
+b 22
+b 22
+b 1
+b 1
+b 3
+b 0
+b 3
+b 124
+b 139
+b 149
+b 150
+b 152
+b 138
+b 2
+b 145
+b 2
+b 148
+b 1
+b 33
+b 32
+b 1
+b 45
+b 1
+b 2
+b 19
+b 38
+b 36
+b 1
+b 43
+b 44
+b 53
+b 44
+b 1
+b 12
+b 18
+b 19
+b 33
+b 16
+b 2
+b 31
+b 1
+b 18
+b 28
+b 27
+b 1
+b 16
+b 18
+b 20
+b 21
+b 20
+b 3
+b 67
+b 102
+b 103
+b 110
+b 100
+b 2
+b 107
+b 2
+b 11
+b 24
+b 30
+b 32
+b 34
+b 9
+b 2
+b 32
+b 1
+b 4
+b 6
+b 8
+b 10
+b 11
+b 13
+b 15
+b 27
+b 2
+b 1
+b 9
+b 2
+b 70
+b 80
+b 81
+b 89
+b 80
+b 2
+b 85
+b 1
+b 10
+b 7
+b 1
+b 5
+b 11
+b 12
+b 11
+b 1
+b 6
+b 4
+b 1
+b 47
+b 53
+b 54
+b 97
+b 45
+b 1
+b 52
+b 1
+b 14
+b 16
+b 12
+b 1
+b 9
+b 10
+b 38
+b 9
+b 2
+b 34
+b 1
+b 83
+b 80
+b 1
+b 2
+b 4
+b 6
+b 7
+b 9
+b 4
+b 2
+b 1
+b 0
+b 2
+b 131
+b 87
+b 96
+b 97
+b 106
+b 108
+b 86
+b 2
+b 93
+b 1
+b 55
+b 66
+b 67
+b 55
+b 1
+b 64
+b 1
+b 1
+b 8
+b 71
+b 73
+b 69
+b 1
+b 4
+b 6
+b 6
+b 1
+b 1
+b 2
+b 0
+b 1
+b 43
+b 53
+b 55
+b 57
+b 5
+b 6
+b 252
+b 250
+b 1
+b 168
+b 170
+b 172
+b 173
+b 170
+b 2
+b 17
+b 19
+b 21
+b 23
+b 24
+b 15
+b 1
+b 22
+b 2
+b 227
+b 150
+b 164
+b 165
+b 178
+b 164
+b 2
+b 174
+b 2
+b 1
+b 31
+b 46
+b 56
+b 64
+b 63
+b 2
+b 29
+b 1
+b 74
+b 82
+b 83
+b 122
+b 128
+b 80
+b 2
+b 73
+b 1
+b 94
+b 104
+b 105
+b 94
+b 1
+b 102
+b 1
+b 125
+b 35
+b 44
+b 45
+b 47
+b 0
+b 26
+b 28
+b 29
+b 78
+b 28
+b 1
+b 75
+b 1
+b 41
+b 42
+b 72
+b 41
+b 1
+b 69
+b 1
+b 1
+b 10
+b 12
+b 14
+b 16
+b 18
+b 16
+b 1
+b 90
+b 88
+b 1
+b 57
+b 58
+b 71
+b 57
+b 2
+b 10
+b 12
+b 126
+b 330
+b 332
+b 467
+b 468
+b 466
+b 1
+b 332
+b 1
+b 0
+b 98
+b 102
+b 103
+b 105
+b 107
+b 97
+b 2
+b 3
+b 28
+b 30
+b 35
+b 37
+b 252
+b 263
+b 265
+b 251
+b 2
+b 230
+b 265
+b 229
+b 2
+b 29
+b 4
+b 6
+b 7
+b 6
+b 1
+b 206
+b 207
+b 209
+b 211
+b 204
+b 2
+b 209
+b 1
+b 98
+b 100
+b 96
+b 1
+b 6
+b 15
+b 16
+b 3
+b 1
+b 14
+b 1
+b 92
+b 162
+b 164
+b 165
+b 179
+b 181
+b 164
+b 1
+b 176
+b 1
+b 69
+b 76
+b 77
+b 79
+b 75
+b 1
+b 25
+b 23
+b 3
+b 70
+b 70
+b 1
+b 6
+b 7
+b 9
+b 6
+b 2
+b 0
+b 4
+b 54
+b 21
+b 23
+b 24
+b 9
+b 12
+b 24
+b 26
+b 26
+b 1
+b 0
+b 2
+b 4
+b 0
+b 1
+b 57
+b 51
+b 52
+b 58
+b 86
+b 86
+b 1
+b 83
+b 84
+b 83
+b 2
+b 51
+b 51
+b 1
+b 10
+b 9
+b 1
+b 0
+b 1
+b 10
+b 47
+b 47
+b 1
+b 39
+b 216
+b 217
+b 54
+b 405
+b 407
+b 403
+b 1
+b 24
+b 25
+b 27
+b 22
+b 2
+b 290
+b 292
+b 290
+b 1
+b 128
+b 129
+b 131
+b 133
+b 335
+b 356
+b 357
+b 356
+b 1
+b 126
+b 124
+b 1
+b 93
+b 40
+b 63
+b 64
+b 39
+b 2
+b 60
+b 1
+b 205
+b 207
+b 207
+b 1
+b 54
+b 55
+b 57
+b 59
+b 52
+b 2
+b 28
+b 28
+b 1
+b 4
+b 129
+b 143
+b 127
+b 1
+b 66
+b 86
+b 87
+b 84
+b 2
+b 65
+b 1
+b 26
+b 26
+b 1
+b 6
+b 7
+b 14
+b 5
+b 1
+b 82
+b 84
+b 86
+b 84
+b 1
+b 0
+b 1
+b 20
+b 57
+b 59
+b 57
+b 1
+b 4
+b 5
+b 7
+b 8
+b 10
+b 20
+b 21
+b 30
+b 19
+b 1
+b 28
+b 2
+b 14
+b 16
+b 17
+b 19
+b 40
+b 15
+b 1
+b 39
+b 1
+b 58
+b 83
+b 105
+b 107
+b 11
+b 10
+b 1
+b 49
+b 48
+b 1
+b 19
+b 25
+b 26
+b 48
+b 19
+b 1
+b 22
+b 2
+b 10
+b 63
+b 41
+b 52
+b 211
+b 211
+b 1
+b 7
+b 8
+b 10
+b 12
+b 5
+b 2
+b 10
+b 1
+b 83
+b 109
+b 111
+b 109
+b 3
+b 81
+b 1
+b 88
+b 105
+b 120
+b 48
+b 50
+b 51
+b 56
+b 106
+b 48
+b 2
+b 104
+b 1
+b 11
+b 33
+b 34
+b 36
+b 33
+b 2
+b 13
+b 11
+b 2
+b 43
+b 42
+b 1
+b 35
+b 41
+b 42
+b 67
+b 41
+b 2
+b 17
+b 16
+b 1
+b 0
+b 15
+b 16
+b 18
+b 20
+b 0
+b 1
+b 14
+b 2
+b 124
+b 123
+b 1
+b 17
+b 50
+b 0
+b 7
+b 95
+b 97
+b 129
+b 131
+b 132
+b 124
+b 125
+b 191
+b 123
+b 1
+b 12
+b 10
+b 1
+b 125
+b 123
+b 2
+b 19
+b 30
+b 32
+b 33
+b 35
+b 30
+b 2
+b 98
+b 111
+b 112
+b 114
+b 132
+b 97
+b 2
+b 108
+b 1
+b 87
+b 97
+b 98
+b 106
+b 95
+b 2
+b 86
+b 1
+b 101
+b 1
+b 61
+b 104
+b 105
+b 107
+b 109
+b 111
+b 109
+b 1
+b 25
+b 0
+b 26
+b 32
+b 41
+b 30
+b 1
+b 112
+b 113
+b 115
+b 111
+b 1
+b 45
+b 47
+b 43
+b 1
+b 17
+b 18
+b 16
+b 1
+b 6
+b 33
+b 34
+b 40
+b 31
+b 2
+b 37
+b 1
+b 35
+b 33
+b 1
+b 606
+b 616
+b 617
+b 626
+b 96
+b 121
+b 96
+b 1
+b 45
+b 47
+b 28
+b 30
+b 32
+b 33
+b 32
+b 2
+b 48
+b 50
+b 52
+b 53
+b 46
+b 1
+b 51
+b 1
+b 8
+b 61
+b 0
+b 2
+b 9
+b 115
+b 130
+b 129
+b 2
+b 21
+b 22
+b 31
+b 20
+b 1
+b 190
+b 187
+b 1
+b 20
+b 22
+b 46
+b 47
+b 44
+b 2
+b 22
+b 1
+b 60
+b 205
+b 206
+b 264
+b 205
+b 2
+b 57
+b 1
+b 257
+b 1
+b 16
+b 82
+b 75
+b 87
+b 72
+b 1
+b 414
+b 427
+b 500
+b 412
+b 2
+b 189
+b 191
+b 10
+b 11
+b 20
+b 18
+b 1
+b 98
+b 109
+b 110
+b 20
+b 31
+b 84
+b 39
+b 36
+b 1
+b 2
+b 3
+b 2
+b 1
+b 3
+b 26
+b 4
+b 5
+b 7
+b 3
+b 1
+b 6
+b 1
+b 83
+b 100
+b 101
+b 10
+b 21
+b 88
+b 90
+b 92
+b 19
+b 1
+b 90
+b 1
+b 9
+b 30
+b 31
+b 28
+b 2
+b 8
+b 1
+b 9
+b 7
+b 1
+b 322
+b 321
+b 2
+b 1
+b 229
+b 298
+b 297
+b 1
+b 64
+b 73
+b 74
+b 92
+b 73
+b 2
+b 88
+b 2
+b 62
+b 1
+b 17
+b 58
+b 60
+b 61
+b 63
+b 65
+b 63
+b 1
+b 24
+b 23
+b 2
+b 0
+b 45
+b 77
+b 105
+b 103
+b 2
+b 76
+b 1
+b 18
+b 0
+b 2
+b 28
+b 27
+b 1
+b 35
+b 40
+b 33
+b 2
+b 64
+b 78
+b 79
+b 63
+b 1
+b 15
+b 37
+b 0
+b 89
+b 102
+b 103
+b 102
+b 1
+b 86
+b 1
+b 33
+b 20
+b 19
+b 1
+b 14
+b 2
+b 3
+b 11
+b 4
+b 46
+b 47
+b 49
+b 3
+b 36
+b 86
+b 87
+b 111
+b 0
+b 288
+b 304
+b 305
+b 312
+b 286
+b 1
+b 1
+b 8
+b 15
+b 8
+b 9
+b 15
+b 14
+b 1
+b 17
+b 16
+b 1
+b 178
+b 179
+b 181
+b 198
+b 177
+b 1
+b 9
+b 6
+b 1
+b 2
+b 4
+b 21
+b 22
+b 4
+b 1
+b 18
+b 2
+b 28
+b 30
+b 26
+b 1
+b 18
+b 20
+b 21
+b 23
+b 18
+b 2
+b 60
+b 57
+b 1
+b 6
+b 7
+b 17
+b 6
+b 1
+b 755
+b 930
+b 938
+b 939
+b 755
+b 1
+b 937
+b 1
+b 30
+b 32
+b 34
+b 70
+b 32
+b 1
+b 112
+b 113
+b 115
+b 110
+b 2
+b 113
+b 1
+b 4
+b 207
+b 311
+b 321
+b 322
+b 329
+b 321
+b 1
+b 309
+b 1
+b 58
+b 57
+b 2
+b 9
+b 11
+b 12
+b 9
+b 2
+b 5
+b 106
+b 75
+b 76
+b 78
+b 80
+b 70
+b 159
+b 0
+b 2
+b 178
+b 180
+b 105
+b 111
+b 112
+b 134
+b 111
+b 2
+b 102
+b 1
+b 128
+b 1
+b 20
+b 22
+b 23
+b 22
+b 1
+b 0
+b 2
+b 6
+b 0
+b 1
+b 115
+b 125
+b 126
+b 128
+b 123
+b 2
+b 114
+b 1
+b 8
+b 92
+b 94
+b 0
+b 1
+b 17
+b 13
+b 15
+b 27
+b 379
+b 378
+b 2
+b 4
+b 6
+b 7
+b 9
+b 4
+b 2
+b 10
+b 234
+b 241
+b 242
+b 251
+b 238
+b 1
+b 249
+b 1
+b 40
+b 39
+b 1
+b 15
+b 16
+b 49
+b 13
+b 2
+b 47
+b 1
+b 37
+b 39
+b 41
+b 41
+b 1
+b 34
+b 1
+b 94
+b 101
+b 92
+b 1
+b 8
+b 9
+b 11
+b 8
+b 2
+b 65
+b 100
+b 105
+b 106
+b 64
+b 1
+b 95
+b 1
+b 17
+b 137
+b 139
+b 141
+b 153
+b 137
+b 1
+b 3
+b 5
+b 7
+b 17
+b 164
+b 28
+b 15
+b 17
+b 19
+b 20
+b 17
+b 2
+b 53
+b 53
+b 1
+b 26
+b 28
+b 2
+b 3
+b 5
+b 15
+b 1
+b 1
+b 42
+b 41
+b 1
+b 46
+b 47
+b 49
+b 45
+b 1
+b 5
+b 186
+b 82
+b 83
+b 82
+b 2
+b 68
+b 65
+b 1
+b 14
+b 16
+b 12
+b 1
+b 14
+b 19
+b 12
+b 1
+b 7
+b 9
+b 11
+b 3
+b 5
+b 78
+b 1
+b 1
+b 76
+b 1
+b 0
+b 2
+b 3
+b 26
+b 0
+b 2
+b 389
+b 390
+b 392
+b 81
+b 78
+b 1
+b 96
+b 122
+b 123
+b 123
+b 1
+b 0
+b 2
+b 0
+b 1
+b 44
+b 46
+b 47
+b 54
+b 46
+b 1
+b 51
+b 3
+b 41
+b 1
+b 7
+b 1
+b 67
+b 197
+b 65
+b 2
+b 2
+b 4
+b 5
+b 4
+b 1
+b 29
+b 39
+b 38
+b 1
+b 40
+b 40
+b 1
+b 59
+b 61
+b 63
+b 65
+b 63
+b 1
+b 123
+b 124
+b 160
+b 122
+b 1
+b 15
+b 60
+b 59
+b 2
+b 9
+b 13
+b 55
+b 56
+b 11
+b 1
+b 8
+b 1
+b 8
+b 172
+b 170
+b 2
+b 55
+b 57
+b 58
+b 60
+b 257
+b 57
+b 2
+b 317
+b 9
+b 10
+b 37
+b 9
+b 2
+b 33
+b 1
+b 5
+b 17
+b 19
+b 20
+b 26
+b 184
+b 186
+b 15
+b 6
+b 5
+b 2
+b 8
+b 9
+b 11
+b 13
+b 6
+b 2
+b 306
+b 304
+b 1
+b 0
+b 2
+b 20
+b 0
+b 1
+b 114
+b 119
+b 136
+b 137
+b 139
+b 25
+b 59
+b 56
+b 1
+b 4
+b 112
+b 125
+b 126
+b 126
+b 1
+b 8
+b 5
+b 1
+b 8
+b 6
+b 1
+b 17
+b 18
+b 20
+b 7
+b 4
+b 1
+b 57
+b 58
+b 60
+b 65
+b 55
+b 2
+b 62
+b 2
+b 21
+b 258
+b 286
+b 287
+b 289
+b 286
+b 2
+b 185
+b 183
+b 1
+b 84
+b 85
+b 87
+b 89
+b 91
+b 83
+b 1
+b 90
+b 1
+b 1
+b 9
+b 288
+b 289
+b 299
+b 301
+b 286
+b 2
+b 299
+b 1
+b 287
+b 1
+b 34
+b 10
+b 9
+b 1
+b 62
+b 63
+b 61
+b 1
+b 98
+b 100
+b 101
+b 103
+b 14
+b 16
+b 33
+b 64
+b 0
+b 45
+b 4
+b 193
+b 15
+b 16
+b 18
+b 29
+b 14
+b 1
+b 27
+b 3
+b 55
+b 57
+b 55
+b 1
+b 17
+b 18
+b 15
+b 167
+b 169
+b 171
+b 172
+b 169
+b 2
+b 5
+b 0
+b 2
+b 3
+b 0
+b 2
+b 26
+b 95
+b 114
+b 92
+b 1
+b 88
+b 89
+b 97
+b 237
+b 0
+b 124
+b 121
+b 1
+b 110
+b 109
+b 1
+b 104
+b 103
+b 2
+b 8
+b 9
+b 11
+b 8
+b 2
+b 16
+b 15
+b 2
+b 10
+b 6
+b 7
+b 32
+b 6
+b 2
+b 28
+b 1
+b 17
+b 38
+b 39
+b 47
+b 38
+b 2
+b 14
+b 1
+b 41
+b 1
+b 8
+b 16
+b 6
+b 1
+b 4
+b 5
+b 4
+b 3
+b 105
+b 62
+b 61
+b 1
+b 1
+b 7
+b 96
+b 124
+b 125
+b 127
+b 193
+b 94
+b 1
+b 125
+b 1
+b 26
+b 27
+b 29
+b 48
+b 26
+b 2
+b 45
+b 2
+b 13
+b 0
+b 2
+b 27
+b 90
+b 98
+b 99
+b 98
+b 2
+b 87
+b 1
+b 4
+b 33
+b 7
+b 9
+b 10
+b 15
+b 19
+b 21
+b 54
+b 55
+b 68
+b 58
+b 57
+b 1
+b 4
+b 1
+b 1
+b 2
+b 3
+b 13
+b 44
+b 120
+b 172
+b 172
+b 1
+b 1
+b 4
+b 17
+b 18
+b 20
+b 22
+b 24
+b 3
+b 1
+b 32
+b 34
+b 11
+b 12
+b 21
+b 28
+b 71
+b 72
+b 71
+b 3
+b 25
+b 1
+b 44
+b 42
+b 1
+b 16
+b 18
+b 38
+b 39
+b 41
+b 43
+b 16
+b 1
+b 28
+b 5
+b 6
+b 8
+b 4
+b 1
+b 1
+b 0
+b 1
+b 828
+b 827
+b 1
+b 25
+b 26
+b 25
+b 1
+b 8
+b 17
+b 25
+b 26
+b 28
+b 30
+b 32
+b 23
+b 2
+b 30
+b 1
+b 1
+b 4
+b 74
+b 76
+b 78
+b 34
+b 45
+b 56
+b 57
+b 54
+b 3
+b 44
+b 1
+b 0
+b 0
+b 1
+b 91
+b 93
+b 101
+b 93
+b 1
+b 98
+b 1
+b 25
+b 100
+b 101
+b 139
+b 630
+b 645
+b 646
+b 644
+b 1
+b 4
+b 224
+b 222
+b 2
+b 22
+b 97
+b 98
+b 131
+b 133
+b 96
+b 1
+b 132
+b 1
+b 97
+b 99
+b 101
+b 102
+b 104
+b 106
+b 95
+b 1
+b 100
+b 2
+b 180
+b 188
+b 179
+b 2
+b 84
+b 107
+b 117
+b 115
+b 3
+b 106
+b 1
+b 114
+b 4
+b 5
+b 7
+b 9
+b 3
+b 1
+b 8
+b 1
+b 5
+b 44
+b 45
+b 4
+b 1
+b 4
+b 73
+b 70
+b 1
+b 127
+b 128
+b 126
+b 1
+b 11
+b 112
+b 131
+b 2
+b 3
+b 152
+b 159
+b 160
+b 279
+b 159
+b 2
+b 274
+b 1
+b 0
+b 0
+b 1
+b 6
+b 3
+b 1
+b 37
+b 38
+b 37
+b 2
+b 30
+b 39
+b 27
+b 1
+b 79
+b 106
+b 107
+b 106
+b 1
+b 24
+b 21
+b 1
+b 101
+b 138
+b 35
+b 56
+b 57
+b 56
+b 2
+b 32
+b 1
+b 160
+b 157
+b 1
+b 108
+b 83
+b 18
+b 19
+b 19
+b 1
+b 7
+b 88
+b 88
+b 1
+b 8
+b 9
+b 15
+b 8
+b 2
+b 155
+b 168
+b 152
+b 1
+b 14
+b 32
+b 33
+b 13
+b 2
+b 28
+b 3
+b 55
+b 57
+b 59
+b 60
+b 68
+b 57
+b 2
+b 77
+b 75
+b 2
+b 37
+b 4
+b 1
+b 0
+b 1
+b 25
+b 30
+b 42
+b 43
+b 71
+b 23
+b 2
+b 40
+b 1
+b 65
+b 63
+b 1
+b 45
+b 46
+b 63
+b 44
+b 1
+b 183
+b 181
+b 1
+b 4
+b 5
+b 40
+b 154
+b 2
+b 4
+b 2
+b 1
+b 192
+b 192
+b 1
+b 2
+b 3
+b 8
+b 0
+b 2
+b 95
+b 109
+b 110
+b 107
+b 2
+b 25
+b 179
+b 180
+b 178
+b 1
+b 150
+b 233
+b 231
+b 3
+b 0
+b 5
+b 39
+b 41
+b 42
+b 48
+b 41
+b 2
+b 92
+b 90
+b 1
+b 55
+b 56
+b 55
+b 2
+b 13
+b 51
+b 10
+b 1
+b 107
+b 109
+b 140
+b 139
+b 1
+b 8
+b 31
+b 32
+b 34
+b 30
+b 1
+b 7
+b 1
+b 15
+b 18
+b 20
+b 22
+b 23
+b 22
+b 1
+b 32
+b 116
+b 117
+b 125
+b 114
+b 2
+b 13
+b 12
+b 1
+b 152
+b 162
+b 163
+b 161
+b 1
+b 3
+b 4
+b 3
+b 1
+b 2
+b 23
+b 0
+b 2
+b 13
+b 14
+b 43
+b 2
+b 1
+b 11
+b 1
+b 60
+b 62
+b 63
+b 62
+b 2
+b 57
+b 1
+b 7
+b 6
+b 2
+b 0
+b 2
+b 82
+b 79
+b 1
+b 43
+b 44
+b 41
+b 2
+b 18
+b 20
+b 20
+b 1
+b 12
+b 34
+b 36
+b 38
+b 39
+b 36
+b 2
+b 401
+b 401
+b 1
+b 32
+b 33
+b 40
+b 32
+b 1
+b 149
+b 146
+b 1
+b 5
+b 49
+b 48
+b 2
+b 19
+b 33
+b 7
+b 108
+b 106
+b 1
+b 0
+b 2
+b 4
+b 6
+b 8
+b 10
+b 42
+b 41
+b 2
+b 4
+b 9
+b 1
+b 1
+b 264
+b 286
+b 287
+b 303
+b 305
+b 284
+b 2
+b 303
+b 1
+b 263
+b 1
+b 208
+b 46
+b 48
+b 49
+b 9
+b 1
+b 160
+b 158
+b 2
+b 17
+b 19
+b 20
+b 22
+b 36
+b 19
+b 2
+b 18
+b 6
+b 7
+b 6
+b 2
+b 60
+b 59
+b 2
+b 31
+b 49
+b 50
+b 52
+b 110
+b 47
+b 2
+b 30
+b 1
+b 106
+b 1
+b 158
+b 160
+b 156
+b 1
+b 471
+b 473
+b 468
+b 1
+b 13
+b 29
+b 31
+b 32
+b 29
+b 2
+b 12
+b 1
+b 122
+b 120
+b 1
+b 68
+b 80
+b 81
+b 78
+b 2
+b 68
+b 1
+b 85
+b 84
+b 2
+b 12
+b 13
+b 12
+b 1
+b 29
+b 93
+b 95
+b 97
+b 98
+b 91
+b 1
+b 96
+b 2
+b 5
+b 27
+b 2
+b 1
+b 68
+b 70
+b 72
+b 74
+b 75
+b 77
+b 79
+b 74
+b 2
+b 94
+b 96
+b 98
+b 100
+b 141
+b 157
+b 158
+b 155
+b 2
+b 140
+b 1
+b 49
+b 49
+b 1
+b 15
+b 38
+b 39
+b 47
+b 38
+b 2
+b 43
+b 1
+b 18
+b 20
+b 33
+b 34
+b 20
+b 1
+b 30
+b 3
+b 1
+b 0
+b 1
+b 208
+b 209
+b 211
+b 223
+b 225
+b 206
+b 2
+b 223
+b 1
+b 209
+b 1
+b 23
+b 36
+b 37
+b 42
+b 36
+b 1
+b 39
+b 2
+b 325
+b 634
+b 636
+b 637
+b 647
+b 634
+b 2
+b 0
+b 2
+b 2
+b 1
+b 3
+b 11
+b 13
+b 3
+b 1
+b 11
+b 2
+b 3
+b 5
+b 7
+b 0
+b 2
+b 57
+b 56
+b 2
+b 66
+b 68
+b 70
+b 72
+b 73
+b 70
+b 2
+b 10
+b 18
+b 10
+b 1
+b 15
+b 1
+b 62
+b 141
+b 149
+b 151
+b 152
+b 159
+b 141
+b 1
+b 148
+b 2
+b 4
+b 3
+b 1
+b 19
+b 20
+b 17
+b 2
+b 18
+b 15
+b 1
+b 37
+b 45
+b 47
+b 103
+b 47
+b 1
+b 7
+b 9
+b 10
+b 12
+b 14
+b 9
+b 2
+b 4
+b 1
+b 174
+b 173
+b 1
+b 8
+b 10
+b 10
+b 1
+b 44
+b 44
+b 1
+b 15
+b 17
+b 18
+b 30
+b 52
+b 59
+b 60
+b 52
+b 1
+b 57
+b 1
+b 3
+b 52
+b 58
+b 73
+b 74
+b 76
+b 78
+b 71
+b 2
+b 57
+b 1
+b 196
+b 202
+b 203
+b 196
+b 1
+b 199
+b 2
+b 162
+b 29
+b 31
+b 33
+b 34
+b 42
+b 27
+b 1
+b 32
+b 1
+b 105
+b 106
+b 108
+b 104
+b 1
+b 107
+b 1
+b 4
+b 14
+b 118
+b 12
+b 1
+b 56
+b 57
+b 67
+b 56
+b 2
+b 63
+b 1
+b 25
+b 23
+b 3
+b 0
+b 2
+b 33
+b 0
+b 1
+b 32
+b 1
+b 111
+b 0
+b 6
+b 7
+b 9
+b 30
+b 42
+b 65
+b 66
+b 68
+b 65
+b 2
+b 21
+b 20
+b 2
+b 19
+b 18
+b 1
+b 23
+b 24
+b 72
+b 80
+b 23
+b 2
+b 67
+b 1
+b 190
+b 189
+b 1
+b 33
+b 35
+b 36
+b 38
+b 155
+b 156
+b 163
+b 154
+b 1
+b 162
+b 1
+b 38
+b 102
+b 74
+b 73
+b 2
+b 53
+b 55
+b 56
+b 62
+b 69
+b 53
+b 2
+b 66
+b 2
+b 88
+b 118
+b 125
+b 126
+b 118
+b 1
+b 123
+b 1
+b 42
+b 44
+b 46
+b 53
+b 368
+b 376
+b 377
+b 374
+b 2
+b 61
+b 280
+b 282
+b 0
+b 61
+b 63
+b 78
+b 79
+b 63
+b 1
+b 76
+b 1
+b 7
+b 20
+b 16
+b 17
+b 19
+b 198
+b 129
+b 142
+b 129
+b 1
+b 139
+b 2
+b 17
+b 30
+b 31
+b 49
+b 42
+b 41
+b 1
+b 11
+b 1
+b 2
+b 12
+b 1
+b 2
+b 8
+b 1
+b 176
+b 145
+b 147
+b 148
+b 147
+b 1
+b 458
+b 456
+b 3
+b 19
+b 21
+b 28
+b 26
+b 1
+b 23
+b 157
+b 158
+b 165
+b 157
+b 1
+b 162
+b 2
+b 292
+b 294
+b 296
+b 297
+b 304
+b 306
+b 292
+b 1
+b 8
+b 9
+b 8
+b 1
+b 18
+b 48
+b 16
+b 2
+b 133
+b 134
+b 145
+b 149
+b 131
+b 2
+b 146
+b 1
+b 62
+b 61
+b 1
+b 151
+b 151
+b 1
+b 770
+b 771
+b 955
+b 770
+b 2
+b 393
+b 395
+b 391
+b 1
+b 4
+b 17
+b 18
+b 15
+b 2
+b 4
+b 1
+b 94
+b 102
+b 93
+b 2
+b 6
+b 7
+b 1
+b 181
+b 36
+b 91
+b 113
+b 89
+b 3
+b 35
+b 1
+b 106
+b 1
+b 42
+b 40
+b 1
+b 8
+b 9
+b 17
+b 7
+b 1
+b 38
+b 36
+b 1
+b 11
+b 12
+b 14
+b 16
+b 11
+b 2
+b 10
+b 21
+b 23
+b 24
+b 23
+b 1
+b 9
+b 6
+b 1
+b 108
+b 114
+b 106
+b 1
+b 62
+b 60
+b 1
+b 14
+b 31
+b 32
+b 13
+b 2
+b 27
+b 2
+b 9
+b 32
+b 33
+b 35
+b 44
+b 18
+b 13
+b 73
+b 74
+b 73
+b 1
+b 63
+b 60
+b 1
+b 0
+b 0
+b 1
+b 44
+b 6
+b 16
+b 28
+b 29
+b 41
+b 111
+b 210
+b 110
+b 1
+b 0
+b 2
+b 91
+b 105
+b 106
+b 108
+b 105
+b 2
+b 10
+b 8
+b 2
+b 83
+b 54
+b 45
+b 24
+b 61
+b 59
+b 1
+b 23
+b 1
+b 15
+b 34
+b 35
+b 32
+b 2
+b 14
+b 1
+b 123
+b 123
+b 1
+b 59
+b 1
+b 6
+b 14
+b 5
+b 2
+b 114
+b 116
+b 117
+b 114
+b 2
+b 118
+b 120
+b 116
+b 1
+b 433
+b 434
+b 431
+b 2
+b 9
+b 7
+b 1
+b 159
+b 158
+b 1
+b 53
+b 57
+b 77
+b 78
+b 76
+b 1
+b 6
+b 4
+b 2
+b 40
+b 2
+b 3
+b 3
+b 44
+b 50
+b 60
+b 59
+b 1
+b 27
+b 29
+b 31
+b 29
+b 1
+b 13
+b 356
+b 367
+b 368
+b 377
+b 367
+b 1
+b 374
+b 1
+b 3
+b 5
+b 6
+b 5
+b 1
+b 4
+b 2
+b 2
+b 17
+b 7
+b 5
+b 1
+b 2
+b 3
+b 0
+b 2
+b 41
+b 44
+b 72
+b 73
+b 42
+b 1
+b 9
+b 141
+b 143
+b 145
+b 146
+b 108
+b 91
+b 105
+b 106
+b 89
+b 2
+b 103
+b 2
+b 8
+b 43
+b 5
+b 1
+b 212
+b 242
+b 255
+b 210
+b 2
+b 5
+b 4
+b 1
+b 132
+b 134
+b 141
+b 142
+b 144
+b 134
+b 1
+b 139
+b 1
+b 373
+b 375
+b 377
+b 378
+b 373
+b 1
+b 53
+b 1
+b 44
+b 43
+b 2
+b 13
+b 19
+b 20
+b 26
+b 19
+b 2
+b 13
+b 19
+b 20
+b 19
+b 1
+b 11
+b 1
+b 41
+b 41
+b 41
+b 1
+b 19
+b 20
+b 19
+b 1
+b 8
+b 20
+b 18
+b 24
+b 25
+b 22
+b 2
+b 17
+b 1
+b 35
+b 34
+b 1
+b 427
+b 50
+b 51
+b 50
+b 1
+b 12
+b 12
+b 1
+b 17
+b 23
+b 24
+b 30
+b 23
+b 2
+b 14
+b 1
+b 59
+b 73
+b 75
+b 58
+b 1
+b 48
+b 56
+b 55
+b 1
+b 4
+b 2
+b 1
+b 43
+b 18
+b 19
+b 21
+b 18
+b 2
+b 204
+b 204
+b 1
+b 3
+b 47
+b 48
+b 54
+b 46
+b 1
+b 77
+b 79
+b 81
+b 95
+b 81
+b 1
+b 92
+b 1
+b 167
+b 169
+b 171
+b 173
+b 174
+b 176
+b 214
+b 171
+b 2
+b 211
+b 2
+b 106
+b 105
+b 1
+b 5
+b 6
+b 13
+b 14
+b 3
+b 2
+b 10
+b 23
+b 12
+b 10
+b 2
+b 78
+b 89
+b 91
+b 93
+b 94
+b 91
+b 2
+b 4
+b 80
+b 81
+b 87
+b 80
+b 2
+b 13
+b 15
+b 17
+b 19
+b 17
+b 3
+b 21
+b 19
+b 20
+b 31
+b 18
+b 1
+b 30
+b 1
+b 95
+b 45
+b 47
+b 48
+b 50
+b 47
+b 2
+b 6
+b 5
+b 2
+b 121
+b 123
+b 125
+b 126
+b 133
+b 135
+b 125
+b 1
+b 130
+b 1
+b 32
+b 57
+b 0
+b 2
+b 3
+b 4
+b 6
+b 10
+b 4
+b 1
+b 6
+b 7
+b 9
+b 11
+b 4
+b 2
+b 9
+b 1
+b 8
+b 3
+b 19
+b 18
+b 1
+b 241
+b 333
+b 344
+b 345
+b 355
+b 343
+b 1
+b 22
+b 21
+b 2
+b 35
+b 46
+b 47
+b 34
+b 2
+b 43
+b 1
+b 6
+b 53
+b 90
+b 91
+b 105
+b 90
+b 1
+b 50
+b 1
+b 183
+b 71
+b 72
+b 69
+b 2
+b 3
+b 1
+b 1
+b 102
+b 102
+b 1
+b 31
+b 50
+b 49
+b 1
+b 157
+b 164
+b 179
+b 180
+b 155
+b 2
+b 177
+b 1
+b 12
+b 61
+b 62
+b 59
+b 2
+b 36
+b 35
+b 1
+b 4
+b 18
+b 17
+b 1
+b 47
+b 3
+b 4
+b 6
+b 13
+b 2
+b 1
+b 11
+b 1
+b 48
+b 48
+b 1
+b 9
+b 10
+b 12
+b 9
+b 2
+b 0
+b 15
+b 23
+b 24
+b 13
+b 1
+b 22
+b 2
+b 50
+b 219
+b 221
+b 223
+b 224
+b 223
+b 2
+b 216
+b 1
+b 161
+b 159
+b 1
+b 57
+b 57
+b 1
+b 4
+b 5
+b 7
+b 63
+b 2
+b 2
+b 60
+b 1
+b 5
+b 11
+b 12
+b 20
+b 22
+b 4
+b 1
+b 48
+b 50
+b 51
+b 62
+b 48
+b 2
+b 13
+b 10
+b 1
+b 402
+b 46
+b 57
+b 59
+b 60
+b 45
+b 2
+b 55
+b 2
+b 4
+b 137
+b 143
+b 145
+b 146
+b 148
+b 150
+b 135
+b 2
+b 143
+b 2
+b 22
+b 47
+b 48
+b 61
+b 20
+b 2
+b 35
+b 32
+b 1
+b 190
+b 192
+b 194
+b 195
+b 230
+b 192
+b 2
+b 56
+b 54
+b 1
+b 109
+b 117
+b 108
+b 1
+b 29
+b 41
+b 18
+b 19
+b 20
+b 88
+b 141
+b 171
+b 172
+b 1
+b 149
+b 24
+b 26
+b 31
+b 33
+b 44
+b 291
+b 293
+b 294
+b 17
+b 16
+b 1
+b 4
+b 2
+b 1
+b 27
+b 26
+b 2
+b 16
+b 17
+b 16
+b 2
+b 14
+b 11
+b 1
+b 5
+b 21
+b 77
+b 19
+b 3
+b 5
+b 1
+b 69
+b 1
+b 138
+b 151
+b 184
+b 185
+b 1
+b 53
+b 99
+b 0
+b 2
+b 2
+b 1
+b 7
+b 6
+b 2
+b 208
+b 210
+b 211
+b 213
+b 208
+b 2
+b 211
+b 1
+b 40
+b 20
+b 47
+b 49
+b 51
+b 53
+b 54
+b 47
+b 1
+b 121
+b 144
+b 145
+b 157
+b 142
+b 2
+b 120
+b 1
+b 57
+b 56
+b 2
+b 155
+b 157
+b 158
+b 155
+b 2
+b 16
+b 15
+b 1
+b 78
+b 116
+b 126
+b 77
+b 2
+b 61
+b 24
+b 87
+b 89
+b 91
+b 22
+b 24
+b 38
+b 46
+b 44
+b 2
+b 37
+b 1
+b 42
+b 58
+b 42
+b 1
+b 940
+b 940
+b 1
+b 19
+b 20
+b 26
+b 17
+b 2
+b 31
+b 7
+b 1
+b 2
+b 4
+b 20
+b 18
+b 1
+b 4
+b 1
+b 89
+b 91
+b 32
+b 1
+b 356
+b 354
+b 2
+b 148
+b 149
+b 158
+b 148
+b 1
+b 10
+b 101
+b 102
+b 108
+b 101
+b 2
+b 104
+b 1
+b 10
+b 7
+b 1
+b 32
+b 34
+b 245
+b 247
+b 248
+b 263
+b 265
+b 245
+b 2
+b 258
+b 1
+b 7
+b 17
+b 18
+b 35
+b 17
+b 1
+b 36
+b 4
+b 5
+b 7
+b 3
+b 1
+b 52
+b 58
+b 59
+b 52
+b 1
+b 55
+b 2
+b 37
+b 29
+b 30
+b 32
+b 34
+b 53
+b 49
+b 48
+b 2
+b 3
+b 5
+b 6
+b 5
+b 1
+b 1
+b 30
+b 73
+b 82
+b 83
+b 162
+b 82
+b 1
+b 161
+b 1
+b 57
+b 59
+b 61
+b 63
+b 64
+b 123
+b 63
+b 1
+b 112
+b 111
+b 1
+b 44
+b 24
+b 24
+b 1
+b 148
+b 24
+b 25
+b 87
+b 24
+b 1
+b 84
+b 1
+b 44
+b 46
+b 46
+b 1
+b 1
+b 15
+b 17
+b 24
+b 26
+b 28
+b 29
+b 31
+b 33
+b 35
+b 26
+b 2
+b 33
+b 1
+b 326
+b 328
+b 324
+b 1
+b 306
+b 11
+b 11
+b 1
+b 3
+b 4
+b 6
+b 8
+b 10
+b 3
+b 2
+b 89
+b 90
+b 128
+b 87
+b 2
+b 125
+b 1
+b 2
+b 2
+b 1
+b 18
+b 45
+b 21
+b 23
+b 24
+b 53
+b 65
+b 51
+b 2
+b 24
+b 1
+b 10
+b 11
+b 17
+b 24
+b 10
+b 2
+b 13
+b 2
+b 4
+b 3
+b 2
+b 1
+b 12
+b 13
+b 12
+b 2
+b 2
+b 57
+b 6
+b 26
+b 5
+b 2
+b 22
+b 1
+b 111
+b 128
+b 47
+b 52
+b 53
+b 60
+b 52
+b 1
+b 90
+b 88
+b 1
+b 21
+b 22
+b 94
+b 21
+b 1
+b 6
+b 8
+b 158
+b 47
+b 46
+b 2
+b 1
+b 66
+b 27
+b 46
+b 26
+b 1
+b 4
+b 141
+b 160
+b 139
+b 1
+b 21
+b 23
+b 33
+b 42
+b 43
+b 42
+b 1
+b 30
+b 1
+b 19
+b 5
+b 4
+b 2
+b 16
+b 17
+b 19
+b 14
+b 2
+b 7
+b 4
+b 1
+b 357
+b 371
+b 50
+b 167
+b 199
+b 200
+b 165
+b 1
+b 198
+b 1
+b 11
+b 5
+b 6
+b 8
+b 39
+b 4
+b 1
+b 6
+b 4
+b 1
+b 134
+b 142
+b 143
+b 140
+b 2
+b 133
+b 1
+b 756
+b 754
+b 1
+b 251
+b 253
+b 255
+b 261
+b 253
+b 1
+b 23
+b 29
+b 30
+b 127
+b 12
+b 11
+b 1
+b 29
+b 35
+b 37
+b 39
+b 41
+b 42
+b 33
+b 1
+b 28
+b 1
+b 9
+b 98
+b 123
+b 195
+b 92
+b 98
+b 97
+b 1
+b 57
+b 57
+b 1
+b 3
+b 10
+b 11
+b 13
+b 15
+b 13
+b 1
+b 10
+b 22
+b 23
+b 10
+b 1
+b 20
+b 1
+b 83
+b 168
+b 172
+b 174
+b 186
+b 187
+b 174
+b 1
+b 183
+b 2
+b 1
+b 0
+b 1
+b 21
+b 25
+b 23
+b 2
+b 50
+b 0
+b 1
+b 71
+b 5
+b 10
+b 11
+b 4
+b 1
+b 56
+b 57
+b 67
+b 56
+b 1
+b 53
+b 53
+b 1
+b 55
+b 12
+b 13
+b 15
+b 12
+b 2
+b 26
+b 32
+b 33
+b 45
+b 31
+b 1
+b 36
+b 63
+b 97
+b 98
+b 127
+b 97
+b 2
+b 123
+b 1
+b 33
+b 1
+b 31
+b 29
+b 1
+b 11
+b 12
+b 32
+b 11
+b 1
+b 262
+b 268
+b 269
+b 260
+b 1
+b 267
+b 1
+b 197
+b 397
+b 486
+b 395
+b 1
+b 81
+b 79
+b 1
+b 54
+b 55
+b 67
+b 54
+b 2
+b 63
+b 1
+b 13
+b 10
+b 1
+b 1
+b 27
+b 29
+b 31
+b 33
+b 80
+b 91
+b 92
+b 89
+b 2
+b 74
+b 72
+b 1
+b 91
+b 93
+b 89
+b 1
+b 11
+b 12
+b 14
+b 9
+b 2
+b 67
+b 75
+b 76
+b 78
+b 80
+b 82
+b 78
+b 1
+b 15
+b 30
+b 32
+b 44
+b 46
+b 47
+b 245
+b 265
+b 264
+b 1
+b 75
+b 92
+b 93
+b 92
+b 2
+b 72
+b 1
+b 83
+b 90
+b 81
+b 2
+b 5
+b 0
+b 28
+b 29
+b 25
+b 1
+b 6
+b 4
+b 1
+b 3
+b 5
+b 6
+b 3
+b 2
+b 1
+b 0
+b 1
+b 1
+b 9
+b 5
+b 6
+b 19
+b 18
+b 1
+b 11
+b 16
+b 16
+b 1
+b 22
+b 21
+b 1
+b 131
+b 132
+b 138
+b 149
+b 130
+b 1
+b 148
+b 1
+b 10
+b 25
+b 26
+b 31
+b 7
+b 1
+b 24
+b 1
+b 41
+b 40
+b 1
+b 108
+b 109
+b 108
+b 2
+b 85
+b 87
+b 151
+b 148
+b 1
+b 0
+b 2
+b 26
+b 61
+b 59
+b 1
+b 24
+b 34
+b 146
+b 147
+b 149
+b 151
+b 22
+b 2
+b 144
+b 2
+b 121
+b 122
+b 143
+b 121
+b 2
+b 139
+b 1
+b 6
+b 5
+b 2
+b 0
+b 9
+b 157
+b 200
+b 201
+b 229
+b 16
+b 17
+b 15
+b 1
+b 44
+b 55
+b 42
+b 2
+b 28
+b 28
+b 1
+b 8
+b 9
+b 11
+b 13
+b 6
+b 2
+b 11
+b 1
+b 39
+b 64
+b 65
+b 67
+b 72
+b 64
+b 2
+b 0
+b 5
+b 21
+b 22
+b 28
+b 19
+b 2
+b 25
+b 1
+b 45
+b 44
+b 1
+b 25
+b 43
+b 44
+b 57
+b 43
+b 1
+b 54
+b 2
+b 0
+b 167
+b 190
+b 191
+b 193
+b 225
+b 166
+b 2
+b 187
+b 1
+b 28
+b 28
+b 1
+b 48
+b 49
+b 56
+b 46
+b 2
+b 30
+b 32
+b 34
+b 36
+b 34
+b 1
+b 64
+b 26
+b 30
+b 31
+b 24
+b 2
+b 29
+b 1
+b 0
+b 202
+b 216
+b 217
+b 223
+b 201
+b 2
+b 213
+b 1
+b 33
+b 115
+b 64
+b 65
+b 64
+b 1
+b 7
+b 9
+b 9
+b 1
+b 88
+b 90
+b 92
+b 94
+b 95
+b 92
+b 2
+b 26
+b 24
+b 1
+b 56
+b 83
+b 56
+b 1
+b 80
+b 1
+b 72
+b 187
+b 156
+b 181
+b 182
+b 208
+b 155
+b 2
+b 178
+b 1
+b 3
+b 10
+b 12
+b 1
+b 2
+b 10
+b 1
+b 15
+b 17
+b 86
+b 94
+b 113
+b 94
+b 1
+b 110
+b 1
+b 39
+b 7
+b 9
+b 10
+b 7
+b 206
+b 50
+b 51
+b 50
+b 1
+b 3
+b 3
+b 1
+b 3
+b 5
+b 7
+b 21
+b 47
+b 48
+b 57
+b 81
+b 79
+b 2
+b 61
+b 102
+b 101
+b 1
+b 73
+b 244
+b 245
+b 261
+b 263
+b 244
+b 2
+b 71
+b 1
+b 254
+b 1
+b 95
+b 100
+b 93
+b 1
+b 8
+b 5
+b 1
+b 1
+b 2
+b 108
+b 110
+b 106
+b 1
+b 25
+b 26
+b 36
+b 24
+b 1
+b 20
+b 19
+b 1
+b 11
+b 12
+b 20
+b 18
+b 1
+b 11
+b 1
+b 0
+b 2
+b 3
+b 119
+b 0
+b 2
+b 211
+b 209
+b 1
+b 335
+b 340
+b 342
+b 343
+b 340
+b 2
+b 132
+b 239
+b 247
+b 248
+b 254
+b 247
+b 1
+b 128
+b 136
+b 137
+b 139
+b 147
+b 127
+b 2
+b 132
+b 2
+b 143
+b 1
+b 76
+b 77
+b 98
+b 97
+b 1
+b 57
+b 74
+b 72
+b 3
+b 0
+b 0
+b 5
+b 84
+b 112
+b 113
+b 155
+b 111
+b 1
+b 153
+b 2
+b 6
+b 4
+b 19
+b 21
+b 22
+b 17
+b 1
+b 3
+b 1
+b 272
+b 270
+b 2
+b 52
+b 53
+b 55
+b 52
+b 2
+b 173
+b 175
+b 171
+b 1
+b 2
+b 4
+b 5
+b 7
+b 2
+b 2
+b 88
+b 143
+b 142
+b 2
+b 9
+b 10
+b 7
+b 3
+b 4
+b 1
+b 0
+b 1
+b 24
+b 26
+b 27
+b 37
+b 26
+b 1
+b 34
+b 2
+b 18
+b 112
+b 132
+b 133
+b 148
+b 110
+b 2
+b 130
+b 1
+b 216
+b 4
+b 16
+b 3
+b 1
+b 43
+b 41
+b 1
+b 261
+b 2
+b 3
+b 5
+b 2
+b 2
+b 176
+b 181
+b 105
+b 115
+b 113
+b 1
+b 6
+b 7
+b 4
+b 2
+b 16
+b 26
+b 27
+b 25
+b 1
+b 4
+b 2
+b 1
+b 398
+b 399
+b 401
+b 398
+b 2
+b 39
+b 3
+b 2
+b 1
+b 248
+b 254
+b 255
+b 276
+b 57
+b 22
+b 23
+b 30
+b 21
+b 1
+b 29
+b 1
+b 105
+b 103
+b 1
+b 26
+b 28
+b 29
+b 26
+b 2
+b 6
+b 88
+b 88
+b 1
+b 54
+b 55
+b 57
+b 59
+b 54
+b 2
+b 19
+b 21
+b 21
+b 1
+b 45
+b 44
+b 2
+b 47
+b 0
+b 2
+b 7
+b 6
+b 1
+b 22
+b 40
+b 46
+b 47
+b 84
+b 82
+b 1
+b 23
+b 25
+b 26
+b 93
+b 76
+b 84
+b 85
+b 92
+b 84
+b 1
+b 89
+b 1
+b 24
+b 31
+b 32
+b 36
+b 35
+b 1
+b 1
+b 84
+b 102
+b 28
+b 25
+b 1
+b 93
+b 94
+b 91
+b 2
+b 62
+b 64
+b 59
+b 1
+b 44
+b 50
+b 58
+b 59
+b 66
+b 49
+b 2
+b 55
+b 1
+b 131
+b 162
+b 168
+b 172
+b 7
+b 214
+b 243
+b 244
+b 259
+b 214
+b 1
+b 240
+b 2
+b 128
+b 125
+b 1
+b 4
+b 5
+b 7
+b 4
+b 2
+b 67
+b 4
+b 64
+b 63
+b 1
+b 2
+b 4
+b 5
+b 2
+b 2
+b 20
+b 39
+b 40
+b 42
+b 38
+b 1
+b 2
+b 0
+b 1
+b 248
+b 249
+b 265
+b 318
+b 248
+b 2
+b 261
+b 1
+b 6
+b 14
+b 16
+b 18
+b 4
+b 3
+b 15
+b 1
+b 106
+b 108
+b 140
+b 40
+b 59
+b 37
+b 1
+b 4
+b 3
+b 1
+b 9
+b 7
+b 3
+b 340
+b 81
+b 82
+b 79
+b 2
+b 0
+b 8
+b 0
+b 2
+b 0
+b 1
+b 47
+b 86
+b 87
+b 94
+b 86
+b 1
+b 91
+b 2
+b 62
+b 71
+b 72
+b 81
+b 71
+b 1
+b 78
+b 1
+b 86
+b 94
+b 96
+b 84
+b 1
+b 95
+b 1
+b 68
+b 95
+b 22
+b 30
+b 32
+b 22
+b 1
+b 290
+b 291
+b 290
+b 1
+b 137
+b 18
+b 19
+b 21
+b 18
+b 2
+b 6
+b 4
+b 1
+b 38
+b 19
+b 17
+b 1
+b 2
+b 3
+b 10
+b 2
+b 1
+b 48
+b 47
+b 2
+b 18
+b 20
+b 21
+b 55
+b 20
+b 1
+b 0
+b 53
+b 63
+b 70
+b 69
+b 1
+b 52
+b 67
+b 50
+b 1
+b 6
+b 5
+b 1
+b 4
+b 2
+b 3
+b 80
+b 90
+b 105
+b 104
+b 1
+b 74
+b 76
+b 23
+b 25
+b 26
+b 20
+b 1
+b 24
+b 1
+b 67
+b 65
+b 1
+b 84
+b 85
+b 87
+b 89
+b 84
+b 2
+b 26
+b 18
+b 19
+b 21
+b 18
+b 2
+b 24
+b 24
+b 1
+b 123
+b 135
+b 136
+b 147
+b 87
+b 105
+b 107
+b 107
+b 1
+b 351
+b 353
+b 355
+b 357
+b 353
+b 1
+b 4
+b 10
+b 1
+b 1
+b 7
+b 1
+b 8
+b 6
+b 3
+b 141
+b 140
+b 1
+b 129
+b 130
+b 6
+b 40
+b 54
+b 55
+b 59
+b 54
+b 2
+b 11
+b 22
+b 44
+b 45
+b 80
+b 42
+b 2
+b 21
+b 1
+b 75
+b 1
+b 165
+b 183
+b 184
+b 183
+b 1
+b 136
+b 136
+b 1
+b 475
+b 486
+b 487
+b 496
+b 498
+b 496
+b 1
+b 4
+b 15
+b 16
+b 21
+b 15
+b 1
+b 18
+b 1
+b 54
+b 56
+b 57
+b 64
+b 77
+b 54
+b 2
+b 74
+b 1
+b 7
+b 9
+b 10
+b 12
+b 14
+b 9
+b 2
+b 3
+b 9
+b 2
+b 2
+b 393
+b 19
+b 21
+b 23
+b 24
+b 21
+b 2
+b 15
+b 13
+b 1
+b 13
+b 12
+b 1
+b 3
+b 4
+b 5
+b 209
+b 211
+b 68
+b 84
+b 66
+b 3
+b 78
+b 1
+b 161
+b 176
+b 177
+b 176
+b 1
+b 159
+b 1
+b 9
+b 5
+b 6
+b 23
+b 4
+b 1
+b 46
+b 44
+b 1
+b 36
+b 34
+b 1
+b 4
+b 6
+b 7
+b 4
+b 2
+b 1
+b 98
+b 122
+b 97
+b 2
+b 118
+b 1
+b 165
+b 23
+b 25
+b 21
+b 1
+b 13
+b 14
+b 16
+b 18
+b 13
+b 2
+b 81
+b 78
+b 1
+b 35
+b 37
+b 39
+b 41
+b 42
+b 33
+b 1
+b 40
+b 2
+b 160
+b 162
+b 164
+b 164
+b 1
+b 157
+b 1
+b 6
+b 43
+b 40
+b 42
+b 43
+b 62
+b 42
+b 2
+b 22
+b 40
+b 42
+b 44
+b 557
+b 555
+b 1
+b 179
+b 187
+b 177
+b 3
+b 181
+b 1
+b 68
+b 148
+b 0
+b 1
+b 21
+b 17
+b 19
+b 21
+b 22
+b 24
+b 26
+b 28
+b 15
+b 1
+b 20
+b 2
+b 40
+b 68
+b 69
+b 40
+b 1
+b 65
+b 2
+b 19
+b 37
+b 42
+b 43
+b 45
+b 45
+b 1
+b 3
+b 222
+b 223
+b 225
+b 222
+b 2
+b 34
+b 36
+b 32
+b 1
+b 411
+b 441
+b 442
+b 522
+b 440
+b 1
+b 410
+b 1
+b 233
+b 234
+b 232
+b 1
+b 8
+b 22
+b 6
+b 2
+b 483
+b 482
+b 1
+b 81
+b 82
+b 81
+b 2
+b 77
+b 77
+b 1
+b 27
+b 10
+b 11
+b 9
+b 1
+b 1
+b 181
+b 218
+b 220
+b 222
+b 223
+b 216
+b 1
+b 180
+b 1
+b 1
+b 181
+b 180
+b 1
+b 29
+b 35
+b 36
+b 35
+b 2
+b 2
+b 57
+b 87
+b 248
+b 57
+b 1
+b 84
+b 1
+b 41
+b 60
+b 61
+b 63
+b 60
+b 2
+b 42
+b 480
+b 487
+b 488
+b 487
+b 1
+b 477
+b 1
+b 256
+b 24
+b 57
+b 58
+b 1
+b 18
+b 110
+b 116
+b 117
+b 119
+b 121
+b 116
+b 2
+b 14
+b 11
+b 1
+b 46
+b 48
+b 50
+b 51
+b 48
+b 2
+b 0
+b 0
+b 1
+b 224
+b 226
+b 233
+b 234
+b 293
+b 226
+b 1
+b 231
+b 1
+b 25
+b 135
+b 136
+b 138
+b 161
+b 134
+b 1
+b 158
+b 3
+b 137
+b 1
+b 17
+b 19
+b 21
+b 23
+b 24
+b 26
+b 28
+b 30
+b 15
+b 1
+b 22
+b 2
+b 75
+b 77
+b 79
+b 80
+b 86
+b 20
+b 20
+b 1
+b 3
+b 4
+b 6
+b 21
+b 3
+b 2
+b 278
+b 284
+b 290
+b 282
+b 1
+b 2
+b 4
+b 53
+b 54
+b 4
+b 1
+b 52
+b 1
+b 19
+b 89
+b 86
+b 1
+b 78
+b 79
+b 79
+b 1
+b 10
+b 22
+b 21
+b 1
+b 0
+b 2
+b 14
+b 1
+b 288
+b 292
+b 294
+b 295
+b 322
+b 294
+b 1
+b 319
+b 1
+b 185
+b 133
+b 150
+b 151
+b 153
+b 148
+b 2
+b 132
+b 1
+b 149
+b 1
+b 4
+b 6
+b 11
+b 10
+b 2
+b 64
+b 93
+b 150
+b 152
+b 153
+b 152
+b 2
+b 19
+b 21
+b 21
+b 1
+b 9
+b 11
+b 13
+b 9
+b 1
+b 117
+b 115
+b 2
+b 29
+b 31
+b 0
+b 40
+b 57
+b 2
+b 3
+b 82
+b 92
+b 79
+b 1
+b 26
+b 27
+b 24
+b 2
+b 3
+b 0
+b 1
+b 48
+b 46
+b 2
+b 39
+b 41
+b 42
+b 44
+b 63
+b 39
+b 2
+b 10
+b 12
+b 8
+b 1
+b 14
+b 11
+b 1
+b 6
+b 8
+b 10
+b 12
+b 10
+b 1
+b 55
+b 9
+b 10
+b 21
+b 8
+b 1
+b 20
+b 1
+b 167
+b 174
+b 190
+b 191
+b 166
+b 1
+b 1
+b 30
+b 42
+b 43
+b 105
+b 160
+b 463
+b 464
+b 482
+b 463
+b 1
+b 479
+b 2
+b 140
+b 142
+b 143
+b 152
+b 142
+b 1
+b 149
+b 1
+b 4
+b 6
+b 8
+b 6
+b 1
+b 27
+b 240
+b 238
+b 1
+b 2
+b 4
+b 13
+b 11
+b 2
+b 6
+b 39
+b 41
+b 37
+b 1
+b 6
+b 1
+b 43
+b 45
+b 81
+b 82
+b 79
+b 2
+b 45
+b 1
+b 7
+b 6
+b 1
+b 74
+b 76
+b 74
+b 1
+b 175
+b 34
+b 31
+b 1
+b 9
+b 6
+b 1
+b 10
+b 10
+b 1
+b 103
+b 105
+b 106
+b 103
+b 2
+b 4
+b 8
+b 19
+b 21
+b 22
+b 31
+b 103
+b 123
+b 121
+b 2
+b 102
+b 1
+b 64
+b 65
+b 84
+b 14
+b 12
+b 1
+b 7
+b 8
+b 24
+b 26
+b 5
+b 2
+b 19
+b 36
+b 44
+b 34
+b 3
+b 18
+b 1
+b 37
+b 1
+b 3
+b 30
+b 47
+b 48
+b 47
+b 2
+b 27
+b 1
+b 17
+b 17
+b 1
+b 3
+b 26
+b 27
+b 45
+b 26
+b 1
+b 42
+b 1
+b 273
+b 280
+b 279
+b 1
+b 126
+b 132
+b 12
+b 11
+b 1
+b 9
+b 10
+b 7
+b 2
+b 148
+b 149
+b 148
+b 1
+b 2
+b 91
+b 89
+b 2
+b 4
+b 4
+b 1
+b 0
+b 1
+b 65
+b 284
+b 285
+b 287
+b 289
+b 4
+b 84
+b 85
+b 98
+b 83
+b 1
+b 97
+b 1
+b 9
+b 19
+b 20
+b 2
+b 319
+b 321
+b 323
+b 324
+b 330
+b 321
+b 2
+b 328
+b 1
+b 71
+b 23
+b 24
+b 26
+b 71
+b 114
+b 115
+b 117
+b 69
+b 2
+b 112
+b 2
+b 167
+b 119
+b 120
+b 118
+b 1
+b 148
+b 146
+b 1
+b 63
+b 64
+b 80
+b 63
+b 2
+b 75
+b 1
+b 74
+b 75
+b 77
+b 79
+b 74
+b 2
+b 66
+b 83
+b 63
+b 1
+b 80
+b 1
+b 30
+b 6
+b 8
+b 9
+b 22
+b 8
+b 1
+b 19
+b 2
+b 70
+b 71
+b 73
+b 70
+b 2
+b 29
+b 29
+b 1
+b 466
+b 481
+b 525
+b 479
+b 1
+b 465
+b 1
+b 42
+b 44
+b 52
+b 50
+b 1
+b 14
+b 13
+b 1
+b 17
+b 18
+b 25
+b 24
+b 1
+b 2
+b 122
+b 140
+b 141
+b 146
+b 148
+b 138
+b 2
+b 42
+b 51
+b 46
+b 48
+b 49
+b 1
+b 156
+b 174
+b 1
+b 36
+b 48
+b 47
+b 1
+b 12
+b 10
+b 1
+b 35
+b 37
+b 39
+b 40
+b 42
+b 44
+b 37
+b 2
+b 42
+b 1
+b 34
+b 16
+b 20
+b 21
+b 33
+b 34
+b 20
+b 1
+b 30
+b 3
+b 19
+b 16
+b 1
+b 380
+b 382
+b 382
+b 1
+b 29
+b 28
+b 1
+b 2
+b 3
+b 0
+b 2
+b 84
+b 6
+b 3
+b 4
+b 6
+b 8
+b 10
+b 11
+b 19
+b 2
+b 1
+b 9
+b 2
+b 12
+b 34
+b 35
+b 32
+b 2
+b 11
+b 1
+b 60
+b 73
+b 95
+b 93
+b 2
+b 0
+b 2
+b 17
+b 18
+b 0
+b 1
+b 132
+b 133
+b 135
+b 137
+b 130
+b 2
+b 135
+b 1
+b 13
+b 13
+b 1
+b 46
+b 54
+b 32
+b 31
+b 1
+b 60
+b 72
+b 73
+b 84
+b 58
+b 1
+b 71
+b 2
+b 79
+b 1
+b 49
+b 49
+b 1
+b 30
+b 36
+b 37
+b 28
+b 1
+b 35
+b 2
+b 38
+b 40
+b 35
+b 1
+b 4
+b 8
+b 9
+b 6
+b 3
+b 168
+b 170
+b 171
+b 170
+b 1
+b 192
+b 196
+b 189
+b 1
+b 149
+b 31
+b 32
+b 34
+b 36
+b 30
+b 1
+b 1
+b 0
+b 1
+b 12
+b 13
+b 10
+b 2
+b 16
+b 18
+b 14
+b 1
+b 24
+b 38
+b 39
+b 24
+b 1
+b 36
+b 69
+b 71
+b 73
+b 75
+b 76
+b 78
+b 80
+b 73
+b 2
+b 78
+b 1
+b 199
+b 201
+b 199
+b 1
+b 52
+b 16
+b 16
+b 1
+b 14
+b 15
+b 17
+b 19
+b 14
+b 2
+b 5
+b 24
+b 25
+b 27
+b 29
+b 23
+b 1
+b 66
+b 68
+b 70
+b 72
+b 70
+b 1
+b 78
+b 80
+b 81
+b 90
+b 92
+b 78
+b 2
+b 90
+b 1
+b 165
+b 162
+b 1
+b 43
+b 48
+b 49
+b 48
+b 1
+b 4
+b 47
+b 88
+b 100
+b 87
+b 2
+b 96
+b 1
+b 19
+b 111
+b 113
+b 115
+b 116
+b 113
+b 2
+b 50
+b 48
+b 1
+b 269
+b 268
+b 1
+b 117
+b 118
+b 120
+b 117
+b 2
+b 1
+b 17
+b 89
+b 91
+b 92
+b 102
+b 87
+b 1
+b 90
+b 2
+b 64
+b 44
+b 43
+b 1
+b 14
+b 16
+b 18
+b 19
+b 18
+b 2
+b 4
+b 81
+b 79
+b 1
+b 35
+b 36
+b 43
+b 35
+b 1
+b 6
+b 8
+b 29
+b 30
+b 32
+b 34
+b 34
+b 1
+b 26
+b 1
+b 199
+b 200
+b 199
+b 1
+b 0
+b 2
+b 0
+b 1
+b 7
+b 15
+b 42
+b 67
+b 40
+b 1
+b 4
+b 5
+b 4
+b 2
+b 326
+b 34
+b 34
+b 1
+b 3
+b 1
+b 1
+b 36
+b 4
+b 5
+b 16
+b 2
+b 2
+b 189
+b 203
+b 205
+b 206
+b 214
+b 205
+b 2
+b 186
+b 1
+b 198
+b 1
+b 17
+b 113
+b 114
+b 122
+b 112
+b 1
+b 121
+b 1
+b 11
+b 12
+b 33
+b 10
+b 1
+b 32
+b 1
+b 9
+b 33
+b 64
+b 66
+b 67
+b 66
+b 1
+b 13
+b 12
+b 2
+b 39
+b 54
+b 79
+b 80
+b 78
+b 1
+b 4
+b 2
+b 2
+b 173
+b 174
+b 173
+b 2
+b 151
+b 150
+b 1
+b 194
+b 196
+b 198
+b 199
+b 196
+b 2
+b 4
+b 34
+b 36
+b 36
+b 1
+b 19
+b 21
+b 23
+b 24
+b 21
+b 2
+b 233
+b 232
+b 1
+b 45
+b 46
+b 63
+b 67
+b 43
+b 2
+b 64
+b 1
+b 114
+b 121
+b 122
+b 124
+b 124
+b 1
+b 6
+b 5
+b 1
+b 164
+b 163
+b 1
+b 25
+b 26
+b 34
+b 25
+b 2
+b 30
+b 1
+b 87
+b 86
+b 1
+b 9
+b 10
+b 9
+b 2
+b 13
+b 18
+b 11
+b 1
+b 21
+b 20
+b 1
+b 1
+b 54
+b 54
+b 1
+b 1
+b 23
+b 23
+b 1
+b 130
+b 128
+b 2
+b 87
+b 89
+b 90
+b 95
+b 87
+b 2
+b 10
+b 8
+b 1
+b 79
+b 80
+b 87
+b 11
+b 106
+b 108
+b 109
+b 42
+b 32
+b 30
+b 1
+b 44
+b 43
+b 1
+b 0
+b 2
+b 35
+b 47
+b 35
+b 1
+b 44
+b 1
+b 7
+b 4
+b 3
+b 3
+b 1
+b 2
+b 4
+b 1
+b 3
+b 150
+b 152
+b 154
+b 160
+b 148
+b 1
+b 158
+b 1
+b 27
+b 26
+b 1
+b 63
+b 69
+b 68
+b 2
+b 5
+b 6
+b 3
+b 2
+b 3
+b 193
+b 3
+b 4
+b 6
+b 8
+b 56
+b 58
+b 74
+b 75
+b 77
+b 79
+b 54
+b 1
+b 73
+b 2
+b 432
+b 434
+b 436
+b 438
+b 439
+b 436
+b 2
+b 8
+b 6
+b 1
+b 15
+b 24
+b 25
+b 30
+b 23
+b 1
+b 11
+b 11
+b 1
+b 1
+b 8
+b 0
+b 1
+b 80
+b 82
+b 104
+b 80
+b 1
+b 30
+b 30
+b 1
+b 19
+b 21
+b 22
+b 21
+b 1
+b 68
+b 5
+b 9
+b 10
+b 3
+b 2
+b 6
+b 8
+b 8
+b 1
+b 9
+b 11
+b 13
+b 14
+b 11
+b 2
+b 8
+b 10
+b 12
+b 8
+b 1
+b 75
+b 96
+b 97
+b 2
+b 62
+b 63
+b 65
+b 71
+b 73
+b 61
+b 1
+b 72
+b 1
+b 18
+b 17
+b 1
+b 3
+b 8
+b 9
+b 15
+b 17
+b 6
+b 2
+b 15
+b 1
+b 12
+b 9
+b 1
+b 90
+b 92
+b 94
+b 95
+b 97
+b 99
+b 92
+b 2
+b 97
+b 1
+b 144
+b 143
+b 2
+b 26
+b 28
+b 29
+b 31
+b 26
+b 2
+b 14
+b 10
+b 10
+b 1
+b 13
+b 128
+b 1
+b 116
+b 30
+b 31
+b 49
+b 29
+b 1
+b 45
+b 1
+b 81
+b 78
+b 1
+b 69
+b 71
+b 72
+b 71
+b 1
+b 16
+b 14
+b 3
+b 10
+b 9
+b 1
+b 22
+b 20
+b 2
+b 11
+b 0
+b 2
+b 4
+b 468
+b 467
+b 1
+b 8
+b 46
+b 212
+b 18
+b 19
+b 116
+b 113
+b 1
+b 181
+b 179
+b 1
+b 182
+b 183
+b 201
+b 182
+b 1
+b 51
+b 1
+b 62
+b 63
+b 69
+b 68
+b 2
+b 19
+b 21
+b 21
+b 1
+b 82
+b 83
+b 82
+b 2
+b 7
+b 6
+b 1
+b 490
+b 501
+b 488
+b 1
+b 102
+b 103
+b 165
+b 102
+b 2
+b 160
+b 1
+b 50
+b 50
+b 1
+b 101
+b 112
+b 9
+b 29
+b 29
+b 1
+b 6
+b 1
+b 94
+b 108
+b 110
+b 111
+b 110
+b 1
+b 105
+b 1
+b 0
+b 0
+b 1
+b 23
+b 25
+b 27
+b 28
+b 25
+b 2
+b 10
+b 17
+b 16
+b 2
+b 158
+b 95
+b 93
+b 2
+b 0
+b 1
+b 28
+b 0
+b 1
+b 96
+b 98
+b 100
+b 96
+b 1
+b 86
+b 13
+b 14
+b 65
+b 64
+b 1
+b 9
+b 12
+b 12
+b 1
+b 3
+b 4
+b 6
+b 3
+b 2
+b 7
+b 9
+b 11
+b 13
+b 9
+b 1
+b 77
+b 136
+b 134
+b 3
+b 76
+b 1
+b 308
+b 310
+b 310
+b 1
+b 314
+b 39
+b 51
+b 26
+b 53
+b 52
+b 2
+b 6
+b 5
+b 1
+b 76
+b 60
+b 80
+b 52
+b 53
+b 52
+b 2
+b 69
+b 75
+b 80
+b 79
+b 1
+b 232
+b 3
+b 4
+b 3
+b 1
+b 7
+b 41
+b 39
+b 1
+b 9
+b 8
+b 2
+b 3
+b 4
+b 2
+b 1
+b 0
+b 2
+b 15
+b 25
+b 26
+b 49
+b 25
+b 1
+b 46
+b 1
+b 73
+b 82
+b 83
+b 85
+b 87
+b 81
+b 1
+b 72
+b 1
+b 7
+b 204
+b 58
+b 59
+b 5
+b 77
+b 79
+b 0
+b 1
+b 1
+b 0
+b 1
+b 103
+b 13
+b 30
+b 82
+b 133
+b 134
+b 143
+b 61
+b 58
+b 1
+b 39
+b 40
+b 37
+b 2
+b 18
+b 17
+b 1
+b 40
+b 61
+b 60
+b 2
+b 10
+b 16
+b 8
+b 1
+b 77
+b 116
+b 124
+b 125
+b 127
+b 75
+b 1
+b 123
+b 2
+b 5
+b 7
+b 9
+b 11
+b 13
+b 15
+b 13
+b 3
+b 2
+b 1
+b 21
+b 12
+b 2
+b 3
+b 102
+b 14
+b 4
+b 5
+b 2
+b 47
+b 49
+b 49
+b 1
+b 70
+b 72
+b 67
+b 1
+b 15
+b 86
+b 88
+b 89
+b 97
+b 253
+b 259
+b 260
+b 9
+b 43
+b 45
+b 62
+b 60
+b 3
+b 40
+b 1
+b 93
+b 93
+b 94
+b 96
+b 98
+b 6
+b 8
+b 10
+b 11
+b 18
+b 8
+b 2
+b 15
+b 2
+b 4
+b 6
+b 7
+b 4
+b 2
+b 1
+b 9
+b 8
+b 1
+b 27
+b 25
+b 1
+b 64
+b 65
+b 67
+b 64
+b 2
+b 0
+b 159
+b 165
+b 166
+b 165
+b 1
+b 4
+b 2
+b 1
+b 115
+b 117
+b 117
+b 1
+b 19
+b 0
+b 1
+b 0
+b 2
+b 64
+b 73
+b 74
+b 76
+b 63
+b 2
+b 70
+b 1
+b 47
+b 160
+b 170
+b 181
+b 168
+b 3
+b 159
+b 1
+b 173
+b 1
+b 49
+b 50
+b 65
+b 48
+b 1
+b 12
+b 12
+b 1
+b 18
+b 20
+b 22
+b 18
+b 1
+b 334
+b 344
+b 346
+b 344
+b 1
+b 110
+b 119
+b 120
+b 109
+b 1
+b 24
+b 31
+b 27
+b 19
+b 4
+b 152
+b 154
+b 156
+b 157
+b 166
+b 152
+b 1
+b 18
+b 139
+b 140
+b 145
+b 56
+b 7
+b 20
+b 21
+b 31
+b 122
+b 4
+b 6
+b 8
+b 6
+b 3
+b 0
+b 1
+b 140
+b 153
+b 154
+b 156
+b 65
+b 96
+b 97
+b 144
+b 146
+b 95
+b 1
+b 145
+b 1
+b 64
+b 77
+b 78
+b 81
+b 63
+b 2
+b 73
+b 2
+b 11
+b 10
+b 1
+b 79
+b 81
+b 81
+b 1
+b 10
+b 11
+b 10
+b 1
+b 13
+b 19
+b 30
+b 36
+b 37
+b 39
+b 41
+b 17
+b 1
+b 35
+b 2
+b 141
+b 12
+b 18
+b 19
+b 24
+b 18
+b 1
+b 21
+b 2
+b 103
+b 31
+b 52
+b 53
+b 38
+b 37
+b 1
+b 113
+b 14
+b 9
+b 139
+b 139
+b 1
+b 7
+b 9
+b 11
+b 12
+b 9
+b 2
+b 1
+b 127
+b 135
+b 136
+b 148
+b 133
+b 2
+b 126
+b 1
+b 31
+b 57
+b 58
+b 57
+b 1
+b 41
+b 38
+b 1
+b 301
+b 326
+b 336
+b 338
+b 340
+b 341
+b 300
+b 1
+b 339
+b 1
+b 21
+b 74
+b 76
+b 77
+b 86
+b 76
+b 1
+b 23
+b 30
+b 31
+b 30
+b 1
+b 6
+b 0
+b 12
+b 72
+b 81
+b 29
+b 46
+b 47
+b 46
+b 2
+b 26
+b 1
+b 10
+b 8
+b 1
+b 100
+b 126
+b 143
+b 99
+b 1
+b 51
+b 16
+b 5
+b 6
+b 8
+b 17
+b 50
+b 52
+b 54
+b 55
+b 48
+b 1
+b 53
+b 1
+b 7
+b 16
+b 24
+b 25
+b 31
+b 15
+b 2
+b 20
+b 2
+b 26
+b 1
+b 5
+b 78
+b 80
+b 81
+b 87
+b 5
+b 122
+b 124
+b 124
+b 1
+b 12
+b 13
+b 1
+b 54
+b 55
+b 63
+b 62
+b 1
+b 42
+b 9
+b 25
+b 25
+b 1
+b 207
+b 209
+b 3
+b 2
+b 1
+b 11
+b 19
+b 21
+b 23
+b 9
+b 1
+b 108
+b 18
+b 20
+b 105
+b 105
+b 1
+b 2
+b 37
+b 39
+b 59
+b 58
+b 1
+b 3
+b 5
+b 7
+b 1
+b 1
+b 87
+b 142
+b 144
+b 145
+b 142
+b 2
+b 1
+b 0
+b 2
+b 24
+b 45
+b 46
+b 65
+b 43
+b 2
+b 62
+b 1
+b 86
+b 85
+b 2
+b 80
+b 77
+b 1
+b 4
+b 6
+b 88
+b 138
+b 139
+b 141
+b 88
+b 1
+b 136
+b 1
+b 0
+b 0
+b 1
+b 163
+b 170
+b 171
+b 75
+b 16
+b 97
+b 98
+b 108
+b 97
+b 2
+b 14
+b 1
+b 101
+b 1
+b 310
+b 14
+b 16
+b 17
+b 14
+b 2
+b 30
+b 29
+b 1
+b 138
+b 139
+b 141
+b 178
+b 135
+b 1
+b 3
+b 8
+b 149
+b 6
+b 6
+b 1
+b 13
+b 14
+b 28
+b 11
+b 2
+b 25
+b 1
+b 31
+b 33
+b 0
+b 39
+b 16
+b 17
+b 16
+b 1
+b 0
+b 6
+b 413
+b 429
+b 431
+b 432
+b 434
+b 412
+b 2
+b 427
+b 2
+b 21
+b 94
+b 91
+b 1
+b 52
+b 50
+b 2
+b 0
+b 2
+b 20
+b 71
+b 71
+b 1
+b 10
+b 11
+b 10
+b 2
+b 7
+b 1
+b 44
+b 25
+b 26
+b 25
+b 2
+b 17
+b 17
+b 1
+b 176
+b 178
+b 39
+b 18
+b 45
+b 47
+b 49
+b 50
+b 71
+b 353
+b 12
+b 18
+b 19
+b 21
+b 4
+b 21
+b 23
+b 3
+b 1
+b 158
+b 155
+b 1
+b 6
+b 8
+b 9
+b 11
+b 11
+b 1
+b 95
+b 103
+b 105
+b 106
+b 159
+b 55
+b 63
+b 64
+b 79
+b 98
+b 63
+b 2
+b 75
+b 2
+b 52
+b 1
+b 70
+b 76
+b 77
+b 79
+b 81
+b 76
+b 2
+b 67
+b 1
+b 120
+b 122
+b 124
+b 126
+b 128
+b 130
+b 126
+b 1
+b 18
+b 20
+b 21
+b 31
+b 33
+b 20
+b 2
+b 27
+b 1
+b 15
+b 1
+b 140
+b 153
+b 154
+b 158
+b 139
+b 2
+b 150
+b 1
+b 24
+b 32
+b 34
+b 30
+b 1
+b 33
+b 34
+b 52
+b 31
+b 2
+b 49
+b 1
+b 480
+b 482
+b 483
+b 482
+b 1
+b 82
+b 252
+b 251
+b 1
+b 55
+b 69
+b 70
+b 69
+b 1
+b 14
+b 14
+b 1
+b 39
+b 41
+b 211
+b 212
+b 245
+b 37
+b 1
+b 210
+b 2
+b 239
+b 1
+b 8
+b 10
+b 61
+b 8
+b 1
+b 0
+b 1
+b 8
+b 129
+b 179
+b 181
+b 182
+b 207
+b 179
+b 2
+b 205
+b 1
+b 130
+b 132
+b 134
+b 136
+b 138
+b 132
+b 1
+b 97
+b 98
+b 112
+b 95
+b 2
+b 110
+b 1
+b 206
+b 247
+b 205
+b 2
+b 243
+b 1
+b 134
+b 43
+b 214
+b 216
+b 234
+b 235
+b 233
+b 1
+b 233
+b 251
+b 231
+b 2
+b 3
+b 1
+b 1
+b 18
+b 20
+b 37
+b 36
+b 1
+b 4
+b 2
+b 2
+b 90
+b 92
+b 94
+b 100
+b 101
+b 92
+b 1
+b 1
+b 27
+b 0
+b 2
+b 0
+b 25
+b 33
+b 40
+b 24
+b 2
+b 129
+b 140
+b 127
+b 2
+b 18
+b 20
+b 22
+b 23
+b 20
+b 2
+b 37
+b 39
+b 40
+b 42
+b 51
+b 39
+b 2
+b 1
+b 0
+b 1
+b 77
+b 77
+b 1
+b 57
+b 58
+b 60
+b 67
+b 55
+b 2
+b 64
+b 2
+b 57
+b 89
+b 87
+b 1
+b 0
+b 1
+b 16
+b 0
+b 1
+b 16
+b 28
+b 29
+b 31
+b 33
+b 28
+b 2
+b 0
+b 42
+b 49
+b 2
+b 36
+b 43
+b 44
+b 41
+b 2
+b 4
+b 4
+b 34
+b 4
+b 1
+b 7
+b 23
+b 24
+b 50
+b 22
+b 1
+b 48
+b 1
+b 3
+b 13
+b 86
+b 87
+b 89
+b 95
+b 94
+b 1
+b 196
+b 210
+b 211
+b 208
+b 2
+b 309
+b 308
+b 1
+b 7
+b 8
+b 15
+b 15
+b 13
+b 1
+b 1
+b 0
+b 1
+b 111
+b 188
+b 189
+b 188
+b 1
+b 96
+b 94
+b 1
+b 31
+b 78
+b 79
+b 78
+b 1
+b 104
+b 102
+b 1
+b 14
+b 14
+b 1
+b 39
+b 41
+b 42
+b 47
+b 39
+b 2
+b 66
+b 76
+b 10
+b 8
+b 1
+b 0
+b 1
+b 16
+b 15
+b 2
+b 115
+b 6
+b 341
+b 342
+b 338
+b 1
+b 7
+b 5
+b 1
+b 47
+b 62
+b 63
+b 47
+b 1
+b 59
+b 2
+b 28
+b 25
+b 1
+b 28
+b 37
+b 38
+b 40
+b 48
+b 6
+b 60
+b 61
+b 80
+b 60
+b 1
+b 77
+b 2
+b 69
+b 67
+b 1
+b 47
+b 48
+b 54
+b 45
+b 2
+b 52
+b 1
+b 299
+b 301
+b 303
+b 133
+b 134
+b 146
+b 131
+b 2
+b 143
+b 1
+b 790
+b 789
+b 1
+b 3
+b 52
+b 5
+b 7
+b 8
+b 19
+b 7
+b 1
+b 8
+b 34
+b 35
+b 33
+b 1
+b 35
+b 13
+b 12
+b 2
+b 15
+b 23
+b 39
+b 41
+b 43
+b 44
+b 13
+b 3
+b 18
+b 2
+b 39
+b 1
+b 6
+b 4
+b 2
+b 3
+b 5
+b 1
+b 23
+b 24
+b 21
+b 3
+b 0
+b 1
+b 23
+b 242
+b 252
+b 253
+b 250
+b 2
+b 241
+b 1
+b 4
+b 10
+b 161
+b 177
+b 0
+b 27
+b 29
+b 4
+b 0
+b 2
+b 82
+b 84
+b 86
+b 87
+b 93
+b 4
+b 14
+b 16
+b 12
+b 1
+b 3
+b 1
+b 291
+b 300
+b 302
+b 303
+b 313
+b 291
+b 1
+b 299
+b 2
+b 21
+b 23
+b 24
+b 23
+b 1
+b 1
+b 1
+b 1
+b 44
+b 68
+b 69
+b 71
+b 67
+b 1
+b 70
+b 1
+b 251
+b 250
+b 2
+b 3
+b 5
+b 7
+b 70
+b 72
+b 72
+b 1
+b 6
+b 8
+b 10
+b 11
+b 8
+b 2
+b 5
+b 71
+b 73
+b 80
+b 82
+b 84
+b 85
+b 73
+b 1
+b 4
+b 50
+b 1
+b 138
+b 194
+b 195
+b 197
+b 194
+b 2
+b 114
+b 114
+b 1
+b 12
+b 63
+b 66
+b 92
+b 90
+b 2
+b 65
+b 1
+b 8
+b 9
+b 11
+b 4
+b 42
+b 43
+b 51
+b 41
+b 1
+b 49
+b 1
+b 20
+b 18
+b 3
+b 104
+b 125
+b 126
+b 35
+b 99
+b 3
+b 11
+b 10
+b 1
+b 133
+b 135
+b 136
+b 138
+b 145
+b 135
+b 2
+b 148
+b 150
+b 151
+b 157
+b 159
+b 150
+b 2
+b 153
+b 1
+b 145
+b 1
+b 6
+b 8
+b 10
+b 11
+b 8
+b 2
+b 15
+b 15
+b 1
+b 145
+b 32
+b 29
+b 1
+b 4
+b 4
+b 2
+b 2
+b 125
+b 29
+b 9
+b 11
+b 12
+b 6
+b 1
+b 10
+b 1
+b 182
+b 182
+b 1
+b 5
+b 1
+b 2
+b 0
+b 1
+b 56
+b 83
+b 85
+b 85
+b 1
+b 54
+b 1
+b 8
+b 14
+b 15
+b 17
+b 25
+b 14
+b 2
+b 21
+b 1
+b 8
+b 10
+b 11
+b 13
+b 47
+b 52
+b 10
+b 2
+b 43
+b 2
+b 27
+b 43
+b 25
+b 1
+b 92
+b 79
+b 80
+b 78
+b 1
+b 67
+b 65
+b 1
+b 13
+b 17
+b 13
+b 1
+b 14
+b 1
+b 16
+b 21
+b 22
+b 24
+b 25
+b 21
+b 3
+b 94
+b 24
+b 25
+b 24
+b 2
+b 13
+b 12
+b 1
+b 12
+b 10
+b 2
+b 57
+b 57
+b 1
+b 7
+b 8
+b 23
+b 6
+b 1
+b 172
+b 174
+b 175
+b 189
+b 188
+b 1
+b 36
+b 103
+b 116
+b 117
+b 119
+b 121
+b 123
+b 134
+b 15
+b 0
+b 2
+b 209
+b 211
+b 212
+b 223
+b 211
+b 1
+b 220
+b 1
+b 10
+b 303
+b 345
+b 346
+b 117
+b 119
+b 121
+b 122
+b 121
+b 2
+b 114
+b 1
+b 1
+b 0
+b 1
+b 161
+b 158
+b 1
+b 2
+b 10
+b 9
+b 1
+b 1
+b 2
+b 14
+b 21
+b 31
+b 32
+b 34
+b 36
+b 20
+b 2
+b 27
+b 2
+b 32
+b 1
+b 31
+b 3
+b 8
+b 6
+b 1
+b 60
+b 77
+b 78
+b 80
+b 28
+b 27
+b 1
+b 67
+b 71
+b 72
+b 4
+b 3
+b 2
+b 100
+b 99
+b 1
+b 16
+b 17
+b 32
+b 16
+b 2
+b 29
+b 1
+b 23
+b 24
+b 23
+b 2
+b 21
+b 21
+b 1
+b 5
+b 2
+b 1
+b 5
+b 6
+b 13
+b 3
+b 2
+b 469
+b 466
+b 1
+b 46
+b 47
+b 53
+b 55
+b 44
+b 2
+b 53
+b 1
+b 121
+b 125
+b 126
+b 138
+b 143
+b 125
+b 2
+b 134
+b 1
+b 7
+b 6
+b 2
+b 124
+b 215
+b 214
+b 1
+b 80
+b 97
+b 99
+b 107
+b 108
+b 97
+b 1
+b 139
+b 145
+b 146
+b 148
+b 159
+b 137
+b 2
+b 146
+b 1
+b 17
+b 23
+b 24
+b 21
+b 2
+b 16
+b 1
+b 37
+b 36
+b 2
+b 7
+b 107
+b 109
+b 110
+b 139
+b 107
+b 2
+b 137
+b 1
+b 89
+b 113
+b 112
+b 2
+b 161
+b 162
+b 170
+b 160
+b 1
+b 97
+b 99
+b 100
+b 108
+b 97
+b 2
+b 11
+b 13
+b 14
+b 25
+b 11
+b 11
+b 4
+b 6
+b 7
+b 45
+b 43
+b 1
+b 421
+b 420
+b 1
+b 159
+b 160
+b 162
+b 175
+b 157
+b 2
+b 173
+b 1
+b 59
+b 8
+b 9
+b 7
+b 1
+b 0
+b 22
+b 21
+b 2
+b 4
+b 2
+b 2
+b 27
+b 29
+b 44
+b 24
+b 1
+b 502
+b 3
+b 5
+b 12
+b 13
+b 5
+b 1
+b 10
+b 1
+b 47
+b 49
+b 45
+b 1
+b 19
+b 20
+b 17
+b 2
+b 13
+b 12
+b 1
+b 118
+b 120
+b 34
+b 153
+b 163
+b 164
+b 192
+b 194
+b 161
+b 2
+b 192
+b 1
+b 152
+b 1
+b 144
+b 143
+b 1
+b 105
+b 106
+b 108
+b 105
+b 2
+b 153
+b 6
+b 8
+b 10
+b 4
+b 1
+b 9
+b 1
+b 15
+b 15
+b 1
+b 3
+b 91
+b 93
+b 94
+b 96
+b 114
+b 43
+b 62
+b 61
+b 1
+b 45
+b 57
+b 58
+b 60
+b 73
+b 57
+b 2
+b 558
+b 566
+b 567
+b 577
+b 564
+b 2
+b 575
+b 1
+b 6
+b 11
+b 13
+b 8
+b 1
+b 287
+b 2
+b 3
+b 10
+b 2
+b 1
+b 44
+b 46
+b 48
+b 49
+b 53
+b 46
+b 2
+b 4
+b 2
+b 2
+b 79
+b 84
+b 85
+b 78
+b 2
+b 81
+b 1
+b 0
+b 2
+b 6
+b 135
+b 137
+b 145
+b 135
+b 1
+b 157
+b 158
+b 160
+b 8
+b 64
+b 9
+b 19
+b 8
+b 2
+b 1
+b 2
+b 14
+b 0
+b 1
+b 57
+b 59
+b 60
+b 81
+b 59
+b 1
+b 54
+b 1
+b 46
+b 44
+b 3
+b 22
+b 70
+b 71
+b 73
+b 70
+b 2
+b 56
+b 56
+b 1
+b 13
+b 15
+b 16
+b 24
+b 26
+b 24
+b 1
+b 42
+b 16
+b 17
+b 23
+b 384
+b 390
+b 392
+b 394
+b 395
+b 397
+b 399
+b 390
+b 1
+b 124
+b 126
+b 12
+b 11
+b 1
+b 191
+b 190
+b 1
+b 6
+b 7
+b 28
+b 4
+b 2
+b 26
+b 1
+b 263
+b 284
+b 286
+b 287
+b 261
+b 1
+b 283
+b 2
+b 0
+b 2
+b 50
+b 103
+b 105
+b 106
+b 112
+b 101
+b 1
+b 49
+b 1
+b 106
+b 103
+b 1
+b 6
+b 8
+b 9
+b 8
+b 1
+b 83
+b 80
+b 1
+b 11
+b 12
+b 9
+b 2
+b 10
+b 8
+b 20
+b 21
+b 6
+b 1
+b 19
+b 1
+b 3
+b 11
+b 13
+b 20
+b 7
+b 172
+b 183
+b 184
+b 186
+b 171
+b 2
+b 180
+b 1
+b 24
+b 85
+b 110
+b 112
+b 113
+b 85
+b 1
+b 109
+b 2
+b 8
+b 11
+b 22
+b 23
+b 10
+b 1
+b 2
+b 44
+b 25
+b 133
+b 0
+b 2
+b 0
+b 1
+b 31
+b 58
+b 59
+b 58
+b 1
+b 5
+b 5
+b 1
+b 101
+b 103
+b 103
+b 1
+b 20
+b 20
+b 1
+b 144
+b 141
+b 1
+b 14
+b 0
+b 2
+b 0
+b 1
+b 51
+b 49
+b 2
+b 110
+b 112
+b 113
+b 110
+b 2
+b 6
+b 27
+b 29
+b 31
+b 33
+b 27
+b 1
+b 64
+b 89
+b 97
+b 98
+b 146
+b 144
+b 1
+b 18
+b 19
+b 21
+b 18
+b 2
+b 15
+b 89
+b 90
+b 87
+b 2
+b 59
+b 110
+b 109
+b 1
+b 10
+b 22
+b 24
+b 26
+b 27
+b 22
+b 1
+b 48
+b 15
+b 24
+b 24
+b 1
+b 12
+b 1
+b 203
+b 211
+b 212
+b 201
+b 1
+b 210
+b 1
+b 1
+b 11
+b 13
+b 57
+b 56
+b 1
+b 16
+b 56
+b 58
+b 59
+b 89
+b 92
+b 94
+b 96
+b 97
+b 12
+b 14
+b 69
+b 70
+b 92
+b 93
+b 99
+b 68
+b 1
+b 91
+b 2
+b 25
+b 166
+b 465
+b 6
+b 5
+b 1
+b 135
+b 19
+b 20
+b 9
+b 6
+b 1
+b 5
+b 7
+b 9
+b 10
+b 12
+b 49
+b 7
+b 2
+b 46
+b 1
+b 8
+b 15
+b 16
+b 18
+b 156
+b 155
+b 1
+b 212
+b 233
+b 234
+b 248
+b 232
+b 1
+b 16
+b 0
+b 2
+b 31
+b 28
+b 1
+b 0
+b 1
+b 7
+b 0
+b 2
+b 3
+b 2
+b 186
+b 188
+b 190
+b 191
+b 193
+b 195
+b 197
+b 188
+b 2
+b 301
+b 348
+b 349
+b 348
+b 1
+b 299
+b 1
+b 148
+b 15
+b 17
+b 19
+b 20
+b 31
+b 15
+b 1
+b 59
+b 0
+b 2
+b 4
+b 29
+b 30
+b 41
+b 30
+b 1
+b 37
+b 1
+b 155
+b 156
+b 154
+b 1
+b 99
+b 98
+b 2
+b 77
+b 17
+b 28
+b 28
+b 1
+b 9
+b 8
+b 1
+b 40
+b 41
+b 40
+b 2
+b 4
+b 22
+b 2
+b 1
+b 76
+b 73
+b 1
+b 16
+b 60
+b 13
+b 15
+b 17
+b 0
+b 30
+b 57
+b 58
+b 114
+b 0
+b 143
+b 13
+b 11
+b 2
+b 0
+b 2
+b 233
+b 230
+b 1
+b 135
+b 136
+b 133
+b 2
+b 8
+b 9
+b 8
+b 2
+b 5
+b 2
+b 1
+b 307
+b 442
+b 443
+b 445
+b 305
+b 1
+b 441
+b 2
+b 1
+b 13
+b 11
+b 2
+b 5
+b 52
+b 3
+b 1
+b 59
+b 60
+b 112
+b 2
+b 82
+b 83
+b 82
+b 1
+b 34
+b 62
+b 60
+b 1
+b 35
+b 37
+b 39
+b 41
+b 35
+b 1
+b 144
+b 144
+b 1
+b 8
+b 9
+b 11
+b 13
+b 8
+b 2
+b 22
+b 25
+b 26
+b 28
+b 21
+b 4
+b 14
+b 30
+b 43
+b 44
+b 29
+b 1
+b 38
+b 1
+b 45
+b 37
+b 47
+b 48
+b 6
+b 14
+b 16
+b 12
+b 1
+b 5
+b 1
+b 39
+b 40
+b 42
+b 44
+b 134
+b 1
+b 13
+b 12
+b 1
+b 17
+b 18
+b 75
+b 263
+b 260
+b 1
+b 16
+b 17
+b 27
+b 32
+b 16
+b 2
+b 22
+b 1
+b 68
+b 70
+b 72
+b 73
+b 90
+b 92
+b 72
+b 1
+b 87
+b 1
+b 56
+b 75
+b 77
+b 73
+b 1
+b 0
+b 2
+b 3
+b 2
+b 1
+b 124
+b 123
+b 2
+b 2
+b 4
+b 214
+b 216
+b 217
+b 216
+b 2
+b 211
+b 1
+b 3
+b 5
+b 7
+b 8
+b 7
+b 1
+b 1
+b 72
+b 70
+b 1
+b 15
+b 12
+b 1
+b 39
+b 40
+b 37
+b 2
+b 130
+b 128
+b 1
+b 5
+b 150
+b 152
+b 153
+b 175
+b 152
+b 1
+b 3
+b 1
+b 4
+b 5
+b 32
+b 34
+b 32
+b 1
+b 1
+b 124
+b 4
+b 5
+b 7
+b 9
+b 11
+b 3
+b 1
+b 10
+b 1
+b 12
+b 23
+b 49
+b 48
+b 1
+b 34
+b 7
+b 6
+b 1
+b 25
+b 33
+b 24
+b 1
+b 1
+b 2
+b 22
+b 61
+b 59
+b 1
+b 58
+b 59
+b 57
+b 1
+b 4
+b 23
+b 36
+b 20
+b 21
+b 36
+b 36
+b 1
+b 0
+b 1
+b 6
+b 218
+b 217
+b 1
+b 159
+b 166
+b 157
+b 2
+b 154
+b 151
+b 1
+b 31
+b 82
+b 83
+b 82
+b 3
+b 55
+b 53
+b 1
+b 51
+b 53
+b 32
+b 40
+b 28
+b 30
+b 30
+b 1
+b 0
+b 1
+b 35
+b 0
+b 2
+b 31
+b 1
+b 14
+b 95
+b 35
+b 14
+b 15
+b 32
+b 12
+b 2
+b 106
+b 106
+b 1
+b 64
+b 65
+b 85
+b 63
+b 1
+b 16
+b 25
+b 26
+b 46
+b 14
+b 2
+b 23
+b 2
+b 39
+b 1
+b 134
+b 132
+b 2
+b 8
+b 25
+b 26
+b 25
+b 1
+b 128
+b 2
+b 4
+b 5
+b 7
+b 4
+b 2
+b 34
+b 32
+b 2
+b 382
+b 381
+b 1
+b 81
+b 82
+b 84
+b 92
+b 84
+b 1
+b 125
+b 137
+b 138
+b 140
+b 137
+b 2
+b 37
+b 39
+b 35
+b 1
+b 9
+b 10
+b 7
+b 2
+b 6
+b 8
+b 3
+b 1
+b 160
+b 162
+b 163
+b 175
+b 158
+b 1
+b 5
+b 17
+b 2
+b 4
+b 5
+b 30
+b 4
+b 1
+b 27
+b 2
+b 0
+b 2
+b 34
+b 40
+b 41
+b 38
+b 2
+b 33
+b 1
+b 2
+b 433
+b 68
+b 70
+b 72
+b 171
+b 206
+b 208
+b 209
+b 221
+b 208
+b 1
+b 169
+b 1
+b 127
+b 137
+b 136
+b 2
+b 61
+b 62
+b 78
+b 60
+b 1
+b 42
+b 66
+b 67
+b 75
+b 40
+b 1
+b 65
+b 1
+b 104
+b 106
+b 107
+b 109
+b 109
+b 1
+b 11
+b 62
+b 279
+b 121
+b 122
+b 136
+b 120
+b 1
+b 135
+b 1
+b 118
+b 116
+b 1
+b 20
+b 19
+b 2
+b 1
+b 2
+b 10
+b 0
+b 1
+b 269
+b 271
+b 273
+b 274
+b 286
+b 269
+b 1
+b 4
+b 303
+b 305
+b 307
+b 308
+b 303
+b 1
+b 12
+b 89
+b 89
+b 1
+b 5
+b 6
+b 8
+b 10
+b 12
+b 5
+b 2
+b 7
+b 6
+b 1
+b 161
+b 158
+b 1
+b 34
+b 35
+b 37
+b 44
+b 101
+b 99
+b 3
+b 20
+b 17
+b 1
+b 44
+b 44
+b 1
+b 43
+b 41
+b 1
+b 25
+b 30
+b 30
+b 1
+b 43
+b 40
+b 1
+b 20
+b 22
+b 29
+b 30
+b 18
+b 1
+b 51
+b 49
+b 1
+b 59
+b 57
+b 1
+b 63
+b 5
+b 18
+b 19
+b 96
+b 18
+b 1
+b 93
+b 2
+b 38
+b 106
+b 108
+b 104
+b 1
+b 26
+b 25
+b 1
+b 1
+b 2
+b 8
+b 0
+b 1
+b 45
+b 42
+b 1
+b 8
+b 9
+b 19
+b 6
+b 2
+b 16
+b 1
+b 15
+b 6
+b 18
+b 19
+b 6
+b 1
+b 1
+b 72
+b 5
+b 84
+b 63
+b 64
+b 72
+b 62
+b 1
+b 7
+b 5
+b 1
+b 100
+b 97
+b 1
+b 57
+b 67
+b 66
+b 2
+b 0
+b 1
+b 19
+b 21
+b 22
+b 21
+b 1
+b 9
+b 20
+b 61
+b 71
+b 72
+b 74
+b 76
+b 74
+b 1
+b 69
+b 73
+b 47
+b 45
+b 2
+b 4
+b 6
+b 7
+b 4
+b 2
+b 114
+b 122
+b 123
+b 129
+b 114
+b 1
+b 119
+b 2
+b 125
+b 1
+b 15
+b 15
+b 1
+b 29
+b 30
+b 29
+b 1
+b 4
+b 49
+b 17
+b 28
+b 15
+b 2
+b 26
+b 1
+b 54
+b 54
+b 1
+b 12
+b 13
+b 15
+b 12
+b 2
+b 27
+b 61
+b 62
+b 27
+b 1
+b 59
+b 1
+b 7
+b 380
+b 381
+b 379
+b 1
+b 20
+b 32
+b 33
+b 40
+b 87
+b 89
+b 85
+b 1
+b 3
+b 20
+b 22
+b 23
+b 41
+b 17
+b 1
+b 38
+b 1
+b 12
+b 26
+b 27
+b 29
+b 38
+b 25
+b 1
+b 11
+b 1
+b 85
+b 118
+b 2
+b 4
+b 6
+b 7
+b 27
+b 0
+b 1
+b 5
+b 1
+b 228
+b 228
+b 1
+b 131
+b 132
+b 138
+b 129
+b 2
+b 135
+b 1
+b 164
+b 164
+b 1
+b 69
+b 67
+b 1
+b 27
+b 28
+b 37
+b 74
+b 0
+b 32
+b 34
+b 35
+b 41
+b 47
+b 49
+b 51
+b 53
+b 176
+b 196
+b 197
+b 194
+b 2
+b 175
+b 1
+b 13
+b 10
+b 1
+b 28
+b 35
+b 13
+b 26
+b 0
+b 7
+b 8
+b 10
+b 12
+b 6
+b 1
+b 51
+b 29
+b 12
+b 11
+b 1
+b 144
+b 142
+b 2
+b 10
+b 11
+b 15
+b 46
+b 8
+b 2
+b 48
+b 58
+b 59
+b 61
+b 63
+b 57
+b 1
+b 62
+b 1
+b 2
+b 14
+b 15
+b 17
+b 27
+b 22
+b 24
+b 26
+b 143
+b 145
+b 241
+b 0
+b 2
+b 4
+b 2
+b 1
+b 47
+b 50
+b 52
+b 54
+b 54
+b 1
+b 0
+b 233
+b 234
+b 39
+b 38
+b 1
+b 54
+b 56
+b 26
+b 25
+b 1
+b 17
+b 18
+b 55
+b 14
+b 1
+b 165
+b 61
+b 71
+b 69
+b 2
+b 60
+b 1
+b 139
+b 175
+b 181
+b 138
+b 1
+b 170
+b 1
+b 158
+b 44
+b 2
+b 3
+b 101
+b 102
+b 104
+b 232
+b 234
+b 89
+b 125
+b 56
+b 85
+b 87
+b 89
+b 90
+b 97
+b 89
+b 1
+b 94
+b 2
+b 88
+b 0
+b 2
+b 2
+b 1
+b 219
+b 220
+b 249
+b 217
+b 2
+b 247
+b 1
+b 20
+b 26
+b 27
+b 29
+b 31
+b 24
+b 2
+b 19
+b 1
+b 8
+b 69
+b 68
+b 1
+b 92
+b 51
+b 64
+b 109
+b 2
+b 4
+b 5
+b 16
+b 4
+b 1
+b 24
+b 21
+b 1
+b 42
+b 42
+b 1
+b 2
+b 4
+b 6
+b 8
+b 9
+b 37
+b 37
+b 1
+b 81
+b 82
+b 81
+b 1
+b 1
+b 1
+b 16
+b 71
+b 72
+b 74
+b 76
+b 78
+b 14
+b 1
+b 70
+b 2
+b 9
+b 11
+b 6
+b 1
+b 0
+b 2
+b 80
+b 85
+b 84
+b 2
+b 361
+b 362
+b 361
+b 2
+b 6
+b 4
+b 1
+b 39
+b 40
+b 53
+b 39
+b 2
+b 49
+b 1
+b 6
+b 22
+b 3
+b 1
+b 19
+b 21
+b 29
+b 72
+b 79
+b 81
+b 82
+b 103
+b 70
+b 2
+b 79
+b 2
+b 96
+b 1
+b 105
+b 130
+b 131
+b 138
+b 143
+b 358
+b 374
+b 375
+b 64
+b 47
+b 48
+b 15
+b 22
+b 14
+b 1
+b 18
+b 1
+b 4
+b 104
+b 4
+b 2
+b 3
+b 2
+b 1
+b 5
+b 66
+b 13
+b 14
+b 16
+b 12
+b 1
+b 8
+b 6
+b 3
+b 135
+b 20
+b 19
+b 1
+b 28
+b 55
+b 57
+b 58
+b 55
+b 2
+b 216
+b 214
+b 1
+b 4
+b 7
+b 9
+b 10
+b 12
+b 14
+b 9
+b 2
+b 4
+b 1
+b 54
+b 56
+b 64
+b 65
+b 103
+b 54
+b 1
+b 34
+b 63
+b 64
+b 66
+b 68
+b 32
+b 1
+b 62
+b 2
+b 5
+b 11
+b 12
+b 38
+b 2
+b 1
+b 62
+b 93
+b 94
+b 93
+b 2
+b 60
+b 1
+b 71
+b 87
+b 68
+b 1
+b 0
+b 4
+b 75
+b 118
+b 4
+b 82
+b 17
+b 75
+b 73
+b 1
+b 16
+b 1
+b 20
+b 7
+b 6
+b 1
+b 17
+b 17
+b 1
+b 65
+b 67
+b 67
+b 1
+b 5
+b 4
+b 5
+b 7
+b 8
+b 3
+b 1
+b 6
+b 3
+b 50
+b 52
+b 54
+b 55
+b 75
+b 77
+b 54
+b 1
+b 72
+b 1
+b 5
+b 37
+b 48
+b 47
+b 1
+b 56
+b 54
+b 1
+b 9
+b 35
+b 67
+b 68
+b 65
+b 2
+b 34
+b 1
+b 0
+b 6
+b 69
+b 76
+b 77
+b 76
+b 1
+b 13
+b 13
+b 1
+b 13
+b 13
+b 1
+b 38
+b 4
+b 3
+b 1
+b 1
+b 2
+b 17
+b 0
+b 1
+b 228
+b 236
+b 234
+b 3
+b 227
+b 1
+b 85
+b 1
+b 0
+b 1
+b 106
+b 105
+b 1
+b 28
+b 29
+b 28
+b 2
+b 2
+b 7
+b 19
+b 20
+b 42
+b 19
+b 2
+b 39
+b 1
+b 153
+b 163
+b 184
+b 150
+b 1
+b 31
+b 7
+b 13
+b 6
+b 2
+b 9
+b 1
+b 58
+b 60
+b 61
+b 60
+b 2
+b 55
+b 1
+b 41
+b 40
+b 1
+b 0
+b 13
+b 33
+b 30
+b 1
+b 94
+b 95
+b 97
+b 99
+b 92
+b 2
+b 97
+b 1
+b 14
+b 16
+b 18
+b 19
+b 16
+b 2
+b 117
+b 177
+b 12
+b 11
+b 1
+b 6
+b 7
+b 6
+b 1
+b 15
+b 17
+b 17
+b 1
+b 9
+b 10
+b 8
+b 1
+b 109
+b 168
+b 77
+b 84
+b 76
+b 1
+b 63
+b 149
+b 150
+b 152
+b 152
+b 1
+b 2
+b 0
+b 3
+b 22
+b 29
+b 30
+b 20
+b 1
+b 131
+b 144
+b 146
+b 147
+b 176
+b 130
+b 2
+b 142
+b 2
+b 28
+b 30
+b 5
+b 5
+b 5
+b 1
+b 4
+b 5
+b 17
+b 4
+b 2
+b 9
+b 9
+b 1
+b 172
+b 170
+b 1
+b 45
+b 43
+b 1
+b 10
+b 11
+b 10
+b 2
+b 3
+b 3
+b 1
+b 1
+b 223
+b 48
+b 179
+b 195
+b 196
+b 211
+b 177
+b 1
+b 194
+b 1
+b 37
+b 7
+b 78
+b 9
+b 22
+b 7
+b 2
+b 28
+b 26
+b 2
+b 9
+b 11
+b 12
+b 17
+b 9
+b 2
+b 156
+b 25
+b 26
+b 22
+b 1
+b 94
+b 92
+b 1
+b 10
+b 19
+b 21
+b 23
+b 21
+b 1
+b 275
+b 274
+b 1
+b 297
+b 298
+b 304
+b 296
+b 1
+b 60
+b 65
+b 59
+b 1
+b 61
+b 1
+b 278
+b 63
+b 92
+b 93
+b 90
+b 2
+b 62
+b 1
+b 6
+b 4
+b 1
+b 26
+b 27
+b 29
+b 26
+b 2
+b 21
+b 20
+b 2
+b 0
+b 2
+b 120
+b 120
+b 1
+b 4
+b 5
+b 7
+b 2
+b 2
+b 8
+b 23
+b 24
+b 12
+b 43
+b 49
+b 50
+b 63
+b 42
+b 2
+b 10
+b 25
+b 27
+b 29
+b 25
+b 1
+b 46
+b 43
+b 1
+b 51
+b 53
+b 54
+b 51
+b 2
+b 223
+b 228
+b 182
+b 217
+b 218
+b 225
+b 215
+b 2
+b 182
+b 1
+b 114
+b 135
+b 136
+b 0
+b 2
+b 16
+b 2
+b 1
+b 13
+b 1
+b 72
+b 70
+b 1
+b 7
+b 6
+b 1
+b 0
+b 2
+b 4
+b 6
+b 7
+b 6
+b 24
+b 25
+b 33
+b 23
+b 1
+b 20
+b 4
+b 5
+b 7
+b 9
+b 11
+b 7
+b 1
+b 38
+b 44
+b 45
+b 47
+b 75
+b 77
+b 79
+b 80
+b 82
+b 111
+b 133
+b 73
+b 1
+b 103
+b 104
+b 114
+b 115
+b 117
+b 103
+b 2
+b 111
+b 1
+b 23
+b 96
+b 103
+b 94
+b 2
+b 127
+b 144
+b 0
+b 1
+b 60
+b 59
+b 1
+b 92
+b 109
+b 110
+b 123
+b 109
+b 2
+b 119
+b 2
+b 21
+b 22
+b 34
+b 35
+b 33
+b 1
+b 2
+b 0
+b 1
+b 273
+b 274
+b 278
+b 272
+b 1
+b 277
+b 1
+b 121
+b 148
+b 147
+b 2
+b 0
+b 2
+b 0
+b 1
+b 43
+b 15
+b 35
+b 36
+b 34
+b 1
+b 7
+b 4
+b 1
+b 5
+b 15
+b 13
+b 1
+b 57
+b 56
+b 1
+b 25
+b 26
+b 28
+b 50
+b 49
+b 1
+b 45
+b 53
+b 54
+b 45
+b 1
+b 50
+b 2
+b 33
+b 42
+b 48
+b 62
+b 63
+b 46
+b 1
+b 41
+b 1
+b 0
+b 2
+b 72
+b 74
+b 0
+b 26
+b 28
+b 36
+b 37
+b 39
+b 78
+b 79
+b 81
+b 24
+b 1
+b 35
+b 2
+b 58
+b 60
+b 62
+b 75
+b 27
+b 29
+b 29
+b 30
+b 32
+b 28
+b 1
+b 31
+b 1
+b 238
+b 236
+b 3
+b 69
+b 71
+b 73
+b 75
+b 72
+b 172
+b 170
+b 2
+b 3
+b 37
+b 50
+b 51
+b 56
+b 19
+b 27
+b 32
+b 33
+b 23
+b 21
+b 1
+b 0
+b 11
+b 1
+b 0
+b 1
+b 203
+b 203
+b 1
+b 17
+b 18
+b 20
+b 15
+b 2
+b 18
+b 1
+b 18
+b 20
+b 21
+b 29
+b 31
+b 20
+b 2
+b 25
+b 1
+b 15
+b 1
+b 11
+b 9
+b 1
+b 50
+b 51
+b 49
+b 1
+b 9
+b 19
+b 149
+b 150
+b 168
+b 149
+b 1
+b 165
+b 1
+b 235
+b 232
+b 1
+b 0
+b 2
+b 3
+b 14
+b 15
+b 34
+b 2
+b 2
+b 10
+b 2
+b 30
+b 1
+b 121
+b 326
+b 328
+b 330
+b 331
+b 324
+b 1
+b 329
+b 2
+b 102
+b 100
+b 1
+b 9
+b 10
+b 12
+b 8
+b 1
+b 5
+b 9
+b 9
+b 1
+b 3
+b 4
+b 11
+b 2
+b 1
+b 14
+b 19
+b 20
+b 18
+b 1
+b 19
+b 6
+b 5
+b 1
+b 64
+b 65
+b 69
+b 68
+b 1
+b 8
+b 30
+b 40
+b 42
+b 10
+b 20
+b 22
+b 24
+b 26
+b 9
+b 1
+b 96
+b 25
+b 27
+b 28
+b 69
+b 27
+b 1
+b 66
+b 2
+b 166
+b 175
+b 2
+b 105
+b 102
+b 1
+b 27
+b 4
+b 5
+b 7
+b 2
+b 2
+b 5
+b 1
+b 20
+b 8
+b 10
+b 12
+b 13
+b 6
+b 1
+b 11
+b 1
+b 106
+b 106
+b 1
+b 19
+b 20
+b 28
+b 18
+b 1
+b 37
+b 45
+b 45
+b 1
+b 546
+b 10
+b 17
+b 18
+b 0
+b 1
+b 6
+b 0
+b 1
+b 3
+b 2
+b 133
+b 181
+b 182
+b 184
+b 33
+b 35
+b 42
+b 57
+b 41
+b 2
+b 52
+b 1
+b 1
+b 2
+b 0
+b 1
+b 27
+b 32
+b 33
+b 32
+b 2
+b 24
+b 1
+b 15
+b 13
+b 1
+b 164
+b 15
+b 33
+b 31
+b 2
+b 28
+b 29
+b 38
+b 26
+b 2
+b 95
+b 97
+b 99
+b 101
+b 99
+b 1
+b 22
+b 22
+b 1
+b 22
+b 23
+b 25
+b 22
+b 2
+b 39
+b 41
+b 42
+b 37
+b 1
+b 5
+b 66
+b 65
+b 1
+b 60
+b 74
+b 75
+b 80
+b 74
+b 1
+b 77
+b 1
+b 175
+b 175
+b 1
+b 9
+b 16
+b 17
+b 19
+b 16
+b 2
+b 12
+b 34
+b 35
+b 39
+b 34
+b 1
+b 9
+b 1
+b 48
+b 55
+b 64
+b 65
+b 46
+b 2
+b 62
+b 2
+b 6
+b 7
+b 9
+b 18
+b 6
+b 2
+b 248
+b 18
+b 19
+b 12
+b 16
+b 16
+b 1
+b 90
+b 97
+b 99
+b 100
+b 102
+b 121
+b 89
+b 2
+b 95
+b 2
+b 242
+b 250
+b 248
+b 1
+b 174
+b 175
+b 177
+b 172
+b 2
+b 163
+b 27
+b 32
+b 25
+b 2
+b 132
+b 134
+b 136
+b 137
+b 172
+b 136
+b 2
+b 168
+b 1
+b 154
+b 150
+b 151
+b 153
+b 155
+b 153
+b 1
+b 46
+b 122
+b 124
+b 125
+b 130
+b 221
+b 253
+b 254
+b 256
+b 266
+b 251
+b 2
+b 220
+b 1
+b 252
+b 1
+b 79
+b 139
+b 141
+b 142
+b 141
+b 1
+b 140
+b 138
+b 3
+b 33
+b 30
+b 1
+b 4
+b 2
+b 2
+b 23
+b 25
+b 26
+b 34
+b 23
+b 2
+b 110
+b 111
+b 113
+b 115
+b 110
+b 2
+b 44
+b 43
+b 2
+b 1
+b 55
+b 57
+b 59
+b 61
+b 59
+b 1
+b 10
+b 18
+b 19
+b 16
+b 2
+b 22
+b 22
+b 1
+b 8
+b 10
+b 12
+b 14
+b 15
+b 17
+b 6
+b 1
+b 13
+b 2
+b 64
+b 66
+b 67
+b 69
+b 71
+b 69
+b 1
+b 40
+b 71
+b 73
+b 75
+b 76
+b 78
+b 80
+b 595
+b 613
+b 614
+b 620
+b 0
+b 2
+b 16
+b 17
+b 25
+b 16
+b 2
+b 19
+b 609
+b 212
+b 213
+b 219
+b 210
+b 2
+b 217
+b 1
+b 265
+b 267
+b 263
+b 1
+b 28
+b 28
+b 1
+b 61
+b 19
+b 21
+b 23
+b 17
+b 1
+b 0
+b 1
+b 0
+b 1
+b 64
+b 63
+b 1
+b 41
+b 69
+b 0
+b 35
+b 37
+b 38
+b 60
+b 62
+b 35
+b 2
+b 60
+b 1
+b 6
+b 37
+b 38
+b 6
+b 1
+b 34
+b 2
+b 9
+b 10
+b 23
+b 8
+b 1
+b 48
+b 16
+b 17
+b 10
+b 9
+b 1
+b 105
+b 87
+b 86
+b 1
+b 73
+b 71
+b 2
+b 11
+b 18
+b 19
+b 29
+b 9
+b 1
+b 17
+b 2
+b 23
+b 1
+b 54
+b 59
+b 60
+b 62
+b 59
+b 2
+b 41
+b 39
+b 1
+b 23
+b 17
+b 18
+b 31
+b 17
+b 2
+b 56
+b 58
+b 58
+b 1
+b 2
+b 3
+b 5
+b 7
+b 2
+b 2
+b 38
+b 46
+b 44
+b 3
+b 37
+b 1
+b 6
+b 7
+b 9
+b 6
+b 2
+b 161
+b 163
+b 170
+b 196
+b 163
+b 1
+b 167
+b 1
+b 224
+b 18
+b 4
+b 233
+b 263
+b 264
+b 231
+b 2
+b 261
+b 1
+b 40
+b 79
+b 116
+b 117
+b 131
+b 147
+b 116
+b 2
+b 127
+b 2
+b 76
+b 1
+b 98
+b 96
+b 1
+b 15
+b 16
+b 13
+b 2
+b 224
+b 224
+b 1
+b 44
+b 63
+b 64
+b 62
+b 1
+b 46
+b 44
+b 1
+b 156
+b 215
+b 216
+b 218
+b 220
+b 214
+b 1
+b 219
+b 1
+b 114
+b 114
+b 1
+b 50
+b 47
+b 1
+b 3
+b 65
+b 3
+b 1
+b 0
+b 4
+b 14
+b 22
+b 31
+b 21
+b 2
+b 6
+b 7
+b 34
+b 4
+b 2
+b 31
+b 1
+b 5
+b 3
+b 2
+b 33
+b 64
+b 190
+b 197
+b 188
+b 2
+b 63
+b 1
+b 98
+b 97
+b 1
+b 20
+b 21
+b 20
+b 1
+b 67
+b 63
+b 45
+b 86
+b 43
+b 1
+b 15
+b 19
+b 20
+b 22
+b 19
+b 2
+b 32
+b 30
+b 2
+b 107
+b 123
+b 121
+b 3
+b 106
+b 1
+b 33
+b 34
+b 36
+b 31
+b 2
+b 140
+b 141
+b 143
+b 140
+b 2
+b 9
+b 21
+b 20
+b 2
+b 108
+b 116
+b 117
+b 119
+b 121
+b 123
+b 106
+b 1
+b 115
+b 2
+b 54
+b 6
+b 1
+b 0
+b 1
+b 7
+b 2
+b 41
+b 43
+b 1
+b 57
+b 55
+b 2
+b 6
+b 7
+b 9
+b 17
+b 4
+b 2
+b 56
+b 58
+b 60
+b 62
+b 63
+b 60
+b 2
+b 32
+b 32
+b 1
+b 75
+b 75
+b 1
+b 31
+b 56
+b 29
+b 2
+b 22
+b 31
+b 32
+b 22
+b 1
+b 29
+b 1
+b 13
+b 18
+b 23
+b 2
+b 3
+b 5
+b 12
+b 94
+b 96
+b 96
+b 1
+b 6
+b 7
+b 12
+b 6
+b 1
+b 266
+b 273
+b 274
+b 281
+b 283
+b 265
+b 1
+b 234
+b 6
+b 8
+b 10
+b 11
+b 10
+b 1
+b 40
+b 118
+b 120
+b 8
+b 9
+b 6
+b 2
+b 56
+b 55
+b 1
+b 4
+b 12
+b 13
+b 15
+b 16
+b 18
+b 24
+b 12
+b 3
+b 15
+b 1
+b 18
+b 1
+b 37
+b 36
+b 1
+b 8
+b 7
+b 2
+b 5
+b 6
+b 3
+b 2
+b 33
+b 39
+b 39
+b 1
+b 0
+b 2
+b 3
+b 10
+b 3
+b 1
+b 18
+b 20
+b 22
+b 24
+b 26
+b 28
+b 30
+b 31
+b 33
+b 28
+b 2
+b 2
+b 1
+b 2
+b 89
+b 88
+b 2
+b 52
+b 54
+b 55
+b 69
+b 52
+b 2
+b 106
+b 39
+b 37
+b 1
+b 0
+b 2
+b 3
+b 1
+b 0
+b 1
+b 13
+b 39
+b 40
+b 101
+b 132
+b 100
+b 1
+b 12
+b 14
+b 28
+b 12
+b 1
+b 62
+b 28
+b 29
+b 28
+b 2
+b 10
+b 8
+b 1
+b 59
+b 29
+b 30
+b 28
+b 1
+b 16
+b 0
+b 27
+b 25
+b 1
+b 18
+b 20
+b 21
+b 50
+b 20
+b 1
+b 43
+b 44
+b 46
+b 47
+b 49
+b 51
+b 53
+b 66
+b 43
+b 3
+b 50
+b 1
+b 59
+b 1
+b 29
+b 5
+b 32
+b 31
+b 1
+b 8
+b 15
+b 36
+b 36
+b 1
+b 27
+b 1
+b 14
+b 34
+b 35
+b 37
+b 39
+b 37
+b 1
+b 51
+b 78
+b 79
+b 91
+b 76
+b 2
+b 50
+b 1
+b 106
+b 105
+b 2
+b 14
+b 15
+b 17
+b 13
+b 1
+b 30
+b 110
+b 155
+b 165
+b 138
+b 140
+b 140
+b 1
+b 8
+b 6
+b 2
+b 114
+b 476
+b 483
+b 484
+b 486
+b 504
+b 474
+b 1
+b 482
+b 2
+b 17
+b 31
+b 200
+b 205
+b 1
+b 161
+b 163
+b 164
+b 161
+b 2
+b 5
+b 11
+b 3
+b 3
+b 6
+b 1
+b 177
+b 175
+b 3
+b 13
+b 10
+b 1
+b 22
+b 28
+b 27
+b 1
+b 153
+b 38
+b 40
+b 116
+b 127
+b 128
+b 131
+b 133
+b 115
+b 1
+b 47
+b 75
+b 90
+b 95
+b 94
+b 2
+b 44
+b 1
+b 22
+b 24
+b 37
+b 24
+b 1
+b 3
+b 7
+b 8
+b 18
+b 6
+b 1
+b 48
+b 45
+b 1
+b 95
+b 93
+b 2
+b 8
+b 9
+b 11
+b 8
+b 2
+b 102
+b 104
+b 106
+b 107
+b 109
+b 121
+b 104
+b 2
+b 118
+b 1
+b 31
+b 29
+b 2
+b 10
+b 26
+b 28
+b 30
+b 31
+b 28
+b 2
+b 114
+b 28
+b 29
+b 43
+b 42
+b 1
+b 10
+b 93
+b 95
+b 135
+b 136
+b 142
+b 91
+b 1
+b 134
+b 2
+b 539
+b 540
+b 553
+b 186
+b 185
+b 1
+b 113
+b 119
+b 120
+b 132
+b 119
+b 2
+b 110
+b 1
+b 39
+b 36
+b 1
+b 39
+b 40
+b 37
+b 2
+b 22
+b 50
+b 63
+b 64
+b 62
+b 1
+b 1
+b 153
+b 152
+b 1
+b 72
+b 70
+b 1
+b 434
+b 113
+b 114
+b 111
+b 2
+b 0
+b 92
+b 94
+b 96
+b 97
+b 105
+b 126
+b 96
+b 2
+b 89
+b 1
+b 99
+b 1
+b 132
+b 134
+b 135
+b 132
+b 2
+b 124
+b 126
+b 122
+b 1
+b 75
+b 9
+b 10
+b 12
+b 14
+b 8
+b 1
+b 58
+b 60
+b 61
+b 63
+b 74
+b 115
+b 58
+b 2
+b 112
+b 2
+b 172
+b 171
+b 2
+b 3
+b 5
+b 7
+b 9
+b 10
+b 197
+b 17
+b 99
+b 25
+b 95
+b 97
+b 22
+b 1
+b 14
+b 12
+b 2
+b 56
+b 1
+b 3
+b 5
+b 1
+b 1
+b 45
+b 54
+b 55
+b 54
+b 1
+b 1
+b 14
+b 116
+b 118
+b 119
+b 118
+b 1
+b 4
+b 6
+b 2
+b 1
+b 186
+b 193
+b 199
+b 198
+b 1
+b 2
+b 4
+b 8
+b 9
+b 16
+b 6
+b 2
+b 192
+b 194
+b 196
+b 197
+b 232
+b 190
+b 1
+b 195
+b 1
+b 84
+b 102
+b 104
+b 105
+b 100
+b 1
+b 105
+b 9
+b 7
+b 1
+b 6
+b 14
+b 0
+b 1
+b 5
+b 0
+b 2
+b 34
+b 36
+b 50
+b 51
+b 53
+b 34
+b 1
+b 65
+b 84
+b 92
+b 93
+b 83
+b 2
+b 88
+b 2
+b 14
+b 21
+b 22
+b 20
+b 1
+b 3
+b 149
+b 147
+b 2
+b 44
+b 45
+b 44
+b 1
+b 56
+b 138
+b 142
+b 143
+b 145
+b 155
+b 136
+b 1
+b 143
+b 1
+b 286
+b 292
+b 291
+b 1
+b 16
+b 36
+b 90
+b 1
+b 4
+b 5
+b 21
+b 22
+b 24
+b 26
+b 4
+b 1
+b 18
+b 2
+b 23
+b 1
+b 236
+b 238
+b 240
+b 241
+b 275
+b 240
+b 1
+b 272
+b 1
+b 215
+b 216
+b 218
+b 286
+b 213
+b 2
+b 24
+b 24
+b 1
+b 300
+b 309
+b 310
+b 298
+b 3
+b 305
+b 1
+b 109
+b 57
+b 56
+b 2
+b 3
+b 13
+b 18
+b 18
+b 1
+b 6
+b 18
+b 19
+b 28
+b 29
+b 35
+b 18
+b 1
+b 25
+b 2
+b 41
+b 39
+b 2
+b 24
+b 26
+b 27
+b 24
+b 2
+b 1
+b 9
+b 201
+b 253
+b 254
+b 260
+b 253
+b 2
+b 107
+b 28
+b 29
+b 35
+b 34
+b 1
+b 33
+b 34
+b 36
+b 38
+b 33
+b 2
+b 15
+b 11
+b 10
+b 2
+b 117
+b 123
+b 125
+b 123
+b 1
+b 1
+b 2
+b 30
+b 32
+b 45
+b 30
+b 1
+b 52
+b 7
+b 424
+b 426
+b 79
+b 80
+b 82
+b 86
+b 24
+b 26
+b 43
+b 45
+b 41
+b 1
+b 72
+b 3
+b 128
+b 129
+b 131
+b 132
+b 147
+b 128
+b 3
+b 144
+b 1
+b 39
+b 15
+b 21
+b 12
+b 1
+b 7
+b 8
+b 10
+b 6
+b 1
+b 11
+b 10
+b 11
+b 11
+b 31
+b 33
+b 38
+b 38
+b 1
+b 121
+b 13
+b 1
+b 6
+b 41
+b 55
+b 52
+b 1
+b 8
+b 7
+b 2
+b 143
+b 153
+b 152
+b 1
+b 3
+b 4
+b 20
+b 21
+b 23
+b 3
+b 2
+b 16
+b 2
+b 19
+b 1
+b 160
+b 181
+b 182
+b 179
+b 2
+b 160
+b 1
+b 99
+b 96
+b 1
+b 102
+b 100
+b 1
+b 105
+b 106
+b 113
+b 115
+b 116
+b 137
+b 103
+b 2
+b 113
+b 1
+b 123
+b 129
+b 130
+b 122
+b 1
+b 68
+b 0
+b 2
+b 61
+b 60
+b 1
+b 0
+b 2
+b 9
+b 8
+b 9
+b 7
+b 1
+b 176
+b 175
+b 1
+b 117
+b 123
+b 124
+b 128
+b 127
+b 2
+b 63
+b 60
+b 1
+b 18
+b 0
+b 1
+b 129
+b 141
+b 142
+b 144
+b 5
+b 135
+b 137
+b 139
+b 140
+b 137
+b 2
+b 70
+b 79
+b 68
+b 2
+b 70
+b 72
+b 74
+b 76
+b 77
+b 79
+b 74
+b 2
+b 77
+b 1
+b 38
+b 49
+b 51
+b 52
+b 99
+b 37
+b 2
+b 47
+b 2
+b 13
+b 15
+b 16
+b 20
+b 22
+b 24
+b 13
+b 2
+b 11
+b 96
+b 98
+b 111
+b 113
+b 148
+b 200
+b 201
+b 208
+b 146
+b 1
+b 200
+b 1
+b 367
+b 52
+b 54
+b 56
+b 27
+b 32
+b 25
+b 1
+b 0
+b 2
+b 22
+b 29
+b 47
+b 45
+b 1
+b 26
+b 25
+b 2
+b 15
+b 120
+b 12
+b 1
+b 1
+b 1
+b 1
+b 125
+b 48
+b 45
+b 1
+b 39
+b 40
+b 39
+b 4
+b 0
+b 2
+b 0
+b 1
+b 21
+b 27
+b 28
+b 38
+b 39
+b 27
+b 2
+b 34
+b 2
+b 18
+b 1
+b 3
+b 0
+b 1
+b 8
+b 55
+b 56
+b 58
+b 69
+b 68
+b 1
+b 37
+b 39
+b 40
+b 50
+b 99
+b 101
+b 37
+b 2
+b 4
+b 57
+b 61
+b 62
+b 66
+b 61
+b 2
+b 55
+b 1
+b 33
+b 38
+b 39
+b 79
+b 109
+b 38
+b 1
+b 76
+b 2
+b 62
+b 10
+b 11
+b 5
+b 40
+b 56
+b 55
+b 2
+b 10
+b 9
+b 1
+b 74
+b 75
+b 77
+b 79
+b 114
+b 73
+b 1
+b 4
+b 56
+b 58
+b 60
+b 77
+b 92
+b 93
+b 100
+b 118
+b 92
+b 1
+b 97
+b 2
+b 38
+b 3
+b 12
+b 13
+b 15
+b 12
+b 2
+b 43
+b 41
+b 2
+b 77
+b 14
+b 15
+b 17
+b 19
+b 21
+b 14
+b 2
+b 4
+b 1
+b 1
+b 292
+b 294
+b 295
+b 308
+b 309
+b 314
+b 294
+b 2
+b 305
+b 1
+b 289
+b 1
+b 43
+b 30
+b 32
+b 33
+b 35
+b 49
+b 179
+b 218
+b 177
+b 1
+b 33
+b 2
+b 3
+b 0
+b 2
+b 33
+b 35
+b 37
+b 38
+b 42
+b 49
+b 33
+b 1
+b 267
+b 269
+b 271
+b 273
+b 274
+b 280
+b 265
+b 1
+b 272
+b 1
+b 47
+b 8
+b 9
+b 11
+b 3
+b 4
+b 12
+b 26
+b 27
+b 10
+b 1
+b 25
+b 1
+b 25
+b 12
+b 19
+b 20
+b 42
+b 60
+b 19
+b 1
+b 39
+b 3
+b 432
+b 460
+b 4
+b 5
+b 14
+b 4
+b 2
+b 19
+b 21
+b 22
+b 45
+b 47
+b 62
+b 62
+b 1
+b 79
+b 105
+b 106
+b 79
+b 1
+b 102
+b 2
+b 92
+b 28
+b 28
+b 1
+b 4
+b 5
+b 3
+b 1
+b 148
+b 210
+b 211
+b 226
+b 147
+b 2
+b 207
+b 1
+b 57
+b 7
+b 9
+b 10
+b 12
+b 14
+b 7
+b 2
+b 12
+b 1
+b 0
+b 64
+b 72
+b 73
+b 70
+b 2
+b 63
+b 1
+b 5
+b 311
+b 318
+b 319
+b 321
+b 331
+b 309
+b 1
+b 317
+b 2
+b 123
+b 125
+b 127
+b 128
+b 125
+b 2
+b 50
+b 48
+b 1
+b 19
+b 21
+b 0
+b 7
+b 8
+b 0
+b 1
+b 182
+b 193
+b 194
+b 235
+b 193
+b 1
+b 232
+b 1
+b 62
+b 60
+b 1
+b 2
+b 3
+b 5
+b 7
+b 2
+b 2
+b 197
+b 199
+b 199
+b 1
+b 12
+b 14
+b 15
+b 14
+b 2
+b 9
+b 11
+b 12
+b 24
+b 34
+b 11
+b 2
+b 6
+b 1
+b 17
+b 1
+b 51
+b 62
+b 63
+b 60
+b 2
+b 50
+b 1
+b 69
+b 1
+b 28
+b 32
+b 33
+b 32
+b 2
+b 25
+b 1
+b 2
+b 4
+b 238
+b 255
+b 257
+b 259
+b 4
+b 2
+b 1
+b 11
+b 12
+b 18
+b 11
+b 2
+b 14
+b 2
+b 11
+b 13
+b 36
+b 37
+b 36
+b 2
+b 7
+b 43
+b 50
+b 40
+b 1
+b 16
+b 17
+b 19
+b 14
+b 2
+b 95
+b 94
+b 1
+b 8
+b 27
+b 28
+b 27
+b 2
+b 6
+b 1
+b 168
+b 42
+b 44
+b 46
+b 47
+b 42
+b 1
+b 322
+b 2
+b 8
+b 9
+b 6
+b 2
+b 1
+b 1
+b 94
+b 105
+b 106
+b 174
+b 103
+b 2
+b 93
+b 1
+b 169
+b 1
+b 9
+b 16
+b 14
+b 1
+b 114
+b 116
+b 118
+b 125
+b 127
+b 128
+b 118
+b 1
+b 124
+b 3
+b 0
+b 1
+b 309
+b 306
+b 1
+b 25
+b 27
+b 28
+b 27
+b 2
+b 7
+b 9
+b 10
+b 17
+b 40
+b 7
+b 2
+b 37
+b 2
+b 310
+b 342
+b 349
+b 348
+b 2
+b 307
+b 1
+b 5
+b 5
+b 1
+b 39
+b 41
+b 42
+b 50
+b 41
+b 2
+b 36
+b 1
+b 34
+b 19
+b 19
+b 1
+b 67
+b 69
+b 152
+b 22
+b 24
+b 42
+b 43
+b 53
+b 55
+b 264
+b 266
+b 268
+b 269
+b 289
+b 290
+b 296
+b 268
+b 2
+b 285
+b 2
+b 292
+b 1
+b 125
+b 16
+b 17
+b 19
+b 21
+b 19
+b 1
+b 58
+b 67
+b 56
+b 1
+b 0
+b 11
+b 12
+b 14
+b 0
+b 1
+b 9
+b 1
+b 437
+b 439
+b 440
+b 442
+b 452
+b 454
+b 439
+b 2
+b 448
+b 1
+b 77
+b 79
+b 81
+b 7
+b 222
+b 243
+b 242
+b 2
+b 54
+b 55
+b 57
+b 121
+b 122
+b 26
+b 121
+b 129
+b 131
+b 132
+b 143
+b 121
+b 1
+b 78
+b 80
+b 82
+b 82
+b 1
+b 136
+b 135
+b 2
+b 113
+b 25
+b 27
+b 29
+b 31
+b 32
+b 34
+b 23
+b 1
+b 30
+b 2
+b 108
+b 110
+b 110
+b 1
+b 10
+b 12
+b 13
+b 17
+b 10
+b 2
+b 22
+b 14
+b 15
+b 35
+b 14
+b 1
+b 32
+b 1
+b 240
+b 45
+b 0
+b 2
+b 84
+b 86
+b 87
+b 98
+b 119
+b 86
+b 1
+b 95
+b 2
+b 209
+b 228
+b 207
+b 1
+b 126
+b 127
+b 130
+b 125
+b 1
+b 52
+b 52
+b 1
+b 37
+b 38
+b 35
+b 2
+b 11
+b 9
+b 1
+b 8
+b 9
+b 44
+b 8
+b 1
+b 86
+b 96
+b 97
+b 136
+b 137
+b 169
+b 136
+b 1
+b 11
+b 12
+b 14
+b 14
+b 1
+b 8
+b 1
+b 143
+b 154
+b 14
+b 16
+b 18
+b 19
+b 28
+b 29
+b 31
+b 33
+b 27
+b 1
+b 32
+b 1
+b 29
+b 247
+b 255
+b 256
+b 258
+b 260
+b 262
+b 245
+b 2
+b 253
+b 2
+b 139
+b 144
+b 159
+b 160
+b 157
+b 2
+b 143
+b 1
+b 156
+b 1
+b 73
+b 74
+b 76
+b 78
+b 71
+b 2
+b 76
+b 1
+b 53
+b 51
+b 1
+b 266
+b 270
+b 271
+b 269
+b 1
+b 0
+b 35
+b 73
+b 108
+b 119
+b 120
+b 129
+b 107
+b 2
+b 116
+b 1
+b 106
+b 22
+b 23
+b 33
+b 22
+b 1
+b 30
+b 2
+b 89
+b 243
+b 3
+b 10
+b 11
+b 49
+b 11
+b 32
+b 33
+b 35
+b 42
+b 31
+b 1
+b 40
+b 2
+b 1
+b 43
+b 40
+b 1
+b 26
+b 27
+b 26
+b 2
+b 28
+b 28
+b 1
+b 19
+b 21
+b 23
+b 24
+b 26
+b 140
+b 116
+b 122
+b 124
+b 126
+b 127
+b 115
+b 2
+b 10
+b 12
+b 13
+b 34
+b 42
+b 10
+b 2
+b 39
+b 1
+b 34
+b 41
+b 57
+b 58
+b 33
+b 1
+b 0
+b 18
+b 20
+b 38
+b 18
+b 1
+b 43
+b 55
+b 56
+b 80
+b 53
+b 2
+b 77
+b 1
+b 1
+b 59
+b 64
+b 65
+b 67
+b 68
+b 70
+b 78
+b 64
+b 3
+b 75
+b 1
+b 56
+b 1
+b 33
+b 2
+b 3
+b 5
+b 5
+b 1
+b 33
+b 39
+b 77
+b 32
+b 1
+b 1
+b 2
+b 4
+b 6
+b 7
+b 1
+b 2
+b 12
+b 13
+b 60
+b 61
+b 60
+b 1
+b 48
+b 45
+b 1
+b 135
+b 116
+b 117
+b 119
+b 121
+b 26
+b 33
+b 21
+b 40
+b 41
+b 37
+b 1
+b 39
+b 1
+b 9
+b 7
+b 3
+b 52
+b 6
+b 3
+b 2
+b 1
+b 5
+b 9
+b 10
+b 53
+b 81
+b 83
+b 84
+b 86
+b 83
+b 2
+b 46
+b 79
+b 80
+b 82
+b 149
+b 159
+b 79
+b 2
+b 145
+b 2
+b 4
+b 6
+b 7
+b 6
+b 1
+b 8
+b 7
+b 1
+b 2
+b 3
+b 0
+b 2
+b 6
+b 8
+b 63
+b 61
+b 2
+b 81
+b 82
+b 80
+b 1
+b 5
+b 10
+b 426
+b 499
+b 500
+b 510
+b 498
+b 1
+b 1
+b 2
+b 13
+b 1
+b 2
+b 9
+b 2
+b 96
+b 98
+b 99
+b 106
+b 134
+b 132
+b 1
+b 105
+b 1
+b 113
+b 123
+b 124
+b 126
+b 128
+b 122
+b 1
+b 127
+b 1
+b 18
+b 16
+b 2
+b 5
+b 7
+b 8
+b 24
+b 23
+b 2
+b 122
+b 124
+b 131
+b 114
+b 112
+b 1
+b 1
+b 9
+b 10
+b 12
+b 9
+b 2
+b 30
+b 42
+b 69
+b 70
+b 72
+b 74
+b 80
+b 81
+b 83
+b 67
+b 2
+b 78
+b 2
+b 12
+b 23
+b 4
+b 5
+b 7
+b 127
+b 138
+b 236
+b 238
+b 240
+b 241
+b 263
+b 234
+b 1
+b 239
+b 1
+b 117
+b 119
+b 132
+b 133
+b 115
+b 1
+b 131
+b 1
+b 6
+b 8
+b 7
+b 2
+b 4
+b 65
+b 2
+b 1
+b 55
+b 323
+b 329
+b 329
+b 1
+b 0
+b 2
+b 3
+b 9
+b 2
+b 2
+b 5
+b 1
+b 57
+b 59
+b 61
+b 62
+b 64
+b 66
+b 153
+b 9
+b 7
+b 1
+b 17
+b 254
+b 255
+b 257
+b 258
+b 254
+b 3
+b 14
+b 1
+b 88
+b 102
+b 103
+b 105
+b 107
+b 145
+b 102
+b 2
+b 141
+b 2
+b 187
+b 4
+b 5
+b 4
+b 1
+b 27
+b 28
+b 27
+b 2
+b 4
+b 38
+b 36
+b 1
+b 4
+b 38
+b 47
+b 2
+b 1
+b 166
+b 168
+b 170
+b 171
+b 179
+b 168
+b 2
+b 97
+b 97
+b 1
+b 46
+b 47
+b 73
+b 44
+b 2
+b 70
+b 1
+b 286
+b 288
+b 290
+b 291
+b 318
+b 288
+b 2
+b 315
+b 2
+b 30
+b 0
+b 133
+b 134
+b 136
+b 130
+b 1
+b 134
+b 1
+b 34
+b 63
+b 67
+b 65
+b 1
+b 44
+b 45
+b 52
+b 44
+b 1
+b 4
+b 29
+b 30
+b 32
+b 2
+b 1
+b 28
+b 2
+b 88
+b 99
+b 24
+b 25
+b 42
+b 42
+b 1
+b 21
+b 1
+b 663
+b 697
+b 698
+b 700
+b 709
+b 697
+b 2
+b 705
+b 1
+b 28
+b 29
+b 35
+b 212
+b 214
+b 216
+b 217
+b 210
+b 1
+b 215
+b 1
+b 16
+b 3
+b 5
+b 9
+b 8
+b 2
+b 22
+b 20
+b 1
+b 206
+b 0
+b 1
+b 182
+b 184
+b 185
+b 182
+b 2
+b 10
+b 2
+b 0
+b 2
+b 339
+b 6
+b 18
+b 20
+b 18
+b 1
+b 8
+b 2
+b 0
+b 1
+b 5
+b 6
+b 5
+b 1
+b 3
+b 135
+b 53
+b 54
+b 53
+b 1
+b 66
+b 65
+b 2
+b 62
+b 82
+b 52
+b 53
+b 55
+b 57
+b 59
+b 33
+b 32
+b 1
+b 90
+b 59
+b 61
+b 62
+b 59
+b 2
+b 3
+b 1
+b 2
+b 8
+b 88
+b 20
+b 21
+b 39
+b 20
+b 1
+b 30
+b 31
+b 33
+b 35
+b 39
+b 29
+b 1
+b 3
+b 152
+b 161
+b 162
+b 164
+b 175
+b 159
+b 2
+b 172
+b 1
+b 76
+b 75
+b 1
+b 0
+b 6
+b 7
+b 19
+b 20
+b 22
+b 24
+b 26
+b 0
+b 1
+b 3
+b 2
+b 16
+b 2
+b 29
+b 35
+b 37
+b 27
+b 1
+b 36
+b 1
+b 29
+b 28
+b 1
+b 18
+b 16
+b 2
+b 8
+b 9
+b 11
+b 13
+b 67
+b 72
+b 80
+b 81
+b 79
+b 1
+b 4
+b 3
+b 2
+b 72
+b 120
+b 121
+b 123
+b 125
+b 69
+b 1
+b 3
+b 1
+b 1
+b 27
+b 36
+b 37
+b 47
+b 26
+b 2
+b 33
+b 1
+b 9
+b 29
+b 7
+b 8
+b 11
+b 4
+b 1
+b 100
+b 2
+b 363
+b 365
+b 372
+b 373
+b 365
+b 1
+b 370
+b 1
+b 26
+b 21
+b 3
+b 2
+b 1
+b 5
+b 6
+b 5
+b 1
+b 114
+b 116
+b 117
+b 145
+b 116
+b 2
+b 31
+b 33
+b 34
+b 40
+b 31
+b 2
+b 176
+b 174
+b 1
+b 9
+b 10
+b 16
+b 9
+b 2
+b 3
+b 7
+b 146
+b 148
+b 149
+b 157
+b 148
+b 2
+b 6
+b 1
+b 217
+b 252
+b 254
+b 217
+b 1
+b 6
+b 31
+b 4
+b 1
+b 11
+b 13
+b 14
+b 9
+b 1
+b 92
+b 357
+b 358
+b 357
+b 1
+b 4
+b 5
+b 7
+b 12
+b 2
+b 2
+b 200
+b 45
+b 46
+b 48
+b 62
+b 44
+b 1
+b 60
+b 2
+b 46
+b 83
+b 84
+b 96
+b 82
+b 1
+b 94
+b 1
+b 38
+b 45
+b 36
+b 2
+b 8
+b 11
+b 17
+b 30
+b 31
+b 17
+b 1
+b 28
+b 1
+b 4
+b 14
+b 16
+b 14
+b 1
+b 23
+b 0
+b 1
+b 27
+b 29
+b 29
+b 1
+b 0
+b 2
+b 293
+b 309
+b 310
+b 312
+b 292
+b 1
+b 18
+b 5
+b 2
+b 1
+b 2
+b 4
+b 6
+b 8
+b 9
+b 6
+b 2
+b 0
+b 0
+b 1
+b 23
+b 31
+b 33
+b 34
+b 38
+b 37
+b 1
+b 34
+b 35
+b 162
+b 4
+b 14
+b 16
+b 18
+b 19
+b 21
+b 23
+b 25
+b 16
+b 2
+b 23
+b 1
+b 145
+b 158
+b 165
+b 117
+b 123
+b 124
+b 9
+b 9
+b 19
+b 21
+b 22
+b 34
+b 36
+b 7
+b 2
+b 20
+b 1
+b 31
+b 36
+b 37
+b 46
+b 36
+b 1
+b 43
+b 1
+b 22
+b 28
+b 30
+b 28
+b 1
+b 81
+b 83
+b 79
+b 1
+b 18
+b 175
+b 182
+b 181
+b 1
+b 40
+b 40
+b 1
+b 12
+b 11
+b 2
+b 22
+b 24
+b 25
+b 27
+b 29
+b 24
+b 2
+b 30
+b 29
+b 2
+b 21
+b 34
+b 35
+b 34
+b 1
+b 0
+b 76
+b 74
+b 1
+b 6
+b 7
+b 6
+b 1
+b 0
+b 2
+b 99
+b 100
+b 102
+b 104
+b 102
+b 1
+b 3
+b 137
+b 138
+b 140
+b 49
+b 86
+b 84
+b 1
+b 6
+b 7
+b 5
+b 1
+b 133
+b 104
+b 65
+b 66
+b 82
+b 65
+b 1
+b 79
+b 1
+b 78
+b 80
+b 81
+b 83
+b 84
+b 78
+b 2
+b 81
+b 2
+b 121
+b 42
+b 1
+b 1
+b 1
+b 189
+b 207
+b 208
+b 187
+b 1
+b 14
+b 41
+b 4
+b 7
+b 4
+b 1
+b 53
+b 58
+b 60
+b 61
+b 67
+b 69
+b 71
+b 72
+b 51
+b 2
+b 58
+b 2
+b 0
+b 116
+b 118
+b 128
+b 116
+b 1
+b 19
+b 25
+b 27
+b 29
+b 30
+b 18
+b 1
+b 89
+b 94
+b 95
+b 87
+b 2
+b 92
+b 1
+b 2
+b 92
+b 90
+b 1
+b 23
+b 57
+b 55
+b 2
+b 39
+b 8
+b 10
+b 24
+b 65
+b 8
+b 1
+b 68
+b 37
+b 39
+b 41
+b 42
+b 56
+b 41
+b 2
+b 52
+b 1
+b 11
+b 35
+b 9
+b 1
+b 5
+b 7
+b 9
+b 10
+b 15
+b 7
+b 2
+b 190
+b 55
+b 54
+b 1
+b 19
+b 24
+b 23
+b 2
+b 16
+b 9
+b 11
+b 13
+b 14
+b 7
+b 1
+b 12
+b 1
+b 31
+b 33
+b 54
+b 55
+b 52
+b 2
+b 32
+b 1
+b 38
+b 35
+b 1
+b 15
+b 43
+b 44
+b 50
+b 48
+b 1
+b 365
+b 434
+b 435
+b 441
+b 434
+b 2
+b 363
+b 1
+b 435
+b 1
+b 176
+b 174
+b 1
+b 35
+b 36
+b 45
+b 35
+b 2
+b 47
+b 118
+b 116
+b 1
+b 10
+b 12
+b 14
+b 15
+b 12
+b 2
+b 18
+b 28
+b 29
+b 51
+b 28
+b 2
+b 16
+b 1
+b 77
+b 101
+b 74
+b 1
+b 98
+b 1
+b 68
+b 3
+b 2
+b 2
+b 32
+b 34
+b 35
+b 34
+b 3
+b 29
+b 1
+b 17
+b 19
+b 21
+b 22
+b 120
+b 126
+b 127
+b 129
+b 126
+b 2
+b 6
+b 4
+b 6
+b 4
+b 1
+b 66
+b 68
+b 70
+b 70
+b 1
+b 293
+b 294
+b 291
+b 2
+b 2
+b 14
+b 14
+b 1
+b 115
+b 147
+b 156
+b 164
+b 113
+b 2
+b 161
+b 1
+b 331
+b 333
+b 341
+b 342
+b 350
+b 151
+b 149
+b 1
+b 12
+b 14
+b 1
+b 0
+b 1
+b 6
+b 8
+b 9
+b 18
+b 16
+b 1
+b 14
+b 50
+b 51
+b 60
+b 61
+b 63
+b 65
+b 48
+b 2
+b 58
+b 2
+b 29
+b 31
+b 27
+b 1
+b 151
+b 4
+b 5
+b 7
+b 9
+b 14
+b 79
+b 16
+b 27
+b 26
+b 2
+b 47
+b 53
+b 54
+b 78
+b 54
+b 1
+b 74
+b 1
+b 107
+b 109
+b 111
+b 112
+b 114
+b 116
+b 118
+b 109
+b 2
+b 118
+b 127
+b 128
+b 132
+b 139
+b 127
+b 2
+b 115
+b 1
+b 126
+b 1
+b 96
+b 95
+b 1
+b 72
+b 73
+b 71
+b 1
+b 8
+b 9
+b 11
+b 13
+b 14
+b 16
+b 17
+b 111
+b 113
+b 11
+b 2
+b 14
+b 2
+b 109
+b 1
+b 84
+b 86
+b 129
+b 130
+b 86
+b 1
+b 127
+b 1
+b 27
+b 147
+b 148
+b 147
+b 1
+b 22
+b 20
+b 1
+b 161
+b 163
+b 165
+b 163
+b 1
+b 73
+b 75
+b 76
+b 78
+b 52
+b 11
+b 13
+b 15
+b 16
+b 1
+b 302
+b 307
+b 309
+b 311
+b 309
+b 1
+b 181
+b 182
+b 184
+b 44
+b 6
+b 5
+b 1
+b 2
+b 8
+b 9
+b 11
+b 12
+b 24
+b 30
+b 2
+b 1
+b 5
+b 2
+b 8
+b 1
+b 74
+b 81
+b 83
+b 84
+b 74
+b 1
+b 80
+b 2
+b 50
+b 166
+b 200
+b 201
+b 164
+b 1
+b 12
+b 14
+b 28
+b 29
+b 28
+b 2
+b 12
+b 1
+b 45
+b 46
+b 48
+b 50
+b 45
+b 2
+b 69
+b 68
+b 2
+b 33
+b 34
+b 33
+b 1
+b 5
+b 8
+b 10
+b 12
+b 8
+b 1
+b 21
+b 34
+b 97
+b 98
+b 100
+b 19
+b 2
+b 95
+b 2
+b 27
+b 25
+b 1
+b 40
+b 41
+b 43
+b 45
+b 40
+b 2
+b 32
+b 32
+b 1
+b 3
+b 4
+b 18
+b 159
+b 45
+b 0
+b 2
+b 10
+b 11
+b 2
+b 1
+b 7
+b 3
+b 37
+b 9
+b 11
+b 12
+b 14
+b 16
+b 18
+b 9
+b 2
+b 83
+b 85
+b 104
+b 105
+b 107
+b 81
+b 1
+b 103
+b 2
+b 161
+b 5
+b 6
+b 8
+b 50
+b 5
+b 2
+b 46
+b 2
+b 71
+b 81
+b 85
+b 87
+b 1
+b 43
+b 41
+b 1
+b 54
+b 14
+b 15
+b 17
+b 14
+b 2
+b 176
+b 175
+b 1
+b 36
+b 37
+b 43
+b 36
+b 2
+b 39
+b 2
+b 29
+b 6
+b 3
+b 1
+b 4
+b 5
+b 7
+b 9
+b 4
+b 2
+b 86
+b 22
+b 11
+b 12
+b 0
+b 66
+b 75
+b 76
+b 78
+b 80
+b 73
+b 2
+b 18
+b 25
+b 39
+b 40
+b 24
+b 1
+b 212
+b 214
+b 216
+b 217
+b 214
+b 2
+b 51
+b 52
+b 51
+b 2
+b 2
+b 134
+b 7
+b 22
+b 100
+b 102
+b 104
+b 105
+b 107
+b 109
+b 110
+b 102
+b 2
+b 107
+b 1
+b 42
+b 132
+b 152
+b 131
+b 1
+b 177
+b 178
+b 109
+b 93
+b 136
+b 138
+b 140
+b 138
+b 1
+b 84
+b 90
+b 91
+b 93
+b 105
+b 93
+b 1
+b 81
+b 1
+b 24
+b 0
+b 6
+b 7
+b 9
+b 11
+b 12
+b 4
+b 2
+b 9
+b 1
+b 35
+b 16
+b 18
+b 19
+b 48
+b 10
+b 145
+b 145
+b 1
+b 33
+b 4
+b 5
+b 26
+b 24
+b 1
+b 5
+b 1
+b 78
+b 79
+b 88
+b 78
+b 2
+b 83
+b 1
+b 51
+b 49
+b 1
+b 204
+b 211
+b 212
+b 245
+b 247
+b 248
+b 257
+b 247
+b 1
+b 121
+b 5
+b 6
+b 14
+b 19
+b 20
+b 13
+b 2
+b 16
+b 1
+b 0
+b 205
+b 204
+b 1
+b 102
+b 2
+b 4
+b 5
+b 4
+b 3
+b 56
+b 61
+b 62
+b 73
+b 61
+b 1
+b 70
+b 1
+b 54
+b 55
+b 67
+b 14
+b 64
+b 73
+b 74
+b 83
+b 62
+b 1
+b 72
+b 2
+b 78
+b 1
+b 39
+b 41
+b 43
+b 44
+b 46
+b 52
+b 34
+b 2
+b 2
+b 1
+b 72
+b 71
+b 2
+b 172
+b 198
+b 199
+b 196
+b 2
+b 172
+b 1
+b 17
+b 18
+b 26
+b 16
+b 1
+b 78
+b 4
+b 3
+b 24
+b 22
+b 2
+b 2
+b 1
+b 2
+b 2
+b 1
+b 8
+b 9
+b 17
+b 18
+b 51
+b 8
+b 2
+b 13
+b 2
+b 1
+b 0
+b 1
+b 484
+b 485
+b 517
+b 483
+b 1
+b 3
+b 1
+b 1
+b 188
+b 189
+b 50
+b 54
+b 49
+b 2
+b 50
+b 1
+b 5
+b 15
+b 16
+b 18
+b 20
+b 21
+b 41
+b 46
+b 48
+b 18
+b 2
+b 39
+b 1
+b 64
+b 66
+b 68
+b 69
+b 71
+b 62
+b 1
+b 67
+b 2
+b 47
+b 230
+b 232
+b 233
+b 243
+b 245
+b 230
+b 2
+b 243
+b 1
+b 37
+b 36
+b 1
+b 217
+b 219
+b 219
+b 1
+b 103
+b 102
+b 1
+b 39
+b 40
+b 46
+b 39
+b 2
+b 32
+b 31
+b 1
+b 6
+b 8
+b 10
+b 16
+b 17
+b 10
+b 1
+b 13
+b 2
+b 231
+b 231
+b 1
+b 79
+b 80
+b 77
+b 2
+b 0
+b 2
+b 0
+b 1
+b 24
+b 129
+b 30
+b 31
+b 33
+b 28
+b 2
+b 31
+b 1
+b 49
+b 51
+b 52
+b 49
+b 2
+b 73
+b 72
+b 1
+b 56
+b 57
+b 64
+b 7
+b 111
+b 113
+b 114
+b 128
+b 130
+b 171
+b 170
+b 2
+b 11
+b 13
+b 15
+b 16
+b 9
+b 1
+b 75
+b 75
+b 129
+b 131
+b 132
+b 131
+b 1
+b 3
+b 2
+b 1
+b 71
+b 73
+b 91
+b 71
+b 1
+b 46
+b 7
+b 6
+b 2
+b 18
+b 20
+b 20
+b 1
+b 23
+b 33
+b 34
+b 46
+b 33
+b 2
+b 20
+b 1
+b 40
+b 1
+b 9
+b 7
+b 3
+b 27
+b 38
+b 71
+b 73
+b 74
+b 0
+b 1
+b 3
+b 114
+b 113
+b 1
+b 4
+b 5
+b 371
+b 5
+b 37
+b 38
+b 3
+b 1
+b 36
+b 2
+b 7
+b 8
+b 10
+b 7
+b 2
+b 8
+b 28
+b 48
+b 49
+b 51
+b 46
+b 2
+b 27
+b 1
+b 6
+b 7
+b 9
+b 4
+b 2
+b 168
+b 169
+b 171
+b 224
+b 271
+b 167
+b 1
+b 269
+b 2
+b 22
+b 28
+b 29
+b 26
+b 2
+b 21
+b 1
+b 112
+b 110
+b 1
+b 66
+b 78
+b 79
+b 77
+b 1
+b 31
+b 30
+b 1
+b 60
+b 60
+b 1
+b 55
+b 56
+b 58
+b 55
+b 2
+b 80
+b 0
+b 13
+b 25
+b 26
+b 33
+b 34
+b 36
+b 25
+b 2
+b 30
+b 1
+b 10
+b 1
+b 74
+b 88
+b 98
+b 99
+b 105
+b 98
+b 2
+b 101
+b 1
+b 20
+b 24
+b 22
+b 1
+b 19
+b 1
+b 0
+b 2
+b 3
+b 0
+b 2
+b 3
+b 115
+b 128
+b 134
+b 141
+b 142
+b 144
+b 145
+b 127
+b 2
+b 130
+b 2
+b 137
+b 3
+b 1
+b 181
+b 182
+b 188
+b 181
+b 1
+b 7
+b 5
+b 1
+b 8
+b 50
+b 51
+b 8
+b 1
+b 48
+b 1
+b 7
+b 43
+b 45
+b 46
+b 52
+b 45
+b 2
+b 48
+b 1
+b 16
+b 5
+b 33
+b 51
+b 52
+b 51
+b 1
+b 8
+b 5
+b 1
+b 13
+b 59
+b 58
+b 2
+b 98
+b 99
+b 96
+b 2
+b 21
+b 20
+b 1
+b 55
+b 52
+b 1
+b 32
+b 34
+b 35
+b 42
+b 35
+b 1
+b 43
+b 45
+b 46
+b 48
+b 43
+b 2
+b 46
+b 1
+b 3
+b 15
+b 53
+b 55
+b 57
+b 58
+b 60
+b 61
+b 68
+b 71
+b 57
+b 3
+b 64
+b 4
+b 153
+b 2
+b 4
+b 6
+b 8
+b 9
+b 2
+b 1
+b 709
+b 707
+b 1
+b 6
+b 7
+b 5
+b 1
+b 2
+b 55
+b 30
+b 35
+b 36
+b 51
+b 29
+b 2
+b 32
+b 1
+b 17
+b 19
+b 20
+b 39
+b 17
+b 2
+b 37
+b 1
+b 66
+b 64
+b 1
+b 4
+b 5
+b 15
+b 2
+b 2
+b 25
+b 22
+b 1
+b 29
+b 49
+b 48
+b 2
+b 110
+b 121
+b 123
+b 124
+b 128
+b 109
+b 2
+b 119
+b 2
+b 31
+b 40
+b 50
+b 51
+b 38
+b 2
+b 30
+b 1
+b 44
+b 12
+b 36
+b 37
+b 10
+b 1
+b 35
+b 1
+b 13
+b 32
+b 42
+b 40
+b 1
+b 1
+b 2
+b 4
+b 6
+b 66
+b 1
+b 2
+b 3
+b 7
+b 8
+b 7
+b 3
+b 3
+b 0
+b 1
+b 68
+b 238
+b 239
+b 247
+b 40
+b 49
+b 50
+b 55
+b 54
+b 1
+b 188
+b 247
+b 1
+b 2
+b 1
+b 1
+b 26
+b 24
+b 2
+b 8
+b 9
+b 11
+b 17
+b 5
+b 1
+b 5
+b 3
+b 2
+b 109
+b 61
+b 63
+b 64
+b 61
+b 2
+b 4
+b 66
+b 68
+b 69
+b 71
+b 73
+b 66
+b 2
+b 71
+b 1
+b 7
+b 37
+b 38
+b 40
+b 42
+b 40
+b 1
+b 97
+b 28
+b 33
+b 34
+b 26
+b 1
+b 13
+b 77
+b 78
+b 76
+b 1
+b 18
+b 24
+b 23
+b 1
+b 4
+b 2
+b 2
+b 4
+b 4
+b 2
+b 3
+b 31
+b 0
+b 2
+b 133
+b 135
+b 137
+b 138
+b 140
+b 142
+b 131
+b 1
+b 136
+b 2
+b 11
+b 11
+b 1
+b 57
+b 58
+b 60
+b 62
+b 84
+b 57
+b 2
+b 236
+b 237
+b 236
+b 1
+b 63
+b 35
+b 33
+b 1
+b 1
+b 24
+b 35
+b 36
+b 3
+b 4
+b 36
+b 2
+b 1
+b 180
+b 183
+b 184
+b 186
+b 183
+b 2
+b 142
+b 141
+b 1
+b 158
+b 82
+b 83
+b 89
+b 82
+b 2
+b 85
+b 1
+b 26
+b 24
+b 2
+b 510
+b 509
+b 1
+b 58
+b 63
+b 51
+b 78
+b 80
+b 82
+b 49
+b 2
+b 80
+b 1
+b 21
+b 15
+b 16
+b 15
+b 1
+b 4
+b 3
+b 1
+b 0
+b 30
+b 32
+b 34
+b 43
+b 44
+b 34
+b 36
+b 38
+b 39
+b 41
+b 38
+b 2
+b 9
+b 15
+b 7
+b 2
+b 20
+b 22
+b 18
+b 1
+b 10
+b 30
+b 52
+b 50
+b 2
+b 4
+b 5
+b 7
+b 9
+b 3
+b 1
+b 7
+b 6
+b 2
+b 6
+b 7
+b 9
+b 3
+b 80
+b 64
+b 66
+b 67
+b 69
+b 64
+b 2
+b 4
+b 28
+b 27
+b 2
+b 59
+b 66
+b 67
+b 67
+b 1
+b 6
+b 4
+b 2
+b 6
+b 7
+b 9
+b 6
+b 2
+b 70
+b 72
+b 72
+b 1
+b 6
+b 96
+b 41
+b 58
+b 59
+b 41
+b 1
+b 55
+b 2
+b 3
+b 21
+b 23
+b 24
+b 23
+b 2
+b 19
+b 17
+b 1
+b 2
+b 25
+b 26
+b 32
+b 2
+b 1
+b 22
+b 2
+b 141
+b 167
+b 168
+b 170
+b 165
+b 2
+b 140
+b 1
+b 4
+b 74
+b 28
+b 27
+b 2
+b 3
+b 0
+b 1
+b 121
+b 127
+b 128
+b 130
+b 132
+b 133
+b 121
+b 1
+b 124
+b 2
+b 129
+b 1
+b 76
+b 57
+b 59
+b 67
+b 68
+b 70
+b 72
+b 65
+b 2
+b 70
+b 1
+b 59
+b 1
+b 118
+b 125
+b 135
+b 28
+b 39
+b 40
+b 26
+b 1
+b 38
+b 1
+b 54
+b 516
+b 539
+b 540
+b 516
+b 1
+b 536
+b 2
+b 128
+b 129
+b 128
+b 1
+b 3
+b 135
+b 137
+b 142
+b 143
+b 145
+b 137
+b 1
+b 140
+b 1
+b 19
+b 20
+b 31
+b 17
+b 2
+b 28
+b 1
+b 3
+b 52
+b 1
+b 1
+b 591
+b 860
+b 859
+b 2
+b 0
+b 10
+b 7
+b 1
+b 12
+b 14
+b 16
+b 14
+b 1
+b 0
+b 1
+b 17
+b 8
+b 7
+b 1
+b 85
+b 86
+b 90
+b 85
+b 2
+b 86
+b 1
+b 72
+b 70
+b 1
+b 42
+b 42
+b 1
+b 2
+b 25
+b 26
+b 25
+b 1
+b 0
+b 1
+b 55
+b 71
+b 77
+b 78
+b 77
+b 1
+b 53
+b 1
+b 52
+b 23
+b 14
+b 16
+b 17
+b 16
+b 2
+b 11
+b 1
+b 5
+b 60
+b 61
+b 63
+b 60
+b 2
+b 2
+b 0
+b 1
+b 5
+b 152
+b 150
+b 1
+b 184
+b 185
+b 192
+b 183
+b 1
+b 58
+b 66
+b 104
+b 106
+b 107
+b 109
+b 127
+b 128
+b 104
+b 2
+b 126
+b 1
+b 42
+b 166
+b 166
+b 1
+b 12
+b 13
+b 15
+b 11
+b 1
+b 15
+b 75
+b 91
+b 162
+b 91
+b 1
+b 158
+b 1
+b 0
+b 1
+b 178
+b 180
+b 181
+b 183
+b 224
+b 178
+b 2
+b 71
+b 69
+b 1
+b 23
+b 19
+b 20
+b 17
+b 1
+b 33
+b 34
+b 40
+b 30
+b 1
+b 9
+b 6
+b 5
+b 1
+b 114
+b 111
+b 1
+b 60
+b 61
+b 70
+b 72
+b 60
+b 2
+b 66
+b 1
+b 69
+b 71
+b 73
+b 75
+b 36
+b 33
+b 1
+b 5
+b 7
+b 8
+b 25
+b 7
+b 2
+b 21
+b 1
+b 82
+b 103
+b 105
+b 106
+b 105
+b 2
+b 80
+b 1
+b 35
+b 32
+b 1
+b 74
+b 74
+b 1
+b 3
+b 4
+b 6
+b 2
+b 1
+b 40
+b 23
+b 25
+b 26
+b 36
+b 25
+b 1
+b 33
+b 2
+b 21
+b 38
+b 39
+b 48
+b 49
+b 116
+b 38
+b 1
+b 45
+b 2
+b 113
+b 1
+b 1
+b 4
+b 83
+b 90
+b 91
+b 93
+b 95
+b 89
+b 1
+b 94
+b 1
+b 28
+b 27
+b 1
+b 58
+b 63
+b 65
+b 65
+b 1
+b 6
+b 42
+b 43
+b 60
+b 42
+b 2
+b 2
+b 8
+b 9
+b 17
+b 8
+b 1
+b 14
+b 1
+b 8
+b 3
+b 4
+b 24
+b 47
+b 100
+b 5
+b 7
+b 15
+b 17
+b 18
+b 20
+b 7
+b 1
+b 14
+b 2
+b 194
+b 196
+b 198
+b 204
+b 196
+b 1
+b 55
+b 70
+b 71
+b 73
+b 68
+b 2
+b 54
+b 1
+b 8
+b 30
+b 29
+b 1
+b 49
+b 51
+b 53
+b 121
+b 119
+b 2
+b 53
+b 1
+b 13
+b 100
+b 164
+b 163
+b 1
+b 131
+b 128
+b 1
+b 13
+b 19
+b 20
+b 5
+b 4
+b 2
+b 35
+b 2
+b 23
+b 21
+b 1
+b 11
+b 29
+b 30
+b 34
+b 29
+b 2
+b 209
+b 249
+b 208
+b 1
+b 153
+b 157
+b 155
+b 2
+b 185
+b 186
+b 188
+b 189
+b 217
+b 185
+b 3
+b 152
+b 176
+b 195
+b 174
+b 3
+b 151
+b 1
+b 108
+b 112
+b 113
+b 110
+b 2
+b 4
+b 4
+b 1
+b 56
+b 86
+b 87
+b 91
+b 93
+b 84
+b 2
+b 91
+b 1
+b 55
+b 1
+b 41
+b 44
+b 45
+b 240
+b 242
+b 243
+b 255
+b 240
+b 2
+b 1
+b 26
+b 32
+b 33
+b 61
+b 30
+b 2
+b 25
+b 1
+b 86
+b 84
+b 1
+b 132
+b 133
+b 132
+b 1
+b 48
+b 48
+b 1
+b 26
+b 55
+b 60
+b 61
+b 70
+b 62
+b 67
+b 68
+b 78
+b 61
+b 2
+b 64
+b 1
+b 512
+b 514
+b 515
+b 517
+b 518
+b 524
+b 615
+b 512
+b 2
+b 515
+b 2
+b 9
+b 11
+b 12
+b 20
+b 11
+b 2
+b 15
+b 13
+b 1
+b 63
+b 14
+b 180
+b 209
+b 208
+b 1
+b 20
+b 7
+b 7
+b 1
+b 32
+b 33
+b 0
+b 2
+b 0
+b 1
+b 123
+b 125
+b 201
+b 125
+b 1
+b 64
+b 62
+b 2
+b 29
+b 30
+b 29
+b 1
+b 7
+b 1
+b 15
+b 19
+b 20
+b 26
+b 6
+b 384
+b 69
+b 67
+b 1
+b 24
+b 26
+b 28
+b 30
+b 24
+b 1
+b 39
+b 47
+b 37
+b 2
+b 67
+b 68
+b 65
+b 2
+b 33
+b 30
+b 1
+b 5
+b 3
+b 1
+b 12
+b 13
+b 15
+b 17
+b 19
+b 12
+b 2
+b 24
+b 22
+b 1
+b 9
+b 10
+b 16
+b 18
+b 6
+b 1
+b 10
+b 6
+b 36
+b 38
+b 40
+b 41
+b 47
+b 34
+b 1
+b 40
+b 1
+b 192
+b 194
+b 217
+b 194
+b 1
+b 213
+b 1
+b 41
+b 63
+b 33
+b 47
+b 32
+b 1
+b 9
+b 9
+b 1
+b 23
+b 24
+b 26
+b 28
+b 30
+b 23
+b 2
+b 61
+b 68
+b 59
+b 2
+b 8
+b 10
+b 12
+b 13
+b 15
+b 12
+b 2
+b 193
+b 143
+b 144
+b 146
+b 143
+b 2
+b 2
+b 2
+b 1
+b 509
+b 511
+b 513
+b 537
+b 538
+b 507
+b 1
+b 126
+b 124
+b 1
+b 101
+b 102
+b 104
+b 19
+b 19
+b 18
+b 1
+b 49
+b 50
+b 67
+b 47
+b 2
+b 64
+b 2
+b 6
+b 305
+b 307
+b 308
+b 316
+b 307
+b 2
+b 192
+b 8
+b 9
+b 11
+b 18
+b 8
+b 2
+b 14
+b 1
+b 64
+b 73
+b 98
+b 99
+b 98
+b 1
+b 61
+b 1
+b 210
+b 212
+b 214
+b 215
+b 217
+b 212
+b 2
+b 215
+b 1
+b 107
+b 120
+b 121
+b 120
+b 1
+b 46
+b 44
+b 1
+b 159
+b 161
+b 162
+b 159
+b 2
+b 187
+b 214
+b 740
+b 738
+b 1
+b 90
+b 104
+b 88
+b 2
+b 31
+b 32
+b 46
+b 31
+b 1
+b 65
+b 67
+b 68
+b 70
+b 189
+b 65
+b 2
+b 8
+b 7
+b 2
+b 8
+b 31
+b 32
+b 43
+b 42
+b 1
+b 226
+b 244
+b 246
+b 247
+b 265
+b 224
+b 1
+b 47
+b 55
+b 56
+b 53
+b 2
+b 46
+b 1
+b 23
+b 8
+b 9
+b 13
+b 8
+b 2
+b 9
+b 1
+b 28
+b 29
+b 45
+b 28
+b 1
+b 41
+b 7
+b 160
+b 2
+b 4
+b 5
+b 4
+b 1
+b 1
+b 0
+b 1
+b 42
+b 19
+b 34
+b 35
+b 37
+b 37
+b 1
+b 16
+b 1
+b 292
+b 291
+b 1
+b 38
+b 36
+b 3
+b 106
+b 103
+b 1
+b 91
+b 117
+b 156
+b 157
+b 156
+b 1
+b 114
+b 1
+b 28
+b 124
+b 125
+b 134
+b 124
+b 1
+b 131
+b 1
+b 51
+b 53
+b 11
+b 62
+b 63
+b 62
+b 1
+b 22
+b 22
+b 1
+b 50
+b 52
+b 48
+b 1
+b 31
+b 32
+b 30
+b 1
+b 27
+b 21
+b 23
+b 25
+b 21
+b 1
+b 40
+b 59
+b 57
+b 3
+b 39
+b 1
+b 302
+b 311
+b 312
+b 309
+b 2
+b 1
+b 0
+b 1
+b 57
+b 98
+b 1
+b 2
+b 8
+b 1
+b 2
+b 4
+b 1
+b 189
+b 188
+b 1
+b 34
+b 35
+b 37
+b 32
+b 2
+b 35
+b 1
+b 75
+b 232
+b 233
+b 254
+b 255
+b 273
+b 73
+b 1
+b 231
+b 2
+b 250
+b 1
+b 21
+b 27
+b 28
+b 19
+b 1
+b 4
+b 3
+b 1
+b 90
+b 10
+b 18
+b 31
+b 16
+b 2
+b 9
+b 1
+b 67
+b 66
+b 1
+b 5
+b 9
+b 17
+b 18
+b 20
+b 15
+b 2
+b 8
+b 1
+b 127
+b 133
+b 145
+b 191
+b 143
+b 3
+b 132
+b 1
+b 184
+b 1
+b 23
+b 42
+b 43
+b 45
+b 41
+b 1
+b 22
+b 1
+b 47
+b 34
+b 33
+b 1
+b 195
+b 196
+b 202
+b 215
+b 105
+b 116
+b 15
+b 17
+b 18
+b 17
+b 1
+b 4
+b 3
+b 2
+b 36
+b 0
+b 2
+b 0
+b 12
+b 20
+b 22
+b 23
+b 25
+b 27
+b 29
+b 20
+b 2
+b 27
+b 1
+b 24
+b 30
+b 22
+b 1
+b 174
+b 175
+b 177
+b 189
+b 201
+b 189
+b 1
+b 132
+b 723
+b 724
+b 901
+b 902
+b 10
+b 12
+b 14
+b 8
+b 1
+b 109
+b 7
+b 63
+b 64
+b 62
+b 1
+b 13
+b 24
+b 11
+b 2
+b 81
+b 79
+b 1
+b 2
+b 3
+b 0
+b 2
+b 27
+b 26
+b 1
+b 18
+b 24
+b 25
+b 31
+b 22
+b 2
+b 17
+b 1
+b 6
+b 4
+b 1
+b 24
+b 26
+b 28
+b 30
+b 459
+b 490
+b 459
+b 1
+b 487
+b 1
+b 5
+b 17
+b 18
+b 20
+b 21
+b 17
+b 3
+b 42
+b 4
+b 5
+b 34
+b 35
+b 41
+b 3
+b 1
+b 33
+b 2
+b 36
+b 2
+b 59
+b 64
+b 66
+b 67
+b 81
+b 64
+b 2
+b 79
+b 1
+b 194
+b 192
+b 1
+b 56
+b 60
+b 53
+b 1
+b 13
+b 7
+b 17
+b 18
+b 6
+b 1
+b 30
+b 40
+b 41
+b 43
+b 45
+b 40
+b 2
+b 4
+b 2
+b 2
+b 70
+b 72
+b 73
+b 70
+b 2
+b 14
+b 19
+b 12
+b 2
+b 146
+b 169
+b 168
+b 1
+b 5
+b 3
+b 2
+b 58
+b 71
+b 72
+b 71
+b 2
+b 55
+b 1
+b 12
+b 13
+b 12
+b 3
+b 3
+b 5
+b 0
+b 1
+b 491
+b 501
+b 500
+b 2
+b 130
+b 140
+b 141
+b 4
+b 5
+b 7
+b 4
+b 2
+b 44
+b 43
+b 1
+b 13
+b 14
+b 13
+b 2
+b 4
+b 3
+b 1
+b 140
+b 138
+b 1
+b 3
+b 4
+b 3
+b 2
+b 1
+b 8
+b 9
+b 11
+b 8
+b 2
+b 179
+b 24
+b 26
+b 28
+b 29
+b 28
+b 1
+b 21
+b 1
+b 0
+b 1
+b 6
+b 11
+b 13
+b 15
+b 16
+b 18
+b 15
+b 2
+b 8
+b 1
+b 41
+b 43
+b 48
+b 49
+b 1
+b 182
+b 182
+b 1
+b 3
+b 4
+b 17
+b 1
+b 2
+b 15
+b 1
+b 84
+b 153
+b 154
+b 160
+b 84
+b 1
+b 152
+b 1
+b 21
+b 32
+b 34
+b 35
+b 42
+b 34
+b 2
+b 18
+b 1
+b 41
+b 39
+b 2
+b 33
+b 1
+b 1
+b 1
+b 1
+b 53
+b 51
+b 1
+b 99
+b 108
+b 109
+b 107
+b 1
+b 15
+b 37
+b 38
+b 47
+b 13
+b 1
+b 36
+b 1
+b 16
+b 14
+b 3
+b 3
+b 5
+b 6
+b 8
+b 10
+b 5
+b 2
+b 186
+b 22
+b 163
+b 92
+b 99
+b 172
+b 174
+b 175
+b 170
+b 1
+b 6
+b 38
+b 89
+b 91
+b 86
+b 1
+b 77
+b 104
+b 20
+b 21
+b 23
+b 25
+b 23
+b 1
+b 5
+b 5
+b 6
+b 21
+b 20
+b 2
+b 3
+b 1
+b 1
+b 185
+b 184
+b 1
+b 133
+b 134
+b 22
+b 35
+b 45
+b 47
+b 48
+b 50
+b 52
+b 45
+b 2
+b 5
+b 19
+b 18
+b 1
+b 119
+b 125
+b 123
+b 2
+b 118
+b 1
+b 77
+b 79
+b 89
+b 101
+b 102
+b 116
+b 170
+b 171
+b 99
+b 2
+b 168
+b 2
+b 88
+b 1
+b 98
+b 95
+b 1
+b 3
+b 45
+b 46
+b 57
+b 2
+b 1
+b 5
+b 7
+b 12
+b 5
+b 1
+b 10
+b 16
+b 17
+b 115
+b 16
+b 2
+b 111
+b 1
+b 7
+b 1
+b 175
+b 184
+b 185
+b 190
+b 174
+b 1
+b 31
+b 134
+b 136
+b 72
+b 71
+b 2
+b 61
+b 62
+b 60
+b 1
+b 6
+b 39
+b 53
+b 55
+b 53
+b 1
+b 123
+b 27
+b 64
+b 79
+b 81
+b 81
+b 1
+b 61
+b 1
+b 125
+b 123
+b 2
+b 3
+b 84
+b 85
+b 87
+b 89
+b 84
+b 2
+b 316
+b 337
+b 338
+b 340
+b 364
+b 125
+b 131
+b 132
+b 134
+b 129
+b 2
+b 124
+b 1
+b 130
+b 1
+b 53
+b 223
+b 222
+b 1
+b 116
+b 125
+b 126
+b 125
+b 2
+b 12
+b 13
+b 10
+b 3
+b 17
+b 15
+b 1
+b 105
+b 104
+b 2
+b 23
+b 22
+b 1
+b 171
+b 173
+b 14
+b 33
+b 34
+b 36
+b 38
+b 39
+b 13
+b 2
+b 30
+b 1
+b 27
+b 4
+b 26
+b 32
+b 33
+b 45
+b 24
+b 1
+b 31
+b 2
+b 125
+b 123
+b 1
+b 12
+b 13
+b 10
+b 2
+b 2
+b 1
+b 1
+b 20
+b 27
+b 28
+b 42
+b 20
+b 1
+b 25
+b 1
+b 23
+b 65
+b 168
+b 170
+b 172
+b 173
+b 170
+b 2
+b 64
+b 1
+b 44
+b 50
+b 51
+b 53
+b 55
+b 50
+b 2
+b 10
+b 10
+b 1
+b 49
+b 47
+b 1
+b 25
+b 26
+b 67
+b 80
+b 23
+b 2
+b 63
+b 2
+b 18
+b 4
+b 5
+b 28
+b 45
+b 44
+b 2
+b 27
+b 1
+b 5
+b 7
+b 8
+b 5
+b 2
+b 6
+b 6
+b 1
+b 1
+b 318
+b 318
+b 1
+b 17
+b 30
+b 31
+b 15
+b 2
+b 5
+b 112
+b 111
+b 1
+b 20
+b 21
+b 103
+b 47
+b 35
+b 37
+b 39
+b 40
+b 42
+b 44
+b 46
+b 39
+b 2
+b 32
+b 1
+b 85
+b 8
+b 9
+b 48
+b 53
+b 47
+b 1
+b 32
+b 32
+b 33
+b 45
+b 32
+b 1
+b 42
+b 1
+b 50
+b 96
+b 18
+b 20
+b 21
+b 27
+b 18
+b 2
+b 1
+b 0
+b 1
+b 4
+b 6
+b 24
+b 4
+b 1
+b 52
+b 63
+b 64
+b 66
+b 68
+b 50
+b 1
+b 62
+b 2
+b 54
+b 56
+b 57
+b 56
+b 1
+b 32
+b 31
+b 2
+b 1
+b 61
+b 0
+b 16
+b 17
+b 26
+b 16
+b 1
+b 61
+b 63
+b 79
+b 80
+b 86
+b 63
+b 1
+b 77
+b 1
+b 45
+b 63
+b 64
+b 63
+b 2
+b 43
+b 1
+b 64
+b 62
+b 1
+b 12
+b 25
+b 26
+b 40
+b 24
+b 1
+b 33
+b 31
+b 1
+b 43
+b 12
+b 15
+b 111
+b 123
+b 124
+b 109
+b 1
+b 122
+b 2
+b 12
+b 13
+b 50
+b 11
+b 1
+b 55
+b 66
+b 67
+b 108
+b 64
+b 2
+b 55
+b 1
+b 3
+b 4
+b 8
+b 10
+b 22
+b 2
+b 1
+b 9
+b 1
+b 0
+b 40
+b 39
+b 1
+b 10
+b 14
+b 11
+b 0
+b 2
+b 159
+b 160
+b 159
+b 1
+b 5
+b 10
+b 3
+b 1
+b 118
+b 126
+b 158
+b 116
+b 1
+b 156
+b 1
+b 60
+b 64
+b 65
+b 62
+b 2
+b 5
+b 10
+b 12
+b 13
+b 10
+b 2
+b 25
+b 32
+b 34
+b 35
+b 37
+b 24
+b 2
+b 30
+b 2
+b 6
+b 275
+b 280
+b 78
+b 79
+b 96
+b 95
+b 2
+b 75
+b 1
+b 18
+b 17
+b 1
+b 4
+b 5
+b 4
+b 2
+b 60
+b 61
+b 61
+b 1
+b 48
+b 4
+b 6
+b 8
+b 10
+b 11
+b 13
+b 19
+b 2
+b 1
+b 9
+b 2
+b 57
+b 81
+b 80
+b 1
+b 0
+b 1
+b 1
+b 13
+b 20
+b 118
+b 119
+b 19
+b 2
+b 114
+b 2
+b 10
+b 11
+b 13
+b 10
+b 2
+b 8
+b 10
+b 12
+b 13
+b 24
+b 8
+b 1
+b 1
+b 359
+b 356
+b 1
+b 8
+b 10
+b 11
+b 10
+b 2
+b 5
+b 1
+b 196
+b 50
+b 51
+b 58
+b 6
+b 49
+b 67
+b 75
+b 76
+b 89
+b 73
+b 2
+b 85
+b 1
+b 66
+b 1
+b 177
+b 179
+b 0
+b 2
+b 4
+b 13
+b 15
+b 89
+b 87
+b 1
+b 10
+b 11
+b 41
+b 15
+b 14
+b 2
+b 43
+b 6
+b 8
+b 9
+b 14
+b 86
+b 84
+b 2
+b 6
+b 85
+b 87
+b 88
+b 98
+b 87
+b 1
+b 32
+b 31
+b 2
+b 31
+b 28
+b 1
+b 0
+b 2
+b 3
+b 15
+b 0
+b 2
+b 101
+b 111
+b 112
+b 114
+b 100
+b 2
+b 107
+b 2
+b 110
+b 1
+b 65
+b 427
+b 429
+b 431
+b 432
+b 427
+b 1
+b 144
+b 18
+b 105
+b 106
+b 9
+b 9
+b 1
+b 41
+b 63
+b 64
+b 72
+b 63
+b 2
+b 205
+b 202
+b 1
+b 6
+b 35
+b 37
+b 34
+b 3
+b 111
+b 112
+b 1
+b 1
+b 1
+b 1
+b 0
+b 1
+b 3
+b 48
+b 13
+b 12
+b 1
+b 15
+b 75
+b 81
+b 82
+b 79
+b 2
+b 26
+b 28
+b 28
+b 1
+b 367
+b 369
+b 370
+b 367
+b 2
+b 4
+b 3
+b 31
+b 37
+b 38
+b 42
+b 68
+b 37
+b 1
+b 65
+b 3
+b 28
+b 1
+b 109
+b 111
+b 138
+b 139
+b 146
+b 147
+b 138
+b 1
+b 143
+b 2
+b 25
+b 23
+b 1
+b 34
+b 55
+b 56
+b 61
+b 81
+b 22
+b 30
+b 31
+b 80
+b 29
+b 1
+b 671
+b 669
+b 2
+b 43
+b 44
+b 46
+b 159
+b 438
+b 119
+b 129
+b 131
+b 133
+b 134
+b 8
+b 0
+b 2
+b 4
+b 55
+b 57
+b 53
+b 1
+b 66
+b 68
+b 74
+b 75
+b 77
+b 84
+b 50
+b 49
+b 1
+b 13
+b 18
+b 19
+b 21
+b 18
+b 2
+b 0
+b 82
+b 83
+b 85
+b 87
+b 82
+b 2
+b 53
+b 55
+b 56
+b 1
+b 29
+b 30
+b 29
+b 2
+b 9
+b 7
+b 1
+b 1
+b 8
+b 0
+b 1
+b 45
+b 47
+b 49
+b 51
+b 53
+b 51
+b 1
+b 124
+b 1
+b 15
+b 19
+b 36
+b 37
+b 50
+b 36
+b 2
+b 17
+b 1
+b 43
+b 1
+b 30
+b 43
+b 45
+b 63
+b 8
+b 9
+b 11
+b 20
+b 8
+b 2
+b 16
+b 1
+b 54
+b 66
+b 68
+b 69
+b 52
+b 2
+b 1
+b 0
+b 1
+b 73
+b 83
+b 85
+b 87
+b 73
+b 1
+b 104
+b 152
+b 154
+b 155
+b 157
+b 102
+b 3
+b 149
+b 2
+b 176
+b 176
+b 1
+b 32
+b 53
+b 30
+b 1
+b 125
+b 178
+b 179
+b 195
+b 196
+b 209
+b 123
+b 1
+b 177
+b 2
+b 191
+b 1
+b 530
+b 567
+b 568
+b 570
+b 529
+b 2
+b 564
+b 1
+b 11
+b 15
+b 20
+b 22
+b 14
+b 1
+b 15
+b 22
+b 26
+b 27
+b 29
+b 93
+b 107
+b 108
+b 104
+b 1
+b 10
+b 11
+b 37
+b 10
+b 2
+b 33
+b 1
+b 138
+b 430
+b 431
+b 500
+b 430
+b 2
+b 497
+b 1
+b 292
+b 289
+b 1
+b 20
+b 0
+b 1
+b 10
+b 8
+b 2
+b 32
+b 4
+b 5
+b 9
+b 201
+b 199
+b 1
+b 168
+b 169
+b 166
+b 2
+b 3
+b 7
+b 1
+b 1
+b 61
+b 62
+b 61
+b 1
+b 16
+b 23
+b 33
+b 36
+b 37
+b 48
+b 33
+b 3
+b 44
+b 1
+b 12
+b 13
+b 15
+b 48
+b 50
+b 52
+b 53
+b 55
+b 11
+b 1
+b 51
+b 2
+b 100
+b 108
+b 106
+b 1
+b 99
+b 1
+b 119
+b 116
+b 136
+b 137
+b 139
+b 141
+b 135
+b 1
+b 115
+b 1
+b 34
+b 17
+b 17
+b 1
+b 37
+b 39
+b 0
+b 12
+b 14
+b 24
+b 25
+b 22
+b 2
+b 14
+b 1
+b 10
+b 11
+b 10
+b 2
+b 2
+b 45
+b 13
+b 14
+b 16
+b 18
+b 11
+b 2
+b 16
+b 1
+b 66
+b 67
+b 69
+b 66
+b 2
+b 0
+b 2
+b 164
+b 162
+b 1
+b 35
+b 35
+b 1
+b 8
+b 6
+b 1
+b 6
+b 3
+b 23
+b 37
+b 38
+b 55
+b 37
+b 2
+b 51
+b 1
+b 21
+b 1
+b 50
+b 50
+b 1
+b 2
+b 4
+b 6
+b 7
+b 4
+b 2
+b 2
+b 55
+b 57
+b 53
+b 1
+b 16
+b 5
+b 5
+b 1
+b 10
+b 65
+b 67
+b 68
+b 76
+b 67
+b 1
+b 73
+b 1
+b 151
+b 153
+b 154
+b 156
+b 158
+b 160
+b 161
+b 163
+b 165
+b 151
+b 2
+b 158
+b 2
+b 76
+b 82
+b 83
+b 75
+b 2
+b 92
+b 27
+b 23
+b 57
+b 59
+b 57
+b 3
+b 1
+b 99
+b 101
+b 147
+b 148
+b 97
+b 1
+b 146
+b 1
+b 18
+b 87
+b 89
+b 102
+b 123
+b 100
+b 2
+b 115
+b 143
+b 144
+b 146
+b 148
+b 142
+b 1
+b 147
+b 1
+b 8
+b 15
+b 36
+b 14
+b 2
+b 32
+b 2
+b 79
+b 80
+b 77
+b 2
+b 24
+b 25
+b 27
+b 79
+b 24
+b 2
+b 48
+b 46
+b 1
+b 5
+b 16
+b 17
+b 16
+b 1
+b 2
+b 0
+b 1
+b 32
+b 34
+b 35
+b 34
+b 1
+b 22
+b 48
+b 19
+b 1
+b 32
+b 4
+b 5
+b 7
+b 2
+b 2
+b 42
+b 41
+b 1
+b 113
+b 23
+b 17
+b 19
+b 21
+b 22
+b 96
+b 21
+b 1
+b 93
+b 1
+b 293
+b 295
+b 296
+b 293
+b 2
+b 36
+b 34
+b 1
+b 308
+b 307
+b 2
+b 44
+b 55
+b 55
+b 1
+b 202
+b 151
+b 153
+b 154
+b 156
+b 158
+b 156
+b 1
+b 42
+b 50
+b 51
+b 48
+b 2
+b 13
+b 20
+b 31
+b 32
+b 46
+b 77
+b 31
+b 2
+b 17
+b 1
+b 40
+b 1
+b 10
+b 11
+b 13
+b 15
+b 16
+b 18
+b 9
+b 1
+b 14
+b 2
+b 0
+b 4
+b 11
+b 12
+b 14
+b 76
+b 11
+b 2
+b 72
+b 2
+b 633
+b 49
+b 48
+b 2
+b 66
+b 67
+b 69
+b 66
+b 2
+b 43
+b 41
+b 1
+b 5
+b 7
+b 2
+b 1
+b 8
+b 8
+b 1
+b 10
+b 11
+b 13
+b 27
+b 29
+b 9
+b 1
+b 9
+b 11
+b 7
+b 1
+b 6
+b 4
+b 1
+b 144
+b 145
+b 143
+b 1
+b 19
+b 19
+b 1
+b 44
+b 27
+b 24
+b 1
+b 9
+b 10
+b 0
+b 27
+b 63
+b 64
+b 66
+b 66
+b 1
+b 2
+b 266
+b 268
+b 270
+b 272
+b 266
+b 1
+b 29
+b 53
+b 54
+b 27
+b 1
+b 52
+b 1
+b 140
+b 171
+b 45
+b 7
+b 8
+b 4
+b 5
+b 6
+b 8
+b 10
+b 5
+b 2
+b 51
+b 53
+b 55
+b 56
+b 1
+b 32
+b 34
+b 36
+b 37
+b 39
+b 44
+b 30
+b 1
+b 35
+b 2
+b 56
+b 1
+b 19
+b 21
+b 18
+b 15
+b 1
+b 6
+b 7
+b 12
+b 4
+b 2
+b 18
+b 16
+b 2
+b 128
+b 125
+b 1
+b 3
+b 4
+b 3
+b 2
+b 31
+b 30
+b 1
+b 100
+b 631
+b 629
+b 1
+b 56
+b 58
+b 64
+b 65
+b 69
+b 70
+b 62
+b 2
+b 173
+b 193
+b 170
+b 1
+b 9
+b 8
+b 2
+b 174
+b 175
+b 177
+b 179
+b 174
+b 2
+b 87
+b 1
+b 1
+b 1
+b 39
+b 40
+b 60
+b 39
+b 2
+b 56
+b 1
+b 735
+b 736
+b 732
+b 1
+b 1
+b 0
+b 1
+b 21
+b 192
+b 192
+b 1
+b 155
+b 162
+b 161
+b 1
+b 5
+b 46
+b 47
+b 5
+b 1
+b 44
+b 1
+b 42
+b 5
+b 6
+b 10
+b 4
+b 1
+b 0
+b 2
+b 7
+b 6
+b 2
+b 40
+b 49
+b 20
+b 28
+b 29
+b 0
+b 1
+b 9
+b 44
+b 51
+b 42
+b 2
+b 52
+b 62
+b 63
+b 60
+b 2
+b 51
+b 1
+b 3
+b 4
+b 21
+b 13
+b 25
+b 12
+b 2
+b 20
+b 1
+b 64
+b 65
+b 67
+b 6
+b 5
+b 1
+b 0
+b 2
+b 6
+b 4
+b 2
+b 32
+b 6
+b 7
+b 9
+b 5
+b 1
+b 54
+b 56
+b 58
+b 59
+b 52
+b 1
+b 57
+b 1
+b 16
+b 112
+b 122
+b 110
+b 2
+b 10
+b 11
+b 10
+b 1
+b 16
+b 17
+b 19
+b 15
+b 1
+b 1
+b 5
+b 4
+b 1
+b 47
+b 12
+b 25
+b 11
+b 2
+b 21
+b 1
+b 59
+b 159
+b 161
+b 163
+b 164
+b 157
+b 1
+b 57
+b 1
+b 83
+b 81
+b 2
+b 15
+b 16
+b 24
+b 13
+b 2
+b 14
+b 11
+b 1
+b 6
+b 8
+b 10
+b 11
+b 8
+b 2
+b 2
+b 4
+b 4
+b 1
+b 6
+b 13
+b 14
+b 4
+b 1
+b 12
+b 1
+b 27
+b 96
+b 98
+b 98
+b 1
+b 3
+b 5
+b 6
+b 3
+b 2
+b 20
+b 22
+b 22
+b 1
+b 15
+b 13
+b 2
+b 152
+b 152
+b 1
+b 2
+b 3
+b 13
+b 14
+b 12
+b 1
+b 3
+b 343
+b 345
+b 345
+b 1
+b 8
+b 9
+b 11
+b 13
+b 14
+b 6
+b 2
+b 11
+b 1
+b 13
+b 116
+b 117
+b 123
+b 116
+b 2
+b 119
+b 1
+b 6
+b 15
+b 14
+b 1
+b 0
+b 2
+b 9
+b 10
+b 11
+b 1
+b 24
+b 28
+b 30
+b 31
+b 47
+b 30
+b 1
+b 21
+b 1
+b 107
+b 115
+b 116
+b 114
+b 1
+b 3
+b 45
+b 47
+b 49
+b 50
+b 6
+b 49
+b 221
+b 222
+b 224
+b 229
+b 220
+b 1
+b 227
+b 1
+b 9
+b 11
+b 95
+b 96
+b 98
+b 95
+b 2
+b 16
+b 14
+b 1
+b 477
+b 2
+b 3
+b 15
+b 2
+b 1
+b 12
+b 1
+b 104
+b 106
+b 107
+b 14
+b 20
+b 28
+b 29
+b 36
+b 28
+b 2
+b 18
+b 1
+b 30
+b 1
+b 90
+b 1
+b 16
+b 17
+b 19
+b 4
+b 17
+b 6
+b 53
+b 65
+b 71
+b 72
+b 75
+b 79
+b 102
+b 116
+b 146
+b 114
+b 2
+b 101
+b 1
+b 4
+b 96
+b 98
+b 99
+b 98
+b 1
+b 65
+b 55
+b 61
+b 62
+b 61
+b 2
+b 53
+b 1
+b 66
+b 65
+b 2
+b 0
+b 3
+b 3
+b 1
+b 12
+b 13
+b 15
+b 10
+b 2
+b 7
+b 4
+b 1
+b 71
+b 87
+b 88
+b 90
+b 87
+b 2
+b 3
+b 1
+b 1
+b 10
+b 59
+b 72
+b 57
+b 1
+b 0
+b 2
+b 4
+b 6
+b 7
+b 8
+b 4
+b 4
+b 133
+b 4
+b 6
+b 7
+b 48
+b 4
+b 2
+b 45
+b 2
+b 15
+b 15
+b 1
+b 34
+b 35
+b 34
+b 2
+b 7
+b 6
+b 1
+b 66
+b 68
+b 69
+b 71
+b 73
+b 75
+b 68
+b 2
+b 63
+b 1
+b 0
+b 59
+b 218
+b 219
+b 225
+b 232
+b 217
+b 1
+b 230
+b 2
+b 50
+b 48
+b 1
+b 52
+b 77
+b 78
+b 77
+b 2
+b 25
+b 25
+b 1
+b 27
+b 24
+b 1
+b 64
+b 65
+b 71
+b 80
+b 61
+b 1
+b 37
+b 36
+b 2
+b 35
+b 36
+b 44
+b 35
+b 1
+b 4
+b 4
+b 1
+b 33
+b 1
+b 0
+b 2
+b 290
+b 292
+b 293
+b 301
+b 303
+b 292
+b 1
+b 53
+b 55
+b 7
+b 6
+b 2
+b 31
+b 32
+b 34
+b 30
+b 1
+b 7
+b 1
+b 8
+b 9
+b 133
+b 135
+b 4
+b 5
+b 20
+b 2
+b 2
+b 15
+b 1
+b 25
+b 23
+b 3
+b 1
+b 8
+b 17
+b 0
+b 1
+b 15
+b 1
+b 345
+b 343
+b 1
+b 27
+b 2
+b 3
+b 8
+b 2
+b 1
+b 10
+b 12
+b 12
+b 1
+b 48
+b 49
+b 48
+b 1
+b 78
+b 90
+b 10
+b 25
+b 64
+b 110
+b 112
+b 114
+b 23
+b 3
+b 111
+b 1
+b 59
+b 1
+b 63
+b 106
+b 124
+b 125
+b 142
+b 123
+b 1
+b 141
+b 1
+b 24
+b 26
+b 27
+b 27
+b 28
+b 39
+b 26
+b 1
+b 37
+b 1
+b 86
+b 43
+b 45
+b 47
+b 48
+b 53
+b 47
+b 1
+b 50
+b 1
+b 40
+b 42
+b 44
+b 45
+b 38
+b 1
+b 43
+b 2
+b 65
+b 62
+b 1
+b 33
+b 34
+b 41
+b 31
+b 19
+b 24
+b 24
+b 1
+b 19
+b 19
+b 1
+b 85
+b 97
+b 97
+b 1
+b 82
+b 1
+b 1
+b 284
+b 18
+b 26
+b 17
+b 2
+b 22
+b 1
+b 33
+b 41
+b 42
+b 44
+b 45
+b 41
+b 3
+b 158
+b 159
+b 173
+b 180
+b 156
+b 2
+b 177
+b 1
+b 9
+b 28
+b 10
+b 11
+b 34
+b 35
+b 9
+b 1
+b 33
+b 2
+b 16
+b 13
+b 1
+b 6
+b 17
+b 19
+b 20
+b 22
+b 55
+b 79
+b 80
+b 4
+b 56
+b 55
+b 1
+b 19
+b 20
+b 31
+b 19
+b 1
+b 28
+b 2
+b 19
+b 84
+b 85
+b 99
+b 84
+b 2
+b 95
+b 1
+b 6
+b 15
+b 13
+b 1
+b 12
+b 12
+b 1
+b 16
+b 18
+b 0
+b 1
+b 0
+b 1
+b 59
+b 66
+b 67
+b 69
+b 71
+b 59
+b 1
+b 64
+b 1
+b 32
+b 33
+b 35
+b 37
+b 45
+b 32
+b 2
+b 22
+b 22
+b 1
+b 56
+b 58
+b 59
+b 54
+b 1
+b 6
+b 24
+b 31
+b 33
+b 33
+b 1
+b 2
+b 10
+b 11
+b 0
+b 1
+b 45
+b 117
+b 119
+b 120
+b 132
+b 117
+b 2
+b 130
+b 1
+b 8
+b 50
+b 51
+b 77
+b 78
+b 77
+b 1
+b 51
+b 52
+b 51
+b 1
+b 5
+b 166
+b 167
+b 166
+b 1
+b 170
+b 168
+b 1
+b 38
+b 44
+b 40
+b 42
+b 43
+b 40
+b 2
+b 2
+b 3
+b 5
+b 2
+b 2
+b 12
+b 19
+b 20
+b 11
+b 1
+b 16
+b 25
+b 37
+b 39
+b 40
+b 55
+b 56
+b 60
+b 37
+b 2
+b 53
+b 2
+b 9
+b 8
+b 1
+b 15
+b 17
+b 18
+b 20
+b 34
+b 15
+b 2
+b 25
+b 24
+b 2
+b 3
+b 5
+b 7
+b 24
+b 19
+b 20
+b 76
+b 72
+b 79
+b 98
+b 96
+b 2
+b 78
+b 1
+b 19
+b 21
+b 62
+b 19
+b 1
+b 30
+b 31
+b 42
+b 43
+b 49
+b 51
+b 30
+b 1
+b 39
+b 2
+b 48
+b 1
+b 34
+b 44
+b 83
+b 5
+b 6
+b 8
+b 8
+b 1
+b 2
+b 1
+b 132
+b 134
+b 135
+b 132
+b 2
+b 74
+b 72
+b 1
+b 28
+b 388
+b 390
+b 392
+b 394
+b 395
+b 397
+b 399
+b 392
+b 2
+b 397
+b 1
+b 10
+b 27
+b 28
+b 34
+b 36
+b 27
+b 2
+b 30
+b 1
+b 7
+b 1
+b 26
+b 28
+b 29
+b 24
+b 22
+b 1
+b 3
+b 4
+b 6
+b 11
+b 12
+b 2
+b 1
+b 23
+b 23
+b 1
+b 30
+b 31
+b 46
+b 29
+b 1
+b 71
+b 83
+b 84
+b 83
+b 2
+b 213
+b 211
+b 2
+b 4
+b 2
+b 1
+b 19
+b 69
+b 18
+b 2
+b 64
+b 1
+b 9
+b 8
+b 10
+b 11
+b 3
+b 2
+b 4
+b 1
+b 0
+b 1
+b 0
+b 2
+b 56
+b 87
+b 54
+b 1
+b 6
+b 7
+b 5
+b 1
+b 54
+b 56
+b 58
+b 59
+b 58
+b 1
+b 51
+b 1
+b 29
+b 39
+b 31
+b 44
+b 30
+b 1
+b 6
+b 71
+b 79
+b 70
+b 1
+b 0
+b 2
+b 3
+b 17
+b 16
+b 25
+b 26
+b 33
+b 23
+b 2
+b 15
+b 1
+b 12
+b 10
+b 2
+b 13
+b 15
+b 17
+b 19
+b 39
+b 38
+b 1
+b 2
+b 0
+b 2
+b 2
+b 24
+b 26
+b 28
+b 26
+b 1
+b 8
+b 58
+b 57
+b 1
+b 3
+b 4
+b 3
+b 2
+b 3
+b 1
+b 1
+b 27
+b 43
+b 104
+b 42
+b 1
+b 35
+b 34
+b 1
+b 96
+b 194
+b 196
+b 197
+b 196
+b 2
+b 191
+b 1
+b 117
+b 18
+b 19
+b 21
+b 22
+b 30
+b 41
+b 18
+b 3
+b 26
+b 2
+b 33
+b 1
+b 116
+b 116
+b 1
+b 4
+b 1
+b 6
+b 5
+b 2
+b 154
+b 154
+b 1
+b 141
+b 143
+b 147
+b 148
+b 150
+b 151
+b 147
+b 3
+b 138
+b 1
+b 52
+b 16
+b 17
+b 14
+b 2
+b 12
+b 19
+b 18
+b 2
+b 8
+b 7
+b 1
+b 17
+b 19
+b 20
+b 35
+b 19
+b 2
+b 31
+b 1
+b 12
+b 14
+b 14
+b 1
+b 48
+b 50
+b 51
+b 48
+b 2
+b 136
+b 17
+b 19
+b 17
+b 1
+b 4
+b 70
+b 76
+b 77
+b 79
+b 80
+b 82
+b 69
+b 2
+b 72
+b 2
+b 75
+b 2
+b 9
+b 11
+b 13
+b 15
+b 17
+b 17
+b 1
+b 6
+b 1
+b 88
+b 90
+b 96
+b 109
+b 90
+b 1
+b 93
+b 2
+b 3
+b 4
+b 6
+b 7
+b 3
+b 3
+b 14
+b 16
+b 22
+b 112
+b 114
+b 115
+b 117
+b 181
+b 110
+b 1
+b 28
+b 25
+b 1
+b 62
+b 63
+b 65
+b 67
+b 68
+b 62
+b 2
+b 13
+b 7
+b 13
+b 6
+b 2
+b 48
+b 117
+b 144
+b 116
+b 2
+b 139
+b 1
+b 46
+b 50
+b 44
+b 1
+b 87
+b 88
+b 87
+b 1
+b 0
+b 2
+b 96
+b 106
+b 107
+b 109
+b 115
+b 103
+b 1
+b 35
+b 34
+b 1
+b 15
+b 20
+b 21
+b 30
+b 19
+b 1
+b 28
+b 2
+b 6
+b 18
+b 19
+b 25
+b 27
+b 28
+b 30
+b 17
+b 1
+b 26
+b 2
+b 58
+b 60
+b 97
+b 99
+b 56
+b 1
+b 125
+b 18
+b 20
+b 22
+b 24
+b 25
+b 36
+b 24
+b 2
+b 15
+b 1
+b 284
+b 290
+b 289
+b 1
+b 41
+b 8
+b 7
+b 2
+b 21
+b 28
+b 4
+b 6
+b 7
+b 9
+b 11
+b 2
+b 1
+b 10
+b 1
+b 55
+b 10
+b 11
+b 100
+b 13
+b 19
+b 20
+b 12
+b 2
+b 15
+b 2
+b 24
+b 21
+b 1
+b 102
+b 100
+b 1
+b 60
+b 61
+b 83
+b 60
+b 1
+b 226
+b 128
+b 130
+b 132
+b 130
+b 1
+b 35
+b 36
+b 45
+b 46
+b 43
+b 2
+b 36
+b 1
+b 0
+b 0
+b 22
+b 25
+b 32
+b 34
+b 35
+b 47
+b 24
+b 2
+b 30
+b 2
+b 54
+b 54
+b 1
+b 29
+b 31
+b 32
+b 27
+b 1
+b 3
+b 3
+b 24
+b 25
+b 27
+b 17
+b 19
+b 30
+b 31
+b 33
+b 34
+b 40
+b 42
+b 30
+b 3
+b 60
+b 62
+b 63
+b 65
+b 77
+b 78
+b 80
+b 62
+b 2
+b 73
+b 2
+b 23
+b 39
+b 0
+b 2
+b 3
+b 22
+b 2
+b 2
+b 17
+b 1
+b 70
+b 87
+b 88
+b 90
+b 92
+b 68
+b 2
+b 85
+b 2
+b 33
+b 34
+b 36
+b 38
+b 39
+b 46
+b 31
+b 2
+b 37
+b 1
+b 53
+b 51
+b 1
+b 780
+b 782
+b 803
+b 801
+b 3
+b 17
+b 15
+b 1
+b 7
+b 31
+b 42
+b 56
+b 54
+b 2
+b 41
+b 1
+b 214
+b 216
+b 218
+b 219
+b 221
+b 222
+b 218
+b 3
+b 211
+b 1
+b 71
+b 72
+b 78
+b 71
+b 2
+b 74
+b 1
+b 47
+b 45
+b 32
+b 31
+b 1
+b 11
+b 18
+b 19
+b 9
+b 3
+b 14
+b 1
+b 1
+b 23
+b 49
+b 50
+b 53
+b 54
+b 48
+b 1
+b 52
+b 2
+b 148
+b 145
+b 1
+b 210
+b 69
+b 85
+b 86
+b 3
+b 29
+b 43
+b 63
+b 64
+b 66
+b 67
+b 28
+b 2
+b 61
+b 3
+b 39
+b 1
+b 61
+b 1
+b 0
+b 2
+b 97
+b 49
+b 50
+b 52
+b 54
+b 30
+b 38
+b 39
+b 45
+b 38
+b 2
+b 28
+b 1
+b 70
+b 71
+b 70
+b 2
+b 4
+b 3
+b 2
+b 25
+b 13
+b 12
+b 1
+b 46
+b 47
+b 55
+b 70
+b 1
+b 2
+b 7
+b 1
+b 1
+b 4
+b 2
+b 14
+b 23
+b 25
+b 26
+b 25
+b 2
+b 11
+b 1
+b 17
+b 17
+b 1
+b 13
+b 21
+b 22
+b 31
+b 32
+b 100
+b 11
+b 1
+b 20
+b 2
+b 27
+b 1
+b 15
+b 17
+b 38
+b 4
+b 5
+b 13
+b 31
+b 32
+b 38
+b 39
+b 29
+b 2
+b 36
+b 1
+b 13
+b 1
+b 90
+b 112
+b 109
+b 1
+b 134
+b 135
+b 143
+b 132
+b 2
+b 80
+b 80
+b 1
+b 18
+b 30
+b 15
+b 1
+b 37
+b 38
+b 56
+b 86
+b 10
+b 68
+b 74
+b 76
+b 261
+b 263
+b 265
+b 266
+b 263
+b 2
+b 9
+b 17
+b 34
+b 35
+b 43
+b 17
+b 1
+b 32
+b 1
+b 25
+b 90
+b 91
+b 93
+b 90
+b 2
+b 5
+b 3
+b 1
+b 129
+b 131
+b 132
+b 134
+b 152
+b 131
+b 2
+b 148
+b 1
+b 27
+b 47
+b 48
+b 54
+b 57
+b 47
+b 2
+b 50
+b 1
+b 12
+b 11
+b 1
+b 17
+b 18
+b 29
+b 118
+b 17
+b 1
+b 26
+b 3
+b 31
+b 14
+b 30
+b 29
+b 1
+b 11
+b 9
+b 1
+b 22
+b 23
+b 21
+b 1
+b 1
+b 89
+b 86
+b 1
+b 123
+b 124
+b 142
+b 121
+b 2
+b 3
+b 109
+b 123
+b 149
+b 151
+b 107
+b 2
+b 149
+b 1
+b 530
+b 532
+b 550
+b 551
+b 528
+b 1
+b 549
+b 1
+b 7
+b 72
+b 73
+b 71
+b 1
+b 19
+b 30
+b 31
+b 29
+b 1
+b 1
+b 0
+b 2
+b 11
+b 393
+b 62
+b 76
+b 77
+b 79
+b 80
+b 82
+b 84
+b 86
+b 76
+b 3
+b 83
+b 1
+b 127
+b 144
+b 156
+b 158
+b 160
+b 161
+b 176
+b 160
+b 1
+b 125
+b 1
+b 72
+b 81
+b 167
+b 168
+b 170
+b 167
+b 2
+b 69
+b 1
+b 27
+b 26
+b 1
+b 63
+b 69
+b 75
+b 68
+b 2
+b 71
+b 3
+b 1
+b 2
+b 0
+b 1
+b 4
+b 17
+b 19
+b 20
+b 17
+b 2
+b 24
+b 25
+b 33
+b 24
+b 2
+b 29
+b 2
+b 120
+b 12
+b 13
+b 29
+b 12
+b 1
+b 26
+b 2
+b 1
+b 236
+b 246
+b 247
+b 244
+b 2
+b 9
+b 1
+b 116
+b 118
+b 119
+b 126
+b 118
+b 2
+b 122
+b 1
+b 35
+b 25
+b 46
+b 47
+b 64
+b 65
+b 67
+b 69
+b 45
+b 1
+b 63
+b 2
+b 76
+b 78
+b 86
+b 87
+b 89
+b 78
+b 1
+b 83
+b 2
+b 86
+b 1
+b 24
+b 25
+b 39
+b 40
+b 52
+b 24
+b 2
+b 35
+b 2
+b 47
+b 1
+b 36
+b 35
+b 1
+b 14
+b 189
+b 190
+b 8
+b 9
+b 8
+b 1
+b 32
+b 45
+b 44
+b 2
+b 2
+b 4
+b 6
+b 0
+b 1
+b 5
+b 1
+b 4
+b 6
+b 2
+b 1
+b 144
+b 145
+b 147
+b 149
+b 144
+b 2
+b 21
+b 53
+b 59
+b 52
+b 2
+b 55
+b 1
+b 8
+b 97
+b 108
+b 109
+b 107
+b 1
+b 15
+b 91
+b 92
+b 13
+b 1
+b 2
+b 36
+b 48
+b 46
+b 2
+b 35
+b 1
+b 5
+b 121
+b 121
+b 1
+b 50
+b 56
+b 57
+b 54
+b 2
+b 49
+b 1
+b 35
+b 54
+b 54
+b 1
+b 19
+b 67
+b 66
+b 1
+b 0
+b 2
+b 3
+b 0
+b 2
+b 32
+b 34
+b 36
+b 32
+b 1
+b 8
+b 20
+b 22
+b 23
+b 1
+b 27
+b 28
+b 37
+b 25
+b 2
+b 0
+b 1
+b 15
+b 206
+b 208
+b 210
+b 211
+b 213
+b 214
+b 204
+b 1
+b 209
+b 3
+b 0
+b 28
+b 45
+b 46
+b 60
+b 45
+b 2
+b 56
+b 1
+b 5
+b 6
+b 5
+b 1
+b 12
+b 213
+b 214
+b 216
+b 222
+b 226
+b 227
+b 212
+b 1
+b 223
+b 3
+b 154
+b 155
+b 153
+b 1
+b 3
+b 3
+b 1
+b 139
+b 153
+b 154
+b 178
+b 177
+b 2
+b 124
+b 126
+b 127
+b 126
+b 1
+b 93
+b 95
+b 96
+b 107
+b 119
+b 106
+b 1
+b 4
+b 2
+b 1
+b 44
+b 45
+b 47
+b 43
+b 1
+b 1
+b 135
+b 137
+b 139
+b 140
+b 144
+b 146
+b 148
+b 139
+b 2
+b 6
+b 7
+b 9
+b 6
+b 2
+b 0
+b 3
+b 4
+b 13
+b 29
+b 31
+b 32
+b 27
+b 1
+b 30
+b 1
+b 117
+b 33
+b 35
+b 36
+b 38
+b 40
+b 35
+b 2
+b 81
+b 80
+b 2
+b 23
+b 27
+b 28
+b 27
+b 2
+b 24
+b 25
+b 44
+b 22
+b 2
+b 39
+b 1
+b 58
+b 60
+b 58
+b 1
+b 80
+b 82
+b 83
+b 85
+b 49
+b 56
+b 55
+b 1
+b 15
+b 15
+b 17
+b 18
+b 0
+b 1
+b 0
+b 1
+b 22
+b 24
+b 25
+b 66
+b 7
+b 97
+b 96
+b 2
+b 23
+b 25
+b 26
+b 28
+b 25
+b 2
+b 22
+b 6
+b 8
+b 10
+b 12
+b 4
+b 1
+b 11
+b 1
+b 11
+b 13
+b 9
+b 1
+b 3
+b 5
+b 0
+b 1
+b 79
+b 81
+b 82
+b 101
+b 102
+b 79
+b 2
+b 99
+b 1
+b 6
+b 6
+b 4
+b 3
+b 31
+b 39
+b 40
+b 37
+b 2
+b 30
+b 1
+b 35
+b 42
+b 43
+b 272
+b 274
+b 276
+b 278
+b 279
+b 296
+b 297
+b 276
+b 2
+b 294
+b 2
+b 3
+b 1
+b 1
+b 68
+b 90
+b 91
+b 138
+b 66
+b 1
+b 89
+b 2
+b 133
+b 1
+b 54
+b 52
+b 1
+b 23
+b 44
+b 45
+b 1
+b 1
+b 1
+b 117
+b 119
+b 120
+b 117
+b 2
+b 142
+b 139
+b 1
+b 125
+b 123
+b 2
+b 3
+b 11
+b 54
+b 53
+b 1
+b 10
+b 17
+b 19
+b 20
+b 22
+b 9
+b 2
+b 15
+b 2
+b 132
+b 37
+b 39
+b 2
+b 3
+b 1
+b 1
+b 148
+b 148
+b 1
+b 5
+b 6
+b 5
+b 1
+b 4
+b 56
+b 57
+b 59
+b 84
+b 56
+b 2
+b 1
+b 39
+b 1
+b 1
+b 14
+b 26
+b 66
+b 67
+b 69
+b 71
+b 72
+b 65
+b 1
+b 70
+b 2
+b 4
+b 2
+b 1
+b 99
+b 105
+b 107
+b 108
+b 97
+b 2
+b 105
+b 1
+b 31
+b 119
+b 118
+b 1
+b 16
+b 17
+b 30
+b 14
+b 2
+b 28
+b 1
+b 29
+b 30
+b 32
+b 34
+b 29
+b 2
+b 36
+b 36
+b 1
+b 16
+b 191
+b 192
+b 10
+b 81
+b 82
+b 84
+b 22
+b 84
+b 47
+b 57
+b 58
+b 60
+b 60
+b 1
+b 32
+b 29
+b 1
+b 183
+b 189
+b 191
+b 187
+b 1
+b 65
+b 72
+b 70
+b 2
+b 64
+b 1
+b 24
+b 26
+b 146
+b 148
+b 150
+b 151
+b 153
+b 148
+b 2
+b 151
+b 1
+b 34
+b 42
+b 43
+b 45
+b 47
+b 48
+b 50
+b 45
+b 2
+b 34
+b 39
+b 40
+b 37
+b 2
+b 38
+b 1
+b 16
+b 18
+b 19
+b 24
+b 25
+b 40
+b 16
+b 2
+b 567
+b 6
+b 8
+b 10
+b 4
+b 1
+b 205
+b 206
+b 228
+b 228
+b 1
+b 31
+b 563
+b 561
+b 1
+b 39
+b 41
+b 43
+b 49
+b 50
+b 37
+b 1
+b 1
+b 3
+b 0
+b 3
+b 102
+b 100
+b 1
+b 3
+b 124
+b 125
+b 0
+b 1
+b 0
+b 157
+b 159
+b 196
+b 155
+b 1
+b 259
+b 273
+b 275
+b 276
+b 283
+b 285
+b 286
+b 275
+b 2
+b 281
+b 2
+b 6
+b 6
+b 7
+b 13
+b 14
+b 12
+b 1
+b 43
+b 42
+b 2
+b 164
+b 166
+b 168
+b 166
+b 1
+b 4
+b 5
+b 1
+b 2
+b 3
+b 5
+b 0
+b 2
+b 1
+b 54
+b 64
+b 63
+b 1
+b 6
+b 7
+b 9
+b 17
+b 6
+b 2
+b 467
+b 468
+b 470
+b 471
+b 473
+b 470
+b 2
+b 7
+b 24
+b 4
+b 1
+b 13
+b 13
+b 1
+b 48
+b 49
+b 48
+b 2
+b 4
+b 5
+b 4
+b 2
+b 13
+b 12
+b 1
+b 137
+b 138
+b 144
+b 136
+b 1
+b 31
+b 32
+b 34
+b 31
+b 2
+b 58
+b 4
+b 5
+b 34
+b 52
+b 54
+b 3
+b 1
+b 53
+b 1
+b 10
+b 12
+b 14
+b 16
+b 17
+b 14
+b 2
+b 87
+b 88
+b 99
+b 101
+b 85
+b 2
+b 99
+b 1
+b 37
+b 34
+b 1
+b 115
+b 116
+b 118
+b 114
+b 1
+b 94
+b 121
+b 92
+b 3
+b 115
+b 1
+b 34
+b 36
+b 37
+b 43
+b 63
+b 34
+b 2
+b 24
+b 25
+b 35
+b 36
+b 22
+b 2
+b 33
+b 1
+b 27
+b 4
+b 76
+b 78
+b 80
+b 82
+b 80
+b 1
+b 15
+b 28
+b 29
+b 31
+b 48
+b 49
+b 55
+b 28
+b 2
+b 44
+b 2
+b 50
+b 1
+b 145
+b 147
+b 148
+b 161
+b 142
+b 1
+b 2
+b 34
+b 41
+b 42
+b 44
+b 51
+b 72
+b 3
+b 8
+b 61
+b 59
+b 1
+b 61
+b 63
+b 64
+b 69
+b 61
+b 2
+b 84
+b 96
+b 95
+b 1
+b 44
+b 41
+b 1
+b 7
+b 8
+b 16
+b 7
+b 2
+b 12
+b 1
+b 36
+b 37
+b 39
+b 40
+b 74
+b 87
+b 36
+b 3
+b 28
+b 26
+b 1
+b 5
+b 161
+b 169
+b 170
+b 172
+b 169
+b 2
+b 66
+b 75
+b 73
+b 3
+b 65
+b 1
+b 18
+b 26
+b 27
+b 64
+b 65
+b 81
+b 24
+b 2
+b 62
+b 2
+b 75
+b 1
+b 11
+b 16
+b 9
+b 2
+b 3
+b 4
+b 2
+b 1
+b 31
+b 30
+b 1
+b 115
+b 117
+b 118
+b 120
+b 122
+b 115
+b 2
+b 46
+b 64
+b 122
+b 123
+b 122
+b 1
+b 4
+b 2
+b 1
+b 71
+b 72
+b 74
+b 79
+b 176
+b 177
+b 192
+b 71
+b 2
+b 172
+b 2
+b 187
+b 1
+b 43
+b 14
+b 15
+b 24
+b 25
+b 14
+b 1
+b 21
+b 2
+b 14
+b 12
+b 1
+b 203
+b 205
+b 41
+b 42
+b 55
+b 27
+b 66
+b 10
+b 11
+b 27
+b 9
+b 1
+b 26
+b 1
+b 198
+b 18
+b 20
+b 21
+b 18
+b 2
+b 97
+b 97
+b 1
+b 164
+b 166
+b 166
+b 1
+b 29
+b 30
+b 29
+b 1
+b 38
+b 199
+b 6
+b 52
+b 53
+b 65
+b 52
+b 1
+b 61
+b 1
+b 106
+b 103
+b 1
+b 35
+b 36
+b 35
+b 2
+b 18
+b 16
+b 1
+b 9
+b 16
+b 16
+b 23
+b 15
+b 2
+b 19
+b 1
+b 63
+b 64
+b 63
+b 2
+b 6
+b 7
+b 9
+b 6
+b 2
+b 7
+b 1
+b 2
+b 10
+b 0
+b 1
+b 71
+b 84
+b 131
+b 69
+b 1
+b 20
+b 18
+b 3
+b 4
+b 16
+b 17
+b 16
+b 1
+b 0
+b 2
+b 2
+b 1
+b 73
+b 79
+b 80
+b 82
+b 45
+b 47
+b 45
+b 1
+b 55
+b 57
+b 58
+b 66
+b 73
+b 55
+b 2
+b 70
+b 2
+b 4
+b 6
+b 7
+b 9
+b 10
+b 4
+b 2
+b 0
+b 10
+b 3
+b 2
+b 1
+b 9
+b 10
+b 58
+b 150
+b 157
+b 158
+b 169
+b 170
+b 172
+b 174
+b 169
+b 2
+b 148
+b 1
+b 38
+b 36
+b 1
+b 12
+b 13
+b 11
+b 1
+b 17
+b 139
+b 136
+b 1
+b 23
+b 23
+b 1
+b 5
+b 3
+b 1
+b 25
+b 26
+b 24
+b 1
+b 2
+b 12
+b 12
+b 1
+b 37
+b 103
+b 217
+b 225
+b 226
+b 228
+b 240
+b 216
+b 2
+b 221
+b 2
+b 12
+b 122
+b 126
+b 128
+b 129
+b 131
+b 132
+b 138
+b 121
+b 2
+b 126
+b 3
+b 50
+b 6
+b 19
+b 33
+b 34
+b 36
+b 152
+b 4
+b 5
+b 4
+b 1
+b 2
+b 4
+b 5
+b 22
+b 4
+b 2
+b 122
+b 130
+b 131
+b 153
+b 120
+b 1
+b 129
+b 1
+b 46
+b 47
+b 49
+b 74
+b 44
+b 2
+b 72
+b 1
+b 57
+b 56
+b 1
+b 52
+b 21
+b 39
+b 0
+b 2
+b 3
+b 23
+b 2
+b 1
+b 20
+b 2
+b 20
+b 22
+b 23
+b 15
+b 4
+b 202
+b 203
+b 201
+b 1
+b 35
+b 8
+b 23
+b 25
+b 27
+b 28
+b 30
+b 21
+b 1
+b 26
+b 2
+b 58
+b 60
+b 73
+b 71
+b 2
+b 103
+b 116
+b 102
+b 1
+b 30
+b 15
+b 22
+b 35
+b 36
+b 42
+b 21
+b 2
+b 31
+b 2
+b 0
+b 1
+b 13
+b 0
+b 1
+b 42
+b 79
+b 33
+b 44
+b 45
+b 47
+b 49
+b 50
+b 52
+b 12
+b 19
+b 20
+b 27
+b 19
+b 1
+b 24
+b 2
+b 3
+b 5
+b 6
+b 110
+b 112
+b 113
+b 119
+b 110
+b 2
+b 141
+b 143
+b 144
+b 150
+b 148
+b 2
+b 91
+b 96
+b 3
+b 5
+b 3
+b 1
+b 11
+b 8
+b 1
+b 3
+b 10
+b 11
+b 13
+b 1
+b 0
+b 1
+b 52
+b 51
+b 1
+b 8
+b 6
+b 2
+b 97
+b 98
+b 100
+b 2
+b 23
+b 21
+b 1
+b 11
+b 12
+b 14
+b 26
+b 11
+b 2
+b 68
+b 65
+b 1
+b 11
+b 10
+b 1
+b 3
+b 4
+b 13
+b 3
+b 2
+b 7
+b 59
+b 59
+b 1
+b 33
+b 43
+b 31
+b 3
+b 399
+b 401
+b 402
+b 428
+b 444
+b 401
+b 1
+b 425
+b 1
+b 79
+b 81
+b 83
+b 84
+b 89
+b 90
+b 94
+b 101
+b 83
+b 1
+b 86
+b 2
+b 97
+b 1
+b 26
+b 28
+b 29
+b 31
+b 33
+b 57
+b 59
+b 28
+b 2
+b 53
+b 1
+b 6
+b 2
+b 3
+b 13
+b 2
+b 2
+b 9
+b 1
+b 28
+b 30
+b 31
+b 33
+b 30
+b 2
+b 12
+b 42
+b 43
+b 45
+b 47
+b 40
+b 2
+b 11
+b 1
+b 43
+b 1
+b 2
+b 50
+b 56
+b 92
+b 99
+b 110
+b 111
+b 125
+b 126
+b 110
+b 2
+b 121
+b 2
+b 89
+b 1
+b 30
+b 36
+b 34
+b 1
+b 7
+b 22
+b 24
+b 25
+b 22
+b 2
+b 127
+b 129
+b 147
+b 148
+b 150
+b 151
+b 129
+b 1
+b 145
+b 1
+b 26
+b 90
+b 92
+b 0
+b 92
+b 102
+b 90
+b 2
+b 1
+b 3
+b 236
+b 277
+b 278
+b 277
+b 2
+b 233
+b 1
+b 100
+b 101
+b 120
+b 100
+b 1
+b 17
+b 1
+b 11
+b 21
+b 34
+b 35
+b 41
+b 45
+b 42
+b 1
+b 23
+b 24
+b 26
+b 36
+b 21
+b 2
+b 34
+b 1
+b 103
+b 104
+b 103
+b 1
+b 37
+b 35
+b 3
+b 0
+b 2
+b 3
+b 70
+b 0
+b 2
+b 68
+b 1
+b 3
+b 59
+b 60
+b 62
+b 26
+b 25
+b 1
+b 53
+b 52
+b 2
+b 37
+b 38
+b 50
+b 34
+b 36
+b 34
+b 1
+b 76
+b 1
+b 2
+b 4
+b 6
+b 7
+b 9
+b 11
+b 4
+b 2
+b 10
+b 16
+b 17
+b 17
+b 1
+b 55
+b 57
+b 59
+b 60
+b 66
+b 59
+b 2
+b 40
+b 41
+b 55
+b 40
+b 2
+b 50
+b 1
+b 2
+b 42
+b 42
+b 1
+b 210
+b 207
+b 1
+b 165
+b 166
+b 163
+b 2
+b 35
+b 32
+b 1
+b 94
+b 95
+b 27
+b 29
+b 5
+b 7
+b 9
+b 11
+b 48
+b 47
+b 2
+b 14
+b 16
+b 11
+b 1
+b 62
+b 153
+b 154
+b 177
+b 179
+b 180
+b 60
+b 1
+b 152
+b 1
+b 33
+b 34
+b 33
+b 2
+b 3
+b 5
+b 13
+b 11
+b 1
+b 80
+b 102
+b 103
+b 100
+b 2
+b 79
+b 1
+b 19
+b 18
+b 1
+b 118
+b 7
+b 8
+b 7
+b 1
+b 5
+b 6
+b 8
+b 10
+b 3
+b 2
+b 15
+b 8
+b 9
+b 8
+b 2
+b 5
+b 5
+b 1
+b 68
+b 66
+b 2
+b 53
+b 52
+b 1
+b 45
+b 46
+b 45
+b 2
+b 138
+b 144
+b 145
+b 135
+b 1
+b 248
+b 85
+b 15
+b 16
+b 18
+b 19
+b 18
+b 2
+b 12
+b 1
+b 48
+b 46
+b 1
+b 31
+b 30
+b 1
+b 16
+b 17
+b 25
+b 26
+b 43
+b 14
+b 2
+b 23
+b 2
+b 43
+b 45
+b 46
+b 54
+b 43
+b 2
+b 39
+b 38
+b 1
+b 72
+b 75
+b 76
+b 75
+b 1
+b 5
+b 5
+b 1
+b 63
+b 72
+b 74
+b 63
+b 1
+b 33
+b 35
+b 37
+b 39
+b 40
+b 55
+b 37
+b 2
+b 53
+b 1
+b 2
+b 3
+b 2
+b 2
+b 29
+b 31
+b 190
+b 191
+b 216
+b 20
+b 28
+b 26
+b 2
+b 9
+b 10
+b 12
+b 14
+b 15
+b 9
+b 2
+b 1
+b 3
+b 15
+b 16
+b 18
+b 24
+b 13
+b 2
+b 61
+b 68
+b 69
+b 67
+b 1
+b 6
+b 8
+b 4
+b 1
+b 10
+b 210
+b 209
+b 1
+b 52
+b 58
+b 57
+b 2
+b 42
+b 12
+b 13
+b 15
+b 17
+b 19
+b 11
+b 1
+b 57
+b 59
+b 60
+b 78
+b 114
+b 116
+b 57
+b 2
+b 114
+b 1
+b 220
+b 224
+b 0
+b 2
+b 4
+b 2
+b 1
+b 0
+b 1
+b 3
+b 4
+b 15
+b 16
+b 15
+b 1
+b 2
+b 181
+b 203
+b 208
+b 209
+b 5
+b 7
+b 8
+b 25
+b 4
+b 1
+b 3
+b 5
+b 16
+b 13
+b 14
+b 13
+b 2
+b 3
+b 4
+b 6
+b 3
+b 2
+b 69
+b 35
+b 36
+b 35
+b 2
+b 166
+b 15
+b 30
+b 31
+b 42
+b 155
+b 153
+b 1
+b 120
+b 2
+b 3
+b 5
+b 5
+b 1
+b 120
+b 121
+b 120
+b 2
+b 102
+b 116
+b 100
+b 2
+b 8
+b 5
+b 1
+b 53
+b 72
+b 73
+b 75
+b 90
+b 72
+b 2
+b 86
+b 2
+b 196
+b 197
+b 199
+b 200
+b 204
+b 207
+b 196
+b 3
+b 21
+b 25
+b 20
+b 2
+b 21
+b 1
+b 50
+b 52
+b 53
+b 59
+b 78
+b 120
+b 50
+b 2
+b 75
+b 1
+b 1
+b 0
+b 2
+b 28
+b 11
+b 13
+b 14
+b 16
+b 11
+b 2
+b 4
+b 4
+b 5
+b 7
+b 70
+b 127
+b 129
+b 131
+b 129
+b 1
+b 26
+b 34
+b 35
+b 48
+b 34
+b 2
+b 24
+b 1
+b 41
+b 1
+b 211
+b 59
+b 66
+b 67
+b 75
+b 77
+b 66
+b 2
+b 71
+b 1
+b 57
+b 1
+b 267
+b 265
+b 1
+b 22
+b 24
+b 25
+b 31
+b 22
+b 2
+b 11
+b 12
+b 14
+b 16
+b 11
+b 2
+b 45
+b 46
+b 98
+b 62
+b 64
+b 87
+b 86
+b 1
+b 47
+b 54
+b 61
+b 21
+b 96
+b 97
+b 96
+b 1
+b 27
+b 256
+b 258
+b 259
+b 296
+b 298
+b 259
+b 1
+b 26
+b 43
+b 44
+b 46
+b 24
+b 23
+b 2
+b 18
+b 16
+b 1
+b 132
+b 130
+b 3
+b 40
+b 41
+b 43
+b 39
+b 1
+b 20
+b 19
+b 1
+b 36
+b 38
+b 39
+b 41
+b 36
+b 2
+b 18
+b 20
+b 16
+b 1
+b 53
+b 55
+b 57
+b 58
+b 60
+b 71
+b 8
+b 51
+b 52
+b 74
+b 75
+b 87
+b 74
+b 2
+b 83
+b 1
+b 48
+b 1
+b 4
+b 29
+b 30
+b 44
+b 29
+b 2
+b 2
+b 1
+b 0
+b 1
+b 11
+b 12
+b 13
+b 15
+b 11
+b 1
+b 0
+b 7
+b 7
+b 1
+b 41
+b 39
+b 1
+b 11
+b 0
+b 1
+b 25
+b 27
+b 10
+b 8
+b 1
+b 12
+b 18
+b 19
+b 18
+b 1
+b 5
+b 8
+b 9
+b 11
+b 12
+b 20
+b 8
+b 3
+b 21
+b 24
+b 21
+b 3
+b 6
+b 53
+b 54
+b 60
+b 61
+b 51
+b 2
+b 5
+b 1
+b 57
+b 1
+b 91
+b 93
+b 93
+b 93
+b 1
+b 66
+b 71
+b 72
+b 102
+b 71
+b 2
+b 98
+b 1
+b 91
+b 102
+b 103
+b 102
+b 2
+b 88
+b 1
+b 4
+b 20
+b 2
+b 1
+b 159
+b 172
+b 174
+b 176
+b 177
+b 174
+b 2
+b 0
+b 2
+b 2
+b 1
+b 1
+b 0
+b 2
+b 96
+b 97
+b 126
+b 134
+b 95
+b 1
+b 0
+b 1
+b 0
+b 2
+b 1
+b 0
+b 1
+b 71
+b 19
+b 24
+b 25
+b 40
+b 41
+b 43
+b 23
+b 1
+b 7
+b 13
+b 14
+b 7
+b 1
+b 10
+b 3
+b 56
+b 58
+b 77
+b 123
+b 126
+b 127
+b 129
+b 131
+b 75
+b 1
+b 125
+b 2
+b 0
+b 2
+b 3
+b 91
+b 92
+b 90
+b 1
+b 3
+b 24
+b 23
+b 2
+b 4
+b 45
+b 47
+b 51
+b 45
+b 1
+b 18
+b 42
+b 50
+b 16
+b 2
+b 47
+b 1
+b 7
+b 16
+b 17
+b 5
+b 1
+b 15
+b 1
+b 4
+b 15
+b 14
+b 11
+b 1
+b 14
+b 15
+b 17
+b 18
+b 31
+b 14
+b 3
+b 0
+b 1
+b 0
+b 2
+b 16
+b 17
+b 59
+b 39
+b 40
+b 43
+b 37
+b 2
+b 41
+b 1
+b 37
+b 115
+b 113
+b 2
+b 15
+b 13
+b 1
+b 30
+b 28
+b 2
+b 1
+b 8
+b 9
+b 77
+b 8
+b 1
+b 15
+b 17
+b 25
+b 26
+b 24
+b 1
+b 10
+b 14
+b 15
+b 12
+b 2
+b 11
+b 12
+b 10
+b 1
+b 1
+b 24
+b 23
+b 1
+b 78
+b 79
+b 78
+b 2
+b 121
+b 123
+b 123
+b 1
+b 92
+b 36
+b 34
+b 1
+b 22
+b 29
+b 30
+b 29
+b 2
+b 20
+b 1
+b 45
+b 46
+b 44
+b 1
+b 9
+b 5
+b 4
+b 1
+b 14
+b 12
+b 3
+b 38
+b 39
+b 41
+b 37
+b 1
+b 21
+b 29
+b 19
+b 1
+b 2
+b 3
+b 5
+b 2
+b 2
+b 5
+b 14
+b 15
+b 24
+b 14
+b 2
+b 2
+b 1
+b 18
+b 1
+b 51
+b 50
+b 1
+b 36
+b 52
+b 53
+b 55
+b 40
+b 30
+b 15
+b 14
+b 2
+b 105
+b 107
+b 108
+b 110
+b 112
+b 107
+b 2
+b 64
+b 66
+b 23
+b 25
+b 29
+b 29
+b 1
+b 71
+b 72
+b 69
+b 2
+b 4
+b 17
+b 18
+b 14
+b 1
+b 6
+b 17
+b 16
+b 1
+b 46
+b 41
+b 42
+b 41
+b 1
+b 24
+b 26
+b 27
+b 29
+b 30
+b 36
+b 26
+b 3
+b 33
+b 1
+b 9
+b 7
+b 2
+b 66
+b 93
+b 94
+b 92
+b 1
+b 11
+b 9
+b 2
+b 7
+b 8
+b 10
+b 7
+b 2
+b 5
+b 7
+b 8
+b 13
+b 15
+b 5
+b 2
+b 54
+b 52
+b 2
+b 26
+b 27
+b 29
+b 38
+b 26
+b 2
+b 177
+b 178
+b 189
+b 6
+b 14
+b 15
+b 4
+b 1
+b 13
+b 1
+b 97
+b 109
+b 124
+b 125
+b 122
+b 2
+b 108
+b 1
+b 131
+b 2
+b 12
+b 13
+b 25
+b 26
+b 10
+b 2
+b 23
+b 2
+b 15
+b 12
+b 1
+b 2
+b 190
+b 189
+b 2
+b 22
+b 14
+b 16
+b 17
+b 14
+b 2
+b 23
+b 32
+b 36
+b 38
+b 21
+b 2
+b 7
+b 6
+b 1
+b 20
+b 28
+b 29
+b 42
+b 19
+b 2
+b 24
+b 2
+b 187
+b 188
+b 192
+b 187
+b 2
+b 188
+b 1
+b 75
+b 74
+b 1
+b 2
+b 46
+b 97
+b 98
+b 157
+b 42
+b 43
+b 41
+b 1
+b 10
+b 8
+b 1
+b 72
+b 2
+b 3
+b 11
+b 13
+b 2
+b 1
+b 10
+b 3
+b 27
+b 156
+b 154
+b 1
+b 0
+b 1
+b 7
+b 8
+b 7
+b 1
+b 85
+b 172
+b 174
+b 176
+b 176
+b 1
+b 34
+b 32
+b 1
+b 29
+b 28
+b 1
+b 15
+b 14
+b 2
+b 27
+b 33
+b 41
+b 135
+b 137
+b 139
+b 141
+b 142
+b 139
+b 2
+b 32
+b 47
+b 48
+b 47
+b 2
+b 29
+b 1
+b 289
+b 287
+b 1
+b 10
+b 11
+b 49
+b 9
+b 1
+b 57
+b 96
+b 97
+b 99
+b 100
+b 108
+b 94
+b 2
+b 97
+b 2
+b 56
+b 1
+b 192
+b 11
+b 105
+b 147
+b 148
+b 150
+b 103
+b 1
+b 146
+b 2
+b 0
+b 1
+b 10
+b 69
+b 68
+b 1
+b 34
+b 35
+b 37
+b 39
+b 33
+b 1
+b 45
+b 50
+b 51
+b 50
+b 1
+b 125
+b 122
+b 1
+b 0
+b 2
+b 3
+b 0
+b 2
+b 67
+b 65
+b 2
+b 85
+b 87
+b 88
+b 85
+b 2
+b 115
+b 122
+b 99
+b 103
+b 104
+b 111
+b 102
+b 1
+b 110
+b 1
+b 96
+b 98
+b 99
+b 101
+b 14
+b 13
+b 1
+b 6
+b 4
+b 2
+b 184
+b 182
+b 2
+b 2
+b 4
+b 5
+b 7
+b 9
+b 4
+b 2
+b 70
+b 27
+b 29
+b 581
+b 602
+b 604
+b 605
+b 604
+b 1
+b 6
+b 4
+b 2
+b 11
+b 16
+b 17
+b 25
+b 26
+b 28
+b 30
+b 16
+b 1
+b 22
+b 2
+b 94
+b 27
+b 29
+b 30
+b 7
+b 17
+b 18
+b 6
+b 1
+b 3
+b 33
+b 2
+b 3
+b 5
+b 6
+b 2
+b 3
+b 1
+b 10
+b 24
+b 1
+b 1
+b 7
+b 2
+b 12
+b 20
+b 21
+b 40
+b 41
+b 10
+b 1
+b 19
+b 1
+b 28
+b 20
+b 6
+b 10
+b 12
+b 1
+b 2
+b 13
+b 14
+b 1
+b 2
+b 344
+b 352
+b 353
+b 355
+b 351
+b 1
+b 95
+b 102
+b 103
+b 110
+b 93
+b 2
+b 100
+b 1
+b 37
+b 39
+b 41
+b 43
+b 43
+b 1
+b 77
+b 78
+b 74
+b 1
+b 153
+b 155
+b 157
+b 158
+b 160
+b 161
+b 155
+b 2
+b 158
+b 3
+b 1
+b 43
+b 0
+b 2
+b 39
+b 1
+b 37
+b 4
+b 5
+b 7
+b 9
+b 31
+b 30
+b 1
+b 8
+b 9
+b 23
+b 24
+b 8
+b 2
+b 19
+b 2
+b 9
+b 79
+b 79
+b 1
+b 54
+b 55
+b 52
+b 2
+b 5
+b 5
+b 1
+b 221
+b 229
+b 230
+b 232
+b 247
+b 227
+b 2
+b 220
+b 1
+b 228
+b 1
+b 96
+b 97
+b 99
+b 100
+b 99
+b 1
+b 26
+b 28
+b 78
+b 24
+b 1
+b 72
+b 81
+b 69
+b 1
+b 22
+b 24
+b 25
+b 22
+b 2
+b 82
+b 82
+b 1
+b 39
+b 81
+b 80
+b 1
+b 247
+b 248
+b 257
+b 259
+b 246
+b 1
+b 258
+b 1
+b 24
+b 19
+b 21
+b 23
+b 24
+b 26
+b 27
+b 35
+b 23
+b 3
+b 31
+b 2
+b 18
+b 17
+b 2
+b 20
+b 8
+b 9
+b 13
+b 14
+b 18
+b 20
+b 12
+b 1
+b 19
+b 1
+b 101
+b 153
+b 154
+b 159
+b 160
+b 159
+b 1
+b 6
+b 4
+b 1
+b 97
+b 119
+b 120
+b 127
+b 117
+b 2
+b 96
+b 1
+b 21
+b 20
+b 1
+b 32
+b 37
+b 38
+b 34
+b 1
+b 2
+b 0
+b 1
+b 437
+b 311
+b 318
+b 319
+b 310
+b 1
+b 47
+b 724
+b 876
+b 873
+b 1
+b 4
+b 5
+b 4
+b 2
+b 4
+b 5
+b 4
+b 1
+b 23
+b 28
+b 29
+b 3
+b 4
+b 6
+b 8
+b 2
+b 1
+b 7
+b 1
+b 31
+b 29
+b 1
+b 107
+b 108
+b 110
+b 111
+b 106
+b 1
+b 109
+b 2
+b 1
+b 10
+b 149
+b 13
+b 14
+b 4
+b 5
+b 39
+b 4
+b 2
+b 37
+b 1
+b 83
+b 88
+b 81
+b 2
+b 17
+b 18
+b 83
+b 17
+b 1
+b 210
+b 211
+b 218
+b 210
+b 1
+b 118
+b 116
+b 2
+b 4
+b 26
+b 27
+b 29
+b 30
+b 26
+b 3
+b 50
+b 48
+b 1
+b 4
+b 2
+b 1
+b 35
+b 33
+b 2
+b 3
+b 8
+b 7
+b 1
+b 15
+b 15
+b 1
+b 14
+b 11
+b 1
+b 139
+b 141
+b 162
+b 163
+b 170
+b 172
+b 162
+b 1
+b 84
+b 12
+b 13
+b 89
+b 15
+b 16
+b 21
+b 104
+b 105
+b 103
+b 1
+b 16
+b 1
+b 6
+b 16
+b 18
+b 20
+b 21
+b 33
+b 20
+b 2
+b 1
+b 0
+b 1
+b 20
+b 83
+b 80
+b 1
+b 4
+b 5
+b 10
+b 11
+b 4
+b 1
+b 7
+b 2
+b 3
+b 64
+b 63
+b 1
+b 51
+b 61
+b 49
+b 2
+b 4
+b 115
+b 116
+b 118
+b 118
+b 1
+b 112
+b 1
+b 27
+b 41
+b 120
+b 119
+b 1
+b 178
+b 75
+b 136
+b 143
+b 144
+b 143
+b 2
+b 74
+b 1
+b 132
+b 1
+b 0
+b 2
+b 3
+b 12
+b 0
+b 2
+b 12
+b 8
+b 9
+b 23
+b 7
+b 1
+b 22
+b 1
+b 219
+b 221
+b 223
+b 224
+b 229
+b 230
+b 221
+b 2
+b 227
+b 2
+b 126
+b 123
+b 1
+b 12
+b 14
+b 15
+b 17
+b 19
+b 29
+b 30
+b 31
+b 12
+b 2
+b 21
+b 19
+b 1
+b 31
+b 17
+b 18
+b 25
+b 27
+b 28
+b 15
+b 2
+b 0
+b 2
+b 2
+b 1
+b 104
+b 104
+b 1
+b 18
+b 25
+b 26
+b 28
+b 29
+b 25
+b 3
+b 43
+b 48
+b 53
+b 54
+b 47
+b 2
+b 50
+b 1
+b 6
+b 7
+b 10
+b 21
+b 3
+b 4
+b 8
+b 6
+b 3
+b 3
+b 33
+b 58
+b 60
+b 61
+b 80
+b 60
+b 2
+b 31
+b 1
+b 73
+b 1
+b 99
+b 101
+b 102
+b 110
+b 111
+b 113
+b 130
+b 131
+b 133
+b 101
+b 1
+b 107
+b 2
+b 127
+b 2
+b 7
+b 394
+b 400
+b 392
+b 2
+b 4
+b 6
+b 1
+b 2
+b 0
+b 1
+b 51
+b 53
+b 55
+b 56
+b 32
+b 35
+b 75
+b 88
+b 89
+b 103
+b 88
+b 2
+b 99
+b 1
+b 33
+b 1
+b 174
+b 176
+b 178
+b 179
+b 185
+b 186
+b 195
+b 176
+b 2
+b 183
+b 2
+b 189
+b 1
+b 26
+b 174
+b 176
+b 178
+b 179
+b 186
+b 187
+b 25
+b 2
+b 174
+b 2
+b 171
+b 249
+b 255
+b 11
+b 15
+b 10
+b 1
+b 4
+b 5
+b 11
+b 4
+b 2
+b 7
+b 1
+b 5
+b 6
+b 5
+b 2
+b 4
+b 6
+b 13
+b 20
+b 21
+b 21
+b 1
+b 19
+b 17
+b 1
+b 37
+b 190
+b 192
+b 193
+b 204
+b 205
+b 190
+b 2
+b 202
+b 2
+b 2
+b 14
+b 22
+b 23
+b 0
+b 89
+b 33
+b 31
+b 2
+b 0
+b 6
+b 7
+b 12
+b 14
+b 16
+b 14
+b 1
+b 18
+b 18
+b 93
+b 95
+b 96
+b 95
+b 1
+b 352
+b 351
+b 1
+b 109
+b 108
+b 2
+b 42
+b 92
+b 1
+b 2
+b 1
+b 1
+b 16
+b 15
+b 2
+b 2
+b 3
+b 21
+b 2
+b 2
+b 17
+b 1
+b 18
+b 17
+b 1
+b 9
+b 10
+b 12
+b 14
+b 16
+b 8
+b 1
+b 114
+b 131
+b 128
+b 1
+b 18
+b 19
+b 47
+b 16
+b 2
+b 44
+b 1
+b 53
+b 50
+b 1
+b 0
+b 1
+b 18
+b 26
+b 16
+b 2
+b 34
+b 35
+b 55
+b 34
+b 1
+b 22
+b 20
+b 2
+b 6
+b 1
+b 22
+b 23
+b 1
+b 1
+b 39
+b 49
+b 50
+b 47
+b 2
+b 38
+b 1
+b 99
+b 100
+b 157
+b 99
+b 2
+b 153
+b 2
+b 64
+b 65
+b 67
+b 64
+b 2
+b 3
+b 17
+b 19
+b 21
+b 22
+b 15
+b 1
+b 20
+b 2
+b 626
+b 627
+b 645
+b 626
+b 1
+b 642
+b 1
+b 4
+b 5
+b 19
+b 12
+b 10
+b 1
+b 39
+b 46
+b 47
+b 45
+b 1
+b 55
+b 61
+b 62
+b 126
+b 127
+b 149
+b 53
+b 1
+b 60
+b 2
+b 122
+b 1
+b 53
+b 51
+b 1
+b 7
+b 8
+b 6
+b 1
+b 4
+b 11
+b 106
+b 111
+b 112
+b 111
+b 1
+b 103
+b 1
+b 19
+b 7
+b 17
+b 18
+b 18
+b 1
+b 8
+b 6
+b 2
+b 3
+b 14
+b 15
+b 17
+b 18
+b 23
+b 17
+b 1
+b 20
+b 1
+b 0
+b 25
+b 64
+b 77
+b 62
+b 2
+b 144
+b 145
+b 164
+b 143
+b 1
+b 134
+b 136
+b 137
+b 149
+b 134
+b 2
+b 147
+b 1
+b 7
+b 8
+b 14
+b 138
+b 696
+b 697
+b 872
+b 874
+b 875
+b 884
+b 696
+b 1
+b 873
+b 2
+b 91
+b 96
+b 97
+b 91
+b 1
+b 94
+b 1
+b 81
+b 83
+b 451
+b 457
+b 459
+b 461
+b 462
+b 464
+b 465
+b 450
+b 2
+b 459
+b 3
+b 3
+b 130
+b 127
+b 1
+b 59
+b 60
+b 59
+b 2
+b 22
+b 24
+b 25
+b 24
+b 2
+b 13
+b 11
+b 1
+b 26
+b 33
+b 33
+b 1
+b 5
+b 3
+b 2
+b 136
+b 136
+b 1
+b 49
+b 51
+b 52
+b 56
+b 58
+b 49
+b 2
+b 18
+b 13
+b 156
+b 163
+b 164
+b 170
+b 171
+b 161
+b 2
+b 168
+b 2
+b 17
+b 17
+b 1
+b 121
+b 118
+b 1
+b 2
+b 3
+b 13
+b 1
+b 1
+b 169
+b 3
+b 4
+b 2
+b 1
+b 2
+b 3
+b 11
+b 2
+b 2
+b 7
+b 2
+b 93
+b 94
+b 109
+b 91
+b 2
+b 32
+b 29
+b 1
+b 156
+b 157
+b 159
+b 156
+b 2
+b 24
+b 22
+b 23
+b 46
+b 47
+b 46
+b 1
+b 253
+b 255
+b 251
+b 1
+b 33
+b 39
+b 55
+b 39
+b 1
+b 52
+b 1
+b 76
+b 78
+b 80
+b 81
+b 83
+b 96
+b 78
+b 2
+b 94
+b 1
+b 181
+b 202
+b 203
+b 219
+b 220
+b 202
+b 2
+b 215
+b 2
+b 179
+b 1
+b 31
+b 29
+b 1
+b 37
+b 264
+b 265
+b 290
+b 291
+b 297
+b 289
+b 1
+b 296
+b 1
+b 70
+b 68
+b 2
+b 75
+b 76
+b 78
+b 79
+b 116
+b 75
+b 3
+b 112
+b 2
+b 23
+b 12
+b 19
+b 18
+b 2
+b 117
+b 118
+b 122
+b 116
+b 1
+b 66
+b 67
+b 75
+b 76
+b 66
+b 1
+b 3
+b 3
+b 96
+b 96
+b 1
+b 142
+b 144
+b 145
+b 152
+b 153
+b 161
+b 144
+b 1
+b 149
+b 2
+b 77
+b 102
+b 103
+b 105
+b 106
+b 120
+b 121
+b 105
+b 1
+b 117
+b 2
+b 49
+b 16
+b 203
+b 44
+b 46
+b 0
+b 1
+b 3
+b 5
+b 0
+b 2
+b 187
+b 185
+b 1
+b 9
+b 22
+b 40
+b 39
+b 1
+b 55
+b 69
+b 70
+b 69
+b 1
+b 9
+b 9
+b 1
+b 12
+b 14
+b 15
+b 17
+b 69
+b 71
+b 114
+b 115
+b 140
+b 141
+b 149
+b 151
+b 114
+b 1
+b 137
+b 2
+b 13
+b 32
+b 30
+b 1
+b 70
+b 83
+b 85
+b 86
+b 93
+b 85
+b 1
+b 144
+b 146
+b 148
+b 146
+b 1
+b 25
+b 46
+b 47
+b 49
+b 51
+b 23
+b 1
+b 45
+b 2
+b 16
+b 18
+b 20
+b 21
+b 23
+b 16
+b 1
+b 3
+b 16
+b 23
+b 23
+b 1
+b 14
+b 13
+b 1
+b 58
+b 59
+b 58
+b 2
+b 3
+b 4
+b 5
+b 7
+b 2
+b 2
+b 28
+b 25
+b 1
+b 4
+b 26
+b 27
+b 24
+b 2
+b 6
+b 8
+b 9
+b 11
+b 6
+b 2
+b 264
+b 11
+b 13
+b 14
+b 13
+b 1
+b 1
+b 1
+b 1
+b 0
+b 2
+b 3
+b 5
+b 0
+b 2
+b 134
+b 138
+b 27
+b 34
+b 33
+b 1
+b 28
+b 30
+b 31
+b 30
+b 2
+b 25
+b 1
+b 4
+b 40
+b 42
+b 44
+b 45
+b 44
+b 1
+b 12
+b 43
+b 45
+b 47
+b 48
+b 10
+b 2
+b 89
+b 87
+b 1
+b 23
+b 24
+b 32
+b 33
+b 23
+b 2
+b 4
+b 128
+b 155
+b 126
+b 3
+b 150
+b 1
+b 29
+b 51
+b 53
+b 48
+b 1
+b 0
+b 2
+b 9
+b 10
+b 12
+b 14
+b 50
+b 9
+b 2
+b 47
+b 1
+b 3
+b 1
+b 3
+b 60
+b 65
+b 58
+b 2
+b 33
+b 34
+b 36
+b 37
+b 31
+b 2
+b 34
+b 1
+b 8
+b 44
+b 51
+b 52
+b 6
+b 7
+b 9
+b 5
+b 1
+b 4
+b 2
+b 1
+b 29
+b 40
+b 41
+b 47
+b 38
+b 2
+b 28
+b 1
+b 20
+b 22
+b 24
+b 25
+b 86
+b 87
+b 89
+b 22
+b 2
+b 84
+b 2
+b 0
+b 199
+b 201
+b 196
+b 1
+b 44
+b 45
+b 47
+b 49
+b 43
+b 1
+b 79
+b 80
+b 82
+b 83
+b 79
+b 3
+b 0
+b 2
+b 7
+b 8
+b 5
+b 8
+b 4
+b 3
+b 147
+b 145
+b 1
+b 3
+b 8
+b 9
+b 11
+b 8
+b 2
+b 0
+b 1
+b 15
+b 16
+b 18
+b 19
+b 21
+b 15
+b 3
+b 9
+b 7
+b 1
+b 10
+b 9
+b 1
+b 94
+b 5
+b 7
+b 5
+b 1
+b 19
+b 20
+b 32
+b 19
+b 2
+b 130
+b 2
+b 3
+b 2
+b 1
+b 166
+b 167
+b 189
+b 166
+b 2
+b 185
+b 1
+b 18
+b 17
+b 1
+b 1
+b 11
+b 28
+b 29
+b 26
+b 2
+b 59
+b 57
+b 1
+b 38
+b 60
+b 90
+b 87
+b 1
+b 0
+b 2
+b 3
+b 9
+b 2
+b 2
+b 5
+b 2
+b 6
+b 8
+b 6
+b 1
+b 34
+b 36
+b 50
+b 21
+b 43
+b 44
+b 53
+b 54
+b 19
+b 1
+b 42
+b 1
+b 1
+b 120
+b 142
+b 172
+b 173
+b 141
+b 2
+b 168
+b 2
+b 105
+b 102
+b 1
+b 20
+b 33
+b 35
+b 36
+b 1
+b 181
+b 189
+b 190
+b 192
+b 208
+b 180
+b 1
+b 119
+b 110
+b 135
+b 136
+b 149
+b 150
+b 200
+b 135
+b 1
+b 146
+b 2
+b 197
+b 1
+b 37
+b 60
+b 62
+b 63
+b 60
+b 2
+b 36
+b 1
+b 1
+b 154
+b 166
+b 167
+b 169
+b 170
+b 172
+b 174
+b 191
+b 166
+b 3
+b 171
+b 1
+b 185
+b 2
+b 13
+b 15
+b 11
+b 1
+b 7
+b 8
+b 7
+b 1
+b 3
+b 4
+b 6
+b 91
+b 93
+b 94
+b 96
+b 97
+b 107
+b 109
+b 91
+b 2
+b 94
+b 2
+b 2
+b 3
+b 28
+b 2
+b 2
+b 24
+b 2
+b 23
+b 5
+b 16
+b 17
+b 4
+b 1
+b 87
+b 88
+b 33
+b 9
+b 21
+b 23
+b 8
+b 1
+b 2
+b 101
+b 108
+b 110
+b 111
+b 119
+b 108
+b 2
+b 117
+b 1
+b 38
+b 37
+b 1
+b 0
+b 93
+b 156
+b 45
+b 58
+b 59
+b 61
+b 44
+b 2
+b 54
+b 2
+b 52
+b 51
+b 1
+b 83
+b 13
+b 11
+b 2
+b 2
+b 4
+b 5
+b 42
+b 4
+b 1
+b 33
+b 34
+b 42
+b 194
+b 195
+b 197
+b 33
+b 2
+b 38
+b 2
+b 188
+b 2
+b 4
+b 14
+b 24
+b 25
+b 37
+b 20
+b 27
+b 28
+b 30
+b 40
+b 27
+b 2
+b 36
+b 1
+b 7
+b 23
+b 24
+b 26
+b 54
+b 55
+b 23
+b 2
+b 50
+b 2
+b 9
+b 6
+b 1
+b 18
+b 20
+b 22
+b 23
+b 25
+b 20
+b 2
+b 1
+b 0
+b 1
+b 160
+b 171
+b 159
+b 2
+b 166
+b 1
+b 8
+b 9
+b 98
+b 150
+b 151
+b 153
+b 96
+b 1
+b 15
+b 1
+b 0
+b 1
+b 3
+b 3
+b 1
+b 24
+b 51
+b 53
+b 54
+b 53
+b 1
+b 67
+b 72
+b 73
+b 75
+b 72
+b 2
+b 11
+b 9
+b 2
+b 21
+b 127
+b 129
+b 130
+b 132
+b 134
+b 129
+b 2
+b 2
+b 0
+b 2
+b 76
+b 130
+b 74
+b 3
+b 124
+b 1
+b 40
+b 42
+b 44
+b 45
+b 42
+b 2
+b 362
+b 49
+b 53
+b 54
+b 54
+b 1
+b 2
+b 3
+b 0
+b 2
+b 1
+b 0
+b 1
+b 398
+b 437
+b 448
+b 449
+b 463
+b 436
+b 2
+b 443
+b 1
+b 10
+b 12
+b 13
+b 16
+b 32
+b 3
+b 2
+b 1
+b 8
+b 6
+b 2
+b 54
+b 59
+b 61
+b 62
+b 74
+b 83
+b 84
+b 86
+b 87
+b 92
+b 130
+b 86
+b 1
+b 89
+b 2
+b 1
+b 392
+b 400
+b 401
+b 390
+b 2
+b 399
+b 1
+b 6
+b 8
+b 264
+b 265
+b 288
+b 289
+b 262
+b 2
+b 286
+b 2
+b 81
+b 81
+b 1
+b 21
+b 21
+b 1
+b 60
+b 62
+b 88
+b 60
+b 1
+b 32
+b 31
+b 1
+b 8
+b 9
+b 31
+b 140
+b 6
+b 2
+b 137
+b 1
+b 173
+b 179
+b 171
+b 2
+b 5
+b 6
+b 13
+b 14
+b 24
+b 5
+b 2
+b 10
+b 1
+b 27
+b 36
+b 37
+b 45
+b 45
+b 1
+b 33
+b 1
+b 13
+b 5
+b 64
+b 85
+b 86
+b 88
+b 154
+b 62
+b 1
+b 86
+b 1
+b 12
+b 14
+b 40
+b 41
+b 56
+b 39
+b 1
+b 54
+b 1
+b 125
+b 127
+b 129
+b 130
+b 131
+b 127
+b 4
+b 4
+b 5
+b 4
+b 2
+b 175
+b 174
+b 1
+b 61
+b 62
+b 38
+b 40
+b 32
+b 20
+b 22
+b 23
+b 20
+b 2
+b 6
+b 5
+b 4
+b 47
+b 48
+b 54
+b 55
+b 64
+b 46
+b 1
+b 53
+b 2
+b 28
+b 68
+b 72
+b 73
+b 72
+b 2
+b 1
+b 0
+b 1
+b 59
+b 56
+b 1
+b 12
+b 21
+b 22
+b 24
+b 21
+b 2
+b 21
+b 21
+b 1
+b 19
+b 29
+b 30
+b 32
+b 43
+b 18
+b 1
+b 32
+b 39
+b 40
+b 50
+b 37
+b 2
+b 31
+b 1
+b 45
+b 1
+b 40
+b 38
+b 2
+b 102
+b 103
+b 105
+b 102
+b 2
+b 22
+b 38
+b 40
+b 50
+b 52
+b 5
+b 6
+b 8
+b 20
+b 8
+b 1
+b 17
+b 2
+b 25
+b 77
+b 78
+b 85
+b 77
+b 2
+b 23
+b 1
+b 10
+b 18
+b 25
+b 10
+b 1
+b 15
+b 1
+b 2
+b 4
+b 5
+b 7
+b 23
+b 35
+b 33
+b 2
+b 22
+b 1
+b 5
+b 20
+b 21
+b 27
+b 28
+b 36
+b 38
+b 26
+b 1
+b 37
+b 1
+b 79
+b 77
+b 1
+b 21
+b 22
+b 24
+b 75
+b 76
+b 78
+b 80
+b 19
+b 2
+b 73
+b 2
+b 29
+b 35
+b 36
+b 33
+b 2
+b 156
+b 12
+b 31
+b 32
+b 34
+b 35
+b 37
+b 12
+b 1
+b 28
+b 2
+b 31
+b 2
+b 15
+b 11
+b 16
+b 23
+b 25
+b 31
+b 32
+b 25
+b 1
+b 28
+b 2
+b 0
+b 1
+b 3
+b 57
+b 62
+b 60
+b 1
+b 55
+b 61
+b 62
+b 64
+b 65
+b 61
+b 3
+b 271
+b 270
+b 1
+b 40
+b 42
+b 43
+b 53
+b 55
+b 56
+b 40
+b 2
+b 16
+b 137
+b 4
+b 9
+b 8
+b 1
+b 61
+b 62
+b 72
+b 59
+b 2
+b 45
+b 0
+b 1
+b 3
+b 0
+b 2
+b 43
+b 14
+b 16
+b 17
+b 25
+b 30
+b 16
+b 2
+b 21
+b 2
+b 298
+b 281
+b 282
+b 284
+b 286
+b 280
+b 1
+b 68
+b 80
+b 81
+b 83
+b 85
+b 66
+b 1
+b 79
+b 2
+b 4
+b 10
+b 11
+b 22
+b 20
+b 1
+b 25
+b 12
+b 14
+b 15
+b 17
+b 12
+b 2
+b 9
+b 11
+b 11
+b 1
+b 42
+b 52
+b 53
+b 74
+b 76
+b 78
+b 79
+b 41
+b 2
+b 48
+b 2
+b 74
+b 2
+b 67
+b 1
+b 35
+b 348
+b 346
+b 1
+b 6
+b 13
+b 6
+b 7
+b 9
+b 11
+b 12
+b 9
+b 2
+b 49
+b 51
+b 51
+b 1
+b 24
+b 26
+b 27
+b 38
+b 24
+b 2
+b 193
+b 201
+b 203
+b 205
+b 207
+b 191
+b 2
+b 205
+b 1
+b 102
+b 134
+b 132
+b 1
+b 1
+b 2
+b 4
+b 0
+b 1
+b 60
+b 58
+b 1
+b 21
+b 21
+b 1
+b 1
+b 406
+b 2
+b 4
+b 5
+b 24
+b 25
+b 31
+b 2
+b 2
+b 22
+b 2
+b 25
+b 1
+b 209
+b 37
+b 38
+b 34
+b 1
+b 15
+b 13
+b 1
+b 20
+b 44
+b 45
+b 44
+b 2
+b 17
+b 1
+b 3
+b 3
+b 2
+b 2
+b 34
+b 36
+b 37
+b 45
+b 47
+b 34
+b 2
+b 9
+b 11
+b 13
+b 33
+b 34
+b 36
+b 13
+b 1
+b 31
+b 1
+b 423
+b 422
+b 2
+b 1
+b 6
+b 5
+b 1
+b 29
+b 30
+b 37
+b 29
+b 1
+b 34
+b 2
+b 2
+b 166
+b 168
+b 169
+b 84
+b 92
+b 93
+b 99
+b 84
+b 1
+b 89
+b 2
+b 29
+b 42
+b 43
+b 45
+b 28
+b 1
+b 110
+b 154
+b 43
+b 44
+b 46
+b 43
+b 2
+b 0
+b 2
+b 3
+b 0
+b 2
+b 47
+b 49
+b 49
+b 1
+b 10
+b 11
+b 8
+b 2
+b 7
+b 8
+b 10
+b 12
+b 6
+b 1
+b 119
+b 125
+b 126
+b 128
+b 129
+b 123
+b 2
+b 126
+b 2
+b 118
+b 1
+b 79
+b 84
+b 83
+b 1
+b 92
+b 94
+b 103
+b 102
+b 1
+b 55
+b 61
+b 61
+b 1
+b 7
+b 41
+b 41
+b 38
+b 1
+b 67
+b 138
+b 139
+b 138
+b 1
+b 110
+b 108
+b 1
+b 5
+b 33
+b 35
+b 36
+b 38
+b 39
+b 35
+b 3
+b 3
+b 1
+b 120
+b 120
+b 1
+b 24
+b 26
+b 27
+b 24
+b 2
+b 6
+b 44
+b 53
+b 55
+b 64
+b 65
+b 67
+b 68
+b 55
+b 1
+b 62
+b 1
+b 65
+b 3
+b 17
+b 19
+b 26
+b 27
+b 40
+b 17
+b 7
+b 37
+b 38
+b 35
+b 2
+b 6
+b 1
+b 25
+b 0
+b 66
+b 71
+b 72
+b 79
+b 71
+b 1
+b 76
+b 2
+b 8
+b 9
+b 3
+b 40
+b 46
+b 47
+b 49
+b 51
+b 17
+b 7
+b 8
+b 25
+b 5
+b 2
+b 23
+b 1
+b 23
+b 41
+b 4
+b 5
+b 4
+b 2
+b 0
+b 55
+b 73
+b 53
+b 2
+b 7
+b 9
+b 11
+b 13
+b 5
+b 1
+b 71
+b 3
+b 4
+b 6
+b 8
+b 1
+b 2
+b 97
+b 101
+b 102
+b 104
+b 106
+b 8
+b 10
+b 23
+b 24
+b 10
+b 1
+b 15
+b 16
+b 48
+b 199
+b 201
+b 202
+b 211
+b 213
+b 199
+b 2
+b 149
+b 155
+b 162
+b 163
+b 165
+b 162
+b 2
+b 146
+b 1
+b 16
+b 37
+b 38
+b 57
+b 14
+b 2
+b 35
+b 1
+b 12
+b 27
+b 28
+b 9
+b 1
+b 26
+b 1
+b 10
+b 82
+b 88
+b 81
+b 2
+b 84
+b 1
+b 114
+b 43
+b 131
+b 143
+b 144
+b 146
+b 147
+b 149
+b 158
+b 143
+b 3
+b 128
+b 1
+b 5
+b 2
+b 1
+b 109
+b 353
+b 354
+b 354
+b 1
+b 17
+b 17
+b 1
+b 0
+b 2
+b 3
+b 13
+b 0
+b 2
+b 100
+b 130
+b 131
+b 129
+b 1
+b 99
+b 1
+b 16
+b 24
+b 25
+b 27
+b 139
+b 137
+b 1
+b 20
+b 21
+b 31
+b 18
+b 2
+b 28
+b 1
+b 60
+b 99
+b 96
+b 1
+b 0
+b 2
+b 0
+b 1
+b 127
+b 137
+b 138
+b 174
+b 175
+b 199
+b 136
+b 1
+b 173
+b 2
+b 44
+b 48
+b 106
+b 108
+b 109
+b 3
+b 34
+b 2
+b 3
+b 8
+b 18
+b 5
+b 7
+b 5
+b 1
+b 1
+b 9
+b 10
+b 0
+b 1
+b 71
+b 11
+b 10
+b 1
+b 2
+b 8
+b 10
+b 16
+b 17
+b 10
+b 1
+b 3
+b 162
+b 2
+b 3
+b 107
+b 108
+b 115
+b 105
+b 2
+b 113
+b 1
+b 169
+b 14
+b 19
+b 20
+b 26
+b 25
+b 2
+b 2
+b 5
+b 6
+b 1
+b 5
+b 165
+b 171
+b 172
+b 189
+b 169
+b 2
+b 164
+b 1
+b 185
+b 1
+b 18
+b 20
+b 22
+b 23
+b 34
+b 35
+b 42
+b 44
+b 46
+b 47
+b 20
+b 2
+b 32
+b 2
+b 30
+b 124
+b 125
+b 127
+b 134
+b 135
+b 30
+b 1
+b 122
+b 1
+b 32
+b 46
+b 10
+b 11
+b 13
+b 15
+b 22
+b 23
+b 13
+b 1
+b 125
+b 126
+b 125
+b 1
+b 50
+b 51
+b 50
+b 2
+b 24
+b 24
+b 1
+b 23
+b 3
+b 0
+b 1
+b 2
+b 3
+b 11
+b 0
+b 2
+b 0
+b 1
+b 0
+b 1
+b 219
+b 221
+b 188
+b 194
+b 195
+b 194
+b 1
+b 64
+b 64
+b 1
+b 7
+b 9
+b 11
+b 11
+b 1
+b 1
+b 14
+b 36
+b 37
+b 36
+b 37
+b 36
+b 1
+b 0
+b 22
+b 24
+b 25
+b 51
+b 50
+b 1
+b 39
+b 12
+b 82
+b 88
+b 89
+b 97
+b 88
+b 2
+b 9
+b 1
+b 91
+b 1
+b 133
+b 12
+b 14
+b 10
+b 1
+b 16
+b 17
+b 30
+b 15
+b 1
+b 28
+b 29
+b 81
+b 27
+b 1
+b 6
+b 44
+b 45
+b 6
+b 1
+b 41
+b 3
+b 205
+b 227
+b 228
+b 230
+b 231
+b 233
+b 242
+b 248
+b 204
+b 2
+b 223
+b 2
+b 226
+b 2
+b 48
+b 56
+b 57
+b 59
+b 61
+b 63
+b 55
+b 1
+b 47
+b 1
+b 97
+b 97
+b 1
+b 67
+b 68
+b 76
+b 66
+b 1
+b 195
+b 214
+b 215
+b 225
+b 226
+b 243
+b 214
+b 1
+b 193
+b 1
+b 213
+b 211
+b 1
+b 19
+b 20
+b 19
+b 2
+b 4
+b 5
+b 7
+b 9
+b 4
+b 2
+b 3
+b 5
+b 7
+b 8
+b 10
+b 12
+b 5
+b 2
+b 10
+b 1
+b 199
+b 197
+b 1
+b 49
+b 55
+b 56
+b 58
+b 59
+b 55
+b 3
+b 1
+b 9
+b 8
+b 1
+b 92
+b 93
+b 95
+b 97
+b 92
+b 2
+b 3
+b 4
+b 1
+b 2
+b 14
+b 11
+b 1
+b 30
+b 35
+b 78
+b 79
+b 90
+b 89
+b 1
+b 0
+b 165
+b 162
+b 1
+b 12
+b 12
+b 1
+b 124
+b 126
+b 128
+b 129
+b 131
+b 133
+b 135
+b 128
+b 2
+b 8
+b 14
+b 8
+b 10
+b 12
+b 13
+b 25
+b 12
+b 2
+b 21
+b 3
+b 83
+b 85
+b 86
+b 88
+b 90
+b 83
+b 2
+b 14
+b 0
+b 1
+b 15
+b 24
+b 34
+b 32
+b 1
+b 10
+b 11
+b 23
+b 10
+b 2
+b 18
+b 1
+b 50
+b 16
+b 17
+b 26
+b 146
+b 144
+b 1
+b 32
+b 36
+b 37
+b 36
+b 1
+b 41
+b 42
+b 53
+b 41
+b 2
+b 48
+b 1
+b 292
+b 380
+b 381
+b 383
+b 385
+b 386
+b 388
+b 390
+b 378
+b 2
+b 11
+b 10
+b 1
+b 488
+b 486
+b 1
+b 38
+b 47
+b 49
+b 51
+b 52
+b 54
+b 56
+b 51
+b 2
+b 55
+b 15
+b 16
+b 18
+b 20
+b 14
+b 1
+b 19
+b 1
+b 8
+b 6
+b 26
+b 27
+b 29
+b 30
+b 48
+b 26
+b 3
+b 45
+b 1
+b 3
+b 1
+b 39
+b 64
+b 65
+b 97
+b 64
+b 1
+b 95
+b 2
+b 89
+b 6
+b 7
+b 5
+b 1
+b 3
+b 1
+b 1
+b 21
+b 23
+b 24
+b 26
+b 27
+b 29
+b 23
+b 3
+b 6
+b 30
+b 29
+b 2
+b 11
+b 8
+b 1
+b 32
+b 8
+b 9
+b 28
+b 30
+b 31
+b 8
+b 2
+b 26
+b 2
+b 4
+b 5
+b 9
+b 8
+b 2
+b 822
+b 838
+b 820
+b 2
+b 6
+b 9
+b 10
+b 21
+b 9
+b 1
+b 33
+b 14
+b 38
+b 39
+b 38
+b 1
+b 1
+b 0
+b 1
+b 342
+b 349
+b 393
+b 394
+b 396
+b 341
+b 1
+b 69
+b 27
+b 3
+b 4
+b 6
+b 3
+b 2
+b 14
+b 15
+b 12
+b 2
+b 2
+b 3
+b 33
+b 47
+b 49
+b 50
+b 49
+b 1
+b 1
+b 62
+b 64
+b 71
+b 72
+b 134
+b 60
+b 1
+b 70
+b 2
+b 129
+b 1
+b 30
+b 31
+b 39
+b 30
+b 2
+b 35
+b 2
+b 4
+b 5
+b 7
+b 2
+b 2
+b 5
+b 1
+b 151
+b 9
+b 7
+b 9
+b 50
+b 47
+b 1
+b 45
+b 46
+b 48
+b 50
+b 43
+b 2
+b 48
+b 1
+b 14
+b 12
+b 3
+b 31
+b 31
+b 1
+b 24
+b 25
+b 27
+b 27
+b 1
+b 17
+b 27
+b 26
+b 2
+b 6
+b 129
+b 0
+b 2
+b 3
+b 12
+b 194
+b 196
+b 198
+b 199
+b 201
+b 203
+b 205
+b 192
+b 1
+b 197
+b 2
+b 239
+b 265
+b 266
+b 277
+b 283
+b 284
+b 286
+b 265
+b 1
+b 274
+b 3
+b 277
+b 2
+b 280
+b 1
+b 49
+b 14
+b 15
+b 22
+b 28
+b 13
+b 1
+b 27
+b 1
+b 28
+b 32
+b 33
+b 35
+b 37
+b 38
+b 40
+b 30
+b 2
+b 35
+b 2
+b 27
+b 1
+b 7
+b 7
+b 5
+b 2
+b 14
+b 30
+b 31
+b 39
+b 30
+b 2
+b 35
+b 1
+b 34
+b 57
+b 58
+b 62
+b 63
+b 77
+b 79
+b 56
+b 1
+b 61
+b 2
+b 71
+b 1
+b 5
+b 33
+b 50
+b 51
+b 48
+b 2
+b 69
+b 66
+b 1
+b 150
+b 164
+b 147
+b 1
+b 4
+b 22
+b 24
+b 25
+b 34
+b 24
+b 1
+b 31
+b 2
+b 15
+b 37
+b 56
+b 57
+b 55
+b 1
+b 6
+b 7
+b 21
+b 22
+b 6
+b 2
+b 17
+b 2
+b 25
+b 24
+b 1
+b 8
+b 14
+b 15
+b 17
+b 19
+b 20
+b 13
+b 1
+b 18
+b 2
+b 65
+b 66
+b 9
+b 117
+b 116
+b 2
+b 358
+b 398
+b 38
+b 52
+b 54
+b 55
+b 57
+b 66
+b 68
+b 52
+b 2
+b 66
+b 1
+b 32
+b 33
+b 35
+b 84
+b 32
+b 2
+b 82
+b 1
+b 73
+b 74
+b 82
+b 73
+b 1
+b 79
+b 2
+b 4
+b 6
+b 15
+b 34
+b 33
+b 1
+b 71
+b 80
+b 81
+b 78
+b 2
+b 3
+b 4
+b 3
+b 2
+b 16
+b 13
+b 1
+b 14
+b 11
+b 12
+b 2
+b 278
+b 284
+b 276
+b 2
+b 1
+b 14
+b 15
+b 14
+b 1
+b 13
+b 160
+b 62
+b 78
+b 79
+b 81
+b 89
+b 61
+b 2
+b 74
+b 2
+b 77
+b 1
+b 26
+b 38
+b 39
+b 38
+b 2
+b 24
+b 1
+b 17
+b 15
+b 1
+b 92
+b 34
+b 35
+b 33
+b 1
+b 13
+b 11
+b 1
+b 23
+b 25
+b 26
+b 28
+b 25
+b 2
+b 19
+b 21
+b 21
+b 1
+b 82
+b 84
+b 85
+b 87
+b 84
+b 2
+b 18
+b 19
+b 18
+b 2
+b 18
+b 15
+b 1
+b 4
+b 5
+b 13
+b 2
+b 2
+b 127
+b 143
+b 144
+b 142
+b 1
+b 126
+b 1
+b 2
+b 94
+b 98
+b 5
+b 2
+b 1
+b 12
+b 13
+b 15
+b 16
+b 22
+b 26
+b 12
+b 3
+b 22
+b 1
+b 38
+b 39
+b 66
+b 67
+b 69
+b 38
+b 2
+b 63
+b 1
+b 18
+b 15
+b 1
+b 9
+b 8
+b 24
+b 25
+b 59
+b 60
+b 96
+b 98
+b 5
+b 11
+b 13
+b 14
+b 27
+b 11
+b 2
+b 24
+b 1
+b 46
+b 43
+b 44
+b 46
+b 48
+b 3
+b 11
+b 12
+b 18
+b 135
+b 152
+b 220
+b 135
+b 1
+b 149
+b 1
+b 19
+b 54
+b 55
+b 61
+b 54
+b 2
+b 57
+b 1
+b 1
+b 13
+b 1
+b 1
+b 10
+b 12
+b 47
+b 58
+b 59
+b 46
+b 2
+b 54
+b 3
+b 119
+b 116
+b 1
+b 120
+b 122
+b 165
+b 34
+b 35
+b 46
+b 34
+b 2
+b 60
+b 246
+b 247
+b 249
+b 251
+b 253
+b 3
+b 5
+b 17
+b 18
+b 20
+b 21
+b 41
+b 17
+b 3
+b 0
+b 1
+b 36
+b 1
+b 249
+b 251
+b 252
+b 254
+b 314
+b 372
+b 373
+b 375
+b 247
+b 1
+b 371
+b 2
+b 318
+b 320
+b 322
+b 323
+b 335
+b 334
+b 2
+b 11
+b 10
+b 2
+b 87
+b 85
+b 2
+b 58
+b 59
+b 55
+b 1
+b 2
+b 90
+b 91
+b 93
+b 94
+b 102
+b 90
+b 3
+b 35
+b 49
+b 34
+b 2
+b 44
+b 1
+b 9
+b 15
+b 16
+b 26
+b 27
+b 13
+b 2
+b 5
+b 5
+b 1
+b 31
+b 70
+b 71
+b 90
+b 92
+b 93
+b 29
+b 1
+b 69
+b 2
+b 87
+b 2
+b 7
+b 89
+b 95
+b 96
+b 102
+b 103
+b 105
+b 106
+b 89
+b 1
+b 92
+b 2
+b 99
+b 3
+b 20
+b 20
+b 1
+b 1
+b 45
+b 67
+b 65
+b 1
+b 1
+b 2
+b 4
+b 5
+b 12
+b 23
+b 0
+b 1
+b 3
+b 2
+b 7
+b 2
+b 27
+b 46
+b 4
+b 5
+b 4
+b 1
+b 70
+b 54
+b 55
+b 54
+b 1
+b 11
+b 19
+b 30
+b 36
+b 37
+b 45
+b 28
+b 1
+b 56
+b 58
+b 59
+b 61
+b 56
+b 2
+b 59
+b 1
+b 168
+b 63
+b 70
+b 71
+b 70
+b 1
+b 81
+b 92
+b 79
+b 2
+b 22
+b 19
+b 1
+b 4
+b 6
+b 7
+b 9
+b 15
+b 4
+b 2
+b 30
+b 29
+b 1
+b 57
+b 59
+b 60
+b 66
+b 18
+b 4
+b 60
+b 61
+b 72
+b 2
+b 1
+b 6
+b 7
+b 9
+b 6
+b 2
+b 5
+b 114
+b 115
+b 114
+b 1
+b 28
+b 29
+b 28
+b 2
+b 15
+b 16
+b 18
+b 20
+b 15
+b 2
+b 51
+b 60
+b 61
+b 51
+b 1
+b 58
+b 1
+b 5
+b 4
+b 3
+b 18
+b 16
+b 1
+b 14
+b 15
+b 17
+b 18
+b 20
+b 22
+b 24
+b 14
+b 3
+b 13
+b 5
+b 6
+b 8
+b 47
+b 48
+b 8
+b 9
+b 11
+b 32
+b 8
+b 2
+b 28
+b 1
+b 84
+b 49
+b 6
+b 8
+b 10
+b 11
+b 6
+b 1
+b 62
+b 20
+b 32
+b 31
+b 1
+b 4
+b 5
+b 7
+b 9
+b 10
+b 12
+b 14
+b 2
+b 2
+b 7
+b 2
+b 43
+b 45
+b 47
+b 43
+b 1
+b 0
+b 85
+b 121
+b 123
+b 124
+b 123
+b 1
+b 2
+b 3
+b 168
+b 194
+b 196
+b 197
+b 205
+b 196
+b 1
+b 166
+b 1
+b 0
+b 2
+b 3
+b 211
+b 215
+b 217
+b 218
+b 13
+b 14
+b 42
+b 12
+b 1
+b 41
+b 1
+b 122
+b 123
+b 120
+b 2
+b 2
+b 1
+b 1
+b 10
+b 12
+b 13
+b 15
+b 17
+b 12
+b 2
+b 17
+b 1
+b 17
+b 51
+b 58
+b 59
+b 64
+b 65
+b 75
+b 77
+b 58
+b 1
+b 61
+b 2
+b 95
+b 6
+b 8
+b 9
+b 4
+b 1
+b 2
+b 4
+b 6
+b 7
+b 4
+b 2
+b 118
+b 8
+b 7
+b 2
+b 30
+b 28
+b 1
+b 12
+b 24
+b 25
+b 41
+b 42
+b 44
+b 45
+b 61
+b 63
+b 41
+b 3
+b 60
+b 1
+b 20
+b 19
+b 1
+b 18
+b 92
+b 107
+b 109
+b 110
+b 109
+b 1
+b 59
+b 58
+b 1
+b 156
+b 3
+b 5
+b 14
+b 15
+b 17
+b 19
+b 20
+b 22
+b 12
+b 2
+b 17
+b 2
+b 113
+b 123
+b 124
+b 112
+b 1
+b 22
+b 51
+b 52
+b 23
+b 40
+b 50
+b 56
+b 57
+b 49
+b 2
+b 52
+b 2
+b 250
+b 255
+b 248
+b 1
+b 410
+b 428
+b 429
+b 408
+b 1
+b 15
+b 13
+b 2
+b 14
+b 140
+b 103
+b 22
+b 20
+b 2
+b 42
+b 61
+b 0
+b 0
+b 1
+b 0
+b 1
+b 0
+b 2
+b 10
+b 11
+b 0
+b 1
+b 5
+b 7
+b 8
+b 10
+b 11
+b 50
+b 54
+b 7
+b 3
+b 49
+b 3
+b 8
+b 1
+b 44
+b 1
+b 3
+b 52
+b 50
+b 1
+b 38
+b 39
+b 36
+b 2
+b 6
+b 7
+b 9
+b 11
+b 6
+b 2
+b 179
+b 188
+b 189
+b 0
+b 1
+b 8
+b 16
+b 14
+b 2
+b 7
+b 1
+b 143
+b 145
+b 141
+b 1
+b 50
+b 51
+b 53
+b 55
+b 50
+b 2
+b 29
+b 33
+b 34
+b 36
+b 37
+b 39
+b 33
+b 3
+b 36
+b 1
+b 42
+b 40
+b 1
+b 54
+b 56
+b 57
+b 77
+b 6
+b 5
+b 1
+b 9
+b 10
+b 14
+b 8
+b 1
+b 47
+b 3
+b 5
+b 7
+b 9
+b 3
+b 1
+b 91
+b 113
+b 114
+b 116
+b 117
+b 113
+b 3
+b 1
+b 6
+b 10
+b 5
+b 2
+b 84
+b 86
+b 100
+b 98
+b 1
+b 0
+b 2
+b 39
+b 46
+b 47
+b 38
+b 1
+b 76
+b 78
+b 359
+b 361
+b 362
+b 364
+b 402
+b 361
+b 2
+b 398
+b 2
+b 64
+b 149
+b 125
+b 127
+b 129
+b 131
+b 132
+b 3
+b 2
+b 1
+b 31
+b 32
+b 46
+b 31
+b 1
+b 38
+b 40
+b 35
+b 1
+b 30
+b 30
+b 1
+b 74
+b 75
+b 74
+b 1
+b 13
+b 62
+b 75
+b 77
+b 87
+b 88
+b 75
+b 1
+b 56
+b 116
+b 125
+b 126
+b 125
+b 1
+b 115
+b 1
+b 69
+b 67
+b 1
+b 25
+b 27
+b 29
+b 31
+b 32
+b 34
+b 36
+b 38
+b 22
+b 1
+b 64
+b 4
+b 5
+b 4
+b 1
+b 11
+b 12
+b 52
+b 11
+b 2
+b 99
+b 197
+b 198
+b 4
+b 2
+b 1
+b 13
+b 66
+b 67
+b 66
+b 1
+b 11
+b 9
+b 1
+b 31
+b 39
+b 40
+b 42
+b 39
+b 2
+b 9
+b 11
+b 12
+b 14
+b 7
+b 1
+b 54
+b 53
+b 2
+b 30
+b 31
+b 33
+b 35
+b 28
+b 2
+b 4
+b 285
+b 308
+b 361
+b 363
+b 364
+b 366
+b 374
+b 359
+b 1
+b 362
+b 2
+b 23
+b 29
+b 28
+b 4
+b 0
+b 1
+b 3
+b 11
+b 12
+b 42
+b 0
+b 2
+b 216
+b 110
+b 111
+b 113
+b 110
+b 2
+b 56
+b 54
+b 1
+b 74
+b 75
+b 77
+b 74
+b 2
+b 12
+b 13
+b 12
+b 1
+b 18
+b 107
+b 128
+b 129
+b 137
+b 138
+b 107
+b 1
+b 125
+b 2
+b 134
+b 1
+b 26
+b 16
+b 15
+b 66
+b 76
+b 77
+b 76
+b 1
+b 17
+b 18
+b 20
+b 15
+b 13
+b 2
+b 70
+b 0
+b 2
+b 21
+b 20
+b 1
+b 40
+b 42
+b 44
+b 45
+b 38
+b 1
+b 43
+b 2
+b 15
+b 16
+b 22
+b 14
+b 1
+b 30
+b 32
+b 34
+b 35
+b 41
+b 42
+b 53
+b 32
+b 2
+b 9
+b 61
+b 53
+b 54
+b 56
+b 57
+b 63
+b 52
+b 1
+b 55
+b 2
+b 58
+b 1
+b 0
+b 2
+b 135
+b 147
+b 133
+b 1
+b 15
+b 13
+b 3
+b 20
+b 55
+b 668
+b 669
+b 840
+b 838
+b 1
+b 0
+b 10
+b 15
+b 16
+b 22
+b 23
+b 10
+b 1
+b 13
+b 1
+b 25
+b 32
+b 16
+b 18
+b 25
+b 27
+b 0
+b 1
+b 73
+b 63
+b 78
+b 80
+b 78
+b 1
+b 67
+b 80
+b 81
+b 93
+b 79
+b 1
+b 12
+b 10
+b 1
+b 434
+b 460
+b 462
+b 463
+b 465
+b 482
+b 491
+b 433
+b 2
+b 458
+b 2
+b 57
+b 59
+b 149
+b 151
+b 166
+b 66
+b 71
+b 72
+b 70
+b 1
+b 76
+b 78
+b 78
+b 1
+b 40
+b 59
+b 60
+b 59
+b 1
+b 79
+b 77
+b 1
+b 26
+b 28
+b 30
+b 31
+b 53
+b 54
+b 56
+b 53
+b 2
+b 5
+b 4
+b 1
+b 8
+b 15
+b 16
+b 36
+b 37
+b 36
+b 1
+b 105
+b 107
+b 107
+b 1
+b 50
+b 56
+b 11
+b 23
+b 25
+b 27
+b 28
+b 30
+b 27
+b 2
+b 7
+b 12
+b 5
+b 2
+b 66
+b 64
+b 1
+b 8
+b 9
+b 25
+b 7
+b 1
+b 30
+b 35
+b 12
+b 10
+b 1
+b 0
+b 2
+b 3
+b 5
+b 7
+b 8
+b 0
+b 2
+b 5
+b 3
+b 0
+b 24
+b 24
+b 22
+b 1
+b 9
+b 10
+b 12
+b 8
+b 1
+b 64
+b 65
+b 59
+b 41
+b 3
+b 5
+b 6
+b 9
+b 8
+b 1
+b 8
+b 10
+b 12
+b 25
+b 6
+b 1
+b 0
+b 1
+b 191
+b 199
+b 200
+b 190
+b 1
+b 4
+b 16
+b 21
+b 22
+b 21
+b 2
+b 8
+b 220
+b 222
+b 223
+b 155
+b 157
+b 158
+b 157
+b 1
+b 0
+b 2
+b 0
+b 1
+b 24
+b 39
+b 2
+b 4
+b 65
+b 67
+b 68
+b 67
+b 1
+b 22
+b 5
+b 3
+b 2
+b 365
+b 382
+b 364
+b 1
+b 379
+b 1
+b 3
+b 7
+b 8
+b 16
+b 17
+b 19
+b 20
+b 7
+b 2
+b 12
+b 2
+b 23
+b 48
+b 53
+b 54
+b 50
+b 1
+b 3
+b 4
+b 3
+b 2
+b 24
+b 21
+b 1
+b 265
+b 269
+b 265
+b 1
+b 15
+b 7
+b 9
+b 10
+b 7
+b 2
+b 0
+b 11
+b 12
+b 0
+b 1
+b 22
+b 92
+b 94
+b 3
+b 96
+b 97
+b 101
+b 96
+b 2
+b 93
+b 1
+b 78
+b 9
+b 21
+b 22
+b 33
+b 34
+b 7
+b 1
+b 20
+b 2
+b 65
+b 69
+b 68
+b 1
+b 15
+b 16
+b 100
+b 102
+b 103
+b 105
+b 2
+b 48
+b 72
+b 74
+b 75
+b 77
+b 74
+b 2
+b 3
+b 5
+b 6
+b 46
+b 48
+b 49
+b 72
+b 73
+b 77
+b 71
+b 1
+b 10
+b 8
+b 1
+b 51
+b 48
+b 1
+b 20
+b 30
+b 31
+b 47
+b 48
+b 18
+b 1
+b 29
+b 2
+b 42
+b 2
+b 37
+b 38
+b 40
+b 87
+b 88
+b 35
+b 2
+b 85
+b 2
+b 3
+b 3
+b 1
+b 81
+b 83
+b 85
+b 85
+b 1
+b 10
+b 11
+b 13
+b 10
+b 2
+b 3
+b 4
+b 1
+b 3
+b 26
+b 28
+b 30
+b 138
+b 63
+b 64
+b 66
+b 67
+b 63
+b 3
+b 143
+b 149
+b 153
+b 147
+b 2
+b 142
+b 1
+b 38
+b 36
+b 1
+b 30
+b 32
+b 7
+b 4
+b 1
+b 15
+b 25
+b 12
+b 1
+b 7
+b 1
+b 1
+b 4
+b 1
+b 198
+b 196
+b 1
+b 25
+b 26
+b 33
+b 34
+b 36
+b 25
+b 2
+b 30
+b 1
+b 1
+b 34
+b 36
+b 37
+b 39
+b 41
+b 48
+b 49
+b 39
+b 1
+b 204
+b 205
+b 203
+b 1
+b 81
+b 8
+b 5
+b 1
+b 5
+b 4
+b 4
+b 1
+b 158
+b 160
+b 162
+b 163
+b 162
+b 1
+b 34
+b 73
+b 75
+b 77
+b 78
+b 75
+b 2
+b 3
+b 2
+b 1
+b 157
+b 159
+b 161
+b 162
+b 164
+b 166
+b 164
+b 1
+b 85
+b 83
+b 1
+b 8
+b 9
+b 16
+b 8
+b 2
+b 128
+b 147
+b 148
+b 125
+b 1
+b 34
+b 1
+b 2
+b 0
+b 2
+b 121
+b 142
+b 144
+b 145
+b 152
+b 120
+b 1
+b 0
+b 1
+b 8
+b 0
+b 1
+b 124
+b 130
+b 131
+b 133
+b 135
+b 130
+b 2
+b 36
+b 37
+b 39
+b 41
+b 42
+b 69
+b 34
+b 2
+b 39
+b 2
+b 39
+b 95
+b 96
+b 98
+b 115
+b 93
+b 2
+b 38
+b 1
+b 49
+b 85
+b 86
+b 85
+b 2
+b 47
+b 1
+b 113
+b 114
+b 122
+b 112
+b 1
+b 29
+b 29
+b 54
+b 56
+b 57
+b 59
+b 61
+b 63
+b 65
+b 75
+b 54
+b 2
+b 72
+b 2
+b 8
+b 10
+b 11
+b 18
+b 33
+b 36
+b 37
+b 8
+b 2
+b 28
+b 1
+b 160
+b 179
+b 206
+b 160
+b 1
+b 175
+b 1
+b 0
+b 1
+b 1
+b 8
+b 7
+b 9
+b 124
+b 136
+b 137
+b 152
+b 158
+b 136
+b 1
+b 149
+b 3
+b 152
+b 1
+b 19
+b 11
+b 13
+b 15
+b 16
+b 30
+b 9
+b 1
+b 15
+b 1
+b 28
+b 14
+b 56
+b 68
+b 69
+b 80
+b 81
+b 56
+b 1
+b 66
+b 1
+b 1
+b 37
+b 45
+b 46
+b 55
+b 36
+b 1
+b 112
+b 114
+b 114
+b 1
+b 103
+b 105
+b 106
+b 109
+b 103
+b 2
+b 142
+b 187
+b 191
+b 192
+b 200
+b 201
+b 191
+b 2
+b 140
+b 1
+b 193
+b 1
+b 45
+b 209
+b 210
+b 212
+b 220
+b 221
+b 223
+b 235
+b 207
+b 2
+b 218
+b 2
+b 11
+b 13
+b 13
+b 1
+b 6
+b 5
+b 6
+b 23
+b 24
+b 26
+b 27
+b 40
+b 5
+b 1
+b 20
+b 2
+b 23
+b 1
+b 208
+b 209
+b 213
+b 208
+b 2
+b 209
+b 1
+b 89
+b 88
+b 1
+b 0
+b 11
+b 13
+b 6
+b 4
+b 1
+b 21
+b 20
+b 21
+b 27
+b 20
+b 2
+b 81
+b 83
+b 85
+b 79
+b 1
+b 100
+b 102
+b 103
+b 100
+b 2
+b 0
+b 65
+b 77
+b 79
+b 80
+b 87
+b 64
+b 2
+b 72
+b 1
+b 6
+b 58
+b 60
+b 61
+b 67
+b 76
+b 249
+b 3
+b 15
+b 16
+b 2
+b 2
+b 11
+b 2
+b 64
+b 66
+b 67
+b 66
+b 1
+b 23
+b 6
+b 7
+b 9
+b 11
+b 4
+b 2
+b 118
+b 115
+b 1
+b 58
+b 59
+b 69
+b 70
+b 58
+b 2
+b 4
+b 135
+b 133
+b 1
+b 16
+b 17
+b 19
+b 32
+b 19
+b 1
+b 114
+b 114
+b 1
+b 30
+b 27
+b 1
+b 50
+b 51
+b 53
+b 54
+b 50
+b 3
+b 45
+b 9
+b 21
+b 22
+b 5
+b 16
+b 18
+b 14
+b 1
+b 4
+b 1
+b 41
+b 48
+b 52
+b 53
+b 63
+b 52
+b 1
+b 104
+b 105
+b 107
+b 128
+b 104
+b 2
+b 1
+b 17
+b 15
+b 2
+b 10
+b 12
+b 13
+b 15
+b 23
+b 10
+b 2
+b 143
+b 152
+b 151
+b 1
+b 16
+b 17
+b 15
+b 1
+b 13
+b 0
+b 2
+b 3
+b 5
+b 2
+b 3
+b 84
+b 82
+b 1
+b 95
+b 94
+b 1
+b 0
+b 2
+b 3
+b 9
+b 10
+b 11
+b 0
+b 2
+b 29
+b 146
+b 153
+b 158
+b 159
+b 165
+b 166
+b 168
+b 152
+b 2
+b 155
+b 1
+b 74
+b 84
+b 85
+b 84
+b 1
+b 16
+b 31
+b 169
+b 171
+b 173
+b 175
+b 176
+b 178
+b 169
+b 1
+b 13
+b 7
+b 8
+b 24
+b 23
+b 1
+b 9
+b 7
+b 1
+b 127
+b 133
+b 135
+b 136
+b 135
+b 1
+b 124
+b 1
+b 90
+b 104
+b 132
+b 130
+b 1
+b 103
+b 1
+b 31
+b 2
+b 3
+b 30
+b 32
+b 33
+b 66
+b 119
+b 131
+b 132
+b 134
+b 141
+b 129
+b 2
+b 138
+b 2
+b 96
+b 97
+b 96
+b 2
+b 10
+b 7
+b 1
+b 35
+b 36
+b 34
+b 1
+b 17
+b 27
+b 171
+b 7
+b 9
+b 9
+b 1
+b 2
+b 3
+b 5
+b 2
+b 2
+b 46
+b 5
+b 6
+b 22
+b 198
+b 89
+b 93
+b 94
+b 97
+b 103
+b 93
+b 4
+b 569
+b 567
+b 1
+b 4
+b 8
+b 13
+b 14
+b 12
+b 1
+b 0
+b 1
+b 102
+b 104
+b 105
+b 107
+b 109
+b 104
+b 2
+b 50
+b 51
+b 71
+b 50
+b 2
+b 66
+b 1
+b 135
+b 151
+b 162
+b 164
+b 166
+b 150
+b 1
+b 56
+b 63
+b 64
+b 78
+b 79
+b 81
+b 62
+b 1
+b 77
+b 2
+b 15
+b 13
+b 3
+b 31
+b 33
+b 35
+b 37
+b 38
+b 40
+b 33
+b 1
+b 0
+b 2
+b 4
+b 6
+b 8
+b 8
+b 1
+b 0
+b 2
+b 0
+b 1
+b 27
+b 26
+b 1
+b 20
+b 22
+b 23
+b 33
+b 34
+b 57
+b 22
+b 2
+b 30
+b 1
+b 116
+b 120
+b 121
+b 156
+b 159
+b 120
+b 1
+b 153
+b 1
+b 25
+b 23
+b 2
+b 104
+b 106
+b 108
+b 114
+b 102
+b 1
+b 48
+b 45
+b 47
+b 48
+b 210
+b 211
+b 47
+b 1
+b 208
+b 1
+b 17
+b 1
+b 2
+b 1
+b 2
+b 180
+b 179
+b 1
+b 43
+b 45
+b 46
+b 67
+b 73
+b 43
+b 2
+b 6
+b 12
+b 13
+b 15
+b 16
+b 18
+b 6
+b 1
+b 9
+b 2
+b 12
+b 2
+b 25
+b 6
+b 98
+b 100
+b 101
+b 110
+b 111
+b 119
+b 120
+b 130
+b 98
+b 2
+b 108
+b 2
+b 113
+b 2
+b 123
+b 1
+b 92
+b 33
+b 34
+b 42
+b 32
+b 1
+b 1
+b 0
+b 1
+b 406
+b 412
+b 413
+b 415
+b 417
+b 418
+b 404
+b 1
+b 411
+b 2
+b 135
+b 13
+b 19
+b 20
+b 61
+b 17
+b 2
+b 12
+b 1
+b 24
+b 25
+b 27
+b 24
+b 2
+b 23
+b 25
+b 12
+b 14
+b 15
+b 87
+b 58
+b 59
+b 66
+b 68
+b 70
+b 71
+b 72
+b 68
+b 4
+b 0
+b 4
+b 4
+b 5
+b 15
+b 17
+b 18
+b 4
+b 2
+b 10
+b 1
+b 35
+b 34
+b 1
+b 3
+b 4
+b 1
+b 3
+b 45
+b 11
+b 32
+b 33
+b 11
+b 1
+b 30
+b 1
+b 0
+b 1
+b 0
+b 3
+b 439
+b 437
+b 2
+b 2
+b 4
+b 293
+b 292
+b 1
+b 10
+b 8
+b 1
+b 13
+b 15
+b 17
+b 18
+b 20
+b 15
+b 2
+b 251
+b 250
+b 1
+b 27
+b 28
+b 37
+b 38
+b 43
+b 27
+b 1
+b 51
+b 101
+b 103
+b 104
+b 103
+b 2
+b 98
+b 1
+b 1
+b 3
+b 5
+b 5
+b 1
+b 99
+b 97
+b 2
+b 33
+b 3
+b 5
+b 7
+b 8
+b 10
+b 12
+b 5
+b 2
+b 93
+b 82
+b 83
+b 85
+b 86
+b 82
+b 3
+b 81
+b 108
+b 80
+b 2
+b 103
+b 1
+b 12
+b 17
+b 18
+b 20
+b 27
+b 28
+b 17
+b 2
+b 23
+b 2
+b 3
+b 1
+b 1
+b 9
+b 11
+b 11
+b 1
+b 1
+b 12
+b 10
+b 3
+b 127
+b 138
+b 136
+b 3
+b 126
+b 1
+b 97
+b 98
+b 144
+b 97
+b 2
+b 139
+b 1
+b 1
+b 100
+b 102
+b 103
+b 105
+b 107
+b 102
+b 2
+b 1
+b 0
+b 2
+b 14
+b 21
+b 22
+b 21
+b 1
+b 93
+b 27
+b 69
+b 19
+b 17
+b 3
+b 0
+b 6
+b 7
+b 9
+b 10
+b 6
+b 3
+b 3
+b 0
+b 1
+b 34
+b 31
+b 1
+b 7
+b 8
+b 10
+b 23
+b 5
+b 2
+b 18
+b 36
+b 38
+b 39
+b 46
+b 54
+b 55
+b 57
+b 52
+b 2
+b 45
+b 1
+b 27
+b 26
+b 1
+b 0
+b 35
+b 50
+b 52
+b 53
+b 50
+b 2
+b 22
+b 23
+b 25
+b 26
+b 21
+b 1
+b 45
+b 97
+b 111
+b 16
+b 17
+b 38
+b 40
+b 15
+b 1
+b 39
+b 1
+b 23
+b 20
+b 1
+b 41
+b 42
+b 58
+b 59
+b 41
+b 2
+b 54
+b 2
+b 7
+b 7
+b 1
+b 15
+b 12
+b 1
+b 228
+b 229
+b 231
+b 376
+b 377
+b 228
+b 2
+b 25
+b 94
+b 95
+b 102
+b 93
+b 1
+b 8
+b 9
+b 7
+b 1
+b 20
+b 209
+b 207
+b 1
+b 6
+b 8
+b 10
+b 12
+b 14
+b 15
+b 46
+b 8
+b 1
+b 88
+b 86
+b 1
+b 112
+b 4
+b 7
+b 8
+b 7
+b 2
+b 0
+b 1
+b 8
+b 0
+b 1
+b 57
+b 21
+b 23
+b 24
+b 52
+b 53
+b 55
+b 19
+b 1
+b 51
+b 4
+b 1
+b 0
+b 1
+b 12
+b 13
+b 19
+b 20
+b 22
+b 24
+b 11
+b 1
+b 18
+b 2
+b 70
+b 82
+b 83
+b 70
+b 1
+b 79
+b 2
+b 30
+b 3
+b 4
+b 3
+b 1
+b 70
+b 76
+b 77
+b 91
+b 76
+b 1
+b 88
+b 1
+b 10
+b 18
+b 19
+b 21
+b 22
+b 38
+b 45
+b 16
+b 2
+b 19
+b 2
+b 31
+b 1
+b 32
+b 49
+b 51
+b 52
+b 54
+b 55
+b 57
+b 67
+b 31
+b 2
+b 49
+b 3
+b 44
+b 1
+b 10
+b 11
+b 17
+b 8
+b 2
+b 14
+b 1
+b 52
+b 52
+b 1
+b 8
+b 9
+b 8
+b 1
+b 8
+b 162
+b 164
+b 166
+b 168
+b 166
+b 1
+b 29
+b 31
+b 42
+b 43
+b 45
+b 46
+b 48
+b 27
+b 1
+b 41
+b 3
+b 14
+b 11
+b 1
+b 2
+b 25
+b 26
+b 28
+b 30
+b 24
+b 1
+b 29
+b 1
+b 21
+b 27
+b 191
+b 192
+b 213
+b 10
+b 12
+b 37
+b 39
+b 40
+b 42
+b 39
+b 2
+b 47
+b 53
+b 54
+b 56
+b 64
+b 62
+b 1
+b 16
+b 21
+b 25
+b 26
+b 23
+b 2
+b 20
+b 1
+b 2
+b 3
+b 5
+b 1
+b 1
+b 20
+b 10
+b 9
+b 2
+b 29
+b 36
+b 35
+b 2
+b 5
+b 19
+b 20
+b 29
+b 30
+b 46
+b 53
+b 18
+b 1
+b 28
+b 2
+b 40
+b 1
+b 38
+b 44
+b 46
+b 47
+b 49
+b 50
+b 52
+b 46
+b 3
+b 42
+b 48
+b 40
+b 2
+b 73
+b 80
+b 81
+b 83
+b 85
+b 72
+b 2
+b 77
+b 1
+b 106
+b 107
+b 109
+b 63
+b 73
+b 94
+b 95
+b 97
+b 72
+b 1
+b 33
+b 31
+b 1
+b 4
+b 5
+b 4
+b 2
+b 3
+b 5
+b 90
+b 92
+b 94
+b 95
+b 101
+b 123
+b 99
+b 2
+b 23
+b 27
+b 1
+b 92
+b 90
+b 1
+b 72
+b 73
+b 91
+b 71
+b 1
+b 66
+b 17
+b 16
+b 1
+b 6
+b 7
+b 4
+b 5
+b 174
+b 180
+b 181
+b 188
+b 189
+b 218
+b 219
+b 180
+b 1
+b 185
+b 2
+b 0
+b 12
+b 5
+b 6
+b 14
+b 24
+b 30
+b 31
+b 13
+b 1
+b 225
+b 227
+b 228
+b 230
+b 231
+b 225
+b 2
+b 72
+b 74
+b 75
+b 91
+b 95
+b 72
+b 2
+b 90
+b 104
+b 106
+b 108
+b 110
+b 111
+b 118
+b 119
+b 130
+b 108
+b 2
+b 116
+b 2
+b 87
+b 1
+b 38
+b 68
+b 12
+b 13
+b 18
+b 19
+b 12
+b 1
+b 15
+b 2
+b 1
+b 0
+b 1
+b 255
+b 256
+b 258
+b 259
+b 261
+b 263
+b 261
+b 1
+b 6
+b 123
+b 81
+b 81
+b 1
+b 18
+b 19
+b 38
+b 17
+b 1
+b 147
+b 154
+b 6
+b 2
+b 3
+b 1
+b 2
+b 42
+b 43
+b 42
+b 2
+b 30
+b 69
+b 27
+b 1
+b 14
+b 15
+b 12
+b 2
+b 8
+b 6
+b 1
+b 21
+b 22
+b 24
+b 34
+b 35
+b 40
+b 20
+b 1
+b 34
+b 1
+b 15
+b 14
+b 1
+b 2
+b 4
+b 14
+b 15
+b 0
+b 1
+b 13
+b 2
+b 117
+b 14
+b 13
+b 1
+b 21
+b 29
+b 30
+b 21
+b 1
+b 26
+b 3
+b 0
+b 2
+b 3
+b 0
+b 3
+b 52
+b 53
+b 55
+b 74
+b 52
+b 2
+b 70
+b 2
+b 184
+b 176
+b 178
+b 182
+b 183
+b 180
+b 2
+b 6
+b 5
+b 1
+b 261
+b 262
+b 282
+b 261
+b 1
+b 77
+b 78
+b 84
+b 85
+b 75
+b 2
+b 82
+b 2
+b 10
+b 8
+b 1
+b 16
+b 52
+b 60
+b 62
+b 63
+b 27
+b 41
+b 42
+b 44
+b 46
+b 47
+b 49
+b 92
+b 46
+b 2
+b 24
+b 1
+b 20
+b 21
+b 18
+b 2
+b 50
+b 281
+b 285
+b 286
+b 285
+b 2
+b 279
+b 1
+b 270
+b 272
+b 111
+b 145
+b 146
+b 165
+b 143
+b 2
+b 163
+b 1
+b 24
+b 21
+b 1
+b 62
+b 72
+b 0
+b 1
+b 7
+b 8
+b 9
+b 0
+b 2
+b 3
+b 4
+b 0
+b 7
+b 0
+b 1
+b 178
+b 187
+b 188
+b 187
+b 1
+b 17
+b 18
+b 25
+b 15
+b 2
+b 23
+b 1
+b 23
+b 0
+b 2
+b 0
+b 1
+b 325
+b 11
+b 14
+b 15
+b 17
+b 18
+b 35
+b 11
+b 3
+b 14
+b 1
+b 1
+b 5
+b 26
+b 27
+b 83
+b 84
+b 126
+b 83
+b 2
+b 122
+b 1
+b 1
+b 19
+b 21
+b 22
+b 24
+b 47
+b 48
+b 65
+b 47
+b 1
+b 62
+b 1
+b 0
+b 1
+b 65
+b 66
+b 78
+b 87
+b 64
+b 1
+b 85
+b 1
+b 1
+b 157
+b 170
+b 171
+b 170
+b 2
+b 155
+b 1
+b 30
+b 100
+b 99
+b 1
+b 31
+b 32
+b 48
+b 49
+b 26
+b 33
+b 34
+b 46
+b 45
+b 2
+b 20
+b 27
+b 17
+b 1
+b 23
+b 25
+b 27
+b 28
+b 39
+b 27
+b 1
+b 36
+b 1
+b 11
+b 55
+b 60
+b 61
+b 63
+b 55
+b 1
+b 58
+b 1
+b 0
+b 50
+b 8
+b 9
+b 17
+b 18
+b 94
+b 92
+b 1
+b 25
+b 26
+b 23
+b 2
+b 0
+b 2
+b 181
+b 54
+b 56
+b 58
+b 59
+b 59
+b 1
+b 31
+b 32
+b 46
+b 31
+b 2
+b 10
+b 9
+b 14
+b 15
+b 9
+b 1
+b 12
+b 1
+b 38
+b 40
+b 15
+b 4
+b 5
+b 37
+b 36
+b 1
+b 59
+b 174
+b 171
+b 1
+b 9
+b 10
+b 12
+b 13
+b 40
+b 9
+b 3
+b 34
+b 1
+b 0
+b 0
+b 1
+b 105
+b 103
+b 1
+b 4
+b 8
+b 9
+b 37
+b 38
+b 43
+b 8
+b 2
+b 35
+b 1
+b 368
+b 369
+b 379
+b 70
+b 71
+b 69
+b 1
+b 60
+b 58
+b 1
+b 125
+b 5
+b 15
+b 16
+b 15
+b 2
+b 3
+b 4
+b 2
+b 1
+b 720
+b 721
+b 733
+b 734
+b 742
+b 733
+b 2
+b 737
+b 1
+b 19
+b 4
+b 10
+b 8
+b 1
+b 0
+b 2
+b 144
+b 145
+b 155
+b 156
+b 165
+b 244
+b 153
+b 2
+b 163
+b 1
+b 56
+b 61
+b 97
+b 98
+b 100
+b 101
+b 105
+b 54
+b 2
+b 95
+b 3
+b 100
+b 1
+b 11
+b 12
+b 28
+b 29
+b 31
+b 33
+b 34
+b 36
+b 11
+b 2
+b 24
+b 2
+b 29
+b 2
+b 1
+b 168
+b 177
+b 178
+b 6
+b 210
+b 216
+b 217
+b 219
+b 216
+b 2
+b 34
+b 42
+b 32
+b 1
+b 52
+b 53
+b 71
+b 70
+b 2
+b 62
+b 63
+b 65
+b 67
+b 62
+b 2
+b 13
+b 14
+b 16
+b 70
+b 11
+b 2
+b 67
+b 1
+b 4
+b 66
+b 9
+b 11
+b 7
+b 1
+b 28
+b 29
+b 31
+b 32
+b 28
+b 3
+b 0
+b 2
+b 3
+b 8
+b 11
+b 12
+b 14
+b 0
+b 2
+b 6
+b 3
+b 9
+b 1
+b 2
+b 60
+b 11
+b 12
+b 15
+b 16
+b 27
+b 28
+b 30
+b 32
+b 34
+b 10
+b 1
+b 14
+b 2
+b 22
+b 2
+b 29
+b 1
+b 17
+b 31
+b 32
+b 36
+b 31
+b 2
+b 32
+b 1
+b 3
+b 5
+b 6
+b 5
+b 1
+b 15
+b 17
+b 25
+b 26
+b 28
+b 29
+b 41
+b 25
+b 3
+b 38
+b 1
+b 12
+b 1
+b 163
+b 178
+b 179
+b 178
+b 2
+b 160
+b 1
+b 22
+b 23
+b 21
+b 1
+b 27
+b 12
+b 10
+b 2
+b 45
+b 42
+b 1
+b 66
+b 240
+b 248
+b 259
+b 261
+b 262
+b 272
+b 239
+b 2
+b 244
+b 1
+b 143
+b 164
+b 165
+b 163
+b 1
+b 3
+b 3
+b 1
+b 33
+b 48
+b 49
+b 62
+b 308
+b 309
+b 311
+b 307
+b 1
+b 81
+b 101
+b 103
+b 103
+b 1
+b 28
+b 34
+b 36
+b 60
+b 61
+b 25
+b 1
+b 1
+b 0
+b 1
+b 156
+b 155
+b 1
+b 29
+b 74
+b 75
+b 52
+b 25
+b 33
+b 34
+b 31
+b 2
+b 25
+b 1
+b 0
+b 2
+b 1
+b 3
+b 69
+b 25
+b 26
+b 28
+b 23
+b 2
+b 26
+b 1
+b 6
+b 1
+b 287
+b 294
+b 295
+b 331
+b 332
+b 341
+b 331
+b 1
+b 338
+b 1
+b 36
+b 37
+b 43
+b 37
+b 1
+b 4
+b 3
+b 1
+b 56
+b 58
+b 59
+b 1
+b 120
+b 2
+b 3
+b 16
+b 15
+b 2
+b 1
+b 69
+b 69
+b 1
+b 14
+b 15
+b 13
+b 1
+b 0
+b 10
+b 11
+b 13
+b 37
+b 48
+b 49
+b 46
+b 2
+b 36
+b 1
+b 66
+b 313
+b 351
+b 352
+b 53
+b 11
+b 9
+b 2
+b 14
+b 16
+b 18
+b 19
+b 21
+b 22
+b 12
+b 1
+b 17
+b 3
+b 20
+b 22
+b 29
+b 28
+b 1
+b 8
+b 9
+b 8
+b 2
+b 5
+b 1
+b 144
+b 186
+b 187
+b 189
+b 190
+b 227
+b 186
+b 3
+b 7
+b 5
+b 2
+b 48
+b 46
+b 2
+b 21
+b 22
+b 19
+b 2
+b 7
+b 7
+b 1
+b 93
+b 122
+b 123
+b 125
+b 122
+b 2
+b 76
+b 762
+b 761
+b 1
+b 3
+b 5
+b 6
+b 0
+b 1
+b 0
+b 1
+b 30
+b 61
+b 67
+b 68
+b 70
+b 72
+b 85
+b 67
+b 2
+b 81
+b 2
+b 42
+b 57
+b 23
+b 22
+b 1
+b 120
+b 121
+b 168
+b 169
+b 180
+b 182
+b 118
+b 2
+b 167
+b 1
+b 17
+b 15
+b 1
+b 209
+b 219
+b 220
+b 232
+b 233
+b 249
+b 207
+b 1
+b 218
+b 1
+b 13
+b 10
+b 1
+b 3
+b 4
+b 10
+b 12
+b 3
+b 2
+b 6
+b 1
+b 14
+b 15
+b 17
+b 24
+b 80
+b 79
+b 2
+b 115
+b 112
+b 1
+b 62
+b 96
+b 95
+b 1
+b 6
+b 8
+b 9
+b 11
+b 12
+b 25
+b 29
+b 3
+b 9
+b 7
+b 2
+b 2
+b 1
+b 85
+b 102
+b 103
+b 83
+b 2
+b 100
+b 2
+b 28
+b 30
+b 31
+b 28
+b 2
+b 2
+b 49
+b 55
+b 56
+b 61
+b 62
+b 85
+b 93
+b 94
+b 61
+b 1
+b 90
+b 3
+b 51
+b 50
+b 2
+b 10
+b 11
+b 13
+b 14
+b 8
+b 2
+b 11
+b 1
+b 29
+b 8
+b 32
+b 48
+b 49
+b 136
+b 140
+b 192
+b 41
+b 383
+b 68
+b 70
+b 71
+b 84
+b 65
+b 1
+b 4
+b 2
+b 2
+b 192
+b 207
+b 192
+b 1
+b 204
+b 1
+b 6
+b 8
+b 9
+b 5
+b 19
+b 16
+b 1
+b 145
+b 146
+b 148
+b 159
+b 160
+b 162
+b 143
+b 2
+b 157
+b 2
+b 204
+b 206
+b 207
+b 204
+b 2
+b 5
+b 11
+b 12
+b 11
+b 2
+b 3
+b 55
+b 62
+b 111
+b 112
+b 114
+b 116
+b 117
+b 109
+b 2
+b 114
+b 1
+b 1
+b 0
+b 1
+b 49
+b 54
+b 55
+b 67
+b 76
+b 47
+b 1
+b 132
+b 134
+b 136
+b 138
+b 139
+b 189
+b 130
+b 1
+b 137
+b 2
+b 184
+b 1
+b 3
+b 6
+b 5
+b 1
+b 39
+b 40
+b 46
+b 47
+b 49
+b 39
+b 2
+b 54
+b 56
+b 58
+b 60
+b 52
+b 1
+b 59
+b 1
+b 235
+b 243
+b 244
+b 255
+b 256
+b 243
+b 1
+b 252
+b 2
+b 5
+b 13
+b 12
+b 1
+b 69
+b 39
+b 41
+b 42
+b 41
+b 1
+b 5
+b 6
+b 5
+b 2
+b 5
+b 5
+b 1
+b 118
+b 56
+b 58
+b 56
+b 1
+b 27
+b 28
+b 9
+b 0
+b 2
+b 10
+b 5
+b 32
+b 33
+b 50
+b 33
+b 1
+b 45
+b 1
+b 93
+b 95
+b 96
+b 93
+b 2
+b 23
+b 24
+b 26
+b 16
+b 45
+b 15
+b 1
+b 20
+b 22
+b 24
+b 25
+b 32
+b 33
+b 24
+b 2
+b 29
+b 1
+b 10
+b 66
+b 10
+b 11
+b 13
+b 15
+b 16
+b 46
+b 9
+b 1
+b 14
+b 2
+b 41
+b 2
+b 3
+b 9
+b 19
+b 21
+b 22
+b 48
+b 19
+b 2
+b 46
+b 1
+b 0
+b 2
+b 5
+b 6
+b 9
+b 8
+b 1
+b 60
+b 66
+b 1
+b 28
+b 30
+b 9
+b 41
+b 43
+b 44
+b 58
+b 41
+b 2
+b 14
+b 13
+b 2
+b 8
+b 288
+b 297
+b 298
+b 300
+b 301
+b 295
+b 2
+b 298
+b 2
+b 288
+b 1
+b 57
+b 70
+b 0
+b 1
+b 82
+b 84
+b 85
+b 87
+b 89
+b 82
+b 2
+b 87
+b 1
+b 34
+b 358
+b 440
+b 441
+b 466
+b 357
+b 1
+b 4
+b 3
+b 2
+b 7
+b 112
+b 114
+b 116
+b 112
+b 1
+b 37
+b 49
+b 50
+b 56
+b 58
+b 58
+b 1
+b 46
+b 1
+b 181
+b 190
+b 192
+b 193
+b 202
+b 221
+b 192
+b 1
+b 199
+b 2
+b 48
+b 50
+b 52
+b 54
+b 55
+b 57
+b 59
+b 60
+b 82
+b 91
+b 52
+b 2
+b 57
+b 2
+b 75
+b 1
+b 44
+b 41
+b 1
+b 75
+b 76
+b 75
+b 2
+b 9
+b 10
+b 12
+b 7
+b 2
+b 10
+b 1
+b 36
+b 44
+b 45
+b 42
+b 2
+b 35
+b 1
+b 144
+b 151
+b 152
+b 154
+b 151
+b 2
+b 60
+b 11
+b 0
+b 1
+b 7
+b 8
+b 54
+b 53
+b 1
+b 74
+b 80
+b 81
+b 88
+b 89
+b 99
+b 109
+b 88
+b 1
+b 96
+b 3
+b 103
+b 1
+b 26
+b 30
+b 86
+b 96
+b 98
+b 99
+b 85
+b 2
+b 94
+b 2
+b 136
+b 136
+b 1
+b 21
+b 23
+b 25
+b 26
+b 1
+b 0
+b 1
+b 45
+b 12
+b 13
+b 15
+b 17
+b 19
+b 20
+b 21
+b 15
+b 1
+b 15
+b 26
+b 28
+b 30
+b 31
+b 33
+b 32
+b 73
+b 0
+b 2
+b 3
+b 5
+b 7
+b 184
+b 1
+b 11
+b 98
+b 9
+b 19
+b 21
+b 22
+b 9
+b 1
+b 0
+b 1
+b 3
+b 0
+b 4
+b 1
+b 5
+b 7
+b 11
+b 13
+b 15
+b 16
+b 24
+b 11
+b 1
+b 53
+b 54
+b 56
+b 30
+b 40
+b 28
+b 3
+b 29
+b 7
+b 78
+b 80
+b 82
+b 83
+b 113
+b 81
+b 82
+b 112
+b 80
+b 1
+b 4
+b 5
+b 4
+b 2
+b 8
+b 6
+b 3
+b 2
+b 4
+b 5
+b 2
+b 2
+b 4
+b 4
+b 3
+b 1
+b 69
+b 74
+b 75
+b 73
+b 1
+b 3
+b 5
+b 86
+b 88
+b 90
+b 91
+b 97
+b 88
+b 2
+b 95
+b 1
+b 67
+b 69
+b 70
+b 72
+b 74
+b 65
+b 1
+b 16
+b 9
+b 6
+b 1
+b 194
+b 198
+b 52
+b 54
+b 55
+b 2
+b 3
+b 5
+b 2
+b 2
+b 6
+b 7
+b 17
+b 6
+b 2
+b 12
+b 1
+b 33
+b 39
+b 40
+b 30
+b 1
+b 75
+b 74
+b 1
+b 13
+b 14
+b 41
+b 12
+b 1
+b 77
+b 143
+b 144
+b 143
+b 2
+b 74
+b 1
+b 2
+b 3
+b 2
+b 1
+b 45
+b 30
+b 32
+b 34
+b 35
+b 55
+b 32
+b 2
+b 53
+b 1
+b 81
+b 130
+b 130
+b 1
+b 39
+b 40
+b 42
+b 43
+b 42
+b 2
+b 53
+b 52
+b 1
+b 248
+b 250
+b 251
+b 323
+b 324
+b 355
+b 356
+b 369
+b 371
+b 250
+b 1
+b 320
+b 2
+b 352
+b 2
+b 25
+b 69
+b 71
+b 1
+b 2
+b 52
+b 28
+b 6
+b 7
+b 0
+b 2
+b 3
+b 57
+b 56
+b 75
+b 76
+b 78
+b 80
+b 54
+b 1
+b 74
+b 2
+b 252
+b 254
+b 256
+b 258
+b 259
+b 267
+b 268
+b 270
+b 271
+b 256
+b 2
+b 265
+b 3
+b 3
+b 10
+b 15
+b 16
+b 33
+b 34
+b 15
+b 2
+b 29
+b 2
+b 14
+b 214
+b 230
+b 64
+b 66
+b 61
+b 1
+b 4
+b 6
+b 7
+b 10
+b 11
+b 4
+b 2
+b 0
+b 1
+b 8
+b 3
+b 5
+b 7
+b 8
+b 4
+b 8
+b 17
+b 18
+b 22
+b 24
+b 17
+b 2
+b 485
+b 120
+b 121
+b 123
+b 120
+b 2
+b 5
+b 5
+b 1
+b 63
+b 2
+b 8
+b 10
+b 2
+b 1
+b 5
+b 1
+b 19
+b 3
+b 5
+b 6
+b 12
+b 3
+b 2
+b 10
+b 1
+b 2
+b 4
+b 5
+b 4
+b 1
+b 16
+b 10
+b 11
+b 15
+b 16
+b 32
+b 9
+b 1
+b 14
+b 2
+b 117
+b 34
+b 33
+b 2
+b 127
+b 129
+b 131
+b 132
+b 134
+b 129
+b 2
+b 40
+b 42
+b 43
+b 45
+b 94
+b 96
+b 97
+b 0
+b 2
+b 34
+b 35
+b 47
+b 34
+b 1
+b 59
+b 58
+b 2
+b 6
+b 8
+b 9
+b 8
+b 3
+b 42
+b 50
+b 51
+b 39
+b 1
+b 4
+b 2
+b 2
+b 4
+b 203
+b 211
+b 212
+b 208
+b 1
+b 74
+b 80
+b 72
+b 1
+b 18
+b 4
+b 6
+b 7
+b 9
+b 2
+b 1
+b 8
+b 1
+b 12
+b 23
+b 24
+b 32
+b 72
+b 23
+b 2
+b 27
+b 1
+b 183
+b 200
+b 206
+b 207
+b 181
+b 3
+b 194
+b 1
+b 119
+b 11
+b 9
+b 2
+b 45
+b 46
+b 51
+b 89
+b 91
+b 8
+b 14
+b 15
+b 24
+b 14
+b 1
+b 21
+b 2
+b 27
+b 185
+b 194
+b 195
+b 225
+b 20
+b 9
+b 10
+b 19
+b 30
+b 31
+b 9
+b 1
+b 16
+b 2
+b 13
+b 34
+b 35
+b 41
+b 43
+b 47
+b 48
+b 34
+b 2
+b 37
+b 1
+b 71
+b 71
+b 1
+b 12
+b 14
+b 41
+b 42
+b 0
+b 186
+b 184
+b 1
+b 12
+b 61
+b 75
+b 59
+b 2
+b 112
+b 113
+b 115
+b 132
+b 112
+b 2
+b 11
+b 9
+b 1
+b 23
+b 57
+b 58
+b 70
+b 72
+b 73
+b 75
+b 56
+b 1
+b 8
+b 15
+b 17
+b 18
+b 32
+b 15
+b 2
+b 132
+b 131
+b 1
+b 0
+b 28
+b 29
+b 31
+b 37
+b 38
+b 25
+b 1
+b 32
+b 1
+b 3
+b 26
+b 33
+b 34
+b 36
+b 37
+b 24
+b 1
+b 32
+b 3
+b 3
+b 5
+b 85
+b 90
+b 91
+b 93
+b 95
+b 21
+b 20
+b 1
+b 62
+b 60
+b 1
+b 5
+b 11
+b 12
+b 30
+b 11
+b 1
+b 38
+b 6
+b 7
+b 4
+b 2
+b 0
+b 2
+b 0
+b 1
+b 2
+b 4
+b 5
+b 2
+b 2
+b 96
+b 7
+b 4
+b 1
+b 15
+b 24
+b 25
+b 27
+b 28
+b 15
+b 1
+b 21
+b 2
+b 24
+b 1
+b 28
+b 29
+b 31
+b 4
+b 96
+b 98
+b 99
+b 98
+b 2
+b 93
+b 1
+b 14
+b 15
+b 19
+b 13
+b 1
+b 1
+b 2
+b 1
+b 2
+b 48
+b 50
+b 50
+b 1
+b 9
+b 10
+b 12
+b 14
+b 8
+b 1
+b 79
+b 6
+b 7
+b 22
+b 23
+b 21
+b 1
+b 4
+b 3
+b 1
+b 7
+b 5
+b 3
+b 87
+b 88
+b 90
+b 126
+b 211
+b 74
+b 94
+b 15
+b 14
+b 1
+b 57
+b 11
+b 13
+b 14
+b 13
+b 1
+b 4
+b 2
+b 2
+b 75
+b 72
+b 1
+b 16
+b 17
+b 25
+b 16
+b 1
+b 9
+b 13
+b 14
+b 11
+b 2
+b 8
+b 1
+b 13
+b 2
+b 3
+b 2
+b 1
+b 42
+b 43
+b 45
+b 41
+b 1
+b 81
+b 82
+b 97
+b 80
+b 1
+b 56
+b 63
+b 69
+b 70
+b 72
+b 74
+b 75
+b 85
+b 68
+b 1
+b 73
+b 2
+b 79
+b 1
+b 248
+b 114
+b 115
+b 50
+b 16
+b 23
+b 29
+b 30
+b 27
+b 2
+b 3
+b 3
+b 1
+b 1
+b 2
+b 22
+b 28
+b 57
+b 58
+b 28
+b 1
+b 56
+b 1
+b 159
+b 160
+b 162
+b 159
+b 2
+b 4
+b 2
+b 2
+b 12
+b 95
+b 97
+b 2
+b 3
+b 5
+b 6
+b 8
+b 20
+b 19
+b 21
+b 33
+b 34
+b 50
+b 52
+b 21
+b 1
+b 29
+b 1
+b 76
+b 77
+b 88
+b 89
+b 91
+b 75
+b 1
+b 2
+b 2
+b 1
+b 21
+b 39
+b 40
+b 42
+b 44
+b 46
+b 113
+b 124
+b 125
+b 131
+b 133
+b 124
+b 2
+b 127
+b 1
+b 110
+b 1
+b 30
+b 44
+b 45
+b 29
+b 2
+b 49
+b 135
+b 10
+b 12
+b 14
+b 15
+b 33
+b 12
+b 2
+b 30
+b 2
+b 31
+b 32
+b 34
+b 43
+b 31
+b 2
+b 39
+b 3
+b 3
+b 4
+b 9
+b 10
+b 2
+b 1
+b 13
+b 17
+b 19
+b 21
+b 22
+b 24
+b 26
+b 28
+b 15
+b 1
+b 20
+b 2
+b 43
+b 20
+b 4
+b 96
+b 97
+b 99
+b 107
+b 96
+b 2
+b 103
+b 2
+b 89
+b 94
+b 102
+b 103
+b 111
+b 112
+b 116
+b 102
+b 2
+b 108
+b 1
+b 87
+b 1
+b 33
+b 32
+b 2
+b 7
+b 8
+b 1
+b 18
+b 17
+b 1
+b 43
+b 45
+b 61
+b 68
+b 69
+b 26
+b 112
+b 25
+b 27
+b 28
+b 27
+b 2
+b 6
+b 7
+b 4
+b 2
+b 23
+b 22
+b 1
+b 87
+b 89
+b 91
+b 93
+b 94
+b 93
+b 1
+b 8
+b 24
+b 46
+b 48
+b 49
+b 93
+b 25
+b 24
+b 1
+b 1
+b 3
+b 5
+b 7
+b 86
+b 88
+b 89
+b 27
+b 29
+b 36
+b 60
+b 0
+b 2
+b 4
+b 6
+b 7
+b 14
+b 2
+b 1
+b 159
+b 181
+b 183
+b 184
+b 186
+b 181
+b 2
+b 181
+b 1
+b 93
+b 90
+b 1
+b 138
+b 1
+b 23
+b 4
+b 45
+b 47
+b 43
+b 1
+b 3
+b 13
+b 15
+b 16
+b 13
+b 2
+b 27
+b 40
+b 41
+b 47
+b 38
+b 2
+b 26
+b 1
+b 5
+b 5
+b 1
+b 97
+b 123
+b 124
+b 126
+b 123
+b 2
+b 34
+b 36
+b 32
+b 1
+b 81
+b 82
+b 92
+b 79
+b 2
+b 1
+b 3
+b 10
+b 11
+b 22
+b 23
+b 34
+b 4
+b 5
+b 12
+b 4
+b 1
+b 2
+b 45
+b 47
+b 57
+b 58
+b 60
+b 43
+b 1
+b 56
+b 2
+b 402
+b 450
+b 451
+b 455
+b 401
+b 1
+b 37
+b 38
+b 36
+b 1
+b 19
+b 21
+b 22
+b 24
+b 26
+b 21
+b 2
+b 42
+b 98
+b 97
+b 1
+b 22
+b 21
+b 1
+b 2
+b 4
+b 6
+b 16
+b 105
+b 117
+b 118
+b 122
+b 121
+b 2
+b 27
+b 28
+b 25
+b 2
+b 1
+b 0
+b 1
+b 550
+b 551
+b 559
+b 635
+b 550
+b 2
+b 555
+b 2
+b 629
+b 1
+b 2
+b 3
+b 14
+b 0
+b 2
+b 22
+b 23
+b 25
+b 32
+b 77
+b 21
+b 1
+b 76
+b 1
+b 12
+b 20
+b 21
+b 23
+b 38
+b 37
+b 1
+b 103
+b 116
+b 117
+b 116
+b 2
+b 100
+b 1
+b 42
+b 16
+b 17
+b 19
+b 20
+b 16
+b 3
+b 1
+b 5
+b 4
+b 1
+b 29
+b 42
+b 43
+b 42
+b 1
+b 6
+b 7
+b 13
+b 6
+b 2
+b 9
+b 1
+b 39
+b 48
+b 49
+b 45
+b 1
+b 39
+b 1
+b 0
+b 1
+b 94
+b 117
+b 118
+b 117
+b 2
+b 92
+b 1
+b 36
+b 37
+b 43
+b 34
+b 2
+b 40
+b 1
+b 82
+b 80
+b 2
+b 13
+b 0
+b 2
+b 3
+b 5
+b 19
+b 5
+b 1
+b 47
+b 46
+b 1
+b 16
+b 17
+b 25
+b 16
+b 2
+b 20
+b 1
+b 175
+b 197
+b 198
+b 204
+b 205
+b 1
+b 176
+b 178
+b 179
+b 188
+b 189
+b 210
+b 212
+b 187
+b 1
+b 211
+b 1
+b 94
+b 95
+b 97
+b 126
+b 94
+b 2
+b 122
+b 1
+b 25
+b 29
+b 0
+b 5
+b 14
+b 15
+b 19
+b 83
+b 85
+b 87
+b 88
+b 14
+b 2
+b 83
+b 2
+b 15
+b 1
+b 3
+b 133
+b 134
+b 136
+b 4
+b 84
+b 91
+b 92
+b 94
+b 94
+b 1
+b 88
+b 1
+b 685
+b 7
+b 9
+b 11
+b 7
+b 1
+b 46
+b 54
+b 55
+b 57
+b 110
+b 111
+b 118
+b 52
+b 2
+b 108
+b 1
+b 45
+b 1
+b 367
+b 368
+b 372
+b 444
+b 71
+b 66
+b 74
+b 75
+b 77
+b 78
+b 64
+b 1
+b 73
+b 3
+b 24
+b 25
+b 22
+b 2
+b 16
+b 20
+b 24
+b 25
+b 31
+b 15
+b 31
+b 118
+b 120
+b 121
+b 120
+b 1
+b 0
+b 1
+b 0
+b 2
+b 165
+b 171
+b 170
+b 2
+b 27
+b 46
+b 47
+b 49
+b 84
+b 85
+b 106
+b 123
+b 46
+b 2
+b 80
+b 2
+b 118
+b 2
+b 92
+b 94
+b 96
+b 97
+b 96
+b 1
+b 45
+b 51
+b 50
+b 2
+b 32
+b 7
+b 8
+b 10
+b 7
+b 2
+b 3
+b 9
+b 1
+b 2
+b 12
+b 24
+b 25
+b 30
+b 31
+b 39
+b 40
+b 30
+b 2
+b 0
+b 28
+b 81
+b 4
+b 5
+b 7
+b 4
+b 2
+b 4
+b 5
+b 7
+b 7
+b 1
+b 43
+b 21
+b 28
+b 29
+b 45
+b 46
+b 27
+b 1
+b 44
+b 2
+b 19
+b 21
+b 17
+b 1
+b 65
+b 72
+b 73
+b 75
+b 64
+b 2
+b 69
+b 1
+b 603
+b 17
+b 29
+b 10
+b 24
+b 26
+b 27
+b 29
+b 24
+b 2
+b 27
+b 1
+b 64
+b 92
+b 96
+b 97
+b 63
+b 1
+b 81
+b 34
+b 35
+b 43
+b 44
+b 43
+b 1
+b 4
+b 6
+b 2
+b 1
+b 74
+b 155
+b 76
+b 130
+b 131
+b 128
+b 2
+b 76
+b 1
+b 1
+b 3
+b 5
+b 30
+b 31
+b 33
+b 28
+b 2
+b 31
+b 1
+b 9
+b 10
+b 12
+b 39
+b 9
+b 2
+b 171
+b 194
+b 195
+b 197
+b 199
+b 201
+b 203
+b 197
+b 1
+b 152
+b 169
+b 170
+b 194
+b 169
+b 1
+b 57
+b 55
+b 1
+b 5
+b 14
+b 15
+b 17
+b 25
+b 24
+b 1
+b 80
+b 81
+b 80
+b 1
+b 37
+b 38
+b 58
+b 38
+b 1
+b 81
+b 113
+b 125
+b 126
+b 128
+b 111
+b 1
+b 124
+b 2
+b 6
+b 19
+b 21
+b 15
+b 17
+b 19
+b 20
+b 22
+b 15
+b 1
+b 6
+b 8
+b 10
+b 11
+b 17
+b 19
+b 10
+b 1
+b 102
+b 110
+b 111
+b 113
+b 109
+b 1
+b 35
+b 37
+b 38
+b 46
+b 47
+b 56
+b 33
+b 1
+b 36
+b 1
+b 5
+b 674
+b 15
+b 16
+b 14
+b 1
+b 5
+b 159
+b 157
+b 2
+b 77
+b 79
+b 80
+b 92
+b 79
+b 2
+b 87
+b 1
+b 22
+b 14
+b 15
+b 17
+b 14
+b 2
+b 4
+b 3
+b 1
+b 113
+b 123
+b 124
+b 42
+b 43
+b 41
+b 1
+b 57
+b 59
+b 60
+b 62
+b 6
+b 8
+b 9
+b 11
+b 55
+b 54
+b 1
+b 105
+b 123
+b 104
+b 1
+b 110
+b 131
+b 22
+b 23
+b 16
+b 27
+b 28
+b 36
+b 26
+b 1
+b 101
+b 99
+b 1
+b 143
+b 141
+b 2
+b 27
+b 29
+b 30
+b 32
+b 34
+b 36
+b 29
+b 2
+b 86
+b 85
+b 1
+b 103
+b 105
+b 107
+b 108
+b 110
+b 6
+b 10
+b 16
+b 17
+b 9
+b 2
+b 12
+b 3
+b 0
+b 2
+b 4
+b 6
+b 8
+b 0
+b 1
+b 126
+b 139
+b 140
+b 142
+b 143
+b 142
+b 2
+b 96
+b 1
+b 155
+b 29
+b 68
+b 69
+b 71
+b 72
+b 133
+b 137
+b 28
+b 2
+b 64
+b 2
+b 133
+b 1
+b 11
+b 0
+b 2
+b 4
+b 5
+b 7
+b 14
+b 2
+b 2
+b 11
+b 2
+b 29
+b 18
+b 20
+b 21
+b 20
+b 1
+b 4
+b 1
+b 3
+b 1
+b 3
+b 1
+b 9
+b 13
+b 0
+b 2
+b 3
+b 2
+b 1
+b 50
+b 50
+b 1
+b 19
+b 31
+b 32
+b 34
+b 31
+b 2
+b 5
+b 98
+b 20
+b 21
+b 17
+b 1
+b 26
+b 27
+b 29
+b 24
+b 2
+b 27
+b 1
+b 63
+b 61
+b 1
+b 15
+b 17
+b 18
+b 20
+b 22
+b 24
+b 17
+b 2
+b 135
+b 137
+b 135
+b 1
+b 0
+b 2
+b 5
+b 6
+b 22
+b 26
+b 28
+b 29
+b 31
+b 32
+b 41
+b 24
+b 1
+b 27
+b 3
+b 98
+b 4
+b 5
+b 10
+b 4
+b 1
+b 7
+b 2
+b 11
+b 12
+b 8
+b 56
+b 4
+b 5
+b 43
+b 73
+b 74
+b 76
+b 4
+b 2
+b 39
+b 2
+b 15
+b 13
+b 1
+b 17
+b 19
+b 60
+b 61
+b 61
+b 1
+b 51
+b 65
+b 66
+b 68
+b 50
+b 1
+b 10
+b 55
+b 57
+b 57
+b 1
+b 43
+b 44
+b 46
+b 47
+b 54
+b 91
+b 43
+b 3
+b 87
+b 2
+b 82
+b 3
+b 4
+b 11
+b 12
+b 20
+b 2
+b 1
+b 17
+b 1
+b 6
+b 70
+b 71
+b 73
+b 74
+b 80
+b 82
+b 70
+b 3
+b 79
+b 1
+b 3
+b 1
+b 40
+b 32
+b 31
+b 1
+b 2
+b 4
+b 5
+b 79
+b 84
+b 91
+b 92
+b 107
+b 90
+b 1
+b 105
+b 2
+b 86
+b 87
+b 89
+b 91
+b 124
+b 125
+b 84
+b 2
+b 122
+b 1
+b 89
+b 1
+b 118
+b 128
+b 129
+b 136
+b 145
+b 147
+b 148
+b 160
+b 161
+b 145
+b 2
+b 158
+b 2
+b 36
+b 36
+b 1
+b 39
+b 40
+b 54
+b 55
+b 39
+b 2
+b 50
+b 2
+b 9
+b 11
+b 17
+b 18
+b 11
+b 8
+b 1
+b 30
+b 108
+b 114
+b 115
+b 117
+b 162
+b 163
+b 107
+b 2
+b 110
+b 2
+b 1
+b 4
+b 5
+b 6
+b 3
+b 1
+b 0
+b 2
+b 3
+b 5
+b 7
+b 0
+b 2
+b 0
+b 87
+b 4
+b 22
+b 24
+b 22
+b 1
+b 24
+b 26
+b 27
+b 29
+b 22
+b 1
+b 408
+b 136
+b 137
+b 4
+b 5
+b 10
+b 4
+b 1
+b 7
+b 1
+b 37
+b 5
+b 7
+b 10
+b 5
+b 1
+b 10
+b 73
+b 74
+b 217
+b 218
+b 239
+b 10
+b 1
+b 71
+b 1
+b 262
+b 7
+b 9
+b 11
+b 7
+b 1
+b 131
+b 137
+b 138
+b 178
+b 179
+b 209
+b 213
+b 136
+b 1
+b 177
+b 2
+b 204
+b 1
+b 18
+b 17
+b 1
+b 100
+b 107
+b 108
+b 110
+b 111
+b 107
+b 3
+b 97
+b 1
+b 0
+b 497
+b 755
+b 768
+b 769
+b 496
+b 2
+b 766
+b 1
+b 31
+b 35
+b 49
+b 51
+b 52
+b 74
+b 49
+b 2
+b 72
+b 1
+b 724
+b 744
+b 722
+b 1
+b 743
+b 1
+b 35
+b 35
+b 1
+b 10
+b 12
+b 13
+b 37
+b 38
+b 10
+b 2
+b 11
+b 23
+b 25
+b 26
+b 28
+b 30
+b 31
+b 23
+b 2
+b 28
+b 2
+b 4
+b 6
+b 2
+b 1
+b 9
+b 6
+b 1
+b 8
+b 7
+b 1
+b 2
+b 3
+b 17
+b 0
+b 2
+b 44
+b 8
+b 10
+b 11
+b 16
+b 10
+b 1
+b 13
+b 2
+b 22
+b 21
+b 1
+b 25
+b 26
+b 58
+b 25
+b 2
+b 54
+b 1
+b 2
+b 5
+b 7
+b 8
+b 10
+b 7
+b 2
+b 125
+b 148
+b 149
+b 151
+b 148
+b 2
+b 63
+b 71
+b 72
+b 74
+b 76
+b 71
+b 2
+b 0
+b 1
+b 1
+b 97
+b 96
+b 1
+b 35
+b 36
+b 33
+b 2
+b 6
+b 3
+b 4
+b 16
+b 4
+b 1
+b 162
+b 171
+b 160
+b 1
+b 84
+b 85
+b 82
+b 2
+b 8
+b 7
+b 1
+b 34
+b 44
+b 45
+b 6
+b 8
+b 6
+b 1
+b 23
+b 30
+b 31
+b 28
+b 2
+b 22
+b 1
+b 51
+b 32
+b 31
+b 2
+b 41
+b 47
+b 48
+b 63
+b 65
+b 66
+b 80
+b 82
+b 46
+b 1
+b 64
+b 2
+b 75
+b 1
+b 133
+b 135
+b 136
+b 135
+b 2
+b 130
+b 1
+b 4
+b 5
+b 53
+b 2
+b 2
+b 51
+b 1
+b 24
+b 25
+b 23
+b 1
+b 35
+b 36
+b 63
+b 64
+b 35
+b 2
+b 58
+b 1
+b 2
+b 7
+b 84
+b 86
+b 153
+b 154
+b 156
+b 157
+b 86
+b 1
+b 150
+b 2
+b 153
+b 1
+b 21
+b 9
+b 18
+b 19
+b 53
+b 23
+b 40
+b 42
+b 53
+b 54
+b 56
+b 42
+b 1
+b 51
+b 1
+b 20
+b 179
+b 180
+b 182
+b 184
+b 184
+b 1
+b 34
+b 33
+b 32
+b 1
+b 44
+b 42
+b 2
+b 17
+b 5
+b 6
+b 16
+b 5
+b 2
+b 50
+b 48
+b 3
+b 4
+b 2
+b 1
+b 81
+b 82
+b 81
+b 1
+b 4
+b 0
+b 2
+b 135
+b 145
+b 146
+b 46
+b 47
+b 49
+b 46
+b 2
+b 1
+b 7
+b 6
+b 1
+b 117
+b 40
+b 45
+b 46
+b 54
+b 45
+b 1
+b 100
+b 99
+b 2
+b 24
+b 12
+b 13
+b 15
+b 11
+b 1
+b 60
+b 115
+b 114
+b 2
+b 19
+b 20
+b 22
+b 33
+b 19
+b 2
+b 78
+b 79
+b 81
+b 83
+b 78
+b 2
+b 4
+b 5
+b 4
+b 2
+b 42
+b 39
+b 1
+b 53
+b 73
+b 50
+b 1
+b 13
+b 14
+b 24
+b 11
+b 2
+b 103
+b 122
+b 126
+b 127
+b 129
+b 122
+b 1
+b 68
+b 79
+b 85
+b 87
+b 88
+b 90
+b 99
+b 83
+b 1
+b 78
+b 1
+b 78
+b 80
+b 81
+b 2
+b 54
+b 53
+b 1
+b 186
+b 186
+b 1
+b 127
+b 128
+b 130
+b 127
+b 2
+b 1
+b 72
+b 71
+b 2
+b 0
+b 15
+b 16
+b 18
+b 20
+b 15
+b 2
+b 32
+b 61
+b 63
+b 64
+b 104
+b 31
+b 2
+b 59
+b 2
+b 5
+b 13
+b 14
+b 2
+b 1
+b 1
+b 1
+b 8
+b 14
+b 15
+b 17
+b 12
+b 2
+b 7
+b 1
+b 2
+b 0
+b 1
+b 27
+b 48
+b 59
+b 46
+b 1
+b 27
+b 1
+b 4
+b 5
+b 6
+b 8
+b 0
+b 1
+b 6
+b 35
+b 61
+b 62
+b 70
+b 61
+b 1
+b 60
+b 100
+b 101
+b 99
+b 1
+b 8
+b 1
+b 2
+b 6
+b 1
+b 2
+b 2
+b 1
+b 3
+b 42
+b 43
+b 64
+b 65
+b 42
+b 1
+b 61
+b 2
+b 62
+b 1
+b 4
+b 338
+b 339
+b 410
+b 59
+b 58
+b 2
+b 0
+b 1
+b 0
+b 1
+b 43
+b 45
+b 47
+b 48
+b 66
+b 68
+b 45
+b 2
+b 66
+b 1
+b 93
+b 91
+b 1
+b 4
+b 5
+b 7
+b 11
+b 2
+b 2
+b 106
+b 134
+b 133
+b 1
+b 65
+b 104
+b 130
+b 131
+b 133
+b 63
+b 3
+b 98
+b 1
+b 25
+b 27
+b 28
+b 30
+b 31
+b 43
+b 27
+b 3
+b 40
+b 1
+b 62
+b 64
+b 60
+b 1
+b 51
+b 35
+b 33
+b 2
+b 152
+b 154
+b 155
+b 165
+b 185
+b 187
+b 188
+b 152
+b 2
+b 185
+b 2
+b 134
+b 11
+b 10
+b 2
+b 102
+b 100
+b 3
+b 5
+b 4
+b 1
+b 1
+b 2
+b 8
+b 1
+b 1
+b 1
+b 19
+b 26
+b 27
+b 33
+b 23
+b 1
+b 113
+b 113
+b 1
+b 21
+b 28
+b 29
+b 38
+b 39
+b 45
+b 38
+b 1
+b 11
+b 16
+b 17
+b 19
+b 20
+b 35
+b 10
+b 2
+b 13
+b 1
+b 60
+b 72
+b 47
+b 48
+b 76
+b 77
+b 47
+b 2
+b 72
+b 2
+b 9
+b 7
+b 1
+b 42
+b 28
+b 87
+b 88
+b 93
+b 94
+b 85
+b 2
+b 91
+b 1
+b 27
+b 1
+b 3
+b 9
+b 3
+b 2
+b 1
+b 3
+b 4
+b 5
+b 30
+b 31
+b 181
+b 180
+b 1
+b 16
+b 14
+b 1
+b 71
+b 14
+b 15
+b 17
+b 19
+b 14
+b 2
+b 10
+b 8
+b 2
+b 13
+b 20
+b 8
+b 14
+b 15
+b 3
+b 4
+b 15
+b 16
+b 3
+b 2
+b 10
+b 1
+b 0
+b 34
+b 32
+b 2
+b 3
+b 19
+b 20
+b 25
+b 27
+b 20
+b 1
+b 41
+b 50
+b 51
+b 71
+b 72
+b 104
+b 71
+b 2
+b 3
+b 5
+b 7
+b 8
+b 17
+b 18
+b 24
+b 5
+b 2
+b 15
+b 2
+b 18
+b 1
+b 34
+b 54
+b 60
+b 60
+b 1
+b 4
+b 5
+b 7
+b 191
+b 193
+b 203
+b 204
+b 2
+b 4
+b 199
+b 1
+b 93
+b 94
+b 96
+b 97
+b 106
+b 105
+b 2
+b 21
+b 8
+b 26
+b 41
+b 42
+b 16
+b 1
+b 51
+b 57
+b 59
+b 65
+b 66
+b 68
+b 69
+b 71
+b 73
+b 74
+b 55
+b 1
+b 64
+b 3
+b 50
+b 1
+b 4
+b 68
+b 72
+b 12
+b 13
+b 7
+b 6
+b 1
+b 131
+b 144
+b 145
+b 147
+b 149
+b 150
+b 158
+b 144
+b 2
+b 129
+b 1
+b 62
+b 64
+b 65
+b 64
+b 2
+b 3
+b 4
+b 2
+b 1
+b 0
+b 7
+b 180
+b 179
+b 2
+b 10
+b 12
+b 7
+b 1
+b 311
+b 316
+b 317
+b 319
+b 320
+b 322
+b 316
+b 3
+b 308
+b 1
+b 71
+b 201
+b 208
+b 209
+b 211
+b 213
+b 215
+b 216
+b 252
+b 199
+b 3
+b 204
+b 3
+b 292
+b 5
+b 7
+b 2
+b 1
+b 11
+b 13
+b 15
+b 16
+b 18
+b 13
+b 2
+b 132
+b 138
+b 139
+b 23
+b 24
+b 26
+b 28
+b 22
+b 1
+b 27
+b 1
+b 6
+b 6
+b 1
+b 20
+b 18
+b 2
+b 10
+b 8
+b 0
+b 1
+b 3
+b 4
+b 6
+b 3
+b 3
+b 44
+b 46
+b 46
+b 1
+b 21
+b 22
+b 21
+b 2
+b 8
+b 9
+b 30
+b 31
+b 7
+b 1
+b 33
+b 52
+b 78
+b 79
+b 50
+b 1
+b 77
+b 2
+b 19
+b 20
+b 30
+b 18
+b 1
+b 5
+b 13
+b 70
+b 71
+b 77
+b 195
+b 194
+b 1
+b 499
+b 537
+b 539
+b 540
+b 550
+b 552
+b 553
+b 498
+b 2
+b 535
+b 2
+b 24
+b 14
+b 11
+b 1
+b 0
+b 1
+b 6
+b 10
+b 5
+b 1
+b 48
+b 46
+b 2
+b 1
+b 7
+b 8
+b 14
+b 7
+b 1
+b 61
+b 62
+b 64
+b 65
+b 67
+b 69
+b 74
+b 59
+b 2
+b 62
+b 2
+b 42
+b 41
+b 1
+b 57
+b 54
+b 1
+b 69
+b 5
+b 6
+b 64
+b 66
+b 67
+b 73
+b 3
+b 2
+b 62
+b 2
+b 41
+b 44
+b 45
+b 55
+b 40
+b 4
+b 22
+b 24
+b 25
+b 27
+b 24
+b 2
+b 14
+b 16
+b 17
+b 36
+b 37
+b 52
+b 33
+b 1
+b 18
+b 16
+b 2
+b 38
+b 39
+b 41
+b 56
+b 38
+b 2
+b 10
+b 43
+b 44
+b 44
+b 1
+b 2
+b 3
+b 17
+b 2
+b 2
+b 32
+b 52
+b 51
+b 1
+b 32
+b 30
+b 2
+b 132
+b 148
+b 163
+b 164
+b 146
+b 1
+b 162
+b 2
+b 131
+b 1
+b 1
+b 2
+b 6
+b 0
+b 1
+b 32
+b 34
+b 34
+b 1
+b 0
+b 1
+b 13
+b 13
+b 1
+b 41
+b 39
+b 2
+b 80
+b 15
+b 16
+b 18
+b 25
+b 13
+b 2
+b 0
+b 244
+b 241
+b 1
+b 112
+b 113
+b 111
+b 1
+b 48
+b 18
+b 33
+b 56
+b 57
+b 56
+b 2
+b 16
+b 1
+b 16
+b 17
+b 16
+b 2
+b 10
+b 9
+b 1
+b 65
+b 66
+b 68
+b 159
+b 163
+b 164
+b 189
+b 65
+b 2
+b 159
+b 2
+b 156
+b 1
+b 49
+b 49
+b 1
+b 34
+b 36
+b 37
+b 39
+b 42
+b 43
+b 52
+b 34
+b 2
+b 134
+b 133
+b 1
+b 5
+b 112
+b 113
+b 110
+b 2
+b 5
+b 1
+b 4
+b 5
+b 4
+b 2
+b 148
+b 150
+b 152
+b 154
+b 150
+b 1
+b 10
+b 17
+b 18
+b 16
+b 1
+b 22
+b 23
+b 33
+b 22
+b 2
+b 87
+b 88
+b 90
+b 91
+b 85
+b 2
+b 88
+b 2
+b 13
+b 15
+b 11
+b 1
+b 25
+b 25
+b 1
+b 41
+b 40
+b 1
+b 3
+b 18
+b 19
+b 26
+b 41
+b 50
+b 39
+b 1
+b 2
+b 3
+b 2
+b 1
+b 45
+b 3
+b 62
+b 64
+b 66
+b 68
+b 69
+b 64
+b 1
+b 54
+b 7
+b 15
+b 22
+b 23
+b 14
+b 2
+b 58
+b 59
+b 83
+b 88
+b 89
+b 82
+b 2
+b 81
+b 12
+b 67
+b 69
+b 70
+b 81
+b 82
+b 67
+b 2
+b 79
+b 2
+b 7
+b 6
+b 1
+b 4
+b 7
+b 8
+b 14
+b 7
+b 2
+b 10
+b 1
+b 11
+b 84
+b 96
+b 97
+b 96
+b 2
+b 81
+b 1
+b 2
+b 0
+b 1
+b 77
+b 24
+b 25
+b 2
+b 3
+b 5
+b 7
+b 2
+b 2
+b 108
+b 109
+b 117
+b 118
+b 145
+b 146
+b 177
+b 106
+b 2
+b 115
+b 2
+b 140
+b 1
+b 3
+b 0
+b 1
+b 442
+b 4
+b 10
+b 11
+b 13
+b 15
+b 16
+b 13
+b 2
+b 0
+b 2
+b 0
+b 1
+b 115
+b 113
+b 1
+b 9
+b 10
+b 16
+b 9
+b 1
+b 142
+b 173
+b 174
+b 212
+b 25
+b 23
+b 1
+b 4
+b 5
+b 9
+b 10
+b 4
+b 2
+b 0
+b 2
+b 0
+b 5
+b 7
+b 8
+b 10
+b 12
+b 5
+b 2
+b 29
+b 38
+b 37
+b 1
+b 167
+b 168
+b 170
+b 183
+b 257
+b 256
+b 2
+b 164
+b 1
+b 1
+b 2
+b 0
+b 1
+b 27
+b 28
+b 32
+b 25
+b 35
+b 68
+b 77
+b 82
+b 83
+b 85
+b 86
+b 88
+b 82
+b 3
+b 66
+b 1
+b 93
+b 6
+b 12
+b 34
+b 36
+b 77
+b 78
+b 80
+b 82
+b 83
+b 85
+b 82
+b 2
+b 19
+b 21
+b 17
+b 1
+b 2
+b 2
+b 3
+b 15
+b 17
+b 18
+b 1
+b 1
+b 16
+b 3
+b 0
+b 2
+b 4
+b 0
+b 1
+b 199
+b 23
+b 25
+b 26
+b 25
+b 2
+b 4
+b 49
+b 2
+b 1
+b 1
+b 6
+b 0
+b 1
+b 58
+b 66
+b 67
+b 69
+b 71
+b 72
+b 69
+b 2
+b 30
+b 50
+b 48
+b 2
+b 4
+b 5
+b 7
+b 8
+b 10
+b 18
+b 7
+b 2
+b 14
+b 3
+b 2
+b 1
+b 141
+b 143
+b 144
+b 151
+b 141
+b 2
+b 3
+b 1
+b 1
+b 87
+b 88
+b 87
+b 2
+b 104
+b 105
+b 104
+b 2
+b 45
+b 62
+b 61
+b 1
+b 5
+b 2
+b 1
+b 19
+b 32
+b 15
+b 16
+b 18
+b 20
+b 14
+b 1
+b 19
+b 1
+b 206
+b 218
+b 112
+b 113
+b 115
+b 117
+b 119
+b 132
+b 142
+b 140
+b 2
+b 131
+b 1
+b 10
+b 113
+b 1
+b 2
+b 51
+b 1
+b 1
+b 48
+b 2
+b 638
+b 0
+b 26
+b 28
+b 52
+b 54
+b 56
+b 58
+b 59
+b 61
+b 58
+b 2
+b 284
+b 289
+b 290
+b 288
+b 1
+b 106
+b 108
+b 109
+b 108
+b 2
+b 14
+b 13
+b 1
+b 49
+b 51
+b 90
+b 49
+b 1
+b 26
+b 31
+b 24
+b 2
+b 70
+b 71
+b 73
+b 70
+b 2
+b 8
+b 9
+b 34
+b 175
+b 181
+b 182
+b 7
+b 1
+b 180
+b 2
+b 16
+b 33
+b 32
+b 2
+b 128
+b 129
+b 127
+b 1
+b 87
+b 31
+b 39
+b 38
+b 2
+b 72
+b 7
+b 8
+b 7
+b 1
+b 10
+b 22
+b 3
+b 4
+b 6
+b 151
+b 6
+b 19
+b 21
+b 22
+b 6
+b 6
+b 1
+b 10
+b 11
+b 10
+b 1
+b 8
+b 9
+b 24
+b 0
+b 14
+b 16
+b 24
+b 25
+b 24
+b 1
+b 49
+b 89
+b 104
+b 105
+b 107
+b 108
+b 88
+b 2
+b 100
+b 2
+b 7
+b 8
+b 106
+b 6
+b 1
+b 7
+b 97
+b 38
+b 37
+b 1
+b 147
+b 148
+b 145
+b 2
+b 160
+b 160
+b 1
+b 26
+b 27
+b 25
+b 1
+b 15
+b 16
+b 74
+b 73
+b 2
+b 22
+b 23
+b 25
+b 62
+b 20
+b 2
+b 56
+b 163
+b 164
+b 166
+b 177
+b 178
+b 190
+b 161
+b 2
+b 175
+b 1
+b 55
+b 1
+b 38
+b 40
+b 48
+b 49
+b 51
+b 52
+b 70
+b 40
+b 1
+b 45
+b 2
+b 48
+b 1
+b 9
+b 17
+b 18
+b 20
+b 21
+b 31
+b 17
+b 3
+b 27
+b 1
+b 1
+b 37
+b 0
+b 2
+b 33
+b 2
+b 6
+b 133
+b 135
+b 136
+b 154
+b 155
+b 133
+b 2
+b 152
+b 2
+b 26
+b 35
+b 32
+b 1
+b 30
+b 36
+b 61
+b 35
+b 2
+b 0
+b 2
+b 69
+b 71
+b 73
+b 75
+b 69
+b 1
+b 31
+b 38
+b 39
+b 26
+b 0
+b 2
+b 3
+b 45
+b 47
+b 53
+b 54
+b 56
+b 57
+b 51
+b 2
+b 54
+b 2
+b 104
+b 101
+b 1
+b 4
+b 323
+b 340
+b 341
+b 343
+b 339
+b 1
+b 4
+b 2
+b 1
+b 61
+b 15
+b 16
+b 61
+b 1
+b 13
+b 11
+b 1
+b 16
+b 17
+b 26
+b 27
+b 47
+b 76
+b 16
+b 2
+b 236
+b 237
+b 239
+b 235
+b 1
+b 75
+b 189
+b 195
+b 196
+b 201
+b 193
+b 2
+b 199
+b 1
+b 188
+b 1
+b 15
+b 16
+b 18
+b 14
+b 1
+b 12
+b 13
+b 15
+b 17
+b 33
+b 12
+b 2
+b 29
+b 3
+b 32
+b 41
+b 42
+b 63
+b 64
+b 41
+b 2
+b 58
+b 1
+b 21
+b 43
+b 45
+b 46
+b 45
+b 1
+b 0
+b 18
+b 19
+b 0
+b 1
+b 16
+b 1
+b 44
+b 8
+b 19
+b 21
+b 22
+b 24
+b 26
+b 6
+b 2
+b 19
+b 2
+b 5
+b 17
+b 5
+b 7
+b 8
+b 32
+b 33
+b 3
+b 1
+b 31
+b 1
+b 4
+b 31
+b 32
+b 34
+b 21
+b 22
+b 21
+b 1
+b 19
+b 18
+b 1
+b 88
+b 90
+b 91
+b 112
+b 113
+b 88
+b 2
+b 110
+b 2
+b 46
+b 43
+b 1
+b 5
+b 23
+b 24
+b 31
+b 24
+b 1
+b 114
+b 115
+b 117
+b 118
+b 112
+b 2
+b 115
+b 3
+b 1
+b 0
+b 1
+b 25
+b 3
+b 9
+b 10
+b 18
+b 9
+b 2
+b 14
+b 1
+b 1
+b 1
+b 10
+b 33
+b 34
+b 36
+b 37
+b 53
+b 55
+b 36
+b 1
+b 50
+b 1
+b 211
+b 213
+b 215
+b 208
+b 1
+b 0
+b 1
+b 6
+b 7
+b 0
+b 2
+b 3
+b 1
+b 32
+b 51
+b 53
+b 55
+b 56
+b 89
+b 90
+b 53
+b 2
+b 87
+b 2
+b 16
+b 18
+b 14
+b 1
+b 5
+b 4
+b 2
+b 44
+b 45
+b 44
+b 1
+b 11
+b 13
+b 57
+b 65
+b 54
+b 1
+b 57
+b 54
+b 1
+b 89
+b 90
+b 87
+b 2
+b 17
+b 23
+b 24
+b 121
+b 0
+b 2
+b 4
+b 7
+b 8
+b 39
+b 40
+b 41
+b 4
+b 3
+b 8
+b 8
+b 1
+b 20
+b 32
+b 33
+b 61
+b 32
+b 2
+b 29
+b 1
+b 55
+b 1
+b 37
+b 67
+b 68
+b 53
+b 52
+b 1
+b 0
+b 6
+b 87
+b 87
+b 1
+b 12
+b 13
+b 15
+b 10
+b 2
+b 13
+b 1
+b 28
+b 30
+b 31
+b 33
+b 59
+b 30
+b 2
+b 70
+b 80
+b 79
+b 2
+b 8
+b 9
+b 11
+b 7
+b 1
+b 98
+b 113
+b 118
+b 0
+b 1
+b 6
+b 7
+b 9
+b 11
+b 5
+b 1
+b 10
+b 1
+b 57
+b 56
+b 1
+b 156
+b 157
+b 159
+b 163
+b 0
+b 13
+b 35
+b 41
+b 42
+b 44
+b 45
+b 70
+b 11
+b 13
+b 95
+b 96
+b 100
+b 73
+b 83
+b 84
+b 90
+b 91
+b 90
+b 2
+b 34
+b 31
+b 1
+b 1
+b 73
+b 76
+b 91
+b 92
+b 105
+b 106
+b 115
+b 91
+b 2
+b 70
+b 1
+b 279
+b 281
+b 287
+b 288
+b 279
+b 1
+b 2
+b 71
+b 78
+b 79
+b 81
+b 69
+b 3
+b 74
+b 1
+b 318
+b 319
+b 317
+b 1
+b 4
+b 159
+b 161
+b 161
+b 1
+b 99
+b 100
+b 99
+b 1
+b 3
+b 40
+b 20
+b 63
+b 65
+b 66
+b 72
+b 63
+b 2
+b 56
+b 57
+b 56
+b 2
+b 8
+b 7
+b 1
+b 31
+b 32
+b 34
+b 36
+b 37
+b 31
+b 2
+b 3
+b 31
+b 33
+b 33
+b 1
+b 112
+b 112
+b 1
+b 22
+b 23
+b 32
+b 21
+b 1
+b 58
+b 81
+b 82
+b 80
+b 1
+b 57
+b 1
+b 3
+b 4
+b 14
+b 13
+b 14
+b 23
+b 24
+b 30
+b 51
+b 13
+b 2
+b 19
+b 2
+b 25
+b 1
+b 43
+b 1
+b 137
+b 134
+b 1
+b 2
+b 3
+b 10
+b 11
+b 2
+b 2
+b 6
+b 2
+b 1
+b 0
+b 1
+b 28
+b 28
+b 1
+b 5
+b 31
+b 33
+b 33
+b 1
+b 11
+b 12
+b 11
+b 1
+b 8
+b 9
+b 11
+b 142
+b 144
+b 145
+b 147
+b 149
+b 144
+b 2
+b 47
+b 46
+b 1
+b 172
+b 174
+b 176
+b 174
+b 1
+b 15
+b 17
+b 18
+b 20
+b 72
+b 82
+b 83
+b 82
+b 1
+b 46
+b 47
+b 82
+b 84
+b 86
+b 87
+b 46
+b 2
+b 78
+b 1
+b 0
+b 51
+b 53
+b 25
+b 33
+b 34
+b 41
+b 42
+b 23
+b 2
+b 81
+b 81
+b 1
+b 8
+b 9
+b 44
+b 88
+b 89
+b 101
+b 88
+b 2
+b 96
+b 1
+b 4
+b 2
+b 5
+b 50
+b 51
+b 3
+b 1
+b 237
+b 239
+b 240
+b 242
+b 237
+b 2
+b 20
+b 40
+b 42
+b 43
+b 45
+b 18
+b 3
+b 37
+b 2
+b 40
+b 1
+b 14
+b 2
+b 0
+b 4
+b 5
+b 11
+b 13
+b 15
+b 16
+b 21
+b 13
+b 2
+b 62
+b 86
+b 0
+b 1
+b 10
+b 27
+b 71
+b 72
+b 102
+b 71
+b 1
+b 99
+b 1
+b 127
+b 124
+b 1
+b 43
+b 9
+b 10
+b 12
+b 13
+b 50
+b 8
+b 1
+b 11
+b 2
+b 22
+b 21
+b 1
+b 5
+b 6
+b 8
+b 4
+b 1
+b 0
+b 2
+b 168
+b 49
+b 51
+b 52
+b 54
+b 56
+b 215
+b 5
+b 6
+b 27
+b 29
+b 30
+b 27
+b 2
+b 36
+b 46
+b 45
+b 1
+b 127
+b 125
+b 3
+b 56
+b 58
+b 59
+b 72
+b 73
+b 75
+b 56
+b 2
+b 70
+b 2
+b 18
+b 3
+b 27
+b 19
+b 25
+b 19
+b 21
+b 22
+b 42
+b 39
+b 1
+b 15
+b 16
+b 13
+b 2
+b 8
+b 9
+b 6
+b 2
+b 3
+b 0
+b 1
+b 85
+b 92
+b 93
+b 95
+b 97
+b 99
+b 83
+b 2
+b 90
+b 2
+b 69
+b 84
+b 85
+b 87
+b 19
+b 21
+b 19
+b 1
+b 16
+b 24
+b 38
+b 36
+b 2
+b 0
+b 2
+b 3
+b 8
+b 3
+b 1
+b 83
+b 85
+b 86
+b 88
+b 85
+b 2
+b 17
+b 21
+b 22
+b 67
+b 19
+b 2
+b 148
+b 154
+b 156
+b 157
+b 159
+b 146
+b 2
+b 109
+b 107
+b 2
+b 43
+b 29
+b 27
+b 1
+b 0
+b 1
+b 15
+b 16
+b 0
+b 1
+b 135
+b 144
+b 145
+b 143
+b 1
+b 6
+b 7
+b 4
+b 2
+b 49
+b 55
+b 56
+b 62
+b 53
+b 2
+b 48
+b 1
+b 5
+b 13
+b 14
+b 16
+b 18
+b 19
+b 28
+b 18
+b 2
+b 10
+b 1
+b 22
+b 1
+b 37
+b 93
+b 122
+b 136
+b 137
+b 134
+b 2
+b 92
+b 1
+b 2
+b 0
+b 1
+b 0
+b 1
+b 6
+b 26
+b 24
+b 1
+b 6
+b 8
+b 14
+b 15
+b 12
+b 2
+b 2
+b 3
+b 64
+b 7
+b 8
+b 12
+b 23
+b 29
+b 30
+b 32
+b 34
+b 34
+b 1
+b 5
+b 4
+b 1
+b 180
+b 196
+b 198
+b 199
+b 226
+b 196
+b 2
+b 224
+b 1
+b 174
+b 187
+b 188
+b 185
+b 23
+b 24
+b 26
+b 27
+b 29
+b 31
+b 21
+b 2
+b 24
+b 2
+b 31
+b 33
+b 29
+b 1
+b 13
+b 11
+b 3
+b 23
+b 24
+b 39
+b 40
+b 45
+b 22
+b 1
+b 38
+b 1
+b 182
+b 184
+b 185
+b 192
+b 238
+b 240
+b 242
+b 243
+b 244
+b 182
+b 2
+b 1
+b 1
+b 1
+b 189
+b 190
+b 218
+b 189
+b 2
+b 215
+b 1
+b 53
+b 55
+b 56
+b 55
+b 1
+b 12
+b 23
+b 73
+b 75
+b 76
+b 82
+b 20
+b 1
+b 74
+b 1
+b 154
+b 58
+b 59
+b 4
+b 5
+b 22
+b 3
+b 1
+b 20
+b 1
+b 85
+b 83
+b 1
+b 0
+b 96
+b 112
+b 113
+b 110
+b 2
+b 95
+b 1
+b 48
+b 30
+b 47
+b 174
+b 175
+b 177
+b 179
+b 181
+b 182
+b 184
+b 202
+b 181
+b 2
+b 199
+b 2
+b 55
+b 60
+b 61
+b 55
+b 1
+b 58
+b 1
+b 7
+b 1
+b 9
+b 7
+b 2
+b 6
+b 7
+b 64
+b 65
+b 67
+b 5
+b 1
+b 6
+b 157
+b 164
+b 165
+b 175
+b 156
+b 1
+b 134
+b 135
+b 397
+b 155
+b 160
+b 162
+b 164
+b 154
+b 1
+b 346
+b 347
+b 354
+b 345
+b 1
+b 35
+b 32
+b 1
+b 704
+b 716
+b 717
+b 726
+b 37
+b 125
+b 124
+b 1
+b 124
+b 130
+b 129
+b 1
+b 16
+b 18
+b 19
+b 16
+b 2
+b 0
+b 1
+b 17
+b 166
+b 168
+b 164
+b 1
+b 33
+b 43
+b 31
+b 2
+b 23
+b 39
+b 41
+b 43
+b 44
+b 39
+b 1
+b 1
+b 3
+b 12
+b 1
+b 1
+b 62
+b 63
+b 65
+b 67
+b 62
+b 2
+b 33
+b 6
+b 8
+b 9
+b 15
+b 14
+b 1
+b 149
+b 150
+b 156
+b 157
+b 149
+b 2
+b 152
+b 2
+b 12
+b 28
+b 30
+b 32
+b 33
+b 37
+b 30
+b 2
+b 167
+b 32
+b 12
+b 13
+b 12
+b 1
+b 3
+b 1
+b 1
+b 33
+b 35
+b 37
+b 39
+b 31
+b 1
+b 4
+b 5
+b 2
+b 2
+b 3
+b 1
+b 157
+b 180
+b 181
+b 155
+b 2
+b 15
+b 17
+b 231
+b 232
+b 243
+b 229
+b 2
+b 7
+b 6
+b 1
+b 4
+b 6
+b 7
+b 0
+b 2
+b 4
+b 11
+b 21
+b 27
+b 28
+b 25
+b 2
+b 20
+b 1
+b 7
+b 10
+b 17
+b 18
+b 20
+b 195
+b 194
+b 2
+b 74
+b 76
+b 104
+b 102
+b 3
+b 76
+b 1
+b 24
+b 25
+b 52
+b 53
+b 75
+b 23
+b 1
+b 73
+b 1
+b 46
+b 48
+b 63
+b 64
+b 71
+b 70
+b 1
+b 3
+b 5
+b 2
+b 3
+b 107
+b 108
+b 120
+b 121
+b 123
+b 124
+b 141
+b 106
+b 1
+b 119
+b 3
+b 110
+b 4
+b 3
+b 1
+b 42
+b 52
+b 67
+b 68
+b 70
+b 72
+b 73
+b 83
+b 72
+b 1
+b 17
+b 13
+b 14
+b 24
+b 25
+b 12
+b 1
+b 23
+b 2
+b 18
+b 15
+b 1
+b 4
+b 89
+b 96
+b 87
+b 2
+b 34
+b 35
+b 37
+b 34
+b 2
+b 4
+b 129
+b 127
+b 1
+b 18
+b 19
+b 88
+b 89
+b 74
+b 35
+b 36
+b 92
+b 94
+b 95
+b 33
+b 2
+b 92
+b 2
+b 7
+b 4
+b 1
+b 1
+b 5
+b 220
+b 218
+b 219
+b 357
+b 358
+b 362
+b 356
+b 1
+b 9
+b 99
+b 108
+b 109
+b 111
+b 108
+b 2
+b 96
+b 1
+b 33
+b 31
+b 3
+b 220
+b 240
+b 241
+b 159
+b 159
+b 1
+b 42
+b 43
+b 50
+b 59
+b 42
+b 1
+b 39
+b 1
+b 4
+b 2
+b 3
+b 6
+b 99
+b 100
+b 106
+b 97
+b 2
+b 5
+b 1
+b 75
+b 73
+b 2
+b 37
+b 35
+b 1
+b 5
+b 6
+b 8
+b 196
+b 4
+b 1
+b 71
+b 109
+b 106
+b 1
+b 32
+b 34
+b 35
+b 37
+b 39
+b 40
+b 32
+b 2
+b 2
+b 1
+b 1
+b 49
+b 14
+b 16
+b 17
+b 23
+b 14
+b 2
+b 0
+b 0
+b 1
+b 83
+b 89
+b 97
+b 98
+b 95
+b 2
+b 205
+b 205
+b 1
+b 331
+b 330
+b 1
+b 7
+b 8
+b 7
+b 1
+b 6
+b 4
+b 3
+b 0
+b 1
+b 7
+b 11
+b 12
+b 10
+b 1
+b 16
+b 28
+b 0
+b 1
+b 13
+b 0
+b 2
+b 10
+b 1
+b 3
+b 8
+b 9
+b 11
+b 13
+b 8
+b 2
+b 38
+b 36
+b 1
+b 42
+b 46
+b 48
+b 49
+b 46
+b 2
+b 58
+b 58
+b 1
+b 9
+b 11
+b 13
+b 14
+b 16
+b 18
+b 20
+b 11
+b 2
+b 37
+b 36
+b 1
+b 33
+b 34
+b 33
+b 2
+b 7
+b 8
+b 15
+b 5
+b 2
+b 22
+b 19
+b 1
+b 145
+b 14
+b 15
+b 13
+b 1
+b 63
+b 64
+b 60
+b 1
+b 5
+b 90
+b 92
+b 10
+b 15
+b 10
+b 1
+b 10
+b 223
+b 235
+b 236
+b 223
+b 1
+b 233
+b 1
+b 162
+b 163
+b 182
+b 49
+b 59
+b 60
+b 69
+b 47
+b 1
+b 58
+b 1
+b 144
+b 142
+b 1
+b 19
+b 21
+b 17
+b 1
+b 7
+b 13
+b 22
+b 24
+b 5
+b 2
+b 22
+b 1
+b 156
+b 168
+b 166
+b 1
+b 155
+b 1
+b 0
+b 2
+b 3
+b 5
+b 7
+b 0
+b 2
+b 40
+b 9
+b 7
+b 1
+b 16
+b 17
+b 23
+b 16
+b 1
+b 59
+b 66
+b 67
+b 69
+b 139
+b 140
+b 149
+b 150
+b 152
+b 65
+b 1
+b 138
+b 2
+b 145
+b 1
+b 12
+b 24
+b 10
+b 2
+b 3
+b 5
+b 6
+b 8
+b 3
+b 2
+b 10
+b 9
+b 11
+b 13
+b 14
+b 9
+b 1
+b 4
+b 5
+b 46
+b 48
+b 66
+b 202
+b 217
+b 218
+b 224
+b 226
+b 227
+b 216
+b 1
+b 225
+b 2
+b 97
+b 147
+b 144
+b 1
+b 18
+b 16
+b 3
+b 1
+b 2
+b 4
+b 6
+b 1
+b 2
+b 200
+b 202
+b 203
+b 207
+b 235
+b 276
+b 277
+b 234
+b 2
+b 277
+b 70
+b 71
+b 70
+b 2
+b 37
+b 38
+b 40
+b 42
+b 37
+b 2
+b 107
+b 106
+b 1
+b 25
+b 24
+b 1
+b 32
+b 33
+b 45
+b 47
+b 48
+b 32
+b 2
+b 43
+b 2
+b 36
+b 39
+b 40
+b 42
+b 54
+b 55
+b 42
+b 1
+b 0
+b 2
+b 1
+b 7
+b 108
+b 106
+b 2
+b 2
+b 8
+b 8
+b 1
+b 144
+b 74
+b 76
+b 77
+b 74
+b 2
+b 2
+b 0
+b 2
+b 4
+b 67
+b 68
+b 71
+b 81
+b 79
+b 2
+b 70
+b 1
+b 178
+b 170
+b 168
+b 1
+b 0
+b 2
+b 3
+b 5
+b 7
+b 9
+b 2
+b 2
+b 64
+b 80
+b 81
+b 89
+b 90
+b 89
+b 1
+b 6
+b 4
+b 2
+b 66
+b 64
+b 2
+b 231
+b 240
+b 241
+b 240
+b 2
+b 228
+b 1
+b 0
+b 2
+b 77
+b 79
+b 80
+b 82
+b 84
+b 85
+b 92
+b 93
+b 95
+b 77
+b 2
+b 82
+b 2
+b 87
+b 1
+b 0
+b 5
+b 165
+b 166
+b 168
+b 172
+b 165
+b 2
+b 132
+b 133
+b 132
+b 2
+b 396
+b 397
+b 405
+b 396
+b 2
+b 401
+b 1
+b 42
+b 44
+b 42
+b 1
+b 18
+b 0
+b 1
+b 185
+b 193
+b 194
+b 113
+b 141
+b 143
+b 145
+b 146
+b 145
+b 1
+b 2
+b 3
+b 0
+b 2
+b 9
+b 15
+b 7
+b 3
+b 75
+b 73
+b 2
+b 25
+b 4
+b 5
+b 7
+b 9
+b 10
+b 11
+b 4
+b 2
+b 130
+b 115
+b 35
+b 44
+b 45
+b 56
+b 35
+b 1
+b 42
+b 1
+b 97
+b 107
+b 108
+b 114
+b 97
+b 1
+b 104
+b 2
+b 6
+b 8
+b 10
+b 10
+b 1
+b 25
+b 26
+b 28
+b 30
+b 23
+b 2
+b 21
+b 4
+b 5
+b 49
+b 50
+b 52
+b 60
+b 49
+b 2
+b 56
+b 1
+b 56
+b 68
+b 123
+b 121
+b 2
+b 0
+b 1
+b 117
+b 0
+b 2
+b 114
+b 1
+b 3
+b 5
+b 7
+b 8
+b 120
+b 92
+b 100
+b 99
+b 1
+b 96
+b 97
+b 96
+b 2
+b 0
+b 2
+b 0
+b 1
+b 82
+b 80
+b 2
+b 10
+b 12
+b 13
+b 23
+b 24
+b 42
+b 44
+b 12
+b 2
+b 18
+b 1
+b 31
+b 4
+b 5
+b 52
+b 53
+b 52
+b 2
+b 4
+b 4
+b 1
+b 14
+b 18
+b 14
+b 1
+b 15
+b 1
+b 12
+b 13
+b 2
+b 30
+b 32
+b 33
+b 35
+b 36
+b 9
+b 11
+b 74
+b 76
+b 77
+b 117
+b 118
+b 120
+b 116
+b 1
+b 119
+b 1
+b 11
+b 78
+b 80
+b 18
+b 23
+b 24
+b 31
+b 23
+b 1
+b 22
+b 23
+b 25
+b 27
+b 16
+b 17
+b 63
+b 15
+b 1
+b 62
+b 1
+b 55
+b 2
+b 3
+b 12
+b 13
+b 10
+b 2
+b 3
+b 1
+b 2
+b 25
+b 29
+b 31
+b 32
+b 23
+b 3
+b 0
+b 1
+b 15
+b 0
+b 1
+b 139
+b 139
+b 1
+b 2
+b 10
+b 11
+b 15
+b 0
+b 1
+b 36
+b 7
+b 21
+b 22
+b 19
+b 2
+b 6
+b 1
+b 0
+b 32
+b 9
+b 10
+b 14
+b 35
+b 36
+b 38
+b 40
+b 41
+b 43
+b 33
+b 2
+b 6
+b 5
+b 1
+b 15
+b 12
+b 1
+b 4
+b 25
+b 26
+b 6
+b 7
+b 6
+b 2
+b 22
+b 23
+b 25
+b 49
+b 22
+b 2
+b 6
+b 8
+b 9
+b 14
+b 18
+b 19
+b 21
+b 8
+b 1
+b 11
+b 2
+b 2
+b 51
+b 62
+b 63
+b 11
+b 17
+b 52
+b 60
+b 61
+b 88
+b 58
+b 2
+b 51
+b 1
+b 29
+b 27
+b 1
+b 36
+b 34
+b 2
+b 27
+b 33
+b 34
+b 41
+b 42
+b 85
+b 33
+b 2
+b 38
+b 1
+b 7
+b 15
+b 16
+b 31
+b 33
+b 34
+b 39
+b 33
+b 1
+b 28
+b 1
+b 581
+b 605
+b 607
+b 608
+b 611
+b 612
+b 581
+b 1
+b 604
+b 2
+b 1
+b 156
+b 282
+b 280
+b 2
+b 155
+b 1
+b 3
+b 8
+b 9
+b 0
+b 18
+b 53
+b 53
+b 1
+b 41
+b 43
+b 44
+b 43
+b 1
+b 41
+b 43
+b 44
+b 46
+b 48
+b 25
+b 207
+b 208
+b 206
+b 1
+b 102
+b 108
+b 109
+b 0
+b 0
+b 2
+b 2
+b 1
+b 273
+b 282
+b 270
+b 1
+b 2
+b 0
+b 2
+b 3
+b 11
+b 10
+b 2
+b 222
+b 240
+b 241
+b 245
+b 252
+b 266
+b 240
+b 2
+b 220
+b 1
+b 239
+b 1
+b 42
+b 58
+b 59
+b 80
+b 58
+b 2
+b 75
+b 1
+b 40
+b 19
+b 18
+b 1
+b 0
+b 2
+b 4
+b 6
+b 0
+b 1
+b 32
+b 33
+b 242
+b 4
+b 2
+b 2
+b 0
+b 6
+b 7
+b 80
+b 93
+b 102
+b 103
+b 105
+b 107
+b 108
+b 110
+b 135
+b 102
+b 2
+b 78
+b 1
+b 105
+b 3
+b 4
+b 18
+b 19
+b 2
+b 1
+b 2
+b 2
+b 1
+b 88
+b 89
+b 154
+b 88
+b 2
+b 150
+b 1
+b 102
+b 103
+b 103
+b 1
+b 56
+b 60
+b 4
+b 5
+b 6
+b 8
+b 10
+b 5
+b 2
+b 36
+b 37
+b 39
+b 40
+b 39
+b 2
+b 3
+b 52
+b 54
+b 50
+b 1
+b 36
+b 37
+b 39
+b 40
+b 76
+b 36
+b 3
+b 73
+b 1
+b 33
+b 35
+b 37
+b 39
+b 40
+b 42
+b 33
+b 1
+b 16
+b 94
+b 104
+b 92
+b 2
+b 0
+b 2
+b 4
+b 18
+b 17
+b 1
+b 4
+b 2
+b 3
+b 6
+b 59
+b 10
+b 11
+b 10
+b 1
+b 11
+b 11
+b 1
+b 172
+b 174
+b 176
+b 177
+b 201
+b 176
+b 1
+b 198
+b 1
+b 39
+b 277
+b 278
+b 280
+b 281
+b 294
+b 277
+b 3
+b 291
+b 1
+b 71
+b 49
+b 50
+b 56
+b 48
+b 1
+b 88
+b 89
+b 155
+b 87
+b 1
+b 153
+b 2
+b 32
+b 33
+b 4
+b 65
+b 62
+b 1
+b 4
+b 112
+b 113
+b 115
+b 117
+b 118
+b 1
+b 208
+b 224
+b 225
+b 234
+b 236
+b 237
+b 244
+b 234
+b 2
+b 242
+b 1
+b 47
+b 46
+b 2
+b 10
+b 14
+b 15
+b 24
+b 15
+b 1
+b 3
+b 5
+b 6
+b 19
+b 5
+b 1
+b 129
+b 13
+b 14
+b 17
+b 35
+b 36
+b 75
+b 35
+b 2
+b 70
+b 1
+b 20
+b 19
+b 1
+b 2
+b 14
+b 12
+b 1
+b 9
+b 10
+b 16
+b 17
+b 7
+b 2
+b 14
+b 1
+b 5
+b 21
+b 22
+b 24
+b 25
+b 32
+b 49
+b 21
+b 3
+b 28
+b 1
+b 1
+b 3
+b 0
+b 3
+b 52
+b 4
+b 6
+b 7
+b 9
+b 34
+b 35
+b 44
+b 45
+b 47
+b 49
+b 55
+b 34
+b 2
+b 41
+b 1
+b 97
+b 126
+b 127
+b 129
+b 154
+b 124
+b 2
+b 31
+b 12
+b 14
+b 15
+b 24
+b 26
+b 27
+b 34
+b 24
+b 2
+b 31
+b 2
+b 36
+b 37
+b 35
+b 1
+b 10
+b 5
+b 4
+b 2
+b 0
+b 2
+b 90
+b 92
+b 93
+b 99
+b 88
+b 1
+b 34
+b 36
+b 37
+b 39
+b 32
+b 1
+b 266
+b 27
+b 28
+b 91
+b 92
+b 91
+b 1
+b 72
+b 73
+b 95
+b 72
+b 2
+b 90
+b 1
+b 65
+b 67
+b 68
+b 78
+b 80
+b 95
+b 5
+b 91
+b 4
+b 1
+b 64
+b 65
+b 90
+b 55
+b 7
+b 9
+b 4
+b 1
+b 3
+b 4
+b 3
+b 2
+b 24
+b 22
+b 1
+b 25
+b 26
+b 14
+b 5
+b 142
+b 151
+b 152
+b 179
+b 181
+b 181
+b 1
+b 140
+b 1
+b 111
+b 15
+b 16
+b 29
+b 30
+b 36
+b 38
+b 15
+b 1
+b 26
+b 2
+b 35
+b 1
+b 30
+b 37
+b 38
+b 44
+b 52
+b 53
+b 265
+b 29
+b 2
+b 34
+b 1
+b 111
+b 116
+b 117
+b 32
+b 33
+b 32
+b 1
+b 47
+b 0
+b 2
+b 3
+b 2
+b 2
+b 4
+b 3
+b 2
+b 27
+b 37
+b 38
+b 44
+b 27
+b 1
+b 34
+b 2
+b 91
+b 97
+b 99
+b 101
+b 102
+b 104
+b 99
+b 2
+b 23
+b 23
+b 1
+b 390
+b 392
+b 405
+b 406
+b 454
+b 455
+b 457
+b 392
+b 1
+b 402
+b 2
+b 451
+b 2
+b 50
+b 66
+b 67
+b 69
+b 78
+b 79
+b 91
+b 66
+b 2
+b 74
+b 2
+b 86
+b 1
+b 144
+b 7
+b 8
+b 10
+b 19
+b 20
+b 22
+b 6
+b 1
+b 12
+b 11
+b 2
+b 34
+b 16
+b 17
+b 23
+b 24
+b 23
+b 1
+b 4
+b 2
+b 2
+b 72
+b 84
+b 35
+b 41
+b 64
+b 65
+b 67
+b 75
+b 34
+b 1
+b 110
+b 115
+b 116
+b 118
+b 118
+b 1
+b 13
+b 15
+b 16
+b 13
+b 2
+b 50
+b 52
+b 52
+b 1
+b 1
+b 8
+b 9
+b 11
+b 13
+b 14
+b 6
+b 2
+b 31
+b 33
+b 34
+b 36
+b 31
+b 2
+b 9
+b 7
+b 1
+b 170
+b 188
+b 167
+b 1
+b 39
+b 48
+b 49
+b 61
+b 37
+b 2
+b 45
+b 71
+b 44
+b 2
+b 67
+b 2
+b 15
+b 16
+b 18
+b 19
+b 21
+b 29
+b 15
+b 3
+b 34
+b 55
+b 56
+b 3
+b 4
+b 9
+b 147
+b 147
+b 1
+b 12
+b 14
+b 15
+b 12
+b 2
+b 0
+b 5
+b 6
+b 5
+b 2
+b 200
+b 199
+b 1
+b 91
+b 92
+b 94
+b 95
+b 91
+b 3
+b 3
+b 3
+b 1
+b 39
+b 53
+b 54
+b 66
+b 67
+b 69
+b 71
+b 53
+b 2
+b 62
+b 2
+b 57
+b 56
+b 1
+b 3
+b 3
+b 9
+b 16
+b 17
+b 19
+b 16
+b 2
+b 4
+b 2
+b 1
+b 22
+b 58
+b 2
+b 8
+b 9
+b 7
+b 1
+b 1
+b 1
+b 67
+b 74
+b 66
+b 1
+b 15
+b 0
+b 2
+b 3
+b 57
+b 64
+b 54
+b 1
+b 107
+b 118
+b 119
+b 121
+b 105
+b 3
+b 113
+b 2
+b 116
+b 1
+b 176
+b 187
+b 197
+b 198
+b 195
+b 2
+b 186
+b 1
+b 87
+b 89
+b 90
+b 93
+b 94
+b 87
+b 2
+b 1
+b 58
+b 60
+b 61
+b 63
+b 60
+b 2
+b 12
+b 13
+b 15
+b 10
+b 2
+b 10
+b 9
+b 1
+b 33
+b 39
+b 40
+b 3
+b 5
+b 3
+b 1
+b 37
+b 42
+b 49
+b 50
+b 63
+b 35
+b 2
+b 47
+b 2
+b 57
+b 1
+b 101
+b 152
+b 1
+b 23
+b 24
+b 1
+b 1
+b 7
+b 63
+b 60
+b 1
+b 42
+b 44
+b 45
+b 47
+b 53
+b 59
+b 60
+b 57
+b 3
+b 52
+b 1
+b 20
+b 22
+b 4
+b 15
+b 16
+b 2
+b 2
+b 13
+b 1
+b 72
+b 73
+b 75
+b 70
+b 2
+b 14
+b 15
+b 11
+b 1
+b 14
+b 14
+b 1
+b 17
+b 120
+b 148
+b 118
+b 1
+b 0
+b 2
+b 3
+b 13
+b 14
+b 0
+b 2
+b 0
+b 1
+b 76
+b 35
+b 37
+b 38
+b 40
+b 41
+b 52
+b 64
+b 33
+b 1
+b 98
+b 97
+b 2
+b 32
+b 39
+b 41
+b 42
+b 75
+b 39
+b 2
+b 282
+b 289
+b 290
+b 295
+b 296
+b 289
+b 1
+b 280
+b 1
+b 22
+b 93
+b 95
+b 127
+b 1
+b 9
+b 10
+b 12
+b 8
+b 1
+b 125
+b 142
+b 143
+b 150
+b 152
+b 141
+b 1
+b 0
+b 1
+b 16
+b 0
+b 2
+b 11
+b 1
+b 8
+b 21
+b 63
+b 64
+b 66
+b 93
+b 63
+b 2
+b 89
+b 2
+b 255
+b 268
+b 269
+b 271
+b 276
+b 286
+b 287
+b 267
+b 1
+b 254
+b 1
+b 147
+b 148
+b 152
+b 154
+b 145
+b 2
+b 152
+b 1
+b 13
+b 22
+b 11
+b 1
+b 224
+b 226
+b 228
+b 229
+b 242
+b 226
+b 2
+b 239
+b 1
+b 123
+b 125
+b 148
+b 149
+b 148
+b 1
+b 145
+b 1
+b 8
+b 15
+b 17
+b 19
+b 20
+b 10
+b 16
+b 9
+b 1
+b 60
+b 65
+b 66
+b 72
+b 65
+b 2
+b 68
+b 1
+b 5
+b 6
+b 5
+b 1
+b 63
+b 65
+b 61
+b 1
+b 18
+b 19
+b 21
+b 22
+b 24
+b 41
+b 16
+b 2
+b 19
+b 2
+b 100
+b 141
+b 142
+b 146
+b 148
+b 99
+b 2
+b 136
+b 1
+b 43
+b 42
+b 2
+b 3
+b 10
+b 1
+b 1
+b 4
+b 1
+b 3
+b 4
+b 6
+b 3
+b 3
+b 26
+b 34
+b 35
+b 37
+b 31
+b 1
+b 4
+b 3
+b 2
+b 29
+b 31
+b 60
+b 61
+b 63
+b 59
+b 1
+b 16
+b 15
+b 1
+b 24
+b 25
+b 22
+b 2
+b 13
+b 14
+b 11
+b 2
+b 4
+b 9
+b 8
+b 1
+b 28
+b 29
+b 59
+b 10
+b 11
+b 26
+b 10
+b 1
+b 23
+b 1
+b 100
+b 115
+b 116
+b 114
+b 1
+b 8
+b 9
+b 34
+b 6
+b 2
+b 31
+b 1
+b 460
+b 464
+b 465
+b 471
+b 32
+b 31
+b 1
+b 29
+b 31
+b 39
+b 40
+b 42
+b 62
+b 61
+b 1
+b 65
+b 70
+b 63
+b 2
+b 21
+b 48
+b 49
+b 51
+b 52
+b 47
+b 1
+b 13
+b 11
+b 1
+b 9
+b 0
+b 79
+b 77
+b 1
+b 6
+b 7
+b 3
+b 1
+b 40
+b 42
+b 17
+b 15
+b 1
+b 19
+b 20
+b 17
+b 2
+b 16
+b 22
+b 23
+b 27
+b 22
+b 1
+b 93
+b 94
+b 96
+b 93
+b 2
+b 45
+b 47
+b 48
+b 43
+b 1
+b 37
+b 27
+b 44
+b 46
+b 47
+b 42
+b 1
+b 0
+b 2
+b 0
+b 1
+b 3
+b 0
+b 2
+b 23
+b 33
+b 35
+b 37
+b 38
+b 33
+b 1
+b 1
+b 204
+b 212
+b 213
+b 226
+b 236
+b 237
+b 212
+b 2
+b 222
+b 3
+b 230
+b 1
+b 201
+b 1
+b 30
+b 34
+b 42
+b 28
+b 3
+b 29
+b 1
+b 0
+b 2
+b 3
+b 5
+b 2
+b 2
+b 19
+b 14
+b 15
+b 17
+b 19
+b 20
+b 24
+b 14
+b 2
+b 7
+b 8
+b 20
+b 5
+b 2
+b 18
+b 1
+b 11
+b 19
+b 20
+b 22
+b 159
+b 17
+b 18
+b 16
+b 1
+b 6
+b 6
+b 1
+b 24
+b 27
+b 28
+b 32
+b 33
+b 40
+b 41
+b 23
+b 4
+b 37
+b 1
+b 29
+b 40
+b 26
+b 27
+b 29
+b 31
+b 57
+b 56
+b 1
+b 13
+b 53
+b 54
+b 68
+b 69
+b 12
+b 2
+b 49
+b 2
+b 64
+b 2
+b 9
+b 6
+b 1
+b 62
+b 69
+b 49
+b 53
+b 47
+b 2
+b 35
+b 36
+b 38
+b 32
+b 1
+b 10
+b 15
+b 8
+b 2
+b 18
+b 24
+b 25
+b 23
+b 1
+b 1
+b 1
+b 2
+b 56
+b 57
+b 59
+b 60
+b 62
+b 64
+b 56
+b 3
+b 61
+b 1
+b 72
+b 91
+b 90
+b 1
+b 31
+b 31
+b 1
+b 56
+b 57
+b 55
+b 1
+b 6
+b 43
+b 41
+b 2
+b 31
+b 32
+b 39
+b 29
+b 2
+b 5
+b 8
+b 23
+b 24
+b 27
+b 23
+b 3
+b 8
+b 7
+b 1
+b 8
+b 5
+b 1
+b 25
+b 26
+b 35
+b 37
+b 38
+b 40
+b 24
+b 1
+b 18
+b 14
+b 110
+b 112
+b 113
+b 46
+b 16
+b 15
+b 2
+b 45
+b 47
+b 49
+b 49
+b 1
+b 62
+b 62
+b 1
+b 72
+b 73
+b 79
+b 80
+b 72
+b 2
+b 75
+b 2
+b 3
+b 187
+b 122
+b 123
+b 3
+b 4
+b 2
+b 1
+b 2
+b 3
+b 13
+b 0
+b 2
+b 10
+b 1
+b 98
+b 100
+b 101
+b 114
+b 115
+b 114
+b 1
+b 101
+b 1
+b 43
+b 27
+b 26
+b 2
+b 62
+b 78
+b 79
+b 87
+b 88
+b 90
+b 78
+b 2
+b 83
+b 2
+b 2
+b 3
+b 6
+b 4
+b 1
+b 8
+b 51
+b 196
+b 210
+b 211
+b 80
+b 82
+b 84
+b 85
+b 84
+b 2
+b 77
+b 1
+b 18
+b 17
+b 2
+b 22
+b 24
+b 26
+b 28
+b 26
+b 1
+b 569
+b 571
+b 573
+b 574
+b 583
+b 571
+b 2
+b 8
+b 9
+b 15
+b 16
+b 8
+b 2
+b 11
+b 2
+b 4
+b 161
+b 189
+b 190
+b 192
+b 194
+b 195
+b 161
+b 1
+b 186
+b 2
+b 191
+b 2
+b 21
+b 22
+b 40
+b 21
+b 1
+b 75
+b 14
+b 15
+b 8
+b 0
+b 1
+b 15
+b 53
+b 52
+b 2
+b 39
+b 39
+b 40
+b 42
+b 44
+b 45
+b 46
+b 39
+b 2
+b 75
+b 79
+b 80
+b 82
+b 84
+b 77
+b 2
+b 212
+b 211
+b 1
+b 160
+b 166
+b 168
+b 169
+b 179
+b 231
+b 233
+b 234
+b 255
+b 274
+b 254
+b 2
+b 270
+b 1
+b 37
+b 33
+b 65
+b 0
+b 1
+b 69
+b 70
+b 71
+b 68
+b 3
+b 0
+b 45
+b 46
+b 43
+b 2
+b 9
+b 10
+b 12
+b 24
+b 8
+b 1
+b 139
+b 140
+b 142
+b 158
+b 138
+b 1
+b 157
+b 1
+b 6
+b 7
+b 4
+b 2
+b 35
+b 26
+b 47
+b 24
+b 2
+b 9
+b 8
+b 1
+b 0
+b 2
+b 3
+b 5
+b 7
+b 9
+b 47
+b 58
+b 59
+b 95
+b 58
+b 1
+b 92
+b 1
+b 142
+b 143
+b 152
+b 142
+b 1
+b 149
+b 2
+b 57
+b 58
+b 63
+b 16
+b 14
+b 3
+b 152
+b 17
+b 14
+b 1
+b 7
+b 8
+b 10
+b 5
+b 2
+b 7
+b 9
+b 11
+b 12
+b 14
+b 16
+b 17
+b 19
+b 30
+b 9
+b 2
+b 17
+b 1
+b 5
+b 7
+b 9
+b 10
+b 9
+b 1
+b 9
+b 8
+b 1
+b 0
+b 75
+b 6
+b 12
+b 14
+b 209
+b 15
+b 17
+b 19
+b 20
+b 13
+b 1
+b 18
+b 2
+b 3
+b 4
+b 36
+b 38
+b 39
+b 3
+b 2
+b 34
+b 2
+b 7
+b 8
+b 10
+b 12
+b 7
+b 2
+b 4
+b 5
+b 7
+b 9
+b 11
+b 2
+b 2
+b 9
+b 1
+b 21
+b 22
+b 24
+b 35
+b 19
+b 2
+b 31
+b 3
+b 67
+b 27
+b 29
+b 30
+b 27
+b 2
+b 10
+b 22
+b 19
+b 1
+b 0
+b 1
+b 4
+b 5
+b 0
+b 5
+b 561
+b 562
+b 571
+b 572
+b 574
+b 611
+b 559
+b 2
+b 608
+b 2
+b 53
+b 27
+b 29
+b 7
+b 4
+b 1
+b 57
+b 54
+b 1
+b 53
+b 0
+b 1
+b 7
+b 8
+b 0
+b 2
+b 3
+b 3
+b 6
+b 15
+b 0
+b 2
+b 4
+b 2
+b 1
+b 8
+b 5
+b 1
+b 9
+b 10
+b 19
+b 20
+b 9
+b 2
+b 15
+b 2
+b 100
+b 101
+b 100
+b 2
+b 8
+b 6
+b 1
+b 9
+b 11
+b 12
+b 20
+b 24
+b 25
+b 18
+b 1
+b 1
+b 133
+b 170
+b 171
+b 170
+b 2
+b 43
+b 41
+b 2
+b 4
+b 9
+b 10
+b 12
+b 14
+b 15
+b 9
+b 2
+b 138
+b 152
+b 154
+b 155
+b 157
+b 158
+b 163
+b 164
+b 188
+b 154
+b 3
+b 142
+b 141
+b 1
+b 13
+b 14
+b 16
+b 50
+b 12
+b 1
+b 24
+b 31
+b 32
+b 29
+b 2
+b 23
+b 1
+b 5
+b 9
+b 6
+b 1
+b 1
+b 38
+b 39
+b 41
+b 42
+b 44
+b 46
+b 38
+b 3
+b 223
+b 236
+b 238
+b 238
+b 1
+b 27
+b 28
+b 26
+b 1
+b 27
+b 36
+b 37
+b 39
+b 41
+b 26
+b 1
+b 14
+b 58
+b 0
+b 2
+b 33
+b 2
+b 1
+b 26
+b 34
+b 64
+b 75
+b 76
+b 24
+b 2
+b 73
+b 2
+b 59
+b 1
+b 0
+b 1
+b 7
+b 14
+b 41
+b 42
+b 49
+b 48
+b 1
+b 28
+b 28
+b 1
+b 90
+b 91
+b 93
+b 94
+b 96
+b 93
+b 2
+b 4
+b 2
+b 1
+b 78
+b 81
+b 6
+b 13
+b 14
+b 19
+b 21
+b 70
+b 26
+b 32
+b 33
+b 46
+b 47
+b 24
+b 1
+b 31
+b 2
+b 42
+b 1
+b 60
+b 62
+b 64
+b 66
+b 67
+b 58
+b 1
+b 65
+b 1
+b 2
+b 91
+b 105
+b 104
+b 1
+b 173
+b 181
+b 182
+b 184
+b 185
+b 181
+b 3
+b 3
+b 2
+b 2
+b 118
+b 120
+b 122
+b 124
+b 125
+b 127
+b 118
+b 1
+b 30
+b 22
+b 5
+b 4
+b 1
+b 5
+b 7
+b 31
+b 39
+b 40
+b 46
+b 47
+b 53
+b 45
+b 1
+b 0
+b 2
+b 3
+b 2
+b 1
+b 1
+b 0
+b 2
+b 8
+b 4
+b 5
+b 3
+b 1
+b 4
+b 5
+b 7
+b 9
+b 2
+b 2
+b 7
+b 1
+b 155
+b 43
+b 44
+b 46
+b 48
+b 49
+b 54
+b 55
+b 61
+b 48
+b 2
+b 51
+b 1
+b 76
+b 77
+b 79
+b 80
+b 82
+b 84
+b 86
+b 75
+b 1
+b 6
+b 8
+b 1
+b 0
+b 2
+b 74
+b 72
+b 3
+b 2
+b 4
+b 5
+b 0
+b 1
+b 25
+b 15
+b 17
+b 18
+b 20
+b 15
+b 2
+b 75
+b 106
+b 107
+b 109
+b 110
+b 106
+b 3
+b 0
+b 2
+b 2
+b 1
+b 4
+b 2
+b 1
+b 125
+b 132
+b 133
+b 145
+b 130
+b 2
+b 124
+b 1
+b 0
+b 1
+b 0
+b 1
+b 2
+b 4
+b 6
+b 35
+b 40
+b 41
+b 53
+b 4
+b 1
+b 45
+b 56
+b 57
+b 63
+b 83
+b 44
+b 2
+b 53
+b 1
+b 4
+b 55
+b 56
+b 74
+b 75
+b 82
+b 92
+b 55
+b 1
+b 71
+b 2
+b 126
+b 123
+b 1
+b 169
+b 176
+b 7
+b 29
+b 30
+b 27
+b 3
+b 6
+b 1
+b 254
+b 258
+b 258
+b 1
+b 14
+b 0
+b 2
+b 0
+b 1
+b 417
+b 419
+b 421
+b 422
+b 424
+b 431
+b 419
+b 2
+b 428
+b 2
+b 0
+b 163
+b 170
+b 171
+b 173
+b 162
+b 1
+b 7
+b 4
+b 102
+b 99
+b 1
+b 100
+b 101
+b 103
+b 100
+b 2
+b 32
+b 30
+b 3
+b 9
+b 11
+b 12
+b 7
+b 1
+b 93
+b 119
+b 36
+b 37
+b 43
+b 42
+b 2
+b 37
+b 40
+b 57
+b 56
+b 2
+b 37
+b 7
+b 8
+b 10
+b 11
+b 10
+b 2
+b 4
+b 1
+b 34
+b 2
+b 5
+b 6
+b 8
+b 2
+b 3
+b 5
+b 1
+b 198
+b 196
+b 1
+b 105
+b 106
+b 108
+b 110
+b 112
+b 114
+b 115
+b 129
+b 104
+b 1
+b 113
+b 2
+b 6
+b 72
+b 74
+b 76
+b 77
+b 70
+b 1
+b 75
+b 1
+b 93
+b 95
+b 33
+b 4
+b 22
+b 23
+b 2
+b 2
+b 0
+b 1
+b 0
+b 1
+b 61
+b 62
+b 64
+b 60
+b 1
+b 15
+b 14
+b 2
+b 69
+b 1
+b 5
+b 6
+b 85
+b 91
+b 92
+b 91
+b 1
+b 101
+b 98
+b 1
+b 11
+b 13
+b 21
+b 22
+b 13
+b 1
+b 18
+b 2
+b 12
+b 0
+b 196
+b 250
+b 257
+b 258
+b 257
+b 1
+b 21
+b 22
+b 21
+b 2
+b 84
+b 85
+b 84
+b 1
+b 59
+b 46
+b 54
+b 55
+b 45
+b 1
+b 140
+b 31
+b 32
+b 34
+b 36
+b 37
+b 46
+b 34
+b 2
+b 43
+b 2
+b 3
+b 320
+b 321
+b 323
+b 418
+b 417
+b 1
+b 119
+b 54
+b 39
+b 40
+b 39
+b 1
+b 2
+b 8
+b 9
+b 0
+b 1
+b 18
+b 20
+b 20
+b 1
+b 4
+b 5
+b 7
+b 15
+b 2
+b 2
+b 12
+b 1
+b 168
+b 88
+b 9
+b 8
+b 1
+b 2
+b 3
+b 0
+b 2
+b 0
+b 2
+b 4
+b 0
+b 1
+b 25
+b 25
+b 1
+b 28
+b 30
+b 31
+b 30
+b 1
+b 15
+b 16
+b 17
+b 14
+b 19
+b 16
+b 17
+b 61
+b 63
+b 16
+b 1
+b 58
+b 4
+b 68
+b 75
+b 83
+b 85
+b 86
+b 75
+b 1
+b 82
+b 3
+b 1
+b 86
+b 16
+b 40
+b 41
+b 15
+b 2
+b 21
+b 22
+b 33
+b 34
+b 38
+b 201
+b 35
+b 41
+b 43
+b 44
+b 32
+b 1
+b 11
+b 9
+b 1
+b 131
+b 132
+b 131
+b 1
+b 7
+b 9
+b 11
+b 12
+b 19
+b 9
+b 2
+b 11
+b 15
+b 17
+b 18
+b 20
+b 22
+b 15
+b 2
+b 20
+b 1
+b 35
+b 91
+b 92
+b 17
+b 19
+b 20
+b 21
+b 44
+b 42
+b 2
+b 29
+b 30
+b 32
+b 33
+b 45
+b 46
+b 29
+b 3
+b 42
+b 1
+b 3
+b 1
+b 0
+b 2
+b 7
+b 76
+b 10
+b 11
+b 26
+b 29
+b 62
+b 78
+b 79
+b 88
+b 89
+b 91
+b 88
+b 2
+b 78
+b 2
+b 3
+b 6
+b 19
+b 2
+b 3
+b 14
+b 1
+b 351
+b 366
+b 377
+b 378
+b 411
+b 377
+b 2
+b 349
+b 1
+b 1
+b 2
+b 11
+b 1
+b 2
+b 254
+b 256
+b 258
+b 260
+b 261
+b 263
+b 258
+b 2
+b 7
+b 5
+b 1
+b 17
+b 15
+b 1
+b 2
+b 3
+b 5
+b 7
+b 2
+b 2
+b 25
+b 37
+b 35
+b 2
+b 24
+b 1
+b 32
+b 0
+b 1
+b 0
+b 322
+b 321
+b 2
+b 58
+b 56
+b 2
+b 44
+b 46
+b 47
+b 66
+b 68
+b 95
+b 55
+b 53
+b 2
+b 1
+b 2
+b 4
+b 6
+b 8
+b 0
+b 1
+b 5
+b 3
+b 52
+b 52
+b 1
+b 11
+b 59
+b 9
+b 2
+b 8
+b 9
+b 8
+b 2
+b 0
+b 2
+b 3
+b 2
+b 2
+b 33
+b 87
+b 88
+b 92
+b 32
+b 1
+b 145
+b 151
+b 152
+b 157
+b 158
+b 151
+b 1
+b 154
+b 2
+b 52
+b 51
+b 1
+b 258
+b 260
+b 262
+b 269
+b 262
+b 1
+b 265
+b 1
+b 93
+b 94
+b 24
+b 45
+b 46
+b 99
+b 100
+b 111
+b 45
+b 2
+b 95
+b 2
+b 107
+b 1
+b 21
+b 1
+b 9
+b 71
+b 72
+b 23
+b 24
+b 30
+b 31
+b 37
+b 22
+b 1
+b 29
+b 2
+b 32
+b 1
+b 22
+b 46
+b 47
+b 46
+b 2
+b 20
+b 1
+b 26
+b 27
+b 26
+b 2
+b 27
+b 56
+b 56
+b 1
+b 26
+b 27
+b 28
+b 4
+b 5
+b 10
+b 4
+b 1
+b 7
+b 1
+b 87
+b 99
+b 100
+b 86
+b 2
+b 95
+b 2
+b 48
+b 49
+b 76
+b 77
+b 48
+b 2
+b 73
+b 1
+b 0
+b 2
+b 45
+b 54
+b 55
+b 63
+b 42
+b 1
+b 36
+b 37
+b 36
+b 2
+b 1
+b 0
+b 1
+b 14
+b 23
+b 24
+b 3
+b 25
+b 2
+b 2
+b 37
+b 51
+b 52
+b 54
+b 55
+b 2
+b 96
+b 103
+b 126
+b 129
+b 130
+b 136
+b 138
+b 139
+b 94
+b 2
+b 127
+b 1
+b 10
+b 41
+b 45
+b 46
+b 62
+b 63
+b 65
+b 10
+b 1
+b 43
+b 1
+b 7
+b 20
+b 21
+b 23
+b 24
+b 6
+b 2
+b 17
+b 1
+b 12
+b 3
+b 140
+b 144
+b 145
+b 169
+b 171
+b 173
+b 175
+b 176
+b 178
+b 180
+b 144
+b 2
+b 171
+b 2
+b 5
+b 15
+b 53
+b 54
+b 56
+b 58
+b 59
+b 52
+b 1
+b 57
+b 2
+b 6
+b 4
+b 1
+b 1
+b 99
+b 101
+b 27
+b 26
+b 1
+b 90
+b 97
+b 98
+b 115
+b 116
+b 126
+b 174
+b 97
+b 1
+b 112
+b 2
+b 170
+b 1
+b 9
+b 10
+b 12
+b 13
+b 15
+b 17
+b 19
+b 25
+b 26
+b 28
+b 33
+b 7
+b 2
+b 10
+b 2
+b 21
+b 2
+b 73
+b 216
+b 217
+b 72
+b 2
+b 18
+b 17
+b 1
+b 89
+b 91
+b 92
+b 153
+b 154
+b 156
+b 153
+b 2
+b 2
+b 0
+b 1
+b 87
+b 10
+b 6
+b 8
+b 9
+b 66
+b 65
+b 1
+b 3
+b 4
+b 6
+b 1
+b 2
+b 3
+b 5
+b 6
+b 89
+b 90
+b 99
+b 101
+b 103
+b 7
+b 24
+b 40
+b 41
+b 202
+b 38
+b 2
+b 198
+b 2
+b 23
+b 1
+b 97
+b 105
+b 106
+b 108
+b 114
+b 143
+b 145
+b 156
+b 157
+b 157
+b 1
+b 7
+b 4
+b 1
+b 5
+b 6
+b 3
+b 2
+b 0
+b 2
+b 3
+b 5
+b 0
+b 2
+b 103
+b 8
+b 10
+b 11
+b 18
+b 20
+b 8
+b 2
+b 18
+b 1
+b 19
+b 23
+b 24
+b 21
+b 2
+b 18
+b 1
+b 3
+b 5
+b 6
+b 13
+b 5
+b 1
+b 38
+b 44
+b 45
+b 58
+b 44
+b 1
+b 54
+b 1
+b 11
+b 128
+b 130
+b 131
+b 135
+b 41
+b 52
+b 53
+b 55
+b 75
+b 39
+b 2
+b 72
+b 1
+b 20
+b 25
+b 26
+b 29
+b 30
+b 36
+b 25
+b 4
+b 1
+b 23
+b 0
+b 1
+b 19
+b 1
+b 20
+b 20
+b 1
+b 10
+b 11
+b 21
+b 7
+b 4
+b 13
+b 14
+b 16
+b 18
+b 19
+b 29
+b 18
+b 2
+b 25
+b 1
+b 73
+b 103
+b 104
+b 106
+b 108
+b 108
+b 1
+b 100
+b 1
+b 26
+b 28
+b 29
+b 28
+b 2
+b 2
+b 4
+b 5
+b 23
+b 4
+b 1
+b 22
+b 24
+b 33
+b 34
+b 36
+b 37
+b 20
+b 1
+b 32
+b 3
+b 6
+b 7
+b 30
+b 6
+b 1
+b 9
+b 8
+b 2
+b 8
+b 9
+b 16
+b 18
+b 18
+b 1
+b 76
+b 93
+b 94
+b 265
+b 38
+b 44
+b 45
+b 55
+b 42
+b 2
+b 52
+b 1
+b 226
+b 2
+b 120
+b 128
+b 129
+b 131
+b 132
+b 134
+b 142
+b 128
+b 3
+b 131
+b 1
+b 136
+b 1
+b 40
+b 9
+b 76
+b 3
+b 4
+b 6
+b 181
+b 4
+b 17
+b 23
+b 24
+b 26
+b 27
+b 29
+b 31
+b 37
+b 16
+b 2
+b 19
+b 2
+b 22
+b 2
+b 17
+b 18
+b 32
+b 16
+b 1
+b 4
+b 8
+b 1
+b 1
+b 1
+b 68
+b 77
+b 87
+b 88
+b 94
+b 76
+b 2
+b 83
+b 2
+b 89
+b 1
+b 10
+b 54
+b 7
+b 9
+b 10
+b 16
+b 17
+b 14
+b 2
+b 15
+b 1
+b 67
+b 36
+b 37
+b 39
+b 56
+b 36
+b 2
+b 52
+b 1
+b 2
+b 3
+b 2
+b 4
+b 246
+b 248
+b 12
+b 14
+b 15
+b 17
+b 12
+b 2
+b 15
+b 1
+b 63
+b 64
+b 85
+b 87
+b 85
+b 1
+b 41
+b 143
+b 149
+b 141
+b 1
+b 0
+b 1
+b 12
+b 0
+b 1
+b 290
+b 100
+b 101
+b 3
+b 4
+b 6
+b 3
+b 2
+b 125
+b 124
+b 1
+b 2
+b 17
+b 18
+b 57
+b 15
+b 2
+b 54
+b 2
+b 95
+b 130
+b 131
+b 133
+b 134
+b 139
+b 129
+b 1
+b 133
+b 1
+b 41
+b 16
+b 21
+b 22
+b 41
+b 42
+b 67
+b 16
+b 1
+b 19
+b 1
+b 0
+b 2
+b 44
+b 1
+b 5
+b 6
+b 8
+b 10
+b 12
+b 3
+b 2
+b 0
+b 1
+b 1
+b 65
+b 66
+b 72
+b 86
+b 65
+b 2
+b 82
+b 1
+b 68
+b 1
+b 18
+b 38
+b 28
+b 29
+b 40
+b 41
+b 47
+b 162
+b 163
+b 169
+b 26
+b 2
+b 38
+b 2
+b 158
+b 2
+b 41
+b 1
+b 159
+b 1
+b 197
+b 210
+b 212
+b 64
+b 66
+b 100
+b 101
+b 116
+b 62
+b 1
+b 99
+b 1
+b 221
+b 223
+b 218
+b 1
+b 40
+b 70
+b 71
+b 81
+b 82
+b 68
+b 2
+b 79
+b 2
+b 39
+b 1
+b 24
+b 35
+b 38
+b 39
+b 35
+b 3
+b 21
+b 1
+b 2
+b 3
+b 6
+b 6
+b 1
+b 8
+b 9
+b 15
+b 16
+b 36
+b 7
+b 1
+b 114
+b 115
+b 117
+b 114
+b 2
+b 20
+b 33
+b 34
+b 33
+b 2
+b 0
+b 34
+b 33
+b 1
+b 19
+b 20
+b 17
+b 2
+b 24
+b 25
+b 51
+b 53
+b 153
+b 154
+b 156
+b 157
+b 153
+b 3
+b 87
+b 91
+b 36
+b 42
+b 36
+b 1
+b 39
+b 1
+b 6
+b 7
+b 23
+b 4
+b 2
+b 20
+b 1
+b 3
+b 30
+b 1
+b 3
+b 27
+b 88
+b 89
+b 91
+b 93
+b 87
+b 1
+b 92
+b 1
+b 3
+b 4
+b 23
+b 22
+b 1
+b 5
+b 6
+b 5
+b 2
+b 3
+b 2
+b 1
+b 23
+b 25
+b 26
+b 23
+b 2
+b 31
+b 32
+b 44
+b 31
+b 2
+b 40
+b 1
+b 52
+b 53
+b 75
+b 76
+b 83
+b 74
+b 1
+b 82
+b 1
+b 155
+b 10
+b 17
+b 19
+b 21
+b 22
+b 24
+b 26
+b 19
+b 2
+b 24
+b 1
+b 1
+b 237
+b 239
+b 240
+b 239
+b 2
+b 113
+b 115
+b 115
+b 1
+b 98
+b 100
+b 101
+b 103
+b 105
+b 100
+b 2
+b 27
+b 26
+b 2
+b 3
+b 24
+b 25
+b 27
+b 27
+b 1
+b 14
+b 13
+b 1
+b 34
+b 57
+b 58
+b 60
+b 62
+b 57
+b 2
+b 9
+b 6
+b 1
+b 32
+b 0
+b 9
+b 10
+b 12
+b 14
+b 15
+b 22
+b 0
+b 1
+b 7
+b 1
+b 15
+b 16
+b 18
+b 19
+b 21
+b 14
+b 1
+b 1
+b 0
+b 1
+b 36
+b 5
+b 16
+b 18
+b 19
+b 21
+b 22
+b 5
+b 1
+b 15
+b 2
+b 18
+b 2
+b 1
+b 3
+b 5
+b 7
+b 8
+b 10
+b 12
+b 37
+b 5
+b 2
+b 10
+b 1
+b 245
+b 246
+b 248
+b 262
+b 243
+b 2
+b 259
+b 1
+b 3
+b 4
+b 10
+b 1
+b 2
+b 7
+b 1
+b 112
+b 129
+b 131
+b 133
+b 203
+b 205
+b 232
+b 234
+b 231
+b 3
+b 200
+b 1
+b 374
+b 376
+b 378
+b 379
+b 381
+b 376
+b 2
+b 379
+b 1
+b 47
+b 73
+b 74
+b 114
+b 115
+b 73
+b 2
+b 110
+b 2
+b 44
+b 1
+b 117
+b 115
+b 1
+b 20
+b 11
+b 16
+b 17
+b 19
+b 16
+b 2
+b 8
+b 1
+b 0
+b 1
+b 5
+b 109
+b 166
+b 174
+b 172
+b 2
+b 165
+b 1
+b 45
+b 46
+b 82
+b 84
+b 85
+b 98
+b 99
+b 84
+b 2
+b 94
+b 2
+b 79
+b 1
+b 7
+b 9
+b 5
+b 1
+b 15
+b 40
+b 41
+b 43
+b 48
+b 619
+b 621
+b 778
+b 779
+b 621
+b 1
+b 777
+b 1
+b 16
+b 17
+b 217
+b 218
+b 220
+b 222
+b 23
+b 25
+b 23
+b 2
+b 14
+b 49
+b 51
+b 52
+b 49
+b 2
+b 39
+b 37
+b 2
+b 110
+b 112
+b 113
+b 108
+b 1
+b 14
+b 49
+b 53
+b 54
+b 60
+b 61
+b 60
+b 1
+b 29
+b 27
+b 1
+b 71
+b 76
+b 77
+b 85
+b 86
+b 75
+b 1
+b 84
+b 1
+b 15
+b 9
+b 180
+b 182
+b 183
+b 180
+b 2
+b 51
+b 49
+b 2
+b 20
+b 50
+b 52
+b 53
+b 52
+b 1
+b 24
+b 35
+b 34
+b 1
+b 38
+b 46
+b 58
+b 59
+b 67
+b 23
+b 30
+b 21
+b 2
+b 3
+b 2
+b 3
+b 5
+b 2
+b 2
+b 51
+b 190
+b 208
+b 230
+b 232
+b 233
+b 235
+b 188
+b 3
+b 232
+b 1
+b 202
+b 1
+b 153
+b 164
+b 165
+b 152
+b 1
+b 24
+b 25
+b 23
+b 28
+b 44
+b 46
+b 47
+b 46
+b 2
+b 26
+b 1
+b 30
+b 46
+b 27
+b 1
+b 7
+b 18
+b 19
+b 18
+b 2
+b 7
+b 8
+b 55
+b 57
+b 58
+b 5
+b 2
+b 14
+b 72
+b 73
+b 86
+b 87
+b 91
+b 70
+b 2
+b 84
+b 2
+b 13
+b 1
+b 83
+b 1
+b 10
+b 136
+b 31
+b 33
+b 35
+b 36
+b 38
+b 40
+b 41
+b 43
+b 38
+b 2
+b 1
+b 123
+b 129
+b 130
+b 132
+b 154
+b 156
+b 157
+b 177
+b 121
+b 2
+b 127
+b 2
+b 49
+b 9
+b 10
+b 22
+b 8
+b 1
+b 20
+b 2
+b 0
+b 1
+b 22
+b 38
+b 39
+b 44
+b 36
+b 2
+b 162
+b 21
+b 18
+b 1
+b 13
+b 11
+b 2
+b 34
+b 35
+b 37
+b 32
+b 2
+b 35
+b 1
+b 17
+b 14
+b 1
+b 98
+b 99
+b 124
+b 97
+b 1
+b 122
+b 2
+b 14
+b 50
+b 52
+b 53
+b 63
+b 748
+b 750
+b 752
+b 753
+b 763
+b 750
+b 2
+b 760
+b 1
+b 15
+b 266
+b 284
+b 264
+b 2
+b 2
+b 4
+b 5
+b 20
+b 32
+b 33
+b 30
+b 2
+b 20
+b 1
+b 10
+b 11
+b 16
+b 8
+b 2
+b 45
+b 47
+b 69
+b 70
+b 34
+b 102
+b 130
+b 132
+b 137
+b 138
+b 128
+b 1
+b 3
+b 4
+b 6
+b 2
+b 1
+b 71
+b 40
+b 41
+b 40
+b 1
+b 10
+b 11
+b 13
+b 10
+b 2
+b 160
+b 158
+b 2
+b 9
+b 10
+b 8
+b 1
+b 2
+b 3
+b 5
+b 24
+b 0
+b 2
+b 25
+b 3
+b 5
+b 7
+b 8
+b 15
+b 5
+b 2
+b 0
+b 1
+b 9
+b 0
+b 2
+b 5
+b 2
+b 23
+b 11
+b 15
+b 16
+b 15
+b 2
+b 9
+b 1
+b 6
+b 7
+b 24
+b 3
+b 1
+b 66
+b 72
+b 65
+b 2
+b 68
+b 1
+b 7
+b 19
+b 20
+b 19
+b 4
+b 0
+b 2
+b 3
+b 0
+b 2
+b 1
+b 69
+b 71
+b 72
+b 74
+b 75
+b 79
+b 71
+b 3
+b 16
+b 18
+b 57
+b 61
+b 62
+b 83
+b 61
+b 2
+b 79
+b 1
+b 48
+b 1
+b 3
+b 1
+b 1
+b 1
+b 2
+b 57
+b 43
+b 44
+b 57
+b 60
+b 61
+b 43
+b 1
+b 55
+b 5
+b 4
+b 83
+b 81
+b 2
+b 5
+b 7
+b 8
+b 7
+b 1
+b 3
+b 4
+b 6
+b 8
+b 0
+b 2
+b 3
+b 25
+b 23
+b 1
+b 55
+b 105
+b 108
+b 109
+b 137
+b 138
+b 140
+b 108
+b 1
+b 134
+b 2
+b 147
+b 145
+b 2
+b 4
+b 6
+b 7
+b 9
+b 10
+b 12
+b 13
+b 20
+b 9
+b 3
+b 17
+b 1
+b 5
+b 60
+b 59
+b 1
+b 23
+b 30
+b 32
+b 33
+b 60
+b 61
+b 505
+b 44
+b 46
+b 47
+b 49
+b 46
+b 2
+b 29
+b 30
+b 27
+b 2
+b 0
+b 2
+b 3
+b 5
+b 2
+b 1
+b 13
+b 8
+b 15
+b 16
+b 18
+b 19
+b 14
+b 1
+b 14
+b 12
+b 2
+b 49
+b 50
+b 55
+b 48
+b 1
+b 31
+b 32
+b 32
+b 1
+b 8
+b 14
+b 12
+b 1
+b 10
+b 55
+b 7
+b 1
+b 54
+b 55
+b 61
+b 62
+b 68
+b 54
+b 2
+b 57
+b 2
+b 63
+b 1
+b 25
+b 27
+b 29
+b 30
+b 27
+b 2
+b 507
+b 505
+b 2
+b 173
+b 174
+b 176
+b 198
+b 200
+b 172
+b 1
+b 5
+b 24
+b 25
+b 27
+b 45
+b 24
+b 2
+b 41
+b 1
+b 38
+b 16
+b 18
+b 19
+b 14
+b 1
+b 180
+b 181
+b 178
+b 2
+b 16
+b 14
+b 1
+b 34
+b 8
+b 14
+b 0
+b 33
+b 32
+b 1
+b 27
+b 28
+b 27
+b 2
+b 79
+b 89
+b 89
+b 1
+b 26
+b 48
+b 49
+b 51
+b 53
+b 54
+b 24
+b 1
+b 47
+b 2
+b 5
+b 7
+b 19
+b 21
+b 22
+b 39
+b 19
+b 2
+b 6
+b 4
+b 2
+b 39
+b 7
+b 9
+b 10
+b 13
+b 14
+b 21
+b 22
+b 24
+b 7
+b 2
+b 11
+b 2
+b 16
+b 1
+b 29
+b 31
+b 35
+b 40
+b 33
+b 2
+b 52
+b 90
+b 50
+b 2
+b 43
+b 44
+b 46
+b 41
+b 2
+b 126
+b 13
+b 14
+b 18
+b 41
+b 17
+b 1
+b 2
+b 3
+b 22
+b 19
+b 1
+b 125
+b 126
+b 128
+b 125
+b 2
+b 7
+b 97
+b 98
+b 100
+b 102
+b 95
+b 2
+b 100
+b 1
+b 71
+b 72
+b 28
+b 72
+b 73
+b 75
+b 72
+b 2
+b 13
+b 11
+b 2
+b 52
+b 73
+b 74
+b 71
+b 2
+b 2
+b 3
+b 0
+b 2
+b 4
+b 4
+b 1
+b 25
+b 47
+b 49
+b 51
+b 52
+b 51
+b 1
+b 0
+b 2
+b 4
+b 4
+b 1
+b 7
+b 5
+b 1
+b 79
+b 81
+b 82
+b 84
+b 86
+b 76
+b 1
+b 10
+b 14
+b 15
+b 41
+b 42
+b 40
+b 1
+b 36
+b 34
+b 1
+b 42
+b 66
+b 55
+b 56
+b 58
+b 79
+b 58
+b 1
+b 76
+b 1
+b 24
+b 30
+b 31
+b 73
+b 74
+b 76
+b 81
+b 73
+b 2
+b 77
+b 2
+b 1
+b 31
+b 108
+b 109
+b 126
+b 147
+b 148
+b 145
+b 2
+b 125
+b 1
+b 144
+b 1
+b 12
+b 9
+b 11
+b 12
+b 22
+b 23
+b 24
+b 20
+b 4
+b 6
+b 1
+b 1
+b 0
+b 1
+b 55
+b 56
+b 66
+b 67
+b 98
+b 55
+b 2
+b 61
+b 1
+b 5
+b 112
+b 114
+b 156
+b 165
+b 166
+b 168
+b 169
+b 171
+b 164
+b 1
+b 170
+b 1
+b 9
+b 14
+b 15
+b 17
+b 19
+b 20
+b 37
+b 13
+b 1
+b 20
+b 47
+b 57
+b 58
+b 135
+b 136
+b 162
+b 163
+b 183
+b 134
+b 1
+b 161
+b 2
+b 178
+b 1
+b 87
+b 98
+b 102
+b 104
+b 105
+b 107
+b 108
+b 85
+b 1
+b 96
+b 97
+b 99
+b 94
+b 2
+b 97
+b 1
+b 51
+b 10
+b 11
+b 14
+b 46
+b 47
+b 49
+b 45
+b 1
+b 82
+b 80
+b 1
+b 6
+b 8
+b 9
+b 6
+b 2
+b 155
+b 17
+b 22
+b 23
+b 112
+b 112
+b 1
+b 116
+b 40
+b 41
+b 88
+b 89
+b 91
+b 3
+b 51
+b 1
+b 25
+b 26
+b 2
+b 3
+b 18
+b 19
+b 51
+b 56
+b 17
+b 1
+b 54
+b 2
+b 44
+b 51
+b 52
+b 32
+b 33
+b 5
+b 4
+b 1
+b 3
+b 9
+b 11
+b 12
+b 17
+b 11
+b 1
+b 14
+b 2
+b 5
+b 10
+b 11
+b 19
+b 15
+b 21
+b 23
+b 24
+b 30
+b 32
+b 14
+b 2
+b 19
+b 2
+b 78
+b 85
+b 86
+b 88
+b 85
+b 2
+b 75
+b 1
+b 16
+b 3
+b 8
+b 10
+b 2
+b 2
+b 4
+b 5
+b 7
+b 9
+b 10
+b 7
+b 2
+b 43
+b 42
+b 2
+b 8
+b 5
+b 1
+b 9
+b 11
+b 12
+b 25
+b 4
+b 12
+b 4
+b 1
+b 9
+b 1
+b 30
+b 39
+b 7
+b 8
+b 6
+b 1
+b 10
+b 11
+b 8
+b 2
+b 15
+b 16
+b 63
+b 32
+b 3
+b 4
+b 6
+b 8
+b 10
+b 2
+b 1
+b 7
+b 5
+b 1
+b 52
+b 54
+b 55
+b 59
+b 52
+b 2
+b 36
+b 34
+b 2
+b 10
+b 14
+b 13
+b 1
+b 6
+b 14
+b 15
+b 14
+b 1
+b 6
+b 21
+b 4
+b 2
+b 41
+b 47
+b 48
+b 50
+b 51
+b 47
+b 3
+b 38
+b 1
+b 39
+b 54
+b 55
+b 14
+b 16
+b 17
+b 12
+b 1
+b 2
+b 84
+b 90
+b 91
+b 98
+b 99
+b 88
+b 2
+b 96
+b 2
+b 83
+b 1
+b 7
+b 3
+b 4
+b 2
+b 1
+b 125
+b 126
+b 133
+b 125
+b 1
+b 130
+b 3
+b 6
+b 5
+b 1
+b 13
+b 96
+b 137
+b 139
+b 140
+b 148
+b 139
+b 2
+b 94
+b 1
+b 6
+b 8
+b 9
+b 6
+b 2
+b 3
+b 4
+b 6
+b 8
+b 3
+b 2
+b 76
+b 83
+b 130
+b 132
+b 133
+b 145
+b 132
+b 1
+b 142
+b 2
+b 39
+b 173
+b 174
+b 217
+b 218
+b 223
+b 224
+b 173
+b 2
+b 213
+b 2
+b 219
+b 1
+b 36
+b 1
+b 9
+b 86
+b 115
+b 116
+b 118
+b 119
+b 115
+b 3
+b 30
+b 117
+b 123
+b 124
+b 29
+b 2
+b 115
+b 1
+b 118
+b 2
+b 23
+b 22
+b 1
+b 4
+b 2
+b 3
+b 1
+b 2
+b 4
+b 5
+b 12
+b 0
+b 1
+b 4
+b 1
+b 3
+b 8
+b 8
+b 46
+b 47
+b 49
+b 46
+b 2
+b 6
+b 4
+b 2
+b 14
+b 24
+b 25
+b 50
+b 51
+b 68
+b 69
+b 75
+b 24
+b 1
+b 47
+b 2
+b 65
+b 2
+b 68
+b 1
+b 2
+b 32
+b 33
+b 32
+b 1
+b 3
+b 2
+b 1
+b 161
+b 159
+b 1
+b 2
+b 3
+b 17
+b 19
+b 21
+b 2
+b 2
+b 29
+b 45
+b 46
+b 10
+b 221
+b 246
+b 248
+b 249
+b 253
+b 252
+b 2
+b 219
+b 1
+b 75
+b 76
+b 5
+b 21
+b 21
+b 1
+b 19
+b 21
+b 22
+b 21
+b 2
+b 0
+b 1
+b 3
+b 5
+b 7
+b 0
+b 2
+b 12
+b 13
+b 5
+b 6
+b 4
+b 1
+b 2
+b 4
+b 4
+b 1
+b 96
+b 26
+b 27
+b 140
+b 161
+b 65
+b 66
+b 71
+b 66
+b 1
+b 39
+b 41
+b 42
+b 39
+b 2
+b 11
+b 6
+b 37
+b 38
+b 43
+b 44
+b 62
+b 63
+b 87
+b 43
+b 1
+b 59
+b 2
+b 83
+b 1
+b 68
+b 67
+b 1
+b 57
+b 58
+b 68
+b 57
+b 2
+b 63
+b 1
+b 9
+b 185
+b 185
+b 1
+b 129
+b 130
+b 129
+b 2
+b 9
+b 8
+b 1
+b 93
+b 94
+b 121
+b 123
+b 125
+b 126
+b 128
+b 123
+b 2
+b 62
+b 46
+b 48
+b 50
+b 51
+b 53
+b 46
+b 1
+b 15
+b 0
+b 1
+b 190
+b 65
+b 66
+b 77
+b 78
+b 84
+b 85
+b 64
+b 1
+b 76
+b 2
+b 79
+b 2
+b 79
+b 76
+b 1
+b 18
+b 18
+b 1
+b 2
+b 3
+b 11
+b 12
+b 14
+b 18
+b 0
+b 2
+b 9
+b 2
+b 50
+b 51
+b 53
+b 54
+b 59
+b 60
+b 98
+b 53
+b 1
+b 56
+b 2
+b 11
+b 15
+b 8
+b 1
+b 46
+b 4
+b 5
+b 4
+b 1
+b 3
+b 4
+b 7
+b 0
+b 48
+b 50
+b 51
+b 53
+b 57
+b 58
+b 60
+b 65
+b 57
+b 2
+b 61
+b 2
+b 86
+b 88
+b 89
+b 86
+b 2
+b 19
+b 8
+b 14
+b 15
+b 17
+b 6
+b 2
+b 43
+b 45
+b 46
+b 52
+b 43
+b 2
+b 50
+b 1
+b 8
+b 9
+b 11
+b 61
+b 143
+b 144
+b 155
+b 141
+b 2
+b 152
+b 1
+b 130
+b 136
+b 137
+b 159
+b 130
+b 1
+b 133
+b 2
+b 18
+b 25
+b 26
+b 45
+b 46
+b 55
+b 23
+b 2
+b 43
+b 2
+b 17
+b 1
+b 47
+b 1
+b 6
+b 0
+b 1
+b 16
+b 17
+b 19
+b 1
+b 153
+b 154
+b 153
+b 2
+b 3
+b 4
+b 6
+b 8
+b 8
+b 5
+b 1
+b 43
+b 92
+b 93
+b 92
+b 1
+b 113
+b 114
+b 116
+b 113
+b 2
+b 72
+b 55
+b 57
+b 59
+b 61
+b 62
+b 64
+b 66
+b 55
+b 1
+b 7
+b 25
+b 25
+b 1
+b 4
+b 5
+b 3
+b 4
+b 6
+b 3
+b 2
+b 145
+b 146
+b 148
+b 151
+b 145
+b 2
+b 5
+b 3
+b 1
+b 14
+b 90
+b 21
+b 0
+b 6
+b 7
+b 9
+b 10
+b 12
+b 9
+b 2
+b 196
+b 235
+b 236
+b 238
+b 240
+b 246
+b 238
+b 1
+b 8
+b 68
+b 66
+b 1
+b 14
+b 1
+b 2
+b 11
+b 13
+b 14
+b 16
+b 18
+b 1
+b 2
+b 7
+b 1
+b 130
+b 129
+b 1
+b 6
+b 13
+b 12
+b 2
+b 0
+b 1
+b 9
+b 95
+b 120
+b 121
+b 120
+b 1
+b 629
+b 630
+b 782
+b 783
+b 629
+b 2
+b 781
+b 1
+b 2
+b 116
+b 118
+b 120
+b 121
+b 118
+b 2
+b 120
+b 122
+b 117
+b 1
+b 1
+b 2
+b 1
+b 2
+b 14
+b 14
+b 1
+b 16
+b 17
+b 26
+b 27
+b 16
+b 2
+b 22
+b 2
+b 17
+b 18
+b 17
+b 2
+b 2
+b 0
+b 1
+b 79
+b 85
+b 86
+b 122
+b 11
+b 20
+b 21
+b 36
+b 38
+b 40
+b 41
+b 20
+b 1
+b 37
+b 2
+b 1
+b 0
+b 2
+b 6
+b 65
+b 66
+b 71
+b 9
+b 11
+b 88
+b 105
+b 111
+b 112
+b 114
+b 109
+b 2
+b 87
+b 1
+b 102
+b 1
+b 24
+b 63
+b 17
+b 22
+b 23
+b 15
+b 1
+b 21
+b 1
+b 3
+b 4
+b 262
+b 270
+b 271
+b 273
+b 275
+b 276
+b 288
+b 325
+b 260
+b 2
+b 268
+b 2
+b 348
+b 350
+b 351
+b 359
+b 350
+b 2
+b 355
+b 1
+b 36
+b 38
+b 83
+b 6
+b 7
+b 14
+b 15
+b 35
+b 6
+b 1
+b 11
+b 2
+b 140
+b 141
+b 143
+b 138
+b 2
+b 141
+b 1
+b 55
+b 8
+b 1
+b 44
+b 53
+b 54
+b 71
+b 72
+b 42
+b 1
+b 52
+b 1
+b 1
+b 15
+b 5
+b 14
+b 15
+b 17
+b 8
+b 10
+b 11
+b 8
+b 2
+b 27
+b 25
+b 2
+b 15
+b 16
+b 30
+b 31
+b 38
+b 29
+b 1
+b 36
+b 2
+b 50
+b 62
+b 13
+b 15
+b 28
+b 29
+b 27
+b 1
+b 2
+b 3
+b 2
+b 2
+b 2
+b 1
+b 1
+b 246
+b 256
+b 258
+b 259
+b 289
+b 290
+b 244
+b 2
+b 256
+b 1
+b 99
+b 101
+b 100
+b 1
+b 30
+b 31
+b 2
+b 295
+b 296
+b 313
+b 314
+b 295
+b 1
+b 310
+b 2
+b 27
+b 40
+b 25
+b 1
+b 12
+b 158
+b 160
+b 161
+b 158
+b 2
+b 8
+b 10
+b 11
+b 8
+b 2
+b 13
+b 10
+b 1
+b 52
+b 65
+b 66
+b 73
+b 75
+b 77
+b 65
+b 1
+b 70
+b 1
+b 72
+b 3
+b 4
+b 6
+b 8
+b 9
+b 17
+b 18
+b 8
+b 1
+b 14
+b 2
+b 2
+b 2
+b 1
+b 16
+b 2
+b 3
+b 27
+b 33
+b 34
+b 25
+b 1
+b 32
+b 1
+b 29
+b 143
+b 144
+b 154
+b 155
+b 157
+b 27
+b 1
+b 142
+b 2
+b 149
+b 2
+b 1
+b 33
+b 44
+b 45
+b 47
+b 62
+b 32
+b 2
+b 41
+b 1
+b 285
+b 286
+b 288
+b 289
+b 291
+b 293
+b 295
+b 285
+b 3
+b 292
+b 1
+b 64
+b 61
+b 1
+b 3
+b 14
+b 13
+b 1
+b 21
+b 23
+b 24
+b 26
+b 28
+b 29
+b 26
+b 2
+b 17
+b 120
+b 125
+b 126
+b 134
+b 125
+b 2
+b 130
+b 1
+b 7
+b 5
+b 1
+b 124
+b 124
+b 1
+b 23
+b 24
+b 21
+b 2
+b 13
+b 12
+b 1
+b 64
+b 66
+b 78
+b 84
+b 64
+b 1
+b 154
+b 159
+b 186
+b 187
+b 189
+b 191
+b 192
+b 191
+b 2
+b 66
+b 67
+b 75
+b 66
+b 1
+b 144
+b 164
+b 165
+b 181
+b 186
+b 164
+b 2
+b 177
+b 2
+b 15
+b 16
+b 18
+b 23
+b 15
+b 2
+b 5
+b 14
+b 15
+b 0
+b 1
+b 3
+b 23
+b 43
+b 44
+b 46
+b 46
+b 1
+b 50
+b 52
+b 54
+b 55
+b 52
+b 2
+b 70
+b 104
+b 112
+b 114
+b 115
+b 103
+b 2
+b 110
+b 2
+b 328
+b 334
+b 335
+b 342
+b 333
+b 1
+b 340
+b 2
+b 29
+b 29
+b 1
+b 20
+b 22
+b 18
+b 1
+b 8
+b 10
+b 12
+b 13
+b 15
+b 16
+b 12
+b 3
+b 117
+b 135
+b 136
+b 135
+b 1
+b 22
+b 21
+b 1
+b 4
+b 6
+b 6
+b 1
+b 114
+b 115
+b 117
+b 119
+b 112
+b 2
+b 117
+b 1
+b 5
+b 63
+b 78
+b 77
+b 1
+b 2
+b 3
+b 11
+b 118
+b 120
+b 121
+b 127
+b 128
+b 127
+b 1
+b 46
+b 44
+b 1
+b 21
+b 19
+b 2
+b 35
+b 36
+b 38
+b 39
+b 55
+b 63
+b 33
+b 2
+b 36
+b 1
+b 30
+b 6
+b 7
+b 4
+b 2
+b 24
+b 25
+b 27
+b 29
+b 24
+b 2
+b 21
+b 19
+b 3
+b 102
+b 102
+b 1
+b 2
+b 3
+b 17
+b 18
+b 20
+b 0
+b 2
+b 15
+b 2
+b 2
+b 6
+b 7
+b 2
+b 4
+b 15
+b 17
+b 18
+b 24
+b 26
+b 28
+b 29
+b 15
+b 2
+b 1
+b 0
+b 1
+b 28
+b 62
+b 69
+b 53
+b 54
+b 56
+b 52
+b 1
+b 55
+b 1
+b 153
+b 167
+b 168
+b 11
+b 32
+b 2
+b 3
+b 12
+b 13
+b 17
+b 18
+b 25
+b 1
+b 1
+b 11
+b 2
+b 69
+b 70
+b 72
+b 85
+b 1
+b 8
+b 9
+b 0
+b 2
+b 5
+b 1
+b 6
+b 1
+b 16
+b 18
+b 5
+b 4
+b 2
+b 14
+b 15
+b 13
+b 12
+b 1
+b 33
+b 34
+b 33
+b 2
+b 45
+b 46
+b 61
+b 60
+b 1
+b 19
+b 70
+b 75
+b 76
+b 78
+b 79
+b 75
+b 3
+b 82
+b 81
+b 2
+b 87
+b 89
+b 85
+b 1
+b 262
+b 268
+b 335
+b 336
+b 345
+b 268
+b 1
+b 332
+b 2
+b 341
+b 1
+b 38
+b 40
+b 41
+b 43
+b 6
+b 5
+b 1
+b 1
+b 10
+b 25
+b 38
+b 37
+b 1
+b 53
+b 0
+b 16
+b 17
+b 19
+b 21
+b 22
+b 24
+b 25
+b 26
+b 21
+b 5
+b 655
+b 657
+b 24
+b 25
+b 27
+b 24
+b 2
+b 154
+b 153
+b 2
+b 2
+b 3
+b 5
+b 6
+b 5
+b 1
+b 66
+b 70
+b 5
+b 73
+b 74
+b 72
+b 1
+b 3
+b 4
+b 13
+b 362
+b 368
+b 369
+b 124
+b 125
+b 124
+b 1
+b 3
+b 9
+b 1
+b 1
+b 26
+b 27
+b 28
+b 57
+b 58
+b 57
+b 2
+b 14
+b 15
+b 17
+b 14
+b 2
+b 251
+b 252
+b 358
+b 360
+b 361
+b 363
+b 251
+b 2
+b 356
+b 2
+b 9
+b 11
+b 75
+b 74
+b 2
+b 15
+b 77
+b 86
+b 88
+b 89
+b 88
+b 1
+b 189
+b 194
+b 195
+b 214
+b 216
+b 217
+b 194
+b 1
+b 211
+b 30
+b 38
+b 39
+b 41
+b 42
+b 55
+b 56
+b 41
+b 1
+b 52
+b 2
+b 12
+b 30
+b 10
+b 2
+b 0
+b 9
+b 6
+b 1
+b 2
+b 23
+b 25
+b 22
+b 3
+b 142
+b 140
+b 2
+b 4
+b 5
+b 21
+b 23
+b 24
+b 30
+b 49
+b 28
+b 29
+b 27
+b 1
+b 21
+b 24
+b 21
+b 3
+b 742
+b 32
+b 30
+b 2
+b 32
+b 34
+b 35
+b 2
+b 3
+b 13
+b 2
+b 2
+b 8
+b 1
+b 68
+b 70
+b 66
+b 1
+b 18
+b 22
+b 16
+b 1
+b 13
+b 20
+b 209
+b 210
+b 214
+b 19
+b 2
+b 205
+b 2
+b 209
+b 1
+b 37
+b 107
+b 108
+b 116
+b 118
+b 107
+b 2
+b 114
+b 3
+b 34
+b 1
+b 13
+b 20
+b 31
+b 5
+b 6
+b 32
+b 34
+b 236
+b 237
+b 239
+b 106
+b 110
+b 111
+b 169
+b 2
+b 2
+b 1
+b 3
+b 4
+b 2
+b 1
+b 37
+b 38
+b 71
+b 69
+b 1
+b 5
+b 6
+b 4
+b 1
+b 6
+b 2
+b 10
+b 11
+b 33
+b 34
+b 47
+b 88
+b 8
+b 2
+b 31
+b 2
+b 1
+b 1
+b 39
+b 1
+b 61
+b 36
+b 38
+b 39
+b 45
+b 38
+b 2
+b 41
+b 1
+b 22
+b 21
+b 1
+b 10
+b 18
+b 20
+b 22
+b 10
+b 1
+b 15
+b 1
+b 13
+b 12
+b 1
+b 13
+b 14
+b 19
+b 20
+b 2
+b 4
+b 6
+b 8
+b 23
+b 27
+b 28
+b 8
+b 1
+b 20
+b 2
+b 29
+b 10
+b 12
+b 10
+b 2
+b 1
+b 2
+b 10
+b 11
+b 0
+b 1
+b 9
+b 3
+b 137
+b 139
+b 140
+b 153
+b 154
+b 156
+b 157
+b 164
+b 182
+b 139
+b 2
+b 149
+b 2
+b 134
+b 1
+b 151
+b 1
+b 27
+b 126
+b 128
+b 132
+b 128
+b 1
+b 129
+b 1
+b 11
+b 12
+b 14
+b 15
+b 11
+b 3
+b 1
+b 35
+b 4
+b 5
+b 9
+b 10
+b 23
+b 4
+b 1
+b 16
+b 14
+b 2
+b 190
+b 196
+b 189
+b 1
+b 28
+b 29
+b 35
+b 79
+b 79
+b 1
+b 1
+b 9
+b 10
+b 54
+b 55
+b 29
+b 30
+b 32
+b 29
+b 2
+b 32
+b 33
+b 37
+b 53
+b 32
+b 2
+b 33
+b 1
+b 147
+b 148
+b 150
+b 146
+b 1
+b 149
+b 1
+b 12
+b 16
+b 17
+b 27
+b 9
+b 11
+b 13
+b 24
+b 7
+b 1
+b 23
+b 1
+b 46
+b 60
+b 61
+b 13
+b 14
+b 16
+b 18
+b 12
+b 1
+b 17
+b 1
+b 29
+b 38
+b 27
+b 2
+b 10
+b 11
+b 14
+b 15
+b 8
+b 2
+b 12
+b 2
+b 11
+b 9
+b 1
+b 10
+b 8
+b 1
+b 110
+b 112
+b 113
+b 110
+b 2
+b 237
+b 10
+b 11
+b 22
+b 53
+b 54
+b 56
+b 52
+b 1
+b 93
+b 95
+b 96
+b 93
+b 2
+b 28
+b 35
+b 8
+b 38
+b 45
+b 47
+b 49
+b 50
+b 61
+b 60
+b 2
+b 36
+b 1
+b 212
+b 85
+b 86
+b 88
+b 84
+b 1
+b 83
+b 84
+b 108
+b 81
+b 2
+b 0
+b 0
+b 1
+b 119
+b 120
+b 124
+b 118
+b 1
+b 2
+b 2
+b 3
+b 7
+b 2
+b 2
+b 134
+b 172
+b 132
+b 1
+b 0
+b 1
+b 3
+b 5
+b 6
+b 11
+b 7
+b 11
+b 13
+b 14
+b 11
+b 2
+b 9
+b 7
+b 2
+b 55
+b 55
+b 1
+b 295
+b 296
+b 295
+b 2
+b 121
+b 122
+b 129
+b 0
+b 1
+b 9
+b 8
+b 2
+b 33
+b 35
+b 7
+b 9
+b 10
+b 5
+b 1
+b 9
+b 1
+b 0
+b 1
+b 7
+b 2
+b 3
+b 44
+b 46
+b 48
+b 72
+b 0
+b 2
+b 69
+b 1
+b 11
+b 5
+b 11
+b 12
+b 14
+b 16
+b 17
+b 19
+b 20
+b 24
+b 14
+b 2
+b 17
+b 2
+b 18
+b 1
+b 29
+b 5
+b 35
+b 37
+b 38
+b 55
+b 56
+b 33
+b 1
+b 54
+b 1
+b 12
+b 60
+b 62
+b 63
+b 81
+b 62
+b 2
+b 76
+b 1
+b 115
+b 117
+b 118
+b 133
+b 132
+b 2
+b 24
+b 7
+b 0
+b 2
+b 8
+b 9
+b 6
+b 3
+b 50
+b 50
+b 1
+b 8
+b 9
+b 12
+b 82
+b 81
+b 1
+b 15
+b 17
+b 18
+b 20
+b 21
+b 17
+b 3
+b 4
+b 26
+b 35
+b 39
+b 41
+b 4
+b 6
+b 8
+b 9
+b 17
+b 18
+b 19
+b 2
+b 1
+b 7
+b 1
+b 10
+b 26
+b 27
+b 29
+b 8
+b 48
+b 46
+b 1
+b 45
+b 47
+b 48
+b 51
+b 45
+b 2
+b 49
+b 50
+b 58
+b 32
+b 30
+b 1
+b 0
+b 2
+b 3
+b 11
+b 12
+b 20
+b 30
+b 32
+b 33
+b 0
+b 2
+b 9
+b 2
+b 28
+b 4
+b 14
+b 1
+b 1
+b 119
+b 135
+b 43
+b 50
+b 48
+b 2
+b 42
+b 1
+b 48
+b 49
+b 51
+b 52
+b 54
+b 55
+b 63
+b 65
+b 48
+b 3
+b 51
+b 2
+b 56
+b 1
+b 13
+b 10
+b 1
+b 3
+b 115
+b 117
+b 118
+b 127
+b 129
+b 129
+b 1
+b 112
+b 1
+b 0
+b 2
+b 3
+b 4
+b 0
+b 4
+b 23
+b 27
+b 28
+b 30
+b 25
+b 2
+b 28
+b 1
+b 127
+b 126
+b 1
+b 34
+b 38
+b 39
+b 46
+b 47
+b 49
+b 50
+b 38
+b 1
+b 43
+b 2
+b 46
+b 2
+b 19
+b 27
+b 28
+b 47
+b 0
+b 2
+b 14
+b 15
+b 0
+b 48
+b 5
+b 6
+b 22
+b 11
+b 10
+b 1
+b 295
+b 296
+b 306
+b 294
+b 1
+b 2
+b 16
+b 17
+b 2
+b 1
+b 13
+b 2
+b 41
+b 31
+b 32
+b 38
+b 40
+b 80
+b 82
+b 83
+b 85
+b 38
+b 40
+b 25
+b 39
+b 40
+b 42
+b 24
+b 1
+b 17
+b 132
+b 77
+b 103
+b 104
+b 110
+b 101
+b 2
+b 76
+b 1
+b 105
+b 1
+b 11
+b 15
+b 21
+b 22
+b 24
+b 25
+b 20
+b 1
+b 18
+b 0
+b 2
+b 0
+b 1
+b 219
+b 226
+b 238
+b 239
+b 241
+b 225
+b 2
+b 234
+b 2
+b 88
+b 95
+b 96
+b 95
+b 2
+b 86
+b 1
+b 54
+b 54
+b 1
+b 14
+b 15
+b 17
+b 26
+b 27
+b 24
+b 2
+b 50
+b 47
+b 1
+b 91
+b 120
+b 121
+b 127
+b 128
+b 90
+b 2
+b 116
+b 2
+b 123
+b 2
+b 1
+b 18
+b 19
+b 18
+b 1
+b 4
+b 36
+b 37
+b 51
+b 52
+b 57
+b 58
+b 63
+b 64
+b 37
+b 1
+b 48
+b 2
+b 54
+b 2
+b 57
+b 1
+b 27
+b 6
+b 7
+b 7
+b 1
+b 14
+b 15
+b 12
+b 2
+b 1
+b 0
+b 1
+b 342
+b 348
+b 349
+b 349
+b 1
+b 40
+b 41
+b 62
+b 38
+b 2
+b 116
+b 20
+b 22
+b 23
+b 25
+b 34
+b 35
+b 51
+b 49
+b 1
+b 76
+b 77
+b 84
+b 85
+b 76
+b 2
+b 81
+b 1
+b 92
+b 38
+b 7
+b 8
+b 27
+b 7
+b 129
+b 133
+b 134
+b 140
+b 131
+b 2
+b 132
+b 1
+b 76
+b 78
+b 80
+b 81
+b 86
+b 87
+b 118
+b 74
+b 1
+b 79
+b 2
+b 82
+b 1
+b 2
+b 3
+b 0
+b 55
+b 57
+b 59
+b 59
+b 1
+b 216
+b 239
+b 213
+b 1
+b 23
+b 21
+b 3
+b 6
+b 8
+b 9
+b 11
+b 12
+b 8
+b 3
+b 58
+b 66
+b 77
+b 79
+b 80
+b 58
+b 1
+b 63
+b 2
+b 143
+b 68
+b 66
+b 2
+b 3
+b 0
+b 1
+b 3
+b 4
+b 3
+b 36
+b 38
+b 33
+b 1
+b 49
+b 50
+b 52
+b 53
+b 55
+b 47
+b 2
+b 2
+b 0
+b 2
+b 31
+b 29
+b 1
+b 108
+b 11
+b 12
+b 14
+b 16
+b 17
+b 23
+b 14
+b 2
+b 35
+b 50
+b 51
+b 33
+b 1
+b 49
+b 2
+b 10
+b 11
+b 4
+b 36
+b 42
+b 43
+b 40
+b 2
+b 35
+b 1
+b 9
+b 15
+b 14
+b 1
+b 2
+b 4
+b 5
+b 2
+b 3
+b 8
+b 2
+b 1
+b 5
+b 1
+b 12
+b 33
+b 34
+b 36
+b 37
+b 10
+b 2
+b 34
+b 1
+b 52
+b 5
+b 45
+b 137
+b 136
+b 2
+b 26
+b 27
+b 29
+b 33
+b 26
+b 2
+b 280
+b 282
+b 284
+b 285
+b 310
+b 311
+b 278
+b 1
+b 283
+b 2
+b 305
+b 2
+b 42
+b 39
+b 1
+b 53
+b 54
+b 56
+b 82
+b 83
+b 90
+b 91
+b 53
+b 2
+b 78
+b 2
+b 86
+b 2
+b 38
+b 40
+b 36
+b 1
+b 72
+b 74
+b 84
+b 85
+b 72
+b 1
+b 25
+b 82
+b 87
+b 88
+b 94
+b 95
+b 81
+b 2
+b 84
+b 1
+b 2
+b 3
+b 5
+b 21
+b 23
+b 35
+b 33
+b 1
+b 0
+b 1
+b 3
+b 5
+b 6
+b 7
+b 0
+b 2
+b 72
+b 94
+b 72
+b 1
+b 98
+b 98
+b 1
+b 92
+b 91
+b 2
+b 0
+b 2
+b 3
+b 5
+b 7
+b 9
+b 11
+b 9
+b 1
+b 27
+b 28
+b 30
+b 31
+b 30
+b 1
+b 11
+b 1
+b 29
+b 48
+b 49
+b 88
+b 47
+b 1
+b 87
+b 1
+b 0
+b 1
+b 5
+b 187
+b 3
+b 4
+b 3
+b 1
+b 7
+b 5
+b 1
+b 3
+b 31
+b 351
+b 353
+b 355
+b 356
+b 360
+b 361
+b 367
+b 353
+b 2
+b 358
+b 2
+b 361
+b 1
+b 99
+b 100
+b 18
+b 10
+b 12
+b 13
+b 23
+b 25
+b 12
+b 1
+b 20
+b 1
+b 21
+b 37
+b 38
+b 37
+b 2
+b 1
+b 7
+b 8
+b 9
+b 1
+b 0
+b 1
+b 22
+b 24
+b 25
+b 39
+b 22
+b 2
+b 38
+b 40
+b 42
+b 43
+b 45
+b 45
+b 1
+b 16
+b 13
+b 1
+b 153
+b 166
+b 167
+b 174
+b 175
+b 172
+b 2
+b 23
+b 21
+b 1
+b 80
+b 81
+b 99
+b 78
+b 2
+b 97
+b 1
+b 10
+b 11
+b 20
+b 22
+b 24
+b 26
+b 10
+b 2
+b 16
+b 1
+b 13
+b 12
+b 1
+b 12
+b 54
+b 55
+b 73
+b 74
+b 12
+b 1
+b 51
+b 2
+b 70
+b 1
+b 9
+b 11
+b 7
+b 8
+b 10
+b 16
+b 81
+b 83
+b 84
+b 86
+b 87
+b 89
+b 90
+b 95
+b 86
+b 3
+b 15
+b 15
+b 1
+b 97
+b 95
+b 2
+b 151
+b 192
+b 30
+b 31
+b 33
+b 6
+b 107
+b 109
+b 111
+b 112
+b 121
+b 107
+b 1
+b 26
+b 28
+b 30
+b 31
+b 39
+b 30
+b 2
+b 35
+b 1
+b 7
+b 15
+b 59
+b 3
+b 4
+b 6
+b 7
+b 17
+b 18
+b 20
+b 22
+b 3
+b 3
+b 14
+b 2
+b 1
+b 208
+b 209
+b 211
+b 213
+b 214
+b 217
+b 211
+b 2
+b 215
+b 1
+b 19
+b 36
+b 38
+b 53
+b 54
+b 53
+b 2
+b 33
+b 1
+b 35
+b 85
+b 100
+b 101
+b 103
+b 104
+b 103
+b 2
+b 83
+b 1
+b 6
+b 10
+b 9
+b 1
+b 187
+b 188
+b 213
+b 214
+b 216
+b 227
+b 187
+b 1
+b 16
+b 26
+b 27
+b 9
+b 446
+b 460
+b 461
+b 463
+b 445
+b 2
+b 456
+b 2
+b 168
+b 144
+b 143
+b 2
+b 18
+b 20
+b 21
+b 18
+b 2
+b 10
+b 15
+b 16
+b 41
+b 5
+b 6
+b 8
+b 10
+b 11
+b 3
+b 2
+b 8
+b 1
+b 4
+b 2
+b 1
+b 13
+b 389
+b 389
+b 1
+b 42
+b 43
+b 45
+b 46
+b 42
+b 3
+b 10
+b 12
+b 14
+b 16
+b 14
+b 3
+b 26
+b 25
+b 1
+b 20
+b 21
+b 84
+b 18
+b 2
+b 17
+b 16
+b 1
+b 6
+b 7
+b 9
+b 18
+b 26
+b 27
+b 33
+b 34
+b 17
+b 2
+b 22
+b 2
+b 0
+b 96
+b 97
+b 99
+b 101
+b 121
+b 123
+b 124
+b 123
+b 1
+b 28
+b 0
+b 72
+b 69
+b 1
+b 37
+b 38
+b 37
+b 1
+b 3
+b 4
+b 11
+b 12
+b 1
+b 2
+b 9
+b 3
+b 10
+b 5
+b 1
+b 14
+b 0
+b 2
+b 9
+b 1
+b 5
+b 7
+b 8
+b 10
+b 38
+b 39
+b 47
+b 7
+b 2
+b 35
+b 1
+b 253
+b 254
+b 275
+b 284
+b 286
+b 288
+b 289
+b 253
+b 2
+b 286
+b 2
+b 271
+b 1
+b 1
+b 8
+b 0
+b 1
+b 90
+b 29
+b 98
+b 58
+b 64
+b 65
+b 63
+b 1
+b 45
+b 46
+b 63
+b 43
+b 2
+b 60
+b 1
+b 7
+b 18
+b 19
+b 33
+b 34
+b 37
+b 38
+b 48
+b 18
+b 1
+b 30
+b 2
+b 34
+b 2
+b 41
+b 1
+b 9
+b 29
+b 30
+b 32
+b 34
+b 35
+b 120
+b 32
+b 2
+b 117
+b 2
+b 81
+b 78
+b 1
+b 38
+b 40
+b 41
+b 38
+b 2
+b 71
+b 41
+b 91
+b 92
+b 108
+b 114
+b 91
+b 2
+b 104
+b 3
+b 38
+b 1
+b 105
+b 1
+b 21
+b 117
+b 128
+b 129
+b 131
+b 161
+b 162
+b 182
+b 128
+b 2
+b 157
+b 2
+b 178
+b 1
+b 46
+b 53
+b 58
+b 59
+b 61
+b 51
+b 2
+b 22
+b 34
+b 36
+b 19
+b 1
+b 31
+b 33
+b 34
+b 38
+b 39
+b 73
+b 31
+b 2
+b 36
+b 2
+b 66
+b 1
+b 9
+b 15
+b 16
+b 15
+b 2
+b 6
+b 1
+b 10
+b 11
+b 19
+b 20
+b 24
+b 158
+b 7
+b 26
+b 48
+b 24
+b 2
+b 6
+b 1
+b 1
+b 2
+b 4
+b 1
+b 3
+b 95
+b 97
+b 98
+b 108
+b 115
+b 116
+b 95
+b 2
+b 0
+b 22
+b 22
+b 1
+b 96
+b 94
+b 3
+b 12
+b 13
+b 11
+b 1
+b 12
+b 1
+b 2
+b 4
+b 34
+b 3
+b 4
+b 1
+b 3
+b 4
+b 1
+b 2
+b 34
+b 32
+b 1
+b 70
+b 18
+b 20
+b 21
+b 24
+b 25
+b 20
+b 4
+b 15
+b 1
+b 37
+b 35
+b 1
+b 156
+b 174
+b 176
+b 178
+b 179
+b 181
+b 183
+b 185
+b 186
+b 183
+b 2
+b 3
+b 1
+b 2
+b 2
+b 8
+b 9
+b 11
+b 1
+b 64
+b 64
+b 1
+b 23
+b 27
+b 28
+b 30
+b 21
+b 2
+b 168
+b 192
+b 196
+b 198
+b 199
+b 201
+b 202
+b 196
+b 2
+b 199
+b 2
+b 4
+b 3
+b 2
+b 135
+b 142
+b 141
+b 2
+b 35
+b 40
+b 41
+b 37
+b 1
+b 2
+b 3
+b 4
+b 114
+b 26
+b 34
+b 35
+b 37
+b 34
+b 2
+b 0
+b 167
+b 171
+b 172
+b 171
+b 1
+b 1
+b 58
+b 72
+b 73
+b 86
+b 84
+b 1
+b 73
+b 1
+b 26
+b 25
+b 2
+b 4
+b 65
+b 64
+b 1
+b 72
+b 73
+b 75
+b 72
+b 2
+b 30
+b 31
+b 33
+b 35
+b 36
+b 40
+b 30
+b 2
+b 0
+b 270
+b 25
+b 27
+b 29
+b 30
+b 41
+b 29
+b 1
+b 22
+b 1
+b 110
+b 108
+b 3
+b 35
+b 0
+b 2
+b 4
+b 0
+b 1
+b 422
+b 144
+b 141
+b 1
+b 0
+b 6
+b 0
+b 1
+b 3
+b 1
+b 0
+b 1
+b 3
+b 0
+b 3
+b 113
+b 61
+b 70
+b 71
+b 93
+b 94
+b 61
+b 1
+b 68
+b 1
+b 91
+b 2
+b 1
+b 64
+b 80
+b 81
+b 83
+b 85
+b 90
+b 88
+b 1
+b 27
+b 25
+b 2
+b 20
+b 22
+b 23
+b 20
+b 2
+b 12
+b 14
+b 15
+b 81
+b 83
+b 84
+b 83
+b 2
+b 19
+b 16
+b 1
+b 10
+b 57
+b 55
+b 3
+b 41
+b 39
+b 3
+b 9
+b 13
+b 13
+b 1
+b 8
+b 9
+b 7
+b 1
+b 42
+b 44
+b 45
+b 68
+b 67
+b 2
+b 2
+b 3
+b 9
+b 1
+b 1
+b 129
+b 130
+b 137
+b 138
+b 127
+b 2
+b 135
+b 1
+b 3
+b 75
+b 72
+b 1
+b 19
+b 54
+b 52
+b 3
+b 19
+b 1
+b 122
+b 124
+b 125
+b 122
+b 2
+b 27
+b 97
+b 95
+b 3
+b 9
+b 8
+b 1
+b 0
+b 2
+b 3
+b 5
+b 0
+b 2
+b 3
+b 1
+b 5
+b 57
+b 59
+b 60
+b 65
+b 68
+b 59
+b 1
+b 62
+b 1
+b 216
+b 99
+b 100
+b 98
+b 1
+b 2
+b 121
+b 130
+b 132
+b 133
+b 133
+b 1
+b 8
+b 6
+b 2
+b 71
+b 89
+b 90
+b 92
+b 94
+b 92
+b 1
+b 2
+b 9
+b 10
+b 17
+b 19
+b 20
+b 17
+b 2
+b 25
+b 29
+b 31
+b 32
+b 29
+b 2
+b 1
+b 0
+b 2
+b 38
+b 40
+b 42
+b 43
+b 45
+b 47
+b 48
+b 45
+b 2
+b 1
+b 0
+b 2
+b 310
+b 5
+b 0
+b 2
+b 3
+b 5
+b 7
+b 8
+b 7
+b 1
+b 11
+b 12
+b 18
+b 33
+b 9
+b 2
+b 30
+b 2
+b 60
+b 65
+b 66
+b 65
+b 1
+b 9
+b 10
+b 16
+b 9
+b 2
+b 12
+b 1
+b 120
+b 122
+b 123
+b 125
+b 126
+b 130
+b 122
+b 3
+b 6
+b 5
+b 2
+b 9
+b 8
+b 1
+b 43
+b 3
+b 3
+b 1
+b 52
+b 53
+b 61
+b 62
+b 63
+b 51
+b 1
+b 6
+b 4
+b 6
+b 7
+b 10
+b 11
+b 6
+b 4
+b 24
+b 23
+b 1
+b 0
+b 2
+b 59
+b 96
+b 97
+b 2
+b 10
+b 11
+b 1
+b 1
+b 0
+b 2
+b 4
+b 19
+b 20
+b 69
+b 19
+b 2
+b 0
+b 2
+b 2
+b 1
+b 13
+b 18
+b 20
+b 21
+b 5
+b 13
+b 20
+b 21
+b 2
+b 3
+b 41
+b 40
+b 1
+b 182
+b 184
+b 186
+b 187
+b 184
+b 2
+b 105
+b 115
+b 116
+b 115
+b 2
+b 15
+b 15
+b 1
+b 109
+b 107
+b 3
+b 11
+b 12
+b 14
+b 16
+b 9
+b 2
+b 14
+b 1
+b 18
+b 33
+b 34
+b 33
+b 1
+b 59
+b 63
+b 64
+b 74
+b 76
+b 61
+b 2
+b 58
+b 1
+b 60
+b 1
+b 5
+b 6
+b 13
+b 185
+b 7
+b 9
+b 10
+b 6
+b 1
+b 10
+b 11
+b 18
+b 8
+b 2
+b 15
+b 2
+b 214
+b 212
+b 2
+b 46
+b 48
+b 49
+b 57
+b 46
+b 2
+b 109
+b 127
+b 125
+b 2
+b 108
+b 1
+b 27
+b 28
+b 30
+b 32
+b 8
+b 9
+b 11
+b 13
+b 14
+b 19
+b 37
+b 13
+b 1
+b 16
+b 1
+b 24
+b 47
+b 51
+b 52
+b 54
+b 56
+b 57
+b 59
+b 61
+b 63
+b 49
+b 2
+b 54
+b 2
+b 46
+b 1
+b 58
+b 8
+b 29
+b 30
+b 32
+b 7
+b 1
+b 167
+b 74
+b 110
+b 112
+b 113
+b 73
+b 1
+b 1
+b 2
+b 3
+b 97
+b 162
+b 160
+b 1
+b 3
+b 4
+b 6
+b 8
+b 9
+b 16
+b 6
+b 2
+b 80
+b 81
+b 80
+b 2
+b 50
+b 48
+b 1
+b 7
+b 5
+b 1
+b 50
+b 71
+b 72
+b 71
+b 2
+b 47
+b 1
+b 2
+b 3
+b 5
+b 85
+b 2
+b 2
+b 0
+b 2
+b 28
+b 38
+b 39
+b 60
+b 61
+b 58
+b 2
+b 39
+b 1
+b 99
+b 4
+b 3
+b 2
+b 9
+b 2
+b 4
+b 5
+b 38
+b 46
+b 74
+b 21
+b 19
+b 1
+b 0
+b 1
+b 9
+b 10
+b 12
+b 14
+b 15
+b 0
+b 2
+b 5
+b 2
+b 16
+b 20
+b 21
+b 66
+b 18
+b 2
+b 15
+b 1
+b 0
+b 46
+b 54
+b 56
+b 58
+b 59
+b 61
+b 62
+b 69
+b 56
+b 2
+b 66
+b 2
+b 22
+b 4
+b 5
+b 7
+b 15
+b 47
+b 52
+b 53
+b 61
+b 44
+b 1
+b 21
+b 19
+b 1
+b 34
+b 33
+b 1
+b 50
+b 51
+b 50
+b 2
+b 8
+b 10
+b 11
+b 15
+b 6
+b 1
+b 87
+b 85
+b 2
+b 16
+b 32
+b 8
+b 9
+b 6
+b 2
+b 7
+b 1
+b 2
+b 6
+b 2
+b 4
+b 5
+b 7
+b 2
+b 2
+b 5
+b 1
+b 1
+b 10
+b 20
+b 21
+b 86
+b 87
+b 117
+b 10
+b 1
+b 17
+b 2
+b 83
+b 1
+b 312
+b 314
+b 316
+b 310
+b 1
+b 0
+b 1
+b 3
+b 3
+b 1
+b 3
+b 20
+b 21
+b 23
+b 51
+b 20
+b 2
+b 46
+b 1
+b 9
+b 15
+b 16
+b 28
+b 29
+b 38
+b 13
+b 2
+b 26
+b 2
+b 8
+b 1
+b 67
+b 65
+b 1
+b 27
+b 29
+b 30
+b 44
+b 46
+b 47
+b 44
+b 2
+b 151
+b 153
+b 154
+b 156
+b 153
+b 2
+b 17
+b 15
+b 1
+b 32
+b 30
+b 1
+b 14
+b 16
+b 17
+b 59
+b 72
+b 74
+b 83
+b 84
+b 100
+b 74
+b 1
+b 81
+b 1
+b 5
+b 7
+b 8
+b 20
+b 20
+b 1
+b 38
+b 37
+b 1
+b 79
+b 88
+b 89
+b 94
+b 88
+b 1
+b 91
+b 1
+b 166
+b 168
+b 170
+b 171
+b 174
+b 12
+b 3
+b 5
+b 6
+b 0
+b 2
+b 4
+b 5
+b 11
+b 2
+b 2
+b 9
+b 1
+b 156
+b 6
+b 7
+b 9
+b 11
+b 12
+b 20
+b 21
+b 25
+b 27
+b 5
+b 1
+b 10
+b 2
+b 15
+b 2
+b 22
+b 1
+b 4
+b 6
+b 11
+b 12
+b 18
+b 19
+b 6
+b 1
+b 9
+b 1
+b 4
+b 261
+b 273
+b 24
+b 26
+b 27
+b 29
+b 24
+b 2
+b 27
+b 1
+b 10
+b 12
+b 14
+b 15
+b 27
+b 16
+b 25
+b 22
+b 1
+b 12
+b 14
+b 15
+b 35
+b 34
+b 2
+b 424
+b 426
+b 147
+b 148
+b 150
+b 150
+b 1
+b 123
+b 125
+b 126
+b 125
+b 1
+b 90
+b 99
+b 88
+b 2
+b 38
+b 48
+b 49
+b 28
+b 29
+b 26
+b 2
+b 0
+b 2
+b 3
+b 2
+b 1
+b 140
+b 147
+b 152
+b 153
+b 155
+b 156
+b 158
+b 160
+b 162
+b 138
+b 1
+b 151
+b 3
+b 158
+b 1
+b 157
+b 162
+b 163
+b 186
+b 188
+b 17
+b 18
+b 15
+b 16
+b 18
+b 27
+b 14
+b 1
+b 0
+b 6
+b 98
+b 99
+b 101
+b 103
+b 104
+b 136
+b 152
+b 101
+b 2
+b 133
+b 2
+b 2
+b 39
+b 38
+b 1
+b 5
+b 7
+b 8
+b 10
+b 12
+b 5
+b 2
+b 12
+b 13
+b 15
+b 17
+b 19
+b 10
+b 2
+b 1
+b 14
+b 15
+b 21
+b 14
+b 2
+b 17
+b 1
+b 22
+b 23
+b 25
+b 27
+b 9
+b 7
+b 1
+b 17
+b 25
+b 26
+b 24
+b 1
+b 16
+b 1
+b 120
+b 128
+b 173
+b 194
+b 195
+b 197
+b 224
+b 223
+b 1
+b 4
+b 2
+b 2
+b 51
+b 53
+b 48
+b 1
+b 3
+b 4
+b 9
+b 3
+b 1
+b 69
+b 100
+b 106
+b 107
+b 110
+b 111
+b 98
+b 3
+b 101
+b 2
+b 68
+b 1
+b 181
+b 231
+b 232
+b 234
+b 231
+b 2
+b 6
+b 4
+b 1
+b 2
+b 53
+b 54
+b 56
+b 58
+b 34
+b 45
+b 46
+b 77
+b 45
+b 1
+b 74
+b 1
+b 35
+b 51
+b 80
+b 1
+b 3
+b 4
+b 12
+b 13
+b 1
+b 2
+b 10
+b 2
+b 4
+b 0
+b 2
+b 2
+b 1
+b 82
+b 99
+b 100
+b 80
+b 2
+b 97
+b 1
+b 4
+b 24
+b 25
+b 0
+b 1
+b 67
+b 69
+b 65
+b 1
+b 26
+b 27
+b 29
+b 25
+b 1
+b 2
+b 3
+b 63
+b 7
+b 8
+b 10
+b 11
+b 13
+b 20
+b 7
+b 3
+b 4
+b 2
+b 2
+b 101
+b 100
+b 1
+b 2
+b 4
+b 5
+b 7
+b 15
+b 0
+b 1
+b 5
+b 14
+b 26
+b 27
+b 36
+b 37
+b 26
+b 2
+b 33
+b 1
+b 7
+b 25
+b 6
+b 1
+b 14
+b 30
+b 31
+b 39
+b 79
+b 81
+b 28
+b 2
+b 79
+b 1
+b 15
+b 16
+b 20
+b 15
+b 2
+b 16
+b 1
+b 1
+b 3
+b 4
+b 5
+b 15
+b 91
+b 92
+b 100
+b 102
+b 104
+b 104
+b 1
+b 135
+b 133
+b 3
+b 13
+b 18
+b 1
+b 2
+b 4
+b 5
+b 106
+b 108
+b 1
+b 3
+b 50
+b 3
+b 11
+b 12
+b 9
+b 2
+b 0
+b 18
+b 130
+b 131
+b 144
+b 145
+b 153
+b 154
+b 144
+b 1
+b 150
+b 2
+b 30
+b 28
+b 1
+b 54
+b 13
+b 15
+b 16
+b 18
+b 13
+b 2
+b 89
+b 90
+b 98
+b 100
+b 89
+b 2
+b 94
+b 1
+b 8
+b 32
+b 34
+b 35
+b 71
+b 72
+b 8
+b 1
+b 31
+b 2
+b 1
+b 3
+b 63
+b 61
+b 2
+b 45
+b 46
+b 52
+b 45
+b 1
+b 11
+b 9
+b 11
+b 12
+b 18
+b 19
+b 9
+b 2
+b 17
+b 1
+b 9
+b 6
+b 21
+b 23
+b 24
+b 26
+b 27
+b 44
+b 4
+b 2
+b 21
+b 3
+b 0
+b 6
+b 160
+b 38
+b 40
+b 106
+b 107
+b 109
+b 40
+b 1
+b 58
+b 83
+b 84
+b 118
+b 119
+b 81
+b 2
+b 116
+b 2
+b 57
+b 1
+b 128
+b 133
+b 132
+b 1
+b 4
+b 30
+b 32
+b 4
+b 1
+b 0
+b 1
+b 3
+b 0
+b 2
+b 5
+b 1
+b 73
+b 102
+b 103
+b 72
+b 2
+b 99
+b 1
+b 4
+b 10
+b 12
+b 13
+b 5
+b 28
+b 29
+b 28
+b 2
+b 2
+b 1
+b 11
+b 12
+b 30
+b 31
+b 11
+b 2
+b 25
+b 1
+b 16
+b 2
+b 8
+b 9
+b 4
+b 5
+b 28
+b 29
+b 31
+b 35
+b 36
+b 33
+b 3
+b 14
+b 37
+b 4
+b 6
+b 7
+b 16
+b 36
+b 38
+b 39
+b 2
+b 1
+b 37
+b 2
+b 32
+b 1
+b 12
+b 38
+b 72
+b 73
+b 75
+b 95
+b 0
+b 31
+b 63
+b 13
+b 14
+b 16
+b 18
+b 19
+b 12
+b 1
+b 17
+b 2
+b 3
+b 4
+b 2
+b 1
+b 226
+b 224
+b 2
+b 48
+b 64
+b 65
+b 81
+b 64
+b 1
+b 1
+b 23
+b 33
+b 39
+b 40
+b 37
+b 2
+b 1
+b 2
+b 0
+b 1
+b 133
+b 133
+b 1
+b 10
+b 25
+b 7
+b 1
+b 3
+b 5
+b 6
+b 8
+b 10
+b 5
+b 2
+b 4
+b 5
+b 7
+b 3
+b 1
+b 0
+b 2
+b 2
+b 1
+b 2
+b 0
+b 3
+b 19
+b 43
+b 45
+b 48
+b 49
+b 17
+b 1
+b 0
+b 1
+b 90
+b 89
+b 1
+b 134
+b 40
+b 39
+b 2
+b 6
+b 10
+b 11
+b 13
+b 14
+b 8
+b 2
+b 5
+b 1
+b 8
+b 42
+b 12
+b 18
+b 19
+b 15
+b 1
+b 2
+b 4
+b 5
+b 0
+b 1
+b 17
+b 1
+b 15
+b 17
+b 19
+b 20
+b 27
+b 17
+b 2
+b 54
+b 64
+b 66
+b 80
+b 81
+b 84
+b 80
+b 4
+b 51
+b 1
+b 122
+b 121
+b 1
+b 91
+b 92
+b 91
+b 1
+b 8
+b 10
+b 11
+b 0
+b 108
+b 108
+b 1
+b 14
+b 15
+b 90
+b 91
+b 12
+b 2
+b 88
+b 2
+b 19
+b 20
+b 36
+b 18
+b 1
+b 5
+b 7
+b 17
+b 21
+b 22
+b 5
+b 1
+b 0
+b 1
+b 17
+b 0
+b 1
+b 123
+b 129
+b 149
+b 150
+b 152
+b 123
+b 1
+b 126
+b 3
+b 144
+b 1
+b 37
+b 39
+b 40
+b 78
+b 19
+b 20
+b 22
+b 19
+b 2
+b 95
+b 94
+b 1
+b 1
+b 13
+b 14
+b 0
+b 43
+b 45
+b 47
+b 41
+b 1
+b 29
+b 30
+b 29
+b 2
+b 19
+b 20
+b 18
+b 1
+b 56
+b 57
+b 59
+b 53
+b 1
+b 4
+b 8
+b 9
+b 6
+b 2
+b 14
+b 12
+b 2
+b 20
+b 37
+b 34
+b 1
+b 11
+b 12
+b 133
+b 173
+b 174
+b 186
+b 289
+b 61
+b 62
+b 1
+b 0
+b 1
+b 7
+b 6
+b 2
+b 2
+b 7
+b 19
+b 20
+b 33
+b 19
+b 1
+b 30
+b 2
+b 6
+b 154
+b 156
+b 33
+b 34
+b 32
+b 1
+b 4
+b 3
+b 1
+b 11
+b 19
+b 20
+b 6
+b 7
+b 14
+b 6
+b 1
+b 40
+b 4
+b 20
+b 3
+b 2
+b 16
+b 1
+b 16
+b 17
+b 2
+b 8
+b 16
+b 44
+b 45
+b 52
+b 14
+b 1
+b 7
+b 1
+b 102
+b 103
+b 105
+b 106
+b 108
+b 112
+b 118
+b 119
+b 127
+b 173
+b 100
+b 2
+b 103
+b 2
+b 115
+b 1
+b 6
+b 8
+b 4
+b 1
+b 114
+b 115
+b 117
+b 113
+b 1
+b 53
+b 76
+b 52
+b 2
+b 3
+b 4
+b 6
+b 8
+b 8
+b 9
+b 11
+b 29
+b 11
+b 1
+b 65
+b 66
+b 65
+b 1
+b 1
+b 59
+b 60
+b 69
+b 71
+b 56
+b 1
+b 17
+b 16
+b 2
+b 1
+b 2
+b 8
+b 0
+b 1
+b 118
+b 127
+b 128
+b 116
+b 3
+b 123
+b 1
+b 25
+b 41
+b 42
+b 41
+b 3
+b 22
+b 1
+b 0
+b 1
+b 37
+b 14
+b 5
+b 6
+b 8
+b 10
+b 5
+b 2
+b 25
+b 26
+b 28
+b 29
+b 28
+b 3
+b 0
+b 2
+b 3
+b 21
+b 32
+b 33
+b 38
+b 40
+b 42
+b 44
+b 30
+b 2
+b 19
+b 53
+b 55
+b 56
+b 208
+b 209
+b 211
+b 19
+b 1
+b 52
+b 2
+b 44
+b 45
+b 57
+b 58
+b 85
+b 44
+b 2
+b 52
+b 1
+b 3
+b 1
+b 1
+b 2
+b 108
+b 106
+b 1
+b 121
+b 122
+b 136
+b 138
+b 119
+b 2
+b 136
+b 1
+b 9
+b 8
+b 1
+b 2
+b 4
+b 25
+b 27
+b 28
+b 25
+b 2
+b 104
+b 103
+b 1
+b 38
+b 39
+b 44
+b 45
+b 49
+b 51
+b 36
+b 2
+b 42
+b 2
+b 2
+b 35
+b 36
+b 38
+b 35
+b 2
+b 15
+b 12
+b 1
+b 79
+b 99
+b 105
+b 106
+b 116
+b 105
+b 2
+b 77
+b 1
+b 110
+b 1
+b 138
+b 140
+b 141
+b 146
+b 140
+b 1
+b 143
+b 2
+b 32
+b 34
+b 93
+b 28
+b 29
+b 31
+b 28
+b 2
+b 10
+b 8
+b 3
+b 2
+b 3
+b 1
+b 1
+b 4
+b 6
+b 41
+b 42
+b 39
+b 2
+b 3
+b 1
+b 1
+b 11
+b 33
+b 53
+b 54
+b 58
+b 51
+b 2
+b 32
+b 1
+b 0
+b 1
+b 3
+b 0
+b 2
+b 87
+b 98
+b 99
+b 101
+b 103
+b 18
+b 20
+b 21
+b 48
+b 49
+b 18
+b 2
+b 46
+b 2
+b 20
+b 19
+b 2
+b 8
+b 163
+b 180
+b 250
+b 179
+b 1
+b 245
+b 1
+b 6
+b 7
+b 9
+b 10
+b 6
+b 3
+b 82
+b 96
+b 312
+b 380
+b 400
+b 401
+b 378
+b 3
+b 396
+b 1
+b 311
+b 1
+b 5
+b 11
+b 12
+b 6
+b 7
+b 12
+b 13
+b 73
+b 72
+b 1
+b 57
+b 65
+b 54
+b 1
+b 19
+b 21
+b 23
+b 24
+b 58
+b 64
+b 66
+b 67
+b 69
+b 64
+b 2
+b 67
+b 1
+b 36
+b 36
+b 37
+b 0
+b 2
+b 24
+b 22
+b 1
+b 18
+b 20
+b 21
+b 7
+b 8
+b 10
+b 24
+b 7
+b 2
+b 21
+b 2
+b 9
+b 74
+b 86
+b 87
+b 72
+b 2
+b 85
+b 1
+b 30
+b 32
+b 49
+b 61
+b 60
+b 1
+b 21
+b 23
+b 24
+b 27
+b 29
+b 23
+b 3
+b 107
+b 109
+b 110
+b 109
+b 1
+b 4
+b 5
+b 4
+b 12
+b 10
+b 1
+b 23
+b 23
+b 1
+b 4
+b 5
+b 3
+b 1
+b 18
+b 0
+b 1
+b 7
+b 158
+b 158
+b 1
+b 4
+b 5
+b 7
+b 4
+b 2
+b 20
+b 21
+b 23
+b 4
+b 158
+b 31
+b 28
+b 1
+b 2
+b 3
+b 33
+b 34
+b 36
+b 37
+b 45
+b 2
+b 2
+b 29
+b 2
+b 33
+b 1
+b 85
+b 87
+b 28
+b 29
+b 28
+b 1
+b 10
+b 1
+b 5
+b 4
+b 4
+b 47
+b 0
+b 2
+b 4
+b 5
+b 16
+b 2
+b 2
+b 14
+b 1
+b 61
+b 83
+b 85
+b 86
+b 130
+b 85
+b 2
+b 58
+b 1
+b 43
+b 78
+b 79
+b 115
+b 131
+b 58
+b 60
+b 62
+b 63
+b 71
+b 60
+b 2
+b 68
+b 1
+b 75
+b 75
+b 1
+b 79
+b 80
+b 82
+b 84
+b 79
+b 2
+b 95
+b 104
+b 105
+b 170
+b 171
+b 168
+b 2
+b 50
+b 13
+b 25
+b 27
+b 28
+b 27
+b 38
+b 49
+b 50
+b 52
+b 49
+b 2
+b 0
+b 2
+b 3
+b 9
+b 0
+b 2
+b 7
+b 1
+b 42
+b 15
+b 16
+b 8
+b 9
+b 11
+b 8
+b 2
+b 3
+b 13
+b 14
+b 76
+b 97
+b 0
+b 35
+b 88
+b 89
+b 91
+b 93
+b 94
+b 96
+b 91
+b 2
+b 94
+b 1
+b 76
+b 27
+b 35
+b 36
+b 86
+b 87
+b 106
+b 107
+b 33
+b 2
+b 84
+b 2
+b 101
+b 1
+b 26
+b 1
+b 29
+b 39
+b 43
+b 44
+b 46
+b 47
+b 52
+b 58
+b 62
+b 56
+b 2
+b 51
+b 1
+b 31
+b 33
+b 35
+b 44
+b 45
+b 92
+b 51
+b 52
+b 178
+b 9
+b 16
+b 17
+b 304
+b 302
+b 2
+b 56
+b 3
+b 4
+b 6
+b 11
+b 12
+b 2
+b 1
+b 6
+b 15
+b 30
+b 67
+b 13
+b 14
+b 30
+b 12
+b 1
+b 60
+b 62
+b 63
+b 78
+b 62
+b 2
+b 5
+b 4
+b 4
+b 6
+b 12
+b 14
+b 16
+b 75
+b 76
+b 78
+b 79
+b 81
+b 16
+b 1
+b 72
+b 2
+b 75
+b 2
+b 118
+b 120
+b 121
+b 120
+b 1
+b 46
+b 45
+b 1
+b 12
+b 13
+b 83
+b 26
+b 27
+b 25
+b 1
+b 15
+b 66
+b 65
+b 2
+b 132
+b 134
+b 136
+b 138
+b 140
+b 141
+b 146
+b 147
+b 138
+b 2
+b 144
+b 2
+b 11
+b 11
+b 1
+b 10
+b 21
+b 22
+b 24
+b 26
+b 8
+b 1
+b 20
+b 2
+b 249
+b 256
+b 257
+b 295
+b 297
+b 295
+b 1
+b 305
+b 67
+b 68
+b 70
+b 71
+b 73
+b 74
+b 77
+b 97
+b 110
+b 67
+b 3
+b 70
+b 3
+b 89
+b 1
+b 91
+b 121
+b 122
+b 124
+b 125
+b 127
+b 153
+b 119
+b 2
+b 90
+b 1
+b 149
+b 1
+b 37
+b 65
+b 66
+b 76
+b 76
+b 1
+b 144
+b 144
+b 1
+b 27
+b 33
+b 34
+b 41
+b 32
+b 1
+b 0
+b 2
+b 3
+b 73
+b 103
+b 104
+b 106
+b 107
+b 71
+b 1
+b 102
+b 3
+b 65
+b 69
+b 62
+b 1
+b 98
+b 105
+b 106
+b 29
+b 43
+b 28
+b 1
+b 4
+b 6
+b 26
+b 32
+b 34
+b 35
+b 24
+b 2
+b 13
+b 14
+b 11
+b 2
+b 1
+b 29
+b 83
+b 89
+b 90
+b 92
+b 94
+b 95
+b 116
+b 117
+b 122
+b 127
+b 87
+b 2
+b 92
+b 1
+b 82
+b 1
+b 21
+b 102
+b 104
+b 105
+b 107
+b 108
+b 102
+b 2
+b 105
+b 1
+b 145
+b 143
+b 3
+b 32
+b 6
+b 7
+b 14
+b 6
+b 1
+b 1
+b 7
+b 6
+b 1
+b 89
+b 91
+b 92
+b 91
+b 1
+b 86
+b 1
+b 51
+b 318
+b 320
+b 321
+b 355
+b 356
+b 358
+b 66
+b 151
+b 24
+b 25
+b 8
+b 9
+b 22
+b 28
+b 27
+b 1
+b 13
+b 54
+b 55
+b 43
+b 43
+b 3
+b 13
+b 15
+b 16
+b 30
+b 31
+b 15
+b 1
+b 27
+b 2
+b 49
+b 10
+b 11
+b 13
+b 7
+b 1
+b 16
+b 137
+b 143
+b 136
+b 2
+b 139
+b 1
+b 42
+b 43
+b 74
+b 11
+b 23
+b 24
+b 4
+b 6
+b 2
+b 1
+b 61
+b 11
+b 12
+b 20
+b 21
+b 57
+b 55
+b 1
+b 28
+b 35
+b 36
+b 187
+b 188
+b 33
+b 2
+b 185
+b 2
+b 27
+b 1
+b 13
+b 10
+b 1
+b 23
+b 27
+b 36
+b 25
+b 1
+b 22
+b 1
+b 95
+b 94
+b 1
+b 31
+b 32
+b 40
+b 42
+b 43
+b 83
+b 206
+b 212
+b 213
+b 212
+b 1
+b 204
+b 1
+b 57
+b 215
+b 4
+b 5
+b 3
+b 1
+b 6
+b 4
+b 1
+b 6
+b 55
+b 56
+b 58
+b 53
+b 2
+b 56
+b 1
+b 6
+b 4
+b 2
+b 2
+b 5
+b 11
+b 30
+b 31
+b 33
+b 35
+b 37
+b 9
+b 2
+b 4
+b 1
+b 26
+b 28
+b 30
+b 31
+b 41
+b 30
+b 2
+b 37
+b 1
+b 0
+b 2
+b 12
+b 0
+b 1
+b 40
+b 10
+b 24
+b 25
+b 27
+b 24
+b 2
+b 0
+b 517
+b 6
+b 41
+b 42
+b 54
+b 55
+b 57
+b 58
+b 52
+b 2
+b 55
+b 2
+b 33
+b 33
+b 1
+b 99
+b 101
+b 102
+b 151
+b 152
+b 160
+b 161
+b 205
+b 99
+b 2
+b 149
+b 2
+b 154
+b 2
+b 199
+b 1
+b 97
+b 129
+b 130
+b 132
+b 95
+b 2
+b 127
+b 2
+b 12
+b 49
+b 70
+b 71
+b 78
+b 79
+b 48
+b 2
+b 67
+b 1
+b 102
+b 289
+b 6
+b 18
+b 19
+b 36
+b 17
+b 1
+b 26
+b 27
+b 26
+b 2
+b 87
+b 16
+b 22
+b 21
+b 2
+b 7
+b 4
+b 2
+b 1
+b 17
+b 34
+b 36
+b 37
+b 60
+b 36
+b 1
+b 15
+b 1
+b 79
+b 43
+b 42
+b 2
+b 10
+b 11
+b 79
+b 80
+b 8
+b 2
+b 77
+b 2
+b 2
+b 2
+b 1
+b 257
+b 259
+b 260
+b 259
+b 2
+b 2
+b 111
+b 170
+b 109
+b 1
+b 3
+b 1
+b 1
+b 10
+b 11
+b 13
+b 14
+b 10
+b 3
+b 27
+b 42
+b 43
+b 45
+b 46
+b 42
+b 3
+b 33
+b 34
+b 36
+b 39
+b 51
+b 36
+b 3
+b 0
+b 4
+b 6
+b 3
+b 1
+b 31
+b 32
+b 38
+b 39
+b 60
+b 29
+b 2
+b 36
+b 2
+b 28
+b 24
+b 25
+b 234
+b 232
+b 2
+b 2
+b 3
+b 8
+b 3
+b 1
+b 237
+b 245
+b 247
+b 248
+b 254
+b 234
+b 1
+b 251
+b 1
+b 113
+b 0
+b 2
+b 28
+b 30
+b 31
+b 6
+b 17
+b 15
+b 1
+b 6
+b 7
+b 12
+b 13
+b 6
+b 2
+b 9
+b 1
+b 3
+b 4
+b 6
+b 0
+b 107
+b 6
+b 7
+b 5
+b 4
+b 4
+b 12
+b 9
+b 1
+b 152
+b 152
+b 1
+b 10
+b 11
+b 10
+b 2
+b 90
+b 91
+b 90
+b 1
+b 0
+b 1
+b 7
+b 56
+b 60
+b 54
+b 3
+b 55
+b 1
+b 9
+b 10
+b 12
+b 13
+b 15
+b 55
+b 9
+b 3
+b 71
+b 75
+b 156
+b 157
+b 38
+b 39
+b 49
+b 38
+b 1
+b 46
+b 1
+b 53
+b 55
+b 56
+b 58
+b 98
+b 4
+b 58
+b 65
+b 66
+b 68
+b 189
+b 2
+b 3
+b 6
+b 12
+b 11
+b 1
+b 143
+b 142
+b 1
+b 55
+b 57
+b 59
+b 60
+b 59
+b 1
+b 61
+b 153
+b 158
+b 159
+b 161
+b 163
+b 164
+b 166
+b 157
+b 1
+b 165
+b 1
+b 0
+b 14
+b 12
+b 30
+b 31
+b 33
+b 35
+b 7
+b 6
+b 2
+b 7
+b 24
+b 25
+b 27
+b 28
+b 30
+b 24
+b 3
+b 14
+b 12
+b 1
+b 56
+b 64
+b 84
+b 85
+b 92
+b 63
+b 2
+b 80
+b 2
+b 87
+b 1
+b 469
+b 470
+b 479
+b 468
+b 1
+b 477
+b 2
+b 2
+b 29
+b 31
+b 32
+b 11
+b 13
+b 15
+b 16
+b 18
+b 29
+b 15
+b 2
+b 25
+b 1
+b 12
+b 11
+b 2
+b 6
+b 7
+b 3
+b 1
+b 116
+b 117
+b 119
+b 121
+b 2
+b 47
+b 54
+b 46
+b 1
+b 50
+b 1
+b 3
+b 5
+b 6
+b 8
+b 10
+b 69
+b 70
+b 16
+b 17
+b 70
+b 16
+b 1
+b 67
+b 1
+b 44
+b 73
+b 115
+b 116
+b 136
+b 137
+b 139
+b 140
+b 134
+b 2
+b 137
+b 1
+b 44
+b 17
+b 122
+b 39
+b 41
+b 42
+b 44
+b 46
+b 47
+b 53
+b 39
+b 2
+b 44
+b 2
+b 47
+b 2
+b 3
+b 10
+b 60
+b 72
+b 15
+b 24
+b 25
+b 27
+b 24
+b 2
+b 12
+b 1
+b 0
+b 2
+b 8
+b 0
+b 1
+b 10
+b 65
+b 66
+b 68
+b 74
+b 75
+b 65
+b 2
+b 0
+b 2
+b 4
+b 15
+b 25
+b 30
+b 12
+b 13
+b 15
+b 16
+b 11
+b 1
+b 14
+b 2
+b 14
+b 27
+b 26
+b 1
+b 106
+b 111
+b 112
+b 128
+b 129
+b 134
+b 135
+b 128
+b 1
+b 131
+b 2
+b 107
+b 105
+b 1
+b 13
+b 20
+b 21
+b 20
+b 2
+b 4
+b 5
+b 2
+b 2
+b 4
+b 10
+b 238
+b 242
+b 243
+b 242
+b 2
+b 236
+b 1
+b 10
+b 2
+b 4
+b 5
+b 2
+b 2
+b 9
+b 17
+b 18
+b 2
+b 2
+b 32
+b 4
+b 5
+b 7
+b 23
+b 37
+b 3
+b 4
+b 21
+b 2
+b 1
+b 9
+b 21
+b 22
+b 25
+b 26
+b 28
+b 29
+b 21
+b 4
+b 24
+b 1
+b 2
+b 141
+b 143
+b 144
+b 162
+b 139
+b 1
+b 3
+b 4
+b 6
+b 3
+b 2
+b 6
+b 16
+b 17
+b 4
+b 5
+b 7
+b 3
+b 1
+b 6
+b 1
+b 113
+b 22
+b 23
+b 25
+b 72
+b 73
+b 72
+b 1
+b 79
+b 77
+b 2
+b 18
+b 20
+b 29
+b 30
+b 38
+b 49
+b 50
+b 60
+b 61
+b 88
+b 47
+b 2
+b 3
+b 1
+b 1
+b 465
+b 464
+b 1
+b 37
+b 35
+b 3
+b 4
+b 5
+b 7
+b 7
+b 8
+b 20
+b 31
+b 40
+b 41
+b 48
+b 102
+b 104
+b 108
+b 110
+b 111
+b 100
+b 1
+b 109
+b 2
+b 151
+b 151
+b 1
+b 48
+b 50
+b 51
+b 53
+b 54
+b 56
+b 72
+b 48
+b 2
+b 54
+b 1
+b 9
+b 73
+b 75
+b 83
+b 84
+b 94
+b 95
+b 83
+b 2
+b 90
+b 3
+b 70
+b 1
+b 83
+b 84
+b 81
+b 2
+b 118
+b 116
+b 1
+b 119
+b 65
+b 67
+b 68
+b 70
+b 82
+b 84
+b 67
+b 2
+b 78
+b 1
+b 43
+b 49
+b 61
+b 62
+b 105
+b 107
+b 61
+b 1
+b 102
+b 1
+b 50
+b 52
+b 54
+b 55
+b 57
+b 59
+b 60
+b 62
+b 64
+b 65
+b 57
+b 2
+b 62
+b 1
+b 108
+b 104
+b 109
+b 111
+b 112
+b 123
+b 140
+b 141
+b 143
+b 144
+b 109
+b 2
+b 141
+b 1
+b 2
+b 7
+b 1
+b 133
+b 0
+b 53
+b 51
+b 2
+b 117
+b 5
+b 6
+b 8
+b 9
+b 24
+b 25
+b 3
+b 2
+b 6
+b 2
+b 19
+b 1
+b 2
+b 12
+b 14
+b 15
+b 12
+b 2
+b 4
+b 6
+b 109
+b 109
+b 1
+b 28
+b 54
+b 55
+b 63
+b 64
+b 63
+b 1
+b 20
+b 17
+b 1
+b 92
+b 144
+b 63
+b 64
+b 70
+b 63
+b 2
+b 66
+b 2
+b 7
+b 8
+b 17
+b 8
+b 1
+b 41
+b 43
+b 55
+b 56
+b 43
+b 1
+b 52
+b 2
+b 0
+b 1
+b 8
+b 0
+b 1
+b 239
+b 246
+b 247
+b 249
+b 251
+b 252
+b 254
+b 256
+b 258
+b 249
+b 2
+b 256
+b 1
+b 4
+b 76
+b 77
+b 79
+b 76
+b 2
+b 6
+b 4
+b 1
+b 0
+b 2
+b 2
+b 3
+b 25
+b 22
+b 1
+b 13
+b 14
+b 16
+b 18
+b 19
+b 27
+b 28
+b 61
+b 11
+b 2
+b 16
+b 2
+b 20
+b 1
+b 25
+b 34
+b 33
+b 1
+b 3
+b 8
+b 24
+b 25
+b 28
+b 24
+b 4
+b 58
+b 27
+b 28
+b 30
+b 31
+b 27
+b 3
+b 0
+b 55
+b 55
+b 1
+b 28
+b 44
+b 45
+b 55
+b 43
+b 3
+b 50
+b 1
+b 316
+b 322
+b 323
+b 325
+b 326
+b 328
+b 330
+b 346
+b 348
+b 349
+b 353
+b 322
+b 3
+b 327
+b 1
+b 342
+b 2
+b 160
+b 235
+b 26
+b 25
+b 2
+b 6
+b 7
+b 9
+b 11
+b 12
+b 11
+b 1
+b 119
+b 328
+b 327
+b 2
+b 34
+b 36
+b 37
+b 44
+b 45
+b 34
+b 2
+b 2
+b 16
+b 25
+b 65
+b 66
+b 68
+b 64
+b 1
+b 67
+b 1
+b 104
+b 121
+b 122
+b 121
+b 2
+b 102
+b 1
+b 19
+b 20
+b 17
+b 2
+b 15
+b 20
+b 18
+b 1
+b 44
+b 53
+b 54
+b 59
+b 61
+b 175
+b 177
+b 179
+b 180
+b 204
+b 203
+b 1
+b 24
+b 2
+b 4
+b 5
+b 33
+b 32
+b 1
+b 2
+b 3
+b 5
+b 121
+b 122
+b 124
+b 121
+b 2
+b 105
+b 31
+b 32
+b 50
+b 51
+b 53
+b 66
+b 50
+b 2
+b 62
+b 1
+b 89
+b 103
+b 104
+b 87
+b 2
+b 43
+b 44
+b 50
+b 51
+b 43
+b 2
+b 46
+b 2
+b 72
+b 85
+b 188
+b 97
+b 98
+b 100
+b 0
+b 2
+b 3
+b 5
+b 7
+b 0
+b 2
+b 5
+b 1
+b 26
+b 28
+b 29
+b 37
+b 38
+b 54
+b 56
+b 58
+b 26
+b 2
+b 35
+b 2
+b 48
+b 1
+b 73
+b 74
+b 82
+b 73
+b 1
+b 79
+b 3
+b 7
+b 8
+b 14
+b 15
+b 22
+b 7
+b 1
+b 19
+b 30
+b 31
+b 40
+b 30
+b 1
+b 84
+b 83
+b 2
+b 45
+b 46
+b 48
+b 49
+b 54
+b 2
+b 4
+b 2
+b 2
+b 255
+b 261
+b 262
+b 266
+b 272
+b 261
+b 2
+b 252
+b 1
+b 260
+b 1
+b 38
+b 70
+b 71
+b 79
+b 91
+b 102
+b 70
+b 1
+b 76
+b 1
+b 21
+b 23
+b 25
+b 26
+b 28
+b 30
+b 32
+b 30
+b 1
+b 22
+b 0
+b 27
+b 26
+b 1
+b 14
+b 15
+b 17
+b 12
+b 2
+b 15
+b 1
+b 5
+b 2
+b 3
+b 2
+b 1
+b 2
+b 3
+b 5
+b 5
+b 1
+b 3
+b 7
+b 28
+b 36
+b 37
+b 39
+b 43
+b 34
+b 2
+b 27
+b 1
+b 0
+b 1
+b 7
+b 36
+b 37
+b 43
+b 45
+b 47
+b 34
+b 4
+b 37
+b 1
+b 26
+b 29
+b 30
+b 29
+b 1
+b 24
+b 25
+b 42
+b 41
+b 1
+b 109
+b 117
+b 118
+b 132
+b 133
+b 140
+b 116
+b 1
+b 131
+b 2
+b 135
+b 3
+b 3
+b 2
+b 1
+b 117
+b 118
+b 123
+b 124
+b 123
+b 1
+b 2
+b 0
+b 1
+b 30
+b 151
+b 151
+b 1
+b 103
+b 104
+b 103
+b 2
+b 30
+b 353
+b 412
+b 414
+b 415
+b 0
+b 1
+b 15
+b 213
+b 224
+b 230
+b 231
+b 254
+b 255
+b 263
+b 230
+b 1
+b 58
+b 59
+b 104
+b 105
+b 57
+b 1
+b 0
+b 2
+b 2
+b 1
+b 45
+b 46
+b 48
+b 50
+b 51
+b 59
+b 50
+b 2
+b 42
+b 1
+b 53
+b 1
+b 13
+b 4
+b 6
+b 6
+b 1
+b 0
+b 1
+b 3
+b 5
+b 0
+b 2
+b 0
+b 1
+b 72
+b 74
+b 75
+b 80
+b 97
+b 98
+b 104
+b 74
+b 1
+b 77
+b 3
+b 19
+b 18
+b 1
+b 25
+b 27
+b 29
+b 30
+b 32
+b 37
+b 38
+b 23
+b 1
+b 28
+b 2
+b 1
+b 15
+b 56
+b 62
+b 63
+b 131
+b 132
+b 54
+b 3
+b 57
+b 2
+b 126
+b 1
+b 17
+b 19
+b 14
+b 1
+b 6
+b 7
+b 4
+b 2
+b 58
+b 3
+b 8
+b 9
+b 5
+b 1
+b 6
+b 7
+b 32
+b 5
+b 1
+b 33
+b 34
+b 83
+b 33
+b 2
+b 79
+b 2
+b 3
+b 52
+b 50
+b 1
+b 166
+b 168
+b 169
+b 3
+b 4
+b 9
+b 3
+b 1
+b 6
+b 1
+b 29
+b 7
+b 8
+b 13
+b 14
+b 25
+b 26
+b 6
+b 1
+b 12
+b 2
+b 19
+b 1
+b 29
+b 54
+b 82
+b 52
+b 2
+b 0
+b 2
+b 3
+b 9
+b 8
+b 9
+b 11
+b 7
+b 1
+b 114
+b 116
+b 118
+b 119
+b 122
+b 124
+b 212
+b 231
+b 245
+b 246
+b 211
+b 1
+b 0
+b 2
+b 3
+b 35
+b 11
+b 10
+b 1
+b 5
+b 7
+b 8
+b 12
+b 7
+b 1
+b 0
+b 2
+b 3
+b 0
+b 40
+b 41
+b 39
+b 1
+b 2
+b 3
+b 5
+b 9
+b 11
+b 7
+b 1
+b 44
+b 52
+b 53
+b 4
+b 3
+b 2
+b 37
+b 38
+b 42
+b 36
+b 1
+b 68
+b 65
+b 1
+b 0
+b 1
+b 11
+b 12
+b 10
+b 1
+b 18
+b 24
+b 25
+b 16
+b 1
+b 23
+b 1
+b 13
+b 15
+b 16
+b 195
+b 30
+b 29
+b 2
+b 10
+b 18
+b 7
+b 1
+b 2
+b 3
+b 70
+b 71
+b 86
+b 89
+b 90
+b 69
+b 1
+b 84
+b 5
+b 0
+b 0
+b 1
+b 7
+b 193
+b 220
+b 221
+b 227
+b 228
+b 218
+b 2
+b 225
+b 2
+b 42
+b 42
+b 1
+b 55
+b 61
+b 62
+b 71
+b 73
+b 61
+b 2
+b 52
+b 1
+b 462
+b 464
+b 703
+b 462
+b 1
+b 0
+b 13
+b 16
+b 17
+b 19
+b 21
+b 23
+b 28
+b 29
+b 30
+b 11
+b 1
+b 15
+b 2
+b 30
+b 28
+b 3
+b 7
+b 12
+b 13
+b 15
+b 36
+b 12
+b 2
+b 5
+b 1
+b 23
+b 75
+b 76
+b 75
+b 1
+b 22
+b 19
+b 1
+b 31
+b 34
+b 35
+b 37
+b 34
+b 2
+b 28
+b 1
+b 8
+b 15
+b 60
+b 87
+b 89
+b 90
+b 101
+b 105
+b 106
+b 108
+b 110
+b 111
+b 112
+b 87
+b 2
+b 106
+b 4
+b 55
+b 56
+b 16
+b 27
+b 26
+b 1
+b 0
+b 2
+b 4
+b 5
+b 10
+b 36
+b 34
+b 2
+b 5
+b 1
+b 78
+b 87
+b 88
+b 87
+b 1
+b 30
+b 32
+b 0
+b 1
+b 54
+b 74
+b 76
+b 77
+b 72
+b 1
+b 93
+b 92
+b 2
+b 20
+b 87
+b 85
+b 1
+b 66
+b 17
+b 18
+b 17
+b 1
+b 6
+b 7
+b 1
+b 2
+b 14
+b 15
+b 13
+b 1
+b 11
+b 13
+b 15
+b 9
+b 1
+b 3
+b 4
+b 6
+b 0
+b 3
+b 4
+b 6
+b 3
+b 2
+b 96
+b 103
+b 25
+b 27
+b 28
+b 23
+b 1
+b 26
+b 2
+b 52
+b 53
+b 55
+b 52
+b 2
+b 133
+b 2
+b 4
+b 5
+b 13
+b 59
+b 61
+b 63
+b 64
+b 66
+b 68
+b 69
+b 66
+b 2
+b 4
+b 6
+b 8
+b 9
+b 2
+b 1
+b 7
+b 2
+b 46
+b 47
+b 59
+b 57
+b 2
+b 47
+b 1
+b 5
+b 16
+b 2
+b 3
+b 5
+b 17
+b 14
+b 15
+b 17
+b 14
+b 2
+b 36
+b 34
+b 1
+b 45
+b 42
+b 1
+b 98
+b 99
+b 96
+b 2
+b 0
+b 2
+b 0
+b 1
+b 0
+b 2
+b 1
+b 0
+b 1
+b 80
+b 4
+b 5
+b 11
+b 12
+b 18
+b 16
+b 1
+b 18
+b 74
+b 76
+b 78
+b 79
+b 97
+b 76
+b 2
+b 0
+b 2
+b 3
+b 14
+b 9
+b 21
+b 22
+b 24
+b 30
+b 31
+b 39
+b 89
+b 103
+b 105
+b 106
+b 103
+b 2
+b 88
+b 1
+b 4
+b 1
+b 8
+b 19
+b 74
+b 75
+b 100
+b 101
+b 105
+b 74
+b 1
+b 97
+b 2
+b 102
+b 1
+b 29
+b 49
+b 50
+b 87
+b 88
+b 90
+b 15
+b 12
+b 1
+b 20
+b 21
+b 46
+b 48
+b 49
+b 56
+b 20
+b 2
+b 44
+b 2
+b 14
+b 16
+b 17
+b 19
+b 21
+b 14
+b 2
+b 6
+b 11
+b 10
+b 2
+b 101
+b 99
+b 2
+b 43
+b 45
+b 46
+b 43
+b 2
+b 172
+b 131
+b 152
+b 153
+b 192
+b 193
+b 195
+b 150
+b 2
+b 130
+b 1
+b 23
+b 23
+b 1
+b 166
+b 29
+b 31
+b 32
+b 4
+b 117
+b 119
+b 10
+b 11
+b 80
+b 81
+b 80
+b 2
+b 58
+b 59
+b 71
+b 58
+b 2
+b 66
+b 1
+b 18
+b 32
+b 38
+b 39
+b 38
+b 2
+b 15
+b 1
+b 5
+b 6
+b 4
+b 1
+b 420
+b 421
+b 428
+b 421
+b 1
+b 154
+b 155
+b 154
+b 2
+b 129
+b 129
+b 1
+b 36
+b 52
+b 53
+b 50
+b 2
+b 35
+b 1
+b 98
+b 103
+b 104
+b 110
+b 96
+b 1
+b 20
+b 30
+b 32
+b 33
+b 38
+b 40
+b 41
+b 50
+b 52
+b 32
+b 2
+b 36
+b 2
+b 1
+b 1
+b 1
+b 88
+b 25
+b 67
+b 68
+b 76
+b 77
+b 123
+b 76
+b 2
+b 119
+b 2
+b 73
+b 1
+b 33
+b 11
+b 14
+b 15
+b 10
+b 4
+b 6
+b 7
+b 9
+b 10
+b 6
+b 3
+b 6
+b 29
+b 12
+b 43
+b 44
+b 4
+b 2
+b 1
+b 1
+b 0
+b 1
+b 57
+b 59
+b 60
+b 62
+b 98
+b 100
+b 100
+b 1
+b 54
+b 1
+b 63
+b 109
+b 110
+b 61
+b 1
+b 108
+b 2
+b 114
+b 116
+b 117
+b 119
+b 116
+b 2
+b 8
+b 15
+b 17
+b 18
+b 45
+b 44
+b 1
+b 83
+b 85
+b 81
+b 1
+b 16
+b 17
+b 23
+b 24
+b 16
+b 1
+b 41
+b 80
+b 82
+b 20
+b 21
+b 17
+b 1
+b 10
+b 9
+b 1
+b 22
+b 13
+b 14
+b 10
+b 1
+b 15
+b 17
+b 13
+b 1
+b 18
+b 65
+b 66
+b 78
+b 79
+b 81
+b 83
+b 16
+b 2
+b 76
+b 2
+b 107
+b 104
+b 1
+b 2
+b 4
+b 5
+b 7
+b 9
+b 4
+b 2
+b 6
+b 13
+b 14
+b 14
+b 1
+b 14
+b 12
+b 2
+b 40
+b 50
+b 51
+b 53
+b 38
+b 3
+b 46
+b 1
+b 42
+b 48
+b 49
+b 56
+b 46
+b 2
+b 41
+b 1
+b 26
+b 36
+b 37
+b 39
+b 41
+b 43
+b 44
+b 24
+b 1
+b 35
+b 2
+b 12
+b 218
+b 18
+b 25
+b 26
+b 46
+b 47
+b 49
+b 29
+b 14
+b 21
+b 22
+b 34
+b 35
+b 12
+b 2
+b 19
+b 2
+b 0
+b 3
+b 2
+b 2
+b 6
+b 8
+b 37
+b 39
+b 40
+b 42
+b 50
+b 0
+b 0
+b 1
+b 124
+b 125
+b 123
+b 1
+b 84
+b 86
+b 87
+b 89
+b 91
+b 93
+b 84
+b 2
+b 34
+b 63
+b 64
+b 56
+b 65
+b 66
+b 65
+b 1
+b 86
+b 86
+b 1
+b 165
+b 163
+b 1
+b 69
+b 61
+b 62
+b 64
+b 69
+b 70
+b 1
+b 36
+b 38
+b 46
+b 48
+b 17
+b 12
+b 14
+b 3
+b 4
+b 10
+b 12
+b 3
+b 1
+b 7
+b 1
+b 48
+b 49
+b 64
+b 47
+b 1
+b 0
+b 1
+b 6
+b 7
+b 9
+b 11
+b 6
+b 2
+b 59
+b 57
+b 2
+b 71
+b 80
+b 81
+b 87
+b 3
+b 4
+b 3
+b 1
+b 110
+b 112
+b 113
+b 119
+b 133
+b 110
+b 2
+b 0
+b 0
+b 1
+b 28
+b 29
+b 31
+b 31
+b 1
+b 51
+b 83
+b 49
+b 1
+b 645
+b 649
+b 13
+b 14
+b 16
+b 17
+b 16
+b 1
+b 2
+b 2
+b 3
+b 31
+b 31
+b 1
+b 173
+b 190
+b 172
+b 2
+b 186
+b 1
+b 154
+b 4
+b 6
+b 7
+b 11
+b 12
+b 24
+b 25
+b 27
+b 24
+b 2
+b 98
+b 99
+b 102
+b 103
+b 105
+b 111
+b 96
+b 2
+b 103
+b 1
+b 74
+b 73
+b 1
+b 8
+b 9
+b 15
+b 16
+b 13
+b 2
+b 14
+b 1
+b 25
+b 35
+b 72
+b 74
+b 75
+b 77
+b 129
+b 130
+b 128
+b 1
+b 5
+b 6
+b 12
+b 4
+b 4
+b 1
+b 73
+b 20
+b 22
+b 24
+b 25
+b 24
+b 1
+b 52
+b 63
+b 62
+b 2
+b 94
+b 111
+b 112
+b 93
+b 2
+b 108
+b 1
+b 4
+b 17
+b 0
+b 1
+b 11
+b 228
+b 229
+b 235
+b 236
+b 295
+b 296
+b 328
+b 293
+b 2
+b 326
+b 1
+b 236
+b 1
+b 14
+b 3
+b 2
+b 1
+b 0
+b 2
+b 4
+b 5
+b 7
+b 9
+b 10
+b 4
+b 2
+b 10
+b 11
+b 13
+b 15
+b 16
+b 71
+b 79
+b 10
+b 2
+b 75
+b 1
+b 40
+b 41
+b 82
+b 81
+b 2
+b 160
+b 161
+b 1
+b 43
+b 41
+b 1
+b 4
+b 6
+b 15
+b 53
+b 54
+b 35
+b 88
+b 95
+b 96
+b 126
+b 86
+b 1
+b 94
+b 2
+b 46
+b 52
+b 54
+b 44
+b 46
+b 47
+b 55
+b 56
+b 57
+b 485
+b 710
+b 711
+b 713
+b 485
+b 1
+b 712
+b 1
+b 0
+b 8
+b 6
+b 3
+b 32
+b 0
+b 1
+b 16
+b 18
+b 19
+b 23
+b 8
+b 1
+b 3
+b 5
+b 6
+b 7
+b 16
+b 18
+b 19
+b 18
+b 3
+b 1
+b 15
+b 19
+b 20
+b 27
+b 0
+b 1
+b 46
+b 45
+b 1
+b 23
+b 24
+b 23
+b 2
+b 4
+b 5
+b 32
+b 34
+b 2
+b 2
+b 32
+b 1
+b 5
+b 24
+b 25
+b 13
+b 36
+b 154
+b 2
+b 3
+b 5
+b 6
+b 16
+b 77
+b 2
+b 4
+b 5
+b 2
+b 3
+b 12
+b 11
+b 1
+b 40
+b 41
+b 38
+b 2
+b 4
+b 6
+b 8
+b 9
+b 18
+b 6
+b 2
+b 26
+b 27
+b 24
+b 2
+b 7
+b 9
+b 11
+b 12
+b 14
+b 5
+b 1
+b 10
+b 3
+b 71
+b 73
+b 56
+b 80
+b 81
+b 54
+b 1
+b 2
+b 4
+b 5
+b 42
+b 43
+b 64
+b 65
+b 69
+b 78
+b 41
+b 1
+b 67
+b 2
+b 135
+b 165
+b 167
+b 168
+b 188
+b 189
+b 206
+b 204
+b 1
+b 51
+b 52
+b 58
+b 59
+b 51
+b 2
+b 54
+b 2
+b 29
+b 41
+b 43
+b 26
+b 1
+b 28
+b 88
+b 92
+b 93
+b 95
+b 97
+b 95
+b 1
+b 6
+b 16
+b 40
+b 42
+b 43
+b 45
+b 55
+b 55
+b 1
+b 66
+b 74
+b 75
+b 90
+b 99
+b 100
+b 117
+b 116
+b 2
+b 51
+b 53
+b 80
+b 81
+b 84
+b 78
+b 2
+b 53
+b 1
+b 340
+b 363
+b 384
+b 362
+b 2
+b 380
+b 1
+b 4
+b 5
+b 7
+b 9
+b 10
+b 12
+b 9
+b 3
+b 0
+b 76
+b 85
+b 86
+b 94
+b 95
+b 84
+b 1
+b 93
+b 2
+b 22
+b 29
+b 21
+b 1
+b 427
+b 428
+b 33
+b 34
+b 36
+b 36
+b 1
+b 18
+b 17
+b 1
+b 64
+b 62
+b 2
+b 50
+b 57
+b 58
+b 66
+b 67
+b 69
+b 70
+b 57
+b 2
+b 62
+b 2
+b 66
+b 1
+b 99
+b 9
+b 6
+b 1
+b 22
+b 17
+b 18
+b 20
+b 21
+b 15
+b 2
+b 18
+b 1
+b 10
+b 50
+b 53
+b 54
+b 56
+b 58
+b 53
+b 2
+b 20
+b 22
+b 23
+b 44
+b 46
+b 48
+b 49
+b 59
+b 60
+b 62
+b 46
+b 4
+b 54
+b 1
+b 5
+b 127
+b 131
+b 125
+b 1
+b 6
+b 3
+b 4
+b 6
+b 3
+b 2
+b 60
+b 59
+b 1
+b 554
+b 565
+b 566
+b 565
+b 1
+b 2
+b 3
+b 4
+b 3
+b 1
+b 8
+b 9
+b 4
+b 13
+b 15
+b 15
+b 1
+b 2
+b 3
+b 17
+b 2
+b 2
+b 80
+b 82
+b 83
+b 85
+b 87
+b 94
+b 92
+b 2
+b 71
+b 78
+b 79
+b 81
+b 78
+b 2
+b 68
+b 1
+b 206
+b 204
+b 2
+b 82
+b 84
+b 86
+b 87
+b 89
+b 98
+b 86
+b 2
+b 119
+b 120
+b 122
+b 124
+b 126
+b 127
+b 119
+b 2
+b 116
+b 1
+b 14
+b 12
+b 3
+b 64
+b 4
+b 23
+b 31
+b 20
+b 1
+b 6
+b 14
+b 15
+b 17
+b 16
+b 15
+b 2
+b 53
+b 54
+b 57
+b 58
+b 60
+b 53
+b 4
+b 8
+b 8
+b 1
+b 0
+b 2
+b 0
+b 1
+b 25
+b 24
+b 2
+b 16
+b 17
+b 52
+b 57
+b 58
+b 67
+b 16
+b 1
+b 87
+b 86
+b 1
+b 50
+b 51
+b 50
+b 2
+b 3
+b 0
+b 1
+b 18
+b 52
+b 50
+b 2
+b 227
+b 234
+b 235
+b 243
+b 234
+b 2
+b 239
+b 1
+b 5
+b 6
+b 8
+b 14
+b 12
+b 1
+b 0
+b 2
+b 3
+b 123
+b 121
+b 1
+b 50
+b 52
+b 48
+b 1
+b 13
+b 72
+b 74
+b 67
+b 68
+b 8
+b 24
+b 32
+b 33
+b 57
+b 58
+b 24
+b 1
+b 29
+b 2
+b 54
+b 1
+b 2
+b 17
+b 22
+b 23
+b 37
+b 38
+b 42
+b 22
+b 1
+b 34
+b 2
+b 38
+b 1
+b 21
+b 23
+b 24
+b 47
+b 51
+b 46
+b 1
+b 18
+b 23
+b 50
+b 51
+b 53
+b 55
+b 56
+b 53
+b 2
+b 17
+b 16
+b 2
+b 14
+b 15
+b 17
+b 18
+b 27
+b 14
+b 3
+b 16
+b 17
+b 26
+b 14
+b 2
+b 58
+b 64
+b 105
+b 104
+b 1
+b 6
+b 18
+b 19
+b 4
+b 5
+b 21
+b 4
+b 1
+b 9
+b 7
+b 1
+b 140
+b 141
+b 140
+b 2
+b 0
+b 2
+b 11
+b 188
+b 194
+b 204
+b 205
+b 207
+b 208
+b 227
+b 228
+b 202
+b 2
+b 223
+b 5
+b 194
+b 1
+b 0
+b 2
+b 97
+b 99
+b 100
+b 102
+b 104
+b 99
+b 2
+b 7
+b 5
+b 1
+b 52
+b 4
+b 5
+b 7
+b 8
+b 2
+b 2
+b 5
+b 1
+b 21
+b 22
+b 19
+b 2
+b 212
+b 0
+b 0
+b 1
+b 61
+b 62
+b 82
+b 127
+b 60
+b 1
+b 126
+b 1
+b 0
+b 1
+b 8
+b 36
+b 35
+b 2
+b 26
+b 27
+b 29
+b 25
+b 1
+b 2
+b 2
+b 3
+b 11
+b 77
+b 111
+b 74
+b 1
+b 19
+b 23
+b 233
+b 235
+b 237
+b 238
+b 240
+b 89
+b 90
+b 92
+b 131
+b 89
+b 2
+b 127
+b 1
+b 33
+b 34
+b 1
+b 1
+b 15
+b 23
+b 24
+b 53
+b 54
+b 56
+b 58
+b 60
+b 52
+b 1
+b 59
+b 1
+b 9
+b 11
+b 13
+b 15
+b 16
+b 38
+b 7
+b 1
+b 14
+b 1
+b 37
+b 28
+b 29
+b 31
+b 33
+b 34
+b 41
+b 42
+b 52
+b 31
+b 2
+b 39
+b 2
+b 46
+b 2
+b 21
+b 60
+b 61
+b 5
+b 7
+b 2
+b 4
+b 6
+b 7
+b 2
+b 1
+b 9
+b 0
+b 27
+b 29
+b 30
+b 8
+b 9
+b 1
+b 10
+b 9
+b 1
+b 86
+b 84
+b 5
+b 44
+b 45
+b 48
+b 49
+b 51
+b 57
+b 41
+b 1
+b 7
+b 8
+b 10
+b 33
+b 39
+b 40
+b 32
+b 2
+b 3
+b 11
+b 32
+b 180
+b 181
+b 13
+b 0
+b 10
+b 12
+b 14
+b 16
+b 18
+b 19
+b 21
+b 16
+b 2
+b 53
+b 2
+b 3
+b 28
+b 12
+b 54
+b 55
+b 58
+b 10
+b 2
+b 50
+b 2
+b 8
+b 68
+b 70
+b 71
+b 73
+b 68
+b 2
+b 189
+b 191
+b 192
+b 195
+b 197
+b 198
+b 216
+b 191
+b 3
+b 35
+b 34
+b 1
+b 121
+b 120
+b 1
+b 23
+b 25
+b 27
+b 28
+b 84
+b 2
+b 6
+b 7
+b 2
+b 2
+b 1
+b 0
+b 2
+b 0
+b 1
+b 92
+b 90
+b 1
+b 2
+b 3
+b 36
+b 37
+b 39
+b 41
+b 2
+b 1
+b 0
+b 2
+b 3
+b 5
+b 7
+b 9
+b 13
+b 14
+b 2
+b 2
+b 11
+b 2
+b 3
+b 5
+b 23
+b 25
+b 23
+b 1
+b 32
+b 34
+b 35
+b 38
+b 42
+b 43
+b 55
+b 36
+b 1
+b 42
+b 1
+b 126
+b 129
+b 130
+b 132
+b 133
+b 125
+b 4
+b 19
+b 29
+b 104
+b 105
+b 107
+b 123
+b 124
+b 130
+b 131
+b 42
+b 11
+b 13
+b 14
+b 16
+b 9
+b 1
+b 7
+b 8
+b 7
+b 1
+b 7
+b 50
+b 51
+b 57
+b 49
+b 1
+b 2
+b 14
+b 15
+b 159
+b 160
+b 159
+b 2
+b 43
+b 44
+b 43
+b 2
+b 4
+b 1
+b 1
+b 0
+b 2
+b 4
+b 13
+b 14
+b 0
+b 1
+b 52
+b 58
+b 61
+b 62
+b 64
+b 65
+b 73
+b 61
+b 3
+b 50
+b 1
+b 67
+b 1
+b 94
+b 104
+b 92
+b 3
+b 98
+b 1
+b 104
+b 105
+b 107
+b 103
+b 1
+b 28
+b 22
+b 30
+b 31
+b 21
+b 1
+b 0
+b 1
+b 1
+b 107
+b 17
+b 19
+b 20
+b 0
+b 1
+b 1
+b 255
+b 257
+b 271
+b 272
+b 274
+b 275
+b 253
+b 1
+b 270
+b 3
+b 41
+b 1
+b 7
+b 8
+b 5
+b 3
+b 0
+b 1
+b 24
+b 89
+b 97
+b 87
+b 2
+b 3
+b 4
+b 16
+b 13
+b 23
+b 56
+b 57
+b 61
+b 54
+b 4
+b 26
+b 176
+b 178
+b 20
+b 22
+b 23
+b 37
+b 20
+b 2
+b 34
+b 2
+b 108
+b 110
+b 112
+b 113
+b 125
+b 126
+b 6
+b 4
+b 2
+b 19
+b 33
+b 34
+b 36
+b 37
+b 44
+b 52
+b 33
+b 3
+b 47
+b 1
+b 17
+b 1
+b 48
+b 12
+b 13
+b 13
+b 23
+b 24
+b 35
+b 42
+b 43
+b 50
+b 42
+b 2
+b 46
+b 2
+b 20
+b 1
+b 85
+b 87
+b 88
+b 98
+b 99
+b 87
+b 1
+b 95
+b 2
+b 41
+b 49
+b 47
+b 3
+b 40
+b 1
+b 12
+b 23
+b 38
+b 39
+b 16
+b 17
+b 32
+b 14
+b 2
+b 362
+b 368
+b 373
+b 374
+b 376
+b 390
+b 391
+b 362
+b 1
+b 365
+b 1
+b 93
+b 95
+b 97
+b 98
+b 93
+b 1
+b 27
+b 32
+b 35
+b 75
+b 76
+b 76
+b 1
+b 8
+b 9
+b 32
+b 36
+b 7
+b 1
+b 1
+b 115
+b 15
+b 16
+b 18
+b 19
+b 21
+b 33
+b 49
+b 63
+b 15
+b 3
+b 45
+b 2
+b 56
+b 1
+b 78
+b 47
+b 48
+b 50
+b 52
+b 54
+b 56
+b 45
+b 2
+b 1
+b 5
+b 0
+b 1
+b 76
+b 140
+b 153
+b 154
+b 160
+b 139
+b 1
+b 106
+b 19
+b 24
+b 41
+b 18
+b 1
+b 20
+b 1
+b 0
+b 2
+b 12
+b 32
+b 33
+b 35
+b 47
+b 32
+b 2
+b 10
+b 8
+b 2
+b 45
+b 46
+b 56
+b 60
+b 64
+b 64
+b 1
+b 0
+b 2
+b 3
+b 2
+b 1
+b 30
+b 31
+b 6
+b 23
+b 50
+b 51
+b 23
+b 1
+b 47
+b 2
+b 5
+b 2
+b 1
+b 119
+b 120
+b 122
+b 123
+b 119
+b 3
+b 3
+b 18
+b 26
+b 18
+b 1
+b 23
+b 1
+b 29
+b 32
+b 33
+b 38
+b 49
+b 55
+b 46
+b 1
+b 99
+b 100
+b 102
+b 97
+b 2
+b 5
+b 4
+b 1
+b 133
+b 32
+b 34
+b 35
+b 34
+b 1
+b 1
+b 0
+b 1
+b 11
+b 11
+b 12
+b 38
+b 21
+b 68
+b 91
+b 93
+b 94
+b 9
+b 12
+b 13
+b 8
+b 4
+b 9
+b 1
+b 28
+b 29
+b 31
+b 32
+b 2
+b 30
+b 36
+b 37
+b 73
+b 78
+b 79
+b 87
+b 89
+b 78
+b 2
+b 83
+b 1
+b 70
+b 1
+b 36
+b 63
+b 64
+b 66
+b 67
+b 35
+b 1
+b 4
+b 106
+b 120
+b 121
+b 118
+b 2
+b 105
+b 1
+b 114
+b 112
+b 1
+b 100
+b 102
+b 104
+b 105
+b 107
+b 100
+b 1
+b 44
+b 45
+b 47
+b 49
+b 10
+b 9
+b 1
+b 2
+b 42
+b 2
+b 3
+b 5
+b 6
+b 7
+b 14
+b 15
+b 73
+b 75
+b 14
+b 1
+b 70
+b 1
+b 4
+b 84
+b 85
+b 87
+b 84
+b 2
+b 131
+b 130
+b 1
+b 51
+b 59
+b 67
+b 68
+b 70
+b 58
+b 2
+b 63
+b 2
+b 22
+b 23
+b 25
+b 26
+b 22
+b 3
+b 18
+b 69
+b 71
+b 72
+b 74
+b 71
+b 2
+b 17
+b 1
+b 61
+b 64
+b 7
+b 20
+b 21
+b 23
+b 24
+b 29
+b 6
+b 2
+b 17
+b 1
+b 8
+b 9
+b 22
+b 6
+b 2
+b 20
+b 1
+b 12
+b 13
+b 27
+b 11
+b 1
+b 29
+b 4
+b 3
+b 1
+b 6
+b 12
+b 14
+b 10
+b 1
+b 32
+b 2
+b 64
+b 65
+b 67
+b 68
+b 73
+b 62
+b 2
+b 65
+b 1
+b 2
+b 1
+b 127
+b 207
+b 213
+b 214
+b 222
+b 223
+b 206
+b 2
+b 209
+b 2
+b 126
+b 1
+b 0
+b 1
+b 139
+b 140
+b 4
+b 45
+b 46
+b 56
+b 44
+b 1
+b 54
+b 2
+b 78
+b 84
+b 85
+b 87
+b 88
+b 94
+b 97
+b 77
+b 2
+b 80
+b 2
+b 27
+b 29
+b 15
+b 224
+b 229
+b 230
+b 277
+b 278
+b 294
+b 277
+b 1
+b 291
+b 2
+b 160
+b 162
+b 163
+b 166
+b 167
+b 166
+b 1
+b 7
+b 7
+b 1
+b 80
+b 19
+b 21
+b 23
+b 24
+b 16
+b 1
+b 0
+b 1
+b 11
+b 0
+b 1
+b 109
+b 111
+b 112
+b 16
+b 43
+b 44
+b 55
+b 60
+b 61
+b 40
+b 1
+b 0
+b 1
+b 18
+b 0
+b 1
+b 200
+b 122
+b 29
+b 30
+b 29
+b 1
+b 2
+b 3
+b 5
+b 6
+b 0
+b 2
+b 3
+b 3
+b 1
+b 61
+b 58
+b 1
+b 4
+b 5
+b 7
+b 8
+b 2
+b 2
+b 5
+b 2
+b 94
+b 12
+b 13
+b 13
+b 1
+b 4
+b 52
+b 54
+b 55
+b 67
+b 137
+b 59
+b 60
+b 62
+b 70
+b 85
+b 68
+b 3
+b 80
+b 1
+b 110
+b 114
+b 115
+b 108
+b 1
+b 113
+b 1
+b 4
+b 12
+b 14
+b 0
+b 1
+b 3
+b 17
+b 22
+b 23
+b 19
+b 3
+b 4
+b 6
+b 139
+b 7
+b 8
+b 10
+b 11
+b 51
+b 7
+b 3
+b 47
+b 2
+b 7
+b 6
+b 1
+b 41
+b 43
+b 60
+b 59
+b 4
+b 57
+b 58
+b 80
+b 39
+b 48
+b 49
+b 235
+b 259
+b 260
+b 257
+b 2
+b 234
+b 1
+b 3
+b 71
+b 179
+b 180
+b 187
+b 186
+b 2
+b 46
+b 48
+b 49
+b 46
+b 2
+b 8
+b 32
+b 6
+b 3
+b 26
+b 1
+b 7
+b 13
+b 14
+b 21
+b 38
+b 46
+b 47
+b 37
+b 1
+b 82
+b 128
+b 5
+b 42
+b 48
+b 49
+b 52
+b 53
+b 55
+b 56
+b 106
+b 41
+b 2
+b 44
+b 2
+b 48
+b 3
+b 98
+b 1
+b 27
+b 81
+b 82
+b 86
+b 81
+b 2
+b 82
+b 1
+b 9
+b 8
+b 14
+b 15
+b 13
+b 1
+b 0
+b 2
+b 4
+b 11
+b 4
+b 1
+b 365
+b 425
+b 426
+b 428
+b 430
+b 432
+b 433
+b 434
+b 428
+b 1
+b 0
+b 27
+b 29
+b 30
+b 42
+b 43
+b 47
+b 41
+b 1
+b 46
+b 1
+b 18
+b 57
+b 58
+b 62
+b 57
+b 2
+b 3
+b 10
+b 11
+b 49
+b 47
+b 2
+b 24
+b 25
+b 27
+b 28
+b 27
+b 2
+b 3
+b 4
+b 9
+b 2
+b 1
+b 16
+b 27
+b 37
+b 25
+b 1
+b 2
+b 4
+b 5
+b 7
+b 4
+b 2
+b 25
+b 27
+b 28
+b 27
+b 2
+b 22
+b 1
+b 37
+b 39
+b 41
+b 41
+b 1
+b 6
+b 7
+b 4
+b 2
+b 91
+b 152
+b 88
+b 1
+b 14
+b 30
+b 12
+b 2
+b 8
+b 7
+b 2
+b 6
+b 7
+b 9
+b 10
+b 12
+b 13
+b 15
+b 6
+b 3
+b 109
+b 23
+b 22
+b 1
+b 6
+b 7
+b 15
+b 16
+b 51
+b 4
+b 2
+b 13
+b 1
+b 99
+b 101
+b 105
+b 14
+b 25
+b 13
+b 2
+b 20
+b 1
+b 7
+b 12
+b 13
+b 15
+b 24
+b 25
+b 27
+b 81
+b 15
+b 1
+b 21
+b 2
+b 78
+b 1
+b 72
+b 6
+b 7
+b 9
+b 11
+b 9
+b 1
+b 2
+b 56
+b 71
+b 72
+b 1
+b 11
+b 12
+b 10
+b 1
+b 0
+b 1
+b 32
+b 34
+b 35
+b 0
+b 87
+b 89
+b 90
+b 3
+b 4
+b 27
+b 2
+b 1
+b 21
+b 8
+b 16
+b 15
+b 2
+b 4
+b 5
+b 2
+b 2
+b 7
+b 8
+b 7
+b 2
+b 20
+b 21
+b 23
+b 25
+b 20
+b 2
+b 230
+b 10
+b 11
+b 17
+b 19
+b 17
+b 1
+b 28
+b 28
+b 30
+b 31
+b 40
+b 28
+b 2
+b 38
+b 1
+b 35
+b 3
+b 5
+b 7
+b 8
+b 10
+b 11
+b 20
+b 5
+b 2
+b 8
+b 2
+b 4
+b 6
+b 7
+b 35
+b 36
+b 43
+b 44
+b 56
+b 34
+b 1
+b 42
+b 2
+b 51
+b 1
+b 77
+b 99
+b 76
+b 2
+b 4
+b 6
+b 0
+b 1
+b 9
+b 10
+b 11
+b 8
+b 3
+b 141
+b 70
+b 71
+b 5
+b 9
+b 10
+b 4
+b 2
+b 2
+b 50
+b 73
+b 78
+b 79
+b 78
+b 1
+b 12
+b 23
+b 10
+b 3
+b 17
+b 1
+b 2
+b 4
+b 5
+b 2
+b 2
+b 1
+b 14
+b 15
+b 17
+b 17
+b 1
+b 5
+b 19
+b 23
+b 24
+b 4
+b 6
+b 7
+b 9
+b 4
+b 2
+b 7
+b 1
+b 288
+b 41
+b 42
+b 44
+b 51
+b 35
+b 42
+b 18
+b 38
+b 39
+b 41
+b 42
+b 37
+b 1
+b 40
+b 2
+b 1
+b 0
+b 1
+b 121
+b 124
+b 126
+b 127
+b 124
+b 2
+b 15
+b 17
+b 13
+b 14
+b 16
+b 13
+b 2
+b 10
+b 1
+b 0
+b 1
+b 14
+b 25
+b 491
+b 493
+b 494
+b 496
+b 498
+b 499
+b 501
+b 513
+b 491
+b 2
+b 40
+b 39
+b 1
+b 2
+b 17
+b 18
+b 27
+b 71
+b 72
+b 74
+b 69
+b 2
+b 106
+b 2
+b 2
+b 1
+b 243
+b 244
+b 242
+b 1
+b 37
+b 40
+b 4
+b 14
+b 15
+b 27
+b 28
+b 35
+b 36
+b 4
+b 1
+b 11
+b 2
+b 24
+b 2
+b 29
+b 1
+b 1
+b 5
+b 52
+b 12
+b 13
+b 9
+b 1
+b 21
+b 16
+b 17
+b 14
+b 2
+b 15
+b 1
+b 90
+b 15
+b 17
+b 15
+b 1
+b 32
+b 33
+b 35
+b 37
+b 38
+b 45
+b 32
+b 2
+b 4
+b 6
+b 8
+b 9
+b 2
+b 1
+b 7
+b 2
+b 26
+b 84
+b 86
+b 88
+b 89
+b 8
+b 142
+b 151
+b 152
+b 3
+b 5
+b 3
+b 1
+b 0
+b 1
+b 4
+b 5
+b 133
+b 141
+b 142
+b 154
+b 155
+b 139
+b 2
+b 153
+b 1
+b 7
+b 366
+b 367
+b 369
+b 366
+b 2
+b 199
+b 197
+b 3
+b 37
+b 36
+b 1
+b 87
+b 8
+b 42
+b 44
+b 45
+b 49
+b 42
+b 2
+b 0
+b 2
+b 3
+b 2
+b 1
+b 0
+b 0
+b 1
+b 53
+b 54
+b 61
+b 52
+b 1
+b 59
+b 2
+b 110
+b 112
+b 113
+b 121
+b 101
+b 24
+b 32
+b 33
+b 255
+b 254
+b 1
+b 0
+b 2
+b 27
+b 69
+b 88
+b 89
+b 68
+b 2
+b 84
+b 3
+b 0
+b 2
+b 3
+b 25
+b 26
+b 0
+b 2
+b 3
+b 183
+b 193
+b 194
+b 196
+b 198
+b 199
+b 208
+b 191
+b 2
+b 196
+b 2
+b 182
+b 1
+b 13
+b 43
+b 154
+b 155
+b 157
+b 154
+b 2
+b 105
+b 107
+b 108
+b 108
+b 1
+b 19
+b 43
+b 227
+b 24
+b 25
+b 27
+b 29
+b 30
+b 27
+b 2
+b 45
+b 44
+b 2
+b 20
+b 19
+b 2
+b 4
+b 6
+b 7
+b 9
+b 4
+b 2
+b 22
+b 32
+b 85
+b 87
+b 88
+b 90
+b 92
+b 93
+b 99
+b 85
+b 2
+b 90
+b 2
+b 93
+b 3
+b 31
+b 1
+b 23
+b 37
+b 7
+b 8
+b 19
+b 5
+b 2
+b 16
+b 2
+b 31
+b 32
+b 31
+b 1
+b 0
+b 35
+b 35
+b 1
+b 3
+b 5
+b 7
+b 8
+b 5
+b 2
+b 4
+b 4
+b 1
+b 13
+b 15
+b 17
+b 18
+b 20
+b 22
+b 23
+b 1
+b 7
+b 9
+b 10
+b 14
+b 82
+b 26
+b 27
+b 0
+b 2
+b 1
+b 45
+b 42
+b 1
+b 4
+b 5
+b 15
+b 3
+b 1
+b 54
+b 51
+b 1
+b 2
+b 3
+b 0
+b 2
+b 5
+b 6
+b 11
+b 3
+b 2
+b 8
+b 1
+b 28
+b 38
+b 39
+b 26
+b 3
+b 34
+b 1
+b 35
+b 1
+b 16
+b 8
+b 9
+b 29
+b 39
+b 41
+b 43
+b 44
+b 46
+b 48
+b 49
+b 53
+b 54
+b 63
+b 46
+b 2
+b 51
+b 2
+b 57
+b 1
+b 14
+b 46
+b 44
+b 2
+b 2
+b 3
+b 5
+b 7
+b 9
+b 10
+b 17
+b 2
+b 2
+b 81
+b 61
+b 0
+b 2
+b 4
+b 6
+b 8
+b 9
+b 11
+b 6
+b 2
+b 398
+b 7
+b 4
+b 1
+b 36
+b 38
+b 39
+b 48
+b 49
+b 38
+b 2
+b 44
+b 2
+b 2
+b 3
+b 3
+b 23
+b 25
+b 26
+b 37
+b 38
+b 46
+b 23
+b 2
+b 35
+b 2
+b 0
+b 2
+b 3
+b 7
+b 2
+b 2
+b 46
+b 63
+b 64
+b 36
+b 37
+b 35
+b 1
+b 12
+b 13
+b 33
+b 12
+b 2
+b 29
+b 1
+b 175
+b 176
+b 6
+b 10
+b 90
+b 160
+b 161
+b 167
+b 166
+b 2
+b 157
+b 1
+b 23
+b 21
+b 3
+b 7
+b 8
+b 10
+b 12
+b 13
+b 15
+b 10
+b 2
+b 13
+b 1
+b 1
+b 5
+b 24
+b 22
+b 3
+b 11
+b 13
+b 15
+b 16
+b 13
+b 2
+b 0
+b 1
+b 11
+b 12
+b 14
+b 11
+b 2
+b 71
+b 93
+b 3
+b 4
+b 6
+b 8
+b 6
+b 1
+b 42
+b 44
+b 46
+b 48
+b 49
+b 49
+b 1
+b 2
+b 2
+b 1
+b 45
+b 51
+b 53
+b 54
+b 51
+b 2
+b 0
+b 2
+b 0
+b 1
+b 196
+b 203
+b 15
+b 37
+b 39
+b 40
+b 41
+b 35
+b 1
+b 15
+b 1
+b 131
+b 139
+b 140
+b 148
+b 149
+b 151
+b 153
+b 158
+b 130
+b 2
+b 135
+b 2
+b 144
+b 2
+b 23
+b 20
+b 1
+b 3
+b 4
+b 6
+b 8
+b 2
+b 1
+b 165
+b 171
+b 170
+b 2
+b 24
+b 26
+b 28
+b 29
+b 0
+b 8
+b 7
+b 2
+b 13
+b 12
+b 4
+b 5
+b 22
+b 23
+b 1
+b 10
+b 7
+b 1
+b 7
+b 8
+b 22
+b 7
+b 2
+b 18
+b 3
+b 6
+b 7
+b 19
+b 21
+b 207
+b 209
+b 211
+b 212
+b 211
+b 1
+b 204
+b 1
+b 36
+b 0
+b 1
+b 28
+b 712
+b 713
+b 716
+b 717
+b 719
+b 726
+b 716
+b 2
+b 722
+b 1
+b 13
+b 81
+b 83
+b 29
+b 36
+b 37
+b 44
+b 45
+b 46
+b 27
+b 2
+b 41
+b 3
+b 0
+b 25
+b 93
+b 105
+b 106
+b 108
+b 110
+b 108
+b 1
+b 45
+b 47
+b 48
+b 45
+b 2
+b 1
+b 33
+b 34
+b 39
+b 34
+b 1
+b 10
+b 20
+b 25
+b 26
+b 28
+b 72
+b 73
+b 118
+b 25
+b 2
+b 68
+b 2
+b 3
+b 4
+b 13
+b 12
+b 2
+b 9
+b 10
+b 3
+b 2
+b 1
+b 85
+b 110
+b 111
+b 113
+b 108
+b 2
+b 85
+b 1
+b 8
+b 14
+b 15
+b 69
+b 18
+b 25
+b 26
+b 52
+b 53
+b 55
+b 25
+b 2
+b 16
+b 1
+b 45
+b 1
+b 14
+b 21
+b 10
+b 16
+b 17
+b 27
+b 32
+b 26
+b 1
+b 113
+b 123
+b 4
+b 8
+b 9
+b 11
+b 12
+b 14
+b 16
+b 6
+b 2
+b 9
+b 2
+b 3
+b 1
+b 93
+b 95
+b 96
+b 90
+b 1
+b 321
+b 319
+b 1
+b 3
+b 42
+b 43
+b 104
+b 105
+b 111
+b 112
+b 103
+b 1
+b 110
+b 2
+b 0
+b 4
+b 43
+b 60
+b 62
+b 62
+b 1
+b 15
+b 17
+b 18
+b 17
+b 1
+b 15
+b 16
+b 6
+b 8
+b 13
+b 21
+b 4
+b 1
+b 3
+b 30
+b 31
+b 3
+b 1
+b 27
+b 2
+b 2
+b 2
+b 1
+b 133
+b 24
+b 32
+b 33
+b 3
+b 2
+b 2
+b 56
+b 58
+b 59
+b 39
+b 40
+b 148
+b 158
+b 38
+b 1
+b 144
+b 1
+b 695
+b 700
+b 701
+b 693
+b 2
+b 698
+b 2
+b 24
+b 25
+b 2
+b 148
+b 150
+b 152
+b 153
+b 155
+b 157
+b 155
+b 1
+b 8
+b 84
+b 85
+b 121
+b 123
+b 124
+b 129
+b 136
+b 123
+b 1
+b 126
+b 2
+b 1
+b 2
+b 3
+b 0
+b 3
+b 10
+b 14
+b 20
+b 21
+b 23
+b 21
+b 23
+b 24
+b 18
+b 1
+b 15
+b 14
+b 2
+b 79
+b 173
+b 175
+b 176
+b 175
+b 1
+b 4
+b 5
+b 7
+b 17
+b 4
+b 2
+b 13
+b 3
+b 6
+b 17
+b 18
+b 16
+b 1
+b 198
+b 199
+b 198
+b 2
+b 1
+b 41
+b 0
+b 2
+b 2
+b 1
+b 47
+b 55
+b 46
+b 2
+b 51
+b 1
+b 30
+b 5
+b 6
+b 8
+b 9
+b 5
+b 3
+b 39
+b 14
+b 15
+b 17
+b 23
+b 17
+b 1
+b 20
+b 3
+b 2
+b 0
+b 1
+b 80
+b 79
+b 2
+b 6
+b 7
+b 16
+b 17
+b 19
+b 4
+b 2
+b 17
+b 1
+b 3
+b 75
+b 98
+b 99
+b 117
+b 74
+b 2
+b 94
+b 2
+b 11
+b 2
+b 3
+b 5
+b 7
+b 8
+b 5
+b 2
+b 109
+b 38
+b 40
+b 42
+b 44
+b 45
+b 40
+b 1
+b 3
+b 50
+b 51
+b 56
+b 57
+b 66
+b 67
+b 70
+b 50
+b 2
+b 53
+b 1
+b 0
+b 1
+b 90
+b 91
+b 93
+b 94
+b 99
+b 90
+b 3
+b 96
+b 1
+b 16
+b 14
+b 1
+b 53
+b 54
+b 77
+b 10
+b 14
+b 9
+b 2
+b 10
+b 1
+b 4
+b 15
+b 24
+b 25
+b 27
+b 39
+b 23
+b 1
+b 38
+b 1
+b 14
+b 16
+b 18
+b 19
+b 24
+b 19
+b 1
+b 30
+b 31
+b 38
+b 156
+b 158
+b 159
+b 156
+b 2
+b 36
+b 34
+b 1
+b 6
+b 19
+b 25
+b 26
+b 28
+b 30
+b 35
+b 36
+b 45
+b 17
+b 1
+b 24
+b 2
+b 9
+b 30
+b 31
+b 42
+b 0
+b 1
+b 0
+b 1
+b 12
+b 10
+b 2
+b 77
+b 79
+b 80
+b 82
+b 86
+b 87
+b 86
+b 1
+b 14
+b 12
+b 2
+b 16
+b 22
+b 21
+b 1
+b 0
+b 4
+b 5
+b 7
+b 9
+b 10
+b 4
+b 2
+b 9
+b 12
+b 13
+b 15
+b 31
+b 6
+b 1
+b 14
+b 12
+b 2
+b 52
+b 8
+b 9
+b 11
+b 12
+b 8
+b 3
+b 0
+b 2
+b 6
+b 2
+b 1
+b 3
+b 1
+b 98
+b 10
+b 14
+b 24
+b 25
+b 27
+b 28
+b 9
+b 2
+b 22
+b 3
+b 10
+b 1
+b 24
+b 22
+b 1
+b 31
+b 32
+b 50
+b 51
+b 31
+b 2
+b 46
+b 2
+b 2
+b 3
+b 82
+b 2
+b 1
+b 59
+b 7
+b 8
+b 4
+b 5
+b 1
+b 1
+b 2
+b 4
+b 0
+b 1
+b 96
+b 97
+b 103
+b 134
+b 136
+b 12
+b 14
+b 16
+b 17
+b 19
+b 14
+b 2
+b 6
+b 5
+b 1
+b 2
+b 0
+b 1
+b 16
+b 17
+b 23
+b 16
+b 2
+b 19
+b 2
+b 15
+b 30
+b 31
+b 33
+b 34
+b 46
+b 48
+b 29
+b 1
+b 32
+b 2
+b 41
+b 1
+b 33
+b 34
+b 42
+b 11
+b 13
+b 14
+b 30
+b 31
+b 33
+b 34
+b 36
+b 39
+b 30
+b 3
+b 33
+b 3
+b 3
+b 32
+b 34
+b 36
+b 37
+b 65
+b 66
+b 95
+b 64
+b 1
+b 94
+b 1
+b 7
+b 8
+b 10
+b 11
+b 10
+b 2
+b 4
+b 1
+b 92
+b 94
+b 90
+b 1
+b 3
+b 47
+b 54
+b 55
+b 51
+b 1
+b 10
+b 11
+b 19
+b 8
+b 2
+b 17
+b 1
+b 19
+b 20
+b 29
+b 30
+b 32
+b 33
+b 42
+b 44
+b 19
+b 1
+b 26
+b 2
+b 29
+b 2
+b 34
+b 1
+b 19
+b 77
+b 77
+b 1
+b 44
+b 46
+b 47
+b 49
+b 51
+b 41
+b 1
+b 41
+b 60
+b 100
+b 101
+b 100
+b 2
+b 38
+b 1
+b 125
+b 123
+b 2
+b 2
+b 75
+b 76
+b 87
+b 88
+b 90
+b 98
+b 104
+b 75
+b 2
+b 83
+b 2
+b 100
+b 1
+b 72
+b 1
+b 4
+b 10
+b 4
+b 6
+b 300
+b 301
+b 313
+b 366
+b 300
+b 1
+b 310
+b 2
+b 22
+b 118
+b 119
+b 125
+b 127
+b 128
+b 130
+b 136
+b 125
+b 2
+b 5
+b 51
+b 52
+b 58
+b 63
+b 64
+b 66
+b 3
+b 1
+b 62
+b 2
+b 32
+b 33
+b 35
+b 37
+b 38
+b 32
+b 2
+b 20
+b 145
+b 151
+b 152
+b 149
+b 2
+b 42
+b 40
+b 1
+b 86
+b 87
+b 94
+b 95
+b 97
+b 113
+b 115
+b 84
+b 2
+b 92
+b 2
+b 111
+b 1
+b 32
+b 33
+b 35
+b 42
+b 44
+b 45
+b 65
+b 31
+b 1
+b 34
+b 1
+b 2
+b 6
+b 5
+b 2
+b 1
+b 3
+b 4
+b 6
+b 8
+b 9
+b 12
+b 6
+b 2
+b 61
+b 63
+b 65
+b 66
+b 14
+b 16
+b 14
+b 1
+b 40
+b 41
+b 46
+b 47
+b 43
+b 1
+b 0
+b 5
+b 4
+b 2
+b 10
+b 10
+b 12
+b 14
+b 16
+b 17
+b 40
+b 41
+b 16
+b 2
+b 36
+b 2
+b 7
+b 1
+b 230
+b 230
+b 1
+b 3
+b 4
+b 14
+b 15
+b 19
+b 2
+b 1
+b 77
+b 106
+b 107
+b 112
+b 114
+b 115
+b 76
+b 2
+b 102
+b 2
+b 110
+b 1
+b 13
+b 4
+b 5
+b 12
+b 44
+b 42
+b 2
+b 29
+b 2
+b 4
+b 5
+b 10
+b 4
+b 1
+b 2
+b 3
+b 4
+b 0
+b 4
+b 184
+b 185
+b 200
+b 183
+b 1
+b 27
+b 28
+b 30
+b 30
+b 1
+b 4
+b 56
+b 53
+b 1
+b 13
+b 44
+b 46
+b 47
+b 46
+b 2
+b 11
+b 9
+b 1
+b 162
+b 163
+b 175
+b 32
+b 36
+b 37
+b 34
+b 2
+b 31
+b 1
+b 33
+b 1
+b 15
+b 16
+b 21
+b 16
+b 1
+b 23
+b 51
+b 52
+b 23
+b 1
+b 48
+b 2
+b 136
+b 142
+b 143
+b 135
+b 1
+b 3
+b 4
+b 8
+b 50
+b 48
+b 1
+b 16
+b 17
+b 14
+b 2
+b 23
+b 24
+b 22
+b 1
+b 2
+b 23
+b 26
+b 27
+b 29
+b 31
+b 32
+b 31
+b 1
+b 13
+b 12
+b 2
+b 278
+b 277
+b 2
+b 42
+b 44
+b 46
+b 47
+b 46
+b 1
+b 25
+b 26
+b 15
+b 30
+b 48
+b 49
+b 82
+b 83
+b 112
+b 48
+b 1
+b 79
+b 2
+b 108
+b 1
+b 6
+b 0
+b 2
+b 4
+b 6
+b 37
+b 39
+b 41
+b 42
+b 41
+b 2
+b 34
+b 1
+b 43
+b 45
+b 45
+b 1
+b 219
+b 256
+b 257
+b 263
+b 264
+b 266
+b 271
+b 261
+b 2
+b 58
+b 59
+b 69
+b 57
+b 1
+b 58
+b 1
+b 2
+b 6
+b 7
+b 10
+b 28
+b 9
+b 1
+b 25
+b 1
+b 2
+b 3
+b 31
+b 32
+b 0
+b 2
+b 29
+b 3
+b 6
+b 86
+b 86
+b 1
+b 19
+b 19
+b 1
+b 0
+b 1
+b 0
+b 2
+b 374
+b 409
+b 410
+b 420
+b 422
+b 424
+b 409
+b 1
+b 417
+b 1
+b 7
+b 9
+b 11
+b 13
+b 14
+b 22
+b 11
+b 2
+b 19
+b 1
+b 28
+b 29
+b 31
+b 33
+b 34
+b 26
+b 2
+b 31
+b 2
+b 6
+b 14
+b 40
+b 41
+b 58
+b 59
+b 38
+b 2
+b 57
+b 1
+b 2
+b 3
+b 14
+b 16
+b 17
+b 40
+b 26
+b 0
+b 1
+b 43
+b 45
+b 53
+b 54
+b 56
+b 41
+b 1
+b 52
+b 2
+b 6
+b 10
+b 11
+b 4
+b 2
+b 8
+b 2
+b 12
+b 13
+b 18
+b 12
+b 1
+b 114
+b 110
+b 111
+b 135
+b 136
+b 133
+b 2
+b 107
+b 1
+b 5
+b 0
+b 64
+b 66
+b 68
+b 69
+b 71
+b 72
+b 77
+b 78
+b 83
+b 92
+b 71
+b 1
+b 74
+b 2
+b 88
+b 1
+b 70
+b 13
+b 14
+b 19
+b 20
+b 16
+b 1
+b 42
+b 40
+b 1
+b 350
+b 370
+b 349
+b 2
+b 365
+b 1
+b 130
+b 131
+b 5
+b 6
+b 66
+b 64
+b 1
+b 45
+b 46
+b 48
+b 56
+b 44
+b 1
+b 12
+b 13
+b 15
+b 16
+b 22
+b 28
+b 12
+b 3
+b 3
+b 1
+b 1
+b 32
+b 44
+b 17
+b 42
+b 43
+b 54
+b 55
+b 54
+b 1
+b 39
+b 1
+b 33
+b 57
+b 61
+b 4
+b 5
+b 28
+b 39
+b 27
+b 2
+b 19
+b 1
+b 382
+b 384
+b 386
+b 387
+b 391
+b 399
+b 474
+b 475
+b 477
+b 478
+b 484
+b 384
+b 2
+b 470
+b 2
+b 474
+b 1
+b 33
+b 32
+b 2
+b 83
+b 84
+b 92
+b 81
+b 2
+b 1
+b 0
+b 1
+b 5
+b 11
+b 16
+b 17
+b 62
+b 5
+b 1
+b 8
+b 1
+b 28
+b 29
+b 34
+b 35
+b 37
+b 47
+b 48
+b 51
+b 27
+b 1
+b 46
+b 3
+b 17
+b 18
+b 25
+b 27
+b 15
+b 2
+b 8
+b 7
+b 1
+b 6
+b 2
+b 3
+b 21
+b 22
+b 31
+b 32
+b 40
+b 2
+b 2
+b 17
+b 2
+b 27
+b 2
+b 32
+b 1
+b 6
+b 13
+b 31
+b 32
+b 29
+b 2
+b 12
+b 1
+b 5
+b 6
+b 3
+b 2
+b 5
+b 6
+b 8
+b 3
+b 2
+b 6
+b 1
+b 75
+b 79
+b 80
+b 92
+b 94
+b 216
+b 217
+b 223
+b 214
+b 2
+b 221
+b 1
+b 133
+b 138
+b 135
+b 1
+b 0
+b 1
+b 43
+b 50
+b 56
+b 57
+b 59
+b 60
+b 34
+b 245
+b 253
+b 254
+b 264
+b 266
+b 267
+b 288
+b 293
+b 264
+b 2
+b 290
+b 2
+b 89
+b 90
+b 97
+b 98
+b 108
+b 97
+b 1
+b 105
+b 1
+b 5
+b 6
+b 20
+b 8
+b 9
+b 11
+b 8
+b 2
+b 32
+b 30
+b 3
+b 3
+b 5
+b 6
+b 3
+b 3
+b 6
+b 27
+b 41
+b 42
+b 44
+b 25
+b 3
+b 36
+b 2
+b 3
+b 1
+b 63
+b 21
+b 26
+b 27
+b 32
+b 11
+b 12
+b 37
+b 34
+b 35
+b 37
+b 38
+b 48
+b 34
+b 3
+b 32
+b 31
+b 1
+b 33
+b 32
+b 2
+b 157
+b 46
+b 44
+b 2
+b 76
+b 19
+b 20
+b 22
+b 23
+b 25
+b 19
+b 3
+b 304
+b 305
+b 307
+b 320
+b 352
+b 353
+b 364
+b 304
+b 2
+b 316
+b 1
+b 151
+b 152
+b 176
+b 177
+b 181
+b 150
+b 1
+b 57
+b 55
+b 1
+b 136
+b 137
+b 139
+b 141
+b 157
+b 139
+b 1
+b 19
+b 20
+b 22
+b 18
+b 1
+b 21
+b 1
+b 19
+b 42
+b 76
+b 99
+b 112
+b 111
+b 1
+b 65
+b 67
+b 68
+b 70
+b 67
+b 2
+b 5
+b 18
+b 20
+b 21
+b 30
+b 32
+b 33
+b 50
+b 30
+b 2
+b 47
+b 2
+b 140
+b 61
+b 67
+b 68
+b 98
+b 99
+b 61
+b 1
+b 0
+b 139
+b 7
+b 9
+b 10
+b 12
+b 18
+b 20
+b 17
+b 3
+b 0
+b 1
+b 23
+b 21
+b 1
+b 60
+b 61
+b 63
+b 74
+b 75
+b 60
+b 2
+b 14
+b 19
+b 18
+b 1
+b 7
+b 8
+b 30
+b 43
+b 6
+b 7
+b 18
+b 19
+b 17
+b 1
+b 2
+b 20
+b 102
+b 121
+b 122
+b 124
+b 120
+b 1
+b 35
+b 33
+b 2
+b 6
+b 95
+b 102
+b 103
+b 107
+b 30
+b 42
+b 43
+b 45
+b 50
+b 51
+b 28
+b 1
+b 41
+b 2
+b 25
+b 42
+b 43
+b 45
+b 47
+b 45
+b 1
+b 65
+b 67
+b 69
+b 70
+b 78
+b 79
+b 65
+b 1
+b 4
+b 66
+b 67
+b 10
+b 15
+b 16
+b 18
+b 19
+b 9
+b 2
+b 12
+b 1
+b 36
+b 0
+b 12
+b 41
+b 51
+b 62
+b 49
+b 3
+b 40
+b 1
+b 54
+b 1
+b 1
+b 11
+b 12
+b 63
+b 65
+b 66
+b 68
+b 63
+b 2
+b 129
+b 129
+b 1
+b 6
+b 11
+b 18
+b 19
+b 21
+b 23
+b 24
+b 16
+b 2
+b 10
+b 1
+b 1
+b 129
+b 178
+b 179
+b 183
+b 0
+b 2
+b 2
+b 1
+b 0
+b 1
+b 0
+b 1
+b 42
+b 43
+b 45
+b 47
+b 49
+b 39
+b 1
+b 0
+b 6
+b 7
+b 16
+b 4
+b 2
+b 67
+b 65
+b 1
+b 70
+b 71
+b 70
+b 2
+b 9
+b 10
+b 9
+b 2
+b 116
+b 117
+b 116
+b 1
+b 4
+b 96
+b 115
+b 116
+b 113
+b 2
+b 95
+b 1
+b 33
+b 34
+b 79
+b 80
+b 91
+b 33
+b 2
+b 77
+b 2
+b 0
+b 121
+b 132
+b 119
+b 2
+b 19
+b 20
+b 22
+b 36
+b 19
+b 2
+b 180
+b 189
+b 191
+b 193
+b 194
+b 196
+b 208
+b 196
+b 1
+b 177
+b 1
+b 78
+b 89
+b 123
+b 124
+b 132
+b 133
+b 135
+b 136
+b 121
+b 2
+b 130
+b 3
+b 88
+b 1
+b 18
+b 18
+b 1
+b 126
+b 125
+b 2
+b 24
+b 22
+b 2
+b 3
+b 5
+b 6
+b 8
+b 9
+b 19
+b 5
+b 3
+b 7
+b 92
+b 91
+b 1
+b 13
+b 14
+b 12
+b 1
+b 1
+b 56
+b 85
+b 55
+b 2
+b 82
+b 1
+b 0
+b 2
+b 3
+b 5
+b 16
+b 0
+b 2
+b 30
+b 31
+b 30
+b 2
+b 6
+b 13
+b 14
+b 14
+b 1
+b 66
+b 64
+b 1
+b 54
+b 59
+b 60
+b 53
+b 1
+b 35
+b 37
+b 0
+b 3
+b 18
+b 0
+b 1
+b 19
+b 63
+b 67
+b 78
+b 88
+b 66
+b 2
+b 4
+b 1
+b 2
+b 4
+b 6
+b 7
+b 8
+b 4
+b 4
+b 34
+b 35
+b 40
+b 77
+b 78
+b 80
+b 81
+b 83
+b 95
+b 76
+b 1
+b 94
+b 1
+b 8
+b 31
+b 32
+b 34
+b 8
+b 1
+b 6
+b 5
+b 3
+b 5
+b 8
+b 9
+b 18
+b 19
+b 25
+b 8
+b 2
+b 14
+b 2
+b 0
+b 1
+b 21
+b 27
+b 28
+b 42
+b 44
+b 45
+b 53
+b 25
+b 4
+b 36
+b 1
+b 20
+b 1
+b 7
+b 0
+b 2
+b 9
+b 21
+b 22
+b 8
+b 2
+b 1
+b 108
+b 115
+b 116
+b 106
+b 2
+b 5
+b 5
+b 1
+b 120
+b 121
+b 118
+b 2
+b 24
+b 25
+b 22
+b 2
+b 40
+b 39
+b 1
+b 3
+b 5
+b 7
+b 8
+b 5
+b 2
+b 57
+b 79
+b 80
+b 16
+b 18
+b 16
+b 1
+b 45
+b 47
+b 49
+b 50
+b 52
+b 53
+b 55
+b 57
+b 58
+b 72
+b 49
+b 3
+b 54
+b 2
+b 22
+b 30
+b 29
+b 1
+b 2
+b 0
+b 1
+b 28
+b 47
+b 48
+b 71
+b 84
+b 48
+b 1
+b 21
+b 22
+b 24
+b 26
+b 27
+b 19
+b 2
+b 24
+b 3
+b 28
+b 29
+b 26
+b 2
+b 0
+b 2
+b 10
+b 6
+b 9
+b 10
+b 3
+b 1
+b 98
+b 116
+b 115
+b 2
+b 97
+b 1
+b 66
+b 67
+b 71
+b 46
+b 54
+b 52
+b 3
+b 61
+b 63
+b 65
+b 66
+b 68
+b 70
+b 63
+b 2
+b 68
+b 1
+b 15
+b 22
+b 261
+b 294
+b 295
+b 297
+b 4
+b 133
+b 49
+b 50
+b 3
+b 2
+b 4
+b 1
+b 39
+b 53
+b 57
+b 58
+b 68
+b 81
+b 57
+b 2
+b 64
+b 2
+b 74
+b 1
+b 40
+b 38
+b 50
+b 51
+b 55
+b 22
+b 4
+b 5
+b 3
+b 36
+b 34
+b 1
+b 12
+b 32
+b 37
+b 38
+b 40
+b 42
+b 43
+b 44
+b 29
+b 1
+b 3
+b 5
+b 7
+b 9
+b 8
+b 10
+b 11
+b 8
+b 2
+b 2
+b 4
+b 6
+b 8
+b 10
+b 11
+b 0
+b 1
+b 1
+b 66
+b 76
+b 77
+b 79
+b 80
+b 82
+b 93
+b 99
+b 79
+b 2
+b 89
+b 1
+b 9
+b 10
+b 12
+b 14
+b 15
+b 24
+b 26
+b 9
+b 2
+b 85
+b 84
+b 2
+b 16
+b 16
+b 1
+b 13
+b 17
+b 18
+b 11
+b 2
+b 26
+b 27
+b 29
+b 30
+b 26
+b 3
+b 9
+b 47
+b 54
+b 77
+b 78
+b 143
+b 158
+b 75
+b 3
+b 53
+b 1
+b 57
+b 9
+b 10
+b 12
+b 13
+b 8
+b 1
+b 11
+b 3
+b 1
+b 6
+b 7
+b 0
+b 2
+b 3
+b 1
+b 24
+b 26
+b 65
+b 190
+b 191
+b 193
+b 188
+b 2
+b 191
+b 1
+b 5
+b 6
+b 11
+b 4
+b 1
+b 19
+b 21
+b 22
+b 24
+b 26
+b 28
+b 29
+b 33
+b 44
+b 17
+b 1
+b 20
+b 2
+b 126
+b 137
+b 138
+b 8
+b 127
+b 133
+b 134
+b 136
+b 138
+b 138
+b 1
+b 1
+b 0
+b 1
+b 33
+b 9
+b 10
+b 16
+b 25
+b 8
+b 1
+b 24
+b 1
+b 74
+b 112
+b 113
+b 110
+b 2
+b 73
+b 1
+b 175
+b 176
+b 178
+b 180
+b 181
+b 183
+b 198
+b 175
+b 2
+b 50
+b 68
+b 69
+b 65
+b 1
+b 68
+b 69
+b 68
+b 2
+b 12
+b 12
+b 1
+b 24
+b 34
+b 35
+b 22
+b 1
+b 33
+b 1
+b 193
+b 225
+b 226
+b 255
+b 35
+b 41
+b 42
+b 41
+b 2
+b 3
+b 4
+b 6
+b 3
+b 2
+b 19
+b 18
+b 1
+b 43
+b 44
+b 52
+b 43
+b 2
+b 48
+b 1
+b 29
+b 39
+b 40
+b 39
+b 2
+b 26
+b 1
+b 75
+b 73
+b 1
+b 4
+b 6
+b 7
+b 3
+b 18
+b 20
+b 21
+b 8
+b 6
+b 1
+b 5
+b 5
+b 1
+b 73
+b 34
+b 38
+b 40
+b 41
+b 38
+b 2
+b 5
+b 7
+b 8
+b 11
+b 7
+b 4
+b 14
+b 16
+b 18
+b 19
+b 30
+b 18
+b 2
+b 26
+b 2
+b 12
+b 49
+b 50
+b 35
+b 39
+b 34
+b 2
+b 35
+b 1
+b 53
+b 54
+b 56
+b 58
+b 60
+b 61
+b 50
+b 1
+b 8
+b 6
+b 5
+b 1
+b 46
+b 44
+b 2
+b 2
+b 3
+b 21
+b 2
+b 1
+b 155
+b 29
+b 30
+b 19
+b 27
+b 28
+b 17
+b 1
+b 26
+b 1
+b 257
+b 267
+b 268
+b 270
+b 286
+b 256
+b 2
+b 264
+b 1
+b 124
+b 126
+b 127
+b 16
+b 5
+b 6
+b 11
+b 12
+b 5
+b 1
+b 8
+b 2
+b 4
+b 4
+b 1
+b 149
+b 153
+b 124
+b 130
+b 131
+b 133
+b 12
+b 10
+b 1
+b 6
+b 7
+b 12
+b 13
+b 17
+b 31
+b 4
+b 3
+b 26
+b 3
+b 132
+b 134
+b 136
+b 137
+b 139
+b 140
+b 150
+b 163
+b 134
+b 2
+b 59
+b 57
+b 2
+b 19
+b 58
+b 64
+b 65
+b 70
+b 71
+b 73
+b 74
+b 76
+b 78
+b 62
+b 2
+b 68
+b 3
+b 73
+b 1
+b 57
+b 1
+b 56
+b 2
+b 3
+b 5
+b 6
+b 2
+b 3
+b 2
+b 17
+b 16
+b 4
+b 1
+b 1
+b 109
+b 114
+b 113
+b 2
+b 7
+b 8
+b 10
+b 13
+b 7
+b 2
+b 37
+b 40
+b 41
+b 49
+b 1
+b 3
+b 52
+b 51
+b 2
+b 7
+b 24
+b 25
+b 27
+b 28
+b 30
+b 24
+b 3
+b 4
+b 1
+b 3
+b 47
+b 52
+b 53
+b 55
+b 57
+b 58
+b 60
+b 62
+b 45
+b 3
+b 48
+b 1
+b 177
+b 177
+b 1
+b 33
+b 34
+b 39
+b 47
+b 53
+b 54
+b 46
+b 1
+b 3
+b 4
+b 5
+b 223
+b 252
+b 221
+b 1
+b 4
+b 103
+b 104
+b 102
+b 1
+b 65
+b 27
+b 28
+b 30
+b 31
+b 39
+b 29
+b 1
+b 37
+b 1
+b 49
+b 55
+b 47
+b 2
+b 19
+b 20
+b 19
+b 1
+b 56
+b 3
+b 3
+b 4
+b 13
+b 15
+b 13
+b 1
+b 22
+b 5
+b 13
+b 14
+b 20
+b 19
+b 1
+b 16
+b 16
+b 1
+b 15
+b 37
+b 39
+b 40
+b 46
+b 39
+b 1
+b 1
+b 3
+b 275
+b 283
+b 284
+b 274
+b 2
+b 279
+b 2
+b 2
+b 3
+b 5
+b 7
+b 9
+b 10
+b 12
+b 14
+b 2
+b 2
+b 93
+b 95
+b 93
+b 1
+b 228
+b 236
+b 237
+b 239
+b 241
+b 242
+b 62
+b 64
+b 65
+b 62
+b 2
+b 60
+b 58
+b 3
+b 26
+b 27
+b 24
+b 2
+b 70
+b 71
+b 79
+b 69
+b 1
+b 290
+b 368
+b 369
+b 371
+b 371
+b 1
+b 9
+b 7
+b 2
+b 29
+b 27
+b 2
+b 6
+b 7
+b 9
+b 10
+b 15
+b 19
+b 9
+b 1
+b 263
+b 265
+b 266
+b 273
+b 286
+b 306
+b 316
+b 261
+b 1
+b 264
+b 2
+b 267
+b 1
+b 3
+b 12
+b 13
+b 9
+b 1
+b 10
+b 11
+b 16
+b 8
+b 2
+b 14
+b 1
+b 22
+b 24
+b 26
+b 27
+b 40
+b 41
+b 24
+b 2
+b 38
+b 2
+b 31
+b 33
+b 33
+b 1
+b 192
+b 190
+b 2
+b 39
+b 59
+b 61
+b 62
+b 68
+b 69
+b 71
+b 71
+b 1
+b 15
+b 25
+b 26
+b 13
+b 1
+b 2
+b 11
+b 12
+b 11
+b 1
+b 15
+b 16
+b 20
+b 28
+b 13
+b 2
+b 25
+b 1
+b 18
+b 19
+b 21
+b 22
+b 18
+b 3
+b 34
+b 34
+b 1
+b 196
+b 108
+b 109
+b 111
+b 113
+b 0
+b 1
+b 7
+b 8
+b 10
+b 6
+b 1
+b 57
+b 57
+b 1
+b 10
+b 22
+b 23
+b 25
+b 36
+b 8
+b 2
+b 33
+b 2
+b 27
+b 27
+b 3
+b 4
+b 15
+b 3
+b 1
+b 7
+b 8
+b 5
+b 2
+b 0
+b 2
+b 3
+b 8
+b 9
+b 0
+b 2
+b 2
+b 2
+b 1
+b 45
+b 55
+b 56
+b 63
+b 44
+b 2
+b 51
+b 2
+b 52
+b 1
+b 7
+b 8
+b 12
+b 30
+b 13
+b 70
+b 12
+b 1
+b 0
+b 1
+b 3
+b 0
+b 2
+b 3
+b 7
+b 0
+b 2
+b 121
+b 124
+b 121
+b 3
+b 10
+b 11
+b 13
+b 14
+b 10
+b 3
+b 4
+b 5
+b 29
+b 72
+b 30
+b 40
+b 41
+b 43
+b 6
+b 8
+b 10
+b 11
+b 4
+b 1
+b 9
+b 1
+b 215
+b 217
+b 218
+b 231
+b 213
+b 1
+b 229
+b 2
+b 254
+b 255
+b 257
+b 259
+b 78
+b 79
+b 89
+b 6
+b 85
+b 95
+b 84
+b 2
+b 90
+b 1
+b 16
+b 54
+b 61
+b 62
+b 62
+b 1
+b 164
+b 166
+b 167
+b 166
+b 2
+b 114
+b 114
+b 1
+b 33
+b 70
+b 72
+b 5
+b 6
+b 8
+b 9
+b 23
+b 4
+b 1
+b 7
+b 2
+b 18
+b 2
+b 239
+b 250
+b 251
+b 253
+b 255
+b 257
+b 258
+b 267
+b 257
+b 2
+b 263
+b 1
+b 118
+b 121
+b 122
+b 9
+b 19
+b 25
+b 23
+b 2
+b 18
+b 1
+b 28
+b 73
+b 75
+b 27
+b 1
+b 81
+b 82
+b 88
+b 89
+b 90
+b 81
+b 2
+b 298
+b 343
+b 344
+b 362
+b 409
+b 410
+b 409
+b 1
+b 340
+b 1
+b 52
+b 50
+b 3
+b 57
+b 58
+b 64
+b 65
+b 57
+b 2
+b 63
+b 101
+b 99
+b 2
+b 18
+b 87
+b 0
+b 4
+b 3
+b 2
+b 38
+b 40
+b 41
+b 67
+b 68
+b 38
+b 2
+b 1
+b 15
+b 29
+b 31
+b 13
+b 2
+b 4
+b 5
+b 7
+b 7
+b 1
+b 60
+b 97
+b 100
+b 101
+b 111
+b 112
+b 111
+b 1
+b 64
+b 12
+b 7
+b 8
+b 9
+b 26
+b 27
+b 38
+b 9
+b 1
+b 28
+b 37
+b 38
+b 58
+b 57
+b 1
+b 7
+b 61
+b 67
+b 68
+b 67
+b 2
+b 5
+b 6
+b 18
+b 2
+b 3
+b 2
+b 1
+b 122
+b 128
+b 121
+b 1
+b 98
+b 100
+b 115
+b 116
+b 11
+b 12
+b 17
+b 9
+b 2
+b 14
+b 1
+b 5
+b 11
+b 24
+b 3
+b 2
+b 22
+b 9
+b 18
+b 20
+b 21
+b 22
+b 16
+b 1
+b 1
+b 0
+b 1
+b 25
+b 6
+b 12
+b 13
+b 4
+b 2
+b 1
+b 2
+b 4
+b 5
+b 13
+b 16
+b 4
+b 2
+b 83
+b 22
+b 55
+b 6
+b 5
+b 1
+b 2
+b 3
+b 5
+b 0
+b 2
+b 3
+b 1
+b 28
+b 40
+b 52
+b 53
+b 52
+b 2
+b 25
+b 1
+b 1
+b 7
+b 5
+b 3
+b 9
+b 11
+b 12
+b 14
+b 16
+b 17
+b 19
+b 27
+b 7
+b 1
+b 10
+b 2
+b 20
+b 26
+b 27
+b 43
+b 58
+b 18
+b 2
+b 30
+b 28
+b 2
+b 117
+b 125
+b 127
+b 128
+b 130
+b 132
+b 114
+b 1
+b 33
+b 32
+b 2
+b 42
+b 44
+b 57
+b 58
+b 42
+b 1
+b 33
+b 1
+b 28
+b 4
+b 5
+b 112
+b 119
+b 120
+b 145
+b 3
+b 1
+b 4
+b 1
+b 11
+b 12
+b 14
+b 16
+b 29
+b 16
+b 1
+b 162
+b 163
+b 165
+b 193
+b 194
+b 200
+b 161
+b 1
+b 192
+b 2
+b 2
+b 5
+b 6
+b 8
+b 9
+b 11
+b 34
+b 11
+b 13
+b 48
+b 49
+b 57
+b 9
+b 8
+b 1
+b 47
+b 48
+b 50
+b 57
+b 64
+b 3
+b 4
+b 9
+b 3
+b 1
+b 6
+b 2
+b 260
+b 273
+b 40
+b 41
+b 39
+b 1
+b 19
+b 17
+b 1
+b 15
+b 25
+b 27
+b 29
+b 30
+b 48
+b 50
+b 27
+b 2
+b 14
+b 1
+b 88
+b 100
+b 128
+b 98
+b 3
+b 124
+b 1
+b 6
+b 8
+b 9
+b 6
+b 2
+b 71
+b 90
+b 92
+b 94
+b 95
+b 97
+b 98
+b 102
+b 71
+b 1
+b 91
+b 2
+b 60
+b 3
+b 5
+b 6
+b 5
+b 1
+b 72
+b 71
+b 1
+b 9
+b 10
+b 12
+b 13
+b 19
+b 6
+b 1
+b 14
+b 4
+b 0
+b 4
+b 5
+b 2
+b 3
+b 196
+b 198
+b 196
+b 1
+b 19
+b 21
+b 23
+b 25
+b 26
+b 54
+b 67
+b 68
+b 70
+b 67
+b 2
+b 34
+b 36
+b 32
+b 1
+b 18
+b 20
+b 21
+b 16
+b 1
+b 19
+b 2
+b 10
+b 12
+b 12
+b 1
+b 51
+b 62
+b 63
+b 65
+b 67
+b 68
+b 70
+b 72
+b 49
+b 3
+b 57
+b 4
+b 61
+b 63
+b 64
+b 64
+b 1
+b 18
+b 19
+b 21
+b 18
+b 2
+b 61
+b 59
+b 1
+b 25
+b 32
+b 34
+b 35
+b 54
+b 55
+b 32
+b 2
+b 0
+b 1
+b 20
+b 22
+b 17
+b 1
+b 28
+b 28
+b 1
+b 60
+b 45
+b 3
+b 4
+b 12
+b 14
+b 15
+b 17
+b 19
+b 12
+b 2
+b 17
+b 1
+b 20
+b 22
+b 23
+b 30
+b 22
+b 1
+b 27
+b 2
+b 12
+b 13
+b 68
+b 98
+b 108
+b 109
+b 114
+b 97
+b 2
+b 105
+b 1
+b 21
+b 22
+b 24
+b 26
+b 34
+b 35
+b 55
+b 54
+b 2
+b 10
+b 11
+b 2
+b 1
+b 1
+b 58
+b 65
+b 66
+b 68
+b 69
+b 71
+b 134
+b 63
+b 5
+b 128
+b 1
+b 45
+b 44
+b 1
+b 41
+b 42
+b 44
+b 73
+b 74
+b 75
+b 41
+b 2
+b 1
+b 48
+b 49
+b 57
+b 58
+b 57
+b 1
+b 2
+b 26
+b 0
+b 2
+b 14
+b 4
+b 6
+b 8
+b 9
+b 25
+b 27
+b 23
+b 4
+b 1
+b 1
+b 1
+b 0
+b 1
+b 2
+b 3
+b 24
+b 0
+b 2
+b 22
+b 1
+b 3
+b 8
+b 7
+b 2
+b 103
+b 102
+b 2
+b 44
+b 45
+b 51
+b 43
+b 1
+b 7
+b 8
+b 19
+b 55
+b 66
+b 70
+b 71
+b 73
+b 74
+b 76
+b 78
+b 68
+b 2
+b 71
+b 2
+b 65
+b 1
+b 15
+b 30
+b 32
+b 34
+b 35
+b 37
+b 39
+b 41
+b 30
+b 1
+b 24
+b 131
+b 132
+b 142
+b 148
+b 142
+b 1
+b 16
+b 14
+b 1
+b 4
+b 6
+b 7
+b 9
+b 11
+b 12
+b 11
+b 1
+b 10
+b 76
+b 83
+b 84
+b 14
+b 16
+b 17
+b 24
+b 14
+b 2
+b 22
+b 1
+b 22
+b 23
+b 30
+b 22
+b 2
+b 26
+b 1
+b 1
+b 3
+b 5
+b 6
+b 19
+b 5
+b 1
+b 16
+b 25
+b 26
+b 28
+b 48
+b 136
+b 137
+b 33
+b 35
+b 36
+b 35
+b 1
+b 13
+b 11
+b 2
+b 25
+b 26
+b 81
+b 203
+b 204
+b 206
+b 208
+b 206
+b 1
+b 99
+b 14
+b 24
+b 25
+b 36
+b 22
+b 2
+b 13
+b 1
+b 31
+b 30
+b 1
+b 13
+b 27
+b 42
+b 26
+b 2
+b 1
+b 2
+b 4
+b 6
+b 3
+b 5
+b 6
+b 20
+b 13
+b 14
+b 16
+b 29
+b 16
+b 1
+b 10
+b 1
+b 26
+b 12
+b 13
+b 20
+b 12
+b 1
+b 1
+b 3
+b 4
+b 14
+b 93
+b 90
+b 1
+b 50
+b 14
+b 14
+b 1
+b 3
+b 4
+b 6
+b 8
+b 9
+b 11
+b 12
+b 1
+b 2
+b 6
+b 3
+b 2
+b 3
+b 152
+b 169
+b 173
+b 186
+b 190
+b 191
+b 193
+b 194
+b 168
+b 1
+b 111
+b 17
+b 44
+b 16
+b 2
+b 41
+b 1
+b 1
+b 2
+b 0
+b 1
+b 50
+b 2
+b 3
+b 29
+b 31
+b 32
+b 39
+b 29
+b 2
+b 19
+b 20
+b 22
+b 36
+b 18
+b 1
+b 33
+b 3
+b 28
+b 2
+b 3
+b 111
+b 123
+b 124
+b 109
+b 1
+b 8
+b 8
+b 1
+b 0
+b 1
+b 0
+b 77
+b 79
+b 80
+b 82
+b 84
+b 85
+b 87
+b 75
+b 1
+b 78
+b 2
+b 59
+b 20
+b 36
+b 37
+b 36
+b 1
+b 60
+b 62
+b 11
+b 9
+b 2
+b 72
+b 78
+b 79
+b 85
+b 91
+b 76
+b 4
+b 71
+b 1
+b 30
+b 32
+b 33
+b 40
+b 41
+b 50
+b 32
+b 2
+b 36
+b 2
+b 46
+b 1
+b 22
+b 19
+b 1
+b 2
+b 3
+b 5
+b 6
+b 2
+b 3
+b 57
+b 68
+b 69
+b 66
+b 2
+b 62
+b 64
+b 65
+b 67
+b 64
+b 2
+b 1
+b 0
+b 1
+b 27
+b 21
+b 30
+b 38
+b 39
+b 41
+b 43
+b 18
+b 23
+b 24
+b 28
+b 30
+b 31
+b 23
+b 2
+b 16
+b 1
+b 3
+b 20
+b 202
+b 203
+b 19
+b 20
+b 31
+b 32
+b 38
+b 18
+b 1
+b 24
+b 22
+b 1
+b 61
+b 62
+b 58
+b 1
+b 8
+b 9
+b 14
+b 18
+b 29
+b 89
+b 90
+b 103
+b 104
+b 119
+b 89
+b 1
+b 43
+b 50
+b 54
+b 55
+b 59
+b 41
+b 2
+b 52
+b 2
+b 211
+b 0
+b 8
+b 31
+b 6
+b 3
+b 25
+b 1
+b 9
+b 17
+b 18
+b 20
+b 21
+b 17
+b 3
+b 97
+b 95
+b 1
+b 9
+b 11
+b 12
+b 19
+b 25
+b 9
+b 2
+b 68
+b 69
+b 127
+b 67
+b 1
+b 29
+b 30
+b 27
+b 2
+b 2
+b 3
+b 0
+b 2
+b 3
+b 0
+b 1
+b 193
+b 83
+b 87
+b 88
+b 92
+b 93
+b 91
+b 1
+b 163
+b 162
+b 2
+b 126
+b 126
+b 1
+b 103
+b 105
+b 106
+b 109
+b 110
+b 116
+b 131
+b 105
+b 4
+b 111
+b 1
+b 41
+b 6
+b 7
+b 28
+b 26
+b 3
+b 0
+b 1
+b 63
+b 61
+b 1
+b 5
+b 1
+b 8
+b 9
+b 41
+b 42
+b 53
+b 39
+b 2
+b 24
+b 22
+b 2
+b 4
+b 17
+b 18
+b 20
+b 30
+b 17
+b 2
+b 11
+b 9
+b 34
+b 35
+b 41
+b 43
+b 41
+b 1
+b 13
+b 32
+b 34
+b 35
+b 30
+b 1
+b 2
+b 7
+b 6
+b 1
+b 80
+b 79
+b 1
+b 15
+b 17
+b 18
+b 17
+b 2
+b 29
+b 30
+b 29
+b 2
+b 3
+b 38
+b 10
+b 11
+b 32
+b 32
+b 1
+b 8
+b 7
+b 1
+b 80
+b 78
+b 1
+b 95
+b 100
+b 101
+b 103
+b 105
+b 106
+b 100
+b 2
+b 41
+b 45
+b 46
+b 6
+b 22
+b 24
+b 25
+b 27
+b 6
+b 1
+b 21
+b 2
+b 17
+b 17
+b 19
+b 20
+b 36
+b 38
+b 19
+b 2
+b 14
+b 1
+b 29
+b 1
+b 31
+b 13
+b 15
+b 16
+b 22
+b 14
+b 16
+b 18
+b 20
+b 21
+b 23
+b 25
+b 31
+b 25
+b 1
+b 1
+b 3
+b 0
+b 3
+b 18
+b 22
+b 20
+b 3
+b 1
+b 2
+b 4
+b 6
+b 1
+b 2
+b 16
+b 596
+b 597
+b 731
+b 742
+b 595
+b 1
+b 739
+b 3
+b 729
+b 1
+b 23
+b 55
+b 56
+b 64
+b 65
+b 67
+b 76
+b 77
+b 79
+b 127
+b 55
+b 1
+b 44
+b 35
+b 36
+b 37
+b 0
+b 1
+b 179
+b 177
+b 2
+b 6
+b 7
+b 9
+b 11
+b 12
+b 27
+b 9
+b 2
+b 0
+b 2
+b 76
+b 2
+b 1
+b 191
+b 189
+b 1
+b 13
+b 14
+b 25
+b 13
+b 2
+b 2
+b 3
+b 11
+b 12
+b 10
+b 1
+b 58
+b 6
+b 8
+b 8
+b 1
+b 0
+b 2
+b 3
+b 4
+b 0
+b 4
+b 0
+b 2
+b 0
+b 1
+b 100
+b 99
+b 1
+b 13
+b 35
+b 101
+b 102
+b 104
+b 105
+b 134
+b 104
+b 2
+b 37
+b 34
+b 1
+b 5
+b 41
+b 47
+b 46
+b 2
+b 0
+b 1
+b 3
+b 5
+b 7
+b 32
+b 33
+b 30
+b 2
+b 54
+b 60
+b 74
+b 52
+b 2
+b 31
+b 32
+b 36
+b 56
+b 57
+b 54
+b 3
+b 35
+b 1
+b 1
+b 0
+b 1
+b 12
+b 23
+b 25
+b 0
+b 1
+b 49
+b 31
+b 40
+b 44
+b 45
+b 71
+b 44
+b 2
+b 67
+b 3
+b 28
+b 1
+b 13
+b 12
+b 1
+b 45
+b 46
+b 48
+b 21
+b 0
+b 2
+b 3
+b 5
+b 10
+b 2
+b 2
+b 6
+b 1
+b 97
+b 103
+b 105
+b 106
+b 109
+b 111
+b 112
+b 101
+b 1
+b 110
+b 1
+b 1
+b 30
+b 38
+b 37
+b 1
+b 3
+b 4
+b 30
+b 122
+b 124
+b 126
+b 127
+b 133
+b 136
+b 133
+b 2
+b 1
+b 2
+b 4
+b 0
+b 1
+b 14
+b 54
+b 55
+b 54
+b 1
+b 37
+b 45
+b 46
+b 43
+b 2
+b 36
+b 1
+b 83
+b 89
+b 90
+b 92
+b 94
+b 95
+b 98
+b 83
+b 1
+b 86
+b 2
+b 91
+b 3
+b 8
+b 23
+b 24
+b 26
+b 23
+b 2
+b 11
+b 11
+b 1
+b 20
+b 6
+b 7
+b 11
+b 4
+b 2
+b 1
+b 14
+b 16
+b 18
+b 19
+b 16
+b 2
+b 14
+b 12
+b 1
+b 23
+b 34
+b 35
+b 37
+b 39
+b 40
+b 42
+b 39
+b 2
+b 6
+b 4
+b 1
+b 18
+b 16
+b 1
+b 0
+b 2
+b 4
+b 6
+b 8
+b 64
+b 66
+b 68
+b 69
+b 68
+b 1
+b 112
+b 113
+b 132
+b 113
+b 1
+b 3
+b 62
+b 75
+b 77
+b 79
+b 80
+b 61
+b 1
+b 1
+b 102
+b 7
+b 8
+b 34
+b 35
+b 52
+b 34
+b 2
+b 50
+b 1
+b 135
+b 137
+b 138
+b 144
+b 145
+b 150
+b 135
+b 2
+b 143
+b 1
+b 41
+b 53
+b 59
+b 69
+b 70
+b 53
+b 1
+b 56
+b 3
+b 64
+b 1
+b 4
+b 24
+b 34
+b 49
+b 50
+b 46
+b 1
+b 16
+b 17
+b 19
+b 14
+b 2
+b 5
+b 4
+b 2
+b 143
+b 162
+b 167
+b 168
+b 167
+b 1
+b 5
+b 6
+b 8
+b 9
+b 16
+b 17
+b 3
+b 2
+b 6
+b 2
+b 11
+b 1
+b 3
+b 29
+b 31
+b 32
+b 31
+b 2
+b 19
+b 20
+b 18
+b 1
+b 34
+b 6
+b 5
+b 1
+b 19
+b 25
+b 26
+b 43
+b 45
+b 46
+b 51
+b 45
+b 1
+b 48
+b 1
+b 38
+b 35
+b 1
+b 2
+b 3
+b 0
+b 2
+b 26
+b 23
+b 1
+b 28
+b 256
+b 266
+b 269
+b 270
+b 265
+b 4
+b 16
+b 28
+b 29
+b 36
+b 27
+b 1
+b 56
+b 57
+b 59
+b 11
+b 13
+b 17
+b 24
+b 25
+b 27
+b 15
+b 3
+b 20
+b 1
+b 23
+b 95
+b 128
+b 1
+b 2
+b 4
+b 13
+b 1
+b 2
+b 9
+b 1
+b 158
+b 67
+b 68
+b 70
+b 72
+b 73
+b 66
+b 1
+b 8
+b 6
+b 2
+b 51
+b 56
+b 57
+b 63
+b 56
+b 1
+b 60
+b 2
+b 9
+b 104
+b 52
+b 25
+b 7
+b 8
+b 10
+b 12
+b 13
+b 22
+b 10
+b 2
+b 19
+b 2
+b 26
+b 27
+b 29
+b 31
+b 33
+b 26
+b 2
+b 23
+b 1
+b 3
+b 5
+b 6
+b 26
+b 3
+b 2
+b 18
+b 19
+b 21
+b 21
+b 1
+b 22
+b 7
+b 41
+b 39
+b 1
+b 0
+b 16
+b 5
+b 12
+b 13
+b 2
+b 3
+b 120
+b 121
+b 123
+b 136
+b 120
+b 2
+b 133
+b 2
+b 17
+b 18
+b 20
+b 22
+b 22
+b 1
+b 12
+b 13
+b 15
+b 12
+b 2
+b 110
+b 112
+b 114
+b 115
+b 123
+b 114
+b 2
+b 119
+b 2
+b 34
+b 12
+b 33
+b 44
+b 48
+b 49
+b 51
+b 51
+b 1
+b 4
+b 0
+b 1
+b 25
+b 23
+b 3
+b 33
+b 76
+b 30
+b 1
+b 23
+b 27
+b 28
+b 35
+b 36
+b 25
+b 2
+b 22
+b 1
+b 46
+b 48
+b 49
+b 51
+b 46
+b 2
+b 83
+b 85
+b 86
+b 90
+b 85
+b 2
+b 0
+b 1
+b 58
+b 72
+b 73
+b 86
+b 92
+b 72
+b 1
+b 83
+b 3
+b 86
+b 1
+b 3
+b 10
+b 7
+b 61
+b 7
+b 1
+b 4
+b 5
+b 16
+b 4
+b 1
+b 13
+b 3
+b 9
+b 2
+b 4
+b 5
+b 7
+b 9
+b 2
+b 2
+b 7
+b 1
+b 9
+b 22
+b 51
+b 57
+b 58
+b 60
+b 61
+b 63
+b 65
+b 63
+b 1
+b 151
+b 8
+b 10
+b 11
+b 13
+b 14
+b 17
+b 21
+b 23
+b 24
+b 37
+b 8
+b 2
+b 11
+b 4
+b 10
+b 16
+b 17
+b 5
+b 6
+b 24
+b 25
+b 27
+b 51
+b 5
+b 1
+b 21
+b 2
+b 47
+b 2
+b 75
+b 130
+b 132
+b 133
+b 135
+b 1
+b 3
+b 5
+b 6
+b 7
+b 1
+b 1
+b 168
+b 170
+b 172
+b 173
+b 175
+b 188
+b 189
+b 195
+b 170
+b 2
+b 186
+b 2
+b 189
+b 2
+b 54
+b 56
+b 61
+b 62
+b 56
+b 1
+b 59
+b 1
+b 10
+b 11
+b 3
+b 5
+b 40
+b 52
+b 53
+b 55
+b 69
+b 38
+b 2
+b 8
+b 9
+b 14
+b 6
+b 2
+b 7
+b 1
+b 132
+b 147
+b 148
+b 153
+b 147
+b 1
+b 150
+b 3
+b 129
+b 1
+b 26
+b 43
+b 44
+b 46
+b 51
+b 52
+b 1
+b 120
+b 121
+b 127
+b 129
+b 131
+b 120
+b 2
+b 123
+b 1
+b 9
+b 7
+b 1
+b 27
+b 37
+b 64
+b 74
+b 88
+b 89
+b 86
+b 2
+b 73
+b 1
+b 242
+b 242
+b 1
+b 20
+b 22
+b 24
+b 25
+b 22
+b 2
+b 1
+b 21
+b 57
+b 58
+b 56
+b 1
+b 20
+b 17
+b 1
+b 3
+b 4
+b 56
+b 58
+b 60
+b 0
+b 1
+b 0
+b 2
+b 0
+b 1
+b 3
+b 0
+b 2
+b 0
+b 1
+b 82
+b 6
+b 7
+b 9
+b 11
+b 13
+b 14
+b 9
+b 1
+b 62
+b 49
+b 48
+b 2
+b 4
+b 5
+b 16
+b 18
+b 19
+b 2
+b 2
+b 16
+b 1
+b 16
+b 17
+b 40
+b 14
+b 68
+b 69
+b 71
+b 71
+b 1
+b 39
+b 40
+b 37
+b 2
+b 19
+b 16
+b 1
+b 57
+b 59
+b 65
+b 66
+b 74
+b 75
+b 117
+b 122
+b 59
+b 1
+b 62
+b 2
+b 72
+b 1
+b 169
+b 175
+b 176
+b 172
+b 1
+b 19
+b 20
+b 19
+b 2
+b 2
+b 3
+b 5
+b 11
+b 2
+b 2
+b 10
+b 9
+b 11
+b 13
+b 14
+b 21
+b 22
+b 7
+b 1
+b 21
+b 1
+b 14
+b 16
+b 18
+b 19
+b 34
+b 36
+b 34
+b 1
+b 52
+b 50
+b 2
+b 2
+b 3
+b 2
+b 2
+b 2
+b 4
+b 4
+b 1
+b 9
+b 21
+b 22
+b 26
+b 27
+b 29
+b 36
+b 38
+b 21
+b 2
+b 40
+b 42
+b 43
+b 56
+b 57
+b 59
+b 74
+b 55
+b 1
+b 58
+b 1
+b 39
+b 80
+b 81
+b 86
+b 88
+b 166
+b 172
+b 173
+b 181
+b 182
+b 180
+b 1
+b 38
+b 4
+b 14
+b 15
+b 18
+b 19
+b 27
+b 12
+b 2
+b 16
+b 2
+b 3
+b 1
+b 140
+b 150
+b 152
+b 153
+b 161
+b 168
+b 169
+b 171
+b 173
+b 152
+b 2
+b 166
+b 2
+b 7
+b 8
+b 10
+b 12
+b 14
+b 6
+b 1
+b 0
+b 1
+b 9
+b 60
+b 77
+b 78
+b 75
+b 2
+b 59
+b 1
+b 2
+b 3
+b 5
+b 7
+b 8
+b 2
+b 2
+b 68
+b 78
+b 56
+b 58
+b 59
+b 61
+b 8
+b 16
+b 8
+b 1
+b 49
+b 71
+b 72
+b 68
+b 1
+b 13
+b 14
+b 12
+b 1
+b 2
+b 3
+b 7
+b 15
+b 16
+b 17
+b 23
+b 24
+b 29
+b 30
+b 64
+b 16
+b 2
+b 19
+b 2
+b 25
+b 1
+b 40
+b 39
+b 1
+b 13
+b 37
+b 38
+b 55
+b 57
+b 58
+b 35
+b 2
+b 55
+b 2
+b 65
+b 66
+b 62
+b 1
+b 90
+b 10
+b 51
+b 52
+b 37
+b 38
+b 36
+b 1
+b 3
+b 111
+b 112
+b 124
+b 110
+b 1
+b 81
+b 82
+b 89
+b 90
+b 91
+b 80
+b 1
+b 90
+b 91
+b 93
+b 94
+b 98
+b 100
+b 21
+b 20
+b 21
+b 23
+b 30
+b 32
+b 30
+b 1
+b 16
+b 62
+b 77
+b 2
+b 3
+b 5
+b 7
+b 8
+b 15
+b 20
+b 26
+b 27
+b 29
+b 31
+b 32
+b 40
+b 119
+b 146
+b 148
+b 149
+b 151
+b 153
+b 119
+b 1
+b 145
+b 2
+b 368
+b 371
+b 373
+b 374
+b 399
+b 368
+b 2
+b 245
+b 247
+b 248
+b 250
+b 251
+b 247
+b 3
+b 113
+b 123
+b 124
+b 126
+b 128
+b 130
+b 122
+b 1
+b 129
+b 1
+b 118
+b 123
+b 122
+b 2
+b 13
+b 15
+b 16
+b 18
+b 11
+b 1
+b 0
+b 0
+b 1
+b 58
+b 13
+b 19
+b 20
+b 20
+b 1
+b 45
+b 46
+b 44
+b 1
+b 0
+b 0
+b 1
+b 139
+b 138
+b 2
+b 70
+b 72
+b 73
+b 75
+b 77
+b 72
+b 2
+b 0
+b 1
+b 0
+b 10
+b 17
+b 8
+b 2
+b 41
+b 42
+b 44
+b 2
+b 4
+b 5
+b 7
+b 9
+b 2
+b 2
+b 53
+b 55
+b 34
+b 35
+b 41
+b 42
+b 50
+b 35
+b 38
+b 39
+b 34
+b 4
+b 82
+b 86
+b 87
+b 84
+b 2
+b 81
+b 1
+b 2
+b 3
+b 3
+b 151
+b 153
+b 153
+b 1
+b 141
+b 142
+b 139
+b 2
+b 2
+b 5
+b 0
+b 1
+b 13
+b 14
+b 16
+b 32
+b 38
+b 39
+b 58
+b 157
+b 161
+b 173
+b 174
+b 173
+b 2
+b 155
+b 1
+b 26
+b 4
+b 2
+b 1
+b 117
+b 123
+b 115
+b 3
+b 118
+b 1
+b 3
+b 4
+b 49
+b 50
+b 48
+b 1
+b 109
+b 108
+b 1
+b 22
+b 23
+b 25
+b 27
+b 28
+b 37
+b 21
+b 1
+b 37
+b 43
+b 47
+b 46
+b 1
+b 1
+b 2
+b 17
+b 19
+b 1
+b 2
+b 13
+b 1
+b 21
+b 6
+b 159
+b 169
+b 170
+b 159
+b 1
+b 166
+b 2
+b 3
+b 4
+b 2
+b 1
+b 0
+b 2
+b 3
+b 51
+b 49
+b 1
+b 15
+b 18
+b 19
+b 2
+b 1
+b 1
+b 64
+b 70
+b 71
+b 78
+b 80
+b 81
+b 83
+b 62
+b 3
+b 67
+b 2
+b 3
+b 63
+b 61
+b 1
+b 48
+b 55
+b 56
+b 58
+b 55
+b 2
+b 93
+b 94
+b 101
+b 91
+b 2
+b 98
+b 1
+b 9
+b 10
+b 12
+b 8
+b 1
+b 1
+b 63
+b 65
+b 66
+b 65
+b 4
+b 0
+b 2
+b 9
+b 10
+b 0
+b 1
+b 29
+b 30
+b 32
+b 34
+b 35
+b 37
+b 48
+b 55
+b 32
+b 2
+b 52
+b 2
+b 27
+b 36
+b 28
+b 30
+b 31
+b 33
+b 36
+b 34
+b 2
+b 0
+b 2
+b 0
+b 1
+b 21
+b 22
+b 32
+b 21
+b 2
+b 18
+b 1
+b 26
+b 1
+b 14
+b 16
+b 17
+b 19
+b 20
+b 0
+b 8
+b 33
+b 31
+b 1
+b 21
+b 23
+b 24
+b 43
+b 44
+b 75
+b 21
+b 2
+b 70
+b 72
+b 73
+b 80
+b 78
+b 3
+b 67
+b 1
+b 170
+b 96
+b 102
+b 103
+b 114
+b 115
+b 117
+b 119
+b 102
+b 2
+b 94
+b 1
+b 10
+b 12
+b 13
+b 24
+b 23
+b 1
+b 0
+b 2
+b 4
+b 5
+b 10
+b 2
+b 2
+b 228
+b 230
+b 232
+b 233
+b 230
+b 2
+b 38
+b 39
+b 45
+b 46
+b 38
+b 2
+b 41
+b 2
+b 17
+b 17
+b 1
+b 14
+b 20
+b 26
+b 28
+b 29
+b 31
+b 32
+b 34
+b 31
+b 2
+b 18
+b 39
+b 16
+b 3
+b 34
+b 1
+b 93
+b 127
+b 129
+b 130
+b 127
+b 2
+b 58
+b 77
+b 56
+b 3
+b 0
+b 2
+b 4
+b 38
+b 69
+b 36
+b 1
+b 3
+b 4
+b 13
+b 3
+b 2
+b 8
+b 1
+b 133
+b 154
+b 155
+b 160
+b 161
+b 164
+b 165
+b 167
+b 169
+b 154
+b 2
+b 157
+b 1
+b 61
+b 59
+b 2
+b 361
+b 63
+b 64
+b 69
+b 68
+b 1
+b 57
+b 57
+b 1
+b 31
+b 34
+b 35
+b 37
+b 58
+b 60
+b 149
+b 150
+b 156
+b 157
+b 149
+b 2
+b 26
+b 28
+b 16
+b 15
+b 1
+b 1
+b 7
+b 8
+b 0
+b 2
+b 3
+b 3
+b 8
+b 8
+b 1
+b 5
+b 6
+b 4
+b 1
+b 36
+b 37
+b 15
+b 20
+b 37
+b 38
+b 40
+b 42
+b 36
+b 1
+b 2
+b 20
+b 19
+b 2
+b 10
+b 16
+b 9
+b 2
+b 12
+b 2
+b 59
+b 0
+b 1
+b 5
+b 6
+b 9
+b 20
+b 21
+b 80
+b 88
+b 89
+b 103
+b 18
+b 2
+b 16
+b 15
+b 2
+b 109
+b 111
+b 117
+b 10
+b 23
+b 24
+b 32
+b 32
+b 1
+b 7
+b 5
+b 1
+b 3
+b 21
+b 51
+b 52
+b 60
+b 20
+b 2
+b 47
+b 2
+b 55
+b 1
+b 39
+b 2
+b 4
+b 12
+b 13
+b 4
+b 1
+b 9
+b 2
+b 36
+b 30
+b 31
+b 33
+b 34
+b 36
+b 38
+b 39
+b 47
+b 30
+b 3
+b 35
+b 2
+b 40
+b 2
+b 11
+b 35
+b 37
+b 25
+b 27
+b 29
+b 30
+b 23
+b 1
+b 29
+b 1
+b 7
+b 41
+b 42
+b 57
+b 59
+b 60
+b 59
+b 1
+b 7
+b 7
+b 1
+b 53
+b 5
+b 7
+b 58
+b 63
+b 64
+b 7
+b 1
+b 54
+b 1
+b 19
+b 7
+b 8
+b 10
+b 21
+b 19
+b 1
+b 148
+b 150
+b 151
+b 157
+b 146
+b 1
+b 155
+b 1
+b 10
+b 11
+b 16
+b 15
+b 2
+b 22
+b 29
+b 30
+b 32
+b 39
+b 40
+b 26
+b 1
+b 57
+b 61
+b 63
+b 64
+b 66
+b 102
+b 63
+b 2
+b 4
+b 9
+b 10
+b 2
+b 3
+b 17
+b 19
+b 20
+b 22
+b 17
+b 2
+b 2
+b 3
+b 10
+b 12
+b 0
+b 2
+b 10
+b 1
+b 124
+b 124
+b 1
+b 3
+b 4
+b 3
+b 1
+b 12
+b 13
+b 15
+b 5
+b 3
+b 5
+b 6
+b 0
+b 6
+b 7
+b 9
+b 4
+b 2
+b 19
+b 4
+b 5
+b 7
+b 9
+b 11
+b 1
+b 18
+b 57
+b 61
+b 62
+b 69
+b 70
+b 61
+b 1
+b 66
+b 2
+b 2
+b 4
+b 5
+b 13
+b 2
+b 2
+b 50
+b 63
+b 64
+b 61
+b 2
+b 49
+b 1
+b 558
+b 556
+b 1
+b 109
+b 113
+b 114
+b 139
+b 113
+b 2
+b 135
+b 1
+b 17
+b 19
+b 21
+b 22
+b 15
+b 1
+b 45
+b 55
+b 56
+b 58
+b 44
+b 2
+b 52
+b 1
+b 1
+b 7
+b 385
+b 392
+b 393
+b 7
+b 8
+b 10
+b 7
+b 2
+b 12
+b 10
+b 2
+b 152
+b 156
+b 157
+b 77
+b 92
+b 94
+b 92
+b 3
+b 76
+b 1
+b 0
+b 1
+b 39
+b 50
+b 51
+b 53
+b 55
+b 56
+b 53
+b 2
+b 38
+b 36
+b 1
+b 2
+b 3
+b 5
+b 47
+b 48
+b 54
+b 2
+b 2
+b 51
+b 1
+b 3
+b 4
+b 79
+b 128
+b 17
+b 19
+b 43
+b 15
+b 1
+b 3
+b 4
+b 2
+b 1
+b 73
+b 96
+b 132
+b 141
+b 142
+b 144
+b 146
+b 147
+b 150
+b 151
+b 73
+b 1
+b 143
+b 2
+b 0
+b 2
+b 115
+b 118
+b 119
+b 25
+b 26
+b 33
+b 34
+b 52
+b 24
+b 1
+b 32
+b 2
+b 47
+b 1
+b 118
+b 120
+b 122
+b 123
+b 122
+b 2
+b 115
+b 1
+b 5
+b 2
+b 1
+b 18
+b 12
+b 62
+b 63
+b 83
+b 13
+b 0
+b 2
+b 7
+b 2
+b 1
+b 80
+b 4
+b 5
+b 8
+b 24
+b 26
+b 32
+b 33
+b 81
+b 0
+b 2
+b 3
+b 43
+b 8
+b 19
+b 20
+b 63
+b 61
+b 2
+b 27
+b 45
+b 46
+b 55
+b 45
+b 1
+b 52
+b 3
+b 9
+b 11
+b 12
+b 14
+b 16
+b 11
+b 2
+b 74
+b 83
+b 84
+b 86
+b 88
+b 89
+b 86
+b 2
+b 22
+b 29
+b 30
+b 44
+b 27
+b 2
+b 42
+b 1
+b 14
+b 18
+b 12
+b 2
+b 2
+b 3
+b 5
+b 6
+b 8
+b 6
+b 8
+b 9
+b 8
+b 2
+b 9
+b 3
+b 5
+b 6
+b 8
+b 10
+b 14
+b 3
+b 2
+b 1
+b 6
+b 216
+b 224
+b 225
+b 227
+b 228
+b 232
+b 231
+b 1
+b 32
+b 34
+b 35
+b 47
+b 53
+b 34
+b 2
+b 20
+b 22
+b 28
+b 29
+b 31
+b 32
+b 43
+b 44
+b 47
+b 27
+b 1
+b 30
+b 2
+b 39
+b 1
+b 72
+b 73
+b 69
+b 1
+b 6
+b 123
+b 124
+b 123
+b 2
+b 4
+b 0
+b 11
+b 17
+b 18
+b 20
+b 27
+b 28
+b 30
+b 41
+b 15
+b 2
+b 25
+b 2
+b 10
+b 1
+b 77
+b 51
+b 53
+b 53
+b 1
+b 100
+b 102
+b 103
+b 102
+b 1
+b 85
+b 95
+b 96
+b 94
+b 1
+b 84
+b 1
+b 8
+b 0
+b 2
+b 27
+b 56
+b 84
+b 99
+b 100
+b 102
+b 103
+b 115
+b 97
+b 2
+b 100
+b 2
+b 109
+b 2
+b 83
+b 1
+b 45
+b 61
+b 81
+b 16
+b 17
+b 19
+b 20
+b 19
+b 1
+b 8
+b 10
+b 11
+b 10
+b 1
+b 8
+b 26
+b 27
+b 32
+b 33
+b 50
+b 52
+b 26
+b 1
+b 29
+b 2
+b 49
+b 1
+b 6
+b 18
+b 19
+b 10
+b 11
+b 18
+b 19
+b 17
+b 1
+b 62
+b 62
+b 1
+b 6
+b 8
+b 10
+b 11
+b 13
+b 8
+b 2
+b 8
+b 7
+b 1
+b 38
+b 18
+b 20
+b 21
+b 18
+b 2
+b 26
+b 24
+b 1
+b 15
+b 17
+b 18
+b 20
+b 15
+b 2
+b 6
+b 3
+b 1
+b 34
+b 33
+b 1
+b 4
+b 6
+b 13
+b 14
+b 2
+b 1
+b 0
+b 1
+b 11
+b 29
+b 30
+b 28
+b 1
+b 13
+b 19
+b 21
+b 22
+b 24
+b 0
+b 0
+b 1
+b 66
+b 67
+b 0
+b 2
+b 11
+b 26
+b 4
+b 5
+b 45
+b 4
+b 1
+b 42
+b 2
+b 2
+b 21
+b 22
+b 202
+b 203
+b 14
+b 18
+b 19
+b 13
+b 1
+b 3
+b 24
+b 20
+b 11
+b 12
+b 1
+b 21
+b 21
+b 1
+b 30
+b 45
+b 44
+b 1
+b 6
+b 7
+b 9
+b 21
+b 22
+b 31
+b 4
+b 2
+b 19
+b 1
+b 51
+b 51
+b 1
+b 18
+b 20
+b 22
+b 23
+b 25
+b 26
+b 15
+b 1
+b 10
+b 2
+b 12
+b 14
+b 16
+b 18
+b 16
+b 1
+b 0
+b 1
+b 11
+b 2
+b 3
+b 15
+b 17
+b 18
+b 43
+b 15
+b 2
+b 8
+b 9
+b 8
+b 2
+b 4
+b 5
+b 4
+b 3
+b 2
+b 0
+b 1
+b 6
+b 24
+b 25
+b 27
+b 28
+b 30
+b 41
+b 4
+b 3
+b 21
+b 3
+b 18
+b 1
+b 33
+b 1
+b 11
+b 76
+b 89
+b 90
+b 99
+b 100
+b 74
+b 2
+b 87
+b 2
+b 93
+b 2
+b 54
+b 56
+b 57
+b 11
+b 15
+b 96
+b 19
+b 20
+b 22
+b 22
+b 1
+b 8
+b 10
+b 11
+b 8
+b 2
+b 81
+b 96
+b 81
+b 1
+b 95
+b 1
+b 0
+b 1
+b 9
+b 10
+b 12
+b 2
+b 40
+b 41
+b 47
+b 48
+b 47
+b 1
+b 6
+b 34
+b 33
+b 2
+b 94
+b 97
+b 98
+b 100
+b 94
+b 3
+b 76
+b 73
+b 1
+b 151
+b 199
+b 200
+b 202
+b 203
+b 210
+b 202
+b 1
+b 207
+b 3
+b 17
+b 14
+b 1
+b 0
+b 2
+b 41
+b 42
+b 46
+b 47
+b 58
+b 44
+b 3
+b 53
+b 3
+b 34
+b 20
+b 22
+b 72
+b 73
+b 105
+b 22
+b 1
+b 69
+b 2
+b 1
+b 90
+b 113
+b 114
+b 116
+b 117
+b 119
+b 121
+b 122
+b 129
+b 89
+b 2
+b 109
+b 2
+b 112
+b 2
+b 10
+b 5
+b 73
+b 75
+b 76
+b 78
+b 80
+b 81
+b 73
+b 2
+b 78
+b 2
+b 7
+b 24
+b 22
+b 3
+b 45
+b 43
+b 1
+b 12
+b 13
+b 10
+b 2
+b 14
+b 15
+b 20
+b 13
+b 1
+b 2
+b 9
+b 8
+b 1
+b 89
+b 90
+b 160
+b 87
+b 2
+b 158
+b 1
+b 0
+b 2
+b 74
+b 85
+b 86
+b 85
+b 2
+b 71
+b 1
+b 63
+b 3
+b 4
+b 12
+b 13
+b 2
+b 1
+b 62
+b 65
+b 67
+b 69
+b 70
+b 79
+b 67
+b 2
+b 77
+b 1
+b 14
+b 13
+b 1
+b 61
+b 62
+b 86
+b 87
+b 138
+b 61
+b 2
+b 83
+b 1
+b 57
+b 62
+b 63
+b 61
+b 1
+b 38
+b 39
+b 41
+b 41
+b 1
+b 5
+b 45
+b 43
+b 1
+b 18
+b 1
+b 104
+b 106
+b 107
+b 114
+b 115
+b 121
+b 102
+b 1
+b 113
+b 2
+b 116
+b 1
+b 19
+b 28
+b 35
+b 40
+b 41
+b 26
+b 2
+b 13
+b 10
+b 1
+b 2
+b 3
+b 5
+b 6
+b 8
+b 66
+b 73
+b 74
+b 76
+b 85
+b 85
+b 1
+b 64
+b 1
+b 238
+b 252
+b 251
+b 2
+b 7
+b 8
+b 5
+b 2
+b 46
+b 47
+b 54
+b 46
+b 1
+b 131
+b 137
+b 138
+b 143
+b 143
+b 1
+b 110
+b 109
+b 2
+b 85
+b 86
+b 101
+b 103
+b 104
+b 101
+b 2
+b 0
+b 2
+b 4
+b 5
+b 1
+b 9
+b 10
+b 18
+b 25
+b 8
+b 1
+b 24
+b 1
+b 4
+b 11
+b 126
+b 4
+b 6
+b 7
+b 2
+b 1
+b 0
+b 1
+b 0
+b 1
+b 26
+b 27
+b 26
+b 1
+b 3
+b 5
+b 7
+b 1
+b 1
+b 9
+b 18
+b 19
+b 31
+b 622
+b 623
+b 625
+b 627
+b 678
+b 22
+b 21
+b 1
+b 70
+b 81
+b 82
+b 79
+b 2
+b 70
+b 1
+b 76
+b 75
+b 2
+b 0
+b 2
+b 3
+b 0
+b 2
+b 110
+b 13
+b 94
+b 95
+b 97
+b 106
+b 93
+b 1
+b 45
+b 57
+b 43
+b 2
+b 55
+b 57
+b 58
+b 55
+b 2
+b 27
+b 28
+b 1
+b 95
+b 97
+b 98
+b 97
+b 1
+b 13
+b 19
+b 20
+b 5
+b 11
+b 12
+b 29
+b 30
+b 38
+b 40
+b 9
+b 2
+b 27
+b 2
+b 32
+b 1
+b 4
+b 1
+b 210
+b 85
+b 36
+b 63
+b 64
+b 70
+b 71
+b 35
+b 1
+b 122
+b 151
+b 160
+b 161
+b 163
+b 170
+b 150
+b 2
+b 156
+b 2
+b 39
+b 41
+b 43
+b 45
+b 47
+b 48
+b 39
+b 1
+b 37
+b 0
+b 53
+b 51
+b 1
+b 7
+b 8
+b 5
+b 2
+b 5
+b 6
+b 4
+b 1
+b 6
+b 10
+b 9
+b 1
+b 6
+b 7
+b 26
+b 65
+b 6
+b 2
+b 22
+b 2
+b 30
+b 27
+b 17
+b 18
+b 20
+b 44
+b 16
+b 1
+b 43
+b 1
+b 20
+b 27
+b 28
+b 19
+b 2
+b 24
+b 1
+b 11
+b 12
+b 3
+b 136
+b 29
+b 44
+b 45
+b 140
+b 27
+b 2
+b 42
+b 2
+b 133
+b 1
+b 2
+b 3
+b 151
+b 152
+b 173
+b 183
+b 181
+b 3
+b 172
+b 1
+b 5
+b 2
+b 1
+b 3
+b 24
+b 9
+b 10
+b 12
+b 13
+b 8
+b 1
+b 0
+b 6
+b 6
+b 1
+b 413
+b 104
+b 105
+b 107
+b 7
+b 8
+b 18
+b 19
+b 7
+b 1
+b 15
+b 2
+b 10
+b 9
+b 1
+b 45
+b 37
+b 39
+b 40
+b 35
+b 1
+b 38
+b 2
+b 7
+b 10
+b 11
+b 10
+b 1
+b 0
+b 33
+b 159
+b 160
+b 193
+b 195
+b 196
+b 206
+b 193
+b 2
+b 203
+b 2
+b 223
+b 224
+b 68
+b 70
+b 71
+b 73
+b 93
+b 92
+b 1
+b 97
+b 96
+b 1
+b 1
+b 18
+b 29
+b 30
+b 32
+b 34
+b 35
+b 51
+b 0
+b 1
+b 29
+b 30
+b 34
+b 36
+b 37
+b 39
+b 46
+b 34
+b 2
+b 7
+b 18
+b 6
+b 1
+b 18
+b 27
+b 46
+b 47
+b 49
+b 50
+b 52
+b 53
+b 25
+b 2
+b 44
+b 3
+b 18
+b 1
+b 22
+b 2
+b 20
+b 33
+b 34
+b 67
+b 68
+b 31
+b 2
+b 65
+b 2
+b 19
+b 1
+b 2
+b 3
+b 5
+b 9
+b 2
+b 2
+b 8
+b 14
+b 12
+b 1
+b 5
+b 7
+b 8
+b 10
+b 12
+b 13
+b 7
+b 2
+b 155
+b 157
+b 155
+b 1
+b 6
+b 7
+b 9
+b 8
+b 7
+b 1
+b 8
+b 10
+b 1
+b 2
+b 4
+b 6
+b 7
+b 8
+b 0
+b 1
+b 97
+b 99
+b 101
+b 102
+b 101
+b 1
+b 52
+b 50
+b 2
+b 22
+b 34
+b 58
+b 59
+b 33
+b 1
+b 3
+b 4
+b 6
+b 8
+b 224
+b 221
+b 1
+b 33
+b 35
+b 37
+b 38
+b 0
+b 0
+b 1
+b 0
+b 2
+b 141
+b 65
+b 66
+b 68
+b 68
+b 1
+b 41
+b 42
+b 44
+b 39
+b 2
+b 4
+b 3
+b 1
+b 14
+b 19
+b 20
+b 8
+b 0
+b 2
+b 3
+b 8
+b 2
+b 1
+b 5
+b 1
+b 54
+b 73
+b 74
+b 71
+b 2
+b 53
+b 1
+b 14
+b 35
+b 96
+b 1
+b 71
+b 72
+b 123
+b 32
+b 56
+b 58
+b 60
+b 61
+b 70
+b 71
+b 73
+b 78
+b 69
+b 3
+b 73
+b 3
+b 86
+b 89
+b 90
+b 92
+b 93
+b 95
+b 97
+b 99
+b 85
+b 4
+b 88
+b 2
+b 17
+b 400
+b 408
+b 409
+b 418
+b 419
+b 426
+b 427
+b 435
+b 408
+b 2
+b 414
+b 2
+b 422
+b 2
+b 397
+b 1
+b 424
+b 1
+b 97
+b 94
+b 1
+b 31
+b 33
+b 34
+b 29
+b 1
+b 66
+b 67
+b 71
+b 27
+b 26
+b 1
+b 10
+b 11
+b 6
+b 150
+b 162
+b 164
+b 164
+b 1
+b 32
+b 33
+b 41
+b 30
+b 2
+b 38
+b 1
+b 14
+b 10
+b 11
+b 27
+b 180
+b 188
+b 189
+b 188
+b 1
+b 92
+b 91
+b 1
+b 111
+b 112
+b 129
+b 137
+b 147
+b 110
+b 1
+b 145
+b 1
+b 56
+b 58
+b 59
+b 58
+b 2
+b 53
+b 1
+b 17
+b 31
+b 39
+b 58
+b 60
+b 61
+b 38
+b 40
+b 38
+b 1
+b 1
+b 87
+b 88
+b 102
+b 103
+b 85
+b 2
+b 100
+b 1
+b 0
+b 573
+b 574
+b 714
+b 17
+b 18
+b 16
+b 1
+b 28
+b 29
+b 28
+b 1
+b 2
+b 0
+b 1
+b 9
+b 1
+b 5
+b 6
+b 8
+b 15
+b 30
+b 44
+b 5
+b 2
+b 11
+b 1
+b 5
+b 7
+b 9
+b 36
+b 40
+b 35
+b 1
+b 16
+b 38
+b 39
+b 39
+b 1
+b 2
+b 0
+b 2
+b 1
+b 2
+b 4
+b 15
+b 0
+b 1
+b 25
+b 86
+b 96
+b 97
+b 99
+b 101
+b 99
+b 1
+b 13
+b 16
+b 18
+b 19
+b 25
+b 26
+b 18
+b 2
+b 21
+b 2
+b 0
+b 1
+b 0
+b 1
+b 43
+b 44
+b 50
+b 51
+b 59
+b 42
+b 1
+b 30
+b 28
+b 1
+b 29
+b 77
+b 78
+b 116
+b 117
+b 135
+b 136
+b 170
+b 75
+b 2
+b 115
+b 1
+b 51
+b 48
+b 1
+b 106
+b 104
+b 1
+b 25
+b 26
+b 63
+b 65
+b 66
+b 95
+b 25
+b 2
+b 61
+b 2
+b 310
+b 314
+b 338
+b 339
+b 401
+b 402
+b 3
+b 4
+b 6
+b 8
+b 1
+b 2
+b 6
+b 1
+b 9
+b 12
+b 13
+b 4
+b 3
+b 2
+b 25
+b 23
+b 1
+b 47
+b 26
+b 27
+b 11
+b 10
+b 1
+b 27
+b 31
+b 32
+b 48
+b 51
+b 53
+b 54
+b 95
+b 25
+b 3
+b 28
+b 1
+b 184
+b 186
+b 199
+b 200
+b 202
+b 203
+b 205
+b 210
+b 186
+b 1
+b 128
+b 130
+b 131
+b 137
+b 139
+b 141
+b 143
+b 93
+b 99
+b 114
+b 115
+b 120
+b 132
+b 133
+b 120
+b 1
+b 1
+b 333
+b 335
+b 336
+b 342
+b 343
+b 345
+b 355
+b 333
+b 2
+b 343
+b 1
+b 52
+b 65
+b 67
+b 68
+b 70
+b 72
+b 65
+b 2
+b 70
+b 1
+b 15
+b 17
+b 18
+b 20
+b 26
+b 97
+b 101
+b 102
+b 13
+b 1
+b 16
+b 2
+b 37
+b 15
+b 16
+b 18
+b 6
+b 7
+b 9
+b 10
+b 3
+b 0
+b 1
+b 11
+b 5
+b 7
+b 8
+b 10
+b 12
+b 17
+b 4
+b 15
+b 16
+b 2
+b 1
+b 14
+b 1
+b 187
+b 189
+b 190
+b 7
+b 152
+b 165
+b 166
+b 168
+b 169
+b 150
+b 1
+b 164
+b 3
+b 43
+b 48
+b 40
+b 1
+b 112
+b 7
+b 29
+b 30
+b 7
+b 1
+b 26
+b 2
+b 39
+b 36
+b 1
+b 152
+b 154
+b 155
+b 158
+b 170
+b 171
+b 152
+b 7
+b 0
+b 8
+b 28
+b 71
+b 75
+b 76
+b 78
+b 80
+b 81
+b 83
+b 84
+b 75
+b 2
+b 26
+b 1
+b 8
+b 6
+b 3
+b 125
+b 126
+b 123
+b 2
+b 127
+b 128
+b 141
+b 29
+b 30
+b 27
+b 2
+b 22
+b 9
+b 10
+b 8
+b 1
+b 5
+b 23
+b 3
+b 3
+b 0
+b 1
+b 3
+b 5
+b 6
+b 7
+b 186
+b 191
+b 193
+b 194
+b 206
+b 208
+b 209
+b 100
+b 99
+b 1
+b 20
+b 21
+b 24
+b 25
+b 18
+b 2
+b 56
+b 56
+b 1
+b 3
+b 62
+b 66
+b 66
+b 1
+b 6
+b 5
+b 1
+b 1
+b 2
+b 0
+b 1
+b 34
+b 9
+b 11
+b 12
+b 14
+b 11
+b 2
+b 10
+b 11
+b 13
+b 17
+b 18
+b 19
+b 8
+b 4
+b 9
+b 19
+b 2
+b 23
+b 24
+b 26
+b 27
+b 38
+b 89
+b 2
+b 1
+b 20
+b 2
+b 23
+b 2
+b 31
+b 2
+b 150
+b 148
+b 1
+b 50
+b 56
+b 4
+b 7
+b 8
+b 10
+b 11
+b 13
+b 15
+b 7
+b 3
+b 12
+b 1
+b 192
+b 217
+b 218
+b 215
+b 2
+b 191
+b 1
+b 9
+b 20
+b 22
+b 18
+b 1
+b 43
+b 29
+b 31
+b 32
+b 34
+b 36
+b 37
+b 39
+b 40
+b 42
+b 58
+b 34
+b 2
+b 37
+b 2
+b 70
+b 72
+b 168
+b 169
+b 168
+b 2
+b 67
+b 1
+b 22
+b 22
+b 1
+b 67
+b 15
+b 5
+b 6
+b 8
+b 9
+b 8
+b 2
+b 3
+b 84
+b 92
+b 93
+b 95
+b 105
+b 106
+b 103
+b 2
+b 4
+b 3
+b 1
+b 7
+b 9
+b 10
+b 13
+b 2
+b 3
+b 2
+b 1
+b 196
+b 198
+b 210
+b 211
+b 9
+b 0
+b 1
+b 16
+b 14
+b 2
+b 6
+b 8
+b 10
+b 11
+b 13
+b 3
+b 28
+b 6
+b 10
+b 11
+b 19
+b 41
+b 43
+b 38
+b 59
+b 60
+b 64
+b 65
+b 76
+b 7
+b 61
+b 63
+b 65
+b 66
+b 76
+b 77
+b 63
+b 2
+b 74
+b 2
+b 5
+b 1
+b 56
+b 57
+b 64
+b 70
+b 72
+b 73
+b 75
+b 76
+b 80
+b 56
+b 2
+b 70
+b 3
+b 60
+b 1
+b 31
+b 80
+b 12
+b 22
+b 23
+b 11
+b 2
+b 18
+b 2
+b 19
+b 1
+b 33
+b 31
+b 2
+b 3
+b 6
+b 7
+b 9
+b 0
+b 1
+b 3
+b 5
+b 7
+b 14
+b 19
+b 20
+b 22
+b 63
+b 61
+b 1
+b 79
+b 81
+b 82
+b 84
+b 86
+b 87
+b 89
+b 90
+b 104
+b 106
+b 77
+b 1
+b 80
+b 2
+b 2
+b 126
+b 125
+b 126
+b 143
+b 15
+b 21
+b 12
+b 1
+b 11
+b 0
+b 2
+b 13
+b 18
+b 19
+b 20
+b 11
+b 3
+b 14
+b 3
+b 57
+b 62
+b 63
+b 85
+b 87
+b 88
+b 117
+b 57
+b 1
+b 60
+b 1
+b 49
+b 51
+b 75
+b 36
+b 34
+b 2
+b 13
+b 14
+b 11
+b 2
+b 16
+b 69
+b 70
+b 67
+b 2
+b 15
+b 1
+b 56
+b 62
+b 63
+b 62
+b 2
+b 0
+b 2
+b 3
+b 97
+b 35
+b 46
+b 44
+b 3
+b 34
+b 1
+b 31
+b 33
+b 34
+b 36
+b 4
+b 14
+b 22
+b 21
+b 1
+b 9
+b 10
+b 12
+b 13
+b 9
+b 3
+b 5
+b 5
+b 1
+b 3
+b 4
+b 3
+b 4
+b 10
+b 2
+b 1
+b 4
+b 6
+b 7
+b 17
+b 89
+b 2
+b 1
+b 3
+b 4
+b 5
+b 2
+b 3
+b 27
+b 29
+b 26
+b 28
+b 29
+b 31
+b 32
+b 36
+b 24
+b 1
+b 30
+b 2
+b 31
+b 1
+b 18
+b 41
+b 42
+b 65
+b 67
+b 68
+b 67
+b 1
+b 0
+b 2
+b 0
+b 1
+b 13
+b 23
+b 25
+b 26
+b 28
+b 30
+b 31
+b 28
+b 2
+b 2
+b 88
+b 90
+b 13
+b 14
+b 16
+b 18
+b 48
+b 46
+b 2
+b 6
+b 7
+b 4
+b 6
+b 75
+b 77
+b 83
+b 84
+b 86
+b 81
+b 2
+b 1
+b 5
+b 6
+b 5
+b 2
+b 27
+b 25
+b 1
+b 421
+b 422
+b 15
+b 19
+b 26
+b 27
+b 26
+b 2
+b 15
+b 15
+b 1
+b 4
+b 64
+b 65
+b 67
+b 174
+b 175
+b 203
+b 64
+b 2
+b 170
+b 2
+b 199
+b 1
+b 10
+b 16
+b 17
+b 19
+b 25
+b 26
+b 28
+b 8
+b 3
+b 11
+b 4
+b 21
+b 1
+b 1
+b 14
+b 27
+b 87
+b 89
+b 90
+b 92
+b 93
+b 95
+b 25
+b 3
+b 84
+b 2
+b 87
+b 2
+b 0
+b 3
+b 67
+b 68
+b 66
+b 1
+b 17
+b 15
+b 2
+b 3
+b 4
+b 6
+b 8
+b 78
+b 78
+b 1
+b 10
+b 21
+b 22
+b 25
+b 26
+b 28
+b 25
+b 2
+b 30
+b 29
+b 1
+b 13
+b 14
+b 31
+b 306
+b 304
+b 1
+b 114
+b 116
+b 117
+b 152
+b 153
+b 154
+b 116
+b 1
+b 6
+b 10
+b 14
+b 15
+b 29
+b 264
+b 263
+b 2
+b 48
+b 49
+b 48
+b 1
+b 28
+b 30
+b 31
+b 45
+b 101
+b 102
+b 109
+b 110
+b 112
+b 114
+b 133
+b 101
+b 1
+b 106
+b 2
+b 35
+b 351
+b 357
+b 358
+b 349
+b 1
+b 356
+b 2
+b 112
+b 113
+b 120
+b 122
+b 111
+b 1
+b 77
+b 73
+b 74
+b 76
+b 78
+b 105
+b 78
+b 1
+b 101
+b 1
+b 11
+b 37
+b 38
+b 50
+b 51
+b 49
+b 1
+b 4
+b 4
+b 1
+b 2
+b 5
+b 7
+b 8
+b 21
+b 22
+b 3
+b 1
+b 6
+b 2
+b 15
+b 1
+b 48
+b 52
+b 53
+b 58
+b 80
+b 90
+b 88
+b 5
+b 45
+b 1
+b 77
+b 1
+b 16
+b 20
+b 24
+b 29
+b 30
+b 32
+b 33
+b 18
+b 3
+b 26
+b 3
+b 72
+b 78
+b 80
+b 82
+b 84
+b 90
+b 91
+b 76
+b 1
+b 79
+b 86
+b 87
+b 99
+b 100
+b 116
+b 118
+b 77
+b 1
+b 85
+b 2
+b 94
+b 2
+b 163
+b 164
+b 166
+b 162
+b 1
+b 18
+b 19
+b 21
+b 22
+b 24
+b 26
+b 0
+b 14
+b 142
+b 144
+b 145
+b 4
+b 6
+b 7
+b 4
+b 2
+b 93
+b 94
+b 93
+b 1
+b 85
+b 89
+b 12
+b 29
+b 30
+b 11
+b 2
+b 27
+b 3
+b 59
+b 58
+b 1
+b 20
+b 22
+b 23
+b 76
+b 7
+b 8
+b 33
+b 34
+b 5
+b 2
+b 1
+b 36
+b 33
+b 34
+b 41
+b 42
+b 47
+b 41
+b 1
+b 44
+b 1
+b 37
+b 38
+b 44
+b 36
+b 1
+b 42
+b 1
+b 7
+b 22
+b 24
+b 25
+b 1
+b 68
+b 11
+b 12
+b 107
+b 108
+b 108
+b 1
+b 6
+b 7
+b 9
+b 6
+b 2
+b 6
+b 8
+b 10
+b 12
+b 14
+b 4
+b 1
+b 13
+b 1
+b 101
+b 102
+b 116
+b 118
+b 119
+b 125
+b 123
+b 2
+b 4
+b 67
+b 82
+b 106
+b 65
+b 3
+b 77
+b 2
+b 2
+b 3
+b 2
+b 1
+b 4
+b 119
+b 120
+b 127
+b 128
+b 135
+b 136
+b 138
+b 119
+b 2
+b 124
+b 1
+b 44
+b 47
+b 42
+b 1
+b 6
+b 8
+b 10
+b 11
+b 13
+b 15
+b 4
+b 1
+b 9
+b 2
+b 99
+b 107
+b 105
+b 2
+b 98
+b 1
+b 0
+b 2
+b 22
+b 46
+b 47
+b 42
+b 19
+b 20
+b 22
+b 22
+b 1
+b 2
+b 1
+b 1
+b 70
+b 79
+b 80
+b 87
+b 89
+b 90
+b 92
+b 94
+b 85
+b 1
+b 33
+b 43
+b 44
+b 46
+b 48
+b 50
+b 46
+b 1
+b 1
+b 47
+b 57
+b 58
+b 84
+b 85
+b 88
+b 45
+b 1
+b 56
+b 1
+b 133
+b 174
+b 210
+b 236
+b 237
+b 239
+b 240
+b 246
+b 247
+b 255
+b 132
+b 1
+b 10
+b 22
+b 23
+b 21
+b 1
+b 9
+b 1
+b 0
+b 1
+b 21
+b 51
+b 7
+b 17
+b 18
+b 20
+b 21
+b 30
+b 5
+b 1
+b 1
+b 2
+b 3
+b 1
+b 1
+b 176
+b 176
+b 1
+b 78
+b 79
+b 81
+b 76
+b 2
+b 5
+b 3
+b 2
+b 57
+b 58
+b 27
+b 37
+b 38
+b 0
+b 1
+b 12
+b 0
+b 2
+b 8
+b 1
+b 7
+b 34
+b 54
+b 15
+b 16
+b 18
+b 63
+b 8
+b 9
+b 13
+b 12
+b 1
+b 8
+b 9
+b 8
+b 2
+b 5
+b 1
+b 67
+b 68
+b 75
+b 76
+b 80
+b 81
+b 97
+b 67
+b 2
+b 72
+b 1
+b 159
+b 157
+b 2
+b 0
+b 189
+b 20
+b 6
+b 7
+b 13
+b 14
+b 13
+b 2
+b 3
+b 1
+b 22
+b 23
+b 25
+b 21
+b 1
+b 58
+b 69
+b 74
+b 76
+b 77
+b 79
+b 57
+b 2
+b 65
+b 2
+b 34
+b 35
+b 6
+b 2
+b 3
+b 5
+b 55
+b 66
+b 67
+b 66
+b 1
+b 2
+b 3
+b 0
+b 2
+b 5
+b 6
+b 3
+b 0
+b 1
+b 51
+b 53
+b 54
+b 53
+b 2
+b 77
+b 78
+b 75
+b 2
+b 22
+b 23
+b 21
+b 1
+b 118
+b 53
+b 23
+b 31
+b 32
+b 34
+b 22
+b 2
+b 27
+b 2
+b 1
+b 0
+b 1
+b 18
+b 71
+b 9
+b 20
+b 22
+b 23
+b 29
+b 22
+b 1
+b 26
+b 1
+b 6
+b 27
+b 29
+b 79
+b 80
+b 84
+b 85
+b 29
+b 1
+b 76
+b 2
+b 81
+b 2
+b 14
+b 15
+b 17
+b 14
+b 2
+b 25
+b 1
+b 3
+b 9
+b 10
+b 11
+b 1
+b 1
+b 37
+b 38
+b 40
+b 37
+b 2
+b 7
+b 8
+b 10
+b 12
+b 5
+b 2
+b 36
+b 42
+b 43
+b 45
+b 47
+b 35
+b 2
+b 38
+b 2
+b 17
+b 18
+b 20
+b 21
+b 39
+b 40
+b 17
+b 3
+b 37
+b 1
+b 18
+b 20
+b 30
+b 45
+b 47
+b 48
+b 45
+b 2
+b 211
+b 5
+b 3
+b 1
+b 0
+b 1
+b 147
+b 148
+b 179
+b 146
+b 1
+b 3
+b 4
+b 39
+b 40
+b 7
+b 6
+b 1
+b 5
+b 19
+b 20
+b 27
+b 4
+b 2
+b 15
+b 2
+b 5
+b 8
+b 9
+b 19
+b 8
+b 2
+b 14
+b 1
+b 223
+b 235
+b 236
+b 240
+b 259
+b 221
+b 2
+b 233
+b 1
+b 23
+b 21
+b 2
+b 8
+b 9
+b 13
+b 14
+b 18
+b 8
+b 1
+b 130
+b 132
+b 30
+b 33
+b 30
+b 3
+b 1
+b 2
+b 0
+b 3
+b 102
+b 115
+b 117
+b 118
+b 135
+b 134
+b 1
+b 2
+b 13
+b 162
+b 186
+b 187
+b 195
+b 196
+b 186
+b 2
+b 191
+b 2
+b 2
+b 7
+b 10
+b 11
+b 17
+b 7
+b 3
+b 3
+b 4
+b 6
+b 7
+b 2
+b 1
+b 27
+b 31
+b 30
+b 2
+b 47
+b 48
+b 50
+b 50
+b 1
+b 15
+b 98
+b 115
+b 1
+b 13
+b 14
+b 28
+b 29
+b 31
+b 0
+b 2
+b 9
+b 2
+b 24
+b 2
+b 92
+b 94
+b 95
+b 97
+b 99
+b 100
+b 97
+b 2
+b 20
+b 24
+b 30
+b 23
+b 2
+b 50
+b 58
+b 60
+b 61
+b 65
+b 64
+b 2
+b 0
+b 2
+b 0
+b 1
+b 61
+b 100
+b 101
+b 103
+b 104
+b 106
+b 108
+b 60
+b 2
+b 97
+b 1
+b 28
+b 52
+b 77
+b 78
+b 84
+b 121
+b 123
+b 124
+b 131
+b 83
+b 2
+b 119
+b 2
+b 20
+b 149
+b 149
+b 1
+b 94
+b 95
+b 104
+b 105
+b 107
+b 109
+b 122
+b 104
+b 2
+b 41
+b 47
+b 45
+b 3
+b 40
+b 1
+b 196
+b 195
+b 1
+b 8
+b 49
+b 51
+b 52
+b 6
+b 25
+b 26
+b 25
+b 1
+b 3
+b 1
+b 15
+b 16
+b 20
+b 80
+b 84
+b 85
+b 89
+b 88
+b 1
+b 63
+b 76
+b 37
+b 38
+b 40
+b 41
+b 43
+b 50
+b 40
+b 2
+b 46
+b 2
+b 14
+b 15
+b 17
+b 17
+b 1
+b 21
+b 19
+b 2
+b 3
+b 7
+b 12
+b 254
+b 16
+b 17
+b 8
+b 9
+b 16
+b 8
+b 1
+b 13
+b 2
+b 143
+b 150
+b 151
+b 153
+b 155
+b 156
+b 160
+b 589
+b 590
+b 16
+b 20
+b 21
+b 25
+b 81
+b 80
+b 1
+b 25
+b 26
+b 25
+b 2
+b 7
+b 7
+b 1
+b 81
+b 87
+b 118
+b 119
+b 133
+b 118
+b 1
+b 0
+b 6
+b 8
+b 9
+b 93
+b 94
+b 92
+b 1
+b 7
+b 8
+b 7
+b 2
+b 10
+b 8
+b 1
+b 9
+b 15
+b 16
+b 18
+b 2
+b 175
+b 188
+b 189
+b 191
+b 192
+b 194
+b 174
+b 2
+b 185
+b 1
+b 7
+b 11
+b 77
+b 75
+b 1
+b 8
+b 9
+b 8
+b 2
+b 12
+b 89
+b 91
+b 93
+b 94
+b 115
+b 87
+b 1
+b 92
+b 1
+b 63
+b 67
+b 68
+b 70
+b 71
+b 73
+b 67
+b 3
+b 4
+b 8
+b 3
+b 2
+b 4
+b 1
+b 82
+b 88
+b 89
+b 110
+b 86
+b 2
+b 81
+b 1
+b 0
+b 2
+b 3
+b 21
+b 23
+b 25
+b 13
+b 14
+b 18
+b 20
+b 21
+b 18
+b 2
+b 0
+b 2
+b 3
+b 5
+b 0
+b 2
+b 3
+b 1
+b 64
+b 66
+b 68
+b 69
+b 71
+b 85
+b 62
+b 1
+b 58
+b 56
+b 1
+b 36
+b 55
+b 56
+b 55
+b 2
+b 4
+b 4
+b 1
+b 43
+b 44
+b 46
+b 47
+b 62
+b 41
+b 2
+b 44
+b 1
+b 10
+b 117
+b 118
+b 131
+b 117
+b 2
+b 7
+b 1
+b 124
+b 1
+b 29
+b 69
+b 71
+b 72
+b 71
+b 2
+b 66
+b 1
+b 0
+b 42
+b 39
+b 1
+b 24
+b 28
+b 29
+b 31
+b 33
+b 7
+b 15
+b 19
+b 25
+b 26
+b 7
+b 23
+b 24
+b 33
+b 21
+b 2
+b 8
+b 8
+b 1
+b 1
+b 7
+b 8
+b 5
+b 3
+b 0
+b 1
+b 646
+b 9
+b 10
+b 21
+b 21
+b 1
+b 70
+b 72
+b 74
+b 70
+b 1
+b 16
+b 17
+b 20
+b 14
+b 12
+b 1
+b 13
+b 14
+b 21
+b 22
+b 11
+b 2
+b 19
+b 1
+b 7
+b 6
+b 19
+b 20
+b 22
+b 23
+b 37
+b 4
+b 1
+b 18
+b 3
+b 0
+b 1
+b 11
+b 3
+b 4
+b 28
+b 4
+b 1
+b 2
+b 4
+b 5
+b 0
+b 1
+b 55
+b 52
+b 1
+b 21
+b 22
+b 24
+b 19
+b 2
+b 3
+b 16
+b 17
+b 19
+b 1
+b 2
+b 26
+b 30
+b 28
+b 2
+b 25
+b 1
+b 31
+b 32
+b 34
+b 35
+b 37
+b 38
+b 31
+b 3
+b 4
+b 0
+b 6
+b 7
+b 9
+b 10
+b 14
+b 9
+b 1
+b 3
+b 1
+b 44
+b 72
+b 73
+b 75
+b 38
+b 40
+b 41
+b 38
+b 2
+b 10
+b 9
+b 1
+b 16
+b 37
+b 38
+b 45
+b 46
+b 37
+b 1
+b 42
+b 2
+b 26
+b 27
+b 41
+b 24
+b 2
+b 38
+b 1
+b 27
+b 26
+b 1
+b 8
+b 9
+b 8
+b 2
+b 41
+b 48
+b 1
+b 2
+b 4
+b 1
+b 2
+b 37
+b 37
+b 1
+b 4
+b 5
+b 25
+b 4
+b 1
+b 88
+b 89
+b 86
+b 2
+b 48
+b 54
+b 55
+b 52
+b 2
+b 0
+b 0
+b 1
+b 5
+b 2
+b 1
+b 96
+b 105
+b 106
+b 2
+b 20
+b 25
+b 26
+b 34
+b 35
+b 45
+b 24
+b 1
+b 33
+b 1
+b 29
+b 37
+b 38
+b 45
+b 46
+b 48
+b 37
+b 2
+b 42
+b 1
+b 27
+b 1
+b 3
+b 203
+b 204
+b 214
+b 202
+b 1
+b 211
+b 3
+b 203
+b 1
+b 72
+b 64
+b 73
+b 63
+b 2
+b 17
+b 18
+b 15
+b 1
+b 75
+b 2
+b 3
+b 5
+b 5
+b 1
+b 2
+b 2
+b 1
+b 5
+b 3
+b 3
+b 70
+b 71
+b 94
+b 69
+b 1
+b 1
+b 6
+b 7
+b 101
+b 101
+b 1
+b 29
+b 30
+b 27
+b 2
+b 29
+b 43
+b 45
+b 46
+b 47
+b 26
+b 1
+b 1
+b 21
+b 22
+b 24
+b 25
+b 27
+b 21
+b 3
+b 43
+b 48
+b 48
+b 1
+b 3
+b 2
+b 2
+b 2
+b 3
+b 5
+b 7
+b 0
+b 2
+b 98
+b 100
+b 101
+b 17
+b 0
+b 1
+b 65
+b 110
+b 111
+b 115
+b 109
+b 1
+b 4
+b 5
+b 7
+b 9
+b 11
+b 1
+b 1
+b 49
+b 58
+b 47
+b 1
+b 5
+b 0
+b 1
+b 13
+b 15
+b 16
+b 20
+b 0
+b 2
+b 11
+b 2
+b 3
+b 29
+b 30
+b 32
+b 33
+b 41
+b 20
+b 29
+b 33
+b 53
+b 18
+b 2
+b 50
+b 2
+b 37
+b 39
+b 41
+b 42
+b 110
+b 118
+b 119
+b 41
+b 2
+b 116
+b 2
+b 34
+b 1
+b 103
+b 1
+b 63
+b 31
+b 36
+b 37
+b 39
+b 12
+b 14
+b 15
+b 17
+b 25
+b 14
+b 2
+b 68
+b 71
+b 72
+b 74
+b 75
+b 77
+b 78
+b 86
+b 67
+b 4
+b 70
+b 3
+b 30
+b 18
+b 19
+b 21
+b 29
+b 30
+b 18
+b 2
+b 15
+b 1
+b 0
+b 0
+b 1
+b 3
+b 20
+b 21
+b 33
+b 20
+b 1
+b 29
+b 1
+b 8
+b 9
+b 13
+b 29
+b 31
+b 32
+b 38
+b 41
+b 42
+b 55
+b 29
+b 2
+b 39
+b 2
+b 162
+b 164
+b 166
+b 167
+b 166
+b 2
+b 159
+b 1
+b 0
+b 2
+b 0
+b 1
+b 0
+b 2
+b 26
+b 27
+b 12
+b 41
+b 43
+b 41
+b 1
+b 54
+b 55
+b 63
+b 55
+b 1
+b 36
+b 38
+b 39
+b 43
+b 42
+b 2
+b 193
+b 191
+b 3
+b 22
+b 23
+b 25
+b 26
+b 22
+b 3
+b 3
+b 2
+b 2
+b 65
+b 64
+b 1
+b 41
+b 45
+b 46
+b 73
+b 42
+b 49
+b 40
+b 1
+b 46
+b 45
+b 1
+b 16
+b 17
+b 24
+b 25
+b 14
+b 2
+b 22
+b 2
+b 0
+b 2
+b 3
+b 0
+b 2
+b 18
+b 13
+b 20
+b 22
+b 23
+b 11
+b 1
+b 21
+b 2
+b 4
+b 5
+b 7
+b 1
+b 1
+b 80
+b 108
+b 123
+b 124
+b 126
+b 130
+b 131
+b 133
+b 134
+b 143
+b 121
+b 4
+b 137
+b 3
+b 107
+b 1
+b 20
+b 62
+b 64
+b 66
+b 67
+b 69
+b 66
+b 2
+b 6
+b 4
+b 3
+b 139
+b 142
+b 143
+b 150
+b 151
+b 153
+b 155
+b 156
+b 157
+b 150
+b 2
+b 147
+b 1
+b 67
+b 4
+b 6
+b 7
+b 9
+b 8
+b 74
+b 72
+b 2
+b 7
+b 1
+b 250
+b 252
+b 253
+b 255
+b 257
+b 258
+b 250
+b 2
+b 27
+b 13
+b 14
+b 22
+b 12
+b 1
+b 19
+b 21
+b 25
+b 19
+b 1
+b 0
+b 2
+b 3
+b 5
+b 7
+b 8
+b 9
+b 65
+b 87
+b 88
+b 90
+b 91
+b 87
+b 3
+b 29
+b 30
+b 42
+b 29
+b 2
+b 38
+b 1
+b 5
+b 4
+b 1
+b 39
+b 4
+b 5
+b 37
+b 43
+b 44
+b 2
+b 20
+b 25
+b 26
+b 33
+b 34
+b 75
+b 19
+b 2
+b 22
+b 1
+b 42
+b 43
+b 47
+b 48
+b 53
+b 62
+b 66
+b 45
+b 2
+b 50
+b 1
+b 54
+b 89
+b 90
+b 52
+b 1
+b 18
+b 1
+b 2
+b 1
+b 2
+b 11
+b 9
+b 2
+b 45
+b 47
+b 50
+b 52
+b 53
+b 55
+b 43
+b 1
+b 51
+b 2
+b 25
+b 83
+b 98
+b 100
+b 101
+b 103
+b 83
+b 1
+b 97
+b 2
+b 171
+b 174
+b 170
+b 4
+b 22
+b 23
+b 33
+b 23
+b 25
+b 27
+b 28
+b 30
+b 37
+b 38
+b 40
+b 67
+b 69
+b 70
+b 46
+b 48
+b 46
+b 1
+b 218
+b 219
+b 221
+b 222
+b 224
+b 226
+b 18
+b 20
+b 18
+b 1
+b 18
+b 19
+b 21
+b 23
+b 25
+b 26
+b 2
+b 1
+b 1
+b 9
+b 14
+b 9
+b 11
+b 21
+b 22
+b 26
+b 149
+b 162
+b 149
+b 1
+b 159
+b 1
+b 27
+b 28
+b 30
+b 152
+b 11
+b 12
+b 2
+b 3
+b 12
+b 2
+b 1
+b 9
+b 2
+b 15
+b 90
+b 91
+b 9
+b 9
+b 1
+b 14
+b 20
+b 12
+b 2
+b 4
+b 11
+b 12
+b 14
+b 14
+b 1
+b 8
+b 13
+b 12
+b 2
+b 39
+b 40
+b 23
+b 24
+b 29
+b 23
+b 1
+b 26
+b 2
+b 6
+b 8
+b 117
+b 118
+b 124
+b 25
+b 34
+b 35
+b 37
+b 59
+b 34
+b 2
+b 55
+b 2
+b 59
+b 75
+b 76
+b 75
+b 2
+b 57
+b 1
+b 42
+b 43
+b 49
+b 50
+b 42
+b 2
+b 1
+b 6
+b 9
+b 7
+b 1
+b 3
+b 4
+b 2
+b 1
+b 1
+b 9
+b 13
+b 1
+b 20
+b 46
+b 47
+b 69
+b 76
+b 77
+b 0
+b 2
+b 44
+b 1
+b 16
+b 1
+b 110
+b 112
+b 113
+b 110
+b 2
+b 47
+b 53
+b 54
+b 62
+b 4
+b 8
+b 9
+b 2
+b 2
+b 156
+b 155
+b 1
+b 109
+b 124
+b 125
+b 134
+b 135
+b 137
+b 139
+b 31
+b 32
+b 57
+b 31
+b 2
+b 53
+b 1
+b 63
+b 64
+b 120
+b 121
+b 126
+b 63
+b 2
+b 119
+b 1
+b 6
+b 37
+b 38
+b 40
+b 37
+b 2
+b 2
+b 0
+b 1
+b 148
+b 176
+b 177
+b 179
+b 181
+b 182
+b 181
+b 2
+b 173
+b 1
+b 14
+b 15
+b 12
+b 2
+b 13
+b 1
+b 21
+b 22
+b 41
+b 68
+b 69
+b 86
+b 87
+b 111
+b 40
+b 2
+b 64
+b 2
+b 83
+b 1
+b 69
+b 71
+b 90
+b 91
+b 107
+b 108
+b 71
+b 1
+b 87
+b 2
+b 104
+b 2
+b 2
+b 2
+b 1
+b 41
+b 42
+b 44
+b 47
+b 48
+b 41
+b 2
+b 17
+b 15
+b 1
+b 20
+b 7
+b 8
+b 5
+b 2
+b 48
+b 49
+b 46
+b 2
+b 16
+b 13
+b 1
+b 8
+b 24
+b 25
+b 53
+b 54
+b 79
+b 81
+b 82
+b 84
+b 90
+b 91
+b 24
+b 2
+b 49
+b 2
+b 77
+b 2
+b 6
+b 1
+b 48
+b 47
+b 2
+b 21
+b 23
+b 24
+b 32
+b 56
+b 31
+b 2
+b 42
+b 40
+b 2
+b 47
+b 54
+b 55
+b 0
+b 2
+b 0
+b 1
+b 0
+b 1
+b 4
+b 19
+b 20
+b 22
+b 24
+b 164
+b 0
+b 1
+b 4
+b 19
+b 57
+b 0
+b 1
+b 10
+b 12
+b 27
+b 29
+b 30
+b 32
+b 34
+b 46
+b 184
+b 185
+b 183
+b 1
+b 54
+b 53
+b 2
+b 18
+b 20
+b 0
+b 1
+b 20
+b 96
+b 10
+b 16
+b 17
+b 14
+b 2
+b 4
+b 5
+b 7
+b 3
+b 1
+b 28
+b 42
+b 49
+b 40
+b 3
+b 43
+b 1
+b 43
+b 44
+b 46
+b 48
+b 49
+b 51
+b 52
+b 53
+b 46
+b 2
+b 1
+b 8
+b 8
+b 1
+b 16
+b 18
+b 19
+b 26
+b 16
+b 2
+b 1
+b 124
+b 126
+b 126
+b 1
+b 117
+b 118
+b 133
+b 117
+b 2
+b 129
+b 1
+b 90
+b 99
+b 100
+b 105
+b 106
+b 116
+b 117
+b 105
+b 1
+b 113
+b 2
+b 2
+b 0
+b 1
+b 74
+b 77
+b 9
+b 19
+b 20
+b 22
+b 24
+b 7
+b 3
+b 14
+b 4
+b 0
+b 1
+b 17
+b 16
+b 1
+b 366
+b 368
+b 369
+b 371
+b 372
+b 371
+b 1
+b 27
+b 24
+b 1
+b 1
+b 5
+b 636
+b 652
+b 653
+b 635
+b 2
+b 649
+b 1
+b 3
+b 4
+b 25
+b 89
+b 100
+b 101
+b 125
+b 147
+b 148
+b 162
+b 100
+b 1
+b 122
+b 3
+b 142
+b 1
+b 192
+b 207
+b 208
+b 40
+b 41
+b 43
+b 38
+b 2
+b 41
+b 1
+b 91
+b 88
+b 1
+b 16
+b 18
+b 19
+b 65
+b 81
+b 18
+b 2
+b 61
+b 2
+b 30
+b 34
+b 35
+b 37
+b 28
+b 1
+b 3
+b 4
+b 6
+b 2
+b 1
+b 1
+b 51
+b 3
+b 10
+b 11
+b 15
+b 10
+b 1
+b 1
+b 1
+b 1
+b 69
+b 66
+b 1
+b 15
+b 16
+b 15
+b 2
+b 8
+b 9
+b 11
+b 8
+b 2
+b 2
+b 15
+b 19
+b 20
+b 17
+b 2
+b 14
+b 1
+b 3
+b 4
+b 16
+b 0
+b 1
+b 9
+b 11
+b 12
+b 49
+b 9
+b 2
+b 45
+b 2
+b 24
+b 25
+b 28
+b 1
+b 31
+b 10
+b 11
+b 14
+b 2
+b 86
+b 88
+b 90
+b 91
+b 115
+b 116
+b 118
+b 120
+b 122
+b 124
+b 126
+b 88
+b 2
+b 111
+b 2
+b 1
+b 0
+b 2
+b 144
+b 146
+b 43
+b 44
+b 46
+b 48
+b 42
+b 1
+b 47
+b 1
+b 4
+b 9
+b 10
+b 25
+b 26
+b 37
+b 80
+b 23
+b 2
+b 34
+b 2
+b 74
+b 3
+b 28
+b 34
+b 35
+b 41
+b 26
+b 2
+b 5
+b 3
+b 1
+b 15
+b 13
+b 3
+b 4
+b 5
+b 3
+b 1
+b 3
+b 5
+b 1
+b 14
+b 89
+b 94
+b 95
+b 104
+b 105
+b 87
+b 3
+b 90
+b 1
+b 91
+b 1
+b 32
+b 17
+b 16
+b 2
+b 16
+b 26
+b 27
+b 19
+b 18
+b 2
+b 6
+b 12
+b 13
+b 24
+b 26
+b 27
+b 29
+b 11
+b 1
+b 35
+b 38
+b 46
+b 47
+b 49
+b 50
+b 118
+b 119
+b 133
+b 135
+b 136
+b 118
+b 2
+b 131
+b 2
+b 32
+b 1
+b 8
+b 69
+b 70
+b 72
+b 163
+b 21
+b 16
+b 17
+b 24
+b 15
+b 1
+b 22
+b 2
+b 24
+b 34
+b 35
+b 81
+b 82
+b 85
+b 81
+b 4
+b 3
+b 1
+b 3
+b 65
+b 66
+b 97
+b 98
+b 111
+b 96
+b 1
+b 58
+b 62
+b 63
+b 60
+b 2
+b 102
+b 10
+b 83
+b 101
+b 102
+b 564
+b 565
+b 702
+b 8
+b 6
+b 2
+b 21
+b 22
+b 20
+b 1
+b 7
+b 9
+b 10
+b 12
+b 6
+b 35
+b 4
+b 1
+b 1
+b 3
+b 5
+b 6
+b 8
+b 10
+b 11
+b 12
+b 3
+b 2
+b 21
+b 62
+b 63
+b 69
+b 70
+b 72
+b 62
+b 1
+b 14
+b 13
+b 2
+b 8
+b 12
+b 13
+b 16
+b 18
+b 19
+b 25
+b 24
+b 1
+b 9
+b 41
+b 42
+b 44
+b 46
+b 22
+b 24
+b 25
+b 27
+b 38
+b 40
+b 42
+b 24
+b 2
+b 27
+b 25
+b 2
+b 3
+b 4
+b 2
+b 1
+b 222
+b 236
+b 238
+b 239
+b 241
+b 243
+b 10
+b 11
+b 13
+b 15
+b 17
+b 15
+b 1
+b 14
+b 7
+b 22
+b 21
+b 1
+b 5
+b 6
+b 9
+b 11
+b 12
+b 14
+b 15
+b 5
+b 3
+b 49
+b 19
+b 17
+b 1
+b 28
+b 30
+b 31
+b 37
+b 8
+b 10
+b 12
+b 12
+b 1
+b 18
+b 18
+b 1
+b 11
+b 21
+b 38
+b 40
+b 20
+b 1
+b 3
+b 12
+b 1
+b 2
+b 4
+b 4
+b 1
+b 7
+b 8
+b 23
+b 24
+b 26
+b 6
+b 1
+b 4
+b 3
+b 1
+b 184
+b 185
+b 202
+b 204
+b 205
+b 183
+b 1
+b 65
+b 15
+b 12
+b 80
+b 81
+b 91
+b 92
+b 88
+b 1
+b 16
+b 17
+b 19
+b 16
+b 2
+b 181
+b 9
+b 10
+b 12
+b 8
+b 1
+b 9
+b 11
+b 12
+b 7
+b 1
+b 0
+b 12
+b 153
+b 177
+b 4
+b 13
+b 14
+b 16
+b 101
+b 102
+b 104
+b 106
+b 107
+b 109
+b 101
+b 2
+b 8
+b 18
+b 20
+b 21
+b 26
+b 20
+b 2
+b 15
+b 1
+b 10
+b 8
+b 3
+b 73
+b 77
+b 110
+b 109
+b 2
+b 10
+b 11
+b 13
+b 9
+b 1
+b 0
+b 0
+b 4
+b 49
+b 47
+b 2
+b 3
+b 5
+b 7
+b 9
+b 10
+b 15
+b 9
+b 1
+b 107
+b 110
+b 111
+b 107
+b 3
+b 20
+b 21
+b 23
+b 23
+b 1
+b 9
+b 80
+b 81
+b 88
+b 98
+b 80
+b 1
+b 85
+b 2
+b 68
+b 69
+b 4
+b 33
+b 34
+b 36
+b 37
+b 39
+b 49
+b 53
+b 54
+b 62
+b 33
+b 3
+b 45
+b 2
+b 28
+b 29
+b 28
+b 4
+b 11
+b 15
+b 9
+b 2
+b 67
+b 75
+b 76
+b 65
+b 1
+b 74
+b 2
+b 8
+b 9
+b 24
+b 25
+b 30
+b 6
+b 2
+b 23
+b 1
+b 18
+b 24
+b 25
+b 44
+b 45
+b 83
+b 24
+b 2
+b 40
+b 2
+b 15
+b 1
+b 77
+b 1
+b 11
+b 18
+b 19
+b 21
+b 22
+b 24
+b 45
+b 10
+b 2
+b 15
+b 1
+b 80
+b 15
+b 16
+b 26
+b 27
+b 29
+b 31
+b 32
+b 15
+b 2
+b 22
+b 2
+b 28
+b 1
+b 23
+b 0
+b 2
+b 55
+b 57
+b 58
+b 64
+b 53
+b 1
+b 6
+b 8
+b 8
+b 1
+b 9
+b 16
+b 17
+b 19
+b 21
+b 22
+b 19
+b 2
+b 31
+b 36
+b 37
+b 39
+b 40
+b 42
+b 52
+b 30
+b 2
+b 33
+b 1
+b 3
+b 119
+b 12
+b 13
+b 9
+b 1
+b 21
+b 38
+b 19
+b 3
+b 32
+b 1
+b 81
+b 82
+b 84
+b 85
+b 81
+b 3
+b 4
+b 30
+b 22
+b 29
+b 22
+b 1
+b 26
+b 1
+b 82
+b 83
+b 46
+b 45
+b 1
+b 13
+b 34
+b 35
+b 34
+b 1
+b 18
+b 16
+b 3
+b 202
+b 207
+b 206
+b 1
+b 63
+b 64
+b 66
+b 68
+b 69
+b 91
+b 90
+b 1
+b 21
+b 60
+b 61
+b 70
+b 72
+b 60
+b 2
+b 66
+b 1
+b 12
+b 12
+b 1
+b 116
+b 117
+b 120
+b 122
+b 120
+b 1
+b 58
+b 31
+b 32
+b 34
+b 36
+b 37
+b 46
+b 29
+b 2
+b 49
+b 54
+b 55
+b 57
+b 54
+b 2
+b 27
+b 52
+b 53
+b 69
+b 68
+b 2
+b 24
+b 1
+b 6
+b 7
+b 4
+b 6
+b 107
+b 109
+b 2
+b 3
+b 0
+b 2
+b 4
+b 3
+b 2
+b 30
+b 38
+b 0
+b 2
+b 8
+b 9
+b 8
+b 1
+b 5
+b 1
+b 231
+b 235
+b 14
+b 0
+b 1
+b 5
+b 6
+b 5
+b 1
+b 11
+b 14
+b 15
+b 18
+b 19
+b 4
+b 2
+b 1
+b 142
+b 143
+b 166
+b 167
+b 169
+b 142
+b 2
+b 167
+b 1
+b 39
+b 43
+b 42
+b 1
+b 1
+b 106
+b 22
+b 29
+b 30
+b 29
+b 1
+b 6
+b 6
+b 1
+b 17
+b 70
+b 71
+b 89
+b 91
+b 93
+b 94
+b 96
+b 98
+b 99
+b 110
+b 68
+b 2
+b 96
+b 2
+b 87
+b 88
+b 97
+b 98
+b 86
+b 1
+b 96
+b 2
+b 22
+b 49
+b 50
+b 20
+b 2
+b 19
+b 72
+b 76
+b 80
+b 78
+b 3
+b 75
+b 1
+b 50
+b 47
+b 1
+b 1
+b 5
+b 6
+b 8
+b 9
+b 5
+b 3
+b 135
+b 105
+b 106
+b 108
+b 342
+b 346
+b 35
+b 44
+b 46
+b 47
+b 44
+b 2
+b 18
+b 0
+b 1
+b 1
+b 10
+b 11
+b 17
+b 35
+b 36
+b 61
+b 62
+b 0
+b 2
+b 6
+b 2
+b 31
+b 1
+b 13
+b 1
+b 62
+b 3
+b 7
+b 0
+b 1
+b 14
+b 15
+b 1
+b 2
+b 5
+b 9
+b 11
+b 12
+b 1
+b 4
+b 557
+b 694
+b 695
+b 14
+b 15
+b 19
+b 21
+b 19
+b 1
+b 19
+b 29
+b 31
+b 32
+b 34
+b 36
+b 77
+b 10
+b 11
+b 13
+b 7
+b 8
+b 12
+b 13
+b 15
+b 16
+b 12
+b 3
+b 5
+b 1
+b 50
+b 51
+b 53
+b 55
+b 48
+b 2
+b 53
+b 1
+b 89
+b 102
+b 100
+b 1
+b 0
+b 1
+b 42
+b 43
+b 48
+b 49
+b 51
+b 53
+b 0
+b 2
+b 38
+b 2
+b 44
+b 2
+b 2
+b 112
+b 116
+b 117
+b 6
+b 7
+b 5
+b 14
+b 4
+b 2
+b 4
+b 59
+b 61
+b 62
+b 108
+b 109
+b 110
+b 107
+b 3
+b 0
+b 58
+b 62
+b 63
+b 68
+b 56
+b 2
+b 5
+b 6
+b 13
+b 4
+b 1
+b 44
+b 48
+b 49
+b 48
+b 2
+b 42
+b 1
+b 2
+b 3
+b 11
+b 3
+b 1
+b 29
+b 26
+b 1
+b 52
+b 53
+b 213
+b 18
+b 19
+b 26
+b 27
+b 16
+b 2
+b 24
+b 2
+b 11
+b 8
+b 1
+b 53
+b 55
+b 57
+b 135
+b 136
+b 154
+b 51
+b 1
+b 134
+b 2
+b 149
+b 1
+b 34
+b 33
+b 1
+b 8
+b 9
+b 11
+b 24
+b 6
+b 2
+b 22
+b 1
+b 32
+b 40
+b 7
+b 9
+b 11
+b 12
+b 14
+b 5
+b 1
+b 0
+b 1
+b 0
+b 1
+b 3
+b 28
+b 29
+b 31
+b 32
+b 34
+b 26
+b 2
+b 32
+b 1
+b 2
+b 1
+b 3
+b 69
+b 70
+b 72
+b 69
+b 2
+b 4
+b 2
+b 3
+b 75
+b 81
+b 87
+b 88
+b 79
+b 2
+b 0
+b 1
+b 0
+b 35
+b 36
+b 46
+b 8
+b 9
+b 17
+b 18
+b 20
+b 7
+b 1
+b 16
+b 2
+b 11
+b 25
+b 35
+b 40
+b 49
+b 50
+b 52
+b 33
+b 2
+b 47
+b 4
+b 24
+b 1
+b 0
+b 1
+b 140
+b 142
+b 138
+b 1
+b 33
+b 34
+b 36
+b 33
+b 2
+b 13
+b 11
+b 3
+b 84
+b 107
+b 37
+b 38
+b 40
+b 1
+b 6
+b 11
+b 19
+b 20
+b 32
+b 5
+b 1
+b 7
+b 1
+b 61
+b 59
+b 1
+b 8
+b 9
+b 12
+b 8
+b 5
+b 9
+b 7
+b 2
+b 32
+b 33
+b 35
+b 36
+b 40
+b 68
+b 32
+b 3
+b 78
+b 25
+b 27
+b 27
+b 1
+b 148
+b 149
+b 151
+b 152
+b 154
+b 146
+b 2
+b 149
+b 2
+b 69
+b 71
+b 73
+b 74
+b 97
+b 98
+b 122
+b 71
+b 2
+b 119
+b 4
+b 62
+b 60
+b 1
+b 1
+b 2
+b 4
+b 5
+b 7
+b 9
+b 10
+b 14
+b 1
+b 3
+b 6
+b 2
+b 89
+b 89
+b 1
+b 92
+b 93
+b 95
+b 96
+b 105
+b 109
+b 92
+b 3
+b 105
+b 1
+b 18
+b 17
+b 2
+b 7
+b 8
+b 23
+b 24
+b 5
+b 2
+b 21
+b 1
+b 5
+b 10
+b 29
+b 122
+b 125
+b 127
+b 128
+b 136
+b 137
+b 28
+b 2
+b 123
+b 2
+b 1
+b 21
+b 22
+b 36
+b 38
+b 39
+b 41
+b 43
+b 21
+b 2
+b 31
+b 1
+b 49
+b 0
+b 2
+b 7
+b 8
+b 10
+b 45
+b 54
+b 54
+b 1
+b 43
+b 41
+b 1
+b 1
+b 2
+b 0
+b 4
+b 126
+b 127
+b 131
+b 124
+b 2
+b 8
+b 10
+b 11
+b 20
+b 18
+b 2
+b 2
+b 1
+b 1
+b 127
+b 128
+b 143
+b 127
+b 1
+b 140
+b 2
+b 4
+b 12
+b 13
+b 19
+b 86
+b 92
+b 93
+b 95
+b 16
+b 25
+b 26
+b 28
+b 28
+b 3
+b 76
+b 89
+b 91
+b 92
+b 94
+b 98
+b 99
+b 105
+b 109
+b 89
+b 2
+b 96
+b 2
+b 99
+b 1
+b 138
+b 158
+b 160
+b 161
+b 174
+b 175
+b 185
+b 156
+b 1
+b 174
+b 1
+b 89
+b 91
+b 92
+b 94
+b 96
+b 97
+b 99
+b 91
+b 2
+b 0
+b 6
+b 0
+b 1
+b 3
+b 1
+b 50
+b 53
+b 55
+b 56
+b 58
+b 59
+b 61
+b 55
+b 3
+b 138
+b 149
+b 150
+b 154
+b 157
+b 158
+b 164
+b 153
+b 4
+b 159
+b 1
+b 4
+b 13
+b 14
+b 3
+b 1
+b 2
+b 17
+b 41
+b 42
+b 44
+b 72
+b 73
+b 118
+b 120
+b 121
+b 128
+b 41
+b 2
+b 68
+b 2
+b 116
+b 2
+b 4
+b 11
+b 25
+b 31
+b 23
+b 3
+b 24
+b 25
+b 29
+b 22
+b 2
+b 26
+b 1
+b 86
+b 88
+b 24
+b 23
+b 1
+b 9
+b 10
+b 12
+b 13
+b 21
+b 22
+b 12
+b 2
+b 17
+b 2
+b 6
+b 1
+b 63
+b 62
+b 1
+b 10
+b 19
+b 20
+b 8
+b 1
+b 39
+b 208
+b 217
+b 206
+b 1
+b 24
+b 26
+b 27
+b 29
+b 26
+b 2
+b 140
+b 145
+b 147
+b 148
+b 169
+b 167
+b 1
+b 148
+b 1
+b 0
+b 1
+b 66
+b 10
+b 7
+b 1
+b 2
+b 3
+b 5
+b 7
+b 25
+b 0
+b 2
+b 13
+b 8
+b 11
+b 9
+b 3
+b 23
+b 24
+b 26
+b 28
+b 29
+b 31
+b 26
+b 2
+b 29
+b 1
+b 12
+b 14
+b 16
+b 17
+b 14
+b 2
+b 28
+b 29
+b 31
+b 5
+b 3
+b 2
+b 162
+b 171
+b 172
+b 14
+b 16
+b 14
+b 1
+b 157
+b 155
+b 1
+b 0
+b 2
+b 4
+b 5
+b 11
+b 12
+b 4
+b 2
+b 7
+b 2
+b 14
+b 12
+b 1
+b 6
+b 1
+b 2
+b 18
+b 20
+b 21
+b 32
+b 16
+b 1
+b 2
+b 1
+b 64
+b 68
+b 62
+b 2
+b 19
+b 21
+b 22
+b 24
+b 21
+b 3
+b 16
+b 1
+b 20
+b 20
+b 7
+b 8
+b 10
+b 10
+b 9
+b 2
+b 36
+b 37
+b 39
+b 39
+b 40
+b 42
+b 43
+b 39
+b 3
+b 25
+b 29
+b 27
+b 3
+b 24
+b 1
+b 3
+b 2
+b 1
+b 224
+b 221
+b 1
+b 29
+b 30
+b 32
+b 34
+b 27
+b 2
+b 32
+b 1
+b 21
+b 93
+b 21
+b 1
+b 20
+b 21
+b 19
+b 1
+b 2
+b 6
+b 69
+b 70
+b 72
+b 73
+b 79
+b 68
+b 1
+b 77
+b 1
+b 131
+b 133
+b 145
+b 146
+b 150
+b 151
+b 133
+b 1
+b 143
+b 1
+b 13
+b 45
+b 47
+b 48
+b 50
+b 51
+b 53
+b 54
+b 56
+b 58
+b 43
+b 1
+b 49
+b 3
+b 9
+b 1
+b 2
+b 4
+b 5
+b 37
+b 38
+b 2
+b 2
+b 15
+b 10
+b 11
+b 18
+b 10
+b 2
+b 13
+b 1
+b 45
+b 54
+b 55
+b 53
+b 1
+b 5
+b 3
+b 1
+b 53
+b 59
+b 60
+b 62
+b 64
+b 65
+b 53
+b 1
+b 56
+b 2
+b 62
+b 1
+b 3
+b 1
+b 21
+b 29
+b 30
+b 85
+b 19
+b 1
+b 28
+b 1
+b 24
+b 32
+b 33
+b 35
+b 36
+b 57
+b 59
+b 69
+b 70
+b 70
+b 1
+b 1
+b 1
+b 1
+b 149
+b 151
+b 152
+b 154
+b 87
+b 90
+b 91
+b 2
+b 3
+b 34
+b 32
+b 1
+b 19
+b 20
+b 13
+b 19
+b 39
+b 40
+b 42
+b 39
+b 2
+b 66
+b 64
+b 1
+b 154
+b 156
+b 38
+b 44
+b 45
+b 80
+b 82
+b 83
+b 85
+b 37
+b 2
+b 40
+b 2
+b 78
+b 2
+b 23
+b 11
+b 13
+b 14
+b 18
+b 19
+b 27
+b 28
+b 11
+b 2
+b 16
+b 2
+b 21
+b 2
+b 126
+b 32
+b 31
+b 1
+b 118
+b 119
+b 121
+b 122
+b 121
+b 1
+b 67
+b 8
+b 6
+b 3
+b 2
+b 13
+b 23
+b 24
+b 10
+b 11
+b 13
+b 15
+b 36
+b 10
+b 2
+b 32
+b 2
+b 96
+b 98
+b 99
+b 101
+b 96
+b 2
+b 99
+b 1
+b 178
+b 180
+b 182
+b 183
+b 184
+b 0
+b 113
+b 115
+b 116
+b 111
+b 1
+b 114
+b 1
+b 138
+b 140
+b 142
+b 143
+b 147
+b 14
+b 16
+b 17
+b 16
+b 1
+b 16
+b 35
+b 36
+b 56
+b 14
+b 3
+b 30
+b 2
+b 50
+b 1
+b 4
+b 91
+b 92
+b 4
+b 10
+b 12
+b 13
+b 15
+b 12
+b 2
+b 25
+b 25
+b 1
+b 25
+b 31
+b 32
+b 13
+b 14
+b 16
+b 13
+b 2
+b 4
+b 4
+b 1
+b 58
+b 60
+b 62
+b 63
+b 65
+b 67
+b 62
+b 2
+b 24
+b 22
+b 2
+b 31
+b 33
+b 35
+b 63
+b 64
+b 69
+b 70
+b 63
+b 1
+b 66
+b 2
+b 39
+b 37
+b 2
+b 2
+b 4
+b 5
+b 7
+b 12
+b 23
+b 24
+b 4
+b 2
+b 8
+b 2
+b 0
+b 1
+b 13
+b 20
+b 21
+b 33
+b 34
+b 43
+b 44
+b 11
+b 1
+b 19
+b 2
+b 28
+b 2
+b 38
+b 2
+b 20
+b 22
+b 17
+b 1
+b 103
+b 104
+b 106
+b 112
+b 110
+b 1
+b 78
+b 4
+b 28
+b 30
+b 32
+b 33
+b 8
+b 60
+b 68
+b 60
+b 1
+b 65
+b 1
+b 2
+b 0
+b 2
+b 3
+b 5
+b 6
+b 7
+b 9
+b 10
+b 40
+b 44
+b 45
+b 5
+b 1
+b 8
+b 2
+b 34
+b 1
+b 1
+b 69
+b 74
+b 75
+b 77
+b 79
+b 71
+b 1
+b 11
+b 16
+b 17
+b 19
+b 20
+b 22
+b 19
+b 2
+b 67
+b 73
+b 74
+b 56
+b 74
+b 72
+b 3
+b 55
+b 1
+b 1
+b 97
+b 98
+b 0
+b 55
+b 47
+b 48
+b 65
+b 66
+b 71
+b 65
+b 1
+b 68
+b 2
+b 27
+b 28
+b 30
+b 26
+b 1
+b 96
+b 100
+b 101
+b 104
+b 100
+b 4
+b 93
+b 1
+b 116
+b 153
+b 154
+b 161
+b 162
+b 153
+b 1
+b 158
+b 2
+b 4
+b 3
+b 1
+b 4
+b 14
+b 15
+b 17
+b 18
+b 23
+b 17
+b 1
+b 20
+b 2
+b 4
+b 0
+b 57
+b 58
+b 62
+b 63
+b 72
+b 90
+b 56
+b 1
+b 88
+b 2
+b 51
+b 49
+b 2
+b 3
+b 4
+b 96
+b 97
+b 113
+b 47
+b 9
+b 10
+b 17
+b 9
+b 1
+b 14
+b 1
+b 610
+b 19
+b 20
+b 5
+b 10
+b 63
+b 64
+b 68
+b 69
+b 73
+b 74
+b 82
+b 66
+b 2
+b 71
+b 2
+b 4
+b 42
+b 40
+b 1
+b 6
+b 7
+b 6
+b 2
+b 4
+b 5
+b 11
+b 12
+b 4
+b 2
+b 4
+b 11
+b 65
+b 70
+b 12
+b 11
+b 1
+b 0
+b 2
+b 0
+b 1
+b 8
+b 0
+b 2
+b 6
+b 7
+b 8
+b 8
+b 35
+b 36
+b 6
+b 1
+b 34
+b 2
+b 2
+b 3
+b 10
+b 11
+b 13
+b 18
+b 3
+b 1
+b 96
+b 108
+b 110
+b 111
+b 113
+b 115
+b 116
+b 121
+b 115
+b 1
+b 118
+b 2
+b 52
+b 58
+b 59
+b 61
+b 52
+b 1
+b 1
+b 20
+b 4
+b 6
+b 7
+b 30
+b 32
+b 28
+b 1
+b 0
+b 2
+b 0
+b 1
+b 28
+b 29
+b 31
+b 26
+b 2
+b 125
+b 126
+b 122
+b 1
+b 2
+b 2
+b 2
+b 1
+b 118
+b 123
+b 124
+b 146
+b 147
+b 149
+b 150
+b 146
+b 3
+b 0
+b 7
+b 10
+b 6
+b 3
+b 5
+b 11
+b 12
+b 20
+b 22
+b 96
+b 98
+b 99
+b 142
+b 143
+b 154
+b 96
+b 2
+b 44
+b 43
+b 1
+b 122
+b 127
+b 120
+b 2
+b 132
+b 134
+b 135
+b 141
+b 134
+b 1
+b 10
+b 16
+b 17
+b 21
+b 22
+b 24
+b 16
+b 1
+b 10
+b 6
+b 195
+b 6
+b 7
+b 22
+b 23
+b 6
+b 1
+b 19
+b 2
+b 2
+b 0
+b 1
+b 1
+b 2
+b 4
+b 6
+b 8
+b 15
+b 16
+b 25
+b 0
+b 1
+b 7
+b 1
+b 12
+b 1
+b 106
+b 0
+b 14
+b 12
+b 1
+b 2
+b 4
+b 5
+b 7
+b 9
+b 0
+b 1
+b 23
+b 127
+b 125
+b 1
+b 49
+b 53
+b 54
+b 52
+b 1
+b 57
+b 59
+b 60
+b 62
+b 64
+b 66
+b 67
+b 69
+b 79
+b 55
+b 1
+b 58
+b 2
+b 45
+b 45
+b 1
+b 1
+b 47
+b 49
+b 50
+b 55
+b 56
+b 0
+b 2
+b 45
+b 2
+b 0
+b 12
+b 13
+b 28
+b 29
+b 38
+b 11
+b 1
+b 18
+b 40
+b 46
+b 47
+b 63
+b 64
+b 38
+b 1
+b 45
+b 1
+b 5
+b 6
+b 8
+b 80
+b 82
+b 1
+b 20
+b 22
+b 23
+b 38
+b 0
+b 2
+b 21
+b 1
+b 227
+b 238
+b 247
+b 253
+b 254
+b 236
+b 3
+b 249
+b 1
+b 226
+b 1
+b 82
+b 0
+b 2
+b 3
+b 5
+b 16
+b 15
+b 2
+b 4
+b 5
+b 4
+b 2
+b 33
+b 42
+b 41
+b 1
+b 73
+b 79
+b 80
+b 82
+b 102
+b 103
+b 102
+b 1
+b 97
+b 104
+b 105
+b 104
+b 1
+b 64
+b 63
+b 2
+b 61
+b 62
+b 64
+b 66
+b 67
+b 69
+b 70
+b 84
+b 61
+b 2
+b 23
+b 10
+b 12
+b 13
+b 4
+b 2
+b 1
+b 13
+b 14
+b 13
+b 1
+b 0
+b 4
+b 128
+b 130
+b 131
+b 135
+b 136
+b 135
+b 1
+b 4
+b 2
+b 2
+b 4
+b 2
+b 113
+b 111
+b 2
+b 4
+b 5
+b 7
+b 2
+b 2
+b 35
+b 32
+b 1
+b 168
+b 172
+b 167
+b 2
+b 168
+b 1
+b 37
+b 38
+b 40
+b 41
+b 45
+b 37
+b 3
+b 21
+b 20
+b 1
+b 49
+b 53
+b 54
+b 52
+b 1
+b 13
+b 29
+b 12
+b 20
+b 21
+b 23
+b 29
+b 30
+b 11
+b 2
+b 16
+b 2
+b 23
+b 21
+b 1
+b 91
+b 52
+b 53
+b 56
+b 57
+b 51
+b 1
+b 55
+b 2
+b 11
+b 8
+b 1
+b 119
+b 126
+b 127
+b 129
+b 118
+b 1
+b 6
+b 56
+b 58
+b 60
+b 62
+b 63
+b 65
+b 66
+b 68
+b 54
+b 1
+b 61
+b 3
+b 3
+b 3
+b 1
+b 75
+b 77
+b 79
+b 85
+b 75
+b 1
+b 81
+b 27
+b 28
+b 32
+b 33
+b 33
+b 1
+b 52
+b 101
+b 102
+b 100
+b 1
+b 3
+b 9
+b 10
+b 18
+b 19
+b 2
+b 1
+b 1
+b 1
+b 96
+b 94
+b 1
+b 10
+b 12
+b 14
+b 16
+b 17
+b 21
+b 23
+b 47
+b 48
+b 64
+b 45
+b 2
+b 60
+b 1
+b 15
+b 30
+b 30
+b 1
+b 108
+b 110
+b 111
+b 123
+b 6
+b 19
+b 23
+b 159
+b 160
+b 181
+b 182
+b 205
+b 206
+b 179
+b 2
+b 203
+b 2
+b 160
+b 1
+b 3
+b 93
+b 95
+b 93
+b 1
+b 22
+b 23
+b 55
+b 6
+b 6
+b 1
+b 29
+b 30
+b 32
+b 33
+b 55
+b 56
+b 71
+b 72
+b 29
+b 3
+b 52
+b 2
+b 63
+b 1
+b 3
+b 71
+b 77
+b 78
+b 82
+b 83
+b 85
+b 71
+b 1
+b 74
+b 2
+b 79
+b 2
+b 77
+b 81
+b 82
+b 84
+b 85
+b 84
+b 1
+b 12
+b 24
+b 27
+b 10
+b 3
+b 18
+b 1
+b 99
+b 109
+b 111
+b 112
+b 114
+b 116
+b 117
+b 114
+b 2
+b 20
+b 26
+b 19
+b 2
+b 5
+b 71
+b 82
+b 11
+b 12
+b 10
+b 11
+b 8
+b 3
+b 1
+b 0
+b 1
+b 123
+b 124
+b 126
+b 127
+b 130
+b 132
+b 133
+b 135
+b 132
+b 2
+b 13
+b 17
+b 16
+b 2
+b 127
+b 134
+b 135
+b 137
+b 125
+b 1
+b 60
+b 58
+b 1
+b 10
+b 11
+b 19
+b 10
+b 2
+b 15
+b 2
+b 3
+b 4
+b 13
+b 0
+b 1
+b 1
+b 76
+b 79
+b 94
+b 95
+b 94
+b 2
+b 6
+b 4
+b 1
+b 4
+b 43
+b 66
+b 68
+b 69
+b 71
+b 73
+b 74
+b 42
+b 2
+b 64
+b 2
+b 38
+b 43
+b 38
+b 32
+b 57
+b 58
+b 68
+b 32
+b 1
+b 54
+b 2
+b 43
+b 45
+b 47
+b 48
+b 50
+b 51
+b 54
+b 55
+b 61
+b 62
+b 64
+b 47
+b 3
+b 51
+b 2
+b 18
+b 16
+b 1
+b 17
+b 19
+b 20
+b 17
+b 2
+b 30
+b 31
+b 42
+b 43
+b 30
+b 2
+b 38
+b 2
+b 106
+b 110
+b 109
+b 1
+b 13
+b 19
+b 20
+b 48
+b 49
+b 10
+b 11
+b 20
+b 22
+b 20
+b 1
+b 62
+b 109
+b 110
+b 121
+b 148
+b 149
+b 109
+b 1
+b 60
+b 1
+b 1
+b 9
+b 27
+b 28
+b 39
+b 72
+b 73
+b 75
+b 76
+b 78
+b 101
+b 25
+b 2
+b 73
+b 2
+b 95
+b 3
+b 8
+b 1
+b 8
+b 33
+b 34
+b 43
+b 45
+b 33
+b 2
+b 39
+b 1
+b 6
+b 1
+b 79
+b 83
+b 84
+b 86
+b 88
+b 89
+b 101
+b 102
+b 134
+b 144
+b 81
+b 2
+b 86
+b 2
+b 94
+b 1
+b 63
+b 64
+b 66
+b 63
+b 2
+b 2
+b 8
+b 9
+b 11
+b 13
+b 274
+b 279
+b 280
+b 309
+b 311
+b 313
+b 314
+b 307
+b 1
+b 312
+b 2
+b 276
+b 1
+b 0
+b 133
+b 134
+b 133
+b 1
+b 21
+b 41
+b 43
+b 44
+b 19
+b 2
+b 0
+b 4
+b 12
+b 13
+b 30
+b 31
+b 33
+b 35
+b 36
+b 42
+b 44
+b 35
+b 2
+b 91
+b 90
+b 1
+b 1
+b 42
+b 4
+b 5
+b 46
+b 47
+b 51
+b 52
+b 51
+b 2
+b 197
+b 196
+b 1
+b 80
+b 79
+b 1
+b 19
+b 8
+b 83
+b 100
+b 101
+b 112
+b 81
+b 3
+b 96
+b 3
+b 6
+b 7
+b 27
+b 36
+b 37
+b 40
+b 46
+b 34
+b 2
+b 44
+b 1
+b 236
+b 233
+b 1
+b 2
+b 3
+b 2
+b 15
+b 22
+b 23
+b 23
+b 1
+b 9
+b 10
+b 8
+b 1
+b 1
+b 42
+b 50
+b 58
+b 59
+b 41
+b 62
+b 61
+b 1
+b 40
+b 47
+b 48
+b 50
+b 52
+b 45
+b 2
+b 39
+b 1
+b 49
+b 48
+b 1
+b 34
+b 35
+b 54
+b 55
+b 63
+b 64
+b 72
+b 78
+b 79
+b 34
+b 1
+b 52
+b 1
+b 5
+b 35
+b 62
+b 32
+b 1
+b 4
+b 5
+b 17
+b 15
+b 5
+b 44
+b 53
+b 54
+b 71
+b 72
+b 52
+b 1
+b 11
+b 10
+b 1
+b 2
+b 0
+b 5
+b 15
+b 21
+b 22
+b 24
+b 18
+b 1
+b 8
+b 18
+b 19
+b 18
+b 2
+b 7
+b 6
+b 1
+b 60
+b 62
+b 64
+b 65
+b 72
+b 58
+b 1
+b 63
+b 1
+b 36
+b 38
+b 39
+b 51
+b 52
+b 54
+b 73
+b 36
+b 2
+b 52
+b 1
+b 5
+b 92
+b 94
+b 95
+b 98
+b 99
+b 101
+b 107
+b 6
+b 16
+b 14
+b 2
+b 1
+b 3
+b 4
+b 2
+b 27
+b 33
+b 34
+b 39
+b 41
+b 42
+b 44
+b 39
+b 2
+b 42
+b 1
+b 3
+b 22
+b 13
+b 17
+b 18
+b 20
+b 16
+b 1
+b 0
+b 1
+b 18
+b 17
+b 2
+b 186
+b 190
+b 191
+b 189
+b 3
+b 0
+b 5
+b 7
+b 8
+b 15
+b 299
+b 300
+b 305
+b 300
+b 1
+b 82
+b 83
+b 82
+b 2
+b 2
+b 3
+b 0
+b 2
+b 2
+b 0
+b 4
+b 0
+b 1
+b 34
+b 32
+b 1
+b 4
+b 5
+b 2
+b 2
+b 5
+b 7
+b 3
+b 1
+b 25
+b 22
+b 1
+b 65
+b 66
+b 64
+b 1
+b 25
+b 12
+b 14
+b 16
+b 17
+b 18
+b 5
+b 6
+b 8
+b 5
+b 2
+b 39
+b 41
+b 43
+b 44
+b 46
+b 9
+b 7
+b 5
+b 0
+b 1
+b 0
+b 1
+b 1
+b 67
+b 67
+b 1
+b 29
+b 31
+b 33
+b 34
+b 36
+b 37
+b 36
+b 2
+b 3
+b 1
+b 3
+b 42
+b 43
+b 45
+b 41
+b 1
+b 5
+b 60
+b 65
+b 66
+b 70
+b 25
+b 27
+b 29
+b 17
+b 29
+b 30
+b 38
+b 39
+b 36
+b 2
+b 17
+b 15
+b 1
+b 640
+b 11
+b 12
+b 18
+b 19
+b 16
+b 2
+b 33
+b 33
+b 1
+b 81
+b 0
+b 1
+b 17
+b 18
+b 22
+b 24
+b 20
+b 1
+b 29
+b 31
+b 3
+b 4
+b 1
+b 50
+b 29
+b 33
+b 34
+b 36
+b 27
+b 1
+b 4
+b 5
+b 3
+b 1
+b 8
+b 6
+b 2
+b 15
+b 21
+b 22
+b 19
+b 2
+b 14
+b 1
+b 4
+b 4
+b 67
+b 72
+b 74
+b 75
+b 77
+b 74
+b 2
+b 65
+b 1
+b 0
+b 1
+b 229
+b 56
+b 57
+b 56
+b 1
+b 23
+b 22
+b 2
+b 42
+b 43
+b 2
+b 3
+b 8
+b 122
+b 120
+b 1
+b 49
+b 46
+b 1
+b 1
+b 3
+b 5
+b 6
+b 14
+b 15
+b 5
+b 2
+b 10
+b 3
+b 54
+b 55
+b 55
+b 1
+b 53
+b 50
+b 1
+b 12
+b 10
+b 20
+b 21
+b 24
+b 25
+b 247
+b 87
+b 88
+b 7
+b 8
+b 5
+b 2
+b 2
+b 2
+b 1
+b 78
+b 19
+b 20
+b 52
+b 6
+b 7
+b 7
+b 1
+b 28
+b 26
+b 1
+b 3
+b 3
+b 4
+b 6
+b 3
+b 2
+b 1
+b 45
+b 43
+b 2
+b 28
+b 29
+b 28
+b 1
+b 23
+b 50
+b 51
+b 55
+b 69
+b 72
+b 73
+b 75
+b 77
+b 67
+b 1
+b 5
+b 20
+b 3
+b 2
+b 24
+b 23
+b 1
+b 225
+b 226
+b 228
+b 225
+b 2
+b 0
+b 1
+b 17
+b 6
+b 17
+b 18
+b 17
+b 1
+b 105
+b 104
+b 1
+b 21
+b 4
+b 3
+b 2
+b 15
+b 0
+b 2
+b 3
+b 16
+b 22
+b 23
+b 28
+b 30
+b 31
+b 42
+b 43
+b 44
+b 26
+b 1
+b 8
+b 0
+b 2
+b 2
+b 1
+b 69
+b 60
+b 62
+b 63
+b 67
+b 57
+b 1
+b 2
+b 0
+b 2
+b 293
+b 294
+b 299
+b 362
+b 360
+b 1
+b 3
+b 4
+b 6
+b 8
+b 9
+b 6
+b 2
+b 178
+b 175
+b 1
+b 186
+b 187
+b 195
+b 301
+b 303
+b 304
+b 306
+b 307
+b 311
+b 312
+b 313
+b 186
+b 2
+b 301
+b 3
+b 190
+b 1
+b 11
+b 8
+b 6
+b 3
+b 136
+b 147
+b 148
+b 150
+b 152
+b 147
+b 2
+b 72
+b 72
+b 1
+b 48
+b 55
+b 56
+b 58
+b 59
+b 61
+b 62
+b 64
+b 58
+b 3
+b 35
+b 36
+b 39
+b 35
+b 3
+b 6
+b 3
+b 1
+b 35
+b 66
+b 68
+b 69
+b 74
+b 75
+b 64
+b 1
+b 67
+b 2
+b 70
+b 1
+b 16
+b 48
+b 324
+b 335
+b 336
+b 338
+b 19
+b 203
+b 201
+b 1
+b 88
+b 90
+b 91
+b 88
+b 2
+b 2
+b 4
+b 5
+b 16
+b 230
+b 242
+b 243
+b 240
+b 2
+b 229
+b 1
+b 23
+b 79
+b 84
+b 85
+b 87
+b 88
+b 99
+b 100
+b 106
+b 110
+b 87
+b 1
+b 81
+b 1
+b 6
+b 15
+b 42
+b 43
+b 50
+b 14
+b 1
+b 56
+b 63
+b 64
+b 66
+b 67
+b 69
+b 63
+b 3
+b 53
+b 1
+b 8
+b 9
+b 20
+b 9
+b 1
+b 11
+b 9
+b 3
+b 9
+b 9
+b 1
+b 3
+b 4
+b 14
+b 16
+b 4
+b 1
+b 59
+b 30
+b 32
+b 33
+b 35
+b 28
+b 1
+b 31
+b 2
+b 60
+b 44
+b 77
+b 79
+b 80
+b 42
+b 2
+b 2
+b 0
+b 1
+b 32
+b 39
+b 30
+b 3
+b 3
+b 4
+b 7
+b 8
+b 2
+b 1
+b 42
+b 39
+b 1
+b 24
+b 17
+b 22
+b 23
+b 25
+b 17
+b 1
+b 20
+b 1
+b 62
+b 76
+b 77
+b 83
+b 99
+b 74
+b 2
+b 97
+b 1
+b 61
+b 1
+b 131
+b 132
+b 140
+b 141
+b 146
+b 129
+b 2
+b 139
+b 1
+b 4
+b 5
+b 9
+b 10
+b 3
+b 1
+b 118
+b 119
+b 121
+b 118
+b 2
+b 10
+b 11
+b 8
+b 2
+b 12
+b 14
+b 15
+b 17
+b 23
+b 24
+b 31
+b 33
+b 34
+b 36
+b 21
+b 2
+b 31
+b 2
+b 26
+b 28
+b 30
+b 32
+b 33
+b 48
+b 28
+b 1
+b 2
+b 5
+b 6
+b 9
+b 10
+b 9
+b 1
+b 30
+b 31
+b 64
+b 28
+b 2
+b 62
+b 1
+b 126
+b 132
+b 168
+b 132
+b 1
+b 164
+b 1
+b 23
+b 25
+b 26
+b 0
+b 1
+b 28
+b 32
+b 33
+b 42
+b 43
+b 45
+b 42
+b 2
+b 4
+b 10
+b 2
+b 2
+b 70
+b 69
+b 2
+b 93
+b 95
+b 97
+b 98
+b 100
+b 102
+b 103
+b 102
+b 2
+b 17
+b 18
+b 31
+b 17
+b 2
+b 27
+b 1
+b 54
+b 52
+b 2
+b 63
+b 64
+b 66
+b 68
+b 70
+b 71
+b 75
+b 68
+b 2
+b 6
+b 65
+b 63
+b 2
+b 47
+b 49
+b 50
+b 47
+b 2
+b 116
+b 117
+b 120
+b 116
+b 3
+b 97
+b 98
+b 100
+b 104
+b 96
+b 1
+b 16
+b 16
+b 1
+b 40
+b 41
+b 43
+b 45
+b 46
+b 56
+b 40
+b 2
+b 10
+b 2
+b 3
+b 5
+b 2
+b 2
+b 5
+b 6
+b 10
+b 1
+b 0
+b 1
+b 1
+b 6
+b 7
+b 16
+b 17
+b 26
+b 73
+b 74
+b 84
+b 73
+b 1
+b 81
+b 2
+b 64
+b 68
+b 69
+b 63
+b 1
+b 14
+b 15
+b 0
+b 1
+b 3
+b 45
+b 46
+b 48
+b 68
+b 69
+b 71
+b 68
+b 2
+b 36
+b 37
+b 36
+b 2
+b 55
+b 54
+b 1
+b 0
+b 0
+b 1
+b 0
+b 4
+b 58
+b 56
+b 3
+b 44
+b 46
+b 47
+b 44
+b 4
+b 2
+b 3
+b 5
+b 10
+b 10
+b 1
+b 61
+b 67
+b 65
+b 2
+b 60
+b 1
+b 34
+b 35
+b 0
+b 2
+b 13
+b 80
+b 96
+b 97
+b 105
+b 96
+b 1
+b 102
+b 2
+b 45
+b 46
+b 127
+b 90
+b 91
+b 97
+b 98
+b 89
+b 1
+b 27
+b 25
+b 2
+b 4
+b 16
+b 18
+b 19
+b 27
+b 2
+b 1
+b 17
+b 2
+b 22
+b 1
+b 0
+b 2
+b 15
+b 25
+b 26
+b 23
+b 2
+b 14
+b 1
+b 0
+b 1
+b 0
+b 13
+b 15
+b 16
+b 34
+b 33
+b 2
+b 5
+b 6
+b 21
+b 18
+b 14
+b 16
+b 18
+b 20
+b 21
+b 16
+b 1
+b 0
+b 1
+b 3
+b 5
+b 6
+b 7
+b 41
+b 39
+b 1
+b 27
+b 29
+b 30
+b 35
+b 4
+b 5
+b 7
+b 4
+b 2
+b 6
+b 15
+b 16
+b 27
+b 28
+b 53
+b 15
+b 2
+b 23
+b 2
+b 48
+b 1
+b 13
+b 1
+b 121
+b 122
+b 122
+b 1
+b 42
+b 44
+b 45
+b 47
+b 44
+b 2
+b 3
+b 18
+b 19
+b 21
+b 24
+b 25
+b 16
+b 2
+b 3
+b 2
+b 1
+b 21
+b 23
+b 24
+b 26
+b 21
+b 2
+b 196
+b 197
+b 208
+b 195
+b 1
+b 69
+b 70
+b 69
+b 2
+b 4
+b 22
+b 21
+b 2
+b 4
+b 7
+b 8
+b 16
+b 34
+b 35
+b 32
+b 2
+b 1
+b 0
+b 1
+b 81
+b 80
+b 1
+b 6
+b 3
+b 1
+b 5
+b 6
+b 14
+b 15
+b 5
+b 2
+b 10
+b 2
+b 2
+b 19
+b 21
+b 22
+b 24
+b 25
+b 25
+b 1
+b 16
+b 24
+b 25
+b 27
+b 23
+b 1
+b 26
+b 1
+b 14
+b 16
+b 17
+b 78
+b 275
+b 326
+b 327
+b 333
+b 334
+b 332
+b 1
+b 21
+b 21
+b 1
+b 51
+b 35
+b 36
+b 46
+b 47
+b 46
+b 2
+b 2
+b 3
+b 1
+b 1
+b 2
+b 50
+b 51
+b 24
+b 25
+b 23
+b 1
+b 1
+b 82
+b 80
+b 2
+b 9
+b 310
+b 315
+b 309
+b 2
+b 15
+b 16
+b 18
+b 20
+b 21
+b 18
+b 2
+b 40
+b 190
+b 191
+b 190
+b 1
+b 77
+b 21
+b 23
+b 19
+b 1
+b 2
+b 0
+b 2
+b 3
+b 2
+b 2
+b 4
+b 19
+b 20
+b 19
+b 1
+b 24
+b 24
+b 1
+b 115
+b 113
+b 3
+b 3
+b 1
+b 1
+b 19
+b 29
+b 30
+b 32
+b 27
+b 2
+b 19
+b 1
+b 0
+b 2
+b 3
+b 0
+b 2
+b 0
+b 115
+b 117
+b 119
+b 120
+b 122
+b 119
+b 2
+b 2
+b 2
+b 1
+b 75
+b 87
+b 88
+b 90
+b 85
+b 2
+b 74
+b 1
+b 25
+b 26
+b 28
+b 22
+b 1
+b 4
+b 16
+b 28
+b 30
+b 32
+b 33
+b 38
+b 82
+b 30
+b 2
+b 79
+b 2
+b 20
+b 8
+b 0
+b 2
+b 3
+b 32
+b 34
+b 52
+b 76
+b 77
+b 88
+b 88
+b 1
+b 14
+b 15
+b 16
+b 12
+b 4
+b 15
+b 14
+b 1
+b 16
+b 18
+b 19
+b 23
+b 16
+b 2
+b 2
+b 4
+b 0
+b 1
+b 4
+b 2
+b 4
+b 5
+b 14
+b 15
+b 2
+b 2
+b 33
+b 30
+b 1
+b 5
+b 159
+b 160
+b 170
+b 172
+b 173
+b 201
+b 158
+b 1
+b 4
+b 1
+b 35
+b 37
+b 39
+b 40
+b 48
+b 33
+b 1
+b 62
+b 59
+b 1
+b 211
+b 212
+b 216
+b 217
+b 219
+b 211
+b 2
+b 4
+b 201
+b 124
+b 130
+b 131
+b 122
+b 2
+b 128
+b 2
+b 7
+b 5
+b 2
+b 0
+b 1
+b 6
+b 8
+b 208
+b 214
+b 215
+b 217
+b 218
+b 233
+b 234
+b 236
+b 214
+b 3
+b 230
+b 2
+b 13
+b 11
+b 3
+b 32
+b 32
+b 1
+b 85
+b 84
+b 2
+b 7
+b 8
+b 14
+b 6
+b 1
+b 77
+b 45
+b 46
+b 52
+b 53
+b 55
+b 45
+b 2
+b 48
+b 2
+b 51
+b 1
+b 10
+b 30
+b 31
+b 37
+b 30
+b 2
+b 33
+b 1
+b 20
+b 49
+b 50
+b 50
+b 1
+b 91
+b 93
+b 93
+b 1
+b 29
+b 26
+b 28
+b 29
+b 31
+b 32
+b 34
+b 35
+b 37
+b 43
+b 24
+b 1
+b 30
+b 3
+b 22
+b 29
+b 20
+b 2
+b 37
+b 3
+b 4
+b 13
+b 15
+b 3
+b 1
+b 10
+b 1
+b 51
+b 58
+b 60
+b 61
+b 63
+b 135
+b 58
+b 2
+b 61
+b 1
+b 64
+b 66
+b 67
+b 73
+b 74
+b 87
+b 88
+b 64
+b 2
+b 85
+b 2
+b 29
+b 16
+b 17
+b 19
+b 20
+b 24
+b 14
+b 2
+b 17
+b 1
+b 1
+b 5
+b 7
+b 7
+b 1
+b 87
+b 7
+b 8
+b 13
+b 107
+b 105
+b 2
+b 0
+b 95
+b 111
+b 112
+b 122
+b 123
+b 125
+b 120
+b 2
+b 112
+b 1
+b 47
+b 47
+b 1
+b 93
+b 96
+b 97
+b 96
+b 1
+b 14
+b 16
+b 17
+b 30
+b 24
+b 26
+b 27
+b 4
+b 8
+b 6
+b 1
+b 3
+b 1
+b 102
+b 111
+b 112
+b 114
+b 116
+b 117
+b 116
+b 1
+b 4
+b 5
+b 2
+b 2
+b 4
+b 2
+b 1
+b 48
+b 63
+b 64
+b 66
+b 67
+b 69
+b 81
+b 63
+b 5
+b 74
+b 1
+b 7
+b 8
+b 35
+b 44
+b 45
+b 55
+b 56
+b 42
+b 2
+b 53
+b 2
+b 6
+b 4
+b 1
+b 63
+b 73
+b 75
+b 76
+b 89
+b 90
+b 92
+b 97
+b 61
+b 3
+b 70
+b 4
+b 79
+b 1
+b 35
+b 52
+b 53
+b 55
+b 56
+b 50
+b 2
+b 53
+b 2
+b 34
+b 1
+b 3
+b 4
+b 2
+b 1
+b 11
+b 14
+b 59
+b 56
+b 1
+b 12
+b 13
+b 10
+b 2
+b 6
+b 0
+b 2
+b 2
+b 1
+b 13
+b 44
+b 11
+b 1
+b 18
+b 15
+b 1
+b 12
+b 22
+b 20
+b 1
+b 12
+b 1
+b 30
+b 31
+b 38
+b 36
+b 57
+b 63
+b 64
+b 69
+b 56
+b 1
+b 121
+b 120
+b 1
+b 21
+b 27
+b 28
+b 33
+b 34
+b 36
+b 21
+b 1
+b 24
+b 2
+b 4
+b 2
+b 4
+b 6
+b 7
+b 24
+b 6
+b 1
+b 20
+b 1
+b 13
+b 15
+b 15
+b 1
+b 12
+b 13
+b 15
+b 17
+b 18
+b 11
+b 1
+b 9
+b 20
+b 5
+b 3
+b 1
+b 14
+b 15
+b 17
+b 19
+b 21
+b 14
+b 2
+b 68
+b 84
+b 89
+b 90
+b 92
+b 94
+b 95
+b 66
+b 1
+b 93
+b 1
+b 595
+b 596
+b 10
+b 11
+b 8
+b 2
+b 14
+b 13
+b 1
+b 0
+b 1
+b 19
+b 147
+b 148
+b 154
+b 170
+b 171
+b 184
+b 147
+b 1
+b 151
+b 1
+b 107
+b 116
+b 105
+b 1
+b 41
+b 42
+b 44
+b 39
+b 2
+b 42
+b 1
+b 5
+b 6
+b 11
+b 4
+b 2
+b 7
+b 3
+b 5
+b 12
+b 13
+b 19
+b 1
+b 92
+b 96
+b 109
+b 111
+b 2
+b 3
+b 7
+b 8
+b 2
+b 3
+b 2
+b 19
+b 20
+b 24
+b 25
+b 30
+b 31
+b 33
+b 44
+b 2
+b 1
+b 16
+b 2
+b 21
+b 2
+b 24
+b 1
+b 12
+b 13
+b 15
+b 8
+b 6
+b 7
+b 21
+b 21
+b 1
+b 3
+b 1
+b 73
+b 84
+b 86
+b 87
+b 84
+b 2
+b 3
+b 5
+b 48
+b 46
+b 2
+b 182
+b 187
+b 180
+b 1
+b 60
+b 61
+b 71
+b 72
+b 60
+b 2
+b 67
+b 2
+b 4
+b 6
+b 7
+b 19
+b 6
+b 1
+b 159
+b 160
+b 181
+b 183
+b 185
+b 186
+b 190
+b 159
+b 1
+b 178
+b 1
+b 8
+b 16
+b 16
+b 1
+b 6
+b 7
+b 9
+b 11
+b 12
+b 9
+b 2
+b 101
+b 121
+b 87
+b 93
+b 91
+b 2
+b 0
+b 2
+b 4
+b 5
+b 6
+b 0
+b 1
+b 98
+b 100
+b 101
+b 98
+b 2
+b 139
+b 4
+b 2
+b 2
+b 1
+b 2
+b 44
+b 55
+b 54
+b 1
+b 58
+b 60
+b 61
+b 67
+b 58
+b 2
+b 20
+b 44
+b 45
+b 47
+b 48
+b 55
+b 54
+b 1
+b 27
+b 40
+b 34
+b 33
+b 2
+b 4
+b 5
+b 11
+b 75
+b 77
+b 78
+b 2
+b 2
+b 73
+b 2
+b 16
+b 14
+b 1
+b 81
+b 83
+b 84
+b 86
+b 88
+b 89
+b 91
+b 86
+b 2
+b 39
+b 6
+b 9
+b 1
+b 2
+b 9
+b 11
+b 13
+b 14
+b 7
+b 1
+b 0
+b 1
+b 89
+b 1
+b 1
+b 31
+b 41
+b 42
+b 44
+b 54
+b 55
+b 91
+b 29
+b 2
+b 39
+b 2
+b 0
+b 112
+b 146
+b 147
+b 163
+b 164
+b 182
+b 183
+b 185
+b 196
+b 182
+b 2
+b 192
+b 2
+b 57
+b 12
+b 20
+b 18
+b 1
+b 0
+b 2
+b 3
+b 5
+b 6
+b 16
+b 21
+b 24
+b 0
+b 5
+b 15
+b 5
+b 287
+b 298
+b 3
+b 7
+b 8
+b 10
+b 12
+b 13
+b 15
+b 16
+b 17
+b 5
+b 2
+b 10
+b 5
+b 2
+b 1
+b 22
+b 19
+b 1
+b 17
+b 18
+b 33
+b 42
+b 16
+b 1
+b 3
+b 3
+b 1
+b 25
+b 27
+b 28
+b 40
+b 42
+b 40
+b 1
+b 65
+b 83
+b 81
+b 2
+b 64
+b 1
+b 33
+b 37
+b 38
+b 0
+b 1
+b 3
+b 4
+b 5
+b 0
+b 5
+b 40
+b 38
+b 1
+b 16
+b 40
+b 41
+b 50
+b 51
+b 53
+b 53
+b 1
+b 0
+b 2
+b 3
+b 0
+b 2
+b 94
+b 95
+b 97
+b 99
+b 100
+b 160
+b 2
+b 10
+b 9
+b 2
+b 41
+b 39
+b 2
+b 144
+b 145
+b 151
+b 152
+b 154
+b 144
+b 2
+b 65
+b 66
+b 65
+b 2
+b 37
+b 38
+b 36
+b 1
+b 37
+b 6
+b 2
+b 5
+b 6
+b 4
+b 1
+b 11
+b 12
+b 11
+b 1
+b 2
+b 1
+b 7
+b 8
+b 0
+b 1
+b 137
+b 24
+b 26
+b 27
+b 34
+b 21
+b 20
+b 1
+b 194
+b 195
+b 207
+b 35
+b 42
+b 34
+b 2
+b 39
+b 1
+b 25
+b 26
+b 23
+b 4
+b 37
+b 35
+b 1
+b 7
+b 9
+b 11
+b 11
+b 1
+b 143
+b 144
+b 146
+b 153
+b 154
+b 161
+b 162
+b 164
+b 143
+b 2
+b 140
+b 1
+b 38
+b 53
+b 6
+b 20
+b 21
+b 30
+b 32
+b 4
+b 3
+b 17
+b 1
+b 41
+b 38
+b 1
+b 27
+b 67
+b 4
+b 5
+b 21
+b 28
+b 4
+b 2
+b 17
+b 2
+b 2
+b 3
+b 3
+b 4
+b 5
+b 2
+b 3
+b 4
+b 5
+b 10
+b 11
+b 19
+b 26
+b 27
+b 2
+b 4
+b 5
+b 1
+b 18
+b 1
+b 0
+b 1
+b 126
+b 134
+b 135
+b 137
+b 170
+b 171
+b 178
+b 170
+b 1
+b 175
+b 1
+b 348
+b 349
+b 359
+b 361
+b 362
+b 364
+b 359
+b 2
+b 362
+b 1
+b 4
+b 2
+b 3
+b 7
+b 12
+b 18
+b 19
+b 6
+b 9
+b 13
+b 14
+b 16
+b 17
+b 5
+b 4
+b 9
+b 3
+b 53
+b 4
+b 82
+b 83
+b 85
+b 86
+b 88
+b 90
+b 91
+b 82
+b 3
+b 87
+b 1
+b 1
+b 10
+b 0
+b 2
+b 7
+b 1
+b 0
+b 2
+b 30
+b 32
+b 32
+b 1
+b 37
+b 38
+b 3
+b 39
+b 38
+b 2
+b 142
+b 153
+b 155
+b 156
+b 41
+b 45
+b 46
+b 1
+b 9
+b 7
+b 5
+b 0
+b 1
+b 10
+b 12
+b 14
+b 8
+b 1
+b 13
+b 1
+b 98
+b 154
+b 155
+b 157
+b 158
+b 163
+b 154
+b 3
+b 1
+b 29
+b 27
+b 2
+b 370
+b 371
+b 385
+b 387
+b 388
+b 399
+b 438
+b 387
+b 2
+b 395
+b 1
+b 133
+b 28
+b 42
+b 43
+b 41
+b 1
+b 43
+b 45
+b 41
+b 1
+b 18
+b 19
+b 8
+b 11
+b 12
+b 6
+b 1
+b 10
+b 10
+b 1
+b 13
+b 49
+b 50
+b 56
+b 47
+b 2
+b 3
+b 5
+b 0
+b 1
+b 0
+b 2
+b 3
+b 5
+b 7
+b 2
+b 2
+b 25
+b 25
+b 27
+b 29
+b 30
+b 32
+b 51
+b 29
+b 2
+b 47
+b 1
+b 19
+b 20
+b 22
+b 15
+b 17
+b 11
+b 25
+b 26
+b 33
+b 11
+b 1
+b 33
+b 30
+b 1
+b 27
+b 2
+b 4
+b 5
+b 7
+b 8
+b 4
+b 3
+b 3
+b 4
+b 64
+b 69
+b 75
+b 77
+b 77
+b 1
+b 42
+b 43
+b 42
+b 2
+b 0
+b 2
+b 4
+b 0
+b 1
+b 105
+b 111
+b 123
+b 124
+b 130
+b 7
+b 14
+b 15
+b 6
+b 2
+b 11
+b 1
+b 189
+b 197
+b 198
+b 17
+b 18
+b 36
+b 17
+b 1
+b 33
+b 1
+b 26
+b 2
+b 3
+b 20
+b 21
+b 23
+b 24
+b 26
+b 27
+b 50
+b 18
+b 2
+b 21
+b 3
+b 83
+b 85
+b 85
+b 1
+b 57
+b 67
+b 68
+b 77
+b 78
+b 80
+b 76
+b 1
+b 6
+b 32
+b 5
+b 1
+b 142
+b 143
+b 171
+b 172
+b 177
+b 142
+b 2
+b 167
+b 2
+b 139
+b 1
+b 171
+b 1
+b 99
+b 35
+b 77
+b 74
+b 1
+b 19
+b 20
+b 17
+b 2
+b 3
+b 4
+b 6
+b 8
+b 17
+b 18
+b 17
+b 2
+b 14
+b 1
+b 13
+b 14
+b 16
+b 23
+b 24
+b 26
+b 27
+b 31
+b 34
+b 11
+b 2
+b 14
+b 1
+b 64
+b 91
+b 92
+b 97
+b 112
+b 90
+b 1
+b 108
+b 1
+b 542
+b 676
+b 678
+b 679
+b 5
+b 155
+b 166
+b 167
+b 167
+b 1
+b 110
+b 111
+b 110
+b 2
+b 93
+b 0
+b 1
+b 132
+b 4
+b 5
+b 7
+b 9
+b 7
+b 1
+b 51
+b 67
+b 69
+b 36
+b 40
+b 34
+b 2
+b 0
+b 1
+b 7
+b 6
+b 2
+b 25
+b 27
+b 28
+b 27
+b 1
+b 32
+b 34
+b 34
+b 1
+b 102
+b 104
+b 105
+b 113
+b 104
+b 2
+b 109
+b 1
+b 71
+b 72
+b 74
+b 109
+b 171
+b 178
+b 179
+b 181
+b 71
+b 2
+b 105
+b 3
+b 173
+b 2
+b 69
+b 17
+b 22
+b 23
+b 35
+b 15
+b 1
+b 21
+b 2
+b 30
+b 1
+b 24
+b 35
+b 37
+b 38
+b 43
+b 44
+b 37
+b 2
+b 40
+b 1
+b 32
+b 1
+b 1
+b 2
+b 3
+b 0
+b 3
+b 36
+b 34
+b 3
+b 77
+b 78
+b 77
+b 1
+b 74
+b 1
+b 22
+b 32
+b 33
+b 35
+b 36
+b 31
+b 37
+b 140
+b 141
+b 178
+b 36
+b 2
+b 136
+b 2
+b 13
+b 12
+b 2
+b 127
+b 26
+b 52
+b 64
+b 65
+b 78
+b 77
+b 1
+b 184
+b 205
+b 206
+b 208
+b 209
+b 215
+b 205
+b 3
+b 21
+b 22
+b 0
+b 0
+b 1
+b 2
+b 0
+b 2
+b 28
+b 48
+b 50
+b 51
+b 55
+b 48
+b 2
+b 53
+b 1
+b 23
+b 27
+b 44
+b 45
+b 47
+b 23
+b 1
+b 43
+b 4
+b 1
+b 2
+b 5
+b 0
+b 1
+b 77
+b 78
+b 106
+b 108
+b 109
+b 133
+b 134
+b 160
+b 75
+b 2
+b 106
+b 2
+b 127
+b 2
+b 153
+b 1
+b 41
+b 40
+b 1
+b 120
+b 129
+b 28
+b 29
+b 50
+b 48
+b 2
+b 5
+b 6
+b 4
+b 1
+b 3
+b 4
+b 2
+b 1
+b 139
+b 141
+b 143
+b 144
+b 70
+b 75
+b 85
+b 86
+b 93
+b 85
+b 1
+b 90
+b 3
+b 82
+b 1
+b 70
+b 77
+b 16
+b 56
+b 57
+b 59
+b 60
+b 62
+b 55
+b 1
+b 61
+b 1
+b 37
+b 86
+b 7
+b 5
+b 3
+b 10
+b 12
+b 13
+b 10
+b 2
+b 0
+b 1
+b 3
+b 9
+b 10
+b 11
+b 0
+b 2
+b 166
+b 168
+b 170
+b 172
+b 173
+b 184
+b 185
+b 191
+b 170
+b 2
+b 182
+b 2
+b 185
+b 1
+b 8
+b 10
+b 12
+b 0
+b 1
+b 10
+b 11
+b 0
+b 1
+b 12
+b 80
+b 82
+b 83
+b 78
+b 1
+b 81
+b 1
+b 80
+b 82
+b 83
+b 3
+b 4
+b 273
+b 32
+b 50
+b 30
+b 2
+b 6
+b 7
+b 13
+b 4
+b 2
+b 7
+b 8
+b 10
+b 11
+b 17
+b 5
+b 2
+b 31
+b 35
+b 29
+b 1
+b 9
+b 10
+b 2
+b 1
+b 2
+b 2
+b 4
+b 43
+b 44
+b 53
+b 55
+b 2
+b 1
+b 43
+b 42
+b 1
+b 19
+b 20
+b 22
+b 41
+b 42
+b 52
+b 54
+b 41
+b 1
+b 116
+b 117
+b 130
+b 129
+b 1
+b 60
+b 2
+b 435
+b 441
+b 442
+b 43
+b 26
+b 27
+b 29
+b 33
+b 34
+b 31
+b 3
+b 0
+b 1
+b 28
+b 32
+b 33
+b 24
+b 26
+b 27
+b 36
+b 26
+b 1
+b 1
+b 7
+b 12
+b 13
+b 15
+b 46
+b 48
+b 5
+b 2
+b 13
+b 1
+b 8
+b 9
+b 11
+b 12
+b 14
+b 22
+b 6
+b 2
+b 12
+b 9
+b 1
+b 1
+b 4
+b 3
+b 1
+b 10
+b 19
+b 26
+b 8
+b 3
+b 14
+b 1
+b 9
+b 8
+b 1
+b 1
+b 6
+b 8
+b 4
+b 186
+b 187
+b 212
+b 185
+b 1
+b 97
+b 95
+b 1
+b 208
+b 209
+b 215
+b 208
+b 1
+b 212
+b 1
+b 19
+b 20
+b 22
+b 54
+b 70
+b 71
+b 121
+b 120
+b 1
+b 20
+b 34
+b 4
+b 6
+b 7
+b 4
+b 2
+b 3
+b 5
+b 10
+b 11
+b 13
+b 13
+b 1
+b 52
+b 49
+b 1
+b 37
+b 38
+b 40
+b 42
+b 37
+b 2
+b 24
+b 25
+b 37
+b 38
+b 24
+b 2
+b 33
+b 2
+b 2
+b 4
+b 8
+b 0
+b 15
+b 17
+b 18
+b 24
+b 25
+b 27
+b 28
+b 17
+b 2
+b 20
+b 2
+b 12
+b 1
+b 7
+b 8
+b 1
+b 37
+b 4
+b 5
+b 7
+b 9
+b 10
+b 7
+b 2
+b 4
+b 7
+b 5
+b 2
+b 18
+b 17
+b 1
+b 46
+b 49
+b 50
+b 2
+b 3
+b 2
+b 582
+b 583
+b 587
+b 580
+b 2
+b 14
+b 11
+b 1
+b 11
+b 12
+b 1
+b 10
+b 28
+b 29
+b 41
+b 42
+b 47
+b 8
+b 3
+b 25
+b 1
+b 18
+b 17
+b 2
+b 88
+b 105
+b 106
+b 108
+b 108
+b 1
+b 1
+b 2
+b 17
+b 0
+b 1
+b 3
+b 2
+b 2
+b 5
+b 6
+b 13
+b 4
+b 1
+b 12
+b 35
+b 72
+b 73
+b 17
+b 15
+b 2
+b 30
+b 31
+b 37
+b 10
+b 25
+b 83
+b 11
+b 13
+b 14
+b 92
+b 14
+b 16
+b 24
+b 29
+b 30
+b 53
+b 23
+b 2
+b 26
+b 1
+b 2
+b 3
+b 3
+b 2
+b 1
+b 5
+b 6
+b 3
+b 2
+b 2
+b 3
+b 11
+b 19
+b 18
+b 2
+b 131
+b 30
+b 32
+b 34
+b 36
+b 37
+b 39
+b 40
+b 28
+b 1
+b 35
+b 3
+b 6
+b 5
+b 1
+b 2
+b 3
+b 0
+b 3
+b 1
+b 17
+b 72
+b 74
+b 75
+b 77
+b 79
+b 77
+b 1
+b 7
+b 269
+b 37
+b 38
+b 43
+b 38
+b 1
+b 17
+b 24
+b 22
+b 3
+b 14
+b 15
+b 20
+b 21
+b 24
+b 25
+b 14
+b 2
+b 17
+b 1
+b 28
+b 30
+b 31
+b 30
+b 2
+b 1
+b 1
+b 1
+b 142
+b 143
+b 150
+b 152
+b 154
+b 150
+b 1
+b 20
+b 27
+b 28
+b 321
+b 327
+b 328
+b 330
+b 332
+b 325
+b 2
+b 169
+b 167
+b 1
+b 7
+b 11
+b 22
+b 23
+b 33
+b 51
+b 32
+b 1
+b 67
+b 64
+b 1
+b 8
+b 9
+b 17
+b 18
+b 8
+b 2
+b 13
+b 2
+b 28
+b 27
+b 1
+b 456
+b 457
+b 465
+b 464
+b 1
+b 8
+b 9
+b 8
+b 2
+b 0
+b 2
+b 3
+b 5
+b 0
+b 2
+b 57
+b 58
+b 42
+b 44
+b 45
+b 54
+b 42
+b 2
+b 52
+b 1
+b 0
+b 2
+b 171
+b 169
+b 2
+b 20
+b 21
+b 28
+b 19
+b 1
+b 25
+b 16
+b 9
+b 38
+b 36
+b 1
+b 19
+b 20
+b 24
+b 25
+b 22
+b 2
+b 50
+b 81
+b 82
+b 6
+b 7
+b 9
+b 4
+b 4
+b 12
+b 10
+b 3
+b 29
+b 4
+b 5
+b 12
+b 4
+b 2
+b 8
+b 2
+b 4
+b 4
+b 62
+b 63
+b 71
+b 72
+b 74
+b 70
+b 1
+b 73
+b 1
+b 40
+b 108
+b 109
+b 111
+b 113
+b 4
+b 179
+b 186
+b 187
+b 189
+b 185
+b 1
+b 25
+b 31
+b 23
+b 1
+b 53
+b 25
+b 23
+b 2
+b 2
+b 3
+b 7
+b 5
+b 2
+b 1
+b 2
+b 3
+b 3
+b 4
+b 15
+b 3
+b 1
+b 12
+b 1
+b 13
+b 0
+b 2
+b 4
+b 163
+b 162
+b 2
+b 3
+b 10
+b 11
+b 36
+b 37
+b 44
+b 45
+b 53
+b 10
+b 2
+b 32
+b 2
+b 8
+b 7
+b 7
+b 12
+b 13
+b 6
+b 2
+b 10
+b 1
+b 2
+b 7
+b 9
+b 10
+b 0
+b 1
+b 7
+b 6
+b 1
+b 50
+b 48
+b 2
+b 2
+b 3
+b 8
+b 3
+b 1
+b 12
+b 16
+b 17
+b 32
+b 36
+b 10
+b 1
+b 15
+b 1
+b 364
+b 365
+b 367
+b 368
+b 402
+b 363
+b 1
+b 366
+b 2
+b 397
+b 1
+b 5
+b 22
+b 5
+b 7
+b 8
+b 10
+b 12
+b 5
+b 2
+b 4
+b 6
+b 2
+b 1
+b 118
+b 124
+b 125
+b 4
+b 5
+b 27
+b 29
+b 30
+b 32
+b 33
+b 44
+b 5
+b 1
+b 27
+b 31
+b 47
+b 52
+b 53
+b 62
+b 63
+b 70
+b 71
+b 73
+b 74
+b 45
+b 1
+b 51
+b 2
+b 58
+b 1
+b 66
+b 3
+b 73
+b 0
+b 0
+b 3
+b 9
+b 14
+b 15
+b 20
+b 22
+b 23
+b 42
+b 70
+b 20
+b 2
+b 67
+b 2
+b 142
+b 143
+b 145
+b 146
+b 148
+b 149
+b 159
+b 173
+b 145
+b 3
+b 155
+b 1
+b 42
+b 18
+b 19
+b 28
+b 34
+b 35
+b 43
+b 27
+b 1
+b 411
+b 412
+b 424
+b 425
+b 409
+b 2
+b 423
+b 1
+b 6
+b 8
+b 9
+b 2
+b 66
+b 76
+b 79
+b 80
+b 75
+b 4
+b 65
+b 1
+b 0
+b 2
+b 6
+b 7
+b 9
+b 10
+b 63
+b 6
+b 3
+b 151
+b 41
+b 49
+b 50
+b 52
+b 54
+b 55
+b 39
+b 2
+b 47
+b 2
+b 1
+b 259
+b 260
+b 274
+b 275
+b 48
+b 49
+b 47
+b 3
+b 39
+b 41
+b 42
+b 61
+b 63
+b 39
+b 2
+b 148
+b 149
+b 148
+b 1
+b 25
+b 26
+b 25
+b 1
+b 2
+b 23
+b 30
+b 56
+b 58
+b 59
+b 61
+b 61
+b 1
+b 2
+b 14
+b 21
+b 22
+b 24
+b 21
+b 2
+b 2
+b 3
+b 145
+b 143
+b 1
+b 72
+b 2
+b 4
+b 5
+b 23
+b 15
+b 14
+b 2
+b 6
+b 2
+b 3
+b 5
+b 7
+b 8
+b 13
+b 5
+b 2
+b 17
+b 19
+b 21
+b 15
+b 1
+b 0
+b 1
+b 1
+b 0
+b 1
+b 27
+b 144
+b 145
+b 157
+b 159
+b 157
+b 1
+b 41
+b 8
+b 10
+b 15
+b 17
+b 18
+b 8
+b 1
+b 25
+b 26
+b 28
+b 29
+b 17
+b 3
+b 6
+b 8
+b 9
+b 6
+b 2
+b 13
+b 12
+b 1
+b 7
+b 15
+b 21
+b 22
+b 28
+b 29
+b 32
+b 33
+b 21
+b 1
+b 0
+b 1
+b 3
+b 1
+b 1
+b 4
+b 18
+b 19
+b 19
+b 1
+b 174
+b 178
+b 172
+b 1
+b 0
+b 2
+b 3
+b 2
+b 3
+b 0
+b 1
+b 3
+b 324
+b 338
+b 110
+b 27
+b 29
+b 30
+b 32
+b 35
+b 27
+b 2
+b 30
+b 3
+b 159
+b 158
+b 2
+b 30
+b 31
+b 33
+b 34
+b 33
+b 1
+b 6
+b 18
+b 31
+b 3
+b 5
+b 6
+b 31
+b 14
+b 15
+b 17
+b 90
+b 102
+b 105
+b 106
+b 89
+b 2
+b 97
+b 1
+b 18
+b 40
+b 39
+b 1
+b 18
+b 32
+b 17
+b 2
+b 28
+b 3
+b 0
+b 2
+b 3
+b 5
+b 16
+b 17
+b 0
+b 2
+b 8
+b 10
+b 11
+b 48
+b 49
+b 51
+b 53
+b 104
+b 8
+b 2
+b 46
+b 2
+b 98
+b 3
+b 9
+b 10
+b 14
+b 15
+b 17
+b 9
+b 2
+b 3
+b 1
+b 1
+b 15
+b 126
+b 127
+b 134
+b 136
+b 137
+b 147
+b 127
+b 1
+b 39
+b 37
+b 2
+b 605
+b 606
+b 603
+b 2
+b 604
+b 1
+b 15
+b 36
+b 37
+b 41
+b 10
+b 9
+b 1
+b 59
+b 73
+b 91
+b 93
+b 94
+b 117
+b 71
+b 2
+b 58
+b 1
+b 86
+b 77
+b 78
+b 6
+b 7
+b 5
+b 1
+b 5
+b 5
+b 1
+b 14
+b 15
+b 52
+b 52
+b 1
+b 11
+b 1
+b 4
+b 12
+b 13
+b 26
+b 18
+b 19
+b 17
+b 1
+b 16
+b 20
+b 14
+b 3
+b 15
+b 1
+b 32
+b 158
+b 159
+b 188
+b 158
+b 2
+b 32
+b 1
+b 49
+b 57
+b 51
+b 52
+b 54
+b 51
+b 2
+b 59
+b 64
+b 65
+b 57
+b 2
+b 62
+b 2
+b 53
+b 50
+b 1
+b 4
+b 25
+b 26
+b 28
+b 30
+b 25
+b 2
+b 51
+b 52
+b 54
+b 50
+b 1
+b 53
+b 1
+b 11
+b 13
+b 39
+b 38
+b 1
+b 3
+b 4
+b 7
+b 1
+b 32
+b 86
+b 88
+b 89
+b 84
+b 1
+b 87
+b 2
+b 33
+b 35
+b 37
+b 37
+b 1
+b 16
+b 14
+b 3
+b 5
+b 6
+b 11
+b 4
+b 2
+b 38
+b 40
+b 41
+b 43
+b 44
+b 46
+b 48
+b 50
+b 43
+b 2
+b 35
+b 1
+b 33
+b 46
+b 86
+b 87
+b 89
+b 15
+b 1
+b 3
+b 5
+b 6
+b 8
+b 5
+b 2
+b 3
+b 4
+b 8
+b 9
+b 11
+b 1
+b 2
+b 6
+b 2
+b 38
+b 57
+b 36
+b 2
+b 6
+b 7
+b 14
+b 15
+b 34
+b 35
+b 41
+b 42
+b 32
+b 2
+b 39
+b 2
+b 15
+b 1
+b 1
+b 222
+b 226
+b 228
+b 229
+b 233
+b 237
+b 238
+b 240
+b 235
+b 2
+b 238
+b 1
+b 232
+b 1
+b 140
+b 229
+b 227
+b 1
+b 28
+b 29
+b 26
+b 2
+b 71
+b 72
+b 68
+b 1
+b 59
+b 61
+b 28
+b 28
+b 1
+b 0
+b 2
+b 3
+b 0
+b 2
+b 36
+b 37
+b 42
+b 37
+b 1
+b 5
+b 1
+b 15
+b 17
+b 18
+b 17
+b 2
+b 1
+b 2
+b 4
+b 8
+b 1
+b 2
+b 2
+b 4
+b 6
+b 7
+b 13
+b 6
+b 2
+b 9
+b 2
+b 6
+b 4
+b 1
+b 3
+b 31
+b 33
+b 34
+b 37
+b 31
+b 2
+b 34
+b 1
+b 23
+b 25
+b 26
+b 64
+b 68
+b 70
+b 71
+b 73
+b 74
+b 76
+b 77
+b 66
+b 1
+b 72
+b 3
+b 63
+b 1
+b 2
+b 1
+b 4
+b 7
+b 6
+b 7
+b 10
+b 5
+b 1
+b 9
+b 11
+b 12
+b 39
+b 79
+b 81
+b 82
+b 89
+b 79
+b 2
+b 20
+b 21
+b 23
+b 25
+b 20
+b 2
+b 26
+b 35
+b 36
+b 15
+b 16
+b 35
+b 33
+b 2
+b 60
+b 61
+b 12
+b 27
+b 28
+b 4
+b 5
+b 7
+b 4
+b 2
+b 0
+b 2
+b 0
+b 1
+b 5
+b 7
+b 8
+b 30
+b 31
+b 39
+b 3
+b 1
+b 6
+b 1
+b 3
+b 1
+b 5
+b 11
+b 9
+b 1
+b 11
+b 12
+b 15
+b 16
+b 19
+b 11
+b 4
+b 0
+b 1
+b 3
+b 25
+b 22
+b 1
+b 71
+b 73
+b 74
+b 77
+b 73
+b 3
+b 89
+b 88
+b 1
+b 40
+b 41
+b 61
+b 63
+b 64
+b 74
+b 75
+b 86
+b 38
+b 2
+b 72
+b 2
+b 80
+b 2
+b 2
+b 0
+b 1
+b 79
+b 21
+b 27
+b 29
+b 31
+b 32
+b 34
+b 19
+b 2
+b 29
+b 3
+b 1
+b 2
+b 10
+b 0
+b 3
+b 4
+b 11
+b 15
+b 16
+b 18
+b 15
+b 2
+b 9
+b 7
+b 1
+b 6
+b 0
+b 1
+b 3
+b 60
+b 68
+b 69
+b 71
+b 39
+b 38
+b 1
+b 41
+b 2
+b 3
+b 5
+b 7
+b 8
+b 10
+b 7
+b 2
+b 15
+b 15
+b 1
+b 33
+b 33
+b 3
+b 21
+b 22
+b 24
+b 26
+b 27
+b 29
+b 19
+b 2
+b 33
+b 31
+b 1
+b 88
+b 127
+b 128
+b 141
+b 142
+b 150
+b 151
+b 125
+b 2
+b 139
+b 2
+b 144
+b 2
+b 88
+b 1
+b 1
+b 9
+b 8
+b 1
+b 35
+b 39
+b 13
+b 11
+b 3
+b 11
+b 13
+b 14
+b 8
+b 1
+b 0
+b 1
+b 0
+b 2
+b 3
+b 4
+b 2
+b 1
+b 0
+b 2
+b 23
+b 35
+b 36
+b 38
+b 79
+b 33
+b 2
+b 77
+b 1
+b 108
+b 119
+b 120
+b 130
+b 131
+b 133
+b 118
+b 3
+b 125
+b 2
+b 15
+b 13
+b 1
+b 138
+b 137
+b 2
+b 7
+b 8
+b 25
+b 4
+b 1
+b 0
+b 1
+b 29
+b 51
+b 53
+b 55
+b 56
+b 58
+b 53
+b 2
+b 56
+b 1
+b 4
+b 48
+b 50
+b 52
+b 53
+b 52
+b 1
+b 15
+b 18
+b 23
+b 22
+b 2
+b 35
+b 53
+b 57
+b 58
+b 70
+b 8
+b 10
+b 5
+b 1
+b 22
+b 23
+b 29
+b 30
+b 33
+b 40
+b 22
+b 2
+b 25
+b 2
+b 34
+b 3
+b 28
+b 1
+b 45
+b 52
+b 53
+b 18
+b 17
+b 2
+b 1
+b 3
+b 26
+b 33
+b 38
+b 26
+b 1
+b 0
+b 7
+b 11
+b 12
+b 14
+b 21
+b 23
+b 24
+b 28
+b 21
+b 2
+b 25
+b 1
+b 71
+b 73
+b 49
+b 51
+b 54
+b 51
+b 3
+b 34
+b 36
+b 37
+b 39
+b 36
+b 2
+b 77
+b 77
+b 1
+b 5
+b 27
+b 52
+b 53
+b 56
+b 57
+b 56
+b 1
+b 3
+b 7
+b 8
+b 21
+b 5
+b 2
+b 121
+b 122
+b 121
+b 2
+b 98
+b 98
+b 1
+b 161
+b 170
+b 171
+b 0
+b 0
+b 1
+b 5
+b 94
+b 126
+b 127
+b 129
+b 92
+b 3
+b 123
+b 2
+b 120
+b 1
+b 26
+b 28
+b 29
+b 53
+b 54
+b 38
+b 44
+b 36
+b 1
+b 22
+b 23
+b 25
+b 26
+b 47
+b 48
+b 21
+b 1
+b 7
+b 14
+b 15
+b 5
+b 3
+b 10
+b 1
+b 104
+b 106
+b 107
+b 109
+b 115
+b 116
+b 106
+b 2
+b 42
+b 44
+b 45
+b 47
+b 51
+b 52
+b 54
+b 51
+b 2
+b 6
+b 4
+b 2
+b 133
+b 134
+b 147
+b 10
+b 0
+b 1
+b 16
+b 73
+b 13
+b 14
+b 18
+b 17
+b 1
+b 1
+b 3
+b 5
+b 6
+b 1
+b 270
+b 272
+b 319
+b 320
+b 324
+b 325
+b 336
+b 318
+b 1
+b 323
+b 2
+b 331
+b 1
+b 36
+b 35
+b 1
+b 13
+b 0
+b 1
+b 10
+b 11
+b 13
+b 0
+b 1
+b 204
+b 210
+b 211
+b 2
+b 10
+b 56
+b 55
+b 1
+b 9
+b 10
+b 4
+b 6
+b 35
+b 37
+b 39
+b 41
+b 42
+b 7
+b 9
+b 11
+b 9
+b 1
+b 28
+b 30
+b 32
+b 25
+b 1
+b 1
+b 2
+b 1
+b 1
+b 68
+b 79
+b 80
+b 28
+b 32
+b 30
+b 1
+b 27
+b 1
+b 151
+b 152
+b 154
+b 155
+b 169
+b 149
+b 5
+b 164
+b 1
+b 32
+b 31
+b 1
+b 21
+b 19
+b 2
+b 32
+b 33
+b 32
+b 2
+b 1
+b 52
+b 0
+b 1
+b 12
+b 22
+b 23
+b 3
+b 4
+b 8
+b 9
+b 7
+b 1
+b 11
+b 54
+b 55
+b 176
+b 177
+b 191
+b 192
+b 204
+b 9
+b 1
+b 53
+b 2
+b 171
+b 2
+b 77
+b 78
+b 75
+b 74
+b 2
+b 158
+b 159
+b 156
+b 2
+b 119
+b 117
+b 1
+b 44
+b 54
+b 55
+b 57
+b 42
+b 1
+b 53
+b 2
+b 68
+b 69
+b 76
+b 50
+b 51
+b 56
+b 58
+b 59
+b 123
+b 124
+b 133
+b 50
+b 2
+b 54
+b 2
+b 117
+b 2
+b 7
+b 34
+b 36
+b 42
+b 43
+b 36
+b 1
+b 6
+b 154
+b 155
+b 157
+b 162
+b 164
+b 189
+b 154
+b 2
+b 158
+b 1
+b 10
+b 12
+b 14
+b 15
+b 31
+b 33
+b 34
+b 33
+b 1
+b 0
+b 1
+b 0
+b 2
+b 60
+b 59
+b 1
+b 15
+b 19
+b 21
+b 23
+b 24
+b 19
+b 1
+b 155
+b 156
+b 158
+b 160
+b 162
+b 163
+b 166
+b 201
+b 160
+b 2
+b 198
+b 2
+b 2
+b 50
+b 52
+b 54
+b 55
+b 57
+b 6
+b 93
+b 99
+b 110
+b 111
+b 110
+b 2
+b 90
+b 1
+b 0
+b 1
+b 7
+b 8
+b 0
+b 1
+b 61
+b 5
+b 7
+b 9
+b 10
+b 6
+b 7
+b 9
+b 10
+b 18
+b 9
+b 2
+b 13
+b 1
+b 3
+b 1
+b 1
+b 36
+b 37
+b 36
+b 2
+b 30
+b 151
+b 152
+b 154
+b 155
+b 186
+b 151
+b 3
+b 27
+b 1
+b 8
+b 13
+b 14
+b 10
+b 1
+b 9
+b 46
+b 47
+b 59
+b 7
+b 1
+b 45
+b 1
+b 9
+b 10
+b 19
+b 141
+b 142
+b 144
+b 146
+b 192
+b 139
+b 2
+b 15
+b 16
+b 18
+b 15
+b 2
+b 12
+b 16
+b 17
+b 50
+b 57
+b 15
+b 1
+b 48
+b 2
+b 79
+b 20
+b 19
+b 1
+b 5
+b 6
+b 21
+b 22
+b 3
+b 2
+b 19
+b 1
+b 0
+b 1
+b 24
+b 27
+b 28
+b 27
+b 1
+b 2
+b 15
+b 0
+b 1
+b 54
+b 74
+b 95
+b 103
+b 106
+b 107
+b 101
+b 5
+b 94
+b 1
+b 3
+b 0
+b 1
+b 13
+b 15
+b 26
+b 27
+b 29
+b 36
+b 17
+b 18
+b 20
+b 20
+b 1
+b 7
+b 4
+b 5
+b 26
+b 0
+b 87
+b 88
+b 90
+b 87
+b 2
+b 22
+b 12
+b 51
+b 57
+b 58
+b 54
+b 1
+b 31
+b 32
+b 29
+b 2
+b 8
+b 6
+b 1
+b 49
+b 48
+b 2
+b 29
+b 31
+b 33
+b 34
+b 33
+b 2
+b 26
+b 1
+b 0
+b 1
+b 3
+b 5
+b 80
+b 1
+b 41
+b 42
+b 41
+b 1
+b 0
+b 1
+b 1
+b 0
+b 2
+b 113
+b 3
+b 4
+b 6
+b 8
+b 3
+b 2
+b 66
+b 65
+b 1
+b 8
+b 7
+b 24
+b 4
+b 1
+b 19
+b 20
+b 19
+b 2
+b 21
+b 22
+b 40
+b 21
+b 2
+b 36
+b 1
+b 9
+b 11
+b 12
+b 7
+b 1
+b 10
+b 2
+b 2
+b 31
+b 19
+b 21
+b 22
+b 38
+b 40
+b 41
+b 43
+b 51
+b 21
+b 1
+b 35
+b 1
+b 9
+b 16
+b 44
+b 16
+b 1
+b 23
+b 24
+b 26
+b 28
+b 29
+b 38
+b 23
+b 2
+b 18
+b 19
+b 30
+b 18
+b 2
+b 26
+b 1
+b 10
+b 12
+b 13
+b 13
+b 1
+b 4
+b 104
+b 105
+b 110
+b 104
+b 1
+b 107
+b 3
+b 4
+b 13
+b 14
+b 22
+b 21
+b 1
+b 17
+b 18
+b 32
+b 17
+b 2
+b 28
+b 1
+b 17
+b 18
+b 26
+b 46
+b 47
+b 177
+b 178
+b 180
+b 15
+b 2
+b 44
+b 2
+b 171
+b 2
+b 174
+b 1
+b 107
+b 109
+b 7
+b 8
+b 10
+b 12
+b 13
+b 12
+b 1
+b 6
+b 4
+b 1
+b 4
+b 2
+b 3
+b 13
+b 15
+b 11
+b 1
+b 9
+b 19
+b 20
+b 7
+b 1
+b 3
+b 73
+b 72
+b 2
+b 2
+b 3
+b 5
+b 7
+b 9
+b 0
+b 4
+b 128
+b 44
+b 45
+b 37
+b 43
+b 36
+b 2
+b 39
+b 2
+b 55
+b 52
+b 1
+b 27
+b 28
+b 25
+b 2
+b 11
+b 12
+b 24
+b 11
+b 2
+b 19
+b 1
+b 45
+b 46
+b 48
+b 49
+b 43
+b 2
+b 0
+b 2
+b 6
+b 15
+b 3
+b 1
+b 6
+b 3
+b 1
+b 29
+b 30
+b 32
+b 34
+b 35
+b 37
+b 37
+b 1
+b 5
+b 13
+b 5
+b 51
+b 53
+b 54
+b 56
+b 87
+b 31
+b 73
+b 112
+b 113
+b 115
+b 116
+b 112
+b 3
+b 113
+b 1
+b 8
+b 3
+b 4
+b 11
+b 9
+b 1
+b 23
+b 4
+b 6
+b 7
+b 0
+b 1
+b 3
+b 4
+b 15
+b 18
+b 0
+b 3
+b 11
+b 3
+b 67
+b 84
+b 85
+b 87
+b 84
+b 2
+b 62
+b 63
+b 6
+b 47
+b 17
+b 28
+b 29
+b 64
+b 26
+b 2
+b 16
+b 1
+b 46
+b 47
+b 87
+b 93
+b 94
+b 96
+b 97
+b 104
+b 45
+b 3
+b 82
+b 2
+b 12
+b 16
+b 20
+b 21
+b 23
+b 25
+b 26
+b 31
+b 18
+b 2
+b 24
+b 1
+b 10
+b 9
+b 2
+b 37
+b 39
+b 176
+b 189
+b 190
+b 200
+b 202
+b 203
+b 205
+b 175
+b 2
+b 186
+b 1
+b 19
+b 37
+b 38
+b 35
+b 2
+b 18
+b 1
+b 18
+b 28
+b 28
+b 1
+b 98
+b 100
+b 102
+b 103
+b 98
+b 1
+b 72
+b 73
+b 0
+b 2
+b 3
+b 135
+b 134
+b 2
+b 31
+b 33
+b 35
+b 36
+b 37
+b 28
+b 1
+b 16
+b 23
+b 24
+b 26
+b 28
+b 30
+b 32
+b 21
+b 2
+b 30
+b 1
+b 15
+b 1
+b 115
+b 113
+b 1
+b 73
+b 74
+b 91
+b 71
+b 2
+b 46
+b 58
+b 59
+b 91
+b 45
+b 2
+b 54
+b 2
+b 55
+b 54
+b 1
+b 12
+b 14
+b 15
+b 23
+b 24
+b 32
+b 14
+b 1
+b 20
+b 2
+b 28
+b 1
+b 23
+b 41
+b 47
+b 48
+b 44
+b 1
+b 46
+b 47
+b 49
+b 46
+b 2
+b 12
+b 10
+b 3
+b 21
+b 25
+b 26
+b 31
+b 47
+b 45
+b 1
+b 4
+b 5
+b 3
+b 1
+b 81
+b 82
+b 84
+b 86
+b 88
+b 84
+b 1
+b 71
+b 4
+b 5
+b 7
+b 8
+b 11
+b 16
+b 94
+b 7
+b 4
+b 89
+b 1
+b 0
+b 40
+b 39
+b 1
+b 6
+b 7
+b 12
+b 13
+b 16
+b 20
+b 6
+b 2
+b 9
+b 1
+b 2
+b 4
+b 5
+b 10
+b 11
+b 2
+b 2
+b 1
+b 3
+b 5
+b 5
+b 1
+b 94
+b 100
+b 101
+b 33
+b 32
+b 1
+b 11
+b 12
+b 33
+b 34
+b 36
+b 45
+b 10
+b 1
+b 32
+b 2
+b 25
+b 55
+b 53
+b 2
+b 6
+b 7
+b 11
+b 12
+b 21
+b 22
+b 6
+b 1
+b 1
+b 20
+b 12
+b 40
+b 41
+b 37
+b 1
+b 4
+b 6
+b 6
+b 1
+b 1
+b 2
+b 1
+b 2
+b 0
+b 1
+b 3
+b 5
+b 26
+b 28
+b 30
+b 34
+b 30
+b 1
+b 31
+b 1
+b 50
+b 50
+b 1
+b 71
+b 72
+b 70
+b 1
+b 18
+b 19
+b 100
+b 102
+b 43
+b 44
+b 46
+b 47
+b 50
+b 56
+b 5
+b 6
+b 4
+b 2
+b 19
+b 17
+b 3
+b 45
+b 62
+b 64
+b 65
+b 78
+b 79
+b 43
+b 1
+b 63
+b 1
+b 37
+b 68
+b 74
+b 75
+b 82
+b 6
+b 8
+b 9
+b 25
+b 8
+b 2
+b 21
+b 2
+b 8
+b 35
+b 45
+b 46
+b 76
+b 45
+b 1
+b 74
+b 1
+b 19
+b 24
+b 25
+b 32
+b 33
+b 32
+b 1
+b 16
+b 8
+b 9
+b 27
+b 30
+b 32
+b 33
+b 35
+b 32
+b 2
+b 21
+b 1
+b 0
+b 1
+b 17
+b 52
+b 51
+b 1
+b 0
+b 2
+b 8
+b 0
+b 1
+b 0
+b 1
+b 4
+b 5
+b 6
+b 29
+b 99
+b 109
+b 110
+b 112
+b 113
+b 27
+b 3
+b 106
+b 3
+b 93
+b 1
+b 2
+b 3
+b 5
+b 7
+b 11
+b 2
+b 2
+b 32
+b 57
+b 59
+b 60
+b 62
+b 63
+b 69
+b 71
+b 57
+b 2
+b 60
+b 2
+b 63
+b 1
+b 65
+b 66
+b 68
+b 12
+b 11
+b 13
+b 14
+b 16
+b 17
+b 11
+b 2
+b 30
+b 28
+b 1
+b 131
+b 230
+b 231
+b 233
+b 235
+b 236
+b 238
+b 129
+b 1
+b 1
+b 3
+b 8
+b 9
+b 5
+b 1
+b 0
+b 17
+b 0
+b 1
+b 164
+b 56
+b 65
+b 66
+b 79
+b 81
+b 82
+b 92
+b 93
+b 95
+b 96
+b 81
+b 2
+b 88
+b 2
+b 91
+b 2
+b 76
+b 1
+b 55
+b 59
+b 60
+b 62
+b 67
+b 78
+b 79
+b 59
+b 2
+b 63
+b 2
+b 6
+b 9
+b 10
+b 12
+b 7
+b 4
+b 7
+b 8
+b 10
+b 11
+b 13
+b 20
+b 13
+b 1
+b 3
+b 4
+b 20
+b 103
+b 104
+b 106
+b 108
+b 109
+b 123
+b 108
+b 2
+b 100
+b 1
+b 117
+b 1
+b 58
+b 67
+b 68
+b 70
+b 56
+b 3
+b 62
+b 2
+b 144
+b 145
+b 162
+b 144
+b 2
+b 157
+b 1
+b 2
+b 2
+b 1
+b 115
+b 124
+b 113
+b 3
+b 119
+b 1
+b 4
+b 5
+b 7
+b 8
+b 2
+b 2
+b 5
+b 2
+b 5
+b 6
+b 2
+b 1
+b 4
+b 6
+b 75
+b 77
+b 78
+b 128
+b 129
+b 141
+b 127
+b 1
+b 11
+b 9
+b 1
+b 49
+b 50
+b 52
+b 47
+b 2
+b 37
+b 38
+b 35
+b 2
+b 71
+b 1
+b 15
+b 17
+b 19
+b 20
+b 34
+b 35
+b 67
+b 15
+b 1
+b 30
+b 29
+b 1
+b 12
+b 56
+b 6
+b 8
+b 9
+b 11
+b 88
+b 4
+b 1
+b 86
+b 1
+b 2
+b 4
+b 5
+b 73
+b 9
+b 10
+b 12
+b 14
+b 15
+b 12
+b 18
+b 11
+b 1
+b 66
+b 74
+b 75
+b 77
+b 79
+b 80
+b 72
+b 2
+b 77
+b 2
+b 66
+b 1
+b 34
+b 35
+b 41
+b 34
+b 2
+b 37
+b 1
+b 5
+b 7
+b 9
+b 11
+b 11
+b 17
+b 18
+b 19
+b 15
+b 4
+b 10
+b 1
+b 60
+b 74
+b 76
+b 77
+b 79
+b 81
+b 82
+b 84
+b 92
+b 79
+b 4
+b 86
+b 3
+b 94
+b 93
+b 1
+b 17
+b 18
+b 26
+b 27
+b 29
+b 15
+b 2
+b 8
+b 7
+b 1
+b 49
+b 55
+b 47
+b 2
+b 22
+b 23
+b 25
+b 27
+b 28
+b 27
+b 1
+b 41
+b 42
+b 48
+b 56
+b 57
+b 55
+b 1
+b 0
+b 2
+b 8
+b 6
+b 1
+b 30
+b 50
+b 8
+b 10
+b 11
+b 8
+b 2
+b 21
+b 23
+b 24
+b 21
+b 2
+b 6
+b 13
+b 15
+b 16
+b 22
+b 24
+b 25
+b 15
+b 2
+b 18
+b 1
+b 3
+b 1
+b 7
+b 39
+b 38
+b 2
+b 63
+b 64
+b 74
+b 75
+b 77
+b 77
+b 1
+b 100
+b 101
+b 105
+b 55
+b 53
+b 1
+b 7
+b 14
+b 15
+b 21
+b 23
+b 24
+b 21
+b 2
+b 1
+b 4
+b 13
+b 14
+b 20
+b 21
+b 24
+b 25
+b 38
+b 40
+b 3
+b 1
+b 17
+b 22
+b 23
+b 25
+b 26
+b 15
+b 2
+b 20
+b 3
+b 89
+b 10
+b 16
+b 17
+b 16
+b 2
+b 0
+b 2
+b 4
+b 0
+b 1
+b 15
+b 10
+b 0
+b 2
+b 15
+b 0
+b 1
+b 3
+b 5
+b 5
+b 1
+b 84
+b 85
+b 87
+b 88
+b 103
+b 107
+b 113
+b 82
+b 2
+b 85
+b 1
+b 110
+b 1
+b 457
+b 471
+b 484
+b 511
+b 512
+b 518
+b 519
+b 522
+b 523
+b 470
+b 2
+b 480
+b 2
+b 514
+b 4
+b 0
+b 64
+b 151
+b 152
+b 151
+b 1
+b 106
+b 105
+b 1
+b 20
+b 21
+b 29
+b 18
+b 2
+b 25
+b 1
+b 11
+b 17
+b 18
+b 8
+b 1
+b 0
+b 49
+b 53
+b 54
+b 60
+b 61
+b 67
+b 53
+b 1
+b 19
+b 28
+b 29
+b 17
+b 3
+b 108
+b 107
+b 1
+b 35
+b 37
+b 0
+b 2
+b 3
+b 26
+b 28
+b 24
+b 25
+b 33
+b 34
+b 0
+b 2
+b 3
+b 5
+b 13
+b 2
+b 2
+b 9
+b 1
+b 58
+b 73
+b 0
+b 2
+b 3
+b 9
+b 10
+b 14
+b 16
+b 17
+b 20
+b 2
+b 1
+b 15
+b 4
+b 2
+b 4
+b 5
+b 7
+b 51
+b 2
+b 2
+b 48
+b 2
+b 56
+b 57
+b 77
+b 79
+b 80
+b 82
+b 83
+b 86
+b 77
+b 2
+b 80
+b 4
+b 3
+b 14
+b 11
+b 12
+b 0
+b 123
+b 121
+b 2
+b 7
+b 8
+b 13
+b 14
+b 20
+b 7
+b 2
+b 10
+b 1
+b 13
+b 24
+b 3
+b 9
+b 10
+b 18
+b 19
+b 21
+b 23
+b 25
+b 26
+b 76
+b 23
+b 2
+b 73
+b 2
+b 89
+b 91
+b 92
+b 97
+b 120
+b 121
+b 125
+b 120
+b 2
+b 92
+b 1
+b 119
+b 1
+b 6
+b 6
+b 1
+b 2
+b 4
+b 6
+b 8
+b 9
+b 11
+b 13
+b 130
+b 9
+b 10
+b 33
+b 34
+b 31
+b 2
+b 2
+b 3
+b 1
+b 1
+b 1
+b 11
+b 86
+b 84
+b 1
+b 14
+b 15
+b 13
+b 1
+b 13
+b 14
+b 16
+b 19
+b 12
+b 23
+b 24
+b 26
+b 27
+b 30
+b 31
+b 73
+b 30
+b 1
+b 69
+b 1
+b 0
+b 12
+b 1
+b 4
+b 0
+b 4
+b 111
+b 117
+b 118
+b 114
+b 1
+b 12
+b 11
+b 2
+b 28
+b 26
+b 1
+b 34
+b 35
+b 32
+b 2
+b 13
+b 31
+b 32
+b 34
+b 36
+b 91
+b 11
+b 54
+b 61
+b 62
+b 74
+b 75
+b 77
+b 84
+b 82
+b 2
+b 4
+b 0
+b 2
+b 4
+b 0
+b 1
+b 51
+b 54
+b 62
+b 0
+b 1
+b 6
+b 23
+b 29
+b 28
+b 1
+b 29
+b 30
+b 41
+b 28
+b 1
+b 7
+b 18
+b 17
+b 2
+b 56
+b 57
+b 76
+b 77
+b 76
+b 2
+b 45
+b 46
+b 48
+b 45
+b 2
+b 6
+b 7
+b 9
+b 10
+b 17
+b 10
+b 1
+b 110
+b 119
+b 127
+b 126
+b 2
+b 16
+b 92
+b 93
+b 108
+b 110
+b 111
+b 92
+b 1
+b 109
+b 2
+b 7
+b 25
+b 28
+b 29
+b 31
+b 33
+b 35
+b 36
+b 44
+b 33
+b 2
+b 202
+b 203
+b 205
+b 206
+b 208
+b 209
+b 200
+b 2
+b 203
+b 3
+b 4
+b 97
+b 95
+b 2
+b 12
+b 290
+b 102
+b 104
+b 105
+b 65
+b 66
+b 72
+b 65
+b 2
+b 68
+b 1
+b 3
+b 70
+b 71
+b 84
+b 69
+b 1
+b 68
+b 70
+b 77
+b 78
+b 80
+b 70
+b 1
+b 74
+b 2
+b 5
+b 7
+b 8
+b 2
+b 1
+b 14
+b 44
+b 46
+b 47
+b 51
+b 52
+b 53
+b 13
+b 2
+b 42
+b 2
+b 1
+b 85
+b 84
+b 1
+b 9
+b 11
+b 1
+b 7
+b 8
+b 12
+b 27
+b 28
+b 38
+b 25
+b 2
+b 26
+b 1
+b 7
+b 6
+b 7
+b 9
+b 10
+b 12
+b 6
+b 3
+b 80
+b 93
+b 92
+b 2
+b 165
+b 166
+b 164
+b 1
+b 55
+b 69
+b 67
+b 3
+b 54
+b 1
+b 2
+b 6
+b 7
+b 13
+b 17
+b 18
+b 20
+b 30
+b 31
+b 9
+b 0
+b 1
+b 195
+b 2
+b 3
+b 11
+b 171
+b 185
+b 186
+b 53
+b 6
+b 3
+b 4
+b 6
+b 8
+b 6
+b 1
+b 65
+b 66
+b 79
+b 66
+b 1
+b 18
+b 1
+b 31
+b 32
+b 37
+b 38
+b 29
+b 2
+b 35
+b 2
+b 0
+b 1
+b 15
+b 19
+b 20
+b 16
+b 17
+b 30
+b 16
+b 1
+b 120
+b 144
+b 146
+b 147
+b 152
+b 120
+b 1
+b 143
+b 2
+b 118
+b 119
+b 118
+b 1
+b 18
+b 19
+b 18
+b 2
+b 26
+b 25
+b 1
+b 1
+b 2
+b 4
+b 155
+b 179
+b 180
+b 182
+b 183
+b 200
+b 212
+b 213
+b 179
+b 3
+b 0
+b 2
+b 3
+b 10
+b 2
+b 1
+b 7
+b 2
+b 34
+b 238
+b 239
+b 241
+b 238
+b 2
+b 29
+b 31
+b 33
+b 34
+b 53
+b 60
+b 61
+b 67
+b 60
+b 2
+b 1
+b 0
+b 1
+b 84
+b 85
+b 87
+b 19
+b 22
+b 23
+b 25
+b 25
+b 1
+b 6
+b 4
+b 1
+b 4
+b 22
+b 23
+b 32
+b 20
+b 2
+b 30
+b 1
+b 3
+b 1
+b 78
+b 5
+b 6
+b 270
+b 271
+b 2
+b 5
+b 12
+b 4
+b 5
+b 7
+b 8
+b 7
+b 2
+b 126
+b 127
+b 125
+b 1
+b 5
+b 96
+b 107
+b 108
+b 33
+b 39
+b 31
+b 3
+b 34
+b 1
+b 17
+b 19
+b 20
+b 26
+b 27
+b 29
+b 30
+b 17
+b 2
+b 24
+b 3
+b 6
+b 6
+b 1
+b 12
+b 10
+b 3
+b 131
+b 11
+b 18
+b 20
+b 21
+b 23
+b 46
+b 1
+b 82
+b 85
+b 87
+b 88
+b 94
+b 102
+b 85
+b 2
+b 91
+b 2
+b 42
+b 45
+b 46
+b 42
+b 3
+b 3
+b 4
+b 6
+b 16
+b 3
+b 2
+b 16
+b 54
+b 55
+b 64
+b 65
+b 68
+b 54
+b 2
+b 60
+b 2
+b 63
+b 1
+b 4
+b 9
+b 10
+b 7
+b 2
+b 3
+b 1
+b 1
+b 1
+b 215
+b 242
+b 243
+b 242
+b 1
+b 71
+b 77
+b 80
+b 82
+b 84
+b 85
+b 84
+b 1
+b 0
+b 1
+b 0
+b 2
+b 2
+b 4
+b 5
+b 8
+b 22
+b 23
+b 25
+b 32
+b 33
+b 4
+b 3
+b 18
+b 1
+b 2
+b 4
+b 5
+b 6
+b 14
+b 16
+b 17
+b 19
+b 14
+b 2
+b 0
+b 1
+b 13
+b 5
+b 6
+b 9
+b 10
+b 3
+b 2
+b 1
+b 0
+b 1
+b 45
+b 57
+b 58
+b 60
+b 62
+b 63
+b 65
+b 69
+b 44
+b 2
+b 53
+b 2
+b 58
+b 2
+b 17
+b 22
+b 29
+b 41
+b 42
+b 20
+b 2
+b 89
+b 90
+b 92
+b 34
+b 32
+b 2
+b 12
+b 3
+b 5
+b 6
+b 8
+b 9
+b 3
+b 2
+b 4
+b 0
+b 1
+b 5
+b 7
+b 4
+b 3
+b 9
+b 14
+b 15
+b 23
+b 14
+b 1
+b 20
+b 2
+b 40
+b 41
+b 43
+b 2
+b 574
+b 9
+b 11
+b 12
+b 14
+b 18
+b 19
+b 14
+b 1
+b 17
+b 3
+b 13
+b 15
+b 16
+b 21
+b 23
+b 16
+b 1
+b 8
+b 6
+b 2
+b 10
+b 16
+b 7
+b 1
+b 11
+b 12
+b 14
+b 15
+b 17
+b 18
+b 10
+b 1
+b 13
+b 3
+b 0
+b 17
+b 4
+b 9
+b 1
+b 1
+b 0
+b 2
+b 3
+b 22
+b 25
+b 23
+b 2
+b 4
+b 6
+b 7
+b 17
+b 18
+b 20
+b 25
+b 26
+b 17
+b 2
+b 21
+b 2
+b 16
+b 155
+b 40
+b 42
+b 43
+b 45
+b 4
+b 26
+b 27
+b 29
+b 24
+b 2
+b 21
+b 11
+b 12
+b 31
+b 30
+b 2
+b 48
+b 47
+b 2
+b 57
+b 62
+b 63
+b 65
+b 62
+b 2
+b 1
+b 2
+b 4
+b 6
+b 7
+b 8
+b 0
+b 2
+b 8
+b 161
+b 162
+b 164
+b 42
+b 45
+b 46
+b 41
+b 5
+b 310
+b 30
+b 71
+b 72
+b 74
+b 75
+b 77
+b 78
+b 80
+b 82
+b 83
+b 92
+b 74
+b 3
+b 79
+b 2
+b 84
+b 1
+b 61
+b 60
+b 2
+b 191
+b 80
+b 81
+b 81
+b 1
+b 69
+b 70
+b 82
+b 84
+b 85
+b 91
+b 69
+b 2
+b 80
+b 2
+b 41
+b 42
+b 44
+b 45
+b 47
+b 76
+b 90
+b 47
+b 1
+b 73
+b 1
+b 63
+b 68
+b 69
+b 68
+b 1
+b 101
+b 102
+b 113
+b 114
+b 116
+b 117
+b 101
+b 2
+b 19
+b 92
+b 59
+b 61
+b 0
+b 2
+b 3
+b 21
+b 67
+b 68
+b 73
+b 65
+b 4
+b 68
+b 4
+b 20
+b 1
+b 1
+b 3
+b 0
+b 3
+b 206
+b 212
+b 213
+b 244
+b 245
+b 244
+b 2
+b 106
+b 103
+b 1
+b 5
+b 3
+b 1
+b 11
+b 17
+b 18
+b 14
+b 1
+b 102
+b 101
+b 2
+b 14
+b 132
+b 3
+b 4
+b 8
+b 9
+b 11
+b 6
+b 2
+b 53
+b 16
+b 17
+b 19
+b 20
+b 58
+b 60
+b 62
+b 63
+b 69
+b 1
+b 25
+b 42
+b 23
+b 1
+b 4
+b 6
+b 6
+b 1
+b 5
+b 6
+b 3
+b 4
+b 70
+b 74
+b 75
+b 29
+b 63
+b 27
+b 1
+b 1
+b 2
+b 4
+b 1
+b 2
+b 149
+b 154
+b 155
+b 172
+b 173
+b 176
+b 148
+b 2
+b 151
+b 1
+b 1
+b 96
+b 96
+b 1
+b 4
+b 10
+b 11
+b 83
+b 84
+b 2
+b 2
+b 9
+b 5
+b 2
+b 4
+b 6
+b 7
+b 9
+b 11
+b 12
+b 28
+b 4
+b 2
+b 25
+b 2
+b 56
+b 103
+b 104
+b 134
+b 135
+b 140
+b 135
+b 1
+b 140
+b 138
+b 1
+b 384
+b 396
+b 397
+b 401
+b 382
+b 2
+b 394
+b 2
+b 395
+b 1
+b 0
+b 2
+b 3
+b 5
+b 7
+b 8
+b 10
+b 7
+b 40
+b 43
+b 37
+b 1
+b 4
+b 5
+b 7
+b 8
+b 10
+b 19
+b 2
+b 2
+b 17
+b 1
+b 53
+b 56
+b 57
+b 59
+b 60
+b 64
+b 65
+b 53
+b 3
+b 56
+b 1
+b 38
+b 43
+b 45
+b 63
+b 64
+b 70
+b 71
+b 41
+b 1
+b 62
+b 1
+b 19
+b 75
+b 12
+b 13
+b 26
+b 11
+b 1
+b 23
+b 3
+b 4
+b 1
+b 1
+b 4
+b 1
+b 2
+b 4
+b 5
+b 6
+b 0
+b 12
+b 11
+b 1
+b 10
+b 11
+b 6
+b 8
+b 17
+b 18
+b 21
+b 30
+b 31
+b 51
+b 17
+b 4
+b 39
+b 29
+b 44
+b 43
+b 1
+b 5
+b 6
+b 10
+b 11
+b 15
+b 3
+b 4
+b 140
+b 142
+b 144
+b 138
+b 1
+b 118
+b 119
+b 116
+b 2
+b 10
+b 7
+b 1
+b 1
+b 2
+b 6
+b 0
+b 1
+b 91
+b 96
+b 97
+b 10
+b 11
+b 48
+b 46
+b 2
+b 18
+b 2
+b 5
+b 6
+b 8
+b 9
+b 4
+b 1
+b 7
+b 2
+b 6
+b 7
+b 38
+b 4
+b 2
+b 35
+b 1
+b 5
+b 18
+b 19
+b 21
+b 23
+b 25
+b 3
+b 1
+b 17
+b 2
+b 13
+b 14
+b 16
+b 24
+b 16
+b 1
+b 21
+b 1
+b 5
+b 20
+b 21
+b 23
+b 24
+b 20
+b 3
+b 9
+b 50
+b 128
+b 129
+b 128
+b 1
+b 3
+b 0
+b 1
+b 89
+b 93
+b 94
+b 98
+b 99
+b 101
+b 87
+b 1
+b 92
+b 2
+b 16
+b 4
+b 7
+b 8
+b 10
+b 12
+b 13
+b 15
+b 4
+b 3
+b 1
+b 124
+b 83
+b 87
+b 88
+b 103
+b 104
+b 125
+b 85
+b 2
+b 122
+b 2
+b 65
+b 67
+b 73
+b 67
+b 1
+b 70
+b 1
+b 2
+b 3
+b 5
+b 6
+b 2
+b 3
+b 16
+b 49
+b 63
+b 64
+b 48
+b 2
+b 60
+b 1
+b 16
+b 17
+b 19
+b 20
+b 33
+b 49
+b 26
+b 24
+b 2
+b 59
+b 60
+b 1
+b 1
+b 0
+b 1
+b 74
+b 115
+b 119
+b 120
+b 123
+b 124
+b 119
+b 4
+b 71
+b 1
+b 2
+b 3
+b 20
+b 21
+b 2
+b 2
+b 16
+b 2
+b 44
+b 41
+b 1
+b 68
+b 69
+b 68
+b 2
+b 12
+b 15
+b 14
+b 1
+b 53
+b 55
+b 57
+b 161
+b 180
+b 160
+b 2
+b 177
+b 2
+b 8
+b 14
+b 121
+b 122
+b 144
+b 12
+b 0
+b 2
+b 4
+b 5
+b 4
+b 3
+b 2
+b 4
+b 0
+b 1
+b 57
+b 71
+b 72
+b 74
+b 75
+b 77
+b 71
+b 3
+b 8
+b 35
+b 34
+b 2
+b 75
+b 77
+b 78
+b 40
+b 41
+b 43
+b 45
+b 57
+b 38
+b 2
+b 54
+b 1
+b 11
+b 47
+b 48
+b 56
+b 57
+b 54
+b 4
+b 14
+b 15
+b 14
+b 2
+b 10
+b 12
+b 12
+b 1
+b 35
+b 34
+b 1
+b 4
+b 5
+b 2
+b 3
+b 6
+b 4
+b 3
+b 13
+b 15
+b 16
+b 6
+b 197
+b 197
+b 1
+b 89
+b 90
+b 89
+b 2
+b 39
+b 40
+b 42
+b 53
+b 54
+b 60
+b 39
+b 2
+b 298
+b 302
+b 303
+b 302
+b 1
+b 60
+b 58
+b 3
+b 30
+b 32
+b 52
+b 57
+b 58
+b 62
+b 15
+b 18
+b 31
+b 32
+b 34
+b 35
+b 37
+b 38
+b 15
+b 3
+b 28
+b 3
+b 4
+b 11
+b 13
+b 14
+b 16
+b 13
+b 2
+b 48
+b 45
+b 1
+b 11
+b 49
+b 52
+b 53
+b 55
+b 47
+b 1
+b 11
+b 12
+b 9
+b 2
+b 80
+b 81
+b 93
+b 95
+b 93
+b 1
+b 2
+b 3
+b 0
+b 7
+b 375
+b 101
+b 102
+b 101
+b 1
+b 9
+b 10
+b 13
+b 14
+b 9
+b 4
+b 14
+b 14
+b 1
+b 17
+b 28
+b 29
+b 31
+b 17
+b 1
+b 25
+b 2
+b 11
+b 4
+b 5
+b 7
+b 9
+b 1
+b 1
+b 551
+b 552
+b 549
+b 2
+b 3
+b 2
+b 3
+b 0
+b 2
+b 17
+b 16
+b 1
+b 8
+b 50
+b 51
+b 48
+b 47
+b 1
+b 0
+b 1
+b 5
+b 44
+b 41
+b 1
+b 5
+b 7
+b 8
+b 10
+b 12
+b 13
+b 17
+b 18
+b 7
+b 2
+b 4
+b 9
+b 13
+b 0
+b 2
+b 3
+b 41
+b 42
+b 44
+b 40
+b 3
+b 7
+b 5
+b 3
+b 128
+b 26
+b 33
+b 34
+b 36
+b 37
+b 45
+b 46
+b 52
+b 70
+b 36
+b 2
+b 41
+b 2
+b 65
+b 4
+b 2
+b 56
+b 61
+b 62
+b 64
+b 9
+b 10
+b 12
+b 13
+b 23
+b 24
+b 35
+b 8
+b 1
+b 11
+b 2
+b 18
+b 2
+b 30
+b 1
+b 15
+b 63
+b 64
+b 66
+b 68
+b 70
+b 71
+b 120
+b 68
+b 2
+b 117
+b 2
+b 160
+b 162
+b 163
+b 162
+b 2
+b 53
+b 54
+b 56
+b 85
+b 32
+b 30
+b 1
+b 29
+b 31
+b 32
+b 34
+b 62
+b 63
+b 61
+b 1
+b 7
+b 10
+b 24
+b 25
+b 27
+b 28
+b 24
+b 3
+b 22
+b 0
+b 1
+b 9
+b 8
+b 2
+b 75
+b 74
+b 2
+b 85
+b 85
+b 1
+b 78
+b 79
+b 1
+b 0
+b 1
+b 9
+b 1
+b 13
+b 15
+b 16
+b 46
+b 45
+b 1
+b 285
+b 287
+b 289
+b 290
+b 299
+b 300
+b 302
+b 287
+b 2
+b 300
+b 1
+b 14
+b 133
+b 132
+b 2
+b 3
+b 5
+b 6
+b 8
+b 9
+b 16
+b 0
+b 1
+b 21
+b 35
+b 36
+b 68
+b 69
+b 93
+b 94
+b 100
+b 33
+b 2
+b 66
+b 2
+b 88
+b 1
+b 20
+b 1
+b 15
+b 69
+b 70
+b 72
+b 73
+b 75
+b 67
+b 2
+b 19
+b 10
+b 0
+b 4
+b 37
+b 20
+b 21
+b 20
+b 2
+b 6
+b 7
+b 18
+b 4
+b 2
+b 15
+b 1
+b 146
+b 60
+b 61
+b 60
+b 2
+b 57
+b 1
+b 56
+b 70
+b 71
+b 55
+b 2
+b 66
+b 2
+b 1
+b 28
+b 30
+b 31
+b 33
+b 28
+b 2
+b 4
+b 0
+b 6
+b 3
+b 4
+b 47
+b 54
+b 55
+b 27
+b 26
+b 1
+b 12
+b 11
+b 2
+b 33
+b 34
+b 56
+b 57
+b 59
+b 60
+b 31
+b 2
+b 54
+b 3
+b 5
+b 2
+b 3
+b 8
+b 1
+b 1
+b 4
+b 1
+b 1
+b 90
+b 103
+b 104
+b 15
+b 17
+b 18
+b 20
+b 22
+b 23
+b 28
+b 29
+b 13
+b 1
+b 21
+b 2
+b 1
+b 196
+b 200
+b 201
+b 208
+b 209
+b 211
+b 212
+b 223
+b 250
+b 200
+b 2
+b 204
+b 2
+b 208
+b 1
+b 2
+b 4
+b 5
+b 33
+b 13
+b 15
+b 2
+b 3
+b 5
+b 6
+b 8
+b 11
+b 12
+b 2
+b 3
+b 5
+b 3
+b 54
+b 55
+b 61
+b 60
+b 1
+b 7
+b 8
+b 5
+b 4
+b 5
+b 6
+b 50
+b 51
+b 53
+b 5
+b 2
+b 6
+b 5
+b 1
+b 22
+b 24
+b 25
+b 30
+b 22
+b 2
+b 28
+b 1
+b 1
+b 66
+b 67
+b 116
+b 64
+b 2
+b 79
+b 80
+b 77
+b 2
+b 39
+b 52
+b 36
+b 1
+b 3
+b 2
+b 1
+b 120
+b 126
+b 131
+b 132
+b 137
+b 138
+b 126
+b 1
+b 129
+b 1
+b 58
+b 80
+b 81
+b 58
+b 1
+b 77
+b 2
+b 74
+b 0
+b 2
+b 88
+b 89
+b 125
+b 126
+b 135
+b 86
+b 2
+b 124
+b 1
+b 8
+b 9
+b 12
+b 17
+b 6
+b 2
+b 14
+b 2
+b 65
+b 67
+b 67
+b 1
+b 16
+b 17
+b 19
+b 20
+b 19
+b 1
+b 11
+b 14
+b 172
+b 173
+b 170
+b 2
+b 9
+b 6
+b 7
+b 13
+b 14
+b 17
+b 18
+b 13
+b 4
+b 2
+b 93
+b 90
+b 1
+b 17
+b 35
+b 12
+b 13
+b 5
+b 6
+b 26
+b 27
+b 36
+b 26
+b 1
+b 33
+b 2
+b 63
+b 73
+b 33
+b 34
+b 33
+b 2
+b 20
+b 24
+b 25
+b 27
+b 28
+b 30
+b 24
+b 3
+b 27
+b 1
+b 8
+b 7
+b 2
+b 50
+b 56
+b 57
+b 64
+b 158
+b 159
+b 162
+b 156
+b 7
+b 6
+b 3
+b 1
+b 91
+b 91
+b 1
+b 6
+b 7
+b 10
+b 11
+b 4
+b 2
+b 8
+b 2
+b 13
+b 0
+b 1
+b 6
+b 7
+b 0
+b 8
+b 13
+b 15
+b 16
+b 23
+b 24
+b 27
+b 13
+b 2
+b 21
+b 3
+b 58
+b 25
+b 34
+b 35
+b 2
+b 3
+b 20
+b 21
+b 2
+b 1
+b 17
+b 2
+b 0
+b 1
+b 29
+b 50
+b 52
+b 53
+b 60
+b 82
+b 84
+b 85
+b 52
+b 1
+b 57
+b 3
+b 78
+b 2
+b 1
+b 3
+b 39
+b 40
+b 7
+b 9
+b 10
+b 9
+b 1
+b 34
+b 35
+b 43
+b 41
+b 1
+b 0
+b 1
+b 0
+b 2
+b 8
+b 12
+b 13
+b 15
+b 17
+b 18
+b 25
+b 27
+b 5
+b 3
+b 2
+b 29
+b 30
+b 36
+b 37
+b 26
+b 1
+b 0
+b 11
+b 7
+b 10
+b 11
+b 5
+b 1
+b 10
+b 1
+b 0
+b 2
+b 3
+b 42
+b 101
+b 117
+b 118
+b 62
+b 63
+b 61
+b 1
+b 4
+b 17
+b 21
+b 29
+b 15
+b 17
+b 18
+b 13
+b 1
+b 16
+b 2
+b 15
+b 13
+b 2
+b 122
+b 122
+b 1
+b 55
+b 56
+b 58
+b 55
+b 2
+b 41
+b 49
+b 62
+b 63
+b 69
+b 71
+b 72
+b 117
+b 61
+b 3
+b 64
+b 1
+b 0
+b 1
+b 8
+b 199
+b 203
+b 196
+b 1
+b 16
+b 17
+b 20
+b 22
+b 23
+b 25
+b 16
+b 3
+b 19
+b 3
+b 72
+b 88
+b 89
+b 94
+b 95
+b 97
+b 99
+b 94
+b 2
+b 44
+b 41
+b 52
+b 54
+b 55
+b 10
+b 48
+b 49
+b 51
+b 48
+b 2
+b 4
+b 21
+b 2
+b 2
+b 0
+b 2
+b 3
+b 5
+b 6
+b 8
+b 5
+b 3
+b 0
+b 2
+b 10
+b 6
+b 8
+b 10
+b 20
+b 21
+b 23
+b 10
+b 1
+b 17
+b 2
+b 20
+b 1
+b 7
+b 159
+b 10
+b 12
+b 13
+b 0
+b 1
+b 1
+b 98
+b 112
+b 96
+b 3
+b 4
+b 5
+b 2
+b 2
+b 2
+b 3
+b 5
+b 7
+b 8
+b 2
+b 2
+b 2
+b 4
+b 5
+b 7
+b 27
+b 28
+b 30
+b 25
+b 2
+b 0
+b 77
+b 81
+b 82
+b 84
+b 85
+b 87
+b 88
+b 95
+b 88
+b 1
+b 14
+b 1
+b 5
+b 0
+b 1
+b 11
+b 17
+b 18
+b 9
+b 11
+b 12
+b 8
+b 19
+b 20
+b 22
+b 24
+b 17
+b 4
+b 0
+b 6
+b 7
+b 93
+b 0
+b 2
+b 3
+b 10
+b 2
+b 2
+b 6
+b 1
+b 78
+b 76
+b 1
+b 49
+b 50
+b 60
+b 61
+b 49
+b 2
+b 55
+b 1
+b 39
+b 27
+b 28
+b 32
+b 25
+b 2
+b 27
+b 36
+b 38
+b 39
+b 25
+b 1
+b 4
+b 2
+b 5
+b 42
+b 44
+b 45
+b 44
+b 2
+b 1
+b 0
+b 1
+b 22
+b 2
+b 4
+b 5
+b 24
+b 25
+b 27
+b 32
+b 0
+b 1
+b 26
+b 1
+b 27
+b 4
+b 5
+b 4
+b 1
+b 19
+b 21
+b 24
+b 25
+b 27
+b 28
+b 30
+b 21
+b 3
+b 24
+b 4
+b 177
+b 189
+b 190
+b 192
+b 37
+b 38
+b 47
+b 60
+b 61
+b 67
+b 36
+b 1
+b 59
+b 2
+b 62
+b 2
+b 11
+b 13
+b 14
+b 22
+b 17
+b 6
+b 8
+b 10
+b 11
+b 17
+b 15
+b 2
+b 37
+b 21
+b 2
+b 3
+b 5
+b 2
+b 2
+b 26
+b 26
+b 1
+b 90
+b 83
+b 93
+b 81
+b 3
+b 89
+b 1
+b 28
+b 29
+b 31
+b 33
+b 34
+b 27
+b 1
+b 9
+b 10
+b 13
+b 79
+b 6
+b 7
+b 6
+b 1
+b 7
+b 8
+b 10
+b 18
+b 20
+b 5
+b 2
+b 14
+b 1
+b 141
+b 142
+b 146
+b 141
+b 2
+b 142
+b 1
+b 3
+b 5
+b 1
+b 1
+b 35
+b 1
+b 25
+b 32
+b 58
+b 9
+b 35
+b 36
+b 34
+b 1
+b 8
+b 1
+b 20
+b 23
+b 25
+b 37
+b 38
+b 40
+b 18
+b 1
+b 9
+b 14
+b 15
+b 14
+b 1
+b 0
+b 16
+b 16
+b 1
+b 8
+b 9
+b 11
+b 12
+b 69
+b 6
+b 2
+b 9
+b 2
+b 71
+b 69
+b 1
+b 4
+b 5
+b 27
+b 2
+b 2
+b 2
+b 3
+b 0
+b 2
+b 2
+b 2
+b 1
+b 36
+b 39
+b 41
+b 42
+b 44
+b 46
+b 48
+b 50
+b 51
+b 93
+b 48
+b 2
+b 90
+b 2
+b 107
+b 105
+b 3
+b 0
+b 2
+b 3
+b 5
+b 0
+b 2
+b 70
+b 72
+b 73
+b 75
+b 78
+b 79
+b 35
+b 37
+b 38
+b 40
+b 63
+b 37
+b 2
+b 59
+b 2
+b 39
+b 50
+b 51
+b 58
+b 59
+b 62
+b 63
+b 73
+b 37
+b 1
+b 49
+b 2
+b 54
+b 1
+b 51
+b 53
+b 106
+b 107
+b 132
+b 133
+b 140
+b 53
+b 1
+b 104
+b 1
+b 10
+b 9
+b 2
+b 42
+b 43
+b 45
+b 40
+b 2
+b 5
+b 2
+b 1
+b 1
+b 4
+b 5
+b 168
+b 120
+b 122
+b 123
+b 125
+b 118
+b 1
+b 41
+b 80
+b 81
+b 80
+b 2
+b 17
+b 15
+b 2
+b 4
+b 0
+b 1
+b 8
+b 10
+b 12
+b 13
+b 21
+b 21
+b 1
+b 10
+b 11
+b 13
+b 14
+b 10
+b 3
+b 57
+b 55
+b 54
+b 1
+b 70
+b 72
+b 73
+b 143
+b 67
+b 1
+b 0
+b 2
+b 4
+b 6
+b 7
+b 8
+b 4
+b 4
+b 11
+b 5
+b 6
+b 9
+b 10
+b 3
+b 77
+b 84
+b 85
+b 117
+b 119
+b 120
+b 84
+b 2
+b 117
+b 2
+b 81
+b 1
+b 4
+b 5
+b 1
+b 0
+b 1
+b 18
+b 25
+b 26
+b 28
+b 29
+b 23
+b 2
+b 1
+b 4
+b 5
+b 7
+b 44
+b 42
+b 1
+b 118
+b 123
+b 124
+b 126
+b 127
+b 134
+b 117
+b 2
+b 120
+b 1
+b 8
+b 9
+b 77
+b 98
+b 99
+b 101
+b 103
+b 104
+b 14
+b 15
+b 42
+b 14
+b 1
+b 39
+b 2
+b 179
+b 180
+b 186
+b 188
+b 189
+b 179
+b 1
+b 2
+b 10
+b 135
+b 136
+b 41
+b 52
+b 53
+b 10
+b 15
+b 16
+b 19
+b 20
+b 9
+b 2
+b 12
+b 1
+b 71
+b 70
+b 2
+b 15
+b 16
+b 19
+b 20
+b 22
+b 14
+b 1
+b 63
+b 42
+b 44
+b 45
+b 47
+b 49
+b 50
+b 54
+b 49
+b 2
+b 50
+b 1
+b 12
+b 0
+b 2
+b 3
+b 8
+b 5
+b 1
+b 34
+b 38
+b 39
+b 41
+b 67
+b 86
+b 87
+b 38
+b 2
+b 63
+b 3
+b 80
+b 1
+b 25
+b 24
+b 2
+b 13
+b 14
+b 16
+b 11
+b 2
+b 14
+b 1
+b 55
+b 70
+b 71
+b 18
+b 18
+b 1
+b 70
+b 71
+b 73
+b 74
+b 76
+b 70
+b 3
+b 1
+b 10
+b 0
+b 2
+b 6
+b 1
+b 28
+b 34
+b 35
+b 37
+b 39
+b 40
+b 45
+b 39
+b 1
+b 42
+b 2
+b 6
+b 39
+b 39
+b 1
+b 4
+b 5
+b 17
+b 3
+b 1
+b 21
+b 22
+b 55
+b 68
+b 69
+b 65
+b 63
+b 1
+b 0
+b 1
+b 7
+b 8
+b 9
+b 25
+b 22
+b 1
+b 119
+b 127
+b 129
+b 130
+b 132
+b 134
+b 135
+b 136
+b 125
+b 1
+b 0
+b 22
+b 90
+b 92
+b 93
+b 95
+b 96
+b 102
+b 105
+b 90
+b 2
+b 94
+b 1
+b 85
+b 81
+b 82
+b 84
+b 84
+b 1
+b 2
+b 0
+b 1
+b 6
+b 8
+b 10
+b 11
+b 20
+b 15
+b 16
+b 21
+b 22
+b 70
+b 71
+b 74
+b 75
+b 83
+b 74
+b 2
+b 79
+b 3
+b 67
+b 1
+b 1
+b 6
+b 75
+b 77
+b 78
+b 84
+b 83
+b 1
+b 35
+b 43
+b 44
+b 41
+b 2
+b 35
+b 1
+b 22
+b 23
+b 22
+b 2
+b 0
+b 2
+b 3
+b 0
+b 2
+b 1
+b 18
+b 29
+b 30
+b 50
+b 51
+b 57
+b 58
+b 60
+b 28
+b 1
+b 49
+b 2
+b 52
+b 2
+b 55
+b 1
+b 95
+b 100
+b 101
+b 25
+b 26
+b 37
+b 38
+b 49
+b 37
+b 2
+b 45
+b 1
+b 34
+b 1
+b 63
+b 65
+b 67
+b 63
+b 1
+b 80
+b 81
+b 83
+b 5
+b 12
+b 13
+b 72
+b 13
+b 13
+b 1
+b 0
+b 1
+b 9
+b 0
+b 1
+b 11
+b 3
+b 4
+b 12
+b 13
+b 27
+b 3
+b 2
+b 9
+b 1
+b 22
+b 2
+b 24
+b 36
+b 37
+b 36
+b 1
+b 12
+b 13
+b 19
+b 25
+b 1
+b 0
+b 1
+b 16
+b 18
+b 19
+b 18
+b 1
+b 13
+b 11
+b 2
+b 14
+b 15
+b 17
+b 22
+b 42
+b 47
+b 48
+b 46
+b 1
+b 248
+b 249
+b 246
+b 2
+b 8
+b 7
+b 1
+b 6
+b 21
+b 22
+b 21
+b 1
+b 7
+b 8
+b 33
+b 7
+b 2
+b 150
+b 151
+b 154
+b 174
+b 11
+b 12
+b 18
+b 22
+b 16
+b 3
+b 17
+b 1
+b 34
+b 36
+b 38
+b 39
+b 45
+b 47
+b 38
+b 1
+b 61
+b 257
+b 258
+b 8
+b 7
+b 2
+b 4
+b 2
+b 2
+b 0
+b 2
+b 3
+b 5
+b 10
+b 11
+b 12
+b 0
+b 2
+b 0
+b 43
+b 50
+b 94
+b 95
+b 97
+b 99
+b 100
+b 48
+b 2
+b 95
+b 2
+b 5
+b 7
+b 1
+b 58
+b 32
+b 34
+b 36
+b 37
+b 39
+b 84
+b 85
+b 91
+b 36
+b 2
+b 80
+b 2
+b 86
+b 2
+b 28
+b 30
+b 42
+b 43
+b 28
+b 30
+b 28
+b 1
+b 16
+b 24
+b 25
+b 24
+b 2
+b 14
+b 1
+b 2
+b 4
+b 0
+b 1
+b 0
+b 2
+b 3
+b 26
+b 27
+b 28
+b 0
+b 2
+b 58
+b 66
+b 67
+b 38
+b 39
+b 54
+b 56
+b 57
+b 59
+b 60
+b 62
+b 64
+b 65
+b 66
+b 54
+b 2
+b 57
+b 2
+b 0
+b 93
+b 94
+b 96
+b 98
+b 99
+b 101
+b 103
+b 105
+b 91
+b 2
+b 96
+b 2
+b 11
+b 17
+b 39
+b 41
+b 42
+b 19
+b 20
+b 18
+b 1
+b 21
+b 22
+b 31
+b 21
+b 2
+b 10
+b 6
+b 4
+b 11
+b 12
+b 17
+b 18
+b 1
+b 3
+b 29
+b 31
+b 51
+b 52
+b 58
+b 31
+b 1
+b 48
+b 2
+b 0
+b 1
+b 15
+b 0
+b 2
+b 46
+b 48
+b 11
+b 12
+b 14
+b 9
+b 2
+b 12
+b 1
+b 20
+b 36
+b 37
+b 176
+b 192
+b 193
+b 176
+b 1
+b 190
+b 1
+b 22
+b 27
+b 50
+b 48
+b 1
+b 0
+b 1
+b 3
+b 4
+b 15
+b 16
+b 18
+b 3
+b 2
+b 11
+b 2
+b 336
+b 366
+b 367
+b 382
+b 383
+b 335
+b 2
+b 363
+b 1
+b 93
+b 94
+b 3
+b 62
+b 72
+b 73
+b 73
+b 1
+b 18
+b 19
+b 16
+b 2
+b 11
+b 11
+b 3
+b 7
+b 9
+b 10
+b 17
+b 30
+b 36
+b 37
+b 41
+b 36
+b 2
+b 33
+b 1
+b 35
+b 1
+b 66
+b 88
+b 89
+b 91
+b 64
+b 1
+b 87
+b 2
+b 102
+b 103
+b 105
+b 10
+b 11
+b 9
+b 1
+b 24
+b 25
+b 31
+b 167
+b 168
+b 47
+b 49
+b 50
+b 56
+b 0
+b 2
+b 14
+b 16
+b 47
+b 60
+b 61
+b 63
+b 47
+b 1
+b 57
+b 2
+b 60
+b 1
+b 8
+b 0
+b 2
+b 162
+b 76
+b 77
+b 77
+b 1
+b 8
+b 9
+b 6
+b 2
+b 3
+b 55
+b 60
+b 61
+b 66
+b 67
+b 73
+b 74
+b 80
+b 80
+b 1
+b 63
+b 1
+b 47
+b 92
+b 94
+b 95
+b 99
+b 100
+b 98
+b 1
+b 44
+b 1
+b 15
+b 17
+b 18
+b 23
+b 17
+b 18
+b 21
+b 95
+b 96
+b 98
+b 17
+b 4
+b 2
+b 0
+b 1
+b 47
+b 81
+b 82
+b 89
+b 80
+b 1
+b 35
+b 43
+b 44
+b 6
+b 7
+b 9
+b 4
+b 2
+b 7
+b 3
+b 1
+b 0
+b 2
+b 5
+b 0
+b 1
+b 72
+b 31
+b 33
+b 34
+b 36
+b 37
+b 44
+b 45
+b 31
+b 2
+b 0
+b 0
+b 1
+b 21
+b 24
+b 25
+b 31
+b 32
+b 30
+b 1
+b 28
+b 22
+b 138
+b 136
+b 1
+b 13
+b 14
+b 19
+b 20
+b 22
+b 13
+b 2
+b 16
+b 1
+b 3
+b 28
+b 34
+b 35
+b 37
+b 50
+b 51
+b 56
+b 26
+b 1
+b 50
+b 1
+b 168
+b 5
+b 6
+b 8
+b 9
+b 8
+b 2
+b 45
+b 49
+b 1
+b 62
+b 21
+b 27
+b 28
+b 31
+b 39
+b 57
+b 19
+b 1
+b 26
+b 4
+b 60
+b 65
+b 66
+b 70
+b 71
+b 73
+b 70
+b 3
+b 0
+b 2
+b 3
+b 0
+b 2
+b 232
+b 234
+b 235
+b 237
+b 275
+b 277
+b 278
+b 282
+b 234
+b 2
+b 271
+b 1
+b 5
+b 35
+b 37
+b 37
+b 1
+b 10
+b 11
+b 42
+b 10
+b 1
+b 0
+b 1
+b 3
+b 153
+b 154
+b 26
+b 27
+b 29
+b 15
+b 48
+b 52
+b 53
+b 55
+b 56
+b 58
+b 59
+b 68
+b 70
+b 76
+b 77
+b 79
+b 55
+b 3
+b 67
+b 1
+b 70
+b 2
+b 9
+b 7
+b 8
+b 13
+b 14
+b 13
+b 2
+b 4
+b 1
+b 2
+b 3
+b 9
+b 10
+b 14
+b 2
+b 2
+b 5
+b 2
+b 35
+b 40
+b 57
+b 58
+b 60
+b 62
+b 63
+b 73
+b 74
+b 72
+b 3
+b 1
+b 0
+b 1
+b 86
+b 88
+b 90
+b 91
+b 115
+b 116
+b 123
+b 86
+b 1
+b 8
+b 10
+b 6
+b 1
+b 7
+b 8
+b 68
+b 69
+b 72
+b 7
+b 2
+b 64
+b 2
+b 14
+b 32
+b 33
+b 90
+b 12
+b 1
+b 89
+b 1
+b 3
+b 2
+b 3
+b 32
+b 38
+b 39
+b 44
+b 45
+b 41
+b 1
+b 14
+b 12
+b 3
+b 49
+b 46
+b 1
+b 0
+b 1
+b 87
+b 90
+b 91
+b 30
+b 31
+b 33
+b 30
+b 2
+b 16
+b 14
+b 3
+b 15
+b 14
+b 1
+b 108
+b 121
+b 122
+b 124
+b 125
+b 129
+b 132
+b 134
+b 121
+b 3
+b 126
+b 2
+b 9
+b 14
+b 13
+b 2
+b 18
+b 20
+b 21
+b 18
+b 2
+b 43
+b 45
+b 57
+b 65
+b 66
+b 69
+b 71
+b 65
+b 3
+b 40
+b 1
+b 196
+b 198
+b 199
+b 201
+b 203
+b 204
+b 206
+b 196
+b 2
+b 201
+b 2
+b 2
+b 0
+b 2
+b 3
+b 14
+b 28
+b 29
+b 28
+b 2
+b 75
+b 76
+b 106
+b 107
+b 111
+b 73
+b 2
+b 104
+b 2
+b 14
+b 15
+b 23
+b 25
+b 26
+b 23
+b 2
+b 8
+b 13
+b 5
+b 1
+b 0
+b 0
+b 1
+b 19
+b 21
+b 22
+b 2
+b 3
+b 18
+b 0
+b 2
+b 15
+b 1
+b 68
+b 70
+b 71
+b 68
+b 2
+b 4
+b 19
+b 33
+b 32
+b 1
+b 48
+b 49
+b 56
+b 68
+b 69
+b 66
+b 2
+b 55
+b 1
+b 92
+b 97
+b 90
+b 2
+b 46
+b 0
+b 17
+b 18
+b 22
+b 23
+b 25
+b 26
+b 20
+b 2
+b 23
+b 2
+b 42
+b 206
+b 207
+b 224
+b 225
+b 230
+b 206
+b 2
+b 221
+b 1
+b 22
+b 19
+b 1
+b 0
+b 0
+b 1
+b 47
+b 49
+b 50
+b 69
+b 72
+b 73
+b 67
+b 6
+b 50
+b 1
+b 0
+b 1
+b 3
+b 12
+b 3
+b 1
+b 51
+b 53
+b 60
+b 61
+b 51
+b 1
+b 39
+b 198
+b 21
+b 22
+b 33
+b 0
+b 1
+b 3
+b 5
+b 3
+b 1
+b 1
+b 27
+b 13
+b 18
+b 19
+b 18
+b 2
+b 10
+b 1
+b 2
+b 3
+b 6
+b 7
+b 0
+b 10
+b 34
+b 39
+b 40
+b 33
+b 2
+b 36
+b 1
+b 69
+b 70
+b 4
+b 3
+b 104
+b 103
+b 1
+b 30
+b 31
+b 30
+b 2
+b 46
+b 47
+b 49
+b 50
+b 52
+b 54
+b 74
+b 49
+b 2
+b 212
+b 281
+b 282
+b 284
+b 286
+b 287
+b 292
+b 293
+b 284
+b 2
+b 6
+b 6
+b 82
+b 81
+b 1
+b 1
+b 3
+b 14
+b 15
+b 17
+b 18
+b 27
+b 202
+b 203
+b 223
+b 199
+b 1
+b 201
+b 1
+b 53
+b 54
+b 57
+b 9
+b 83
+b 85
+b 86
+b 107
+b 108
+b 83
+b 2
+b 0
+b 2
+b 3
+b 5
+b 13
+b 5
+b 1
+b 51
+b 5
+b 8
+b 3
+b 4
+b 0
+b 1
+b 4
+b 5
+b 7
+b 8
+b 50
+b 51
+b 2
+b 5
+b 5
+b 75
+b 76
+b 82
+b 83
+b 85
+b 73
+b 2
+b 80
+b 2
+b 15
+b 62
+b 69
+b 70
+b 76
+b 75
+b 2
+b 75
+b 100
+b 101
+b 105
+b 114
+b 115
+b 100
+b 2
+b 73
+b 1
+b 99
+b 1
+b 8
+b 34
+b 31
+b 1
+b 4
+b 0
+b 2
+b 3
+b 11
+b 13
+b 2
+b 2
+b 7
+b 1
+b 4
+b 7
+b 29
+b 30
+b 32
+b 33
+b 48
+b 49
+b 51
+b 53
+b 28
+b 1
+b 31
+b 2
+b 43
+b 2
+b 48
+b 1
+b 35
+b 147
+b 148
+b 180
+b 182
+b 183
+b 182
+b 1
+b 177
+b 1
+b 0
+b 0
+b 1
+b 32
+b 9
+b 11
+b 12
+b 14
+b 15
+b 11
+b 3
+b 11
+b 15
+b 10
+b 2
+b 11
+b 1
+b 15
+b 20
+b 21
+b 20
+b 1
+b 9
+b 10
+b 17
+b 7
+b 2
+b 14
+b 1
+b 61
+b 62
+b 67
+b 61
+b 1
+b 64
+b 1
+b 103
+b 4
+b 5
+b 128
+b 164
+b 63
+b 62
+b 2
+b 10
+b 11
+b 13
+b 14
+b 8
+b 2
+b 11
+b 2
+b 28
+b 29
+b 38
+b 26
+b 2
+b 133
+b 131
+b 2
+b 86
+b 92
+b 94
+b 95
+b 84
+b 2
+b 0
+b 1
+b 103
+b 105
+b 108
+b 109
+b 112
+b 113
+b 105
+b 3
+b 79
+b 90
+b 91
+b 35
+b 37
+b 38
+b 40
+b 42
+b 43
+b 45
+b 46
+b 59
+b 33
+b 1
+b 41
+b 3
+b 54
+b 1
+b 0
+b 3
+b 4
+b 11
+b 101
+b 42
+b 77
+b 78
+b 80
+b 81
+b 83
+b 85
+b 87
+b 88
+b 42
+b 1
+b 74
+b 2
+b 20
+b 18
+b 1
+b 44
+b 56
+b 57
+b 93
+b 2
+b 2
+b 1
+b 29
+b 30
+b 32
+b 27
+b 4
+b 93
+b 94
+b 32
+b 33
+b 31
+b 1
+b 15
+b 16
+b 40
+b 13
+b 2
+b 35
+b 1
+b 18
+b 10
+b 15
+b 16
+b 21
+b 22
+b 26
+b 15
+b 1
+b 18
+b 2
+b 0
+b 1
+b 7
+b 1
+b 1
+b 3
+b 6
+b 7
+b 35
+b 36
+b 40
+b 41
+b 40
+b 1
+b 60
+b 58
+b 1
+b 152
+b 10
+b 11
+b 20
+b 21
+b 10
+b 2
+b 16
+b 2
+b 3
+b 4
+b 3
+b 2
+b 17
+b 0
+b 1
+b 7
+b 1
+b 1
+b 16
+b 21
+b 22
+b 28
+b 18
+b 1
+b 1
+b 5
+b 17
+b 0
+b 2
+b 1
+b 1
+b 94
+b 68
+b 2
+b 3
+b 93
+b 94
+b 2
+b 3
+b 57
+b 60
+b 121
+b 122
+b 27
+b 28
+b 34
+b 35
+b 40
+b 27
+b 1
+b 7
+b 9
+b 5
+b 1
+b 62
+b 63
+b 77
+b 61
+b 1
+b 9
+b 11
+b 12
+b 14
+b 9
+b 2
+b 10
+b 11
+b 13
+b 20
+b 22
+b 23
+b 20
+b 4
+b 1
+b 0
+b 2
+b 58
+b 58
+b 1
+b 17
+b 18
+b 20
+b 17
+b 2
+b 7
+b 8
+b 17
+b 18
+b 24
+b 25
+b 26
+b 7
+b 2
+b 13
+b 2
+b 92
+b 93
+b 95
+b 96
+b 90
+b 2
+b 111
+b 121
+b 120
+b 1
+b 8
+b 10
+b 11
+b 8
+b 2
+b 56
+b 58
+b 60
+b 61
+b 70
+b 72
+b 58
+b 2
+b 3
+b 2
+b 4
+b 5
+b 0
+b 1
+b 6
+b 0
+b 1
+b 3
+b 1
+b 10
+b 7
+b 1
+b 20
+b 28
+b 30
+b 31
+b 17
+b 1
+b 0
+b 1
+b 72
+b 74
+b 80
+b 81
+b 83
+b 100
+b 80
+b 2
+b 96
+b 3
+b 4
+b 1
+b 1
+b 51
+b 53
+b 55
+b 56
+b 53
+b 4
+b 44
+b 41
+b 1
+b 4
+b 34
+b 35
+b 52
+b 53
+b 36
+b 37
+b 35
+b 1
+b 4
+b 2
+b 2
+b 72
+b 89
+b 90
+b 87
+b 2
+b 71
+b 1
+b 12
+b 13
+b 75
+b 13
+b 1
+b 75
+b 76
+b 73
+b 2
+b 23
+b 22
+b 1
+b 76
+b 77
+b 79
+b 81
+b 83
+b 85
+b 86
+b 95
+b 85
+b 2
+b 33
+b 42
+b 43
+b 47
+b 31
+b 3
+b 38
+b 1
+b 30
+b 31
+b 27
+b 1
+b 28
+b 37
+b 12
+b 14
+b 15
+b 21
+b 22
+b 24
+b 21
+b 2
+b 9
+b 1
+b 16
+b 14
+b 3
+b 28
+b 26
+b 1
+b 2
+b 3
+b 9
+b 10
+b 2
+b 2
+b 5
+b 2
+b 36
+b 37
+b 39
+b 56
+b 33
+b 1
+b 38
+b 39
+b 48
+b 15
+b 16
+b 12
+b 1
+b 5
+b 6
+b 23
+b 24
+b 5
+b 2
+b 19
+b 2
+b 29
+b 27
+b 1
+b 11
+b 19
+b 21
+b 22
+b 24
+b 26
+b 27
+b 29
+b 38
+b 26
+b 2
+b 8
+b 1
+b 134
+b 141
+b 48
+b 0
+b 2
+b 3
+b 31
+b 32
+b 48
+b 54
+b 31
+b 2
+b 44
+b 3
+b 47
+b 1
+b 65
+b 66
+b 63
+b 2
+b 70
+b 68
+b 69
+b 74
+b 75
+b 86
+b 67
+b 1
+b 4
+b 3
+b 2
+b 108
+b 43
+b 44
+b 51
+b 52
+b 58
+b 43
+b 2
+b 47
+b 2
+b 9
+b 5
+b 4
+b 2
+b 62
+b 11
+b 12
+b 30
+b 28
+b 2
+b 12
+b 4
+b 5
+b 7
+b 8
+b 4
+b 3
+b 0
+b 1
+b 11
+b 0
+b 2
+b 6
+b 1
+b 160
+b 161
+b 163
+b 164
+b 172
+b 174
+b 175
+b 181
+b 158
+b 2
+b 83
+b 80
+b 1
+b 1
+b 5
+b 6
+b 3
+b 3
+b 26
+b 30
+b 31
+b 38
+b 40
+b 41
+b 48
+b 49
+b 51
+b 38
+b 2
+b 49
+b 1
+b 1
+b 7
+b 83
+b 2
+b 19
+b 20
+b 22
+b 24
+b 25
+b 27
+b 17
+b 2
+b 22
+b 2
+b 1
+b 1
+b 1
+b 3
+b 157
+b 25
+b 31
+b 32
+b 23
+b 3
+b 114
+b 116
+b 117
+b 114
+b 2
+b 9
+b 10
+b 58
+b 62
+b 61
+b 1
+b 37
+b 38
+b 35
+b 2
+b 22
+b 9
+b 12
+b 14
+b 16
+b 17
+b 19
+b 20
+b 21
+b 8
+b 3
+b 13
+b 5
+b 0
+b 1
+b 11
+b 1
+b 38
+b 38
+b 1
+b 6
+b 7
+b 10
+b 11
+b 27
+b 28
+b 27
+b 1
+b 0
+b 2
+b 30
+b 41
+b 42
+b 44
+b 7
+b 8
+b 17
+b 2
+b 378
+b 379
+b 377
+b 1
+b 27
+b 28
+b 30
+b 31
+b 33
+b 35
+b 36
+b 27
+b 3
+b 32
+b 1
+b 16
+b 15
+b 129
+b 1
+b 8
+b 9
+b 5
+b 6
+b 8
+b 21
+b 5
+b 2
+b 17
+b 1
+b 34
+b 6
+b 7
+b 11
+b 12
+b 14
+b 11
+b 2
+b 7
+b 7
+b 1
+b 23
+b 24
+b 35
+b 37
+b 38
+b 40
+b 82
+b 35
+b 2
+b 38
+b 1
+b 12
+b 26
+b 27
+b 24
+b 2
+b 11
+b 1
+b 78
+b 79
+b 17
+b 101
+b 103
+b 104
+b 106
+b 128
+b 99
+b 1
+b 102
+b 2
+b 93
+b 95
+b 96
+b 99
+b 91
+b 1
+b 5
+b 3
+b 1
+b 10
+b 16
+b 17
+b 20
+b 27
+b 28
+b 30
+b 32
+b 33
+b 72
+b 27
+b 2
+b 68
+b 2
+b 19
+b 84
+b 86
+b 87
+b 13
+b 14
+b 12
+b 1
+b 2
+b 3
+b 1
+b 1
+b 22
+b 35
+b 36
+b 38
+b 20
+b 2
+b 18
+b 19
+b 11
+b 12
+b 48
+b 11
+b 2
+b 44
+b 1
+b 84
+b 89
+b 90
+b 92
+b 93
+b 95
+b 97
+b 98
+b 104
+b 107
+b 84
+b 1
+b 87
+b 1
+b 39
+b 21
+b 24
+b 53
+b 55
+b 56
+b 58
+b 59
+b 53
+b 2
+b 56
+b 1
+b 4
+b 2
+b 3
+b 1
+b 2
+b 9
+b 10
+b 19
+b 20
+b 22
+b 43
+b 19
+b 2
+b 6
+b 4
+b 1
+b 60
+b 101
+b 103
+b 104
+b 3
+b 2
+b 2
+b 15
+b 57
+b 55
+b 3
+b 51
+b 53
+b 54
+b 56
+b 58
+b 59
+b 61
+b 76
+b 89
+b 51
+b 4
+b 24
+b 116
+b 117
+b 119
+b 115
+b 1
+b 2
+b 3
+b 7
+b 8
+b 16
+b 7
+b 2
+b 12
+b 1
+b 47
+b 48
+b 3
+b 15
+b 16
+b 15
+b 1
+b 12
+b 13
+b 15
+b 17
+b 18
+b 27
+b 10
+b 2
+b 16
+b 1
+b 27
+b 14
+b 15
+b 114
+b 112
+b 2
+b 51
+b 53
+b 54
+b 43
+b 76
+b 87
+b 88
+b 90
+b 85
+b 2
+b 75
+b 1
+b 28
+b 30
+b 31
+b 30
+b 2
+b 1
+b 0
+b 1
+b 55
+b 58
+b 59
+b 61
+b 20
+b 2
+b 1
+b 1
+b 73
+b 74
+b 78
+b 79
+b 85
+b 87
+b 88
+b 91
+b 77
+b 1
+b 86
+b 3
+b 3
+b 10
+b 22
+b 26
+b 27
+b 29
+b 31
+b 8
+b 1
+b 25
+b 2
+b 49
+b 50
+b 52
+b 53
+b 47
+b 2
+b 50
+b 2
+b 9
+b 10
+b 12
+b 14
+b 15
+b 80
+b 8
+b 1
+b 2
+b 0
+b 3
+b 38
+b 35
+b 1
+b 2
+b 3
+b 5
+b 6
+b 2
+b 3
+b 36
+b 41
+b 42
+b 51
+b 52
+b 41
+b 1
+b 49
+b 1
+b 0
+b 1
+b 2
+b 4
+b 6
+b 8
+b 9
+b 11
+b 0
+b 1
+b 7
+b 2
+b 0
+b 11
+b 13
+b 15
+b 16
+b 21
+b 22
+b 24
+b 26
+b 27
+b 15
+b 2
+b 18
+b 1
+b 8
+b 1
+b 27
+b 3
+b 8
+b 13
+b 14
+b 21
+b 22
+b 24
+b 21
+b 2
+b 0
+b 26
+b 23
+b 1
+b 3
+b 5
+b 9
+b 10
+b 12
+b 3
+b 3
+b 6
+b 3
+b 8
+b 7
+b 46
+b 48
+b 49
+b 46
+b 2
+b 1
+b 60
+b 61
+b 63
+b 65
+b 60
+b 2
+b 49
+b 70
+b 72
+b 73
+b 105
+b 106
+b 108
+b 105
+b 2
+b 534
+b 534
+b 1
+b 41
+b 42
+b 45
+b 50
+b 48
+b 49
+b 51
+b 58
+b 61
+b 71
+b 72
+b 74
+b 71
+b 2
+b 44
+b 45
+b 42
+b 2
+b 55
+b 53
+b 1
+b 175
+b 195
+b 196
+b 200
+b 201
+b 199
+b 1
+b 87
+b 293
+b 328
+b 329
+b 349
+b 351
+b 352
+b 326
+b 2
+b 3
+b 12
+b 13
+b 10
+b 5
+b 2
+b 1
+b 11
+b 10
+b 1
+b 27
+b 24
+b 1
+b 8
+b 6
+b 3
+b 13
+b 14
+b 27
+b 10
+b 1
+b 83
+b 9
+b 10
+b 12
+b 13
+b 31
+b 32
+b 34
+b 36
+b 91
+b 12
+b 1
+b 28
+b 2
+b 33
+b 1
+b 22
+b 23
+b 30
+b 41
+b 61
+b 62
+b 22
+b 1
+b 27
+b 3
+b 35
+b 1
+b 2
+b 3
+b 37
+b 37
+b 1
+b 18
+b 19
+b 24
+b 25
+b 17
+b 1
+b 30
+b 4
+b 5
+b 13
+b 15
+b 16
+b 33
+b 5
+b 6
+b 11
+b 13
+b 5
+b 1
+b 8
+b 1
+b 76
+b 118
+b 119
+b 138
+b 139
+b 141
+b 143
+b 144
+b 118
+b 1
+b 135
+b 2
+b 140
+b 2
+b 16
+b 17
+b 30
+b 89
+b 94
+b 95
+b 121
+b 122
+b 124
+b 140
+b 144
+b 87
+b 3
+b 90
+b 1
+b 91
+b 1
+b 51
+b 52
+b 58
+b 59
+b 49
+b 4
+b 53
+b 1
+b 54
+b 1
+b 6
+b 7
+b 9
+b 40
+b 173
+b 174
+b 176
+b 178
+b 180
+b 181
+b 186
+b 178
+b 2
+b 184
+b 1
+b 1
+b 3
+b 4
+b 19
+b 21
+b 23
+b 24
+b 45
+b 47
+b 48
+b 57
+b 43
+b 1
+b 102
+b 100
+b 1
+b 76
+b 77
+b 80
+b 75
+b 1
+b 8
+b 10
+b 11
+b 0
+b 87
+b 26
+b 31
+b 33
+b 34
+b 51
+b 52
+b 72
+b 33
+b 2
+b 47
+b 2
+b 23
+b 1
+b 0
+b 2
+b 3
+b 112
+b 122
+b 123
+b 111
+b 2
+b 118
+b 3
+b 73
+b 74
+b 76
+b 96
+b 21
+b 32
+b 19
+b 1
+b 0
+b 1
+b 0
+b 2
+b 52
+b 9
+b 10
+b 12
+b 13
+b 32
+b 33
+b 35
+b 36
+b 32
+b 3
+b 3
+b 2
+b 2
+b 3
+b 0
+b 1
+b 41
+b 40
+b 1
+b 15
+b 18
+b 1
+b 2
+b 4
+b 5
+b 7
+b 10
+b 1
+b 3
+b 4
+b 4
+b 0
+b 1
+b 15
+b 17
+b 18
+b 15
+b 2
+b 10
+b 8
+b 9
+b 30
+b 32
+b 8
+b 1
+b 2
+b 4
+b 5
+b 7
+b 9
+b 10
+b 12
+b 13
+b 17
+b 18
+b 20
+b 29
+b 9
+b 3
+b 17
+b 1
+b 23
+b 2
+b 549
+b 551
+b 553
+b 554
+b 18
+b 19
+b 18
+b 1
+b 6
+b 4
+b 2
+b 5
+b 31
+b 18
+b 19
+b 21
+b 21
+b 1
+b 128
+b 139
+b 138
+b 2
+b 68
+b 69
+b 67
+b 1
+b 17
+b 19
+b 20
+b 22
+b 17
+b 2
+b 4
+b 5
+b 7
+b 9
+b 202
+b 8
+b 9
+b 11
+b 13
+b 15
+b 16
+b 19
+b 15
+b 3
+b 2
+b 3
+b 5
+b 0
+b 2
+b 21
+b 21
+b 22
+b 24
+b 25
+b 27
+b 160
+b 161
+b 1
+b 8
+b 238
+b 266
+b 267
+b 236
+b 2
+b 264
+b 2
+b 41
+b 42
+b 125
+b 126
+b 128
+b 130
+b 40
+b 1
+b 25
+b 26
+b 31
+b 33
+b 34
+b 37
+b 2
+b 3
+b 6
+b 7
+b 1
+b 1
+b 5
+b 4
+b 8
+b 6
+b 2
+b 111
+b 9
+b 1
+b 2
+b 5
+b 6
+b 14
+b 13
+b 1
+b 36
+b 35
+b 2
+b 71
+b 73
+b 75
+b 76
+b 75
+b 1
+b 4
+b 5
+b 9
+b 1
+b 0
+b 13
+b 110
+b 18
+b 19
+b 60
+b 61
+b 79
+b 6
+b 8
+b 10
+b 11
+b 13
+b 15
+b 17
+b 18
+b 20
+b 21
+b 8
+b 2
+b 15
+b 3
+b 10
+b 8
+b 3
+b 2
+b 1
+b 4
+b 66
+b 70
+b 78
+b 79
+b 81
+b 82
+b 89
+b 90
+b 95
+b 87
+b 2
+b 82
+b 1
+b 12
+b 10
+b 1
+b 118
+b 115
+b 1
+b 2
+b 3
+b 7
+b 11
+b 12
+b 32
+b 33
+b 31
+b 1
+b 9
+b 15
+b 16
+b 20
+b 4
+b 3
+b 1
+b 130
+b 132
+b 133
+b 139
+b 140
+b 143
+b 144
+b 153
+b 139
+b 4
+b 148
+b 1
+b 2
+b 3
+b 13
+b 2
+b 1
+b 199
+b 200
+b 225
+b 0
+b 6
+b 8
+b 9
+b 15
+b 16
+b 18
+b 15
+b 2
+b 3
+b 1
+b 12
+b 15
+b 16
+b 18
+b 19
+b 21
+b 12
+b 3
+b 15
+b 2
+b 2
+b 9
+b 20
+b 26
+b 24
+b 2
+b 57
+b 0
+b 1
+b 3
+b 2
+b 1
+b 1
+b 88
+b 99
+b 100
+b 109
+b 110
+b 112
+b 88
+b 1
+b 96
+b 2
+b 6
+b 7
+b 11
+b 4
+b 2
+b 17
+b 31
+b 32
+b 42
+b 43
+b 45
+b 31
+b 1
+b 4
+b 2
+b 3
+b 21
+b 62
+b 63
+b 65
+b 67
+b 68
+b 72
+b 73
+b 87
+b 71
+b 1
+b 86
+b 1
+b 29
+b 30
+b 32
+b 74
+b 73
+b 1
+b 10
+b 11
+b 30
+b 31
+b 8
+b 2
+b 26
+b 2
+b 27
+b 1
+b 37
+b 21
+b 30
+b 31
+b 49
+b 30
+b 1
+b 46
+b 1
+b 0
+b 2
+b 3
+b 0
+b 2
+b 20
+b 14
+b 22
+b 23
+b 25
+b 26
+b 13
+b 2
+b 19
+b 1
+b 4
+b 7
+b 19
+b 20
+b 64
+b 66
+b 67
+b 64
+b 3
+b 2
+b 20
+b 21
+b 6
+b 3
+b 1
+b 5
+b 6
+b 20
+b 21
+b 4
+b 1
+b 42
+b 73
+b 80
+b 81
+b 73
+b 1
+b 78
+b 1
+b 41
+b 42
+b 3
+b 25
+b 24
+b 1
+b 2
+b 15
+b 16
+b 0
+b 1
+b 0
+b 2
+b 99
+b 98
+b 2
+b 96
+b 98
+b 99
+b 101
+b 98
+b 2
+b 7
+b 4
+b 5
+b 3
+b 1
+b 0
+b 1
+b 3
+b 68
+b 9
+b 10
+b 12
+b 13
+b 19
+b 8
+b 1
+b 11
+b 2
+b 14
+b 1
+b 1
+b 7
+b 5
+b 39
+b 38
+b 1
+b 35
+b 41
+b 42
+b 44
+b 46
+b 47
+b 34
+b 2
+b 37
+b 2
+b 42
+b 4
+b 8
+b 12
+b 154
+b 185
+b 186
+b 188
+b 189
+b 195
+b 185
+b 3
+b 8
+b 14
+b 16
+b 17
+b 6
+b 3
+b 9
+b 1
+b 10
+b 19
+b 92
+b 100
+b 90
+b 2
+b 2
+b 3
+b 5
+b 13
+b 14
+b 16
+b 0
+b 2
+b 11
+b 2
+b 21
+b 36
+b 20
+b 2
+b 32
+b 2
+b 4
+b 5
+b 7
+b 2
+b 3
+b 8
+b 31
+b 80
+b 81
+b 78
+b 2
+b 62
+b 62
+b 1
+b 0
+b 2
+b 3
+b 19
+b 21
+b 18
+b 3
+b 26
+b 27
+b 30
+b 24
+b 2
+b 27
+b 1
+b 18
+b 20
+b 21
+b 23
+b 25
+b 27
+b 28
+b 29
+b 20
+b 2
+b 7
+b 29
+b 35
+b 36
+b 38
+b 40
+b 42
+b 43
+b 60
+b 38
+b 1
+b 3
+b 4
+b 7
+b 4
+b 3
+b 4
+b 8
+b 2
+b 1
+b 7
+b 1
+b 28
+b 210
+b 236
+b 241
+b 242
+b 235
+b 2
+b 238
+b 1
+b 43
+b 0
+b 6
+b 8
+b 9
+b 11
+b 16
+b 6
+b 2
+b 9
+b 1
+b 2
+b 3
+b 5
+b 6
+b 7
+b 20
+b 52
+b 51
+b 1
+b 19
+b 20
+b 22
+b 23
+b 27
+b 17
+b 2
+b 20
+b 2
+b 21
+b 1
+b 18
+b 4
+b 5
+b 4
+b 1
+b 34
+b 35
+b 41
+b 42
+b 34
+b 2
+b 37
+b 2
+b 3
+b 2
+b 1
+b 0
+b 2
+b 3
+b 5
+b 14
+b 13
+b 2
+b 4
+b 8
+b 9
+b 2
+b 1
+b 49
+b 50
+b 13
+b 14
+b 19
+b 21
+b 23
+b 14
+b 1
+b 7
+b 5
+b 1
+b 5
+b 6
+b 2
+b 9
+b 10
+b 9
+b 2
+b 6
+b 1
+b 0
+b 1
+b 3
+b 4
+b 8
+b 36
+b 37
+b 39
+b 0
+b 3
+b 33
+b 2
+b 83
+b 84
+b 92
+b 93
+b 95
+b 92
+b 2
+b 1
+b 512
+b 513
+b 641
+b 512
+b 2
+b 30
+b 2
+b 3
+b 3
+b 1
+b 48
+b 49
+b 51
+b 21
+b 18
+b 1
+b 51
+b 57
+b 58
+b 97
+b 105
+b 106
+b 113
+b 114
+b 49
+b 3
+b 52
+b 2
+b 91
+b 2
+b 96
+b 2
+b 0
+b 218
+b 18
+b 19
+b 26
+b 28
+b 29
+b 26
+b 2
+b 23
+b 21
+b 1
+b 6
+b 5
+b 1
+b 58
+b 59
+b 58
+b 2
+b 16
+b 17
+b 23
+b 24
+b 26
+b 27
+b 16
+b 2
+b 19
+b 2
+b 23
+b 1
+b 14
+b 142
+b 146
+b 6
+b 42
+b 48
+b 49
+b 51
+b 52
+b 56
+b 51
+b 2
+b 3
+b 1
+b 50
+b 1
+b 103
+b 104
+b 106
+b 107
+b 103
+b 3
+b 17
+b 24
+b 2
+b 3
+b 6
+b 2
+b 4
+b 13
+b 11
+b 1
+b 198
+b 199
+b 31
+b 39
+b 40
+b 38
+b 3
+b 3
+b 0
+b 1
+b 51
+b 54
+b 50
+b 4
+b 44
+b 47
+b 48
+b 50
+b 51
+b 47
+b 3
+b 104
+b 81
+b 88
+b 89
+b 7
+b 17
+b 18
+b 20
+b 15
+b 2
+b 18
+b 1
+b 6
+b 1
+b 0
+b 1
+b 5
+b 470
+b 471
+b 475
+b 468
+b 2
+b 472
+b 1
+b 1
+b 2
+b 3
+b 17
+b 18
+b 25
+b 2
+b 2
+b 12
+b 1
+b 4
+b 6
+b 27
+b 28
+b 36
+b 38
+b 40
+b 4
+b 1
+b 68
+b 70
+b 71
+b 11
+b 21
+b 25
+b 26
+b 53
+b 23
+b 2
+b 20
+b 1
+b 80
+b 87
+b 89
+b 90
+b 87
+b 2
+b 46
+b 18
+b 4
+b 5
+b 2
+b 2
+b 19
+b 20
+b 38
+b 40
+b 41
+b 17
+b 2
+b 39
+b 1
+b 10
+b 11
+b 13
+b 14
+b 10
+b 12
+b 34
+b 37
+b 8
+b 9
+b 11
+b 12
+b 19
+b 11
+b 2
+b 15
+b 1
+b 71
+b 103
+b 104
+b 103
+b 3
+b 68
+b 1
+b 153
+b 154
+b 156
+b 157
+b 161
+b 162
+b 173
+b 174
+b 153
+b 3
+b 2
+b 7
+b 10
+b 6
+b 4
+b 7
+b 10
+b 11
+b 20
+b 23
+b 24
+b 43
+b 42
+b 1
+b 35
+b 38
+b 40
+b 42
+b 44
+b 45
+b 47
+b 48
+b 40
+b 1
+b 2
+b 4
+b 7
+b 8
+b 10
+b 18
+b 6
+b 7
+b 9
+b 18
+b 6
+b 2
+b 14
+b 2
+b 4
+b 4
+b 1
+b 4
+b 5
+b 8
+b 9
+b 4
+b 4
+b 36
+b 38
+b 39
+b 41
+b 42
+b 44
+b 60
+b 44
+b 1
+b 27
+b 38
+b 39
+b 0
+b 1
+b 18
+b 43
+b 47
+b 48
+b 51
+b 91
+b 47
+b 3
+b 86
+b 2
+b 54
+b 34
+b 36
+b 37
+b 5
+b 6
+b 4
+b 1
+b 4
+b 5
+b 12
+b 4
+b 2
+b 43
+b 45
+b 47
+b 48
+b 46
+b 47
+b 66
+b 46
+b 2
+b 0
+b 1
+b 8
+b 82
+b 85
+b 92
+b 92
+b 1
+b 2
+b 3
+b 10
+b 11
+b 13
+b 14
+b 2
+b 1
+b 7
+b 2
+b 0
+b 26
+b 24
+b 2
+b 4
+b 5
+b 7
+b 20
+b 21
+b 18
+b 2
+b 16
+b 17
+b 19
+b 24
+b 25
+b 30
+b 14
+b 2
+b 22
+b 1
+b 102
+b 0
+b 2
+b 3
+b 8
+b 9
+b 17
+b 19
+b 0
+b 2
+b 6
+b 2
+b 16
+b 23
+b 24
+b 23
+b 1
+b 1
+b 12
+b 13
+b 0
+b 2
+b 8
+b 2
+b 9
+b 1
+b 6
+b 7
+b 9
+b 13
+b 34
+b 35
+b 37
+b 33
+b 1
+b 7
+b 8
+b 10
+b 5
+b 2
+b 16
+b 14
+b 1
+b 105
+b 18
+b 20
+b 21
+b 23
+b 27
+b 28
+b 32
+b 23
+b 1
+b 192
+b 248
+b 190
+b 1
+b 4
+b 6
+b 7
+b 18
+b 19
+b 25
+b 6
+b 2
+b 14
+b 2
+b 20
+b 1
+b 31
+b 28
+b 1
+b 2
+b 0
+b 2
+b 2
+b 1
+b 1
+b 11
+b 12
+b 14
+b 15
+b 0
+b 2
+b 3
+b 0
+b 38
+b 39
+b 61
+b 62
+b 68
+b 38
+b 2
+b 57
+b 2
+b 8
+b 9
+b 11
+b 13
+b 14
+b 6
+b 2
+b 11
+b 1
+b 2
+b 35
+b 33
+b 1
+b 142
+b 146
+b 147
+b 151
+b 146
+b 2
+b 147
+b 1
+b 35
+b 34
+b 1
+b 86
+b 94
+b 95
+b 102
+b 104
+b 105
+b 110
+b 111
+b 85
+b 2
+b 90
+b 2
+b 100
+b 2
+b 103
+b 1
+b 3
+b 4
+b 8
+b 79
+b 83
+b 84
+b 116
+b 117
+b 126
+b 127
+b 136
+b 125
+b 1
+b 134
+b 2
+b 132
+b 134
+b 135
+b 130
+b 1
+b 1
+b 1
+b 8
+b 10
+b 12
+b 13
+b 10
+b 2
+b 6
+b 66
+b 68
+b 70
+b 71
+b 99
+b 100
+b 64
+b 1
+b 69
+b 2
+b 94
+b 2
+b 0
+b 1
+b 10
+b 9
+b 1
+b 75
+b 104
+b 105
+b 75
+b 1
+b 102
+b 1
+b 66
+b 16
+b 17
+b 34
+b 36
+b 48
+b 49
+b 36
+b 1
+b 45
+b 2
+b 31
+b 29
+b 1
+b 42
+b 11
+b 36
+b 38
+b 39
+b 36
+b 2
+b 7
+b 7
+b 1
+b 17
+b 17
+b 1
+b 13
+b 25
+b 26
+b 52
+b 82
+b 83
+b 85
+b 87
+b 89
+b 90
+b 126
+b 85
+b 1
+b 39
+b 41
+b 2
+b 8
+b 7
+b 2
+b 2
+b 4
+b 5
+b 4
+b 2
+b 4
+b 6
+b 7
+b 11
+b 6
+b 2
+b 228
+b 74
+b 75
+b 3
+b 4
+b 2
+b 1
+b 103
+b 145
+b 150
+b 151
+b 101
+b 3
+b 146
+b 1
+b 4
+b 90
+b 91
+b 100
+b 103
+b 99
+b 3
+b 37
+b 39
+b 41
+b 59
+b 5
+b 10
+b 11
+b 13
+b 15
+b 16
+b 15
+b 2
+b 3
+b 1
+b 144
+b 146
+b 146
+b 1
+b 41
+b 58
+b 60
+b 62
+b 63
+b 65
+b 66
+b 83
+b 62
+b 3
+b 80
+b 1
+b 0
+b 1
+b 1
+b 0
+b 2
+b 41
+b 44
+b 43
+b 1
+b 6
+b 26
+b 0
+b 2
+b 3
+b 5
+b 6
+b 8
+b 8
+b 1
+b 4
+b 5
+b 2
+b 3
+b 12
+b 13
+b 12
+b 1
+b 2
+b 10
+b 11
+b 1
+b 11
+b 12
+b 14
+b 20
+b 0
+b 1
+b 6
+b 0
+b 1
+b 34
+b 48
+b 49
+b 51
+b 53
+b 54
+b 51
+b 2
+b 474
+b 472
+b 2
+b 12
+b 13
+b 23
+b 24
+b 28
+b 29
+b 12
+b 2
+b 19
+b 2
+b 5
+b 14
+b 13
+b 2
+b 37
+b 48
+b 34
+b 1
+b 2
+b 6
+b 7
+b 4
+b 5
+b 7
+b 8
+b 4
+b 3
+b 7
+b 9
+b 7
+b 3
+b 52
+b 60
+b 61
+b 0
+b 68
+b 71
+b 72
+b 81
+b 82
+b 68
+b 3
+b 79
+b 1
+b 30
+b 6
+b 7
+b 9
+b 11
+b 6
+b 2
+b 80
+b 101
+b 17
+b 19
+b 20
+b 28
+b 29
+b 32
+b 34
+b 35
+b 37
+b 15
+b 1
+b 18
+b 2
+b 24
+b 1
+b 18
+b 60
+b 66
+b 58
+b 1
+b 17
+b 18
+b 20
+b 21
+b 23
+b 24
+b 26
+b 15
+b 2
+b 18
+b 3
+b 59
+b 58
+b 1
+b 30
+b 36
+b 37
+b 39
+b 40
+b 39
+b 2
+b 18
+b 16
+b 2
+b 0
+b 3
+b 277
+b 284
+b 285
+b 298
+b 283
+b 1
+b 115
+b 116
+b 113
+b 2
+b 4
+b 5
+b 1
+b 1
+b 24
+b 25
+b 27
+b 28
+b 24
+b 3
+b 116
+b 119
+b 135
+b 136
+b 138
+b 139
+b 116
+b 4
+b 130
+b 1
+b 0
+b 4
+b 0
+b 176
+b 183
+b 185
+b 187
+b 189
+b 191
+b 192
+b 195
+b 196
+b 176
+b 1
+b 190
+b 4
+b 5
+b 4
+b 1
+b 2
+b 14
+b 15
+b 17
+b 18
+b 23
+b 24
+b 0
+b 1
+b 13
+b 3
+b 3
+b 21
+b 45
+b 127
+b 131
+b 132
+b 136
+b 43
+b 2
+b 20
+b 1
+b 74
+b 76
+b 77
+b 76
+b 2
+b 16
+b 17
+b 14
+b 2
+b 0
+b 62
+b 64
+b 65
+b 74
+b 75
+b 78
+b 62
+b 2
+b 40
+b 41
+b 55
+b 57
+b 58
+b 60
+b 61
+b 62
+b 40
+b 1
+b 54
+b 2
+b 60
+b 6
+b 10
+b 52
+b 53
+b 65
+b 66
+b 51
+b 1
+b 64
+b 2
+b 17
+b 27
+b 29
+b 14
+b 1
+b 31
+b 55
+b 58
+b 59
+b 54
+b 4
+b 30
+b 1
+b 28
+b 40
+b 41
+b 43
+b 44
+b 40
+b 3
+b 1
+b 2
+b 0
+b 6
+b 36
+b 35
+b 2
+b 10
+b 12
+b 13
+b 10
+b 2
+b 0
+b 2
+b 3
+b 10
+b 12
+b 19
+b 21
+b 22
+b 24
+b 25
+b 19
+b 2
+b 22
+b 2
+b 2
+b 4
+b 5
+b 7
+b 8
+b 10
+b 0
+b 1
+b 3
+b 3
+b 19
+b 21
+b 22
+b 90
+b 92
+b 93
+b 95
+b 97
+b 98
+b 100
+b 110
+b 95
+b 2
+b 106
+b 3
+b 98
+b 1
+b 15
+b 3
+b 13
+b 14
+b 17
+b 18
+b 26
+b 27
+b 12
+b 1
+b 16
+b 2
+b 21
+b 2
+b 2
+b 3
+b 2
+b 2
+b 1
+b 41
+b 41
+b 1
+b 497
+b 498
+b 622
+b 624
+b 626
+b 495
+b 2
+b 618
+b 1
+b 0
+b 1
+b 3
+b 4
+b 5
+b 0
+b 5
+b 54
+b 62
+b 63
+b 79
+b 81
+b 79
+b 1
+b 36
+b 42
+b 43
+b 34
+b 2
+b 40
+b 1
+b 41
+b 42
+b 47
+b 100
+b 4
+b 5
+b 33
+b 32
+b 2
+b 4
+b 1
+b 1
+b 0
+b 2
+b 4
+b 5
+b 6
+b 21
+b 57
+b 36
+b 37
+b 2
+b 5
+b 6
+b 8
+b 9
+b 32
+b 33
+b 37
+b 54
+b 56
+b 4
+b 1
+b 55
+b 1
+b 13
+b 10
+b 1
+b 5
+b 11
+b 12
+b 11
+b 2
+b 20
+b 23
+b 24
+b 26
+b 23
+b 3
+b 0
+b 4
+b 8
+b 60
+b 61
+b 0
+b 2
+b 2
+b 1
+b 10
+b 20
+b 21
+b 28
+b 29
+b 39
+b 40
+b 20
+b 2
+b 24
+b 2
+b 35
+b 2
+b 32
+b 1
+b 37
+b 8
+b 9
+b 4
+b 10
+b 11
+b 26
+b 27
+b 33
+b 62
+b 31
+b 3
+b 57
+b 2
+b 26
+b 1
+b 0
+b 1
+b 4
+b 52
+b 54
+b 55
+b 57
+b 54
+b 3
+b 0
+b 2
+b 3
+b 13
+b 11
+b 1
+b 38
+b 39
+b 41
+b 43
+b 44
+b 46
+b 47
+b 38
+b 2
+b 9
+b 14
+b 60
+b 4
+b 5
+b 14
+b 15
+b 3
+b 2
+b 2
+b 1
+b 5
+b 6
+b 0
+b 1
+b 3
+b 5
+b 33
+b 34
+b 50
+b 51
+b 59
+b 60
+b 67
+b 4
+b 2
+b 30
+b 1
+b 21
+b 25
+b 26
+b 28
+b 24
+b 1
+b 27
+b 1
+b 7
+b 8
+b 29
+b 13
+b 15
+b 18
+b 19
+b 27
+b 42
+b 44
+b 46
+b 47
+b 54
+b 44
+b 2
+b 52
+b 1
+b 4
+b 16
+b 18
+b 19
+b 4
+b 1
+b 15
+b 2
+b 5
+b 6
+b 10
+b 37
+b 40
+b 41
+b 4
+b 21
+b 22
+b 24
+b 25
+b 21
+b 3
+b 14
+b 15
+b 19
+b 51
+b 52
+b 14
+b 2
+b 49
+b 1
+b 15
+b 1
+b 5
+b 17
+b 18
+b 24
+b 16
+b 1
+b 2
+b 1
+b 1
+b 2
+b 3
+b 2
+b 2
+b 18
+b 47
+b 48
+b 66
+b 19
+b 20
+b 26
+b 27
+b 34
+b 19
+b 2
+b 22
+b 2
+b 29
+b 1
+b 105
+b 104
+b 1
+b 2
+b 0
+b 1
+b 82
+b 2
+b 4
+b 5
+b 0
+b 1
+b 3
+b 4
+b 6
+b 0
+b 3
+b 119
+b 123
+b 124
+b 126
+b 127
+b 117
+b 2
+b 121
+b 3
+b 41
+b 52
+b 56
+b 55
+b 1
+b 339
+b 346
+b 348
+b 349
+b 337
+b 3
+b 343
+b 2
+b 94
+b 101
+b 102
+b 91
+b 1
+b 4
+b 5
+b 10
+b 57
+b 58
+b 60
+b 73
+b 74
+b 77
+b 56
+b 1
+b 72
+b 5
+b 187
+b 193
+b 194
+b 196
+b 198
+b 199
+b 196
+b 2
+b 68
+b 70
+b 72
+b 73
+b 91
+b 92
+b 96
+b 70
+b 2
+b 89
+b 2
+b 32
+b 35
+b 43
+b 8
+b 16
+b 17
+b 19
+b 20
+b 14
+b 2
+b 7
+b 1
+b 16
+b 1
+b 0
+b 1
+b 0
+b 2
+b 224
+b 236
+b 237
+b 48
+b 49
+b 48
+b 1
+b 29
+b 30
+b 40
+b 29
+b 2
+b 36
+b 1
+b 6
+b 7
+b 9
+b 15
+b 16
+b 18
+b 19
+b 15
+b 3
+b 10
+b 9
+b 2
+b 3
+b 0
+b 1
+b 97
+b 99
+b 100
+b 110
+b 0
+b 1
+b 8
+b 10
+b 0
+b 1
+b 6
+b 3
+b 0
+b 2
+b 3
+b 5
+b 6
+b 9
+b 20
+b 0
+b 2
+b 3
+b 4
+b 12
+b 1
+b 16
+b 18
+b 25
+b 5
+b 25
+b 26
+b 32
+b 33
+b 35
+b 36
+b 38
+b 40
+b 42
+b 25
+b 2
+b 28
+b 2
+b 31
+b 2
+b 186
+b 186
+b 1
+b 12
+b 13
+b 15
+b 16
+b 24
+b 26
+b 27
+b 12
+b 3
+b 23
+b 3
+b 15
+b 15
+b 1
+b 3
+b 2
+b 2
+b 24
+b 25
+b 31
+b 32
+b 37
+b 24
+b 1
+b 2
+b 10
+b 11
+b 17
+b 10
+b 2
+b 8
+b 9
+b 0
+b 2
+b 86
+b 43
+b 44
+b 14
+b 16
+b 17
+b 8
+b 331
+b 332
+b 341
+b 329
+b 2
+b 338
+b 1
+b 123
+b 124
+b 121
+b 2
+b 75
+b 81
+b 93
+b 94
+b 99
+b 100
+b 107
+b 108
+b 109
+b 93
+b 1
+b 96
+b 2
+b 1
+b 70
+b 62
+b 63
+b 97
+b 99
+b 100
+b 95
+b 1
+b 0
+b 1
+b 5
+b 0
+b 2
+b 26
+b 5
+b 6
+b 21
+b 94
+b 7
+b 13
+b 15
+b 27
+b 31
+b 32
+b 34
+b 37
+b 38
+b 25
+b 3
+b 0
+b 1
+b 7
+b 0
+b 2
+b 3
+b 1
+b 18
+b 9
+b 13
+b 24
+b 25
+b 27
+b 7
+b 2
+b 22
+b 2
+b 0
+b 2
+b 3
+b 5
+b 14
+b 41
+b 42
+b 53
+b 54
+b 2
+b 4
+b 5
+b 14
+b 24
+b 13
+b 15
+b 16
+b 22
+b 24
+b 25
+b 11
+b 1
+b 14
+b 2
+b 2
+b 103
+b 2
+b 3
+b 1
+b 1
+b 3
+b 16
+b 17
+b 16
+b 1
+b 116
+b 2
+b 3
+b 2
+b 1
+b 2
+b 0
+b 2
+b 0
+b 2
+b 94
+b 3
+b 2
+b 2
+b 6
+b 0
+b 1
+b 14
+b 15
+b 17
+b 19
+b 20
+b 17
+b 2
+b 0
+b 1
+b 22
+b 22
+b 1
+b 79
+b 80
+b 79
+b 1
+b 0
+b 1
+b 111
+b 114
+b 115
+b 1
+b 7
+b 13
+b 14
+b 40
+b 42
+b 44
+b 45
+b 47
+b 49
+b 38
+b 1
+b 11
+b 71
+b 72
+b 80
+b 78
+b 2
+b 72
+b 1
+b 8
+b 9
+b 23
+b 0
+b 1
+b 3
+b 4
+b 5
+b 2
+b 111
+b 115
+b 117
+b 118
+b 0
+b 1
+b 7
+b 8
+b 10
+b 7
+b 2
+b 16
+b 19
+b 20
+b 22
+b 23
+b 14
+b 5
+b 17
+b 2
+b 2
+b 4
+b 13
+b 0
+b 1
+b 12
+b 1
+b 147
+b 19
+b 20
+b 8
+b 10
+b 12
+b 13
+b 12
+b 1
+b 5
+b 1
+b 13
+b 11
+b 5
+b 206
+b 208
+b 209
+b 216
+b 217
+b 221
+b 229
+b 230
+b 208
+b 1
+b 213
+b 2
+b 217
+b 2
+b 222
+b 3
+b 18
+b 6
+b 11
+b 21
+b 22
+b 10
+b 2
+b 18
+b 1
+b 8
+b 16
+b 17
+b 8
+b 10
+b 26
+b 27
+b 6
+b 7
+b 13
+b 12
+b 1
+b 48
+b 46
+b 2
+b 241
+b 243
+b 244
+b 241
+b 2
+b 6
+b 7
+b 9
+b 10
+b 12
+b 8
+b 28
+b 34
+b 35
+b 40
+b 41
+b 45
+b 46
+b 48
+b 56
+b 62
+b 28
+b 1
+b 31
+b 2
+b 37
+b 1
+b 37
+b 44
+b 45
+b 57
+b 58
+b 57
+b 2
+b 54
+b 1
+b 12
+b 10
+b 1
+b 184
+b 185
+b 85
+b 3
+b 5
+b 6
+b 29
+b 5
+b 1
+b 26
+b 1
+b 16
+b 28
+b 29
+b 31
+b 33
+b 35
+b 37
+b 38
+b 37
+b 1
+b 0
+b 0
+b 1
+b 65
+b 68
+b 69
+b 71
+b 73
+b 74
+b 78
+b 82
+b 83
+b 94
+b 71
+b 4
+b 72
+b 1
+b 16
+b 153
+b 159
+b 160
+b 159
+b 2
+b 150
+b 1
+b 2
+b 6
+b 146
+b 157
+b 158
+b 157
+b 2
+b 144
+b 1
+b 62
+b 64
+b 65
+b 67
+b 62
+b 2
+b 13
+b 14
+b 81
+b 82
+b 2
+b 3
+b 5
+b 7
+b 8
+b 9
+b 6
+b 2
+b 7
+b 1
+b 30
+b 48
+b 49
+b 21
+b 23
+b 24
+b 21
+b 2
+b 0
+b 2
+b 2
+b 1
+b 0
+b 0
+b 1
+b 34
+b 38
+b 39
+b 45
+b 129
+b 38
+b 1
+b 42
+b 1
+b 39
+b 225
+b 227
+b 228
+b 231
+b 232
+b 223
+b 1
+b 226
+b 4
+b 9
+b 13
+b 4
+b 3
+b 1
+b 0
+b 2
+b 3
+b 5
+b 2
+b 3
+b 4
+b 65
+b 67
+b 75
+b 76
+b 79
+b 67
+b 1
+b 71
+b 1
+b 0
+b 13
+b 14
+b 64
+b 80
+b 81
+b 86
+b 80
+b 1
+b 83
+b 1
+b 1
+b 2
+b 17
+b 18
+b 0
+b 1
+b 0
+b 4
+b 6
+b 7
+b 9
+b 4
+b 5
+b 12
+b 13
+b 14
+b 4
+b 2
+b 9
+b 3
+b 0
+b 3
+b 4
+b 0
+b 4
+b 37
+b 36
+b 2
+b 13
+b 17
+b 18
+b 20
+b 21
+b 43
+b 20
+b 1
+b 0
+b 1
+b 9
+b 2
+b 12
+b 13
+b 23
+b 24
+b 28
+b 29
+b 35
+b 0
+b 1
+b 22
+b 2
+b 75
+b 83
+b 84
+b 119
+b 121
+b 122
+b 124
+b 126
+b 127
+b 129
+b 82
+b 1
+b 120
+b 2
+b 11
+b 9
+b 3
+b 0
+b 2
+b 0
+b 1
+b 2
+b 3
+b 0
+b 2
+b 3
+b 4
+b 0
+b 1
+b 15
+b 25
+b 26
+b 37
+b 38
+b 49
+b 37
+b 1
+b 46
+b 3
+b 14
+b 15
+b 17
+b 7
+b 9
+b 10
+b 22
+b 25
+b 26
+b 8
+b 1
+b 4
+b 5
+b 11
+b 13
+b 14
+b 11
+b 2
+b 1
+b 0
+b 2
+b 64
+b 53
+b 54
+b 52
+b 3
+b 13
+b 11
+b 5
+b 0
+b 2
+b 3
+b 5
+b 16
+b 0
+b 2
+b 21
+b 19
+b 2
+b 12
+b 16
+b 17
+b 34
+b 13
+b 10
+b 1
+b 0
+b 2
+b 3
+b 4
+b 18
+b 31
+b 32
+b 34
+b 36
+b 36
+b 1
+b 5
+b 3
+b 2
+b 89
+b 96
+b 98
+b 99
+b 106
+b 99
+b 1
+b 4
+b 5
+b 2
+b 4
+b 76
+b 75
+b 1
+b 31
+b 42
+b 43
+b 55
+b 40
+b 2
+b 30
+b 1
+b 40
+b 41
+b 43
+b 44
+b 43
+b 2
+b 33
+b 31
+b 1
+b 82
+b 262
+b 263
+b 265
+b 265
+b 1
+b 15
+b 16
+b 18
+b 19
+b 26
+b 27
+b 15
+b 3
+b 23
+b 1
+b 0
+b 1
+b 1
+b 16
+b 26
+b 27
+b 29
+b 30
+b 29
+b 1
+b 3
+b 15
+b 16
+b 23
+b 1
+b 1
+b 320
+b 331
+b 318
+b 3
+b 204
+b 205
+b 210
+b 212
+b 213
+b 216
+b 217
+b 210
+b 2
+b 32
+b 30
+b 1
+b 109
+b 29
+b 31
+b 32
+b 34
+b 36
+b 37
+b 39
+b 40
+b 46
+b 34
+b 2
+b 37
+b 2
+b 40
+b 1
+b 177
+b 278
+b 284
+b 285
+b 285
+b 1
+b 82
+b 83
+b 80
+b 2
+b 99
+b 96
+b 1
+b 0
+b 1
+b 7
+b 0
+b 2
+b 0
+b 1
+b 3
+b 79
+b 4
+b 5
+b 4
+b 2
+b 1
+b 1
+b 17
+b 19
+b 20
+b 17
+b 2
+b 7
+b 15
+b 16
+b 17
+b 54
+b 8
+b 6
+b 0
+b 1
+b 8
+b 10
+b 12
+b 13
+b 0
+b 1
+b 3
+b 5
+b 6
+b 7
+b 18
+b 46
+b 48
+b 49
+b 33
+b 31
+b 1
+b 2
+b 10
+b 11
+b 2
+b 1
+b 7
+b 2
+b 188
+b 189
+b 193
+b 194
+b 204
+b 241
+b 242
+b 274
+b 275
+b 277
+b 191
+b 2
+b 239
+b 2
+b 7
+b 28
+b 80
+b 81
+b 83
+b 86
+b 78
+b 2
+b 27
+b 1
+b 9
+b 13
+b 12
+b 2
+b 33
+b 35
+b 36
+b 41
+b 6
+b 7
+b 5
+b 1
+b 4
+b 11
+b 11
+b 1
+b 570
+b 574
+b 572
+b 1
+b 569
+b 1
+b 6
+b 7
+b 9
+b 10
+b 19
+b 20
+b 6
+b 3
+b 14
+b 15
+b 27
+b 8
+b 14
+b 15
+b 23
+b 25
+b 26
+b 28
+b 6
+b 3
+b 11
+b 2
+b 15
+b 1
+b 2
+b 51
+b 58
+b 59
+b 62
+b 69
+b 70
+b 51
+b 1
+b 56
+b 1
+b 6
+b 7
+b 17
+b 18
+b 0
+b 2
+b 26
+b 27
+b 39
+b 26
+b 24
+b 1
+b 22
+b 23
+b 20
+b 2
+b 5
+b 6
+b 11
+b 10
+b 1
+b 17
+b 32
+b 38
+b 39
+b 41
+b 42
+b 48
+b 36
+b 2
+b 44
+b 3
+b 31
+b 1
+b 23
+b 47
+b 0
+b 242
+b 240
+b 3
+b 93
+b 4
+b 1
+b 1
+b 0
+b 2
+b 3
+b 5
+b 13
+b 14
+b 2
+b 2
+b 2
+b 3
+b 62
+b 28
+b 30
+b 50
+b 54
+b 55
+b 57
+b 65
+b 66
+b 68
+b 69
+b 80
+b 48
+b 2
+b 66
+b 1
+b 20
+b 77
+b 81
+b 82
+b 75
+b 3
+b 18
+b 19
+b 21
+b 34
+b 18
+b 2
+b 11
+b 12
+b 14
+b 66
+b 16
+b 17
+b 19
+b 21
+b 22
+b 15
+b 1
+b 113
+b 114
+b 111
+b 2
+b 112
+b 1
+b 1
+b 0
+b 2
+b 1
+b 3
+b 15
+b 16
+b 31
+b 42
+b 44
+b 45
+b 51
+b 3
+b 1
+b 12
+b 3
+b 49
+b 53
+b 55
+b 56
+b 47
+b 3
+b 10
+b 8
+b 1
+b 39
+b 40
+b 53
+b 30
+b 32
+b 33
+b 30
+b 2
+b 1
+b 6
+b 7
+b 10
+b 6
+b 3
+b 27
+b 28
+b 33
+b 123
+b 122
+b 1
+b 15
+b 8
+b 9
+b 11
+b 12
+b 14
+b 16
+b 17
+b 19
+b 8
+b 3
+b 13
+b 2
+b 46
+b 50
+b 51
+b 49
+b 1
+b 1
+b 0
+b 1
+b 17
+b 41
+b 40
+b 2
+b 116
+b 122
+b 120
+b 3
+b 115
+b 1
+b 24
+b 25
+b 27
+b 27
+b 1
+b 13
+b 0
+b 2
+b 53
+b 61
+b 0
+b 2
+b 3
+b 5
+b 6
+b 64
+b 62
+b 2
+b 10
+b 11
+b 10
+b 1
+b 4
+b 8
+b 6
+b 1
+b 2
+b 3
+b 0
+b 2
+b 49
+b 48
+b 1
+b 13
+b 38
+b 39
+b 41
+b 46
+b 47
+b 88
+b 88
+b 1
+b 43
+b 1
+b 11
+b 11
+b 1
+b 6
+b 10
+b 11
+b 13
+b 14
+b 16
+b 39
+b 38
+b 1
+b 2
+b 0
+b 3
+b 2
+b 3
+b 0
+b 5
+b 11
+b 22
+b 23
+b 33
+b 34
+b 31
+b 2
+b 165
+b 186
+b 187
+b 212
+b 326
+b 327
+b 332
+b 326
+b 1
+b 329
+b 1
+b 123
+b 124
+b 99
+b 44
+b 5
+b 9
+b 11
+b 11
+b 1
+b 9
+b 10
+b 12
+b 13
+b 15
+b 17
+b 18
+b 19
+b 7
+b 2
+b 10
+b 2
+b 118
+b 119
+b 6
+b 8
+b 9
+b 6
+b 2
+b 2
+b 3
+b 5
+b 0
+b 2
+b 15
+b 0
+b 2
+b 86
+b 103
+b 104
+b 106
+b 101
+b 2
+b 104
+b 1
+b 85
+b 1
+b 39
+b 8
+b 1
+b 101
+b 102
+b 29
+b 30
+b 8
+b 11
+b 6
+b 1
+b 7
+b 0
+b 2
+b 2
+b 1
+b 4
+b 7
+b 8
+b 10
+b 13
+b 14
+b 19
+b 20
+b 13
+b 1
+b 16
+b 2
+b 2
+b 2
+b 1
+b 15
+b 576
+b 583
+b 584
+b 588
+b 589
+b 583
+b 2
+b 574
+b 1
+b 19
+b 20
+b 2
+b 77
+b 82
+b 83
+b 14
+b 15
+b 20
+b 21
+b 26
+b 27
+b 29
+b 31
+b 32
+b 40
+b 20
+b 1
+b 23
+b 2
+b 28
+b 2
+b 33
+b 2
+b 5
+b 6
+b 37
+b 38
+b 47
+b 4
+b 1
+b 9
+b 3
+b 3
+b 1
+b 5
+b 16
+b 13
+b 14
+b 16
+b 18
+b 19
+b 12
+b 1
+b 17
+b 1
+b 4
+b 2
+b 3
+b 26
+b 28
+b 31
+b 32
+b 52
+b 1
+b 193
+b 195
+b 196
+b 199
+b 200
+b 202
+b 203
+b 208
+b 212
+b 202
+b 1
+b 205
+b 1
+b 92
+b 103
+b 32
+b 30
+b 1
+b 57
+b 62
+b 63
+b 59
+b 1
+b 427
+b 428
+b 430
+b 432
+b 433
+b 439
+b 482
+b 0
+b 1
+b 10
+b 105
+b 2
+b 7
+b 8
+b 10
+b 12
+b 13
+b 2
+b 1
+b 5
+b 1
+b 0
+b 1
+b 3
+b 10
+b 104
+b 10
+b 23
+b 24
+b 31
+b 32
+b 33
+b 30
+b 3
+b 29
+b 27
+b 2
+b 8
+b 14
+b 15
+b 19
+b 21
+b 22
+b 24
+b 17
+b 1
+b 4
+b 0
+b 1
+b 3
+b 5
+b 18
+b 20
+b 21
+b 42
+b 43
+b 40
+b 2
+b 5
+b 6
+b 12
+b 11
+b 8
+b 12
+b 13
+b 29
+b 30
+b 29
+b 1
+b 20
+b 21
+b 20
+b 2
+b 1
+b 1
+b 1
+b 10
+b 7
+b 1
+b 11
+b 12
+b 36
+b 37
+b 39
+b 40
+b 44
+b 11
+b 2
+b 32
+b 2
+b 1
+b 8
+b 15
+b 19
+b 36
+b 38
+b 39
+b 54
+b 55
+b 59
+b 7
+b 8
+b 7
+b 1
+b 8
+b 8
+b 1
+b 31
+b 41
+b 42
+b 49
+b 51
+b 31
+b 1
+b 38
+b 2
+b 48
+b 1
+b 0
+b 2
+b 29
+b 33
+b 37
+b 38
+b 56
+b 33
+b 1
+b 1
+b 2
+b 23
+b 24
+b 25
+b 0
+b 1
+b 0
+b 83
+b 84
+b 86
+b 87
+b 89
+b 90
+b 92
+b 96
+b 82
+b 1
+b 94
+b 1
+b 44
+b 15
+b 21
+b 23
+b 24
+b 26
+b 28
+b 29
+b 21
+b 2
+b 14
+b 1
+b 27
+b 93
+b 99
+b 100
+b 102
+b 28
+b 2
+b 3
+b 30
+b 32
+b 33
+b 35
+b 30
+b 2
+b 33
+b 1
+b 28
+b 39
+b 40
+b 26
+b 3
+b 35
+b 1
+b 33
+b 34
+b 38
+b 31
+b 2
+b 35
+b 1
+b 2
+b 4
+b 6
+b 7
+b 27
+b 12
+b 13
+b 31
+b 35
+b 12
+b 1
+b 28
+b 1
+b 5
+b 9
+b 10
+b 3
+b 2
+b 7
+b 1
+b 6
+b 7
+b 9
+b 10
+b 12
+b 17
+b 18
+b 22
+b 106
+b 120
+b 122
+b 123
+b 106
+b 1
+b 119
+b 2
+b 9
+b 11
+b 12
+b 18
+b 244
+b 245
+b 248
+b 303
+b 243
+b 6
+b 295
+b 1
+b 57
+b 58
+b 49
+b 50
+b 54
+b 8
+b 25
+b 26
+b 37
+b 23
+b 2
+b 0
+b 1
+b 3
+b 5
+b 0
+b 2
+b 8
+b 9
+b 12
+b 34
+b 32
+b 1
+b 4
+b 19
+b 20
+b 23
+b 24
+b 19
+b 4
+b 1
+b 1
+b 0
+b 80
+b 86
+b 87
+b 89
+b 90
+b 79
+b 2
+b 82
+b 2
+b 70
+b 83
+b 85
+b 86
+b 68
+b 2
+b 29
+b 62
+b 69
+b 70
+b 72
+b 74
+b 75
+b 103
+b 102
+b 1
+b 0
+b 13
+b 19
+b 20
+b 17
+b 18
+b 15
+b 4
+b 6
+b 7
+b 9
+b 6
+b 2
+b 141
+b 213
+b 220
+b 221
+b 229
+b 228
+b 1
+b 15
+b 16
+b 28
+b 30
+b 13
+b 2
+b 84
+b 86
+b 82
+b 1
+b 15
+b 14
+b 2
+b 2
+b 3
+b 5
+b 6
+b 8
+b 0
+b 5
+b 12
+b 72
+b 84
+b 85
+b 108
+b 109
+b 105
+b 1
+b 9
+b 10
+b 9
+b 1
+b 14
+b 12
+b 3
+b 7
+b 14
+b 15
+b 14
+b 1
+b 2
+b 3
+b 2
+b 0
+b 1
+b 379
+b 27
+b 29
+b 30
+b 2
+b 4
+b 5
+b 7
+b 4
+b 2
+b 7
+b 8
+b 20
+b 6
+b 1
+b 446
+b 448
+b 449
+b 456
+b 448
+b 1
+b 453
+b 3
+b 6
+b 7
+b 9
+b 10
+b 26
+b 30
+b 4
+b 2
+b 7
+b 1
+b 0
+b 4
+b 5
+b 46
+b 47
+b 49
+b 70
+b 44
+b 2
+b 67
+b 1
+b 33
+b 35
+b 36
+b 36
+b 1
+b 6
+b 294
+b 297
+b 315
+b 313
+b 2
+b 115
+b 0
+b 1
+b 3
+b 4
+b 11
+b 0
+b 31
+b 36
+b 37
+b 33
+b 1
+b 4
+b 5
+b 2
+b 2
+b 3
+b 4
+b 6
+b 7
+b 9
+b 10
+b 1
+b 2
+b 4
+b 3
+b 143
+b 172
+b 4
+b 1
+b 1
+b 22
+b 23
+b 30
+b 21
+b 1
+b 28
+b 2
+b 19
+b 20
+b 32
+b 99
+b 108
+b 109
+b 105
+b 1
+b 24
+b 29
+b 30
+b 33
+b 29
+b 5
+b 21
+b 1
+b 0
+b 2
+b 3
+b 0
+b 2
+b 104
+b 108
+b 123
+b 124
+b 126
+b 127
+b 123
+b 3
+b 24
+b 41
+b 42
+b 44
+b 49
+b 50
+b 23
+b 2
+b 37
+b 2
+b 1
+b 8
+b 6
+b 1
+b 13
+b 11
+b 1
+b 4
+b 5
+b 10
+b 11
+b 2
+b 2
+b 8
+b 2
+b 9
+b 7
+b 1
+b 40
+b 41
+b 43
+b 38
+b 4
+b 26
+b 27
+b 50
+b 51
+b 53
+b 55
+b 94
+b 93
+b 1
+b 28
+b 31
+b 32
+b 35
+b 36
+b 42
+b 53
+b 55
+b 57
+b 28
+b 3
+b 32
+b 2
+b 35
+b 1
+b 3
+b 5
+b 6
+b 11
+b 12
+b 3
+b 2
+b 8
+b 10
+b 6
+b 1
+b 21
+b 35
+b 36
+b 19
+b 1
+b 4
+b 7
+b 7
+b 1
+b 32
+b 116
+b 117
+b 120
+b 121
+b 130
+b 120
+b 2
+b 31
+b 1
+b 2
+b 3
+b 5
+b 6
+b 13
+b 0
+b 2
+b 58
+b 12
+b 13
+b 16
+b 18
+b 16
+b 1
+b 89
+b 2
+b 3
+b 5
+b 7
+b 27
+b 41
+b 27
+b 1
+b 38
+b 2
+b 19
+b 3
+b 4
+b 6
+b 7
+b 3
+b 3
+b 35
+b 41
+b 42
+b 63
+b 60
+b 1
+b 0
+b 2
+b 3
+b 9
+b 2
+b 2
+b 5
+b 3
+b 5
+b 7
+b 8
+b 10
+b 7
+b 2
+b 23
+b 27
+b 28
+b 26
+b 1
+b 13
+b 15
+b 17
+b 18
+b 23
+b 24
+b 15
+b 2
+b 21
+b 2
+b 0
+b 2
+b 3
+b 2
+b 2
+b 12
+b 18
+b 19
+b 21
+b 23
+b 25
+b 17
+b 1
+b 11
+b 1
+b 382
+b 383
+b 386
+b 387
+b 410
+b 411
+b 573
+b 382
+b 4
+b 568
+b 1
+b 2
+b 3
+b 1
+b 1
+b 0
+b 35
+b 121
+b 122
+b 121
+b 2
+b 34
+b 33
+b 2
+b 1
+b 6
+b 5
+b 1
+b 1
+b 2
+b 12
+b 0
+b 1
+b 93
+b 95
+b 97
+b 98
+b 97
+b 2
+b 0
+b 2
+b 4
+b 0
+b 1
+b 2
+b 3
+b 6
+b 0
+b 2
+b 4
+b 1
+b 49
+b 15
+b 0
+b 2
+b 3
+b 7
+b 2
+b 2
+b 3
+b 1
+b 32
+b 33
+b 35
+b 35
+b 1
+b 1
+b 25
+b 23
+b 3
+b 4
+b 5
+b 3
+b 1
+b 11
+b 20
+b 21
+b 4
+b 17
+b 18
+b 28
+b 17
+b 2
+b 23
+b 1
+b 9
+b 112
+b 114
+b 115
+b 117
+b 119
+b 110
+b 1
+b 113
+b 2
+b 106
+b 110
+b 127
+b 5
+b 47
+b 39
+b 40
+b 42
+b 43
+b 47
+b 46
+b 1
+b 1
+b 2
+b 3
+b 34
+b 2
+b 4
+b 5
+b 7
+b 14
+b 15
+b 37
+b 38
+b 59
+b 4
+b 2
+b 10
+b 2
+b 33
+b 2
+b 51
+b 1
+b 22
+b 23
+b 25
+b 27
+b 28
+b 34
+b 20
+b 2
+b 26
+b 1
+b 2
+b 0
+b 1
+b 1
+b 0
+b 4
+b 179
+b 180
+b 182
+b 184
+b 185
+b 178
+b 1
+b 1
+b 5
+b 5
+b 13
+b 14
+b 18
+b 13
+b 2
+b 14
+b 1
+b 0
+b 2
+b 3
+b 5
+b 7
+b 8
+b 9
+b 0
+b 2
+b 213
+b 242
+b 243
+b 245
+b 246
+b 213
+b 1
+b 239
+b 2
+b 242
+b 2
+b 37
+b 44
+b 45
+b 44
+b 2
+b 34
+b 1
+b 4
+b 5
+b 2
+b 2
+b 0
+b 1
+b 5
+b 4
+b 20
+b 18
+b 3
+b 16
+b 17
+b 20
+b 21
+b 23
+b 15
+b 5
+b 18
+b 1
+b 15
+b 16
+b 1
+b 82
+b 84
+b 85
+b 2
+b 1
+b 1
+b 7
+b 8
+b 5
+b 6
+b 0
+b 2
+b 0
+b 1
+b 23
+b 14
+b 15
+b 16
+b 17
+b 37
+b 12
+b 37
+b 38
+b 35
+b 2
+b 11
+b 1
+b 25
+b 26
+b 23
+b 2
+b 5
+b 6
+b 8
+b 51
+b 48
+b 1
+b 21
+b 29
+b 30
+b 19
+b 2
+b 5
+b 4
+b 1
+b 2
+b 40
+b 39
+b 1
+b 50
+b 51
+b 50
+b 2
+b 2
+b 2
+b 1
+b 30
+b 6
+b 7
+b 9
+b 10
+b 9
+b 1
+b 13
+b 14
+b 13
+b 1
+b 54
+b 49
+b 53
+b 54
+b 2
+b 3
+b 5
+b 56
+b 29
+b 30
+b 32
+b 32
+b 1
+b 26
+b 1
+b 72
+b 70
+b 3
+b 17
+b 19
+b 20
+b 40
+b 45
+b 46
+b 17
+b 3
+b 116
+b 117
+b 131
+b 115
+b 2
+b 127
+b 3
+b 37
+b 38
+b 58
+b 5
+b 6
+b 114
+b 116
+b 117
+b 126
+b 134
+b 116
+b 2
+b 122
+b 3
+b 127
+b 1
+b 99
+b 100
+b 102
+b 103
+b 99
+b 3
+b 130
+b 128
+b 2
+b 80
+b 85
+b 82
+b 1
+b 0
+b 1
+b 4
+b 5
+b 7
+b 9
+b 10
+b 12
+b 0
+b 4
+b 194
+b 194
+b 1
+b 47
+b 46
+b 2
+b 4
+b 8
+b 2
+b 2
+b 55
+b 59
+b 60
+b 62
+b 63
+b 68
+b 69
+b 5
+b 10
+b 24
+b 26
+b 27
+b 29
+b 31
+b 32
+b 33
+b 29
+b 4
+b 1
+b 0
+b 2
+b 37
+b 38
+b 45
+b 66
+b 68
+b 69
+b 71
+b 75
+b 66
+b 2
+b 44
+b 1
+b 40
+b 51
+b 52
+b 54
+b 55
+b 100
+b 101
+b 54
+b 1
+b 97
+b 2
+b 95
+b 95
+b 1
+b 11
+b 72
+b 73
+b 103
+b 29
+b 30
+b 32
+b 33
+b 41
+b 29
+b 3
+b 23
+b 1
+b 1
+b 1
+b 213
+b 1
+b 7
+b 8
+b 12
+b 13
+b 18
+b 11
+b 2
+b 14
+b 3
+b 9
+b 7
+b 3
+b 15
+b 42
+b 44
+b 45
+b 47
+b 49
+b 50
+b 58
+b 47
+b 2
+b 0
+b 2
+b 2
+b 1
+b 49
+b 52
+b 3
+b 5
+b 6
+b 8
+b 9
+b 11
+b 12
+b 14
+b 23
+b 3
+b 2
+b 9
+b 2
+b 62
+b 60
+b 3
+b 7
+b 8
+b 6
+b 1
+b 4
+b 5
+b 13
+b 30
+b 36
+b 37
+b 28
+b 2
+b 47
+b 49
+b 50
+b 31
+b 32
+b 35
+b 39
+b 40
+b 31
+b 3
+b 0
+b 1
+b 16
+b 240
+b 240
+b 1
+b 53
+b 54
+b 53
+b 2
+b 24
+b 25
+b 27
+b 24
+b 2
+b 13
+b 15
+b 16
+b 18
+b 19
+b 28
+b 34
+b 18
+b 2
+b 10
+b 1
+b 21
+b 1
+b 8
+b 13
+b 14
+b 15
+b 200
+b 197
+b 1
+b 20
+b 21
+b 18
+b 2
+b 59
+b 60
+b 57
+b 2
+b 52
+b 53
+b 65
+b 50
+b 2
+b 63
+b 1
+b 39
+b 11
+b 2
+b 3
+b 10
+b 11
+b 13
+b 76
+b 77
+b 81
+b 2
+b 1
+b 7
+b 2
+b 73
+b 2
+b 74
+b 1
+b 89
+b 95
+b 97
+b 98
+b 87
+b 2
+b 21
+b 6
+b 7
+b 1
+b 0
+b 1
+b 21
+b 28
+b 30
+b 32
+b 33
+b 35
+b 28
+b 1
+b 3
+b 4
+b 4
+b 4
+b 8
+b 10
+b 11
+b 13
+b 15
+b 16
+b 19
+b 20
+b 6
+b 1
+b 14
+b 4
+b 8
+b 0
+b 2
+b 3
+b 24
+b 2
+b 1
+b 15
+b 28
+b 29
+b 37
+b 29
+b 1
+b 61
+b 62
+b 61
+b 2
+b 11
+b 9
+b 3
+b 0
+b 6
+b 7
+b 38
+b 39
+b 58
+b 38
+b 2
+b 56
+b 1
+b 53
+b 54
+b 66
+b 67
+b 65
+b 1
+b 8
+b 56
+b 78
+b 79
+b 81
+b 56
+b 1
+b 75
+b 2
+b 7
+b 9
+b 11
+b 12
+b 9
+b 2
+b 18
+b 226
+b 227
+b 247
+b 281
+b 282
+b 284
+b 281
+b 2
+b 5
+b 3
+b 1
+b 8
+b 8
+b 6
+b 2
+b 8
+b 9
+b 11
+b 12
+b 15
+b 11
+b 4
+b 7
+b 8
+b 10
+b 11
+b 22
+b 7
+b 3
+b 36
+b 40
+b 52
+b 53
+b 49
+b 1
+b 4
+b 5
+b 56
+b 57
+b 66
+b 72
+b 2
+b 2
+b 54
+b 2
+b 60
+b 2
+b 90
+b 89
+b 1
+b 14
+b 18
+b 19
+b 21
+b 23
+b 24
+b 31
+b 40
+b 47
+b 53
+b 54
+b 95
+b 104
+b 1
+b 3
+b 4
+b 6
+b 7
+b 9
+b 11
+b 12
+b 13
+b 6
+b 2
+b 13
+b 12
+b 2
+b 2
+b 4
+b 6
+b 7
+b 19
+b 6
+b 2
+b 0
+b 1
+b 0
+b 1
+b 0
+b 114
+b 115
+b 132
+b 133
+b 138
+b 139
+b 132
+b 1
+b 135
+b 2
+b 12
+b 12
+b 1
+b 15
+b 1
+b 8
+b 16
+b 17
+b 25
+b 7
+b 2
+b 12
+b 2
+b 21
+b 18
+b 1
+b 31
+b 32
+b 36
+b 61
+b 62
+b 66
+b 67
+b 30
+b 1
+b 9
+b 7
+b 2
+b 8
+b 46
+b 48
+b 49
+b 55
+b 57
+b 58
+b 57
+b 1
+b 11
+b 13
+b 14
+b 13
+b 2
+b 10
+b 11
+b 10
+b 2
+b 7
+b 1
+b 11
+b 13
+b 14
+b 24
+b 11
+b 2
+b 20
+b 1
+b 50
+b 51
+b 5
+b 67
+b 69
+b 70
+b 73
+b 87
+b 88
+b 67
+b 2
+b 85
+b 2
+b 144
+b 163
+b 142
+b 3
+b 157
+b 1
+b 119
+b 117
+b 119
+b 120
+b 122
+b 123
+b 127
+b 117
+b 2
+b 120
+b 2
+b 0
+b 1
+b 4
+b 7
+b 116
+b 84
+b 86
+b 87
+b 84
+b 2
+b 293
+b 294
+b 347
+b 58
+b 65
+b 67
+b 68
+b 77
+b 67
+b 1
+b 74
+b 1
+b 1
+b 3
+b 5
+b 6
+b 5
+b 2
+b 58
+b 60
+b 61
+b 63
+b 26
+b 28
+b 29
+b 38
+b 39
+b 26
+b 2
+b 4
+b 2
+b 2
+b 42
+b 56
+b 58
+b 59
+b 76
+b 80
+b 81
+b 40
+b 1
+b 57
+b 2
+b 134
+b 137
+b 137
+b 1
+b 3
+b 21
+b 22
+b 24
+b 25
+b 27
+b 28
+b 27
+b 1
+b 1
+b 4
+b 47
+b 52
+b 53
+b 45
+b 1
+b 51
+b 2
+b 18
+b 7
+b 8
+b 17
+b 66
+b 70
+b 81
+b 82
+b 89
+b 90
+b 64
+b 3
+b 78
+b 2
+b 65
+b 1
+b 22
+b 24
+b 43
+b 90
+b 91
+b 93
+b 94
+b 93
+b 2
+b 2
+b 0
+b 1
+b 5
+b 18
+b 0
+b 27
+b 29
+b 30
+b 36
+b 37
+b 49
+b 51
+b 53
+b 54
+b 27
+b 2
+b 34
+b 2
+b 47
+b 2
+b 21
+b 19
+b 3
+b 53
+b 8
+b 9
+b 8
+b 1
+b 2
+b 0
+b 1
+b 18
+b 17
+b 21
+b 22
+b 24
+b 26
+b 27
+b 19
+b 2
+b 24
+b 2
+b 14
+b 16
+b 17
+b 3
+b 2
+b 1
+b 98
+b 106
+b 108
+b 109
+b 114
+b 114
+b 1
+b 21
+b 27
+b 28
+b 19
+b 2
+b 2
+b 3
+b 0
+b 4
+b 15
+b 17
+b 15
+b 1
+b 0
+b 1
+b 7
+b 8
+b 4
+b 75
+b 76
+b 78
+b 85
+b 105
+b 106
+b 108
+b 74
+b 1
+b 104
+b 2
+b 38
+b 39
+b 49
+b 50
+b 52
+b 53
+b 70
+b 73
+b 49
+b 3
+b 66
+b 3
+b 1
+b 65
+b 73
+b 6
+b 16
+b 18
+b 19
+b 21
+b 22
+b 27
+b 28
+b 34
+b 35
+b 16
+b 2
+b 25
+b 2
+b 28
+b 2
+b 5
+b 1
+b 26
+b 99
+b 107
+b 109
+b 110
+b 112
+b 97
+b 2
+b 24
+b 25
+b 27
+b 0
+b 1
+b 17
+b 35
+b 45
+b 67
+b 68
+b 70
+b 71
+b 73
+b 74
+b 80
+b 67
+b 3
+b 23
+b 24
+b 23
+b 2
+b 100
+b 114
+b 30
+b 12
+b 14
+b 15
+b 18
+b 19
+b 21
+b 33
+b 18
+b 2
+b 29
+b 2
+b 38
+b 4
+b 5
+b 36
+b 38
+b 40
+b 41
+b 45
+b 46
+b 38
+b 2
+b 168
+b 7
+b 35
+b 36
+b 41
+b 11
+b 12
+b 41
+b 42
+b 52
+b 41
+b 2
+b 49
+b 1
+b 98
+b 113
+b 114
+b 129
+b 96
+b 3
+b 109
+b 1
+b 39
+b 41
+b 42
+b 54
+b 41
+b 2
+b 50
+b 1
+b 12
+b 9
+b 1
+b 11
+b 20
+b 21
+b 23
+b 25
+b 26
+b 9
+b 2
+b 49
+b 27
+b 25
+b 3
+b 109
+b 115
+b 116
+b 123
+b 124
+b 123
+b 2
+b 120
+b 1
+b 0
+b 1
+b 3
+b 5
+b 34
+b 33
+b 1
+b 384
+b 397
+b 6
+b 5
+b 1
+b 29
+b 30
+b 38
+b 39
+b 41
+b 42
+b 27
+b 2
+b 36
+b 3
+b 26
+b 23
+b 1
+b 178
+b 4
+b 5
+b 22
+b 23
+b 4
+b 5
+b 12
+b 4
+b 2
+b 8
+b 1
+b 61
+b 62
+b 64
+b 66
+b 67
+b 69
+b 70
+b 78
+b 96
+b 66
+b 3
+b 92
+b 1
+b 18
+b 22
+b 20
+b 3
+b 17
+b 1
+b 102
+b 5
+b 6
+b 19
+b 30
+b 32
+b 33
+b 143
+b 5
+b 1
+b 15
+b 1
+b 61
+b 65
+b 104
+b 105
+b 107
+b 108
+b 110
+b 59
+b 1
+b 106
+b 2
+b 2
+b 3
+b 9
+b 7
+b 1
+b 4
+b 5
+b 11
+b 12
+b 4
+b 2
+b 7
+b 2
+b 6
+b 7
+b 6
+b 2
+b 33
+b 243
+b 254
+b 50
+b 54
+b 55
+b 62
+b 61
+b 1
+b 0
+b 2
+b 3
+b 2
+b 2
+b 29
+b 30
+b 29
+b 1
+b 4
+b 10
+b 8
+b 3
+b 42
+b 43
+b 47
+b 48
+b 50
+b 51
+b 60
+b 61
+b 47
+b 4
+b 1
+b 3
+b 0
+b 1
+b 35
+b 36
+b 40
+b 46
+b 7
+b 14
+b 16
+b 18
+b 19
+b 21
+b 22
+b 24
+b 12
+b 1
+b 17
+b 3
+b 59
+b 24
+b 25
+b 0
+b 1
+b 144
+b 145
+b 0
+b 2
+b 141
+b 1
+b 0
+b 1
+b 3
+b 2
+b 1
+b 69
+b 79
+b 80
+b 83
+b 84
+b 79
+b 5
+b 76
+b 1
+b 13
+b 14
+b 16
+b 17
+b 0
+b 1
+b 3
+b 7
+b 31
+b 66
+b 67
+b 24
+b 125
+b 131
+b 137
+b 138
+b 140
+b 142
+b 143
+b 162
+b 163
+b 165
+b 162
+b 3
+b 0
+b 12
+b 33
+b 33
+b 1
+b 14
+b 15
+b 26
+b 28
+b 29
+b 31
+b 51
+b 14
+b 1
+b 74
+b 75
+b 74
+b 2
+b 73
+b 74
+b 77
+b 78
+b 80
+b 71
+b 2
+b 75
+b 2
+b 7
+b 5
+b 1
+b 13
+b 14
+b 6
+b 190
+b 194
+b 195
+b 12
+b 0
+b 1
+b 145
+b 195
+b 0
+b 1
+b 142
+b 2
+b 65
+b 66
+b 69
+b 70
+b 72
+b 86
+b 69
+b 2
+b 82
+b 2
+b 54
+b 141
+b 59
+b 64
+b 65
+b 77
+b 105
+b 106
+b 59
+b 1
+b 62
+b 1
+b 60
+b 33
+b 38
+b 39
+b 43
+b 44
+b 46
+b 48
+b 49
+b 125
+b 42
+b 1
+b 47
+b 2
+b 120
+b 2
+b 18
+b 87
+b 12
+b 13
+b 15
+b 17
+b 19
+b 20
+b 22
+b 10
+b 2
+b 17
+b 2
+b 11
+b 9
+b 2
+b 53
+b 54
+b 146
+b 147
+b 146
+b 1
+b 13
+b 14
+b 11
+b 2
+b 8
+b 7
+b 1
+b 26
+b 31
+b 32
+b 36
+b 37
+b 42
+b 80
+b 81
+b 102
+b 24
+b 2
+b 29
+b 1
+b 122
+b 128
+b 129
+b 141
+b 140
+b 1
+b 3
+b 1
+b 1
+b 1
+b 63
+b 68
+b 69
+b 68
+b 1
+b 60
+b 62
+b 63
+b 65
+b 67
+b 33
+b 34
+b 36
+b 31
+b 2
+b 34
+b 1
+b 19
+b 0
+b 2
+b 3
+b 6
+b 7
+b 18
+b 2
+b 4
+b 66
+b 67
+b 66
+b 2
+b 4
+b 2
+b 1
+b 59
+b 11
+b 12
+b 89
+b 90
+b 106
+b 107
+b 89
+b 2
+b 103
+b 1
+b 4
+b 5
+b 12
+b 18
+b 65
+b 72
+b 74
+b 75
+b 69
+b 1
+b 10
+b 55
+b 56
+b 8
+b 1
+b 2
+b 2
+b 3
+b 6
+b 7
+b 38
+b 41
+b 42
+b 48
+b 49
+b 53
+b 2
+b 4
+b 33
+b 4
+b 3
+b 4
+b 69
+b 108
+b 67
+b 2
+b 0
+b 1
+b 8
+b 121
+b 125
+b 126
+b 145
+b 146
+b 165
+b 166
+b 170
+b 125
+b 2
+b 142
+b 1
+b 118
+b 1
+b 16
+b 17
+b 24
+b 36
+b 22
+b 1
+b 0
+b 113
+b 133
+b 135
+b 137
+b 138
+b 21
+b 22
+b 24
+b 26
+b 27
+b 29
+b 19
+b 2
+b 24
+b 2
+b 1
+b 0
+b 1
+b 12
+b 10
+b 3
+b 9
+b 11
+b 12
+b 14
+b 15
+b 17
+b 32
+b 33
+b 9
+b 2
+b 12
+b 2
+b 0
+b 34
+b 2
+b 0
+b 1
+b 4
+b 5
+b 23
+b 26
+b 27
+b 29
+b 30
+b 22
+b 4
+b 0
+b 2
+b 3
+b 0
+b 3
+b 52
+b 56
+b 50
+b 2
+b 7
+b 8
+b 5
+b 7
+b 8
+b 13
+b 37
+b 16
+b 17
+b 19
+b 45
+b 54
+b 19
+b 1
+b 42
+b 2
+b 7
+b 14
+b 12
+b 1
+b 10
+b 9
+b 10
+b 12
+b 14
+b 15
+b 14
+b 2
+b 3
+b 4
+b 2
+b 4
+b 16
+b 19
+b 6
+b 8
+b 8
+b 1
+b 8
+b 9
+b 11
+b 7
+b 1
+b 0
+b 1
+b 5
+b 148
+b 146
+b 3
+b 4
+b 11
+b 12
+b 14
+b 15
+b 3
+b 4
+b 21
+b 25
+b 26
+b 2
+b 1
+b 24
+b 1
+b 7
+b 7
+b 1
+b 2
+b 3
+b 5
+b 6
+b 8
+b 9
+b 16
+b 20
+b 0
+b 2
+b 75
+b 79
+b 80
+b 82
+b 83
+b 79
+b 3
+b 73
+b 1
+b 32
+b 39
+b 40
+b 44
+b 46
+b 29
+b 1
+b 6
+b 4
+b 5
+b 7
+b 8
+b 10
+b 11
+b 17
+b 18
+b 31
+b 32
+b 20
+b 8
+b 8
+b 1
+b 141
+b 151
+b 152
+b 167
+b 168
+b 170
+b 177
+b 178
+b 190
+b 139
+b 2
+b 149
+b 1
+b 3
+b 5
+b 6
+b 14
+b 15
+b 17
+b 13
+b 1
+b 16
+b 1
+b 43
+b 14
+b 16
+b 17
+b 12
+b 1
+b 15
+b 2
+b 5
+b 6
+b 9
+b 4
+b 1
+b 4
+b 5
+b 7
+b 13
+b 14
+b 21
+b 24
+b 25
+b 24
+b 1
+b 11
+b 0
+b 1
+b 5
+b 4
+b 2
+b 1
+b 5
+b 41
+b 46
+b 47
+b 49
+b 3
+b 4
+b 6
+b 1
+b 180
+b 187
+b 188
+b 220
+b 221
+b 255
+b 219
+b 1
+b 34
+b 35
+b 48
+b 34
+b 2
+b 44
+b 2
+b 208
+b 206
+b 1
+b 89
+b 95
+b 96
+b 98
+b 99
+b 103
+b 104
+b 106
+b 95
+b 3
+b 100
+b 2
+b 61
+b 63
+b 64
+b 68
+b 13
+b 14
+b 10
+b 9
+b 1
+b 2
+b 3
+b 6
+b 99
+b 100
+b 103
+b 104
+b 109
+b 108
+b 1
+b 93
+b 2
+b 9
+b 0
+b 3
+b 3
+b 1
+b 1
+b 2
+b 0
+b 3
+b 97
+b 96
+b 2
+b 4
+b 8
+b 9
+b 11
+b 13
+b 14
+b 16
+b 18
+b 13
+b 2
+b 0
+b 1
+b 7
+b 129
+b 130
+b 132
+b 134
+b 135
+b 137
+b 139
+b 140
+b 149
+b 171
+b 134
+b 2
+b 211
+b 224
+b 225
+b 222
+b 2
+b 43
+b 45
+b 46
+b 43
+b 2
+b 21
+b 30
+b 32
+b 33
+b 39
+b 0
+b 1
+b 4
+b 0
+b 4
+b 20
+b 21
+b 23
+b 0
+b 1
+b 44
+b 45
+b 45
+b 1
+b 4
+b 3
+b 2
+b 30
+b 31
+b 36
+b 37
+b 43
+b 46
+b 47
+b 52
+b 36
+b 2
+b 33
+b 1
+b 37
+b 1
+b 6
+b 108
+b 116
+b 117
+b 123
+b 124
+b 28
+b 27
+b 1
+b 4
+b 5
+b 2
+b 32
+b 34
+b 36
+b 37
+b 43
+b 44
+b 98
+b 34
+b 2
+b 41
+b 2
+b 92
+b 1
+b 351
+b 352
+b 354
+b 354
+b 1
+b 11
+b 8
+b 10
+b 11
+b 8
+b 2
+b 23
+b 5
+b 4
+b 1
+b 7
+b 8
+b 26
+b 29
+b 30
+b 7
+b 2
+b 24
+b 3
+b 0
+b 1
+b 10
+b 16
+b 15
+b 1
+b 10
+b 11
+b 14
+b 15
+b 17
+b 19
+b 20
+b 30
+b 10
+b 4
+b 15
+b 1
+b 23
+b 3
+b 18
+b 27
+b 29
+b 31
+b 32
+b 34
+b 35
+b 39
+b 40
+b 45
+b 46
+b 25
+b 1
+b 30
+b 3
+b 35
+b 2
+b 38
+b 1
+b 50
+b 241
+b 4
+b 0
+b 2
+b 3
+b 5
+b 7
+b 8
+b 5
+b 2
+b 9
+b 10
+b 13
+b 19
+b 21
+b 22
+b 9
+b 4
+b 12
+b 81
+b 79
+b 1
+b 9
+b 7
+b 15
+b 16
+b 20
+b 21
+b 29
+b 31
+b 32
+b 20
+b 2
+b 27
+b 2
+b 0
+b 1
+b 10
+b 12
+b 8
+b 1
+b 11
+b 12
+b 18
+b 19
+b 8
+b 1
+b 9
+b 10
+b 2
+b 13
+b 5
+b 7
+b 9
+b 10
+b 50
+b 54
+b 9
+b 1
+b 47
+b 2
+b 56
+b 57
+b 59
+b 69
+b 54
+b 2
+b 57
+b 1
+b 38
+b 70
+b 1
+b 2
+b 1
+b 1
+b 10
+b 26
+b 27
+b 43
+b 45
+b 46
+b 48
+b 49
+b 56
+b 57
+b 91
+b 96
+b 45
+b 3
+b 53
+b 2
+b 84
+b 2
+b 0
+b 2
+b 76
+b 77
+b 89
+b 90
+b 92
+b 94
+b 87
+b 2
+b 4
+b 5
+b 30
+b 4
+b 2
+b 26
+b 2
+b 88
+b 96
+b 98
+b 99
+b 101
+b 98
+b 2
+b 124
+b 125
+b 141
+b 124
+b 1
+b 138
+b 3
+b 8
+b 12
+b 23
+b 10
+b 3
+b 7
+b 1
+b 6
+b 14
+b 15
+b 28
+b 29
+b 38
+b 37
+b 36
+b 1
+b 4
+b 5
+b 8
+b 20
+b 21
+b 23
+b 24
+b 29
+b 30
+b 38
+b 4
+b 3
+b 17
+b 3
+b 57
+b 55
+b 1
+b 12
+b 14
+b 15
+b 21
+b 22
+b 24
+b 24
+b 23
+b 2
+b 19
+b 20
+b 24
+b 30
+b 32
+b 33
+b 35
+b 37
+b 30
+b 2
+b 35
+b 1
+b 42
+b 45
+b 46
+b 112
+b 113
+b 108
+b 107
+b 1
+b 479
+b 480
+b 601
+b 23
+b 24
+b 13
+b 14
+b 18
+b 19
+b 25
+b 36
+b 37
+b 35
+b 3
+b 39
+b 37
+b 1
+b 0
+b 1
+b 97
+b 94
+b 1
+b 48
+b 57
+b 58
+b 98
+b 99
+b 109
+b 136
+b 137
+b 57
+b 1
+b 1
+b 81
+b 89
+b 91
+b 92
+b 97
+b 98
+b 100
+b 101
+b 105
+b 108
+b 97
+b 3
+b 102
+b 2
+b 31
+b 37
+b 38
+b 45
+b 47
+b 48
+b 51
+b 35
+b 4
+b 41
+b 2
+b 30
+b 1
+b 6
+b 7
+b 11
+b 17
+b 18
+b 9
+b 1
+b 16
+b 4
+b 10
+b 11
+b 33
+b 8
+b 2
+b 0
+b 1
+b 2
+b 45
+b 56
+b 57
+b 23
+b 25
+b 26
+b 28
+b 23
+b 2
+b 26
+b 1
+b 35
+b 44
+b 116
+b 117
+b 122
+b 123
+b 80
+b 82
+b 83
+b 82
+b 1
+b 18
+b 35
+b 34
+b 2
+b 8
+b 8
+b 1
+b 29
+b 2
+b 3
+b 5
+b 3
+b 3
+b 1
+b 115
+b 116
+b 118
+b 119
+b 121
+b 10
+b 13
+b 14
+b 22
+b 72
+b 73
+b 13
+b 2
+b 18
+b 2
+b 7
+b 1
+b 1
+b 33
+b 65
+b 66
+b 69
+b 70
+b 75
+b 76
+b 90
+b 75
+b 1
+b 87
+b 1
+b 115
+b 129
+b 115
+b 1
+b 126
+b 1
+b 3
+b 8
+b 9
+b 34
+b 13
+b 29
+b 30
+b 29
+b 1
+b 44
+b 46
+b 47
+b 46
+b 2
+b 0
+b 0
+b 1
+b 4
+b 1
+b 1
+b 2
+b 3
+b 11
+b 12
+b 0
+b 2
+b 9
+b 3
+b 1
+b 2
+b 7
+b 9
+b 10
+b 14
+b 0
+b 1
+b 8
+b 2
+b 37
+b 38
+b 44
+b 45
+b 37
+b 2
+b 40
+b 2
+b 88
+b 90
+b 91
+b 99
+b 74
+b 71
+b 1
+b 4
+b 5
+b 7
+b 34
+b 33
+b 1
+b 52
+b 53
+b 57
+b 58
+b 60
+b 50
+b 2
+b 55
+b 4
+b 2
+b 0
+b 1
+b 565
+b 566
+b 575
+b 574
+b 1
+b 4
+b 7
+b 8
+b 10
+b 12
+b 14
+b 15
+b 16
+b 4
+b 3
+b 0
+b 7
+b 43
+b 44
+b 47
+b 49
+b 50
+b 62
+b 47
+b 2
+b 6
+b 12
+b 13
+b 15
+b 16
+b 35
+b 42
+b 45
+b 46
+b 48
+b 49
+b 51
+b 12
+b 3
+b 32
+b 1
+b 41
+b 3
+b 33
+b 41
+b 43
+b 44
+b 59
+b 61
+b 62
+b 64
+b 21
+b 75
+b 76
+b 90
+b 103
+b 104
+b 111
+b 75
+b 2
+b 86
+b 3
+b 41
+b 45
+b 50
+b 51
+b 50
+b 2
+b 38
+b 1
+b 14
+b 12
+b 3
+b 1
+b 2
+b 7
+b 8
+b 10
+b 11
+b 13
+b 15
+b 18
+b 0
+b 1
+b 9
+b 2
+b 227
+b 229
+b 230
+b 250
+b 251
+b 250
+b 1
+b 4
+b 50
+b 92
+b 90
+b 1
+b 159
+b 161
+b 162
+b 8
+b 9
+b 11
+b 29
+b 32
+b 33
+b 46
+b 47
+b 49
+b 32
+b 2
+b 42
+b 2
+b 45
+b 1
+b 151
+b 152
+b 154
+b 155
+b 158
+b 160
+b 201
+b 202
+b 151
+b 3
+b 198
+b 2
+b 195
+b 1
+b 85
+b 83
+b 1
+b 68
+b 78
+b 79
+b 93
+b 94
+b 96
+b 97
+b 99
+b 122
+b 92
+b 1
+b 121
+b 1
+b 73
+b 20
+b 21
+b 23
+b 19
+b 1
+b 81
+b 82
+b 81
+b 2
+b 57
+b 55
+b 1
+b 47
+b 56
+b 60
+b 62
+b 63
+b 60
+b 2
+b 49
+b 56
+b 57
+b 48
+b 2
+b 52
+b 2
+b 1
+b 229
+b 299
+b 300
+b 302
+b 303
+b 308
+b 227
+b 1
+b 298
+b 3
+b 299
+b 1
+b 7
+b 8
+b 12
+b 10
+b 3
+b 146
+b 156
+b 154
+b 2
+b 117
+b 124
+b 125
+b 0
+b 2
+b 3
+b 5
+b 7
+b 2
+b 2
+b 79
+b 80
+b 120
+b 4
+b 5
+b 12
+b 11
+b 1
+b 104
+b 106
+b 108
+b 109
+b 106
+b 2
+b 108
+b 123
+b 124
+b 126
+b 127
+b 129
+b 131
+b 126
+b 2
+b 34
+b 33
+b 2
+b 111
+b 112
+b 114
+b 115
+b 127
+b 128
+b 130
+b 131
+b 109
+b 2
+b 113
+b 1
+b 31
+b 23
+b 24
+b 33
+b 34
+b 36
+b 37
+b 41
+b 36
+b 2
+b 37
+b 1
+b 4
+b 6
+b 25
+b 50
+b 49
+b 2
+b 3
+b 4
+b 6
+b 7
+b 9
+b 11
+b 12
+b 15
+b 2
+b 1
+b 15
+b 1
+b 8
+b 9
+b 28
+b 29
+b 8
+b 1
+b 25
+b 3
+b 0
+b 1
+b 94
+b 10
+b 11
+b 59
+b 60
+b 36
+b 37
+b 49
+b 33
+b 1
+b 50
+b 48
+b 2
+b 43
+b 52
+b 53
+b 64
+b 68
+b 69
+b 68
+b 2
+b 49
+b 1
+b 14
+b 13
+b 2
+b 43
+b 44
+b 46
+b 48
+b 49
+b 51
+b 53
+b 59
+b 60
+b 62
+b 9
+b 17
+b 18
+b 20
+b 8
+b 2
+b 13
+b 4
+b 71
+b 75
+b 76
+b 97
+b 98
+b 101
+b 119
+b 120
+b 146
+b 73
+b 2
+b 95
+b 5
+b 70
+b 1
+b 30
+b 34
+b 35
+b 28
+b 2
+b 32
+b 2
+b 4
+b 2
+b 1
+b 20
+b 21
+b 27
+b 29
+b 30
+b 14
+b 91
+b 100
+b 101
+b 103
+b 100
+b 2
+b 3
+b 55
+b 60
+b 61
+b 63
+b 64
+b 53
+b 3
+b 56
+b 1
+b 0
+b 1
+b 28
+b 29
+b 68
+b 69
+b 74
+b 73
+b 1
+b 7
+b 8
+b 10
+b 5
+b 4
+b 47
+b 135
+b 136
+b 140
+b 145
+b 146
+b 148
+b 154
+b 156
+b 153
+b 3
+b 103
+b 112
+b 113
+b 129
+b 130
+b 132
+b 100
+b 1
+b 8
+b 10
+b 2
+b 3
+b 5
+b 0
+b 2
+b 3
+b 1
+b 97
+b 105
+b 107
+b 108
+b 110
+b 105
+b 2
+b 7
+b 4
+b 1
+b 16
+b 14
+b 3
+b 89
+b 90
+b 33
+b 34
+b 16
+b 17
+b 39
+b 15
+b 1
+b 36
+b 1
+b 15
+b 3
+b 11
+b 12
+b 16
+b 8
+b 1
+b 19
+b 4
+b 5
+b 2
+b 2
+b 0
+b 2
+b 3
+b 38
+b 58
+b 59
+b 58
+b 2
+b 14
+b 16
+b 17
+b 27
+b 16
+b 2
+b 4
+b 6
+b 7
+b 4
+b 2
+b 13
+b 24
+b 30
+b 31
+b 33
+b 34
+b 27
+b 1
+b 4
+b 7
+b 12
+b 10
+b 1
+b 4
+b 5
+b 2
+b 4
+b 251
+b 252
+b 254
+b 260
+b 261
+b 268
+b 278
+b 249
+b 4
+b 274
+b 1
+b 169
+b 170
+b 172
+b 181
+b 188
+b 190
+b 191
+b 197
+b 198
+b 190
+b 1
+b 194
+b 2
+b 198
+b 196
+b 1
+b 26
+b 44
+b 45
+b 63
+b 61
+b 3
+b 28
+b 29
+b 50
+b 24
+b 38
+b 22
+b 1
+b 21
+b 22
+b 34
+b 21
+b 1
+b 72
+b 78
+b 79
+b 81
+b 102
+b 103
+b 107
+b 108
+b 111
+b 101
+b 1
+b 106
+b 4
+b 30
+b 31
+b 33
+b 34
+b 37
+b 38
+b 30
+b 3
+b 54
+b 58
+b 59
+b 61
+b 62
+b 52
+b 2
+b 59
+b 2
+b 5
+b 7
+b 2
+b 8
+b 9
+b 11
+b 13
+b 8
+b 2
+b 31
+b 32
+b 36
+b 8
+b 10
+b 12
+b 13
+b 31
+b 32
+b 39
+b 77
+b 23
+b 24
+b 13
+b 149
+b 147
+b 1
+b 5
+b 7
+b 8
+b 10
+b 12
+b 13
+b 15
+b 16
+b 22
+b 25
+b 5
+b 2
+b 5
+b 9
+b 10
+b 12
+b 13
+b 22
+b 7
+b 8
+b 10
+b 9
+b 7
+b 2
+b 11
+b 12
+b 21
+b 0
+b 2
+b 0
+b 1
+b 6
+b 5
+b 1
+b 115
+b 116
+b 122
+b 121
+b 2
+b 8
+b 17
+b 18
+b 25
+b 7
+b 9
+b 10
+b 7
+b 2
+b 70
+b 69
+b 4
+b 2
+b 3
+b 19
+b 20
+b 20
+b 1
+b 16
+b 23
+b 31
+b 32
+b 36
+b 37
+b 39
+b 23
+b 1
+b 28
+b 2
+b 36
+b 1
+b 3
+b 59
+b 68
+b 69
+b 71
+b 72
+b 74
+b 71
+b 2
+b 9
+b 22
+b 34
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 4
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 4
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 4
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 3
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 3
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 3
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 3
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 3
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 2
+p 3
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 3
+p 1
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 3
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 3
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 3
+p 3
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 4
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 3
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 4
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 3
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 3
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 3
+p 3
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 3
+p 3
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 3
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 3
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 3
+p 3
+p 2
+p 1
+p 2
+p 4
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 4
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 3
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 3
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 3
+p 2
+p 3
+p 1
+p 4
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 4
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 3
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 4
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 3
+p 2
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 3
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 3
+p 2
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 4
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 3
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 3
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 3
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 3
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 3
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 4
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 1
+p 1
+p 3
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 4
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 4
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 3
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 3
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 3
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 3
+p 4
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 3
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 3
+p 3
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 4
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 3
+p 3
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 3
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 3
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 4
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 4
+p 1
+p 1
+p 3
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 3
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 3
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 3
+p 3
+p 2
+p 3
+p 1
+p 2
+p 1
+p 3
+p 3
+p 3
+p 1
+p 1
+p 2
+p 1
+p 3
+p 3
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 4
+p 2
+p 1
+p 1
+p 3
+p 3
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 3
+p 1
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 4
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 3
+p 1
+p 2
+p 4
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 4
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 3
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 4
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 3
+p 3
+p 1
+p 2
+p 2
+p 1
+p 3
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 4
+p 3
+p 2
+p 3
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 4
+p 2
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 4
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 4
+p 1
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 3
+p 3
+p 3
+p 1
+p 2
+p 2
+p 1
+p 3
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 3
+p 3
+p 3
+p 2
+p 3
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 3
+p 3
+p 1
+p 2
+p 1
+p 4
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 3
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 3
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 3
+p 1
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 3
+p 3
+p 3
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 4
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 4
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 4
+p 4
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 4
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 3
+p 3
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 3
+p 3
+p 1
+p 3
+p 2
+p 1
+p 1
+p 3
+p 3
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 3
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 3
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 4
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 1
+p 3
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 3
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 4
+p 2
+p 1
+p 3
+p 2
+p 3
+p 1
+p 2
+p 3
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 3
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 3
+p 3
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 1
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 4
+p 3
+p 3
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 4
+p 2
+p 2
+p 2
+p 1
+p 1
+p 3
+p 3
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 3
+p 4
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 4
+p 2
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 3
+p 3
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 3
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 1
+p 3
+p 3
+p 3
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 4
+p 1
+p 3
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 3
+p 2
+p 1
+p 3
+p 3
+p 2
+p 3
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 4
+p 3
+p 1
+p 1
+p 2
+p 1
+p 3
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 3
+p 2
+p 3
+p 3
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 4
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 4
+p 1
+p 1
+p 3
+p 1
+p 2
+p 3
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 3
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 4
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 3
+p 1
+p 2
+p 3
+p 2
+p 3
+p 1
+p 2
+p 3
+p 3
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 4
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 4
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 3
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 3
+p 3
+p 2
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 3
+p 3
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 3
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 3
+p 3
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 3
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 3
+p 3
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 3
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 3
+p 1
+p 3
+p 1
+p 4
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 4
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 3
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 4
+p 2
+p 3
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 3
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 3
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 3
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 3
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 3
+p 1
+p 3
+p 2
+p 3
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 4
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 4
+p 2
+p 2
+p 3
+p 3
+p 2
+p 3
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 3
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 4
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 3
+p 2
+p 2
+p 4
+p 1
+p 1
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 3
+p 4
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 3
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 3
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 4
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 3
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 3
+p 1
+p 2
+p 4
+p 1
+p 2
+p 3
+p 3
+p 1
+p 2
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 3
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 4
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 3
+p 2
+p 4
+p 3
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 3
+p 3
+p 2
+p 1
+p 3
+p 1
+p 1
+p 3
+p 1
+p 2
+p 3
+p 4
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 3
+p 2
+p 3
+p 2
+p 1
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 3
+p 1
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 1
+p 4
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 3
+p 3
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 3
+p 3
+p 2
+p 2
+p 3
+p 1
+p 3
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 4
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 3
+p 3
+p 1
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 3
+p 1
+p 1
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 3
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 4
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 3
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 3
+p 1
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 4
+p 2
+p 1
+p 3
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 4
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 3
+p 3
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 4
+p 1
+p 2
+p 3
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 2
+p 3
+p 3
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 4
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 4
+p 2
+p 2
+p 3
+p 1
+p 3
+p 3
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 3
+p 3
+p 3
+p 2
+p 3
+p 4
+p 1
+p 2
+p 1
+p 1
+p 3
+p 3
+p 2
+p 1
+p 1
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 3
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 4
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 3
+p 3
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 3
+p 3
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 3
+p 3
+p 1
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 3
+p 3
+p 1
+p 3
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 4
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 3
+p 2
+p 3
+p 1
+p 3
+p 3
+p 2
+p 3
+p 3
+p 1
+p 1
+p 3
+p 3
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 4
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 4
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 4
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 3
+p 3
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 3
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 1
+p 2
+p 3
+p 3
+p 2
+p 4
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 3
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 3
+p 1
+p 3
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 3
+p 3
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 2
+p 3
+p 3
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 3
+p 3
+p 1
+p 2
+p 3
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 4
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 4
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 3
+p 4
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 3
+p 2
+p 1
+p 4
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 3
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 3
+p 3
+p 3
+p 2
+p 3
+p 1
+p 4
+p 2
+p 1
+p 2
+p 1
+p 3
+p 3
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 4
+p 2
+p 1
+p 2
+p 2
+p 3
+p 3
+p 3
+p 3
+p 3
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 3
+p 2
+p 3
+p 2
+p 3
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 4
+p 3
+p 1
+p 2
+p 3
+p 1
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 1
+p 3
+p 1
+p 4
+p 3
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 3
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 3
+p 1
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 3
+p 3
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 4
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 4
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 1
+p 3
+p 2
+p 1
+p 3
+p 2
+p 3
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 3
+p 1
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 4
+p 1
+p 2
+p 1
+p 3
+p 3
+p 2
+p 3
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 3
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 4
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 4
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 4
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 3
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 3
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 4
+p 2
+p 2
+p 3
+p 2
+p 1
+p 3
+p 2
+p 3
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 4
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 3
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 4
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 4
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 1
+p 2
+p 3
+p 3
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 3
+p 1
+p 4
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 3
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 3
+p 3
+p 1
+p 3
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 4
+p 1
+p 1
+p 2
+p 3
+p 2
+p 3
+p 1
+p 2
+p 2
+p 4
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 2
+p 3
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 4
+p 2
+p 2
+p 4
+p 3
+p 3
+p 2
+p 3
+p 2
+p 2
+p 4
+p 2
+p 3
+p 2
+p 3
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 3
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 3
+p 4
+p 1
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 3
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 3
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 3
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 4
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 3
+p 3
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 4
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 4
+p 3
+p 3
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 3
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 3
+p 3
+p 3
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 4
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 4
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 3
+p 2
+p 3
+p 2
+p 3
+p 3
+p 3
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 1
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 1
+p 3
+p 2
+p 2
+p 3
+p 1
+p 2
+p 3
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 3
+p 3
+p 1
+p 2
+p 2
+p 1
+p 3
+p 3
+p 3
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 4
+p 2
+p 2
+p 1
+p 4
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 4
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 4
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 4
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 1
+p 2
+p 1
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 3
+p 2
+p 3
+p 3
+p 3
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 4
+p 2
+p 3
+p 3
+p 2
+p 1
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 3
+p 3
+p 1
+p 2
+p 4
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 3
+p 3
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 3
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 3
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 4
+p 1
+p 2
+p 2
+p 2
+p 4
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 3
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 4
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 3
+p 1
+p 3
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 3
+p 3
+p 2
+p 3
+p 1
+p 2
+p 2
+p 3
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 4
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 1
+p 3
+p 2
+p 2
+p 1
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 1
+p 4
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 4
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 3
+p 1
+p 4
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 4
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 4
+p 2
+p 3
+p 4
+p 2
+p 3
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 4
+p 3
+p 1
+p 2
+p 3
+p 3
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 1
+p 3
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 2
+p 3
+p 1
+p 2
+p 3
+p 3
+p 3
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 4
+p 2
+p 4
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 4
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 3
+p 1
+p 3
+p 3
+p 2
+p 3
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 3
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 4
+p 3
+p 3
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 4
+p 2
+p 2
+p 1
+p 3
+p 2
+p 3
+p 3
+p 1
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 3
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 1
+p 1
+p 3
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 3
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 4
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 2
+p 1
+p 3
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 3
+p 3
+p 2
+p 3
+p 2
+p 2
+p 3
+p 1
+p 3
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 3
+p 2
+p 3
+p 3
+p 2
+p 4
+p 1
+p 2
+p 3
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 4
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 3
+p 2
+p 4
+p 3
+p 3
+p 1
+p 1
+p 2
+p 3
+p 3
+p 2
+p 3
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 4
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 3
+p 3
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 3
+p 1
+p 3
+p 1
+p 1
+p 3
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 3
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 1
+p 2
+p 3
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 3
+p 1
+p 3
+p 4
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 3
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 4
+p 1
+p 1
+p 3
+p 4
+p 2
+p 2
+p 1
+p 2
+p 3
+p 1
+p 1
+p 3
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 3
+p 2
+p 4
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 3
+p 3
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 3
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 4
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 4
+p 2
+p 1
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 3
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 3
+p 3
+p 2
+p 3
+p 3
+p 2
+p 1
+p 4
+p 4
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 1
+p 3
+p 1
+p 4
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 4
+p 3
+p 2
+p 4
+p 4
+p 2
+p 4
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 3
+p 1
+p 3
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 3
+p 2
+p 4
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 4
+p 1
+p 2
+p 2
+p 3
+p 3
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 3
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 3
+p 3
+p 2
+p 4
+p 1
+p 1
+p 3
+p 2
+p 2
+p 3
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 3
+p 1
+p 2
+p 1
+p 1
+p 3
+p 2
+p 3
+p 3
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 3
+p 2
+p 2
+p 3
+p 3
+p 2
+p 1
+p 2
+p 2
+p 4
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 4
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 3
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 4
+p 2
+p 1
+p 2
+p 4
+p 2
+p 2
+p 3
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 3
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 3
+p 2
+p 3
+p 3
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 3
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 1
+p 2
+p 3
+p 4
+p 1
+p 4
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 3
+p 3
+p 3
+p 2
+p 4
+p 2
+p 2
+p 3
+p 3
+p 1
+p 3
+p 2
+p 2
+p 1
+p 3
+p 1
+p 3
+p 1
+p 2
+p 2
+p 3
+p 3
+p 1
+p 1
+p 1
+p 3
+p 4
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 3
+p 4
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 4
+p 2
+p 1
+p 2
+p 3
+p 1
+p 3
+p 1
+p 3
+p 4
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 4
+p 3
+p 3
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 4
+p 2
+p 1
+p 2
+p 2
+p 2
+p 4
+p 1
+p 3
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 3
+p 1
+p 2
+p 4
+p 3
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 3
+p 3
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 4
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 3
+p 2
+p 3
+p 4
+p 1
+p 3
+p 3
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 3
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 4
+p 2
+p 1
+p 2
+p 4
+p 3
+p 1
+p 2
+p 3
+p 4
+p 2
+p 2
+p 3
+p 1
+p 3
+p 2
+p 2
+p 2
+p 4
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 4
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 4
+p 3
+p 2
+p 2
+p 2
+p 3
+p 3
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 1
+p 3
+p 2
+p 3
+p 3
+p 1
+p 2
+p 3
+p 2
+p 1
+p 3
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 3
+p 2
+p 3
+p 2
+p 4
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 3
+p 2
+p 4
+p 1
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 4
+p 1
+p 3
+p 2
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 3
+p 4
+p 3
+p 2
+p 3
+p 2
+p 1
+p 4
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 1
+p 3
+p 3
+p 1
+p 2
+p 4
+p 2
+p 1
+p 1
+p 3
+p 2
+p 3
+p 3
+p 2
+p 1
+p 1
+p 2
+p 4
+p 1
+p 3
+p 2
+p 3
+p 2
+p 3
+p 4
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 4
+p 2
+p 3
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 3
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 1
+p 1
+p 3
+p 3
+p 2
+p 2
+p 2
+p 4
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 1
+p 2
+p 3
+p 2
+p 1
+p 3
+p 2
+p 2
+p 3
+p 3
+p 3
+p 4
+p 2
+p 4
+p 1
+p 4
+p 2
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 2
+p 3
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 4
+p 2
+p 3
+p 3
+p 1
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 4
+p 2
+p 2
+p 1
+p 2
+p 4
+p 3
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 3
+p 4
+p 3
+p 4
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 3
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 3
+p 1
+p 2
+p 2
+p 4
+p 1
+p 1
+p 1
+p 1
+p 2
+p 3
+p 1
+p 2
+p 3
+p 1
+p 3
+p 3
+p 2
+p 1
+p 1
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 4
+p 2
+p 1
+p 2
+p 4
+p 1
+p 1
+p 3
+p 4
+p 2
+p 3
+p 2
+p 1
+p 3
+p 3
+p 2
+p 3
+p 3
+p 2
+p 1
+p 3
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 1
+p 2
+p 4
+p 3
+p 3
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 3
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 4
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 3
+p 4
+p 1
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 4
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 3
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 4
+p 4
+p 1
+p 3
+p 2
+p 3
+p 3
+p 2
+p 3
+p 4
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 3
+p 2
+p 3
+p 3
+p 3
+p 2
+p 2
+p 3
+p 3
+p 3
+p 2
+p 1
+p 2
+p 1
+p 3
+p 1
+p 2
+p 3
+p 2
+p 1
+p 3
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 4
+p 1
+p 4
+p 1
+p 2
+p 3
+p 3
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 3
+p 2
+p 3
+p 2
+p 3
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 4
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 3
+p 2
+p 3
+p 3
+p 1
+p 1
+p 2
+p 3
+p 1
+p 1
+p 4
+p 3
+p 2
+p 1
+p 3
+p 2
+p 2
+p 3
+p 1
+p 1
+p 4
+p 3
+p 2
+p 1
+p 4
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 4
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 3
+p 3
+p 2
+p 3
+p 3
+p 1
+p 1
+p 2
+p 2
+p 4
+p 3
+p 1
+p 2
+p 1
+p 3
+p 3
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 3
+p 3
+p 3
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 3
+p 4
+p 4
+p 2
+p 3
+p 2
+p 5
+p 2
+p 1
+p 3
+p 2
+p 3
+p 3
+p 4
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 3
+p 2
+p 3
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 3
+p 3
+p 2
+p 2
+p 3
+p 2
+p 4
+p 3
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 3
+p 3
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 3
+p 4
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 5
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 1
+p 3
+p 3
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 4
+p 3
+p 3
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 4
+p 4
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 3
+p 1
+p 4
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 3
+p 3
+p 1
+p 3
+p 3
+p 2
+p 1
+p 2
+p 4
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 4
+p 2
+p 1
+p 2
+p 2
+p 4
+p 4
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 3
+p 1
+p 3
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 4
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 4
+p 3
+p 3
+p 2
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 3
+p 2
+p 4
+p 4
+p 3
+p 3
+p 4
+p 2
+p 3
+p 3
+p 3
+p 1
+p 1
+p 4
+p 4
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 2
+p 2
+p 4
+p 2
+p 1
+p 2
+p 1
+p 4
+p 3
+p 2
+p 4
+p 4
+p 1
+p 2
+p 4
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 4
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 4
+p 2
+p 3
+p 3
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 3
+p 3
+p 1
+p 2
+p 1
+p 3
+p 2
+p 3
+p 3
+p 4
+p 1
+p 4
+p 3
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 3
+p 1
+p 4
+p 2
+p 2
+p 3
+p 3
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 4
+p 2
+p 4
+p 2
+p 3
+p 2
+p 3
+p 2
+p 3
+p 2
+p 3
+p 4
+p 2
+p 3
+p 1
+p 1
+p 1
+p 1
+p 3
+p 2
+p 4
+p 2
+p 2
+p 3
+p 3
+p 1
+p 3
+p 2
+p 4
+p 2
+p 4
+p 1
+p 3
+p 3
+p 2
+p 1
+p 3
+p 3
+p 2
+p 2
+p 3
+p 1
+p 3
+p 1
+p 3
+p 4
+p 1
+p 2
+p 3
+p 1
+p 4
+p 2
+p 1
+p 3
+p 2
+p 2
+p 3
+p 3
+p 2
+p 3
+p 3
+p 2
+p 3
+p 1
+p 3
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 3
+p 3
+p 2
+p 4
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 1
+p 3
+p 3
+p 1
+p 3
+p 2
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 4
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 4
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 1
+p 2
+p 1
+p 3
+p 3
+p 2
+p 1
+p 2
+p 4
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 1
+p 3
+p 2
+p 3
+p 2
+p 1
+p 2
+p 3
+p 2
+p 4
+p 1
+p 2
+p 3
+p 3
+p 4
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 3
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 5
+p 3
+p 2
+p 3
+p 2
+p 2
+p 1
+p 4
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 3
+p 3
+p 4
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 3
+p 4
+p 3
+p 2
+p 3
+p 1
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 4
+p 5
+p 4
+p 3
+p 3
+p 2
+p 3
+p 2
+p 1
+p 1
+p 3
+p 3
+p 2
+p 1
+p 4
+p 2
+p 1
+p 4
+p 2
+p 3
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 4
+p 2
+p 1
+p 2
+p 3
+p 2
+p 3
+p 3
+p 3
+p 4
+p 2
+p 2
+p 2
+p 1
+p 1
+p 3
+p 3
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 5
+p 4
+p 2
+p 3
+p 1
+p 3
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 4
+p 3
+p 3
+p 1
+p 2
+p 3
+p 1
+p 2
+p 3
+p 2
+p 2
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 1
+p 4
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 3
+p 4
+p 3
+p 2
+p 2
+p 4
+p 2
+p 1
+p 1
+p 3
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 3
+p 4
+p 3
+p 2
+p 4
+p 2
+p 3
+p 2
+p 4
+p 2
+p 1
+p 1
+p 4
+p 3
+p 2
+p 1
+p 3
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 3
+p 4
+p 1
+p 2
+p 3
+p 2
+p 3
+p 1
+p 3
+p 3
+p 1
+p 3
+p 2
+p 1
+p 3
+p 2
+p 4
+p 1
+p 1
+p 3
+p 1
+p 2
+p 3
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 1
+p 3
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 2
+p 4
+p 1
+p 2
+p 1
+p 3
+p 3
+p 2
+p 4
+p 2
+p 2
+p 2
+p 4
+p 1
+p 2
+p 3
+p 2
+p 2
+p 3
+p 3
+p 1
+p 4
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 3
+p 3
+p 2
+p 2
+p 3
+p 3
+p 3
+p 1
+p 2
+p 1
+p 2
+p 4
+p 2
+p 2
+p 2
+p 2
+p 3
+p 4
+p 2
+p 2
+p 4
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 1
+p 4
+p 3
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 4
+p 2
+p 4
+p 4
+p 2
+p 2
+p 1
+p 4
+p 4
+p 3
+p 2
+p 1
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 3
+p 2
+p 3
+p 3
+p 3
+p 3
+p 4
+p 2
+p 3
+p 2
+p 3
+p 2
+p 3
+p 3
+p 2
+p 3
+p 4
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 3
+p 3
+p 4
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 4
+p 3
+p 1
+p 1
+p 3
+p 4
+p 1
+p 3
+p 3
+p 4
+p 2
+p 2
+p 3
+p 4
+p 2
+p 3
+p 3
+p 4
+p 1
+p 2
+p 1
+p 3
+p 3
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 4
+p 2
+p 4
+p 1
+p 3
+p 4
+p 3
+p 1
+p 2
+p 1
+p 5
+p 1
+p 2
+p 1
+p 2
+p 3
+p 4
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 3
+p 3
+p 3
+p 2
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 4
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 4
+p 2
+p 1
+p 4
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 3
+p 3
+p 4
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 4
+p 2
+p 3
+p 3
+p 2
+p 3
+p 3
+p 2
+p 3
+p 4
+p 2
+p 4
+p 1
+p 3
+p 1
+p 3
+p 2
+p 4
+p 3
+p 2
+p 1
+p 1
+p 4
+p 2
+p 2
+p 4
+p 1
+p 2
+p 4
+p 1
+p 3
+p 2
+p 3
+p 2
+p 2
+p 3
+p 3
+p 4
+p 3
+p 4
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 3
+p 2
+p 3
+p 4
+p 3
+p 3
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 2
+p 1
+p 3
+p 2
+p 3
+p 2
+p 3
+p 4
+p 2
+p 3
+p 4
+p 2
+p 2
+p 2
+p 3
+p 2
+p 5
+p 4
+p 2
+p 2
+p 4
+p 3
+p 2
+p 1
+p 3
+p 4
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 4
+p 3
+p 3
+p 4
+p 1
+p 2
+p 2
+p 1
+p 3
+p 3
+p 3
+p 3
+p 3
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 3
+p 2
+p 1
+p 1
+p 4
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 3
+p 1
+p 4
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 4
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 3
+p 3
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 3
+p 3
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 1
+p 3
+p 4
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 5
+p 3
+p 3
+p 4
+p 2
+p 1
+p 3
+p 3
+p 4
+p 2
+p 3
+p 3
+p 5
+p 4
+p 3
+p 2
+p 2
+p 2
+p 2
+p 4
+p 3
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 3
+p 1
+p 4
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 3
+p 1
+p 2
+p 3
+p 3
+p 2
+p 3
+p 5
+p 3
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 2
+p 5
+p 3
+p 2
+p 2
+p 2
+p 3
+p 3
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 4
+p 4
+p 1
+p 3
+p 2
+p 2
+p 3
+p 3
+p 3
+p 3
+p 3
+p 1
+p 3
+p 3
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 4
+p 1
+p 3
+p 2
+p 2
+p 1
+p 3
+p 4
+p 3
+p 1
+p 3
+p 3
+p 3
+p 2
+p 3
+p 3
+p 3
+p 3
+p 4
+p 1
+p 2
+p 3
+p 2
+p 3
+p 1
+p 2
+p 2
+p 4
+p 2
+p 4
+p 2
+p 4
+p 2
+p 3
+p 3
+p 4
+p 1
+p 3
+p 2
+p 2
+p 1
+p 3
+p 3
+p 2
+p 3
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 4
+p 3
+p 3
+p 1
+p 3
+p 3
+p 2
+p 3
+p 2
+p 3
+p 3
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 3
+p 4
+p 2
+p 1
+p 2
+p 4
+p 3
+p 3
+p 1
+p 3
+p 1
+p 3
+p 1
+p 4
+p 2
+p 3
+p 3
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 3
+p 4
+p 3
+p 3
+p 4
+p 3
+p 2
+p 2
+p 5
+p 3
+p 1
+p 3
+p 3
+p 3
+p 2
+p 3
+p 3
+p 1
+p 2
+p 3
+p 3
+p 3
+p 2
+p 3
+p 2
+p 1
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 4
+p 1
+p 2
+p 3
+p 3
+p 2
+p 4
+p 2
+p 3
+p 3
+p 3
+p 1
+p 3
+p 3
+p 2
+p 5
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 3
+p 4
+p 2
+p 5
+p 1
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 4
+p 3
+p 2
+p 4
+p 3
+p 3
+p 3
+p 1
+p 2
+p 2
+p 3
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 1
+p 3
+p 3
+p 3
+p 3
+p 4
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 1
+p 3
+p 3
+p 3
+p 3
+p 4
+p 3
+p 1
+p 3
+p 4
+p 3
+p 2
+p 3
+p 3
+p 4
+p 1
+p 3
+p 2
+p 2
+p 3
+p 2
+p 4
+p 2
+p 3
+p 3
+p 4
+p 3
+p 2
+p 2
+p 2
+p 3
+p 3
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 3
+p 3
+p 3
+p 3
+p 3
+p 2
+p 1
+p 2
+p 2
+p 3
+p 4
+p 3
+p 1
+p 2
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 4
+p 1
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 5
+p 3
+p 3
+p 3
+p 3
+p 3
+p 3
+p 1
+p 3
+p 3
+p 3
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 4
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 4
+p 3
+p 3
+p 2
+p 3
+p 2
+p 4
+p 5
+p 1
+p 1
+p 4
+p 4
+p 2
+p 2
+p 4
+p 3
+p 3
+p 4
+p 1
+p 4
+p 2
+p 3
+p 2
+p 4
+p 1
+p 1
+p 2
+p 2
+p 3
+p 3
+p 4
+p 3
+p 3
+p 1
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 4
+p 3
+p 2
+p 1
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 3
+p 3
+p 2
+p 2
+p 4
+p 4
+p 4
+p 3
+p 5
+p 2
+p 1
+p 1
+p 1
+p 2
+p 3
+p 2
+p 2
+p 4
+p 2
+p 3
+p 2
+p 1
+p 2
+p 3
+p 4
+p 2
+p 3
+p 1
+p 3
+p 3
+p 2
+p 1
+p 1
+p 2
+p 1
+p 1
+p 3
+p 2
+p 3
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 3
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 4
+p 3
+p 1
+p 2
+p 3
+p 4
+p 1
+p 2
+p 2
+p 4
+p 3
+p 1
+p 4
+p 2
+p 4
+p 3
+p 2
+p 4
+p 1
+p 4
+p 4
+p 4
+p 4
+p 2
+p 2
+p 2
+p 1
+p 3
+p 3
+p 2
+p 2
+p 3
+p 1
+p 3
+p 1
+p 4
+p 2
+p 3
+p 4
+p 3
+p 1
+p 2
+p 2
+p 3
+p 3
+p 2
+p 3
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 4
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 3
+p 4
+p 2
+p 2
+p 3
+p 2
+p 2
+p 4
+p 3
+p 2
+p 4
+p 1
+p 1
+p 3
+p 4
+p 2
+p 4
+p 1
+p 3
+p 3
+p 2
+p 3
+p 3
+p 1
+p 2
+p 3
+p 3
+p 2
+p 1
+p 1
+p 3
+p 4
+p 2
+p 1
+p 2
+p 2
+p 3
+p 3
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 3
+p 2
+p 3
+p 2
+p 3
+p 3
+p 1
+p 3
+p 4
+p 3
+p 3
+p 2
+p 2
+p 4
+p 3
+p 2
+p 1
+p 2
+p 1
+p 2
+p 3
+p 2
+p 1
+p 3
+p 1
+p 3
+p 4
+p 5
+p 2
+p 3
+p 3
+p 3
+p 2
+p 3
+p 3
+p 5
+p 4
+p 4
+p 1
+p 3
+p 2
+p 1
+p 2
+p 3
+p 3
+p 2
+p 3
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 4
+p 5
+p 1
+p 2
+p 1
+p 3
+p 3
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 3
+p 4
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 3
+p 1
+p 3
+p 2
+p 4
+p 1
+p 3
+p 3
+p 4
+p 1
+p 3
+p 1
+p 5
+p 3
+p 1
+p 2
+p 5
+p 3
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 1
+p 1
+p 3
+p 2
+p 2
+p 1
+p 1
+p 3
+p 2
+p 3
+p 3
+p 4
+p 1
+p 2
+p 3
+p 3
+p 3
+p 2
+p 1
+p 1
+p 2
+p 4
+p 4
+p 3
+p 2
+p 4
+p 2
+p 2
+p 3
+p 3
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 4
+p 2
+p 2
+p 5
+p 2
+p 4
+p 2
+p 1
+p 4
+p 1
+p 1
+p 3
+p 4
+p 5
+p 3
+p 3
+p 3
+p 1
+p 2
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 3
+p 2
+p 4
+p 1
+p 3
+p 3
+p 4
+p 3
+p 4
+p 3
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 1
+p 2
+p 4
+p 2
+p 3
+p 2
+p 2
+p 3
+p 4
+p 2
+p 3
+p 1
+p 3
+p 3
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 4
+p 1
+p 1
+p 4
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 3
+p 3
+p 3
+p 5
+p 5
+p 1
+p 1
+p 3
+p 4
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 4
+p 2
+p 2
+p 3
+p 3
+p 3
+p 2
+p 1
+p 3
+p 4
+p 3
+p 4
+p 2
+p 2
+p 2
+p 1
+p 3
+p 4
+p 2
+p 3
+p 3
+p 2
+p 4
+p 2
+p 3
+p 2
+p 1
+p 1
+p 4
+p 2
+p 4
+p 2
+p 2
+p 2
+p 3
+p 2
+p 4
+p 3
+p 3
+p 3
+p 3
+p 3
+p 4
+p 3
+p 3
+p 2
+p 3
+p 2
+p 2
+p 1
+p 4
+p 2
+p 3
+p 3
+p 1
+p 3
+p 3
+p 5
+p 2
+p 3
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 4
+p 3
+p 3
+p 3
+p 2
+p 2
+p 1
+p 3
+p 2
+p 3
+p 1
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 3
+p 1
+p 2
+p 3
+p 2
+p 3
+p 2
+p 3
+p 4
+p 2
+p 5
+p 3
+p 3
+p 3
+p 3
+p 2
+p 1
+p 2
+p 3
+p 1
+p 1
+p 4
+p 1
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 4
+p 1
+p 2
+p 3
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 2
+p 1
+p 4
+p 1
+p 1
+p 3
+p 2
+p 3
+p 1
+p 2
+p 3
+p 4
+p 3
+p 3
+p 2
+p 2
+p 2
+p 4
+p 2
+p 5
+p 3
+p 2
+p 1
+p 2
+p 3
+p 3
+p 1
+p 3
+p 2
+p 3
+p 1
+p 2
+p 4
+p 1
+p 3
+p 3
+p 2
+p 3
+p 3
+p 3
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 3
+p 1
+p 3
+p 2
+p 1
+p 1
+p 4
+p 2
+p 2
+p 4
+p 3
+p 1
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 3
+p 3
+p 2
+p 4
+p 3
+p 1
+p 1
+p 1
+p 2
+p 4
+p 2
+p 2
+p 2
+p 4
+p 3
+p 5
+p 3
+p 2
+p 1
+p 2
+p 4
+p 3
+p 2
+p 3
+p 3
+p 3
+p 3
+p 1
+p 2
+p 2
+p 1
+p 3
+p 2
+p 4
+p 2
+p 3
+p 2
+p 3
+p 3
+p 3
+p 2
+p 4
+p 2
+p 2
+p 3
+p 2
+p 1
+p 3
+p 1
+p 2
+p 4
+p 1
+p 4
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 3
+p 3
+p 3
+p 1
+p 2
+p 3
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 3
+p 2
+p 4
+p 2
+p 3
+p 2
+p 2
+p 4
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 5
+p 2
+p 4
+p 4
+p 2
+p 2
+p 3
+p 4
+p 3
+p 1
+p 3
+p 2
+p 2
+p 3
+p 4
+p 2
+p 2
+p 3
+p 1
+p 2
+p 4
+p 2
+p 2
+p 3
+p 3
+p 5
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 1
+p 3
+p 4
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 3
+p 3
+p 3
+p 2
+p 4
+p 1
+p 3
+p 2
+p 3
+p 2
+p 3
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 3
+p 4
+p 2
+p 2
+p 2
+p 2
+p 3
+p 5
+p 1
+p 3
+p 3
+p 3
+p 4
+p 2
+p 3
+p 1
+p 3
+p 4
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 4
+p 2
+p 4
+p 3
+p 2
+p 4
+p 2
+p 4
+p 1
+p 2
+p 4
+p 3
+p 3
+p 2
+p 1
+p 2
+p 2
+p 3
+p 2
+p 1
+p 5
+p 2
+p 3
+p 4
+p 2
+p 5
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 3
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 3
+p 3
+p 4
+p 1
+p 4
+p 3
+p 2
+p 2
+p 3
+p 2
+p 4
+p 1
+p 2
+p 4
+p 4
+p 2
+p 2
+p 1
+p 3
+p 3
+p 3
+p 4
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 3
+p 2
+p 1
+p 3
+p 4
+p 4
+p 3
+p 3
+p 3
+p 1
+p 3
+p 2
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 2
+p 3
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 2
+p 1
+p 3
+p 4
+p 4
+p 3
+p 2
+p 4
+p 3
+p 1
+p 3
+p 2
+p 2
+p 2
+p 5
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 4
+p 3
+p 2
+p 2
+p 1
+p 3
+p 3
+p 2
+p 3
+p 2
+p 2
+p 3
+p 1
+p 4
+p 4
+p 3
+p 4
+p 2
+p 1
+p 3
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 4
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 3
+p 3
+p 2
+p 4
+p 2
+p 1
+p 1
+p 1
+p 5
+p 1
+p 3
+p 3
+p 1
+p 4
+p 1
+p 3
+p 2
+p 3
+p 2
+p 3
+p 4
+p 3
+p 2
+p 4
+p 4
+p 2
+p 4
+p 3
+p 4
+p 2
+p 3
+p 4
+p 3
+p 3
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 4
+p 3
+p 3
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 1
+p 3
+p 2
+p 3
+p 2
+p 4
+p 2
+p 2
+p 2
+p 4
+p 2
+p 4
+p 2
+p 1
+p 3
+p 1
+p 3
+p 4
+p 2
+p 3
+p 4
+p 2
+p 2
+p 3
+p 4
+p 4
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 3
+p 3
+p 3
+p 4
+p 4
+p 3
+p 2
+p 3
+p 2
+p 1
+p 2
+p 1
+p 3
+p 3
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 3
+p 4
+p 1
+p 1
+p 4
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 3
+p 3
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 4
+p 3
+p 3
+p 2
+p 3
+p 2
+p 2
+p 4
+p 3
+p 1
+p 4
+p 3
+p 3
+p 2
+p 1
+p 3
+p 2
+p 2
+p 2
+p 4
+p 2
+p 3
+p 3
+p 3
+p 4
+p 1
+p 1
+p 1
+p 3
+p 3
+p 1
+p 2
+p 2
+p 3
+p 1
+p 3
+p 4
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 4
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 3
+p 3
+p 2
+p 4
+p 2
+p 4
+p 4
+p 1
+p 3
+p 3
+p 2
+p 1
+p 2
+p 3
+p 1
+p 2
+p 1
+p 1
+p 4
+p 3
+p 3
+p 4
+p 2
+p 3
+p 3
+p 4
+p 1
+p 3
+p 4
+p 4
+p 3
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 4
+p 3
+p 2
+p 1
+p 2
+p 3
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 4
+p 2
+p 1
+p 2
+p 4
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 3
+p 1
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 4
+p 1
+p 3
+p 2
+p 4
+p 2
+p 4
+p 2
+p 1
+p 2
+p 2
+p 4
+p 4
+p 2
+p 4
+p 4
+p 3
+p 3
+p 3
+p 2
+p 1
+p 2
+p 2
+p 2
+p 4
+p 2
+p 1
+p 3
+p 3
+p 2
+p 4
+p 1
+p 5
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 1
+p 1
+p 4
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 4
+p 2
+p 3
+p 3
+p 3
+p 3
+p 1
+p 3
+p 2
+p 2
+p 3
+p 3
+p 1
+p 2
+p 2
+p 4
+p 1
+p 2
+p 4
+p 4
+p 3
+p 1
+p 4
+p 4
+p 3
+p 3
+p 2
+p 3
+p 2
+p 3
+p 2
+p 1
+p 2
+p 2
+p 3
+p 3
+p 4
+p 2
+p 3
+p 4
+p 2
+p 2
+p 1
+p 2
+p 4
+p 2
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 3
+p 4
+p 3
+p 4
+p 4
+p 2
+p 3
+p 3
+p 1
+p 2
+p 2
+p 1
+p 1
+p 4
+p 1
+p 3
+p 2
+p 3
+p 4
+p 5
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 2
+p 4
+p 3
+p 3
+p 3
+p 1
+p 3
+p 3
+p 3
+p 3
+p 1
+p 4
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 3
+p 2
+p 2
+p 5
+p 1
+p 2
+p 3
+p 2
+p 2
+p 3
+p 3
+p 2
+p 3
+p 3
+p 1
+p 4
+p 3
+p 1
+p 2
+p 2
+p 4
+p 2
+p 2
+p 3
+p 4
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 4
+p 3
+p 2
+p 3
+p 2
+p 2
+p 4
+p 4
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 3
+p 3
+p 2
+p 3
+p 3
+p 3
+p 3
+p 2
+p 3
+p 4
+p 2
+p 3
+p 2
+p 3
+p 4
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 4
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 3
+p 3
+p 2
+p 5
+p 1
+p 4
+p 2
+p 1
+p 2
+p 3
+p 4
+p 2
+p 1
+p 2
+p 2
+p 3
+p 3
+p 3
+p 2
+p 3
+p 1
+p 3
+p 2
+p 3
+p 2
+p 3
+p 4
+p 2
+p 3
+p 5
+p 3
+p 3
+p 2
+p 3
+p 2
+p 3
+p 2
+p 2
+p 1
+p 3
+p 4
+p 2
+p 3
+p 2
+p 2
+p 2
+p 3
+p 1
+p 2
+p 3
+p 4
+p 2
+p 2
+p 3
+p 3
+p 2
+p 3
+p 2
+p 3
+p 3
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 4
+p 3
+p 3
+p 3
+p 2
+p 3
+p 4
+p 2
+p 2
+p 2
+p 3
+p 4
+p 3
+p 1
+p 2
+p 1
+p 4
+p 2
+p 3
+p 2
+p 5
+p 3
+p 4
+p 5
+p 5
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 4
+p 2
+p 6
+p 3
+p 4
+p 4
+p 4
+p 4
+p 4
+p 2
+p 4
+p 1
+p 5
+p 3
+p 3
+p 2
+p 4
+p 2
+p 3
+p 3
+p 2
+p 3
+p 3
+p 2
+p 1
+p 3
+p 2
+p 3
+p 2
+p 3
+p 2
+p 1
+p 2
+p 3
+p 1
+p 1
+p 2
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 4
+p 1
+p 4
+p 5
+p 4
+p 4
+p 2
+p 3
+p 2
+p 3
+p 3
+p 3
+p 3
+p 3
+p 3
+p 3
+p 4
+p 4
+p 5
+p 2
+p 2
+p 4
+p 5
+p 3
+p 5
+p 2
+p 5
+p 2
+p 3
+p 1
+p 4
+p 3
+p 2
+p 3
+p 1
+p 2
+p 2
+p 4
+p 3
+p 3
+p 2
+p 3
+p 3
+p 2
+p 1
+p 2
+p 2
+p 4
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 3
+p 4
+p 2
+p 3
+p 1
+p 3
+p 1
+p 3
+p 2
+p 1
+p 5
+p 1
+p 2
+p 3
+p 3
+p 1
+p 3
+p 3
+p 3
+p 1
+p 3
+p 3
+p 4
+p 3
+p 2
+p 2
+p 2
+p 4
+p 2
+p 1
+p 4
+p 3
+p 2
+p 1
+p 3
+p 3
+p 3
+p 6
+p 5
+p 3
+p 2
+p 3
+p 2
+p 3
+p 4
+p 2
+p 1
+p 3
+p 2
+p 5
+p 4
+p 3
+p 1
+p 3
+p 2
+p 2
+p 3
+p 4
+p 2
+p 2
+p 1
+p 5
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 4
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 3
+p 3
+p 2
+p 2
+p 4
+p 1
+p 2
+p 2
+p 3
+p 4
+p 1
+p 2
+p 5
+p 1
+p 3
+p 4
+p 3
+p 3
+p 1
+p 2
+p 3
+p 5
+p 3
+p 1
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 6
+p 4
+p 4
+p 4
+p 1
+p 3
+p 3
+p 4
+p 3
+p 2
+p 4
+p 5
+p 4
+p 2
+p 3
+p 2
+p 2
+p 1
+p 3
+p 3
+p 3
+p 4
+p 2
+p 4
+p 3
+p 3
+p 2
+p 2
+p 5
+p 3
+p 2
+p 3
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 4
+p 2
+p 2
+p 1
+p 4
+p 2
+p 3
+p 3
+p 3
+p 3
+p 3
+p 3
+p 3
+p 3
+p 1
+p 4
+p 4
+p 4
+p 3
+p 3
+p 2
+p 3
+p 3
+p 1
+p 3
+p 2
+p 4
+p 1
+p 4
+p 2
+p 3
+p 1
+p 4
+p 3
+p 2
+p 4
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 1
+p 5
+p 3
+p 3
+p 2
+p 1
+p 3
+p 3
+p 2
+p 2
+p 4
+p 2
+p 3
+p 2
+p 2
+p 3
+p 5
+p 2
+p 3
+p 3
+p 2
+p 6
+p 1
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 4
+p 5
+p 3
+p 2
+p 2
+p 2
+p 3
+p 4
+p 1
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 4
+p 1
+p 4
+p 2
+p 2
+p 2
+p 1
+p 4
+p 1
+p 2
+p 2
+p 3
+p 3
+p 3
+p 3
+p 2
+p 2
+p 4
+p 3
+p 3
+p 1
+p 5
+p 3
+p 4
+p 3
+p 3
+p 4
+p 3
+p 3
+p 2
+p 2
+p 3
+p 3
+p 2
+p 4
+p 3
+p 2
+p 3
+p 3
+p 4
+p 4
+p 3
+p 4
+p 3
+p 3
+p 2
+p 2
+p 3
+p 1
+p 3
+p 4
+p 2
+p 1
+p 2
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 6
+p 1
+p 4
+p 3
+p 2
+p 1
+p 2
+p 1
+p 3
+p 3
+p 4
+p 2
+p 1
+p 4
+p 4
+p 2
+p 2
+p 3
+p 2
+p 3
+p 4
+p 1
+p 5
+p 1
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 3
+p 2
+p 3
+p 3
+p 2
+p 3
+p 3
+p 1
+p 2
+p 3
+p 3
+p 1
+p 2
+p 3
+p 3
+p 2
+p 3
+p 3
+p 2
+p 1
+p 5
+p 3
+p 2
+p 1
+p 2
+p 5
+p 3
+p 3
+p 2
+p 3
+p 2
+p 3
+p 3
+p 2
+p 3
+p 2
+p 3
+p 1
+p 4
+p 3
+p 1
+p 2
+p 2
+p 3
+p 4
+p 3
+p 4
+p 2
+p 2
+p 2
+p 3
+p 2
+p 1
+p 4
+p 3
+p 4
+p 3
+p 1
+p 5
+p 4
+p 3
+p 3
+p 1
+p 3
+p 5
+p 3
+p 2
+p 4
+p 2
+p 3
+p 5
+p 3
+p 2
+p 2
+p 3
+p 3
+p 2
+p 3
+p 3
+p 4
+p 3
+p 4
+p 3
+p 1
+p 4
+p 5
+p 3
+p 2
+p 4
+p 3
+p 3
+p 3
+p 2
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 2
+p 6
+p 3
+p 2
+p 2
+p 4
+p 3
+p 3
+p 1
+p 4
+p 3
+p 2
+p 2
+p 2
+p 2
+p 4
+p 4
+p 2
+p 3
+p 3
+p 4
+p 2
+p 2
+p 3
+p 5
+p 3
+p 3
+p 2
+p 2
+p 1
+p 3
+p 3
+p 4
+p 3
+p 4
+p 4
+p 3
+p 4
+p 3
+p 2
+p 2
+p 3
+p 3
+p 4
+p 5
+p 1
+p 2
+p 2
+p 2
+p 4
+p 3
+p 4
+p 3
+p 3
+p 4
+p 3
+p 2
+p 3
+p 4
+p 2
+p 4
+p 1
+p 3
+p 2
+p 3
+p 6
+p 4
+p 1
+p 3
+p 3
+p 6
+p 1
+p 4
+p 2
+p 4
+p 1
+p 3
+p 4
+p 3
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 4
+p 2
+p 3
+p 3
+p 3
+p 3
+p 3
+p 4
+p 3
+p 5
+p 2
+p 4
+p 2
+p 3
+p 3
+p 4
+p 3
+p 4
+p 2
+p 3
+p 2
+p 4
+p 2
+p 2
+p 2
+p 1
+p 1
+p 4
+p 2
+p 5
+p 4
+p 2
+p 3
+p 3
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 4
+p 1
+p 3
+p 3
+p 2
+p 3
+p 4
+p 2
+p 1
+p 3
+p 1
+p 3
+p 5
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 4
+p 2
+p 2
+p 1
+p 6
+p 3
+p 2
+p 2
+p 3
+p 3
+p 2
+p 3
+p 4
+p 2
+p 2
+p 2
+p 2
+p 3
+p 3
+p 1
+p 2
+p 2
+p 3
+p 3
+p 4
+p 2
+p 2
+p 3
+p 4
+p 4
+p 3
+p 3
+p 1
+p 4
+p 3
+p 2
+p 3
+p 3
+p 1
+p 3
+p 2
+p 1
+p 2
+p 3
+p 4
+p 4
+p 1
+p 3
+p 1
+p 3
+p 2
+p 3
+p 2
+p 2
+p 3
+p 3
+p 3
+p 2
+p 2
+p 5
+p 4
+p 4
+p 3
+p 3
+p 3
+p 2
+p 2
+p 5
+p 2
+p 2
+p 3
+p 1
+p 3
+p 3
+p 2
+p 4
+p 4
+p 3
+p 2
+p 3
+p 3
+p 3
+p 4
+p 2
+p 2
+p 5
+p 2
+p 4
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 3
+p 3
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 3
+p 3
+p 4
+p 1
+p 4
+p 4
+p 4
+p 6
+p 3
+p 3
+p 3
+p 4
+p 2
+p 4
+p 4
+p 4
+p 4
+p 3
+p 3
+p 1
+p 3
+p 1
+p 2
+p 1
+p 4
+p 3
+p 2
+p 4
+p 2
+p 3
+p 2
+p 2
+p 4
+p 4
+p 4
+p 3
+p 2
+p 2
+p 4
+p 2
+p 2
+p 3
+p 2
+p 5
+p 2
+p 2
+p 2
+p 3
+p 2
+p 3
+p 3
+p 2
+p 2
+p 3
+p 2
+p 2
+p 1
+p 3
+p 2
+p 1
+p 4
+p 3
+p 2
+p 2
+p 4
+p 5
+p 3
+p 2
+p 4
+p 3
+p 3
+p 3
+p 4
+p 2
+p 3
+p 3
+p 5
+p 3
+p 3
+p 1
+p 4
+p 3
+p 2
+p 3
+p 3
+p 5
+p 2
+p 3
+p 1
+p 3
+p 3
+p 3
+p 5
+p 2
+p 3
+p 5
+p 4
+p 4
+p 3
+p 3
+p 2
+p 3
+p 4
+p 3
+p 2
+p 3
+p 2
+p 2
+p 2
+p 5
+p 3
+p 3
+p 3
+p 3
+p 3
+p 3
+p 3
+p 5
+p 1
+p 4
+p 3
+p 3
+p 3
+p 3
+p 1
+p 3
+p 2
+p 4
+p 3
+p 3
+p 3
+p 2
+p 2
+p 2
+p 3
+p 3
+p 1
+p 4
+p 3
+p 3
+p 4
+p 2
+p 3
+p 4
+p 2
+p 2
+p 6
+p 4
+p 2
+p 2
+p 1
+p 3
+p 3
+p 3
+p 2
+p 3
+p 3
+p 2
+p 3
+p 5
+p 2
+p 3
+p 3
+p 4
+p 4
+p 2
+p 3
+p 4
+p 3
+p 2
+p 3
+p 3
+p 4
+p 3
+p 4
+p 1
+p 3
+p 1
+p 4
+p 3
+p 2
+p 4
+p 3
+p 3
+p 2
+p 3
+p 3
+p 1
+p 2
+p 5
+p 3
+p 1
+p 5
+p 3
+p 3
+p 4
+p 3
+p 5
+p 1
+p 2
+p 1
+p 1
+p 2
+p 3
+p 3
+p 3
+p 5
+p 2
+p 3
+p 2
+p 1
+p 3
+p 3
+p 3
+p 2
+p 2
+p 1
+p 3
+p 3
+p 3
+p 4
+p 4
+p 3
+p 2
+p 2
+p 3
+p 3
+p 2
+p 3
+p 4
+p 5
+p 5
+p 3
+p 4
+p 3
+p 2
+p 4
+p 2
+p 2
+p 2
+p 4
+p 1
+p 2
+p 3
+p 2
+p 2
+p 3
+p 3
+p 3
+p 5
+p 2
+p 5
+p 2
+p 3
+p 3
+p 4
+p 1
+p 1
+p 5
+p 4
+p 3
+p 4
+p 4
+p 2
+p 3
+p 3
+p 5
+p 2
+p 3
+p 2
+p 5
+p 4
+p 5
+p 4
+p 1
+p 2
+p 3
+p 3
+p 2
+p 1
+p 2
+p 4
+p 3
+p 5
+p 2
+p 2
+p 3
+p 4
+p 1
+p 3
+p 3
+p 4
+p 4
+p 4
+p 6
+p 3
+p 1
+p 4
+p 3
+p 3
+p 3
+p 5
+p 4
+p 5
+p 3
+p 3
+p 3
+p 3
+p 4
+p 3
+p 1
+p 3
+p 2
+p 3
+p 3
+p 4
+p 3
+p 4
+p 3
+p 3
+p 2
+p 3
+p 2
+p 3
+p 4
+p 3
+p 2
+p 3
+p 2
+p 3
+p 3
+p 3
+p 3
+p 2
+p 3
+p 3
+p 4
+p 3
+p 3
+p 4
+p 3
+p 3
+p 4
+p 5
+p 2
+p 3
+p 4
+p 3
+p 2
+p 1
+p 2
+p 2
+p 3
+p 3
+p 3
+p 3
+p 3
+p 1
+p 4
+p 5
+p 3
+p 5
+p 7
+p 2
+p 5
+p 2
+p 3
+p 5
+p 5
+p 4
+p 4
+p 3
+p 4
+p 3
+p 3
+p 5
+p 4
+p 2
+p 3
+p 3
+p 3
+p 3
+p 4
+p 1
+p 3
+p 4
+p 2
+p 3
+p 3
+p 3
+p 4
+p 3
+p 2
+p 4
+p 3
+p 4
+p 2
+p 5
+p 5
+p 3
+p 3
+p 2
+p 4
+p 2
+p 2
+p 2
+p 4
+p 4
+p 2
+p 2
+p 4
+p 3
+p 2
+p 3
+p 3
+p 2
+p 3
+p 1
+p 3
+p 4
+p 2
+p 5
+p 2
+p 4
+p 3
+p 3
+p 3
+p 1
+p 2
+p 2
+p 4
+p 4
+p 2
+p 3
+p 2
+p 2
+p 3
+p 4
+p 4
+p 3
+p 2
+p 2
+p 2
+p 4
+p 5
+p 4
+p 2
+p 5
+p 4
+p 2
+p 2
+p 2
+p 5
+p 3
+p 3
+p 2
+p 2
+p 3
+p 3
+p 1
+p 3
+p 2
+p 5
+p 5
+p 3
+p 4
+p 1
+p 2
+p 3
+p 3
+p 5
+p 3
+p 3
+p 4
+p 4
+p 3
+p 2
+p 3
+p 3
+p 1
+p 2
+p 3
+p 4
+p 3
+p 2
+p 2
+p 4
+p 4
+p 3
+p 2
+p 3
+p 5
+p 2
+p 4
+p 1
+p 4
+p 3
+p 3
+p 2
+p 5
+p 4
+p 4
+p 1
+p 5
+p 2
+p 2
+p 2
+p 2
+p 2
+p 3
+p 2
+p 5
+p 3
+p 3
+p 1
+p 2
+p 4
+p 2
+p 5
+p 4
+p 3
+p 1
+p 2
+p 4
+p 3
+p 4
+p 3
+p 3
+p 1
+p 1
+p 2
+p 1
+p 3
+p 4
+p 2
+p 2
+p 1
+p 4
+p 3
+p 3
+p 3
+p 3
+p 2
+p 3
+p 3
+p 2
+p 3
+p 4
+p 2
+p 2
+p 1
+p 4
+p 4
+p 2
+p 2
+p 3
+p 3
+p 4
+p 4
+p 3
+p 4
+p 1
+p 2
+p 3
+p 2
+p 3
+p 3
+p 2
+p 3
+p 2
+p 3
+p 4
+p 3
+p 3
+p 2
+p 4
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/media/GT/turtle2.lod
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/media/GT/turtle2.lod	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/media/GT/turtle2.lod	(revision 1092)
@@ -0,0 +1,3864 @@
+v 153
+v 459
+v 3
+v 414
+v 516
+v 102
+v 248
+v 249
+v 9
+v 250
+v 244
+v 245
+v 13
+v 246
+v 539
+v 539
+v 277
+v 277
+v 504
+v 504
+v 281
+v 281
+v 485
+v 485
+v 251
+v 251
+v 247
+v 247
+v 488
+v 488
+v 102
+v 516
+v 163
+v 387
+v 215
+v 36
+v 540
+v 437
+v 438
+v 40
+v 505
+v 441
+v 442
+v 513
+v 150
+v 151
+v 318
+v 460
+v 196
+v 50
+v 152
+v 53
+v 53
+v 54
+v 54
+v 348
+v 380
+v 279
+v 280
+v 60
+v 283
+v 62
+v 274
+v 275
+v 276
+v 187
+v 188
+v 187
+v 188
+v 428
+v 421
+v 422
+v 164
+v 314
+v 75
+v 329
+v 430
+v 473
+v 158
+v 159
+v 253
+v 515
+v 429
+v 514
+v 392
+v 393
+v 389
+v 390
+v 312
+v 312
+v 92
+v 92
+v 93
+v 93
+v 95
+v 95
+v 335
+v 337
+v 339
+v 335
+v 337
+v 339
+v 297
+v 387
+v 411
+v 412
+v 483
+v 482
+v 535
+v 507
+v 343
+v 344
+v 346
+v 345
+v 408
+v 506
+v 462
+v 461
+v 355
+v 357
+v 511
+v 509
+v 324
+v 324
+v 328
+v 328
+v 319
+v 319
+v 320
+v 320
+v 491
+v 492
+v 397
+v 398
+v 538
+v 538
+v 541
+v 541
+v 503
+v 503
+v 536
+v 536
+v 143
+v 470
+v 293
+v 472
+v 296
+v 467
+v 149
+v 468
+v 414
+v 414
+v 153
+v 459
+v 489
+v 490
+v 510
+v 508
+v 512
+v 368
+v 521
+v 529
+v 473
+v 164
+v 314
+v 460
+v 372
+v 527
+v 478
+v 479
+v 54
+v 54
+v 54
+v 54
+v 518
+v 518
+v 376
+v 530
+v 427
+v 426
+v 312
+v 451
+v 450
+v 447
+v 449
+v 187
+v 187
+v 188
+v 188
+v 501
+v 502
+v 480
+v 481
+v 330
+v 523
+v 532
+v 516
+v 430
+v 379
+v 452
+v 452
+v 537
+v 537
+v 448
+v 448
+v 542
+v 542
+v 419
+v 509
+v 458
+v 534
+v 511
+v 493
+v 494
+v 395
+v 380
+v 456
+v 381
+v 364
+v 365
+v 364
+v 365
+v 224
+v 224
+v 225
+v 225
+v 309
+v 310
+v 309
+v 310
+v 232
+v 232
+v 233
+v 233
+v 236
+v 236
+v 237
+v 237
+v 497
+v 499
+v 497
+v 499
+v 475
+v 517
+v 488
+v 488
+v 247
+v 247
+v 485
+v 485
+v 251
+v 251
+v 510
+v 515
+v 508
+v 403
+v 404
+v 258
+v 405
+v 401
+v 402
+v 262
+v 399
+v 535
+v 535
+v 507
+v 507
+v 348
+v 412
+v 411
+v 482
+v 483
+v 330
+v 377
+v 539
+v 277
+v 277
+v 277
+v 277
+v 281
+v 281
+v 281
+v 281
+v 504
+v 541
+v 538
+v 538
+v 503
+v 503
+v 536
+v 476
+v 470
+v 293
+v 472
+v 468
+v 296
+v 467
+v 516
+v 430
+v 525
+v 520
+v 491
+v 492
+v 233
+v 233
+v 233
+v 233
+v 309
+v 309
+v 310
+v 310
+v 522
+v 428
+v 453
+v 414
+v 414
+v 519
+v 417
+v 513
+v 537
+v 452
+v 452
+v 452
+v 452
+v 448
+v 448
+v 448
+v 448
+v 542
+v 459
+v 533
+v 517
+v 521
+v 529
+v 475
+v 429
+v 514
+v 429
+v 514
+v 429
+v 514
+v 489
+v 490
+v 408
+v 506
+v 462
+v 461
+v 456
+v 460
+v 437
+v 438
+v 540
+v 505
+v 441
+v 442
+v 497
+v 499
+v 237
+v 237
+v 454
+v 464
+v 524
+v 531
+v 457
+v 483
+v 483
+v 482
+v 482
+v 512
+v 518
+v 528
+v 372
+v 527
+v 522
+v 519
+v 376
+v 530
+v 526
+v 533
+v 460
+v 513
+v 429
+v 514
+v 485
+v 251
+v 247
+v 488
+v 54
+v 54
+v 504
+v 281
+v 281
+v 539
+v 277
+v 277
+v 95
+v 95
+v 509
+v 511
+v 437
+v 438
+v 540
+v 540
+v 505
+v 505
+v 441
+v 442
+v 408
+v 408
+v 506
+v 506
+v 535
+v 507
+v 507
+v 515
+v 515
+v 520
+v 477
+v 525
+v 516
+v 533
+v 188
+v 188
+v 188
+v 188
+v 476
+v 510
+v 508
+v 429
+v 514
+v 512
+v 540
+v 540
+v 540
+v 540
+v 437
+v 437
+v 438
+v 438
+v 441
+v 441
+v 442
+v 442
+v 505
+v 505
+v 505
+v 505
+v 448
+v 448
+v 542
+v 537
+v 452
+v 452
+v 524
+v 523
+v 532
+v 520
+v 458
+v 534
+v 515
+v 516
+v 535
+v 507
+v 507
+v 531
+v 188
+v 188
+v 536
+v 503
+v 503
+v 538
+v 538
+v 541
+v 54
+v 54
+v 517
+v 519
+v 522
+v 480
+v 480
+v 481
+v 481
+v 506
+v 408
+v 408
+v 539
+v 277
+v 281
+v 504
+v 491
+v 491
+v 492
+v 492
+v 518
+v 518
+v 535
+v 535
+v 507
+v 507
+v 507
+v 507
+v 534
+v 534
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+v -1
+c
+d 8 2 0 0 0
+c
+d 8 3 1 0 1
+c
+d 8 3 0 0 0
+c
+d 14 2 0 1 0
+c
+d 14 3 0 0 0
+c
+d 22 2 0 0 0
+c
+d 25 2 0 0 1
+c
+d 25 3 0 0 0
+c
+d 0 2 0 0 0
+c
+d 19 2 0 0 1
+c
+d 19 3 0 0 0
+c
+d 22 1 0 0 1
+c
+d 24 1 0 0 0
+c
+d 25 1 0 0 1
+c
+d 27 1 0 0 0
+c
+d 0 1 0 0 1
+c
+d 2 1 0 0 0
+c
+d 19 1 0 0 1
+c
+d 21 1 0 0 0
+c
+d 22 1 0 0 1
+c
+d 24 1 0 0 0
+c
+d 25 1 0 0 1
+c
+d 27 1 0 0 0
+c
+d 19 1 0 0 1
+c
+d 21 1 0 0 0
+c
+d 0 1 0 0 1
+c
+d 2 1 0 0 0
+c
+d 14 2 0 1 0
+c
+d 14 2 0 2 0
+c
+d 8 2 0 1 0
+c
+d 11 1 0 0 0
+c
+d 12 1 0 0 0
+c
+d 12 1 0 0 0
+c
+d 13 2 0 0 0
+c
+d 23 2 1 0 1
+c
+d 23 2 0 0 0
+c
+d 26 2 0 0 0
+c
+d 1 2 1 0 1
+c
+d 1 2 0 0 0
+c
+d 20 2 0 0 0
+c
+d 12 3 0 1 0
+c
+d 8 1 0 1 0
+c
+d 9 1 0 0 0
+c
+d 11 1 0 1 0
+c
+d 12 1 0 0 0
+c
+d 14 3 0 1 0
+c
+d 14 2 0 2 0
+c
+d 8 2 0 0 1
+c
+d 5 2 0 0 0
+c
+d 6 1 0 0 0
+c
+d 8 2 0 0 0
+c
+d 7 1 0 0 1
+c
+d 11 1 0 0 1
+c
+d 7 2 0 0 1
+c
+d 11 1 0 0 1
+c
+d 7 2 0 0 0
+c
+d 11 1 0 0 0
+c
+d 14 2 0 1 0
+c
+d 12 3 0 0 0
+c
+d 19 4 0 0 0
+c
+d 0 4 1 0 1
+c
+d 0 4 0 0 0
+c
+d 22 4 1 0 1
+c
+d 22 4 0 0 0
+c
+d 25 4 0 0 0
+c
+d 7 1 0 0 1
+c
+d 13 1 0 0 0
+c
+d 7 2 0 1 0
+c
+d 7 3 1 0 0
+c
+d 5 2 0 0 0
+c
+d 6 1 0 0 0
+c
+d 8 2 0 0 1
+c
+d 6 1 0 0 0
+c
+d 8 2 0 0 0
+c
+d 12 1 0 0 0
+c
+d 13 1 0 0 0
+c
+d 11 2 0 0 0
+c
+d 12 2 0 1 0
+c
+d 11 1 0 1 0
+c
+d 12 1 0 1 0
+c
+d 8 1 0 0 0
+c
+d 9 1 0 1 0
+c
+d 9 1 0 0 0
+c
+d 10 1 0 0 0
+c
+d 9 1 0 0 0
+c
+d 10 1 0 1 0
+c
+d 22 1 0 0 0
+c
+d 23 1 0 0 0
+c
+d 25 1 0 0 0
+c
+d 26 1 0 1 0
+c
+d 0 1 0 0 0
+c
+d 1 1 0 0 0
+c
+d 19 1 0 0 0
+c
+d 20 1 0 1 0
+c
+d 7 2 0 0 1
+c
+d 5 1 0 0 0
+c
+d 6 1 0 0 0
+c
+d 7 1 0 0 1
+c
+d 13 1 0 1 1
+c
+d 7 1 0 0 1
+c
+d 8 1 0 0 1
+c
+d 13 1 0 0 1
+c
+d 7 1 0 0 1
+c
+d 8 1 0 0 1
+c
+d 13 1 0 0 1
+c
+d 7 1 0 0 1
+c
+d 7 1 0 0 0
+c
+d 7 1 0 0 1
+c
+d 11 1 0 0 0
+c
+d 14 4 0 0 0
+c
+d 11 2 0 0 0
+c
+d 17 2 0 1 0
+c
+d 3 2 0 0 0
+c
+d 18 2 0 0 0
+c
+d 4 2 0 1 0
+c
+d 17 2 0 0 0
+c
+d 3 2 0 1 0
+c
+d 18 2 0 1 0
+c
+d 4 2 0 1 0
+c
+d 17 2 0 1 0
+c
+d 3 2 0 1 0
+c
+d 18 2 0 1 0
+c
+d 4 2 0 1 0
+c
+d 3 4 0 0 0
+c
+d 17 3 0 1 0
+c
+d 4 3 0 0 0
+c
+d 18 3 0 0 0
+c
+d 8 1 0 0 0
+c
+d 8 1 0 0 0
+c
+d 24 1 0 0 1
+c
+d 22 1 0 0 0
+c
+d 23 1 0 0 0
+c
+d 27 1 0 0 1
+c
+d 25 2 0 0 0
+c
+d 26 1 0 0 0
+c
+d 21 1 0 0 1
+c
+d 19 2 0 0 0
+c
+d 20 1 0 0 0
+c
+d 2 1 0 0 1
+c
+d 0 1 0 0 0
+c
+d 1 1 0 0 0
+c
+d 16 2 0 0 0
+c
+d 8 1 0 0 0
+c
+d 8 2 0 0 0
+c
+d 22 1 0 1 1
+c
+d 24 1 0 0 0
+c
+d 25 1 0 1 1
+c
+d 27 1 0 0 0
+c
+d 0 1 0 1 1
+c
+d 2 1 0 0 0
+c
+d 19 1 0 1 1
+c
+d 21 1 0 0 0
+c
+d 22 1 0 0 1
+c
+d 22 1 0 0 0
+c
+d 24 1 0 0 0
+c
+d 25 1 0 1 0
+c
+d 19 1 0 1 0
+c
+d 0 1 0 0 1
+c
+d 0 1 0 0 0
+c
+d 2 1 0 0 0
+c
+d 5 1 0 0 1
+c
+d 8 1 1 0 0
+c
+d 9 2 0 0 0
+c
+d 5 2 0 0 1
+c
+d 6 1 0 0 1
+c
+d 8 3 1 0 1
+c
+d 5 2 1 0 0
+c
+d 6 1 0 0 0
+c
+d 8 3 1 1 0
+c
+d 16 2 0 0 0
+c
+d 8 1 0 1 0
+c
+d 9 1 0 0 0
+c
+d 10 1 0 0 0
+c
+d 8 1 0 1 0
+c
+d 12 2 0 0 0
+c
+d 12 2 0 0 0
+c
+d 11 1 0 0 0
+c
+d 12 1 0 1 0
+c
+d 16 2 0 0 0
+c
+d 11 2 0 1 0
+c
+d 8 3 1 0 1
+c
+d 8 4 0 0 0
+c
+d 14 2 1 0 0
+c
+d 16 3 0 0 0
+c
+d 16 2 0 0 0
+c
+d 7 1 0 1 1
+c
+d 11 1 0 0 0
+c
+d 16 2 0 1 1
+c
+d 15 1 0 0 0
+c
+d 16 2 0 0 0
+c
+d 8 2 0 0 0
+c
+d 13 1 0 0 0
+c
+d 8 1 0 0 0
+c
+d 11 1 0 1 0
+c
+d 5 1 0 0 0
+c
+d 6 1 0 0 0
+c
+d 2 4 0 0 0
+c
+d 21 4 0 0 0
+c
+d 24 4 0 0 0
+c
+d 27 4 0 0 0
+c
+d 7 1 0 1 1
+c
+d 13 2 0 0 1
+c
+d 7 1 0 0 1
+c
+d 13 2 0 0 1
+c
+d 7 2 0 0 0
+c
+d 13 3 0 0 0
+c
+d 16 2 0 0 0
+c
+d 16 2 0 0 0
+c
+d 15 2 0 1 0
+c
+d 16 2 0 0 0
+c
+d 14 2 0 0 0
+c
+d 12 1 0 1 0
+c
+d 13 1 0 0 0
+c
+d 14 3 0 0 0
+c
+d 2 1 0 0 1
+c
+d 1 1 0 0 0
+c
+d 21 1 0 0 1
+c
+d 20 1 0 0 0
+c
+d 24 1 0 0 1
+c
+d 23 1 0 0 0
+c
+d 27 1 0 0 1
+c
+d 26 1 0 0 0
+c
+d 14 2 0 1 0
+c
+d 8 1 0 1 0
+c
+d 16 2 0 0 0
+c
+d 8 1 0 1 0
+c
+d 16 2 0 0 0
+c
+d 8 2 0 0 0
+c
+d 12 1 0 1 0
+c
+d 13 4 1 0 0
+c
+d 15 2 0 1 0
+c
+d 10 2 0 0 0
+c
+d 11 1 0 0 0
+c
+d 18 1 0 0 1
+c
+d 17 1 0 1 0
+c
+d 4 1 0 1 1
+c
+d 3 1 0 0 1
+c
+d 3 1 0 0 1
+c
+d 4 1 0 0 1
+c
+d 3 1 0 0 0
+c
+d 4 1 0 0 0
+c
+d 18 1 0 0 1
+c
+d 17 1 0 0 0
+c
+d 4 1 0 1 1
+c
+d 3 1 0 0 1
+c
+d 3 1 0 0 1
+c
+d 4 1 0 0 1
+c
+d 3 1 0 0 0
+c
+d 4 1 0 0 0
+c
+d 18 1 0 1 1
+c
+d 17 1 0 0 1
+c
+d 17 1 0 0 1
+c
+d 18 2 0 0 1
+c
+d 17 1 0 0 0
+c
+d 18 2 0 0 0
+c
+d 4 1 0 0 1
+c
+d 3 2 0 0 0
+c
+d 14 1 0 1 0
+c
+d 14 1 0 1 0
+c
+d 0 1 1 0 1
+c
+d 0 2 1 0 0
+c
+d 2 1 0 1 0
+c
+d 19 3 0 0 1
+c
+d 21 1 0 1 1
+c
+d 19 4 0 0 0
+c
+d 21 1 0 0 0
+c
+d 22 1 1 0 1
+c
+d 22 2 1 0 0
+c
+d 24 1 0 1 0
+c
+d 25 3 0 0 1
+c
+d 27 1 0 1 1
+c
+d 25 4 0 0 0
+c
+d 27 1 0 0 0
+c
+d 8 3 0 0 0
+c
+d 8 2 0 1 0
+c
+d 9 1 1 0 0
+c
+d 8 1 0 1 0
+c
+d 11 2 0 0 0
+c
+d 1 2 0 0 0
+c
+d 20 2 0 0 1
+c
+d 20 2 0 0 0
+c
+d 21 1 0 0 0
+c
+d 23 2 0 0 0
+c
+d 26 2 0 0 1
+c
+d 26 2 0 0 0
+c
+d 27 1 0 0 0
+c
+d 18 1 0 0 1
+c
+d 17 1 1 0 0
+c
+d 4 1 0 0 1
+c
+d 3 1 1 0 0
+c
+d 14 2 0 0 0
+c
+d 3 4 1 0 0
+c
+d 17 3 1 0 0
+c
+d 4 3 1 0 0
+c
+d 18 4 1 0 0
+c
+d 15 2 0 1 0
+c
+d 16 2 0 1 0
+c
+d 22 3 1 0 0
+c
+d 24 2 0 0 0
+c
+d 25 1 0 1 1
+c
+d 25 2 0 0 1
+c
+d 27 3 0 0 1
+c
+d 25 3 0 0 1
+c
+d 27 4 0 0 1
+c
+d 19 1 0 1 1
+c
+d 19 2 0 0 1
+c
+d 21 3 0 0 1
+c
+d 19 3 0 0 1
+c
+d 21 4 0 0 1
+c
+d 0 3 1 0 0
+c
+d 2 2 0 0 0
+c
+d 25 1 0 0 0
+c
+d 22 1 0 0 0
+c
+d 0 1 0 0 0
+c
+d 19 1 0 0 0
+c
+d 16 2 0 1 0
+c
+d 24 1 0 1 0
+c
+d 27 1 0 1 1
+c
+d 27 1 0 0 0
+c
+d 2 1 0 1 0
+c
+d 21 1 0 1 1
+c
+d 21 1 0 0 0
+c
+d 14 5 1 0 0
+c
+d 12 1 0 1 0
+c
+d 13 1 0 0 0
+c
+d 16 2 0 0 0
+c
+d 15 2 0 1 0
+c
+d 16 2 0 0 0
+c
+d 4 1 0 0 1
+c
+d 3 1 0 0 0
+c
+d 18 1 0 1 1
+c
+d 17 1 0 0 1
+c
+d 17 1 0 0 1
+c
+d 18 1 0 0 1
+c
+d 17 2 0 0 0
+c
+d 18 2 0 0 0
+c
+d 16 2 0 1 0
+c
+d 5 2 0 0 0
+c
+d 6 2 0 0 0
+c
+d 7 4 0 1 0
+c
+d 15 2 0 0 0
+c
+d 5 2 0 0 1
+c
+d 6 1 0 0 1
+c
+d 8 3 1 0 1
+c
+d 5 1 0 0 0
+c
+d 16 2 0 2 0
+c
+d 16 2 0 1 0
+c
+d 11 1 0 0 0
+c
+d 12 2 1 0 0
+c
+d 19 2 0 0 0
+c
+d 20 3 1 0 0
+c
+d 21 1 0 1 0
+c
+d 0 1 0 0 1
+c
+d 1 1 1 0 1
+c
+d 2 1 0 1 1
+c
+d 0 1 0 0 0
+c
+d 1 2 0 1 0
+c
+d 22 1 0 0 1
+c
+d 23 1 1 0 1
+c
+d 24 1 0 1 1
+c
+d 22 1 0 0 0
+c
+d 23 2 0 1 0
+c
+d 25 2 0 0 0
+c
+d 26 3 1 0 0
+c
+d 27 1 0 1 0
+c
+d 6 1 0 0 0
+c
+d 8 3 1 1 0
+c
+d 15 4 1 0 0
+c
+d 14 1 0 0 0
+c
+d 16 2 0 0 0
+c
+d 14 1 0 1 0
+c
+d 10 1 0 0 1
+c
+d 11 2 0 0 1
+c
+d 7 1 0 0 1
+c
+d 7 1 0 0 1
+c
+d 11 1 0 0 1
+c
+d 5 1 0 0 0
+c
+d 16 2 0 0 0
+c
+d 18 2 0 2 0
+c
+d 4 4 0 2 0
+c
+d 3 3 0 0 0
+c
+d 17 3 0 1 0
+c
+d 15 3 0 0 0
+c
+d 14 4 1 2 0
+c
+d 27 4 1 0 0
+c
+d 24 4 1 0 0
+c
+d 2 4 1 0 0
+c
+d 21 4 1 0 0
+c
+d 4 3 0 0 1
+c
+d 4 2 0 0 0
+c
+d 18 3 1 0 1
+c
+d 18 2 0 0 0
+c
+d 16 2 0 0 0
+c
+d 15 2 0 0 0
+c
+d 15 4 0 0 0
+c
+d 15 2 0 0 0
+c
+d 16 2 0 1 0
+c
+d 18 1 0 0 1
+c
+d 17 1 0 0 0
+c
+d 18 1 1 0 0
+c
+d 3 1 0 0 0
+c
+d 11 1 0 0 0
+c
+d 12 1 0 0 0
+c
+d 15 3 0 0 0
+c
+d 15 2 0 1 0
+c
+d 15 2 0 0 1
+c
+d 15 2 0 0 0
+c
+d 16 1 0 0 0
+c
+d 16 2 1 0 0
+c
+d 16 3 0 0 0
+c
+d 15 2 0 0 1
+c
+d 15 2 0 0 0
+c
+d 16 1 0 0 0
+c
+d 16 3 1 0 0
+c
+d 15 2 1 0 0
+c
+d 14 4 1 0 0
+c
+d 12 4 2 0 0
+c
+d 13 3 0 0 0
+c
+d 10 2 0 0 1
+c
+d 11 1 0 0 1
+c
+d 9 1 0 0 0
+c
+d 10 1 0 0 0
+c
+d 22 1 1 0 0
+c
+d 23 1 0 0 0
+c
+d 25 1 0 0 0
+c
+d 26 1 0 0 0
+c
+d 19 1 0 0 0
+c
+d 20 1 0 0 0
+c
+d 0 1 1 0 0
+c
+d 1 1 0 0 0
+c
+d 11 3 0 0 1
+c
+d 12 1 0 0 1
+c
+d 11 3 2 0 0
+c
+d 0 3 1 1 0
+c
+d 1 1 0 0 0
+c
+d 19 3 0 1 1
+c
+d 20 1 0 0 1
+c
+d 19 2 2 0 0
+c
+d 22 3 1 1 0
+c
+d 23 1 0 0 0
+c
+d 25 3 0 1 1
+c
+d 26 1 0 0 1
+c
+d 25 2 2 0 0
+c
+d 8 3 0 0 1
+c
+d 9 1 0 0 1
+c
+d 8 1 0 0 0
+c
+d 8 3 0 1 0
+c
+d 26 2 0 0 1
+c
+d 27 1 0 0 1
+c
+d 26 1 0 0 0
+c
+d 24 1 1 0 1
+c
+d 23 3 1 0 0
+c
+d 2 1 1 0 1
+c
+d 1 3 1 0 0
+c
+d 20 2 0 0 1
+c
+d 21 1 0 0 1
+c
+d 20 1 0 0 0
+c
+d 17 1 0 0 1
+c
+d 17 1 0 0 0
+c
+d 18 2 0 0 0
+c
+d 3 1 0 0 0
+c
+d 17 3 1 0 0
+c
+d 3 5 0 0 1
+c
+d 3 2 1 0 0
+c
+d 5 4 0 0 1
+c
+d 6 1 0 0 1
+c
+d 8 2 1 0 1
+c
+d 9 2 0 1 1
+c
+d 5 1 1 0 0
+c
+d 15 2 1 0 0
+c
+d 16 3 0 0 0
+c
+d 16 3 1 0 0
+c
+d 14 2 0 0 0
+c
+d 15 2 1 0 0
+c
+d 11 1 0 0 1
+c
+d 12 1 0 0 1
+c
+d 13 1 0 0 1
+c
+d 7 2 1 0 1
+c
+d 13 1 0 2 0
+c
+d 16 5 1 0 0
+c
+d 8 1 0 0 0
+c
+d 10 1 0 0 0
+c
+d 11 1 0 0 0
+c
+d 8 2 0 1 0
+c
+d 12 1 0 0 0
+c
+d 13 2 0 0 0
+c
+d 5 2 1 0 1
+c
+d 6 2 0 0 1
+c
+d 7 5 1 0 1
+c
+d 5 2 0 0 0
+c
+d 6 2 0 0 0
+c
+d 7 5 1 0 0
+c
+d 10 2 1 0 0
+c
+d 11 2 0 1 0
+c
+d 12 1 0 0 0
+c
+d 13 2 0 0 0
+c
+d 22 1 0 0 1
+c
+d 23 1 1 0 1
+c
+d 24 1 1 0 0
+c
+d 25 1 0 0 1
+c
+d 26 1 0 1 1
+c
+d 27 1 0 0 1
+c
+d 25 1 0 0 1
+c
+d 26 3 1 0 1
+c
+d 27 2 1 0 1
+c
+d 25 1 0 0 0
+c
+d 26 2 0 0 0
+c
+d 27 3 0 0 0
+c
+d 19 1 0 0 1
+c
+d 20 1 0 1 1
+c
+d 21 1 0 0 1
+c
+d 19 1 0 0 1
+c
+d 20 3 1 0 1
+c
+d 21 2 1 0 1
+c
+d 19 1 0 0 0
+c
+d 20 2 0 0 0
+c
+d 21 3 0 0 0
+c
+d 0 1 0 0 1
+c
+d 1 1 1 0 1
+c
+d 2 1 1 0 0
+c
+d 24 4 1 0 1
+c
+d 22 2 0 0 0
+c
+d 23 4 0 0 0
+c
+d 24 4 0 0 0
+c
+d 27 4 1 0 0
+c
+d 21 4 1 0 0
+c
+d 2 4 1 0 1
+c
+d 0 2 0 0 0
+c
+d 1 4 0 0 0
+c
+d 2 4 0 0 0
+c
+d 15 8 2 0 0
+c
+d 16 2 0 0 1
+c
+d 16 2 0 0 0
+c
+d 15 5 0 1 0
+c
+d 16 3 0 0 1
+c
+d 16 4 0 0 0
+c
+d 5 2 1 0 0
+c
+d 6 2 0 0 0
+c
+d 8 3 1 0 0
+c
+d 14 7 1 0 0
+c
+d 17 6 0 0 0
+c
+d 3 7 1 0 1
+c
+d 3 3 1 0 0
+c
+d 15 4 1 1 0
+c
+d 6 1 0 0 0
+c
+d 19 1 0 1 0
+c
+d 21 1 0 1 0
+c
+d 0 1 0 1 1
+c
+d 2 1 0 0 1
+c
+d 0 1 0 0 0
+c
+d 22 1 0 1 1
+c
+d 24 1 0 0 1
+c
+d 22 1 0 0 0
+c
+d 25 1 0 1 0
+c
+d 27 1 0 1 0
+c
+d 11 3 1 0 1
+c
+d 11 1 1 0 0
+c
+d 14 2 0 2 0
+c
+d 16 7 1 0 0
+c
+d 16 5 1 1 0
+c
+d 16 1 0 0 1
+c
+d 15 1 0 0 1
+c
+d 16 2 0 0 1
+c
+d 15 1 0 1 1
+c
+d 16 4 1 1 1
+c
+d 15 1 0 0 0
+c
+d 16 3 0 0 0
+c
+d 3 1 0 0 0
+c
+d 4 3 1 0 0
+c
+d 17 1 0 0 1
+c
+d 18 5 0 0 1
+c
+d 18 2 2 0 0
+c
+d 22 4 1 0 0
+c
+d 23 1 0 0 0
+c
+d 24 1 0 1 0
+c
+d 25 2 0 1 0
+c
+d 19 2 0 1 0
+c
+d 0 4 1 0 0
+c
+d 1 1 0 0 0
+c
+d 2 1 0 1 0
+c
+d 16 1 0 0 1
+c
+d 15 1 0 0 1
+c
+d 16 4 0 0 1
+c
+d 15 1 0 1 1
+c
+d 16 6 2 1 1
+c
+d 15 1 0 0 0
+c
+d 16 5 0 0 0
+c
+d 16 1 1 0 1
+c
+d 15 2 1 1 0
+c
+d 16 2 1 1 0
+c
+d 17 2 2 0 0
+c
+d 4 3 0 0 1
+c
+d 4 2 1 0 1
+c
+d 3 2 1 0 1
+c
+d 4 3 1 1 1
+c
+d 3 1 1 0 0
+c
+d 16 1 1 0 1
+c
+d 15 1 0 1 0
+c
+d 16 2 1 0 0
+a
+b 8
+b 24
+b 14
+b 16
+b 18
+b 16
+b 1
+b 14
+b 16
+b 17
+b 34
+b 47
+b 44
+b 1
+b 40
+b 42
+b 50
+b 17
+b 19
+b 18
+b 20
+b 17
+b 18
+b 20
+b 17
+b 19
+b 18
+b 20
+b 17
+b 18
+b 20
+b 12
+b 20
+b 13
+b 21
+b 12
+b 20
+b 13
+b 21
+b 14
+b 18
+b 15
+b 19
+b 15
+b 19
+b 14
+b 18
+b 36
+b 47
+b 46
+b 1
+b 30
+b 43
+b 29
+b 1
+b 41
+b 1
+b 10
+b 21
+b 18
+b 1
+b 18
+b 14
+b 20
+b 10
+b 12
+b 7
+b 9
+b 7
+b 1
+b 7
+b 8
+b 8
+b 10
+b 7
+b 9
+b 7
+b 1
+b 7
+b 8
+b 8
+b 10
+b 11
+b 19
+b 21
+b 9
+b 1
+b 13
+b 13
+b 1
+b 10
+b 20
+b 19
+b 1
+b 10
+b 26
+b 28
+b 39
+b 36
+b 1
+b 16
+b 29
+b 15
+b 1
+b 27
+b 1
+b 6
+b 21
+b 0
+b 2
+b 5
+b 6
+b 21
+b 16
+b 10
+b 14
+b 16
+b 10
+b 14
+b 16
+b 10
+b 20
+b 31
+b 29
+b 1
+b 11
+b 13
+b 15
+b 8
+b 10
+b 12
+b 26
+b 7
+b 9
+b 11
+b 25
+b 9
+b 1
+b 7
+b 9
+b 10
+b 24
+b 7
+b 9
+b 11
+b 25
+b 9
+b 1
+b 7
+b 9
+b 10
+b 24
+b 8
+b 10
+b 12
+b 26
+b 4
+b 7
+b 5
+b 17
+b 14
+b 1
+b 9
+b 11
+b 13
+b 9
+b 1
+b 4
+b 6
+b 4
+b 4
+b 23
+b 3
+b 4
+b 23
+b 22
+b 6
+b 11
+b 23
+b 7
+b 23
+b 22
+b 1
+b 22
+b 22
+b 1
+b 6
+b 4
+b 1
+b 5
+b 4
+b 4
+b 1
+b 5
+b 5
+b 7
+b 3
+b 0
+b 1
+b 21
+b 2
+b 23
+b 3
+b 0
+b 1
+b 21
+b 2
+b 23
+b 3
+b 0
+b 1
+b 1
+b 18
+b 10
+b 0
+b 2
+b 5
+b 3
+b 1
+b 2
+b 26
+b 3
+b 2
+b 26
+b 3
+b 0
+b 0
+b 15
+b 8
+b 30
+b 32
+b 35
+b 36
+b 13
+b 21
+b 10
+b 27
+b 26
+b 1
+b 10
+b 26
+b 11
+b 28
+b 12
+b 29
+b 26
+b 1
+b 14
+b 29
+b 6
+b 30
+b 29
+b 1
+b 3
+b 20
+b 18
+b 1
+b 4
+b 21
+b 19
+b 1
+b 6
+b 23
+b 22
+b 1
+b 14
+b 22
+b 21
+b 1
+b 7
+b 22
+b 19
+b 1
+b 8
+b 23
+b 20
+b 1
+b 0
+b 2
+b 19
+b 29
+b 0
+b 2
+b 19
+b 19
+b 1
+b 16
+b 18
+b 26
+b 15
+b 17
+b 27
+b 45
+b 35
+b 6
+b 1
+b 13
+b 7
+b 0
+b 2
+b 13
+b 7
+b 0
+b 2
+b 13
+b 6
+b 1
+b 13
+b 19
+b 46
+b 39
+b 29
+b 49
+b 8
+b 6
+b 1
+b 0
+b 9
+b 7
+b 1
+b 1
+b 8
+b 6
+b 1
+b 0
+b 9
+b 7
+b 1
+b 1
+b 2
+b 2
+b 4
+b 3
+b 0
+b 1
+b 3
+b 0
+b 1
+b 2
+b 2
+b 4
+b 7
+b 13
+b 13
+b 1
+b 8
+b 10
+b 0
+b 2
+b 5
+b 6
+b 20
+b 21
+b 19
+b 1
+b 0
+b 2
+b 0
+b 1
+b 5
+b 6
+b 19
+b 20
+b 18
+b 1
+b 5
+b 1
+b 21
+b 48
+b 39
+b 38
+b 1
+b 1
+b 7
+b 29
+b 28
+b 1
+b 1
+b 25
+b 5
+b 21
+b 22
+b 4
+b 2
+b 1
+b 17
+b 44
+b 7
+b 25
+b 22
+b 1
+b 8
+b 10
+b 14
+b 13
+b 1
+b 8
+b 10
+b 13
+b 14
+b 10
+b 23
+b 22
+b 1
+b 23
+b 25
+b 50
+b 13
+b 40
+b 11
+b 10
+b 1
+b 14
+b 0
+b 24
+b 23
+b 1
+b 2
+b 15
+b 40
+b 22
+b 24
+b 1
+b 32
+b 3
+b 0
+b 1
+b 7
+b 2
+b 3
+b 5
+b 7
+b 23
+b 4
+b 6
+b 8
+b 24
+b 3
+b 5
+b 7
+b 23
+b 4
+b 6
+b 8
+b 24
+b 8
+b 5
+b 1
+b 9
+b 15
+b 6
+b 9
+b 15
+b 4
+b 6
+b 5
+b 9
+b 15
+b 7
+b 32
+b 11
+b 36
+b 36
+b 61
+b 58
+b 1
+b 9
+b 34
+b 16
+b 26
+b 16
+b 15
+b 1
+b 6
+b 0
+b 2
+b 15
+b 8
+b 11
+b 9
+b 11
+b 8
+b 11
+b 9
+b 11
+b 6
+b 19
+b 17
+b 1
+b 25
+b 24
+b 1
+b 5
+b 30
+b 31
+b 30
+b 1
+b 3
+b 28
+b 2
+b 19
+b 14
+b 12
+b 1
+b 8
+b 10
+b 11
+b 13
+b 10
+b 2
+b 46
+b 69
+b 68
+b 1
+b 2
+b 4
+b 0
+b 10
+b 11
+b 10
+b 1
+b 11
+b 10
+b 1
+b 9
+b 9
+b 11
+b 9
+b 11
+b 4
+b 5
+b 5
+b 5
+b 1
+b 15
+b 15
+b 5
+b 15
+b 5
+b 2
+b 0
+b 1
+b 3
+b 3
+b 0
+b 14
+b 3
+b 0
+b 14
+b 3
+b 1
+b 17
+b 11
+b 11
+b 1
+b 5
+b 4
+b 1
+b 13
+b 11
+b 1
+b 13
+b 15
+b 11
+b 1
+b 16
+b 15
+b 1
+b 13
+b 14
+b 16
+b 17
+b 16
+b 1
+b 11
+b 13
+b 14
+b 16
+b 17
+b 13
+b 11
+b 1
+b 13
+b 15
+b 11
+b 1
+b 16
+b 15
+b 1
+b 13
+b 14
+b 16
+b 17
+b 16
+b 1
+b 11
+b 13
+b 14
+b 16
+b 17
+b 0
+b 21
+b 34
+b 5
+b 7
+b 7
+b 1
+b 4
+b 4
+b 1
+b 26
+b 24
+b 1
+b 3
+b 23
+b 5
+b 10
+b 4
+b 10
+b 4
+b 10
+b 11
+b 5
+b 10
+b 4
+b 10
+b 4
+b 10
+b 11
+b 12
+b 13
+b 12
+b 1
+b 11
+b 5
+b 4
+b 1
+b 6
+b 15
+b 20
+b 22
+b 24
+b 26
+b 22
+b 1
+b 17
+b 19
+b 21
+b 19
+b 1
+b 16
+b 18
+b 20
+b 18
+b 1
+b 17
+b 19
+b 21
+b 23
+b 21
+b 1
+b 32
+b 57
+b 56
+b 1
+b 68
+b 93
+b 92
+b 1
+b 7
+b 8
+b 20
+b 7
+b 2
+b 1
+b 20
+b 7
+b 6
+b 1
+b 6
+b 20
+b 0
+b 2
+b 21
+b 6
+b 7
+b 20
+b 0
+b 2
+b 19
+b 21
+b 7
+b 6
+b 1
+b 6
+b 20
+b 0
+b 2
+b 21
+b 6
+b 7
+b 20
+b 0
+b 2
+b 19
+b 21
+b 7
+b 8
+b 20
+b 7
+b 2
+b 1
+b 20
+b 3
+b 4
+b 4
+b 3
+b 56
+b 81
+b 80
+b 1
+b 2
+b 2
+b 1
+b 3
+b 3
+b 1
+b 3
+b 2
+b 2
+b 1
+b 3
+b 3
+b 1
+b 3
+b 23
+b 25
+b 27
+b 28
+b 29
+b 25
+b 4
+b 16
+b 14
+b 1
+b 2
+b 72
+b 93
+b 42
+b 63
+b 62
+b 1
+b 43
+b 57
+b 7
+b 10
+b 6
+b 3
+b 1
+b 9
+b 9
+b 4
+b 5
+b 9
+b 2
+b 4
+b 60
+b 83
+b 82
+b 1
+b 7
+b 9
+b 0
+b 2
+b 1
+b 3
+b 12
+b 14
+b 3
+b 1
+b 28
+b 53
+b 3
+b 5
+b 4
+b 8
+b 11
+b 12
+b 8
+b 3
+b 2
+b 52
+b 77
+b 51
+b 1
+b 75
+b 1
+b 62
+b 81
+b 80
+b 1
+b 18
+b 4
+b 6
+b 4
+b 1
+b 0
+b 2
+b 0
+b 13
+b 14
+b 11
+b 3
+b 5
+b 4
+b 1
+b 1
+b 13
+b 11
+b 1
+b 4
+b 3
+b 1
+b 3
+b 1
+b 13
+b 0
+b 1
+b 1
+b 13
+b 11
+b 1
+b 4
+b 3
+b 1
+b 3
+b 1
+b 13
+b 0
+b 1
+b 0
+b 2
+b 0
+b 13
+b 14
+b 11
+b 3
+b 5
+b 4
+b 1
+b 3
+b 4
+b 12
+b 13
+b 10
+b 2
+b 4
+b 1
+b 32
+b 34
+b 36
+b 57
+b 32
+b 1
+b 7
+b 41
+b 57
+b 3
+b 0
+b 1
+b 0
+b 2
+b 4
+b 11
+b 9
+b 6
+b 10
+b 45
+b 53
+b 1
+b 14
+b 1
+b 1
+b 12
+b 1
+b 0
+b 2
+b 4
+b 15
+b 4
+b 1
+b 13
+b 1
+b 11
+b 13
+b 21
+b 6
+b 8
+b 18
+b 16
+b 1
+b 49
+b 51
+b 65
+b 4
+b 12
+b 13
+b 20
+b 12
+b 2
+b 3
+b 1
+b 15
+b 1
+b 8
+b 10
+b 12
+b 14
+b 8
+b 1
+b 7
+b 9
+b 11
+b 13
+b 7
+b 1
+b 7
+b 9
+b 11
+b 13
+b 7
+b 1
+b 8
+b 10
+b 12
+b 14
+b 8
+b 1
+b 10
+b 12
+b 17
+b 8
+b 16
+b 9
+b 11
+b 18
+b 9
+b 1
+b 7
+b 16
+b 33
+b 65
+b 37
+b 58
+b 23
+b 25
+b 27
+b 29
+b 39
+b 60
+b 29
+b 69
+b 69
+b 1
+b 6
+b 11
+b 4
+b 4
+b 1
+b 6
+b 20
+b 2
+b 1
+b 26
+b 50
+b 5
+b 46
+b 44
+b 1
+b 3
+b 46
+b 3
+b 46
+b 22
+b 39
+b 59
+b 58
+b 1
+b 47
+b 49
+b 51
+b 11
+b 40
+b 11
+b 40
+b 14
+b 65
+b 67
+b 80
+b 65
+b 1
+b 17
+b 34
+b 32
+b 2
+b 0
+b 6
+b 7
+b 12
+b 10
+b 2
+b 6
+b 8
+b 10
+b 11
+b 4
+b 1
+b 9
+b 1
+b 8
+b 10
+b 11
+b 2
+b 4
+b 0
+b 3
+b 5
+b 13
+b 12
+b 1
+b 2
+b 15
+b 3
+b 15
+b 3
+b 13
+b 12
+b 1
+b 2
+b 11
+b 16
+b 19
+b 6
+b 13
+b 15
+b 17
+b 11
+b 1
+b 14
+b 1
+b 5
+b 14
+b 16
+b 14
+b 3
+b 4
+b 1
+b 0
+b 4
+b 17
+b 19
+b 3
+b 1
+b 1
+b 6
+b 16
+b 4
+b 1
+b 14
+b 3
+b 5
+b 14
+b 16
+b 14
+b 3
+b 4
+b 1
+b 0
+b 4
+b 17
+b 19
+b 3
+b 1
+b 1
+b 6
+b 16
+b 4
+b 1
+b 14
+b 3
+b 2
+b 3
+b 10
+b 2
+b 18
+b 14
+b 22
+b 24
+b 20
+b 1
+b 4
+b 10
+b 7
+b 9
+b 6
+b 6
+b 1
+b 3
+b 7
+b 8
+b 5
+b 2
+b 6
+b 6
+b 1
+b 3
+b 7
+b 8
+b 5
+b 2
+b 4
+b 10
+b 7
+b 9
+b 7
+b 7
+b 1
+b 10
+b 12
+b 10
+b 17
+b 18
+b 17
+b 3
+b 9
+b 20
+b 22
+b 23
+b 25
+b 7
+b 24
+b 22
+b 3
+b 2
+b 3
+b 5
+b 6
+b 4
+b 6
+b 7
+b 5
+b 1
+b 7
+b 9
+b 5
+b 1
+b 4
+b 2
+b 3
+b 9
+b 40
+b 39
+b 1
+b 61
+b 63
+b 77
+b 25
+b 50
+b 69
+b 68
+b 1
+b 2
+b 9
+b 21
+b 31
+b 31
+b 1
+b 13
+b 8
+b 12
+b 5
+b 6
+b 4
+b 1
+b 7
+b 4
+b 1
+b 5
+b 1
+b 71
+b 73
+b 75
+b 77
+b 79
+b 71
+b 1
+b 18
+b 6
+b 1
+b 12
+b 14
+b 14
+b 1
+b 13
+b 0
+b 1
+b 4
+b 6
+b 4
+b 1
+b 0
+b 2
+b 1
+b 3
+b 7
+b 9
+b 11
+b 7
+b 1
+b 4
+b 5
+b 0
+b 2
+b 1
+b 3
+b 7
+b 8
+b 10
+b 7
+b 3
+b 2
+b 4
+b 0
+b 1
+b 0
+b 6
+b 4
+b 1
+b 11
+b 2
+b 4
+b 9
+b 4
+b 3
+b 2
+b 8
+b 6
+b 2
+b 10
+b 5
+b 5
+b 1
+b 10
+b 10
+b 4
+b 5
+b 8
+b 4
+b 3
+b 7
+b 10
+b 7
+b 3
+b 10
+b 4
+b 5
+b 7
+b 8
+b 10
+b 10
+b 5
+b 5
+b 1
+b 10
+b 10
+b 4
+b 5
+b 8
+b 4
+b 3
+b 7
+b 10
+b 7
+b 3
+b 10
+b 4
+b 5
+b 7
+b 8
+b 10
+b 9
+b 4
+b 3
+b 2
+b 8
+b 6
+b 2
+b 3
+b 5
+b 11
+b 13
+b 3
+b 1
+b 1
+b 3
+b 1
+b 5
+b 6
+b 7
+b 3
+b 4
+b 10
+b 12
+b 4
+b 6
+b 12
+b 14
+b 4
+b 1
+b 4
+b 6
+b 12
+b 14
+b 4
+b 1
+b 3
+b 5
+b 11
+b 13
+b 3
+b 1
+b 1
+b 3
+b 1
+b 5
+b 6
+b 7
+b 3
+b 4
+b 10
+b 12
+b 28
+b 46
+b 47
+b 49
+b 51
+b 53
+b 55
+b 57
+b 27
+b 2
+b 44
+b 2
+b 33
+b 64
+b 35
+b 62
+b 39
+b 41
+b 43
+b 54
+b 55
+b 51
+b 1
+b 27
+b 29
+b 67
+b 4
+b 27
+b 29
+b 67
+b 0
+b 1
+b 0
+b 2
+b 3
+b 5
+b 4
+b 7
+b 8
+b 4
+b 3
+b 0
+b 4
+b 6
+b 7
+b 10
+b 11
+b 14
+b 6
+b 9
+b 0
+b 2
+b 4
+b 6
+b 8
+b 16
+b 0
+b 2
+b 11
+b 13
+b 18
+b 21
+b 24
+b 20
+b 4
+b 15
+b 17
+b 19
+b 17
+b 3
+b 15
+b 31
+b 32
+b 48
+b 31
+b 2
+b 45
+b 1
+b 1
+b 1
+b 0
+b 1
+b 3
+b 0
+b 1
+b 2
+b 1
+b 1
+b 2
+b 0
+b 2
+b 1
+b 1
+b 2
+b 0
+b 1
+b 0
+b 1
+b 3
+b 0
+b 1
+b 5
+b 7
+b 17
+b 5
+b 1
+b 7
+b 5
+b 3
+b 1
+b 5
+b 0
+b 1
+b 0
+b 1
+b 54
+b 56
+b 71
+b 72
+b 74
+b 76
+b 78
+b 70
+b 1
+b 37
+b 60
+b 61
+b 63
+b 74
+b 58
+b 2
+b 69
+b 1
+b 12
+b 14
+b 13
+b 38
+b 14
+b 13
+b 1
+b 10
+b 12
+b 13
+b 38
+b 10
+b 2
+b 34
+b 1
+b 14
+b 10
+b 11
+b 34
+b 6
+b 6
+b 14
+b 15
+b 13
+b 1
+b 11
+b 4
+b 5
+b 11
+b 13
+b 14
+b 3
+b 12
+b 3
+b 1
+b 9
+b 3
+b 5
+b 6
+b 8
+b 9
+b 3
+b 2
+b 2
+b 7
+b 6
+b 1
+b 5
+b 11
+b 3
+b 1
+b 5
+b 11
+b 3
+b 1
+b 5
+b 6
+b 8
+b 9
+b 3
+b 2
+b 2
+b 7
+b 6
+b 1
+b 18
+b 6
+b 19
+b 41
+b 42
+b 49
+b 6
+b 5
+b 1
+b 16
+b 18
+b 19
+b 41
+b 42
+b 49
+b 16
+b 2
+b 37
+b 2
+b 44
+b 1
+b 6
+b 16
+b 17
+b 37
+b 38
+b 45
+b 2
+b 0
+b 1
+b 0
+b 20
+b 0
+b 1
+b 18
+b 1
+b 2
+b 23
+b 0
+b 1
+b 20
+b 1
+b 1
+b 14
+b 0
+b 1
+b 11
+b 5
+b 10
+b 12
+b 16
+b 1
+b 11
+b 9
+b 2
+b 1
+b 16
+b 0
+b 1
+b 3
+b 8
+b 13
+b 8
+b 1
+b 0
+b 1
+b 2
+b 0
+b 3
+b 4
+b 2
+b 1
+b 15
+b 14
+b 1
+b 4
+b 23
+b 2
+b 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 0
+p 1
+p 1
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 0
+p 1
+p 1
+p 1
+p 0
+p 1
+p 1
+p 0
+p 2
+p 2
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 0
+p 1
+p 0
+p 2
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 2
+p 0
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 1
+p 1
+p 3
+p 3
+p 1
+p 1
+p 0
+p 0
+p 1
+p 0
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 2
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 0
+p 1
+p 0
+p 1
+p 1
+p 2
+p 1
+p 2
+p 3
+p 3
+p 0
+p 1
+p 3
+p 2
+p 1
+p 2
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 0
+p 1
+p 2
+p 2
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 0
+p 1
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 0
+p 1
+p 1
+p 0
+p 1
+p 1
+p 2
+p 1
+p 2
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 2
+p 2
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 1
+p 2
+p 2
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 0
+p 1
+p 1
+p 2
+p 0
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 2
+p 2
+p 0
+p 1
+p 2
+p 2
+p 0
+p 2
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 0
+p 1
+p 0
+p 1
+p 0
+p 1
+p 1
+p 1
+p 2
+p 2
+p 1
+p 3
+p 1
+p 3
+p 1
+p 1
+p 1
+p 2
+p 3
+p 3
+p 0
+p 0
+p 2
+p 3
+p 0
+p 0
+p 2
+p 3
+p 2
+p 1
+p 1
+p 0
+p 1
+p 1
+p 0
+p 2
+p 0
+p 1
+p 2
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 0
+p 1
+p 1
+p 1
+p 0
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 0
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 2
+p 1
+p 2
+p 0
+p 1
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+p 0
+p 1
+p 1
+p 1
+p 1
+p 4
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 0
+p 1
+p 1
+p 3
+p 3
+p 3
+p 5
+p 2
+p 0
+p 2
+p 0
+p 1
+p 2
+p 1
+p 3
+p 3
+p 2
+p 1
+p 3
+p 3
+p 0
+p 2
+p 0
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 3
+p 1
+p 1
+p 1
+p 1
+p 1
+p 0
+p 1
+p 2
+p 2
+p 1
+p 2
+p 1
+p 2
+p 1
+p 1
+p 1
+p 1
+p 1
+p 1
+p 2
+p 2
+p 2
+p 2
+p 2
+p 1
+p 3
+p 1
+p 1
+p 3
+p 1
+p 2
+p 2
+p 2
+p 1
+p 2
+p 0
+p 1
+p 1
+p 1
+p 2
+p 1
+p 1
+p 2
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMovableObject.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMovableObject.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMovableObject.h	(revision 1092)
@@ -0,0 +1,249 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __MovableObject_H__
+#define __MovableObject_H__
+
+// Precompiler options
+#include "OgrePrerequisites.h"
+#include "OgreRenderQueue.h"
+#include "OgreAxisAlignedBox.h"
+#include "OgreSphere.h"
+#include "OgreShadowCaster.h"
+
+namespace Ogre {
+
+
+    /** Abstract class definining a movable object in a scene.
+        @remarks
+            Instances of this class are discrete, relatively small, movable objects
+            which are attached to SceneNode objects to define their position.
+    */
+    class _OgreExport MovableObject : public ShadowCaster
+    {
+    protected:
+        /// node to which this object is attached
+        Node* mParentNode;
+        bool mParentIsTagPoint;
+        /// Is this object visible?
+        bool mVisible;
+        /// User defined object which is linked to this object
+        UserDefinedObject *mUserObject;
+        /// The render queue to use when rendering this object
+        RenderQueueGroupID mRenderQueueID;
+		/// Flags whether the RenderQueue's default should be used.
+		bool mRenderQueueIDSet;
+        /// Flags determining whether this object is included / excluded from scene queries
+        unsigned long mQueryFlags;
+        /// Cached world AABB of this object
+        mutable AxisAlignedBox mWorldAABB;
+		// Cached world bounding sphere
+		mutable Sphere mWorldBoundingSphere;
+        /// World space AABB of this object's dark cap
+        mutable AxisAlignedBox mWorldDarkCapBounds;
+        /// Does this object cast shadows?
+        bool mCastShadows;
+
+
+    public:
+        /// Constructor
+        MovableObject();
+
+        /** Virtual destructor - read Scott Meyers if you don't know why this is needed.
+        */
+        virtual ~MovableObject();
+
+        /** Returns the name of this object. */
+        virtual const String& getName(void) const = 0;
+
+        /** Returns the type name of this object. */
+        virtual const String& getMovableType(void) const = 0;
+
+        /** Returns the node to which this object is attached.
+        @remarks
+            A MovableObject may be attached to either a SceneNode or to a TagPoint, 
+            the latter case if it's attached to a bone on an animated entity. 
+            Both are Node subclasses so this method will return either.
+        */
+        virtual Node* getParentNode(void) const;
+
+        /** Returns the scene node to which this object is attached.
+        @remarks
+            A MovableObject may be attached to either a SceneNode or to a TagPoint, 
+            the latter case if it's attached to a bone on an animated entity. 
+            This method will return the scene node of the parent entity 
+            if the latter is true.
+        */
+        virtual SceneNode* getParentSceneNode(void) const;
+
+        /** Internal method called to notify the object that it has been attached to a node.
+        */
+        virtual void _notifyAttached(Node* parent, bool isTagPoint = false);
+
+        /** Returns true if this object is attached to a SceneNode or TagPoint. */
+        virtual bool isAttached(void) const;
+
+        /** Returns true if this object is attached to a SceneNode or TagPoint, 
+			and this SceneNode / TagPoint is currently in an active part of the
+			scene graph. */
+        virtual bool isInScene(void) const;
+
+		/** Internal method to notify the object of the camera to be used for the next rendering operation.
+            @remarks
+                Certain objects may want to do specific processing based on the camera position. This method notifies
+                them incase they wish to do this.
+        */
+        virtual void _notifyCurrentCamera(Camera* cam) = 0;
+
+        /** Retrieves the local axis-aligned bounding box for this object.
+            @remarks
+                This bounding box is in local coordinates.
+        */
+        virtual const AxisAlignedBox& getBoundingBox(void) const = 0;
+
+		/** Retrieves the radius of the origin-centered bounding sphere 
+		 	 for this object.
+		*/
+		virtual Real getBoundingRadius(void) const = 0;
+
+        /** Retrieves the axis-aligned bounding box for this object in world coordinates. */
+        virtual const AxisAlignedBox& getWorldBoundingBox(bool derive = false) const;
+		/** Retrieves the worldspace bounding sphere for this object. */
+        virtual const Sphere& getWorldBoundingSphere(bool derive = false) const;
+        /** Internal method by which the movable object must add Renderable subclass instances to the rendering queue.
+            @remarks
+                The engine will call this method when this object is to be rendered. The object must then create one or more
+                Renderable subclass instances which it places on the passed in Queue for rendering.
+        */
+        virtual void _updateRenderQueue(RenderQueue* queue) = 0;
+
+        /** Tells this object whether to be visible or not, if it has a renderable component. 
+		@note An alternative approach of making an object invisible is to detach it
+			from it's SceneNode, or to remove the SceneNode entirely. 
+			Detaching a node means that structurally the scene graph changes. 
+			Once this change has taken place, the objects / nodes that have been 
+			removed have less overhead to the visbility detection pass than simply
+			making the object invisible, so if you do this and leave the objects 
+			out of the tree for a long time, it's faster. However, the act of 
+			detaching / reattaching nodes is in itself more expensive than 
+			setting an object visibility flag, since in the latter case 
+			structural changes are not made. Therefore, small or frequent visbility
+			changes are best done using this method; large or more longer term
+			changes are best done by detaching.
+		*/
+        virtual void setVisible(bool visible);
+
+        /** Returns whether or not this object is supposed to be visible or not. */
+        virtual bool isVisible(void) const;
+
+        /** Call this to associate your own custom user object instance with this MovableObject.
+        @remarks
+            By simply making your game / application object a subclass of UserDefinedObject, you
+            can establish a link between an OGRE instance of MovableObject and your own application
+            classes. Call this method to establish the link.
+        */
+        virtual void setUserObject(UserDefinedObject* obj) { mUserObject = obj; }
+        /** Retrieves a pointer to a custom application object associated with this movable by an earlier
+            call to setUserObject.
+        */
+        virtual UserDefinedObject* getUserObject(void) { return mUserObject; }
+
+        /** Sets the render queue group this entity will be rendered through.
+        @remarks
+            Render queues are grouped to allow you to more tightly control the ordering
+            of rendered objects. If you do not call this method, all Entity objects default
+            to the default queue (RenderQueue::getDefaultQueueGroup), which is fine for most objects. You may want to alter this
+            if you want this entity to always appear in front of other objects, e.g. for
+            a 3D menu system or such.
+        @par
+            See RenderQueue for more details.
+        @param queueID Enumerated value of the queue group to use.
+        */
+        virtual void setRenderQueueGroup(RenderQueueGroupID queueID);
+
+        /** Gets the queue group for this entity, see setRenderQueueGroup for full details. */
+        virtual RenderQueueGroupID getRenderQueueGroup(void) const;
+
+		/// return the full transformation of the parent sceneNode or the attachingPoint node
+		virtual Matrix4 _getParentNodeFullTransform(void) const;
+
+        /** Sets the query flags for this object.
+        @remarks
+            When performing a scene query, this object will be included or excluded according
+            to flags on the object and flags on the query. This is a bitwise value, so only when
+            a bit on these flags is set, will it be included in a query asking for that flag. The
+            meaning of the bits is application-specific.
+        */
+        virtual void setQueryFlags(unsigned long flags) { mQueryFlags = flags; }
+
+        /** As setQueryFlags, except the flags passed as parameters are appended to the
+        existing flags on this object. */
+        virtual void addQueryFlags(unsigned long flags) { mQueryFlags |= flags; }
+            
+        /** As setQueryFlags, except the flags passed as parameters are removed from the
+        existing flags on this object. */
+        virtual void removeQueryFlags(unsigned long flags) { mQueryFlags &= ~flags; }
+        
+        /// Returns the query flags relevant for this object
+        virtual unsigned long getQueryFlags(void) const { return mQueryFlags; }
+
+        /// Define a default implementation of method from ShadowCaster which implements no shadows
+        EdgeData* getEdgeList(void) { return NULL; }
+        /// Define a default implementation of method from ShadowCaster which implements no shadows
+        ShadowRenderableListIterator getShadowVolumeRenderableIterator(
+            ShadowTechnique shadowTechnique, const Light* light, 
+            HardwareIndexBufferSharedPtr* indexBuffer, 
+            bool extrudeVertices, Real extrusionDist, unsigned long flags = 0);
+		
+        /** Overridden member from ShadowCaster. */
+        const AxisAlignedBox& getLightCapBounds(void) const;
+        /** Overridden member from ShadowCaster. */
+        const AxisAlignedBox& getDarkCapBounds(const Light& light, Real dirLightExtrusionDist) const;
+        /** Sets whether or not this object will cast shadows.
+        @remarks
+        This setting simply allows you to turn on/off shadows for a given object.
+        An object will not cast shadows unless the scene supports it in any case
+        (see SceneManager::setShadowTechnique), and also the material which is
+        in use must also have shadow casting enabled. By default all entities cast
+        shadows. If, however, for some reason you wish to disable this for a single 
+        object then you can do so using this method.
+        @note This method normally refers to objects which block the light, but
+        since Light is also a subclass of MovableObject, in that context it means
+        whether the light causes shadows itself.
+        */
+        void setCastShadows(bool enabled) { mCastShadows = enabled; }
+        /** Returns whether shadow casting is enabled for this object. */
+        bool getCastShadows(void) const { return mCastShadows; }
+        /** Get the distance to extrude for a point/spot light */
+        Real getPointExtrusionDistance(const Light* l) const;
+
+
+
+
+
+    };
+
+}
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMemoryMacros.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMemoryMacros.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMemoryMacros.h	(revision 1092)
@@ -0,0 +1,65 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+//---- ORIGINAL COPYRIGHT FOLLOWS -------------------------------------------
+// ---------------------------------------------------------------------------------------------------------------------------------
+// Copyright 2000, Paul Nettle. All rights reserved.
+//
+// You are free to use this source code in any commercial or non-commercial product.
+//
+// mmgr.cpp - Memory manager & tracking software
+//
+// The most recent version of this software can be found at: ftp://ftp.GraphicsPapers.com/pub/ProgrammingTools/MemoryManagers/
+//
+// [NOTE: Best when viewed with 8-character tabs]
+//
+// ---------------------------------------------------------------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// How does this work?
+// Remember that before the compiler starts to process a source file, it runs
+// a neat tool called a preprocessor on it. What this preprocessor does in
+// this case is replace all the instances of *alloc/free with the expanded
+// macros - this way we cleverly replace all the calls to the standard C
+// memory (de)allocation functions. The same is done for new/delete
+//
+// Of course, we have the drawback that we can't name a member function of
+// a class *alloc or free and we can't overload the new/delete operators without
+// first undefining these macros - ah, a C++ preprocessor with RE replacement,
+// that would be a dream come true :)
+//
+#ifndef OGRE_MEMORY_MACROS
+#define OGRE_MEMORY_MACROS
+
+#if OGRE_DEBUG_MEMORY_MANAGER && OGRE_DEBUG_MODE
+#   define new    (::Ogre::MemoryManager::sMemManager.setOwner(__FILE__,__LINE__,__FUNCTION__),false) ? NULL                                                 : new
+#   define delete (::Ogre::MemoryManager::sMemManager.setOwner(__FILE__,__LINE__,__FUNCTION__),false) ? ::Ogre::MemoryManager::sMemManager.setOwner("",0,"") : delete
+#   define malloc(sz)      ::Ogre::MemoryManager::sMemManager.allocMem(__FILE__,__LINE__,__FUNCTION__, ::Ogre::m_alloc_malloc, sz,      gProcessID)
+#   define calloc(sz)      ::Ogre::MemoryManager::sMemManager.allocMem(__FILE__,__LINE__,__FUNCTION__, ::Ogre::m_alloc_calloc, sz,      gProcessID)
+#   define realloc(ptr,sz) ::Ogre::MemoryManager::sMemManager.rllocMem(__FILE__,__LINE__,__FUNCTION__, ::Ogre::m_alloc_realloc,sz, ptr, gProcessID)
+#   define free(ptr)       ::Ogre::MemoryManager::sMemManager.dllocMem(__FILE__,__LINE__,__FUNCTION__, ::Ogre::m_alloc_free,       ptr, gProcessID)
+#endif // OGRE_DEBUG_MEMORY_MANAGER
+
+#endif // OGRE_MEMORY_MACROS
+//-----------------------------------------------------------------------------
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreCodec.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreCodec.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreCodec.h	(revision 1092)
@@ -0,0 +1,112 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _Codec_H__
+#define _Codec_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreSharedPtr.h"
+#include "OgreDataStream.h"
+
+namespace Ogre {
+
+    /** Abstract class that defines a 'codec'.
+        @remarks
+            A codec class works like a two-way filter for data - data entered on
+            one end (the decode end) gets processed and transformed into easily
+            usable data while data passed the other way around codes it back.
+        @par
+            The codec concept is a pretty generic one - you can easily understand
+            how it can be used for images, sounds, archives, even compressed data.
+    */
+    class _OgreExport Codec
+    {
+    protected:
+        typedef std::map< String, Codec* > CodecList; 
+        /** A map that contains all the registered codecs.
+        */
+        static CodecList ms_mapCodecs;
+
+    public:
+        class _OgrePrivate CodecData 
+        {
+        public:
+            virtual ~CodecData() {};
+
+            /** Returns the type of the data.
+            */
+            virtual String dataType() const { return "CodecData"; };
+        };
+        typedef SharedPtr<CodecData> CodecDataPtr;
+
+    public:
+    	virtual ~Codec();
+    	
+        /** Registers a new codec in the database.
+        */
+        static void registerCodec( Codec *pCodec )
+        {
+            ms_mapCodecs[pCodec->getType()] = pCodec;
+        }
+
+        /** Unregisters a codec from the database.
+        */
+        static void unRegisterCodec( Codec *pCodec )
+        {
+            ms_mapCodecs.erase(pCodec->getType());
+        }
+
+        /** Gets the codec registered for the passed in file extension. */
+        static Codec* getCodec(const String& extension);
+
+        /** Codes the data in the input stream and saves the result in the output
+            stream.
+        */
+        virtual DataStreamPtr code(MemoryDataStreamPtr& input, CodecDataPtr& pData) const = 0;
+        /** Codes the data in the input chunk and saves the result in the output
+            filename provided. Provided for efficiency since coding to memory is
+            progressive therefore memory required is unknown leading to reallocations.
+        @param input The input data
+        @param outFileName The filename to write to
+        @param pData Extra information to be passed to the codec (codec type specific)
+        */
+        virtual void codeToFile(MemoryDataStreamPtr& input, const String& outFileName, CodecDataPtr& pData) const = 0;
+
+        /// Result of a decoding; both a decoded data stream and CodecData metadata
+        typedef std::pair<MemoryDataStreamPtr, CodecDataPtr> DecodeResult;
+        /** Codes the data from the input chunk into the output chunk.
+            @param input Stream containing the encoded data
+            @note
+                Has a variable number of arguments, which depend on the codec type.
+        */
+        virtual DecodeResult decode(DataStreamPtr& input) const = 0;
+
+        /** Returns the type of the codec as a String
+        */
+        virtual String getType() const = 0;
+    };
+
+} // namespace
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreHardwareIndexBuffer.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreHardwareIndexBuffer.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreHardwareIndexBuffer.h	(revision 1092)
@@ -0,0 +1,74 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __HardwareIndexBuffer__
+#define __HardwareIndexBuffer__
+
+// Precompiler options
+#include "OgrePrerequisites.h"
+#include "OgreHardwareBuffer.h"
+#include "OgreSharedPtr.h"
+
+namespace Ogre {
+
+    /** Specialisation of HardwareBuffer for vertex index buffers, still abstract. */
+    class _OgreExport HardwareIndexBuffer : public HardwareBuffer
+    {
+	    public:
+		    enum IndexType {
+			    IT_16BIT,
+			    IT_32BIT
+		    };
+
+	    protected:
+		    IndexType mIndexType;
+		    size_t mNumIndexes;
+            size_t mIndexSize;
+
+	    public:
+		    /// Should be called by HardwareBufferManager
+		    HardwareIndexBuffer(IndexType idxType, size_t numIndexes, HardwareBuffer::Usage usage,
+                bool useSystemMemory, bool useShadowBuffer);
+            ~HardwareIndexBuffer();
+    		/// Get the type of indexes used in this buffer
+            IndexType getType(void) const { return mIndexType; }
+            /// Get the number of indexes in this buffer
+            size_t getNumIndexes(void) const { return mNumIndexes; }
+            /// Get the size in bytes of each index
+            size_t getIndexSize(void) const { return mIndexSize; }
+
+		    // NB subclasses should override lock, unlock, readData, writeData
+    };
+
+
+    /** Shared pointer implementation used to share index buffers. */
+    class _OgreExport HardwareIndexBufferSharedPtr : public SharedPtr<HardwareIndexBuffer>
+    {
+    public:
+        HardwareIndexBufferSharedPtr() : SharedPtr<HardwareIndexBuffer>() {}
+        explicit HardwareIndexBufferSharedPtr(HardwareIndexBuffer* buf);
+    };
+}
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreImage.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreImage.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreImage.h	(revision 1092)
@@ -0,0 +1,350 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _Image_H__
+#define _Image_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreCommon.h"
+#include "OgrePixelFormat.h"
+#include "OgreDataStream.h"
+
+namespace Ogre {
+
+    enum ImageFlags
+    {
+        IF_COMPRESSED = 0x00000001,
+        IF_CUBEMAP    = 0x00000002,
+        IF_3D_TEXTURE = 0x00000004
+    };
+    /** Class representing an image file.
+        @remarks
+            The Image class usually holds uncompressed image data and is the
+            only object that can be loaded in a texture. Image  objects handle 
+            image data decoding themselves by the means of locating the correct 
+            Codec object for each data type.
+        @par
+            Typically, you would want to use an Image object to load a texture
+            when extra processing needs to be done on an image before it is
+            loaded or when you want to blit to an existing texture.
+    */
+    class _OgreExport Image
+    {
+    public:
+    	typedef Ogre::Box Box;
+    	typedef Ogre::Rect Rect;
+    public:
+        /** Standard constructor.
+        */
+        Image();
+        /** Copy-constructor - copies all the data from the target image.
+        */
+        Image( const Image &img );
+
+        /** Standard destructor.
+        */
+        virtual ~Image();
+
+        /** Assignment operator - copies all the data from the target image.
+        */
+        Image & operator = ( const Image & img );
+
+        /** Flips (mirrors) the image around the Y-axis. 
+            @remarks
+                An example of an original and flipped image:
+                <pre>                
+                originalimg
+                00000000000
+                00000000000
+                00000000000
+                00000000000
+                00000000000
+                ------------> flip axis
+                00000000000
+                00000000000
+                00000000000
+                00000000000
+                00000000000
+                originalimg
+                </pre>
+        */
+        Image & flipAroundY();
+
+        /** Flips (mirrors) the image around the X-axis.
+            @remarks
+                An example of an original and flipped image:
+                <pre>
+                        flip axis
+                            |
+                originalimg|gmilanigiro
+                00000000000|00000000000
+                00000000000|00000000000
+                00000000000|00000000000
+                00000000000|00000000000
+                00000000000|00000000000
+                </pre>
+        */                 
+        Image & flipAroundX();
+
+        /** Stores a pointer to raw data in memory. The pixel format has to be specified.
+            @remarks
+                This method loads an image into memory held in the object. The 
+                pixel format will be either greyscale or RGB with an optional
+                Alpha component.
+                The type can be determined by calling getFormat().             
+            @param
+                The data pointer
+            @param
+				Width of image
+            @param
+				Height of image
+			@param
+                Image Depth (in 3d images, numbers of layers, otherwhise 1)
+            @param
+				Pixel Format
+            @param
+                if memory associated with this buffer is to be destroyed
+                with the Image object.
+			@param
+				the number of faces the image data has inside (6 for cubemaps, 1 otherwise)
+            @param
+                the number of mipmaps the image data has inside
+            @note
+                 The memory associated with this buffer is NOT destroyed with the
+                 Image object, unless autoDelete is set to true.
+			@remarks 
+				The size of the buffer must be numFaces*PixelUtil::getMemorySize(width, height, depth, format)
+         */
+		Image& Image::loadDynamicImage( uchar* pData, size_t uWidth, size_t uHeight, 
+							size_t depth,
+							 PixelFormat eFormat, bool autoDelete = false, 
+							 size_t numFaces = 1, size_t numMipMaps = 0);
+		
+		/** Stores a pointer to raw data in memory. The pixel format has to be specified.
+            @remarks
+                This method loads an image into memory held in the object. The 
+                pixel format will be either greyscale or RGB with an optional
+                Alpha component.
+                The type can be determined by calling getFormat().             
+            @param
+                The data pointer
+            @param
+				Width of image
+            @param
+				Height of image
+            @param
+				Pixel Format
+            @note
+                 The memory associated with this buffer is NOT destroyed with the
+                 Image object.
+			@remarks This function is deprecated; one should really use the
+				Image::loadDynamicImage(pData, width, height, depth, format, ...) to be compatible
+				with future Ogre versions.
+         */
+ 		Image& loadDynamicImage( uchar* pData, size_t uWidth,
+								 size_t uHeight, PixelFormat eFormat)
+		{
+			return loadDynamicImage(pData, uWidth, uHeight, 1, eFormat);
+		}
+		/** Loads raw data from a stream. See the function
+			loadDynamicImage for a description of the parameters.
+			@remarks 
+				The size of the buffer must be numFaces*PixelUtil::getMemorySize(width, height, depth, format)
+        */
+        Image & loadRawData( 
+            DataStreamPtr& stream, 
+            size_t uWidth, size_t uHeight, size_t uDepth,
+            PixelFormat eFormat,
+			size_t numFaces = 1, size_t numMipMaps = 0);
+        /** Loads raw data from a stream. The pixel format has to be specified. 
+			@remarks This function is deprecated; one should really use the
+				Image::loadRawData(stream, width, height, depth, format, ...) to be compatible
+				with future Ogre versions.
+        */
+        Image & loadRawData( 
+            DataStreamPtr& stream, 
+            size_t uWidth, size_t uHeight, 
+            PixelFormat eFormat )
+		{
+			return loadRawData(stream, uWidth, uHeight, 1, eFormat);
+		}
+
+        /** Loads an image file.
+            @remarks
+                This method loads an image into memory held in the object. The 
+                pixel format will be either greyscale or RGB with an optional
+                Alpha component.
+                The type can be determined by calling getFormat().             
+            @param
+                strFileName Name of a file file to load.
+            @param
+                groupName Name of the resource group to search for the image
+            @note
+                The memory associated with this buffer is destroyed with the
+                Image object.
+        */
+        Image & load( const String& strFileName, const String& groupName );
+
+        /** Loads an image file from a stream.
+            @remarks
+                This method works in the same way as the filename-based load 
+                method except it loads the image from a DataStream object. 
+				This DataStream is expected to contain the 
+                encoded data as it would be held in a file. 
+            @param
+                stream The source data.
+            @param
+                type The type of the image. Used to decide what decompression
+                codec to use.
+            @see
+                Image::load( const String& strFileName )
+        */
+        Image & load(DataStreamPtr& stream, const String& type );
+        
+        /** Save the image as a file. */
+        void save(const String& filename);
+
+        /** Returns a pointer to the internal image buffer.
+        */
+        uchar* getData(void);
+
+        /** Returns a const pointer to the internal image buffer.
+        */
+        const uchar * getData() const;       
+
+        /** Returns the size of the data buffer.
+        */
+        size_t getSize() const;
+
+        /** Returns the number of mipmaps contained in the image.
+        */
+        size_t getNumMipmaps() const;
+
+        /** Returns true if the image has the appropriate flag set.
+        */
+        bool hasFlag(const ImageFlags imgFlag) const;
+
+        /** Gets the width of the image in pixels.
+        */
+        size_t getWidth(void) const;
+
+        /** Gets the height of the image in pixels.
+        */
+        size_t getHeight(void) const;
+
+        /** Gets the depth of the image.
+        */
+        size_t getDepth(void) const;
+		
+		/** Get the numer of faces of the image. This is usually 6 for a cubemap, and
+		    1 for a normal image.
+		*/
+		size_t getNumFaces(void) const;
+
+        /** Gets the physical width in bytes of each row of pixels.
+        */
+        size_t getRowSpan(void) const;
+
+        /** Returns the image format.
+        */
+        PixelFormat getFormat() const;
+
+        /** Returns the number of bits per pixel.
+        */
+        uchar getBPP() const;
+
+        /** Returns true if the image has an alpha component.
+        */
+        bool getHasAlpha() const;
+		
+		/** Does gamma adjustment.
+            @note
+                Basic algo taken from Titan Engine, copyright (c) 2000 Ignacio 
+                Castano Iguado
+        */
+        static void applyGamma( uchar *buffer, Real gamma, size_t size, uchar bpp );
+
+        /**
+         * Get colour value from a certain location in the image. The z coordinate
+         * is only valid for cubemaps and volume textures. This uses the first (largest)
+         * mipmap.
+         */
+        ColourValue getColourAt(int x, int y, int z);
+        
+        /**
+         * Get a PixelBox encapsulating the image data of a mipmap
+         */
+        PixelBox getPixelBox(size_t face = 0, size_t mipmap = 0) const;
+
+		enum Filter
+		{
+			FILTER_NEAREST,
+			FILTER_LINEAR,
+			FILTER_BILINEAR,
+			FILTER_BOX,
+			FILTER_TRIANGLE,
+			FILTER_BICUBIC
+		};
+		/** Scale a 1D, 2D or 3D image volume. 
+			@param 	src			PixelBox containing the source pointer, dimensions and format
+			@param 	dst			PixelBox containing the destination pointer, dimensions and format
+			@param 	filter		Which filter to use
+			@remarks 	This function can do pixel format conversion in the process.
+			@note	dst and src can point to the same PixelBox object without any problem
+		*/
+		static void scale(const PixelBox &src, const PixelBox &dst, Filter filter = FILTER_BILINEAR);
+		
+		/** Resize a 2D image, applying the appropriate filter. */
+		void resize(ushort width, ushort height, Filter filter = FILTER_BILINEAR);
+		
+        // Static function to calculate size in bytes from the number of mipmaps, faces and the dimensions
+        static size_t calculateSize(size_t mipmaps, size_t faces, size_t width, size_t height, size_t depth, PixelFormat format);
+    private:
+        // The width of the image in pixels
+        size_t m_uWidth;
+        // The height of the image in pixels
+        size_t m_uHeight;
+        // The depth of the image
+        size_t m_uDepth;
+        // The size of the image buffer
+        size_t m_uSize;
+        // The number of mipmaps the image contains
+        size_t m_uNumMipmaps;
+        // Image specific flags.
+        int m_uFlags;
+
+        // The pixel format of the image
+        PixelFormat m_eFormat;
+
+        // The number of bytes per pixel
+        uchar m_ucPixelSize;
+        uchar* m_pBuffer;
+
+		// A bool to determine if we delete the buffer or the calling app does
+		bool m_bAutoDelete;
+    };
+
+} // namespace
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreBone.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreBone.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreBone.h	(revision 1092)
@@ -0,0 +1,127 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __Bone_H__
+#define __Bone_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreNode.h"
+
+
+namespace Ogre 
+{
+    /** A bone in a skeleton.
+    @remarks
+        See Skeleton for more information about the principles behind skeletal animation.
+        This class is a node in the joint hierarchy. Mesh vertices also have assignments
+        to bones to define how they move in relation to the skeleton.
+    */
+    class _OgreExport Bone : public Node
+    {
+    public:
+        /** Constructor, not to be used directly (use Bone::createChild or Skeleton::createBone) */
+        Bone(unsigned short handle, Skeleton* creator);
+        /** Constructor, not to be used directly (use Bone::createChild or Skeleton::createBone) */
+        Bone(const String& name, unsigned short handle, Skeleton* creator);
+        ~Bone();
+
+        /** Creates a new Bone as a child of this bone.
+        @remarks
+            This method creates a new bone which will inherit the transforms of this
+            bone, with the handle specified.
+            @param 
+                handle The numeric handle to give the new bone; must be unique within the Skeleton.
+            @param
+                translate Initial translation offset of child relative to parent
+            @param
+                rotate Initial rotation relative to parent
+        */
+        Bone* createChild(unsigned short handle, 
+            const Vector3& translate = Vector3::ZERO, const Quaternion& rotate = Quaternion::IDENTITY);
+
+
+        /** Gets the numeric handle for this bone (unique within the skeleton). */
+        unsigned short getHandle(void) const;
+
+        /** Sets the current position / orientation to be the 'binding pose' ie the layout in which 
+            bones were originally bound to a mesh.
+        */
+        void setBindingPose(void);
+
+        /** Resets the position and orientation of this Bone to the original binding position.
+        @remarks
+            Bones are bound to the mesh in a binding pose. They are then modified from this
+            position during animation. This method returns the bone to it's original position and
+            orientation.
+        */
+        void reset(void);
+
+        /** Sets whether or not this bone is manually controlled. 
+        @remarks
+            Manually controlled bones can be altered by the application at runtime, 
+            and their positions will not be reset by the animation routines. Note 
+            that you should also make sure that there are no AnimationTrack objects
+            referencing this bone, or if there are, you should disable them using
+            pAnimation->destroyTrack(pBone->getHandle());
+        */
+        void setManuallyControlled(bool manuallyControlled);
+
+        /** Getter for mManuallyControlled Flag */
+        bool isManuallyControlled() const;
+
+        
+        /** Gets the inverse transform which takes bone space to origin from the binding pose. 
+        @remarks
+            Internal use only.
+        */
+        const Matrix4& _getBindingPoseInverseTransform(void) const;
+
+
+    protected:
+        /// The numeric handle of this bone
+        unsigned short mHandle;
+
+        /** Bones set as manuallyControlled are not reseted in Skeleton::reset() */
+        bool mManuallyControlled;
+
+        /** See Node. */
+        Node* createChildImpl(void);
+        /** See Node. */
+        Node* createChildImpl(const String& name);
+
+        /// Pointer back to creator, for child creation (not smart ptr so child does not preserve parent)
+        Skeleton* mCreator;
+
+        /// The inversed derived transform of the bone in the binding pose
+        Matrix4 mBindDerivedInverseTransform;
+
+
+
+    };
+
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSkeleton.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSkeleton.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSkeleton.h	(revision 1092)
@@ -0,0 +1,429 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __Skeleton_H__
+#define __Skeleton_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreResource.h"
+#include "OgreAnimationState.h"
+#include "OgreQuaternion.h"
+#include "OgreVector3.h"
+
+namespace Ogre {
+
+    /**  */
+    enum SkeletonAnimationBlendMode {
+        /// Animations are applied by calculating a weighted average of all animations
+	    ANIMBLEND_AVERAGE,
+        /// Animations are applied by calculating a weighted cumulative total
+	    ANIMBLEND_CUMULATIVE
+    };
+
+#define OGRE_MAX_NUM_BONES 256
+
+	
+	struct LinkedSkeletonAnimationSource;
+
+    /** A collection of Bone objects used to animate a skinned mesh.
+    @remarks
+        Skeletal animation works by having a collection of 'bones' which are 
+        actually just joints with a position and orientation, arranged in a tree structure.
+        For example, the wrist joint is a child of the elbow joint, which in turn is a
+        child of the shoulder joint. Rotating the shoulder automatically moves the elbow
+        and wrist as well due to this hierarchy.
+    @par
+        So how does this animate a mesh? Well every vertex in a mesh is assigned to one or more
+        bones which affects it's position when the bone is moved. If a vertex is assigned to 
+        more than one bone, then weights must be assigned to determine how much each bone affects
+        the vertex (actually a weight of 1.0 is used for single bone assignments). 
+        Weighted vertex assignments are especially useful around the joints themselves
+        to avoid 'pinching' of the mesh in this region. 
+    @par
+        Therefore by moving the skeleton using preset animations, we can animate the mesh. The
+        advantage of using skeletal animation is that you store less animation data, especially
+        as vertex counts increase. In addition, you are able to blend multiple animations together
+        (e.g. walking and looking around, running and shooting) and provide smooth transitions
+        between animations without incurring as much of an overhead as would be involved if you
+        did this on the core vertex data.
+    @par
+        Skeleton definitions are loaded from datafiles, namely the .skeleton file format. They
+        are loaded on demand, especially when referenced by a Mesh.
+    */
+    class _OgreExport Skeleton : public Resource
+    {
+		friend class SkeletonInstance;
+	protected:
+		/// Internal constructor for use by SkeletonInstance only
+		Skeleton();
+
+    public:
+        /** Constructor, don't call directly, use SkeletonManager.
+        @remarks
+            On creation, a Skeleton has a no bones, you should create them and link
+            them together appropriately. 
+        */
+        Skeleton(ResourceManager* creator, const String& name, ResourceHandle handle,
+            const String& group, bool isManual = false, ManualResourceLoader* loader = 0);
+        virtual ~Skeleton();
+
+
+        /** Creates a brand new Bone owned by this Skeleton. 
+        @remarks
+            This method creates an unattached new Bone for this skeleton.
+			Unless this is to be a root bone (there may be more than one of 
+			these), you must attach it to another Bone in the skeleton using addChild for it to be any use.
+            For this reason you will likely be better off creating child bones using the
+            Bone::createChild method instead, once you have created the root bone. 
+        @par
+            Note that this method automatically generates a handle for the bone, which you
+            can retrieve using Bone::getHandle. If you wish the new Bone to have a specific
+            handle, use the alternate form of this method which takes a handle as a parameter,
+            although you should note the restrictions.
+        */
+        virtual Bone* createBone(void);
+
+        /** Creates a brand new Bone owned by this Skeleton. 
+        @remarks
+            This method creates an unattached new Bone for this skeleton and assigns it a 
+            specific handle. Unless this is to be a root bone (there may be more than one of 
+			these), you must attach it to another Bone in the skeleton using addChild for it to be any use. 
+            For this reason you will likely be better off creating child bones using the
+            Bone::createChild method instead, once you have created a root bone. 
+        @param handle The handle to give to this new bone - must be unique within this skeleton. 
+            You should also ensure that all bone handles are eventually contiguous (this is to simplify
+            their compilation into an indexed array of transformation matrices). For this reason
+            it is advised that you use the simpler createBone method which automatically assigns a
+            sequential handle starting from 0.
+        */
+        virtual Bone* createBone(unsigned short handle);
+
+        /** Creates a brand new Bone owned by this Skeleton. 
+        @remarks
+            This method creates an unattached new Bone for this skeleton and assigns it a 
+            specific name.Unless this is to be a root bone (there may be more than one of 
+			these), you must attach it to another Bone in the skeleton using addChild for it to be any use.
+            For this reason you will likely be better off creating child bones using the
+            Bone::createChild method instead, once you have created the root bone. 
+        @param name The name to give to this new bone - must be unique within this skeleton. 
+            Note that the way OGRE looks up bones is via a numeric handle, so if you name a
+            Bone this way it will be given an automatic sequential handle. The name is just
+            for your convenience, although it is recommended that you only use the handle to 
+            retrieve the bone in performance-critical code.
+        */
+        virtual Bone* createBone(const String& name);
+
+        /** Creates a brand new Bone owned by this Skeleton. 
+        @remarks
+            This method creates an unattached new Bone for this skeleton and assigns it a 
+            specific name and handle. Unless this is to be a root bone (there may be more than one of 
+			these), you must attach it to another Bone in the skeleton using addChild for it to be any use.
+            For this reason you will likely be better off creating child bones using the
+            Bone::createChild method instead, once you have created the root bone. 
+        @param name The name to give to this new bone - must be unique within this skeleton. 
+        @param handle The handle to give to this new bone - must be unique within this skeleton. 
+        */
+        virtual Bone* createBone(const String& name, unsigned short handle);
+
+        /** Returns the number of bones in this skeleton. */
+        virtual unsigned short getNumBones(void) const;
+
+        /** Gets the root bone of the skeleton: deprecated in favour of getRootBoneIterator. 
+        @remarks
+            The system derives the root bone the first time you ask for it. The root bone is the
+            only bone in the skeleton which has no parent. The system locates it by taking the
+            first bone in the list and going up the bone tree until there are no more parents,
+            and saves this top bone as the root. If you are building the skeleton manually using
+            createBone then you must ensure there is only one bone which is not a child of 
+            another bone, otherwise your skeleton will not work properly. If you use createBone
+            only once, and then use Bone::createChild from then on, then inherently the first
+            bone you create will by default be the root.
+        */
+        virtual Bone* getRootBone(void) const;
+
+        typedef std::vector<Bone*> BoneList;
+        typedef VectorIterator<BoneList> BoneIterator;
+        /// Get an iterator over the root bones in the skeleton, ie those with no parents
+        virtual BoneIterator getRootBoneIterator(void);
+        /// Get an iterator over all the bones in the skeleton
+        virtual BoneIterator getBoneIterator(void);
+
+        /** Gets a bone by it's handle. */
+        virtual Bone* getBone(unsigned short handle) const;
+
+        /** Gets a bone by it's name. */
+        virtual Bone* getBone(const String& name) const;
+
+        /** Sets the current position / orientation to be the 'binding pose' ie the layout in which 
+            bones were originally bound to a mesh.
+        */
+        virtual void setBindingPose(void);
+
+        /** Resets the position and orientation of all bones in this skeleton to their original binding position.
+        @remarks
+            A skeleton is bound to a mesh in a binding pose. Bone positions are then modified from this
+            position during animation. This method returns all the bones to their original position and
+            orientation.
+        @param resetManualBones If set to true, causes the state of manual bones to be reset
+            too, which is normally not done to allow the manual state to persist even 
+            when keyframe animation is applied.
+        */
+        virtual void reset(bool resetManualBones = false);
+
+        /** Creates a new Animation object for animating this skeleton. 
+        @param name The name of this animation
+        @param length The length of the animation in seconds
+        */
+        virtual Animation* createAnimation(const String& name, Real length);
+
+        /** Returns the named Animation object. 
+		@remarks
+			Will pick up animations in linked skeletons 
+			(@see addLinkedSkeletonAnimationSource). 
+		@param name The name of the animation
+		@param linker Optional pointer to a pointer to the linked skeleton animation
+			where this is coming from.
+		*/
+        virtual Animation* getAnimation(const String& name, 
+			const LinkedSkeletonAnimationSource** linker = 0) const;
+
+        /** Removes an Animation from this skeleton. */
+        virtual void removeAnimation(const String& name);
+
+        /** Changes the state of the skeleton to reflect the application of the passed in collection of animations.
+        @remarks
+            Animating a skeleton involves both interpolating between keyframes of a specific animation,
+            and blending between the animations themselves. Calling this method sets the state of
+            the skeleton so that it reflects the combination of all the passed in animations, at the
+            time index specified for each, using the weights specified. Note that the weights between 
+            animations do not have to sum to 1.0, because some animations may affect only subsets
+            of the skeleton. If the weights exceed 1.0 for the same area of the skeleton, the 
+            movement will just be exaggerated.
+            @param 
+        */
+        virtual void setAnimationState(const AnimationStateSet& animSet);
+
+        /** Gets the last animation state of this skeleton. */
+        virtual const AnimationStateSet& getAnimationState(void) const;
+        
+
+        /** Initialise an animation set suitable for use with this skeleton. 
+        @remarks
+            Only recommended for use inside the engine, not by applications.
+        */
+        virtual void _initAnimationState(AnimationStateSet* animSet);
+
+		/** Refresh an animation set suitable for use with this skeleton. 
+		@remarks
+			Only recommended for use inside the engine, not by applications.
+		*/
+		virtual void _refreshAnimationState(AnimationStateSet* animSet);
+
+		/** Populates the passed in array with the bone matrices based on the current position.
+        @remarks
+            Internal use only. The array pointed to by the passed in pointer must
+            be at least as large as the number of bones.
+            Assumes animation has already been updated.
+        */
+        virtual void _getBoneMatrices(Matrix4* pMatrices);
+
+        /** Gets the number of animations on this skeleton. */
+        virtual unsigned short getNumAnimations(void) const;
+
+        /** Gets a single animation by index. 
+		@remarks
+			Will NOT pick up animations in linked skeletons 
+			(@see addLinkedSkeletonAnimationSource).
+		*/
+        virtual Animation* getAnimation(unsigned short index) const;
+
+
+		/** Gets the animation blending mode which this skeleton will use. */
+        virtual SkeletonAnimationBlendMode getBlendMode();
+        /** Sets the animation blending mode this skeleton will use. */
+		virtual void setBlendMode(SkeletonAnimationBlendMode state);
+
+        /// Updates all the derived transforms in the skeleton
+        virtual void _updateTransforms(void);
+
+		/** Optimise all of this skeleton's animations.
+		@see Animation::optimise
+		*/
+		virtual void optimiseAllAnimations(void);
+
+		/** Allows you to use the animations from another Skeleton object to animate
+			this skeleton.
+		@remarks
+			If you have skeletons of identical structure (that means identically
+			named bones with identical handles, and with the same hierarchy), but
+			slightly different proportions or binding poses, you can re-use animations
+			from one in the other. Because animations are actually stored as
+			changes to bones from their bind positions, it's possible to use the
+			same animation data for different skeletons, provided the skeletal
+			structure matches and the 'deltas' stored in the keyframes apply
+			equally well to the other skeletons bind position (so they must be
+			roughly similar, but don't have to be identical). You can use the 
+			'scale' option to adjust the translation and scale keyframes where
+			there are large differences in size between the skeletons.
+		@note
+			This method takes a skeleton name, rather than a more specific 
+			animation name, for two reasons; firstly it allows some validation 
+			of compatibility of skeletal structure, and secondly skeletons are
+			the unit of loading. Linking a skeleton to another in this way means
+			that the linkee will be prevented from being destroyed until the 
+			linker is destroyed.
+
+			You cannot set up cyclic relationships, e.g. SkeletonA uses SkeletonB's
+			animations, and SkeletonB uses SkeletonA's animations. This is because
+			it would set up a circular dependency which would prevent proper 
+			unloading - make one of the skeletons the 'master' in this case.
+		@param skelName Name of the skeleton to link animations from. This 
+			skeleton will be loaded immediately if this skeleton is already 
+			loaded, otherwise it will be loaded when this skeleton is.
+		@param scale A scale factor to apply to translation and scaling elements
+			of the keyframes in the other skeleton when applying the animations
+			to this one. Compensates for skeleton size differences.
+		*/
+		virtual void addLinkedSkeletonAnimationSource(const String& skelName, 
+			Real scale = 1.0f);
+		/// Remove all links to other skeletons for the purposes of sharing animation
+		virtual void removeAllLinkedSkeletonAnimationSources(void);
+		
+		typedef std::vector<LinkedSkeletonAnimationSource> 
+			LinkedSkeletonAnimSourceList;
+		typedef ConstVectorIterator<LinkedSkeletonAnimSourceList> 
+			LinkedSkeletonAnimSourceIterator;
+		/// Get an iterator over the linked skeletons used as animation sources
+		virtual LinkedSkeletonAnimSourceIterator 
+			getLinkedSkeletonAnimationSourceIterator(void) const;
+
+	protected:
+		SkeletonAnimationBlendMode mBlendState;
+        /// Storage of bones, indexed by bone handle
+        BoneList mBoneList;
+        /// Lookup by bone name
+        typedef std::map<String, Bone*> BoneListByName;
+        BoneListByName mBoneListByName;
+
+
+        /// Pointer to root bones (can now have multiple roots)
+        mutable BoneList mRootBones;
+        /// Bone automatic handles
+        unsigned short mNextAutoHandle;
+
+
+        /// Storage of animations, lookup by name
+        typedef std::map<String, Animation*> AnimationList;
+        AnimationList mAnimationsList;
+
+        /// Saved version of last animation
+        AnimationStateSet mLastAnimationState;
+
+		/// List of references to other skeletons to use animations from 
+		mutable LinkedSkeletonAnimSourceList mLinkedSkeletonAnimSourceList;
+
+        /** Internal method which parses the bones to derive the root bone. 
+        @remarks
+            Must be const because called in getRootBone but mRootBone is mutable
+            since lazy-updated.
+        */
+        void deriveRootBone(void) const;
+
+        /// Debugging method
+        void _dumpContents(const String& filename);
+
+        /** @copydoc Resource::loadImpl
+        */
+        void loadImpl(void);
+
+        /** @copydoc Resource::unloadImpl
+        */
+        void unloadImpl(void);
+		/// @copydoc Resource::calculateSize
+		size_t calculateSize(void) const { return 0; } // TODO 
+
+    };
+
+    /** Specialisation of SharedPtr to allow SharedPtr to be assigned to SkeletonPtr 
+    @note Has to be a subclass since we need operator=.
+    We could templatise this instead of repeating per Resource subclass, 
+    except to do so requires a form VC6 does not support i.e.
+    ResourceSubclassPtr<T> : public SharedPtr<T>
+    */
+    class _OgreExport SkeletonPtr : public SharedPtr<Skeleton> 
+    {
+    public:
+        SkeletonPtr() : SharedPtr<Skeleton>() {}
+        explicit SkeletonPtr(Skeleton* rep) : SharedPtr<Skeleton>(rep) {}
+        SkeletonPtr(const SkeletonPtr& r) : SharedPtr<Skeleton>(r) {} 
+        SkeletonPtr(const ResourcePtr& r) : SharedPtr<Skeleton>()
+        {
+			// lock & copy other mutex pointer
+			OGRE_LOCK_MUTEX(*r.OGRE_AUTO_MUTEX_NAME)
+			OGRE_COPY_AUTO_SHARED_MUTEX(r.OGRE_AUTO_MUTEX_NAME)
+            pRep = static_cast<Skeleton*>(r.getPointer());
+            pUseCount = r.useCountPointer();
+            if (pUseCount)
+            {
+                ++(*pUseCount);
+            }
+        }
+
+        /// Operator used to convert a ResourcePtr to a SkeletonPtr
+        SkeletonPtr& operator=(const ResourcePtr& r)
+        {
+            if (pRep == static_cast<Skeleton*>(r.getPointer()))
+                return *this;
+            release();
+			// lock & copy other mutex pointer
+			OGRE_LOCK_MUTEX(*r.OGRE_AUTO_MUTEX_NAME)
+			OGRE_COPY_AUTO_SHARED_MUTEX(r.OGRE_AUTO_MUTEX_NAME)
+            pRep = static_cast<Skeleton*>(r.getPointer());
+            pUseCount = r.useCountPointer();
+            if (pUseCount)
+            {
+                ++(*pUseCount);
+            }
+            return *this;
+        }
+    };
+
+	/// Link to another skeleton to share animations
+	struct LinkedSkeletonAnimationSource
+	{
+		String skeletonName;
+		SkeletonPtr pSkeleton;
+		Real scale;
+		LinkedSkeletonAnimationSource(const String& skelName, Real scl)
+			: skeletonName(skelName), scale(scl) {}
+			LinkedSkeletonAnimationSource(const String& skelName, Real scl, 
+				SkeletonPtr skelPtr)
+				: skeletonName(skelName), pSkeleton(skelPtr), scale(scl) {}
+	};
+}
+
+
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreEventQueue.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreEventQueue.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreEventQueue.h	(revision 1092)
@@ -0,0 +1,72 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+/***************************************************************************
+OgreEventQueue.h  -  
+	The EventQueue holds InputEvents.
+	It doesn't create or delete the objects, just stores them.
+
+-------------------
+begin                : Nov 19 2002
+copyright            : (C) 2002 by Kenny Sabir
+email                : kenny@sparksuit.com
+***************************************************************************/
+
+#ifndef __EVENT_QUEUE_H__
+#define __EVENT_QUEUE_H__
+
+#include "OgrePrerequisites.h"
+
+namespace Ogre {
+
+	/** This class holds InputEvents given to it by the EventProcessor in a FIFO queue. */
+    class _OgreExport EventQueue
+    {
+    protected:
+		std::queue<InputEvent*> mEventQueue;
+		bool mActivateEventQueue;
+
+    public:
+        EventQueue();
+        virtual ~EventQueue();
+		void push(InputEvent* e);
+		InputEvent* pop();
+
+
+		/**
+		 * Turn the queue on so it can pop and push InputEvents
+		 */
+		void activateEventQueue(bool set);
+
+        /* Adrian Cearnau - modified the return type from int to size_t and made the method const. */
+		size_t getSize() const;
+
+    };
+
+
+
+}
+
+
+#endif //__EVENT_QUEUE_H__
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSphere.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSphere.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSphere.h	(revision 1092)
@@ -0,0 +1,97 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __Sphere_H_
+#define __Sphere_H_
+
+// Precompiler options
+#include "OgrePrerequisites.h"
+
+#include "OgreVector3.h"
+
+namespace Ogre {
+
+
+    /** A sphere primitive, mostly used for bounds checking. 
+    @remarks
+        A sphere in math texts is normally represented by the function
+        x^2 + y^2 + z^2 = r^2 (for sphere's centered on the origin). Ogre stores spheres
+        simply as a center point and a radius.
+    */
+    class _OgreExport Sphere
+    {
+    protected:
+        Real mRadius;
+        Vector3 mCenter;
+    public:
+        /** Standard constructor - creates a unit sphere around the origin.*/
+        Sphere() : mRadius(1.0), mCenter(Vector3::ZERO) {}
+        /** Constructor allowing arbitrary spheres. 
+            @param center The center point of the sphere.
+            @param radius The radius of the sphere.
+        */
+        Sphere(const Vector3& center, Real radius)
+            : mRadius(radius), mCenter(center) {}
+
+        /** Returns the radius of the sphere. */
+        Real getRadius(void) const { return mRadius; }
+
+        /** Sets the radius of the sphere. */
+        void setRadius(Real radius) { mRadius = radius; }
+
+        /** Returns the center point of the sphere. */
+        const Vector3& getCenter(void) const { return mCenter; }
+
+        /** Sets the center point of the sphere. */
+        void setCenter(const Vector3& center) { mCenter = center; }
+
+		/** Returns whether or not this sphere interects another sphere. */
+		bool intersects(const Sphere& s) const
+		{
+			return (s.mCenter - mCenter).length() <=
+				(s.mRadius + mRadius);
+		}
+		/** Returns whether or not this sphere interects a box. */
+		bool intersects(const AxisAlignedBox& box) const
+		{
+			return Math::intersects(*this, box);
+		}
+		/** Returns whether or not this sphere interects a plane. */
+		bool intersects(const Plane& plane) const
+		{
+			return Math::intersects(*this, plane);
+		}
+		/** Returns whether or not this sphere interects a point. */
+		bool intersects(const Vector3& v) const
+		{
+			return ((v - mCenter).length() <= mRadius);
+		}
+        
+
+    };
+
+}
+
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSubEntity.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSubEntity.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSubEntity.h	(revision 1092)
@@ -0,0 +1,161 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __SubEntity_H__
+#define __SubEntity_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreString.h"
+#include "OgreRenderable.h"
+#include "OgreHardwareBufferManager.h"
+
+namespace Ogre {
+
+    /** Utility class which defines the sub-parts of an Entity.
+        @remarks
+            Just as meshes are split into submeshes, an Entity is made up of
+            potentially multiple SubMeshes. These are mainly here to provide the
+            link between the Material which the SubEntity uses (which may be the
+            default Material for the SubMesh or may have been changed for this
+            object) and the SubMesh data.
+        @par
+            The SubEntity also allows the application some flexibility in the
+            material properties for this section of a particular instance of this
+            Mesh, e.g. tinting the windows on a car model.
+        @par
+            SubEntity instances are never created manually. They are created at
+            the same time as their parent Entity by the SceneManager method
+            createEntity.
+    */
+    class _OgreExport SubEntity: public Renderable
+    {
+        // Note no virtual functions for efficiency
+        friend class Entity;
+        friend class SceneManager;
+    protected:
+        /** Private constructor - don't allow creation by anybody else.
+        */
+        SubEntity(Entity* parent, SubMesh* subMeshBasis);
+
+        /** Private destructor.
+        */
+        virtual ~SubEntity();
+
+        /// Pointer to parent.
+        Entity* mParentEntity;
+
+        /// Name of Material in use by this SubEntity.
+        String mMaterialName;
+
+        /// Cached pointer to material.
+        MaterialPtr mpMaterial;
+
+        // Pointer to the SubMesh defining geometry.
+        SubMesh* mSubMesh;
+
+        /// Is this SubEntity visible?
+        bool mVisible;
+
+        SceneDetailLevel mRenderDetail;
+		/// The LOD number of the material to use, calculated by Entity::_notifyCurrentCamera
+		unsigned short mMaterialLodIndex;
+
+        /// blend buffer details for dedicated geometry
+        VertexData* mBlendedVertexData;
+        /// Quick lookup of buffers
+        TempBlendedBufferInfo mTempBlendedBuffer;
+        /** Internal method for preparing this Entity for use in animation. */
+        void prepareTempBlendBuffers(void);
+
+    public:
+        /** Gets the name of the Material in use by this instance.
+        */
+        const String& getMaterialName() const;
+
+        /** Sets the name of the Material to be used.
+            @remarks
+                By default a SubEntity uses the default Material that the SubMesh
+                uses. This call can alter that so that the Material is different
+                for this instance.
+        */
+        void setMaterialName( const String& name );
+
+        /** Tells this SubEntity whether to be visible or not. */
+        virtual void setVisible(bool visible);
+
+        /** Returns whether or not this SubEntity is supposed to be visible. */
+        virtual bool isVisible(void) const;
+
+        /** Accessor method to read mesh data.
+        */
+        SubMesh* getSubMesh(void);
+
+        /** Overridden - see Renderable.
+        */
+        const MaterialPtr& getMaterial(void) const;
+
+        /** Overridden - see Renderable.
+        */
+        Technique* getTechnique(void) const;
+
+        /** Overridden - see Renderable.
+        */
+        void getRenderOperation(RenderOperation& op);
+
+        /** Overridden - see Renderable.
+        */
+        void getWorldTransforms(Matrix4* xform) const;
+        /** @copydoc Renderable::getWorldOrientation */
+        const Quaternion& getWorldOrientation(void) const;
+        /** @copydoc Renderable::getWorldPosition */
+        const Vector3& getWorldPosition(void) const;
+        /** Overridden - see Renderable.
+        */
+        bool getNormaliseNormals(void) const;      
+        /** Overridden - see Renderable.
+        */
+        unsigned short getNumWorldTransforms(void) const;
+        /** Overridden, see Renderable */
+        Real getSquaredViewDepth(const Camera* cam) const;
+        /** Sets the rendering level (solid, wireframe) of this SubEntity. */
+        void setRenderDetail(SceneDetailLevel renderDetail) { mRenderDetail = renderDetail; } 
+        /** Overridden, see Renderable */
+        SceneDetailLevel getRenderDetail() const {return mRenderDetail;}
+        /** @copydoc Renderable::getLights */
+        const LightList& getLights(void) const;
+        /// Get the temporary blended vertex data for this subentity
+        const VertexData* getBlendedVertexData(void) { return mBlendedVertexData; }
+        /** @copydoc Renderable::getCastsShadows */
+        bool getCastsShadows(void) const;
+		/** Advanced method to get the temporarily blended vertex information
+		for entities which are software skinned. 
+		*/
+		const VertexData* _getBlendedVertexData(void) const;
+    };
+
+}
+
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMaterialManager.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMaterialManager.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMaterialManager.h	(revision 1092)
@@ -0,0 +1,194 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __MATERIALMANAGER_H__
+#define __MATERIALMANAGER_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreSingleton.h"
+#include "OgreResourceManager.h"
+#include "OgreMaterial.h"
+#include "OgreStringVector.h"
+#include "OgreMaterialSerializer.h"
+
+namespace Ogre {
+
+
+    /** Class for managing Material settings for Ogre.
+        @remarks
+            Materials control the eventual surface rendering properties of geometry. This class
+            manages the library of materials, dealing with programmatic registrations and lookups,
+            as well as loading predefined Material settings from scripts.
+        @par
+            When loaded from a script, a Material is in an 'unloaded' state and only stores the settings
+            required. It does not at that stage load any textures. This is because the material settings may be
+            loaded 'en masse' from bulk material script files, but only a subset will actually be required.
+        @par
+            Because this is a subclass of ResourceManager, any files loaded will be searched for in any path or
+            archive added to the resource paths/archives. See ResourceManager for details.
+        @par
+            For a definition of the material script format, see the Tutorials/MaterialScript.html file.
+    */
+    class _OgreExport MaterialManager : public ResourceManager, public Singleton<MaterialManager>
+    {
+    protected:
+
+        /// Default Texture filtering - minification
+        FilterOptions mDefaultMinFilter;
+        /// Default Texture filtering - magnification
+        FilterOptions mDefaultMagFilter;
+        /// Default Texture filtering - mipmapping
+        FilterOptions mDefaultMipFilter;
+        /// Default Texture anisotropy
+        unsigned int mDefaultMaxAniso;
+
+        /// Serializer
+        MaterialSerializer mSerializer;
+		/// Default settings
+		MaterialPtr mDefaultSettings;
+		/// Overridden from ResourceManager
+		Resource* createImpl(const String& name, ResourceHandle handle, 
+			const String& group, bool isManual, ManualResourceLoader* loader,
+            const NameValuePairList* params);
+
+    public:
+        /** Default constructor.
+        */
+        MaterialManager();
+
+        /** Default destructor.
+        */
+        virtual ~MaterialManager();
+
+		/** Intialises the material manager, which also triggers it to 
+		 * parse all available .program and .material scripts. */
+		void initialise(void);
+        
+		/** @see ScriptLoader::parseScript
+        */
+        void parseScript(DataStreamPtr& stream, const String& groupName);
+
+
+        /** Sets the default texture filtering to be used for loaded textures, for when textures are
+            loaded automatically (e.g. by Material class) or when 'load' is called with the default
+            parameters by the application.
+            @note
+                The default value is TFO_BILINEAR.
+        */
+        virtual void setDefaultTextureFiltering(TextureFilterOptions fo);
+        /** Sets the default texture filtering to be used for loaded textures, for when textures are
+            loaded automatically (e.g. by Material class) or when 'load' is called with the default
+            parameters by the application.
+        */
+        virtual void setDefaultTextureFiltering(FilterType ftype, FilterOptions opts);
+        /** Sets the default texture filtering to be used for loaded textures, for when textures are
+            loaded automatically (e.g. by Material class) or when 'load' is called with the default
+            parameters by the application.
+        */
+        virtual void setDefaultTextureFiltering(FilterOptions minFilter, FilterOptions magFilter, FilterOptions mipFilter);
+
+		/// get the default texture filtering
+        virtual FilterOptions getDefaultTextureFiltering(FilterType ftype) const;
+
+        /** Sets the default anisotropy level to be used for loaded textures, for when textures are
+            loaded automatically (e.g. by Material class) or when 'load' is called with the default
+            parameters by the application.
+            @note
+                The default value is 1 (no anisotropy).
+        */
+		void setDefaultAnisotropy(unsigned int maxAniso);
+		/// get the default maxAnisotropy
+		unsigned int getDefaultAnisotropy() const;
+
+        /** Returns a pointer to the default Material settings.
+            @remarks
+                Ogre comes configured with a set of defaults for newly created
+                materials. If you wish to have a different set of defaults,
+                simply call this method and change the returned Material's
+                settings. All materials created from then on will be configured
+                with the new defaults you have specified.
+            @par
+                The default settings begin as a single Technique with a single, non-programmable Pass:
+                <ul>
+                <li>ambient = ColourValue::White</li>
+                <li>diffuse = ColourValue::White</li>
+                <li>specular = ColourValue::Black</li>
+                <li>emmissive = ColourValue::Black</li>
+                <li>shininess = 0</li>
+                <li>No texture unit settings (& hence no textures)</li>
+                <li>SourceBlendFactor = SBF_ONE</li>
+                <li>DestBlendFactor = SBF_ZERO (no blend, replace with new
+                  colour)</li>
+                <li>Depth buffer checking on</li>
+                <li>Depth buffer writing on</li>
+                <li>Depth buffer comparison function = CMPF_LESS_EQUAL</li>
+                <li>Colour buffer writing on for all channels</li>
+                <li>Culling mode = CULL_CLOCKWISE</li>
+                <li>Ambient lighting = ColourValue(0.5, 0.5, 0.5) (mid-grey)</li>
+                <li>Dynamic lighting enabled</li>
+                <li>Gourad shading mode</li>
+                <li>Bilinear texture filtering</li>
+                </ul>
+        */
+		virtual MaterialPtr getDefaultSettings(void) const { return mDefaultSettings; }
+
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static MaterialManager& getSingleton(void);
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static MaterialManager* getSingletonPtr(void);
+
+    };
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRectangle2D.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRectangle2D.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRectangle2D.h	(revision 1092)
@@ -0,0 +1,79 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _Rectangle2D_H__
+#define _Rectangle2D_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreSimpleRenderable.h"
+
+namespace Ogre {
+
+    /** Allows the rendering of a simple 2D rectangle
+    This class renders a simple 2D rectangle; this rectangle has no depth and
+    therefore is best used with specific render queue and depth settings,
+    like RENDER_QUEUE_BACKGROUND and 'depth_write off' for backdrops, and 
+    RENDER_QUEUE_OVERLAY and 'depth_check off' for fullscreen quads.
+    */
+    class _OgreExport Rectangle2D : public SimpleRenderable
+    {
+    protected:
+        /** Override this method to prevent parent transforms (rotation,translation,scale)
+        */
+        void getWorldTransforms( Matrix4* xform ) const;
+        /** @copydoc Renderable::getWorldOrientation */
+        const Quaternion& getWorldOrientation(void) const;
+        /** @copydoc Renderable::getWorldPosition */
+        const Vector3& getWorldPosition(void) const;
+
+    public:
+
+        Rectangle2D(bool includeTextureCoordinates = false);
+        ~Rectangle2D();
+
+        /** Sets the corners of the rectangle, in relative coordinates.
+        @param
+        left Left position in screen relative coordinates, -1 = left edge, 1.0 = right edge
+        top Top position in screen relative coordinates, 1 = top edge, -1 = bottom edge
+        right Right position in screen relative coordinates
+        bottom Bottom position in screen relative coordinates
+        */
+        void setCorners(Real left, Real top, Real right, Real bottom);
+
+        Real getSquaredViewDepth(const Camera* cam) const { return 0; }
+
+        Real getBoundingRadius(void) const { return 0; }
+        /// Identity view and projection
+        bool useIdentityProjection(void) const { return true; }
+        /// Identity view and projection
+        bool useIdentityView(void) const { return true; }
+
+    };
+
+}// namespace
+
+#endif
+
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderQueueListener.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderQueueListener.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderQueueListener.h	(revision 1092)
@@ -0,0 +1,77 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __RenderQueueListener_H__
+#define __RenderQueueListener_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreRenderQueue.h"
+
+namespace Ogre {
+
+    /** Abstract interface which classes must implement if they wish to receive
+        events from the render queue. 
+    @remarks
+        The OGRE render queue is divided into several queue groups, as defined by
+        RenderQueueGroupID. A class may implement this interface, and register itself
+        as a listener by calling SceneManager::addRenderQueueListener. After doing so,
+        the class will receive an event before and after each queue group is sent to 
+        the rendering system.
+    @par
+        The event listeners have an option to make a queue either be skipped, or to repeat.
+        Note that if multiple listeners are registered, the one registered last has the final
+        say, although options set by previous listeners will not be changed if the latest
+        does not express a preference.
+    */
+    class _OgreExport RenderQueueListener
+    {
+    public:
+        /** Event raised before a queue group is rendered. 
+        @remarks
+            This method is called by the SceneManager before each queue group is
+            rendered. 
+            @param id The id of the queue group which is about to be rendered
+            @param skipThisQueue A boolean passed by reference which is by default set to 
+                false. If the event sets this to true, the queue will be skipped and not
+                rendered. Note that in this case the renderQueueEnded event will not be raised
+                for this queue group.
+        */
+        virtual void renderQueueStarted(RenderQueueGroupID id, bool& skipThisQueue) = 0;
+        /** Event raised after a queue group is rendered. 
+        @remarks
+            This method is called by the SceneManager after each queue group is
+            rendered. 
+            @param id The id of the queue group which has just been rendered
+            @param repeatThisQueue A boolean passed by reference which is by default set to 
+                false. If the event sets this to true, the queue which has just been
+                rendered will be repeated, and the renderQueueStarted and renderQueueEnded
+                events will also be fired for it again.
+        */
+        virtual void renderQueueEnded(RenderQueueGroupID id, bool& repeatThisQueue) = 0;
+    };
+
+}
+
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreConfigOptionMap.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreConfigOptionMap.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreConfigOptionMap.h	(revision 1092)
@@ -0,0 +1,52 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#ifndef _ConfigOptionMap_H__
+#define _ConfigOptionMap_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreStringVector.h"
+#include "OgreString.h"
+
+
+namespace Ogre {
+    /** Packages the details of a configuration option.
+        @remarks
+            Used for RenderSystem::getConfigOptions. If immutable is true, this
+            option must be disabled for modifying.
+    */
+    typedef struct _ConfigOption
+    {
+        String name;
+        String currentValue;
+        StringVector possibleValues;
+        bool immutable;
+    } ConfigOption;
+
+    typedef std::map< String, ConfigOption > ConfigOptionMap;
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSkeletonFileFormat.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSkeletonFileFormat.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSkeletonFileFormat.h	(revision 1092)
@@ -0,0 +1,97 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __SkeletonFileFormat_H__
+#define __SkeletonFileFormat_H__
+
+#include "OgrePrerequisites.h"
+
+namespace Ogre {
+
+/** Definition of the OGRE .skeleton file format 
+
+    .skeleton files are binary files (for read efficiency at runtime) and are arranged into chunks 
+    of data, very like 3D Studio's format.
+    A chunk always consists of:
+        unsigned short CHUNK_ID        : one of the following chunk ids identifying the chunk
+        unsigned long  LENGTH          : length of the chunk in bytes, including this header
+        void*          DATA            : the data, which may contain other sub-chunks (various data types)
+    
+    A .skeleton file contains both the definition of the Skeleton object and the animations it contains. It
+    contains only a single skeleton but can contain multiple animations.
+
+
+*/
+    enum SkeletonChunkID {
+        SKELETON_HEADER            = 0x1000,
+            // char* version           : Version number check
+        SKELETON_BONE              = 0x2000,
+        // Repeating section defining each bone in the system. 
+        // Bones are assigned indexes automatically based on their order of declaration
+        // starting with 0.
+
+            // char* name                       : name of the bone
+            // unsigned short handle            : handle of the bone, should be contiguous & start at 0
+            // Vector3 position                 : position of this bone relative to parent 
+            // Quaternion orientation           : orientation of this bone relative to parent 
+
+        SKELETON_BONE_PARENT       = 0x3000,
+        // Record of the parent of a single bone, used to build the node tree
+        // Repeating section, listed in Bone Index order, one per Bone
+
+            // unsigned short handle             : child bone
+            // unsigned short parentHandle   : parent bone
+
+        SKELETON_ANIMATION         = 0x4000,
+        // A single animation for this skeleton
+
+            // char* name                       : Name of the animation
+            // float length                      : Length of the animation in seconds
+
+            SKELETON_ANIMATION_TRACK = 0x4100,
+            // A single animation track (relates to a single bone)
+            // Repeating section (within SKELETON_ANIMATION)
+                
+                // unsigned short boneIndex     : Index of bone to apply to
+
+                SKELETON_ANIMATION_TRACK_KEYFRAME = 0x4110,
+                // A single keyframe within the track
+                // Repeating section
+
+                    // float time                    : The time position (seconds)
+                    // Quaternion rotate            : Rotation to apply at this keyframe
+                    // Vector3 translate            : Translation to apply at this keyframe
+                    // Vector3 scale                : Scale to apply at this keyframe
+		SKELETON_ANIMATION_LINK         = 0x5000
+		// Link to another skeleton, to re-use its animations
+
+			// char* skeletonName					: name of skeleton to get animations from
+			// float scale							: scale to apply to trans/scale keys
+
+    };
+
+} // namespace
+
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreBspLevel.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreBspLevel.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreBspLevel.h	(revision 1092)
@@ -0,0 +1,255 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _BspLevel_H__
+#define _BspLevel_H__
+
+#include "OgreBspPrerequisites.h"
+#include "OgreResource.h"
+#include "OgreStaticFaceGroup.h"
+#include "OgreSceneManager.h"
+#include "OgreBspNode.h"
+#include "OgreHardwareBufferManager.h"
+#include "OgreDefaultHardwareBufferManager.h"
+#include "OgreQuake3Level.h"
+
+
+namespace Ogre {
+
+    /** Holds all the data associated with a Binary Space Parition
+        (BSP) based indoor level.
+        The data used here is populated by loading level files via
+        the BspLevelManager::load method, although application users
+        are more likely to call SceneManager::setWorldGeometry which will
+        automatically arrange the loading of the level. Note that this assumes
+        that you have asked for an indoor-specialised SceneManager (specify
+        ST_INDOOR when calling Root::getSceneManager).</p>
+        Ogre currently only supports loading from Quake3 Arena level files,
+        although any source that can be converted into this classes structure
+        could also be used. The Quake3 level load process is in a different
+        class called Quake3Level to keep the specifics separate.</p>
+    */
+    class BspLevel : public Resource
+    {
+        friend class BspSceneManager;
+    public:
+        /** Default constructor - used by BspResourceManager (do not call directly) */
+        BspLevel(ResourceManager* creator, const String& name, ResourceHandle handle,
+            const String& group, bool isManual = false, ManualResourceLoader* loader = 0);
+        ~BspLevel();
+
+        /** Determines if one leaf node is visible from another. */
+        bool isLeafVisible(const BspNode* from, const BspNode* to) const;
+
+        /** Returns a pointer to the root node (BspNode) of the BSP tree. */
+        const BspNode* getRootNode(void);
+
+        /** Walks the entire BSP tree and returns the leaf
+            which contains the given point.
+        */
+        BspNode* findLeaf(const Vector3& point) const;
+
+        /** Ensures that the MovableObject is attached to the right leaves of the 
+            BSP tree.
+        */
+        void _notifyObjectMoved(const MovableObject* mov, 
+            const Vector3& pos);
+		/** Internal method, makes sure an object is removed from the leaves when detached from a node. */
+		void _notifyObjectDetached(const MovableObject* mov);
+        /** Gets a pointer to the start of the leaf nodes. */
+        BspNode* getLeafStart(void) {return &mRootNode[mLeafStart]; }
+        /** Gets the number of leaf nodes */
+        int getNumLeaves(void) const { return mNumLeaves; }
+
+        /** Calculate the number of loading stages required for a given level */
+        static size_t calculateLoadingStages(const String& levelName);
+
+        /** Utility class just to enable queueing of patches */
+    protected:
+        /** @copydoc Resource::loadImpl. */
+        void loadImpl(void);
+        /** @copydoc Resource::unloadImpl. */
+        void unloadImpl(void);
+        /** @copydoc Resource::calculateSize. */
+        size_t calculateSize(void) const;
+        /** Pointer to the root node of the BSP tree;
+            This pointer actually has a dual purpose; to avoid allocating lots of small chunks of
+            memory, the BspLevel actually allocates all nodes required through this pointer. So this
+            pointer is the handle for the allocation of memory for all nodes. It also happens to point
+            to the root node, since the first one in the memory chunk is the root node.
+        */
+        BspNode* mRootNode;
+        int mNumNodes;
+        int mNumLeaves;
+        int mLeafStart; // the index at which leaf nodes begin
+
+        /** Vertex format for fixed geometry.
+            Note that in this case vertex components (position, normal, texture coords etc)
+            are held interleaved in the same buffer. However, the format here is different from 
+            the format used by Quake because older Direct3d drivers like the vertex elements
+            to be in a particular order within the buffer. See VertexDeclaration for full
+            details of this marvellous(not) feature.
+        */
+        struct BspVertex
+        {
+            float position[3];
+            float normal[3];
+            int colour;
+            float texcoords[2];
+            float lightmap[2];
+        };
+        /*
+        /// Array of vertices for whole level.
+        BspVertex* mVertices;
+        int mNumVertices;
+        */
+        /// Vertex data holding all the data for the level, but able to render parts of it
+        VertexData* mVertexData;
+
+        /** Array of indexes into the mFaceGroups array. This buffer is organised
+            by leaf node so leaves can just use contiguous chunks of it and
+            get repointed to the actual entries in mFaceGroups. */
+        int* mLeafFaceGroups;
+        int mNumLeafFaceGroups;
+
+        /** Array of face groups, indexed into by contents of mLeafFaceGroups. */
+        StaticFaceGroup* mFaceGroups;
+        int mNumFaceGroups;
+
+
+        /*
+        /// Array of elements i.e. vertex indexes as used by face groups.
+        int* mElements;
+        int mNumElements;
+        */
+
+        /// indexes for the whole level, will be copied to the real indexdata per frame
+        size_t mNumIndexes;
+        // system-memory buffer
+        HardwareIndexBufferSharedPtr mIndexes;
+
+        /// Brushes as used for collision, main memory is here
+        BspNode::Brush *mBrushes;
+
+        /** Vector of player start points */
+        std::vector<ViewPoint> mPlayerStarts;
+
+        /** Internal utility function for loading data from Quake3. */
+        void loadQuake3Level(const Quake3Level& q3lvl);
+        /** Internal lookup table to determine visibility between leaves.
+            Leaf nodes are assigned to 'clusters' of nodes, which are used to group nodes together for
+            visibility testing. This data holds a lookup table which is used to determine if one cluster of leaves
+            is visible from another cluster. Whilst it would be possible to expand all this out so that
+            each node had a list of pointers to other visible nodes, this would be very expensive in terms
+            of storage (using the cluster method there is a table which is 1-bit squared per cluster, rounded
+            up to the nearest byte obviously, which uses far less space than 4-bytes per linked node per source
+            node). Of course the limitation here is that you have to each leaf in turn to determine if it is visible
+            rather than just following a list, but since this is only done once per frame this is not such a big
+            overhead.</p>
+            Each row in the table is a 'from' cluster, with each bit in the row corresponding to a 'to' cluster,
+            both ordered based on cluster index. A 0 in the bit indicates the 'to' cluster is not visible from the
+            'from' cluster, whilst a 1 indicates it is.</p>
+            As many will notice, this is lifted directly from the Quake implementation of PVS.
+        */
+        struct VisData
+        {
+            unsigned char *tableData;
+            int numClusters;            // Number of clusters, therefore number of rows
+            int rowLength;                // Length in bytes of each row (num clusters / 8 rounded up)
+        };
+
+        VisData mVisData;
+
+
+        /** Internal method for parsing chosen entities. */
+        void loadEntities(const Quake3Level& q3lvl);
+
+        typedef std::map<const MovableObject*, std::list<BspNode*> > MovableToNodeMap;
+        /// Map for locating the nodes a movable is currently a member of
+        MovableToNodeMap mMovableToNodeMap;
+
+        void tagNodesWithMovable(BspNode* node, const MovableObject* mov, const Vector3& pos);
+
+        // Storage of patches 
+        typedef std::map<int, PatchSurface*> PatchMap;
+        PatchMap mPatches;
+        // Total number of vertices required for all patches
+        size_t mPatchVertexCount;
+        // Total number of indexes required for all patches
+        size_t mPatchIndexCount;
+
+        void initQuake3Patches(const Quake3Level & q3lvl, VertexDeclaration* decl);
+        void buildQuake3Patches(size_t vertOffset, size_t indexOffset);
+
+        void quakeVertexToBspVertex(const bsp_vertex_t* src, BspVertex* dest);
+
+
+    };
+    /** Specialisation of SharedPtr to allow SharedPtr to be assigned to BspLevelPtr 
+    @note Has to be a subclass since we need operator=.
+    We could templatise this instead of repeating per Resource subclass, 
+    except to do so requires a form VC6 does not support i.e.
+    ResourceSubclassPtr<T> : public SharedPtr<T>
+    */
+    class BspLevelPtr : public SharedPtr<BspLevel> 
+    {
+    public:
+        BspLevelPtr() : SharedPtr<BspLevel>() {}
+        explicit BspLevelPtr(BspLevel* rep) : SharedPtr<BspLevel>(rep) {}
+        BspLevelPtr(const BspLevelPtr& r) : SharedPtr<BspLevel>(r) {} 
+        BspLevelPtr(const ResourcePtr& r) : SharedPtr<BspLevel>()
+        {
+			// lock & copy other mutex pointer
+			OGRE_LOCK_MUTEX(*r.OGRE_AUTO_MUTEX_NAME)
+			OGRE_COPY_AUTO_SHARED_MUTEX(r.OGRE_AUTO_MUTEX_NAME)
+            pRep = static_cast<BspLevel*>(r.getPointer());
+            pUseCount = r.useCountPointer();
+            if (pUseCount)
+            {
+                ++(*pUseCount);
+            }
+        }
+
+        /// Operator used to convert a ResourcePtr to a BspLevelPtr
+        BspLevelPtr& operator=(const ResourcePtr& r)
+        {
+            if (pRep == static_cast<BspLevel*>(r.getPointer()))
+                return *this;
+            release();
+			// lock & copy other mutex pointer
+			OGRE_LOCK_MUTEX(*r.OGRE_AUTO_MUTEX_NAME)
+			OGRE_COPY_AUTO_SHARED_MUTEX(r.OGRE_AUTO_MUTEX_NAME)
+            pRep = static_cast<BspLevel*>(r.getPointer());
+            pUseCount = r.useCountPointer();
+            if (pUseCount)
+            {
+                ++(*pUseCount);
+            }
+            return *this;
+        }
+    };
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreTerrainSceneManager.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreTerrainSceneManager.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreTerrainSceneManager.h	(revision 1092)
@@ -0,0 +1,389 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+/***************************************************************************
+terrainscenemanager.h  -  description
+---------------------
+  begin                : Mon Sep 23 2002
+  copyright            : (C) 2002 by Jon Anderson
+  email                : janders@users.sf.net
+
+  Enhancements 2003 - 2004 (C) The OGRE Team
+
+***************************************************************************/
+
+#ifndef TERRAINSCENEMANAGER_H
+#define TERRAINSCENEMANAGER_H
+
+#include "OgreTerrainPrerequisites.h"
+#include "OgreOctreeSceneManager.h"
+#include "OgreOctreeSceneQuery.h"
+#include "OgreTerrainRenderable.h"
+#include "OgreTerrainPageSource.h"
+#include "OgreIteratorWrappers.h"
+
+
+namespace Ogre
+{
+
+class Image;
+
+typedef std::vector < TerrainPage * > TerrainPageRow;
+typedef std::vector < TerrainPageRow > TerrainPage2D;
+
+/** Default implementation of RaySceneQuery. */
+class _OgreTerrainExport TerrainRaySceneQuery : public OctreeRaySceneQuery
+{
+public:
+    TerrainRaySceneQuery(SceneManager* creator);
+    ~TerrainRaySceneQuery();
+
+    /** See RayScenQuery. */
+    void execute(RaySceneQueryListener* listener);
+};
+
+
+
+/** This is a basic SceneManager for organizing TerrainRenderables into a total landscape.
+  * It loads a terrain from a .cfg file that specifices what textures/scale/mipmaps/etc to use.
+  *@author Jon Anderson
+  */
+
+class _OgreTerrainExport TerrainSceneManager : public OctreeSceneManager
+{
+public:
+    TerrainSceneManager( );
+    virtual ~TerrainSceneManager( );
+
+    /** Loads the terrain using parameters int he given config file. */
+    void setWorldGeometry( const String& filename );
+
+    /** Aligns TerrainRenderable neighbors, and renders them. */
+    virtual void _renderVisibleObjects( void );
+
+    /** Returns the height at the given terrain coordinates. */
+    float getHeightAt( float x, float y );
+
+
+    bool intersectSegment( const Vector3 & start, const Vector3 & end, Vector3 * result );
+
+    /** Sets the texture to use for the main world texture. */
+    void setWorldTexture(const String& textureName);
+    /** Sets the texture to use for the detail texture. */
+    void setDetailTexture(const String& textureName);
+    /** Sets the number of times per tile the detail texture should be repeated. */
+    void setDetailTextureRepeat(int repeat);
+    /** Sets the dimensions of each tile (must be power of 2 + 1) */
+    void setTileSize(int size); 
+    /** Sets the dimensions of each page (must be power of 2 + 1) */
+    void setPageSize(int size); 
+    /** Sets the maximum screen space pixel error.  */
+    void setMaxPixelError(int pixelError); 
+    /** Sets how to scale the terrain data. */
+    void setScale(const Vector3& scale);
+    /** Sets the maximum geomipmap level to allow. */
+    void setMaxGeoMipMapLevel(int maxMip);
+    
+    /** Gets the texture to use for the main world texture. */
+    const String& getWorldTexture(void) { return mWorldTextureName; }
+    /** Gets the texture to use for the detail texture. */
+    const String& getDetailTexture(void) { return mDetailTextureName; }
+    /** Gets the number of times per tile the detail texture should be repeated. */
+    int setDetailTextureRepeat(void);
+    /** Gets the dimensions of each tile (must be power of 2 + 1) */
+    int getTileSize(void); 
+    /** Gets the dimensions of each page (must be power of 2 + 1) */
+    int getPageSize(void); 
+    /** Gets the maximum screen space pixel error.  */
+    int getMaxPixelError(void); 
+    /** Sets how to scale the terrain data. */
+    const Vector3& getScale(void);
+    /** Gets the maximum geomipmap level to allow. */
+    int getMaxGeoMipMapLevel(void);
+
+
+
+    /** Sets whether the terrain should use triangle strips or not.
+    @remarks
+        The default is not, in which case it uses triangle lists. 
+    */
+    void setUseTriStrips(bool useStrips);
+    /** Sets whether or not terrain tiles should be morphed between LODs
+    (NB requires vertex program support). */
+    void setUseLODMorph(bool useMorph);
+    /** Sets whether vertex normals will be generated for the terrain. */
+    void setUseVertexNormals(bool useNormals);
+    /** Sets whether vertex colours will be used. */
+    void setUseVertexColours(bool useColours);
+
+    /** Sets the name of a custom material to use to shade the landcape.
+    @remarks
+        This method allows you to provide a custom material which will be
+        used to render the landscape instead of the standard internal 
+        material. This gives you a great deal of flexibility and allows you 
+        to perform special effects if you wish. Note that because you determine
+        every aspect of the material, this setting makes the use of setWorldTexture
+        and setDetailTexture redundant.
+    @par
+        In your custom material, you can use all the usual features of Ogre's
+        materials, including multiple passes if you wish. You can also use 
+        the programmable pipeline to hook vertex and fragment programs into the
+        terrain rendering. The plugin provides the following vertex components:
+        <ul>
+            <li>positions</li>
+            <li>2 sets of texture coordinates (index 0 is world texture, 
+            index 1 is detail texture)</li>
+            <li>Normals, if enabled</li>
+            <li>Per-vertex delta values, for morphing a higher LOD tile into 
+                a lower LOD tile. This is one float per vertex bound as 'blend
+                weight'. If you want to use this you also have to provide the
+                name or index of the parameter you wish to receive the morph factor
+                (@see setCustomMaterialMorphFactorParam)</li>
+        </ul>
+    */
+    void setCustomMaterial(const String& materialName);
+    /** Sets the name of the vertex program parameter to which to pass the
+        LOD morph factor.
+    @remarks
+        When LOD morphing is enabled, and you are using a custom material to 
+        shade the terrain, you need to inform this class of the parameter you
+        wish the current LOD morph factor to be passed to. This is a simple
+        float parameter value that the plugin will set from 0 to 1, depending on
+        the morph stage of a tile. 0 represents no morphing, ie the vertices are
+        all in the original position. 1 represents a complete morph such that
+        the height of the vertices is the same as they are at the next lower LOD
+        level. The vertex program must use this factor, in conjunction with the
+        per-vertex height delta values (bound as 'blend weight'), to displace
+        vertices.
+    @note This version of the method lets you specify a parameter name, compatible
+        with high-level vertex programs. There is an alternative signature method
+        which allows you to set the parameter index for low-level assembler programs.
+    @param paramName The name of the parameter which will receive the morph factor
+    */
+    void setCustomMaterialMorphFactorParam(const String& paramName);
+    /** Sets the index of the vertex program parameter to which to pass the
+        LOD morph factor.
+    @remarks
+        When LOD morphing is enabled, and you are using a custom material to 
+        shade the terrain, you need to inform this class of the parameter you
+        wish the current LOD morph factor to be passed to. This is a simple
+        float parameter value that the plugin will set from 0 to 1, depending on
+        the morph stage of a tile. 0 represents no morphing, ie the vertices are
+        all in the original position. 1 represents a complete morph such that
+        the height of the vertices is the same as they are at the next lower LOD
+        level. The vertex program must use this factor, in conjunction with the
+        per-vertex height delta values (bound as 'blend weight'), to displace
+        vertices.
+    @note This version of the method lets you specify a parameter index, compatible
+        with low-level assembler vertex programs. There is an alternative signature method
+        which allows you to set the parameter name for high-level programs.
+    @param paramName The name of the parameter which will receive the morph factor
+    */
+    void setCustomMaterialMorphFactorParam(size_t paramIndex);
+    /** Sets the distance at which the LOD will start to morph downwards, as
+    a proportion of the distance between the LODs. */
+    void setLODMorphStart(Real morphStart);
+
+    /** Returns the TerrainRenderable that contains the given pt.
+        If no tile exists at the point, it returns 0;
+    */
+    virtual TerrainRenderable * getTerrainTile( const Vector3 & pt );
+
+    /** Returns the TerrainPage that contains the given pt.
+    If no page exists at the point, it returns 0;
+    */
+    virtual TerrainPage* getTerrainPage( const Vector3 & pt );
+
+    /** Creates a RaySceneQuery for this scene manager. 
+    @remarks
+        This method creates a new instance of a query object for this scene manager, 
+        looking for objects which fall along a ray. See SceneQuery and RaySceneQuery 
+        for full details.
+    @par
+        The instance returned from this method must be destroyed by calling
+        SceneManager::destroyQuery when it is no longer required.
+    @param ray Details of the ray which describes the region for this query.
+    @param mask The query mask to apply to this query; can be used to filter out
+        certain objects; see SceneQuery for details.
+    */
+    RaySceneQuery* 
+        createRayQuery(const Ray& ray, unsigned long mask = 0xFFFFFFFF);
+
+    /** Overridden in order to store the first camera created as the primary
+        one, for determining error metrics and the 'home' terrain page.
+    */
+    Camera* createCamera( const String &name );
+    /// Gets the terrain options 
+    static const TerrainOptions& getOptions(void) { return mOptions; }
+
+    /** Sets the given option for the SceneManager.
+    @remarks
+        Options are (in addition to those supported by superclasses):
+        "PageSize", int*;
+        "TileSize", int*; 
+        "PrimaryCamera, Camera*;
+        "MaxMipMapLevel", int*;
+        "Scale", Vector3 *;
+        "MaxPixelError", int*;
+        "UseTriStrips", bool*;
+        "VertexProgramMorph", bool*;
+        "DetailTile", int*;
+        "LodMorphStart", Real*;
+        "VertexNormals", bool*;
+        "VertexColours", bool*;
+        "MorphLODFactorParamName", String*;
+        "MorphLODFactorParamIndex", size_t*;
+        "CustomMaterialName", String*;
+        "WorldTexture", String*;
+        "DetailTexture", String*;
+    */
+    virtual bool setOption( const String &, const void * );
+
+    /** Sets the 'primary' camera, i.e. the one which will be used to determine
+        the 'home' terrain page, and to calculate the error metrics. 
+    */
+    virtual void setPrimaryCamera(const Camera* cam);
+    /// Internal map of page source name to page source
+    typedef std::map<String, TerrainPageSource*> PageSourceMap;
+
+    /// Iterator over all page sources
+    typedef ConstMapIterator<PageSourceMap> PageSourceIterator;
+    /// Get an iterator over all page sources
+    PageSourceIterator getPageSourceIterator(void);
+    /** Registers a TerrainPageSource class and associates it with a named type 
+        of source.
+    @remarks
+        This function allows external classes to register themselves as providers
+        of terrain pages of a particular type. Only one page source can be
+        active at once, and the active one is selected by calling 
+        selectPageSource(typeName), which is part of plugin configuration.
+    @note The terrain engine comes with a default page source which loads
+        greyscale heightmap images, registered under the type name "Heightmap".
+    @param typeName A unique String to associate with this type of source
+    @param source Pointer to the class which will implement this source.
+    */
+    virtual void registerPageSource(const String& typeName, TerrainPageSource* source);
+    /** Selects a given page source based on its type name.
+    @remarks
+        This method activates a single page source based on its typename, 
+        e.g. "Heightmap". It also passes to it a number of custom options
+        which the source is able to interpret however it likes.
+    @param typeName The type name of the page source to activate
+    @param optionList A list of string parameters, which are expected to begin
+        with 'typeName.' (e.g. "Heightmap.image"), with their appropriate
+        values.
+    */
+    virtual void selectPageSource(const String& typeName, 
+        TerrainPageSourceOptionList& optionList);
+
+    /** Attaches a previously built page to the list of available pages.
+    @remarks
+        TerrainPageSource subclasses will call this method once they have
+        pages available to be added to the working set. Note that whilst you
+        can build TerrainPage instances in another thread if you like, this
+        method must be called in the same thread as the main rendering loop 
+        in order to avoid concurrency issues. 
+    @param pageX, pageZ The page index at which to attach the page
+    @param page The page to attach
+    */
+    virtual void attachPage(ushort pageX, ushort pageZ, TerrainPage* page);
+    /// Get a pointer to the material being used for the terrain
+    MaterialPtr& getTerrainMaterial(void);
+    // Overridden from basic scene manager
+    void _renderScene(Camera *cam, Viewport *vp, bool includeOverlays);
+
+    /// Get the SceneNode under which all terrain nodes are attached.
+    SceneNode* getTerrainRootNode(void) const { return mTerrainRoot; }
+    /** Overridden from SceneManager */
+    void clearScene(void);
+	/** Overridden from SceneManager */
+	void setWorldGeometryRenderQueue(RenderQueueGroupID qid);
+
+	/// Shutdown cleanly before we get destroyed
+	void shutdown(void);
+
+
+protected:
+
+    /// Validates that the size picked for the terrain is acceptable
+    bool _checkSize( int s )
+    {
+        for ( int i = 0; i < 16; i++ )
+        {
+            printf( "Checking...%d\n", ( 1 << i ) + 1 );
+
+            if ( s == ( 1 << i ) + 1 )
+                return true;
+        }
+
+        return false;
+
+    }
+
+    /// The node to which all terrain tiles are attached
+    SceneNode * mTerrainRoot;
+    /// Terrain size, detail etc
+    static TerrainOptions mOptions;
+    /// Should we use an externally-defined custom material?
+    bool mUseCustomMaterial;
+    /// The name of the custom material to use
+    String mCustomMaterialName;
+    /// The name of the world texture
+    String mWorldTextureName;
+    /// The name of the detail texture
+    String mDetailTextureName;
+    /// Are we using a named parameter to hook up LOD morph?
+    bool mUseNamedParameterLodMorph;
+    /// The name of the parameter to send the LOD morph to
+    String mLodMorphParamName;
+    /// The index of the parameter to send the LOD morph to
+    size_t mLodMorphParamIndex;
+    /// Whether paging is enabled, or whether a single page will be used
+    bool mPagingEnabled;
+    /// The number of pages to render outside the 'home' page
+    unsigned short mLivePageMargin;
+    /// The number of pages to keep loaded outside the 'home' page
+    unsigned short mBufferedPageMargin;
+    /// Grid of buffered pages
+    TerrainPage2D mTerrainPages;
+    
+    /// Internal method for loading configurations settings
+    void loadConfig(const String& filename);
+
+    /// Sets up the terrain material
+    void setupTerrainMaterial(void);
+    /// Sets up the terrain page slots
+    void setupTerrainPages(void);
+
+
+    /// Map of source type -> TerrainPageSource
+    PageSourceMap mPageSources;
+    /// The currently active page source
+    TerrainPageSource* mActivePageSource;
+
+};
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreQuake3Types.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreQuake3Types.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreQuake3Types.h	(revision 1092)
@@ -0,0 +1,250 @@
+// Quake 3 data definitions
+// Copyright (C) 1999-2000 Id Software, Inc.
+//
+// This file must be identical in the quake and utils directories
+
+// contents flags are seperate bits
+// a given brush can contribute multiple content bits
+
+// these definitions also need to be in q_shared.h!
+#ifndef __Quake3Types_H__
+#define __Quake3Types_H__
+
+
+#define BSP_HEADER_ID   (*(int*)"IBSP")
+#define BSP_HEADER_VER  (46)
+
+#define BSP_ENTITIES_LUMP   (0)
+#define BSP_SHADERS_LUMP    (1)
+#define BSP_PLANES_LUMP     (2)
+#define BSP_NODES_LUMP      (3)
+#define BSP_LEAVES_LUMP     (4)
+#define BSP_LFACES_LUMP     (5)
+#define BSP_LBRUSHES_LUMP   (6)
+#define BSP_MODELS_LUMP     (7)
+#define BSP_BRUSH_LUMP      (8)
+#define BSP_BRUSHSIDES_LUMP (9)
+#define BSP_VERTICES_LUMP   (10)
+#define BSP_ELEMENTS_LUMP   (11)
+#define BSP_FOG_LUMP        (12)
+#define BSP_FACES_LUMP      (13)
+#define BSP_LIGHTMAPS_LUMP  (14)
+#define BSP_LIGHTVOLS_LUMP  (15)
+#define BSP_VISIBILITY_LUMP (16)
+
+#define BSP_LIGHTMAP_BANKSIZE   (128*128*3)
+
+
+#define    CONTENTS_SOLID            1        // an eye is never valid in a solid
+#define    CONTENTS_LAVA            8
+#define    CONTENTS_SLIME            16
+#define    CONTENTS_WATER            32
+#define    CONTENTS_FOG            64
+
+#define    CONTENTS_AREAPORTAL        0x8000
+
+#define    CONTENTS_PLAYERCLIP        0x10000
+#define    CONTENTS_MONSTERCLIP    0x20000
+//bot specific contents types
+#define    CONTENTS_TELEPORTER        0x40000
+#define    CONTENTS_JUMPPAD        0x80000
+#define CONTENTS_CLUSTERPORTAL    0x100000
+#define CONTENTS_DONOTENTER        0x200000
+
+#define    CONTENTS_ORIGIN            0x1000000    // removed before bsping an entity
+
+#define    CONTENTS_BODY            0x2000000    // should never be on a brush, only in game
+#define    CONTENTS_CORPSE            0x4000000
+#define    CONTENTS_DETAIL            0x8000000    // brushes not used for the bsp
+#define    CONTENTS_STRUCTURAL        0x10000000    // brushes used for the bsp
+#define    CONTENTS_TRANSLUCENT    0x20000000    // don't consume surface fragments inside
+#define    CONTENTS_TRIGGER        0x40000000
+#define    CONTENTS_NODROP            0x80000000    // don't leave bodies or items (death fog, lava)
+
+#define    SURF_NODAMAGE            0x1        // never give falling damage
+#define    SURF_SLICK                0x2        // effects game physics
+#define    SURF_SKY                0x4        // lighting from environment map
+#define    SURF_LADDER                0x8
+#define    SURF_NOIMPACT            0x10    // don't make missile explosions
+#define    SURF_NOMARKS            0x20    // don't leave missile marks
+#define    SURF_FLESH                0x40    // make flesh sounds and effects
+#define    SURF_NODRAW                0x80    // don't generate a drawsurface at all
+#define    SURF_HINT                0x100    // make a primary bsp splitter
+#define    SURF_SKIP                0x200    // completely ignore, allowing non-closed brushes
+#define    SURF_NOLIGHTMAP            0x400    // surface doesn't need a lightmap
+#define    SURF_POINTLIGHT            0x800    // generate lighting info at vertexes
+#define    SURF_METALSTEPS            0x1000    // clanking footsteps
+#define    SURF_NOSTEPS            0x2000    // no footstep sounds
+#define    SURF_NONSOLID            0x4000    // don't collide against curves with this set
+#define SURF_LIGHTFILTER        0x8000    // act as a light filter during q3map -light
+#define    SURF_ALPHASHADOW        0x10000    // do per-pixel light shadow casting in q3map
+#define    SURF_NODLIGHT            0x20000    // don't dlight even if solid (solid lava, skies)
+
+/* Shader flags */
+enum
+{
+    SHADER_NOCULL        = 1 << 0,
+    SHADER_TRANSPARENT   = 1 << 1,
+    SHADER_DEPTHWRITE    = 1 << 2,
+    SHADER_SKY           = 1 << 3,
+    SHADER_NOMIPMAPS     = 1 << 4,
+    SHADER_NEEDCOLOURS   = 1 << 5,
+    SHADER_DEFORMVERTS   = 1 << 6
+};
+
+/* Shaderpass flags */
+enum
+{
+    SHADER_LIGHTMAP   = 1 << 0,
+    SHADER_BLEND      = 1 << 1,
+    SHADER_ALPHAFUNC  = 1 << 3,
+    SHADER_TCMOD      = 1 << 4,
+    SHADER_ANIMMAP    = 1 << 5,
+    SHADER_TCGEN_ENV  = 1 << 6
+};
+
+/* Transform functions */
+enum WaveType
+{
+    SHADER_FUNC_NONE            = 0,
+    SHADER_FUNC_SIN             = 1,
+    SHADER_FUNC_TRIANGLE        = 2,
+    SHADER_FUNC_SQUARE          = 3,
+    SHADER_FUNC_SAWTOOTH        = 4,
+    SHADER_FUNC_INVERSESAWTOOTH = 5
+};
+
+/* *Gen functions */
+enum GenFunc
+{
+    SHADER_GEN_IDENTITY = 0,
+    SHADER_GEN_WAVE     = 1,
+    SHADER_GEN_VERTEX   = 2
+};
+
+enum TexGen
+{
+    TEXGEN_BASE = 0,        // Coord set 0
+    TEXGEN_LIGHTMAP = 1,    // Coord set 1
+    TEXGEN_ENVIRONMENT = 2  // Neither, generated
+};
+
+enum DeformFunc
+{
+    DEFORM_FUNC_NONE = 0,
+    DEFORM_FUNC_BULGE = 1,
+    DEFORM_FUNC_WAVE = 2,
+    DEFORM_FUNC_NORMAL = 3,
+    DEFORM_FUNC_MOVE = 4,
+    DEFORM_FUNC_AUTOSPRITE = 5,
+    DEFORM_FUNC_AUTOSPRITE2 = 6
+
+};
+/////////////////////////////////////////////////////////
+//
+// bsp contents
+//
+
+struct bsp_plane_t {
+    float normal[3];
+    float dist;
+};
+
+struct bsp_model_t {
+    float bbox[6];
+    int face_start;
+    int face_count;
+    int brush_start;
+    int brush_count;
+};
+
+struct bsp_node_t {
+    int plane;          // dividing plane
+    //int children[2];    // left and right nodes,
+                        // negative are leaves
+    int front;
+    int back;
+    int bbox[6];
+};
+
+struct bsp_leaf_t {
+    int cluster;    // visibility cluster number
+    int area;
+    int bbox[6];
+    int face_start;
+    int face_count;
+    int brush_start;
+    int brush_count;
+};
+
+#define BSP_FACETYPE_NORMAL (1)
+#define BSP_FACETYPE_PATCH  (2)
+#define BSP_FACETYPE_MESH   (3)
+#define BSP_FACETYPE_FLARE  (4)
+
+struct bsp_face_t {
+    int shader;         // shader ref
+    int unknown;
+    int type;           // face type
+    int vert_start;
+    int vert_count;
+    int elem_start;
+    int elem_count;
+    int lm_texture;     // lightmap
+    int lm_offset[2];
+    int lm_size[2];
+    float org[3];       // facetype_normal only
+    float bbox[6];      // facetype_patch only
+    float normal[3];    // facetype_normal only
+    int mesh_cp[2];     // patch control point dims
+};
+
+struct bsp_shader_t {
+    char name[64];
+    int surface_flags;
+    int content_flags;
+};
+
+struct bsp_vertex_t {
+    float point[3];
+    float texture[2];
+    float lightmap[2];
+    float normal[3];
+    int color;
+};
+
+struct bsp_vis_t {
+    int cluster_count;
+    int row_size;
+    unsigned char data[1];
+};
+
+// OGRE additions
+struct bsp_lump_entry_t {
+    int offset;
+    int size;
+};
+struct bsp_header_t {
+    char magic[4];
+    int version;
+    bsp_lump_entry_t lumps[17];
+};
+
+//
+// Brushes sides in BSP tree
+//
+struct bsp_brushside_t {
+	int planenum;
+	int content;			// ¿?shader¿?
+};
+
+
+//
+// Brushes in BSP tree
+//
+struct bsp_brush_t {
+	int firstside;
+	int numsides;
+	int shaderIndex;
+};
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreQuake3Shader.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreQuake3Shader.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreQuake3Shader.h	(revision 1092)
@@ -0,0 +1,116 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __QUAKE3SHADER_H__
+#define __QUAKE3SHADER_H__
+
+#include "OgreResource.h"
+#include "OgreBspPrerequisites.h"
+#include "OgreQuake3Types.h"
+#include "OgreCommon.h"
+#include "OgreColourValue.h"
+#include "OgreBlendMode.h"
+#include "OgreTextureUnitState.h"
+
+namespace Ogre {
+
+
+    /** Class for recording Quake3 shaders.
+        This is a temporary holding area since shaders are actually converted into
+        Material objects for use in the engine proper. However, because we have to read
+        in shader definitions en masse (because they are stored in shared .shader files)
+        without knowing which will actually be used, we store their definitions here
+        temporarily since their instantiations as Materials would use precious resources
+        because of the automatic loading of textures etc.
+    */
+    class Quake3Shader 
+    {
+    protected:
+        String getAlternateName(const String& texName);
+        String mName;
+
+    public:
+
+        /** Default constructor - used by Quake3ShaderManager (do not call directly) */
+        Quake3Shader(const String& name);
+        ~Quake3Shader();
+
+        /** Creates this shader as an OGRE material.
+            Creates a new material based on this shaders settings. 
+            Material name shader#lightmap.
+        */
+        MaterialPtr createAsMaterial(int lightmapNumber);
+
+        struct Pass {
+            unsigned int flags;
+            String textureName;
+            TexGen texGen;
+            // Multitexture blend
+            LayerBlendOperation blend;
+            // Multipass blends (Quake3 only supports multipass?? Surely not?)
+            SceneBlendFactor blendSrc;
+            SceneBlendFactor blendDest;
+            bool customBlend;
+            CompareFunction depthFunc;
+            TextureUnitState::TextureAddressingMode addressMode;
+            // TODO - alphaFunc
+            GenFunc rgbGenFunc;
+            WaveType rgbGenWave;
+            Real rgbGenParams[4];    // base, amplitude, phase, frequency
+            Real tcModScale[2];
+            Real tcModRotate;
+            Real tcModScroll[2];
+            Real tcModTransform[6];
+            bool tcModTurbOn;
+            Real tcModTurb[4];
+            WaveType tcModStretchWave;
+            Real tcModStretchParams[4];    // base, amplitude, phase, frequency
+            CompareFunction alphaFunc;
+            unsigned char alphaVal;
+
+            Real animFps;
+            unsigned int animNumFrames;
+            String frames[32];
+        };
+
+        unsigned int flags;
+        int numPasses;
+        typedef std::vector<Pass> PassList;
+        PassList pass;
+        bool farbox;            // Skybox
+        String farboxName;
+        bool skyDome;
+        Real cloudHeight;       // Skydome
+        DeformFunc deformFunc;
+        Real deformParams[5];
+        ManualCullingMode cullMode;
+
+        bool fog;
+        ColourValue fogColour;
+        Real fogDistance;
+
+    };
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreOctree.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreOctree.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreOctree.h	(revision 1092)
@@ -0,0 +1,163 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+/***************************************************************************
+octree.h  -  description
+-------------------
+begin                : Mon Sep 30 2002
+copyright            : (C) 2002 by Jon Anderson
+email                : janders@users.sf.net
+
+Enhancements 2003 - 2004 (C) The OGRE Team
+***************************************************************************/
+
+#ifndef OCTREE_H
+#define OCTREE_H
+
+#include <OgreAxisAlignedBox.h>
+#include <OgreWireBoundingBox.h>
+
+#include <list>
+
+namespace Ogre
+{
+
+class OctreeNode;
+
+typedef std::list < OctreeNode * > NodeList;
+
+
+/** Octree datastructure for managing scene nodes.
+@remarks
+This is a loose octree implementation, meaning that each
+octant child of the octree actually overlaps it's siblings by a factor
+of .5.  This guarantees that any thing that is half the size of the parent will
+fit completely into a child, with no splitting necessary.
+*/
+
+class Octree
+{
+public:
+    Octree( Octree * p );
+    ~Octree();
+
+    /** Adds an Octree scene node to this octree level.
+    @remarks
+    This is called by the OctreeSceneManager after
+    it has determined the correct Octree to insert the node into.
+    */
+    void _addNode( OctreeNode * );
+
+    /** Removes an Octree scene node to this octree level.
+    */
+    void _removeNode( OctreeNode * );
+
+    /** Returns the number of scene nodes attached to this octree
+    */
+    int numNodes()
+    {
+        return mNumNodes;
+    };
+
+    /** The bounding box of the octree
+    @remarks
+    This is used for octant index determination and rendering, but not culling
+    */
+    AxisAlignedBox mBox;
+    WireBoundingBox* mWireBoundingBox;
+    
+    /** Creats the wire frame bounding box for this octant
+    */
+    WireBoundingBox* getWireBoundingBox();
+
+    /** Vector containing the dimensions of this octree / 2
+    */
+    Vector3 mHalfSize;
+
+    /** 3D array of children of this octree.
+    @remarks
+    Children are dynamically created as needed when nodes are inserted in the Octree.
+    If, later, the all the nodes are removed from the child, it is still kept arround.
+    */
+    Octree * mChildren[ 2 ][ 2 ][ 2 ];
+
+    /** Determines if this octree is twice as big as the given box.
+    @remarks
+    This method is used by the OctreeSceneManager to determine if the given
+    box will fit into a child of this octree.
+    */
+    bool _isTwiceSize( AxisAlignedBox &box );
+
+    /**  Returns the appropriate indexes for the child of this octree into which the box will fit.
+    @remarks
+    This is used by the OCtreeSceneManager to determine which child to traverse next when
+    finding the appropriate octree to insert the box.  Since it is a loose octree, only the
+    center of the box is checked to determine the octant.
+    */
+    void _getChildIndexes( AxisAlignedBox &, int *x, int *y, int *z );
+
+    /** Creates the AxisAlignedBox used for culling this octree.
+    @remarks
+    Since it's a loose octree, the culling bounds can be different than the actual bounds of the octree.
+    */
+    void _getCullBounds( AxisAlignedBox * );
+
+
+    /** Public list of SceneNodes attached to this particular octree
+    */
+    NodeList mNodes;
+
+protected:
+
+    /** Increments the overall node count of this octree and all it's parents
+    */
+    inline void _ref()
+    {
+        mNumNodes++;
+
+        if ( mParent != 0 ) mParent -> _ref();
+    };
+
+    /** Decrements the overall node count of this octree and all it's parents
+    */
+    inline void _unref()
+    {
+        mNumNodes--;
+
+        if ( mParent != 0 ) mParent -> _unref();
+    };
+
+    ///number of SceneNodes in this octree and all it's children.
+    int mNumNodes;
+
+    ///parent octree
+    Octree * mParent;
+
+};
+
+}
+
+#endif
+
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreQuake3Level.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreQuake3Level.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreQuake3Level.h	(revision 1092)
@@ -0,0 +1,164 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __Quake3Level_H__
+#define __Quake3Level_H__
+
+#include "OgreBspPrerequisites.h"
+#include "OgreQuake3Types.h"
+#include "OgreDataStream.h"
+
+
+namespace Ogre {
+
+    /** Support for loading and extracting data from a Quake3 level file.
+    This class implements the required methods for opening Quake3 level files
+    and extracting the pertinent data within. Ogre supports BSP based levels
+    through it's own BspLevel class, which is not specific to any file format,
+    so this class is here to source that data from the Quake3 format.</p>
+    Quake3 levels include far more than just data for rendering - typically the
+    <strong>leaves</strong> of the tree are used for rendering, and <strong>brushes,</strong>
+    are used to    define convex hulls made of planes for collision detection. There are also
+    <strong>entities</strong> which define non-visual elements like player start
+    points, triggers etc and <strong>models</strong> which are used for movable
+    scenery like doors and platforms. <strong>Shaders</strong> meanwhile are textures
+    with extra effects and 'content flags' indicating special properties like
+    water or lava.</p>
+    I will try to support as much of this as I can in Ogre, but I won't duplicate
+    the structure or necesarily use the same terminology. Quake3 is designed for a very specific
+    purpose and code structure, whereas Ogre is designed to be more flexible,
+    so for example I'm likely to separate game-related properties like surface flags
+    from the generics of materials in my implementation.</p>
+    This is a utility class only - a single call to loadFromChunk should be
+    enough. You should not expect the state of this object to be consistent
+    between calls, since it uses pointers to memory which may no longer
+    be valid after the original call. This is why it has no accessor methods
+    for reading it's internal state.
+    */
+    class Quake3Level
+    {
+    public:
+        Quake3Level();
+
+        /** Load just the header information from a Quake3 file. 
+        @remarks
+            This method loads just the header information from the 
+            Quake3 file, in order to estimate the loading time.
+        */
+        void loadHeaderFromStream(DataStreamPtr& inStream);
+
+        /** Reads Quake3 bsp data from a stream as read from the file.
+            Since ResourceManagers generally locate data in a variety of
+            places they typically manipulate them as a chunk of data, rather than
+            a file pointer since this is unsupported through compressed archives.</p>
+            Quake3 files are made up of a header (which contains version info and
+            a table of the contents) and 17 'lumps' i.e. sections of data,
+            the offsets to which are kept in the table of contents. The 17 types
+            are predefined (You can find them in OgreQuake3Types.h)
+
+            @param inStream Stream containing Quake3 data
+        */
+        void loadFromStream(DataStreamPtr& inStream);
+
+        /* Extracts the embedded lightmap texture data and loads them as textures.
+           Calling this method makes the lightmap texture data embedded in
+           the .bsp file available to the renderer. Lightmaps are extracted
+           and loaded as Texture objects (subclass specific to RenderSystem
+           subclass) and are named "@lightmap1", "@lightmap2" etc.
+        */
+        void extractLightmaps(void) const;
+
+        /** Utility function read the header and set up pointers. */
+        void initialise(bool headerOnly = false);
+        /** Utility function read the header and set up counters. */
+        void initialiseCounts(void);
+        /** Utility function read the header and set up pointers. */
+        void initialisePointers(void);
+
+        /** Utility function to return a pointer to a lump. */
+        void* getLump(int lumpType);
+        int getLumpSize(int lumpType);
+
+        /** Debug method. */
+        void dumpContents(void);
+
+        // Internal storage
+        // This is ALL temporary. Don't rely on it being static
+        MemoryDataStreamPtr mChunk;
+
+        // NB no brushes, fog or local lightvolumes yet
+        bsp_header_t* mHeader;
+        unsigned char* mLumpStart;
+
+        int* mElements; // vertex indexes for faces
+        int mNumElements;
+
+        void* mEntities;
+        int mNumEntities;
+
+        bsp_model_t* mModels;
+        int mNumModels;
+
+        bsp_node_t* mNodes;
+        int mNumNodes;
+
+        bsp_leaf_t* mLeaves;
+        int mNumLeaves;
+
+        int* mLeafFaces;     // Indexes to face groups by leaf
+        int mNumLeafFaces;
+
+        bsp_plane_t* mPlanes;
+        int mNumPlanes;
+
+        bsp_face_t* mFaces;      // Groups of faces
+        int mNumFaces;
+
+        bsp_vertex_t* mVertices;
+        int mNumVertices;
+
+        bsp_shader_t* mShaders;
+        int mNumShaders;
+
+        unsigned char* mLightmaps;
+        int mNumLightmaps;
+
+        bsp_vis_t* mVis;
+
+        bsp_brush_t* mBrushes;
+        int mNumBrushes;
+
+        bsp_brushside_t* mBrushSides;
+        int mNumBrushSides;
+
+        int* mLeafBrushes;      // Groups of indexes to brushes by leaf
+        int mNumLeafBrushes;
+
+
+
+    };
+}
+
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreTerrainPageSource.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreTerrainPageSource.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreTerrainPageSource.h	(revision 1092)
@@ -0,0 +1,253 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __TerrainPageSource_H__
+#define __TerrainPageSource_H__
+
+#include "OgreTerrainPrerequisites.h"
+#include "OgreSingleton.h"
+
+namespace Ogre {
+
+    typedef std::pair<String, String> TerrainPageSourceOption;
+    typedef std::vector<TerrainPageSourceOption> TerrainPageSourceOptionList;
+
+    /** Abstract class which classes can override to receive notifications
+        when a page is ready to be added to the terrain manager.
+    */
+    class _OgreTerrainExport TerrainPageSourceListener
+    {
+    public:
+        /** Listener method called when a new page is about to be constructed. 
+        @param pagex, pagez The index of the page being constructed
+        @param heightData Array of normalised height data (0..1). The size of
+            this buffer will conform to the scene manager page size. The listener
+            may modify the data if it wishes.
+        */
+        virtual void pageConstructed(size_t pagex, size_t pagez, Real* heightData) = 0;
+    };
+
+	/** Simple manager class to hold onto a list of page source listeners 
+	    across all sources.
+	*/
+	class _OgreTerrainExport TerrainPageSourceListenerManager :
+		public Singleton<TerrainPageSourceListenerManager>
+	{
+	protected:
+        typedef std::vector<TerrainPageSourceListener*> PageSourceListenerList;
+        PageSourceListenerList mPageSourceListeners;
+	public:
+        TerrainPageSourceListenerManager() {}
+        ~TerrainPageSourceListenerManager() {}
+
+        /** Register a class which will be called back whenever a new page is
+            available.
+        @remarks
+            Since this method is static, it applies to any page source which 
+            is in active use; there is no need to register one per source.
+        */
+        void addListener(TerrainPageSourceListener* pl);
+        /** Unregister a class which will be called back whenever a new page is
+        available.
+        */
+        void removeListener(TerrainPageSourceListener* pl);
+		
+        /// Fire pageContructed events
+        void firePageConstructed(size_t pagex, size_t pagez, Real* heightData);
+
+       /** Override standard Singleton retrieval.
+        */
+        static TerrainPageSourceListenerManager& getSingleton(void);
+        /** Override standard Singleton retrieval.
+        */
+        static TerrainPageSourceListenerManager* getSingletonPtr(void);	
+	
+	};
+
+
+    /** Abstract class which describes the interface which a source of terrain 
+        pages must implement.
+    @remarks
+        The TerrainSceneManager can accept external classes as providers of
+        terrain data, to allow terrain height data to come from anywhere the
+        user application may choose, and additionally to support on-demand
+        loading an unloading of terrain data. Providers must suclass this class, 
+        and implement the abstract methods (details are described within each method)
+    @par
+        The overall sequence of events is this:
+        <ol>
+        <li>TerrainSceneManager is created as usual, and options such as tile
+        size etc are set.</li>
+        <li>CustomTerrainPageSource is registered with TerrainSceneManager by 
+        calling registerPageSource(), registering a particular named type of source 
+        data with this tile source. <li>
+        <li>TerrainSceneManager::setWorldGeometry is called. Depending on the
+        configuration, this will call one of the page source classes 
+        initialise methods, when the scene manager will communicate it's 
+        preferred options. It does not have to load anything immediately on this 
+        call (especially if the terrain options include paging). It will 
+        also set this tile source as the primary.<li>
+        <li>As and when TerrainSceneManager requires more tiles (and this will
+        either be done all up-front, or progressively depending on paging settings)
+        it will call the primary tile source's requestPage() method, with the 
+        page it requires. </li>
+        <li>It is then the responsibility of the tile source to prepare
+        TerrainRenderable instances for the page(s) requested, and to attach them 
+        to the TerrainSceneManager. Note that preparing the tiles does not
+        involve modifying any shared data so may be done in an alternate thread,
+        if required. Attaching them must be done synchronously though.
+        <li>When paging, the TerrainSceneManager will request tiles in advance,
+        within it's 'buffer zone' so some delay in loading is acceptable. It
+        will also indicate when tiles are no longer required (and will detach
+        them); it is up to the tile source whether that memory is actually freed
+        or held for a while longer.
+        </ol>
+    @note The comments on paging above are in principle, the implementation of
+    paging in this manager is not present yet but the system is designed to 
+    extend to it. For now, all tiles are requested up-front.
+    */
+    class _OgreTerrainExport TerrainPageSource
+    {
+    protected:
+        /// Link back to parent manager
+        TerrainSceneManager* mSceneManager;
+        /// Has asynchronous loading been requested?
+        bool mAsyncLoading;
+        /// The expected size of the page in number of vertices
+        unsigned short mPageSize;
+        /// The expected size of a tile in number of vertices
+        unsigned short mTileSize;
+
+        /// Internal method for firing pageContructed events
+        static void firePageConstructed(size_t pagex, size_t pagez, Real* heightData);
+
+        /** Utility method for building a page of tiles based on some source
+        data, wherever that may have come from.
+        @remarks
+            It is expected that this height data is represented in the range
+            [0..1], which will be duly scaled by the TerrainRenderables it
+            creates.
+        */
+        virtual TerrainPage* buildPage(Real* heightData, const MaterialPtr& pMaterial);
+
+
+    public:
+        TerrainPageSource(); 
+        virtual ~TerrainPageSource() { shutdown(); }
+
+        /** Initialise this tile source based on a series of options as
+            dictated by the scene manager. 
+        @param tsm The TerrainSceneManager doing the initialising. This should be 
+            allowed NULL, for use by external tools if they want to read data 
+            generically without necessarily having a real scene manager involved
+        @param tileSize The number of horizontal (and hence also vertical) 
+            vertices in a single tile (which is a TerrainRenderable). This will
+            always be (2^n)+1.
+        @param pageSize The number of horizontal (and hence also vertical) 
+            vertices in a single page. This will always be (2^n)+1.
+        @param asyncLoading
+            True if the scene manager would like the tile source to load tiles
+            asynchronously. It does not have to do this, although if it does not
+            when requested, it will likely result in stalls in the terrain rendering.
+        @param optionList 
+            A list of name/value pairs describing custom options for this particular
+            page source. The expected convention for option names is
+            "TypeName.OptionName", where TypeName is the type under which this
+            page source has been registered.
+        */
+        virtual void initialise(TerrainSceneManager* tsm, 
+            ushort tileSize, ushort pageSize, bool asyncLoading, 
+            TerrainPageSourceOptionList& optionList)
+        {
+            mSceneManager = tsm;
+            mTileSize = tileSize;
+            mPageSize = pageSize;
+            mAsyncLoading = asyncLoading;
+        }
+        /** Shut down this tile source, freeing all it's memory ready for 
+            decommissioning.
+        @remarks
+            This method will normally just be called on destruction; however
+            it may also be called by the TerrainSceneManager if another source
+            is provided for the same type of tile source.
+        */
+        virtual void shutdown(void) {}
+
+        /** Requests a new page of tiles from the source.
+        @remarks
+            The TerrainSceneManager will call this method when it needs new tiles.
+            In response, this class must prepare TerrainRenderable instances for
+            the page requested and attach the entire page when ready using 
+            TerrainSceneManager::attachTerrainPage.
+        @par
+            Now, the tile source does not necessarily need to do all that before the
+            return of this method. If it likes, and particularly if asynchronous 
+            loading is enabled, it can merely queue this request, and process it
+            either in another thread, or over a series of frames. The key thing
+            is that attaching the new page has to be done synchronously with 
+            the main rendering loop in order to avoid concurrency issues; 
+            other than that, you are free to load and prepare new tiles in 
+            a concurrent fashion if you like.
+        @par
+            Typically the scene manager will request at least one page up-front,
+            with the possibility of requesting more if paging is enabled.
+        @param x The x index of the page requested
+        @param z The z index of the page requested
+        */
+        virtual void requestPage(ushort x, ushort z) = 0;
+        /** This notifies the tile source that the specified page of tiles 
+            has been automatically detached.
+        @remarks
+            When paging is enabled, tiles go out of scope and the TerrainSceneManager
+            detaches them automatically, notifying the TerrainPageSource that 
+            this has happened. The tile source can choose to either keep these
+            tiles in memory (incase they are requested again) or can delete them
+            if it wishes to free memory. This freeing does not need to be done
+            before the return of this method - like requesting tiles, the
+            freeing of them can be done in another thread or across many frames
+            if required, since the shared data in TerrainSceneManager has already
+            been updated synchronously when the page was detached.
+        @param x The x index of the page expired
+        @param z The z index of the page expired
+        */
+        virtual void expirePage(ushort x, ushort z) = 0;
+        
+        /** Register a class which will be called back whenever a new page is
+            available.
+        @remarks
+            Since this method is static, it applies to any page source which 
+            is in active use; there is no need to register one per source.
+        */
+        static void addListener(TerrainPageSourceListener* pl);
+        /** Unregister a class which will be called back whenever a new page is
+        available.
+        */
+        static void removeListener(TerrainPageSourceListener* pl);
+
+    };
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreOctreeSceneQuery.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreOctreeSceneQuery.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreOctreeSceneQuery.h	(revision 1092)
@@ -0,0 +1,99 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+ 
+Copyright  2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+ 
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+ 
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+ 
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+/***************************************************************************
+OgreOctreeSceneQuery.h  -  description
+-------------------
+begin                : Tues July 20, 2004
+copyright            : (C) 2004 by Jon Anderson
+email                : janders@users.sf.net
+***************************************************************************/
+
+#ifndef OCTREESCENEQUERY_H
+#define OCTREESCENEQUERY_H
+
+#include "OgreTerrainPrerequisites.h"
+#include <OgreSceneManager.h>
+
+
+namespace Ogre
+{
+/** Octree implementation of IntersectionSceneQuery. */
+class _OgreTerrainExport OctreeIntersectionSceneQuery :  public DefaultIntersectionSceneQuery
+{
+public:
+    OctreeIntersectionSceneQuery(SceneManager* creator);
+    ~OctreeIntersectionSceneQuery();
+
+    /** See IntersectionSceneQuery. */
+    void execute(IntersectionSceneQueryListener* listener);
+};
+
+/** Octree implementation of RaySceneQuery. */
+class _OgreTerrainExport OctreeRaySceneQuery : public DefaultRaySceneQuery
+{
+public:
+    OctreeRaySceneQuery(SceneManager* creator);
+    ~OctreeRaySceneQuery();
+
+    /** See RayScenQuery. */
+    void execute(RaySceneQueryListener* listener);
+};
+/** Octree implementation of SphereSceneQuery. */
+class _OgreTerrainExport OctreeSphereSceneQuery : public DefaultSphereSceneQuery
+{
+public:
+    OctreeSphereSceneQuery(SceneManager* creator);
+    ~OctreeSphereSceneQuery();
+
+    /** See SceneQuery. */
+    void execute(SceneQueryListener* listener);
+};
+/** Octree implementation of PlaneBoundedVolumeListSceneQuery. */
+class _OgreTerrainExport OctreePlaneBoundedVolumeListSceneQuery : public DefaultPlaneBoundedVolumeListSceneQuery
+{
+public:
+    OctreePlaneBoundedVolumeListSceneQuery(SceneManager* creator);
+    ~OctreePlaneBoundedVolumeListSceneQuery();
+
+    /** See SceneQuery. */
+    void execute(SceneQueryListener* listener);
+};
+/** Octree implementation of AxisAlignedBoxSceneQuery. */
+class _OgreTerrainExport OctreeAxisAlignedBoxSceneQuery : public DefaultAxisAlignedBoxSceneQuery
+{
+public:
+    OctreeAxisAlignedBoxSceneQuery(SceneManager* creator);
+    ~OctreeAxisAlignedBoxSceneQuery();
+
+    /** See RayScenQuery. */
+    void execute(SceneQueryListener* listener);
+};
+
+
+}
+
+#endif
+
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreBspResourceManager.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreBspResourceManager.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreBspResourceManager.h	(revision 1092)
@@ -0,0 +1,103 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _BspLevelManager_H__
+#define _BspLevelManager_H__
+
+#include "OgreBspPrerequisites.h"
+#include "OgreResourceManager.h"
+#include "OgreSingleton.h"
+
+namespace Ogre {
+
+    /** Manages the locating and loading of BSP-based indoor levels.
+    Like other ResourceManager specialisations it manages the location and loading
+    of a specific type of resource, in this case files containing Binary
+    Space Partition (BSP) based level files e.g. Quake3 levels.</p>
+    However, note that unlike other ResourceManager implementations,
+    only 1 BspLevel resource is allowed to be loaded at one time. Loading
+    another automatically unloads the currently loaded level if any.
+    */
+    class BspResourceManager : public ResourceManager, public Singleton<BspResourceManager>
+    {
+    public:
+        BspResourceManager();
+        ~BspResourceManager();
+
+        /** Loads a BSP-based level from the named file.
+            Currently only supports loading of Quake3 .bsp files.
+        */
+        ResourcePtr load(const String& name, 
+            const String& group, bool isManual = false, 
+            ManualResourceLoader* loader = 0, const NameValuePairList* loadParams = 0);
+
+
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static BspResourceManager& getSingleton(void);
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static BspResourceManager* getSingletonPtr(void);
+
+
+    protected:
+        /** @copydoc ResourceManager::createImpl. */
+        Resource* createImpl(const String& name, ResourceHandle handle, 
+            const String& group, bool isManual, ManualResourceLoader* loader, 
+            const NameValuePairList* createParams);
+
+        // Singleton managed by this class
+        Quake3ShaderManager *mShaderMgr;
+
+    };
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreOctreeNode.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreOctreeNode.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreOctreeNode.h	(revision 1092)
@@ -0,0 +1,140 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+/***************************************************************************
+octreenode.h  -  description
+-------------------
+begin                : Fri Sep 27 2002
+copyright            : (C) 2002 by Jon Anderson
+email                : janders@users.sf.net
+
+Enhancements 2003 - 2004 (C) The OGRE Team
+***************************************************************************/
+
+#ifndef OCTREENODE_H
+#define OCTREENODE_H
+
+#include <OgreSceneNode.h>
+
+#include <OgreOctreeSceneManager.h>
+
+namespace Ogre
+{
+
+/** Specialized SceneNode that is customized for working within an Octree. Each node
+* maintains it's own bounding box, rather than merging it with all the children.
+*
+*/
+
+class OctreeNode : public SceneNode
+{
+public:
+    /** Standard constructor */
+    OctreeNode( SceneManager* creator );
+    /** Standard constructor */
+    OctreeNode( SceneManager* creator, const String& name );
+    /** Standard destructor */
+    ~OctreeNode();
+
+    /** Overridden from Node to remove any reference to octants */
+    Node * removeChild( unsigned short index );
+    
+    /** Overridden from Node to remove any reference to octants */
+    Node * removeChild( const String & name );
+
+    /** Overridden from Node to remove any reference to octants */
+    Node * removeChild( Node* child);
+
+    /** Returns the Octree in which this OctreeNode resides
+    */
+    Octree * getOctant()
+    {
+        return mOctant;
+    };
+
+    /** Sets the Octree in which this OctreeNode resides
+    */
+    void setOctant( Octree *o )
+    {
+        mOctant = o;
+    };
+
+    /** Determines if the center of this node is within the given box
+    */
+    bool _isIn( AxisAlignedBox &box );
+
+    /** Adds all the attached scenenodes to the render queue
+    */
+    virtual void _addToRenderQueue( Camera* cam, RenderQueue * q, bool onlyShadowCasters );
+
+    /** Sets up the LegacyRenderOperation for rendering this scene node as geometry.
+    @remarks
+    This will render the scenenode as a bounding box.
+    */
+    virtual void getRenderOperation( RenderOperation& op );
+
+    /** Returns the local bounding box of this OctreeNode.
+    @remarks
+    This is used to render the bounding box, rather then the global.
+    */
+    AxisAlignedBox & _getLocalAABB()
+    {
+        return mLocalAABB;
+    };
+
+
+
+
+protected:
+
+    /** Internal method for updating the bounds for this OctreeNode.
+    @remarks
+    This method determines the bounds solely from the attached objects, not
+    any children. If the node has changed it's bounds, it is removed from its
+    current octree, and reinserted into the tree.
+    */
+    void _updateBounds( void );
+
+    void _removeNodeAndChildren( );
+
+    ///local bounding box
+    AxisAlignedBox mLocalAABB;
+
+    ///Octree this node is attached to.
+    Octree *mOctant;
+
+    ///preallocated corners for rendering
+    Real mCorners[ 24 ];
+    ///shared colors for rendering
+    static unsigned long mColors[ 8 ];
+    ///shared indexes for rendering
+    static unsigned short mIndexes[ 24 ];
+
+
+};
+
+}
+
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreTerrainRenderable.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreTerrainRenderable.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreTerrainRenderable.h	(revision 1092)
@@ -0,0 +1,419 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+/***************************************************************************
+terrainrenderable.h  -  description
+-------------------
+begin                : Sat Oct 5 2002
+copyright            : (C) 2002 by Jon Anderson
+email                : janders@users.sf.net
+
+Enhancements 2003 - 2004 (C) The OGRE Team
+
+***************************************************************************/
+
+#ifndef TERRAINRENDERABLE_H
+#define TERRAINRENDERABLE_H
+
+#include "OgreTerrainPrerequisites.h"
+#include <OgreRenderable.h>
+#include <OgreMovableObject.h>
+#include <OgreAxisAlignedBox.h>
+#include <OgreString.h>
+#include <OgreHardwareBufferManager.h>
+
+#include <vector>
+
+#define MORPH_CUSTOM_PARAM_ID 77
+
+namespace Ogre
+{
+
+    typedef std::map <unsigned int, IndexData* > IndexMap;
+    typedef std::vector < IndexData* > IndexArray;
+    typedef std::vector < IndexMap* > LevelArray;
+
+    /**
+    * A cache of TerrainIndexBuffers.  Used to keep track of the buffers, and
+    * delete them when the program finishes.
+    */
+    class TerrainBufferCache
+    {
+    public:
+        void shutdown(void)
+        {
+            for( size_t i=0; i<mCache.size(); i++ )
+            {
+                delete mCache[i];
+            }
+            mCache.clear();
+        }
+        ~TerrainBufferCache()
+        {
+            shutdown();
+        }
+
+        IndexArray mCache;
+    };
+
+    inline Real _max( Real x, Real y )
+    {
+        return ( x > y ) ? x : y;
+    }
+
+    /** A simple class for encapsulating parameters which are commonly needed by 
+    both TerrainSceneManager and TerrainRenderable.
+    */
+    class TerrainOptions
+    {
+    public:
+        TerrainOptions()
+        {
+            pageSize = 0;
+            tileSize = 0;
+            tilesPerPage = 0;
+            maxGeoMipMapLevel = 0;
+            scale = Vector3::UNIT_SCALE;
+            maxPixelError = 4;
+            detailTile = 1;
+            lit = false;
+            coloured = false;
+            lodMorph = false;
+            lodMorphStart = 0.5;
+            useTriStrips = false;
+            primaryCamera = 0;
+            terrainMaterial.setNull();
+        };
+        /// The size of one edge of a terrain page, in vertices
+        size_t pageSize;
+        /// The size of one edge of a terrain tile, in vertices
+        size_t tileSize; 
+        /// Precalculated number of tiles per page
+        size_t tilesPerPage;
+        /// The primary camera, used for error metric calculation and page choice
+        const Camera* primaryCamera;
+        /// The maximum terrain geo-mipmap level
+        size_t maxGeoMipMapLevel;
+        /// The scale factor to apply to the terrain (each vertex is 1 unscaled unit
+        /// away from the next, and height is from 0 to 1)
+        Vector3 scale;
+        /// The maximum pixel error allowed
+        size_t maxPixelError;
+        /// Whether we should use triangle strips
+        bool useTriStrips;
+        /// The number of times to repeat a detail texture over a tile
+        size_t detailTile;
+        /// Whether LOD morphing is enabled
+        bool lodMorph;
+        /// At what point (parametric) should LOD morphing start
+        Real lodMorphStart;
+        /// Whether dynamic lighting is enabled
+        bool lit;
+        /// Whether vertex colours are enabled
+        bool coloured;
+        /// Pointer to the material to use to render the terrain
+        MaterialPtr terrainMaterial;
+
+    };
+
+#define STITCH_NORTH_SHIFT 0
+#define STITCH_SOUTH_SHIFT 8
+#define STITCH_WEST_SHIFT  16
+#define STITCH_EAST_SHIFT  24
+
+#define STITCH_NORTH  128 << STITCH_NORTH_SHIFT
+#define STITCH_SOUTH  128 << STITCH_SOUTH_SHIFT
+#define STITCH_WEST   128 << STITCH_WEST_SHIFT
+#define STITCH_EAST   128 << STITCH_EAST_SHIFT
+
+    /**
+    Represents a terrain tile.
+    @remarks
+    A TerrainRenderable represents a tile used to render a block of terrain using the geomipmap approach
+    for LOD.
+    *@author Jon Anderson
+    */
+
+    class _OgreTerrainExport TerrainRenderable : public Renderable, public MovableObject
+    {
+    public:
+
+        TerrainRenderable(const String& name);
+        ~TerrainRenderable();
+
+        void deleteGeometry();
+
+        enum Neighbor
+        {
+            NORTH = 0,
+            SOUTH = 1,
+            EAST = 2,
+            WEST = 3,
+            HERE = 4
+        };
+
+        /** Initializes the TerrainRenderable.
+        @param startx, startz 
+        The starting points of the top-left of this tile, in terms of the
+        number of vertices.
+        @param pageHeightData The source height data for the entire parent page
+        */
+        void initialise(int startx, int startz, Real* pageHeightData);
+
+        //movable object methods
+        /** Returns the name of the TerrainRenderable */
+        virtual const String& getName( void ) const
+        {
+            return mName;
+        };
+
+        /** Returns the type of the movable. */
+        virtual const String& getMovableType( void ) const
+        {
+            return mType;
+        };
+
+        /** Returns the bounding box of this TerrainRenderable */
+        const AxisAlignedBox& getBoundingBox( void ) const
+        {
+            return mBounds;
+        };
+
+        /** Updates the level of detail to be used for rendering this TerrainRenderable based on the passed in Camera */
+        virtual void _notifyCurrentCamera( Camera* cam );
+
+        virtual void _updateRenderQueue( RenderQueue* queue );
+
+        /**
+        Constructs a RenderOperation to render the TerrainRenderable.
+        @remarks
+        Each TerrainRenderable has a block of vertices that represent the terrain.  Index arrays are dynamically
+        created for mipmap level, and then cached.
+        */
+        virtual void getRenderOperation( RenderOperation& rend );
+
+        virtual const MaterialPtr& getMaterial( void ) const
+        {
+            return mMaterial;
+        };
+
+        virtual void getWorldTransforms( Matrix4* xform ) const;
+
+        virtual const Quaternion& getWorldOrientation(void) const;
+        virtual const Vector3& getWorldPosition(void) const;
+
+        /** Returns the mipmap level that will be rendered for this frame. */
+        inline int getRenderLevel() const
+        {
+            return mRenderLevel;
+        };
+
+        /** Forces the LOD to the given level from this point on. */
+        inline void setForcedRenderLevel( int i )
+        {
+            mForcedRenderLevel = i;
+        }
+
+        /** Calculates the normal at the given location */
+        void _getNormalAt( float x, float y, Vector3 * result );
+
+        /** Returns the terrain height at the given coordinates */
+        float getHeightAt( float x, float y );
+
+        /** Intersects the segment witht he terrain tile
+        */
+        bool intersectSegment( const Vector3 & start, const Vector3 & end, Vector3 * result );
+
+        /** Sets the appropriate neighbor for this TerrainRenderable.  Neighbors are necessary
+        to know when to bridge between LODs.
+        */
+        void _setNeighbor( Neighbor n, TerrainRenderable *t )
+        {
+            mNeighbors[ n ] = t;
+        };
+
+        /** Returns the neighbor TerrainRenderable.
+        */
+        TerrainRenderable * _getNeighbor( Neighbor n )
+        {
+            return mNeighbors[ n ];
+        }
+
+
+        void setMaterial(const MaterialPtr& m )
+        {
+            mMaterial = m;
+        };
+
+        /** Calculates static normals for lighting the terrain. */
+        void _calculateNormals();
+
+
+
+
+        /** Generates terrain shadows and lighting using vertex colors
+        */
+        void _generateVertexLighting( const Vector3 &sun, ColourValue ambient );
+
+
+        /** Overridden, see Renderable */
+        Real getSquaredViewDepth(const Camera* cam) const;
+
+        /** Overridden from MovableObject */
+        Real getBoundingRadius(void) const { return 0; /* not needed */ }
+
+        /** @copydoc Renderable::getLights */
+        const LightList& getLights(void) const;
+
+        /// Overridden from Renderable to allow the morph LOD entry to be set
+        void _updateCustomGpuParameter(
+            const GpuProgramParameters::AutoConstantEntry& constantEntry,
+            GpuProgramParameters* params) const;
+        /// Get the static list of indexes cached (internal use only)
+        static TerrainBufferCache& _getIndexCache(void) {return msIndexCache;}
+    protected:
+        /// Static list of index buffers
+        static TerrainBufferCache msIndexCache;
+        /// Static link to static shared options
+        static const TerrainOptions* msOptions;
+
+        /** Returns the index into the height array for the given coords. */
+        inline size_t _index( int x, int z ) const
+        {
+            return ( x + z * msOptions->tileSize );
+        };
+
+        /** Returns the  vertex coord for the given coordinates */
+        inline float _vertex( int x, int z, int n )
+        {
+            return mPositionBuffer[x * 3 + z * msOptions->tileSize * 3 + n];
+        };
+
+
+        inline int _numNeighbors() const
+        {
+            int n = 0;
+
+            for ( int i = 0; i < 4; i++ )
+            {
+                if ( mNeighbors[ i ] != 0 )
+                    n++;
+            }
+
+            return n;
+        }
+
+        inline bool _hasNeighborRenderLevel( int i ) const
+        {
+            for ( int j = 0; j < 4; j++ )
+            {
+                if ( mNeighbors[ j ] != 0 && mNeighbors[ j ] ->mRenderLevel == i )
+                    return true;
+            }
+
+            return false;
+
+        }
+
+        void _adjustRenderLevel( int i );
+
+        void _initLevelIndexes();
+        void _destroyLevelIndexes();
+
+        bool _checkSize( int n );
+
+        void _calculateMinLevelDist2( Real C );
+
+        Real _calculateCFactor();
+
+        VertexData* mTerrain;
+
+        /// The current LOD level
+        int mRenderLevel;
+        /// The previous 'next' LOD level down, for frame coherency
+        int mLastNextLevel; 
+        /// The morph factor between this and the next LOD level down
+        Real mLODMorphFactor;
+        /// List of squared distances at which LODs change
+        Real *mMinLevelDistSqr;
+        /// Connection to tiles four neighbours
+        TerrainRenderable *mNeighbors [ 4 ];
+        /// Bounding box of this tile
+        AxisAlignedBox mBounds;
+        /// The center point of this tile
+        Vector3 mCenter;
+        /// Name of this renderable
+        String mName;
+        /// The MovableObject type
+        static String mType;
+        /// Current material used by this tile
+        MaterialPtr mMaterial;    
+        /// Whether this tile has been initialised    
+        bool mInit;
+        /// Shared array of IndexData (reuse indexes across tiles)
+        static LevelArray mLevelIndex;
+        /// Whether the level array as been initialised yet
+        static bool mLevelInit;
+        /// The buffer with all the renderable geometry in it
+        HardwareVertexBufferSharedPtr mMainBuffer;
+        /// Optional set of delta buffers, used to morph from one LOD to the next
+        HardwareVertexBufferSharedPtr* mDeltaBuffers;
+        /// System-memory buffer with just positions in it, for CPU operations
+        float* mPositionBuffer;
+        /// Forced rendering LOD level, optional
+        int mForcedRenderLevel;
+        /// Array of LOD indexes specifying which LOD is the next one down
+        /// (deals with clustered error metrics which cause LODs to be skipped)
+        int mNextLevelDown[10];
+        /// Gets the index data for this tile based on current settings
+        IndexData* getIndexData(void);
+        /// Internal method for generating stripified terrain indexes
+        IndexData* generateTriStripIndexes(unsigned int stitchFlags);
+        /// Internal method for generating triangle list terrain indexes
+        IndexData* generateTriListIndexes(unsigned int stitchFlags);
+        /** Utility method to generate stitching indexes on the edge of a tile
+        @param neighbor The neighbor direction to stitch
+        @param hiLOD The LOD of this tile
+        @param loLOD The LOD of the neighbor
+        @param omitFirstTri Whether the first tri of the stitch (always clockwise
+        relative to the centre of this tile) is to be omitted because an 
+        adjoining edge is also being stitched
+        @param omitLastTri Whether the last tri of the stitch (always clockwise
+        relative to the centre of this tile) is to be omitted because an 
+        adjoining edge is also being stitched
+        @param pIdx Pointer to a pointer to the index buffer to push the results 
+        into (this pointer will be updated)
+        @returns The number of indexes added
+        */
+        int stitchEdge(Neighbor neighbor, int hiLOD, int loLOD, 
+            bool omitFirstTri, bool omitLastTri, unsigned short** ppIdx);
+
+        /// Create a blank delta buffer for usein morphing
+        HardwareVertexBufferSharedPtr createDeltaBuffer(void);
+
+    };
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreTerrainPrerequisites.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreTerrainPrerequisites.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreTerrainPrerequisites.h	(revision 1092)
@@ -0,0 +1,57 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __TerrainPrerequisites_H__
+#define __TerrainPrerequisites_H__
+
+#include "OgrePrerequisites.h"
+
+//-----------------------------------------------------------------------
+// Forward declarations
+//-----------------------------------------------------------------------
+
+namespace Ogre
+{
+    class TerrainSceneManager;
+    class TerrainPageSource;
+    class TerrainRenderable;
+    class TerrainPage;
+}
+//-----------------------------------------------------------------------
+// Windows Settings
+//-----------------------------------------------------------------------
+
+#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32 
+#   ifdef PLUGIN_TERRAIN_EXPORTS 
+#       define _OgreTerrainExport __declspec(dllexport) 
+#   else 
+#       define _OgreTerrainExport __declspec(dllimport) 
+#   endif 
+#else 
+#   define _OgreTerrainExport 
+#endif 
+
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreTerrainVertexProgram.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreTerrainVertexProgram.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreTerrainVertexProgram.h	(revision 1092)
@@ -0,0 +1,222 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __TERRAINVERTEXPROGRAM_H__
+#define __TERRAINVERTEXPROGRAM_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreCommon.h"
+#include "OgreString.h"
+
+namespace Ogre {
+
+    /*
+    Static class containing the source to vertex programs used to 
+    morph the terrain LOD levels. The programs are generated from 
+    the following Cg:
+    @code 	
+    // No fog morphing terrain
+    void terrain_vp(
+	    float4 position : POSITION,
+	    float2 uv1   	: TEXCOORD0,
+	    float2 uv2	 	: TEXCOORD1,
+	    float delta     : BLENDWEIGHT,
+
+	    out float4 oPosition : POSITION,
+	    out float2 oUv1		 : TEXCOORD0,
+	    out float2 oUv2		 : TEXCOORD1,
+	    out float4 colour    : COLOR,
+	    uniform float4x4 worldViewProj,
+	    uniform float morphFactor
+	    )
+    {
+	    // Apply morph
+	    position.y = position.y + (delta.x * morphFactor);
+	    // world / view / projection
+	    oPosition = mul(worldViewProj, position);
+	    // Main texture coords
+	    oUv1 = uv1;
+	    // Detail texture coords
+	    oUv2 = uv2;
+	    // Full bright (no lighting)
+	    colour = float4(1,1,1,1);
+    }
+
+
+    // Linear fogged morphing terrain
+    void terrain_vp_linear(
+	    float4 position : POSITION,
+	    float2 uv1   	: TEXCOORD0,
+	    float2 uv2	 	: TEXCOORD1,
+	    float delta     : BLENDWEIGHT,
+
+	    out float4 oPosition : POSITION,
+	    out float2 oUv1		 : TEXCOORD0,
+	    out float2 oUv2		 : TEXCOORD1,
+	    out float4 colour    : COLOR,
+	    out float fog		 : FOG,
+	    uniform float4x4 worldViewProj,
+	    uniform float morphFactor
+	    )
+    {
+	    // Apply morph
+	    position.y = position.y + (delta.x * morphFactor);
+	    // world / view / projection
+	    oPosition = mul(worldViewProj, position);
+	    // Main texture coords
+	    oUv1 = uv1;
+	    // Detail texture coords
+	    oUv2 = uv2;
+	    // Full bright (no lighting)
+	    colour = float4(1,1,1,1);
+	    // Fog 
+	    // f = end - camz / end - start
+	    // when start / end has been set, fog value is distance
+	    fog = oPosition.z;
+    }
+
+
+    // Exp fogged morphing terrain
+    void terrain_vp_exp(
+	    float4 position : POSITION,
+	    float2 uv1   	: TEXCOORD0,
+	    float2 uv2	 	: TEXCOORD1,
+	    float delta     : BLENDWEIGHT,
+
+	    out float4 oPosition : POSITION,
+	    out float2 oUv1		 : TEXCOORD0,
+	    out float2 oUv2		 : TEXCOORD1,
+	    out float4 colour    : COLOR,
+	    out float fog		 : FOG,
+	    uniform float4x4 worldViewProj,
+	    uniform float morphFactor,
+	    uniform float fogDensity)
+    {
+	    // Apply morph
+	    position.y = position.y + (delta.x * morphFactor);
+	    // world / view / projection
+	    oPosition = mul(worldViewProj, position);
+	    // Main texture coords
+	    oUv1 = uv1;
+	    // Detail texture coords
+	    oUv2 = uv2;
+	    // Full bright (no lighting)
+	    colour = float4(1,1,1,1);
+	    // Fog 
+	    // f = 1 / e ^ (camz x density)
+	    // note pow = exp(src1 * log(src0)).
+	    fog = 1 / (exp((oPosition.z * fogDensity) * log(2.718281828)));
+    }
+
+
+    // Exp2 fogged morphing terrain
+    void terrain_vp_exp2(
+	    float4 position : POSITION,
+	    float2 uv1   	: TEXCOORD0,
+	    float2 uv2	 	: TEXCOORD1,
+	    float delta     : BLENDWEIGHT,
+
+	    out float4 oPosition : POSITION,
+	    out float2 oUv1		 : TEXCOORD0,
+	    out float2 oUv2		 : TEXCOORD1,
+	    out float4 colour    : COLOR,
+	    out float fog		 : FOG,
+	    uniform float4x4 worldViewProj,
+	    uniform float morphFactor,
+	    uniform float fogDensity)
+    {
+	    // Apply morph
+	    position.y = position.y + (delta.x * morphFactor);
+	    // world / view / projection
+	    oPosition = mul(worldViewProj, position);
+	    // Main texture coords
+	    oUv1 = uv1;
+	    // Detail texture coords
+	    oUv2 = uv2;
+	    // Full bright (no lighting)
+	    colour = float4(1,1,1,1);
+	    // Fog 
+	    // f = 1 / e ^ (camz x density)^2
+	    // note pow = exp(src1 * log(src0)).
+	    float src1 = oPosition.z * 0.002;
+	    fog = 1 / (exp((src1*src1) * log(2.718281828f)));
+    }
+
+	// Shadow receiver vertex program
+    void terrain_shadow_receiver_vp(
+	    float4 position : POSITION,
+	    float2 uv1   	: TEXCOORD0,
+	    float2 uv2	 	: TEXCOORD1,
+	    float delta     : BLENDWEIGHT,
+
+	    out float4 oPosition : POSITION,
+	    out float2 oUv1		 : TEXCOORD0,
+	    out float4 colour    : COLOR,
+	    uniform float4x4 worldViewProj,
+		uniform float4x4 world,
+	    uniform float4x4 textureViewProj,
+	    uniform float morphFactor
+	    )
+    {
+	    // Apply morph
+	    position.y = position.y + (delta.x * morphFactor);
+	    // world / view / projection
+	    oPosition = mul(worldViewProj, position);
+		
+	    // Main texture coords
+		float4 worldpos = mul(world, position);
+	    float4 projuv = mul(textureViewProj, worldpos);
+		oUv1.xy = projuv.xy / projuv.w;
+	    // Full bright (no lighting)
+	    colour = float4(1,1,1,1);
+    }
+
+    @endcode
+    */
+    class TerrainVertexProgram
+    {
+    private:
+        static String mNoFogArbvp1;
+        static String mLinearFogArbvp1;
+        static String mExpFogArbvp1;
+        static String mExp2FogArbvp1;
+		static String mShadowReceiverArbvp1;
+
+        static String mNoFogVs_1_1;
+        static String mLinearFogVs_1_1;
+        static String mExpFogVs_1_1;
+        static String mExp2FogVs_1_1;
+		static String mShadowReceiverVs_1_1;
+
+    public:
+        /// General purpose method to get any of the program sources
+        static const String& getProgramSource(FogMode fogMode, 
+			const String syntax, bool shadowReceiver = false);
+
+
+    };
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreBspNode.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreBspNode.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreBspNode.h	(revision 1092)
@@ -0,0 +1,209 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _BspNode_H__
+#define _BspNode_H__
+
+#include "OgreBspPrerequisites.h"
+#include "OgrePlane.h"
+#include "OgreAxisAlignedBox.h"
+#include "OgreSceneQuery.h"
+
+namespace Ogre {
+
+    /** Encapsulates a node in a BSP tree.
+        A BSP tree represents space partitioned by planes . The space which is
+        partitioned is either the world (in the case of the root node) or the space derived
+        from their parent node. Each node can have elements which are in front or behind it, which are
+        it's children and these elements can either be further subdivided by planes,
+        or they can be undivided spaces or 'leaf nodes' - these are the nodes which actually contain
+        objects and world geometry.The leaves of the tree are the stopping point of any tree walking algorithm,
+        both for rendering and collision detection etc.</p>
+        Ogre chooses not to represent splitting nodes and leaves as separate structures, but to merge the two for simplicity
+        of the walking algorithm. If a node is a leaf, the isLeaf() method returns true and both getFront() and
+        getBack() return null pointers. If the node is a partitioning plane isLeaf() returns false and getFront()
+        and getBack() will return the corresponding BspNode objects.
+    */
+    class BspNode
+    {
+        friend class BspLevel;
+
+    public:
+        /** Constructor, only to be used by BspLevel. */
+        BspNode(BspLevel* owner, bool isLeaf);
+
+        BspNode();
+        ~BspNode();
+
+        /** Returns true if this node is a leaf (i.e. contains geometry) or false if it is a splitting plane.
+            A BspNode can either be a splitting plane (the typical representation of a BSP node) or an undivided
+            region contining geometry (a leaf node). Ogre represents both using the same class for simplicity
+            of tree walking. However it is important that you use this method to determine which type you are dealing
+            with, since certain methods are only supported with one of the subtypes. Details are given in the individual methods.
+            Note that I could have represented splitting / leaf nodes as a class hierarchy but the
+            virtual methods / run-time type identification would have a performance hit, and it would not make the
+            code much (any?) simpler anyway. I think this is a fair trade-off in this case.
+        */
+        bool isLeaf(void) const;
+
+        /** Returns a pointer to a BspNode containing the subspace on the positive side of the splitting plane.
+            This method should only be called on a splitting node, i.e. where isLeaf() returns false. Calling this
+            method on a leaf node will throw an exception.
+        */
+        BspNode* getFront(void) const;
+
+        /** Returns a pointer to a BspNode containing the subspace on the negative side of the splitting plane.
+            This method should only be called on a splitting node, i.e. where isLeaf() returns false. Calling this
+            method on a leaf node will throw an exception.
+        */
+        BspNode* getBack(void) const;
+
+        /** Determines which side of the splitting plane a worldspace point is.
+            This method should only be called on a splitting node, i.e. where isLeaf() returns false. Calling this
+            method on a leaf node will throw an exception.
+        */
+        Plane::Side getSide (const Vector3& point) const;
+
+        /** Gets the next node down in the tree, with the intention of
+            locating the leaf containing the given point.
+            This method should only be called on a splitting node, i.e. where isLeaf() returns false. Calling this
+            method on a leaf node will throw an exception.
+        */
+        BspNode* getNextNode(const Vector3& point) const;
+
+
+        /** Returns details of the plane which is used to subdivide the space of his node's children.
+            This method should only be called on a splitting node, i.e. where isLeaf() returns false. Calling this
+            method on a leaf node will throw an exception.
+        */
+        const Plane& getSplitPlane(void) const;
+
+        /** Returns the axis-aligned box which contains this node if it is a leaf.
+            This method should only be called on a leaf node. It returns a box which can be used in calls like
+            Camera::isVisible to determine if the leaf node is visible in the view.
+        */
+        const AxisAlignedBox& getBoundingBox(void) const;
+
+        /** Returns the number of faces contained in this leaf node.
+            Should only be called on a leaf node.
+        */
+        int getNumFaceGroups(void) const;
+        /** Returns the index to the face group index list for this leaf node.
+            The contents of this buffer is a list of indexes which point to the
+            actual face groups held in a central buffer in the BspLevel class (in
+            actual fact for efficency the indexes themselves are also held in a single
+            buffer in BspLevel too). The reason for this indirection is that the buffer
+            of indexes to face groups is organised in chunks relative to nodes, whilst the
+            main buffer of face groups may not be.
+            Should only be called on a leaf node.
+        */
+        int getFaceGroupStart(void) const;
+
+        /** Determines if the passed in node (must also be a leaf) is visible from this leaf.
+            Must only be called on a leaf node, and the parameter must also be a leaf node. If
+            this method returns true, then the leaf passed in is visible from this leaf.
+            Note that internally this uses the Potentially Visible Set (PVS) which is precalculated
+            and stored with the BSP level.
+        */
+        bool isLeafVisible(const BspNode* leaf) const;
+
+        friend std::ostream& operator<< (std::ostream& o, BspNode& n);
+
+        /// Internal method for telling the node that a movable intersects it
+        void _addMovable(const MovableObject* mov);
+
+        /// Internal method for telling the node that a movable no longer intersects it
+        void _removeMovable(const MovableObject* mov);
+
+        /// Gets the signed distance to the dividing plane
+        Real getDistance(const Vector3& pos) const;
+
+        typedef std::set<const MovableObject*> IntersectingObjectSet;
+
+        struct Brush
+        {
+            std::list<Plane> planes;
+            SceneQuery::WorldFragment fragment; // For query reporting
+        };
+        typedef std::vector<Brush*> NodeBrushList; // Main brush memory held on level
+
+        /** Get the list of solid Brushes for this node.
+        @remarks Only applicable for leaf nodes. 
+        */
+        const NodeBrushList& getSolidBrushes(void) const;
+    protected:
+        BspLevel* mOwner; // Back-reference to containing level
+        bool mIsLeaf;
+
+        // Node-only members
+        /** The plane which splits space in a non-leaf node.
+            Note that nodes do not allocate the memory for other nodes - for simplicity and bulk-allocation
+            of memory the BspLevel is responsible for assigning enough memory for all nodes in one go.
+        */
+        Plane mSplitPlane;
+        /** Pointer to the node in front of this non-leaf node. */
+        BspNode* mFront;
+        /** Pointer to the node behind this non-leaf node. */
+        BspNode* mBack;
+
+        // Leaf-only members
+        /** The cluster number of this leaf.
+            Leaf nodes are assigned to 'clusters' of nodes, which are used to group nodes together for
+            visibility testing. There is a lookup table which is used to determine if one cluster of leaves
+            is visible from another cluster. Whilst it would be possible to expand all this out so that
+            each node had a list of pointers to other visible nodes, this would be very expensive in terms
+            of storage (using the cluster method there is a table which is 1-bit squared per cluster, rounded
+            up to the nearest byte obviously, which uses far less space than 4-bytes per linked node per source
+            node). Of course the limitation here is that you have to each leaf in turn to determine if it is visible
+            rather than just following a list, but since this is only done once per frame this is not such a big
+            overhead.
+        */
+        int mVisCluster;
+
+        /** The axis-aligned box which bounds node if it is a leaf. */
+        AxisAlignedBox mBounds;
+        /** Number of face groups in this node if it is a leaf. */
+        int mNumFaceGroups;
+        /** Index to the part of the main leaf facegroup index buffer(held in BspLevel) for this leaf.
+            This leaf uses mNumFaceGroups from this pointer onwards. From here you use the index
+            in this buffer to look up the actual face.
+            Note that again for simplicity and bulk memory allocation the face
+            group list itself is allocated by the BspLevel for all nodes, and each leaf node is given a section of it to
+            work on. This saves lots of small memory allocations / deallocations which limits memory fragmentation.
+        */
+        int mFaceGroupStart;
+
+        IntersectingObjectSet mMovables;
+
+        NodeBrushList mSolidBrushes;
+    public:
+        const IntersectingObjectSet& getObjects(void) const { return mMovables; }
+
+
+    };
+
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreOctreeCamera.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreOctreeCamera.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreOctreeCamera.h	(revision 1092)
@@ -0,0 +1,85 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+/***************************************************************************
+octreecamera.h  -  description
+-------------------
+begin                : Fri Sep 27 2002
+copyright            : (C) 2002 by Jon Anderson
+email                : janders@users.sf.net
+
+Enhancements 2003 - 2004 (C) The OGRE Team
+***************************************************************************/
+
+#ifndef OCTREECAMERA_H
+#define OCTREECAMERA_H
+
+#include <OgreCamera.h>
+#include <OgreHardwareBufferManager.h>
+#include <OgreSimpleRenderable.h>
+
+/**
+*@author Jon Anderson
+*/
+
+namespace Ogre
+{
+
+class Octree;
+
+
+/** Specialized viewpoint from which an Octree can be rendered.
+@remarks
+This class contains several speciliazations of the Ogre::Camera class. It
+implements the getRenderOperation method inorder to return displayable geometry
+for debuggin purposes. It also implements a visibility function that is more granular
+than the default.
+*/
+
+class OctreeCamera : public Camera
+{
+public:
+
+    /** Visibility types */
+    enum Visibility
+    {
+        NONE,
+        PARTIAL,
+        FULL
+    };
+
+    /* Standard Constructor */
+    OctreeCamera( const String& name, SceneManager* sm );
+    /* Standard destructor */
+    ~OctreeCamera();
+
+    /** Returns the visiblity of the box
+    */
+    OctreeCamera::Visibility getVisibility( const AxisAlignedBox &bound );
+
+};
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreOctreeSceneManager.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreOctreeSceneManager.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreOctreeSceneManager.h	(revision 1092)
@@ -0,0 +1,243 @@
+/***************************************************************************
+octreescenemanager.h  -  description
+-------------------
+begin                : Fri Sep 27 2002
+copyright            : (C) 2002 by Jon Anderson
+email                : janders@users.sf.net
+***************************************************************************/
+
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#ifndef OCTREESCENEMANAGER_H
+#define OCTREESCENEMANAGER_H
+
+#include "OgreSceneManager.h"
+#include "OgreRenderOperation.h"
+#include "OgreSphere.h"
+
+#include <list>
+#include <algorithm>
+
+#include <OgreOctree.h>
+
+
+namespace Ogre
+{
+
+class OctreeNode;
+
+class OctreeCamera;
+class OctreeIntersectionSceneQuery;
+class OctreeRaySceneQuery;
+class OctreeSphereSceneQuery;
+class OctreeAxisAlignedBoxSceneQuery;
+class OctreePlaneBoundedVolumeListSceneQuery;
+
+
+typedef std::list < WireBoundingBox * > BoxList;
+typedef std::list < unsigned long > ColorList;
+//typedef std::list < SceneNode * > SceneNodeList;
+
+
+/** Specialized SceneManager that divides the geometry into an octree in order to faciliate spatial queries.
+@remarks
+For debugging purposes, a special "CullCamera" can be defined.  To use it, call setUseCallCamera( true ),
+and create a camera named "CullCamera".  All culling will be performed using that camera, instead of the viewport
+camera, allowing you to fly around and examine culling.
+*/
+
+class OctreeSceneManager : public SceneManager
+{
+    friend class OctreeIntersectionSceneQuery;
+    friend class OctreeRaySceneQuery;
+    friend class OctreeSphereSceneQuery;
+    friend class OctreeAxisAlignedBoxSceneQuery;
+    friend class OctreePlaneBoundedVolumeListSceneQuery;
+
+public:
+    static int intersect_call;
+    /** Standard Constructor.  Initializes the octree to -500,-500,-500 to 500,500,500 with unlimited depth. */
+    OctreeSceneManager( );
+    /** Standard Constructor */
+    OctreeSceneManager( AxisAlignedBox &box, int max_depth );
+    /** Standard desctructor */
+    ~OctreeSceneManager();
+
+    /** Initializeds the manager to the given box and depth.
+    */
+    void init( AxisAlignedBox &box, int d );
+
+    /** Creates a specialized OctreeNode */
+    virtual	SceneNode * createSceneNode ( void );
+    /** Creates a specialized OctreeNode */
+    virtual SceneNode * createSceneNode ( const String &name );
+    /** Creates a specialized OctreeCamera */
+    virtual Camera * createCamera( const String &name );
+
+    /** Deletes a scene node */
+    virtual void destroySceneNode( const String &name );
+
+
+
+    /** Does nothing more */
+    virtual void _updateSceneGraph( Camera * cam );
+    /** Recurses through the octree determining which nodes are visible. */
+    virtual void _findVisibleObjects ( Camera * cam, bool onlyShadowCasters );
+
+    /** Alerts each unculled object, notifying it that it will be drawn.
+     * Useful for doing calculations only on nodes that will be drawn, prior
+     * to drawing them...
+     */
+    virtual void _alertVisibleObjects( void );
+
+    /** Walks through the octree, adding any visible objects to the render queue.
+    @remarks
+    If any octant in the octree if completely within the the view frustum,
+    all subchildren are automatically added with no visibility tests.
+    */
+    void walkOctree( OctreeCamera *, RenderQueue *, Octree *, bool foundvisible,
+                     bool onlyShadowCasters);
+
+    /** Checks the given OctreeNode, and determines if it needs to be moved
+    * to a different octant.
+    */
+    void _updateOctreeNode( OctreeNode * );
+    /** Removes the given octree node */
+    void _removeOctreeNode( OctreeNode * );
+    /** Adds the Octree Node, starting at the given octree, and recursing at max to the specified depth.
+    */
+    void _addOctreeNode( OctreeNode *, Octree *octree, int depth = 0 );
+
+    /** Recurses the octree, adding any nodes intersecting with the box into the given list.
+    It ignores the exclude scene node.
+    */
+    void findNodesIn( const AxisAlignedBox &box, std::list < SceneNode * > &list, SceneNode *exclude = 0 );
+
+    /** Recurses the octree, adding any nodes intersecting with the sphere into the given list.
+    It ignores the exclude scene node.
+    */
+    void findNodesIn( const Sphere &sphere, std::list < SceneNode * > &list, SceneNode *exclude = 0 );
+
+    /** Recurses the octree, adding any nodes intersecting with the volume into the given list.
+      It ignores the exclude scene node.
+      */
+    void findNodesIn( const PlaneBoundedVolume &volume, std::list < SceneNode * > &list, SceneNode *exclude=0 );
+
+    /** Recurses the octree, adding any nodes intersecting with the ray into the given list.
+      It ignores the exclude scene node.
+      */
+    void findNodesIn( const Ray &ray, std::list < SceneNode * > &list, SceneNode *exclude=0 );
+
+    /** Sets the box visibility flag */
+    void setShowBoxes( bool b )
+    {
+        mShowBoxes = b;
+    };
+
+    /** Sets the cull camera flag */
+    void setUseCullCamera( bool b )
+    {
+        mCullCamera = b;
+    };
+
+    void setLooseOctree( bool b )
+    {
+        mLoose = b;
+    };
+
+
+    /** Resizes the octree to the given size */
+    void resize( const AxisAlignedBox &box );
+
+    /** Sets the given option for the SceneManager
+               @remarks
+        Options are:
+        "Size", AxisAlignedBox *;
+        "CullCamera", bool *;
+        "Depth", int *;
+        "ShowOctree", bool *;
+    */
+
+    virtual bool setOption( const String &, const void * );
+    /** Gets the given option for the Scene Manager.
+        @remarks
+        See setOption
+    */
+    virtual bool getOption( const String &, void * );
+
+    bool getOptionValues( const String & key, StringVector &refValueList );
+    bool getOptionKeys( StringVector &refKeys );
+    /** Overridden from SceneManager */
+    void clearScene(void);
+
+    AxisAlignedBoxSceneQuery* OctreeSceneManager::createAABBQuery(const AxisAlignedBox& box, unsigned long mask);
+    SphereSceneQuery* OctreeSceneManager::createSphereQuery(const Sphere& sphere, unsigned long mask);
+    PlaneBoundedVolumeListSceneQuery* createPlaneBoundedVolumeQuery(const PlaneBoundedVolumeList& volumes, unsigned long mask);
+    RaySceneQuery* createRayQuery(const Ray& ray, unsigned long mask);
+    IntersectionSceneQuery* createIntersectionQuery(unsigned long mask);
+
+
+protected:
+
+
+    NodeList mVisible;
+
+    /// The root octree
+    Octree *mOctree;
+
+    /// list of boxes to be rendered
+    BoxList mBoxes;
+
+    /// number of rendered objs
+    int mNumObjects;
+
+    /// max depth for the tree.
+    int mMaxDepth;
+    /// Size of the octree
+    AxisAlignedBox mBox;
+
+    /// box visibility flag
+    bool mShowBoxes;
+
+    /// cull camera flag
+    bool mCullCamera;
+
+
+    bool mLoose;
+
+    Real mCorners[ 24 ];
+    static unsigned long mColors[ 8 ];
+    static unsigned short mIndexes[ 24 ];
+
+    Matrix4 mScaleFactor;
+
+};
+
+
+}
+
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreBspSceneManager.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreBspSceneManager.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreBspSceneManager.h	(revision 1092)
@@ -0,0 +1,253 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://ogre.sourceforge.net/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __BspSceneManager_H__
+#define __BspSceneManager_H__
+
+
+#include "OgreBspPrerequisites.h"
+#include "OgreSceneManager.h"
+#include "OgreStaticFaceGroup.h"
+#include "OgreRenderOperation.h"
+#include "OgreBspLevel.h"
+#include <set>
+
+
+namespace Ogre {
+
+
+    /** Specialisation of the SceneManager class to deal with indoor scenes
+        based on a BSP tree.
+        This class refines the behaviour of the default SceneManager to manage
+        a scene whose bulk of geometry is made up of an indoor environment which
+        is organised by a Binary Space Partition (BSP) tree. </p>
+        A BSP tree progressively subdivides the space using planes which are the nodes of the tree.
+        At some point we stop subdividing and everything in the remaining space is part of a 'leaf' which
+        contains a number of polygons. Typically we traverse the tree to locate the leaf in which a
+        point in space is (say the camera origin) and work from there. A second structure, the
+        Potentially Visible Set, tells us which other leaves can been seen from this
+        leaf, and we test their bounding boxes against the camera frustum to see which
+        we need to draw. Leaves are also a good place to start for collision detection since
+        they divide the level into discrete areas for testing.</p>
+        This BSP and PVS technique has been made famous by engines such as Quake and Unreal. Ogre
+        provides support for loading Quake3 level files to populate your world through this class,
+        by calling the BspSceneManager::setWorldGeometry. Note that this interface is made
+        available at the top level of the SceneManager class so you don't have to write your code
+        specifically for this class - just call Root::getSceneManager passing a SceneType of ST_INTERIOR
+        and in the current implementation you will get a BspSceneManager silently disguised as a
+        standard SceneManager.
+    */
+    class BspSceneManager : public SceneManager
+    {
+    protected:
+
+        // Pointer to resource manager just for singleton management
+        BspResourceManager* mBspResMgr;
+
+        // World geometry
+        BspLevelPtr mLevel;
+
+        // State variables for rendering WIP
+        // Set of face groups (by index) already included
+        typedef std::set<int> FaceGroupSet;
+        FaceGroupSet mFaceGroupSet;
+        // Material -> face group hashmap
+        typedef std::map<Material*, std::vector<StaticFaceGroup*>, materialLess > MaterialFaceGroupMap;
+        MaterialFaceGroupMap mMatFaceGroupMap;
+
+        RenderOperation mRenderOp;
+
+        // Debugging features
+        bool mShowNodeAABs;
+        RenderOperation mAABGeometry;
+
+        /** Walks the BSP tree looking for the node which the camera
+            is in, and tags any geometry which is in a visible leaf for
+            later processing.
+            @param camera Pointer to the viewpoint.
+            @returns The BSP node the camera was found in, for info.
+        */
+        BspNode* walkTree(Camera* camera, bool onlyShadowCasters);
+        /** Tags geometry in the leaf specified for later rendering. */
+        void processVisibleLeaf(BspNode* leaf, Camera* cam, bool onlyShadowCasters);
+
+        /** Caches a face group for imminent rendering. */
+        unsigned int cacheGeometry(unsigned int* pIndexes, const StaticFaceGroup* faceGroup);
+
+        /** Frees up allocated memory for geometry caches. */
+        void freeMemory(void);
+
+        /** Adds a bounding box to draw if turned on. */
+        void addBoundingBox(const AxisAlignedBox& aab, bool visible);
+
+        /** Renders the static level geometry tagged in walkTree. */
+        void renderStaticGeometry(void);
+
+		/** @copydoc SceneManager::clearScene */
+		void clearScene(void);
+
+
+        typedef std::set<const MovableObject*> MovablesForRendering;
+        MovablesForRendering mMovablesForRendering;
+
+    public:
+        BspSceneManager();
+        ~BspSceneManager();
+
+        /** Specialised from SceneManager to support Quake3 bsp files. */
+        void setWorldGeometry(const String& filename);
+
+        /** Specialised from SceneManager to support Quake3 bsp files. */
+        size_t estimateWorldGeometry(const String& filename);
+        
+        /** Tells the manager whether to draw the axis-aligned boxes that surround
+            nodes in the Bsp tree. For debugging purposes.
+        */
+        void showNodeBoxes(bool show);
+
+        /** Specialised to suggest viewpoints. */
+        ViewPoint getSuggestedViewpoint(bool random = false);
+
+        const BspLevelPtr& getLevel(void) {return mLevel; }
+
+        /** Overriden from SceneManager. */
+        void _findVisibleObjects(Camera* cam, bool onlyShadowCasters);
+
+        /** Overriden from SceneManager. */
+        void _renderVisibleObjects(void);
+
+        /** Creates a specialized BspSceneNode */
+        SceneNode * createSceneNode ( void );
+        /** Creates a specialized BspSceneNode */
+        SceneNode * createSceneNode ( const String &name );
+
+        /** Internal method for tagging BspNodes with objects which intersect them. */
+        void _notifyObjectMoved(const MovableObject* mov, const Vector3& pos);
+		/** Internal method for notifying the level that an object has been detached from a node */
+		void _notifyObjectDetached(const MovableObject* mov);
+
+        /** Creates an AxisAlignedBoxSceneQuery for this scene manager. 
+        @remarks
+            This method creates a new instance of a query object for this scene manager, 
+            for an axis aligned box region. See SceneQuery and AxisAlignedBoxSceneQuery 
+            for full details.
+        @par
+            The instance returned from this method must be destroyed by calling
+            SceneManager::destroyQuery when it is no longer required.
+        @param box Details of the box which describes the region for this query.
+        @param mask The query mask to apply to this query; can be used to filter out
+            certain objects; see SceneQuery for details.
+        */
+        /*
+        virtual AxisAlignedBoxSceneQuery* 
+            createAABBQuery(const AxisAlignedBox& box, unsigned long mask = 0xFFFFFFFF);
+        */
+        /** Creates a SphereSceneQuery for this scene manager. 
+        @remarks
+            This method creates a new instance of a query object for this scene manager, 
+            for a spherical region. See SceneQuery and SphereSceneQuery 
+            for full details.
+        @par
+            The instance returned from this method must be destroyed by calling
+            SceneManager::destroyQuery when it is no longer required.
+        @param sphere Details of the sphere which describes the region for this query.
+        @param mask The query mask to apply to this query; can be used to filter out
+            certain objects; see SceneQuery for details.
+        */
+        /*
+        virtual SphereSceneQuery* 
+            createSphereQuery(const Sphere& sphere, unsigned long mask = 0xFFFFFFFF);
+        */
+        /** Creates a RaySceneQuery for this scene manager. 
+        @remarks
+            This method creates a new instance of a query object for this scene manager, 
+            looking for objects which fall along a ray. See SceneQuery and RaySceneQuery 
+            for full details.
+        @par
+            The instance returned from this method must be destroyed by calling
+            SceneManager::destroyQuery when it is no longer required.
+        @param ray Details of the ray which describes the region for this query.
+        @param mask The query mask to apply to this query; can be used to filter out
+            certain objects; see SceneQuery for details.
+        */
+        virtual RaySceneQuery* 
+            createRayQuery(const Ray& ray, unsigned long mask = 0xFFFFFFFF);
+        /** Creates an IntersectionSceneQuery for this scene manager. 
+        @remarks
+            This method creates a new instance of a query object for locating
+            intersecting objects. See SceneQuery and IntersectionSceneQuery
+            for full details.
+        @par
+            The instance returned from this method must be destroyed by calling
+            SceneManager::destroyQuery when it is no longer required.
+        @param mask The query mask to apply to this query; can be used to filter out
+            certain objects; see SceneQuery for details.
+        */
+        virtual IntersectionSceneQuery* 
+            createIntersectionQuery(unsigned long mask = 0xFFFFFFFF);
+
+    };
+
+    /** BSP specialisation of IntersectionSceneQuery */
+    class BspIntersectionSceneQuery : public DefaultIntersectionSceneQuery
+    {
+    public:
+        BspIntersectionSceneQuery(SceneManager* creator);
+
+        /** See IntersectionSceneQuery. */
+        void execute(IntersectionSceneQueryListener* listener);
+
+    };
+
+    /** BSP specialisation of RaySceneQuery */
+    class BspRaySceneQuery : public DefaultRaySceneQuery
+    {
+    public:
+        BspRaySceneQuery(SceneManager* creator);
+        ~BspRaySceneQuery();
+
+        /** See RaySceneQuery. */
+        void execute(RaySceneQueryListener* listener);
+    protected:
+        /// Set for eliminating duplicates since objects can be in > 1 node
+        std::set<MovableObject*> mObjsThisQuery;
+        /// list of the last single intersection world fragments (derived)
+        std::vector<SceneQuery::WorldFragment*> mSingleIntersections;
+
+        void clearTemporaries(void);
+        /** Internal processing of a single node.
+        @returns true if we should continue tracing, false otherwise
+        */
+        bool processNode(const BspNode* node, const Ray& tracingRay, RaySceneQueryListener* listener,
+            Real maxDistance = Math::POS_INFINITY, Real traceDistance = 0.0f);
+        /** Internal processing of a single leaf.
+        @returns true if we should continue tracing, false otherwise
+        */
+        bool processLeaf(const BspNode* node, const Ray& tracingRay, RaySceneQueryListener* listener,
+            Real maxDistance = Math::POS_INFINITY, Real traceDistance = 0.0f);
+
+    };
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreTerrainPage.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreTerrainPage.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreTerrainPage.h	(revision 1092)
@@ -0,0 +1,90 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __TerrainPage_H__
+#define __TerrainPage_H__
+
+#include "OgreTerrainPrerequisites.h"
+#include "OgreRenderQueue.h"
+
+namespace Ogre {
+
+    /** Groups a number of TerrainRenderables (tiles) into a page, which is
+        the unit of loading / unloading.
+    @remarks
+        Note that this class, whilst holding onto TerrainRenderable instances, 
+        does not actually process or initialise them itself - this is 
+        intentional so the TerrainPageSource which is providing the tiles
+        is able to load and prepare each renderable incrementally if required, 
+        thus avoiding any 'single hit' load methods for the page.
+    @par
+        All this class does do is pre-create a 2D vector of 'slots' in which 
+        to place the TerrainRenderable pointers, which it does on 
+        construction. Note that this structure is public to allow completely
+        free access to users of this class.
+    */
+    class _OgreTerrainExport TerrainPage
+    {
+    public:
+        typedef std::vector < TerrainRenderable * > TerrainRow;
+        typedef std::vector < TerrainRow > Terrain2D;
+        
+        /// 2-dimensional vector of tiles, pre-allocated to the correct size
+        Terrain2D tiles;
+        /// The number of tiles across a page
+        unsigned short tilesPerPage;
+        /// The scene node to which all the tiles for this page are attached
+        SceneNode* pageSceneNode;
+
+        /** The main constructor. 
+        @param numTiles The number of terrain tiles (TerrainRenderable)
+            across (and down) a page
+        */
+        TerrainPage(unsigned short numTiles);
+
+        /** Destructor, will organise the deletion of pages
+        */
+        virtual ~TerrainPage();
+        /** After TerrainRenderables have been populated, this method
+            adds the neighbour links. 
+        @remarks
+            Should be called before adding the page to the scene manager.
+        */
+        void linkNeighbours(void);
+
+        /** Returns the TerrainRenderable that contains the given pt.
+        If no tile exists at the point, it returns 0;
+        */
+        TerrainRenderable * getTerrainTile( const Vector3 & pt );
+
+		/** Sets the render queue group which the tiles should be rendered in. */
+		void setRenderQueue(RenderQueueGroupID qid);
+
+
+    };
+
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreBspSceneNode.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreBspSceneNode.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreBspSceneNode.h	(revision 1092)
@@ -0,0 +1,76 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __BSPSCENENODE_H__
+#define __BSPSCENENODE_H__
+
+#include "OgreBspPrerequisites.h"
+#include "OgreSceneNode.h"
+
+namespace Ogre {
+
+    /** Specialisation of SceneNode for the BspSceneManager.
+    @remarks
+        This specialisation of SceneNode is to enable information about the
+        leaf node in which any attached objects are held is stored for
+        use in the visibility determination. 
+    @par
+        Do not confuse this class with BspNode, which reflects nodes in the
+        BSP tree itself. This class is just like a regular SceneNode, except that
+        it should be locating BspNode leaf elements which objects should be included
+        in. Note that because objects are movable, and thus may very well be overlapping
+        the boundaries of more than one leaf, that it is possible that an object attached
+        to one BspSceneNode may actually be associated with more than one BspNode.
+    */
+    class BspSceneNode : public SceneNode
+    {
+	protected:
+		/// Overridden from SceneNode
+		void setInSceneGraph(bool inGraph);		
+    public:
+        BspSceneNode(SceneManager* creator) : SceneNode(creator) {}
+        BspSceneNode(SceneManager* creator, const String& name) 
+            : SceneNode(creator, name) {}
+        /// Overridden from Node
+        void _update(bool updateChildren, bool parentHasChanged);
+        /** Detaches the indexed object from this scene node.
+        @remarks
+            Detaches by index, see the alternate version to detach by name. Object indexes
+            may change as other objects are added / removed.
+        */
+        MovableObject* detachObject(unsigned short index);
+
+        /** Detaches the named object from this node and returns a pointer to it. */
+        MovableObject* detachObject(const String& name);
+
+        /** Detaches all objects attached to this node.
+        */
+        void detachAllObjects(void);
+
+
+    };
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreHeightmapTerrainPageSource.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreHeightmapTerrainPageSource.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreHeightmapTerrainPageSource.h	(revision 1092)
@@ -0,0 +1,78 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __HeightmapTerrainPageSource_H__
+#define __HeightmapTerrainPageSource_H__
+
+#include "OgreTerrainPrerequisites.h"
+#include "OgreTerrainPageSource.h"
+#include "OgreImage.h"
+
+namespace Ogre {
+
+    /** Specialisation of the TerrainPageSource class to provide tiles loaded
+        from a 2D greyscale image.
+    @remarks
+        This is a simple tile provider that does not support paging; it is
+        assumed that the entire heightmap is loaded as one page.
+    */
+    class _OgreTerrainExport HeightmapTerrainPageSource : public TerrainPageSource
+    {
+    protected:
+        /// Is this input RAW?
+        bool mIsRaw;
+        /// Should we flip terrain vertically?
+        bool mFlipTerrain;
+        /// Image containing the source heightmap if loaded from non-RAW
+        Image mImage;
+        /// Arbitrary data loaded from RAW
+        MemoryDataStreamPtr mRawData;
+        /// The (single) terrain page this source will provide
+        TerrainPage* mPage;
+        /// Source file name
+        String mSource;
+        /// Manual size if source is RAW
+        size_t mRawSize;
+        /// Manual bpp if source is RAW
+        uchar mRawBpp;
+        
+        /// Load a heightmap
+        void loadHeightmap(void);
+    public:
+        HeightmapTerrainPageSource();
+        ~HeightmapTerrainPageSource();
+        /// @see TerrainPageSource
+        void shutdown(void);
+        /// @see TerrainPageSource
+        void requestPage(ushort x, ushort y);
+        /// @see TerrainPageSource
+        void expirePage(ushort x, ushort y);
+        /// @see TerrainPageSource
+        void initialise(TerrainSceneManager* tsm, 
+            ushort tileSize, ushort pageSize, bool asyncLoading, 
+            TerrainPageSourceOptionList& optionList);
+    };
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreBspPrerequisites.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreBspPrerequisites.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreBspPrerequisites.h	(revision 1092)
@@ -0,0 +1,46 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __BspPrerequisites_H__
+#define __BspPrerequisites_H__
+
+#include "OgrePrerequisites.h"
+
+namespace Ogre {
+
+    // Predeclare classes
+
+    class BspLevel;
+    class BspNode;
+    class BspResourceManager;
+    class BspSceneManager;
+    class Quake3Level;
+    class Quake3ShaderManager;
+    class Quake3Shader;
+
+
+}
+
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreQuake3ShaderManager.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreQuake3ShaderManager.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/opt/OgreQuake3ShaderManager.h	(revision 1092)
@@ -0,0 +1,122 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __QUAKE3SHADERMANAGER_H__
+#define __QUAKE3SHADERMANAGER_H__
+
+#include "OgreBspPrerequisites.h"
+#include "OgreSingleton.h"
+#include "OgreResourceManager.h"
+#include "OgreQuake3Shader.h"
+#include "OgreBlendMode.h"
+
+namespace Ogre {
+
+
+    /** Class for managing Quake3 custom shaders.
+        Quake3 uses .shader files to define custom shaders, or Materials in Ogre-speak.
+        When a surface texture is mentioned in a level file, it includes no file extension
+        meaning that it can either be a standard texture image (+lightmap) if there is only a .jpg or .tga
+        file, or it may refer to a custom shader if a shader with that name is included in one of the .shader
+        files in the scripts/ folder. Because there are multiple shaders per file you have to parse all the
+        .shader files available to know if there is a custom shader available. This class is designed to parse
+        all the .shader files available and save their settings for future use. </p>
+        I choose not to set up Material instances for shaders found since they may or may not be used by a level,
+        so it would be very wasteful to set up Materials since they load texture images for each layer (apart from the
+        lightmap). Once the usage of a shader is confirmed, a full Material instance can be set up from it.</p>
+        Because this is a subclass of ScriptLoader, any files mentioned will be searched for in any path or
+        archive added to the ResourceGroupManager::WORLD_GROUP_NAME group. See ResourceGroupManager for details.
+    */
+    class Quake3ShaderManager : public ScriptLoader, public Singleton<Quake3ShaderManager>
+    {
+    protected:
+        void parseNewShaderPass(DataStreamPtr& stream, Quake3Shader* pShader);
+        void parseShaderAttrib( const String& line, Quake3Shader* pShader);
+        void parseShaderPassAttrib( const String& line, Quake3Shader* pShader, Quake3Shader::Pass* pPass);
+        SceneBlendFactor convertBlendFunc( const String& q3func);
+
+        typedef std::map<String, Quake3Shader*> Quake3ShaderMap;
+        Quake3ShaderMap mShaderMap;
+        StringVector mScriptPatterns;
+
+
+    public:
+        Quake3ShaderManager();
+        virtual ~Quake3ShaderManager();
+
+        /** @copydoc ScriptLoader::getScriptPatterns */
+        const StringVector& getScriptPatterns(void) const;
+
+        /** @copydoc ScriptLoader::parseScript */
+        void parseScript(DataStreamPtr& stream, const String& groupName);
+
+        /** @copydoc ScriptLoader::parseScript */
+        Real getLoadingOrder(void) const;
+
+        /** Create implementation. */
+        Quake3Shader* create(const String& name);
+        /** Clear all the current shaders */
+        void clear(void);
+        /** Retrieve a Quake3Shader by name */
+        Quake3Shader* getByName(const String& name);
+
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static Quake3ShaderManager& getSingleton(void);
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static Quake3ShaderManager* getSingletonPtr(void);
+
+
+    };
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreVertexIndexData.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreVertexIndexData.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreVertexIndexData.h	(revision 1092)
@@ -0,0 +1,173 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __VertexIndexData_H__
+#define __VertexIndexData_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreHardwareVertexBuffer.h"
+#include "OgreHardwareIndexBuffer.h"
+
+namespace Ogre {
+	
+	/// Define a list of usage flags
+	typedef std::vector<HardwareBuffer::Usage> BufferUsageList;
+
+
+	/** Summary class collecting together vertex source information. */
+	class _OgreExport VertexData
+	{
+    private:
+        /// Protected copy constructor, to prevent misuse
+        VertexData(const VertexData& rhs); /* do nothing, should not use */
+        /// Protected operator=, to prevent misuse
+        VertexData& operator=(const VertexData& rhs); /* do not use */
+    public:
+        VertexData();
+        ~VertexData();
+
+		/** Declaration of the vertex to be used in this operation. 
+		@remarks Note that this is created for you on construction.
+		*/
+		VertexDeclaration* vertexDeclaration;
+		/** The vertex buffer bindings to be used. 
+		@remarks Note that this is created for you on construction.
+		*/
+		VertexBufferBinding* vertexBufferBinding;
+		/// The base vertex index to start from
+		size_t vertexStart;
+		/// The number of vertices used in this operation
+		size_t vertexCount;
+
+		/** Clones this vertex data, potentially including replicating any vertex buffers.
+		@remarks The caller is expected to delete the returned pointer when ready
+		*/
+		VertexData* clone(bool copyData = true) const;
+
+        /** Modifies the vertex data to be suitable for use for rendering shadow geometry.
+        @remarks
+            Preparing vertex data to generate a shadow volume involves firstly ensuring that the 
+            vertex buffer containing the positions is a standalone vertex buffer,
+            with no other components in it. This method will therefore break apart any existing
+            vertex buffers if position is sharing a vertex buffer. 
+            Secondly, it will double the size of this vertex buffer so that there are 2 copies of 
+            the position data for the mesh. The first half is used for the original, and the second 
+            half is used for the 'extruded' version. The vertex count used to render will remain 
+            the same though, so as not to add any overhead to regular rendering of the object.
+            Both copies of the position are required in one buffer because shadow volumes stretch 
+            from the original mesh to the extruded version. 
+        @par
+            It's important to appreciate that this method can fundamentally change the structure of your
+            vertex buffers, although in reality they will be new buffers. As it happens, if other 
+            objects are using the original buffers then they will be unaffected because the reference
+            counting will keep them intact. However, if you have made any assumptions about the 
+            structure of the vertex data in the buffers of this object, you may have to rethink them.
+        */
+        void prepareForShadowVolume(void);
+
+        /** Additional shadow volume vertex buffer storage. 
+        @remarks
+            This additional buffer is only used where we have prepared this VertexData for
+            use in shadow volume contruction, and where the current render system supports
+            vertex programs. This buffer contains the 'w' vertex position component which will
+            be used by that program to differentiate between extruded and non-extruded vertices.
+            This 'w' component cannot be included in the original position buffer because
+            DirectX does not allow 4-component positions in the fixed-function pipeline, and the original
+            position buffer must still be usable for fixed-function rendering.
+        @par    
+            Note that we don't store any vertex declaration or vertex buffer binding here becuase this
+            can be reused in the shadow algorithm.
+        */
+        HardwareVertexBufferSharedPtr hardwareShadowVolWBuffer;
+
+
+		/** Reorganises the data in the vertex buffers according to the 
+			new vertex declaration passed in. Note that new vertex buffers
+			are created and written to, so if the buffers being referenced 
+			by this vertex data object are also used by others, then the 
+			original buffers will not be damaged by this operation.
+			Once this operation has completed, the new declaration 
+			passed in will overwrite the current one.
+		@param newDeclaration The vertex declaration which will be used
+			for the reorganised buffer state. Note that the new delcaration
+			must not include any elements which do not already exist in the 
+			current declaration; you can drop elements by 
+			excluding them from the declaration if you wish, however.
+		@param bufferUsages Vector of usage flags which indicate the usage options
+			for each new vertex buffer created. The indexes of the entries must correspond
+			to the buffer binding values referenced in the declaration.
+		*/
+		void reorganiseBuffers(VertexDeclaration* newDeclaration, const BufferUsageList& bufferUsage);
+
+		/** Reorganises the data in the vertex buffers according to the 
+			new vertex declaration passed in. Note that new vertex buffers
+			are created and written to, so if the buffers being referenced 
+			by this vertex data object are also used by others, then the 
+			original buffers will not be damaged by this operation.
+			Once this operation has completed, the new declaration 
+			passed in will overwrite the current one.
+            This version of the method derives the buffer usages from the existing
+            buffers, by using the 'most flexible' usage from the equivalent sources.
+		@param newDeclaration The vertex declaration which will be used
+			for the reorganised buffer state. Note that the new delcaration
+			must not include any elements which do not already exist in the 
+			current declaration; you can drop elements by 
+			excluding them from the declaration if you wish, however.
+		*/
+		void reorganiseBuffers(VertexDeclaration* newDeclaration);
+
+
+
+	};
+
+	/** Summary class collecting together index data source information. */
+	class _OgreExport IndexData 
+	{
+    protected:
+        /// Protected copy constructor, to prevent misuse
+        IndexData(const IndexData& rhs); /* do nothing, should not use */
+        /// Protected operator=, to prevent misuse
+        IndexData& operator=(const IndexData& rhs); /* do not use */
+    public:
+        IndexData();
+        ~IndexData();
+		/// pointer to the HardwareIndexBuffer to use, must be specified if useIndexes = true
+		HardwareIndexBufferSharedPtr indexBuffer;
+
+		/// index in the buffer to start from for this operation
+		size_t indexStart;
+
+		/// The number of indexes to use from the buffer
+		size_t indexCount;
+
+		/** Clones this index data, potentially including replicating the index buffer.
+		@remarks The caller is expected to delete the returned pointer when finished
+		*/
+		IndexData* clone(bool copyData = true) const;
+	};
+
+
+}
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreResourceGroupManager.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreResourceGroupManager.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreResourceGroupManager.h	(revision 1092)
@@ -0,0 +1,718 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _ResourceGroupManager_H__
+#define _ResourceGroupManager_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreSingleton.h"
+#include "OgreCommon.h"
+#include "OgreDataStream.h"
+#include "OgreResource.h"
+#include "OgreArchive.h"
+
+namespace Ogre {
+
+    /** This abstract class defines an interface which is called back during
+        resource group loading to indicate the progress of the load. 
+	@remarks
+		Resource group loading is in 2 phases - creating resources from 
+		declarations (which includes parsing scripts), and loading
+		resources. Note that you don't necessarily have to have both; it
+		is quite possible to just parse all the scripts for a group (see
+		ResourceGroupManager::initialiseResourceGroup, but not to 
+		load the resource group. 
+		The sequence of events is (* signifies a repeating item):
+		<ul>
+		<li>resourceGroupScriptingStarted</li>
+		<li>scriptParseStarted (*)</li>
+        <li>scriptParseEnded (*)</li>
+		<li>resourceGroupScriptingEnded</li>
+		<li>resourceGroupLoadStarted</li>
+		<li>resourceLoadStarted (*)</li>
+        <li>resourceLoadEnded (*)</li>
+        <li>worldGeometryStageStarted (*)</li>
+        <li>worldGeometryStageEnded (*)</li>
+		<li>resourceGroupLoadEnded</li>
+		</ul>
+    @note
+        If OGRE_THREAD_SUPPORT is 1, this class is thread-safe.
+
+    */
+    class _OgreExport ResourceGroupListener
+    {
+    public:
+        virtual ~ResourceGroupListener() {}
+
+		/** This event is fired when a resource group begins parsing scripts.
+		@param groupName The name of the group 
+		@param scriptCount The number of scripts which will be parsed
+		*/
+		virtual void resourceGroupScriptingStarted(const String& groupName, size_t scriptCount) = 0;
+		/** This event is fired when a script is about to be parsed.
+		@param scriptName Name of the to be parsed
+		*/
+		virtual void scriptParseStarted(const String& scriptName) = 0;
+		/** This event is fired when the script has been fully parsed.
+		*/
+		virtual void scriptParseEnded(void) = 0;
+		/** This event is fired when a resource group finished parsing scripts. */
+		virtual void resourceGroupScriptingEnded(const String& groupName) = 0;
+
+		/** This event is fired  when a resource group begins loading.
+		@param groupName The name of the group being loaded
+		@param resourceCount The number of resources which will be loaded, including
+            a number of stages required to load any linked world geometry
+		*/
+		virtual void resourceGroupLoadStarted(const String& groupName, size_t resourceCount) = 0;
+		/** This event is fired when a declared resource is about to be loaded. 
+		@param resource Weak reference to the resource loaded.
+		*/
+		virtual void resourceLoadStarted(const ResourcePtr& resource) = 0;
+        /** This event is fired when the resource has been loaded. 
+        */
+        virtual void resourceLoadEnded(void) = 0;
+        /** This event is fired when a stage of loading linked world geometry 
+            is about to start. The number of stages required will have been 
+            included in the resourceCount passed in resourceGroupLoadStarted.
+        @param description Text description of what was just loaded
+        */
+        virtual void worldGeometryStageStarted(const String& description) = 0;
+        /** This event is fired when a stage of loading linked world geometry 
+            has been completed. The number of stages required will have been 
+            included in the resourceCount passed in resourceGroupLoadStarted.
+        @param description Text description of what was just loaded
+        */
+        virtual void worldGeometryStageEnded(void) = 0;
+
+		/** This event is fired when a resource group finished loading. */
+		virtual void resourceGroupLoadEnded(const String& groupName) = 0;
+
+    };
+    /** This singleton class manages the list of resource groups, and notifying
+        the various resource managers of their obligations to load / unload
+        resources in a group. It also provides facilities to monitor resource
+        loading per group (to do progress bars etc), provided the resources 
+        that are required are pre-registered.
+    @par
+        Defining new resource groups,  and declaring the resources you intend to
+        use in advance is optional, however it is a very useful feature. In addition, 
+		if a ResourceManager supports the definition of resources through scripts, 
+		then this is the class which drives the locating of the scripts and telling
+		the ResourceManager to parse them. 
+	@par
+		There are several states that a resource can be in (the concept, not the
+		object instance in this case):
+		<ol>
+		<li><b>Undefined</b>. Nobody knows about this resource yet. It might be
+		in the filesystem, but Ogre is oblivious to it at the moment - there 
+		is no Resource instance. This might be because it's never been declared
+		(either in a script, or using ResourceGroupManager::declareResource), or
+		it may have previously been a valid Resource instance but has been 
+		removed, either individually through ResourceManager::remove or as a group
+		through ResourceGroupManager::clearResourceGroup.</li>
+		<li><b>Declared</b>. Ogre has some forewarning of this resource, either
+		through calling ResourceGroupManager::declareResource, or by declaring
+		the resource in a script file which is on one of the resource locations
+		which has been defined for a group. There is still no instance of Resource,
+		but Ogre will know to create this resource when 
+		ResourceGroupManager::initialiseResourceGroup is called (which is automatic
+		if you declare the resource group before Root::initialise).</li>
+		<li><b>Unloaded</b>. There is now a Resource instance for this resource, 
+		although it is not loaded. This means that code which looks for this
+		named resource will find it, but the Resource is not using a lot of memory
+		because it is in an unloaded state. A Resource can get into this state
+		by having just been created by ResourceGroupManager::initialiseResourceGroup 
+		(either from a script, or from a call to declareResource), by 
+		being created directly from code (ResourceManager::create), or it may 
+		have previously been loaded and has been unloaded, either individually
+		through Resource::unload, or as a group through ResourceGroupManager::unloadResourceGroup.</li>
+		<li><b>Loaded</b>The Resource instance is fully loaded. This may have
+		happened implicitly because something used it, or it may have been 
+		loaded as part of a group.</li>
+		</ol>
+		@see ResourceGroupManager::declareResource
+		@see ResourceGroupManager::initialiseResourceGroup
+		@see ResourceGroupManager::loadResourceGroup
+		@see ResourceGroupManager::unloadResourceGroup
+		@see ResourceGroupManager::clearResourceGroup
+    */
+    class _OgreExport ResourceGroupManager : public Singleton<ResourceGroupManager>
+    {
+    public:
+		OGRE_AUTO_MUTEX // public to allow external locking
+		/// Default resource group name
+		static String DEFAULT_RESOURCE_GROUP_NAME;
+		/// Bootstrap resource group name (min OGRE resources)
+		static String BOOTSTRAP_RESOURCE_GROUP_NAME;
+        /// Nested struct defining a resource declaration
+        struct ResourceDeclaration
+        {
+            String resourceName;
+            String resourceType;
+			NameValuePairList parameters;
+        };
+        /// List of resource declarations
+        typedef std::list<ResourceDeclaration> ResourceDeclarationList;
+    protected:
+		/// Map of resource types (strings) to ResourceManagers, used to notify them to load / unload group contents
+		typedef std::map<String, ResourceManager*> ResourceManagerMap;
+        ResourceManagerMap mResourceManagerMap;
+
+		/// Map of loading order (Real) to ScriptLoader, used to order script parsing
+		typedef std::multimap<Real, ScriptLoader*> ScriptLoaderOrderMap;
+		ScriptLoaderOrderMap mScriptLoaderOrderMap;
+
+		typedef std::vector<ResourceGroupListener*> ResourceGroupListenerList;
+        ResourceGroupListenerList mResourceGroupListenerList;
+
+        /// Resource index entry, resourcename->location 
+        typedef std::map<String, Archive*> ResourceLocationIndex;
+
+		/// Resource location entry
+		struct ResourceLocation
+		{
+			/// Pointer to the archive which is the destination
+			Archive* archive;
+			/// Whether this location was added recursively
+			bool recursive;
+		};
+		/// List of possible file locations
+		typedef std::list<ResourceLocation*> LocationList;
+		/// List of resources which can be loaded / unloaded
+		typedef std::list<ResourcePtr> LoadUnloadResourceList;
+		/// Resource group entry
+		struct ResourceGroup
+		{
+			OGRE_AUTO_MUTEX
+			/// Group name
+			String name;
+			/// Whether group has been initialised
+			bool initialised;
+			/// List of possible locations to search
+			LocationList locationList;
+			/// Index of resource names to locations, built for speedy access (case sensitive archives)
+			ResourceLocationIndex resourceIndexCaseSensitive;
+            /// Index of resource names to locations, built for speedy access (case insensitive archives)
+            ResourceLocationIndex resourceIndexCaseInsensitive;
+			/// Pre-declared resources, ready to be created
+			ResourceDeclarationList resourceDeclarations;
+			/// Created resources which are ready to be loaded / unloaded
+			// Group by loading order of the type (defined by ResourceManager)
+			// (e.g. skeletons and materials before meshes)
+			typedef std::map<Real, LoadUnloadResourceList*> LoadResourceOrderMap;
+			LoadResourceOrderMap loadResourceOrderMap;
+            /// Linked world geometry, as passed to setWorldGeometry
+            String worldGeometry;
+            /// Scene manager to use with linked world geometry
+            SceneManager* worldGeometrySceneManager;
+		};
+        /// Map from resource group names to groups
+        typedef std::map<String, ResourceGroup*> ResourceGroupMap;
+        ResourceGroupMap mResourceGroupMap;
+
+        /// Group name for world resources
+        String mWorldGroupName;
+
+		/** Parses all the available scripts found in the resource locations
+		for the given group, for all ResourceManagers.
+		@remarks
+			Called as part of initialiseResourceGroup
+		*/
+		void parseResourceGroupScripts(ResourceGroup* grp);
+		/** Create all the pre-declared resources.
+		@remarks
+			Called as part of initialiseResourceGroup
+		*/
+		void createDeclaredResources(ResourceGroup* grp);
+		/** Adds a created resource to a group. */
+		void addCreatedResource(ResourcePtr& res, ResourceGroup& group);
+		/** Get resource group */
+		ResourceGroup* getResourceGroup(const String& name);
+		/** Drops contents of a group, leave group there, notify ResourceManagers. */
+		void dropGroupContents(ResourceGroup* grp);
+		/** Delete a group for shutdown - don't notify ResourceManagers. */
+		void deleteGroup(ResourceGroup* grp);
+		/// Internal event firing method
+		void fireResourceGroupScriptingStarted(const String& groupName, size_t scriptCount);
+		/// Internal event firing method
+		void fireScriptStarted(const String& scriptName);
+        /// Internal event firing method
+        void fireScriptEnded(void);
+		/// Internal event firing method
+		void fireResourceGroupScriptingEnded(const String& groupName);
+		/// Internal event firing method
+		void fireResourceGroupLoadStarted(const String& groupName, size_t resourceCount);
+        /// Internal event firing method
+        void fireResourceStarted(const ResourcePtr& resource);
+		/// Internal event firing method
+		void fireResourceEnded(void);
+		/// Internal event firing method
+		void fireResourceGroupLoadEnded(const String& groupName);
+
+
+
+		/// Stored current group - optimisation for when bulk loading a group
+		ResourceGroup* mCurrentGroup;
+    public:
+        ResourceGroupManager();
+        virtual ~ResourceGroupManager();
+
+        /** Create a resource group.
+        @remarks
+            A resource group allows you to define a set of resources that can 
+            be loaded / unloaded as a unit. For example, it might be all the 
+            resources used for the level of a game. There is always one predefined
+            resource group called ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, 
+			which is typically used to hold all resources which do not need to 
+			be unloaded until shutdown. You can create additional ones so that 
+			you can control the life of your resources in whichever way you wish.
+        @par
+            Once you have defined a resource group, resources which will be loaded
+			as part of it are defined in one of 3 ways:
+			<ol>
+			<li>Manually through declareResource(); this is useful for scripted
+				declarations since it is entirely generalised, and does not 
+				create Resource instances right away</li>
+			<li>Through the use of scripts; some ResourceManager subtypes have
+				script formats (e.g. .material, .overlay) which can be used
+				to declare resources</li>
+			<li>By calling ResourceManager::create to create a resource manually.
+			This resource will go on the list for it's group and will be loaded
+			and unloaded with that group</li>
+			</ol>
+			You must remember to call initialiseResourceGroup if you intend to use
+			the first 2 types.
+        @param name The name to give the resource group.
+        */
+        void createResourceGroup(const String& name);
+
+
+        /** Initialises a resource group.
+		@remarks
+			After creating a resource group, adding some resource locations, and
+			perhaps pre-declaring some resources using declareResource(), but 
+			before you need to use the resources in the group, you 
+			should call this method to initialise the group. By calling this,
+			you are triggering the following processes:
+			<ol>
+			<li>Scripts for all resource types which support scripting are
+				parsed from the resource locations, and resources within them are
+				created (but not loaded yet).</li>
+			<li>Creates all the resources which have just pre-declared using
+			declareResource (again, these are not loaded yet)</li>
+			</ol>
+			So what this essentially does is create a bunch of unloaded Resource entries
+			in the respective ResourceManagers based on scripts, and resources
+			you've pre-declared. That means that code looking for these resources
+			will find them, but they won't be taking up much memory yet, until
+			they are either used, or they are loaded in bulk using loadResourceGroup.
+			Loading the resource group in bulk is entirely optional, but has the 
+			advantage of coming with progress reporting as resources are loaded.
+		@par
+			Failure to call this method means that loadResourceGroup will do 
+			nothing, and any resources you define in scripts will not be found.
+			Similarly, once you have called this method you won't be able to
+			pick up any new scripts or pre-declared resources, unless you
+			call clearResourceGroup, set up declared resources, and call this
+			method again.
+		@note 
+			When you call Root::initialise, all resource groups that have already been
+			created are automatically initialised too. Therefore you do not need to 
+			call this method for groups you define and set up before you call 
+			Root::initialise. However, since one of the most useful features of 
+			resource groups is to set them up after the main system initialisation
+			has occurred (e.g. a group per game level), you must remember to call this
+			method for the groups you create after this.
+
+		@param name The name of the resource group to initialise
+		*/
+		void initialiseResourceGroup(const String& name);
+
+		/** Initialise all resource groups which are yet to be initialised.
+		@see ResourceGroupManager::intialiseResourceGroup
+		*/
+		void initialiseAllResourceGroups(void);
+
+		/** Loads a resource group.
+        @remarks
+			Loads any created resources which are part of the named group.
+			Note that resources must have already been created by calling
+			ResourceManager::create, or declared using declareResource() or
+			in a script (such as .material and .overlay). The latter requires
+			that initialiseResourceGroup has been called. 
+		
+			When this method is called, this class will callback any ResourceGroupListeners
+			which have been registered to update them on progress. 
+        @param name The name to of the resource group to load.
+		@param loadMainResources If true, loads normal resources associated 
+			with the group (you might want to set this to false if you wanted
+			to just load world geometry in bulk)
+		@param loadWorldGeom If true, loads any linked world geometry
+			@see ResourceGroupManager::linkWorldGeometryToResourceGroup
+        */
+        void loadResourceGroup(const String& name, bool loadMainResources = true, 
+			bool loadWorldGeom = true);
+
+        /** Unloads a resource group.
+        @remarks
+            This method unloads all the resources that have been declared as
+            being part of the named resource group. Note that these resources
+            will still exist in their respective ResourceManager classes, but
+            will be in an unloaded state. If you want to remove them entirely,
+            you should use clearResourceGroup or destroyResourceGroup.
+        @param name The name to of the resource group to unload.
+        */
+        void unloadResourceGroup(const String& name);
+
+		/** Clears a resource group. 
+		@remarks
+			This method unloads all resources in the group, but in addition it
+			removes all those resources from their ResourceManagers, and then 
+			clears all the members from the list. That means after calling this
+			method, there are no resources declared as part of the named group
+			any more. Resource locations still persist though.
+        @param name The name to of the resource group to clear.
+		*/
+		void clearResourceGroup(const String& name);
+        
+        /** Destroys a resource group, clearing it first, destroying the resources
+            which are part of it, and then removing it from
+            the list of resource groups. 
+        @param name The name of the resource group to destroy.
+        */
+        void destroyResourceGroup(const String& name);
+
+
+        /** Method to add a resource location to for a given resource group. 
+        @remarks
+            Resource locations are places which are searched to load resource files.
+            When you choose to load a file, or to search for valid files to load, 
+            the resource locations are used.
+        @param name The name of the resource location; probably a directory, zip file, URL etc.
+        @param locType The codename for the resource type, which must correspond to the 
+            Archive factory which is providing the implementation.
+        @param resGroup The name of the resource group for which this location is
+            to apply. ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME is the 
+			default group which always exists, and can
+            be used for resources which are unlikely to be unloaded until application
+            shutdown. Otherwise it must be the name of a group; if it
+            has not already been created with createResourceGroup then it is created
+            automatically.
+        @param recursive Whether subdirectories will be searched for files when using 
+			a pattern match (such as *.material), and whether subdirectories will be
+			indexed. This can slow down initial loading of the archive and searches.
+			When opening a resource you still need to use the fully qualified name, 
+			this allows duplicate names in alternate paths.
+        */
+        void addResourceLocation(const String& name, const String& locType, 
+            const String& resGroup = DEFAULT_RESOURCE_GROUP_NAME, bool recursive = false);
+        /** Removes a resource location from the search path. */ 
+        void removeResourceLocation(const String& name, 
+			const String& resGroup = DEFAULT_RESOURCE_GROUP_NAME);
+
+        /** Declares a resource to be a part of a resource group, allowing you 
+            to load and unload it as part of the group.
+        @remarks
+            By declaring resources before you attempt to use them, you can 
+            more easily control the loading and unloading of those resources
+            by their group. Declaring them also allows them to be enumerated, 
+            which means events can be raised to indicate the loading progress
+            (@see ResourceGroupListener). Note that another way of declaring
+			resources is to use a script specific to the resource type, if
+			available (e.g. .material).
+		@par
+			Declared resources are not created as Resource instances (and thus
+			are not available through their ResourceManager) until initialiseResourceGroup
+			is called, at which point all declared resources will become created 
+			(but unloaded) Resource instances, along with any resources declared
+			in scripts in resource locations associated with the group.
+        @param name The resource name. 
+        @param resourceType The type of the resource. Ogre comes preconfigured with 
+            a number of resource types: 
+            <ul>
+            <li>Font</li>
+            <li>GpuProgram</li>
+            <li>HighLevelGpuProgram</li>
+            <li>Material</li>
+            <li>Mesh</li>
+            <li>Skeleton</li>
+            <li>Texture</li>
+            </ul>
+            .. but more can be added by plugin ResourceManager classes.
+        @param groupName The name of the group to which it will belong.
+		@param loadParameters A list of name / value pairs which supply custom
+			parameters to the resource which will be required before it can 
+			be loaded. These are specific to the resource type.
+        */
+        void declareResource(const String& name, const String& resourceType,
+            const String& groupName = DEFAULT_RESOURCE_GROUP_NAME,
+			const NameValuePairList& loadParameters = NameValuePairList());
+        /** Undeclare a resource.
+		@remarks
+			Note that this will not cause it to be unloaded
+            if it is already loaded, nor will it destroy a resource which has 
+			already been created if initialiseResourceGroup has been called already.
+			Only unloadResourceGroup / clearResourceGroup / destroyResourceGroup 
+			will do that. 
+        @param name The name of the resource. 
+		@param groupName The name of the group this resource was declared in. 
+        */
+        void undeclareResource(const String& name, const String& groupName);
+
+		/** Open a single resource by name and return a DataStream
+		 	pointing at the source of the data.
+		@param resourceName The name of the resource to locate.
+			Even if resource locations are added recursively, you
+			must provide a fully qualified name to this method. You 
+			can find out the matching fully qualified names by using the
+			find() method if you need to.
+		@param groupName The name of the resource group; this determines which 
+			locations are searched. 
+		@returns Shared pointer to data stream containing the data, will be
+			destroyed automatically when no longer referenced
+		*/
+		DataStreamPtr openResource(const String& resourceName, 
+			const String& groupName = DEFAULT_RESOURCE_GROUP_NAME);
+
+		/** Open all resources matching a given pattern (which can contain
+			the character '*' as a wildcard), and return a collection of 
+			DataStream objects on them.
+		@param pattern The pattern to look for. If resource locations have been
+			added recursively, subdirectories will be searched too so this
+			does not need to be fully qualified.
+		@param groupName The resource group; this determines which locations
+			are searched.
+		@returns Shared pointer to a data stream list , will be
+			destroyed automatically when no longer referenced
+		*/
+		DataStreamListPtr openResources(const String& pattern, 
+			const String& groupName = DEFAULT_RESOURCE_GROUP_NAME);
+		
+        /** List all file names in a resource group.
+        @note
+        This method only returns filenames, you can also retrieve other
+        information using listFileInfo.
+        @param groupName The name of the group
+        @returns A list of filenames matching the criteria, all are fully qualified
+        */
+        StringVectorPtr listResourceNames(const String& groupName);
+
+        /** List all files in a resource group with accompanying information.
+        @param groupName The name of the group
+        @returns A list of structures detailing quite a lot of information about
+        all the files in the archive.
+        */
+        FileInfoListPtr listResourceFileInfo(const String& groupName);
+
+        /** Find all file names matching a given pattern in a resource group.
+        @note
+        This method only returns filenames, you can also retrieve other
+        information using findFileInfo.
+        @param groupName The name of the group
+        @param pattern The pattern to search for; wildcards (*) are allowed
+        @returns A list of filenames matching the criteria, all are fully qualified
+        */
+        StringVectorPtr findResourceNames(const String& groupName, const String& pattern);
+
+        /** Find out if the named file exists in a group. 
+        @param group The name of the resource group
+        @param filename Fully qualified name of the file to test for
+        */
+        bool resourceExists(const String& group, const String& filename);
+
+        /** Find all files matching a given pattern in a group and get 
+        some detailed information about them.
+        @param group The name of the resource group
+        @param pattern The pattern to search for; wildcards (*) are allowed
+        @returns A list of file information structures for all files matching 
+        the criteria.
+        */
+        FileInfoListPtr findResourceFileInfo(const String& group, const String& pattern);
+
+        
+        /** Adds a ResourceGroupListener which will be called back during 
+            resource loading events. 
+        */
+        void addResourceGroupListener(ResourceGroupListener* l);
+        /** Removes a ResourceGroupListener */
+        void removeResourceGroupListener(ResourceGroupListener* l);
+
+        /** Sets the resource group that 'world' resources will use.
+        @remarks
+            This is the group which should be used by SceneManagers implementing
+            world geometry when looking for their resources. Defaults to the 
+            DEFAULT_RESOURCE_GROUP_NAME but this can be altered.
+        */
+        void setWorldResourceGroupName(const String& groupName) {mWorldGroupName = groupName;}
+
+        /// Sets the resource group that 'world' resources will use.
+        const String& getWorldResourceGroupName(void) const { return mWorldGroupName; }
+
+        /** Associates some world geometry with a resource group, causing it to 
+            be loaded / unloaded with the resource group.
+        @remarks
+            You would use this method to essentially defer a call to 
+            SceneManager::setWorldGeometry to the time when the resource group
+            is loaded. The advantage of this is that compatible scene managers 
+            will include the estimate of the number of loading stages for that
+            world geometry when the resource group begins loading, allowing you
+            to include that in a loading progress report. 
+        @param group The name of the resource group
+        @param worldGeometry The parameter which should be passed to setWorldGeometry
+        @param sceneManager The SceneManager which should be called
+        */
+        void linkWorldGeometryToResourceGroup(const String& group, 
+            const String& worldGeometry, SceneManager* sceneManager);
+
+        /** Clear any link to world geometry from a resource group.
+        @remarks
+            Basically undoes a previous call to linkWorldGeometryToResourceGroup.
+        */
+        void unlinkWorldGeometryFromResourceGroup(const String& group);
+
+        /** Shutdown all ResourceManagers, performed as part of clean-up. */
+        void shutdownAll(void);
+
+
+        /** Internal method for registering a ResourceManager (which should be
+            a singleton). Creators of plugins can register new ResourceManagers
+            this way if they wish.
+		@remarks
+			ResourceManagers that wish to parse scripts must also call 
+			_registerScriptLoader.
+        @param resourceType String identifying the resource type, must be unique.
+        @param rm Pointer to the ResourceManager instance.
+        */
+        void _registerResourceManager(const String& resourceType, ResourceManager* rm);
+
+        /** Internal method for unregistering a ResourceManager.
+		@remarks
+			ResourceManagers that wish to parse scripts must also call 
+			_unregisterScriptLoader.
+        @param resourceType String identifying the resource type.
+        */
+        void _unregisterResourceManager(const String& resourceType);
+
+
+        /** Internal method for registering a ScriptLoader.
+		@remarks ScriptLoaders parse scripts when resource groups are initialised.
+        @param su Pointer to the ScriptLoader instance.
+        */
+        void _registerScriptLoader(ScriptLoader* su);
+
+        /** Internal method for unregistering a ScriptLoader.
+        @param su Pointer to the ScriptLoader instance.
+        */
+        void _unregisterScriptLoader(ScriptLoader* su);
+
+		/** Internal method for getting a registered ResourceManager.
+		@param resourceType String identifying the resource type.
+		*/
+		ResourceManager* _getResourceManager(const String& resourceType);
+
+		/** Internal method called by ResourceManager when a resource is created.
+		@param res Weak reference to resource
+		*/
+		void _notifyResourceCreated(ResourcePtr& res);
+
+		/** Internal method called by ResourceManager when a resource is removed.
+		@param res Weak reference to resource
+		*/
+		void _notifyResourceRemoved(ResourcePtr& res);
+
+		/** Internal method called by ResourceManager when all resources 
+			for that manager are removed.
+		@param manager Pointer to the manager for which all resources are being removed
+		*/
+		void _notifyAllResourcesRemoved(ResourceManager* manager);
+
+        /** Notify this manager that one stage of world geometry loading has been 
+            started.
+        @remarks
+            Custom SceneManagers which load custom world geometry should call this 
+            method the number of times equal to the value they return from 
+            SceneManager::estimateWorldGeometry while loading their geometry.
+        */
+        void _notifyWorldGeometryStageStarted(const String& description);
+        /** Notify this manager that one stage of world geometry loading has been 
+            completed.
+        @remarks
+            Custom SceneManagers which load custom world geometry should call this 
+            method the number of times equal to the value they return from 
+            SceneManager::estimateWorldGeometry while loading their geometry.
+        */
+        void _notifyWorldGeometryStageEnded(void);
+
+		/** Get a list of the currently defined resource groups. 
+		@note This method intentionally returns a copy rather than a reference in
+			order to avoid any contention issues in multithreaded applications.
+		@returns A copy of list of currently defined groups.
+		*/
+		StringVector getResourceGroups(void);
+		/** Get the list of resource declarations for the specified group name. 
+		@note This method intentionally returns a copy rather than a reference in
+			order to avoid any contention issues in multithreaded applications.
+		@param groupName The name of the group
+		@returns A copy of list of currently defined resources.
+		*/
+		ResourceDeclarationList getResourceDeclarationList(const String& groupName);
+
+		/** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static ResourceGroupManager& getSingleton(void);
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static ResourceGroupManager* getSingletonPtr(void);
+
+    };
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreFrameListener.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreFrameListener.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreFrameListener.h	(revision 1092)
@@ -0,0 +1,102 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __FrameListener_H__
+#define __FrameListener_H__
+
+
+#include "OgrePrerequisites.h"
+
+namespace Ogre {
+
+    /** Struct containing information about a frame event.
+    */
+    struct FrameEvent
+    {
+        /** Elapsed time in seconds since the last event.
+            This gives you time between frame start & frame end,
+            and between frame end and next frame start.
+            @remarks
+                This may not be the elapsed time but the average
+                elapsed time between recently fired events.
+        */
+        Real timeSinceLastEvent;
+        /** Elapsed time in seconds since the last event of the same type,
+            i.e. time for a complete frame.
+            @remarks
+                This may not be the elapsed time but the average
+                elapsed time between recently fired events of the same type.
+        */
+        Real timeSinceLastFrame;
+    };
+
+
+    /** A interface class defining a listener which can be used to receive
+        notifications of frame events.
+        @remarks
+            A 'listener' is an interface designed to be called back when
+            particular events are called. This class defines the
+            interface relating to frame events. In order to receive
+            notifications of frame events, you should create a subclass of
+            FrameListener and override the methods for which you would like
+            to customise the resulting processing. You should then call
+            Root::addFrameListener passing an instance of this class.
+            There is no limit to the number of frame listeners you can register,
+            allowing you to register multiple listeners for different purposes.
+            Frame events only occur when Ogre is in continuous rendering mode,
+            ie. after Root::startRendering is called. If the application is
+            doing ad-hoc rendering without entering a rendering loop, frame
+            events are not generated. Note that a frame event occurs once for
+            all rendering targets, not once per target.
+    */
+    class _OgreExport FrameListener
+    {
+        /*
+        Note that this could have been an abstract class, but I made
+        the explicit choice not to do this, because I wanted to give
+        people the option of only implementing the methods they wanted,
+        rather than having to create 'do nothing' implementations for
+        those they weren't interested in. As such this class follows
+        the 'Adapter' classes in Java rather than pure interfaces.
+        */
+    public:
+        /** Called when a frame is about to begin rendering.
+            @return
+                True to go ahead, false to abort rendering and drop
+                out of the rendering loop.
+        */
+        virtual bool frameStarted(const FrameEvent& evt) { return true; }
+        /** Called just after a frame has been rendered.
+            @return
+                True to continue with the next frame, false to drop
+                out of the rendering loop.
+        */
+        virtual bool frameEnded(const FrameEvent& evt) { return true; }
+
+		virtual ~FrameListener() {}
+		
+    };
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreColourValue.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreColourValue.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreColourValue.h	(revision 1092)
@@ -0,0 +1,232 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _COLOURVALUE_H__
+#define _COLOURVALUE_H__
+
+#include "OgrePrerequisites.h"
+
+namespace Ogre {
+
+    typedef uint32 RGBA;
+    typedef uint32 ARGB;
+    typedef uint32 ABGR;
+
+    /** Class representing colour.
+	    @remarks
+		    Colour is represented as 4 components, each of which is a
+		    floating-point value from 0.0 to 1.0.
+	    @par
+		    The 3 'normal' colour components are red, green and blue, a higher
+		    number indicating greater amounts of that component in the colour.
+		    The forth component is the 'alpha' value, which represents
+		    transparency. In this case, 0.0 is completely transparent and 1.0 is
+		    fully opaque.
+    */
+    class _OgreExport ColourValue
+    {
+    public:
+	    static ColourValue Black;
+	    static ColourValue White;
+	    static ColourValue Red;
+	    static ColourValue Green;
+	    static ColourValue Blue;
+
+	    explicit ColourValue( float red = 1.0f,
+				    float green = 1.0f,
+				    float blue = 1.0f,
+				    float alpha = 1.0f ) : r(red), g(green), b(blue), a(alpha)
+        { }
+
+	    bool operator==(const ColourValue& rhs) const;
+	    bool operator!=(const ColourValue& rhs) const;
+
+        union {
+            struct {
+	            float r,g,b,a;
+            };
+            float val[4];
+        };
+
+	    /** Retrieves colour as RGBA.
+	    */
+	    RGBA getAsRGBA(void) const;
+
+	    /** Retrieves colour as ARGB.
+	    */
+	    ARGB getAsARGB(void) const;
+
+	    /** Retrieves colours as ABGR */
+	    ABGR getAsABGR(void) const;
+
+	    /** Sets colour as RGBA.
+	    */
+        void setAsRGBA(const RGBA val);
+
+	    /** Sets colour as ARGB.
+	    */
+        void setAsARGB(const ARGB val);
+
+	    /** Sets colour as ABGR.
+	    */
+        void setAsABGR(const ABGR val);
+
+        // arithmetic operations
+        inline ColourValue operator + ( const ColourValue& rkVector ) const
+        {
+            ColourValue kSum;
+
+            kSum.r = r + rkVector.r;
+            kSum.g = g + rkVector.g;
+            kSum.b = b + rkVector.b;
+            kSum.a = a + rkVector.a;
+
+            return kSum;
+        }
+
+        inline ColourValue operator - ( const ColourValue& rkVector ) const
+        {
+            ColourValue kDiff;
+
+            kDiff.r = r - rkVector.r;
+            kDiff.g = g - rkVector.g;
+            kDiff.b = b - rkVector.b;
+            kDiff.a = a - rkVector.a;
+
+            return kDiff;
+        }
+
+        inline ColourValue operator * (const float fScalar ) const
+        {
+            ColourValue kProd;
+
+            kProd.r = fScalar*r;
+            kProd.g = fScalar*g;
+            kProd.b = fScalar*b;
+            kProd.a = fScalar*a;
+
+            return kProd;
+        }
+
+        inline ColourValue operator * ( const ColourValue& rhs) const
+        {
+            ColourValue kProd;
+
+            kProd.r = rhs.r * r;
+            kProd.g = rhs.g * g;
+            kProd.b = rhs.b * b;
+            kProd.a = rhs.a * a;
+
+            return kProd;
+        }
+
+        inline ColourValue operator / ( const ColourValue& rhs) const
+        {
+            ColourValue kProd;
+
+            kProd.r = rhs.r / r;
+            kProd.g = rhs.g / g;
+            kProd.b = rhs.b / b;
+            kProd.a = rhs.a / a;
+
+            return kProd;
+        }
+
+        inline ColourValue operator / (const float fScalar ) const
+        {
+            assert( fScalar != 0.0 );
+
+            ColourValue kDiv;
+
+            float fInv = 1.0 / fScalar;
+            kDiv.r = r * fInv;
+            kDiv.g = g * fInv;
+            kDiv.b = b * fInv;
+            kDiv.a = a * fInv;
+
+            return kDiv;
+        }
+
+        inline friend ColourValue operator * (const float fScalar, const ColourValue& rkVector )
+        {
+            ColourValue kProd;
+
+            kProd.r = fScalar * rkVector.r;
+            kProd.g = fScalar * rkVector.g;
+            kProd.b = fScalar * rkVector.b;
+            kProd.a = fScalar * rkVector.a;
+
+            return kProd;
+        }
+
+        // arithmetic updates
+        inline ColourValue& operator += ( const ColourValue& rkVector )
+        {
+            r += rkVector.r;
+            g += rkVector.g;
+            b += rkVector.b;
+            a += rkVector.a;
+
+            return *this;
+        }
+
+        inline ColourValue& operator -= ( const ColourValue& rkVector )
+        {
+            r -= rkVector.r;
+            g -= rkVector.g;
+            b -= rkVector.b;
+            a -= rkVector.a;
+
+            return *this;
+        }
+
+        inline ColourValue& operator *= (const float fScalar )
+        {
+            r *= fScalar;
+            g *= fScalar;
+            b *= fScalar;
+            a *= fScalar;
+            return *this;
+        }
+
+        inline ColourValue& operator /= (const float fScalar )
+        {
+            assert( fScalar != 0.0 );
+
+            float fInv = 1.0 / fScalar;
+
+            r *= fInv;
+            g *= fInv;
+            b *= fInv;
+            a *= fInv;
+
+            return *this;
+        }
+
+
+    };
+
+} // namespace
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreILUtil.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreILUtil.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreILUtil.h	(revision 1092)
@@ -0,0 +1,87 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _Ogre_ILUtil_H__
+#define _Ogre_ILUtil_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreCommon.h"
+#include "OgrePixelFormat.h"
+
+namespace Ogre {
+
+    /* 
+     * DevIL specific utility class
+     **/    
+    class _OgrePrivate ILUtil {
+    public:
+    	/// Structure that encapsulates a devIL image format definition
+		struct ILFormat {
+			/// Construct an invalidated ILFormat structure
+			ILFormat():
+				numberOfChannels(0), format(-1), type(-1) {};
+
+			/// Construct a ILFormat from parameters
+			ILFormat(int channels, int format, int type=-1):
+				numberOfChannels(channels), format(format), type(type) {}
+
+			/// Return wether this structure represents a valid DevIL format
+			bool isValid() { return format!=-1; }
+
+			/// Number of channels, usually 3 or 4
+			int numberOfChannels;
+			/// IL_RGBA,IL_BGRA,IL_DXTx, ...
+  			int format;
+			/// IL_UNSIGNED_BYTE, IL_UNSIGNED_SHORT, ... may be -1 for compressed formats
+  			int type;
+		};
+
+        /** Get OGRE format to which a given IL format can be most optimally converted.
+         */
+        static PixelFormat ilFormat2OgreFormat( int ImageFormat, int ImageType );
+        /**	Get IL format that matches a given OGRE format exactly in memory.
+        	@remarks	Returns an invalid ILFormat (.isValid()==false) when
+        		there is no IL format that matches this.
+         */
+        static ILFormat OgreFormat2ilFormat( PixelFormat format );      
+        /** Convert current IL image to an OGRE format. The size of the target will be
+          	PixelUtil::getNumElemBytes(fmt) * ilGetInteger( IL_IMAGE_WIDTH ) * ilGetInteger( IL_IMAGE_HEIGHT ) * ilGetInteger( IL_IMAGE_DEPTH )
+          	The IL image type must be IL(_UNSIGNED_)BYTE or IL_FLOAT.
+        	The IL image format must be IL_RGBA, IL_BGRA, IL_RGB, IL_BGR, IL_LUMINANCE or IL_LUMINANCE_ALPHA
+         
+         	@param tar       Target pointer
+         	@param ogrefmt   Ogre pixel format to employ
+        */
+        static void toOgre(const PixelBox &dst);
+
+        /** Convert an OGRE format image to current IL image.
+         	@param src       Pixelbox; encapsulates source pointer, width, height, 
+         					 depth and format
+        */
+        static void fromOgre(const PixelBox &src);
+    };
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreParticleSystemManager.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreParticleSystemManager.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreParticleSystemManager.h	(revision 1092)
@@ -0,0 +1,415 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE 
+	(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under 
+the terms of the GNU Lesser General Public License as published by the Free Software 
+Foundation; either version 2 of the License, or (at your option) any later 
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT 
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with 
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple 
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to 
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __ParticleSystemManager_H__
+#define __ParticleSystemManager_H__
+
+
+#include "OgrePrerequisites.h"
+#include "OgreParticleSystem.h"
+#include "OgreFrameListener.h"
+#include "OgreSingleton.h"
+#include "OgreIteratorWrappers.h"
+#include "OgreScriptLoader.h"
+#include "OgreResourceGroupManager.h"
+
+namespace Ogre {
+
+    /** Manages particle systems, particle system scripts (templates) and the available emitter & affector factories.
+    @remarks
+        This singleton class is responsible for creating and managing particle systems. All particle
+        systems must be created and destroyed using this object. Remember that like all other MovableObject
+        subclasses, ParticleSystems do not get rendered until they are attached to a SceneNode object.
+    @par
+        This class also manages factories for ParticleEmitter and ParticleAffector classes. To enable easy
+        extensions to the types of emitters (particle sources) and affectors (particle modifiers), the
+        ParticleSystemManager lets plugins or applications register factory classes which submit new
+        subclasses to ParticleEmitter and ParticleAffector. Ogre comes with a number of them already provided,
+        such as cone, sphere and box-shaped emitters, and simple affectors such as constant directional force
+        and colour faders. However using this registration process, a plugin can create any behaviour
+        required.
+    @par
+        This class also manages the loading and parsing of particle system scripts, which are text files
+        describing named particle system templates. Instances of particle systems using these templates can
+        then be created easily through the createParticleSystem method.
+    */
+    class _OgreExport ParticleSystemManager: public Singleton<ParticleSystemManager>, 
+        public FrameListener, public ScriptLoader
+    {
+	public:
+        typedef std::map<String, ParticleSystem*> ParticleTemplateMap;
+		typedef std::map<String, ParticleAffectorFactory*> ParticleAffectorFactoryMap;
+		typedef std::map<String, ParticleEmitterFactory*> ParticleEmitterFactoryMap;
+		typedef std::map<String, ParticleSystemRendererFactory*> ParticleSystemRendererFactoryMap;
+    protected:
+        /// Templates based on scripts
+        ParticleTemplateMap mSystemTemplates;
+        
+        typedef std::map<String, ParticleSystem*> ParticleSystemMap;
+        /// Actual instantiated particle systems (may be based on template, may be manual)
+        ParticleSystemMap mSystems;
+
+        /// Factories for named emitter types (can be extended using plugins)
+        ParticleEmitterFactoryMap mEmitterFactories;
+
+        /// Factories for named affector types (can be extended using plugins)
+        ParticleAffectorFactoryMap mAffectorFactories;
+
+		/// Map of renderer types to factories
+		ParticleSystemRendererFactoryMap mRendererFactories;
+
+        StringVector mScriptPatterns;
+
+		/// Controls time
+		Real mTimeFactor;
+
+        /** Internal script parsing method. */
+        void parseNewEmitter(const String& type, DataStreamPtr& chunk, ParticleSystem* sys);
+        /** Internal script parsing method. */
+        void parseNewAffector(const String& type, DataStreamPtr& chunk, ParticleSystem* sys);
+        /** Internal script parsing method. */
+        void parseAttrib(const String& line, ParticleSystem* sys);
+        /** Internal script parsing method. */
+        void parseEmitterAttrib(const String& line, ParticleEmitter* sys);
+        /** Internal script parsing method. */
+        void parseAffectorAttrib(const String& line, ParticleAffector* sys);
+        /** Internal script parsing method. */
+        void skipToNextCloseBrace(DataStreamPtr& chunk);
+        /** Internal script parsing method. */
+        void skipToNextOpenBrace(DataStreamPtr& chunk);
+    public:
+
+        ParticleSystemManager();
+        virtual ~ParticleSystemManager();
+
+        /** Adds a new 'factory' object for emitters to the list of available emitter types.
+        @remarks
+            This method allows plugins etc to add new particle emitter types to Ogre. Particle emitters
+            are sources of particles, and generate new particles with their start positions, colours and
+            momentums appropriately. Plugins would create new subclasses of ParticleEmitter which 
+            emit particles a certain way, and register a subclass of ParticleEmitterFactory to create them (since multiple 
+            emitters can be created for different particle systems).
+        @par
+            All particle emitter factories have an assigned name which is used to identify the emitter
+            type. This must be unique.
+        @par
+            Note that the object passed to this function will not be destroyed by the ParticleSystemManager,
+            since it may have been allocted on a different heap in the case of plugins. The caller must
+            destroy the object later on, probably on plugin shutdown.
+        @param
+            factory Pointer to a ParticleEmitterFactory subclass created by the plugin or application code.
+        */
+        void addEmitterFactory(ParticleEmitterFactory* factory);
+
+        /** Adds a new 'factory' object for affectors to the list of available affector types.
+        @remarks
+            This method allows plugins etc to add new particle affector types to Ogre. Particle
+            affectors modify the particles in a system a certain way such as affecting their direction
+            or changing their colour, lifespan etc. Plugins would
+            create new subclasses of ParticleAffector which affect particles a certain way, and register
+            a subclass of ParticleAffectorFactory to create them.
+        @par
+            All particle affector factories have an assigned name which is used to identify the affector
+            type. This must be unique.
+        @par
+            Note that the object passed to this function will not be destroyed by the ParticleSystemManager,
+            since it may have been allocted on a different heap in the case of plugins. The caller must
+            destroy the object later on, probably on plugin shutdown.
+        @param
+            factory Pointer to a ParticleAffectorFactory subclass created by the plugin or application code.
+        */
+        void addAffectorFactory(ParticleAffectorFactory* factory);
+
+		/** Registers a factory class for creating ParticleSystemRenderer instances. 
+        @par
+            Note that the object passed to this function will not be destroyed by the ParticleSystemManager,
+            since it may have been allocted on a different heap in the case of plugins. The caller must
+            destroy the object later on, probably on plugin shutdown.
+        @param
+            factory Pointer to a ParticleSystemRendererFactory subclass created by the plugin or application code.
+		*/
+		void addRendererFactory(ParticleSystemRendererFactory* factory);
+
+        /** Adds a new particle system template to the list of available templates. 
+        @remarks
+            Instances of particle systems in a scene are not normally unique - often you want to place the
+            same effect in many places. This method allows you to register a ParticleSystem as a named template,
+            which can subsequently be used to create instances using the createSystem method.
+        @par
+            Note that particle system templates can either be created programmatically by an application 
+            and registered using this method, or they can be defined in a script file (*.particle) which is
+            loaded by the engine at startup, very much like Material scripts.
+        @param
+            name The name of the template. Must be unique across all templates.
+        @param
+            sysTemplate A pointer to a particle system to be used as a template. The manager
+                will take over ownership of this pointer.
+            
+        */
+        void addTemplate(const String& name, ParticleSystem* sysTemplate);
+
+        /** Create a new particle system template. 
+        @remarks
+            This method is similar to the addTemplate method, except this just creates a new template
+            and returns a pointer to it to be populated. Use this when you don't already have a system
+            to add as a template and just want to create a new template which you will build up in-place.
+        @param
+            name The name of the template. Must be unique across all templates.
+        @param
+            resourceGroup The name of the resource group which will be used to 
+                load any dependent resources.
+            
+        */
+        ParticleSystem* createTemplate(const String& name, const String& resourceGroup);
+
+        /** Retrieves a particle system template for possible modification. 
+        @remarks
+            Modifying a template does not affect the settings on any ParticleSystems already created
+            from this template.
+        */
+        ParticleSystem* getTemplate(const String& name);
+
+        /** Basic method for creating a blank particle system.
+        @remarks
+            This method creates a new, blank ParticleSystem instance and returns a pointer to it.
+            The caller should not delete this object, it will be freed at system shutdown, or can
+            be released earlier using the destroySystem method.
+        @par
+            The instance returned from this method won't actually do anything because on creation a
+            particle system has no emitters. The caller should manipulate the instance through it's 
+            ParticleSystem methods to actually create a real particle effect. 
+        @par
+            Creating a particle system does not make it a part of the scene. As with other MovableObject
+            subclasses, a ParticleSystem is not rendered until it is attached to a SceneNode. 
+        @param
+            name The name to give the ParticleSystem.
+        @param 
+            quota The maximum number of particles to allow in this system. 
+        @param
+            resourceGroup The resource group which will be used to load dependent resources
+        */
+        ParticleSystem* createSystem(const String& name, size_t quota = 500, 
+            const String& resourceGroup = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
+
+        /** Creates a particle system based on a template.
+        @remarks
+            This method creates a new ParticleSystem instance based on the named template and returns a 
+            pointer to the caller. The caller should not delete this object, it will be freed at system shutdown, 
+            or can be released earlier using the destroySystem method.
+        @par
+            Each system created from a template takes the template's settings at the time of creation, 
+            but is completely separate from the template from there on. 
+        @par
+            Creating a particle system does not make it a part of the scene. As with other MovableObject
+            subclasses, a ParticleSystem is not rendered until it is attached to a SceneNode. 
+        @par
+            This is probably the more useful particle system creation method since it does not require manual
+            setup of the system. Note that the initial quota is based on the template but may be changed later.
+        @param 
+            name The name to give the new particle system instance.
+        @param 
+            templateName The name of the template to base the new instance on.
+        */
+        ParticleSystem* createSystem(const String& name, const String& templateName);
+
+        /** Destroys a particle system, freeing it's memory and removing references to it in this class.
+        @remarks
+            You should ensure that before calling this method, the particle system has been detached from 
+            any SceneNode objects, and that no other objects are referencing it.
+        @param
+            name The name of the ParticleSystem to destroy.
+        */
+        void destroySystem(const String& name);
+
+        /** Destroys a particle system, freeing it's memory and removing references to it in this class.
+        @remarks
+            You should ensure that before calling this method, the particle system has been detached from 
+            any SceneNode objects, and that no other objects are referencing it.
+        @param
+            sys Pointer to the ParticleSystem to be destroyed.
+        */
+        void destroySystem(ParticleSystem* sys);
+
+        /** Retrieves a pointer to a system already created. */
+        ParticleSystem* getSystem(const String& name);
+
+
+        /** Internal method for creating a new emitter from a factory.
+        @remarks
+            Used internally by the engine to create new ParticleEmitter instances from named
+            factories. Applications should use the ParticleSystem::addEmitter method instead, 
+            which calls this method to create an instance.
+        @param
+            emitterType String name of the emitter type to be created. A factory of this type must have been registered.
+        @param 
+            psys The particle system this is being created for
+        */
+        ParticleEmitter* _createEmitter(const String& emitterType, ParticleSystem* psys);
+
+        /** Internal method for destroying an emitter.
+        @remarks
+            Because emitters are created by factories which may allocate memory from separate heaps,
+            the memory allocated must be freed from the same place. This method is used to ask the factory
+            to destroy the instance passed in as a pointer.
+        @param
+            emitter Pointer to emitter to be destroyed. On return this pointer will point to invalid (freed) memory.
+        */
+        void _destroyEmitter(ParticleEmitter* emitter);
+
+        /** Internal method for creating a new affector from a factory.
+        @remarks
+            Used internally by the engine to create new ParticleAffector instances from named
+            factories. Applications should use the ParticleSystem::addAffector method instead, 
+            which calls this method to create an instance.
+        @param
+            effectorType String name of the affector type to be created. A factory of this type must have been registered.
+        @param
+            psys The particle system it is being created for
+        */
+        ParticleAffector* _createAffector(const String& affectorType, ParticleSystem* psys);
+
+        /** Internal method for destroying an affector.
+        @remarks
+            Because affectors are created by factories which may allocate memory from separate heaps,
+            the memory allocated must be freed from the same place. This method is used to ask the factory
+            to destroy the instance passed in as a pointer.
+        @param
+            affector Pointer to affector to be destroyed. On return this pointer will point to invalid (freed) memory.
+        */
+        void _destroyAffector(ParticleAffector* affector);
+
+        /** Internal method for creating a new renderer from a factory.
+        @remarks
+            Used internally by the engine to create new ParticleSystemRenderer instances from named
+            factories. Applications should use the ParticleSystem::setRenderer method instead, 
+            which calls this method to create an instance.
+        @param
+            rendererType String name of the renderer type to be created. A factory of this type must have been registered.
+        */
+        ParticleSystemRenderer* _createRenderer(const String& rendererType);
+
+        /** Internal method for destroying a renderer.
+        @remarks
+            Because renderer are created by factories which may allocate memory from separate heaps,
+            the memory allocated must be freed from the same place. This method is used to ask the factory
+            to destroy the instance passed in as a pointer.
+        @param
+            renderer Pointer to renderer to be destroyed. On return this pointer will point to invalid (freed) memory.
+        */
+        void _destroyRenderer(ParticleSystemRenderer* renderer);
+
+        /** Frame event */
+        bool frameStarted(const FrameEvent &evt);
+
+        /** Frame event */
+        bool frameEnded(const FrameEvent &evt);
+
+        /** Init method to be called by OGRE system.
+        @remarks
+            Due to dependencies between various objects certain initialisation tasks cannot be done
+            on construction. OGRE will call this method when the rendering subsystem is initialised.
+        */
+        void _initialise(void);
+
+        /// @copydoc ScriptLoader::getScriptPatterns
+        const StringVector& getScriptPatterns(void) const;
+        /// @copydoc ScriptLoader::parseScript
+        void parseScript(DataStreamPtr& stream, const String& groupName);
+        /// @copydoc ScriptLoader::getLoadingOrder
+        Real getLoadingOrder(void) const;
+
+		typedef MapIterator<ParticleAffectorFactoryMap> ParticleAffectorFactoryIterator;
+		typedef MapIterator<ParticleEmitterFactoryMap> ParticleEmitterFactoryIterator;
+		typedef MapIterator<ParticleSystemRendererFactoryMap> ParticleRendererFactoryIterator;
+		/** Return an iterator over the affector factories currently registered */
+		ParticleAffectorFactoryIterator getAffectorFactoryIterator(void);
+		/** Return an iterator over the emitter factories currently registered */
+		ParticleEmitterFactoryIterator getEmitterFactoryIterator(void);
+		/** Return an iterator over the renderer factories currently registered */
+		ParticleRendererFactoryIterator getRendererFactoryIterator(void);
+
+
+		/** Return relative speed of time as perceived by particle systems.
+        @remarks
+            See setTimeFactor for full information on the meaning of this value.
+		*/
+		Real getTimeFactor(void) const;
+
+		/** Set the relative speed of time as perceived by particle systems.
+        @remarks
+            Normally particle systems are updated automatically in line with the real 
+            passage of time. This method allows you to change that, so that 
+            particle systems are told that the time is passing slower or faster than it
+            actually is. Use this to globally speed up / slow down particle systems.
+        @param tf The virtual speed of time (1.0 is real time).
+		*/
+		void setTimeFactor(Real tf);
+
+        typedef MapIterator<ParticleTemplateMap> ParticleSystemTemplateIterator;
+        /** Gets an iterator over the list of particle system templates. */
+        ParticleSystemTemplateIterator getTemplateIterator(void)
+        {
+            return ParticleSystemTemplateIterator(
+                mSystemTemplates.begin(), mSystemTemplates.end());
+        } 
+
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static ParticleSystemManager& getSingleton(void);
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static ParticleSystemManager* getSingletonPtr(void);
+
+    };
+
+}
+
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreBitwise.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreBitwise.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreBitwise.h	(revision 1092)
@@ -0,0 +1,282 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _Bitwise_H__
+#define _Bitwise_H__
+
+#include "OgrePrerequisites.h"
+
+namespace Ogre {
+
+    /** Class for manipulating bit patterns.
+    */
+    class Bitwise {
+    public:
+        /** Returns the number of bits a pattern must be shifted right by to
+            remove right-hand zeroes.
+        */
+		template<typename T>
+        static FORCEINLINE unsigned int getBitShift(T mask)
+		{
+			if (mask == 0)
+				return 0;
+
+			unsigned int result = 0;
+			while ((mask & 1) == 0) {
+				++result;
+				mask >>= 1;
+			}
+			return result;
+		}
+
+        /** Takes a value with a given src bit mask, and produces another
+            value with a desired bit mask.
+            @remarks
+                This routine is useful for colour conversion.
+        */
+		template<typename SrcT, typename DestT>
+        static inline DestT convertBitPattern(SrcT srcValue, SrcT srcBitMask, DestT destBitMask)
+		{
+			// Mask off irrelevant source value bits (if any)
+			srcValue = srcValue & srcBitMask;
+
+			// Shift source down to bottom of DWORD
+			const unsigned int srcBitShift = getBitShift(srcBitMask);
+			srcValue >>= srcBitShift;
+
+			// Get max value possible in source from srcMask
+			const SrcT srcMax = srcBitMask >> srcBitShift;
+
+			// Get max avaiable in dest
+			const unsigned int destBitShift = getBitShift(destBitMask);
+			const DestT destMax = destBitMask >> destBitShift;
+
+			// Scale source value into destination, and shift back
+			DestT destValue = (srcValue * destMax) / srcMax;
+			return (destValue << destBitShift);
+		}
+
+        /**
+         * Convert N bit colour channel value to P bits. It fills P bits with the
+         * bit pattern repeated. (this is /((1<<n)-1) in fixed point)
+         */
+        static inline unsigned int fixedToFixed(uint32 value, unsigned int n, unsigned int p) 
+        {
+            if(n > p) 
+            {
+                // Less bits required than available; this is easy
+                value >>= n-p;
+            } 
+            else if(n < p)
+            {
+                // More bits required than are there, do the fill
+                // Use old fashioned division, probably better than a loop
+                if(value == 0)
+                        value = 0;
+                else if(value == (static_cast<unsigned int>(1)<<n)-1)
+                        value = (1<<p)-1;
+                else    value = value*(1<<p)/((1<<n)-1);
+            }
+            return value;    
+        }
+
+        /**
+         * Convert floating point colour channel value between 0.0 and 1.0 (otherwise clamped) 
+         * to integer of a certain number of bits. Works for any value of bits between 0 and 31.
+         */
+        static inline unsigned int floatToFixed(const float value, const unsigned int bits)
+        {
+            if(value <= 0.0f) return 0;
+            else if (value >= 1.0f) return (1<<bits)-1;
+            else return (unsigned int)(value * (1<<bits));     
+        }
+
+        /**
+         * Fixed point to float
+         */
+        static inline float fixedToFloat(unsigned value, unsigned int bits)
+        {
+            return (float)value/(float)((1<<bits)-1);
+        }
+
+        /**
+         * Write a n*8 bits integer value to memory in native endian.
+         */
+        static inline void intWrite(const void *dest, const int n, const unsigned int value)
+        {
+            switch(n) {
+                case 1:
+                    ((uint8*)dest)[0] = (uint8)value;
+                    break;
+                case 2:
+                    ((uint16*)dest)[0] = (uint16)value;
+                    break;
+                case 3:
+#if OGRE_ENDIAN == OGRE_ENDIAN_BIG      
+                    ((uint8*)dest)[0] = (uint8)((value >> 16) & 0xFF);
+                    ((uint8*)dest)[1] = (uint8)((value >> 8) & 0xFF);
+                    ((uint8*)dest)[2] = (uint8)(value & 0xFF);
+#else
+                    ((uint8*)dest)[2] = (uint8)((value >> 16) & 0xFF);
+                    ((uint8*)dest)[1] = (uint8)((value >> 8) & 0xFF);
+                    ((uint8*)dest)[0] = (uint8)(value & 0xFF);
+#endif
+                    break;
+                case 4:
+                    ((uint32*)dest)[0] = (uint32)value;                
+                    break;                
+            }        
+        }
+        /**
+         * Read a n*8 bits integer value to memory in native endian.
+         */
+        static inline unsigned int intRead(const void *src, int n) {
+            switch(n) {
+                case 1:
+                    return ((uint8*)src)[0];
+                case 2:
+                    return ((uint16*)src)[0];
+                case 3:
+#if OGRE_ENDIAN == OGRE_ENDIAN_BIG      
+                    return ((uint32)((uint8*)src)[0]<<16)|
+                            ((uint32)((uint8*)src)[1]<<8)|
+                            ((uint32)((uint8*)src)[2]);
+#else
+                    return ((uint32)((uint8*)src)[0])|
+                            ((uint32)((uint8*)src)[1]<<8)|
+                            ((uint32)((uint8*)src)[2]<<16);
+#endif
+                case 4:
+                    return ((uint32*)src)[0];
+            } 
+            return 0; // ?
+        }
+
+        /** Convert a float32 to a float16 (NV_half_float)
+         	Courtesy of OpenEXR
+        */
+        static inline uint16 floatToHalf(float i)
+        {
+            return floatToHalfI(*reinterpret_cast<uint32*>(&i));
+        }
+		/** Converts float in uint32 format to a a half in uint16 format
+		*/
+        static inline uint16 floatToHalfI(uint32 i)
+        {
+            register int s =  (i >> 16) & 0x00008000;
+            register int e = ((i >> 23) & 0x000000ff) - (127 - 15);
+            register int m =   i        & 0x007fffff;
+        
+            if (e <= 0)
+            {
+                if (e < -10)
+                {
+                    return 0;
+                }
+                m = (m | 0x00800000) >> (1 - e);
+        
+                return s | (m >> 13);
+            }
+            else if (e == 0xff - (127 - 15))
+            {
+                if (m == 0) // Inf
+                {
+                    return s | 0x7c00;
+                } 
+                else    // NAN
+                {
+                    m >>= 13;
+                    return s | 0x7c00 | m | (m == 0);
+                }
+            }
+            else
+            {
+                if (e > 30) // Overflow
+                {
+                    return s | 0x7c00;
+                }
+        
+                return s | (e << 10) | (m >> 13);
+            }
+        }
+        
+        /**
+         * Convert a float16 (NV_half_float) to a float32
+         * Courtesy of OpenEXR
+         */
+        static inline float halfToFloat(uint16 y)
+        {
+            uint32 r = halfToFloatI(y);
+            return *reinterpret_cast<float*>(&r);
+        }
+		/** Converts a half in uint16 format to a float
+		 	in uint32 format
+		 */
+        static inline uint32 halfToFloatI(uint16 y)
+        {
+            register int s = (y >> 15) & 0x00000001;
+            register int e = (y >> 10) & 0x0000001f;
+            register int m =  y        & 0x000003ff;
+        
+            if (e == 0)
+            {
+                if (m == 0) // Plus or minus zero
+                {
+                    return s << 31;
+                }
+                else // Denormalized number -- renormalize it
+                {
+                    while (!(m & 0x00000400))
+                    {
+                        m <<= 1;
+                        e -=  1;
+                    }
+        
+                    e += 1;
+                    m &= ~0x00000400;
+                }
+            }
+            else if (e == 31)
+            {
+                if (m == 0) // Inf
+                {
+                    return (s << 31) | 0x7f800000;
+                }
+                else // NaN
+                {
+                    return (s << 31) | 0x7f800000 | (m << 13);
+                }
+            }
+        
+            e = e + (127 - 15);
+            m = m << 13;
+        
+            return (s << 31) | (e << 23) | m;
+        }
+         
+
+    };
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSkeletonSerializer.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSkeletonSerializer.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSkeletonSerializer.h	(revision 1092)
@@ -0,0 +1,109 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __SkeletonSerializer_H__
+#define __SkeletonSerializer_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreSkeleton.h"
+#include "OgreSerializer.h"
+
+namespace Ogre {
+
+    /** Class for serialising skeleton data to/from an OGRE .skeleton file.
+    @remarks
+        This class allows exporters to write OGRE .skeleton files easily, and allows the
+        OGRE engine to import .skeleton files into instatiated OGRE Skeleton objects.
+        Note that a .skeleton file includes not only the Skeleton, but also definitions of
+        any Animations it uses.
+    @par
+        To export a Skeleton:<OL>
+        <LI>Create a Skeleton object and populate it using it's methods.</LI>
+        <LI>Call the exportSkeleton method</LI>
+        </OL>
+    */
+    class _OgreExport SkeletonSerializer : public Serializer
+    {
+    public:
+        SkeletonSerializer();
+        virtual ~SkeletonSerializer();
+
+
+        /** Exports a skeleton to the file specified. 
+        @remarks
+            This method takes an externally created Skeleton object, and exports both it
+            and animations it uses to a .skeleton file.
+        @param pSkeleton Weak reference to the Skeleton to export
+        @param filename The destination filename
+        */
+        void exportSkeleton(const Skeleton* pSkeleton, const String& filename);
+
+        /** Imports Skeleton and animation data from a .skeleton file DataStream.
+        @remarks
+            This method imports data from a DataStream opened from a .skeleton file and places it's
+            contents into the Skeleton object which is passed in. 
+        @param stream The DataStream holding the .skeleton data. Must be initialised (pos at the start of the buffer).
+        @param pDest Weak reference to the Skeleton object which will receive the data. Should be blank already.
+        */
+        void importSkeleton(DataStreamPtr& stream, Skeleton* pDest);
+
+        // TODO: provide Cal3D importer?
+
+    private:
+        // Internal export methods
+        void writeSkeleton(const Skeleton* pSkel);
+        void writeBone(const Skeleton* pSkel, const Bone* pBone);
+        void writeBoneParent(const Skeleton* pSkel, unsigned short boneId, unsigned short parentId);
+        void writeAnimation(const Skeleton* pSkel, const Animation* anim);
+        void writeAnimationTrack(const Skeleton* pSkel, const AnimationTrack* track);
+        void writeKeyFrame(const Skeleton* pSkel, const KeyFrame* key);
+		void writeSkeletonAnimationLink(const Skeleton* pSkel, 
+			const LinkedSkeletonAnimationSource& link);
+
+        // Internal import methods
+        void readBone(DataStreamPtr& stream, Skeleton* pSkel);
+        void readBoneParent(DataStreamPtr& stream, Skeleton* pSkel);
+        void readAnimation(DataStreamPtr& stream, Skeleton* pSkel);
+        void readAnimationTrack(DataStreamPtr& stream, Animation* anim, Skeleton* pSkel);
+        void readKeyFrame(DataStreamPtr& stream, AnimationTrack* track, Skeleton* pSkel);
+		void readSkeletonAnimationLink(DataStreamPtr& stream, Skeleton* pSkel);
+
+        size_t calcBoneSize(const Skeleton* pSkel, const Bone* pBone);
+        size_t calcBoneParentSize(const Skeleton* pSkel);
+        size_t calcAnimationSize(const Skeleton* pSkel, const Animation* pAnim);
+        size_t calcAnimationTrackSize(const Skeleton* pSkel, const AnimationTrack* pTrack);
+        size_t calcKeyFrameSize(const Skeleton* pSkel, const KeyFrame* pKey);
+		size_t calcSkeletonAnimationLinkSize(const Skeleton* pSkel, 
+			const LinkedSkeletonAnimationSource& link);
+
+
+
+
+    };
+
+}
+
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreControllerManager.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreControllerManager.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreControllerManager.h	(revision 1092)
@@ -0,0 +1,226 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __ControllerManager_H__
+#define __ControllerManager_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreCommon.h"
+#include "OgreSingleton.h"
+#include "OgreController.h"
+#include "OgrePredefinedControllers.h"
+#include "OgreTextureUnitState.h"
+#include "OgreSharedPtr.h"
+
+namespace Ogre {
+
+    typedef SharedPtr< ControllerValue<Real> > ControllerValueRealPtr;
+    typedef SharedPtr< ControllerFunction<Real> > ControllerFunctionRealPtr;
+
+    /** Class for managing Controller instances.
+        @remarks
+            This class is responsible to keeping tabs on all the Controller instances registered
+            and updating them when requested. It also provides a number of convenience methods
+            for creating commonly used controllers (such as texture animators).
+    */
+    class _OgreExport ControllerManager : public Singleton<ControllerManager>
+    {
+    protected:
+        typedef std::set<Controller<Real>*> ControllerList;
+        ControllerList mControllers;
+
+        /// Global predefined controller
+        SharedPtr< ControllerValue<Real> > mFrameTimeController;
+
+    public:
+        ControllerManager();
+        ~ControllerManager();
+
+        /** Creates a new controller and registers it with the manager.
+        */
+        Controller<Real>* createController(const ControllerValueRealPtr& src,
+            const ControllerValueRealPtr& dest, const ControllerFunctionRealPtr& func);
+
+        /** Destroys all the controllers in existence.
+        */
+        void clearControllers(void);
+
+        /** Updates all the registered controllers.
+        */
+        void updateAllControllers(void);
+
+
+        /** Returns a ControllerValue which provides the time since the last frame as a control value source.
+            @remarks
+                A common source value to use to feed into a controller is the time since the last frame. This method
+                returns a pointer to a common source value which provides this information.
+            @par
+                Remember the value will only be up to date after the RenderSystem::beginFrame method is called.
+            @see
+                RenderSystem::beginFrame
+        */
+        const ControllerValueRealPtr& getFrameTimeSource(void) const;
+
+        /** Creates a texture layer animator controller.
+            @remarks
+                This helper method creates the Controller, ControllerValue and ControllerFunction classes required
+                to animate a texture.
+            @param
+                layer TextureUnitState object to animate
+            @param
+                sequenceTime The amount of time in seconds it will take to loop through all the frames.
+        */
+        Controller<Real>* createTextureAnimator(TextureUnitState* layer, Real sequenceTime);
+
+        /** Creates a basic time-based texture coordinate modifier designed for creating scrolling textures.
+            @remarks
+                This simple method allows you to easily create constant-speed scrolling textures. If you want more
+                control, look up the ControllerManager::createTextureWaveTransformer for more complex wave-based
+                scrollers / stretchers / rotaters.
+            @param
+                layer The texture layer to animate.
+            @param
+                uSpeed Speed of horizontal (u-coord) scroll, in complete wraps per second
+            @param
+                vSpeed Speed of vertical (v-coord) scroll, in complete wraps per second
+        */
+        Controller<Real>* createTextureScroller(TextureUnitState* layer, Real uSpeed, Real vSpeed);
+
+        /** Creates a basic time-based texture coordinate modifier designed for creating rotating textures.
+            @return
+                This simple method allows you to easily create constant-speed rotating textures. If you want more
+                control, look up the ControllerManager::createTextureWaveTransformer for more complex wave-based
+                scrollers / stretchers / rotaters.
+            @param
+                layer The texture layer to rotate.
+            @param
+                vSpeed Speed of rotation, in complete anticlockwise revolutions per second
+        */
+        Controller<Real>* createTextureRotater(TextureUnitState* layer, Real speed);
+
+        /** Creates a very flexible time-based texture transformation which can alter the scale, position or
+            rotation of a texture based on a wave function.
+            @param
+                layer The texture layer to affect
+            @param
+                ttype The type of transform, either translate (scroll), scale (stretch) or rotate (spin)
+            @param
+                waveType The shape of the wave, see WaveformType enum for details
+            @param
+                base The base value of the output
+            @param
+                frequency The speed of the wave in cycles per second
+            @param
+                phase The offset of the start of the wave, e.g. 0.5 to start half-way through the wave
+            @param
+                amplitude Scales the output so that instead of lying within 0..1 it lies within 0..1*amplitude for exaggerated effects
+        */
+        Controller<Real>* createTextureWaveTransformer(TextureUnitState* layer, TextureUnitState::TextureTransformType ttype,
+            WaveformType waveType, Real base = 0, Real frequency = 1, Real phase = 0, Real amplitude = 1);
+
+        /** Creates a controller for passing a frame time value through to a vertex / fragment program parameter.
+        @remarks
+            The destination parameter is expected to be a float, and the '.x' attribute will be populated
+            with the appropriately scaled time value.
+        @param params The parameters to update
+        @param paramIndex The index of the parameter to update; if you want a named parameter, then
+            retrieve the index beforehand using GpuProgramParameters::getParamIndex
+        @param factor The factor by which to adjust the time elapsed by before passing it to the program
+        */
+        Controller<Real>* createGpuProgramTimerParam(GpuProgramParameters* params, size_t paramIndex,
+            Real timeFactor = 1.0f);
+
+        /** Removes & destroys the controller passed in as a pointer.
+        */
+        void destroyController(Controller<Real>* controller);
+
+		/** Return relative speed of time as perceived by time based controllers.
+        @remarks
+            See setTimeFactor for full information on the meaning of this value.
+		*/
+		Real getTimeFactor(void) const;
+
+		/** Set the relative speed to update frame time based controllers.
+        @remarks
+            Normally any controllers which use time as an input (FrameTimeController) are updated
+            automatically in line with the real passage of time. This method allows you to change
+            that, so that controllers are told that the time is passing slower or faster than it
+            actually is. Use this to globally speed up / slow down the effect of time-based controllers.
+        @param tf The virtual speed of time (1.0 is real time).
+		*/
+		void setTimeFactor(Real tf);
+
+        /** Return the elapsed time.
+        @remarks
+            See setElapsedTime for full information on the meaning of this value.
+        */
+        Real getElapsedTime(void) const;
+
+        /** Set the elapsed time.
+        @remarks
+            Normally elapsed time accumulated all frames time (which speed relative to time
+            factor) since the rendering loop started. This method allows your to change that to
+            special time, so some elapsed-time-based globally effect is repeatable.
+        @param elapsedTime The new elapsed time
+        */
+        void setElapsedTime(Real elapsedTime);
+
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static ControllerManager& getSingleton(void);
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static ControllerManager* getSingletonPtr(void);
+    };
+
+
+}
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreCEGUIResourceProvider.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreCEGUIResourceProvider.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreCEGUIResourceProvider.h	(revision 1092)
@@ -0,0 +1,52 @@
+/************************************************************************
+	filename: 	CEGUIOgreResourceProvider.h
+	created:	8/7/2004
+	author:		James '_mental_' O'Sullivan
+	
+	purpose:	Defines abstract base class for CEGUIData objects
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _OgreCEGUIResourceProvider_h_
+#define _OgreCEGUIResourceProvider_h_
+
+#include <CEGUI/CEGUIResourceProvider.h>
+#include "OgreCEGUIRenderer.h"
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+class OGRE_GUIRENDERER_API OgreCEGUIResourceProvider : public ResourceProvider
+{
+public:
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	OgreCEGUIResourceProvider();
+
+	~OgreCEGUIResourceProvider(void) {}
+
+//    void loadInputSourceContainer(const String& filename, InputSourceContainer& output);
+    void loadRawDataContainer(const String& filename, RawDataContainer& output, const String& resourceGroup);
+    void unloadRawDataContainer(RawDataContainer& output);
+};
+
+} // End of  CEGUI namespace section
+
+#endif	// end of guard _OgreCEGUIResourceProvider_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSpotShadowFadePng.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSpotShadowFadePng.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSpotShadowFadePng.h	(revision 1092)
@@ -0,0 +1,644 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://ogre.sourceforge.net/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __SPOT_SHADOW_FADE_PNG_H__
+#define __SPOT_SHADOW_FADE_PNG_H__
+
+namespace Ogre {
+
+    // This exists so we don't have to be dependent on an external .png file
+    // for this core feature (PNG used to fade out the edges of spotlight shadows)
+    #define SPOT_SHADOW_FADE_PNG_SIZE 9728
+    unsigned char SPOT_SHADOW_FADE_PNG[SPOT_SHADOW_FADE_PNG_SIZE] = {
+         0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52  
+       , 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x08, 0x02, 0x00, 0x00, 0x00, 0x4c, 0x5c, 0xf6  
+       , 0x9c, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8e, 0x7c, 0xfb, 0x51  
+       , 0x93, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x00, 0x00, 0x7a, 0x25, 0x00, 0x00, 0x80  
+       , 0x83, 0x00, 0x00, 0xf9, 0xff, 0x00, 0x00, 0x80, 0xe8, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea  
+       , 0x60, 0x00, 0x00, 0x3a, 0x97, 0x00, 0x00, 0x17, 0x6f, 0x97, 0xa9, 0x99, 0xd4, 0x00, 0x00, 0x25  
+       , 0x8a, 0x49, 0x44, 0x41, 0x54, 0x78, 0x9c, 0x62, 0xfc, 0xff, 0xff, 0x3f, 0xc3, 0x28, 0x18, 0x38                                                               
+       , 0x00, 0x10, 0x80, 0x58, 0x2a, 0xc8, 0x01, 0x00, 0x04, 0x41, 0x40, 0xfd, 0xff, 0xc7, 0x61, 0x66  
+       , 0xeb, 0x5a, 0xc7, 0x60, 0x32, 0x98, 0x17, 0xdc, 0xec, 0xbf, 0x0b, 0x3c, 0x90, 0xff, 0x11, 0x8e  
+       , 0x61, 0x87, 0xd7, 0x54, 0x32, 0xca, 0xed, 0x6d, 0x2a, 0x89, 0x48, 0x21, 0x04, 0x82, 0x92, 0x28  
+       , 0x1e, 0xa3, 0x96, 0xe4, 0xef, 0x2b, 0x2e, 0x98, 0x02, 0x30, 0x47, 0xe6, 0x48, 0x00, 0x02, 0x20  
+       , 0x10, 0x93, 0xe3, 0xff, 0x2f, 0x46, 0x34, 0x69, 0xac, 0xec, 0x75, 0x19, 0x42, 0x4d, 0xf6, 0x8f  
+       , 0x05, 0xa0, 0x7a, 0xce, 0x61, 0xc9, 0xac, 0xbb, 0x70, 0x69, 0x61, 0x85, 0x25, 0x88, 0xeb, 0x70  
+       , 0x9e, 0xd0, 0x40, 0xa8, 0x1e, 0xed, 0x11, 0xa5, 0xfc, 0x2a, 0xed, 0x77, 0xb6, 0xb7, 0x1b, 0x14  
+       , 0xc8, 0xfc, 0xee, 0xb3, 0x97, 0xdc, 0x02, 0x30, 0x4f, 0x06, 0x37, 0x00, 0x80, 0x20, 0x0c, 0x94  
+       , 0x08, 0xfb, 0x0f, 0x0c, 0x1a, 0xaf, 0xe8, 0x10, 0x92, 0x58, 0x1a, 0x9e, 0xed, 0xf9, 0x4b, 0x01  
+       , 0xc2, 0x7c, 0x55, 0x12, 0x7c, 0xa5, 0x5e, 0x56, 0xdb, 0x52, 0x0f, 0x34, 0xd1, 0xc2, 0xec, 0x5b  
+       , 0xc3, 0xfd, 0x09, 0xc2, 0x1f, 0x31, 0x01, 0x6e, 0xa3, 0xa1, 0x87, 0x76, 0x91, 0xff, 0x82, 0x57  
+       , 0xe2, 0xa4, 0x8f, 0xb0, 0x7c, 0x86, 0x07, 0x26, 0xe4, 0xfb, 0x32, 0xed, 0x83, 0x32, 0x8e, 0x00  
+       , 0xc4, 0x94, 0x5b, 0x0a, 0x00, 0x20, 0x08, 0x04, 0x31, 0xb2, 0xfb, 0x9f, 0xb7, 0xe8, 0xb1, 0x63  
+       , 0x41, 0x47, 0x70, 0xa3, 0x10, 0x03, 0x3f, 0x46, 0xd7, 0xe4, 0x06, 0x88, 0x9f, 0x60, 0x0f, 0x88  
+       , 0xc7, 0xdb, 0x91, 0xb8, 0x77, 0x12, 0x04, 0x64, 0xe9, 0x83, 0x34, 0x31, 0xc6, 0x0c, 0x33, 0xec  
+       , 0xf5, 0x3d, 0x60, 0x54, 0x61, 0xea, 0xd9, 0x41, 0x06, 0xfa, 0xc2, 0xec, 0x5f, 0xd5, 0x20, 0xfe  
+       , 0xc8, 0x7b, 0xe3, 0x28, 0x68, 0xee, 0x71, 0xaf, 0xf4, 0x65, 0x96, 0xb6, 0xa5, 0x8e, 0x00, 0xc4  
+       , 0x94, 0x41, 0x12, 0xc0, 0x20, 0x08, 0x03, 0x0f, 0x15, 0xf8, 0xff, 0x73, 0x01, 0x47, 0x9b, 0x00  
+       , 0x6f, 0x68, 0x99, 0x51, 0x31, 0x07, 0x0f, 0x1b, 0xc9, 0x6f, 0x06, 0x14, 0xd7, 0x4c, 0x8f, 0x00
+       , 0xe9, 0x70, 0xf7, 0xc4, 0x42, 0x13, 0x14, 0x12, 0x02, 0x8f, 0xe4, 0x65, 0x8f, 0x07, 0x35, 0x02
+       , 0x7b, 0xb2, 0x88, 0x31, 0x74, 0xf0, 0x4c, 0x65, 0xd0, 0xed, 0x09, 0xe0, 0xdf, 0x6f, 0xfa, 0xd8
+       , 0xd7, 0xd4, 0x53, 0xac, 0x17, 0x49, 0xab, 0x69, 0x97, 0x08, 0x3b, 0x33, 0x83, 0x62, 0x52, 0x82
+       , 0xb6, 0x13, 0xdf, 0x73, 0x78, 0x05, 0xe0, 0xa5, 0x4c, 0x52, 0x00, 0x08, 0x61, 0x20, 0xa8, 0xe0
+       , 0xf6, 0xff, 0xd7, 0x46, 0x2f, 0xda, 0xd5, 0xc8, 0x30, 0x2f, 0xd0, 0x98, 0xe5, 0x10, 0x14, 0xaa
+       , 0x8d, 0xcf, 0xaf, 0xdc, 0x1b, 0xae, 0x26, 0x0f, 0xf6, 0x19, 0x11, 0x0a, 0x98, 0xf2, 0x52, 0x5a
+       , 0x81, 0x0a, 0x08, 0xc0, 0x34, 0xa8, 0xd5, 0x83, 0xe0, 0x11, 0xc0, 0xe1, 0x0f, 0x7d, 0x1f, 0x95
+       , 0xd2, 0x1d, 0x82, 0x8c, 0xff, 0x35, 0x28, 0xf7, 0xa3, 0xa9, 0xc5, 0x68, 0x5b, 0xed, 0xbc, 0xfe
+       , 0xfe, 0x2d, 0x95, 0x83, 0x8d, 0xb9, 0x54, 0x68, 0x74, 0x20, 0xc6, 0x4b, 0x1e, 0x47, 0x00, 0xde
+       , 0xca, 0x25, 0x07, 0x60, 0x10, 0x84, 0x82, 0xa9, 0x6d, 0x2c, 0xdc, 0xff, 0xb0, 0x60, 0x62, 0x62
+       , 0x65, 0xa8, 0x1e, 0x41, 0x16, 0x7c, 0x5c, 0xb8, 0x98, 0x87, 0xcf, 0x73, 0x02, 0x8c, 0x44, 0x1f
+       , 0xb4, 0x03, 0xb6, 0xbb, 0x79, 0x84, 0x19, 0xd5, 0x18, 0x1b, 0x1d, 0xfc, 0x5b, 0x3e, 0x82, 0xfe
+       , 0x6f, 0x3e, 0xd6, 0xc3, 0xea, 0xe7, 0xfa, 0x0f, 0x62, 0x5f, 0x8e, 0x85, 0x14, 0x4c, 0xa8, 0xf0
+       , 0x03, 0x5f, 0xf7, 0xb2, 0xa2, 0x87, 0x54, 0x17, 0xfe, 0x24, 0xaf, 0x22, 0xa2, 0xfa, 0xce, 0x14
+       , 0x35, 0x26, 0xe1, 0x48, 0xb6, 0x40, 0x53, 0x86, 0x23, 0xb6, 0xf4, 0x09, 0xc0, 0x6b, 0x15, 0xe4
+       , 0x00, 0x08, 0x83, 0xb0, 0x10, 0xb2, 0x0c, 0xf8, 0xff, 0x5b, 0xd5, 0x2d, 0x31, 0x0a, 0xed, 0xf4
+       , 0x07, 0x5a, 0xb2, 0x25, 0xdb, 0xb1, 0x05, 0xda, 0x9f, 0x04, 0xc0, 0x6e, 0x1f, 0xa4, 0x79, 0x07
+       , 0xb6, 0x3a, 0x85, 0xf5, 0x38, 0x56, 0xa5, 0x06, 0xb3, 0x9a, 0x1d, 0x9e, 0xf0, 0xb0, 0x7f, 0xc2
+       , 0x01, 0x88, 0x8b, 0xf5, 0x0a, 0x80, 0x28, 0x24, 0x68, 0x7f, 0x06, 0x21, 0x11, 0xf8, 0x40, 0xd1
+       , 0xcf, 0xdc, 0xa3, 0xda, 0xb4, 0x61, 0x1c, 0x72, 0x28, 0xd2, 0x03, 0xba, 0x81, 0xf0, 0x82, 0x85
+       , 0x87, 0x79, 0x04, 0x2f, 0x0f, 0xe7, 0x2f, 0x14, 0xe9, 0x58, 0x59, 0x5f, 0x33, 0x73, 0x0b, 0x40
+       , 0x6b, 0xb9, 0xe3, 0x00, 0x0c, 0xc3, 0x20, 0x74, 0x89, 0xf2, 0x31, 0xf7, 0x3f, 0xaa, 0xe7, 0x16
+       , 0xb0, 0xdb, 0x1b, 0x44, 0x8a, 0x62, 0x65, 0x05, 0xe7, 0xc1, 0x75, 0x03, 0xa8, 0xa3, 0x95, 0x97
+       , 0xf0, 0x29, 0xad, 0x93, 0xa2, 0x67, 0xea, 0x70, 0xea, 0x25, 0x1f, 0xe4, 0x8b, 0x89, 0x43, 0xda
+       , 0xf8, 0xea, 0xdd, 0x37, 0x78, 0xb8, 0xf9, 0x8d, 0xfe, 0xe7, 0xeb, 0xa1, 0x6e, 0x41, 0x5d, 0x43
+       , 0x9d, 0x00, 0xb5, 0xff, 0xc5, 0xa0, 0x2e, 0x42, 0x4e, 0x64, 0x39, 0x30, 0x8a, 0x48, 0x7f, 0x18
+       , 0x4f, 0x07, 0x30, 0x77, 0x7c, 0x87, 0x6c, 0x40, 0x80, 0xe2, 0x23, 0x7a, 0x02, 0x87, 0x66, 0xe0
+       , 0x44, 0x7d, 0x8d, 0xb9, 0x36, 0x11, 0x76, 0x4f, 0x9f, 0x57, 0x00, 0xda, 0xcb, 0x1e, 0x0b, 0x60
+       , 0x10, 0x84, 0xc1, 0x0b, 0xaf, 0x43, 0xcb, 0xfd, 0x4f, 0xaa, 0xfd, 0xa1, 0x4b, 0xc3, 0x27, 0xf5
+       , 0x06, 0xf2, 0x14, 0x9d, 0x1c, 0x82, 0x49, 0x60, 0xe1, 0xd3, 0x82, 0x4c, 0x6a, 0x7e, 0xe7, 0xff
+       , 0x16, 0xce, 0xda, 0xbd, 0x01, 0xbc, 0x72, 0x6f, 0x6d, 0xdc, 0x15, 0xc8, 0x4d, 0x44, 0x99, 0x6f
+       , 0x60, 0x10, 0x74, 0x3d, 0x6f, 0xa9, 0xbe, 0x40, 0xcf, 0xb1, 0x60, 0x52, 0x60, 0x16, 0xa0, 0x24
+       , 0x08, 0x07, 0x80, 0x05, 0x63, 0x0e, 0xa8, 0x69, 0x00, 0x0e, 0x98, 0x91, 0xe8, 0x87, 0x20, 0x81
+       , 0xfd, 0xbd, 0x4f, 0x5a, 0xef, 0x76, 0xa6, 0x25, 0x4b, 0x92, 0x40, 0xff, 0x70, 0x56, 0x86, 0xfb
+       , 0xc5, 0xf9, 0x88, 0x13, 0x7b, 0xa8, 0x12, 0xaa, 0x83, 0x4a, 0xba, 0x02, 0xa5, 0x4f, 0x00, 0xda
+       , 0xab, 0x20, 0x07, 0x40, 0x10, 0x86, 0x69, 0x48, 0xd4, 0xb8, 0xf1, 0xff, 0x7f, 0x3a, 0x34, 0xc0
+       , 0xc9, 0xb2, 0x95, 0x27, 0x00, 0x64, 0x1c, 0xe0, 0x40, 0xba, 0xd1, 0xb5, 0xab, 0x12, 0xe0, 0x1c
+       , 0x5e, 0xa3, 0xd8, 0x11, 0x0a, 0x87, 0x19, 0x90, 0xb7, 0x82, 0x88, 0x83, 0x1a, 0x97, 0x00, 0x7a
+       , 0xeb, 0x8d, 0xd0, 0x77, 0x6a, 0xd2, 0x90, 0x3d, 0x93, 0x83, 0x9c, 0xff, 0x69, 0x87, 0x69, 0x02
+       , 0xb6, 0x70, 0xc9, 0x6c, 0x03, 0x6c, 0xc1, 0x7b, 0xd8, 0x30, 0x67, 0xa1, 0x44, 0x27, 0x36, 0xf5
+       , 0x68, 0x18, 0x01, 0xac, 0x34, 0x3f, 0xc0, 0x98, 0xae, 0x85, 0x0e, 0x14, 0xc8, 0xf9, 0x18, 0xe0
+       , 0x57, 0x95, 0x2c, 0x59, 0xdf, 0x4f, 0x91, 0x03, 0x64, 0x01, 0x5b, 0x93, 0x1b, 0x6f, 0x1b, 0xec
+       , 0x74, 0xad, 0x60, 0xa4, 0x5f, 0x00, 0x56, 0xac, 0x2d, 0x07, 0x40, 0x10, 0x86, 0x61, 0x8c, 0x18
+       , 0x15, 0xb8, 0xff, 0x39, 0x1d, 0x7e, 0x18, 0x9f, 0x5d, 0xd9, 0x12, 0x0f, 0xe0, 0x08, 0x7c, 0xf0
+       , 0x45, 0xba, 0xad, 0x6b, 0xf9, 0x3f, 0x01, 0x00, 0x4a, 0x89, 0x5c, 0xc9, 0x66, 0x13, 0x16, 0xbb
+       , 0x00, 0x76, 0x91, 0x55, 0xb8, 0xab, 0xe0, 0x86, 0x8a, 0xc7, 0x74, 0x0f, 0x55, 0xcf, 0x4e, 0xb9
+       , 0x73, 0x78, 0x34, 0xec, 0x79, 0x2a, 0xff, 0xdc, 0x97, 0xd7, 0x3f, 0x5d, 0x70, 0xfb, 0x88, 0x78
+       , 0xc2, 0x67, 0x0a, 0x77, 0x96, 0x82, 0xc0, 0x14, 0x98, 0x21, 0x56, 0x4f, 0xa0, 0xb3, 0xd8, 0x69
+       , 0xa8, 0xb7, 0x16, 0x88, 0x03, 0x1b, 0x41, 0xe1, 0x8f, 0xa3, 0x2f, 0x84, 0x92, 0x24, 0x8a, 0x64
+       , 0xa9, 0x39, 0xa5, 0x5c, 0x0a, 0x9a, 0x36, 0x63, 0x26, 0x41, 0x34, 0xe0, 0x89, 0xd0, 0x62, 0xe7
+       , 0x4c, 0x4e, 0x9a, 0xfe, 0xf5, 0xd2, 0xaf, 0x00, 0xac, 0x58, 0x5b, 0x0a, 0xc0, 0x20, 0x0c, 0x2b
+       , 0x7b, 0xc0, 0xee, 0x7f, 0xd4, 0x22, 0x63, 0xdd, 0x70, 0x5b, 0xd2, 0x07, 0x5e, 0xc0, 0x8a, 0xe2
+       , 0x8f, 0x20, 0x89, 0x6d, 0x52, 0x27, 0x13, 0x00, 0xf0, 0x42, 0x5c, 0x51, 0x61, 0x08, 0x3c, 0x43
+       , 0x55, 0x39, 0xb1, 0x34, 0x6d, 0x90, 0x59, 0x57, 0x5a, 0xb7, 0x9e, 0x44, 0xdf, 0xb2, 0x13, 0x88
+       , 0x0e, 0x8c, 0xe0, 0xdf, 0x04, 0xff, 0xa9, 0xe6, 0x97, 0x5f, 0x11, 0xd5, 0xfd, 0xbe, 0xfd, 0x1b
+       , 0x06, 0x08, 0x3b, 0x91, 0x14, 0x60, 0x19, 0x3e, 0x34, 0x85, 0x58, 0x96, 0x8a, 0xad, 0xd2, 0xa0
+       , 0x08, 0x58, 0xa3, 0x0e, 0x31, 0x0f, 0xe8, 0x76, 0xf6, 0x60, 0x00, 0xaa, 0x7b, 0x61, 0xd8, 0x01
+       , 0xb5, 0x3a, 0x5d, 0xa8, 0xc2, 0x20, 0xb8, 0x55, 0xf3, 0x5b, 0x5a, 0xbc, 0x8c, 0x0e, 0x0e, 0x70
+       , 0x74, 0x16, 0x62, 0xbf, 0x00, 0xac, 0x58, 0x5b, 0x0a, 0xc0, 0x20, 0x0c, 0x1b, 0x8c, 0x09, 0xc2
+       , 0xee, 0x7f, 0xcf, 0x0e, 0x86, 0x2b, 0xb8, 0x47, 0x9a, 0xa8, 0xbb, 0x80, 0x08, 0xfd, 0xd6, 0xa4
+       , 0xa6, 0x69, 0x66, 0x12, 0x80, 0x96, 0x3e, 0xa3, 0x89, 0xa2, 0xe9, 0x71, 0xec, 0x30, 0xc0, 0x6e
+       , 0xd6, 0xaa, 0xcc, 0x0f, 0x1e, 0xe4, 0x45, 0x66, 0xd3, 0x9b, 0xf8, 0xd3, 0x6e, 0x82, 0x85, 0xca
+       , 0x52, 0x99, 0x47, 0x08, 0x7c, 0x94, 0x57, 0xe6, 0xf3, 0x8f, 0x1f, 0x98, 0xc5, 0x2d, 0xdc, 0x00
+       , 0x9e, 0x11, 0x05, 0x29, 0x92, 0xd3, 0x3e, 0xdb, 0x45, 0x68, 0x1d, 0x93, 0x80, 0xf8, 0xf7, 0x59
+       , 0xb0, 0x29, 0x8b, 0x10, 0x01, 0x89, 0x22, 0xc4, 0x8f, 0x80, 0x8e, 0x48, 0x17, 0x58, 0xf0, 0x1c
+       , 0x70, 0x67, 0xdc, 0x2d, 0xfc, 0x41, 0x69, 0x1c, 0xe8, 0xaa, 0xf2, 0x06, 0x7b, 0xbd, 0x21, 0x48
+       , 0x58, 0x20, 0xa6, 0x80, 0xf6, 0x09, 0xc0, 0x8a, 0x99, 0x23, 0x01, 0x08, 0xc3, 0x30, 0x70, 0x86
+       , 0x9b, 0xff, 0x7f, 0x34, 0x98, 0x02, 0x12, 0x12, 0x40, 0xb6, 0x1c, 0x4a, 0x1a, 0xf8, 0x82, 0x0f
+       , 0x49, 0xab, 0x7f, 0x16, 0x80, 0xb1, 0xe0, 0xaa, 0x55, 0x73, 0x54, 0xe4, 0x57, 0xb1, 0xd9, 0x07
+       , 0x4c, 0x7d, 0x09, 0x12, 0x04, 0xdb, 0xf0, 0xdc, 0xa9, 0xd7, 0xbf, 0x91, 0xbe, 0x68, 0x00, 0x86
+       , 0xc0, 0x14, 0x9f, 0x5c, 0x93, 0xe7, 0x61, 0xb2, 0x93, 0x6b, 0xe9, 0x80, 0x25, 0x9c, 0x57, 0x79
+       , 0x1a, 0x38, 0xea, 0xce, 0x5b, 0x85, 0x5e, 0xbf, 0xc0, 0x4a, 0x51, 0x03, 0x02, 0xe6, 0xd2, 0xae
+       , 0x75, 0x42, 0x63, 0x35, 0xe4, 0x5e, 0xdc, 0x0f, 0x51, 0x61, 0x78, 0x8c, 0x2a, 0x43, 0x10, 0x9b
+       , 0x3d, 0xcd, 0x13, 0xef, 0x22, 0x19, 0x0a, 0x12, 0x4e, 0xd4, 0xaa, 0xa2, 0x53, 0x7a, 0xb1, 0x74
+       , 0x00, 0x51, 0x84, 0x39, 0x37, 0x9f, 0x3b, 0x8c, 0x5b, 0x00, 0x56, 0xac, 0x20, 0x05, 0x60, 0x18
+       , 0x84, 0xc1, 0xf6, 0xff, 0xb7, 0xb6, 0x3b, 0x2a, 0xb4, 0x34, 0x89, 0x8a, 0xe7, 0xb1, 0x09, 0x3d
+       , 0xf4, 0x56, 0x8c, 0x49, 0x13, 0x7f, 0x00, 0x00, 0x2a, 0x81, 0xee, 0x4a, 0x73, 0x28, 0xf5, 0x68
+       , 0xfa, 0xe4, 0x41, 0x3d, 0x73, 0x0c, 0x09, 0x52, 0xf7, 0xbf, 0x18, 0xad, 0x3c, 0xe6, 0x56, 0xce
+       , 0x27, 0x56, 0x3e, 0x1d, 0xbb, 0x7a, 0xee, 0x95, 0x79, 0x5f, 0x55, 0x9a, 0x24, 0x10, 0x64, 0xe9
+       , 0x2e, 0x49, 0x8a, 0x58, 0x70, 0xf5, 0x9f, 0x9c, 0xeb, 0x21, 0x62, 0xe0, 0x20, 0x83, 0x29, 0xa0
+       , 0xb9, 0x11, 0x04, 0xe7, 0x50, 0x04, 0x04, 0x8a, 0xe2, 0x78, 0x70, 0x11, 0x35, 0x13, 0xf9, 0xda
+       , 0xe9, 0x09, 0x10, 0x24, 0xee, 0x6f, 0xee, 0xe8, 0x08, 0xc0, 0x9a, 0x19, 0xec, 0x00, 0x08, 0x83
+       , 0x30, 0xd4, 0x93, 0xff, 0xff, 0xa7, 0xc3, 0x78, 0xd0, 0x19, 0x62, 0x7c, 0x14, 0x66, 0xbc, 0x4f
+       , 0x0e, 0x9c, 0x96, 0x65, 0xa1, 0xa1, 0x94, 0x6e, 0x16, 0x00, 0x1e, 0xc3, 0xb0, 0x92, 0xbe, 0xd9
+       , 0x37, 0x85, 0x51, 0xf5, 0x66, 0xcd, 0x0c, 0x28, 0x8e, 0x60, 0x53, 0x41, 0x70, 0x72, 0xea, 0x2d
+       , 0x7f, 0x51, 0x7f, 0x11, 0xbf, 0xfb, 0x67, 0xeb, 0xca, 0x81, 0xeb, 0x7f, 0xfe, 0x12, 0x25, 0x73
+       , 0xdd, 0x34, 0xd5, 0x92, 0x46, 0xb5, 0xc6, 0xc2, 0xf0, 0x2a, 0xb4, 0x17, 0xac, 0xa4, 0x10, 0x63
+       , 0xbd, 0x03, 0x42, 0x5a, 0x20, 0xf2, 0x4a, 0xae, 0x12, 0x64, 0x91, 0xca, 0x9d, 0x1a, 0xd6, 0x20
+       , 0x41, 0x8b, 0x72, 0x2f, 0x5b, 0xc3, 0x8c, 0x89, 0xf4, 0x08, 0x40, 0x8b, 0x15, 0xe4, 0x00, 0x08
+       , 0xc2, 0x30, 0x09, 0x99, 0xfc, 0xff, 0xa3, 0xec, 0xa4, 0x07, 0x96, 0x19, 0xd7, 0x55, 0x78, 0x80
+       , 0x46, 0xc2, 0x03, 0x9a, 0x6e, 0xb4, 0xa5, 0x9f, 0x06, 0x10, 0x20, 0x10, 0x31, 0x21, 0xf7, 0xc1
+       , 0x76, 0x68, 0x8e, 0x6a, 0x4f, 0xf2, 0xbb, 0x22, 0x6e, 0x1e, 0xd3, 0xca, 0x4e, 0x4a, 0xe9, 0x53
+       , 0x36, 0x70, 0xf7, 0xd3, 0x78, 0x6d, 0x06, 0x4e, 0x76, 0x6d, 0x17, 0x8d, 0xf5, 0xbf, 0x83, 0xf2
+       , 0xd5, 0x7d, 0x73, 0x2f, 0xc5, 0xf8, 0x10, 0xa4, 0x56, 0x80, 0x10, 0x09, 0xf3, 0x1f, 0xb6, 0x37
+       , 0x84, 0x00, 0xb3, 0x96, 0x59, 0x6c, 0x2c, 0xbe, 0x8d, 0x7b, 0x9f, 0x83, 0xc0, 0xf5, 0x05, 0x37
+       , 0x13, 0x71, 0xfc, 0xa1, 0xc3, 0x5a, 0xde, 0x41, 0xba, 0x05, 0x10, 0xf9, 0x11, 0x00, 0x74, 0x1d
+       , 0xa8, 0xb5, 0x03, 0xae, 0x6c, 0x3f, 0x02, 0xc3, 0xfe, 0xc3, 0xfb, 0x77, 0xef, 0xde, 0xbd, 0x07
+       , 0xc1, 0xb7, 0x5f, 0xbf, 0x80, 0xfb, 0x58, 0xdf, 0xa1, 0x1d, 0x5d, 0x48, 0xf1, 0x03, 0x2b, 0x7b
+       , 0x7e, 0x40, 0x06, 0xda, 0xa0, 0x8d, 0x4e, 0xa8, 0xcf, 0xfe, 0xe1, 0x2f, 0xd6, 0xa9, 0x0e, 0x40
+       , 0x31, 0x01, 0x19, 0xe3, 0x06, 0x66, 0x04, 0xe8, 0xc0, 0xec, 0x6f, 0x56, 0x50, 0xd0, 0xff, 0x81
+       , 0xb5, 0x84, 0x61, 0xce, 0x83, 0xa7, 0x78, 0x70, 0xc3, 0x00, 0x34, 0x52, 0x0e, 0x2e, 0x82, 0xe0
+       , 0x23, 0x53, 0x0c, 0xe0, 0x16, 0x19, 0xb0, 0x1f, 0xc7, 0x4a, 0x56, 0x3e, 0x00, 0x08, 0x20, 0x32
+       , 0x23, 0x00, 0xe8, 0x3e, 0x50, 0x95, 0xfb, 0xe5, 0x0b, 0xb8, 0xcc, 0x01, 0x15, 0x3a, 0xc0, 0xd0
+       , 0x7f, 0x0b, 0x8c, 0x80, 0xf7, 0xef, 0x21, 0x3d, 0x5d, 0x50, 0xf2, 0x87, 0x0e, 0x33, 0x7c, 0xfb
+       , 0x81, 0x14, 0xfc, 0x90, 0x7e, 0x2f, 0xc4, 0x87, 0x90, 0x74, 0x4f, 0x9e, 0x03, 0xa8, 0x05, 0x60
+       , 0x61, 0xfb, 0x87, 0x05, 0x08, 0xff, 0xc0, 0x66, 0x81, 0xfe, 0x40, 0x3b, 0xe3, 0x7f, 0xff, 0xc0
+       , 0xc6, 0xa3, 0x20, 0x49, 0x1e, 0x14, 0xf0, 0xa0, 0x60, 0x87, 0x54, 0x52, 0xf0, 0xf6, 0x30, 0x24
+       , 0xed, 0x70, 0x73, 0x03, 0xcb, 0x22, 0x92, 0xf3, 0x01, 0x40, 0x00, 0x91, 0x13, 0x01, 0xa0, 0x92
+       , 0xe7, 0xeb, 0x37, 0x50, 0xe8, 0x7f, 0xfa, 0x08, 0x2e, 0x6f, 0x40, 0x81, 0xff, 0xf6, 0x2d, 0x28
+       , 0xf4, 0xc1, 0x43, 0x0c, 0xa0, 0x51, 0x06, 0xd0, 0x90, 0x03, 0x38, 0xfc, 0xc1, 0x81, 0x0f, 0x22
+       , 0x20, 0x2d, 0x39, 0x20, 0xfe, 0x03, 0x69, 0x6d, 0xfe, 0xfd, 0x43, 0xdf, 0x44, 0x8f, 0x0f, 0xfc
+       , 0x01, 0x57, 0x3e, 0x2c, 0x90, 0x99, 0x37, 0x10, 0x87, 0xed, 0x0f, 0x6c, 0x22, 0xee, 0x0f, 0xb4
+       , 0x23, 0x8e, 0xd4, 0x2a, 0x00, 0x4d, 0x51, 0xff, 0xfb, 0x0b, 0x1b, 0x93, 0x85, 0x0c, 0x8b, 0x03
+       , 0xfb, 0x21, 0xc0, 0x06, 0x11, 0x30, 0x1f, 0x00, 0x6b, 0x16, 0x92, 0xac, 0x06, 0x08, 0x20, 0x92
+       , 0x23, 0x00, 0xe8, 0x10, 0x60, 0xa8, 0x02, 0xc3, 0x19, 0xd8, 0xba, 0x07, 0x85, 0x3e, 0x30, 0xe8
+       , 0xc1, 0xc1, 0x0f, 0x64, 0x83, 0x87, 0x18, 0xa0, 0xc9, 0x1f, 0x54, 0x02, 0x41, 0x4a, 0x1f, 0x68
+       , 0xb7, 0x0b, 0xdc, 0xf2, 0x81, 0x8e, 0xb5, 0xfd, 0xa5, 0x75, 0x59, 0x4f, 0x0e, 0xf8, 0x0f, 0x4a
+       , 0x58, 0xff, 0x20, 0x03, 0x7f, 0x7f, 0xa0, 0x81, 0xfe, 0x0f, 0x36, 0x35, 0xfd, 0xef, 0xcf, 0x3f
+       , 0x44, 0x7f, 0xe4, 0x1f, 0x68, 0x55, 0x00, 0x6c, 0x4d, 0x00, 0x74, 0x3c, 0x0a, 0xb2, 0x26, 0x80
+       , 0x81, 0x91, 0x89, 0x87, 0x9b, 0x0b, 0xd8, 0xd6, 0x22, 0xde, 0x5a, 0x80, 0x00, 0x22, 0x2d, 0x02
+       , 0x80, 0x36, 0x82, 0x87, 0x18, 0x80, 0x6d, 0x1e, 0x68, 0xc9, 0x03, 0x4c, 0xf7, 0xc0, 0xd0, 0x87
+       , 0xa4, 0x7d, 0xf0, 0x30, 0x03, 0x08, 0x02, 0xfb, 0xc1, 0xe0, 0xd4, 0xff, 0xf5, 0x3b, 0x78, 0xdc
+       , 0xff, 0x27, 0x64, 0x84, 0x1f, 0xd2, 0x88, 0x1e, 0xe8, 0x32, 0x07, 0x3f, 0x00, 0x06, 0x2c, 0x28
+       , 0x81, 0x80, 0x12, 0x39, 0x6c, 0x0c, 0xea, 0x2f, 0xa8, 0xad, 0x03, 0x0a, 0xfd, 0xff, 0x7f, 0xe1
+       , 0xc3, 0xe0, 0xf0, 0xc2, 0x07, 0xa4, 0x87, 0x91, 0x91, 0x11, 0xa9, 0xeb, 0x01, 0x6c, 0xf2, 0x72
+       , 0x73, 0x71, 0x11, 0x3f, 0xdb, 0x0c, 0x10, 0x40, 0xa4, 0x45, 0x00, 0xb0, 0x24, 0x01, 0x26, 0xed
+       , 0x4f, 0x9f, 0x3f, 0x81, 0xda, 0xf8, 0xa0, 0x5a, 0x17, 0x98, 0xfa, 0xdf, 0x7c, 0x00, 0x87, 0x3e
+       , 0x78, 0x9c, 0xed, 0x0b, 0x74, 0xc0, 0x13, 0x5a, 0xf7, 0x7e, 0x83, 0xb5, 0xf9, 0x41, 0x6d, 0x1e
+       , 0x60, 0xed, 0xf5, 0x6f, 0x10, 0x26, 0x7c, 0x6c, 0x00, 0xbc, 0x10, 0x03, 0x29, 0xc1, 0x83, 0x02
+       , 0xff, 0x3f, 0x78, 0xb5, 0xc6, 0x7f, 0x06, 0x94, 0xde, 0x20, 0x23, 0x6c, 0x31, 0x06, 0xac, 0xa3
+       , 0x01, 0xeb, 0x7d, 0x73, 0x71, 0x71, 0x11, 0x69, 0x17, 0x40, 0x00, 0x91, 0x10, 0x01, 0xc0, 0x84
+       , 0x0c, 0x4c, 0xd4, 0xa0, 0xc1, 0x1d, 0x60, 0x8b, 0xf3, 0x03, 0xb0, 0xe8, 0xff, 0x00, 0xaa, 0x74
+       , 0x3f, 0x00, 0x4b, 0x1e, 0xc8, 0xf8, 0xe6, 0x17, 0x70, 0x05, 0xf0, 0x15, 0xd2, 0xfa, 0x84, 0x8e
+       , 0x3a, 0xfc, 0x00, 0x25, 0x7e, 0x60, 0x13, 0x1a, 0x58, 0xe8, 0x93, 0x13, 0x12, 0x03, 0x07, 0x80
+       , 0x41, 0x0c, 0xac, 0xb1, 0xa0, 0x7d, 0xba, 0x7f, 0x90, 0xe1, 0x6f, 0xd8, 0x48, 0x38, 0x03, 0x6c
+       , 0x14, 0x16, 0xba, 0x14, 0x83, 0x01, 0xdc, 0xd1, 0x03, 0x8f, 0x76, 0x30, 0x32, 0xb1, 0x40, 0xd6
+       , 0xbe, 0x30, 0x33, 0x11, 0x39, 0x56, 0x01, 0x10, 0x40, 0xc4, 0x46, 0x00, 0xb0, 0xf4, 0x00, 0x16
+       , 0xea, 0xa0, 0xc1, 0xcc, 0x4f, 0xe0, 0xd2, 0x07, 0x98, 0xec, 0xdf, 0xbd, 0x05, 0xb7, 0x79, 0xc0
+       , 0x65, 0xcf, 0x17, 0x58, 0xdb, 0x07, 0x3c, 0xfc, 0xfc, 0xe3, 0xdb, 0x37, 0x78, 0xb3, 0x07, 0xd2
+       , 0x96, 0x23, 0x3b, 0x20, 0x06, 0x16, 0x00, 0x1d, 0x0f, 0xce, 0x02, 0x90, 0xb1, 0x3f, 0xa4, 0x19
+       , 0x08, 0x06, 0x06, 0xa4, 0x81, 0x3f, 0xf0, 0x42, 0x24, 0x70, 0xb8, 0x83, 0x46, 0x9b, 0x58, 0xa1
+       , 0x7d, 0x6d, 0x66, 0x26, 0x66, 0x62, 0xc6, 0xec, 0x00, 0x02, 0x88, 0xa8, 0x08, 0x00, 0xe6, 0x46
+       , 0x60, 0x82, 0x86, 0x8c, 0x6f, 0x7e, 0x00, 0xa5, 0x7e, 0x50, 0xda, 0x07, 0x86, 0x3f, 0x52, 0xaa
+       , 0x07, 0xb6, 0xfc, 0xbf, 0x7c, 0x05, 0xcf, 0x70, 0x41, 0x26, 0x18, 0x41, 0x33, 0x5c, 0xe0, 0x62
+       , 0x1f, 0x58, 0x84, 0x52, 0x12, 0x04, 0x03, 0x0e, 0x80, 0xc5, 0x11, 0x34, 0x27, 0xfc, 0x43, 0x6e
+       , 0xb5, 0xfd, 0x87, 0x0c, 0xfd, 0x31, 0xc2, 0x26, 0x21, 0xc0, 0xb3, 0x9f, 0xe0, 0xf9, 0x06, 0x66
+       , 0x56, 0x56, 0xd8, 0x78, 0x13, 0x64, 0x81, 0x06, 0x7e, 0xf3, 0x01, 0x02, 0x88, 0xa8, 0x08, 0xf8
+       , 0x09, 0x1a, 0xa1, 0x05, 0xf6, 0xb9, 0xbe, 0x7e, 0x82, 0xf4, 0xb9, 0xde, 0x83, 0xaa, 0x5f, 0xe8
+       , 0x84, 0x16, 0xa4, 0xc8, 0x07, 0x91, 0x90, 0xa9, 0x45, 0x50, 0xab, 0x1f, 0xd2, 0xe6, 0x01, 0xf6
+       , 0xb5, 0xc8, 0x18, 0xc9, 0x19, 0x84, 0x00, 0x58, 0x11, 0x03, 0x0b, 0x24, 0x06, 0xc8, 0x10, 0x2c
+       , 0x08, 0x80, 0xc7, 0xbf, 0x61, 0xcb, 0x1f, 0x21, 0xa5, 0x3e, 0x64, 0x70, 0x83, 0x15, 0x3a, 0xc0
+       , 0x04, 0x1a, 0xdf, 0x00, 0xd2, 0xc0, 0x38, 0x21, 0x58, 0x19, 0x00, 0x04, 0x10, 0xe1, 0x08, 0x00
+       , 0x36, 0xdd, 0x41, 0xed, 0x4e, 0x50, 0xf2, 0xff, 0x04, 0x2a, 0xfd, 0x41, 0x4d, 0x7f, 0xe8, 0x48
+       , 0x03, 0xb8, 0xb9, 0x0f, 0x29, 0x75, 0xbe, 0x7e, 0x83, 0x0f, 0x77, 0xc2, 0x06, 0x6f, 0x87, 0x47
+       , 0xe8, 0x43, 0x00, 0xb0, 0x4e, 0x06, 0xe6, 0x03, 0x10, 0x0b, 0x3a, 0xed, 0x00, 0x1d, 0xe2, 0x83
+       , 0x54, 0xba, 0xcc, 0x90, 0xa9, 0x1f, 0x66, 0x16, 0xe8, 0x1a, 0x23, 0xc8, 0xc2, 0x23, 0xf0, 0x92
+       , 0x30, 0x66, 0x16, 0x16, 0x76, 0xbc, 0xf3, 0x68, 0x00, 0x01, 0x44, 0x20, 0x02, 0xc0, 0xd3, 0x5b
+       , 0xdf, 0x21, 0x43, 0x0e, 0xa0, 0x61, 0x7d, 0xf0, 0x58, 0x27, 0xb0, 0x1a, 0x80, 0x84, 0xfc, 0xb7
+       , 0x2f, 0x5f, 0xbe, 0x41, 0xc2, 0x1e, 0x3c, 0xe2, 0x86, 0x98, 0xbb, 0x18, 0x5e, 0xa1, 0x0f, 0x01
+       , 0x40, 0x1f, 0x01, 0xfd, 0xc5, 0x00, 0xa9, 0x7a, 0x99, 0x18, 0x20, 0x4d, 0x4e, 0xf0, 0xfa, 0x17
+       , 0x66, 0xe8, 0xd4, 0x27, 0xb8, 0xfe, 0x05, 0x47, 0x00, 0x3b, 0x08, 0xb1, 0xb2, 0xb1, 0xb2, 0xb3
+       , 0x83, 0xe7, 0x40, 0x59, 0xf0, 0xcc, 0x27, 0x03, 0x04, 0x10, 0x81, 0x08, 0x00, 0x06, 0x27, 0x30
+       , 0x65, 0x83, 0xc7, 0xf9, 0x41, 0xb3, 0x5a, 0xe0, 0xd6, 0xe7, 0x07, 0x48, 0x59, 0xff, 0x0d, 0x5e
+       , 0xde, 0x43, 0x06, 0x1a, 0xc0, 0x83, 0xfc, 0xe0, 0x72, 0xff, 0xe7, 0xf0, 0x0b, 0x7d, 0x08, 0x00
+       , 0xc5, 0xc1, 0xef, 0xdf, 0xf0, 0x66, 0x3f, 0xac, 0xf0, 0x81, 0xa5, 0x7f, 0xf0, 0x18, 0xf7, 0x47
+       , 0x96, 0x8f, 0xec, 0xd0, 0xa5, 0x5e, 0xe0, 0xf9, 0x66, 0xf0, 0xaa, 0x30, 0x2e, 0x4e, 0x9c, 0x05
+       , 0x11, 0x40, 0x00, 0xe1, 0x8b, 0x00, 0x60, 0xfb, 0x05, 0x58, 0x97, 0x02, 0x43, 0xfa, 0x33, 0x64
+       , 0xb4, 0x19, 0x34, 0xaf, 0xf5, 0xf1, 0x1b, 0x0c, 0x7c, 0x87, 0x91, 0xdf, 0x7f, 0x40, 0xdb, 0x9c
+       , 0x90, 0xb9, 0xdd, 0xe1, 0x1a, 0xfa, 0x10, 0x00, 0xec, 0x92, 0x01, 0x9b, 0x46, 0xf0, 0xf9, 0x4e
+       , 0x26, 0xd8, 0xac, 0x3f, 0x64, 0x82, 0x01, 0x32, 0xeb, 0x0f, 0x0c, 0x27, 0xc8, 0xaa, 0x2f, 0x0e
+       , 0x0e, 0xf0, 0xea, 0x47, 0x36, 0x76, 0xf0, 0xfa, 0x3c, 0xec, 0x41, 0x0d, 0x10, 0x40, 0xf8, 0x22
+       , 0xe0, 0xd7, 0x2f, 0xd0, 0x28, 0x3e, 0xa8, 0x6b, 0x0b, 0x2c, 0x7f, 0x40, 0x81, 0xff, 0x09, 0xd8
+       , 0x08, 0x85, 0x34, 0xf1, 0xe1, 0xe1, 0x0e, 0xce, 0x00, 0xa0, 0x0e, 0x2f, 0x64, 0x6e, 0x0b, 0xd8
+       , 0x66, 0xa0, 0x8d, 0xc7, 0x07, 0x11, 0x00, 0xb6, 0xaa, 0xe1, 0xeb, 0xc0, 0x20, 0xcb, 0x20, 0x61
+       , 0xab, 0x5e, 0x58, 0x41, 0x2d, 0x20, 0x70, 0x24, 0x70, 0x7c, 0xe4, 0x04, 0x86, 0x3e, 0x08, 0x73
+       , 0x70, 0xb2, 0x71, 0xb0, 0x83, 0x57, 0x22, 0xf1, 0x60, 0x35, 0x0d, 0x20, 0x80, 0x70, 0x46, 0x00
+       , 0xb0, 0xbc, 0x03, 0x06, 0x2c, 0x78, 0xd8, 0xe7, 0x0b, 0x64, 0x3d, 0x03, 0xb0, 0x08, 0x02, 0x86
+       , 0x36, 0x64, 0x76, 0xeb, 0x1b, 0xa8, 0x5d, 0x04, 0x99, 0x2d, 0xfd, 0x01, 0x5d, 0x53, 0x0b, 0x1e
+       , 0xc1, 0xa5, 0x99, 0xaf, 0x07, 0x17, 0x00, 0xfa, 0x95, 0x89, 0xf1, 0x17, 0xa4, 0xfc, 0x81, 0xac
+       , 0x74, 0x87, 0x2e, 0x04, 0x06, 0xaf, 0xbc, 0x06, 0xd6, 0xc4, 0xc0, 0xf4, 0x0a, 0x5a, 0xf2, 0x05
+       , 0x5e, 0xcc, 0xc2, 0x09, 0xc9, 0x09, 0x60, 0x80, 0x69, 0x14, 0x40, 0x00, 0xe1, 0x88, 0x80, 0xff
+       , 0xff, 0x81, 0x09, 0xfa, 0x3b, 0x64, 0xdc, 0x07, 0x12, 0x01, 0x9f, 0x3e, 0x7f, 0x87, 0x04, 0x39
+       , 0x2c, 0xd9, 0xc3, 0x66, 0x57, 0xc0, 0xbd, 0x2d, 0xf0, 0x38, 0x0f, 0x6d, 0x3d, 0x3d, 0xc8, 0x00
+       , 0xb0, 0x7b, 0xc9, 0xf4, 0xfb, 0x17, 0x13, 0x33, 0x3c, 0x07, 0x80, 0x92, 0x3e, 0x64, 0xed, 0x35
+       , 0x24, 0xac, 0x81, 0xe9, 0x15, 0xbc, 0xda, 0x11, 0x18, 0x07, 0x5c, 0xe0, 0x28, 0xc0, 0xbe, 0xde
+       , 0x14, 0x20, 0x80, 0xb0, 0x47, 0x00, 0x68, 0x46, 0xee, 0x27, 0xb8, 0xfc, 0xf9, 0x0a, 0x2e, 0x81
+       , 0xc0, 0x2b, 0x7b, 0xbe, 0xc3, 0xc1, 0x0f, 0xe8, 0x38, 0xc3, 0xcf, 0x1f, 0x3f, 0xa1, 0x73, 0xd7
+       , 0x7f, 0x7e, 0xff, 0x1f, 0xd6, 0x45, 0x3f, 0x26, 0x00, 0x56, 0x75, 0xbf, 0x7f, 0xfd, 0x61, 0x64
+       , 0xfa, 0xcd, 0xc2, 0xf4, 0x93, 0x05, 0x69, 0xc9, 0x11, 0x3c, 0x06, 0x80, 0x41, 0xc6, 0xcd, 0xfd
+       , 0x99, 0x1b, 0xb4, 0xdc, 0x91, 0x0b, 0xb2, 0xe0, 0x14, 0xb2, 0x08, 0x0c, 0xcd, 0x1c, 0x80, 0x00
+       , 0xc2, 0x16, 0x01, 0xff, 0x19, 0xc0, 0xc9, 0x1f, 0x54, 0xff, 0x42, 0xd3, 0xff, 0xe7, 0xcf, 0x3f
+       , 0x7e, 0x40, 0x92, 0x3d, 0x7c, 0x9d, 0x0c, 0x74, 0x66, 0x11, 0x32, 0x6f, 0xfa, 0xf7, 0xcf, 0xd0
+       , 0xee, 0xee, 0x92, 0x07, 0xfe, 0xfc, 0xfd, 0xc3, 0xf8, 0x9b, 0xf1, 0x17, 0x30, 0x13, 0xfc, 0x04
+       , 0xe7, 0x00, 0x36, 0xd6, 0x1f, 0x3f, 0x20, 0x11, 0xc0, 0xfa, 0x1d, 0xb4, 0xe4, 0x8e, 0x03, 0x18
+       , 0x6e, 0xa0, 0x05, 0x8e, 0x5c, 0x20, 0xf4, 0x9d, 0xf3, 0x3b, 0x3b, 0x27, 0xb0, 0x59, 0x8a, 0x9e
+       , 0x09, 0x00, 0x02, 0x08, 0x4b, 0xfb, 0x14, 0xb4, 0x86, 0xfc, 0xd7, 0x4f, 0x60, 0x58, 0x03, 0x5b
+       , 0xfa, 0xe0, 0xe9, 0x15, 0xd0, 0x70, 0x03, 0xb0, 0x87, 0x0b, 0x5e, 0x3b, 0x0e, 0x2f, 0x75, 0xa0
+       , 0xcb, 0xc7, 0x21, 0xbb, 0x58, 0xe8, 0xe4, 0xe3, 0xc1, 0x07, 0xfe, 0x80, 0xa7, 0x92, 0x21, 0x0b
+       , 0xcb, 0xa0, 0xbb, 0x1c, 0x40, 0x0b, 0x9f, 0x20, 0x8c, 0xef, 0xe0, 0x11, 0x32, 0x50, 0x5f, 0xe9
+       , 0x2b, 0x78, 0x70, 0x0c, 0x54, 0x60, 0x60, 0x84, 0x15, 0x40, 0x00, 0x61, 0x89, 0x00, 0xa0, 0x22
+       , 0x90, 0x21, 0x90, 0x76, 0x26, 0x78, 0xde, 0x11, 0xba, 0xa0, 0xff, 0x07, 0x64, 0x31, 0x09, 0x64
+       , 0x80, 0x19, 0xbc, 0x48, 0x06, 0x9c, 0xfc, 0xff, 0x8d, 0xe0, 0x8d, 0xae, 0xe0, 0xb9, 0xe5, 0xbf
+       , 0xe0, 0xd5, 0xad, 0xe0, 0xe9, 0x3e, 0x48, 0x48, 0xfd, 0xfc, 0x0e, 0x0d, 0xaf, 0x1f, 0x3f, 0xc1
+       , 0xe3, 0x94, 0xa0, 0x28, 0x00, 0xd6, 0xa7, 0x3f, 0xc0, 0xc3, 0xf2, 0x68, 0x26, 0x00, 0x04, 0x10
+       , 0x7a, 0x04, 0x00, 0x8d, 0x03, 0x2f, 0x9c, 0xfa, 0x0e, 0x5e, 0x51, 0x02, 0x9d, 0xdc, 0x02, 0xa7
+       , 0x79, 0xd8, 0xd0, 0x3e, 0xac, 0xd1, 0xf3, 0x0b, 0xb6, 0x64, 0x80, 0x5e, 0x9e, 0x1d, 0xa4, 0x00
+       , 0x1c, 0x08, 0xa0, 0x49, 0x6e, 0xe8, 0xac, 0xd3, 0x2f, 0x70, 0xd9, 0x0c, 0x49, 0xad, 0x3f, 0x7e
+       , 0x7c, 0x85, 0x4e, 0xd1, 0x82, 0xf2, 0x00, 0x30, 0x5e, 0x80, 0xb2, 0x7f, 0x51, 0x43, 0x0c, 0x20
+       , 0x80, 0xd0, 0x23, 0x00, 0x5c, 0xfe, 0xfc, 0x02, 0x16, 0xf5, 0xdf, 0xc0, 0x4b, 0xf9, 0xc1, 0xa1
+       , 0x0f, 0x2e, 0x6f, 0x7e, 0x80, 0xe7, 0xd3, 0x61, 0x4b, 0xc9, 0x41, 0x6b, 0x36, 0x40, 0xb6, 0x8e
+       , 0xc4, 0xa2, 0x1f, 0x13, 0x80, 0x16, 0x53, 0x82, 0x83, 0x04, 0x92, 0x0b, 0xc0, 0x39, 0xe1, 0x27
+       , 0xac, 0x67, 0xfa, 0x0b, 0x31, 0x48, 0x0c, 0xd9, 0xfd, 0x83, 0x5a, 0x0a, 0x01, 0x04, 0x10, 0x4a
+       , 0x04, 0x40, 0x66, 0x21, 0x7e, 0x41, 0x1a, 0xa0, 0x60, 0x00, 0x8c, 0x38, 0x70, 0xc4, 0x82, 0x0c
+       , 0x83, 0xec, 0xdd, 0x82, 0xad, 0xe4, 0xff, 0x0d, 0x5e, 0x42, 0x38, 0xd2, 0x93, 0x3f, 0x04, 0xfc
+       , 0x85, 0xae, 0x6b, 0xf9, 0x0d, 0x59, 0xe4, 0x0a, 0xdb, 0xf1, 0x00, 0x59, 0x7f, 0xfc, 0x13, 0xba
+       , 0xd4, 0x17, 0x1c, 0x01, 0x40, 0x2e, 0x50, 0x19, 0xf2, 0xe6, 0x2a, 0x80, 0x00, 0x42, 0x89, 0x00
+       , 0x70, 0x5f, 0xea, 0x17, 0xa4, 0xa5, 0x03, 0x89, 0x03, 0xd0, 0x5a, 0xc9, 0x9f, 0xd0, 0x65, 0x9c
+       , 0xbf, 0x21, 0x4b, 0x09, 0xe1, 0x8b, 0x4a, 0x46, 0x64, 0xcb, 0x07, 0x17, 0x80, 0x2c, 0x2e, 0xfb
+       , 0xfd, 0x0b, 0xba, 0xae, 0x0e, 0x52, 0x5c, 0x80, 0x96, 0x96, 0x82, 0x56, 0xe1, 0xff, 0x02, 0xd5
+       , 0x01, 0xdf, 0x20, 0x03, 0xc5, 0x3f, 0x20, 0x8b, 0x01, 0xe1, 0x1a, 0x01, 0x02, 0x88, 0x09, 0xd5
+       , 0x14, 0x90, 0x09, 0x60, 0x3d, 0xd0, 0xe1, 0x86, 0x9f, 0x30, 0xe3, 0xc0, 0x85, 0x3e, 0xb4, 0xc3
+       , 0x05, 0x5b, 0x3c, 0x3e, 0x9a, 0xfc, 0x11, 0x00, 0xb4, 0x92, 0xe2, 0x37, 0x74, 0x95, 0x25, 0xb8
+       , 0x59, 0xf4, 0x1b, 0xba, 0xe8, 0x1e, 0x5c, 0x2b, 0x40, 0x36, 0xc2, 0x41, 0xd6, 0x27, 0xfc, 0x44
+       , 0x2d, 0x85, 0x00, 0x02, 0x08, 0x11, 0x01, 0xff, 0xc0, 0xbb, 0x18, 0x7f, 0x42, 0xab, 0x60, 0xc8
+       , 0x00, 0xdb, 0x77, 0x48, 0x44, 0xfe, 0x86, 0x6d, 0xd9, 0x85, 0xac, 0x61, 0x1e, 0xad, 0x7b, 0xb1
+       , 0x02, 0xd0, 0xd2, 0x45, 0xe8, 0xee, 0x9e, 0x5f, 0xb0, 0xac, 0x00, 0x2e, 0x37, 0x80, 0x09, 0xfa
+       , 0x1b, 0xa4, 0x0f, 0x05, 0xde, 0x12, 0xf1, 0xeb, 0x27, 0x50, 0x01, 0xbc, 0xe9, 0x08, 0x10, 0x40
+       , 0x88, 0x08, 0x00, 0x45, 0xe1, 0x6f, 0x68, 0xde, 0x81, 0xf4, 0xb6, 0x60, 0xab, 0x37, 0x21, 0xc5
+       , 0xfe, 0xaf, 0x3f, 0xa0, 0xf5, 0x54, 0xbf, 0x20, 0x6b, 0xb3, 0x87, 0xf7, 0x90, 0x27, 0x79, 0xe0
+       , 0x1f, 0x78, 0x41, 0xfd, 0x1f, 0x70, 0x18, 0x41, 0x0a, 0xf3, 0x5f, 0xf0, 0xb8, 0x80, 0x14, 0xec
+       , 0x90, 0xf1, 0x1b, 0xd0, 0xba, 0xd8, 0x3f, 0xff, 0x60, 0x29, 0x18, 0x20, 0x80, 0x10, 0x11, 0x00
+       , 0x0e, 0xff, 0xdf, 0xd0, 0xba, 0xe3, 0x07, 0xa8, 0x27, 0x0c, 0x5d, 0xbe, 0x09, 0x69, 0xef, 0x40
+       , 0xb7, 0xaf, 0x40, 0x57, 0xec, 0x8d, 0x46, 0x00, 0x26, 0xf8, 0xf7, 0xff, 0x1f, 0x6c, 0x37, 0x39
+       , 0x28, 0xb4, 0xa0, 0x1b, 0x7f, 0x60, 0xcb, 0x7c, 0xbf, 0xc3, 0x67, 0xab, 0x7e, 0x42, 0xc2, 0x14
+       , 0x1a, 0x01, 0x00, 0x01, 0x84, 0x94, 0x03, 0x20, 0x91, 0x06, 0xae, 0x37, 0xc0, 0xbd, 0xad, 0xef
+       , 0xbf, 0x7f, 0x23, 0x0a, 0x1f, 0xe8, 0x6a, 0xc9, 0xdf, 0xd0, 0xc5, 0xfb, 0x03, 0xe4, 0xc7, 0xc1
+       , 0x0e, 0x40, 0x4b, 0xe9, 0x20, 0x5b, 0x0b, 0xa1, 0x1b, 0x1e, 0xa0, 0x6b, 0x7c, 0xc1, 0x87, 0x31
+       , 0x20, 0x76, 0xda, 0x40, 0xd6, 0x66, 0x42, 0xb4, 0x00, 0x04, 0x10, 0x34, 0x02, 0x40, 0xf3, 0x0c
+       , 0x7f, 0xc0, 0x6d, 0xd9, 0x9f, 0xbf, 0x7f, 0xfd, 0x84, 0xad, 0x22, 0x04, 0x17, 0xf8, 0xb0, 0x3d
+       , 0xa3, 0x90, 0xdd, 0x13, 0xbf, 0x21, 0x8b, 0x24, 0x07, 0xce, 0x8f, 0x83, 0x1a, 0xfc, 0x83, 0xc4
+       , 0xc0, 0x6f, 0x68, 0x7d, 0x0c, 0x5b, 0x69, 0x0d, 0xdd, 0x62, 0x00, 0x69, 0xe2, 0x83, 0x82, 0x18
+       , 0x1a, 0x98, 0xa0, 0x60, 0x04, 0x08, 0x20, 0x68, 0x04, 0x80, 0x34, 0x82, 0xc3, 0x1b, 0xd2, 0x9f
+       , 0x06, 0x45, 0x00, 0xec, 0x00, 0x13, 0xc4, 0x02, 0x6d, 0xd8, 0x8e, 0xd1, 0xd1, 0x43, 0xb6, 0x70
+       , 0x01, 0xc8, 0xfa, 0x2d, 0xf0, 0xda, 0xd2, 0xbf, 0xe0, 0x63, 0x77, 0xfe, 0xc2, 0xb7, 0x3c, 0x03
+       , 0xc3, 0x12, 0x36, 0x82, 0xf6, 0xeb, 0xf7, 0x2f, 0xe8, 0x36, 0x74, 0xa0, 0x16, 0x80, 0x00, 0x82
+       , 0x45, 0x00, 0xf8, 0x5c, 0x1e, 0x48, 0x91, 0x03, 0xe9, 0x52, 0xff, 0x85, 0xec, 0x15, 0xfd, 0x0d
+       , 0xdd, 0x2f, 0x8d, 0x7c, 0x54, 0xc9, 0x80, 0xfa, 0x71, 0xb0, 0x03, 0xf8, 0xb9, 0x16, 0xe0, 0x50
+       , 0x03, 0x57, 0xac, 0xd0, 0x9a, 0x01, 0x7c, 0x04, 0x0c, 0x64, 0x9f, 0x13, 0x58, 0xec, 0x1f, 0xb8
+       , 0x24, 0x07, 0x08, 0x20, 0x68, 0x04, 0xfc, 0x81, 0x86, 0xf5, 0x6f, 0xc8, 0xd6, 0x09, 0xd8, 0xce
+       , 0x21, 0xc8, 0xee, 0x09, 0xd8, 0x69, 0x49, 0x90, 0x55, 0xd9, 0xa3, 0x11, 0x80, 0x17, 0x40, 0x8e
+       , 0xf5, 0x82, 0xef, 0xf2, 0x04, 0xe7, 0x05, 0xe8, 0x16, 0x9b, 0x9f, 0xb0, 0x5d, 0x29, 0xd0, 0xc0
+       , 0x05, 0x2f, 0x59, 0x03, 0x08, 0x20, 0x50, 0x04, 0x80, 0x32, 0xce, 0x5f, 0x70, 0x0e, 0x00, 0x8d
+       , 0x69, 0x80, 0xca, 0x21, 0xc8, 0x86, 0x04, 0x78, 0xd8, 0xff, 0x81, 0x2e, 0x90, 0x07, 0x1f, 0x15
+       , 0x33, 0x1a, 0x01, 0x78, 0x01, 0x28, 0xfc, 0xff, 0x43, 0xf2, 0x00, 0x24, 0x0a, 0x60, 0x61, 0x09
+       , 0xa9, 0x9e, 0xc1, 0x6d, 0x23, 0x48, 0xd2, 0xfe, 0xf7, 0x07, 0xb4, 0xdf, 0x1f, 0x20, 0x80, 0x20
+       , 0x11, 0x00, 0x8d, 0x33, 0x68, 0x2f, 0x02, 0xdc, 0xd1, 0xfd, 0x0b, 0xdd, 0x99, 0xf0, 0xef, 0x2f
+       , 0x52, 0xea, 0x07, 0x2d, 0xd2, 0x1e, 0x68, 0x1f, 0x0e, 0x7e, 0x00, 0x89, 0x01, 0x10, 0xf8, 0xf3
+       , 0xef, 0x2f, 0x3c, 0x13, 0x80, 0xe3, 0x01, 0xd2, 0x45, 0x80, 0x6c, 0x85, 0x86, 0x24, 0x68, 0x80
+       , 0x00, 0x02, 0x45, 0xc0, 0x3f, 0x78, 0x7c, 0xfd, 0x81, 0x56, 0x19, 0xe0, 0x9d, 0x09, 0x7f, 0x61
+       , 0x25, 0xcf, 0xdf, 0x7f, 0x14, 0x6c, 0x1a, 0x1d, 0x81, 0xe0, 0x3f, 0xe4, 0x48, 0x8b, 0x7f, 0x88
+       , 0xad, 0x35, 0xd0, 0xd3, 0x8e, 0xfe, 0xfe, 0x45, 0x6a, 0xd0, 0x80, 0x02, 0x17, 0xa8, 0x10, 0x20
+       , 0x80, 0x40, 0x11, 0x00, 0x39, 0x83, 0x0d, 0xda, 0x82, 0x85, 0xed, 0x46, 0xfb, 0x0f, 0x2b, 0x73
+       , 0xfe, 0x41, 0x4b, 0xb5, 0xbf, 0xd0, 0x0d, 0x69, 0xa3, 0x80, 0x10, 0x80, 0x1c, 0x66, 0x81, 0x48
+       , 0xb3, 0x90, 0x28, 0x00, 0x85, 0xe8, 0xbf, 0x3f, 0xc8, 0xc1, 0x0f, 0x0e, 0x53, 0x80, 0x00, 0x02
+       , 0x17, 0x41, 0xd0, 0xd3, 0xa8, 0xfe, 0x82, 0x8f, 0xc5, 0x03, 0xe5, 0x15, 0xa8, 0x2e, 0xf0, 0xee
+       , 0x5a, 0xf8, 0x09, 0x31, 0xff, 0x50, 0x0f, 0xa9, 0x1a, 0x05, 0xb8, 0x00, 0x74, 0x2f, 0xc1, 0xdf
+       , 0xff, 0xd0, 0xa4, 0x0b, 0x0d, 0xdd, 0x3f, 0xc0, 0x92, 0xfe, 0xcf, 0x1f, 0x78, 0xc9, 0xfe, 0x0f
+       , 0x52, 0xa1, 0x02, 0x04, 0x10, 0xb8, 0x08, 0x02, 0xe7, 0x19, 0x58, 0x69, 0x03, 0x3e, 0x25, 0xe0
+       , 0x3f, 0x54, 0x33, 0xf4, 0x74, 0x3c, 0xc8, 0x1a, 0x79, 0xd8, 0x71, 0xa9, 0xa3, 0x00, 0x3f, 0x80
+       , 0x6d, 0x61, 0x42, 0x3a, 0xe0, 0x0b, 0xb6, 0xb7, 0xef, 0x2f, 0xfc, 0x04, 0x4e, 0x48, 0xe0, 0xfe
+       , 0xfb, 0x0f, 0x10, 0x40, 0xe0, 0x66, 0x28, 0xf4, 0x10, 0x0c, 0x68, 0x2c, 0x80, 0x25, 0x80, 0xbd
+       , 0x34, 0x48, 0xe0, 0x43, 0xf6, 0x25, 0x80, 0x63, 0x93, 0x61, 0x34, 0xfc, 0x89, 0x02, 0x28, 0xdb
+       , 0x69, 0xe0, 0x87, 0x4b, 0xfd, 0x87, 0x6e, 0x77, 0xfa, 0x0f, 0xa9, 0x13, 0xa0, 0x27, 0xaf, 0xfd
+       , 0x03, 0x08, 0x20, 0x48, 0x25, 0x0c, 0x29, 0xb3, 0xfe, 0x83, 0xcb, 0x79, 0xd8, 0xc9, 0xb4, 0xff
+       , 0xa0, 0x14, 0xf8, 0xa0, 0x60, 0xc8, 0xe9, 0x84, 0xff, 0xe9, 0xbc, 0x9d, 0x7a, 0xe8, 0x02, 0xe8
+       , 0x26, 0x4a, 0xe8, 0x29, 0x3b, 0x88, 0x6d, 0x4e, 0xb0, 0x62, 0x05, 0x7a, 0xd4, 0x04, 0x50, 0x08
+       , 0x20, 0x80, 0xa0, 0xfd, 0x80, 0xff, 0xb0, 0xc3, 0x60, 0xa0, 0xb1, 0xc4, 0x00, 0xdf, 0x0b, 0xf5
+       , 0x1f, 0x1a, 0xf6, 0xa3, 0xe5, 0x3f, 0x49, 0x00, 0x11, 0x60, 0xff, 0xa0, 0x47, 0x5d, 0xc3, 0xc2
+       , 0xf3, 0x1f, 0xd2, 0xb9, 0x2f, 0x40, 0x00, 0x10, 0x40, 0x4c, 0x30, 0xd5, 0xf0, 0xd0, 0x06, 0x1f
+       , 0x83, 0xf4, 0x0f, 0x23, 0xec, 0xff, 0x8f, 0xb6, 0x80, 0x48, 0x05, 0xe0, 0x8d, 0x65, 0xff, 0x91
+       , 0xea, 0x04, 0xa8, 0x30, 0x4a, 0x80, 0x02, 0x04, 0x10, 0x38, 0x07, 0x80, 0x16, 0x6b, 0x41, 0xf3
+       , 0x0c, 0xa8, 0xb4, 0x81, 0x6d, 0xc2, 0x84, 0x9d, 0x0b, 0x06, 0x3b, 0x9a, 0x90, 0x71, 0x34, 0x06
+       , 0x88, 0x05, 0xe0, 0x30, 0x86, 0x84, 0x17, 0x34, 0x23, 0x80, 0xcb, 0x6f, 0x44, 0xca, 0x87, 0xd4
+       , 0xa7, 0xc0, 0xe0, 0x05, 0x08, 0x20, 0xc8, 0x58, 0x10, 0x2c, 0xfd, 0x83, 0x16, 0x5d, 0xff, 0x87
+       , 0x10, 0xd8, 0xcc, 0xa4, 0xa3, 0x0f, 0x86, 0x3c, 0x80, 0xa6, 0x69, 0x44, 0x48, 0x32, 0xfe, 0x87
+       , 0x09, 0x83, 0x12, 0xfc, 0x7f, 0x46, 0x70, 0x9a, 0xfe, 0xcf, 0x00, 0x10, 0x40, 0x4c, 0x08, 0xf5
+       , 0xe0, 0xf3, 0x1f, 0xc1, 0x2a, 0xc1, 0xd9, 0x86, 0x11, 0xd9, 0x2c, 0xc8, 0xde, 0xa8, 0x51, 0x40
+       , 0x2c, 0x00, 0x27, 0x61, 0xd4, 0x00, 0x03, 0x05, 0x28, 0x38, 0xe0, 0x61, 0x61, 0x09, 0x8e, 0x02
+       , 0x06, 0x80, 0x00, 0x02, 0x47, 0x00, 0x23, 0xe4, 0x58, 0x29, 0x88, 0x04, 0x13, 0x64, 0xf7, 0x31
+       , 0x23, 0x2c, 0x52, 0x60, 0xb1, 0x82, 0x6e, 0xe0, 0x28, 0xc0, 0x0b, 0x18, 0x61, 0x49, 0x1e, 0xbc
+       , 0x9f, 0x95, 0x11, 0x7a, 0xb4, 0x20, 0x78, 0x6b, 0x2b, 0x13, 0x94, 0x05, 0x62, 0x30, 0x02, 0x04
+       , 0x10, 0x94, 0x83, 0x38, 0x77, 0x13, 0x92, 0xdc, 0x99, 0xa0, 0xa7, 0xc1, 0x33, 0x42, 0x99, 0x20
+       , 0xf6, 0x68, 0x0c, 0x90, 0x04, 0xc0, 0xc1, 0xc7, 0x08, 0x0b, 0x5c, 0xc8, 0x69, 0x06, 0xb0, 0xcd
+       , 0xf5, 0xa0, 0x42, 0x1e, 0x7a, 0xed, 0x01, 0x40, 0x00, 0x81, 0x22, 0x80, 0x09, 0x16, 0xf6, 0xf0
+       , 0xa3, 0x0e, 0x18, 0x61, 0xb1, 0xc2, 0xc8, 0x04, 0xdb, 0x8d, 0xc3, 0xc0, 0x38, 0x80, 0x87, 0xec
+       , 0x0f, 0x3d, 0x80, 0x48, 0xf7, 0xa0, 0x42, 0x85, 0x89, 0x89, 0x81, 0x11, 0x76, 0xbe, 0x38, 0x64
+       , 0x6b, 0x31, 0xfc, 0x84, 0x59, 0x80, 0x00, 0x02, 0xe7, 0x00, 0xf8, 0x59, 0xa7, 0xcc, 0x90, 0xa3
+       , 0x97, 0x19, 0xa1, 0x18, 0xa2, 0x11, 0xa6, 0x14, 0x62, 0xee, 0xc0, 0xfa, 0x6b, 0xa8, 0x00, 0x26
+       , 0xc4, 0x95, 0x2a, 0x48, 0xa7, 0xa9, 0x00, 0xc3, 0x17, 0x92, 0xc0, 0x99, 0x19, 0x21, 0x27, 0x5c
+       , 0x03, 0x05, 0x01, 0x02, 0x08, 0x52, 0x07, 0x20, 0x0e, 0x5b, 0x66, 0x86, 0xc9, 0x43, 0xe3, 0x08
+       , 0xb2, 0x17, 0x16, 0x16, 0x2b, 0x03, 0x7f, 0xe3, 0xc7, 0x50, 0x00, 0x8c, 0x8c, 0xb0, 0xd4, 0xcd
+       , 0x08, 0xbe, 0xc9, 0x06, 0x12, 0x78, 0x90, 0x53, 0xc5, 0xc1, 0x5b, 0x5a, 0x99, 0xa0, 0xc7, 0xbb
+       , 0x83, 0xc2, 0x15, 0x20, 0x80, 0xc0, 0x45, 0x10, 0x23, 0xe4, 0x94, 0x5f, 0xd8, 0x79, 0xef, 0xcc
+       , 0x4c, 0x30, 0x15, 0x70, 0x65, 0xd0, 0x18, 0x61, 0x18, 0x8d, 0x02, 0x22, 0x00, 0xa4, 0xe6, 0x44
+       , 0x94, 0x34, 0x4c, 0x88, 0x62, 0x87, 0x99, 0x89, 0x05, 0xbc, 0x6d, 0x1b, 0x72, 0xb4, 0x0a, 0x28
+       , 0x43, 0x00, 0x04, 0x10, 0x38, 0x02, 0x60, 0xb7, 0x4e, 0x80, 0xa5, 0xc1, 0x47, 0xbd, 0x33, 0x31
+       , 0xc2, 0x22, 0x01, 0x1a, 0x13, 0xb0, 0x93, 0x41, 0x46, 0x8b, 0x20, 0xc2, 0x00, 0x72, 0x70, 0x2f
+       , 0x13, 0xec, 0x3a, 0x0f, 0xf8, 0x66, 0x62, 0xd0, 0xe1, 0xbd, 0xa0, 0xb3, 0x54, 0x58, 0x20, 0x29
+       , 0x1d, 0x92, 0xa6, 0x01, 0x02, 0x08, 0x9a, 0x03, 0x20, 0x19, 0x03, 0xb1, 0xdf, 0x12, 0x1c, 0x4d
+       , 0x90, 0x33, 0x10, 0xe0, 0x65, 0x13, 0x33, 0xe4, 0x7e, 0xae, 0x51, 0x40, 0x08, 0xc0, 0xca, 0x0d
+       , 0xa4, 0x32, 0x9d, 0x09, 0x1a, 0x9c, 0xe0, 0x04, 0x0e, 0x39, 0xca, 0x1d, 0x12, 0xb6, 0x8c, 0x00
+       , 0x01, 0x04, 0x8e, 0x00, 0x70, 0xf4, 0x40, 0x64, 0x20, 0x47, 0xad, 0x30, 0xc1, 0xee, 0xdc, 0x62
+       , 0x86, 0xdd, 0x89, 0x03, 0x2b, 0xb1, 0x46, 0x8b, 0x20, 0xc2, 0x00, 0x71, 0x80, 0x0a, 0xa8, 0xfc
+       , 0x07, 0x97, 0x28, 0x48, 0xc7, 0x19, 0x40, 0x6e, 0x91, 0x80, 0x5e, 0xad, 0xc2, 0xc8, 0x04, 0x10
+       , 0x40, 0x90, 0x56, 0x10, 0x23, 0xe2, 0x74, 0x71, 0xf0, 0x79, 0xca, 0xf0, 0xfb, 0xb7, 0xa0, 0xea
+       , 0x20, 0x87, 0xc0, 0x43, 0x1a, 0xa8, 0xa3, 0x79, 0x80, 0x10, 0x60, 0x42, 0xbe, 0x43, 0x05, 0x92
+       , 0x8c, 0x61, 0xfb, 0xb9, 0xe1, 0xd7, 0x35, 0x41, 0xaa, 0x5a, 0x60, 0xb8, 0x03, 0x04, 0x10, 0x38
+       , 0x02, 0x40, 0x0d, 0x51, 0x58, 0xe8, 0x83, 0xf7, 0xba, 0xc2, 0xee, 0xbe, 0x81, 0xc4, 0x03, 0x14
+       , 0x30, 0xc2, 0xca, 0xad, 0x81, 0xf6, 0xe0, 0xa0, 0x06, 0x4c, 0xe0, 0xd3, 0x9b, 0x18, 0x11, 0xc1
+       , 0x06, 0x0a, 0x43, 0x56, 0x48, 0xb9, 0xc3, 0xcc, 0x0c, 0x3a, 0x24, 0x19, 0x7a, 0x79, 0x19, 0x48
+       , 0x02, 0x98, 0x98, 0x01, 0x02, 0x08, 0x1a, 0x9a, 0x90, 0xf4, 0xcf, 0x06, 0x3e, 0x54, 0x02, 0x84
+       , 0xd8, 0x59, 0x99, 0x21, 0x07, 0x0f, 0xc1, 0xaf, 0xe3, 0x82, 0x34, 0x8f, 0x98, 0x07, 0xdd, 0x55
+       , 0x80, 0x83, 0x0d, 0x30, 0x22, 0x1f, 0xe0, 0x01, 0x4d, 0xf7, 0x90, 0xd0, 0x65, 0x06, 0x5f, 0x92
+       , 0xc5, 0x0e, 0xbd, 0xc6, 0x83, 0x99, 0x15, 0xa8, 0x0a, 0xa8, 0x1e, 0x20, 0x80, 0xa0, 0xa1, 0x09
+       , 0xcc, 0x28, 0xe0, 0x20, 0x07, 0xef, 0x32, 0x06, 0xdf, 0x68, 0x00, 0x3d, 0x6c, 0x1f, 0x7a, 0x0b
+       , 0x20, 0xbc, 0xd4, 0x62, 0xa2, 0xd1, 0x55, 0x2a, 0xc3, 0x06, 0xb0, 0x80, 0x23, 0x80, 0x05, 0x1e
+       , 0xfc, 0xa0, 0x23, 0xcc, 0x58, 0x21, 0xe5, 0x3e, 0xf8, 0xc0, 0x08, 0x50, 0xe2, 0x86, 0x1c, 0xe8
+       , 0xc1, 0x02, 0x3e, 0x5e, 0x14, 0x20, 0x80, 0x10, 0x39, 0x00, 0x52, 0xff, 0x02, 0x63, 0x08, 0x08
+       , 0x81, 0x80, 0x05, 0xae, 0x0f, 0x9a, 0x5f, 0x58, 0xc1, 0x87, 0xa0, 0x81, 0xf0, 0x68, 0x63, 0x14
+       , 0x17, 0x60, 0x84, 0x1e, 0xdf, 0x07, 0xbb, 0xa7, 0x00, 0x76, 0x4c, 0x3e, 0xf8, 0xec, 0x2c, 0x56
+       , 0xc8, 0x11, 0x42, 0xa0, 0x04, 0xce, 0x06, 0xa9, 0x87, 0x41, 0x11, 0x00, 0x10, 0x40, 0xd0, 0x08
+       , 0x00, 0xf5, 0x10, 0xa0, 0x47, 0x1d, 0x40, 0xef, 0x54, 0x81, 0x9c, 0x7c, 0x06, 0x12, 0x04, 0xdf
+       , 0x7d, 0xc3, 0x0a, 0xa9, 0x42, 0xa0, 0xb9, 0x60, 0x34, 0x13, 0x60, 0x07, 0x90, 0xa3, 0xf1, 0x21
+       , 0xa7, 0xb2, 0x43, 0xc3, 0x1d, 0x56, 0xe4, 0x83, 0x0e, 0x6e, 0x02, 0x5f, 0x11, 0xc7, 0x0a, 0x3a
+       , 0x45, 0x0b, 0x58, 0x15, 0x40, 0x8f, 0xd1, 0x02, 0x08, 0x20, 0x44, 0x50, 0x82, 0x4f, 0x5b, 0x01
+       , 0x1f, 0x77, 0x06, 0xba, 0x60, 0x0e, 0x74, 0xe4, 0x13, 0xec, 0xa6, 0x15, 0x48, 0x5e, 0x60, 0x05
+       , 0x1f, 0x42, 0x07, 0xad, 0x0d, 0x06, 0xce, 0x8f, 0x83, 0x1a, 0xc0, 0xcf, 0x0e, 0x42, 0xbd, 0x32
+       , 0x0b, 0x7c, 0x95, 0x22, 0x27, 0xe4, 0xc4, 0x14, 0x76, 0xc8, 0xad, 0x8a, 0xf0, 0x23, 0xa6, 0x01
+       , 0x02, 0x08, 0x39, 0x02, 0xa0, 0xf7, 0xfd, 0x41, 0x2e, 0x56, 0xe4, 0x00, 0xdd, 0xda, 0x04, 0xbd
+       , 0x71, 0x0b, 0x7a, 0xe7, 0x28, 0x88, 0x64, 0x86, 0x5c, 0xcc, 0xcb, 0x34, 0xa8, 0x2f, 0x49, 0x1e
+       , 0x18, 0x00, 0x2d, 0x7e, 0x60, 0x07, 0x07, 0x41, 0x5a, 0x33, 0xf0, 0x1b, 0xb3, 0xc0, 0xc7, 0x37
+       , 0x71, 0xb0, 0x71, 0x80, 0x0f, 0x94, 0x43, 0xba, 0x38, 0x14, 0x20, 0x80, 0x10, 0x11, 0x00, 0xaa
+       , 0x73, 0xc1, 0xa7, 0xfd, 0x01, 0x63, 0x00, 0x7c, 0xcc, 0x10, 0x27, 0xec, 0xf8, 0x1b, 0x70, 0xbe
+       , 0x80, 0x34, 0x60, 0x61, 0xf5, 0x02, 0x33, 0x89, 0x67, 0x84, 0x8f, 0x04, 0x00, 0x6f, 0xf7, 0xb0
+       , 0xb2, 0x42, 0x1b, 0x9b, 0xb0, 0x23, 0x14, 0x41, 0x81, 0x08, 0xbe, 0x01, 0x0b, 0x7c, 0x76, 0x13
+       , 0x1b, 0x1b, 0xa4, 0x42, 0x85, 0xe8, 0x02, 0x08, 0x20, 0x44, 0x04, 0x00, 0xcb, 0x2f, 0xc8, 0x05
+       , 0x73, 0xe0, 0x5b, 0x46, 0x39, 0x39, 0x20, 0x47, 0xdc, 0x80, 0x0e, 0x3c, 0x83, 0xd6, 0x1b, 0xb0
+       , 0x38, 0x00, 0xd9, 0x01, 0x1e, 0xa8, 0x1e, 0x20, 0x8f, 0x0e, 0x52, 0xc0, 0xc8, 0x82, 0x28, 0x76
+       , 0x58, 0xc0, 0x37, 0xc4, 0x41, 0xd3, 0x2f, 0x90, 0xe6, 0xe0, 0x84, 0x5d, 0x19, 0xca, 0x06, 0x2e
+       , 0x87, 0xd8, 0x58, 0xe1, 0x23, 0xcb, 0x00, 0x01, 0x84, 0x52, 0x9d, 0xb2, 0x82, 0x0e, 0xb9, 0x84
+       , 0x96, 0x3f, 0xa0, 0x83, 0x9e, 0xb8, 0x38, 0x21, 0x47, 0xce, 0x41, 0x2e, 0xdd, 0x85, 0x46, 0x27
+       , 0xf8, 0x1e, 0x34, 0xf0, 0x11, 0xb1, 0xa3, 0x99, 0x00, 0x01, 0x90, 0x92, 0x3f, 0xa4, 0xe8, 0x81
+       , 0x26, 0x7c, 0x76, 0xf0, 0xf1, 0x4d, 0x90, 0x23, 0x9b, 0xc0, 0x47, 0xc8, 0x81, 0x02, 0x12, 0xf9
+       , 0xce, 0x19, 0x80, 0x00, 0x42, 0x89, 0x00, 0x70, 0x19, 0xc4, 0x0a, 0x8e, 0x2e, 0x48, 0x04, 0x70
+       , 0x71, 0x80, 0x63, 0x80, 0x1d, 0x12, 0x9d, 0xa0, 0xe3, 0x86, 0xd8, 0xa1, 0xb7, 0x1f, 0xc3, 0x5a
+       , 0x51, 0xa3, 0x00, 0x02, 0xc0, 0xa1, 0x0f, 0xbf, 0x9e, 0x0f, 0x72, 0x37, 0x1f, 0xa8, 0x42, 0x05
+       , 0xa6, 0x78, 0x60, 0xb0, 0x83, 0x2f, 0x07, 0x85, 0x64, 0x01, 0x0e, 0x48, 0x2a, 0x86, 0x6b, 0x04
+       , 0x08, 0x20, 0x94, 0x08, 0x60, 0x62, 0x64, 0x04, 0xdf, 0xa9, 0x05, 0xaa, 0x31, 0x40, 0xc1, 0x0f
+       , 0xbe, 0x5c, 0x14, 0xda, 0x7a, 0x05, 0x9a, 0xc3, 0x06, 0x0f, 0x7e, 0x36, 0x78, 0x5d, 0x40, 0x77
+       , 0x9f, 0x0e, 0x46, 0x00, 0x6d, 0xf9, 0x80, 0xd3, 0x3c, 0xa4, 0xe0, 0xe1, 0x80, 0x84, 0x22, 0x38
+       , 0x22, 0xc0, 0x37, 0xb4, 0x72, 0x81, 0xef, 0xcd, 0xe5, 0x04, 0x0a, 0x02, 0xa3, 0x08, 0xb9, 0x23
+       , 0x05, 0x10, 0x40, 0xe8, 0x2d, 0x7a, 0x16, 0xf0, 0x59, 0x5b, 0xa0, 0x4b, 0x44, 0xa1, 0x37, 0xbc
+       , 0x72, 0x83, 0x8b, 0x24, 0x76, 0xf0, 0xf5, 0xba, 0x1c, 0x88, 0x92, 0x0d, 0x54, 0x10, 0xb1, 0x01
+       , 0xab, 0x6d, 0xfa, 0xfa, 0x74, 0x90, 0x02, 0x48, 0x03, 0x91, 0x15, 0x7a, 0x5a, 0x1f, 0xa4, 0x2f
+       , 0x05, 0xbe, 0xae, 0x1b, 0xd4, 0xf2, 0xe4, 0x00, 0x5f, 0x90, 0xcb, 0x0d, 0x39, 0x39, 0x8e, 0x1d
+       , 0x7c, 0x96, 0x2e, 0xb2, 0x5e, 0x80, 0x00, 0xc2, 0x88, 0x00, 0x66, 0x66, 0x50, 0xa5, 0x01, 0xae
+       , 0xb1, 0x81, 0xe1, 0xcf, 0x0b, 0xba, 0xda, 0x95, 0x1b, 0x1c, 0x05, 0x10, 0x13, 0xc1, 0x14, 0xe4
+       , 0xfa, 0x3f, 0x36, 0x68, 0x73, 0x97, 0x8e, 0x3e, 0x1d, 0x8c, 0x00, 0x16, 0xfa, 0xac, 0x90, 0x12
+       , 0x9a, 0x1d, 0x1c, 0xec, 0x90, 0x9b, 0xd2, 0x81, 0x80, 0x07, 0x72, 0x4f, 0x2e, 0x17, 0x27, 0xb8
+       , 0x6f, 0xc5, 0x01, 0x1a, 0x0a, 0x42, 0x0d, 0x31, 0x80, 0x00, 0xc2, 0xd2, 0xa7, 0x05, 0x9f, 0x79
+       , 0x0c, 0x29, 0x83, 0xb8, 0x21, 0x97, 0xec, 0x42, 0x62, 0x92, 0x13, 0x1a, 0x09, 0xe0, 0xac, 0xc0
+       , 0x0e, 0x1e, 0xd4, 0x60, 0x03, 0xd9, 0x3c, 0x92, 0x27, 0x09, 0x80, 0x8d, 0x19, 0xf0, 0x81, 0xf5
+       , 0x6c, 0x90, 0x31, 0x06, 0x68, 0xb8, 0x73, 0xb0, 0x43, 0x2e, 0xed, 0x06, 0x06, 0x1b, 0x0f, 0x30
+       , 0xfd, 0x72, 0x83, 0x02, 0x92, 0x0b, 0x74, 0xfd, 0x24, 0xf8, 0xe4, 0x4a, 0x54, 0x00, 0x10, 0x40
+       , 0x58, 0xd2, 0x2f, 0x2b, 0xf8, 0xf6, 0x75, 0xf0, 0x55, 0xd3, 0x5c, 0xc0, 0xf0, 0xe7, 0xe5, 0xe1
+       , 0xf9, 0x02, 0xba, 0x80, 0xf6, 0xc7, 0x8f, 0x9f, 0x1c, 0xe0, 0x6b, 0x16, 0x39, 0xa0, 0x27, 0x66
+       , 0x21, 0x5d, 0x69, 0xf6, 0xfb, 0x17, 0xfa, 0x51, 0x68, 0x23, 0x04, 0x40, 0x5b, 0x9c, 0xa0, 0x24
+       , 0xcb, 0x06, 0x09, 0x7e, 0xd0, 0x81, 0xb9, 0xec, 0x90, 0xea, 0x96, 0x83, 0x1b, 0x7c, 0x43, 0x31
+       , 0x0f, 0x38, 0x17, 0x70, 0x82, 0xd3, 0x2f, 0x2b, 0xc6, 0xb1, 0x95, 0x00, 0x01, 0x84, 0x25, 0x02
+       , 0x80, 0x15, 0x04, 0xc8, 0x34, 0x60, 0x16, 0x00, 0x6a, 0xfc, 0xc6, 0xcd, 0xc3, 0xcb, 0xcb, 0x0b
+       , 0x3e, 0xa4, 0x9e, 0xf3, 0x27, 0x07, 0xe4, 0x00, 0x16, 0xd8, 0x11, 0x14, 0x88, 0x5b, 0x67, 0xff
+       , 0x8d, 0xc8, 0x03, 0x24, 0xc0, 0x57, 0x82, 0x42, 0x86, 0x0f, 0xd8, 0x40, 0x57, 0x9f, 0xb3, 0x43
+       , 0x12, 0x3e, 0x27, 0xa4, 0x19, 0x09, 0x4c, 0xc1, 0xbc, 0x20, 0xc0, 0x03, 0x29, 0x82, 0x80, 0xc1
+       , 0x09, 0x94, 0xc7, 0xec, 0x3b, 0x01, 0x04, 0x10, 0xf6, 0x12, 0x1c, 0x58, 0xb6, 0x00, 0x8d, 0xe3
+       , 0x04, 0x97, 0x41, 0xc0, 0x38, 0x84, 0x44, 0xc1, 0x2f, 0xf8, 0xf5, 0x8f, 0xe0, 0x03, 0x3f, 0x90
+       , 0x4f, 0x6e, 0x02, 0xed, 0x2a, 0xf8, 0xf9, 0xe3, 0xff, 0x48, 0xda, 0xc3, 0x0a, 0xea, 0xb7, 0x82
+       , 0xc6, 0x8e, 0xc1, 0x77, 0x72, 0x43, 0x2a, 0x5c, 0xc8, 0xf8, 0x01, 0xa4, 0xc5, 0xcf, 0xc9, 0xc9
+       , 0x03, 0x0e, 0x37, 0x20, 0x01, 0xb9, 0xa5, 0x1e, 0x9c, 0xfc, 0xb1, 0xb4, 0x59, 0x00, 0x02, 0x08
+       , 0x7b, 0x04, 0x00, 0xdb, 0x49, 0xa0, 0x52, 0x08, 0x94, 0x89, 0xb8, 0x78, 0xbf, 0xf3, 0xc0, 0xaf
+       , 0x26, 0x87, 0x9e, 0x1c, 0xf4, 0x0b, 0x7a, 0x4e, 0xe0, 0x1f, 0xd8, 0xf6, 0x57, 0xc8, 0xee, 0xa6
+       , 0x5f, 0x23, 0xa9, 0x20, 0x82, 0xdc, 0x02, 0x0a, 0x0a, 0x7b, 0x36, 0x58, 0x81, 0xcf, 0x01, 0xef
+       , 0xf0, 0x82, 0x1a, 0xfd, 0x7c, 0xbc, 0x7c, 0xc0, 0x08, 0x00, 0xb5, 0x61, 0x40, 0x11, 0xc0, 0x09
+       , 0x4e, 0xfe, 0x58, 0x06, 0x0f, 0x00, 0x02, 0x08, 0x67, 0x1b, 0x06, 0xd8, 0xca, 0x01, 0x6a, 0xfb
+       , 0xf9, 0x13, 0x74, 0xb5, 0xfd, 0x77, 0xde, 0xef, 0xbc, 0x90, 0xa3, 0x47, 0x51, 0x8e, 0x4c, 0x84
+       , 0x1e, 0x64, 0xf0, 0xef, 0x0f, 0xec, 0x86, 0x3f, 0xf0, 0x99, 0x5b, 0xb4, 0xf4, 0xf5, 0x60, 0x01
+       , 0xe0, 0x92, 0x87, 0x0d, 0x92, 0xf8, 0xd9, 0xc1, 0x41, 0xce, 0x05, 0xed, 0x37, 0x81, 0x8a, 0x1a
+       , 0x20, 0xe6, 0xe3, 0xe7, 0xe7, 0xe3, 0xe7, 0xe3, 0x01, 0xe5, 0x00, 0x48, 0x03, 0x14, 0xe7, 0x7d
+       , 0xf4, 0x00, 0x01, 0x84, 0xaf, 0x11, 0x09, 0x89, 0x03, 0x60, 0x09, 0xf6, 0xf3, 0x07, 0xf4, 0x8a
+       , 0x86, 0xef, 0xdf, 0xbf, 0xff, 0xf9, 0x0d, 0x3b, 0x6d, 0x02, 0x71, 0x13, 0x27, 0x78, 0x17, 0x26
+       , 0x64, 0x67, 0xda, 0xff, 0xff, 0x7f, 0x87, 0xfb, 0x69, 0x66, 0xa0, 0xb9, 0x5b, 0x70, 0xab, 0x07
+       , 0xd2, 0x36, 0x04, 0x0f, 0xb2, 0x41, 0x82, 0x9d, 0x13, 0x3c, 0x7c, 0xc3, 0xc5, 0xcb, 0xc7, 0xc3
+       , 0xcf, 0x07, 0x4c, 0xfe, 0x40, 0x0c, 0x0c, 0x7f, 0x1e, 0xa0, 0x14, 0xb0, 0x61, 0x8f, 0xcb, 0x34
+       , 0x80, 0x00, 0xc2, 0x17, 0x01, 0xc0, 0xb6, 0x2d, 0x30, 0x53, 0x71, 0xff, 0xe2, 0xfa, 0xc5, 0xc3
+       , 0x0b, 0x3d, 0xb9, 0x15, 0x7c, 0x62, 0x34, 0xfc, 0x18, 0x1b, 0xc4, 0x09, 0x12, 0xd0, 0x6d, 0x7f
+       , 0x20, 0xe2, 0x17, 0x78, 0x0b, 0x1a, 0x0d, 0x3c, 0x3e, 0x28, 0x00, 0x33, 0x13, 0x33, 0x78, 0x6c
+       , 0x12, 0x56, 0xe1, 0x72, 0x42, 0xd2, 0x3e, 0x24, 0xec, 0x41, 0x7d, 0x57, 0x2e, 0x6e, 0x4e, 0x7e
+       , 0x7e, 0x01, 0x7e, 0x7e, 0x50, 0x14, 0x70, 0x73, 0xf3, 0x82, 0xe4, 0x80, 0xcd, 0x7f, 0x1c, 0xb7
+       , 0x37, 0x00, 0x01, 0x40, 0x00, 0x11, 0xe8, 0x46, 0x81, 0xa3, 0xf8, 0xf7, 0x2f, 0x1e, 0xd8, 0x29
+       , 0x42, 0xe0, 0xf3, 0x48, 0xff, 0xc2, 0xaf, 0x34, 0x06, 0x6f, 0x7b, 0x05, 0x1f, 0x6b, 0x00, 0xdf
+       , 0x4c, 0x0c, 0xde, 0x69, 0xf3, 0xeb, 0xff, 0xb0, 0x3c, 0xd5, 0x86, 0x89, 0x99, 0x09, 0x52, 0xf2
+       , 0x70, 0x40, 0x2b, 0x5d, 0x48, 0xd8, 0x73, 0x40, 0xfa, 0x4c, 0xe0, 0x12, 0x88, 0x8b, 0x5f, 0x40
+       , 0x10, 0x14, 0xf8, 0xa0, 0x1c, 0x00, 0x6a, 0x01, 0x81, 0xab, 0x5f, 0x7c, 0x37, 0xba, 0x01, 0x04
+       , 0x10, 0x81, 0x08, 0x60, 0x66, 0x62, 0x02, 0x9a, 0x0f, 0x3e, 0xa2, 0xfa, 0x17, 0xe4, 0x34, 0x27
+       , 0xc8, 0x6d, 0xc0, 0xd0, 0xba, 0x17, 0x76, 0x8c, 0xc4, 0xdf, 0xff, 0xb0, 0x7d, 0xb1, 0xb0, 0x8b
+       , 0x81, 0xff, 0x0f, 0xbb, 0x7b, 0x7c, 0x80, 0xcd, 0x1e, 0xc8, 0x48, 0x0f, 0xb8, 0xb1, 0x8f, 0x28
+       , 0x75, 0xb8, 0x78, 0x20, 0xdd, 0x55, 0x4e, 0x60, 0x83, 0x85, 0x8f, 0x0f, 0x98, 0xf8, 0x05, 0x04
+       , 0xf8, 0x80, 0x39, 0x80, 0x0f, 0xd8, 0xfe, 0x01, 0x5f, 0x1e, 0xc0, 0x8e, 0x7f, 0x06, 0x17, 0x20
+       , 0x80, 0x08, 0x0f, 0x24, 0x80, 0x1a, 0xb9, 0x7f, 0x39, 0x79, 0xc0, 0xa7, 0x6e, 0x41, 0x4f, 0xec
+       , 0x06, 0x9f, 0x29, 0x04, 0x4c, 0xfc, 0xff, 0x61, 0x97, 0xbc, 0xfe, 0x05, 0xef, 0xe4, 0xfe, 0x0f
+       , 0xdd, 0x48, 0x0c, 0x46, 0x8c, 0x8c, 0xbf, 0x7f, 0xfd, 0x84, 0x9c, 0xca, 0x35, 0x0c, 0x00, 0x74
+       , 0xb6, 0x8a, 0x9d, 0x0d, 0xda, 0xc4, 0xe1, 0x84, 0x24, 0x77, 0x70, 0x33, 0x9d, 0x93, 0x1b, 0x02
+       , 0x80, 0x21, 0x2e, 0x28, 0x28, 0x20, 0x08, 0x2e, 0x7e, 0x78, 0x80, 0xf5, 0x00, 0xb8, 0xfa, 0x05
+       , 0x66, 0x17, 0xfc, 0x26, 0x03, 0x04, 0x10, 0x51, 0x23, 0x39, 0xc0, 0x52, 0xec, 0xdf, 0x9f, 0x3f
+       , 0xc8, 0xc7, 0x9f, 0x81, 0xcf, 0xe3, 0xfa, 0x0d, 0xbe, 0xe6, 0x15, 0x7a, 0xe5, 0x25, 0xf4, 0xa2
+       , 0x39, 0xe8, 0xde, 0x4a, 0xf0, 0x5e, 0x28, 0x10, 0xff, 0xd7, 0x30, 0xe8, 0xa0, 0x81, 0x43, 0x1f
+       , 0x52, 0xea, 0xb3, 0x43, 0x1a, 0xf9, 0xc0, 0xc0, 0x07, 0x5f, 0x0b, 0x00, 0x09, 0x78, 0xc8, 0x15
+       , 0x01, 0x3c, 0x82, 0x20, 0x00, 0x0c, 0x7e, 0x01, 0x60, 0x3e, 0x00, 0x8f, 0x3f, 0x70, 0x01, 0x35
+       , 0x10, 0x34, 0x1c, 0x20, 0x80, 0x88, 0x8a, 0x00, 0x60, 0x26, 0x02, 0xe6, 0x39, 0xee, 0xbf, 0x90
+       , 0x03, 0xe9, 0x20, 0x17, 0x61, 0xff, 0xfe, 0xf3, 0xf7, 0x37, 0xfc, 0xc0, 0x03, 0xc8, 0x4e, 0x64
+       , 0x86, 0xff, 0x88, 0xcd, 0xc4, 0xe0, 0x1d, 0x50, 0xa0, 0xed, 0x09, 0xc0, 0x4c, 0x33, 0xa4, 0xe3
+       , 0x00, 0x34, 0x55, 0x0e, 0x1e, 0xd8, 0x07, 0xcf, 0xea, 0x42, 0xd2, 0x3d, 0x38, 0xe8, 0x81, 0x45
+       , 0x0f, 0x0f, 0x24, 0xe1, 0x83, 0x68, 0x21, 0x41, 0x10, 0x14, 0xe0, 0x17, 0x04, 0x96, 0x41, 0xbc
+       , 0xe0, 0xd6, 0x0f, 0x30, 0xa6, 0x08, 0xde, 0x63, 0x08, 0x04, 0x00, 0x01, 0x44, 0xec, 0x58, 0x26
+       , 0x30, 0x03, 0x02, 0xed, 0x86, 0x1e, 0x81, 0x03, 0x6a, 0xfb, 0x43, 0x9a, 0x9f, 0x7f, 0x61, 0xc9
+       , 0x1e, 0x96, 0xfe, 0x21, 0x3b, 0xc9, 0x60, 0xdb, 0x42, 0x20, 0x4b, 0xe5, 0x81, 0x45, 0x17, 0x30
+       , 0xd3, 0x50, 0x12, 0x0a, 0x03, 0x05, 0x20, 0x63, 0xfc, 0xec, 0x90, 0x72, 0x9f, 0x13, 0x5a, 0xf6
+       , 0xc0, 0x13, 0x3e, 0x0f, 0x37, 0x64, 0xa4, 0x81, 0x57, 0x40, 0x50, 0x48, 0x48, 0x58, 0x48, 0x48
+       , 0x00, 0x1a, 0xfa, 0xc0, 0x38, 0x01, 0xe6, 0x10, 0x62, 0x6e, 0xf2, 0x04, 0x02, 0x80, 0x00, 0x22
+       , 0x61, 0x30, 0x19, 0x58, 0xf3, 0x83, 0x8f, 0x5e, 0x41, 0xb4, 0x3e, 0x11, 0xcd, 0x4f, 0xf8, 0x31
+       , 0x1e, 0x90, 0x6d, 0x80, 0xc8, 0x7b, 0x44, 0x20, 0xbb, 0x0b, 0x98, 0x40, 0xc3, 0x47, 0x43, 0x68
+       , 0xac, 0x02, 0xe8, 0x64, 0x16, 0x36, 0xc8, 0x22, 0x1d, 0x76, 0xc8, 0xa0, 0x00, 0x27, 0x64, 0x78
+       , 0x92, 0x13, 0x14, 0xbc, 0xdc, 0xe0, 0x31, 0x36, 0xf0, 0x48, 0x27, 0xb0, 0xe4, 0x11, 0x10, 0x16
+       , 0x16, 0x02, 0x15, 0x3e, 0x02, 0xe0, 0xc2, 0x87, 0x87, 0x97, 0x07, 0x54, 0xf8, 0x10, 0x28, 0xfa
+       , 0xe1, 0x00, 0x20, 0x80, 0x48, 0x1b, 0xcd, 0x07, 0x16, 0x7f, 0xff, 0xa1, 0x67, 0x10, 0x81, 0xae
+       , 0x99, 0x06, 0x9d, 0xe0, 0x04, 0xa9, 0x7b, 0xa1, 0x75, 0x2d, 0x23, 0x24, 0x03, 0x80, 0x17, 0x51
+       , 0x23, 0xf6, 0x78, 0x40, 0x77, 0x2a, 0x30, 0x32, 0x83, 0x4f, 0xa3, 0x1b, 0x02, 0xc5, 0x11, 0xe8
+       , 0x46, 0x42, 0xc8, 0xfc, 0x0a, 0x64, 0x4a, 0x11, 0x3c, 0xc6, 0x00, 0x2a, 0x7d, 0x80, 0xe5, 0x0e
+       , 0x78, 0x84, 0x98, 0x1b, 0x34, 0x46, 0x0c, 0xec, 0xe7, 0x72, 0x03, 0x4b, 0x7d, 0x70, 0xe2, 0x17
+       , 0x12, 0x00, 0xb5, 0x3e, 0x41, 0x6d, 0x7f, 0x1e, 0xf0, 0xe8, 0x3d, 0xf1, 0x76, 0x01, 0x04, 0x10
+       , 0x69, 0x11, 0x00, 0x0c, 0x55, 0xa0, 0x4b, 0xfe, 0xa2, 0x9e, 0xc2, 0xf2, 0x1f, 0xba, 0xb3, 0x95
+       , 0x01, 0xb2, 0xb7, 0x95, 0x11, 0xb6, 0x99, 0x00, 0xb1, 0xd3, 0x89, 0x19, 0xb6, 0x4f, 0x81, 0x99
+       , 0x11, 0x7c, 0x62, 0xe6, 0xe0, 0xcd, 0x0a, 0xe0, 0xf1, 0x7d, 0xf0, 0xdc, 0x2e, 0x68, 0x76, 0x85
+       , 0x03, 0xda, 0xec, 0xe1, 0x00, 0x97, 0x3d, 0xdc, 0xa0, 0xf0, 0x87, 0xd4, 0xbd, 0xbc, 0xe0, 0xf0
+       , 0x17, 0x10, 0x00, 0xa6, 0x7d, 0x60, 0xea, 0x17, 0x12, 0x04, 0xb7, 0x7e, 0x80, 0x6d, 0x7f, 0xa0
+       , 0x28, 0xb0, 0x8e, 0x26, 0x69, 0x82, 0x04, 0x20, 0x80, 0x48, 0x9e, 0xcf, 0x02, 0x06, 0x25, 0x30
+       , 0x29, 0x30, 0xfc, 0x83, 0x16, 0x3b, 0xe0, 0x43, 0x0e, 0x18, 0x60, 0x9b, 0x58, 0x11, 0xbb, 0x72
+       , 0x90, 0x02, 0x9f, 0x89, 0x85, 0x09, 0xb4, 0x5a, 0x92, 0x85, 0x99, 0xf9, 0xc7, 0x2f, 0x16, 0x66
+       , 0xa6, 0x5f, 0xbf, 0x98, 0x98, 0x20, 0xdd, 0x38, 0x52, 0xad, 0xa6, 0x35, 0x80, 0xae, 0x2b, 0x81
+       , 0x4d, 0xea, 0x42, 0x26, 0xb7, 0x20, 0x6d, 0x1e, 0x0e, 0x2e, 0x4e, 0xe8, 0x7d, 0x48, 0xdc, 0x90
+       , 0xe1, 0x35, 0x50, 0x9b, 0x07, 0x1c, 0xf8, 0xc0, 0xe0, 0x07, 0x25, 0x7f, 0x48, 0xcf, 0x0b, 0x18
+       , 0x51, 0xa4, 0xae, 0x55, 0x00, 0x08, 0x20, 0x72, 0x26, 0x14, 0x59, 0x98, 0x59, 0x80, 0x2e, 0x81
+       , 0xa6, 0xe1, 0xff, 0x90, 0xed, 0x05, 0xd0, 0x7b, 0xfd, 0x18, 0x11, 0x25, 0x0e, 0x74, 0x6f, 0x0d
+       , 0x78, 0xa9, 0x24, 0x2b, 0x64, 0xcd, 0x06, 0x90, 0xf5, 0x13, 0xc8, 0xfd, 0xc5, 0x0c, 0x1b, 0xcd
+       , 0xfe, 0x33, 0x48, 0x4a, 0x24, 0xe8, 0xde, 0x15, 0xe8, 0x6a, 0x2a, 0xc8, 0x32, 0x10, 0xd8, 0x00
+       , 0x27, 0x6c, 0x79, 0x02, 0x17, 0xa4, 0xf0, 0xe1, 0x02, 0x95, 0xfc, 0x90, 0xb4, 0x2f, 0x04, 0x49
+       , 0xfb, 0xe0, 0xae, 0x2f, 0x2f, 0xb0, 0xdb, 0x05, 0x0c, 0x7d, 0xd2, 0x27, 0x68, 0x01, 0x02, 0x88
+       , 0xcc, 0x19, 0x5d, 0xa0, 0x73, 0xb9, 0xa1, 0x57, 0x15, 0x43, 0xb7, 0xd4, 0x33, 0xc2, 0x36, 0xa3
+       , 0xbd, 0x83, 0x06, 0x3d, 0x33, 0x33, 0xfc, 0x8e, 0x39, 0xf0, 0x42, 0x30, 0xe8, 0x75, 0x97, 0x3f
+       , 0x59, 0x7e, 0xb2, 0xb2, 0xfc, 0xfc, 0xf9, 0x9b, 0x85, 0x05, 0x74, 0x9a, 0x32, 0xf8, 0x00, 0x47
+       , 0xd0, 0x19, 0x69, 0x03, 0x73, 0x14, 0x14, 0xb0, 0xa6, 0x85, 0xee, 0xcd, 0x82, 0x2e, 0xe5, 0x61
+       , 0x45, 0x8c, 0xf3, 0x40, 0x46, 0x39, 0x39, 0x39, 0x11, 0xeb, 0x43, 0x20, 0xed, 0x1f, 0x1e, 0x70
+       , 0xb8, 0x83, 0x8a, 0x7d, 0x60, 0xe8, 0x43, 0x5a, 0xfd, 0xe0, 0xb6, 0x10, 0x37, 0x79, 0xd3, 0xe3
+       , 0x00, 0x01, 0x44, 0xfe, 0x94, 0x3a, 0xd0, 0xcd, 0x40, 0x5b, 0x19, 0x20, 0x7b, 0xfc, 0x40, 0x11
+       , 0x00, 0x49, 0xef, 0xd0, 0x30, 0x47, 0xec, 0x79, 0x82, 0xae, 0xd0, 0x66, 0x86, 0x6c, 0x4c, 0x00
+       , 0x11, 0x3f, 0x81, 0x1e, 0x85, 0xdc, 0x36, 0xcf, 0xf2, 0x9b, 0x15, 0x94, 0x13, 0x58, 0x20, 0x47
+       , 0x59, 0x03, 0x5b, 0xb7, 0xf4, 0x3a, 0x91, 0x05, 0xb4, 0x8e, 0x13, 0xbc, 0x17, 0x0e, 0xb4, 0x20
+       , 0x19, 0xb6, 0x9c, 0x0a, 0xdc, 0xde, 0x67, 0x87, 0xad, 0x02, 0x01, 0x35, 0x7c, 0x10, 0xa3, 0x6c
+       , 0xa0, 0xf0, 0xe7, 0x04, 0x56, 0xbb, 0xc0, 0x90, 0x17, 0x14, 0x80, 0xa4, 0x7b, 0xd0, 0x90, 0x03
+       , 0x30, 0xf0, 0x81, 0x51, 0xc2, 0x45, 0x6e, 0xe8, 0x03, 0x01, 0x40, 0x00, 0x51, 0xb4, 0xa6, 0x01
+       , 0x68, 0x2b, 0x30, 0xea, 0xa1, 0x7b, 0x60, 0x21, 0xd7, 0x1a, 0xb3, 0x30, 0x43, 0x97, 0xf1, 0xb2
+       , 0x81, 0xf7, 0x39, 0xb1, 0x42, 0x20, 0x2b, 0x2b, 0x7c, 0x7d, 0xe9, 0x77, 0x50, 0x1e, 0xff, 0xf9
+       , 0x03, 0xc8, 0x02, 0x76, 0xd1, 0x58, 0x21, 0x97, 0xa0, 0x41, 0x0f, 0x2b, 0x65, 0xf9, 0x03, 0x9b
+       , 0xdd, 0xfc, 0xf7, 0x9f, 0x36, 0x19, 0x02, 0xbc, 0x7d, 0x14, 0x9c, 0x4c, 0x58, 0xc0, 0x77, 0x90
+       , 0x83, 0x17, 0x37, 0x41, 0x52, 0x3e, 0x64, 0x74, 0x9f, 0x0d, 0xbc, 0x8c, 0x10, 0xd2, 0xf2, 0xe1
+       , 0x82, 0x0c, 0xf6, 0x40, 0x46, 0xfa, 0xb9, 0xb9, 0xf9, 0x78, 0xf9, 0x40, 0xc1, 0x0e, 0xc4, 0xe0
+       , 0xf6, 0x3e, 0x3f, 0x1f, 0xbc, 0xc9, 0xcf, 0x49, 0xc9, 0xd2, 0x10, 0x80, 0x00, 0xa2, 0x74, 0x51
+       , 0x09, 0xd0, 0x2b, 0x5c, 0xdc, 0x5c, 0xf0, 0xba, 0x17, 0x9a, 0xdc, 0x59, 0x59, 0xd8, 0xc1, 0x49
+       , 0xea, 0xc3, 0x87, 0x0f, 0x90, 0x28, 0x80, 0x2e, 0x6b, 0xfc, 0x0e, 0x9a, 0x40, 0xfd, 0xf1, 0xf3
+       , 0x27, 0x1b, 0xdb, 0x0f, 0x20, 0x84, 0x5c, 0x4d, 0xf3, 0x9b, 0xed, 0x17, 0xbc, 0x4a, 0x80, 0x0d
+       , 0x71, 0x43, 0x46, 0xf8, 0x20, 0xe3, 0x4c, 0x54, 0x38, 0xa8, 0x0e, 0xb1, 0x5d, 0x17, 0x71, 0xfb
+       , 0x2f, 0xa2, 0xd0, 0x67, 0x85, 0xb7, 0xf7, 0xc1, 0xeb, 0x71, 0xd8, 0xe1, 0x73, 0x5b, 0xb0, 0xe4
+       , 0x0f, 0x24, 0x40, 0xe9, 0x9d, 0x1f, 0x1c, 0xf2, 0x7c, 0xe0, 0x74, 0x0f, 0x6a, 0xef, 0x83, 0xa7
+       , 0xba, 0xb8, 0xb8, 0x88, 0xe9, 0xee, 0xe2, 0x01, 0x00, 0x01, 0x58, 0xbb, 0x62, 0x2d, 0x00, 0x41
+       , 0x10, 0x38, 0x50, 0x5a, 0x53, 0xff, 0xff, 0x99, 0x4c, 0xe5, 0x23, 0xdf, 0x0b, 0x0e, 0xc2, 0x96
+       , 0xa6, 0x9a, 0x5c, 0x01, 0x15, 0x79, 0x78, 0x77, 0xfc, 0x80, 0xea, 0x51, 0xaf, 0xd4, 0x48, 0x02
+       , 0xdd, 0xfe, 0x26, 0x34, 0x05, 0x4e, 0x49, 0x7d, 0x62, 0xe6, 0xe4, 0x19, 0xf8, 0xfb, 0x56, 0xf6
+       , 0xa3, 0xcd, 0xa5, 0x55, 0xdd, 0x88, 0x0a, 0xb5, 0x7c, 0x09, 0x51, 0xeb, 0xd3, 0x67, 0x33, 0x49
+       , 0x97, 0x87, 0x5e, 0x6f, 0x47, 0xa7, 0xb5, 0xa3, 0xdb, 0x61, 0x82, 0x6a, 0x10, 0xfe, 0x7a, 0xcf
+       , 0x54, 0x21, 0x0a, 0x93, 0x02, 0x17, 0x04, 0x0a, 0x68, 0x5e, 0xd0, 0x31, 0xfb, 0x97, 0xc2, 0xaa
+       , 0x09, 0x18, 0xc2, 0xa0, 0xa5, 0x20, 0xfe, 0xe3, 0x67, 0xd7, 0x56, 0x2d, 0x38, 0x37, 0x6f, 0xf0
+       , 0xdb, 0xa9, 0xb7, 0xd8, 0x7b, 0x0d, 0x6a, 0xb8, 0xcd, 0x75, 0xf9, 0x4e, 0x59, 0xbc, 0x04, 0x10
+       , 0x75, 0x96, 0x55, 0x01, 0xdd, 0x01, 0x4c, 0x0b, 0xd0, 0x04, 0x06, 0xbb, 0xd8, 0x15, 0x36, 0x57
+       , 0x0d, 0x9a, 0xb5, 0xf8, 0xf8, 0xf1, 0x33, 0x28, 0xe4, 0xbf, 0x43, 0x72, 0x39, 0xfb, 0x4f, 0x8e
+       , 0x9f, 0x3f, 0x7e, 0x70, 0x40, 0x2e, 0xe5, 0x83, 0xc5, 0xc0, 0xaf, 0xdf, 0x90, 0x73, 0xc3, 0x21
+       , 0xd7, 0x74, 0x40, 0xe7, 0xda, 0xc0, 0xd3, 0xfd, 0x90, 0x33, 0x64, 0x41, 0x03, 0xae, 0x90, 0x51
+       , 0x6f, 0xa0, 0x85, 0xff, 0xe0, 0x27, 0xaa, 0x31, 0x40, 0x4f, 0xe1, 0x61, 0x80, 0x32, 0x20, 0x07
+       , 0x1f, 0x31, 0x42, 0x77, 0xf7, 0x23, 0x6d, 0x55, 0x87, 0xee, 0x72, 0x83, 0xec, 0xb8, 0x42, 0x5a
+       , 0x42, 0x0e, 0xd9, 0x35, 0x01, 0x1e, 0xe4, 0xe7, 0x80, 0xe6, 0x00, 0x4e, 0xd8, 0x68, 0x33, 0x1f
+       , 0x78, 0x68, 0x9f, 0x1f, 0x32, 0xc0, 0xcf, 0xc7, 0x07, 0x1e, 0xe4, 0x01, 0xa5, 0x7c, 0x60, 0x9f
+       , 0x98, 0x83, 0xe8, 0xbe, 0x2e, 0x7e, 0x00, 0x10, 0x40, 0xd4, 0x5c, 0xd7, 0x06, 0x0c, 0x70, 0x48
+       , 0x35, 0x0c, 0xee, 0xcb, 0x40, 0x4b, 0x55, 0x78, 0x72, 0xfa, 0xf4, 0x09, 0x74, 0x27, 0x2e, 0xfb
+       , 0x77, 0x60, 0xef, 0x06, 0x74, 0x25, 0xe8, 0x0f, 0x0e, 0xd8, 0xa5, 0xa0, 0xe0, 0xd5, 0x16, 0xbf
+       , 0xe1, 0x17, 0xae, 0x80, 0xe7, 0xf9, 0x7f, 0xff, 0xfe, 0x83, 0x74, 0x74, 0x35, 0x38, 0x12, 0xfe
+       , 0xc2, 0x4e, 0xf0, 0x05, 0x1f, 0x1f, 0x0b, 0x3b, 0x94, 0x10, 0x3e, 0x02, 0x02, 0x3d, 0xcc, 0x85
+       , 0x09, 0x7e, 0x34, 0x09, 0x68, 0x63, 0x2d, 0xf8, 0x84, 0x12, 0xc4, 0x76, 0x51, 0xd8, 0xbe, 0x2d
+       , 0x56, 0x16, 0x78, 0xc9, 0xc3, 0x06, 0x5d, 0x47, 0x08, 0x9e, 0x5c, 0x87, 0xcf, 0xae, 0x73, 0x72
+       , 0x00, 0x9b, 0x95, 0xa0, 0x00, 0xe7, 0x03, 0xcf, 0x2d, 0x82, 0xa7, 0xd7, 0x41, 0x3d, 0x5f, 0x1e
+       , 0x6e, 0x48, 0xbd, 0x4c, 0xe4, 0x38, 0x0f, 0x31, 0x00, 0x20, 0x00, 0x6b, 0x67, 0x94, 0x02, 0x30
+       , 0x0c, 0xc2, 0xd0, 0xbf, 0xb5, 0x65, 0xbb, 0xff, 0x45, 0x45, 0xe6, 0xba, 0x51, 0x46, 0x13, 0x1d
+       , 0xc2, 0x7e, 0x7b, 0x85, 0x22, 0x55, 0x7c, 0x31, 0x59, 0x2c, 0x2c, 0xc4, 0x1d, 0x93, 0x4f, 0x9e
+       , 0x8e, 0xee, 0x2a, 0x1b, 0x1a, 0xb6, 0x58, 0xb2, 0x8b, 0x88, 0xaa, 0x9a, 0x9d, 0xd5, 0xfa, 0xd5
+       , 0x90, 0x6a, 0x03, 0xd4, 0x3f, 0x83, 0x0d, 0x9e, 0x19, 0xd4, 0xd4, 0xef, 0x8f, 0xb7, 0xb1, 0x25
+       , 0x8c, 0xb0, 0xbf, 0x1e, 0x79, 0xf3, 0xfa, 0xf3, 0xd1, 0x0c, 0x4b, 0xa3, 0x48, 0x1a, 0x4f, 0x4e
+       , 0x01, 0x3e, 0x96, 0xf1, 0xf1, 0xb7, 0xf4, 0xf5, 0xa3, 0xfe, 0x29, 0x27, 0x2c, 0xc5, 0x41, 0x57
+       , 0xa1, 0x96, 0xca, 0x91, 0x16, 0xb1, 0xd6, 0xe1, 0x6c, 0x1d, 0x02, 0xe7, 0xb6, 0xf6, 0x44, 0xee
+       , 0x15, 0x40, 0xd4, 0x5f, 0xd9, 0x09, 0x74, 0x1f, 0xd0, 0xa9, 0xe0, 0x28, 0x00, 0xaf, 0x53, 0x05
+       , 0xe5, 0x6b, 0x76, 0x0e, 0xe8, 0x38, 0x22, 0xa8, 0x29, 0x0d, 0x8c, 0x00, 0x48, 0x34, 0xfc, 0xfc
+       , 0xc9, 0x09, 0x2c, 0x86, 0x7e, 0x71, 0xc2, 0x4a, 0x21, 0xd8, 0xa5, 0x59, 0xa0, 0xb9, 0x86, 0x5f
+       , 0x88, 0x63, 0xc4, 0x41, 0xb3, 0x9e, 0x48, 0xe7, 0xb7, 0x83, 0x4f, 0x76, 0x84, 0x54, 0x05, 0xb0
+       , 0x56, 0x2b, 0xb8, 0xe0, 0x87, 0x9c, 0x7a, 0xc1, 0xc4, 0x08, 0x3b, 0x1c, 0x06, 0x3a, 0xf8, 0x81
+       , 0x52, 0xeb, 0x42, 0x9b, 0x08, 0xf0, 0xd5, 0xfb, 0x6c, 0x6c, 0xd0, 0x4d, 0xb9, 0xe0, 0x9d, 0x2b
+       , 0x5c, 0x5c, 0xa0, 0x55, 0x3c, 0xbc, 0xd0, 0x51, 0x4e, 0xc8, 0x50, 0x1b, 0x2f, 0x64, 0x64, 0x1f
+       , 0x92, 0x89, 0x71, 0xad, 0x6c, 0xa0, 0x04, 0x00, 0x04, 0x10, 0xad, 0x96, 0xd6, 0x82, 0xb7, 0x21
+       , 0x30, 0xc3, 0xca, 0x58, 0x70, 0x87, 0x1e, 0x3a, 0x73, 0xca, 0xfd, 0xe5, 0xeb, 0x37, 0x1e, 0xf0
+       , 0x72, 0x47, 0xf0, 0x6a, 0xa3, 0xaf, 0xb0, 0x8b, 0x85, 0x60, 0x77, 0x54, 0x22, 0xb7, 0x88, 0xa0
+       , 0xcb, 0x2e, 0x10, 0x07, 0xb9, 0xff, 0x07, 0x1f, 0x79, 0xcd, 0x80, 0x38, 0xc7, 0x1a, 0x71, 0x28
+       , 0x21, 0xe4, 0x68, 0x24, 0x06, 0xf8, 0xa9, 0x5f, 0x90, 0x1c, 0xc0, 0x02, 0xdb, 0x33, 0x0a, 0xdf
+       , 0x87, 0xcb, 0x8a, 0x68, 0xfb, 0x40, 0x00, 0x30, 0xf5, 0xc3, 0x86, 0x98, 0xa1, 0x23, 0xfc, 0x90
+       , 0xa1, 0x7e, 0x48, 0xdb, 0x1f, 0x34, 0xaf, 0x02, 0x5a, 0x56, 0xce, 0xce, 0x4c, 0x9b, 0x0d, 0xd2
+       , 0x00, 0x01, 0xc4, 0x48, 0xeb, 0xd3, 0x28, 0xc1, 0xb7, 0xf3, 0xfd, 0x82, 0xde, 0x8d, 0x08, 0xb9
+       , 0xa5, 0xfe, 0x2b, 0xe4, 0x86, 0x63, 0x08, 0x0b, 0xbc, 0xe4, 0x0b, 0xb4, 0xea, 0xe5, 0x3b, 0x2c
+       , 0x0a, 0x7e, 0x41, 0xee, 0x7f, 0x82, 0x1f, 0xf4, 0x0e, 0xbd, 0xb9, 0x06, 0x36, 0xfd, 0x09, 0x3f
+       , 0x0a, 0x98, 0x01, 0x56, 0x09, 0xff, 0x87, 0x1e, 0x3b, 0x08, 0x3b, 0x51, 0x07, 0x51, 0xfe, 0xc0
+       , 0xce, 0x88, 0x61, 0x81, 0x77, 0xc8, 0x61, 0x3b, 0x47, 0xd9, 0x40, 0x7b, 0x81, 0xc0, 0x83, 0xcc
+       , 0xd0, 0xe9, 0x74, 0x2e, 0xd8, 0x3c, 0x0b, 0x78, 0xd4, 0x07, 0x3a, 0xe3, 0x0b, 0x5e, 0x5f, 0x0b
+       , 0xda, 0x32, 0x4d, 0xbb, 0xf0, 0x01, 0x08, 0x20, 0x9a, 0x47, 0x00, 0x04, 0x80, 0x2f, 0x70, 0x02
+       , 0xdf, 0x10, 0xf7, 0x1d, 0x72, 0x4d, 0x28, 0xe8, 0x5e, 0x39, 0xf0, 0x1d, 0xa3, 0x60, 0x0e, 0xf4
+       , 0xa6, 0x7a, 0xf0, 0x1d, 0xa2, 0x3f, 0x7f, 0x42, 0x57, 0xdd, 0x41, 0x66, 0xde, 0x20, 0xf8, 0xcf
+       , 0x3f, 0xa4, 0x6a, 0x00, 0xf9, 0xe4, 0x5f, 0xd8, 0xd1, 0x8e, 0x90, 0xb3, 0x20, 0xa1, 0xc7, 0x7b
+       , 0x81, 0x4b, 0x20, 0xc8, 0x71, 0x30, 0xb0, 0xd3, 0x2e, 0x20, 0x5b, 0xa5, 0x59, 0xa0, 0xeb, 0xc8
+       , 0xd9, 0x21, 0x2b, 0xd8, 0x38, 0x61, 0x00, 0xb6, 0xa8, 0x0a, 0xd6, 0xf8, 0xe7, 0xe4, 0x80, 0x6c
+       , 0x16, 0xa5, 0x45, 0x99, 0x83, 0x06, 0x00, 0x02, 0xf0, 0x76, 0x06, 0x29, 0x00, 0x80, 0x20, 0x10
+       , 0x94, 0xa0, 0xff, 0x3f, 0x57, 0x8d, 0xc2, 0x50, 0x57, 0xfb, 0x41, 0x9d, 0xba, 0x27, 0x62, 0xab
+       , 0xee, 0x7c, 0x7a, 0x00, 0x3f, 0x66, 0xc1, 0x29, 0x53, 0x01, 0x2a, 0x11, 0xc8, 0xd0, 0x40, 0xb7
+       , 0x0a, 0x2b, 0x03, 0x99, 0x0e, 0x7e, 0x71, 0xf0, 0xbf, 0x97, 0xfa, 0xd0, 0xcb, 0x86, 0xff, 0xfe
+       , 0xa9, 0x14, 0x64, 0xd5, 0x01, 0xb5, 0x0e, 0x7f, 0xca, 0x3e, 0x10, 0x8d, 0xe7, 0x7f, 0xd7, 0x52
+       , 0xa0, 0x1b, 0x96, 0x60, 0xc7, 0x0a, 0xf5, 0xa6, 0x7f, 0x76, 0x53, 0xe9, 0xa9, 0x61, 0x5a, 0x5c
+       , 0x53, 0x06, 0x8a, 0xfa, 0x68, 0xfe, 0x31, 0x04, 0xb8, 0x02, 0x88, 0x8e, 0x11, 0x00, 0x06, 0xc0
+       , 0x60, 0x83, 0xb6, 0xfa, 0xc1, 0x57, 0x6a, 0x41, 0x82, 0xfb, 0x27, 0x74, 0xc5, 0xd7, 0x0f, 0xf0
+       , 0x9d, 0xc5, 0x3f, 0x7f, 0xc0, 0x2e, 0xed, 0xfe, 0x0d, 0xbe, 0x4f, 0xee, 0x17, 0xe4, 0xd6, 0x21
+       , 0x58, 0x7d, 0x00, 0x5f, 0x80, 0xf4, 0x0f, 0x6a, 0x1e, 0x68, 0xfa, 0x1f, 0xd6, 0xfc, 0x81, 0xf6
+       , 0x00, 0x60, 0x07, 0x5d, 0x30, 0x43, 0x0e, 0x5c, 0x00, 0x36, 0xf9, 0x61, 0x5b, 0x7b, 0xa0, 0x85
+       , 0x3e, 0x78, 0x23, 0x28, 0x74, 0x55, 0x2d, 0xa4, 0x06, 0x86, 0x1d, 0x22, 0x00, 0xaa, 0xa0, 0xe9
+       , 0xb9, 0xff, 0x13, 0x20, 0x80, 0xe8, 0x1d, 0x01, 0x70, 0xf0, 0x17, 0x7c, 0x71, 0x1f, 0xa4, 0xe9
+       , 0xf3, 0x13, 0x52, 0x42, 0x41, 0xaf, 0x66, 0x87, 0x62, 0xe8, 0x95, 0xb0, 0xd0, 0x65, 0xc0, 0xd0
+       , 0x7b, 0x85, 0xfe, 0xc0, 0xd6, 0xc1, 0xfc, 0x83, 0x1d, 0x73, 0xcd, 0x08, 0x5e, 0x02, 0x03, 0xad
+       , 0x84, 0x11, 0x65, 0x3f, 0xe2, 0xfc, 0x29, 0xc8, 0x26, 0x73, 0x48, 0xa2, 0x06, 0x9f, 0xc1, 0x00
+       , 0x86, 0x6c, 0x88, 0x1c, 0x01, 0xdb, 0x0c, 0xcd, 0x32, 0x20, 0xfb, 0x3e, 0x01, 0x02, 0x68, 0xc0
+       , 0x22, 0x00, 0x02, 0x80, 0xc1, 0x08, 0xb9, 0xeb, 0x0c, 0xda, 0xfa, 0xf9, 0x85, 0xc0, 0x7f, 0xa0
+       , 0x0b, 0x61, 0x20, 0x37, 0x58, 0x42, 0xae, 0x16, 0x82, 0x5e, 0xf3, 0x81, 0x58, 0x87, 0x01, 0x39
+       , 0x88, 0x19, 0x94, 0x0b, 0xd0, 0x9a, 0xff, 0xa8, 0x9d, 0x2f, 0x50, 0xa5, 0x0b, 0xed, 0x1c, 0xb2
+       , 0xa2, 0x01, 0x70, 0x5b, 0x6d, 0x00, 0x8f, 0x62, 0x03, 0x08, 0xa0, 0x01, 0x8e, 0x00, 0x38, 0x00
+       , 0x3a, 0xe3, 0x0f, 0xa2, 0xa0, 0x81, 0xdd, 0x60, 0x09, 0x5f, 0xff, 0xf8, 0x07, 0x7c, 0xbd, 0x0d
+       , 0xec, 0x7e, 0x8f, 0xff, 0x90, 0x8a, 0x00, 0x7a, 0x3a, 0x3c, 0xbc, 0x17, 0x8c, 0xd4, 0x04, 0x02
+       , 0x9d, 0x58, 0x02, 0x1e, 0x1a, 0x44, 0x8e, 0x06, 0x0c, 0x30, 0x18, 0x8e, 0x7d, 0x01, 0x08, 0xa0
+       , 0xc1, 0x12, 0x01, 0xc8, 0x00, 0x76, 0x75, 0x19, 0xb8, 0x13, 0x06, 0xbd, 0xdf, 0x09, 0x72, 0x0d
+       , 0x11, 0xb4, 0x06, 0x86, 0xb4, 0x83, 0x90, 0x2b, 0x61, 0x06, 0x58, 0x04, 0x30, 0xc0, 0x8e, 0x9f
+       , 0x85, 0x8f, 0x7e, 0xb2, 0xc0, 0xe6, 0x87, 0x20, 0x1b, 0xfc, 0x07, 0xdb, 0xf6, 0x66, 0x80, 0x00
+       , 0x1a, 0x8c, 0x11, 0x80, 0x0c, 0x40, 0xc1, 0x0c, 0xbb, 0x17, 0x0d, 0x72, 0xa5, 0x0d, 0x7c, 0x35
+       , 0x00, 0xe4, 0x18, 0x78, 0xd0, 0x19, 0xcc, 0xd0, 0x59, 0x69, 0xd8, 0x89, 0xcb, 0x88, 0x13, 0x98
+       , 0xa1, 0x43, 0x42, 0x83, 0xf9, 0xd4, 0x6b, 0x80, 0x00, 0x03, 0x00, 0x36, 0x48, 0x61, 0x8b, 0x2d
+       , 0x54, 0xbb, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, 0x0a };
+
+}
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreImageCodec.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreImageCodec.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreImageCodec.h	(revision 1092)
@@ -0,0 +1,74 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _ImageCodec_H__
+#define _ImageCodec_H__
+
+#include "OgreCodec.h"
+#include "OgrePixelFormat.h"
+
+namespace Ogre {
+
+    /** Codec specialized in images.
+        @remarks
+            The users implementing subclasses of ImageCodec are required to return
+            a valid pointer to a ImageData class from the decode(...) function.
+    */
+    class _OgreExport ImageCodec : public Codec
+    {
+    public:
+        virtual ~ImageCodec();
+        /** Codec return class for images. Has imformation about the size and the
+            pixel format of the image. */
+        class _OgrePrivate ImageData : public Codec::CodecData
+        {
+        public:
+			ImageData():
+				height(0), width(0), depth(1), size(0),
+				num_mipmaps(0), flags(0), format(PF_UNKNOWN)
+			{
+			}
+            uint height;
+            uint width;
+			uint depth;
+            uint size;
+            
+            ushort num_mipmaps;
+            uint flags;
+
+            PixelFormat format;
+
+        public:
+            String dataType() const
+            {
+                return "ImageData";
+            }
+        };
+
+    public:
+    };
+
+} // namespace
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreLog.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreLog.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreLog.h	(revision 1092)
@@ -0,0 +1,91 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __Log_H__
+#define __Log_H__
+
+#include "OgrePrerequisites.h"
+
+namespace Ogre {
+
+    // LogMessageLevel + LoggingLevel > OGRE_LOG_THRESHOLD = message logged
+    #define OGRE_LOG_THRESHOLD 4
+
+    /** The level of detail to which the log will go into.
+    */
+    enum LoggingLevel
+    {
+        LL_LOW = 1,
+        LL_NORMAL = 2,
+        LL_BOREME = 3
+    };
+
+    /** The importance of a logged message.
+    */
+    enum LogMessageLevel
+    {
+        LML_TRIVIAL = 1,
+        LML_NORMAL = 2,
+        LML_CRITICAL = 3
+    };
+
+    /** Log class for writing debug/log data to files.
+        @note
+            <br>Should not be used directly, but trough the LogManager class.
+    */
+    class _OgreExport Log
+    {
+    protected:
+        std::ofstream	mfpLog;
+        LoggingLevel	mLogLevel;
+        bool			mDebugOut;
+		bool			mSuppressFile;
+		String			mName;
+
+    public:
+        /** Usual constructor - called by LogManager.
+        */
+        Log( const String& name, bool debugOutput = true, bool suppressFileOutput = false);
+
+        /** Default destructor.
+        */
+        ~Log();
+
+        /** Log a message to the debugger and to log file (the default is
+            "<code>OGRE.log</code>"),
+        */
+        void logMessage(
+            const String& message,
+            LogMessageLevel lml = LML_NORMAL, 
+            bool maskDebug = false);
+
+        /** Sets the level of the log detail.
+        */
+        void setLogDetail(LoggingLevel ll);
+    };
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderSystem.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderSystem.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderSystem.h	(revision 1092)
@@ -0,0 +1,1049 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://ogre.sourceforge.net/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __RenderSystem_H_
+#define __RenderSystem_H_
+
+// Precompiler options
+#include "OgrePrerequisites.h"
+
+#include "OgreString.h"
+
+#include "OgreTextureUnitState.h"
+#include "OgreCommon.h"
+
+#include "OgreRenderOperation.h"
+#include "OgreRenderSystemCapabilities.h"
+#include "OgreRenderTarget.h"
+#include "OgreRenderTexture.h"
+#include "OgreFrameListener.h"
+#include "OgreConfigOptionMap.h"
+#include "OgreGpuProgram.h"
+#include "OgrePlane.h"
+#include "OgreIteratorWrappers.h"
+
+namespace Ogre
+{
+    typedef std::map< String, RenderTarget * > RenderTargetMap;
+	typedef std::multimap<uchar, RenderTarget * > RenderTargetPriorityMap;
+
+    class TextureManager;
+    /// Enum describing the ways to generate texture coordinates
+    enum TexCoordCalcMethod
+    {
+        /// No calculated texture coordinates
+        TEXCALC_NONE,
+        /// Environment map based on vertex normals
+        TEXCALC_ENVIRONMENT_MAP,
+        /// Environment map based on vertex positions
+        TEXCALC_ENVIRONMENT_MAP_PLANAR,
+        TEXCALC_ENVIRONMENT_MAP_REFLECTION,
+        TEXCALC_ENVIRONMENT_MAP_NORMAL,
+        /// Projective texture
+        TEXCALC_PROJECTIVE_TEXTURE
+    };
+    /// Enum describing the various actions which can be taken onthe stencil buffer
+    enum StencilOperation
+    {
+        /// Leave the stencil buffer unchanged
+        SOP_KEEP,
+        /// Set the stencil value to zero
+        SOP_ZERO,
+        /// Set the stencil value to the reference value
+        SOP_REPLACE,
+        /// Increase the stencil value by 1, clamping at the maximum value
+        SOP_INCREMENT,
+        /// Decrease the stencil value by 1, clamping at 0
+        SOP_DECREMENT,
+        /// Increase the stencil value by 1, wrapping back to 0 when incrementing the maximum value
+        SOP_INCREMENT_WRAP,
+        /// Decrease the stencil value by 1, wrapping when decrementing 0
+        SOP_DECREMENT_WRAP,
+        /// Invert the bits of the stencil buffer
+        SOP_INVERT
+    };
+
+    /** Defines the frame buffers which can be cleared. */
+    enum FrameBufferType {
+        FBT_COLOUR  = 0x1,
+        FBT_DEPTH   = 0x2,
+        FBT_STENCIL = 0x4
+    };
+    
+    /** Defines the functionality of a 3D API
+        @remarks
+            The RenderSystem class provides a base interface
+            which abstracts the general functionality of the 3D API
+            e.g. Direct3D or OpenGL. Whilst a few of the general
+            methods have implementations, most of this class is
+            abstract, requiring a subclass based on a specific API
+            to be constructed to provide the full functionality.
+            Note there are 2 levels to the interface - one which
+            will be used often by the caller of the Ogre library,
+            and one which is at a lower level and will be used by the
+            other classes provided by Ogre. These lower level
+            methods are prefixed with '_' to differentiate them.
+            The advanced user of the library may use these lower
+            level methods to access the 3D API at a more fundamental
+            level (dealing direct with render states and rendering
+            primitives), but still benefitting from Ogre's abstraction
+            of exactly which 3D API is in use.
+        @author
+            Steven Streeting
+        @version
+            1.0
+     */
+    class _OgreExport RenderSystem
+    {
+    public:
+        /** Default Constructor.
+        */
+        RenderSystem();
+
+        /** Destructor.
+        */
+        virtual ~RenderSystem();
+
+        /** Returns the name of the rendering system.
+        */
+        virtual const String& getName(void) const = 0;
+
+        /** Returns the details of this API's configuration options
+            @remarks
+                Each render system must be able to inform the world
+                of what options must/can be specified for it's
+                operation.
+            @par
+                These are passed as strings for portability, but
+                grouped into a structure (_ConfigOption) which includes
+                both options and current value.
+            @par
+                Note that the settings returned from this call are
+                affected by the options that have been set so far,
+                since some options are interdependent.
+            @par
+                This routine is called automatically by the default
+                configuration dialogue produced by Root::showConfigDialog
+                or may be used by the caller for custom settings dialogs
+            @returns
+                A 'map' of options, i.e. a list of options which is also
+                indexed by option name.
+         */
+        virtual ConfigOptionMap& getConfigOptions(void) = 0;
+
+        /** Sets an option for this API
+            @remarks
+                Used to confirm the settings (normally chosen by the user) in
+                order to make the renderer able to initialise with the settings as required.
+                This may be video mode, D3D driver, full screen / windowed etc.
+                Called automatically by the default configuration
+                dialog, and by the restoration of saved settings.
+                These settings are stored and only activated when
+                RenderSystem::initialise or RenderSystem::reinitialise
+                are called.
+            @par
+                If using a custom configuration dialog, it is advised that the
+                caller calls RenderSystem::getConfigOptions
+                again, since some options can alter resulting from a selection.
+            @param
+                name The name of the option to alter.
+            @param
+                value The value to set the option to.
+         */
+        virtual void setConfigOption(const String &name, const String &value) = 0;
+
+		virtual HardwareOcclusionQuery* createHardwareOcclusionQuery() = 0;
+
+        /** Validates the options set for the rendering system, returning a message if there are problems.
+            @note
+                If the returned string is empty, there are no problems.
+        */
+        virtual String validateConfigOptions(void) = 0;
+
+        /** Start up the renderer using the settings selected (Or the defaults if none have been selected).
+            @remarks
+                Called by Root::setRenderSystem. Shouldn't really be called
+                directly, although  this can be done if the app wants to.
+            @param
+                autoCreateWindow If true, creates a render window
+                automatically, based on settings chosen so far. This saves
+                an extra call to RenderSystem::createRenderWindow
+                for the main render window.
+            @par
+                If an application has more specific window requirements,
+                however (e.g. a level design app), it should specify false
+                for this parameter and do it manually.
+            @returns
+                A pointer to the automatically created window, if requested, otherwise null.
+        */
+        virtual RenderWindow* initialise(bool autoCreateWindow, const String& windowTitle = "OGRE Render Window");
+
+        /** Restart the renderer (normally following a change in settings).
+        */
+        virtual void reinitialise(void) = 0;
+
+        /** Shutdown the renderer and cleanup resources.
+        */
+        virtual void shutdown(void);
+
+
+        /** Sets the colour & strength of the ambient (global directionless) light in the world.
+        */
+        virtual void setAmbientLight(float r, float g, float b) = 0;
+
+        /** Sets the type of light shading required (default = Gouraud).
+        */
+        virtual void setShadingType(ShadeOptions so) = 0;
+
+        /** Sets whether or not dynamic lighting is enabled.
+            @param
+                enabled If true, dynamic lighting is performed on geometry with normals supplied, geometry without
+                normals will not be displayed. If false, no lighting is applied and all geometry will be full brightness.
+        */
+        virtual void setLightingEnabled(bool enabled) = 0;
+
+        /** Sets whether or not W-buffers are enabled if they are avalible for this renderer.
+			@param
+				enabled If true and the renderer supports them W-buffers will be used.  If false 
+				W-buffers will not be used even if avalible.  W-buffers are enabled by default 
+				for 16bit depth buffers and disabled for all other depths.
+        */
+		void setWBufferEnabled(bool enabled);
+
+		/** Returns true if the renderer will try to use W-buffers when avalible.
+		*/
+		bool getWBufferEnabled(void) const;
+
+		/** Creates a new rendering window.
+            @remarks
+                This method creates a new rendering window as specified
+                by the paramteters. The rendering system could be
+                responible for only a single window (e.g. in the case
+                of a game), or could be in charge of multiple ones (in the
+                case of a level editor). The option to create the window
+                as a child of another is therefore given.
+                This method will create an appropriate subclass of
+                RenderWindow depending on the API and platform implementation.
+            @par
+                After creation, this window can be retrieved using getRenderTarget().
+            @param
+                name The name of the window. Used in other methods
+                later like setRenderTarget and getRenderWindow.
+            @param
+                width The width of the new window.
+            @param
+                height The height of the new window.
+            @param
+                fullScreen Specify true to make the window full screen
+                without borders, title bar or menu bar.
+            @param
+                miscParams A NameValuePairList describing the other parameters for the new rendering window. 
+					Options are case sensitive. Unrecognised parameters will be ignored silently.
+					These values might be platform dependent, but these are present for all platorms unless
+					indicated otherwise:
+				**
+				Key: "title"
+				Description: The title of the window that will appear in the title bar
+				Values: string
+				Default: RenderTarget name
+				**
+				Key: "colourDepth"
+				Description: Colour depth of the resulting rendering window; only applies if fullScreen
+					is set.
+				Values: 16 or 32
+				Default: desktop depth
+				Notes: [W32 specific]
+				**
+				Key: "left"
+				Description: screen x coordinate from left
+				Values: positive integers
+				Default: 'center window on screen'
+				Notes: Ignored in case of full screen
+				**
+				Key: "top"
+				Description: screen y coordinate from top
+				Values: positive integers
+				Default: 'center window on screen'
+				Notes: Ignored in case of full screen
+				**
+				Key: "depthBuffer" [DX9 specific]
+				Description: Use depth buffer
+				Values: false or true
+				Default: true
+				**
+				Key: "externalWindowHandle" [API specific]
+				Description: External window handle, for embedding the OGRE context
+				Values: positive integer for W32 (HWND handle)
+				        poslong:posint:poslong (display*:screen:windowHandle) or
+				        poslong:posint:poslong:poslong (display*:screen:windowHandle:XVisualInfo*) for GLX
+				Default: 0 (None)
+				**
+				Key: "parentWindowHandle" [API specific]
+				Description: Parent window handle, for embedding the OGRE context
+				Values: positive integer for W32 (HWND handle)
+				        poslong:posint:poslong for GLX (display*:screen:windowHandle)
+				Default: 0 (None)
+				**
+				Key: "FSAA"
+				Description: Full screen antialiasing factor
+				Values: 0,2,4,6,...
+				Default: 0 
+				**
+				Key: "displayFrequency"
+				Description: Display frequency rate, for fullscreen mode
+				Values: 60...?
+				Default: Desktop vsync rate
+				**
+				Key: "vsync"
+				Description: Synchronize buffer swaps to vsync
+				Values: true, false
+				Default: 0
+				** 
+				Key: "border" 
+				Description: The type of window border (in windowed mode)
+				Values: none, fixed, resize
+				Default: resize
+				**
+				Key: "outerDimensions" 
+				Description: Whether the width/height is expressed as the size of the 
+				outer window, rather than the content area
+				Values: true, false
+				Default: false 
+        */
+		virtual RenderWindow* createRenderWindow(const String &name, unsigned int width, unsigned int height, 
+			bool fullScreen, const NameValuePairList *miscParams = 0) = 0;
+
+		/** Creates and registers a render texture object.
+			@param name 
+				The name for the new render texture. Note that names must be unique.
+			@param width
+				The requested width for the render texture. See Remarks for more info.
+			@param height
+				The requested width for the render texture. See Remarks for more info.
+			@param texType
+				The type of texture; defaults to TEX_TYPE_2D
+			@param internalFormat
+				The internal format of the texture; defaults to PF_X8R8G8B8
+			@param miscParams A NameValuePairList describing the other parameters for the new rendering window.
+					Unrecognised parameters will be ignored silently.
+					These values might be platform dependent, but these are present for all platorms unless
+					indicated otherwise:
+				**
+				Key: "FSAA"
+				Description: Full screen antialiasing factor
+				Values: 0,2,4,6,...
+				Default: 0
+				**
+				Key: "depth"
+				Description: Depth in case of render-to-texture TEX_3D
+				Values: positive integers
+			@returns
+				On succes, a pointer to a new platform-dependernt, RenderTexture-derived
+				class is returned. On failiure, NULL is returned.
+			@remarks
+				Because a render texture is basically a wrapper around a texture object,
+				the width and height parameters of this method just hint the preferred
+				size for the texture. Depending on the hardware driver or the underlying
+				API, these values might change when the texture is created. The same applies
+				to the internalFormat parameter.
+		*/
+		virtual RenderTexture * createRenderTexture( const String & name, unsigned int width, unsigned int height,
+		 	TextureType texType = TEX_TYPE_2D, PixelFormat internalFormat = PF_X8R8G8B8, 
+			const NameValuePairList *miscParams = 0 ) = 0; 
+
+        /** Destroys a render window */
+        virtual void destroyRenderWindow(const String& name);
+        /** Destroys a render texture */
+        virtual void destroyRenderTexture(const String& name);
+        /** Destroys a render target of any sort */
+        virtual void destroyRenderTarget(const String& name);
+
+        /** Attaches the passed render target to the render system.
+        */
+        virtual void attachRenderTarget( RenderTarget &target );
+        /** Returns a pointer to the render target with the passed name, or NULL if that
+            render target cannot be found.
+        */
+        virtual RenderTarget * getRenderTarget( const String &name );
+        /** Detaches the render target with the passed name from the render system and
+            returns a pointer to it.
+            @note
+                If the render target cannot be found, NULL is returned.
+        */
+        virtual RenderTarget * detachRenderTarget( const String &name );
+
+		/// Iterator over RenderTargets
+		typedef MapIterator<Ogre::RenderTargetMap> RenderTargetIterator;
+
+		/** Returns a specialised MapIterator over all render targets attached to the RenderSystem. */
+		virtual RenderTargetIterator getRenderTargetIterator(void) {
+			return RenderTargetIterator( mRenderTargets.begin(), mRenderTargets.end() );
+		}
+        /** Returns a description of an error code.
+        */
+        virtual String getErrorDescription(long errorNumber) const = 0;
+
+        /** Defines whether or now fullscreen render windows wait for the vertical blank before flipping buffers.
+            @remarks
+                By default, all rendering windows wait for a vertical blank (when the CRT beam turns off briefly to move
+                from the bottom right of the screen back to the top left) before flipping the screen buffers. This ensures
+                that the image you see on the screen is steady. However it restricts the frame rate to the refresh rate of
+                the monitor, and can slow the frame rate down. You can speed this up by not waiting for the blank, but
+                this has the downside of introducing 'tearing' artefacts where part of the previous frame is still displayed
+                as the buffers are switched. Speed vs quality, you choose.
+            @note
+                Has NO effect on windowed mode render targets. Only affects fullscreen mode.
+            @param
+                enabled If true, the system waits for vertical blanks - quality over speed. If false it doesn't - speed over quality.
+        */
+        void setWaitForVerticalBlank(bool enabled);
+
+        /** Returns true if the system is synchronising frames with the monitor vertical blank.
+        */
+        bool getWaitForVerticalBlank(void) const;
+
+        // ------------------------------------------------------------------------
+        //                     Internal Rendering Access
+        // All methods below here are normally only called by other OGRE classes
+        // They can be called by library user if required
+        // ------------------------------------------------------------------------
+
+
+        /** Tells the rendersystem to use the attached set of lights (and no others) 
+        up to the number specified (this allows the same list to be used with different
+        count limits) */
+        virtual void _useLights(const LightList& lights, unsigned short limit) = 0;
+        /** Sets the world transform matrix. */
+        virtual void _setWorldMatrix(const Matrix4 &m) = 0;
+        /** Sets multiple world matrices (vertex blending). */
+        virtual void _setWorldMatrices(const Matrix4* m, unsigned short count);
+        /** Sets the view transform matrix */
+        virtual void _setViewMatrix(const Matrix4 &m) = 0;
+        /** Sets the projection transform matrix */
+        virtual void _setProjectionMatrix(const Matrix4 &m) = 0;
+        /** Utility function for setting all the properties of a texture unit at once.
+            This method is also worth using over the individual texture unit settings because it
+            only sets those settings which are different from the current settings for this
+            unit, thus minimising render state changes.
+        */
+        virtual void _setTextureUnitSettings(size_t texUnit, TextureUnitState& tl);
+        /** Turns off a texture unit. */
+        virtual void _disableTextureUnit(size_t texUnit);
+        /** Disables all texture units from the given unit upwards */
+        virtual void _disableTextureUnitsFrom(size_t texUnit);
+        /** Sets the surface properties to be used for future rendering.
+
+            This method sets the the properties of the surfaces of objects
+            to be rendered after it. In this context these surface properties
+            are the amount of each type of light the object reflects (determining
+            it's colour under different types of light), whether it emits light
+            itself, and how shiny it is. Textures are not dealt with here,
+            see the _setTetxure method for details.
+            This method is used by _setMaterial so does not need to be called
+            direct if that method is being used.
+
+            @param ambient The amount of ambient (sourceless and directionless)
+            light an object reflects. Affected by the colour/amount of ambient light in the scene.
+            @param diffuse The amount of light from directed sources that is
+            reflected (affected by colour/amount of point, directed and spot light sources)
+            @param specular The amount of specular light reflected. This is also
+            affected by directed light sources but represents the colour at the
+            highlights of the object.
+            @param emissive The colour of light emitted from the object. Note that
+            this will make an object seem brighter and not dependent on lights in
+            the scene, but it will not act as a light, so will not illuminate other
+            objects. Use a light attached to the same SceneNode as the object for this purpose.
+            @param shininess A value which only has an effect on specular highlights (so
+            specular must be non-black). The higher this value, the smaller and crisper the
+            specular highlights will be, imitating a more highly polished surface.
+            This value is not constrained to 0.0-1.0, in fact it is likely to
+            be more (10.0 gives a modest sheen to an object).
+            @param tracking A bit field that describes which of the ambient, diffuse, specular
+            and emissive colours follow the vertex colour of the primitive. When a bit in this field is set
+            its ColourValue is ignored. This is a combination of TVC_AMBIENT, TVC_DIFFUSE, TVC_SPECULAR(note that the shininess value is still
+            taken from shininess) and TVC_EMISSIVE. TVC_NONE means that there will be no material property
+            tracking the vertex colours.
+        */
+        virtual void _setSurfaceParams(const ColourValue &ambient,
+            const ColourValue &diffuse, const ColourValue &specular,
+            const ColourValue &emissive, Real shininess,
+            TrackVertexColourType tracking = TVC_NONE) = 0;
+        /**
+          Sets the status of a single texture stage.
+
+          Sets the details of a texture stage, to be used for all primitives
+          rendered afterwards. User processes would
+          not normally call this direct unless rendering
+          primitives themselves - the SubEntity class
+          is designed to manage materials for objects.
+          Note that this method is called by _setMaterial.
+
+          @param unit The index of the texture unit to modify. Multitexturing hardware
+          can support multiple units (see RenderSystemCapabilites::numTextureUnits)
+          @param enabled Boolean to turn the unit on/off
+          @param texname The name of the texture to use - this should have
+              already been loaded with TextureManager::load.
+         */
+        virtual void _setTexture(size_t unit, bool enabled, const String &texname) = 0;
+
+        /**
+          Sets the texture coordinate set to use for a texture unit.
+
+          Meant for use internally - not generally used directly by apps - the Material and TextureUnitState
+          classes let you manage textures far more easily.
+
+          @param unit Texture unit as above
+          @param index The index of the texture coordinate set to use.
+         */
+        virtual void _setTextureCoordSet(size_t unit, size_t index) = 0;
+
+        /**
+          Sets a method for automatically calculating texture coordinates for a stage.
+          Should not be used by apps - for use by Ogre only.
+          @param unit Texture unit as above
+          @param m Calculation method to use
+          @param frustum Optional Frustum param, only used for projective effects
+         */
+        virtual void _setTextureCoordCalculation(size_t unit, TexCoordCalcMethod m, 
+            const Frustum* frustum = 0) = 0;
+
+        /** Sets the texture blend modes from a TextureUnitState record.
+            Meant for use internally only - apps should use the Material
+            and TextureUnitState classes.
+            @param unit Texture unit as above
+            @param bm Details of the blending mode
+        */
+        virtual void _setTextureBlendMode(size_t unit, const LayerBlendModeEx& bm) = 0;
+
+        /** Sets the filtering options for a given texture unit.
+        @param unit The texture unit to set the filtering options for
+        @param minFilter The filter used when a texture is reduced in size
+        @param magFilter The filter used when a texture is magnified
+        @param mipFilter The filter used between mipmap levels, FO_NONE disables mipmapping
+        */
+        virtual void _setTextureUnitFiltering(size_t unit, FilterOptions minFilter,
+            FilterOptions magFilter, FilterOptions mipFilter);
+
+        /** Sets a single filter for a given texture unit.
+        @param unit The texture unit to set the filtering options for
+        @param ftype The filter type
+        @param filter The filter to be used
+        */
+        virtual void _setTextureUnitFiltering(size_t unit, FilterType ftype, FilterOptions filter) = 0;
+
+		/** Sets the maximal anisotropy for the specified texture unit.*/
+		virtual void _setTextureLayerAnisotropy(size_t unit, unsigned int maxAnisotropy) = 0;
+
+		/** Sets the texture addressing mode for a texture unit.*/
+        virtual void _setTextureAddressingMode(size_t unit, TextureUnitState::TextureAddressingMode tam) = 0;
+
+        /** Sets the texture coordinate transformation matrix for a texture unit.
+            @param unit Texture unit to affect
+            @param xform The 4x4 matrix
+        */
+        virtual void _setTextureMatrix(size_t unit, const Matrix4& xform) = 0;
+
+        /** Sets the global blending factors for combining subsequent renders with the existing frame contents.
+            The result of the blending operation is:</p>
+            <p align="center">final = (texture * sourceFactor) + (pixel * destFactor)</p>
+            Each of the factors is specified as one of a number of options, as specified in the SceneBlendFactor
+            enumerated type.
+            @param sourceFactor The source factor in the above calculation, i.e. multiplied by the texture colour components.
+            @param destFactor The destination factor in the above calculation, i.e. multiplied by the pixel colour components.
+        */
+        virtual void _setSceneBlending(SceneBlendFactor sourceFactor, SceneBlendFactor destFactor) = 0;
+
+        /** Sets the global alpha rejection approach for future renders.
+            By default images are rendered regardless of texture alpha. This method lets you change that.
+            @param func The comparison function which must pass for a pixel to be written.
+            @param val The value to compare each pixels alpha value to (0-255)
+        */
+        virtual void _setAlphaRejectSettings(CompareFunction func, unsigned char value) = 0;
+        /**
+         * Signifies the beginning of a frame, ie the start of rendering on a single viewport. Will occur
+         * several times per complete frame if multiple viewports exist.
+         */
+        virtual void _beginFrame(void) = 0;
+
+
+        /**
+         * Ends rendering of a frame to the current viewport.
+         */
+        virtual void _endFrame(void) = 0;
+        /**
+          Sets the provided viewport as the active one for future
+          rendering operations. This viewport is aware of it's own
+          camera and render target. Must be implemented by subclass.
+
+          @param target Pointer to the appropriate viewport.
+         */
+        virtual void _setViewport(Viewport *vp) = 0;
+        /** Get the current active viewport for rendering. */
+        virtual Viewport* _getViewport(void);
+
+        /** Sets the culling mode for the render system based on the 'vertex winding'.
+            A typical way for the rendering engine to cull triangles is based on the
+            'vertex winding' of triangles. Vertex winding refers to the direction in
+            which the vertices are passed or indexed to in the rendering operation as viewed
+            from the camera, and will wither be clockwise or anticlockwise (that's 'counterclockwise' for
+            you Americans out there ;) The default is CULL_CLOCKWISE i.e. that only triangles whose vertices
+            are passed/indexed in anticlockwise order are rendered - this is a common approach and is used in 3D studio models
+            for example. You can alter this culling mode if you wish but it is not advised unless you know what you are doing.
+            You may wish to use the CULL_NONE option for mesh data that you cull yourself where the vertex
+            winding is uncertain.
+        */
+        virtual void _setCullingMode(CullingMode mode) = 0;
+
+        virtual CullingMode _getCullingMode(void) const;
+
+        /** Sets the mode of operation for depth buffer tests from this point onwards.
+            Sometimes you may wish to alter the behaviour of the depth buffer to achieve
+            special effects. Because it's unlikely that you'll set these options for an entire frame,
+            but rather use them to tweak settings between rendering objects, this is an internal
+            method (indicated by the '_' prefix) which will be used by a SceneManager implementation
+            rather than directly from the client application.
+            If this method is never called the settings are automatically the same as the default parameters.
+            @param depthTest If true, the depth buffer is tested for each pixel and the frame buffer is only updated
+                if the depth function test succeeds. If false, no test is performed and pixels are always written.
+            @param depthWrite If true, the depth buffer is updated with the depth of the new pixel if the depth test succeeds.
+                If false, the depth buffer is left unchanged even if a new pixel is written.
+            @param depthFunction Sets the function required for the depth test.
+        */
+        virtual void _setDepthBufferParams(bool depthTest = true, bool depthWrite = true, CompareFunction depthFunction = CMPF_LESS_EQUAL) = 0;
+
+        /** Sets whether or not the depth buffer check is performed before a pixel write.
+            @param enabled If true, the depth buffer is tested for each pixel and the frame buffer is only updated
+                if the depth function test succeeds. If false, no test is performed and pixels are always written.
+        */
+        virtual void _setDepthBufferCheckEnabled(bool enabled = true) = 0;
+        /** Sets whether or not the depth buffer is updated after a pixel write.
+            @param enabled If true, the depth buffer is updated with the depth of the new pixel if the depth test succeeds.
+                If false, the depth buffer is left unchanged even if a new pixel is written.
+        */
+        virtual void _setDepthBufferWriteEnabled(bool enabled = true) = 0;
+        /** Sets the comparison function for the depth buffer check.
+            Advanced use only - allows you to choose the function applied to compare the depth values of
+            new and existing pixels in the depth buffer. Only an issue if the deoth buffer check is enabled
+            (see _setDepthBufferCheckEnabled)
+            @param  func The comparison between the new depth and the existing depth which must return true
+             for the new pixel to be written.
+        */
+        virtual void _setDepthBufferFunction(CompareFunction func = CMPF_LESS_EQUAL) = 0;
+		/** Sets whether or not colour buffer writing is enabled, and for which channels. 
+		@remarks
+			For some advanced effects, you may wish to turn off the writing of certain colour
+			channels, or even all of the colour channels so that only the depth buffer is updated
+			in a rendering pass. However, the chances are that you really want to use this option
+			through the Material class.
+		@param red, green, blue, alpha Whether writing is enabled for each of the 4 colour channels. */
+		virtual void _setColourBufferWriteEnabled(bool red, bool green, bool blue, bool alpha) = 0;
+        /** Sets the depth bias, NB you should use the Material version of this. 
+        @remarks
+            When polygons are coplanar, you can get problems with 'depth fighting' where
+            the pixels from the two polys compete for the same screen pixel. This is particularly
+            a problem for decals (polys attached to another surface to represent details such as
+            bulletholes etc.).
+        @par
+            A way to combat this problem is to use a depth bias to adjust the depth buffer value
+            used for the decal such that it is slightly higher than the true value, ensuring that
+            the decal appears on top.
+        @param bias The bias value, should be between 0 and 16.
+        */
+        virtual void _setDepthBias(ushort bias) = 0;
+        /** Sets the fogging mode for future geometry.
+            @param mode Set up the mode of fog as described in the FogMode enum, or set to FOG_NONE to turn off.
+            @param colour The colour of the fog. Either set this to the same as your viewport background colour,
+                or to blend in with a skydome or skybox.
+            @param expDensity The density of the fog in FOG_EXP or FOG_EXP2 mode, as a value between 0 and 1. The default is 1. i.e. completely opaque, lower values can mean
+                that fog never completely obscures the scene.
+            @param linearStart Distance at which linear fog starts to encroach. The distance must be passed
+                as a parametric value between 0 and 1, with 0 being the near clipping plane, and 1 being the far clipping plane. Only applicable if mode is FOG_LINEAR.
+            @param linearEnd Distance at which linear fog becomes completely opaque.The distance must be passed
+                as a parametric value between 0 and 1, with 0 being the near clipping plane, and 1 being the far clipping plane. Only applicable if mode is FOG_LINEAR.
+        */
+        virtual void _setFog(FogMode mode = FOG_NONE, const ColourValue& colour = ColourValue::White, Real expDensity = 1.0, Real linearStart = 0.0, Real linearEnd = 1.0) = 0;
+
+
+        /** The RenderSystem will keep a count of tris rendered, this resets the count. */
+        virtual void _beginGeometryCount(void);
+        /** Reports the number of tris rendered since the last _beginGeometryCount call. */
+        virtual unsigned int _getFaceCount(void) const;
+        /** Reports the number of vertices passed to the renderer since the last _beginGeometryCount call. */
+        virtual unsigned int _getVertexCount(void) const;
+
+        /** Generates a packed data version of the passed in ColourValue suitable for
+            use as with this RenderSystem.
+        @remarks
+            Since different render systems have different colour data formats (eg
+            RGBA for GL, ARGB for D3D) this method allows you to use 1 method for all.
+        @param colour The colour to convert
+        @param pDest Pointer to location to put the result.
+        */
+        virtual void convertColourValue(const ColourValue& colour, uint32* pDest) = 0;
+
+        /** Builds a perspective projection matrix suitable for this render system.
+        @remarks
+            Because different APIs have different requirements (some incompatible) for the
+            projection matrix, this method allows each to implement their own correctly and pass
+            back a generic OGRE matrix for storage in the engine.
+        */
+        virtual void _makeProjectionMatrix(const Radian& fovy, Real aspect, Real nearPlane, Real farPlane, 
+            Matrix4& dest, bool forGpuProgram = false) = 0;
+
+        /** Builds a perspective projection matrix for the case when frustum is
+            not centered around camera.
+        @remarks
+            Viewport coordinates are in camera coordinate frame, i.e. camera is 
+            at the origin.
+        */
+        virtual void _makeProjectionMatrix(Real left, Real right, Real bottom, Real top, 
+            Real nearPlane, Real farPlane, Matrix4& dest, bool forGpuProgram = false) = 0;
+        /** Builds an orthographic projection matrix suitable for this render system.
+        @remarks
+            Because different APIs have different requirements (some incompatible) for the
+            projection matrix, this method allows each to implement their own correctly and pass
+            back a generic OGRE matrix for storage in the engine.
+        */
+        virtual void _makeOrthoMatrix(const Radian& fovy, Real aspect, Real nearPlane, Real farPlane, 
+            Matrix4& dest, bool forGpuProgram = false) = 0;
+
+		/** Update a perspective projection matrix to use 'oblique depth projection'.
+		@remarks
+			This method can be used to change the nature of a perspective 
+			transform in order to make the near plane not perpendicular to the 
+			camera view direction, but to be at some different orientation. 
+			This can be useful for performing arbitrary clipping (e.g. to a 
+			reflection plane) which could otherwise only be done using user
+			clip planes, which are more expensive, and not necessarily supported
+			on all cards.
+		@param matrix The existing projection matrix. Note that this must be a
+			perspective transform (not orthographic), and must not have already
+			been altered by this method. The matrix will be altered in-place.
+		@param plane The plane which is to be used as the clipping plane. This
+			plane must be in CAMERA (view) space.
+        @param forGpuProgram Is this for use with a Gpu program or fixed-function
+		*/
+		virtual void _applyObliqueDepthProjection(Matrix4& matrix, const Plane& plane, 
+            bool forGpuProgram) = 0;
+		
+        /** Sets how to rasterise triangles, as points, wireframe or solid polys. */
+        virtual void _setRasterisationMode(SceneDetailLevel level) = 0;
+
+        /** Turns stencil buffer checking on or off. 
+        @remarks
+            Stencilling (masking off areas of the rendering target based on the stencil 
+            buffer) canbe turned on or off using this method. By default, stencilling is
+            disabled.
+        */
+        virtual void setStencilCheckEnabled(bool enabled) = 0;
+        /** Determines if this system supports hardware accelerated stencil buffer. 
+        @remarks
+            Note that the lack of this function doesn't mean you can't do stencilling, but
+            the stencilling operations will be provided in software, which will NOT be
+            fast.
+        @par
+            Generally hardware stencils are only supported in 32-bit colour modes, because
+            the stencil buffer shares the memory of the z-buffer, and in most cards the 
+            z-buffer has to be the same depth as the colour buffer. This means that in 32-bit
+            mode, 24 bits of the z-buffer are depth and 8 bits are stencil. In 16-bit mode there
+            is no room for a stencil (although some cards support a 15:1 depth:stencil option,
+            this isn't useful for very much) so 8 bits of stencil are provided in software.
+            This can mean that if you use stencilling, your applications may be faster in 
+            32-but colour than in 16-bit, which may seem odd to some people.
+        */
+        /*virtual bool hasHardwareStencil(void) = 0;*/
+
+        /** This method allows you to set all the stencil buffer parameters in one call.
+        @remarks
+            The stencil buffer is used to mask out pixels in the render target, allowing
+            you to do effects like mirrors, cut-outs, stencil shadows and more. Each of
+            your batches of rendering is likely to ignore the stencil buffer, 
+            update it with new values, or apply it to mask the output of the render.
+            The stencil test is:<PRE>
+            (Reference Value & Mask) CompareFunction (Stencil Buffer Value & Mask)</PRE>
+            The result of this will cause one of 3 actions depending on whether the test fails,
+            succeeds but with the depth buffer check still failing, or succeeds with the
+            depth buffer check passing too.
+        @par
+            Unlike other render states, stencilling is left for the application to turn
+            on and off when it requires. This is because you are likely to want to change
+            parameters between batches of arbitrary objects and control the ordering yourself.
+            In order to batch things this way, you'll want to use OGRE's separate render queue
+            groups (see RenderQueue) and register a RenderQueueListener to get notifications
+            between batches.
+        @par
+            There are individual state change methods for each of the parameters set using 
+            this method. 
+            Note that the default values in this method represent the defaults at system 
+            start up too.
+        @param func The comparison function applied.
+        @param refValue The reference value used in the comparison
+        @param mask The bitmask applied to both the stencil value and the reference value 
+            before comparison
+        @param stencilFailOp The action to perform when the stencil check fails
+        @param depthFailOp The action to perform when the stencil check passes, but the
+            depth buffer check still fails
+        @param passOp The action to take when both the stencil and depth check pass.
+        @param twoSidedOperation If set to true, then if you render both back and front faces 
+            (you'll have to turn off culling) then these parameters will apply for front faces, 
+            and the inverse of them will happen for back faces (keep remains the same).
+        */
+        virtual void setStencilBufferParams(CompareFunction func = CMPF_ALWAYS_PASS, 
+            uint32 refValue = 0, uint32 mask = 0xFFFFFFFF, 
+            StencilOperation stencilFailOp = SOP_KEEP, 
+            StencilOperation depthFailOp = SOP_KEEP,
+            StencilOperation passOp = SOP_KEEP, 
+            bool twoSidedOperation = false) = 0;
+
+
+
+		/** Sets the current vertex declaration, ie the source of vertex data. */
+		virtual void setVertexDeclaration(VertexDeclaration* decl) = 0;
+		/** Sets the current vertex buffer binding state. */
+		virtual void setVertexBufferBinding(VertexBufferBinding* binding) = 0;
+
+        /** Sets whether or not normals are to be automatically normalised.
+        @remarks
+            This is useful when, for example, you are scaling SceneNodes such that
+            normals may not be unit-length anymore. Note though that this has an
+            overhead so should not be turn on unless you really need it.
+        @par
+            You should not normally call this direct unless you are rendering
+            world geometry; set it on the Renderable because otherwise it will be
+            overridden by material settings. 
+        */
+        virtual void setNormaliseNormals(bool normalise) = 0;
+
+        /**
+          Render something to the active viewport.
+
+          Low-level rendering interface to perform rendering
+          operations. Unlikely to be used directly by client
+          applications, since the SceneManager and various support
+          classes will be responsible for calling this method.
+          Can only be called between _beginScene and _endScene
+
+          @param op A rendering operation instance, which contains
+            details of the operation to be performed.
+         */
+        virtual void _render(const RenderOperation& op);
+
+		/** Gets the capabilities of the render system. */
+		const RenderSystemCapabilities* getCapabilities(void) const { return mCapabilities; }
+
+        /** Binds a given GpuProgram (but not the parameters). 
+        @remarks Only one GpuProgram of each type can be bound at once, binding another
+        one will simply replace the exsiting one.
+        */
+        virtual void bindGpuProgram(GpuProgram* prg) = 0;
+
+        /** Bind Gpu program parameters. */
+        virtual void bindGpuProgramParameters(GpuProgramType gptype, GpuProgramParametersSharedPtr params) = 0;
+        /** Unbinds GpuPrograms of a given GpuProgramType.
+        @remarks
+            This returns the pipeline to fixed-function processing for this type.
+        */
+        virtual void unbindGpuProgram(GpuProgramType gptype) = 0;
+
+        /** sets the clipping region.
+        */
+        virtual void setClipPlanes(const PlaneList& clipPlanes) = 0;
+
+        /** Utility method for initialising all render targets attached to this rendering system. */
+        virtual void _initRenderTargets(void);
+
+        /** Utility method to notify all render targets that a camera has been removed, 
+            incase they were referring to it as their viewer. 
+        */
+        virtual void _notifyCameraRemoved(const Camera* cam);
+
+        /** Internal method for updating all render targets attached to this rendering system. */
+        virtual void _updateAllRenderTargets(void);
+
+        /** Set a clipping plane. */
+        virtual void setClipPlane (ushort index, const Plane &p);
+        /** Set a clipping plane. */
+        virtual void setClipPlane (ushort index, Real A, Real B, Real C, Real D) = 0;
+        /** Enable the clipping plane. */
+        virtual void enableClipPlane (ushort index, bool enable) = 0;
+
+        /** Sets whether or not vertex windings set should be inverted; this can be important
+            for rendering reflections. */
+        virtual void setInvertVertexWinding(bool invert);
+        /** Sets the 'scissor region' ie the region of the target in which rendering can take place.
+        @remarks
+            This method allows you to 'mask off' rendering in all but a given rectangular area
+            as identified by the parameters to this method.
+        @note
+            Not all systems support this method. Check the RenderSystemCapabilities for the
+            RSC_SCISSOR_TEST capability to see if it is supported.
+        @param enabled True to enable the scissor test, false to disable it.
+        @param left, top, right, bottom The location of the corners of the rectangle, expressed in
+            <i>pixels</i>.
+        */
+        virtual void setScissorTest(bool enabled, size_t left = 0, size_t top = 0, 
+            size_t right = 800, size_t bottom = 600) = 0;
+
+        /** Clears one or more frame buffers on the active render target. 
+        @param buffers Combination of one or more elements of FrameBufferType
+            denoting which buffers are to be cleared
+        @param colour The colour to clear the colour buffer with, if enabled
+        @param depth The value to initialise the depth buffer with, if enabled
+        @param stencil The value to initialise the stencil buffer with, if enabled.
+        */
+        virtual void clearFrameBuffer(unsigned int buffers, 
+            const ColourValue& colour = ColourValue::Black, 
+            Real depth = 1.0f, unsigned short stencil = 0) = 0;
+        /** Returns the horizontal texel offset value required for mapping 
+            texel origins to pixel origins in this rendersystem.
+        @remarks
+            Since rendersystems sometimes disagree on the origin of a texel, 
+            mapping from texels to pixels can sometimes be problematic to 
+            implement generically. This method allows you to retrieve the offset
+            required to map the origin of a texel to the origin of a pixel in
+            the horizontal direction.
+        */
+        virtual Real getHorizontalTexelOffset(void) = 0;
+        /** Returns the vertical texel offset value required for mapping 
+        texel origins to pixel origins in this rendersystem.
+        @remarks
+        Since rendersystems sometimes disagree on the origin of a texel, 
+        mapping from texels to pixels can sometimes be problematic to 
+        implement generically. This method allows you to retrieve the offset
+        required to map the origin of a texel to the origin of a pixel in
+        the vertical direction.
+        */
+        virtual Real getVerticalTexelOffset(void) = 0;
+
+        /** Gets the minimum (closest) depth value to be used when rendering
+            using identity transforms.
+        @remarks
+            When using identity transforms you can manually set the depth
+            of a vertex; however the input values required differ per
+            rendersystem. This method lets you retrieve the correct value.
+        @see Renderable::useIdentityView, Renderable::useIdentityProjection
+        */
+        virtual Real getMinimumDepthInputValue(void) = 0;
+        /** Gets the maximum (farthest) depth value to be used when rendering
+            using identity transforms.
+        @remarks
+            When using identity transforms you can manually set the depth
+            of a vertex; however the input values required differ per
+            rendersystem. This method lets you retrieve the correct value.
+        @see Renderable::useIdentityView, Renderable::useIdentityProjection
+        */
+        virtual Real getMaximumDepthInputValue(void) = 0;
+
+		/** Defines a listener on the custom events that this render system 
+			can raise.
+		@see RenderSystem::addListener
+		*/
+		class _OgreExport Listener
+		{
+		public:
+			Listener() {}
+			virtual ~Listener() {}
+
+			/** A rendersystem-specific event occurred.
+			@param eventName The name of the event which has occurred
+			@param parameters A list of parameters that may belong to this event,
+				may be null if there are no parameters
+			*/
+			virtual void eventOccurred(const String& eventName, 
+				const NameValuePairList* parameters = 0) = 0;
+		};
+		/** Adds a listener to the custom events that this render system can raise.
+		@remarks
+			Some render systems have quite specific, internally generated events 
+			that the application may wish to be notified of. Many applications
+			don't have to worry about these events, and can just trust OGRE to 
+			handle them, but if you want to know, you can add a listener here.
+		@par
+			Events are raised very generically by string name. Perhaps the most 
+			common example of a render system specific event is the loss and 
+			restoration of a device in DirectX; which OGRE deals with, but you 
+			may wish to know when it happens. 
+		@see RenderSystem::getRenderSystemEvents
+		*/
+		virtual void addListener(Listener* l);
+		/** Remove a listener to the custom events that this render system can raise.
+		*/
+		virtual void removeListener(Listener* l);
+
+		/** Gets a list of the rendersystem specific events that this rendersystem
+			can raise.
+		@see RenderSystem::addListener
+		*/
+		virtual const StringVector& getRenderSystemEvents(void) const { return mEventNames; }
+    protected:
+
+
+        /** The render targets. */
+        RenderTargetMap mRenderTargets;
+		/** The render targets, ordered by priority. */
+		RenderTargetPriorityMap mPrioritisedRenderTargets;
+		/** The Active render target. */
+		RenderTarget * mActiveRenderTarget;
+
+        // Texture manager
+        // A concrete class of this will be created and
+        // made available under the TextureManager singleton,
+        // managed by the RenderSystem
+        TextureManager* mTextureManager;
+
+        /// Used to store the capabilities of the graphics card
+        RenderSystemCapabilities* mCapabilities;
+
+        // Active viewport (dest for future rendering operations)
+        Viewport* mActiveViewport;
+
+        CullingMode mCullingMode;
+
+        bool mVSync;
+		bool mWBuffer;
+
+        size_t mFaceCount;
+        size_t mVertexCount;
+
+        /// Saved set of world matrices
+        Matrix4 mWorldMatrices[256];
+
+		/// Saved manual colour blends
+		ColourValue mManualBlendColours[OGRE_MAX_TEXTURE_LAYERS][2];
+
+        bool mInvertVertexWinding;
+
+		/// List of names of events this rendersystem may raise
+		StringVector mEventNames;
+
+		/// Internal method for firing a rendersystem event
+		virtual void fireEvent(const String& name, const NameValuePairList* params = 0);
+
+		typedef std::list<Listener*> ListenerList;
+		ListenerList mEventListeners;
+
+    };
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderQueue.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderQueue.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderQueue.h	(revision 1092)
@@ -0,0 +1,200 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __RenderQueue_H__
+#define __RenderQueue_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreIteratorWrappers.h"
+
+namespace Ogre {
+
+    /** Enumeration of queue groups, by which the application may group queued renderables
+        so that they are rendered together with events in between
+    */
+    enum RenderQueueGroupID
+    {
+        /// Use this queue for objects which must be rendered first e.g. backgrounds
+        RENDER_QUEUE_BACKGROUND = 0,
+        /// First queue (after backgrounds), used for skyboxes if rendered first
+        RENDER_QUEUE_SKIES_EARLY = 5,
+        RENDER_QUEUE_1 = 10,
+        RENDER_QUEUE_2 = 20,
+		RENDER_QUEUE_WORLD_GEOMETRY_1 = 25,
+        RENDER_QUEUE_3 = 30,
+        RENDER_QUEUE_4 = 40,
+		/// The default render queue
+        RENDER_QUEUE_MAIN = 50,
+        RENDER_QUEUE_6 = 60,
+        RENDER_QUEUE_7 = 70,
+		RENDER_QUEUE_WORLD_GEOMETRY_2 = 75,
+        RENDER_QUEUE_8 = 80,
+        RENDER_QUEUE_9 = 90,
+        /// Penultimate queue(before overlays), used for skyboxes if rendered last
+        RENDER_QUEUE_SKIES_LATE = 95,
+        /// Use this queue for objects which must be rendered last e.g. overlays
+        RENDER_QUEUE_OVERLAY = 100
+    };
+
+    #define OGRE_RENDERABLE_DEFAULT_PRIORITY  100
+
+    /** Class to manage the scene object rendering queue.
+        @remarks
+            Objects are grouped by material to minimise rendering state changes. The map from
+            material to renderable object is wrapped in a class for ease of use.
+        @par
+            This class now includes the concept of 'queue groups' which allows the application
+            adding the renderable to specifically schedule it so that it is included in 
+            a discrete group. Good for separating renderables into the main scene,
+            backgrounds and overlays, and also could be used in the future for more
+            complex multipass routines like stenciling.
+    */
+    class _OgreExport RenderQueue
+    {
+    public:
+        typedef std::map< RenderQueueGroupID, RenderQueueGroup* > RenderQueueGroupMap;
+        /// Iterator over queue groups
+        typedef MapIterator<RenderQueueGroupMap> QueueGroupIterator;
+    protected:
+        RenderQueueGroupMap mGroups;
+        /// The current default queue group
+        RenderQueueGroupID mDefaultQueueGroup;
+        /// The default priority
+        ushort mDefaultRenderablePriority;
+
+        bool mSplitPassesByLightingType;
+        bool mSplitNoShadowPasses;
+    public:
+        RenderQueue();
+        virtual ~RenderQueue();
+
+        /** Empty the queue - should only be called by SceneManagers.
+		@param destroyPassMaps Set to true to destroy all pass maps so that
+			the queue is completely clean (useful when switching scene managers)
+        */
+        void clear(bool destroyPassMaps = false);
+
+		/** Get a render queue group.
+		@remarks
+			OGRE registers new queue groups as they are requested, 
+			therefore this method will always return a valid group.
+		*/
+		RenderQueueGroup* getQueueGroup(RenderQueueGroupID qid);
+
+        /** Add a renderable object to the queue.
+        @remarks
+            This methods adds a Renderable to the queue, which will be rendered later by 
+            the SceneManager. This is the advanced version of the call which allows the renderable
+            to be added to any queue.
+        @note
+            Called by implementation of MovableObject::_updateRenderQueue.
+        @param
+            pRend Pointer to the Renderable to be added to the queue
+        @param
+            groupID The group the renderable is to be added to. This
+            can be used to schedule renderable objects in separate groups such that the SceneManager
+            respects the divisions between the groupings and does not reorder them outside these
+            boundaries. This can be handy for overlays where no matter what you want the overlay to 
+            be rendered last.
+        @param
+            priority Controls the priority of the renderable within the queue group. If this number
+            is raised, the renderable will be rendered later in the group compared to it's peers.
+            Don't use this unless you really need to, manually ordering renderables prevents OGRE
+            from sorting them for best efficiency. However this could be useful for ordering 2D
+            elements manually for example.
+        */
+        void addRenderable(Renderable* pRend, RenderQueueGroupID groupID, ushort priority);
+
+        /** Add a renderable object to the queue.
+        @remarks
+            This methods adds a Renderable to the queue, which will be rendered later by 
+            the SceneManager. This is the simplified version of the call which does not 
+            require a priority to be specified. The queue priority is take from the
+            current default (see setDefaultRenderablePriority).
+        @note
+            Called by implementation of MovableObject::_updateRenderQueue.
+        @param
+            pRend Pointer to the Renderable to be added to the queue
+		@param
+            groupID The group the renderable is to be added to. This
+            can be used to schedule renderable objects in separate groups such that the SceneManager
+            respects the divisions between the groupings and does not reorder them outside these
+            boundaries. This can be handy for overlays where no matter what you want the overlay to 
+            be rendered last.
+        */
+        void addRenderable(Renderable* pRend, RenderQueueGroupID groupId);
+
+        /** Add a renderable object to the queue.
+        @remarks
+            This methods adds a Renderable to the queue, which will be rendered later by 
+            the SceneManager. This is the simplified version of the call which does not 
+            require a queue or priority to be specified. The queue group is taken from the
+            current default (see setDefaultQueueGroup).  The queue priority is take from the
+            current default (see setDefaultRenderablePriority).
+        @note
+            Called by implementation of MovableObject::_updateRenderQueue.
+        @param
+            pRend Pointer to the Renderable to be added to the queue
+        */
+        void addRenderable(Renderable* pRend);
+        
+        /** Gets the current default queue group, which will be used for all renderable which do not
+            specify which group they wish to be on.
+        */
+        RenderQueueGroupID getDefaultQueueGroup(void) const;
+
+        /** Sets the current default renderable priority, 
+            which will be used for all renderables which do not
+            specify which priority they wish to use.
+        */
+        void setDefaultRenderablePriority(ushort priority);
+
+        /** Gets the current default renderable priority, which will be used for all renderables which do not
+            specify which priority they wish to use.
+        */
+        ushort getDefaultRenderablePriority(void) const;
+
+        /** Sets the current default queue group, which will be used for all renderable which do not
+            specify which group they wish to be on.
+        */
+        void setDefaultQueueGroup(RenderQueueGroupID grp);
+        
+        /** Internal method, returns an iterator for the queue groups. */
+        QueueGroupIterator _getQueueGroupIterator(void);
+        /** Sets whether or not the queue will split passes by their lighting type,
+            ie ambient, per-light and decal. 
+        */
+        void setSplitPassesByLightingType(bool split);
+        /** Sets whether or not the queue will split passes which have shadow receive
+        turned off (in their parent material), which is needed when certain shadow
+        techniques are used.
+        */
+        void setSplitNoShadowPasses(bool split);
+    };
+
+
+}
+
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePlatform.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePlatform.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePlatform.h	(revision 1092)
@@ -0,0 +1,205 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __Platform_H_
+#define __Platform_H_
+
+#include "OgreConfig.h"
+
+namespace Ogre {
+/* Initial platform/compiler-related stuff to set.
+*/
+#define OGRE_PLATFORM_WIN32 1
+#define OGRE_PLATFORM_LINUX 2
+#define OGRE_PLATFORM_APPLE 3
+
+#define OGRE_COMPILER_MSVC 1
+#define OGRE_COMPILER_GNUC 2
+#define OGRE_COMPILER_BORL 3
+
+#define OGRE_ENDIAN_LITTLE 1
+#define OGRE_ENDIAN_BIG 2
+
+#define OGRE_ARCHITECTURE_32 1
+#define OGRE_ARCHITECTURE_64 2
+
+/* Finds the compiler type and version.
+*/
+#if defined( _MSC_VER )
+#   define OGRE_COMPILER OGRE_COMPILER_MSVC
+#   define OGRE_COMP_VER _MSC_VER
+
+#elif defined( __GNUC__ )
+#   define OGRE_COMPILER OGRE_COMPILER_GNUC
+#   define OGRE_COMP_VER (((__GNUC__)*100) + \
+        (__GNUC_MINOR__*10) + \
+        __GNUC_PATCHLEVEL__)
+
+#elif defined( __BORLANDC__ )
+#   define OGRE_COMPILER OGRE_COMPILER_BORL
+#   define OGRE_COMP_VER __BCPLUSPLUS__
+
+#else
+#   pragma error "No known compiler. Abort! Abort!"
+
+#endif
+
+/* See if we can use __forceinline or if we need to use __inline instead */
+#if OGRE_COMPILER == OGRE_COMPILER_MSVC 
+#   if OGRE_COMP_VER >= 1200
+#       define FORCEINLINE __forceinline
+#   endif
+#else
+#   define FORCEINLINE __inline
+#endif
+
+/* Finds the current platform */
+
+#if defined( __WIN32__ ) || defined( _WIN32 )
+#   define OGRE_PLATFORM OGRE_PLATFORM_WIN32
+
+#elif defined( __APPLE_CC__)
+#   define OGRE_PLATFORM OGRE_PLATFORM_APPLE
+
+#else
+#   define OGRE_PLATFORM OGRE_PLATFORM_LINUX
+#endif
+
+/* Find the arch type */
+#if defined(__x86_64__)
+#   define OGRE_ARCH_TYPE OGRE_ARCHITECTURE_64
+#else
+#   define OGRE_ARCH_TYPE OGRE_ARCHITECTURE_32
+#endif
+// For generating compiler warnings - should work on any compiler
+// As a side note, if you start your message with 'Warning: ', the MSVC
+// IDE actually does catch a warning :)
+#define OGRE_QUOTE_INPLACE(x) # x
+#define OGRE_QUOTE(x) OGRE_QUOTE_INPLACE(x)
+#define OGRE_WARN( x )  message( __FILE__ "(" QUOTE( __LINE__ ) ") : " x "\n" )
+
+//----------------------------------------------------------------------------
+// Windows Settings
+#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
+
+// If we're not including this from a client build, specify that the stuff
+// should get exported. Otherwise, import it.
+#	if defined( __MINGW32__ )
+		// Linux compilers don't have symbol import/export directives.
+#   	define _OgreExport
+#   	define _OgrePrivate
+#   else
+#   	if defined( OGRE_NONCLIENT_BUILD )
+#       	define _OgreExport __declspec( dllexport )
+#   	else
+#       	define _OgreExport __declspec( dllimport )
+#   	endif
+#   	define _OgrePrivate
+#	endif
+// Win32 compilers use _DEBUG for specifying debug builds.
+#   ifdef _DEBUG
+#       define OGRE_DEBUG_MODE 1
+#   else
+#       define OGRE_DEBUG_MODE 0
+#   endif
+
+#if defined( __MINGW32__ )
+    #define EXT_HASH
+#else
+    #define snprintf _snprintf
+    #define vsnprintf _vsnprintf
+#endif
+
+#if OGRE_DEBUG_MODE
+    #define OGRE_PLATFORM_LIB "OgrePlatform_d.dll"
+#else
+    #define OGRE_PLATFORM_LIB "OgrePlatform.dll"
+#endif
+
+#endif
+//----------------------------------------------------------------------------
+
+//----------------------------------------------------------------------------
+// Linux/Apple Settings
+#if OGRE_PLATFORM == OGRE_PLATFORM_LINUX || OGRE_PLATFORM == OGRE_PLATFORM_APPLE
+
+// Enable GCC 4.0 symbol visibility 
+#   if OGRE_COMP_VER >= 400
+#       define _OgreExport  __attribute__ ((visibility("default")))
+#       define _OgrePrivate __attribute__ ((visibility("hidden")))
+#   else
+#       define _OgreExport
+#       define _OgrePrivate
+#   endif
+
+// A quick define to overcome different names for the same function
+#   define stricmp strcasecmp
+
+// Unlike the Win32 compilers, Linux compilers seem to use DEBUG for when
+// specifying a debug build.
+#   ifdef DEBUG
+#       define OGRE_DEBUG_MODE 1
+#   else
+#       define OGRE_DEBUG_MODE 0
+#   endif
+
+#if OGRE_PLATFORM == OGRE_PLATFORM_APPLE
+    #define OGRE_PLATFORM_LIB "OgrePlatform.bundle"
+#else
+    //OGRE_PLATFORM_LINUX
+    #define OGRE_PLATFORM_LIB "libOgrePlatform.so"
+#endif
+
+#endif
+
+//For apple, we always have a custom config.h file
+#if OGRE_PLATFORM == OGRE_PLATFORM_APPLE
+#    include "config.h"
+//SDL_main must be included in the file that contains
+//the application's main() function.
+#ifndef OGRE_NONCLIENT_BUILD
+#   include <SDL/SDL_main.h>
+#endif
+
+#endif
+
+//----------------------------------------------------------------------------
+
+//----------------------------------------------------------------------------
+// Endian Settings
+// check for BIG_ENDIAN config flag, set OGRE_ENDIAN correctly
+#ifdef CONFIG_BIG_ENDIAN
+#    define OGRE_ENDIAN OGRE_ENDIAN_BIG
+#else
+#    define OGRE_ENDIAN OGRE_ENDIAN_LITTLE
+#endif
+
+// Integer formats of fixed bit width
+typedef unsigned int uint32;
+typedef unsigned short uint16;
+typedef unsigned char uint8;
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreHardwareVertexBuffer.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreHardwareVertexBuffer.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreHardwareVertexBuffer.h	(revision 1092)
@@ -0,0 +1,480 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __HardwareVertexBuffer__
+#define __HardwareVertexBuffer__
+
+// Precompiler options
+#include "OgrePrerequisites.h"
+#include "OgreHardwareBuffer.h"
+#include "OgreSharedPtr.h"
+#include "OgreColourValue.h"
+
+namespace Ogre {
+    /** Specialisation of HardwareBuffer for a vertex buffer. */
+    class _OgreExport HardwareVertexBuffer : public HardwareBuffer
+    {
+	    protected:
+		    
+		    size_t mNumVertices;
+            size_t mVertexSize;
+
+	    public:
+		    /// Should be called by HardwareBufferManager
+		    HardwareVertexBuffer(size_t vertexSize, size_t numVertices, 
+                HardwareBuffer::Usage usage, bool useSystemMemory, bool useShadowBuffer);
+            ~HardwareVertexBuffer();
+            /// Gets the size in bytes of a single vertex in this buffer
+            size_t getVertexSize(void) const { return mVertexSize; }
+            /// Get the number of vertices in this buffer
+            size_t getNumVertices(void) const { return mNumVertices; }
+    		
+
+
+		    // NB subclasses should override lock, unlock, readData, writeData
+    	
+    };
+
+    /** Shared pointer implementation used to share index buffers. */
+    class _OgreExport HardwareVertexBufferSharedPtr : public SharedPtr<HardwareVertexBuffer>
+    {
+    public:
+        HardwareVertexBufferSharedPtr() : SharedPtr<HardwareVertexBuffer>() {}
+        explicit HardwareVertexBufferSharedPtr(HardwareVertexBuffer* buf);
+
+
+    };
+
+    /// Vertex element semantics, used to identify the meaning of vertex buffer contents
+	enum VertexElementSemantic {
+		/// Position, 3 reals per vertex
+		VES_POSITION = 1,
+		/// Blending weights
+		VES_BLEND_WEIGHTS = 2,
+        /// Blending indices
+        VES_BLEND_INDICES = 3,
+		/// Normal, 3 reals per vertex
+		VES_NORMAL = 4,
+		/// Diffuse colours
+		VES_DIFFUSE = 5,
+		/// Specular colours
+		VES_SPECULAR = 6,
+		/// Texture coordinates
+		VES_TEXTURE_COORDINATES = 7,
+        /// Binormal (Y axis if normal is Z)
+        VES_BINORMAL = 8,
+        /// Tangent (X axis if normal is Z)
+        VES_TANGENT = 9
+
+	};
+
+    /// Vertex element type, used to identify the base types of the vertex contents
+    enum VertexElementType
+    {
+        VET_FLOAT1,
+        VET_FLOAT2,
+        VET_FLOAT3,
+        VET_FLOAT4,
+        VET_COLOUR,
+		VET_SHORT1,
+		VET_SHORT2,
+		VET_SHORT3,
+		VET_SHORT4, 
+        VET_UBYTE4
+    };
+
+    /** This class declares the usage of a single vertex buffer as a component
+        of a complete VertexDeclaration. 
+        @remarks
+        Several vertex buffers can be used to supply the input geometry for a
+        rendering operation, and in each case a vertex buffer can be used in
+        different ways for different operations; the buffer itself does not
+        define the semantics (position, normal etc), the VertexElement
+        class does.
+    */
+    class _OgreExport VertexElement
+    {
+    protected:
+        /// The source vertex buffer, as bound to an index using VertexBufferBinding
+        unsigned short mSource;
+        /// The offset in the buffer that this element starts at
+        size_t mOffset;
+        /// The type of element
+        VertexElementType mType;
+        /// The meaning of the element
+        VertexElementSemantic mSemantic;
+        /// Index of the item, only applicable for some elements like texture coords
+        unsigned short mIndex;
+    public:
+        /// Constructor, should not be called directly, call VertexDeclaration::addElement
+        VertexElement(unsigned short source, size_t offset, VertexElementType theType,
+            VertexElementSemantic semantic, unsigned short index = 0);
+        /// Gets the vertex buffer index from where this element draws it's values
+        unsigned short getSource(void) const { return mSource; }
+        /// Gets the offset into the buffer where this element starts
+        size_t getOffset(void) const { return mOffset; }
+        /// Gets the data format of this element
+        VertexElementType getType(void) const { return mType; }
+        /// Gets the meaning of this element
+        VertexElementSemantic getSemantic(void) const { return mSemantic; }
+        /// Gets the index of this element, only applicable for repeating elements
+        unsigned short getIndex(void) const { return mIndex; }
+		/// Gets the size of this element in bytes
+		size_t getSize(void) const;
+		/// Utility method for helping to calculate offsets
+		static size_t getTypeSize(VertexElementType etype);
+		/// Utility method which returns the count of values in a given type
+		static unsigned short getTypeCount(VertexElementType etype);
+		/** Simple converter function which will turn a single-value type into a
+			multi-value type based on a parameter. 
+		*/
+		static VertexElementType multiplyTypeCount(VertexElementType baseType, unsigned short count);
+		/** Simple converter function which will a type into it's single-value
+			equivalent - makes switches on type easier. 
+		*/
+		static VertexElementType getBaseType(VertexElementType multiType);
+
+        inline bool operator== (const VertexElement& rhs) const
+        {
+            if (mType != rhs.mType || 
+                mIndex != rhs.mIndex ||
+                mOffset != rhs.mOffset ||
+                mSemantic != rhs.mSemantic ||
+                mSource != rhs.mSource)
+                return false;
+            else
+                return true;
+
+        }
+        /** Adjusts a pointer to the base of a vertex to point at this element.
+        @remarks
+            This variant is for void pointers, passed as a parameter because we can't
+            rely on covariant return types.
+        @param pBase Pointer to the start of a vertex in this buffer.
+        @param pElem Pointer to a pointer which will be set to the start of this element.
+        */
+        inline void baseVertexPointerToElement(void* pBase, void** pElem) const
+        {
+            // The only way we can do this is to cast to char* in order to use byte offset
+            // then cast back to void*.
+            *pElem = static_cast<void*>(
+            	static_cast<unsigned char*>(pBase) + mOffset);
+        }
+        /** Adjusts a pointer to the base of a vertex to point at this element.
+        @remarks
+            This variant is for float pointers, passed as a parameter because we can't
+            rely on covariant return types.
+        @param pBase Pointer to the start of a vertex in this buffer.
+        @param pElem Pointer to a pointer which will be set to the start of this element.
+        */
+        inline void baseVertexPointerToElement(void* pBase, float** pElem) const
+        {
+            // The only way we can do this is to cast to char* in order to use byte offset
+            // then cast back to float*. However we have to go via void* because casting  
+            // directly is not allowed
+            *pElem = static_cast<float*>(
+                static_cast<void*>(
+                    static_cast<unsigned char*>(pBase) + mOffset));
+        }
+
+        /** Adjusts a pointer to the base of a vertex to point at this element.
+        @remarks
+            This variant is for RGBA pointers, passed as a parameter because we can't
+            rely on covariant return types.
+        @param pBase Pointer to the start of a vertex in this buffer.
+        @param pElem Pointer to a pointer which will be set to the start of this element.
+        */
+        inline void baseVertexPointerToElement(void* pBase, RGBA** pElem) const
+        {
+            *pElem = static_cast<RGBA*>(
+                static_cast<void*>(
+                    static_cast<unsigned char*>(pBase) + mOffset));
+        }
+        /** Adjusts a pointer to the base of a vertex to point at this element.
+        @remarks
+            This variant is for char pointers, passed as a parameter because we can't
+            rely on covariant return types.
+        @param pBase Pointer to the start of a vertex in this buffer.
+        @param pElem Pointer to a pointer which will be set to the start of this element.
+        */
+        inline void baseVertexPointerToElement(void* pBase, unsigned char** pElem) const
+        {
+            *pElem = static_cast<unsigned char*>(pBase) + mOffset;
+        }
+
+        /** Adjusts a pointer to the base of a vertex to point at this element.
+        @remarks
+        This variant is for ushort pointers, passed as a parameter because we can't
+        rely on covariant return types.
+        @param pBase Pointer to the start of a vertex in this buffer.
+        @param pElem Pointer to a pointer which will be set to the start of this element.
+        */
+        inline void baseVertexPointerToElement(void* pBase, unsigned short** pElem) const
+        {
+            *pElem = static_cast<unsigned short*>(pBase) + mOffset;
+        }
+
+
+    };
+    /** This class declares the format of a set of vertex inputs, which
+        can be issued to the rendering API through a RenderOperation. 
+	@remarks
+	You should be aware that the ordering and structure of the 
+	VertexDeclaration can be very important on DirectX with older
+	cards,so if you want to maintain maximum compatibility with 
+	all render systems and all cards you should be careful to follow these
+	rules:<ol>
+	<li>VertexElements should be added in the following order, and the order of the
+	elements within a shared buffer should be as follows: 
+	position, blending weights, normals, diffuse colours, specular colours, 
+            texture coordinates (in order, with no gaps)</li>
+	<li>You must not have unused gaps in your buffers which are not referenced
+	by any VertexElement</li>
+	<li>You must not cause the buffer & offset settings of 2 VertexElements to overlap</li>
+	</ol>
+	Whilst GL and more modern graphics cards in D3D will allow you to defy these rules, 
+	sticking to them will ensure that your buffers have the maximum compatibility. 
+	@par
+	Like the other classes in this functional area, these declarations should be created and
+	destroyed using the HardwareBufferManager.
+    */
+    class _OgreExport VertexDeclaration
+    {
+    public:
+		/// Defines the list of vertex elements that makes up this declaration
+        typedef std::list<VertexElement> VertexElementList;
+        /// Sort routine for vertex elements
+        static bool vertexElementLess(const VertexElement& e1, const VertexElement& e2);
+    protected:
+        VertexElementList mElementList;
+    public:
+        /// Standard constructor, not you should use HardwareBufferManager::createVertexDeclaration
+        VertexDeclaration();
+        virtual ~VertexDeclaration();
+        
+        /** Get the number of elements in the declaration. */
+        size_t getElementCount(void) { return mElementList.size(); }
+        /** Gets read-only access to the list of vertex elements. */
+        const VertexElementList& getElements(void) const;
+        /** Get a single element. */
+        const VertexElement* getElement(unsigned short index);
+
+        /** Sorts the elements in this list to be compatible with the maximum
+            number of rendering APIs / graphics cards.
+        @remarks
+            Older graphics cards require vertex data to be presented in a more
+            rigid way, as defined in the main documentation for this class. As well
+            as the ordering being important, where shared source buffers are used, the
+            declaration must list all the elements for each source in turn.
+        */
+        void sort(void);
+
+        /** Remove any gaps in the source buffer list used by this declaration.
+        @remarks
+            This is useful if you've modified a declaration and want to remove
+            any gaps in the list of buffers being used. Note, however, that if this
+            declaration is already being used with a VertexBufferBinding, you will
+            need to alter that too. This method is mainly useful when reorganising
+            buffers based on an altered declaration.
+        @note
+            This will cause the vertex declaration to be re-sorted.
+        */
+        void closeGapsInSource(void);
+
+        /** Generates a new VertexDeclaration for optimal usage based on the current
+            vertex declaration, which can be used with VertexData::reorganiseBuffers later 
+            if you wish, or simply used as a template.
+        @param animated Whether this vertex data is going to be animated; this
+            affects the choice of both usage and buffer splits.
+        */
+        VertexDeclaration* getAutoOrganisedDeclaration(bool animated);
+
+        /** Gets the indeex of the highest source value referenced by this declaration. */
+        unsigned short getMaxSource(void) const;
+
+
+
+        /** Adds a new VertexElement to this declaration. 
+        @remarks
+            This method adds a single element (positions, normals etc) to the end of the
+            vertex declaration. <b>Please read the information in VertexDeclaration about
+	    the importance of ordering and structure for compatibility with older D3D drivers</b>.
+	    @param source The binding index of HardwareVertexBuffer which will provide the source for this element.
+			See VertexBufferBindingState for full information.
+        @param offset The offset in bytes where this element is located in the buffer
+        @param theType The data format of the element (3 floats, a colour etc)
+        @param semantic The meaning of the data (position, normal, diffuse colour etc)
+        @param index Optional index for multi-input elements like texture coordinates
+		@returns A reference to the VertexElement added.
+        */
+        virtual const VertexElement& addElement(unsigned short source, size_t offset, VertexElementType theType,
+            VertexElementSemantic semantic, unsigned short index = 0);
+        /** Inserts a new VertexElement at a given position in this declaration. 
+        @remarks
+        This method adds a single element (positions, normals etc) at a given position in this
+        vertex declaration. <b>Please read the information in VertexDeclaration about
+        the importance of ordering and structure for compatibility with older D3D drivers</b>.
+        @param source The binding index of HardwareVertexBuffer which will provide the source for this element.
+        See VertexBufferBindingState for full information.
+        @param offset The offset in bytes where this element is located in the buffer
+        @param theType The data format of the element (3 floats, a colour etc)
+        @param semantic The meaning of the data (position, normal, diffuse colour etc)
+        @param index Optional index for multi-input elements like texture coordinates
+        @returns A reference to the VertexElement added.
+        */
+        virtual const VertexElement& insertElement(unsigned short atPosition,
+            unsigned short source, size_t offset, VertexElementType theType,
+            VertexElementSemantic semantic, unsigned short index = 0);
+
+        /** Remove the element at the given index from this declaration. */
+        virtual void removeElement(unsigned short elem_index);
+
+        /** Remove the element with the given semantic and usage index. 
+        @remarks
+            In this case 'index' means the usage index for repeating elements such
+            as texture coordinates. For other elements this will always be 0 and does
+            not refer to the index in the vector.
+        */
+        virtual void removeElement(VertexElementSemantic semantic, unsigned short index = 0);
+
+        /** Modify an element in-place, params as addElement. 
+	   @remarks
+	   <b>Please read the information in VertexDeclaration about
+	    the importance of ordering and structure for compatibility with older D3D drivers</b>.
+	 */
+        virtual void modifyElement(unsigned short elem_index, unsigned short source, size_t offset, VertexElementType theType,
+            VertexElementSemantic semantic, unsigned short index = 0);
+
+		/** Finds a VertexElement with the given semantic, and index if there is more than 
+			one element with the same semantic. 
+        @remarks
+            If the element is not found, this method returns null.
+		*/
+		virtual const VertexElement* findElementBySemantic(VertexElementSemantic sem, unsigned short index = 0);
+		/** Based on the current elements, gets the size of the vertex for a given buffer source. 
+		@param source The buffer binding index for which to get the vertex size.
+		*/
+
+		/** Gets a list of elements which use a given source. 
+		@remarks
+			Note that the list of elements is returned by value therefore is separate from
+			the declaration as soon as this method returns. 
+		*/
+		virtual VertexElementList findElementsBySource(unsigned short source);
+		
+		/** Gets the vertex size defined by this declaration for a given source. */
+        virtual size_t getVertexSize(unsigned short source);
+
+        /** Clones this declaration. */
+        virtual VertexDeclaration* clone(void);
+
+        inline bool operator== (const VertexDeclaration& rhs) const
+        {
+            if (mElementList.size() != rhs.mElementList.size())
+                return false;
+
+            VertexElementList::const_iterator i, iend, rhsi, rhsiend;
+            iend = mElementList.end();
+            rhsiend = rhs.mElementList.end();
+            rhsi = rhs.mElementList.begin();
+            for (i = mElementList.begin(); i != iend && rhsi != rhsiend; ++i, ++rhsi)
+            {
+                if ( !(*i == *rhsi) )
+                    return false;
+            }
+
+            return true;
+        }
+        inline bool operator!= (const VertexDeclaration& rhs) const
+        {
+            return !(*this == rhs);
+        }
+
+    };
+
+	/** Records the state of all the vertex buffer bindings required to provide a vertex declaration
+		with the input data it needs for the vertex elements.
+	@remarks
+		Why do we have this binding list rather than just have VertexElement referring to the
+		vertex buffers direct? Well, in the underlying APIs, binding the vertex buffers to an
+		index (or 'stream') is the way that vertex data is linked, so this structure better
+		reflects the realities of that. In addition, by separating the vertex declaration from
+		the list of vertex buffer bindings, it becomes possible to reuse bindings between declarations
+		and vice versa, giving opportunities to reduce the state changes required to perform rendering.
+	@par
+		Like the other classes in this functional area, these binding maps should be created and
+		destroyed using the HardwareBufferManager.
+	*/
+	class _OgreExport VertexBufferBinding
+	{
+	public:
+		/// Defines the vertex buffer bindings used as source for vertex declarations
+		typedef std::map<unsigned short, HardwareVertexBufferSharedPtr> VertexBufferBindingMap;
+	protected:
+		VertexBufferBindingMap mBindingMap;
+		mutable unsigned short mHighIndex;
+	public:
+		/// Constructor, should not be called direct, use HardwareBufferManager::createVertexBufferBinding
+		VertexBufferBinding();
+		virtual ~VertexBufferBinding();
+		/** Set a binding, associating a vertex buffer with a given index. 
+		@remarks
+			If the index is already associated with a vertex buffer, 
+            the association will be replaced. This may cause the old buffer
+            to be destroyed if nothing else is referring to it.
+			You should assign bindings from 0 and not leave gaps, although you can
+			bind them in any order.
+		*/
+		virtual void setBinding(unsigned short index, HardwareVertexBufferSharedPtr buffer);
+		/** Removes an existing binding. */
+		virtual void unsetBinding(unsigned short index);
+
+        /** Removes all the bindings. */
+        virtual void unsetAllBindings(void);
+
+		/// Gets a read-only version of the buffer bindings
+		virtual const VertexBufferBindingMap& getBindings(void) const;
+
+		/// Gets the buffer bound to the given source index
+		virtual HardwareVertexBufferSharedPtr getBuffer(unsigned short index);
+
+        virtual size_t getBufferCount(void) const { return mBindingMap.size(); }
+
+		/** Gets the highest index which has already been set, plus 1.
+		@remarks
+			This is to assist in binding the vertex buffers such that there are
+			not gaps in the list.
+		*/
+		virtual unsigned short getNextIndex(void) const { return mHighIndex++; }
+
+
+
+
+	};
+
+
+
+}
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreDataStream.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreDataStream.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreDataStream.h	(revision 1092)
@@ -0,0 +1,442 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __DataStream_H__
+#define __DataStream_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreString.h"
+#include "OgreSharedPtr.h"
+#include <istream>
+
+namespace Ogre {
+
+	/** General purpose class used for encapsulating the reading of data.
+	@remarks
+		This class performs basically the same tasks as std::basic_istream, 
+		except that it does not have any formatting capabilities, and is
+		designed to be subclassed to receive data from multiple sources,
+		including libraries which have no compatiblity with the STL's
+		stream interfaces. As such, this is an abstraction of a set of 
+		wrapper classes which pretend to be standard stream classes but 
+		can actually be implemented quite differently. 
+	@par
+		Generally, if a plugin or application provides an ArchiveFactory, 
+		it should also provide a DataStream subclass which will be used
+		to stream data out of that Archive implementation, unless it can 
+		use one of the common implementations included.
+	@note
+		Ogre makes no guarantees about thread safety, for performance reasons.
+		If you wish to access stream data asynchronously then you should
+		organise your own mutexes to avoid race conditions. 
+	*/
+	class _OgreExport DataStream
+	{
+	protected:
+		/// The name (e.g. resource name) that can be used to identify the source fot his data (optional)
+		String mName;		
+        /// Size of the data in the stream (may be 0 if size cannot be determined)
+        size_t mSize;
+        #define OGRE_STREAM_TEMP_SIZE 128
+        /// Temporary buffer area used for formatted read
+        char mTmpArea[OGRE_STREAM_TEMP_SIZE];
+	public:
+		/// Constructor for creating unnamed streams
+        DataStream() : mSize(0) {}
+		/// Constructor for creating named streams
+		DataStream(const String& name) : mName(name), mSize(0) {}
+		/// Returns the name of the stream, if it has one.
+		const String& getName(void) { return mName; }
+        virtual ~DataStream() {}
+		// Streaming operators
+        template<typename T> DataStream& operator>>(T& val);
+		/** Read the requisite number of bytes from the stream, 
+			stopping at the end of the file.
+		@param buf Reference to a buffer pointer
+		@param count Number of bytes to read
+		@returns The number of bytes read
+		*/
+		virtual size_t read(void* buf, size_t count) = 0;
+		/** Get a single line from the stream.
+		@remarks
+			The delimiter character is not included in the data
+			returned, and it is skipped over so the next read will occur
+			after it. The buffer contents will include a
+			terminating character.
+		@param buf Reference to a buffer pointer
+		@param maxCount The maximum length of data to be read, excluding the terminating character
+		@param delim The delimiter to stop at
+		@returns The number of bytes read, excluding the terminating character
+		*/
+		virtual size_t readLine(char* buf, size_t maxCount, const String& delim = "\n") = 0;
+		
+	    /** Returns a String containing the next line of data, optionally 
+		    trimmed for whitespace. 
+	    @remarks
+		    This is a convenience method for text streams only, allowing you to 
+		    retrieve a String object containing the next line of data. The data
+		    is read up to the next newline character and the result trimmed if
+		    required.
+	    @param 
+		    trimAfter If true, the line is trimmed for whitespace (as in 
+		    String.trim(true,true))
+	    */
+	    virtual String getLine( bool trimAfter = true );
+
+	    /** Returns a String containing the entire stream. 
+	    @remarks
+		    This is a convenience method for text streams only, allowing you to 
+		    retrieve a String object containing all the data in the stream.
+	    */
+	    virtual String getAsString(void);
+
+		/** Skip a single line from the stream.
+		@param delim The delimiter(s) to stop at
+		@returns The number of bytes skipped
+		*/
+		virtual size_t skipLine(const String& delim = "\n") = 0;
+
+		/** Skip a defined number of bytes. This can also be a negative value, in which case
+		the file pointer rewinds a defined number of bytes. */
+		virtual void skip(long count) = 0;
+	
+		/** Repositions the read point to a specified byte.
+	    */
+	    virtual void seek( size_t pos ) = 0;
+		
+		/** Returns the current byte offset from beginning */
+	    virtual size_t tell(void) const = 0;
+
+		/** Returns true if the stream has reached the end.
+	    */
+	    virtual bool eof(void) const = 0;
+
+		/** Returns the total size of the data to be read from the stream, 
+			or 0 if this is indeterminate for this stream. 
+		*/
+        size_t size(void) const { return mSize; }
+
+        /** Close the stream; this makes further operations invalid. */
+        virtual void close(void) = 0;
+		
+
+	};
+
+	/** Shared pointer to allow data streams to be passed around without
+		worrying about deallocation
+	*/
+	typedef SharedPtr<DataStream> DataStreamPtr;
+
+	/// List of DataStream items
+	typedef std::list<DataStreamPtr> DataStreamList;
+	/// Shared pointer to list of DataStream items
+	typedef SharedPtr<DataStreamList> DataStreamListPtr;
+
+	/** Common subclass of DataStream for handling data from chunks of memory.
+	*/
+	class _OgreExport MemoryDataStream : public DataStream
+	{
+	protected:
+        /// Pointer to the start of the data area
+	    uchar* mData;
+        /// Pointer to the current position in the memory
+	    uchar* mPos;
+        /// Pointer to the end of the memory
+	    uchar* mEnd;
+        /// Do we delete the memory on close
+		bool mFreeOnClose;			
+	public:
+		
+		/** Wrap an existing memory chunk in a stream.
+		@param pMem Pointer to the exising memory
+		@param size The size of the memory chunk in bytes
+		@param freeOnClose If true, the memory associated will be destroyed
+			when the stream is destroyed.
+		*/
+		MemoryDataStream(void* pMem, size_t size, bool freeOnClose = false);
+		
+		/** Wrap an existing memory chunk in a named stream.
+		@param name The name to give the stream
+		@param pMem Pointer to the exising memory
+		@param size The size of the memory chunk in bytes
+		@param freeOnClose If true, the memory associated will be destroyed
+			when the stream is destroyed.
+		*/
+		MemoryDataStream(const String& name, void* pMem, size_t size, 
+				bool freeOnClose = false);
+
+		/** Create a stream which pre-buffers the contents of another stream.
+		@remarks
+			This constructor can be used to intentionally read in the entire
+			contents of another stream, copying them to the internal buffer
+			and thus making them available in memory as a single unit.
+		@param sourceStream Another DataStream which will provide the source
+			of data
+		@param freeOnClose If true, the memory associated will be destroyed
+			when the stream is destroyed.
+		*/
+		MemoryDataStream(DataStream& sourceStream, 
+				bool freeOnClose = true);
+		
+		/** Create a stream which pre-buffers the contents of another stream.
+		@remarks
+			This constructor can be used to intentionally read in the entire
+			contents of another stream, copying them to the internal buffer
+			and thus making them available in memory as a single unit.
+		@param sourceStream Weak reference to another DataStream which will provide the source
+			of data
+		@param freeOnClose If true, the memory associated will be destroyed
+			when the stream is destroyed.
+		*/
+		MemoryDataStream(DataStreamPtr& sourceStream, 
+				bool freeOnClose = true);
+
+		/** Create a named stream which pre-buffers the contents of 
+			another stream.
+		@remarks
+			This constructor can be used to intentionally read in the entire
+			contents of another stream, copying them to the internal buffer
+			and thus making them available in memory as a single unit.
+		@param name The name to give the stream
+		@param sourceStream Another DataStream which will provide the source
+			of data
+		@param freeOnClose If true, the memory associated will be destroyed
+			when the stream is destroyed.
+		*/
+		MemoryDataStream(const String& name, DataStream& sourceStream, 
+				bool freeOnClose = true);
+
+        /** Create a named stream which pre-buffers the contents of 
+        another stream.
+        @remarks
+        This constructor can be used to intentionally read in the entire
+        contents of another stream, copying them to the internal buffer
+        and thus making them available in memory as a single unit.
+        @param name The name to give the stream
+        @param sourceStream Another DataStream which will provide the source
+        of data
+        @param freeOnClose If true, the memory associated will be destroyed
+        when the stream is destroyed.
+        */
+        MemoryDataStream(const String& name, const DataStreamPtr& sourceStream, 
+            bool freeOnClose = true);
+
+        /** Create a stream with a brand new empty memory chunk.
+		@param size The size of the memory chunk to create in bytes
+		@param freeOnClose If true, the memory associated will be destroyed
+			when the stream is destroyed.
+		*/
+		MemoryDataStream(size_t size, bool freeOnClose = true);
+		/** Create a named stream with a brand new empty memory chunk.
+		@param name The name to give the stream
+		@param size The size of the memory chunk to create in bytes
+		@param freeOnClose If true, the memory associated will be destroyed
+			when the stream is destroyed.
+		*/
+		MemoryDataStream(const String& name, size_t size, 
+				bool freeOnClose = true);
+
+		~MemoryDataStream();
+
+		/** Get a pointer to the start of the memory block this stream holds. */
+		uchar* getPtr(void) { return mData; }
+		
+		/** Get a pointer to the current position in the memory block this stream holds. */
+		uchar* getCurrentPtr(void) { return mPos; }
+		
+		/** @copydoc DataStream::read
+		*/
+		size_t read(void* buf, size_t count);
+		/** @copydoc DataStream::readLine
+		*/
+		size_t readLine(char* buf, size_t maxCount, const String& delim = "\n");
+		
+		/** @copydoc DataStream::skipLine
+		*/
+		size_t skipLine(const String& delim = "\n");
+
+		/** @copydoc DataStream::skip
+		*/
+		void skip(long count);
+	
+		/** @copydoc DataStream::seek
+		*/
+	    void seek( size_t pos );
+		
+		/** @copydoc DataStream::tell
+		*/
+	    size_t tell(void) const;
+
+		/** @copydoc DataStream::eof
+		*/
+	    bool eof(void) const;
+
+        /** @copydoc DataStream::close
+        */
+        void close(void);
+
+		/** Sets whether or not to free the encapsulated memory on close. */
+		void setFreeOnClose(bool free) { mFreeOnClose = free; }
+	};
+
+    /** Shared pointer to allow memory data streams to be passed around without
+    worrying about deallocation
+    */
+    typedef SharedPtr<MemoryDataStream> MemoryDataStreamPtr;
+
+    /** Common subclass of DataStream for handling data from 
+		std::basic_istream.
+	*/
+	class _OgreExport FileStreamDataStream : public DataStream
+	{
+	protected:
+		/// Reference to source stream
+		std::ifstream* mpStream;
+        bool mFreeOnClose;			
+	public:
+		/** Construct stream from an STL stream
+        @param s Pointer to source stream
+        @param freeOnClose Whether to delete the underlying stream on 
+            destruction of this class
+        */
+		FileStreamDataStream(std::ifstream* s, 
+            bool freeOnClose = true);
+		/** Construct named stream from an STL stream
+        @param name The name to give this stream
+        @param s Pointer to source stream
+        @param freeOnClose Whether to delete the underlying stream on 
+            destruction of this class
+        */
+		FileStreamDataStream(const String& name, 
+            std::ifstream* s, 
+            bool freeOnClose = true);
+
+		/** Construct named stream from an STL stream, and tell it the size
+        @remarks
+            This variant tells the class the size of the stream too, which 
+            means this class does not need to seek to the end of the stream 
+            to determine the size up-front. This can be beneficial if you have
+            metadata about the contents of the stream already.
+        @param name The name to give this stream
+        @param s Pointer to source stream
+        @param size Size of the stream contents in bytes
+        @param freeOnClose Whether to delete the underlying stream on 
+            destruction of this class
+        */
+		FileStreamDataStream(const String& name, 
+            std::ifstream* s, 
+            size_t size, 
+            bool freeOnClose = true);
+
+        ~FileStreamDataStream();
+
+		/** @copydoc DataStream::read
+		*/
+		size_t read(void* buf, size_t count);
+		/** @copydoc DataStream::readLine
+		*/
+        size_t readLine(char* buf, size_t maxCount, const String& delim = "\n");
+		
+		/** @copydoc DataStream::skipLine
+		*/
+		size_t skipLine(const String& delim = "\n");
+
+		/** @copydoc DataStream::skip
+		*/
+		void skip(long count);
+	
+		/** @copydoc DataStream::seek
+		*/
+	    void seek( size_t pos );
+
+		/** @copydoc DataStream::tell
+		*/
+		size_t tell(void) const;
+
+		/** @copydoc DataStream::eof
+		*/
+	    bool eof(void) const;
+
+        /** @copydoc DataStream::close
+        */
+        void close(void);
+		
+		
+	};
+
+	/** Common subclass of DataStream for handling data from C-style file 
+		handles.
+    @remarks
+        Use of this class is generally discouraged; if you want to wrap file
+        access in a DataStream, you should definitely be using the C++ friendly
+        FileStreamDataStream. However, since there are quite a few applications
+        and libraries still wedded to the old FILE handle access, this stream
+        wrapper provides some backwards compatibility.
+	*/
+	class _OgreExport FileHandleDataStream : public DataStream
+	{
+	protected:
+		FILE* mFileHandle;
+	public:
+		/// Create stream from a C file handle
+		FileHandleDataStream(FILE* handle);
+		/// Create named stream from a C file handle
+		FileHandleDataStream(const String& name, FILE* handle);
+        ~FileHandleDataStream();
+
+		/** @copydoc DataStream::read
+		*/
+		size_t read(void* buf, size_t count);
+		/** @copydoc DataStream::readLine
+		*/
+		size_t readLine(char* buf, size_t maxCount, const String& delim = "\n");
+		
+		/** @copydoc DataStream::skipLine
+		*/
+		size_t skipLine(const String& delim = "\n");
+
+		/** @copydoc DataStream::skip
+		*/
+		void skip(long count);
+	
+		/** @copydoc DataStream::seek
+		*/
+	    void seek( size_t pos );
+
+		/** @copydoc DataStream::tell
+		*/
+		size_t tell(void) const;
+
+		/** @copydoc DataStream::eof
+		*/
+	    bool eof(void) const;
+
+        /** @copydoc DataStream::close
+        */
+        void close(void);
+
+	};
+}
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreQuaternion.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreQuaternion.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreQuaternion.h	(revision 1092)
@@ -0,0 +1,218 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+// NOTE THAT THIS FILE IS BASED ON MATERIAL FROM:
+
+// Magic Software, Inc.
+// http://www.magic-software.com
+// Copyright (c) 2000, All Rights Reserved
+//
+// Source code from Magic Software is supplied under the terms of a license
+// agreement and may not be copied or disclosed except in accordance with the
+// terms of that agreement.  The various license agreements may be found at
+// the Magic Software web site.  This file is subject to the license
+//
+// FREE SOURCE CODE
+// http://www.magic-software.com/License/free.pdf
+
+#ifndef __Quaternion_H__
+#define __Quaternion_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreMath.h"
+
+namespace Ogre {
+
+    /** Implementation of a Quaternion, i.e. a rotation around an axis.
+    */
+    class _OgreExport Quaternion
+    {
+    public:
+        inline Quaternion (
+            Real fW = 1.0,
+            Real fX = 0.0, Real fY = 0.0, Real fZ = 0.0)
+		{
+			w = fW;
+			x = fX;
+			y = fY;
+			z = fZ;
+		}
+        inline Quaternion (const Quaternion& rkQ)
+		{
+			w = rkQ.w;
+			x = rkQ.x;
+			y = rkQ.y;
+			z = rkQ.z;
+		}
+        /// Construct a quaternion from a rotation matrix
+        inline Quaternion(const Matrix3& rot)
+        {
+            this->FromRotationMatrix(rot);
+        }
+        /// Construct a quaternion from an angle/axis
+        inline Quaternion(const Radian& rfAngle, const Vector3& rkAxis)
+        {
+            this->FromAngleAxis(rfAngle, rkAxis);
+        }
+#ifndef OGRE_FORCE_ANGLE_TYPES
+        inline Quaternion(const Real& rfAngle, const Vector3& rkAxis)
+		{
+			this->FromAngleAxis(rfAngle, rkAxis);
+		}
+#endif//OGRE_FORCE_ANGLE_TYPES
+        /// Construct a quaternion from 3 orthonormal local axes
+        inline Quaternion(const Vector3& xaxis, const Vector3& yaxis, const Vector3& zaxis)
+        {
+            this->FromAxes(xaxis, yaxis, zaxis);
+        }
+        /// Construct a quaternion from 3 orthonormal local axes
+        inline Quaternion(const Vector3* akAxis)
+        {
+            this->FromAxes(akAxis);
+        }
+
+        void FromRotationMatrix (const Matrix3& kRot);
+        void ToRotationMatrix (Matrix3& kRot) const;
+        void FromAngleAxis (const Radian& rfAngle, const Vector3& rkAxis);
+        void ToAngleAxis (Radian& rfAngle, Vector3& rkAxis) const;
+        inline void ToAngleAxis (Degree& dAngle, Vector3& rkAxis) const {
+            Radian rAngle;
+            ToAngleAxis ( rAngle, rkAxis );
+            dAngle = rAngle;
+        }
+#ifndef OGRE_FORCE_ANGLE_TYPES
+        inline void FromAngleAxis (const Real& rfAngle, const Vector3& rkAxis) {
+			FromAngleAxis ( Angle(rfAngle), rkAxis );
+		}
+        inline void ToAngleAxis (Real& rfAngle, Vector3& rkAxis) const {
+			Radian r;
+			ToAngleAxis ( r, rkAxis );
+			rfAngle = r.valueAngleUnits();
+		}
+#endif//OGRE_FORCE_ANGLE_TYPES
+        void FromAxes (const Vector3* akAxis);
+        void FromAxes (const Vector3& xAxis, const Vector3& yAxis, const Vector3& zAxis);
+        void ToAxes (Vector3* akAxis) const;
+        void ToAxes (Vector3& xAxis, Vector3& yAxis, Vector3& zAxis) const;
+        /// Get the local x-axis
+        Vector3 xAxis(void) const;
+        /// Get the local y-axis
+        Vector3 yAxis(void) const;
+        /// Get the local z-axis
+        Vector3 zAxis(void) const;
+
+        inline Quaternion& operator= (const Quaternion& rkQ)
+		{
+			w = rkQ.w;
+			x = rkQ.x;
+			y = rkQ.y;
+			z = rkQ.z;
+			return *this;
+		}
+        Quaternion operator+ (const Quaternion& rkQ) const;
+        Quaternion operator- (const Quaternion& rkQ) const;
+        Quaternion operator* (const Quaternion& rkQ) const;
+        Quaternion operator* (Real fScalar) const;
+        _OgreExport friend Quaternion operator* (Real fScalar,
+            const Quaternion& rkQ);
+        Quaternion operator- () const;
+        inline bool operator== (const Quaternion& rhs) const
+		{
+			return (rhs.x == x) && (rhs.y == y) &&
+				(rhs.z == z) && (rhs.w == w);
+		}
+        inline bool operator!= (const Quaternion& rhs) const
+		{
+			return !operator==(rhs);
+		}
+        // functions of a quaternion
+        Real Dot (const Quaternion& rkQ) const;  // dot product
+        Real Norm () const;  // squared-length
+        /// Normalises this quaternion, and returns the previous length
+        Real normalise(void); 
+        Quaternion Inverse () const;  // apply to non-zero quaternion
+        Quaternion UnitInverse () const;  // apply to unit-length quaternion
+        Quaternion Exp () const;
+        Quaternion Log () const;
+
+        // rotation of a vector by a quaternion
+        Vector3 operator* (const Vector3& rkVector) const;
+
+   		/// Calculate the local roll element of this quaternion
+		Radian getRoll(void) const;
+   		/// Calculate the local pitch element of this quaternion
+		Radian getPitch(void) const;
+   		/// Calculate the local yaw element of this quaternion
+		Radian getYaw(void) const;		
+		/// Equality with tolerance (tolerance is max angle difference)
+		bool equals(const Quaternion& rhs, const Radian& tolerance) const;
+		
+	    // spherical linear interpolation
+        static Quaternion Slerp (Real fT, const Quaternion& rkP,
+            const Quaternion& rkQ, bool shortestPath = false);
+
+        static Quaternion SlerpExtraSpins (Real fT,
+            const Quaternion& rkP, const Quaternion& rkQ,
+            int iExtraSpins);
+
+        // setup for spherical quadratic interpolation
+        static void Intermediate (const Quaternion& rkQ0,
+            const Quaternion& rkQ1, const Quaternion& rkQ2,
+            Quaternion& rka, Quaternion& rkB);
+
+        // spherical quadratic interpolation
+        static Quaternion Squad (Real fT, const Quaternion& rkP,
+            const Quaternion& rkA, const Quaternion& rkB,
+            const Quaternion& rkQ, bool shortestPath = false);
+
+        // normalised linear interpolation - faster but less accurate (non-constant rotation velocity)
+        static Quaternion nlerp(Real fT, const Quaternion& rkP, 
+            const Quaternion& rkQ, bool shortestPath = false);
+
+        // cutoff for sine near zero
+        static const Real ms_fEpsilon;
+
+        // special values
+        static const Quaternion ZERO;
+        static const Quaternion IDENTITY;
+
+        Real w, x, y, z;
+
+        /** Function for writing to a stream.
+        */
+        inline _OgreExport friend std::ostream& operator <<
+            ( std::ostream& o, const Quaternion& q )
+        {
+            o << "Quaternion(" << q.x << ", " << q.y << ", " << q.z << ", " << q.w << ")";
+            return o;
+        }
+
+    };
+
+}
+
+
+
+
+#endif 
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreStdHeaders.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreStdHeaders.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreStdHeaders.h	(revision 1092)
@@ -0,0 +1,87 @@
+#ifndef __StdHeaders_H__
+#define __StdHeaders_H__
+
+#ifdef __BORLANDC__
+    #define __STD_ALGORITHM
+#endif
+
+#include <cassert>
+#include <cstdio>
+#include <cstdlib>
+#include <ctime>
+#include <cstring>
+#include <cstdarg>
+#include <cmath>
+
+// STL containers
+#include <vector>
+#include <map>
+#include <string>
+#include <set>
+#include <list>
+#include <deque>
+#include <queue>
+
+// Note - not in the original STL, but exists in SGI STL and STLport
+#ifdef EXT_HASH
+#   include <ext/hash_map>
+#   include <ext/hash_set>
+#else
+#   include <hash_set>
+#   include <hash_map>
+#endif
+
+// STL algorithms & functions
+#include <algorithm>
+#include <functional>
+#include <limits>
+
+// C++ Stream stuff
+#include <fstream>
+#include <iostream>
+#include <iomanip>
+#include <sstream>
+
+#ifdef __BORLANDC__
+namespace Ogre
+{
+    using namespace std;
+}
+#endif
+
+extern "C" {
+
+#   include <sys/types.h>
+#   include <sys/stat.h>
+
+}
+
+#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
+
+#undef min
+#undef max
+
+#endif
+
+#if OGRE_PLATFORM == OGRE_PLATFORM_LINUX
+extern "C" {
+
+#   include <unistd.h>
+#   include <dlfcn.h>
+
+}
+#endif
+
+#if OGRE_PLATFORM == OGRE_PLATFORM_APPLE
+extern "C" {
+#   include <unistd.h>
+#   include <sys/param.h>
+#   include <CoreFoundation/CoreFoundation.h>
+}
+#endif
+
+#if OGRE_THREAD_SUPPORT
+#	include <boost/thread/recursive_mutex.hpp>
+#endif
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreVector4.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreVector4.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreVector4.h	(revision 1092)
@@ -0,0 +1,322 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __Vector4_H__
+#define __Vector4_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreVector3.h"
+
+namespace Ogre
+{
+
+    /** 4-dimensional homogenous vector.
+    */
+    class _OgreExport Vector4
+    {
+    public:
+        union {
+            struct {
+                Real x, y, z, w;        
+            };
+            Real val[4];
+        };
+
+    public:
+        inline Vector4()
+        {
+        }
+
+        inline Vector4( Real fX, Real fY, Real fZ, Real fW ) 
+            : x( fX ), y( fY ), z( fZ ), w( fW)
+        {
+        }
+
+        inline Vector4( Real afCoordinate[4] )
+            : x( afCoordinate[0] ),
+              y( afCoordinate[1] ),
+              z( afCoordinate[2] ), 
+              w (afCoordinate[3] )
+        {
+        }
+
+        inline Vector4( int afCoordinate[4] )
+        {
+            x = (Real)afCoordinate[0];
+            y = (Real)afCoordinate[1];
+            z = (Real)afCoordinate[2];
+            w = (Real)afCoordinate[3];
+        }
+
+        inline Vector4( const Real* const r )
+            : x( r[0] ), y( r[1] ), z( r[2] ), w( r[3] )
+        {
+        }
+
+        inline Vector4( const Vector4& rkVector )
+            : x( rkVector.x ), y( rkVector.y ), z( rkVector.z ), w (rkVector.w)
+        {
+        }
+
+		inline Real operator [] ( size_t i ) const
+        {
+            assert( i < 4 );
+
+            return *(&x+i);
+        }
+
+		inline Real& operator [] ( size_t i )
+        {
+            assert( i < 4 );
+
+            return *(&x+i);
+        }
+
+        /** Assigns the value of the other vector.
+            @param
+                rkVector The other vector
+        */
+        inline Vector4& operator = ( const Vector4& rkVector )
+        {
+            x = rkVector.x;
+            y = rkVector.y;
+            z = rkVector.z;            
+            w = rkVector.w;            
+
+            return *this;
+        }
+
+        inline bool operator == ( const Vector4& rkVector ) const
+        {
+            return ( x == rkVector.x && 
+                y == rkVector.y && 
+                z == rkVector.z &&
+                w == rkVector.w );
+        }
+
+        inline bool operator != ( const Vector4& rkVector ) const
+        {
+            return ( x != rkVector.x || 
+                y != rkVector.y || 
+                z != rkVector.z ||
+                w != rkVector.w );
+        }
+
+        inline Vector4& operator = (const Vector3& rhs)
+        {
+            x = rhs.x;
+            y = rhs.y;
+            z = rhs.z;
+            w = 1.0f;
+            return *this;
+        }
+
+        // arithmetic operations
+        inline Vector4 operator + ( const Vector4& rkVector ) const
+        {
+            Vector4 kSum;
+
+            kSum.x = x + rkVector.x;
+            kSum.y = y + rkVector.y;
+            kSum.z = z + rkVector.z;
+            kSum.w = w + rkVector.w;
+
+            return kSum;
+        }
+
+        inline Vector4 operator - ( const Vector4& rkVector ) const
+        {
+            Vector4 kDiff;
+
+            kDiff.x = x - rkVector.x;
+            kDiff.y = y - rkVector.y;
+            kDiff.z = z - rkVector.z;
+            kDiff.w = w - rkVector.w;
+
+            return kDiff;
+        }
+
+        inline Vector4 operator * ( Real fScalar ) const
+        {
+            Vector4 kProd;
+
+            kProd.x = fScalar*x;
+            kProd.y = fScalar*y;
+            kProd.z = fScalar*z;
+            kProd.w = fScalar*w;
+
+            return kProd;
+        }
+
+        inline Vector4 operator * ( const Vector4& rhs) const
+        {
+            Vector4 kProd;
+
+            kProd.x = rhs.x * x;
+            kProd.y = rhs.y * y;
+            kProd.z = rhs.z * z;
+            kProd.w = rhs.w * w;
+
+            return kProd;
+        }
+
+        inline Vector4 operator / ( Real fScalar ) const
+        {
+            assert( fScalar != 0.0 );
+
+            Vector4 kDiv;
+
+            Real fInv = 1.0 / fScalar;
+            kDiv.x = x * fInv;
+            kDiv.y = y * fInv;
+            kDiv.z = z * fInv;
+            kDiv.w = w * fInv;
+
+            return kDiv;
+        }
+
+        inline Vector4 operator / ( const Vector4& rhs) const
+        {
+            Vector4 kDiv;
+
+            kDiv.x = x / rhs.x;
+            kDiv.y = y / rhs.y;
+            kDiv.z = z / rhs.z;
+            kDiv.w = w / rhs.w;
+
+            return kDiv;
+        }
+
+
+        inline Vector4 operator - () const
+        {
+            Vector4 kNeg;
+
+            kNeg.x = -x;
+            kNeg.y = -y;
+            kNeg.z = -z;
+            kNeg.w = -w;
+
+            return kNeg;
+        }
+
+        inline friend Vector4 operator * ( Real fScalar, const Vector4& rkVector )
+        {
+            Vector4 kProd;
+
+            kProd.x = fScalar * rkVector.x;
+            kProd.y = fScalar * rkVector.y;
+            kProd.z = fScalar * rkVector.z;
+            kProd.w = fScalar * rkVector.w;
+
+            return kProd;
+        }
+
+        // arithmetic updates
+        inline Vector4& operator += ( const Vector4& rkVector )
+        {
+            x += rkVector.x;
+            y += rkVector.y;
+            z += rkVector.z;
+            w += rkVector.w;
+
+            return *this;
+        }
+
+        inline Vector4& operator -= ( const Vector4& rkVector )
+        {
+            x -= rkVector.x;
+            y -= rkVector.y;
+            z -= rkVector.z;
+            w -= rkVector.w;
+
+            return *this;
+        }
+
+        inline Vector4& operator *= ( Real fScalar )
+        {
+            x *= fScalar;
+            y *= fScalar;
+            z *= fScalar;
+            w *= fScalar;
+            return *this;
+        }
+
+        inline Vector4& operator *= ( const Vector4& rkVector )
+        {
+            x *= rkVector.x;
+            y *= rkVector.y;
+            z *= rkVector.z;
+            w *= rkVector.w;
+
+            return *this;
+        }
+
+        inline Vector4& operator /= ( Real fScalar )
+        {
+            assert( fScalar != 0.0 );
+
+            Real fInv = 1.0 / fScalar;
+
+            x *= fInv;
+            y *= fInv;
+            z *= fInv;
+            w *= fInv;
+
+            return *this;
+        }
+
+        inline Vector4& operator /= ( const Vector4& rkVector )
+        {
+            x /= rkVector.x;
+            y /= rkVector.y;
+            z /= rkVector.z;
+            w /= rkVector.w;
+
+            return *this;
+        }
+
+        /** Calculates the dot (scalar) product of this vector with another.
+            @param
+                vec Vector with which to calculate the dot product (together
+                with this one).
+            @returns
+                A float representing the dot product value.
+        */
+        inline Real dotProduct(const Vector4& vec) const
+        {
+            return x * vec.x + y * vec.y + z * vec.z + w * vec.w;
+        }
+        /** Function for writing to a stream.
+        */
+        inline _OgreExport friend std::ostream& operator <<
+            ( std::ostream& o, const Vector4& v )
+        {
+            o << "Vector4(" << v.x << ", " << v.y << ", " << v.z << ", " << v.w << ")";
+            return o;
+        }
+    };
+
+}
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMatrix3.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMatrix3.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMatrix3.h	(revision 1092)
@@ -0,0 +1,302 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __Matrix3_H__
+#define __Matrix3_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreVector3.h"
+
+// NB All code adapted from Wild Magic 0.2 Matrix math (free source code)
+// http://www.magic-software.com
+
+// NOTE.  The (x,y,z) coordinate system is assumed to be right-handed.
+// Coordinate axis rotation matrices are of the form
+//   RX =    1       0       0
+//           0     cos(t) -sin(t)
+//           0     sin(t)  cos(t)
+// where t > 0 indicates a counterclockwise rotation in the yz-plane
+//   RY =  cos(t)    0     sin(t)
+//           0       1       0
+//        -sin(t)    0     cos(t)
+// where t > 0 indicates a counterclockwise rotation in the zx-plane
+//   RZ =  cos(t) -sin(t)    0
+//         sin(t)  cos(t)    0
+//           0       0       1
+// where t > 0 indicates a counterclockwise rotation in the xy-plane.
+
+namespace Ogre
+{
+    /** A 3x3 matrix which can represent rotations around axes.
+        @note
+            <b>All the code is adapted from the Wild Magic 0.2 Matrix
+            library (http://www.magic-software.com).</b>
+        @par
+            The coordinate system is assumed to be <b>right-handed</b>.
+    */
+    class _OgreExport Matrix3
+    {
+    public:
+        /** Default constructor.
+            @note
+                It does <b>NOT</b> initialize the matrix for efficiency.
+        */
+		inline Matrix3 () {};
+        inline explicit Matrix3 (const Real arr[3][3])
+		{
+			memcpy(m,arr,9*sizeof(Real));
+		}
+        inline Matrix3 (const Matrix3& rkMatrix)
+		{
+			memcpy(m,rkMatrix.m,9*sizeof(Real));
+		}
+        Matrix3 (Real fEntry00, Real fEntry01, Real fEntry02,
+                    Real fEntry10, Real fEntry11, Real fEntry12,
+                    Real fEntry20, Real fEntry21, Real fEntry22)
+		{
+			m[0][0] = fEntry00;
+			m[0][1] = fEntry01;
+			m[0][2] = fEntry02;
+			m[1][0] = fEntry10;
+			m[1][1] = fEntry11;
+			m[1][2] = fEntry12;
+			m[2][0] = fEntry20;
+			m[2][1] = fEntry21;
+			m[2][2] = fEntry22;
+		}
+
+        // member access, allows use of construct mat[r][c]
+        inline Real* operator[] (size_t iRow) const
+		{
+			return (Real*)m[iRow];
+		}
+        /*inline operator Real* ()
+		{
+			return (Real*)m[0];
+		}*/
+        Vector3 GetColumn (size_t iCol) const;
+        void SetColumn(size_t iCol, const Vector3& vec);
+        void FromAxes(const Vector3& xAxis, const Vector3& yAxis, const Vector3& zAxis);
+
+        // assignment and comparison
+        inline Matrix3& operator= (const Matrix3& rkMatrix)
+		{
+			memcpy(m,rkMatrix.m,9*sizeof(Real));
+			return *this;
+		}
+        bool operator== (const Matrix3& rkMatrix) const;
+        inline bool operator!= (const Matrix3& rkMatrix) const
+		{
+			return !operator==(rkMatrix);
+		}
+
+        // arithmetic operations
+        Matrix3 operator+ (const Matrix3& rkMatrix) const;
+        Matrix3 operator- (const Matrix3& rkMatrix) const;
+        Matrix3 operator* (const Matrix3& rkMatrix) const;
+        Matrix3 operator- () const;
+
+        // matrix * vector [3x3 * 3x1 = 3x1]
+        Vector3 operator* (const Vector3& rkVector) const;
+
+        // vector * matrix [1x3 * 3x3 = 1x3]
+        _OgreExport friend Vector3 operator* (const Vector3& rkVector,
+            const Matrix3& rkMatrix);
+
+        // matrix * scalar
+        Matrix3 operator* (Real fScalar) const;
+
+        // scalar * matrix
+        _OgreExport friend Matrix3 operator* (Real fScalar, const Matrix3& rkMatrix);
+
+        // utilities
+        Matrix3 Transpose () const;
+        bool Inverse (Matrix3& rkInverse, Real fTolerance = 1e-06) const;
+        Matrix3 Inverse (Real fTolerance = 1e-06) const;
+        Real Determinant () const;
+
+        // singular value decomposition
+        void SingularValueDecomposition (Matrix3& rkL, Vector3& rkS,
+            Matrix3& rkR) const;
+        void SingularValueComposition (const Matrix3& rkL,
+            const Vector3& rkS, const Matrix3& rkR);
+
+        // Gram-Schmidt orthonormalization (applied to columns of rotation matrix)
+        void Orthonormalize ();
+
+        // orthogonal Q, diagonal D, upper triangular U stored as (u01,u02,u12)
+        void QDUDecomposition (Matrix3& rkQ, Vector3& rkD,
+            Vector3& rkU) const;
+
+        Real SpectralNorm () const;
+
+        // matrix must be orthonormal
+        void ToAxisAngle (Vector3& rkAxis, Radian& rfAngle) const;
+		inline void ToAxisAngle (Vector3& rkAxis, Degree& rfAngle) const {
+			Radian r;
+			ToAxisAngle ( rkAxis, r );
+			rfAngle = r;
+		}
+        void FromAxisAngle (const Vector3& rkAxis, const Radian& fRadians);
+#ifndef OGRE_FORCE_ANGLE_TYPES
+        inline void ToAxisAngle (Vector3& rkAxis, Real& rfRadians) const {
+			Radian r;
+			ToAxisAngle ( rkAxis, r );
+			rfRadians = r.valueRadians();
+		}
+        inline void FromAxisAngle (const Vector3& rkAxis, Real fRadians) {
+			FromAxisAngle ( rkAxis, Radian(fRadians) );
+		}
+#endif//OGRE_FORCE_ANGLE_TYPES
+
+        // The matrix must be orthonormal.  The decomposition is yaw*pitch*roll
+        // where yaw is rotation about the Up vector, pitch is rotation about the
+        // Right axis, and roll is rotation about the Direction axis.
+        bool ToEulerAnglesXYZ (Radian& rfYAngle, Radian& rfPAngle,
+            Radian& rfRAngle) const;
+        bool ToEulerAnglesXZY (Radian& rfYAngle, Radian& rfPAngle,
+            Radian& rfRAngle) const;
+        bool ToEulerAnglesYXZ (Radian& rfYAngle, Radian& rfPAngle,
+            Radian& rfRAngle) const;
+        bool ToEulerAnglesYZX (Radian& rfYAngle, Radian& rfPAngle,
+            Radian& rfRAngle) const;
+        bool ToEulerAnglesZXY (Radian& rfYAngle, Radian& rfPAngle,
+            Radian& rfRAngle) const;
+        bool ToEulerAnglesZYX (Radian& rfYAngle, Radian& rfPAngle,
+            Radian& rfRAngle) const;
+        void FromEulerAnglesXYZ (const Radian& fYAngle, const Radian& fPAngle, const Radian& fRAngle);
+        void FromEulerAnglesXZY (const Radian& fYAngle, const Radian& fPAngle, const Radian& fRAngle);
+        void FromEulerAnglesYXZ (const Radian& fYAngle, const Radian& fPAngle, const Radian& fRAngle);
+        void FromEulerAnglesYZX (const Radian& fYAngle, const Radian& fPAngle, const Radian& fRAngle);
+        void FromEulerAnglesZXY (const Radian& fYAngle, const Radian& fPAngle, const Radian& fRAngle);
+        void FromEulerAnglesZYX (const Radian& fYAngle, const Radian& fPAngle, const Radian& fRAngle);
+#ifndef OGRE_FORCE_ANGLE_TYPES
+        inline bool ToEulerAnglesXYZ (float& rfYAngle, float& rfPAngle,
+            float& rfRAngle) const {
+			Radian y, p, r;
+			bool b = ToEulerAnglesXYZ(y,p,r);
+			rfYAngle = y.valueRadians();
+			rfPAngle = p.valueRadians();
+			rfRAngle = r.valueRadians();
+			return b;
+		}
+        inline bool ToEulerAnglesXZY (float& rfYAngle, float& rfPAngle,
+            float& rfRAngle) const {
+			Radian y, p, r;
+			bool b = ToEulerAnglesXZY(y,p,r);
+			rfYAngle = y.valueRadians();
+			rfPAngle = p.valueRadians();
+			rfRAngle = r.valueRadians();
+			return b;
+		}
+        inline bool ToEulerAnglesYXZ (float& rfYAngle, float& rfPAngle,
+            float& rfRAngle) const {
+			Radian y, p, r;
+			bool b = ToEulerAnglesYXZ(y,p,r);
+			rfYAngle = y.valueRadians();
+			rfPAngle = p.valueRadians();
+			rfRAngle = r.valueRadians();
+			return b;
+		}
+        inline bool ToEulerAnglesYZX (float& rfYAngle, float& rfPAngle,
+            float& rfRAngle) const {
+			Radian y, p, r;
+			bool b = ToEulerAnglesYZX(y,p,r);
+			rfYAngle = y.valueRadians();
+			rfPAngle = p.valueRadians();
+			rfRAngle = r.valueRadians();
+			return b;
+		}
+        inline bool ToEulerAnglesZXY (float& rfYAngle, float& rfPAngle,
+            float& rfRAngle) const {
+			Radian y, p, r;
+			bool b = ToEulerAnglesZXY(y,p,r);
+			rfYAngle = y.valueRadians();
+			rfPAngle = p.valueRadians();
+			rfRAngle = r.valueRadians();
+			return b;
+		}
+        inline bool ToEulerAnglesZYX (float& rfYAngle, float& rfPAngle,
+            float& rfRAngle) const {
+			Radian y, p, r;
+			bool b = ToEulerAnglesZYX(y,p,r);
+			rfYAngle = y.valueRadians();
+			rfPAngle = p.valueRadians();
+			rfRAngle = r.valueRadians();
+			return b;
+		}
+        inline void FromEulerAnglesXYZ (float fYAngle, float fPAngle, float fRAngle) {
+			FromEulerAnglesXYZ ( Radian(fYAngle), Radian(fPAngle), Radian(fRAngle) );
+		}
+        inline void FromEulerAnglesXZY (float fYAngle, float fPAngle, float fRAngle) {
+			FromEulerAnglesXZY ( Radian(fYAngle), Radian(fPAngle), Radian(fRAngle) );
+		}
+        inline void FromEulerAnglesYXZ (float fYAngle, float fPAngle, float fRAngle) {
+			FromEulerAnglesYXZ ( Radian(fYAngle), Radian(fPAngle), Radian(fRAngle) );
+		}
+        inline void FromEulerAnglesYZX (float fYAngle, float fPAngle, float fRAngle) {
+			FromEulerAnglesYZX ( Radian(fYAngle), Radian(fPAngle), Radian(fRAngle) );
+		}
+        inline void FromEulerAnglesZXY (float fYAngle, float fPAngle, float fRAngle) {
+			FromEulerAnglesZXY ( Radian(fYAngle), Radian(fPAngle), Radian(fRAngle) );
+		}
+        inline void FromEulerAnglesZYX (float fYAngle, float fPAngle, float fRAngle) {
+			FromEulerAnglesZYX ( Radian(fYAngle), Radian(fPAngle), Radian(fRAngle) );
+		}
+#endif//OGRE_FORCE_ANGLE_TYPES
+        // eigensolver, matrix must be symmetric
+        void EigenSolveSymmetric (Real afEigenvalue[3],
+            Vector3 akEigenvector[3]) const;
+
+        static void TensorProduct (const Vector3& rkU, const Vector3& rkV,
+            Matrix3& rkProduct);
+
+        static const Real EPSILON;
+        static const Matrix3 ZERO;
+        static const Matrix3 IDENTITY;
+
+    protected:
+        // support for eigensolver
+        void Tridiagonal (Real afDiag[3], Real afSubDiag[3]);
+        bool QLAlgorithm (Real afDiag[3], Real afSubDiag[3]);
+
+        // support for singular value decomposition
+        static const Real ms_fSvdEpsilon;
+        static const unsigned int ms_iSvdMaxIterations;
+        static void Bidiagonalize (Matrix3& kA, Matrix3& kL,
+            Matrix3& kR);
+        static void GolubKahanStep (Matrix3& kA, Matrix3& kL,
+            Matrix3& kR);
+
+        // support for spectral norm
+        static Real MaxCubicRoot (Real afCoeff[3]);
+
+        Real m[3][3];
+
+        // for faster access
+        friend class Matrix4;
+    };
+}
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRotationalSpline.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRotationalSpline.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRotationalSpline.h	(revision 1092)
@@ -0,0 +1,125 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __RotationalSpline_H__
+#define __RotationalSpline_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreQuaternion.h"
+
+namespace Ogre {
+
+    /** This class interpolates orientations (rotations) along a spline using 
+        derivatives of quaternions.
+    @remarks
+        Like the SimpleSpline class, this class is about interpolating values 
+        smoothly over a spline. Whilst SimpleSpline deals with positions (the normal
+        sense we think about splines), this class interpolates orientations. The
+        theory is identical, except we're now in 4-dimensional space instead of 3.
+    @par
+        In positional splines, we use the points and tangents on those points to generate
+        control points for the spline. In this case, we use quaternions and derivatives
+        of the quaternions (i.e. the rate and direction of change at each point). This is the
+        same as SimpleSpline since a tangent is a derivative of a position. We effectively 
+        generate an extra quaternion in between each actual quaternion which when take with 
+        the original quaternion forms the 'tangent' of that quaternion.
+    */
+    class _OgreExport RotationalSpline
+    {
+    public:
+        RotationalSpline();
+        ~RotationalSpline();
+
+        /** Adds a control point to the end of the spline. */
+        void addPoint(const Quaternion& p);
+
+        /** Gets the detail of one of the control points of the spline. */
+        const Quaternion& getPoint(unsigned short index) const;
+
+        /** Gets the number of control points in the spline. */
+        unsigned short getNumPoints(void) const;
+
+        /** Clears all the points in the spline. */
+        void clear(void);
+
+        /** Updates a single point in the spline. 
+        @remarks
+            This point must already exist in the spline.
+        */
+        void updatePoint(unsigned short index, const Quaternion& value);
+
+        /** Returns an interpolated point based on a parametric value over the whole series.
+        @remarks
+            Given a t value between 0 and 1 representing the parametric distance along the
+            whole length of the spline, this method returns an interpolated point.
+        @param t Parametric value.
+		@param useShortestPath Defines if rotation should take the shortest possible path
+        */
+        Quaternion interpolate(Real t, bool useShortestPath=true);
+
+        /** Interpolates a single segment of the spline given a parametric value.
+        @param fromIndex The point index to treat as t=0. fromIndex + 1 is deemed to be t=1
+        @param t Parametric value
+		@param useShortestPath Defines if rotation should take the shortest possible path
+        */
+        Quaternion interpolate(unsigned int fromIndex, Real t, bool useShortestPath=true);
+
+        /** Tells the spline whether it should automatically calculate tangents on demand
+            as points are added.
+        @remarks
+            The spline calculates tangents at each point automatically based on the input points.
+            Normally it does this every time a point changes. However, if you have a lot of points
+            to add in one go, you probably don't want to incur this overhead and would prefer to 
+            defer the calculation until you are finished setting all the points. You can do this
+            by calling this method with a parameter of 'false'. Just remember to manually call 
+            the recalcTangents method when you are done.
+        @param autoCalc If true, tangents are calculated for you whenever a point changes. If false, 
+            you must call reclacTangents to recalculate them when it best suits.
+        */
+        void setAutoCalculate(bool autoCalc);
+
+        /** Recalculates the tangents associated with this spline. 
+        @remarks
+            If you tell the spline not to update on demand by calling setAutoCalculate(false)
+            then you must call this after completing your updates to the spline points.
+        */
+        void recalcTangents(void);
+
+    protected:
+
+        bool mAutoCalc;
+
+
+
+        std::vector<Quaternion> mPoints;
+        std::vector<Quaternion> mTangents;
+
+    };
+
+
+}
+
+
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreEventDispatcher.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreEventDispatcher.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreEventDispatcher.h	(revision 1092)
@@ -0,0 +1,212 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+/***************************************************************************
+OgreEventDispatcher.h  -  
+	Handles the Dispatching of events to a EventTarget (mainly a PositionTarget for 
+	mouse moving). The EventTargets are managed by a target manager.
+
+	A EventDispatcher is needed for each TargetManager. ie 1 dispatcher for the OverlayManager,
+	for managing the 2D GUI components, and another EventDispatcher for a SceneManager 
+	managing the 3D objects.(NOTE currently the SceneManager isn't a TargetManager.. this is a TODO).
+
+-------------------
+begin                : Nov 19 2002
+copyright            : (C) 2002 by Kenny Sabir
+email                : kenny@sparksuit.com
+***************************************************************************/
+
+
+
+#ifndef __EventDispatcher_H__
+#define __EventDispatcher_H__
+
+#include "OgrePrerequisites.h"
+
+namespace Ogre {
+
+	/**
+		Handles the Dispatching of events to a EventTarget (mainly a PositionTarget for 
+		mouse moving). 
+	@remarks
+		A EventDispatcher is needed for each TargetManager. ie 1 dispatcher for the OverlayManager,
+		for managing the 2D GUI components, and another EventDispatcher for a SceneManager 
+		managing the 3D objects.(NOTE currently the SceneManager isn't a TargetManager.. this is a TODO).
+	*/
+    class _OgreExport EventDispatcher
+    {
+    protected:
+	    TargetManager* mTargetManager;		
+
+	    /**
+	    * The current PositionTarget that has focus that is being
+	    * hosted by this GuiContainer.  If this is a null reference then 
+	    * there is currently no focus on a PositionTarget being 
+	    * hosted by this GuiContainer 
+	    */
+	    PositionTarget* mFocus;	// isn't implemented yet
+
+	    /**
+	    * The current PositionTarget, over which, the current drag operation originated.
+        * Only valid when mDragging is true.  May be null.
+	    */
+	    PositionTarget* mMouseDragSource;
+
+	    /**
+	    * PositionTarget the Keycursor is on 
+	    */
+	    PositionTarget* mKeyCursorOn;	
+
+	    /**
+	    * The last PositionTarget entered
+	    */
+            PositionTarget* mTargetLastEntered;
+
+        /**
+        *  Screen coordinates of the last (or current) mouse event.  Will eventually be
+        *  useful for managing mouse cursors.
+        */
+        Real mMouseX;
+        Real mMouseY;
+
+	    /**
+	    * Indicates if the mouse pointer is currently being dragged...
+	    * this is needed because we may receive exit events while dragging
+	    * and need to keep the current mouse target in this case.
+	    */
+	    bool mDragging;       // i.e. mouse grab
+
+	    /**
+	    * Indicates whether or not Drag/Drop event will be generated during the
+        * next drag sequence.
+        *
+        * @see setDragDrop
+	    */
+        bool mDragDropOn;
+
+        /**
+	    * Indicates whether or not Drag/Drop events are currently being generated.
+	    */
+        bool mDragDropActive;
+
+	    int mEventMask;
+
+	    //-------------------
+	    // protected methods	
+
+	    bool processKeyEvent(KeyEvent* e) ;
+
+	    /**
+	    * This method attempts to distribute a mouse event to a lightweight
+	    * PositionTarget.  It tries to avoid doing any unnecessary probes down
+	    * into the PositionTarget tree to minimize the overhead of determining
+	    * where to route the event, since mouse movement events tend to
+	    * come in large and frequent amounts.
+	    */
+
+	    bool processMouseEvent(MouseEvent* e) ;
+
+	    /**
+	    * Sends a mouse event to the current mouse event recipient using
+	    * the given event (sent to the windowed host) as a srcEvent.  If
+	    * the mouse event target is still in the PositionTarget tree, the 
+	    * coordinates of the event are translated to those of the target.
+	    * If the target has been removed, we don't bother to send the
+	    * message.
+	    */
+
+	    void retargetMouseEvent(PositionTarget* target, MouseEvent* e) ;
+
+	    /**
+	    * Sends a mouse event to the current mouse event recipient using
+	    * the given event (sent to the windowed host) as a srcEvent.  If
+	    * the mouse event target is still in the PositionTarget tree, the 
+	    * coordinates of the event are translated to those of the target.
+	    * If the target has been removed, we don't bother to send the
+	    * message.
+	    */
+
+	    void retargetMouseEvent(PositionTarget* target, int id, MouseEvent* e, bool consume = false) ;
+
+	    /**
+	    * Sends a key event to the current mouse event recipient using
+	    * the given event (sent to the windowed host) as a srcEvent.
+	    */
+
+	    void retargetKeyEvent(PositionTarget* target, int id, MouseEvent* e) ;
+
+	    /*
+	    * Generates enter/exit events as mouse moves over lw PositionTargets
+	    * @param targetOver	Target mouse is over (including native container)
+	    * @param e			Mouse event in native container
+	    */
+
+	    void trackMouseEnterExit(PositionTarget* targetOver, MouseEvent* e) ;
+
+        /*
+	    * Generates FocusIn/FocusOut events as the keyboard focus changes.
+	    * @param targetOver Target mouse is over (including native container)
+	    * @param e			 Mouse event in native container
+	    */
+        void trackKeyEnterExit(PositionTarget* targetOver, MouseEvent* e);
+
+    public:
+	    EventDispatcher(TargetManager* pTargetManager);
+        virtual ~EventDispatcher();       
+
+	    /**
+	    * Dispatches an event to a PositionTarget if necessary, and
+	    * returns whether or not the event was forwarded to a 
+	    * sub-PositionTarget.
+	    *
+	    * @param e the event
+	    */
+	    bool dispatchEvent(InputEvent* e);
+
+	    /**
+	    * Enables or disables the mouse drag/drop events on the next mouse
+        * drag sequence.   It has no effect on the current drag sequence, if any.
+        * Drag/drop events are typically enabled when the mouse enters the area
+        * of a particular PositionTarget.
+	    *
+	    * @param dragDropOn Indicates whether or not the drag/drop events should
+        * be enabled.
+	    */
+        void setDragDrop(bool dragDropOn);
+
+        /**
+	    * Returns the X screen coordinate of the current mouse position.
+	    */
+        inline Real getMouseX() const { return mMouseX; }
+        /**
+	    * Returns the Y screen coordinate of the current mouse position.
+	    */
+        inline Real getMouseY() const { return mMouseY; }
+    };
+
+}
+
+
+#endif 
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSceneManager.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSceneManager.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSceneManager.h	(revision 1092)
@@ -0,0 +1,1871 @@
+/*-------------------------------------------------------------------------
+This source file is a part of OGRE
+(Object-oriented Graphics Rendering Engine)
+
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This library is free software; you can redistribute it and/or modify it
+under the terms of the GNU Lesser General Public License (LGPL) as 
+published by the Free Software Foundation; either version 2.1 of the 
+License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful, but 
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
+or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public 
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License 
+along with this library; if not, write to the Free Software Foundation, 
+Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA or go to
+http://www.gnu.org/copyleft/lesser.txt
+-------------------------------------------------------------------------*/
+#ifndef __SceneManager_H__
+#define __SceneManager_H__
+
+// Precompiler options
+#include "OgrePrerequisites.h"
+
+#include "OgreString.h"
+#include "OgreSceneNode.h"
+#include "OgrePlane.h"
+#include "OgreQuaternion.h"
+#include "OgreColourValue.h"
+#include "OgreCommon.h"
+#include "OgreRenderQueue.h"
+#include "OgreAnimationState.h"
+#include "OgreSceneQuery.h"
+#include "OgreAutoParamDataSource.h"
+#include "OgreAnimationState.h"
+#include "OgreRenderQueue.h"
+#include "OgreRenderQueueSortingGrouping.h"
+#include "OgreRectangle2D.h"
+
+namespace Ogre {
+
+    /** Structure for holding a position & orientation pair. */
+    struct ViewPoint
+    {
+        Vector3 position;
+        Quaternion orientation;
+    };
+
+	// Forward declarations
+	class DefaultIntersectionSceneQuery;
+	class DefaultRaySceneQuery;
+	class DefaultSphereSceneQuery;
+	class DefaultAxisAlignedBoxSceneQuery;
+
+    /** Manages the rendering of a 'scene' i.e. a collection of primitives.
+        @remarks
+            This class defines the basic behaviour of the 'Scene Manager' family. These classes will
+            organise the objects in the scene and send them to the rendering system, a subclass of
+            RenderSystem. This basic superclass does no sorting, culling or organising of any sort.
+        @par
+            Subclasses may use various techniques to organise the scene depending on how they are
+            designed (e.g. BSPs, octrees etc). As with other classes, methods preceded with '_' are
+            designed to be called by other classes in the Ogre system, not by user applications,
+            although this is not forbidden.
+        @author
+            Steve Streeting
+        @version
+            1.0
+     */
+    class _OgreExport SceneManager
+    {
+		friend class DefaultIntersectionSceneQuery; 
+	    friend class DefaultRaySceneQuery;
+	    friend class DefaultSphereSceneQuery;
+	    friend class DefaultAxisAlignedBoxSceneQuery;
+        friend class DefaultPlaneBoundedVolumeListSceneQuery;
+    public:
+        /// Query mask which will be used for world geometry @see SceneQuery
+        static unsigned long WORLD_GEOMETRY_QUERY_MASK;
+        /** Comparator for material map, for sorting materials into render order (e.g. transparent last).
+        */
+        struct materialLess
+        {
+            _OgreExport bool operator()(const Material* x, const Material* y) const;
+        };
+        /// Comparator for sorting lights relative to a point
+        struct lightLess
+        {
+            _OgreExport bool operator()(const Light* a, const Light* b) const;
+        };
+
+        /// Describes the stage of rendering when performing complex illumination
+        enum IlluminationRenderStage
+        {
+            /// No special illumination stage
+            IRS_NONE,
+            /// Ambient stage, when background light is added
+            IRS_AMBIENT,
+            /// Diffuse / specular stage, when individual light contributions are added
+            IRS_PER_LIGHT,
+            /// Decal stage, when texture detail is added to the lit base
+            IRS_DECAL,
+            /// Render to texture stage, used for texture based shadows
+            IRS_RENDER_TO_TEXTURE,
+            /// Modulative render from shadow texture stage
+            IRS_RENDER_MODULATIVE_PASS
+        };
+
+		/** Enumeration of the possible modes allowed for processing the special case
+		render queue list.
+		@see SceneManager::setSpecialCaseRenderQueueMode
+		*/
+		enum SpecialCaseRenderQueueMode
+		{
+			/// Render only the queues in the special case list
+			SCRQM_INCLUDE,
+			/// Render all except the queues in the special case list
+			SCRQM_EXCLUDE
+		};
+    protected:
+
+        /// Queue of objects for rendering
+        RenderQueue* mRenderQueue;
+
+        /// Current ambient light, cached for RenderSystem
+        ColourValue mAmbientLight;
+
+        /// The rendering system to send the scene to
+        RenderSystem *mDestRenderSystem;
+
+        typedef std::map<String, Camera* > CameraList;
+
+        /** Central list of cameras - for easy memory management and lookup.
+        */
+        CameraList mCameras;
+
+        typedef std::map<String, Light* > SceneLightList;
+
+        /** Central list of lights - for easy memory management and lookup.
+        */
+        SceneLightList mLights;
+
+
+        typedef std::map<String, Entity* > EntityList;
+
+        /** Central list of entities - for easy memory management and lookup.
+        */
+        EntityList mEntities;
+
+        typedef std::map<String, BillboardSet* > BillboardSetList;
+
+        /** Central list of billboard sets - for easy memory management and lookup.
+        */
+        BillboardSetList mBillboardSets;
+
+		typedef std::map<String, StaticGeometry* > StaticGeometryList;
+		StaticGeometryList mStaticGeometryList;
+
+        typedef std::map<String, SceneNode*> SceneNodeList;
+
+        /** Central list of SceneNodes - for easy memory management.
+            @note
+                Note that this list is used only for memory management; the structure of the scene
+                is held using the hierarchy of SceneNodes starting with the root node. However you
+                can look up nodes this way.
+        */
+        SceneNodeList mSceneNodes;
+
+        /// Camera in progress
+        Camera* mCameraInProgress;
+        /// Current Viewport
+        Viewport* mCurrentViewport;
+
+        /// Root scene node
+        SceneNode* mSceneRoot;
+
+        /// Autotracking scene nodes
+        typedef std::set<SceneNode*> AutoTrackingSceneNodes;
+        AutoTrackingSceneNodes mAutoTrackingSceneNodes;
+
+        // Sky params
+        // Sky plane
+        Entity* mSkyPlaneEntity;
+        Entity* mSkyDomeEntity[5];
+        Entity* mSkyBoxEntity[6];
+
+        SceneNode* mSkyPlaneNode;
+        SceneNode* mSkyDomeNode;
+        SceneNode* mSkyBoxNode;
+
+        bool mSkyPlaneEnabled;
+        bool mSkyPlaneDrawFirst;
+        Plane mSkyPlane;
+        // Sky box
+        bool mSkyBoxEnabled;
+        bool mSkyBoxDrawFirst;
+        Quaternion mSkyBoxOrientation;
+        // Sky dome
+        bool mSkyDomeEnabled;
+        bool mSkyDomeDrawFirst;
+        Quaternion mSkyDomeOrientation;
+        // Fog
+        FogMode mFogMode;
+        ColourValue mFogColour;
+        Real mFogStart;
+        Real mFogEnd;
+        Real mFogDensity;
+
+		typedef std::set<RenderQueueGroupID> SpecialCaseRenderQueueList;
+		SpecialCaseRenderQueueList mSpecialCaseQueueList;
+		SpecialCaseRenderQueueMode mSpecialCaseQueueMode;
+		RenderQueueGroupID mWorldGeometryRenderQueue;
+
+        /** Internal method for initialising the render queue.
+        @remarks
+            Subclasses can use this to install their own RenderQueue implementation.
+        */
+        virtual void initRenderQueue(void);
+        /** Internal method for setting up the renderstate for a rendering pass.
+            @param
+                pass The Pass details to set.
+            @returns
+                A Pass object that was used instead of the one passed in, can
+                happen when rendering shadow passes
+        */
+        virtual Pass* setPass(Pass* pass);
+        /// A pass designed to let us render shadow colour on white for texture shadows
+        Pass* mShadowCasterPlainBlackPass;
+        /// A pass designed to let us render shadow receivers for texture shadows
+        Pass* mShadowReceiverPass;
+        /** Internal method for turning a regular pass into a shadow caster pass.
+        @remarks
+            This is only used for texture shadows, basically we're trying to
+            ensure that objects are rendered solid black.
+            This method will usually return the standard solid black pass for
+            all fixed function passes, but will merge in a vertex program
+            and fudge the AutpoParamDataSource to set black lighting for
+            passes with vertex programs. 
+        */
+        Pass* deriveShadowCasterPass(Pass* pass);
+        /** Internal method for turning a regular pass into a shadow receiver pass.
+        @remarks
+        This is only used for texture shadows, basically we're trying to
+        ensure that objects are rendered with a projective texture.
+        This method will usually return a standard single-texture pass for
+        all fixed function passes, but will merge in a vertex program
+        for passes with vertex programs. 
+        */
+        Pass* deriveShadowReceiverPass(Pass* pass);
+    
+        /** Internal method to validate whether a Pass should be allowed to render.
+        @remarks
+            Called just before a pass is about to be used for rendering a group to
+            allow the SceneManager to omit it if required. A return value of false
+            skips this pass. 
+        */
+        bool validatePassForRendering(Pass* pass);
+
+        /** Internal method to validate whether a Renderable should be allowed to render.
+        @remarks
+        Called just before a pass is about to be used for rendering a Renderable to
+        allow the SceneManager to omit it if required. A return value of false
+        skips it. 
+        */
+        bool validateRenderableForRendering(Pass* pass, Renderable* rend);
+
+        enum BoxPlane
+        {
+            BP_FRONT = 0,
+            BP_BACK = 1,
+            BP_LEFT = 2,
+            BP_RIGHT = 3,
+            BP_UP = 4,
+            BP_DOWN = 5
+        };
+
+        /* Internal utility method for creating the planes of a skybox.
+        */
+        MeshPtr createSkyboxPlane(
+            BoxPlane bp,
+            Real distance,
+            const Quaternion& orientation,
+            const String& groupName);
+
+        /* Internal utility method for creating the planes of a skydome.
+        */
+        MeshPtr createSkydomePlane(
+            BoxPlane bp,
+            Real curvature, Real tiling, Real distance,
+            const Quaternion& orientation,
+            int xsegments, int ysegments, int ySegmentsToKeep, 
+            const String& groupName);
+
+        // Flag indicating whether SceneNodes will be rendered as a set of 3 axes
+        bool mDisplayNodes;
+
+        /// Storage of animations, lookup by name
+        typedef std::map<String, Animation*> AnimationList;
+        AnimationList mAnimationsList;
+        AnimationStateSet mAnimationStates;
+
+        /** Internal method used by _renderVisibleObjects to deal with renderables
+            which override the camera's own view / projection materices. */
+        void useRenderableViewProjMode(Renderable* pRend);
+
+        /// Controller flag for determining if we need to set view/proj matrices
+        bool mCamChanged;
+
+        typedef std::vector<RenderQueueListener*> RenderQueueListenerList;
+        RenderQueueListenerList mRenderQueueListeners;
+
+        /// Internal method for firing the queue start event, returns true if queue is to be skipped
+        bool fireRenderQueueStarted(RenderQueueGroupID id);
+        /// Internal method for firing the queue end event, returns true if queue is to be repeated
+        bool fireRenderQueueEnded(RenderQueueGroupID id);
+
+        /** Internal method for setting the destination viewport for the next render. */
+        virtual void setViewport(Viewport *vp);
+
+		/** Flag that indicates if all of the scene node's bounding boxes should be shown as a wireframe. */
+		bool mShowBoundingBoxes;       
+
+        /** Internal utility method for rendering a single object. 
+        @remarks
+            Assumes that the pass has already been set up.
+        @param rend The renderable to issue to the pipeline
+        @param pass The pass which is being used
+        @param doLightIteration If true, this method will issue the renderable to
+            the pipeline possibly multiple times, if the pass indicates it should be
+            done once per light
+        @param manualLightList Only applicable if doLightIteration is false, this
+            method allows you to pass in a previously determined set of lights
+            which will be used for a single render of this object.
+        */
+        virtual void renderSingleObject(Renderable* rend, Pass* pass, bool doLightIteration, 
+            const LightList* manualLightList = 0);
+
+        /// Utility class for calculating automatic parameters for gpu programs
+        AutoParamDataSource mAutoParamDataSource;
+
+        ShadowTechnique mShadowTechnique;
+        bool mDebugShadows;
+        ColourValue mShadowColour;
+        Pass* mShadowDebugPass;
+        Pass* mShadowStencilPass;
+        Pass* mShadowModulativePass;
+		bool mShadowMaterialInitDone;
+        LightList mLightsAffectingFrustum;
+        HardwareIndexBufferSharedPtr mShadowIndexBuffer;
+		size_t mShadowIndexBufferSize;
+        Rectangle2D* mFullScreenQuad;
+        Real mShadowDirLightExtrudeDist;
+        IlluminationRenderStage mIlluminationStage;
+        unsigned short mShadowTextureSize;
+        unsigned short mShadowTextureCount;
+		PixelFormat mShadowTextureFormat;
+        typedef std::vector<RenderTexture*> ShadowTextureList;
+        ShadowTextureList mShadowTextures;
+        RenderTexture* mCurrentShadowTexture;
+		bool mShadowUseInfiniteFarPlane;
+        /** Internal method for locating a list of lights which could be affecting the frustum. 
+        @remarks
+            Custom scene managers are encouraged to override this method to make use of their
+            scene partitioning scheme to more efficiently locate lights, and to eliminate lights
+            which may be occluded by word geometry.
+        */
+        virtual void findLightsAffectingFrustum(const Camera* camera);
+        /// Internal method for setting up materials for shadows
+        virtual void initShadowVolumeMaterials(void);
+        /// Internal method for creating shadow textures (texture-based shadows)
+        virtual void createShadowTextures(unsigned short size, unsigned short count, 
+			PixelFormat fmt);
+        /// Internal method for preparing shadow textures ready for use in a regular render
+        virtual void prepareShadowTextures(Camera* cam, Viewport* vp);
+
+        /** Internal method for rendering all the objects for a given light into the 
+            stencil buffer.
+        @param light The light source
+        @param cam The camera being viewed from
+        */
+        virtual void renderShadowVolumesToStencil(const Light* light, const Camera* cam);
+        /** Internal utility method for setting stencil state for rendering shadow volumes. 
+        @param secondpass Is this the second pass?
+        @param zfail Should we be using the zfail method?
+        @param twosided Should we use a 2-sided stencil?
+        */
+        virtual void setShadowVolumeStencilState(bool secondpass, bool zfail, bool twosided);
+        /** Render a set of shadow renderables. */
+        void renderShadowVolumeObjects(ShadowCaster::ShadowRenderableListIterator iShadowRenderables,
+            Pass* pass, const LightList *manualLightList, unsigned long flags,
+            bool secondpass, bool zfail, bool twosided);
+        typedef std::vector<ShadowCaster*> ShadowCasterList;
+        ShadowCasterList mShadowCasterList;
+        SphereSceneQuery* mShadowCasterSphereQuery;
+        AxisAlignedBoxSceneQuery* mShadowCasterAABBQuery;
+        Real mShadowFarDist;
+        Real mShadowFarDistSquared;
+        Real mShadowTextureOffset; // proportion of texture offset in view direction e.g. 0.4
+        Real mShadowTextureFadeStart; // as a proportion e.g. 0.6
+        Real mShadowTextureFadeEnd; // as a proportion e.g. 0.9
+		bool mShadowTextureSelfShadow;
+		Pass* mShadowTextureCustomCasterPass;
+		Pass* mShadowTextureCustomReceiverPass;
+		String mShadowTextureCustomCasterVertexProgram;
+		String mShadowTextureCustomReceiverVertexProgram;
+		GpuProgramParametersSharedPtr mShadowTextureCustomCasterVPParams;
+		GpuProgramParametersSharedPtr mShadowTextureCustomReceiverVPParams;
+		bool mShadowTextureCasterVPDirty;
+		bool mShadowTextureReceiverVPDirty;
+
+
+        GpuProgramParametersSharedPtr mInfiniteExtrusionParams;
+        GpuProgramParametersSharedPtr mFiniteExtrusionParams;
+
+        /// Inner class to use as callback for shadow caster scene query
+        class _OgreExport ShadowCasterSceneQueryListener : public SceneQueryListener
+        {
+        protected:
+			SceneManager* mSceneMgr;
+            ShadowCasterList* mCasterList;
+            bool mIsLightInFrustum;
+            const PlaneBoundedVolumeList* mLightClipVolumeList;
+            const Camera* mCamera;
+            const Light* mLight;
+            Real mFarDistSquared;
+        public:
+            ShadowCasterSceneQueryListener(SceneManager* sm) : mSceneMgr(sm),
+				mCasterList(0), mIsLightInFrustum(false), mLightClipVolumeList(0), 
+                mCamera(0) {}
+            // Prepare the listener for use with a set of parameters  
+            void prepare(bool lightInFrustum, 
+                const PlaneBoundedVolumeList* lightClipVolumes, 
+                const Light* light, const Camera* cam, ShadowCasterList* casterList, 
+                Real farDistSquared) 
+            {
+                mCasterList = casterList;
+                mIsLightInFrustum = lightInFrustum;
+                mLightClipVolumeList = lightClipVolumes;
+                mCamera = cam;
+                mLight = light;
+                mFarDistSquared = farDistSquared;
+            }
+            bool queryResult(MovableObject* object);
+            bool queryResult(SceneQuery::WorldFragment* fragment);
+        };
+
+        ShadowCasterSceneQueryListener* mShadowCasterQueryListener;
+
+        /** Internal method for locating a list of shadow casters which 
+            could be affecting the frustum for a given light. 
+        @remarks
+            Custom scene managers are encouraged to override this method to add optimisations, 
+            and to add their own custom shadow casters (perhaps for world geometry)
+        */
+        virtual const ShadowCasterList& findShadowCastersForLight(const Light* light, 
+            const Camera* camera);
+		/** Render the objects in a given queue group 
+		*/
+		virtual void renderQueueGroupObjects(RenderQueueGroup* group);
+        /** Render a group in the ordinary way */
+        virtual void renderBasicQueueGroupObjects(RenderQueueGroup* pGroup);
+		/** Render a group with the added complexity of additive stencil shadows. */
+		virtual void renderAdditiveStencilShadowedQueueGroupObjects(RenderQueueGroup* group);
+		/** Render a group with the added complexity of additive stencil shadows. */
+		virtual void renderModulativeStencilShadowedQueueGroupObjects(RenderQueueGroup* group);
+        /** Render a group rendering only shadow casters. */
+        virtual void renderTextureShadowCasterQueueGroupObjects(RenderQueueGroup* group);
+        /** Render a group rendering only shadow receivers. */
+        virtual void renderTextureShadowReceiverQueueGroupObjects(RenderQueueGroup* group);
+        /** Render a group with the added complexity of additive stencil shadows. */
+        virtual void renderModulativeTextureShadowedQueueGroupObjects(RenderQueueGroup* group);
+		/** Render a set of objects, see renderSingleObject for param definitions */
+		virtual void renderObjects(const RenderPriorityGroup::SolidRenderablePassMap& objs, 
+            bool doLightIteration, const LightList* manualLightList = 0);
+        /** Render a set of objects, see renderSingleObject for param definitions */
+		virtual void renderObjects(const RenderPriorityGroup::TransparentRenderablePassList& objs, 
+            bool doLightIteration, const LightList* manualLightList = 0);
+		/** Render those objects in the transparent pass list which have shadow casting forced on
+		@remarks
+			This function is intended to be used to render the shadows of transparent objects which have
+			transparency_casts_shadows set to 'on' in their material
+		*/
+		virtual void renderTransparentShadowCasterObjects(const RenderPriorityGroup::TransparentRenderablePassList& objs, 
+			bool doLightIteration, const LightList* manualLightList = 0);
+
+    public:
+        /** Default constructor.
+        */
+        SceneManager();
+
+        /** Default destructor.
+        */
+        virtual ~SceneManager();
+
+        /** Creates a camera to be managed by this scene manager.
+            @remarks
+                This camera must be added to the scene at a later time using
+                the attachObject method of the SceneNode class.
+            @param
+                name Name to give the new camera.
+        */
+        virtual Camera* createCamera(const String& name);
+
+        /** Retrieves a pointer to the named camera.
+        */
+        virtual Camera* getCamera(const String& name);
+
+        /** Removes a camera from the scene.
+            @remarks
+                This method removes a previously added camera from the scene.
+                The camera is deleted so the caller must ensure no references
+                to it's previous instance (e.g. in a SceneNode) are used.
+            @param
+                cam Pointer to the camera to remove
+        */
+        virtual void removeCamera(Camera *cam);
+
+        /** Removes a camera from the scene.
+            @remarks
+                This method removes an camera from the scene based on the
+                camera's name rather than a pointer.
+        */
+        virtual void removeCamera(const String& name);
+
+        /** Removes (and destroys) all cameras from the scene.
+        */
+        virtual void removeAllCameras(void);
+
+        /** Creates a light for use in the scene.
+            @remarks
+                Lights can either be in a fixed position and independent of the
+                scene graph, or they can be attached to SceneNodes so they derive
+                their position from the parent node. Either way, they are created
+                using this method so that the SceneManager manages their
+                existence.
+            @param
+                name The name of the new light, to identify it later.
+        */
+        virtual Light* createLight(const String& name);
+
+        /** Returns a pointer to the named Light which has previously been added to the scene.
+        */
+        virtual Light* getLight(const String& name);
+
+        /** Removes the named light from the scene and destroys it.
+            @remarks
+                Any pointers held to this light after calling this method will be invalid.
+        */
+        virtual void removeLight(const String& name);
+
+        /** Removes the light from the scene and destroys it based on a pointer.
+            @remarks
+                Any pointers held to this light after calling this method will be invalid.
+        */
+        virtual void removeLight(Light* light);
+        /** Removes and destroys all lights in the scene.
+        */
+        virtual void removeAllLights(void);
+
+        /** Populate a light list with an ordered set of the lights which are closest
+        to the position specified.
+        @remarks
+            Note that since directional lights have no position, they are always considered
+            closer than any point lights and as such will always take precedence. 
+        @par
+            Subclasses of the default SceneManager may wish to take into account other issues
+            such as possible visibility of the light if that information is included in their
+            data structures. This basic scenemanager simply orders by distance, eliminating 
+            those lights which are out of range.
+        @par
+            The number of items in the list max exceed the maximum number of lights supported
+            by the renderer, but the extraneous ones will never be used. In fact the limit will
+            be imposed by Pass::getMaxSimultaneousLights.
+        @param position The position at which to evaluate the list of lights
+        @param radius The bounding radius to test
+        @param destList List to be populated with ordered set of lights; will be cleared by 
+            this method before population.
+        */
+        virtual void _populateLightList(const Vector3& position, Real radius, LightList& destList);
+
+
+        /** Creates an instance of a SceneNode.
+            @remarks
+                Note that this does not add the SceneNode to the scene hierarchy.
+                This method is for convenience, since it allows an instance to
+                be created for which the SceneManager is responsible for
+                allocating and releasing memory, which is convenient in complex
+                scenes.
+            @par
+                To include the returned SceneNode in the scene, use the addChild
+                method of the SceneNode which is to be it's parent.
+            @par
+                Note that this method takes no parameters, and the node created is unnamed (it is
+                actually given a generated name, which you can retrieve if you want).
+                If you wish to create a node with a specific name, call the alternative method
+                which takes a name parameter.
+        */
+        virtual SceneNode* createSceneNode(void);
+
+        /** Creates an instance of a SceneNode with a given name.
+            @remarks
+                Note that this does not add the SceneNode to the scene hierarchy.
+                This method is for convenience, since it allows an instance to
+                be created for which the SceneManager is responsible for
+                allocating and releasing memory, which is convenient in complex
+                scenes.
+            @par
+                To include the returned SceneNode in the scene, use the addChild
+                method of the SceneNode which is to be it's parent.
+            @par
+                Note that this method takes a name parameter, which makes the node easier to
+                retrieve directly again later.
+        */
+        virtual SceneNode* createSceneNode(const String& name);
+
+        /** Destroys a SceneNode with a given name.
+        @remarks
+            This allows you to physically delete an individual SceneNode if you want to.
+            Note that this is not normally recommended, it's better to allow SceneManager
+            to delete the nodes when the scene is cleared.
+        */
+        virtual void destroySceneNode(const String& name);
+
+        /** Gets the SceneNode at the root of the scene hierarchy.
+            @remarks
+                The entire scene is held as a hierarchy of nodes, which
+                allows things like relative transforms, general changes in
+                rendering state etc (See the SceneNode class for more info).
+                In this basic SceneManager class, the application using
+                Ogre is free to structure this hierarchy however it likes,
+                since it has no real significance apart from making transforms
+                relative to each node (more specialised subclasses will
+                provide utility methods for building specific node structures
+                e.g. loading a BSP tree).
+            @par
+                However, in all cases there is only ever one root node of
+                the hierarchy, and this method returns a pointer to it.
+        */
+        virtual SceneNode* getRootSceneNode(void) const;
+
+        /** Retrieves a named SceneNode from the scene graph.
+        @remarks
+            If you chose to name a SceneNode as you created it, or if you
+            happened to make a note of the generated name, you can look it
+            up wherever it is in the scene graph using this method.
+        */
+        virtual SceneNode* getSceneNode(const String& name) const;
+
+        /** Create an Entity (instance of a discrete mesh).
+            @param
+                entityName The name to be given to the entity (must be unique).
+            @param
+                meshName The name of the Mesh it is to be based on (e.g. 'knot.oof'). The
+                mesh will be loaded if it is not already.
+        */
+        virtual Entity* createEntity(const String& entityName, const String& meshName);
+
+        /** Prefab shapes available without loading a model.
+            @note
+                Minimal implementation at present.
+            @todo
+                Add more prefabs (teapots, teapots!!!)
+        */
+        enum PrefabType {
+            PT_PLANE
+        };
+
+        /** Create an Entity (instance of a discrete mesh) from a range of prefab shapes.
+            @param
+                entityName The name to be given to the entity (must be unique).
+            @param
+                ptype The prefab type.
+        */
+        virtual Entity* createEntity(const String& entityName, PrefabType ptype);
+        /** Retrieves a pointer to the named Entity. */
+        virtual Entity* getEntity(const String& name);
+
+        /** Removes & destroys an Entity from the SceneManager.
+            @warning
+                Must only be done if the Entity is not attached
+                to a SceneNode. It may be safer to wait to clear the whole
+                scene if you are unsure use clearScene.
+            @see
+                SceneManager::clearScene
+        */
+        virtual void removeEntity(Entity* ent);
+
+        /** Removes & destroys an Entity from the SceneManager by name.
+            @warning
+                Must only be done if the Entity is not attached
+                to a SceneNode. It may be safer to wait to clear the whole
+                scene if you are unsure use clearScene.
+            @see
+                SceneManager::clearScene
+        */
+        virtual void removeEntity(const String& name);
+
+        /** Removes & destroys all Entities.
+            @warning
+                Again, use caution since no Entity must be referred to
+                elsewhere e.g. attached to a SceneNode otherwise a crash
+                is likely. Use clearScene if you are unsure (it clears SceneNode
+                entries too.)
+            @see
+                SceneManager::clearScene
+        */
+        virtual void removeAllEntities(void);
+
+        /** Empties the entire scene, inluding all SceneNodes, Entities, Lights, 
+            BillboardSets etc. Cameras are not deleted at this stage since
+            they are still referenced by viewports, which are not destroyed during
+            this process.
+        */
+        virtual void clearScene(void);
+
+        /** Sets the ambient light level to be used for the scene.
+            @remarks
+                This sets the colour and intensity of the ambient light in the scene, i.e. the
+                light which is 'sourceless' and illuminates all objects equally.
+                The colour of an object is affected by a combination of the light in the scene,
+                and the amount of light that object reflects (in this case based on the Material::ambient
+                property).
+            @remarks
+                By default the ambient light in the scene is ColourValue::Black, i.e. no ambient light. This
+                means that any objects rendered with a Material which has lighting enabled (see Material::setLightingEnabled)
+                will not be visible unless you have some dynamic lights in your scene.
+        */
+        void setAmbientLight(const ColourValue& colour);
+
+        /** Returns the ambient light level to be used for the scene.
+        */
+        const ColourValue& getAmbientLight(void) const;
+
+        /** Sets the source of the 'world' geometry, i.e. the large, mainly static geometry
+            making up the world e.g. rooms, landscape etc.
+            @remarks
+                Depending on the type of SceneManager (subclasses will be specialised
+                for particular world geometry types) you have requested via the Root or
+                SceneManagerEnumerator classes, you can pass a filename to this method and it
+                will attempt to load the world-level geometry for use. If you try to load
+                an inappropriate type of world data an exception will be thrown. The default
+                SceneManager cannot handle any sort of world geometry and so will always
+                throw an exception. However subclasses like BspSceneManager can load
+                particular types of world geometry e.g. "q3dm1.bsp".
+            @par
+                World geometry will be loaded via the 'common' resource paths and archives set in the
+                ResourceManager class.
+        */
+        virtual void setWorldGeometry(const String& filename);
+
+        /** Estimate the number of loading stages required to load the named
+            world geometry. 
+        @remarks
+            This method should be overridden by SceneManagers that provide
+            custom world geometry that can take some time to load. They should
+            return from this method a count of the number of stages of progress
+            they can report on whilst loading. During real loading (setWorldGeomtry),
+            they should call ResourceGroupManager::_notifyWorldGeometryProgress exactly
+            that number of times when loading the geometry for real.
+        @note 
+            The default is to return 0, ie to not report progress. 
+        */
+        virtual size_t estimateWorldGeometry(const String& filename) { return 0; }
+
+        /** Asks the SceneManager to provide a suggested viewpoint from which the scene should be viewed.
+            @remarks
+                Typically this method returns the origin unless a) world geometry has been loaded using
+                SceneManager::setWorldGeometry and b) that world geometry has suggested 'start' points.
+                If there is more than one viewpoint which the scene manager can suggest, it will always suggest
+                the first one unless the random parameter is true.
+            @param
+                random If true, and there is more than one possible suggestion, a random one will be used. If false
+                the same one will always be suggested.
+            @return
+                On success, true is returned.
+            @par
+                On failiure, false is returned.
+        */
+        virtual ViewPoint getSuggestedViewpoint(bool random = false);
+
+        /** Method for setting a specific option of the Scene Manager. These options are usually
+            specific for a certain implemntation of the Scene Manager class, and may (and probably
+            will) not exist across different implementations.
+            @param
+                strKey The name of the option to set
+            @param
+                pValue A pointer to the value - the size should be calculated by the scene manager
+                based on the key
+            @return
+                On success, true is returned.
+            @par
+                On failiure, false is returned.
+        */
+        virtual bool setOption( const String& strKey, const void* pValue ) { return false; }
+
+        /** Method for getting the value of an implementation-specific Scene Manager option.
+            @param
+                strKey The name of the option
+            @param
+                pDestValue A pointer to a memory location where the value will
+                be copied. Currently, the memory will be allocated by the
+                scene manager, but this may change
+            @return
+                On success, true is returned and pDestValue points to the value of the given
+                option.
+            @par
+                On failiure, false is returned and pDestValue is set to NULL.
+        */
+        virtual bool getOption( const String& strKey, void* pDestValue ) { return false; }
+
+        /** Method for verifying wether the scene manager has an implementation-specific
+            option.
+            @param
+                strKey The name of the option to check for.
+            @return
+                If the scene manager contains the given option, true is returned.
+            @remarks
+                If it does not, false is returned.
+        */
+        virtual bool hasOption( const String& strKey ) const { return false; }
+        /** Method for getting all possible values for a specific option. When this list is too large
+            (i.e. the option expects, for example, a float), the return value will be true, but the
+            list will contain just one element whose size will be set to 0.
+            Otherwise, the list will be filled with all the possible values the option can
+            accept.
+            @param
+                strKey The name of the option to get the values for.
+            @param
+                refValueList A reference to a list that will be filled with the available values.
+            @return
+                On success (the option exists), true is returned.
+            @par
+                On failure, false is returned.
+        */
+        virtual bool getOptionValues( const String& strKey, StringVector& refValueList ) { return false; }
+
+        /** Method for getting all the implementation-specific options of the scene manager.
+            @param
+                refKeys A reference to a list that will be filled with all the available options.
+            @return
+                On success, true is returned. On failiure, false is returned.
+        */
+        virtual bool getOptionKeys( StringVector& refKeys ) { return false; }
+
+        /** Internal method for updating the scene graph ie the tree of SceneNode instances managed by this class.
+            @remarks
+                This must be done before issuing objects to the rendering pipeline, since derived transformations from
+                parent nodes are not updated until required. This SceneManager is a basic implementation which simply
+                updates all nodes from the root. This ensures the scene is up to date but requires all the nodes
+                to be updated even if they are not visible. Subclasses could trim this such that only potentially visible
+                nodes are updated.
+        */
+        virtual void _updateSceneGraph(Camera* cam);
+
+        /** Internal method which parses the scene to find visible objects to render.
+            @remarks
+                If you're implementing a custom scene manager, this is the most important method to
+                override since it's here you can apply your custom world partitioning scheme. Once you
+                have added the appropriate objects to the render queue, you can let the default
+                SceneManager objects _renderVisibleObjects handle the actual rendering of the objects
+                you pick.
+            @par
+                Any visible objects will be added to a rendering queue, which is indexed by material in order
+                to ensure objects with the same material are rendered together to minimise render state changes.
+        */
+        virtual void _findVisibleObjects(Camera* cam, bool onlyShadowCasters);
+
+        /** Internal method for applying animations to scene nodes.
+        @remarks
+            Uses the internally stored AnimationState objects to apply animation to SceneNodes.
+        */
+        virtual void _applySceneAnimations(void);
+
+        /** Sends visible objects found in _findVisibleObjects to the rendering engine.
+        */
+        virtual void _renderVisibleObjects(void);
+
+        /** Prompts the class to send its contents to the renderer.
+            @remarks
+                This method prompts the scene manager to send the
+                contents of the scene it manages to the rendering
+                pipeline, possibly preceded by some sorting, culling
+                or other scene management tasks. Note that this method is not normally called
+                directly by the user application; it is called automatically
+                by the Ogre rendering loop.
+            @param camera Pointer to a camera from whose viewpoint the scene is to
+                be rendered.
+            @param vp The target viewport
+            @param includeOverlays Whether or not overlay objects should be rendered
+        */
+        virtual void _renderScene(Camera* camera, Viewport* vp, bool includeOverlays);
+
+        /** Internal method for queueing the sky objects with the params as 
+            previously set through setSkyBox, setSkyPlane and setSkyDome.
+        */
+        virtual void _queueSkiesForRendering(Camera* cam);
+
+
+
+        /** Notifies the scene manager of its destination render system
+            @remarks
+                Called automatically by RenderSystem::addSceneManager
+                this method simply notifies the manager of the render
+                system to which its output must be directed.
+            @param
+                sys Pointer to the RenderSystem subclass to be used as a render target.
+        */
+        virtual void _setDestinationRenderSystem(RenderSystem* sys);
+
+        /** Enables / disables a 'sky plane' i.e. a plane at constant
+            distance from the camera representing the sky.
+            @remarks
+                You can create sky planes yourself using the standard mesh and
+                entity methods, but this creates a plane which the camera can
+                never get closer or further away from - it moves with the camera.
+                (NB you could create this effect by creating a world plane which
+                was attached to the same SceneNode as the Camera too, but this
+                would only apply to a single camera whereas this plane applies to
+                any camera using this scene manager).
+            @note
+                To apply scaling, scrolls etc to the sky texture(s) you
+                should use the TextureUnitState class methods.
+            @param
+                enable True to enable the plane, false to disable it
+            @param
+                plane Details of the plane, i.e. it's normal and it's
+                distance from the camera.
+            @param
+                materialName The name of the material the plane will use
+            @param
+                scale The scaling applied to the sky plane - higher values
+                mean a bigger sky plane - you may want to tweak this
+                depending on the size of plane.d and the other
+                characteristics of your scene
+            @param
+                tiling How many times to tile the texture across the sky.
+                Applies to all texture layers. If you need finer control use
+                the TextureUnitState texture coordinate transformation methods.
+            @param
+                drawFirst If true, the plane is drawn before all other
+                geometry in the scene, without updating the depth buffer.
+                This is the safest rendering method since all other objects
+                will always appear in front of the sky. However this is not
+                the most efficient way if most of the sky is often occluded
+                by other objects. If this is the case, you can set this
+                parameter to false meaning it draws <em>after</em> all other
+                geometry which can be an optimisation - however you must
+                ensure that the plane.d value is large enough that no objects
+                will 'poke through' the sky plane when it is rendered.
+			@param
+				bow If zero, the plane will be completely flat (like previous
+				versions.  If above zero, the plane will be curved, allowing
+				the sky to appear below camera level.  Curved sky planes are 
+				simular to skydomes, but are more compatable with fog.
+            @param xsegments, ysegments
+                Determines the number of segments the plane will have to it. This
+                is most important when you are bowing the plane, but may also be useful
+                if you need tesselation on the plane to perform per-vertex effects.
+            @param groupName
+                The name of the resource group to which to assign the plane mesh.
+        */
+        virtual void setSkyPlane(
+            bool enable,
+            const Plane& plane, const String& materialName, Real scale = 1000,
+            Real tiling = 10, bool drawFirst = true, Real bow = 0, 
+            int xsegments = 1, int ysegments = 1, 
+            const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
+
+        /** Enables / disables a 'sky box' i.e. a 6-sided box at constant
+            distance from the camera representing the sky.
+            @remarks
+                You could create a sky box yourself using the standard mesh and
+                entity methods, but this creates a plane which the camera can
+                never get closer or further away from - it moves with the camera.
+                (NB you could create this effect by creating a world box which
+                was attached to the same SceneNode as the Camera too, but this
+                would only apply to a single camera whereas this skybox applies
+                to any camera using this scene manager).
+            @par
+                The material you use for the skybox can either contain layers
+                which are single textures, or they can be cubic textures, i.e.
+                made up of 6 images, one for each plane of the cube. See the
+                TextureUnitState class for more information.
+            @param
+                enable True to enable the skybox, false to disable it
+            @param
+                materialName The name of the material the box will use
+            @param
+                distance Distance in world coorinates from the camera to
+                each plane of the box. The default is normally OK.
+            @param
+                drawFirst If true, the box is drawn before all other
+                geometry in the scene, without updating the depth buffer.
+                This is the safest rendering method since all other objects
+                will always appear in front of the sky. However this is not
+                the most efficient way if most of the sky is often occluded
+                by other objects. If this is the case, you can set this
+                parameter to false meaning it draws <em>after</em> all other
+                geometry which can be an optimisation - however you must
+                ensure that the distance value is large enough that no
+                objects will 'poke through' the sky box when it is rendered.
+            @param
+                orientation Optional parameter to specify the orientation
+                of the box. By default the 'top' of the box is deemed to be
+                in the +y direction, and the 'front' at the -z direction.
+                You can use this parameter to rotate the sky if you want.
+            @param groupName
+                The name of the resource group to which to assign the plane mesh.
+        */
+        virtual void setSkyBox(
+            bool enable, const String& materialName, Real distance = 5000,
+            bool drawFirst = true, const Quaternion& orientation = Quaternion::IDENTITY,
+            const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
+
+        /** Enables / disables a 'sky dome' i.e. an illusion of a curved sky.
+            @remarks
+                A sky dome is actually formed by 5 sides of a cube, but with
+                texture coordinates generated such that the surface appears
+                curved like a dome. Sky domes are appropriate where you need a
+                realistic looking sky where the scene is not going to be
+                'fogged', and there is always a 'floor' of some sort to prevent
+                the viewer looking below the horizon (the distortion effect below
+                the horizon can be pretty horrible, and there is never anyhting
+                directly below the viewer). If you need a complete wrap-around
+                background, use the setSkyBox method instead. You can actually
+                combine a sky box and a sky dome if you want, to give a positional
+                backdrop with an overlayed curved cloud layer.
+            @par
+                Sky domes work well with 2D repeating textures like clouds. You
+                can change the apparant 'curvature' of the sky depending on how
+                your scene is viewed - lower curvatures are better for 'open'
+                scenes like landscapes, whilst higher curvatures are better for
+                say FPS levels where you don't see a lot of the sky at once and
+                the exaggerated curve looks good.
+            @param
+                enable True to enable the skydome, false to disable it
+            @param
+                materialName The name of the material the dome will use
+            @param
+                curvature The curvature of the dome. Good values are
+                between 2 and 65. Higher values are more curved leading to
+                a smoother effect, lower values are less curved meaning
+                more distortion at the horizons but a better distance effect.
+            @param
+                tiling How many times to tile the texture(s) across the
+                dome.
+            @param
+                distance Distance in world coorinates from the camera to
+                each plane of the box the dome is rendered on. The default
+                is normally OK.
+            @param
+                drawFirst If true, the dome is drawn before all other
+                geometry in the scene, without updating the depth buffer.
+                This is the safest rendering method since all other objects
+                will always appear in front of the sky. However this is not
+                the most efficient way if most of the sky is often occluded
+                by other objects. If this is the case, you can set this
+                parameter to false meaning it draws <em>after</em> all other
+                geometry which can be an optimisation - however you must
+                ensure that the distance value is large enough that no
+                objects will 'poke through' the sky when it is rendered.
+            @param
+                orientation Optional parameter to specify the orientation
+                of the dome. By default the 'top' of the dome is deemed to
+                be in the +y direction, and the 'front' at the -z direction.
+                You can use this parameter to rotate the sky if you want.
+            @param groupName
+                The name of the resource group to which to assign the plane mesh.
+        */
+        virtual void setSkyDome(
+            bool enable, const String& materialName, Real curvature = 10,
+            Real tiling = 8, Real distance = 4000, bool drawFirst = true,
+            const Quaternion& orientation = Quaternion::IDENTITY,
+            int xsegments = 16, int ysegments = 16, int ysegments_keep = -1,
+            const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
+
+        /** Sets the fogging mode applied to the scene.
+            @remarks
+                This method sets up the scene-wide fogging effect. These settings
+                apply to all geometry rendered, UNLESS the material with which it
+                is rendered has it's own fog settings (see Material::setFog).
+            @param
+                mode Set up the mode of fog as described in the FogMode
+                enum, or set to FOG_NONE to turn off.
+            @param
+                colour The colour of the fog. Either set this to the same
+                as your viewport background colour, or to blend in with a
+                skydome or skybox.
+            @param
+                expDensity The density of the fog in FOG_EXP or FOG_EXP2
+                mode, as a value between 0 and 1. The default is 0.001. 
+            @param
+                linearStart Distance in world units at which linear fog starts to
+                encroach. Only applicable if mode is
+                FOG_LINEAR.
+            @param
+                linearEnd Distance in world units at which linear fog becomes completely
+                opaque. Only applicable if mode is
+                FOG_LINEAR.
+        */
+        void setFog(
+            FogMode mode = FOG_NONE, const ColourValue& colour = ColourValue::White,
+            Real expDensity = 0.001, Real linearStart = 0.0, Real linearEnd = 1.0);
+
+        /** Returns the fog mode for the scene.
+        */
+        virtual FogMode getFogMode(void) const;
+
+        /** Returns the fog colour for the scene.
+        */
+        virtual const ColourValue& getFogColour(void) const;
+
+        /** Returns the fog start distance for the scene.
+        */
+        virtual Real getFogStart(void) const;
+
+        /** Returns the fog end distance for the scene.
+        */
+        virtual Real getFogEnd(void) const;
+
+        /** Returns the fog density for the scene.
+        */
+        virtual Real getFogDensity(void) const;
+
+
+        /** Creates a new BillboardSet for use with this scene manager.
+            @remarks
+                This method creates a new BillboardSet which is registered with
+                the SceneManager. The SceneManager will destroy this object when
+                it shuts down or when the SceneManager::clearScene method is
+                called, so the caller does not have to worry about destroying
+                this object (in fact, it definitely should not do this).
+            @par
+                See the BillboardSet documentations for full details of the
+                returned class.
+            @param
+                name The name to give to this billboard set. Must be unique.
+            @param
+                poolSize The initial size of the pool of billboards (see BillboardSet for more information)
+            @see
+                BillboardSet
+        */
+        virtual BillboardSet* createBillboardSet(const String& name, unsigned int poolSize = 20);
+
+        /** Retrieves a pointer to the named BillboardSet.
+        */
+        virtual BillboardSet* getBillboardSet(const String& name);
+
+        /** Removes & destroys an BillboardSet from the SceneManager.
+            @warning
+                Must only be done if the BillboardSet is not attached
+                to a SceneNode. It may be safer to wait to clear the whole
+                scene. If you are unsure, use clearScene.
+        */
+        virtual void removeBillboardSet(BillboardSet* set);
+
+        /** Removes & destroys an BillboardSet from the SceneManager by name.
+            @warning
+                Must only be done if the BillboardSet is not attached
+                to a SceneNode. It may be safer to wait to clear the whole
+                scene. If you are unsure, use clearScene.
+        */
+        virtual void removeBillboardSet(const String& name);
+
+        /** Removes & destroys all BillboardSets.
+        @warning
+        Again, use caution since no BillboardSet must be referred to
+        elsewhere e.g. attached to a SceneNode otherwise a crash
+        is likely. Use clearScene if you are unsure (it clears SceneNode
+        entries too.)
+        @see
+        SceneManager::clearScene
+        */
+        virtual void removeAllBillboardSets(void);
+
+        /** Tells the SceneManager whether it should render the SceneNodes which 
+            make up the scene as well as the objects in the scene.
+        @remarks
+            This method is mainly for debugging purposes. If you set this to 'true',
+            each node will be rendered as a set of 3 axes to allow you to easily see
+            the orientation of the nodes.
+        */
+        virtual void setDisplaySceneNodes(bool display);
+
+        /** Creates an animation which can be used to animate scene nodes.
+        @remarks
+            An animation is a collection of 'tracks' which over time change the position / orientation
+            of Node objects. In this case, the animation will likely have tracks to modify the position
+            / orientation of SceneNode objects, e.g. to make objects move along a path.
+        @par
+            You don't need to use an Animation object to move objects around - you can do it yourself
+            using the methods of the Node in your FrameListener class. However, when you need relatively
+            complex scripted animation, this is the class to use since it will interpolate between
+            keyframes for you and generally make the whole process easier to manage.
+        @par
+            A single animation can affect multiple Node objects (each AnimationTrack affects a single Node).
+            In addition, through animation blending a single Node can be affected by multiple animations,
+            athough this is more useful when performing skeletal animation (see Skeleton::createAnimation).
+        @par
+            Note that whilst it uses the same classes, the animations created here are kept separate from the
+            skeletal animations of meshes (each Skeleton owns those animations).
+        @param name The name of the animation, must be unique within this SceneManager.
+        @param length The total length of the animation.
+        */
+        virtual Animation* createAnimation(const String& name, Real length);
+
+        /** Looks up an Animation object previously created with createAnimation. */
+        virtual Animation* getAnimation(const String& name) const;
+
+        /** Destroys an Animation. 
+        @remarks
+            You should ensure that none of your code is referencing this animation objects since the 
+            memory will be freed.
+        */
+        virtual void destroyAnimation(const String& name);
+
+        /** Removes all animations created using this SceneManager. */
+        virtual void destroyAllAnimations(void);
+
+        /** Create an AnimationState object for managing application of animations.
+        @remarks
+            You can create Animation objects for animating SceneNode obejcts using the
+            createAnimation method. However, in order to actually apply those animations
+            you have to call methods on Node and Animation in a particular order (namely
+            Node::resetToInitialState and Animation::apply). To make this easier and to
+            help track the current time position of animations, the AnimationState object
+            is provided. </p>
+            So if you don't want to control animation application manually, call this method,
+            update the returned object as you like every frame and let SceneManager apply 
+            the animation state for you.
+        @par
+            Remember, AnimationState objects are disabled by default at creation time. 
+            Turn them on when you want them using their setEnabled method.
+        @par
+            Note that any SceneNode affected by this automatic animation will have it's state
+            reset to it's initial position before application of the animation. Unless specifically
+            modified using Node::setInitialState the Node assumes it's initial state is at the
+            origin. If you want the base state of the SceneNode to be elsewhere, make your changes
+            to the node using the standard transform methods, then call setInitialState to 
+            'bake' this reference position into the node.
+        @param animName The name of an animation created already with createAnimation.
+        */
+        virtual AnimationState* createAnimationState(const String& animName);
+
+        /** Retrieves animation state as previously created using createAnimationState */
+        virtual AnimationState* getAnimationState(const String& animName);
+
+        /** Destroys an AnimationState. 
+        @remarks
+            You should ensure that none of your code is referencing this animation 
+            state object since the memory will be freed.
+        */
+        virtual void destroyAnimationState(const String& name);
+
+        /** Removes all animation states created using this SceneManager. */
+        virtual void destroyAllAnimationStates(void);
+
+        /** Manual rendering method, for advanced users only.
+        @remarks
+            This method allows you to send rendering commands through the pipeline on
+            demand, bypassing OGRE's normal world processing. You should only use this if you
+            really know what you're doing; OGRE does lots of things for you that you really should
+            let it do. However, there are times where it may be useful to have this manual interface,
+            for example overlaying something on top of the scene rendered by OGRE.
+        @par
+            Because this is an instant rendering method, timing is important. The best 
+            time to call it is from a RenderTargetListener event handler.
+        @par
+            Don't call this method a lot, it's designed for rare (1 or 2 times per frame) use. 
+            Calling it regularly per frame will cause frame rate drops!
+        @param rend A RenderOperation object describing the rendering op
+        @param pass The Pass to use for this render
+        @param vp Pointer to the viewport to render to
+        @param worldMatrix The transform to apply from object to world space
+        @param viewMatrix The transform to apply from world to view space
+        @param projMatrix The transform to apply from view to screen space
+        @param doBeginEndFrame If true, beginFrame() and endFrame() are called, 
+            otherwise not. You should leave this as false if you are calling
+            this within the main render loop.
+        */
+        virtual void manualRender(RenderOperation* rend, Pass* pass, Viewport* vp, 
+            const Matrix4& worldMatrix, const Matrix4& viewMatrix, const Matrix4& projMatrix, 
+            bool doBeginEndFrame = false) ;
+
+        /** Retrieves the internal render queue, for advanced users only.
+        @remarks
+            The render queue is mainly used internally to manage the scene object 
+			rendering queue, it also exports some methods to allow advanced users 
+			to configure the behavior of rendering process.
+            Most methods provided by RenderQueue are supposed to be used 
+			internally only, you should reference to the RenderQueue API for 
+			more information. Do not access this directly unless you know what 
+			you are doing.
+        */
+        virtual RenderQueue* getRenderQueue(void);
+
+        /** Registers a new RenderQueueListener which will be notified when render queues
+            are processed.
+        */
+        virtual void addRenderQueueListener(RenderQueueListener* newListener);
+
+        /** Removes a listener previously added with addRenderQueueListener. */
+        virtual void removeRenderQueueListener(RenderQueueListener* delListener);
+
+		/** Adds an item to the 'special case' render queue list.
+		@remarks
+			Normally all render queues are rendered, in their usual sequence, 
+			only varying if a RenderQueueListener nominates for the queue to be 
+			repeated or skipped. This method allows you to add a render queue to 
+			a 'special case' list, which varies the behaviour. The effect of this
+			list depends on the 'mode' in which this list is in, which might be
+			to exclude these render queues, or to include them alone (excluding
+			all other queues). This allows you to perform broad selective
+			rendering without requiring a RenderQueueListener.
+		@param qid The identifier of the queue which should be added to the
+			special case list. Nothing happens if the queue is already in the list.
+		*/
+		virtual void addSpecialCaseRenderQueue(RenderQueueGroupID qid);
+		/** Removes an item to the 'special case' render queue list.
+		@see SceneManager::addSpecialCaseRenderQueue
+		@param qid The identifier of the queue which should be removed from the
+			special case list. Nothing happens if the queue is not in the list.
+		*/
+		virtual void removeSpecialCaseRenderQueue(RenderQueueGroupID qid);
+		/** Clears the 'special case' render queue list.
+		@see SceneManager::addSpecialCaseRenderQueue
+		*/
+		virtual void clearSpecialCaseRenderQueues(void);
+		/** Sets the way the special case render queue list is processed.
+		@see SceneManager::addSpecialCaseRenderQueue
+		@param mode The mode of processing
+		*/
+		virtual void setSpecialCaseRenderQueueMode(SpecialCaseRenderQueueMode mode);
+		/** Gets the way the special case render queue list is processed. */
+		virtual SpecialCaseRenderQueueMode getSpecialCaseRenderQueueMode(void);
+		/** Returns whether or not the named queue will be rendered based on the
+			current 'special case' render queue list and mode.
+		@see SceneManager::addSpecialCaseRenderQueue
+		@param qid The identifier of the queue which should be tested
+		@returns true if the queue will be rendered, false otherwise
+		*/
+		virtual bool isRenderQueueToBeProcessed(RenderQueueGroupID qid);
+
+		/** Sets the render queue that the world geometry (if any) this SceneManager
+			renders will be associated with.
+		@remarks
+			SceneManagers which provide 'world geometry' should place it in a 
+			specialised render queue in order to make it possible to enable / 
+			disable it easily using the addSpecialCaseRenderQueue method. Even 
+			if the SceneManager does not use the render queues to render the 
+			world geometry, it should still pick a queue to represent it's manual
+			rendering, and check isRenderQueueToBeProcessed before rendering.
+		@note
+			Setting this may not affect the actual ordering of rendering the
+			world geometry, if the world geometry is being rendered manually
+			by the SceneManager. If the SceneManager feeds world geometry into
+			the queues, however, the ordering will be affected. 
+		*/
+		virtual void setWorldGeometryRenderQueue(RenderQueueGroupID qid);
+		/** Gets the render queue that the world geometry (if any) this SceneManager
+			renders will be associated with.
+		@remarks
+			SceneManagers which provide 'world geometry' should place it in a 
+			specialised render queue in order to make it possible to enable / 
+			disable it easily using the addSpecialCaseRenderQueue method. Even 
+			if the SceneManager does not use the render queues to render the 
+			world geometry, it should still pick a queue to represent it's manual
+			rendering, and check isRenderQueueToBeProcessed before rendering.
+		*/
+		virtual RenderQueueGroupID getWorldGeometryRenderQueue(void);
+
+		/** Allows all bounding boxes of scene nodes to be displayed. */
+		virtual void showBoundingBoxes(bool bShow);
+
+		/** Returns if all bounding boxes of scene nodes are to be displayed */
+		virtual bool getShowBoundingBoxes() const;
+
+        /** Internal method for notifying the manager that a SceneNode is autotracking. */
+        virtual void _notifyAutotrackingSceneNode(SceneNode* node, bool autoTrack);
+
+        
+        /** Creates an AxisAlignedBoxSceneQuery for this scene manager. 
+        @remarks
+            This method creates a new instance of a query object for this scene manager, 
+            for an axis aligned box region. See SceneQuery and AxisAlignedBoxSceneQuery 
+            for full details.
+        @par
+            The instance returned from this method must be destroyed by calling
+            SceneManager::destroyQuery when it is no longer required.
+        @param box Details of the box which describes the region for this query.
+        @param mask The query mask to apply to this query; can be used to filter out
+            certain objects; see SceneQuery for details.
+        */
+        virtual AxisAlignedBoxSceneQuery* 
+            createAABBQuery(const AxisAlignedBox& box, unsigned long mask = 0xFFFFFFFF);
+        /** Creates a SphereSceneQuery for this scene manager. 
+        @remarks
+            This method creates a new instance of a query object for this scene manager, 
+            for a spherical region. See SceneQuery and SphereSceneQuery 
+            for full details.
+        @par
+            The instance returned from this method must be destroyed by calling
+            SceneManager::destroyQuery when it is no longer required.
+        @param sphere Details of the sphere which describes the region for this query.
+        @param mask The query mask to apply to this query; can be used to filter out
+            certain objects; see SceneQuery for details.
+        */
+        virtual SphereSceneQuery* 
+            createSphereQuery(const Sphere& sphere, unsigned long mask = 0xFFFFFFFF);
+        /** Creates a PlaneBoundedVolumeListSceneQuery for this scene manager. 
+        @remarks
+        This method creates a new instance of a query object for this scene manager, 
+        for a region enclosed by a set of planes (normals pointing inwards). 
+        See SceneQuery and PlaneBoundedVolumeListSceneQuery for full details.
+        @par
+        The instance returned from this method must be destroyed by calling
+        SceneManager::destroyQuery when it is no longer required.
+        @param volumes Details of the volumes which describe the region for this query.
+        @param mask The query mask to apply to this query; can be used to filter out
+        certain objects; see SceneQuery for details.
+        */
+        virtual PlaneBoundedVolumeListSceneQuery* 
+            createPlaneBoundedVolumeQuery(const PlaneBoundedVolumeList& volumes, unsigned long mask = 0xFFFFFFFF);
+
+
+        /** Creates a RaySceneQuery for this scene manager. 
+        @remarks
+            This method creates a new instance of a query object for this scene manager, 
+            looking for objects which fall along a ray. See SceneQuery and RaySceneQuery 
+            for full details.
+        @par
+            The instance returned from this method must be destroyed by calling
+            SceneManager::destroyQuery when it is no longer required.
+        @param ray Details of the ray which describes the region for this query.
+        @param mask The query mask to apply to this query; can be used to filter out
+            certain objects; see SceneQuery for details.
+        */
+        virtual RaySceneQuery* 
+            createRayQuery(const Ray& ray, unsigned long mask = 0xFFFFFFFF);
+        //PyramidSceneQuery* createPyramidQuery(const Pyramid& p, unsigned long mask = 0xFFFFFFFF);
+        /** Creates an IntersectionSceneQuery for this scene manager. 
+        @remarks
+            This method creates a new instance of a query object for locating
+            intersecting objects. See SceneQuery and IntersectionSceneQuery
+            for full details.
+        @par
+            The instance returned from this method must be destroyed by calling
+            SceneManager::destroyQuery when it is no longer required.
+        @param mask The query mask to apply to this query; can be used to filter out
+            certain objects; see SceneQuery for details.
+        */
+        virtual IntersectionSceneQuery* 
+            createIntersectionQuery(unsigned long mask = 0xFFFFFFFF);
+
+        /** Destroys a scene query of any type. */
+        virtual void destroyQuery(SceneQuery* query);
+
+        typedef MapIterator<SceneLightList> LightIterator;
+        typedef MapIterator<EntityList> EntityIterator;
+        typedef MapIterator<CameraList> CameraIterator;
+        typedef MapIterator<BillboardSetList> BillboardSetIterator;
+        typedef MapIterator<AnimationList> AnimationIterator;
+
+        /** Returns a specialised MapIterator over all lights in the scene. */
+        LightIterator getLightIterator(void) {
+            return LightIterator(mLights.begin(), mLights.end());
+        }
+        /** Returns a specialised MapIterator over all entities in the scene. */
+        EntityIterator getEntityIterator(void) {
+            return EntityIterator(mEntities.begin(), mEntities.end());
+        }
+        /** Returns a specialised MapIterator over all cameras in the scene. */
+        CameraIterator getCameraIterator(void) {
+            return CameraIterator(mCameras.begin(), mCameras.end());
+        }
+        /** Returns a specialised MapIterator over all BillboardSets in the scene. */
+        BillboardSetIterator getBillboardSetIterator(void) {
+            return BillboardSetIterator(mBillboardSets.begin(), mBillboardSets.end());
+        }
+        /** Returns a specialised MapIterator over all animations in the scene. */
+        AnimationIterator getAnimationIterator(void) {
+            return AnimationIterator(mAnimationsList.begin(), mAnimationsList.end());
+        }
+        /** Returns a specialised MapIterator over all animation states in the scene. */
+        AnimationStateIterator getAnimationStateIterator(void) {
+            return AnimationStateIterator(mAnimationStates.begin(), mAnimationStates.end());
+        }
+
+        /** Sets the general shadow technique to be used in this scene.
+        @remarks   
+            There are multiple ways to generate shadows in a scene, and each has 
+            strengths and weaknesses. 
+            <ul><li>Stencil-based approaches can be used to 
+            draw very long, extreme shadows without loss of precision and the 'additive'
+            version can correctly show the shadowing of complex effects like bump mapping
+            because they physically exclude the light from those areas. However, the edges
+            are very sharp and stencils cannot handle transparency, and they involve a 
+            fair amount of CPU work in order to calculate the shadow volumes, especially
+            when animated objects are involved.</li>
+            <li>Texture-based approaches are good for handling transparency (they can, for
+            example, correctly shadow a mesh which uses alpha to represent holes), and they
+            require little CPU overhead, and can happily shadow geometry which is deformed
+            by a vertex program, unlike stencil shadows. However, they have a fixed precision 
+            which can introduce 'jaggies' at long range and have fillrate issues of their own.</li>
+            </ul>
+        @par
+            We support 2 kinds of stencil shadows, and 2 kinds of texture-based shadows, and one
+            simple decal approach. The 2 stencil approaches differ in the amount of multipass work 
+            that is required - the modulative approach simply 'darkens' areas in shadow after the 
+            main render, which is the least expensive, whilst the additive approach has to perform 
+            a render per light and adds the cumulative effect, whcih is more expensive but more 
+            accurate. The texture based shadows both work in roughly the same way, the only difference is
+            that the shadowmap approach is slightly more accurate, but requires a more recent
+            graphics card.
+        @par
+            Note that because mixing many shadow techniques can cause problems, only one technique
+            is supported at once. Also, you should call this method at the start of the 
+            scene setup. 
+        @param technique The shadowing technique to use for the scene.
+        */
+        virtual void setShadowTechnique(ShadowTechnique technique);
+        
+        /** Gets the current shadow technique. */
+        virtual ShadowTechnique getShadowTechnique(void) const { return mShadowTechnique; }
+
+        /** Enables / disables the rendering of debug information for shadows. */
+        virtual void setShowDebugShadows(bool debug) { mDebugShadows = debug; }
+        /** Are debug shadows shown? */
+        virtual bool getShowDebugShadows(void ) const { return mDebugShadows; }
+
+        /** Set the colour used to modulate areas in shadow. 
+        @remarks This is only applicable for shadow techniques which involve 
+            darkening the area in shadow, as opposed to masking out the light. 
+            This colour provided is used as a modulative value to darken the
+            areas.
+        */
+        virtual void setShadowColour(const ColourValue& colour);
+        /** Get the colour used to modulate areas in shadow. 
+        @remarks This is only applicable for shadow techniques which involve 
+        darkening the area in shadow, as opposed to masking out the light. 
+        This colour provided is used as a modulative value to darken the
+        areas.
+        */
+        virtual const ColourValue& getShadowColour(void) const;
+        /** Sets the distance a shadow volume is extruded for a directional light.
+        @remarks
+            Although directional lights are essentially infinite, there are many
+            reasons to limit the shadow extrusion distance to a finite number, 
+            not least of which is compatibility with older cards (which do not
+            support infinite positions), and shadow caster elimination.
+        @par
+            The default value is 10,000 world units. This does not apply to
+            point lights or spotlights, since they extrude up to their 
+            attenuation range.
+        */
+        virtual void setShadowDirectionalLightExtrusionDistance(Real dist); 
+        /** Gets the distance a shadow volume is extruded for a directional light.
+        */
+        virtual Real getShadowDirectionalLightExtrusionDistance(void) const;
+        /** Sets the maximum distance away from the camera that shadows
+        will be visible.
+        @remarks
+        Shadow techniques can be expensive, therefore it is a good idea
+        to limit them to being rendered close to the camera if possible,
+        and to skip the expense of rendering shadows for distance objects.
+        This method allows you to set the distance at which shadows will no
+        longer be rendered.
+        @note
+        Each shadow technique can interpret this subtely differently.
+        For example, one technique may use this to eliminate casters,
+        another might use it to attenuate the shadows themselves.
+        You should tweak this value to suit your chosen shadow technique
+        and scene setup.
+        */
+        virtual void setShadowFarDistance(Real distance);
+        /** Gets the maximum distance away from the camera that shadows
+        will be visible.
+        */
+        virtual Real getShadowFarDistance(void) const
+        { return mShadowFarDist; }
+
+		/** Sets the maximum size of the index buffer used to render shadow
+		 	primitives.
+		@remarks
+			This method allows you to tweak the size of the index buffer used
+			to render shadow primitives (including stencil shadow volumes). The
+			default size is 51,200 entries, which is 100k of GPU memory, or
+			enough to render approximately 17,000 triangles. You can reduce this
+			as long as you do not have any models / world geometry chunks which 
+			could require more than the amount you set.
+		@par
+			The maximum number of triangles required to render a single shadow 
+			volume (including light and dark caps when needed) will be 3x the 
+			number of edges on the light silhouette, plus the number of 
+			light-facing triangles.	On average, half the 
+			triangles will be facing toward the light, but the number of 
+			triangles in the silhouette entirely depends on the mesh - 
+			angular meshes will have a higher silhouette tris/mesh tris
+			ratio than a smooth mesh. You can estimate the requirements for
+			your particular mesh by rendering it alone in a scene with shadows
+			enabled and a single light - rotate it or the light and make a note
+			of how high the triangle count goes (remembering to subtract the 
+			mesh triangle count)
+		@param size The number of indexes; divide this by 3 to determine the
+			number of triangles.
+		*/
+		virtual void setShadowIndexBufferSize(size_t size);
+        /// Get the size of the shadow index buffer
+		virtual size_t getShadowIndexBufferSize(void) const
+		{ return mShadowIndexBufferSize; }
+        /** Set the size of the texture used for texture-based shadows.
+        @remarks
+            The larger the shadow texture, the better the detail on 
+            texture based shadows, but obviously this takes more memory.
+            The default size is 512. Sizes must be a power of 2.
+        */
+        virtual void setShadowTextureSize(unsigned short size);
+        /// Get the size of the texture used for texture based shadows
+        unsigned short getShadowTextureSize(void) const {return mShadowTextureSize; }
+        /** Set the pixel format of the textures used for texture-based shadows.
+        @remarks
+			By default, a colour texture is used (PF_X8R8G8B8) for texture shadows,
+			but if you want to use more advanced texture shadow types you can 
+			alter this. If you do, you will have to also call
+			setShadowTextureCasterMaterial and setShadowTextureReceiverMaterial
+			to provide shader-based materials to use these customised shadow
+			texture formats.
+        */
+        virtual void setShadowTexturePixelFormat(PixelFormat fmt);
+        /// Get the format of the textures used for texture based shadows
+        PixelFormat getShadowTexturePixelFormat(void) const {return mShadowTextureFormat; }
+        /** Set the number of textures allocated for texture-based shadows.
+        @remarks
+            The default number of textures assigned to deal with texture based
+            shadows is 1; however this means you can only have one light casting
+            shadows at the same time. You can increase this number in order to 
+            make this more flexible, but be aware of the texture memory it will use.
+        */
+        virtual void setShadowTextureCount(unsigned short count);
+        /// Get the number of the textures allocated for texture based shadows
+        unsigned short getShadowTextureCount(void) const {return mShadowTextureCount; }
+        /** Sets the size and count of textures used in texture-based shadows. 
+        @remarks
+            @see setShadowTextureSize and setShadowTextureCount for details, this
+            method just allows you to change both at once, which can save on 
+            reallocation if the textures have already been created.
+        */
+        virtual void setShadowTextureSettings(unsigned short size, unsigned short count, 
+			PixelFormat fmt = PF_X8R8G8B8);
+        /** Sets the proportional distance which a texture shadow which is generated from a
+            directional light will be offset into the camera view to make best use of texture space.
+        @remarks
+            When generating a shadow texture from a directional light, an approximation is used
+            since it is not possible to render the entire scene to one texture. 
+            The texture is projected onto an area centred on the camera, and is
+            the shadow far distance * 2 in length (it is square). This wastes
+            a lot of texture space outside the frustum though, so this offset allows
+            you to move the texture in front of the camera more. However, be aware
+            that this can cause a little shadow 'jittering' during rotation, and
+            that if you move it too far then you'll start to get artefacts close 
+            to the camera. The value is represented as a proportion of the shadow
+            far distance, and the default is 0.6.
+        */
+        virtual void setShadowDirLightTextureOffset(Real offset) { mShadowTextureOffset = offset;}
+        /** Sets the proportional distance at which texture shadows begin to fade out.
+        @remarks
+            To hide the edges where texture shadows end (in directional lights)
+            Ogre will fade out the shadow in the distance. This value is a proportional
+            distance of the entire shadow visibility distance at which the shadow
+            begins to fade out. The default is 0.7
+        */
+        virtual void setShadowTextureFadeStart(Real fadeStart) 
+        { mShadowTextureFadeStart = fadeStart; }
+        /** Sets the proportional distance at which texture shadows finish to fading out.
+        @remarks
+        To hide the edges where texture shadows end (in directional lights)
+        Ogre will fade out the shadow in the distance. This value is a proportional
+        distance of the entire shadow visibility distance at which the shadow
+        is completely invisible. The default is 0.9.
+        */
+        virtual void setShadowTextureFadeEnd(Real fadeEnd) 
+        { mShadowTextureFadeEnd = fadeEnd; }
+
+		/** Sets whether or not texture shadows should attempt to self-shadow.
+		@remarks
+			The default implementation of texture shadows uses a fixed-function 
+			colour texture projection approach for maximum compatibility, and 
+			as such cannot support self-shadowing. However, if you decide to 
+			implement a more complex shadowing technique using the 
+			setShadowTextureCasterMaterial and setShadowTextureReceiverMaterial 
+			there is a possibility you may be able to support 
+			self-shadowing (e.g by implementing a shader-based shadow map). In 
+			this case you might want to enable this option.
+		@param selfShadow Whether to attempt self-shadowing with texture shadows
+		*/
+		virtual void setShadowTextureSelfShadow(bool selfShadow) 
+		{ mShadowTextureSelfShadow = selfShadow; }
+		/// Gets whether or not texture shadows attempt to self-shadow.
+		virtual bool getShadowTextureSelfShadow(void) const 
+		{ return mShadowTextureSelfShadow; }
+		/** Sets the default material to use for rendering shadow casters.
+		@remarks
+			By default shadow casters are rendered into the shadow texture using
+			an automatically generated fixed-function pass. This allows basic
+			projective texture shadows, but it's possible to use more advanced
+			shadow techniques by overriding the caster and receiver materials, for
+			example providing vertex and fragment programs to implement shadow
+			maps.
+		@par
+			You can rely on the ambient light in the scene being set to the 
+			requested texture shadow colour, if that's useful. 
+		@note
+			Individual objects may also override the vertex program in
+			your default material if their materials include 
+			shadow_caster_vertex_program_ref shadow_receiver_vertex_program_ref
+			entries, so if you use both make sure they are compatible.
+		@note
+			Only a single pass is allowed in your material, although multiple
+			techniques may be used for hardware fallback.
+		*/
+		virtual void setShadowTextureCasterMaterial(const String& name);
+		/** Sets the default material to use for rendering shadow receivers.
+		@remarks
+			By default shadow receivers are rendered as a post-pass using basic
+			modulation. This allows basic projective texture shadows, but it's 
+			possible to use more advanced shadow techniques by overriding the 
+			caster and receiver materials, for example providing vertex and 
+			fragment programs to implement shadow maps.
+		@par
+			You can rely on texture unit 0 containing the shadow texture, and 
+			for the unit to be set to use projective texturing from the light 
+			(only useful if you're using fixed-function, which is unlikely; 
+			otherwise you should rely on the texture_viewproj_matrix auto binding)
+		@note
+			Individual objects may also override the vertex program in
+			your default material if their materials include 
+			shadow_caster_vertex_program_ref shadow_receiver_vertex_program_ref
+			entries, so if you use both make sure they are compatible.
+		@note
+			Only a single pass is allowed in your material, although multiple
+			techniques may be used for hardware fallback.
+		*/
+		virtual void setShadowTextureReceiverMaterial(const String& name);
+
+		/** Sets whether we should use an inifinite camera far plane
+			when rendering stencil shadows.
+		@remarks
+			Stencil shadow coherency is very reliant on the shadow volume
+			not being clipped by the far plane. If this clipping happens, you
+			get a kind of 'negative' shadow effect. The best way to achieve
+			coherency is to move the far plane of the camera out to infinity,
+			thus preventing the far plane from clipping the shadow volumes.
+			When combined with vertex program extrusion of the volume to 
+			infinity, which	Ogre does when available, this results in very
+			robust shadow volumes. For this reason, when you enable stencil 
+			shadows, Ogre automatically changes your camera settings to 
+			project to infinity if the card supports it. You can disable this
+			behaviour if you like by calling this method; although you can 
+			never enable infinite projection if the card does not support it.
+		@par	
+			If you disable infinite projection, or it is not available, 
+			you need to be far more careful with your light attenuation /
+			directional light extrusion distances to avoid clipping artefacts
+			at the far plane.
+		@note
+			Recent cards will generally support infinite far plane projection.
+			However, we have found some cases where they do not, especially
+			on Direct3D. There is no standard capability we can check to 
+			validate this, so we use some heuristics based on experience:
+			<UL>
+			<LI>OpenGL always seems to support it no matter what the card</LI>
+			<LI>Direct3D on non-vertex program capable systems (including 
+			vertex program capable cards on Direct3D7) does not
+			support it</LI>
+			<LI>Direct3D on GeForce3 and GeForce4 Ti does not seem to support
+			infinite projection<LI>
+			</UL>
+			Therefore in the RenderSystem implementation, we may veto the use
+			of an infinite far plane based on these heuristics. 
+		*/
+        virtual void setShadowUseInfiniteFarPlane(bool enable) {
+            mShadowUseInfiniteFarPlane = enable; }
+
+		/** Creates a StaticGeometry instance suitable for use with this
+			SceneManager.
+		@remarks
+			StaticGeometry is a way of batching up geometry into a more 
+			efficient form at the expense of being able to move it. Please 
+			read the StaticGeometry class documentation for full information.
+		@param name The name to give the new object
+		@returns The new StaticGeometry instance
+		*/
+		virtual StaticGeometry* createStaticGeometry(const String& name);
+		/** Retrieve a previously created StaticGeometry instance. */
+		virtual StaticGeometry* getStaticGeometry(const String& name) const;
+		/** Remove & destroy a StaticGeometry instance. */
+		virtual void removeStaticGeometry(StaticGeometry* geom);
+		/** Remove & destroy a StaticGeometry instance. */
+		virtual void removeStaticGeometry(const String& name);
+		/** Remove & destroy all StaticGeometry instances. */
+		virtual void removeAllStaticGeometry(void);
+
+		
+    };
+
+    /** Default implementation of IntersectionSceneQuery. */
+    class _OgreExport DefaultIntersectionSceneQuery : 
+        public IntersectionSceneQuery
+    {
+    public:
+        DefaultIntersectionSceneQuery(SceneManager* creator);
+        ~DefaultIntersectionSceneQuery();
+
+        /** See IntersectionSceneQuery. */
+        void execute(IntersectionSceneQueryListener* listener);
+    };
+
+    /** Default implementation of RaySceneQuery. */
+	class _OgreExport DefaultRaySceneQuery : public RaySceneQuery
+    {
+    public:
+        DefaultRaySceneQuery(SceneManager* creator);
+        ~DefaultRaySceneQuery();
+
+        /** See RayScenQuery. */
+        void execute(RaySceneQueryListener* listener);
+    };
+    /** Default implementation of SphereSceneQuery. */
+	class _OgreExport DefaultSphereSceneQuery : public SphereSceneQuery
+    {
+    public:
+        DefaultSphereSceneQuery(SceneManager* creator);
+        ~DefaultSphereSceneQuery();
+
+        /** See SceneQuery. */
+        void execute(SceneQueryListener* listener);
+    };
+    /** Default implementation of PlaneBoundedVolumeListSceneQuery. */
+    class _OgreExport DefaultPlaneBoundedVolumeListSceneQuery : public PlaneBoundedVolumeListSceneQuery
+    {
+    public:
+        DefaultPlaneBoundedVolumeListSceneQuery(SceneManager* creator);
+        ~DefaultPlaneBoundedVolumeListSceneQuery();
+
+        /** See SceneQuery. */
+        void execute(SceneQueryListener* listener);
+    };
+    /** Default implementation of AxisAlignedBoxSceneQuery. */
+	class _OgreExport DefaultAxisAlignedBoxSceneQuery : public AxisAlignedBoxSceneQuery
+    {
+    public:
+        DefaultAxisAlignedBoxSceneQuery(SceneManager* creator);
+        ~DefaultAxisAlignedBoxSceneQuery();
+
+        /** See RayScenQuery. */
+        void execute(SceneQueryListener* listener);
+    };
+    
+
+
+} // Namespace
+
+
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIFontManager_implData.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIFontManager_implData.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIFontManager_implData.h	(revision 1092)
@@ -0,0 +1,45 @@
+/************************************************************************
+	filename: 	CEGUIFontManager_implData.h
+	created:	23/6/2004
+	author:		Paul D Turner
+	
+	purpose:	Implementation data for FontManager to break 
+				dependency on FreeType2 for clients
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIFontManager_implData_h_
+#define _CEGUIFontManager_implData_h_
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+struct FontManager::FontManagerImplData
+{
+	FT_Library		d_ftlib;		//!< FreeType library;
+};
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIFontManager_implData_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIRenderableElement.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIRenderableElement.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIRenderableElement.h	(revision 1092)
@@ -0,0 +1,287 @@
+/************************************************************************
+	filename: 	CEGUIRenderableElement.h
+	created:	14/4/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface for base class of a 'higher-level' renderable
+				UI entity.
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIRenderableElement_h_
+#define _CEGUIRenderableElement_h_
+
+#include "CEGUIBase.h"
+#include "CEGUISystem.h"
+#include "CEGUIColourRect.h"
+#include "CEGUIVector.h"
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+
+*/
+class CEGUIEXPORT RenderableElement
+{
+public:
+	/*************************************************************************
+		Drawing methods
+	*************************************************************************/
+	/*!
+	\brief
+		Draw the element chain starting with this element.
+
+	\param position
+		Vector3 object describing the base position to be used when rendering the element chain.  Each element
+		in the chain will be offset from this position by it's own internal position setting.
+
+	\param clip_rect
+		Rect object describing the clipping area.  No rendering will appear outside this area.
+	*/
+	void	draw(const Vector3& position, const Rect& clip_rect);
+
+
+	/*************************************************************************
+		Accessors
+	*************************************************************************/
+	/*!
+	\brief
+		Return a pointer to the next RenderableElement in the chain.
+
+	\return
+		Pointer to a RenderableElement object that is linked this this one.  May be NULL for none.
+	*/
+	RenderableElement*	getNextElement(void) const			{return d_next;}
+
+
+	/*!
+	\brief
+		Return the rendering colours set for this RenderableElement
+
+	\return
+		ColourRect object describing the colours to be used when rendering this RenderableElement.
+	*/
+	const ColourRect&	getColours(void) const						{return d_colours;}
+
+
+	/*!
+	\brief
+		Return the offset position of this RenderableElement.
+
+	\return
+		Point object describing the offset position that this RenderableElement is to be rendered at.  This
+		value is added to whatever position is specified when the RenderableElement::draw method is called to
+		obtain the final rendering position.
+	*/
+	Point	getPosition(void) const							{return Point(d_area.d_left, d_area.d_top);}
+
+
+	/*!
+	\brief
+		Return the current size of the element.
+
+	\return
+		Size object describing the current size of the RenderableFrame.
+	*/
+	Size	getSize(void) const				{return Size(d_area.getWidth(), d_area.getHeight());}
+
+
+	/*!
+	\brief
+		Return the area for the element.
+
+	\return
+		Rect object describing the pixel area (offset from some unknown location) of the frame.
+	*/
+	const Rect&	getRect(void) const				{return d_area;}
+
+
+	/*!
+	\brief
+		return whether the element colours will be applied locally to each image drawn as part of the RenderableElement, or
+		applied across the whole of the RenderableElement area.
+
+	\return
+		- true if the RenderableElement colours will be applied locally to each sub-image drawn as part of this RenderableElement.
+		- false if the RenderableElement colours will be applied evenly across the face of the entire RenderableElement.
+	*/
+	bool	isColourRectPerImage(bool setting) const		{return d_useColoursPerImage;}
+
+
+	/*************************************************************************
+		Manipulators
+	*************************************************************************/
+	/*!
+	\brief
+	Link another RenderableElement to this one.
+
+	The linked element will be drawn whenever this element is drawn using the same base position and clipping area
+	as provided when the RenderableElement::draw method is called.  Whole chains of Renderable Elements can be
+	created using this system.
+
+	\param element
+		Pointer to a RenderableElement object that will be linked to this element.
+
+	\return
+		Nothing.
+	*/
+	void	setNextElement(RenderableElement* element)		{d_next = element;}
+
+
+	/*!
+	\brief
+		Sets the colours to be applied when rendering the element.
+
+	\param colours
+		ColourRect object describing the colours to be used.
+
+	\return 
+		Nothing.
+	*/
+	void	setColours(const ColourRect& colours)			{d_colours = colours;}
+
+
+	/*!
+	\brief
+		Sets the colours to be applied when rendering the element.
+
+	\param top_left_colour
+		Colour to be applied to the top-left corner of each Image used in the element.
+
+	\param top_right_colour
+		Colour to be applied to the top-right corner of each Image used in the element.
+
+	\param bottom_left_colour
+		Colour to be applied to the bottom-left corner of each Image used in the element.
+
+	\param bottom_right_colour
+		Colour to be applied to the bottom-right corner of each Image used in the element.
+
+	\return 
+		Nothing.
+	*/
+	void	setColours(const colour& top_left_colour, const colour& top_right_colour, const colour& bottom_left_colour, const colour& bottom_right_colour);
+
+
+	/*!
+	\brief
+		Set the rendering offset position for this element.
+
+	\param position
+		Point object describing the offset position to use for this element.  This value is added to whatever
+		position is specified when the RenderableElement::draw method is called to obtain the final rendering
+		position.
+
+	\return
+		Nothing.
+	*/
+	void	setPosition(const Point& position)				{d_area.setPosition(position);}
+
+
+	/*!
+	\brief
+		set the dimensions for the frame.
+
+	\param size
+		Size object describing the new size for the frame (in pixels)
+	*/
+	void	setSize(const Size& size)		{d_area.setSize(size);}
+
+
+	/*!
+	\brief
+		Set the area for the frame
+
+	\param area
+		Rect object describing the pixel area (offset from some unknown location) of the frame.
+
+	\return
+		None.
+	*/
+	void	setRect(const Rect& area)		{d_area = area;}
+
+
+	/*!
+	\brief
+		set whether the element colours should be applied locally to each image drawn as part of the RenderableElement, or
+		applied across the whole of the RenderableElement area.
+
+	\param setting
+		- true to specify that RenderableElement colours be applied locally to each sub-image drawn as part of this RenderableElement.
+		- false to specify that RenderableElement colours should be applied evenly across the face of the entire RenderableElement.
+
+	\return
+		Nothing.
+	*/
+	void	setColourRectPerImage(bool setting)		{d_useColoursPerImage = setting;}
+
+
+	/*************************************************************************
+		Construction / Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for RenderableElement base class
+	*/
+	RenderableElement(void);
+
+
+
+	/*!
+	\brief
+		Destructor for RenderableElement base class
+	*/
+	virtual ~RenderableElement(void);
+
+
+protected:
+	/*************************************************************************
+		Implementation methods
+	*************************************************************************/
+	/*!
+	\brief
+		This function performs the required rendering for this element.
+
+	\param position
+		Vector3 object describing the final rendering position for the object.
+
+	\param clip_rect
+		Rect object describing the clipping area for the rendering.  No rendering will be performed outside this area.
+
+	\return
+		Nothing.
+	*/
+	virtual void	draw_impl(const Vector3& position, const Rect& clip_rect) const = 0;
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	RenderableElement*	d_next;		//!< Link to another RenderableElement.
+	ColourRect	d_colours;			//!< Colours to be used for this element;
+	Rect		d_area;				//!< Currently defined area for this element.
+	bool		d_useColoursPerImage;	//!< true if d_colours should be applied separately to each Image drawn (false to interpolate across d_area).
+};
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIRenderableElement_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIXMLParser.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIXMLParser.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIXMLParser.h	(revision 1092)
@@ -0,0 +1,127 @@
+/************************************************************************
+    filename:   CEGUIXMLParser.h
+    created:    12/3/2005
+    author:     Paul D Turner
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+ 
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+ 
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+ 
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIXMLParser_h_
+#define _CEGUIXMLParser_h_
+
+#include "CEGUIBase.h"
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+    /*!
+    \brief
+        This is an abstract class that is used by CEGUI to interface with XML parser libraries.
+     */
+    class CEGUIEXPORT XMLParser
+    {
+    public:
+        /*!
+        \brief
+            XMLParser base class constructor.
+         */
+        XMLParser(void);
+
+        /*!
+        \brief
+            XMLParser base class destructor.
+         */
+        virtual ~XMLParser(void);
+
+        /*!
+        \brief
+            Initialises the XMLParser module ready for use.
+
+            Note that this calls the protected abstract method 'initialiseImpl', which should
+            be provided in your implementation to perform any required initialisation.
+
+        \return
+            - true if the module initialised successfully.
+            - false if the module initialisation failed.
+         */
+        bool initialise(void);
+
+        /*!
+        \brief
+            Cleans up the XMLParser module after use.
+
+            Note that this calls the protected abstract method 'cleanupImpl', which should
+            be provided in your implementation to perform any required cleanup.
+
+        \return
+            Nothing.
+         */
+        void cleanup(void);
+
+        /*!
+        \brief
+            abstract method which initiates parsing of an XML file.
+
+        \param handler
+            XMLHandler based object which will process the XML elements.
+
+        \param filename
+            String object holding the filename of the XML file to be parsed.
+
+        \param schemaName
+            String object holding the name of the XML schema file to use for validating the XML.
+            Note that whether this is used or not is dependant upon the XMLParser in use.
+
+        \param resourceGroup
+            String object holding the resource group identifier which will be passed to the
+            ResourceProvider when loading the XML and schema files.
+
+        \return
+            Nothing.
+         */
+        virtual void parseXMLFile(XMLHandler& handler, const String& filename, const String& schemaName, const String& resourceGroup) = 0;
+
+    protected:
+        /*!
+        \brief
+            abstract method which initialises the XMLParser ready for use.
+
+        \return
+            - true if the module initialised successfully.
+            - false if the module initialisation failed.
+         */
+        virtual bool initialiseImpl(void) = 0;
+
+        /*!
+        \brief
+            abstract method which cleans up the XMLParser after use.
+
+        \return
+            Nothing.
+         */
+
+        virtual void cleanupImpl(void) = 0;
+
+    private:
+        bool d_initialised;     //!< true if the parser module has been initialised,
+    };
+
+} // End of  CEGUI namespace section
+
+
+#endif  // end of guard _CEGUIXMLParser_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIGlobalEventSet.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIGlobalEventSet.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIGlobalEventSet.h	(revision 1092)
@@ -0,0 +1,126 @@
+/************************************************************************
+	filename: 	CEGUIGlobalEventSet.h
+	created:	16/1/2005
+	author:		Paul D Turner
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http:www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIGlobalEventSet_h_
+#define _CEGUIGlobalEventSet_h_
+
+#include "CEGUIEventSet.h"
+#include "CEGUISingleton.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+class CEGUIEXPORT GlobalEventSet : public EventSet, public Singleton<GlobalEventSet>
+{
+public:
+	GlobalEventSet();
+	~GlobalEventSet();
+
+
+	/*!
+	\brief
+		Return singleton System object
+
+	\return
+		Singleton System object
+	*/
+	static	GlobalEventSet&	getSingleton(void);
+
+
+	/*!
+	\brief
+		Return pointer to singleton System object
+
+	\return
+		Pointer to singleton System object
+	*/
+	static	GlobalEventSet*	getSingletonPtr(void);
+
+
+	/*!
+	\brief
+		Subscribes the the named Event.
+
+	\note
+		If the named event does not exist it is added.
+
+	\param name
+		String object containing the name of the Event to subscribe to.
+
+	\param subscriber
+		Function or object that is to be subscribed to the Event.
+
+	\return
+		Connection object that can be used to check the status of the Event connection and to disconnect (unsubscribe) from the Event.
+	*/
+	virtual Event::Connection	subscribeEvent(const String& name, Event::Subscriber subscriber);
+
+
+	/*!
+	\brief
+		Subscribes the the specified group of the named Event.
+
+	/note
+		If the named event does not exist it is added.
+
+	\param name
+		String object containing the name of the Event to subscribe to.
+
+	\param group
+		Group which is to be subscribed to.  Subscription groups are called in ascending order.
+
+	\param subscriber
+		Function or object that is to be subscribed to the Event.
+
+	\return
+		Connection object that can be used to check the status of the Event connection and to disconnect (unsubscribe) from the Event.
+	*/
+	virtual Event::Connection	subscribeEvent(const String& name, Event::Group group, Event::Subscriber subscriber);
+
+
+	/*!
+	\brief
+		Fires the named event passing the given EventArgs object.
+
+	\param name
+		String object holding the name of the Event that is to be fired (triggered)
+
+	\param args
+		The EventArgs (or derived) object that is to be bassed to each subscriber of the Event.  Once all subscribers
+		have been called the 'handled' field of the event is updated appropriately.
+		
+	\param eventNamespace
+		String object describing the namespace prefix to use when firing the global event.
+
+	\return
+		Nothing.
+	*/
+	virtual void	fireEvent(const String& name, EventArgs& args, const String& eventNamespace = "");
+};
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIGlobalEventSet_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUI.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUI.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUI.h	(revision 1092)
@@ -0,0 +1,100 @@
+/************************************************************************
+	filename: 	CEGUI.h
+	created:	21/2/2004
+	author:		Paul D Turner
+	
+	purpose:	Main system include for client code
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUI_h_
+#define _CEGUI_h_
+
+// base stuff
+#include "CEGUIBase.h"
+#include "CEGUIString.h"
+#include "CEGUIRect.h"
+#include "CEGUIExceptions.h"
+#include "CEGUITexture.h"
+#include "CEGUIRenderer.h"
+#include "CEGUIImageset.h"
+#include "CEGUIImagesetManager.h"
+#include "CEGUILogger.h"
+#include "CEGUIMouseCursor.h"
+#include "CEGUIFont.h"
+#include "CEGUIFontManager.h"
+#include "CEGUIEventArgs.h"
+#include "CEGUIEvent.h"
+#include "CEGUIEventSet.h"
+#include "CEGUIGlobalEventSet.h"
+#include "CEGUIProperty.h"
+#include "CEGUIPropertySet.h"
+#include "CEGUIWindow.h"
+#include "CEGUIWindowFactory.h"
+#include "CEGUIWindowFactoryManager.h"
+#include "CEGUIWindowManager.h"
+#include "CEGUIScheme.h"
+#include "CEGUISchemeManager.h"
+#include "CEGUISystem.h"
+#include "CEGUIScriptModule.h"
+
+// mid-level renderables
+#include "CEGUIRenderableFrame.h"
+#include "CEGUIRenderableImage.h"
+
+// gui elements
+#include "elements/CEGUIButtonBase.h"
+#include "elements/CEGUIPushButton.h"
+#include "elements/CEGUICheckbox.h"
+#include "elements/CEGUIRadioButton.h"
+#include "elements/CEGUITitlebar.h"
+#include "elements/CEGUIFrameWindow.h"
+#include "elements/CEGUIProgressBar.h"
+#include "elements/CEGUIEditbox.h"
+#include "elements/CEGUIThumb.h"
+#include "elements/CEGUISlider.h"
+#include "elements/CEGUIScrollbar.h"
+#include "elements/CEGUIStatic.h"
+#include "elements/CEGUIListbox.h"
+#include "elements/CEGUICombobox.h"
+#include "elements/CEGUIListHeader.h"
+#include "elements/CEGUIMultiColumnList.h"
+#include "elements/CEGUIStaticText.h"
+#include "elements/CEGUIStaticImage.h"
+#include "elements/CEGUIGUISheet.h"
+#include "elements/CEGUIListboxTextItem.h"
+#include "elements/CEGUIComboDropList.h"
+#include "elements/CEGUIMultiLineEditbox.h"
+#include "elements/CEGUITabButton.h"
+#include "elements/CEGUITabPane.h"
+#include "elements/CEGUITabControl.h"
+#include "elements/CEGUISpinner.h"
+#include "elements/CEGUIDragContainer.h"
+#include "elements/CEGUIScrolledContainer.h"
+#include "elements/CEGUIScrollablePane.h"
+#include "elements/CEGUITooltip.h"
+#include "elements/CEGUIItemEntry.h"
+#include "elements/CEGUITextItem.h"
+#include "elements/CEGUIMenuItem.h"
+#include "elements/CEGUIItemListBase.h"
+#include "elements/CEGUIMenuBase.h"
+#include "elements/CEGUIMenubar.h"
+#include "elements/CEGUIPopupMenu.h"
+
+#endif	// end of guard _CEGUI_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIExceptions.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIExceptions.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIExceptions.h	(revision 1092)
@@ -0,0 +1,184 @@
+/************************************************************************
+	filename: 	CEGUIExceptions.h
+	created:	20/2/2004
+	author:		Paul D Turner
+	
+	purpose:	Defines exceptions used within the system
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIExceptions_h_
+#define _CEGUIExceptions_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIString.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Root exception class used within the GUI system.
+*/
+class  CEGUIEXPORT Exception
+{
+public:
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	Exception(const String& message);
+	virtual ~Exception(void);
+
+	/*!
+	\brief
+		Return a reference to the String object describing the reason for the exception being thrown.
+
+	\return
+		String object containing a message describing the reason for the exception.
+	*/
+	const String&	getMessage(void) const		{return d_message;}
+
+
+protected:
+	String	d_message;
+};
+
+/*!
+\brief
+	Exception class used when none of the other classes are applicable
+*/
+class CEGUIEXPORT GenericException : public Exception
+{
+public:
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	GenericException(const String& message) : Exception(message) {}
+};
+
+/*!
+\brief
+	Exception class used when a request was made using a name of an unknown object
+*/
+class CEGUIEXPORT UnknownObjectException : public Exception
+{
+public:
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	UnknownObjectException(const String& message) : Exception(message) {}
+};
+
+/*!
+\brief
+	Exception class used when some impossible request was made for the current system state
+*/
+class CEGUIEXPORT InvalidRequestException : public Exception
+{
+public:
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	InvalidRequestException(const String& message) : Exception(message) {}
+};
+
+/*!
+\brief
+	Exception class used when a file handling problem occurs
+*/
+class CEGUIEXPORT FileIOException : public Exception
+{
+public:
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	FileIOException(const String& message) : Exception(message) {}
+};
+
+/*!
+\brief
+	Exception class used when an problem is detected within the Renderer or related objects
+*/
+class CEGUIEXPORT RendererException : public Exception
+{
+public:
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	RendererException(const String& message) : Exception(message) {}
+};
+
+/*!
+\brief
+	Exception class used when an attempt is made to use an object name that is already in use within the system
+*/
+class CEGUIEXPORT AlreadyExistsException : public Exception
+{
+public:
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	AlreadyExistsException(const String& message) : Exception(message) {}
+};
+
+/*!
+\brief
+	Exception class used when a memory handling error is detected
+*/
+class CEGUIEXPORT MemoryException : public Exception
+{
+public:
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	MemoryException(const String& message) : Exception(message) {}
+};
+
+/*!
+\brief
+	Exception class used when some required object or parameter is null
+*/
+class CEGUIEXPORT NullObjectException : public Exception
+{
+public:
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	NullObjectException(const String& message) : Exception(message) {}
+};
+
+/*Q
+\brief
+	Exception class used when some attempt to delete, remove, or otherwise invalidate some object that is still in use occurs.
+*/
+class CEGUIEXPORT ObjectInUseException : public Exception
+{
+public:
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	ObjectInUseException(const String& message) : Exception(message) {}
+};
+
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIExceptions_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIFont_implData.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIFont_implData.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIFont_implData.h	(revision 1092)
@@ -0,0 +1,49 @@
+/************************************************************************
+	filename: 	CEGUIFont_implData.h
+	created:	23/6/2004
+	author:		Paul D Turner
+	
+	purpose:	Implementation data used within the Font class
+				Used to break dependency on FreeType2 for clients
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIFont_implData_h_
+#define _CEGUIFont_implData_h_
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+#include "CEGUIDataContainer.h"
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+struct Font::FontImplData
+{
+	FontImplData(FT_Library lib) : library(lib) {}
+
+	FT_Library	library;
+	FT_Face		fontFace;
+    RawDataContainer fontData;
+};
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIFont_implData_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIImage.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIImage.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIImage.h	(revision 1092)
@@ -0,0 +1,483 @@
+/************************************************************************
+	filename: 	CEGUIImage.h
+	created:	13/3/2004
+	author:		Paul D Turner
+	
+	purpose:	Defines interface for Image class
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIImage_h_
+#define _CEGUIImage_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIString.h"
+#include "CEGUIRect.h"
+#include "CEGUIColourRect.h"
+#include "CEGUIVector.h"
+#include "CEGUISize.h"
+#include "CEGUIRenderer.h"
+#include <map>
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Class that represents a single Image of an Imageset.
+*/
+class CEGUIEXPORT Image
+{
+public:
+	/*!
+	\brief
+		Return a Size object containing the dimensions of the Image.
+
+	\return
+		Size object holding the width and height of the Image.
+	*/
+	Size	getSize(void) const			{return Size(d_scaledWidth, d_scaledHeight);}
+	
+
+	/*!
+	\brief
+		Return the pixel width of the image.
+
+	\return
+		Width of this Image in pixels.
+	*/
+	float	getWidth(void) const		{return d_scaledWidth;}
+
+
+	/*!
+	\brief
+		Return the pixel height of the image.
+
+	\return
+		Height of this Image in pixels
+	*/
+	float	getHeight(void) const		{return d_scaledHeight;}
+
+
+	/*!
+	\brief
+		Return a Point object that contains the offset applied when rendering this Image
+
+	\return
+		Point object containing the offsets applied when rendering this Image
+	*/
+	Point	getOffsets(void) const		{return d_scaledOffset;}
+
+
+	/*!
+	\brief
+		Return the X rendering offset
+
+	\return
+		X rendering offset.  This is the number of pixels that the image is offset by when rendering at any given location.
+	*/
+	float	getOffsetX(void) const		{return	d_scaledOffset.d_x;}
+
+
+	/*!
+	\brief
+		Return the Y rendering offset
+
+	\return
+		Y rendering offset.  This is the number of pixels that the image is offset by when rendering at any given location.
+	*/
+	float	getOffsetY(void) const		{return d_scaledOffset.d_y;}
+
+
+	/*!
+	\brief
+		Return the name of this Image object.
+
+	\return
+		String object containing the name of this Image
+	*/
+	const String&	getName(void) const;
+
+
+	/*!
+	\brief
+		Return the name of the Imageset that contains this Image
+
+	\return
+		String object containing the name of the Imageset which this Image is a part of.
+	*/
+	const String&	getImagesetName(void) const;
+
+    /*!
+    \brief
+        Return Rect describing the source texture area used by this Image.
+
+    \return
+        Rect object that describes, in pixels, the area upon the source texture
+        which is used when rendering this Image.
+    */
+    const Rect& getSourceTextureArea(void) const;
+
+	/*!
+	\brief
+		Queue the image to be drawn. 
+		
+	\note
+		The final position of the Image will be adjusted by the offset values defined for this Image object.  If absolute positioning is
+		essential then these values should be taken into account prior to calling the draw() methods.  However, by doing this you take
+		away the ability of the Imageset designer to adjust the alignment and positioning of Images, therefore your component is far
+		less useful since it requires code changes to modify image positioning that could have been handled from a data file.
+
+	\param position
+		Vector3 object containing the location where the Image is to be drawn
+
+	\param size
+		Size object describing the size that the Image is to be drawn at.
+
+	\param clip_rect
+		Rect object that defines an on-screen area that the Image will be clipped to when drawing.
+
+	\param top_left_colour
+		Colour (as 0xAARRGGBB value) to be applied to the top-left corner of the Image.
+
+	\param top_right_colour
+		Colour (as 0xAARRGGBB value) to be applied to the top-right corner of the Image.
+
+	\param bottom_left_colour
+		Colour (as 0xAARRGGBB value) to be applied to the bottom-left corner of the Image.
+
+	\param bottom_right_colour
+		Colour (as 0xAARRGGBB value) to be applied to the bottom-right corner of the Image.
+	
+	\param quad_split_mode
+		One of the QuadSplitMode values specifying the way quads are split into triangles
+
+	\return
+		Nothing
+	*/
+	void	draw(const Vector3& position, const Size& size, const Rect& clip_rect, const colour& top_left_colour = 0xFFFFFFFF, const colour& top_right_colour = 0xFFFFFFFF, const colour& bottom_left_colour = 0xFFFFFFFF, const colour& bottom_right_colour = 0xFFFFFFFF, QuadSplitMode quad_split_mode = TopLeftToBottomRight) const
+	{
+		draw(Rect(position.d_x, position.d_y, position.d_x + size.d_width, position.d_y + size.d_height), position.d_z, clip_rect, 
+			ColourRect(top_left_colour, top_right_colour, bottom_left_colour, bottom_right_colour), quad_split_mode);
+	}
+
+
+	/*!
+	\brief
+		Queue the image to be drawn.
+
+	\note
+		The final position of the Image will be adjusted by the offset values defined for this Image object.  If absolute positioning is
+		essential then these values should be taken into account prior to calling the draw() methods.  However, by doing this you take
+		away the ability of the Imageset designer to adjust the alignment and positioning of Images, therefore your component is far
+		less useful since it requires code changes to modify image positioning that could have been handled from a data file.
+
+	\param dest_rect
+		Rect object defining the area on-screen where the Image is to be drawn.  The Image will be scaled to fit the area as required.
+
+	\param z
+		Z-order position for the image.  Positions increase "into the screen", so 0.0f is at the top of the z-order.
+
+	\param clip_rect
+		Rect object that defines an on-screen area that the Image will be clipped to when drawing.
+
+	\param top_left_colour
+		Colour (as 0xAARRGGBB value) to be applied to the top-left corner of the Image.
+
+	\param top_right_colour
+		Colour (as 0xAARRGGBB value) to be applied to the top-right corner of the Image.
+
+	\param bottom_left_colour
+		Colour (as 0xAARRGGBB value) to be applied to the bottom-left corner of the Image.
+
+	\param bottom_right_colour
+		Colour (as 0xAARRGGBB value) to be applied to the bottom-right corner of the Image.
+	
+	\param quad_split_mode
+		One of the QuadSplitMode values specifying the way quads are split into triangles
+
+	\return
+		Nothing
+	*/
+	void	draw(const Rect& dest_rect, float z, const Rect& clip_rect, const colour& top_left_colour = 0xFFFFFFFF, const colour& top_right_colour = 0xFFFFFFFF, const colour& bottom_left_colour = 0xFFFFFFFF, const colour& bottom_right_colour = 0xFFFFFFFF, QuadSplitMode quad_split_mode = TopLeftToBottomRight) const
+	{
+		draw(dest_rect, z, clip_rect, ColourRect(top_left_colour, top_right_colour, bottom_left_colour, bottom_right_colour), quad_split_mode);
+	}
+
+
+	/*!
+	\brief
+		Queue the image to be drawn. 
+		
+	\note
+		The final position of the Image will be adjusted by the offset values defined for this Image object.  If absolute positioning is
+		essential then these values should be taken into account prior to calling the draw() methods.  However, by doing this you take
+		away the ability of the Imageset designer to adjust the alignment and positioning of Images, therefore your component is far
+		less useful since it requires code changes to modify image positioning that could have been handled from a data file.
+
+	\param position
+		Vector3 object containing the location where the Image is to be drawn
+
+	\param size
+		Size object describing the size that the Image is to be drawn at.
+
+	\param clip_rect
+		Rect object that defines an on-screen area that the Image will be clipped to when drawing.
+
+	\param colours
+		ColourRect object that describes the colour values to use for each corner of the Image.
+	
+	\param quad_split_mode
+		One of the QuadSplitMode values specifying the way quads are split into triangles
+
+	\return
+		Nothing
+	*/
+	void	draw(const Vector3& position, const Size& size, const Rect& clip_rect, const ColourRect& colours, QuadSplitMode quad_split_mode = TopLeftToBottomRight) const
+	{
+		draw(Rect(position.d_x, position.d_y, position.d_x + size.d_width, position.d_y + size.d_height), position.d_z, clip_rect, colours, quad_split_mode);
+	}
+
+
+	/*!
+	\brief
+		Queue the image to be drawn.
+
+	\note
+		The final position of the Image will be adjusted by the offset values defined for this Image object.  If absolute positioning is
+		essential then these values should be taken into account prior to calling the draw() methods.  However, by doing this you take
+		away the ability of the Imageset designer to adjust the alignment and positioning of Images, therefore your component is far
+		less useful since it requires code changes to modify image positioning that could have been handled from a data file.
+
+	\param position
+		Vector3 object containing the location where the Image is to be drawn
+
+	\note
+		The image will be drawn at it's internally defined size.
+
+	\param clip_rect
+		Rect object that defines an on-screen area that the Image will be clipped to when drawing.
+
+	\param colours
+		ColourRect object that describes the colour values to use for each corner of the Image.
+	
+	\param quad_split_mode
+		One of the QuadSplitMode values specifying the way quads are split into triangles
+
+	\return
+		Nothing
+	*/
+	void	draw(const Vector3& position, const Rect& clip_rect, const ColourRect& colours, QuadSplitMode quad_split_mode = TopLeftToBottomRight) const
+	{
+		draw(Rect(position.d_x, position.d_y, position.d_x + getWidth(), position.d_y + getHeight()), position.d_z, clip_rect, colours, quad_split_mode);
+	}
+
+
+	/*!
+	\brief
+		Queue the image to be drawn.
+
+	\note
+		The final position of the Image will be adjusted by the offset values defined for this Image object.  If absolute positioning is
+		essential then these values should be taken into account prior to calling the draw() methods.  However, by doing this you take
+		away the ability of the Imageset designer to adjust the alignment and positioning of Images, therefore your component is far
+		less useful since it requires code changes to modify image positioning that could have been handled from a data file.
+
+	\param position
+		Vector3 object containing the location where the Image is to be drawn
+
+	\param clip_rect
+		Rect object that defines an on-screen area that the Image will be clipped to when drawing.
+
+	\param top_left_colour
+		Colour (as 0xAARRGGBB value) to be applied to the top-left corner of the Image.
+
+	\param top_right_colour
+		Colour (as 0xAARRGGBB value) to be applied to the top-right corner of the Image.
+
+	\param bottom_left_colour
+		Colour (as 0xAARRGGBB value) to be applied to the bottom-left corner of the Image.
+
+	\param bottom_right_colour
+		Colour (as 0xAARRGGBB value) to be applied to the bottom-right corner of the Image.
+	
+	\param quad_split_mode
+		One of the QuadSplitMode values specifying the way quads are split into triangles
+
+	\return
+		Nothing
+	*/
+	void	draw(const Vector3& position, const Rect& clip_rect, const colour& top_left_colour = 0xFFFFFFFF, const colour& top_right_colour = 0xFFFFFFFF, const colour& bottom_left_colour = 0xFFFFFFFF, const colour& bottom_right_colour = 0xFFFFFFFF, QuadSplitMode quad_split_mode = TopLeftToBottomRight) const
+	{
+		draw(Rect(position.d_x, position.d_y, position.d_x + getWidth(), position.d_y + getHeight()), position.d_z, clip_rect, ColourRect(top_left_colour, top_right_colour, bottom_left_colour, bottom_right_colour), quad_split_mode);
+	}
+
+
+	/*!
+	\brief
+		Queue the image to be drawn.
+
+	\note
+		The final position of the Image will be adjusted by the offset values defined for this Image object.  If absolute positioning is
+		essential then these values should be taken into account prior to calling the draw() methods.  However, by doing this you take
+		away the ability of the Imageset designer to adjust the alignment and positioning of Images, therefore your component is far
+		less useful since it requires code changes to modify image positioning that could have been handled from a data file.
+
+	\param dest_rect
+		Rect object defining the area on-screen where the Image is to be drawn.  The Image will be scaled to fit the area as required.
+
+	\param z
+		Z-order position for the image.  Positions increase "into the screen", so 0.0f is at the top of the z-order.
+
+	\param clip_rect
+		Rect object that defines an on-screen area that the Image will be clipped to when drawing.
+
+	\param colours
+		ColourRect object that describes the colour values to use for each corner of the Image.
+	
+	\param quad_split_mode
+		One of the QuadSplitMode values specifying the way quads are split into triangles
+
+	\return
+		Nothing
+	*/
+	void	draw(const Rect& dest_rect, float z, const Rect& clip_rect,const ColourRect& colours, QuadSplitMode quad_split_mode = TopLeftToBottomRight) const;
+
+
+
+	friend class std::map<String, Image>;
+	friend struct std::pair<const String, Image>;
+
+
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Default constructor (only used by std::map)
+	*/
+	Image(void) {}
+
+
+	/*!
+	\brief
+		Constructor for Image objects.  This is not normally used directly by client code, use the Imageset interface instead.
+
+	\param owner
+		Pointer to a Imageset object that owns this Image.  This must not be NULL.
+		
+	\param name
+		String object describing the name of the image being created.
+		
+	\param area
+		Rect object describing an area that will be associated with this image.
+		
+	\param render_offset
+		Point object that describes the offset to be applied when rendering this image.
+		
+	\param horzScaling
+		float value indicating the initial horizontal scaling to be applied to this image.
+
+	\param vertScaling
+		float value indicating the initial vertical scaling to be applied to this image.
+
+	\exception NullObjectException	Thrown if \a owner was NULL.
+	*/
+	Image(const Imageset* owner, const String& name, const Rect& area, const Point& render_offset, float horzScaling = 1.0f, float vertScaling = 1.0f);
+
+
+
+	/*!
+	\brief
+		Copy constructor
+	*/
+	Image(const Image& image);
+
+
+	/*!
+	\brief
+		Destructor for Image objects.
+	*/
+	~Image(void);
+
+
+private:
+	/*************************************************************************
+		Friends
+	*************************************************************************/
+	friend class Imageset;
+
+		
+	/*************************************************************************
+		Implementation Methods
+	*************************************************************************/
+	/*!
+	\brief
+		set the horizontal scaling factor to be applied to this Image
+
+	\param factor
+		float value describing the scaling factor required.
+
+	\return
+		Nothing.
+	*/
+	void	setHorzScaling(float factor);
+
+
+	/*!
+	\brief
+		set the vertical scaling factor to be applied to this Image
+
+	\param factor
+		float value describing the scaling factor required.
+
+	\return
+		Nothing.
+	*/
+	void	setVertScaling(float factor);
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	const Imageset*	d_owner;		//!< Link back to Imageset that owns this image
+	Rect			d_area;			//!< Rect defining the area on the texture that makes up this image.
+	Point			d_offset;		//!< Offset to use when rendering
+
+	// image auto-scaling fields.
+	float	d_scaledWidth;		//!< scaled image width.
+	float	d_scaledHeight;		//!< scaled image height.
+	Point	d_scaledOffset;		//!< scaled rendering offset.
+	String	d_name;				//!< name of this image.
+};
+
+} // End of  CEGUI namespace section
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUIImage_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIScheme_xmlHandler.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIScheme_xmlHandler.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIScheme_xmlHandler.h	(revision 1092)
@@ -0,0 +1,99 @@
+/************************************************************************
+    filename:   CEGUIScheme_xmlHandler.h
+    created:    21/2/2004
+    author:     Paul D Turner
+    
+    purpose:    Defines abstract base class for the GUI Scheme object.
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+    
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+    
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+    
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIScheme_xmlHandler_h_
+#define _CEGUIScheme_xmlHandler_h_
+
+#include "CEGUIScheme.h"
+#include "CEGUIXMLHandler.h"
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+    /*!
+    \brief
+        Handler class used to parse the Scheme XML files using SAX2
+    */
+    class Scheme_xmlHandler : public XMLHandler
+    {
+    public:
+        /*************************************************************************
+        Construction & Destruction
+        *************************************************************************/
+        /*!
+        \brief
+            Constructor for Scheme::xmlHandler objects
+
+        \param scheme
+            Pointer to the Scheme object creating this xmlHandler object
+        */
+        Scheme_xmlHandler(Scheme* scheme) : d_scheme(scheme)
+        {}
+
+        /*!
+        \brief
+            Destructor for Scheme::xmlHandler objects
+        */
+        virtual ~Scheme_xmlHandler(void)
+        {}
+
+        /*************************************************************************
+        SAX2 Handler overrides
+        *************************************************************************/
+        /*!
+        \brief
+            document processing (only care about elements, schema validates format)
+        */
+        virtual void elementStart(const String& element, const XMLAttributes& attributes);
+        virtual void elementEnd(const String& element);
+
+    private:
+        /*************************************************************************
+        Implementation Constants
+        *************************************************************************/
+        // XML related strings
+        static const String GUISchemeElement;               //!< Root GUIScheme element.
+        static const String ImagesetElement;                //!< Element specifying an Imageset
+        static const String FontElement;                    //!< Element specifying a Font
+        static const String WindowSetElement;               //!< Element specifying a module and set of WindowFactory elements.
+        static const String WindowFactoryElement;           //!< Element specifying a WindowFactory type.
+        static const String WindowAliasElement;         //!< Element specifying a WindowFactory type alias
+        static const char   NameAttribute[];                //!< Attribute specifying the name of some object.
+        static const char   FilenameAttribute[];            //!< Attribute specifying the name of some file.
+        static const char   AliasAttribute[];               //!< Attribute specifying an alias name.
+        static const char   TargetAttribute[];              //!< Attribute specifying target for an alias.
+        static const char   ResourceGroupAttribute[];       //!< Attribute specifying resource group for some loadable resource.
+
+
+        /*************************************************************************
+        Implementation Data
+        *************************************************************************/
+        Scheme* d_scheme;           //!< Scheme object that we are helping to build
+    };
+
+} // End of  CEGUI namespace section
+
+#endif  // end of guard _CEGUIScheme_xmlHandler_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIForwardRefs.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIForwardRefs.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIForwardRefs.h	(revision 1092)
@@ -0,0 +1,114 @@
+/************************************************************************
+	filename: 	CEGUIForwardRefs.h
+	created:	21/2/2004
+	author:		Paul D Turner
+	
+	purpose:	Forward declares all core system classes
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIForwardRefs_h_
+#define _CEGUIForwardRefs_h_
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+/*************************************************************************
+	Forward reference declarations of all core GUI system classes
+*************************************************************************/
+class String;
+class Vector3;
+class Size;
+class Exception;
+class Rect;
+class ColourRect;
+class colour;
+class Texture;
+class Renderer;
+class Image;
+class Imageset;
+class ImagesetManager;
+class MouseCursor;
+class Font;
+class FontManager;
+class EventArgs;
+class Event;
+class EventSet;
+class Property;
+class PropertySet;
+class Window;
+class WindowFactory;
+class WindowManager;
+class Scheme;
+class SchemeManager;
+class System;
+class FactoryModule;
+class ScriptModule;
+class ResourceProvider;
+class DefaultResourceProvider;
+class PropertyReceiver;
+class GlobalEventSet;
+class XMLAttributes;
+class XMLHandler;
+class XMLParser;
+
+/*************************************************************************
+	Forward reference declarations for GUI element base classes
+*************************************************************************/
+class ButtonBase;
+class RadioButton;
+class Checkbox;
+class PushButton;
+class Titlebar;
+class FrameWindow;
+class Editbox;
+class Listbox;
+class Combobox;
+class ListHeaderSegment;
+class ListHeader;
+class MultiColumnList;
+class ProgressBar;
+class Thumb;
+class Scrollbar;
+class Slider;
+class Static;
+class StaticText;
+class StaticImage;
+class ListboxItem;
+class ListboxTextItem;
+class ComboDropList;
+class MultiLineEditbox;
+class Spinner;
+class GUISheet;
+class DragContainer;
+class ScrollablePane;
+class ScrolledContainer;
+class Tooltip;
+class ItemEntry;
+class TextItem;
+class MenuItem;
+class ItemListBase;
+class MenuBase;
+class Menubar;
+class PopupMenu;
+
+} // End of  CEGUI namespace section
+
+#endif	// end of guard _CEGUIForwardRefs_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIFont_xmlHandler.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIFont_xmlHandler.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIFont_xmlHandler.h	(revision 1092)
@@ -0,0 +1,114 @@
+/************************************************************************
+filename: 	CEGUIFont_xmlHandler.h
+created:	21/2/2004
+author:		Paul D Turner
+
+purpose:	Defines interface for the Font class
+*************************************************************************/
+/*************************************************************************
+Crazy Eddie's GUI System (http://www.cegui.org.uk)
+Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIFont_xmlHandler_h_
+#define _CEGUIFont_xmlHandler_h_
+
+#include "CEGUIFont.h"
+#include "CEGUIXMLHandler.h"
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+/*!
+\brief
+Handler class used to parse the Font XML files using SAX2
+*/
+class Font_xmlHandler : public XMLHandler
+{
+public:
+	/*************************************************************************
+	Construction & Destruction
+	*************************************************************************/
+	/*!
+	\brief
+	Constructor for Font::xmlHandler objects
+
+	\param font
+	Pointer to the Font object creating this xmlHandler object
+	*/
+	Font_xmlHandler(Font* font) : d_font(font) {}
+
+	/*!
+	\brief
+	Destructor for Font::xmlHandler objects
+	*/
+	virtual ~Font_xmlHandler(void) {}
+
+	/*************************************************************************
+	SAX2 Handler overrides
+	*************************************************************************/
+	/*!
+	\brief
+	document processing (only care about elements, schema validates format)
+	*/
+    virtual void elementStart(const String& element, const XMLAttributes& attributes);
+    virtual void elementEnd(const String& element);
+
+private:
+	/*************************************************************************
+	Implementation Constants
+	*************************************************************************/
+	// XML related strings
+	static const String FontElement;					//!< Tag name for Font elements.
+	static const String MappingElement;				//!< Tag name for Mapping elements.
+	static const String FontTypeStatic;				//!< Value used for FontTypeAttribute for a static (bitmapped) font.
+	static const String FontTypeDynamic;				//!< Value used for FontTypeAttribute for a dynamic (true-type) font.
+	static const String GlyphElement;					//!< Tag name for Glyph elements.
+	static const String GlyphRangeElement;			//!< Tag name for GlyphRange elements.
+	static const String GlyphSetElement;				//!< Tag name for GlyphSet elements.
+	static const char	FontNameAttribute[];			//!< Attribute name that stores the name of the Font
+    static const char	FontFilenameAttribute[];		//!< Attribute name that stores the filename, this is either an Imageset xml file, or a font file.
+    static const char	FontResourceGroupAttribute[];   //!< Attribute name that stores the resource group identifier used when loading font file.
+	static const char	FontTypeAttribute[];			//!< Attribute name that stores the type of font being defined (either static or dynamic).
+	static const char	FontSizeAttribute[];			//!< Attribute name that stores the point size for a dynamic font.
+	static const char	FontFirstCodepointAttribute[];	//!< Attribute name that stores the first code-point for a dynamic font.
+	static const char	FontLastCodepointAttribute[];	//!< Attribute name that stores the last code-point for a dynamic font.
+	static const char	FontNativeHorzResAttribute[];	//!< Optional attribute that stores 'native' horizontal resolution for the Font.
+	static const char	FontNativeVertResAttribute[];	//!< Optional attribute that stores 'native' vertical resolution for the Font.
+	static const char	FontAutoScaledAttribute[];		//!< Optional attribute that specifies whether the Font should be auto-scaled.
+	static const char	FontAntiAliasedAttribute[];		//!< Optional attribute that specifies whether the TTF based font should be anti-aliased.
+	static const char	MappingCodepointAttribute[];	//!< Attribute name that stores the Unicode code-point for a mapping.
+	static const char	MappingImageAttribute[];		//!< Attribute name that stores the Image name for a mapping.
+	static const char	MappingHorzAdvanceAttribute[];	//!< Attribute name that stores the horizontal advance for a glyph.
+	static const char	GlyphCodepointAttribute[];				//!< Attribute name that stores the U+ codepoint to add to the set.
+	static const char	GlyphRangeStartCodepointAttribute[];	//!< Attribute name that stores the U+ codepoint for the start of a range.
+	static const char	GlyphRangeEndCodepointAttribute[];		//!< Attribute name that stores the U+ codepoint for the end of a range.
+	static const char	GlyphSetGlyphsAttribute[];				//!< Attribute name that stores the UTF8 encoded codepoint set.
+
+	// general constants
+	static const int	AutoGenerateHorzAdvance;		//!< Horizontal advance value that tells the parser to auto-calculate some reasonable value.
+
+	/*************************************************************************
+	Implementation Data
+	*************************************************************************/
+	Font*	d_font;			//!< Font object that we are helping to build
+	String	d_glyphSet;		//!< String holding the set of codepoints to be available.
+};
+
+} // End of  CEGUI namespace section
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIWindowProperties.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIWindowProperties.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIWindowProperties.h	(revision 1092)
@@ -0,0 +1,1372 @@
+/************************************************************************
+	filename: 	CEGUIWindowProperties.h
+	created:	5/7/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to available window base class properties
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIWindowProperties_h_
+#define _CEGUIWindowProperties_h_
+
+#include "CEGUIProperty.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+// Start of WindowProperties namespace section
+/*!
+\brief
+	Namespace containing all classes that make up the properties interface for the Window base class
+*/
+namespace WindowProperties
+{
+/*!
+\brief
+	Property to access minimum window size.
+
+	This property offers access to the minimum size setting for the window, using screen relative metrics.
+
+	\par Usage:
+		- Name: RelativeMinSize
+		- Format: "w:[float] h:[float]".
+
+	\par Where:
+		- w:[float]	specifies the minimum width as a floating point number.
+		- h:[float] specifies the minimum height as a floating point number.
+*/
+class RelativeMinSize : public Property
+{
+public:
+	RelativeMinSize() : Property(
+		"RelativeMinSize",
+		"Property to get/set the minimum size for the Window.  Value is \"w:[float] h:[float]\" using relative metrics (this setting is relative to the display size).",
+		"w:0.000000 h:0.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access maximum window size.
+
+	This property offers access to the maximum size setting for the window, using screen relative metrics.
+
+	\par Usage:
+		- Name: RelativeMaxSize
+		- Format: "w:[float] h:[float]".
+
+	\par Where:
+		- w:[float]	specifies the maximum width as a floating point number.
+		- h:[float] specifies the maximum height as a floating point number.
+*/
+class RelativeMaxSize : public Property
+{
+public:
+	RelativeMaxSize() : Property(
+		"RelativeMaxSize",
+		"Property to get/set the maximum size for the Window.  Value is \"w:[float] h:[float]\" using relative metrics (this setting is relative to the display size).",
+		"w:1.000000 h:1.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access minimum window size.
+
+	This property offers access to the minimum size setting for the window, using absolute screen pixel metrics.
+
+	\par Usage:
+		- Name: AbsoluteMinSize
+		- Format: "w:[float] h:[float]".
+
+	\par Where:
+		- w:[float]	specifies the minimum width as a floating point number.
+		- h:[float] specifies the minimum height as a floating point number.
+*/
+class AbsoluteMinSize : public Property
+{
+public:
+	AbsoluteMinSize() : Property(
+		"AbsoluteMinSize",
+		"Property to get/set the minimum size for the Window.  Value is \"w:[float] h:[float]\" using absolute (pixel) metrics.",
+		"w:0.000000 h:0.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access maximum window size.
+
+	This property offers access to the maximum size setting for the window, using absolute screen pixel metrics.
+
+	\par Usage:
+		- Name: AbsoluteMaxSize
+		- Format: "w:[float] h:[float]".
+
+	\par Where:
+		- w:[float]	specifies the maximum width as a floating point number.
+		- h:[float] specifies the maximum height as a floating point number.
+*/
+class AbsoluteMaxSize : public Property
+{
+public:
+	AbsoluteMaxSize() : Property(
+		"AbsoluteMaxSize",
+		"Property to get/set the maximum size for the Window.  Value is \"w:[float] h:[float]\" using absolute (pixel) metrics.",
+		"")
+		{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+
+	// default depends upon current size of display.
+	bool	isDefault(const PropertyReceiver* receiver) const;
+	String	getDefault(const PropertyReceiver* receiver) const;
+};
+
+
+/*!
+\brief
+	Property to access the metrics mode setting.
+
+	This property offers access to the metrics mode setting for the window.
+
+	\par Usage:
+		- Name: MetricsMode
+		- Format: "[text]".
+
+	\par Where [text] is:
+		- "Relative" for the relative metrics mode.
+		- "Absolute" for the absolute metrics mode.
+		- "Inherited" if metrics should be inherited from the parent (only used with set method).
+*/
+class MetricsMode : public Property
+{
+public:
+	MetricsMode() : Property(
+		"MetricsMode",
+		"Property to get/set the metrics mode for the Window.  Value is \"Relative\", \"Absolute\", or \"Inherited\".",
+		"Relative")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access window ID field.
+
+	This property offers access to the client specified ID for the window.
+
+	\par Usage:
+		- Name: ID
+		- Format: "[uint]".
+
+	\par Where:
+		- [uint] is any unsigned integer value.
+*/
+class ID : public Property
+{
+public:
+	ID() : Property(
+		"ID",
+		"Property to get/set the ID value of the Window.  Value is an unsigned integer number.",
+		"0")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access window alpha setting.
+
+	This property offers access to the alpha-blend setting for the window.
+
+	\par Usage:
+		- Name: Alpha
+		- Format: "[float]".
+
+	\par Where:
+		- [float] is a floating point number between 0.0 and 1.0.
+*/
+class Alpha : public Property
+{
+public:
+	Alpha() : Property(
+		"Alpha",
+		"Property to get/set the alpha value of the Window.  Value is floating point number.",
+		"1.000000") 
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access window Font setting.
+
+	This property offers access to the current Font setting for the window.
+
+	\par Usage:
+		- Name: Font
+		- Format: "[text]".
+
+	\par Where:
+		- [text] is the name of the Font to assign for this window.  The Font specified must already be loaded.
+*/
+class Font : public Property
+{
+public:
+	Font() : Property(
+		"Font",
+		"Property to get/set the font for the Window.  Value is the name of the font to use (must be loaded already).",
+		"")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access window text setting.
+
+	This property offers access to the current text for the window.
+
+	\par Usage:
+		- Name: Text
+		- Format: "[text]".
+
+	\par Where:
+		- [text] is the name of the Font to assign for this window.  The Font specified must already be loaded.
+*/
+class Text : public Property
+{
+public:
+	Text() : Property(
+		"Text", 
+		"Property to get/set the text / caption for the Window.  Value is the text string to use.",
+		"")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access window mouse cursor setting.
+
+	This property offers access to the current mouse cursor image for the window.
+
+	\par Usage:
+		- Name: MouseCursorImage
+		- Format: "set:[text] image:[text]".
+
+	\par Where:
+		- set:[text] is the name of the Imageset containing the image.  The Imageset name should not contain spaces.  The Imageset specified must already be loaded.
+		- image:[text] is the name of the Image on the specified Imageset.  The Image name should not contain spaces.
+*/
+class MouseCursorImage : public Property
+{
+public:
+	MouseCursorImage() : Property(
+		"MouseCursorImage",
+		"Property to get/set the mouse cursor image for the Window.  Value should be \"set:<imageset name> image:<image name>\".",
+		"")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access window "clipped by parent" setting.
+
+	This property offers access to the clipped by parent setting for the window.
+
+	\par Usage:
+		- Name: ClippedByParent
+		- Format: "[text]".
+
+	\par Where [Text] is:
+		- "True" to indicate the Window is clipped by it's parent.
+		- "False" to indicate the Window is not clipped by it's parent.
+*/
+class ClippedByParent : public Property
+{
+public:
+	ClippedByParent() : Property(
+		"ClippedByParent",
+		"Property to get/set the 'clipped by parent' setting for the Window.  Value is either \"True\" or \"False\".",
+		"True")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access window "Inherits Alpha" setting.
+
+	This property offers access to the inherits alpha setting for the window.
+
+	\par Usage:
+		- Name: InheritsAlpha
+		- Format: "[text]".
+
+	\par Where [Text] is:
+		- "True" to indicate the Window inherits alpha blend values from it's ancestors.
+		- "False" to indicate the Window does not inherit alpha blend values from it's ancestors.
+*/
+class InheritsAlpha : public Property
+{
+public:
+	InheritsAlpha() : Property(
+		"InheritsAlpha",
+		"Property to get/set the 'inherits alpha' setting for the Window.  Value is either \"True\" or \"False\".",
+		"True")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access window "Always-On-Top" setting.
+
+	This property offers access to the always on top / topmost setting for the window.
+
+	\par Usage:
+		- Name: AlwaysOnTop
+		- Format: "[text]".
+
+	\par Where [Text] is:
+		- "True" to indicate the Window is always on top, and appears above all other non-always on top Windows.
+		- "False" to indicate the Window is not always on top, and will appear below all other always on top Windows.
+*/
+class AlwaysOnTop : public Property
+{
+public:
+	AlwaysOnTop() : Property(
+		"AlwaysOnTop",
+		"Property to get/set the 'always on top' setting for the Window.  Value is either \"True\" or \"False\".",
+		"False")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access window Disabled setting.
+
+	This property offers access to the enabled / disabled setting for the window.
+
+	\par Usage:
+		- Name: Disabled
+		- Format: "[text]".
+
+	\par Where [Text] is:
+		- "True" to indicate the Window is disabled, and will normally receive no inputs from the user.
+		- "False" to indicate the Window is not disabled and will receive inputs from the user as normal.
+*/
+class Disabled : public Property
+{
+public:
+	Disabled() : Property(
+		"Disabled",
+		"Property to get/set the 'disabled state' setting for the Window.  Value is either \"True\" or \"False\".",
+		"False")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access window Visible setting.
+
+	This property offers access to the visible setting for the window.
+
+	\par Usage:
+		- Name: Visible
+		- Format: "[text]".
+
+	\par Where [Text] is:
+		- "True" to indicate the Window is visible.
+		- "False" to indicate the Window is not visible.
+*/
+class Visible : public Property
+{
+public:
+	Visible() : Property(
+		"Visible",
+		"Property to get/set the 'visible state' setting for the Window.  Value is either \"True\" or \"False\".",
+		"True")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access window Restore Old Capture setting.
+
+	This property offers access to the restore old capture setting for the window.  This setting is of generally limited use, it
+	is primary purpose is for certain operations required for compound widgets.
+
+	\par Usage:
+		- Name: RestoreOldCapture
+		- Format: "[text]".
+
+	\par Where [Text] is:
+		- "True" to indicate the Window should restore any previous capture Window when it loses input capture.
+		- "False" to indicate the Window should not restore the old capture Window.  This is the default behaviour.
+*/
+class RestoreOldCapture : public Property
+{
+public:
+	RestoreOldCapture() : Property(
+		"RestoreOldCapture",
+		"Property to get/set the 'restore old capture' setting for the Window.  Value is either \"True\" or \"False\".",
+		"False")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access window Destroyed by Parent setting.
+
+	This property offers access to the destryed by parent setting for the window.
+
+	\par Usage:
+		- Name: DestroyedByParent
+		- Format: "[text]".
+
+	\par Where [Text] is:
+		- "True" to indicate the Window should be automatically destroyed when it's parent Window is destroyed.
+		- "False" to indicate the Window should not be destroyed when it's parent Window is destroyed.
+*/
+class DestroyedByParent : public Property
+{
+public:
+	DestroyedByParent() : Property(
+		"DestroyedByParent",
+		"Property to get/set the 'destroyed by parent' setting for the Window.  Value is either \"True\" or \"False\".",
+		"True")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access window width.
+
+	This property offers access to the Width setting for the window, using the Windows active metrics mode.
+
+	\par Usage:
+		- Name: Width
+		- Format: "[float]".
+
+	\par Where:
+		- [float]	specifies the width as a floating point number, using the active metrics system for the Window.
+*/
+class Width : public Property
+{
+public:
+	Width() : Property(
+		"Width",
+		"Property to get/set the width of the Window.  Value is floating point using the active metrics mode.",
+		"0.000000") {}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access window width.
+
+	This property offers access to the Width setting for the window, using the relative metrics mode.
+
+	\par Usage:
+		- Name: RelativeWidth
+		- Format: "[float]".
+
+	\par Where:
+		- [float]	specifies the width as a floating point number, using the relative metrics system.
+*/
+class RelativeWidth : public Property
+{
+public:
+	RelativeWidth() : Property(
+		"RelativeWidth",
+		"Property to get/set the width of the Window.  Value is floating point using relative metrics.",
+		"0.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access window width.
+
+	This property offers access to the Width setting for the window, using the absolute metrics mode.
+
+	\par Usage:
+		- Name: AbsoluteWidth
+		- Format: "[float]".
+
+	\par Where:
+		- [float]	specifies the width as a floating point number, using the absolute metrics system.
+*/
+class AbsoluteWidth: public Property
+{
+public:
+	AbsoluteWidth() : Property(
+		"AbsoluteWidth",
+		"Property to get/set the width of the Window.  Value is floating point using absolute metrics.",
+		"0.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access window height.
+
+	This property offers access to the Height setting for the window, using the Windows active metrics mode.
+
+	\par Usage:
+		- Name: Height
+		- Format: "[float]".
+
+	\par Where:
+		- [float]	specifies the height as a floating point number, using the active metrics system for the Window.
+*/
+class Height : public Property
+{
+public:
+	Height() : Property(
+		"Height",
+		"Property to get/set the height of the Window.  Value is floating point using the active metrics mode.",
+		"0.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access window height.
+
+	This property offers access to the Height setting for the window, using the relative metrics mode.
+
+	\par Usage:
+		- Name: RelativeHeight
+		- Format: "[float]".
+
+	\par Where:
+		- [float]	specifies the height as a floating point number, using the relative metrics system.
+*/
+class RelativeHeight : public Property
+{
+public:
+	RelativeHeight() : Property(
+		"RelativeHeight",
+		"Property to get/set the height of the Window.  Value is floating point using relative metrics.",
+		"0.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access window height.
+
+	This property offers access to the Height setting for the window, using the absolute metrics mode.
+
+	\par Usage:
+		- Name: AbsoluteHeight
+		- Format: "[float]".
+
+	\par Where:
+		- [float]	specifies the height as a floating point number, using the absolute metrics system.
+*/
+class AbsoluteHeight : public Property
+{
+public:
+	AbsoluteHeight() : Property(
+		"AbsoluteHeight",
+		"Property to get/set the height of the Window.  Value is floating point using absolute metrics.",
+		"0.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the window size.
+
+	This property offers access to the size setting for the window, using the Windows active metrics mode.
+
+	\par Usage:
+		- Name: Size
+		- Format: "w:[float] h:[float]".
+
+	\par Where:
+		- w:[float]	specifies the minimum width as a floating point number, using the active metrics system for the Window.
+		- h:[float] specifies the minimum height as a floating point number, using the active metrics system for the Window.
+*/
+class Size : public Property
+{
+public:
+	Size() : Property(
+		"Size",
+		"Property to get/set the size of the Window.  Value is \"w:[float] h:[float]\" using the active metrics mode.",
+		"w:0.000000 h:0.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the window size.
+
+	This property offers access to the size setting for the window, using the relative metrics system.
+
+	\par Usage:
+		- Name: RelativeSize
+		- Format: "w:[float] h:[float]".
+
+	\par Where:
+		- w:[float]	specifies the minimum width as a floating point number, using the relative metrics system.
+		- h:[float] specifies the minimum height as a floating point number, using the relative metrics system.
+*/
+class RelativeSize : public Property
+{
+public:
+	RelativeSize() : Property(
+		"RelativeSize",
+		"Property to get/set the size of the Window.  Value is \"w:[float] h:[float]\" using relative metrics.",
+		"w:0.000000 h:0.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the window size.
+
+	This property offers access to the size setting for the window, using the absolute metrics system.
+
+	\par Usage:
+		- Name: AbsoluteSize
+		- Format: "w:[float] h:[float]".
+
+	\par Where:
+		- w:[float]	specifies the minimum width as a floating point number, using the absolute metrics system.
+		- h:[float] specifies the minimum height as a floating point number, using the absolute metrics system.
+*/
+class AbsoluteSize : public Property
+{
+public:
+	AbsoluteSize() : Property(
+		"AbsoluteSize",
+		"Property to get/set the size of the Window.  Value is \"w:[float] h:[float]\" using absolute metrics.",
+		"w:0.000000 h:0.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access window X position.
+
+	This property offers access to the X position for the window, using the Windows active metrics mode.
+
+	\par Usage:
+		- Name: XPosition
+		- Format: "[float]".
+
+	\par Where:
+		- [float]	specifies the x position co-ordinate as a floating point number, using the active metrics system for the Window.
+*/
+class XPosition : public Property
+{
+public:
+	XPosition() : Property(
+		"XPosition",
+		"Property to get/set the x co-ordinate position of the Window.  Value is a floating point number using the active metrics mode.",
+		"0.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access window X position.
+
+	This property offers access to the X position for the window, using the relative metrics system.
+
+	\par Usage:
+		- Name: RelativeXPosition
+		- Format: "[float]".
+
+	\par Where:
+		- [float]	specifies the x position co-ordinate as a floating point number, using the relative metrics system.
+*/
+class RelativeXPosition : public Property
+{
+public:
+	RelativeXPosition() : Property(
+		"RelativeXPosition",
+		"Property to get/set the x co-ordinate position of the Window.  Value is a floating point number using relative metrics.",
+		"0.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access window X position.
+
+	This property offers access to the X position for the window, using the absolute metrics system.
+
+	\par Usage:
+		- Name: AbsoluteXPosition
+		- Format: "[float]".
+
+	\par Where:
+		- [float]	specifies the x position co-ordinate as a floating point number, using the absolute metrics system.
+*/
+class AbsoluteXPosition : public Property
+{
+public:
+	AbsoluteXPosition() : Property(
+		"AbsoluteXPosition",
+		"Property to get/set the x co-ordinate position of the Window.  Value is a floating point number using absolute metrics.",
+		"0.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access window Y position.
+
+	This property offers access to the Y position for the window, using the Windows active metrics mode.
+
+	\par Usage:
+		- Name: YPosition
+		- Format: "[float]".
+
+	\par Where:
+		- [float]	specifies the y position co-ordinate as a floating point number, using the active metrics system for the Window.
+*/
+class YPosition : public Property
+{
+public:
+	YPosition() : Property(
+		"YPosition",
+		"Property to get/set the y co-ordinate position of the Window.  Value is a floating point number using the active metrics mode.",
+		"0.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access window Y position.
+
+	This property offers access to the Y position for the window, using the relative metrics system.
+
+	\par Usage:
+		- Name: RelativeYPosition
+		- Format: "[float]".
+
+	\par Where:
+		- [float]	specifies the y position co-ordinate as a floating point number, using the relative metrics system.
+*/
+class RelativeYPosition : public Property
+{
+public:
+	RelativeYPosition() : Property(
+		"RelativeYPosition",
+		"Property to get/set the y co-ordinate position of the Window.  Value is a floating point number using relative metrics.",
+		"0.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access window Y position.
+
+	This property offers access to the Y position for the window, using the absolute metrics system.
+
+	\par Usage:
+		- Name: AbsoluteYPosition
+		- Format: "[float]".
+
+	\par Where:
+		- [float]	specifies the y position co-ordinate as a floating point number, using the absolute metrics system.
+*/
+class AbsoluteYPosition : public Property
+{
+public:
+	AbsoluteYPosition() : Property(
+		"AbsoluteYPosition",
+		"Property to get/set the y co-ordinate position of the Window.  Value is a floating point number using absolute metrics.",
+		"0.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access window position.
+
+	This property offers access to the position for the window, using the Windows active metrics mode.
+
+	\par Usage:
+		- Name: Position
+		- Format: "x:[float] y:[float]".
+
+	\par Where:
+		- x:[float]	specifies the x position co-ordinate as a floating point number, using the active metrics system for the Window.
+		- y:[float]	specifies the y position co-ordinate as a floating point number, using the active metrics system for the Window.
+*/
+class Position : public Property
+{
+public:
+	Position() : Property(
+		"Position",
+		"Property to get/set the position of the Window.  Value is \"x:[float] y:[float]\" using the active metrics mode.",
+		"x:0.000000 y:0.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access window position.
+
+	This property offers access to the position for the window, using the relative metrics system.
+
+	\par Usage:
+		- Name: RelativePosition
+		- Format: "x:[float] y:[float]".
+
+	\par Where:
+		- x:[float]	specifies the x position co-ordinate as a floating point number, using the relative metrics system.
+		- y:[float]	specifies the y position co-ordinate as a floating point number, using the relative metrics system.
+*/
+class RelativePosition : public Property
+{
+public:
+	RelativePosition() : Property(
+		"RelativePosition",
+		"Property to get/set the position of the Window.  Value is \"x:[float] y:[float]\" using relative metrics.",
+		"x:0.000000 y:0.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access window position.
+
+	This property offers access to the position for the window, using the absolute metrics system.
+
+	\par Usage:
+		- Name: AbsolutePosition
+		- Format: "x:[float] y:[float]".
+
+	\par Where:
+		- x:[float]	specifies the x position co-ordinate as a floating point number, using the absolute metrics system.
+		- y:[float]	specifies the y position co-ordinate as a floating point number, using the absolute metrics system.
+*/
+class AbsolutePosition : public Property
+{
+public:
+	AbsolutePosition() : Property(
+		"AbsolutePosition",
+		"Property to get/set the position of the Window.  Value is \"x:[float] y:[float]\" using absolute metrics.",
+		"x:0.000000 y:0.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access window area rectangle.
+
+	This property offers access to the area rectangle (Rect) for the window, using the Windows active metrics mode.
+
+	\par Usage:
+		- Name: Rect
+		- Format: "l:[float] t:[float] r:[float] b:[float]".
+
+	\par Where:
+		- l:[float]	specifies the position of the left edge of the area as a floating point number, using the active metrics system for the Window.
+		- t:[float]	specifies the position of the top edge of the area as a floating point number, using the active metrics system for the Window.
+		- r:[float]	specifies the position of the right edge of the area as a floating point number, using the active metrics system for the Window.
+		- b:[float]	specifies the position of the bottom edge of the area as a floating point number, using the active metrics system for the Window.
+*/
+class Rect : public Property
+{
+public:
+	Rect() : Property(
+		"Rect",
+		"Property to get/set the area rectangle of the Window.  Value is \"l:[float] t:[float] r:[float] b:[float]\" (where l is left, t is top, r is right, and b is bottom) using the active metrics system.",
+		"l:0.000000 t:0.000000 r:0.000000 b:0.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access window area rectangle.
+
+	This property offers access to the area rectangle (Rect) for the window, using the relative metrics system.
+
+	\par Usage:
+		- Name: RelativeRect
+		- Format: "l:[float] t:[float] r:[float] b:[float]".
+
+	\par Where:
+		- l:[float]	specifies the position of the left edge of the area as a floating point number, using the relative metrics system.
+		- t:[float]	specifies the position of the top edge of the area as a floating point number, using the relative metrics system.
+		- r:[float]	specifies the position of the right edge of the area as a floating point number, using the relative metrics system.
+		- b:[float]	specifies the position of the bottom edge of the area as a floating point number, using the relative metrics system.
+*/
+class RelativeRect : public Property
+{
+public:
+	RelativeRect() : Property(
+		"RelativeRect",
+		"Property to get/set the area rectangle of the Window.  Value is \"l:[float] t:[float] r:[float] b:[float]\" (where l is left, t is top, r is right, and b is bottom) using relative metrics.",
+		"l:0.000000 t:0.000000 r:0.000000 b:0.000000") 
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access window area rectangle.
+
+	This property offers access to the area rectangle (Rect) for the window, using the absolute metrics system.
+
+	\par Usage:
+		- Name: AbsoluteRect
+		- Format: "l:[float] t:[float] r:[float] b:[float]".
+
+	\par Where:
+		- l:[float]	specifies the position of the left edge of the area as a floating point number, using the absolute metrics system.
+		- t:[float]	specifies the position of the top edge of the area as a floating point number, using the absolute metrics system.
+		- r:[float]	specifies the position of the right edge of the area as a floating point number, using the absolute metrics system.
+		- b:[float]	specifies the position of the bottom edge of the area as a floating point number, using the absolute metrics system.
+*/
+class AbsoluteRect : public Property
+{
+public:
+	AbsoluteRect() : Property(
+		"AbsoluteRect",
+		"Property to get/set the area rectangle of the Window.  Value is \"l:[float] t:[float] r:[float] b:[float]\" (where l is left, t is top, r is right, and b is bottom) using absolute metrics.",
+		"l:0.000000 t:0.000000 r:0.000000 b:0.000000") 
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access window Z-Order changing enabled setting.
+
+	This property offers access to the setting that controls whether z-order changes are enabled for the window.
+
+	\par Usage:
+		- Name: ZOrderChangeEnabled
+		- Format: "[text]".
+
+	\par Where [Text] is:
+		- "True" to indicate the Window should respect requests to change z-order.
+		- "False" to indicate the Window should not change it's z-order.
+*/
+class ZOrderChangeEnabled : public Property
+{
+public:
+	ZOrderChangeEnabled() : Property(
+		"ZOrderChangeEnabled",
+		"Property to get/set the 'z-order changing enabled' setting for the Window.  Value is either \"True\" or \"False\".",
+		"True")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+    Property to control whether the window will receive double/triple-click events.
+
+    This property offers access to the setting that controls whether a window will receive double-click and
+    triple-click events, or whether the window will receive multiple single mouse button down events instead.
+
+    \par Usage:
+        - Name: WantsMultiClickEvents
+        - Format: "[text]".
+
+    \par Where [Text] is:
+        - "True" to indicate the Window wants double-click and triple-click events.
+        - "False" to indicate the Window wants multiple single mouse button down events.
+*/
+class WantsMultiClickEvents : public Property
+{
+public:
+    WantsMultiClickEvents() : Property(
+        "WantsMultiClickEvents",
+        "Property to get/set whether the window will receive double-click and triple-click events.  Value is either \"True\" or \"False\".",
+        "True")
+    {}
+
+    String	get(const PropertyReceiver* receiver) const;
+    void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+    Property to control whether the window will receive autorepeat mouse button down events.
+
+    This property offers access to the setting that controls whether a window will receive autorepeat
+    mouse button down events.
+
+    \par Usage:
+        - Name: MouseButtonDownAutoRepeat
+        - Format: "[text]".
+
+    \par Where [Text] is:
+        - "True" to indicate the Window will receive autorepeat mouse button down events.
+        - "False" to indicate the Window will not receive autorepeat mouse button down events.
+*/
+class MouseButtonDownAutoRepeat : public Property
+{
+public:
+    MouseButtonDownAutoRepeat() : Property(
+        "MouseButtonDownAutoRepeat",
+        "Property to get/set whether the window will receive autorepeat mouse button down events.  Value is either \"True\" or \"False\".",
+        "False")
+    {}
+
+    String  get(const PropertyReceiver* receiver) const;
+    void    set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+    Property to access window autorepeat delay value.
+
+    This property offers access to the value that controls the initial delay for autorepeat mouse button down events.
+
+    \par Usage:
+        - Name: AutoRepeatDelay
+        - Format: "[float]".
+
+    \par Where:
+        - [float]   specifies the delay in seconds.
+*/
+class AutoRepeatDelay : public Property
+{
+public:
+    AutoRepeatDelay() : Property(
+        "AutoRepeatDelay",
+        "Property to get/set the autorepeat delay.  Value is a floating point number indicating the delay required in seconds.",
+        "0.3")
+    {}
+
+    String  get(const PropertyReceiver* receiver) const;
+    void    set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+    Property to access window autorepeat rate value.
+
+    This property offers access to the value that controls the generation rate for autorepeat mouse button down events.
+
+    \par Usage:
+        - Name: AutoRepeatRate
+        - Format: "[float]".
+
+    \par Where:
+        - [float]   specifies the rate at which autorepeat events will be generated in seconds.
+*/
+class AutoRepeatRate : public Property
+{
+public:
+    AutoRepeatRate() : Property(
+        "AutoRepeatRate",
+        "Property to get/set the autorepeat rate.  Value is a floating point number indicating the rate required in seconds.",
+        "0.06")
+    {}
+
+    String  get(const PropertyReceiver* receiver) const;
+    void    set(PropertyReceiver* receiver, const String& value);
+};
+
+/*!
+\brief
+	Property to access whether inputs are passed to child windows when
+    input is captured to this window.
+
+	\par Usage:
+		- Name: DistributeCapturedInputs
+		- Format: "[text]".
+
+	\par Where [Text] is:
+		- "True" to indicate 'captured' inputs should be passed to attached child windows.
+		- "False" to indicate 'captured' inputs should be passed to this window only.
+*/
+class DistributeCapturedInputs : public Property
+{
+public:
+	DistributeCapturedInputs() : Property(
+		"DistributeCapturedInputs",
+		"Property to get/set whether captured inputs are passed to child windows.  Value is either \"True\" or \"False\".",
+		"False")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+/*!
+\brief
+    Property to access the custom tooltip for this Window.
+
+    \par Usage:
+        - Name: CustomTooltipType
+        - Format: "[text]".
+
+    \par Where:
+        - [Text] is the typename of the custom tooltip for the Window.
+ */
+class CustomTooltipType : public Property
+{
+public:
+    CustomTooltipType() : Property(
+    "CustomTooltipType",
+    "Property to get/set the custom tooltip for the window.  Value is the type name of the custom tooltip.",
+    "")
+    {}
+
+    String  get(const PropertyReceiver* receiver) const;
+    void    set(PropertyReceiver* receiver, const String& value);
+};
+
+/*!
+\brief
+    Property to access the tooltip text for this Window.
+
+    \par Usage:
+        - Name: Tooltip
+        - Format: "[text]".
+
+    \par Where:
+        - [Text] is the tooltip text for this window.
+ */
+class Tooltip : public Property
+{
+public:
+    Tooltip() : Property(
+    "Tooltip",
+    "Property to get/set the tooltip text for the window.  Value is the tooltip text for the window.",
+    "")
+    {}
+
+    String  get(const PropertyReceiver* receiver) const;
+    void    set(PropertyReceiver* receiver, const String& value);
+};
+
+/*!
+\brief
+    Property to access whether the window inherits its tooltip text from its parent whn it has no tooltip text of its own.
+
+    \par Usage:
+        - Name: InheritsTooltipText
+        - Format: "[text]".
+
+    \par Where [Text] is:
+        - "True" to indicate the Window inherits its tooltip text from its parent.
+        - "False" to indicate the Window does not inherit its tooltip text.
+*/
+class InheritsTooltipText : public Property
+{
+public:
+    InheritsTooltipText() : Property(
+        "InheritsTooltipText",
+        "Property to get/set whether the window inherits its parents tooltip text when it has none of its own.  Value is either \"True\" or \"False\".",
+        "False")
+    {}
+
+    String  get(const PropertyReceiver* receiver) const;
+    void    set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access whether the window rises to the top of the z order when clicked.
+
+	\par Usage:
+		- Name: RiseOnClick
+		- Format: "[text]".
+
+	\par Where [Text] is:
+		- "True" to indicate the Window will rise to the surface when clicked.
+		- "False" to indicate the Window will not change z position when clicked.
+*/
+class RiseOnClick : public Property
+{
+public:
+    RiseOnClick() : Property(
+		"RiseOnClick",
+		"Property to get/set whether the window will come tot he top of the z order hwn clicked.  Value is either \"True\" or \"False\".",
+		"True")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+} // End of  WindowProperties namespace section
+
+
+} // End of  CEGUI namespace section
+
+#endif	// end of guard _CEGUIWindowProperties_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIImagesetManager.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIImagesetManager.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIImagesetManager.h	(revision 1092)
@@ -0,0 +1,232 @@
+/************************************************************************
+	filename: 	CEGUIImagesetManager.h
+	created:	21/2/2004
+	author:		Paul D Turner
+	
+	purpose:	Defines interface for ImagesetManager object
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIImagesetManager_h_
+#define _CEGUIImagesetManager_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIString.h"
+#include "CEGUISingleton.h"
+#include "CEGUIIteratorBase.h"
+#include <map>
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4275)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Class providing a shared library of Imageset objects to the system.
+
+	The ImagesetManager is used to create, access, and destroy Imageset objects.  The idea is that
+	the ImagesetManager will function as a central repository for imagery used within the GUI system,
+	and that such imagery can be accessed, via a unique name, by any interested party within the system.
+*/
+class CEGUIEXPORT ImagesetManager : public Singleton<ImagesetManager>
+{
+public:
+	/*!
+	\brief
+		Constructor for ImagesetManager objects
+	*/
+	ImagesetManager(void);
+
+
+	/*!
+	\brief
+		Destructor for ImagesetManager objects
+	*/
+	~ImagesetManager(void);
+
+
+	/*!
+	\brief
+		Return singleton ImagesetManager object
+
+	\return
+		Singleton ImagesetManager object
+	*/
+	static	ImagesetManager&	getSingleton(void);
+
+
+	/*!
+	\brief
+		Return pointer to singleton ImagesetManager object
+
+	\return
+		Pointer to singleton ImagesetManager object
+	*/
+	static	ImagesetManager*	getSingletonPtr(void);
+
+
+	/*!
+	\brief
+		Create a Imageset object with the given name and Texture
+
+		The created Imageset will be of limited use, and will require one or more images to be defined for the set.
+
+	\param name
+		String object containing the unique name for the Imageset being created.
+
+	\param texture
+		Texture object to be associated with the Imageset
+
+	\return
+		Pointer to the newly created Imageset object
+
+	\exception AlreadyExistsException	Thrown if an Imageset named \a name is already present in the system.
+	*/
+	Imageset*	createImageset(const String& name, Texture* texture);
+
+	/*!
+	\brief
+		Create an Imageset object from the specified file
+
+	\param filename
+		String object holding the name of the Imageset definition file which should be used to create the Imageset
+
+    \param resourceGroup
+        Resource group identifier to be passed to the resource manager.  NB: This affects the
+        imageset xml file only, the texture loaded may have its own group specified in the XML file.
+
+	\return
+		Pointer to the newly created Imageset object
+
+	\exception	AlreadyExistsException	Thrown if an Imageset named \a name is already present in the system.
+	\exception	FileIOException			Thrown if something goes wrong while processing the file \a filename.
+	*/
+	Imageset*	createImageset(const String& filename, const String& resourceGroup = "");
+
+
+	/*!
+	\brief
+		Destroys the Imageset with the specified name
+
+	\param name
+		String object containing the name of the Imageset to be destroyed.  If no such Imageset exists, nothing happens.
+
+	\return
+		Nothing.
+	*/
+	void	destroyImageset(const String& name);
+
+	/*!
+	\brief
+		Destroys the given Imageset object
+
+	\param imageset
+		Pointer to the Imageset to be destroyed.  If no such Imageset exists, nothing happens.
+
+	\return
+		Nothing.
+	*/
+	void	destroyImageset(Imageset* imageset);
+
+
+	/*!
+	\brief
+		Destroys all Imageset objects registered in the system
+
+	\return
+		Nothing
+	*/
+	void	destroyAllImagesets(void);
+
+
+	/*!
+	\brief
+		Returns a pointer to the Imageset object with the specified name
+
+	\param name
+		String object containing the name of the Imageset to return a pointer to
+
+	\return
+		Pointer to the requested Imageset object
+
+	\exception	UnknownObjectException	Thrown if no Imageset named \a name is present in within the system
+	*/
+	Imageset*	getImageset(const String& name) const;
+
+
+	/*!
+	\brief
+		Check for the existence of a named Imageset
+
+	\param name
+		String object containing the name of the Imageset to look for
+
+	\return
+		true if an Imageset named \a name is presently loaded in the system, else false.
+	*/
+	bool	isImagesetPresent(const String& name) const			{return d_imagesets.find(name) != d_imagesets.end();}
+
+
+	/*!
+	\brief
+		Notify the ImagesetManager of the current (usually new) display resolution.
+
+	\param size
+		Size object describing the display resolution
+
+	\return
+		Nothing
+	*/
+	void	notifyScreenResolution(const Size& size);
+
+
+private:
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	typedef	std::map<String, Imageset*>		ImagesetRegistry;
+	ImagesetRegistry	d_imagesets;
+
+public:
+	/*************************************************************************
+		Iterator stuff
+	*************************************************************************/
+	typedef	ConstBaseIterator<ImagesetRegistry>	ImagesetIterator;
+
+	/*!
+	\brief
+		Return a ImagesetManager::ImagesetIterator object to iterate over the available Imageset objects.
+	*/
+	ImagesetIterator	getIterator(void) const;
+};
+
+} // End of  CEGUI namespace section
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUIImageSetManager_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIWindowFactoryManager.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIWindowFactoryManager.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIWindowFactoryManager.h	(revision 1092)
@@ -0,0 +1,321 @@
+/************************************************************************
+	filename: 	CEGUIWindowFactoryManager.h
+	created:	22/2/2004
+	author:		Paul D Turner
+	
+	purpose:	Defines interface for WindowFactoryManager class
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIWindowFactoryManager_h_
+#define _CEGUIWindowFactoryManager_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIString.h"
+#include "CEGUISingleton.h"
+#include "CEGUILogger.h"
+#include "CEGUIIteratorBase.h"
+#include <map>
+#include <vector>
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4275)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*! 
+\brief
+	Class that manages WindowFactory objects
+*/
+class CEGUIEXPORT WindowFactoryManager : public Singleton<WindowFactoryManager>
+{
+public:
+	/*************************************************************************
+		Class used to track active alias targets
+	*************************************************************************/
+	class CEGUIEXPORT AliasTargetStack
+	{
+	public:
+		/*!
+		\brief
+			Constructor for WindowAliasTargetStack objects
+		*/
+		AliasTargetStack(void) {}
+
+
+		/*!
+		\brief
+			Destructor for WindowAliasTargetStack objects
+		*/
+		~AliasTargetStack(void) {}
+
+
+		/*!
+		\brief
+			Return a String holding the current target type for this stack
+
+		\return
+			reference to a String object holding the currently active target type name for this stack.
+		*/
+		const String&	getActiveTarget(void) const;
+
+		/*!
+		\brief
+			Return the number of stacked target types in the stack
+
+		\return
+			number of target types stacked for this alias.
+		*/
+		uint	getStackedTargetCount(void) const;
+
+
+	private:
+		friend class WindowFactoryManager;
+		typedef std::vector<String>	TargetTypeStack;		//!< Type used to implement stack of target type names.
+
+		TargetTypeStack	d_targetStack;		//!< Container holding the target types.
+	};
+
+
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructs a new WindowFactoryManager object.
+	*/
+	WindowFactoryManager(void)
+	{
+		Logger::getSingleton().logEvent((utf8*)"CEGUI::WindowFactoryManager singleton created");
+	}
+
+
+	/*!
+	\brief
+		Destructor for WindowFactoryManager objects
+	*/
+	~WindowFactoryManager(void)
+	{
+		Logger::getSingleton().logEvent((utf8*)"CEGUI::WindowFactoryManager singleton destroyed");
+	}
+
+
+	/*************************************************************************
+		Public Interface
+	*************************************************************************/
+	/*!
+	\brief
+		Return singleton WindowFactoryManager object
+
+	\return
+		Singleton WindowFactoryManager object
+	*/
+	static	WindowFactoryManager&	getSingleton(void);
+
+
+	/*!
+	\brief
+		Return pointer to singleton WindowFactoryManager object
+
+	\return
+		Pointer to singleton WindowFactoryManager object
+	*/
+	static	WindowFactoryManager*	getSingletonPtr(void);
+
+
+	/*!
+	\brief
+		Adds a new WindowFactory to the list of registered factories.
+
+	\param factory
+		Pointer to the WindowFactory to be added to the WindowManager.
+
+	\return
+		Nothing
+	
+	\exception NullObjectException		\a factory was null.
+	\exception AlreadyExistsException	\a factory provided a Window type name which is in use by another registered WindowFactory.
+	*/
+	void	addFactory(WindowFactory* factory);
+
+
+	/*!
+	\brief
+		Removes a WindowFactory from the list of registered factories.
+		
+	\note
+		The WindowFactory object is not destroyed (since it was created externally), instead it is just removed from the list.
+
+	\param name
+		String which holds the name (technically, Window type name) of the WindowFactory to be removed.  If \a name is not
+		in the list, no error occurs (nothing happens).
+
+	\return
+		Nothing
+	*/
+	void	removeFactory(const String& name);
+
+
+	/*!
+	\brief
+		Removes a WindowFactory from the list of registered factories.
+
+	\note
+		The WindowFactory object is not destroyed (since it was created externally), instead it is just removed from the list.
+
+	\param factory
+		Pointer to the factory object to be removed.  If \a factory is null, or if no such WindowFactory is in the list, no
+		error occurs (nothing happens).
+
+	\return
+		Nothing
+	*/
+	void	removeFactory(WindowFactory* factory);
+
+
+	/*!
+	\brief
+		Remove all WindowFactory objects from the list.
+
+	\return
+		Nothing
+	*/
+	void	removeAllFactories(void)		{d_factoryRegistry.clear();}
+
+
+	/*!
+	\brief
+		Return a pointer to the specified WindowFactory object.
+
+	\param type
+		String holding the Window object type to return the WindowFactory for.
+
+	\return
+		Pointer to the WindowFactory object that creates Windows of the type \a type.
+
+	\exception UnknownObjectException	No WindowFactory object for Window objects of type \a type was found.
+	*/
+	WindowFactory*	getFactory(const String& type) const;
+
+
+	/*!
+	\brief
+		Checks the list of registered WindowFactory objects for one which creates Window objects of the specified type.
+
+	\param name
+		String containing the name (technically, Window type name) of the WindowFactory to check for.
+
+	\return
+		true if a WindowFactory that creates Window objects of type \a name is registered.  Else, false.
+	*/
+	bool	isFactoryPresent(const String& name) const;
+
+
+	/*!
+	\brief
+		Adds an alias for a current window type.
+
+		This method allows you to create an alias for a specified window type.  This means that you can then use
+		either name as the type parameter when creating a window.
+
+	\note
+		You need to be careful using this system.  Creating an alias using a name that already exists will replace the previous
+		mapping for that alias.  Each alias name maintains a stack, which means that it is possible to remove an alias and have the
+		previous alias restored.  The windows created via an alias use the real type, so removing an alias after window creation is always
+		safe (i.e. it is not the same as removing a real factory, which would cause an exception when trying to destroy a window with a missing
+		factory).
+
+	\param aliasName
+		String object holding the alias name.  That is the name that \a targetType will also be known as from no on.
+
+	\param targetType
+		String object holding the type window type name that is to be aliased.  This type must already exist.
+
+	\return
+		Nothing.
+
+	\exception UnknownObjectException	thrown if \a targetType is not known within the system.
+	*/
+	void	addWindowTypeAlias(const String& aliasName, const String& targetType);
+
+
+	/*!
+	\brief
+		Remove the specified alias mapping.  If the alias mapping does not exist, nothing happens.
+
+	\note
+		You are required to supply both the alias and target names because there may exist more than one entry for a given
+		alias - therefore you are required to be explicit about which alias is to be removed.
+
+	\param aliasName
+		String object holding the alias name.
+
+	\param targetType
+		String object holding the type window type name that was aliased.
+
+	\return
+		Nothing.
+	*/
+	void	removeWindowTypeAlias(const String& aliasName, const String& targetType);
+
+
+private:
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	typedef	std::map<String, WindowFactory*>	WindowFactoryRegistry;		//!< Type used to implement registry of WindowFactory objects
+	typedef std::map<String, AliasTargetStack>	TypeAliasRegistry;		//!< Type used to implement registry of window type aliases.
+
+	WindowFactoryRegistry	d_factoryRegistry;			//!< The container that forms the WindowFactory registry
+	TypeAliasRegistry		d_aliasRegistry;			//!< The container that forms the window type alias registry.
+
+public:
+	/*************************************************************************
+		Iterator stuff
+	*************************************************************************/
+	typedef	ConstBaseIterator<WindowFactoryRegistry>	WindowFactoryIterator;
+	typedef ConstBaseIterator<TypeAliasRegistry>		TypeAliasIterator;
+
+	/*!
+	\brief
+		Return a WindowFactoryManager::WindowFactoryIterator object to iterate over the available WindowFactory types.
+	*/
+	WindowFactoryIterator	getIterator(void) const;
+
+
+	/*!
+	\brief
+		Return a WindowFactoryManager::TypeAliasIterator object to iterate over the defined aliases for window types.
+	*/
+	TypeAliasIterator	getAliasIterator(void) const;
+};
+
+} // End of  CEGUI namespace section
+
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUIWindowFactoryManager_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIEventSet.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIEventSet.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIEventSet.h	(revision 1092)
@@ -0,0 +1,271 @@
+/************************************************************************
+	filename: 	CEGUIEventSet.h
+	created:	21/2/2004
+	author:		Paul D Turner
+	
+	purpose:	Defines class for a named collection of Event objects
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIEventSet_h_
+#define _CEGUIEventSet_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIString.h"
+#include "CEGUIEvent.h"
+#include "CEGUIIteratorBase.h"
+#include <map>
+
+#if defined (_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Class that collects together a set of Event objects.
+
+	The EventSet used to collect Event objects together, and allow access
+	to them by a unique name
+*/
+class CEGUIEXPORT EventSet
+{
+public:
+	/*!
+	\brief
+		Constructor for EventSet objects
+	*/
+	EventSet();
+
+
+	/*!
+	\brief
+		Destructor for EventSet objects
+	*/
+	virtual ~EventSet(void);
+
+
+	/*!
+	\brief
+		Add a new Event to the EventSet with the given name.
+
+	\param name
+		String object containing the name to give the new Event.  The name must be unique for the EventSet.
+
+	\return
+		Nothing
+
+	\exception AlreadyExistsException	Thrown if an Event already exists named \a name.
+	*/
+	void	addEvent(const String& name);
+
+
+	/*!
+	\brief
+		Removes the Event with the given name.  All connections to the event are disconnected.
+
+	\param name
+		String object containing the name of the Event to remove.  If no such Event exists, nothing happens.
+
+	\return
+		Nothing.
+	*/
+	void	removeEvent(const String& name);
+
+
+	/*!
+	\brief
+		Remove all Event objects from the EventSet
+
+	\return
+		Nothing
+	*/
+	void	removeAllEvents(void);
+
+
+	/*!
+	\brief
+		Checks to see if an Event with the given name is present in the EventSet.
+
+	\return
+		true if an Event named \a name was found, or false if the Event was not found
+	*/
+	bool	isEventPresent(const String& name);
+
+
+	/*!
+	\brief
+		Subscribes the named Event.
+
+	\param name
+		String object containing the name of the Event to subscribe to.
+
+	\param subscriber
+		Function or object that is to be subscribed to the Event.
+
+	\return
+		Connection object that can be used to check the status of the Event connection and to disconnect (unsubscribe) from the Event.
+
+	\exception UnknownObjectException	Thrown if an Event named \a name is not in the EventSet
+	*/
+	virtual Event::Connection	subscribeEvent(const String& name, Event::Subscriber subscriber);
+
+
+	/*!
+	\brief
+		Subscribes the specified group of the named Event.
+
+	\param name
+		String object containing the name of the Event to subscribe to.
+
+	\param group
+		Group which is to be subscribed to.  Subscription groups are called in ascending order.
+
+	\param subscriber
+		Function or object that is to be subscribed to the Event.
+
+	\return
+		Connection object that can be used to check the status of the Event connection and to disconnect (unsubscribe) from the Event.
+
+	\exception UnknownObjectException	Thrown if an Event named \a name is not in the EventSet
+	*/
+	virtual Event::Connection	subscribeEvent(const String& name, Event::Group group, Event::Subscriber subscriber);
+	
+	
+	/*!
+	\brief
+		Subscribes the named Event to a scripted funtion
+
+	\param name
+		String object containing the name of the Event to subscribe to.
+
+	\param subscriber_name
+		String object containing the name of the script funtion that is to be subscribed to the Event.
+
+	\return
+		Connection object that can be used to check the status of the Event connection and to disconnect (unsubscribe) from the Event.
+
+	\exception UnknownObjectException	Thrown if an Event named \a name is not in the EventSet
+	*/
+	virtual Event::Connection	subscribeScriptedEvent(const String& name, const String& subscriber_name);
+	
+	
+	/*!
+	\brief
+		Subscribes the specified group of the named Event to a scripted funtion.
+
+	\param name
+		String object containing the name of the Event to subscribe to.
+
+	\param group
+		Group which is to be subscribed to.  Subscription groups are called in ascending order.
+
+	\param subscriber_name
+		String object containing the name of the script funtion that is to be subscribed to the Event.
+
+	\return
+		Connection object that can be used to check the status of the Event connection and to disconnect (unsubscribe) from the Event.
+
+	\exception UnknownObjectException	Thrown if an Event named \a name is not in the EventSet
+	*/
+	virtual Event::Connection	subscribeScriptedEvent(const String& name, Event::Group group, const String& subscriber_name);
+
+
+	/*!
+	\brief
+		Fires the named event passing the given EventArgs object.
+
+	\param name
+		String object holding the name of the Event that is to be fired (triggered)
+
+	\param args
+		The EventArgs (or derived) object that is to be bassed to each subscriber of the Event.  Once all subscribers
+		have been called the 'handled' field of the event is updated appropriately.
+		
+	\param eventNamespace
+		String object describing the global event namespace prefix for this event.
+
+	\return
+		Nothing.
+
+	\exception UnknownObjectException	Thrown if no Event named \a name was found in the EventSet.
+	*/
+	virtual void	fireEvent(const String& name, EventArgs& args, const String& eventNamespace = "");
+
+
+	/*!
+	\brief
+		Return whether the EventSet is muted or not.
+
+	\return
+		- true if the EventSet is muted.  All requests to fire events will be ignored.
+		- false if the EventSet is not muted.  All requests to fire events are processed as normal.
+	*/
+	bool	isMuted(void) const;
+
+
+	/*!
+	\brief
+		Set the mute state for this EventSet.
+
+	\param setting
+		- true if the EventSet is to be muted (no further event firing requests will be honoured until EventSet is unmuted).
+		- false if the EventSet is not to be muted and all events should fired as requested.
+
+	\return
+		Nothing.
+	*/
+	void	setMutedState(bool setting);
+
+
+protected:
+	// Do not allow copying, assignment, or any other usage than simple creation.
+	EventSet(EventSet& e) {}
+	EventSet& operator=(EventSet& e) {return *this;}
+
+	typedef std::map<String, Event*>	EventMap;
+	EventMap	d_events;
+
+	bool	d_muted;	//!< true if events for this EventSet have been muted.
+
+public:
+	/*************************************************************************
+		Iterator stuff
+	*************************************************************************/
+	typedef	ConstBaseIterator<EventMap>	EventIterator;
+
+	/*!
+	\brief
+		Return a EventSet::EventIterator object to iterate over the available events.
+	*/
+	EventIterator	getIterator(void) const;
+};
+
+} // End of  CEGUI namespace section
+
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUIEventSet_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIWindowFactory.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIWindowFactory.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIWindowFactory.h	(revision 1092)
@@ -0,0 +1,100 @@
+/************************************************************************
+	filename: 	CEGUIWindowFactory.h
+	created:	21/2/2004
+	author:		Paul D Turner
+	
+	purpose:	Defines abstract base class for WindowFactory objects
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIWindowFactory_h_
+#define _CEGUIWindowFactory_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIString.h"
+#include "CEGUIWindow.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Abstract class that defines the required interface for all WindowFactory objects
+
+	A WindowFactory is used to create and destroy windows of a specific type.  For every
+	type of Window object wihin the system (widgets, dialogs, movable windows etc) there
+	must be an associated WindowFactory registered with the WindowManager so that the system
+	knows how to create and destroy those types of Window base object.
+*/
+class CEGUIEXPORT WindowFactory
+{
+public:
+	/*!
+	\brief
+		Create a new Window object of whatever type this WindowFactory produces.
+
+	\param name
+		A unique name that is to be assigned to the newly created Window object
+
+	\return
+		Pointer to the new Window object.
+	*/
+	virtual	Window*	createWindow(const String& name) = 0;
+
+	/*!
+	\brief
+		Destroys the given Window object.
+
+	\param window
+		Pointer to the Window object to be destroyed.
+
+	\return
+		Nothing.
+	*/
+	virtual void	destroyWindow(Window* window) = 0;
+
+	/*!
+	\brief
+		Get the string that describes the type of Window object this WindowFactory produces.
+
+	\return
+		String object that contains the unique Window object type produced by this WindowFactory
+	*/
+	const String& getTypeName(void) const		{return d_type;}
+
+protected:
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	WindowFactory(const String& type) : d_type(type) {}
+
+public:		// luabind compatibility
+	virtual ~WindowFactory(void) {}
+
+protected:
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	String		d_type;		//!< String holding the type of object created by this factory
+};
+
+} // End of  CEGUI namespace section
+
+#endif	// end of guard _CEGUIWindowFactory_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIGUILayout_xmlHandler.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIGUILayout_xmlHandler.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIGUILayout_xmlHandler.h	(revision 1092)
@@ -0,0 +1,129 @@
+/************************************************************************
+	filename: 	CEGUIGUILayout_xmlHandler.h
+	created:	5/7/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to XML parser for GUILayout files
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIGUILayout_xmlHandler_h_
+#define _CEGUIGUILayout_xmlHandler_h_
+
+#include "CEGUIWindowManager.h"
+#include "CEGUIWindow.h"
+#include "CEGUIXMLHandler.h"
+
+#include <vector>
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Handler class used to parse the GUILayout XML files using SAX2
+*/
+class GUILayout_xmlHandler : public XMLHandler
+{
+	typedef WindowManager::PropertyCallback PropertyCallback;
+public:
+	/*************************************************************************
+		Construction & Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for GUILayout_xmlHandler objects
+	*/
+	GUILayout_xmlHandler(const String& name_prefix, PropertyCallback* callback = NULL, void* userdata = NULL) : 
+	  d_root(NULL),
+	  d_namingPrefix(name_prefix),
+	  d_propertyCallback(callback),
+	  d_userData(userdata)
+	  {}
+
+	/*!
+	\brief
+		Destructor for GUILayout_xmlHandler objects
+	*/
+	virtual ~GUILayout_xmlHandler(void) {}
+
+	/*************************************************************************
+		SAX2 Handler overrides
+	*************************************************************************/ 
+	/*!
+	\brief
+		document processing (only care about elements, schema validates format)
+	*/
+    virtual void elementStart(const String& element, const XMLAttributes& attributes);
+    virtual void elementEnd(const String& element);
+
+	/*************************************************************************
+		Functions used by our implementation
+	*************************************************************************/
+	/*!
+	\brief
+		Destroy all windows created so far.
+	*/
+	void	cleanupLoadedWindows(void);
+
+
+	/*!
+	\brief
+		Return a pointer to the 'root' window created.
+	*/
+	Window*	getLayoutRootWindow(void) const;
+
+private:
+	/*************************************************************************
+		Implementation Constants
+	*************************************************************************/
+	static const String GUILayoutElement;				//!< Tag name for GUILayout elements.
+	static const String WindowElement;				//!< Tag name for Window elements.
+	static const String PropertyElement;				//!< Tag name for Property elements.
+	static const String LayoutImportElement;			//!< Tag name for LayoutImport elements.
+	static const String EventElement;					//!< Tag name for Event elements.
+	static const char	WindowTypeAttribute[];			//!< Attribute name that stores the type of Window to create.
+	static const char	WindowNameAttribute[];			//!< Attribute name that stores the name of the window to create.
+	static const char	PropertyNameAttribute[];		//!< Attribute name that stores the name of the property to set.
+	static const char	PropertyValueAttribute[];		//!< Attribute name that stores the value to pass to the property.
+	static const char	LayoutParentAttribute[];		//!< Attribute name that stores the name of the window to attach the layout to.
+	static const char	LayoutImportFilenameAttribute[];//!< Attribute name that stores the file name of the layout to import.
+	static const char	LayoutImportPrefixAttribute[];	//!< Attribute name that stores the prefix to use when loading the imported layout.
+    static const char	LayoutImportResourceGroupAttribute[]; //!< Attribute name that stores the resource group identifier used when loading imported file.
+	static const char	EventNameAttribute[];			//!< Attribute name that stores the event name to be subscribed.
+	static const char	EventFunctionAttribute[];		//!< Attribute name that stores the name of the scripted function to be bound.
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	typedef std::vector<Window*>	WindowStack;	
+	Window*	d_root;				//!< Will point to first window created.
+	WindowStack	d_stack;		//!< Stack used to keep track of what we're doing to which window.
+	String		d_layoutParent;	//!< Name of the parent window to attach the loaded layout to.
+	const String&		d_namingPrefix;	//!< Prefix that is to prepend all names of created windows.
+	PropertyCallback*	d_propertyCallback; //!< Callback for every property loaded
+	void*				d_userData;			//!< User data for the property callback
+};
+
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIGUILayout_xmlHandler_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUISingleton.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUISingleton.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUISingleton.h	(revision 1092)
@@ -0,0 +1,75 @@
+/************************************************************************
+	filename: 	CEGUISingleton.h
+	created:	22/2/2004
+	author:		Paul D Turner
+	
+	purpose:	Singleton Base Class
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+/*************************************************************************
+	
+	The code in this file is taken from article 1.3 in the the book:
+	Game Programming Gems from Charles River Media
+
+*************************************************************************/
+#ifndef _CEGUISingleton_h_
+#define _CEGUISingleton_h_
+
+#include "CEGUIBase.h"
+#include <cassert>
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/* Copyright (C) Scott Bilas, 2000. 
+ * All rights reserved worldwide.
+ *
+ * This software is provided "as is" without express or implied
+ * warranties. You may freely copy and compile this source into
+ * applications you distribute provided that the copyright text
+ * below is included in the resulting source code, for example:
+ * "Portions Copyright (C) Scott Bilas, 2000"
+ */
+
+
+template <typename T> class CEGUIEXPORT Singleton
+{
+protected:
+    static T* ms_Singleton;
+
+public:
+    Singleton( void )
+    {
+        assert( !ms_Singleton );
+        ms_Singleton = static_cast<T*>(this);
+    }
+   ~Singleton( void )
+        {  assert( ms_Singleton );  ms_Singleton = 0;  }
+    static T& getSingleton( void )
+        {  assert( ms_Singleton );  return ( *ms_Singleton );  }
+    static T* getSingletonPtr( void )
+        {  return ( ms_Singleton );  }
+};
+
+} // End of  CEGUI namespace section
+
+
+
+#endif	// end of guard _CEGUISingleton_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIResourceProvider.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIResourceProvider.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIResourceProvider.h	(revision 1092)
@@ -0,0 +1,132 @@
+/************************************************************************
+	filename: 	CEGUIResourceProvider.h
+	created:	8/7/2004
+	author:		James '_mental_' O'Sullivan
+	
+	purpose:	Defines abstract base class for loading DataContainer objects
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIResourceProvider_h_
+#define _CEGUIResourceProvider_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIDataContainer.h"
+#include "CEGUIString.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Abstract class that defines the required interface for all resource provider sub-classes.
+
+	A ResourceProvider is used to load both XML and binary data from an external source.  This could be from a filesystem or the resource manager of a specific renderer.
+*/
+class CEGUIEXPORT ResourceProvider
+{
+public:
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+    /*!
+    \brief
+        Constructor for the ResourceProvider class
+    */
+	ResourceProvider() { }
+
+    /*!
+    \brief
+        Destructor for the ResourceProvider class
+    */
+	virtual ~ResourceProvider(void) { }
+
+    /*************************************************************************
+        Accessor functions
+    *************************************************************************/
+
+//    /*!
+//    \brief
+//        Load XML data using InputSource objects.
+//
+//    \param filename
+//        String containing a filename of the resource to be loaded.
+//
+//	\param output
+//		Reference to a InputSourceContainer object to load the data into.
+//   */
+//    virtual void loadInputSourceContainer(const String& filename, InputSourceContainer& output) = 0;
+
+    /*!
+    \brief
+        Load raw binary data.
+
+    \param filename
+        String containing a filename of the resource to be loaded.
+
+	\param output
+        Reference to a RawDataContainer object to load the data into.
+
+    \param resourceGroup
+        Optional String that may be used by implementations to identify the group from
+        which the resource should be loaded.
+    */
+    virtual void loadRawDataContainer(const String& filename, RawDataContainer& output, const String& resourceGroup) = 0;
+
+    /*!
+    \brief
+        Unload raw binary data. This gives the resource provider a change to unload the data
+        in its own way before the data container object is destroyed.  If it does nothing,
+        then the object will release its memory.
+
+	\param data
+        Reference to a RawDataContainer object that is about to be destroyed.
+
+    */
+    virtual void unloadRawDataContainer(RawDataContainer& data)  { }
+
+    /*!
+    \brief
+        Return the current default resource group identifier.
+
+    \return
+        String object containing the currently set default resource group identifier.
+    */
+    const String&   getDefaultResourceGroup(void) const     { return d_defaultResourceGroup; }
+    
+    /*!
+    \brief
+        Set the default resource group identifier.
+
+    \param resourceGroup
+        String object containing the default resource group identifier to be used.
+
+    \return
+        Nothing.
+    */
+    void    setDefaultResourceGroup(const String& resourceGroup)    { d_defaultResourceGroup = resourceGroup; }
+
+protected:
+    String  d_defaultResourceGroup;     //!< Default resource group identifier.
+};
+
+} // End of  CEGUI namespace section
+
+#endif	// end of guard _CEGUIResourceProvider_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIRefPtr.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIRefPtr.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIRefPtr.h	(revision 1092)
@@ -0,0 +1,130 @@
+/************************************************************************
+	filename: 	CEGUIRefPtr.h
+	created:	15/10/2004
+	author:		Gerald Lindsly
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIRefPtr_h_
+#define _CEGUIRefPtr_h_
+
+#include "CEGUIBase.h"
+
+namespace CEGUI {
+
+class CEGUIEXPORT Referenced
+{
+public:
+  Referenced() : d_refCount(0) {}
+  Referenced(const Referenced&) : d_refCount(0) {}
+
+  Referenced& operator=(Referenced&) { return *this; }
+
+  /* Increment the reference count by one, indicating that 
+      a pointer to this object is referencing it. */
+  void addRef() const { ++d_refCount; }
+  
+  /* Decrement the reference count by one, indicating that 
+     a pointer to this object is no longer referencing it. 
+     if the count drops to zero, this is deleted. */
+  void release() const { if (!--d_refCount) delete this; }
+  
+  /* Decrement the reference count by one, indicating that 
+      a pointer to this object is no longer referencing it;
+      however, do not delete it, even if ref count goes to 0. */
+  void releaseButKeep() const { --d_refCount; }
+  
+  /** return the number pointers currently referencing this object. */
+  int refCount() const { return d_refCount; }
+ 
+protected:
+  virtual ~Referenced();
+  mutable int d_refCount;
+};
+
+
+template<class T> class RefPtr
+{
+  T* d_p;
+
+public:
+//  RefPtr()     : d_p(0) {}
+  
+  RefPtr()     : d_p(new T()) { d_p->addRef(); }
+
+  RefPtr(T* t) : d_p(t) { if (t)   d_p->addRef(); }
+  RefPtr(const RefPtr& r) : d_p(r.d_p)
+                        { if (r.d_p) d_p->addRef(); }
+  ~RefPtr()
+  { if (d_p) {
+      d_p->release();
+      d_p = 0;
+    }
+  }
+
+  RefPtr& operator=(T* q)
+  {
+    if (d_p != q) {
+      T* t = d_p;
+      d_p = q;
+      if (q) q->addRef();
+      if (t) t->release();
+    }
+    return *this;
+  }
+
+  RefPtr& operator=(const RefPtr& r) { return *this = r.d_p; }
+
+  bool operator==(const RefPtr& r) const { return d_p == r.d_p; }
+  bool operator!=(const RefPtr& r) const { return d_p != r.d_p; }
+  bool operator< (const RefPtr& r) const { return d_p <  r.d_p; }
+  bool operator> (const RefPtr& r) const { return d_p >  r.d_p; }
+
+  bool operator ==(const T* q) const { return d_p == q; }
+  bool operator !=(const T* q) const { return d_p != q; }
+  bool operator < (const T* q) const { return d_p <  q; }
+  bool operator > (const T* q) const { return d_p >  q; }
+
+
+        T& operator*()        { return *d_p; }
+  const T& operator*() const  { return *d_p; }
+
+        T* operator->()       { return d_p; }
+  const T* operator->() const { return d_p; }
+
+        T* get()              { return d_p; }
+  const T* get() const        { return d_p; }
+
+  bool operator!() const	    { return d_p == 0; }
+  bool valid() const	        { return d_p != 0; }
+
+  T* release()
+  {
+    T* t = d_p;
+    if (d_p) {
+      d_p->releaseButKeep();
+      d_p = 0;
+    } 
+    return t;
+  }
+};
+
+} // end namespace CEGUI
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIcolour.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIcolour.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIcolour.h	(revision 1092)
@@ -0,0 +1,268 @@
+/************************************************************************
+	filename: 	CEGUIcolour.h
+	created:	20/8/2004
+	author:		Paul D Turner (with code from Jeff Leigh)
+	
+	purpose:	Defines interface to the colour class used to represent
+				colour values within the system
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIcolour_h_
+#define _CEGUIcolour_h_
+
+#include "CEGUIBase.h"
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+typedef uint32 argb_t;    //!< 32 bit ARGB representation of a colour.
+
+/*!
+\brief
+	Class representing colour values within the system.
+*/
+class CEGUIEXPORT colour
+{
+public:
+	/*************************************************************************
+		Construction & Destruction
+	*************************************************************************/
+	colour(void);
+	colour(const colour& val);
+	colour(float red, float green, float blue, float alpha = 1.0f);
+	colour(argb_t argb);
+
+	/*************************************************************************
+		Accessors
+	*************************************************************************/
+	argb_t	getARGB(void) const
+	{
+		if (!d_argbValid)
+		{
+			d_argb = calculateARGB();
+			d_argbValid = true;
+		}
+
+		return d_argb;
+	}
+	
+	float	getAlpha(void) const	{return d_alpha;}
+	float	getRed(void) const		{return d_red;}
+	float	getGreen(void) const	{return d_green;}
+	float	getBlue(void) const		{return d_blue;}
+
+	float	getHue(void) const;
+	float	getSaturation(void) const;
+	float	getLumination(void) const;
+
+
+	/*************************************************************************
+		Manipulators
+	*************************************************************************/
+	void	setARGB(argb_t argb);
+	inline void setAlpha(float alpha)
+    {
+        d_argbValid = false;
+        d_alpha = alpha;
+    }
+
+	inline void setRed(float red)
+    {   
+        d_argbValid = false;
+        d_red = red;
+    }
+
+	inline void setGreen(float green)
+    {
+        d_argbValid = false;
+        d_green = green;
+    }
+
+	inline void setBlue(float blue)
+    {
+        d_argbValid = false;
+        d_blue = blue;
+    }
+
+	inline void set(float red, float green, float blue, float alpha = 1.0f)
+    {
+        d_argbValid = false;
+        d_alpha = alpha;
+        d_red = red;
+        d_green = green;
+        d_blue = blue;
+    }
+
+	inline void setRGB(float red, float green, float blue)
+    {
+        d_argbValid = false;
+        d_red = red;
+        d_green = green;
+        d_blue = blue;
+    }
+
+	inline void setRGB(const colour& val)
+    {
+        d_red = val.d_red;
+        d_green = val.d_green;
+        d_blue = val.d_blue;
+        if (d_argbValid)
+        {
+            d_argbValid = val.d_argbValid;
+            if (d_argbValid)
+                d_argb = (d_argb & 0xFF000000) | (val.d_argb & 0x00FFFFFF);
+        }
+    }
+
+	void	setHSL(float hue, float saturation, float luminance, float alpha = 1.0f);
+
+	void	invertColour(void);
+	void	invertColourWithAlpha(void);
+
+	/*************************************************************************
+		Operators
+	*************************************************************************/
+	inline colour& operator=(argb_t val)
+    {
+        setARGB(val);
+        return *this;
+    }
+
+	inline colour& operator=(const colour& val)
+    {
+        d_alpha = val.d_alpha;
+        d_red   = val.d_red;
+        d_green = val.d_green;
+        d_blue  = val.d_blue;
+        d_argb  = val.d_argb;
+        d_argbValid = val.d_argbValid;
+
+        return *this;
+    }
+
+	inline colour& operator&=(argb_t val)
+    {
+        setARGB(getARGB() & val);
+        return *this;
+    }
+
+	inline colour& operator&=(const colour& val)
+    {
+        setARGB(getARGB() & val.getARGB());
+        return *this;
+    }
+
+	inline colour& operator|=(argb_t val)
+    {
+        setARGB(getARGB() | val);
+        return *this;
+    }
+
+	inline colour& operator|=(const colour& val)
+    {
+        setARGB(getARGB() | val.getARGB());
+        return *this;
+    }
+
+	inline colour& operator<<=(int val)
+    {
+        setARGB(getARGB() << val);
+        return *this;
+    }
+
+	inline colour& operator>>=(int val)
+    {
+        setARGB(getARGB() >> val);
+        return *this;
+    }
+
+	inline colour operator+(const colour& val) const
+    {
+        return colour(
+            d_red   + val.d_red, 
+            d_green + val.d_green, 
+            d_blue  + val.d_blue,
+            d_alpha + val.d_alpha
+        );
+    }
+
+	inline colour operator-(const colour& val) const
+    {
+        return colour(
+            d_red   - val.d_red,
+            d_green - val.d_green,
+            d_blue  - val.d_blue,
+            d_alpha - val.d_alpha
+        );
+    }
+
+	inline colour operator*(const float val) const
+    {       
+        return colour(
+            d_red   * val, 
+            d_green * val, 
+            d_blue  * val,
+            d_alpha * val 
+        );  
+    }
+
+	/*************************************************************************
+		Compare operators
+	*************************************************************************/
+	inline bool operator==(const colour& rhs) const
+    {
+        return d_red   == rhs.d_red   &&
+               d_green == rhs.d_green &&
+               d_blue  == rhs.d_blue  &&
+               d_alpha == rhs.d_alpha;
+    }
+
+	inline bool operator!=(const colour& rhs) const
+    {
+        return !(*this == rhs);
+    }
+
+	//
+	// Conversion operators
+	//
+	operator argb_t() const		{return getARGB();}
+
+private:
+	/*************************************************************************
+		Implementation Methods
+	*************************************************************************/
+	/*!
+	\brief
+		calculate and return the ARGB value based on the current colour component values.
+	*/
+	argb_t	calculateARGB(void) const;
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	float d_alpha, d_red, d_green, d_blue;		//!< Colour components.
+	mutable argb_t d_argb;						//!< Colour as ARGB value.
+	mutable bool d_argbValid;					//!< True if argb value is valid.
+};
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIcolour_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIScheme.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIScheme.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIScheme.h	(revision 1092)
@@ -0,0 +1,188 @@
+/************************************************************************
+	filename: 	CEGUIScheme.h
+	created:	21/2/2004
+	author:		Paul D Turner
+	
+	purpose:	Defines abstract base class for the GUI Scheme object.
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIScheme_h_
+#define _CEGUIScheme_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIString.h"
+#include "CEGUISchemeManager.h"
+
+#include <vector>
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	A class that groups a set of GUI elements and initialises the system to access those elements.
+
+	A GUI Scheme is a high-level construct that loads and initialises various lower-level objects
+	and registers them within the system for usage.  So, for example, a Scheme might create some
+	Imageset objects, some Font objects, and register a collection of WindowFactory objects within
+	the system which would then be in a state to serve those elements to client code.
+*/
+class CEGUIEXPORT Scheme
+{
+	friend class Scheme_xmlHandler;
+public:
+	/*!
+	\brief
+		Loads all resources for this scheme.
+
+	\return
+		Nothing.
+	*/
+	void	loadResources(void);
+
+
+	/*!
+	\brief
+		Unloads all resources for this scheme.  This should be used very carefully.
+
+	\return
+		Nothing.
+	*/
+	void	unloadResources(void);
+
+
+	/*!
+	\brief
+		Return whether the resources for this Scheme are all loaded.
+
+	\return
+		true if all resources for the Scheme are loaded and available, or false of one or more resource is not currently loaded.
+	*/
+	bool	resourcesLoaded(void) const;
+
+
+	/*!
+	\brief
+		Return the name of this Scheme.
+
+	\return
+		String object containing the name of this Scheme.
+	*/
+	const String& getName(void) const		{return d_name;}
+
+private:
+	/*************************************************************************
+		Implementation Constants
+	*************************************************************************/
+	static const char	GUISchemeSchemaName[];			//!< Filename of the XML schema used for validating GUIScheme files.
+
+	/*************************************************************************
+		Friends
+	*************************************************************************/
+	friend	Scheme* SchemeManager::loadScheme(const String& scheme_filename, const String& resourceGroup);
+	friend	void	SchemeManager::unloadScheme(const String& scheme_name);
+
+
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Creates a scheme object from the data specified in the file \a filename
+
+	\param filename
+		String object holding the name of the file to use when creating this Scheme object.
+
+    \param resourceGroup
+        Group identifier to be passed to the resource provider when loading the scheme
+        specification file.
+
+	\return
+		Nothing.
+	*/
+	Scheme(const String& filename, const String& resourceGroup);
+
+
+public:		// for luabind compatibility
+	/*!
+	\brief
+		Destroys a Scheme object
+
+	\return
+		Nothing
+	*/
+	~Scheme(void);
+
+	
+private:
+	/*************************************************************************
+		Structs used to hold scheme information
+	*************************************************************************/
+	struct LoadableUIElement
+	{
+		String	name;
+		String	filename;
+        String  resourceGroup;
+	};
+
+	struct	UIElementFactory
+	{
+		String name;
+	};
+
+	struct	UIModule
+	{
+		String name;
+		FactoryModule*	module;
+		std::vector<UIElementFactory>	factories;
+	};
+
+	struct AliasMapping
+	{
+		String aliasName;
+		String targetName;
+	};
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	String	d_name;			//!< the name of this scheme.
+
+	std::vector<LoadableUIElement>		d_imagesets;
+	std::vector<LoadableUIElement>		d_fonts;
+	std::vector<UIModule>				d_widgetModules;
+	std::vector<AliasMapping>			d_aliasMappings;
+};
+
+} // End of  CEGUI namespace section
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUIScheme_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIConfig.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIConfig.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIConfig.h	(revision 1092)
@@ -0,0 +1,89 @@
+/************************************************************************
+	filename: 	CEGUIConfig.h
+	created:	1/10/2004
+	author:		Paul D Turner
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+//////////////////////////////////////////////////////////////////////////
+/*************************************************************************
+
+This file can be used to set certain configuration options which are used
+when compiling Crazy Eddie's GUI System and associated components.
+
+Each item in here has a comment to describe what it's for.
+
+*************************************************************************/
+//////////////////////////////////////////////////////////////////////////
+#ifndef _CEGUIConfig_h_
+#define _CEGUIConfig_h_
+
+
+//////////////////////////////////////////////////////////////////////////
+// Uncomment this line if you are using the 0.14.x or earlier release of Ogre.
+//////////////////////////////////////////////////////////////////////////
+//#define CEGUI_USEOLDOGRESTRING 1
+
+
+//////////////////////////////////////////////////////////////////////////
+// comment this line to suppress the auto appending of '_d' to loaded module
+// names under Win32.
+//////////////////////////////////////////////////////////////////////////
+#define CEGUI_LOAD_MODULE_APPEND_SUFFIX_FOR_DEBUG 1
+
+
+//////////////////////////////////////////////////////////////////////////
+// this is what gets appended to module names when 
+// CEGUI_LOAD_MODULE_APPEND_FOR_DEBUG is defined
+//////////////////////////////////////////////////////////////////////////
+#define CEGUI_LOAD_MODULE_DEBUG_SUFFIX	"_d"
+
+
+//////////////////////////////////////////////////////////////////////////
+// Comment this line to remove the alignment of elements to pixel
+// boundaries.  This may give you a performance boost at the expense
+// of visual quality
+//////////////////////////////////////////////////////////////////////////
+#define CEGUI_ALIGN_ELEMENTS_TO_PIXELS 1
+
+//////////////////////////////////////////////////////////////////////////
+// The following are intended for MSVC++ and X-Code users.
+// 
+// The Linux build can both auto-configure itself, and also take
+// configure parameters which control the settings presented below.
+//////////////////////////////////////////////////////////////////////////
+#if defined(_MSC_VER) || defined(__APPLE__)
+
+//////////////////////////////////////////////////////////////////////////
+// Comment this line if you wish to remove the Xerces-C++ dependency.
+// The system will revert to using an embedded version of TinyXML instead.
+//////////////////////////////////////////////////////////////////////////
+//#define CEGUI_WITH_XERCES
+
+//////////////////////////////////////////////////////////////////////////
+// Comment/Uncomment these lines to control renderer use in samples where
+// MSVC/XCode are used (since they don't auto-detect such things).
+//////////////////////////////////////////////////////////////////////////
+#define CEGUI_SAMPLES_USE_OPENGL
+//#define CEGUI_SAMPLES_USE_OGRE
+//#define CEGUI_SAMPLES_USE_IRRLICHT
+
+#endif // defined(_MSC_VER) || defined(__APPLE__)
+
+#endif	// end of guard _CEGUIConfig_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIXercesParser.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIXercesParser.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIXercesParser.h	(revision 1092)
@@ -0,0 +1,98 @@
+/************************************************************************
+    filename:   CEGUIXercesParser.h
+    created:    Sat Mar 12 2005
+    author:     Paul D Turner
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+ 
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+ 
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+ 
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIXercesParser_h_
+#define _CEGUIXercesParser_h_
+
+#include "CEGUIXMLParser.h"
+
+// Xerces-C includes
+#include <xercesc/framework/MemBufInputSource.hpp>
+#include <xercesc/util/PlatformUtils.hpp>
+#include <xercesc/util/TransService.hpp>
+#include <xercesc/util/XMLString.hpp>
+#include <xercesc/sax2/Attributes.hpp>
+#include <xercesc/sax2/DefaultHandler.hpp>
+#include <xercesc/sax2/SAX2XMLReader.hpp>
+#include <xercesc/sax2/XMLReaderFactory.hpp>
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+    class XercesHandler : public XERCES_CPP_NAMESPACE::DefaultHandler
+    {
+    public:
+        XercesHandler(XMLHandler& handler);
+        ~XercesHandler(void);
+
+        // Implementation of methods in Xerces DefaultHandler.
+        void startElement(const XMLCh* const uri, const XMLCh* const localname, const XMLCh* const qname, const XERCES_CPP_NAMESPACE::Attributes& attrs);
+        void endElement(const XMLCh* const uri, const XMLCh* const localname, const XMLCh* const qname);
+        void warning (const XERCES_CPP_NAMESPACE::SAXParseException &exc);
+        void error (const XERCES_CPP_NAMESPACE::SAXParseException &exc);
+        void fatalError (const XERCES_CPP_NAMESPACE::SAXParseException &exc);
+
+    protected:
+        XMLHandler& d_handler;      //!< This is the 'real' CEGUI based handler which we interface via.
+    };
+
+    /*!
+    \brief
+        Implementation of XMLParser using Xerces-C++
+     */
+    class XercesParser : public XMLParser
+    {
+    public:
+        XercesParser(void);
+        ~XercesParser(void);
+
+        // Implementation of public abstract interface
+        void parseXMLFile(XMLHandler& handler, const String& filename, const String& schemaName, const String& resourceGroup);
+
+        // Internal methods
+        /*!
+        \brief
+            Populate the CEGUI::XMLAttributes object with attribute data from the Xerces attributes block.
+         */
+        static void populateAttributesBlock(const XERCES_CPP_NAMESPACE::Attributes& src, XMLAttributes& dest);
+
+        /*!
+        \brief
+            Return a CEGUI::String containing the Xerces XMLChar string data in \a xmlch_str.
+         */
+        static String transcodeXmlCharToString(const XMLCh* const xmlch_str);
+
+    protected:
+        static void initialiseSchema(XERCES_CPP_NAMESPACE::SAX2XMLReader* reader, const String& schemaName, const String& xmlFilename, const String& resourceGroup);
+        static XERCES_CPP_NAMESPACE::SAX2XMLReader* createReader(XERCES_CPP_NAMESPACE::DefaultHandler& handler);
+        static void doParse(XERCES_CPP_NAMESPACE::SAX2XMLReader* parser, const String& xmlFilename, const String& resourceGroup);
+
+        // Implementation of abstract interface.
+        bool initialiseImpl(void);
+        void cleanupImpl(void);
+    };
+
+} // End of  CEGUI namespace section
+
+
+#endif  // end of guard _CEGUIXercesParser_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIString.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIString.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIString.h	(revision 1092)
@@ -0,0 +1,5574 @@
+/************************************************************************
+	filename: 	CEGUIString.h
+	created:	26/2/2004
+	author:		Paul D Turner
+	
+	purpose:	Defines string class used within the GUI system.
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIString_h_
+#define _CEGUIString_h_
+
+#include "CEGUIBase.h"
+#include <string>
+#include <string.h>
+#include <stdexcept>
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+#define STR_QUICKBUFF_SIZE	32
+	/*************************************************************************
+		Basic Types
+	*************************************************************************/
+	typedef		uint8	utf8;
+	//typedef		uint16	utf16;  // removed typedef to prevent usage, as utf16 is not supported (yet)
+	typedef		uint32	utf32;
+
+/*!
+\brief
+	String class used within the GUI system.
+
+	For the most part, this class can replace std::string in basic usage.  However, currently String does not use the
+	current locale, and also comparisons do not take into account the Unicode data tables, so are not 'correct'
+	as such.
+*/
+class CEGUIEXPORT String
+{
+public:
+	/*************************************************************************
+		Integral Types
+	*************************************************************************/
+	typedef		utf32			value_type;					//!< Basic 'code point' type used for String (utf32)
+	typedef		size_t			size_type;					//!< Unsigned type used for size values and indices
+	typedef		ptrdiff_t		difference_type;			//!< Signed type used for differences
+	typedef		utf32&			reference;					//!< Type used for utf32 code point references
+	typedef		const utf32&	const_reference;			//!< Type used for constant utf32 code point references
+	typedef		utf32*			pointer;					//!< Type used for utf32 code point pointers
+	typedef		const utf32*	const_pointer;				//!< Type used for constant utf32 code point pointers
+
+	static const size_type		npos;						//!< Value used to represent 'not found' conditions and 'all code points' etc.
+
+private:
+	/*************************************************************************
+		Implementation data
+	*************************************************************************/
+	size_type	d_cplength;			//!< holds length of string in code points (not including null termination)
+	size_type	d_reserve;			//!< code point reserve size (currently allocated buffer size in code points).
+
+	mutable utf8*		d_encodedbuff;		//!< holds string data encoded as utf8 (generated only by calls to c_str() and data())
+	mutable size_type	d_encodeddatlen;	//!< holds length of encoded data (in case it's smaller than buffer).
+	mutable size_type	d_encodedbufflen;	//!< length of above buffer (since buffer can be bigger then the data it holds to save re-allocations).
+
+	utf32		d_quickbuff[STR_QUICKBUFF_SIZE];	//!< This is a integrated 'quick' buffer to save allocations for smallish strings
+	utf32*		d_buffer;							//!< Pointer the the main buffer memory.  This is only valid when quick-buffer is not being used
+
+public:
+	/*************************************************************************
+		Iterator Classes
+	*************************************************************************/
+	/*!
+	\brief
+		Constant forward iterator class for String objects
+	*/
+#if defined(_MSC_VER) && (_MSC_VER <= 1200)
+	class const_iterator : public std::iterator<std::random_access_iterator_tag, utf32>
+#else
+	class const_iterator : public std::iterator<std::random_access_iterator_tag, utf32, std::ptrdiff_t, const utf32*, const utf32&>
+#endif
+	{
+
+	public:
+		//////////////////////////////////////////////////////////////////////////
+		// data
+		//////////////////////////////////////////////////////////////////////////
+		const utf32*	d_ptr;
+
+
+		//////////////////////////////////////////////////////////////////////////
+		// Methods
+		//////////////////////////////////////////////////////////////////////////
+		const_iterator(void)
+		{
+			d_ptr = 0;
+		}
+		const_iterator(const_pointer ptr)
+		{
+			d_ptr = ptr;
+		}
+
+		const_reference	operator*() const
+		{
+			return *d_ptr;
+		}
+
+#if defined(_MSC_VER) && (_MSC_VER <= 1200)
+#	pragma warning (push)
+#	pragma warning (disable : 4284)
+#endif
+		const_pointer	operator->() const		
+		{
+			return &**this;
+		}
+
+#if defined(_MSC_VER) && (_MSC_VER <= 1200)
+#	pragma warning (pop)
+#endif
+
+		const_iterator&	operator++()
+		{
+			++d_ptr;
+			return *this;
+		}
+
+		const_iterator	operator++(int)		
+		{
+			const_iterator temp = *this;
+			++*this;
+			return temp;
+		}
+
+		const_iterator&	operator--()
+		{
+			--d_ptr;
+			return *this;
+		}
+
+		const_iterator	operator--(int)		
+		{
+			const_iterator temp = *this;
+			--*this;
+			return temp;
+		}
+
+		const_iterator& operator+=(difference_type offset)
+		{
+			d_ptr += offset;
+			return *this;
+		}
+
+		const_iterator operator+(difference_type offset) const
+		{
+			const_iterator temp = *this;
+			return temp += offset;
+		}
+
+		const_iterator& operator-=(difference_type offset)
+		{
+			return *this += -offset;
+		}
+
+		const_iterator operator-(difference_type offset) const
+		{
+			const_iterator temp = *this;
+			return temp -= offset;
+		}
+
+		difference_type operator-(const const_iterator& iter) const
+		{
+			return d_ptr - iter.d_ptr;
+		}
+
+		const_reference operator[](difference_type offset) const
+		{
+			return *(*this + offset);
+		}
+
+		bool operator==(const const_iterator& iter) const
+		{
+			return d_ptr == iter.d_ptr;
+		}
+
+		bool operator!=(const const_iterator& iter) const
+		{
+			return !(*this == iter);
+		}
+
+		bool operator<(const const_iterator& iter) const
+		{
+			return d_ptr < iter.d_ptr;
+		}
+
+		bool operator>(const const_iterator& iter) const
+		{
+			return (!(iter < *this));
+		}
+
+		bool operator<=(const const_iterator& iter) const
+		{
+			return (!(iter < *this));
+		}
+
+		bool operator>=(const const_iterator& iter) const
+		{
+			return (!(*this < iter));
+		}
+
+		friend const_iterator operator+(difference_type offset, const const_iterator& iter)
+		{
+			return iter + offset;
+		}
+
+	};
+
+	/*!
+	\brief
+		Forward iterator class for String objects
+	*/
+	class iterator : public const_iterator
+	{
+	public:
+		iterator(void) {}
+		iterator(pointer ptr) : const_iterator(ptr) {}
+
+
+		reference operator*() const
+		{
+			return ((reference)**(const_iterator *)this);
+		}
+
+#if defined(_MSC_VER) && (_MSC_VER <= 1200)
+#	pragma warning (push)
+#	pragma warning (disable : 4284)
+#endif
+
+		pointer operator->() const
+		{
+			return &**this;
+		}
+
+#if defined(_MSC_VER) && (_MSC_VER <= 1200)
+#	pragma warning (pop)
+#endif
+
+		iterator& operator++()
+		{
+			++this->d_ptr;
+			return *this;
+		}
+
+		iterator operator++(int)
+		{
+			iterator temp = *this;
+			++*this;
+			return temp;
+		}
+
+		iterator& operator--()
+		{
+			--this->d_ptr;
+			return *this;
+		}
+
+		iterator operator--(int)
+		{
+			iterator temp = *this;
+			--*this;
+			return temp;
+		}
+
+		iterator& operator+=(difference_type offset)
+		{
+			this->d_ptr += offset;
+			return *this;
+		}
+
+		iterator operator+(difference_type offset) const
+		{
+			iterator temp = *this;
+			return temp + offset;
+		}
+
+		iterator& operator-=(difference_type offset)
+		{
+			return *this += -offset;
+		}
+
+		iterator operator-(difference_type offset) const
+		{
+			iterator temp = *this;
+			return temp -= offset;
+		}
+
+		difference_type operator-(const const_iterator& iter) const
+		{
+			return ((const_iterator)*this - iter);
+		}
+
+		reference operator[](difference_type offset) const
+		{
+			return *(*this + offset);
+		}
+
+		friend iterator operator+(difference_type offset, const iterator& iter)
+		{
+			return iter + offset;
+		}
+
+	};
+
+	/*!
+	\brief
+		Constant reverse iterator class for String objects
+	*/
+#if defined(_MSC_VER) && ((_MSC_VER <= 1200) || ((_MSC_VER <= 1300) && defined(_STLPORT_VERSION)))
+	typedef	std::reverse_iterator<const_iterator, const_pointer, const_reference, difference_type>	const_reverse_iterator;
+#else
+	typedef	std::reverse_iterator<const_iterator>	const_reverse_iterator;
+#endif
+
+	/*!
+	\brief
+		Reverse iterator class for String objects
+	*/
+#if defined(_MSC_VER) && ((_MSC_VER <= 1200) || ((_MSC_VER <= 1300) && defined(_STLPORT_VERSION)))
+	typedef std::reverse_iterator<iterator, pointer, reference, difference_type>			reverse_iterator;
+#else
+	typedef std::reverse_iterator<iterator>			reverse_iterator;
+#endif
+
+public:
+	//////////////////////////////////////////////////////////////////////////
+	// Default Construction and Destructor
+	//////////////////////////////////////////////////////////////////////////
+	/*!
+	\brief
+		Constructs an empty string
+	*/
+	String(void)
+	{
+		init();
+	}
+
+	/*!
+	\brief
+		Destructor for String objects
+	*/
+	~String(void);
+
+	//////////////////////////////////////////////////////////////////////////
+	// Construction via CEGUI::String
+	//////////////////////////////////////////////////////////////////////////
+	/*!
+	\brief
+		Copy constructor - Creates a new string with the same value as \a str
+
+	\param str
+		String object used to initialise the newly created string
+
+	\return
+		Nothing
+	*/
+	String(const String& str)
+	{
+		init();
+		assign(str);
+	}
+	
+
+	/*!
+	\brief
+		Constructs a new string initialised with code points from another String object.
+
+	\param str
+		String object used to initialise the newly created string
+
+	\param str_idx
+		Starting code-point of \a str to be used when initialising the new String
+
+	\param str_num
+		Maximum number of code points from \a str that are to be assigned to the new String
+
+	\return
+		Nothing
+	*/
+	String(const String& str, size_type str_idx, size_type str_num = npos)
+	{
+		init();
+		assign(str, str_idx, str_num);
+	}
+
+	//////////////////////////////////////////////////////////////////////////
+	// Construction via std::string
+	//////////////////////////////////////////////////////////////////////////
+	/*!
+	\brief
+		Constructs a new string and initialises it using the std::string std_str
+
+	\param std_str
+		The std::string object that is to be used to initialise the new String object.
+
+	\note
+		The characters of \a std_str are taken to be unencoded data which represent Unicode code points 0x00..0xFF.  No translation of
+		the provided data will occur.
+
+	\return
+		Nothing
+
+	\exception std::length_error	Thrown if resulting String object would be too big.
+	*/
+	String(const std::string& std_str)
+	{
+		init();
+		assign(std_str);
+	}
+		
+	/*!
+	\brief
+		Constructs a new string initialised with characters from the given std::string object.
+
+	\param std_str
+		std::string object used to initialise the newly created string
+
+	\param str_idx
+		Starting character of \a std_str to be used when initialising the new String
+
+	\note
+		The characters of \a std_str are taken to be unencoded data which represent Unicode code points 0x00..0xFF.  No translation of
+		the provided data will occur.
+
+	\param str_num
+		Maximum number of characters from \a std_str that are to be assigned to the new String
+
+	\return
+		Nothing
+
+	\exception std::length_error	Thrown if resulting String object would be too big.
+	*/
+	String(const std::string& std_str, size_type str_idx, size_type str_num = npos)
+	{
+		init();
+		assign(std_str, str_idx, str_num);
+	}
+
+
+	//////////////////////////////////////////////////////////////////////////
+	// Construction via UTF-8 stream (for straight ASCII use, only codes 0x00 - 0x7f are valid)
+	//////////////////////////////////////////////////////////////////////////
+	/*!
+	\brief
+		Constructs a new String object and initialise it using the provided utf8 encoded string buffer.
+
+	\param utf8_str
+		Pointer to a buffer containing a null-terminated Unicode string encoded as utf8 data.
+
+	\note
+		A basic string literal (cast to utf8*) can be passed to this function, provided that the string is
+		comprised only of code points 0x00..0x7f.  The use of extended ASCII characters (with values >0x7f)
+		would result in incorrect behaviour as the String will attempt to 'decode' the data, with unpredictable
+		results.
+
+	\return
+		Nothing
+
+	\exception std::length_error	Thrown if resulting String object would be too big.
+	*/
+	String(const utf8* utf8_str)
+	{
+		init();
+		assign(utf8_str);
+	}
+
+	/*!
+	\brief
+		Constructs a new String object and initialise it using the provided utf8 encoded string buffer.
+
+		A basic string literal (cast to utf8*) can be passed to this function, provided that the string is
+		comprised only of code points 0x00..0x7f.  The use of extended ASCII characters (with values >0x7f)
+		would result in incorrect behaviour as the String will attempt to 'decode' the data, with unpredictable
+		results.
+
+	\param utf8_str
+		Pointer to a buffer containing Unicode string data encoded as utf8.
+
+	\note
+		A basic string literal (cast to utf8*) can be passed to this function, provided that the string is
+		comprised only of code points 0x00..0x7f.  The use of extended ASCII characters (with values >0x7f)
+		would result in incorrect behaviour as the String will attempt to 'decode' the data, with unpredictable
+		results.
+
+	\param chars_len
+		Length of the provided utf8 string in code units (not code-points).
+
+	\return
+		Nothing
+
+	\exception std::length_error	Thrown if resulting String object would be too big.
+	*/
+	String(const utf8* utf8_str, size_type chars_len)
+	{
+		init();
+		assign(utf8_str, chars_len);
+	}
+
+	//////////////////////////////////////////////////////////////////////////
+	// Construction via code-point (using a UTF-32 code unit)
+	//////////////////////////////////////////////////////////////////////////
+	/*!
+	\brief
+		Constructs a new String that is initialised with the specified code point
+
+	\param num
+		The number of times \a code_point is to be put into new String object
+
+	\param code_point
+		The Unicode code point to be used when initialising the String object
+
+	\return
+		Nothing
+
+	\exception std::length_error	Thrown if resulting String object would be too big.
+	*/
+	String(size_type num, utf32 code_point)
+	{
+		init();
+		assign(num, code_point);
+	}
+
+	//////////////////////////////////////////////////////////////////////////
+	// Construction via iterator
+	//////////////////////////////////////////////////////////////////////////
+	// Create string with characters in the range [beg, end)
+	/*!
+	\brief
+		Construct a new string object and initialise it with code-points from the range [beg, end).
+
+	\param beg
+		Iterator describing the start of the data to be used when initialising the String object
+
+	\param end
+		Iterator describing the (exclusive) end of the data to be used when initialising the String object
+
+	\return 
+		Nothing
+	*/
+	String(const_iterator beg, const_iterator end)
+	{
+		init();
+		append(beg, end);
+	}
+
+
+	//////////////////////////////////////////////////////////////////////////
+	// Construction via c-string
+	//////////////////////////////////////////////////////////////////////////
+	/*!
+	\brief
+		Constructs a new String object and initialise it using the provided c-string.
+
+	\param c_str
+		Pointer to a c-string.
+
+	\return
+		Nothing
+
+	\exception std::length_error	Thrown if resulting String object would be too big.
+	*/
+	String(const char* c_str)
+	{
+		init();
+		assign(c_str);
+	}
+
+	/*!
+	\brief
+		Constructs a new String object and initialise it using characters from the provided char array.
+
+	\param chars
+		char array.
+
+	\param chars_len
+		Number of chars from the array to be used.
+
+	\return
+		Nothing
+
+	\exception std::length_error	Thrown if resulting String object would be too big.
+	*/
+	String(const char* chars, size_type chars_len)
+	{
+		init();
+		assign(chars, chars_len);
+	}
+
+
+	//////////////////////////////////////////////////////////////////////////
+	// Size operations
+	//////////////////////////////////////////////////////////////////////////
+	/*!
+	\brief
+		Returns the size of the String in code points
+
+	\return
+		Number of code points currently in the String
+	*/
+	size_type	size(void) const
+	{
+		return d_cplength;
+	}
+
+	/*!
+	\brief
+		Returns the size of the String in code points
+
+	\return
+		Number of code points currently in the String
+	*/
+	size_type	length(void) const
+	{
+		return d_cplength;
+	}
+
+	/*!
+	\brief
+		Returns true if the String is empty
+
+	\return
+		true if the String is empty, else false.
+	*/
+	bool	empty(void) const
+	{
+		return	(d_cplength == 0);
+	}
+
+	/*!
+	\brief
+		Returns the maximum size of a String.
+
+		Any operation that would result in a String that is larger than this value will throw the std::length_error exception.
+
+	\return
+		The maximum number of code points that a string can contain
+	*/
+	static size_type	max_size(void)
+	{
+		return (((size_type)-1) / sizeof(utf32));
+	}
+
+	//////////////////////////////////////////////////////////////////////////
+	// Capacity Operations
+	//////////////////////////////////////////////////////////////////////////
+	// return the number of code points the string could hold without re-allocation
+	// (due to internal encoding this will always report the figure for worst-case encoding, and could even be < size()!)
+	/*!
+	\brief
+		Return the number of code points that the String could hold before a re-allocation would be required.
+
+	\return
+		Size of the current reserve buffer.  This is the maximum number of code points the String could hold before a buffer
+		re-allocation would be required
+	*/
+	size_type capacity(void) const
+	{
+		return d_reserve - 1;
+	}
+
+	// reserve internal memory for at-least 'num' code-points (characters).  if num is 0, request is shrink-to-fit.
+	/*!
+	\brief
+		Specifies the amount of reserve capacity to allocate.
+
+	\param num
+		The number of code points to allocate space for.  If \a num is larger that the current reserve, then a re-allocation will occur.  If
+		\a num is smaller than the current reserve (but not 0) the buffer may be shrunk to the larger of the specified number, or the current
+		String size (operation is currently not implemented).  If \a num is 0, then the buffer is re-allocated to fit the current String size.
+
+	\return
+		Nothing
+
+	\exception std::length_error	Thrown if resulting String object would be too big.
+	*/
+	void	reserve(size_type num = 0)
+	{
+		if (num == 0)
+			trim();
+		else
+			grow(num);
+	}
+
+	//////////////////////////////////////////////////////////////////////////
+	// Comparisons
+	//////////////////////////////////////////////////////////////////////////
+	/*!
+	\brief
+		Compares this String with the String 'str'.
+
+	\note
+		This does currently not properly consider Unicode and / or the system locale.
+
+	\param str
+		The String object that is to compared with this String.
+
+	\return
+		-  0 if the String objects are equal
+		- <0 if this String is lexicographically smaller than \a str
+		- >0 if this String is lexicographically greater than \a str
+	*/
+	int		compare(const String& str) const
+	{
+		return compare(0, d_cplength, str);
+	}
+
+	/*!
+	\brief
+		Compares code points from this String with code points from the String 'str'.
+
+	\note
+		This does currently not properly consider Unicode and / or the system locale.
+
+	\param idx
+		Index of the first code point from this String to consider.
+
+	\param len
+		Maximum number of code points from this String to consider.
+
+	\param str
+		The String object that is to compared with this String.
+
+	\param str_idx
+		Index of the first code point from String \a str to consider.
+
+	\param str_len
+		Maximum number of code points from String \a str to consider
+
+	\return
+		-  0 if the specified sub-strings are equal
+		- <0 if specified sub-strings are lexicographically smaller than \a str
+		- >0 if specified sub-strings are lexicographically greater than \a str
+
+	\exception std::out_of_range	Thrown if either \a idx or \a str_idx are invalid.
+	*/
+	int		compare(size_type idx, size_type len, const String& str, size_type str_idx = 0, size_type str_len = npos) const
+	{
+		if ((d_cplength < idx) || (str.d_cplength < str_idx))
+			throw std::out_of_range("Index is out of range for CEGUI::String");
+
+		if ((len == npos) || (idx + len > d_cplength))
+			len = d_cplength - idx;
+
+		if ((str_len == npos) || (str_idx + str_len > str.d_cplength))
+			str_len = str.d_cplength - str_idx;
+
+		int val = (len == 0) ? 0 : utf32_comp_utf32(&ptr()[idx], &str.ptr()[str_idx], (len < str_len) ? len : str_len);
+
+		return (val != 0) ? ((val < 0) ? -1 : 1) : (len < str_len) ? -1 : (len == str_len) ? 0 : 1;
+	}
+
+
+	/*!
+	\brief
+		Compares this String with the std::string 'std_str'.
+
+	\note
+		This does currently not properly consider Unicode and / or the system locale.
+
+	\param std_str
+		The std::string object that is to compared with this String.
+
+	\note
+		Characters from \a std_str are considered to represent Unicode code points in the range 0x00..0xFF.  No translation of
+		the encountered data is performed.
+
+	\return
+		-  0 if the string objects are equal
+		- <0 if this string is lexicographically smaller than \a std_str
+		- >0 if this string is lexicographically greater than \a std_str
+	*/
+	int		compare(const std::string& std_str) const
+	{
+		return compare(0, d_cplength, std_str);
+	}
+
+
+	/*!
+	\brief
+		Compares code points from this String with code points from the std::string 'std_str'.
+
+	\note
+		This does currently not properly consider Unicode and / or the system locale.
+
+	\param idx
+		Index of the first code point from this String to consider.
+
+	\param len
+		Maximum number of code points from this String to consider.
+
+	\param std_str
+		The std::string object that is to compared with this String.
+
+	\note
+		Characters from \a std_str are considered to represent Unicode code points in the range 0x00..0xFF.  No translation of
+		the encountered data is performed.
+
+	\param str_idx
+		Index of the first character from std::string \a std_str to consider.
+
+	\param str_len
+		Maximum number of characters from std::string \a std_str to consider
+
+	\return
+		-  0 if the specified sub-strings are equal
+		- <0 if specified sub-strings are lexicographically smaller than \a std_str
+		- >0 if specified sub-strings are lexicographically greater than \a std_str
+
+	\exception std::out_of_range	Thrown if either \a idx or \a str_idx are invalid.
+	*/
+	int		compare(size_type idx, size_type len, const std::string& std_str, size_type str_idx = 0, size_type str_len = npos) const
+	{
+		if (d_cplength < idx)
+			throw std::out_of_range("Index is out of range for CEGUI::String");
+
+		if (std_str.size() < str_idx)
+			throw std::out_of_range("Index is out of range for std::string");
+
+		if ((len == npos) || (idx + len > d_cplength))
+			len = d_cplength - idx;
+
+		if ((str_len == npos) || (str_idx + str_len > std_str.size()))
+			str_len = (size_type)std_str.size() - str_idx;
+
+		int val = (len == 0) ? 0 : utf32_comp_char(&ptr()[idx], &std_str.c_str()[str_idx], (len < str_len) ? len : str_len);
+
+		return (val != 0) ? ((val < 0) ? -1 : 1) : (len < str_len) ? -1 : (len == str_len) ? 0 : 1;
+	}
+
+
+	/*!
+	\brief
+		Compares this String with the null-terminated utf8 encoded 'utf8_str'.
+
+	\note
+		This does currently not properly consider Unicode and / or the system locale.
+
+	\param utf8_str
+		The buffer containing valid Unicode data encoded as utf8 that is to compared with this String.
+
+	\note
+		A basic string literal (cast to utf8*) can be passed to this function, provided that the string is
+		comprised only of code points 0x00..0x7f.  The use of extended ASCII characters (with values >0x7f)
+		would result in incorrect behaviour as the String will attempt to 'decode' the data, with unpredictable
+		results.
+
+	\return
+		-  0 if the strings are equal
+		- <0 if this string is lexicographically smaller than \a utf8_str
+		- >0 if this string is lexicographically greater than \a utf8_str
+	*/
+	int		compare(const utf8* utf8_str) const
+	{
+		return compare(0, d_cplength, utf8_str, encoded_size(utf8_str));
+	}
+
+
+	/*!
+	\brief
+		Compares code points from this String with the null-terminated utf8 encoded 'utf8_str'.
+
+	\note
+		This does currently not properly consider Unicode and / or the system locale.
+
+	\param idx
+		Index of the first code point from this String to consider.
+
+	\param len
+		Maximum number of code points from this String to consider.
+
+	\param utf8_str
+		The buffer containing valid Unicode data encoded as utf8 that is to compared with this String.
+
+	\note
+		A basic string literal (cast to utf8*) can be passed to this function, provided that the string is
+		comprised only of code points 0x00..0x7f.  The use of extended ASCII characters (with values >0x7f)
+		would result in incorrect behaviour as the String will attempt to 'decode' the data, with unpredictable
+		results.
+
+	\return
+		-  0 if the specified sub-strings are equal
+		- <0 if specified sub-strings are lexicographically smaller than \a utf8_str
+		- >0 if specified sub-strings are lexicographically greater than \a utf8_str
+
+	\exception std::out_of_range	Thrown if \a idx is invalid.
+	*/
+	int		compare(size_type idx, size_type len, const utf8* utf8_str) const
+	{
+		return compare(idx, len, utf8_str, encoded_size(utf8_str));
+	}
+
+	/*!
+	\brief
+		Compares code points from this String with the utf8 encoded data in buffer 'utf8_str'.
+
+	\note
+		This does currently not properly consider Unicode and / or the system locale.
+
+	\param idx
+		Index of the first code point from this String to consider.
+
+	\param len
+		Maximum number of code points from this String to consider.
+
+	\param utf8_str
+		The buffer containing valid Unicode data encoded as utf8 that is to compared with this String.
+
+	\note
+		A basic string literal (cast to utf8*) can be passed to this function, provided that the string is
+		comprised only of code points 0x00..0x7f.  The use of extended ASCII characters (with values >0x7f)
+		would result in incorrect behaviour as the String will attempt to 'decode' the data, with unpredictable
+		results.
+
+	\param str_cplen
+		The number of encoded code points in the buffer \a utf8_str (this is not the same as the number of code units).
+
+	\return
+		-  0 if the specified sub-strings are equal
+		- <0 if specified sub-strings are lexicographically smaller than \a utf8_str
+		- >0 if specified sub-strings are lexicographically greater than \a utf8_str
+
+	\exception std::out_of_range	Thrown if \a idx is invalid.
+	\exception std::length_error	Thrown if \a str_cplen is set to npos.
+	*/
+	int		compare(size_type idx, size_type len, const utf8* utf8_str, size_type str_cplen) const
+	{
+		if (d_cplength < idx)
+			throw std::out_of_range("Index is out of range for CEGUI::String");
+
+		if (str_cplen == npos)
+			throw std::length_error("Length for utf8 encoded string can not be 'npos'");
+
+		if ((len == npos) || (idx + len > d_cplength))
+			len = d_cplength - idx;
+
+		int val = (len == 0) ? 0 : utf32_comp_utf8(&ptr()[idx], utf8_str, (len < str_cplen) ? len : str_cplen);
+
+		return (val != 0) ? ((val < 0) ? -1 : 1) : (len < str_cplen) ? -1 : (len == str_cplen) ? 0 : 1;
+	}
+
+
+	/*!
+	\brief
+		Compares this String with the given c-string.
+
+	\note
+		This does currently not properly consider Unicode and / or the system locale.
+
+	\param c_str
+		The c-string that is to compared with this String.
+
+	\return
+		-  0 if the strings are equal
+		- <0 if this string is lexicographically smaller than \a c_str
+		- >0 if this string is lexicographically greater than \a c_str
+	*/
+	int		compare(const char* c_str) const
+	{
+		return compare(0, d_cplength, c_str, strlen(c_str));
+	}
+
+
+	/*!
+	\brief
+		Compares code points from this String with the given c-string.
+
+	\note
+		This does currently not properly consider Unicode and / or the system locale.
+
+	\param idx
+		Index of the first code point from this String to consider.
+
+	\param len
+		Maximum number of code points from this String to consider.
+
+	\param c_str
+		The c-string that is to compared with this String.
+
+	\return
+		-  0 if the specified sub-strings are equal
+		- <0 if specified sub-strings are lexicographically smaller than \a c_str
+		- >0 if specified sub-strings are lexicographically greater than \a c_str
+
+	\exception std::out_of_range	Thrown if \a idx is invalid.
+	*/
+	int		compare(size_type idx, size_type len, const char* c_str) const
+	{
+		return compare(idx, len, c_str, strlen(c_str));
+	}
+
+
+	/*!
+	\brief
+		Compares code points from this String with chars in the given char array.
+
+	\note
+		This does currently not properly consider Unicode and / or the system locale.
+
+	\param idx
+		Index of the first code point from this String to consider.
+
+	\param len
+		Maximum number of code points from this String to consider.
+
+	\param chars
+		The array containing the chars that are to compared with this String.
+
+	\param chars_len
+		The number of chars in the array.
+
+	\return
+		-  0 if the specified sub-strings are equal
+		- <0 if specified sub-strings are lexicographically smaller than \a chars
+		- >0 if specified sub-strings are lexicographically greater than \a chars
+
+	\exception std::out_of_range	Thrown if \a idx is invalid.
+	\exception std::length_error	Thrown if \a chars_len is set to npos.
+	*/
+	int		compare(size_type idx, size_type len, const char* chars, size_type chars_len) const
+	{
+		if (d_cplength < idx)
+			throw std::out_of_range("Index is out of range for CEGUI::String");
+
+		if (chars_len == npos)
+			throw std::length_error("Length for char array can not be 'npos'");
+
+		if ((len == npos) || (idx + len > d_cplength))
+			len = d_cplength - idx;
+
+		int val = (len == 0) ? 0 : utf32_comp_char(&ptr()[idx], chars, (len < chars_len) ? len : chars_len);
+
+		return (val != 0) ? ((val < 0) ? -1 : 1) : (len < chars_len) ? -1 : (len == chars_len) ? 0 : 1;
+	}
+
+
+	//////////////////////////////////////////////////////////////////////////
+	// Character access
+	//////////////////////////////////////////////////////////////////////////
+	/*!
+	\brief
+		Returns the code point at the given index.
+
+	\param idx
+		Zero based index of the code point to be returned.
+
+	\note
+		- For constant strings length()/size() provide a valid index and will access the default utf32 value.
+		- For non-constant strings length()/size() is an invalid index, and acceesing (especially writing) this index could cause string corruption.
+
+	\return
+		The utf32 code point at the given index within the String.
+	*/
+	reference	operator[](size_type idx)
+	{
+		return (ptr()[idx]);
+	}
+
+	/*!
+	\brief
+		Returns the code point at the given index.
+
+	\param idx
+		Zero based index of the code point to be returned.
+
+	\note
+		- For constant strings length()/size() provide a valid index and will access the default utf32 value.
+		- For non-constant strings length()/size() is an invalid index, and acceesing (especially writing) this index could cause string corruption.
+
+	\return
+		The utf32 code point at the given index within the String.
+	*/
+	value_type	operator[](size_type idx) const
+	{
+		return ptr()[idx];
+	}
+
+	/*!
+	\brief
+		Returns the code point at the given index.
+
+	\param idx
+		Zero based index of the code point to be returned.
+
+	\return
+		The utf32 code point at the given index within the String.
+
+	\exception std::out_of_range	Thrown if \a idx is >= length().
+	*/
+	reference	at(size_type idx)
+	{
+		if (d_cplength <= idx)
+			throw std::out_of_range("Index is out of range for CEGUI::String");
+
+		return ptr()[idx];
+	}
+
+	/*!
+	\brief
+		Returns the code point at the given index.
+
+	\param idx
+		Zero based index of the code point to be returned.
+
+	\return
+		The utf32 code point at the given index within the String.
+
+	\exception std::out_of_range	Thrown if \a idx is >= length().
+	*/
+	const_reference	at(size_type idx) const
+	{
+		if (d_cplength <= idx)
+			throw std::out_of_range("Index is out of range for CEGUI::String");
+
+		return ptr()[idx];
+	}
+
+
+	//////////////////////////////////////////////////////////////////////////
+	// C-Strings and arrays
+	//////////////////////////////////////////////////////////////////////////
+	/*!
+	\brief
+		Returns contents of the String as a null terminated string of utf8 encoded data.
+
+	\return
+		Pointer to a char buffer containing the contents of the String encoded as null-terminated utf8 data.
+
+	\note
+		The buffer returned from this function is owned by the String object.
+
+	\note
+		Any function that modifies the String data will invalidate the buffer returned by this call.
+	*/
+	const char* c_str(void) const
+	{
+		return (const char*)build_utf8_buff();
+	}
+
+	/*!
+	\brief
+		Returns contents of the String as utf8 encoded data.
+
+	\return
+		Pointer to a buffer containing the contents of the String encoded utf8 data.
+
+	\note
+		The buffer returned from this function is owned by the String object.
+
+	\note
+		Any function that modifies the String data will invalidate the buffer returned by this call.
+	*/
+	const utf8* data(void) const
+	{
+		return build_utf8_buff();
+	}
+
+	// copy, at most, 'len' code-points of the string, begining with code-point 'idx', into the array 'buf' as valid utf8 encoded data
+	// return number of utf8 code units placed into the buffer
+	/*!
+	\brief
+		Copies an area of the String into the provided buffer as encoded utf8 data.
+
+	\param buf
+		Pointer to a buffer that is to receive the encoded data (this must be big enough to hold the encoded data)
+
+	\param len
+		Maximum number of code points from the String that should be encoded into the buffer
+	
+	\param idx
+		Index of the first code point to be encoded into the buffer
+
+	\return
+		The number of utf8 encoded code units transferred to the buffer.
+
+		\note A code unit does not equal a code point.  A utf32 code point, when encoded as utf8, can occupy between 1 and 4 code units.
+
+	\exception std::out_of_range	Thrown if \a idx was invalid for this String.
+	*/
+	size_type	copy(utf8* buf, size_type len = npos, size_type idx = 0) const
+	{
+		if (d_cplength < idx)
+			throw std::out_of_range("Index is out of range for CEGUI::String");
+
+		if (len == npos)
+			len = d_cplength;
+
+		return encode(&ptr()[idx], buf, npos, len);
+	}
+
+	//////////////////////////////////////////////////////////////////////////
+	// UTF8 Encoding length information
+	//////////////////////////////////////////////////////////////////////////
+	// return the number of bytes required to hold 'num' code-points, starting at code-point 'idx', of the the string when encoded as utf8 data.
+	/*!
+	\brief
+		Return the number of utf8 code units required to hold an area of the String when encoded as utf8 data
+
+	\param num
+		Maximum number of code points to consider when calculating utf8 encoded size.
+
+	\param idx
+		Index of the first code point to consider when calculating the utf8 encoded size
+
+	\return
+		The number of utf8 code units (bytes) required to hold the specified sub-string when encoded as utf8 data.
+
+	\exception std::out_of_range	Thrown if \a idx was invalid for this String.
+	*/
+	size_type	utf8_stream_len(size_type num = npos, size_type idx = 0)
+	{
+		using namespace std;
+
+		if (d_cplength < idx)
+			throw out_of_range("Index was out of range for CEGUI::String object");
+
+		size_type	maxlen = d_cplength - idx;
+
+		return encoded_size(&ptr()[idx], ceguimin(num, maxlen));
+	}
+
+	//////////////////////////////////////////////////////////////////////////
+	// Assignment Functions
+	//////////////////////////////////////////////////////////////////////////
+	/*!
+	\brief
+		Assign the value of String \a str to this String
+
+	\param str
+		String object containing the string value to be assigned.
+
+	\return
+		This String after the assignment has happened
+	*/
+	String&	operator=(const String& str)
+	{
+		return assign(str);
+	}
+
+	/*!
+	\brief
+		Assign a sub-string of String \a str to this String
+
+	\param str
+		String object containing the string data to be assigned.
+
+	\param str_idx
+		Index of the first code point in \a str that is to be assigned
+
+	\param str_num
+		Maximum number of code points from \a str that are be be assigned
+
+	\return
+		This String after the assignment has happened
+
+	\exception std::out_of_range	Thrown if str_idx is invalid for \a str
+	*/
+	String&	assign(const String& str, size_type str_idx = 0, size_type str_num = npos)
+	{
+		if (str.d_cplength < str_idx)
+			throw std::out_of_range("Index was out of range for CEGUI::String object");
+
+		if (str_num == npos)
+			str_num = str.d_cplength - str_idx;
+
+		grow(str_num);
+		setlen(str_num);
+		memcpy(ptr(), &str.ptr()[str_idx], str_num * sizeof(utf32));
+		return *this;
+	}
+
+	/*!
+	\brief
+		Assign the value of std::string \a std_str to this String
+
+	\note
+		The characters of \a std_str are taken to be unencoded data which represent Unicode code points 0x00..0xFF.  No translation of
+		the provided data will occur.
+
+	\param std_str
+		std::string object containing the string value to be assigned.
+
+	\return
+		This String after the assignment has happened
+
+	\exception std::length_error	Thrown if the resulting String would have been too large.
+	*/
+	String&	operator=(const std::string& std_str)
+	{
+		return assign(std_str);
+	}
+
+	/*!
+	\brief
+		Assign a sub-string of std::string \a std_str to this String
+
+	\note
+		The characters of \a std_str are taken to be unencoded data which represent Unicode code points 0x00..0xFF.  No translation of
+		the provided data will occur.
+
+	\param std_str
+		std::string object containing the string value to be assigned.
+
+	\param str_idx
+		Index of the first character of \a std_str to be assigned
+
+	\param str_num
+		Maximum number of characters from \a std_str to be assigned
+
+	\return
+		This String after the assignment has happened
+
+	\exception std::out_of_range	Thrown if \a str_idx is invalid for \a std_str
+	\exception std::length_error	Thrown if the resulting String would have been too large.
+	*/
+	String&	assign(const std::string& std_str, size_type str_idx = 0, size_type str_num = npos)
+	{
+		if (std_str.size() < str_idx)
+			throw std::out_of_range("Index was out of range for std::string object");
+
+		if (str_num == npos)
+			str_num = (size_type)std_str.size() - str_idx;
+
+		grow(str_num);
+		setlen(str_num);
+
+		while(str_num--)
+		{
+			((*this)[str_num]) = static_cast<utf32>(static_cast<unsigned char>(std_str[str_num + str_idx]));
+		}
+
+		return *this;
+	}
+
+	/*!
+	\brief
+		Assign to this String the string value represented by the given null-terminated utf8 encoded data
+
+	\note
+		A basic string literal (cast to utf8*) can be passed to this function, provided that the string is
+		comprised only of code points 0x00..0x7f.  The use of extended ASCII characters (with values >0x7f)
+		would result in incorrect behaviour as the String will attempt to 'decode' the data, with unpredictable
+		results.
+
+	\param utf8_str
+		Buffer containing valid null-terminated utf8 encoded data
+
+	\return
+		This String after the assignment has happened
+
+	\exception std::length_error	Thrown if the resulting String would have been too large.
+	*/
+	String&	operator=(const utf8* utf8_str)
+	{
+		return assign(utf8_str, utf_length(utf8_str));
+	}
+
+	/*!
+	\brief
+		Assign to this String the string value represented by the given null-terminated utf8 encoded data
+
+	\note
+		A basic string literal (cast to utf8*) can be passed to this function, provided that the string is
+		comprised only of code points 0x00..0x7f.  The use of extended ASCII characters (with values >0x7f)
+		would result in incorrect behaviour as the String will attempt to 'decode' the data, with unpredictable
+		results.
+
+	\param utf8_str
+		Buffer containing valid null-terminated utf8 encoded data
+
+	\return
+		This String after the assignment has happened
+
+	\exception std::length_error	Thrown if the resulting String would have been too large.
+	*/
+	String&	assign(const utf8* utf8_str)
+	{
+		return assign(utf8_str, utf_length(utf8_str));
+	}
+
+	/*!
+	\brief
+		Assign to this String the string value represented by the given utf8 encoded data
+
+	\note
+		A basic string literal (cast to utf8*) can be passed to this function, provided that the string is
+		comprised only of code points 0x00..0x7f.  The use of extended ASCII characters (with values >0x7f)
+		would result in incorrect behaviour as the String will attempt to 'decode' the data, with unpredictable
+		results.
+
+	\param utf8_str
+		Buffer containing valid utf8 encoded data
+
+	\param str_num
+		Number of code units (not code points) in the buffer pointed to by \a utf8_str
+
+	\return
+		This String after the assignment has happened
+
+	\exception std::length_error	Thrown if the resulting String would have been too large, or if str_num is 'npos'.
+	*/
+	String&	assign(const utf8* utf8_str, size_type str_num)
+	{
+		if (str_num == npos)
+			throw std::length_error("Length for utf8 encoded string can not be 'npos'");
+
+		size_type enc_sze = encoded_size(utf8_str, str_num);
+
+		grow(enc_sze);
+		encode(utf8_str, ptr(), d_reserve, str_num);
+		setlen(enc_sze);
+		return *this;
+	}
+
+	/*!
+	\brief
+		Assigns the specified utf32 code point to this String.  Result is always a String 1 code point in length.
+
+	\param code_point
+		Valid utf32 Unicode code point to be assigned to the string
+
+	\return
+		This String after assignment
+	*/
+	String&	operator=(utf32 code_point)
+	{
+		return assign(1, code_point);
+	}
+
+	/*!
+	\brief
+		Assigns the specified code point repeatedly to the String
+
+	\param num
+		The number of times to assign the code point
+
+	\param code_point
+		Valid utf32 Unicode code point to be assigned to the string
+
+	\return
+		This String after assignment.
+
+	\exception std::length_error	Thrown if \a num was 'npos'
+	*/
+	String&	assign(size_type num, utf32 code_point)
+	{
+		if (num == npos)
+			throw std::length_error("Code point count can not be 'npos'");
+
+		grow(num);
+		setlen(num);
+		utf32* p = ptr();
+
+		while(num--)
+			*p = code_point;
+
+		return *this;
+	}
+
+
+	/*!
+	\brief
+		Assign to this String the given C-string.
+
+	\param c_str
+		Pointer to a valid C style string.
+
+	\return
+		This String after the assignment has happened
+
+	\exception std::length_error	Thrown if the resulting String would have been too large.
+	*/
+	String&	operator=(const char* c_str)
+	{
+		return assign(c_str, strlen(c_str));
+	}
+
+
+	/*!
+	\brief
+		Assign to this String the given C-string.
+
+	\param c_str
+		Pointer to a valid C style string.
+
+	\return
+		This String after the assignment has happened
+
+	\exception std::length_error	Thrown if the resulting String would have been too large.
+	*/
+	String&	assign(const char* c_str)
+	{
+		return assign(c_str, strlen(c_str));
+	}
+
+
+	/*!
+	\brief
+		Assign to this String a number of chars from a char array.
+
+	\param chars
+		char array.
+
+	\param chars_len
+		Number of chars to be assigned.
+
+	\return
+		This String after the assignment has happened
+
+	\exception std::length_error	Thrown if the resulting String would have been too large.
+	*/
+	String&	assign(const char* chars, size_type chars_len)
+	{
+		grow(chars_len);
+		utf32* pt = ptr();
+
+		for (size_type i = 0; i < chars_len; ++i)
+		{
+			*pt++ = static_cast<utf32>(static_cast<unsigned char>(*chars++));
+		}
+
+		setlen(chars_len);
+		return *this;
+	}
+
+
+	/*!
+	\brief
+		Swaps the value of this String with the given String \a str
+
+	\param str
+		String object whos value is to be swapped with this String.
+
+	\return
+		Nothing
+	*/
+	void	swap(String& str)
+	{
+		size_type	temp_len	= d_cplength;
+		d_cplength = str.d_cplength;
+		str.d_cplength = temp_len;
+
+		size_type	temp_res	= d_reserve;
+		d_reserve = str.d_reserve;
+		str.d_reserve = temp_res;
+
+		utf32*		temp_buf	= d_buffer;
+		d_buffer = str.d_buffer;
+		str.d_buffer = temp_buf;
+
+		// see if we need to swap 'quick buffer' data
+		if (temp_res <= STR_QUICKBUFF_SIZE)
+		{
+			utf32		temp_qbf[STR_QUICKBUFF_SIZE];
+
+			memcpy(temp_qbf, d_quickbuff, STR_QUICKBUFF_SIZE * sizeof(utf32));
+			memcpy(d_quickbuff, str.d_quickbuff, STR_QUICKBUFF_SIZE * sizeof(utf32));
+			memcpy(str.d_quickbuff, temp_qbf, STR_QUICKBUFF_SIZE * sizeof(utf32));
+		}
+
+	}
+
+	//////////////////////////////////////////////////////////////////////////
+	// Appending Functions
+	//////////////////////////////////////////////////////////////////////////
+	/*!
+	\brief
+		Appends the String \a str
+
+	\param str
+		String object that is to be appended
+
+	\return
+		This String after the append operation
+
+	\exception std::length_error	Thrown if resulting String would be too large.
+	*/
+	String&	operator+=(const String& str)
+	{
+		return append(str);
+	}
+
+	/*!
+	\brief
+		Appends a sub-string of the String \a str
+
+	\param str
+		String object containing data to be appended
+
+	\param str_idx
+		Index of the first code point to be appended
+
+	\param str_num
+		Maximum number of code points to be appended
+
+	\return
+		This String after the append operation
+
+	\exception std::out_of_range	Thrown if \a str_idx is invalid for \a str.
+	\exception std::length_error	Thrown if resulting String would be too large.
+	*/
+	String& append(const String& str, size_type str_idx = 0, size_type str_num = npos)
+	{
+		if (str.d_cplength < str_idx)
+			throw std::out_of_range("Index is out of range for CEGUI::String");
+
+		if (str_num == npos)
+			str_num = str.d_cplength - str_idx;
+
+		grow(d_cplength + str_num);
+		memcpy(&ptr()[d_cplength], &str.ptr()[str_idx], str_num * sizeof(utf32));
+		setlen(d_cplength + str_num);
+		return *this;
+	}
+
+
+	/*!
+	\brief
+		Appends the std::string \a std_str
+
+	\param std_str
+		std::string object that is to be appended
+
+	\note
+		The characters of \a std_str are taken to be unencoded data which represent Unicode code points 0x00..0xFF.  No translation of
+		the provided data will occur.
+
+	\return
+		This String after the append operation
+
+	\exception std::length_error	Thrown if resulting String would be too large.
+	*/
+	String&	operator+=(const std::string& std_str)
+	{
+		return append(std_str);
+	}
+
+	/*!
+	\brief
+		Appends a sub-string of the std::string \a std_str
+
+	\param std_str
+		std::string object containing data to be appended
+
+	\note
+		The characters of \a std_str are taken to be unencoded data which represent Unicode code points 0x00..0xFF.  No translation of
+		the provided data will occur.
+
+	\param str_idx
+		Index of the first character to be appended
+
+	\param str_num
+		Maximum number of characters to be appended
+
+	\return
+		This String after the append operation
+
+	\exception std::out_of_range	Thrown if \a str_idx is invalid for \a std_str.
+	\exception std::length_error	Thrown if resulting String would be too large.
+	*/
+	String& append(const std::string& std_str, size_type str_idx = 0, size_type str_num = npos)
+	{
+		if (std_str.size() < str_idx)
+			throw std::out_of_range("Index is out of range for std::string");
+
+		if (str_num == npos)
+			str_num = (size_type)std_str.size() - str_idx;
+
+		size_type newsze = d_cplength + str_num;
+
+		grow(newsze);
+		utf32* pt = &ptr()[newsze-1];
+
+		while(str_num--)
+			*pt-- = static_cast<utf32>(static_cast<unsigned char>(std_str[str_num]));
+
+		setlen(newsze);
+		return *this;
+	}
+
+
+	/*!
+	\brief
+		Appends to the String the null-terminated utf8 encoded data in the buffer utf8_str.
+
+	\param utf8_str
+		buffer holding the null-terminated utf8 encoded data that is to be appended
+
+	\note
+		A basic string literal (cast to utf8*) can be passed to this function, provided that the string is
+		comprised only of code points 0x00..0x7f.  The use of extended ASCII characters (with values >0x7f)
+		would result in incorrect behaviour as the String will attempt to 'decode' the data, with unpredictable
+		results.
+
+	\return
+		This String after the append operation
+
+	\exception std::length_error	Thrown if resulting String would be too large.
+	*/
+	String&	operator+=(const utf8* utf8_str)
+	{
+		return append(utf8_str, utf_length(utf8_str));
+	}
+
+	/*!
+	\brief
+		Appends to the String the null-terminated utf8 encoded data in the buffer utf8_str.
+
+	\param utf8_str
+		Buffer holding the null-terminated utf8 encoded data that is to be appended
+
+	\note
+		A basic string literal (cast to utf8*) can be passed to this function, provided that the string is
+		comprised only of code points 0x00..0x7f.  The use of extended ASCII characters (with values >0x7f)
+		would result in incorrect behaviour as the String will attempt to 'decode' the data, with unpredictable
+		results.
+
+	\return
+		This String after the append operation
+
+	\exception std::length_error	Thrown if resulting String would be too large.
+	*/
+	String& append(const utf8* utf8_str)
+	{
+		return append(utf8_str, utf_length(utf8_str));
+	}
+
+
+	/*!
+	\brief
+		Appends to the String the utf8 encoded data in the buffer utf8_str.
+
+	\param utf8_str
+		Buffer holding the utf8 encoded data that is to be appended
+
+	\note
+		A basic string literal (cast to utf8*) can be passed to this function, provided that the string is
+		comprised only of code points 0x00..0x7f.  The use of extended ASCII characters (with values >0x7f)
+		would result in incorrect behaviour as the String will attempt to 'decode' the data, with unpredictable
+		results.
+
+	\param len
+		Number of code units (not code points) in the buffer to be appended
+
+	\return
+		This String after the append operation
+
+	\exception std::length_error	Thrown if resulting String would be too large, or if \a len was 'npos'
+	*/
+	String& append(const utf8* utf8_str, size_type len)
+	{
+		if (len == npos)
+			throw std::length_error("Length for utf8 encoded string can not be 'npos'");
+
+		size_type encsz = encoded_size(utf8_str, len);
+		size_type newsz = d_cplength + encsz;
+
+		grow(newsz);
+		encode(utf8_str, &ptr()[d_cplength], encsz, len);
+		setlen(newsz);
+
+		return *this;
+	}
+
+
+	/*!
+	\brief
+		Appends a single code point to the string
+
+	\param code_point
+		utf32 Unicode code point that is to be appended
+
+	\return
+		This String after the append operation
+
+	\exception std::length_error	Thrown if resulting String would be too long.
+	*/
+	String& operator+=(utf32 code_point)
+	{
+		return append(1, code_point);
+	}
+
+	/*!
+	\brief
+		Appends a single code point multiple times to the string
+
+	\param num
+		Number of copies of the code point to be appended
+
+	\param code_point
+		utf32 Unicode code point that is to be appended
+
+	\return
+		This String after the append operation
+
+	\exception std::length_error	Thrown if resulting String would be too long, or if \a num was 'npos'.
+	*/
+	String& append(size_type num, utf32 code_point)
+	{
+		if (num == npos)
+			throw std::length_error("Code point count can not be 'npos'");
+
+		size_type newsz = d_cplength + num;
+		grow(newsz);
+
+		utf32* p = &ptr()[d_cplength];
+
+		while(num--)
+			*p++ = code_point;
+
+		setlen(newsz);
+
+		return *this;
+	}
+
+	/*!
+	\brief
+		Appends a single code point to the string
+
+	\param code_point
+		utf32 Unicode code point that is to be appended
+
+	\return
+		Nothing
+
+	\exception std::length_error	Thrown if resulting String would be too long.
+	*/
+	void	push_back(utf32 code_point)
+	{
+		append(1, code_point);
+	}
+
+	/*!
+	\brief
+		Appends the code points in the reange [beg, end)
+
+	\param beg
+		Iterator describing the start of the range to be appended
+
+	\param end
+		Iterator describing the (exclusive) end of the range to be appended.
+
+	\return
+		This String after the append operation
+
+	\exception std::length_error	Thrown if the resulting string would be too large.
+	*/
+	String&	append(const_iterator beg, const_iterator end)
+	{
+		return replace(this->end(), this->end(), beg, end);
+	}
+
+
+	/*!
+	\brief
+		Appends to the String the given c-string.
+
+	\param c_str
+		c-string that is to be appended.
+
+	\return
+		This String after the append operation
+
+	\exception std::length_error	Thrown if resulting String would be too large.
+	*/
+	String&	operator+=(const char* c_str)
+	{
+		return append(c_str, strlen(c_str));
+	}
+
+
+	/*!
+	\brief
+		Appends to the String the given c-string.
+
+	\param c_str
+		c-string that is to be appended.
+
+	\return
+		This String after the append operation
+
+	\exception std::length_error	Thrown if resulting String would be too large.
+	*/
+	String& append(const char* c_str)
+	{
+		return append(c_str, strlen(c_str));
+	}
+
+
+	/*!
+	\brief
+		Appends to the String chars from the given char array.
+
+	\param chars
+		char array holding the chars that are to be appended
+
+	\param chars_len
+		Number of chars to be appended
+
+	\return
+		This String after the append operation
+
+	\exception std::length_error	Thrown if resulting String would be too large, or if \a chars_len was 'npos'
+	*/
+	String& append(const char* chars, size_type chars_len)
+	{
+		if (chars_len == npos)
+			throw std::length_error("Length for char array can not be 'npos'");
+
+		size_type newsz = d_cplength + chars_len;
+
+		grow(newsz);
+
+		utf32* pt = &ptr()[newsz-1];
+
+		while(chars_len--)
+			*pt-- = static_cast<utf32>(static_cast<unsigned char>(chars[chars_len]));
+
+		setlen(newsz);
+
+		return *this;
+	}
+
+
+	//////////////////////////////////////////////////////////////////////////
+	// Insertion Functions
+	//////////////////////////////////////////////////////////////////////////
+	/*!
+	\brief
+		Inserts the given String object at the specified position.
+
+	\param idx
+		Index where the string is to be inserted.
+
+	\param str
+		String object that is to be inserted.
+
+	\return
+		This String after the insert.
+
+	\exception std::out_of_range	Thrown if \a idx is invalid for this String.
+	\exception std::length_error	Thrown if resulting String would be too large.
+	*/
+	String&	insert(size_type idx, const String& str)
+	{
+		return insert(idx, str, 0, npos);
+	}
+
+	/*!
+	\brief
+		Inserts a sub-string of the given String object at the specified position.
+
+	\param idx
+		Index where the string is to be inserted.
+
+	\param str
+		String object containing data to be inserted.
+
+	\param str_idx
+		Index of the first code point from \a str to be inserted.
+
+	\param str_num
+		Maximum number of code points from \a str to be inserted.
+
+	\return
+		This String after the insert.
+
+	\exception std::out_of_range	Thrown if \a idx or \a str_idx are out of range.
+	\exception std::length_error	Thrown if resulting String would be too large.
+	*/
+	String& insert(size_type idx, const String& str, size_type str_idx, size_type str_num)
+	{
+		if ((d_cplength < idx) || (str.d_cplength < str_idx))
+			throw std::out_of_range("Index is out of range for CEGUI::String");
+
+		if (str_num == npos)
+			str_num = str.d_cplength - str_idx;
+
+		size_type newsz = d_cplength + str_num;
+		grow(newsz);
+		memmove(&ptr()[idx + str_num], &ptr()[idx], (d_cplength - idx) * sizeof(utf32));
+		memcpy(&ptr()[idx], &str.ptr()[str_idx], str_num * sizeof(utf32));
+		setlen(newsz);
+
+		return *this;
+	}
+
+	/*!
+	\brief
+		Inserts the given std::string object at the specified position.
+
+	\param idx
+		Index where the std::string is to be inserted.
+
+	\param std_str
+		std::string object that is to be inserted.
+
+	\note
+		The characters of \a std_str are taken to be unencoded data which represent Unicode code points 0x00..0xFF.  No translation of
+		the provided data will occur.
+
+	\return
+		This String after the insert.
+
+	\exception std::out_of_range	Thrown if \a idx is invalid for this String.
+	\exception std::length_error	Thrown if resulting String would be too large.
+	*/
+	String&	insert(size_type idx, const std::string& std_str)
+	{
+		return insert(idx, std_str, 0, npos);
+	}
+
+	/*!
+	\brief
+		Inserts a sub-string of the given std::string object at the specified position.
+
+	\param idx
+		Index where the string is to be inserted.
+
+	\param std_str
+		std::string object containing data to be inserted.
+
+	\note
+		The characters of \a std_str are taken to be unencoded data which represent Unicode code points 0x00..0xFF.  No translation of
+		the provided data will occur.
+
+	\param str_idx
+		Index of the first character from \a std_str to be inserted.
+
+	\param str_num
+		Maximum number of characters from \a str to be inserted.
+
+	\return
+		This String after the insert.
+
+	\exception std::out_of_range	Thrown if \a idx or \a str_idx are out of range.
+	\exception std::length_error	Thrown if resulting String would be too large.
+	*/
+	String& insert(size_type idx, const std::string& std_str, size_type str_idx, size_type str_num)
+	{
+		if (d_cplength < idx)
+			throw std::out_of_range("Index is out of range for CEGUI::String");
+
+		if (std_str.size() < str_idx)
+			throw std::out_of_range("Index is out of range for std::string");
+
+		if (str_num == npos)
+			str_num = (size_type)std_str.size() - str_idx;
+
+		size_type newsz = d_cplength + str_num;
+		grow(newsz);
+
+		memmove(&ptr()[idx + str_num], &ptr()[idx], (d_cplength - idx) * sizeof(utf32));
+
+		utf32* pt = &ptr()[idx + str_num - 1];
+		
+		while(str_num--)
+			*pt-- = static_cast<utf32>(static_cast<unsigned char>(std_str[str_idx + str_num]));
+
+		setlen(newsz);
+
+		return *this;
+	}
+
+	/*!
+	\brief
+		Inserts the given null-terminated utf8 encoded data at the specified position.
+
+	\param idx
+		Index where the data is to be inserted.
+
+	\param utf8_str
+		Buffer containing the null-terminated utf8 encoded data that is to be inserted.
+
+	\note
+		A basic string literal (cast to utf8*) can be passed to this function, provided that the string is
+		comprised only of code points 0x00..0x7f.  The use of extended ASCII characters (with values >0x7f)
+		would result in incorrect behaviour as the String will attempt to 'decode' the data, with unpredictable
+		results.
+
+	\return
+		This String after the insert.
+
+	\exception std::out_of_range	Thrown if \a idx is invalid for this String.
+	\exception std::length_error	Thrown if resulting String would be too large.
+	*/
+	String&	insert(size_type idx, const utf8* utf8_str)
+	{
+		return insert(idx, utf8_str, utf_length(utf8_str));
+	}
+
+	/*!
+	\brief
+		Inserts the given utf8 encoded data at the specified position.
+
+	\param idx
+		Index where the data is to be inserted.
+
+	\param utf8_str
+		Buffer containing the utf8 encoded data that is to be inserted.
+
+	\note
+		A basic string literal (cast to utf8*) can be passed to this function, provided that the string is
+		comprised only of code points 0x00..0x7f.  The use of extended ASCII characters (with values >0x7f)
+		would result in incorrect behaviour as the String will attempt to 'decode' the data, with unpredictable
+		results.
+
+	\param len
+		Length of the data to be inserted in uf8 code units (not code points)
+
+	\return
+		This String after the insert.
+
+	\exception std::out_of_range	Thrown if \a idx is invalid for this String.
+	\exception std::length_error	Thrown if resulting String would be too large, or if \a len is 'npos'
+	*/
+	String& insert(size_type idx, const utf8* utf8_str, size_type len)
+	{
+		if (d_cplength < idx)
+			throw std::out_of_range("Index is out of range for CEGUI::String");
+
+		if (len == npos)
+			throw std::length_error("Length of utf8 encoded string can not be 'npos'");
+
+		size_type encsz = encoded_size(utf8_str, len);
+		size_type newsz = d_cplength + encsz;
+
+		grow(newsz);
+		memmove(&ptr()[idx + encsz], &ptr()[idx], (d_cplength - idx) * sizeof(utf32));
+		encode(utf8_str, &ptr()[idx], encsz, len);
+		setlen(newsz);
+
+		return *this;
+	}
+
+	/*!
+	\brief
+		Inserts a code point multiple times into the String
+
+	\param idx
+		Index where the code point(s) are to be inserted
+
+	\param num
+		The number of times to insert the code point
+
+	\param code_point
+		The utf32 code point that is to be inserted
+
+	\return
+		This String after the insertion.
+
+	\exception std::out_of_range	Thrown if \a idx is invalid for this String.
+	\exception std::length_error	Thrown if resulting String would be too large, or if \a num is 'npos'
+	*/
+	String& insert(size_type idx, size_type num, utf32 code_point)
+	{
+		if (d_cplength < idx)
+			throw std::out_of_range("Index is out of range for CEGUI::String");
+
+		if (num == npos)
+			throw std::length_error("Code point count can not be 'npos'");
+
+		size_type newsz = d_cplength + num;
+		grow(newsz);
+
+		memmove(&ptr()[idx + num], &ptr()[idx], (d_cplength - idx) * sizeof(utf32));
+
+		utf32* pt = &ptr()[idx + num - 1];
+
+		while(num--)
+			*pt-- = code_point;
+
+		setlen(newsz);
+
+		return *this;
+	}
+
+	/*!
+	\brief
+		Inserts a code point multiple times into the String
+
+	\param pos
+		Iterator describing the position where the code point(s) are to be inserted
+
+	\param num
+		The number of times to insert the code point
+
+	\param code_point
+		The utf32 code point that is to be inserted
+
+	\return
+		This String after the insertion.
+
+	\exception std::length_error	Thrown if resulting String would be too large, or if \a num is 'npos'
+	*/
+	void insert(iterator pos, size_type num, utf32 code_point)
+	{
+		insert(safe_iter_dif(pos, begin()), num, code_point);
+	}
+
+	/*!
+	\brief
+		Inserts a single code point into the String
+
+	\param pos
+		Iterator describing the position where the code point is to be inserted
+
+	\param code_point
+		The utf32 code point that is to be inserted
+
+	\return
+		This String after the insertion.
+
+	\exception std::length_error	Thrown if resulting String would be too large.
+	*/
+	iterator insert(iterator pos, utf32 code_point)
+	{
+		insert(pos, 1, code_point);
+		return pos;
+	}
+
+	/*!
+	\brief
+		Inserts code points specified by the range [beg, end).
+
+	\param pos
+		Iterator describing the position where the data is to be inserted
+
+	\param beg
+		Iterator describing the begining of the range to be inserted
+
+	\param end
+		Iterator describing the (exclusive) end of the range to be inserted.
+
+	\return
+		Nothing.
+
+	\exception std::length_error	Thrown if resulting String would be too large.
+	*/
+	void	insert(iterator pos, const_iterator beg, const_iterator end)
+	{
+		replace(pos, pos, beg, end);
+	}
+
+
+	/*!
+	\brief
+		Inserts the given c-string at the specified position.
+
+	\param idx
+		Index where the c-string is to be inserted.
+
+	\param c_str
+		c-string that is to be inserted.
+
+	\return
+		This String after the insert.
+
+	\exception std::out_of_range	Thrown if \a idx is invalid for this String.
+	\exception std::length_error	Thrown if resulting String would be too large.
+	*/
+	String&	insert(size_type idx, const char* c_str)
+	{
+		return insert(idx, c_str, strlen(c_str));
+	}
+
+
+	/*!
+	\brief
+		Inserts chars from the given char array at the specified position.
+
+	\param idx
+		Index where the data is to be inserted.
+
+	\param chars
+		char array containing the chars that are to be inserted.
+
+	\param chars_len
+		Length of the char array to be inserted.
+
+	\return
+		This String after the insert.
+
+	\exception std::out_of_range	Thrown if \a idx is invalid for this String.
+	\exception std::length_error	Thrown if resulting String would be too large, or if \a chars_len is 'npos'
+	*/
+	String& insert(size_type idx, const char* chars, size_type chars_len)
+	{
+		if (d_cplength < idx)
+			throw std::out_of_range("Index is out of range for CEGUI::String");
+
+		if (chars_len == npos)
+			throw std::length_error("Length of char array can not be 'npos'");
+
+		size_type newsz = d_cplength + chars_len;
+
+		grow(newsz);
+		memmove(&ptr()[idx + chars_len], &ptr()[idx], (d_cplength - idx) * sizeof(utf32));
+
+		utf32* pt = &ptr()[idx + chars_len - 1];
+
+		while(chars_len--)
+			*pt-- = static_cast<utf32>(static_cast<unsigned char>(chars[chars_len]));
+
+		setlen(newsz);
+
+		return *this;
+	}
+
+
+	//////////////////////////////////////////////////////////////////////////
+	// Erasing characters
+	//////////////////////////////////////////////////////////////////////////
+	/*!
+	\brief
+		Removes all data from the String
+
+	\return
+		Nothing
+	*/
+	void	clear(void)
+	{
+		setlen(0);
+		trim();
+	}
+
+	/*!
+	\brief
+		Removes all data from the String
+
+	\return
+		The empty String (*this)
+	*/
+	String& erase(void)
+	{
+		clear();
+		return *this;
+	}
+
+	/*!
+	\brief
+		Erase a single code point from the string
+
+	\param idx
+		The index of the code point to be removed.
+
+	\return
+		This String after the erase operation
+
+	\exception std::out_of_range	Thrown if \a idx is invalid for this String.
+	*/
+	String&	erase(size_type idx)
+	{
+		return erase(idx, 1);
+	}
+
+	/*!
+	\brief
+		Erase a range of code points
+
+	\param idx
+		Index of the first code point to be removed.
+
+	\param len
+		Maximum number of code points to be removed.
+
+	\return
+		This String after the erase operation.
+
+	\exception std::out_of_range	Thrown if \a idx is invalid for this String.
+	*/
+	String& erase(size_type idx, size_type len = npos)
+	{
+		if (d_cplength < idx)
+			throw std::out_of_range("Index is out of range foe CEGUI::String");
+
+		if (len == npos)
+			len = d_cplength - idx;
+
+		size_type newsz = d_cplength - len;
+
+		memmove(&ptr()[idx], &ptr()[idx + len], (d_cplength - idx - len) * sizeof(utf32));
+		setlen(newsz);
+		return	*this;
+	}
+
+	/*!
+	\brief
+		Erase the code point described by the given iterator
+
+	\param pos
+		Iterator describing the code point to be erased
+
+	\return
+		This String after the erase operation.
+	*/
+	String& erase(iterator pos)
+	{
+		return erase(safe_iter_dif(pos, begin()), 1);
+	}
+
+	/*!
+	\brief
+		Erase a range of code points described by the iterators [beg, end).
+
+	\param beg
+		Iterator describing the postion of the beginning of the range to erase
+
+	\param end
+		Iterator describing the postion of the (exclusive) end of the range to erase
+
+	\return
+		This String after the erase operation.
+	*/
+	String& erase(iterator beg, iterator end)
+	{
+		return erase(safe_iter_dif(beg, begin()), safe_iter_dif(end, beg));
+	}
+
+	//////////////////////////////////////////////////////////////////////////
+	// Resizing
+	//////////////////////////////////////////////////////////////////////////
+	/*!
+	\brief
+		Resizes the String either by inserting default utf32 code points to make it larger, or by truncating to make it smaller
+
+	\param num
+		The length, in code points, that the String is to be made.
+
+	\return
+		Nothing.
+
+	\exception std::length_error	Thrown if the String would be too large.
+	*/
+	void	resize(size_type num)
+	{
+		resize(num, utf32());
+	}
+
+	/*!
+	\brief
+		Resizes the String either by inserting the given utf32 code point to make it larger, or by truncating to make it smaller
+
+	\param num
+		The length, in code points, that the String is to be made.
+
+	\param code_point
+		The utf32 code point that should be used when majing the String larger
+
+	\return
+		Nothing.
+
+	\exception std::length_error	Thrown if the String would be too large.
+	*/
+	void	resize(size_type num, utf32 code_point)
+	{
+		if (num < d_cplength)
+		{
+			setlen(num);
+		}
+		else
+		{
+			append(num - d_cplength, code_point);
+		}
+
+	}
+
+	//////////////////////////////////////////////////////////////////////////
+	// Replacing Characters
+	//////////////////////////////////////////////////////////////////////////
+	/*!
+	\brief
+		Replace code points in the String with the specified String object
+
+	\param idx
+		Index of the first code point to be replaced
+
+	\param len
+		Maximum number of code points to be replaced (if this is 0, operation is an insert at position \a idx)
+
+	\param str
+		The String object that is to replace the specified code points
+
+	\return
+		This String after the replace operation
+
+	\exception std::out_of_range	Thrown if \a idx is invalid for this String
+	\exception std::length_error	Thrown if the resulting String would be too large.
+	*/
+	String& replace(size_type idx, size_type len, const String& str)
+	{
+		return replace(idx, len, str, 0, npos);
+	}
+
+	/*!
+	\brief
+		Replace the code points in the range [beg, end) with the specified String object
+
+	\note
+		If \a beg == \a end, the operation is a insert at iterator position \a beg
+
+	\param beg
+		Iterator describing the start of the range to be replaced
+
+	\param end
+		Iterator describing the (exclusive) end of the range to be replaced.
+
+	\param str
+		The String object that is to replace the specified range of code points
+
+	\return
+		This String after the replace operation
+
+	\exception std::length_error	Thrown if the resulting String would be too large.
+	*/
+	String& replace(iterator beg, iterator end, const String& str)
+	{
+		return replace(safe_iter_dif(beg, begin()), safe_iter_dif(end, beg), str, 0, npos);
+	}
+
+	/*!
+	\brief
+		Replace code points in the String with a specified sub-string of a given String object.
+
+	\param idx
+		Index of the first code point to be replaced
+
+	\param len
+		Maximum number of code points to be replaced.  If this is 0, the operation is an insert at position \a idx.
+
+	\param str
+		String object containing the data that will replace the specified range of code points
+
+	\param str_idx
+		Index of the first code point of \a str that is to replace the specified code point range
+
+	\param str_num
+		Maximum number of code points of \a str that are to replace the specified code point range
+
+	\return
+		This String after the replace operation
+
+	\exception std::out_of_range	Thrown if either \a idx, or \a str_idx are invalid
+	\exception std::length_error	Thrown if the resulting String would have been too large.
+	*/
+	String& replace(size_type idx, size_type len, const String& str, size_type str_idx, size_type str_num)
+	{
+		if ((d_cplength < idx) || (str.d_cplength < str_idx))
+			throw std::out_of_range("Index is out of range for CEGUI::String");
+
+		if (((str_idx + str_num) > str.d_cplength) || (str_num == npos))
+			str_num = str.d_cplength - str_idx;
+
+		if (((len + idx) > d_cplength) || (len == npos))
+			len = d_cplength - idx;
+
+		size_type newsz = d_cplength + str_num - len;
+
+		grow(newsz);
+
+		if ((idx + len) < d_cplength)
+			memmove(&ptr()[idx + str_num], &ptr()[len + idx], (d_cplength - idx - len) * sizeof(utf32));
+
+		memcpy(&ptr()[idx], &str.ptr()[str_idx], str_num * sizeof(utf32));
+		setlen(newsz);
+
+		return *this;
+	}
+
+
+	/*!
+	\brief
+		Replace code points in the String with the specified std::string object
+
+	\param idx
+		Index of the first code point to be replaced
+
+	\param len
+		Maximum number of code points to be replaced (if this is 0, operation is an insert at position \a idx)
+
+	\param std_str
+		The std::string object that is to replace the specified code points
+
+	\note
+		Characters from \a std_str are considered to represent Unicode code points in the range 0x00..0xFF.  No translation of
+		the encountered data is performed.
+
+	\return
+		This String after the replace operation
+
+	\exception std::out_of_range	Thrown if \a idx is invalid for this String
+	\exception std::length_error	Thrown if the resulting String would be too large.
+	*/
+	String& replace(size_type idx, size_type len, const std::string& std_str)
+	{
+		return replace(idx, len, std_str, 0, npos);
+	}
+
+	/*!
+	\brief
+		Replace the code points in the range [beg, end) with the specified std::string object
+
+	\note
+		If \a beg == \a end, the operation is a insert at iterator position \a beg
+
+	\param beg
+		Iterator describing the start of the range to be replaced
+
+	\param end
+		Iterator describing the (exclusive) end of the range to be replaced.
+
+	\param std_str
+		The std::string object that is to replace the specified range of code points
+
+	\note
+		Characters from \a std_str are considered to represent Unicode code points in the range 0x00..0xFF.  No translation of
+		the encountered data is performed.
+
+	\return
+		This String after the replace operation
+
+	\exception std::length_error	Thrown if the resulting String would be too large.
+	*/
+	String& replace(iterator beg, iterator end, const std::string& std_str)
+	{
+		return replace(safe_iter_dif(beg, begin()), safe_iter_dif(end, beg), std_str, 0, npos);
+	}
+
+	/*!
+	\brief
+		Replace code points in the String with a specified sub-string of a given std::string object.
+
+	\param idx
+		Index of the first code point to be replaced
+
+	\param len
+		Maximum number of code points to be replaced.  If this is 0, the operation is an insert at position \a idx.
+
+	\param std_str
+		std::string object containing the data that will replace the specified range of code points
+
+	\note
+		Characters from \a std_str are considered to represent Unicode code points in the range 0x00..0xFF.  No translation of
+		the encountered data is performed.
+
+	\param str_idx
+		Index of the first code point of \a std_str that is to replace the specified code point range
+
+	\param str_num
+		Maximum number of code points of \a std_str that are to replace the specified code point range
+
+	\return
+		This String after the replace operation
+
+	\exception std::out_of_range	Thrown if either \a idx, or \a str_idx are invalid
+	\exception std::length_error	Thrown if the resulting String would have been too large.
+	*/
+	String& replace(size_type idx, size_type len, const std::string& std_str, size_type str_idx, size_type str_num)
+	{
+		if (d_cplength < idx)
+			throw std::out_of_range("Index is out of range for CEGUI::String");
+
+		if (std_str.size() < str_idx)
+			throw std::out_of_range("Index is out of range for std::string");
+
+		if (((str_idx + str_num) > std_str.size()) || (str_num == npos))
+			str_num = (size_type)std_str.size() - str_idx;
+
+		if (((len + idx) > d_cplength) || (len == npos))
+			len = d_cplength - idx;
+
+		size_type newsz = d_cplength + str_num - len;
+
+		grow(newsz);
+
+		if ((idx + len) < d_cplength)
+			memmove(&ptr()[idx + str_num], &ptr()[len + idx], (d_cplength - idx - len) * sizeof(utf32));
+
+		utf32* pt = &ptr()[idx + str_num - 1];
+
+		while (str_num--)
+			*pt-- = static_cast<utf32>(static_cast<unsigned char>(std_str[str_idx + str_num]));
+
+		setlen(newsz);
+
+		return *this;
+	}
+
+
+	/*!
+	\brief
+		Replace code points in the String with the specified null-terminated utf8 encoded data.
+
+	\param idx
+		Index of the first code point to be replaced
+
+	\param len
+		Maximum number of code points to be replaced (if this is 0, operation is an insert at position \a idx)
+
+	\param utf8_str
+		Buffer containing the null-terminated utf8 encoded data that is to replace the specified code points
+
+	\note
+		A basic string literal (cast to utf8*) can be passed to this function, provided that the string is
+		comprised only of code points 0x00..0x7f.  The use of extended ASCII characters (with values >0x7f)
+		would result in incorrect behaviour as the String will attempt to 'decode' the data, with unpredictable
+		results.
+
+	\return
+		This String after the replace operation
+
+	\exception std::out_of_range	Thrown if \a idx is invalid for this String
+	\exception std::length_error	Thrown if the resulting String would be too large.
+	*/
+	String& replace(size_type idx, size_type len, const utf8* utf8_str)
+	{
+		return replace(idx, len, utf8_str, utf_length(utf8_str));
+	}
+
+	/*!
+	\brief
+		Replace the code points in the range [beg, end) with the specified null-terminated utf8 encoded data.
+
+	\note
+		If \a beg == \a end, the operation is a insert at iterator position \a beg
+
+	\param beg
+		Iterator describing the start of the range to be replaced
+
+	\param end
+		Iterator describing the (exclusive) end of the range to be replaced.
+
+	\param utf8_str
+		Buffer containing the null-terminated utf8 encoded data that is to replace the specified range of code points
+
+	\note
+		A basic string literal (cast to utf8*) can be passed to this function, provided that the string is
+		comprised only of code points 0x00..0x7f.  The use of extended ASCII characters (with values >0x7f)
+		would result in incorrect behaviour as the String will attempt to 'decode' the data, with unpredictable
+		results.
+
+	\return
+		This String after the replace operation
+
+	\exception std::length_error	Thrown if the resulting String would be too large.
+	*/
+	String& replace(iterator beg, iterator end, const utf8* utf8_str)
+	{
+		return replace(beg, end, utf8_str, utf_length(utf8_str));
+	}
+
+	/*!
+	\brief
+		Replace code points in the String with the specified utf8 encoded data.
+
+	\param idx
+		Index of the first code point to be replaced
+
+	\param len
+		Maximum number of code points to be replaced (if this is 0, operation is an insert at position \a idx)
+
+	\param utf8_str
+		Buffer containing the null-terminated utf8 encoded data that is to replace the specified code points
+
+	\note
+		A basic string literal (cast to utf8*) can be passed to this function, provided that the string is
+		comprised only of code points 0x00..0x7f.  The use of extended ASCII characters (with values >0x7f)
+		would result in incorrect behaviour as the String will attempt to 'decode' the data, with unpredictable
+		results.
+
+	\param str_len
+		Length of the utf8 encoded data in utf8 code units (not code points).
+
+	\return
+		This String after the replace operation
+
+	\exception std::out_of_range	Thrown if \a idx is invalid for this String
+	\exception std::length_error	Thrown if the resulting String would be too large, or if \a str_len was 'npos'.
+	*/
+	String& replace(size_type idx, size_type len, const utf8* utf8_str, size_type str_len)
+	{
+		if (d_cplength < idx)
+			throw std::out_of_range("Index is out of range for CEGUI::String");
+
+		if (str_len == npos)
+			throw std::length_error("Length for utf8 encoded string can not be 'npos'");
+
+		if (((len + idx) > d_cplength) || (len == npos))
+			len = d_cplength - idx;
+
+		size_type encsz = encoded_size(utf8_str, str_len);
+		size_type newsz = d_cplength + encsz - len;
+
+		grow(newsz);
+
+		if ((idx + len) < d_cplength)
+			memmove(&ptr()[idx + encsz], &ptr()[len + idx], (d_cplength - idx - len) * sizeof(utf32));
+
+		encode(utf8_str, &ptr()[idx], encsz, str_len);
+
+		setlen(newsz);
+		return *this;
+	}
+
+	/*!
+	\brief
+		Replace the code points in the range [beg, end) with the specified null-terminated utf8 encoded data.
+
+	\note
+		If \a beg == \a end, the operation is a insert at iterator position \a beg
+
+	\param beg
+		Iterator describing the start of the range to be replaced
+
+	\param end
+		Iterator describing the (exclusive) end of the range to be replaced.
+
+	\param utf8_str
+		Buffer containing the null-terminated utf8 encoded data that is to replace the specified range of code points
+
+	\note
+		A basic string literal (cast to utf8*) can be passed to this function, provided that the string is
+		comprised only of code points 0x00..0x7f.  The use of extended ASCII characters (with values >0x7f)
+		would result in incorrect behaviour as the String will attempt to 'decode' the data, with unpredictable
+		results.
+
+	\param str_len
+		Length of the utf8 encoded data in utf8 code units (not code points).
+
+	\return
+		This String after the replace operation
+
+		\exception std::length_error	Thrown if the resulting String would be too large, or if \a str_len was 'npos'.
+	*/
+	String& replace(iterator beg, iterator end, const utf8* utf8_str, size_type str_len)
+	{
+		return replace(safe_iter_dif(beg, begin()), safe_iter_dif(end, beg), utf8_str, str_len);
+	}
+
+	/*!
+	\brief
+		Replaces a specified range of code points with occurrences of a given code point
+
+	\param idx
+		Index of the first code point to be replaced
+
+	\param len
+		Maximum number of code points to replace.  If this is 0 the operation is an insert
+
+	\param num
+		Number of occurrences of \a code_point that are to replace the specified range of code points
+
+	\param code_point
+		Code point that is to be used when replacing the specified range of code points
+
+	\return
+		This String after the replace operation.
+
+	\exception std::out_of_range	Thrown if \a idx is invalid for this String
+	\exception std::length_error	Thrown if resulting String would have been too long, or if \a num was 'npos'.
+	*/
+	String& replace(size_type idx, size_type len, size_type num, utf32 code_point)
+	{
+		if (d_cplength < idx)
+			throw std::out_of_range("Index is out of range for CEGUI::String");
+
+		if (num == npos)
+			throw std::length_error("Code point count can not be 'npos'");
+
+		if (((len + idx) > d_cplength) || (len == npos))
+			len = d_cplength - idx;
+
+		size_type newsz = d_cplength + num - len;
+
+		grow(newsz);
+
+		if ((idx + len) < d_cplength)
+			memmove(&ptr()[idx + num], &ptr()[len + idx], (d_cplength - idx - len) * sizeof(utf32));
+
+		utf32* pt = &ptr()[idx + num - 1];
+
+		while (num--)
+			*pt-- = code_point;
+
+		setlen(newsz);
+
+		return *this;
+	}
+
+	/*!
+	\brief
+		Replace the code points in the range [beg, end) with occurrences of a given code point
+
+	\note
+		If \a beg == \a end, the operation is an insert at iterator position \a beg
+
+	\param beg
+		Iterator describing the start of the range to be replaced
+
+	\param end
+		Iterator describing the (exclusive) end of the range to be replaced.
+
+	\param num
+		Number of occurrences of \a code_point that are to replace the specified range of code points
+
+	\param code_point
+		Code point that is to be used when replacing the specified range of code points
+
+	\return
+		This String after the replace operation
+
+	\exception std::length_error	Thrown if resulting String would have been too long, or if \a num was 'npos'.
+	*/
+	String& replace(iterator beg, iterator end, size_type num, utf32 code_point)
+	{
+		return replace(safe_iter_dif(beg, begin()), safe_iter_dif(end, beg), num, code_point);
+	}
+
+
+	/*!
+	\brief
+		Replace the code points in the range [beg, end) with code points from the range [newBeg, newEnd).
+
+	\note
+		If \a beg == \a end, the operation is an insert at iterator position \a beg
+
+	\param beg
+		Iterator describing the start of the range to be replaced
+
+	\param end
+		Iterator describing the (exclusive) end of the range to be replaced.
+
+	\param newBeg
+		Iterator describing the beginning of the range to insert.
+
+	\param newEnd	
+		Iterator describing the (exclusive) end of the range to insert.
+
+	\return
+		This String after the insert operation.
+
+	\exception std::length_error	Thrown if the resulting string would be too long.
+	*/
+	String& replace(iterator beg, iterator end, const_iterator newBeg, const_iterator newEnd)
+	{
+		if (beg == end)
+		{
+			erase(safe_iter_dif(beg, begin()), safe_iter_dif(end, beg));
+		}
+		else
+		{
+			size_type str_len = safe_iter_dif(newEnd, newBeg);
+			size_type idx = safe_iter_dif(beg, begin());
+			size_type len = safe_iter_dif(end, beg);
+
+			if ((len + idx) > d_cplength)
+				len = d_cplength - idx;
+
+			size_type newsz = d_cplength + str_len - len;
+
+			grow(newsz);
+
+			if ((idx + len) < d_cplength)
+				memmove(&ptr()[idx + str_len], &ptr()[len + idx], (d_cplength - idx - len) * sizeof(utf32));
+
+			memcpy(&ptr()[idx], newBeg.d_ptr, str_len * sizeof(utf32));
+			setlen(newsz);
+		}
+
+		return *this;
+	}
+
+
+	/*!
+	\brief
+		Replace code points in the String with the specified c-string.
+
+	\param idx
+		Index of the first code point to be replaced
+
+	\param len
+		Maximum number of code points to be replaced (if this is 0, operation is an insert at position \a idx)
+
+	\param c_str
+		c-string that is to replace the specified code points
+
+	\return
+		This String after the replace operation
+
+	\exception std::out_of_range	Thrown if \a idx is invalid for this String
+	\exception std::length_error	Thrown if the resulting String would be too large.
+	*/
+	String& replace(size_type idx, size_type len, const char* c_str)
+	{
+		return replace(idx, len, c_str, strlen(c_str));
+	}
+
+
+	/*!
+	\brief
+		Replace the code points in the range [beg, end) with the specified c-string.
+
+	\note
+		If \a beg == \a end, the operation is a insert at iterator position \a beg
+
+	\param beg
+		Iterator describing the start of the range to be replaced
+
+	\param end
+		Iterator describing the (exclusive) end of the range to be replaced.
+
+	\param c_str
+		c-string that is to replace the specified range of code points
+
+	\return
+		This String after the replace operation
+
+	\exception std::length_error	Thrown if the resulting String would be too large.
+	*/
+	String& replace(iterator beg, iterator end, const char* c_str)
+	{
+		return replace(beg, end, c_str, strlen(c_str));
+	}
+
+
+	/*!
+	\brief
+		Replace code points in the String with chars from the given char array.
+
+	\param idx
+		Index of the first code point to be replaced
+
+	\param len
+		Maximum number of code points to be replaced (if this is 0, operation is an insert at position \a idx)
+
+	\param chars
+		char array containing the cars that are to replace the specified code points
+
+	\param chars_len
+		Number of chars in the char array.
+
+	\return
+		This String after the replace operation
+
+	\exception std::out_of_range	Thrown if \a idx is invalid for this String
+	\exception std::length_error	Thrown if the resulting String would be too large, or if \a chars_len was 'npos'.
+	*/
+	String& replace(size_type idx, size_type len, const char* chars, size_type chars_len)
+	{
+		if (d_cplength < idx)
+			throw std::out_of_range("Index is out of range for CEGUI::String");
+
+		if (chars_len == npos)
+			throw std::length_error("Length for the char array can not be 'npos'");
+
+		if (((len + idx) > d_cplength) || (len == npos))
+			len = d_cplength - idx;
+
+		size_type newsz = d_cplength + chars_len - len;
+
+		grow(newsz);
+
+		if ((idx + len) < d_cplength)
+			memmove(&ptr()[idx + chars_len], &ptr()[len + idx], (d_cplength - idx - len) * sizeof(utf32));
+
+		utf32* pt = &ptr()[idx + chars_len - 1];
+
+		while (chars_len--)
+			*pt-- = static_cast<utf32>(static_cast<unsigned char>(chars[chars_len]));
+
+		setlen(newsz);
+		return *this;
+	}
+
+
+	/*!
+	\brief
+		Replace the code points in the range [beg, end) with chars from the given char array.
+
+	\note
+		If \a beg == \a end, the operation is a insert at iterator position \a beg
+
+	\param beg
+		Iterator describing the start of the range to be replaced
+
+	\param end
+		Iterator describing the (exclusive) end of the range to be replaced.
+
+	\param chars
+		char array containing the chars that are to replace the specified range of code points
+
+	\param chars_len
+		Number of chars in the char array.
+
+	\return
+		This String after the replace operation
+
+	\exception std::length_error	Thrown if the resulting String would be too large, or if \a chars_len was 'npos'.
+	*/
+	String& replace(iterator beg, iterator end, const char* chars, size_type chars_len)
+	{
+		return replace(safe_iter_dif(beg, begin()), safe_iter_dif(end, beg), chars, chars_len);
+	}
+
+
+	//////////////////////////////////////////////////////////////////////////
+	// Find a code point
+	//////////////////////////////////////////////////////////////////////////
+	/*!
+	\brief
+		Search forwards for a given code point
+
+	\param code_point
+		The utf32 code point to search for
+
+	\param idx
+		Index of the code point where the search is to start.
+
+	\return
+		- Index of the first occurrence of \a code_point travelling forwards from \a idx.
+		- npos if the code point could not be found
+	*/
+	size_type	find(utf32 code_point, size_type idx = 0) const
+	{
+		if (idx < d_cplength)
+		{
+			const utf32* pt = &ptr()[idx];
+
+			while (idx < d_cplength)
+			{
+				if (*pt++ == code_point)
+					return idx;
+
+				++idx;
+			}
+
+		}
+
+		return npos;
+	}
+
+	/*!
+	\brief
+		Search backwards for a given code point
+
+	\param code_point
+		The utf32 code point to search for
+
+	\param idx
+		Index of the code point where the search is to start.
+
+	\return
+		- Index of the first occurrence of \a code_point travelling backwards from \a idx.
+		- npos if the code point could not be found
+	*/
+	size_type	rfind(utf32 code_point, size_type idx = npos) const
+	{
+		if (idx >= d_cplength)
+			idx = d_cplength - 1;
+
+		if (d_cplength > 0)
+		{
+			const utf32* pt = &ptr()[idx];
+
+			do
+			{
+				if (*pt-- == code_point)
+					return idx;
+
+			} while (idx-- != 0);
+
+		}
+
+		return npos;
+	}
+
+	//////////////////////////////////////////////////////////////////////////
+	// Find a substring
+	//////////////////////////////////////////////////////////////////////////
+	/*!
+	\brief
+		Search forwards for a sub-string
+
+	\param str
+		String object describing the sub-string to search for
+
+	\param idx
+		Index of the code point where the search is to start
+
+	\return
+		- Index of the first occurrence of sub-string \a str travelling forwards from \a idx.
+		- npos if the sub-string could not be found
+	*/
+	size_type	find(const String& str, size_type idx = 0) const
+	{
+		if ((str.d_cplength == 0) && (idx < d_cplength))
+			return idx;
+
+		if (idx < d_cplength)
+		{
+			// loop while search string could fit in to search area
+			while (d_cplength - idx >= str.d_cplength)
+			{
+				if (0 == compare(idx, str.d_cplength, str))
+					return idx;
+
+				++idx;
+			}
+
+		}
+
+		return npos;
+	}
+
+	/*!
+	\brief
+		Search backwards for a sub-string
+
+	\param str
+		String object describing the sub-string to search for
+
+	\param idx
+		Index of the code point where the search is to start
+
+	\return
+		- Index of the first occurrence of sub-string \a str travelling backwards from \a idx.
+		- npos if the sub-string could not be found
+	*/
+	size_type	rfind(const String& str, size_type idx = npos) const
+	{
+		if (str.d_cplength == 0)
+			return (idx < d_cplength) ? idx : d_cplength;
+
+		if (str.d_cplength <= d_cplength)
+		{
+			if (idx > (d_cplength - str.d_cplength))
+				idx = d_cplength - str.d_cplength;
+
+			do
+			{
+				if (0 == compare(idx, str.d_cplength, str))
+					return idx;
+
+			} while (idx-- != 0);
+
+		}
+
+		return npos;
+	}
+
+	/*!
+	\brief
+		Search forwards for a sub-string
+
+	\param std_str
+		std::string object describing the sub-string to search for
+
+	\note
+		Characters from \a std_str are considered to represent Unicode code points in the range 0x00..0xFF.  No translation of
+		the encountered data is performed.
+
+	\param idx
+		Index of the code point where the search is to start
+
+	\return
+		- Index of the first occurrence of sub-string \a std_str travelling forwards from \a idx.
+		- npos if the sub-string could not be found
+	*/
+	size_type	find(const std::string& std_str, size_type idx = 0) const
+	{
+		std::string::size_type sze = std_str.size();
+
+		if ((sze == 0) && (idx < d_cplength))
+			return idx;
+
+		if (idx < d_cplength)
+		{
+			// loop while search string could fit in to search area
+			while (d_cplength - idx >= sze)
+			{
+				if (0 == compare(idx, (size_type)sze, std_str))
+					return idx;
+
+				++idx;
+			}
+
+		}
+
+		return npos;
+	}
+
+	/*!
+	\brief
+		Search backwards for a sub-string
+
+	\param std_str
+		std::string object describing the sub-string to search for
+
+	\note
+		Characters from \a std_str are considered to represent Unicode code points in the range 0x00..0xFF.  No translation of
+		the encountered data is performed.
+
+	\param idx
+		Index of the code point where the search is to start
+
+	\return
+		- Index of the first occurrence of sub-string \a std_str travelling backwards from \a idx.
+		- npos if the sub-string could not be found
+	*/
+	size_type	rfind(const std::string& std_str, size_type idx = npos) const
+	{
+		std::string::size_type sze = std_str.size();
+
+		if (sze == 0)
+			return (idx < d_cplength) ? idx : d_cplength;
+
+		if (sze <= d_cplength)
+		{
+			if (idx > (d_cplength - sze))
+				idx = d_cplength - sze;
+
+			do
+			{
+				if (0 == compare(idx, (size_type)sze, std_str))
+					return idx;
+
+			} while (idx-- != 0);
+
+		}
+
+		return npos;
+	}
+
+	/*!
+	\brief
+		Search forwards for a sub-string
+
+	\param utf8_str
+		Buffer containing null-terminated utf8 encoded data describing the sub-string to search for
+
+	\note
+		A basic string literal (cast to utf8*) can be passed to this function, provided that the string is
+		comprised only of code points 0x00..0x7f.  The use of extended ASCII characters (with values >0x7f)
+		would result in incorrect behaviour as the String will attempt to 'decode' the data, with unpredictable
+		results.
+
+	\param idx
+		Index of the code point where the search is to start
+
+	\return
+		- Index of the first occurrence of sub-string \a utf8_str travelling forwards from \a idx.
+		- npos if the sub-string could not be found
+
+	\exception std::out_of_range	Thrown if \a idx is invalid for this String.
+	*/
+	size_type	find(const utf8* utf8_str, size_type idx = 0) const
+	{
+		return find(utf8_str, idx, utf_length(utf8_str));
+	}
+
+	/*!
+	\brief
+		Search backwards for a sub-string
+
+	\param utf8_str
+		Buffer containing null-terminated utf8 encoded data describing the sub-string to search for
+
+	\note
+		A basic string literal (cast to utf8*) can be passed to this function, provided that the string is
+		comprised only of code points 0x00..0x7f.  The use of extended ASCII characters (with values >0x7f)
+		would result in incorrect behaviour as the String will attempt to 'decode' the data, with unpredictable
+		results.
+
+	\param idx
+		Index of the code point where the search is to start
+
+	\return
+		- Index of the first occurrence of sub-string \a utf8_str travelling backwards from \a idx.
+		- npos if the sub-string could not be found
+
+	\exception std::out_of_range	Thrown if \a idx is invalid for this String.
+	*/
+	size_type	rfind(const utf8* utf8_str, size_type idx = npos) const
+	{
+		return rfind(utf8_str, idx, utf_length(utf8_str));
+	}
+
+	/*!
+	\brief
+		Search forwards for a sub-string
+
+	\param utf8_str
+		Buffer containing utf8 encoded data describing the sub-string to search for
+
+	\note
+		A basic string literal (cast to utf8*) can be passed to this function, provided that the string is
+		comprised only of code points 0x00..0x7f.  The use of extended ASCII characters (with values >0x7f)
+		would result in incorrect behaviour as the String will attempt to 'decode' the data, with unpredictable
+		results.
+
+	\param idx
+		Index of the code point where the search is to start
+
+	\param str_len
+		Length of the utf8 encoded sub-string in utf8 code units (not code points)
+
+	\return
+		- Index of the first occurrence of sub-string \a utf8_str travelling forwards from \a idx.
+		- npos if the sub-string could not be found
+
+	\exception std::length_error	Thrown if \a str_len is 'npos'
+	*/
+	size_type	find(const utf8* utf8_str, size_type idx, size_type str_len) const
+	{
+		if (str_len == npos)
+			throw std::length_error("Length for utf8 encoded string can not be 'npos'");
+
+		size_type sze = encoded_size(utf8_str, str_len);
+
+		if ((sze == 0) && (idx < d_cplength))
+			return idx;
+
+		if (idx < d_cplength)
+		{
+			// loop while search string could fit in to search area
+			while (d_cplength - idx >= sze)
+			{
+				if (0 == compare(idx, sze, utf8_str, sze))
+					return idx;
+
+				++idx;
+			}
+
+		}
+
+		return npos;
+	}
+
+	/*!
+	\brief
+		Search backwards for a sub-string
+
+	\param utf8_str
+		Buffer containing utf8 encoded data describing the sub-string to search for
+
+	\note
+		A basic string literal (cast to utf8*) can be passed to this function, provided that the string is
+		comprised only of code points 0x00..0x7f.  The use of extended ASCII characters (with values >0x7f)
+		would result in incorrect behaviour as the String will attempt to 'decode' the data, with unpredictable
+		results.
+
+	\param idx
+		Index of the code point where the search is to start
+
+	\param str_len
+		Length of the utf8 encoded sub-string in utf8 code units (not code points)
+
+	\return
+		- Index of the first occurrence of sub-string \a utf8_str travelling backwards from \a idx.
+		- npos if the sub-string could not be found
+
+	\exception std::length_error	Thrown if \a str_len is 'npos'
+	*/
+	size_type	rfind(const utf8* utf8_str, size_type idx, size_type str_len) const
+	{
+		if (str_len == npos)
+			throw std::length_error("Length for utf8 encoded string can not be 'npos'");
+
+		size_type sze = encoded_size(utf8_str, str_len);
+
+		if (sze == 0)
+			return (idx < d_cplength) ? idx : d_cplength;
+
+		if (sze <= d_cplength)
+		{
+			if (idx > (d_cplength - sze))
+				idx = d_cplength - sze;
+
+			do
+			{
+				if (0 == compare(idx, sze, utf8_str, sze))
+					return idx;
+
+			} while (idx-- != 0);
+
+		}
+
+		return npos;
+	}
+
+
+	/*!
+	\brief
+		Search forwards for a sub-string
+
+	\param c_str
+		c-string describing the sub-string to search for
+
+	\param idx
+		Index of the code point where the search is to start
+
+	\return
+		- Index of the first occurrence of sub-string \a c_str travelling forwards from \a idx.
+		- npos if the sub-string could not be found
+
+	\exception std::out_of_range	Thrown if \a idx is invalid for this String.
+	*/
+	size_type	find(const char* c_str, size_type idx = 0) const
+	{
+		return find(c_str, idx, strlen(c_str));
+	}
+
+
+	/*!
+	\brief
+		Search backwards for a sub-string
+
+	\param c_str
+		c-string describing the sub-string to search for
+
+	\param idx
+		Index of the code point where the search is to start
+
+	\return
+		- Index of the first occurrence of sub-string \a c_str travelling backwards from \a idx.
+		- npos if the sub-string could not be found
+
+	\exception std::out_of_range	Thrown if \a idx is invalid for this String.
+	*/
+	size_type	rfind(const char* c_str, size_type idx = npos) const
+	{
+		return rfind(c_str, idx, strlen(c_str));
+	}
+
+
+	/*!
+	\brief
+		Search forwards for a sub-string
+
+	\param chars
+		char array describing the sub-string to search for
+
+	\param idx
+		Index of the code point where the search is to start
+
+	\param chars_len
+		Number of chars in the char array.
+
+	\return
+		- Index of the first occurrence of sub-string \a chars travelling forwards from \a idx.
+		- npos if the sub-string could not be found
+
+	\exception std::length_error	Thrown if \a chars_len is 'npos'
+	*/
+	size_type	find(const char* chars, size_type idx, size_type chars_len) const
+	{
+		if (chars_len == npos)
+			throw std::length_error("Length for char array can not be 'npos'");
+
+		if ((chars_len == 0) && (idx < d_cplength))
+			return idx;
+
+		if (idx < d_cplength)
+		{
+			// loop while search string could fit in to search area
+			while (d_cplength - idx >= chars_len)
+			{
+				if (0 == compare(idx, chars_len, chars, chars_len))
+					return idx;
+
+				++idx;
+			}
+
+		}
+
+		return npos;
+	}
+
+
+	/*!
+	\brief
+		Search backwards for a sub-string
+
+	\param chars
+		char array describing the sub-string to search for
+
+	\param idx
+		Index of the code point where the search is to start
+
+	\param chars_len
+		Number of chars in the char array.
+
+	\return
+		- Index of the first occurrence of sub-string \a chars travelling backwards from \a idx.
+		- npos if the sub-string could not be found
+
+	\exception std::length_error	Thrown if \a chars_len is 'npos'
+	*/
+	size_type	rfind(const char* chars, size_type idx, size_type chars_len) const
+	{
+		if (chars_len == npos)
+			throw std::length_error("Length for char array can not be 'npos'");
+
+		if (chars_len == 0)
+			return (idx < d_cplength) ? idx : d_cplength;
+
+		if (chars_len <= d_cplength)
+		{
+			if (idx > (d_cplength - chars_len))
+				idx = d_cplength - chars_len;
+
+			do
+			{
+				if (0 == compare(idx, chars_len, chars, chars_len))
+					return idx;
+
+			} while (idx-- != 0);
+
+		}
+
+		return npos;
+	}
+
+
+	//////////////////////////////////////////////////////////////////////////
+	// Find first of different code-points
+	//////////////////////////////////////////////////////////////////////////
+	/*!
+	\brief
+		Find the first occurrence of one of a set of code points.
+
+	\param str
+		String object describing the set of code points.
+
+	\param idx
+		Index of the start point for the search
+
+	\return
+		- Index of the first occurrence of any one of the code points in \a str starting from from \a idx.
+		- npos if none of the code points in \a str were found.
+	*/
+	size_type	find_first_of(const String& str, size_type idx = 0) const
+	{
+		if (idx < d_cplength)
+		{
+			const utf32* pt = &ptr()[idx];
+
+			do
+			{
+				if (npos != str.find(*pt++))
+					return idx;
+
+			} while (++idx != d_cplength);
+
+		}
+
+		return npos;
+	}
+
+	/*!
+	\brief
+		Find the first code point that is not one of a set of code points.
+
+	\param str
+		String object describing the set of code points.
+
+	\param idx
+		Index of the start point for the search
+
+	\return
+		- Index of the first code point that does not match any one of the code points in \a str starting from from \a idx.
+		- npos if all code points matched one of the code points in \a str.
+	*/
+	size_type	find_first_not_of(const String& str, size_type idx = 0) const
+	{
+		if (idx < d_cplength)
+		{
+			const utf32* pt = &ptr()[idx];
+
+			do
+			{
+				if (npos == str.find(*pt++))
+					return idx;
+
+			} while (++idx != d_cplength);
+
+		}
+
+		return npos;
+	}
+
+
+	/*!
+	\brief
+		Find the first occurrence of one of a set of code points.
+
+	\param std_str
+		std::string object describing the set of code points.
+
+	\note
+		The characters of \a std_str are taken to be unencoded data which represent Unicode code points 0x00..0xFF.  No translation of
+		the provided data will occur.
+
+	\param idx
+		Index of the start point for the search
+
+	\return
+		- Index of the first occurrence of any one of the code points in \a std_str starting from from \a idx.
+		- npos if none of the code points in \a std_str were found.
+	*/
+	size_type	find_first_of(const std::string& std_str, size_type idx = 0) const
+	{
+		if (idx < d_cplength)
+		{
+			const utf32* pt = &ptr()[idx];
+
+			do
+			{
+				if (npos != find_codepoint(std_str, *pt++))
+					return idx;
+
+			} while (++idx != d_cplength);
+
+		}
+
+		return npos;
+	}
+
+	/*!
+	\brief
+		Find the first code point that is not one of a set of code points.
+
+	\param std_str
+		std::string object describing the set of code points.
+
+	\note
+		The characters of \a std_str are taken to be unencoded data which represent Unicode code points 0x00..0xFF.  No translation of
+		the provided data will occur.
+
+	\param idx
+		Index of the start point for the search
+
+	\return
+		- Index of the first code point that does not match any one of the code points in \a std_str starting from from \a idx.
+		- npos if all code points matched one of the code points in \a std_str.
+	*/
+	size_type	find_first_not_of(const std::string& std_str, size_type idx = 0) const
+	{
+		if (idx < d_cplength)
+		{
+			const utf32* pt = &ptr()[idx];
+
+			do
+			{
+				if (npos == find_codepoint(std_str, *pt++))
+					return idx;
+
+			} while (++idx != d_cplength);
+
+		}
+
+		return npos;
+	}
+
+
+	/*!
+	\brief
+		Find the first occurrence of one of a set of code points.
+
+	\param utf8_str
+		Buffer containing null-terminated utf8 encoded data describing the set of code points.
+
+	\note
+		A basic string literal (cast to utf8*) can be passed to this function, provided that the string is
+		comprised only of code points 0x00..0x7f.  The use of extended ASCII characters (with values >0x7f)
+		would result in incorrect behaviour as the String will attempt to 'decode' the data, with unpredictable
+		results.
+
+	\param idx
+		Index of the start point for the search
+
+	\return
+		- Index of the first occurrence of any one of the code points in \a utf8_str starting from from \a idx.
+		- npos if none of the code points in \a utf8_str were found.
+
+	\exception std::out_of_range	Thrown if \a idx is invalid for this String.
+	*/
+	size_type	find_first_of(const utf8* utf8_str, size_type idx = 0) const
+	{
+		return find_first_of(utf8_str, idx, utf_length(utf8_str));
+	}
+
+	/*!
+	\brief
+		Find the first code point that is not one of a set of code points.
+
+	\param utf8_str
+		Buffer containing null-terminated utf8 encoded data describing the set of code points.
+
+	\note
+		A basic string literal (cast to utf8*) can be passed to this function, provided that the string is
+		comprised only of code points 0x00..0x7f.  The use of extended ASCII characters (with values >0x7f)
+		would result in incorrect behaviour as the String will attempt to 'decode' the data, with unpredictable
+		results.
+
+	\param idx
+		Index of the start point for the search
+
+	\return
+		- Index of the first code point that does not match any one of the code points in \a utf8_str starting from from \a idx.
+		- npos if all code points matched one of the code points in \a utf8_str.
+
+	\exception std::out_of_range	Thrown if \a idx is invalid for this String.
+	*/
+	size_type	find_first_not_of(const utf8* utf8_str, size_type idx = 0) const
+	{
+		return find_first_not_of(utf8_str, idx, utf_length(utf8_str));
+	}
+
+	/*!
+	\brief
+		Find the first occurrence of one of a set of code points.
+
+	\param utf8_str
+		Buffer containing utf8 encoded data describing the set of code points.
+
+	\note
+		A basic string literal (cast to utf8*) can be passed to this function, provided that the string is
+		comprised only of code points 0x00..0x7f.  The use of extended ASCII characters (with values >0x7f)
+		would result in incorrect behaviour as the String will attempt to 'decode' the data, with unpredictable
+		results.
+
+	\param idx
+		Index of the start point for the search
+
+	\param str_len
+		Length of the utf8 encoded data in utf8 code units (not code points).
+
+	\return
+		- Index of the first occurrence of any one of the code points in \a utf8_str starting from from \a idx.
+		- npos if none of the code points in \a utf8_str were found.
+
+	\exception std::length_error	Thrown if \a str_len was 'npos'.
+	*/
+	size_type	find_first_of(const utf8* utf8_str, size_type idx, size_type str_len) const
+	{
+		if (str_len == npos)
+			throw std::length_error("Length for utf8 encoded string can not be 'npos'");
+
+		if (idx < d_cplength)
+		{
+			size_type encsze = encoded_size(utf8_str, str_len);
+
+			const utf32* pt = &ptr()[idx];
+
+			do
+			{
+				if (npos != find_codepoint(utf8_str, encsze, *pt++))
+					return idx;
+
+			} while (++idx != d_cplength);
+
+		}
+
+		return npos;
+	}
+
+	/*!
+	\brief
+		Find the first code point that is not one of a set of code points.
+
+	\param utf8_str
+		Buffer containing utf8 encoded data describing the set of code points.
+
+	\note
+		A basic string literal (cast to utf8*) can be passed to this function, provided that the string is
+		comprised only of code points 0x00..0x7f.  The use of extended ASCII characters (with values >0x7f)
+		would result in incorrect behaviour as the String will attempt to 'decode' the data, with unpredictable
+		results.
+
+	\param idx
+		Index of the start point for the search
+
+	\param str_len
+		Length of the utf8 encoded data in utf8 code units (not code points).
+
+	\return
+		- Index of the first code point that does not match any one of the code points in \a utf8_str starting from from \a idx.
+		- npos if all code points matched one of the code points in \a utf8_str.
+
+	\exception std::length_error	Thrown if \a str_len was 'npos'.
+	*/
+	size_type	find_first_not_of(const utf8* utf8_str, size_type idx, size_type str_len) const
+	{
+		if (str_len == npos)
+			throw std::length_error("Length for utf8 encoded string can not be 'npos'");
+
+		if (idx < d_cplength)
+		{
+			size_type encsze = encoded_size(utf8_str, str_len);
+
+			const utf32* pt = &ptr()[idx];
+
+			do
+			{
+				if (npos == find_codepoint(utf8_str, encsze, *pt++))
+					return idx;
+
+			} while (++idx != d_cplength);
+
+		}
+
+		return npos;
+	}
+
+
+	/*!
+	\brief
+		Search forwards for a given code point
+
+	\param code_point
+		The utf32 code point to search for
+
+	\param idx
+		Index of the code point where the search is to start.
+
+	\return
+		- Index of the first occurrence of \a code_point starting from from \a idx.
+		- npos if the code point could not be found
+	*/
+	size_type	find_first_of(utf32 code_point, size_type idx = 0) const
+	{
+		return find(code_point, idx);
+	}
+
+	/*!
+	\brief
+		Search forwards for the first code point that does not match a given code point
+
+	\param code_point
+		The utf32 code point to search for
+
+	\param idx
+		Index of the code point where the search is to start.
+
+	\return
+		- Index of the first code point that does not match \a code_point starting from from \a idx.
+		- npos if all code points matched \a code_point
+
+	\exception std::out_of_range	Thrown if \a idx is invalid for this String.
+	*/
+	size_type	find_first_not_of(utf32 code_point, size_type idx = 0) const
+	{
+		if (idx < d_cplength)
+		{
+			do
+			{
+				if ((*this)[idx] != code_point)
+					return idx;
+
+			} while(idx++ < d_cplength);
+
+		}
+
+		return npos;
+	}
+
+
+	/*!
+	\brief
+		Find the first occurrence of one of a set of chars.
+
+	\param c_str
+		c-string describing the set of chars.
+
+	\param idx
+		Index of the start point for the search
+
+	\return
+		- Index of the first occurrence of any one of the chars in \a c_str starting from from \a idx.
+		- npos if none of the chars in \a c_str were found.
+
+	\exception std::out_of_range	Thrown if \a idx is invalid for this String.
+	*/
+	size_type	find_first_of(const char* c_str, size_type idx = 0) const
+	{
+		return find_first_of(c_str, idx, strlen(c_str));
+	}
+
+
+	/*!
+	\brief
+		Find the first code point that is not one of a set of chars.
+
+	\param c_str
+		c-string describing the set of chars.
+
+	\param idx
+		Index of the start point for the search
+
+	\return
+		- Index of the first code point that does not match any one of the chars in \a c_str starting from from \a idx.
+		- npos if all code points matched any of the chars in \a c_str.
+
+	\exception std::out_of_range	Thrown if \a idx is invalid for this String.
+	*/
+	size_type	find_first_not_of(const char* c_str, size_type idx = 0) const
+	{
+		return find_first_not_of(c_str, idx, strlen(c_str));
+	}
+
+
+	/*!
+	\brief
+		Find the first occurrence of one of a set of chars.
+
+	\param chars
+		char array containing the set of chars.
+
+	\param idx
+		Index of the start point for the search
+
+	\param chars_len
+		Number of chars in the char array.
+
+	\return
+		- Index of the first occurrence of any one of the chars in \a chars starting from from \a idx.
+		- npos if none of the chars in \a chars were found.
+
+	\exception std::length_error	Thrown if \a chars_len was 'npos'.
+	*/
+	size_type	find_first_of(const char* chars, size_type idx, size_type chars_len) const
+	{
+		if (chars_len == npos)
+			throw std::length_error("Length for char array can not be 'npos'");
+
+		if (idx < d_cplength)
+		{
+			const utf32* pt = &ptr()[idx];
+
+			do
+			{
+				if (npos != find_codepoint(chars, chars_len, *pt++))
+					return idx;
+
+			} while (++idx != d_cplength);
+
+		}
+
+		return npos;
+	}
+
+
+	/*!
+	\brief
+		Find the first code point that is not one of a set of chars.
+
+	\param chars
+		char array containing the set of chars.
+
+	\param idx
+		Index of the start point for the search
+
+	\param chars_len
+		Number of chars in the car array.
+
+	\return
+		- Index of the first code point that does not match any one of the chars in \a chars starting from from \a idx.
+		- npos if all code points matched any of the chars in \a chars.
+
+	\exception std::length_error	Thrown if \a chars_len was 'npos'.
+	*/
+	size_type	find_first_not_of(const char* chars, size_type idx, size_type chars_len) const
+	{
+		if (chars_len == npos)
+			throw std::length_error("Length for char array can not be 'npos'");
+
+		if (idx < d_cplength)
+		{
+			const utf32* pt = &ptr()[idx];
+
+			do
+			{
+				if (npos == find_codepoint(chars, chars_len, *pt++))
+					return idx;
+
+			} while (++idx != d_cplength);
+
+		}
+
+		return npos;
+	}
+
+
+	//////////////////////////////////////////////////////////////////////////
+	// Find last of different code-points
+	//////////////////////////////////////////////////////////////////////////
+	/*!
+	\brief
+		Find the last occurrence of one of a set of code points.
+
+	\param str
+		String object describing the set of code points.
+
+	\param idx
+		Index of the start point for the search
+
+	\return
+		- Index of the last occurrence of any one of the code points in \a str starting from \a idx.
+		- npos if none of the code points in \a str were found.
+	*/
+	size_type	find_last_of(const String& str, size_type idx = npos) const
+	{
+		if (d_cplength > 0)
+		{
+			if (idx >= d_cplength)
+				idx = d_cplength - 1;
+
+			const utf32* pt = &ptr()[idx];
+
+			do
+			{
+				if (npos != str.find(*pt--))
+					return idx;
+
+			} while (idx-- != 0);
+
+		}
+
+		return npos;
+	}
+
+	/*!
+	\brief
+		Find the last code point that is not one of a set of code points.
+
+	\param str
+		String object describing the set of code points.
+
+	\param idx
+		Index of the start point for the search
+
+	\return
+		- Index of the last code point that does not match any one of the code points in \a str starting from \a idx.
+		- npos if all code points matched one of the code points in \a str.
+	*/
+	size_type	find_last_not_of(const String& str, size_type idx = npos) const
+	{
+		if (d_cplength > 0)
+		{
+			if (idx >= d_cplength)
+				idx = d_cplength - 1;
+
+			const utf32* pt = &ptr()[idx];
+
+			do
+			{
+				if (npos == str.find(*pt--))
+					return idx;
+
+			} while (idx-- != 0);
+
+		}
+
+		return npos;
+	}
+
+
+	/*!
+	\brief
+		Find the last occurrence of one of a set of code points.
+
+	\param std_str
+		std::string object describing the set of code points.
+
+	\note
+		The characters of \a std_str are taken to be unencoded data which represent Unicode code points 0x00..0xFF.  No translation of
+		the provided data will occur.
+
+	\param idx
+		Index of the start point for the search
+
+	\return
+		- Index of the last occurrence of any one of the code points in \a std_str starting from \a idx.
+		- npos if none of the code points in \a std_str were found.
+	*/
+	size_type	find_last_of(const std::string& std_str, size_type idx = npos) const
+	{
+		if (d_cplength > 0)
+		{
+			if (idx >= d_cplength)
+				idx = d_cplength - 1;
+
+			const utf32* pt = &ptr()[idx];
+
+			do
+			{
+				if (npos != find_codepoint(std_str, *pt--))
+					return idx;
+
+			} while (idx-- != 0);
+
+		}
+
+		return npos;
+	}
+
+	/*!
+	\brief
+		Find the last code point that is not one of a set of code points.
+
+	\param std_str
+		std::string object describing the set of code points.
+
+	\note
+		The characters of \a std_str are taken to be unencoded data which represent Unicode code points 0x00..0xFF.  No translation of
+		the provided data will occur.
+
+	\param idx
+		Index of the start point for the search
+
+	\return
+		- Index of the last code point that does not match any one of the code points in \a std_str starting from \a idx.
+		- npos if all code points matched one of the code points in \a std_str.
+	*/
+	size_type	find_last_not_of(const std::string& std_str, size_type idx = npos) const
+	{
+		if (d_cplength > 0)
+		{
+			if (idx >= d_cplength)
+				idx = d_cplength - 1;
+
+			const utf32* pt = &ptr()[idx];
+
+			do
+			{
+				if (npos == find_codepoint(std_str, *pt--))
+					return idx;
+
+			} while (idx-- != 0);
+
+		}
+
+		return npos;
+	}
+
+
+	/*!
+	\brief
+		Find the last occurrence of one of a set of code points.
+
+	\param utf8_str
+		Buffer containing null-terminated utf8 encoded data describing the set of code points.
+
+	\note
+		A basic string literal (cast to utf8*) can be passed to this function, provided that the string is
+		comprised only of code points 0x00..0x7f.  The use of extended ASCII characters (with values >0x7f)
+		would result in incorrect behaviour as the String will attempt to 'decode' the data, with unpredictable
+		results.
+
+	\param idx
+		Index of the start point for the search
+
+	\return
+		- Index of the last occurrence of any one of the code points in \a utf8_str starting from \a idx.
+		- npos if none of the code points in \a utf8_str were found.
+
+	\exception std::out_of_range	Thrown if \a idx is invalid for this String.
+	*/
+	size_type	find_last_of(const utf8* utf8_str, size_type idx = npos) const
+	{
+		return find_last_of(utf8_str, idx, utf_length(utf8_str));
+	}
+
+	/*!
+	\brief
+		Find the last code point that is not one of a set of code points.
+
+	\param utf8_str
+		Buffer containing null-terminated utf8 encoded data describing the set of code points.
+
+	\note
+		A basic string literal (cast to utf8*) can be passed to this function, provided that the string is
+		comprised only of code points 0x00..0x7f.  The use of extended ASCII characters (with values >0x7f)
+		would result in incorrect behaviour as the String will attempt to 'decode' the data, with unpredictable
+		results.
+
+	\param idx
+		Index of the start point for the search
+
+	\return
+		- Index of the last code point that does not match any one of the code points in \a utf8_str starting from \a idx.
+		- npos if all code points matched one of the code points in \a utf8_str.
+
+	\exception std::out_of_range	Thrown if \a idx is invalid for this String.
+	*/
+	size_type	find_last_not_of(const utf8* utf8_str, size_type idx = npos) const
+	{
+		return find_last_not_of(utf8_str, idx, utf_length(utf8_str));
+	}
+
+	/*!
+	\brief
+		Find the last occurrence of one of a set of code points.
+
+	\param utf8_str
+		Buffer containing utf8 encoded data describing the set of code points.
+
+	\note
+		A basic string literal (cast to utf8*) can be passed to this function, provided that the string is
+		comprised only of code points 0x00..0x7f.  The use of extended ASCII characters (with values >0x7f)
+		would result in incorrect behaviour as the String will attempt to 'decode' the data, with unpredictable
+		results.
+
+	\param idx
+		Index of the start point for the search
+
+	\param str_len
+		Length of the utf8 encoded data in utf8 code units (not code points).
+
+	\return
+		- Index of the last occurrence of any one of the code points in \a utf8_str starting from from \a idx.
+		- npos if none of the code points in \a utf8_str were found.
+
+	\exception std::length_error	Thrown if \a str_len was 'npos'.
+	*/
+	size_type	find_last_of(const utf8* utf8_str, size_type idx, size_type str_len) const
+	{
+		if (str_len == npos)
+			throw std::length_error("Length for utf8 encoded string can not be 'npos'");
+
+		if (d_cplength > 0)
+		{
+			if (idx >= d_cplength)
+				idx = d_cplength - 1;
+
+			size_type encsze = encoded_size(utf8_str, str_len);
+
+			const utf32* pt = &ptr()[idx];
+
+			do
+			{
+				if (npos != find_codepoint(utf8_str, encsze, *pt--))
+					return idx;
+
+			} while (idx-- != 0);
+
+		}
+
+		return npos;
+	}
+
+	/*!
+	\brief
+		Find the last code point that is not one of a set of code points.
+
+	\param utf8_str
+		Buffer containing utf8 encoded data describing the set of code points.
+
+	\note
+		A basic string literal (cast to utf8*) can be passed to this function, provided that the string is
+		comprised only of code points 0x00..0x7f.  The use of extended ASCII characters (with values >0x7f)
+		would result in incorrect behaviour as the String will attempt to 'decode' the data, with unpredictable
+		results.
+
+	\param idx
+		Index of the start point for the search
+
+	\param str_len
+		Length of the utf8 encoded data in utf8 code units (not code points).
+
+	\return
+		- Index of the last code point that does not match any one of the code points in \a utf8_str starting from from \a idx.
+		- npos if all code points matched one of the code points in \a utf8_str.
+
+	\exception std::length_error	Thrown if \a str_len was 'npos'.
+	*/
+	size_type	find_last_not_of(const utf8* utf8_str, size_type idx, size_type str_len) const
+	{
+		if (str_len == npos)
+			throw std::length_error("Length for utf8 encoded string can not be 'npos'");
+
+		if (d_cplength > 0)
+		{
+			if (idx >= d_cplength)
+				idx = d_cplength - 1;
+
+			size_type encsze = encoded_size(utf8_str, str_len);
+
+			const utf32* pt = &ptr()[idx];
+
+			do
+			{
+				if (npos == find_codepoint(utf8_str, encsze, *pt--))
+					return idx;
+
+			} while (idx-- != 0);
+
+		}
+
+		return npos;
+	}
+
+
+	/*!
+	\brief
+		Search for last occurrence of a given code point
+
+	\param code_point
+		The utf32 code point to search for
+
+	\param idx
+		Index of the code point where the search is to start.
+
+	\return
+		- Index of the last occurrence of \a code_point starting from \a idx.
+		- npos if the code point could not be found
+	*/
+	size_type	find_last_of(utf32 code_point, size_type idx = npos) const
+	{
+		return rfind(code_point, idx);
+	}
+
+	/*!
+	\brief
+		Search for the last code point that does not match a given code point
+
+	\param code_point
+		The utf32 code point to search for
+
+	\param idx
+		Index of the code point where the search is to start.
+
+	\return
+		- Index of the last code point that does not match \a code_point starting from from \a idx.
+		- npos if all code points matched \a code_point
+	*/
+	size_type	find_last_not_of(utf32 code_point, size_type idx = npos) const
+	{
+		if (d_cplength > 0)
+		{
+			if (idx >= d_cplength)
+				idx = d_cplength - 1;
+
+			do
+			{
+				if ((*this)[idx] != code_point)
+					return idx;
+
+			} while(idx-- != 0);
+
+		}
+
+		return npos;
+	}
+
+
+	/*!
+	\brief
+		Find the last occurrence of one of a set of chars.
+
+	\param c_str
+		c-string describing the set of chars.
+
+	\param idx
+		Index of the start point for the search
+
+	\return
+		- Index of the last occurrence of any one of the chars in \a c_str starting from \a idx.
+		- npos if none of the chars in \a c_str were found.
+
+	\exception std::out_of_range	Thrown if \a idx is invalid for this String.
+	*/
+	size_type	find_last_of(const char* c_str, size_type idx = npos) const
+	{
+		return find_last_of(c_str, idx, strlen(c_str));
+	}
+
+
+	/*!
+	\brief
+		Find the last code point that is not one of a set of chars.
+
+	\param c_str
+		c-string describing the set of chars.
+
+	\param idx
+		Index of the start point for the search
+
+	\return
+		- Index of the last code point that does not match any one of the chars in \a c_str starting from \a idx.
+		- npos if all code points matched any of the chars in \a c_str.
+
+	\exception std::out_of_range	Thrown if \a idx is invalid for this String.
+	*/
+	size_type	find_last_not_of(const char* c_str, size_type idx = npos) const
+	{
+		return find_last_not_of(c_str, idx, strlen(c_str));
+	}
+
+
+	/*!
+	\brief
+		Find the last occurrence of one of a set of chars.
+
+	\param chars
+		char array containing the set of chars.
+
+	\param idx
+		Index of the start point for the search
+
+	\param chars_len
+		Number of chars in the char array.
+
+	\return
+		- Index of the last occurrence of any one of the chars in \a chars, starting from from \a idx.
+		- npos if none of the chars in \a chars were found.
+
+	\exception std::length_error	Thrown if \a chars_len was 'npos'.
+	*/
+	size_type	find_last_of(const char* chars, size_type idx, size_type chars_len) const
+	{
+		if (chars_len == npos)
+			throw std::length_error("Length for char array can not be 'npos'");
+
+		if (d_cplength > 0)
+		{
+			if (idx >= d_cplength)
+				idx = d_cplength - 1;
+
+			const utf32* pt = &ptr()[idx];
+
+			do
+			{
+				if (npos != find_codepoint(chars, chars_len, *pt--))
+					return idx;
+
+			} while (idx-- != 0);
+
+		}
+
+		return npos;
+	}
+
+
+	/*!
+	\brief
+		Find the last code point that is not one of a set of chars.
+
+	\param chars
+		char array containing the set of chars.
+
+	\param idx
+		Index of the start point for the search
+
+	\param chars_len
+		Number of chars in the char array.
+
+	\return
+		- Index of the last code point that does not match any one of the chars in \a chars, starting from from \a idx.
+		- npos if all code points matched any of the chars in \a chars.
+
+	\exception std::length_error	Thrown if \a chars_len was 'npos'.
+	*/
+	size_type	find_last_not_of(const char* chars, size_type idx, size_type chars_len) const
+	{
+		if (chars_len == npos)
+			throw std::length_error("Length for char array can not be 'npos'");
+
+		if (d_cplength > 0)
+		{
+			if (idx >= d_cplength)
+				idx = d_cplength - 1;
+
+			const utf32* pt = &ptr()[idx];
+
+			do
+			{
+				if (npos == find_codepoint(chars, chars_len, *pt--))
+					return idx;
+
+			} while (idx-- != 0);
+
+		}
+
+		return npos;
+	}
+
+
+	//////////////////////////////////////////////////////////////////////////
+	// Substring
+	//////////////////////////////////////////////////////////////////////////
+	/*!
+	\brief
+		Returns a substring of this String.
+
+	\param idx
+		Index of the first code point to use for the sub-string.
+
+	\param len
+		Maximum number of code points to use for the sub-string
+
+	\return
+		A String object containing the specified sub-string.
+
+	\exception std::out_of_range	Thrown if \a idx is invalid for this String.
+	*/
+	String	substr(size_type idx = 0, size_type len = npos) const
+	{
+		if (d_cplength < idx)
+			throw std::out_of_range("Index is out of range for this CEGUI::String");
+
+		return String(*this, idx, len);
+	}
+
+	//////////////////////////////////////////////////////////////////////////
+	// Iterator creation
+	//////////////////////////////////////////////////////////////////////////
+	/*!
+	\brief
+		Return a forwards iterator that describes the beginning of the String
+
+	\return
+		iterator object that describes the beginning of the String.
+	*/
+	iterator		begin(void)
+	{
+		return iterator(ptr());
+	}
+
+	/*!
+	\brief
+		Return a constant forwards iterator that describes the beginning of the String
+
+	\return
+		const_iterator object that describes the beginning of the String.
+	*/
+	const_iterator	begin(void) const
+	{
+		return const_iterator(ptr());
+	}
+
+	/*!
+	\brief
+		Return a forwards iterator that describes the end of the String
+
+	\return
+		iterator object that describes the end of the String.
+	*/
+	iterator		end(void)
+	{
+		return iterator(&ptr()[d_cplength]);
+	}
+
+	/*!
+	\brief
+		Return a constant forwards iterator that describes the end of the String
+
+	\return
+		const_iterator object that describes the end of the String.
+	*/
+	const_iterator	end(void) const
+	{
+		return const_iterator(&ptr()[d_cplength]);
+	}
+
+	/*!
+	\brief
+		Return a reverse iterator that describes the beginning of the String
+
+	\return
+		reverse_iterator object that describes the beginning of the String (so is actually at the end)
+	*/
+	reverse_iterator		rbegin(void)
+	{
+		return reverse_iterator(end());
+	}
+
+	/*!
+	\brief
+		Return a constant reverse iterator that describes the beginning of the String
+
+	\return
+		const_reverse_iterator object that describes the beginning of the String (so is actually at the end)
+	*/
+	const_reverse_iterator	rbegin(void) const
+	{
+		return const_reverse_iterator(end());
+	}
+
+	/*!
+	\brief
+		Return a reverse iterator that describes the end of the String
+
+	\return
+		reverse_iterator object that describes the end of the String (so is actually at the beginning)
+	*/
+	reverse_iterator		rend(void)
+	{
+		return reverse_iterator(begin());
+	}
+
+	/*!
+	\brief
+		Return a constant reverse iterator that describes the end of the String
+
+	\return
+		const_reverse_iterator object that describes the end of the String (so is actually at the beginning)
+	*/
+	const_reverse_iterator	rend(void) const
+	{
+		return const_reverse_iterator(begin());
+	}
+
+private:
+	/*************************************************************************
+		Implementation Functions
+	*************************************************************************/
+	// string management
+
+	// change size of allocated buffer so it is at least 'new_size'.
+	// May or may not cause re-allocation and copy of buffer if size is larger
+	// will never re-allocate to make size smaller.  (see trim())
+    bool	grow(size_type new_size);
+
+	// perform re-allocation to remove wasted space.
+    void	trim(void);
+
+	// set the length of the string, and terminate it, according to the given value (will not re-allocate, use grow() first).
+	void	setlen(size_type len)
+	{
+		d_cplength = len;
+		ptr()[len] = (utf32)(0);
+	}
+
+	// return a ptr to the buffer in use.
+	utf32*	ptr(void)
+	{
+		return (d_reserve > STR_QUICKBUFF_SIZE) ? d_buffer : d_quickbuff;
+	}
+
+	// return a ptr tot he buffer in use (const version)
+	const utf32*	ptr(void) const
+	{
+		return (d_reserve > STR_QUICKBUFF_SIZE) ? d_buffer : d_quickbuff;
+	}
+
+	// initialise string object
+	void	init(void)
+	{
+		d_reserve			= STR_QUICKBUFF_SIZE;
+		d_encodedbuff		= NULL;
+		d_encodedbufflen	= 0;
+		d_encodeddatlen		= 0;
+		setlen(0);
+	}
+
+	// return true if the given pointer is inside the string data
+	bool	inside(utf32* inptr)
+	{
+		if (inptr < ptr() || ptr() + d_cplength <= inptr)
+			return false;
+		else
+			return true;
+	}
+
+	// compute distance between two iterators, returning a 'safe' value
+	size_type safe_iter_dif(const const_iterator& iter1, const const_iterator& iter2) const
+	{
+		return (iter1.d_ptr == 0) ? 0 : (iter1 - iter2);
+	}
+	
+	// encoding functions
+	// for all:
+	//	src_len is in code units, or 0 for null terminated string.
+	//	dest_len is in code units.
+	//	returns number of code units put into dest buffer.
+	size_type encode(const utf32* src, utf8* dest, size_type dest_len, size_type src_len = 0) const
+	{
+		// count length for null terminated source...
+		if (src_len == 0)
+		{
+			src_len = utf_length(src);
+		}
+
+		size_type destCapacity = dest_len;
+
+		// while there is data in the source buffer,
+		for (uint idx = 0; idx < src_len; ++idx)
+		{
+			utf32	cp = src[idx];
+
+			// check there is enough destination buffer to receive this encoded unit (exit loop & return if not)
+			if (destCapacity < encoded_size(cp))
+			{
+				break;
+			}
+
+			if (cp < 0x80)
+			{
+				*dest++ = (utf8)cp;
+				--destCapacity;
+			}
+			else if (cp < 0x0800)
+			{
+				*dest++ = (utf8)((cp >> 6) | 0xC0);
+				*dest++ = (utf8)((cp & 0x3F) | 0x80);
+				destCapacity -= 2;
+			}
+			else if (cp < 0x10000)
+			{
+				*dest++ = (utf8)((cp >> 12) | 0xE0);
+				*dest++ = (utf8)(((cp >> 6) & 0x3F) | 0x80);
+				*dest++ = (utf8)((cp & 0x3F) | 0x80);
+				destCapacity -= 3;
+			}
+			else
+			{
+				*dest++ = (utf8)((cp >> 18) | 0xF0);
+				*dest++ = (utf8)(((cp >> 12) & 0x3F) | 0x80);
+				*dest++ = (utf8)(((cp >> 6) & 0x3F) | 0x80);
+				*dest++ = (utf8)((cp & 0x3F) | 0x80);
+				destCapacity -= 4;
+			}
+
+		}
+
+		return dest_len - destCapacity;
+	}
+
+	size_type encode(const utf8* src, utf32* dest, size_type dest_len, size_type src_len = 0) const
+	{
+		// count length for null terminated source...
+		if (src_len == 0)
+		{
+			src_len = utf_length(src);
+		}
+
+		size_type destCapacity = dest_len;
+
+		// while there is data in the source buffer, and space in the dest buffer
+		for (uint idx = 0; ((idx < src_len) && (destCapacity > 0));)
+		{
+			utf32	cp;
+			utf8	cu = src[idx++];
+
+			if (cu < 0x80)
+			{
+				cp = (utf32)(cu);
+			}
+			else if (cu < 0xE0)
+			{
+				cp = ((cu & 0x1F) << 6);
+				cp |= (src[idx++] & 0x3F);
+			}
+			else if (cu < 0xF0)
+			{
+				cp = ((cu & 0x0F) << 12);
+				cp |= ((src[idx++] & 0x3F) << 6);
+				cp |= (src[idx++] & 0x3F);
+			}
+			else
+			{
+				cp = ((cu & 0x07) << 18);
+				cp |= ((src[idx++] & 0x3F) << 12);
+				cp |= ((src[idx++] & 0x3F) << 6);
+				cp |= (src[idx++] & 0x3F);
+			}
+
+			*dest++ = cp;
+			--destCapacity;
+		}
+
+		return dest_len - destCapacity;
+	}
+
+	// return the number of utf8 code units required to encode the given utf32 code point
+	size_type encoded_size(utf32 code_point) const
+	{
+		if (code_point < 0x80)
+			return 1;
+		else if (code_point < 0x0800)
+			return 2;
+		else if (code_point < 0x10000)
+			return 3;
+		else
+			return 4;
+	}
+
+	// return number of code units required to re-encode given null-terminated utf32 data as utf8.  return does not include terminating null.
+	size_type encoded_size(const utf32* buf) const
+	{
+		return encoded_size(buf, utf_length(buf));
+	}
+
+	// return number of code units required to re-encode given utf32 data as utf8.   len is number of code units in 'buf'.
+	size_type encoded_size(const utf32* buf, size_type len) const
+	{
+		size_type count = 0;
+
+		while (len--)
+		{
+			count += encoded_size(*buf++);
+		}
+
+		return count;
+	}
+
+	// return number of utf32 code units required to re-encode given utf8 data as utf32.  return does not include terminating null.
+	size_type encoded_size(const utf8* buf) const
+	{
+		return encoded_size(buf, utf_length(buf));
+	}
+
+	// return number of utf32 code units required to re-encode given utf8 data as utf32.  len is number of code units in 'buf'.
+	size_type encoded_size(const utf8* buf, size_type len) const
+	{
+		utf8 tcp;
+		size_type count = 0;
+
+		while (len--)
+		{
+			tcp = *buf++;
+			++count;
+
+			if (tcp < 0x80)
+			{
+			}
+			else if (tcp < 0xE0)
+			{
+				--len;
+				++buf;
+			}
+			else if (tcp < 0xF0)
+			{
+				len -= 2;
+				buf += 2;
+			}
+			else
+			{
+				len -= 2;
+				buf += 3;
+			}
+
+		}
+
+		return count;
+	}
+
+	// return number of code units in a null terminated string
+	size_type utf_length(const utf8* utf8_str) const
+	{
+		size_type cnt = 0;
+		while (*utf8_str++)
+			cnt++;
+
+		return cnt;
+	}
+
+	// return number of code units in a null terminated string
+	size_type utf_length(const utf32* utf32_str) const
+	{
+		size_type cnt = 0;
+		while (*utf32_str++)
+			cnt++;
+
+		return cnt;
+	}
+
+	// build an internal buffer with the string encoded as utf8 (remains valid until string is modified).
+    utf8* build_utf8_buff(void) const;
+
+	// compare two utf32 buffers
+	int	utf32_comp_utf32(const utf32* buf1, const utf32* buf2, size_type cp_count) const
+	{
+		if (!cp_count)
+			return 0;
+
+		while ((--cp_count) && (*buf1 == *buf2))
+			buf1++, buf2++;
+		
+		return *buf1 - *buf2;
+	}
+
+	// compare utf32 buffer with char buffer (chars are taken to be code-points in the range 0x00-0xFF)
+	int utf32_comp_char(const utf32* buf1, const char* buf2, size_type cp_count) const
+	{
+		if (!cp_count)
+			return 0;
+
+		while ((--cp_count) && (*buf1 == static_cast<utf32>(static_cast<unsigned char>(*buf2))))
+			buf1++, buf2++;
+
+		return *buf1 - static_cast<utf32>(static_cast<unsigned char>(*buf2));
+	}
+
+	// compare utf32 buffer with encoded utf8 data
+	int utf32_comp_utf8(const utf32* buf1, const utf8* buf2, size_type cp_count) const
+	{
+		if (!cp_count)
+			return 0;
+
+		utf32	cp;
+		utf8	cu;
+
+		do
+		{
+			cu = *buf2++;
+
+			if (cu < 0x80)
+			{
+				cp = (utf32)(cu);
+			}
+			else if (cu < 0xE0)
+			{
+				cp = ((cu & 0x1F) << 6);
+				cp |= (*buf2++ & 0x3F);
+			}
+			else if (cu < 0xF0)
+			{
+				cp = ((cu & 0x0F) << 12);
+				cp |= ((*buf2++ & 0x3F) << 6);
+				cp |= (*buf2++ & 0x3F);
+			}
+			else
+			{
+				cp = ((cu & 0x07) << 18);
+				cp |= ((*buf2++ & 0x3F) << 12);
+				cp |= ((*buf2++ & 0x3F) << 6);
+				cp |= (*buf2++ & 0x3F);
+			}
+
+		} while ((*buf1++ == cp) && (--cp_count));
+
+		return (*--buf1) - cp;
+	}
+
+	// return index of first occurrence of 'code_point' in std::string 'str', or npos if none
+	size_type find_codepoint(const std::string& str, utf32 code_point) const
+	{
+		size_type idx = 0, sze = (size_type)str.size();
+
+		while (idx != sze)
+		{
+			if (code_point == static_cast<utf32>(static_cast<unsigned char>(str[idx])))
+				return idx;
+
+			++idx;
+		}
+
+		return npos;
+	}
+
+	// return index of first occurrence of 'code_point' in utf8 encoded string 'str', or npos if none.  len is in code points.
+	size_type find_codepoint(const utf8* str, size_type len, utf32 code_point) const 
+	{
+		size_type idx = 0;
+
+		utf32	cp;
+		utf8	cu;
+
+		while (idx != len) {
+			cu = *str++;
+
+			if (cu < 0x80)
+			{
+				cp = (utf32)(cu);
+			}
+			else if (cu < 0xE0)
+			{
+				cp = ((cu & 0x1F) << 6);
+				cp |= (*str++ & 0x3F);
+			}
+			else if (cu < 0xF0)
+			{
+				cp = ((cu & 0x0F) << 12);
+				cp |= ((*str++ & 0x3F) << 6);
+				cp |= (*str++ & 0x3F);
+			}
+			else
+			{
+				cp = ((cu & 0x07) << 18);
+				cp |= ((*str++ & 0x3F) << 12);
+				cp |= ((*str++ & 0x3F) << 6);
+				cp |= (*str++ & 0x3F);
+			}
+
+			if (code_point == cp)
+				return idx;
+
+			++idx;
+		}
+
+		return npos;
+	}
+
+
+	// return index of first occurrence of 'code_point' in char array 'chars', or npos if none
+	size_type find_codepoint(const char* chars, size_type chars_len, utf32 code_point) const
+	{
+		for (size_type idx = 0; idx != chars_len; ++idx)
+		{
+			if (code_point == static_cast<utf32>(static_cast<unsigned char>(chars[idx])))
+				return idx;
+		}
+
+		return npos;
+	}
+
+};
+
+
+//////////////////////////////////////////////////////////////////////////
+// Comparison operators
+//////////////////////////////////////////////////////////////////////////
+/*!
+\brief
+	Return true if String \a str1 is equal to String \a str2
+*/
+bool CEGUIEXPORT	operator==(const String& str1, const String& str2);
+
+/*!
+\brief
+	Return true if String \a str is equal to std::string \a std_str
+*/
+bool CEGUIEXPORT	operator==(const String& str, const std::string& std_str);
+
+/*!
+\brief
+	Return true if String \a str is equal to std::string \a std_str
+*/
+bool CEGUIEXPORT	operator==(const std::string& std_str, const String& str);
+
+/*!
+\brief
+	Return true if String \a str is equal to null-terminated utf8 data \a utf8_str
+*/
+bool CEGUIEXPORT	operator==(const String& str, const utf8* utf8_str);
+
+/*!
+\brief
+	Return true if String \a str is equal to null-terminated utf8 data \a utf8_str
+*/
+bool CEGUIEXPORT	operator==(const utf8* utf8_str, const String& str);
+
+/*!
+\brief
+	Return true if String \a str1 is not equal to String \a str2
+*/
+bool CEGUIEXPORT	operator!=(const String& str1, const String& str2);
+
+/*!
+\brief
+	Return true if String \a str is not equal to std::string \a std_str
+*/
+bool CEGUIEXPORT	operator!=(const String& str, const std::string& std_str);
+
+/*!
+\brief
+	Return true if String \a str is not equal to std::string \a std_str
+*/
+bool CEGUIEXPORT	operator!=(const std::string& std_str, const String& str);
+
+/*!
+\brief
+	Return true if String \a str is not equal to null-terminated utf8 data \a utf8_str
+*/
+bool CEGUIEXPORT	operator!=(const String& str, const utf8* utf8_str);
+
+/*!
+\brief
+	Return true if String \a str is not equal to null-terminated utf8 data \a utf8_str
+*/
+bool CEGUIEXPORT	operator!=(const utf8* utf8_str, const String& str);
+
+/*!
+\brief
+	Return true if String \a str1 is lexicographically less than String \a str2
+*/
+bool CEGUIEXPORT	operator<(const String& str1, const String& str2);
+
+/*!
+\brief
+	Return true if String \a str is lexicographically less than std::string \a std_str
+*/
+bool CEGUIEXPORT	operator<(const String& str, const std::string& std_str);
+
+/*!
+\brief
+	Return true if String \a str is lexicographically less than std::string \a std_str
+*/
+bool CEGUIEXPORT	operator<(const std::string& std_str, const String& str);
+
+/*!
+\brief
+	Return true if String \a str is lexicographically less than null-terminated utf8 data \a utf8_str
+*/
+bool CEGUIEXPORT	operator<(const String& str, const utf8* utf8_str);
+
+/*!
+\brief
+	Return true if String \a str is lexicographically less than null-terminated utf8 data \a utf8_str
+*/
+bool CEGUIEXPORT	operator<(const utf8* utf8_str, const String& str);
+
+/*!
+\brief
+	Return true if String \a str1 is lexicographically greater than String \a str2
+*/
+bool CEGUIEXPORT	operator>(const String& str1, const String& str2);
+
+/*!
+\brief
+	Return true if String \a str is lexicographically greater than std::string \a std_str
+*/
+bool CEGUIEXPORT	operator>(const String& str, const std::string& std_str);
+
+/*!
+\brief
+	Return true if String \a str is lexicographically greater than std::string \a std_str
+*/
+bool CEGUIEXPORT	operator>(const std::string& std_str, const String& str);
+
+/*!
+\brief
+	Return true if String \a str is lexicographically greater than null-terminated utf8 data \a utf8_str
+*/
+bool CEGUIEXPORT	operator>(const String& str, const utf8* utf8_str);
+
+/*!
+\brief
+	Return true if String \a str is lexicographically greater than null-terminated utf8 data \a utf8_str
+*/
+bool CEGUIEXPORT	operator>(const utf8* utf8_str, const String& str);
+
+/*!
+\brief
+	Return true if String \a str1 is lexicographically less than or equal to String \a str2
+*/
+bool CEGUIEXPORT	operator<=(const String& str1, const String& str2);
+
+/*!
+\brief
+	Return true if String \a str is lexicographically less than or equal to std::string \a std_str
+*/
+bool CEGUIEXPORT	operator<=(const String& str, const std::string& std_str);
+
+/*!
+\brief
+	Return true if String \a str is lexicographically less than or equal to std::string \a std_str
+*/
+bool CEGUIEXPORT	operator<=(const std::string& std_str, const String& str);
+
+/*!
+\brief
+	Return true if String \a str is lexicographically less than or equal to null-terminated utf8 data \a utf8_str
+*/
+bool CEGUIEXPORT	operator<=(const String& str, const utf8* utf8_str);
+
+/*!
+\brief
+	Return true if String \a str is lexicographically less than or equal to null-terminated utf8 data \a utf8_str
+*/
+bool CEGUIEXPORT	operator<=(const utf8* utf8_str, const String& str);
+
+/*!
+\brief
+	Return true if String \a str1 is lexicographically greater than or equal to String \a str2
+*/
+bool CEGUIEXPORT	operator>=(const String& str1, const String& str2);
+
+/*!
+\brief
+	Return true if String \a str is lexicographically greater than or equal to std::string \a std_str
+*/
+bool CEGUIEXPORT	operator>=(const String& str, const std::string& std_str);
+
+/*!
+\brief
+	Return true if String \a str is lexicographically greater than or equal to std::string \a std_str
+*/
+bool CEGUIEXPORT	operator>=(const std::string& std_str, const String& str);
+
+/*!
+\brief
+	Return true if String \a str is lexicographically greater than or equal to null-terminated utf8 data \a utf8_str
+*/
+bool CEGUIEXPORT	operator>=(const String& str, const utf8* utf8_str);
+
+/*!
+\brief
+	Return true if String \a str is lexicographically greater than or equal to null-terminated utf8 data \a utf8_str
+*/
+bool CEGUIEXPORT	operator>=(const utf8* utf8_str, const String& str);
+
+/*!
+\brief
+	Return true if String \a str is equal to c-string \a c_str
+*/
+bool CEGUIEXPORT	operator==(const String& str, const char* c_str);
+
+/*!
+\brief
+	Return true if c-string \a c_str is equal to String \a str
+*/
+bool CEGUIEXPORT	operator==(const char* c_str, const String& str);
+
+/*!
+\brief
+	Return true if String \a str is not equal to c-string \a c_str
+*/
+bool CEGUIEXPORT	operator!=(const String& str, const char* c_str);
+
+/*!
+\brief
+	Return true if c-string \a c_str is not equal to String \a str
+*/
+bool CEGUIEXPORT	operator!=(const char* c_str, const String& str);
+
+/*!
+\brief
+	Return true if String \a str is lexicographically less than c-string \a c_str
+*/
+bool CEGUIEXPORT	operator<(const String& str, const char* c_str);
+
+/*!
+\brief
+	Return true if c-string \a c_str is lexicographically less than String \a str
+*/
+bool CEGUIEXPORT	operator<(const char* c_str, const String& str);
+
+/*!
+\brief
+Return true if String \a str is lexicographically greater than c-string \a c_str
+*/
+bool CEGUIEXPORT	operator>(const String& str, const char* c_str);
+
+/*!
+\brief
+Return true if c-string \a c_str is lexicographically greater than String \a str
+*/
+bool CEGUIEXPORT	operator>(const char* c_str, const String& str);
+
+/*!
+\brief
+	Return true if String \a str is lexicographically less than or equal to c-string \a c_str
+*/
+bool CEGUIEXPORT	operator<=(const String& str, const char* c_str);
+
+/*!
+\brief
+	Return true if c-string \a c_str is lexicographically less than or equal to String \a str
+*/
+bool CEGUIEXPORT	operator<=(const char* c_str, const String& str);
+
+/*!
+\brief
+	Return true if String \a str is lexicographically greater than or equal to c-string \a c_str
+*/
+bool CEGUIEXPORT	operator>=(const String& str, const char* c_str);
+
+/*!
+\brief
+	Return true if c-string \a c_str is lexicographically greater than or equal to String \a str
+*/
+bool CEGUIEXPORT	operator>=(const char* c_str, const String& str);
+
+//////////////////////////////////////////////////////////////////////////
+// Concatenation operator functions
+//////////////////////////////////////////////////////////////////////////
+/*!
+\brief
+	Return String object that is the concatenation of the given inputs
+
+\param str1
+	String object describing first part of the new string
+
+\param str2
+	String object describing the second part of the new string
+
+\return
+	A String object that is the concatenation of \a str1 and \a str2
+
+\exception std::length_error	Thrown if the resulting String would be too large.
+*/
+String CEGUIEXPORT	operator+(const String str1, const String& str2);
+
+/*!
+\brief
+	Return String object that is the concatenation of the given inputs
+
+\param str
+	String object describing first part of the new string
+
+\param std_str
+	std::string object describing the second part of the new string
+
+\return
+	A String object that is the concatenation of \a str and \a std_str
+
+\exception std::length_error	Thrown if the resulting String would be too large.
+*/
+String CEGUIEXPORT	operator+(const String str, const std::string& std_str);
+
+/*!
+\brief
+	Return String object that is the concatenation of the given inputs
+
+\param std_str
+	std::string object describing the first part of the new string
+
+\param str
+	String object describing the second part of the new string
+
+\return
+	A String object that is the concatenation of \a std_str and \a str
+
+\exception std::length_error	Thrown if the resulting String would be too large.
+*/
+String CEGUIEXPORT	operator+(const std::string& std_str, const String& str);
+
+/*!
+\brief
+	Return String object that is the concatenation of the given inputs
+
+\param str
+	String object describing first part of the new string
+
+\param utf8_str
+	Buffer containing null-terminated utf8 encoded data describing the second part of the new string
+
+\return
+	A String object that is the concatenation of \a str and \a utf8_str
+
+\exception std::length_error	Thrown if the resulting String would be too large.
+*/
+String CEGUIEXPORT	operator+(const String str, const utf8* utf8_str);
+
+/*!
+\brief
+	Return String object that is the concatenation of the given inputs
+
+\param utf8_str
+	Buffer containing null-terminated utf8 encoded data describing the first part of the new string
+
+\param str
+	String object describing the second part of the new string
+
+\return
+	A String object that is the concatenation of \a str and \a utf8_str
+
+\exception std::length_error	Thrown if the resulting String would be too large.
+*/
+String CEGUIEXPORT	operator+(const utf8* utf8_str, const String& str);
+
+/*!
+\brief
+	Return String object that is the concatenation of the given inputs
+
+\param str
+	String object describing the first part of the new string
+
+\param code_point
+	utf32 code point describing the second part of the new string
+
+\return
+	A String object that is the concatenation of \a str and \a code_point
+
+\exception std::length_error	Thrown if the resulting String would be too large.
+*/
+String CEGUIEXPORT	operator+(const String str, utf32 code_point);
+
+/*!
+\brief
+	Return String object that is the concatenation of the given inputs
+
+\param code_point
+	utf32 code point describing the first part of the new string
+
+\param str
+	String object describing the second part of the new string
+
+\return
+	A String object that is the concatenation of \a code_point and \a str
+
+\exception std::length_error	Thrown if the resulting String would be too large.
+*/
+String CEGUIEXPORT	operator+(utf32 code_point, const String& str);
+
+/*!
+\brief
+	Return String object that is the concatenation of the given inputs
+
+\param str
+	String object describing first part of the new string
+
+\param c_str
+	c-string describing the second part of the new string
+
+\return
+	A String object that is the concatenation of \a str and \a c_str
+
+\exception std::length_error	Thrown if the resulting String would be too large.
+*/
+String CEGUIEXPORT	operator+(const String str, const char* c_str);
+
+/*!
+\brief
+	Return String object that is the concatenation of the given inputs
+
+\param c_str
+	c-string describing the first part of the new string
+
+\param str
+	String object describing the second part of the new string
+
+\return
+	A String object that is the concatenation of \a c_str and \a str
+
+\exception std::length_error	Thrown if the resulting String would be too large.
+*/
+String CEGUIEXPORT	operator+(const char* c_str, const String& str);
+
+
+//////////////////////////////////////////////////////////////////////////
+// Output (stream) functions
+//////////////////////////////////////////////////////////////////////////
+std::ostream& operator<<(std::ostream& s, const String& str);
+
+
+//////////////////////////////////////////////////////////////////////////
+// Modifying operations
+//////////////////////////////////////////////////////////////////////////
+/*!
+\brief
+	Swap the contents for two String objects
+
+\param str1
+	String object who's contents are to be swapped with \a str2
+
+\param str2
+	String object who's contents are to be swapped with \a str1
+
+\return
+	Nothing
+*/
+void CEGUIEXPORT swap(String& str1, String& str2);
+
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIString_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIFont.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIFont.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIFont.h	(revision 1092)
@@ -0,0 +1,1077 @@
+/************************************************************************
+	filename: 	CEGUIFont.h
+	created:	21/2/2004
+	author:		Paul D Turner
+	
+	purpose:	Defines interface for the Font class
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIFont_h_
+#define _CEGUIFont_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIString.h"
+#include "CEGUIRect.h"
+#include "CEGUIVector.h"
+#include "CEGUIColourRect.h"
+
+#include <map>
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Enumerated type that contains the valid flags that can be passed to createFont when creating a new font.
+*/
+enum FontFlag
+{
+	Default,			//!< Default / None.
+	NoAntiAlias 		//!< Fonts generated from TrueType files should not be anti-aliased.
+};
+
+
+/*!
+\brief
+	Enumerated type that contains valid formatting types that can be specified when rendering text into a Rect area (the formatting Rect).
+*/
+enum TextFormatting
+{
+	LeftAligned,			//!< All text is printed on a single line.  The left-most character is aligned with the left edge of the formatting Rect.
+	RightAligned,			//!< All text is printed on a single line.  The right-most character is aligned with the right edge of the formatting Rect.
+	Centred,				//!< All text is printed on a single line.  The text is centred horizontally in the formatting Rect.
+	Justified,				//!< All text is printed on a single line.  The left-most and right-most characters are aligned with the edges of the formatting Rect.
+	WordWrapLeftAligned,	//!< Text is broken into multiple lines no wider than the formatting Rect.  The left-most character of each line is aligned with the left edge of the formatting Rect.
+	WordWrapRightAligned,	//!< Text is broken into multiple lines no wider than the formatting Rect.  The right-most character of each line is aligned with the right edge of the formatting Rect.
+	WordWrapCentred, 		//!< Text is broken into multiple lines no wider than the formatting Rect.  Each line is centred horizontally in the formatting Rect.
+	WordWrapJustified 		//!< Text is broken into multiple lines no wider than the formatting Rect.  The left-most and right-most characters of each line are aligned with the edges of the formatting Rect.
+};
+
+/*!
+\brief
+	Class that encapsulates text rendering functionality for a typeface
+
+	A Font object is created for each unique typeface required.  The Font class provides
+	methods for loading typefaces from various sources, and then for outputting text via
+	the Renderer object.
+*/
+class CEGUIEXPORT Font
+{
+	friend class Font_xmlHandler;
+public:
+	/*************************************************************************
+		Constants
+	*************************************************************************/
+	static const argb_t		DefaultColour;			//!< Colour value used whenever a colour is not specified.
+
+
+	/*************************************************************************
+		Text drawing methods
+	*************************************************************************/
+	/*!
+	\brief
+		Draw text into a specified area of the display.
+
+	\param text
+		String object containing the text to be drawn.
+
+	\param draw_area
+		Rect object describing the area of the display where the text is to be rendered.  The text is not clipped to this Rect, but is formatted
+		using this Rect depending upon the option specified in \a fmt.
+
+	\param z
+		flat value specifying the z co-ordinate for the drawn text.
+
+	\param clip_rect
+		Rect object describing the clipping area for the drawing.  No drawing will occur outside this Rect.
+
+	\param fmt
+		One of the TextFormatting values specifying the text formatting required.
+
+	\param colours
+		ColourRect object describing the colours to be applied when drawing the text.  NB: The colours specified in here are applied to each glyph,
+		rather than the text as a whole.
+
+	\param x_scale
+		Scaling factor to be applied to each glyph's x axis, where 1.0f is considered to be 'normal'.
+
+	\param y_scale
+		Scaling factor to be applied to each glyph's y axis, where 1.0f is considered to be 'normal'.
+
+	\return
+		The number of lines output.  NB: This does not consider clipping, so if all text was clipped, this would still return >=1.
+	*/
+	size_t	drawText(const String& text, const Rect& draw_area, float z, const Rect& clip_rect, TextFormatting fmt, const ColourRect& colours, float x_scale = 1.0f, float y_scale = 1.0f) const;
+
+
+	/*!
+	\brief
+		Draw text into a specified area of the display using default colours.
+
+	\param text
+		String object containing the text to be drawn.
+
+	\param draw_area
+		Rect object describing the area of the display where the text is to be rendered.  The text is not clipped to this Rect, but is formatted
+		using this Rect depending upon the option specified in \a fmt.
+
+	\param z
+		flat value specifying the z co-ordinate for the drawn text.
+
+	\param clip_rect
+		Rect object describing the clipping area for the drawing.  No drawing will occur outside this Rect.
+
+	\param fmt
+		One of the TextFormatting values specifying the text formatting required.
+
+	\param x_scale
+		Scaling factor to be applied to each glyph's x axis, where 1.0f is considered to be 'normal'.
+
+	\param y_scale
+		Scaling factor to be applied to each glyph's y axis, where 1.0f is considered to be 'normal'.
+
+	\return
+		The number of lines output.  NB: This does not consider clipping, so if all text was clipped, this would still return >=1.
+	*/
+	size_t	drawText(const String& text, const Rect& draw_area, float z, const Rect& clip_rect, TextFormatting fmt, float x_scale = 1.0f, float y_scale = 1.0f) const
+	{ return drawText(text, draw_area, z, clip_rect, fmt, ColourRect(DefaultColour, DefaultColour, DefaultColour, DefaultColour), x_scale, y_scale); }
+
+
+	/*!
+	\brief
+		Draw text into a specified area of the display with default colours and default formatting (LeftAligned).
+
+	\param text
+		String object containing the text to be drawn.
+
+	\param draw_area
+		Rect object describing the area of the display where the text is to be rendered.  The text is not clipped to this Rect, but is formatted
+		using this Rect depending upon the option specified in \a fmt.
+
+	\param z
+		flat value specifying the z co-ordinate for the drawn text.
+
+	\param clip_rect
+		Rect object describing the clipping area for the drawing.  No drawing will occur outside this Rect.
+
+	\param x_scale
+		Scaling factor to be applied to each glyph's x axis, where 1.0f is considered to be 'normal'.
+
+	\param y_scale
+		Scaling factor to be applied to each glyph's y axis, where 1.0f is considered to be 'normal'.
+
+	\return
+		Nothing.
+	*/
+	void	drawText(const String& text, const Rect& draw_area, float z, const Rect& clip_rect, float x_scale = 1.0f, float y_scale = 1.0f) const
+	{ drawText(text, draw_area, z, clip_rect, LeftAligned, ColourRect(DefaultColour, DefaultColour, DefaultColour, DefaultColour), x_scale, y_scale); }
+
+
+	/*!
+	\brief
+		Draw text into a specified area of the display.
+
+	\param text
+		String object containing the text to be drawn.
+
+	\param draw_area
+		Rect object describing the area of the display where the text is to be rendered.  The text is formatted using this Rect depending
+		upon the option specified in \a fmt.  Additionally, the drawn text is clipped to be within this Rect (applies to non-word wrapped formatting
+		where the text may otherwise have fallen outside this Rect).
+
+	\param z
+		flat value specifying the z co-ordinate for the drawn text.
+
+	\param fmt
+		One of the TextFormatting values specifying the text formatting required.
+
+	\param colours
+		ColourRect object describing the colours to be applied when drawing the text.  NB: The colours specified in here are applied to each glyph,
+		rather than the text as a whole.
+
+	\param x_scale
+		Scaling factor to be applied to each glyph's x axis, where 1.0f is considered to be 'normal'.
+
+	\param y_scale
+		Scaling factor to be applied to each glyph's y axis, where 1.0f is considered to be 'normal'.
+
+	\return
+		The number of lines output.  NB: This does not consider clipping, so if all text was clipped, this would still return >=1.
+	*/
+	size_t	drawText(const String& text, const Rect& draw_area, float z, TextFormatting fmt, const ColourRect& colours, float x_scale = 1.0f, float y_scale = 1.0f) const
+	{ return drawText(text, draw_area, z, draw_area, fmt, colours, x_scale, y_scale); }
+
+
+	/*!
+	\brief
+		Draw text into a specified area of the display with default colours.
+
+	\param text
+		String object containing the text to be drawn.
+
+	\param draw_area
+		Rect object describing the area of the display where the text is to be rendered.  The text is formatted using this Rect depending
+		upon the option specified in \a fmt.  Additionally, the drawn text is clipped to be within this Rect (applies to non-word wrapped formatting
+		where the text may otherwise have fallen outside this Rect).
+
+	\param z
+		flat value specifying the z co-ordinate for the drawn text.
+
+	\param fmt
+		One of the TextFormatting values specifying the text formatting required.
+
+	\param x_scale
+		Scaling factor to be applied to each glyph's x axis, where 1.0f is considered to be 'normal'.
+
+	\param y_scale
+		Scaling factor to be applied to each glyph's y axis, where 1.0f is considered to be 'normal'.
+
+	\return
+		The number of lines output.  NB: This does not consider clipping, so if all text was clipped, this would still return >=1.
+	*/
+	size_t	drawText(const String& text, const Rect& draw_area, float z, TextFormatting fmt, float x_scale = 1.0f, float y_scale = 1.0f) const
+	{ return drawText(text, draw_area, z, draw_area, fmt, ColourRect(DefaultColour, DefaultColour, DefaultColour, DefaultColour), x_scale, y_scale); }
+
+
+	/*!
+	\brief
+		Draw text into a specified area of the display with default colours and default formatting (LeftAligned).
+
+	\param text
+		String object containing the text to be drawn.
+
+	\param draw_area
+		Rect object describing the area of the display where the text is to be rendered.  The text is formatted using this Rect depending
+		upon the option specified in \a fmt.  Additionally, the drawn text is clipped to be within this Rect (applies to non-word wrapped formatting
+		where the text may otherwise have fallen outside this Rect).
+
+	\param z
+		flat value specifying the z co-ordinate for the drawn text.
+
+	\param x_scale
+		Scaling factor to be applied to each glyph's x axis, where 1.0f is considered to be 'normal'.
+
+	\param y_scale
+		Scaling factor to be applied to each glyph's y axis, where 1.0f is considered to be 'normal'.
+
+	\return
+		Nothing.
+	*/
+	void	drawText(const String& text, const Rect& draw_area, float z, float x_scale = 1.0f, float y_scale = 1.0f) const
+	{ drawText(text, draw_area, z, draw_area, LeftAligned, ColourRect(DefaultColour, DefaultColour, DefaultColour, DefaultColour), x_scale, y_scale); }
+
+
+	/*!
+	\brief
+		Draw text at the specified location.
+
+	\param text
+		String object containing the text to be drawn.
+
+	\param position
+		Vector3 object describing the location for the text.  NB: The position specified here corresponds to the text baseline and not the
+		top of any glyph.  The baseline spacing required can be retrieved by calling getBaseline().
+		
+	\param clip_rect
+		Rect object describing the clipping area for the drawing.  No drawing will occur outside this Rect.
+
+	\param colours
+		ColourRect object describing the colours to be applied when drawing the text.  NB: The colours specified in here are applied to each glyph,
+		rather than the text as a whole.
+
+	\param x_scale
+		Scaling factor to be applied to each glyph's x axis, where 1.0f is considered to be 'normal'.
+
+	\param y_scale
+		Scaling factor to be applied to each glyph's y axis, where 1.0f is considered to be 'normal'.
+
+	\return
+		Nothing.
+	*/
+	void	drawText(const String& text, const Vector3& position, const Rect& clip_rect, const ColourRect& colours, float x_scale = 1.0f, float y_scale = 1.0f) const
+	{ drawText(text, Rect(position.d_x, position.d_y, position.d_x, position.d_y), position.d_z, clip_rect, LeftAligned, colours, x_scale, y_scale); }
+
+
+	/*!
+	\brief
+		Draw text at the specified location with default colours.
+
+	\param text
+		String object containing the text to be drawn.
+
+	\param position
+		Vector3 object describing the location for the text.  NB: The position specified here corresponds to the text baseline and not the
+		top of any glyph.  The baseline spacing required can be retrieved by calling getBaseline().
+		
+	\param clip_rect
+		Rect object describing the clipping area for the drawing.  No drawing will occur outside this Rect.
+
+	\param x_scale
+		Scaling factor to be applied to each glyph's x axis, where 1.0f is considered to be 'normal'.
+
+	\param y_scale
+		Scaling factor to be applied to each glyph's y axis, where 1.0f is considered to be 'normal'.
+
+	\return
+		Nothing.
+	*/
+	void	drawText(const String& text, const Vector3& position, const Rect& clip_rect, float x_scale = 1.0f, float y_scale = 1.0f) const
+	{ drawText(text, Rect(position.d_x, position.d_y, position.d_x, position.d_y), position.d_z, clip_rect, LeftAligned, ColourRect(DefaultColour, DefaultColour, DefaultColour, DefaultColour), x_scale, y_scale); }
+
+
+	/*************************************************************************
+		Methods to define available glyphs (truetype fonts only)
+	*************************************************************************/
+	/*!
+	\brief
+		Define the set of code points to be renderable by the font.
+
+	\note
+		This function can take some time to execute depending upon the size of the code point set, and the size of the
+		font being operated upon.
+
+	\param glyph_set
+		String object describing all the code points that will be renderable by this font
+
+	\return
+		Nothing
+
+	\exception	InvalidRequestException		thrown if the font is based on a bitmap rather than a true-type font.
+	\exception	RendererException			thrown if the Renderer can't support a texture large enough to hold the glyph imagery.
+	\exception	MemoryException				thrown if allocation of imagery construction buffer fails.
+	*/
+	void	defineFontGlyphs(const String& glyph_set);
+
+
+	/*!
+	\brief
+		Define the range of code points to be renderable by the font.
+
+	\note
+		This function can take some time to execute depending upon the size of the code point set, and the size of the
+		font being operated upon.
+
+	\note
+		The code point arguments must satisfy the following:  \a first_code_point <= \a last_code_point, otherwise results are undefined
+
+	\param first_code_point
+		utf32 value describing the first code point that will be renderable by this font.
+
+	\param last_code_point
+		utf32 value describing the last code point that will be renderable by this font.
+
+	\return
+		Nothing
+
+	\exception	InvalidRequestException		thrown if the font is based on a bitmap rather than a true-type font.
+	\exception	RendererException			thrown if the Renderer can't support a texture large enough to hold the glyph imagery.
+	\exception	MemoryException				thrown if allocation of imagery construction buffer fails.
+	*/
+	void	defineFontGlyphs(utf32 first_code_point, utf32 last_code_point);
+
+
+	/*!
+	\brief
+		Set the native resolution for this Font
+
+	\param size
+		Size object describing the new native screen resolution for this Font.
+
+	\return
+		Nothing
+	*/
+	void	setNativeResolution(const Size& size);
+
+
+	/*!
+	\brief
+		Notify the Font of the current (usually new) display resolution.
+
+	\param size
+		Size object describing the display resolution
+
+	\return
+		Nothing
+	*/
+	void	notifyScreenResolution(const Size& size);
+
+
+	/*!
+	\brief
+		Enable or disable auto-scaling for this Font.
+
+	\param setting
+		true to enable auto-scaling, false to disable auto-scaling.
+
+	\return
+		Nothing.
+	*/
+	void	setAutoScalingEnabled(bool setting);
+
+
+	/*!
+	\brief
+		Set whether the font is anti-aliased or not.  Only relevant for dynamic fonts, this setting is
+		ignored for bitmapped fonts.
+
+	\param setting
+		- true if the font should be anti-aliased.
+		- false if the font should not be anti-aliased.
+
+	\return
+		Nothing.
+	*/
+	void	setAntiAliased(bool setting);
+
+
+	/*************************************************************************
+		Informational methods
+	*************************************************************************/
+	/*!
+	\brief
+		Return the pixel width of the specified text if rendered with this Font.
+
+	\param text
+		String object containing the text to return the rendered pixel width for.
+
+	\param x_scale
+		Scaling factor to be applied to each glyph's x axis when measuring the extent, where 1.0f is considered to be 'normal'.
+
+	\return
+		Number of pixels that \a text will occupy when rendered with this Font.
+	*/
+	float	getTextExtent(const String& text, float x_scale = 1.0f) const;
+
+
+	/*!
+	\brief
+		Return the pixel line spacing value for.
+
+	\param y_scale
+		Scaling factor to be applied to the line spacing, where 1.0f is considered to be 'normal'.
+
+	\return
+		Number of pixels between vertical base lines, i.e. The minimum pixel space between two lines of text.
+	*/
+	float	getLineSpacing(float y_scale = 1.0f) const		{return d_lineSpacing * y_scale;}
+
+
+	/*!
+	\brief
+		return the exact pixel height of the font.
+
+	\param y_scale
+		Scaling factor to be applied to the height, where 1.0f is considered to be 'normal'.
+
+	\return
+		float value describing the pixel height of the font without any additional padding.
+	*/
+	float	getFontHeight(float y_scale = 1.0f) const	{return d_lineHeight * y_scale;}
+
+
+	/*!
+	\brief
+		Return the number of pixels from the top of the highest glyph to the baseline
+
+	\param y_scale
+		Scaling factor to be applied to the baseline distance, where 1.0f is considered to be 'normal'.
+
+	\return
+		pixel spacing from top of front glyphs to baseline
+	*/
+	float	getBaseline(float y_scale = 1.0f) const			{return d_max_bearingY * y_scale;}
+
+
+	/*!
+	\brief
+		Return the index of the closest text character in String \a text that corresponds to pixel location \a pixel if the text were rendered.
+
+	\param text
+		String object containing the text.
+
+	\param pixel
+		Specifies the (horizontal) pixel offset to return the character index for.
+
+	\param x_scale
+		Scaling factor to be applied to each glyph's x axis when measuring the text extent, where 1.0f is considered to be 'normal'.
+
+	\return
+		Returns a character index into String \a text for the character that would be rendered closest to horizontal pixel offset \a pixel if the
+		text were to be rendered via this Font.  Range of the return is from 0 to text.length(), so may actually return an index past the end of
+		the string, which indicates \a pixel was beyond the last character.
+	*/
+	size_t	getCharAtPixel(const String& text, float pixel, float x_scale = 1.0f) const		{return getCharAtPixel(text, 0, pixel, x_scale);}
+
+
+	/*!
+	\brief
+		Return the index of the closest text character in String \a text, starting at character index \a start_char, that corresponds
+		to pixel location \a pixel if the text were to be rendered.
+
+	\param text
+		String object containing the text.
+
+	\param start_char
+		index of the first character to consider.  This is the lowest value that will be returned from the call.
+
+	\param pixel
+		Specifies the (horizontal) pixel offset to return the character index for.
+
+	\param x_scale
+		Scaling factor to be applied to each glyph's x axis when measuring the text extent, where 1.0f is considered to be 'normal'.
+
+	\return
+		Returns a character index into String \a text for the character that would be rendered closest to horizontal pixel offset \a pixel if the
+		text were to be rendered via this Font.  Range of the return is from 0 to text.length(), so may actually return an index past the end of
+		the string, which indicates \a pixel was beyond the last character.
+	*/
+	size_t	getCharAtPixel(const String& text, size_t start_char, float pixel, float x_scale = 1.0f) const;
+
+
+	/*!
+	\brief
+		Return the name of this font.
+
+	\return
+		String object holding the name of this font.
+	*/
+	const String&	getName(void) const		{return	d_name;}
+
+
+	/*!
+	\brief
+		Return the native display size for this Font.  This is only relevant if the Font is being auto-scaled.
+
+	\return
+		Size object describing the native display size for this Font.
+	*/
+	Size	getNativeResolution(void) const	{return Size(d_nativeHorzRes, d_nativeVertRes);}
+
+
+	/*!
+	\brief
+		Return whether this Font is auto-scaled.
+
+	\return
+		true if the Font is auto-scaled, false if not.
+	*/
+	bool	isAutoScaled(void) const		{return d_autoScale;}
+
+
+	/*!
+	\brief
+		Return whether this Font can currently draw the specified code-point
+
+	\param cp
+		utf32 code point that is the subject of the query.
+
+	\return
+		true if the font contains a mapping for code point \a cp, false if it does not contain a mapping for \a cp.
+	*/
+	bool	isCodepointAvailable(utf32 cp) const		{return (d_cp_map.find(cp) != d_cp_map.end());}
+
+
+	/*!
+	\brief
+		Return the number of lines the given text would be formatted to.
+
+		Since text formatting can result in multiple lines of text being output, it can be useful to know
+		how many lines would be output without actually rendering the text.
+
+	\param text
+		String object containing the text to be measured.
+
+	\param format_area
+		Rect object describing the area to be used when formatting the text depending upon the option specified in \a fmt.
+
+	\param fmt
+		One of the TextFormatting values specifying the text formatting required.
+
+	\param x_scale
+		Scaling factor to be applied to each glyph's x axis, where 1.0f is considered to be 'normal'.
+
+	\return
+		The number of lines produced from the specified formatting
+	*/
+	size_t	getFormattedLineCount(const String& text, const Rect& format_area, TextFormatting fmt, float x_scale = 1.0f) const;
+
+
+	/*!
+	\brief
+		Return the horizontal pixel extent given text would be formatted to.
+
+		The value return by this method is basically the extent of the widest line within the formatted text.
+
+	\param text
+		String object containing the text to be measured.
+
+	\param format_area
+		Rect object describing the area to be used when formatting the text depending upon the option specified in \a fmt.
+
+	\param fmt
+		One of the TextFormatting values specifying the text formatting required.
+
+	\param x_scale
+		Scaling factor to be applied to each glyph's x axis, where 1.0f is considered to be 'normal'.
+
+	\return
+		The widest pixel extent of the lines produced from the specified formatting.
+	*/
+	float	getFormattedTextExtent(const String& text, const Rect& format_area, TextFormatting fmt, float x_scale = 1.0f) const;
+
+
+	/*!
+	\brief
+		Return whether this font is anti-aliased or not.  This is only relevant for dynamic fonts created from a TrueType font file.
+
+	\return
+		- true if the font is anti-aliased.
+		- false if the font is not anti-aliased.
+	*/
+	bool	isAntiAliased(void) const;
+
+
+	/*!
+	\brief
+		Return a String object that contains the code-points that the font is currently configured to render.
+
+	\return
+		Reference to a String object.
+	*/
+	const String& getAvailableGlyphs(void) const;
+
+
+	/*!
+	\brief
+		Return the point size of a dynamic (ttf based) font.
+
+	\return
+		uint value indicating the point size specified when the dynamic font was created.
+
+	\exception InvalidRequestException		thrown if the font is a static (bitmap based) font which do not support point sizes.
+	*/
+	uint	getPointSize(void) const;
+
+
+private:
+	/*************************************************************************
+		Implementation Constants
+	*************************************************************************/
+	static const char	FontSchemaName[];			//!< Filename of the XML schema used for validating Font files.
+	static const uint	InterGlyphPadSpace;			//!< Pad space between glyphs.
+
+
+	/*************************************************************************
+		Friends so that only FontManager can create and destroy font objects
+	*************************************************************************/
+	friend class FontManager;
+
+	/*************************************************************************
+		Private forward refs
+	*************************************************************************/
+	struct FontImplData;
+
+
+	/*************************************************************************
+		Construction & Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructs a new Font object
+
+	\param filename
+		The filename of the "font definition file" to be used in creating this font.
+
+    \param resourceGroup
+        Resource group identifier to be passed to the resource provider to load the font
+        definition file.
+
+	\exception	FileIOException				thrown if there was some problem accessing or parsing the file \a filename
+	\exception	InvalidRequestException		thrown if an invalid filename was provided.
+	\exception	AlreadyExistsException		thrown if a Font Imageset clashes with one already defined in the system.
+	\exception	GenericException			thrown if something goes wrong while accessing a true-type font referenced in file \a filename.
+	\exception	RendererException			thrown if the Renderer can't support a texture large enough to hold the requested glyph imagery.
+	\exception	MemoryException				thrown if allocation of imagery construction buffer fails.
+	*/
+	Font(const String& filename, const String& resourceGroup, FontImplData* dat);
+
+
+	/*!
+	\brief
+		Constructs a new Font object, with 7-bit ASCII glyphs
+
+	\param name
+		The unique name that will be used to identify this Font.
+
+	\param fontname
+		filename of the true-type font to be loaded.
+
+    \param resourceGroup
+        Resource group identifier to pass to the resource provider when loading the true-type
+        font file.
+
+	\param size
+		Point size of the new font.
+
+	\param flags
+		Combination of the FontFlag enumerated values specifying required options for creating this Font.
+
+	\exception	AlreadyExistsException		thrown if an auto-generated Imageset clashes with one already defined in the system.
+	\exception	GenericException			thrown if something goes wrong while accessing the true-type font \a fontname.
+	\exception	RendererException			thrown if the Renderer can't support a texture large enough to hold the requested glyph imagery.
+	\exception	MemoryException				thrown if allocation of imagery construction buffer fails.
+	*/
+	Font(const String& name, const String& fontname, const String& resourceGroup, uint size, uint flags, FontImplData* dat);
+
+
+	/*!
+	\brief
+		Constructs a new Font object, with the specified set of glyphs
+
+	\param name
+		The unique name that will be used to identify this Font.
+
+	\param fontname
+		filename of the true-type font to be loaded.
+
+    \param resourceGroup
+        Resource group identifier to pass to the resource provider when loading the true-type
+        font file.
+
+	\param size
+		Point size of the new font.
+
+	\param flags
+		Combination of the FontFlag enumerated values specifying required options for creating this Font.
+
+	\param glyph_set
+		String containing the set of glyphs to have available in this font.
+
+	\exception	AlreadyExistsException		thrown if an auto-generated Imageset clashes with one already defined in the system.
+	\exception	GenericException			thrown if something goes wrong while accessing the true-type font \a fontname.
+	\exception	RendererException			thrown if the Renderer can't support a texture large enough to hold the requested glyph imagery.
+	\exception	MemoryException				thrown if allocation of imagery construction buffer fails.
+	*/
+	Font(const String& name, const String& fontname, const String& resourceGroup, uint size, uint flags, const String& glyph_set, FontImplData* dat);
+
+
+	/*!
+	\brief
+		Constructs a new Font object, with a specified range of glyphs
+
+	\param name
+		The unique name that will be used to identify this Font.
+
+	\param fontname
+		filename of the true-type font to be loaded.
+
+    \param resourceGroup
+        Resource group identifier to pass to the resource provider when loading the true-type
+        font file.
+
+	\param size
+		Point size of the new font.
+
+	\param flags
+		Combination of the FontFlag enumerated values specifying required options for creating this Font.
+
+	\param first_code_point
+		Specifies the utf32 code point of the first glyph to be available on this font
+
+	\param last_code_point
+		Specifies the utf32 code point of the last glyph to be available on this font
+
+	\exception	AlreadyExistsException		thrown if an auto-generated Imageset clashes with one already defined in the system.
+	\exception	GenericException			thrown if something goes wrong while accessing the true-type font \a fontname.
+	\exception	RendererException			thrown if the Renderer can't support a texture large enough to hold the requested glyph imagery.
+	\exception	MemoryException				thrown if allocation of imagery construction buffer fails.
+	*/
+	Font(const String& name, const String& fontname, const String& resourceGroup, uint size, uint flags, utf32 first_code_point, utf32 last_code_point, FontImplData* dat);
+
+
+public:		// For luabind support
+	/*!
+	\brief
+		Destroys a Font object
+	*/
+	~Font(void);
+
+
+private:
+	/*************************************************************************
+		Implementation Methods
+	*************************************************************************/
+	/*!
+	\brief
+		Load and complete construction of 'this' via an XML file
+
+	\param filename
+		String object holding the name of the XML file that holds details about the font to create.
+
+    \param resourceGroup
+        Resource group identifier to be passed to the resource provider when loading the font
+        definition file.
+
+	\return
+		Nothing.
+	*/
+	void	load(const String& filename, const String& resourceGroup);
+
+
+	/*!
+	\brief
+		Unloads data associated with the font (font is then useless.  this is intended for cleanup).
+
+	\return
+		Nothing.
+	*/
+	void	unload(void);
+
+
+	/*!
+	\brief
+		Return the required texture size required to store imagery for the
+		glyphs specified in \a glyph_set
+
+	\param glyph_set
+		String object describing the set of code points who's glyph imagery is to be measured.
+
+	\return
+		Required pixel size for a square texture large enough to hold glyph imagery for the set of code points in \a glyph_set
+	*/
+	uint	getRequiredTextureSize(const String& glyph_set);
+
+
+	/*!
+	\brief
+		Return the required texture size required to store imagery for the
+		glyphs specified in by the inclusive range [first_code_point, last_code_point]
+
+	\param first_code_point
+		utf32 code point of the first character in the range to be measured
+
+	\param last_code_point
+		utf32 code point of the last character in the range to be measured
+
+	\return
+		Required pixel size for a square texture large enough to hold glyph imagery for the specified range of code points.
+	*/
+	uint	getRequiredTextureSize(utf32 first_code_point, utf32 last_code_point);
+
+
+	/*!
+	\brief
+		Paint the set of glyphs required for all code points in \a glyph_set into the buffer \a buffer,
+		which has a size of \a size pixels (not bytes) square.  This also defines an Image for each
+		glyph in the Imageset for this font, and creates an entry in the code point to Image map.
+
+	\param glyph_set
+		String object containing the set of code points whos glyphs are to be loaded into the buffer.
+
+	\param size
+		Width of \a buffer in pixels (not bytes).
+
+	\param buffer
+		Pointer to a memory buffer large enough to receive the glyph image data.
+
+	\return
+		Nothing.
+	*/
+	void	createFontGlyphSet(const String& glyph_set, uint size, argb_t* buffer);
+
+
+	/*!
+	\brief
+		Paint the set of glyphs required for all code points in the range [\a first_code_point, \a last_code_point]
+		into the buffer \a buffer, which has a size of \a size pixels (not bytes) square.  This also defines an
+		Image for each glyph in the Imageset for this font, and creates an entry in the code point to Image map.
+
+	\param first_code_point
+		utf32 code point that is the first code point in a range whos glyph are to be loaded into the buffer.
+
+	\param last_code_point
+		utf32 code point that is the last code point in a range whos glyph are to be loaded into the buffer.
+
+	\param size
+		Width of \a buffer in pixels (not bytes).
+
+	\param buffer
+		Pointer to a memory buffer large enough to receive the glyph image data.
+
+	\return
+		Nothing.
+	*/
+	void	createFontGlyphSet(utf32 first_code_point, utf32 last_code_point, uint size, argb_t* buffer);
+
+
+	/*!
+	\brief
+		Copy the current glyph data into \a buffer, which has a width of \a buf_width pixels (not bytes).
+
+	\param buffer
+		Memory buffer large enough to receive the imagery for the currently loaded glyph.
+
+	\param buf_width
+		Width of \a buffer in pixels (where each pixel is a argb_t).
+
+	\return
+		Nothing.
+	*/
+	void	drawGlyphToBuffer(argb_t* buffer, uint buf_width);
+
+
+	/*!
+	\brief
+		draws wrapped text.  returns number of lines output.
+	*/
+	size_t	drawWrappedText(const String& text, const Rect& draw_area, float z, const Rect& clip_rect, TextFormatting fmt, const ColourRect& colours, float x_scale = 1.0f, float y_scale = 1.0f) const;
+
+
+	/*!
+	\brief
+		helper function for renderWrappedText to get next word of a string
+	*/
+	size_t	getNextWord(const String& in_string, size_t start_idx, String& out_string) const;
+
+
+	/*!
+	\brief
+		Draw a line of text.  No formatting is applied.
+	*/
+	void	drawTextLine(const String& text, const Vector3& position, const Rect& clip_rect, const ColourRect& colours, float x_scale = 1.0f, float y_scale = 1.0f) const;
+
+
+	/*!
+	\brief
+		Draw a justified line of text.
+	*/
+	void	drawTextLineJustified(const String& text, const Rect& draw_area, const Vector3& position, const Rect& clip_rect, const ColourRect& colours, float x_scale = 1.0f, float y_scale = 1.0f) const;
+
+
+	/*!
+	\brief
+		Set the size of the free-type font (via d_face which should already be setup) and render the glyphs in d_glyphset.
+	*/
+	void	createFontFromFT_Face(uint size, uint horzDpi, uint vertDpi);
+
+
+	/*!
+	\brief
+		Update the font as required according to the current scaling
+	*/
+	void	updateFontScaling(void);
+
+
+	/*!
+	\brief
+		Calculate the vertical spacing fields for a static / bitmap font
+	*/
+	void	calculateStaticVertSpacing(void);
+
+	/*!
+	\brief
+		Function to do real work of constructor.  Used to save duplication in the various constructor overloads.
+	*/
+	void	constructor_impl(const String& name, const String& fontname, const String& resourceGroup, uint size, uint flags, const String& glyph_set);
+
+
+	/*!
+	\brief
+		Defines the set of code points on the font. (implementation).
+
+	\note
+		This function can take some time to execute depending upon the size of the code point set, and the size of the
+		font being operated upon.
+
+	\return
+		Nothing
+
+	\exception	InvalidRequestException		thrown if the font is based on a bitmap rather than a true-type font.
+	\exception	RendererException			thrown if the Renderer can't support a texture large enough to hold the glyph imagery.
+	\exception	MemoryException				thrown if allocation of imagery construction buffer fails.
+	*/
+	void	defineFontGlyphs_impl(void);
+
+
+	/*!
+	\brief
+		returns extent of widest line of wrapped text.
+	*/
+	float	getWrappedTextExtent(const String& text, float wrapWidth, float x_scale = 1.0f) const;
+
+
+	/*************************************************************************
+		Implementation structs
+	*************************************************************************/
+	/*!
+	\brief
+		struct to hold extra details about a glyph (required for proper rendering)
+	*/
+	struct glyphDat
+	{
+		const Image*	d_image;				//!< The image which will be rendered.
+		uint			d_horz_advance;			//!< Amount to advance the pen after rendering this glyph
+		uint			d_horz_advance_unscaled;	//!< original unscaled advance value (only used with static / bitmap fonts).
+	};
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	typedef		std::map<utf32, glyphDat>		CodepointMap;
+	CodepointMap	d_cp_map;	//!< Contains mappings from code points to Image objects
+
+	String		d_name;			//!< Name of this font.
+	Imageset*	d_glyph_images;	//!< Imageset that holds the glyphs for this font.
+
+	bool	d_freetype;			//!< true when the font is a FreeType based font
+	float	d_lineHeight;		//!< Exact pixel height of font.
+	float	d_lineSpacing;		//!< Spacing between multiple lines.
+	float	d_max_bearingY;		//!< Maximum bearingY value (gives required spacing down to baseline).
+	uint	d_maxGlyphHeight;	//!< Height of the largest glyph (calculated in getRequiredTextureSize)
+
+	FontImplData*	d_impldat;	//!< Implementation data
+	uint		d_ptSize;		//!< Point size of font.
+	String		d_glyphset;		//!< set of glyphs for the dynamic font.
+
+	// auto-scaling fields
+	bool	d_autoScale;			//!< true when auto-scaling is enabled.
+	float	d_horzScaling;			//!< current horizontal scaling factor.
+	float	d_vertScaling;			//!< current vertical scaling factor.
+	float	d_nativeHorzRes;		//!< native horizontal resolution for this Imageset.
+	float	d_nativeVertRes;		//!< native vertical resolution for this Imageset.
+
+	bool	d_antiAliased;			//!< True if the font should be rendered as anti-alaised by freeType.
+};
+
+} // End of  CEGUI namespace section
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+
+#endif	// end of guard _CEGUIFont_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIXMLAttributes.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIXMLAttributes.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIXMLAttributes.h	(revision 1092)
@@ -0,0 +1,235 @@
+/************************************************************************
+    filename:   CEGUIXMLAttributes.h
+    created:    Sat Mar 12 2005
+    author:     Paul D Turner
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+ 
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+ 
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+ 
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIXMLAttributes_h_
+#define _CEGUIXMLAttributes_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIString.h"
+#include <map>
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+    /*!
+    \brief
+        Class representing a block of attributes associated with an XML element.
+     */
+    class CEGUIEXPORT XMLAttributes
+    {
+    public:
+        /*!
+        \brief
+            XMLAttributes constructor.
+         */
+        XMLAttributes(void);
+
+        /*!
+        \brief
+            XMLAttributes Destructor
+         */
+        virtual ~XMLAttributes(void);
+
+        /*!
+        \brief
+            Adds an attribute to the attribute block.  If the attribute value already exists, it is replaced with
+            the new value.
+
+        \param attrName
+            String object holding the name of the attribute to be added.
+
+        \param attrValue
+            String object holding a string representation of the attribute value.
+
+        \return
+            Nothing.
+         */
+        void add(const String& attrName, const String& attrValue);
+        
+        /*!
+        \brief
+            Removes an attribute from the attribute block.
+
+        \param attrName
+            String object holding the name of the attribute to be removed.
+
+        \return
+            Nothing.
+         */
+        void remove(const String& attrName);
+
+        /*!
+        \brief
+            Return whether the named attribute exists within the attribute block.
+
+        \param attrName
+            String object holding the name of the attribute to be checked.
+
+        \return
+            - true if an attribute with the name \a attrName is present in the attribute block.
+            - false if no attribute named \a attrName is present in the attribute block.
+        */
+        bool exists(const String& attrName) const;
+
+        /*!
+        \brief
+            Return the number of attributes in the attribute block.
+
+        \return
+            value specifying the number of attributes in this attribute block.
+         */
+        size_t getCount(void) const;
+
+        /*!
+        \brief
+            Return the name of an attribute based upon its index within the attribute block.
+
+        \note
+            Nothing is specified about the order of elements within the attribute block.  Elements
+            may not, for example, appear in the order they were specified in the XML file.
+
+        \param index
+            zero based index of the attribute whos name is to be returned.
+
+        \return
+            String object holding the name of the attribute at the requested index.
+
+        \exception IllegalRequestException  thrown if \a index is out of range for this attribute block.
+        */
+        const String& getName(size_t index) const;
+        
+        /*!
+        \brief
+            Return the value string of an attribute based upon its index within the attribute block.
+
+        \note
+            Nothing is specified about the order of elements within the attribute block.  Elements
+            may not, for example, appear in the order they were specified in the XML file.
+        
+        \param index
+            zero based index of the attribute whos value string is to be returned.
+
+        \return
+            String object holding the string value of the attribute at the requested index.
+
+        \exception IllegalRequestException  thrown if \a index is out of range for this attribute block.
+        */
+        const String& getValue(size_t index) const;
+
+        /*!
+        \brief
+            Return the value string for attribute \a attrName.
+
+        \param attrName
+            String object holding the name of the attribute whos value string is to be returned
+
+        \return
+            String object hilding the value string for attribute \a attrName.
+
+        \exception UnknownObjectException   thrown if no attribute named \a attrName is present in the attribute block.
+         */
+        const String& getValue(const String& attrName) const;
+
+        /*!
+        \brief
+            Return the value of attribute \a attrName as a string.
+
+        \param attrName
+            String object holding the name of the attribute whos value is to be returned.
+
+        \param def
+            String object holding the default value to be returned if \a attrName does not exist in the attribute block.
+            For some parsers, defaults can be gotten from schemas and such like, though for others this may not be desired
+            or possible, so this parameter is used to ensure a default is available in the abscence of other mechanisms.
+
+        \return
+            String object containing the value of attribute \a attrName if present, or \a def if not.
+         */
+        const String& getValueAsString(const String& attrName, const String& def = "") const;
+
+        /*!
+        \brief
+            Return the value of attribute \a attrName as a boolean value.
+
+        \param attrName
+            String object holding the name of the attribute whos value is to be returned.
+
+        \param def
+            bool value specifying the default value to be returned if \a attrName does not exist in the attribute block.
+            For some parsers, defaults can be gotten from schemas and such like, though for others this may not be desired
+            or possible, so this parameter is used to ensure a default is available in the abscence of other mechanisms.
+
+        \return
+            bool value equal to the value of attribute \a attrName if present, or \a def if not.
+
+        \exception IllegalRequestException  thrown if the attribute value string coul dnot be converted to the requested type.
+        */
+        bool getValueAsBool(const String& attrName, bool def = false) const;
+        
+        /*!
+        \brief
+            Return the value of attribute \a attrName as a integer value.
+
+        \param attrName
+            String object holding the name of the attribute whos value is to be returned.
+
+        \param def
+            integer value specifying the default value to be returned if \a attrName does not exist in the attribute block.
+            For some parsers, defaults can be gotten from schemas and such like, though for others this may not be desired
+            or possible, so this parameter is used to ensure a default is available in the abscence of other mechanisms.
+
+        \return
+            integer value equal to the value of attribute \a attrName if present, or \a def if not.
+        
+        \exception IllegalRequestException  thrown if the attribute value string coul dnot be converted to the requested type.
+        */
+        int getValueAsInteger(const String& attrName, int def = 0) const;
+        
+        /*!
+        \brief
+            Return the value of attribute \a attrName as a floating point value.
+
+        \param attrName
+            String object holding the name of the attribute whos value is to be returned.
+
+        \param def
+            float value specifying the default value to be returned if \a attrName does not exist in the attribute block.
+            For some parsers, defaults can be gotten from schemas and such like, though for others this may not be desired
+            or possible, so this parameter is used to ensure a default is available in the abscence of other mechanisms.
+
+        \return
+            float value equal to the value of attribute \a attrName if present, or \a def if not.
+
+        \exception IllegalRequestException  thrown if the attribute value string coul dnot be converted to the requested type.
+        */
+        float getValueAsFloat(const String& attrName, float def = 0.0f) const;
+
+    protected:
+        typedef std::map<String, String> AttributeMap;
+        AttributeMap    d_attrs;
+    };
+
+} // End of  CEGUI namespace section
+
+
+#endif  // end of guard _CEGUIXMLAttributes_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIScriptModule.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIScriptModule.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIScriptModule.h	(revision 1092)
@@ -0,0 +1,169 @@
+/************************************************************************
+	filename: 	CEGUIScriptModule.h
+	created:	16/7/2004
+	author:		Paul D Turner
+
+	purpose:	Abstract class interface for scripting support
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIScriptModule_h_
+#define _CEGUIScriptModule_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIString.h"
+#include "CEGUIEvent.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Abstract interface required for all scripting support modules to be used with
+	the CEGUI system.
+*/
+class CEGUIEXPORT ScriptModule
+{
+public:
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for ScriptModule base class
+	*/
+	ScriptModule(void) {}
+
+
+	/*!
+	\brief
+		Destructor for ScriptModule base class.
+	*/
+	virtual ~ScriptModule(void) {}
+
+
+	/*************************************************************************
+		Abstract interface
+	*************************************************************************/
+	/*!
+	\brief
+		Execute a script file.
+
+	\param filename
+		String object holding the filename of the script file that is to be executed
+		
+	\param resourceGroup
+		Resource group idendifier to be passed to the ResourceProvider when loading the script file.
+	*/
+	virtual	void	executeScriptFile(const String& filename, const String& resourceGroup = "")	= 0;
+
+
+	/*!
+	\brief
+		Execute a scripted global function.  The function should not take any parameters and should return an integer.
+
+	\param function_name
+		String object holding the name of the function, in the global script environment, that
+		is to be executed.
+
+	\return
+		The integer value returned from the script function.
+	*/
+	virtual int	executeScriptGlobal(const String& function_name)	= 0;
+
+
+	/*!
+	\brief
+		Execute a scripted global 'event handler' function.  The function should take some kind of EventArgs like parameter
+		that the concrete implementation of this function can create from the passed EventArgs based object.  The function
+		should not return anything.
+
+	\param handler_name
+		String object holding the name of the scripted handler function.
+
+	\param e
+		EventArgs based object that should be passed, by any appropriate means, to the scripted function.
+
+	\return
+		- true if the event was handled.
+		- false if the event was not handled.
+	*/
+	virtual	bool	executeScriptedEventHandler(const String& handler_name, const EventArgs& e)		= 0;
+
+
+    /*!
+    \brief
+        Execute script code contained in the given CEGUI::String object.
+
+    \param str
+        String object holding the valid script code that should be executed.
+
+    \return
+        Nothing.
+    */
+    virtual void executeString(const String& str) = 0;
+
+
+    /*!
+    \brief
+        Method called during system initialisation, prior to running any scripts via the ScriptModule, to enable the ScriptModule
+        to perform any operations required to complete initialisation or binding of the script language to the gui system objects.
+
+    \return
+        Nothing.
+    */
+    virtual void createBindings(void) {}
+
+
+    /*!
+    \brief
+        Method called during system destruction, after all scripts have been run via the ScriptModule, to enable the ScriptModule
+        to perform any operations required to cleanup bindings of the script language to the gui system objects, as set-up in the
+        earlier createBindings call.
+
+    \return
+        Nothing.
+    */
+    virtual void destroyBindings(void) {}
+};
+
+
+/*!
+\brief
+	Functor class used for binding named script functions to events
+*/
+class ScriptFunctor
+{
+public:
+	ScriptFunctor(const String functionName) : scriptFunctionName(functionName) {}
+    ScriptFunctor(const ScriptFunctor& obj) : scriptFunctionName(obj.scriptFunctionName) {}
+	bool	operator()(const EventArgs& e) const;
+
+private:
+    // no assignment possible
+    ScriptFunctor& operator=(const ScriptFunctor& rhs);
+
+	const String	scriptFunctionName;
+};
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIScriptModule_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIBase.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIBase.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIBase.h	(revision 1092)
@@ -0,0 +1,150 @@
+/************************************************************************
+	filename: 	CEGUIBase.h
+	created:	20/2/2004
+	author:		Paul D Turner
+	
+	purpose:	Base include used within the system
+				This contains various lower level bits required
+				by other parts of the system.  All other library 
+				headers will include this file.
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIBase_h_
+#define _CEGUIBase_h_
+
+#include <cassert>
+
+// bring in configuration options
+#include "CEGUIConfig.h"
+
+
+/*************************************************************************
+	Dynamic Library import / export control conditional
+	(Define CEGUIBASE_EXPORTS to export symbols, else they are imported)
+*************************************************************************/
+#if defined( __WIN32__ ) || defined( _WIN32 )
+#   ifdef CEGUIBASE_EXPORTS
+#       define CEGUIEXPORT __declspec(dllexport)
+#   else
+#       define CEGUIEXPORT __declspec(dllimport)
+#   endif
+#       define CEGUIPRIVATE
+#else
+#       define CEGUIEXPORT
+#       define CEGUIPRIVATE
+#endif
+
+
+// totally kill this warning (debug info truncated to 255 chars etc...) on <= VC6
+#if defined(_MSC_VER) && (_MSC_VER <= 1200)
+#   pragma warning(disable : 4786)
+#endif
+
+// No thanks Bill.
+#if defined( __WIN32__ ) || defined( _WIN32 )
+#   define NOMINMAX
+#endif
+
+
+// include this to see if it defines _STLPORT_VERION
+#	include <string>
+
+// fix to undefine _STLP_DEBUG if STLport is not actually being used
+// (resolves some unresolved externals concerning boost)
+#if defined(_STLP_DEBUG) && defined(_MSC_VER) && (_MSC_VER >= 1200)
+#	if !defined(_STLPORT_VERSION)
+#		undef _STLP_DEBUG
+#	endif
+#endif
+
+
+// The following defines macros used within CEGUI for std::min/std::max
+// usage, and is done as a compatibility measure for VC6 with native STL.
+#if defined(_MSC_VER) && (_MSC_VER <= 1200) && !defined(_STLPORT_VERSION)
+#    define ceguimin	std::_cpp_min
+#    define ceguimax	std::_cpp_max
+#else
+#    define ceguimin	std::min
+#    define ceguimax	std::max
+#endif
+
+
+/*************************************************************************
+	Documentation for the CEGUI namespace itself
+*************************************************************************/
+/*!
+\brief
+	Main namespace for Crazy Eddie's GUI Library
+
+	The CEGUI namespace contains all the classes and other items that comprise the core
+	of Crazy Eddie's GUI system.
+*/
+namespace CEGUI
+{
+
+/*************************************************************************
+	Simplification of some 'unsigned' types
+*************************************************************************/
+typedef	unsigned long	ulong;
+typedef unsigned short	ushort;
+typedef unsigned int	uint;
+typedef unsigned char	uchar;
+
+typedef unsigned int    uint32;
+typedef unsigned short  uint16;
+typedef unsigned char   uint8;
+
+
+/*************************************************************************
+	System wide constants
+*************************************************************************/
+static const float		DefaultNativeHorzRes	= 640.0f;		//!< Default native horizontal resolution (for fonts and imagesets)
+static const float		DefaultNativeVertRes	= 480.0f;		//!< Default native vertical resolution (for fonts and imagesets)
+
+}  // end of CEGUI namespace section
+
+
+/*!
+\brief
+	Macro used to return a float value rounded to the nearest integer.
+
+	This macro is used throughout the library to ensure that elements are
+	kept at integer pixel positions on the display.
+
+\param x
+	Expression to be rounded to nearest whole number
+
+\return
+	\a x after having been rounded
+*/
+#if defined(CEGUI_ALIGN_ELEMENTS_TO_PIXELS)
+#	define PixelAligned(x)	( (float)(int)(( x ) + 0.5f) )
+#else
+#	define PixelAligned(x)	( x )
+#endif
+
+
+/*************************************************************************
+	Bring in forward references to all GUI base system classes
+*************************************************************************/
+#include "CEGUIForwardRefs.h"
+
+
+#endif	// end of guard _CEGUIBase_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIDataContainer.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIDataContainer.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIDataContainer.h	(revision 1092)
@@ -0,0 +1,154 @@
+/************************************************************************
+	filename: 	CEGUIDataContainer.h
+	created:	10/8/2004
+	author:		James '_mental_' O'Sullivan
+	
+	purpose:	Defines abstract base class for Window objects
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIDataContainer_h_
+#define _CEGUIDataContainer_h_
+
+#include "CEGUIBase.h"
+
+#include <malloc.h>
+//#include <xercesc/sax/InputSource.hpp>
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+template <class T>
+class CEGUIEXPORT DataContainer
+{
+public:
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for DataContainer class
+	*/
+    DataContainer()
+      : mData(0),
+        mSize(0)
+    {
+    }
+
+	/*!
+	\brief
+		Destructor for DataContainer class
+	*/
+	virtual ~DataContainer(void) 
+    { 
+        release();
+    }
+
+	/*************************************************************************
+		Accessor functions
+	*************************************************************************/
+	/*!
+	\brief
+		Set a pointer to the external data.
+
+	\param data
+        Pointer to a object of type T, where T defined when the template is specialized.
+	*/
+    void setData(T* data) { mData = data; }
+
+	/*!
+	\brief
+		Return a pointer to the external data
+
+	\return
+		Pointer to an object of type T, where T defined when the template is specialized.
+	*/
+    T* getDataPtr(void) { return mData; }
+
+	/*!
+	\brief
+	    Set the size of the external data.  This maybe zero depending on the type of T.
+
+	\param size
+	    size_t containing the size of the external data
+	*/
+    void setSize(size_t size) { mSize = size; }
+
+	/*!
+	\brief
+		Get the size of the external data.  This maybe zero depending on the type of T.
+
+	\return
+	    size_t containing the size of the external data
+	*/
+    size_t getSize(void) const { return mSize; }
+
+	/*!
+	\brief
+		Release supplied data.
+
+	*/
+    virtual void release(void)
+    {
+        if(mData)
+        {
+            delete mData;
+            mData = 0;
+        }
+    }
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+protected:
+    T* mData;
+    size_t mSize;
+};
+
+// Specialized templates
+class RawDataContainer : public DataContainer<unsigned char> 
+{
+public:
+    RawDataContainer() : DataContainer<unsigned char>()
+    {
+    }
+
+    ~RawDataContainer() 
+    {
+        release();
+    }
+
+    void release(void)
+    {
+        if(mData)
+        {
+            delete [] mData;
+            mData = 0;
+        }
+    }
+};
+
+//typedef DataContainer<unsigned char> RawDataContainer;
+//typedef DataContainer<XERCES_CPP_NAMESPACE::InputSource> InputSourceContainer;
+
+} // End of  CEGUI namespace section
+
+#endif	// end of guard _CEGUIDataContainer_h_
+
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIImageset_xmlHandler.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIImageset_xmlHandler.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIImageset_xmlHandler.h	(revision 1092)
@@ -0,0 +1,107 @@
+/************************************************************************
+filename: 	CEGUIImageset_xmlHandler.h
+created:	21/2/2004
+author:		Paul D Turner
+
+purpose:	Defines the interface for the Imageset class
+*************************************************************************/
+/*************************************************************************
+Crazy Eddie's GUI System (http://www.cegui.org.uk)
+Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIImageset_xmlHandler_h_
+#define _CEGUIImageset_xmlHandler_h_
+
+#include "CEGUIImageset.h"
+#include "CEGUIXMLHandler.h"
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+/*************************************************************************
+Implementation Classes
+*************************************************************************/
+/*!
+\brief
+Handler class used to parse the Imageset XML files using SAX2
+*/
+class Imageset_xmlHandler : public XMLHandler
+{
+public:
+	/*************************************************************************
+	Construction & Destruction
+	*************************************************************************/
+	/*!
+	\brief
+	Constructor for Imageset::xmlHandler objects
+
+	\param imageset
+	Pointer to the Imageset object creating this xmlHandler object
+	*/
+	Imageset_xmlHandler(Imageset* imageset) : d_imageset(imageset) {}
+
+	/*!
+	\brief
+	Destructor for Imageset::xmlHandler objects
+	*/
+	virtual ~Imageset_xmlHandler(void) {}
+
+	/*************************************************************************
+	SAX2 Handler overrides
+	*************************************************************************/ 
+	/*!
+	\brief
+	document processing (only care about elements, schema validates format)
+	*/
+    virtual void elementStart(const String& element, const XMLAttributes& attributes);
+    virtual void elementEnd(const String& element);
+
+	/*************************************************************************
+	Functions used by our implementation
+	*************************************************************************/
+	Imageset*	getImageset(void) const				{return d_imageset;}
+
+private:
+	/*************************************************************************
+	Implementation Constants
+	*************************************************************************/
+	static const String ImagesetElement;				//!< Tag name for Imageset elements.
+	static const String ImageElement;					//!< Tag name for Image elements.
+	static const char	ImagesetNameAttribute[];		//!< Attribute name that stores the name of the Imageset
+	static const char	ImagesetImageFileAttribute[];	//!< Attribute name that stores the filename for the image file.
+    static const char	ImagesetResourceGroupAttribute[];   //!< Attribute name that stores the resource group identifier used when loading image file.
+	static const char	ImagesetNativeHorzResAttribute[];	//!< Optional attribute that stores 'native' horizontal resolution for the Imageset.
+	static const char	ImagesetNativeVertResAttribute[];	//!< Optional attribute that stores 'native' vertical resolution for the Imageset.
+	static const char	ImagesetAutoScaledAttribute[];	//!< Optional attribute that specifies whether the Imageset should be auto-scaled.
+	static const char	ImageNameAttribute[];			//!< Attribute name that stores the name of the new Image.
+	static const char	ImageXPosAttribute[];			//!< Attribute name that stores the x position of the new Image.
+	static const char	ImageYPosAttribute[];			//!< Attribute name that stores the y position of the new Image.
+	static const char	ImageWidthAttribute[];			//!< Attribute name that stores the width of the new Image.
+	static const char	ImageHeightAttribute[];			//!< Attribute name that stores the height of the new Image.
+	static const char	ImageXOffsetAttribute[];		//!< Attribute name that stores the x rendering offset of the new Image.
+	static const char	ImageYOffsetAttribute[];		//!< Attribute name that stores the y rendering offset of the new Image.
+
+	/*************************************************************************
+	Implementation Data
+	*************************************************************************/
+	Imageset*	d_imageset;			//!< Holds a pointer to the Imageset that created the handler object
+};
+
+} // End of  CEGUI namespace section
+
+#endif	// end of guard _CEGUIImageset_xmlHandler_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIFactoryModule.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIFactoryModule.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIFactoryModule.h	(revision 1092)
@@ -0,0 +1,123 @@
+/************************************************************************
+	filename: 	CEGUIFactoryModule.h
+	created:	12/4/2004
+	author:		Paul D Turner
+	
+	purpose:	Defines interface for object that controls a loadable
+				module (.dll/.so/ whatever) that contains concrete
+				window / widget implementations and their factories.
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIFactoryModule_h_
+#define _CEGUIFactoryModule_h_
+
+/*************************************************************************
+	The following is basically taken from DynLib.h, which is part of
+	the Ogre project (http://www.ogre3d.org/)
+*************************************************************************/
+#if defined(__WIN32__) || defined(_WIN32)
+#    define DYNLIB_HANDLE hInstance
+#    define DYNLIB_LOAD( a ) LoadLibrary( a )
+#    define DYNLIB_GETSYM( a, b ) GetProcAddress( a, b )
+#    define DYNLIB_UNLOAD( a ) !FreeLibrary( a )
+#    define DYNLIB_ERROR( )  "Unknown Error"
+
+	struct HINSTANCE__;
+	typedef struct HINSTANCE__* hInstance;
+
+#elif defined(__linux__)
+#    define DYNLIB_HANDLE void*
+#    define DYNLIB_LOAD( a ) dlopen( a, RTLD_LAZY )
+#    define DYNLIB_GETSYM( a, b ) dlsym( a, b )
+#    define DYNLIB_UNLOAD( a ) dlclose( a )
+#    define DYNLIB_ERROR( ) dlerror( )
+
+#elif defined(__APPLE_CC__)
+#    define DYNLIB_HANDLE CFBundleRef
+#    define DYNLIB_LOAD( a ) mac_loadExeBundle( a )
+#    define DYNLIB_GETSYM( a, b ) mac_getBundleSym( a, b )
+#    define DYNLIB_UNLOAD( a ) mac_unloadExeBundle( a )
+#    define DYNLIB_ERROR( ) mac_errorBundle()
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+/*!
+\brief
+	Class that encapsulates access to a dynamic loadable module containing implementations of Windows, Widgets, and their factories.
+*/
+class FactoryModule
+{
+public:
+	/*!
+	\brief
+		Construct the FactoryModule object by loading the dynamic loadable module specified.
+
+	\param filename
+		String object holding the filename of a loadable module.
+
+	\return
+		Nothing
+	*/
+	FactoryModule(const String& filename);
+
+
+	/*!
+	\brief
+		Destroys the FactoryModule object and unloads any loadable module.
+
+	\return
+		Nothing
+	*/
+	virtual ~FactoryModule(void);
+
+
+	/*!
+	\brief
+		Register a WindowFactory for \a type Windows.
+
+	\param type
+		String object holding the name of the Window type a factory is to be registered for.
+
+	\return
+		Nothing.
+	*/
+	void	registerFactory(const String& type) const;
+
+private:
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	static const char	RegisterFactoryFunctionName[];
+
+	typedef void (*FactoryRegisterFunction)(const String&); 
+
+	FactoryRegisterFunction	d_regFunc;	//!< Pointer to the function called to register factories.
+	String			d_moduleName;		//!< Holds the name of the loaded module.
+	DYNLIB_HANDLE	d_handle;			//!< Pointer to a ImplDat derived class that can hold any required implementation data
+};
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIFactoryModule_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIRenderableFrame.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIRenderableFrame.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIRenderableFrame.h	(revision 1092)
@@ -0,0 +1,188 @@
+/************************************************************************
+	filename: 	CEGUIRenderableFrame.h
+	created:	14/4/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to RenderableFrame UI construct
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIRenderableFrame_h_
+#define _CEGUIRenderableFrame_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIRenderableElement.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Enumeration of positions for a frame.
+*/
+enum FrameLocation
+{
+	Invalid,			// Value reserved to indicate some invalid or unknown location.
+	TopLeftCorner,		// Top-Left corner of a frame / rectangle.
+	TopRightCorner,		// Top-Right corner of a frame / rectangle.
+	BottomLeftCorner,	// Bottom-Left corner of a frame / rectangle.
+	BottomRightCorner,	// Bottom-Right corner of a frame / rectangle.
+	LeftEdge,			// Left edge of a frame / rectangle.	
+	TopEdge,			// Top edge of a frame / rectangle.
+	RightEdge,			// Right edge of a frame / rectangle.
+	BottomEdge			// Bottom edge of a frame / rectangle.
+};
+
+
+/*!
+\brief
+	A higher order GUI entity that represents a renderable frame.
+
+	This class is intended to be used where a (usually top-level) GUI element needs to draw a frame that is constructed from
+	a collection of Images.  It is possible to specify the image to use for each of the four corners, which are placed appropriately
+	at their natural size, and the images for the four edges, which are stretched to cover the area between any corner images.  Any
+	of the Images may be omitted, in which case that part of the frame is not drawn.  If the GUI element uses only one image for its
+	frame (usually stretched over the entire area of the element) then a better choice would be to use a RenderableImage, or perform the
+	rendering directly instead.
+*/
+class CEGUIEXPORT RenderableFrame : public RenderableElement
+{
+public:
+	/*************************************************************************
+		Construction / Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Default constructor for RenderableFrame
+	*/
+	RenderableFrame(void);
+
+
+	/*!
+	\brief
+		Destructor for RenderableFrame
+	*/
+	virtual ~RenderableFrame(void);
+
+
+	/*!
+	\brief
+		specify the Image objects to use for each part of the frame.  A NULL may be used to omit any part.
+
+	\param topleft
+		Pointer to an Image object to render as the top-left corner of the frame.  Specify NULL to omit this part of the frame.
+
+	\param topright
+		Pointer to an Image object to render as the top-right corner of the frame.  Specify NULL to omit this part of the frame.
+
+	\param bottomleft
+		Pointer to an Image object to render as the bottom-left corner of the frame.  Specify NULL to omit this part of the frame.
+
+	\param bottomright
+		Pointer to an Image object to render as the bottom-right corner of the frame.  Specify NULL to omit this part of the frame.
+
+	\param left
+		Pointer to an Image object to render as the left edge of the frame.  Specify NULL to omit this part of the frame.
+
+	\param top
+		Pointer to an Image object to render as the top edge of the frame.  Specify NULL to omit this part of the frame.
+
+	\param right
+		Pointer to an Image object to render as the right edge of the frame.  Specify NULL to omit this part of the frame.
+
+	\param bottom
+		Pointer to an Image object to render as the bottom edge of the frame.  Specify NULL to omit this part of the frame.
+
+	\return
+		Nothing
+	*/
+	void	setImages(const Image* topleft, const Image* topright, const Image* bottomleft, const Image* bottomright, const Image* left, const Image* top, const Image* right, const Image* bottom);
+
+
+	/*!
+	\brief
+		Set the Image to use for the specified location of the frame.
+
+	\param location
+		One of the FrameLocation enumerated values specifying the image to be returned.
+
+	\param image
+		Pointer to the Image to use for the frame location specified in \a location.  May be NULL to indicate the
+		frame component is not required.
+
+	\return
+		Nothing.
+	*/
+	void	setImageForLocation(FrameLocation location, const Image* image);
+
+
+
+	/*!
+	\brief
+		Return the Image being used for the specified location of the frame.
+
+	\param location
+		One of the FrameLocation enumerated values specifying the image to be returned.
+
+	\return
+		Pointer to the Image object currently set for the frame location specified in \a location.  May return NULL if no
+		Image is set for the requested position.
+	*/
+	const Image*	getImageForLocation(FrameLocation location) const;
+
+
+protected:
+	/*************************************************************************
+		Implementation functions
+	*************************************************************************/
+	/*!
+	\brief
+		Renders the imagery for a RenderableFrame element.
+
+	\param position
+		Vector3 object describing the final rendering position for the object.
+
+	\param clip_rect
+		Rect object describing the clipping area for the rendering.  No rendering will be performed outside this area.
+
+	\return
+		Nothing.
+	*/
+	void draw_impl(const Vector3& position, const Rect& clip_rect) const;
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	// image pointers
+	const Image*	d_topleft;			//!< Image to draw for the top-left corner.
+	const Image*	d_topright;			//!< Image to draw for the top-right corner.
+	const Image*	d_bottomleft;		//!< Image to draw for the bottom-left corner.
+	const Image*	d_bottomright;		//!< Image to draw for the bottom-right corner.
+	const Image*	d_left;				//!< Image to draw for the left edge.
+	const Image*	d_right;			//!< Image to draw for the right edge.
+	const Image*	d_top;				//!< Image to draw for the top edge.
+	const Image*	d_bottom;			//!< Image to draw for the bottom edge.
+};
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIRenderableFrame_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUILogger.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUILogger.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUILogger.h	(revision 1092)
@@ -0,0 +1,180 @@
+/************************************************************************
+	filename: 	CEGUILogger.h
+	created:	21/2/2004
+	author:		Paul D Turner
+	
+	purpose:	Defines interface for the Logger class
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUILogger_h_
+#define _CEGUILogger_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIString.h"
+#include <fstream>
+#include <sstream>
+#include <vector>
+#include <utility>
+#include "CEGUISingleton.h"
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4275)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+/*!
+\brief
+	Enumeration of logging levels
+*/
+enum LoggingLevel
+{
+	Errors,			//!< Only actual error conditions will be logged.
+	Standard,		//!< Basic events will be logged (default level).
+	Informative,	//!< Useful tracing (object creations etc) information will be logged.
+	Insane			//!< Mostly everything gets logged (use for heavy tracing only, log WILL be big).
+};
+
+/*!
+\brief
+	Class that implements logging for the GUI system
+*/
+class CEGUIEXPORT Logger : public Singleton <Logger>
+{
+public:
+	/*!
+	\brief
+		Constructor for Logger object.
+	*/
+	Logger(void);
+
+	/*!
+	\brief Destructor for Logger object.
+	*/
+	~Logger(void);
+
+	
+	/*!
+	\brief
+		Return the singleton Logger object
+
+	\return
+		Reference to the one and only Logger object
+	*/
+	static Logger&	getSingleton(void);
+
+
+	/*!
+	\brief
+		Set the level of logging information that will get out to the log file
+
+	\param level
+		One of the LoggingLevel enumerated values that specified the level of logging information required.
+
+	\return
+		Nothing
+	*/
+	void	setLoggingLevel(LoggingLevel level)		{d_level = level;}
+
+
+	/*!
+	\brief
+		return the current logging level setting
+
+	\return
+		One of the LoggingLevel enumerated values specifying the current level of logging
+	*/
+	LoggingLevel	getLoggingLevel(void) const		{return d_level;}
+
+
+	/*!
+	\brief
+		Add an event to the log.
+
+	\param message
+		String object containing the message to be added to the event log.
+
+	\param level
+		LoggingLevel for this message.  If \a level is greater than the current set logging level, the message is not logged.
+
+	\return
+		Nothing
+	*/
+	void	logEvent(const String& message, LoggingLevel level = Standard);
+
+    /*!
+    \brief
+        Set the name of the log file where all subsequent log entries should be written.
+
+    \note
+        When this is called, and the log file is created, any cached log entries are
+        flushed to the log file.
+
+    \param filename
+        Name of the file to put log messages.
+
+    \param append
+        - true if events should be added to the end of the current file.
+        - false if the current contents of the file should be discarded.
+     */
+    void    setLogFilename(const String& filename, bool append = false);
+
+protected:
+    /*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	LoggingLevel	d_level;		//!< Holds current logging level
+	std::ofstream	d_ostream;		//!< Stream used to implement the logger
+    std::vector<std::pair<String, LoggingLevel> > d_cache;    //!< Used to cache log entries before log file is created.
+    std::ostringstream d_workstream;//!< Used to build log entry strings. 
+    bool d_caching;                 //!< true while log entries are beign cached (prior to logfile creation)
+    
+private:
+	/*************************************************************************
+		Copy constructor and assignment usage is denied.
+	*************************************************************************/
+	Logger(const Logger& logger) {}
+	Logger& operator=(const Logger& logger) {return *this;}
+
+};
+
+/*************************************************************************
+	This macro is used for 'Insane' level logging so that those items are
+	excluded from non-debug builds
+*************************************************************************/
+#if defined(DEBUG) || defined (_DEBUG)
+#	define CEGUI_LOGINSANE( message ) CEGUI::Logger::getSingleton().logEvent((message), CEGUI::Insane);
+#else
+#	define CEGUI_LOGINSANE( message )
+#endif
+
+} // End of  CEGUI namespace section
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUILogger_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIColourRect.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIColourRect.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIColourRect.h	(revision 1092)
@@ -0,0 +1,198 @@
+/************************************************************************
+	filename: 	CEGUIColourRect.h
+	created:	8/3/2004
+	author:		Paul D Turner
+	
+	purpose:	Defines class representing colours for four corners of a
+				rectangle
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIColourRect_h_
+#define _CEGUIColourRect_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIcolour.h"
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Class that holds details of colours for the four corners of a rectangle.
+*/
+class CEGUIEXPORT ColourRect
+{
+public:
+	/*!
+	\brief
+		Default constructor
+	*/
+	ColourRect(void);
+
+
+	/*!
+	\brief
+		Constructor for ColourRect objects (via single colour).  Also handles default construction.
+	*/
+	ColourRect(const colour& col);
+
+
+	/*!
+	\brief
+		Constructor for ColourRect objects
+	*/
+	ColourRect(const colour& top_left, const colour& top_right, const colour& bottom_left, const colour& bottom_right);
+
+
+	/*!
+	\brief
+		Set the alpha value to use for all four corners of the ColourRect.
+
+	\param alpha
+		Alpha value to use.
+
+	\return
+		Nothing.
+	*/
+	void	setAlpha(float alpha);
+
+
+	/*!
+	\brief
+		Set the alpha value to use for the top edge of the ColourRect.
+
+	\param alpha
+		Alpha value to use.
+
+	\return
+		Nothing.
+	*/
+	void	setTopAlpha(float alpha);
+
+
+	/*!
+	\brief
+		Set the alpha value to use for the bottom edge of the ColourRect.
+
+	\param alpha
+		Alpha value to use.
+
+	\return
+		Nothing.
+	*/
+	void	setBottomAlpha(float alpha);
+
+
+	/*!
+	\brief
+		Set the alpha value to use for the left edge of the ColourRect.
+
+	\param alpha
+		Alpha value to use.
+
+	\return
+		Nothing.
+	*/
+	void	setLeftAlpha(float alpha);
+
+
+	/*!
+	\brief
+		Set the alpha value to use for the right edge of the ColourRect.
+
+	\param alpha
+		Alpha value to use.
+
+	\return
+		Nothing.
+	*/
+	void	setRightAlpha(float alpha);
+
+
+	/*!
+	\brief
+		Determinate the ColourRect is monochromatic or variegated.
+
+	\return
+		True if all four corners of the ColourRect has same colour, false otherwise.
+	*/
+	bool	isMonochromatic() const;
+
+
+	/*!
+	\brief
+		Gets a portion of this ColourRect as a subset ColourRect
+
+	\param left
+		The left side of this subrectangle (in the range of 0-1 float)
+	\param right
+		The right side of this subrectangle (in the range of 0-1 float)
+	\param top
+		The top side of this subrectangle (in the range of 0-1 float)
+	\param bottom
+		The bottom side of this subrectangle (in the range of 0-1 float)
+
+	\return
+		A ColourRect from the specified range
+	*/
+	ColourRect getSubRectangle( float left, float right, float top, float bottom ) const;
+
+	/*!
+	\brief
+		Get the colour at a point in the rectangle
+
+	\param x
+		The x coordinate of the point
+	\param y
+		The y coordinate of the point
+
+	\return
+		The colour at the specified point.
+	*/
+	colour getColourAtPoint( float x, float y ) const;
+
+
+	/*!
+	\brief
+		Set the colour of all four corners simultaneously.
+
+	\param col
+		colour that is to be set for all four corners of the ColourRect;
+	*/
+	void	setColours(const colour& col);
+
+
+	/*!
+	\brief
+		Module the alpha components of each corner's colour by a constant.
+
+	\param alpha
+		The constant factor to modulate all alpha colour components by.
+	*/
+	void	modulateAlpha(float alpha);
+
+
+	colour	d_top_left, d_top_right, d_bottom_left, d_bottom_right;		//<! ColourRect component colours
+};
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIColourRect_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIEvent.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIEvent.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIEvent.h	(revision 1092)
@@ -0,0 +1,346 @@
+/************************************************************************
+	filename: CEGUIEvent.h
+	created:  15/10/2004
+	authors:  Paul D Turner (High-level design) 
+            Gerald Lindsly (Coder)
+	
+	purpose:  Defines interface for Event class
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIEvent_h_
+#define _CEGUIEvent_h_
+
+#if defined (_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4786)
+#	pragma warning(disable : 4251)
+#	if !defined (_MSC_EXTENSIONS)
+#		pragma warning (disable : 4224)
+#	endif
+#endif
+
+#include "CEGUIBase.h"
+#include "CEGUIString.h"
+#include "CEGUIEventArgs.h"
+#include "CEGUIRefPtr.h"
+
+#include <map>
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+/* The base class for the various binders.  This provides
+   a consistent interface for firing functions bound to an event.
+*/
+template <typename Ret, typename Args>
+class SubscriberInterface {
+public:
+  virtual Ret operator()(Args) const = 0;
+  virtual ~SubscriberInterface() {}
+};
+
+
+/* This class binds a free function. */
+template <typename Ret, typename Args>
+class _freeBinder : public SubscriberInterface<Ret,Args>
+{
+public:
+  virtual Ret operator()(Args args) const 
+  {
+    return d_f(args);
+  }
+  typedef Ret (*SlotFunction)(Args);
+  _freeBinder(SlotFunction f) : d_f(f) {}
+protected:
+  SlotFunction d_f;
+};
+
+
+/* This class binds a copy of a functor. */
+template <class Functor, typename Ret, typename Args>
+class _functorBinder : public SubscriberInterface<Ret,Args>
+{
+public:
+  virtual Ret operator()(Args args) const 
+  {
+    return d_f(args);
+  }
+  _functorBinder(const Functor& f) : d_f(f) {}
+protected:
+  Functor d_f;
+};
+
+
+/* This class binds a member function along with a target
+   object. */
+template <class T, typename Ret, typename Args>
+class _memberBinder : public SubscriberInterface<Ret,Args>
+{
+  typedef Ret (T::*F)(Args);
+public:
+  virtual Ret operator()(Args args) const
+  {
+    return (d_t->*d_f)(args);
+  }
+  _memberBinder(F f, T* t) : d_f(f), d_t(t) {}
+protected:
+  F  d_f;
+  T* d_t;
+};
+
+
+/* This template describes the Subscriber class.  It is a wrapper
+   for a pointer to a SubscriberInterface with various constructors
+   that will by implicit conversion construct the various binders. */
+template <typename Ret, typename Args>
+class SubscriberTemplate
+{
+public:
+  Ret operator()(Args args) const
+  {
+    return (*d_si)(args);  // call the bound function
+  }
+
+  typedef Ret (*SlotFunction)(Args);
+
+  // construct from a free function
+  SubscriberTemplate(SlotFunction f)
+  {
+    d_si = new _freeBinder<Ret,Args>(f);
+  }
+
+  // construct from a member function and a pointer to the target object.
+  template <class T>
+  SubscriberTemplate(Ret (T::*f)(Args), T* target)
+  {
+    d_si = new _memberBinder<T,Ret,Args>(f, target);
+  }
+
+  // construct from a generalized functor by copying it
+  template <typename Functor> 
+  SubscriberTemplate(const Functor& f)
+  {
+    d_si = new _functorBinder<Functor,Ret,Args>(f);
+  }
+
+  /* construct from a preconstructed SubscriberInterface.
+     used for SubscriberRef(). */
+  SubscriberTemplate(SubscriberInterface<Ret,Args>* si) : d_si(si) {}
+
+  // copy constructor
+  SubscriberTemplate(const SubscriberTemplate<Ret,Args>& copy) : d_si(copy.d_si) {}
+
+  // 'less than' comparable for insertion in a map
+  bool operator<(const SubscriberTemplate<Ret,Args>& rhs) const { return d_si < rhs.d_si; }
+
+  // release the binding -- called upon disconnection
+  void release() const
+  {
+    delete d_si;
+  }
+
+protected:
+  SubscriberInterface<Ret,Args>* d_si;
+};
+
+
+/* This class binds a const reference to a generalized functor.
+   Sometimes it may not be appropriate for the functor to be
+   cloned.  In which case, use SubscriberRef() (which uses this). */
+template <class Functor, typename Ret, typename Args>
+class _refBinder : public SubscriberInterface<Ret,Args>
+{
+public:
+  virtual Ret operator()(Args args) const
+  {
+    return d_f(args);
+  }
+  _refBinder(const Functor& f) : d_f(f) {}
+protected:
+  const Functor& d_f;
+};
+
+/* This helper function produces a const reference binding */
+template <class Functor>
+SubscriberInterface<bool, const EventArgs&>*
+SubscriberRef(const Functor& f)
+{
+  return new _refBinder<Functor,bool,const EventArgs&>(f);
+}
+
+
+/*!
+\brief
+	Defines an 'event' which can be subscribed to by interested parties.
+
+	An Event can be subscribed by a function, a static member function, or a function object.  Whichever option
+	is taken, the function signature needs to be as follows
+	\par
+	<em>bool function_name(const EventArgs& args);</em>
+	\note
+		An Event object may not be copied.
+*/
+class CEGUIEXPORT Event
+{
+public:
+	class ConnectionInterface : public Referenced {
+	public:
+		virtual bool connected() { return false; }
+		virtual void disconnect() {}
+	};
+	typedef RefPtr<ConnectionInterface> Connection;
+
+
+	class ScopedConnection {
+	public:
+		ScopedConnection(Connection conn_) : conn(conn_) {}
+		~ScopedConnection() { conn->disconnect(); }
+		Connection conn;
+	};
+
+
+	typedef SubscriberTemplate<bool, const EventArgs&> Subscriber;
+	typedef int Group;
+
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructs a new Event object with the specified name
+	*/
+	Event(const String& name);
+
+	/*!
+	\brief
+		Destructor for Event objects
+	*/
+	virtual ~Event(void);
+
+
+	/*!
+	\brief
+		Return the name given to this Event object when it was created.
+
+	\return
+		String object containing the name of the Event object.
+	*/
+	const String& getName(void) const	{return d_name;}
+
+
+	/*!
+	\brief
+		Subscribes some function / object to the Event
+
+	\param subscriber
+		A function, static member function, or function object, with the signature void function_name(const EventArgs& args)
+
+	\return
+		A Connection pointer which can be used to disconnect (unsubscribe) from the Event, and to check the connection state.
+	*/
+	Connection subscribe(Subscriber subscriber) { return subscribe(0, subscriber); }
+
+
+	/*!
+	\brief
+		Subscribes some function / object to the Event
+
+	\param group
+		The Event group to subscribe to, subscription groups are called in ascending order, followed by subscriptions with no group.
+		connections to the same group may be called in any order.
+
+	\param subscriber
+		A function, static member function, or function object, with the signature void function_name(const EventArgs& args)
+
+	\return
+		A Connection which can be used to disconnect (unsubscribe) from the Event, and to check the connection state.
+	*/
+	Connection subscribe(Group group, Subscriber subscriber);
+  
+
+	/*
+	\brief
+		Fires the event.  All event subscribers get called in the appropriate sequence.
+
+	\param args
+		An object derived from EventArgs to be passed to each event subscriber.
+
+	\return
+		Nothing.
+	*/
+	void	operator()(EventArgs& args);
+
+private:
+	/*************************************************************************
+		Copy constructor and assignment are not allowed for events
+	*************************************************************************/
+	Event(const Event& evt)	{}
+	Event& operator=(const Event& evt)	{return *this;}
+
+	/*
+	\brief
+		removes the subscriber from the event.
+
+	\param subscriber
+		A pointer to a SubscriberInterface which is to be removed from the event.
+
+	\return
+		- true, if the subscriber was registered with the event in the specified group and it was removed.
+		- false, if not.
+	*/
+	bool unsubscribe(Subscriber subscriber, Group group=0);
+
+	class GroupSubscriber {
+	public:
+		Group group;
+		Subscriber subscriber;
+		GroupSubscriber(Group group_, Subscriber subscriber_) 
+			: group(group_), subscriber(subscriber_) {}
+	};
+
+	struct ltGroupSubscriber
+	{
+		bool operator()(const GroupSubscriber& gs1, const GroupSubscriber& gs2) const
+		{
+			return gs1.group <  gs2.group ||
+				gs1.group == gs2.group && gs1.subscriber < gs2.subscriber;
+		}
+	};
+	typedef std::map<GroupSubscriber, Connection, ltGroupSubscriber> ConnectionOrdering;
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	const String	d_name;		//!< Name of this event
+	ConnectionOrdering connectionOrdering;
+	friend class ConnectionImpl;
+};
+
+
+} // End of  CEGUI namespace section
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUIEvent_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUITinyXMLParser.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUITinyXMLParser.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUITinyXMLParser.h	(revision 1092)
@@ -0,0 +1,59 @@
+/************************************************************************
+    filename:   CEGUITinyXMLParser.h
+    created:    Sun Mar 13 2005
+    author:     Paul D Turner
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+ 
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+ 
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+ 
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUITinyXMLParser_h_
+#define _CEGUITinyXMLParser_h_
+
+#include "CEGUIXMLParser.h"
+#include "tinyxml/tinyxml.h"
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+    /*!
+    \brief
+    Implementation of XMLParser using TinyXML
+     */
+    class TinyXMLParser : public XMLParser
+    {
+    public:
+        TinyXMLParser(void);
+        ~TinyXMLParser(void);
+
+        // Implementation of public abstract interface
+        void parseXMLFile(XMLHandler& handler, const String& filename, const String& schemaName, const String& resourceGroup);
+
+    protected:
+        void processElement(const TiXmlElement* element);
+        // Implementation of abstract interface.
+        bool initialiseImpl(void);
+        void cleanupImpl(void);
+
+        // data
+        XMLHandler* d_handler;
+    };
+
+} // End of  CEGUI namespace section
+
+
+#endif  // end of guard _CEGUITinyXMLParser_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIConfig_xmlHandler.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIConfig_xmlHandler.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIConfig_xmlHandler.h	(revision 1092)
@@ -0,0 +1,158 @@
+/************************************************************************
+	filename: 	CEGUIConfig_xmlHandler.h
+	created:	17/7/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to configuration file parser
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIConfig_xmlHandler_h_
+#define _CEGUIConfig_xmlHandler_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIString.h"
+#include "CEGUILogger.h"
+#include "CEGUIXMLHandler.h"
+
+#include <vector>
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Handler class used to parse the Configuration XML file.
+*/
+class Config_xmlHandler : public XMLHandler
+{
+public:
+	/*************************************************************************
+		Construction & Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for GUILayout_xmlHandler objects
+	*/
+	Config_xmlHandler(void) {}
+
+	/*!
+	\brief
+		Destructor for GUILayout_xmlHandler objects
+	*/
+	virtual ~Config_xmlHandler(void) {}
+
+	/*************************************************************************
+		SAX2 Handler overrides
+	*************************************************************************/ 
+	/*!
+	\brief
+		document processing (only care about elements, schema validates format)
+	*/
+    virtual void elementStart(const String& element, const XMLAttributes& attributes);
+
+	/*************************************************************************
+		Functions used by our implementation
+	*************************************************************************/
+	/*!
+	\brief
+		Return log filename
+	*/
+	const String&	getLogFilename(void) const				{return d_logFilename;}
+
+
+	/*!
+	\brief
+		Return initial scheme filename to load
+	*/
+	const String&	getSchemeFilename(void) const			{return d_schemeFilename;}
+
+
+	/*!
+	\brief
+		Return initial layout filename to load and set as the GUI sheet.
+	*/
+	const String&	getLayoutFilename(void) const			{return d_layoutFilename;}
+
+
+	/*!
+	\brief
+		Return the name of the initialisation script to run
+	*/
+	const String&	getInitScriptFilename(void) const		{return d_initScriptFilename;}
+
+
+	/*!
+	\brief
+		Return the name of the termination script to run
+	*/
+	const String&	getTermScriptFilename(void) const		{return d_termScriptFilename;}
+
+
+	/*!
+	\brief
+		Return name of font to use as default.
+	*/
+	const String&	getDefaultFontName(void) const		{return d_defaultFontName;}
+
+
+	/*!
+	\brief
+		Return name of default resource group.
+	*/
+	const String&	getDefaultResourceGroup(void) const		{return d_defaultResourceGroup;}
+
+    /*!
+    \brief
+        Return logging level which was read from the config file.
+    */
+    LoggingLevel getLoggingLevel(void) const     {return d_logLevel;}
+
+
+private:
+	/*************************************************************************
+		Implementation Constants
+	*************************************************************************/
+	static const String CEGUIConfigElement;				//!< Tag name for CEGUIConfig elements.
+	static const char	ConfigLogfileAttribute[];			//!< Attribute name that stores the filename to use for the log.
+	static const char	ConfigSchemeAttribute[];			//!< Attribute name that stores the filename of a scheme to load.
+	static const char	ConfigLayoutAttribute[];			//!< Attribute name that stores the filename of a layout to load.
+	static const char	ConfigDefaultFontAttribute[];		//!< Attribute name that stores the name of the default font to set (as loaded by scheme)
+	static const char	ConfigInitScriptAttribute[];		//!< Attribute name that stores the filename of an initialisation script to run.
+	static const char	ConfigTerminateScriptAttribute[];	//!< Attribute name that stores the filename of a termination script to run.
+    static const char   ConfigDefaultResourceGroupAttribute[]; //!< Attribute name that stores the default resource group (also used when loading config resources).
+    static const char   ConfigLoggingLevelAttribute[];      //!< Attribute name that stores the logging level to be used.
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	String		d_logFilename;			//!< filename for the log.
+	String		d_schemeFilename;		//!< filename for the scheme to auto-load.
+	String		d_layoutFilename;		//!< filename for the layout to auto-load.
+	String		d_initScriptFilename;	//!< filename for the script to run after system init.
+	String		d_termScriptFilename;	//!< filename for the script to run before system shutdown.
+	String		d_defaultFontName;		//!< Holds name of default font to set.
+    String      d_defaultResourceGroup; //!< Holds default resource group name.
+    LoggingLevel    d_logLevel;         //!< Holds the logging level read from the config.
+};
+
+
+} // End of  CEGUI namespace section
+
+#endif	// end of guard _CEGUIConfig_xmlHandler_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIPropertyHelper.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIPropertyHelper.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIPropertyHelper.h	(revision 1092)
@@ -0,0 +1,68 @@
+/************************************************************************
+	filename: 	CEGUIPropertyHelper.h
+	created:	6/7/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to the PropertyHelper class
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIPropertyHelper_h_
+#define _CEGUIPropertyHelper_h_
+
+#include "CEGUIWindow.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Helper class used to convert various data types to and from the format expected in Propery strings
+*/
+class CEGUIEXPORT PropertyHelper
+{
+public:
+	static	float	stringToFloat(const String& str);
+	static	uint	stringToUint(const String& str);
+	static	bool	stringToBool(const String& str);
+	static	Size	stringToSize(const String& str);
+	static	Point	stringToPoint(const String& str);
+	static	Rect	stringToRect(const String& str);
+	static	MetricsMode	stringToMetricsMode(const String& str);
+	static const Image*	stringToImage(const String& str);
+	static	colour	stringToColour(const String& str);
+	static	ColourRect	stringToColourRect(const String& str);
+
+	static String	floatToString(float val);
+	static String	uintToString(uint val);
+	static String	boolToString(bool val);
+	static String	sizeToString(const Size& val);
+	static String	pointToString(const Point& val);
+	static String	rectToString(const Rect& val);
+	static String	metricsModeToString(MetricsMode val);
+	static String	imageToString(const Image* const val);
+	static String	colourToString(const colour& val);
+	static String	colourRectToString(const ColourRect& val);
+};
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIPropertyHelper_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIProperty.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIProperty.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIProperty.h	(revision 1092)
@@ -0,0 +1,173 @@
+/************************************************************************
+	filename: 	CEGUIProperty.h
+	created:	21/2/2004
+	author:		Paul D Turner
+	
+	purpose:	Defines the Property class which forms part of a
+				PropertySet
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIProperty_h_
+#define _CEGUIProperty_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIString.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+/*!
+\brief
+	Dummy base class to ensure correct casting of receivers.
+*/
+class CEGUIEXPORT PropertyReceiver
+{
+public:
+	PropertyReceiver() {}
+	virtual ~PropertyReceiver() {}
+};
+
+
+/*!
+\brief
+	An abstract class that defines the interface to access object properties by name.
+
+	Property objects allow (via a PropertySet) access to certain properties of objects
+	by using simple get/set functions and the name of the property to be accessed.
+*/
+class CEGUIEXPORT Property
+{
+public:
+	/*!
+	\brief
+		Creates a new Property object.
+
+	\param name
+		String containing the name of the new Property.
+
+	\param help
+		String containing a description of the Property and it's usage.
+		
+	\param defaultValue
+		String holding the textual representation of the default value for this Property
+	*/
+	Property(const String& name, const String& help, const String& defaultValue = "") : 
+	  d_name(name),
+	  d_help(help),
+	  d_default(defaultValue)
+	{
+	}
+
+
+	/*!
+	\brief
+		Destructor for Property objects
+	*/
+	virtual ~Property(void) {}
+
+
+	/*!
+	\brief
+		Return a String that describes the purpose and usage of this Property.
+
+	\return
+		String that contains the help text
+	*/
+	const String& getHelp(void) const		{return d_help;}
+
+
+	/*!
+	\brief
+		Return a the name of this Property
+
+	\return
+		String containing the name of the Property
+	*/
+	const String& getName(void) const		{return d_name;}
+
+
+	/*!
+	\brief
+		Return the current value of the Property as a String
+
+	\param receiver
+		Pointer to the target object.
+
+	\return
+		String object containing a textual representation of the current value of the Property
+	*/
+	virtual String	get(const PropertyReceiver* receiver) const = 0;
+
+
+	/*!
+	\brief
+		Sets the value of the property
+
+	\param receiver
+		Pointer to the target object.
+
+	\param value
+		A String object that contains a textual representation of the new value to assign to the Property.
+
+	\return
+		Nothing.
+
+	\exception InvalidRequestException	Thrown when the Property was unable to interpret the content of \a value.
+	*/
+	virtual void	set(PropertyReceiver* receiver, const String& value) = 0;
+
+
+	/*!
+	\brief
+		Returns whether the property is at it's default value.
+
+	\param receiver
+		Pointer to the target object.
+
+	\return
+		- true if the property has it's default value.
+		- false if the property has been modified from it's default value.
+	*/
+	virtual bool	isDefault(const PropertyReceiver* receiver) const;
+
+
+	/*!
+	\brief
+		Returns the default value of the Property as a String.
+
+	\param receiver
+		Pointer to the target object.
+
+	\return
+		String object containing a textual representation of the default value for this property.
+	*/
+	virtual String	getDefault(const PropertyReceiver* receiver) const;
+
+protected:
+	String	d_name;		//!< String that stores the Property name.
+	String	d_help;		//!< String that stores the Property help text.
+	String	d_default;	//!< String that stores the Property default value string.
+};
+
+} // End of  CEGUI namespace section
+
+#endif	// end of guard _CEGUIProperty_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIIteratorBase.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIIteratorBase.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIIteratorBase.h	(revision 1092)
@@ -0,0 +1,276 @@
+/************************************************************************
+	filename: 	CEGUIIteratorBase.h
+	created:	26/7/2004
+	author:		Paul D Turner
+	
+	purpose:	Defines interface for base iterator class
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+/*************************************************************************
+	This is based somewhat on MapIterator in the Ogre library (www.ogre3d.org)
+*************************************************************************/
+#ifndef _CEGUIIteratorBase_h_
+#define _CEGUIIteratorBase_h_
+
+#include "CEGUIBase.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Base class constant iterator used to offer iteration over various collections within the system.
+*/
+template<class T>
+class ConstBaseIterator
+{
+public:
+#if defined(_MSC_VER) && (_MSC_VER <= 1200) && !defined(_STLPORT_VERSION)
+	typedef typename T::referent_type	mapped_type;
+#else
+	typedef typename T::mapped_type		mapped_type;
+#endif
+
+	/*!
+	\brief
+		ConstBaseIterator constructor
+
+	\param start_iter
+		'real' iterator that will be the start of the range to be iterated over by this iterator.
+
+	\param end_iter
+		'real' iterator that will be the end of the range to be iterated over by this iterator.
+	*/
+	ConstBaseIterator(typename T::const_iterator start_iter, typename T::const_iterator end_iter) :
+		d_currIter(start_iter),
+		d_startIter(start_iter),
+		d_endIter(end_iter)
+	{
+	}
+
+	
+	/*!
+	\brief
+		ConstBaseIterator destructor
+	*/
+	~ConstBaseIterator(void)
+	{
+	}
+
+
+	/*!
+	\brief
+		ConstBaseIterator copy constructor
+	*/
+	ConstBaseIterator(const ConstBaseIterator<T>& org) :
+		d_currIter(org.d_currIter),
+		d_startIter(org.d_startIter),
+		d_endIter(org.d_endIter)
+	{
+	}
+
+
+	/*!
+	\brief
+		ConstBaseIterator assignment operator
+	*/
+	ConstBaseIterator<T>&	operator=(const ConstBaseIterator<T>& rhs)
+	{
+		d_currIter	= rhs.d_currIter;
+		d_startIter	= rhs.d_startIter;
+		d_endIter	= rhs.d_endIter;
+
+		return *this;
+	}
+
+
+	/*!
+	\brief
+		Return the key for the item at the current iterator position.
+	*/
+	typename T::key_type	getCurrentKey(void) const
+	{
+		return d_currIter->first;
+	}
+
+
+	/*!
+	\brief
+		Return the value for the item at the current iterator position.
+	*/
+	mapped_type	getCurrentValue(void) const
+	{
+		return d_currIter->second;
+	}
+
+
+	/*!
+	\brief
+		Return whether the current iterator position is at the end of the iterators range.
+	*/
+	bool	isAtEnd(void) const
+	{
+		return d_currIter == d_endIter;
+	}
+
+
+	/*!
+	\brief
+		Return whether the current iterator position is at the start of the iterators range.
+	*/
+	bool	isAtStart(void) const
+	{
+		return d_currIter == d_startIter;
+	}
+
+
+	/*!
+	\brief
+		Increase the iterator position (prefix increment).
+
+	\note
+		The iterator is checked, and this call will always succeed, so do not rely on some exception to exit a loop.
+	*/
+	ConstBaseIterator<T>&	operator++()
+	{
+		if (d_currIter != d_endIter)
+			++d_currIter;
+
+		return *this;
+	}
+
+
+	/*!
+	\brief
+		Increase the iterator position (postfix increment).
+
+	\note
+		The iterator is checked, and this call will always succeed, so do not rely on some exception to exit a loop.
+	*/
+	ConstBaseIterator<T>	operator++(int)
+	{
+		ConstBaseIterator<T> tmp = *this;
+		++*this;
+
+		return tmp;
+	}
+
+
+	/*!
+	\brief
+		Decrease the iterator position (prefix decrement).
+
+	\note
+		The iterator is checked, and this call will always succeed, so do not rely on some exception to exit a loop.
+	*/
+	ConstBaseIterator<T>&	operator--()
+	{
+		if (d_currIter != d_startIter)
+			--d_currIter;
+
+		return *this;
+	}
+
+
+	/*!
+	\brief
+		Decrease the iterator position (postfix decrement).
+
+	\note
+		The iterator is checked, and this call will always succeed, so do not rely on some exception to exit a loop.
+	*/
+	ConstBaseIterator<T>	operator--(int)
+	{
+		ConstBaseIterator<T> tmp = *this;
+		--*this;
+
+		return tmp;
+	}
+
+
+	/*!
+	\brief
+		Compares two iterators.  Return true if the current position of both iterators are equivalent.
+	*/
+	bool	operator==(const ConstBaseIterator<T>& rhs) const
+	{
+		return d_currIter == rhs.d_currIter;
+	}
+
+
+	/*!
+	\brief
+		Compares two iterators.  Return true if the current position of the iterators are different.
+	*/
+	bool	operator!=(const ConstBaseIterator<T>& rhs) const
+	{
+		return !this == rhs;
+	}
+
+
+	/*!
+	\brief
+		Return the value for the current iterator position.
+	*/
+	mapped_type	operator*() const
+	{
+		return d_currIter->second;
+	}
+
+
+	/*!
+	\brief
+		Set the iterator current position to the start position.
+	*/
+	void	toStart(void)
+	{
+		d_currIter = d_startIter;
+	}
+
+
+	/*!
+	\brief
+		Set the iterator current position to the end position.
+	*/
+	void	toEnd(void)
+	{
+		d_currIter = d_endIter;
+	}
+
+
+private:
+	/*************************************************************************
+		No default construction available
+	*************************************************************************/
+	ConstBaseIterator(void) {}
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	typename T::const_iterator	d_currIter;		//!< 'real' iterator describing the current position within the collection.
+	typename T::const_iterator	d_startIter;	//!< 'real' iterator describing the start position within the collection (or what we were told was the start).
+	typename T::const_iterator	d_endIter;		//!< 'real' iterator describing the end position within the collection (or what we were told was the end).
+};
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIIteratorBase_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUISystem.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUISystem.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUISystem.h	(revision 1092)
@@ -0,0 +1,982 @@
+/************************************************************************
+	filename: 	CEGUISystem.h
+	created:	20/2/2004
+	author:		Paul D Turner
+
+	purpose:	Defines interface for main GUI system class
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUISystem_h_
+#define _CEGUISystem_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIString.h"
+#include "CEGUISingleton.h"
+#include "CEGUIRenderer.h"
+#include "CEGUIMouseCursor.h"
+#include "CEGUIInputEvent.h"
+#include "CEGUIResourceProvider.h"
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4275)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+// forward reference of impl struct
+struct MouseClickTrackerImpl;
+
+
+/*!
+\brief
+	The System class is the CEGUI class that provides access to all other elements in this system.
+
+	This object must be created by the client application.  The System object requires that you pass it
+	an initialised Renderer object which it can use to interface to whatever rendering system will be
+	used to display the GUI imagery.
+*/
+class CEGUIEXPORT System : public Singleton<System>, public EventSet
+{
+public:
+	static const String EventNamespace;				//!< Namespace for global events
+
+	/*************************************************************************
+		Constants
+	*************************************************************************/
+	static const double		DefaultSingleClickTimeout;		//!< Default timeout for generation of single click events.
+	static const double		DefaultMultiClickTimeout;		//!< Default timeout for generation of multi-click events.
+	static const Size		DefaultMultiClickAreaSize;		//!< Default allowable mouse movement for multi-click event generation.
+
+	// event names
+	static const String EventGUISheetChanged;				//!< Name of event fired whenever the GUI sheet is changed.
+	static const String EventSingleClickTimeoutChanged;	//!< Name of event fired when the single-click timeout is changed.
+	static const String EventMultiClickTimeoutChanged;	//!< Name of event fired when the multi-click timeout is changed.
+	static const String EventMultiClickAreaSizeChanged;	//!< Name of event fired when the size of the multi-click tolerance area is changed.
+	static const String EventDefaultFontChanged;			//!< Name of event fired when the default font changes.
+	static const String EventDefaultMouseCursorChanged;	//!< Name of event fired when the default mouse cursor changes.
+	static const String EventMouseMoveScalingChanged;		//!< Name of event fired when the mouse move scaling factor changes.
+
+
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructs a System object.
+
+	\param renderer
+		Pointer to the valid Renderer object that will be used to render GUI imagery
+
+	\param logFile
+		pointer to a utf8 encoded buffer containing the name to use for the log file.
+	*/
+	System(Renderer* renderer, const utf8* logFile = (const utf8*)"CEGUI.log");
+
+	/*!
+	\brief
+		Construct a new System object
+
+	\param renderer
+		Pointer to the valid Renderer object that will be used to render GUI imagery
+
+	\param resourceProvider
+		Pointer to a ResourceProvider object.
+
+	\param logFile
+		pointer to a utf8 encoded buffer containing the name to use for the log file.
+	*/
+    System(Renderer* renderer, ResourceProvider* resourceProvider, const utf8* logFile = (const utf8*)"CEGUI.log");
+
+
+	/*!
+	\brief
+		Construct a new System object
+
+	\param renderer
+		Pointer to the valid Renderer object that will be used to render GUI imagery
+
+	\param scriptModule
+		Pointer to a ScriptModule object.  may be NULL.
+
+	\param configFile
+		pointer to a utf8 encoded buffer containing the name to use for the configuration file.
+	*/
+	System(Renderer* renderer, ScriptModule* scriptModule, const utf8* configFile = (const utf8*)"cegui.config");
+
+
+	/*!
+	\brief
+		Construct a new System object
+
+	\param renderer
+		Pointer to the valid Renderer object that will be used to render GUI imagery
+
+	\param scriptModule
+		Pointer to a ScriptModule object.  may be NULL.
+
+	\param resourceProvider
+		Pointer to a ResourceProvider object.
+
+	\param configFile
+		pointer to a utf8 encoded buffer containing the name to use for the configuration file.
+	*/
+	System(Renderer* renderer, ScriptModule* scriptModule, ResourceProvider* resourceProvider, const utf8* configFile = (const utf8*)"cegui.config");
+
+
+    /*!
+    \brief
+        Constructs a System object.
+
+    \param renderer
+        Pointer to the valid Renderer object that will be used to render GUI imagery
+
+    \param xmlParser
+        Pointer to a valid XMLParser object to be used when parsing XML files, or NULL to use a default parser.
+
+    \param logFile
+        pointer to a utf8 encoded buffer containing the name to use for the log file.
+    */
+    System(Renderer* renderer, XMLParser* xmlParser, const utf8* logFile = (const utf8*)"CEGUI.log");
+
+    
+    /*!
+    \brief
+        Constructs a System object.
+
+    \param renderer
+        Pointer to the valid Renderer object that will be used to render GUI imagery
+
+    \param resourceProvider
+        Pointer to a ResourceProvider object.
+    
+    \param xmlParser
+        Pointer to a valid XMLParser object to be used when parsing XML files, or NULL to use a default parser.
+
+    \param logFile
+        pointer to a utf8 encoded buffer containing the name to use for the log file.
+    */
+    System(Renderer* renderer, ResourceProvider* resourceProvider, XMLParser* xmlParser, const utf8* logFile = (const utf8*)"CEGUI.log");
+
+    
+    /*!
+    \brief
+        Construct a new System object
+
+    \param renderer
+        Pointer to the valid Renderer object that will be used to render GUI imagery
+
+    \param xmlParser
+        Pointer to a valid XMLParser object to be used when parsing XML files, or NULL to use a default parser.
+    
+    \param scriptModule
+        Pointer to a ScriptModule object.  may be NULL.
+
+    \param configFile
+        pointer to a utf8 encoded buffer containing the name to use for the configuration file.
+    */
+    System(Renderer* renderer, XMLParser* xmlParser, ScriptModule* scriptModule, const utf8* configFile = (const utf8*)"cegui.config");
+
+        
+    /*!
+    \brief
+        Construct a new System object
+
+    \param renderer
+        Pointer to the valid Renderer object that will be used to render GUI imagery
+
+    \param resourceProvider
+        Pointer to a ResourceProvider object.
+    
+    \param xmlParser
+        Pointer to a valid XMLParser object to be used when parsing XML files, or NULL to use a default parser.
+    
+    \param scriptModule
+        Pointer to a ScriptModule object.  may be NULL.
+
+    \param configFile
+        pointer to a utf8 encoded buffer containing the name to use for the configuration file.
+    */
+    System(Renderer* renderer, ResourceProvider* resourceProvider, XMLParser* xmlParser, ScriptModule* scriptModule, const utf8* configFile = (const utf8*)"cegui.config");
+
+
+	/*!
+	\brief
+		Destructor for System objects.
+	*/
+	~System(void);
+
+
+	/*!
+	\brief
+		Return a pointer to the Renderer object being used by the system
+
+	\return
+		Pointer to the Renderer object used by the system.
+	*/
+	Renderer*	getRenderer(void) const			{return d_renderer;}
+
+
+	/*!
+	\brief
+		Return singleton System object
+
+	\return
+		Singleton System object
+	*/
+	static	System&	getSingleton(void);
+
+
+	/*!
+	\brief
+		Return pointer to singleton System object
+
+	\return
+		Pointer to singleton System object
+	*/
+	static	System*	getSingletonPtr(void);
+
+
+	/*!
+	\brief
+		Set the default font to be used by the system
+
+	\param name
+		String object containing the name of the font to be used as the system default.
+
+	\return
+		Nothing.
+	*/
+	void	setDefaultFont(const String& name);
+
+
+	/*!
+	\brief
+		Set the default font to be used by the system
+
+	\param font
+		Pointer to the font to be used as the system default.
+
+	\return
+		Nothing.
+	*/
+	void	setDefaultFont(Font* font);
+
+
+	/*!
+	\brief
+		Return a pointer to the default Font for the GUI system
+
+	\return
+		Pointer to a Font object that is the default font in the system.
+	*/
+	Font*	getDefaultFont(void) const				{return d_defaultFont;}
+
+
+	/*!
+	\brief
+		Causes a full re-draw next time renderGUI() is called
+
+	\return
+		Nothing
+	*/
+	void	signalRedraw()		{d_gui_redraw = true;}
+
+
+	/*!
+	\brief
+		Return a boolean value to indicate whether a full re-draw is requested next time renderGUI() is called.
+
+	\return
+		true if a re-draw has been requested
+	*/
+	bool	isRedrawRequested() const		{return d_gui_redraw;}
+
+
+	/*!
+	\brief
+		Render the GUI
+
+		Depending upon the internal state, this may either re-use rendering from last time, or trigger a full re-draw from all elements.
+
+	\return
+		Nothing
+	*/
+	void	renderGUI(void);
+
+
+	/*!
+	\brief
+		Set the active GUI sheet (root) window.
+
+	\param sheet
+		Pointer to a Window object that will become the new GUI 'root'
+
+	\return
+		Pointer to the window that was previously set as the GUI root.
+	*/
+	Window*	setGUISheet(Window* sheet);
+
+
+	/*!
+	\brief
+		Return a pointer to the active GUI sheet (root) window.
+
+	\return
+		Pointer to the window object that has been set as the GUI root element.
+	*/
+	Window*	getGUISheet(void) const		{return d_activeSheet;}
+
+
+	/*!
+	\brief
+		Return the current timeout for generation of single-click events.
+
+		A single-click is defined here as a button being pressed and then released.
+
+	\return
+		double value equal to the current single-click timeout value.
+	*/
+	double	getSingleClickTimeout(void) const		{return d_click_timeout;}
+
+
+	/*!
+	\brief
+		Return the current timeout for generation of multi-click events.
+
+		A multi-click event is a double-click, or a triple-click.  The value returned
+		here is the maximum allowable time between mouse button down events for which
+		a multi-click event will be generated.
+
+	\return
+		double value equal to the current multi-click timeout value.
+	*/
+	double	getMultiClickTimeout(void) const		{return d_dblclick_timeout;}
+
+
+	/*!
+	\brief
+		Return the size of the allowable mouse movement tolerance used when generating multi-click events.
+
+		This size defines an area with the mouse at the centre.  The mouse must stay within the tolerance defined
+		for a multi-click (double click, or triple click) event to be generated.
+
+	\return
+		Size object describing the current multi-click tolerance area size.
+	*/
+	const Size&	getMultiClickToleranceAreaSize(void) const		{return d_dblclick_size;}
+
+
+	/*!
+	\brief
+		Set the timeout used for generation of single-click events.
+
+		A single-click is defined here as a button being pressed and then released.
+
+	\param timeout
+		double value equal to the single-click timeout value to be used from now onwards.
+
+	\return
+		Nothing.
+	*/
+	void	setSingleClickTimeout(double timeout);
+
+
+	/*!
+	\brief
+		Set the timeout to be used for the generation of multi-click events.
+
+		A multi-click event is a double-click, or a triple-click.  The value returned
+		here is the maximum allowable time between mouse button down events for which
+		a multi-click event will be generated.
+
+	\param timeout
+		double value equal to the multi-click timeout value to be used from now onwards.
+
+	\return
+		Nothing.
+	*/
+	void setMultiClickTimeout(double timeout);
+
+
+	/*!
+	\brief
+		Set the size of the allowable mouse movement tolerance used when generating multi-click events.
+
+		This size defines an area with the mouse at the centre.  The mouse must stay within the tolerance defined
+		for a multi-click (double click, or triple click) event to be generated.
+
+	\param sz
+		Size object describing the multi-click tolerance area size to be used.
+
+	\return
+		Nothing.
+	*/
+	void setMultiClickToleranceAreaSize(const Size&	sz);
+
+
+	/*!
+	\brief
+		Return the currently set default mouse cursor image
+
+	\return
+		Pointer to the current default image used for the mouse cursor.  May return NULL if default cursor has not been set,
+		or has intentionally been set to NULL - which results in a blank default cursor.
+	*/
+	const Image*	getDefaultMouseCursor(void) const	{return d_defaultMouseCursor;}
+
+
+	/*!
+	\brief
+		Set the image to be used as the default mouse cursor.
+
+	\param image
+		Pointer to an image object that is to be used as the default mouse cursor.  To have no cursor rendered by default, you
+		can specify NULL here.
+
+	\return
+		Nothing.
+	*/
+	void	setDefaultMouseCursor(const Image* image);
+
+
+	/*!
+	\brief
+		Set the image to be used as the default mouse cursor.
+
+	\param image
+		One of the MouseCursorImage enumerated values.
+
+	\return
+		Nothing.
+	*/
+	void	setDefaultMouseCursor(MouseCursorImage image)		{setDefaultMouseCursor((const Image*)image);}
+
+
+	/*!
+	\brief
+		Set the image to be used as the default mouse cursor.
+
+	\param imageset
+		String object that contains the name of the Imageset  that contains the image to be used.
+
+	\param image_name
+		String object that contains the name of the Image on \a imageset that is to be used.
+
+	\return
+		Nothing.
+
+	\exception UnknownObjectException	thrown if \a imageset is not known, or if \a imageset contains no Image named \a image_name.
+	*/
+	void	setDefaultMouseCursor(const String& imageset, const String& image_name);
+
+
+	/*!
+	\brief
+		Return the Window object that the mouse is presently within
+
+	\return
+		Pointer to the Window object that currently contains the mouse cursor, or NULL if none.
+	*/
+	Window*	getWindowContainingMouse(void) const	{return d_wndWithMouse;}
+
+
+	/*!
+	\brief
+		Return a pointer to the ScriptModule being used for scripting within the GUI system.
+
+	\return
+		Pointer to a ScriptModule based object.
+	*/
+	ScriptModule*	getScriptingModule(void) const;
+
+	/*!
+	\brief
+		Return a pointer to the ResourceProvider being used within the GUI system.
+
+	\return
+		Pointer to a ResourceProvider based object.
+	*/
+	ResourceProvider* getResourceProvider(void) const;
+
+	/*!
+	\brief
+		Execute a script file if possible.
+
+	\param filename
+		String object holding the filename of the script file that is to be executed
+		
+	\param resourceGroup
+		Resource group identifier to be passed to the ResourceProvider when loading the script file.
+	*/
+	void	executeScriptFile(const String& filename, const String& resourceGroup = "") const;
+
+
+	/*!
+	\brief
+		Execute a scripted global function if possible.  The function should not take any parameters and should return an integer.
+
+	\param function_name
+		String object holding the name of the function, in the global script environment, that
+		is to be executed.
+
+	\return
+		The integer value returned from the script function.
+	*/
+	int		executeScriptGlobal(const String& function_name) const;
+
+
+    /*!
+    \brief
+        If possible, execute script code contained in the given CEGUI::String object.
+
+    \param str
+        String object holding the valid script code that should be executed.
+
+    \return
+        Nothing.
+    */
+    void executeScriptString(const String& str) const;
+
+
+    /*!
+	\brief
+		return the current mouse movement scaling factor.
+
+	\return
+		float value that is equal to the currently set mouse movement scaling factor.  Defaults to 1.0f.
+	*/
+	float	getMouseMoveScaling(void) const;
+
+
+	/*!
+	\brief
+		Set the current mouse movement scaling factor
+
+	\param scaling
+		float value specifying the scaling to be applied to mouse movement inputs.
+
+	\return
+		nothing.
+	*/
+	void	setMouseMoveScaling(float scaling);
+
+
+	/*!
+	\brief
+		Internal method used to inform the System object whenever a window is destroyed, so that System can perform any required
+		housekeeping.
+
+	\note
+		This method is not intended for client code usage.  If you use this method anything can, and probably will, go wrong!
+	*/
+	void	notifyWindowDestroyed(const Window* window);
+
+
+    /*!
+    \brief
+        Return the current system keys value.
+
+    \return
+        uint value representing a combination of the SystemKey bits.
+    */
+    uint    getSystemKeys(void) const   { return d_sysKeys; }
+
+    /*!
+    \brief
+        Return the XMLParser object.
+     */
+    XMLParser* getXMLParser(void) const     { return d_xmlParser; }
+
+
+    /*!
+    \brief
+        Set the system default Tooltip object.  This value may be NULL to indicate that no default Tooltip will be
+        available.
+
+    \param tooltip
+        Pointer to a valid Tooltip based object which should be used as the default tooltip for the system, or NULL to
+        indicate that no system default tooltip is required.  Note that when passing a pointer to a Tooltip object,
+        ownership of the Tooltip does not pass to System.
+
+    \return
+        Nothing.
+    */
+    void setTooltip(Tooltip* tooltip);
+
+    /*!
+    \brief
+        Set the system default Tooltip to be used by specifying a Window type.
+
+        System will internally attempt to create an instance of the specified window type (which must be
+        derived from the base Tooltip class).  If the Tooltip creation fails, the error is logged and no
+        system default Tooltip will be available.
+
+    \param tooltipType
+        String object holding the name of the Tooltip based Window type which should be used as the Tooltip for
+        the system default.
+
+    \return
+        Nothing.
+    */
+    void setTooltip(const String& tooltipType);
+
+    /*!
+    \brief
+        return a poiter to the system default tooltip.  May return 0.
+
+    \return
+        Pointer to the current system default tooltip.  May return 0 if
+        no system default tooltip is available.
+     */
+    Tooltip* getDefaultTooltip(void) const  { return d_defaultTooltip; }
+
+
+	/*************************************************************************
+		Input injection interface
+	*************************************************************************/
+	/*!
+	\brief
+		Method that injects a mouse movement event into the system
+
+	\param delta_x
+		amount the mouse moved on the x axis.
+
+	\param delta_y
+		amount the mouse moved on the y axis.
+
+	\return
+		- true if the input was processed by the gui system.
+		- false if the input was not processed by the gui system.
+	*/
+	bool	injectMouseMove(float delta_x, float delta_y);
+
+
+	/*!
+	\brief
+		Method that injects that the mouse has left the application window
+
+	\return
+		- true if the generated mouse move event was handled.
+		- false if the generated mouse move event was not handled.
+	*/
+	bool	injectMouseLeaves(void);
+
+
+	/*!
+	\brief
+		Method that injects a mouse button down event into the system.
+
+	\param button
+		One of the MouseButton values indicating which button was pressed.
+
+	\return
+		- true if the input was processed by the gui system.
+		- false if the input was not processed by the gui system.
+	*/
+	bool	injectMouseButtonDown(MouseButton button);
+
+
+	/*!
+	\brief
+		Method that injects a mouse button up event into the system.
+
+	\param button
+		One of the MouseButton values indicating which button was released.
+
+	\return
+		- true if the input was processed by the gui system.
+		- false if the input was not processed by the gui system.
+	*/
+	bool	injectMouseButtonUp(MouseButton button);
+
+
+	/*!
+	\brief
+		Method that injects a key down event into the system.
+
+	\param key_code
+		uint value indicating which key was pressed.
+
+	\return
+		- true if the input was processed by the gui system.
+		- false if the input was not processed by the gui system.
+	*/
+	bool	injectKeyDown(uint key_code);
+
+
+	/*!
+	\brief
+		Method that injects a key up event into the system.
+
+	\param key_code
+		uint value indicating which key was released.
+
+	\return
+		- true if the input was processed by the gui system.
+		- false if the input was not processed by the gui system.
+	*/
+	bool	injectKeyUp(uint key_code);
+
+
+	/*!
+	\brief
+		Method that injects a typed character event into the system.
+
+	\param code_point
+		Unicode code point of the character that was typed.
+
+	\return
+		- true if the input was processed by the gui system.
+		- false if the input was not processed by the gui system.
+	*/
+	bool	injectChar(utf32 code_point);
+
+
+	/*!
+	\brief
+		Method that injects a mouse-wheel / scroll-wheel event into the system.
+
+	\param delta
+		float value representing the amount the wheel moved.
+
+	\return
+		- true if the input was processed by the gui system.
+		- false if the input was not processed by the gui system.
+	*/
+	bool	injectMouseWheelChange(float delta);
+
+
+	/*!
+	\brief
+		Method that injects a new position for the mouse cursor.
+
+	\param x_pos
+		New absolute pixel position of the mouse cursor on the x axis.
+
+	\param y_pos
+		New absolute pixel position of the mouse cursoe in the y axis.
+
+	\return
+		- true if the generated mouse move event was handled.
+		- false if the generated mouse move event was not handled.
+	*/
+	bool	injectMousePosition(float x_pos, float y_pos);
+
+
+	/*!
+	\brief
+		Method to inject time pulses into the system.
+
+	\param timeElapsed
+		float value indicating the amount of time passed, in seconds, since the last time this method was called.
+
+	\return
+		Currently, this method always returns true.
+	*/
+	bool	injectTimePulse(float timeElapsed);
+
+
+private:
+    // unimplemented constructors / assignment
+    System(const System& obj);
+    System& operator=(const System& obj);
+
+	/*************************************************************************
+		Implementation Constants
+	*************************************************************************/
+	static const char	CEGUIConfigSchemaName[];			//!< Filename of the XML schema used for validating Config files.
+
+
+	/*************************************************************************
+		Implementation Functions
+	*************************************************************************/
+	/*!
+	\brief
+		Given Point \a pt, return a pointer to the Window that should receive a mouse input if \a pt is the mouse location.
+
+	\param pt
+		Point object describing a screen location in pixels.
+
+	\return
+		Pointer to a Window object that should receive mouse input with the system in its current state and the mouse at location \a pt.
+	*/
+	Window*	getTargetWindow(const Point& pt) const;
+
+
+	/*!
+	\brief
+		Translate a MouseButton value into the corresponding SystemKey value
+
+	\param btn
+		MouseButton value describing the value to be converted
+
+	\return
+		SystemKey value that corresponds to the same button as \a btn
+	*/
+	SystemKey	mouseButtonToSyskey(MouseButton btn) const;
+
+
+	/*!
+	\brief
+		Translate a Key::Scan value into the corresponding SystemKey value.
+
+		This takes key direction into account, since we map two keys onto one value.
+
+	\param key
+		Key::Scan value describing the value to be converted
+
+	\param direction
+		true if the key is being pressed, false if the key is being released.
+
+	\return
+		SystemKey value that corresponds to the same key as \a key, or 0 if key was not a system key.
+	*/
+	SystemKey	keyCodeToSyskey(Key::Scan key, bool direction);
+
+
+	/*!
+	\brief
+		Method to do the work of the constructor
+	*/
+       void	constructor_impl(Renderer* renderer, ResourceProvider* resourceProvider, XMLParser* xmlParser, ScriptModule* scriptModule, const String& configFile, const String& logFile);
+
+
+	/*!
+	\brief
+		add events for the System object
+	*/
+	void	addSystemEvents(void);
+
+
+	/*!
+	\brief
+		Handler method for display size change notifications
+	*/
+	bool	handleDisplaySizeChange(const EventArgs& e);
+
+
+	/*************************************************************************
+		Handlers for System events
+	*************************************************************************/
+	/*!
+	\brief
+		Handler called when the main system GUI Sheet (or root window) is changed.
+
+		\a e is a WindowEventArgs with 'window' set to the old root window.
+	*/
+	void	onGUISheetChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the single-click timeout value is changed.
+	*/
+	void	onSingleClickTimeoutChanged(EventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the multi-click timeout value is changed.
+	*/
+	void	onMultiClickTimeoutChanged(EventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the size of the multi-click tolerance area is changed.
+	*/
+	void	onMultiClickAreaSizeChanged(EventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the default system font is changed.
+	*/
+	void	onDefaultFontChanged(EventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the default system mouse cursor image is changed.
+	*/
+	void	onDefaultMouseCursorChanged(EventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the mouse movement scaling factor is changed.
+	*/
+	void	onMouseMoveScalingChanged(EventArgs& e);
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	Renderer*	d_renderer;			//!< Holds the pointer to the Renderer object given to us in the constructor
+    ResourceProvider* d_resourceProvider;      //!< Holds the pointer to the ResourceProvider object given to us by the renderer or the System constructor.
+	Font*		d_defaultFont;		//!< Holds a pointer to the default GUI font.
+	bool		d_gui_redraw;		//!< True if GUI should be re-drawn, false if render should re-use last times queue.
+
+	Window*		d_wndWithMouse;		//!< Pointer to the window that currently contains the mouse.
+	Window*		d_activeSheet;		//!< The active GUI sheet (root window)
+
+	uint		d_sysKeys;			//!< Current set of system keys pressed (in mk1 these were passed in, here we track these ourself).
+	bool		d_lshift;			//!< Tracks state of left shift.
+	bool		d_rshift;			//!< Tracks state of right shift.
+	bool		d_lctrl;			//!< Tracks state of left control.
+	bool		d_rctrl;			//!< Tracks state of right control.
+	bool		d_lalt;				//!< Tracks state of left alt.
+	bool		d_ralt;				//!< Tracks state of right alt.
+
+	double		d_click_timeout;	//!< Timeout value, in seconds, used to generate a single-click (button down then up)
+	double		d_dblclick_timeout;	//!< Timeout value, in seconds, used to generate multi-click events (botton down, then up, then down, and so on).
+	Size		d_dblclick_size;	//!< Size of area the mouse can move and still make multi-clicks.
+
+	MouseClickTrackerImpl* const	d_clickTrackerPimpl;		//!< Tracks mouse button click generation.
+
+	// mouse cursor related
+	const Image*	d_defaultMouseCursor;		//!< Image to be used as the default mouse cursor.
+
+	// scripting
+	ScriptModule*	d_scriptModule;			//!< Points to the scripting support module.
+	String			d_termScriptName;		//!< Name of the script to run upon system shutdown.
+
+	float	d_mouseScalingFactor;			//!< Scaling applied to mouse movement inputs.
+
+    XMLParser*  d_xmlParser;        //!< XMLParser object we use to process xml files.
+    bool        d_ourXmlParser;     //!< true when we created the xml parser.
+
+    Tooltip* d_defaultTooltip;      //!< System default tooltip object.
+    bool     d_weOwnTooltip;        //!< true if System created the custom Tooltip.
+};
+
+} // End of  CEGUI namespace section
+
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUISystem_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIMouseCursor.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIMouseCursor.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIMouseCursor.h	(revision 1092)
@@ -0,0 +1,303 @@
+/************************************************************************
+	filename: 	CEGUIMouseCursor.h
+	created:	21/2/2004
+	author:		Paul D Turner
+	
+	purpose:	Defines interface for the MouseCursor class
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIMouseCursor_h_
+#define _CEGUIMouseCursor_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIString.h"
+#include "CEGUISingleton.h"
+#include "CEGUIVector.h"
+#include "CEGUIRect.h"
+#include "CEGUIEventSet.h"
+#include "CEGUIInputEvent.h"
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4275)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+/*!
+\brief
+	Enumeration of special values used for mouse cursor settings in Window objects.
+*/
+enum MouseCursorImage
+{		
+	BlankMouseCursor	= 0,		//!< No image should be displayed for the mouse cursor.
+	DefaultMouseCursor	= -1		//!< The default mouse cursor image should be displayed.
+};
+
+
+/*!
+\brief
+	Class that allows access to the GUI system mouse cursor.
+
+	The MouseCursor provides functionality to access the position and imagery of the mouse cursor / pointer
+*/
+class CEGUIEXPORT MouseCursor : public EventSet, public Singleton<MouseCursor>
+{
+public:
+	static const String EventNamespace;				//!< Namespace for global events
+
+	/*************************************************************************
+		Event name constants
+	*************************************************************************/
+	// generated internally by MouseCursor
+	static const String EventImageChanged;			//!< The cursor image of the widget has changed.
+
+
+	/*!
+	\brief
+		Constructor for MouseCursor objects
+	*/
+	MouseCursor(void);
+
+
+	/*!
+	\brief
+		Destructor for MouseCursor objects
+	*/
+	~MouseCursor(void);
+
+
+	/*!
+	\brief
+		Return singleton MouseCursor object
+
+	\return
+		Singleton MouseCursor object
+	*/
+	static	MouseCursor&	getSingleton(void);
+
+
+	/*!
+	\brief
+		Return pointer to singleton MouseCursor object
+
+	\return
+		Pointer to singleton MouseCursor object
+	*/
+	static	MouseCursor*	getSingletonPtr(void);
+
+
+	/*!
+	\brief
+		Set the current mouse cursor image
+
+	\param imageset
+		String object holding the name of the Imageset that contains the desired Image.
+
+	\param image_name
+		String object holding the name of the desired Image on Imageset \a imageset.
+
+	\return
+		Nothing.
+
+	\exception UnknownObjectException	thrown if \a imageset is not known, or if \a imageset contains no Image named \a image_name.
+	*/
+	void	setImage(const String& imageset, const String& image_name);
+
+
+	/*!
+	\brief
+		Set the current mouse cursor image
+	*/
+	void	setImage(const Image* image);
+
+
+	/*!
+	\brief
+		Get the current mouse cursor image
+	\return
+		The current image used to draw mouse cursor.
+	*/
+	const Image*	getImage(void) const	{return d_cursorImage;}
+
+
+	/*!
+	\brief
+		Makes the cursor draw itself
+
+	\return
+		Nothing
+	*/
+	void	draw(void) const;
+
+
+	/*!
+	\brief
+		Set the current mouse cursor position
+
+	\param position
+		Point object describing the new location for the mouse.  This will be clipped to within the renderer screen area.
+	*/
+	void	setPosition(const Point& position);
+
+
+	/*!
+	\brief
+		Offset the mouse cursor position by the deltas specified in \a offset.
+
+	\param offset
+		Point object which describes the amount to move the cursor in each axis.
+
+	\return
+		Nothing.
+	*/
+	void	offsetPosition(const Point& offset);
+
+
+	/*!
+	\brief
+		Set the area that the mouse cursor is constrained to.
+
+	\param area
+		Pointer to a Rect object that describes the area of the display that the mouse is allowed to occupy.  The given area will be clipped to
+		the current Renderer screen area - it is never possible for the mouse to leave this area.  If this parameter is NULL, the
+		constraint is set to the size of the current Renderer screen area.
+
+	\return
+		Nothing.
+	*/
+	void	setConstraintArea(const Rect* area);
+
+
+	/*!
+	\brief
+		Hides the mouse cursor.
+
+	\return
+		Nothing.
+	*/
+	void	hide(void)		{d_visible = false;}
+
+
+	/*!
+	\brief
+		Shows the mouse cursor.
+
+	\return
+		Nothing.
+	*/
+	void	show(void)		{d_visible = true;}
+
+
+	/*!
+	\brief
+		return whether the mouse cursor is visible.
+
+	\return
+		true if the mouse cursor is visible, false if the mouse cursor is hidden.
+	*/
+	bool	isVisible(void) const	{return d_visible;}
+
+
+	/*!
+	\brief
+		Return the current mouse cursor position as a pixel offset from the top-left corner of the display.
+
+	\return
+		Point object describing the mouse cursor position in screen pixels.
+	*/
+	Point	getPosition(void) const		{return Point(d_position.d_x, d_position.d_y);}
+
+
+	/*!
+	\brief
+		return the current constraint area of the mouse cursor.
+
+	\return
+		Rect object describing the active area that the mouse cursor is constrained to.
+	*/
+	Rect	getConstraintArea(void) const		{return d_constraints;}
+
+
+	/*!
+	\brief
+		Return the current mouse cursor position as display resolution independant values.
+
+	\return
+		Point object describing the current mouse cursor position as resolution independant values that
+		range from 0.0f to 1.0f, where 0.0f represents the left-most and top-most positions, and 1.0f
+		represents the right-most and bottom-most positions.
+	*/
+	Point	getDisplayIndependantPosition(void) const;
+
+
+protected:
+	/*************************************************************************
+		New event handlers
+	*************************************************************************/
+	/*!
+	\brief
+		event triggered internally when image of mouse cursor changes
+	*/
+	virtual void	onImageChanged(MouseCursorEventArgs& e);
+
+
+	/*************************************************************************
+		Implementation Functions
+	*************************************************************************/
+	/*!
+	\brief
+		Add mouse cursor specific events
+	*/
+	void	addMouseCursorEvents(void);
+
+
+private:
+	/*************************************************************************
+		Implementation Methods
+	*************************************************************************/
+	/*!
+	\brief
+		Checks the mouse cursor position is within the current 'constrain' Rect and adjusts as required.
+	*/
+	void	constrainPosition(void);
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	const Image*	d_cursorImage;		//!< Image that is currently set as the mouse cursor.
+	Vector3	d_position;					//!< Current location of the cursor
+	bool	d_visible;					//!< true if the cursor will be drawn, else false.
+	Rect	d_constraints;				//!< Specifies the area (in screen pixels) that the mouse can move around in.
+};
+
+} // End of  CEGUI namespace section
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUIMouseCursor_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIRect.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIRect.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIRect.h	(revision 1092)
@@ -0,0 +1,208 @@
+/************************************************************************
+	filename: 	CEGUIRect.h
+	created:	8/3/2004
+	author:		Paul D Turner
+	
+	purpose:	Defines 'Rect' class
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIRect_h_
+#define _CEGUIRect_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIVector.h"
+#include "CEGUISize.h"
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Class encapsulating operations on a Rectangle
+*/
+class CEGUIEXPORT Rect
+{
+public:
+	Rect(void) {}
+
+
+	/*!
+	\brief
+		Constructor for a Rect.
+	*/
+	Rect(float left, float top, float right, float bottom);
+
+
+	/*!
+	\brief
+		Return top-left postion of Rect as a Point
+	*/
+	Point	getPosition(void) const		{return Point(d_left, d_top);}
+
+	/*!
+	\brief
+		return width of Rect area
+	*/
+	float	getWidth(void) const		{return d_right - d_left;}
+
+
+	/*!
+	\brief
+		return height of Rect area
+	*/
+	float	getHeight(void) const		{return d_bottom - d_top;}
+
+
+	/*!
+	\brief
+		return the size of the Rect area
+	*/
+	Size	getSize(void) const			{return Size(getWidth(), getHeight());}
+
+
+	/*!
+	\brief
+		set the position of the Rect (leaves size in tact)
+	*/
+	void	setPosition(const Point& pt);
+
+
+	/*!
+	\brief
+		set the width of the Rect object
+	*/
+	void	setWidth(float width)		{d_right = d_left + width;}
+
+	/*!
+	\brief
+		set the height of the Rect object
+	*/
+	void	setHeight(float height)		{d_bottom = d_top + height;}
+
+
+	/*!
+	\brief
+		set the size of the Rect area
+	*/
+	void	setSize(const Size& sze)	{setWidth(sze.d_width); setHeight(sze.d_height);}
+
+
+	/*!
+	\brief
+		return a Rect that is the intersection of 'this' Rect with the Rect 'rect'
+
+	\note
+		It can be assumed that if d_left == d_right, or d_top == d_bottom, or getWidth() == 0, or getHeight() == 0, then
+		'this' rect was totally outside 'rect'.
+	*/
+	Rect	getIntersection(const Rect& rect) const;
+
+
+	/*!
+	\brief
+		Applies an offset the Rect object
+
+	\param pt
+		Point object containing the offsets to be applied to the Rect.
+
+	\return
+		this Rect after the offset is performed
+	*/
+	Rect&	offset(const Point& pt);
+
+
+	/*!
+	\brief
+		Return true if the given Point falls within this Rect
+
+	\param pt
+		Point object describing the position to test.
+
+	\return
+		true if position \a pt is within this Rect's area, else false
+	*/
+	bool	isPointInRect(const Point& pt) const;
+
+
+	/*!
+	\brief
+		check the size of the Rect object and if it is bigger than \a sz, resize it so it isn't.
+
+	\param sz
+		Size object that describes the maximum dimensions that this Rect should be limited to.
+
+	\return
+		'this' Rect object after the constrain operation
+	*/
+	Rect&	constrainSizeMax(const Size& sz);
+
+
+	/*!
+	\brief
+		check the size of the Rect object and if it is smaller than \a sz, resize it so it isn't.
+
+	\param sz
+		Size object that describes the minimum dimensions that this Rect should be limited to.
+
+	\return
+		'this' Rect object after the constrain operation
+	*/
+	Rect&	constrainSizeMin(const Size& sz);
+
+
+	/*!
+	\brief
+		check the size of the Rect object and if it is bigger than \a max_sz or smaller than \a min_sz, resize it so it isn't.
+
+	\param max_sz
+		Size object that describes the maximum dimensions that this Rect should be limited to.
+
+	\param min_sz
+		Size object that describes the minimum dimensions that this Rect should be limited to.
+
+	\return
+		'this' Rect object after the constrain operation
+	*/
+	Rect&	constrainSize(const Size& max_sz, const Size& min_sz);
+
+
+	/*************************************************************************
+		Operators
+	*************************************************************************/
+	bool	operator==(const Rect& rhs) const
+	{
+		return ((d_left == rhs.d_left) && (d_right == rhs.d_right) && (d_top == rhs.d_top) && (d_bottom == rhs.d_bottom));
+	}
+
+	bool	operator!=(const Rect& rhs) const		{return !operator==(rhs);}
+
+	Rect&	operator=(const Rect& rhs);
+
+
+	/*************************************************************************
+		Data Fields
+	*************************************************************************/
+	float	d_top, d_bottom, d_left, d_right;
+};
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIRect_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIImageset.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIImageset.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIImageset.h	(revision 1092)
@@ -0,0 +1,549 @@
+/************************************************************************
+	filename: 	CEGUIImageset.h
+	created:	21/2/2004
+	author:		Paul D Turner
+	
+	purpose:	Defines the interface for the Imageset class
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIImageset_h_
+#define _CEGUIImageset_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIString.h"
+#include "CEGUIRect.h"
+#include "CEGUIColourRect.h"
+#include "CEGUIImagesetManager.h"
+#include "CEGUIImage.h"
+#include "CEGUIIteratorBase.h"
+
+#include <map>
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+/*!
+\brief
+	Offers functions to define, access, and draw, a set of image components on a single graphical surface or Texture.
+
+	Imageset objects are a means by which a single graphical image (file, Texture, etc), can be split into a number
+	of 'components' which can later be accessed via name.  The components of an Imageset can queried for
+	various details, and sent to the Renderer object for drawing.
+*/
+class CEGUIEXPORT Imageset
+{
+	friend class Imageset_xmlHandler;
+private:
+	typedef	std::map<String, Image>	ImageRegistry;
+
+	/*************************************************************************
+		Friends to allow access to constructors and destructors
+	*************************************************************************/
+	friend Imageset*	ImagesetManager::createImageset(const String& name, Texture* texture);
+	friend Imageset*	ImagesetManager::createImageset(const String& filename, const String& resourceGroup);
+	friend void			ImagesetManager::destroyImageset(const String& name);
+
+
+	/*************************************************************************
+		Construction and Destruction (private, only ImagesetManager can 
+		create and destroy Imageset objects).
+	*************************************************************************/
+	/*!
+	\brief
+		Construct a new Imageset object.  Object will initially have no Images defined
+
+	\param texture
+		Texture object that holds the imagery for the Imageset being created.
+	*/
+	Imageset(const String& name, Texture* texture);
+
+
+	/*!
+	\brief
+		Construct a new Imageset object using data contained in the specified file.
+
+	\param filename
+		String object that holds the name of the Imageset data file that is to be processed.
+
+    \param resourceGroup
+        Resource group identifier to be passed to the resource manager.  NB: This affects the
+        imageset xml file only, the texture loaded may have its own group specified in the XML file.
+
+	\exception	FileIOException		thrown if something goes wrong while processing the file \a filename.
+	*/
+	Imageset(const String& filename, const String& resourceGroup);
+
+
+public:	// For luabind support
+	/*!
+	\brief
+		Destroys Imageset objects
+	*/
+	~Imageset(void);
+
+
+public:
+	typedef	ConstBaseIterator<ImageRegistry>	ImageIterator;	//!< Iterator type for this collection
+
+	/*************************************************************************
+		Public interface
+	*************************************************************************/
+	/*!
+	\brief
+		return Texture object for this Imageset
+
+	\return
+		Texture object that holds the imagery for this Imageset
+	*/
+	Texture*	getTexture(void) const						{return d_texture;}
+
+
+	/*!
+	\brief
+		return String object holding the name of the Imageset
+
+	\return	
+		String object that holds the name of the Imageset.
+	*/
+	const String&	getName(void) const						{return d_name;}
+
+
+	/*!
+	\brief
+		return number of images defined for this Imageset
+
+	\return
+		uint value equal to the number of Image objects defined for the Imageset
+	*/
+	uint      getImageCount(void) const               {return (uint)d_images.size();}
+
+ 
+	/*!
+	\brief
+		return true if an Image with the specified name exists.
+
+	\param name
+		String object holding the name of the Image to look for.
+
+	\return
+		true if an Image object named \a name is defined for this Imageset, else false.
+	*/
+	bool		isImageDefined(const String& name) const	{return d_images.find(name) != d_images.end();}
+
+ 
+	/*!
+	\brief
+		return a copy of the Image object for the named image
+
+	\param name
+		String object holding the name of the Image object to be returned
+
+	\return
+		constant Image object that has the requested name.
+
+	\exception UnknownObjectException	thrown if no Image named \a name is defined for the Imageset
+	*/
+	const Image&	getImage(const String& name) const;
+
+
+	/*!
+	\brief
+		remove the definition for the Image with the specified name.  If no such Image exists, nothing happens.
+
+	\param name
+		String object holding the name of the Image object to be removed from the Imageset,
+	\return
+		Nothing.
+	*/
+	void	undefineImage(const String& name);
+
+
+	/*!
+	\brief
+		Removes the definitions for all Image objects currently defined in the Imageset
+
+	\return
+		Nothing
+	*/
+	void	undefineAllImages(void);
+
+
+	/*!
+	\brief
+		return a Size object describing the dimensions of the named image.
+
+	\param name
+		String object holding the name of the Image.
+
+	\return
+		Size object holding the dimensions of the requested Image.
+
+	\exception UnknownObjectException	thrown if no Image named \a name is defined for the Imageset
+	*/
+	Size	getImageSize(const String& name) const			{return getImage(name).getSize();}
+
+
+	/*!
+	\brief
+		return the width of the named image.
+
+	\param name
+		String object holding the name of the Image.
+
+	\return
+		float value equalling the width of the requested Image.
+
+	\exception UnknownObjectException	thrown if no Image named \a name is defined for the Imageset
+	*/
+	float	getImageWidth(const String& name) const			{return getImage(name).getWidth();}
+
+
+	/*!
+	\brief
+		return the height of the named image.
+
+	\param name
+		String object holding the name of the Image.
+
+	\return
+		float value equalling the height of the requested Image.
+
+	\exception UnknownObjectException	thrown if no Image named \a name is defined for the Imageset
+	*/
+	float	getImageHeight(const String& name) const		{return getImage(name).getHeight();}
+
+
+	/*!
+	\brief
+		return the rendering offsets applied to the named image.
+
+	\param name
+		String object holding the name of the Image.
+
+	\return
+		Point object that holds the rendering offsets for the requested Image.
+
+	\exception UnknownObjectException	thrown if no Image named \a name is defined for the Imageset
+	*/
+	Point	getImageOffset(const String& name) const		{return getImage(name).getOffsets();}
+
+
+	/*!
+	\brief
+		return the x rendering offset for the named image.
+
+	\param name
+		String object holding the name of the Image.
+
+	\return
+		float value equal to the x rendering offset applied when drawing the requested Image.
+
+	\exception UnknownObjectException	thrown if no Image named \a name is defined for the Imageset
+	*/
+	float	getImageOffsetX(const String& name) const		{return getImage(name).getOffsetX();}
+
+
+	/*!
+	\brief
+		return the y rendering offset for the named image.
+
+	\param name
+		String object holding the name of the Image.
+
+	\return
+		float value equal to the y rendering offset applied when drawing the requested Image.
+
+	\exception UnknownObjectException	thrown if no Image named \a name is defined for the Imageset
+	*/
+	float	getImageOffsetY(const String& name) const		{return getImage(name).getOffsetY();}
+
+	
+	/*!
+	\brief
+		Define a new Image for this Imageset
+
+	\param name
+		String object holding the name that will be assigned to the new Image, which must be unique within the Imageset.
+
+	\param position
+		Point object describing the pixel location of the Image on the image file / texture associated with this Imageset.
+
+	\param size
+		Size object describing the dimensions of the Image, in pixels.
+
+	\param render_offset
+		Point object describing the offsets, in pixels, that are to be applied to the Image when it is drawn.
+
+	\return
+		Nothing
+
+	\exception AlreadyExistsException	thrown if an Image named \a name is already defined for this Imageset
+	*/
+	void	defineImage(const String& name, const Point& position, const Size& size, const Point& render_offset)
+	{
+		defineImage(name, Rect(position.d_x, position.d_y, position.d_x + size.d_width, position.d_y + size.d_height), render_offset);
+	}
+
+
+	/*!
+	\brief
+		Define a new Image for this Imageset
+
+	\param name
+		String object holding the name that will be assigned to the new Image, which must be unique within the Imageset.
+
+	\param image_rect
+		Rect object describing the area on the image file / texture associated with this Imageset that will be used for the Image.
+
+	\param render_offset
+		Point object describing the offsets, in pixels, that are to be applied to the Image when it is drawn.
+
+	\return
+		Nothing
+
+	\exception AlreadyExistsException	thrown if an Image named \a name is already defined for this Imageset
+	*/
+	void	defineImage(const String& name, const Rect& image_rect, const Point& render_offset);
+
+
+	/*!
+	\brief
+		Queues an area of the associated Texture the be drawn on the screen.  Low-level routine to be used carefully!
+
+	\param source_rect
+		Rect object describing the area of the image file / texture that is to be queued for drawing
+
+	\param dest_rect
+		Rect describing the area of the screen that will be filled with the imagery from \a source_rect.
+
+	\param z
+		float value specifying 'z' order.  0 is topmost with increasing values moving back into the screen.
+
+	\param clip_rect
+		Rect object describing a 'clipping rectangle' that will be applied when drawing the requested imagery
+
+	\param colours
+		ColourRect object holding the ARGB colours to be applied to the four corners of the rendered imagery.
+	
+	\param quad_split_mode
+		One of the QuadSplitMode values specifying the way quads are split into triangles
+
+	\return
+		Nothing
+	*/
+	void	draw(const Rect& source_rect, const Rect& dest_rect, float z, const Rect& clip_rect,const ColourRect& colours, QuadSplitMode quad_split_mode) const;
+
+
+	/*!
+	\brief
+		Queues an area of the associated Texture the be drawn on the screen.  Low-level routine to be used carefully!
+
+	\param source_rect
+		Rect object describing the area of the image file / texture that is to be queued for drawing
+
+	\param dest_rect
+		Rect describing the area of the screen that will be filled with the imagery from \a source_rect.
+
+	\param z
+		float value specifying 'z' order.  0 is topmost with increasing values moving back into the screen.
+
+	\param clip_rect
+		Rect object describing a 'clipping rectangle' that will be applied when drawing the requested imagery
+
+	\param top_left_colour
+		colour to be applied to the top left corner of the rendered imagery.
+
+	\param top_right_colour
+		colour to be applied to the top right corner of the rendered imagery.
+
+	\param bottom_left_colour
+		colour to be applied to the bottom left corner of the rendered imagery.
+
+	\param bottom_right_colour
+		colour to be applied to the bottom right corner of the rendered imagery.
+	
+	\param quad_split_mode
+		One of the QuadSplitMode values specifying the way quads are split into triangles
+
+	\return
+		Nothing
+	*/
+	void	draw(const Rect& source_rect, const Rect& dest_rect, float z, const Rect& clip_rect, const colour& top_left_colour = 0xFFFFFFFF, const colour& top_right_colour = 0xFFFFFFFF,  const colour& bottom_left_colour = 0xFFFFFFFF, const colour& bottom_right_colour = 0xFFFFFFFF, QuadSplitMode quad_split_mode = TopLeftToBottomRight) const
+	{
+		draw(source_rect, dest_rect, z, clip_rect, ColourRect(top_left_colour, top_right_colour, bottom_left_colour, bottom_right_colour), quad_split_mode);
+	}
+
+
+	/*!
+	\brief
+		Return whether this Imageset is auto-scaled.
+
+	\return
+		true if Imageset is auto-scaled, false if not.
+	*/
+	bool	isAutoScaled(void) const		{return d_autoScale;}
+
+
+	/*!
+	\brief
+		Return the native display size for this Imageset.  This is only relevant if the Imageset is being auto-scaled.
+
+	\return
+		Size object describing the native display size for this Imageset.
+	*/
+	Size	getNativeResolution(void) const	{return Size(d_nativeHorzRes, d_nativeVertRes);}
+
+
+	/*!
+	\brief
+		Enable or disable auto-scaling for this Imageset.
+
+	\param setting
+		true to enable auto-scaling, false to disable auto-scaling.
+
+	\return
+		Nothing.
+	*/
+	void	setAutoScalingEnabled(bool setting);
+
+
+	/*!
+	\brief
+		Set the native resolution for this Imageset
+
+	\param size
+		Size object describing the new native screen resolution for this Imageset.
+
+	\return
+		Nothing
+	*/
+	void	setNativeResolution(const Size& size);
+
+
+	/*!
+	\brief
+		Notify the Imageset of the current (usually new) display resolution.
+
+	\param size
+		Size object describing the display resolution
+
+	\return
+		Nothing
+	*/
+	void	notifyScreenResolution(const Size& size);
+
+
+	/*!
+	\brief
+		Return an Imageset::ImageIterator object that can be used to iterate over the Image objects in the Imageset.
+	*/
+	ImageIterator	getIterator(void) const;
+
+
+protected:
+	/*************************************************************************
+		Implementation Constants
+	*************************************************************************/
+	static const char	ImagesetSchemaName[];			//!< Filename of the XML schema used for validating Imageset files.
+
+
+	/*************************************************************************
+		Implementation Functions
+	*************************************************************************/
+	/*!
+	\brief
+		Initialise the Imageset with information taken from the specified file.
+
+	\param filename
+		String object that holds the name of the Imageset data file that is to be processed.
+
+    \param resourceGroup
+        Resource group identifier to be passed to the resource manager.  NB: This affects the
+        imageset xml file only, the texture loaded may have its own group specified in the XML file.
+
+	\return
+		Nothing
+
+	\exception	FileIOException		thrown if something goes wrong while processing the file \a filename.
+	*/	
+	void	load(const String& filename, const String& resourceGroup);
+
+
+	/*!
+	\brief
+		Unloads all loaded data and leaves the Imageset in a clean (but un-usable) state.  This should be called for cleanup purposes only.
+	*/
+	void	unload(void);
+
+
+	/*!
+	\brief
+		set the Texture object to be used by this Imageset.  Changing textures on an Imageset that is in use is not a good idea!
+
+	\param texture
+		Texture object to be used by the Imageset.  The old texture is NOT disposed of, that is the clients responsibility.
+
+	\return
+		Nothing
+
+	\exception	NullObjectException		thrown if \a texture is NULL
+	*/
+	void	setTexture(Texture* texture);
+
+
+	/*!
+	\brief
+		Sets the scaling factor for all Images that are a part of this Imageset.
+
+	\return
+		Nothing.
+	*/
+	void	updateImageScalingFactors(void);
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	String			d_name;						//!< Holds the name of this imageset.
+	ImageRegistry	d_images;					//!< Registry of Image objects for the images defined for this Imageset
+	Texture*		d_texture;					//!< Texture object that handles imagery for this Imageset
+
+	// auto-scaling fields
+	bool	d_autoScale;			//!< true when auto-scaling is enabled.
+	float	d_horzScaling;			//!< current horizontal scaling factor.
+	float	d_vertScaling;			//!< current vertical scaling factor.
+	float	d_nativeHorzRes;		//!< native horizontal resolution for this Imageset.
+	float	d_nativeVertRes;		//!< native vertical resolution for this Imageset.
+};
+
+} // End of  CEGUI namespace section
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUIImageset_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIEventArgs.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIEventArgs.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIEventArgs.h	(revision 1092)
@@ -0,0 +1,66 @@
+/************************************************************************
+	filename: 	CEGUIEventArgs.h
+	created:	21/2/2004
+	author:		Paul D Turner
+	
+	purpose:	Defines base EventArgs class used with event signalling
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIEventArgs_h_
+#define _CEGUIEventArgs_h_
+
+#include "CEGUIBase.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Base class used as the argument to all subscribers Event object.
+
+	The base EventArgs class does not contain any useful information, it is intended
+	to be specialised for each type of event that can be generated by objects within
+	the system.  The use of this base class allows all event subscribers to have the
+	same function signature.
+
+	The \a handled field is used to signal whether an event was actually handled or not.  While
+	the event system does not look at this value, code at a higher level can use it to determine
+	how far to propagate an event.
+*/
+class CEGUIEXPORT EventArgs
+{
+public:
+	/*************************************************************************
+		Construction
+	*************************************************************************/
+	EventArgs(void) : handled(false) {}
+	virtual ~EventArgs(void) {}
+
+
+	/*************************************************************************
+		Data members
+	*************************************************************************/
+	bool	handled;		//!< handlers should set this to true if they handled the event, or false otherwise.
+};
+
+} // End of  CEGUI namespace section
+
+#endif	// end of guard _CEGUIEventArgs_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIXMLHandler.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIXMLHandler.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIXMLHandler.h	(revision 1092)
@@ -0,0 +1,79 @@
+/************************************************************************
+    filename:   CEGUIXMLHandler.h
+    created:    12/3/2005
+    author:     Paul D Turner
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+ 
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+ 
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+ 
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIXMLHandler_h_
+#define _CEGUIXMLHandler_h_
+
+#include "CEGUIBase.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+    class CEGUIEXPORT XMLHandler
+    {
+    public:
+        /*!
+        \brief
+            XMLHandler base class constructor.
+         */
+        XMLHandler(void);
+
+        /*!
+        \brief
+            XMLHandler base class destructor.
+         */
+        virtual ~XMLHandler(void);
+        
+        /*!
+        \brief
+            Method called to notify the handler at the start of each XML element encountered.
+
+        \param element
+            String object holding the name of the element that is starting.
+
+        \param attributes
+            An XMLAttributes object holding the collection of attributes specified for the element.
+
+        \return
+            Nothing.
+         */
+        virtual void elementStart(const String& element, const XMLAttributes& attributes);
+        
+        /*!
+        \brief
+            Method called to notify the handler at the end of each XML element encountered.
+
+        \param element
+            String object holding the name of the element that is ending.
+
+        \return
+            Nothing.
+         */
+        virtual void elementEnd(const String& element);
+    };
+
+} // End of  CEGUI namespace section
+
+
+#endif  // end of guard _CEGUIXMLHandler_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIXmlHandlerHelper.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIXmlHandlerHelper.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIXmlHandlerHelper.h	(revision 1092)
@@ -0,0 +1,113 @@
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIXmlHandlerHelper_h_
+#define _CEGUIXmlHandlerHelper_h_
+
+
+namespace CEGUI 
+{
+/*!
+\brief
+	Internal helper class to extract attribute values from xerces-c attribute blocks.
+*/
+class XmlHandlerHelper
+{
+public:
+	/*!
+	\brief
+		Return a pointer to a character array that contains the value of the requested attribute from the given attributes collection.
+
+	\param attrs
+		Xerces-c Attributes collection.
+
+	\param attributeName
+		character array holding the name of the attribute to be accessed.
+
+	\return
+		pointer to a character array holding the string value of \a attributeName.  Note that the returned pointer is
+		owned by xerces-c and should be released by using XMLString::release when it is no longer needed.
+	*/
+	static char* getAttributeValueAsChar(const XERCES_CPP_NAMESPACE::Attributes& attrs, const char* const attributeName);
+
+
+	/*!
+	\brief
+		Return a pointer to a XMLCh array that contains the value of the requested attribute from the given attributes collection.
+
+	\param attrs
+		Xerces-c Attributes collection.
+
+	\param attributeName
+		character array holding the name of the attribute to be accessed.
+
+	\return
+		pointer to a XMLCh array holding the string value of \a attributeName.  Note that the returned pointer is
+		owned by xerces-c and should be released by using XMLString::release when it is no longer needed.
+	*/
+	static const XMLCh* getAttributeValueAsXmlChar(const XERCES_CPP_NAMESPACE::Attributes& attrs, const char* const attributeName);
+
+
+	/*!
+	\brief
+		Return an integer equal to the value of the requested attribute from the given attributes collection.
+
+	\param attrs
+		Xerces-c Attributes collection.
+
+	\param attributeName
+		character array holding the name of the attribute to be accessed.
+
+	\return
+		integer value of the requested attribute.
+	*/
+	static int getAttributeValueAsInteger(const XERCES_CPP_NAMESPACE::Attributes& attrs, const char* const attributeName);
+
+
+	/*!
+	\brief
+		Return a String object that contains the value of the requested attribute from the given attributes collection.
+
+	\param attrs
+		Xerces-c Attributes collection.
+
+	\param attributeName
+		character array holding the name of the attribute to be accessed.
+
+	\return
+		String object containing the text of the attribute value requested.
+	*/
+	static String getAttributeValueAsString(const XERCES_CPP_NAMESPACE::Attributes& attrs, const char* const attributeName);
+
+
+	/*!
+	\brief
+		Return a string object containing data transcoded from the given XMLCh array
+
+	\param xmlch_str
+		Pointer to an XMLCh array holding the source string to be transcoded.
+
+	\return
+		String object containing the transcoded text string.
+	*/
+	static String transcodeXmlCharToString(const XMLCh* const xmlch_str);
+};
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUISchemeManager.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUISchemeManager.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUISchemeManager.h	(revision 1092)
@@ -0,0 +1,185 @@
+/************************************************************************
+	filename: 	CEGUISchemeManager.h
+	created:	21/2/2004
+	author:		Paul D Turner
+	
+	purpose:	Defines the interface to the SchemeManager class
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUISchemeManager_h_
+#define _CEGUISchemeManager_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIString.h"
+#include "CEGUISingleton.h"
+#include "CEGUIIteratorBase.h"
+#include <map>
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4275)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	A class that manages the creation of, access to, and destruction of GUI Scheme objects
+*/
+class CEGUIEXPORT SchemeManager : public Singleton<SchemeManager>
+{
+public:
+	/*!
+	\brief
+		Constructor for SchemeManager objects
+	*/
+	SchemeManager(void);
+
+
+	/*!
+	\brief
+		Destructor for SchemeManager objects
+	*/
+	~SchemeManager(void);
+
+
+	/*!
+	\brief
+		Return singleton SchemeManager object
+
+	\return
+		Singleton SchemeManager object
+	*/
+	static	SchemeManager&	getSingleton(void);
+
+
+	/*!
+	\brief
+		Return pointer to singleton SchemeManager object
+
+	\return
+		Pointer to singleton SchemeManager object
+	*/
+	static	SchemeManager*	getSingletonPtr(void);
+
+
+	/*!
+	\brief
+		Loads a scheme
+
+	\param scheme_filename
+		String object that holds the filename of the scheme to be loaded
+
+    \param resourceGroup
+        Resource group identifier to be passed to the resource manager.  NB: This
+        affects loading of the scheme xml file only, scheme resources may specify
+        their own groups.
+
+	\return
+		Pointer to an object representing the loaded Scheme.
+	*/
+	Scheme*	loadScheme(const String& scheme_filename, const String& resourceGroup = "");
+
+
+	/*!
+	\brief
+		Unloads all data referenced in a scheme.  If any object is using some resource which is listed in the scheme, this function
+		will effectively pull the rug out from under those objects.  This should be used with extreme caution, or not at all.
+
+	\param scheme_name
+		String object specifying the name of the Scheme to be unloaded.
+	*/
+	void	unloadScheme(const String& scheme_name);
+
+
+	/*!
+	\brief
+		Returns true if the named Scheme is present in the system (though the resources for the scheme may or may not be loaded)
+
+	\param scheme_name
+		String object specifying the name of the Scheme to check for.
+
+	\return
+		true if the scheme is loaded, false if it is not.
+	*/
+	bool	isSchemePresent(const String& scheme_name) const		{return (d_schemes.find(scheme_name) != d_schemes.end());}
+
+
+	/*!
+	\brief
+		Returns a pointer to the Scheme object with the specified name.
+
+	\param name
+		String object holding the name of the Scheme to be returned.
+
+	\return
+		Pointer to the Scheme named \a name.
+
+	\exception UnknownObjectException	thrown if no Scheme named \a name is present in the system
+	*/
+	Scheme*	getScheme(const String& name) const;
+
+
+	/*!
+	\brief
+		Unload all schemes currently defined within the system.
+
+	\note
+		Calling this method has the potential to be very dangerous; if any of the
+		data that forms part of the scheme is still in use, you can expect
+		fireworks shortly after!
+
+	\return
+		Nothing.
+	*/
+	void	unloadAllSchemes(void);
+
+private:
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	typedef	std::map<String, Scheme*> SchemeRegistry;
+	SchemeRegistry	d_schemes;			//!< Collection that tracks the loaded Schemes.
+
+
+public:
+	/*************************************************************************
+		Iterator stuff
+	*************************************************************************/
+	typedef	ConstBaseIterator<SchemeRegistry>	SchemeIterator;
+
+	/*!
+	\brief
+		Return a SchemeManager::SchemeIterator object to iterate over the available schemes.
+	*/
+	SchemeIterator	getIterator(void) const;
+};
+
+} // End of  CEGUI namespace section
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUISchemeManager_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIPropertySet.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIPropertySet.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIPropertySet.h	(revision 1092)
@@ -0,0 +1,216 @@
+/************************************************************************
+	filename: 	CEGUIPropertySet.h
+	created:	21/2/2004
+	author:		Paul D Turner
+	
+	purpose:	Defines interface for the PropertySet class
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIPropertySet_h_
+#define _CEGUIPropertySet_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIString.h"
+#include "CEGUIIteratorBase.h"
+#include "CEGUIProperty.h"
+#include <map>
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Class that contains a collection of Property objects.
+*/
+class CEGUIEXPORT PropertySet : public PropertyReceiver
+{
+public:
+	/*!
+	\brief
+		Constructs a new PropertySet object
+	*/
+	PropertySet(void) {}
+
+
+	/*!
+	\brief
+		Destructor for PropertySet objects.
+	*/
+	virtual ~PropertySet(void) {}
+
+
+	/*!
+	\brief
+		Adds a new Property to the PropertySet
+
+	\param property
+		Pointer to the Property object to be added to the PropertySet.
+
+	\return
+		Nothing.
+
+	\exception NullObjectException		Thrown if \a property is NULL.
+	\exception AlreadyExistsException	Thrown if a Property with the same name as \a property already exists in the PropertySet
+	*/
+	void	addProperty(Property* property);
+
+
+	/*!
+	\brief
+		Removes a Property from the PropertySet.
+
+	\param name
+		String containing the name of the Property to be removed.  If Property \a name is not in the set, nothing happens.
+
+	\return
+		Nothing.
+	*/
+	void	removeProperty(const String& name);
+
+
+	/*!
+	\brief
+		Removes all Property objects from the PropertySet.
+
+	\return
+		Nothing.
+	*/
+	void	clearProperties(void);
+
+
+	/*!
+	\brief
+		Checks to see if a Property with the given name is in the PropertySet
+
+	\param name
+		String containing the name of the Property to check for.
+
+	\return
+		true if a Property named \a name is in the PropertySet.  false if no Property named \a name is in the PropertySet.
+	*/
+	bool	isPropertyPresent(const String& name) const;
+
+
+	/*!
+	\brief
+		Return the help text for the specified Property.
+
+	\param name
+		String holding the name of the Property who's help text is to be returned.
+
+	\return
+		String object containing the help text for the Property \a name.
+
+	\exception UnknownObjectException	Thrown if no Property named \a name is in the PropertySet.
+	*/
+	const String&	getPropertyHelp(const String& name) const;
+
+
+	/*!
+	\brief
+		Gets the current value of the specified Property.
+
+	\param name
+		String containing the name of the Property who's value is to be returned.
+
+	\return
+		String object containing a textual representation of the requested Property.
+
+	\exception UnknownObjectException	Thrown if no Property named \a name is in the PropertySet.
+	*/
+	String	getProperty(const String& name) const;
+
+
+	/*!
+	\brief
+		Sets the current value of a Property.
+
+	\param name
+		String containing the name of the Property who's value is to be set.
+
+	\param value
+		String containing a textual representation of the new value for the Property
+
+	\return
+		Nothing
+
+	\exception UnknownObjectException	Thrown if no Property named \a name is in the PropertySet.
+	\exception InvalidRequestException	Thrown when the Property was unable to interpret the content of \a value.
+	*/
+	void	setProperty(const String& name, const String& value);
+
+
+	/*!
+	\brief
+		Returns whether a Property is at it's default value.
+
+	\param name
+		String containing the name of the Property who's default state is to be tested.
+
+	\return
+		- true if the property has it's default value.
+		- false if the property has been modified from it's default value.
+	*/
+	bool	isPropertyDefault(const String& name) const;
+
+
+	/*!
+	\brief
+		Returns the default value of a Property as a String.
+
+	\param name
+		String containing the name of the Property who's default string is to be returned.
+
+	\return
+		String object containing a textual representation of the default value for this property.
+	*/
+	String	getPropertyDefault(const String& name) const;
+
+private:
+	typedef std::map<String, Property*>	PropertyRegistry;
+	PropertyRegistry	d_properties;
+
+
+public:
+	/*************************************************************************
+		Iterator stuff
+	*************************************************************************/
+	typedef	ConstBaseIterator<PropertyRegistry>	PropertyIterator;
+
+	/*!
+	\brief
+		Return a PropertySet::PropertyIterator object to iterate over the available Properties.
+	*/
+	PropertyIterator	getIterator(void) const;
+};
+
+} // End of  CEGUI namespace section
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUIPropertySet_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUITexture.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUITexture.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUITexture.h	(revision 1092)
@@ -0,0 +1,139 @@
+/************************************************************************
+	filename: 	CEGUITexture.h
+	created:	21/2/2004
+	author:		Paul D Turner
+	
+	purpose:	Defines abstract interface for texture objects.  Texture
+				objects are created & destroyed by the Renderer.
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUITexture_h_
+#define _CEGUITexture_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIString.h"
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Abstract base class specifying the required interface for Texture objects.
+
+	Texture objects are created via the Renderer.  The actual inner workings of any Texture object
+	are dependant upon the Renderer (and underlying API) in use.  This base class defines the minimal
+	set of functions that is required for the rest of the system to work.  Texture objects are only
+	created through the Renderer object's texture creation functions.
+*/
+class CEGUIEXPORT Texture
+{
+public:
+	/*************************************************************************
+		Abstract Interface
+	*************************************************************************/
+	/*!
+	\brief
+		Returns the current pixel width of the texture
+
+	\return
+		ushort value that is the current width of the texture in pixels
+	*/
+	virtual	ushort	getWidth(void) const = 0;
+
+
+	/*!
+	\brief
+		Returns the current pixel height of the texture
+
+	\return
+		ushort value that is the current height of the texture in pixels
+	*/
+	virtual	ushort	getHeight(void) const = 0;
+
+
+	/*!
+	\brief
+		Loads the specified image file into the texture.  The texture is resized as required to hold the image.
+
+	\param filename
+		The filename of the image file that is to be loaded into the texture
+
+    \param resourceGroup
+        Resource group identifier to be passed to the resource provider when loading the image file.
+
+	\return
+		Nothing.
+	*/
+	virtual void	loadFromFile(const String& filename, const String& resourceGroup) = 0;
+
+
+	/*!
+	\brief
+		Loads (copies) an image in memory into the texture.  The texture is resized as required to hold the image.
+
+	\param buffPtr
+		Pointer to the buffer containing the image data
+
+	\param buffWidth
+		Width of the buffer (in 0xAARRGGBB pixels)
+
+	\param buffHeight
+		Height of the buffer (in 0xAARRGGBB pixels)
+
+	\return
+		Nothing.
+	*/
+	virtual void	loadFromMemory(const void* buffPtr, uint buffWidth, uint buffHeight) = 0;
+
+
+	/*!
+	\brief
+		Return a pointer to the Renderer object that created and owns this Texture
+
+	\return
+		Pointer to the Renderer object that owns the Texture
+	*/
+	Renderer*	getRenderer(void) const			{return d_owner;}
+
+
+protected:
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for Texture base class.  This is never called by client code.
+	*/
+	Texture(Renderer* owner) : d_owner(owner) {}
+
+public:		// luabind compatibility
+	/*!
+	\brief
+		Destructor for Texture base class.  This is never called by client code.
+	*/
+	virtual ~Texture(void) {}
+
+private:
+	Renderer* d_owner;		//<! Renderer object that created and owns this texture
+};
+
+} // End of  CEGUI namespace section
+
+#endif	// end of guard _CEGUITexture_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIInputEvent.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIInputEvent.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIInputEvent.h	(revision 1092)
@@ -0,0 +1,320 @@
+/************************************************************************
+	filename: 	CEGUIInputEvent.h
+	created:	30/5/2004
+	author:		Paul D Turner
+	
+	purpose:	Defines interface to input event classes
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIInputEvent_h_
+#define _CEGUIInputEvent_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIEventArgs.h"
+#include "CEGUIString.h"
+#include "CEGUIVector.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	struct to give scope to scan code enumeration.
+*/
+struct CEGUIEXPORT Key
+{
+	// enumeration of scan codes.  Customised from table taken from Ogre, which took them from DirectInput...
+	enum Scan
+    {
+        Escape          =0x01,
+        One             =0x02,
+        Two             =0x03,
+        Three           =0x04,
+        Four            =0x05,
+        Five            =0x06,
+        Six             =0x07,
+        Seven           =0x08,
+        Eight           =0x09,
+        Nine            =0x0A,
+        Zero            =0x0B,
+        Minus           =0x0C,    /* - on main keyboard */
+        Equals			=0x0D,
+        Backspace		=0x0E,    /* backspace */
+        Tab				=0x0F,
+        Q               =0x10,
+        W               =0x11,
+        E               =0x12,
+        R               =0x13,
+        T               =0x14,
+        Y               =0x15,
+        U               =0x16,
+        I               =0x17,
+        O               =0x18,
+        P               =0x19,
+        LeftBracket     =0x1A,
+        RightBracket    =0x1B,
+        Return			=0x1C,    /* Enter on main keyboard */
+        LeftControl		=0x1D,
+        A               =0x1E,
+        S               =0x1F,
+        D               =0x20,
+        F               =0x21,
+        G               =0x22,
+        H               =0x23,
+        J               =0x24,
+        K               =0x25,
+        L               =0x26,
+        Semicolon       =0x27,
+        Apostrophe		=0x28,
+        Grave           =0x29,    /* accent grave */
+        LeftShift       =0x2A,
+        Backslash       =0x2B,
+        Z               =0x2C,
+        X               =0x2D,
+        C               =0x2E,
+        V               =0x2F,
+        B               =0x30,
+        N               =0x31,
+        M               =0x32,
+        Comma           =0x33,
+        Period          =0x34,    /* . on main keyboard */
+        Slash           =0x35,    /* '/' on main keyboard */
+        RightShift      =0x36,
+        Multiply        =0x37,    /* * on numeric keypad */
+        LeftAlt        =0x38,    /* left Alt */
+        Space           =0x39,
+        Capital         =0x3A,
+        F1              =0x3B,
+        F2              =0x3C,
+        F3              =0x3D,
+        F4              =0x3E,
+        F5              =0x3F,
+        F6              =0x40,
+        F7              =0x41,
+        F8              =0x42,
+        F9              =0x43,
+        F10             =0x44,
+        NumLock         =0x45,
+        ScrollLock      =0x46,    /* Scroll Lock */
+        Numpad7         =0x47,
+        Numpad8         =0x48,
+        Numpad9         =0x49,
+        Subtract        =0x4A,    /* - on numeric keypad */
+        Numpad4         =0x4B,
+        Numpad5         =0x4C,
+        Numpad6         =0x4D,
+        Add				=0x4E,    /* + on numeric keypad */
+        Numpad1         =0x4F,
+        Numpad2         =0x50,
+        Numpad3         =0x51,
+        Numpad0         =0x52,
+        Decimal			=0x53,    /* . on numeric keypad */
+        OEM_102         =0x56,    /* < > | on UK/Germany keyboards */
+        F11             =0x57,
+        F12             =0x58,
+        F13             =0x64,    /*                     (NEC PC98) */
+        F14             =0x65,    /*                     (NEC PC98) */
+        F15             =0x66,    /*                     (NEC PC98) */
+        Kana            =0x70,    /* (Japanese keyboard)            */
+        ABNT_C1         =0x73,    /* / ? on Portugese (Brazilian) keyboards */
+        Convert         =0x79,    /* (Japanese keyboard)            */
+        NoConvert       =0x7B,    /* (Japanese keyboard)            */
+        Yen             =0x7D,    /* (Japanese keyboard)            */
+        ABNT_C2         =0x7E,    /* Numpad . on Portugese (Brazilian) keyboards */
+        NumpadEquals    =0x8D,    /* = on numeric keypad (NEC PC98) */
+        PrevTrack       =0x90,    /* Previous Track (KC_CIRCUMFLEX on Japanese keyboard) */
+        At              =0x91,    /*                     (NEC PC98) */
+        Colon           =0x92,    /*                     (NEC PC98) */
+        Underline       =0x93,    /*                     (NEC PC98) */
+        Kanji           =0x94,    /* (Japanese keyboard)            */
+        Stop            =0x95,    /*                     (NEC PC98) */
+        AX              =0x96,    /*                     (Japan AX) */
+        Unlabeled       =0x97,    /*                        (J3100) */
+        NextTrack       =0x99,    /* Next Track */
+        NumpadEnter     =0x9C,    /* Enter on numeric keypad */
+        RightControl    =0x9D,
+        Mute            =0xA0,    /* Mute */
+        Calculator      =0xA1,    /* Calculator */
+        PlayPause       =0xA2,    /* Play / Pause */
+        MediaStop       =0xA4,    /* Media Stop */
+        VolumeDown      =0xAE,    /* Volume - */
+        VolumeUp        =0xB0,    /* Volume + */
+        WebHome         =0xB2,    /* Web home */
+        NumpadComma     =0xB3,    /* , on numeric keypad (NEC PC98) */
+        Divide          =0xB5,    /* / on numeric keypad */
+        SysRq           =0xB7,
+        RightAlt        =0xB8,    /* right Alt */
+        Pause           =0xC5,    /* Pause */
+        Home            =0xC7,    /* Home on arrow keypad */
+        ArrowUp         =0xC8,    /* UpArrow on arrow keypad */
+        PageUp          =0xC9,    /* PgUp on arrow keypad */
+        ArrowLeft       =0xCB,    /* LeftArrow on arrow keypad */
+        ArrowRight      =0xCD,    /* RightArrow on arrow keypad */
+        End             =0xCF,    /* End on arrow keypad */
+        ArrowDown       =0xD0,    /* DownArrow on arrow keypad */
+        PageDown		=0xD1,    /* PgDn on arrow keypad */
+        Insert          =0xD2,    /* Insert on arrow keypad */
+        Delete          =0xD3,    /* Delete on arrow keypad */
+        LeftWindows     =0xDB,    /* Left Windows key */
+        RightWindow     =0xDC,    /* Right Windows key */
+        RightWindows    =0xDC,    /* Right Windows key - Correct spelling :) */
+        AppMenu         =0xDD,    /* AppMenu key */
+        Power           =0xDE,    /* System Power */
+        Sleep           =0xDF,    /* System Sleep */
+        Wake			=0xE3,    /* System Wake */
+        WebSearch		=0xE5,    /* Web Search */
+        WebFavorites	=0xE6,    /* Web Favorites */
+        WebRefresh		=0xE7,    /* Web Refresh */
+        WebStop			=0xE8,    /* Web Stop */
+        WebForward		=0xE9,    /* Web Forward */
+        WebBack			=0xEA,    /* Web Back */
+        MyComputer		=0xEB,    /* My Computer */
+        Mail			=0xEC,    /* Mail */
+        MediaSelect		=0xED     /* Media Select */
+    };
+
+};
+
+
+/*!
+/brief
+	Enumeration of mouse buttons
+*/
+enum MouseButton
+{
+	LeftButton,
+	RightButton,
+	MiddleButton,
+	X1Button,
+	X2Button,
+	MouseButtonCount,		//<! Dummy value that is == to the maximum number of mouse buttons supported.
+	NoButton				//!< Value set for no mouse button.  NB: This is not 0, do not assume! 
+};
+
+
+/*!
+\brief
+	System key flag values
+*/
+enum SystemKey
+{
+	LeftMouse		= 0x0001,			//!< The left mouse button.
+	RightMouse		= 0x0002,			//!< The right mouse button.
+	Shift			= 0x0004,			//!< Either shift key.
+	Control			= 0x0008,			//!< Either control key.
+	MiddleMouse		= 0x0010,			//!< The middle mouse button.
+	X1Mouse			= 0x0020,			//!< The first 'extra' mouse button
+	X2Mouse			= 0x0040,			//!< The second 'extra' mouse button.
+	Alt				= 0x0080			//!< Either alt key.
+};
+
+
+/*!
+\brief
+	EventArgs based class that is used for objects passed to handlers triggered for events
+	concerning some Window object.
+*/
+class CEGUIEXPORT WindowEventArgs : public EventArgs
+{
+public:
+	WindowEventArgs(Window* wnd) : window(wnd) {}
+
+	Window*	window;		//!< pointer to a Window object of relevance to the event.
+};
+
+
+/*!
+\brief
+	EventArgs based class that is used for objects passed to input event handlers
+	concerning mouse input.
+*/
+class CEGUIEXPORT MouseEventArgs : public WindowEventArgs
+{
+public:
+	MouseEventArgs(Window* wnd) : WindowEventArgs(wnd) {}
+
+	Point		position;		//!< holds current mouse position.
+	Vector2		moveDelta;		//!< holds variation of mouse position from last mouse input
+	MouseButton	button;			//!< one of the MouseButton enumerated values describing the mouse button causing the event (for button inputs only)
+	uint		sysKeys;		//!< current state of the system keys and mouse buttons.
+	float		wheelChange;	//!< Holds the amount the scroll wheel has changed.
+	uint        clickCount;     //!< Holds number of mouse button down events currently counted in a multi-click sequence (for button inputs only).
+};
+
+
+/*!
+\brief
+	EventArgs based class that is used for objects passed to input event handlers
+	concerning mouse cursor events.
+*/
+class CEGUIEXPORT MouseCursorEventArgs : public EventArgs
+{
+public:
+	MouseCursorEventArgs(MouseCursor* cursor) : mouseCursor(cursor) {}
+
+	MouseCursor* mouseCursor;	//!< pointer to a MouseCursor object of relevance to the event.
+	const Image* image;			//!< pointer to an Image object of relevance to the event.
+};
+
+
+/*!
+\brief
+	EventArgs based class that is used for objects passed to input event handlers
+	concerning keyboard input.
+*/
+class CEGUIEXPORT KeyEventArgs : public WindowEventArgs
+{
+public:
+	KeyEventArgs(Window* wnd) : WindowEventArgs(wnd) {}
+
+	utf32		codepoint;		//!< utf32 codepoint for the key (only used for Character inputs).
+	Key::Scan	scancode;		//!< Scan code of key that caused event (only used for key up & down inputs.
+	uint		sysKeys;		//!< current state of the system keys and mouse buttons.
+};
+
+
+/*!
+\brief
+	EventArgs based class that is used for Activated and Deactivated window events
+*/
+class CEGUIEXPORT ActivationEventArgs : public WindowEventArgs
+{
+public:
+	ActivationEventArgs(Window* wnd) : WindowEventArgs(wnd) {}
+
+	Window*	otherWindow;	//!< Pointer to the other window involved in the activation change.
+};
+
+/*!
+\brief
+	EventArgs based class used for certain drag/drop notifications
+*/
+class CEGUIEXPORT DragDropEventArgs : public WindowEventArgs
+{
+public:
+	DragDropEventArgs(Window* wnd) : WindowEventArgs(wnd) {}
+	DragContainer*	dragDropItem; //<! pointer to the DragContainer window being dragged / dropped.
+};
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIInputEvent_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIFontManager.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIFontManager.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIFontManager.h	(revision 1092)
@@ -0,0 +1,252 @@
+/************************************************************************
+	filename: 	CEGUIFontManager.h
+	created:	21/2/2004
+	author:		Paul D Turner
+	
+	purpose:	Defines interface for the FontManager class
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIFontManager_h_
+#define _CEGUIFontManager_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIString.h"
+#include "CEGUISingleton.h"
+#include "CEGUIIteratorBase.h"
+#include <map>
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4275)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Class providing a shared library of Font objects to the system.
+
+	The FontManager is used to create, access, and destroy Font objects.  The idea is that the
+	FontManager will function as a central repository for Font objects used within the GUI system,
+	and that those Font objects can be accessed, via a unique name, by any interested party within
+	the system.
+*/
+class CEGUIEXPORT FontManager : public Singleton<FontManager>
+{
+public:
+	/*!
+	\brief
+		Constructor for FontManager objects
+	*/
+	FontManager(void);
+
+
+	/*!
+	\brief
+		Destructor for FontManager objects
+	*/
+	~FontManager(void);
+
+
+	/*!
+	\brief
+		Return singleton FontManager object
+
+	\return
+		Singleton FontManager object
+	*/
+	static	FontManager&	getSingleton(void);
+
+
+	/*!
+	\brief
+		Return pointer to singleton FontManager object
+
+	\return
+		Pointer to singleton FontManager object
+	*/
+	static	FontManager*	getSingletonPtr(void);
+
+
+	/*!
+	\brief
+		Creates a new font from a font definition file, and returns a pointer to the new Font object.
+
+	\param filename
+		String object containing the filename of a 'font definition file' what will be used to create the new font
+
+    \param resourceGroup
+        Resource group identifier to pass to the resource provider when loading the font definition file.
+
+	\return
+		Pointer the the newly created Font object
+
+	\exception	FileIOException				thrown if there was some problem accessing or parsing the file \a filename
+	\exception	InvalidRequestException		thrown if an invalid filename was provided.
+	\exception	AlreadyExistsException		thrown if a Font already exists with the name specified, or if a font Imageset clashes with one already defined in the system.
+	\exception	GenericException			thrown if something goes wrong while accessing a true-type font referenced in file \a filename.
+	\exception	RendererException			thrown if the Renderer can't support a texture large enough to hold the requested glyph imagery.
+	\exception	MemoryException				thrown if allocation of imagery construction buffer fails.
+	*/
+	Font*	createFont(const String& filename, const String& resourceGroup = "");
+
+
+	/*!
+	\brief
+		Creates a new Font based on a true-type font, and returns a pointer to the new Font object.
+
+	\param name
+		String object containing a unique name for the new font.
+
+	\param fontname
+		String object containing the name and path of the true-type font to access.
+
+	\param size
+		Specifies the glyph size (point-size) for the new font.
+
+	\param flags
+		Some combination of FontFlag values to be used for the creation of this font.
+
+    \param resourceGroup
+        Resource group identifier to be passed to the resource provider when loading the font definition file.
+
+	\return
+		Pointer to the newly created Font object.
+
+	\exception	AlreadyExistsException		thrown if a Font already exists with the name specified, or if a font Imageset clashes with one already defined in the system.
+	\exception	GenericException			thrown if something goes wrong while accessing a true-type font referenced in file \a fontname.
+	\exception	RendererException			thrown if the Renderer can't support a texture large enough to hold the requested glyph imagery.
+	\exception	MemoryException				thrown if allocation of imagery construction buffer fails.
+	*/
+	Font*	createFont(const String& name, const String& fontname, uint size, uint flags, const String& resourceGroup = "");
+
+
+	/*!
+	\brief
+		Destroy's the font with the given name
+
+	\param name
+		String object containing the name of the font to be destroyed.  If the specified font does not exist, nothing happens.
+
+	\return
+		Nothing
+	*/
+	void	destroyFont(const String& name);
+
+
+	/*!
+	\brief
+		Destroys the given Font object
+
+	\param font
+		Pointer to the Font to be destroyed.  If no such Font exists, nothing happens.
+
+	\return
+		Nothing.
+	*/
+	void	destroyFont(Font* font);
+
+
+	/*!
+	\brief
+		Destroys all Font objects registered in the system
+
+	\return
+		Nothing
+	*/
+	void	destroyAllFonts(void);
+
+
+	/*!
+	\brief
+		Checks the existence of a given font.
+
+	\param name
+		String object holding the name of the Font object to look for.
+
+	\return
+		true if a Font object named \a name exists in the system, false if no such font exists.
+	*/
+	bool	isFontPresent(const String& name) const;
+
+
+	/*!
+	\brief
+		Returns a pointer to the font object with the specified name
+
+	\param name
+		String object containing the name of the Font object to be returned
+
+	\return
+		Pointer to the requested Font object
+
+	\exception UnknownObjectException	Thrown if no font with the given name exists.
+	*/
+	Font*	getFont(const String& name) const;
+
+
+	/*!
+	\brief
+		Notify the FontManager of the current (usually new) display resolution.
+
+	\param size
+		Size object describing the display resolution
+
+	\return
+		Nothing
+	*/
+	void	notifyScreenResolution(const Size& size);
+
+
+private:
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	typedef	std::map<String, Font*>		FontRegistry;
+	FontRegistry		d_fonts;
+
+	struct FontManagerImplData;
+	FontManagerImplData*	d_implData;
+
+
+public:
+	/*************************************************************************
+		Iterator stuff
+	*************************************************************************/
+	typedef	ConstBaseIterator<FontRegistry>	FontIterator;
+
+	/*!
+	\brief
+		Return a FontManager::FontIterator object to iterate over the available Font objects.
+	*/
+	FontIterator	getIterator(void) const;
+};
+
+} // End of  CEGUI namespace section
+
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUIFontManager_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIVector.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIVector.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIVector.h	(revision 1092)
@@ -0,0 +1,129 @@
+/************************************************************************
+	filename: 	CEGUIVector.h
+	created:	14/3/2004
+	author:		Paul D Turner
+	
+	purpose:	Defines interfaces for Vector classes
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIVector_h_
+#define _CEGUIVector_h_
+
+#include "CEGUIBase.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+/*!
+\brief
+	Class used as a two dimensional vector (aka a Point)
+*/
+class CEGUIEXPORT Vector2
+{
+public:
+	Vector2(void) {}
+	Vector2(float x, float y) : d_x(x), d_y(y) {}
+
+	Vector2& operator*=(const Vector2& vec)
+	{
+		d_x *= vec.d_x;
+		d_y *= vec.d_y;
+
+		return *this;
+	}
+
+	Vector2& operator/=(const Vector2& vec)
+	{
+		d_x /= vec.d_x;
+		d_y /= vec.d_y;
+
+		return *this;
+	}
+
+	Vector2& operator+=(const Vector2& vec)
+	{
+		d_x += vec.d_x;
+		d_y += vec.d_y;
+
+		return *this;
+	}
+
+	Vector2& operator-=(const Vector2& vec)
+	{
+		d_x -= vec.d_x;
+		d_y -= vec.d_y;
+
+		return *this;
+	}
+
+	Vector2	operator+(const Vector2& vec) const
+	{
+		return Vector2(d_x + vec.d_x, d_y + vec.d_y);
+	}
+
+	Vector2	operator-(const Vector2& vec) const
+	{
+		return Vector2(d_x - vec.d_x, d_y - vec.d_y);
+	}
+
+	Vector2	operator*(const Vector2& vec) const
+	{
+		return Vector2(d_x * vec.d_x, d_y * vec.d_y);
+	}
+
+	bool	operator==(const Vector2& vec) const
+	{
+		return ((d_x == vec.d_x) && (d_y == vec.d_y));
+	}
+
+	bool	operator!=(const Vector2& vec) const
+	{
+		return !(operator==(vec));
+	}
+
+	float d_x, d_y;
+};
+
+/*!
+\brief
+	Point class
+*/
+typedef	Vector2		Point;
+
+
+/*!
+\brief
+	Class used as a three dimensional vector
+*/
+class CEGUIEXPORT Vector3
+{
+public:
+	Vector3(void) {}
+	Vector3(float x, float y, float z) : d_x(x), d_y(y), d_z(z) {}
+
+	float	d_x, d_y, d_z;
+};
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIVector_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIWindowManager.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIWindowManager.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIWindowManager.h	(revision 1092)
@@ -0,0 +1,307 @@
+/************************************************************************
+	filename: 	CEGUIWindowManager.h
+	created:	21/2/2004
+	author:		Paul D Turner
+	
+	purpose:	Defines the interface for the WindowManager object
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIWindowManager_h_
+#define _CEGUIWindowManager_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIString.h"
+#include "CEGUISingleton.h"
+#include "CEGUILogger.h"
+#include "CEGUIIteratorBase.h"
+#include <map>
+#include <vector>
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4275)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	The WindowManager class describes an object that manages creation and lifetime of Window objects.
+
+	The WindowManager is the means by which Window objects are created and destroyed.  For each sub-class
+	of Window that is to be created, there must exist a WindowFactory object which is registered with the
+	WindowFactoryManager.  Additionally, the WindowManager tracks every Window object created, and can be
+	used to access those Window objects by name.
+*/
+class CEGUIEXPORT WindowManager : public Singleton <WindowManager>
+{
+public:
+	/*!
+	\brief
+		Function type that is used as a callback when loading layouts from XML; the function is called
+		for each Property element encountered.
+
+	\param window
+		Window object that the property is to be applied to.
+
+	\param propname
+		String holding the name of the property that is being set.
+
+	\param propvalue
+		String holding the new value that will be applied to the property specified by /a propname.
+
+	\param userdata
+		Some client code supplied data.
+
+	\return
+		- true if the property should be set.
+		- false if the property should not be set,
+	*/
+	typedef bool PropertyCallback(Window* window, String& propname, String& propvalue, void* userdata);
+	
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructs a new WindowManager object.
+
+		NB: Client code should not create WindowManager objects - they are of limited use to you!  The
+		intended pattern of access is to get a pointer to the GUI system's WindowManager via the System
+		object, and use that.
+	*/
+	WindowManager(void) { Logger::getSingleton().logEvent((utf8*)"CEGUI::WindowManager singleton created"); }
+
+
+	/*!
+	\brief
+		Destructor for WindowManager objects
+
+		This will properly destry all remaining Window objects.  Note that WindowFactory objects will not
+		be destroyed (since they are owned by whoever created them).
+	*/
+	~WindowManager(void);
+
+
+	/*!
+	\brief
+		Return singleton WindowManager object
+
+	\return
+		Singleton WindowManager object
+	*/
+	static	WindowManager&	getSingleton(void);
+
+
+	/*!
+	\brief
+		Return pointer to singleton WindowManager object
+
+	\return
+		Pointer to singleton WindowManager object
+	*/
+	static	WindowManager*	getSingletonPtr(void);
+
+
+	/*************************************************************************
+		Window Related Methods
+	*************************************************************************/
+	/*!
+	\brief
+		Creates a new Window object of the specified type, and gives it the specified unique name.
+
+	\param type
+		String that describes the type of Window to be created.  A valid WindowFactory for the specified type must be registered.
+
+	\param name
+		String that holds a unique name that is to be given to the new window.
+
+	\return
+		Pointer to the newly created Window object.
+
+	\exception	AlreadyExistsException		A Window object with the name \a name already exists.
+	\exception	UnknownObjectException		No WindowFactory is registered for \a type Window objects.
+	\exception	GenericException			Some other error occurred (Exception message has details).
+	*/
+	Window*	createWindow(const String& type, const String& name);
+
+
+	/*!
+	\brief
+		Destroy the specified Window object.
+
+	\param window
+		Pointer to the Window object to be destroyed.  If the \a window is null, or is not recognised, nothing happens.
+
+	\return
+		Nothing
+
+	\exception	InvalidRequestException		Can be thrown if the WindowFactory for \a window's object type was removed.
+	*/
+	void	destroyWindow(Window* window);
+
+
+	/*!
+	\brief
+		Destroy the specified Window object.
+
+	\param
+		window	String containing the name of the Window object to be destroyed.  If \a window is not recognised, nothing happens.
+
+	\return
+		Nothing.
+
+	\exception	InvalidRequestException		Can be thrown if the WindowFactory for \a window's object type was removed.
+	*/
+	void	destroyWindow(const String& window);
+
+
+	/*!
+	\brief
+		Return a pointer to the specified Window object.
+
+	\param name
+		String holding the name of the Window object to be returned.
+
+	\return
+		Pointer to the Window object with the name \a name.
+
+	\exception UnknownObjectException	No Window object with a name matching \a name was found.
+	*/
+	Window*	getWindow(const String& name) const;
+
+
+	/*!
+	\brief
+		Examines the list of Window objects to see if one exists with the given name
+
+	\param name
+		String holding the name of the Window object to look for.
+
+	\return
+		true if a Window object was found with a name matching \a name.  false if no matching Window object was found.
+	*/
+	bool	isWindowPresent(const String& name) const;
+
+
+	/*!
+	\brief
+		Destroys all Window objects within the system
+
+	\return
+		Nothing.
+
+	\exception	InvalidRequestException		Thrown if the WindowFactory for any Window object type has been removed.
+	*/
+	void	destroyAllWindows(void);
+
+
+	/*!
+	\brief
+		Creates a set of windows (a Gui layout) from the information in the specified XML file.	
+
+	\param filename
+		String object holding the filename of the XML file to be processed.
+
+	\param name_prefix
+		String object holding the prefix that is to be used when creating the windows in the layout file, this
+		function allows a layout to be loaded multiple times without having name clashes.
+
+    \param resourceGroup
+        Resource group identifier to be passed to the resource provider when loading the layout file.
+
+	\param callback
+		PropertyCallback function to be called for each Property element loaded from the layout.  This is
+		called prior to the property value being applied to the window enabling client code manipulation of
+		properties.
+
+	\param userdata
+		Client code data pointer passed to the PropertyCallback function.
+
+	\return
+		Pointer to the root Window object defined in the layout.
+
+	\exception FileIOException			thrown if something goes wrong while processing the file \a filename.
+	\exception InvalidRequestException	thrown if \a filename appears to be invalid.
+	*/
+	Window*	loadWindowLayout(const String& filename, const String& name_prefix = "", const String& resourceGroup = "", PropertyCallback* callback = NULL, void* userdata = NULL);
+
+    /*!
+    \brief
+        Return whether the window dead pool is empty.
+
+    \return
+        - true if there are no windows in the dead pool.
+        - false if the dead pool contains >=1 window awaiting destruction.
+    */
+    bool isDeadPoolEmpty(void) const;
+
+    /*!
+    \brief
+        Permanently destroys any windows placed in the dead pool.
+
+    \note
+        It is probably not a good idea to call this from a Window based event handler
+        if the specific window has been or is being destroyed.
+
+    \return
+        Nothing.
+    */
+    void cleanDeadPool(void);
+
+private:
+	/*************************************************************************
+		Implementation Constants
+	*************************************************************************/
+	static const char	GUILayoutSchemaName[];			//!< Filename of the XML schema used for validating GUILayout files.
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	typedef std::map<String, Window*>			WindowRegistry;				//!< Type used to implement registry of Window objects
+    typedef std::vector<Window*>    WindowVector;   //!< Type to use for a collection of Window pointers.
+
+	WindowRegistry			d_windowRegistry;			//!< The container that forms the Window registry
+    WindowVector    d_deathrow;     //!< Collection of 'destroyed' windows.
+
+public:
+	/*************************************************************************
+		Iterator stuff
+	*************************************************************************/
+	typedef	ConstBaseIterator<WindowRegistry>	WindowIterator;
+
+	/*!
+	\brief
+		Return a WindowManager::WindowIterator object to iterate over the currently defined Windows.
+	*/
+	WindowIterator	getIterator(void) const;
+};
+
+} // End of  CEGUI namespace section
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUIWindowManager_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUITextUtils.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUITextUtils.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUITextUtils.h	(revision 1092)
@@ -0,0 +1,164 @@
+/************************************************************************
+	filename: 	CEGUITextUtils.h
+	created:	30/5/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to a static class containing some utility
+				functions for text / string operations
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUITextUtils_h_
+#define _CEGUITextUtils_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIString.h"
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Text utility support class.  This class is all static members.  You do not create instances of this class.
+*/
+class CEGUIEXPORT TextUtils
+{
+public:
+	/*************************************************************************
+		Constants
+	*************************************************************************/
+	static const String	DefaultWhitespace;		//!< The default set of whitespace
+	static const String	DefaultAlphanumerical;	//!< default set of alphanumericals.
+	static const String	DefaultWrapDelimiters;	//!< The default set of word-wrap delimiters
+
+
+	/*************************************************************************
+		Methods
+	*************************************************************************/
+	/*!
+	\brief
+		return a String containing the the next word in a String.
+
+		This method returns a String object containing the the word, starting at index \a start_idx, of String \a str
+		as delimited by the code points specified in string \a delimiters (or the ends of the input string).
+
+	\param str
+		String object containing the input data.
+
+	\param start_idx
+		index into \a str where the search for the next word is to begin.  Defaults to start of \a str.
+
+	\param delimiters
+		String object containing the set of delimiter code points to be used when determining the start and end
+		points of a word in string \a str.  Defaults to whitespace.
+
+	\return
+		String object containing the next \a delimiters delimited word from \a str, starting at index \a start_idx.
+	*/
+	static	String	getNextWord(const String& str, String::size_type start_idx = 0, const String& delimiters = DefaultWhitespace);
+
+
+	/*!
+	\brief
+		Return the index of the first character of the word at \a idx.
+
+	/note
+		This currently uses DefaultWhitespace and DefaultAlphanumerical to determine groupings for what constitutes a 'word'.
+
+	\param str
+		String containing text.
+
+	\param idx
+		Index into \a str where search for start of word is to begin.
+
+	\return
+		Index into \a str which marks the begining of the word at index \a idx.
+	*/
+	static	String::size_type	getWordStartIdx(const String& str, String::size_type idx);
+
+
+	/*!
+	\brief
+		Return the index of the first character of the word after the word at \a idx.
+
+	/note
+		This currently uses DefaultWhitespace and DefaultAlphanumerical to determine groupings for what constitutes a 'word'.
+
+	\param str
+		String containing text.
+
+	\param idx
+		Index into \a str where search is to begin.
+
+	\return
+		Index into \a str which marks the begining of the word at after the word at index \a idx.
+		If \a idx is within the last word, then the return is the last index in \a str.
+	*/
+	static	String::size_type	getNextWordStartIdx(const String& str, String::size_type idx);
+
+
+	/*!
+	\brief
+		Trim all characters from the set specified in \a chars from the begining of \a str.
+
+	\param str
+		String object to be trimmed.
+
+	\param chars
+		String object containing the set of code points to be trimmed.
+	*/
+	static	void	trimLeadingChars(String& str, const String& chars);
+
+
+	/*!
+	\brief
+		Trim all characters from the set specified in \a chars from the end of \a str.
+
+	\param str
+		String object to be trimmed.
+
+	\param chars
+		String object containing the set of code points to be trimmed.
+	*/
+	static	void	trimTrailingChars(String& str, const String& chars);
+
+
+private:
+	/*************************************************************************
+		Data
+	*************************************************************************/
+	static	String		d_delimiters;			//!< Current set of delimiters.
+	static	String		d_whitespace;			//!< Current set of whitespace.
+
+
+	/*************************************************************************
+		Construction / Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor and Destructor are private.  This class has all static members.
+	*/
+	TextUtils(void);
+	~TextUtils(void);
+};
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUITextUtils_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIRenderableImage.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIRenderableImage.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIRenderableImage.h	(revision 1092)
@@ -0,0 +1,222 @@
+/************************************************************************
+	filename: 	CEGUIRenderableImage.h
+	created:	17/4/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to renderable image UI entity
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIRenderableImage_h_
+#define _CEGUIRenderableImage_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIRenderableElement.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	A higher order GUI entity that represents a renderable image with formatting options.
+
+	This class is intended to be used where a (usually top-level) GUI element needs to draw an image that requires some additional
+	formatting.  It is possible to specify the Image that is to be rendered, as well as the horizontal and vertical formatting
+	required.
+*/
+class CEGUIEXPORT RenderableImage : public RenderableElement
+{
+public:
+	/*************************************************************************
+		Formatting Enumerations
+	*************************************************************************/
+	/*!
+	\brief
+		Enumeration of horizontal formatting options for a RenderableImage
+	*/
+	enum HorzFormatting
+	{
+		LeftAligned,	//!< Image will be rendered at it's natural size and with it's left edge aligned with the left edge of the RenderableImage rect.
+		RightAligned,	//!< Image will be rendered at it's natural size and with it's right edge aligned with the right edge of the RenderableImage rect.
+		HorzCentred,	//!< Image will be rendered at it's natural size and horizontally centred within the RenderableImage rect.
+		HorzStretched,	//!< Image will be horizontally stretched to cover the entire width of the RenderableImage rect.
+		HorzTiled		//!< Image will be tiled horizontally across the width of the RenderableImage rect.  The rightmost tile will be clipped to remain within the rect.
+	};
+
+
+	/*!
+	\brief
+		Enumeration of vertical formatting options for a RenderableImage
+	*/
+	enum VertFormatting
+	{
+		TopAligned,		//!< Image will be rendered at it's natural size and with it's top edge aligned with the top edge of the RenderableImage rect.
+		BottomAligned,	//!< Image will be rendered at it's natural size and with it's bottom edge aligned with the bottom edge of the RenderableImage rect.
+		VertCentred,	//!< Image will be rendered at it's natural size and vertically centred within the RenderableImage rect.
+		VertStretched,	//!< Image will be vertically stretched to cover the entire height of the RenderableImage rect.
+		VertTiled		//!< Image will be tiled vertically down the height of the RenderableImage rect.  The bottommost tile will be clipped to remain within the rect.
+	};
+
+
+	/*************************************************************************
+		Construction / Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Default constructor for RenderableImage objects.
+	*/
+	RenderableImage(void);
+
+
+	/*!
+	\brief
+		Destructor for RenderableImage objects
+	*/
+	virtual ~RenderableImage(void);
+
+
+	/*************************************************************************
+		Public Interface
+	*************************************************************************/
+	/*!
+	\brief
+		Set the Image object to be drawn by this RenderableImage.
+
+	\param image
+		Pointer to the Image object to be rendered.  Can be NULL to specify no image is to be rendered.
+	
+	\return
+		Nothing.
+	*/
+	void	setImage(const Image* image)		{d_image = image;}
+
+
+	/*!
+	\brief
+		Set the required horizontal formatting
+
+	\param formatting
+		One of the HorzFormatting values specifying the formatting required.
+
+	\return
+		Nothing
+	*/
+	void	setHorzFormatting(HorzFormatting formatting)			{d_horzFormat = formatting;}
+		
+
+	/*!
+	\brief
+		Set the required vertical formatting
+
+	\param formatting
+		One of the VertFormatting values specifying the formatting required.
+
+	\return
+		Nothing
+	*/
+	void	setVertFormatting(VertFormatting formatting)			{d_vertFormat = formatting;}
+	
+	
+	/*!
+	\brief
+		Set the required quad split mode
+
+	\param split_mode
+		One of the QuadSplitMode values specifying the way quads are split into triangles.
+
+	\return
+		Nothing
+	*/
+	void	setQuadSplitMode(QuadSplitMode split_mode)				{d_quadSplitMode = split_mode;}
+
+
+	/*!
+	\brief
+		Return the Image object currently set to be rendered.
+
+	\return
+		Pointer to the current Image object set for this RenderableImage.  May return NULL if no image is set.
+	*/
+	const Image*	getImage(void) const		{return d_image;}
+
+
+	/*!
+	\brief
+		Return current horizontal formatting setting.
+
+	\return
+		One of the HorzFormatting values specifying the formatting set.
+	*/
+	HorzFormatting	getHorzFormatting(void) const				{return d_horzFormat;}
+
+
+	/*!
+	\brief
+		Return current vertical formatting setting.
+
+	\return
+		One of the VertFormatting values specifying the formatting set.
+	*/
+	VertFormatting	getVertFormatting(void) const				{return d_vertFormat;}
+	
+	
+	/*!
+	\brief
+		Return current quad split mode setting.
+
+	\return
+		One of the QuadSplitMode values specifying the way quads are split into triangles.
+	*/
+	QuadSplitMode	getQuadSplitMode(void) const				{return d_quadSplitMode;}
+
+
+protected:
+	/*************************************************************************
+		Implementation functions
+	*************************************************************************/
+	/*!
+	\brief
+		Renders the imagery for a RenderableImage element.
+
+	\param position
+		Vector3 object describing the final rendering position for the object.
+
+	\param clip_rect
+		Rect object describing the clipping area for the rendering.  No rendering will be performed outside this area.
+
+	\return
+		Nothing.
+	*/
+	void draw_impl(const Vector3& position, const Rect& clip_rect) const;
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	HorzFormatting	d_horzFormat;		//!< Currently set horizontal formatting option.
+	VertFormatting	d_vertFormat;		//!< Currently set vertical formatting option.
+	QuadSplitMode	d_quadSplitMode;	//!< Currently set quad split mode
+	const Image*	d_image;			//!< Pointer to the actual Image to be displayed.
+};
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIRenderableImage_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIRenderer.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIRenderer.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIRenderer.h	(revision 1092)
@@ -0,0 +1,389 @@
+/************************************************************************
+	filename: 	CEGUIRenderer.h
+	created:	20/2/2004
+	author:		Paul D Turner
+	
+	purpose:	Defines interface for abstract Renderer class
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIRenderer_h_
+#define _CEGUIRenderer_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIString.h"
+#include "CEGUIRect.h"
+#include "CEGUIColourRect.h"
+#include "CEGUIEventSet.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Enumerated type that contains the valid flags that can be to use when rendering image
+*/
+enum OrientationFlags {
+	FlipHorizontal		= 1,	//!< Horizontal flip the image
+	FlipVertical		= 2,	//!< Vertical flip the image
+	RotateRightAngle	= 4		//!< Rotate the image anticlockwise 90 degree
+};
+
+/*!
+\brief
+	Enumerated type that contains the valid diagonal-mode that specify how a quad is split into triangles when rendered with fx. a 3D API
+*/
+enum QuadSplitMode
+{
+	TopLeftToBottomRight,	//!< Diagonal goes from top-left to bottom-right
+	BottomLeftToTopRight	//!< Diagonal goes from bottom-left to top-right
+};
+
+
+/*!
+\brief
+	Abstract class defining the interface for Renderer objects.
+
+	Objects derived from Renderer are the means by which the GUI system interfaces
+	with specific rendering technologies.  To use a rendering system or API to draw
+	CEGUI imagery requires that an appropriate Renderer object be available.
+*/
+class CEGUIEXPORT Renderer : public EventSet
+{
+public:
+	static const String EventNamespace;				//!< Namespace for global events
+
+	/*************************************************************************
+		Event name constants
+	*************************************************************************/
+	/*!
+		event that fires when the underlying display size had changed.
+		
+		It is important that all Renderer implementers fire this properly as the
+		system itself subscribes to this event.
+	*/
+	static const String EventDisplaySizeChanged;
+
+
+	/*************************************************************************
+		Abstract interface methods
+	*************************************************************************/
+	/*!
+	\brief
+		Add a quad to the rendering queue.  All clipping and other adjustments should have been made prior to calling this.
+
+	\param dest_rect
+		Rect object describing the destination area (values are in pixels)
+
+	\param z
+		float value specifying the z co-ordinate / z order of the quad
+
+	\param tex
+		pointer to the Texture object that holds the imagery to be rendered
+
+	\param texture_rect
+		Rect object holding the area of \a tex that is to be rendered (values are in texture co-ordinates).
+
+	\param colours
+		ColourRect object describing the colour values that are to be applied when rendering.
+	
+	\param quad_split_mode
+		One of the QuadSplitMode values specifying the way quads are split into triangles
+
+	\return
+		Nothing
+	*/
+	virtual	void	addQuad(const Rect& dest_rect, float z, const Texture* tex, const Rect& texture_rect, const ColourRect& colours, QuadSplitMode quad_split_mode) = 0;
+
+
+	/*!
+	\brief
+		Perform final rendering for all quads that have been queued for rendering
+
+		The contents of the rendering queue is retained and can be rendered again as required.  If the contents is not required call clearRenderList().
+
+	\return
+		Nothing
+	*/
+	virtual	void	doRender(void) = 0;
+
+
+	/*!
+	\brief
+		Clears all queued quads from the render queue.
+	
+	\return
+		Nothing
+	*/
+	virtual	void	clearRenderList(void) = 0;
+
+
+	/*!
+	\brief
+		Enable or disable the queueing of quads from this point on.
+
+		This only affects queueing.  If queueing is turned off, any calls to addQuad will cause the quad to be rendered directly.  Note that
+		disabling queueing will not cause currently queued quads to be rendered, nor is the queue cleared - at any time the queue can still
+		be drawn by calling doRender, and the list can be cleared by calling clearRenderList.  Re-enabling the queue causes subsequent quads
+		to be added as if queueing had never been disabled.
+
+	\param setting
+		true to enable queueing, or false to disable queueing (see notes above).
+
+	\return
+		Nothing
+	*/
+	virtual void	setQueueingEnabled(bool setting) = 0;
+
+
+	/*!
+	\brief
+		Creates a 'null' Texture object.
+
+	\return
+		a newly created Texture object.  The returned Texture object has no size or imagery associated with it, and is
+		generally of little or no use.
+	*/
+	virtual	Texture*	createTexture(void) = 0;
+
+
+	/*!
+	\brief
+		Create a Texture object using the given image file.
+
+	\param filename
+		String object that specifies the path and filename of the image file to use when creating the texture.
+
+    \param resourceGroup
+        Resource group identifier to be passed to the resource provider when loading the texture file.
+
+	\return
+		a newly created Texture object.  The initial contents of the texture memory is the requested image file.
+
+	\note
+		Textures are always created with a size that is a power of 2.  If the file you specify is of a size that is not
+		a power of two, the final size will be rounded up.  Additionally, textures are always square, so the ultimate
+		size is governed by the larger of the width and height of the specified file.  You can check the ultimate sizes
+		by querying the texture after creation.
+	*/
+	virtual	Texture*	createTexture(const String& filename, const String& resourceGroup) = 0;
+
+
+	/*!
+	\brief
+		Create a Texture object with the given pixel dimensions as specified by \a size.  NB: Textures are always square.
+
+	\param size
+		float value that specifies the size to use for the width and height when creating the new texture.
+
+	\return
+		a newly created Texture object.  The initial contents of the texture memory is undefined / random.
+
+	\note
+		Textures are always created with a size that is a power of 2.  If you specify a size that is not a power of two, the final
+		size will be rounded up.  So if you specify a size of 1024, the texture will be (1024 x 1024), however, if you specify a size
+		of 1025, the texture will be (2048 x 2048).  You can check the ultimate size by querying the texture after creation.
+	*/	
+	virtual	Texture*	createTexture(float size) = 0;
+
+
+	/*!
+	\brief
+		Destroy the given Texture object.
+
+	\param texture
+		pointer to the Texture object to be destroyed
+
+	\return
+		Nothing
+	*/
+	virtual	void		destroyTexture(Texture* texture) = 0;
+
+	
+	/*!
+	\brief
+		Destroy all Texture objects.
+
+	\return
+		Nothing
+	*/
+	virtual void		destroyAllTextures(void) = 0;
+
+
+	/*!
+	\brief
+		Return whether queueing is enabled.
+
+	\return
+		true if queueing is enabled, false if queueing is disabled.
+	*/
+	virtual bool	isQueueingEnabled(void) const = 0;
+
+
+	/*!
+	\brief
+		Return the current width of the display in pixels
+
+	\return
+		float value equal to the current width of the display in pixels.
+	*/
+	virtual float	getWidth(void) const	= 0;
+
+
+	/*!
+	\brief
+		Return the current height of the display in pixels
+
+	\return
+		float value equal to the current height of the display in pixels.
+	*/
+	virtual float	getHeight(void) const	= 0;
+
+
+	/*!
+	\brief
+		Return the size of the display in pixels
+
+	\return
+		Size object describing the dimensions of the current display.
+	*/
+	virtual Size	getSize(void) const		= 0;
+
+
+	/*!
+	\brief
+		Return a Rect describing the screen
+
+	\return
+		A Rect object that describes the screen area.  Typically, the top-left values are always 0, and the size of the area described is
+		equal to the screen resolution.
+	*/
+	virtual Rect	getRect(void) const		= 0;
+
+
+	/*!
+	\brief
+		Return the maximum texture size available
+
+	\return
+		Size of the maximum supported texture in pixels (textures are always assumed to be square)
+	*/
+	virtual	uint	getMaxTextureSize(void) const	= 0;
+
+
+	/*!
+	\brief
+		Return the horizontal display resolution dpi
+
+	\return
+		horizontal resolution of the display in dpi.
+	*/
+	virtual	uint	getHorzScreenDPI(void) const	= 0;
+
+
+	/*!
+	\brief
+		Return the vertical display resolution dpi
+
+	\return
+		vertical resolution of the display in dpi.
+	*/
+	virtual	uint	getVertScreenDPI(void) const	= 0;
+
+
+	/*************************************************************************
+		Basic stuff we provide in base class
+	*************************************************************************/
+	/*!
+	\brief
+		Reset the z co-ordinate for rendering.
+	
+	\return
+		Nothing
+	*/
+	void	resetZValue(void)				{d_current_z = GuiZInitialValue;}
+
+
+	/*!
+	\brief
+		Update the z co-ordinate for the next major UI element (window).
+
+	\return
+		Nothing
+	*/
+	void	advanceZValue(void)				{d_current_z -= GuiZElementStep;}
+
+
+	/*!
+	\brief
+		return the current Z value to use (equates to layer 0 for this UI element).
+
+	\return
+		float value that specifies the z co-ordinate to be used for layer 0 on the current GUI element.
+	*/
+	float	getCurrentZ(void) const			{return d_current_z;}
+
+
+	/*!
+	\brief
+		return the z co-ordinate to use for the requested layer on the current GUI element.
+
+	\param layer
+		Specifies the layer to return the Z co-ordinate for.  Each GUI element can use up to 10 layers, so valid inputs are 0 to 9 inclusive.
+		If you specify an invalid value for \a layer, results are undefined.
+
+	\return
+		float value that specifies the Z co-ordinate for layer \a layer on the current GUI element.
+	*/
+	float	getZLayer(uint layer) const		{return d_current_z - ((float)layer * GuiZLayerStep);}
+
+    virtual ResourceProvider* createResourceProvider(void);
+
+protected:
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	Renderer(void);
+
+public:		// for luabind support
+	virtual ~Renderer(void);
+
+private:
+	/*************************************************************************
+		Implementation constants
+	*************************************************************************/
+	static const float	GuiZInitialValue;		//!< Initial value to use for 'z' each frame.
+	static const float	GuiZElementStep;		//!< Value to step 'z' for each GUI element.
+	static const float	GuiZLayerStep;			//!< Value to step 'z' for each GUI layer.
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	float	d_current_z;		//!< The current z co-ordinate value.
+
+protected:
+    ResourceProvider* d_resourceProvider;      //!< Holds the pointer to the ResourceProvider object.
+};
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIRenderer_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIDefaultResourceProvider.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIDefaultResourceProvider.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIDefaultResourceProvider.h	(revision 1092)
@@ -0,0 +1,51 @@
+/************************************************************************
+	filename: 	CEGUIDefaultResourceProvider.h
+	created:	8/7/2004
+	author:		James '_mental_' O'Sullivan
+	
+	purpose:	Defines abstract base class for CEGUIData objects
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIDefaultResourceProvider_h_
+#define _CEGUIDefaultResourceProvider_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIResourceProvider.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+class CEGUIEXPORT DefaultResourceProvider : public ResourceProvider
+{
+public:
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	DefaultResourceProvider() {}
+	~DefaultResourceProvider(void) {}
+
+//    void loadInputSourceContainer(const String& filename, InputSourceContainer& output);
+    void loadRawDataContainer(const String& filename, RawDataContainer& output, const String& resourceGroup);
+};
+
+} // End of  CEGUI namespace section
+
+#endif	// end of guard _CEGUIDefaultResourceProvider_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIWindow.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIWindow.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUIWindow.h	(revision 1092)
@@ -0,0 +1,3048 @@
+/************************************************************************
+	filename: 	CEGUIWindow.h
+	created:	21/2/2004
+	author:		Paul D Turner
+	
+	purpose:	Defines abstract base class for Window objects
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIWindow_h_
+#define _CEGUIWindow_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIString.h"
+#include "CEGUIVector.h"
+#include "CEGUIRect.h"
+#include "CEGUISize.h"
+#include "CEGUIEventSet.h"
+#include "CEGUIPropertySet.h"
+#include "CEGUISystem.h"
+#include "CEGUIInputEvent.h"
+#include "CEGUIWindowProperties.h"
+#include <vector>
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+/*!
+\brief
+	Mode used for Window size and position metrics.
+
+	Position information for a Window is always 'relative' to it's parent even in Absolute mode.
+	In Relative mode, layout is maintained for different screen resolutions, and also  offers the
+	ability for child windows to properly adjust their layout as their parent is sized.
+*/
+enum MetricsMode
+{
+	Relative,		//!< Metrics are specified as a decimal fraction of parent Window size.
+	Absolute,		//!< Metrics are specified as whole pixels.
+	Inherited		//!< Metrics are inherited from parent.
+};
+
+
+/*!
+\brief
+	An abstract base class providing common functionality and specifying the required interface for derived classes.
+
+	The Window base class is the only UI object class that the core of the system knows about, for this reason every
+	other window, widget, or similar item within the system must be derived from Window.  The base class provides the
+	common functionality required by all UI objects, and specifies the minimal interface required to be implemented by
+	derived classes.
+*/
+class CEGUIEXPORT Window : public PropertySet, public EventSet
+{
+public:
+	static const String EventNamespace;				//!< Namespace for global events
+
+	/*************************************************************************
+		Event name constants
+	*************************************************************************/
+	// generated internally by Window
+	static const String EventParentSized;				//!< Parent of this Window has been re-sized.
+	static const String EventSized;					//!< Window size has changed
+	static const String EventMoved;					//!< Window position has changed
+	static const String EventTextChanged;				//!< Text string for the Window has changed
+	static const String EventFontChanged;				//!< Font object for the Window has been changed
+	static const String EventAlphaChanged;			//!< Alpha blend value for the Window has changed
+	static const String EventIDChanged;				//!< Client assigned ID code for the Window has changed
+	static const String EventActivated;				//!< Window has been activated (has input focus)
+	static const String EventDeactivated;				//!< Window has been deactivated (loses input focus)
+	static const String EventShown;					//!< Window has been made visible
+	static const String EventHidden;					//!< Window has been hidden from view
+	static const String EventEnabled;					//!< Window has been enabled (interaction is possible)
+	static const String EventDisabled;				//!< Window has been disabled (interaction is no longer possible)
+	static const String EventMetricsModeChanged;		//!< Active metrics mode has been modified
+	static const String EventClippedByParentChanged;	//!< Clipping by parent mode has been modified
+	static const String EventDestroyedByParentChanged;//!< Destruction by parent mode has been modified
+	static const String EventInheritsAlphaChanged;	//!< Alpha inherited from parent mode has been modified.
+	static const String EventAlwaysOnTopChanged;		//!< Always on top mode has been modified
+	static const String EventInputCaptureGained;		//!< Window has captured all inputs
+	static const String EventInputCaptureLost;		//!< Window has lost it's capture on inputs
+	static const String EventRenderingStarted;		//!< Rendering of the Window has started
+	static const String EventRenderingEnded;			//!< Rendering for the Window has finished
+	static const String EventChildAdded;				//!< A child Window has been added
+	static const String EventChildRemoved;			//!< A child window has been removed
+	static const String EventDestructionStarted;		//!< Destruction of the Window is about to begin.
+	static const String EventZOrderChanged;			//!< The z-order of the window has changed
+	static const String EventDragDropItemEnters;	//!< A DragContainer has been dragged over this window.
+	static const String EventDragDropItemLeaves;	//!< A DragContainer has left this window.
+	static const String EventDragDropItemDropped;	//!< A DragContainer was dropped on this Window.
+
+	// generated externally (inputs)
+	static const String EventMouseEnters;				//!< Mouse cursor has entered the Window.
+	static const String EventMouseLeaves;				//!< Mouse cursor has left the Window.
+	static const String EventMouseMove;				//!< Mouse cursor was moved within the area of the Window.
+	static const String EventMouseWheel;				//!< Mouse wheel was scrolled within the Window.
+	static const String EventMouseButtonDown;			//!< A mouse button was pressed down within the Window.
+	static const String EventMouseButtonUp;			//!< A mouse button was released within the Window.
+	static const String EventMouseClick;				//!< A mouse button was clicked (down then up) within the Window.
+	static const String EventMouseDoubleClick;		//!< A mouse button was double-clicked within the Window.
+	static const String EventMouseTripleClick;		//!< A mouse button was triple-clicked within the Window.
+	static const String EventKeyDown;					//!< A key on the keyboard was pressed.
+	static const String EventKeyUp;					//!< A key on the keyboard was released.
+	static const String EventCharacterKey;			//!< A text character was typed on the keyboard.
+
+
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for Window base class
+
+	\param type
+		String object holding Window type (usually provided by WindowFactory).
+
+	\param name
+		String object holding unique name for the Window.
+	*/
+	Window(const String& type, const String& name);
+
+
+	/*!
+	\brief
+		Destructor for Window base class
+	*/
+	virtual ~Window(void);
+
+
+	/*************************************************************************
+		Accessor functions
+	*************************************************************************/
+	/*!
+	\brief
+		return a String object holding the type name for this Window.
+
+	\return
+		String object holding the Window type.
+	*/
+	const String& getType(void) const		{return d_type;}
+
+
+	/*!
+	\brief
+		return a String object holding the name of this Window.
+
+	\return
+		String object holding the unique Window name.
+	*/
+	const String& getName(void) const		{return d_name;}
+
+
+	/*!
+	\brief
+		returns whether or not this Window is set to be destroyed when its parent is destroyed.
+
+	\return
+		true if the Window will be destroyed when its parent is destroyed, false if it will remain.
+	*/
+	bool	isDestroyedByParent(void) const		{return d_destroyedByParent;}
+
+
+	/*!
+	\brief
+		returns whether or not this Window is an always on top (a.k.a 'topmost') Window.
+
+	\return
+		true if this Window is always show on top of other normal windows.  false if the Window has normal z-order behaviour.
+	*/
+	bool	isAlwaysOnTop(void) const			{return d_alwaysOnTop;}
+
+
+	/*!
+	\brief
+		return true if the Window is currently disabled
+
+	\return
+		true if the window is disabled, false if the window is enabled.
+	*/
+	bool	isDisabled(void) const;
+
+
+	/*!
+	\brief
+		return true if the Window is currently visible.
+
+		A true return from this function does not mean that the window is not completely obscured by other windows, just that the window
+		is processed when rendering and is not hidden.
+
+	\return
+		true if the window is drawn, false if the window is hidden and therefore ignored when rendering.
+	*/
+	bool	isVisible(void) const;
+
+
+	/*!
+	\brief
+		return true if this is the active Window (the window that receives inputs)
+
+		Mouse events are always sent to the window containing the mouse cursor regardless of what this reports (unless the window has captured
+		inputs).  This mainly refers to where other (keyboard) inputs are sent.
+
+	\return
+		true if this window has input focus, or false if it does not.
+	*/
+	bool	isActive(void) const;
+
+
+	/*!
+	\brief
+		return true if this Window is clipped so that its rendering does not pass outside its parent windows area.
+
+	\return
+		true if the window will be clipped by its parent window, or false if this windows rendering may pass outside its parents area
+	*/
+	bool	isClippedByParent(void) const		{return d_clippedByParent;}
+
+
+	/*!
+	\brief
+		return the ID code currently assigned to this Window by client code.
+
+	\return
+		uint value equal to the currently assigned ID code for this Window.
+	*/
+	uint	getID(void) const		{return d_ID;}
+
+
+	/*!
+	\brief
+		return the number of child Window objects currently attached to this Window.
+
+	\return
+		uint value equal to the number of Window objects directly attached to this Window as children.
+	*/
+	uint   getChildCount(void) const      {return (uint)d_children.size();}
+
+
+	/*!
+	\brief
+		returns whether a Window with the specified name is currently attached to this Window as a child.
+
+	\param name
+		String object containing the name of the Window to look for.
+
+	\return
+		true if a Window named \a name is currently attached to this Window as a child, else false.
+	*/
+	bool	isChild(const String& name) const;
+
+
+	/*!
+	\brief
+		returns whether at least one window with the given ID code is attached as a child.
+
+	\note
+		ID codes are client assigned and may or may not be unique, and as such, the return from this function
+		will only have meaning to the client code.
+
+	\param ID
+		uint ID code to look for.
+
+	\return
+		true if a child window was found with the ID code \a ID, or false if no child window was found with the ID \a ID.
+	*/
+	bool	isChild(uint ID) const;
+
+
+	/*!
+	\brief
+		return true if the given Window is a child of this window.
+
+	\param window
+		Pointer to the Window object to look for.
+
+	\return
+		true if Window object \a window is attached to this window as a child.
+	*/
+	bool	isChild(const Window* window) const;
+
+
+	/*!
+	\brief
+		return a pointer to the child window with the specified name.
+
+		This function will throw an exception if no child object with the given name is attached.  This decision
+		was made (over returning NULL if no window was found) so that client code can assume that if the call
+		returns it has a valid window pointer.  We provide the isChild() functions for checking if a given window
+		is attached.
+
+	\param name
+		String object holding the name of the child window to return a pointer to.
+
+	\return
+		Pointer to the Window object attached to this window that has the name \a name.
+
+	\exception UnknownObjectException	thrown if no window named \a name is attached to this Window.
+	*/
+	Window*	getChild(const String& name) const;
+
+
+	/*!
+	\brief
+		return a pointer to the first attached child window with the specified ID.
+
+		This function will throw an exception if no child object with the given ID is attached.  This decision
+		was made (over returning NULL if no window was found) so that client code can assume that if the call
+		returns it has a valid window pointer.  We provide the isChild() functions for checking if a given window
+		is attached.
+
+	\param ID
+		uint value specifying the ID code of the window to return a pointer to.
+
+	\return
+		Pointer to the (first) Window object attached to this window that has the ID code \a ID.
+
+	\exception UnknownObjectException	thrown if no window with the ID code \a ID is attached to this Window.
+	*/
+	Window* getChild(uint ID) const;
+
+
+	/*!
+	\brief
+		return a pointer to the child window that is attached to 'this' at the given index.
+
+	\note
+		Window indeces are of limited value to client code, since any time a window is added, removed, or
+		it's z-order is changed the indeces all change.
+
+	\param idx
+		Index of the child window whos pointer should be returned.  This value is not bounds checked,
+		client code should ensure that this is less than the value returned by getChildCount().
+
+	\return
+		Pointer to the child window currently attached at index position \a idx
+	*/
+	Window*	getChildAtIdx(uint idx) const		{return d_children[idx];}
+
+
+	/*!
+	\brief
+		return a pointer to the Window that currently has input focus starting with this Window.
+
+	\return
+		Pointer to the window that is active (has input focus) starting at 'this.  Will return 'this' if this Window is active
+		and either no children are attached or if none of the attached children are active.  Returns NULL if this Window (and
+		therefore all children) are not active.
+	*/
+	Window*	getActiveChild(void);
+	const Window* getActiveChild(void) const;
+
+
+	/*!
+	\brief
+		return true if the specified Window is some ancestor of this Window
+
+	\param name
+		String object holding the name of the Window to check for.
+
+	\return
+		true if a Window named \a name is an ancestor (parent, or parent of parent, etc) of this Window, or false if not.
+	*/
+	bool	isAncestor(const String& name) const;
+
+
+	/*!
+	\brief
+		return true if any Window with the given ID is some ancestor of this Window.
+
+	\param ID
+		uint value specifying the ID to look for.
+
+	\return
+		true if an ancestor (parent, or parent of parent, etc) was found with the ID code \a ID, else false.
+	*/
+	bool	isAncestor(uint ID) const;
+
+
+	/*!
+	\brief
+		return true if the specified Window is some ancestor of this Window.
+
+	\param window
+		Pointer to the Window object to look for.
+
+	\return
+		true if \a window was found to be an ancestor (parent, or parent of parent, etc) of this Window, otherwise false.
+	*/
+	bool	isAncestor(const Window* window) const;
+
+
+	/*!
+	\brief
+		return the Font object active for the Window.
+
+	\return
+		Pointer to the Font being used by this Window.  If the window has no assigned font, the default font is returned.
+	*/
+	const Font*		getFont(void) const;
+
+
+	/*!
+	\brief
+		return the current text for the Window
+
+	\return
+		A String object that holds the current text for this Window.
+	*/
+	const String&	getText(void) const		{return d_text;}
+
+
+	/*!
+	\brief
+		return true if the Window inherits alpha from its parent(s).
+
+	\return
+		true if the Window inherits alpha from its parent(s), false if the alpha for this Window is independant.
+	*/
+	bool	inheritsAlpha(void) const		{return d_inheritsAlpha;}
+
+
+	/*!
+	\brief
+		return the current alpha value set for this Window
+
+	\note
+		The alpha value set for any given window may or may not be the final alpha value that is used when rendering.  All window
+		objects, by default, inherit alpha from thier parent window(s) - this will blend child windows, relatively, down the line of
+		inheritance.  This behaviour can be overridden via the setInheritsAlpha() method.  To return the true alpha value that will be
+		applied when rendering, use the getEffectiveAlpha() method.
+
+	\return
+		the currently set alpha value for this Window.  Will be between 0.0f and 1.0f.
+	*/
+	float	getAlpha(void) const			{return d_alpha;}
+
+
+	/*!
+	\brief
+		return the effective alpha value that will be used when rendering this window, taking into account inheritance of parent
+		window(s) alpha.
+
+	\return
+		the effective alpha that will be applied to this Window when rendering.  Will be between 0.0f and 1.0f.
+	*/
+	float	getEffectiveAlpha(void) const;
+
+
+	/*!
+	\brief
+		return a Rect object that describes the Window area.
+
+	\return
+		Rect object that describes the area covered by the Window.  The values in the returned Rect are in whatever form is set
+		as the current metric type.  The returned Rect is unclipped and relative to the Window objects parent.
+	*/
+	Rect	getRect(void) const;
+
+
+	/*!
+	\brief
+		return a Rect object describing the Window area in screen space.
+
+	\return
+		Rect object that describes the area covered by the Window.  The values in the returned Rect are in screen pixels.  The
+		returned Rect is clipped as appropriate and depending upon the 'ClippedByParent' setting.
+
+	\note
+		This has now been made virtual to ease some customisations that require more specialised clipping requirements.
+	*/
+	virtual Rect	getPixelRect(void) const;
+
+
+	/*!
+	\brief
+		return a Rect object describing the clipped inner area for this window.
+
+	\return
+		Rect object that describes, in appropriately clipped screen pixel co-ordinates, the window object's inner rect area.
+	*/
+	Rect	getInnerRect(void) const;
+
+
+	/*!
+	\brief
+		return a Rect object describing the Window area unclipped, in screen space.
+
+	\return
+		Rect object that describes the area covered by the Window.  The values in the returned Rect are in screen pixels.  The
+		returned rect is fully unclipped.
+	*/
+	Rect	getUnclippedPixelRect(void) const;
+
+
+	/*!
+	\brief
+		Return a Rect object that describes, unclipped, the inner rectangle for this window.  The inner rectangle is
+		typically an area that excludes some frame or other rendering that should not be touched by subsequent rendering.
+
+	\return
+		Rect object that describes, in unclipped screen pixel co-ordinates, the window object's inner rect area.
+	*/
+	virtual Rect	getUnclippedInnerRect(void) const;
+
+
+	/*!
+	\brief
+		return the Window that currently has inputs captured.
+
+	\return
+		Pointer to the Window object that currently has inputs captured, or NULL if no Window has captured input.
+	*/
+	static	Window*	getCaptureWindow(void)		{return d_captureWindow;}
+
+
+	/*!
+	\brief
+		return true if this Window has input captured.
+
+	\return
+		true if this Window has captured inputs, or false if some other Window, or no Window, has captured inputs.
+	*/
+	bool	isCapturedByThis(void) const		{return getCaptureWindow() == this;}
+
+
+	/*!
+	\brief
+		return true if a child window has captured inputs.
+
+	\return
+		true if inputs are captured by a Window that is attached as a child of this Window, else false.
+	*/
+	bool	isCapturedByAncestor(void) const	{return isAncestor(getCaptureWindow());}
+
+
+	/*!
+	\brief
+		return true if an ancestor window has captured inputs.
+
+	\return
+		true if inputs are captured by a Window that is some ancestor (parent, parent of parent, etc) of this Window, else false.
+	*/
+	bool	isCapturedByChild(void) const		{return isChild(getCaptureWindow());}
+
+
+	/*!
+	\brief
+		check if the given position would hit this window.
+
+	\param position
+		Point object describing the position to check in screen pixels
+
+	\return
+		true if \a position 'hits' this Window, else false.
+	*/
+	virtual bool	isHit(const Point& position) const;
+
+
+	/*!
+	\brief
+		return the child Window that is 'hit' by the given position
+
+	\param position
+		Point object that describes the position to check in screen pixels
+
+	\return
+		Pointer to the child Window that was hit according to the Point \a position, or NULL if no child window was hit.
+	*/
+	Window*	getChildAtPosition(const Point& position) const;
+
+
+	/*!
+	\brief
+		return the current metrics mode employed by the Window
+
+	\return
+		One of the values of the MectricsMode enumerated type, that describes the current metrics in use by the Window.
+	*/
+	MetricsMode	getMetricsMode(void) const;
+
+
+	/*!
+	\brief
+		return the x position of the window.  Interpretation of return value depends upon the metric type in use by this window.
+
+	\return
+		float value that specifies the x position of the Window relative to it's parent, depending on the metrics system in use for this
+		Window, this value will specify either pixels or a decimal fraction of the width of the parent Window.
+	*/
+	float	getXPosition(void) const;
+
+
+	/*!
+	\brief
+		return the y position of the window.  Interpretation of return value depends upon the metric type in use by this window.
+
+	\return
+		float value that specifies the y position of the Window relative to it's parent, depending on the metrics system in use for this
+		Window, this value will specify either pixels or a decimal fraction of the height of the parent Window.
+	*/
+	float	getYPosition(void) const;
+
+
+	/*!
+	\brief
+		return the position of the window.  Interpretation of return value depends upon the metric type in use by this window.
+
+	\return
+		Point object that describes the position of the Window relative to it's parent, depending on the metrics system in use for this
+		Window, the values in the Point will specify either pixels or decimal fractions of the total width and height of the parent.
+	*/
+	Point	getPosition(void) const;
+
+
+	/*!
+	\brief
+		return the width of the Window.  Interpretation of return value depends upon the metric type in use by this window.
+
+	\return
+		float value that specifies the width of the Window.  Depending upon the metrics system in use for this window, the return
+		value will either be in pixels, or as a decimal fraction of the width of the parent Window.
+	*/
+	float	getWidth(void) const;
+
+	/*!
+	\brief
+		return the height of the Window.  Interpretation of return value depends upon the metric type in use by this window.
+
+	\return
+		float value that specifies the height of the Window.  Depending upon the metrics system in use for this window, the return
+		value will either be in pixels, or as a decimal fraction of the height of the parent Window.
+	*/
+	float	getHeight(void) const;
+
+
+	/*!
+	\brief
+		return the size of the Window.  Interpretation of return value depends upon the metric type in use by this window.
+
+	\return
+		Size object that describes the dimensions of the Window.  Depending upon the metrics system in use for this window, the
+		values will either be in pixels, or as decimal fractions of the width and height of the parent Window.
+	*/
+	Size	getSize(void) const;
+
+
+	/*!
+	\brief
+		return the parent of this Window.
+
+	\return
+		Pointer to the Window object that is the parent of this Window.  This value can be NULL, in which case the Window is a GUI
+		Sheet / Root.
+	*/
+	Window*	getParent(void) const				{return d_parent;}
+
+
+	/*!
+	\brief
+		Return the current maximum size for this window.
+
+	\return
+		Size object describing the maximum size for this window.  If using absolute co-ordinates the returned object has it's values expressed
+		as screen pixels.  If using relative co-ordinates the returned object has it's values expressed as fractions of the current display size.
+	*/
+	Size	getMaximumSize(void) const;
+
+
+	/*!
+	\brief
+		Return the current minimum size for this window.
+
+	\return
+		Size object describing the minimum size for this window.  If using absolute co-ordinates the returned object has it's values expressed
+		as screen pixels.  If using relative co-ordinates the returned object has it's values expressed as fractions of the current display size.
+	*/
+	Size	getMinimumSize(void) const;
+
+
+	/*!
+	\brief
+		Return a pointer to the mouse cursor image to use when the mouse is within this window.
+
+	\return
+		Pointer to the mouse cursor image that will be used when the mouse enters this window.  May return NULL indicating no cursor.
+	*/
+	const Image*	getMouseCursor(void) const;
+
+
+	/*!
+	\brief
+		Return the window area rect in relative metrics.
+
+	\return
+		Rect object describing this windows area, relative to the parent window, in parent relative metrics.
+	*/
+	Rect	getRelativeRect(void) const				{return d_rel_area;}
+
+
+	/*!
+	\brief
+		Return the window position in relative metrics.
+
+	\return
+		Point object describing this windows position, relative to the parent window, in parent relative metrics.
+	*/
+	Point	getRelativePosition(void) const			{return d_rel_area.getPosition();}
+
+
+	/*!
+	\brief
+		Return the window X position in relative metrics.
+
+	\return
+		float value describing this windows X position, relative to the parent window, in parent relative metrics.
+	*/
+	float	getRelativeXPosition(void) const		{return d_rel_area.d_left;}
+
+
+	/*!
+	\brief
+		Return the window Y position in relative metrics.
+
+	\return
+		float value describing this windows Y position, relative to the parent window, in parent relative metrics.
+	*/
+	float	getRelativeYPosition(void) const		{return d_rel_area.d_top;}
+
+
+	/*!
+	\brief
+		Return the window size in relative metrics.
+
+	\return
+		Size object describing this windows size in parent relative metrics.
+	*/
+	Size	getRelativeSize(void) const				{return d_rel_area.getSize();}
+
+
+	/*!
+	\brief
+		Return the window width in relative metrics.
+
+	\return
+		float value describing this windows width in parent relative metrics.
+	*/
+	float	getRelativeWidth(void) const			{return d_rel_area.getWidth();}
+
+
+	/*!
+	\brief
+		Return the window height in relative metrics.
+
+	\return
+		float value describing this windows height in parent relative metrics.
+	*/
+	float	getRelativeHeight(void) const			{return d_rel_area.getHeight();}
+
+
+	/*!
+	\brief
+		Return the window area rect in absolute metrics.
+
+	\return
+		Rect object describing this windows area, relative to the parent window, in absolute metrics
+	*/
+	Rect	getAbsoluteRect(void) const				{return d_abs_area;}
+
+
+	/*!
+	\brief
+		Return the window position in absolute metrics.
+
+	\return
+		Point object describing this windows position, relative to the parent window, in absolute metrics.
+	*/
+	Point	getAbsolutePosition(void) const			{return d_abs_area.getPosition();}
+
+
+	/*!
+	\brief
+		Return the window X position in absolute metrics.
+
+	\return
+		float value describing this windows X position, relative to the parent window, in absolute metrics.
+	*/
+	float	getAbsoluteXPosition(void) const		{return d_abs_area.d_left;}
+
+
+	/*!
+	\brief
+		Return the window Y position in absolute metrics.
+
+	\return
+		float value describing this windows Y position, relative to the parent window, in absolute metrics.
+	*/
+	float	getAbsoluteYPosition(void) const		{return d_abs_area.d_top;}
+
+
+	/*!
+	\brief
+		Return the window size in absolute metrics.
+
+	\return
+		Size object describing this windows size in absolute metrics.
+	*/
+	Size	getAbsoluteSize(void) const				{return d_abs_area.getSize();}
+
+
+	/*!
+	\brief
+		Return the window width in absolute metrics.
+
+	\return
+		float value describing this windows width in absolute metrics.
+	*/
+	float	getAbsoluteWidth(void) const			{return d_abs_area.getWidth();}
+
+
+	/*!
+	\brief
+		Return the window height in absolute metrics.
+
+	\return
+	float value describing this windows height in absolute metrics.
+	*/
+	float	getAbsoluteHeight(void) const			{return d_abs_area.getHeight();}
+
+
+	/*!
+	\brief
+		Return the user data set for this Window.
+
+		Each Window can have some client assigned data attached to it, this data is not used by the GUI system
+		in any way.  Interpretation of the data is entirely application specific.
+
+	\return
+		pointer to the user data that is currently set for this window.
+	*/
+	void*	getUserData(void) const			{return d_userData;}
+
+
+	/*!
+	\brief
+		return the x position of the window using the specified metrics system.
+
+	\param mode
+		One of the MetricsMode enumerated values specifying the metrics system to be used for the return value.
+
+	\return
+		float value that specifies the x position of the Window relative to it's parent, using the specified MetricsMode.
+	*/
+	float	getXPosition(MetricsMode mode) const;
+
+
+	/*!
+	\brief
+		return the y position of the window using the specified metrics system.
+
+	\param mode
+		One of the MetricsMode enumerated values specifying the metrics system to be used for the return value.
+
+	\return
+		float value that specifies the y position of the Window relative to it's parent,  using the specified MetricsMode.
+	*/
+	float	getYPosition(MetricsMode mode) const;
+
+
+	/*!
+	\brief
+		return the position of the window using the specified metrics system.
+
+	\param mode
+		One of the MetricsMode enumerated values specifying the metrics system to be used for the return value.
+
+	\return
+		Point object that describes the position of the Window relative to it's parent, using the specified MetricsMode.
+	*/
+	Point	getPosition(MetricsMode mode) const;
+
+
+	/*!
+	\brief
+		return the width of the Window using the specified metrics system.
+
+	\param mode
+		One of the MetricsMode enumerated values specifying the metrics system to be used for the return value.
+
+	\return
+		float value that specifies the width of the Window using the specified MetricsMode.
+	*/
+	float	getWidth(MetricsMode mode) const;
+
+
+	/*!
+	\brief
+		return the height of the Window using the specified metrics system.
+
+	\param mode
+		One of the MetricsMode enumerated values specifying the metrics system to be used for the return value.
+
+	\return
+		float value that specifies the height of the Window using the specified MetricsMode.
+	*/
+	float	getHeight(MetricsMode mode) const;
+
+
+	/*!
+	\brief
+		return the size of the Window using the specified metrics system.
+
+	\param mode
+		One of the MetricsMode enumerated values specifying the metrics system to be used for the return value.
+
+	\return
+		Size object that describes the dimensions of the Window using the specified MetricsMode.
+	*/
+	Size	getSize(MetricsMode mode) const;
+
+
+	/*!
+	\brief
+		return a Rect object that describes the Window area using the specified metrics system.
+
+	\param mode
+		One of the MetricsMode enumerated values specifying the metrics system to be used for the return value.
+
+	\return
+		Rect object that describes the area covered by the Window using the specified MetricsMode.
+	*/
+	Rect	getRect(MetricsMode mode) const;
+
+
+	/*!
+	\brief
+		Return whether this window is set to restore old input capture when it loses input capture.
+
+		This is only really useful for certain sub-components for widget writers.
+
+	\return
+		- true if the window will restore the previous capture window when it loses input capture.
+		- false if the window will set the capture window to NULL when it loses input capture (this is the default behaviour).
+	*/
+	bool	restoresOldCapture(void) const		{return d_restoreOldCapture;}
+
+
+	/*!
+	\brief
+		Return whether z-order changes are enabled or disabled for this Window.
+
+	\return
+		- true if z-order changes are enabled for this window.  moveToFront/moveToBack work normally as expected.
+		- false: z-order changes are disabled for this window.  moveToFront/moveToBack are ignored for this window.
+	*/
+	bool	isZOrderingEnabled(void) const;
+
+
+    /*!
+    \brief
+        Return whether this window will receive multi-click events or multiple 'down' events instead.
+
+    \return
+        - true if the Window will receive double-click and triple-click events.
+        - false if the Window will receive multiple mouse button down events instead of double/triple click events.
+    */
+    bool    wantsMultiClickEvents(void) const;
+
+
+    /*!
+    \brief
+        Return whether mouse button down event autorepeat is enabled for this window.
+
+    \return
+        - true if autorepeat of mouse button down events is enabled for this window.
+        - false if autorepeat of mouse button down events is not enabled for this window.
+    */
+    bool    isMouseAutoRepeatEnabled(void) const;
+
+
+    /*!
+    \brief
+        Return the current auto-repeat delay setting for this window.
+
+    \return
+        float value indicating the delay, in seconds, defore the first repeat mouse button down event will be triggered when autorepeat is enabled.
+    */
+    float   getAutoRepeatDelay(void) const;
+
+    
+    /*!
+    \brief
+        Return the current auto-repeat rate setting for this window.
+
+    \return
+        float value indicating the rate, in seconds, at which repeat mouse button down events will be generated after the initial delay has expired.
+    */
+    float   getAutoRepeatRate(void) const;
+
+
+    /*!
+    \brief
+        Return whether the window wants inputs passed to its attached
+        child windows when the window has inputs captured.
+
+    \return
+        - true if System should pass captured input events to child windows.
+        - false if System should pass captured input events to this window only.
+    */
+    bool    distributesCapturedInputs(void) const;
+
+
+    /*!
+    \brief
+        Return whether this Window is using the system default Tooltip for its Tooltip window.
+
+    \return
+        - true if the Window will use the system default tooltip.
+        - false if the window has a custom Tooltip object.
+    */
+    bool isUsingDefaultTooltip(void) const;
+
+    /*!
+    \brief
+        Return a pointer to the Tooltip object used by this Window.  The value returned may
+        point to the system default Tooltip, a custom Window specific Tooltip, or be NULL.
+
+    \return
+        Pointer to a Tooltip based object, or NULL.
+    */
+    Tooltip* getTooltip(void) const;
+
+    /*!
+    \brief
+        Return the custom tooltip type.
+
+    \return
+        String object holding the current custom tooltip window type, or an empty string if no custom tooltip is set.
+     */
+    String getTooltipType(void) const;
+
+    /*!
+    \brief
+        Return the current tooltip text set for this Window.
+
+    \return
+        String object holding the current tooltip text set for this window.
+     */
+    const String& getTooltipText(void) const;
+
+    /*!
+    \brief
+        Return whether this window inherits Tooltip text from its parent when its own tooltip text is not set.
+
+    \return
+        - true if the window inherits tooltip text from its parent when its own text is not set.
+        - false if the window does not inherit tooltip text from its parent (and shows no tooltip when no text is set).
+     */
+    bool inheritsTooltipText(void) const;
+
+    /*!
+    \brief
+        Return whether this window will rise to the top of the z-order when clicked with the left mouse button.
+
+    \return
+        - true if the window will come to the top of other windows when the left mouse button is pushed within its area.
+        - false if the window does not change z-order position when the left mouse button is pushed within its area.
+     */
+    bool isRiseOnClickEnabled(void) const   { return d_riseOnClick; }
+
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	bool testClassName(const String& class_name) const		{return testClassName_impl(class_name);}
+
+    /*************************************************************************
+		Manipulator functions
+	*************************************************************************/
+	/*!
+	\brief
+		Initialises the Window based object ready for use.
+
+	\note
+		This must be called for every window created.  Normally this is handled automatically by the WindowFactory for each Window type.
+
+	\return
+		Nothing
+	*/
+	virtual void	initialise(void) {}
+
+
+	/*!
+	\brief
+		Set whether or not this Window will automatically be destroyed when its parent Window is destroyed.
+
+	\param setting
+		set to true to have the Window auto-destroyed when its parent is destroyed (default), or false to have the Window
+		remain after its parent is destroyed.
+
+	\return
+		Nothing
+	*/
+	void	setDestroyedByParent(bool setting);
+
+
+	/*!
+	\brief
+		Set whether this window is always on top, or not.
+
+	\param setting
+		true to have the Window appear on top of all other non always on top windows, or false to allow the window to be covered by other windows.
+
+	\return
+		Nothing
+	*/
+	void	setAlwaysOnTop(bool setting);
+
+
+	/*!
+	\brief
+		Set whether this window is enabled or disabled.  A disabled window normally can not be interacted with, and may have different rendering.
+
+	\param setting
+		true to enable the Window, and false to disable the Window.
+
+	\return
+		Nothing
+	*/
+	void	setEnabled(bool setting);
+
+
+	/*!
+	\brief
+		enable the Window to allow interaction.
+
+	\return
+		Nothing
+	*/
+	void	enable(void)		{setEnabled(true);}
+
+
+	/*!
+	\brief
+		disable the Window to prevent interaction.
+
+	\return
+		Nothing
+	*/
+	void	disable(void)		{setEnabled(false);}
+
+
+	/*!
+	\brief
+		Set whether the Window is visible or hidden.
+
+	\param setting
+		true to make the Window visible, or false to make the Window hidden
+
+	\return
+		Nothing
+	*/
+	void	setVisible(bool setting);
+
+
+	/*!
+	\brief
+		show the Window
+
+	\return
+		Nothing
+	*/
+	void	show(void)			{setVisible(true);}
+
+
+	/*!
+	\brief
+		hide the Window.
+
+	\return	
+		Nothing
+	*/
+	void	hide(void)			{setVisible(false);}
+
+
+	/*!
+	\brief
+		Activate the Window giving it input focus and bringing it to the top of all non always-on-top Windows.
+
+	\return
+		Nothing
+	*/
+	void	activate(void);
+
+
+	/*!
+	\brief
+		Deactivate the window.  No further inputs will be received by the window until it is re-activated either programmatically or
+		by the user interacting with the gui.
+	
+	\return
+		Nothing.
+	*/
+	void	deactivate(void);
+
+
+	/*!
+	\brief
+		Set whether this Window will be clipped by its parent window(s).
+
+	\param setting
+		true to have the Window clipped so that rendering is constrained to within the area of its parent(s), or false to have rendering constrained
+		to the screen only.
+
+	\return
+		Nothing
+	*/
+	void	setClippedByParent(bool setting);
+	
+
+	/*!
+	\brief
+		Set the current ID for the Window.
+
+	\param ID
+		Client assigned ID code for this Window.  The GUI system assigns no meaning to any IDs, they are a device purely for client code usage.
+
+	\return
+		Nothing
+	*/
+	void	setID(uint ID);
+
+
+	/*!
+	\brief
+		Set the current text string for the Window.
+
+	\param text
+		String object containing the text that is to be set as the Window text.
+
+	\return
+		Nothing
+	*/
+	void	setText(const String& text);
+
+
+	/*!
+	\brief
+		Set the current width of the Window.  Interpretation of the input value \a width is dependant upon the current metrics system set for the Window.
+
+	\param width
+		float value that specifies the new width for the window, in units consistent with whatever metrics mode is in operation.
+
+	\return
+		Nothing
+	*/
+	void	setWidth(float width);
+
+
+	/*!
+	\brief
+		Set the current height of the Window.  Interpretation of the input value \a height is dependant upon the current metrics system set for the Window.
+
+	\param height
+		float value that specifies the new height for the window, in units consistent with whatever metrics mode is in operation.
+
+	\return
+		Nothing
+	*/
+	void	setHeight(float height);
+
+
+	/*!
+	\brief
+		Set the current size of the Window.  Interpretation of the input value \a size is dependant upon the current metrics system set for the Window.
+
+	\param size
+		Size object that describes the new dimensions for the window, in units consistent with whatever metrics mode is in operation.
+
+	\return
+		Nothing
+	*/
+	void	setSize(const Size& size);
+
+
+	/*!
+	\brief
+		Set the current 'x' position of the Window.  Interpretation of the input value \a x is dependant upon the current metrics system set for the Window.
+
+	\param x
+		float value that specifies the new x postion of the Window, in units consistent with the current metrics mode.
+
+	\return
+		Nothing
+	*/
+	void	setXPosition(float x);
+
+
+	/*!
+	\brief
+		Set the current 'y' position of the Window.  Interpretation of the input value \a y is dependant upon the current metrics system set for the Window.
+
+	\param y
+		float value that specifies the new y postion of the Window, in units consistent with the current metrics mode.
+
+	\return
+		Nothing
+	*/
+	void	setYPosition(float y);
+
+
+	/*!
+	\brief
+		Set the current position of the Window.  Interpretation of the input value \a position is dependant upon the current metrics system set for the Window.
+
+	\param position
+		Point object that describes the new postion of the Window, in units consistent with the current metrics mode.
+
+	\return
+		Nothing
+	*/
+	void	setPosition(const Point& position);
+
+
+	/*!
+	\brief
+		Set the current area for the Window, this allows for setting of position and size at the same time.  
+		Interpretation of the input value \a area is dependant upon the current metrics system set for the Window.
+
+	\param area
+		Rect object that describes the new area for Window, in units consistent with the current metrics mode.
+
+	\return
+		Nothing
+	*/
+	void	setAreaRect(const Rect& area);
+
+	
+	/*!
+	\brief
+		Set the font used by this Window.
+
+	\param font
+		Pointer to the Font object to be used by this Window.  If \a font is NULL, the default font will be used.
+
+	\return
+		Nothing
+	*/
+	void	setFont(const Font* font);
+
+
+	/*!
+	\brief
+		Set the font used by this Window.
+
+	\param name
+		String object holding the name of the Font object to be used by this Window.  If \a name == "", the default font will be used.
+
+	\return
+		Nothing
+
+	\exception UnknownObjectException	thrown if the specified Font is unknown within the system.
+	*/
+	void	setFont(const String& name);
+
+
+	/*!
+	\brief
+		Add the named Window as a child of this Window.  If the Window \a name is already attached to a Window, it is detached before
+		being added to this Window.
+
+	\param name
+		String object holding the name of the Window to be added.
+
+	\return
+		Nothing.
+
+	\exception UnknownObjectException	thrown if no Window named \a name exists.
+	\exception InvalidRequestException	thrown if Window \a name is an ancestor of this Window, to prevent cyclic Window structures.
+	*/
+	void	addChildWindow(const String& name);
+
+
+	/*!
+	\brief
+		Add the specified Window as a child of this Window.  If the Window \a window is already attached to a Window, it is detached before
+		being added to this Window.
+
+	\param window
+		Pointer to the Window object to be added.
+
+	\return
+		Nothing
+
+	\exception InvalidRequestException	thrown if Window \a window is an ancestor of this Window, to prevent cyclic Window structures.
+	*/
+	void	addChildWindow(Window* window);
+
+
+	/*!
+	\brief
+		Remove the named Window from this windows child list.
+
+	\param name
+		String object holding the name of the Window to be removed.  If the Window specified is not attached to this Window, nothing happens.
+
+	\return
+		Nothing.
+	*/
+	void	removeChildWindow(const String& name);
+
+
+	/*!
+	\brief
+		Remove the specified Window form this windows child list.
+
+	\param window
+		Pointer to the Window object to be removed.  If the \a window is not attached to this Window, then nothing happens.
+
+	\return
+		Nothing.
+	*/
+	void	removeChildWindow(Window* window);
+
+
+	/*!
+	\brief
+		Remove the first child Window with the specified ID.  If there is more than one attached Window objects with the specified ID, only the fist
+		one encountered will be removed.
+
+	\param ID
+		ID number assigned to the Window to be removed.  If no Window with ID code \a ID is attached, nothing happens.
+
+	\return
+		Nothing.
+	*/
+	void	removeChildWindow(uint ID);
+
+
+	/*!
+	\brief
+		Move the Window to the top of the z order.
+
+		- If the Window is a non always-on-top window it is moved the the top of all other non always-on-top sibling windows, and the process
+			repeated for all ancestors.
+		- If the Window is an always-on-top window it is moved to the of of all sibling Windows, and the process repeated for all ancestors.
+
+	\return
+		Nothing
+	*/
+	void	moveToFront();
+
+
+	/*!
+	\brief
+		Move the Window to the bottom of the Z order.
+
+		- If the window is non always-on-top the Window is sent to the very bottom of its sibling windows and the process repeated for all ancestors.
+		- If the window is always-on-top, the Window is sent to the bottom of all sibling always-on-top windows and the process repeated for all ancestors.
+
+	\return
+		Nothing
+	*/
+	void	moveToBack();
+
+
+	/*!
+	\brief
+		Captures input to this window
+
+	\return
+		- true if input was successfully captured to this window.
+		- false if input could not be captured to this window (maybe because the window is not active).
+	*/
+	bool	captureInput(void);
+
+
+	/*!
+	\brief
+		Releases input capture from this Window.  If this Window does not have inputs captured, nothing happens.
+
+	\return
+		Nothing
+	*/
+	void	releaseInput(void);
+
+
+	/*!
+	\brief
+		Set whether this window will remember and restore the previous window that had inputs captured.
+
+	\param setting
+		- true: The window will remember and restore the previous capture window.  The CaptureLost event is not fired
+		  on the previous window when this window steals input capture.  When this window releases capture, the old capture
+		  window is silently restored.
+
+		- false: Input capture works as normal, each window losing capture is signalled via CaptureLost, and upon the final
+		  release of capture, no previous setting is restored (this is the default 'normal' behaviour).
+
+	\return
+		Nothing
+	*/
+	void	setRestoreCapture(bool setting);
+
+
+	/*!
+	\brief
+		Set the current alpha value for this window.
+
+	\note
+		The alpha value set for any given window may or may not be the final alpha value that is used when rendering.  All window
+		objects, by default, inherit alpha from thier parent window(s) - this will blend child windows, relatively, down the line of
+		inheritance.  This behaviour can be overridden via the setInheritsAlpha() method.  To return the true alpha value that will be
+		applied when rendering, use the getEffectiveAlpha() method.
+
+	\param alpha
+		The new alpha value for the window.  Value should be between 0.0f and 1.0f.
+
+	\return
+		Nothing
+	*/
+	void	setAlpha(float alpha);
+
+
+	/*!
+	\brief
+		Sets whether this Window will inherit alpha from its parent windows.
+
+	\param setting
+		true if the Window should use inherited alpha, or false if the Window should have an independant alpha value.
+
+	\return
+		Nothing
+	*/
+	void	setInheritsAlpha(bool setting);
+
+
+	/*!
+	\brief
+		Signal the System object to redraw (at least) this Window on the next render cycle.
+
+	\return
+		Nothing
+	*/
+	void	requestRedraw(void) const;
+
+
+	/*!
+	\brief
+		set the current metrics mode employed by the Window
+
+	\param mode
+		One of the values of the MectricsMode enumerated type, that describes the metrics mode to be used by the Window.
+
+	\return
+		Nothing
+	*/
+	void setMetricsMode(MetricsMode	mode);
+
+
+	/*!
+	\brief
+		Set the minimum size for this window.
+
+	\param sz
+		Size object describing the minimum size for the window.  For absolute metrics, the Size values are in screen pixels,
+		for relative metrics the Size values are relative to the display size.
+	*/
+	void	setMinimumSize(const Size& sz);
+
+
+	/*!
+	\brief
+		Set the maximum size for this window.
+
+	\param sz
+		Size object describing the maximum size for the window.  For absolute metrics, the Size values are in screen pixels,
+		for relative metrics the Size values are relative to the display size.
+	*/
+	void	setMaximumSize(const Size& sz);
+
+
+	/*!
+	\brief
+		Set the mouse cursor image to be used when the mouse enters this window.
+
+	\param image
+		Pointer to the Image object to use as the mouse cursor image when the mouse enters the area for this Window.
+
+	\return
+		Nothing.
+	*/
+	void	setMouseCursor(const Image* image)		{d_mouseCursor = image;}
+
+
+	/*!
+	\brief
+		Set the mouse cursor image to be used when the mouse enters this window.
+
+	\param image
+		One of the MouseCursorImage enumerated values.
+
+	\return
+		Nothing.
+	*/
+	void	setMouseCursor(MouseCursorImage image)		{d_mouseCursor = (const Image*)image;}
+
+
+	/*!
+	\brief
+		Set the mouse cursor image to be used when the mouse enters this window.
+
+	\param imageset
+		String object that contains the name of the Imageset that contains the image to be used.
+
+	\param image_name
+		String object that contains the name of the Image on \a imageset that is to be used.
+
+	\return
+		Nothing.
+
+	\exception UnknownObjectException	thrown if \a imageset is not known, or if \a imageset contains no Image named \a image_name.
+	*/
+	void	setMouseCursor(const String& imageset, const String& image_name);
+
+
+	/*!
+	\brief
+		Set the user data set for this Window.
+
+		Each Window can have some client assigned data attached to it, this data is not used by the GUI system
+		in any way.  Interpretation of the data is entirely application specific.
+
+	\param user_data
+		pointer to the user data that is to be set for this window.
+
+	\return
+		Nothing.
+	*/
+	void	setUserData(void* user_data)		{d_userData = user_data;}
+
+
+	/*!
+	\brief
+		set the x position of the window using the specified metrics system.
+
+	\param mode
+		One of the MetricsMode enumerated values specifying the metrics system to be used for the return value.
+
+	\param x
+		float value that specifies the x position of the Window relative to it's parent, using the specified MetricsMode.
+
+	\return
+		Nothing.
+	*/
+	void	setXPosition(MetricsMode mode, float x);
+
+
+	/*!
+	\brief
+		set the y position of the window using the specified metrics system.
+
+	\param mode
+		One of the MetricsMode enumerated values specifying the metrics system to be used for the return value.
+
+	\param y
+		float value that specifies the y position of the Window relative to it's parent,  using the specified MetricsMode.
+
+	\return
+		Nothing.
+	*/
+	void	setYPosition(MetricsMode mode, float y);
+
+
+	/*!
+	\brief
+		set the position of the window using the specified metrics system.
+
+	\param mode
+		One of the MetricsMode enumerated values specifying the metrics system to be used for the return value.
+
+	\param position
+		Point object that describes the position of the Window relative to it's parent, using the specified MetricsMode.
+
+	\return
+		Nothing
+	*/
+	void	setPosition(MetricsMode mode, const Point& position);
+
+
+	/*!
+	\brief
+		set the width of the Window using the specified metrics system.
+
+	\param mode
+		One of the MetricsMode enumerated values specifying the metrics system to be used for the return value.
+
+	\param width
+		float value that specifies the width of the Window using the specified MetricsMode.
+
+	\return
+		Nothing.
+	*/
+	void	setWidth(MetricsMode mode, float width);
+
+
+	/*!
+	\brief
+		set the height of the Window using the specified metrics system.
+
+	\param mode
+		One of the MetricsMode enumerated values specifying the metrics system to be used for the return value.
+
+	\param height
+		float value that specifies the height of the Window using the specified MetricsMode.
+
+	\return
+		Nothing.
+	*/
+	void	setHeight(MetricsMode mode, float height);
+
+
+	/*!
+	\brief
+		set the size of the Window using the specified metrics system.
+
+	\param mode
+		One of the MetricsMode enumerated values specifying the metrics system to be used for the return value.
+
+	\param size
+		Size object that describes the dimensions of the Window using the specified MetricsMode.
+
+	\return
+		Nothing.
+	*/
+	void	setSize(MetricsMode mode, const Size& size);
+
+
+	/*!
+	\brief
+		set the Rect that describes the Window area using the specified metrics system.
+
+	\param mode
+		One of the MetricsMode enumerated values specifying the metrics system to be used for the return value.
+
+	\param area
+		Rect object that describes the area to be covered by the Window using the specified MetricsMode.
+
+	\return
+		Nothing.
+	*/
+	void	setRect(MetricsMode mode, const Rect& area);
+
+
+	/*!
+	\brief
+		Set whether z-order changes are enabled or disabled for this Window.
+
+	\param setting
+		- true if z-order changes are enabled for this window.  moveToFront/moveToBack work normally as expected.
+		- false: z-order changes are disabled for this window.  moveToFront/moveToBack are ignored for this window.
+
+	\return
+		Nothing.
+	*/
+	void	setZOrderingEnabled(bool setting);
+
+
+    /*!
+    \brief
+        Set whether this window will receive multi-click events or multiple 'down' events instead.
+
+    \param setting
+        - true if the Window will receive double-click and triple-click events.
+        - false if the Window will receive multiple mouse button down events instead of double/triple click events.
+
+    \return
+        Nothing.
+    */
+    void setWantsMultiClickEvents(bool setting);
+
+    
+    /*!
+    \brief
+        Set whether mouse button down event autorepeat is enabled for this window.
+
+    \param setting
+        - true to enable autorepeat of mouse button down events.
+        - false to disable autorepeat of mouse button down events.
+
+    \return
+        Nothing.
+    */
+    void    setMouseAutoRepeatEnabled(bool setting);
+
+
+    /*!
+    \brief
+        Set the current auto-repeat delay setting for this window.
+
+    \param delay
+        float value indicating the delay, in seconds, defore the first repeat mouse button down event should be triggered when autorepeat is enabled.
+
+    \return
+        Nothing.
+    */
+    void   setAutoRepeatDelay(float delay);
+
+    
+    /*!
+    \brief
+        Set the current auto-repeat rate setting for this window.
+
+    \param rate
+        float value indicating the rate, in seconds, at which repeat mouse button down events should be generated after the initial delay has expired.
+
+    \return
+        Nothing.
+    */
+    void   setAutoRepeatRate(float rate);
+
+
+    /*!
+    \brief
+        Set whether the window wants inputs passed to its attached
+        child windows when the window has inputs captured.
+
+    \param setting
+        - true if System should pass captured input events to child windows.
+        - false if System should pass captured input events to this window only.
+    */
+    void    setDistributesCapturedInputs(bool setting);
+
+    /*!
+    \brief
+        Internal support method for drag & drop.  You do not normally call
+        this directly from client code.  See the DragContainer class.
+    */
+    void    notifyDragDropItemEnters(DragContainer* item);
+
+    /*!
+    \brief
+        Internal support method for drag & drop.  You do not normally call
+        this directly from client code.  See the DragContainer class.
+    */
+    void    notifyDragDropItemLeaves(DragContainer* item);
+
+    /*!
+    \brief
+        Internal support method for drag & drop.  You do not normally call
+        this directly from client code.  See the DragContainer class.
+    */
+    void    notifyDragDropItemDropped(DragContainer* item);
+
+    /*!
+    \brief
+        Internal destroy method which actually just adds the window and any 
+        parent destructed child windows to the dead pool.
+
+        This is virtual to allow for specialised cleanup which may be required
+        in some advanced cases.  If you override this for the above reason, you
+        MUST call this base class version.
+        
+    \note
+        You never have to call this method yourself, use WindowManager to
+        destroy your Window objects (which will call this for you).
+    */
+    virtual void    destroy(void);
+
+    /*!
+    \brief
+        Set the custom Tooltip object for this Window.  This value may be NULL to indicate that the
+        Window should use the system default Tooltip object.
+
+    \param tooltip
+        Pointer to a valid Tooltip based object which should be used as the tooltip for this Window, or NULL to
+        indicate that the Window should use the system default Tooltip object.  Note that when passing a pointer
+        to a Tooltip object, ownership of the Tooltip does not pass to this Window object.
+
+    \return
+        Nothing.
+    */
+    void setTooltip(Tooltip* tooltip);
+
+    /*!
+    \brief
+        Set the custom Tooltip to be used by this Window by specifying a Window type.
+
+        The Window will internally attempt to create an instance of the specified window type (which must be
+        derived from the base Tooltip class).  If the Tooltip creation fails, the error is logged and the
+        Window will revert to using either the existing custom Tooltip or the system default Tooltip.
+
+    \param tooltipType
+        String object holding the name of the Tooltip based Window type which should be used as the Tooltip for
+        this Window.
+
+    \return
+        Nothing.
+    */
+    void setTooltipType(const String& tooltipType);
+
+    /*!
+    \brief
+        Set the tooltip text for this window.
+
+    \param tip
+        String object holding the text to be displayed in the tooltip for this Window.
+
+    \return
+        Nothing.
+    */
+    void setTooltipText(const String& tip);
+
+	/*!
+    \brief
+        Set whether this window inherits Tooltip text from its parent when its own tooltip text is not set.
+
+    \param setting
+        - true if the window should inherit tooltip text from its parent when its own text is not set.
+        - false if the window should not inherit tooltip text from its parent (and so show no tooltip when no text is set).
+
+    \return
+        Nothing.
+     */
+    void setInheritsTooltipText(bool setting);
+
+    /*!
+    \brief
+        Set whether this window will rise to the top of the z-order when clicked with the left mouse button.
+
+    \param setting
+        - true if the window should come to the top of other windows when the left mouse button is pushed within its area.
+        - false if the window should not change z-order position when the left mouse button is pushed within its area.
+
+    \return
+        Nothing.
+     */
+    void setRiseOnClickEnabled(bool setting)    { d_riseOnClick = setting; }
+
+
+    /*************************************************************************
+		Co-ordinate and Size Conversion Functions
+	*************************************************************************/
+	/*!
+	\brief
+		Convert the given X co-ordinate from absolute to relative metrics.
+
+	\param val
+		X co-ordinate specified in pixels relative to this Window (so 0 is this windows left edge).
+
+	\return
+		A relative metric value that is equivalent to \a val, given the Window objects current width.
+	*/
+	float	absoluteToRelativeX(float val) const;
+
+
+	/*!
+	\brief
+		Convert the given Y co-ordinate from absolute to relative metrics.
+
+	\param val
+		Y co-ordinate specified in pixels relative to this Window (so 0 is this windows top edge).
+
+	\return
+		A relative metric value that is equivalent to \a val, given the Window objects current height.
+	*/
+	float	absoluteToRelativeY(float val) const;
+
+
+	/*!
+	\brief
+		Convert the given position from absolute to relative metrics.
+
+	\param pt
+		Point object that describes a position specified in pixels relative to this Window (so 0,0 is this windows top-left corner).
+
+	\return
+		A Point object describing a relative metric position that is equivalent to \a pt, given the Window objects current size.
+	*/
+	Point	absoluteToRelative(const Point& pt) const;
+
+
+	/*!
+	\brief
+		Convert the given size from absolute to relative metrics.
+
+	\param sze
+		Size object that describes a size specified in pixels.
+
+	\return
+		A Size object describing a relative metric size that is equivalent to \a sze, given the Window objects current size.
+	*/
+	Size	absoluteToRelative(const Size& sze) const;
+
+
+	/*!
+	\brief
+		Convert the given area from absolute to relative metrics.
+
+	\param rect
+		Rect object describing the area specified in pixels relative to this Window.
+
+	\return
+		A Rect object describing a relative metric area that is equivalent to \a rect, given the Window objects current size.
+	*/
+	Rect	absoluteToRelative(const Rect& rect) const;
+
+
+	/*!
+	\brief
+		Convert the given X co-ordinate from relative to absolute metrics.
+
+	\param val
+		X co-ordinate specified in relative metrics for this Window (so 0 is this windows left edge).
+
+	\return
+		An absolute metric value that is equivalent to \a val, given the Window objects current width.
+	*/
+	float	relativeToAbsoluteX(float val) const;
+
+
+	/*!
+	\brief
+		Convert the given Y co-ordinate from relative to absolute metrics.
+
+	\param val
+		Y co-ordinate specified in relative metrics for this Window (so 0 is this windows top edge).
+
+	\return
+		An absolute metric value that is equivalent to \a val, given the Window objects current height.
+	*/
+	float	relativeToAbsoluteY(float val) const;
+
+
+	/*!
+	\brief
+		Convert the given position from relative to absolute metrics.
+
+	\param pt
+		Point object describing a position specified in relative metrics for this Window (so 0,0 is this windows top-left corner).
+
+	\return
+		A Point object describing a position in absolute metric values that is equivalent to \a pt, given the Window objects current size.
+	*/
+	Point	relativeToAbsolute(const Point& pt) const;
+
+
+	/*!
+	\brief
+		Convert the given size from relative to absolute metrics.
+
+	\param sze
+		Size object describing a size specified in relative metrics for this Window.
+
+	\return
+		A Size object that describes a size in absolute metric values that is equivalent to \a sze, given the Window objects current size.
+	*/
+	Size	relativeToAbsolute(const Size& sze) const;
+
+
+	/*!
+	\brief
+		Convert the given area from relative to absolute metrics.
+
+	\param rect
+		Rect object describing the area specified in relative metrics for this Window.
+
+	\return
+		A Rect object that describes an area in absolute metric values that is equivalent to \a rect, given the Window objects current size.
+	*/
+	Rect	relativeToAbsolute(const Rect& rect) const;
+
+
+	/*!
+	\brief
+		Convert a window co-ordinate value, specified in whichever metrics mode is active, to a screen relative pixel co-ordinate.
+
+	\param x
+		x co-ordinate value to be converted
+
+	\return
+		float value describing a pixel screen co-ordinate that is equivalent to window co-ordinate \a x.
+	*/
+	float	windowToScreenX(float x) const;
+
+
+	/*!
+	\brief
+		Convert a window co-ordinate value, specified in whichever metrics mode is active, to a screen relative pixel co-ordinate.
+
+	\param y
+		y co-ordinate value to be converted
+
+	\return
+		float value describing a screen co-ordinate that is equivalent to window co-ordinate \a y.
+	*/
+	float	windowToScreenY(float y) const;
+	
+	
+	/*!
+	\brief
+		Convert a window co-ordinate position, specified in whichever metrics mode is active, to a screen relative pixel co-ordinate position.
+
+	\param pt
+		Point object describing the position to be converted
+
+	\return
+		Point object describing a screen co-ordinate position that is equivalent to window co-ordinate position \a pt.
+	*/
+	Point	windowToScreen(const Point& pt) const;
+
+
+	/*!
+	\brief
+		Convert a window size value, specified in whichever metrics mode is active, to a size in pixels.
+
+	\param sze
+		Size object describing the size to be converted
+
+	\return
+		Size object describing describing a size in pixels that is equivalent to the window based size \a sze.
+	*/
+	Size	windowToScreen(const Size& sze) const;
+
+
+	/*!
+	\brief
+		Convert a window area, specified in whichever metrics mode is active, to a screen area.
+
+	\param rect
+		Rect object describing the area to be converted
+
+	\return
+		Rect object describing a screen area that is equivalent to window area \a rect.
+	*/
+	Rect	windowToScreen(const Rect& rect) const;
+
+
+	/*!
+	\brief
+		Convert a screen relative pixel co-ordinate value to a window co-ordinate value, specified in whichever metrics mode is active.
+
+	\param x
+		x co-ordinate value to be converted
+
+	\return
+		float value describing a window co-ordinate value that is equivalent to screen co-ordinate \a x.
+	*/
+	float	screenToWindowX(float x) const;
+
+
+	/*!
+	\brief
+		Convert a screen relative pixel co-ordinate value to a window co-ordinate value, specified in whichever metrics mode is active.
+
+	\param y
+		y co-ordinate value to be converted
+
+	\return
+		float value describing a window co-ordinate value that is equivalent to screen co-ordinate \a y.
+	*/
+	float	screenToWindowY(float y) const;
+
+
+	/*!
+	\brief
+		Convert a screen relative pixel position to a window co-ordinate position, specified in whichever metrics mode is active.
+
+	\param pt
+		Point object describing the position to be converted
+
+	\return
+		Point object describing a window co-ordinate position that is equivalent to screen co-ordinate \a x.
+	*/
+	Point	screenToWindow(const Point& pt) const;
+
+
+	/*!
+	\brief
+		Convert a pixel screen size to a window based size, specified in whichever metrics mode is active.
+
+	\param sze
+		Size object describing the size to be converted
+
+	\return
+		Size object describing a window based size that is equivalent to screen based size \a sze.
+	*/
+	Size	screenToWindow(const Size& sze) const;
+
+
+	/*!
+	\brief
+		Convert a screen area to a window area, specified in whichever metrics mode is active.
+
+	\param rect
+		Rect object describing the area to be converted
+
+	\return
+		Rect object describing a window area that is equivalent to screen area \a rect.
+	*/
+	Rect	screenToWindow(const Rect& rect) const;
+
+
+	/*************************************************************************
+		Main render function.
+	*************************************************************************/
+	/*!
+	\brief
+		Causes the Window object to render itself and all of it's attached children
+
+	\return
+		Nothing
+	*/
+	void	render(void);
+
+
+	/*!
+	\brief
+		Cause window to update itself and any attached children.  Client code does not need to call this method; to
+		ensure full, and proper updates, call the injectTimePulse methodname method provided by the System class.
+
+	\note
+		The update order is such that 'this' window is updated prior to any child windows, this is so
+		that child windows that access the parent in their update code get the correct updated state.
+
+	\param elapsed
+		float value indicating the number of seconds passed since the last update.
+
+	\return
+		Nothing.
+	*/
+	void	update(float elapsed);
+
+
+protected:
+	/*************************************************************************
+		System object can trigger events directly
+	*************************************************************************/
+	friend	class System;
+
+
+	/*************************************************************************
+		Event trigger methods
+	*************************************************************************/
+	/*!
+	\brief
+		Handler called when the window's size changes.
+
+	\param e
+		WindowEventArgs object whose 'window' pointer field is set to the window that triggered the event.  For this
+		event the trigger window is always 'this'.
+	*/
+	virtual void	onSized(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the window's position changes.
+
+	\param e
+		WindowEventArgs object whose 'window' pointer field is set to the window that triggered the event.  For this
+		event the trigger window is always 'this'.
+	*/
+	virtual void	onMoved(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the window's text is changed.
+
+	\param e
+		WindowEventArgs object whose 'window' pointer field is set to the window that triggered the event.  For this
+		event the trigger window is always 'this'.
+	*/
+	virtual void	onTextChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the window's font is changed.
+
+	\param e
+		WindowEventArgs object whose 'window' pointer field is set to the window that triggered the event.  For this
+		event the trigger window is always 'this'.
+	*/
+	virtual void	onFontChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the window's alpha blend value is changed.
+
+	\param e
+		WindowEventArgs object whose 'window' pointer field is set to the window that triggered the event.  For this
+		event the trigger window is always 'this'.
+	*/
+	virtual void	onAlphaChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the window's client assigned ID is changed.
+
+	\param e
+		WindowEventArgs object whose 'window' pointer field is set to the window that triggered the event.  For this
+		event the trigger window is always 'this'.
+	*/
+	virtual void	onIDChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the window is shown (made visible).
+
+	\param e
+		WindowEventArgs object whose 'window' pointer field is set to the window that triggered the event.  For this
+		event the trigger window is always 'this'.
+	*/
+	virtual void	onShown(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the window is hidden.
+
+	\param e
+		WindowEventArgs object whose 'window' pointer field is set to the window that triggered the event.  For this
+		event the trigger window is always 'this'.
+	*/
+	virtual void	onHidden(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the window is enabled.
+
+	\param e
+		WindowEventArgs object whose 'window' pointer field is set to the window that triggered the event.  For this
+		event the trigger window is always 'this'.
+	*/
+	virtual void	onEnabled(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the window is disabled.
+
+	\param e
+		WindowEventArgs object whose 'window' pointer field is set to the window that triggered the event.  For this
+		event the trigger window is always 'this'.
+	*/
+	virtual void	onDisabled(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the window's active metrics system is changed.
+
+	\param e
+		WindowEventArgs object whose 'window' pointer field is set to the window that triggered the event.  For this
+		event the trigger window is always 'this'.
+	*/
+	virtual void	onMetricsChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the window's setting for being clipped by it's parent is changed.
+
+	\param e
+		WindowEventArgs object whose 'window' pointer field is set to the window that triggered the event.  For this
+		event the trigger window is always 'this'.
+	*/
+	virtual void	onClippingChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the window's setting for being destroyed automatically be it's parent is changed.
+
+	\param e
+		WindowEventArgs object whose 'window' pointer field is set to the window that triggered the event.  For this
+		event the trigger window is always 'this'.
+	*/
+	virtual void	onParentDestroyChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the window's setting for inheriting alpha-blending is changed.
+
+	\param e
+		WindowEventArgs object whose 'window' pointer field is set to the window that triggered the event.  For this
+		event the trigger window is always 'this'.
+	*/
+	virtual void	onInheritsAlphaChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the window's always-on-top setting is changed.
+
+	\param e
+		WindowEventArgs object whose 'window' pointer field is set to the window that triggered the event.  For this
+		event the trigger window is always 'this'.
+	*/
+	virtual void	onAlwaysOnTopChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when this window gains capture of mouse inputs.
+
+	\param e
+		WindowEventArgs object whose 'window' pointer field is set to the window that triggered the event.  For this
+		event the trigger window is always 'this'.
+	*/
+	virtual void	onCaptureGained(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when this window loses capture of mouse inputs.
+
+	\param e
+		WindowEventArgs object whose 'window' pointer field is set to the window that triggered the event.  For this
+		event the trigger window is always 'this'.
+	*/
+	virtual void	onCaptureLost(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when rendering for this window has started.
+
+	\param e
+		WindowEventArgs object whose 'window' pointer field is set to the window that triggered the event.  For this
+		event the trigger window is always 'this'.
+	*/
+	virtual void	onRenderingStarted(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when rendering for this window has ended.
+
+	\param e
+		WindowEventArgs object whose 'window' pointer field is set to the window that triggered the event.  For this
+		event the trigger window is always 'this'.
+	*/
+	virtual void	onRenderingEnded(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the z-order position of this window has changed.
+
+	\param e
+		WindowEventArgs object whose 'window' pointer field is set to the window that triggered the event.  For this
+		event the trigger window is always 'this'.
+	*/
+	virtual void	onZChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when this window's destruction sequence has begun.
+
+	\param e
+		WindowEventArgs object whose 'window' pointer field is set to the window that triggered the event.  For this
+		event the trigger window is always 'this'.
+	*/
+	virtual void	onDestructionStarted(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when this window has become the active window.
+
+	\param e
+		ActivationEventArgs class whose 'otherWindow' field is set to the window that previously was active, or NULL for none.
+	*/
+	virtual void	onActivated(ActivationEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when this window has lost input focus and has been deactivated.
+
+	\param e
+		ActivationEventArgs object whose 'otherWindow' field is set to the window that has now become active, or NULL for none.
+	*/
+	virtual void	onDeactivated(ActivationEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when this window's parent window has been resized.  If this window is the root / GUI Sheet
+		window, this call will be made when the screen size changes.
+
+	\param e
+		WindowEventArgs object whose 'window' pointer field is set the the window that caused the event; this is typically either
+		this window's parent window, or NULL to indicate the screen size has changed.
+	*/
+	virtual void	onParentSized(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when a child window is added to this window.
+
+	\param e
+		WindowEventArgs object whose 'window' pointer field is set to the window that has been added.
+	*/
+	virtual void	onChildAdded(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when a child window is removed from this window.
+
+	\param e
+		WindowEventArgs object whose 'window' pointer field is set the window that has been removed.
+	*/
+	virtual void	onChildRemoved(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the mouse cursor has entered this window's area.
+
+	\param e
+		MouseEventArgs object.  All fields are valid.
+	*/
+	virtual void	onMouseEnters(MouseEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the mouse cursor has left this window's area.
+
+	\param e
+		MouseEventArgs object.  All fields are valid.
+	*/
+	virtual void	onMouseLeaves(MouseEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the mouse cursor has been moved within this window's area.
+
+	\param e
+		MouseEventArgs object.  All fields are valid.
+	*/
+	virtual void	onMouseMove(MouseEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the mouse wheel (z-axis) position changes within this window's area.
+
+	\param e
+		MouseEventArgs object.  All fields are valid.
+	*/
+	virtual void	onMouseWheel(MouseEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when a mouse button has been depressed within this window's area.
+
+	\param e
+		MouseEventArgs object.  All fields are valid.
+	*/
+	virtual void	onMouseButtonDown(MouseEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when a mouse button has been released within this window's area.
+
+	\param e
+		MouseEventArgs object.  All fields are valid.
+	*/
+	virtual void	onMouseButtonUp(MouseEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when a mouse button has been clicked (that is depressed and then released, within a specified time)
+		within this window's area.
+
+	\param e
+		MouseEventArgs object.  All fields are valid.
+	*/
+	virtual void	onMouseClicked(MouseEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when a mouse button has been double-clicked within this window's area.
+
+	\param e
+		MouseEventArgs object.  All fields are valid.
+	*/
+	virtual void	onMouseDoubleClicked(MouseEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when a mouse button has been triple-clicked within this window's area.
+
+	\param e
+		MouseEventArgs object.  All fields are valid.
+	*/
+	virtual void	onMouseTripleClicked(MouseEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when a key as been depressed while this window has input focus.
+
+	\param e
+		KeyEventArgs object whose 'scancode' field is set to the Key::Scan value representing the key that was pressed, and whose
+		'sysKeys' field represents the combination of SystemKey that were active when the event was generated.
+	*/
+	virtual void	onKeyDown(KeyEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when a key as been released while this window has input focus.
+
+	\param e
+		KeyEventArgs object whose 'scancode' field is set to the Key::Scan value representing the key that was released, and whose
+		'sysKeys' field represents the combination of SystemKey that were active when the event was generated.  All other fields should be
+		considered as 'junk'.
+	*/
+	virtual void	onKeyUp(KeyEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when a character-key has been pressed while this window has input focus.
+
+	\param e
+		KeyEventArgs object whose 'codepoint' field is set to the Unicode code point (encoded as utf32) for the character typed, and whose
+		'sysKeys' field represents the combination of SystemKey that were active when the event was generated.  All other fields should be
+		considered as 'junk'.
+	*/
+	virtual void	onCharacter(KeyEventArgs& e);
+
+    /*!
+    \brief
+        Handler called when a DragContainer is dragged over this window.
+
+    \param e
+        DragDropEventArgs object initialised as follows:
+        - window field is normaly set to point to 'this' window.
+        - dragDropItem is a pointer to a DragContainer window that triggered the event.
+    */
+    virtual void    onDragDropItemEnters(DragDropEventArgs& e);
+
+
+    /*!
+    \brief
+        Handler called when a DragContainer is dragged over this window.
+
+    \param e
+        DragDropEventArgs object initialised as follows:
+        - window field is normaly set to point to 'this' window.
+        - dragDropItem is a pointer to a DragContainer window that triggered the event.
+    */
+    virtual void    onDragDropItemLeaves(DragDropEventArgs& e);
+
+
+    /*!
+    \brief
+        Handler called when a DragContainer is dragged over this window.
+
+    \param e
+        DragDropEventArgs object initialised as follows:
+        - window field is normaly set to point to 'this' window.
+        - dragDropItem is a pointer to a DragContainer window that triggered the event.
+    */
+    virtual void    onDragDropItemDropped(DragDropEventArgs& e);
+
+
+	/*************************************************************************
+		Implementation Functions
+	*************************************************************************/
+	/*!
+	\brief
+		Perform actual update processing for this Window.
+
+	\param elapsed
+		float value indicating the number of seconds elapsed since the last update call.
+
+	\return
+		Nothing.
+	*/
+	virtual void	updateSelf(float elapsed);
+
+
+	/*!
+	\brief
+		Perform the actual rendering for this Window.
+
+	\param z
+		float value specifying the base Z co-ordinate that should be used when rendering
+
+	\return
+		Nothing
+	*/
+	virtual	void	drawSelf(float z)	= 0;
+
+
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	virtual bool	testClassName_impl(const String& class_name) const
+	{
+		if (class_name==(const utf8*)"Window")	return true;
+		return false;
+	}
+
+
+	/*!
+	\brief
+		Set the parent window for this window object.
+
+	\param parent
+		Pointer to a Window object that is to be assigned as the parent to this Window.
+
+	\return
+		Nothing
+	*/
+	void	setParent(Window* parent);
+
+
+	/*!
+	\brief
+		Return the pixel Width of the parent element.  This always returns a valid number.
+
+	\return
+		float value that is equal to the pixel width of this Window objects parent
+	*/
+	float	getParentWidth(void) const;
+
+
+	/*!
+	\brief
+		Return the pixel Height of the parent element.  This always returns a valid number.
+
+	\return
+		float value that is equal to the pixel height of this Window objects parent
+	*/
+	float	getParentHeight(void) const;
+
+
+	/*!
+	\brief
+		Return the pixel size of the parent element.  This always returns a valid object.
+
+	\return
+		Size object that describes the pixel dimensions of this Window objects parent
+	*/
+	Size	getParentSize(void) const;
+
+
+	/*!
+	\brief
+		Return a Rect object that describes, in values relative to \a window, the absolute area described by \a rect.
+
+	\param window
+		Pointer to a window object that is to be used as the base for the conversion.  If this is NULL then the size of the
+		display, as returned by the renderer object, is used.
+
+	\param rect
+		Rect object describing the area, in absolute values, that is to be returned as relative values.
+
+	\return
+		Rect object that describes in values relative to \a window, the same area described as absolute values in \a rect.
+	*/
+	Rect	absoluteToRelative_impl(const Window* window, const Rect& rect) const;
+	Size	absoluteToRelative_impl(const Window* window, const Size& sz) const;
+	Point	absoluteToRelative_impl(const Window* window, const Point& pt) const;
+	float	absoluteToRelativeX_impl(const Window* window, float x) const;
+	float	absoluteToRelativeY_impl(const Window* window, float y) const;
+
+
+	/*!
+	\brief
+		Return a Rect object that describes, in absolute values offset from \a window, the relative area described by \a rect.
+
+	\param window
+		Pointer to a window object that is to be used as the base for the conversion.  If this is NULL then the size of the
+		display, as returned by the renderer object, is used.
+
+	\param rect
+		Rect object describing the area, in relative values, that is to be returned as absolute values.
+
+	\return
+		Rect object that describes in absolute values offset from \a window, the same area described as relative values in \a rect.
+	*/
+	Rect	relativeToAbsolute_impl(const Window* window, const Rect& rect) const;
+	Size	relativeToAbsolute_impl(const Window* window, const Size& sz) const;
+	Point	relativeToAbsolute_impl(const Window* window, const Point& pt) const;
+	float	relativeToAbsoluteX_impl(const Window* window, float x) const;
+	float	relativeToAbsoluteY_impl(const Window* window, float y) const;
+
+	Size	getWindowSize_impl(const Window* window) const;
+
+
+	/*!
+	\brief
+		Return the inherited metrics mode.  This is either the metrics mode of our parent, or Relative
+		if we have no parent.
+	*/
+	MetricsMode getInheritedMetricsMode(void) const;
+
+    
+    /*!
+    \brief
+        Fires off a repeated mouse button down event for this window.
+    */
+    void    generateAutoRepeatEvent(MouseButton button);
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	// child stuff
+	typedef	std::vector<Window*>	ChildList;
+	ChildList		d_children;			//!< The list of child Window objects attached to this.
+
+	// general data
+	MetricsMode		d_metricsMode;		//!< Holds the active metrics mode for this window
+	static Window*	d_captureWindow;	//!< Window that has captured inputs
+	Window*			d_oldCapture;		//!< The Window that previously had capture (used for restoreOldCapture mode)
+	Window*			d_parent;			//!< Holds pointer to the parent window.
+	const Font*		d_font;				//!< Holds pointer to the Window objects current Font.
+	String			d_text;				//!< Holds the text / label / caption for this Window.
+	uint			d_ID;				//!< User ID assigned to this Window
+	float			d_alpha;			//!< Alpha transparency setting for the Window
+	Rect			d_abs_area;			//!< This Window objects area (pixels relative to parent)
+	Rect			d_rel_area;			//!< This Window objects area (decimal fractions relative to parent)
+	const Image*	d_mouseCursor;		//!< Holds pointer to the Window objects current mouse cursor image.
+	void*			d_userData;			//!< Holds pointer to some user assigned data.
+
+	// maximum and minimum sizes
+	Size	d_minSize;					//!< current minimum size for the window (this is always stored in pixels).
+	Size	d_maxSize;					//!< current maximum size for the window (this is always stored in pixels).
+
+	// settings
+	bool	d_enabled;					//!< true when Window is enabled
+	bool	d_visible;					//!< true when Window is visible (that is it will be rendered, but may be obscured so no necesarily really visible)
+	bool	d_active;					//!< true when Window is the active Window (receiving inputs).
+	bool	d_clippedByParent;			//!< true when Window will be clipped by parent Window area Rect.
+	bool	d_destroyedByParent;		//!< true when Window will be auto-destroyed by parent.
+	bool	d_alwaysOnTop;				//!< true if Window will be drawn on top of all other Windows
+	bool	d_inheritsAlpha;			//!< true if the Window inherits alpha from the parent Window
+	bool	d_restoreOldCapture;		//!< true if the Window restores capture to the previous window when it releases capture.
+	bool	d_zOrderingEnabled;			//!< true if the Window responds to z-order change requests.
+    bool    d_wantsMultiClicks;         //!< true if the Window wishes to hear about multi-click mouse events.
+    bool    d_distCapturedInputs;       //!< true if unhandled captured inputs should be distributed to child windows.
+    bool    d_riseOnClick;              //!< True if the window should come to the front of the z order in respose to a left mouse button down event.
+
+    // mouse button autorepeat data
+    bool    d_autoRepeat;       //!< true if button will auto-repeat mouse button down events while mouse button is held down,
+    float   d_repeatDelay;      //!< seconds before first repeat event is fired
+    float   d_repeatRate;       //!< secons between further repeats after delay has expired.
+    bool    d_repeating;        //!< implements repeating - is true after delay has elapsed,
+    float   d_repeatElapsed;    //!< implements repeating - tracks time elapsed.
+    MouseButton d_repeatButton; //!< Button we're tracking (implication of this is that we only support one button at a time).
+
+    // Tooltip stuff
+    String   d_tooltipText;     //!< Text string used as tip for this window.
+    Tooltip* d_customTip;       //!< Possible custom Tooltip for this window.
+    bool     d_weOwnTip;        //!< true if this Window created the custom Tooltip.
+    bool     d_inheritsTipText; //!< true if the Window inherits tooltip text from its parent (when none set for itself).
+
+protected:
+	/*************************************************************************
+		Properties for Window base class
+	*************************************************************************/
+	static	WindowProperties::AbsoluteHeight	d_absHeightProperty;
+	static	WindowProperties::AbsoluteMaxSize	d_absMaxSizeProperty;
+	static	WindowProperties::AbsoluteMinSize	d_absMinSizeProperty;
+	static	WindowProperties::AbsolutePosition	d_absPositionProperty;
+	static	WindowProperties::AbsoluteRect		d_absRectProperty;
+	static	WindowProperties::AbsoluteSize		d_absSizeProperty;
+	static	WindowProperties::AbsoluteWidth		d_absWidthProperty;
+	static	WindowProperties::AbsoluteXPosition	d_absXPosProperty;
+	static	WindowProperties::AbsoluteYPosition	d_absYPosProperty;
+	static	WindowProperties::Alpha				d_alphaProperty;
+	static	WindowProperties::AlwaysOnTop		d_alwaysOnTopProperty;
+	static	WindowProperties::ClippedByParent	d_clippedByParentProperty;
+	static	WindowProperties::DestroyedByParent	d_destroyedByParentProperty;
+	static	WindowProperties::Disabled			d_disabledProperty;
+	static	WindowProperties::Font				d_fontProperty;
+	static	WindowProperties::Height			d_heightProperty;
+	static	WindowProperties::ID				d_IDProperty;
+	static	WindowProperties::InheritsAlpha		d_inheritsAlphaProperty;
+	static	WindowProperties::MetricsMode		d_metricsModeProperty;
+	static	WindowProperties::MouseCursorImage	d_mouseCursorProperty;
+	static	WindowProperties::Position			d_positionProperty;
+	static	WindowProperties::Rect				d_rectProperty;
+	static	WindowProperties::RelativeHeight	d_relHeightProperty;
+	static	WindowProperties::RelativeMaxSize	d_relMaxSizeProperty;
+	static	WindowProperties::RelativeMinSize	d_relMinSizeProperty;
+	static	WindowProperties::RelativePosition	d_relPositionProperty;
+	static	WindowProperties::RelativeRect		d_relRectProperty;
+	static	WindowProperties::RelativeSize		d_relSizeProperty;
+	static	WindowProperties::RelativeWidth		d_relWidthProperty;
+	static	WindowProperties::RelativeXPosition	d_relXPosProperty;
+	static	WindowProperties::RelativeYPosition	d_relYPosProperty;
+	static	WindowProperties::RestoreOldCapture	d_restoreOldCaptureProperty;
+	static	WindowProperties::Size				d_sizeProperty;
+	static	WindowProperties::Text				d_textProperty;
+	static	WindowProperties::Visible			d_visibleProperty;
+	static	WindowProperties::Width				d_widthProperty;
+	static	WindowProperties::XPosition			d_xPosProperty;
+	static	WindowProperties::YPosition			d_yPosProperty;
+	static	WindowProperties::ZOrderChangeEnabled	d_zOrderChangeProperty;
+    static  WindowProperties::WantsMultiClickEvents d_wantsMultiClicksProperty;
+    static  WindowProperties::MouseButtonDownAutoRepeat d_autoRepeatProperty;
+    static  WindowProperties::AutoRepeatDelay   d_autoRepeatDelayProperty;
+    static  WindowProperties::AutoRepeatRate    d_autoRepeatRateProperty;
+    static  WindowProperties::DistributeCapturedInputs d_distInputsProperty;
+    static  WindowProperties::CustomTooltipType d_tooltipTypeProperty;
+    static  WindowProperties::Tooltip           d_tooltipProperty;
+    static  WindowProperties::InheritsTooltipText d_inheritsTooltipProperty;
+    static  WindowProperties::RiseOnClick       d_riseOnClickProperty;
+
+
+	/*************************************************************************
+		Private implementation functions
+	*************************************************************************/
+	/*!
+	\brief
+		Add standard CEGUI::Window events
+	*/
+	void	addStandardEvents(void);
+
+	/*!
+	\brief
+		Cleanup child windows
+	*/
+	virtual void	cleanupChildren(void);
+
+	/*!
+	\brief
+		Add given window to child list at an appropriate position
+	*/
+	virtual void	addChild_impl(Window* wnd);
+
+	/*!
+	\brief
+		Remove given window from child list
+	*/
+	virtual void	removeChild_impl(Window* wnd);
+
+	/*!
+	\brief
+		Notify 'this' and all siblings of a ZOrder change event
+	*/
+	virtual void	onZChange_impl(void);
+
+
+	/*!
+	\brief
+		Add standard CEGUI::Window properties.
+	*/
+	void	addStandardProperties(void);
+
+
+    /*!
+    \brief
+        Implements move to fron behavior.
+     */
+    virtual void moveToFront_impl(bool wasClicked);
+
+
+    /*!
+    \brief
+        Implementation of rise on click functionality.
+     */
+    void doRiseOnClick(void);
+
+	
+	/*************************************************************************
+		May not copy or assign Window objects
+	*************************************************************************/
+	Window(const Window& wnd) {}
+	Window& operator=(const Window& wnd) {return *this;}
+
+	/*************************************************************************
+		Private implementation Data
+	*************************************************************************/
+	const String	d_type;			//!< String holding the type name for the Window (is also the name of the WindowFactory that created us)
+	const String	d_name;			//!< The name of the window (GUI system unique).
+};
+
+} // End of  CEGUI namespace section
+
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUIWindow_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIGUISheet.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIGUISheet.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIGUISheet.h	(revision 1092)
@@ -0,0 +1,164 @@
+/************************************************************************
+    filename:   CEGUIGUISheet.h
+    created:    5/6/2004
+    author:     Paul D Turner
+
+    purpose:    Interface to a default window
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIGUISheet_h_
+#define _CEGUIGUISheet_h_
+
+#include "CEGUIWindow.h"
+#include "CEGUIWindowFactory.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+    Window class intended to be used as a simple, generic Window.
+
+    This class does no rendering and so appears totally transparent.  This window defaults
+    to position 0.0f, 0.0f with a size of 1.0f x 1.0f.
+
+    /note
+    The C++ name of this class has been retained for backward compatibility reasons.  The intended usage of
+    this window type has now been extended beyond that of a gui-sheet or root window.
+*/
+class CEGUIEXPORT GUISheet : public Window
+{
+public:
+    /*************************************************************************
+        Constants
+    *************************************************************************/
+    // type name for this widget
+    static const String WidgetTypeName;             //!< The unique typename of this widget
+
+
+    /*************************************************************************
+        Construction and Destruction
+    *************************************************************************/
+    /*!
+    \brief
+        Constructor for GUISheet windows.
+    */
+    GUISheet(const String& type, const String& name) : Window(type, name) {}
+
+
+    /*!
+    \brief
+        Destructor for GUISheet windows.
+    */
+    virtual ~GUISheet(void) {}
+
+
+protected:
+    /*!
+    \brief
+        Perform the actual rendering for this Window.
+
+    \param z
+        float value specifying the base Z co-ordinate that should be used when rendering
+
+    \return
+        Nothing
+    */
+    virtual void    drawSelf(float z) {}
+
+
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	virtual bool	testClassName_impl(const String& class_name) const
+	{
+		if (class_name==(const utf8*)"GUISheet")	return true;
+		return Window::testClassName_impl(class_name);
+	}
+};
+
+
+/*!
+\brief
+    Factory class for producing default windows
+*/
+class GUISheetFactory : public WindowFactory
+{
+public:
+    /*************************************************************************
+        Construction and Destruction
+    *************************************************************************/
+    GUISheetFactory(void) : WindowFactory(GUISheet::WidgetTypeName) { }
+    ~GUISheetFactory(void){}
+
+
+    /*!
+    \brief
+        Create a new Window object of whatever type this WindowFactory produces.
+
+    \param name
+        A unique name that is to be assigned to the newly created Window object
+
+    \return
+        Pointer to the new Window object.
+    */
+    Window* createWindow(const String& name)
+    {
+        GUISheet* wnd = new GUISheet(d_type, name);
+        wnd->initialise();
+        wnd->setMaximumSize(Size(1.0f, 1.0f));
+        wnd->setSize(Size(1.0f, 1.0f));
+
+        return wnd;
+    }
+
+
+    /*!
+    \brief
+        Destroys the given Window object.
+
+    \param window
+        Pointer to the Window object to be destroyed.
+
+    \return
+        Nothing.
+    */
+    virtual void    destroyWindow(Window* window)    { if (window->getType() == d_type) delete window; }
+};
+
+/*!
+\brief
+    typedef for DefaultWindow, which is the new name for GUISheet.
+*/
+typedef GUISheet DefaultWindow;
+
+
+} // End of  CEGUI namespace section
+
+
+#endif  // end of guard _CEGUIGUISheet_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUITextItemProperties.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUITextItemProperties.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUITextItemProperties.h	(revision 1092)
@@ -0,0 +1,120 @@
+/************************************************************************
+	filename: 	CEGUITextItemProperties.h
+	created:	8/4/2005
+	author:		Tomas Lindquist Olsen (based on code by Paul D Turner)
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUITextItemProperties_h_
+#define _CEGUITextItemProperties_h_
+
+#include "CEGUIProperty.h"
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+// Start of TextItemProperties namespace section
+namespace TextItemProperties
+{
+
+/*!
+\brief
+	Property to access the X offset of the text on the item.
+
+	\par Usage:
+		- Name: TextXOffset
+		- Format: "[float]".
+
+	\par Where:
+		- [float] represents the X offset of the text on the item.
+*/
+class TextXOffset : public Property
+{
+public:
+	TextXOffset() : Property(
+		"TextXOffset",
+		"Property to get/set the X offset of the text on the item.  Value is a float.",
+		"0.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the text colour of the item.
+
+	\par Usage:
+		- Name: TextColour
+		- Format: "[aarrggbb]".
+
+	\par Where:
+		- [aarrggbb] represents the text colour of the item.
+*/
+class TextColour : public Property
+{
+public:
+	TextColour() : Property(
+		"TextColour",
+		"Property to get/set the text colour of the item.  Value is a colour.",
+		"00FFFFFF")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the horizontal formatting mode setting.
+
+	\par Usage:
+		- Name: TextFormatting
+		- Format: "[text]".
+
+	\par Where [text] is one of:
+		- "LeftAligned"
+		- "RightAligned"
+		- "HorzCentred"
+		- "HorzJustified"
+		- "WordWrapLeftAligned"
+		- "WordWrapRightAligned"
+		- "WordWrapCentred"
+		- "WordWrapJustified"
+*/
+class TextFormatting : public Property
+{
+public:
+	TextFormatting() : Property(
+		"TextFormatting",
+		"Property to get/set the horizontal formatting mode.  Value is one of the HorzFormatting strings.",
+		"LeftAligned")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+} // End of  TextItemProperties namespace section
+} // End of  CEGUI namespace section
+
+#endif	// end of guard _CEGUITextItemProperties_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIMultiColumnListProperties.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIMultiColumnListProperties.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIMultiColumnListProperties.h	(revision 1092)
@@ -0,0 +1,362 @@
+/************************************************************************
+	filename: 	CEGUIMultiColumnListProperties.h
+	created:	11/7/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to multi-column list properties.
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIMultiColumnListProperties_h_
+#define _CEGUIMultiColumnListProperties_h_
+
+#include "CEGUIProperty.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+// Start of MultiColumnListProperties namespace section
+/*!
+\brief
+	Namespace containing all classes that make up the properties interface for the MultiColumnList class
+*/
+namespace MultiColumnListProperties
+{
+/*!
+\brief
+	Property to access the setting for user sizing of the column headers.
+
+	\par Usage:
+		- Name: ColumnsSizable
+		- Format: "[text]"
+
+	\par Where [Text] is:
+		- "True" to indicate the column headers can be sized by the user.
+		- "False" to indicate the column headers can not be sized by the user.
+*/
+class ColumnsSizable : public Property
+{
+public:
+	ColumnsSizable() : Property(
+		"ColumnsSizable",
+		"Property to get/set the setting for user sizing of the column headers.  Value is either \"True\" or \"False\".",
+		"True")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the setting for user moving of the column headers.
+
+	\par Usage:
+		- Name: ColumnsMovable
+		- Format: "[text]"
+
+	\par Where [Text] is:
+		- "True" to indicate the column headers can be moved by the user.
+		- "False" to indicate the column headers can not be moved by the user.
+*/
+class ColumnsMovable : public Property
+{
+public:
+	ColumnsMovable() : Property(
+		"ColumnsMovable",
+		"Property to get/set the setting for user moving of the column headers.  Value is either \"True\" or \"False\".",
+		"True")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the setting for user modification of the sort column & direction.
+
+	\par Usage:
+		- Name: SortSettingEnabled
+		- Format: "[text]"
+
+	\par Where [Text] is:
+		- "True" to indicate the user may modify the sort column and direction by clicking the header segments.
+		- "False" to indicate the user may not modify the sort column or direction.
+*/
+class SortSettingEnabled : public Property
+{
+public:
+	SortSettingEnabled() : Property(
+		"SortSettingEnabled",
+		"Property to get/set the setting for for user modification of the sort column & direction.  Value is either \"True\" or \"False\".",
+		"True")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the sort direction setting of the list.
+
+	\par Usage:
+		- Name: SortDirection
+		- Format: "[text]"
+
+	\par Where [Text] is one of:
+		- "Ascending"
+		- "Descending"
+		- "None"
+*/
+class SortDirection : public Property
+{
+public:
+	SortDirection() : Property(
+		"SortDirection",
+		"Property to get/set the sort direction setting of the list.  Value is the text of one of the SortDirection enumerated value names.",
+		"None")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the current sort column (via ID code).
+
+	\par Usage:
+		- Name: SortColumnID
+		- Format: "[uint]".
+
+	\par Where:
+		- [uint] is any unsigned integer value.
+*/
+class SortColumnID : public Property
+{
+public:
+	SortColumnID() : Property(
+		"SortColumnID",
+		"Property to get/set the current sort column (via ID code).  Value is an unsigned integer number.",
+		"0")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the nominated selection column (via ID).
+
+	\par Usage:
+		- Name: NominatedSelectionColumnID
+		- Format: "[uint]".
+
+	\par Where:
+		- [uint] is any unsigned integer value representing the ID code of the column to be used.
+*/
+class NominatedSelectionColumnID : public Property
+{
+public:
+	NominatedSelectionColumnID() : Property(
+		"NominatedSelectionColumnID",
+		"Property to get/set the nominated selection column (via ID).  Value is an unsigned integer number.",
+		"0")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the nominated selection row.
+
+	\par Usage:
+		- Name: NominatedSelectionRow
+		- Format: "[uint]".
+
+	\par Where:
+		- [uint] is any unsigned integer value representing the index of the row to be used.
+*/
+class NominatedSelectionRow : public Property
+{
+public:
+	NominatedSelectionRow() : Property(
+		"NominatedSelectionRow",
+		"Property to get/set the nominated selection row.  Value is an unsigned integer number.",
+		"0")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the 'always show' setting for the vertical scroll bar of the list box.
+
+	\par Usage:
+		- Name: ForceVertScrollbar
+		- Format: "[text]"
+
+	\par Where [Text] is:
+		- "True" to indicate that the vertical scroll bar will always be shown.
+		- "False" to indicate that the vertical scroll bar will only be shown when it is needed.
+*/
+class ForceVertScrollbar : public Property
+{
+public:
+	ForceVertScrollbar() : Property(
+		"ForceVertScrollbar",
+		"Property to get/set the 'always show' setting for the vertical scroll bar of the list box.  Value is either \"True\" or \"False\".",
+		"False")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the 'always show' setting for the horizontal scroll bar of the list box.
+
+	\par Usage:
+		- Name: ForceHorzScrollbar
+		- Format: "[text]"
+
+	\par Where [Text] is:
+		- "True" to indicate that the horizontal scroll bar will always be shown.
+		- "False" to indicate that the horizontal scroll bar will only be shown when it is needed.
+*/
+class ForceHorzScrollbar : public Property
+{
+public:
+	ForceHorzScrollbar() : Property(
+		"ForceHorzScrollbar",
+		"Property to get/set the 'always show' setting for the horizontal scroll bar of the list box.  Value is either \"True\" or \"False\".",
+		"False")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the selection mode setting of the list.
+
+	\par Usage:
+		- Name: SelectionMode
+		- Format: "[text]"
+
+	\par Where [Text] is one of:
+		- "RowSingle"
+		- "RowMultiple"
+		- "CellSingle"
+		- "CellMultiple"
+		- "NominatedColumnSingle"
+		- "NominatedColumnMultiple"
+		- "ColumnSingle"
+		- "ColumnMultiple"
+		- "NominatedRowSingle"
+		- "NominatedRowMultiple"
+*/
+class SelectionMode : public Property
+{
+public:
+	SelectionMode() : Property(
+		"SelectionMode",
+		"Property to get/set the selection mode setting of the list.  Value is the text of one of the SelectionMode enumerated value names.",
+		"RowSingle")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access a column.
+
+	\par Usage:
+		- Name: ColumnHeader
+		- Format: "text:[caption] width:[float] id:[uint]"
+
+	\par where:
+		- [caption] is the column header caption text.
+		- [float] is the width of the column.
+		- [uint] is the unique ID for the column.
+*/
+class ColumnHeader : public Property
+{
+public:
+	ColumnHeader() : Property(
+		"ColumnHeader",
+		"Property to set up a column (there is no getter for this property)",
+		"")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+/*!
+\brief
+	Property to access the number of rows in the list (read-only)
+
+	\par Usage:
+		- Name: RowCount
+		- Format: "" (property is read-only).
+*/
+class RowCount : public Property
+{
+public:
+	RowCount() : Property(
+		"RowCount",
+		"Property to access the number of rows in the list (read only)",
+		"")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+} // End of  MultiColumnListProperties namespace section
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIMultiColumnListProperties_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUISlider.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUISlider.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUISlider.h	(revision 1092)
@@ -0,0 +1,336 @@
+/************************************************************************
+	filename: 	CEGUISlider.h
+	created:	13/4/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to base class for Slider widget
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUISlider_h_
+#define _CEGUISlider_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIWindow.h"
+#include "elements/CEGUISliderProperties.h"
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+/*!
+\brief
+	Base class for Slider widgets.
+
+	The slider widget has a default range of 0.0f - 1.0f.  This enables use of the slider value to scale
+	any value needed by way of a simple multiplication.
+*/
+class CEGUIEXPORT Slider : public Window
+{
+public:
+	static const String EventNamespace;				//!< Namespace for global events
+
+
+	/*************************************************************************
+		Event name constants
+	*************************************************************************/
+	static const String EventValueChanged;		//!< Event fired when the slider value changes.
+	static const String EventThumbTrackStarted;	//!< Name of the event fired when the user begins dragging the thumb.
+	static const String EventThumbTrackEnded;		//!< Name of the event fired when the user releases the thumb.
+
+
+	/*************************************************************************
+		Accessors
+	*************************************************************************/
+	/*!
+	\brief
+		return the current slider value.
+
+	\return
+		float value equal to the sliders current value.
+	*/
+	float	getCurrentValue(void) const			{return d_value;}
+
+
+	/*!
+	\brief
+		return the maximum value set for this widget
+
+	\return
+		float value equal to the currently set maximum value for this slider.
+	*/
+	float	getMaxValue(void) const				{return d_maxValue;}
+
+
+	/*!
+	\brief
+		return the current click step setting for the slider.
+
+		The click step size is the amount the slider value will be adjusted when the widget
+		is clicked wither side of the slider thumb.
+
+	\return
+		float value representing the current click step setting.
+	*/
+	float	getClickStep(void) const		{return d_step;}
+
+
+	/*************************************************************************
+		Manipulators
+	*************************************************************************/
+	/*!
+	\brief
+		Initialises the Window based object ready for use.
+
+	\note
+		This must be called for every window created.  Normally this is handled automatically by the WindowFactory for each Window type.
+
+	\return
+		Nothing
+	*/
+	virtual	void	initialise(void);
+
+
+	/*!
+	\brief
+		set the maximum value for the slider.  Note that the minimum value is fixed at 0.
+
+	\param maxVal
+		float value specifying the maximum value for this slider widget.
+
+	\return
+		Nothing.
+	*/
+	void	setMaxValue(float maxVal);
+
+
+	/*!
+	\brief
+		set the current slider value.
+
+	\param value
+		float value specifying the new value for this slider widget.
+
+	\return
+		Nothing.
+	*/
+	void	setCurrentValue(float value);
+
+
+	/*!
+	\brief
+		set the current click step setting for the slider.
+
+		The click step size is the amount the slider value will be adjusted when the widget
+		is clicked wither side of the slider thumb.
+
+	\param step
+		float value representing the click step setting to use.
+
+	\return
+		Nothing.
+	*/
+	void	setClickStep(float step)		{d_step = step;}
+
+
+	/*************************************************************************
+		Construction / Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Slider base class constructor
+	*/
+	Slider(const String& type, const String& name);
+
+
+	/*!
+	\brief
+		Slider base class destructor
+	*/
+	virtual ~Slider(void);
+
+
+protected:
+	/*************************************************************************
+		Implementation Functions
+	*************************************************************************/
+	/*!
+	\brief
+		Add slider specific events
+	*/
+	void	addSliderEvents(void);
+
+
+	/*!
+	\brief
+		create a Thumb based widget to use as the thumb for this slider.
+	*/
+	virtual Thumb*	createThumb(void) const		= 0;
+
+
+	/*!
+	\brief
+		layout the slider component widgets
+	*/
+	virtual void	layoutComponentWidgets(void)	= 0;
+
+
+	/*!
+	\brief
+		update the size and location of the thumb to properly represent the current state of the slider
+	*/
+	virtual void	updateThumb(void)	= 0;
+
+
+	/*!
+	\brief
+		return value that best represents current slider value given the current location of the thumb.
+
+	\return
+		float value that, given the thumb widget position, best represents the current value for the slider.
+	*/
+	virtual float	getValueFromThumb(void) const	= 0;
+
+
+	/*!
+	\brief
+		Given window location \a pt, return a value indicating what change should be 
+		made to the slider.
+
+	\param pt
+		Point object describing a pixel position in window space.
+
+	\return
+		- -1 to indicate slider should be moved to a lower setting.
+		-  0 to indicate slider should not be moved.
+		- +1 to indicate slider should be moved to a higher setting.
+	*/
+	virtual float	getAdjustDirectionFromPoint(const Point& pt) const	= 0;
+
+
+	/*!
+	\brief
+		handler function for when thumb moves.
+	*/
+	bool	handleThumbMoved(const EventArgs& e);
+
+
+	/*!
+	\brief
+		handler function for when thumb tracking begins
+	*/
+	bool	handleThumbTrackStarted(const EventArgs& e);
+
+
+	/*!
+	\brief
+		handler function for when thumb tracking begins
+	*/
+	bool	handleThumbTrackEnded(const EventArgs& e);
+
+
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	virtual bool	testClassName_impl(const String& class_name) const
+	{
+		if (class_name==(const utf8*)"Slider")	return true;
+		return Window::testClassName_impl(class_name);
+	}
+
+
+	/*************************************************************************
+		New event handlers for slider widget
+	*************************************************************************/
+	/*!
+	\brief
+		Handler triggered when the slider value changes
+	*/
+	virtual void	onValueChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler triggered when the user begins to drag the slider thumb. 
+	*/
+	virtual void	onThumbTrackStarted(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler triggered when the slider thumb is released
+	*/
+	virtual void	onThumbTrackEnded(WindowEventArgs& e);
+
+
+	/*************************************************************************
+		Overridden event handlers
+	*************************************************************************/
+	virtual void	onMouseButtonDown(MouseEventArgs& e);
+	virtual void	onSized(WindowEventArgs& e);
+	virtual	void	onMouseWheel(MouseEventArgs& e);
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	float	d_value;		//!< current slider value
+	float	d_maxValue;		//!< slider maximum value (minimum is fixed at 0)
+	float	d_step;			//!< amount to adjust slider by when clicked (and not dragged).
+
+	// Pointers to the controls that make up the slider
+	Thumb*	d_thumb;		//!< widget used to represent the 'thumb' of the slider.
+
+
+private:
+	/*************************************************************************
+		Static Properties for this class
+	*************************************************************************/
+	static SliderProperties::CurrentValue	d_currentValueProperty;
+	static SliderProperties::MaximumValue	d_maximumValueProperty;
+	static SliderProperties::ClickStepSize	d_clickStepSizeProperty;
+
+
+	/*************************************************************************
+		Private methods
+	*************************************************************************/
+	void	addSliderProperties(void);
+};
+
+} // End of  CEGUI namespace section
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUISlider_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUITitlebarProperties.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUITitlebarProperties.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUITitlebarProperties.h	(revision 1092)
@@ -0,0 +1,98 @@
+/************************************************************************
+	filename: 	CEGUITitlebarProperties.h
+	created:	10/7/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface for title bar property classes
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUITitlebarProperties_h_
+#define _CEGUITitlebarProperties_h_
+
+#include "CEGUIProperty.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+// Start of TitlebarProperties namespace section
+/*!
+\brief
+	Namespace containing all classes that make up the properties interface for the Titlebar class
+*/
+namespace TitlebarProperties
+{
+/*!
+\brief
+	Property to access the state of the dragging enabled setting for the Titlebar.
+
+	\par Usage:
+		- Name: DraggingEnabled
+		- Format: "[text]".
+
+	\par Where [Text] is:
+		- "True" to indicate that drag moving is enabled.
+		- "False" to indicate that drag moving is disabled.
+*/
+class DraggingEnabled : public Property
+{
+public:
+	DraggingEnabled() : Property(
+		"DraggingEnabled",
+		"Property to get/set the state of the dragging enabled setting for the Titlebar.  Value is either \"True\" or \"False\".",
+		"True")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to colour used for rendering the caption text.
+
+	\par Usage:
+		- Name: CaptionColour
+		- Format: "aarrggbb".
+
+	\par Where:
+		- aarrggbb is the ARGB colour value to be used.
+*/
+class CaptionColour : public Property
+{
+public:
+	CaptionColour() : Property(
+		"CaptionColour",
+		"Property to get/set the colour used for rendering the caption text.  Value is \"aarrggbb\" (hex).",
+		"FF000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+} // End of  TitlebarProperties namespace section
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUITitlebarProperties_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUITabControlProperties.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUITabControlProperties.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUITabControlProperties.h	(revision 1092)
@@ -0,0 +1,200 @@
+/************************************************************************
+	filename: 	CEGUITabControlProperties.h
+	created:	08/08/2004
+	author:		Steve Streeting
+	
+	purpose:	Interface to TabControl property classes
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUITabControlProperties_h_
+#define _CEGUITabControlProperties_h_
+
+#include "CEGUIProperty.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+// Start of TabControlProperties namespace section
+/*!
+\brief
+	Namespace containing all classes that make up the properties interface for the Listbox class
+*/
+namespace TabControlProperties
+{
+/*!
+\brief
+	Property to access the tab height setting of the tab control.
+
+	\par Usage:
+		- Name: TabHeight
+		- Format: "[float]"
+
+*/
+class TabHeight : public Property
+{
+public:
+	TabHeight() : Property(
+		"TabHeight",
+		"Property to get/set the height of the tabs.",
+		"")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+
+	// default depends upon current metrics mode
+	bool	isDefault(const PropertyReceiver* receiver) const;
+	String	getDefault(const PropertyReceiver* receiver) const;
+};
+
+/*!
+\brief
+Property to access the absolute tab height setting of the tab control.
+
+\par Usage:
+- Name: AbsoluteTabHeight
+- Format: "[float]"
+
+*/
+class AbsoluteTabHeight : public Property
+{
+public:
+    AbsoluteTabHeight() : Property(
+		"AbsoluteTabHeight",
+		"Property to get/set the absolute height of the tabs.",
+		"")
+	{}
+
+    String	get(const PropertyReceiver* receiver) const;
+    void	set(PropertyReceiver* receiver, const String& value);
+
+	// default depends upon size of parent
+	bool	isDefault(const PropertyReceiver* receiver) const;
+	String	getDefault(const PropertyReceiver* receiver) const;
+};
+
+/*!
+\brief
+Property to access the relative tab height setting of the tab control.
+
+\par Usage:
+- Name: RelativeTabHeight
+- Format: "[float]"
+
+*/
+class RelativeTabHeight : public Property
+{
+public:
+    RelativeTabHeight() : Property(
+		"RelativeTabHeight",
+		"Property to get/set the relative height of the tabs.",
+		"0.050000")
+	{}
+
+    String	get(const PropertyReceiver* receiver) const;
+    void	set(PropertyReceiver* receiver, const String& value);
+};
+
+/*!
+\brief
+Property to access the tab text padding setting of the tab control.
+
+\par Usage:
+- Name: TabTextPadding
+- Format: "[float]"
+
+*/
+class TabTextPadding : public Property
+{
+public:
+    TabTextPadding() : Property(
+		"TabTextPadding", 
+		"Property to get/set the padding either side of the tab buttons.",
+		"")
+	{}
+
+    String	get(const PropertyReceiver* receiver) const;
+    void	set(PropertyReceiver* receiver, const String& value);
+
+	// default depends upon current metrics mode
+	bool	isDefault(const PropertyReceiver* receiver) const;
+	String	getDefault(const PropertyReceiver* receiver) const;
+};
+
+/*!
+\brief
+Property to access the absolute tab text padding setting of the tab control.
+
+\par Usage:
+- Name: AbsoluteTabTextPadding
+- Format: "[float]"
+
+*/
+class AbsoluteTabTextPadding : public Property
+{
+public:
+    AbsoluteTabTextPadding() : Property(
+		"AbsoluteTabTextPadding",
+		"Property to get/set the absolute padding either side of the tab buttons.",
+		"5")
+	{}
+
+    String	get(const PropertyReceiver* receiver) const;
+    void	set(PropertyReceiver* receiver, const String& value);
+};
+
+/*!
+\brief
+Property to access the relative tab text padding setting of the tab control.
+
+\par Usage:
+- Name: RelativeTabTextPadding
+- Format: "[float]"
+
+*/
+class RelativeTabTextPadding : public Property
+{
+public:
+    RelativeTabTextPadding() : Property(
+		"RelativeTabTextPadding",
+		"Property to get/set the relative padding either side of the tab buttons.",
+		"")
+	{}
+
+    String	get(const PropertyReceiver* receiver) const;
+    void	set(PropertyReceiver* receiver, const String& value);
+
+	// default depends upon size of parent
+	bool	isDefault(const PropertyReceiver* receiver) const;
+	String	getDefault(const PropertyReceiver* receiver) const;
+};
+
+
+
+
+
+} // End of  TabControlProperties namespace section
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIListboxProperties_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIScrollablePane.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIScrollablePane.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIScrollablePane.h	(revision 1092)
@@ -0,0 +1,578 @@
+/************************************************************************
+	filename: 	CEGUIScrollablePane.h
+	created:	1/3/2005
+	author:		Paul D Turner
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIScrollablePane_h_
+#define _CEGUIScrollablePane_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIWindow.h"
+#include "elements/CEGUIScrollablePaneProperties.h"
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+    /*!
+    \brief
+        Base class for the ScrollablePane widget.
+
+        The ScrollablePane widget allows child windows to be attached which cover an area
+        larger than the ScrollablePane itself and these child windows can be scrolled into
+        view using the scrollbars of the scrollable pane.
+    */
+    class CEGUIEXPORT ScrollablePane : public Window
+    {
+    public:
+        /*************************************************************************
+            Constants
+        *************************************************************************/
+        static const String EventNamespace;                 //!< Namespace for global events
+        static const String EventContentPaneChanged;        //!< Event fired when an area on the content pane has been updated.
+        static const String EventVertScrollbarModeChanged;	//!< Event triggered when the vertical scroll bar 'force' setting changes.
+        static const String EventHorzScrollbarModeChanged;	//!< Event triggered when the horizontal scroll bar 'force' setting changes.
+        static const String EventAutoSizeSettingChanged;    //!< Event fired when the auto size setting changes.
+        static const String EventContentPaneScrolled;       //!< Event fired when the pane gets scrolled.
+
+        /*************************************************************************
+            Construction / Destruction
+        *************************************************************************/
+        /*!
+        \brief
+            Constructor for the ScrollablePane base class.
+        */
+        ScrollablePane(const String& type, const String& name);
+
+        /*!
+        \brief
+            Destructor for the ScrollablePane base class.
+        */
+        ~ScrollablePane(void);
+
+        /*************************************************************************
+        	Public interface
+        *************************************************************************/
+        /*!
+        \brief
+            Returns a pointer to the window holding the pane contents.
+
+            The purpose of this is so that attached windows may be inspected,
+            client code may not modify the returned window in any way.
+
+        \return
+            Pointer to the ScrolledContainer that is acting as the container for the
+            scrollable pane content.  The returned window is const, client code should
+            not modify the ScrolledContainer settings directly.
+        */
+        const ScrolledContainer* getContentPane(void) const;
+
+        /*!
+        \brief
+            Return whether the vertical scroll bar is always shown.
+
+        \return
+            - true if the scroll bar will always be shown even if it is not required.
+            - false if the scroll bar will only be shown when it is required.
+        */
+        bool	isVertScrollbarAlwaysShown(void) const;
+        /*!
+        \brief
+            Set whether the vertical scroll bar should always be shown.
+
+        \param setting
+            - true if the vertical scroll bar should be shown even when it is not required.
+            - false if the vertical scroll bar should only be shown when it is required.
+
+        \return
+            Nothing.
+        */
+        void	setShowVertScrollbar(bool setting);
+
+        /*!
+        \brief
+            Return whether the horizontal scroll bar is always shown.
+
+        \return
+            - true if the scroll bar will always be shown even if it is not required.
+            - false if the scroll bar will only be shown when it is required.
+        */
+        bool	isHorzScrollbarAlwaysShown(void) const;
+
+        /*!
+        \brief
+            Set whether the horizontal scroll bar should always be shown.
+
+        \param setting
+            - true if the horizontal scroll bar should be shown even when it is not required.
+            - false if the horizontal scroll bar should only be shown when it is required.
+
+        \return
+            Nothing.
+        */
+        void	setShowHorzScrollbar(bool setting);
+
+        /*!
+        \brief
+            Return whether the content pane is auto sized.
+
+        \return
+            - true to indicate the content pane will automatically resize itself.
+            - false to indicate the content pane will not automatically resize itself.
+        */
+        bool isContentPaneAutoSized(void) const;
+
+        /*!
+        \brief
+            Set whether the content pane should be auto-sized.
+
+        \param setting
+            - true to indicate the content pane should automatically resize itself.
+            - false to indicate the content pane should not automatically resize itself.
+
+        \return 
+            Nothing.
+        */
+        void setContentPaneAutoSized(bool setting);
+
+        /*!
+        \brief
+            Return the current content pane area for the ScrollablePane.
+
+        \return
+            Rect object that details the current pixel extents of the content
+            pane attached to this ScrollablePane.
+        */
+        const Rect& getContentPaneArea(void) const;
+
+        /*!
+        \brief
+            Set the current content pane area for the ScrollablePane.
+
+        \note
+            If the ScrollablePane is configured to auto-size the content pane
+            this call will have no effect.
+
+        \param area
+            Rect object that details the pixel extents to use for the content
+            pane attached to this ScrollablePane.
+
+        \return
+            Nothing.
+        */
+        void setContentPaneArea(const Rect& area);
+
+        /*!
+        \brief
+            Returns the horizontal scrollbar step size as a fraction of one
+            complete view page.
+
+        \return
+            float value specifying the step size where 1.0f would be the width of
+            the viewing area.
+        */
+        float getHorizontalStepSize(void) const;
+
+        /*!
+        \brief
+            Sets the horizontal scrollbar step size as a fraction of one
+            complete view page.
+
+        \param step
+            float value specifying the step size, where 1.0f would be the width of
+            the viewing area.
+
+        \return
+            Nothing.
+        */
+        void setHorizontalStepSize(float step);
+
+        /*!
+        \brief
+            Returns the horizontal scrollbar overlap size as a fraction of one
+            complete view page.
+
+        \return
+            float value specifying the overlap size where 1.0f would be the width of
+            the viewing area.
+        */
+        float getHorizontalOverlapSize(void) const;
+
+        /*!
+        \brief
+            Sets the horizontal scrollbar overlap size as a fraction of one
+            complete view page.
+
+        \param overlap
+            float value specifying the overlap size, where 1.0f would be the width of
+            the viewing area.
+
+        \return
+            Nothing.
+        */
+        void setHorizontalOverlapSize(float overlap);
+
+        /*!
+        \brief
+            Returns the horizontal scroll position as a fraction of the
+            complete scrollable width.
+
+        \return
+            float value specifying the scroll position.
+        */
+        float getHorizontalScrollPosition(void) const;
+
+        /*!
+        \brief
+            Sets the horizontal scroll position as a fraction of the
+            complete scrollable width.
+
+        \param position
+            float value specifying the new scroll position.
+
+        \return
+            Nothing.
+        */
+        void setHorizontalScrollPosition(float position);
+
+        /*!
+        \brief
+            Returns the vertical scrollbar step size as a fraction of one
+            complete view page.
+
+        \return
+            float value specifying the step size where 1.0f would be the height of
+            the viewing area.
+        */
+        float getVerticalStepSize(void) const;
+
+        /*!
+        \brief
+            Sets the vertical scrollbar step size as a fraction of one
+            complete view page.
+
+        \param step
+            float value specifying the step size, where 1.0f would be the height of
+            the viewing area.
+
+        \return
+            Nothing.
+        */
+        void setVerticalStepSize(float step);
+
+        /*!
+        \brief
+            Returns the vertical scrollbar overlap size as a fraction of one
+            complete view page.
+
+        \return
+            float value specifying the overlap size where 1.0f would be the height of
+            the viewing area.
+        */
+        float getVerticalOverlapSize(void) const;
+
+        /*!
+        \brief
+            Sets the vertical scrollbar overlap size as a fraction of one
+            complete view page.
+
+        \param overlap
+            float value specifying the overlap size, where 1.0f would be the height of
+            the viewing area.
+
+        \return
+            Nothing.
+        */
+        void setVerticalOverlapSize(float overlap);
+
+        /*!
+        \brief
+            Returns the vertical scroll position as a fraction of the
+            complete scrollable height.
+
+        \return
+            float value specifying the scroll position.
+        */
+        float getVerticalScrollPosition(void) const;
+
+        /*!
+        \brief
+            Sets the vertical scroll position as a fraction of the
+            complete scrollable height.
+
+        \param position
+            float value specifying the new scroll position.
+
+        \return
+            Nothing.
+        */
+        void setVerticalScrollPosition(float position);
+
+        /*************************************************************************
+            Overridden from Window
+        *************************************************************************/
+        void initialise(void);
+
+    protected:
+        /*************************************************************************
+        	Abstract interface
+        *************************************************************************/
+        /*!
+        \brief
+            Create a Scrollbar based widget to be used as the horizontal scrollbar.
+
+        \param name
+            String object holding the name that must be used when creating the widget.
+
+        \return
+            Scrollbar based object.
+        */
+        virtual Scrollbar* createHorizontalScrollbar(const String& name) const = 0;
+
+        /*!
+        \brief
+            Create a Scrollbar based widget to be used as the vertical scrollbar.
+
+        \param name
+            String object holding the name that must be used when creating the widget.
+
+        \return
+            Scrollbar based object.
+        */
+        virtual Scrollbar* createVerticalScrollbar(const String& name) const = 0;
+
+        /*!
+        \brief
+            Perform look and feel specific layout of the component widgets.
+        */
+        virtual void layoutComponentWidgets(void) = 0;
+
+        /*!
+        \brief
+            Return a Rect that described the pane's viewable area, relative
+            to this Window, in pixels.
+
+        \return
+            Rect object describing the ScrollablePane's viewable area.
+        */
+        virtual Rect getViewableArea(void) const = 0;
+
+        /*************************************************************************
+        	Implementation Methods
+        *************************************************************************/
+        /*!
+        \brief
+            Add ScrollablePane specific events
+        */
+        void addScrollablePaneEvents(void);
+
+        /*!
+	    \brief
+		    display required integrated scroll bars according to current size of
+            the ScrollablePane view area and the size of the attached ScrolledContainer.
+	    */
+	    void configureScrollbars(void);
+
+        /*!
+        \brief
+            Return whether the vertical scrollbar is needed.
+
+        \return
+            - true if the scrollbar is either needed or forced via setting.
+            - false if the scrollbar should not be shown.
+        */
+        bool isVertScrollbarNeeded(void) const;
+
+        /*!
+        \brief
+            Return whether the horizontal scrollbar is needed.
+
+        \return
+            - true if the scrollbar is either needed or forced via setting.
+            - false if the scrollbar should not be shown.
+        */
+        bool isHorzScrollbarNeeded(void) const;
+
+        /*!
+        \brief
+            Update the content container position according to the current 
+            state of the widget (like scrollbar positions, etc).
+        */
+        void updateContainerPosition(void);
+
+
+		/*!
+		\brief
+			Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+		\param class_name
+			The class name that is to be checked.
+
+		\return
+			true if this window was inherited from \a class_name. false if not.
+		*/
+		virtual bool	testClassName_impl(const String& class_name) const
+		{
+			if (class_name==(const utf8*)"ScrollablePane")	return true;
+			return Window::testClassName_impl(class_name);
+		}
+
+
+        /*************************************************************************
+        	Event triggers
+        *************************************************************************/
+        /*!
+        \brief
+            Event trigger method called when some pane content has changed size
+            or location.
+
+        \param e
+            WindowEventArgs object.
+
+        \return
+            Nothing.
+        */
+        virtual void onContentPaneChanged(WindowEventArgs& e);
+
+        /*!
+        \brief
+            Event trigger method called when the setting that controls whether the 
+            vertical scrollbar is always shown or not, is changed.
+
+        \param e
+            WindowEventArgs object.
+
+        \return
+            Nothing.
+        */
+        virtual void onVertScrollbarModeChanged(WindowEventArgs& e);
+
+        /*!
+        \brief
+            Event trigger method called when the setting that controls whether the 
+            horizontal scrollbar is always shown or not, is changed.
+
+        \param e
+            WindowEventArgs object.
+
+        \return
+            Nothing.
+        */
+        virtual void onHorzScrollbarModeChanged(WindowEventArgs& e);
+
+        /*!
+        \brief
+            Notification method called whenever the setting that controls whether
+            the content pane is automatically sized is changed.
+
+        \param e
+            WindowEventArgs object.
+
+        \return
+            Nothing.
+        */
+        virtual void onAutoSizeSettingChanged(WindowEventArgs& e);
+
+        /*!
+        \brief
+            Notification method called whenever the content pane is scrolled via
+            changes in the scrollbar positions.
+
+        \param e
+            WindowEventArgs object.
+
+        \return
+            Nothing.
+        */
+        virtual void onContentPaneScrolled(WindowEventArgs& e);
+
+        /*************************************************************************
+        	Event handler methods
+        *************************************************************************/
+        /*!
+        \brief
+            Handler method which gets subscribed to the scrollbar position change
+            events.
+        */
+        bool handleScrollChange(const EventArgs&  e);
+
+        /*!
+        \brief
+            Handler method which gets subscribed to the ScrolledContainer content
+            change events.
+        */
+        bool handleContentAreaChange(const EventArgs& e);
+
+        /*!
+        \brief
+            Handler method which gets subscribed to the ScrolledContainer auto-size
+            setting changes.
+        */
+        bool handleAutoSizePaneChanged(const EventArgs& e);
+
+        /*************************************************************************
+        	Overridden from Window
+        *************************************************************************/
+        void addChild_impl(Window* wnd);
+        void removeChild_impl(Window* wnd);
+        void onSized(WindowEventArgs& e);
+        void onMouseWheel(MouseEventArgs& e);
+
+        /*************************************************************************
+        	Data fields
+        *************************************************************************/
+        bool    d_forceVertScroll;		//!< true if vertical scrollbar should always be displayed
+        bool    d_forceHorzScroll;		//!< true if horizontal scrollbar should always be displayed
+        Rect    d_contentRect;          //!< holds content area so we can track changes.
+        float   d_vertStep;             //!< vertical scroll step fraction.
+        float   d_vertOverlap;          //!< vertical scroll overlap fraction.
+        float   d_horzStep;             //!< horizontal scroll step fraction.
+        float   d_horzOverlap;          //!< horizontal scroll overlap fraction.
+
+        // component widgets
+        Scrollbar*  d_vertScrollbar;        //!< Scrollbar widget used for vertical scrolling.
+        Scrollbar*  d_horzScrollbar;        //!< Scrollbar widget used for horizontal scrolling.
+        ScrolledContainer*  d_container;    //!< ScrolledContainer widget holding the attached widgets.
+
+    private:
+	    /*************************************************************************
+		    Static Properties for this class
+	    *************************************************************************/
+        static ScrollablePaneProperties::ForceHorzScrollbar     d_horzScrollbarProperty;
+        static ScrollablePaneProperties::ForceVertScrollbar     d_vertScrollbarProperty;
+	    static ScrollablePaneProperties::ContentPaneAutoSized	d_autoSizedProperty;
+	    static ScrollablePaneProperties::ContentArea            d_contentAreaProperty;
+        static ScrollablePaneProperties::HorzStepSize           d_horzStepProperty;
+        static ScrollablePaneProperties::HorzOverlapSize        d_horzOverlapProperty;
+        static ScrollablePaneProperties::HorzScrollPosition     d_horzScrollPositionProperty;
+        static ScrollablePaneProperties::VertStepSize           d_vertStepProperty;
+        static ScrollablePaneProperties::VertOverlapSize        d_vertOverlapProperty;
+        static ScrollablePaneProperties::VertScrollPosition     d_vertScrollPositionProperty;
+
+	    /*************************************************************************
+		    Private methods
+	    *************************************************************************/
+	    void addScrollablePaneProperties(void);
+    };
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIScrollablePane_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIStaticImage.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIStaticImage.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIStaticImage.h	(revision 1092)
@@ -0,0 +1,353 @@
+/************************************************************************
+	filename: 	CEGUIStaticImage.h
+	created:	4/6/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface for the static image widget.
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIStaticImage_h_
+#define _CEGUIStaticImage_h_
+
+#include "elements/CEGUIStatic.h"
+#include "CEGUIRenderableImage.h"
+#include "elements/CEGUIStaticImageProperties.h"
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Static image widget class.
+
+	This base class performs it's own rendering.  There is no need to override this widget to perform rendering
+	of static images.
+*/
+class CEGUIEXPORT StaticImage : public Static
+{
+public:
+	static const String EventNamespace;				//!< Namespace for global events
+
+
+	/*************************************************************************
+		Formatting Enumerations
+	*************************************************************************/
+	/*!
+	\brief
+		Enumeration of horizontal formatting options for static image widgets
+	*/
+	enum HorzFormatting
+	{
+		LeftAligned,	//!< Image will be rendered at it's natural width, with it's left edge aligned with the left edge of the widget.
+		RightAligned,	//!< Image will be rendered at it's natural width, with it's right edge aligned with the right edge of the widget.
+		HorzCentred,	//!< Image will be rendered at it's natural width, horizontally centred within the widget.
+		HorzStretched,	//!< Image will be horizontally stretched to cover the entire width of the widget.
+		HorzTiled		//!< Image will be tiled horizontally across the width of the widget.  The rightmost tile may be clipped.
+	};
+
+
+	/*!
+	\brief
+		Enumeration of vertical formatting options for a static image widgets
+	*/
+	enum VertFormatting
+	{
+		TopAligned,		//!< Image will be rendered at it's natural height, with it's top edge aligned with the top edge of the widget.
+		BottomAligned,	//!< Image will be rendered at it's natural height, with it's bottom edge aligned with the bottom edge of the widget.
+		VertCentred,	//!< Image will be rendered at it's natural height, vertically centred within the widget.
+		VertStretched,	//!< Image will be vertically stretched to cover the entire height of the widget.
+		VertTiled		//!< Image will be tiled vertically down the height of the widget.  The bottommost tile may be clipped.
+	};
+
+
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for StaticImage widgets.
+	*/
+	StaticImage(const String& type, const String& name);
+
+
+	/*!
+	\brief
+		Destructor for StaticImage widgets.
+	*/
+	virtual ~StaticImage(void);
+
+
+	/*************************************************************************
+		Accessors
+	*************************************************************************/
+	/*!
+	\brief
+		Return a pointer to the current image displayed by this static image widget.
+
+	\return
+		Pointer to the Image object that is used to render this widget, or NULL for none.
+	*/
+	const Image*	getImage(void) const		{return d_image.getImage();}
+
+
+	/*!
+	\brief
+		Return a ColourRect object containing the colours used when rendering this widget.
+
+	\return
+		ColourRect object initialised with the colours used when rendering the image for this widget.
+	*/
+	ColourRect	getImageColours(void) const		{return d_imageCols;}
+
+	
+	/*!
+	\brief
+		Return the current horizontal formatting option set for this widget.
+
+	\return
+		One of the StaticImage::HorzFormatting enumerated values specifying the horizontal formatting currently set.
+	*/
+	HorzFormatting	getHorizontalFormatting(void) const		{return	(HorzFormatting)d_image.getHorzFormatting();}
+
+
+	/*!
+	\brief
+		Return the current vertical formatting option set for this widget.
+
+	\return
+		One of the StaticImage::VertFormatting enumerated values specifying the vertical formatting currently set.
+	*/
+	VertFormatting	getVerticalFormatting(void) const		{return	(VertFormatting)d_image.getVertFormatting();}
+
+
+	/*************************************************************************
+		Manipulators
+	*************************************************************************/
+	/*!
+	\brief
+		Set the Image object to be drawn by this widget.
+
+	\param image
+		Pointer to the Image object to be rendered.  Can be NULL to specify no image is to be rendered.
+	
+	\return
+		Nothing.
+	*/
+	void	setImage(const Image* image);
+
+
+	/*!
+	\brief
+		Set the Image object to be drawn by this widget.
+
+	\param imageset
+		String object specifying the name of the Imageset that holds the required image.
+
+	\param image
+		Name of the Image on the specified Imageset that is to be used.
+	
+	\return
+		Nothing.
+
+	\exception UnknownObjectException	thrown if Imageset \a imageset does not exist in the system or if \a imageset contains no Image named \a image.
+	*/
+	void	setImage(const String& imageset, const String& image);
+
+
+	/*!
+	\brief
+		Sets the colours to be applied when rendering the image.
+
+	\param colours
+		ColourRect object describing the colours to be used.
+
+	\return 
+		Nothing.
+	*/
+	void	setImageColours(const ColourRect& colours);
+
+
+	/*!
+	\brief
+		Sets the colours to be applied when rendering the image.
+
+	\param top_left_colour
+		Colour to be applied to the top-left corner of each Image used in the image.
+
+	\param top_right_colour
+		Colour to be applied to the top-right corner of each Image used in the image.
+
+	\param bottom_left_colour
+		Colour to be applied to the bottom-left corner of each Image used in the image.
+
+	\param bottom_right_colour
+		Colour to be applied to the bottom-right corner of each Image used in the image.
+
+	\return 
+		Nothing.
+	*/
+	void	setImageColours(const colour& top_left_colour, const colour& top_right_colour, const colour& bottom_left_colour, const colour& bottom_right_colour);
+
+
+	/*!
+	\brief
+		Sets the colour to be applied when rendering the image.
+
+	\param col
+		colour value to be used when rendering.
+
+	\return
+		Nothing.
+	*/
+	void	setImageColours(const colour& col)		{setImageColours(col, col, col, col);}
+
+
+	/*!
+	\brief
+		Set the formatting required for the image.
+
+	\param h_fmt
+		One of the HorzFormatting enumerated values specifying the formatting required.
+
+	\param v_fmt
+		One of the VertFormatting enumerated values specifying the formatting required.
+
+	\return
+		Nothing
+	*/
+	void	setFormatting(HorzFormatting h_fmt, VertFormatting v_fmt);
+
+
+	/*!
+	\brief
+		Set the formatting required for the image.
+
+	\param v_fmt
+		One of the VertFormatting enumerated values specifying the formatting required.
+
+	\return
+		Nothing
+	*/
+	void	setVerticalFormatting(VertFormatting v_fmt);
+
+
+	/*!
+	\brief
+		Set the formatting required for the image.
+
+	\param h_fmt
+		One of the HorzFormatting enumerated values specifying the formatting required.
+
+	\return
+		Nothing
+	*/
+	void	setHorizontalFormatting(HorzFormatting h_fmt);
+
+
+protected:
+	/*************************************************************************
+		Overridden from base class
+	*************************************************************************/
+	/*!
+	\brief
+		Perform the actual rendering for this Window.
+
+	\param z
+		float value specifying the base Z co-ordinate that should be used when rendering
+
+	\return
+		Nothing
+	*/
+	virtual	void	drawSelf(float z);
+
+	
+	/*************************************************************************
+		Event handling
+	*************************************************************************/
+	virtual void	onSized(WindowEventArgs& e);
+	virtual void	onAlphaChanged(WindowEventArgs& e);
+	virtual void	onStaticFrameChanged(WindowEventArgs& e);
+
+
+	/*************************************************************************
+		Implementation Methods
+	*************************************************************************/
+	/*!
+	\brief
+		update the internal RenderableImage with currently set colours and
+		alpha settings.
+	*/
+	void	updateRenderableImageColours(void);
+
+
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	virtual bool	testClassName_impl(const String& class_name) const
+	{
+		if (class_name==(const utf8*)"StaticImage")	return true;
+		return Static::testClassName_impl(class_name);
+	}
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	RenderableImage	d_image;		//!< RenderableImage that does most of the work for us.
+	ColourRect		d_imageCols;	//!< Colours to use for the image.
+
+
+private:
+	/*************************************************************************
+		Static Properties for this class
+	*************************************************************************/
+	static StaticImageProperties::Image				d_imageProperty;
+	static StaticImageProperties::ImageColours		d_imageColoursProperty;
+	static StaticImageProperties::VertFormatting	d_vertFormattingProperty;
+	static StaticImageProperties::HorzFormatting	d_horzFormattingProperty;
+
+
+	/*************************************************************************
+		Private methods
+	*************************************************************************/
+	void	addStaticImageProperties(void);
+};
+
+} // End of  CEGUI namespace section
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUIStaticImage_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIThumbProperties.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIThumbProperties.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIThumbProperties.h	(revision 1092)
@@ -0,0 +1,178 @@
+/************************************************************************
+	filename: 	CEGUIThumbProperties.h
+	created:	10/7/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface for Thumb properties
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIThumbProperties_h_
+#define _CEGUIThumbProperties_h_
+
+#include "CEGUIProperty.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+// Start of ThumbProperties namespace section
+/*!
+\brief
+	Namespace containing all classes that make up the properties interface for the Thumb class
+*/
+namespace ThumbProperties
+{
+/*!
+\brief
+	Property to access the state of the "hot-tracked" setting for the thumb.
+
+	\par Usage:
+		- Name: HotTracked
+		- Format: "[text]".
+
+	\par Where [Text] is:
+		- "True" to indicate the thumb will send notifications as it is dragged.
+		- "False" to indicate the thumb will only notify once, when it is released.
+*/
+class HotTracked : public Property
+{
+public:
+	HotTracked() : Property(
+		"HotTracked",
+		"Property to get/set the state of the state of the 'hot-tracked' setting for the thumb.  Value is either \"True\" or \"False\".",
+		"True")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the state the setting to free the thumb vertically.
+
+	\par Usage:
+		- Name: VertFree
+		- Format: "[text]".
+
+	\par Where [Text] is:
+		- "True" to indicate the thumb will be free (movable) vertically.
+		- "False" to indicate the thumb will be fixed vertically.
+*/
+class VertFree : public Property
+{
+public:
+	VertFree() : Property(
+		"VertFree",
+		"Property to get/set the state the setting to free the thumb vertically.  Value is either \"True\" or \"False\".",
+		"False")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the state the setting to free the thumb horizontally.
+
+	\par Usage:
+		- Name: HorzFree
+		- Format: "[text]".
+
+	\par Where [Text] is:
+		- "True" to indicate the thumb will be free (movable) horizontally.
+		- "False" to indicate the thumb will be fixed horizontally.
+*/
+class HorzFree : public Property
+{
+public:
+	HorzFree() : Property(
+		"HorzFree", 
+		"Property to get/set the state the setting to free the thumb horizontally.  Value is either \"True\" or \"False\".",
+		"False")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the vertical movement range for the thumb.
+
+	\par Usage:
+		- Name: VertRange
+		- Format: "min:[float] max:[float]".
+
+	\par Where:
+		- min:[float] specifies the minimum vertical setting (position) for the thumb, specified using the active metrics system for the window.
+		- max:[float] specifies the maximum vertical setting (position) for the thumb, specified using the active metrics system for the window.
+*/
+class VertRange : public Property
+{
+public:
+	VertRange() : Property(
+		"VertRange",
+		"Property to get/set the vertical movement range for the thumb.  Value is \"min:[float] max:[float]\".",
+		"min:0.000000 max:1.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the horizontal movement range for the thumb.
+
+	\par Usage:
+		- Name: HorzRange
+		- Format: "min:[float] max:[float]".
+
+	\par Where:
+		- min:[float] specifies the minimum horizontal setting (position) for the thumb, specified using the active metrics system for the window.
+		- max:[float] specifies the maximum horizontal setting (position) for the thumb, specified using the active metrics system for the window.
+*/
+class HorzRange : public Property
+{
+public:
+	HorzRange() : Property(
+		"HorzRange",
+		"Property to get/set the horizontal movement range for the thumb.  Value is \"min:[float] max:[float]\".",
+		"min:0.000000 max:1.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+} // End of  ThumbProperties namespace section
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIThumbProperties_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIMultiLineEditboxProperties.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIMultiLineEditboxProperties.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIMultiLineEditboxProperties.h	(revision 1092)
@@ -0,0 +1,300 @@
+/************************************************************************
+	filename: 	CEGUIMultiLineEditboxProperties.h
+	created:	10/7/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to properties for the MultiLineEditbox class
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIMultiLineEditboxProperties_h_
+#define _CEGUIMultiLineEditboxProperties_h_
+
+#include "CEGUIProperty.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+// Start of MultiLineEditboxProperties namespace section
+/*!
+\brief
+	Namespace containing all classes that make up the properties interface for the MultiLineEditbox class
+*/
+namespace MultiLineEditboxProperties
+{
+/*!
+\brief
+	Property to access the read-only setting of the edit box.
+
+	\par Usage:
+		- Name: ReadOnly
+		- Format: "[text]"
+
+	\par Where [Text] is:
+		- "True" to indicate the edit box is read-only.
+		- "False" to indicate the edit box is not read-only (text may be edited by user).
+*/
+class ReadOnly : public Property
+{
+public:
+	ReadOnly() : Property(
+		"ReadOnly",
+		"Property to get/set the read-only setting for the edit box.  Value is either \"True\" or \"False\".",
+		"False")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the word-wrap setting of the edit box.
+
+	\par Usage:
+		- Name: WordWrap
+		- Format: "[text]"
+
+	\par Where [Text] is:
+		- "True" to indicate the text should be word-wrapped.
+		- "False" to indicate the text should not be word-wrapped.
+*/
+class WordWrap : public Property
+{
+public:
+	WordWrap() : Property(
+		"WordWrap",
+		"Property to get/set the word-wrap setting of the edit box.  Value is either \"True\" or \"False\".",
+		"True")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the current carat index.
+
+	\par Usage:
+		- Name: CaratIndex
+		- Format: "[uint]"
+
+	\par Where:
+		- [uint] is the zero based index of the carat position within the text.
+*/
+class CaratIndex : public Property
+{
+public:
+	CaratIndex() : Property(
+		"CaratIndex",
+		"Property to get/set the current carat index.  Value is \"[uint]\".",
+		"0")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the current selection start index.
+
+	\par Usage:
+		- Name: SelectionStart
+		- Format: "[uint]"
+
+	\par Where:
+		- [uint] is the zero based index of the selection start position within the text.
+*/
+class SelectionStart : public Property
+{
+public:
+	SelectionStart() : Property(
+		"SelectionStart",
+		"Property to get/set the zero based index of the selection start position within the text.  Value is \"[uint]\".",
+		"0")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the current selection length.
+
+	\par Usage:
+		- Name: SelectionLength
+		- Format: "[uint]"
+
+	\par Where:
+		- [uint] is the length of the selection (as a count of the number of code points selected).
+*/
+class SelectionLength : public Property
+{
+public:
+	SelectionLength() : Property(
+		"SelectionLength",
+		"Property to get/set the length of the selection (as a count of the number of code points selected).  Value is \"[uint]\".",
+		"0")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the maximum text length for the edit box.
+
+	\par Usage:
+		- Name: MaxTextLength
+		- Format: "[uint]"
+
+	\par Where:
+		- [uint] is the maximum allowed text length (as a count of code points).
+*/
+class MaxTextLength : public Property
+{
+public:
+	MaxTextLength() : Property(
+		"MaxTextLength",
+		"Property to get/set the the maximum allowed text length (as a count of code points).  Value is \"[uint]\".",
+		"1073741824")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the normal, unselected, text colour used for rendering text.
+
+	\par Usage:
+		- Name: NormalTextColour
+		- Format: "aarrggbb".
+
+	\par Where:
+		- aarrggbb is the ARGB colour value to be used.
+*/
+class NormalTextColour : public Property
+{
+public:
+	NormalTextColour() : Property(
+		"NormalTextColour",
+		"Property to get/set the normal, unselected, text colour used for rendering text.  Value is \"aarrggbb\" (hex).",
+		"FFFFFFFF")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the colour used for rendering text within the selection area.
+
+	\par Usage:
+		- Name: SelectedTextColour
+		- Format: "aarrggbb".
+
+	\par Where:
+		- aarrggbb is the ARGB colour value to be used.
+*/
+class SelectedTextColour : public Property
+{
+public:
+	SelectedTextColour() : Property(
+		"SelectedTextColour",
+		"Property to get/set the colour used for rendering text within the selection area.  Value is \"aarrggbb\" (hex).",
+		"FF000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the colour used for rendering the selection highlight when the edit box is active.
+
+	\par Usage:
+		- Name: ActiveSelectionColour
+		- Format: "aarrggbb".
+
+	\par Where:
+		- aarrggbb is the ARGB colour value to be used.
+*/
+class ActiveSelectionColour : public Property
+{
+public:
+	ActiveSelectionColour() : Property(
+		"ActiveSelectionColour",
+		"Property to get/set the colour used for rendering the selection highlight when the edit box is active.  Value is \"aarrggbb\" (hex).",
+		"FF6060FF")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the colour used for rendering the selection highlight when the edit box is inactive.
+
+	\par Usage:
+		- Name: InactiveSelectionColour
+		- Format: "aarrggbb".
+
+	\par Where:
+		- aarrggbb is the ARGB colour value to be used.
+*/
+class InactiveSelectionColour : public Property
+{
+public:
+	InactiveSelectionColour() : Property(
+		"InactiveSelectionColour",
+		"Property to get/set the colour used for rendering the selection highlight when the edit box is inactive.  Value is \"aarrggbb\" (hex).",
+		"FF808080")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+} // End of  MultiLineEditboxProperties namespace section
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIMultiLineEditboxProperties_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIMenuBase.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIMenuBase.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIMenuBase.h	(revision 1092)
@@ -0,0 +1,296 @@
+/************************************************************************
+	filename: 	CEGUIMenuBase.h
+	created:	5/4/2005
+	author:		Tomas Lindquist Olsen (based on code by Paul D Turner)
+	
+	purpose:	Interface to base class for MenuBase widget
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIMenuBase_h_
+#define _CEGUIMenuBase_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIWindow.h"
+#include "elements/CEGUIMenuBaseProperties.h"
+#include "elements/CEGUIItemListBase.h"
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+/*!
+\brief
+	Abstract base class for menus.
+*/
+class CEGUIEXPORT MenuBase : public ItemListBase
+{
+public:
+	static const String EventNamespace;				//!< Namespace for global events
+
+	/*************************************************************************
+		Constants
+	*************************************************************************/
+	static const colour DefaultBackgroundColour;			//!< Default background colour
+
+
+	/*************************************************************************
+		Event name constants
+	*************************************************************************/
+	// generated internally by Window
+	static const String EventPopupOpened;					//!< A MenuItem attached to this menu opened a PopupMenu
+	static const String EventPopupClosed;					//!< A MenuItem attached to this menu opened a PopupMenu
+
+
+	/*************************************************************************
+		Accessor type functions
+	*************************************************************************/
+	/*!
+	\brief
+		Get the item spacing for this menu.
+
+	\return
+		A float value with the current item spacing for this menu
+	*/
+	float	getItemSpacing(void) const					{return d_itemSpacing;}
+
+
+	/*!
+	\brief
+		Get the horizontal padding for this menu's items.
+
+	\return
+		A float value with the current horizontal padding for this menu's items.
+	*/
+	float	getHorzPadding(void) const					{return d_horzPadding;}
+
+
+	/*!
+	\brief
+		Get the vertical padding for this menu's items.
+
+	\return
+		A float value with the current vertical padding for this menu's items.
+	*/
+	float	getVertPadding(void) const					{return d_vertPadding;}
+
+
+	/*!
+	\brief
+		Get the border width for this menu.
+
+	\return
+		A float value with the current border width for this menu.
+	*/
+	float	getBorderWidth(void) const					{return d_borderWidth;}	
+
+
+	/*!
+	\brief
+		Get the ColourRect with the colours used for rendering the background of this menu.
+
+	\return
+		A ColourRect with the colours used for rendering the background of this menu.
+	*/
+	const ColourRect&	getBackgroundColours(void) const	{return d_backgroundColours;}
+
+
+	/*!
+	\brief
+		Return whether this menu allows multiple popup menus to open at the same time.
+
+	\return
+		true if this menu allows multiple popup menus to be opened simultaneously. false if not
+	*/
+	bool	isMultiplePopupsAllowed(void) const			{return d_allowMultiplePopups;}
+
+
+	/*!
+	\brief
+		Get currently opened MenuItem in this menu. Returns NULL if menu item is open.
+
+	\return
+		Pointer to the MenuItem currently open.
+	*/
+	MenuItem*	getPopupMenuItem(void) const				{return d_popup;}
+
+
+	/*************************************************************************
+		Manipulators
+	*************************************************************************/
+	/*!
+	\brief
+		Set the item spacing for this menu.
+	*/
+	void	setItemSpacing(float spacing)				{d_itemSpacing=spacing;handleUpdatedItemData();}
+
+
+	/*!
+	\brief
+		Set the horizontal padding for this menu's items.
+	*/
+	void	setHorzPadding(float padding)				{d_horzPadding=padding;handleUpdatedItemData();}
+
+
+	/*!
+	\brief
+		Set the vertical padding for this menu's items.
+	*/
+	void	setVertPadding(float padding)				{d_vertPadding=padding;handleUpdatedItemData();}
+
+
+	/*!
+	\brief
+		Set the border width for this menu.
+	*/
+	void	setBorderWidth(float border)				{d_borderWidth=border;handleUpdatedItemData();}
+
+
+	/*!
+	\brief
+		Set the background colours to used when rendereing this menu.
+	*/
+	void	setBackgroundColours(const ColourRect& cr)	{d_backgroundColours=cr;}
+
+
+	/*!
+	\brief
+		Change the currently open MenuItem in this menu.
+
+	\param item
+		Pointer to a MenuItem to open or NULL to close any opened.
+	*/
+	void	changePopupMenuItem(MenuItem* item);
+
+
+	/*!
+	\brief
+		Set whether this menu allows multiple popup menus to opened simultaneously.
+	*/
+	void	setAllowMultiplePopups(bool setting)		{d_allowMultiplePopups=setting;}
+
+
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for MenuBase objects
+	*/
+	MenuBase(const String& type, const String& name);
+
+
+	/*!
+	\brief
+		Destructor for MenuBase objects
+	*/
+	virtual ~MenuBase(void);
+
+
+protected:
+	/*************************************************************************
+		New Event Handlers
+	*************************************************************************/
+	/*!
+	\brief
+		handler invoked internally when the a MenuItem attached to this menu opens its popup.
+	*/
+	virtual void	onPopupOpened(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		handler invoked internally when the a MenuItem attached to this menu closes its popup.
+	*/
+	virtual void	onPopupClosed(WindowEventArgs& e);
+
+
+	/*************************************************************************
+		Implementation Functions
+	*************************************************************************/
+	/*!
+	\brief
+		Add MenuBase specific events
+	*/
+	void	addMenuBaseEvents(void);
+
+
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	virtual bool	testClassName_impl(const String& class_name) const
+	{
+		if (class_name==(const utf8*)"MenuBase")	return true;
+		return ItemListBase::testClassName_impl(class_name);
+	}
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	float d_itemSpacing;		//!< The spacing in pixels between items.
+	float d_horzPadding;		//!< The width in pixels that is added to the left and right of each item.
+	float d_vertPadding;		//!< The height in pixels that is added to the top and bottom of each item.
+	float d_borderWidth;		//!< The width in pixels of the border around the entire content of this menu.
+	
+	ColourRect d_backgroundColours;		//!< The colours used when rendering the background of this menu.
+	
+	MenuItem* d_popup;		//!< The currently open MenuItem. NULL if no item is open. If multiple popups are allowed, this means nothing.
+	bool d_allowMultiplePopups;		//!< true if multiple popup menus are allowed smultaneously.  false if not.
+
+
+private:
+	/*************************************************************************
+	Static Properties for this class
+	*************************************************************************/
+	static MenuBaseProperties::ItemSpacing			d_itemSpacingProperty;
+	static MenuBaseProperties::HorzPadding			d_horzPaddingProperty;
+	static MenuBaseProperties::VertPadding			d_vertPaddingProperty;
+	static MenuBaseProperties::BorderWidth			d_borderWidthProperty;
+	static MenuBaseProperties::BackgroundColours	d_backgroundColoursProperty;
+	static MenuBaseProperties::AllowMultiplePopups	d_allowMultiplePopupsProperty;
+
+	/*************************************************************************
+	Private methods
+	*************************************************************************/
+	void	addMenuBaseProperties(void);
+};
+
+} // End of  CEGUI namespace section
+
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUIMenuBase_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUISliderProperties.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUISliderProperties.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUISliderProperties.h	(revision 1092)
@@ -0,0 +1,122 @@
+/************************************************************************
+	filename: 	CEGUISliderProperties.h
+	created:	10/7/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to properties for Slider class
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUISliderProperties_h_
+#define _CEGUISliderProperties_h_
+
+#include "CEGUIProperty.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+// Start of SliderProperties namespace section
+/*!
+\brief
+	Namespace containing all classes that make up the properties interface for the Slider class
+*/
+namespace SliderProperties
+{
+/*!
+\brief
+	Property to access the current value of the slider.
+
+	\par Usage:
+		- Name: CurrentValue
+		- Format: "[float]".
+
+	\par Where:
+		- [float] represents the current value of the slider.
+*/
+class CurrentValue : public Property
+{
+public:
+	CurrentValue() : Property(
+		"CurrentValue",
+		"Property to get/set the current value of the slider.  Value is a float.",
+		"0.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the maximum value of the slider.
+
+	\par Usage:
+		- Name: MaximumValue
+		- Format: "[float]".
+
+	\par Where:
+		- [float] represents the maximum value of the slider.
+*/
+class MaximumValue : public Property
+{
+public:
+	MaximumValue() : Property(
+		"MaximumValue",
+		"Property to get/set the maximum value of the slider.  Value is a float.",
+		"1.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the click-step size for the slider.
+
+	\par Usage:
+		- Name: ClickStepSize
+		- Format: "[float]".
+
+	\par Where:
+		- [float] represents the click-step size slider (this is how much the value changes when the slider container is clicked).
+*/
+class ClickStepSize : public Property
+{
+public:
+	ClickStepSize() : Property(
+		"ClickStepSize",
+		"Property to get/set the click-step size for the slider.  Value is a float.",
+		"0.010000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+} // End of  SliderProperties namespace section
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUISliderProperties_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIMenuItemProperties.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIMenuItemProperties.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIMenuItemProperties.h	(revision 1092)
@@ -0,0 +1,164 @@
+/************************************************************************
+	filename: 	CEGUIMenuItemProperties.h
+	created:	8/4/2005
+	author:		Tomas Lindquist Olsen (based on code by Paul D Turner)
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIMenuItemProperties_h_
+#define _CEGUIMenuItemProperties_h_
+
+#include "CEGUIProperty.h"
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+// Start of MenuItemProperties namespace section
+namespace MenuItemProperties
+{
+
+/*!
+\brief
+	Property to access the hover colour of the item.
+
+	\par Usage:
+		- Name: HoverColour
+		- Format: "[aarrggbb]".
+
+	\par Where:
+		- [aarrggbb] represents the hover colour of the item.
+*/
+class HoverColour : public Property
+{
+public:
+	HoverColour() : Property(
+		"HoverColour",
+		"Property to get/set the hover colour of the item.  Value is a colour.",
+		"00FFFFFF")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the pushed colour of the item.
+
+	\par Usage:
+		- Name: PushedColour
+		- Format: "[aarrggbb]".
+
+	\par Where:
+		- [aarrggbb] represents the pushed colour of the item.
+*/
+class PushedColour : public Property
+{
+public:
+	PushedColour() : Property(
+		"PushedColour",
+		"Property to get/set the pushed colour of the item.  Value is a colour.",
+		"00FFFFFF")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the opened colour of the item.
+
+	\par Usage:
+		- Name: OpenedColour
+		- Format: "[aarrggbb]".
+
+	\par Where:
+		- [aarrggbb] represents the opened colour of the item.
+*/
+class OpenedColour : public Property
+{
+public:
+	OpenedColour() : Property(
+		"OpenedColour",
+		"Property to get/set the opened colour of the item.  Value is a colour.",
+		"00EFEFEF")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the normal text colour of the item.
+
+	\par Usage:
+		- Name: NormalTextColour
+		- Format: "[aarrggbb]".
+
+	\par Where:
+		- [aarrggbb] represents the normal text colour of the item.
+*/
+class NormalTextColour : public Property
+{
+public:
+	NormalTextColour() : Property(
+		"NormalTextColour",
+		"Property to get/set the normal text colour of the item.  Value is a colour.",
+		"00FFFFFF")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the disabled text colour of the item.
+
+	\par Usage:
+		- Name: DisabledTextColour
+		- Format: "[aarrggbb]".
+
+	\par Where:
+		- [aarrggbb] represents the disabled text colour of the item.
+*/
+class DisabledTextColour : public Property
+{
+public:
+	DisabledTextColour() : Property(
+		"DisabledTextColour",
+		"Property to get/set the disabled text colour of the item.  Value is a colour.",
+		"007F7F7F")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+} // End of  MenuItemProperties namespace section
+} // End of  CEGUI namespace section
+
+#endif	// end of guard _CEGUIMenuItemProperties_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIListboxItem.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIListboxItem.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIListboxItem.h	(revision 1092)
@@ -0,0 +1,442 @@
+/************************************************************************
+	filename: 	CEGUIListboxItem.h
+	created:	8/6/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to base class for list items
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIListboxItem_h_
+#define _CEGUIListboxItem_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIString.h"
+#include "CEGUIColourRect.h"
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Base class for list box items
+*/
+class CEGUIEXPORT ListboxItem
+{
+public:
+	/*************************************************************************
+		Constants
+	*************************************************************************/
+	static const colour	DefaultSelectionColour;		//!< Default selection brush colour.
+
+
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		base class constructor
+	*/
+	ListboxItem(const String& text, uint item_id = 0, void* item_data = NULL, bool disabled = false, bool auto_delete = true);
+
+
+	/*!
+	\brief
+		base class destructor
+	*/
+	virtual ~ListboxItem(void) {}
+
+
+	/*************************************************************************
+		Accessors
+	*************************************************************************/
+	/*!
+	\brief
+		return the text string set for this list box item.
+
+		Note that even if the item does not render text, the text string can still be useful, since it
+		is used for sorting list box items.
+
+	\return
+		String object containing the current text for the list box item.
+	*/
+	const String&	getText(void) const		{return d_itemText;}
+
+
+	/*!
+	\brief
+		Return the current ID assigned to this list box item.
+
+		Note that the system does not make use of this value, client code can assign any meaning it
+		wishes to the ID.
+
+	\return
+		ID code currently assigned to this list box item
+	*/
+	uint	getID(void) const			{return d_itemID;}
+
+
+	/*!
+	\brief
+		Return the pointer to any client assigned user data attached to this lis box item.
+
+		Note that the system does not make use of this data, client code can assign any meaning it
+		wishes to the attached data.
+
+	\return
+		Pointer to the currently assigned user data.
+	*/
+	void*	getUserData(void) const		{return d_itemData;}
+
+
+	/*!
+	\brief
+		return whether this item is selected.
+
+	\return
+		true if the item is selected, false if the item is not selected.
+	*/
+	bool	isSelected(void) const		{return d_selected;}
+
+
+	/*!
+	\brief
+		return whether this item is disabled.
+
+	\return
+		true if the item is disabled, false if the item is enabled.
+	*/
+	bool	isDisabled(void) const		{return d_disabled;}
+
+
+	/*!
+	\brief
+		return whether this item will be automatically deleted when the list box it is attached to
+		is destroyed, or when the item is removed from the list box.
+
+	\return
+		true if the item object will be deleted by the system when the list box it is attached to is
+		destroyed, or when the item is removed from the list.  false if client code must destroy the
+		item after it is removed from the list.
+	*/
+	bool	isAutoDeleted(void) const	{return d_autoDelete;}
+
+
+	/*!
+	\brief
+		Get the owner window for this ListboxItem.
+		
+		The owner of a ListboxItem is typically set by the list box widgets when an item is added or inserted.
+
+	\return
+		Ponter to the window that is considered the owner of this ListboxItem.
+	*/
+	const Window*	getOwnerWindow(const Window* owner)		{return d_owner;}
+
+
+	/*!
+	\brief
+		Return the current colours used for selection highlighting.
+
+	\return
+		ColourRect object describing the currently set colours
+	*/
+	ColourRect	getSelectionColours(void) const		{return d_selectCols;}
+
+
+	/*!
+	\brief
+		Return the current selection highlighting brush.
+
+	\return
+		Pointer to the Image object currently used for selection highlighting.
+	*/
+	const Image*	getSelectionBrushImage(void) const		{return d_selectBrush;}
+
+
+	/*************************************************************************
+		Manipulators
+	*************************************************************************/
+	/*!
+	\brief
+		set the text string for this list box item.
+
+		Note that even if the item does not render text, the text string can still be useful, since it
+		is used for sorting list box items.
+
+	\param text
+		String object containing the text to set for the list box item.
+
+	\return
+		Nothing.
+	*/
+	void	setText(const String& text)		{d_itemText = text;}
+
+
+	/*!
+	\brief
+		Set the ID assigned to this list box item.
+
+		Note that the system does not make use of this value, client code can assign any meaning it
+		wishes to the ID.
+
+	\param item_id
+		ID code to be assigned to this list box item
+
+	\return
+		Nothing.
+	*/
+	void	setID(uint item_id)		{d_itemID = item_id;}
+
+
+	/*!
+	\brief
+		Set the client assigned user data attached to this lis box item.
+
+		Note that the system does not make use of this data, client code can assign any meaning it
+		wishes to the attached data.
+
+	\param item_data
+		Pointer to the user data to attach to this list item.
+
+	\return
+		Nothing.
+	*/
+	void	setUserData(void* item_data)	{d_itemData = item_data;}
+
+
+	/*!
+	\brief
+		set whether this item is selected.
+
+	\param setting
+		true if the item is selected, false if the item is not selected.
+
+	\return
+		Nothing.
+	*/
+	void	setSelected(bool setting)		{d_selected = setting;}
+
+
+	/*!
+	\brief
+		set whether this item is disabled.
+
+	\param setting
+		true if the item is disabled, false if the item is enabled.
+
+	\return
+		Nothing.
+	*/
+	void	setDisabled(bool setting)		{d_disabled = setting;}
+
+	/*!
+	\brief
+		Set whether this item will be automatically deleted when the list box it is attached to
+		is destroyed, or when the item is removed from the list box.
+
+	\param setting
+		true if the item object should be deleted by the system when the list box it is attached to is
+		destroyed, or when the item is removed from the list.  false if client code will destroy the
+		item after it is removed from the list.
+
+	\return
+		Nothing.
+	*/
+	void	setAutoDeleted(bool setting)		{d_autoDelete = setting;}
+
+
+	/*!
+	\brief
+		Set the owner window for this ListboxItem.  This is called by all the list box widgets when
+		an item is added or inserted.
+
+	\param owner
+		Ponter to the window that should be considered the owner of this ListboxItem.
+
+	\return
+		Nothing
+	*/
+	void	setOwnerWindow(const Window* owner)		{d_owner = owner;}
+
+
+	/*!
+	\brief
+		Set the colours used for selection highlighting.
+
+	\param cols
+		ColourRect object describing the colours to be used.
+
+	\return
+		Nothing.
+	*/
+	void	setSelectionColours(const ColourRect& cols)		{d_selectCols = cols;}
+
+
+	/*!
+	\brief
+		Set the colours used for selection highlighting.
+
+	\param top_left_colour
+		Colour (as ARGB value) to be applied to the top-left corner of the selection area.
+
+	\param top_right_colour
+		Colour (as ARGB value) to be applied to the top-right corner of the selection area.
+
+	\param bottom_left_colour
+		Colour (as ARGB value) to be applied to the bottom-left corner of the selection area.
+
+	\param bottom_right_colour
+		Colour (as ARGB value) to be applied to the bottom-right corner of the selection area.
+
+	\return 
+		Nothing.
+	*/
+	void	setSelectionColours(colour top_left_colour, colour top_right_colour, colour bottom_left_colour, colour bottom_right_colour);
+
+
+	/*!
+	\brief
+		Set the colours used for selection highlighting.
+
+	\param col
+		colour value to be used when rendering.
+
+	\return
+		Nothing.
+	*/
+	void	setSelectionColours(colour col)		{setSelectionColours(col, col, col, col);}
+
+
+	/*!
+	\brief
+		Set the selection highlighting brush image.
+
+	\param image
+		Pointer to the Image object to be used for selection highlighting.
+
+	\return
+		Nothing.
+	*/
+	void	setSelectionBrushImage(const Image* image)		{d_selectBrush = image;}
+
+
+	/*!
+	\brief
+		Set the selection highlighting brush image.
+
+	\param imageset
+		Name of the imagest containing the image to be used.
+
+	\param image
+		Name of the image to be used
+
+	\return
+		Nothing.
+	*/
+	void	setSelectionBrushImage(const String& imageset, const String& image);
+
+
+	/*************************************************************************
+		Abstract portion of interface
+	*************************************************************************/
+	/*!
+	\brief
+		Return the rendered pixel size of this list box item.
+
+	\return
+		Size object describing the size of the list box item in pixels.
+	*/
+	virtual	Size	getPixelSize(void) const	= 0;
+
+
+	/*!
+	\brief
+		Draw the list box item in its current state
+
+	\param position
+		Vecor3 object describing the upper-left corner of area that should be rendered in to for the draw operation.
+
+	\param alpha
+		Alpha value to be used when rendering the item (between 0.0f and 1.0f).
+
+	\param clipper
+		Rect object describing the clipping rectangle for the draw operation.
+
+	\return
+		Nothing.
+	*/
+	virtual	void	draw(const Vector3& position, float alpha, const Rect& clipper) const	= 0;
+
+
+	/*************************************************************************
+		Operators
+	*************************************************************************/
+	/*!
+	\brief
+		Less-than operator, compares item texts.
+	*/
+	virtual	bool	operator<(const ListboxItem& rhs) const		{return d_itemText < rhs.getText();}
+
+
+	/*!
+	\brief
+		Greater-than operator, compares item texts.
+	*/
+	virtual	bool	operator>(const ListboxItem& rhs) const		{return d_itemText > rhs.getText();}
+
+
+protected:
+	/*************************************************************************
+		Implementation methods
+	*************************************************************************/
+	/*!
+	\brief
+		Return a ColourRect object describing the colours in \a cols after having their alpha
+		component modulated by the value \a alpha.
+	*/
+	ColourRect getModulateAlphaColourRect(const ColourRect& cols, float alpha) const;
+
+
+	/*!
+	\brief
+		Return a colour value describing the colour specified by \a col after having its alpha
+		component modulated by the value \a alpha.
+	*/
+	colour calculateModulatedAlphaColour(colour col, float alpha) const;
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	String	d_itemText;		//!< Text for this list box item.  If not rendered, this is still used for list sorting.
+	uint	d_itemID;		//!< ID code assigned by client code.  This has no meaning within the GUI system.
+	void*	d_itemData;		//!< Pointer to some client code data.  This has no meaning within the GUI system.
+	bool	d_selected;		//!< true if this item is selected.  false if the item is not selected.
+	bool	d_disabled;		//!< true if this item is disabled.  false if the item is not disabled.
+	bool	d_autoDelete;	//!< true if the system should destroy this item, false if client code will destroy the item.
+	const Window*	d_owner;	//!< Pointer to the window that owns this item.
+	ColourRect		d_selectCols;		//!< Colours used for selection highlighting.
+	const Image*	d_selectBrush;		//!< Image used for rendering selection.
+};
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIListboxItem_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIScrollablePaneProperties.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIScrollablePaneProperties.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIScrollablePaneProperties.h	(revision 1092)
@@ -0,0 +1,293 @@
+/************************************************************************
+	filename: 	CEGUIScrollablePaneProperties.h
+	created:	3/3/2005
+	author:		Paul D Turner
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIScrollablePaneProperties_h_
+#define _CEGUIScrollablePaneProperties_h_
+
+#include "CEGUIProperty.h"
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+// Start of ScrollablePaneProperties namespace section
+/*!
+\brief
+	Namespace containing all classes that make up the properties interface for the ScrollablePane class
+*/
+namespace ScrollablePaneProperties
+{
+    /*!
+    \brief
+        Property to access the setting which controls whether the content pane is automatically
+        resized according to the size and position of attached content.
+
+    \par Usage:
+        - Name: ContentPaneAutoSized
+        - Format: "[text]"
+
+    \par Where [Text] is:
+        - "True" to indicate the pane should automatically resize itself.
+        - "False" to indicate the pane should not automatically resize itself.
+    */
+    class ContentPaneAutoSized : public Property
+    {
+    public:
+        ContentPaneAutoSized() : Property(
+            "ContentPaneAutoSized",
+            "Property to get/set the setting which controls whether the content pane will auto-size itself.  Value is either \"True\" or \"False\".",
+            "True")
+        {}
+
+        String	get(const PropertyReceiver* receiver) const;
+        void	set(PropertyReceiver* receiver, const String& value);
+    };
+
+    /*!
+    \brief
+       Property to access the current content pane area rectangle (as window relative pixels).
+
+    \par Usage:
+        - Name: ContentArea
+        - Format: "l:[float] t:[float] r:[float] b:[float]".
+
+    \par Where:
+        - l:[float]	specifies the position of the left edge of the area as a floating point number.
+        - t:[float]	specifies the position of the top edge of the area as a floating point number.
+        - r:[float]	specifies the position of the right edge of the area as a floating point number.
+        - b:[float]	specifies the position of the bottom edge of the area as a floating point number.
+    */
+    class ContentArea : public Property
+    {
+    public:
+        ContentArea() : Property(
+            "ContentArea",
+            "Property to get/set the current content area rectangle of the content pane.  Value is \"l:[float] t:[float] r:[float] b:[float]\" (where l is left, t is top, r is right, and b is bottom).",
+            "l:0.000000 t:0.000000 r:0.000000 b:0.000000")
+        {}
+
+        String	get(const PropertyReceiver* receiver) const;
+        void	set(PropertyReceiver* receiver, const String& value);
+    };
+
+    /*!
+    \brief
+        Property to access the setting which controls whether the vertical scroll bar will 
+        always be displayed, or only displayed when it is required.
+
+    \par Usage:
+        - Name: ForceVertScrollbar
+        - Format: "[text]"
+
+    \par Where [Text] is:
+        - "True" to indicate that the vertical scroll bar will always be shown.
+        - "False" to indicate that the vertical scroll bar will only be shown when it is needed.
+    */
+    class ForceVertScrollbar : public Property
+    {
+    public:
+        ForceVertScrollbar() : Property(
+            "ForceVertScrollbar",
+            "Property to get/set the setting which controls whether the vertical scroll bar is aways shown.  Value is either \"True\" or \"False\".",
+            "False")
+        {}
+
+        String	get(const PropertyReceiver* receiver) const;
+        void	set(PropertyReceiver* receiver, const String& value);
+    };
+
+
+    /*!
+    \brief
+        Property to access the setting which controls whether the horizontal scroll bar will 
+        always be displayed, or only displayed when it is required.
+
+    \par Usage:
+        - Name: ForceHorzScrollbar
+        - Format: "[text]"
+
+    \par Where [Text] is:
+        - "True" to indicate that the horizontal scroll bar will always be shown.
+        - "False" to indicate that the horizontal scroll bar will only be shown when it is needed.
+    */
+    class ForceHorzScrollbar : public Property
+    {
+    public:
+        ForceHorzScrollbar() : Property(
+            "ForceHorzScrollbar",
+            "Property to get/set the setting which controls whether the horizontal scroll bar is aways shown.  Value is either \"True\" or \"False\".",
+            "False")
+        {}
+
+        String	get(const PropertyReceiver* receiver) const;
+        void	set(PropertyReceiver* receiver, const String& value);
+    };
+
+    /*!
+    \brief
+        Property to access the step size for the horizontal Scrollbar.
+
+    \par Usage:
+        - Name: HorzStepSize
+        - Format: "[float]".
+
+    \par Where:
+        - [float] specifies the size of the increase/decrease button step for the horizontal scrollbar (as a fraction of 1 page).
+    */
+    class HorzStepSize : public Property
+    {
+    public:
+        HorzStepSize() : Property(
+            "HorzStepSize",
+            "Property to get/set the step size for the horizontal Scrollbar.  Value is a float.",
+            "0.100000")
+        {}
+
+        String	get(const PropertyReceiver* receiver) const;
+        void	set(PropertyReceiver* receiver, const String& value);
+    };
+
+    /*!
+    \brief
+        Property to access the overlap size for the horizontal Scrollbar.
+
+    \par Usage:
+        - Name: HorzOverlapSize
+        - Format: "[float]".
+
+    \par Where:
+        - [float] specifies the size of the per-page overlap (as a fraction of one page).
+    */
+    class HorzOverlapSize : public Property
+    {
+    public:
+        HorzOverlapSize() : Property(
+            "HorzOverlapSize",
+            "Property to get/set the overlap size for the horizontal Scrollbar.  Value is a float.",
+            "0.010000")
+        {}
+
+        String	get(const PropertyReceiver* receiver) const;
+        void	set(PropertyReceiver* receiver, const String& value);
+    };
+
+    /*!
+    \brief
+        Property to access the scroll position of the horizontal Scrollbar.
+
+    \par Usage:
+        - Name: HorzScrollPosition
+        - Format: "[float]".
+
+    \par Where:
+        - [float] specifies the current scroll position / value of the horizontal Scrollbar (as a fraction of the whole).
+    */
+    class HorzScrollPosition : public Property
+    {
+    public:
+        HorzScrollPosition() : Property(
+            "HorzScrollPosition",
+            "Property to get/set the scroll position of the horizontal Scrollbar as a fraction.  Value is a float.",
+            "0.000000")
+        {}
+
+        String	get(const PropertyReceiver* receiver) const;
+        void	set(PropertyReceiver* receiver, const String& value);
+    };
+
+    /*!
+    \brief
+        Property to access the step size for the vertical Scrollbar.
+
+    \par Usage:
+        - Name: VertStepSize
+        - Format: "[float]".
+
+    \par Where:
+        - [float] specifies the size of the increase/decrease button step for the vertical scrollbar (as a fraction of 1 page).
+    */
+    class VertStepSize : public Property
+    {
+    public:
+        VertStepSize() : Property(
+            "VertStepSize",
+            "Property to get/set the step size for the vertical Scrollbar.  Value is a float.",
+            "0.100000")
+        {}
+
+        String	get(const PropertyReceiver* receiver) const;
+        void	set(PropertyReceiver* receiver, const String& value);
+    };
+
+    /*!
+    \brief
+        Property to access the overlap size for the vertical Scrollbar.
+
+    \par Usage:
+        - Name: VertOverlapSize
+        - Format: "[float]".
+
+    \par Where:
+        - [float] specifies the size of the per-page overlap (as a fraction of one page).
+    */
+    class VertOverlapSize : public Property
+    {
+    public:
+        VertOverlapSize() : Property(
+            "VertOverlapSize",
+            "Property to get/set the overlap size for the vertical Scrollbar.  Value is a float.",
+            "0.010000")
+        {}
+
+        String	get(const PropertyReceiver* receiver) const;
+        void	set(PropertyReceiver* receiver, const String& value);
+    };
+
+    /*!
+    \brief
+        Property to access the scroll position of the vertical Scrollbar.
+
+    \par Usage:
+        - Name: VertScrollPosition
+        - Format: "[float]".
+
+    \par Where:
+        - [float] specifies the current scroll position / value of the vertical Scrollbar (as a fraction of the whole).
+    */
+    class VertScrollPosition : public Property
+    {
+    public:
+        VertScrollPosition() : Property(
+            "VertScrollPosition",
+            "Property to get/set the scroll position of the vertical Scrollbar as a fraction.  Value is a float.",
+            "0.000000")
+        {}
+
+        String	get(const PropertyReceiver* receiver) const;
+        void	set(PropertyReceiver* receiver, const String& value);
+    };
+
+} // End of  ScrollablePaneProperties namespace section
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIScrollablePaneProperties_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIStaticProperties.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIStaticProperties.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIStaticProperties.h	(revision 1092)
@@ -0,0 +1,391 @@
+/************************************************************************
+	filename: 	CEGUIStaticProperties.h
+	created:	10/7/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to properties for Static (base class) widget.
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIStaticProperties_h_
+#define _CEGUIStaticProperties_h_
+
+#include "CEGUIProperty.h"
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+// Start of StaticProperties namespace section
+/*!
+\brief
+	Namespace containing all classes that make up the properties interface for the Static (base) class
+*/
+namespace StaticProperties
+{
+/*!
+\brief
+	Property to access the state of the frame enabled setting for the Static widget.
+
+	\par Usage:
+		- Name: FrameEnabled
+		- Format: "[text]".
+
+	\par Where [Text] is:
+		- "True" to indicate that the frame is enabled.
+		- "False" to indicate that the frame is disabled.
+*/
+class FrameEnabled : public Property
+{
+public:
+	FrameEnabled() : Property(
+		"FrameEnabled",
+		"Property to get/set the state of the frame enabled setting for the Static widget.  Value is either \"True\" or \"False\".",
+		"True")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the state of the frame background setting for the Static widget.
+
+	\par Usage:
+		- Name: BackgroundEnabled
+		- Format: "[text]".
+
+	\par Where [Text] is:
+		- "True" to indicate that the background is enabled.
+		- "False" to indicate that the background is disabled.
+*/
+class BackgroundEnabled : public Property
+{
+public:
+	BackgroundEnabled() : Property(
+		"BackgroundEnabled",
+		"Property to get/set the state of the frame background setting for the Static widget.  Value is either \"True\" or \"False\".",
+		"True")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the frame colours for the Static widget.
+
+	\par Usage:
+		- Name: FrameColours
+		- Format: "tl:[aarrggbb] tr:[aarrggbb] bl:[aarrggbb] br:[aarrggbb]".
+
+	\par Where:
+		- tl:[aarrggbb] is the top-left colour value specified as ARGB (hex).
+		- tr:[aarrggbb] is the top-right colour value specified as ARGB (hex).
+		- bl:[aarrggbb] is the bottom-left colour value specified as ARGB (hex).
+		- br:[aarrggbb] is the bottom-right colour value specified as ARGB (hex).
+*/
+class FrameColours : public Property
+{
+public:
+	FrameColours() : Property(
+		"FrameColours",
+		"Property to get/set the frame colours for the Static widget.  Value is \"tl:[aarrggbb] tr:[aarrggbb] bl:[aarrggbb] br:[aarrggbb]\".",
+		"tl:FFFFFFFF tr:FFFFFFFF bl:FFFFFFFF br:FFFFFFFF")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the background colours for the Static widget.
+
+	\par Usage:
+		- Name: BackgroundColours
+		- Format: "tl:[aarrggbb] tr:[aarrggbb] bl:[aarrggbb] br:[aarrggbb]".
+
+	\par Where:
+		- tl:[aarrggbb] is the top-left colour value specified as ARGB (hex).
+		- tr:[aarrggbb] is the top-right colour value specified as ARGB (hex).
+		- bl:[aarrggbb] is the bottom-left colour value specified as ARGB (hex).
+		- br:[aarrggbb] is the bottom-right colour value specified as ARGB (hex).
+*/
+class BackgroundColours : public Property
+{
+public:
+	BackgroundColours() : Property(
+		"BackgroundColours",
+		"Property to get/set the background colours for the Static widget.  Value is \"tl:[aarrggbb] tr:[aarrggbb] bl:[aarrggbb] br:[aarrggbb]\".",
+		"tl:FFFFFFFF tr:FFFFFFFF bl:FFFFFFFF br:FFFFFFFF")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the background image for the Static widget.
+
+	\par Usage:
+		- Name: BackgroundImage
+		- Format: "set:[text] image:[text]".
+
+	\par Where:
+		- set:[text] is the name of the Imageset containing the image.  The Imageset name should not contain spaces.  The Imageset specified must already be loaded.
+		- image:[text] is the name of the Image on the specified Imageset.  The Image name should not contain spaces.
+*/
+class BackgroundImage : public Property
+{
+public:
+	BackgroundImage() : Property(
+		"BackgroundImage",
+		"Property to get/set the background image for the Static widget.  Value should be \"set:[imageset name] image:[image name]\".",
+		"")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the top-left image for the frame of the Static widget.
+
+	\par Usage:
+		- Name: TopLeftFrameImage
+		- Format: "set:[text] image:[text]".
+
+	\par Where:
+		- set:[text] is the name of the Imageset containing the image.  The Imageset name should not contain spaces.  The Imageset specified must already be loaded.
+		- image:[text] is the name of the Image on the specified Imageset.  The Image name should not contain spaces.
+*/
+class TopLeftFrameImage : public Property
+{
+public:
+	TopLeftFrameImage() : Property(
+		"TopLeftFrameImage",
+		"Property to get/set the top-left image for the frame of the Static widget.  Value should be \"set:[imageset name] image:[image name]\".",
+		"")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the top-right image for the frame of the Static widget.
+
+	\par Usage:
+		- Name: TopRightFrameImage
+		- Format: "set:[text] image:[text]".
+
+	\par Where:
+		- set:[text] is the name of the Imageset containing the image.  The Imageset name should not contain spaces.  The Imageset specified must already be loaded.
+		- image:[text] is the name of the Image on the specified Imageset.  The Image name should not contain spaces.
+*/
+class TopRightFrameImage : public Property
+{
+public:
+	TopRightFrameImage() : Property(
+		"TopRightFrameImage",
+		"Property to get/set the top-right image for the frame of the Static widget.  Value should be \"set:[imageset name] image:[image name]\".",
+		"")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the bottom-left image for the frame of the Static widget.
+
+	\par Usage:
+		- Name: BottomLeftFrameImage
+		- Format: "set:[text] image:[text]".
+
+	\par Where:
+		- set:[text] is the name of the Imageset containing the image.  The Imageset name should not contain spaces.  The Imageset specified must already be loaded.
+		- image:[text] is the name of the Image on the specified Imageset.  The Image name should not contain spaces.
+*/
+class BottomLeftFrameImage : public Property
+{
+public:
+	BottomLeftFrameImage() : Property(
+		"BottomLeftFrameImage",
+		"Property to get/set the bottom-left image for the frame of the Static widget.  Value should be \"set:[imageset name] image:[image name]\".",
+		"")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the bottom-right image for the frame of the Static widget.
+
+	\par Usage:
+		- Name: BottomRightFrameImage
+		- Format: "set:[text] image:[text]".
+
+	\par Where:
+		- set:[text] is the name of the Imageset containing the image.  The Imageset name should not contain spaces.  The Imageset specified must already be loaded.
+		- image:[text] is the name of the Image on the specified Imageset.  The Image name should not contain spaces.
+*/
+class BottomRightFrameImage : public Property
+{
+public:
+	BottomRightFrameImage() : Property(
+		"BottomRightFrameImage",
+		"Property to get/set the bottom-right image for the frame of the Static widget.  Value should be \"set:[imageset name] image:[image name]\".",
+		"")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the left edge image for the frame of the Static widget.
+
+	\par Usage:
+		- Name: LeftFrameImage
+		- Format: "set:[text] image:[text]".
+
+	\par Where:
+		- set:[text] is the name of the Imageset containing the image.  The Imageset name should not contain spaces.  The Imageset specified must already be loaded.
+		- image:[text] is the name of the Image on the specified Imageset.  The Image name should not contain spaces.
+*/
+class LeftFrameImage : public Property
+{
+public:
+	LeftFrameImage() : Property(
+		"LeftFrameImage",
+		"Property to get/set the left edge image for the frame of the Static widget.  Value should be \"set:[imageset name] image:[image name]\".",
+		"")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the right edge image for the frame of the Static widget.
+
+	\par Usage:
+		- Name: RightFrameImage
+		- Format: "set:[text] image:[text]".
+
+	\par Where:
+		- set:[text] is the name of the Imageset containing the image.  The Imageset name should not contain spaces.  The Imageset specified must already be loaded.
+		- image:[text] is the name of the Image on the specified Imageset.  The Image name should not contain spaces.
+*/
+class RightFrameImage : public Property
+{
+public:
+	RightFrameImage() : Property(
+		"RightFrameImage",
+		"Property to get/set the right edge image for the frame of the Static widget.  Value should be \"set:[imageset name] image:[image name]\".",
+		"")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the top edge image for the frame of the Static widget.
+
+	\par Usage:
+		- Name: TopFrameImage
+		- Format: "set:[text] image:[text]".
+
+	\par Where:
+		- set:[text] is the name of the Imageset containing the image.  The Imageset name should not contain spaces.  The Imageset specified must already be loaded.
+		- image:[text] is the name of the Image on the specified Imageset.  The Image name should not contain spaces.
+*/
+class TopFrameImage : public Property
+{
+public:
+	TopFrameImage() : Property(
+		"TopFrameImage",
+		"Property to get/set the top edge image for the frame of the Static widget.  Value should be \"set:[imageset name] image:[image name]\".",
+		"")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the bottom edge image for the frame of the Static widget.
+
+	\par Usage:
+		- Name: BottomFrameImage
+		- Format: "set:[text] image:[text]".
+
+	\par Where:
+		- set:[text] is the name of the Imageset containing the image.  The Imageset name should not contain spaces.  The Imageset specified must already be loaded.
+		- image:[text] is the name of the Image on the specified Imageset.  The Image name should not contain spaces.
+*/
+class BottomFrameImage : public Property
+{
+public:
+	BottomFrameImage() : Property(
+		"BottomFrameImage",
+		"Property to get/set the bottom edge image for the frame of the Static widget.  Value should be \"set:[imageset name] image:[image name]\".",
+		"")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+
+
+} // End of  StaticProperties namespace section
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIStaticProperties_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIProgressBarProperties.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIProgressBarProperties.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIProgressBarProperties.h	(revision 1092)
@@ -0,0 +1,98 @@
+/************************************************************************
+	filename: 	CEGUIProgressBarProperties.h
+	created:	10/7/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to properties for the ProgressBar class
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIProgressBarProperties_h_
+#define _CEGUIProgressBarProperties_h_
+
+#include "CEGUIProperty.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+// Start of ProgressBarProperties namespace section
+/*!
+\brief
+	Namespace containing all classes that make up the properties interface for the ProgressBar class
+*/
+namespace ProgressBarProperties
+{
+/*!
+\brief
+	Property to access the current progress of the progress bar.
+
+	\par Usage:
+		- Name: CurrentProgress
+		- Format: "[float]".
+
+	\par Where:
+		- [float] is the current progress of the bar expressed as a value between 0 and 1.
+*/
+class CurrentProgress : public Property
+{
+public:
+	CurrentProgress() : Property(
+		"CurrentProgress",
+		"Property to get/set the current progress of the progress bar.  Value is a float  value between 0.0 and 1.0 specifying the progress.",
+		"0")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the step size setting for the progress bar.
+
+	\par Usage:
+		- Name: StepSize
+		- Format: "[float]".
+
+	\par Where:
+		- [float] is the size of the invisible sizing border in screen pixels.
+*/
+class StepSize : public Property
+{
+public:
+	StepSize() : Property(
+		"StepSize",
+		"Property to get/set the step size setting for the progress bar.  Value is a float value.",
+		"0.01")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+} // End of  ProgressBarProperties namespace section
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIProgressBarProperties_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIStaticImageProperties.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIStaticImageProperties.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIStaticImageProperties.h	(revision 1092)
@@ -0,0 +1,160 @@
+/************************************************************************
+	filename: 	CEGUIStaticImageProperties.h
+	created:	10/7/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface for StaticImage property classes
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIStaticImageProperties_h_
+#define _CEGUIStaticImageProperties_h_
+
+#include "CEGUIProperty.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+// Start of StaticImageProperties namespace section
+/*!
+\brief
+	Namespace containing all classes that make up the properties interface for the StaticImage class
+*/
+namespace StaticImageProperties
+{
+/*!
+\brief
+	Property to access the image for the StaticImage widget.
+
+	\par Usage:
+		- Name: Image
+		- Format: "set:[text] image:[text]".
+
+	\par Where:
+		- set:[text] is the name of the Imageset containing the image.  The Imageset name should not contain spaces.  The Imageset specified must already be loaded.
+		- image:[text] is the name of the Image on the specified Imageset.  The Image name should not contain spaces.
+*/
+class Image : public Property
+{
+public:
+	Image() : Property(
+		"Image",
+		"Property to get/set the image for the StaticImage widget.  Value should be \"set:[imageset name] image:[image name]\".",
+		"")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the image colours for the StaticImage widget.
+
+	\par Usage:
+		- Name: ImageColours
+		- Format: "tl:[aarrggbb] tr:[aarrggbb] bl:[aarrggbb] br:[aarrggbb]".
+
+	\par Where:
+		- tl:[aarrggbb] is the top-left colour value specified as ARGB (hex).
+		- tr:[aarrggbb] is the top-right colour value specified as ARGB (hex).
+		- bl:[aarrggbb] is the bottom-left colour value specified as ARGB (hex).
+		- br:[aarrggbb] is the bottom-right colour value specified as ARGB (hex).
+*/
+class ImageColours : public Property
+{
+public:
+	ImageColours() : Property(
+		"ImageColours",
+		"Property to get/set the text colours for the StaticImage widget.  Value is \"tl:[aarrggbb] tr:[aarrggbb] bl:[aarrggbb] br:[aarrggbb]\".",
+		"tl:FFFFFFFF tr:FFFFFFFF bl:FFFFFFFF br:FFFFFFFF")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the horizontal formatting mode setting.
+
+	\par Usage:
+		- Name: HorzFormatting
+		- Format: "[text]".
+
+	\par Where [text] is one of:
+		- "LeftAligned"
+		- "RightAligned"
+		- "HorzCentred"
+		- "HorzStretched"
+		- "HorzTiled"
+*/
+class HorzFormatting : public Property
+{
+public:
+	HorzFormatting() : Property(
+		"HorzFormatting",
+		"Property to get/set the horizontal formatting mode.  Value is one of the HorzFormatting strings.",
+		"HorzStretched")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the vertical formatting mode setting.
+
+	\par Usage:
+		- Name: VertFormatting
+		- Format: "[text]".
+
+	\par Where [text] is one of:
+		- "TopAligned"
+		- "BottomAligned"
+		- "VertCentred"
+		- "VertStretched"
+		- "VertTiled"
+*/
+class VertFormatting : public Property
+{
+public:
+	VertFormatting() : Property(
+		"VertFormatting",
+		"Property to get/set the vertical formatting mode.  Value is one of the VertFormatting strings.",
+		"VertStretched")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+} // End of  StaticImageProperties namespace section
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIStaticImageProperties_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUITabPane.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUITabPane.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUITabPane.h	(revision 1092)
@@ -0,0 +1,118 @@
+/************************************************************************
+	filename: 	CEGUITabPane.h
+	created:	8/8/2004
+	author:		Steve Streeting
+	
+	purpose:	Defines interface for the content area of a tab control
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUITabPane_h_
+#define _CEGUITabPane_h_
+
+#include "elements/CEGUIStatic.h"
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Base class for a tab pane.
+*/
+class CEGUIEXPORT TabPane : public Static
+{
+public:
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for tab pane widgets.
+	*/
+    TabPane(const String& type, const String& name) : Static(type, name) {}
+
+
+	/*!
+	\brief
+		Destructor for tab pane widgets.
+	*/
+    virtual ~TabPane(void) {}
+
+
+	/*************************************************************************
+		Accessors
+	*************************************************************************/
+
+	/*************************************************************************
+		Manipulators
+	*************************************************************************/
+
+protected:
+	/*************************************************************************
+		Overridden from base class
+	*************************************************************************/
+
+    /*************************************************************************
+		Implementation methods
+	*************************************************************************/
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	virtual bool	testClassName_impl(const String& class_name) const
+	{
+		if (class_name==(const utf8*)"Tabpane")	return true;
+		return Static::testClassName_impl(class_name);
+	}
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+
+private:
+	/*************************************************************************
+		Static Properties for this class
+	*************************************************************************/
+
+
+	/*************************************************************************
+		Private methods
+	*************************************************************************/
+};
+
+} // End of  CEGUI namespace section
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUITabPane_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIItemEntry.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIItemEntry.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIItemEntry.h	(revision 1092)
@@ -0,0 +1,130 @@
+/************************************************************************
+	filename: 	CEGUIItemEntry.h
+	created:	31/3/2005
+	author:		Tomas Lindquist Olsen (based on code by Paul D Turner)
+	
+	purpose:	Interface to base class for ItemEntry widget
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIItemEntry_h_
+#define _CEGUIItemEntry_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIWindow.h"
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+/*!
+\brief
+	Base class for item type widgets.
+*/
+class CEGUIEXPORT ItemEntry : public Window
+{
+public:
+	/*************************************************************************
+		Abstract Implementation Functions (must be provided by derived class)
+	*************************************************************************/
+	/*!
+	\brief
+		Return the "optimal" size for the item
+	
+	\return
+		Size describing the size in pixel that this ItemEntry's content requires
+		for non-clipped rendering
+	*/
+	virtual Size getItemPixelSize(void) = 0;
+
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for ItemEntry objects
+	*/
+	ItemEntry(const String& type, const String& name);
+
+
+	/*!
+	\brief
+		Destructor for ItemEntry objects
+	*/
+	virtual ~ItemEntry(void);
+
+
+protected:
+	/*************************************************************************
+		Implementation Functions
+	*************************************************************************/
+	/*!
+	\brief
+		Add itementry specific events
+	*/
+	void	addItemEntryEvents(void);
+
+
+	/*!
+    \brief
+        Perform the actual rendering for this Window.
+
+    \param z
+        float value specifying the base Z co-ordinate that should be used when rendering
+
+    \return
+        Nothing
+    */
+    virtual void    drawSelf(float z) {};
+
+
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	virtual bool	testClassName_impl(const String& class_name) const
+	{
+		if (class_name==(const utf8*)"ItemEntry")	return true;
+		return Window::testClassName_impl(class_name);
+	}
+   
+};
+
+} // End of  CEGUI namespace section
+
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+
+#endif	// end of guard _CEGUIItemEntry_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIFrameWindow.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIFrameWindow.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIFrameWindow.h	(revision 1092)
@@ -0,0 +1,639 @@
+/************************************************************************
+	filename: 	CEGUIFrameWindow.h
+	created:	13/4/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to base class for FrameWindow
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIFrameWindow_h_
+#define _CEGUIFrameWindow_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIWindow.h"
+#include "elements/CEGUIFrameWindowProperties.h"
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Abstract base class for a movable, sizable, window with a title-bar and a frame.
+*/
+class CEGUIEXPORT FrameWindow : public Window
+{
+public:
+	static const String EventNamespace;				//!< Namespace for global events
+
+
+	/*************************************************************************
+		Constants	
+	*************************************************************************/
+	// additional event names for this window
+	static const String EventRollupToggled;		//!< Fired when the rollup (shade) state of the window changes
+	static const String EventCloseClicked;		//!< Fired when the close button for the window is clicked.
+
+	// other bits
+	static const float	DefaultSizingBorderSize;	//!< Default size for the sizing border (in pixels)
+
+
+	/*!
+	\brief
+		Enumeration that defines the set of possible locations for the mouse on a frame windows sizing border.
+	*/
+	enum SizingLocation {
+		SizingNone,			//!< Position is not a sizing location.
+		SizingTopLeft,		//!< Position will size from the top-left.
+		SizingTopRight,		//!< Position will size from the top-right.
+		SizingBottomLeft,	//!< Position will size from the bottom left.
+		SizingBottomRight,	//!< Position will size from the bottom right.
+		SizingTop,			//!< Position will size from the top.
+		SizingLeft,			//!< Position will size from the left.
+		SizingBottom,		//!< Position will size from the bottom.
+		SizingRight         //!< Position will size from the right.
+	};
+
+	/*!
+	\brief
+		Initialises the Window based object ready for use.
+
+	\note
+		This must be called for every window created.  Normally this is handled automatically by the WindowFactory for each Window type.
+
+	\return
+		Nothing
+	*/
+	virtual void	initialise(void);
+	
+	
+	/*!
+	\brief
+		Return whether this window is sizable.  Note that this requires that the window have an enabled frame and that sizing itself is enabled
+
+	\return
+		true if the window can be sized, false if the window can not be sized
+	*/
+	bool	isSizingEnabled(void) const					{return d_sizingEnabled && isFrameEnabled();}
+
+
+	/*!
+	\brief
+		Return whether the frame for this window is enabled.
+
+	\return
+		true if the frame for this window is enabled, false if the frame for this window is disabled.
+	*/
+	bool	isFrameEnabled(void) const					{return d_frameEnabled;}
+
+
+	/*!
+	\brief
+		Return whether the title bar for this window is enabled.
+
+	\return
+		true if the window has a title bar and it is enabled, false if the window has no title bar or if the title bar is disabled.
+	*/	
+	bool	isTitleBarEnabled(void) const				{return (d_titlebar != NULL) && !((Window*)d_titlebar)->isDisabled();}
+
+
+	/*!
+	\brief
+		Return whether this close button for this window is enabled.
+
+	\return
+		true if the window has a close button and it is enabled, false if the window either has no close button or if the close button is disabled.
+	*/
+	bool	isCloseButtonEnabled(void) const			{return (d_closeButton != NULL) && !((Window*)d_closeButton)->isDisabled();}
+
+
+	/*!
+	\brief
+		Return whether roll up (a.k.a shading) is enabled for this window.
+
+	\return
+		true if roll up is enabled, false if roll up is disabled.
+	*/
+	bool	isRollupEnabled(void) const					{return d_rollupEnabled;}
+
+
+	/*!
+	\brief
+		Return whether the window is currently rolled up (a.k.a shaded).
+
+	\return
+		true if the window is rolled up, false if the window is not rolled up.
+	*/
+	bool	isRolledup(void) const						{return d_rolledup;}
+
+
+	/*!
+	\brief
+		Return the thickness of the sizing border.
+
+	\return
+		float value describing the thickness of the sizing border in screen pixels.
+	*/
+	float	getSizingBorderThickness(void) const		{return d_borderSize;}
+
+
+	/*!
+	\brief
+		Enables or disables sizing for this window.
+
+	\param setting
+		set to true to enable sizing (also requires frame to be enabled), or false to disable sizing.
+
+	\return
+		nothing
+	*/
+	void	setSizingEnabled(bool setting);
+
+
+	/*!
+	\brief
+		Enables or disables the frame for this window.
+
+	\param setting
+		set to true to enable the frame for this window, or false to disable the frame for this window.
+
+	\return
+		Nothing.
+	*/
+	void	setFrameEnabled(bool setting);
+
+
+	/*!
+	\brief
+		Enables or disables the title bar for the frame window.
+
+	\param setting
+		set to true to enable the title bar (if one is attached), or false to disable the title bar.
+
+	\return
+		Nothing.
+	*/
+	void	setTitleBarEnabled(bool setting);
+
+
+	/*!
+	\brief
+		Enables or disables the close button for the frame window.
+
+	\param setting
+		Set to true to enable the close button (if one is attached), or false to disable the close button.
+
+	\return
+		Nothing.
+	*/
+	void	setCloseButtonEnabled(bool setting);
+
+
+	/*!
+	\brief
+		Enables or disables roll-up (shading) for this window.
+
+	\param setting
+		Set to true to enable roll-up for the frame window, or false to disable roll-up.
+
+	\return
+		Nothing.
+	*/
+	void	setRollupEnabled(bool setting);
+
+
+	/*!
+	\brief
+		Toggles the state of the window between rolled-up (shaded) and normal sizes.  This requires roll-up to be enabled.
+
+	\return
+		Nothing
+	*/
+	void	toggleRollup(void);
+
+
+	/*!
+	\brief
+		Set the size of the sizing border for this window.
+
+	\param pixels
+		float value specifying the thickness for the sizing border in screen pixels.
+
+	\return
+		Nothing.
+	*/
+	void	setSizingBorderThickness(float pixels)		{d_borderSize = pixels;}
+
+
+	/*!
+	\brief
+		Set the font to use for the title bar text
+
+	\param name
+		String object holding the name of the font to use.
+
+	\return
+		Nothing.
+	*/
+	void	setTitlebarFont(const String& name);
+
+
+	/*!
+	\brief
+		Set the font to use for the title bar text
+
+	\param font
+		Pointer to the font to use.
+
+	\return
+		Nothing.
+	*/
+	void	setTitlebarFont(Font* font);
+
+
+	/*!
+	\brief
+		Move the window by the pixel offsets specified in \a offset.
+
+		This is intended for internal system use - it is the method by which the title bar moves the frame window.
+
+	\param offset
+		Vector2 object containing the offsets to apply (offsets are in screen pixels).
+
+	\return
+		Nothing.
+	*/
+	void	offsetPixelPosition(const Vector2& offset);
+
+
+	/*!
+	\brief
+		Return whether this FrameWindow can be moved by dragging the title bar.
+
+	\return
+		true if the Window will move when the user drags the title bar, false if the window will not move.
+	*/
+	bool	isDragMovingEnabled(void) const		{return d_dragMovable;}
+
+
+	/*!
+	\brief
+		Set whether this FrameWindow can be moved by dragging the title bar.
+
+	\param setting
+		true if the Window should move when the user drags the title bar, false if the window should not move.
+
+	\return
+		Nothing.
+	*/
+	void	setDragMovingEnabled(bool setting);
+
+
+	/*!
+	\brief
+		Return the font being used for the title bar text
+
+	\return
+		Pointer to the Font being used for the TitleBar on this FrameWindow.
+	*/
+	const Font*	getTitlebarFont(void) const;
+
+
+	/*!
+	\brief
+		Return the current colour used for rendering the caption text
+
+	\return
+		colour value that specifies the colour used when rendering the title bar caption text.
+	*/
+	colour	getCaptionColour(void) const;
+
+
+	/*!
+	\brief
+		Sets the colour to be used for rendering the caption text.
+
+	\param col
+		colour value that specifies the colour to be used when rendering the title bar caption text.
+
+	\return
+		Nothing.
+	*/
+	void	setCaptionColour(colour col);
+
+
+	/*************************************************************************
+		Construction / Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for FrameWindow objects.
+	*/
+	FrameWindow(const String& name, const String& type);
+
+	/*!
+	\brief
+		Destructor for FramwWindow objects.
+	*/
+	virtual ~FrameWindow(void);
+
+
+protected:
+	/*************************************************************************
+		Implementation Functions
+	*************************************************************************/
+	/*!
+	\brief
+		Create a control based upon the Titlebar base class to be used as the title bar for this window.
+
+	\return
+		Pointer to an object who's class derives from Titlebar
+	*/
+	virtual Titlebar*	createTitlebar(void) const		= 0;
+
+
+	/*!
+	\brief
+		Create a control based upon the PushButton base class, to be used at the close button for the window.
+
+	\return
+		Pointer to an object who's class derives from PushButton.
+	*/
+	virtual PushButton*	createCloseButton(void) const	= 0;
+
+
+	/*!
+	\brief
+		Setup size and position for the title bar and close button widgets attached to this window
+
+	\return
+		Nothing.
+	*/
+	virtual void	layoutComponentWidgets()		= 0;
+
+
+	/*!
+	\brief
+		move the window's left edge by 'delta'.  The rest of the window does not move, thus this changes the size of the Window.
+
+	\param delta
+		float value that specifies the amount to move the window edge, and in which direction.  Positive values make window smaller.
+	*/
+	void	moveLeftEdge(float delta);
+
+
+	/*!
+	\brief
+		move the window's right edge by 'delta'.  The rest of the window does not move, thus this changes the size of the Window.
+
+	\param delta
+		float value that specifies the amount to move the window edge, and in which direction.  Positive values make window larger.
+	*/
+	void	moveRightEdge(float delta);
+
+
+	/*!
+	\brief
+		move the window's top edge by 'delta'.  The rest of the window does not move, thus this changes the size of the Window.
+
+	\param delta
+		float value that specifies the amount to move the window edge, and in which direction.  Positive values make window smaller.
+	*/
+	void	moveTopEdge(float delta);
+
+
+	/*!
+	\brief
+		move the window's bottom edge by 'delta'.  The rest of the window does not move, thus this changes the size of the Window.
+
+	\param delta
+		float value that specifies the amount to move the window edge, and in which direction.  Positive values make window larger.
+	*/
+	void	moveBottomEdge(float delta);
+
+
+	/*!
+	\brief
+		check local pixel co-ordinate point 'pt' and return one of the
+		SizingLocation enumerated values depending where the point falls on
+		the sizing border.
+
+	\param pt
+		Point object describing, in pixels, the window relative offset to check.
+
+	\return
+		One of the SizingLocation enumerated values that describe which part of
+		the sizing border that \a pt corresponded to, if any.
+	*/
+	SizingLocation	getSizingBorderAtPoint(const Point& pt) const;
+
+ 
+	/*!
+	\brief
+		return true if given SizingLocation is on left edge.
+
+	\param loc
+		SizingLocation value to be checked.
+
+	\return
+		true if \a loc is on the left edge.  false if \a loc is not on the left edge.
+	*/
+	bool	isLeftSizingLocation(SizingLocation loc) const			{return ((loc == SizingLeft) || (loc == SizingTopLeft) || (loc == SizingBottomLeft));}
+
+
+	/*!
+	\brief
+		return true if given SizingLocation is on right edge.
+
+	\param loc
+		SizingLocation value to be checked.
+
+	\return
+		true if \a loc is on the right edge.  false if \a loc is not on the right edge.
+	*/
+	bool	isRightSizingLocation(SizingLocation loc) const			{return ((loc == SizingRight) || (loc == SizingTopRight) || (loc == SizingBottomRight));}
+
+
+	/*!
+	\brief
+		return true if given SizingLocation is on top edge.
+
+	\param loc
+		SizingLocation value to be checked.
+
+	\return
+		true if \a loc is on the top edge.  false if \a loc is not on the top edge.
+	*/
+	bool	isTopSizingLocation(SizingLocation loc) const			{return ((loc == SizingTop) || (loc == SizingTopLeft) || (loc == SizingTopRight));}
+
+
+	/*!
+	\brief
+		return true if given SizingLocation is on bottom edge.
+
+	\param loc
+		SizingLocation value to be checked.
+
+	\return
+		true if \a loc is on the bottom edge.  false if \a loc is not on the bottom edge.
+	*/
+	bool	isBottomSizingLocation(SizingLocation loc) const		{return ((loc == SizingBottom) || (loc == SizingBottomLeft) || (loc == SizingBottomRight));}
+
+
+	/*!
+	\brief
+		Add frame window specific events
+	*/
+	void	addFrameWindowEvents(void);
+
+
+	/*!
+	\brief
+		Method to respond to close button click events and fire our close event
+	*/
+	bool	closeClickHandler(const EventArgs& e);
+
+
+	/*!
+	\brief
+		Set the appropriate mouse cursor for the given window-relative pixel point.
+	*/
+	void	setCursorForPoint(const Point& pt) const;
+
+
+	/*!
+	\brief
+		Return a Rect that describes, in window relative pixel co-ordinates, the outer edge of the sizing area for this window.
+	*/
+	virtual	Rect	getSizingRect(void) const		{return Rect(0, 0, d_abs_area.getWidth(), d_abs_area.getHeight());}
+
+
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	virtual bool	testClassName_impl(const String& class_name) const
+	{
+		if (class_name==(const utf8*)"FrameWindow")	return true;
+		return Window::testClassName_impl(class_name);
+	}
+
+
+	/*************************************************************************
+		New events for Frame Windows
+	*************************************************************************/
+	/*!
+	\brief
+		Event generated internally whenever the roll-up / shade state of the window
+		changes.
+	*/
+	virtual void	onRollupToggled(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Event generated internally whenever the close button is clicked.
+	*/
+	virtual void	onCloseClicked(WindowEventArgs& e);
+
+
+	/*************************************************************************
+		Overridden event handlers
+	*************************************************************************/
+	virtual void	onMouseMove(MouseEventArgs& e);
+	virtual void	onMouseButtonDown(MouseEventArgs& e);
+	virtual void	onMouseButtonUp(MouseEventArgs& e);
+	virtual void	onCaptureLost(WindowEventArgs& e);
+	virtual void	onSized(WindowEventArgs& e);
+	virtual void	onParentSized(WindowEventArgs& e);
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	// frame data
+	bool	d_frameEnabled;		//!< true if window frame should be drawn.
+
+	// window roll-up data
+	bool	d_rollupEnabled;	//!< true if roll-up of window is allowed.
+	bool	d_rolledup;			//!< true if window is rolled up.
+	Size	d_abs_openSize;		//!< stores original size of window when rolled-up.
+	Size	d_rel_openSize;		//!< stores original size of window when rolled-up.
+
+	// drag-sizing data
+	bool	d_sizingEnabled;	//!< true if sizing is enabled for this window.
+	bool	d_beingSized;		//!< true if window is being sized.
+	float	d_borderSize;		//!< thickness of the sizing border around this window
+	Point	d_dragPoint;		//!< point window is being dragged at.
+
+	// composite controls
+	Titlebar*	d_titlebar;				//!< points to the title bar widget.
+	PushButton*	d_closeButton;			//!< points to close button widget.
+
+	// images for cursor when on sizing border
+	const Image*	d_nsSizingCursor;		//!< North/South sizing cursor image.
+	const Image*	d_ewSizingCursor;		//!< East/West sizing cursor image.
+	const Image*	d_nwseSizingCursor;		//!< North-West/South-East cursor image.
+	const Image*	d_neswSizingCursor;		//!< North-East/South-West cursor image.
+
+	bool	d_dragMovable;		//!< true if the window will move when dragged by the title bar.
+
+
+private:
+	/*************************************************************************
+		Static Properties for this class
+	*************************************************************************/
+	static FrameWindowProperties::SizingEnabled		d_sizingEnabledProperty;
+	static FrameWindowProperties::FrameEnabled		d_frameEnabledProperty;
+	static FrameWindowProperties::TitlebarEnabled	d_titlebarEnabledProperty;
+	static FrameWindowProperties::CloseButtonEnabled d_closeButtonEnabledProperty;
+	static FrameWindowProperties::RollUpState		d_rollUpStateProperty;
+	static FrameWindowProperties::RollUpEnabled		d_rollUpEnabledProperty;
+	static FrameWindowProperties::DragMovingEnabled	d_dragMovingEnabledProperty;
+	static FrameWindowProperties::SizingBorderThickness d_sizingBorderThicknessProperty;
+	static FrameWindowProperties::TitlebarFont		d_titlebarFontProperty;
+	static FrameWindowProperties::CaptionColour		d_captionColourProperty;
+
+
+	/*************************************************************************
+		Private methods
+	*************************************************************************/
+	void	addFrameWindowProperties(void);
+};
+
+} // End of  CEGUI namespace section
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUIFrameWindow_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIScrollbar.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIScrollbar.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIScrollbar.h	(revision 1092)
@@ -0,0 +1,512 @@
+/************************************************************************
+	filename: 	CEGUIScrollbar.h
+	created:	13/4/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to base class for Scrollbar widget
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIScrollbar_h_
+#define _CEGUIScrollbar_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIWindow.h"
+#include "elements/CEGUIScrollbarProperties.h"
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Base scroll bar class.
+
+	This base class for scroll bars does not have any idea of direction - a derived class would
+	add whatever meaning is appropriate according to what that derived class
+	represents to the user.
+*/
+class CEGUIEXPORT Scrollbar : public Window
+{
+public:
+	static const String EventNamespace;				//!< Namespace for global events
+
+	/*************************************************************************
+		Event name constants
+	*************************************************************************/
+	static const String EventScrollPositionChanged;		//!< Name of the event fired when the scroll bar position value changes
+	static const String EventThumbTrackStarted;			//!< Name of the event fired when the user begins dragging the thumb.
+	static const String EventThumbTrackEnded;				//!< Name of the event fired when the user releases the thumb.
+	static const String EventScrollConfigChanged;			//!< Name of the event fired when the scroll bar configuration data changes.
+
+
+	/*************************************************************************
+		Accessor functions
+	*************************************************************************/
+	/*!
+	\brief
+		Return the size of the document or data.
+		
+		The document size should be thought of as the total size of the data that
+		is being scrolled through (the number of lines in a text file for example).
+
+	\note
+		The returned value has no meaning within the Gui system, it is left up to the
+		application to assign appropriate values for the application specific use of
+		the scroll bar.
+
+	\return
+		float value specifying the currently set document size.
+	*/
+	float	getDocumentSize(void) const			{return d_documentSize;}
+
+
+	/*!
+	\brief
+		Return the page size for this scroll bar.
+		
+		The page size is typically the amount of data that can be displayed at one
+		time.  This value is also used when calculating the amount the position will
+		change when you click either side of the scroll bar thumb - the amount the
+		position changes will is (pageSize - overlapSize).
+
+	\note
+		The returned value has no meaning within the Gui system, it is left up to the
+		application to assign appropriate values for the application specific use of
+		the scroll bar.
+
+	\return
+		float value specifying the currently set page size.
+	*/
+	float	getPageSize(void) const				{return d_pageSize;}
+
+
+	/*!
+	\brief
+		Return the step size for this scroll bar.
+		
+		The step size is typically a single unit of data that can be displayed, this is the
+		amount the position will change when you click either of the arrow buttons on the
+		scroll bar.  (this could be 1 for a single line of text, for example).
+
+	\note
+		The returned value has no meaning within the Gui system, it is left up to the
+		application to assign appropriate values for the application specific use of
+		the scroll bar.
+
+	\return
+		float value specifying the currently set step size.
+	*/
+	float	getStepSize(void) const				{return d_stepSize;}
+
+
+	/*!
+	\brief
+		Return the overlap size for this scroll bar.
+		
+		The overlap size is the amount of data from the end of a 'page' that will
+		remain visible when the position is moved by a page.  This is usually used
+		so that the user keeps some context of where they were within the document's
+		data when jumping a page at a time.
+
+	\note
+		The returned value has no meaning within the Gui system, it is left up to the
+		application to assign appropriate values for the application specific use of
+		the scroll bar.
+
+	\return
+		float value specifying the currently set overlap size.
+	*/
+	float	getOverlapSize(void) const			{return d_overlapSize;}
+
+
+	/*!
+	\brief
+		Return the current position of scroll bar within the document.
+
+		The range of the scroll bar is from 0 to the size of the document minus the
+		size of a page (0 <= position <= (documentSize - pageSize)).
+
+	\note
+		The returned value has no meaning within the Gui system, it is left up to the
+		application to assign appropriate values for the application specific use of
+		the scroll bar.
+
+	\return
+		float value specifying the current position of the scroll bar within its
+		document.
+	*/
+	float	getScrollPosition(void) const		{return d_position;}
+
+
+	/*************************************************************************
+		Manipulator Commands
+	*************************************************************************/
+	/*!
+	\brief
+		Initialises the Scrollbar object ready for use.
+
+	\note
+		This must be called for every window created.  Normally this is handled automatically by the WindowFactory for each Window type.
+
+	\return
+		Nothing
+	*/
+	virtual void	initialise(void);
+
+
+	/*!
+	\brief
+		Set the size of the document or data.
+		
+		The document size should be thought of as the total size of the data that
+		is being scrolled through (the number of lines in a text file for example).
+
+	\note
+		The value set has no meaning within the Gui system, it is left up to the
+		application to assign appropriate values for the application specific use of
+		the scroll bar.
+
+	\param document_size
+		float value specifying the document size.
+
+	\return
+		Nothing.
+	*/
+	void	setDocumentSize(float document_size);
+
+
+	/*!
+	\brief
+		Set the page size for this scroll bar.
+		
+		The page size is typically the amount of data that can be displayed at one
+		time.  This value is also used when calculating the amount the position will
+		change when you click either side of the scroll bar thumb - the amount the
+		position changes will is (pageSize - overlapSize).
+
+	\note
+		The value set has no meaning within the Gui system, it is left up to the
+		application to assign appropriate values for the application specific use of
+		the scroll bar.
+
+	\param page_size
+		float value specifying the page size.
+
+	\return
+		Nothing.
+	*/
+	void	setPageSize(float page_size);
+
+
+	/*!
+	\brief
+		Set the step size for this scroll bar.
+		
+		The step size is typically a single unit of data that can be displayed, this is the
+		amount the position will change when you click either of the arrow buttons on the
+		scroll bar.  (this could be 1 for a single line of text, for example).
+
+	\note
+		The value set has no meaning within the Gui system, it is left up to the
+		application to assign appropriate values for the application specific use of
+		the scroll bar.
+
+	\param step_size
+		float value specifying the step size.
+
+	\return
+		Nothing.
+	*/
+	void	setStepSize(float step_size);
+
+
+	/*!
+	\brief
+		Set the overlap size for this scroll bar.
+		
+		The overlap size is the amount of data from the end of a 'page' that will
+		remain visible when the position is moved by a page.  This is usually used
+		so that the user keeps some context of where they were within the document's
+		data when jumping a page at a time.
+
+	\note
+		The value set has no meaning within the Gui system, it is left up to the
+		application to assign appropriate values for the application specific use of
+		the scroll bar.
+
+	\param overlap_size
+		float value specifying the overlap size.
+
+	\return
+		Nothing.
+	*/
+	void	setOverlapSize(float overlap_size);
+
+
+	/*!
+	\brief
+		Set the current position of scroll bar within the document.
+
+		The range of the scroll bar is from 0 to the size of the document minus the
+		size of a page (0 <= position <= (documentSize - pageSize)), any attempt to
+		set the position outside this range will be adjusted so that it falls within
+		the legal range.
+
+	\note
+		The returned value has no meaning within the Gui system, it is left up to the
+		application to assign appropriate values for the application specific use of
+		the scroll bar.
+
+	\param position
+		float value specifying the position of the scroll bar within its
+		document.
+
+	\return
+		Nothing.
+	*/
+	void	setScrollPosition(float position);
+
+
+	/*************************************************************************
+		Construction / Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for Scrollbar objects
+	*/
+	Scrollbar(const String& type, const String& name);
+
+
+	/*!
+	\brief
+		Destructor for Scrollbar objects
+	*/
+	virtual ~Scrollbar(void);
+
+
+protected:
+	/*************************************************************************
+		Implementation Methods
+	*************************************************************************/
+	/*!
+	\brief
+		Add scroll bar specific events
+	*/
+	void	addScrollbarEvents(void);
+
+
+	/*!
+	\brief
+		create a PushButton based widget to use as the increase button for this scroll bar.
+	*/
+	virtual PushButton*	createIncreaseButton(void) const		= 0;
+
+
+	/*!
+	\brief
+		create a PushButton based widget to use as the decrease button for this scroll bar.
+	*/
+	virtual PushButton*	createDecreaseButton(void) const		= 0;
+
+
+	/*!
+	\brief
+		create a Thumb based widget to use as the thumb for this scroll bar.
+	*/
+	virtual Thumb*	createThumb(void) const		= 0;
+
+
+	/*!
+	\brief
+		layout the scroll bar component widgets
+	*/
+	virtual void	layoutComponentWidgets(void)	= 0;
+
+
+	/*!
+	\brief
+		update the size and location of the thumb to properly represent the current state of the scroll bar
+	*/
+	virtual void	updateThumb(void)	= 0;
+
+
+	/*!
+	\brief
+		return value that best represents current scroll bar position given the current location of the thumb.
+
+	\return
+		float value that, given the thumb widget position, best represents the current position for the scroll bar.
+	*/
+	virtual float	getValueFromThumb(void) const	= 0;
+
+
+	/*!
+	\brief
+		Given window location \a pt, return a value indicating what change should be 
+		made to the scroll bar.
+
+	\param pt
+		Point object describing a pixel position in window space.
+
+	\return
+		- -1 to indicate scroll bar position should be moved to a lower value.
+		-  0 to indicate scroll bar position should not be changed.
+		- +1 to indicate scroll bar position should be moved to a higher value.
+	*/
+	virtual float	getAdjustDirectionFromPoint(const Point& pt) const	= 0;
+
+
+	/*!
+	\brief
+		handler function for when thumb moves.
+	*/
+	bool	handleThumbMoved(const EventArgs& e);
+
+
+	/*!
+	\brief
+		handler function for when the increase button is clicked.
+	*/
+	bool	handleIncreaseClicked(const EventArgs& e);
+
+
+	/*!
+	\brief
+		handler function for when the decrease button is clicked.
+	*/
+	bool	handleDecreaseClicked(const EventArgs& e);
+
+
+	/*!
+	\brief
+		handler function for when thumb tracking begins
+	*/
+	bool	handleThumbTrackStarted(const EventArgs& e);
+
+
+	/*!
+	\brief
+		handler function for when thumb tracking begins
+	*/
+	bool	handleThumbTrackEnded(const EventArgs& e);
+
+
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	virtual bool	testClassName_impl(const String& class_name) const
+	{
+		if (class_name==(const utf8*)"Scrollbar")	return true;
+		return Window::testClassName_impl(class_name);
+	}
+
+
+	/*************************************************************************
+		New event handlers for slider widget
+	*************************************************************************/
+	/*!
+	\brief
+		Handler triggered when the scroll position changes
+	*/
+	virtual void	onScrollPositionChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler triggered when the user begins to drag the scroll bar thumb. 
+	*/
+	virtual void	onThumbTrackStarted(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler triggered when the scroll bar thumb is released
+	*/
+	virtual void	onThumbTrackEnded(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler triggered when the scroll bar data configuration changes
+	*/
+	virtual void	onScrollConfigChanged(WindowEventArgs& e);
+
+
+	/*************************************************************************
+		Overridden event handlers
+	*************************************************************************/
+	virtual void	onMouseButtonDown(MouseEventArgs& e);
+	virtual void	onSized(WindowEventArgs& e);
+	virtual	void	onMouseWheel(MouseEventArgs& e);
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	float	d_documentSize;		//!< The size of the document / data being scrolled thorugh.
+	float	d_pageSize;			//!< The size of a single 'page' of data.
+	float	d_stepSize;			//!< Step size used for increase / decrease button clicks.
+	float	d_overlapSize;		//!< Amount of overlap when jumping by a page.
+	float	d_position;			//!< Current scroll position.
+
+	// Pointers to the controls that make up the scroll bar
+	Thumb*		d_thumb;		//!< widget used to represent the 'thumb' of the scroll bar.
+	PushButton*	d_increase;		//!< Widget used for the increase button of the scroll bar.
+	PushButton*	d_decrease;		//!< Widget used for the decrease button of the scroll bar.
+
+
+private:
+	/*************************************************************************
+		Static Properties for this class
+	*************************************************************************/
+	static ScrollbarProperties::DocumentSize	d_documentSizeProperty;
+	static ScrollbarProperties::PageSize		d_pageSizeProperty;
+	static ScrollbarProperties::StepSize		d_stepSizeProperty;
+	static ScrollbarProperties::OverlapSize		d_overlapSizeProperty;
+	static ScrollbarProperties::ScrollPosition	d_scrollPositionProperty;
+
+
+	/*************************************************************************
+		Private methods
+	*************************************************************************/
+	void	addScrollbarProperties(void);
+};
+
+
+} // End of  CEGUI namespace section
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUIScrollbar_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIListHeaderSegmentProperties.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIListHeaderSegmentProperties.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIListHeaderSegmentProperties.h	(revision 1092)
@@ -0,0 +1,152 @@
+/************************************************************************
+	filename: 	CEGUIListHeaderSegmentProperties.h
+	created:	11/7/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to properties for ListHeaderSegment class
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIListHeaderSegmentProperties_h_
+#define _CEGUIListHeaderSegmentProperties_h_
+
+#include "CEGUIProperty.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+// Start of ListHeaderSegmentProperties namespace section
+/*!
+\brief
+	Namespace containing all classes that make up the properties interface for the ListHeaderSegment class
+*/
+namespace ListHeaderSegmentProperties
+{
+/*!
+\brief
+	Property to access the sizable setting of the header segment.
+
+	\par Usage:
+		- Name: Sizable
+		- Format: "[text]"
+
+	\par Where [Text] is:
+		- "True" to indicate the segment can be sized by the user.
+		- "False" to indicate the segment can not be sized by the user.
+*/
+class Sizable : public Property
+{
+public:
+	Sizable() : Property(
+		"Sizable",
+		"Property to get/set the sizable setting of the header segment.  Value is either \"True\" or \"False\".",
+		"True")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the click-able setting of the header segment.
+
+	\par Usage:
+		- Name: Clickable
+		- Format: "[text]"
+
+	\par Where [Text] is:
+		- "True" to indicate the segment can be clicked by the user.
+		- "False" to indicate the segment can not be clicked by the user.
+*/
+class Clickable : public Property
+{
+public:
+	Clickable() : Property(
+		"Clickable",
+		"Property to get/set the click-able setting of the header segment.  Value is either \"True\" or \"False\".",
+		"True")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the drag-able setting of the header segment.
+
+	\par Usage:
+		- Name: Dragable
+		- Format: "[text]"
+
+	\par Where [Text] is:
+		- "True" to indicate the segment can be dragged by the user.
+		- "False" to indicate the segment can not be dragged by the user.
+*/
+class Dragable : public Property
+{
+public:
+	Dragable() : Property(
+		"Dragable",
+		"Property to get/set the drag-able setting of the header segment.  Value is either \"True\" or \"False\".",
+		"True")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the sort direction setting of the header segment.
+
+	\par Usage:
+		- Name: SortDirection
+		- Format: "[text]"
+
+	\par Where [Text] is one of:
+		- "Ascending"
+		- "Descending"
+		- "None"
+*/
+class SortDirection : public Property
+{
+public:
+	SortDirection() : Property(
+		"SortDirection",
+		"Property to get/set the sort direction setting of the header segment.  Value is the text of one of the SortDirection enumerated value names.",
+		"None")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+} // End of  ListHeaderSegmentProperties namespace section
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIListHeaderSegmentProperties_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIPushButtonProperties.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIPushButtonProperties.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIPushButtonProperties.h	(revision 1092)
@@ -0,0 +1,181 @@
+/************************************************************************
+	filename: 	CEGUIPushButtonProperties.h
+	created:	22/2/2005
+	author:		Paul D Turner
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIPushButtonProperties_h_
+#define _CEGUIPushButtonProperties_h_
+
+#include "CEGUIProperty.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+// Start of PushButtonProperties namespace section
+/*!
+\brief
+   Namespace containing all classes that make up the properties
+   interface for the PushButton class
+*/
+namespace PushButtonProperties
+{
+
+/*!
+\brief
+   Property to access the normal image of the button
+
+   \par Usage:
+      - Name: NormalImage
+      - Format: "set:<imageset> image:<imagename>".
+
+*/
+class NormalImage : public Property
+{
+public:
+   NormalImage() : Property(
+	   "NormalImage", 
+	   "Property to get/set the normal image for the PushButton widget.  Value should be \"set:[imageset name] image:[image name]\".",
+	   "")
+   {}
+
+   String   get(const PropertyReceiver* receiver) const;
+   void   set(PropertyReceiver* receiver, const String& value);
+};
+
+/*!
+\brief
+   Property to access the pushed image of the button
+
+   \par Usage:
+      - Name: PushedImage
+      - Format: "set:<imageset> image:<imagename>".
+
+*/
+class PushedImage : public Property
+{
+public:
+   PushedImage() : Property(
+	   "PushedImage",
+	   "Property to get/set the pushed image for the PushButton widget.  Value should be \"set:[imageset name] image:[image name]\".",
+	   "")
+   {}
+
+   String   get(const PropertyReceiver* receiver) const;
+   void   set(PropertyReceiver* receiver, const String& value);
+};
+
+/*!
+\brief
+   Property to access the hover image of the button
+
+   \par Usage:
+      - Name: HoverImage
+      - Format: "set:<imageset> image:<imagename>".
+
+*/
+class HoverImage : public Property
+{
+public:
+   HoverImage() : Property(
+	   "HoverImage",
+	   "Property to get/set the hover image for the PushButton widget.  Value should be \"set:[imageset name] image:[image name]\".",
+	   "")
+   {}
+
+   String   get(const PropertyReceiver* receiver) const;
+   void   set(PropertyReceiver* receiver, const String& value);
+};
+
+/*!
+\brief
+   Property to access the disabled image of the button
+
+   \par Usage:
+      - Name: DisabledImage
+      - Format: "set:<imageset> image:<imagename>".
+
+*/
+class DisabledImage : public Property
+{
+public:
+   DisabledImage() : Property(
+	   "DisabledImage",
+	   "Property to get/set the disabled image for the PushButton widget.  Value should be \"set:[imageset name] image:[image name]\".",
+	   "")
+   {}
+
+   String   get(const PropertyReceiver* receiver) const;
+   void   set(PropertyReceiver* receiver, const String& value);
+};
+
+/*!
+\brief
+   Property to access whether to use the standard images or the supplied custom ones
+
+   \par Usage:
+      - Name: UseStandardImagery
+      - Format: "True|False".
+
+*/
+class UseStandardImagery : public Property
+{
+public:
+   UseStandardImagery() : Property(
+	   "UseStandardImagery",
+	   "Property to get/set whether to use the standard imagery for the PushButton widget.  Value should be \"True\" or \"False\".",
+	   "True")
+   {}
+
+   String   get(const PropertyReceiver* receiver) const;
+   void   set(PropertyReceiver* receiver, const String& value);
+};
+
+/*!
+\brief
+   Property to access an offset that is used to shift the text in the x-direction.
+
+   \par Usage:
+      - Name: UseStandardImagery
+      - Format: "<xoffset>".
+
+   \par
+      where <xoffset> is a float value specifying the offset relative to the button-size
+
+*/
+class TextXOffset : public Property
+{
+public:
+   TextXOffset() : Property(
+	   "TextXOffset",
+	   "Property to get/set a relative x offset for the button's text",
+	   "0")
+   {}
+
+   String get(const PropertyReceiver* receiver) const;
+   void set(PropertyReceiver* receiver, const String& value);
+};
+
+}
+
+}
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIRadioButton.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIRadioButton.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIRadioButton.h	(revision 1092)
@@ -0,0 +1,215 @@
+/************************************************************************
+	filename: 	CEGUIRadioButton.h
+	created:	13/4/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to base class for RadioButton widget
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIRadioButton_h_
+#define _CEGUIRadioButton_h_
+
+#include "CEGUIBase.h"
+#include "elements/CEGUIButtonBase.h"
+#include "elements/CEGUIRadioButtonProperties.h"
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Base class to provide the logic for Radio Button widgets.
+
+*/
+class CEGUIEXPORT RadioButton : public ButtonBase
+{
+public:
+	static const String EventNamespace;				//!< Namespace for global events
+
+
+	/*************************************************************************
+		Event name constants
+	*************************************************************************/
+	// generated internally by Window
+	static const String EventSelectStateChanged;			//!< The selected state of the widget has changed.
+
+
+	/*************************************************************************
+		Accessor Functions
+	*************************************************************************/ 
+	/*!
+	\brief
+		return true if the radio button is selected (has the checkmark)
+
+	\return
+		true if this widget is selected, false if the widget is not selected.
+	*/
+	bool	isSelected(void) const				{return d_selected;}
+
+	
+	/*!
+	\brief
+		return the groupID assigned to this radio button
+
+	\return
+		ulong value that identifies the Radio Button group this widget belongs to.
+	*/
+	ulong	getGroupID(void) const				{return d_groupID;}
+
+
+	/*!
+	\brief
+		Return a pointer to the RadioButton object within the same group as this RadioButton, that
+		is currently selected.
+
+	\return
+		Pointer to the RadioButton object that is the RadioButton within the same group as this RadioButton,
+		and is attached to the same parent window as this RadioButton, that is currently selected.
+		Returns NULL if no button within the group is selected, or if 'this' is not attached to a parent window.
+	*/
+	RadioButton*	getSelectedButtonInGroup(void) const;
+
+
+	/*************************************************************************
+		Manipulator Functions
+	*************************************************************************/
+	/*!
+	\brief
+		set whether the radio button is selected or not
+
+	\param select
+		true to put the radio button in the selected state, false to put the radio button in the
+		deselected state.  If changing to the selected state, any previously selected radio button
+		within the same group is automatically deselected.
+
+	\return
+		Nothing.
+	*/
+	void	setSelected(bool select);
+
+	
+	/*!
+	\brief
+		set the groupID for this radio button
+
+	\param group
+		ulong value specifying the radio button group that this widget belongs to.
+
+	\return	
+		Nothing.
+	*/
+	void	setGroupID(ulong group);
+
+
+	/*************************************************************************
+		Construction / Destruction
+	*************************************************************************/
+	RadioButton(const String& type, const String& name);
+	virtual ~RadioButton(void);
+
+
+protected:
+	/*************************************************************************
+		Implementation Functions
+	*************************************************************************/
+	/*!
+	\brief
+		Add radio button specific events
+	*/
+	void	addRadioButtonEvents(void);
+
+
+	/*!
+	\brief
+		Deselect any selected radio buttons attached to the same parent within the same group
+		(but not do not deselect 'this').
+	*/
+	void	deselectOtherButtonsInGroup(void) const;
+
+
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	virtual bool	testClassName_impl(const String& class_name) const
+	{
+		if (class_name==(const utf8*)"RadioButton")	return true;
+		return ButtonBase::testClassName_impl(class_name);
+	}
+
+
+	/*************************************************************************
+		New Radio Button Events
+	*************************************************************************/
+	/*!
+	\brief
+		event triggered internally when the select state of the button changes.
+	*/
+	virtual void	onSelectStateChanged(WindowEventArgs& e);
+
+
+	/*************************************************************************
+		Overridden Event handlers
+	*************************************************************************/
+	virtual void	onMouseButtonUp(MouseEventArgs& e);
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	bool		d_selected;				// true when radio button is selected (has checkmark)
+	ulong		d_groupID;				// radio button group ID
+
+
+private:
+	/*************************************************************************
+		Static Properties for this class
+	*************************************************************************/
+	static RadioButtonProperties::Selected	d_selectedProperty;
+	static RadioButtonProperties::GroupID	d_groupIDProperty;
+
+
+	/*************************************************************************
+		Private methods
+	*************************************************************************/
+	void	addRadioButtonProperties(void);
+};
+
+
+} // End of  CEGUI namespace section
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUIRadioButton_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIFrameWindowProperties.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIFrameWindowProperties.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIFrameWindowProperties.h	(revision 1092)
@@ -0,0 +1,303 @@
+/************************************************************************
+	filename: 	CEGUIFrameWindowProperties.h
+	created:	10/7/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to properties for FrameWIndow class
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIFrameWindowProperties_h_
+#define _CEGUIFrameWindowProperties_h_
+
+#include "CEGUIProperty.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+// Start of FrameWindowProperties namespace section
+/*!
+\brief
+	Namespace containing all classes that make up the properties interface for the FrameWindow class
+*/
+namespace FrameWindowProperties
+{
+/*!
+\brief
+	Property to access the state of the sizable setting for the FrameWindow.
+
+	\par Usage:
+		- Name: SizingEnabled
+		- Format: "[text]".
+
+	\par Where [Text] is:
+		- "True" to indicate the window will be user re-sizable.
+		- "False" to indicate the window will not be re-sizable by the user.
+*/
+class SizingEnabled : public Property
+{
+public:
+	SizingEnabled() : Property(
+		"SizingEnabled",
+		"Property to get/set the state of the sizable setting for the FrameWindow.  Value is either \"True\" or \"False\".",
+		"True")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the setting for whether the window frame will be displayed.
+
+	\par Usage:
+		- Name: FrameEnabled
+		- Format: "[text]".
+
+	\par Where [Text] is:
+		- "True" to indicate the windows frame should be displayed.
+		- "False" to indicate the windows frame should not be displayed.
+*/
+class FrameEnabled : public Property
+{
+public:
+	FrameEnabled() : Property(
+		"FrameEnabled",
+		"Property to get/set the setting for whether the window frame will be displayed.  Value is either \"True\" or \"False\".",
+		"True")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the setting for whether the window title-bar will be enabled (or displayed depending upon choice of final widget type).
+
+	\par Usage:
+		- Name: TitlebarEnabled
+		- Format: "[text]".
+
+	\par Where [Text] is:
+		- "True" to indicate the windows title bar should be enabled (and/or visible)
+		- "False" to indicate the windows title bar should be disabled (and/or hidden)
+*/
+class TitlebarEnabled : public Property
+{
+public:
+	TitlebarEnabled() : Property(
+		"TitlebarEnabled",
+		"Property to get/set the setting for whether the window title-bar will be enabled (or displayed depending upon choice of final widget type).  Value is either \"True\" or \"False\".",
+		"") 
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the setting for whether the window close button will be enabled (or displayed depending upon choice of final widget type).
+
+	\par Usage:
+		- Name: CloseButtonEnabled
+		- Format: "[text]".
+
+	\par Where [Text] is:
+		- "True" to indicate the windows close button should be enabled (and/or visible)
+		- "False" to indicate the windows close button should be disabled (and/or hidden)
+*/
+class CloseButtonEnabled : public Property
+{
+public:
+	CloseButtonEnabled() : Property(
+		"CloseButtonEnabled",
+		"Property to get/set the setting for whether the window close button will be enabled (or displayed depending upon choice of final widget type).  Value is either \"True\" or \"False\".",
+		"True")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the setting for whether the user is able to roll-up / shade the window.
+
+	\par Usage:
+		- Name: RollUpEnabled
+		- Format: "[text]".
+
+	\par Where [Text] is:
+		- "True" to indicate the user can roll-up / shade the window.
+		- "False" to indicate the user can not roll-up / shade the window.
+*/
+class RollUpEnabled : public Property
+{
+public:
+	RollUpEnabled() : Property(
+		"RollUpEnabled",
+		"Property to get/set the setting for whether the user is able to roll-up / shade the window.  Value is either \"True\" or \"False\".",
+		"True")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the roll-up / shade state of the window.
+
+	\par Usage:
+		- Name: RollUpState
+		- Format: "[text]".
+
+	\par Where [Text] is:
+		- "True" to indicate the window is / should be rolled-up.
+		- "False" to indicate the window is not / should not be rolled up
+*/
+class RollUpState : public Property
+{
+public:
+	RollUpState() : Property(
+		"RollUpState",
+		"Property to get/set the roll-up / shade state of the window.  Value is either \"True\" or \"False\".",
+		"False")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the setting for whether the user may drag the window around by its title bar.
+
+	\par Usage:
+		- Name: DragMovingEnabled
+		- Format: "[text]".
+
+	\par Where [Text] is:
+		- "True" to indicate the window may be repositioned by the user via dragging.
+		- "False" to indicate the window may not be repositioned by the user.
+*/
+class DragMovingEnabled : public Property
+{
+public:
+	DragMovingEnabled() : Property(
+		"DragMovingEnabled",
+		"Property to get/set the setting for whether the user may drag the window around by its title bar.  Value is either \"True\" or \"False\".",
+		"True")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the setting for the sizing border thickness.
+
+	\par Usage:
+		- Name: SizingBorderThickness
+		- Format: "[float]".
+
+	\par Where:
+		- [float] is the size of the invisible sizing border in screen pixels.
+*/
+class SizingBorderThickness : public Property
+{
+public:
+	SizingBorderThickness() : Property(
+		"SizingBorderThickness",
+		"Property to get/set the setting for the sizing border thickness.  Value is a float specifying the border thickness in pixels.",
+		"8.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the Font set for the windows title bar.
+
+	\par Usage:
+		- Name: TitlebarFont
+		- Format: "[text]".
+
+	\par Where:
+		- [text] is the name of the Font to assign for this windows title bar.  The Font specified must already be loaded.
+*/
+class TitlebarFont : public Property
+{
+public:
+	TitlebarFont() : Property(
+		"TitlebarFont",
+		"Property to get/set the Font set for the windows title bar.  Value is the name of the font to use (must be loaded already).",
+		"")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+/*!
+\brief
+	Property to colour used for rendering the caption text.
+
+	\par Usage:
+		- Name: CaptionColour
+		- Format: "aarrggbb".
+
+	\par Where:
+		- aarrggbb is the ARGB colour value to be used.
+*/
+class CaptionColour : public Property
+{
+public:
+	CaptionColour() : Property(
+		"CaptionColour",
+		"Property to get/set the colour used for rendering the caption text.  Value is \"aarrggbb\" (hex).",
+		"FF000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+} // End of  FrameWindowProperties namespace section
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIFrameWindowProperties_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUITabButton.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUITabButton.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUITabButton.h	(revision 1092)
@@ -0,0 +1,178 @@
+/************************************************************************
+	filename: 	CEGUITabButton.h
+	created:	8/8/2004
+	author:		Steve Streeting
+	
+	purpose:	Interface to base class for TabButton widget
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUITabButton_h_
+#define _CEGUITabButton_h_
+
+#include "CEGUIBase.h"
+#include "elements/CEGUIButtonBase.h"
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+
+*/
+class CEGUIEXPORT TabButton : public ButtonBase
+{
+public:
+	static const String EventNamespace;				//!< Namespace for global events
+
+
+	/*************************************************************************
+		Event name constants
+	*************************************************************************/
+	// generated internally by Window
+	static const String EventClicked;					//!< The button was clicked.
+
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for base TabButton class
+	*/
+	TabButton(const String& type, const String& name);
+
+
+	/*!
+	\brief
+		Destructor for TabButton class
+	*/
+	virtual ~TabButton(void);
+
+    /*!
+    \brief
+        Set whether this tab button is selected or not
+    */
+    virtual void setSelected(bool selected) { d_selected = selected; requestRedraw(); }
+
+    /*!
+    \brief
+        Set whether this tab button is on the right of the selected button, 
+        used to disable edges of buttons when deselected (to give an overlapping
+        look)
+    */
+    virtual void setRightOfSelected(bool isRight) { d_rightOfSelected = isRight; requestRedraw(); }
+
+    /*!
+    \brief
+        Return whether this tab button is selected or not
+    */
+    bool isSelected(void) const { return d_selected; }
+
+
+    /*!
+    \brief
+        Set the target window which is the content pane which this button is
+        covering.
+    */
+    void setTargetWindow(Window* wnd);
+    /*!
+    \brief
+        Get the target window which is the content pane which this button is
+        covering.
+    */
+    Window* getTargetWindow(void) { return d_targetWindow; }
+
+    /*!
+    \brief
+        Set the index at which this tab is positioned.
+    */
+    void setTabIndex(uint idx) { d_tabIndex = idx; }
+
+    /*!
+    \brief
+        Get the index at which this tab is positioned.
+    */
+    uint getTabIndex(void) { return d_tabIndex; }
+protected:
+    /*************************************************************************
+    Implementation Data
+    *************************************************************************/
+    bool    d_selected;             //!< Is this button selected?
+    bool    d_rightOfSelected;      //!< Is this button to the right of the selected tab?
+    Window* d_targetWindow;         //!< The target window which this button is representing
+    uint    d_tabIndex;             //!< The index at which this tab is positioned
+	/*************************************************************************
+		New Event Handlers
+	*************************************************************************/
+	/*!
+	\brief
+		handler invoked internally when the button is clicked.
+	*/
+	virtual void	onClicked(WindowEventArgs& e);
+
+
+	/*************************************************************************
+		Overridden Event Handlers
+	*************************************************************************/
+	virtual void	onMouseButtonUp(MouseEventArgs& e);
+
+
+	/*************************************************************************
+		Implementation Functions
+	*************************************************************************/
+	/*!
+	\brief
+		Add button specific events
+	*/
+	void	addTabButtonEvents(void);
+	/*!
+	\brief
+		Perform the rendering for this widget.
+
+	\param z
+		float value specifying the base Z co-ordinate that should be used when rendering
+
+	\return
+		Nothing
+	*/
+	void	drawSelf(float z);
+
+
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	virtual bool	testClassName_impl(const String& class_name) const
+	{
+		if (class_name==(const utf8*)"TabButton")	return true;
+		return ButtonBase::testClassName_impl(class_name);
+	}
+};
+
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUITabButton_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIItemListBaseProperties.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIItemListBaseProperties.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIItemListBaseProperties.h	(revision 1092)
@@ -0,0 +1,63 @@
+/************************************************************************
+	filename: 	CEGUIItemListBaseProperties.h
+	created:	5/4/2005
+	author:		Tomas Lindquist Olsen (based on code by Paul D Turner)
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIItemListBaseProperties_h_
+#define _CEGUIItemListBaseProperties_h_
+
+#include "CEGUIProperty.h"
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+// Start of ItemListBaseProperties namespace section
+namespace ItemListBaseProperties
+{
+    /*!
+    \brief
+	    Property to access the state of the auto resize enabled setting.
+
+	    \par Usage:
+		    - Name: AutoResizeEnabled
+		    - Format: "[text]".
+
+	    \par Where [Text] is:
+		    - "True" to indicate that auto resizing is enabled.
+		    - "False" to indicate that auto resizing is disabled.
+    */
+    class AutoResizeEnabled : public Property
+    {
+    public:
+	    AutoResizeEnabled() : Property(
+		    "AutoResizeEnabled",
+		    "Property to get/set the state of the auto resizing enabled setting for the ItemListBase.  Value is either \"True\" or \"False\".",
+		    "False")
+	    {}
+
+	    String	get(const PropertyReceiver* receiver) const;
+	    void	set(PropertyReceiver* receiver, const String& value);
+    };
+
+} // End of  ItemListBaseProperties namespace section
+} // End of  CEGUI namespace section
+
+#endif	// end of guard _CEGUIItemListBaseProperties_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUITextItem.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUITextItem.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUITextItem.h	(revision 1092)
@@ -0,0 +1,248 @@
+/************************************************************************
+	filename: 	CEGUITextItem.h
+	created:	31/3/2005
+	author:		Tomas Lindquist Olsen (based on code by Paul D Turner)
+	
+	purpose:	Interface to base class for TextItem widget
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUITextItem_h_
+#define _CEGUITextItem_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIWindow.h"
+#include "elements/CEGUIItemEntry.h"
+#include "elements/CEGUITextItemProperties.h"
+#include "CEGUIFont.h"
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+/*!
+\brief
+	Base class for all the TextItem widgets.
+*/
+class CEGUIEXPORT TextItem : public ItemEntry
+{
+public:
+	/*************************************************************************
+		Constants
+	*************************************************************************/
+	static const colour		DefaultTextColour;		//!< Default colour used when rendering text.
+
+
+	/*************************************************************************
+		Accessors
+	*************************************************************************/
+	/*!
+	\brief
+		Return the TextFormatting currently used for rendering the text.
+
+	\return
+		TextFormatting value describing the currently used text formatting option.
+	*/
+	TextFormatting getTextFormatting() const		{return d_textFormatting;}
+
+
+	/*!
+    \brief
+        get the offset that is used to shift of the text in the x-direction
+        this is useful if the button-images are not symmetrical and the
+        text shouldn't be completely centered
+
+    \return
+        the offset in pixels
+    */
+    float   getTextXOffset(void) const				{return d_textXOffset;}
+
+
+	/*!
+    \brief
+        Get the current text colour of the item.
+
+    \return
+        The current text colour.
+    */
+	colour getTextColour(void) const			{return d_textColour;}
+
+
+	/*************************************************************************
+		Manipulators
+	*************************************************************************/
+	/*!
+	\brief
+		Set the TextFormatting to be used when rendering the text.
+	*/
+	void setTextFormatting(TextFormatting format)	{d_textFormatting=format;}
+
+
+	/*!
+    \brief
+        Set the current text colour of the item.
+
+    \param col
+        The colour to set as the current text colour.
+    */
+	void setTextColour(const colour& col)			{d_textColour=col;}
+
+
+	/*!
+    \brief
+        Set the offset to use for a shift of the text in the x-direction
+        this is useful if the button-images are not symmetrical and the
+        text shouldn't be completely centered
+
+    \param offset
+        The offset to use - in pixels.
+
+    \return
+        Nothing.
+    */
+    void   setTextXOffset(float offset)				{d_textXOffset=offset;}
+
+
+	/*************************************************************************
+		Pure functions from ItemEntry
+	*************************************************************************/
+	/*!
+	\brief
+		Return the "optimal" size for the item
+	
+	\return
+		Size describing the size in pixel that this TextItem's content requires
+		for non-clipped rendering
+	*/
+	virtual Size getItemPixelSize(void);
+
+
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for TextItem objects
+	*/
+	TextItem(const String& type, const String& name);
+
+
+	/*!
+	\brief
+		Destructor for TextItem objects
+	*/
+	virtual ~TextItem(void);
+
+
+protected:
+	/*************************************************************************
+		Abstract Implementation Functions (must be provided by derived class)
+	*************************************************************************/
+
+	/*************************************************************************
+		Overridden event handlers
+	*************************************************************************/
+	/*!
+	\brief
+		Handler called when the window's text is changed.
+
+	\param e
+		WindowEventArgs object whose 'window' pointer field is set to the window that triggered the event.  For this
+		event the trigger window is always 'this'.
+	*/
+	virtual void	onTextChanged(WindowEventArgs& e);
+
+
+	/*************************************************************************
+		Implementation Functions
+	*************************************************************************/
+	/*!
+    \brief
+        Perform the actual rendering for this Window.
+
+    \param z
+        float value specifying the base Z co-ordinate that should be used when rendering
+
+    \return
+        Nothing
+    */
+    virtual void    drawSelf(float z);
+
+
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	virtual bool	testClassName_impl(const String& class_name) const
+	{
+		if (class_name==(const utf8*)"TextItem")	return true;
+		return ItemEntry::testClassName_impl(class_name);
+	}
+
+
+	/*************************************************************************
+		Implementation Rendering Functions
+	*************************************************************************/
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	colour d_textColour;				//!< the current text colour
+	TextFormatting d_textFormatting;	//!< the current text formatting
+
+	//text-offset
+    float d_textXOffset;		//!< offset applied to the x co-ordinate of the text rendered.
+
+
+private:
+	/*************************************************************************
+		Static Properties for this class
+	*************************************************************************/
+	static TextItemProperties::TextColour		d_textColourProperty;
+	static TextItemProperties::TextFormatting	d_textFormattingProperty;
+	static TextItemProperties::TextXOffset		d_textXOffsetProperty;
+
+	/*************************************************************************
+		Private methods
+	*************************************************************************/
+	void	addTextItemProperties(void);
+};
+
+} // End of  CEGUI namespace section
+
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+
+#endif	// end of guard _CEGUITextItem_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIButtonBase.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIButtonBase.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIButtonBase.h	(revision 1092)
@@ -0,0 +1,339 @@
+/************************************************************************
+	filename: 	CEGUIButtonBase.h
+	created:	13/4/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to base class for ButtonBase widget
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIButtonBase_h_
+#define _CEGUIButtonBase_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIWindow.h"
+#include "elements/CEGUIButtonBaseProperties.h"
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+/*!
+\brief
+	Base class for all the 'button' type widgets (push button, radio button, check-box, etc)
+*/
+class CEGUIEXPORT ButtonBase : public Window
+{
+public:
+	/*************************************************************************
+		Constants
+	*************************************************************************/
+	// default colours for text label rendering
+	static const colour		DefaultNormalLabelColour;		//!< Default colour used when rendering label text in normal state.
+	static const colour		DefaultHoverLabelColour;		//!< Default colour used when rendering label text in hover / highlight state.
+	static const colour		DefaultPushedLabelColour;		//!< Default colour used when rendering label text in pushed state.
+	static const colour		DefaultDisabledLabelColour;		//!< Default colour used when rendering label text in disabled state.
+
+
+	/*************************************************************************
+		Accessor type functions
+	*************************************************************************/
+	/*!
+	\brief
+		return true if user is hovering over this widget (or it's pushed and user is not over it for highlight)
+
+	\return
+		true if the user is hovering or if the button is pushed and the mouse is not over the button.  Otherwise return false.
+	*/
+	bool	isHovering(void) const			{return d_hovering;}
+
+
+	/*!
+	\brief
+		Return true if the button widget is in the pushed state.
+
+	\return
+		true if the button-type widget is pushed, false if the widget is not pushed.
+	*/
+	bool	isPushed(void) const			{return d_pushed;}
+
+
+	/*!
+	\brief
+		return text label colour used for normal rendering
+
+	\return
+		colour value that is used for the label text when rendering in the normal state.
+	*/
+	colour	getNormalTextColour(void) const			{return d_normalColour;}
+
+
+	/*!
+	\brief
+		return text label colour used for hover / highlight rendering
+
+	\return
+		colour value that is used for the label text when rendering in the hover / highlighted states.
+	*/
+	colour	getHoverTextColour(void) const			{return d_hoverColour;}
+
+
+	/*!
+	\brief
+		return text label colour used for pushed rendering
+
+	\return
+		colour value that is used for the label text when rendering in the pushed state.
+	*/
+	colour	getPushedTextColour(void) const			{return d_pushedColour;}
+
+
+	/*!
+	\brief
+		return text label colour used for disabled rendering
+
+	\return
+		colour value that is used for the label text when rendering in the disabled state.
+	*/
+	colour	getDisabledTextColour(void) const		{return d_disabledColour;}
+
+	/*************************************************************************
+		Manipulators
+	*************************************************************************/
+	/*!
+	\brief
+		Set the colour to use for the label text when rendering in the normal state.
+
+	\param colour
+		colour value specifying the colour to be used.
+
+	\return
+		Nothing.
+	*/
+	void	setNormalTextColour(const colour& colour);
+
+
+	/*!
+	\brief
+		Set the colour to use for the label text when rendering in the hover / highlighted states.
+
+	\param colour
+		colour value specifying the colour to be used.
+
+	\return
+		Nothing.
+	*/
+	void	setHoverTextColour(const colour& colour);
+
+
+	/*!
+	\brief
+		Set the colour to use for the label text when rendering in the pushed state.
+
+	\param colour
+		colour value specifying the colour to be used.
+
+	\return
+		Nothing.
+	*/
+	void	setPushedTextColour(const colour& colour);
+
+
+	/*!
+	\brief
+		Set the colour to use for the label text when rendering in the disabled state.
+
+	\param colour
+		colour value specifying the colour to be used.
+
+	\return
+		Nothing.
+	*/
+	void	setDisabledTextColour(const colour& colour);
+
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for ButtonBase objects
+	*/
+	ButtonBase(const String& type, const String& name);
+
+
+	/*!
+	\brief
+		Destructor for ButtonBase objects
+	*/
+	virtual ~ButtonBase(void);
+
+
+protected:
+	/*************************************************************************
+		Overridden event handlers
+	*************************************************************************/
+	virtual void	onMouseMove(MouseEventArgs& e);
+	virtual void	onMouseButtonDown(MouseEventArgs& e);
+	virtual void	onMouseButtonUp(MouseEventArgs& e);
+	virtual void	onCaptureLost(WindowEventArgs& e);
+	virtual void	onMouseLeaves(MouseEventArgs& e);
+
+
+	/*************************************************************************
+		Implementation Functions
+	*************************************************************************/
+	/*!
+	\brief
+		Update the internal state of the widget with the mouse at the given position.
+
+	\param mouse_pos
+		Point object describing, in screen pixel co-ordinates, the location of the mouse cursor.
+
+	\return
+		Nothing
+	*/
+	void	updateInternalState(const Point& mouse_pos);
+
+
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	virtual bool	testClassName_impl(const String& class_name) const
+	{
+		if (class_name==(const utf8*)"ButtonBase")	return true;
+		return Window::testClassName_impl(class_name);
+	}
+
+
+	/*************************************************************************
+		Implementation Rendering Functions
+	*************************************************************************/
+	/*!
+	\brief
+		Perform the rendering for this widget.
+
+	\param z
+		float value specifying the base Z co-ordinate that should be used when rendering
+
+	\return
+		Nothing
+	*/
+	virtual	void	drawSelf(float z);
+
+
+	/*!
+	\brief
+		Render the button-type widget in it's 'normal' state
+
+	\param z
+		float value specifying the base Z co-ordinate that should be used when rendering
+
+	\return
+		Nothing
+	*/
+	virtual void	drawNormal(float z)		= 0;
+
+
+	/*!
+	\brief
+		Render the button-type widget in it's 'hover' (highlighted) state
+
+	\param z
+		float value specifying the base Z co-ordinate that should be used when rendering
+
+	\return
+		Nothing
+	*/
+	virtual void	drawHover(float z)			{drawNormal(z);}
+
+
+	/*!
+	\brief
+		Render the button-type widget in it's 'pushed' state
+
+	\param z
+		float value specifying the base Z co-ordinate that should be used when rendering
+
+	\return
+		Nothing
+	*/
+	virtual void	drawPushed(float z)		{drawNormal(z);}
+
+
+	/*!
+	\brief
+		Render the button-type widget in it's 'disabled' state
+
+	\param z
+		float value specifying the base Z co-ordinate that should be used when rendering
+
+	\return
+		Nothing
+	*/
+	virtual void	drawDisabled(float z)		{drawNormal(z);}
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	bool	d_pushed;			//!< true when widget is pushed
+	bool	d_hovering;			//!< true when the button is in 'hover' state and requires the hover rendering.
+
+	// common rendering setting data
+	colour	d_normalColour;					//!< Colour used for label text when rendering in normal state
+	colour	d_hoverColour;					//!< Colour used for label text when rendering in highlighted state
+	colour	d_pushedColour;					//!< Colour used for label text when rendering in pushed state
+	colour	d_disabledColour;				//!< Colour used for label text when rendering in disabled state
+
+private:
+	/*************************************************************************
+		Static Properties for this class
+	*************************************************************************/
+	static ButtonBaseProperties::NormalTextColour	d_normalTextColourProperty;
+	static ButtonBaseProperties::HoverTextColour	d_hoverTextColourProperty;
+	static ButtonBaseProperties::PushedTextColour	d_pushedTextColourProperty;
+	static ButtonBaseProperties::DisabledTextColour	d_disabledTextColourProperty;
+
+	/*************************************************************************
+		Private methods
+	*************************************************************************/
+	void	addButtonBaseProperties(void);
+};
+
+} // End of  CEGUI namespace section
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUIButtonBase_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUITabControl.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUITabControl.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUITabControl.h	(revision 1092)
@@ -0,0 +1,484 @@
+/************************************************************************
+	filename: 	CEGUITabControl.h
+	created:	08/08/2004
+	author:		Steve Streeting
+	
+	purpose:	Interface to base class for TabControl widget
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUITabControl_h_
+#define _CEGUITabControl_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIWindow.h"
+#include "elements/CEGUITabControlProperties.h"
+#include "elements/CEGUITabPane.h"
+#include <vector>
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+    // Forward declaration
+    class TabButton;
+
+/*!
+\brief
+	Base class for standard Tab Control widget.
+*/
+class CEGUIEXPORT TabControl : public Window
+{
+public:
+	static const String EventNamespace;				//!< Namespace for global events
+
+
+	/*************************************************************************
+		Constants
+	*************************************************************************/
+	// event names
+	static const String EventSelectionChanged;			//!< Event triggered when there is a change to the currently selected tab.
+
+
+	/*************************************************************************
+		Accessor Methods
+	*************************************************************************/
+	/*!
+	\brief
+		Return number of tabs 
+
+	\return
+		the number of tabs currently present.
+	*/
+	uint	getTabCount(void) const;
+
+
+    /*!
+    \brief
+        Set the selected tab by the name of the root window within it.
+    \exception	InvalidRequestException	thrown if \a index is out of range.
+    */
+    void    setSelectedTab(const String &name);
+
+    /*!
+    \brief
+        Set the selected tab by the ID of the root window within it.
+    \exception	InvalidRequestException	thrown if \a index is out of range.
+    */
+    void    setSelectedTab(uint ID);
+
+    /*!
+    \brief
+        Set the selected tab by the index position in the tab control.
+    \exception	InvalidRequestException	thrown if \a index is out of range.
+    */
+    void    setSelectedTabAtIndex(uint index);
+
+    /*!
+	\brief
+		Return the Window which is the first child of the tab at index position \a index.
+
+	\param index
+		Zero based index of the item to be returned.
+
+	\return
+		Pointer to the Window at index position \a index in the tab control.
+
+	\exception	InvalidRequestException	thrown if \a index is out of range.
+	*/
+    Window*	getTabContentsAtIndex(uint index) const;
+
+    /*!
+    \brief
+        Return the Window which is the tab content with the given name.
+
+    \param name
+        Name of the Window which was attached as a tab content.
+
+    \return
+        Pointer to the named Window in the tab control.
+
+    \exception	InvalidRequestException	thrown if content is not found.
+    */
+    Window*	getTabContents(const String& name) const;
+
+    /*!
+    \brief
+        Return the Window which is the tab content with the given ID.
+
+    \param ID
+        ID of the Window which was attached as a tab content.
+
+    \return
+        Pointer to the Window with the given ID in the tab control.
+
+    \exception	InvalidRequestException	thrown if content is not found.
+    */
+    Window*	getTabContents(uint ID) const;
+
+    /*!
+	\brief
+		Return whether the tab contents window is currently selected.
+
+    \param wnd
+        The tab contents window to query.
+
+	\return
+		true if the tab is currently selected, false otherwise.
+
+	\exception	InvalidRequestException	thrown if \a wnd is not a valid tab contents window.
+	*/
+    bool	isTabContentsSelected(Window* wnd) const;
+
+    /*!
+	\brief
+		Return the index of the currently selected tab.
+
+	\return
+		index of the currently selected tab.
+	*/
+    uint	getSelectedTabIndex() const;
+	
+    /*!
+    \brief
+        Return the relative height of the tabs
+    */
+    float getRelativeTabHeight(void) const { return d_rel_tabHeight; }
+    /*!
+    \brief
+        Return the absolute height of the tabs
+    */
+    float getAbsoluteTabHeight(void) const { return d_abs_tabHeight; }
+    /*!
+    \brief
+        Return the height of the tabs in the current metrics mode
+    */
+    float getTabHeight(void) const;
+    /*!
+    \brief
+        Return the amount of padding to add either side of the text in the tab,
+        according to the current metrics mode.
+    */
+    float getTabTextPadding(void) const;
+    /*!
+    \brief
+        Return the relative amount of padding to add either side of the text in the tab
+    */
+    float getRelativeTabTextPadding(void) const { return d_rel_tabPadding; }
+    /*!
+    \brief
+        Return the absolute amount of padding to add either side of the text in the tab
+    */
+    float getAbsoluteTabTextPadding(void) const { return d_abs_tabPadding; }
+
+
+    /*************************************************************************
+		Manipulator Methods
+	*************************************************************************/
+	/*!
+	\brief
+		Initialise the Window based object ready for use.
+
+	\note
+		This must be called for every window created.  Normally this is handled automatically by the WindowFactory for each Window type.
+
+	\return
+		Nothing
+	*/
+	virtual void	initialise(void);
+
+    /*!
+    \brief
+        Set the relative height of the tabs
+    */
+    void setRelativeTabHeight(float height);
+    /*!
+    \brief
+        Set the absolute height of the tabs
+    */
+    void setAbsoluteTabHeight(float height);
+    /*!
+    \brief
+        Set the height of the tabs in the current metrics mode
+    */
+    void setTabHeight(float height);
+
+    /*!
+    \brief
+        Set the amount of padding to add either side of the text in the tab,
+        according to the current metrics mode.
+    */
+    void setTabTextPadding(float);
+    /*!
+    \brief
+        Set the relative amount of padding to add either side of the text in the tab
+    */
+    void setRelativeTabTextPadding(float);
+    /*!
+    \brief
+        Set the absolute amount of padding to add either side of the text in the tab
+    */
+    void setAbsoluteTabTextPadding(float);
+    /*!
+    \brief 
+        Add a new tab to the tab control. 
+    \par 
+        The new tab will be added with the same text as the window passed in.
+    \param wnd
+        The Window which will be placed in the content area of this new tab.
+    */
+    void addTab(Window* wnd);
+    /*!
+    \brief 
+        Remove the named tab from the tab control. 
+    \par 
+        The tab content will be destroyed. 
+    */
+    void removeTab(const String& name);
+    /*!
+    \brief 
+    Remove the tab with the given ID from the tab control. 
+    \par 
+    The tab content will be destroyed. 
+    */
+    void removeTab(uint ID);
+
+
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for TabControl base class.
+	*/
+	TabControl(const String& type, const String& name);
+
+
+	/*!
+	\brief
+		Destructor for Listbox base class.
+	*/
+	virtual ~TabControl(void);
+
+
+protected:
+
+	/*************************************************************************
+		Implementation Functions
+	*************************************************************************/
+    /*!
+    \brief
+        Perform the actual rendering for this Window. 
+
+    \param z
+        float value specifying the base Z co-ordinate that should be used when rendering
+
+    \return
+        Nothing
+    */
+    virtual	void	drawSelf(float z) { /* do nothing; rendering handled by children */ }
+
+    /*!
+	\brief
+		Add tab control specific events
+	*/
+	void	addTabControlEvents(void);
+
+    /*!
+    \brief
+        Add a TabButton for the specified child Window.
+    */
+    virtual void addButtonForTabContent(Window* wnd);
+    /*!
+    \brief
+        Remove the TabButton for the specified child Window.
+    */
+    virtual void removeButtonForTabContent(Window* wnd);
+    /*!
+    \brief
+        Return the TabButton associated with this Window.
+    \exception	InvalidRequestException	thrown if content is not found.
+    */
+	TabButton* getButtonForTabContents(Window* wnd) const;
+    /*!
+    \brief
+        Construct a button name to handle a window.
+    */
+    String makeButtonName(Window* wnd);
+    
+    /*!
+    \brief
+        Internal implementation of select tab.
+    \param wnd
+        Pointer to a Window which is the root of the tab content to select
+    */
+    virtual void selectTab_impl(Window* wnd);
+
+
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	virtual bool	testClassName_impl(const String& class_name) const
+	{
+		if (class_name==(const utf8*)"TabControl")	return true;
+		return Window::testClassName_impl(class_name);
+	}
+
+
+	/*************************************************************************
+		New event handlers
+	*************************************************************************/
+
+	/*!
+	\brief
+		Handler called internally when the currently selected item or items changes.
+	*/
+	virtual	void	onSelectionChanged(WindowEventArgs& e);
+
+	/*!
+	\brief
+		Handler called when the window's font is changed.
+
+	\param e
+		WindowEventArgs object whose 'window' pointer field is set to the window that triggered the event.  For this
+		event the trigger window is always 'this'.
+	*/
+	virtual void	onFontChanged(WindowEventArgs& e);
+	/*************************************************************************
+		Overridden Event handlers
+	*************************************************************************/
+    void onSized(WindowEventArgs& e);
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+    Window*     d_tabButtonPane;    //!< The area containing the tab buttons
+    TabPane*    d_tabContentPane;   //!< The content area window
+    float       d_abs_tabHeight;    //!< The height of the tabs in pixels
+    float       d_rel_tabHeight;    //!< The height of the tabs relative to parent
+    float       d_abs_tabPadding;    //!< The padding of the tabs in pixels
+    float       d_rel_tabPadding;    //!< The padding of the tabs relative to parent
+    uint        d_nextTabIndex;     //!< The index to give the next tab 
+    typedef std::map<uint, TabButton*> TabButtonIndexMap; 
+    TabButtonIndexMap d_tabButtonIndexMap;  //!< Sorting for tabs
+    /*************************************************************************
+    Abstract Implementation Functions (must be provided by derived class)
+    *************************************************************************/
+    /*!
+    \brief
+    create and return a pointer to a TabPane widget for use as content area
+
+    \return
+    Pointer to a TabPane to be used for holding the main content.
+    */
+    virtual TabPane*	createTabContentPane(void) const		= 0;
+
+    /*!
+    \brief
+        create and return a pointer to a widget for use as tab button area
+
+    \return
+        Pointer to a Static to be used for holding the tab buttons.
+    */
+    virtual Window*	createTabButtonPane(void) const;
+
+    /*!
+    \brief
+        create and return a pointer to a TabButton widget for use as a clickable tab header
+    \param name
+        Button name
+    \return
+        Pointer to a TabButton to be used for changing tabs.
+    */
+    virtual TabButton*	createTabButton(const String& name) const		= 0;
+
+    /*!
+    \brief
+        Calculate the correct position and size of a tab button, based on the
+        index it is due to be placed at.
+    \param btn
+        Pointer to a button to calculate the size and position for. This button
+        will be updated in place with these metrics.
+    \param targetIndex
+        The index at which the tab is/will be placed. Tabs must exist for all the
+        indexes before this.
+    */
+    void calculateTabButtonSizePosition(TabButton* btn, uint targetIndex);
+    /*!
+    \brief
+    Setup size and position for the component widgets attached to this TabControl
+
+    \return
+    Nothing.
+    */
+    virtual void	layoutComponentWidgets();
+
+protected:
+	/*************************************************************************
+		Static Properties for this class
+	*************************************************************************/
+	static TabControlProperties::TabHeight			d_tabHeightProperty;
+    static TabControlProperties::AbsoluteTabHeight	d_absoluteTabHeightProperty;
+    static TabControlProperties::RelativeTabHeight	d_relativeTabHeightProperty;
+
+    static TabControlProperties::TabTextPadding			d_tabTextPaddingProperty;
+    static TabControlProperties::AbsoluteTabTextPadding	d_absoluteTabTextPaddingProperty;
+    static TabControlProperties::RelativeTabTextPadding	d_relativeTabTextPaddingProperty;
+	/*************************************************************************
+		Private methods
+	*************************************************************************/
+	void	addTabControlProperties(void);
+
+    /*!
+    \brief
+    Add given window to child list at an appropriate position
+    */
+    void	addChild_impl(Window* wnd);
+
+    /*************************************************************************
+    Event handlers
+    *************************************************************************/
+    bool handleContentWindowTextChanged(const EventArgs& args);
+    bool handleTabButtonClicked(const EventArgs& args);
+};
+
+
+
+} // End of  CEGUI namespace section
+
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUITabControl_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIRadioButtonProperties.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIRadioButtonProperties.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIRadioButtonProperties.h	(revision 1092)
@@ -0,0 +1,99 @@
+/************************************************************************
+	filename: 	CEGUIRadioButtonProperties.h
+	created:	10/7/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to properties for RadioButton class
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIRadioButtonProperties_h_
+#define _CEGUIRadioButtonProperties_h_
+
+#include "CEGUIProperty.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+// Start of RadioButtonProperties namespace section
+/*!
+\brief
+	Namespace containing all classes that make up the properties interface for the RadioButton class
+*/
+namespace RadioButtonProperties
+{
+/*!
+\brief
+	Property to access the selected state of the RadioButton.
+
+	\par Usage:
+		- Name: Selected
+		- Format: "[text]".
+
+	\par Where [Text] is:
+		- "True" to indicate the radio button is selected.
+		- "False" to indicate the radio button is not selected.
+*/
+class Selected : public Property
+{
+public:
+	Selected() : Property(
+		"Selected",
+		"Property to get/set the selected state of the RadioButton.  Value is either \"True\" or \"False\".",
+		"False")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the radio button group ID.
+
+	\par Usage:
+		- Name: GroupID
+		- Format: "[uint]".
+
+	\par Where:
+		- [uint] is any unsigned integer value.
+*/
+class GroupID : public Property
+{
+public:
+	GroupID() : Property(
+		"GroupID",
+		"Property to get/set the radio button group ID.  Value is an unsigned integer number.",
+		"0")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+} // End of  RadioButtonProperties namespace section
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIRadioButtonProperties_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIListboxTextItem.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIListboxTextItem.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIListboxTextItem.h	(revision 1092)
@@ -0,0 +1,210 @@
+/************************************************************************
+	filename: 	CEGUIListboxTextItem.h
+	created:	12/6/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface for list box text items
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIListboxTextItem_h_
+#define _CEGUIListboxTextItem_h_
+#include "elements/CEGUIListboxItem.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Class used for textual items in a list box.
+*/
+class CEGUIEXPORT ListboxTextItem : public ListboxItem
+{
+public:
+	/*************************************************************************
+		Constants
+	*************************************************************************/
+	static const colour	DefaultTextColour;			//!< Default text colour.
+
+
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		base class constructor
+	*/
+	ListboxTextItem(const String& text, uint item_id = 0, void* item_data = NULL, bool disabled = false, bool auto_delete = true);
+
+
+	/*!
+	\brief
+		base class destructor
+	*/
+	virtual ~ListboxTextItem(void) {}
+
+
+	/*************************************************************************
+		Accessor methods
+	*************************************************************************/
+	/*!
+	\brief
+		Return a pointer to the font being used by this ListboxTextItem
+
+		This method will try a number of places to find a font to be used.  If no font can be
+		found, NULL is returned.
+
+	\return
+		Font to be used for rendering this item
+	*/
+	const Font*	getFont(void) const;
+
+
+	/*!
+	\brief
+		Return the current colours used for text rendering.
+
+	\return
+		ColourRect object describing the currently set colours
+	*/
+	ColourRect	getTextColours(void) const		{return d_textCols;}
+
+
+	/*************************************************************************
+		Manipulator methods
+	*************************************************************************/
+	/*!
+	\brief
+		Set the font to be used by this ListboxTextItem
+
+	\param font
+		Font to be used for rendering this item
+
+	\return
+		Nothing
+	*/
+	void	setFont(const Font* font)		{d_font = font;}
+
+
+	/*!
+	\brief
+		Set the font to be used by this ListboxTextItem
+
+	\param font_name
+		String object containing the name of the Font to be used for rendering this item
+
+	\return
+		Nothing
+	*/
+	void	setFont(const String& font_name);
+
+
+	/*!
+	\brief
+		Set the colours used for text rendering.
+
+	\param cols
+		ColourRect object describing the colours to be used.
+
+	\return
+		Nothing.
+	*/
+	void	setTextColours(const ColourRect& cols)			{d_textCols = cols;}
+
+
+	/*!
+	\brief
+		Set the colours used for text rendering.
+
+	\param top_left_colour
+		Colour (as ARGB value) to be applied to the top-left corner of each text glyph rendered.
+
+	\param top_right_colour
+		Colour (as ARGB value) to be applied to the top-right corner of each text glyph rendered.
+
+	\param bottom_left_colour
+		Colour (as ARGB value) to be applied to the bottom-left corner of each text glyph rendered.
+
+	\param bottom_right_colour
+		Colour (as ARGB value) to be applied to the bottom-right corner of each text glyph rendered.
+
+	\return 
+		Nothing.
+	*/
+	void	setTextColours(colour top_left_colour, colour top_right_colour, colour bottom_left_colour, colour bottom_right_colour);
+
+
+	/*!
+	\brief
+		Set the colours used for text rendering.
+
+	\param col
+		colour value to be used when rendering.
+
+	\return
+		Nothing.
+	*/
+	void	setTextColours(colour col)		{setTextColours(col, col, col, col);}
+
+
+	/*************************************************************************
+		Required implementations of pure virtuals from the base class.
+	*************************************************************************/
+	/*!
+	\brief
+		Return the rendered pixel size of this list box item.
+
+	\return
+		Size object describing the size of the list box item in pixels.
+	*/
+	virtual	Size	getPixelSize(void) const;
+
+
+	/*!
+	\brief
+		Draw the list box item in its current state.
+
+	\param position
+		Vecor3 object describing the upper-left corner of area that should be rendered in to for the draw operation.
+
+	\param alpha
+		Alpha value to be used when rendering the item (between 0.0f and 1.0f).
+
+	\param clipper
+		Rect object describing the clipping rectangle for the draw operation.
+
+	\return
+		Nothing.
+	*/
+	virtual	void	draw(const Vector3& position, float alpha, const Rect& clipper) const;
+
+
+protected:
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	ColourRect		d_textCols;			//!< Colours used for rendering the text.
+	const Font*		d_font;				//!< Font used for rendering text.
+};
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIListboxTextItem_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUICombobox.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUICombobox.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUICombobox.h	(revision 1092)
@@ -0,0 +1,1077 @@
+/************************************************************************
+	filename: 	CEGUICombobox.h
+	created:	13/4/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to base class for Combobox widget
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUICombobox_h_
+#define _CEGUICombobox_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIWindow.h"
+#include "elements/CEGUIComboboxProperties.h"
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+/*!
+\brief
+	Base class for the Combobox widget
+*/
+class CEGUIEXPORT Combobox : public Window
+{
+public:
+	static const String EventNamespace;				//!< Namespace for global events
+
+	/*************************************************************************
+		Constants
+	*************************************************************************/
+	// event names from edit box
+	static const String EventReadOnlyModeChanged;			//!< The read-only mode for the edit box has been changed.
+	static const String EventValidationStringChanged;		//!< The validation string has been changed.
+	static const String EventMaximumTextLengthChanged;	//!< The maximum allowable string length has been changed.
+	static const String EventTextInvalidated;				//!< Some operation has made the current text invalid with regards to the validation string.
+	static const String EventInvalidEntryAttempted;		//!< The user attempted to modify the text in a way that would have made it invalid.
+	static const String EventCaratMoved;					//!< The text carat (insert point) has changed.
+	static const String EventTextSelectionChanged;		//!< The current text selection has changed.
+	static const String EventEditboxFull;					//!< The number of characters in the edit box has reached the current maximum.
+	static const String EventTextAccepted;				//!< The user has accepted the current text by pressing Return, Enter, or Tab.
+
+	// event names from list box
+	static const String EventListContentsChanged;			//!< Event triggered when the contents of the list is changed.
+	static const String EventListSelectionChanged;		//!< Event triggered when there is a change to the currently selected item(s).
+	static const String EventSortModeChanged;				//!< Event triggered when the sort mode setting changes.
+	static const String EventVertScrollbarModeChanged;	//!< Event triggered when the vertical scroll bar 'force' setting changes.
+	static const String EventHorzScrollbarModeChanged;	//!< Event triggered when the horizontal scroll bar 'force' setting changes.
+
+	// events we produce / generate ourselves
+	static const String EventDropListDisplayed;			//!< Event triggered when the drop-down list is displayed
+	static const String EventDropListRemoved;				//!< Event triggered when the drop-down list is removed / hidden.
+	static const String EventListSelectionAccepted;		//!< Event triggered when the user accepts a selection from the drop-down list
+
+
+	/*!
+	\brief
+		check if the given position would hit this window.
+
+	\param position
+		Point object describing the position to check in screen pixels
+
+	\return
+		true if \a position 'hits' this Window, else false.
+	*/
+	virtual bool	isHit(const Point& position) const		{return false;}
+
+
+	/*!
+	\brief
+		returns the mode of operation for the combo box.
+
+	\return
+		- true if the user can show the list and select an item with a single mouse click.
+		- false if the user must click to show the list and then click again to select an item.
+	*/
+	bool	getSingleClickEnabled(void) const;
+
+
+	/*!
+	\brief
+		returns true if the drop down list is visible.
+
+	\return
+		true if the drop down list is visible, false otherwise.
+	*/
+	bool	isDropDownListVisible(void) const;
+
+
+	/*************************************************************************
+		Editbox Accessors
+	*************************************************************************/
+	/*!
+	\brief
+		return true if the Editbox has input focus.
+
+	\return
+		true if the Editbox has keyboard input focus, false if the Editbox does not have keyboard input focus.
+	*/
+	bool	hasInputFocus(void) const;
+
+
+	/*!
+	\brief
+		return true if the Editbox is read-only.
+
+	\return
+		true if the Editbox is read only and can't be edited by the user, false if the Editbox is not
+		read only and may be edited by the user.
+	*/
+	bool	isReadOnly(void) const;
+
+
+	/*!
+	\brief
+		return true if the Editbox text is valid given the currently set validation string.
+
+	\note
+		It is possible to programmatically set 'invalid' text for the Editbox by calling setText.  This has certain
+		implications since if invalid text is set, whatever the user types into the box will be rejected when the input
+		is validated.
+
+	\note
+		Validation is performed by means of a regular expression.  If the text matches the regex, the text is said to have passed
+		validation.  If the text does not match with the regex then the text fails validation.
+
+	\return
+		true if the current Editbox text passes validation, false if the text does not pass validation.
+	*/
+	bool	isTextValid(void) const;
+
+
+	/*!
+	\brief
+		return the currently set validation string
+
+	\note
+		Validation is performed by means of a regular expression.  If the text matches the regex, the text is said to have passed
+		validation.  If the text does not match with the regex then the text fails validation.
+
+	\return
+		String object containing the current validation regex data
+	*/
+	const String&	getValidationString(void) const;
+
+
+	/*!
+	\brief
+		return the current position of the carat.
+
+	\return
+		Index of the insert carat relative to the start of the text.
+	*/
+	size_t	getCaratIndex(void) const;
+
+
+	/*!
+	\brief
+		return the current selection start point.
+
+	\return
+		Index of the selection start point relative to the start of the text.  If no selection is defined this function returns
+		the position of the carat.
+	*/
+	size_t	getSelectionStartIndex(void) const;
+
+
+	/*!
+	\brief
+		return the current selection end point.
+
+	\return
+		Index of the selection end point relative to the start of the text.  If no selection is defined this function returns
+		the position of the carat.
+	*/
+	size_t	getSelectionEndIndex(void) const;
+
+	
+	/*!
+	\brief
+		return the length of the current selection (in code points / characters).
+
+	\return
+		Number of code points (or characters) contained within the currently defined selection.
+	*/
+	size_t	getSelectionLength(void) const;
+
+
+	/*!
+	\brief
+		return the maximum text length set for this Editbox.
+
+	\return
+		The maximum number of code points (characters) that can be entered into this Editbox.
+
+	\note
+		Depending on the validation string set, the actual length of text that can be entered may be less than the value
+		returned here (it will never be more).
+	*/
+	size_t	getMaxTextLength(void) const;
+
+
+	/*!
+	\brief
+		return the currently set colour to be used for rendering Editbox text in the
+		normal, unselected state.
+
+	\return
+		colour value describing the ARGB colour that is currently set.
+	*/
+	colour	getNormalTextColour(void) const;
+
+
+	/*!
+	\brief
+		return the currently set colour to be used for rendering the Editbox text when within the
+		selected region.
+
+	\return
+		colour value describing the ARGB colour that is currently set.
+	*/
+	colour	getSelectedTextColour(void) const;
+
+
+	/*!
+	\brief
+		return the currently set colour to be used for rendering the Editbox selection highlight
+		when the Editbox is active.
+
+	\return
+		colour value describing the ARGB colour that is currently set.
+	*/
+	colour	getNormalSelectBrushColour(void) const;
+
+
+	/*!
+	\brief
+		return the currently set colour to be used for rendering the Editbox selection highlight
+		when the Editbox is inactive.
+
+	\return
+		colour value describing the ARGB colour that is currently set.
+	*/
+	colour	getInactiveSelectBrushColour(void) const;
+
+
+	/*************************************************************************
+		List Accessors
+	*************************************************************************/
+	/*!
+	\brief
+		Return number of items attached to the list box
+
+	\return
+		the number of items currently attached to this list box.
+	*/
+	size_t	getItemCount(void) const;
+
+	
+	/*!
+	\brief
+		Return a pointer to the currently selected item.
+
+	\return
+		Pointer to a ListboxItem based object that is the selected item in the list.  will return NULL if
+		no item is selected.
+	*/
+	ListboxItem*	getSelectedItem(void) const;
+
+
+	/*!
+	\brief
+		Return the item at index position \a index.
+
+	\param index
+		Zero based index of the item to be returned.
+
+	\return
+		Pointer to the ListboxItem at index position \a index in the list box.
+
+	\exception	InvalidRequestException	thrown if \a index is out of range.
+	*/
+	ListboxItem*	getListboxItemFromIndex(size_t index) const;
+
+
+	/*!
+	\brief
+		Return the index of ListboxItem \a item
+
+	\param item
+		Pointer to a ListboxItem whos zero based index is to be returned.
+
+	\return
+		Zero based index indicating the position of ListboxItem \a item in the list box.
+
+	\exception	InvalidRequestException	thrown if \a item is not attached to this list box.
+	*/
+	size_t	getItemIndex(const ListboxItem* item) const;
+
+
+	/*!
+	\brief
+		return whether list sorting is enabled
+
+	\return
+		true if the list is sorted, false if the list is not sorted
+	*/
+	bool	isSortEnabled(void) const;
+
+
+	/*!
+	\brief
+		return whether the string at index position \a index is selected
+
+	\param index
+		Zero based index of the item to be examined.
+
+	\return
+		true if the item at \a index is selected, false if the item at \a index is not selected.
+
+	\exception	InvalidRequestException	thrown if \a index is out of range.
+	*/
+	bool	isItemSelected(size_t index) const;
+
+
+	/*!
+	\brief
+		Search the list for an item with the specified text
+
+	\param text
+		String object containing the text to be searched for.
+
+	\param start_item
+		ListboxItem where the search is to begin, the search will not include \a item.  If \a item is
+		NULL, the search will begin from the first item in the list.
+
+	\return
+		Pointer to the first ListboxItem in the list after \a item that has text matching \a text.  If
+		no item matches the criteria NULL is returned.
+
+	\exception	InvalidRequestException	thrown if \a item is not attached to this list box.
+	*/
+	ListboxItem*	findItemWithText(const String& text, const ListboxItem* start_item);
+
+
+	/*!
+	\brief
+		Return whether the specified ListboxItem is in the List
+
+	\return
+		true if ListboxItem \a item is in the list, false if ListboxItem \a item is not in the list.
+	*/
+	bool	isListboxItemInList(const ListboxItem* item) const;
+
+
+	/*!
+	\brief
+		Return whether the vertical scroll bar is always shown.
+
+	\return
+		- true if the scroll bar will always be shown even if it is not required.
+		- false if the scroll bar will only be shown when it is required.
+	*/
+	bool	isVertScrollbarAlwaysShown(void) const;
+
+
+	/*!
+	\brief
+		Return whether the horizontal scroll bar is always shown.
+
+	\return
+		- true if the scroll bar will always be shown even if it is not required.
+		- false if the scroll bar will only be shown when it is required.
+	*/
+	bool	isHorzScrollbarAlwaysShown(void) const;
+
+
+	/*************************************************************************
+		Combobox Manipulators
+	*************************************************************************/
+	/*!
+	\brief
+		Initialise the Window based object ready for use.
+
+	\note
+		This must be called for every window created.  Normally this is handled automatically by the WindowFactory for each Window type.
+
+	\return
+		Nothing
+	*/
+	virtual void	initialise(void);
+
+
+	/*!
+	\brief
+		Show the drop-down list
+
+	\return
+		Nothing
+	*/
+	void	showDropList(void);
+
+
+	/*!
+	\brief
+		Hide the drop-down list
+
+	\return
+		Nothing.
+	*/
+	void	hideDropList(void);
+
+
+	/*!
+	\brief
+		Set the mode of operation for the combo box.
+
+	\param setting
+		- true if the user should be able to show the list and select an item with a single mouse click.
+		- false if the user must click to show the list and then click again to select an item.
+
+	\return
+		Nothing.
+	*/
+	void	setSingleClickEnabled(bool setting);
+
+
+	/*************************************************************************
+		Editbox Manipulators
+	*************************************************************************/
+	/*!
+	\brief
+		Specify whether the Editbox is read-only.
+
+	\param setting
+		true if the Editbox is read only and can't be edited by the user, false if the Editbox is not
+		read only and may be edited by the user.
+
+	\return
+		Nothing.
+	*/
+	void	setReadOnly(bool setting);
+
+
+	/*!
+	\brief
+		Set the text validation string.
+
+	\note
+		Validation is performed by means of a regular expression.  If the text matches the regex, the text is said to have passed
+		validation.  If the text does not match with the regex then the text fails validation.
+
+	\param validation_string
+		String object containing the validation regex data to be used.
+
+	\return
+		Nothing.
+	*/
+	void	setValidationString(const String& validation_string);
+
+
+	/*!
+	\brief
+		Set the current position of the carat.
+
+	\param carat_pos
+		New index for the insert carat relative to the start of the text.  If the value specified is greater than the
+		number of characters in the Editbox, the carat is positioned at the end of the text.
+
+	\return
+		Nothing.
+	*/
+	void	setCaratIndex(size_t carat_pos);
+
+
+	/*!
+	\brief
+		Define the current selection for the Editbox
+
+	\param start_pos
+		Index of the starting point for the selection.  If this value is greater than the number of characters in the Editbox, the
+		selection start will be set to the end of the text.
+
+	\param end_pos
+		Index of the ending point for the selection.  If this value is greater than the number of characters in the Editbox, the
+		selection start will be set to the end of the text.
+
+	\return
+		Nothing.
+	*/
+	void	setSelection(size_t start_pos, size_t end_pos);
+	
+
+	/*!
+	\brief
+		set the maximum text length for this Editbox.
+
+	\param max_len
+		The maximum number of code points (characters) that can be entered into this Editbox.
+
+	\note
+		Depending on the validation string set, the actual length of text that can be entered may be less than the value
+		set here (it will never be more).
+
+	\return
+		Nothing.
+	*/
+	void	setMaxTextLength(size_t max_len);
+
+
+	/*!
+	\brief
+		Set the colour to be used for rendering Editbox text in the normal, unselected state.
+
+	\param col
+		colour value describing the ARGB colour that is to be used.
+
+	\return
+		Nothing.
+	*/
+	void	setNormalTextColour(colour col);
+
+
+	/*!
+	\brief
+		Set the colour to be used for rendering the Editbox text when within the
+		selected region.
+
+	\return
+		colour value describing the ARGB colour that is currently set.
+	*/
+	void	setSelectedTextColour(colour col);
+
+
+	/*!
+	\brief
+		Set the colour to be used for rendering the Editbox selection highlight
+		when the Editbox is active.
+
+	\param col
+		colour value describing the ARGB colour that is to be used.
+
+	\return
+		Nothing.
+	*/
+	void	setNormalSelectBrushColour(colour col);
+
+
+	/*!
+	\brief
+		Set the colour to be used for rendering the Editbox selection highlight
+		when the Editbox is inactive.
+
+	\param col
+		colour value describing the ARGB colour that is to be used.
+
+	\return
+		Nothing.
+	*/
+	void	setInactiveSelectBrushColour(colour col);
+
+
+	/*!
+	\brief
+		Activate the edit box component of the Combobox.
+
+	\return
+		Nothing.
+	*/
+	void	activateEditbox(void);
+
+
+	/*************************************************************************
+		List Manipulators
+	*************************************************************************/
+	/*!
+	\brief
+		Remove all items from the list.
+
+		Note that this will cause 'AutoDelete' items to be deleted.
+	*/
+	void	resetList(void);
+
+
+	/*!
+	\brief
+		Add the given ListboxItem to the list.
+
+	\param item
+		Pointer to the ListboxItem to be added to the list.  Note that it is the passed object that is added to the
+		list, a copy is not made.  If this parameter is NULL, nothing happens.
+
+	\return
+		Nothing.
+	*/
+	void	addItem(ListboxItem* item);
+
+
+	/*!
+	\brief
+		Insert an item into the list box after a specified item already in the list.
+
+		Note that if the list is sorted, the item may not end up in the requested position.
+
+	\param item
+		Pointer to the ListboxItem to be inserted.  Note that it is the passed object that is added to the
+		list, a copy is not made.  If this parameter is NULL, nothing happens.
+
+	\param position
+		Pointer to a ListboxItem that \a item is to be inserted after.  If this parameter is NULL, the item is
+		inserted at the start of the list.
+
+	\return
+		Nothing.
+	*/
+	void	insertItem(ListboxItem* item, const ListboxItem* position);
+
+
+	/*!
+	\brief
+		Removes the given item from the list box.
+
+	\param item
+		Pointer to the ListboxItem that is to be removed.  If \a item is not attached to this list box then nothing
+		will happen.
+
+	\return
+		Nothing.
+	*/
+	void	removeItem(const ListboxItem* item);
+
+
+	/*!
+	\brief
+		Clear the selected state for all items.
+
+	\return
+		Nothing.
+	*/
+	void	clearAllSelections(void);
+
+
+	/*!
+	\brief
+		Set whether the list should be sorted.
+
+	\param setting
+		true if the list should be sorted, false if the list should not be sorted.
+
+	\return
+		Nothing.
+	*/
+	void	setSortingEnabled(bool setting);
+
+	
+	/*!
+	\brief
+		Set whether the vertical scroll bar should always be shown.
+
+	\param setting
+		true if the vertical scroll bar should be shown even when it is not required.  false if the vertical
+		scroll bar should only be shown when it is required.
+
+	\return
+		Nothing.
+	*/
+	void	setShowVertScrollbar(bool setting);
+
+
+	/*!
+	\brief
+		Set whether the horizontal scroll bar should always be shown.
+
+	\param setting
+		true if the horizontal scroll bar should be shown even when it is not required.  false if the horizontal
+		scroll bar should only be shown when it is required.
+
+	\return
+		Nothing.
+	*/
+	void	setShowHorzScrollbar(bool setting);
+
+
+	/*!
+	\brief
+		Set the select state of an attached ListboxItem.
+
+		This is the recommended way of selecting and deselecting items attached to a list box as it respects the
+		multi-select mode setting.  It is possible to modify the setting on ListboxItems directly, but that approach
+		does not respect the settings of the list box.
+
+	\param item
+		The ListboxItem to be affected.  This item must be attached to the list box.
+
+	\param state
+		true to select the item, false to de-select the item.
+
+	\return
+		Nothing.
+	
+	\exception	InvalidRequestException	thrown if \a item is not attached to this list box.
+	*/
+	void	setItemSelectState(ListboxItem* item, bool state);
+
+
+	/*!
+	\brief
+		Set the select state of an attached ListboxItem.
+
+		This is the recommended way of selecting and deselecting items attached to a list box as it respects the
+		multi-select mode setting.  It is possible to modify the setting on ListboxItems directly, but that approach
+		does not respect the settings of the list box.
+
+	\param item_index
+		The zero based index of the ListboxItem to be affected.  This must be a valid index (0 <= index < getItemCount())
+
+	\param state
+		true to select the item, false to de-select the item.
+
+	\return
+		Nothing.
+	
+	\exception	InvalidRequestException	thrown if \a item_index is out of range for the list box
+	*/
+	void	setItemSelectState(size_t item_index, bool state);
+
+
+	/*!
+	\brief
+		Causes the list box to update it's internal state after changes have been made to one or more
+		attached ListboxItem objects.
+
+		Client code must call this whenever it has made any changes to ListboxItem objects already attached to the
+		list box.  If you are just adding items, or removed items to update them prior to re-adding them, there is
+		no need to call this method.
+
+	\return
+		Nothing.
+	*/
+	void	handleUpdatedListItemData(void);
+
+
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for Combobox base class
+	*/
+	Combobox(const String& type, const String& name);
+
+
+	/*!
+	\brief
+		Destructor for Combobox base class
+	*/
+	virtual ~Combobox(void);
+
+
+protected:
+	/*************************************************************************
+		Implementation Methods
+	*************************************************************************/
+	/*!
+	\brief
+		Add combo box specific events
+	*/
+	void	addComboboxEvents(void);
+
+
+	/*!
+	\brief
+		Setup size and position for the component widgets attached to this Combobox.
+
+	\return
+		Nothing.
+	*/
+	virtual void	layoutComponentWidgets()	= 0;
+
+
+	/*!
+	\brief
+		Create, initialise, and return a pointer to an Editbox widget to be used as part
+		of this Combobox.
+
+	\return
+		Pointer to an Editbox derived class.
+	*/
+	virtual	Editbox*	createEditbox(void) const		= 0;
+
+
+	/*!
+	\brief
+		Create, initialise, and return a pointer to a PushButton widget to be used as part
+		of this Combobox.
+
+	\return
+		Pointer to a PushButton derived class.
+	*/
+	virtual	PushButton*	createPushButton(void) const	= 0;
+
+
+	/*!
+	\brief
+		Create, initialise, and return a pointer to a ComboDropList widget to be used as part
+		of this Combobox.
+
+	\return
+		Pointer to a ComboDropList derived class.
+	*/
+	virtual	ComboDropList*	createDropList(void) const	= 0;
+
+
+	/*!
+	\brief
+		Handler function for button clicks.
+	*/
+	bool	button_PressHandler(const EventArgs& e);
+
+
+	/*!
+	\brief
+		Handler for selections made in the drop-list
+	*/
+	bool	droplist_SelectionAcceptedHandler(const EventArgs& e);
+
+
+	/*!
+	\brief
+		Handler for when drop-list hides itself
+	*/
+	bool	droplist_HiddenHandler(const EventArgs& e);
+
+
+	/*!
+	\brief
+		Mouse button down handler attached to edit box
+	*/
+	bool	editbox_MouseDownHandler(const EventArgs& e);
+
+
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	virtual bool	testClassName_impl(const String& class_name) const
+	{
+		if (class_name==(const utf8*)"Combobox")	return true;
+		return Window::testClassName_impl(class_name);
+	}
+
+
+	/*************************************************************************
+		Handlers to relay child widget events so they appear to come from us
+	*************************************************************************/
+	bool editbox_ReadOnlyChangedHandler(const EventArgs& e);
+	bool editbox_ValidationStringChangedHandler(const EventArgs& e);
+	bool editbox_MaximumTextLengthChangedHandler(const EventArgs& e);
+	bool editbox_TextInvalidatedEventHandler(const EventArgs& e);
+	bool editbox_InvalidEntryAttemptedHandler(const EventArgs& e);
+	bool editbox_CaratMovedHandler(const EventArgs& e);
+	bool editbox_TextSelectionChangedHandler(const EventArgs& e);
+	bool editbox_EditboxFullEventHandler(const EventArgs& e);
+	bool editbox_TextAcceptedEventHandler(const EventArgs& e);
+	bool editbox_TextChangedEventHandler(const EventArgs& e);
+	bool listbox_ListContentsChangedHandler(const EventArgs& e);
+	bool listbox_ListSelectionChangedHandler(const EventArgs& e);
+	bool listbox_SortModeChangedHandler(const EventArgs& e);
+	bool listbox_VertScrollModeChangedHandler(const EventArgs& e);
+	bool listbox_HorzScrollModeChangedHandler(const EventArgs& e);
+
+	
+	/*************************************************************************
+		New Events for Combobox
+	*************************************************************************/
+	/*!
+	\brief
+		Handler called internally when the read only state of the Combobox's Editbox has been changed.
+	*/
+	virtual	void	onReadOnlyChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called internally when the Combobox's Editbox validation string has been changed.
+	*/
+	virtual	void	onValidationStringChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called internally when the Combobox's Editbox maximum text length is changed.
+	*/
+	virtual	void	onMaximumTextLengthChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called internally when the Combobox's Editbox text has been invalidated.
+	*/
+	virtual	void	onTextInvalidatedEvent(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called internally when an invalid entry was attempted in the Combobox's Editbox.
+	*/
+	virtual	void	onInvalidEntryAttempted(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called internally when the carat in the Comboxbox's Editbox moves.
+	*/
+	virtual	void	onCaratMoved(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called internally when the selection within the Combobox's Editbox changes.
+	*/
+	virtual	void	onTextSelectionChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called internally when the maximum length is reached for text in the Combobox's Editbox.
+	*/
+	virtual	void	onEditboxFullEvent(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called internally when the text in the Combobox's Editbox is accepted (by various means).
+	*/
+	virtual	void	onTextAcceptedEvent(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called internally when the Combobox's Drop-down list contents are changed.
+	*/
+	virtual	void	onListContentsChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called internally when the selection within the Combobox's drop-down list changes
+		(this is not the 'final' accepted selection, just the currently highlighted item).
+	*/
+	virtual	void	onListSelectionChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called  fired internally when the sort mode for the Combobox's drop-down list is changed.
+	*/
+	virtual	void	onSortModeChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called internally when the 'force' setting for the vertical scrollbar within the Combobox's
+		drop-down list is changed.
+	*/
+	virtual	void	onVertScrollbarModeChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called internally when the 'force' setting for the horizontal scrollbar within the Combobox's
+		drop-down list is changed.
+	*/
+	virtual	void	onHorzScrollbarModeChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called internally when the Combobox's drop-down list has been displayed.
+	*/
+	virtual	void	onDropListDisplayed(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called internally when the Combobox's drop-down list has been hidden.
+	*/
+	virtual	void	onDroplistRemoved(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called internally when the user has confirmed a selection within the Combobox's drop-down list.
+	*/
+	virtual	void	onListSelectionAccepted(WindowEventArgs& e);
+
+
+	/*************************************************************************
+		Overridden Event handlers
+	*************************************************************************/
+	virtual	void	onFontChanged(WindowEventArgs& e);
+    virtual	void	onSized(WindowEventArgs& e);
+	virtual void	onTextChanged(WindowEventArgs& e);
+	virtual void	onActivated(ActivationEventArgs& e);
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	Editbox*		d_editbox;		//!< Editbox widget sub-component.
+	ComboDropList*	d_droplist;		//!< ComboDropList widget sub-component.	
+	PushButton*		d_button;		//!< PushButton widget sub-component.
+	bool			d_singleClickOperation;		//!< true if user can show and select from list in a single click.
+
+
+private:
+	/*************************************************************************
+		Static Properties for this class
+	*************************************************************************/
+	static ComboboxProperties::ReadOnly						d_readOnlyProperty;
+	static ComboboxProperties::ValidationString				d_validationStringProperty;
+	static ComboboxProperties::CaratIndex					d_caratIndexProperty;
+	static ComboboxProperties::EditSelectionStart			d_selStartProperty;
+	static ComboboxProperties::EditSelectionLength			d_selLengthProperty;
+	static ComboboxProperties::MaxEditTextLength			d_maxTextLengthProperty;
+	static ComboboxProperties::NormalEditTextColour			d_normalTextColourProperty;
+	static ComboboxProperties::SelectedEditTextColour		d_selectedTextColourProperty;
+	static ComboboxProperties::ActiveEditSelectionColour	d_activeSelectionColourProperty;
+	static ComboboxProperties::InactiveEditSelectionColour	d_inactiveSelectionColourProperty;
+	static ComboboxProperties::SortList						d_sortProperty;
+	static ComboboxProperties::ForceVertScrollbar			d_forceVertProperty;
+	static ComboboxProperties::ForceHorzScrollbar			d_forceHorzProperty;
+	static ComboboxProperties::SingleClickMode				d_singleClickOperationProperty;
+
+	/*************************************************************************
+		Private methods
+	*************************************************************************/
+	void	addComboboxProperties(void);
+};
+
+} // End of  CEGUI namespace section
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUICombobox_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIThumb.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIThumb.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIThumb.h	(revision 1092)
@@ -0,0 +1,320 @@
+/************************************************************************
+	filename: 	CEGUIThumb.h
+	created:	25/4/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface for a 'Thumb' widget.  Intended to be used as
+				part of other widgets such as scrollers and sliders.
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIThumb_h_
+#define _CEGUIThumb_h_
+
+#include "CEGUIPushButton.h"
+#include "elements/CEGUIThumbProperties.h"
+#include <utility>
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+/*!
+\brief
+	Base class for Thumb widget.
+	
+	The thumb widget is used to compose other widgets (like sliders and scroll bars).  You would
+	not normally need to use this widget directly unless you are making a new widget of some type.
+*/
+class CEGUIEXPORT Thumb : public PushButton
+{
+public:
+	static const String EventNamespace;				//!< Namespace for global events
+
+
+	/*************************************************************************
+		Event name constants
+	*************************************************************************/
+	// generated internally by Window
+	static const String EventThumbPositionChanged;		//!< The position of the thumb widget has changed.
+	static const String EventThumbTrackStarted;			//!< Name of the event fired when the user begins dragging the thumb.
+	static const String EventThumbTrackEnded;				//!< Name of the event fired when the user releases the thumb.
+
+
+	/*************************************************************************
+		Accessor Functions
+	*************************************************************************/ 
+	/*!
+	\brief
+		return whether hot-tracking is enabled or not.
+
+	\return
+		true if hot-tracking is enabled.  false if hot-tracking is disabled.
+	*/
+	bool	isHotTracked(void) const			{return d_hotTrack;}
+
+	/*!
+	\brief
+		return whether the thumb is movable on the vertical axis.
+
+	\return
+		true if the thumb is movable along the vertical axis.
+		false if the thumb is fixed on the vertical axis.
+	*/
+	bool	isVertFree(void) const				{return d_vertFree;}
+
+	/*!
+	\brief
+		return whether the thumb is movable on the horizontal axis.
+
+	\return
+		true if the thumb is movable along the horizontal axis.
+		false if the thumb is fixed on the horizontal axis.
+	*/
+	bool	isHorzFree(void) const				{return d_horzFree;}
+
+
+	/*!
+	\brief
+		Return a std::pair that describes the current range set for the vertical movement.
+
+	\return
+		a std::pair describing the current vertical range.  The first element is the minimum value,
+		the second element is the maximum value.
+	*/
+	std::pair<float, float>	getVertRange(void) const;
+
+
+	/*!
+	\brief
+		Return a std::pair that describes the current range set for the horizontal movement.
+
+	\return
+		a std::pair describing the current horizontal range.  The first element is the minimum value,
+		the second element is the maximum value.
+	*/
+	std::pair<float, float>	getHorzRange(void) const;
+
+
+	/*************************************************************************
+		Manipulator Functions
+	*************************************************************************/
+	/*!
+	\brief
+		set whether the thumb uses hot-tracking.
+
+	\param setting
+		true to enable hot-tracking.  false to disable hot-tracking.
+
+	\return
+		Nothing.
+	*/
+	void	setHotTracked(bool setting)				{d_hotTrack = setting;}
+
+
+	/*!
+	\brief
+		set whether thumb is movable on the vertical axis.
+
+	\param setting
+		true to allow movement of thumb along the vertical axis.  false to fix thumb on the vertical axis.
+
+	\return
+		nothing.
+	*/
+	void	setVertFree(bool setting)						{d_vertFree = setting;}
+
+
+	/*!
+	\brief
+		set whether thumb is movable on the horizontal axis.
+
+	\param setting
+		true to allow movement of thumb along the horizontal axis.  false to fix thumb on the horizontal axis.
+
+	\return
+		nothing.
+	*/
+	void	setHorzFree(bool setting)						{d_horzFree = setting;}
+	
+
+	/*!
+	\brief
+		set the movement range of the thumb for the vertical axis.
+
+		The values specified here are relative to the parent window for the thumb, and are specified in whichever
+		metrics mode is active for the widget.
+
+	\param min
+		the minimum setting for the thumb on the vertical axis.
+
+	\param max
+		the maximum setting for the thumb on the vertical axis.
+
+	\return
+		Nothing.
+	*/
+	void	setVertRange(float min, float max);
+
+
+	/*!
+	\brief
+		set the movement range of the thumb for the horizontal axis.
+
+		The values specified here are relative to the parent window for the thumb, and are specified in whichever
+		metrics mode is active for the widget.
+
+	\param min
+		the minimum setting for the thumb on the horizontal axis.
+
+	\param max
+		the maximum setting for the thumb on the horizontal axis.
+
+	\return
+		Nothing.
+	*/
+	void	setHorzRange(float min, float max);
+
+
+	/*************************************************************************
+		Construction / Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for Thumb objects
+	*/
+	Thumb(const String& type, const String& name);
+
+
+	/*!
+	\brief
+		Destructor for Thumb objects
+	*/
+	virtual ~Thumb(void);
+
+
+protected:
+	/*************************************************************************
+		Implementation Functions
+	*************************************************************************/
+	/*!
+	\brief
+		Add thumb specific events
+	*/
+	void	addThumbEvents(void);
+
+
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	virtual bool	testClassName_impl(const String& class_name) const
+	{
+		if (class_name==(const utf8*)"Thumb")	return true;
+		return PushButton::testClassName_impl(class_name);
+	}
+
+
+	/*************************************************************************
+		New Thumb Events
+	*************************************************************************/
+	/*!
+	\brief
+		event triggered internally when the position of the thumb
+	*/
+	virtual void	onThumbPositionChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler triggered when the user begins to drag the thumb. 
+	*/
+	virtual void	onThumbTrackStarted(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler triggered when the thumb is released
+	*/
+	virtual void	onThumbTrackEnded(WindowEventArgs& e);
+
+
+
+	/*************************************************************************
+		Overridden event handling routines
+	*************************************************************************/
+	virtual void	onMouseMove(MouseEventArgs& e);
+	virtual void	onMouseButtonDown(MouseEventArgs& e);
+	virtual void	onCaptureLost(WindowEventArgs& e);
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	// general settings
+	bool	d_hotTrack;					//!< true if events are to be sent real-time, else just when thumb is released
+	bool	d_vertFree;					//!< true if thumb is movable vertically
+	bool	d_horzFree;					//!< true if thumb is movable horizontally
+
+	// operational limits
+	float	d_vertMin, d_vertMax;		//!< vertical range
+	float	d_horzMin, d_horzMax;		//!< horizontal range
+
+	// internal state
+	bool	d_beingDragged;				//!< true if thumb is being dragged
+	Point	d_dragPoint;				//!< point where we are being dragged at.
+
+
+private:
+	/*************************************************************************
+		Static Properties for this class
+	*************************************************************************/
+	static ThumbProperties::HotTracked	d_hotTrackedProperty;
+	static ThumbProperties::VertFree	d_vertFreeProperty;
+	static ThumbProperties::HorzFree	d_horzFreeProperty;
+	static ThumbProperties::VertRange	d_vertRangeProperty;
+	static ThumbProperties::HorzRange	d_horzRangeProperty;
+
+
+	/*************************************************************************
+		Private methods
+	*************************************************************************/
+	void	addThumbProperties(void);
+};
+
+} // End of  CEGUI namespace section
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUIThumb_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIDragContainer.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIDragContainer.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIDragContainer.h	(revision 1092)
@@ -0,0 +1,492 @@
+/************************************************************************
+	filename: 	CEGUIDragContainer.h
+	created:	14/2/2005
+	author:		Paul D Turner
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIDragContainer_h_
+#define _CEGUIDragContainer_h_
+
+#include "CEGUIWindow.h"
+#include "CEGUIWindowFactory.h"
+#include "elements/CEGUIDragContainerProperties.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+    /*!
+    \brief
+        Generic drag & drop enabled window class
+    */
+    class CEGUIEXPORT DragContainer : public Window
+    {
+    public:
+        /*************************************************************************
+            Constants
+        *************************************************************************/
+        static const String WidgetTypeName;     //!< Type name for DragContainer.
+        static const String EventNamespace;     //!< Namespace for global events
+        static const String EventDragStarted;   //!< Name of the event fired when the user begins dragging the thumb.
+        static const String EventDragEnded;     //!< Name of the event fired when the user releases the thumb.
+        static const String EventDragPositionChanged;   //!< Event fired when the drag position has changed.
+        static const String EventDragEnabledChanged;    //!< Event fired when dragging is enabled or disabled.
+        static const String EventDragAlphaChanged;      //!< Event fired when the alpha value used when dragging is changed.
+        static const String EventDragMouseCursorChanged;//!< Event fired when the mouse cursor used when dragging is changed.
+        static const String EventDragThresholdChanged;  //!< Event fired when the drag pixel threshold is changed.
+        static const String EventDragDropTargetChanged; //!< Event fired when the drop target changes.
+
+        /*************************************************************************
+            Object Construction and Destruction
+        *************************************************************************/
+        /*!
+        \brief
+            Constructor for DragContainer objects
+        */
+        DragContainer(const String& type, const String& name);
+
+        /*!
+        \brief
+            Destructor for DragContainer objects
+        */
+        virtual ~DragContainer(void);
+
+        /*************************************************************************
+        	Public Interface to DragContainer
+        *************************************************************************/
+        /*!
+        \brief
+            Return whether dragging is currently enabled for this DragContainer.
+
+        \return
+            - true if dragging is enabled and the DragContainer may be dragged.
+            - false if dragging is disabled and the DragContainer may not be dragged.
+        */
+        bool isDraggingEnabled(void) const;
+
+        /*!
+        \brief
+            Set whether dragging is currently enabled for this DragContainer.
+
+        \param setting
+            - true to enable dragging so that the DragContainer may be dragged.
+            - false to disabled dragging so that the DragContainer may not be dragged.
+
+        \return
+            Nothing.
+        */
+        void setDraggingEnabled(bool setting);
+
+        /*!
+        \brief
+            Return whether the DragContainer is currently being dragged.
+
+        \return
+            - true if the DragContainer is being dragged.
+            - false if te DragContainer is not being dragged.
+        */
+        bool isBeingDragged(void) const;
+
+        /*!
+        \brief
+            Return the current drag threshold in pixels.
+
+            The drag threshold is the number of pixels that the mouse must be
+            moved with the left button held down in order to commence a drag
+            operation.
+        
+        \return
+            float value indicating the current drag threshold value.
+        */
+        float getPixelDragThreshold(void) const;
+
+        /*!
+        \brief
+            Set the current drag threshold in pixels.
+
+            The drag threshold is the number of pixels that the mouse must be
+            moved with the left button held down in order to commence a drag
+            operation.
+
+        \param pixels
+            float value indicating the new drag threshold value.
+
+        \return
+            Nothing.
+        */
+        void setPixelDragThreshold(float pixels);
+
+        /*!
+        \brief
+            Return the alpha value that will be set on the DragContainer while a drag operation is
+            in progress.
+
+        \return
+            Current alpha value to use whilst dragging.
+        */
+        float getDragAlpha(void) const;
+
+        /*!
+        \brief
+            Set the alpha value to be set on the DragContainer when a drag operation is
+            in progress.
+
+            This method can be used while a drag is in progress to update the alpha.  Note that
+            the normal setAlpha method does not affect alpha while a drag is in progress, but
+            once the drag operation has ended, any value set via setAlpha will be restored.
+
+        \param alpha
+            Alpha value to use whilst dragging.
+
+        \return
+            Nothing.
+        */
+        void setDragAlpha(float alpha);
+
+        /*!
+        \brief
+            Return the Image currently set to be used for the mouse cursor when a
+            drag operation is in progress.
+
+        \return
+            Image object currently set to be used as the mouse cursor when dragging.
+        */
+        const Image* getDragCursorImage(void) const;
+
+        /*!
+        \brief
+            Set the Image to be used for the mouse cursor when a drag operation is
+            in progress.
+
+            This method may be used during a drag operation to update the current mouse
+            cursor image.
+
+        \param image
+            Image object to be used as the mouse cursor while dragging.
+
+        \return
+            Nothing.
+        */
+        void setDragCursorImage(const Image* image);
+
+        /*!
+        \brief
+            Set the Image to be used for the mouse cursor when a drag operation is
+            in progress.
+
+            This method may be used during a drag operation to update the current mouse
+            cursor image.
+
+        \param image
+            One of the MouseCursorImage enumerated values.
+
+        \return
+            Nothing.
+        */
+        void setDragCursorImage(MouseCursorImage image);
+
+        /*!
+        \brief
+            Set the Image to be used for the mouse cursor when a drag operation is
+            in progress.
+
+            This method may be used during a drag operation to update the current mouse
+            cursor image.
+
+        \param imageset
+            String holding the name of the Imageset that contains the Image to be used.
+
+        \param image
+            Image defined for the Imageset \a imageset to be used as the mouse cursor
+            when dragging.
+
+        \return
+            Nothing.
+
+        \exception UnknownObjectException   thrown if either \a imageset or \a image are unknown.
+        */
+        void setDragCursorImage(const String& imageset, const String& image);
+
+        /*!
+        \brief
+            Return the Window object that is the current drop target for the DragContainer.
+
+            The drop target for a DragContainer is basically the Window that the DragContainer
+            is within while being dragged.  The drop target may be 0 to indicate no target.
+
+        \return
+            Pointer to a Window object that contains the DragContainer whilst being dragged, or
+            0 to indicate no current target.
+        */
+        Window* getCurrentDropTarget(void) const;
+
+    protected:
+        /*************************************************************************
+        	Protected Implementation Methods
+        *************************************************************************/
+        /*!
+        \brief
+            Adds events specific to the DragContainer base class.
+        
+        \return
+            Nothing.
+        */
+        void addDragContainerEvents(void);
+
+        /*!
+        \brief
+            Return whether the required minimum movement threshold before initiating dragging
+            has been exceeded.
+
+        \param local_mouse
+            Mouse position as a pixel offset from the top-left corner of this window.
+
+        \return
+            - true if the threshold has been exceeded and dragging should be initiated.
+            - false if the threshold has not been exceeded.
+        */		
+        bool isDraggingThresholdExceeded(const Point& local_mouse);
+
+	    /*!
+	    \brief
+		    Initialise the required states to put the window into dragging mode.
+
+        \return
+            Nothing.
+	    */
+        void initialiseDragging(void);
+
+        /*!
+	    \brief
+		    Update state for window dragging.
+
+	    \param local_mouse
+		    Mouse position as a pixel offset from the top-left corner of this window.
+
+	    \return
+		    Nothing.
+	    */
+        void doDragging(const Point& local_mouse);
+
+        /*!
+        \brief
+            Method to update mouse cursor image
+        */
+        void updateActiveMouseCursor(void) const;
+
+
+		/*!
+		\brief
+			Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+		\param class_name
+			The class name that is to be checked.
+
+		\return
+			true if this window was inherited from \a class_name. false if not.
+		*/
+		virtual bool	testClassName_impl(const String& class_name) const
+		{
+			if (class_name==(const utf8*)"DragContainer")	return true;
+			return Window::testClassName_impl(class_name);
+		}
+
+
+        /*************************************************************************
+        	Implementation of abstract methods in Window
+        *************************************************************************/
+        void drawSelf(float z);
+
+        /*************************************************************************
+        	Overrides of methods in Window
+        *************************************************************************/
+
+        /*************************************************************************
+        	Overrides for Event handler methods
+        *************************************************************************/
+        virtual void onMouseButtonDown(MouseEventArgs& e);
+        virtual void onMouseButtonUp(MouseEventArgs& e);
+        virtual void onMouseMove(MouseEventArgs& e);
+        virtual void onCaptureLost(WindowEventArgs& e);
+        virtual void onAlphaChanged(WindowEventArgs& e);
+        virtual void onClippingChanged(WindowEventArgs& e);/*Window::drawSelf(z);*/
+
+        /*************************************************************************
+        	New Event handler methods
+        *************************************************************************/
+        /*!
+        \brief
+            Method called when dragging commences
+
+        \param e
+            WindowEventArgs object containing any relevant data.
+
+        \return
+            Nothing.
+        */
+        virtual void onDragStarted(WindowEventArgs& e);
+
+        /*!
+        \brief
+            Method called when dragging ends.
+
+        \param e
+            WindowEventArgs object containing any relevant data.
+
+        \return
+            Nothing.
+        */
+        virtual void onDragEnded(WindowEventArgs& e);
+
+        /*!
+        \brief
+            Method called when the dragged object position is changed.
+
+        \param e
+            WindowEventArgs object containing any relevant data.
+
+        \return
+            Nothing.
+        */
+        virtual void onDragPositionChanged(WindowEventArgs& e);
+
+        /*!
+        \brief
+            Method called when the dragging state is enabled or disabled
+        \param e
+            WindowEventArgs object.
+        \return
+            Nothing.
+        */
+        virtual void onDragEnabledChanged(WindowEventArgs& e);
+
+        /*!
+        \brief
+            Method called when the alpha value to use when dragging is changed.
+        \param e
+            WindowEventArgs object.
+        \return
+            Nothing.
+        */
+        virtual void onDragAlphaChanged(WindowEventArgs& e);
+
+        /*!
+        \brief
+            Method called when the mouse cursor to use when dragging is changed.
+        \param e
+            WindowEventArgs object.
+        \return
+            Nothing.
+        */
+        virtual void onDragMouseCursorChanged(WindowEventArgs& e);
+
+        /*!
+        \brief
+            Method called when the movement threshold required to trigger dragging is changed.
+        \param e
+            WindowEventArgs object.
+        \return
+            Nothing.
+        */
+        virtual void onDragThresholdChanged(WindowEventArgs& e);
+
+        /*!
+        \brief
+            Method called when the current drop target of this DragContainer changes.
+        \note
+            This event fires just prior to the target field being changed.  The default implementation
+            changes the drop target, you can examine the old and new targets before calling the default
+            implementation to make the actual change (and fire appropriate events for the Window objects
+            involved).
+        \param e
+            DragDropEventArgs object initialised as follows:
+            - dragDropItem is initialised to the DragContainer triggering the event (typically 'this').
+            - window is initialised to point to the Window which will be the new drop target.
+        \return
+            Nothing.
+        */
+        virtual void onDragDropTargetChanged(DragDropEventArgs& e);
+
+        /*************************************************************************
+        	Data
+        *************************************************************************/
+        bool    d_draggingEnabled;  //!< True when dragging is enabled.
+        bool    d_leftMouseDown;    //!< True when left mouse button is down.
+        bool    d_dragging;         //!< true when being dragged.
+        Point   d_dragPoint;        //!< point we are being dragged at.
+        Point   d_startPosition;    //!< position prior to dragging.
+        float   d_dragThreshold;    //!< Pixels mouse must move before dragging commences.
+        float   d_dragAlpha;        //!< Alpha value to set when dragging.
+        float   d_storedAlpha;      //!< Alpha value to re-set when dragging ends.
+        bool    d_storedClipState;  //!< Parent clip state to re-set.
+        Window* d_dropTarget;       //!< Target window for possible drop operation.
+        const Image* d_dragCursorImage; //!< Image to use for mouse cursor when dragging.
+
+    private:
+        /*************************************************************************
+            Static properties for the Spinner widget
+        *************************************************************************/
+        static DragContainerProperties::DragAlpha       d_dragAlphaProperty;
+        static DragContainerProperties::DragCursorImage d_dragCursorImageProperty;
+        static DragContainerProperties::DraggingEnabled d_dragEnabledProperty;
+        static DragContainerProperties::DragThreshold   d_dragThresholdProperty;
+
+        /*************************************************************************
+        	Implementation methods
+        *************************************************************************/
+        /*!
+        \brief
+            Adds properties specific to the DragContainer base class.
+        
+        \return
+            Nothing.
+        */
+        void addDragContainerProperties(void);
+    };
+
+    /*!
+    \brief
+        Factory class for producing DragContainer windows
+    */
+    class DragContainerFactory : public WindowFactory
+    {
+    public:
+        DragContainerFactory(void) : WindowFactory(DragContainer::WidgetTypeName) { }
+        ~DragContainerFactory(void){}
+
+        Window* createWindow(const String& name)
+        {
+            DragContainer* wnd = new DragContainer(d_type, name);
+            return wnd;
+        }
+
+        void destroyWindow(Window* window)
+        {
+            if (window->getType() == d_type)
+                delete window;
+        }
+
+    };
+
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIDragContainer_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIMultiLineEditbox.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIMultiLineEditbox.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIMultiLineEditbox.h	(revision 1092)
@@ -0,0 +1,798 @@
+/************************************************************************
+	filename: 	CEGUIMultiLineEditbox.h
+	created:	30/6/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to the Multi-lien edit box base class.
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIMultiLineEditbox_h_
+#define _CEGUIMultiLineEditbox_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIWindow.h"
+#include "CEGUIFont.h"
+#include "elements/CEGUIMultiLineEditboxProperties.h"
+
+#include <vector>
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Base class for the multi-line edit box widget.
+*/
+class CEGUIEXPORT MultiLineEditbox : public Window
+{
+public:
+	static const String EventNamespace;				//!< Namespace for global events
+
+
+	/*************************************************************************
+		Constants
+	*************************************************************************/
+	// event names
+	static const String EventReadOnlyModeChanged;			//!< The read-only mode for the edit box has been changed.
+	static const String EventWordWrapModeChanged;			//!< The word wrap mode of the text box has been changed.
+	static const String EventMaximumTextLengthChanged;	//!< The maximum allowable string length has been changed.
+	static const String EventCaratMoved;					//!< The text carat (insert point) has changed.
+	static const String EventTextSelectionChanged;		//!< The current text selection has changed.
+	static const String EventEditboxFull;					//!< The number of characters in the edit box has reached the current maximum.
+	static const String EventVertScrollbarModeChanged;	//!< Event triggered when the vertical scroll bar 'force' setting changes.
+	static const String EventHorzScrollbarModeChanged;	//!< Event triggered when the horizontal scroll bar 'force' setting changes.
+
+	// default colours
+	static const argb_t	DefaultNormalTextColour;			//!< Colour applied to normal unselected text.
+	static const argb_t	DefaultSelectedTextColour;			//!< Colour applied to selected text.
+	static const argb_t	DefaultNormalSelectionColour;		//!< Colour applied to normal selection brush.
+	static const argb_t	DefaultInactiveSelectionColour;		//!< Colour applied to selection brush when widget is inactive.
+
+
+	/*************************************************************************
+		Accessor Functions
+	*************************************************************************/
+	/*!
+	\brief
+		return true if the edit box has input focus.
+
+	\return
+		- true if the edit box has keyboard input focus.
+		- false if the edit box does not have keyboard input focus.
+	*/
+	bool	hasInputFocus(void) const;
+
+
+	/*!
+	\brief
+		return true if the edit box is read-only.
+
+	\return
+		- true if the edit box is read only and can't be edited by the user.
+		- false if the edit box is not read only and may be edited by the user.
+	*/
+	bool	isReadOnly(void) const		{return d_readOnly;}
+
+
+	/*!
+	\brief
+		return the current position of the carat.
+
+	\return
+		Index of the insert carat relative to the start of the text.
+	*/
+	size_t	getCaratIndex(void) const		{return d_caratPos;}
+
+
+	/*!
+	\brief
+		return the current selection start point.
+
+	\return
+		Index of the selection start point relative to the start of the text.  If no selection is defined this function returns
+		the position of the carat.
+	*/
+	size_t	getSelectionStartIndex(void) const;
+
+
+	/*!
+	\brief
+		return the current selection end point.
+
+	\return
+		Index of the selection end point relative to the start of the text.  If no selection is defined this function returns
+		the position of the carat.
+	*/
+	size_t	getSelectionEndIndex(void) const;
+
+	
+	/*!
+	\brief
+		return the length of the current selection (in code points / characters).
+
+	\return
+		Number of code points (or characters) contained within the currently defined selection.
+	*/
+	size_t	getSelectionLength(void) const;
+
+
+	/*!
+	\brief
+		return the maximum text length set for this edit box.
+
+	\return
+		The maximum number of code points (characters) that can be entered into this edit box.
+	*/
+	size_t	getMaxTextLength(void) const		{return d_maxTextLen;}
+
+
+	/*!
+	\brief
+		return the currently set colour to be used for rendering edit box text in the
+		normal, unselected state.
+
+	\return
+		colour value describing the ARGB colour that is currently set.
+	*/
+	colour	getNormalTextColour(void) const				{return d_normalTextColour;}
+
+
+	/*!
+	\brief
+		return the currently set colour to be used for rendering the edit box text when within the
+		selected region.
+
+	\return
+		colour value describing the ARGB colour that is currently set.
+	*/
+	colour	getSelectedTextColour(void) const			{return d_selectTextColour;}
+
+
+	/*!
+	\brief
+		return the currently set colour to be used for rendering the edit box selection highlight
+		when the edit box is active.
+
+	\return
+		colour value describing the ARGB colour that is currently set.
+	*/
+	colour	getNormalSelectBrushColour(void) const		{return d_selectBrushColour;}
+
+
+	/*!
+	\brief
+		return the currently set colour to be used for rendering the edit box selection highlight
+		when the edit box is inactive.
+
+	\return
+		colour value describing the ARGB colour that is currently set.
+	*/
+	colour	getInactiveSelectBrushColour(void) const	{return d_inactiveSelectBrushColour;}
+
+
+	/*!
+	\brief
+		Return whether the text in the edit box will be word-wrapped.
+
+	\return
+		- true if the text will be word-wrapped at the edges of the widget frame.
+		- false if text will not be word-wrapped (a scroll bar will be used to access long text lines).
+	*/
+	bool	isWordWrapped(void) const;
+
+
+	/*************************************************************************
+		Manipulators
+	*************************************************************************/
+	/*!
+	\brief
+		Initialise the Window based object ready for use.
+
+	\note
+		This must be called for every window created.  Normally this is handled automatically by the WindowFactory for each Window type.
+
+	\return
+		Nothing
+	*/
+	virtual void	initialise(void);
+
+
+	/*!
+	\brief
+		Specify whether the edit box is read-only.
+
+	\param setting
+		- true if the edit box is read only and can't be edited by the user.
+		- false if the edit box is not read only and may be edited by the user.
+
+	\return
+		Nothing.
+	*/
+	void	setReadOnly(bool setting);
+
+
+	/*!
+	\brief
+		Set the current position of the carat.
+
+	\param carat_pos
+		New index for the insert carat relative to the start of the text.  If the value specified is greater than the
+		number of characters in the edit box, the carat is positioned at the end of the text.
+
+	\return
+		Nothing.
+	*/
+	void	setCaratIndex(size_t carat_pos);
+
+
+	/*!
+	\brief
+		Define the current selection for the edit box
+
+	\param start_pos
+		Index of the starting point for the selection.  If this value is greater than the number of characters in the edit box, the
+		selection start will be set to the end of the text.
+
+	\param end_pos
+		Index of the ending point for the selection.  If this value is greater than the number of characters in the edit box, the
+		selection start will be set to the end of the text.
+
+	\return
+		Nothing.
+	*/
+	void	setSelection(size_t start_pos, size_t end_pos);
+	
+
+	/*!
+	\brief
+		set the maximum text length for this edit box.
+
+	\param max_len
+		The maximum number of code points (characters) that can be entered into this Editbox.
+
+	\return
+		Nothing.
+	*/
+	void	setMaxTextLength(size_t max_len);
+
+
+	/*!
+	\brief
+		Set the colour to be used for rendering edit box text in the normal, unselected state.
+
+	\param col
+		colour value describing the ARGB colour that is to be used.
+
+	\return
+		Nothing.
+	*/
+	void	setNormalTextColour(const colour& col);
+
+
+	/*!
+	\brief
+		Set the colour to be used for rendering the edit box text when within the
+		selected region.
+
+	\return
+		colour value describing the ARGB colour that is currently set.
+	*/
+	void	setSelectedTextColour(const colour& col);
+
+
+	/*!
+	\brief
+		Set the colour to be used for rendering the edit box selection highlight
+		when the edit box is active.
+
+	\param col
+		colour value describing the ARGB colour that is to be used.
+
+	\return
+		Nothing.
+	*/
+	void	setNormalSelectBrushColour(const colour& col);
+
+
+	/*!
+	\brief
+		Set the colour to be used for rendering the edit box selection highlight
+		when the edit box is inactive.
+
+	\param col
+		colour value describing the ARGB colour that is to be used.
+
+	\return
+		Nothing.
+	*/
+	void	setInactiveSelectBrushColour(const colour& col);
+
+
+	/*!
+	\brief
+		Scroll the view so that the current carat position is visible.
+	*/
+	void	ensureCaratIsVisible(void);
+
+
+	/*!
+	\brief
+		Set whether the text will be word wrapped or not.
+
+	\param setting
+		- true if the text should word-wrap at the edges of the text box.
+		- false if the text should not wrap, but a scroll bar should be used.
+
+	\return
+		Nothing.
+	*/
+	void	setWordWrapping(bool setting);
+
+
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for the MultiLineEditbox base class.
+	*/
+	MultiLineEditbox(const String& type, const String& name);
+
+
+	/*!
+	\brief
+		Destructor for the MultiLineEditbox base class.
+	*/
+	virtual ~MultiLineEditbox(void);
+
+
+protected:
+	/*************************************************************************
+		Implementation Methods (abstract)
+	*************************************************************************/
+	/*!
+	\brief
+		Return a Rect object describing, in un-clipped pixels, the window relative area
+		that the text should be rendered in to.
+
+	\return
+		Rect object describing the area of the Window to be used for rendering text.
+	*/
+	virtual	Rect	getTextRenderArea(void) const		= 0;
+
+
+	/*!
+	\brief
+		create and return a pointer to a Scrollbar widget for use as vertical scroll bar
+
+	\return
+		Pointer to a Scrollbar to be used for scrolling vertically.
+	*/
+	virtual Scrollbar*	createVertScrollbar(void) const		= 0;
+ 
+
+	/*!
+	\brief
+		create and return a pointer to a Scrollbar widget for use as horizontal scroll bar
+
+	\return
+		Pointer to a Scrollbar to be used for scrolling horizontally.
+	*/
+	virtual Scrollbar*	createHorzScrollbar(void) const		= 0;
+
+
+	/*!
+	\brief
+		Setup size and position for the component widgets attached to this Editbox
+
+	\return
+		Nothing.
+	*/
+	virtual void	layoutComponentWidgets()	= 0;
+
+
+	/*!
+	\brief
+		Perform rendering of the widget control frame and other 'static' areas.  This
+		method should not render the actual text.  Note that the text will be rendered
+		to layer 4 and the selection brush to layer 3, other layers can be used for
+		rendering imagery behind and infront of the text & selection..
+
+	\param z
+		Z co-ordinate for layer 0.
+
+	\return
+		Nothing.
+	*/
+	virtual	void	renderEditboxBaseImagery(float z)		= 0;
+
+
+	/*!
+	\brief
+		Render the carat.
+
+	\return
+		Nothing
+	*/
+	virtual void	renderCarat(float baseX, float baseY, const Rect& clipper)	= 0;
+
+
+	/*************************************************************************
+		Implementation Methods
+	*************************************************************************/
+	/*!
+	\brief
+		Add multi-line edit box specific events
+	*/
+	void	addMultiLineEditboxEvents(void);
+
+
+	/*!
+	\brief
+		Render text lines.
+	*/
+	void	renderTextLines(const Rect& dest_area, const Rect& clipper) const;
+
+
+	/*!
+	\brief
+		Format the text into lines as needed by the current formatting options.
+	*/
+	void	formatText(void);
+
+
+	/*!
+	\brief
+		Return the length of the next token in String \a text starting at index \a start_idx.
+
+	\note
+		Any single whitespace character is one token, any group of other characters is a token.
+	
+	\return
+		The code point length of the token.
+	*/
+	size_t	getNextTokenLength(const String& text, size_t start_idx) const;
+
+
+	/*!
+	\brief
+		Perform the actual rendering for this Window.
+
+	\param z
+		float value specifying the base Z co-ordinate that should be used when rendering
+
+	\return
+		Nothing
+	*/
+	virtual	void	drawSelf(float z);
+
+
+	/*!
+	\brief
+		display required integrated scroll bars according to current state of the edit box and update their values.
+	*/
+	void	configureScrollbars(void);
+
+
+	/*!
+	\brief
+		Return the text code point index that is rendered closest to screen position \a pt.
+
+	\param pt
+		Point object describing a position on the screen in pixels.
+
+	\return
+		Code point index into the text that is rendered closest to screen position \a pt.
+	*/
+	size_t	getTextIndexFromPosition(const Point& pt) const;
+
+
+	/*!
+	\brief
+		Return the line number a given index falls on with the current formatting.  Will return last line
+		if index is out of range.
+	*/
+	size_t	getLineNumberFromIndex(size_t index) const;
+
+
+	/*!
+	\brief
+		Clear the current selection setting
+	*/
+	void	clearSelection(void);
+
+
+	/*!
+	\brief
+		Erase the currently selected text.
+
+	\param modify_text
+		when true, the actual text will be modified.  When false, everything is done except erasing the characters.
+	*/
+	void	eraseSelectedText(bool modify_text = true);
+
+
+	/*!
+	\brief
+		Processing for backspace key
+	*/
+	void	handleBackspace(void);
+
+
+	/*!
+	\brief
+		Processing for Delete key
+	*/
+	void	handleDelete(void);
+
+
+	/*!
+	\brief
+		Processing to move carat one character left
+	*/
+	void	handleCharLeft(uint sysKeys);
+
+
+	/*!
+	\brief
+		Processing to move carat one word left
+	*/
+	void	handleWordLeft(uint sysKeys);
+
+
+	/*!
+	\brief
+		Processing to move carat one character right
+	*/
+	void	handleCharRight(uint sysKeys);
+
+
+	/*!
+	\brief
+		Processing to move carat one word right
+	*/
+	void	handleWordRight(uint sysKeys);
+
+
+	/*!
+	\brief
+		Processing to move carat to the start of the text.
+	*/
+	void	handleDocHome(uint sysKeys);
+
+
+	/*!
+	\brief
+		Processing to move carat to the end of the text
+	*/
+	void	handleDocEnd(uint sysKeys);
+
+
+	/*!
+	\brief
+		Processing to move carat to the start of the current line.
+	*/
+	void	handleLineHome(uint sysKeys);
+
+
+	/*!
+	\brief
+		Processing to move carat to the end of the current line
+	*/
+	void	handleLineEnd(uint sysKeys);
+
+
+	/*!
+	\brief
+		Processing to move carat up a line.
+	*/
+	void	handleLineUp(uint sysKeys);
+
+
+	/*!
+	\brief
+		Processing to move carat down a line.
+	*/
+	void	handleLineDown(uint sysKeys);
+
+
+	/*!
+	\brief
+		Processing to insert a new line / paragraph.
+	*/
+	void	handleNewLine(uint sysKeys);
+
+
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	virtual bool	testClassName_impl(const String& class_name) const
+	{
+		if (class_name==(const utf8*)"MultiLineEditBox")	return true;
+		return Window::testClassName_impl(class_name);
+	}
+
+	/*************************************************************************
+		New event handlers
+	*************************************************************************/
+	/*!
+	\brief
+		Handler called when the read-only state of the edit box changes
+	*/
+	void	onReadOnlyChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the word wrap mode for the the edit box changes
+	*/
+	void	onWordWrapModeChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the maximum text length for the edit box changes
+	*/
+	void	onMaximumTextLengthChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the carat moves.
+	*/
+	void	onCaratMoved(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the text selection changes
+	*/
+	void	onTextSelectionChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the edit box is full
+	*/
+	void	onEditboxFullEvent(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the 'always show' setting for the vertical scroll bar changes.
+	*/
+	void	onVertScrollbarModeChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when 'always show' setting for the horizontal scroll bar changes.
+	*/
+	void	onHorzScrollbarModeChanged(WindowEventArgs& e);
+
+
+	/*************************************************************************
+		Overridden event handlers
+	*************************************************************************/
+	virtual	void	onMouseButtonDown(MouseEventArgs& e);
+	virtual void	onMouseButtonUp(MouseEventArgs& e);
+	virtual	void	onMouseDoubleClicked(MouseEventArgs& e);
+	virtual	void	onMouseTripleClicked(MouseEventArgs& e);
+	virtual void	onMouseMove(MouseEventArgs& e);
+	virtual void	onCaptureLost(WindowEventArgs& e);
+	virtual void	onCharacter(KeyEventArgs& e);
+	virtual void	onKeyDown(KeyEventArgs& e);
+	virtual void	onTextChanged(WindowEventArgs& e);
+	virtual void	onSized(WindowEventArgs& e);
+	virtual	void	onMouseWheel(MouseEventArgs& e);
+
+
+	/*************************************************************************
+		Implementation struct
+	*************************************************************************/
+	/*!
+	\brief
+		struct used to store information about a formatted line within the
+		paragraph.
+	*/
+	struct LineInfo
+	{
+		size_t	d_startIdx;		//!< Starting index for this line.
+		size_t	d_length;		//!< Code point length of this line.
+		float	d_extent;		//!< Rendered extent of this line.
+	};
+
+
+	/*************************************************************************
+		Implementation data
+	*************************************************************************/
+	bool	d_readOnly;			//!< true if the edit box is in read-only mode
+	size_t	d_maxTextLen;		//!< Maximum number of characters for this Editbox.
+	size_t	d_caratPos;			//!< Position of the carat / insert-point.
+	size_t	d_selectionStart;	//!< Start of selection area.
+	size_t	d_selectionEnd;		//!< End of selection area.
+	bool	d_dragging;			//!< true when a selection is being dragged.
+	size_t	d_dragAnchorIdx;	//!< Selection index for drag selection anchor point.
+
+	typedef	std::vector<LineInfo>	LineList;	//!< Type for collection of LineInfos.
+	static String d_lineBreakChars;	//!< Holds what we consider to be line break characters.
+	bool		d_wordWrap;			//!< true when formatting uses word-wrapping.
+	LineList	d_lines;			//!< Holds the lines for the current formatting.
+	float		d_widestExtent;		//!< Holds the extent of the widest line as calculated in the last formatting pass.
+
+	// component widgets
+	Scrollbar*	d_vertScrollbar;	//!< Points to the vertical scroll bar widget.
+	Scrollbar*	d_horzScrollbar;	//!< Points to the horizontal scroll bar widget.
+	bool	d_forceVertScroll;		//!< true if vertical scrollbar should always be displayed
+	bool	d_forceHorzScroll;		//!< true if horizontal scrollbar should always be displayed
+
+	// images
+	const Image*	d_selectionBrush;	//!< Image to use as the selection brush (should be set by derived class).
+
+	// basic rendering colours
+	colour	d_normalTextColour;				//!< Text colour used normally.
+	colour	d_selectTextColour;				//!< Text colour used when text is highlighted
+	colour	d_selectBrushColour;			//!< Colour to apply to the selection brush.
+	colour	d_inactiveSelectBrushColour;	//!< Colour to apply to the selection brush when widget is inactive / read-only.
+
+
+private:
+	/*************************************************************************
+		Static Properties for this class
+	*************************************************************************/
+	static MultiLineEditboxProperties::ReadOnly					d_readOnlyProperty;
+	static MultiLineEditboxProperties::WordWrap					d_wordWrapProperty;
+	static MultiLineEditboxProperties::CaratIndex				d_caratIndexProperty;
+	static MultiLineEditboxProperties::SelectionStart			d_selectionStartProperty;
+	static MultiLineEditboxProperties::SelectionLength			d_selectionLengthProperty;
+	static MultiLineEditboxProperties::MaxTextLength			d_maxTextLengthProperty;
+	static MultiLineEditboxProperties::NormalTextColour			d_normalTextColourProperty;
+	static MultiLineEditboxProperties::SelectedTextColour		d_selectedTextColourProperty;
+	static MultiLineEditboxProperties::ActiveSelectionColour	d_activeSelectionColourProperty;
+	static MultiLineEditboxProperties::InactiveSelectionColour	d_inactiveSelectionColourProperty;
+
+
+	/*************************************************************************
+		Private methods
+	*************************************************************************/
+	void	addMultiLineEditboxProperties(void);
+};
+
+} // End of  CEGUI namespace section
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUIMultiLineEditbox_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIMenuItem.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIMenuItem.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIMenuItem.h	(revision 1092)
@@ -0,0 +1,409 @@
+/************************************************************************
+	filename: 	CEGUIMenuItem.h
+	created:	2/4/2005
+	author:		Tomas Lindquist Olsen (based on code by Paul D Turner)
+	
+	purpose:	Interface to base class for MenuItem widget
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIMenuItem_h_
+#define _CEGUIMenuItem_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIWindow.h"
+#include "elements/CEGUITextItem.h"
+#include "elements/CEGUIMenuItemProperties.h"
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+/*!
+\brief
+	Base class for menu items.
+*/
+class CEGUIEXPORT MenuItem : public TextItem
+{
+public:
+	static const String EventNamespace;				//!< Namespace for global events
+
+	/*************************************************************************
+		Constants
+	*************************************************************************/
+	// default colours for rendering
+	
+	static const colour		DefaultHoverColour;			//!< Default colour used when rendering in hover / highlight state.
+	static const colour		DefaultPushedColour;		//!< Default colour used when rendering in pushed state.
+	static const colour		DefaultOpenedColour;		//!< Default colour used when rendering in opended state.
+	static const colour		DefaultNormalTextColour;	//!< Default colour used when rendering the text in normal state.
+	static const colour		DefaultDisabledTextColour;	//!< Default colour used when rendering the text in disabled state.
+
+
+	/*************************************************************************
+		Event name constants
+	*************************************************************************/
+	// generated internally by Window
+	static const String EventClicked;					//!< The menuitem was clicked.
+
+
+	/*************************************************************************
+		Accessor type functions
+	*************************************************************************/
+	/*!
+	\brief
+		return true if user is hovering over this widget (or it's pushed and user is not over it for highlight)
+
+	\return
+		true if the user is hovering or if the button is pushed and the mouse is not over the button.  Otherwise return false.
+	*/
+	bool	isHovering(void) const			{return d_hovering;}
+
+
+	/*!
+	\brief
+		Return true if the button widget is in the pushed state.
+
+	\return
+		true if the button-type widget is pushed, false if the widget is not pushed.
+	*/
+	bool	isPushed(void) const			{return d_pushed;}
+
+
+	/*!
+	\brief
+		return text label colour used for hover / highlight rendering
+
+	\return
+		colour value that is used for the label text when rendering in the hover / highlighted states.
+	*/
+	colour	getHoverColour(void) const			{return d_hoverColour;}
+
+
+	/*!
+	\brief
+		return text label colour used for pushed rendering
+
+	\return
+		colour value that is used for the label text when rendering in the pushed state.
+	*/
+	colour	getPushedColour(void) const			{return d_pushedColour;}
+
+
+	/*!
+	\brief
+		return text label colour used for opened rendering
+
+	\return
+		colour value that is used for the label text when rendering in the opened state.
+	*/
+	colour	getOpenedColour(void) const			{return d_openedColour;}
+
+
+	/*!
+	\brief
+		return text label colour used for normal rendering
+
+	\return
+		colour value that is used for the label text when rendering in the normal state.
+	*/
+	colour	getNormalTextColour(void) const			{return d_normalTextColour;}
+
+
+	/*!
+	\brief
+		return text label colour used for disabled rendering
+
+	\return
+		colour value that is used for the label text when rendering in the disabled state.
+	*/
+	colour	getDisabledTextColour(void) const		{return d_disabledTextColour;}
+
+
+	/*!
+	\brief
+		Get the PopupMenu that is currently attached to this MenuItem.
+
+	\return
+		A pointer to the currently attached PopupMenu.  Null is there is no PopupMenu attached.
+	*/
+	PopupMenu*	getPopupMenu(void) const			{return d_popup;}
+
+
+	/*************************************************************************
+		Manipulators
+	*************************************************************************/
+	/*!
+	\brief
+		Set the colour to use when rendering in the hover / highlighted states.
+
+	\param colour
+		colour value specifying the colour to be used.
+
+	\return
+		Nothing.
+	*/
+	void	setHoverColour(const colour& colour);
+
+
+	/*!
+	\brief
+		Set the colour to use when rendering in the pushed state.
+
+	\param colour
+		colour value specifying the colour to be used.
+
+	\return
+		Nothing.
+	*/
+	void	setPushedColour(const colour& colour);
+
+
+	/*!
+	\brief
+		Set the colour to use when rendering in the opened state.
+
+	\param colour
+		colour value specifying the colour to be used.
+
+	\return
+		Nothing.
+	*/
+	void	setOpenedColour(const colour& colour);
+
+
+	/*!
+	\brief
+		Set the colour to use for the label text when rendering in the normal state.
+
+	\param colour
+		colour value specifying the colour to be used.
+
+	\return
+		Nothing.
+	*/
+	void	setNormalTextColour(const colour& colour);
+
+
+	/*!
+	\brief
+		Set the colour to use for the label text when rendering in the disabled state.
+
+	\param colour
+		colour value specifying the colour to be used.
+
+	\return
+		Nothing.
+	*/
+	void	setDisabledTextColour(const colour& colour);
+
+
+	/*!
+	\brief
+		Set the popup menu for this item.
+
+	\param popup
+		popupmenu window to attach to this item
+
+	\return
+		Nothing.
+	*/
+	void	setPopupMenu(PopupMenu* popup);
+
+
+	/*!
+	\brief
+		Opens the PopupMenu.
+	*/
+	void	openPopupMenu(void);
+
+
+	/*!
+	\brief
+		Closes the PopupMenu.
+
+	\param notify
+		true if the parent menubar is to be notified of the close.
+
+	\return
+		Nothing.
+	*/
+	void	closePopupMenu(bool notify=true);
+
+
+	/*!
+	\brief
+		Toggles the PopupMenu.
+
+	\return
+		true if the popup was opened. false if it was closed.
+	*/
+	bool	togglePopupMenu(void);
+
+
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for MenuItem objects
+	*/
+	MenuItem(const String& type, const String& name);
+
+
+	/*!
+	\brief
+		Destructor for MenuItem objects
+	*/
+	virtual ~MenuItem(void);
+
+
+protected:
+	/*************************************************************************
+		New Event Handlers
+	*************************************************************************/
+	/*!
+	\brief
+		handler invoked internally when the MenuItem is clicked.
+	*/
+	virtual void	onClicked(WindowEventArgs& e);
+
+
+	/*************************************************************************
+		Overridden event handlers
+	*************************************************************************/
+	virtual void	onMouseMove(MouseEventArgs& e);
+	virtual void	onMouseButtonDown(MouseEventArgs& e);
+	virtual void	onMouseButtonUp(MouseEventArgs& e);
+	virtual void	onCaptureLost(WindowEventArgs& e);
+	virtual void	onMouseLeaves(MouseEventArgs& e);
+
+
+	/*************************************************************************
+		Implementation Functions
+	*************************************************************************/
+	/*!
+	\brief
+		Update the internal state of the widget with the mouse at the given position.
+
+	\param mouse_pos
+		Point object describing, in screen pixel co-ordinates, the location of the mouse cursor.
+
+	\return
+		Nothing
+	*/
+	void	updateInternalState(const Point& mouse_pos);
+
+
+	/*!
+	\brief
+		Add menuitem specific events
+	*/
+	void	addMenuItemEvents(void);
+
+
+	/*!
+	\brief
+		Recursive function that closes all popups down the hierarcy starting with this one.
+
+	\return
+		Nothing.
+	*/
+	void	closeAllMenuItemPopups();
+
+
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	virtual bool	testClassName_impl(const String& class_name) const
+	{
+		if (class_name==(const utf8*)"MenuItem")	return true;
+		return TextItem::testClassName_impl(class_name);
+	}
+
+
+	/*************************************************************************
+		Implementation Rendering Functions
+	*************************************************************************/
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	bool	d_pushed;			//!< true when widget is pushed
+	bool	d_hovering;			//!< true when the button is in 'hover' state and requires the hover rendering.
+	bool	d_opened;			//!< true when the menu item's popup menu is opened.
+
+	// common rendering setting data
+	colour	d_hoverColour;					//!< Colour used when rendering in highlighted state
+	colour	d_pushedColour;					//!< Colour used when rendering in pushed state
+	colour	d_openedColour;					//!< Colour used when rendering in opened state
+	colour	d_normalTextColour;				//!< Colour used for the text when rendering in normal state
+	colour	d_disabledTextColour;			//!< Colour used for the text when rendering in disabled state
+
+	PopupMenu* d_popup;						//!< PopupMenu that this item displays when activated.
+
+	bool	d_popupWasClosed;				//!< Used internally to determine if a popup was just closed on a Clicked event
+
+private:
+	/*************************************************************************
+		Static Properties for this class
+	*************************************************************************/
+	static MenuItemProperties::HoverColour			d_hoverColourProperty;
+	static MenuItemProperties::PushedColour			d_pushedColourProperty;
+	static MenuItemProperties::OpenedColour			d_openedColourProperty;
+	static MenuItemProperties::NormalTextColour		d_normalTextColourProperty;
+	static MenuItemProperties::DisabledTextColour	d_disabledTextColourProperty;
+
+
+	/*************************************************************************
+		Private methods
+	*************************************************************************/
+	void addMenuItemProperties(void);
+
+
+	/*!
+	\brief
+		Add given window to child list at an appropriate position
+	*/
+	virtual void	addChild_impl(Window* wnd);
+};
+
+} // End of  CEGUI namespace section
+
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+
+#endif	// end of guard _CEGUIMenuItem_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIButtonBaseProperties.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIButtonBaseProperties.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIButtonBaseProperties.h	(revision 1092)
@@ -0,0 +1,156 @@
+/************************************************************************
+	filename: 	CEGUIButtonBaseProperties.h
+	created:	9/7/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to properties for button base class
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIButtonBaseProperties_h_
+#define _CEGUIButtonBaseProperties_h_
+
+#include "CEGUIProperty.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+// Start of ButtonBaseProperties namespace section
+/*!
+\brief
+	Namespace containing all classes that make up the properties interface for the ButtonBase class
+*/
+namespace ButtonBaseProperties
+{
+/*!
+\brief
+	Property to access the normal text colour.
+
+	This property offers access to the colour value to be used for rendering the button caption text for the normal state.
+
+	\par Usage:
+		- Name: NormalTextColour
+		- Format: "aarrggbb".
+
+	\par Where:
+		- aarrggbb is the ARGB colour value to be used.
+*/
+class NormalTextColour : public Property
+{
+public:
+	NormalTextColour() : Property(
+		"NormalTextColour",
+		"Property to get/set the colour to use when rendering label text for normal state.  Value is \"aarrggbb\" (hex).",
+		"00FFFFFF")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the hover / highlight text colour.
+
+	This property offers access to the colour value to be used for rendering the button caption text for the hover or highlight state.
+
+	\par Usage:
+		- Name: HoverTextColour
+		- Format: "aarrggbb".
+
+	\par Where:
+		- aarrggbb is the ARGB colour value to be used.
+*/
+class HoverTextColour : public Property
+{
+public:
+	HoverTextColour() : Property(
+		"HoverTextColour",
+		"Property to get/set the colour to use when rendering label text for hover/highlight state.  Value is \"aarrggbb\" (hex).",
+		"00FFFFFF")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the pushed text colour.
+
+	This property offers access to the colour value to be used for rendering the button caption text for the pushed state.
+
+	\par Usage:
+		- Name: PushedTextColour
+		- Format: "aarrggbb".
+
+	\par Where:
+		- aarrggbb is the ARGB colour value to be used.
+*/
+class PushedTextColour : public Property
+{
+public:
+	PushedTextColour() : Property(
+		"PushedTextColour", 
+		"Property to get/set the colour to use when rendering label text for pushed state.  Value is \"aarrggbb\" (hex).",
+		"00FFFFFF")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the disabled text colour.
+
+	This property offers access to the colour value to be used for rendering the button caption text for the disabled state.
+
+	\par Usage:
+		- Name: DisabledTextColour
+		- Format: "aarrggbb".
+
+	\par Where:
+		- aarrggbb is the ARGB colour value to be used.
+*/
+class DisabledTextColour : public Property
+{
+public:
+	DisabledTextColour() : Property(
+		"DisabledTextColour",
+		"Property to get/set the colour to use when rendering label text for disabled state.  Value is \"aarrggbb\" (hex).",
+		"007F7F7F")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+} // End of  ButtonBaseProperties namespace section
+
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIButtonBaseProperties_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIListbox.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIListbox.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIListbox.h	(revision 1092)
@@ -0,0 +1,749 @@
+/************************************************************************
+	filename: 	CEGUIListbox.h
+	created:	13/4/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to base class for Listbox widget
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIListbox_h_
+#define _CEGUIListbox_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIWindow.h"
+#include "elements/CEGUIListboxProperties.h"
+#include <vector>
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+/*!
+\brief
+	Base class for standard Listbox widget.
+*/
+class CEGUIEXPORT Listbox : public Window
+{
+public:
+	static const String EventNamespace;				//!< Namespace for global events
+
+
+	/*************************************************************************
+		Constants
+	*************************************************************************/
+	// event names
+	static const String EventListContentsChanged;			//!< Event triggered when the contents of the list is changed.
+	static const String EventSelectionChanged;			//!< Event triggered when there is a change to the currently selected item(s).
+	static const String EventSortModeChanged;				//!< Event triggered when the sort mode setting changes.
+	static const String EventMultiselectModeChanged;		//!< Event triggered when the multi-select mode setting changes.
+	static const String EventVertScrollbarModeChanged;	//!< Event triggered when the vertical scroll bar 'force' setting changes.
+	static const String EventHorzScrollbarModeChanged;	//!< Event triggered when the horizontal scroll bar 'force' setting changes.
+
+
+	/*************************************************************************
+		Accessor Methods
+	*************************************************************************/
+	/*!
+	\brief
+		Return number of items attached to the list box
+
+	\return
+		the number of items currently attached to this list box.
+	*/
+	size_t	getItemCount(void) const		{return d_listItems.size();}
+
+	
+	/*!
+	\brief
+		Return the number of selected items in the list box.
+
+	\return
+		Total number of attached items that are in the selected state.
+	*/
+	size_t	getSelectedCount(void) const;
+
+
+	/*!
+	\brief
+		Return a pointer to the first selected item.
+
+	\return
+		Pointer to a ListboxItem based object that is the first selected item in the list.  will return NULL if
+		no item is selected.
+	*/
+	ListboxItem*	getFirstSelectedItem(void) const;
+
+
+	/*!
+	\brief
+		Return a pointer to the next selected item after item \a start_item
+
+	\param start_item
+		Pointer to the ListboxItem where the search for the next selected item is to begin.  If this
+		parameter is NULL, the search will begin with the first item in the list box.
+
+	\return
+		Pointer to a ListboxItem based object that is the next selected item in the list after
+		the item specified by \a start_item.  Will return NULL if no further items were selected.
+
+	\exception	InvalidRequestException	thrown if \a start_item is not attached to this list box.
+	*/
+	ListboxItem*	getNextSelected(const ListboxItem* start_item) const;
+
+
+	/*!
+	\brief
+		Return the item at index position \a index.
+
+	\param index
+		Zero based index of the item to be returned.
+
+	\return
+		Pointer to the ListboxItem at index position \a index in the list box.
+
+	\exception	InvalidRequestException	thrown if \a index is out of range.
+	*/
+	ListboxItem*	getListboxItemFromIndex(size_t index) const;
+
+
+	/*!
+	\brief
+		Return the index of ListboxItem \a item
+
+	\param item
+		Pointer to a ListboxItem whos zero based index is to be returned.
+
+	\return
+		Zero based index indicating the position of ListboxItem \a item in the list box.
+
+	\exception	InvalidRequestException	thrown if \a item is not attached to this list box.
+	*/
+	size_t	getItemIndex(const ListboxItem* item) const;
+
+
+	/*!
+	\brief
+		return whether list sorting is enabled
+
+	\return
+		true if the list is sorted, false if the list is not sorted
+	*/
+	bool	isSortEnabled(void) const		{return d_sorted;}
+
+	/*!
+	\brief
+		return whether multi-select is enabled
+
+	\return
+		true if multi-select is enabled, false if multi-select is not enabled.
+	*/
+	bool	isMultiselectEnabled(void) const	{return d_multiselect;}
+
+
+	/*!
+	\brief
+		return whether the string at index position \a index is selected
+
+	\param index
+		Zero based index of the item to be examined.
+
+	\return
+		true if the item at \a index is selected, false if the item at \a index is not selected.
+
+	\exception	InvalidRequestException	thrown if \a index is out of range.
+	*/
+	bool	isItemSelected(size_t index) const;
+
+
+	/*!
+	\brief
+		Search the list for an item with the specified text
+
+	\param text
+		String object containing the text to be searched for.
+
+	\param start_item
+		ListboxItem where the search is to begin, the search will not include \a item.  If \a item is
+		NULL, the search will begin from the first item in the list.
+
+	\return
+		Pointer to the first ListboxItem in the list after \a item that has text matching \a text.  If
+		no item matches the criteria NULL is returned.
+
+	\exception	InvalidRequestException	thrown if \a item is not attached to this list box.
+	*/
+	ListboxItem*	findItemWithText(const String& text, const ListboxItem* start_item);
+
+
+	/*!
+	\brief
+		Return whether the specified ListboxItem is in the List
+
+	\return
+		true if ListboxItem \a item is in the list, false if ListboxItem \a item is not in the list.
+	*/
+	bool	isListboxItemInList(const ListboxItem* item) const;
+
+
+	/*!
+	\brief
+		Return whether the vertical scroll bar is always shown.
+
+	\return
+		- true if the scroll bar will always be shown even if it is not required.
+		- false if the scroll bar will only be shown when it is required.
+	*/
+	bool	isVertScrollbarAlwaysShown(void) const;
+
+
+	/*!
+	\brief
+		Return whether the horizontal scroll bar is always shown.
+
+	\return
+		- true if the scroll bar will always be shown even if it is not required.
+		- false if the scroll bar will only be shown when it is required.
+	*/
+	bool	isHorzScrollbarAlwaysShown(void) const;
+
+
+	/*************************************************************************
+		Manipulator Methods
+	*************************************************************************/
+	/*!
+	\brief
+		Initialise the Window based object ready for use.
+
+	\note
+		This must be called for every window created.  Normally this is handled automatically by the WindowFactory for each Window type.
+
+	\return
+		Nothing
+	*/
+	virtual void	initialise(void);
+
+
+	/*!
+	\brief
+		Remove all items from the list.
+
+		Note that this will cause 'AutoDelete' items to be deleted.
+	*/
+	void	resetList(void);
+
+
+	/*!
+	\brief
+		Add the given ListboxItem to the list.
+
+	\param item
+		Pointer to the ListboxItem to be added to the list.  Note that it is the passed object that is added to the
+		list, a copy is not made.  If this parameter is NULL, nothing happens.
+
+	\return
+		Nothing.
+	*/
+	void	addItem(ListboxItem* item);
+
+
+	/*!
+	\brief
+		Insert an item into the list box after a specified item already in the list.
+
+		Note that if the list is sorted, the item may not end up in the requested position.
+
+	\param item
+		Pointer to the ListboxItem to be inserted.  Note that it is the passed object that is added to the
+		list, a copy is not made.  If this parameter is NULL, nothing happens.
+
+	\param position
+		Pointer to a ListboxItem that \a item is to be inserted after.  If this parameter is NULL, the item is
+		inserted at the start of the list.
+
+	\return
+		Nothing.
+	
+	\exception InvalidRequestException	thrown if no ListboxItem \a position is attached to this list box.
+	*/
+	void	insertItem(ListboxItem* item, const ListboxItem* position);
+
+
+	/*!
+	\brief
+		Removes the given item from the list box.  If the item is has the auto delete state set, the item will be deleted.
+
+	\param item
+		Pointer to the ListboxItem that is to be removed.  If \a item is not attached to this list box then nothing
+		will happen.
+
+	\return
+		Nothing.
+	*/
+	void	removeItem(const ListboxItem* item);
+
+
+	/*!
+	\brief
+		Clear the selected state for all items.
+
+	\return
+		Nothing.
+	*/
+	void	clearAllSelections(void);
+
+
+	/*!
+	\brief
+		Set whether the list should be sorted.
+
+	\param setting
+		true if the list should be sorted, false if the list should not be sorted.
+
+	\return
+		Nothing.
+	*/
+	void	setSortingEnabled(bool setting);
+
+	
+	/*!
+	\brief
+		Set whether the list should allow multiple selections or just a single selection
+
+	\param  setting
+		true if the widget should allow multiple items to be selected, false if the widget should only allow
+		a single selection.
+
+	\return
+		Nothing.
+	*/
+	void	setMultiselectEnabled(bool setting);
+
+
+	/*!
+	\brief
+		Set whether the vertical scroll bar should always be shown.
+
+	\param setting
+		true if the vertical scroll bar should be shown even when it is not required.  false if the vertical
+		scroll bar should only be shown when it is required.
+
+	\return
+		Nothing.
+	*/
+	void	setShowVertScrollbar(bool setting);
+
+
+	/*!
+	\brief
+		Set whether the horizontal scroll bar should always be shown.
+
+	\param setting
+		true if the horizontal scroll bar should be shown even when it is not required.  false if the horizontal
+		scroll bar should only be shown when it is required.
+
+	\return
+		Nothing.
+	*/
+	void	setShowHorzScrollbar(bool setting);
+
+
+	/*!
+	\brief
+		Set the select state of an attached ListboxItem.
+
+		This is the recommended way of selecting and deselecting items attached to a list box as it respects the
+		multi-select mode setting.  It is possible to modify the setting on ListboxItems directly, but that approach
+		does not respect the settings of the list box.
+
+	\param item
+		The ListboxItem to be affected.  This item must be attached to the list box.
+
+	\param state
+		true to select the item, false to de-select the item.
+
+	\return
+		Nothing.
+	
+	\exception	InvalidRequestException	thrown if \a item is not attached to this list box.
+	*/
+	void	setItemSelectState(ListboxItem* item, bool state);
+
+
+	/*!
+	\brief
+		Set the select state of an attached ListboxItem.
+
+		This is the recommended way of selecting and deselecting items attached to a list box as it respects the
+		multi-select mode setting.  It is possible to modify the setting on ListboxItems directly, but that approach
+		does not respect the settings of the list box.
+
+	\param item_index
+		The zero based index of the ListboxItem to be affected.  This must be a valid index (0 <= index < getItemCount())
+
+	\param state
+		true to select the item, false to de-select the item.
+
+	\return
+		Nothing.
+	
+	\exception	InvalidRequestException	thrown if \a item_index is out of range for the list box
+	*/
+	void	setItemSelectState(size_t item_index, bool state);
+
+
+	/*!
+	\brief
+		Causes the list box to update it's internal state after changes have been made to one or more
+		attached ListboxItem objects.
+
+		Client code must call this whenever it has made any changes to ListboxItem objects already attached to the
+		list box.  If you are just adding items, or removed items to update them prior to re-adding them, there is
+		no need to call this method.
+
+	\return
+		Nothing.
+	*/
+	void	handleUpdatedItemData(void);
+
+
+	/*!
+	\brief
+		Ensure the item at the specified index is visible within the list box.
+
+	\param item_index
+		Zero based index of the item to be made visible in the list box.  If this value is out of range, the
+		list is always scrolled to the bottom.
+
+	\return
+		Nothing.
+	*/
+	void	ensureItemIsVisible(size_t item_index);
+
+
+	/*!
+	\brief
+		Ensure the item at the specified index is visible within the list box.
+
+	\param item
+		Pointer to the ListboxItem to be made visible in the list box.
+
+	\return
+		Nothing.
+
+	\exception	InvalidRequestException	thrown if \a item is not attached to this list box.
+	*/
+	void	ensureItemIsVisible(const ListboxItem* item);
+
+
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for Listbox base class.
+	*/
+	Listbox(const String& type, const String& name);
+
+
+	/*!
+	\brief
+		Destructor for Listbox base class.
+	*/
+	virtual ~Listbox(void);
+
+
+protected:
+	/*************************************************************************
+		Abstract Implementation Functions (must be provided by derived class)
+	*************************************************************************/
+	/*!
+	\brief
+		Return a Rect object describing, in un-clipped pixels, the window relative area
+		that is to be used for rendering list items.
+
+	\return
+		Rect object describing the area of the Window to be used for rendering
+		list box items.
+	*/
+	virtual	Rect	getListRenderArea(void) const		= 0;
+
+
+	/*!
+	\brief
+		create and return a pointer to a Scrollbar widget for use as vertical scroll bar
+
+	\return
+		Pointer to a Scrollbar to be used for scrolling the list vertically.
+	*/
+	virtual Scrollbar*	createVertScrollbar(void) const		= 0;
+ 
+
+	/*!
+	\brief
+		create and return a pointer to a Scrollbar widget for use as horizontal scroll bar
+
+	\return
+		Pointer to a Scrollbar to be used for scrolling the list horizontally.
+	*/
+	virtual Scrollbar*	createHorzScrollbar(void) const		= 0;
+
+
+	/*!
+	\brief
+		Setup size and position for the component widgets attached to this Listbox
+
+	\return
+		Nothing.
+	*/
+	virtual void	layoutComponentWidgets()	= 0;
+
+
+	/*!
+	\brief
+		Perform rendering of the widget control frame and other 'static' areas.  This
+		method should not render the actual items.  Note that the items are typically
+		rendered to layer 3, other layers can be used for rendering imagery behind and
+		infront of the items.
+
+	\param z
+		Z co-ordinate for layer 0.
+
+	\return
+		Nothing.
+	*/
+	virtual	void	renderListboxBaseImagery(float z)		= 0;
+
+
+	/*************************************************************************
+		Implementation Functions
+	*************************************************************************/
+	/*!
+	\brief
+		Add list box specific events
+	*/
+	void	addListboxEvents(void);
+
+
+	/*!
+	\brief
+		Perform the actual rendering for this Window.
+
+	\param z
+		float value specifying the base Z co-ordinate that should be used when rendering
+
+	\return
+		Nothing
+	*/
+	virtual	void	drawSelf(float z);
+
+
+	/*!
+	\brief
+		display required integrated scroll bars according to current state of the list box and update their values.
+	*/
+	void	configureScrollbars(void);
+
+	/*!
+	\brief
+		select all strings between positions \a start and \a end.  (inclusive)
+		including \a end.
+	*/
+	void	selectRange(size_t start, size_t end);
+
+
+	/*!
+	\brief
+		Return the sum of all item heights
+	*/
+	float	getTotalItemsHeight(void) const;
+
+
+	/*!
+	\brief
+		Return the width of the widest item
+	*/
+	float	getWidestItemWidth(void) const;
+
+
+	/*!
+	\brief
+		Clear the selected state for all items (implementation)
+
+	\return
+		true if some selections were cleared, false nothing was changed.
+	*/
+	bool	clearAllSelections_impl(void);
+
+
+	/*!
+	\brief
+		Return the ListboxItem under the given window local pixel co-ordinate.
+
+	\return
+		ListboxItem that is under window pixel co-ordinate \a pt, or NULL if no
+		item is under that position.
+	*/
+	ListboxItem*	getItemAtPoint(const Point& pt) const;
+
+
+	/*!
+	\brief
+		Remove all items from the list.
+
+	\note
+		Note that this will cause 'AutoDelete' items to be deleted.
+
+	\return
+		- true if the list contents were changed.
+		- false if the list contents were not changed (list already empty).
+	*/
+	bool	resetList_impl(void);
+
+
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	virtual bool	testClassName_impl(const String& class_name) const
+	{
+		if (class_name==(const utf8*)"Listbox")	return true;
+		return Window::testClassName_impl(class_name);
+	}
+
+
+	/*************************************************************************
+		New event handlers
+	*************************************************************************/
+	/*!
+	\brief
+		Handler called internally when the list contents are changed
+	*/
+	virtual	void	onListContentsChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called internally when the currently selected item or items changes.
+	*/
+	virtual	void	onSelectionChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called internally when the sort mode setting changes.
+	*/
+	virtual	void	onSortModeChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called internally when the multi-select mode setting changes.
+	*/
+	virtual	void	onMultiselectModeChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called internally when the forced display of the vertical scroll bar setting changes.
+	*/
+	virtual	void	onVertScrollbarModeChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called internally when the forced display of the horizontal scroll bar setting changes.
+	*/
+	virtual	void	onHorzScrollbarModeChanged(WindowEventArgs& e);
+
+
+	/*************************************************************************
+		Overridden Event handlers
+	*************************************************************************/
+	virtual void	onSized(WindowEventArgs& e);
+	virtual void	onMouseButtonDown(MouseEventArgs& e);
+	virtual	void	onMouseWheel(MouseEventArgs& e);
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	typedef	std::vector<ListboxItem*>	LBItemList;
+	bool	d_sorted;				//!< true if list is sorted
+	bool	d_multiselect;			//!< true if multi-select is enabled
+	bool	d_forceVertScroll;		//!< true if vertical scrollbar should always be displayed
+	bool	d_forceHorzScroll;		//!< true if horizontal scrollbar should always be displayed
+	Scrollbar*	d_vertScrollbar;	//!< vertical scroll-bar widget
+	Scrollbar*	d_horzScrollbar;	//!< horizontal scroll-bar widget
+	LBItemList	d_listItems;		//!< list of items in the list box.
+	ListboxItem*	d_lastSelected;	//!< holds pointer to the last selected item (used in range selections)
+
+
+private:
+	/*************************************************************************
+		Static Properties for this class
+	*************************************************************************/
+	static ListboxProperties::Sort					d_sortProperty;
+	static ListboxProperties::MultiSelect			d_multiSelectProperty;
+	static ListboxProperties::ForceVertScrollbar	d_forceVertProperty;
+	static ListboxProperties::ForceHorzScrollbar	d_forceHorzProperty;
+
+	/*************************************************************************
+		Private methods
+	*************************************************************************/
+	void	addListboxProperties(void);
+};
+
+
+/*!
+\brief
+	Helper function used in sorting to compare two list box item text strings
+	via the ListboxItem pointers and return if \a a is less than \a b.
+*/
+bool lbi_less(const ListboxItem* a, const ListboxItem* b);
+
+
+/*!
+\brief
+	Helper function used in sorting to compare two list box item text strings
+	via the ListboxItem pointers and return if \a a is greater than \a b.
+*/
+bool lbi_greater(const ListboxItem* a, const ListboxItem* b);
+
+} // End of  CEGUI namespace section
+
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUIListbox_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIListHeader.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIListHeader.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIListHeader.h	(revision 1092)
@@ -0,0 +1,851 @@
+/************************************************************************
+	filename: 	CEGUIListHeader.h
+	created:	13/4/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to base class for ListHeader widget
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIListHeader_h_
+#define _CEGUIListHeader_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIWindow.h"
+#include "elements/CEGUIListHeaderSegment.h"
+#include "elements/CEGUIListHeaderProperties.h"
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	EventArgs class used for segment move (sequence changed) events.
+*/
+class CEGUIEXPORT HeaderSequenceEventArgs : public WindowEventArgs
+{
+public:
+	HeaderSequenceEventArgs(Window* wnd, uint old_idx, uint new_idx) : WindowEventArgs(wnd), d_oldIdx(old_idx), d_newIdx(new_idx) {};
+
+	uint d_oldIdx;		//!< The original column index of the segment that has moved.
+	uint d_newIdx;		//!< The new column index of the segment that has moved.
+};
+
+
+/*!
+\brief
+	Base class for the multi column list header widget.
+*/
+class CEGUIEXPORT ListHeader : public Window
+{
+public:
+	static const String EventNamespace;				//!< Namespace for global events
+
+
+	/*************************************************************************
+		Constants
+	*************************************************************************/
+	// Event names
+	static const String EventSortColumnChanged;			//!< Event fired when the current sort column changes.
+	static const String EventSortDirectionChanged;		//!< Event fired when the sort direction changes.
+	static const String EventSegmentSized;				//!< Event fired when a segment has been sized by the user (e.window is the segment).
+	static const String EventSegmentClicked;				//!< Event fired when a segment has been clicked by the user (e.window is the segment).
+	static const String EventSplitterDoubleClicked;		//!< Event fired when a segment splitter has been double-clicked.  (e.window is the segment).
+	static const String EventSegmentSequenceChanged;		//!< Event fired when the order of the segments has changed.  ('e' is a HeaderSequenceEventArgs&)
+	static const String EventSegmentAdded;				//!< Event fired when a segment is added to the header.
+	static const String EventSegmentRemoved;				//!< Event fired when a segment is removed from the header.
+	static const String EventSortSettingChanged;			//!< Event fired when setting that controls user modification to sort configuration changes.
+	static const String EventDragMoveSettingChanged;		//!< Event fired when setting that controls user drag & drop of segments changes.
+	static const String EventDragSizeSettingChanged;		//!< Event fired when setting that controls user sizing of segments changes.
+	static const String EventSegmentRenderOffsetChanged;	//!< Event fired when the rendering offset for the segments changes.
+
+	// values
+	static const float	ScrollSpeed;				//!< Speed to scroll at when dragging outside header.
+	static const float	MinimumSegmentPixelWidth;	//!< Miniumum width of a segment in pixels.
+
+
+	/*************************************************************************
+		Accessor Methods
+	*************************************************************************/
+	/*!
+	\brief
+		Return the number of columns or segments attached to the header.
+
+	\return
+		uint value equal to the number of columns / segments currently in the header.
+	*/
+	uint	getColumnCount(void) const;
+
+	
+	/*!
+	\brief
+		Return the ListHeaderSegment object for the specified column
+
+	\param column
+		zero based column index of the ListHeaderSegment to be returned.
+
+	\return
+		ListHeaderSegment object at the requested index.
+
+	\exception InvalidRequestException	thrown if column is out of range.
+	*/
+	ListHeaderSegment&	getSegmentFromColumn(uint column) const;
+
+
+	/*!
+	\brief
+		Return the ListHeaderSegment object with the specified ID.
+
+	\param id
+		id code of the ListHeaderSegment to be returned.
+
+	\return
+		ListHeaderSegment object with the ID \a id.  If more than one segment has the same ID, only the first one will
+		ever be returned.
+
+	\exception	InvalidRequestException		thrown if no segment with the requested ID is attached.
+	*/
+	ListHeaderSegment&	getSegmentFromID(uint id) const;
+
+
+	/*!
+	\brief
+		Return the ListHeaderSegment that is marked as being the 'sort key' segment.  There must be at least one segment
+		to successfully call this method.
+
+	\return
+		ListHeaderSegment object which is the sort-key segment.
+
+	\exception	InvalidRequestException		thrown if no segments are attached to the ListHeader.
+	*/
+	ListHeaderSegment&	getSortSegment(void) const;
+
+
+	/*!
+	\brief
+		Return the zero based column index of the specified segment.
+
+	\param segment
+		ListHeaderSegment whos zero based index is to be returned.
+
+	\return
+		Zero based column index of the ListHeaderSegment \a segment.
+
+	\exception	InvalidRequestException		thrown if \a segment is not attached to this ListHeader.
+	*/
+	uint	getColumnFromSegment(const ListHeaderSegment& segment) const;
+
+
+	/*!
+	\brief
+		Return the zero based column index of the segment with the specified ID.
+
+	\param id
+		ID code of the segment whos column index is to be returned.
+
+	\return
+		Zero based column index of the first ListHeaderSegment whos ID matches \a id.
+
+	\exception	InvalidRequestException		thrown if no attached segment has the requested ID.
+	*/
+	uint	getColumnFromID(uint id) const;
+
+
+	/*!
+	\brief
+		Return the zero based index of the current sort column.  There must be at least one segment/column to successfully call this
+		method.
+
+	\return
+		Zero based column index that is the current sort column.
+
+	\exception	InvalidRequestException		thrown if there are no segments / columns in this ListHeader.
+	*/
+	uint	getSortColumn(void) const;
+
+
+	/*!
+	\brief
+		Return the zero based column index of the segment with the specified text.
+
+	\param text
+		String object containing the text to be searched for.
+
+	\return
+		Zero based column index of the segment with the specified text.
+
+	\exception InvalidRequestException	thrown if no attached segments have the requested text.
+	*/
+	uint	getColumnWithText(const String& text) const;
+
+
+	/*!
+	\brief
+		Return the pixel offset to the given ListHeaderSegment.
+
+	\param segment
+		ListHeaderSegment object that the offset to is to be returned.
+
+	\return
+		The number of pixels up-to the begining of the ListHeaderSegment described by \a segment.
+
+	\exception InvalidRequestException	thrown if \a segment is not attached to the ListHeader.
+	*/
+	float	getPixelOffsetToSegment(const ListHeaderSegment& segment) const;
+
+
+	/*!
+	\brief
+		Return the pixel offset to the ListHeaderSegment at the given zero based column index.
+
+	\param column
+		Zero based column index of the ListHeaderSegment whos pixel offset it to be returned.
+
+	\return
+		The number of pixels up-to the begining of the ListHeaderSegment located at zero based column
+		index \a column.
+
+	\exception InvalidRequestException	thrown if \a column is out of range.
+	*/
+	float	getPixelOffsetToColumn(uint column) const;
+
+
+	/*!
+	\brief
+		Return the total pixel width of all attached segments.
+
+	\return
+		Sum of the pixel widths of all attached ListHeaderSegment objects.
+	*/
+	float	getTotalSegmentsPixelExtent(void) const;
+
+
+	/*!
+	\brief
+		Return the pixel width of the specified column.
+
+	\param column
+		Zero based column index of the segment whos pixel width is to be returned.
+
+	\return
+		Pixel width of the ListHeaderSegment at the zero based column index specified by \a column.
+
+	\exception InvalidRequestException	thrown if \a column is out of range.
+	*/
+	float	getColumnPixelWidth(uint column) const;
+
+
+	/*!
+	\brief
+		Return the currently set sort direction.
+
+	\return
+		One of the ListHeaderSegment::SortDirection enumerated values specifying the current sort direction.
+	*/
+	ListHeaderSegment::SortDirection	getSortDirection(void) const;
+
+
+	/*!
+	\brief
+		Return whether user manipulation of the sort column & direction are enabled.
+
+	\return
+		true if the user may interactively modify the sort column and direction.  false if the user may not
+		modify the sort column and direction (these can still be set programmatically).
+	*/
+	bool	isSortingEnabled(void) const;
+
+
+	/*!
+	\brief
+		Return whether the user may size column segments.
+
+	\return
+		true if the user may interactively modify the width of column segments, false if they may not.
+	*/
+	bool	isColumnSizingEnabled(void) const;
+
+
+	/*!
+	\brief
+		Return whether the user may modify the order of the segments.
+
+	\return
+		true if the user may interactively modify the order of the column segments, false if they may not.
+	*/
+	bool	isColumnDraggingEnabled(void) const;
+
+
+	/*!
+	\brief
+		Return the current segment offset value.  This value is used to implement scrolling of the header segments within
+		the ListHeader area.
+
+	\return
+		float value specifying the current segment offset value in whatever metrics system is active for the ListHeader.
+	*/
+	float	getSegmentOffset(void) const	{return d_segmentOffset;}
+
+
+	/*************************************************************************
+		Manipulator Methods
+	*************************************************************************/
+	/*!
+	\brief
+		Set whether user manipulation of the sort column and direction is enabled.
+
+	\param setting
+		- true to allow interactive user manipulation of the sort column and direction.
+		- false to disallow interactive user manipulation of the sort column and direction.
+
+	\return
+		Nothing.
+	*/
+	void	setSortingEnabled(bool setting);
+
+
+	/*!
+	\brief
+		Set the current sort direction.
+
+	\param direction
+		One of the ListHeaderSegment::SortDirection enumerated values indicating the sort direction to be used.
+
+	\return
+		Nothing.
+	*/
+	void	setSortDirection(ListHeaderSegment::SortDirection direction);
+
+
+	/*!
+	\brief
+		Set the column segment to be used as the sort column.
+
+	\param segment
+		ListHeaderSegment object indicating the column to be sorted.
+
+	\return
+		Nothing.
+
+	\exception InvalidRequestException	thrown if \a segment is not attached to this ListHeader.
+	*/
+	void	setSortSegment(const ListHeaderSegment& segment);
+
+
+	/*!
+	\brief
+		Set the column to be used as the sort column.
+
+	\param column
+		Zero based column index indicating the column to be sorted.
+
+	\return
+		Nothing.
+
+	\exception InvalidRequestException	thrown if \a column is out of range for this ListHeader.
+	*/
+	void	setSortColumn(uint column);
+
+
+	/*!
+	\brief
+		Set the column to to be used for sorting via its ID code.
+
+	\param id
+		ID code of the column segment that is to be used as the sort column.
+
+	\return
+		Nothing.
+
+	\exception InvalidRequestException	thrown if no segment with ID \a id is attached to the ListHeader.
+	*/
+	void	setSortColumnFromID(uint id);
+
+
+	/*!
+	\brief
+		Set whether columns may be sized by the user.
+
+	\param setting
+		- true to indicate that the user may interactively size segments.
+		- false to indicate that the user may not interactively size segments.
+
+	\return
+		Nothing.
+	*/
+	void	setColumnSizingEnabled(bool setting);
+
+
+	/*!
+	\brief
+		Set whether columns may be reordered by the user via drag and drop.
+
+	\param setting
+		- true to indicate the user may change the order of the column segments via drag and drop.
+		- false to indicate the user may not change the column segment order.
+
+	\return
+		Nothing.
+	*/
+	void	setColumnDraggingEnabled(bool setting);
+
+
+	/*!
+	\brief
+		Add a new column segment to the end of the header.
+
+	\param text
+		String object holding the initial text for the new segment
+
+	\param id
+		Client specified ID code to be assigned to the new segment.
+
+	\param width
+		Initial width of the new segment using the relative metrics system
+
+	\return
+		Nothing.
+	*/
+	void	addColumn(const String& text, uint id, float width);
+
+
+	/*!
+	\brief
+		Insert a new column segment at the specified position.
+
+	\param text
+		String object holding the initial text for the new segment
+
+	\param id
+		Client specified ID code to be assigned to the new segment.
+
+	\param width
+		Initial width of the new segment using the relative metrics system
+
+	\param position
+		Zero based column index indicating the desired position for the new column.  If this is greater than
+		the current number of columns, the new segment is added to the end if the header.
+
+	\return
+		Nothing.
+	*/
+	void	insertColumn(const String& text, uint id, float width, uint position);
+
+
+	/*!
+	\brief
+		Insert a new column segment at the specified position.
+
+	\param text
+		String object holding the initial text for the new segment
+
+	\param id
+		Client specified ID code to be assigned to the new segment.
+
+	\param width
+		Initial width of the new segment using the relative metrics system
+
+	\param position
+		ListHeaderSegment object indicating the insert position for the new segment.  The new segment will be
+		inserted before the segment indicated by \a position.
+
+	\return
+		Nothing.
+
+	\exception InvalidRequestException	thrown if ListHeaderSegment \a position is not attached to the ListHeader.
+	*/
+	void	insertColumn(const String& text, uint id, float width, const ListHeaderSegment& position);
+
+
+	/*!
+	\brief
+		Removes a column segment from the ListHeader.
+
+	\param column
+		Zero based column index indicating the segment to be removed.
+
+	\return
+		Nothing.
+
+	\exception InvalidRequestException	thrown if \a column is out of range.
+	*/
+	void	removeColumn(uint column);
+
+
+	/*!
+	\brief
+		Remove the specified segment from the ListHeader.
+
+	\param segment
+		ListHeaderSegment object that is to be removed from the ListHeader.
+
+	\return
+		Nothing.
+
+	\exception InvalidRequestException	thrown if \a segment is not attached to this ListHeader.
+	*/
+	void	removeSegment(const ListHeaderSegment& segment);
+
+
+	/*!
+	\brief
+		Moves a column segment into a new position.
+
+	\param column
+		Zero based column index indicating the column segment to be moved.
+
+	\param position
+		Zero based column index indicating the new position for the segment.  If this is greater than the current number of segments,
+		the segment is moved to the end of the header.
+
+	\return
+		Nothing.
+
+	\exception InvalidRequestException thrown if \a column is out of range for this ListHeader.
+	*/
+	void	moveColumn(uint column, uint position);
+
+
+	/*!
+	\brief
+		Move a column segment to a new position.
+
+	\param column
+		Zero based column index indicating the column segment to be moved.
+
+	\param position
+		ListHeaderSegment object indicating the new position for the segment.  The segment at \a column
+		will be moved behind segment \a position (that is, segment \a column will appear to the right of
+		segment \a position).
+
+	\return
+		Nothing.
+
+	\exception InvalidRequestException thrown if \a column is out of range for this ListHeader, or if \a position
+		is not attached to this ListHeader.
+	*/
+	void	moveColumn(uint column, const ListHeaderSegment& position);
+
+
+	/*!
+	\brief
+		Moves a segment into a new position.
+
+	\param segment
+		ListHeaderSegment object that is to be moved.
+
+	\param position
+		Zero based column index indicating the new position for the segment.  If this is greater than the current number of segments,
+		the segment is moved to the end of the header.
+
+	\return
+		Nothing.
+
+	\exception InvalidRequestException thrown if \a segment is not attached to this ListHeader.
+	*/
+	void	moveSegment(const ListHeaderSegment& segment, uint position);
+
+
+	/*!
+	\brief
+		Move a segment to a new position.
+
+	\param segment
+		ListHeaderSegment object that is to be moved.
+
+	\param position
+		ListHeaderSegment object indicating the new position for the segment.  The segment \a segment
+		will be moved behind segment \a position (that is, segment \a segment will appear to the right of
+		segment \a position).
+
+	\return
+		Nothing.
+
+	\exception InvalidRequestException thrown if either \a segment or \a position are not attached to this ListHeader.
+	*/
+	void	moveSegment(const ListHeaderSegment& segment, const ListHeaderSegment& position);
+
+
+	/*!
+	\brief
+		Set the current base segment offset.  (This implements scrolling of the header segments within
+		the header area).
+
+	\param offset
+		New base offset for the first segment.  The segments will of offset to the left by the amount specified.
+		\a offset should be specified using the active metrics system for the ListHeader.
+
+	\return
+		Nothing.
+	*/
+	void	setSegmentOffset(float offset);
+
+
+	/*!
+	\brief
+		Set the pixel width of the specified column.
+
+	\param column
+		Zero based column index of the segment whos pixel width is to be set.
+
+	\param width
+		float value specifying the new pixel width to set for the ListHeaderSegment at the zero based column
+		index specified by \a column.
+
+	\return
+		Nothing
+
+	\exception InvalidRequestException	thrown if \a column is out of range.
+	*/
+	void	setColumnPixelWidth(uint column, float width);
+
+
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for the list header base class.
+	*/
+	ListHeader(const String& type, const String& name);
+
+
+	/*!
+	\brief
+		Destructor for the list header base class.
+	*/
+	virtual ~ListHeader(void);
+
+
+protected:
+	/*************************************************************************
+		Abstract Implementation Methods
+	*************************************************************************/
+	/*!
+	\brief
+		Create and return a pointer to a new ListHeaderSegment based object.
+
+	\param name
+		String object holding the name that should be given to the new Window.
+
+	\return
+		Pointer to an ListHeaderSegment based object of whatever type is appropriate for
+		this ListHeader.
+	*/
+	virtual ListHeaderSegment*	createNewSegment(const String& name) const	= 0;
+
+
+	/*!
+	\brief
+		Cleanup and destroy the given ListHeaderSegment that was created via the
+		createNewSegment method.
+
+	\param segment
+		Pointer to a ListHeaderSegment based object to be destroyed.
+
+	\return
+		Nothing.
+	*/
+	virtual void	destroyListSegment(ListHeaderSegment* segment) const = 0;
+
+
+	/*************************************************************************
+		Implementation Methods
+	*************************************************************************/
+	/*!
+	\brief
+		Create initialise and return a ListHeaderSegment object, with all events subscribed and ready to use.
+	*/
+	ListHeaderSegment*	createInitialisedSegment(const String& text, uint id, float width);
+
+
+	/*!
+	\brief
+		Layout the attached segments
+	*/
+	void	layoutSegments(void);
+
+
+	/*!
+	\brief
+		Add ListHeader specific events
+	*/
+	void	addListHeaderEvents(void);
+
+
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	virtual bool	testClassName_impl(const String& class_name) const
+	{
+		if (class_name==(const utf8*)"ListHeader")	return true;
+		return Window::testClassName_impl(class_name);
+	}
+
+
+	/*************************************************************************
+		New List header event handlers
+	*************************************************************************/
+	/*!
+	\brief
+		Handler called when the sort column is changed.
+	*/
+	virtual	void	onSortColumnChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the sort direction is changed.
+	*/
+	virtual	void	onSortDirectionChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when a segment is sized by the user.  e.window points to the segment.
+	*/
+	virtual	void	onSegmentSized(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when a segment is clicked by the user.  e.window points to the segment.
+	*/
+	virtual	void	onSegmentClicked(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when a segment splitter / sizer is double-clicked.  e.window points to the segment.
+	*/
+	virtual	void	onSplitterDoubleClicked(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the segment / column order changes.
+	*/
+	virtual	void	onSegmentSequenceChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when a new segment is added to the header.
+	*/
+	virtual	void	onSegmentAdded(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when a segment is removed from the header.
+	*/
+	virtual	void	onSegmentRemoved(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called then setting that controls the users ability to modify the search column & direction changes.
+	*/
+	virtual	void	onSortSettingChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the setting that controls the users ability to drag and drop segments changes.
+	*/
+	virtual	void	onDragMoveSettingChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the setting that controls the users ability to size segments changes.
+	*/
+	virtual	void	onDragSizeSettingChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the base rendering offset for the segments (scroll position) changes.
+	*/
+	virtual	void	onSegmentOffsetChanged(WindowEventArgs& e);
+
+
+	/*************************************************************************
+		handlers for events we subscribe to from segments
+	*************************************************************************/
+	bool	segmentSizedHandler(const EventArgs& e);
+	bool	segmentMovedHandler(const EventArgs& e);
+	bool	segmentClickedHandler(const EventArgs& e);
+	bool	segmentDoubleClickHandler(const EventArgs& e);
+	bool	segmentDragHandler(const EventArgs& e);
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	typedef	std::vector<ListHeaderSegment*>		SegmentList;
+	SegmentList	d_segments;			//!< Attached segment windows in header order.
+	ListHeaderSegment*	d_sortSegment;	//!< Pointer to the segment that is currently set as the sork-key,
+	bool	d_sizingEnabled;		//!< true if segments can be sized by the user.
+	bool	d_sortingEnabled;		//!< true if the sort criteria modifications by user are enabled (no sorting is actuall done)
+	bool	d_movingEnabled;		//!< true if drag & drop moving of columns / segments is enabled.
+	uint	d_uniqueIDNumber;		//!< field used to create unique names.
+	float	d_segmentOffset;		//!< Base offset used to layout the segments (allows scrolling within the window area)
+	ListHeaderSegment::SortDirection	d_sortDir;		//!< Brief copy of the current sort direction.
+
+
+private:
+	/*************************************************************************
+		Static Properties for this class
+	*************************************************************************/
+	static ListHeaderProperties::SortSettingEnabled		d_sortSettingProperty;
+	static ListHeaderProperties::ColumnsSizable			d_sizableProperty;
+	static ListHeaderProperties::ColumnsMovable			d_movableProperty;
+	static ListHeaderProperties::SortColumnID			d_sortColumnIDProperty;
+	static ListHeaderProperties::SortDirection			d_sortDirectionProperty;
+
+
+	/*************************************************************************
+		Private methods
+	*************************************************************************/
+	void	addHeaderProperties(void);
+};
+
+} // End of  CEGUI namespace section
+
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUIListHeader_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIComboboxProperties.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIComboboxProperties.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIComboboxProperties.h	(revision 1092)
@@ -0,0 +1,403 @@
+/************************************************************************
+	filename: 	CEGUIComboboxProperties.h
+	created:	11/7/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to Combobox property classes
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIComboboxProperties_h_
+#define _CEGUIComboboxProperties_h_
+
+#include "CEGUIProperty.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+// Start of ComboboxProperties namespace section
+/*!
+\brief
+	Namespace containing all classes that make up the properties interface for the Combobox class
+*/
+namespace ComboboxProperties
+{
+/*!
+\brief
+	Property to access the read-only setting of the edit box.
+
+	\par Usage:
+		- Name: ReadOnly
+		- Format: "[text]"
+
+	\par Where [Text] is:
+		- "True" to indicate the edit box is read-only.
+		- "False" to indicate the edit box is not read-only (text may be edited by user).
+*/
+class ReadOnly : public Property
+{
+public:
+	ReadOnly() : Property(
+		"ReadOnly",
+		"Property to get/set the read-only setting for the Editbox.  Value is either \"True\" or \"False\".",
+		"False")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the string used for regular expression validation of the edit box text.
+
+	\par Usage:
+		- Name: ValidationString
+		- Format: "[text]"
+
+	\par Where:
+		- [Text] is the string used for validating text entry.
+*/
+class ValidationString : public Property
+{
+public:
+	ValidationString() : Property(
+		"ValidationString",
+		"Property to get/set the validation string Editbox.  Value is a text string.",
+		".*")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the current carat index.
+
+	\par Usage:
+		- Name: CaratIndex
+		- Format: "[uint]"
+
+	\par Where:
+		- [uint] is the zero based index of the carat position within the text.
+*/
+class CaratIndex : public Property
+{
+public:
+	CaratIndex() : Property(
+		"CaratIndex",
+		"Property to get/set the current carat index.  Value is \"[uint]\".",
+		"0")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the current selection start index.
+
+	\par Usage:
+		- Name: EditSelectionStart
+		- Format: "[uint]"
+
+	\par Where:
+		- [uint] is the zero based index of the selection start position within the text.
+*/
+class EditSelectionStart : public Property
+{
+public:
+	EditSelectionStart() : Property(
+		"EditSelectionStart",
+		"Property to get/set the zero based index of the selection start position within the text.  Value is \"[uint]\".",
+		"0")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the current selection length.
+
+	\par Usage:
+		- Name: EditSelectionLength
+		- Format: "[uint]"
+
+	\par Where:
+		- [uint] is the length of the selection (as a count of the number of code points selected).
+*/
+class EditSelectionLength : public Property
+{
+public:
+	EditSelectionLength() : Property(
+		"EditSelectionLength",
+		"Property to get/set the length of the selection (as a count of the number of code points selected).  Value is \"[uint]\".",
+		"0")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the maximum text length for the edit box.
+
+	\par Usage:
+		- Name: MaxEditTextLength
+		- Format: "[uint]"
+
+	\par Where:
+		- [uint] is the maximum allowed text length (as a count of code points).
+*/
+class MaxEditTextLength : public Property
+{
+public:
+	MaxEditTextLength() : Property(
+		"MaxEditTextLength",
+		"Property to get/set the the maximum allowed text length (as a count of code points).  Value is \"[uint]\".",
+		"1073741824")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the normal, unselected, text colour used for rendering text.
+
+	\par Usage:
+		- Name: NormalEditTextColour
+		- Format: "aarrggbb".
+
+	\par Where:
+		- aarrggbb is the ARGB colour value to be used.
+*/
+class NormalEditTextColour : public Property
+{
+public:
+	NormalEditTextColour() : Property(
+		"NormalEditTextColour",
+		"Property to get/set the normal, unselected, text colour used for rendering text.  Value is \"aarrggbb\" (hex).",
+		"00FFFFFF")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the colour used for rendering text within the selection area.
+
+	\par Usage:
+		- Name: SelectedEditTextColour
+		- Format: "aarrggbb".
+
+	\par Where:
+		- aarrggbb is the ARGB colour value to be used.
+*/
+class SelectedEditTextColour : public Property
+{
+public:
+	SelectedEditTextColour() : Property(
+		"SelectedEditTextColour",
+		"Property to get/set the colour used for rendering text within the selection area.  Value is \"aarrggbb\" (hex).",
+		"00000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the colour used for rendering the selection highlight when the edit box is active.
+
+	\par Usage:
+		- Name: ActiveEditSelectionColour
+		- Format: "aarrggbb".
+
+	\par Where:
+		- aarrggbb is the ARGB colour value to be used.
+*/
+class ActiveEditSelectionColour : public Property
+{
+public:
+	ActiveEditSelectionColour() : Property(
+		"ActiveEditSelectionColour",
+		"Property to get/set the colour used for rendering the selection highlight when the edit box is active.  Value is \"aarrggbb\" (hex).",
+		"006060FF")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the colour used for rendering the selection highlight when the edit box is inactive.
+
+	\par Usage:
+		- Name: InactiveEditSelectionColour
+		- Format: "aarrggbb".
+
+	\par Where:
+		- aarrggbb is the ARGB colour value to be used.
+*/
+class InactiveEditSelectionColour : public Property
+{
+public:
+	InactiveEditSelectionColour() : Property(
+		"InactiveEditSelectionColour",
+		"Property to get/set the colour used for rendering the selection highlight when the edit box is inactive.  Value is \"aarrggbb\" (hex).",
+		"00808080")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the sort setting of the list box.
+
+	\par Usage:
+		- Name: SortList
+		- Format: "[text]"
+
+	\par Where [Text] is:
+		- "True" to indicate the list items should be sorted.
+		- "False" to indicate the list items should not be sorted.
+*/
+class SortList : public Property
+{
+public:
+	SortList() : Property(
+		"SortList",
+		"Property to get/set the sort setting of the list box.  Value is either \"True\" or \"False\".",
+		"False")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the 'always show' setting for the vertical scroll bar of the list box.
+
+	\par Usage:
+		- Name: ForceVertScrollbar
+		- Format: "[text]"
+
+	\par Where [Text] is:
+		- "True" to indicate that the vertical scroll bar will always be shown.
+		- "False" to indicate that the vertical scroll bar will only be shown when it is needed.
+*/
+class ForceVertScrollbar : public Property
+{
+public:
+	ForceVertScrollbar() : Property(
+		"ForceVertScrollbar",
+		"Property to get/set the 'always show' setting for the vertical scroll bar of the list box.  Value is either \"True\" or \"False\".",
+		"False")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the 'always show' setting for the horizontal scroll bar of the list box.
+
+	\par Usage:
+		- Name: ForceHorzScrollbar
+		- Format: "[text]"
+
+	\par Where [Text] is:
+		- "True" to indicate that the horizontal scroll bar will always be shown.
+		- "False" to indicate that the horizontal scroll bar will only be shown when it is needed.
+*/
+class ForceHorzScrollbar : public Property
+{
+public:
+	ForceHorzScrollbar() : Property(
+		"ForceHorzScrollbar",
+		"Property to get/set the 'always show' setting for the horizontal scroll bar of the list box.  Value is either \"True\" or \"False\".",
+		"False")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the 'single click mode' setting for the combo box.
+
+	\par Usage:
+		- Name: SingleClickMode
+		- Format: "[text]"
+
+	\par Where [Text] is:
+		- "True" to indicate that the box will operate in single click mode
+		- "False" to indicate that the box will not operate in single click mode
+*/
+class SingleClickMode : public Property
+{
+public:
+	SingleClickMode() : Property(
+		"SingleClickMode",
+		"Property to get/set the 'single click mode' setting for the combo box.  Value is either \"True\" or \"False\".",
+		"False")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+} // End of  ComboboxProperties namespace section
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIComboboxProperties_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIStatic.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIStatic.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIStatic.h	(revision 1092)
@@ -0,0 +1,463 @@
+/************************************************************************
+	filename: 	CEGUIStatic.h
+	created:	13/4/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to base class for Static widget
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIStatic_h_
+#define _CEGUIStatic_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIWindow.h"
+#include "CEGUIRenderableFrame.h"
+#include "elements/CEGUIStaticProperties.h"
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Base class for static widgets.
+*/
+class CEGUIEXPORT Static : public Window
+{
+public:
+	static const String EventNamespace;				//!< Namespace for global events
+
+
+	/*************************************************************************
+		Accessors
+	*************************************************************************/
+	/*!
+	\brief
+		Return whether the frame for this static widget is enabled or disabled.
+
+	\return
+		true if the frame is enabled and will be rendered.  false is the frame is disabled and will not be rendered.
+	*/
+	bool	isFrameEnabled(void) const		{return d_frameEnabled;}
+
+
+	/*!
+	\brief
+		Return whether the background for this static widget is enabled to disabled.
+
+	\return
+		true if the background is enabled and will be rendered.  false if the background is disabled and will not be rendered.
+	*/
+	bool	isBackgroundEnabled(void) const		{return d_backgroundEnabled;}
+
+
+	/*!
+	\brief
+		Return a ColourRect object containing the colours used when rendering this widget.
+
+	\return
+		ColourRect object initialised with the colours used when rendering the frame for this widget.
+	*/
+	ColourRect	getFrameColours(void) const		{return d_frameCols;}
+
+
+	/*!
+	\brief
+		Return a ColourRect object containing the colours used when rendering this widget.
+
+	\return
+		ColourRect object initialised with the colours used when rendering the background for this widget.
+	*/
+	ColourRect	getBackgroundColours(void) const		{return d_backgroundCols;}
+
+
+	// overridden so derived classes are auto-clipped to within the inner area of the frame when it's active.
+	virtual Rect	getUnclippedInnerRect(void) const;
+
+
+	/*!
+	\brief
+		Return the Image being used for the specified location of the frame.
+
+	\param location
+		One of the FrameLocation enumerated values specifying the image to be returned.
+
+	\return
+		Pointer to the Image object currently set for the frame location specified in \a location.  May return NULL if no
+		Image is set for the requested position.
+	*/
+	const Image*	getImageForFrameLocation(FrameLocation location) const;
+
+
+	/*!
+	\brief
+		Return the Image currently set as the background image for the widget.
+
+	\return
+		Pointer to the Image object currently set as the background for this StaticWidget.  May return NULL if
+		no Image is currently set.
+	*/
+	const Image* getBackgroundImage(void) const;
+
+
+	/*************************************************************************
+		Manipulators
+	*************************************************************************/
+	/*!
+	\brief
+		Enable or disable rendering of the frame for this static widget.
+
+		Frame imagery can be customised via the setFrameImages method.
+
+	\param setting
+		true to enable rendering of a frame.  false to disable rendering of a frame.
+	*/
+	void	setFrameEnabled(bool setting);
+
+
+	/*!
+	\brief
+		specify the Image objects to use for each part of the frame.  A NULL may be used to omit any part.
+
+	\param topleft
+		Pointer to an Image object to render as the top-left corner of the frame.  Specify NULL to omit this part of the frame.
+
+	\param topright
+		Pointer to an Image object to render as the top-right corner of the frame.  Specify NULL to omit this part of the frame.
+
+	\param bottomleft
+		Pointer to an Image object to render as the bottom-left corner of the frame.  Specify NULL to omit this part of the frame.
+
+	\param bottomright
+		Pointer to an Image object to render as the bottom-right corner of the frame.  Specify NULL to omit this part of the frame.
+
+	\param left
+		Pointer to an Image object to render as the left edge of the frame.  Specify NULL to omit this part of the frame.
+
+	\param top
+		Pointer to an Image object to render as the top edge of the frame.  Specify NULL to omit this part of the frame.
+
+	\param right
+		Pointer to an Image object to render as the right edge of the frame.  Specify NULL to omit this part of the frame.
+
+	\param bottom
+		Pointer to an Image object to render as the bottom edge of the frame.  Specify NULL to omit this part of the frame.
+
+	\return
+		Nothing
+	*/
+	void	setFrameImages(const Image* topleft, const Image* topright, const Image* bottomleft, const Image* bottomright, const Image* left, const Image* top, const Image* right, const Image* bottom);
+
+
+	/*!
+	\brief
+		Sets the colours to be applied when rendering the frame.
+
+	\param colours
+		ColourRect object describing the colours to be used.
+
+	\return 
+		Nothing.
+	*/
+	void	setFrameColours(const ColourRect& colours);
+
+
+	/*!
+	\brief
+		Sets the colours to be applied when rendering the frame.
+
+	\param top_left_colour
+		Colour to be applied to the top-left corner of each Image used in the frame.
+
+	\param top_right_colour
+		Colour to be applied to the top-right corner of each Image used in the frame.
+
+	\param bottom_left_colour
+		Colour to be applied to the bottom-left corner of each Image used in the frame.
+
+	\param bottom_right_colour
+		Colour to be applied to the bottom-right corner of each Image used in the frame.
+
+	\return 
+		Nothing.
+	*/
+	void	setFrameColours(const colour& top_left_colour, const colour& top_right_colour, const colour& bottom_left_colour, const colour& bottom_right_colour);
+
+
+	/*!
+	\brief
+		Sets the colour to be applied when rendering the frame.
+
+	\param col
+		colour value to be used when rendering.
+
+	\return
+		Nothing.
+	*/
+	void	setFrameColours(const colour& col)		{setFrameColours(col, col, col, col);}
+
+
+	/*!
+	\brief
+		Enable or disable rendering of the background for this static widget.
+
+	\param setting
+		true to enable rendering of the background.  false to disable rendering of the background.
+	*/
+	void	setBackgroundEnabled(bool setting);
+
+
+	/*!
+	\brief
+		Set the image to use as the background for the static widget.
+
+	\param image
+		Pointer to the Image object to be rendered.  Can be NULL to specify no image is to be rendered.
+	
+	\return
+		Nothing.
+	*/
+	void	setBackgroundImage(const Image* image);
+
+
+	/*!
+	\brief
+		Set the image to use as the background for the static widget.
+
+	\param imageset
+		String object specifying the name of the Imageset that holds the required image.
+
+	\param image
+		Name of the Image on the specified Imageset that is to be used.
+	
+	\return
+		Nothing.
+
+	\exception UnknownObjectException	thrown if Imageset \a imageset does not exist in the system or if \a imageset contains no Image named \a image.
+	*/
+	void	setBackgroundImage(const String& imageset, const String& image);
+
+
+	/*!
+	\brief
+		Sets the colours to be applied when rendering the background.
+
+	\param colours
+		ColourRect object describing the colours to be used.
+
+	\return 
+		Nothing.
+	*/
+	void	setBackgroundColours(const ColourRect& colours);
+
+
+	/*!
+	\brief
+		Sets the colours to be applied when rendering the background.
+
+	\param top_left_colour
+		Colour to be applied to the top-left corner of the background.
+
+	\param top_right_colour
+		Colour to be applied to the top-right corner of the background.
+
+	\param bottom_left_colour
+		Colour to be applied to the bottom-left corner of the background.
+
+	\param bottom_right_colour
+		Colour to be applied to the bottom-right corner of the background.
+
+	\return 
+		Nothing.
+	*/
+	void	setBackgroundColours(const colour& top_left_colour, const colour& top_right_colour, const colour& bottom_left_colour, const colour& bottom_right_colour);
+
+
+	/*!
+	\brief
+		Sets the colour to be applied when rendering the background.
+
+	\param col
+		colour value to be used when rendering.
+
+	\return
+		Nothing.
+	*/
+	void	setBackgroundColours(const colour& col)		{setBackgroundColours(col, col, col, col);}
+
+
+	/*!
+	\brief
+		Set the Image to use for the specified location of the frame.
+
+	\param location
+		One of the FrameLocation enumerated values specifying the image to be returned.
+
+	\param image
+		Pointer to the Image to use for the frame location specified in \a location.  May be NULL to indicate the
+		frame component is not required.
+
+	\return
+		Nothing.
+	*/
+	void	setImageForFrameLocation(FrameLocation location, const Image* image);
+
+
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for static widget base class
+	*/
+	Static(const String& type, const String& name);
+
+
+	/*!
+	\brief
+		Destructor for static widget base class.
+	*/
+	virtual ~Static(void);
+
+
+protected:
+	/*************************************************************************
+		Overridden from base class
+	*************************************************************************/
+	/*!
+	\brief
+		Perform the actual rendering for this Window.
+
+	\param z
+		float value specifying the base Z co-ordinate that should be used when rendering
+
+	\return
+		Nothing
+	*/
+	virtual	void	drawSelf(float z);
+
+
+	/*************************************************************************
+		Event handling
+	*************************************************************************/
+	virtual void	onSized(WindowEventArgs& e);
+	virtual void	onAlphaChanged(WindowEventArgs& e);
+
+
+	/*************************************************************************
+		Implementation methods
+	*************************************************************************/
+	/*!
+	\brief
+		update the internal RenderableFrame with currently set colours and
+		alpha settings.
+	*/
+	void	updateRenderableFrameColours(void);
+
+
+	/*!
+	\brief
+		return ARGB colour value \a col, with its alpha component modulated by the value specified in float \a alpha.
+	*/
+	colour	calculateModulatedAlphaColour(const colour& col, float alpha) const;
+
+
+	/*!
+	\brief
+		This is used internally to indicate that the frame for the static widget has been modified, and as such
+		derived classes may need to adjust their layouts or reconfigure their rendering somehow.
+	\note
+		This does not currently fire an external event.
+	*/
+	virtual void	onStaticFrameChanged(WindowEventArgs& e)	{}
+
+
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	virtual bool	testClassName_impl(const String& class_name) const
+	{
+		if (class_name==(const utf8*)"Static")	return true;
+		return Window::testClassName_impl(class_name);
+	}
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	bool				d_frameEnabled;		//!< True when the frame is enabled.
+	ColourRect			d_frameCols;		//!< Used to store frame colours.
+	RenderableFrame		d_frame;			//!< Frame object used for rendering a frame for the static element.
+	bool				d_backgroundEnabled;//!< true when the background is enabled.
+	ColourRect			d_backgroundCols;	//!< Colours to use when drawing background.
+	const Image*		d_background;		//!< Image to use for widget background.
+
+	// cache of frame edge sizes
+	float	d_left_width;			//!< Width of the left edge image for the current frame.
+	float	d_right_width;			//!< Width of the right edge image for the current frame.
+	float	d_top_height;			//!< Height of the top edge image for the current frame.
+	float	d_bottom_height;		//!< Height of the bottom edge image for the current frame.
+
+
+private:
+	/*************************************************************************
+		Static Properties for this class
+	*************************************************************************/
+	static StaticProperties::FrameEnabled				d_frameEnabledProperty;
+	static StaticProperties::BackgroundEnabled			d_backgroundEnabledProperty;
+	static StaticProperties::FrameColours				d_frameColoursProperty;
+	static StaticProperties::BackgroundColours			d_backgroundColoursProperty;
+	static StaticProperties::BackgroundImage			d_backgroundImageProperty;
+	static StaticProperties::TopLeftFrameImage			d_topLeftFrameProperty;
+	static StaticProperties::TopRightFrameImage			d_topRightFrameProperty;
+	static StaticProperties::BottomLeftFrameImage		d_bottomLeftFrameProperty;
+	static StaticProperties::BottomRightFrameImage		d_bottomRightFrameProperty;
+	static StaticProperties::LeftFrameImage				d_leftFrameProperty;
+	static StaticProperties::RightFrameImage			d_rightFrameProperty;
+	static StaticProperties::TopFrameImage				d_topFrameProperty;
+	static StaticProperties::BottomFrameImage			d_bottomFrameProperty;
+
+
+	/*************************************************************************
+		Private methods
+	*************************************************************************/
+	void	addStaticProperties(void);
+};
+
+
+} // End of  CEGUI namespace section
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUIStatic_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIMenubar.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIMenubar.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIMenubar.h	(revision 1092)
@@ -0,0 +1,119 @@
+/************************************************************************
+	filename: 	CEGUIMenubar.h
+	created:	27/3/2005
+	author:		Tomas Lindquist Olsen (based on code by Paul D Turner)
+	
+	purpose:	Interface to base class for Menubar widget
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIMenubar_h_
+#define _CEGUIMenubar_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIWindow.h"
+#include "elements/CEGUIMenuBase.h"
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+/*!
+\brief
+	Base class for menu bars.
+*/
+class CEGUIEXPORT Menubar : public MenuBase
+{
+public:
+	static const String EventNamespace;				//!< Namespace for global events
+
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for Menubar objects
+	*/
+	Menubar(const String& type, const String& name);
+
+
+	/*!
+	\brief
+		Destructor for Menubar objects
+	*/
+	virtual ~Menubar(void);
+
+
+protected:
+	/*************************************************************************
+		Implementation Functions
+	*************************************************************************/
+	/*!
+	\brief
+		Setup size and position for the item widgets attached to this Menubar
+
+	\return
+		Nothing.
+	*/
+	virtual void	layoutItemWidgets();
+
+
+	/*!
+	\brief
+		Resizes the menubar to exactly fit the content that is attached to it.
+
+	\return
+		Nothing.
+	*/
+	virtual Size getContentSize();
+
+
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	virtual bool	testClassName_impl(const String& class_name) const
+	{
+		if (class_name==(const utf8*)"Menubar")	return true;
+		return MenuBase::testClassName_impl(class_name);
+	}
+
+};
+
+} // End of  CEGUI namespace section
+
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUIMenubar_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIProgressBar.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIProgressBar.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIProgressBar.h	(revision 1092)
@@ -0,0 +1,222 @@
+/************************************************************************
+	filename: 	CEGUIProgressBar.h
+	created:	13/4/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to base class for ProgressBar widget
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIProgressBar_h_
+#define _CEGUIProgressBar_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIWindow.h"
+#include "elements/CEGUIProgressBarProperties.h"
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Base class for progress bars.
+*/
+class CEGUIEXPORT ProgressBar : public Window
+{
+public:
+	static const String EventNamespace;				//!< Namespace for global events
+
+
+	/*************************************************************************
+		Event name constants
+	*************************************************************************/
+	static const String EventProgressChanged;		//!< Event fired whenever the progress value changes.
+	static const String EventProgressDone;		//!< Event fired when the progress bar reaches 100%.	
+
+
+	/************************************************************************
+		Accessor Functions
+	************************************************************************/
+	/*!
+	\brief
+		return the current progress value
+	*/
+	float	getProgress(void) const		{return d_progress;}
+
+	/*!
+	\brief
+		return the current step size
+	*/
+	float	getStep(void) const			{return d_step;}
+
+
+	/*************************************************************************
+		Manipulator Functions
+	*************************************************************************/
+	/*!
+	\brief
+		set the current progress.
+
+	\param progress
+		The level of progress to set.  If this value is >1.0f (100%) progress will be limited to 1.0f.
+
+	\return
+		Nothing.
+	*/
+	void	setProgress(float progress);
+
+
+	/*!
+	\brief
+		set the size of the 'step' in percentage points (default is 0.01f or 1%).
+
+	\param step
+		Amount to increase the progress by each time the step method is called.
+
+	\return
+		Nothing.
+	*/
+	void	setStepSize(float step)		{d_step = step;}
+
+
+	/*!
+	\brief
+		cause the progress to step
+
+		The amount the progress bar will step can be changed by calling the setStepSize method.  The
+		default step size is 0.01f which is equal to 1%.
+	
+	\return
+		Nothing.
+	*/
+	void	step(void)			{setProgress(d_progress + d_step);}
+
+
+	/*!
+	\brief
+		Modify the progress level by a specified delta.
+
+	\param delta
+		amount to adjust the progress by.  Whatever this value is, the progress of the bar will be kept
+		within the range: 0.0f <= progress <= 1.0f.
+
+	\return
+		Nothing.
+	*/
+	void	adjustProgress(float delta)		{setProgress(d_progress + delta);}
+
+
+	/*************************************************************************
+		Construction / Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for ProgressBar class
+	*/
+	ProgressBar(const String& type, const String& name);
+
+
+	/*!
+	\brief
+		Destructor for ProgressBar
+	*/
+	virtual ~ProgressBar(void);
+
+
+protected:
+	/*************************************************************************
+		Implementation methods
+	*************************************************************************/
+	/*!
+	\brief
+		Add progress bar specific events to the window
+	*/
+	void	addProgressBarEvents(void);
+
+
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	virtual bool	testClassName_impl(const String& class_name) const
+	{
+		if (class_name==(const utf8*)"ProgressBar")	return true;
+		return Window::testClassName_impl(class_name);
+	}
+
+
+	/*************************************************************************
+		Event handlers for progress bar specific events
+	*************************************************************************/
+	/*!
+	\brief
+		event triggered when progress changes
+	*/
+	virtual	void	onProgressChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		event triggered when progress reaches 100%
+	*/
+	virtual void	onProgressDone(WindowEventArgs& e);
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	float	d_progress;		//!< current progress (from 0.0f to 1.0f)
+	float	d_step;			//!< amount to 'step' progress by on a call to step()
+
+
+private:
+	/*************************************************************************
+		Static Properties for this class
+	*************************************************************************/
+	static ProgressBarProperties::CurrentProgress	d_currentProgressProperty;
+	static ProgressBarProperties::StepSize			d_stepSizeProperty;
+
+
+	/*************************************************************************
+		Private methods
+	*************************************************************************/
+	void	addProgressBarProperties(void);
+};
+
+
+} // End of  CEGUI namespace section
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUIProgressBar_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUITooltip.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUITooltip.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUITooltip.h	(revision 1092)
@@ -0,0 +1,327 @@
+/************************************************************************
+    filename:   CEGUITooltip.h
+    created:    21/2/2005
+    author:     Paul D Turner
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+ 
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+ 
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+ 
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUITooltip_h_
+#define _CEGUITooltip_h_
+
+#include "CEGUIWindow.h"
+#include "elements/CEGUITooltipProperties.h"
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+    class CEGUIEXPORT Tooltip : public Window
+    {
+    public:
+        /*************************************************************************
+            Constants
+        *************************************************************************/
+        static const String EventNamespace;                 //!< Namespace for global events
+        static const String EventHoverTimeChanged;          //!< Event fired when the hover timeout gets changed.
+        static const String EventDisplayTimeChanged;        //!< Event fired when the display timeout gets changed.
+        static const String EventFadeTimeChanged;           //!< Event fired when the fade timeout gets changed.
+        static const String EventTooltipActive;             //!< Event fired when the tooltip is about to get activated.
+        static const String EventTooltipInactive;           //!< Event fired when the tooltip has been deactivated.
+
+        /************************************************************************
+            Object Construction and Destruction
+        ************************************************************************/
+        /*!
+        \brief
+            Constructor for the Tooltip base class constructor
+         */
+        Tooltip(const String& type, const String& name);
+
+        /*!
+        \brief
+            Destructor for the Tooltip base class.
+         */
+        ~Tooltip(void);
+
+        /************************************************************************
+            Public interface
+        ************************************************************************/
+        /*!
+        \brief
+            Sets the target window for the tooltip.  This used internally to manage tooltips, you
+            should not have to call this yourself.
+
+        \param wnd
+            Window object that the tooltip should be associated with (for now).
+
+        \return
+            Nothing.
+         */
+        void setTargetWindow(Window* wnd);
+
+        /*!
+        \brief
+            return the current target window for this Tooltip.
+
+        \return
+            Pointer to the target window for this Tooltip or 0 for none.
+        */
+        const Window* getTargetWindow();
+
+        /*!
+        \brief
+            Resets the timer on the tooltip when in the Active / Inactive states.  This is used internally
+            to control the tooltip, it is not normally necessary to call this method yourself.
+
+        \return
+            Nothing.
+         */
+        void resetTimer(void);
+
+        /*!
+        \brief
+            Return the number of seconds the mouse should hover stationary over the target window before
+            the tooltip gets activated.
+
+        \return
+            float value representing a number of seconds.
+         */
+        float getHoverTime(void) const;
+
+        /*!
+        \brief
+            Set the number of seconds the mouse should hover stationary over the target window before
+            the tooltip gets activated.
+
+        \param seconds
+            float value representing a number of seconds.
+
+        \return
+            Nothing.
+         */
+        void setDisplayTime(float seconds);
+
+        /*!
+        \brief
+            Return the number of seconds that should be taken to fade the tooltip into and out of
+            visibility.
+
+        \return
+            float value representing a number of seconds.
+         */
+        float getFadeTime(void) const;
+
+        /*!
+        \brief
+            Set the number of seconds that should be taken to fade the tooltip into and out of
+            visibility.
+
+        \param seconds
+            float value representing a number of seconds.
+
+        \return
+            Nothing.
+         */
+        void setHoverTime(float seconds);
+
+        /*!
+        \brief
+            Return the number of seconds the tooltip should be displayed for before it automatically
+            de-activates itself.  0 indicates that the tooltip never timesout and auto-deactivates.
+
+        \return
+            float value representing a number of seconds.
+         */
+        float getDisplayTime(void) const;
+
+        /*!
+        \brief
+            Set the number of seconds the tooltip should be displayed for before it automatically
+            de-activates itself.  use a value of 0 if you never want the tooltip to timeout.
+
+        \param seconds
+            float value representing a number of seconds.
+
+        \return
+            Nothing.
+         */
+        void setFadeTime(float seconds);
+
+        // 
+        /*!
+        \brief
+            Causes the tooltip to position itself appropriately.
+
+        \return
+            Nothing.
+        */
+        void positionSelf(void);
+
+    protected:
+        /*************************************************************************
+            Implementation Methods
+        *************************************************************************/
+        /*!
+        \brief
+            Add ScrollablePane specific events
+        */
+        void addTooltipEvents(void);
+
+        // methods to perform processing for each of the widget states
+        void doActiveState(float elapsed);
+        void doInactiveState(float elapsed);
+        void doFadeInState(float elapsed);
+        void doFadeOutState(float elapsed);
+
+        // methods to switch widget states
+        void switchToInactiveState(void);
+        void switchToActiveState(void);
+        void switchToFadeInState(void);
+        void switchToFadeOutState(void);
+
+
+		/*!
+		\brief
+			Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+		\param class_name
+			The class name that is to be checked.
+
+		\return
+			true if this window was inherited from \a class_name. false if not.
+		*/
+		virtual bool	testClassName_impl(const String& class_name) const
+		{
+			if (class_name==(const utf8*)"Tooltip")	return true;
+			return Window::testClassName_impl(class_name);
+		}
+
+        /*************************************************************************
+            Event triggers
+        *************************************************************************/
+        /*!
+        \brief
+            Event trigger method called when the hover timeout gets changed.
+
+        \param e
+            WindowEventArgs object.
+
+        \return
+            Nothing.
+        */
+        virtual void onHoverTimeChanged(WindowEventArgs& e);
+
+        /*!
+        \brief
+            Event trigger method called when the display timeout gets changed.
+
+        \param e
+            WindowEventArgs object.
+
+        \return
+            Nothing.
+        */
+        virtual void onDisplayTimeChanged(WindowEventArgs& e);
+
+        /*!
+        \brief
+            Event trigger method called when the fade timeout gets changed.
+
+        \param e
+            WindowEventArgs object.
+
+        \return
+            Nothing.
+        */
+        virtual void onFadeTimeChanged(WindowEventArgs& e);
+
+        /*!
+        \brief
+            Event trigger method called just before the tooltip becomes active.
+
+        \param e
+            WindowEventArgs object.
+
+        \return
+            Nothing.
+        */
+        virtual void onTooltipActive(WindowEventArgs& e);
+
+        /*!
+        \brief
+            Event trigger method called just after the tooltip is deactivated.
+
+        \param e
+            WindowEventArgs object.
+
+        \return
+            Nothing.
+        */
+        virtual void onTooltipInactive(WindowEventArgs& e);
+
+
+        /************************************************************************
+            Overridden from Window.
+        ************************************************************************/
+        void updateSelf(float elapsed);
+        void onMouseEnters(MouseEventArgs& e);
+        void onTextChanged(WindowEventArgs& e);
+
+        /************************************************************************
+            Enumerations
+        ************************************************************************/
+        /*!
+        \brief
+            states for tooltip
+         */
+        enum TipState
+        {
+            Inactive,   //!< Tooltip is currently inactive.
+            Active,     //!< Tooltip is currently displayed and active.
+            FadeIn,     //!< Tooltip is currently transitioning from Inactive to Active state.
+            FadeOut     //!< Tooltip is currently transitioning from Active to Inactive state.
+        };
+
+        /************************************************************************
+            Data fields
+        ************************************************************************/
+        TipState    d_state;        //!< Current tooltip state.
+        float       d_elapsed;      //!< Used to track state change timings
+        const Window* d_target;     //!< Current target Window for this Tooltip.
+        float       d_hoverTime;    //!< tool-tip hover time (seconds mouse must stay stationary before tip shows).
+        float       d_displayTime;  //!< tool-tip display time (seconds that tip is showsn for).
+        float       d_fadeTime;     //!< tool-tip fade time (seconds it takes for tip to fade in and/or out).
+
+    private:
+        /*************************************************************************
+            Static Properties for this class
+        *************************************************************************/
+        static TooltipProperties::HoverTime      d_hoverTimeProperty;
+        static TooltipProperties::DisplayTime    d_displayTimeProperty;
+        static TooltipProperties::FadeTime       d_fadeTimeProperty;
+
+        /*************************************************************************
+            Private methods
+        *************************************************************************/
+        void addTooltipProperties(void);
+    };
+
+} // End of  CEGUI namespace section
+
+
+#endif  // end of guard _CEGUITooltip_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIDragContainerProperties.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIDragContainerProperties.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIDragContainerProperties.h	(revision 1092)
@@ -0,0 +1,138 @@
+/************************************************************************
+	filename: 	CEGUIDragContainerProperties.h
+	created:	15/2/2005
+	author:		Paul D Turner
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIDragContainerProperties_h_
+#define _CEGUIDragContainerProperties_h_
+
+#include "CEGUIProperty.h"
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+// Start of DragContainerProperties namespace section
+namespace DragContainerProperties
+{
+    /*!
+    \brief
+	    Property to access the state of the dragging enabled setting.
+
+	    \par Usage:
+		    - Name: DraggingEnabled
+		    - Format: "[text]".
+
+	    \par Where [Text] is:
+		    - "True" to indicate that dragging is enabled.
+		    - "False" to indicate that dragging is disabled.
+    */
+    class DraggingEnabled : public Property
+    {
+    public:
+	    DraggingEnabled() : Property(
+		    "DraggingEnabled",
+		    "Property to get/set the state of the dragging enabled setting for the DragContainer.  Value is either \"True\" or \"False\".",
+		    "True")
+	    {}
+
+	    String	get(const PropertyReceiver* receiver) const;
+	    void	set(PropertyReceiver* receiver, const String& value);
+    };
+
+    /*!
+    \brief
+	    Property to access the dragging alpha value.
+
+	    \par Usage:
+		    - Name: DragAlpha
+		    - Format: "[float]".
+
+	    \par Where:
+		    - [float] represents the alpha value to set when dragging.
+    */
+    class DragAlpha : public Property
+    {
+    public:
+	    DragAlpha() : Property(
+		    "DragAlpha",
+		    "Property to get/set the dragging alpha value.  Value is a float.",
+		    "0.500000")
+	    {}
+
+	    String get(const PropertyReceiver* receiver) const;
+	    void set(PropertyReceiver* receiver, const String& value);
+    };
+
+    /*!
+    \brief
+	    Property to access the dragging threshold value.
+
+	    \par Usage:
+		    - Name: DragThreshold
+		    - Format: "[float]".
+
+	    \par Where:
+		    - [float] represents the movement threshold (in pixels) which must be exceeded to commence dragging.
+    */
+    class DragThreshold : public Property
+    {
+    public:
+	    DragThreshold() : Property(
+		    "DragThreshold",
+		    "Property to get/set the dragging threshold value.  Value is a float.",
+		    "8.000000")
+	    {}
+
+	    String get(const PropertyReceiver* receiver) const;
+	    void set(PropertyReceiver* receiver, const String& value);
+    };
+
+    /*!
+    \brief
+	    Property to access the dragging mouse cursor setting.
+
+	    This property offers access to the mouse cursor image used when dragging the DragContainer.
+
+	    \par Usage:
+		    - Name: DragCursorImage
+		    - Format: "set:[text] image:[text]".
+
+	    \par Where:
+		    - set:[text] is the name of the Imageset containing the image.  The Imageset name should not contain spaces.  The Imageset specified must already be loaded.
+		    - image:[text] is the name of the Image on the specified Imageset.  The Image name should not contain spaces.
+    */
+    class DragCursorImage : public Property
+    {
+    public:
+	    DragCursorImage() : Property(
+		    "DragCursorImage",
+		    "Property to get/set the mouse cursor image used when dragging.  Value should be \"set:<imageset name> image:<image name>\".",
+		    "")
+	    {}
+
+	    String	get(const PropertyReceiver* receiver) const;
+	    void	set(PropertyReceiver* receiver, const String& value);
+    };
+
+} // End of  DragContainerProperties namespace section
+} // End of  CEGUI namespace section
+
+#endif	// end of guard _CEGUIDragContainerProperties_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIEditbox.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIEditbox.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIEditbox.h	(revision 1092)
@@ -0,0 +1,715 @@
+/************************************************************************
+	filename: 	CEGUIEditbox.h
+	created:	13/4/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to base class for Editbox widget
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIEditbox_h_
+#define _CEGUIEditbox_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIWindow.h"
+#include "elements/CEGUIEditboxProperties.h"
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+// forward declare implementation data type
+struct RegexValidator;
+
+
+/*!
+\brief
+	Base class for an Editbox widget
+*/
+class CEGUIEXPORT Editbox : public Window
+{
+public:
+	static const String EventNamespace;				//!< Namespace for global events
+
+
+	/*************************************************************************
+		Constants
+	*************************************************************************/
+	// default colours
+	static const argb_t	DefaultNormalTextColour;			//!< Colour applied to normal unselected text.
+	static const argb_t	DefaultSelectedTextColour;			//!< Colour applied to selected text.
+	static const argb_t	DefaultNormalSelectionColour;		//!< Colour applied to normal selection brush.
+	static const argb_t	DefaultInactiveSelectionColour;		//!< Colour applied to selection brush when widget is inactive.
+
+
+	/*************************************************************************
+		Event name constants
+	*************************************************************************/
+	static const String EventReadOnlyModeChanged;			//!< The read-only mode for the edit box has been changed.
+	static const String EventMaskedRenderingModeChanged;	//!< The masked rendering mode (password mode) has been changed.
+	static const String EventMaskCodePointChanged;		//!< The code point (character) to use for masked text has been changed.
+	static const String EventValidationStringChanged;		//!< The validation string has been changed.
+	static const String EventMaximumTextLengthChanged;	//!< The maximum allowable string length has been changed.
+	static const String EventTextInvalidated;				//!< Some operation has made the current text invalid with regards to the validation string.
+	static const String EventInvalidEntryAttempted;		//!< The user attempted to modify the text in a way that would have made it invalid.
+	static const String EventCaratMoved;					//!< The text carat (insert point) has changed.
+	static const String EventTextSelectionChanged;		//!< The current text selection has changed.
+	static const String EventEditboxFull;					//!< The number of characters in the edit box has reached the current maximum.
+	static const String EventTextAccepted;				//!< The user has accepted the current text by pressing Return, Enter, or Tab.
+
+
+	/*************************************************************************
+		Accessor Functions
+	*************************************************************************/
+	/*!
+	\brief
+		return true if the Editbox has input focus.
+
+	\return
+		true if the Editbox has keyboard input focus, false if the Editbox does not have keyboard input focus.
+	*/
+	bool	hasInputFocus(void) const;
+
+
+	/*!
+	\brief
+		return true if the Editbox is read-only.
+
+	\return
+		true if the Editbox is read only and can't be edited by the user, false if the Editbox is not
+		read only and may be edited by the user.
+	*/
+	bool	isReadOnly(void) const		{return d_readOnly;}
+
+
+	/*!
+	\brief
+		return true if the text for the Editbox will be rendered masked.
+
+	\return
+		true if the Editbox text will be rendered masked using the currently set mask code point, false if the Editbox
+		text will be rendered as plain text.
+	*/
+	bool	isTextMasked(void) const	{return	d_maskText;}
+
+
+	/*!
+	\brief
+		return true if the Editbox text is valid given the currently set validation string.
+
+	\note
+		It is possible to programmatically set 'invalid' text for the Editbox by calling setText.  This has certain
+		implications since if invalid text is set, whatever the user types into the box will be rejected when the input
+		is validated.
+
+	\note
+		Validation is performed by means of a regular expression.  If the text matches the regex, the text is said to have passed
+		validation.  If the text does not match with the regex then the text fails validation.
+
+	\return
+		true if the current Editbox text passes validation, false if the text does not pass validation.
+	*/
+	bool	isTextValid(void) const;
+
+
+	/*!
+	\brief
+		return the currently set validation string
+
+	\note
+		Validation is performed by means of a regular expression.  If the text matches the regex, the text is said to have passed
+		validation.  If the text does not match with the regex then the text fails validation.
+
+	\return
+		String object containing the current validation regex data
+	*/
+	const String&	getValidationString(void) const		{return d_validationString;}
+
+
+	/*!
+	\brief
+		return the current position of the carat.
+
+	\return
+		Index of the insert carat relative to the start of the text.
+	*/
+	size_t	getCaratIndex(void) const		{return d_caratPos;}
+
+
+	/*!
+	\brief
+		return the current selection start point.
+
+	\return
+		Index of the selection start point relative to the start of the text.  If no selection is defined this function returns
+		the position of the carat.
+	*/
+	size_t	getSelectionStartIndex(void) const;
+
+
+	/*!
+	\brief
+		return the current selection end point.
+
+	\return
+		Index of the selection end point relative to the start of the text.  If no selection is defined this function returns
+		the position of the carat.
+	*/
+	size_t	getSelectionEndIndex(void) const;
+
+	
+	/*!
+	\brief
+		return the length of the current selection (in code points / characters).
+
+	\return
+		Number of code points (or characters) contained within the currently defined selection.
+	*/
+	size_t	getSelectionLength(void) const;
+
+
+	/*!
+	\brief
+		return the utf32 code point used when rendering masked text.
+
+	\return
+		utf32 code point value representing the Unicode code point that will be rendered instead of the Editbox text
+		when rendering in masked mode.
+	*/
+	utf32	getMaskCodePoint(void) const		{return d_maskCodePoint;}
+
+
+	/*!
+	\brief
+		return the maximum text length set for this Editbox.
+
+	\return
+		The maximum number of code points (characters) that can be entered into this Editbox.
+
+	\note
+		Depending on the validation string set, the actual length of text that can be entered may be less than the value
+		returned here (it will never be more).
+	*/
+	size_t	getMaxTextLength(void) const		{return d_maxTextLen;}
+
+
+	/*!
+	\brief
+		return the currently set colour to be used for rendering Editbox text in the
+		normal, unselected state.
+
+	\return
+		colour value describing the ARGB colour that is currently set.
+	*/
+	colour	getNormalTextColour(void) const				{return d_normalTextColour;}
+
+
+	/*!
+	\brief
+		return the currently set colour to be used for rendering the Editbox text when within the
+		selected region.
+
+	\return
+		colour value describing the ARGB colour that is currently set.
+	*/
+	colour	getSelectedTextColour(void) const			{return d_selectTextColour;}
+
+
+	/*!
+	\brief
+		return the currently set colour to be used for rendering the Editbox selection highlight
+		when the Editbox is active.
+
+	\return
+		colour value describing the ARGB colour that is currently set.
+	*/
+	colour	getNormalSelectBrushColour(void) const		{return d_selectBrushColour;}
+
+
+	/*!
+	\brief
+		return the currently set colour to be used for rendering the Editbox selection highlight
+		when the Editbox is inactive.
+
+	\return
+		colour value describing the ARGB colour that is currently set.
+	*/
+	colour	getInactiveSelectBrushColour(void) const	{return d_inactiveSelectBrushColour;}
+
+
+	/*************************************************************************
+		Manipulators
+	*************************************************************************/
+	/*!
+	\brief
+		Specify whether the Editbox is read-only.
+
+	\param setting
+		true if the Editbox is read only and can't be edited by the user, false if the Editbox is not
+		read only and may be edited by the user.
+
+	\return
+		Nothing.
+	*/
+	void	setReadOnly(bool setting);
+
+
+	/*!
+	\brief
+		Specify whether the text for the Editbox will be rendered masked.
+
+	\param setting
+		true if the Editbox text should be rendered masked using the currently set mask code point, false if the Editbox
+		text should be rendered as plain text.
+
+	\return
+		Nothing.
+	*/
+	void	setTextMasked(bool setting);
+
+
+	/*!
+	\brief
+		Set the text validation string.
+
+	\note
+		Validation is performed by means of a regular expression.  If the text matches the regex, the text is said to have passed
+		validation.  If the text does not match with the regex then the text fails validation.
+
+	\param validation_string
+		String object containing the validation regex data to be used.
+
+	\return
+		Nothing.
+	*/
+	void	setValidationString(const String& validation_string);
+
+
+	/*!
+	\brief
+		Set the current position of the carat.
+
+	\param carat_pos
+		New index for the insert carat relative to the start of the text.  If the value specified is greater than the
+		number of characters in the Editbox, the carat is positioned at the end of the text.
+
+	\return
+		Nothing.
+	*/
+	void	setCaratIndex(size_t carat_pos);
+
+
+	/*!
+	\brief
+		Define the current selection for the Editbox
+
+	\param start_pos
+		Index of the starting point for the selection.  If this value is greater than the number of characters in the Editbox, the
+		selection start will be set to the end of the text.
+
+	\param end_pos
+		Index of the ending point for the selection.  If this value is greater than the number of characters in the Editbox, the
+		selection end will be set to the end of the text.
+
+	\return
+		Nothing.
+	*/
+	void	setSelection(size_t start_pos, size_t end_pos);
+	
+
+	/*!
+	\brief
+		set the utf32 code point used when rendering masked text.
+
+	\param code_point
+		utf32 code point value representing the Unicode code point that should be rendered instead of the Editbox text
+		when rendering in masked mode.
+
+	\return
+		Nothing.
+	*/
+	void	setMaskCodePoint(utf32 code_point);
+
+
+	/*!
+	\brief
+		set the maximum text length for this Editbox.
+
+	\param max_len
+		The maximum number of code points (characters) that can be entered into this Editbox.
+
+	\note
+		Depending on the validation string set, the actual length of text that can be entered may be less than the value
+		set here (it will never be more).
+
+	\return
+		Nothing.
+	*/
+	void	setMaxTextLength(size_t max_len);
+
+
+	/*!
+	\brief
+		Set the colour to be used for rendering Editbox text in the normal, unselected state.
+
+	\param col
+		colour value describing the ARGB colour that is to be used.
+
+	\return
+		Nothing.
+	*/
+	void	setNormalTextColour(const colour& col);
+
+
+	/*!
+	\brief
+		Set the colour to be used for rendering the Editbox text when within the
+		selected region.
+
+	\return
+		colour value describing the ARGB colour that is currently set.
+	*/
+	void	setSelectedTextColour(const colour& col);
+
+
+	/*!
+	\brief
+		Set the colour to be used for rendering the Editbox selection highlight
+		when the Editbox is active.
+
+	\param col
+		colour value describing the ARGB colour that is to be used.
+
+	\return
+		Nothing.
+	*/
+	void	setNormalSelectBrushColour(const colour& col);
+
+
+	/*!
+	\brief
+		Set the colour to be used for rendering the Editbox selection highlight
+		when the Editbox is inactive.
+
+	\param col
+		colour value describing the ARGB colour that is to be used.
+
+	\return
+		Nothing.
+	*/
+	void	setInactiveSelectBrushColour(const colour& col);
+
+
+	/*************************************************************************
+		Construction / Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for Editbox class.
+	*/
+	Editbox(const String& type, const String& name);
+
+
+	/*!
+	\brief
+		Destructor for Editbox class.
+	*/
+	virtual ~Editbox(void);
+
+
+protected:
+	/*************************************************************************
+		Implementation functions
+	*************************************************************************/
+	/*!
+	\brief
+		Add edit box specific events
+	*/
+	void	addEditboxEvents(void);
+
+
+	/*!
+	\brief
+		Return the text code point index that is rendered closest to screen position \a pt.
+
+	\param pt
+		Point object describing a position on the screen in pixels.
+
+	\return
+		Code point index into the text that is rendered closest to screen position \a pt.
+	*/
+	virtual	size_t	getTextIndexFromPosition(const Point& pt) const		= 0;
+
+
+	/*!
+	\brief
+		Clear the current selection setting
+	*/
+	void	clearSelection(void);
+
+
+	/*!
+	\brief
+		Erase the currently selected text.
+
+	\param modify_text
+		when true, the actual text will be modified.  When false, everything is done except erasing the characters.
+	*/
+	void	eraseSelectedText(bool modify_text = true);
+
+
+	/*!
+	\brief
+		return true if the given string matches the validation regular expression.
+	*/
+	bool	isStringValid(const String& str) const;
+
+
+
+	/*!
+	\brief
+		Processing for backspace key
+	*/
+	void	handleBackspace(void);
+
+
+	/*!
+	\brief
+		Processing for Delete key
+	*/
+	void	handleDelete(void);
+
+
+	/*!
+	\brief
+		Processing to move carat one character left
+	*/
+	void	handleCharLeft(uint sysKeys);
+
+
+	/*!
+	\brief
+		Processing to move carat one word left
+	*/
+	void	handleWordLeft(uint sysKeys);
+
+
+	/*!
+	\brief
+		Processing to move carat one character right
+	*/
+	void	handleCharRight(uint sysKeys);
+
+
+	/*!
+	\brief
+		Processing to move carat one word right
+	*/
+	void	handleWordRight(uint sysKeys);
+
+
+	/*!
+	\brief
+		Processing to move carat to the start of the text.
+	*/
+	void	handleHome(uint sysKeys);
+
+
+	/*!
+	\brief
+		Processing to move carat to the end of the text
+	*/
+	void	handleEnd(uint sysKeys);
+
+
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	virtual bool	testClassName_impl(const String& class_name) const
+	{
+		if (class_name==(const utf8*)"Editbox")	return true;
+		return Window::testClassName_impl(class_name);
+	}
+
+
+	/*************************************************************************
+		New event handlers
+	*************************************************************************/
+	/*!
+	\brief
+		Event fired internally when the read only state of the Editbox has been changed
+	*/
+	virtual	void	onReadOnlyChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Event fired internally when the masked rendering mode (password mode) has been changed
+	*/
+	virtual	void	onMaskedRenderingModeChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Event fired internally when the code point to use for masked rendering has been changed.
+	*/
+	virtual	void	onMaskCodePointChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Event fired internally when the validation string is changed.
+	*/
+	virtual	void	onValidationStringChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Event fired internally when the maximum text length for the edit box is changed.
+	*/
+	virtual	void	onMaximumTextLengthChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Event fired internally when something has caused the current text to now fail validation
+
+		This can be caused by changing the validation string or setting a maximum length that causes the
+		current text to be truncated.
+	*/
+	virtual	void	onTextInvalidatedEvent(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Event fired internally when the user attempted to make a change to the edit box that would
+		have caused it to fail validation.
+	*/
+	virtual	void	onInvalidEntryAttempted(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Event fired internally when the carat (insert point) position changes.
+	*/
+	virtual	void	onCaratMoved(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Event fired internally when the current text selection changes.
+	*/
+	virtual	void	onTextSelectionChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Event fired internally when the edit box text has reached the set maximum length.
+	*/
+	virtual	void	onEditboxFullEvent(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Event fired internally when the user accepts the edit box text by pressing Return, Enter, or Tab.
+	*/
+	virtual	void	onTextAcceptedEvent(WindowEventArgs& e);
+
+	
+	/*************************************************************************
+		Overridden event handlers
+	*************************************************************************/
+	virtual	void	onMouseButtonDown(MouseEventArgs& e);
+	virtual void	onMouseButtonUp(MouseEventArgs& e);
+	virtual	void	onMouseDoubleClicked(MouseEventArgs& e);
+	virtual	void	onMouseTripleClicked(MouseEventArgs& e);
+	virtual void	onMouseMove(MouseEventArgs& e);
+	virtual void	onCaptureLost(WindowEventArgs& e);
+	virtual void	onCharacter(KeyEventArgs& e);
+	virtual void	onKeyDown(KeyEventArgs& e);
+	virtual void	onTextChanged(WindowEventArgs& e);
+
+
+	/*************************************************************************
+		Implementation data
+	*************************************************************************/
+	bool	d_readOnly;			//!< True if the editbox is in read-only mode
+	bool	d_maskText;			//!< True if the editbox text should be rendered masked.
+	utf32	d_maskCodePoint;	//!< Code point to use when rendering masked text.
+	size_t	d_maxTextLen;		//!< Maximum number of characters for this Editbox.
+	size_t	d_caratPos;			//!< Position of the carat / insert-point.
+	size_t	d_selectionStart;	//!< Start of selection area.
+	size_t	d_selectionEnd;		//!< End of selection area.
+	String	d_validationString;	//!< Copy of validation reg-ex string.
+	RegexValidator*	d_validator;		//!< RegEx String used for validation of text.
+	bool	d_dragging;			//!< true when a selection is being dragged.
+	size_t	d_dragAnchorIdx;	//!< Selection index for drag selection anchor point.
+
+	// basic rendering colours
+	colour	d_normalTextColour;				//!< Text colour used normally.
+	colour	d_selectTextColour;				//!< Text colour used when text is highlighted
+	colour	d_selectBrushColour;			//!< Colour to apply to the selection brush.
+	colour	d_inactiveSelectBrushColour;	//!< Colour to apply to the selection brush when widget is inactive / read-only.
+
+
+private:
+	/*************************************************************************
+		Static Properties for this class
+	*************************************************************************/
+	static EditboxProperties::ReadOnly					d_readOnlyProperty;
+	static EditboxProperties::MaskText					d_maskTextProperty;
+	static EditboxProperties::MaskCodepoint				d_maskCodepointProperty;
+	static EditboxProperties::ValidationString			d_validationStringProperty;
+	static EditboxProperties::CaratIndex				d_caratIndexProperty;
+	static EditboxProperties::SelectionStart			d_selectionStartProperty;
+	static EditboxProperties::SelectionLength			d_selectionLengthProperty;
+	static EditboxProperties::MaxTextLength				d_maxTextLengthProperty;
+	static EditboxProperties::NormalTextColour			d_normalTextColourProperty;
+	static EditboxProperties::SelectedTextColour		d_selectedTextColourProperty;
+	static EditboxProperties::ActiveSelectionColour		d_activeSelectionColourProperty;
+	static EditboxProperties::InactiveSelectionColour	d_inactiveSelectionColourProperty;
+
+
+	/*************************************************************************
+		Private methods
+	*************************************************************************/
+	void	addEditboxProperties(void);
+};
+
+} // End of  CEGUI namespace section
+
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUIEditbox_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIListboxProperties.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIListboxProperties.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIListboxProperties.h	(revision 1092)
@@ -0,0 +1,151 @@
+/************************************************************************
+	filename: 	CEGUIListboxProperties.h
+	created:	11/7/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to Listbox property classes
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIListboxProperties_h_
+#define _CEGUIListboxProperties_h_
+
+#include "CEGUIProperty.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+// Start of ListboxProperties namespace section
+/*!
+\brief
+	Namespace containing all classes that make up the properties interface for the Listbox class
+*/
+namespace ListboxProperties
+{
+/*!
+\brief
+	Property to access the sort setting of the list box.
+
+	\par Usage:
+		- Name: Sort
+		- Format: "[text]"
+
+	\par Where [Text] is:
+		- "True" to indicate the list items should be sorted.
+		- "False" to indicate the list items should not be sorted.
+*/
+class Sort : public Property
+{
+public:
+	Sort() : Property(
+		"Sort",
+		"Property to get/set the sort setting of the list box.  Value is either \"True\" or \"False\".",
+		"False")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the multi-select setting of the list box.
+
+	\par Usage:
+		- Name: MultiSelect
+		- Format: "[text]"
+
+	\par Where [Text] is:
+		- "True" to indicate that multiple items may be selected.
+		- "False" to indicate that only a single item may be selected.
+*/
+class MultiSelect : public Property
+{
+public:
+	MultiSelect() : Property(
+		"MultiSelect",
+		"Property to get/set the multi-select setting of the list box.  Value is either \"True\" or \"False\".",
+		"False")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the 'always show' setting for the vertical scroll bar of the list box.
+
+	\par Usage:
+		- Name: ForceVertScrollbar
+		- Format: "[text]"
+
+	\par Where [Text] is:
+		- "True" to indicate that the vertical scroll bar will always be shown.
+		- "False" to indicate that the vertical scroll bar will only be shown when it is needed.
+*/
+class ForceVertScrollbar : public Property
+{
+public:
+	ForceVertScrollbar() : Property(
+		"ForceVertScrollbar",
+		"Property to get/set the 'always show' setting for the vertical scroll bar of the list box.  Value is either \"True\" or \"False\".",
+		"False")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the 'always show' setting for the horizontal scroll bar of the list box.
+
+	\par Usage:
+		- Name: ForceHorzScrollbar
+		- Format: "[text]"
+
+	\par Where [Text] is:
+		- "True" to indicate that the horizontal scroll bar will always be shown.
+		- "False" to indicate that the horizontal scroll bar will only be shown when it is needed.
+*/
+class ForceHorzScrollbar : public Property
+{
+public:
+	ForceHorzScrollbar() : Property(
+		"ForceHorzScrollbar",
+		"Property to get/set the 'always show' setting for the horizontal scroll bar of the list box.  Value is either \"True\" or \"False\".",
+		"False")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+} // End of  ListboxProperties namespace section
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIListboxProperties_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIListHeaderProperties.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIListHeaderProperties.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIListHeaderProperties.h	(revision 1092)
@@ -0,0 +1,177 @@
+/************************************************************************
+	filename: 	CEGUIListHeaderProperties.h
+	created:	11/7/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to the properties for the ListHeader class.
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIListHeaderProperties_h_
+#define _CEGUIListHeaderProperties_h_
+
+#include "CEGUIProperty.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+// Start of ListHeaderProperties namespace section
+/*!
+\brief
+	Namespace containing all classes that make up the properties interface for the ListHeader class
+*/
+namespace ListHeaderProperties
+{
+/*!
+\brief
+	Property to access the setting for user sizing of the column headers.
+
+	\par Usage:
+		- Name: ColumnsSizable
+		- Format: "[text]"
+
+	\par Where [Text] is:
+		- "True" to indicate the column headers can be sized by the user.
+		- "False" to indicate the column headers can not be sized by the user.
+*/
+class ColumnsSizable : public Property
+{
+public:
+	ColumnsSizable() : Property(
+		"ColumnsSizable",
+		"Property to get/set the setting for user sizing of the column headers.  Value is either \"True\" or \"False\".",
+		"True")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the setting for user moving of the column headers.
+
+	\par Usage:
+		- Name: ColumnsMovable
+		- Format: "[text]"
+
+	\par Where [Text] is:
+		- "True" to indicate the column headers can be moved by the user.
+		- "False" to indicate the column headers can not be moved by the user.
+*/
+class ColumnsMovable : public Property
+{
+public:
+	ColumnsMovable() : Property(
+		"ColumnsMovable",
+		"Property to get/set the setting for user moving of the column headers.  Value is either \"True\" or \"False\".",
+		"True")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the setting for user modification of the sort column & direction.
+
+	\par Usage:
+		- Name: SortSettingEnabled
+		- Format: "[text]"
+
+	\par Where [Text] is:
+		- "True" to indicate the user may modify the sort column and direction by clicking the header segments.
+		- "False" to indicate the user may not modify the sort column or direction.
+*/
+class SortSettingEnabled : public Property
+{
+public:
+	SortSettingEnabled() : Property(
+		"SortSettingEnabled",
+		"Property to get/set the setting for for user modification of the sort column & direction.  Value is either \"True\" or \"False\".",
+		"True")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the sort direction setting of the list header.
+
+	\par Usage:
+		- Name: SortDirection
+		- Format: "[text]"
+
+	\par Where [Text] is one of:
+		- "Ascending"
+		- "Descending"
+		- "None"
+*/
+class SortDirection : public Property
+{
+public:
+	SortDirection() : Property(
+		"SortDirection",
+		"Property to get/set the sort direction setting of the header.  Value is the text of one of the SortDirection enumerated value names.",
+		"None")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the current sort column (via ID code).
+
+	\par Usage:
+		- Name: SortColumnID
+		- Format: "[uint]".
+
+	\par Where:
+		- [uint] is any unsigned integer value.
+*/
+class SortColumnID : public Property
+{
+public:
+	SortColumnID() : Property(
+		"SortColumnID",
+		"Property to get/set the current sort column (via ID code).  Value is an unsigned integer number.",
+		"0")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+} // End of  ListHeaderProperties namespace section
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIListHeaderProperties_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUITooltipProperties.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUITooltipProperties.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUITooltipProperties.h	(revision 1092)
@@ -0,0 +1,115 @@
+/************************************************************************
+	filename: 	CEGUITooltipProperties.h
+	created:	3/3/2005
+	author:		Paul D Turner
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUITooltipProperties_h_
+#define _CEGUITooltipProperties_h_
+
+#include "CEGUIProperty.h"
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+// Start of TooltipProperties namespace section
+/*!
+\brief
+	Namespace containing all classes that make up the properties interface for the Tooltip class
+*/
+namespace TooltipProperties
+{
+    /*!
+    \brief
+        Property to access the timout that must expire before the tooltip gets activated.
+
+    \par Usage:
+        - Name: HoverTime
+        - Format: "[float]".
+
+    \par Where:
+        - [float] specifies the number of seconds the mouse must hover stationary on a widget before the tooltip gets activated.
+    */
+    class HoverTime : public Property
+    {
+    public:
+        HoverTime() : Property(
+            "HoverTime",
+            "Property to get/set the hover timeout value in seconds.  Value is a float.",
+            "0.400000")
+        {}
+
+        String  get(const PropertyReceiver* receiver) const;
+        void    set(PropertyReceiver* receiver, const String& value);
+    };
+
+    /*!
+    \brief
+        Property to access the time after which the tooltip automatically de-activates itself.
+
+    \par Usage:
+        - Name: DisplayTime
+        - Format: "[float]".
+
+    \par Where:
+        - [float] specifies the number of seconds after which the tooltip will deactivate itself if the mouse has remained stationary.
+    */
+    class DisplayTime : public Property
+    {
+    public:
+        DisplayTime() : Property(
+            "DisplayTime",
+            "Property to get/set the display timeout value in seconds.  Value is a float.",
+            "7.500000")
+        {}
+
+        String  get(const PropertyReceiver* receiver) const;
+        void    set(PropertyReceiver* receiver, const String& value);
+    };
+
+    /*!
+    \brief
+        Property to access the duration of the fade effect for the tooltip.
+
+    \par Usage:
+        - Name: FadeTime
+        - Format: "[float]".
+
+    \par Where:
+        - [float] specifies the number of seconds over which the fade in / fade out effect will happen.
+    */
+    class FadeTime : public Property
+    {
+    public:
+        FadeTime() : Property(
+            "FadeTime",
+            "Property to get/set duration of the fade effect in seconds.  Value is a float.",
+            "0.330000")
+        {}
+
+        String  get(const PropertyReceiver* receiver) const;
+        void    set(PropertyReceiver* receiver, const String& value);
+    };
+
+} // End of  TooltipProperties namespace section
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUITooltipProperties_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIListHeaderSegment.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIListHeaderSegment.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIListHeaderSegment.h	(revision 1092)
@@ -0,0 +1,443 @@
+/************************************************************************
+	filename: 	CEGUIListHeaderSegment.h
+	created:	15/6/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to list header segment class.
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIListHeaderSegment_h_
+#define _CEGUIListHeaderSegment_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIWindow.h"
+#include "elements/CEGUIListHeaderSegmentProperties.h"
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Base class for list header segment window
+*/
+class CEGUIEXPORT ListHeaderSegment : public Window
+{
+public:
+	static const String EventNamespace;				//!< Namespace for global events
+
+
+	/*************************************************************************
+		Constants
+	*************************************************************************/
+	// Event names
+	static const String EventSegmentClicked;				//!< Event fired when the segment is clicked.
+	static const String EventSplitterDoubleClicked;		//!< Event fired when the sizer/splitter is double-clicked.
+	static const String EventSizingSettingChanged;		//!< Event fired when the sizing setting changes.
+	static const String EventSortDirectionChanged;		//!< Event fired when the sort direction value changes.
+	static const String EventMovableSettingChanged;		//!< Event fired when the movable setting changes.
+	static const String EventSegmentDragStart;			//!< Event fired when the segment has started to be dragged.
+	static const String EventSegmentDragStop;				//!< Event fired when segment dragging has stopped (via mouse release).
+	static const String EventSegmentDragPositionChanged;	//!< Event fired when the segment drag position has changed.
+	static const String EventSegmentSized;				//!< Event fired when the segment is sized.
+	static const String EventClickableSettingChanged;		//!< Event fired when the clickable state of the segment changes.
+
+	// Defaults
+	static const float	DefaultSizingArea;		//!< Default size of the sizing area.
+	static const float	SegmentMoveThreshold;	//!< Amount the mouse must be dragged before drag-moving is initiated.
+
+
+	/*************************************************************************
+		Enumerated types
+	*************************************************************************/
+	/*!
+	\brief
+		Enumeration of possible values for sorting direction used with ListHeaderSegment classes
+	*/
+	enum SortDirection
+	{
+		None,		//!< Items under this segment should not be sorted.
+		Ascending,	//!< Items under this segment should be sorted in ascending order.
+		Descending	//!< Items under this segment should be sorted in descending order.
+	};
+
+
+	/*************************************************************************
+		Accessor Methods
+	*************************************************************************/
+	/*!
+	\brief
+		Return whether this segment can be sized.
+
+	\return
+		true if the segment can be horizontally sized, false if the segment can not be horizontally sized.
+	*/
+	bool	isSizingEnabled(void) const			{return d_sizingEnabled;}
+
+
+	/*!
+	\brief
+		Return the current sort direction set for this segment.
+
+		Note that this has no impact on the way the segment functions (aside from the possibility
+		of varied rendering).  This is intended as a 'helper setting' to classes that make use of
+		the ListHeaderSegment objects.
+
+	\return
+		One of the SortDirection enumerated values indicating the current sort direction set for this
+		segment.
+	*/
+	SortDirection	getSortDirection(void) const	{return d_sortDir;}
+
+
+	/*!
+	\brief
+		Return whether drag moving is enabled for this segment.
+
+	\return
+		true if the segment can be drag moved, false if the segment can not be drag moved.
+	*/
+	bool	isDragMovingEnabled(void) const		{return d_movingEnabled;}
+
+
+	/*!
+	\brief
+		Return the current drag move position offset (in pixels relative to the top-left corner of the segment).
+
+	\return
+		Point object describing the drag move offset position.
+	*/
+	const Point&	getDragMoveOffset(void) const	{return d_dragPosition;}
+
+
+	/*!
+	\brief
+		Return whether the segment is clickable.
+
+	\return
+		true if the segment can be clicked, false of the segment can not be clicked (so no highlighting or events will happen).
+	*/
+	bool	isClickable(void) const		{return d_allowClicks;}
+
+
+	/*************************************************************************
+		Manipulator Methods
+	*************************************************************************/
+	/*!
+	\brief
+		Set whether this segment can be sized.
+
+	\param setting
+		true if the segment may be horizontally sized, false if the segment may not be horizontally sized.
+
+	\return
+		Nothing.
+	*/
+	void	setSizingEnabled(bool setting);
+
+
+	/*!
+	\brief
+		Set the current sort direction set for this segment.
+
+		Note that this has no impact on the way the segment functions (aside from the possibility
+		of varied rendering).  This is intended as a 'helper setting' to classes that make use of
+		the ListHeaderSegment objects.
+
+	\param sort_dir
+		One of the SortDirection enumerated values indicating the current sort direction set for this
+		segment.
+
+	\return
+		Nothing
+	*/
+	void	setSortDirection(SortDirection sort_dir);
+
+
+	/*!
+	\brief
+		Set whether drag moving is allowed for this segment.
+
+	\param setting
+		true if the segment may be drag moved, false if the segment may not be drag moved.
+
+	\return
+		Nothing.
+	*/
+	void	setDragMovingEnabled(bool setting);
+
+
+	/*!
+	\brief
+		Set whether the segment is clickable.
+
+	\param setting
+		true if the segment may be clicked, false of the segment may not be clicked (so no highlighting or events will happen).
+
+	\return
+		Nothing.
+	*/
+	void setClickable(bool setting);
+
+
+	/*************************************************************************
+		Construction & Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for list header segment base class
+	*/
+	ListHeaderSegment(const String& type, const String& name);
+
+
+	/*!
+	\brief
+		Destructor for list header segment base class.
+	*/
+	virtual ~ListHeaderSegment(void);
+
+
+protected:
+	/*************************************************************************
+		Implementation Methods
+	*************************************************************************/
+	/*!
+	\brief
+		Add list header segment specific events
+	*/
+	void	addHeaderSegmentEvents(void);
+
+
+	/*!
+	\brief
+		Update state for drag sizing.
+
+	\param local_mouse
+		Mouse position as a pixel offset from the top-left corner of this window.
+
+	\return
+		Nothing.
+	*/
+	void	doDragSizing(const Point& local_mouse);
+
+
+	/*!
+	\brief
+		Update state for drag moving.
+
+	\param local_mouse
+		Mouse position as a pixel offset from the top-left corner of this window.
+
+	\return
+		Nothing.
+	*/
+	void	doDragMoving(const Point& local_mouse);
+
+
+	/*!
+	\brief
+		Initialise the required states to put the widget into drag-moving mode.
+	*/
+	void	initDragMoving(void);
+
+
+	/*!
+	\brief
+		Initialise the required states when we are hovering over the sizing area.
+	*/
+	void	initSizingHoverState(void);
+
+
+	/*!
+	\brief
+		Initialise the required states when we are hovering over the main segment area.
+	*/
+	void	initSegmentHoverState(void);
+
+
+	/*!
+	\brief
+		Return whether the required minimum movement threshold before initiating drag-moving
+		has been exceeded.
+
+	\param local_mouse
+		Mouse position as a pixel offset from the top-left corner of this window.
+
+	\return
+		true if the threshold has been exceeded and drag-moving should be initiated, or false
+		if the threshold has not been exceeded.
+	*/		
+	bool	isDragMoveThresholdExceeded(const Point& local_mouse);
+
+
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	virtual bool	testClassName_impl(const String& class_name) const
+	{
+		if (class_name==(const utf8*)"ListHeaderSegment")	return true;
+		return Window::testClassName_impl(class_name);
+	}
+
+
+	/*************************************************************************
+		New Event Handlers
+	*************************************************************************/
+	/*!
+	\brief
+		Handler called when segment is clicked.
+	*/
+	virtual void	onSegmentClicked(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the sizer/splitter is double-clicked.
+	*/
+	virtual void	onSplitterDoubleClicked(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when sizing setting changes.
+	*/
+	virtual void	onSizingSettingChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the sort direction value changes.
+	*/
+	virtual void	onSortDirectionChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the drag-movable setting is changed.
+	*/
+	virtual void	onMovableSettingChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the user starts dragging the segment.
+	*/
+	virtual void	onSegmentDragStart(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the user stops dragging the segment (releases mouse button)
+	*/
+	virtual void	onSegmentDragStop(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the drag position changes.
+	*/
+	virtual void	onSegmentDragPositionChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the segment is sized.
+	*/
+	virtual void	onSegmentSized(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the clickable setting for the segment changes
+	*/
+	virtual void	onClickableSettingChanged(WindowEventArgs& e);
+
+
+	/*************************************************************************
+		Overridden Event Handlers
+	*************************************************************************/
+	virtual void	onMouseMove(MouseEventArgs& e);
+	virtual void	onMouseButtonDown(MouseEventArgs& e);
+	virtual void	onMouseButtonUp(MouseEventArgs& e);
+	virtual void	onMouseDoubleClicked(MouseEventArgs& e);
+	virtual void	onMouseLeaves(MouseEventArgs& e);
+	virtual void	onCaptureLost(WindowEventArgs& e);
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	const Image*	d_normalMouseCursor;	//!< Image to use for mouse when not sizing (typically set by derived class).
+	const Image*	d_sizingMouseCursor;	//!< Image to use for mouse when sizing (typically set by derived class).
+	const Image*	d_movingMouseCursor;	//!< Image to use for mouse when moving (typically set by derived class).
+
+	float	d_splitterSize;		//!< pixel width of the sizing area.
+	bool	d_splitterHover;	//!< True if the mouse is over the splitter
+
+	bool	d_dragSizing;		//!< true when we are being sized.
+	Point	d_dragPoint;		//!< point we are being dragged at when sizing or moving.
+
+	SortDirection	d_sortDir;	//!< Direction for sorting (used for deciding what icon to display).
+
+	bool	d_segmentHover;		//!< true when the mouse is within the segment area (and not in sizing area).
+	bool	d_segmentPushed;	//!< true when the left mouse button has been pressed within the confines of the segment.
+	bool	d_sizingEnabled;	//!< true when sizing is enabled for this segment.
+	bool	d_movingEnabled;	//!< True when drag-moving is enabled for this segment;
+	bool	d_dragMoving;		//!< true when segment is being drag moved.
+	Point	d_dragPosition;		//!< position of dragged segment.
+	bool	d_allowClicks;		//!< true if the segment can be clicked.
+
+
+private:
+	/*************************************************************************
+		Static Properties for this class
+	*************************************************************************/
+	static ListHeaderSegmentProperties::Clickable		d_clickableProperty;
+	static ListHeaderSegmentProperties::Dragable		d_dragableProperty;
+	static ListHeaderSegmentProperties::Sizable			d_sizableProperty;
+	static ListHeaderSegmentProperties::SortDirection	d_sortDirectionProperty;
+
+
+	/*************************************************************************
+		Private methods
+	*************************************************************************/
+	void	addHeaderSegmentProperties(void);
+};
+
+} // End of  CEGUI namespace section
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUIListHeaderSegment_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIScrolledContainer.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIScrolledContainer.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIScrolledContainer.h	(revision 1092)
@@ -0,0 +1,262 @@
+/************************************************************************
+	filename: 	CEGUIScrolledContainer.h
+	created:	1/3/2005
+	author:		Paul D Turner
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIScrolledContainer_h_
+#define _CEGUIScrolledContainer_h_
+
+#include "CEGUIWindow.h"
+#include "CEGUIWindowFactory.h"
+#include "elements/CEGUIScrolledContainerProperties.h"
+#include <map>
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+    /*!
+    \brief
+        Helper container window class which is used in the implementation of the
+        ScrollablePane widget class.
+    */
+    class CEGUIEXPORT ScrolledContainer : public Window
+    {
+    public:
+        /*************************************************************************
+            Constants
+        *************************************************************************/
+        static const String WidgetTypeName;     //!< Type name for ScrolledContainer.
+        static const String EventNamespace;     //!< Namespace for global events
+        static const String EventContentChanged;    //!< Event fired whenever some child changes.
+        static const String EventAutoSizeSettingChanged;    //!< Event fired when the autosize setting changes.
+
+        /*************************************************************************
+        	Object construction and destruction
+        *************************************************************************/
+        /*!
+        \brief
+            Constructor for ScrolledContainer objects.
+        */
+        ScrolledContainer(const String& type, const String& name);
+
+        /*!
+        \brief
+            Destructor for ScrolledContainer objects.
+        */
+        ~ScrolledContainer(void);
+
+        /*************************************************************************
+        	Public interface methods
+        *************************************************************************/
+        /*!
+        \brief
+            Return whether the content pane is auto sized.
+
+        \return
+            - true to indicate the content pane will automatically resize itself.
+            - false to indicate the content pane will not automatically resize itself.
+        */
+        bool isContentPaneAutoSized(void) const;
+
+        /*!
+        \brief
+            Set whether the content pane should be auto-sized.
+
+        \param setting
+            - true to indicate the content pane should automatically resize itself.
+            - false to indicate the content pane should not automatically resize itself.
+
+        \return 
+            Nothing.
+        */
+        void setContentPaneAutoSized(bool setting);
+
+        /*!
+        \brief
+            Return the current content pane area for the ScrolledContainer.
+
+        \return
+            Rect object that details the current pixel extents of the content
+            pane represented by this ScrolledContainer.
+        */
+        const Rect& getContentArea(void) const;
+
+        /*!
+        \brief
+            Set the current content pane area for the ScrolledContainer.
+
+        \note
+            If the ScrolledContainer is configured to auto-size the content pane
+            this call will have no effect.
+
+        \param area
+            Rect object that details the pixel extents to use for the content
+            pane represented by this ScrolledContainer.
+
+        \return
+            Nothing.
+        */
+        void setContentArea(const Rect& area);
+
+        /*!
+        \brief
+            Return the current extents of the attached content.
+
+        \return
+            Rect object that describes the pixel extents of the attached
+            child windows.  This is effectively the smallest bounding box
+            that could contain all the attached windows.
+        */
+        Rect getChildExtentsArea(void) const;
+
+    protected:
+        /*************************************************************************
+        	Implementation methods
+        *************************************************************************/
+        /*!
+        \brief
+            Adds events for this widget type.
+        */
+        void addScrolledContainerEvents(void);
+
+
+		/*!
+		\brief
+			Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+		\param class_name
+			The class name that is to be checked.
+
+		\return
+			true if this window was inherited from \a class_name. false if not.
+		*/
+		virtual bool	testClassName_impl(const String& class_name) const
+		{
+			if (class_name==(const utf8*)"ScrolledContainer")	return true;
+			return Window::testClassName_impl(class_name);
+		}
+
+        /*************************************************************************
+        	Implementation of abstract methods from Window
+        *************************************************************************/
+        void drawSelf(float z) {};
+
+        /*************************************************************************
+        	Event trigger methods.
+        *************************************************************************/
+        /*!
+        \brief
+            Notification method called whenever the content size may have changed.
+
+        \param e
+            WindowEventArgs object.
+
+        \return
+            Nothing.
+        */
+        virtual void onContentChanged(WindowEventArgs& e);
+
+        /*!
+        \brief
+            Notification method called whenever the setting that controls whether
+            the content pane is automatically sized is changed.
+
+        \param e
+            WindowEventArgs object.
+
+        \return
+            Nothing.
+        */
+        virtual void onAutoSizeSettingChanged(WindowEventArgs& e);
+
+        /*************************************************************************
+        	Event callbacks
+        *************************************************************************/
+        /*!
+        \brief
+            Method which receives notifications about child windows being moved.
+        */
+        bool handleChildSized(const EventArgs& e);
+
+        /*!
+        \brief
+            Method which receives notifications about child windows being sized.
+        */
+        bool handleChildMoved(const EventArgs& e);
+
+        /*************************************************************************
+        	Overridden from Window.
+        *************************************************************************/
+        Rect getUnclippedInnerRect(void) const;
+        void onChildAdded(WindowEventArgs& e);
+        void onChildRemoved(WindowEventArgs& e);
+        void onParentSized(WindowEventArgs& e);
+
+        /*************************************************************************
+        	Data fields
+        *************************************************************************/
+        typedef std::multimap<Window*, Event::Connection>  ConnectionTracker;
+        ConnectionTracker d_eventConnections;   //!< Tracks event connections we make.
+        Rect d_contentArea;     //!< Holds extents of the content pane.
+        bool d_autosizePane;    //!< true if the pane auto-sizes itself.
+
+    private:
+	    /*************************************************************************
+		    Static Properties for this class
+	    *************************************************************************/
+	    static ScrolledContainerProperties::ContentPaneAutoSized	d_autoSizedProperty;
+	    static ScrolledContainerProperties::ContentArea             d_contentAreaProperty;
+	    static ScrolledContainerProperties::ChildExtentsArea        d_childExtentsAreaProperty;
+
+	    /*************************************************************************
+		    Private methods
+	    *************************************************************************/
+	    void addScrolledContainerProperties(void);
+    };
+
+    /*!
+    \brief
+        Factory class for producing ScrolledContainer windows
+    */
+    class ScrolledContainerFactory : public WindowFactory
+    {
+    public:
+        ScrolledContainerFactory(void) : WindowFactory(ScrolledContainer::WidgetTypeName) { }
+        ~ScrolledContainerFactory(void){}
+
+        Window* createWindow(const String& name)
+        {
+            ScrolledContainer* wnd = new ScrolledContainer(d_type, name);
+            return wnd;
+        }
+
+        void destroyWindow(Window* window)
+        {
+            if (window->getType() == d_type)
+                delete window;
+        }
+
+    };
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIScrolledContainer_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIEditboxProperties.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIEditboxProperties.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIEditboxProperties.h	(revision 1092)
@@ -0,0 +1,355 @@
+/************************************************************************
+	filename: 	CEGUIEditboxProperties.h
+	created:	9/7/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to Properties for Editbox class
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIEditboxProperties_h_
+#define _CEGUIEditboxProperties_h_
+
+#include "CEGUIProperty.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+// Start of EditboxProperties namespace section
+/*!
+\brief
+	Namespace containing all classes that make up the properties interface for the Editbox class
+*/
+namespace EditboxProperties
+{
+/*!
+\brief
+	Property to access the read-only setting of the edit box.
+
+	This property offers access to the read-only setting for the Editbox object.
+
+	\par Usage:
+		- Name: ReadOnly
+		- Format: "[text]"
+
+	\par Where [Text] is:
+		- "True" to indicate the edit box is read-only.
+		- "False" to indicate the edit box is not read-only (text may be edited by user).
+*/
+class ReadOnly : public Property
+{
+public:
+	ReadOnly() : Property(
+		"ReadOnly",
+		"Property to get/set the read-only setting for the Editbox.  Value is either \"True\" or \"False\".",
+		"False")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the mask text setting of the edit box.
+
+	This property offers access to the mask text setting for the Editbox object.
+
+	\par Usage:
+		- Name: MaskText
+		- Format: "[text]"
+
+	\par Where [Text] is:
+		- "True" to indicate the text should be masked.
+		- "False" to indicate the text should not be masked.
+*/
+class MaskText : public Property
+{
+public:
+	MaskText() : Property(
+		"MaskText",
+		"Property to get/set the mask text setting for the Editbox.  Value is either \"True\" or \"False\".",
+		"False")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the mask text setting of the edit box.
+
+	This property offers access to the mask text setting for the Editbox object.
+
+	\par Usage:
+		- Name: MaskCodepoint
+		- Format: "[uint]"
+
+	\par Where:
+		- [uint] is the Unicode utf32 value of the codepoint used for masking text.
+*/
+class MaskCodepoint : public Property
+{
+public:
+	MaskCodepoint() : Property(
+		"MaskCodepoint",
+		"Property to get/set the utf32 codepoint value used for masking text.  Value is \"[uint]\".",
+		"42")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the string used for regular expression validation of the edit box text.
+
+	\par Usage:
+		- Name: ValidationString
+		- Format: "[text]"
+
+	\par Where:
+		- [Text] is the string used for validating text entry.
+*/
+class ValidationString : public Property
+{
+public:
+	ValidationString() : Property(
+		"ValidationString",
+		"Property to get/set the validation string Editbox.  Value is a text string.",
+		".*")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the current carat index.
+
+	\par Usage:
+		- Name: CaratIndex
+		- Format: "[uint]"
+
+	\par Where:
+		- [uint] is the zero based index of the carat position within the text.
+*/
+class CaratIndex : public Property
+{
+public:
+	CaratIndex() : Property(
+		"CaratIndex",
+		"Property to get/set the current carat index.  Value is \"[uint]\".",
+		"0")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the current selection start index.
+
+	\par Usage:
+		- Name: SelectionStart
+		- Format: "[uint]"
+
+	\par Where:
+		- [uint] is the zero based index of the selection start position within the text.
+*/
+class SelectionStart : public Property
+{
+public:
+	SelectionStart() : Property(
+		"SelectionStart",
+		"Property to get/set the zero based index of the selection start position within the text.  Value is \"[uint]\".",
+		"0")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the current selection length.
+
+	\par Usage:
+		- Name: SelectionLength
+		- Format: "[uint]"
+
+	\par Where:
+		- [uint] is the length of the selection (as a count of the number of code points selected).
+*/
+class SelectionLength : public Property
+{
+public:
+	SelectionLength() : Property(
+		"SelectionLength",
+		"Property to get/set the length of the selection (as a count of the number of code points selected).  Value is \"[uint]\".",
+		"0")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the maximum text length for the edit box.
+
+	\par Usage:
+		- Name: MaxTextLength
+		- Format: "[uint]"
+
+	\par Where:
+		- [uint] is the maximum allowed text length (as a count of code points).
+*/
+class MaxTextLength : public Property
+{
+public:
+	MaxTextLength() : Property(
+		"MaxTextLength",
+		"Property to get/set the the maximum allowed text length (as a count of code points).  Value is \"[uint]\".",
+		"1073741824")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the normal, unselected, text colour used for rendering text.
+
+	\par Usage:
+		- Name: NormalTextColour
+		- Format: "aarrggbb".
+
+	\par Where:
+		- aarrggbb is the ARGB colour value to be used.
+*/
+class NormalTextColour : public Property
+{
+public:
+	NormalTextColour() : Property(
+		"NormalTextColour",
+		"Property to get/set the normal, unselected, text colour used for rendering text.  Value is \"aarrggbb\" (hex).",
+		"00FFFFFF")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the colour used for rendering text within the selection area.
+
+	\par Usage:
+		- Name: SelectedTextColour
+		- Format: "aarrggbb".
+
+	\par Where:
+		- aarrggbb is the ARGB colour value to be used.
+*/
+class SelectedTextColour : public Property
+{
+public:
+	SelectedTextColour() : Property(
+		"SelectedTextColour",
+		"Property to get/set the colour used for rendering text within the selection area.  Value is \"aarrggbb\" (hex).",
+		"00000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the colour used for rendering the selection highlight when the edit box is active.
+
+	\par Usage:
+		- Name: ActiveSelectionColour
+		- Format: "aarrggbb".
+
+	\par Where:
+		- aarrggbb is the ARGB colour value to be used.
+*/
+class ActiveSelectionColour : public Property
+{
+public:
+	ActiveSelectionColour() : Property(
+		"ActiveSelectionColour",
+		"Property to get/set the colour used for rendering the selection highlight when the edit box is active.  Value is \"aarrggbb\" (hex).",
+		"006060FF")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the colour used for rendering the selection highlight when the edit box is inactive.
+
+	\par Usage:
+		- Name: InactiveSelectionColour
+		- Format: "aarrggbb".
+
+	\par Where:
+		- aarrggbb is the ARGB colour value to be used.
+*/
+class InactiveSelectionColour : public Property
+{
+public:
+	InactiveSelectionColour() : Property(
+		"InactiveSelectionColour",
+		"Property to get/set the colour used for rendering the selection highlight when the edit box is inactive.  Value is \"aarrggbb\" (hex).",
+		"00808080")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+} // End of  EditboxProperties namespace section
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIEditboxProperties_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIPushButton.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIPushButton.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIPushButton.h	(revision 1092)
@@ -0,0 +1,335 @@
+/************************************************************************
+	filename: 	CEGUIPushButton.h
+	created:	13/4/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to base class for PushButton widget
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIPushButton_h_
+#define _CEGUIPushButton_h_
+
+#include "CEGUIBase.h"
+#include "elements/CEGUIButtonBase.h"
+#include "elements/CEGUIPushButtonProperties.h"
+#include "CEGUIRenderableImage.h"
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+
+*/
+class CEGUIEXPORT PushButton : public ButtonBase
+{
+public:
+	static const String EventNamespace;				//!< Namespace for global events
+
+
+	/*************************************************************************
+		Event name constants
+	*************************************************************************/
+	// generated internally by Window
+	static const String EventClicked;					//!< The button was clicked.
+
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for base PushButton class
+	*/
+	PushButton(const String& type, const String& name);
+
+
+	/*!
+	\brief
+		Destructor for PushButton class
+	*/
+	virtual ~PushButton(void);
+
+    /*************************************************************************
+    	Common Public Interface
+    *************************************************************************/
+	/*!
+	\brief
+		return whether or not rendering of the standard imagery is enabled.
+
+	\return
+		true if the standard button imagery will be rendered, false if no standard rendering will be performed.
+	*/
+	bool	isStandardImageryEnabled(void) const;
+
+
+	/*!
+	\brief
+		Return whether of not custom button image areas are auto-scaled to the size of the button.
+
+	\return
+		true if client specified custom image areas are re-sized when the button size changes.  false if image areas will
+		remain unchanged when the button is sized.
+	*/
+	bool	isCustomImageryAutoSized(void) const;
+
+    /*!
+	\brief
+		returns a pointer to a read-only RenderableImage object holding the details
+        of the image set to render for the button in the normal state, or 0 if no
+        image is currently set for this state.
+
+	\return
+		Pointer to a const RenderableImage object with all the details for the image.  
+	*/
+	const RenderableImage*	getNormalImage(void) const;
+
+	/*!
+	\brief
+        returns a pointer to a read-only RenderableImage object holding the details
+        of the image set to render for the button in the highlighted state, or 0 if no
+        image is currently set for this state.
+
+	\return
+		Pointer to a const RenderableImage object with all the details for the image.  
+	*/
+	const RenderableImage*	getHoverImage(void) const;
+
+	/*!
+	\brief
+        returns a pointer to a read-only RenderableImage object holding the details
+        of the image set to render for the button in the pushed state, or 0 if no
+        image is currently set for this state.
+
+	\return
+		Pointer to a const RenderableImage object with all the details for the image.  
+	*/
+	const RenderableImage*	getPushedImage(void) const;
+
+	/*!
+	\brief
+        returns a pointer to a read-only RenderableImage object holding the details
+        of the image set to render for the button in the disabled state, or 0 if no
+        image is currently set for this state.
+
+	\return
+		Pointer to a const RenderableImage object with all the details for the image.  
+	*/
+	const RenderableImage*	getDisabledImage(void) const;
+
+    /*!
+    \brief
+        get the offset that is used to shift of the text in the x-direction
+        this is useful if the button-images are not symmetrical and the
+        text shouldn't be completely centered
+
+    \return
+        the offset relative to the button-size
+    */
+    float   getTextXOffset(void) const;
+
+	/*!
+	\brief
+		set whether or not to render the standard imagery for the button
+
+	\param setting
+		true to have the standard button imagery drawn, false to have no standard imagery drawn.
+
+	\return
+		Nothing.
+	*/
+	void	setStandardImageryEnabled(bool setting);
+
+	/*!
+	\brief
+		Set whether to auto re-size custom image areas when the button is sized.
+
+	\param setting
+		true to have custom image areas auto-sized.  false to have system leave image areas untouched.
+
+	\return
+		Nothing.
+	*/
+	void	setCustomImageryAutoSized(bool setting);
+
+	/*!
+	\brief
+		set the details of the image to render for the button in the normal state.
+
+	\param image
+		RenderableImage object with all the details for the image.  Note that an internal copy of the Renderable image is made and
+		ownership of \a image remains with client code.  If this parameter is NULL, rendering of an image for this button state is
+		disabled.
+
+	\return
+		Nothing.
+	*/
+	void	setNormalImage(const RenderableImage* image);
+
+	/*!
+	\brief
+		set the details of the image to render for the button in the highlighted state.
+
+	\param image
+		RenderableImage object with all the details for the image.  Note that an internal copy of the Renderable image is made and
+		ownership of \a image remains with client code.  If this parameter is NULL, rendering of an image for this button state is
+		disabled.
+
+	\return
+		Nothing.
+	*/
+	void	setHoverImage(const RenderableImage* image);
+
+	/*!
+	\brief
+		set the details of the image to render for the button in the pushed state.
+
+	\param image
+		RenderableImage object with all the details for the image.  Note that an internal copy of the Renderable image is made and
+		ownership of \a image remains with client code.  If this parameter is NULL, rendering of an image for this button state is
+		disabled.
+
+	\return
+		Nothing.
+	*/
+	void	setPushedImage(const RenderableImage* image);
+
+	/*!
+	\brief
+		set the details of the image to render for the button in the disabled state.
+
+	\param image
+		RenderableImage object with all the details for the image.  Note that an internal copy of the Renderable image is made and
+		ownership of \a image remains with client code.  If this parameter is NULL, rendering of an image for this button state is
+		disabled.
+
+	\return
+		Nothing.
+	*/
+	void	setDisabledImage(const RenderableImage* image);
+
+    /*!
+    \brief
+        set the offset to use for a shift of the text in the x-direction
+        this is useful if the button-images are not symmetrical and the
+        text shouldn't be completely centered
+
+    \param offset
+        The offset to use. This is relative to the button-width
+
+    \return
+        Nothing.
+    */
+    void   setTextXOffset(float offset);
+
+protected:
+	/*************************************************************************
+		New Event Handlers
+	*************************************************************************/
+	/*!
+	\brief
+		handler invoked internally when the button is clicked.
+	*/
+	virtual void	onClicked(WindowEventArgs& e);
+
+
+	/*************************************************************************
+		Overridden Event Handlers
+	*************************************************************************/
+	virtual void	onMouseButtonUp(MouseEventArgs& e);
+    virtual void    onSized(WindowEventArgs& e);
+
+
+	/*************************************************************************
+		Implementation Functions
+	*************************************************************************/
+	/*!
+	\brief
+		Add button specific events
+	*/
+	void	addPushButtonEvents(void);
+
+
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	virtual bool	testClassName_impl(const String& class_name) const
+	{
+		if (class_name==(const utf8*)"PushButton")	return true;
+		return ButtonBase::testClassName_impl(class_name);
+	}
+
+
+    /*************************************************************************
+    	Data Fields
+    *************************************************************************/
+    // flags stating which imagery is to be rendered and how.
+    bool	d_autoscaleImages;				//!< when true custom images will be scaled to the same size as the button
+    bool	d_useStandardImagery;			//!< true if button standard imagery should be drawn.
+    bool	d_useNormalImage;				//!< true if an image should be drawn for the normal state.
+    bool	d_useHoverImage;				//!< true if an image should be drawn for the highlighted state.
+    bool	d_usePushedImage;				//!< true if an image should be drawn for the pushed state.
+    bool	d_useDisabledImage;				//!< true if an image should be drawn for the disabled state.
+
+    // button RenderableImage objects
+    RenderableImage		d_normalImage;		//!< RenderableImage used when rendering an image in the normal state.
+    RenderableImage		d_hoverImage;		//!< RenderableImage used when rendering an image in the highlighted state.
+    RenderableImage		d_pushedImage;		//!< RenderableImage used when rendering an image in the pushed state.
+    RenderableImage		d_disabledImage;	//!< RenderableImage used when rendering an image in the disabled state.
+
+    //text-offset
+    float d_textXOffset;		//!< offset applied to the x co-ordinate of the text label.
+
+private:
+    /*************************************************************************
+        Static Properties for this class
+    *************************************************************************/
+    static PushButtonProperties::NormalImage    d_normalImageProperty;
+    static PushButtonProperties::PushedImage    d_pushedImageProperty;
+    static PushButtonProperties::HoverImage     d_hoverImageProperty;
+    static PushButtonProperties::DisabledImage  d_disabledImageProperty;
+    static PushButtonProperties::UseStandardImagery d_useStandardImageryProperty;
+    static PushButtonProperties::TextXOffset    d_textXOffsetProperty;
+
+    /*************************************************************************
+        Private methods
+    *************************************************************************/
+    void	addPushButtonProperties(void);
+};
+
+
+} // End of  CEGUI namespace section
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUIPushButton_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIMenuBaseProperties.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIMenuBaseProperties.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIMenuBaseProperties.h	(revision 1092)
@@ -0,0 +1,189 @@
+/************************************************************************
+	filename: 	CEGUIMenuBaseProperties.h
+	created:	5/4/2005
+	author:		Tomas Lindquist Olsen (based on code by Paul D Turner)
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIMenuBaseProperties_h_
+#define _CEGUIMenuBaseProperties_h_
+
+#include "CEGUIProperty.h"
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+// Start of ItemListBaseProperties namespace section
+namespace MenuBaseProperties
+{
+
+/*!
+\brief
+	Property to access the item spacing of the menu.
+
+	\par Usage:
+		- Name: ItemSpacing
+		- Format: "[float]".
+
+	\par Where:
+		- [float] represents the item spacing of the menu.
+*/
+class ItemSpacing : public Property
+{
+public:
+	ItemSpacing() : Property(
+		"ItemSpacing",
+		"Property to get/set the item spacing of the menu.  Value is a float.",
+		"10.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the horz padding value of the menu.
+
+	\par Usage:
+		- Name: HorzPadding
+		- Format: "[float]".
+
+	\par Where:
+		- [float] represents the horz padding of the slider.
+*/
+class HorzPadding : public Property
+{
+public:
+	HorzPadding() : Property(
+		"HorzPadding",
+		"Property to get/set the horizontal padding of the menu.  Value is a float.",
+		"3.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the vert padding value of the menu.
+
+\par Usage:
+	- Name: VertPadding
+	- Format: "[float]".
+
+\par Where:
+	- [float] represents the vert padding of the slider.
+*/
+class VertPadding : public Property
+{
+public:
+	VertPadding() : Property(
+		"VertPadding",
+		"Property to get/set the vertical padding of the menu.  Value is a float.",
+		"3.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the border width of the menu.
+
+\par Usage:
+	- Name: BorderWidth
+	- Format: "[float]".
+
+\par Where:
+	- [float] represents the border width of the slider.
+*/
+class BorderWidth : public Property
+{
+public:
+	BorderWidth() : Property(
+		"BorderWidth",
+		"Property to get/set the border width of the menu.  Value is a float.",
+		"5.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the background colours of the menu.
+
+\par Usage:
+	- Name: BackgroundColours
+	- Format: "tl:aarrggbb tr:aarrggbb bl:aarrggbb br:aarrggbb".
+
+\par Where:
+	- aarrggbb is the ARGB colour value to be used for each corner of the ColourRect
+*/
+class BackgroundColours : public Property
+{
+public:
+	BackgroundColours() : Property(
+		"BackgroundColours",
+		"Property to get/set the background colours of the menu.  Value is a ColourRect.",
+		"tl:FFFFFFFF tr:FFFFFFFF bl:FFFFFFFF br:FFFFFFFF")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+    Property to access the state of the allow multiple popups setting.
+
+    \par Usage:
+	    - Name: AllowMultiplePopups
+	    - Format: "[text]".
+
+    \par Where [Text] is:
+	    - "True" to indicate that auto resizing is enabled.
+	    - "False" to indicate that auto resizing is disabled.
+*/
+class AllowMultiplePopups : public Property
+{
+public:
+    AllowMultiplePopups() : Property(
+	    "AllowMultiplePopups",
+	    "Property to get/set the state of the allow multiple popups setting for the menu.  Value is either \"True\" or \"False\".",
+	    "False")
+    {}
+
+    String	get(const PropertyReceiver* receiver) const;
+    void	set(PropertyReceiver* receiver, const String& value);
+};
+
+} // End of  MenuBaseProperties namespace section
+} // End of  CEGUI namespace section
+
+#endif	// end of guard _CEGUIMenuBaseProperties_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUISpinner.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUISpinner.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUISpinner.h	(revision 1092)
@@ -0,0 +1,437 @@
+/************************************************************************
+    filename: 	CEGUISpinner.h
+    created:	3/2/2005
+    author:		Paul D Turner
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUISpinner_h_
+#define _CEGUISpinner_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIWindow.h"
+#include "elements/CEGUISpinnerProperties.h"
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+    /*!
+    \brief
+        Base class for the Spinner widget.
+
+        The spinner widget has a text area where numbers may be entered
+        and two buttons which may be used to increase or decrease the
+        value in the text area by a user specified amount.
+    */
+    class CEGUIEXPORT Spinner : public Window
+    {
+    public:
+        /*!
+        \brief
+            Enumerated type specifying possible input and/or display modes for the spinner.
+        */
+        enum TextInputMode
+        {
+            FloatingPoint,  //!< Floating point decimal.
+            Integer,        //!< Integer decimal.
+            Hexadecimal,    //!< Hexadecimal.
+            Octal           //!< Octal
+        };
+
+        /*************************************************************************
+            Events system constants
+        *************************************************************************/
+        static const String EventNamespace;                 //!< Namespace for global events
+        static const String EventValueChanged;              //!< Event fired when the spinner value changes.
+        static const String EventStepChanged;               //!< Event fired when the step value changes.
+        static const String EventMaximumValueChanged;       //!< Event fired when the maximum spinner value changes.
+        static const String EventMinimumValueChanged;       //!< Event fired when the minimum spinner value changes.
+        static const String EventTextInputModeChanged;      //!< Event fired when the input/display mode is changed.
+
+        /*************************************************************************
+            Object Construction and Destruction
+        *************************************************************************/
+        /*!
+        \brief
+            Constructor for Spinner objects
+        */
+        Spinner(const String& type, const String& name);
+
+        /*!
+        \brief
+            Destructor for Spinner objects
+        */
+        virtual ~Spinner(void);
+
+	    /*!
+	    \brief
+		    Initialises the Window based object ready for use.
+
+	    \note
+		    This must be called for every window created.  Normally this is handled automatically by the WindowFactory for each Window type.
+
+	    \return
+		    Nothing
+	    */
+        void initialise(void);
+
+
+        /*************************************************************************
+        	Accessors
+        *************************************************************************/
+        /*!
+        \brief
+            Return the current spinner value.
+
+        \return
+            current float value of the Spinner.
+        */
+        float getCurrentValue(void) const;
+
+        /*!
+        \brief
+            Return the current step value.
+
+        \return
+            float step value.  This is the value added to the spinner vaue when the
+            up / down buttons are clicked.
+        */
+        float getStepSize(void) const;
+
+        /*!
+        \brief
+            Return the current maximum limit value for the Spinner.
+
+        \return
+            Maximum value that is allowed for the spinner.
+        */
+        float getMaximumValue(void) const;
+
+        /*!
+        \brief
+            Return the current minimum limit value for the Spinner.
+
+        \return
+            Minimum value that is allowed for the spinner.
+        */
+        float getMinimumValue(void) const;
+
+        /*!
+        \brief
+            Return the current text input / display mode setting.
+
+        \return
+            One of the TextInputMode enumerated values indicating the current
+            text input and display mode.
+        */
+        TextInputMode getTextInputMode(void) const;
+
+        /*************************************************************************
+        	Manipulators
+        *************************************************************************/
+        /*!
+        \brief
+            Set the current spinner value.
+
+        \param value
+            value to be assigned to the Spinner.
+
+        \return
+            Nothing.
+        */
+        void setCurrentValue(float value);
+
+        /*!
+        \brief
+            Set the current step value.
+
+        \param step
+            The value added to be the spinner value when the
+            up / down buttons are clicked.
+
+        \return
+            Nothing.
+        */
+        void setStepSize(float step);
+
+        /*!
+        \brief
+            Set the spinner maximum value.
+
+        \param maxValue
+            The maximum value to be allowed by the spinner.
+
+        \return
+            Nothing.
+        */
+        void setMaximumValue(float maxValue);
+
+        /*!
+        \brief
+            Set the spinner minimum value.
+
+        \param minVaue
+            The minimum value to be allowed by the spinner.
+
+        \return
+            Nothing.
+        */
+        void setMinimumValue(float minVaue);
+
+        /*!
+        \brief
+            Set the spinner input / display mode.
+
+        \param mode
+            One of the TextInputMode enumerated values indicating the text
+            input / display mode to be used by the spinner.
+
+        \return
+            Nothing.
+        */
+        void setTextInputMode(TextInputMode mode);
+
+    protected:
+        /*************************************************************************
+        	Constants
+        *************************************************************************/
+        static const String FloatValidator;      //!< Validator regex used for floating point mode.
+        static const String IntegerValidator;    //!< Validator regex used for decimal integer mode.
+        static const String HexValidator;        //!< Validator regex used for hexadecimal mode.
+        static const String OctalValidator;      //!< Validator regex used for octal mode.
+
+        /*************************************************************************
+        	Protected Implementation Methods
+        *************************************************************************/
+        /*!
+        \brief
+            Adds events specific to the Spinner base class.
+        
+        \return
+            Nothing.
+        */
+        void addSpinnerEvents(void);
+
+        /*!
+        \brief
+            Returns the numerical representation of the current editbox text.
+
+        \return
+            float value that is the numerical equivalent of the editbox text.
+
+        \exception InvalidRequestException  thrown if the text can not be converted.
+        */
+        virtual float getValueFromText(void) const;
+
+        /*!
+        \brief
+            Returns the textual representation of the current spinner value.
+
+        \return
+            String object that is equivalent to the the numerical value of the spinner.
+        */
+        virtual String getTextFromValue(void) const;
+
+
+		/*!
+		\brief
+			Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+		\param class_name
+			The class name that is to be checked.
+
+		\return
+			true if this window was inherited from \a class_name. false if not.
+		*/
+		virtual bool	testClassName_impl(const String& class_name) const
+		{
+			if (class_name==(const utf8*)"Spinner")	return true;
+			return Window::testClassName_impl(class_name);
+		}
+
+
+        /*************************************************************************
+        	Abstract Implementation methods
+        *************************************************************************/
+        /*!
+        \brief
+            Creates a PushButton based widget that will be used for the increase
+            button component of the Spinner widget.
+
+        \return
+            Pointer to a valid PushButton based object.
+        */
+        virtual PushButton* createIncreaseButton(void) const = 0;
+
+        /*!
+        \brief
+            Creates a PushButton based widget that will be used for the decrease
+            button component of the Spinner widget.
+
+        \return
+            Pointer to a valid PushButton based object.
+        */
+        virtual PushButton* createDecreaseButton(void) const = 0;
+
+        /*!
+        \brief
+            Creates an Editbox based widget that will be used for the text input
+            area of the spinner widget.
+
+        \return
+            Pointer to a valid Editbox based object.
+        */
+        virtual Editbox* createEditbox(void) const = 0;
+
+        /*!
+        \brief
+            Performs required layout of the component widgets that make up the
+            Spinner widget.
+
+        \return
+            Nothing.
+        */
+        virtual void layoutComponentWidgets(void) = 0;
+
+
+        /*************************************************************************
+        	Overrides for Event handler methods
+        *************************************************************************/
+        virtual void onSized(WindowEventArgs& e);
+        virtual	void onFontChanged(WindowEventArgs& e);
+        virtual void onTextChanged(WindowEventArgs& e);
+        virtual void onActivated(ActivationEventArgs& e);
+
+        /*************************************************************************
+        	New Event handler methods
+        *************************************************************************/
+        /*!
+        \brief
+            Method called when the spinner value changes.
+
+        \param e
+            WindowEventArgs object containing any relevant data.
+
+        \return
+            Nothing.
+        */
+        virtual void onValueChanged(WindowEventArgs& e);
+
+        /*!
+        \brief
+            Method called when the step value changes.
+
+        \param e
+            WindowEventArgs object containing any relevant data.
+
+        \return
+            Nothing.
+        */
+        virtual void onStepChanged(WindowEventArgs& e);
+
+        /*!
+        \brief
+            Method called when the maximum value setting changes.
+
+        \param e
+            WindowEventArgs object containing any relevant data.
+
+        \return
+            Nothing.
+        */
+        virtual void onMaximumValueChanged(WindowEventArgs& e);
+
+        /*!
+        \brief
+            Method called when the minimum value setting changes.
+
+        \param e
+            WindowEventArgs object containing any relevant data.
+
+        \return
+            Nothing.
+        */
+        virtual void onMinimumValueChanged(WindowEventArgs& e);
+
+        /*!
+        \brief
+            Method called when the text input/display mode is changed.
+
+        \param e
+            WindowEventArgs object containing any relevant data.
+
+        \return
+            Nothing.
+        */
+        virtual void onTextInputModeChanged(WindowEventArgs& e);
+
+        /*************************************************************************
+        	Internal event listener methods
+        *************************************************************************/
+        bool handleIncreaseButton(const EventArgs& e);
+        bool handleDecreaseButton(const EventArgs& e);
+        bool handleEditTextChange(const EventArgs& e);
+
+
+        /*************************************************************************
+        	Data Fields
+        *************************************************************************/
+        PushButton* d_increaseButton;   //!< Pointer to the increase button widget.
+        PushButton* d_decreaseButton;   //!< Pointer to the decrease button widget.
+        Editbox*    d_editbox;          //!< Pointer to the editbox widget.
+
+        float   d_stepSize;     //!< Step size value used y the increase & decrease buttons.
+        float   d_currentValue; //!< Numerical copy of the text in d_editbox.
+        float   d_maxValue;     //!< Maximum value for spinner.
+        float   d_minValue;     //!< Minimum value for spinner.
+        TextInputMode   d_inputMode;    //!< Current text display/input mode.
+
+    private:
+        /*************************************************************************
+        	Static properties for the Spinner widget
+        *************************************************************************/
+        static SpinnerProperties::CurrentValue  d_currentValueProperty;
+        static SpinnerProperties::StepSize      d_stepSizeProperty;
+        static SpinnerProperties::MaximumValue  d_maxValueProperty;
+        static SpinnerProperties::MinimumValue  d_minValueProperty;
+        static SpinnerProperties::TextInputMode d_textInputModeProperty;
+
+        /*************************************************************************
+        	Private Implementation Methods
+        *************************************************************************/
+        /*!
+        \brief
+            Adds properties supported by the Spinner class.
+
+        \return
+            Nothing.
+        */
+        void    addSpinnerProperties(void);
+    };
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUISpinner_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIComboDropList.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIComboDropList.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIComboDropList.h	(revision 1092)
@@ -0,0 +1,204 @@
+/************************************************************************
+	filename: 	CEGUIComboDropList.h
+	created:	13/6/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface for the Combobox Drop-List widget base class
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIComboDropList_h_
+#define _CEGUIComboDropList_h_
+
+#include "elements/CEGUIListbox.h"
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Base class for the combo box drop down list.  This is a specialisation of the Listbox class.
+*/
+class CEGUIEXPORT ComboDropList : public Listbox
+{
+public:
+	static const String EventNamespace;				//!< Namespace for global events
+
+
+	/*************************************************************************
+		Constants
+	*************************************************************************/
+	// Event names
+	static const String EventListSelectionAccepted;		//!< Event fired when the user confirms the selection by clicking the mouse.
+
+
+	/*!
+	\brief
+		Initialise the Window based object ready for use.
+
+	\note
+		This must be called for every window created.  Normally this is handled automatically by the WindowFactory for each Window type.
+
+	\return
+		Nothing
+	*/
+	virtual void	initialise(void);
+
+
+	/*!
+	\brief
+		Set whether the drop-list is 'armed' for selection.
+
+	\note
+		This setting is not exclusively under client control; the ComboDropList will auto-arm in
+		response to certain left mouse button events.  This is also dependant upon the autoArm
+		setting of the ComboDropList.
+
+	\param setting
+		- true to arm the box; items will be highlighted and the next left button up event
+		will cause dismissal and possible item selection.
+
+		- false to disarm the box; items will not be highlighted or selected until the box is armed.
+
+	\return
+		Nothing.
+	*/
+	void	setArmed(bool setting)		{ d_armed = setting; }
+
+
+	/*!
+	\brief
+		Return the 'armed' state of the ComboDropList.
+
+	\return
+		- true if the box is armed; items will be highlighted and the next left button up event
+		will cause dismissal and possible item selection.
+
+		- false if the box is not armed; items will not be highlighted or selected until the box is armed.
+	*/
+	bool	isArmed(void) const		{ return d_armed; }
+
+
+	/*!
+	\brief
+		Set the mode of operation for the ComboDropList.
+
+	\param setting
+		- true if the ComboDropList auto-arms when the mouse enters the box.
+		- false if the user must click to arm the box.
+
+	\return
+		Nothing.
+	*/
+	void	setAutoArmEnabled(bool setting)		{ d_autoArm = setting; }
+
+
+	/*!
+	\brief
+		returns the mode of operation for the drop-list
+
+	\return
+		- true if the ComboDropList auto-arms when the mouse enters the box.
+		- false if the user must click to arm the box.
+	*/
+	bool	isAutoArmEnabled(void) const		{ return d_autoArm; }
+
+
+	/*************************************************************************
+		Constructor & Destructor
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for ComboDropList base class
+	*/
+	ComboDropList(const String& type, const String& name);
+
+
+	/*!
+	\brief
+		Destructor for ComboDropList base class
+	*/
+	virtual ~ComboDropList(void);
+
+
+protected:
+	/*!
+	\brief
+		Add drop-list specific events
+	*/
+	void	addComboDropListEvents(void);
+
+
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	virtual bool	testClassName_impl(const String& class_name) const
+	{
+		if (class_name==(const utf8*)"ComboDropList")	return true;
+		return Listbox::testClassName_impl(class_name);
+	}
+	
+	/*************************************************************************
+		New event handlers
+	*************************************************************************/
+	/*!
+	\brief
+		Handler for when list selection is confirmed.
+	*/
+	void	onListSelectionAccepted(WindowEventArgs& e);
+
+
+	/*************************************************************************
+		Overridden Event handling
+	*************************************************************************/
+	virtual void	onMouseMove(MouseEventArgs& e);
+	virtual void	onMouseButtonDown(MouseEventArgs& e);
+	virtual void	onMouseButtonUp(MouseEventArgs& e);
+	virtual void	onCaptureLost(WindowEventArgs& e);
+	virtual void	onActivated(ActivationEventArgs& e);
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	bool	d_autoArm;		//!< true if the box auto-arms when the mouse enters it.
+	bool	d_armed;		//!< true when item selection has been armed.
+};
+
+} // End of  CEGUI namespace section
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUIComboDropList_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIItemListBase.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIItemListBase.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIItemListBase.h	(revision 1092)
@@ -0,0 +1,430 @@
+/************************************************************************
+	filename: 	CEGUIItemListBase.h
+	created:	31/3/2005
+	author:		Tomas Lindquist Olsen (based on original Listbox code by Paul D Turner)
+	
+	purpose:	Interface to base class for ItemListBase widgets
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIItemListBase_h_
+#define _CEGUIItemListBase_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIWindow.h"
+#include "elements/CEGUIItemListBaseProperties.h"
+#include "elements/CEGUIItemEntry.h"
+
+#include <vector>
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+/*!
+\brief
+	Base class for item list widgets.
+*/
+class CEGUIEXPORT ItemListBase : public Window
+{
+public:
+	static const String EventNamespace;				//!< Namespace for global events
+
+
+	/*************************************************************************
+		Constants
+	*************************************************************************/
+	// event names
+	static const String EventListContentsChanged;			//!< Event triggered when the contents of the list is changed.
+
+
+	/*************************************************************************
+		Accessor Methods
+	*************************************************************************/
+	/*!
+	\brief
+		Return number of items attached to the list
+
+	\return
+		the number of items currently attached to this list.
+	*/
+	size_t	getItemCount(void) const		{return d_listItems.size();}
+
+
+	/*!
+	\brief
+		Return the item at index position \a index.
+
+	\param index
+		Zero based index of the item to be returned.
+
+	\return
+		Pointer to the ItemEntry at index position \a index in the list.
+
+	\exception	InvalidRequestException	thrown if \a index is out of range.
+	*/
+	ItemEntry*	getItemFromIndex(size_t index) const;
+
+
+	/*!
+	\brief
+		Return the index of ItemEntry \a item
+
+	\param item
+		Pointer to a ItemEntry whos zero based index is to be returned.
+
+	\return
+		Zero based index indicating the position of ItemEntry \a item in the list.
+
+	\exception	InvalidRequestException	thrown if \a item is not attached to this list.
+	*/
+	size_t	getItemIndex(const ItemEntry* item) const;
+
+
+	/*!
+	\brief
+		Search the list for an item with the specified text
+
+	\param text
+		String object containing the text to be searched for.
+
+	\param start_item
+		ItemEntry where the search is to begin, the search will not include \a item.  If \a item is
+		NULL, the search will begin from the first item in the list.
+
+	\return
+		Pointer to the first ItemEntry in the list after \a item that has text matching \a text.  If
+		no item matches the criteria NULL is returned.
+
+	\exception	InvalidRequestException	thrown if \a item is not attached to this list box.
+	*/
+	ItemEntry*	findItemWithText(const String& text, const ItemEntry* start_item);
+
+
+	/*!
+	\brief
+		Return whether the specified ItemEntry is in the List
+
+	\return
+		true if ItemEntry \a item is in the list, false if ItemEntry \a item is not in the list.
+	*/
+	bool	isItemInList(const ItemEntry* item) const;
+
+
+	/*!
+	\brief
+		Return wheter this window is automatically resized to fit its content.
+
+	\return
+		true if automatic resizing is enabled, false if it is disabled.
+	*/
+	bool isAutoResizeEnabled() const		{return d_autoResize;}
+
+
+	/*************************************************************************
+		Manipulator Methods
+	*************************************************************************/
+	/*!
+	\brief
+		Initialise the Window based object ready for use.
+
+	\note
+		This must be called for every window created.  Normally this is handled automatically by the WindowFactory for each Window type.
+
+	\return
+		Nothing
+	*/
+	virtual void	initialise(void);
+
+
+	/*!
+	\brief
+		Remove all items from the list.
+
+		Note that this will cause 'AutoDelete' items to be deleted.
+	*/
+	void	resetList(void);
+
+
+	/*!
+	\brief
+		Add the given ItemEntry to the list.
+
+	\param item
+		Pointer to the ItemEntry to be added to the list.  Note that it is the passed object that is added to the
+		list, a copy is not made.  If this parameter is NULL, nothing happens.
+
+	\return
+		Nothing.
+	*/
+	void	addItem(ItemEntry* item);
+
+
+	/*!
+	\brief
+		Insert an item into the list after a specified item already in the list.
+
+		Note that if the list is sorted, the item may not end up in the requested position.
+
+	\param item
+		Pointer to the ItemEntry to be inserted.  Note that it is the passed object that is added to the
+		list, a copy is not made.  If this parameter is NULL, nothing happens.
+
+	\param position
+		Pointer to a ItemEntry that \a item is to be inserted after.  If this parameter is NULL, the item is
+		inserted at the start of the list.
+
+	\return
+		Nothing.
+	*/
+	void	insertItem(ItemEntry* item, const ItemEntry* position);
+
+
+	/*!
+	\brief
+		Removes the given item from the list.  If the item is has the auto delete state set, the item will be deleted.
+
+	\param item
+		Pointer to the ItemEntry that is to be removed.  If \a item is not attached to this list then nothing
+		will happen.
+
+	\return
+		Nothing.
+	*/
+	void	removeItem(ItemEntry* item);
+
+
+	/*!
+	\brief
+		Causes the list to update it's internal state after changes have been made to one or more
+		attached ItemEntry objects.
+
+		Client code must call this whenever it has made any changes to ItemEntry objects already attached to the
+		list.  If you are just adding items, or removed items to update them prior to re-adding them, there is
+		no need to call this method.
+
+	\return
+		Nothing.
+	*/
+	void	handleUpdatedItemData(void);
+
+
+	/*!
+	\brief
+		Set whether or not this ItemListBase widget should automatically resize to fit its content.
+
+	\param setting
+		Boolean value that if true enables automatic resizing, if false disables automatic resizing.
+
+	\return
+		Nothing.
+	*/
+	void setAutoResizeEnabled(bool setting);
+
+
+	/*!
+	\brief
+	Resize the ItemListBase to exactly fit the content that is attached to it.
+	Return a Rect object describing, in un-clipped pixels, the window relative area
+	that is to be used for rendering items.
+
+	\return
+	Nothing
+	*/
+	virtual	void	sizeToContent(void)		{sizeToContent_impl();}
+
+
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for ItemListBase base class.
+	*/
+	ItemListBase(const String& type, const String& name);
+
+
+	/*!
+	\brief
+		Destructor for ItemListBase base class.
+	*/
+	virtual ~ItemListBase(void);
+
+
+protected:
+	/*************************************************************************
+		Abstract Implementation Functions (must be provided by derived class)
+	*************************************************************************/
+	/*!
+	\brief
+		Resize the ItemListBase to exactly fit the content that is attached to it.
+		Return a Rect object describing, in un-clipped pixels, the window relative area
+		that is to be used for rendering items.
+
+	\return
+		Nothing
+	*/
+	virtual	void	sizeToContent_impl(void)		= 0;
+
+
+	/*!
+	\brief
+		Returns the Size in unclipped pixels of the content attached to this ItemListBase that is attached to it.
+
+	\return
+		Nothing.
+	*/
+	virtual Size getContentSize()		= 0;
+
+
+	/*!
+	\brief
+		Return a Rect object describing, in un-clipped pixels, the window relative area
+		that is to be used for rendering list items.
+
+	\return
+		Rect object describing the window relative area of the that is to be used for rendering
+		the items.
+	*/
+	virtual	Rect	getItemRenderArea(void) const		= 0;
+
+
+	/*!
+	\brief
+		Setup size and position for the item widgets attached to this ItemListBase
+
+	\return
+		Nothing.
+	*/
+	virtual void	layoutItemWidgets()	= 0;
+
+
+	/*!
+	\brief
+		Perform the actual rendering for this Window.
+
+	\param z
+		float value specifying the base Z co-ordinate that should be used when rendering
+
+	\return
+		Nothing
+	*/
+	virtual	void	drawSelf(float z) = 0;
+
+
+	/*************************************************************************
+		Implementation Functions
+	*************************************************************************/
+	/*!
+	\brief
+		Add list box specific events
+	*/
+	void	addItemListBaseEvents(void);
+
+
+	/*!
+	\brief
+		Remove all items from the list.
+
+	\note
+		Note that this will cause 'AutoDelete' items to be deleted.
+
+	\return
+		- true if the list contents were changed.
+		- false if the list contents were not changed (list already empty).
+	*/
+	bool	resetList_impl(void);
+
+
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	virtual bool	testClassName_impl(const String& class_name) const
+	{
+		if (class_name==(const utf8*)"ItemListBase")	return true;
+		return Window::testClassName_impl(class_name);
+	}
+
+	/*************************************************************************
+		New event handlers
+	*************************************************************************/
+	/*!
+	\brief
+		Handler called internally when the list contents are changed
+	*/
+	virtual	void	onListContentsChanged(WindowEventArgs& e);
+
+
+	/*************************************************************************
+		Overridden Event handlers
+	*************************************************************************/
+	virtual void	onSized(WindowEventArgs& e);
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	typedef	std::vector<ItemEntry*>	ItemEntryList;
+	ItemEntryList	d_listItems;		//!< list of items in the list.
+
+	// boolean telling if this ItemListBase widget should automatically resize to fit its content.
+	bool d_autoResize;
+
+private:
+	/*************************************************************************
+	Static Properties for this class
+	*************************************************************************/
+	static ItemListBaseProperties::AutoResizeEnabled	d_autoResizeEnabledProperty;
+
+
+	/*************************************************************************
+		Private methods
+	*************************************************************************/
+	void	addItemListBaseProperties(void);
+
+
+	/*!
+	\brief
+		Add given window to child list at an appropriate position
+	*/
+	virtual void	addChild_impl(Window* wnd);
+};
+
+} // End of  CEGUI namespace section
+
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUIItemListBase_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUICheckbox.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUICheckbox.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUICheckbox.h	(revision 1092)
@@ -0,0 +1,177 @@
+/************************************************************************
+	filename: 	CEGUICheckbox.h
+	created:	13/4/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to base class for Checkbox Widget
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUICheckbox_h_
+#define _CEGUICheckbox_h_
+
+#include "CEGUIBase.h"
+#include "elements/CEGUIButtonBase.h"
+#include "elements/CEGUICheckboxProperties.h"
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+/*!
+\brief
+	Base class providing logic for Check-box widgets
+*/
+class CEGUIEXPORT Checkbox : public ButtonBase
+{
+public:
+	static const String EventNamespace;				//!< Namespace for global events
+
+	/*************************************************************************
+		Event name constants
+	*************************************************************************/
+	// generated internally by Window
+	static const String EventCheckStateChanged;			//!< The check-state of the widget has changed.
+
+
+	/*************************************************************************
+		Accessor Functions
+	*************************************************************************/
+	/*!
+	\brief
+		return true if the check-box is selected (has the checkmark)
+
+	\return
+		true if the widget is selected and has the check-mark, false if the widget
+		is not selected and does not have the check-mark.
+	*/
+	bool	isSelected(void) const						{return d_selected;}
+
+
+	/*************************************************************************
+		Manipulator Functions
+	*************************************************************************/
+	/*!
+	\brief
+		set whether the check-box is selected or not
+
+	\param select
+		true to select the widget and give it the check-mark.  false to de-select the widget and
+		remove the check-mark.
+
+	\return
+		Nothing.
+	*/
+	void	setSelected(bool select);
+
+
+	/*************************************************************************
+		Construction / Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for Checkbox class.
+	*/
+	Checkbox(const String& type, const String& name);
+
+
+	/*!
+	\brief
+		Destructor for Checkbox class.
+	*/
+	virtual ~Checkbox(void);
+
+
+protected:
+	/*************************************************************************
+		New event handlers
+	*************************************************************************/
+	/*!
+	\brief
+		event triggered internally when state of check-box changes
+	*/
+	virtual void	onSelectStateChange(WindowEventArgs& e);
+
+
+	/*************************************************************************
+		Overridden event handlers
+	*************************************************************************/
+	virtual void	onMouseButtonUp(MouseEventArgs& e);
+
+
+	/*************************************************************************
+		Implementation Functions
+	*************************************************************************/
+	/*!
+	\brief
+		Add check-box specific events
+	*/
+	void	addCheckboxEvents(void);
+
+
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	virtual bool	testClassName_impl(const String& class_name) const
+	{
+		if (class_name==(const utf8*)"Checkbox")	return true;
+		return ButtonBase::testClassName_impl(class_name);
+	}
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	bool		d_selected;					//!< true if check-box is selected (has checkmark)
+
+private:
+	/*************************************************************************
+		Static Properties for this class
+	*************************************************************************/
+	static CheckboxProperties::Selected	d_selectedProperty;
+
+
+	/*************************************************************************
+		Private methods
+	*************************************************************************/
+	void	addCheckboxProperties(void);
+};
+
+} // End of  CEGUI namespace section
+
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUICheckbox_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIScrolledContainerProperties.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIScrolledContainerProperties.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIScrolledContainerProperties.h	(revision 1092)
@@ -0,0 +1,123 @@
+/************************************************************************
+	filename: 	CEGUIScrolledContainerProperties.h
+	created:	3/3/2005
+	author:		Paul D Turner
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIScrolledContainerProperties_h_
+#define _CEGUIScrolledContainerProperties_h_
+
+#include "CEGUIProperty.h"
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+// Start of ScrolledContainerProperties namespace section
+/*!
+\brief
+	Namespace containing all classes that make up the properties interface for the ScrolledContainer class
+*/
+namespace ScrolledContainerProperties
+{
+    /*!
+    \brief
+        Property to access the setting which controls whether the content pane is automatically
+        resized according to the size and position of attached content.
+
+    \par Usage:
+        - Name: ContentPaneAutoSized
+        - Format: "[text]"
+
+    \par Where [Text] is:
+        - "True" to indicate the pane should automatically resize itself.
+        - "False" to indicate the pane should not automatically resize itself.
+    */
+    class ContentPaneAutoSized : public Property
+    {
+    public:
+        ContentPaneAutoSized() : Property(
+            "ContentPaneAutoSized",
+            "Property to get/set the setting which controls whether the content pane will auto-size itself.  Value is either \"True\" or \"False\".",
+            "True")
+        {}
+
+        String	get(const PropertyReceiver* receiver) const;
+        void	set(PropertyReceiver* receiver, const String& value);
+    };
+
+    /*!
+    \brief
+       Property to access the current content pane area rectangle (as window relative pixels).
+
+    \par Usage:
+        - Name: ContentArea
+        - Format: "l:[float] t:[float] r:[float] b:[float]".
+
+    \par Where:
+        - l:[float]	specifies the position of the left edge of the area as a floating point number.
+        - t:[float]	specifies the position of the top edge of the area as a floating point number.
+        - r:[float]	specifies the position of the right edge of the area as a floating point number.
+        - b:[float]	specifies the position of the bottom edge of the area as a floating point number.
+    */
+    class ContentArea : public Property
+    {
+    public:
+        ContentArea() : Property(
+            "ContentArea",
+            "Property to get/set the current content area rectangle of the content pane.  Value is \"l:[float] t:[float] r:[float] b:[float]\" (where l is left, t is top, r is right, and b is bottom).",
+            "l:0.000000 t:0.000000 r:0.000000 b:0.000000")
+        {}
+
+        String	get(const PropertyReceiver* receiver) const;
+        void	set(PropertyReceiver* receiver, const String& value);
+    };
+
+    /*!
+    \brief
+        Property offering read-only access to the current content extents rectangle (as window relative pixels).
+
+    \par Usage:
+        - Name: ChildExtentsArea
+        - Format: "l:[float] t:[float] r:[float] b:[float]".
+
+    \par Where:
+        - l:[float]	specifies the position of the left edge of the area as a floating point number.
+        - t:[float]	specifies the position of the top edge of the area as a floating point number.
+        - r:[float]	specifies the position of the right edge of the area as a floating point number.
+        - b:[float]	specifies the position of the bottom edge of the area as a floating point number.
+    */
+    class ChildExtentsArea : public Property
+    {
+    public:
+        ChildExtentsArea() : Property(
+            "ChildExtentsArea",
+            "Property to get the current content extents rectangle.  Value is \"l:[float] t:[float] r:[float] b:[float]\" (where l is left, t is top, r is right, and b is bottom).",
+            "l:0.000000 t:0.000000 r:0.000000 b:0.000000")
+        {}
+
+        String	get(const PropertyReceiver* receiver) const;
+        void	set(PropertyReceiver* receiver, const String& value);
+    };
+
+} // End of  ScrolledContainerProperties namespace section
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIScrolledContainerProperties_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIPopupMenu.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIPopupMenu.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIPopupMenu.h	(revision 1092)
@@ -0,0 +1,227 @@
+/************************************************************************
+	filename: 	CEGUIPopupMenu.h
+	created:	27/3/2005
+	author:		Tomas Lindquist Olsen (based on code by Paul D Turner)
+	
+	purpose:	Interface to base class for PopupMenu widget
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIPopupMenu_h_
+#define _CEGUIPopupMenu_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIWindow.h"
+#include "elements/CEGUIPopupMenuProperties.h"
+#include "elements/CEGUIMenuBase.h"
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+/*!
+\brief
+	Base class for popup menus
+*/
+class CEGUIEXPORT PopupMenu : public MenuBase
+{
+public:
+	static const String EventNamespace;				//!< Namespace for global events
+
+	/*************************************************************************
+		Accessor type functions
+	*************************************************************************/
+	/*!
+	\brief
+		Get the fade in time for this popup menu.
+
+	\return
+		The time in seconds that it takes for the popup to fade in.
+		0 if fading is disabled.
+	*/
+	float	getFadeInTime(void) const			{return d_fadeInTime;}
+
+
+	/*!
+	\brief
+		Get the fade out time for this popup menu.
+
+	\return
+		The time in seconds that it takes for the popup to fade out.
+		0 if fading is disabled.
+	*/
+	float	getFadeOutTime(void) const			{return d_fadeOutTime;}
+
+
+	/*************************************************************************
+		Manipulators
+	*************************************************************************/
+	/*!
+	\brief
+		Set the fade in time for this popup menu.
+
+	\param fadetime
+		The time in seconds that it takes for the popup to fade in.
+		If this parameter is zero, fading is disabled.
+	*/
+	void	setFadeInTime(float fadetime)		{d_fadeInTime=fadetime;}
+
+
+	/*!
+	\brief
+		Set the fade out time for this popup menu.
+
+	\param fadetime
+		The time in seconds that it takes for the popup to fade out.
+		If this parameter is zero, fading is disabled.
+	*/
+	void	setFadeOutTime(float fadetime)		{d_fadeOutTime=fadetime;}
+
+	/*!
+	\brief
+		Tells the popup menu to open.
+	*/
+	void	openPopupMenu(void);
+
+
+	/*!
+	\brief
+		Tells the popup menu to close.
+	*/
+	void	closePopupMenu(void);
+
+
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for PopupMenu objects
+	*/
+	PopupMenu(const String& type, const String& name);
+
+
+	/*!
+	\brief
+		Destructor for PopupMenu objects
+	*/
+	virtual ~PopupMenu(void);
+
+
+protected:
+	/*************************************************************************
+		Implementation Functions
+	*************************************************************************/
+	/*!
+	\brief
+	Perform actual update processing for this Window.
+
+	\param elapsed
+	float value indicating the number of seconds elapsed since the last update call.
+
+	\return
+	Nothing.
+	*/
+	virtual void	updateSelf(float elapsed);
+
+
+	/*!
+	\brief
+		Setup size and position for the item widgets attached to this Listbox
+
+	\return
+		Nothing.
+	*/
+	virtual void	layoutItemWidgets(void);
+
+
+	/*!
+	\brief
+		Resizes the popup menu to exactly fit the content that is attached to it.
+
+	\return
+		Nothing.
+	*/
+	virtual Size getContentSize(void);
+
+
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	virtual bool	testClassName_impl(const String& class_name) const
+	{
+		if (class_name==(const utf8*)"PopupMenu")	return true;
+		return MenuBase::testClassName_impl(class_name);
+	}
+
+
+	/*************************************************************************
+		Overridden event handlers
+	*************************************************************************/
+	virtual void onAlphaChanged(WindowEventArgs& e);
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	float d_origAlpha;			//!< The original alpha of this window.
+
+	float d_fadeElapsed;		//!< The time in seconds this popup menu has been fading.
+	float d_fadeOutTime;		//!< The time in seconds it takes for this popup menu to fade out.
+	float d_fadeInTime;			//!< The time in seconds it takes for this popup menu to fade in.
+	bool d_fading;				//!< true if this popup menu is fading in/out. false if not
+	bool d_fadingOut;			//!< true if this popup menu is fading out. false if fading in.
+
+private:
+	/*************************************************************************
+	Static Properties for this class
+	*************************************************************************/
+	static PopupMenuProperties::FadeInTime	d_fadeInTimeProperty;
+	static PopupMenuProperties::FadeOutTime	d_fadeOutTimeProperty;
+
+
+	/*************************************************************************
+	Private methods
+	*************************************************************************/
+	void	addPopupMenuProperties(void);
+};
+
+} // End of  CEGUI namespace section
+
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+
+#endif	// end of guard _CEGUIPopupMenu_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUISpinnerProperties.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUISpinnerProperties.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUISpinnerProperties.h	(revision 1092)
@@ -0,0 +1,165 @@
+/************************************************************************
+	filename: 	CEGUISpinnerProperties.h
+	created:	7/2/2005
+	author:		Paul D Turner
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUISpinnerProperties_h_
+#define _CEGUISpinnerProperties_h_
+
+#include "CEGUIProperty.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+// Start of SpinnerProperties namespace section
+namespace SpinnerProperties
+{
+    /*!
+    \brief
+	    Property to access the current value of the spinner.
+
+	    \par Usage:
+		    - Name: CurrentValue
+		    - Format: "[float]".
+
+	    \par Where:
+		    - [float] represents the current value of the Spinner widget.
+    */
+    class CurrentValue : public Property
+    {
+    public:
+	    CurrentValue() : Property(
+		    "CurrentValue",
+		    "Property to get/set the current value of the spinner.  Value is a float.",
+		    "0.000000")
+	    {}
+
+	    String get(const PropertyReceiver* receiver) const;
+	    void set(PropertyReceiver* receiver, const String& value);
+    };
+
+    /*!
+    \brief
+	    Property to access the step size of the spinner.
+
+	    \par Usage:
+		    - Name: StepSize
+		    - Format: "[float]".
+
+	    \par Where:
+		    - [float] represents the current value of the Spinner widget.
+    */
+    class StepSize : public Property
+    {
+    public:
+	    StepSize() : Property(
+		    "StepSize",
+		    "Property to get/set the step size of the spinner.  Value is a float.",
+		    "1.000000")
+	    {}
+
+	    String get(const PropertyReceiver* receiver) const;
+	    void set(PropertyReceiver* receiver, const String& value);
+    };
+
+    /*!
+    \brief
+	    Property to access the minimum value setting of the spinner.
+
+	    \par Usage:
+		    - Name: MinimumValue
+		    - Format: "[float]".
+
+	    \par Where:
+		    - [float] represents the current minimum value of the Spinner widget.
+    */
+    class MinimumValue : public Property
+    {
+    public:
+	    MinimumValue() : Property(
+		    "MinimumValue",
+		    "Property to get/set the minimum value setting of the spinner.  Value is a float.",
+		    "-32768.000000")
+	    {}
+
+	    String get(const PropertyReceiver* receiver) const;
+	    void set(PropertyReceiver* receiver, const String& value);
+    };
+
+    /*!
+    \brief
+	    Property to access the maximum value setting of the spinner.
+
+	    \par Usage:
+		    - Name: MaximumValue
+		    - Format: "[float]".
+
+	    \par Where:
+		    - [float] represents the current maximum value of the Spinner widget.
+    */
+    class MaximumValue : public Property
+    {
+    public:
+	    MaximumValue() : Property(
+		    "MaximumValue",
+		    "Property to get/set the maximum value setting of the spinner.  Value is a float.",
+		    "32767.000000")
+	    {}
+
+	    String get(const PropertyReceiver* receiver) const;
+	    void set(PropertyReceiver* receiver, const String& value);
+    };
+
+    /*!
+    \brief
+	    Property to access the TextInputMode setting.
+
+	    This property offers access the text display and input mode for the spinner.
+
+	    \par Usage:
+		    - Name: TextInputMode
+		    - Format: "[text]".
+
+	    \par Where [text] is:
+		    - "FloatingPoint" for floating point decimal numbers.
+		    - "Integer" for integer decimal numbers.
+            - "Hexadecimal" for hexadecimal numbers.
+            - "Octal" for octal numbers.
+    */
+    class TextInputMode : public Property
+    {
+    public:
+	    TextInputMode() : Property(
+		    "TextInputMode",
+		    "Property to get/set the TextInputMode setting for the spinner.  Value is \"FloatingPoint\", \"Integer\", \"Hexadecimal\", or \"Octal\".",
+		    "Integer")
+	    {}
+
+	    String	get(const PropertyReceiver* receiver) const;
+	    void	set(PropertyReceiver* receiver, const String& value);
+    };
+
+} // End of  SpinnerProperties namespace section
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUISpinnerProperties_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIStaticText.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIStaticText.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIStaticText.h	(revision 1092)
@@ -0,0 +1,425 @@
+/************************************************************************
+	filename: 	CEGUIStaticText.h
+	created:	4/6/2004
+	author:		Paul D Turner
+	
+	purpose:	Defines interface for a static text widget
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIStaticText_h_
+#define _CEGUIStaticText_h_
+
+#include "elements/CEGUIStatic.h"
+#include "elements/CEGUIStaticTextProperties.h"
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Base class for a static text widget.
+*/
+class CEGUIEXPORT StaticText : public Static
+{
+public:
+	static const String EventNamespace;				//!< Namespace for global events
+
+
+	/*************************************************************************
+		Formatting Enumerations
+	*************************************************************************/
+	/*!
+	\brief
+		Enumeration of horizontal formatting options for static text widgets
+	*/
+	enum HorzFormatting
+	{
+		LeftAligned,			//!< Text is output as a single line of text with the first character aligned with the left edge of the widget.
+		RightAligned,			//!< Text is output as a single line of text with the last character aligned with the right edge of the widget.
+		HorzCentred,			//!< Text is output as a single line of text horizontally centred within the widget.
+		HorzJustified,			//!< Text is output as a single line of text with the first and last characters aligned with the edges of the widget.
+		WordWrapLeftAligned,	//!< Text is output as multiple word-wrapped lines of text with the first character of each line aligned with the left edge of the widget.
+		WordWrapRightAligned,	//!< Text is output as multiple word-wrapped lines of text with the last character of each line aligned with the right edge of the widget.
+		WordWrapCentred,		//!< Text is output as multiple word-wrapped lines of text with each line horizontally centered within the widget.
+		WordWrapJustified		//!< Text is output as multiple word-wrapped lines of text with the first and last characters of each line aligned with the edges of the widget.
+	};
+
+
+	/*!
+	\brief
+		Enumeration of vertical formatting options for a static text widgets
+	*/
+	enum VertFormatting
+	{
+		TopAligned,		//!< Text is output with the top of first line of text aligned with the top edge of the widget.
+		BottomAligned,	//!< Text is output with the bottom of last line of text aligned with the bottom edge of the widget.
+		VertCentred     //!< Text is output vertically centred within the widget.
+	};
+
+
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for static text widgets.
+	*/
+	StaticText(const String& type, const String& name);
+
+
+	/*!
+	\brief
+		Destructor for static text widgets.
+	*/
+	virtual ~StaticText(void);
+
+
+	/*************************************************************************
+		Accessors
+	*************************************************************************/
+	/*!
+	\brief
+		Return a ColourRect object containing the colours used when rendering this widget.
+
+	\return
+		ColourRect object initialised with the colours used when rendering the text for this widget.
+	*/
+	ColourRect	getTextColours(void) const		{return d_textCols;}
+
+	
+	/*!
+	\brief
+		Return the current horizontal formatting option set for this widget.
+
+	\return
+		One of the StaticText::HorzFormatting enumerated values specifying the horizontal formatting currently set.
+	*/
+	HorzFormatting	getHorizontalFormatting(void) const		{return	d_horzFormatting;}
+
+
+	/*!
+	\brief
+		Return the current vertical formatting option set for this widget.
+
+	\return
+		One of the StaticText::VertFormatting enumerated values specifying the vertical formatting currently set.
+	*/
+	VertFormatting	getVerticalFormatting(void) const		{return	d_vertFormatting;}
+
+
+	/*!
+	\brief
+		Return whether the vertical scroll bar is set to be shown if needed.
+
+	\return
+		- true if the vertical scroll bar will be shown if needed (top or bottom aligned formatting only).
+		- false if the vertical scroll bar will never be shown (default behaviour).
+	*/
+	bool	isVerticalScrollbarEnabled(void) const;
+
+
+	/*!
+	\brief
+		Return whether the horizontal scroll bar is set to be shown if needed.
+
+	\return
+		- true if the horizontal scroll bar will be shown if needed (non-word wrapped, left or right aligned formatting only).
+		- false if the horizontal scroll bar will never be shown (default behaviour).
+	*/
+	bool	isHorizontalScrollbarEnabled(void) const;
+
+
+	// overridden (again) so scroll bars are not clipped when they are active
+	virtual Rect	getUnclippedInnerRect(void) const;
+
+
+	/*************************************************************************
+		Manipulators
+	*************************************************************************/
+	/*!
+	\brief
+		Initialise the Window based object ready for use.
+
+	\note
+		This must be called for every window created.  Normally this is handled automatically by the WindowFactory for each Window type.
+
+	\return
+		Nothing
+	*/
+	virtual void	initialise(void);
+
+
+	/*!
+	\brief
+		Sets the colours to be applied when rendering the text.
+
+	\param colours
+		ColourRect object describing the colours to be used for each text glyph rendered.
+
+	\return 
+		Nothing.
+	*/
+	void	setTextColours(const ColourRect& colours);
+
+
+	/*!
+	\brief
+		Sets the colours to be applied when rendering the text.
+
+	\param top_left_colour
+		Colour to be applied to the top-left corner of each text glyph rendered.
+
+	\param top_right_colour
+		Colour to be applied to the top-right corner of each text glyph rendered.
+
+	\param bottom_left_colour
+		Colour to be applied to the bottom-left corner of each text glyph rendered.
+
+	\param bottom_right_colour
+		Colour to be applied to the bottom-right corner of each text glyph rendered.
+
+	\return 
+		Nothing.
+	*/
+	void	setTextColours(const colour& top_left_colour, const colour& top_right_colour, const colour& bottom_left_colour, const colour& bottom_right_colour);
+
+
+	/*!
+	\brief
+		Sets the colour to be applied when rendering the text.
+
+	\param col
+		colour value to be used when rendering.
+
+	\return
+		Nothing.
+	*/
+	void	setTextColours(const colour& col)		{setTextColours(col, col, col, col);}
+
+
+	/*!
+	\brief
+		Set the formatting required for the text.
+
+	\param h_fmt
+		One of the HorzFormatting enumerated values specifying the formatting required.
+
+	\param v_fmt
+		One of the VertFormatting enumerated values specifying the formatting required.
+
+	\return
+		Nothing
+	*/
+	void	setFormatting(HorzFormatting h_fmt, VertFormatting v_fmt);
+
+
+	/*!
+	\brief
+		Set the formatting required for the text.
+
+	\param v_fmt
+		One of the VertFormatting enumerated values specifying the formatting required.
+
+	\return
+		Nothing
+	*/
+	void	setVerticalFormatting(VertFormatting v_fmt);
+
+
+	/*!
+	\brief
+		Set the formatting required for the text.
+
+	\param h_fmt
+		One of the HorzFormatting enumerated values specifying the formatting required.
+
+	\return
+		Nothing
+	*/
+	void	setHorizontalFormatting(HorzFormatting h_fmt);
+
+
+	/*!
+	\brief
+		Set whether the vertical scroll bar will be shown if needed.
+
+	\param setting
+		- true if the vertical scroll bar should be shown if needed (top or bottom aligned formatting only).
+		- false if the vertical scroll bar should never be shown (default behaviour).
+	*/
+	void	setVerticalScrollbarEnabled(bool setting);
+
+
+	/*!
+	\brief
+		Set whether the horizontal scroll bar will be shown if needed.
+
+	\param setting
+		- true if the horizontal scroll bar should be shown if needed (non-word wrapped, left or right aligned formatting only).
+		- false if the horizontal scroll bar should never be shown (default behaviour).
+	*/
+	void	setHorizontalScrollbarEnabled(bool setting);
+
+
+protected:
+	/*************************************************************************
+		Overridden from base class
+	*************************************************************************/
+	/*!
+	\brief
+		Perform the actual rendering for this Window.
+
+	\param z
+		float value specifying the base Z co-ordinate that should be used when rendering
+
+	\return
+		Nothing
+	*/
+	virtual	void	drawSelf(float z);
+
+
+	/*************************************************************************
+		Overridden events
+	*************************************************************************/
+	virtual void	onTextChanged(WindowEventArgs& e);
+	virtual void	onSized(WindowEventArgs& e);
+	virtual	void	onFontChanged(WindowEventArgs& e);
+	virtual void	onMouseWheel(MouseEventArgs& e);
+
+
+	/*************************************************************************
+		Implementation methods
+	*************************************************************************/
+	/*!
+	\brief
+		Return a Rect object describing, in un-clipped pixels, the window relative area
+		that the text should be rendered in to.
+
+	\return
+		Rect object describing the area of the Window to be used for rendering text.
+	*/
+	virtual	Rect	getTextRenderArea(void) const;
+
+
+	/*!
+	\brief
+		Setup size and position for the component widgets attached to this StaticText
+
+	\return
+		Nothing.
+	*/
+	virtual void	layoutComponentWidgets();
+
+
+	/*!
+	\brief
+		display required integrated scroll bars according to current state of the edit box and update their values.
+	*/
+	void	configureScrollbars(void);
+
+
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	virtual bool	testClassName_impl(const String& class_name) const
+	{
+		if (class_name==(const utf8*)"StaticText")	return true;
+		return Static::testClassName_impl(class_name);
+	}
+
+
+	/*************************************************************************
+		Implementation Methods (abstract)
+	*************************************************************************/
+	/*!
+	\brief
+		create and return a pointer to a Scrollbar widget for use as vertical scroll bar
+
+	\return
+		Pointer to a Scrollbar to be used for scrolling vertically.
+	*/
+	virtual Scrollbar*	createVertScrollbar(void) const		= 0;
+ 
+
+	/*!
+	\brief
+		create and return a pointer to a Scrollbar widget for use as horizontal scroll bar
+
+	\return
+		Pointer to a Scrollbar to be used for scrolling horizontally.
+	*/
+	virtual Scrollbar*	createHorzScrollbar(void) const		= 0;
+
+
+	/*************************************************************************
+		Event subscribers
+	*************************************************************************/
+	bool	handleScrollbarChange(const EventArgs& e);
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	HorzFormatting	d_horzFormatting;		//!< Horizontal formatting to be applied to the text.
+	VertFormatting	d_vertFormatting;		//!< Vertical formatting to be applied to the text.
+	ColourRect		d_textCols;				//!< Colours used when rendering the text.
+	Scrollbar*		d_vertScrollbar;		//!< Widget used as vertical scrollbar;
+	Scrollbar*		d_horzScrollbar;		//!< Widget used as horizontal scrollbar;
+	bool			d_enableVertScrollbar;	//!< true if vertical scroll bar is enabled.
+	bool			d_enableHorzScrollbar;	//!< true if horizontal scroll bar is enabled.
+
+private:
+	/*************************************************************************
+		Static Properties for this class
+	*************************************************************************/
+	static StaticTextProperties::TextColours	d_textColoursProperty;
+	static StaticTextProperties::VertFormatting	d_vertFormattingProperty;
+	static StaticTextProperties::HorzFormatting	d_horzFormattingProperty;
+	static StaticTextProperties::VertScrollbar	d_vertScrollbarProperty;
+	static StaticTextProperties::HorzScrollbar	d_horzScrollbarProperty;
+
+
+	/*************************************************************************
+		Private methods
+	*************************************************************************/
+	void	addStaticTextProperties(void);
+};
+
+} // End of  CEGUI namespace section
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUIStaticText_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIScrollbarProperties.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIScrollbarProperties.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIScrollbarProperties.h	(revision 1092)
@@ -0,0 +1,171 @@
+/************************************************************************
+	filename: 	CEGUIScrollbarProperties.h
+	created:	10/7/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface for Scrollbar properties
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIScrollbarProperties_h_
+#define _CEGUIScrollbarProperties_h_
+
+#include "CEGUIProperty.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+// Start of ScrollbarProperties namespace section
+/*!
+\brief
+	Namespace containing all classes that make up the properties interface for the Scrollbar class
+*/
+namespace ScrollbarProperties
+{
+/*!
+\brief
+	Property to access the document size for the Scrollbar.
+
+	\par Usage:
+		- Name: DocumentSize
+		- Format: "[float]".
+
+	\par Where:
+		- [float] specifies the size of the document being scrolled (as defined by the client code).
+*/
+class DocumentSize : public Property
+{
+public:
+	DocumentSize() : Property(
+		"DocumentSize",
+		"Property to get/set the document size for the Scrollbar.  Value is a float.",
+		"1.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the page size for the Scrollbar.
+
+	\par Usage:
+		- Name: PageSize
+		- Format: "[float]".
+
+	\par Where:
+		- [float] specifies the size of the visible page (as defined by the client code).
+*/
+class PageSize : public Property
+{
+public:
+	PageSize() : Property(
+		"PageSize",
+		"Property to get/set the page size for the Scrollbar.  Value is a float.",
+		"0.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the step size for the Scrollbar.
+
+	\par Usage:
+		- Name: StepSize
+		- Format: "[float]".
+
+	\par Where:
+		- [float] specifies the size of the increase/decrease button step (as defined by the client code).
+*/
+class StepSize : public Property
+{
+public:
+	StepSize() : Property(
+		"StepSize",
+		"Property to get/set the step size for the Scrollbar.  Value is a float.",
+		"1.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the overlap size for the Scrollbar.
+
+	\par Usage:
+		- Name: OverlapSize
+		- Format: "[float]".
+
+	\par Where:
+		- [float] specifies the size of the per-page overlap (as defined by the client code).
+*/
+class OverlapSize : public Property
+{
+public:
+	OverlapSize() : Property(
+		"OverlapSize",
+		"Property to get/set the overlap size for the Scrollbar.  Value is a float.",
+		"0.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+/*!
+\brief
+	Property to access the scroll position of the Scrollbar.
+
+	\par Usage:
+		- Name: ScrollPosition
+		- Format: "[float]".
+
+	\par Where:
+		- [float] specifies the current scroll position / value of the Scrollbar.
+*/
+class ScrollPosition : public Property
+{
+public:
+	ScrollPosition() : Property(
+		"ScrollPosition",
+		"Property to get/set the scroll position of the Scrollbar.  Value is a float.",
+		"0.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+} // End of  ScrollbarProperties namespace section
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIScrollbarProperties_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUICheckboxProperties.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUICheckboxProperties.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUICheckboxProperties.h	(revision 1092)
@@ -0,0 +1,75 @@
+/************************************************************************
+	filename: 	CEGUICheckboxProperties.h
+	created:	9/7/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to properties for the Checkbox class
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUICheckboxProperties_h_
+#define _CEGUICheckboxProperties_h_
+
+#include "CEGUIProperty.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+// Start of CheckboxProperties namespace section
+/*!
+\brief
+	Namespace containing all classes that make up the properties interface for the Checkbox class
+*/
+namespace CheckboxProperties
+{
+/*!
+\brief
+	Property to access the selected state of the check box.
+
+	This property offers access to the select state for the Checkbox object.
+
+	\par Usage:
+		- Name: Selected
+		- Format: "[text]".
+
+	\par Where [Text] is:
+		- "True" to indicate the check box is selected (has check mark).
+		- "False" to indicate the check box is not selected (does not have check mark).
+*/
+class Selected : public Property
+{
+public:
+	Selected() : Property(
+		"Selected",
+		"Property to get/set the selected state of the Checkbox.  Value is either \"True\" or \"False\".",
+		"False")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+} // End of  CheckboxProperties namespace section
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUICheckboxProperties_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIMultiColumnList.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIMultiColumnList.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIMultiColumnList.h	(revision 1092)
@@ -0,0 +1,1589 @@
+/************************************************************************
+	filename: 	CEGUIMultiColumnList.h
+	created:	13/4/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to base class for MultiColumnList widget
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIMultiColumnList_h_
+#define _CEGUIMultiColumnList_h_
+
+#include "CEGUIBase.h"
+#include "CEGUIWindow.h"
+#include "CEGUIListHeader.h"
+#include "elements/CEGUIMultiColumnListProperties.h"
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+/*!
+\brief
+	Simple grid index structure.
+*/
+struct CEGUIEXPORT MCLGridRef
+{
+	MCLGridRef(uint r, uint c) : row(r), column(c) {}
+
+	uint	row;		//!< Zero based row index.
+	uint	column;		//!< Zero based column index.
+
+	// operators
+	MCLGridRef& operator=(const MCLGridRef& rhs);
+	bool operator<(const MCLGridRef& rhs) const;
+	bool operator<=(const MCLGridRef& rhs) const;
+	bool operator>(const MCLGridRef& rhs) const;
+	bool operator>=(const MCLGridRef& rhs) const;
+	bool operator==(const MCLGridRef& rhs) const;
+	bool operator!=(const MCLGridRef& rhs) const;
+};
+
+
+/*!
+\brief
+	Base class for the multi column list widget.
+*/
+class CEGUIEXPORT MultiColumnList : public Window
+{
+public:
+	static const String EventNamespace;				//!< Namespace for global events
+
+
+	/*************************************************************************
+		Constants
+	*************************************************************************/
+	// Event names
+	static const String EventSelectionModeChanged;		//!< Event fired when the selection mode for the list box changes.
+	static const String EventNominatedSelectColumnChanged;//!< Event fired when the nominated select column changes.
+	static const String EventNominatedSelectRowChanged;	//!< Event fired when the nominated select row changes.
+	static const String EventVertScrollbarModeChanged;	//!< Event fired when the vertical scroll bar 'force' setting changes.
+	static const String EventHorzScrollbarModeChanged;	//!< Event fired when the horizontal scroll bar 'force' setting changes.
+	static const String EventSelectionChanged;			//!< Event fired when the current selection(s) within the list box changes.
+	static const String EventListContentsChanged;			//!< Event fired when the contents of the list box changes.
+	static const String EventSortColumnChanged;			//!< Event fired when the sort column changes.
+	static const String EventSortDirectionChanged;		//!< Event fired when the sort direction changes.
+	static const String EventListColumnSized;				//!< Event fired when the width of a column in the list changes.
+	static const String EventListColumnMoved;				//!< Event fired when the column order changes.
+
+
+	/*************************************************************************
+		Enumerations
+	*************************************************************************/
+	/*!
+	\brief
+		Enumerated values for the selection modes possible with a Multi-column list
+	*/
+	enum SelectionMode
+	{
+		RowSingle,					// Any single row may be selected.  All items in the row are selected.
+		RowMultiple,				// Multiple rows may be selected.  All items in the row are selected.
+		CellSingle,					// Any single cell may be selected.
+		CellMultiple,				// Multiple cells bay be selected.
+		NominatedColumnSingle,		// Any single item in a nominated column may be selected.
+		NominatedColumnMultiple,	// Multiple items in a nominated column may be selected.
+		ColumnSingle,				// Any single column may be selected.  All items in the column are selected.
+		ColumnMultiple,				// Multiple columns may be selected.  All items in the column are selected.
+		NominatedRowSingle,			// Any single item in a nominated row may be selected.
+		NominatedRowMultiple		// Multiple items in a nominated row may be selected.
+	};
+
+
+	/*************************************************************************
+		Accessor Methods
+	*************************************************************************/
+	/*!
+	\brief
+		Return whether user manipulation of the sort column and direction are enabled.
+
+	\return
+		true if the user may interactively modify the sort column and direction.  false if the user may not
+		modify the sort column and direction (these can still be set programmatically).
+	*/
+	bool	isUserSortControlEnabled(void) const;
+
+
+	/*!
+	\brief
+		Return whether the user may size column segments.
+
+	\return
+		true if the user may interactively modify the width of columns, false if they may not.
+	*/
+	bool	isUserColumnSizingEnabled(void) const;
+
+
+	/*!
+	\brief
+		Return whether the user may modify the order of the columns.
+
+	\return
+		true if the user may interactively modify the order of the columns, false if they may not.
+	*/
+	bool	isUserColumnDraggingEnabled(void) const;
+
+
+	/*!
+	\brief
+		Return the number of columns in the multi-column list
+
+	\return
+		uint value equal to the number of columns in the list.
+	*/
+	uint	getColumnCount(void) const;
+
+
+	/*!
+	\brief
+		Return the number of rows in the multi-column list.
+
+	\return
+		uint value equal to the number of rows currently in the list.
+	*/
+	uint	getRowCount(void) const;
+
+
+	/*!
+	\brief
+		Return the zero based index of the current sort column.  There must be at least one column to successfully call this
+		method.
+
+	\return
+		Zero based column index that is the current sort column.
+
+	\exception	InvalidRequestException		thrown if there are no columns in this multi column list.
+	*/
+	uint	getSortColumn(void) const;
+
+	
+	/*!
+	\brief
+		Return the zero based column index of the column with the specified ID.
+
+	\param col_id
+		ID code of the column whos index is to be returned.
+
+	\return
+		Zero based column index of the first column whos ID matches \a col_id.
+
+	\exception	InvalidRequestException		thrown if no attached column has the requested ID.
+	*/
+	uint	getColumnWithID(uint col_id) const;
+
+
+	/*!
+	\brief
+		Return the zero based index of the column whos header text matches the specified text.
+
+	\param text
+		String object containing the text to be searched for.
+
+	\return
+		Zero based column index of the column whos header has the specified text.
+
+	\exception InvalidRequestException	thrown if no columns header has the requested text.
+	*/
+	uint	getColumnWithHeaderText(const String& text) const;
+
+
+	/*!
+	\brief
+		Return the total width of all column headers.
+
+	\return
+		Sum total of all the column header widths in whichever metrics system is active.
+	*/
+	float	getTotalColumnHeadersWidth(void) const;
+
+
+	/*!
+	\brief
+		Return the width of the specified column header (and therefore the column itself).
+
+	\param col_idx
+		Zero based column index of the column whos width is to be returned.
+
+	\return
+		Width of the column header at the zero based column index specified by \a col_idx, in whichever is the active metrics system.
+
+	\exception InvalidRequestException	thrown if \a column is out of range.
+	*/
+	float	getColumnHeaderWidth(uint col_idx) const;
+
+
+	/*!
+	\brief
+		Return the currently set sort direction.
+
+	\return
+		One of the ListHeaderSegment::SortDirection enumerated values specifying the current sort direction.
+	*/
+	ListHeaderSegment::SortDirection	getSortDirection(void) const;
+
+
+	/*!
+	\brief
+		Return the ListHeaderSegment object for the specified column
+
+	\param col_idx
+		zero based index of the column whos ListHeaderSegment is to be returned.
+
+	\return
+		ListHeaderSegment object for the column at the requested index.
+
+	\exception InvalidRequestException	thrown if \a col_idx is out of range.
+	*/
+	ListHeaderSegment&	getHeaderSegmentForColumn(uint col_idx) const;
+
+
+	/*!
+	\brief
+		Return the zero based index of the Row that contains \a item.
+
+	\param item
+		Pointer to the ListboxItem that the row index is to returned for.
+
+	\return
+		Zero based index of the row that contains ListboxItem \a item.
+
+	\exception InvalidRequestException	thrown if \a item is not attached to the list box.
+	*/
+	uint	getItemRowIndex(const ListboxItem* item) const;
+
+
+	/*!
+	\brief
+		Return the current zero based index of the column that contains \a item.
+
+	\param item
+		Pointer to the ListboxItem that the column index is to returned for.
+
+	\return
+		Zero based index of the column that contains ListboxItem \a item.
+
+	\exception InvalidRequestException	thrown if \a item is not attached to the list box.
+	*/
+	uint	getItemColumnIndex(const ListboxItem* item) const;
+
+
+	/*!
+	\brief
+		Return the grid reference for \a item.
+
+	\param item
+		Pointer to the ListboxItem whos current grid reference is to be returned.
+
+	\return
+		MCLGridRef object describing the current grid reference of ListboxItem \a item.
+
+	\exception InvalidRequestException	thrown if \a item is not attached to the list box.
+	*/
+	MCLGridRef	getItemGridReference(const ListboxItem* item) const;
+
+	
+	/*!
+	\brief
+		Return a pointer to the ListboxItem at the specified grid reference.
+
+	\param grid_ref
+		MCLGridRef object that describes the position of the ListboxItem to be returned.
+
+	\return
+		Pointer to the ListboxItem at grid reference \a grid_ref.
+
+	\exception InvalidRequestException	thrown if \a grid_ref is invalid for this list box.
+	*/
+	ListboxItem*	getItemAtGridReference(const MCLGridRef& grid_ref) const;
+
+
+	/*!
+	\brief
+		return whether ListboxItem \a item is attached to the column at index \a col_idx.
+
+	\param item
+		Pointer to the ListboxItem to look for.
+
+	\param col_idx
+		Zero based index of the column that is to be searched.
+
+	\return
+		- true if \a item is attached to list box column \a col_idx.
+		- false if \a item is not attached to list box column \a col_idx.
+
+	\exception InvalidRequestException	thrown if \a col_idx is out of range.
+	*/
+	bool	isListboxItemInColumn(const ListboxItem* item, uint col_idx) const;
+
+
+	/*!
+	\brief
+		return whether ListboxItem \a item is attached to the row at index \a row_idx.
+
+	\param item
+		Pointer to the ListboxItem to look for.
+
+	\param row_idx
+		Zero based index of the row that is to be searched.
+
+	\return
+		- true if \a item is attached to list box row \a row_idx.
+		- false if \a item is not attached to list box row \a row_idx.
+
+	\exception InvalidRequestException	thrown if \a row_idx is out of range.
+	*/
+	bool	isListboxItemInRow(const ListboxItem* item, uint row_idx) const;
+
+
+	/*!
+	\brief
+		return whether ListboxItem \a item is attached to the list box.
+
+	\param item
+		Pointer to the ListboxItem to look for.
+
+	\return
+		- true if \a item is attached to list box.
+		- false if \a item is not attached to list box.
+	*/
+	bool	isListboxItemInList(const ListboxItem* item) const;
+
+
+	/*!
+	\brief
+		Return the ListboxItem in column \a col_idx that has the text string \a text.
+
+	\param text
+		String object containing the text to be searched for.
+
+	\param col_idx
+		Zero based index of the column to be searched.
+
+	\param start_item
+		Pointer to the ListboxItem where the exclusive search is to start, or NULL to search from the top of the column.
+
+	\return
+		Pointer to the first ListboxItem in column \a col_idx, after \a start_item, that has the string \a text.
+
+	\exception InvalidRequestException	thrown if \a start_item is not attached to the list box, or if \a col_idx is out of range.
+	*/
+	ListboxItem*	findColumnItemWithText(const String& text, uint col_idx, const ListboxItem* start_item) const;
+
+
+	/*!
+	\brief
+		Return the ListboxItem in row \a row_idx that has the text string \a text.
+
+	\param text
+		String object containing the text to be searched for.
+
+	\param row_idx
+		Zero based index of the row to be searched.
+
+	\param start_item
+		Pointer to the ListboxItem where the exclusive search is to start, or NULL to search from the start of the row.
+
+	\return
+		Pointer to the first ListboxItem in row \a row_idx, after \a start_item, that has the string \a text.
+
+	\exception InvalidRequestException	thrown if \a start_item is not attached to the list box, or if \a row_idx is out of range.
+	*/
+	ListboxItem*	findRowItemWithText(const String& text, uint row_idx, const ListboxItem* start_item) const;
+
+
+	/*!
+	\brief
+		Return the ListboxItem that has the text string \a text.
+		
+	\note
+		List box searching progresses across the columns in each row.
+
+	\param text
+		String object containing the text to be searched for.
+
+	\param start_item
+		Pointer to the ListboxItem where the exclusive search is to start, or NULL to search the whole list box.
+
+	\return
+		Pointer to the first ListboxItem, after \a start_item, that has the string \a text.
+
+	\exception InvalidRequestException	thrown if \a start_item is not attached to the list box.
+	*/
+	ListboxItem*	findListItemWithText(const String& text, const ListboxItem* start_item) const;
+
+
+	/*!
+	\brief
+		Return a pointer to the first selected ListboxItem attached to this list box.
+
+	\note
+		List box searching progresses across the columns in each row.
+
+	\return
+		Pointer to the first ListboxItem attached to this list box that is selected, or NULL if no item is selected.
+	*/
+	ListboxItem*	getFirstSelectedItem(void) const;
+
+
+	/*!
+	\brief
+		Return a pointer to the next selected ListboxItem after \a start_item.
+		
+	\note
+		List box searching progresses across the columns in each row.
+
+	\param start_item
+		Pointer to the ListboxItem where the exclusive search is to start, or NULL to search the whole list box.
+
+	\return
+		Pointer to the first selected ListboxItem attached to this list box, after \a start_item, or NULL if no item is selected.
+
+	\exception InvalidRequestException	thrown if \a start_item is not attached to the list box.
+	*/
+	ListboxItem*	getNextSelected(const ListboxItem* start_item) const;
+
+
+	/*!
+	\brief
+		Return the number of selected ListboxItems attached to this list box.
+
+	return
+		uint value equal to the number of ListboxItems attached to this list box that are currently selected.
+	*/
+	uint	getSelectedCount(void) const;
+
+
+	/*!
+	\brief
+		Return whether the ListboxItem at \a grid_ref is selected.
+
+	\param grid_ref
+		MCLGridRef object describing the grid reference that is to be examined.
+
+	\return
+		- true if there is a ListboxItem at \a grid_ref and it is selected.
+		- false if there is no ListboxItem at \a grid_ref, or if the item is not selected.
+	
+	\exception InvalidRequestException	thrown if \a grid_ref contains an invalid grid position.
+	*/
+	bool	isItemSelected(const MCLGridRef& grid_ref) const;
+
+
+	/*!
+	\brief
+		Return the ID of the currently set nominated selection column to be used when in one of the NominatedColumn*
+		selection modes.
+
+	\note
+		You should only ever call this when getColumnCount() returns > 0.
+
+	\return
+		ID code of the nominated selection column.
+	*/
+	uint	getNominatedSelectionColumnID(void) const;
+
+
+	/*!
+	\brief
+		Return the index of the currently set nominated selection column to be used when in one of the NominatedColumn*
+		selection modes.
+
+	\return
+		Zero based index of the nominated selection column.
+	*/
+	uint	getNominatedSelectionColumn(void) const;
+
+
+	/*!
+	\brief
+		Return the index of the currently set nominated selection row to be used when in one of the NominatedRow*
+		selection modes.
+
+	\return
+		Zero based index of the nominated selection column.
+	*/
+	uint	getNominatedSelectionRow(void) const;
+
+
+	/*!
+	\brief
+		Return the currently set selection mode.
+
+	\return
+		One of the MultiColumnList::SelectionMode enumerated values specifying the current selection mode.
+	*/
+	MultiColumnList::SelectionMode	getSelectionMode(void) const;
+
+
+	/*!
+	\brief
+		Return whether the vertical scroll bar is always shown.
+
+	\return
+		- true if the scroll bar will always be shown even if it is not required.
+		- false if the scroll bar will only be shown when it is required.
+	*/
+	bool	isVertScrollbarAlwaysShown(void) const;
+
+
+	/*!
+	\brief
+		Return whether the horizontal scroll bar is always shown.
+
+	\return
+		- true if the scroll bar will always be shown even if it is not required.
+		- false if the scroll bar will only be shown when it is required.
+	*/
+	bool	isHorzScrollbarAlwaysShown(void) const;
+
+
+	/*!
+	\brief
+		Return the ID code assigned to the requested column.
+
+	\param col_idx
+		Zero based index of the column whos ID code is to be returned.
+
+	\return
+		Current ID code assigned to the column at the requested index.
+
+	\exception InvalidRequestException	thrown if \a col_idx is out of range
+	*/
+	uint	getColumnID(uint col_idx) const;
+
+
+	/*!
+	\brief
+		Return the ID code assigned to the requested row.
+
+	\param row_idx
+		Zero based index of the row who's ID code is to be returned.
+
+	\return
+		Current ID code assigned to the row at the requested index.
+
+	\exception InvalidRequestException	thrown if \a row_idx is out of range
+	*/
+	uint	getRowID(uint row_idx) const;
+
+
+	/*!
+	\brief
+		Return the zero based row index of the row with the specified ID.
+
+	\param row_id
+		ID code of the row who's index is to be returned.
+
+	\return
+		Zero based row index of the first row who's ID matches \a row_id.
+
+	\exception	InvalidRequestException		thrown if no row has the requested ID.
+	*/
+	uint	getRowWithID(uint row_id) const;
+
+
+	/*************************************************************************
+		Manipulator Methods
+	*************************************************************************/
+	/*!
+	\brief
+		Initialise the Window based object ready for use.
+
+	\note
+		This must be called for every window created.  Normally this is handled automatically by the WindowFactory for each Window type.
+
+	\return
+		Nothing
+	*/
+	virtual void	initialise(void);
+
+
+	/*!
+	\brief
+		Remove all items from the list.
+
+		Note that this will cause 'AutoDelete' items to be deleted.
+	*/
+	void	resetList(void);
+
+
+	/*!
+	\brief
+		Add a column to the list box.
+
+	\param text
+		String object containing the text label for the column header.
+
+	\param col_id
+		ID code to be assigned to the column header.
+
+	\param width
+		Initial width to be set for the column using the active metrics mode for this window.
+
+	\return
+		Nothing.
+	*/
+	void	addColumn(const String& text, uint col_id, float width);
+
+
+	/*!
+	\brief
+		Insert a new column in the list.
+
+	\param text
+		String object containing the text label for the column header.
+
+	\param col_id
+		ID code to be assigned to the column header.
+
+	\param width
+		Initial width to be set for the column using the active metrics mode for this window.
+
+	\param position
+		Zero based index where the column is to be inserted.  If this is greater than the current
+		number of columns, the new column is inserted at the end.
+
+	\return
+		Nothing.
+	*/
+	void	insertColumn(const String& text, uint col_id, float width, uint position);
+
+
+	/*!
+	\brief
+		Removes a column from the list box.  This will cause any ListboxItem using the autoDelete option in the column to be deleted.
+
+	\param col_idx
+		Zero based index of the column to be removed.
+
+	\return
+		Nothing.
+
+	\exception InvalidRequestException	thrown if \a col_idx is invalid.
+	*/
+	void	removeColumn(uint col_idx);
+
+
+	/*!
+	\brief
+		Removes a column from the list box.  This will cause any ListboxItem using the autoDelete option in the column to be deleted.
+
+	\param col_id
+		ID code of the column to be deleted.
+
+	\return
+		Nothing.
+
+	\exception InvalidRequestException	thrown if no column with \a col_id is available on this list box.
+	*/
+	void	removeColumnWithID(uint col_id);
+
+
+	/*!
+	\brief
+		Move the column at index \a col_idx so it is at index \a position.
+
+	\param col_idx
+		Zero based index of the column to be moved.
+
+	\param position
+		Zero based index of the new position for the column.
+
+	\return
+		Nothing.
+
+	\exception InvalidRequestException	thrown if \a col_idx is invalid.
+	*/
+	void	moveColumn(uint col_idx, uint position);
+
+
+	/*!
+	\brief
+		Move the column with ID \a col_id so it is at index \a position.
+
+	\param col_id
+		ID code of the column to be moved.
+
+	\param position
+		Zero based index of the new position for the column.
+
+	\return
+		Nothing.
+
+	\exception InvalidRequestException	thrown if no column with \a col_id is available on this list box.
+	*/
+	void	moveColumnWithID(uint col_id, uint position);
+
+
+	/*!
+	\brief
+		Add an empty row to the list box.
+
+	\param row_id
+		ID code to be assigned to the new row.
+
+	\note
+		If the list is being sorted, the new row will appear at an appropriate position according to the sorting being
+		applied.  If no sorting is being done, the new row will appear at the bottom of the list.
+
+	\return
+		Initial zero based index of the new row.
+	*/
+	uint	addRow(uint row_id = 0);
+
+
+	/*!
+	\brief
+		Add a row to the list box, and set the item in the column with ID \a col_id to \a item.
+
+	\note
+		If the list is being sorted, the new row will appear at an appropriate position according to the sorting being
+		applied.  If no sorting is being done, the new row will appear at the bottom of the list.
+
+	\param item
+		Pointer to a ListboxItem to be used as the initial contents for the column with ID \a col_id.
+
+	\param col_id
+		ID code of the column whos initial item is to be set to \a item.
+
+	\param row_id
+		ID code to be assigned to the new row.
+
+	\return
+		Initial zero based index of the new row.
+
+	\exception InvalidRequestException	thrown if no column with the specified ID is attached to the list box.
+	*/
+	uint	addRow(ListboxItem* item, uint col_id, uint row_id = 0);
+
+
+	/*!
+	\brief
+		Insert an empty row into the list box.
+
+	\note
+		If the list is being sorted, the new row will appear at an appropriate position according to the sorting being
+		applied.  If no sorting is being done, the new row will appear at the specified index.
+
+	\param row_idx
+		Zero based index where the row should be inserted.  If this is greater than the current number of rows, the row is
+		appended to the list.
+
+	\param row_id
+		ID code to be assigned to the new row.
+
+	\return
+		Zero based index where the row was actually inserted.
+	*/
+	uint	insertRow(uint row_idx, uint row_id = 0);
+
+
+	/*!
+	\brief
+		Insert a row into the list box, and set the item in the column with ID \a col_id to \a item.
+
+	\note
+		If the list is being sorted, the new row will appear at an appropriate position according to the sorting being
+		applied.  If no sorting is being done, the new row will appear at the specified index.
+
+	\param item
+		Pointer to a ListboxItem to be used as the initial contents for the column with ID \a col_id.
+
+	\param col_id
+		ID code of the column whos initial item is to be set to \a item.
+
+	\param row_idx
+		Zero based index where the row should be inserted.  If this is greater than the current number of rows, the row is
+		appended to the list.
+
+	\param row_id
+		ID code to be assigned to the new row.
+
+	\return
+		Zero based index where the row was actually inserted.
+
+	\exception InvalidRequestException	thrown if no column with the specified ID is attached to the list box.
+	*/
+	uint	insertRow(ListboxItem* item, uint col_id, uint row_idx, uint row_id = 0);
+
+
+	/*!
+	\brief
+		Remove the list box row with index \a row_idx.  Any ListboxItem in row \a row_idx using autoDelete mode will be deleted.
+
+	\param row_idx
+		Zero based index of the row to be removed.
+
+	\return
+		Nothing.
+
+	\exception InvalidRequestException	thrown if \a row_idx is invalid.
+	*/
+	void	removeRow(uint row_idx);
+
+
+	/*!
+	\brief
+		Set the ListboxItem for grid reference \a position.
+
+	\param item
+		Pointer to the ListboxItem to be set at \a position.
+
+	\param position
+		MCLGridRef describing the grid reference of the item to be set.
+
+	\return
+		Nothing.
+
+	\exception InvalidRequestException	thrown if \a position contains an invalid grid reference.
+	*/
+	void	setItem(ListboxItem* item, const MCLGridRef& position);
+
+
+	/*!
+	\brief
+		Set the ListboxItem for the column with ID \a col_id in row \a row_idx.
+
+	\param item
+		Pointer to the ListboxItem to be set into the list.
+
+	\param col_id
+		ID code of the column to receive \a item.
+
+	\param row_idx
+		Zero based index of the row to receive \a item.
+
+	\return
+		Nothing.
+
+	\exception InvalidRequestException	thrown if no column with ID \a col_id exists, or of \a row_idx is out of range.
+	*/
+	void	setItem(ListboxItem* item, uint col_id, uint row_idx);
+
+
+	/*!
+	\brief
+		Set the selection mode for the list box.
+
+	\param sel_mode
+		One of the MultiColumnList::SelectionMode enumerated values specifying the selection mode to be used.
+
+	\return
+		Nothing.
+
+	\exception	InvalidRequestException	thrown if the value specified for \a sel_mode is invalid.
+	*/
+	void	setSelectionMode(MultiColumnList::SelectionMode sel_mode);
+
+
+	/*!
+	\brief
+		Set the column to be used for the NominatedColumn* selection modes.
+
+	\param	col_id
+		ID code of the column to be used in NominatedColumn* selection modes.
+
+	\return	
+		Nothing.
+
+	\exception InvalidRequestException	thrown if no column has ID code \a col_id.
+	*/
+	void	setNominatedSelectionColumnID(uint col_id);
+
+
+	/*!
+	\brief
+		Set the column to be used for the NominatedColumn* selection modes.
+
+	\param	col_idx
+		zero based index of the column to be used in NominatedColumn* selection modes.
+
+	\return	
+		Nothing.
+
+	\exception InvalidRequestException	thrown if \a col_idx is out of range.
+	*/
+	void	setNominatedSelectionColumn(uint col_idx);
+
+
+	/*!
+	\brief
+		Set the row to be used for the NominatedRow* selection modes.
+
+	\param	row_idx
+		zero based index of the row to be used in NominatedRow* selection modes.
+
+	\return	
+		Nothing.
+
+	\exception InvalidRequestException	thrown if \a row_idx is out of range.
+	*/
+	void	setNominatedSelectionRow(uint row_idx);
+
+
+	/*!
+	\brief
+		Set the sort direction to be used.
+
+	\param direction
+		One of the ListHeaderSegment::SortDirection enumerated values specifying the sort direction to be used.
+
+	\return
+		Nothing.
+	*/
+	void	setSortDirection(ListHeaderSegment::SortDirection direction);
+
+
+	/*!
+	\brief
+		Set the column to be used as the sort key.
+
+	\param col_idx
+		Zero based index of the column to use as the key when sorting the list items.
+
+	\return
+		Nothing.
+
+	\exception InvalidRequestException	thrown if col_idx is out of range.
+	*/
+	void	setSortColumn(uint col_idx);
+
+
+	/*!
+	\brief
+		Set the column to be used as the sort key.
+
+	\param col_id
+		ID code of the column to use as the key when sorting the list items.
+
+	\return
+		Nothing.
+
+	\exception InvalidRequestException	thrown if col_id is invalid for this list box.
+	*/
+	void	setSortColumnByID(uint col_id);
+
+	
+	/*!
+	\brief
+		Set whether the vertical scroll bar should always be shown, or just when needed.
+
+	\param setting
+		- true to have the vertical scroll bar shown at all times.
+		- false to have the vertical scroll bar appear only when needed.
+
+	\return
+		Nothing.
+	*/
+	void	setShowVertScrollbar(bool setting);
+
+
+	/*!
+	\brief
+		Set whether the horizontal scroll bar should always be shown, or just when needed.
+
+	\param setting
+		- true to have the horizontal scroll bar shown at all times.
+		- false to have the horizontal scroll bar appear only when needed.
+
+	\return
+		Nothing.
+	*/
+	void	setShowHorzScrollbar(bool setting);
+
+	
+	/*!
+	\brief
+		Removed the selected state from any currently selected ListboxItem attached to the list.
+
+	\return
+		Nothing.
+	*/
+	void	clearAllSelections(void);
+
+
+	/*!
+	\brief
+		Sets or clears the selected state of the given ListboxItem which must be attached to the list.
+
+	\note
+		Depending upon the current selection mode, this may cause other items to be selected, other
+		items to be deselected, or for nothing to actually happen at all.
+
+	\param item
+		Pointer to the attached ListboxItem to be affected.
+
+	\param state
+		- true to put the ListboxItem into the selected state.
+		- false to put the ListboxItem into the de-selected state.
+
+	\return
+		Nothing.
+	
+	\exception InvalidRequestException	thrown if \a item is not attached to the list box.
+	*/
+	void	setItemSelectState(ListboxItem* item, bool state);
+
+
+	/*!
+	\brief
+		Sets or clears the selected state of the ListboxItem at the given grid reference.
+
+	\note
+		Depending upon the current selection mode, this may cause other items to be selected, other
+		items to be deselected, or for nothing to actually happen at all.
+
+	\param grid_ref
+		MCLGridRef object describing the position of the item to be affected.
+
+	\param state
+		- true to put the ListboxItem into the selected state.
+		- false to put the ListboxItem into the de-selected state.
+
+	\return
+		Nothing.
+	
+	\exception InvalidRequestException	thrown if \a grid_ref is invalid for this list box.
+	*/
+	void	setItemSelectState(const MCLGridRef& grid_ref, bool state);
+
+	
+	/*!
+	\brief
+		Inform the list box that one or more attached ListboxItems have been externally modified, and
+		the list should re-sync its internal state and refresh the display as needed.
+
+	\return
+		Nothing.
+	*/
+	void	handleUpdatedItemData(void);
+
+
+	/*!
+	\brief
+		Set the width of the specified column header (and therefore the column itself).
+
+	\param col_idx
+		Zero based column index of the column whos width is to be set.
+
+	\param width
+		float value specifying the new width for the column using the active metrics system.
+
+	\return
+		Nothing.
+
+	\exception InvalidRequestException	thrown if \a column is out of range.
+	*/
+	void	setColumnHeaderWidth(uint col_idx, float width);
+
+
+	/*!
+	\brief
+		Set whether user manipulation of the sort column and direction are enabled.
+
+	\param setting
+		- true if the user may interactively modify the sort column and direction.
+		- false if the user may not modify the sort column and direction (these can still be set programmatically).
+
+	\return
+		Nothing.
+	*/
+	void	setUserSortControlEnabled(bool setting);
+
+
+	/*!
+	\brief
+		Set whether the user may size column segments.
+
+	\param setting
+		- true if the user may interactively modify the width of columns.
+		- false if the user may not change the width of the columns.
+
+	\return
+		Nothing.
+	*/
+	void	setUserColumnSizingEnabled(bool setting);
+
+
+	/*!
+	\brief
+		Set whether the user may modify the order of the columns.
+
+	\param setting
+		- true if the user may interactively modify the order of the columns.
+		- false if the user may not modify the order of the columns.
+	*/
+	void	setUserColumnDraggingEnabled(bool setting);
+
+
+	/*!
+	\brief
+		Automatically determines the "best fit" size for the specified column and sets
+		the column width to the same.
+
+	\param col_idx
+		Zero based index of the column to be sized.
+
+	\return
+		Nothing.
+
+	\exception InvalidRequestException	thrown if \a col_idx is out of range.
+	*/
+	void	autoSizeColumnHeader(uint col_idx);
+
+
+	/*!
+	\brief
+		Set the ID code assigned to a given row.
+
+	\param row_idx
+		Zero based index of the row who's ID code is to be set.
+
+	\param row_id
+		ID code to be assigned to the row at the requested index.
+
+	\return
+		Nothing.
+
+	\exception InvalidRequestException	thrown if \a row_idx is out of range
+	*/
+	void	setRowID(uint row_idx, uint row_id);
+
+
+	/*************************************************************************
+		Construction and Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for the Multi-column list base class
+	*/
+	MultiColumnList(const String& type, const String& name);
+
+
+	/*!
+	\brief
+		Destructor for the multi-column list base class.
+	*/
+	virtual ~MultiColumnList(void);
+
+
+protected:
+	/*************************************************************************
+		Implementation Functions (abstract interface)
+	*************************************************************************/
+	/*!
+	\brief
+		Return a Rect object describing, in un-clipped pixels, the window relative area
+		that is to be used for rendering list items.
+
+	\return
+		Rect object describing the area of the Window to be used for rendering
+		list box items.
+	*/
+	virtual	Rect	getListRenderArea(void) const		= 0;
+
+
+	/*!
+	\brief
+		create and return a pointer to a ListHeaer widget for use as the column headers.
+
+	\return
+		Pointer to a ListHeader based object.
+	*/
+	virtual ListHeader*	createListHeader(void) const		= 0;
+ 
+
+	/*!
+	\brief
+		create and return a pointer to a Scrollbar widget for use as vertical scroll bar
+
+	\return
+		Pointer to a Scrollbar to be used for scrolling the list vertically.
+	*/
+	virtual Scrollbar*	createVertScrollbar(void) const		= 0;
+ 
+
+	/*!
+	\brief
+		create and return a pointer to a Scrollbar widget for use as horizontal scroll bar
+
+	\return
+		Pointer to a Scrollbar to be used for scrolling the list horizontally.
+	*/
+	virtual Scrollbar*	createHorzScrollbar(void) const		= 0;
+
+
+	/*!
+	\brief
+		Setup size and position for the component widgets attached to this Listbox
+
+	\return
+		Nothing.
+	*/
+	virtual void	layoutComponentWidgets()	= 0;
+
+
+	/*!
+	\brief
+		Perform rendering of the widget control frame and other 'static' areas.  This
+		method should not render the actual items.  Note that the items are typically
+		rendered to layer 3, other layers can be used for rendering imagery behind and
+		infront of the items.
+
+	\param z
+		Z co-ordinate for layer 0.
+
+	\return
+		Nothing.
+	*/
+	virtual	void	renderListboxBaseImagery(float z)		= 0;
+
+
+	/*************************************************************************
+		Implementation Functions
+	*************************************************************************/
+	/*!
+	\brief
+		Add multi column list box specific events
+	*/
+	void	addMultiColumnListboxEvents(void);
+
+
+	/*!
+	\brief
+		Perform the actual rendering for this Window.
+
+	\param z
+		float value specifying the base Z co-ordinate that should be used when rendering
+
+	\return
+		Nothing
+	*/
+	virtual	void	drawSelf(float z);
+
+
+	/*!
+	\brief
+		display required integrated scroll bars according to current state of the list box and update their values.
+	*/
+	void	configureScrollbars(void);
+
+
+	/*!
+	\brief
+		select all strings between positions \a start and \a end.  (inclusive).  Returns true if something was modified.
+	*/
+	bool	selectRange(const MCLGridRef& start, const MCLGridRef& end);
+
+
+	/*!
+	\brief
+		Return the sum of all row heights
+	*/
+	float	getTotalRowsHeight(void) const;
+
+
+	/*!
+	\brief
+		Return the width of the widest item in the given column
+	*/
+	float	getWidestColumnItemWidth(uint col_idx) const;
+
+
+	/*!
+	\brief
+		Return the height of the highest item in the given row.
+	*/
+	float	getHighestRowItemHeight(uint row_idx) const;
+
+
+	/*!
+	\brief
+		Clear the selected state for all items (implementation)
+
+	\return
+		true if some selections were cleared, false nothing was changed.
+	*/
+	bool	clearAllSelections_impl(void);
+
+
+	/*!
+	\brief
+		Return the ListboxItem under the given window local pixel co-ordinate.
+
+	\return
+		ListboxItem that is under window pixel co-ordinate \a pt, or NULL if no
+		item is under that position.
+	*/
+	ListboxItem*	getItemAtPoint(const Point& pt) const;
+
+
+	/*!
+	\brief
+		Set select state for the given item.  This appropriately selects other
+		items depending upon the select mode.  Returns true if something is
+		changed, else false.
+	*/
+	bool	setItemSelectState_impl(const MCLGridRef grid_ref, bool state);
+
+
+	/*!
+	\brief
+		Set select state for all items in the given row
+	*/
+	void	setSelectForItemsInRow(uint row_idx, bool state);
+
+
+	/*!
+	\brief
+		Set select state for all items in the given column
+	*/
+	void	setSelectForItemsInColumn(uint col_idx, bool state);
+
+
+	/*!
+	\brief
+		Move the column at index \a col_idx so it is at index \a position.  Implementation version which does not move the
+		header segment (since that may have already happened).
+
+	\exception InvalidRequestException	thrown if \a col_idx is invalid.
+	*/
+	void	moveColumn_impl(uint col_idx, uint position);
+
+
+	/*!
+	\brief
+		Remove all items from the list.
+
+	\note
+		Note that this will cause 'AutoDelete' items to be deleted.
+
+	\return
+		- true if the list contents were changed.
+		- false if the list contents were not changed (list already empty).
+	*/
+	bool	resetList_impl(void);
+
+
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	virtual bool	testClassName_impl(const String& class_name) const
+	{
+		if (class_name==(const utf8*)"MultiColumnList")	return true;
+		return Window::testClassName_impl(class_name);
+	}
+
+
+	/*************************************************************************
+		New event handlers for multi column list
+	*************************************************************************/
+	/*!
+	\brief
+		Handler called when the selection mode of the list box changes
+	*/
+	virtual	void	onSelectionModeChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the nominated selection column changes
+	*/
+	virtual	void	onNominatedSelectColumnChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the nominated selection row changes.
+	*/
+	virtual	void	onNominatedSelectRowChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the vertical scroll bar 'force' mode is changed.
+	*/
+	virtual	void	onVertScrollbarModeChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the horizontal scroll bar 'force' mode is changed.
+	*/
+	virtual	void	onHorzScrollbarModeChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the current selection changes.
+	*/
+	virtual	void	onSelectionChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the list contents is changed.
+	*/
+	virtual	void	onListContentsChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the sort column changes.
+	*/
+	virtual	void	onSortColumnChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the sort direction changes.
+	*/
+	virtual	void	onSortDirectionChanged(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when a column is sized.
+	*/
+	virtual	void	onListColumnSized(WindowEventArgs& e);
+
+
+	/*!
+	\brief
+		Handler called when the column order is changed.
+	*/
+	virtual	void	onListColumnMoved(WindowEventArgs& e);
+
+
+	/*************************************************************************
+		Overridden Event handlers
+	*************************************************************************/
+	virtual void	onSized(WindowEventArgs& e);
+	virtual void	onMouseButtonDown(MouseEventArgs& e);
+	virtual	void	onMouseWheel(MouseEventArgs& e);
+
+
+	/*************************************************************************
+		Handlers for subscribed events
+	*************************************************************************/
+	bool	handleHeaderScroll(const EventArgs& e);
+	bool	handleHeaderSegMove(const EventArgs& e);
+	bool	handleColumnSizeChange(const EventArgs& e);
+	bool	handleHorzScrollbar(const EventArgs& e);
+	bool	handleSortColumnChange(const EventArgs& e);
+	bool	handleSortDirectionChange(const EventArgs& e);
+	bool	handleHeaderSegDblClick(const EventArgs& e);
+
+
+	/*************************************************************************
+		Struct used to wrap a 'row' and ease sorting
+	*************************************************************************/
+	struct ListRow
+	{
+		typedef	std::vector<ListboxItem*>	RowItems;
+		RowItems	d_items;
+		uint		d_sortColumn;
+		uint		d_rowID;
+
+		// operators
+		ListboxItem* const& operator[](uint idx) const	{return d_items[idx];}
+		ListboxItem*&	operator[](uint idx) {return d_items[idx];}
+		bool	operator<(const ListRow& rhs) const;
+		bool	operator>(const ListRow& rhs) const;
+	};
+
+
+	/*!
+	\brief
+		std algorithm predicate used for sorting in descending order
+	*/
+	static bool pred_descend(const ListRow& a, const ListRow& b);
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	// component widgets and settings.
+	Scrollbar*	d_vertScrollbar;	//!< vertical scroll-bar widget
+	Scrollbar*	d_horzScrollbar;	//!< horizontal scroll-bar widget
+	ListHeader*	d_header;			//!< The ListHeader attached to this multi-column list.
+	bool	d_forceVertScroll;		//!< true if vertical scrollbar should always be displayed
+	bool	d_forceHorzScroll;		//!< true if horizontal scrollbar should always be displayed
+
+	// selection abilities.
+	SelectionMode	d_selectMode;	//!< Holds selection mode (represented by settings below).
+	uint	d_nominatedSelectCol;	//!< Nominated column for single column selection.
+	uint	d_nominatedSelectRow;	//!< Nominated row for single row selection.
+	bool	d_multiSelect;			//!< Allow multiple selections.
+	bool	d_fullRowSelect;		//!< All items in a row are selected.
+	bool	d_fullColSelect;		//!< All items in a column are selected.
+	bool	d_useNominatedRow;		//!< true if we use a nominated row to select.
+	bool	d_useNominatedCol;		//!< true if we use a nominated col to select.
+	ListboxItem*	d_lastSelected;	//!< holds pointer to the last selected item (used in range selections)
+
+	// storage of items in the list box.
+	typedef std::vector<ListRow>		ListItemGrid;
+	ListItemGrid	d_grid;			//!< Holds the list box data.
+
+
+private:
+	/*************************************************************************
+		Static Properties for this class
+	*************************************************************************/
+	static MultiColumnListProperties::ColumnsMovable				d_columnsMovableProperty;
+	static MultiColumnListProperties::ColumnsSizable				d_columnsSizableProperty;
+	static MultiColumnListProperties::ForceHorzScrollbar			d_forceHorzScrollProperty;
+	static MultiColumnListProperties::ForceVertScrollbar			d_forceVertScrollProperty;
+	static MultiColumnListProperties::NominatedSelectionColumnID	d_nominatedSelectColProperty;
+	static MultiColumnListProperties::NominatedSelectionRow			d_nominatedSelectRowProperty;
+	static MultiColumnListProperties::SelectionMode					d_selectModeProperty;
+	static MultiColumnListProperties::SortColumnID					d_sortColumnIDProperty;
+	static MultiColumnListProperties::SortDirection					d_sortDirectionProperty;
+	static MultiColumnListProperties::SortSettingEnabled			d_sortSettingProperty;
+	static MultiColumnListProperties::ColumnHeader					d_columnHeaderProperty;
+	static MultiColumnListProperties::RowCount						d_rowCountProperty;
+
+
+	/*************************************************************************
+		Private methods
+	*************************************************************************/
+	void	addMultiColumnListProperties(void);
+};
+
+} // End of  CEGUI namespace section
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUIMultiColumnList_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIPopupMenuProperties.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIPopupMenuProperties.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIPopupMenuProperties.h	(revision 1092)
@@ -0,0 +1,88 @@
+/************************************************************************
+	filename: 	CEGUIPopupMenuProperties.h
+	created:	5/4/2005
+	author:		Tomas Lindquist Olsen (based on code by Paul D Turner)
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIPopupMenuProperties_h_
+#define _CEGUIPopupMenuProperties_h_
+
+#include "CEGUIProperty.h"
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+// Start of ItemListBaseProperties namespace section
+namespace PopupMenuProperties
+{
+
+/*!
+\brief
+	Property to access the fade in time in seconds of the menu bar.
+
+	\par Usage:
+		- Name: FadeInTime
+		- Format: "[float]".
+
+	\par Where:
+		- [float] represents the fade in time in seconds of the menu bar.
+*/
+class FadeInTime : public Property
+{
+public:
+	FadeInTime() : Property(
+		"FadeInTime",
+		"Property to get/set the fade in time in seconds of the menu bar.  Value is a float.",
+		"0.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the fade out time in seconds of the menu bar.
+
+	\par Usage:
+		- Name: FadeOutTime
+		- Format: "[float]".
+
+	\par Where:
+		- [float] represents the fade out time in seconds of the menu bar.
+*/
+class FadeOutTime : public Property
+{
+public:
+	FadeOutTime() : Property(
+		"FadeOutTime",
+		"Property to get/set the fade out time in seconds of the menu bar.  Value is a float.",
+		"0.000000")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+} // End of  PopupMenuProperties namespace section
+} // End of  CEGUI namespace section
+
+#endif	// end of guard _CEGUIPopupMenuProperties_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUITitlebar.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUITitlebar.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUITitlebar.h	(revision 1092)
@@ -0,0 +1,193 @@
+/************************************************************************
+	filename: 	CEGUITitlebar.h
+	created:	25/4/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface for a Titlebar Widget
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUITitlebar_h_
+#define _CEGUITitlebar_h_
+
+#include "CEGUIWindow.h"
+#include "elements/CEGUITitlebarProperties.h"
+
+
+#if defined(_MSC_VER)
+#	pragma warning(push)
+#	pragma warning(disable : 4251)
+#endif
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+/*!
+\brief
+	Class representing the title bar for Frame Windows.
+
+*/
+class CEGUIEXPORT Titlebar : public Window
+{
+public:
+	static const String EventNamespace;				//!< Namespace for global events
+
+
+	/*!
+	\brief
+		Return whether this title bar will respond to dragging.
+
+	\return
+		true if the title bar will respond to dragging, false if the title bar will not respond.
+	*/
+	bool	isDraggingEnabled(void) const;
+
+
+	/*!
+	\brief
+		Set whether this title bar widget will respond to dragging.
+
+	\param setting
+		true if the title bar should respond to being dragged, false if it should not respond.
+
+	\return
+		Nothing.
+	*/
+	void	setDraggingEnabled(bool setting);
+
+
+	/*!
+	\brief
+		Return the current colour used for rendering the caption text
+
+	\return
+		colour value that specifies the colour used when rendering the title bar caption text.
+	*/
+	colour	getCaptionColour(void) const;
+
+
+	/*!
+	\brief
+		Sets the colour to be used for rendering the caption text.
+
+	\param col
+		colour value that specifies the colour to be used when rendering the title bar caption text.
+
+	\return
+		Nothing.
+	*/
+	void	setCaptionColour(const colour& col);
+
+
+	/*************************************************************************
+		Construction / Destruction
+	*************************************************************************/
+	/*!
+	\brief
+		Constructor for Titlebar base class.
+	*/
+	Titlebar(const String& type, const String& name);
+
+
+	/*!
+	\brief
+		Destructor for Titlebar base class.
+	*/
+	virtual ~Titlebar(void);
+
+
+protected:
+	/*************************************************************************
+		Overridden event handler functions
+	*************************************************************************/
+	virtual void	onMouseMove(MouseEventArgs& e);
+	virtual void	onMouseButtonDown(MouseEventArgs& e);
+	virtual void	onMouseButtonUp(MouseEventArgs& e);
+	virtual void	onMouseDoubleClicked(MouseEventArgs& e);
+	virtual void	onCaptureLost(WindowEventArgs& e);
+
+
+	/*************************************************************************
+		New event handlers for title bar
+	*************************************************************************/
+	/*!
+	\brief
+		Event handler called when the 'draggable' state for the title bar is changed.
+		
+		Note that this is for 'internal' use at the moment and as such does not add or
+		fire a public Event that can be subscribed to.
+	*/
+	virtual void	onDraggingModeChanged(WindowEventArgs& e) {}
+
+
+	/*************************************************************************
+		Implementation Functions
+	*************************************************************************/
+	/*!
+	\brief
+		Return whether this window was inherited from the given class name at some point in the inheritance heirarchy.
+
+	\param class_name
+		The class name that is to be checked.
+
+	\return
+		true if this window was inherited from \a class_name. false if not.
+	*/
+	virtual bool	testClassName_impl(const String& class_name) const
+	{
+		if (class_name==(const utf8*)"Titlebar")	return true;
+		return Window::testClassName_impl(class_name);
+	}
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	bool	d_dragging;			//!< set to true when the window is being dragged.
+	Point	d_dragPoint;		//!< Point at which we are being dragged.
+	bool	d_dragEnabled;		//!< true when dragging for the widget is enabled.
+
+	Rect	d_oldCursorArea;	//!< Used to backup cursor restraint area.
+
+	colour	d_captionColour;	//!< Colour used when rendering the title caption.
+
+
+private:
+	/*************************************************************************
+		Static Properties for this class
+	*************************************************************************/
+	static TitlebarProperties::DraggingEnabled	d_dragEnabledProperty;
+	static TitlebarProperties::CaptionColour	d_captionColourProperty;
+
+
+	/*************************************************************************
+		Private methods
+	*************************************************************************/
+	void	addTitlebarProperties(void);
+};
+
+} // End of  CEGUI namespace section
+
+#if defined(_MSC_VER)
+#	pragma warning(pop)
+#endif
+
+#endif	// end of guard _CEGUITitlebar_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIStaticTextProperties.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIStaticTextProperties.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/elements/CEGUIStaticTextProperties.h	(revision 1092)
@@ -0,0 +1,186 @@
+/************************************************************************
+	filename: 	CEGUIStaticTextProperties.h
+	created:	10/7/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface for properties for the StaticText class.
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUIStaticTextProperties_h_
+#define _CEGUIStaticTextProperties_h_
+
+#include "CEGUIProperty.h"
+
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+// Start of StaticTextProperties namespace section
+/*!
+\brief
+	Namespace containing all classes that make up the properties interface for the StaticText class
+*/
+namespace StaticTextProperties
+{
+/*!
+\brief
+	Property to access the text colours for the StaticText widget.
+
+	\par Usage:
+		- Name: TextColours
+		- Format: "tl:[aarrggbb] tr:[aarrggbb] bl:[aarrggbb] br:[aarrggbb]".
+
+	\par Where:
+		- tl:[aarrggbb] is the top-left colour value specified as ARGB (hex).
+		- tr:[aarrggbb] is the top-right colour value specified as ARGB (hex).
+		- bl:[aarrggbb] is the bottom-left colour value specified as ARGB (hex).
+		- br:[aarrggbb] is the bottom-right colour value specified as ARGB (hex).
+*/
+class TextColours : public Property
+{
+public:
+	TextColours() : Property(
+		"TextColours",
+		"Property to get/set the text colours for the StaticText widget.  Value is \"tl:[aarrggbb] tr:[aarrggbb] bl:[aarrggbb] br:[aarrggbb]\".",
+		"tl:FFFFFFFF tr:FFFFFFFF bl:FFFFFFFF br:FFFFFFFF")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the horizontal formatting mode setting.
+
+	\par Usage:
+		- Name: HorzFormatting
+		- Format: "[text]".
+
+	\par Where [text] is one of:
+		- "LeftAligned"
+		- "RightAligned"
+		- "HorzCentred"
+		- "HorzJustified"
+		- "WordWrapLeftAligned"
+		- "WordWrapRightAligned"
+		- "WordWrapCentred"
+		- "WordWrapJustified"
+*/
+class HorzFormatting : public Property
+{
+public:
+	HorzFormatting() : Property(
+		"HorzFormatting",
+		"Property to get/set the horizontal formatting mode.  Value is one of the HorzFormatting strings.",
+		"LeftAligned")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the vertical formatting mode setting.
+
+	\par Usage:
+		- Name: VertFormatting
+		- Format: "[text]".
+
+	\par Where [text] is one of:
+		- "TopAligned"
+		- "BottomAligned"
+		- "VertCentred"
+*/
+class VertFormatting : public Property
+{
+public:
+	VertFormatting() : Property(
+		"VertFormatting",
+		"Property to get/set the vertical formatting mode.  Value is one of the VertFormatting strings.",
+		"VertCentred")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the setting for enabling the vertical scroll bar.
+
+	\par Usage:
+		- Name: VertScrollbar
+		- Format: "[text]"
+
+		\par Where [Text] is:
+		- "True" to indicate the scroll bar is enabled and will be shown when needed.
+		- "False" to indicate the scroll bar is disabled and will never be shown
+*/
+class VertScrollbar : public Property
+{
+public:
+	VertScrollbar() : Property(
+		"VertScrollbar",
+		"Property to get/set the setting for the vertical scroll bar.  Value is either \"True\" or \"False\".",
+		"False")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+
+/*!
+\brief
+	Property to access the setting for enabling the horizontal scroll bar.
+
+	\par Usage:
+		- Name: HorzScrollbar
+		- Format: "[text]"
+
+		\par Where [Text] is:
+		- "True" to indicate the scroll bar is enabled and will be shown when needed.
+		- "False" to indicate the scroll bar is disabled and will never be shown
+*/
+class HorzScrollbar : public Property
+{
+public:
+	HorzScrollbar() : Property(
+		"HorzScrollbar",
+		"Property to get/set the setting for the horizontal scroll bar.  Value is either \"True\" or \"False\".",
+		"False")
+	{}
+
+	String	get(const PropertyReceiver* receiver) const;
+	void	set(PropertyReceiver* receiver, const String& value);
+};
+
+} // End of  StaticTextProperties namespace section
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUIStaticTextProperties_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUISize.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUISize.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/CEGUI/CEGUISize.h	(revision 1092)
@@ -0,0 +1,54 @@
+/************************************************************************
+	filename: 	CEGUISize.h
+	created:	14/3/2004
+	author:		Paul D Turner
+	
+	purpose:	Defines interface for Size class
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _CEGUISize_h_
+#define _CEGUISize_h_
+
+#include "CEGUIBase.h"
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+
+/*!
+\brief
+	Class that holds the size (width & height) of something.
+*/
+class CEGUIEXPORT Size
+{
+public:
+	Size(void) {}
+	Size(float width, float height) : d_width(width), d_height(height) {}
+
+	bool operator==(const Size& other) const;
+	bool operator!=(const Size& other) const;
+
+	float d_width, d_height;
+};
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _CEGUISize_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreBillboard.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreBillboard.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreBillboard.h	(revision 1092)
@@ -0,0 +1,164 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __Billboard_H__
+#define __Billboard_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreVector3.h"
+#include "OgreColourValue.h"
+
+
+namespace Ogre {
+
+    /** A billboard is a primitive which always faces the camera in every frame.
+        @remarks
+            Billboards can be used for special effects or some other trickery which requires the
+            triangles to always facing the camera no matter where it is. Ogre groups billboards into
+            sets for efficiency, so you should never create a billboard on it's own (it's ok to have a
+            set of one if you need it).
+        @par
+            Billboards have their geometry generated every frame depending on where the camera is. It is most
+            beneficial for all billboards in a set to be identically sized since Ogre can take advantage of this and
+            save some calculations - useful when you have sets of hundreds of billboards as is possible with special
+            effects. You can deviate from this if you wish (example: a smoke effect would probably have smoke puffs
+            expanding as they rise, so each billboard will legitimately have it's own size) but be aware the extra
+            overhead this brings and try to avoid it if you can.
+        @par
+            Billboards are just the mechanism for rendering a range of effects such as particles. It is other classes
+            which use billboards to create their individual effects, so the methods here are quite generic.
+        @see
+            BillboardSet
+    */
+
+    class _OgreExport Billboard
+    {
+        friend class BillboardSet;
+        friend class BillboardParticleRenderer;
+    protected:
+        bool mOwnDimensions;
+        Real mWidth;
+        Real mHeight;
+    public:
+        // Note the intentional public access to main internal variables used at runtime
+        // Forcing access via get/set would be too costly for 000's of billboards
+        Vector3 mPosition;
+        // NB direction only relevant for rendering when billboard type = BBT_ORIENTED_SELF
+        Vector3 mDirection;
+        BillboardSet* mParentSet;
+        ColourValue mColour;
+        Radian mRotation;
+
+        /** Default constructor.
+        */
+        Billboard();
+
+        /** Default destructor.
+        */
+        ~Billboard();
+
+        /** Normal constructor as called by BillboardSet.
+        */
+        Billboard(const Vector3& position, BillboardSet* owner, const ColourValue& colour = ColourValue::White);
+
+        /** Get the rotation of the billboard.
+            @remarks
+                This rotation is relative to the center of the billboard.
+        */
+        const Radian& getRotation(void) const { return mRotation; }
+
+        /** Set the rotation of the billboard.
+            @remarks
+                This rotation is relative to the center of the billboard.
+        */
+        void setRotation(const Radian& rotation);
+
+        /** Set the position of the billboard.
+            @remarks
+                This position is relative to a point on the quad which is the billboard. Depending on the BillboardSet,
+                this may be the center of the quad, the top-left etc. See BillboardSet::setBillboardOrigin for more info.
+        */
+        void setPosition(const Vector3& position);
+
+        /** Set the position of the billboard.
+            @remarks
+                This position is relative to a point on the quad which is the billboard. Depending on the BillboardSet,
+                this may be the center of the quad, the top-left etc. See BillboardSet::setBillboardOrigin for more info.
+        */
+        void setPosition(Real x, Real y, Real z);
+
+        /** Get the position of the billboard.
+            @remarks
+                This position is relative to a point on the quad which is the billboard. Depending on the BillboardSet,
+                this may be the center of the quad, the top-left etc. See BillboardSet::setBillboardOrigin for more info.
+        */
+        const Vector3& getPosition(void) const;
+
+        /** Sets the width and height for this billboard.
+            @remarks
+                Note that it is most efficient for every billboard in a BillboardSet to have the same dimensions. If you
+                choose to alter the dimensions of an individual billboard the set will be less efficient. Do not call
+                this method unless you really need to have different billboard dimensions within the same set. Otherwise
+                just call the BillboardSet::setDefaultDimensions method instead.
+        */
+        void setDimensions(Real width, Real height);
+
+        /** Resets this Billboard to use the parent BillboardSet's dimensions instead of it's own. */
+        void resetDimensions(void) { mOwnDimensions = false; }
+        /** Sets the colour of this billboard.
+            @remarks
+                Billboards can be tinted based on a base colour. This allows variations in colour irresective of the
+                base colour of the material allowing more varied billboards. The default colour is white.
+                The tinting is effected using vertex colours.
+        */
+        void setColour(const ColourValue& colour);
+
+        /** Gets the colour of this billboard.
+        */
+        const ColourValue& getColour(void) const;
+
+        /** Returns true if this billboard deviates from the BillboardSet's default dimensions (i.e. if the
+            Billboard::setDimensions method has been called for this instance).
+            @see
+                Billboard::setDimensions
+        */
+        bool hasOwnDimensions(void) const;
+
+        /** Retrieves the billboard's personal width, if hasOwnDimensions is true. */
+        Real getOwnWidth(void) const;
+
+        /** Retrieves the billboard's personal width, if hasOwnDimensions is true. */
+        Real getOwnHeight(void) const;
+
+        /** Internal method for notifying the billboard of it's owner.
+        */
+        void _notifyOwner(BillboardSet* owner);
+
+    };
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreScriptLoader.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreScriptLoader.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreScriptLoader.h	(revision 1092)
@@ -0,0 +1,85 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __ScriptLoader_H__
+#define __ScriptLoader_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreDataStream.h"
+#include "OgreStringVector.h"
+
+namespace Ogre {
+
+	/** Abstract class defining the interface used by classes which wish 
+		to perform script loading to define instances of whatever they manage.
+	@remarks
+		Typically classes of this type wish to either parse individual script files
+		on demand, or be called with a group of files matching a certain pattern
+		at the appropriate time. Normally this will coincide with resource loading,
+		although the script use does not necessarily have to be a ResourceManager
+		(which subclasses from this class), it may be simply a script loader which 
+		manages non-resources but needs to be synchronised at the same loading points.
+	@par
+		Subclasses should add themselves to the ResourceGroupManager as a script loader
+		if they wish to be called at the point a resource group is loaded, at which 
+		point the parseScript method will be called with each file which matches a 
+		the pattern returned from getScriptPatterns.
+	*/
+	class _OgreExport ScriptLoader
+	{
+	public:
+		virtual ~ScriptLoader();
+		/** Gets the file patterns which should be used to find scripts for this
+			class.
+		@remarks
+			This method is called when a resource group is loaded if you use 
+			ResourceGroupManager::_registerScriptLoader.
+		@returns
+			A list of file patterns, in the order they should be searched in.
+		*/
+		virtual const StringVector& getScriptPatterns(void) const = 0;
+
+		/** Parse a script file.
+		@param stream Weak reference to a data stream which is the source of the script
+		@param groupName The name of a resource group which should be used if any resources
+			are created during the parse of this script.
+		*/
+		virtual void parseScript(DataStreamPtr& stream, const String& groupName) = 0;
+
+		/** Gets the relative loading order of scripts of this type.
+		@remarks
+			There are dependencies between some kinds of scripts, and to enforce
+			this all implementors of this interface must define a loading order. 
+		@returns A value representing the relative loading order of these scripts
+			compared to other script users, where higher values load later.
+		*/
+		virtual Real getLoadingOrder(void) const  = 0;
+
+	};
+
+
+}
+
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/ExampleRefAppFrameListener.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/ExampleRefAppFrameListener.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/ExampleRefAppFrameListener.h	(revision 1092)
@@ -0,0 +1,386 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+You may use this sample code for anything you like, it is not covered by the
+LGPL like the rest of the engine.
+-----------------------------------------------------------------------------
+*/
+
+/*
+-----------------------------------------------------------------------------
+Filename:    ExampleFrameListener.h
+Description: Defines an example frame listener which responds to frame events.
+             This frame listener just moves a specified camera around based on
+             keyboard and mouse movements.
+             Mouse:    Freelook
+             W or Up:  Forward
+             S or Down:Backward
+             A:           Step left
+             D:        Step right
+             PgUp:     Move upwards
+             PgDown:   Move downwards
+             O/P:       Yaw the root scene node (and it's children)
+             I/K:       Pitch the root scene node (and it's children)
+             F:           Toggle frame rate stats on/off
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __ExampleRefAppFrameListener_H__
+#define __ExampleRefAppFrameListener_H__
+
+#include "OgreReferenceAppLayer.h"
+#include "OgreKeyEvent.h"
+#include "OgreEventListeners.h"
+#include "OgreException.h"
+
+using namespace Ogre;
+using namespace OgreRefApp;
+
+class ExampleRefAppFrameListener: public FrameListener, public KeyListener
+{
+private:
+    void updateStats(void)
+    {
+        static String currFps = "Current FPS: ";
+        static String avgFps = "Average FPS: ";
+        static String bestFps = "Best FPS: ";
+        static String worstFps = "Worst FPS: ";
+        static String tris = "Triangle Count: ";
+
+        // update stats when necessary
+        OverlayElement* guiAvg = OverlayManager::getSingleton().getOverlayElement("Core/AverageFps");
+        OverlayElement* guiCurr = OverlayManager::getSingleton().getOverlayElement("Core/CurrFps");
+        OverlayElement* guiBest = OverlayManager::getSingleton().getOverlayElement("Core/BestFps");
+        OverlayElement* guiWorst = OverlayManager::getSingleton().getOverlayElement("Core/WorstFps");
+        
+        guiAvg->setCaption(avgFps + StringConverter::toString(mWindow->getAverageFPS()));
+        guiCurr->setCaption(currFps + StringConverter::toString(mWindow->getLastFPS()));
+        guiBest->setCaption(bestFps + StringConverter::toString(mWindow->getBestFPS())
+            +" "+StringConverter::toString(mWindow->getBestFrameTime())+" ms");
+        guiWorst->setCaption(worstFps + StringConverter::toString(mWindow->getWorstFPS())
+            +" "+StringConverter::toString(mWindow->getWorstFrameTime())+" ms");
+            
+        OverlayElement* guiTris = OverlayManager::getSingleton().getOverlayElement("Core/NumTris");
+        guiTris->setCaption(tris + StringConverter::toString(mWindow->getTriangleCount()));
+
+        OverlayElement* guiDbg = OverlayManager::getSingleton().getOverlayElement("Core/DebugText");
+        guiDbg->setCaption(mWindow->getDebugText());
+    }
+    
+public:
+    // Constructor takes a RenderWindow because it uses that to determine input context
+    ExampleRefAppFrameListener(RenderWindow* win, CollideCamera* cam, bool useBufferedInputKeys = false, bool useBufferedInputMouse = false)
+    {
+        mUseBufferedInputKeys = useBufferedInputKeys;
+		mUseBufferedInputMouse = useBufferedInputMouse;
+		mInputTypeSwitchingOn = mUseBufferedInputKeys || mUseBufferedInputMouse;
+
+		if (mInputTypeSwitchingOn)
+		{
+            mEventProcessor = new EventProcessor();
+			mEventProcessor->initialise(win);
+			mEventProcessor->startProcessingEvents();
+			mEventProcessor->addKeyListener(this);
+			mInputDevice = mEventProcessor->getInputReader();
+
+		}
+        else
+        {
+            mInputDevice = PlatformManager::getSingleton().createInputReader();
+            mInputDevice->initialise(win,true, true);
+        }
+        mCamera = cam;
+        mWindow = win;
+        mStatsOn = true;
+		mNumScreenShots = 0;
+		mTimeUntilNextToggle = 0;
+
+        showDebugOverlay(true);
+    }
+    virtual ~ExampleRefAppFrameListener()
+    {
+		if (mInputTypeSwitchingOn)
+		{
+            delete mEventProcessor;
+		}
+        else
+        {
+            PlatformManager::getSingleton().destroyInputReader( mInputDevice );
+        }
+    }
+
+    bool processUnbufferedKeyInput(const FrameEvent& evt)
+    {
+        if (mInputDevice->isKeyDown(KC_A))
+        {
+            // Move camera left
+            mTranslateVector.x = -mMoveScale;
+        }
+
+        if (mInputDevice->isKeyDown(KC_D))
+        {
+            // Move camera RIGHT
+            mTranslateVector.x = mMoveScale;
+        }
+
+        /* Move camera forward by keypress. */
+        if (mInputDevice->isKeyDown(KC_UP) || mInputDevice->isKeyDown(KC_W) )
+        {
+            mTranslateVector.z = -mMoveScale;
+        }
+        /* Move camera forward by mousewheel. */
+        if( mInputDevice->getMouseRelativeZ() > 0 )
+        {
+            mTranslateVector.z = -mMoveScale * 8.0;
+        }
+
+        /* Move camera backward by keypress. */
+        if (mInputDevice->isKeyDown(KC_DOWN) || mInputDevice->isKeyDown(KC_S) )
+        {
+            mTranslateVector.z = mMoveScale;
+        }
+
+        /* Move camera backward by mouse wheel. */
+        if( mInputDevice->getMouseRelativeZ() < 0 )
+        {
+            mTranslateVector.z = mMoveScale * 8.0;
+        }
+
+        if (mInputDevice->isKeyDown(KC_PGUP))
+        {
+            // Move camera up
+            mTranslateVector.y = mMoveScale;
+        }
+
+        if (mInputDevice->isKeyDown(KC_PGDOWN))
+        {
+            // Move camera down
+            mTranslateVector.y = -mMoveScale;
+        }
+
+        if (mInputDevice->isKeyDown(KC_RIGHT))
+        {
+            mCamera->yaw(-mRotScale);
+        }
+		
+        if (mInputDevice->isKeyDown(KC_LEFT))
+        {
+            mCamera->yaw(mRotScale);
+        }
+
+        if( mInputDevice->isKeyDown( KC_ESCAPE) )
+        {            
+            return false;
+        }
+
+		// see if switching is on, and you want to toggle 
+        if (mInputTypeSwitchingOn && mInputDevice->isKeyDown(KC_M) && mTimeUntilNextToggle <= 0)
+        {
+			switchMouseMode();
+            mTimeUntilNextToggle = 1;
+        }
+
+        if (mInputTypeSwitchingOn && mInputDevice->isKeyDown(KC_K) && mTimeUntilNextToggle <= 0)
+        {
+			// must be going from immediate keyboard to buffered keyboard
+			switchKeyMode();
+            mTimeUntilNextToggle = 1;
+        }
+        if (mInputDevice->isKeyDown(KC_F) && mTimeUntilNextToggle <= 0)
+        {
+            mStatsOn = !mStatsOn;
+            showDebugOverlay(mStatsOn);
+
+            mTimeUntilNextToggle = 1;
+        }
+
+        if (mInputDevice->isKeyDown(KC_SYSRQ) && mTimeUntilNextToggle <= 0)
+        {
+			StringUtil::StrStreamType tmp;
+			tmp << "screenshot_" << ++mNumScreenShots << ".png";
+            mWindow->writeContentsToFile(tmp.str());
+            mTimeUntilNextToggle = 0.5;
+			mWindow->setDebugText(String("Wrote ") + tmp.str());
+        }
+
+
+
+        // Return true to continue rendering
+        return true;
+    }
+
+    bool processUnbufferedMouseInput(const FrameEvent& evt)
+    {
+        /* Rotation factors, may not be used if the second mouse button is pressed. */
+
+        /* If the second mouse button is pressed, then the mouse movement results in 
+           sliding the camera, otherwise we rotate. */
+        if( mInputDevice->getMouseButton( 1 ) )
+        {
+            mTranslateVector.x += mInputDevice->getMouseRelativeX() * 0.13;
+            mTranslateVector.y -= mInputDevice->getMouseRelativeY() * 0.13;
+        }
+        else
+        {
+            mRotX = Degree(-mInputDevice->getMouseRelativeX() * 0.13);
+            mRotY = Degree(-mInputDevice->getMouseRelativeY() * 0.13);
+        }
+
+
+		return true;
+	}
+
+	void moveCamera()
+	{
+
+        // Make all the changes to the camera
+        // Note that YAW direction is around a fixed axis (freelook style) rather than a natural YAW (e.g. airplane)
+        mCamera->yaw(mRotX);
+        mCamera->pitch(mRotY);
+        mCamera->translate(mTranslateVector);
+
+
+	}
+
+    void showDebugOverlay(bool show)
+    {   
+        Overlay* o = OverlayManager::getSingleton().getByName("Core/DebugOverlay");
+        if (!o)
+            OGRE_EXCEPT( Exception::ERR_ITEM_NOT_FOUND, "Could not find overlay Core/DebugOverlay",
+                "showDebugOverlay" );
+        if (show)
+        {
+            o->show();
+        }
+        else
+        {
+            o->hide();
+        }
+    }
+
+    // Override frameEnded event 
+    bool frameEnded(const FrameEvent& evt)
+    {
+
+        if (!mInputTypeSwitchingOn)
+    	{
+            mInputDevice->capture();
+        }
+
+
+		if ( !mUseBufferedInputMouse || !mUseBufferedInputKeys)
+		{
+			// one of the input modes is immediate, so setup what is needed for immediate mouse/key movement
+			if (mTimeUntilNextToggle >= 0) 
+				mTimeUntilNextToggle -= evt.timeSinceLastFrame;
+
+			// If this is the first frame, pick a speed
+			if (evt.timeSinceLastFrame == 0)
+			{
+				mMoveScale = 0.5;
+				mRotScale = 0.1;
+			}
+			// Otherwise scale movement units by time passed since last frame
+			else
+			{
+				// Move about 50 units per second,
+				mMoveScale = 50.0 * evt.timeSinceLastFrame;
+				// Take about 10 seconds for full rotation
+				mRotScale = Degree(36 * evt.timeSinceLastFrame);
+			}
+			mRotX = 0;
+            mRotY = 0;
+	        mTranslateVector = Vector3::ZERO;
+		}
+
+        if (mUseBufferedInputKeys)
+        {
+            // no need to do any processing here, it is handled by event processor and 
+			// you get the results as KeyEvents
+        }
+        else
+        {
+            if (processUnbufferedKeyInput(evt) == false)
+			{
+				return false;
+			}
+        }
+        if (mUseBufferedInputMouse)
+        {
+            // no need to do any processing here, it is handled by event processor and 
+			// you get the results as MouseEvents
+        }
+        else
+        {
+            if (processUnbufferedMouseInput(evt) == false)
+			{
+				return false;
+			}
+        }
+
+		if ( !mUseBufferedInputMouse || !mUseBufferedInputKeys)
+		{
+			// one of the input modes is immediate, so update the movement vector
+
+			moveCamera();
+
+		}
+
+        // Perform simulation step
+        World::getSingleton().simulationStep(evt.timeSinceLastFrame);
+
+        updateStats();
+		return true;
+    }
+
+	void switchMouseMode() 
+	{
+        mUseBufferedInputMouse = !mUseBufferedInputMouse;
+		mInputDevice->setBufferedInput(mUseBufferedInputKeys, mUseBufferedInputMouse);
+	}
+	void switchKeyMode() 
+	{
+        mUseBufferedInputKeys = !mUseBufferedInputKeys;
+		mInputDevice->setBufferedInput(mUseBufferedInputKeys, mUseBufferedInputMouse);
+	}
+
+	void keyClicked(KeyEvent* e) 
+	{
+		if (e->getKeyChar() == 'm')
+		{
+			switchMouseMode();
+		}
+		else if (e->getKeyChar() == 'k')
+		{
+
+			switchKeyMode();
+		}
+
+	}
+	void keyPressed(KeyEvent* e) {}
+	void keyReleased(KeyEvent* e) {}
+
+protected:
+    EventProcessor* mEventProcessor;
+    InputReader* mInputDevice;
+    CollideCamera* mCamera;
+    Vector3 mTranslateVector;
+    RenderWindow* mWindow;
+    bool mStatsOn;
+    bool mUseBufferedInputKeys, mUseBufferedInputMouse, mInputTypeSwitchingOn;
+	unsigned int mNumScreenShots;
+    float mMoveScale;
+    Radian mRotScale;
+    // just to stop toggles flipping too fast
+    Real mTimeUntilNextToggle ;
+    Radian mRotX, mRotY;
+
+};
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreKeyTarget.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreKeyTarget.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreKeyTarget.h	(revision 1092)
@@ -0,0 +1,69 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+/***************************************************************************
+OgreKeyTarget.h  -  
+	Handles the adding and removing of KeyListeners.
+
+	Components that process the Key Event should subclass this class 
+	and call processKeyEvent when that event is identified.
+
+-------------------
+begin                : Nov 19 2002
+copyright            : (C) 2002 by Kenny Sabir
+email                : kenny@sparksuit.com
+***************************************************************************/
+
+#ifndef __KeyTarget_H__
+#define __KeyTarget_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreEventTarget.h"
+
+namespace Ogre {
+
+    class _OgreExport KeyTarget : public EventTarget
+    {
+    private:
+        std::set<KeyListener*> mRemovedListeners;
+
+    protected:
+        std::set<KeyListener*> mKeyListeners;
+
+    public:
+		KeyTarget() { }
+        virtual ~KeyTarget() { }
+
+	    void processKeyEvent(KeyEvent* e) ;
+	    void addKeyListener(KeyListener* l) ;
+	    void removeKeyListener(KeyListener* l) ;
+    };
+
+
+
+}
+
+
+#endif //__KeyTarget_H__
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderOperation.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderOperation.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderOperation.h	(revision 1092)
@@ -0,0 +1,80 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _RenderOperation_H__
+#define _RenderOperation_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreVertexIndexData.h"
+
+namespace Ogre {
+
+
+	/** 'New' rendering operation using vertex buffers. */
+	class _OgrePrivate RenderOperation {
+	public:
+		/// The rendering operation type to perform
+		enum OperationType {
+			/// A list of points, 1 vertex per point
+            OT_POINT_LIST = 1,
+			/// A list of lines, 2 vertices per line
+            OT_LINE_LIST = 2,
+			/// A strip of connected lines, 1 vertex per line plus 1 start vertex
+            OT_LINE_STRIP = 3,
+			/// A list of triangles, 3 vertices per triangle
+            OT_TRIANGLE_LIST = 4,
+			/// A strip of triangles, 3 vertices for the first triangle, and 1 per triangle after that 
+            OT_TRIANGLE_STRIP = 5,
+			/// A fan of triangles, 3 vertices for the first triangle, and 1 per triangle after that
+            OT_TRIANGLE_FAN = 6
+        };
+
+		/// Vertex source data
+		VertexData *vertexData;
+
+		/// The type of operation to perform
+		OperationType operationType;
+
+		/** Specifies whether to use indexes to determine the vertices to use as input. If false, the vertices are
+		 simply read in sequence to define the primitives. If true, indexes are used instead to identify vertices
+		 anywhere in the buffer, and allowing vertices to be used more than once.
+	   	 If true, then the indexBuffer, indexStart and numIndexes properties must be valid. */
+		bool useIndexes;
+
+		/// Index data - only valid if useIndexes is true
+		IndexData *indexData;
+		/// Debug pointer back to renderable which created this
+		Renderable* srcRenderable;
+
+
+        RenderOperation() :
+            vertexData(0), operationType(OT_TRIANGLE_LIST), useIndexes(true),
+                indexData(0) {}
+
+	};
+}
+
+
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderTexture.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderTexture.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderTexture.h	(revision 1092)
@@ -0,0 +1,52 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __RenderTexture_H__
+#define __RenderTexture_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreRenderTarget.h"
+
+namespace Ogre
+{
+    class _OgreExport RenderTexture : public RenderTarget
+    {
+    public:
+        RenderTexture( const String & name, uint width, uint height, TextureType texType = TEX_TYPE_2D,  PixelFormat format = PF_R8G8B8);
+        ~RenderTexture();
+    protected:
+		RenderTexture() {};
+
+		virtual void firePostUpdate();
+		virtual void _copyToTexture() = 0;
+
+	protected:
+		/// The texture that gets accesses by the rest of the API.
+        TexturePtr mTexture;
+        PixelFormat mInternalFormat;
+    };
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/ExampleApplication.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/ExampleApplication.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/ExampleApplication.h	(revision 1092)
@@ -0,0 +1,206 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+You may use this sample code for anything you like, it is not covered by the
+LGPL like the rest of the engine.
+-----------------------------------------------------------------------------
+*/
+/*
+-----------------------------------------------------------------------------
+Filename:    ExampleApplication.h
+Description: Base class for all the OGRE examples
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __ExampleApplication_H__
+#define __ExampleApplication_H__
+
+#include "Ogre.h"
+#include "OgreConfigFile.h"
+#include "ExampleFrameListener.h"
+
+
+using namespace Ogre;
+
+/** Base class which manages the standard startup of an Ogre application.
+    Designed to be subclassed for specific examples if required.
+*/
+class ExampleApplication
+{
+public:
+    /// Standard constructor
+    ExampleApplication()
+    {
+        mFrameListener = 0;
+        mRoot = 0;
+    }
+    /// Standard destructor
+    virtual ~ExampleApplication()
+    {
+        if (mFrameListener)
+            delete mFrameListener;
+        if (mRoot)
+            delete mRoot;
+    }
+
+    /// Start the example
+    virtual void go(void)
+    {
+        if (!setup())
+            return;
+
+        mRoot->startRendering();
+
+        // clean up
+        destroyScene();
+    }
+
+protected:
+    Root *mRoot;
+    Camera* mCamera;
+    SceneManager* mSceneMgr;
+    ExampleFrameListener* mFrameListener;
+    RenderWindow* mWindow;
+
+    // These internal methods package up the stages in the startup process
+    /** Sets up the application - returns false if the user chooses to abandon configuration. */
+    virtual bool setup(void)
+    {
+        mRoot = new Root();
+
+        setupResources();
+
+        bool carryOn = configure();
+        if (!carryOn) return false;
+
+        chooseSceneManager();
+        createCamera();
+        createViewports();
+
+        // Set default mipmap level (NB some APIs ignore this)
+        TextureManager::getSingleton().setDefaultNumMipmaps(5);
+
+		// Create any resource listeners (for loading screens)
+		createResourceListener();
+		// Load resources
+		loadResources();
+
+		// Create the scene
+        createScene();
+
+        createFrameListener();
+
+        return true;
+
+    }
+    /** Configures the application - returns false if the user chooses to abandon configuration. */
+    virtual bool configure(void)
+    {
+        // Show the configuration dialog and initialise the system
+        // You can skip this and use root.restoreConfig() to load configuration
+        // settings if you were sure there are valid ones saved in ogre.cfg
+        if(mRoot->showConfigDialog())
+        {
+            // If returned true, user clicked OK so initialise
+            // Here we choose to let the system create a default rendering window by passing 'true'
+            mWindow = mRoot->initialise(true);
+            return true;
+        }
+        else
+        {
+            return false;
+        }
+    }
+
+    virtual void chooseSceneManager(void)
+    {
+        // Get the SceneManager, in this case a generic one
+        mSceneMgr = mRoot->getSceneManager(ST_GENERIC);
+    }
+    virtual void createCamera(void)
+    {
+        // Create the camera
+        mCamera = mSceneMgr->createCamera("PlayerCam");
+
+        // Position it at 500 in Z direction
+        mCamera->setPosition(Vector3(0,0,500));
+        // Look back along -Z
+        mCamera->lookAt(Vector3(0,0,-300));
+        mCamera->setNearClipDistance(5);
+
+    }
+    virtual void createFrameListener(void)
+    {
+        mFrameListener= new ExampleFrameListener(mWindow, mCamera);
+        mFrameListener->showDebugOverlay(true);
+        mRoot->addFrameListener(mFrameListener);
+    }
+
+    virtual void createScene(void) = 0;    // pure virtual - this has to be overridden
+
+    virtual void destroyScene(void){}    // Optional to override this
+
+    virtual void createViewports(void)
+    {
+        // Create one viewport, entire window
+        Viewport* vp = mWindow->addViewport(mCamera);
+        vp->setBackgroundColour(ColourValue(0,0,0));
+
+        // Alter the camera aspect ratio to match the viewport
+        mCamera->setAspectRatio(
+            Real(vp->getActualWidth()) / Real(vp->getActualHeight()));
+    }
+
+    /// Method which will define the source of resources (other than current folder)
+    virtual void setupResources(void)
+    {
+        // Load resource paths from config file
+        ConfigFile cf;
+        cf.load("resources.cfg");
+
+        // Go through all sections & settings in the file
+        ConfigFile::SectionIterator seci = cf.getSectionIterator();
+
+        String secName, typeName, archName;
+        while (seci.hasMoreElements())
+        {
+            secName = seci.peekNextKey();
+            ConfigFile::SettingsMultiMap *settings = seci.getNext();
+            ConfigFile::SettingsMultiMap::iterator i;
+            for (i = settings->begin(); i != settings->end(); ++i)
+            {
+                typeName = i->first;
+                archName = i->second;
+                ResourceGroupManager::getSingleton().addResourceLocation(
+                    archName, typeName, secName);
+            }
+        }
+    }
+
+	/// Optional override method where you can create resource listeners (e.g. for loading screens)
+	virtual void createResourceListener(void)
+	{
+
+	}
+
+	/// Optional override method where you can perform resource group loading
+	/// Must at least do ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
+	virtual void loadResources(void)
+	{
+		// Initialise, parse scripts etc
+		ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
+
+	}
+
+
+
+};
+
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreHardwareOcclusionQuery.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreHardwareOcclusionQuery.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreHardwareOcclusionQuery.h	(revision 1092)
@@ -0,0 +1,139 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://ogre.sourceforge.net/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _HardwareOcclusionQuery__
+#define _HardwareOcclusionQuery__
+
+// Precompiler options
+#include "OgrePrerequisites.h"
+
+namespace Ogre {
+
+
+/**
+  * Hardware occlusion query flags
+  */
+typedef enum _OCCLUSIONQUERY 
+{
+	HWOCCLUSIONQUERY_FLUSH,   /** Direct3D uses this, but not OpenGL */
+	HWOCCLUSIONQUERY_NOFLUSH, /** To decide if the driver should flush all batched API calls to serve an occlusion query faster. */
+} HW_OCCLUSIONQUERY;
+
+/**
+  * This is a abstract class that that provides the interface for the query class for 
+  * hardware occlusion.
+  *
+  * @author Lee Sandberg
+  * Updated on 4/8/2005 by Tuan Kuranes email: tuan.kuranes@free.fr
+  */
+class _OgreExport HardwareOcclusionQuery
+{
+//----------------------------------------------------------------------
+// Public methods
+//--
+public:
+	/**
+	  * Object public member functions
+	  */
+
+	/**
+	  * Default object constructor
+	  * 
+	  */
+	HardwareOcclusionQuery();
+
+	/**
+	  * Object destructor
+	  */
+	virtual ~HardwareOcclusionQuery();
+
+	/**
+	  * Starts the hardware occlusion query
+	  * @Remarks	Simple usage: Create one or more OcclusionQuery object one per outstanding query or one per tested object 
+	  *				OcclusionQuery* m_pOcclusionQuery;
+	  *				createOcclusionQuery( &m_pOcclusionQuery );
+	  *				In the rendering loop:
+	  *				Draw all occluders
+	  *				m_pOcclusionQuery->startOcclusionQuery();
+	  *				Draw the polygons to be tested
+	  *				m_pOcclusionQuery->endOcclusionQuery();
+	  *
+	  *				Results must be pulled using:
+	  *				UINT	m_uintNumberOfPixelsVisable;
+	  *				pullOcclusionQuery( &m_dwNumberOfPixelsVisable );
+	  *				You may not get the result directly after the first pass or frame.
+	  *				Objects not visible must be tested every frame, visible objects may be tested less frequently.
+	  *			
+	  */
+	virtual void beginOcclusionQuery() = 0;
+
+	/**
+	  * Ends the hardware occlusion test
+	  */
+	virtual void endOcclusionQuery() = 0;
+
+	/**
+      * Pulls the hardware occlusion query too see if there is a result.
+      * @retval NumOfFragments will get the resulting number of fragments.
+      * @return True if success or false if not.
+	  * @Remarks In DX9 mode specifying OCCLUSIONQUERY_FLUSH as the flag, will case the driver to flush whatever API calls are batched.
+	  * In OpenGL mode it makes no difference if you specify OCCLUSIONQUERY_FLUSH or OCCLUSIONQUERY_NOFLUSH.
+      */
+	virtual bool pullOcclusionQuery(unsigned int* NumOfFragments, const HW_OCCLUSIONQUERY flag = HWOCCLUSIONQUERY_FLUSH) = 0;
+
+	/**
+	  * Let's you get the last pixel count with out doing the hardware occlusion test
+	  * @return The last fragment count from the last test.
+	  * Remarks This function won't give you new values, just the old value.
+	  */
+	virtual unsigned int getLastQuerysPixelcount() = 0;
+
+	/**
+	  * Lets you know when query is done, or still be processed by the Hardware
+	  * @return true if query isn't finished.
+	  */
+	 virtual bool HardwareOcclusionQuery::isStillOutstanding(void) = 0; 
+	/**
+	  *   
+	  * @Remarks This function allows you to set how often the hardware occlusion really are sent to the driver
+	  * if you set it to 0 every hardware occlusion test is actually made. If you set it to 1 only the half of your queries are sent 
+	  * for all visible objects. 2 will result in 25% of all queries to actually be sent. 
+	  * New and none visible objects will be tested all the time.
+	  * This functionality is here because this class can keep track on visible and none visible objects for you.
+	  * Once you you set the SkipRate for any hardware occlusion instance it effects all others.
+	  */
+
+	virtual void	setSkipRate( int skip ) = 0;
+	virtual int		getSkipRate() = 0;
+
+//----------------------------------------------------------------------
+// Private members
+//--
+private:
+
+};
+
+}
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreZip.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreZip.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreZip.h	(revision 1092)
@@ -0,0 +1,133 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __Zip_H__
+#define __Zip_H__
+
+#include <zzip/zzip.h>
+#include "OgrePrerequisites.h"
+
+#include "OgreArchive.h"
+#include "OgreArchiveFactory.h"
+
+namespace Ogre {
+
+    /** Specialisation of the Archive class to allow reading of files from a zip
+        format source archive.
+    @remarks
+        This archive format supports all archives compressed in the standard
+        zip format, including iD pk3 files.
+    */
+    class _OgreExport ZipArchive : public Archive 
+    {
+    protected:
+        /// Handle to root zip file
+        ZZIP_DIR* mZzipDir;
+        /// Handle any errors from zzip
+        void checkZzipError(zzip_error_t zzipError, const String& operation) const;
+        /// File list (since zziplib seems to only allow scanning of dir tree once)
+        FileInfoList mFileList;
+    public:
+        ZipArchive(const String& name, const String& archType );
+        ~ZipArchive();
+        /// @copydoc Archive::isCaseSensitive
+        bool isCaseSensitive(void) const { return false; }
+
+        /// @copydoc Archive::load
+        void load();
+        /// @copydoc Archive::unload
+        void unload();
+
+        /// @copydoc Archive::open
+        DataStreamPtr open(const String& filename) const;
+
+        /// @copydoc Archive::list
+        StringVectorPtr list(bool recursive = true );
+
+        /// @copydoc Archive::listFileInfo
+        FileInfoListPtr listFileInfo(bool recursive = true );
+
+        /// @copydoc Archive::find
+        StringVectorPtr find(const String& pattern, bool recursive = true);
+
+        /// @copydoc Archive::findFileInfo
+        FileInfoListPtr findFileInfo(const String& pattern, bool recursive = true);
+
+        /// @copydoc Archive::exists
+		bool exists(const String& filename);
+    };
+
+    /** Specialisation of ArchiveFactory for Zip files. */
+    class _OgrePrivate ZipArchiveFactory : public ArchiveFactory
+    {
+    public:
+        virtual ~ZipArchiveFactory() {}
+        /// @copydoc FactoryObj::getType
+        const String& getType(void) const;
+        /// @copydoc FactoryObj::createInstance
+        Archive *createInstance( const String& name ) 
+        {
+            return new ZipArchive(name, "Zip");
+        }
+        /// @copydoc FactoryObj::destroyInstance
+        void destroyInstance( Archive* arch) { delete arch; }
+    };
+
+    /** Specialisation of DataStream to handle streaming data from zip archives. */
+    class _OgrePrivate ZipDataStream : public DataStream
+    {
+    protected:
+        ZZIP_FILE* mZzipFile;
+		/// Temporary zip copy area
+		char mZipTmpArea[OGRE_STREAM_TEMP_SIZE];
+    public:
+        /// Unnamed constructor
+        ZipDataStream(ZZIP_FILE* zzipFile, size_t uncompressedSize);
+        /// Constructor for creating named streams
+        ZipDataStream(const String& name, ZZIP_FILE* zzipFile, size_t uncompressedSize);
+		~ZipDataStream();
+        /// @copydoc DataStream::read
+        size_t read(void* buf, size_t count);
+        /// @copydoc DataStream::read
+        size_t readLine(char* buf, size_t maxCount, const String& delim = "\n");
+        /// @copydoc DataStream::skipLine
+        size_t skipLine(const String& delim = "\n");
+        /// @copydoc DataStream::skip
+        void skip(long count);
+        /// @copydoc DataStream::seek
+        void seek( size_t pos );
+        /// @copydoc DataStream::seek
+        size_t tell(void) const;
+        /// @copydoc DataStream::eof
+        bool eof(void) const;
+        /// @copydoc DataStream::close
+        void close(void);
+
+
+    };
+
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMovablePlane.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMovablePlane.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMovablePlane.h	(revision 1092)
@@ -0,0 +1,86 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+// Original free version by:
+// Magic Software, Inc.
+// http://www.magic-software.com
+// Copyright (c) 2000, All Rights Reserved
+
+#ifndef __MovablePlane_H__
+#define __MovablePlane_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgrePlane.h"
+#include "OgreMovableObject.h"
+
+namespace Ogre {
+
+
+    /** Definition of a Plane that may be attached to a node, and the derived
+        details of it retrieved simply.
+    @remarks
+        This plane is not here for rendering purposes, it's to allow you to attach
+        planes to the scene in order to have them move and follow nodes on their
+        own, which is useful if you're using the plane for some kind of calculation,
+        e.g. reflection.
+    */
+    class _OgreExport MovablePlane : public Plane, public MovableObject
+    {
+    protected:
+        String mName;
+        mutable Plane mDerivedPlane;
+        mutable Vector3 mLastTranslate;
+        mutable Quaternion mLastRotate;
+        AxisAlignedBox mNullBB;
+        mutable bool mDirty;
+        static String msMovableType;
+    public:
+
+        MovablePlane(const String& name);
+        MovablePlane (const Plane& rhs);
+        /** Construct a plane through a normal, and a distance to move the plane along the normal.*/
+        MovablePlane (const Vector3& rkNormal, Real fConstant);
+        MovablePlane (const Vector3& rkNormal, const Vector3& rkPoint);
+        MovablePlane (const Vector3& rkPoint0, const Vector3& rkPoint1,
+            const Vector3& rkPoint2);
+        ~MovablePlane() {}
+        /// Overridden from MovableObject
+        void _notifyCurrentCamera(Camera* cam) { /* don't care */ }
+        /// Overridden from MovableObject
+        const AxisAlignedBox& getBoundingBox(void) const { return mNullBB; }
+        /// Overridden from MovableObject
+        Real getBoundingRadius(void) const { return Math::POS_INFINITY; }
+        /// Overridden from MovableObject
+        void _updateRenderQueue(RenderQueue* queue) { /* do nothing */}
+        /// Overridden from MovableObject
+        const String& getName(void) const;
+        /// Overridden from MovableObject
+        const String& getMovableType(void) const;
+        /// Get the derived plane as transformed by its parent node. 
+        const Plane& _getDerivedPlane(void) const;
+
+    };
+}
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreBillboardParticleRenderer.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreBillboardParticleRenderer.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreBillboardParticleRenderer.h	(revision 1092)
@@ -0,0 +1,155 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE 
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under 
+the terms of the GNU Lesser General Public License as published by the Free Software 
+Foundation; either version 2 of the License, or (at your option) any later 
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT 
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with 
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple 
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to 
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __BillboardParticleRenderer_H__
+#define __BillboardParticleRenderer_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreParticleSystemRenderer.h"
+#include "OgreBillboardSet.h"
+
+namespace Ogre {
+
+    /** Specialisation of ParticleSystemRenderer to render particles using 
+        a BillboardSet. 
+    @remarks
+        This renderer has a few more options than the standard particle system,
+        which will be passed to it automatically when the particle system itself
+        does not understand them.
+    */
+    class _OgreExport BillboardParticleRenderer : public ParticleSystemRenderer
+    {
+    protected:
+        /// The billboard set that's doing the rendering
+        BillboardSet* mBillboardSet;
+    public:
+        BillboardParticleRenderer();
+        ~BillboardParticleRenderer();
+
+        /** Command object for billboard type (see ParamCommand).*/
+        class _OgrePrivate CmdBillboardType : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /** Command object for common direction (see ParamCommand).*/
+        class _OgrePrivate CmdCommonDirection : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+
+        /** Sets the type of billboard to render.
+        @remarks
+            The default sort of billboard (BBT_POINT), always has both x and y axes parallel to 
+            the camera's local axes. This is fine for 'point' style billboards (e.g. flares,
+            smoke, anything which is symmetrical about a central point) but does not look good for
+            billboards which have an orientation (e.g. an elongated raindrop). In this case, the
+            oriented billboards are more suitable (BBT_ORIENTED_COMMON or BBT_ORIENTED_SELF) since they retain an independant Y axis
+            and only the X axis is generated, perpendicular to both the local Y and the camera Z.
+        @param bbt The type of billboard to render
+        */
+        void setBillboardType(BillboardType bbt);
+
+        /** Returns the billboard type in use. */
+        BillboardType getBillboardType(void) const;
+
+        /** Sets the point which acts as the origin point for all billboards in this set.
+        @remarks
+        This setting controls the fine tuning of where a billboard appears in relation to it's
+        position. It could be that a billboard's position represents it's center (e.g. for fireballs),
+        it could mean the center of the bottom edge (e.g. a tree which is positioned on the ground),
+        the top-left corner (e.g. a cursor).
+        @par
+        The default setting is BBO_CENTER.
+        @param
+        origin A member of the BillboardOrigin enum specifying the origin for all the billboards in this set.
+        */
+        void setBillboardOrigin(BillboardOrigin origin) { mBillboardSet->setBillboardOrigin(origin); }
+
+        /** Gets the point which acts as the origin point for all billboards in this set.
+        @returns
+        A member of the BillboardOrigin enum specifying the origin for all the billboards in this set.
+        */
+        BillboardOrigin getBillboardOrigin(void) const { return mBillboardSet->getBillboardOrigin(); }
+
+        /** Use this to specify the common direction given to billboards of type BBT_ORIENTED_COMMON.
+        @remarks
+            Use BBT_ORIENTED_COMMON when you want oriented billboards but you know they are always going to 
+            be oriented the same way (e.g. rain in calm weather). It is faster for the system to calculate
+            the billboard vertices if they have a common direction.
+        @param vec The direction for all billboards.
+        */
+        void setCommonDirection(const Vector3& vec);
+
+        /** Gets the common direction for all billboards (BBT_ORIENTED_COMMON) */
+        const Vector3& getCommonDirection(void) const;
+
+        /// @copydoc ParticleSystemRenderer::getType
+        const String& getType(void) const;
+        /// @copydoc ParticleSystemRenderer::_updateRenderQueue
+        void _updateRenderQueue(RenderQueue* queue, 
+            std::list<Particle*>& currentParticles, bool cullIndividually);
+        /// @copydoc ParticleSystemRenderer::_setMaterial
+        void _setMaterial(MaterialPtr& mat);
+        /// @copydoc ParticleSystemRenderer::_notifyCurrentCamera
+        void _notifyCurrentCamera(Camera* cam);
+        /// @copydoc ParticleSystemRenderer::_notifyParticleRotated
+        void _notifyParticleRotated(void);
+        /// @copydoc ParticleSystemRenderer::_notifyParticleResized
+        void _notifyParticleResized(void);
+        /// @copydoc ParticleSystemRenderer::_notifyParticleQuota
+        void _notifyParticleQuota(size_t quota);
+        /// @copydoc ParticleSystemRenderer::_notifyAttached
+        void _notifyAttached(Node* parent, bool isTagPoint = false);
+        /// @copydoc ParticleSystemRenderer::_notifyDefaultDimensions
+        void _notifyDefaultDimensions(Real width, Real height);
+		/// @copydoc ParticleSystemRenderer::setRenderQueueGroup
+		void setRenderQueueGroup(RenderQueueGroupID queueID);
+
+    protected:
+        static CmdBillboardType msBillboardTypeCmd;
+        static CmdCommonDirection msCommonDirectionCmd;
+
+
+    };
+
+    /** Factory class for BillboardParticleRenderer */
+    class _OgreExport BillboardParticleRendererFactory : public ParticleSystemRendererFactory
+    {
+    public:
+        /// @copydoc FactoryObj::getType
+        const String& getType() const;
+        /// @copydoc FactoryObj::createInstance
+        ParticleSystemRenderer* createInstance( const String& name );    
+        /// @copydoc FactoryObj::destroyInstance
+        void destroyInstance( ParticleSystemRenderer* inst);    
+    };
+
+}
+
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePass.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePass.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePass.h	(revision 1092)
@@ -0,0 +1,972 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://ogre.sourceforge.net/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __Pass_H__
+#define __Pass_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreGpuProgram.h"
+#include "OgreColourValue.h"
+#include "OgreBlendMode.h"
+#include "OgreCommon.h"
+#include "OgreLight.h"
+
+namespace Ogre {
+    /** Class defining a single pass of a Technique (of a Material), ie
+        a single rendering call. 
+    @remarks
+        Rendering can be repeated with many passes for more complex effects.
+        Each pass is either a fixed-function pass (meaning it does not use
+        a vertex or fragment program) or a programmable pass (meaning it does
+        use either a vertex and fragment program, or both). 
+    @par
+        Programmable passes are complex to define, because they require custom
+        programs and you have to set all constant inputs to the programs (like
+        the position of lights, any base material colours you wish to use etc), but
+        they do give you much total flexibility over the algorithms used to render your
+        pass, and you can create some effects which are impossible with a fixed-function pass.
+        On the other hand, you can define a fixed-function pass in very little time, and
+        you can use a range of fixed-function effects like environment mapping very
+        easily, plus your pass will be more likely to be compatible with older hardware.
+        There are pros and cons to both, just remember that if you use a programmable
+        pass to create some great effects, allow more time for definition and testing.
+    */
+    class _OgreExport Pass
+    {
+    protected:
+        Technique* mParent;
+        unsigned short mIndex; // pass index
+        unsigned long mHash; // pass hash
+        //-------------------------------------------------------------------------
+        // Colour properties, only applicable in fixed-function passes
+        ColourValue mAmbient;
+        ColourValue mDiffuse;
+        ColourValue mSpecular;    
+        ColourValue mEmissive;
+        Real mShininess;
+        TrackVertexColourType mTracking;
+        //-------------------------------------------------------------------------
+
+        //-------------------------------------------------------------------------
+        // Blending factors
+        SceneBlendFactor mSourceBlendFactor;    
+        SceneBlendFactor mDestBlendFactor;
+        //-------------------------------------------------------------------------
+
+        //-------------------------------------------------------------------------    
+        // Depth buffer settings
+        bool mDepthCheck;
+        bool mDepthWrite;
+        CompareFunction mDepthFunc;
+        ushort mDepthBias;
+
+        // Colour buffer settings
+        bool mColourWrite;
+		
+		// Alpha reject settings
+		CompareFunction mAlphaRejectFunc;
+		unsigned char mAlphaRejectVal;
+        //-------------------------------------------------------------------------    
+
+        //-------------------------------------------------------------------------
+        // Culling mode
+        CullingMode mCullMode;
+        ManualCullingMode mManualCullMode;
+        //-------------------------------------------------------------------------
+
+        /// Lighting enabled?
+        bool mLightingEnabled;
+        /// Max simultaneous lights
+        unsigned short mMaxSimultaneousLights;
+		/// Run this pass once per light?
+		bool mRunOncePerLight;
+        // Should it only be run for a certain light type?
+        bool mRunOnlyForOneLightType;
+        Light::LightTypes mOnlyLightType;
+
+        /// Shading options
+        ShadeOptions mShadeOptions;
+
+        //-------------------------------------------------------------------------    
+        // Fog
+        bool mFogOverride;
+        FogMode mFogMode;
+        ColourValue mFogColour;
+        Real mFogStart;
+        Real mFogEnd;
+        Real mFogDensity;
+        //-------------------------------------------------------------------------    
+
+        /// Storage of texture unit states 
+        typedef std::vector<TextureUnitState*> TextureUnitStates;
+        TextureUnitStates mTextureUnitStates;    
+
+		// Vertex program details
+		GpuProgramUsage *mVertexProgramUsage;
+        // Vertex program details
+        GpuProgramUsage *mShadowCasterVertexProgramUsage;
+        // Vertex program details
+        GpuProgramUsage *mShadowReceiverVertexProgramUsage;
+		// Fragment program details
+		GpuProgramUsage *mFragmentProgramUsage;
+        // Is this pass queued for deletion?
+        bool mQueuedForDeletion;
+	public:
+		typedef std::set<Pass*> PassSet;
+    protected:
+		/// List of Passes whose hashes need recalculating
+		static PassSet msDirtyHashList;
+        /// The place where passes go to die
+        static PassSet msPassGraveyard;
+    public:
+        /// Default constructor
+		Pass(Technique* parent, unsigned short index);
+        /// Copy constructor
+        Pass(Technique* parent, unsigned short index, const Pass& oth );
+        /// Operator = overload
+        Pass& operator=(const Pass& oth);
+        ~Pass();
+
+        /// Returns true if this pass is programmable ie includes either a vertex or fragment program.
+        bool isProgrammable(void) const { return mVertexProgramUsage || mFragmentProgramUsage; }
+
+        /// Returns true if this pass uses a programmable vertex pipeline
+        bool hasVertexProgram(void) const { return mVertexProgramUsage != NULL; }
+
+        /// Returns true if this pass uses a programmable fragment pipeline
+        bool hasFragmentProgram(void) const { return mFragmentProgramUsage != NULL; }
+
+        /// Gets the index of this Pass in the parent Technique
+        unsigned short getIndex(void) const { return mIndex; }
+        /** Sets the ambient colour reflectance properties of this pass.
+        @remarks
+        The base colour of a pass is determined by how much red, green and blue light is reflects
+        (provided texture layer #0 has a blend mode other than LBO_REPLACE). This property determines how
+        much ambient light (directionless global light) is reflected. The default is full white, meaning
+        objects are completely globally illuminated. Reduce this if you want to see diffuse or specular light
+        effects, or change the blend of colours to make the object have a base colour other than white.
+        @note
+        This setting has no effect if dynamic lighting is disabled (see Pass::setLightingEnabled),
+        or if this is a programmable pass.
+        */
+        void setAmbient(Real red, Real green, Real blue);
+
+        /** Sets the ambient colour reflectance properties of this pass.
+        @remarks
+        The base colour of a pass is determined by how much red, green and blue light is reflects
+        (provided texture layer #0 has a blend mode other than LBO_REPLACE). This property determines how
+        much ambient light (directionless global light) is reflected. The default is full white, meaning
+        objects are completely globally illuminated. Reduce this if you want to see diffuse or specular light
+        effects, or change the blend of colours to make the object have a base colour other than white.
+        @note
+        This setting has no effect if dynamic lighting is disabled (see Pass::setLightingEnabled),
+        or if this is a programmable pass.
+        */
+
+        void setAmbient(const ColourValue& ambient);
+
+        /** Sets the diffuse colour reflectance properties of this pass.
+        @remarks
+        The base colour of a pass is determined by how much red, green and blue light is reflects
+        (provided texture layer #0 has a blend mode other than LBO_REPLACE). This property determines how
+        much diffuse light (light from instances of the Light class in the scene) is reflected. The default
+        is full white, meaning objects reflect the maximum white light they can from Light objects.
+        @note
+        This setting has no effect if dynamic lighting is disabled (see Pass::setLightingEnabled),
+        or if this is a programmable pass.
+        */
+        void setDiffuse(Real red, Real green, Real blue, Real alpha);
+
+        /** Sets the diffuse colour reflectance properties of this pass.
+        @remarks
+        The base colour of a pass is determined by how much red, green and blue light is reflects
+        (provided texture layer #0 has a blend mode other than LBO_REPLACE). This property determines how
+        much diffuse light (light from instances of the Light class in the scene) is reflected. The default
+        is full white, meaning objects reflect the maximum white light they can from Light objects.
+        @note
+        This setting has no effect if dynamic lighting is disabled (see Pass::setLightingEnabled),
+        or if this is a programmable pass.
+        */
+        void setDiffuse(const ColourValue& diffuse);
+
+        /** Sets the specular colour reflectance properties of this pass.
+        @remarks
+        The base colour of a pass is determined by how much red, green and blue light is reflects
+        (provided texture layer #0 has a blend mode other than LBO_REPLACE). This property determines how
+        much specular light (highlights from instances of the Light class in the scene) is reflected.
+        The default is to reflect no specular light.
+        @note
+        The size of the specular highlights is determined by the separate 'shininess' property.
+        @note
+        This setting has no effect if dynamic lighting is disabled (see Pass::setLightingEnabled),
+        or if this is a programmable pass.
+        */
+        void setSpecular(Real red, Real green, Real blue, Real alpha);
+
+        /** Sets the specular colour reflectance properties of this pass.
+        @remarks
+        The base colour of a pass is determined by how much red, green and blue light is reflects
+        (provided texture layer #0 has a blend mode other than LBO_REPLACE). This property determines how
+        much specular light (highlights from instances of the Light class in the scene) is reflected.
+        The default is to reflect no specular light.
+        @note
+        The size of the specular highlights is determined by the separate 'shininess' property.
+        @note
+        This setting has no effect if dynamic lighting is disabled (see Pass::setLightingEnabled),
+        or if this is a programmable pass.
+        */
+        void setSpecular(const ColourValue& specular);
+
+        /** Sets the shininess of the pass, affecting the size of specular highlights.
+        @note
+        This setting has no effect if dynamic lighting is disabled (see Pass::setLightingEnabled),
+        or if this is a programmable pass.
+        */
+        void setShininess(Real val);
+
+        /** Sets the amount of self-illumination an object has.
+        @remarks
+        If an object is self-illuminating, it does not need external sources to light it, ambient or
+        otherwise. It's like the object has it's own personal ambient light. This property is rarely useful since
+        you can already specify per-pass ambient light, but is here for completeness.
+        @note
+        This setting has no effect if dynamic lighting is disabled (see Pass::setLightingEnabled),
+        or if this is a programmable pass.
+        */
+        void setSelfIllumination(Real red, Real green, Real blue);
+
+        /** Sets the amount of self-illumination an object has.
+        @remarks
+        If an object is self-illuminating, it does not need external sources to light it, ambient or
+        otherwise. It's like the object has it's own personal ambient light. This property is rarely useful since
+        you can already specify per-pass ambient light, but is here for completeness.
+        @note
+        This setting has no effect if dynamic lighting is disabled (see Pass::setLightingEnabled),
+        or if this is a programmable pass.
+        */
+        void setSelfIllumination(const ColourValue& selfIllum);
+
+        /** Sets which material properties follow the vertex colour
+         */
+        void setVertexColourTracking(TrackVertexColourType tracking);
+
+        /** Gets the ambient colour reflectance of the pass.
+        */
+        const ColourValue& getAmbient(void) const;
+
+        /** Gets the diffuse colour reflectance of the pass.
+        */
+        const ColourValue& getDiffuse(void) const;
+
+        /** Gets the specular colour reflectance of the pass.
+        */
+        const ColourValue& getSpecular(void) const;
+
+        /** Gets the self illumination colour of the pass.
+        */
+        const ColourValue& getSelfIllumination(void) const;
+
+        /** Gets the 'shininess' property of the pass (affects specular highlights).
+        */
+        Real getShininess(void) const;
+        
+        /** Gets which material properties follow the vertex colour
+         */
+        TrackVertexColourType getVertexColourTracking(void) const;
+
+        /** Inserts a new TextureUnitState object into the Pass.
+        @remarks
+        This unit is is added on top of all previous units. 
+        */
+        TextureUnitState* createTextureUnitState(void);
+        /** Inserts a new TextureUnitState object into the Pass.
+        @remarks
+        This unit is is added on top of all previous units. 
+        @param
+        name The basic name of the texture e.g. brickwall.jpg, stonefloor.png
+        @param
+        texCoordSet The index of the texture coordinate set to use.
+        @note 
+        Applies to both fixed-function and programmable passes.
+        */
+        TextureUnitState* createTextureUnitState( const String& textureName, unsigned short texCoordSet = 0);
+		/** Adds the passed in TextureUnitState, to the existing Pass. */
+		void addTextureUnitState(TextureUnitState* state);
+        /** Retrieves a pointer to a texture unit state so it may be modified.
+        */
+        TextureUnitState* getTextureUnitState(unsigned short index);
+
+        typedef VectorIterator<TextureUnitStates> TextureUnitStateIterator;
+        /** Get an iterator over the TextureUnitStates contained in this Pass. */
+        TextureUnitStateIterator getTextureUnitStateIterator(void);
+
+        /** Removes the indexed texture unit state from this pass.
+        @remarks
+            Note that removing a texture which is not the topmost will have a larger performance impact.
+        */
+        void removeTextureUnitState(unsigned short index);
+
+        /** Removes all texture unit settings.
+        */
+        void removeAllTextureUnitStates(void);
+
+        /** Returns the number of texture unit settings.
+        */
+        size_t getNumTextureUnitStates(void) const
+        {
+            return mTextureUnitStates.size();
+        }
+
+        /** Sets the kind of blending this pass has with the existing contents of the scene.
+        @remarks
+        Wheras the texture blending operations seen in the TextureUnitState class are concerned with
+        blending between texture layers, this blending is about combining the output of the Pass
+        as a whole with the existing contents of the rendering target. This blending therefore allows
+        object transparency and other special effects. If all passes in a technique have a scene
+        blend, then the whole technique is considered to be transparent.
+        @par
+        This method allows you to select one of a number of predefined blending types. If you require more
+        control than this, use the alternative version of this method which allows you to specify source and
+        destination blend factors.
+        @note
+        This method is applicable for both the fixed-function and programmable pipelines.
+        @param
+        sbt One of the predefined SceneBlendType blending types
+        */
+        void setSceneBlending( const SceneBlendType sbt );
+
+        /** Allows very fine control of blending this Pass with the existing contents of the scene.
+        @remarks
+        Wheras the texture blending operations seen in the TextureUnitState class are concerned with
+        blending between texture layers, this blending is about combining the output of the material
+        as a whole with the existing contents of the rendering target. This blending therefore allows
+        object transparency and other special effects.
+        @par
+        This version of the method allows complete control over the blending operation, by specifying the
+        source and destination blending factors. The result of the blending operation is:
+        <span align="center">
+        final = (texture * sourceFactor) + (pixel * destFactor)
+        </span>
+        @par
+        Each of the factors is specified as one of a number of options, as specified in the SceneBlendFactor
+        enumerated type.
+        @param
+        sourceFactor The source factor in the above calculation, i.e. multiplied by the texture colour components.
+        @param
+        destFactor The destination factor in the above calculation, i.e. multiplied by the pixel colour components.
+        @note
+        This method is applicable for both the fixed-function and programmable pipelines.
+        */
+        void setSceneBlending( const SceneBlendFactor sourceFactor, const SceneBlendFactor destFactor);
+
+        /** Retrieves the source blending factor for the material (as set using Materiall::setSceneBlending).
+        */
+        SceneBlendFactor getSourceBlendFactor() const;
+
+        /** Retrieves the destination blending factor for the material (as set using Materiall::setSceneBlending).
+        */
+        SceneBlendFactor getDestBlendFactor() const;
+
+		/** Returns true if this pass has some element of transparency. */
+		bool isTransparent(void) const;
+
+		/** Sets whether or not this pass renders with depth-buffer checking on or not.
+        @remarks
+        If depth-buffer checking is on, whenever a pixel is about to be written to the frame buffer
+        the depth buffer is checked to see if the pixel is in front of all other pixels written at that
+        point. If not, the pixel is not written.
+        @par
+        If depth checking is off, pixels are written no matter what has been rendered before.
+        Also see setDepthFunction for more advanced depth check configuration.
+        @see
+        setDepthFunction
+        */
+        void setDepthCheckEnabled(bool enabled);
+
+        /** Returns whether or not this pass renders with depth-buffer checking on or not.
+        @see
+        setDepthCheckEnabled
+        */
+        bool getDepthCheckEnabled(void) const;
+
+        /** Sets whether or not this pass renders with depth-buffer writing on or not.
+        @remarks
+        If depth-buffer writing is on, whenever a pixel is written to the frame buffer
+        the depth buffer is updated with the depth value of that new pixel, thus affecting future
+        rendering operations if future pixels are behind this one.
+        @par
+        If depth writing is off, pixels are written without updating the depth buffer Depth writing should
+        normally be on but can be turned off when rendering static backgrounds or when rendering a collection
+        of transparent objects at the end of a scene so that they overlap each other correctly.
+        */
+        void setDepthWriteEnabled(bool enabled);
+
+        /** Returns whether or not this pass renders with depth-buffer writing on or not.
+        @see
+        setDepthWriteEnabled
+        */
+        bool getDepthWriteEnabled(void) const;
+
+        /** Sets the function used to compare depth values when depth checking is on.
+        @remarks
+        If depth checking is enabled (see setDepthCheckEnabled) a comparison occurs between the depth
+        value of the pixel to be written and the current contents of the buffer. This comparison is
+        normally CMPF_LESS_EQUAL, i.e. the pixel is written if it is closer (or at the same distance)
+        than the current contents. If you wish you can change this comparison using this method.
+        */
+        void setDepthFunction( CompareFunction func );
+        /** Returns the function used to compare depth values when depth checking is on.
+        @see
+        setDepthFunction
+        */
+        CompareFunction getDepthFunction(void) const;
+
+		/** Sets whether or not colour buffer writing is enabled for this Pass.
+		@remarks
+			For some effects, you might wish to turn off the colour write operation
+			when rendering geometry; this means that only the depth buffer will be
+			updated (provided you have depth buffer writing enabled, which you 
+			probably will do, although you may wish to only update the stencil
+			buffer for example - stencil buffer state is managed at the RenderSystem
+			level only, not the Material since you are likely to want to manage it 
+			at a higher level).
+		*/
+		void setColourWriteEnabled(bool enabled);
+		/** Determines if colour buffer writing is enabled for this pass. */
+		bool getColourWriteEnabled(void) const;
+
+        /** Sets the culling mode for this pass  based on the 'vertex winding'.
+        @remarks
+        A typical way for the rendering engine to cull triangles is based on the 'vertex winding' of
+        triangles. Vertex winding refers to the direction in which the vertices are passed or indexed
+        to in the rendering operation as viewed from the camera, and will wither be clockwise or
+        anticlockwise (that's 'counterclockwise' for you Americans out there ;) The default is
+        CULL_CLOCKWISE i.e. that only triangles whose vertices are passed/indexed in anticlockwise order
+        are rendered - this is a common approach and is used in 3D studio models for example. You can
+        alter this culling mode if you wish but it is not advised unless you know what you are doing.
+        @par
+        You may wish to use the CULL_NONE option for mesh data that you cull yourself where the vertex
+        winding is uncertain.
+        */
+        void setCullingMode( CullingMode mode );
+
+        /** Returns the culling mode for geometry rendered with this pass. See setCullingMode for more information.
+        */
+        CullingMode getCullingMode(void) const;
+
+        /** Sets the manual culling mode, performed by CPU rather than hardware.
+        @pemarks
+        In some situations you want to use manual culling of triangles rather than sending the
+        triangles to the hardware and letting it cull them. This setting only takes effect on SceneManager's
+        that use it (since it is best used on large groups of planar world geometry rather than on movable
+        geometry since this would be expensive), but if used can cull geometry before it is sent to the
+        hardware.
+        @note
+        The default for this setting is MANUAL_CULL_BACK.
+        @param
+        mode The mode to use - see enum ManualCullingMode for details
+
+        */
+        void setManualCullingMode( ManualCullingMode mode );
+
+        /** Retrieves the manual culling mode for this pass
+        @see
+        setManualCullingMode
+        */
+        ManualCullingMode getManualCullingMode(void) const;
+
+        /** Sets whether or not dynamic lighting is enabled.
+        @param
+        enabled
+        If true, dynamic lighting is performed on geometry with normals supplied, geometry without
+        normals will not be displayed.
+        @par
+        If false, no lighting is applied and all geometry will be full brightness.
+        */
+        void setLightingEnabled(bool enabled);
+
+        /** Returns whether or not dynamic lighting is enabled.
+        */
+        bool getLightingEnabled(void) const;
+
+        /** Sets the maximum number of lights to be used by this pass. 
+        @remarks
+            During rendering, if lighting is enabled (or if the pass uses an automatic
+            program parameter based on a light) the engine will request the nearest lights 
+            to the object being rendered in order to work out which ones to use. This
+            parameter sets the limit on the number of lights which should apply to objects 
+            rendered with this pass. 
+        */
+        void setMaxSimultaneousLights(unsigned short maxLights);
+        /** Gets the maximum number of lights to be used by this pass. */
+        unsigned short getMaxSimultaneousLights(void) const;
+
+        /** Sets the type of light shading required
+        @note
+        The default shading method is Gouraud shading.
+        */
+        void setShadingMode( ShadeOptions mode );
+
+        /** Returns the type of light shading to be used.
+        */
+        ShadeOptions getShadingMode(void) const;
+
+
+        /** Sets the fogging mode applied to this pass.
+        @remarks
+        Fogging is an effect that is applied as polys are rendered. Sometimes, you want
+        fog to be applied to an entire scene. Other times, you want it to be applied to a few
+        polygons only. This pass-level specification of fog parameters lets you easily manage
+        both.
+        @par
+        The SceneManager class also has a setFog method which applies scene-level fog. This method
+        lets you change the fog behaviour for this pass compared to the standard scene-level fog.
+        @param
+        overrideScene If true, you authorise this pass to override the scene's fog params with it's own settings.
+        If you specify false, so other parameters are necessary, and this is the default behaviour for passs.
+        @param
+        mode Only applicable if overrideScene is true. You can disable fog which is turned on for the
+        rest of the scene by specifying FOG_NONE. Otherwise, set a pass-specific fog mode as
+        defined in the enum FogMode.
+        @param
+        colour The colour of the fog. Either set this to the same as your viewport background colour,
+        or to blend in with a skydome or skybox.
+        @param
+        expDensity The density of the fog in FOG_EXP or FOG_EXP2 mode, as a value between 0 and 1. 
+        The default is 0.001.
+        @param
+        linearStart Distance in world units at which linear fog starts to encroach. 
+        Only applicable if mode is FOG_LINEAR.
+        @param
+        linearEnd Distance in world units at which linear fog becomes completely opaque.
+        Only applicable if mode is FOG_LINEAR.
+        */
+        void setFog(
+            bool overrideScene,
+            FogMode mode = FOG_NONE,
+            const ColourValue& colour = ColourValue::White,
+            Real expDensity = 0.001, Real linearStart = 0.0, Real linearEnd = 1.0 );
+
+        /** Returns true if this pass is to override the scene fog settings.
+        */
+        bool getFogOverride(void) const;
+
+        /** Returns the fog mode for this pass.
+        @note
+        Only valid if getFogOverride is true.
+        */
+        FogMode getFogMode(void) const;
+
+        /** Returns the fog colour for the scene.
+        */
+        const ColourValue& getFogColour(void) const;
+
+        /** Returns the fog start distance for this pass.
+        @note
+        Only valid if getFogOverride is true.
+        */
+        Real getFogStart(void) const;
+
+        /** Returns the fog end distance for this pass.
+        @note
+        Only valid if getFogOverride is true.
+        */
+        Real getFogEnd(void) const;
+
+        /** Returns the fog density for this pass.
+        @note
+        Only valid if getFogOverride is true.
+        */
+        Real getFogDensity(void) const;
+
+        /** Sets the depth bias to be used for this material.
+        @remarks
+        When polygons are coplanar, you can get problems with 'depth fighting' where
+        the pixels from the two polys compete for the same screen pixel. This is particularly
+        a problem for decals (polys attached to another surface to represent details such as
+        bulletholes etc.).
+        @par
+        A way to combat this problem is to use a depth bias to adjust the depth buffer value
+        used for the decal such that it is slightly higher than the true value, ensuring that
+        the decal appears on top.
+        @param bias The bias value, should be between 0 and 16.
+        */
+        void setDepthBias(ushort bias);
+
+        /** Retrieves the depth bias value as set by setDepthValue. */
+        ushort getDepthBias(void) const;
+
+        /** Sets the way the pass will have use alpha to totally reject pixels from the pipeline.
+        @remarks
+			The default is CMPF_ALWAYS_PASS i.e. alpha is not used to reject pixels.
+        @param func The comparison which must pass for the pixel to be written.
+        @param value 1 byte value against which alpha values will be tested(0-255)
+        @note
+			This option applies in both the fixed function and the programmable pipeline.
+        */
+        void setAlphaRejectSettings(CompareFunction func, unsigned char value);
+
+		/** Sets the alpha reject function. See setAlphaRejectSettings for more information.
+		*/
+		void setAlphaRejectFunction(CompareFunction func);
+
+		/** Gets the alpha reject value. See setAlphaRejectSettings for more information.
+		*/
+		void setAlphaRejectValue(unsigned char val);
+
+		/** Gets the alpha reject function. See setAlphaRejectSettings for more information.
+        */
+		CompareFunction getAlphaRejectFunction(void) const { return mAlphaRejectFunc; }
+
+        /** Gets the alpha reject value. See setAlphaRejectSettings for more information.
+        */
+		unsigned char getAlphaRejectValue(void) const { return mAlphaRejectVal; }
+        /** Sets whether or not this pass should be run once per light which
+		    can affect the object being rendered.
+		@remarks
+			The default behaviour for a pass (when this option is 'false'), is 
+			for a pass to be rendered only once, with all the lights which could
+			affect this object set at the same time (up to the maximum lights
+			allowed in the render system, which is typically 8). 
+		@par
+			Setting this option to 'true' changes this behaviour, such that 
+			instead of trying to issue render this pass once per object, it
+			is run once <b>per light</b> which can affect this object. In
+			this case, only light index 0 is ever used, and is a different light
+			every time the pass is issued, up to the total number of lights
+			which is affecting this object. This has 2 advantages:
+			<ul><li>There is no limit on the number of lights which can be 
+			supported</li>
+			<li>It's easier to write vertex / fragment programs for this because
+			a single program can be used for any number of lights</li>
+			</ul>
+			However, this technique is a lot more expensive, and typically you
+			will want an additional ambient pass, because if no lights are 
+			affecting the object it will not be rendered at all, which will look
+			odd even if ambient light is zero (imagine if there are lit objects
+			behind it - the objects silhouette would not show up). Therefore,
+			use this option with care, and you would be well advised to provide
+			a less expensive fallback technique for use in the distance.
+		@note
+			The number of times this pass runs is still limited by the maximum
+			number of lights allowed as set in setMaxSimultaneousLights, so
+			you will never get more passes than this.
+        @param enabled Whether this feature is enabled
+        @param onlyForOneLightType If true, the pass will only be run for a single type
+            of light, other light types will be ignored.
+        @param lightType The single light type which will be considered for this pass
+		*/
+        void setRunOncePerLight(bool enabled, 
+            bool onlyForOneLightType = true, Light::LightTypes lightType = Light::LT_POINT);
+
+        /** Does this pass run once for every light in range? */
+		bool getRunOncePerLight(void) const { return mRunOncePerLight; }
+        /** Does this pass run only for a single light type (if getRunOncePerLight is true). */
+        bool getRunOnlyForOneLightType(void) const { return mRunOnlyForOneLightType; }
+        /** Gets the single light type this pass runs for if  getRunOncePerLight and 
+            getRunOnlyForOneLightType are both true. */
+        Light::LightTypes getOnlyLightType() const { return mOnlyLightType; }
+		
+		/// Gets the parent Technique
+        Technique* getParent(void) { return mParent; }
+
+		/// Gets the resource group of the ultimate parent Material
+		const String& getResourceGroup(void) const;
+
+		/** Sets the details of the vertex program to use.
+		@remarks
+			Only applicable to programmable passes, this sets the details of
+			the vertex program to use in this pass. The program will not be
+			loaded until the parent Material is loaded.
+		@param name The name of the program - this must have been 
+			created using GpuProgramManager by the time that this Pass 
+			is loaded. If this parameter is blank, any vertex program in this pass is disabled.
+        @param resetParams
+            If true, this will create a fresh set of parameters from the
+            new program being linked, so if you had previously set parameters
+            you will have to set them again. If you set this to false, you must
+            be absolutely sure that the parameters match perfectly, and in the
+            case of named parameters refers to the indexes underlying them, 
+            not just the names.
+		*/
+		void setVertexProgram(const String& name, bool resetParams = true);
+		/** Sets the vertex program parameters.
+		@remarks
+			Only applicable to programmable passes, and this particular call is
+			designed for low-level programs; use the named parameter methods
+			for setting high-level program parameters.
+		*/
+		void setVertexProgramParameters(GpuProgramParametersSharedPtr params);
+		/** Gets the name of the vertex program used by this pass. */
+		const String& getVertexProgramName(void) const;
+        /** Gets the vertex program parameters used by this pass. */
+        GpuProgramParametersSharedPtr getVertexProgramParameters(void);
+		/** Gets the vertex program used by this pass, only available after _load(). */
+		const GpuProgramPtr& getVertexProgram(void);
+
+
+        /** Sets the details of the vertex program to use when rendering as a 
+        shadow caster.
+        @remarks
+        Texture-based shadows require that the caster is rendered to a texture 
+        in a solid colour (the shadow colour in the case of modulative texture
+        shadows). Whilst Ogre can arrange this for the fixed function 
+        pipeline, passes which use vertex programs might need the vertex
+        programs still to run in order to preserve any deformation etc
+        that it does. However, lighting calculations must be a lot simpler, 
+        with only the ambient colour being used (which the engine will ensure
+        is bound to the shadow colour). 
+        @par
+        Therefore, it is up to implemetors of vertex programs to provide an
+        alternative vertex program which can be used to render the object
+        to a shadow texture. Do all the same vertex transforms, but set the
+        colour of the vertex to the ambient colour, as bound using the 
+        standard auto parameter binding mechanism. 
+        @note
+        Some vertex programs will work without doing this, because Ogre ensures
+        that all lights except for ambient are set black. However, the chances
+        are that your vertex program is doing a lot of unnecessary work in this
+        case, since the other lights are having no effect, and it is good practice
+        to supply an alternative.
+        @note
+        This is only applicable to programmable passes.
+        @par
+        The default behaviour is for Ogre to switch to fixed-function 
+        rendering if an explict vertex program alternative is not set.
+        */
+        void setShadowCasterVertexProgram(const String& name);
+        /** Sets the vertex program parameters for rendering as a shadow caster.
+        @remarks
+        Only applicable to programmable passes, and this particular call is
+        designed for low-level programs; use the named parameter methods
+        for setting high-level program parameters.
+        */
+        void setShadowCasterVertexProgramParameters(GpuProgramParametersSharedPtr params);
+        /** Gets the name of the vertex program used by this pass when rendering shadow casters. */
+        const String& getShadowCasterVertexProgramName(void) const;
+        /** Gets the vertex program parameters used by this pass when rendering shadow casters. */
+        GpuProgramParametersSharedPtr getShadowCasterVertexProgramParameters(void);
+        /** Gets the vertex program used by this pass when rendering shadow casters, 
+            only available after _load(). */
+        const GpuProgramPtr& getShadowCasterVertexProgram(void);
+
+        /** Sets the details of the vertex program to use when rendering as a 
+            shadow receiver.
+        @remarks
+            Texture-based shadows require that the shadow receiver is rendered using
+            a projective texture. Whilst Ogre can arrange this for the fixed function 
+            pipeline, passes which use vertex programs might need the vertex
+            programs still to run in order to preserve any deformation etc
+            that it does. So in this case, we need a vertex program which does the 
+            appropriate vertex transformation, but generates projective texture
+            coordinates. 
+        @par
+            Therefore, it is up to implemetors of vertex programs to provide an
+            alternative vertex program which can be used to render the object
+            as a shadow receiver. Do all the same vertex transforms, but generate
+            <strong>2 sets</strong> of texture coordinates using the auto parameter
+            ACT_TEXTURE_VIEWPROJ_MATRIX, which Ogre will bind to the parameter name / 
+            index you supply as the second parameter to this method. 2 texture 
+            sets are needed because Ogre needs to use 2 texture units for some 
+            shadow effects.
+        @note
+            This is only applicable to programmable passes.
+        @par
+            The default behaviour is for Ogre to switch to fixed-function 
+            rendering if an explict vertex program alternative is not set.         
+        */
+        void setShadowReceiverVertexProgram(const String& name);
+        /** Sets the vertex program parameters for rendering as a shadow receiver.
+        @remarks
+        Only applicable to programmable passes, and this particular call is
+        designed for low-level programs; use the named parameter methods
+        for setting high-level program parameters.
+        */
+        void setShadowReceiverVertexProgramParameters(GpuProgramParametersSharedPtr params);
+        /** Gets the name of the vertex program used by this pass when rendering shadow receivers. */
+        const String& getShadowReceiverVertexProgramName(void) const;
+        /** Gets the vertex program parameters used by this pass when rendering shadow receivers. */
+        GpuProgramParametersSharedPtr getShadowReceiverVertexProgramParameters(void);
+        /** Gets the vertex program used by this pass when rendering shadow receivers, 
+        only available after _load(). */
+        const GpuProgramPtr& getShadowReceiverVertexProgram(void);
+
+
+		/** Sets the details of the fragment program to use.
+		@remarks
+			Only applicable to programmable passes, this sets the details of
+			the fragment program to use in this pass. The program will not be
+			loaded until the parent Material is loaded.
+		@param name The name of the program - this must have been 
+			created using GpuProgramManager by the time that this Pass 
+			is loaded. If this parameter is blank, any fragment program in this pass is disabled.
+        @param resetParams
+            If true, this will create a fresh set of parameters from the
+            new program being linked, so if you had previously set parameters
+            you will have to set them again. If you set this to false, you must
+            be absolutely sure that the parameters match perfectly, and in the
+            case of named parameters refers to the indexes underlying them, 
+            not just the names.
+		*/
+		void setFragmentProgram(const String& name, bool resetParams = true);
+		/** Sets the vertex program parameters.
+		@remarks
+			Only applicable to programmable passes.
+		*/
+		void setFragmentProgramParameters(GpuProgramParametersSharedPtr params);
+		/** Gets the name of the fragment program used by this pass. */
+		const String& getFragmentProgramName(void) const;
+		/** Gets the vertex program parameters used by this pass. */
+		GpuProgramParametersSharedPtr getFragmentProgramParameters(void);
+		/** Gets the vertex program used by this pass, only available after _load(). */
+		const GpuProgramPtr& getFragmentProgram(void);
+
+		/** Splits this Pass to one which can be handled in the number of
+			texture units specified.
+		@remarks
+			Only works on non-programmable passes, programmable passes cannot be
+			split, it's up to the author to ensure that there is a fallback Technique
+			for less capable cards.
+		@param numUnits The target number of texture units
+		@returns A new Pass which contains the remaining units, and a scene_blend
+				setting appropriate to approximate the multitexture. This Pass will be 
+				attached to the parent Technique of this Pass.
+		*/
+		Pass* _split(unsigned short numUnits);
+
+		/** Internal method for loading this pass. */
+		void _load(void);
+		/** Internal method for unloading this pass. */
+		void _unload(void);
+        // Is this loaded?
+        bool isLoaded(void) const;
+
+        /** Gets the 'hash' of this pass, ie a precomputed number to use for sorting
+        @remarks
+            This hash is used to sort passes, and for this reason the pass is hashed
+            using firstly its index (so that all passes are rendered in order), then
+            by the textures which it's TextureUnitState instances are using.
+        */
+        unsigned long getHash(void) const;
+		/// Mark the hash as dirty
+		void _dirtyHash(void);
+        /** Internal method for recalculating the hash.
+		@remarks
+			Do not call this unless you are sure the old hash is not still being
+			used by anything. If in doubt, call _dirtyHash if you want to force
+			recalculation of the has next time.
+		*/
+        void _recalculateHash(void);
+        /** Tells the pass that it needs recompilation. */
+        void _notifyNeedsRecompile(void);
+
+        /** Update any automatic parameters (except lights) on this pass */
+        void _updateAutoParamsNoLights(const AutoParamDataSource& source);
+        /** Update any automatic light parameters on this pass */
+        void _updateAutoParamsLightsOnly(const AutoParamDataSource& source);
+
+        /** Set texture filtering for every texture unit 
+        @note
+            This property actually exists on the TextureUnitState class
+            For simplicity, this method allows you to set these properties for 
+            every current TeextureUnitState, If you need more precision, retrieve the  
+            TextureUnitState instance and set the property there.
+        @see TextureUnitState::setTextureFiltering
+        */
+        void setTextureFiltering(TextureFilterOptions filterType);
+        /** Sets the anisotropy level to be used for all textures.
+        @note
+            This property has been moved to the TextureUnitState class, which is accessible via the 
+            Technique and Pass. For simplicity, this method allows you to set these properties for 
+            every current TeextureUnitState, If you need more precision, retrieve the Technique, 
+            Pass and TextureUnitState instances and set the property there.
+        @see TextureUnitState::setTextureAnisotropy
+        */
+        void setTextureAnisotropy(unsigned int maxAniso);
+		/** Static method to retrieve all the Passes which need their
+		    hash values recalculated. 
+		*/
+		static const PassSet& getDirtyHashList(void) 
+		{ return msDirtyHashList; }
+        /** Static method to retrieve all the Passes which are pending deletion.
+        */
+        static const PassSet& getPassGraveyard(void) 
+        { return msPassGraveyard; }
+		/** Static method to reset the list of passes which need their hash 
+		    values recalculated. 
+		@remarks
+			For performance, the dirty list is not updated progressively as 
+			the hashes are recalculated, instead we expect the processor of the
+			dirty hash list to clear the list when they are done.
+		*/
+		static void clearDirtyHashList(void) { msDirtyHashList.clear(); }
+
+        /** Process all dirty and pending deletion passes. */
+        static void processPendingPassUpdates(void);
+
+        /** Queue this pass for deletion when appropriate. */
+        void queueForDeletion(void);
+
+        /** Returns whether this pass is ambient only.
+        */
+        bool isAmbientOnly(void) const;
+
+        
+    };
+
+    enum IlluminationStage
+    {
+        /// Part of the rendering which occurs without any kind of direct lighting
+        IS_AMBIENT,
+        /// Part of the rendering which occurs per light
+        IS_PER_LIGHT,
+        /// Post-lighting rendering
+        IS_DECAL
+    };
+    /** Struct recording a pass which can be used for a specific illumination stage.
+    @remarks
+        This structure is used to record categorised passes which fit into a 
+        number of distinct illumination phases - ambient, diffuse / specular 
+        (per-light) and decal (post-lighting texturing).
+        An original pass may fit into one of these categories already, or it
+        may require splitting into its component parts in order to be categorised 
+        properly.
+    */
+    struct IlluminationPass
+    {
+        IlluminationStage stage;
+        /// The pass to use in this stage
+        Pass* pass;
+        /// Whether this pass is one which should be deleted itself
+        bool destroyOnShutdown;
+        /// The original pass which spawned this one
+        Pass* originalPass;
+    };
+
+    typedef std::vector<IlluminationPass*> IlluminationPassList;
+
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreShadowVolumeExtrudeProgram.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreShadowVolumeExtrudeProgram.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreShadowVolumeExtrudeProgram.h	(revision 1092)
@@ -0,0 +1,229 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __SHADOWVOLUMEEXTRUDEPROGRAM_H__
+#define __SHADOWVOLUMEEXTRUDEPROGRAM_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreLight.h"
+
+namespace Ogre {
+    /** Static class containing source for vertex programs for extruding shadow volumes
+    @remarks
+        This exists so we don't have to be dependent on an external media files.
+        Assembler is used so we don't have to rely on particular plugins.
+        The assembler contents of this file were generated from the following Cg:
+    @code
+        // Point light shadow volume extrude
+        void shadowVolumeExtrudePointLight_vp (
+            float4 position			: POSITION,
+            float  wcoord			: TEXCOORD0,
+
+            out float4 oPosition	: POSITION,
+
+            uniform float4x4 worldViewProjMatrix,
+            uniform float4   lightPos // homogenous, object space
+            )
+        {
+            // extrusion in object space
+            // vertex unmodified if w==1, extruded if w==0
+            float4 newpos = 
+                (wcoord.xxxx * lightPos) + 
+                float4(position.xyz - lightPos.xyz, 0);
+
+            oPosition = mul(worldViewProjMatrix, newpos);
+
+        }
+
+        // Directional light extrude
+        void shadowVolumeExtrudeDirLight_vp (
+            float4 position			: POSITION,
+            float  wcoord			: TEXCOORD0,
+
+            out float4 oPosition	: POSITION,
+
+            uniform float4x4 worldViewProjMatrix,
+            uniform float4   lightPos // homogenous, object space
+            )
+        {
+            // extrusion in object space
+            // vertex unmodified if w==1, extruded if w==0
+            float4 newpos = 
+                (wcoord.xxxx * (position + lightPos)) - lightPos;
+
+            oPosition = mul(worldViewProjMatrix, newpos);
+
+        }
+        // Point light shadow volume extrude - FINITE
+        void shadowVolumeExtrudePointLightFinite_vp (
+            float4 position			: POSITION,
+            float  wcoord			: TEXCOORD0,
+
+            out float4 oPosition	: POSITION,
+
+            uniform float4x4 worldViewProjMatrix,
+            uniform float4   lightPos, // homogenous, object space
+			uniform float    extrusionDistance // how far to extrude
+            )
+        {
+            // extrusion in object space
+            // vertex unmodified if w==1, extruded if w==0
+			float3 extrusionDir = position.xyz - lightPos.xyz;
+			extrusionDir = normalize(extrusionDir);
+			
+            float4 newpos = float4(position.xyz +  
+                ((1 - wcoord.x) * extrusionDistance * extrusionDir), 1);
+
+            oPosition = mul(worldViewProjMatrix, newpos);
+
+        }
+
+        // Directional light extrude - FINITE
+        void shadowVolumeExtrudeDirLightFinite_vp (
+            float4 position			: POSITION,
+            float  wcoord			: TEXCOORD0,
+
+            out float4 oPosition	: POSITION,
+
+            uniform float4x4 worldViewProjMatrix,
+            uniform float4   lightPos, // homogenous, object space
+			uniform float    extrusionDistance // how far to extrude
+            )
+        {
+            // extrusion in object space
+            // vertex unmodified if w==1, extruded if w==0
+			// -ve lightPos is direction
+            float4 newpos = float4(position.xyz - 
+                (wcoord.x * extrusionDistance * lightPos.xyz), 1);
+
+            oPosition = mul(worldViewProjMatrix, newpos);
+
+        }		
+    @endcode
+    */
+    class _OgreExport ShadowVolumeExtrudeProgram
+    {
+    private:
+        static String mPointArbvp1;
+        static String mPointVs_1_1;
+        static String mDirArbvp1;
+        static String mDirVs_1_1;
+        // same as above, except the color is set to 1 to enable debug volumes to be seen
+        static String mPointArbvp1Debug;
+        static String mPointVs_1_1Debug;
+        static String mDirArbvp1Debug;
+        static String mDirVs_1_1Debug;
+		
+        static String mPointArbvp1Finite;
+        static String mPointVs_1_1Finite;
+        static String mDirArbvp1Finite;
+        static String mDirVs_1_1Finite;
+        // same as above, except the color is set to 1 to enable debug volumes to be seen
+        static String mPointArbvp1FiniteDebug;
+        static String mPointVs_1_1FiniteDebug;
+        static String mDirArbvp1FiniteDebug;
+        static String mDirVs_1_1FiniteDebug;
+
+		static bool mInitialised;
+
+	public:
+#define OGRE_NUM_SHADOW_EXTRUDER_PROGRAMS 8
+        enum Programs
+        {
+            // Point light extruder, infinite distance
+            POINT_LIGHT = 0,
+            // Point light extruder, infinite distance, debug mode
+            POINT_LIGHT_DEBUG = 1,
+            // Directional light extruder, infinite distance
+            DIRECTIONAL_LIGHT = 2,
+            // Directional light extruder, infinite distance, debug mode
+            DIRECTIONAL_LIGHT_DEBUG = 3,
+            // Point light extruder, finite distance
+            POINT_LIGHT_FINITE = 4,
+            // Point light extruder, finite distance, debug mode
+            POINT_LIGHT_FINITE_DEBUG = 5,
+            // Directional light extruder, finite distance
+            DIRECTIONAL_LIGHT_FINITE = 6,
+            // Directional light extruder, finite distance, debug mode
+            DIRECTIONAL_LIGHT_FINITE_DEBUG = 7
+
+        };
+        static const String programNames[OGRE_NUM_SHADOW_EXTRUDER_PROGRAMS];
+
+        /// Initialise the creation of these vertex programs
+        static void initialise(void);
+        /// Shutdown & destroy the vertex programs
+        static void shutdown(void);
+        /// Get extruder program source for point lights, compatible with arbvp1
+        static const String& getPointLightExtruderArbvp1(void) { return mPointArbvp1; }
+        /// Get extruder program source for point lights, compatible with vs_1_1
+        static const String& getPointLightExtruderVs_1_1(void) { return mPointVs_1_1; }
+        /// Get extruder program source for directional lights, compatible with arbvp1
+        static const String& getDirectionalLightExtruderArbvp1(void) { return mDirArbvp1; }
+        /// Get extruder program source for directional lights, compatible with vs_1_1
+        static const String& getDirectionalLightExtruderVs_1_1(void) { return mDirVs_1_1; }
+
+        /// Get extruder program source for debug point lights, compatible with arbvp1
+        static const String& getPointLightExtruderArbvp1Debug(void) { return mPointArbvp1Debug; }
+        /// Get extruder program source for debug point lights, compatible with vs_1_1
+        static const String& getPointLightExtruderVs_1_1Debug(void) { return mPointVs_1_1Debug; }
+        /// Get extruder program source for debug directional lights, compatible with arbvp1
+        static const String& getDirectionalLightExtruderArbvp1Debug(void) { return mDirArbvp1Debug; }
+        /// Get extruder program source for debug directional lights, compatible with vs_1_1
+        static const String& getDirectionalLightExtruderVs_1_1Debug(void) { return mDirVs_1_1Debug; }
+        /// General purpose method to get any of the program sources
+        static const String& getProgramSource(Light::LightTypes lightType, const String syntax, 
+            bool finite, bool debug);
+
+        static const String& getProgramName(Light::LightTypes lightType, bool finite, bool debug);
+
+
+
+
+
+        /// Get FINITE extruder program source for point lights, compatible with arbvp1
+        static const String& getPointLightExtruderArbvp1Finite(void) { return mPointArbvp1Finite; }
+        /// Get FINITE extruder program source for point lights, compatible with vs_1_1
+        static const String& getPointLightExtruderVs_1_1Finite(void) { return mPointVs_1_1Finite; }
+        /// Get FINITE extruder program source for directional lights, compatible with arbvp1
+        static const String& getDirectionalLightExtruderArbvp1Finite(void) { return mDirArbvp1Finite; }
+        /// Get FINITE extruder program source for directional lights, compatible with vs_1_1
+        static const String& getDirectionalLightExtruderVs_1_1Finite(void) { return mDirVs_1_1Finite; }
+
+        /// Get FINITE extruder program source for debug point lights, compatible with arbvp1
+        static const String& getPointLightExtruderArbvp1FiniteDebug(void) { return mPointArbvp1FiniteDebug; }
+        /// Get extruder program source for debug point lights, compatible with vs_1_1
+        static const String& getPointLightExtruderVs_1_1FiniteDebug(void) { return mPointVs_1_1FiniteDebug; }
+        /// Get FINITE extruder program source for debug directional lights, compatible with arbvp1
+        static const String& getDirectionalLightExtruderArbvp1FiniteDebug(void) { return mDirArbvp1FiniteDebug; }
+        /// Get FINITE extruder program source for debug directional lights, compatible with vs_1_1
+        static const String& getDirectionalLightExtruderVs_1_1FiniteDebug(void) { return mDirVs_1_1FiniteDebug; }
+
+
+
+		
+    };
+}
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreStableHeaders.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreStableHeaders.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreStableHeaders.h	(revision 1092)
@@ -0,0 +1,76 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+/* Stable headers which will be used for precompilation if the compiler
+   supports it. Add entries here when headers are unlikely to change.
+   NB: a change to any of these headers will result in a full rebuild,
+   so don't add things to this lightly.
+*/
+
+#ifndef __OgreStableHeaders__
+#define __OgreStableHeaders__
+
+#include "OgrePlatform.h"
+
+#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32 || OGRE_PLATFORM == OGRE_PLATFORM_APPLE
+#include "OgreArchive.h"
+#include "OgreAxisAlignedBox.h"
+#include "OgreBitwise.h"
+#include "OgreCamera.h"
+#include "OgreColourValue.h"
+#include "OgreCommon.h"
+#include "OgreDataStream.h"
+#include "OgreException.h"
+#include "OgreFileSystem.h"
+#include "OgreLog.h"
+#include "OgreMath.h"
+#include "OgreMatrix3.h"
+#include "OgreMatrix4.h"
+#include "OgreMovableObject.h"
+#include "OgreNode.h"
+#include "OgrePlane.h"
+#include "OgrePrerequisites.h"
+#include "OgreQuaternion.h"
+#include "OgreResource.h"
+#include "OgreSerializer.h"
+#include "OgreSharedPtr.h"
+#include "OgreSimpleRenderable.h"
+#include "OgreSimpleSpline.h"
+#include "OgreSingleton.h"
+#include "OgreSphere.h"
+#include "OgreStdHeaders.h"
+#include "OgreString.h"
+#include "OgreStringConverter.h"
+#include "OgreStringInterface.h"
+#include "OgreStringVector.h"
+#include "OgreUserDefinedObject.h"
+#include "OgreVector2.h"
+#include "OgreVector3.h"
+#include "OgreVector4.h"
+#include "OgreWireBoundingBox.h"
+#include "OgreZip.h"
+#endif
+
+#endif 
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePatchSurface.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePatchSurface.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePatchSurface.h	(revision 1092)
@@ -0,0 +1,229 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __PatchSurface_H__
+#define __PatchSurface_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreVector3.h"
+#include "OgreString.h"
+#include "OgreRenderOperation.h"
+#include "OgreAxisAlignedBox.h"
+
+namespace Ogre {
+
+    /** A surface which is defined by curves of some kind to form a patch, e.g. a Bezier patch.
+        @remarks
+            This object will take a list of control points with various assorted data, and will
+            subdivide it into a patch mesh. Currently only Bezier curves are supported for defining
+            the surface, but other techniques such as NURBS would follow the same basic approach.
+    */
+    class _OgreExport PatchSurface
+    {
+    public:
+        PatchSurface();
+        ~PatchSurface();
+
+        enum PatchSurfaceType
+        {
+            /// A patch defined by a set of bezier curves
+            PST_BEZIER
+        };
+
+        /// Constant for indicating automatic determination of subdivision level for patches
+        enum
+        {
+            AUTO_LEVEL = -1
+        };
+
+        enum VisibleSide {
+            /// The side from which u goes right and v goes up (as in texture coords)
+            VS_FRONT,
+            /// The side from which u goes right and v goes down (reverse of texture coords)
+            VS_BACK,
+            /// Both sides are visible - warning this creates 2x the number of triangles and adds extra overhead for calculating normals
+            VS_BOTH
+        };
+        /** Sets up the surface by defining it's control points, type and initial subdivision level.
+            @remarks
+                This method initialises the surface by passing it a set of control points. The type of curves to be used
+                are also defined here, although the only supported option currently is a bezier patch. You can also
+                specify a global subdivision level here if you like, although it is recommended that the parameter
+                is left as AUTO_LEVEL, which means the system decides how much subdivision is required (based on the
+                curvature of the surface)
+            @param
+                controlPointBuffer A pointer to a buffer containing the vertex data which defines control points 
+                of the curves rather than actual vertices. Note that you are expected to provide not
+                just position information, but potentially normals and texture coordinates too. The
+                format of the buffer is defined in the VertexDeclaration parameter
+            @param
+                decaration VertexDeclaration describing the contents of the buffer. 
+                Note this declaration must _only_ draw on buffer source 0!
+            @param
+                width Specifies the width of the patch in control points.
+            @param
+                height Specifies the height of the patch in control points. 
+            @param
+                pType The type of surface - currently only PST_BEZIER is supported
+            @param
+                uMaxSubdivisionLevel,vMaxSubdivisionLevel If you want to manually set the top level of subdivision, 
+                do it here, otherwise let the system decide.
+            @param
+                visibleSide Determines which side of the patch (or both) triangles are generated for.
+        */
+        void defineSurface(void* controlPointBuffer, 
+            VertexDeclaration *declaration, size_t width, size_t height,
+            PatchSurfaceType pType = PST_BEZIER, 
+            size_t uMaxSubdivisionLevel = AUTO_LEVEL, size_t vMaxSubdivisionLevel = AUTO_LEVEL,
+            VisibleSide visibleSide = VS_FRONT);
+
+        /** Based on a previous call to defineSurface, establishes the number of vertices required
+            to hold this patch at the maximum detail level. 
+            @remarks This is useful when you wish to build the patch into external vertex / index buffers.
+
+        */
+        size_t getRequiredVertexCount(void) const;
+        /** Based on a previous call to defineSurface, establishes the number of indexes required
+            to hold this patch at the maximum detail level. 
+            @remarks This is useful when you wish to build the patch into external vertex / index buffers.
+
+        */
+        size_t getRequiredIndexCount(void) const;
+
+        /** Gets the current index count based on the current subdivision level. */
+        size_t getCurrentIndexCount(void) const;
+        /// Returns the index offset used by this buffer to write data into the buffer
+        size_t getIndexOffset(void) const { return mIndexOffset; }
+        /// Returns the vertex offset used by this buffer to write data into the buffer
+        size_t getVertexOffset(void) const { return mVertexOffset; }
+
+
+        /** Gets the bounds of this patch, only valid after calling defineSurface. */
+        const AxisAlignedBox& getBounds(void) const;
+        /** Gets the radius of the bounding sphere for this patch, only valid after defineSurface 
+        has been called. */
+        Real getBoundingSphereRadius(void) const;
+        /** Tells the system to build the mesh relating to the surface into externally created
+            buffers.
+            @remarks
+                The VertexDeclaration of the vertex buffer must be identical to the one passed into
+                defineSurface.  In addition, there must be enough space in the buffer to 
+                accommodate the patch at full detail level; you should call getRequiredVertexCount
+                and getRequiredIndexCount to determine this. This method does not create an internal
+                mesh for this patch and so getMesh will return null if you call it after building the
+                patch this way.
+            @param destVertexBuffer The destination vertex buffer in which to build the patch.
+            @param vertexStart The offset at which to start writing vertices for this patch
+            @param destIndexBuffer The destination index buffer in which to build the patch.
+            @param vertexStart The offset at which to start writing indexes for this patch
+
+        */
+        void build(HardwareVertexBufferSharedPtr destVertexBuffer, size_t vertexStart,
+            HardwareIndexBufferSharedPtr destIndexBuffer, size_t indexStart);
+
+        /** Alters the level of subdivision for this surface.
+            @remarks
+                This method changes the proportionate detail level of the patch; since
+                the U and V directions can have different subdivision levels, this method
+                takes a single Real value where 0 is the minimum detail (the control points)
+                and 1 is the maximum detail level as supplied to the original call to 
+                defineSurface.
+        */
+        void setSubdivisionFactor(Real factor);
+
+        /** Gets the current level of subdivision. */
+        Real getSubdivisionFactor(void) const;
+
+        void* getControlPointBuffer(void) const
+        {
+            return mControlPointBuffer;
+        }
+        /** Convenience method for telling the patch that the control points have been 
+            deleted, since once the patch has been built they are not required. */
+        void notifyControlPointBufferDeallocated(void) { 
+            mControlPointBuffer = 0;
+        }
+    protected:
+        /// Vertex declaration describing the control point buffer
+        VertexDeclaration* mDeclaration;
+        /// Buffer containing the system-memory control points
+        void* mControlPointBuffer;
+        /// Type of surface
+        PatchSurfaceType mType;
+        /// Width in control points
+        size_t mCtlWidth;
+        /// Height in control points
+        size_t mCtlHeight;
+        /// TotalNumber of control points
+        size_t mCtlCount;
+        /// U-direction subdivision level
+        size_t mULevel;
+        /// V-direction subdivision level
+        size_t mVLevel;
+        /// Max subdivision level
+        size_t mMaxULevel;
+        size_t mMaxVLevel;
+        /// Width of the subdivided mesh (big enough for max level)
+        size_t mMeshWidth;
+        /// Height of the subdivided mesh (big enough for max level)
+        size_t mMeshHeight;
+        /// Which side is visible
+        VisibleSide mVSide;
+
+        Real mSubdivisionFactor;
+
+        std::vector<Vector3> mVecCtlPoints;
+
+        /** Internal method for finding the subdivision level given 3 control points.
+        */
+        size_t findLevel( Vector3& a, Vector3& b, Vector3& c);
+
+        void distributeControlPoints(void* lockedBuffer);
+        void subdivideCurve(void* lockedBuffer, size_t startIdx, size_t stepSize, size_t numSteps, size_t iterations);
+        void interpolateVertexData(void* lockedBuffer, size_t leftIndex, size_t rightIndex, size_t destIndex);
+        void makeTriangles(void);
+
+        size_t getAutoULevel(bool forMax = false);
+        size_t getAutoVLevel(bool forMax = false);
+
+        HardwareVertexBufferSharedPtr mVertexBuffer;
+        HardwareIndexBufferSharedPtr mIndexBuffer;
+        size_t mVertexOffset;
+        size_t mIndexOffset;
+        size_t mRequiredVertexCount;
+        size_t mRequiredIndexCount;
+        size_t mCurrIndexCount;
+
+        AxisAlignedBox mAABB;
+        Real mBoundingSphere;
+
+
+
+    };
+
+
+} // namespace
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreParticleSystem.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreParticleSystem.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreParticleSystem.h	(revision 1092)
@@ -0,0 +1,587 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE 
+	(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under 
+the terms of the GNU Lesser General Public License as published by the Free Software 
+Foundation; either version 2 of the License, or (at your option) any later 
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT 
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with 
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple 
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to 
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __ParticleSystem_H__
+#define __ParticleSystem_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreVector3.h"
+#include "OgreString.h"
+#include "OgreParticleIterator.h"
+#include "OgreStringInterface.h"
+#include "OgreMovableObject.h"
+
+namespace Ogre {
+
+    /** Class defining particle system based special effects.
+    @remarks
+        Particle systems are special effects generators which are based on a 
+        number of moving points to create the impression of things like like 
+        sparkles, smoke, blood spurts, dust etc.
+    @par
+        This class simply manages a single collection of particles in world space
+        with a shared local origin for emission. The visual aspect of the 
+        particles is handled by a ParticleSystemRenderer instance.
+    @par
+        Particle systems are created using the ParticleSystemManager methods, never directly.
+        In addition, like all subclasses of MovableObject, the ParticleSystem will only be considered for
+        rendering once it has been attached to a SceneNode. 
+    */
+    class _OgreExport ParticleSystem : public StringInterface, public MovableObject
+    {
+    public:
+
+        /** Command object for quota (see ParamCommand).*/
+        class _OgrePrivate CmdQuota : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /** Command object for material (see ParamCommand).*/
+        class _OgrePrivate CmdMaterial : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /** Command object for cull_each (see ParamCommand).*/
+        class _OgrePrivate CmdCull : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /** Command object for particle_width (see ParamCommand).*/
+        class _OgrePrivate CmdWidth : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /** Command object for particle_height (see ParamCommand).*/
+        class _OgrePrivate CmdHeight : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /** Command object for renderer (see ParamCommand).*/
+        class _OgrePrivate CmdRenderer : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+
+        /// Default constructor required for STL creation in manager
+        ParticleSystem();
+        /** Creates a particle system with no emitters or affectors.
+        @remarks
+            You should use the ParticleSystemManager to create particle systems rather than creating
+            them directly.
+        */
+        ParticleSystem(const String& name, const String& resourceGroupName);
+
+        virtual ~ParticleSystem();
+
+        /** Sets the ParticleRenderer to be used to render this particle system.
+        @remarks
+            The main ParticleSystem just manages the creation and movement of 
+            particles; they are rendered using functions in ParticleRenderer
+            and the ParticleVisual instances they create.
+		@param typeName String identifying the type of renderer to use; a new 
+			instance of this type will be created; a factory must have been registered
+			with ParticleSystemManager.
+        */
+        void setRenderer(const String& typeName);
+
+        /** Gets the ParticleRenderer to be used to render this particle system. */
+        ParticleSystemRenderer* getRenderer(void) const;
+        /** Gets the name of the ParticleRenderer to be used to render this particle system. */
+        const String& getRendererName(void) const;
+
+        /** Adds an emitter to this particle system.
+        @remarks
+            Particles are created in a particle system by emitters - see the ParticleEmitter
+            class for more details.
+        @param 
+            emitterType String identifying the emitter type to create. Emitter types are defined
+            by registering new factories with the manager - see ParticleEmitterFactory for more details.
+            Emitter types can be extended by OGRE, plugin authors or application developers.
+        */
+        ParticleEmitter* addEmitter(const String& emitterType);
+
+        /** Retrieves an emitter by it's index (zero-based).
+        @remarks
+            Used to retrieve a pointer to an emitter for a particle system to procedurally change
+            emission parameters etc.
+            You should check how many emitters are registered against this system before calling
+            this method with an arbitrary index using getNumEmitters.
+        @param
+            index Zero-based index of the emitter to retrieve.
+        */
+        ParticleEmitter* getEmitter(unsigned short index) const;
+
+        /** Returns the number of emitters for this particle system. */
+        unsigned short getNumEmitters(void) const;
+
+        /** Removes an emitter from the system.
+        @remarks
+            Drops the emitter with the index specified from this system.
+            You should check how many emitters are registered against this system before calling
+            this method with an arbitrary index using getNumEmitters.
+        @param
+            index Zero-based index of the emitter to retrieve.
+        */
+        void removeEmitter(unsigned short index);
+
+        /** Removes all the emitters from this system. */
+        void removeAllEmitters(void);
+
+
+        /** Adds an affector to this particle system.
+        @remarks
+            Particles are modified over time in a particle system by affectors - see the ParticleAffector
+            class for more details.
+        @param 
+            affectorType String identifying the affector type to create. Affector types are defined
+            by registering new factories with the manager - see ParticleAffectorFactory for more details.
+            Affector types can be extended by OGRE, plugin authors or application developers.
+        */
+        ParticleAffector* addAffector(const String& affectorType);
+
+        /** Retrieves an affector by it's index (zero-based).
+        @remarks
+            Used to retrieve a pointer to an affector for a particle system to procedurally change
+            affector parameters etc.
+            You should check how many affectors are registered against this system before calling
+            this method with an arbitrary index using getNumAffectors.
+        @param
+            index Zero-based index of the affector to retrieve.
+        */
+        ParticleAffector* getAffector(unsigned short index) const;
+
+        /** Returns the number of affectors for this particle system. */
+        unsigned short getNumAffectors(void) const;
+
+        /** Removes an affector from the system.
+        @remarks
+            Drops the affector with the index specified from this system.
+            You should check how many affectors are registered against this system before calling
+            this method with an arbitrary index using getNumAffectors.
+        @param
+            index Zero-based index of the affector to retrieve.
+        */
+        void removeAffector(unsigned short index);
+
+        /** Removes all the affectors from this system. */
+        void removeAllAffectors(void);
+
+        /** Empties this set of all particles.
+        */
+        void clear();
+
+        /** Gets the number of individual particles in the system right now.
+        @remarks
+            The number of particles active in a system at a point in time depends on 
+            the number of emitters, their emission rates, the time-to-live (TTL) each particle is
+            given on emission (and whether any affectors modify that TTL) and the maximum
+            number of particles allowed in this system at once (particle quota).
+        */
+        size_t getNumParticles(void) const;
+
+		/** Manually add a particle to the system. 
+		@remarks
+			Instead of using an emitter, you can manually add a particle to the system.
+			You must initialise the returned particle instance immediately with the
+			'emission' state.
+		@note
+			There is no corresponding 'destroyParticle' method - if you want to dispose of a
+			particle manually (say, if you've used setSpeedFactor(0) to make particles live forever)
+			you should use getParticle() and modify it's timeToLive to zero, meaning that it will
+			get cleaned up in the next update.
+		*/
+		Particle* createParticle(void);
+
+		/** Retrieve a particle from the system for manual tweaking.
+		@remarks
+			Normally you use an affector to alter particles in flight, but
+			for small manually controlled particle systems you might want to use
+			this method.
+		*/
+		Particle* getParticle(size_t index);
+
+        /** Returns the maximum number of particles this system is allowed to have active at once.
+        @remarks
+            See ParticleSystem::setParticleQuota for more info.
+        */
+        size_t getParticleQuota(void) const;
+
+        /** Sets the maximum number of particles this system is allowed to have active at once.
+        @remarks
+            Particle systems all have a particle quota, i.e. a maximum number of particles they are 
+            allowed to have active at a time. This allows the application to set a keep particle systems
+            under control should they be affected by complex parameters which alter their emission rates
+            etc. If a particle system reaches it's particle quota, none of the emitters will be able to 
+            emit any more particles. As existing particles die, the spare capacity will be allocated
+            equally across all emitters to be as consistent to the origina particle system style as possible.
+        @param quota The maximum number of particles this system is allowed to have.
+        */
+        void setParticleQuota(size_t quota);
+
+
+        /** Assignment operator for copying.
+        @remarks
+            This operator deep copies all particle emitters and effectors, but not particles. The
+            system's name is also not copied.
+        */
+        ParticleSystem& operator=(const ParticleSystem& rhs);
+
+        /** Updates the particles in the system based on time elapsed.
+        @remarks
+            This is called automatically every frame by OGRE.
+        @param
+            timeElapsed The amount of time, in seconds, since the last frame.
+        */
+        void _update(Real timeElapsed);
+
+        /** Returns an iterator for stepping through all particles in this system.
+        @remarks
+            This method is designed to be used by people providing new ParticleAffector subclasses,
+            this is the easiest way to step through all the particles in a system and apply the
+            changes the affector wants to make.
+        */
+        ParticleIterator _getIterator(void);
+
+        /** Sets the name of the material to be used for this billboard set.
+            @param
+                name The new name of the material to use for this set.
+        */
+        virtual void setMaterialName(const String& name);
+
+        /** Sets the name of the material to be used for this billboard set.
+            @returns The name of the material that is used for this set.
+        */
+        virtual const String& getMaterialName(void) const;
+
+        /** Overridden from MovableObject
+            @see
+                MovableObject
+        */
+        virtual void _notifyCurrentCamera(Camera* cam);
+
+        /** Overridden from MovableObject
+        @see
+        MovableObject
+        */
+        void _notifyAttached(Node* parent, bool isTagPoint = false);
+
+        /** Overridden from MovableObject
+            @see
+                MovableObject
+        */
+        virtual const AxisAlignedBox& getBoundingBox(void) const { return mAABB; }
+
+        /** Overridden from MovableObject
+            @see
+                MovableObject
+        */
+        virtual Real getBoundingRadius(void) const { return mBoundingRadius; }
+
+        /** Overridden from MovableObject
+            @see
+                MovableObject
+        */
+        virtual void _updateRenderQueue(RenderQueue* queue);
+
+        /** Overridden from MovableObject */
+        const String& getName(void) const { return mName; }
+
+        /** Fast-forwards this system by the required number of seconds.
+        @remarks
+            This method allows you to fast-forward a system so that it effectively looks like
+            it has already been running for the time you specify. This is useful to avoid the
+            'startup sequence' of a system, when you want the system to be fully populated right
+            from the start.
+        @param
+            time The number of seconds to fast-forward by.
+        @param
+            interval The sampling interval used to generate particles, apply affectors etc. The lower this
+            is the more realistic the fast-forward, but it takes more iterations to do it.
+        */
+        void fastForward(Real time, Real interval = 0.1);
+
+		/** Sets a 'speed factor' on this particle system, which means it scales the elapsed
+			real time which has passed by this factor before passing it to the emitters, affectors,
+			and the particle life calculation.
+		@remarks
+			An interesting side effect - if you want to create a completely manual particle system
+			where you control the emission and life of particles yourself, you can set the speed
+			factor to 0.0f, thus disabling normal particle emission, alteration, and death.
+		*/
+		void setSpeedFactor(Real speedFactor) { mSpeedFactor = speedFactor; }
+
+		/** Gets the 'speed factor' on this particle system.
+		*/
+		Real getSpeedFactor(void) const { return mSpeedFactor; }
+
+
+        /** Overridden from MovableObject */
+        const String& getMovableType(void) const;
+
+        /** Internal callback used by Particles to notify their parent that they have been resized.
+        */
+        virtual void _notifyParticleResized(void);
+
+        /** Internal callback used by Particles to notify their parent that they have been rotated.
+        */
+        virtual void _notifyParticleRotated(void);
+
+        /** Sets the default dimensions of the particles in this set.
+            @remarks
+                All particles in a set are created with these default dimensions. The set will render most efficiently if
+                all the particles in the set are the default size. It is possible to alter the size of individual
+                particles at the expense of extra calculation. See the Particle class for more info.
+            @param width
+                The new default width for the particles in this set.
+            @param height
+                The new default height for the particles in this set.
+        */
+        virtual void setDefaultDimensions(Real width, Real height);
+
+        /** See setDefaultDimensions - this sets 1 component individually. */
+        virtual void setDefaultWidth(Real width);
+        /** See setDefaultDimensions - this gets 1 component individually. */
+        virtual Real getDefaultWidth(void) const;
+        /** See setDefaultDimensions - this sets 1 component individually. */
+        virtual void setDefaultHeight(Real height);
+        /** See setDefaultDimensions - this gets 1 component individually. */
+        virtual Real getDefaultHeight(void) const;
+        /** Returns whether or not particles in this are tested individually for culling. */
+        virtual bool getCullIndividually(void) const;
+        /** Sets whether culling tests particles in this individually as well as in a group.
+        @remarks
+            Particle sets are always culled as a whole group, based on a bounding box which 
+            encloses all particles in the set. For fairly localised sets, this is enough. However, you
+            can optionally tell the set to also cull individual particles in the set, i.e. to test
+            each individual particle before rendering. The default is not to do this.
+        @par
+            This is useful when you have a large, fairly distributed set of particles, like maybe 
+            trees on a landscape. You probably still want to group them into more than one
+            set (maybe one set per section of landscape), which will be culled coarsely, but you also
+            want to cull the particles individually because they are spread out. Whilst you could have
+            lots of single-tree sets which are culled separately, this would be inefficient to render
+            because each tree would be issued as it's own rendering operation.
+        @par
+            By calling this method with a parameter of true, you can have large particle sets which 
+            are spaced out and so get the benefit of batch rendering and coarse culling, but also have
+            fine-grained culling so unnecessary rendering is avoided.
+        @param cullIndividual If true, each particle is tested before being sent to the pipeline as well 
+            as the whole set having to pass the coarse group bounding test.
+        */
+        virtual void setCullIndividually(bool cullIndividual);
+        /// Return the resource group to be used to load dependent resources
+        virtual const String& getResourceGroupName(void) const { return mResourceGroupName; }
+		/** Get the origin of this particle system, e.g. a script file name.
+		@remarks
+			This property will only contain something if the creator of
+			this particle system chose to populate it. Script loaders are advised
+			to populate it.
+		*/
+		const String& getOrigin(void) const { return mOrigin; }
+		/// Notify this particle system of it's origin
+		void _notifyOrigin(const String& origin) { mOrigin = origin; }
+
+		/** @copydoc MovableObject::setRenderQueueGroup */
+		void setRenderQueueGroup(RenderQueueGroupID queueID);
+
+        /** Set the (initial) bounds of the particle system manually. 
+        @remarks
+            If you can, set the bounds of a particle system up-front and 
+            call setBoundsUpdatePeriod(0); this is the most efficient way to
+            organise it. Otherwise, set an initial bounds and let the bounds increase
+            for a little while (the default is 5 seconds), after which time the 
+            AABB is fixed to save time.
+        @param aabb Bounds in local space.
+        */
+        void setBounds(const AxisAlignedBox& aabb);
+
+        /** Sets whether the bounds will be automatically updated
+            for the life of the particle system
+        @remarks
+            If you have a stationary particle system, it would be a good idea to
+            call this method and set the value to 'false', since the maximum
+            bounds of the particle system will eventually be static. If you do
+            this, you can either set the bounds manually using the setBounds()
+            method, or set the second parameter of this method to a positive
+            number of seconds, so that the bounds are calculated for a few
+            seconds and then frozen.
+        @param autoUpdate If true (the default), the particle system will
+            update it's bounds every frame. If false, the bounds update will 
+            cease after the 'stopIn' number of seconds have passed.
+        @param stopIn Only applicable if the first parameter is true, this is the
+            number of seconds after which the automatic update will cease.
+        */
+        void setBoundsAutoUpdated(bool autoUpdate, Real stopIn = 0.0f);
+
+        /** Internal method for updating the bounds of the particle system.
+        @remarks
+            This is called automatically for a period of time after the system's
+            creation (5 seconds by default, settable by setBoundsUpdatePeriod) 
+            to increase (and only increase) the bounds of the system according 
+            to the emitted and affected particles. After this period, the 
+            system is assumed to achieved its maximum size, and the bounds are
+            no longer computed for efficiency. You can tweak the behaviour by 
+            either setting the bounds manually (setBounds, preferred), or 
+            changing the time over which the bounds are updated (performance cost).
+            You can also call this method manually if you need to update the 
+            bounds on an ad-hoc basis.
+        */
+        void _updateBounds(void);
+
+    protected:
+
+        /// Command objects
+        static CmdCull msCullCmd;
+        static CmdHeight msHeightCmd;
+        static CmdMaterial msMaterialCmd;
+        static CmdQuota msQuotaCmd;
+        static CmdWidth msWidthCmd;
+        static CmdRenderer msRendererCmd;
+
+
+        AxisAlignedBox mAABB;
+        Real mBoundingRadius;
+        bool mBoundsAutoUpdate;
+        Real mBoundsUpdateTime;
+
+        /// World AABB, only used to compare world-space positions to calc bounds
+        AxisAlignedBox mWorldAABB;
+
+        /// Name of the system; used for location in the scene.
+        String mName;
+        /// Name of the resource group to use to load materials
+        String mResourceGroupName;
+        /// Name of the material to use
+        String mMaterialName;
+        /// Have we set the material etc on the renderer?
+        bool mIsRendererConfigured;
+        /// Pointer to the material to use
+        MaterialPtr mpMaterial;
+        /// Default width of each particle
+        Real mDefaultWidth;
+        /// Default height of each particle
+        Real mDefaultHeight;
+		/// Speed factor
+		Real mSpeedFactor;
+
+        typedef std::list<Particle*> ActiveParticleList;
+        typedef std::deque<Particle*> FreeParticleQueue;
+        typedef std::vector<Particle*> ParticlePool;
+
+        /** Active particle list.
+            @remarks
+                This is a linked list of pointers to particles in the particle pool.
+            @par
+                This allows very fast instertions and deletions from anywhere in 
+                the list to activate / deactivate particles as well as resuse of 
+                Particle instances in the pool without construction & destruction 
+                which avoids memory thrashing.
+        */
+        ActiveParticleList mActiveParticles;
+
+        /** Free particle queue.
+            @remarks
+                This contains a list of the particles free for use as new instances
+                as required by the set. Particle instances are preconstructed up 
+                to the estimated size in the mParticlePool vector and are 
+                referenced on this deque at startup. As they get used this deque
+                reduces, as they get released back to to the set they get added back to the deque.
+        */
+        FreeParticleQueue mFreeParticles;
+
+        /** Pool of particle instances for use and reuse in the active particle list.
+            @remarks
+                This vector will be preallocated with the estimated size of the set,and will extend as required.
+        */
+        ParticlePool mParticlePool;
+
+        typedef std::vector<ParticleEmitter*> ParticleEmitterList;
+        typedef std::vector<ParticleAffector*> ParticleAffectorList;
+        
+        /// List of particle emitters, ie sources of particles
+        ParticleEmitterList mEmitters;
+        /// List of particle affectors, ie modifiers of particles
+        ParticleAffectorList mAffectors;
+
+        /// The renderer used to render this particle system
+        ParticleSystemRenderer* mRenderer;
+
+        /// Do we cull each particle individually?
+        bool mCullIndividual;
+
+        /// The name of the type of renderer used to render this system
+        String mRendererType;
+        
+        /// The number of particles in the pool.
+        size_t mPoolSize;
+
+		/// Optional origin of this particle system (eg script name)
+		String mOrigin;
+
+
+        /** Internal method used to expire dead particles. */
+        void _expire(Real timeElapsed);
+
+        /** Spawn new particles based on free quota and emitter requirements. */
+        void _triggerEmitters(Real timeElapsed);
+
+        /** Updates existing particle based on their momentum. */
+        void _applyMotion(Real timeElapsed);
+
+        /** Applies the effects of affectors. */
+        void _triggerAffectors(Real timeElapsed);
+
+        /** Resize the internal pool of particles. */
+        void increasePool(size_t size);
+
+        /** Internal method for initialising string interface. */
+        void initParameters(void);
+
+        /** Internal method to configure the renderer. */
+        void configureRenderer(void);
+
+		/// Internal method for creating ParticleVisualData instances for the pool
+		void createVisualParticles(size_t poolstart, size_t poolend);
+		/// Internal method for destroying ParticleVisualData instances for the pool
+		void destroyVisualParticles(size_t poolstart, size_t poolend);
+
+
+    };
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreVertexBoneAssignment.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreVertexBoneAssignment.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreVertexBoneAssignment.h	(revision 1092)
@@ -0,0 +1,52 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __VertexBoneAssignment_H__
+#define __VertexBoneAssignment_H__
+
+#include "OgrePrerequisites.h"
+
+
+namespace Ogre 
+{
+    
+    /** Records the assignment of a single vertex to a single bone with the corresponding weight.
+    @remarks
+        This simple struct simply holds a vertex index, bone index and weight representing the
+        assignment of a vertex to a bone for skeletal animation. There may be many of these
+        per vertex if blended vertex assignments are allowed.
+    */
+    typedef struct VertexBoneAssignment_s
+    {
+        unsigned int vertexIndex;
+        unsigned short boneIndex;
+        Real weight;
+
+    } VertexBoneAssignment;
+
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreCursor.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreCursor.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreCursor.h	(revision 1092)
@@ -0,0 +1,140 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+
+/***************************************************************************
+OgreCursor.h  -  
+	The Cursor is an non-visual object that contains a the XYZ values that 
+	are modified by a InputReader.
+	An InputReader creates and contains a Cursor object that it uses when it 
+	is set to buffered input (using the EventQueue).
+
+	To get a graphical representation of the cursor, a CursorGuiElement is
+	used, which is a MouseMotionListener to the Cursor.
+
+-------------------
+begin                : Nov 19 2002
+copyright            : (C) 2002 by Kenny Sabir
+email                : kenny@sparksuit.com
+***************************************************************************/
+
+#ifndef __Cursor_H__
+#define __Cursor_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreMouseMotionTarget.h"
+#include "OgreMouseTarget.h"
+
+namespace Ogre {
+	/** The Cursor is an non-visual object that contains a the XYZ values that 
+		are modified by a InputReader.
+	@remarks
+		An InputReader creates and contains a Cursor object that it uses when it 
+		is set to buffered input (using the EventQueue).
+
+		To get a graphical representation of the cursor, a CursorGuiElement is
+		used, which is a MouseMotionListener to the Cursor.
+	*/
+	class _OgreExport Cursor : public MouseMotionTarget, public MouseTarget
+    {
+    protected:
+		/** Cursor position */
+        Real mMouseX, mMouseY, mMouseZ;
+
+        /** relative cursor position */
+        Real mRelX, mRelY, mRelZ;
+
+		/** Cursor limits 0-1 */
+		Real mXLowLimit, mXHighLimit, mYLowLimit, mYHighLimit, mZLowLimit, mZHighLimit;
+
+		/** Scale the cursor movements. Initially set at 1 (no scaling).
+			The scaling effects all axis, XYZ */
+		Real mScale;
+
+		/** inline function to clip a value to its low and high limits */
+		inline Real limit(Real val, Real low, Real high)
+		{	return (val < low) ? low: ((val > high) ? high : val); }
+	public :
+		Cursor();
+		virtual ~Cursor();
+
+		/** add relative amount to X */
+		void addToX(Real val);
+
+		/** add relative amount to Y */
+		void addToY(Real val);
+
+		/** add relative amount to Z */
+		void addToZ(Real val);
+
+		/** process the mouse events that are for any listeners to the cursor */
+		void processEvent(InputEvent* e);
+
+
+		/** get the current X position of the cursor 0 left, 1 right */
+		Real getX() const;
+
+		/** get the current Y position of the cursor 0 top, 1 bottom */
+		Real getY() const;
+
+		/** get the current Z position of the cursor 0 none, 1 full */
+		Real getZ() const;
+
+        /** get relative X cursor movement */
+        Real getRelX() const {return mRelX;}
+
+        /** get relative Y cursor movement */
+        Real getRelY() const {return mRelY;}
+
+        /** get relative Z cursor movement */
+        Real getRelZ() const {return mRelZ;}
+
+
+
+	// PositionTarget methods
+        /** Gets the left of this element in relation to the screen (where 0 = far left, 1.0 = far right)  */
+        Real getLeft(void) const ;
+
+        /** Gets the top of this element in relation to the screen (where 0 = top, 1.0 = bottom)  */
+        Real getTop(void) const ;
+
+		/** The parent of the cursor is NULL as it's position is absolute in the window */
+		PositionTarget* getPositionTargetParent() const;
+
+		inline virtual bool isKeyEnabled() const
+		{ return false; }
+
+		/** Gets the current cursor movement scaling factor. */
+		Real getScale(void) const { return mScale; }
+		/** Sets the current cursor movement scaling factor. */
+		void setScale(Real scale) { mScale = scale; }
+		
+
+    };
+
+}
+
+
+#endif  // __Cursor_H__
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreAnimation.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreAnimation.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreAnimation.h	(revision 1092)
@@ -0,0 +1,243 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __Animation_H__
+#define __Animation_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreString.h"
+#include "OgreIteratorWrappers.h"
+
+namespace Ogre {
+
+    /** An animation sequence. 
+    @remarks
+        This class defines the interface for a sequence of animation, whether that
+        be animation of a mesh, a path along a spline, or possibly more than one
+        type of animation in one. An animation is made up of many 'tracks', which are
+        the more specific types of animation.
+    @par
+        You should not create these animations directly. They will be created via a parent
+        object which owns the animation, e.g. Skeleton.
+    */
+    class _OgreExport Animation
+    {
+
+    public:
+        /** The types of animation interpolation available. */
+        enum InterpolationMode
+        {
+            /** Values are interpolated along straight lines. */
+            IM_LINEAR,
+            /** Values are interpolated along a spline, resulting in smoother changes in direction. */
+            IM_SPLINE
+        };
+
+        /** The types of rotational interpolation available. */
+        enum RotationInterpolationMode
+        {
+            /** Values are interpolated linearly. This is faster but does not 
+                necessarily give a completely accurate result.
+            */
+            RIM_LINEAR,
+            /** Values are interpolated spherically. This is more accurate but
+                has a higher cost.
+            */
+            RIM_SPHERICAL
+        };
+        /** You should not use this constructor directly, use the parent object such as Skeleton instead.
+        @param name The name of the animation, should be unique within it's parent (e.g. Skeleton)
+        @param length The length of the animation in seconds.
+        */
+        Animation(const String& name, Real length);
+        virtual ~Animation();
+
+        /** Gets the name of this animation. */
+        const String& getName(void) const;
+
+        /** Gets the total length of the animation. */
+        Real getLength(void) const;
+
+        /** Creates an AnimationTrack. 
+        @param handle Numeric handle to give the track, used for accessing the track later. 
+            Must be unique within this Animation.
+        */
+        AnimationTrack* createTrack(unsigned short handle);
+
+        /** Creates a new AnimationTrack automatically associated with a Node. 
+        @remarks
+            This method creates a standard AnimationTrack, but also associates it with a
+            target Node which will receive all keyframe effects.
+        @param handle Numeric handle to give the track, used for accessing the track later. 
+            Must be unique within this Animation.
+        @param node A pointer to the Node object which will be affected by this track
+        */
+        AnimationTrack* createTrack(unsigned short handle, Node* node);
+
+        /** Gets the number of AnimationTrack objects which make up this animation. */
+        unsigned short getNumTracks(void) const;
+
+        /** Gets a track by it's handle. */
+        AnimationTrack* getTrack(unsigned short handle) const;
+
+
+        /** Destroys the track with the given handle. */
+        void destroyTrack(unsigned short handle);
+
+        /** Removes and destroys all tracks making up this animation. */
+        void destroyAllTracks(void);
+
+        /** Applies an animation given a specific time point and weight.
+        @remarks
+            Where you have associated animation tracks with Node objects, you can eaily apply
+            an animation to those nodes by calling this method.
+        @param timePos The time position in the animation to apply.
+        @param weight The influence to give to this track, 1.0 for full influence, less to blend with
+          other animations.
+	    @param scale The scale to apply to translations and scalings, useful for 
+			adapting an animation to a different size target.
+        */
+        void apply(Real timePos, Real weight = 1.0, bool accumulate = false, 
+			Real scale = 1.0f);
+
+        /** Applies an animation given a specific time point and weight to a given skeleton.
+        @remarks
+        Where you have associated animation tracks with Node objects, you can eaily apply
+        an animation to those nodes by calling this method.
+        @param timePos The time position in the animation to apply.
+        @param weight The influence to give to this track, 1.0 for full influence, less to blend with
+        other animations.
+	    @param scale The scale to apply to translations and scalings, useful for 
+			adapting an animation to a different size target.
+        */
+        void apply(Skeleton* skeleton, Real timePos, Real weight = 1.0, 
+			bool accumulate = false, Real scale = 1.0f);
+
+        /** Tells the animation how to interpolate between keyframes.
+        @remarks
+            By default, animations normally interpolate linearly between keyframes. This is
+            fast, but when animations include quick changes in direction it can look a little
+            unnatural because directions change instantly at keyframes. An alternative is to
+            tell the animation to interpolate along a spline, which is more expensive in terms
+            of calculation time, but looks smoother because major changes in direction are 
+            distributed around the keyframes rather than just at the keyframe.
+        @par
+            You can also change the default animation behaviour by calling 
+            Animation::setDefaultInterpolationMode.
+        */
+        void setInterpolationMode(InterpolationMode im);
+
+        /** Gets the current interpolation mode of this animation. 
+        @remarks
+            See setInterpolationMode for more info.
+        */
+        InterpolationMode getInterpolationMode(void) const;
+        /** Tells the animation how to interpolate rotations.
+        @remarks
+            By default, animations interpolate lieanrly between rotations. This
+            is fast but not necessarily completely accurate. If you want more 
+            accurate interpolation, use spherical interpolation, but be aware 
+            that it will incur a higher cost.
+        @par
+            You can also change the default rotation behaviour by calling 
+            Animation::setDefaultRotationInterpolationMode.
+        */
+        void setRotationInterpolationMode(RotationInterpolationMode im);
+
+        /** Gets the current rotation interpolation mode of this animation. 
+        @remarks
+            See setRotationInterpolationMode for more info.
+        */
+        RotationInterpolationMode getRotationInterpolationMode(void) const;
+
+        // Methods for setting the defaults
+        /** Sets the default animation interpolation mode. 
+        @remarks
+            Every animation created after this option is set will have the new interpolation
+            mode specified. You can also change the mode per animation by calling the 
+            setInterpolationMode method on the instance in question.
+        */
+        static void setDefaultInterpolationMode(InterpolationMode im);
+
+        /** Gets the default interpolation mode for all animations. */
+        static InterpolationMode getDefaultInterpolationMode(void);
+
+        /** Sets the default rotation interpolation mode. 
+        @remarks
+            Every animation created after this option is set will have the new interpolation
+            mode specified. You can also change the mode per animation by calling the 
+            setInterpolationMode method on the instance in question.
+        */
+        static void setDefaultRotationInterpolationMode(RotationInterpolationMode im);
+
+        /** Gets the default rotation interpolation mode for all animations. */
+        static RotationInterpolationMode getDefaultRotationInterpolationMode(void);
+
+        typedef std::map<unsigned short, AnimationTrack*> TrackList;
+        typedef ConstMapIterator<TrackList> TrackIterator;
+
+        /// Fast access to NON-UPDATEABLE track list
+        const TrackList& _getTrackList(void) const;
+
+        /// Get non-updateable iterator over tracks
+        TrackIterator getTrackIterator(void) const
+        { return TrackIterator(mTrackList.begin(), mTrackList.end()); }
+        
+		/** Optimise an animation by removing unnecessary tracks and keyframes.
+		@remarks
+			When you export an animation, it is possible that certain tracks
+			have been keyfamed but actually don't include anything useful - the
+			keyframes include no transformation. These tracks can be completely
+			eliminated from the animation and thus speed up the animation. 
+			In addition, if several keyframes in a row have the same value, 
+			then they are just adding overhead and can be removed.
+		*/
+		void optimise(void);
+		
+
+
+    protected:
+        /// Tracks, indexed by handle
+        TrackList mTrackList;
+        String mName;
+
+        Real mLength;
+
+        InterpolationMode mInterpolationMode;
+        RotationInterpolationMode mRotationInterpolationMode;
+
+        static InterpolationMode msDefaultInterpolationMode;
+        static RotationInterpolationMode msDefaultRotationInterpolationMode;
+
+        
+    };
+
+
+
+}
+
+
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreStaticFaceGroup.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreStaticFaceGroup.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreStaticFaceGroup.h	(revision 1092)
@@ -0,0 +1,130 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __StaticFaceGroup_H__
+#define __StaticFaceGroup_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgrePlane.h"
+#include "OgrePatchSurface.h"
+
+namespace Ogre {
+
+    /** A type of face group, ie face list of procedural etc */
+    enum FaceGroupType {
+        FGT_FACE_LIST,
+        FGT_PATCH,
+        FGT_UNKNOWN
+    };
+
+    /** Collectes a group of static ie immovable faces together which have common
+        properties like the material they use, the plane they lie on.
+        @remarks
+            Whilst for discrete geometry (i.e. movable objects) groups of faces are
+            held in the SubMesh class, for immovable objects like scenery there
+            needs to ba little more flexibility in the grouping since the group is
+            likely to be a small part of a huge set of geometry. In addition, because
+            the faces are unmoving certain optimisations can be performed, e.g.
+            precalculating a world-coordinate bounding box and normal.
+        @par
+            Exactly how this class is used depends on the format of the large
+            static geometry used in the level. An example would be the use of this
+            class in the BspNode class for indoor levels.
+            For flexibility and efficiency, it is not assumed that this class holds
+            details of the vertices itself, or in fact that it holds the vertex indices
+            itself. Everything is manipulated via pointers so if you want this
+            class to point into a block of geometry data it can.
+    */
+    struct StaticFaceGroup {
+        // Type of face group.
+        FaceGroupType fType;
+
+        /// Is this a sky surface?
+        bool isSky;
+
+        /** Index into a buffer containing vertex definitions. Because we're
+            dealing with subsets of large levels this is likely to be part-way
+            through a huge vertex buffer. */
+        int vertexStart;
+
+        /** The range of vertices in the buffer this facegroup references.
+            This is really for copying purposes only, so that we know which
+            subset of vertices to copy from our large-level buffer into the rendering buffer.
+        */
+        int numVertices;
+
+        /** Index into a buffer containing vertex indices. This buffer
+            may be individual to this group or shared for memory allocation
+            efficiency.The vertex indexes are relative the the mVertexStart pointer,
+            not to the start of the large-level buffer, allowing simple reindexing
+            when copying data into rendering buffers.
+            This is only applicable to FGT_FACE_LIST face group types.
+        */
+        int elementStart;
+
+        /** The number of vertex indices.
+            This is only applicable to FGT_FACE_LIST face group types.
+        */
+        int numElements;
+
+        /** Handle to material used by this group.
+            Note the use of the material handle rather than the material
+            name - this is for efficiency since there will be many of these.
+        */
+        int materialHandle;
+
+        Plane plane;
+
+        /// Patch surface (only applicable when fType = FGT_PATCH)
+        PatchSurface* patchSurf;
+
+
+        friend std::ostream& operator<<(std::ostream& o, StaticFaceGroup& s)
+        {
+            o << "StaticFaceGroup(";
+            if (s.fType == FGT_FACE_LIST)
+            {
+                o << "faceList, numVertices=" << s.numVertices << ", vertexStart=" << s.vertexStart;
+                o << ", numElements=" << s.numElements << ", elementStart=" << s.elementStart;
+                o << ", normal=" << s.plane.normal;
+            }
+            else if (s.fType == FGT_PATCH)
+            {
+                o << "bezierPatch, numVertices=" << s.numVertices << ", vertexStart=" << s.vertexStart;
+                // TODO
+            }
+
+            o << ", materialHandle=" << s.materialHandle;
+            o << ")";
+
+            return o;
+        }
+
+
+    };
+
+} // namespace
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreGpuProgram.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreGpuProgram.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreGpuProgram.h	(revision 1092)
@@ -0,0 +1,921 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://ogre.sourceforge.net/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __GpuProgram_H_
+#define __GpuProgram_H_
+
+// Precompiler options
+#include "OgrePrerequisites.h"
+#include "OgreResource.h"
+#include "OgreSharedPtr.h"
+#include "OgreIteratorWrappers.h"
+
+namespace Ogre {
+
+	/** Enumerates the types of programs which can run on the GPU. */
+	enum GpuProgramType
+	{
+		GPT_VERTEX_PROGRAM,
+		GPT_FRAGMENT_PROGRAM
+	};
+
+    
+    /** Collects together the program parameters used for a GpuProgram.
+    @remarks
+        Gpu program state includes constant parameters used by the program, and
+        bindings to render system state which is propagated into the constants 
+        by the engine automatically if requested.
+    @par
+        GpuProgramParameters objects should be created through the GpuProgramManager and
+        may be shared between multiple GpuProgram instances. For this reason they
+        are managed using a shared pointer, which will ensure they are automatically
+        deleted when no program is using them anymore.
+    */
+    class _OgreExport GpuProgramParameters
+    {
+    public:
+        /** Defines the types of automatically updated values that may be bound to GpuProgram
+        parameters, or used to modify parameters on a per-object basis.
+        */
+        enum AutoConstantType
+        {
+            /// The current world matrix
+            ACT_WORLD_MATRIX,
+            /// The current array of world matrices, as a 3x4 matrix, used for blending
+            ACT_WORLD_MATRIX_ARRAY_3x4,
+            /// The current array of world matrices, used for blending
+            ACT_WORLD_MATRIX_ARRAY,
+            /// The current view matrix
+            ACT_VIEW_MATRIX,
+            /// The current projection matrix
+            ACT_PROJECTION_MATRIX,
+            /// The current view & projection matrices concatenated
+            ACT_VIEWPROJ_MATRIX,
+            /// The current world & view matrices concatenated
+            ACT_WORLDVIEW_MATRIX,
+            /// The current world, view & projection matrices concatenated
+            ACT_WORLDVIEWPROJ_MATRIX,
+            /// The current world matrix, inverted
+            ACT_INVERSE_WORLD_MATRIX,
+			/// The current view matrix, inverted
+			ACT_INVERSE_VIEW_MATRIX,
+            /// The current world & view matrices concatenated, then inverted
+            ACT_INVERSE_WORLDVIEW_MATRIX,
+            /// The current world matrix, inverted & transposed
+            ACT_INVERSETRANSPOSE_WORLD_MATRIX,
+            /// The current world & view matrices concatenated, then inverted & tranposed
+            ACT_INVERSETRANSPOSE_WORLDVIEW_MATRIX,
+            /// Light diffuse colour (index determined by setAutoConstant call)
+            ACT_LIGHT_DIFFUSE_COLOUR,
+            /// Light diffuse colour (index determined by setAutoConstant call)
+            ACT_LIGHT_SPECULAR_COLOUR,
+            /// Light attenuation parameters, Vector4(range, constant, linear, quadric)
+            ACT_LIGHT_ATTENUATION,
+            /// A light position in world space (index determined by setAutoConstant call)
+            ACT_LIGHT_POSITION,
+            /// A light direction in world space (index determined by setAutoConstant call)
+            ACT_LIGHT_DIRECTION,
+            /// A light position in object space (index determined by setAutoConstant call)
+            ACT_LIGHT_POSITION_OBJECT_SPACE,
+            /// A light direction in object space (index determined by setAutoConstant call)
+            ACT_LIGHT_DIRECTION_OBJECT_SPACE,
+			/** The distance of the light from the center of the object
+				a useful approximation as an alternative to per-vertex distance
+				calculations.
+			*/
+			ACT_LIGHT_DISTANCE_OBJECT_SPACE,
+			/** The distance a shadow volume should be extruded when using
+			    finite extrusion programs.
+			*/
+			ACT_SHADOW_EXTRUSION_DISTANCE,
+            /// The current camera's position in object space 
+            ACT_CAMERA_POSITION_OBJECT_SPACE,
+			/// The ambient light colour set in the scene
+			ACT_AMBIENT_LIGHT_COLOUR, 
+            /// The view/projection matrix of the assigned texture projection frustum
+            ACT_TEXTURE_VIEWPROJ_MATRIX,
+            /// A custom parameter which will come from the renderable, using 'data' as the identifier
+            ACT_CUSTOM,
+            /// The current camera's position in world space
+            ACT_CAMERA_POSITION,
+            ACT_TIME,
+			/** Single float value, which repeats itself based on given as
+			parameter "cycle time". Equivalent to RenderMonkey's "Time0_X".
+			*/
+			ACT_TIME_0_X,
+			/// Cosine of "Time0_X". Equivalent to RenderMonkey's "CosTime0_X".
+			ACT_COSTIME_0_X,
+			/// Sine of "Time0_X". Equivalent to RenderMonkey's "SinTime0_X".
+			ACT_SINTIME_0_X,
+			/// Tangent of "Time0_X". Equivalent to RenderMonkey's "TanTime0_X".
+			ACT_TANTIME_0_X,
+			/** Vector of "Time0_X", "SinTime0_X", "CosTime0_X", 
+			"TanTime0_X". Equivalent to RenderMonkey's "Time0_X_Packed".
+			*/
+			ACT_TIME_0_X_PACKED,
+			/** Single float value, which represents scaled time value [0..1],
+			which repeats itself based on given as parameter "cycle time".
+			Equivalent to RenderMonkey's "Time0_1".
+			*/
+			ACT_TIME_0_1,
+			/// Cosine of "Time0_1". Equivalent to RenderMonkey's "CosTime0_1".
+			ACT_COSTIME_0_1,
+			/// Sine of "Time0_1". Equivalent to RenderMonkey's "SinTime0_1".
+			ACT_SINTIME_0_1,
+			/// Tangent of "Time0_1". Equivalent to RenderMonkey's "TanTime0_1".
+			ACT_TANTIME_0_1,
+			/** Vector of "Time0_1", "SinTime0_1", "CosTime0_1",
+			"TanTime0_1". Equivalent to RenderMonkey's "Time0_1_Packed".
+			*/
+			ACT_TIME_0_1_PACKED,
+			/**	Single float value, which represents scaled time value [0..2*Pi],
+			which repeats itself based on given as parameter "cycle time".
+			Equivalent to RenderMonkey's "Time0_2PI".
+			*/
+			ACT_TIME_0_2PI,
+			/// Cosine of "Time0_2PI". Equivalent to RenderMonkey's "CosTime0_2PI".
+			ACT_COSTIME_0_2PI,
+			/// Sine of "Time0_2PI". Equivalent to RenderMonkey's "SinTime0_2PI".
+			ACT_SINTIME_0_2PI,
+			/// Tangent of "Time0_2PI". Equivalent to RenderMonkey's "TanTime0_2PI".
+			ACT_TANTIME_0_2PI,
+			/** Vector of "Time0_2PI", "SinTime0_2PI", "CosTime0_2PI",
+			"TanTime0_2PI". Equivalent to RenderMonkey's "Time0_2PI_Packed".
+			*/
+			ACT_TIME_0_2PI_PACKED,
+			/// provides the calculated frames per second, returned as a floating point value.
+			ACT_FPS,
+			/// viewport-related values
+			/** Current viewport width (in pixels) as floating point value.
+			Equivalent to RenderMonkey's "ViewportWidth".
+			*/
+			ACT_VIEWPORT_WIDTH,
+			/** Current viewport height (in pixels) as floating point value.
+			Equivalent to RenderMonkey's "ViewportHeight".
+			*/
+			ACT_VIEWPORT_HEIGHT,
+			/** This variable represents 1.0/ViewportWidth. 
+			Equivalent to RenderMonkey's "ViewportWidthInverse".
+			*/
+			ACT_INVERSE_VIEWPORT_WIDTH,
+			/** This variable represents 1.0/ViewportHeight.
+			Equivalent to RenderMonkey's "ViewportHeightInverse".
+			*/
+			ACT_INVERSE_VIEWPORT_HEIGHT,
+
+			/// view parameters
+			/** This variable provides the view direction vector (world space).
+			Equivalent to RenderMonkey's "ViewDirection".
+			*/
+			ACT_VIEW_DIRECTION,
+			/** This variable provides the view side vector (world space).
+			Equivalent to RenderMonkey's "ViewSideVector".
+			*/
+			ACT_VIEW_SIDE_VECTOR,
+			/** This variable provides the view up vector (world space).
+			Equivalent to RenderMonkey's "ViewUpVector".
+			*/
+			ACT_VIEW_UP_VECTOR,
+			/** This variable provides the field of view as a floating point value.
+			Equivalent to RenderMonkey's "FOV".
+			*/
+			ACT_FOV,
+			/**	This variable provides the near clip distance as a floating point value.
+			Equivalent to RenderMonkey's "NearClipPlane".
+			*/
+			ACT_NEAR_CLIP_DISTANCE,
+			/**	This variable provides the far clip distance as a floating point value.
+			Equivalent to RenderMonkey's "FarClipPlane".
+			*/
+			ACT_FAR_CLIP_DISTANCE,
+
+			/// view matrices.
+			/** Provides inverse of concatenated view and projection matrices.
+			Equivalent to RenderMonkey's "ViewProjectionInverse".
+			*/
+			ACT_INVERSE_VIEWPROJ_MATRIX,
+			/** Provides inverse transpose of concatenated view and projection matrices.
+			Equivalent to RenderMonkey's "ViewProjectionInverseTranspose".
+			*/
+			ACT_INVERSETRANSPOSE_VIEWPROJ_MATRIX,
+			/** Provides transpose of concatenated view and projection matrices.
+			Equivalent to RenderMonkey's "ViewProjectionTranspose".
+			*/
+			ACT_TRANSPOSE_VIEWPROJ_MATRIX,
+
+			/** Provides transpose of view matrix.
+			Equivalent to RenderMonkey's "ViewTranspose".
+			*/
+			ACT_TRANSPOSE_VIEW_MATRIX,
+			/** Provides inverse transpose of view matrix.
+			Equivalent to RenderMonkey's "ViewInverseTranspose".
+			*/
+			ACT_INVERSETRANSPOSE_VIEW_MATRIX,
+
+			/** Provides transpose of projection matrix.
+			Equivalent to RenderMonkey's "ProjectionTranspose".
+			*/
+			ACT_TRANSPOSE_PROJECTION_MATRIX,
+			/** Provides inverse of projection matrix.
+			Equivalent to RenderMonkey's "ProjectionInverse".
+			*/
+			ACT_INVERSE_PROJECTION_MATRIX,
+			/** Provides inverse transpose of projection matrix.
+			Equivalent to RenderMonkey's "ProjectionInverseTranspose".
+			*/
+			ACT_INVERSETRANSPOSE_PROJECTION_MATRIX,
+
+			/** Provides transpose of concatenated world, view and projection matrices.
+			Equivalent to RenderMonkey's "WorldViewProjectionTranspose".
+			*/
+			ACT_TRANSPOSE_WORLDVIEWPROJ_MATRIX,
+			/** Provides inverse of concatenated world, view and projection matrices.
+			Equivalent to RenderMonkey's "WorldViewProjectionInverse".
+			*/
+			ACT_INVERSE_WORLDVIEWPROJ_MATRIX,
+			/** Provides inverse transpose of concatenated world, view and projection
+			matrices. Equivalent to RenderMonkey's "WorldViewProjectionInverseTranspose".
+ 			*/
+			ACT_INVERSETRANSPOSE_WORLDVIEWPROJ_MATRIX,
+ 			
+ 			/** Provides transpose of concatenated world and view matrices.
+ 				Equivalent to RenderMonkey's "WorldViewTranspose".
+ 			*/
+ 			ACT_TRANSPOSE_WORLDVIEW_MATRIX,
+ 			/** Provides inverse transpose of concatenate world and view matrices.
+				Equivalent to RenderMonkey's "WorldViewInverseTranspose".
+ 			*/
+ 			ACT_INVERSE_TRANSPOSE_WORLDVIEW_MATRIX,
+ 
+ 			/** Provides transpose of world matrix.
+ 			Equivalent to RenderMonkey's "WorldTranspose".
+ 			*/
+ 			ACT_TRANSPOSE_WORLD_MATRIX,
+ 			/** Provides inverse transpose of world matrix.
+ 			Equivalent to RenderMonkey's "WorldInverseTranspose".
+ 			*/
+ 			ACT_INVERSE_TRANSPOSE_WORLD_MATRIX
+ 
+        };
+        /** Structure recording the use of an automatic parameter. */
+        class _OgrePrivate AutoConstantEntry
+        {
+        public:
+            /// The type of parameter
+            AutoConstantType paramType;
+            /// The target constant index
+            size_t index;
+            /// Additional information to go with the parameter
+			union{
+				size_t data;
+				Real fData;
+			};
+
+            AutoConstantEntry(AutoConstantType theType, size_t theIndex, size_t theData)
+                : paramType(theType), index(theIndex), data(theData) {}
+
+			AutoConstantEntry(AutoConstantType theType, size_t theIndex, Real theData)
+				: paramType(theType), index(theIndex), fData(theData) {}
+
+        };
+        /** Real parameter entry; contains both a group of 4 values and 
+        an indicator to say if it's been set or not. This allows us to 
+        filter out constant entries which have not been set by the renderer
+        and may actually be being used internally by the program. */
+        struct RealConstantEntry
+        {
+            float val[4];
+            bool isSet;
+            RealConstantEntry() : isSet(false) {}
+        };
+        /** Int parameter entry; contains both a group of 4 values and 
+        an indicator to say if it's been set or not. This allows us to 
+        filter out constant entries which have not been set by the renderer
+        and may actually be being used internally by the program. */
+        struct IntConstantEntry
+        {
+            int val[4];
+            bool isSet;
+            IntConstantEntry() : isSet(false) {}
+        };
+    protected:
+        // Constant lists
+        typedef std::vector<RealConstantEntry> RealConstantList;
+        typedef std::vector<IntConstantEntry> IntConstantList;
+        // Auto parameter storage
+        typedef std::vector<AutoConstantEntry> AutoConstantList;
+        /// Packed list of floating-point constants
+        RealConstantList mRealConstants;
+        /// Packed list of integer constants
+        IntConstantList mIntConstants;
+        /// List of automatically updated parameters
+        AutoConstantList mAutoConstants;
+        /// Mapping from parameter names to indexes - high-level programs are expected to populate this
+        typedef std::map<String, size_t> ParamNameMap;
+        ParamNameMap mParamNameMap;
+        /// Do we need to transpose matrices?
+        bool mTransposeMatrices;
+		/// flag to indicate if names not found will be automatically added
+		bool mAutoAddParamName;
+
+    public:
+		GpuProgramParameters();
+		~GpuProgramParameters() {}
+
+		/** Sets a 4-element floating-point parameter to the program.
+		@param index The constant index at which to place the parameter (each constant is
+            a 4D float)
+		@param vec The value to set
+		*/
+		void setConstant(size_t index, const Vector4& vec);
+		/** Sets a single floating-point parameter to the program.
+		@note This is actually equivalent to calling 
+		setConstant(index Vector4(val, 0, 0, 0)) since all constants are 4D.
+		@param index The constant index at which to place the parameter (each constant is
+		a 4D float)
+		@param val The value to set
+		*/
+		void setConstant(size_t index, Real val);
+		/** Sets a 4-element floating-point parameter to the program via Vector3.
+		@param index The constant index at which to place the parameter (each constant is
+            a 4D float).
+            Note that since you're passing a Vector3, the last element of the 4-element
+            value will be set to 1 (a homogenous vector)
+		@param vec The value to set
+		*/
+		void setConstant(size_t index, const Vector3& vec);
+		/** Sets a Matrix4 parameter to the program.
+		@param index The constant index at which to place the parameter (each constant is
+            a 4D float).
+            NB since a Matrix4 is 16 floats long, this parameter will take up 4 indexes.
+		@param m The value to set
+		*/
+		void setConstant(size_t index, const Matrix4& m);
+        /** Sets a list of Matrix4 parameters to the program.
+        @param index The constant index at which to start placing the parameter (each constant is
+        a 4D float).
+        NB since a Matrix4 is 16 floats long, so each entry will take up 4 indexes.
+        @param m Pointer to an array of matrices to set
+        @param numEntries Number of Matrix4 entries
+        */
+        void setConstant(size_t index, const Matrix4* m, size_t numEntries);
+		/** Sets a multiple value constant floating-point parameter to the program.
+		@param index The constant index at which to start placing parameters (each constant is
+            a 4D float)
+		@param val Pointer to the values to write, must contain 4*count floats
+		@param count The number of groups of 4 floats to write
+		*/
+		void setConstant(size_t index, const float *val, size_t count);
+		/** Sets a multiple value constant floating-point parameter to the program.
+		@param index The constant index at which to start placing parameters (each constant is
+            a 4D float)
+		@param val Pointer to the values to write, must contain 4*count floats
+		@param count The number of groups of 4 floats to write
+		*/
+		void setConstant(size_t index, const double *val, size_t count);
+		/** Sets a ColourValue parameter to the program.
+		@param index The constant index at which to place the parameter (each constant is
+            a 4D float)
+		@param colour The value to set
+		*/
+        void setConstant(size_t index, const ColourValue& colour);
+		
+		/** Sets a multiple value constant integer parameter to the program.
+        @remarks
+            Different types of GPU programs support different types of constant parameters.
+            For example, it's relatively common to find that vertex programs only support
+            floating point constants, and that fragment programs only support integer (fixed point)
+            parameters. This can vary depending on the program version supported by the
+            graphics card being used. You should consult the documentation for the type of
+            low level program you are using, or alternatively use the methods
+            provided on RenderSystemCapabilities to determine the options.
+		@param index The constant index at which to place the parameter (each constant is
+            a 4D integer)
+		@param val Pointer to the values to write, must contain 4*count ints
+		@param count The number of groups of 4 ints to write
+		*/
+		void setConstant(size_t index, const int *val, size_t count);
+
+        /** Deletes the contents of the Real constants registers. */
+        void resetRealConstants(void) { mRealConstants.clear(); }
+        /** Deletes the contents of the int constants registers. */
+        void resetIntConstants(void) { mIntConstants.clear(); }
+
+        typedef ConstVectorIterator<RealConstantList> RealConstantIterator;
+        typedef ConstVectorIterator<IntConstantList> IntConstantIterator;
+        /// Gets an iterator over the Real constant parameters
+        RealConstantIterator getRealConstantIterator(void) const;
+        /// Gets an iterator over the integer constant parameters
+        IntConstantIterator getIntConstantIterator(void) const;
+
+		/** Gets a specific Real Constant entry if index is in valid range
+			otherwise returns a NULL
+		@parem index which entry is to be retrieved
+		*/
+		RealConstantEntry* getRealConstantEntry(const size_t index);
+		/** Gets a specific Int Constant entry if index is in valid range
+			otherwise returns a NULL
+		@parem index which entry is to be retrieved
+		*/
+		IntConstantEntry* getIntConstantEntry(const size_t index);
+        
+		/** Gets a Named Real Constant entry if the name is found otherwise returns a NULL
+		@parem name The name of the entry  to be retrieved
+		*/
+		RealConstantEntry* getNamedRealConstantEntry(const String& name);
+		/** Gets a named Int Constant entry if name is found otherwise returns a NULL
+		@parem name The name of the entry to be retrieved
+		*/
+		IntConstantEntry* getNamedIntConstantEntry(const String& name);
+        /// Gets the number of Real constants that have been set
+        size_t getRealConstantCount(void) const { return mRealConstants.size(); }
+        /// Gets the number of int constants that have been set
+        size_t getIntConstantCount(void) const { return mIntConstants.size(); }
+        /// Returns true if there are any Real constants contained here
+        bool hasRealConstantParams(void) const { return !(mRealConstants.empty()); }
+        /// Returns true if there are any int constants contained here
+        bool hasIntConstantParams(void) const { return !(mIntConstants.empty()); }
+
+        /** Sets up a constant which will automatically be updated by the system.
+        @remarks
+            Vertex and fragment programs often need parameters which are to do with the
+            current render state, or particular values which may very well change over time,
+            and often between objects which are being rendered. This feature allows you 
+            to set up a certain number of predefined parameter mappings that are kept up to 
+            date for you.
+        @param index The location in the constant list to place this updated constant every time
+            it is changed. Note that because of the nature of the types, we know how big the 
+            parameter details will be so you don't need to set that like you do for manual constants.
+        @param acType The type of automatic constant to set
+        @param extraInfo If the constant type needs more information (like a light index) put it here.
+        */
+        void setAutoConstant(size_t index, AutoConstantType acType, size_t extraInfo = 0);
+		void setAutoConstantReal(size_t index, AutoConstantType acType, Real rData);
+        /** Sets a named parameter up to track a derivation of the current time.
+        @param index The index of the parameter
+        @param factor The amount by which to scale the time value
+        */  
+        void setConstantFromTime(size_t index, Real factor);
+
+        /** Clears all the existing automatic constants. */
+        void clearAutoConstants(void);
+        typedef ConstVectorIterator<AutoConstantList> AutoConstantIterator;
+        /** Gets an iterator over the automatic constant bindings currently in place. */
+        AutoConstantIterator getAutoConstantIterator(void) const;
+        /** Returns true if this instance has any automatic constants. */
+        bool hasAutoConstants(void) const { return !(mAutoConstants.empty()); }
+        /** Updates the automatic parameters (except lights) based on the details provided. */
+        void _updateAutoParamsNoLights(const AutoParamDataSource& source);
+        /** Updates the automatic parameters for lights based on the details provided. */
+        void _updateAutoParamsLightsOnly(const AutoParamDataSource& source);
+
+		/** Sets the auto add parameter name flag
+		@remarks
+			Not all GPU programs make named parameters available after the high level
+			source is compiled.  GLSL is one such case.  If parameter names are not loaded
+			prior to the material serializer reading in parameter names in a script then
+			an exception is generated.  Set AutoAddParamName to true to have names not found
+			in the map added to the map.
+		@note
+			The index of the parameter name will be set to the end of the Real Constant List.
+		@param state true to enable automatic name
+		*/
+		void setAutoAddParamName(bool state) { mAutoAddParamName = state; }
+
+		/** Sets a single value constant floating-point parameter to the program.
+        @remarks
+            Different types of GPU programs support different types of constant parameters.
+            For example, it's relatively common to find that vertex programs only support
+            floating point constants, and that fragment programs only support integer (fixed point)
+            parameters. This can vary depending on the program version supported by the
+            graphics card being used. You should consult the documentation for the type of
+            low level program you are using, or alternatively use the methods
+            provided on RenderSystemCapabilities to determine the options.
+        @par
+            Another possible limitation is that some systems only allow constants to be set
+            on certain boundaries, e.g. in sets of 4 values for example. Again, see
+            RenderSystemCapabilities for full details.
+        @note
+            This named option will only work if you are using a parameters object created
+            from a high-level program (HighLevelGpuProgram).
+		@param name The name of the parameter
+		@param val The value to set
+		*/
+		void setNamedConstant(const String& name, Real val);
+		/** Sets a single value constant integer parameter to the program.
+        @remarks
+            Different types of GPU programs support different types of constant parameters.
+            For example, it's relatively common to find that vertex programs only support
+            floating point constants, and that fragment programs only support integer (fixed point)
+            parameters. This can vary depending on the program version supported by the
+            graphics card being used. You should consult the documentation for the type of
+            low level program you are using, or alternatively use the methods
+            provided on RenderSystemCapabilities to determine the options.
+        @par
+            Another possible limitation is that some systems only allow constants to be set
+            on certain boundaries, e.g. in sets of 4 values for example. Again, see
+            RenderSystemCapabilities for full details.
+        @note
+            This named option will only work if you are using a parameters object created
+            from a high-level program (HighLevelGpuProgram).
+        @param name The name of the parameter
+		@param val The value to set
+		*/
+		void setNamedConstant(const String& name, int val);
+		/** Sets a Vector4 parameter to the program.
+        @param name The name of the parameter
+		@param vec The value to set
+		*/
+		void setNamedConstant(const String& name, const Vector4& vec);
+		/** Sets a Vector3 parameter to the program.
+        @note
+            This named option will only work if you are using a parameters object created
+            from a high-level program (HighLevelGpuProgram).
+		@param index The index at which to place the parameter
+			NB this index refers to the number of floats, so a Vector3 is 3. Note that many 
+            rendersystems & programs assume that every floating point parameter is passed in
+            as a vector of 4 items, so you are strongly advised to check with 
+            RenderSystemCapabilities before using this version - if in doubt use Vector4
+            or ColourValue instead (both are 4D).
+		@param vec The value to set
+		*/
+		void setNamedConstant(const String& name, const Vector3& vec);
+		/** Sets a Matrix4 parameter to the program.
+        @param name The name of the parameter
+		@param m The value to set
+		*/
+		void setNamedConstant(const String& name, const Matrix4& m);
+        /** Sets a list of Matrix4 parameters to the program.
+        @param name The name of the parameter; this must be the first index of an array,
+            for examples 'matrices[0]'
+        NB since a Matrix4 is 16 floats long, so each entry will take up 4 indexes.
+        @param m Pointer to an array of matrices to set
+        @param numEntries Number of Matrix4 entries
+        */
+        void setNamedConstant(const String& name, const Matrix4* m, size_t numEntries);
+		/** Sets a multiple value constant floating-point parameter to the program.
+        @remarks
+            Different types of GPU programs support different types of constant parameters.
+            For example, it's relatively common to find that vertex programs only support
+            floating point constants, and that fragment programs only support integer (fixed point)
+            parameters. This can vary depending on the program version supported by the
+            graphics card being used. You should consult the documentation for the type of
+            low level program you are using, or alternatively use the methods
+            provided on RenderSystemCapabilities to determine the options.
+        @par
+            Another possible limitation is that some systems only allow constants to be set
+            on certain boundaries, e.g. in sets of 4 values for example. Again, see
+            RenderSystemCapabilities for full details.
+        @note
+            This named option will only work if you are using a parameters object created
+            from a high-level program (HighLevelGpuProgram).
+        @param name The name of the parameter
+		@param val Pointer to the values to write
+		@param count The number of floats to write
+		*/
+		void setNamedConstant(const String& name, const float *val, size_t count);
+		/** Sets a multiple value constant floating-point parameter to the program.
+        @remarks
+            Different types of GPU programs support different types of constant parameters.
+            For example, it's relatively common to find that vertex programs only support
+            floating point constants, and that fragment programs only support integer (fixed point)
+            parameters. This can vary depending on the program version supported by the
+            graphics card being used. You should consult the documentation for the type of
+            low level program you are using, or alternatively use the methods
+            provided on RenderSystemCapabilities to determine the options.
+        @par
+            Another possible limitation is that some systems only allow constants to be set
+            on certain boundaries, e.g. in sets of 4 values for example. Again, see
+            RenderSystemCapabilities for full details.
+        @note
+            This named option will only work if you are using a parameters object created
+            from a high-level program (HighLevelGpuProgram).
+        @param name The name of the parameter
+		@param val Pointer to the values to write
+		@param count The number of floats to write
+		*/
+		void setNamedConstant(const String& name, const double *val, size_t count);
+		/** Sets a ColourValue parameter to the program.
+        @param name The name of the parameter
+		@param colour The value to set
+		*/
+        void setNamedConstant(const String& name, const ColourValue& colour);
+		
+		/** Sets a multiple value constant integer parameter to the program.
+        @remarks
+            Different types of GPU programs support different types of constant parameters.
+            For example, it's relatively common to find that vertex programs only support
+            floating point constants, and that fragment programs only support integer (fixed point)
+            parameters. This can vary depending on the program version supported by the
+            graphics card being used. You should consult the documentation for the type of
+            low level program you are using, or alternatively use the methods
+            provided on RenderSystemCapabilities to determine the options.
+        @par
+            Another possible limitation is that some systems only allow constants to be set
+            on certain boundaries, e.g. in sets of 4 values for example. Again, see
+            RenderSystemCapabilities for full details.
+        @note
+            This named option will only work if you are using a parameters object created
+            from a high-level program (HighLevelGpuProgram).
+        @param name The name of the parameter
+		@param val Pointer to the values to write
+		@param count The number of integers to write
+		*/
+		void setNamedConstant(const String& name, const int *val, size_t count);
+
+        /** Sets up a constant which will automatically be updated by the system.
+        @remarks
+            Vertex and fragment programs often need parameters which are to do with the
+            current render state, or particular values which may very well change over time,
+            and often between objects which are being rendered. This feature allows you 
+            to set up a certain number of predefined parameter mappings that are kept up to 
+            date for you.
+        @note
+            This named option will only work if you are using a parameters object created
+            from a high-level program (HighLevelGpuProgram).
+        @param name The name of the parameter
+        @param acType The type of automatic constant to set
+        @param extraInfo If the constant type needs more information (like a light index) put it here.
+        */
+        void setNamedAutoConstant(const String& name, AutoConstantType acType, size_t extraInfo = 0);
+
+        /** Sets a named parameter up to track a derivation of the current time.
+        @note
+            This named option will only work if you are using a parameters object created
+            from a high-level program (HighLevelGpuProgram).
+        @param name The name of the parameter
+        @param factor The amount by which to scale the time value
+        */  
+        void setNamedConstantFromTime(const String& name, Real factor);
+        /// Internal method for associating a parameter name with an index
+        void _mapParameterNameToIndex(const String& name, size_t index);
+
+        /** Gets the constant index associated with a named parameter. */
+        size_t getParamIndex(const String& name);
+
+
+        /** Sets whether or not we need to transpose the matrices passed in from the rest of OGRE.
+        @remarks
+            D3D uses transposed matrices compared to GL and OGRE; this is not important when you
+            use programs which are written to process row-major matrices, such as those generated
+            by Cg, but if you use a program written to D3D's matrix layout you will need to enable
+            this flag.
+        */
+        void setTransposeMatrices(bool val) { mTransposeMatrices = val; } 
+        /// Gets whether or not matrices are to be transposed when set
+        bool getTransposeMatrices(void) const { return mTransposeMatrices; } 
+
+		/** Copies the values of all constants (including auto constants) from another
+			GpuProgramParameters object.
+		*/
+		void copyConstantsFrom(const GpuProgramParameters& source);
+		
+    };
+
+    /// Shared pointer used to hold references to GpuProgramParameters instances
+    typedef SharedPtr<GpuProgramParameters> GpuProgramParametersSharedPtr;
+
+    // Forward declaration 
+    class GpuProgramPtr;
+
+	/** Defines a program which runs on the GPU such as a vertex or fragment program. 
+	@remarks
+		This class defines the low-level program in assembler code, the sort used to
+		directly assemble into machine instructions for the GPU to execute. By nature,
+		this means that the assembler source is rendersystem specific, which is why this
+		is an abstract class - real instances are created through the RenderSystem. 
+		If you wish to use higher level shading languages like HLSL and Cg, you need to 
+		use the HighLevelGpuProgram class instead.
+	*/
+	class _OgreExport GpuProgram : public Resource
+	{
+	protected:
+		/// Command object - see ParamCommand 
+		class _OgreExport CmdType : public ParamCommand
+		{
+		public:
+			String doGet(const void* target) const;
+			void doSet(void* target, const String& val);
+		};
+		class _OgreExport CmdSyntax : public ParamCommand
+		{
+		public:
+			String doGet(const void* target) const;
+			void doSet(void* target, const String& val);
+		};
+		class _OgreExport CmdSkeletal : public ParamCommand
+		{
+		public:
+			String doGet(const void* target) const;
+			void doSet(void* target, const String& val);
+		};
+		// Command object for setting / getting parameters
+		static CmdType msTypeCmd;
+		static CmdSyntax msSyntaxCmd;
+		static CmdSkeletal msSkeletalCmd;
+	
+		/// The type of the program
+		GpuProgramType mType;
+		/// The name of the file to load source from (may be blank)
+		String mFilename;
+        /// The assembler source of the program (may be blank until file loaded)
+        String mSource;
+        /// Whether we need to load source from file or not
+        bool mLoadFromFile;
+        /// Syntax code eg arbvp1, vs_2_0 etc
+        String mSyntaxCode;
+        /// Does this (vertex) program include skeletal animation?
+        bool mSkeletalAnimation;
+		/// The default parameters for use with this object
+		GpuProgramParametersSharedPtr mDefaultParams;
+		/// Does this program want light states passed through fixed pipeline
+		bool mPassSurfaceAndLightStates;
+
+		/** Internal method for setting up the basic parameter definitions for a subclass. 
+		@remarks
+		Because StringInterface holds a dictionary of parameters per class, subclasses need to
+		call this to ask the base class to add it's parameters to their dictionary as well.
+		Can't do this in the constructor because that runs in a non-virtual context.
+		@par
+		The subclass must have called it's own createParamDictionary before calling this method.
+		*/
+		void setupBaseParamDictionary(void);
+
+		/// @copydoc Resource::calculateSize
+		size_t calculateSize(void) const { return 0; } // TODO 
+
+		/// @copydoc Resource::loadImpl
+		void loadImpl(void);
+	public:
+
+		GpuProgram(ResourceManager* creator, const String& name, ResourceHandle handle,
+			const String& group, bool isManual = false, ManualResourceLoader* loader = 0);
+
+		virtual ~GpuProgram() {}
+
+        /** Sets the filename of the source assembly for this program.
+        @remarks
+            Setting this will have no effect until you (re)load the program.
+        */
+        virtual void setSourceFile(const String& filename);
+
+		/** Sets the source assembly for this program from an in-memory string.
+        @remarks
+            Setting this will have no effect until you (re)load the program.
+        */
+        virtual void setSource(const String& source);
+
+        /** Gets the syntax code for this program e.g. arbvp1, fp20, vs_1_1 etc */
+        virtual const String& getSyntaxCode(void) const { return mSyntaxCode; }
+
+		/** Sets the syntax code for this program e.g. arbvp1, fp20, vs_1_1 etc */
+		virtual void setSyntaxCode(const String& syntax);
+
+		/** Gets the name of the file used as source for this program. */
+		virtual const String& getSourceFile(void) const { return mFilename; }
+        /** Gets the assembler source for this program. */
+        virtual const String& getSource(void) const { return mSource; }
+		/// Set the program type (only valid before load)
+		virtual void setType(GpuProgramType t);
+        /// Get the program type
+        virtual GpuProgramType getType(void) const { return mType; }
+
+        /** Returns the GpuProgram which should be bound to the pipeline.
+        @remarks
+            This method is simply to allow some subclasses of GpuProgram to delegate
+            the program which is bound to the pipeline to a delegate, if required. */
+        virtual GpuProgram* _getBindingDelegate(void) { return this; }
+
+        /** Returns whether this program can be supported on the current renderer and hardware. */
+        virtual bool isSupported(void) const;
+
+        /** Creates a new parameters object compatible with this program definition. 
+        @remarks
+            It is recommended that you use this method of creating parameters objects
+            rather than going direct to GpuProgramManager, because this method will
+            populate any implementation-specific extras (like named parameters) where
+            they are appropriate.
+        */
+        virtual GpuProgramParametersSharedPtr createParameters(void);
+
+        /** Sets whether a vertex program includes the required instructions
+        to perform skeletal animation. 
+        @remarks
+        If this is set to true, OGRE will not blend the geometry according to 
+        skeletal animation, it will expect the vertex program to do it.
+        */
+        virtual void setSkeletalAnimationIncluded(bool included) 
+        { mSkeletalAnimation = included; }
+
+        /** Returns whether a vertex program includes the required instructions
+            to perform skeletal animation. 
+        @remarks
+            If this returns true, OGRE will not blend the geometry according to 
+            skeletal animation, it will expect the vertex program to do it.
+        */
+        virtual bool isSkeletalAnimationIncluded(void) const { return mSkeletalAnimation; }
+
+		/** Get a reference to the default parameters which are to be used for all
+			uses of this program.
+		@remarks
+			A program can be set up with a list of default parameters, which can save time when 
+			using a program many times in a material with roughly the same settings. By 
+			retrieving the default parameters and populating it with the most used options, 
+			any new parameter objects created from this program afterwards will automatically include
+			the default parameters; thus users of the program need only change the parameters
+			which are unique to their own usage of the program.
+		*/
+		virtual GpuProgramParametersSharedPtr getDefaultParameters(void);
+
+		/** Sets whether a vertex program requires light and material states to be passed
+		to through fixed pipeline low level API rendering calls.
+		@remarks
+		If this is set to true, OGRE will pass all active light states to the fixed function
+		pipeline.  This is useful for high level shaders like GLSL that can read the OpenGL
+		light and material states.  This way the user does not have to use autoparameters to 
+		pass light position, color etc.
+		*/
+		virtual void setSurfaceAndPassLightStates(bool state)
+			{ mPassSurfaceAndLightStates = state; }
+
+		/** Returns whether a vertex program wants light and material states to be passed
+		through fixed pipeline low level API rendering calls
+		*/
+		virtual bool getPassSurfaceAndLightStates(void) const { return mPassSurfaceAndLightStates; }
+
+    protected:
+        /// Virtual method which must be implemented by subclasses, load from mSource
+        virtual void loadFromSource(void) = 0;
+
+	};
+
+
+	/** Specialisation of SharedPtr to allow SharedPtr to be assigned to GpuProgramPtr 
+	@note Has to be a subclass since we need operator=.
+	We could templatise this instead of repeating per Resource subclass, 
+	except to do so requires a form VC6 does not support i.e.
+	ResourceSubclassPtr<T> : public SharedPtr<T>
+	*/
+	class _OgreExport GpuProgramPtr : public SharedPtr<GpuProgram> 
+	{
+	public:
+		GpuProgramPtr() : SharedPtr<GpuProgram>() {}
+		explicit GpuProgramPtr(GpuProgram* rep) : SharedPtr<GpuProgram>(rep) {}
+		GpuProgramPtr(const GpuProgramPtr& r) : SharedPtr<GpuProgram>(r) {} 
+		GpuProgramPtr(const ResourcePtr& r) : SharedPtr<GpuProgram>()
+		{
+			// lock & copy other mutex pointer
+			OGRE_LOCK_MUTEX(*r.OGRE_AUTO_MUTEX_NAME)
+			OGRE_COPY_AUTO_SHARED_MUTEX(r.OGRE_AUTO_MUTEX_NAME)
+			pRep = static_cast<GpuProgram*>(r.getPointer());
+			pUseCount = r.useCountPointer();
+			if (pUseCount)
+			{
+				++(*pUseCount);
+			}
+		}
+
+		/// Operator used to convert a ResourcePtr to a GpuProgramPtr
+		GpuProgramPtr& operator=(const ResourcePtr& r)
+		{
+			if (pRep == static_cast<GpuProgram*>(r.getPointer()))
+				return *this;
+			release();
+			// lock & copy other mutex pointer
+			OGRE_LOCK_MUTEX(*r.OGRE_AUTO_MUTEX_NAME)
+			OGRE_COPY_AUTO_SHARED_MUTEX(r.OGRE_AUTO_MUTEX_NAME)
+			pRep = static_cast<GpuProgram*>(r.getPointer());
+			pUseCount = r.useCountPointer();
+			if (pUseCount)
+			{
+				++(*pUseCount);
+			}
+			return *this;
+		}
+        /// Operator used to convert a HighLevelGpuProgramPtr to a GpuProgramPtr
+        GpuProgramPtr& operator=(const HighLevelGpuProgramPtr& r);
+	};
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRoot.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRoot.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRoot.h	(revision 1092)
@@ -0,0 +1,665 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __ROOT__
+#define __ROOT__
+
+// Precompiler options
+#include "OgrePrerequisites.h"
+
+#include "OgreSingleton.h"
+#include "OgreString.h"
+#include "OgreSceneManagerEnumerator.h"
+#include "OgreResourceGroupManager.h"
+
+#include <exception>
+
+#if OGRE_COMPILER == OGRE_COMPILER_MSVC || OGRE_COMPILER == OGRE_COMPILER_BORL
+#   define SET_TERM_HANDLER { set_terminate( &Ogre::Root::termHandler ); }
+#else
+#   define SET_TERM_HANDLER { std::set_terminate( &Ogre::Root::termHandler ); }
+#endif
+
+namespace Ogre
+{
+    typedef std::vector<RenderSystem*> RenderSystemList;
+
+    /** The root class of the Ogre system.
+        @remarks
+            The Ogre::Root class represents a starting point for the client
+            application. From here, the application can gain access to the
+            fundamentals of the system, namely the rendering systems
+            available, management of saved configurations, logging, and
+            access to other classes in the system. Acts as a hub from which
+            all other objects may be reached. An instance of Root must be
+            created before any other Ogre operations are called. Once an
+            instance has been created, the same instance is accessible
+            throughout the life of that object by using Root::getSingleton
+            (as a reference) or Root::getSingletonPtr (as a pointer).
+    */
+    class _OgreExport Root : public Singleton<Root>
+    {
+        // To allow update of active renderer if
+        // RenderSystem::initialise is used directly
+        friend class RenderSystem;
+    private:
+        RenderSystemList mRenderers;
+        RenderSystem* mActiveRenderer;
+        String mVersion;
+		String mConfigFileName;
+	    bool mQueuedEnd;
+        // In case multiple render windows are created, only once are the resources loaded.
+        bool mFirstTimePostWindowInit;
+
+        // Singletons
+        LogManager* mLogManager;
+        ControllerManager* mControllerManager;
+        SceneManagerEnumerator* mSceneManagerEnum;
+        SceneManager* mCurrentSceneManager;
+        DynLibManager* mDynLibManager;
+        PlatformManager* mPlatformManager;
+        ArchiveManager* mArchiveManager;
+        MaterialManager* mMaterialManager;
+        MeshManager* mMeshManager;
+        ParticleSystemManager* mParticleManager;
+        SkeletonManager* mSkeletonManager;
+        OverlayElementFactory* mPanelFactory;
+        OverlayElementFactory* mBorderPanelFactory;
+        OverlayElementFactory* mTextAreaFactory;
+        OverlayManager* mOverlayManager;
+        FontManager* mFontManager;
+        ArchiveFactory *mZipArchiveFactory;
+        ArchiveFactory *mFileSystemArchiveFactory;
+		ResourceGroupManager* mResourceGroupManager;
+		ResourceBackgroundQueue* mResourceBackgroundQueue;
+
+        Timer* mTimer;
+        RenderWindow* mAutoWindow;
+        Profiler* mProfiler;
+        HighLevelGpuProgramManager* mHighLevelGpuProgramManager;
+		ExternalTextureSourceManager* mExternalTextureSourceManager;
+        unsigned long mCurrentFrame;
+
+        std::vector<DynLib*> mPluginLibs;
+        /** Method reads a plugins configuration file and instantiates all
+            plugins.
+            @param
+                pluginsfile The file that contains plugins information.
+                Defaults to "plugins.cfg".
+        */
+        void loadPlugins( const String& pluginsfile = "plugins.cfg" );
+		/** Shuts down all loaded plugins - allows things to be tidied up whilst
+			all plugins are still loaded.
+		*/
+		void shutdownPlugins();
+
+		/** Unloads all loaded plugins.
+        */
+        void unloadPlugins();
+
+        // Internal method for one-time tasks after first window creation
+        void oneTimePostWindowInit(void);
+
+        /** Set of registered frame listeners */
+        std::set<FrameListener*> mFrameListeners;
+
+        /** Set of frame listeners marked for removal*/
+        std::set<FrameListener*> mRemovedFrameListeners;
+
+        /** Indicates the type of event to be considered by calculateEventTime(). */
+        enum FrameEventTimeType {
+            FETT_ANY, FETT_STARTED, FETT_ENDED
+        };
+
+        /// Contains the times of recently fired events
+        std::deque<unsigned long> mEventTimes[3];
+
+        /** Internal method for calculating the average time between recently fired events.
+        @param now The current time in ms.
+        @param type The type of event to be considered.
+        */
+        Real calculateEventTime(unsigned long now, FrameEventTimeType type);
+    public:
+
+        static void termHandler();
+
+        /** Constructor
+            @param
+                pluginFileName The file that contains plugins information.
+                Defaults to "plugins.cfg".
+		*/
+        Root(const String& pluginFileName = "plugins.cfg", const String& configFileName = "ogre.cfg", const String& logFileName = "Ogre.log");
+        ~Root();
+
+        /** Saves the details of the current configuration
+            @remarks
+                Stores details of the current configuration so it may be
+                restored later on.
+        */
+        void saveConfig(void);
+
+        /** Checks for saved video/sound/etc settings
+            @remarks
+                This method checks to see if there is a valid saved configuration
+                from a previous run. If there is, the state of the system will
+                be restored to that configuration.
+
+            @returns
+                If a valid configuration was found, <b>true</b> is returned.
+            @par
+                If there is no saved configuration, or if the system failed
+                with the last config settings, <b>false</b> is returned.
+        */
+        bool restoreConfig(void);
+
+        /** Displays a dialog asking the user to choose system settings.
+            @remarks
+                This method displays the default dialog allowing the user to
+                choose the renderering system, video mode etc. If there is are
+                any settings saved already, they will be restored automatically
+                before displaying the dialogue. When the user accepts a group of
+                settings, this will automatically call Root::setRenderSystem,
+                RenderSystem::setConfigOption and Root::saveConfig with the
+                user's choices. This is the easiest way to get the system
+                configured.
+            @returns
+                If the user clicked 'Ok', <b>true</b> is returned.
+            @par
+                If they clicked 'Cancel' (in which case the app should
+                strongly consider terminating), <b>false</b> is returned.
+         */
+        bool showConfigDialog(void);
+
+        /** Adds a new rendering subsystem to the list of available renderers.
+            @remarks
+                Intended for use by advanced users and plugin writers only!
+                Calling this method with a pointer to a valid RenderSystem
+                (sublcass) adds a rendering API implementation to the list of
+                available ones. Typical examples would be an OpenGL
+                implementation and a Direct3D implementation.
+            @note
+                <br>This should usually be called from the dllStartPlugin()
+                function of an extension plug-in.
+        */
+        void addRenderSystem(RenderSystem* newRend);
+
+        /** Sets the passed in SceneManager to be the one responsible for
+            the indicated type of scene.
+            @remarks
+                This method is provided for application writers and plugin
+                authors to use to attach their SceneManager subclasses to the
+                engine. See the SceneManager class for more information.
+        */
+        void setSceneManager(SceneType sType, SceneManager* sm);
+
+        /** Retrieve a list of the available render systems.
+            @remarks
+                Retrieves a pointer to the list of available renderers as a
+                list of RenderSystem subclasses. Can be used to build a
+                custom settings dialog.
+        */
+        RenderSystemList* getAvailableRenderers(void);
+
+        /** Sets the rendering subsystem to be used.
+            @remarks
+                This method indicates to OGRE which rendering system is to be
+                used (e.g. Direct3D, OpenGL etc). This is called
+                automatically by the default config dialog, and when settings
+                are restored from a previous configuraion. If used manually
+                it could be used to set the renderer from a custom settings
+                dialog. Once this has been done, the renderer can be
+                initialised using Root::initialise.
+            @par
+                This method is also called by render systems if they are
+                initialised directly.
+            @param
+                system Pointer to the render system to use.
+            @see
+                RenderSystem
+        */
+        void setRenderSystem(RenderSystem* system);
+
+        /** Retrieve a pointer to the currently selected render system.
+        */
+        RenderSystem* getRenderSystem(void);
+
+        /** Initialises the renderer.
+            @remarks
+                This method can only be called after a renderer has been
+                selected with Root::setRenderSystem, and it will initialise
+                the selected rendering system ready for use.
+            @param
+                autoCreateWindow If true, a rendering window will
+                automatically be created (saving a call to
+                RenderSystem::createRenderWindow). The window will be
+                created based on the options currently set on the render
+                system.
+            @returns
+                A pointer to the automatically created window, if
+                requested, otherwise <b>NULL</b>.
+        */
+	    RenderWindow* initialise(bool autoCreateWindow, const String& windowTitle = "OGRE Render Window");
+
+        /** Gets a reference to a SceneManager object.
+            @remarks
+                The SceneManager class (and any subclasses) is a key class
+                which controls the contents of the scene, and is responsible
+                for issuing rendering commands to the RenderSystem to draw
+                it. The SceneManager is the class which an application using
+                Ogre will interact with most, since controlling the contents
+                of the scene is the most frequent action of an application.
+            @par
+                As described in the SceneManager documentation, different
+                subclasses can be specialised for rendering particular types
+                of scene e.g. landscapes or indoor enviroments.
+            @note
+                <br>This function delegates it's implementation to the
+                SceneManagerEnumerator class. This class can be customised to
+                include new SceneType entries and to create new subclasses of
+                SceneManager if they are introduced. This is done because the
+                customisation of the Root class is strongly discouraged and
+                in the future it may be locked down.
+            @param
+                sceneType A value from the SceneType enumeration. The method
+                will return a SceneManager which is most appropriate for this
+                type of scene.
+            @see
+                SceneManager, SceneManagerEnumerator
+        */
+        SceneManager* getSceneManager(SceneType sceneType);
+
+        /** Retrieves a reference to the current TextureManager.
+            @remarks
+                This performs the same function as
+                TextureManager::getSingleton, but is provided for convenience
+                particularly to scripting engines.
+            @par
+                Note that a TextureManager will NOT be available until the
+                Ogre system has been initialised by selecting a RenderSystem,
+                calling Root::initialise and a window having been created
+                (this may have been done by initialise if required). This is
+                because the exact runtime subclass which will be implementing
+                the calls will differ depending on the rendering engine
+                selected, and these typically require a window upon which to
+                base texture format decisions.
+        */
+        TextureManager* getTextureManager(void);
+
+        /** Retrieves a reference to the current MeshManager.
+            @remarks
+                This performs the same function as MeshManager::getSingleton
+                and is provided for convenience to scripting engines.
+        */
+        MeshManager* getMeshManager(void);
+
+        /** Utility function for getting a better description of an error
+            code.
+        */
+        String getErrorDescription(long errorNumber);
+
+        /** Registers a FrameListener which will be called back every frame.
+            @remarks
+                A FrameListener is a class which implements methods which
+                will be called every frame.
+            @par
+                See the FrameListener class for more details on the specifics
+                It is imperitive that the instance passed to this method is
+                not destroyed before either the rendering loop ends, or the
+                class is removed from the listening list using
+                removeFrameListener.
+            @note
+                <br>This method can only be called after Root::initialise has
+                been called.
+            @see
+                FrameListener, Root::removeFrameListener
+        */
+        void addFrameListener(FrameListener* newListener);
+
+        /** Removes a FrameListener from the list of listening classes.
+            @see
+                FrameListener, Root::addFrameListener
+        */
+        void removeFrameListener(FrameListener* oldListener);
+
+        /** Queues the end of rendering.
+            @remarks
+                This method will do nothing unless startRendering() has
+                been called, in which case before the next frame is rendered
+                the rendering loop will bail out.
+            @see
+                Root, Root::startRendering
+        */
+        void queueEndRendering(void);
+
+        /** Starts / restarts the automatic rendering cycle.
+            @remarks
+                This method begins the automatic rendering of the scene. It
+                will <b>NOT</b> return until the rendering cycle is halted.
+            @par
+                During rendering, any FrameListener classes registered using
+                addFrameListener will be called back for each frame that is
+                to be rendered, These classes can tell OGRE to halt the
+                rendering if required, which will cause this method to
+                return.
+            @note
+                <br>Users of the OGRE library do not have to use this
+                automatic rendering loop. It is there as a convenience and is
+                most useful for high frame rate applications e.g. games. For
+                applications that don't need to constantly refresh the
+                rendering targets (e.g. an editor utility), it is better to
+                manually refresh each render target only when required by
+                calling RenderTarget::update.
+            @note
+                This frees up the CPU to do other things in between
+                refreshes, since in this case frame rate is less important.
+            @note
+                This method can only be called after Root::initialise has
+                been called.
+        */
+        void startRendering(void);
+
+        /** Render one frame. 
+        @remarks
+            Updates all the render targets automatically and then returns,
+            raising frame events before and after.
+        */
+        bool renderOneFrame(void);
+        /** Shuts down the system manually.
+            @remarks
+                This is normally done by Ogre automatically so don't think
+                you have to call this yourself. However this is here for
+                convenience, especially for dealing with unexpected errors or
+                for systems which need to shut down Ogre on demand.
+        */
+        void shutdown(void);
+
+        /** Adds a location to the list of searchable locations for a
+            Resource type.
+            @remarks
+                Resource files (textures, models etc) need to be loaded from
+                specific locations. By calling this method, you add another 
+				search location to the list. Locations added first are preferred
+				over locations added later.
+            @par
+                Locations can be folders, compressed archives, even perhaps
+                remote locations. Facilities for loading from different
+                locations are provided by plugins which provide
+                implementations of the Archive class.
+                All the application user has to do is specify a 'loctype'
+                string in order to indicate the type of location, which
+                should map onto one of the provided plugins. Ogre comes
+                configured with the 'FileSystem' (folders) and 'Zip' (archive
+                compressed with the pkzip / WinZip etc utilities) types.
+            @par
+				You can also supply the name of a resource group which should
+				have this location applied to it. The 
+				ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME group is the
+				default, and one resource group which will always exist. You
+				should consider defining resource groups for your more specific
+				resources (e.g. per level) so that you can control loading /
+				unloading better.
+            @param
+                name The name of the location, e.g. './data' or
+                '/compressed/gamedata.zip'
+            @param
+                locType A string identifying the location type, e.g.
+                'FileSystem' (for folders), 'Zip' etc. Must map to a
+                registered plugin which deals with this type (FileSystem and
+                Zip should always be available)
+            @param
+                groupName Type of name of the resource group which this location
+				should apply to; defaults to the General group which applies to
+				all non-specific resources.
+			@param
+				recursive If the resource location has a concept of recursive
+				directory traversal, enabling this option will mean you can load
+				resources in subdirectories using only their unqualified name.
+				The default is to disable this so that resources in subdirectories
+				with the same name are still unique.
+            @see
+                Archive
+        */
+        void addResourceLocation(const String& name, const String& locType, 
+			const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, 
+			bool recursive = false);
+
+		/** Removes a resource location from the list.
+		@see addResourceLocation
+		@param name The name of the resource location as specified in addResourceLocation
+		@param groupName The name of the resource group to which this location 
+			was assigned.
+		*/
+		void removeResourceLocation(const String& name, 
+			const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
+
+        /** Generates a packed data version of the passed in ColourValue suitable for
+            use with the current RenderSystem.
+        @remarks
+            Since different render systems have different colour data formats (eg
+            RGBA for GL, ARGB for D3D) this method allows you to use 1 method for all.
+        @param colour The colour to convert
+        @param pDest Pointer to location to put the result.
+        */
+        void convertColourValue(const ColourValue& colour, uint32* pDest);
+
+        /** Retrieves a pointer to the window that was created automatically
+            @remarks
+                When Root is initialised an optional window is created. This
+                method retreives a pointer to that window.
+            @note
+                returns a null pointer when Root has not been initialised with
+                the option of creating a window.
+        */
+        RenderWindow* getAutoCreatedWindow(void);
+
+        /** @copydoc RenderSystem::createRenderWindow
+        */
+		RenderWindow* createRenderWindow(const String &name, unsigned int width, unsigned int height, 
+			bool fullScreen, const NameValuePairList *miscParams = 0) ;
+
+        /** Destroys a rendering window.
+        */
+        void detachRenderTarget( RenderTarget* pWin );
+
+        /** Destroys a named rendering window.
+        */
+        void detachRenderTarget( const String & name );
+
+        /** Retrieves a pointer to the a named render window.
+        */
+        RenderTarget * getRenderTarget(const String &name);
+
+        /** Sets whether or not the debug overlay is shown.
+        @remarks
+            The debug overlay displays frame rate stats and various other debug
+            information. You can enable it or disable it using this method.
+            Alternatively you could access the overlay directly using mSceneManager::getOverlay
+            but this is simpler.
+        void showDebugOverlay(bool show);
+        */
+
+		/** Manually load a plugin.
+		 @remarks
+		 	Plugins are loaded at startup using the plugin configuration
+			file specified when you create Root (default: plugins.cfg).
+			This method allows you to load plugins in code.
+		@param pluginName Name of the plugin library to load
+		*/
+		void loadPlugin(const String& pluginName);
+
+		/** Manually unloads a plugin.
+		 @remarks
+		 	Plugins are unloaded at shutdown automatically.
+			This method allows you to unload plugins in code, but
+			make sure their dependencies are decoupled frist.
+		@param pluginName Name of the plugin library to unload
+		*/
+		void unloadPlugin(const String& pluginName);
+
+        /** Gets a pointer to the central timer used for all OGRE timings */
+        Timer* getTimer(void);
+
+        /** Method for raising frame started events. 
+        @remarks
+            This method is only for internal use when you use OGRE's inbuilt rendering
+            loop (Root::startRendering). However, if you run your own rendering loop then
+            you should call this method to ensure that FrameListener objects are notified
+            of frame events; processes like texture animation and particle systems rely on 
+            this.
+        @par
+            Calling this method also increments the frame number, which is
+            important for keeping some elements of the engine up to date.
+        @note
+            This method takes an event object as a parameter, so you can specify the times
+            yourself. If you are happy for OGRE to automatically calculate the frame time
+            for you, then call the other version of this method with no parameters.
+        @param evt Event object which includes all the timing information which you have 
+            calculated for yourself
+        @returns False if one or more frame listeners elected that the rendering loop should
+            be terminated, true otherwise.
+        */
+        bool _fireFrameStarted(FrameEvent& evt);
+        /** Method for raising frame ended events. 
+        @remarks
+            This method is only for internal use when you use OGRE's inbuilt rendering
+            loop (Root::startRendering). However, if you run your own rendering loop then
+            you should call this method to ensure that FrameListener objects are notified
+            of frame events; processes like texture animation and particle systems rely on 
+            this.
+        @note
+            This method takes an event object as a parameter, so you can specify the times
+            yourself. If you are happy for OGRE to automatically calculate the frame time
+            for you, then call the other version of this method with no parameters.
+        @param evt Event object which includes all the timing information which you have 
+            calculated for yourself
+        @returns False if one or more frame listeners elected that the rendering loop should
+            be terminated, true otherwise.
+        */
+        bool _fireFrameEnded(FrameEvent& evt);
+        /** Method for raising frame started events. 
+        @remarks
+            This method is only for internal use when you use OGRE's inbuilt rendering
+            loop (Root::startRendering). However, if you run your own rendering loop then
+            you should call this method to ensure that FrameListener objects are notified
+            of frame events; processes like texture animation and particle systems rely on 
+            this.
+        @par
+            Calling this method also increments the frame number, which is
+            important for keeping some elements of the engine up to date.
+        @note
+            This method calculates the frame timing information for you based on the elapsed
+            time. If you want to specify elapsed times yourself you should call the other 
+            version of this method which takes event details as a parameter.
+        @returns False if one or more frame listeners elected that the rendering loop should
+            be terminated, true otherwise.
+        */
+        bool _fireFrameStarted();
+        /** Method for raising frame ended events. 
+        @remarks
+            This method is only for internal use when you use OGRE's inbuilt rendering
+            loop (Root::startRendering). However, if you run your own rendering loop then
+            you should call this method to ensure that FrameListener objects are notified
+            of frame events; processes like texture animation and particle systems rely on 
+            this.
+        @note
+            This method calculates the frame timing information for you based on the elapsed
+            time. If you want to specify elapsed times yourself you should call the other 
+            version of this method which takes event details as a parameter.
+        @returns False if one or more frame listeners elected that the rendering loop should
+            be terminated, true otherwise.
+        */
+        bool _fireFrameEnded();
+
+        /** Gets the number of the current frame. */
+        unsigned long getCurrentFrameNumber(void) const { return mCurrentFrame; }
+
+        /** Returns the scene manager currently being used to render a frame.
+        @remarks
+            This is only intended for internal use; it is only valid during the
+            rendering of a frame.
+        */
+        SceneManager* _getCurrentSceneManager(void) const { return mCurrentSceneManager; }
+        /** Sets the scene manager currently being used to render a frame.
+        @remarks
+            This is only intended for internal use.
+        */
+        void _setCurrentSceneManager(SceneManager* sm) { mCurrentSceneManager = sm; }
+
+        /** Internal method used for updating all RenderTarget objects (windows, 
+            renderable textures etc) which are set to auto-update.
+        @remarks
+            You don't need to use this method if you're using Ogre's own internal
+            rendering loop (Root::startRendering). If you're running your own loop
+            you may wish to call it to update all the render targets which are
+            set to auto update (RenderTarget::setAutoUpdated). You can also update
+            individual RenderTarget instances using their own update() method.
+        */
+        void _updateAllRenderTargets(void);
+
+        /** Override standard Singleton retrieval.
+            @remarks
+                Why do we do this? Well, it's because the Singleton
+                implementation is in a .h file, which means it gets compiled
+                into anybody who includes it. This is needed for the
+                Singleton template to work, but we actually only want it
+                compiled into the implementation of the class based on the
+                Singleton, not all of them. If we don't change this, we get
+                link errors when trying to use the Singleton-based class from
+                an outside dll.
+            @par
+                This method just delegates to the template version anyway,
+                but the implementation stays in this single compilation unit,
+                preventing link errors.
+        */
+        static Root& getSingleton(void);
+        /** Override standard Singleton retrieval.
+            @remarks
+                Why do we do this? Well, it's because the Singleton
+                implementation is in a .h file, which means it gets compiled
+                into anybody who includes it. This is needed for the
+                Singleton template to work, but we actually only want it
+                compiled into the implementation of the class based on the
+                Singleton, not all of them. If we don't change this, we get
+                link errors when trying to use the Singleton-based class from
+                an outside dll.
+            @par
+                This method just delegates to the template version anyway,
+                but the implementation stays in this single compilation unit,
+                preventing link errors.
+        */
+        static Root* getSingletonPtr(void);
+
+		/** Clears the history of all event times. 
+		@remarks
+			OGRE stores a history of the last few event times in order to smooth
+			out any inaccuracies and temporary fluctuations. However, if you 
+			pause or don't render for a little while this can cause a lurch, so
+			if you're resuming rendering after a break, call this method to reset
+			the stored times
+		*/
+		void clearEventTimes(void);
+
+    };
+} // Namespace Ogre
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSceneQuery.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSceneQuery.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSceneQuery.h	(revision 1092)
@@ -0,0 +1,540 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __SceneQuery_H__
+#define __SceneQuery_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreAxisAlignedBox.h"
+#include "OgreSphere.h"
+#include "OgreRay.h"
+#include "OgreRenderOperation.h"
+#include "OgrePlaneBoundedVolume.h"
+
+namespace Ogre {
+
+    // forward declaration
+    class SceneQueryListener;
+    /** A class for performing queries on a scene.
+    @remarks
+        This is an abstract class for performing a query on a scene, i.e. to retrieve
+        a list of objects and/or world geometry sections which are potentially intersecting a
+        given region. Note the use of the word 'potentially': the results of a scene query
+        are generated based on bounding volumes, and as such are not correct at a triangle
+        level; the user of the SceneQuery is expected to filter the results further if
+        greater accuracy is required.
+    @par
+        Different SceneManagers will implement these queries in different ways to
+        exploit their particular scene organisation, and thus will provide their own
+        concrete subclasses. In fact, these subclasses will be derived from subclasses
+        of this class rather than directly because there will be region-type classes
+        in between.
+    @par
+        These queries could have just been implemented as methods on the SceneManager,
+        however, they are wrapped up as objects to allow 'compilation' of queries
+        if deemed appropriate by the implementation; i.e. each concrete subclass may
+        precalculate information (such as fixed scene partitions involved in the query)
+        to speed up the repeated use of the query.
+    @par
+        You should never try to create a SceneQuery object yourself, they should be created
+        using the SceneManager interfaces for the type of query required, e.g.
+        SceneManager::createSphereSceneQuery.
+    */
+    class _OgreExport SceneQuery
+    {
+    public:
+        /** This type can be used by collaborating applications & SceneManagers to 
+            agree on the type of world geometry to be returned from queries. Not all
+            these types will be supported by all SceneManagers; once the application
+            has decided which SceneManager specialisation to use, it is expected that 
+            it will know which type of world geometry abstraction is available to it.
+        */
+        enum WorldFragmentType {
+            /// Return no world geometry hits at all
+            WFT_NONE,
+            /// Return pointers to convex plane-bounded regions
+            WFT_PLANE_BOUNDED_REGION,
+            /// Return a single intersection point (typically RaySceneQuery only)
+            WFT_SINGLE_INTERSECTION,
+            /// Custom geometry as defined by the SceneManager
+            WFT_CUSTOM_GEOMETRY,
+            /// General RenderOperation structure
+            WFT_RENDER_OPERATION
+        };
+
+        /** Represents part of the world geometry that is a result of a SceneQuery. 
+        @remarks
+            Since world geometry is normally vast and sprawling, we need a way of
+            retrieving parts of it based on a query. That is what this struct is for;
+            note there are potentially as many data structures for world geometry as there
+            are SceneManagers, however this structure includes a few common abstractions as 
+            well as a more general format.
+        @par
+            The type of world fragment that is returned from a query depends on the
+            SceneManager, and the option set using SceneQuery::setWorldFragmentType. 
+            You can see what fragment types are supported on the query in question by
+            calling SceneQuery::getSupportedWorldFragmentTypes().
+        */
+        struct WorldFragment {
+            /// The type of this world fragment
+            WorldFragmentType fragmentType;
+            /// Single intersection point, only applicable for WFT_SINGLE_INTERSECTION
+            Vector3 singleIntersection;
+            /// Planes bounding a convex region, only applicable for WFT_PLANE_BOUNDED_REGION
+            std::list<Plane>* planes;
+            /// Custom geometry block, only applicable for WFT_CUSTOM_GEOMETRY
+            void* geometry;
+            /// General render operation structure, fallback if nothing else is available
+            RenderOperation* renderOp;
+            
+        };
+    protected:
+        SceneManager* mParentSceneMgr;
+        unsigned long mQueryMask;
+        std::set<WorldFragmentType> mSupportedWorldFragments;
+        WorldFragmentType mWorldFragmentType;
+    
+    public:
+        /** Standard constructor, should be called by SceneManager. */
+        SceneQuery(SceneManager* mgr);
+        virtual ~SceneQuery();
+
+        /** Sets the mask for results of this query.
+        @remarks
+            This method allows you to set a 'mask' to limit the results of this
+            query to certain types of result. The actual meaning of this value is
+            up to the application; basically MovableObject instances will only be returned
+            from this query if a bitwise AND operation between this mask value and the
+            MovableObject::getQueryFlags value is non-zero. The application will
+            have to decide what each of the bits means.
+        */
+        virtual void setQueryMask(unsigned long mask);
+        /** Returns the current mask for this query. */
+        virtual unsigned long getQueryMask(void) const;
+
+        /** Tells the query what kind of world geometry to return from queries;
+            often the full renderable geometry is not what is needed. 
+        @remarks
+            The application receiving the world geometry is expected to know 
+            what to do with it; inevitably this means that the application must 
+            have knowledge of at least some of the structures
+            used by the custom SceneManager.
+        @par
+            The default setting is WFT_NONE.
+        */
+        virtual void setWorldFragmentType(enum WorldFragmentType wft);
+
+        /** Gets the current world fragment types to be returned from the query. */
+        virtual WorldFragmentType getWorldFragmentType(void) const;
+
+        /** Returns the types of world fragments this query supports. */
+        virtual const std::set<WorldFragmentType>* getSupportedWorldFragmentTypes(void) const
+            {return &mSupportedWorldFragments;}
+
+        
+    };
+
+    /** This optional class allows you to receive per-result callbacks from
+        SceneQuery executions instead of a single set of consolidated results.
+    @remarks
+        You should override this with your own subclass. Note that certain query
+        classes may refine this listener interface.
+    */
+    class _OgreExport SceneQueryListener
+    {
+    public:
+        virtual ~SceneQueryListener() { }
+        /** Called when a MovableObject is returned by a query.
+        @remarks
+            The implementor should return 'true' to continue returning objects,
+            or 'false' to abandon any further results from this query.
+        */
+        virtual bool queryResult(MovableObject* object) = 0;
+        /** Called when a WorldFragment is returned by a query.
+        @remarks
+            The implementor should return 'true' to continue returning objects,
+            or 'false' to abandon any further results from this query.
+        */
+        virtual bool queryResult(SceneQuery::WorldFragment* fragment) = 0;
+
+    };
+
+    typedef std::list<MovableObject*> SceneQueryResultMovableList;
+    typedef std::list<SceneQuery::WorldFragment*> SceneQueryResultWorldFragmentList;
+    /** Holds the results of a scene query. */
+    struct _OgreExport SceneQueryResult
+    {
+        /// List of movable objects in the query (entities, particle systems etc)
+        SceneQueryResultMovableList movables;
+        /// List of world fragments
+		SceneQueryResultWorldFragmentList worldFragments;
+    };
+
+    /** Abstract class defining a query which returns single results from a region. 
+    @remarks
+        This class is simply a generalisation of the subtypes of query that return 
+        a set of individual results in a region. See the SceneQuery class for abstract
+        information, and subclasses for the detail of each query type.
+    */
+    class _OgreExport RegionSceneQuery
+        : public SceneQuery, public SceneQueryListener
+    {
+    protected:
+        SceneQueryResult* mLastResult;
+    public:
+        /** Standard constructor, should be called by SceneManager. */
+        RegionSceneQuery(SceneManager* mgr);
+        virtual ~RegionSceneQuery();
+        /** Executes the query, returning the results back in one list.
+        @remarks
+            This method executes the scene query as configured, gathers the results
+            into one structure and returns a reference to that structure. These
+            results will also persist in this query object until the next query is
+            executed, or clearResults() is called. An more lightweight version of
+            this method that returns results through a listener is also available.
+        */
+        virtual SceneQueryResult& execute(void);
+
+        /** Executes the query and returns each match through a listener interface. 
+        @remarks
+            Note that this method does not store the results of the query internally 
+            so does not update the 'last result' value. This means that this version of
+            execute is more lightweight and therefore more efficient than the version 
+            which returns the results as a collection.
+        */
+        virtual void execute(SceneQueryListener* listener) = 0;
+        
+        /** Gets the results of the last query that was run using this object, provided
+            the query was executed using the collection-returning version of execute. 
+        */
+        virtual SceneQueryResult& getLastResults(void) const;
+        /** Clears the results of the last query execution.
+        @remarks
+            You only need to call this if you specifically want to free up the memory
+            used by this object to hold the last query results. This object clears the
+            results itself when executing and when destroying itself.
+        */
+        virtual void clearResults(void);
+
+        /** Self-callback in order to deal with execute which returns collection. */
+        bool queryResult(MovableObject* first);
+        /** Self-callback in order to deal with execute which returns collection. */
+        bool queryResult(SceneQuery::WorldFragment* fragment);
+    };
+
+    /** Specialises the SceneQuery class for querying within an axis aligned box. */
+    class _OgreExport AxisAlignedBoxSceneQuery : public RegionSceneQuery
+    {
+    protected:
+        AxisAlignedBox mAABB;
+    public:
+        AxisAlignedBoxSceneQuery(SceneManager* mgr);
+        virtual ~AxisAlignedBoxSceneQuery();
+
+        /** Sets the size of the box you wish to query. */
+        void setBox(const AxisAlignedBox& box);
+
+        /** Gets the box which is being used for this query. */
+        const AxisAlignedBox& getBox(void) const;
+
+    };
+
+    /** Specialises the SceneQuery class for querying within a sphere. */
+    class _OgreExport SphereSceneQuery : public RegionSceneQuery
+    {
+    protected:
+        Sphere mSphere;
+    public:
+        SphereSceneQuery(SceneManager* mgr);
+        virtual ~SphereSceneQuery();
+        /** Sets the sphere which is to be used for this query. */
+        void setSphere(const Sphere& sphere);
+
+        /** Gets the sphere which is being used for this query. */
+        const Sphere& getSphere() const;
+
+    };
+
+    /** Specialises the SceneQuery class for querying within a plane-bounded volume. 
+    */
+    class _OgreExport PlaneBoundedVolumeListSceneQuery : public RegionSceneQuery
+    {
+    protected:
+        PlaneBoundedVolumeList mVolumes;
+    public:
+        PlaneBoundedVolumeListSceneQuery(SceneManager* mgr);
+        virtual ~PlaneBoundedVolumeListSceneQuery();
+        /** Sets the volume which is to be used for this query. */
+        void setVolumes(const PlaneBoundedVolumeList& volumes);
+
+        /** Gets the volume which is being used for this query. */
+        const PlaneBoundedVolumeList& getVolumes() const;
+
+    };
+
+
+    /*
+    /// Specialises the SceneQuery class for querying within a pyramid. 
+    class _OgreExport PyramidSceneQuery : public RegionSceneQuery
+    {
+    public:
+        PyramidSceneQuery(SceneManager* mgr);
+        virtual ~PyramidSceneQuery();
+    };
+    */
+
+    /** Alternative listener class for dealing with RaySceneQuery.
+    @remarks
+        Because the RaySceneQuery returns results in an extra bit of information, namely
+        distance, the listener interface must be customised from the standard SceneQueryListener.
+    */
+    class _OgreExport RaySceneQueryListener 
+    {
+    public:
+        virtual ~RaySceneQueryListener() { }
+        /** Called when a movable objects intersects the ray.
+        @remarks
+            As with SceneQueryListener, the implementor of this method should return 'true'
+            if further results are required, or 'false' to abandon any further results from
+            the current query.
+        */
+        virtual bool queryResult(MovableObject* obj, Real distance) = 0;
+
+        /** Called when a world fragment is intersected by the ray. 
+        @remarks
+            As with SceneQueryListener, the implementor of this method should return 'true'
+            if further results are required, or 'false' to abandon any further results from
+            the current query.
+        */
+        virtual bool queryResult(SceneQuery::WorldFragment* fragment, Real distance) = 0;
+
+    };
+      
+    /** This struct allows a single comparison of result data no matter what the type */
+    struct _OgreExport RaySceneQueryResultEntry
+    {
+        /// Distance along the ray
+        Real distance;
+        /// The movable, or NULL if this is not a movable result
+        MovableObject* movable;
+        /// The world fragment, or NULL if this is not a fragment result
+        SceneQuery::WorldFragment* worldFragment;
+        /// Comparison operator for sorting
+        bool operator < (const RaySceneQueryResultEntry& rhs) const
+        {
+            return this->distance < rhs.distance;
+        }
+
+    };
+    typedef std::list<RaySceneQueryResultEntry> RaySceneQueryResult;
+
+    /** Specialises the SceneQuery class for querying along a ray. */
+    class _OgreExport RaySceneQuery : public SceneQuery, public RaySceneQueryListener
+    {
+    protected:
+        Ray mRay;
+        bool mSortByDistance;
+        ushort mMaxResults;
+        RaySceneQueryResult* mLastResult;
+
+    public:
+        RaySceneQuery(SceneManager* mgr);
+        virtual ~RaySceneQuery();
+        /** Sets the ray which is to be used for this query. */
+        virtual void setRay(const Ray& ray);
+        /** Gets the ray which is to be used for this query. */
+        virtual const Ray& getRay(void) const;
+        /** Sets whether the results of this query will be sorted by distance along the ray.
+        @remarks
+            Often you want to know what was the first object a ray intersected with, and this 
+            method allows you to ask the query to sort the results so that the nearest results
+            are listed first.
+        @par
+            Note that because the query returns results based on bounding volumes, the ray may not
+            actually intersect the detail of the objects returned from the query, just their 
+            bounding volumes. For this reason the caller is advised to use more detailed 
+            intersection tests on the results if a more accurate result is required; OGRE uses 
+            bounds checking in order to give the most speedy results since not all applications 
+            need extreme accuracy.
+        @param sort If true, results will be sorted.
+        @param maxresults If sorting is enabled, this value can be used to constrain the maximum number
+            of results that are returned. Please note (as above) that the use of bounding volumes mean that
+            accuracy is not guaranteed; if in doubt, allow more results and filter them in more detail.
+            0 means unlimited results.
+        */
+        virtual void setSortByDistance(bool sort, ushort maxresults = 0);
+        /** Gets whether the results are sorted by distance. */
+        virtual bool getSortByDistance(void) const;
+        /** Gets the maximum number of results returned from the query (only relevant if 
+        results are being sorted) */
+        virtual ushort getMaxResults(void) const;
+        /** Executes the query, returning the results back in one list.
+        @remarks
+            This method executes the scene query as configured, gathers the results
+            into one structure and returns a reference to that structure. These
+            results will also persist in this query object until the next query is
+            executed, or clearResults() is called. An more lightweight version of
+            this method that returns results through a listener is also available.
+        */
+        virtual RaySceneQueryResult& execute(void);
+
+        /** Executes the query and returns each match through a listener interface. 
+        @remarks
+            Note that this method does not store the results of the query internally 
+            so does not update the 'last result' value. This means that this version of
+            execute is more lightweight and therefore more efficient than the version 
+            which returns the results as a collection.
+        */
+        virtual void execute(RaySceneQueryListener* listener) = 0;
+
+        /** Gets the results of the last query that was run using this object, provided
+            the query was executed using the collection-returning version of execute. 
+        */
+        virtual RaySceneQueryResult& getLastResults(void) const;
+        /** Clears the results of the last query execution.
+        @remarks
+            You only need to call this if you specifically want to free up the memory
+            used by this object to hold the last query results. This object clears the
+            results itself when executing and when destroying itself.
+        */
+        virtual void clearResults(void);
+
+        /** Self-callback in order to deal with execute which returns collection. */
+        bool queryResult(MovableObject* obj, Real distance);
+        /** Self-callback in order to deal with execute which returns collection. */
+        bool queryResult(SceneQuery::WorldFragment* fragment, Real distance);
+
+
+
+
+    };
+
+    /** Alternative listener class for dealing with IntersectionSceneQuery.
+    @remarks
+        Because the IntersectionSceneQuery returns results in pairs, rather than singularly,
+        the listener interface must be customised from the standard SceneQueryListener.
+    */
+    class _OgreExport IntersectionSceneQueryListener 
+    {
+    public:
+        virtual ~IntersectionSceneQueryListener() { }
+        /** Called when 2 movable objects intersect one another.
+        @remarks
+            As with SceneQueryListener, the implementor of this method should return 'true'
+            if further results are required, or 'false' to abandon any further results from
+            the current query.
+        */
+        virtual bool queryResult(MovableObject* first, MovableObject* second) = 0;
+
+        /** Called when a movable intersects a world fragment. 
+        @remarks
+            As with SceneQueryListener, the implementor of this method should return 'true'
+            if further results are required, or 'false' to abandon any further results from
+            the current query.
+        */
+        virtual bool queryResult(MovableObject* movable, SceneQuery::WorldFragment* fragment) = 0;
+
+        /* NB there are no results for world fragments intersecting other world fragments;
+           it is assumed that world geometry is either static or at least that self-intersections
+           are irrelevant or dealt with elsewhere (such as the custom scene manager) */
+        
+    
+    };
+        
+    typedef std::pair<MovableObject*, MovableObject*> SceneQueryMovableObjectPair;
+    typedef std::pair<MovableObject*, SceneQuery::WorldFragment*> SceneQueryMovableObjectWorldFragmentPair;
+    typedef std::list<SceneQueryMovableObjectPair> SceneQueryMovableIntersectionList;
+    typedef std::list<SceneQueryMovableObjectWorldFragmentPair> SceneQueryMovableWorldFragmentIntersectionList;
+    /** Holds the results of an intersection scene query (pair values). */
+    struct _OgreExport IntersectionSceneQueryResult
+    {
+        /// List of movable / movable intersections (entities, particle systems etc)
+        SceneQueryMovableIntersectionList movables2movables;
+        /// List of movable / world intersections
+        SceneQueryMovableWorldFragmentIntersectionList movables2world;
+        
+        
+
+    };
+
+    /** Separate SceneQuery class to query for pairs of objects which are
+        possibly intersecting one another.
+    @remarks
+        This SceneQuery subclass considers the whole world and returns pairs of objects
+        which are close enough to each other that they may be intersecting. Because of
+        this slightly different focus, the return types and listener interface are
+        different for this class.
+    */
+    class _OgreExport IntersectionSceneQuery
+        : public SceneQuery, public IntersectionSceneQueryListener 
+    {
+    protected:
+        IntersectionSceneQueryResult* mLastResult;
+    public:
+        IntersectionSceneQuery(SceneManager* mgr);
+        virtual ~IntersectionSceneQuery();
+
+        /** Executes the query, returning the results back in one list.
+        @remarks
+            This method executes the scene query as configured, gathers the results
+            into one structure and returns a reference to that structure. These
+            results will also persist in this query object until the next query is
+            executed, or clearResults() is called. An more lightweight version of
+            this method that returns results through a listener is also available.
+        */
+        virtual IntersectionSceneQueryResult& execute(void);
+
+        /** Executes the query and returns each match through a listener interface. 
+        @remarks
+            Note that this method does not store the results of the query internally 
+            so does not update the 'last result' value. This means that this version of
+            execute is more lightweight and therefore more efficient than the version 
+            which returns the results as a collection.
+        */
+        virtual void execute(IntersectionSceneQueryListener* listener) = 0;
+
+        /** Gets the results of the last query that was run using this object, provided
+            the query was executed using the collection-returning version of execute. 
+        */
+        virtual IntersectionSceneQueryResult& getLastResults(void) const;
+        /** Clears the results of the last query execution.
+        @remarks
+            You only need to call this if you specifically want to free up the memory
+            used by this object to hold the last query results. This object clears the
+            results itself when executing and when destroying itself.
+        */
+        virtual void clearResults(void);
+
+        /** Self-callback in order to deal with execute which returns collection. */
+        bool queryResult(MovableObject* first, MovableObject* second);
+        /** Self-callback in order to deal with execute which returns collection. */
+        bool queryResult(MovableObject* movable, SceneQuery::WorldFragment* fragment);
+    };
+    
+
+}
+    
+
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreOverlayContainer.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreOverlayContainer.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreOverlayContainer.h	(revision 1092)
@@ -0,0 +1,141 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __OverlayContainer_H__
+#define __OverlayContainer_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreOverlayElement.h"
+#include "OgreIteratorWrappers.h"
+
+
+namespace Ogre {
+
+
+    /** A 2D element which contains other OverlayElement instances.
+    @remarks
+        This is a specialisation of OverlayElement for 2D elements that contain other
+        elements. These are also the smallest elements that can be attached directly
+        to an Overlay.
+    @remarks
+        OverlayContainers should be managed using OverlayManager. This class is responsible for
+        instantiating / deleting elements, and also for accepting new types of element
+        from plugins etc.
+    */
+    class _OgreExport OverlayContainer : public OverlayElement
+    {
+    public:
+        typedef std::map<String, OverlayElement*> ChildMap;
+        typedef MapIterator<ChildMap> ChildIterator;
+        typedef std::map<String, OverlayContainer*> ChildContainerMap;
+        typedef MapIterator<ChildContainerMap> ChildContainerIterator;
+    protected:
+        // Map of all children
+        ChildMap mChildren;
+        // Map of container children (subset of mChildren)
+        ChildContainerMap mChildContainers;
+
+		bool mChildrenProcessEvents;
+ 
+    public:
+        /// Constructor: do not call direct, use OverlayManager::createOverlayElement
+        OverlayContainer(const String& name);
+        virtual ~OverlayContainer();
+
+        /** Adds another OverlayElement to this container. */
+        virtual void addChild(OverlayElement* elem);
+        /** Adds another OverlayElement to this container. */
+        virtual void addChildImpl(OverlayElement* elem);
+        /** Add a nested container to this container. */
+        virtual void addChildImpl(OverlayContainer* cont);
+        /** Removes a named element from this container. */
+        virtual void removeChild(const String& name);
+        /** Gets the named child of this container. */
+        virtual OverlayElement* getChild(const String& name);
+
+		/** @copydoc OverlayElement::initialise */
+		void initialise(void);
+
+        void _addChild(OverlayElement* elem);
+        void _removeChild(OverlayElement* elem) { _removeChild(elem->getName()); }
+        void _removeChild(const String& name);
+
+        /** Gets an object for iterating over all the children of this object. */
+        virtual ChildIterator getChildIterator(void);
+
+        /** Gets an iterator for just the container children of this object.
+        @remarks
+            Good for cascading updates without having to use RTTI
+        */
+        virtual ChildContainerIterator getChildContainerIterator(void);
+
+		/** Tell the object and its children to recalculate */
+		virtual void _positionsOutOfDate(void);
+
+        /** Overridden from OverlayElement. */
+        virtual void _update(void);
+
+        /** Overridden from OverlayElement. */
+        virtual void _notifyZOrder(ushort newZOrder);
+
+        /** Overridden from OverlayElement. */
+        virtual void _notifyViewport();
+
+        /** Overridden from OverlayElement. */
+        virtual void _notifyWorldTransforms(const Matrix4& xform);
+
+        /** Overridden from OverlayElement. */
+	    virtual void _notifyParent(OverlayContainer* parent, Overlay* overlay);
+
+        /** Overridden from OverlayElement. */
+        virtual void _updateRenderQueue(RenderQueue* queue);
+
+        /** Overridden from OverlayElement. */
+		inline bool isContainer() const
+		{ return true; }
+
+		/** Should this container pass events to their children */
+		virtual inline bool isChildrenProcessEvents() const
+		{ return true; }
+
+		/** Should this container pass events to their children */
+		virtual inline void setChildrenProcessEvents(bool val)
+		{ mChildrenProcessEvents = val; }
+
+        /** This returns a OverlayElement at position x,y. */
+		virtual OverlayElement* findElementAt(Real x, Real y);		// relative to parent
+
+	    void copyFromTemplate(OverlayElement* templateOverlay);
+        virtual OverlayElement* clone(const String& instanceName);
+
+    };
+
+
+
+}
+
+
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreTextureManager.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreTextureManager.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreTextureManager.h	(revision 1092)
@@ -0,0 +1,280 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _TextureManager_H__
+#define _TextureManager_H__
+
+
+#include "OgrePrerequisites.h"
+
+#include "OgreResourceManager.h"
+#include "OgreTexture.h"
+#include "OgreSingleton.h"
+
+
+namespace Ogre {
+
+    /** Class for loading & managing textures.
+        @remarks
+            Note that this class is abstract - the particular
+            RenderSystem that is in use at the time will create
+            a concrete subclass of this. Note that the concrete
+            class will be available via the abstract singleton
+            obtained from TextureManager::getSingleton(), but
+            you should not assume that it is available until you
+            have a) initialised Ogre (after selecting a RenderSystem
+            and calling initialise from the Root object), and b)
+            created at least one window - this may be done at the
+            same time as part a if you allow Ogre to autocreate one.
+     */
+    class _OgreExport TextureManager : public ResourceManager, public Singleton<TextureManager>
+    {
+    public:
+
+        TextureManager(bool enable32Bit = true);
+        virtual ~TextureManager();
+
+        /** Loads a texture from a file.
+            @param
+                name The file to load, or a String identifier in some cases
+            @param
+                group The name of the resource group to assign the texture to
+            @param
+                texType The type of texture to load/create, defaults to normal 2D textures
+            @param
+                numMipmaps The number of pre-filtered mipmaps to generate. If left to default (-1) then
+                the TextureManager's default number of mipmaps will be used (see setDefaultNumMipmaps())
+				If set to MIP_UNLIMITED mipmaps will be generated until the lowest possible
+				level, 1x1x1.
+            @param
+                gamma The gamma adjustment factor to apply to this texture (brightening/darkening)
+        */
+        virtual TexturePtr load( 
+            const String& name, const String& group, 
+            TextureType texType = TEX_TYPE_2D, int numMipmaps = -1, 
+            Real gamma = 1.0f);
+
+        /** Loads a texture from an Image object.
+            @note
+                The texture will create as manual texture without loader.
+            @param
+                name The name to give the resulting texture
+            @param
+                group The name of the resource group to assign the texture to
+            @param
+                img The Image object which contains the data to load
+            @param
+                texType The type of texture to load/create, defaults to normal 2D textures
+            @param
+                numMipmaps The number of pre-filtered mipmaps to generate. If left to default (-1) then
+                the TextureManager's default number of mipmaps will be used (see setDefaultNumMipmaps())
+				If set to MIP_UNLIMITED mipmaps will be generated until the lowest possible
+				level, 1x1x1.
+            @param
+                gamma The gamma adjustment factor to apply to this texture (brightening/darkening)
+        */
+        virtual TexturePtr loadImage( 
+            const String &name, const String& group, const Image &img, 
+            TextureType texType = TEX_TYPE_2D,
+            int iNumMipmaps = -1, Real gamma = 1.0f);
+			
+        /** Loads a texture from a raw data stream.
+            @note
+                The texture will create as manual texture without loader.
+            @param
+                name The name to give the resulting texture
+            @param
+                group The name of the resource group to assign the texture to
+            @param
+                stream Incoming data stream
+            @param
+                width, height The dimensions of the texture
+            @param
+                format The format of the data being passed in; the manager reserves
+                the right to create a different format for the texture if the 
+                original format is not available in this context.
+            @param
+                texType The type of texture to load/create, defaults to normal 2D textures
+            @param
+                numMipmaps The number of pre-filtered mipmaps to generate. If left to default (-1) then
+                the TextureManager's default number of mipmaps will be used (see setDefaultNumMipmaps())
+				If set to MIP_UNLIMITED mipmaps will be generated until the lowest possible
+				level, 1x1x1.
+            @param
+                gamma The gamma adjustment factor to apply to this texture (brightening/darkening)
+        */
+        virtual TexturePtr loadRawData(const String &name, const String& group,
+            DataStreamPtr& stream, ushort uWidth, ushort uHeight, 
+            PixelFormat format, TextureType texType = TEX_TYPE_2D, 
+            int iNumMipmaps = -1, Real gamma = 1.0f);
+
+		/** Create a manual texture with specified width, height and depth (not loaded from a file).
+            @param
+                name The name to give the resulting texture
+            @param
+                group The name of the resource group to assign the texture to
+            @param
+                texType The type of texture to load/create, defaults to normal 2D textures
+            @param
+                width, height, depth The dimensions of the texture
+            @param
+                numMipmaps The number of pre-filtered mipmaps to generate. If left to default (-1) then
+                the TextureManager's default number of mipmaps will be used (see setDefaultNumMipmaps())
+				If set to MIP_UNLIMITED mipmaps will be generated until the lowest possible
+				level, 1x1x1.
+            @param
+                format The internal format you wish to request; the manager reserves
+                the right to create a different format if the one you select is
+                not available in this context.
+			@param 
+				usage The kind of usage this texture is intended for. It 
+				is a combination of TU_STATIC, TU_DYNAMIC, TU_WRITE_ONLY, 
+				TU_AUTOMIPMAP and TU_RENDERTARGET (see TextureUsage enum). You are
+            	strongly advised to use HBU_STATIC_WRITE_ONLY wherever possible, if you need to 
+            	update regularly, consider HBU_DYNAMIC_WRITE_ONLY.
+            @param
+                loader If you intend the contents of the manual texture to be 
+                regularly updated, to the extent that you don't need to recover 
+                the contents if the texture content is lost somehow, you can leave
+                this parameter as 0. However, if you intend to populate the
+                texture only once, then you should implement ManualResourceLoader
+                and pass a pointer to it in this parameter; this means that if the
+                manual texture ever needs to be reloaded, the ManualResourceLoader
+                will be called to do it.
+        */
+        virtual TexturePtr createManual(const String & name, const String& group,
+            TextureType texType, uint width, uint height, uint depth, 
+			int num_mips, PixelFormat format, int usage = TU_DEFAULT, ManualResourceLoader* loader = 0 );
+			
+        /** Create a manual texture with a depth of 1 (not loaded from a file).
+            @param
+                name The name to give the resulting texture
+            @param
+                group The name of the resource group to assign the texture to
+            @param
+                texType The type of texture to load/create, defaults to normal 2D textures
+            @param
+                width, height The dimensions of the texture
+            @param
+                numMipmaps The number of pre-filtered mipmaps to generate. If left to default (-1) then
+                the TextureManager's default number of mipmaps will be used (see setDefaultNumMipmaps()).
+				If set to MIP_UNLIMITED mipmaps will be generated until the lowest possible
+				level, 1x1x1.
+            @param
+                format The internal format you wish to request; the manager reserves
+                the right to create a different format if the one you select is
+                not available in this context.
+			@param 
+				usage The kind of usage this texture is intended for. It 
+				is a combination of TU_STATIC, TU_DYNAMIC, TU_WRITE_ONLY, 
+				TU_AUTOMIPMAP and TU_RENDERTARGET (see TextureUsage enum). You are
+            	strongly advised to use HBU_STATIC_WRITE_ONLY wherever possible, if you need to 
+            	update regularly, consider HBU_DYNAMIC_WRITE_ONLY.
+            @param
+                loader If you intend the contents of the manual texture to be 
+                regularly updated, to the extent that you don't need to recover 
+                the contents if the texture content is lost somehow, you can leave
+                this parameter as 0. However, if you intend to populate the
+                texture only once, then you should implement ManualResourceLoader
+                and pass a pointer to it in this parameter; this means that if the
+                manual texture ever needs to be reloaded, the ManualResourceLoader
+                will be called to do it.
+        */
+        TexturePtr createManual(const String & name, const String& group,
+            TextureType texType, uint width, uint height, int num_mips,
+            PixelFormat format, int usage = TU_DEFAULT, ManualResourceLoader* loader = 0 )
+		{
+			return createManual(name, group, texType, width, height, 1, 
+				num_mips, format, usage, loader);
+		}
+
+        /** Enables / disables 32-bit textures.
+        */
+        virtual void enable32BitTextures(bool setting = true);
+
+        /** Checks 32-bit textures enable setting.
+        */
+        virtual bool isEnable32BitTextures(void)
+        {
+            return mIs32Bit;
+        }
+
+        /** Sets the default number of mipmaps to be used for loaded textures, for when textures are
+            loaded automatically (e.g. by Material class) or when 'load' is called with the default
+            parameters by the application.
+			If set to MIP_UNLIMITED mipmaps will be generated until the lowest possible
+				level, 1x1x1.
+            @note
+                The default value is 0.
+        */
+        virtual void setDefaultNumMipmaps(size_t num);
+
+        /** Gets the default number of mipmaps to be used for loaded textures.
+        */
+        virtual size_t getDefaultNumMipmaps()
+        {
+            return mDefaultNumMipmaps;
+        }
+
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static TextureManager& getSingleton(void);
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static TextureManager* getSingletonPtr(void);
+
+    protected:
+
+        bool mIs32Bit;
+        size_t mDefaultNumMipmaps;
+    };
+}// Namespace
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreParticleEmitter.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreParticleEmitter.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreParticleEmitter.h	(revision 1092)
@@ -0,0 +1,473 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE 
+	(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under 
+the terms of the GNU Lesser General Public License as published by the Free Software 
+Foundation; either version 2 of the License, or (at your option) any later 
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT 
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with 
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple 
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to 
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __ParticleEmitter_H__
+#define __ParticleEmitter_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreString.h"
+#include "OgreVector3.h"
+#include "OgreColourValue.h"
+#include "OgreStringInterface.h"
+#include "OgreParticleEmitterCommands.h"
+#include "OgreParticle.h"
+
+
+namespace Ogre {
+
+
+    /** Abstract class defining the interface to be implemented by particle emitters.
+    @remarks
+        Particle emitters are the sources of particles in a particle system. 
+        This class defines the ParticleEmitter interface, and provides a basic implementation 
+        for tasks which most emitters will do (these are of course overridable).
+        Particle emitters can be  grouped into types, e.g. 'point' emitters, 'box' emitters etc; each type will 
+        create particles with a different starting point, direction and velocity (although
+        within the types you can configure the ranges of these parameters). 
+    @par
+        Because there are so many types of emitters you could use, OGRE chooses not to dictate
+        the available types. It comes with some in-built, but allows plugins or applications to extend the emitter types available.
+        This is done by subclassing ParticleEmitter to have the appropriate emission behaviour you want,
+        and also creating a subclass of ParticleEmitterFactory which is responsible for creating instances 
+        of your new emitter type. You register this factory with the ParticleSystemManager using
+        addEmitterFactory, and from then on emitters of this type can be created either from code or through
+        text particle scripts by naming the type.
+    @par
+        This same approach is used for ParticleAffectors (which modify existing particles per frame).
+        This means that OGRE is particularly flexible when it comes to creating particle system effects,
+        with literally infinite combinations of emitter and affector types, and paramters within those
+        types.
+    */
+    class _OgreExport ParticleEmitter : public StringInterface
+    {
+    protected:
+
+        // Command object for setting / getting parameters
+        static EmitterCommands::CmdAngle msAngleCmd;
+        static EmitterCommands::CmdColour msColourCmd;
+        static EmitterCommands::CmdColourRangeStart msColourRangeStartCmd;
+        static EmitterCommands::CmdColourRangeEnd msColourRangeEndCmd;
+        static EmitterCommands::CmdDirection msDirectionCmd;
+        static EmitterCommands::CmdEmissionRate msEmissionRateCmd;
+        static EmitterCommands::CmdMaxTTL msMaxTTLCmd;
+        static EmitterCommands::CmdMaxVelocity msMaxVelocityCmd;
+        static EmitterCommands::CmdMinTTL msMinTTLCmd;
+        static EmitterCommands::CmdMinVelocity msMinVelocityCmd;
+        static EmitterCommands::CmdPosition msPositionCmd;
+        static EmitterCommands::CmdTTL msTTLCmd;
+        static EmitterCommands::CmdVelocity msVelocityCmd;
+        static EmitterCommands::CmdDuration msDurationCmd;
+        static EmitterCommands::CmdMinDuration msMinDurationCmd;
+        static EmitterCommands::CmdMaxDuration msMaxDurationCmd;
+        static EmitterCommands::CmdRepeatDelay msRepeatDelayCmd;
+        static EmitterCommands::CmdMinRepeatDelay msMinRepeatDelayCmd;
+        static EmitterCommands::CmdMaxRepeatDelay msMaxRepeatDelayCmd;
+
+
+        /// Parent particle system
+        ParticleSystem* mParent;
+        /// Position relative to the center of the ParticleSystem
+        Vector3 mPosition;
+        /// Rate in particles per second at which this emitter wishes to emit particles
+        Real mEmissionRate;
+        /// Name of the type of emitter, MUST be initialised by subclasses
+        String mType;
+        /// Base direction of the emitter, may not be used by some emitters
+        Vector3 mDirection;
+        // Notional up vector, just used to speed up generation of variant directions
+        Vector3 mUp;
+        /// Angle around direction which particles may be emitted, internally radians but angleunits for interface
+        Radian mAngle;
+        /// Min speed of particles
+        Real mMinSpeed;
+        /// Max speed of particles
+        Real mMaxSpeed;
+        /// Initial time-to-live of particles (min)
+        Real mMinTTL;
+        /// Initial time-to-live of particles (max)
+        Real mMaxTTL;
+        /// Initial colour of particles (range start)
+        ColourValue mColourRangeStart;
+        /// Initial colour of particles (range end)
+        ColourValue mColourRangeEnd;
+
+        /// Whether this emitter is currently enabled (defaults to true)
+        bool mEnabled;
+
+        /// Start time (in seconds from start of first call to ParticleSystem to update)
+        Real mStartTime;
+        /// Minimum length of time emitter will run for (0 = forever)
+        Real mDurationMin;
+        /// Maximum length of time the emitter will run for (0 = forever)
+        Real mDurationMax;
+        /// Current duration remainder
+        Real mDurationRemain;
+
+        /// Time between each repeat
+        Real mRepeatDelayMin;
+        Real mRepeatDelayMax;
+        /// Repeat delay left
+        Real mRepeatDelayRemain;
+
+		// Fractions of particles wanted to be emitted last time
+		Real mRemainder;
+
+        // NB Method below here are to help out people implementing emitters by providing the
+        // most commonly used approaches as piecemeal methods
+
+        /** Internal utility method for generating particle exit direction
+        @param destVector Reference to vector to complete with new direction (normalised)
+        */
+        virtual void genEmissionDirection(Vector3& destVector);
+
+        /** Internal utility method to apply velocity to a particle direction.
+        @param destVector The vector to scale by a randomly generated scale between min and max speed.
+            Assumed normalised already, and likely already oriented in the right direction.
+        */
+        virtual void genEmissionVelocity(Vector3& destVector);
+
+        /** Internal utility method for generating a time-to-live for a particle. */
+        virtual Real genEmissionTTL(void);
+
+        /** Internal utility method for generating a colour for a particle. */
+        virtual void genEmissionColour(ColourValue& destColour);
+
+        /** Internal utility method for generating an emission count based on a constant emission rate. */
+        virtual unsigned short genConstantEmissionCount(Real timeElapsed);
+
+        /** Internal method for setting up the basic parameter definitions for a subclass. 
+        @remarks
+            Because StringInterface holds a dictionary of parameters per class, subclasses need to
+            call this to ask the base class to add it's parameters to their dictionary as well.
+            Can't do this in the constructor because that runs in a non-virtual context.
+        @par
+            The subclass must have called it's own createParamDictionary before calling this method.
+        */
+        void addBaseParameters(void);
+
+        /** Internal method for initialising the duration & repeat of an emitter. */
+        void initDurationRepeat(void);
+
+
+    public:
+        ParticleEmitter(ParticleSystem* psys);
+        /** Virtual destructor essential. */
+        virtual ~ParticleEmitter();
+
+        /** Sets the position of this emitter relative to the particle system center. */
+        virtual void setPosition(const Vector3& pos);
+
+        /** Returns the position of this emitter relative to thte center of the particle system. */
+        virtual const Vector3& getPosition(void) const;
+
+        /** Sets the direction of the emitter.
+        @remarks
+            Most emitters will have a base direction in which they emit particles (those which
+            emit in all directions will ignore this parameter). They may not emit exactly along this
+            vector for every particle, many will introduce a random scatter around this vector using 
+            the angle property.
+        @param direction
+            The base direction for particles emitted.
+        */
+        virtual void setDirection(const Vector3& direction);
+
+        /** Returns the base direction of the emitter. */
+        virtual const Vector3& getDirection(void) const;
+
+        /** Sets the maximum angle away from the emitter direction which particle will be emitted.
+        @remarks
+            Whilst the direction property defines the general direction of emission for particles, 
+            this property defines how far the emission angle can deviate away from this base direction.
+            This allows you to create a scatter effect - if set to 0, all particles will be emitted
+            exactly along the emitters direction vector, wheras if you set it to 180 degrees or more,
+            particles will be emitted in a sphere, i.e. in all directions.
+        @param degrees
+            Maximum angle which initial particle direction can deviate from the emitter base direction vector.
+        */
+        virtual void setAngle(const Radian& angle);
+#ifndef OGRE_FORCE_ANGLE_TYPES
+        inline void setAngle(Real angle) {
+            setAngle ( Angle(angle) );
+        }
+#endif//OGRE_FORCE_ANGLE_TYPES
+
+        /** Returns the maximum angle which the initial particle direction can deviate from the emitters base direction. */
+        virtual const Radian& getAngle(void) const;
+
+        /** Sets the initial velocity of particles emitted.
+        @remarks
+            This method sets a constant speed for emitted particles. See the alternate version
+            of this method which takes 2 parameters if you want a variable speed. 
+        @param
+            speed The initial speed in world units per second which every particle emitted starts with.
+        */
+        virtual void setParticleVelocity(Real speed);
+
+
+        /** Sets the initial velocity range of particles emitted.
+        @remarks
+            This method sets the range of starting speeds for emitted particles. 
+            See the alternate version of this method which takes 1 parameter if you want a 
+            constant speed. This emitter will randomly choose a speed between the minimum and 
+            maximum for each particle.
+        @param max The maximum speed in world units per second for the initial particle speed on emission.
+        @param min The minimum speed in world units per second for the initial particle speed on emission.
+        */
+        virtual void setParticleVelocity(Real min, Real max);
+        /** Returns the minimum particle velocity. */
+        virtual void setMinParticleVelocity(Real min);
+        /** Returns the maximum particle velocity. */
+        virtual void setMaxParticleVelocity(Real max);
+
+        /** Returns the initial velocity of particles emitted. */
+        virtual Real getParticleVelocity(void) const;
+
+        /** Returns the minimum particle velocity. */
+        virtual Real getMinParticleVelocity(void) const;
+
+        /** Returns the maximum particle velocity. */
+        virtual Real getMaxParticleVelocity(void) const;
+
+        /** Sets the emission rate for this emitter.
+        @remarks
+            This method tells the emitter how many particles per second should be emitted. The emitter
+            subclass does not have to emit these in a continuous burst - this is a relative parameter
+            and the emitter may choose to emit all of the second's worth of particles every half-second
+            for example. This is controlled by the emitter's getEmissionCount method.
+        @par
+            Also, if the ParticleSystem's particle quota is exceeded, not all the particles requested
+            may be actually emitted.
+        @param
+            particlesPerSecond The number of particles to be emitted every second.
+        */
+        virtual void setEmissionRate(Real particlesPerSecond);
+
+        /** Returns the emission rate set for this emitter. */
+        virtual Real getEmissionRate(void) const;
+
+        /** Sets the lifetime of all particles emitted.
+        @remarks
+            The emitter initialises particles with a time-to-live (TTL), the number of seconds a particle
+            will exist before being destroyed. This method sets a constant TTL for all particles emitted.
+            Note that affectors are able to modify the TTL of particles later.
+        @par
+            Also see the alternate version of this method which takes a min and max TTL in order to 
+            have the TTL vary per particle.
+        @param ttl The number of seconds each particle will live for.
+        */
+        virtual void setTimeToLive(Real ttl);
+        /** Sets the range of lifetime for particles emitted.
+        @remarks
+            The emitter initialises particles with a time-to-live (TTL), the number of seconds a particle
+            will exist before being destroyed. This method sets a range for the TTL for all particles emitted;
+            the ttl may be randomised between these 2 extremes or will vary some other way depending on the
+            emitter.
+            Note that affectors are able to modify the TTL of particles later.
+        @par
+            Also see the alternate version of this method which takes a single TTL in order to 
+            set a constant TTL for all particles.
+        @param minTtl The minimum number of seconds each particle will live for.
+        @param maxTtl The maximum number of seconds each particle will live for.
+        */
+        virtual void setTimeToLive(Real minTtl, Real maxTtl);
+
+        /** Sets the minimum time each particle will live for. */
+        virtual void setMinTimeToLive(Real min);
+        /** Sets the maximum time each particle will live for. */
+        virtual void setMaxTimeToLive(Real max);
+        
+        /** Gets the time each particle will live for. */
+        virtual Real getTimeToLive(void) const;
+
+        /** Gets the minimum time each particle will live for. */
+        virtual Real getMinTimeToLive(void) const;
+        /** Gets the maximum time each particle will live for. */
+        virtual Real getMaxTimeToLive(void) const;
+
+        /** Sets the initial colour of particles emitted.
+        @remarks
+            Particles have an initial colour on emission which the emitter sets. This method sets
+            this colour. See the alternate version of this method which takes 2 colours in order to establish 
+            a range of colours to be assigned to particles.
+        @param colour The colour which all particles will be given on emission.
+        */
+        virtual void setColour(const ColourValue& colour);
+        /** Sets the range of colours for emitted particles.
+        @remarks
+            Particles have an initial colour on emission which the emitter sets. This method sets
+            the range of this colour. See the alternate version of this method which takes a single colour
+            in order to set a constant colour for all particles. Emitters may choose to randomly assign
+            a colour in this range, or may use some other method to vary the colour.
+        @param colourStart The start of the colour range
+        @param colourEnd The end of the colour range
+        */
+        virtual void setColour(const ColourValue& colourStart, const ColourValue& colourEnd);
+        /** Sets the minimum colour of particles to be emitted. */
+        virtual void setColourRangeStart(const ColourValue& colour);
+        /** Sets the maximum colour of particles to be emitted. */
+        virtual void setColourRangeEnd(const ColourValue& colour);
+        /** Gets the colour of particles to be emitted. */
+        virtual const ColourValue& getColour(void) const;
+        /** Gets the minimum colour of particles to be emitted. */
+        virtual const ColourValue& getColourRangeStart(void) const;
+        /** Gets the maximum colour of particles to be emitted. */
+        virtual const ColourValue& getColourRangeEnd(void) const;
+
+        /** Gets the number of particles which this emitter would like to emit based on the time elapsed.
+        @remarks
+            For efficiency the emitter does not actually create new Particle instances (these are reused
+            by the ParticleSystem as existing particles 'die'). The implementation for this method must
+            return the number of particles the emitter would like to emit given the number of seconds which
+            have elapsed (passed in as a parameter).
+        @par
+            Based on the return value from this method, the ParticleSystem class will call 
+            _initParticle once for each particle it chooses to allow to be emitted by this emitter.
+            The emitter should not track these _initParticle calls, it should assume all emissions
+            requested were made (even if they could not be because of particle quotas).
+        */
+        virtual unsigned short _getEmissionCount(Real timeElapsed) = 0;
+
+        /** Initialises a particle based on the emitter's approach and parameters.
+        @remarks
+            See the _getEmissionCount method for details of why there is a separation between
+            'requested' emissions and actual initialised particles.
+        @param
+            pParticle Pointer to a particle which must be initialised based on how this emitter
+            starts particles. This is passed as a pointer rather than being created by the emitter so the
+            ParticleSystem can reuse Particle instances, and can also set defaults itself.
+        */
+        virtual void _initParticle(Particle* pParticle) {
+            // Initialise size incase it's been altered
+            pParticle->resetDimensions();
+        }
+
+
+        /** Returns the name of the type of emitter. 
+        @remarks
+            This property is useful for determining the type of emitter procedurally so another
+            can be created.
+        */
+        const String &getType(void) const { return mType; }
+
+        /** Sets whether or not the emitter is enabled.
+        @remarks
+            You can turn an emitter off completely by setting this parameter to false.
+        */
+        virtual void setEnabled(bool enabled);
+
+        /** Gets the flag indicating if this emitter is enabled or not. */
+        virtual bool getEnabled(void) const;
+
+        /** Sets the 'start time' of this emitter.
+        @remarks
+            By default an emitter starts straight away as soon as a ParticleSystem is first created,
+            or also just after it is re-enabled. This parameter allows you to set a time delay so
+            that the emitter does not 'kick in' until later.
+        @param startTime The time in seconds from the creation or enabling of the emitter.
+        */
+        virtual void setStartTime(Real startTime);
+        /** Gets the start time of the emitter. */
+        virtual Real getStartTime(void) const;
+
+        /** Sets the duration of the emitter.
+        @remarks
+            By default emitters run indefinitely (unless you manually disable them). By setting this
+            parameter, you can make an emitter turn off on it's own after a set number of seconds. It
+            will then remain disabled until either setEnabled(true) is called, or if the 'repeatAfter' parameter
+            has been set it will also repeat after a number of seconds.
+        @par
+            Also see the alternative version of this method which allows you to set a min and max duration for
+            a random variable duration.
+        @param duration The duration in seconds.
+        */
+        virtual void setDuration(Real duration);
+
+        /** Gets the duration of the emitter from when it is created or re-enabled. */
+        virtual Real getDuration(void) const;
+
+        /** Sets the range of random duration for this emitter. 
+        @remarks
+            By default emitters run indefinitely (unless you manually disable them). By setting this
+            parameter, you can make an emitter turn off on it's own after a random number of seconds. It
+            will then remain disabled until either setEnabled(true) is called, or if the 'repeatAfter' parameter
+            has been set it will also repeat after a number of seconds.
+        @par
+            Also see the alternative version of this method which allows you to set a constant duration.
+        @param min The minimum duration in seconds.
+        @param max The minimum duration in seconds.
+        */
+        virtual void setDuration(Real min, Real max);
+        /** Sets the minimum duration of this emitter in seconds (see setDuration for more details) */
+        virtual void setMinDuration(Real min);
+        /** Sets the maximum duration of this emitter in seconds (see setDuration for more details) */
+        virtual void setMaxDuration(Real max);
+        /** Gets the minimum duration of this emitter in seconds (see setDuration for more details) */
+        virtual Real getMinDuration(void) const;
+        /** Gets the maximum duration of this emitter in seconds (see setDuration for more details) */
+        virtual Real getMaxDuration(void) const;
+
+        /** Sets the time between repeats of the emitter.
+        @remarks
+            By default emitters run indefinitely (unless you manually disable them). However, if you manually
+            disable the emitter (by calling setEnabled(false), or it's duration runs out, it will cease to emit
+        @par
+            Also see the alternative version of this method which allows you to set a min and max duration for
+            a random variable duration.
+        @param duration The duration in seconds.
+        */
+        virtual void setRepeatDelay(Real duration);
+
+        /** Gets the duration of the emitter from when it is created or re-enabled. */
+        virtual Real getRepeatDelay(void) const;
+
+        /** Sets the range of random duration for this emitter. 
+        @remarks
+            By default emitters run indefinitely (unless you manually disable them). By setting this
+            parameter, you can make an emitter turn off on it's own after a random number of seconds. It
+            will then remain disabled until either setEnabled(true) is called, or if the 'repeatAfter' parameter
+            has been set it will also repeat after a number of seconds.
+        @par
+            Also see the alternative version of this method which allows you to set a constant duration.
+        @param min The minimum duration in seconds.
+        @param max The minimum duration in seconds.
+        */
+        virtual void setRepeatDelay(Real min, Real max);
+        /** Sets the minimum duration of this emitter in seconds (see setRepeatDelay for more details) */
+        virtual void setMinRepeatDelay(Real min);
+        /** Sets the maximum duration of this emitter in seconds (see setRepeatDelay for more details) */
+        virtual void setMaxRepeatDelay(Real max);
+        /** Gets the minimum duration of this emitter in seconds (see setRepeatDelay for more details) */
+        virtual Real getMinRepeatDelay(void) const;
+        /** Gets the maximum duration of this emitter in seconds (see setRepeatDelay for more details) */
+        virtual Real getMaxRepeatDelay(void) const;
+
+
+
+    };
+
+}
+
+
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreInput.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreInput.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreInput.h	(revision 1092)
@@ -0,0 +1,369 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __Input_H__
+#define __Input_H__
+
+#include "OgrePrerequisites.h"
+
+namespace Ogre {
+
+    /** Keyboard scan codes - copied from DirectInput for now for speed.
+    */
+    enum KeyCode
+    {
+        KC_ESCAPE          =0x01,
+        KC_1               =0x02,
+        KC_2               =0x03,
+        KC_3               =0x04,
+        KC_4               =0x05,
+        KC_5               =0x06,
+        KC_6               =0x07,
+        KC_7               =0x08,
+        KC_8               =0x09,
+        KC_9               =0x0A,
+        KC_0               =0x0B,
+        KC_MINUS           =0x0C,    /* - on main keyboard */
+        KC_EQUALS          =0x0D,
+        KC_BACK            =0x0E,    /* backspace */
+        KC_TAB             =0x0F,
+        KC_Q               =0x10,
+        KC_W               =0x11,
+        KC_E               =0x12,
+        KC_R               =0x13,
+        KC_T               =0x14,
+        KC_Y               =0x15,
+        KC_U               =0x16,
+        KC_I               =0x17,
+        KC_O               =0x18,
+        KC_P               =0x19,
+        KC_LBRACKET        =0x1A,
+        KC_RBRACKET        =0x1B,
+        KC_RETURN          =0x1C,    /* Enter on main keyboard */
+        KC_LCONTROL        =0x1D,
+        KC_A               =0x1E,
+        KC_S               =0x1F,
+        KC_D               =0x20,
+        KC_F               =0x21,
+        KC_G               =0x22,
+        KC_H               =0x23,
+        KC_J               =0x24,
+        KC_K               =0x25,
+        KC_L               =0x26,
+        KC_SEMICOLON       =0x27,
+        KC_APOSTROPHE      =0x28,
+        KC_GRAVE           =0x29,    /* accent grave */
+        KC_LSHIFT          =0x2A,
+        KC_BACKSLASH       =0x2B,
+        KC_Z               =0x2C,
+        KC_X               =0x2D,
+        KC_C               =0x2E,
+        KC_V               =0x2F,
+        KC_B               =0x30,
+        KC_N               =0x31,
+        KC_M               =0x32,
+        KC_COMMA           =0x33,
+        KC_PERIOD          =0x34,    /* . on main keyboard */
+        KC_SLASH           =0x35,    /* '/' on main keyboard */
+        KC_RSHIFT          =0x36,
+        KC_MULTIPLY        =0x37,    /* * on numeric keypad */
+        KC_LMENU           =0x38,    /* left Alt */
+        KC_SPACE           =0x39,
+        KC_CAPITAL         =0x3A,
+        KC_F1              =0x3B,
+        KC_F2              =0x3C,
+        KC_F3              =0x3D,
+        KC_F4              =0x3E,
+        KC_F5              =0x3F,
+        KC_F6              =0x40,
+        KC_F7              =0x41,
+        KC_F8              =0x42,
+        KC_F9              =0x43,
+        KC_F10             =0x44,
+        KC_NUMLOCK         =0x45,
+        KC_SCROLL          =0x46,    /* Scroll Lock */
+        KC_NUMPAD7         =0x47,
+        KC_NUMPAD8         =0x48,
+        KC_NUMPAD9         =0x49,
+        KC_SUBTRACT        =0x4A,    /* - on numeric keypad */
+        KC_NUMPAD4         =0x4B,
+        KC_NUMPAD5         =0x4C,
+        KC_NUMPAD6         =0x4D,
+        KC_ADD             =0x4E,    /* + on numeric keypad */
+        KC_NUMPAD1         =0x4F,
+        KC_NUMPAD2         =0x50,
+        KC_NUMPAD3         =0x51,
+        KC_NUMPAD0         =0x52,
+        KC_DECIMAL         =0x53,    /* . on numeric keypad */
+        KC_OEM_102         =0x56,    /* < > | on UK/Germany keyboards */
+        KC_F11             =0x57,
+        KC_F12             =0x58,
+        KC_F13             =0x64,    /*                     (NEC PC98) */
+        KC_F14             =0x65,    /*                     (NEC PC98) */
+        KC_F15             =0x66,    /*                     (NEC PC98) */
+        KC_KANA            =0x70,    /* (Japanese keyboard)            */
+        KC_ABNT_C1         =0x73,    /* / ? on Portugese (Brazilian) keyboards */
+        KC_CONVERT         =0x79,    /* (Japanese keyboard)            */
+        KC_NOCONVERT       =0x7B,    /* (Japanese keyboard)            */
+        KC_YEN             =0x7D,    /* (Japanese keyboard)            */
+        KC_ABNT_C2         =0x7E,    /* Numpad . on Portugese (Brazilian) keyboards */
+        KC_NUMPADEQUALS    =0x8D,    /* = on numeric keypad (NEC PC98) */
+        KC_PREVTRACK       =0x90,    /* Previous Track (KC_CIRCUMFLEX on Japanese keyboard) */
+        KC_AT              =0x91,    /*                     (NEC PC98) */
+        KC_COLON           =0x92,    /*                     (NEC PC98) */
+        KC_UNDERLINE       =0x93,    /*                     (NEC PC98) */
+        KC_KANJI           =0x94,    /* (Japanese keyboard)            */
+        KC_STOP            =0x95,    /*                     (NEC PC98) */
+        KC_AX              =0x96,    /*                     (Japan AX) */
+        KC_UNLABELED       =0x97,    /*                        (J3100) */
+        KC_NEXTTRACK       =0x99,    /* Next Track */
+        KC_NUMPADENTER     =0x9C,    /* Enter on numeric keypad */
+        KC_RCONTROL        =0x9D,
+        KC_MUTE            =0xA0,    /* Mute */
+        KC_CALCULATOR      =0xA1,    /* Calculator */
+        KC_PLAYPAUSE       =0xA2,    /* Play / Pause */
+        KC_MEDIASTOP       =0xA4,    /* Media Stop */
+        KC_VOLUMEDOWN      =0xAE,    /* Volume - */
+        KC_VOLUMEUP        =0xB0,    /* Volume + */
+        KC_WEBHOME         =0xB2,    /* Web home */
+        KC_NUMPADCOMMA     =0xB3,    /* , on numeric keypad (NEC PC98) */
+        KC_DIVIDE          =0xB5,    /* / on numeric keypad */
+        KC_SYSRQ           =0xB7,
+        KC_RMENU           =0xB8,    /* right Alt */
+        KC_PAUSE           =0xC5,    /* Pause */
+        KC_HOME            =0xC7,    /* Home on arrow keypad */
+        KC_UP              =0xC8,    /* UpArrow on arrow keypad */
+        KC_PGUP            =0xC9,    /* PgUp on arrow keypad */
+        KC_LEFT            =0xCB,    /* LeftArrow on arrow keypad */
+        KC_RIGHT           =0xCD,    /* RightArrow on arrow keypad */
+        KC_END             =0xCF,    /* End on arrow keypad */
+        KC_DOWN            =0xD0,    /* DownArrow on arrow keypad */
+        KC_PGDOWN          =0xD1,    /* PgDn on arrow keypad */
+        KC_INSERT          =0xD2,    /* Insert on arrow keypad */
+        KC_DELETE          =0xD3,    /* Delete on arrow keypad */
+        KC_LWIN            =0xDB,    /* Left Windows key */
+        KC_RWIN            =0xDC,    /* Right Windows key */
+        KC_APPS            =0xDD,    /* AppMenu key */
+        KC_POWER           =0xDE,    /* System Power */
+        KC_SLEEP           =0xDF,    /* System Sleep */
+        KC_WAKE            =0xE3,    /* System Wake */
+        KC_WEBSEARCH       =0xE5,    /* Web Search */
+        KC_WEBFAVORITES    =0xE6,    /* Web Favorites */
+        KC_WEBREFRESH      =0xE7,    /* Web Refresh */
+        KC_WEBSTOP         =0xE8,    /* Web Stop */
+        KC_WEBFORWARD      =0xE9,    /* Web Forward */
+        KC_WEBBACK         =0xEA,    /* Web Back */
+        KC_MYCOMPUTER      =0xEB,    /* My Computer */
+        KC_MAIL            =0xEC,    /* Mail */
+        KC_MEDIASELECT     =0xED     /* Media Select */
+    };
+
+    /** Structure representing a snapshot of the state of the mouse
+        input controller. */
+    struct _OgreExport MouseState
+    {
+        /** Absolute position of the mouse pointer. */
+        long Xabs, Yabs, Zabs;
+        /** Relative position of the mouse pointer. */
+        long Xrel, Yrel, Zrel;
+        /** The buttons that have been pressed. Each bit maps to a mouse
+        button. */
+        long Buttons;
+
+        /** Retrieves the pressed state of a mouse button. */
+        inline long isButtonDown( uchar button ) const
+        {
+            return Buttons & ( 1 << button );
+        }
+    };
+
+    /** Abstract class which allows input to be read from various
+        controllers.
+        @remarks
+            You can access an appropriate concrete subclass of this interface by
+            calling PlatformManager::createInputReader.
+        @warning Temporary implementation only. This class is likely to be
+            refactored into a better design when I get time to look at it
+            properly. For now it's a quick-and-dirty way to get what I need.
+        @see
+            PlatformManager::createInputReader
+    */
+    class _OgreExport InputReader
+    {
+    public:
+        InputReader();
+	    virtual ~InputReader();
+
+	    /** Tells the reader to use buffered input and update the passed in queue.
+        @remarks
+            The default behaviour of the input reader is simply to capture the
+            current state of the mouse / keyboard on demand. An alternative is to use 
+            buffered input where all events are registered on a queue.
+        */
+	    void useBufferedInput(EventQueue* pEventQueue, bool keys = true, bool mouse = true) ;
+
+	    virtual void setBufferedInput(bool keys, bool mouse) ;
+			
+
+		/** Initialise the input system.
+            @note
+                Only keyboard and mouse currently implemented.
+            @param
+                pWindow The window to capture input for
+            @param
+                useKeyboard If true, keyboard input will be supported.
+            @param
+                useMouse If true, mouse input will be supported.
+            @param
+                useGameController If true, joysticks/gamepads will be supported.
+        */
+        virtual void initialise( 
+            RenderWindow* pWindow, 
+            bool useKeyboard = true, 
+            bool useMouse = true, 
+            bool useGameController = false ) = 0;
+
+        /** Captures the state of all the input devices.
+            @remarks
+                This method captures the state of all input devices and
+                stores it internally for use when the enquiry methods are
+                next called. This is done to ensure that all input is
+                captured at once and therefore combinations of input are not
+                subject to time differences when methods are called.
+
+        */
+        virtual void capture() = 0;
+
+        /** Determines if the specified key is currently depressed.
+            @note In immediate mode, this enquiry method uses the state of the 
+                keyboard at the last 'capture' call.
+        */
+        virtual bool isKeyDown( KeyCode kc ) const;
+
+        /** Retrieves the relative position of the mouse when capture was
+            called relative to the last time. */
+        virtual long getMouseRelativeX() const { return getMouseRelX(); }
+
+        /** Retrieves the relative position of the mouse when capture was
+            called relative to the last time. */
+        virtual long getMouseRelativeY() const { return getMouseRelY(); }
+
+        /** Retrieves the relative position of the mouse when capture was
+            called relative to the last time. */
+        virtual long getMouseRelativeZ() const { return getMouseRelZ(); }
+
+        /** Retrieves the relative (compared to the last input poll) mouse movement
+            on the X (horizontal) axis. */
+        virtual long getMouseRelX() const = 0;
+
+        /** Retrieves the relative (compared to the last input poll) mouse movement
+            on the Y (vertical) axis. */
+        virtual long getMouseRelY() const = 0;
+
+        /** Retrieves the relative (compared to the last input poll) mouse movement
+            on the Z (mouse wheel) axis. */
+        virtual long getMouseRelZ() const = 0;
+
+        /** Retrieves the absolute mouse position on the X (horizontal) axis. */
+        virtual long getMouseAbsX() const = 0;
+        /** Retrieves the absolute mouse position on the Y (vertical) axis. */
+        virtual long getMouseAbsY() const = 0;
+        /** Retrieves the absolute mouse position on the Z (mouse wheel) axis. */
+        virtual long getMouseAbsZ() const = 0;
+
+        /** Retrieves the current state of the mouse. */
+        virtual void getMouseState( MouseState& state ) const = 0;
+
+        /** Retrieves the state of a mouse button. */
+        virtual bool getMouseButton( uchar button ) const = 0;
+
+		/** Adds a mouse motion listener to the cursor object.
+		    This keeps the Cursor object hidden. */
+		void addCursorMoveListener( MouseMotionListener* c );
+	
+		/** Remove a mouse motion listener to the cursor object.
+		    This keeps the Cursor object hidden. */
+		void removeCursorMoveListener( MouseMotionListener* c );
+		static char getKeyChar(int keyCode, long modifiers = 0);
+
+
+	protected:
+
+		/** The modifiers are a binary flags that represent what buttons are pressed, 
+            and what key modifiers are down (e.g. shift/alt). */
+		long mModifiers;
+
+		/** Internal Cursor object. 
+            @remarks
+                This is a mathematical representation of where the cursor is, it does 
+                not draw a cursor.
+            @see CursorGuiElement. */
+
+		Cursor* mCursor;
+
+		/** EventQueue is used for buffered input support. */
+		EventQueue* mEventQueue;
+
+		/** Wether to use buffering input support - buffering support relies on using 
+            an EventQueue. 
+            @see class EventQueue */
+		bool mUseBufferedKeys, mUseBufferedMouse;
+
+        /** The mouse state in immediate mode. */
+        MouseState mMouseState;
+
+        /// Set of all the keys currently depressed based on buffered input events
+        typedef std::set<KeyCode> BufferedKeysDownSet;
+        BufferedKeysDownSet mBufferedKeysDown;
+
+		/** Creates mouse moved or dragged events depending if any button is pressed. */
+		void mouseMoved();
+
+		/** Creates a MouseEvent that first gets processed by the cursor, then gets 
+            pushed on the queue. */
+		void createMouseEvent(int id, int button);
+
+		/** Creates mouse pressed, released, and clicked events. */
+		void triggerMouseButton(int nMouseCode, bool mousePressed);
+
+		void createKeyEvent(int id, int key);
+		void keyChanged(int key, bool down);
+		
+		/** Return whether a key is down in immediate mode. */
+        virtual bool isKeyDownImmediate( KeyCode kc ) const = 0;
+    };
+
+
+    /** Defines the interface a platform-specific library must implement.
+        @remarks
+            Any library (.dll, .so) wishing to implement a
+            platform-specific version of this input reader must export the
+            symbol 'createInputReader' with the signature void
+            createPlatformInputReader(InputReader** ppReader).
+    */
+    typedef void (*DLL_CREATEINPUTREADER)(InputReader** ppReader);
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePlane.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePlane.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePlane.h	(revision 1092)
@@ -0,0 +1,104 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+// Original free version by:
+// Magic Software, Inc.
+// http://www.magic-software.com
+// Copyright (c) 2000, All Rights Reserved
+
+#ifndef __Plane_H__
+#define __Plane_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreVector3.h"
+
+namespace Ogre {
+
+    /** Defines a plane in 3D space.
+        @remarks
+            A plane is defined in 3D space by the equation
+            Ax + By + Cz + D = 0
+        @par
+            This equates to a vector (the normal of the plane, whose x, y
+            and z components equate to the coefficients A, B and C
+            respectively), and a constant (D) which is the distance along
+            the normal you have to go to move the plane back to the origin.
+     */
+    class _OgreExport Plane
+    {
+    public:
+        /** Default constructor - sets everything to 0.
+        */
+        Plane ();
+        Plane (const Plane& rhs);
+        /** Construct a plane through a normal, and a distance to move the plane along the normal.*/
+        Plane (const Vector3& rkNormal, Real fConstant);
+        Plane (const Vector3& rkNormal, const Vector3& rkPoint);
+        Plane (const Vector3& rkPoint0, const Vector3& rkPoint1,
+            const Vector3& rkPoint2);
+
+        /** The "positive side" of the plane is the half space to which the
+            plane normal points. The "negative side" is the other half
+            space. The flag "no side" indicates the plane itself.
+        */
+        enum Side
+        {
+            NO_SIDE,
+            POSITIVE_SIDE,
+            NEGATIVE_SIDE
+        };
+
+        Side getSide (const Vector3& rkPoint) const;
+
+        /** This is a pseudodistance. The sign of the return value is
+            positive if the point is on the positive side of the plane,
+            negative if the point is on the negative side, and zero if the
+            point is on the plane.
+            @par
+            The absolute value of the return value is the true distance only
+            when the plane normal is a unit length vector.
+        */
+        Real getDistance (const Vector3& rkPoint) const;
+
+        /** Redefine this plane based on 3 points. */
+        void redefine(const Vector3& rkPoint0, const Vector3& rkPoint1,
+            const Vector3& rkPoint2);
+
+        Vector3 normal;
+        Real d;
+        /// Comparison operator
+        bool operator==(const Plane& rhs) const
+        {
+            return (rhs.d == d && rhs.normal == normal);
+        }
+
+        _OgreExport friend std::ostream& operator<< (std::ostream& o, Plane& p);
+    };
+
+    typedef std::vector<Plane> PlaneList;
+
+} // namespace Ogre
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreTextureUnitState.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreTextureUnitState.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreTextureUnitState.h	(revision 1092)
@@ -0,0 +1,950 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://ogre.sourceforge.net/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __TextureUnitState_H__
+#define __TextureUnitState_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreCommon.h"
+#include "OgreBlendMode.h"
+#include "OgreMatrix4.h"
+#include "OgreIteratorWrappers.h"
+#include "OgreString.h"
+#include "OgreTexture.h"
+
+namespace Ogre {
+    /** Class representing the state of a single texture unit during a Pass of a
+        Technique, of a Material.
+    @remarks
+        Texture units are pipelines for retrieving texture data for rendering onto
+        your objects in the world. Using them is common to both the fixed-function and 
+        the programmable (vertex and fragment program) pipeline, but some of the 
+        settings will only have an effect in the fixed-function pipeline (for example, 
+        setting a texture rotation will have no effect if you use the programmable
+        pipeline, because this is overridden by the fragment program). The effect
+        of each setting as regards the 2 pipelines is commented in each setting.
+    @par
+        When I use the term 'fixed-function pipeline' I mean traditional rendering
+        where you do not use vertex or fragment programs (shaders). Programmable 
+        pipeline means that for this pass you are using vertex or fragment programs.
+    */
+    class _OgreExport TextureUnitState
+    {
+        friend class RenderSystem;
+    public:
+        /** Definition of the broad types of texture effect you can apply to a texture unit.
+        @note
+            Note that these have no effect when using the programmable pipeline, since their
+            effect is overridden by the vertex / fragment programs.
+        */
+        enum TextureEffectType
+        {
+            /// Generate all texture coords based on angle between camera and vertex
+            ET_ENVIRONMENT_MAP,
+            /// Generate texture coords based on a frustum
+            ET_PROJECTIVE_TEXTURE,
+            /// Constant u/v scrolling effect
+            ET_SCROLL,
+            /// Constant rotation
+            ET_ROTATE,
+            /// More complex transform
+            ET_TRANSFORM
+
+        };
+
+        /** Enumeration to specify type of envmap.
+        @note
+            Note that these have no effect when using the programmable pipeline, since their
+            effect is overridden by the vertex / fragment programs.
+        */
+        enum EnvMapType
+        {
+            /// Envmap based on vector from camera to vertex position, good for planar geometry
+            ENV_PLANAR,
+            /// Envmap based on dot of vector from camera to vertex and vertex normal, good for curves
+            ENV_CURVED,
+            /// Envmap entended to supply reflection vectors for cube mapping
+            ENV_REFLECTION,
+            /// Envmap entended to supply normal vectors for cube mapping
+            ENV_NORMAL
+        };
+
+        /** Useful enumeration when dealing with procedural transforms.
+        @note
+            Note that these have no effect when using the programmable pipeline, since their
+            effect is overridden by the vertex / fragment programs.
+        */
+        enum TextureTransformType
+        {
+            TT_TRANSLATE_U,
+            TT_TRANSLATE_V,
+            TT_SCALE_U,
+            TT_SCALE_V,
+            TT_ROTATE
+        };
+
+        /** Texture addressing modes - default is TAM_WRAP.
+        @note
+            These settings are relevant in both the fixed-function and the
+            programmable pipeline.
+        */
+        enum TextureAddressingMode
+        {
+            /// Texture wraps at values over 1.0
+            TAM_WRAP,
+            /// Texture mirrors (flips) at joins over 1.0
+            TAM_MIRROR,
+            /// Texture clamps at 1.0
+            TAM_CLAMP
+        };
+
+        /** Enum identifying the frame indexes for faces of a cube map (not the composite 3D type.
+        */
+        enum TextureCubeFace
+        {
+            CUBE_FRONT = 0,
+            CUBE_BACK = 1,
+            CUBE_LEFT = 2,
+            CUBE_RIGHT = 3,
+            CUBE_UP = 4,
+            CUBE_DOWN = 5
+        };
+
+        /** Internal structure defining a texture effect.
+        */
+        struct TextureEffect {
+            TextureEffectType type;
+            int subtype;
+            Real arg1, arg2;
+            WaveformType waveType;
+            Real base;
+            Real frequency;
+            Real phase;
+            Real amplitude;
+            Controller<Real>* controller;
+            const Frustum* frustum;
+        };
+
+
+        /** Default constructor.
+        */
+        TextureUnitState(Pass* parent);
+
+        TextureUnitState(Pass* parent, const TextureUnitState& oth );
+
+        TextureUnitState & operator = ( const TextureUnitState& oth );
+
+        /** Default destructor.
+        */
+        ~TextureUnitState();
+
+        /** Name-based constructor.
+        @param
+        name The basic name of the texture e.g. brickwall.jpg, stonefloor.png
+        @param
+        texCoordSet The index of the texture coordinate set to use.
+        */
+		TextureUnitState( Pass* parent, const String& texName, unsigned int texCoordSet = 0);
+
+        /** Get the name of current texture image for this layer.
+        @remarks
+        This will either always be a single name for this layer,
+        or will be the name of the current frame for an animated
+        or otherwise multi-frame texture.
+        @note
+        Applies to both fixed-function and programmable pipeline.
+        */
+        const String& getTextureName(void) const;
+
+        /** Sets this texture layer to use a single texture, given the
+        name of the texture to use on this layer.
+        @note
+        Applies to both fixed-function and programmable pipeline.
+        */
+        void setTextureName( const String& name, TextureType ttype = TEX_TYPE_2D, int mipmaps = -1 );
+
+        /** Sets this texture layer to use a combination of 6 texture maps, each one relating to a face of a cube.
+        @remarks
+        Cubic textures are made up of 6 separate texture images. Each one of these is an orthoganal view of the
+        world with a FOV of 90 degrees and an aspect ratio of 1:1. You can generate these from 3D Studio by
+        rendering a scene to a reflection map of a transparent cube and saving the output files.
+        @par
+        Cubic maps can be used either for skyboxes (complete wrap-around skies, like space) or as environment
+        maps to simulate reflections. The system deals with these 2 scenarios in different ways:
+        <ol>
+        <li>
+        <p>
+        for cubic environment maps, the 6 textures are combined into a single 'cubic' texture map which
+        is then addressed using 3D texture coordinates. This is required because you don't know what
+        face of the box you're going to need to address when you render an object, and typically you
+        need to reflect more than one face on the one object, so all 6 textures are needed to be
+        'active' at once. Cubic environment maps are enabled by calling this method with the forUVW
+        parameter set to true, and then calling setEnvironmentMap(true).
+        </p>
+        <p>
+        Note that not all cards support cubic environment mapping.
+        </p>
+        </li>
+        <li>
+        <p>
+        for skyboxes, the 6 textures are kept separate and used independently for each face of the skybox.
+        This is done because not all cards support 3D cubic maps and skyboxes do not need to use 3D
+        texture coordinates so it is simpler to render each face of the box with 2D coordinates, changing
+        texture between faces.
+        </p>
+        <p>
+        Skyboxes are created by calling SceneManager::setSkyBox.
+        </p>
+        </li>
+        </ul>
+        @note
+        Applies to both fixed-function and programmable pipeline.
+        @param
+        name The basic name of the texture e.g. brickwall.jpg, stonefloor.png. There must be 6 versions
+        of this texture with the suffixes _fr, _bk, _up, _dn, _lf, and _rt (before the extension) which
+        make up the 6 sides of the box. The textures must all be the same size and be powers of 2 in width & height.
+        If you can't make your texture names conform to this, use the alternative method of the same name which takes
+        an array of texture names instead.
+        @param
+        forUVW Set to true if you want a single 3D texture addressable with 3D texture coordinates rather than
+        6 separate textures. Useful for cubic environment mapping.
+        */
+        void setCubicTextureName( const String& name, bool forUVW = false );
+
+        /** Sets this texture layer to use a combination of 6 texture maps, each one relating to a face of a cube.
+        @remarks
+        Cubic textures are made up of 6 separate texture images. Each one of these is an orthoganal view of the
+        world with a FOV of 90 degrees and an aspect ratio of 1:1. You can generate these from 3D Studio by
+        rendering a scene to a reflection map of a transparent cube and saving the output files.
+        @par
+        Cubic maps can be used either for skyboxes (complete wrap-around skies, like space) or as environment
+        maps to simulate reflections. The system deals with these 2 scenarios in different ways:
+        <ol>
+        <li>
+        <p>
+        for cubic environment maps, the 6 textures are combined into a single 'cubic' texture map which
+        is then addressed using 3D texture coordinates. This is required because you don't know what
+        face of the box you're going to need to address when you render an object, and typically you
+        need to reflect more than one face on the one object, so all 6 textures are needed to be
+        'active' at once. Cubic environment maps are enabled by calling this method with the forUVW
+        parameter set to true, and then calling setEnvironmentMap(true).
+        </p>
+        <p>
+        Note that not all cards support cubic environment mapping.
+        </p>
+        </li>
+        <li>
+        <p>
+        for skyboxes, the 6 textures are kept separate and used independently for each face of the skybox.
+        This is done because not all cards support 3D cubic maps and skyboxes do not need to use 3D
+        texture coordinates so it is simpler to render each face of the box with 2D coordinates, changing
+        texture between faces.
+        </p>
+        <p>
+        Skyboxes are created by calling SceneManager::setSkyBox.
+        </p>
+        </li>
+        </ul>
+        @note
+        Applies to both fixed-function and programmable pipeline.
+        @param
+        name The basic name of the texture e.g. brickwall.jpg, stonefloor.png. There must be 6 versions
+        of this texture with the suffixes _fr, _bk, _up, _dn, _lf, and _rt (before the extension) which
+        make up the 6 sides of the box. The textures must all be the same size and be powers of 2 in width & height.
+        If you can't make your texture names conform to this, use the alternative method of the same name which takes
+        an array of texture names instead.
+        @param
+        forUVW Set to true if you want a single 3D texture addressable with 3D texture coordinates rather than
+        6 separate textures. Useful for cubic environment mapping.
+        */
+        void setCubicTextureName( const String* const names, bool forUVW = false );
+
+        /** Sets the names of the texture images for an animated texture.
+        @remarks
+        Animated textures are just a series of images making up the frames of the animation. All the images
+        must be the same size, and their names must have a frame number appended before the extension, e.g.
+        if you specify a name of "wall.jpg" with 3 frames, the image names must be "wall_0.jpg", "wall_1.jpg"
+        and "wall_2.jpg".
+        @par
+        You can change the active frame on a texture layer by calling the setCurrentFrame method.
+        @note
+        If you can't make your texture images conform to the naming standard layed out here, you
+        can call the alternative setAnimatedTextureName method which takes an array of names instead.
+        @note
+        Applies to both fixed-function and programmable pipeline.
+        @param
+        name The base name of the textures to use e.g. wall.jpg for frames wall_0.jpg, wall_1.jpg etc.
+        @param
+        numFrames The number of frames in the sequence.
+        @param
+        duration The length of time it takes to display the whole animation sequence, in seconds.
+        If 0, no automatic transition occurs.
+        */
+        void setAnimatedTextureName( const String& name, unsigned int numFrames, Real duration = 0 );
+
+        /** Sets the names of the texture images for an animated texture.
+        @remarks
+        This an alternative method to the one where you specify a single name and let the system derive
+        the names of each frame, incase your images can't conform to this naming standard.
+        @par
+        Animated textures are just a series of images making up the frames of the animation. All the images
+        must be the same size, and you must provide their names as an array in the first parameter.
+        You can change the active frame on a texture layer by calling the setCurrentFrame method.
+        @note
+        If you can make your texture images conform to a naming standard of basicName_frame.ext, you
+        can call the alternative setAnimatedTextureName method which just takes a base name instead.
+        @note
+        Applies to both fixed-function and programmable pipeline.
+        @param
+        names Pointer to array of names of the textures to use, in frame order.
+        @param
+        numFrames The number of frames in the sequence.
+        @param
+        duration The length of time it takes to display the whole animation sequence, in seconds.
+        If 0, no automatic transition occurs.
+        */
+        void setAnimatedTextureName( const String* const names, unsigned int numFrames, Real duration = 0 );
+
+        /** Returns the width and height of the texture in the given frame.
+        */
+        std::pair< uint, uint > getTextureDimensions( unsigned int frame = 0 ) const;
+
+        /** Changes the active frame in an animated or multi-image texture.
+        @remarks
+        An animated texture (or a cubic texture where the images are not combined for 3D use) is made up of
+        a number of frames. This method sets the active frame.
+        @note
+        Applies to both fixed-function and programmable pipeline.
+        */
+        void setCurrentFrame( unsigned int frameNumber );
+
+        /** Gets the active frame in an animated or multi-image texture layer.
+        @note
+        Applies to both fixed-function and programmable pipeline.
+        */
+        unsigned int getCurrentFrame(void) const;
+
+        /** Gets the name of the texture associated with a frame.
+        @note
+        Applies to both fixed-function and programmable pipeline.
+        */
+        const String& getFrameTextureName(unsigned int frameNumber) const;
+
+        /** Gets the number of frames for a texture.
+        @note
+        Applies to both fixed-function and programmable pipeline.
+        */
+        unsigned int getNumFrames(void) const;
+
+        /** Returns true if this texture unit is either a series of 6 2D textures, each
+            in it's own frame, or is a full 3D cube map. You can tell which by checking
+            getTextureType.
+        @note
+        Applies to both fixed-function and programmable pipeline.
+        */
+        bool isCubic(void) const;
+
+        /** Returns true if this texture layer uses a composite 3D cubic texture.
+        @note
+        Applies to both fixed-function and programmable pipeline.
+        */
+        bool is3D(void) const;
+
+        /** Returns the type of this texture.
+        @note
+        Applies to both fixed-function and programmable pipeline.
+        */
+        TextureType getTextureType(void) const;
+
+        /** Gets the index of the set of texture co-ords this layer uses.
+        @note
+        Applies to both fixed-function and programmable pipeline.
+        */
+        unsigned int getTextureCoordSet(void) const;
+
+        /** Sets the index of the set of texture co-ords this layer uses.
+        @note
+        Default is 0 for all layers. Only change this if you have provided multiple texture co-ords per
+        vertex.
+        @note
+        Applies to both fixed-function and programmable pipeline.
+        */
+        void setTextureCoordSet(unsigned int set);
+
+        /** Sets a matrix used to transform any texture coordinates on this layer.
+        @remarks
+        Texture coordinates can be modified on a texture layer to create effects like scrolling
+        textures. A texture transform can either be applied to a layer which takes the source coordinates
+        from a fixed set in the geometry, or to one which generates them dynamically (e.g. environment mapping).
+        @par
+        It's obviously a bit impractical to create scrolling effects by calling this method manually since you
+        would have to call it every framw with a slight alteration each time, which is tedious. Instead
+        you can use the ControllerManager class to create a Controller object which will manage the
+        effect over time for you. See the ControllerManager::createTextureScroller and it's sibling methods for details.<BR>
+        In addition, if you want to set the individual texture transformations rather than concatenating them
+        yourself, use setTextureScroll, setTextureScale and setTextureRotate.
+        @note
+        Has no effect in the programmable pipeline.
+        */
+        void setTextureTransform(const Matrix4& xform);
+
+        /** Gets the current texture transformation matrix.
+        @remarks
+        Causes a reclaculation of the matrix if any parameters have been changed via
+        setTextureScroll, setTextureScale and setTextureRotate.
+        @note
+        Has no effect in the programmable pipeline.
+        */
+        const Matrix4& getTextureTransform(void) const;
+
+        /** Sets the translation offset of the texture, ie scrolls the texture.
+        @remarks
+        This method sets the translation element of the texture transformation, and is easier to use than setTextureTransform if
+        you are combining translation, scaling and rotation in your texture transformation. Again if you want
+        to animate these values you need to use a Controller
+        @note
+        Has no effect in the programmable pipeline.
+        @param u The amount the texture should be moved horizontally (u direction).
+        @param v The amount the texture should be moved vertically (v direction).
+        @see
+        ControllerManager, Controller
+        */
+        void setTextureScroll(Real u, Real v);
+
+        /** As setTextureScroll, but sets only U value.
+        @note
+        Has no effect in the programmable pipeline.
+        */
+        void setTextureUScroll(Real value);
+        // get texture uscroll value
+        Real getTextureUScroll(void) const;
+
+        /** As setTextureScroll, but sets only V value.
+        @note
+        Has no effect in the programmable pipeline.
+        */
+        void setTextureVScroll(Real value);
+        // get texture vscroll value
+        Real getTextureVScroll(void) const;
+
+        /** As setTextureScale, but sets only U value.
+        @note
+        Has no effect in the programmable pipeline.
+        */
+        void setTextureUScale(Real value);
+        // get texture uscale value
+        Real getTextureUScale(void) const;
+
+        /** As setTextureScale, but sets only V value.
+        @note
+        Has no effect in the programmable pipeline.
+        */
+        void setTextureVScale(Real value);
+        // get texture vscale value
+        Real getTextureVScale(void) const;
+
+        /** Sets the scaling factor applied to texture coordinates.
+        @remarks
+        This method sets the scale element of the texture transformation, and is easier to use than
+        setTextureTransform if you are combining translation, scaling and rotation in your texture transformation. Again if you want
+        to animate these values you need to use a Controller (see ControllerManager and it's methods for
+        more information).
+        @note
+        Has no effect in the programmable pipeline.
+        @param
+        uScale The value by which the texture is to be scaled horizontally.
+        @param
+        vScale The value by which the texture is to be scaled vertically.
+        */
+        void setTextureScale(Real uScale, Real vScale);
+
+        /** Sets the anticlockwise rotation factor applied to texture coordinates.
+        @remarks
+        This sets a fixed rotation angle - if you wish to animate this, see the
+        ControllerManager::createTextureRotater method.
+        @note
+        Has no effect in the programmable pipeline.
+        @param
+        angle The angle of rotation (anticlockwise).
+        */
+        void setTextureRotate(const Radian& angle);
+#ifndef OGRE_FORCE_ANGLE_TYPES
+        inline void setTextureRotate(Real angle) {
+            setTextureRotate ( Degree(angle) );
+        }
+#endif//OGRE_FORCE_ANGLE_TYPES
+        // get texture rotation effects angle value
+        const Radian& getTextureRotate(void) const;
+
+        /** Gets the texture addressing mode, i.e. what happens at uv values above 1.0.
+        @note
+        The default is TAM_WRAP i.e. the texture repeats over values of 1.0.
+        */
+        TextureAddressingMode getTextureAddressingMode(void) const;
+
+        /** Sets the texture addressing mode, i.e. what happens at uv values above 1.0.
+        @note
+        The default is TAM_WRAP i.e. the texture repeats over values of 1.0.
+        @note
+        This applies for both the fixed-function and programmable pipelines.
+        */
+        void setTextureAddressingMode( TextureAddressingMode tam);
+
+        /** Setting advanced blending options.
+        @remarks
+        This is an extended version of the TextureUnitState::setColourOperation method which allows
+        extremely detailed control over the blending applied between this and earlier layers.
+        See the IMPORTANT note below about the issues between mulitpass and multitexturing that
+        using this method can create.
+        @par
+        Texture colour operations determine how the final colour of the surface appears when
+        rendered. Texture units are used to combine colour values from various sources (ie. the
+        diffuse colour of the surface from lighting calculations, combined with the colour of
+        the texture). This method allows you to specify the 'operation' to be used, ie. the
+        calculation such as adds or multiplies, and which values to use as arguments, such as
+        a fixed value or a value from a previous calculation.
+        @par
+        The defaults for each layer are:
+        <ul>
+        <li>op = LBX_MODULATE</li>
+        <li>source1 = LBS_TEXTURE</li>
+        <li>source2 = LBS_CURRENT</li>
+        </ul>
+        ie. each layer takes the colour results of the previous layer, and multiplies them
+        with the new texture being applied. Bear in mind that colours are RGB values from
+        0.0 - 1.0 so multiplying them together will result in values in the same range,
+        'tinted' by the multiply. Note however that a straight multiply normally has the
+        effect of darkening the textures - for this reason there are brightening operations
+        like LBO_MODULATE_X2. See the LayerBlendOperation and LayerBlendSource enumerated
+        types for full details.
+        @note
+        Because of the limitations on some underlying APIs (Direct3D included)
+        the LBS_TEXTURE argument can only be used as the first argument, not the second.
+        @par
+        The final 3 parameters are only required if you decide to pass values manually
+        into the operation, i.e. you want one or more of the inputs to the colour calculation
+        to come from a fixed value that you supply. Hence you only need to fill these in if
+        you supply LBS_MANUAL to the corresponding source, or use the LBX_BLEND_MANUAL
+        operation.
+        @warning
+        Ogre tries to use multitexturing hardware to blend texture layers
+        together. However, if it runs out of texturing units (e.g. 2 of a GeForce2, 4 on a
+        GeForce3) it has to fall back on multipass rendering, i.e. rendering the same object
+        multiple times with different textures. This is both less efficient and there is a smaller
+        range of blending operations which can be performed. For this reason, if you use this method
+        you MUST also call TextureUnitState::setColourOpMultipassFallback to specify which effect you
+        want to fall back on if sufficient hardware is not available.
+        @note
+        This has no effect in the programmable pipeline.
+        @param
+        If you wish to avoid having to do this, use the simpler TextureUnitState::setColourOperation method
+        which allows less flexible blending options but sets up the multipass fallback automatically,
+        since it only allows operations which have direct multipass equivalents.
+        @param
+        op The operation to be used, e.g. modulate (multiply), add, subtract
+        @param
+        source1 The source of the first colour to the operation e.g. texture colour
+        @param
+        source2 The source of the second colour to the operation e.g. current surface colour
+        @param
+        arg1 Manually supplied colour value (only required if source1 = LBS_MANUAL)
+        @param
+        arg2 Manually supplied colour value (only required if source2 = LBS_MANUAL)
+        @param
+        manualBlend Manually supplied 'blend' value - only required for operations
+        which require manual blend e.g. LBX_BLEND_MANUAL
+        */
+        void setColourOperationEx(
+            LayerBlendOperationEx op,
+            LayerBlendSource source1 = LBS_TEXTURE,
+            LayerBlendSource source2 = LBS_CURRENT,
+
+            const ColourValue& arg1 = ColourValue::White,
+            const ColourValue& arg2 = ColourValue::White,
+
+            Real manualBlend = 0.0);
+
+        /** Determines how this texture layer is combined with the one below it (or the diffuse colour of
+        the geometry if this is layer 0).
+        @remarks
+        This method is the simplest way to blend tetxure layers, because it requires only one parameter,
+        gives you the most common blending types, and automatically sets up 2 blending methods: one for
+        if single-pass multitexturing hardware is available, and another for if it is not and the blending must
+        be achieved through multiple rendering passes. It is, however, quite limited and does not expose
+        the more flexible multitexturing operations, simply because these can't be automatically supported in
+        multipass fallback mode. If want to use the fancier options, use TextureUnitState::setColourOperationEx,
+        but you'll either have to be sure that enough multitexturing units will be available, or you should
+        explicitly set a fallback using TextureUnitState::setColourOpMultipassFallback.
+        @note
+        The default method is LBO_MODULATE for all layers.
+        @note
+        This option has no effect in the programmable pipeline.
+        @param
+        op One of the LayerBlendOperation enumerated blending types.
+        */
+        void setColourOperation( const LayerBlendOperation op);
+
+        /** Sets the multipass fallback operation for this layer, if you used TextureUnitState::setColourOperationEx
+        and not enough multitexturing hardware is available.
+        @remarks
+        Because some effects exposed using TextureUnitState::setColourOperationEx are only supported under
+        multitexturing hardware, if the hardware is lacking the system must fallback on multipass rendering,
+        which unfortunately doesn't support as many effects. This method is for you to specify the fallback
+        operation which most suits you.
+        @par
+        You'll notice that the interface is the same as the Material::setSceneBlending method; this is
+        because multipass rendering IS effectively scene blending, since each layer is rendered on top
+        of the last using the same mechanism as making an object transparent, it's just being rendered
+        in the same place repeatedly to get the multitexture effect.
+        @par
+        If you use the simpler (and hence less flexible) TextureUnitState::setColourOperation method you
+        don't need to call this as the system sets up the fallback for you.
+        @note
+        This option has no effect in the programmable pipeline, because there is no multipass fallback
+        and multitexture blending is handled by the fragment shader.
+        */
+        void setColourOpMultipassFallback( const SceneBlendFactor sourceFactor, const SceneBlendFactor destFactor);
+
+        /** Get multitexturing colour blending mode.
+        */
+        const LayerBlendModeEx& getColourBlendMode(void) const;
+
+        /** Get multitexturing alpha blending mode.
+        */
+        const LayerBlendModeEx& getAlphaBlendMode(void) const;
+
+        /** Get the multipass fallback for colour blending operation source factor.
+        */
+        SceneBlendFactor getColourBlendFallbackSrc(void) const;
+
+        /** Get the multipass fallback for colour blending operation destination factor.
+        */
+        SceneBlendFactor getColourBlendFallbackDest(void) const;
+
+        /** Sets the alpha operation to be applied to this texture.
+        @remarks
+        This works in exactly the same way as setColourOperation, except
+        that the effect is applied to the level of alpha (i.e. transparency)
+        of the texture rather than its colour. When the alpha of a texel (a pixel
+        on a texture) is 1.0, it is opaque, wheras it is fully transparent if the
+        alpha is 0.0. Please refer to the setColourOperation method for more info.
+        @param
+        op The operation to be used, e.g. modulate (multiply), add, subtract
+        @param
+        source1 The source of the first alpha value to the operation e.g. texture alpha
+        @param
+        source2 The source of the second alpha value to the operation e.g. current surface alpha
+        @param
+        arg1 Manually supplied alpha value (only required if source1 = LBS_MANUAL)
+        @param
+        arg2 Manually supplied alpha value (only required if source2 = LBS_MANUAL)
+        @param
+        manualBlend Manually supplied 'blend' value - only required for operations
+        which require manual blend e.g. LBX_BLEND_MANUAL
+        @see
+        setColourOperation
+        @note
+        This option has no effect in the programmable pipeline.
+        */
+        void setAlphaOperation(LayerBlendOperationEx op,
+            LayerBlendSource source1 = LBS_TEXTURE,
+            LayerBlendSource source2 = LBS_CURRENT,
+            Real arg1 = 1.0,
+            Real arg2 = 1.0,
+            Real manualBlend = 0.0);
+
+        /** Generic method for setting up texture effects.
+        @remarks
+        Allows you to specify effects directly by using the TextureEffectType enumeration. The
+        arguments that go with it depend on the effect type. Only one effect of
+        each type can be applied to a texture layer.
+        @par
+        This method is used internally by Ogre but it is better generally for applications to use the
+        more intuitive specialised methods such as setEnvironmentMap and setScroll.
+        @note
+        This option has no effect in the programmable pipeline.
+        */
+        void addEffect(TextureEffect& effect);
+
+        /** Turns on/off texture coordinate effect that makes this layer an environment map.
+        @remarks
+        Environment maps make an object look reflective by using the object's vertex normals relative
+        to the camera view to generate texture coordinates.
+        @par
+        The vectors generated can either be used to address a single 2D texture which
+        is a 'fish-eye' lens view of a scene, or a 3D cubic environment map which requires 6 textures
+        for each side of the inside of a cube. The type depends on what texture you set up - if you use the
+        setTextureName method then a 2D fisheye lens texture is required, whereas if you used setCubicTextureName
+        then a cubic environemnt map will be used.
+        @par
+        This effect works best if the object has lots of gradually changing normals. The texture also
+        has to be designed for this effect - see the example spheremap.png included with the sample
+        application for a 2D environment map; a cubic map can be generated by rendering 6 views of a
+        scene to each of the cube faces with orthoganal views.
+        @note
+        Enabling this disables any other texture coordinate generation effects.
+        However it can be combined with texture coordinate modification functions, which then operate on the
+        generated coordinates rather than static model texture coordinates.
+        @param
+        enable True to enable, false to disable
+        @param
+        planar If set to true, instead of being based on normals the environment effect is based on
+        vertex positions. This is good for planar surfaces.
+        @note
+        This option has no effect in the programmable pipeline.
+        */
+        void setEnvironmentMap(bool enable, EnvMapType envMapType = ENV_CURVED);
+
+        /** Sets up an animated scroll for the texture layer.
+        @note
+        Useful for creating constant scrolling effects on a texture layer (for varying scrolls, see setTransformAnimation).
+        @param
+        uSpeed The number of horizontal loops per second (+ve=moving right, -ve = moving left)
+        @param
+        vSpeed The number of vertical loops per second (+ve=moving up, -ve= moving down)
+        @note
+        This option has no effect in the programmable pipeline.
+        */
+        void setScrollAnimation(Real uSpeed, Real vSpeed);
+
+        /** Sets up an animated texture rotation for this layer.
+        @note
+        Useful for constant rotations (for varying rotations, see setTransformAnimation).
+        @param
+        speed The number of complete anticlockwise revolutions per second (use -ve for clockwise)
+        @note
+        This option has no effect in the programmable pipeline.
+        */
+        void setRotateAnimation(Real speed);
+
+        /** Sets up a general time-relative texture modification effect.
+        @note
+        This can be called multiple times for different values of ttype, but only the latest effect
+        applies if called multiple time for the same ttype.
+        @param
+        ttype The type of transform, either translate (scroll), scale (stretch) or rotate (spin)
+        @param
+        waveType The shape of the wave, see WaveformType enum for details
+        @param
+        base The base value for the function (range of output = {base, base + amplitude})
+        @param
+        frequency The speed of the wave in cycles per second
+        @param
+        phase The offset of the start of the wave, e.g. 0.5 to start half-way through the wave
+        @param
+        amplitude Scales the output so that instead of lying within 0..1 it lies within 0..1*amplitude for exaggerated effects
+        @note
+        This option has no effect in the programmable pipeline.
+        */
+        void setTransformAnimation( const TextureTransformType ttype,
+            const WaveformType waveType, Real base = 0, Real frequency = 1, Real phase = 0, Real amplitude = 1 );
+
+
+        /** Enables or disables projective texturing on this texture unit.
+        @remarks
+            Projective texturing allows you to generate texture coordinates 
+            based on a Frustum, which gives the impression that a texture is
+            being projected onto the surface. Note that once you have called
+            this method, the texture unit continues to monitor the Frustum you 
+            passed in and the projection will change if you can alter it. It also
+            means that you must ensure that the Frustum object you pass a pointer
+            to remains in existence for as long as this TextureUnitState does.
+        @par
+            This effect cannot be combined with other texture generation effects, 
+            such as environment mapping. It also has no effect on passes which 
+            have a vertex program enabled - projective texturing has to be done
+            in the vertex program instead.
+        @param enabled Whether to enable / disable
+        @param projectionSettings The Frustum which will be used to derive the 
+            projection parameters.
+        */
+        void setProjectiveTexturing(bool enabled, const Frustum* projectionSettings = 0);
+
+        /** Removes all effects applied to this texture layer.
+        */
+        void removeAllEffects(void);
+
+        /** Removes a single effect applied to this texture layer.
+        @note
+        Because you can only have 1 effect of each type (e.g. 1 texture coordinate generation) applied
+        to a layer, only the effect type is required.
+        */
+        void removeEffect( const TextureEffectType type );
+
+        /** Determines if this texture layer is currently blank.
+        @note
+        This can happen if a texture fails to load or some other non-fatal error. Worth checking after
+        setting texture name.
+        */
+        bool isBlank(void) const;
+
+        /** Sets this texture layer to be blank.
+        */
+        void setBlank(void);
+
+        // get texture effects in a multimap paired array
+        std::multimap<TextureEffectType, TextureEffect> getEffects(void) const;
+        // get the animated-texture animation duration
+        Real getAnimationDuration(void) const;
+
+        /** Set the texture filtering for this unit, using the simplified interface.
+        @remarks
+            You also have the option of specifying the minification, magnification
+            and mip filter individually if you want more control over filtering
+            options. See the alternative setTextureFiltering methods for details.
+        @note
+        This option applies in both the fixed function and the programmable pipeline.
+        @param filterType The high-level filter type to use.
+        */
+        void setTextureFiltering(TextureFilterOptions filterType);
+        /** Set a single filtering option on this texture unit. 
+        @params ftype The filtering type to set
+        @params opts The filtering option to set
+        */
+        void setTextureFiltering(FilterType ftype, FilterOptions opts);
+        /** Set a the detailed filtering options on this texture unit. 
+        @params minFilter The filtering to use when reducing the size of the texture. 
+            Can be FO_POINT, FO_LINEAR or FO_ANISOTROPIC
+        @params magFilter The filtering to use when increasing the size of the texture
+            Can be FO_POINT, FO_LINEAR or FO_ANISOTROPIC
+        @params mipFilter The filtering to use between mip levels
+            Can be FO_NONE (turns off mipmapping), FO_POINT or FO_LINEAR (trilinear filtering)
+        */
+        void setTextureFiltering(FilterOptions minFilter, FilterOptions magFilter, FilterOptions mipFilter);
+        // get the texture filtering for the given type
+        FilterOptions getTextureFiltering(FilterType ftpye) const;
+
+        /** Sets the anisotropy level to be used for this texture level.
+        @par maxAniso The maximal anisotropy level, should be between 2 and the maximum supported by hardware (1 is the default, ie. no anisotrophy).
+        @note
+        This option applies in both the fixed function and the programmable pipeline.
+        */
+        void setTextureAnisotropy(unsigned int maxAniso);
+        // get this layer texture anisotropy level
+        unsigned int getTextureAnisotropy() const;
+
+        /// Gets the parent Pass object
+        Pass* getParent(void) { return mParent; }
+
+		/** Internal method for loading this object as part of Material::load */
+		void _load(void);
+		/** Internal method for unloading this object as part of Material::unload */
+		void _unload(void);
+        /// Returns whether this unit has texture coordinate generation that depends on the camera
+        bool hasViewRelativeTextureCoordinateGeneration(void);
+
+        // Is this loaded?
+        bool isLoaded(void);
+        /** Tells the class that it needs recompilation. */
+        void _notifyNeedsRecompile(void);
+
+	
+protected:
+        // State
+#define OGRE_MAX_TEXTURE_FRAMES 32
+
+        /// Number of frames of animation, or frames making up cubic
+        unsigned int mNumFrames;        
+        /// The xurrent animation frame.
+        unsigned int mCurrentFrame;
+        // String mFrames[OGRE_MAX_TEXTURE_FRAMES] is at the end of the class                
+
+        /// Duration of animation in seconds
+        Real mAnimDuration;            
+        bool mCubic; // is this a series of 6 2D textures to make up a cube?
+		
+        TextureType mTextureType; 
+		int mTextureSrcMipmaps; // Request number of mipmaps
+
+        unsigned int mTextureCoordSetIndex;
+        TextureAddressingMode mAddressMode;                
+
+        LayerBlendModeEx colourBlendMode;
+        SceneBlendFactor colourBlendFallbackSrc;
+        SceneBlendFactor colourBlendFallbackDest;
+
+        LayerBlendModeEx alphaBlendMode;
+        bool mIsBlank;
+
+        mutable bool mRecalcTexMatrix;
+        Real mUMod, mVMod;
+        Real mUScale, mVScale;
+        Radian mRotate;
+        mutable Matrix4 mTexModMatrix;
+
+        // Animation, will be set up as Controllers
+        Real mUScrollAnim, mVScrollAnim;
+        Real mRotateAnim;
+
+        /// Texture filtering - minification
+        FilterOptions mMinFilter;
+        /// Texture filtering - magnification
+        FilterOptions mMagFilter;
+        /// Texture filtering - mipmapping
+        FilterOptions mMipFilter;
+        ///Texture anisotropy
+        unsigned int mMaxAniso;
+
+        bool mIsDefaultAniso;
+        bool mIsDefaultFiltering;
+
+
+        //-----------------------------------------------------------------------------
+        // Complex members (those that can't be copied using memcpy) are at the end to 
+        // allow for fast copying of the basic members.
+        //
+        String mFrames[OGRE_MAX_TEXTURE_FRAMES]; // Names of frames
+
+        typedef std::multimap<TextureEffectType, TextureEffect> EffectMap;
+        EffectMap mEffects;
+        //-----------------------------------------------------------------------------
+
+        //-----------------------------------------------------------------------------
+        // Pointer members (those that can't be copied using memcpy), and MUST
+        // preserving even if assign from others
+        //
+        Pass* mParent;
+        Controller<Real>* mAnimController;
+        //-----------------------------------------------------------------------------
+
+
+        /** Internal method for calculating texture matrix.
+        */
+        void recalcTextureMatrix(void) const;
+
+        /** Internal method for creating animation controller.
+        */
+        void createAnimController(void);
+
+        /** Internal method for creating texture effect controller.
+        */
+        void createEffectController(TextureEffect& effect);
+
+
+    };
+
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSingleton.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSingleton.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSingleton.h	(revision 1092)
@@ -0,0 +1,75 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+/* Original version Copyright (C) Scott Bilas, 2000.
+ * All rights reserved worldwide.
+ *
+ * This software is provided "as is" without express or implied
+ * warranties. You may freely copy and compile this source into
+ * applications you distribute provided that the copyright text
+ * below is included in the resulting source code, for example:
+ * "Portions Copyright (C) Scott Bilas, 2000"
+ */
+#ifndef _SINGLETON_H__
+#define _SINGLETON_H__
+
+// Added by Steve Streeting for Ogre
+#include "OgrePrerequisites.h"
+
+#if OGRE_COMPILER == OGRE_COMPILER_MSVC
+// Turn off warnings generated by this singleton implementation
+#   pragma warning (disable : 4311)
+#   pragma warning (disable : 4312)
+#endif
+
+namespace Ogre {
+// End SJS additions
+    /** Template class for creating single-instance global classes.
+    */
+    template <typename T> class Singleton
+    {
+    protected:
+
+        static T* ms_Singleton;
+
+    public:
+        Singleton( void )
+        {
+            assert( !ms_Singleton );
+#if defined( _MSC_VER ) && _MSC_VER < 1200	 
+            int offset = (int)(T*)1 - (int)(Singleton <T>*)(T*)1;
+            ms_Singleton = (T*)((int)this + offset);
+#else
+	    ms_Singleton = static_cast< T* >( this );
+#endif
+        }
+        ~Singleton( void )
+            {  assert( ms_Singleton );  ms_Singleton = 0;  }
+        static T& getSingleton( void )
+		{	assert( ms_Singleton );  return ( *ms_Singleton ); }
+        static T* getSingletonPtr( void )
+		{ return ms_Singleton; }
+    };
+}
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRectangle.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRectangle.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRectangle.h	(revision 1092)
@@ -0,0 +1,65 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://ogre.sourceforge.net/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _Rectangle_H__
+#define _Rectangle_H__
+
+#include "OgrePrerequisites.h"
+
+namespace Ogre {
+
+    struct _OgreExport Rectangle
+    {
+        Real left;
+        Real top;
+        Real right;
+        Real bottom;
+
+        inline bool inside(Real x, Real y) const { return x >= left && x <= right && y >= top && y <= bottom; }
+    };
+
+    /** Geometric intersection of two rectanglar regions.
+     *
+     * @remarks Calculates the geometric intersection of two rectangular
+     * regions.  Rectangle coordinates must be ([0-N], [0-N]), such that
+     * (0,0) is in the upper left hand corner.
+     *
+     * If the two input rectangles do not intersect, then the result will be
+     * a degenerate rectangle, i.e. left >= right or top >= bottom, or both.
+     */
+    inline Rectangle intersect(const Rectangle& lhs, const Rectangle& rhs)
+    {
+        Rectangle r;
+
+        r.left   = lhs.left   > rhs.left   ? lhs.left   : rhs.left;
+        r.top    = lhs.top    > rhs.top    ? lhs.top    : rhs.top;
+        r.right  = lhs.right  < rhs.right  ? lhs.right  : rhs.right;
+        r.bottom = lhs.bottom < rhs.bottom ? lhs.bottom : rhs.bottom;
+
+        return r;
+    }
+
+}
+
+#endif // _Rectangle_H__
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreString.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreString.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreString.h	(revision 1092)
@@ -0,0 +1,180 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _String_H__
+#define _String_H__
+
+#include "OgrePrerequisites.h"
+
+// If we're using the GCC 3.1 C++ Std lib
+#if OGRE_COMPILER == OGRE_COMPILER_GNUC && OGRE_COMP_VER >= 310
+
+#include <ext/hash_map>
+namespace __gnu_cxx
+{
+    template <> struct hash< Ogre::_StringBase >
+    {
+        size_t operator()( const Ogre::_StringBase _stringBase ) const 
+        { 
+            /* This is the PRO-STL way, but it seems to cause problems with VC7.1
+               and in some other cases (although I can't recreate it)
+            hash<const char*> H;
+            return H(_stringBase.c_str());
+            */
+            /** This is our custom way */
+            register size_t ret = 0;
+            for( Ogre::_StringBase::const_iterator it = _stringBase.begin(); it != _stringBase.end(); ++it )
+                ret = 5 * ret + *it;
+
+            return ret;
+        }
+    };
+}
+
+// If we're using plain vanilla VC7 Std lib
+#elif !defined( _STLP_HASH_FUN_H )
+
+#	if _DEFINE_DEPRECATED_HASH_CLASSES
+namespace std 
+#	else
+namespace stdext
+#	endif
+{
+    template<> size_t hash_compare< Ogre::_StringBase, std::less< Ogre::_StringBase > >::operator ()( const Ogre::_StringBase& _stringBase ) const
+    {
+        /* This is the PRO-STL way, but it seems to cause problems with VC7.1
+            and in some other cases (although I can't recreate it)
+        hash<const char*> H;
+        return H(_stringBase.c_str());
+        */
+        /** This is our custom way */
+        register size_t ret = 0;
+        for( Ogre::_StringBase::const_iterator it = _stringBase.begin(); it != _stringBase.end(); ++it )
+            ret = 5 * ret + *it;
+
+        return ret;
+    }
+}
+
+#endif
+
+namespace Ogre {
+
+    /** Utility class for manipulating Strings.  */
+    class _OgreExport StringUtil
+    {
+	public:
+        typedef std::stringstream StrStreamType;
+
+        /** Removes any whitespace characters, be it standard space or
+            TABs and so on.
+            @remarks
+                The user may specify wether they want to trim only the
+                beginning or the end of the String ( the default action is
+                to trim both).
+        */
+        static void trim( String& str, bool left = true, bool right = true );
+
+        /** Returns a StringVector that contains all the substrings delimited
+            by the characters in the passed <code>delims</code> argument.
+            @param 
+                delims A list of delimiter characters to split by
+            @param 
+                maxSplits The maximum number of splits to perform (0 for unlimited splits). If this
+                parameters is > 0, the splitting process will stop after this many splits, left to right.
+        */
+		static std::vector< String > split( const String& str, const String& delims = "\t\n ", unsigned int maxSplits = 0);
+
+        /** Upper-cases all the characters in the string.
+        */
+        static void toLowerCase( String& str );
+
+        /** Lower-cases all the characters in the string.
+        */
+        static void toUpperCase( String& str );
+
+        /** Converts the contents of the string to a Real.
+        @remarks
+            Assumes the only contents of the string are a valid parsable Real. Defaults to  a
+            value of 0.0 if conversion is not possible.
+        */
+        static Real toReal( const String& str );
+
+        /** Returns whether the string begins with the pattern passed in.
+        @param pattern The pattern to compare with.
+        @param lowerCase If true, the end of the string will be lower cased before 
+            comparison, pattern should also be in lower case.
+        */
+        static bool startsWith(const String& str, const String& pattern, bool lowerCase = true);
+
+        /** Returns whether the string ends with the pattern passed in.
+        @param pattern The pattern to compare with.
+        @param lowerCase If true, the end of the string will be lower cased before 
+            comparison, pattern should also be in lower case.
+        */
+        static bool endsWith(const String& str, const String& pattern, bool lowerCase = true);
+
+        /** Method for standardising paths - use forward slashes only, end with slash. 
+        */
+        static String standardisePath( const String &init);
+
+        /** Method for splitting a fully qualified filename into the base name 
+            and path. 
+        @remarks
+            Path is standardised as in standardisePath
+        */
+        static void splitFilename(const String& qualifiedName, 
+            String& outBasename, String& outPath);
+
+        /** Simple pattern-matching routine allowing a wildcard pattern. 
+        @param str String to test
+        @param pattern Pattern to match against; can include simple '*' wildcards
+        @param caseSensitive Whether the match is case sensitive or not
+        */
+        static bool match(const String& str, const String& pattern, bool caseSensitive = true);
+            
+
+
+
+
+        /// Constant blank string, useful for returning by ref where local does not exist
+        static const String BLANK;
+    };
+
+
+#if OGRE_COMPILER == OGRE_COMPILER_GNUC && OGRE_COMP_VER >= 310
+    typedef ::__gnu_cxx::hash< _StringBase > _StringHash;    
+#elif !defined( _STLP_HASH_FUN_H )
+#	if _DEFINE_DEPRECATED_HASH_CLASSES
+		typedef std::hash_compare< _StringBase, std::less< _StringBase > > _StringHash;
+#	else
+		typedef stdext::hash_compare< _StringBase, std::less< _StringBase > > _StringHash;
+#	endif
+#else
+    typedef std::hash< _StringBase > _StringHash;
+#endif
+
+} // namespace Ogre
+
+#endif // _String_H__
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreFont.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreFont.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreFont.h	(revision 1092)
@@ -0,0 +1,353 @@
+/*-------------------------------------------------------------------------
+This source file is a part of OGRE
+(Object-oriented Graphics Rendering Engine)
+
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This library is free software; you can redistribute it and/or modify it
+under the terms of the GNU Lesser General Public License (LGPL) as 
+published by the Free Software Foundation; either version 2.1 of the 
+License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful, but 
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
+or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public 
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License 
+along with this library; if not, write to the Free Software Foundation, 
+Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA or go to
+http://www.gnu.org/copyleft/lesser.txt
+-------------------------------------------------------------------------*/
+
+#ifndef _Font_H__
+#define _Font_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreResource.h"
+#include "OgreTexture.h"
+#include "OgreMaterial.h"
+
+namespace Ogre
+{
+    // Define the number of glyphs allowed
+    // We ignore 0-31 since these are control characters
+#if OGRE_WCHAR_T_STRINGS
+    // Allow wide chars
+    #define OGRE_NUM_GLYPHS (1024 - 32)
+#else
+    // Allow 8-bit ASCII 
+    // (we don't want to offend people with charcodes 127-256 in their name eh cearny? ;)
+    // Only chars 33+ are any use though
+    #define OGRE_NUM_GLYPHS (256 - 32)
+#endif
+
+    // How to look up chars
+    #define OGRE_GLYPH_INDEX(c) c - 33
+
+    /** Enumerates the types of Font usable in the engine. */
+    enum FontType
+    {
+        /// Generated from a truetype (.ttf) font
+        FT_TRUETYPE = 1,
+        /// Loaded from an image created by an artist
+        FT_IMAGE = 2
+    };
+
+
+    /** Class representing a font in the system.
+    @remarks
+    This class is simply a way of getting a font texture into the OGRE system and
+    to easily retrieve the texture coordinates required to accurately render them.
+    Fonts can either be loaded from precreated textures, or the texture can be generated
+    using a truetype font. You can either create the texture manually in code, or you
+    can use a .fontdef script to define it (probably more practical since you can reuse
+    the definition more easily)
+	@note
+	This class extends both Resource and ManualResourceLoader since it is
+	both a resource in it's own right, but it also provides the manual load
+	implementation for the Texture it creates.
+    */
+	class _OgreExport Font : public Resource, public ManualResourceLoader
+    {
+    protected:
+		/// Command object for Font - see ParamCommand 
+		class _OgreExport CmdType : public ParamCommand
+		{
+		public:
+			String doGet(const void* target) const;
+			void doSet(void* target, const String& val);
+		};
+		/// Command object for Font - see ParamCommand 
+		class _OgreExport CmdSource : public ParamCommand
+		{
+		public:
+			String doGet(const void* target) const;
+			void doSet(void* target, const String& val);
+		};
+		/// Command object for Font - see ParamCommand 
+		class _OgreExport CmdSize : public ParamCommand
+		{
+		public:
+			String doGet(const void* target) const;
+			void doSet(void* target, const String& val);
+		};
+		/// Command object for Font - see ParamCommand 
+		class _OgreExport CmdResolution : public ParamCommand
+		{
+		public:
+			String doGet(const void* target) const;
+			void doSet(void* target, const String& val);
+		};
+
+		// Command object for setting / getting parameters
+		static CmdType msTypeCmd;
+		static CmdSource msSourceCmd;
+		static CmdSize msSizeCmd;
+		static CmdResolution msResolutionCmd;
+
+		/// The type of font
+        FontType mType;
+
+        /// Source of the font (either an image name or a truetype font)
+        String mSource;
+
+        /// Size of the truetype font, in points
+        Real mTtfSize;
+        /// Resolution (dpi) of truetype font
+        uint mTtfResolution;
+
+
+        /// Start u coords
+        Real mTexCoords_u1[OGRE_NUM_GLYPHS];
+        /// End u coords
+        Real mTexCoords_u2[OGRE_NUM_GLYPHS];
+        /// Start v coords
+        Real mTexCoords_v1[OGRE_NUM_GLYPHS];
+        /// End v coords
+        Real mTexCoords_v2[OGRE_NUM_GLYPHS];
+
+        /// Aspect ratio between x and y (width / height)
+        Real mAspectRatio[OGRE_NUM_GLYPHS];
+
+        /// The material which is generated for this font
+        MaterialPtr mpMaterial;
+
+		/// Texture pointer
+		TexturePtr mTexture;
+
+        /// for TRUE_TYPE font only
+        bool mAntialiasColour;
+
+        /// Internal method for loading from ttf
+        void createTextureFromFont(void);
+
+		/// @copydoc Resource::loadImpl
+		virtual void loadImpl();
+		/// @copydoc Resource::unloadImpl
+		virtual void unloadImpl();
+		/// @copydoc Resource::calculateSize
+		size_t calculateSize(void) const { return 0; } // permanent resource is in the texture 
+    public:
+
+        /** Constructor.
+		@see Resource
+        */
+		Font(ResourceManager* creator, const String& name, ResourceHandle handle,
+			const String& group, bool isManual = false, ManualResourceLoader* loader = 0);
+        virtual ~Font();
+
+        /** Sets the type of font. Must be set before loading. */
+        void setType(FontType ftype);
+
+        /** Gets the type of font. */
+        FontType getType(void) const;
+
+        /** Sets the source of the font.
+        @remarks
+            If you have created a font of type FT_IMAGE, this method tells the
+            Font which image to use as the source for the characters. So the parameter 
+            should be the name of an appropriate image file. Note that when using an image
+            as a font source, you will also need to tell the font where each character is
+            located using setGlyphTexCoords (for each character).
+        @par
+            If you have created a font of type FT_TRUETYPE, this method tells the
+            Font which .ttf file to use to generate the text. You will also need to call 
+            setTrueTypeSize and setTrueTypeResolution.
+        @param source An image file or a truetype font, depending on the type of this font
+        */
+        void setSource(const String& source);
+
+        /** Gets the source this font (either an image or a truetype font).
+        */
+        const String& getSource(void) const;
+
+        /** Sets the size of a truetype font (only required for FT_TRUETYPE). 
+        @param ttfSize The size of the font in points. Note that the
+            size of the font does not affect how big it is on the screen, just how large it is in
+            the texture and thus how detailed it is.
+        */
+        void setTrueTypeSize(Real ttfSize);
+        /** Gets the resolution (dpi) of the font used to generate the texture
+        (only required for FT_TRUETYPE).
+        @param ttfResolution The resolution in dpi
+        */
+        void setTrueTypeResolution(uint ttfResolution);
+
+        /** Gets the point size of the font used to generate the texture.
+        @remarks
+            Only applicable for FT_TRUETYPE Font objects.
+            Note that the size of the font does not affect how big it is on the screen, 
+            just how large it is in the texture and thus how detailed it is.            
+        */
+        Real getTrueTypeSize(void) const;
+        /** Gets the resolution (dpi) of the font used to generate the texture.
+        @remarks
+            Only applicable for FT_TRUETYPE Font objects.
+        */
+        uint getTrueTypeResolution(void) const;
+
+        /** Returns the size in pixels of a box that could contain the whole string.
+        */
+        std::pair< uint, uint > StrBBox( const String & text, Real char_height, RenderWindow & window  );
+
+
+        /** Returns the teture coordinates of the associated glyph. 
+            @remarks Parameter is a short to allow both ASCII and wide chars.
+            @param id The character code
+            @param u1, u2, v1, v2 location to place the results
+        */
+        inline void getGlyphTexCoords(OgreChar id, Real& u1, Real& v1, Real& u2, Real& v2 ) const
+        {
+            unsigned OgreChar idx = OGRE_GLYPH_INDEX(id);
+            u1 = mTexCoords_u1[ idx ];
+            v1 = mTexCoords_v1[ idx ];
+            u2 = mTexCoords_u2[ idx ];
+            v2 = mTexCoords_v2[ idx ];
+        }
+
+        /** Sets the texture coordinates of a glyph.
+        @remarks
+            You only need to call this if you're setting up a font loaded from a texture manually.
+        @note
+            Also sets the aspect ratio (width / height) of this character. 
+        */
+        inline void setGlyphTexCoords( OgreChar id, Real u1, Real v1, Real u2, Real v2 )
+        {
+            unsigned OgreChar idx = OGRE_GLYPH_INDEX(id);
+            mTexCoords_u1[ idx ] = u1;
+            mTexCoords_v1[ idx ] = v1;
+            mTexCoords_u2[ idx ] = u2;
+            mTexCoords_v2[ idx ] = v2;
+            mAspectRatio[ idx ] = ( u2 - u1 ) / ( v2 - v1 );
+        }
+        /** Gets the aspect ratio (width / height) of this character. */
+        inline Real getGlyphAspectRatio( OgreChar id ) const
+        {
+            unsigned OgreChar idx = OGRE_GLYPH_INDEX(id);
+            return mAspectRatio[ idx ];
+        }
+        /** Sets the aspect ratio (width / height) of this character.
+        @remarks
+            You only need to call this if you're setting up a font loaded from a texture manually,
+            and your aspect ratio is really freaky.
+        */
+        inline void setGlyphAspectRatio( OgreChar id, Real ratio )
+        {
+            unsigned OgreChar idx = OGRE_GLYPH_INDEX(id);
+            mAspectRatio[ idx ] = ratio;
+        }
+        /** Gets the material generated for this font, as a weak reference. 
+        @remarks
+            This will only be valid after the Font has been loaded. 
+        */
+        inline const MaterialPtr& getMaterial() const
+        {
+            return mpMaterial;
+        }
+        /** Gets the material generated for this font, as a weak reference. 
+        @remarks
+            This will only be valid after the Font has been loaded. 
+        */
+        inline const MaterialPtr& getMaterial()
+        {
+            return mpMaterial;
+        }
+        /** Sets whether or not the colour of this font is antialiased as it is generated
+            from a true type font.
+        @remarks
+        	This is valid only for a FT_TRUETYPE font. If you are planning on using 
+            alpha blending to draw your font, then it is a good idea to set this to
+            false (which is the default), otherwise the darkening of the font will combine
+            with the fading out of the alpha around the edges and make your font look thinner
+            than it should. However, if you intend to blend your font using a colour blending
+            mode (add or modulate for example) then it's a good idea to set this to true, in
+            order to soften your font edges.
+        */
+        inline void setAntialiasColour(bool enabled)
+        {
+        	mAntialiasColour = enabled;
+        }
+
+		/** Gets whether or not the colour of this font is antialiased as it is generated
+		from a true type font.
+		*/
+        inline bool getAntialiasColour(void) const
+        {
+            return mAntialiasColour;
+        }
+
+		/** Implementation of ManualResourceLoader::loadResource, called
+			when the Texture that this font creates needs to (re)load.
+		*/
+		void loadResource(Resource* resource);
+    };
+	/** Specialisation of SharedPtr to allow SharedPtr to be assigned to FontPtr 
+	@note Has to be a subclass since we need operator=.
+	We could templatise this instead of repeating per Resource subclass, 
+	except to do so requires a form VC6 does not support i.e.
+	ResourceSubclassPtr<T> : public SharedPtr<T>
+	*/
+	class _OgreExport FontPtr : public SharedPtr<Font> 
+	{
+	public:
+		FontPtr() : SharedPtr<Font>() {}
+		explicit FontPtr(Font* rep) : SharedPtr<Font>(rep) {}
+		FontPtr(const FontPtr& r) : SharedPtr<Font>(r) {} 
+		FontPtr(const ResourcePtr& r) : SharedPtr<Font>()
+		{
+			// lock & copy other mutex pointer
+			OGRE_LOCK_MUTEX(*r.OGRE_AUTO_MUTEX_NAME)
+			OGRE_COPY_AUTO_SHARED_MUTEX(r.OGRE_AUTO_MUTEX_NAME)
+			pRep = static_cast<Font*>(r.getPointer());
+			pUseCount = r.useCountPointer();
+			if (pUseCount)
+			{
+				++(*pUseCount);
+			}
+		}
+
+		/// Operator used to convert a ResourcePtr to a FontPtr
+		FontPtr& operator=(const ResourcePtr& r)
+		{
+			if (pRep == static_cast<Font*>(r.getPointer()))
+				return *this;
+			release();
+			// lock & copy other mutex pointer
+			OGRE_LOCK_MUTEX(*r.OGRE_AUTO_MUTEX_NAME)
+			OGRE_COPY_AUTO_SHARED_MUTEX(r.OGRE_AUTO_MUTEX_NAME)
+			pRep = static_cast<Font*>(r.getPointer());
+			pUseCount = r.useCountPointer();
+			if (pUseCount)
+			{
+				++(*pUseCount);
+			}
+			return *this;
+		}
+	};
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderTargetTexture.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderTargetTexture.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderTargetTexture.h	(revision 1092)
@@ -0,0 +1,18 @@
+#ifndef __RenderTargetTexture_H__
+#define __RenderTargetTexture_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreTexture.h"
+#include "OgreRenderTarget.h"
+
+namespace Ogre
+{
+    class _OgrePrivate RenderTargetTexture : public Texture, public RenderTarget
+    {
+    public:
+        /// @copydoc Texture::isRenderTarget
+        virtual bool isRenderTarget() const { return false; }
+    };
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/stl_user_config.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/stl_user_config.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/stl_user_config.h	(revision 1092)
@@ -0,0 +1,204 @@
+/*
+ * Copyright (c) 1999 
+ * Boris Fomitchev
+ *
+ * This material is provided "as is", with absolutely no warranty expressed
+ * or implied. Any use is at your own risk.
+ *
+ * Permission to use or copy this software for any purpose is hereby granted 
+ * without fee, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is granted,
+ * provided the above notices are retained, and a notice that the code was
+ * modified is included with the above copyright notice.
+ *
+ */
+
+/*
+ * Purpose of this file :
+ *
+ * To hold user-definable portion of STLport settings which may be overridden
+ * on per-project basis.
+ * Please note that if you use STLport iostreams (compiled library) then you have
+ * to use consistent settings when you compile STLport library and your project. 
+ * Those settings are defined in _site_config.h and have to be the same for a given
+ * STLport installation.
+ *
+ */
+
+
+//==========================================================
+// User-settable macros that control compilation:
+//              Features selection
+//==========================================================
+
+/* _STLP_NO_OWN_IOSTREAMS: 
+ * __STL_NO_SGI_IOSTREAMS (in older versions)
+ *  This is major configuration switch.
+ *  Turn it on to disable use of SGI iostreams and use wrappers 
+ *  around your compiler's iostreams, like before.
+ *  Keep it off if you want to use  SGI iostreams 
+ *  (Note that in this case you have to compile library in ../src
+ *  and supply resulting library at link time).
+ *
+ */
+
+// # define   _STLP_NO_OWN_IOSTREAMS	1
+
+
+/* 
+ * This macro only works in non-SGI iostreams mode.
+ *
+ * Uncomment to suppress using new-style streams even if they are
+ * available.
+ * Beware - _STLP_USE_OWN_NAMESPACE depends on this macro, too.
+ * Do that only if you are absolutely sure backwards-compatible 
+ * <iostream.h> is not actually a wrapper with <iostream>
+ * Hint : In VC++ 6.x, they are not.
+ */
+
+// #define   _STLP_NO_NEW_IOSTREAMS	1
+
+/*
+ * Use this switch for embedded systems where no iostreams are available
+ * at all. STLport own iostreams will also get disabled automatically then.
+ */
+// # define _STLP_NO_IOSTREAMS 1
+
+/* 
+ * Set _STLP_DEBUG to turn the "Debug Mode" on.
+ * That gets you checked iterators/ranges in the manner
+ * of "Safe STL". Very useful for debugging. Thread-safe.
+ * Please do not forget to link proper STLport library flavor
+ * (e.g libstlport_gcc_stldebug.a) when you set this flag in STLport iostreams mode.
+ */
+#ifdef _DEBUG
+	#define _STLP_DEBUG 1
+#endif
+
+
+/* 
+ *
+ *  _STLP_NO_CUSTOM_IO : define this if you do not instantiate basic_xxx iostream classes  with custom types (which is most likely the case).
+ *  Custom means types other than char, wchar and char_traits<>,
+ *  like basic_ostream<my_char_type, my_traits<my_char_type> >
+ *  When this option is on, most non-inline template functions definitions for iostreams are not seen by the client.
+ *  Default is off, just not to break compilation for those who do use those types.
+ *  which saves a lot of compile time for most compilers, also object and executable size for some.
+ *  That also guarantees that you still use optimized standard i/o when you compile your program without optimization. 
+ *  Option does not affect STLport library build; you may use the same binary library with and without this option, 
+ *  on per-project basis.
+ *
+ */
+//#define _STLP_NO_CUSTOM_IO
+
+
+/* 
+ * _STLP_NO_RELOPS_NAMESPACE: if defined, don't put the relational
+ * operator templates (>, <=. >=, !=) in namespace std::rel_ops, even
+ * if the compiler supports namespaces.
+ * Note : if the compiler do not support namespaces, those operators are not be provided by default,
+ * to simulate hiding them into rel_ops. This was proved to resolve many compiler bugs with ambiguity.
+ */
+
+// #define _STLP_NO_RELOPS_NAMESPACE 1
+
+
+/*
+ * If _STLP_USE_OWN_NAMESPACE is in effect, STLport by default will not try
+ * to rename std:: for the user
+ * to _STL::. If you do want this feature, please define the following switch :
+ */
+// # define _STLP_REDEFINE_STD 1
+
+
+/*
+ * _STLP_WHOLE_NATIVE_STD : only meaningful in _STLP_USE_OWN_NAMESPACE mode.
+ * Normally, STLport only imports necessary components from native std:: namespace -
+ * those not yet provided by STLport (<iostream>, <complex>, etc.) 
+ * and their dependencies (<string>, <stdexcept>). 
+ * You might want everything from std:: being available in std:: namespace when you
+ * include corresponding STLport header (like STLport <map> provides std::map as well, etc.),
+ * if you are going to use both stlport:: and std:: components in your code.
+ * Otherwise this option is not recommended as it increases the size of your object files
+ * and slows down compilation.
+ */
+// # define _STLP_WHOLE_NATIVE_STD
+
+
+/*
+ * Use this option to catch uninitialized members in your classes.
+ * When it is set, construct() and destroy() fill the class storage
+ * with _STLP_SHRED_BYTE (see below). 
+ * Note : _STLP_DEBUG and _STLP_DEBUG_ALLOC don't set this option automatically.
+ */
+
+// # define _STLP_DEBUG_UNINITIALIZED 1
+
+/*
+ * Uncomment and provide a definition for the byte with which raw memory
+ * will be filled if _STLP_DEBUG_ALLOC or _STLP_DEBUG_UNINITIALIZED is defined. 
+ * Choose a value which is likely to cause a noticeable problem if dereferenced 
+ * or otherwise abused. A good value may already be defined for your platform; see
+ * stl_config.h
+ */
+// #define _STLP_SHRED_BYTE 0xA3
+
+/*
+ *  This option is for gcc users only and only affects systems where native linker
+ *  does not let gcc to implement automatic instantiation of static template data members/
+ *  It is being put in this file as there is no way to check if we are using GNU ld automatically,
+ *  so it becomes user's responsibility.
+ * 
+ */
+
+// #define _STLP_GCC_USES_GNU_LD
+
+
+//==========================================================
+// Compatibility section
+//==========================================================
+
+/*
+ *  Define this macro to disable anachronistic constructs (like the ones used in HP STL and
+ *  not included in final standard, etc. 
+ */
+// define _STLP_NO_ANACHRONISMS 1
+
+/*
+ *  Define this macro to disable STLport extensions (for example, to make sure your code will 
+ *  compile with some other implementation )
+ */
+// define _STLP_NO_EXTENSIONS   1
+
+
+/* 
+ * You should define this macro if compiling with MFC - STLport <stl/_config.h>
+ * then include <afx.h> instead of <windows.h> to get synchronisation primitives 
+ *
+ */
+
+// # define _STLP_USE_MFC 1
+
+
+// boris : this setting is here as we cannot detect precense of new Platform SDK automatically 
+// If you are using new PSDK with VC++ 6.0 or lower, please define this to get correct prototypes for InterlockedXXX functions
+//# define _STLP_NEW_PLATFORM_SDK 1
+
+/*
+ * Use minimum set of default arguments on template classes that have more
+ * than one - for example map<>, set<>.
+ * This has effect only if _STLP_LIMITED_DEFAULT_TEMPLATES is on.
+ * If _STLP_MINIMUM_DEFAULT_TEMPLATE_PARAMS is set, you'll be able to compile
+ * set<T> with those compilers, but you'll have to use __set__<T, less<T>>
+ *
+ * Affects : map<>, multimap<>, set<>, multiset<>, hash_*<>, 
+ * queue<>, priority_queue<>, stack<>, istream_iterator<>
+ */
+
+// # define _STLP_MINIMUM_DEFAULT_TEMPLATE_PARAMS 1
+
+//==========================================================
+
+// Local Variables:
+// mode:C++
+// End:
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMeshSerializerImpl.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMeshSerializerImpl.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMeshSerializerImpl.h	(revision 1092)
@@ -0,0 +1,169 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __MeshSerializerImpl_H__
+#define __MeshSerializerImpl_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreString.h"
+#include "OgreSerializer.h"
+#include "OgreMaterial.h"
+#include "OgreMesh.h"
+#include "OgreEdgeListBuilder.h"
+
+namespace Ogre {
+
+
+    /** Internal implementation of Mesh reading / writing for the latest version of the
+    .mesh format.
+    @remarks
+    In order to maintain compatibility with older versions of the .mesh format, there
+    will be alternative subclasses of this class to load older versions, whilst this class
+    will remain to load the latest version.
+    */
+    class _OgrePrivate MeshSerializerImpl : public Serializer
+    {
+    public:
+        MeshSerializerImpl();
+        virtual ~MeshSerializerImpl();
+        /** Exports a mesh to the file specified. 
+        @remarks
+        This method takes an externally created Mesh object, and exports both it
+        and optionally the Materials it uses to a .mesh file.
+        @param pMesh Pointer to the Mesh to export
+        @param filename The destination filename
+        */
+        void exportMesh(const Mesh* pMesh, const String& filename);
+
+        /** Imports Mesh and (optionally) Material data from a .mesh file DataStream.
+        @remarks
+        This method imports data from a DataStream opened from a .mesh file and places it's
+        contents into the Mesh object which is passed in. 
+        @param stream The DataStream holding the .mesh data. Must be initialised (pos at the start of the buffer).
+        @param pDest Pointer to the Mesh object which will receive the data. Should be blank already.
+        */
+        void importMesh(DataStreamPtr& stream, Mesh* pDest);
+
+    protected:
+
+        bool mIsSkeletallyAnimated;
+
+        // Internal methods
+        virtual void writeSubMeshNameTable(const Mesh* pMesh);
+        virtual void writeMesh(const Mesh* pMesh);
+        virtual void writeSubMesh(const SubMesh* s);
+        virtual void writeSubMeshOperation(const SubMesh* s);
+        virtual void writeGeometry(const VertexData* pGeom);
+        virtual void writeSkeletonLink(const String& skelName);
+        virtual void writeMeshBoneAssignment(const VertexBoneAssignment& assign);
+        virtual void writeSubMeshBoneAssignment(const VertexBoneAssignment& assign);
+        virtual void writeLodInfo(const Mesh* pMesh);
+        virtual void writeLodSummary(unsigned short numLevels, bool manual);
+        virtual void writeLodUsageManual(const MeshLodUsage& usage);
+        virtual void writeLodUsageGenerated(const Mesh* pMesh, const MeshLodUsage& usage, unsigned short lodNum);
+        virtual void writeBoundsInfo(const Mesh* pMesh);
+        virtual void writeEdgeList(const Mesh* pMesh);
+
+        virtual size_t calcMeshSize(const Mesh* pMesh);
+        virtual size_t calcSubMeshSize(const SubMesh* pSub);
+        virtual size_t calcGeometrySize(const VertexData* pGeom);
+        virtual size_t calcSkeletonLinkSize(const String& skelName);
+        virtual size_t calcBoneAssignmentSize(void);
+        virtual size_t calcSubMeshOperationSize(const SubMesh* pSub);
+        virtual size_t calcSubMeshNameTableSize(const Mesh* pMesh);
+        virtual size_t calcEdgeListSize(const Mesh* pMesh);
+        virtual size_t calcEdgeListLodSize(const EdgeData* data, bool isManual);
+        virtual size_t calcEdgeGroupSize(const EdgeData::EdgeGroup& group);
+
+        virtual void readTextureLayer(DataStreamPtr& stream, Mesh* pMesh, MaterialPtr& pMat);
+        virtual void readSubMeshNameTable(DataStreamPtr& stream, Mesh* pMesh);
+        virtual void readMesh(DataStreamPtr& stream, Mesh* pMesh);
+        virtual void readSubMesh(DataStreamPtr& stream, Mesh* pMesh);
+        virtual void readSubMeshOperation(DataStreamPtr& stream, Mesh* pMesh, SubMesh* sub);
+        virtual void readGeometry(DataStreamPtr& stream, Mesh* pMesh, VertexData* dest);
+        virtual void readGeometryVertexDeclaration(DataStreamPtr& stream, Mesh* pMesh, VertexData* dest);
+        virtual void readGeometryVertexElement(DataStreamPtr& stream, Mesh* pMesh, VertexData* dest);
+        virtual void readGeometryVertexBuffer(DataStreamPtr& stream, Mesh* pMesh, VertexData* dest);
+
+        virtual void readSkeletonLink(DataStreamPtr& stream, Mesh* pMesh);
+        virtual void readMeshBoneAssignment(DataStreamPtr& stream, Mesh* pMesh);
+        virtual void readSubMeshBoneAssignment(DataStreamPtr& stream, Mesh* pMesh, 
+            SubMesh* sub);
+        virtual void readMeshLodInfo(DataStreamPtr& stream, Mesh* pMesh);
+        virtual void readMeshLodUsageManual(DataStreamPtr& stream, Mesh* pMesh, 
+            unsigned short lodNum, MeshLodUsage& usage);
+        virtual void readMeshLodUsageGenerated(DataStreamPtr& stream, Mesh* pMesh, 
+            unsigned short lodNum, MeshLodUsage& usage);
+        virtual void readBoundsInfo(DataStreamPtr& stream, Mesh* pMesh);
+        virtual void readEdgeList(DataStreamPtr& stream, Mesh* pMesh);
+
+
+
+        /// Flip an entire vertex buffer from little endian
+        virtual void flipFromLittleEndian(void* pData, size_t vertexCount, size_t vertexSize, const VertexDeclaration::VertexElementList& elems);
+        /// Flip an entire vertex buffer to little endian
+        virtual void flipToLittleEndian(void* pData, size_t vertexCount, size_t vertexSize, const VertexDeclaration::VertexElementList& elems);
+        /// Flip the endianness of an entire vertex buffer, passed in as a 
+        /// pointer to locked or temporary memory 
+        virtual void flipEndian(void* pData, size_t vertexCount, size_t vertexSize, const VertexDeclaration::VertexElementList& elems);
+
+
+
+    };
+
+    /** Class for providing backwards-compatibility for loading version 1.2 of the .mesh format. */
+    class _OgrePrivate MeshSerializerImpl_v1_2 : public MeshSerializerImpl
+    {
+    public:
+        MeshSerializerImpl_v1_2();
+        ~MeshSerializerImpl_v1_2();
+    protected:
+        virtual void readMesh(DataStreamPtr& stream, Mesh* pMesh);
+        virtual void readGeometry(DataStreamPtr& stream, Mesh* pMesh, VertexData* dest);
+        virtual void readGeometryPositions(unsigned short bindIdx, DataStreamPtr& stream, 
+            Mesh* pMesh, VertexData* dest);
+        virtual void readGeometryNormals(unsigned short bindIdx, DataStreamPtr& stream, 
+            Mesh* pMesh, VertexData* dest);
+        virtual void readGeometryColours(unsigned short bindIdx, DataStreamPtr& stream, 
+            Mesh* pMesh, VertexData* dest);
+        virtual void readGeometryTexCoords(unsigned short bindIdx, DataStreamPtr& stream, 
+            Mesh* pMesh, VertexData* dest, unsigned short set);
+    };
+
+    /** Class for providing backwards-compatibility for loading version 1.1 of the .mesh format. */
+    class _OgrePrivate MeshSerializerImpl_v1_1 : public MeshSerializerImpl_v1_2
+    {
+    public:
+        MeshSerializerImpl_v1_1();
+        ~MeshSerializerImpl_v1_1();
+    protected:
+        void readGeometryTexCoords(unsigned short bindIdx, DataStreamPtr& stream, 
+            Mesh* pMesh, VertexData* dest, unsigned short set);
+    };
+
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePositionTarget.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePositionTarget.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePositionTarget.h	(revision 1092)
@@ -0,0 +1,64 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+/***************************************************************************
+OgrePositionTarget.h  -  
+	A position target is a component that can be targeted by any mouse click or 
+	event that relies on an xy position.
+
+	It supports nesting, so the left and top are relative to its parent.
+
+-------------------
+begin                : Nov 19 2002
+copyright            : (C) 2002 by Kenny Sabir
+email                : kenny@sparksuit.com
+***************************************************************************/
+
+
+#ifndef __PositionTarget_H__
+#define __PositionTarget_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreEventTarget.h"
+
+namespace Ogre {
+
+    class _OgreExport PositionTarget : public EventTarget
+    {
+	public:
+        /** Gets the left of this element in relation to the screen (where 0 = far left, 1.0 = far right)  */
+        virtual Real getLeft(void) const = 0;
+
+        /** Gets the top of this element in relation to the screen (where 0 = top, 1.0 = bottom)  */
+        virtual Real getTop(void) const = 0;
+
+		virtual PositionTarget* getPositionTargetParent() const = 0;
+
+		virtual bool isKeyEnabled() const = 0;
+
+    };
+}
+
+
+#endif //__EventTarget_H__
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreDynLibManager.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreDynLibManager.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreDynLibManager.h	(revision 1092)
@@ -0,0 +1,106 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __DynLibManager_H__
+#define __DynLibManager_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreSingleton.h"
+
+namespace Ogre {
+    /** Manager for Dynamic-loading Libraries.
+        @remarks
+            This manager keeps a track of all the open dynamic-loading
+            libraries, opens them and returns references to already-open
+            libraries.
+    */
+    class _OgreExport DynLibManager: public Singleton<DynLibManager>
+    {
+	protected:
+		typedef std::map<String, DynLib*> DynLibList;
+		DynLibList mLibList;
+    public:
+        /** Default constructor.
+            @note
+                <br>Should never be called as the singleton is automatically
+                created during the creation of the Root object.
+            @see
+                Root::Root
+        */
+        DynLibManager();
+
+        /** Default destructor.
+            @see
+                Root::~Root
+        */
+        virtual ~DynLibManager();
+
+        /** Loads the passed library.
+            @param
+                filename The name of the library. The extension can be ommitted
+        */
+        DynLib* load(const String& filename);
+
+		/** Unloads the passed library.
+		@param
+		filename The name of the library. The extension can be ommitted
+		*/
+		void unload(DynLib* lib);
+
+		/** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static DynLibManager& getSingleton(void);
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static DynLibManager* getSingletonPtr(void);
+    };
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePatchMesh.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePatchMesh.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePatchMesh.h	(revision 1092)
@@ -0,0 +1,132 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __PatchMesh_H__
+#define __PatchMesh_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreMesh.h"
+#include "OgrePatchSurface.h"
+
+namespace Ogre {
+
+    /** Patch specialisation of Mesh. 
+    @remarks
+        Instances of this class should be created by calling MeshManager::createBezierPatch.
+    */
+    class _OgreExport PatchMesh : public Mesh
+    {
+    protected:
+        /// Internal surface definition
+        PatchSurface mSurface;
+        /// Vertex declaration, cloned from the input
+        VertexDeclaration* mDeclaration;
+    public:
+        /// Constructor
+        PatchMesh(ResourceManager* creator, const String& name, ResourceHandle handle,
+            const String& group);
+
+        /// Define the patch, as defined in MeshManager::createBezierPatch
+        void define(void* controlPointBuffer, 
+            VertexDeclaration *declaration, size_t width, size_t height,
+            size_t uMaxSubdivisionLevel = PatchSurface::AUTO_LEVEL, 
+            size_t vMaxSubdivisionLevel = PatchSurface::AUTO_LEVEL,
+            PatchSurface::VisibleSide visibleSide = PatchSurface::VS_FRONT,
+            HardwareBuffer::Usage vbUsage = HardwareBuffer::HBU_STATIC_WRITE_ONLY, 
+            HardwareBuffer::Usage ibUsage = HardwareBuffer::HBU_DYNAMIC_WRITE_ONLY,
+            bool vbUseShadow = false, bool ibUseShadow = false);
+
+        /* Sets the current subdivision level as a proportion of full detail.
+        @param factor Subdivision factor as a value from 0 (control points only) to 1 (maximum
+            subdivision). */
+        void setSubdivision(Real factor);
+    protected:
+        /// Overridden from Resource
+        void loadImpl(void);
+
+    };
+    /** Specialisation of SharedPtr to allow SharedPtr to be assigned to PatchMeshPtr 
+    @note Has to be a subclass since we need operator=.
+    We could templatise this instead of repeating per Resource subclass, 
+    except to do so requires a form VC6 does not support i.e.
+    ResourceSubclassPtr<T> : public SharedPtr<T>
+    */
+    class _OgreExport PatchMeshPtr : public SharedPtr<PatchMesh> 
+    {
+    public:
+        PatchMeshPtr() : SharedPtr<PatchMesh>() {}
+        explicit PatchMeshPtr(PatchMesh* rep) : SharedPtr<PatchMesh>(rep) {}
+        PatchMeshPtr(const PatchMeshPtr& r) : SharedPtr<PatchMesh>(r) {} 
+        PatchMeshPtr(const ResourcePtr& r) : SharedPtr<PatchMesh>()
+        {
+			// lock & copy other mutex pointer
+			OGRE_LOCK_MUTEX(*r.OGRE_AUTO_MUTEX_NAME)
+			OGRE_COPY_AUTO_SHARED_MUTEX(r.OGRE_AUTO_MUTEX_NAME)
+            pRep = static_cast<PatchMesh*>(r.getPointer());
+            pUseCount = r.useCountPointer();
+            if (pUseCount)
+            {
+                ++(*pUseCount);
+            }
+        }
+
+        /// Operator used to convert a ResourcePtr to a PatchMeshPtr
+        PatchMeshPtr& operator=(const ResourcePtr& r)
+        {
+            if (pRep == static_cast<PatchMesh*>(r.getPointer()))
+                return *this;
+            release();
+			// lock & copy other mutex pointer
+			OGRE_LOCK_MUTEX(*r.OGRE_AUTO_MUTEX_NAME)
+			OGRE_COPY_AUTO_SHARED_MUTEX(r.OGRE_AUTO_MUTEX_NAME)
+            pRep = static_cast<PatchMesh*>(r.getPointer());
+            pUseCount = r.useCountPointer();
+            if (pUseCount)
+            {
+                ++(*pUseCount);
+            }
+            return *this;
+        }
+        /// Operator used to convert a MeshPtr to a PatchMeshPtr
+        PatchMeshPtr& operator=(const MeshPtr& r)
+        {
+            if (pRep == static_cast<PatchMesh*>(r.getPointer()))
+                return *this;
+            release();
+			// lock & copy other mutex pointer
+			OGRE_LOCK_MUTEX(*r.OGRE_AUTO_MUTEX_NAME)
+			OGRE_COPY_AUTO_SHARED_MUTEX(r.OGRE_AUTO_MUTEX_NAME)
+            pRep = static_cast<PatchMesh*>(r.getPointer());
+            pUseCount = r.useCountPointer();
+            if (pUseCount)
+            {
+                ++(*pUseCount);
+            }
+            return *this;
+        }
+    };
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreCEGUITexture.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreCEGUITexture.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreCEGUITexture.h	(revision 1092)
@@ -0,0 +1,176 @@
+/************************************************************************
+	filename: 	OgreCEGUITexture.h
+	created:	11/5/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface to Texture implemented via Ogre engine
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+#ifndef _OgreCEGUITexture_h_
+#define _OgreCEGUITexture_h_
+
+#include <CEGUI/CEGUIBase.h>
+#include <CEGUI/CEGUIRenderer.h>
+#include <CEGUI/CEGUITexture.h>
+#include "OgreCEGUIRenderer.h"
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*!
+\brief
+	Texture class that is created by OgreCEGUIRenderer objects
+*/
+class OGRE_GUIRENDERER_API OgreCEGUITexture : public Texture
+{
+private:
+	/*************************************************************************
+		Friends (to allow construction and destruction)
+	*************************************************************************/
+	friend	Texture* OgreCEGUIRenderer::createTexture(void);
+	friend	Texture* OgreCEGUIRenderer::createTexture(const String& filename, const String& resourceGroup);
+	friend	Texture* OgreCEGUIRenderer::createTexture(float size);
+	friend	void	 OgreCEGUIRenderer::destroyTexture(Texture* texture);
+
+
+	/*************************************************************************
+		Construction & Destruction (by Renderer object only)
+	*************************************************************************/
+	OgreCEGUITexture(Renderer* owner);
+	virtual ~OgreCEGUITexture(void);
+
+public:
+	/*!
+	\brief
+		Returns the current pixel width of the texture
+
+	\return
+		ushort value that is the current width of the texture in pixels
+	*/
+	virtual	ushort	getWidth(void) const		{return d_width;}
+
+
+	/*!
+	\brief
+		Returns the current pixel height of the texture
+
+	\return
+		ushort value that is the current height of the texture in pixels
+	*/
+	virtual	ushort	getHeight(void) const		{return d_height;}
+
+
+	/*!
+	\brief
+		Loads the specified image file into the texture.  The texture is resized as required to hold the image.
+
+	\param filename
+		The filename of the image file that is to be loaded into the texture
+
+	\return
+		Nothing.
+	*/
+	virtual void	loadFromFile(const String& filename, const String& resourceGroup);
+
+
+	/*!
+	\brief
+		Loads (copies) an image in memory into the texture.  The texture is resized as required to hold the image.
+
+	\param buffPtr
+		Pointer to the buffer containing the image data
+
+	\param buffWidth
+		Width of the buffer (in 0xAARRGGBB pixels)
+
+	\param buffHeight
+		Height of the buffer (in 0xAARRGGBB pixels)
+
+	\return
+		Nothing.
+	*/
+	virtual void	loadFromMemory(const void* buffPtr, uint buffWidth, uint buffHeight);
+
+
+	/*!
+	\brief
+		Return a pointer to the internal Ogre::Texture object
+
+	\return
+		Pointer to the Ogre::Texture object currently being used by this Texture object
+	*/
+	Ogre::TexturePtr	getOgreTexture(void) const		{return d_ogre_texture;}
+
+
+	/*!
+	\brief
+		set the size of the internal Ogre texture.  Previous Ogre texture is lost.
+
+	\param size
+		pixel size of the new internal texture.  This will be rounded up to a power of 2.
+
+	\return
+		Nothing.
+	*/
+	void	setOgreTextureSize(uint size);
+
+
+	/*!
+	\brief
+		Set the internal Ogre::TexturePtr object.
+
+	\param texture
+		Reference to an Ogre::TexturePtr object that is to be used by this Texture object.
+
+	\return
+		Nothing.
+	*/
+	void	setOgreTexture(Ogre::TexturePtr& texture);
+
+
+private:
+	/*************************************************************************
+		Implementation Functions
+	*************************************************************************/
+	// safely free Ogre::Texture texture (can be called multiple times with no ill effect)
+	void	freeOgreTexture(void);
+
+	// return a Ogre::string that contains a unique name.
+	Ogre::String	getUniqueName(void);
+
+
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	static	uint32          d_texturenumber;	//!< Counter used to provide unique texture names.
+
+	Ogre::TexturePtr		d_ogre_texture;		//!< The 'real' texture.
+
+	ushort					d_width;			//!< cached width of the texture
+	ushort					d_height;			//!< cached height of the texture
+
+	bool	d_isLinked;		//!< True if we are linked to a texture we did not actually create.
+};
+
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _OgreCEGUITexture_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSkeletonManager.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSkeletonManager.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSkeletonManager.h	(revision 1092)
@@ -0,0 +1,94 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __SkeletonManager_H__
+#define __SkeletonManager_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreResourceManager.h"
+#include "OgreSingleton.h"
+
+namespace Ogre {
+
+    /** Handles the management of skeleton resources.
+        @remarks
+            This class deals with the runtime management of
+            skeleton data; like other resource managers it handles
+            the creation of resources (in this case skeleton data),
+            working within a fixed memory budget.
+    */
+    class _OgreExport SkeletonManager: public ResourceManager, public Singleton<SkeletonManager>
+    {
+    public:
+        /// Constructor
+        SkeletonManager();
+        ~SkeletonManager();
+
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static SkeletonManager& getSingleton(void);
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static SkeletonManager* getSingletonPtr(void);
+    protected:
+
+        /// @copydoc ResourceManager::createImpl
+        Resource* createImpl(const String& name, ResourceHandle handle, 
+            const String& group, bool isManual, ManualResourceLoader* loader, 
+            const NameValuePairList* createParams);
+
+    };
+
+
+}
+
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreTimer.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreTimer.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreTimer.h	(revision 1092)
@@ -0,0 +1,71 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __Timer_H__
+#define __Timer_H__
+
+#include "OgrePrerequisites.h"
+
+namespace Ogre
+{
+    /** Platform-independent Timer class. 
+    @remarks
+        You should never create a Timer instance manually; instead, use PlatformManager::createTimer.
+    */
+    class _OgreExport Timer 
+	{
+	protected:	
+		clock_t zeroClock ;
+	
+	public:
+		/** Creates a timer. 
+        @remarks
+            You must call reset() after creating it; the constructor cannot do it because the 
+            call would not be polymorphic.
+		*/
+		Timer() ;
+        virtual ~Timer() { }
+		
+		/** Resets timer 
+		*/
+		virtual void reset();
+		
+		/** Returns milliseconds since initialisation or last reset
+		*/
+		virtual unsigned long getMilliseconds() ;
+		
+		/** Returns milliseconds since initialisation or last reset, only CPU time measured
+		*/	
+		virtual unsigned long getMillisecondsCPU();
+		
+		/** Returns microseconds since initialisation or last reset
+		*/
+		virtual unsigned long getMicroseconds() ;
+		
+		/** Returns microseconds since initialisation or last reset, only CPU time measured
+		*/	
+		virtual unsigned long getMicrosecondsCPU();
+	} ;
+}
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreAnimationState.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreAnimationState.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreAnimationState.h	(revision 1092)
@@ -0,0 +1,133 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __AnimationSet_H__
+#define __AnimationSet_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreString.h"
+#include "OgreController.h"
+#include "OgreIteratorWrappers.h"
+
+namespace Ogre {
+
+    /** Represents the state of an animation and the weight of it's influence. 
+    @remarks
+        Other classes can hold instances of this class to store the state of any animations
+        they are using.
+        This class implements the ControllerValue interface to enable automatic update of
+        animation state through controllers.
+    */
+    class _OgreExport AnimationState : public ControllerValue<Real>
+    {
+    public:
+        /// Default constructor for STL only
+        AnimationState();
+		/** Destructor - is here because class has virtual functions and some compilers 
+			would whine if it won't exist.
+		*/
+		virtual ~AnimationState();
+        
+        /// Normal constructor with all params supplied
+        AnimationState(const String& animName, Real timePos, Real length, Real weight = 1.0, bool enabled = false);
+        /// Gets the name of the animation to which this state applies
+        const String& getAnimationName() const;
+        /// Sets the name of the animation to which this state applies
+        void setAnimationName(const String& name);
+        /// Gets the time position for this animation
+        Real getTimePosition(void) const;
+        /// Sets the time position for this animation
+        void setTimePosition(Real timePos);
+        /// Gets the total length of this animation (may be shorter than whole animation)
+        Real getLength() const;
+        /// Sets the total length of this animation (may be shorter than whole animation)
+        void setLength(Real len);
+        /// Gets the weight (influence) of this animation
+        Real getWeight(void) const;
+        /// Sets the weight (influence) of this animation
+        void setWeight(Real weight);
+        /** Modifies the time position, adjusting for animation length
+        @remarks
+            This method loops at the edges if animation looping is enabled.
+        */
+        void addTime(Real offset);
+
+        /// Returns true if this animation is currently enabled
+        bool getEnabled(void) const;
+        /// Sets whether this animation is enabled
+        void setEnabled(bool enabled);
+
+        /// Equality operator
+        bool operator==(const AnimationState& rhs) const;
+        // Inequality operator
+        bool operator!=(const AnimationState& rhs) const;
+
+        /** ControllerValue implementation. */
+        Real getValue(void) const;
+
+        /** ControllerValue implementation. */
+        void setValue(Real value);
+        /** Sets whether or not an animation loops at the start and end of
+            the animation if the time continues to be altered.
+        */
+        void setLoop(bool loop) { mLoop = loop; }
+        /// Gets whether or not this animation loops            
+        bool getLoop(void) const { return mLoop; }
+     
+        /** Copies the states from another animation state, preserving the animation name
+        (unlike operator=) but copying everything else.
+        @param animState Reference to animation state which will use as source.
+        */
+        void copyStateFrom(const AnimationState& animState);
+
+    protected:
+        String mAnimationName;
+        Real mTimePos;
+        Real mLength;
+        Real mInvLength;
+        Real mWeight;
+        bool mEnabled;
+        bool mLoop;
+
+    };
+
+    // A set of animation states
+    typedef std::map<String, AnimationState> AnimationStateSet;
+    typedef MapIterator<AnimationStateSet> AnimationStateIterator;
+
+    /** Copies a subset animation states from source to target.
+    @remarks
+        This routine assume target is a subset of source, it will copy all animation state
+        of the target with the settings from source.
+    @param target Reference to animation state set which will receive the states.
+    @param source Reference to animation state set which will use as source.
+    */
+    _OgreExport void CopyAnimationStateSubset(AnimationStateSet& target, const AnimationStateSet& source);
+
+}
+
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreFileSystem.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreFileSystem.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreFileSystem.h	(revision 1092)
@@ -0,0 +1,123 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __FileSystem_H__
+#define __FileSystem_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreArchive.h"
+#include "OgreArchiveFactory.h"
+
+namespace Ogre {
+
+    /** Specialisation of the Archive class to allow reading of files from 
+        filesystem folders / directories.
+    */
+    class _OgreExport FileSystemArchive : public Archive 
+    {
+	public:
+		OGRE_AUTO_MUTEX
+    protected:
+        /// Base path; actually the same as mName, but for clarity
+        String mBasePath;
+
+        /// Directory stack of previous directories
+        typedef std::deque<String> DirectoryStack;
+        mutable DirectoryStack mDirectoryStack;
+
+        #define OGRE_MAX_PATH 256
+        /// temporary C-string to retrieve paths
+        mutable char mTmpPath[OGRE_MAX_PATH];
+
+        /** Utility method to retrieve all files in a directory matching pattern.
+        @param pattern File pattern
+        @param recursive Whether to cascade down directories
+        @param simpleList Populated if retrieving a simple list
+        @param detailList Populated if retrieving a detailed list
+        @param currentDir The current directory relative to the base of the 
+            archive, for file naming
+        */
+        void findFiles(const String& pattern, bool recursive, StringVector* simpleList,
+            FileInfoList* detailList, const String& currentDir = "");
+
+        /// Utility method to change the current directory
+        void changeDirectory(const String& dir) const;
+        /// Utility method to change directory and push the current directory onto a stack
+        void pushDirectory(const String& dir) const;
+        /// Utility method to pop a previous directory off the stack and change to it
+        void popDirectory(void) const;
+
+    public:
+        FileSystemArchive(const String& name, const String& archType );
+        ~FileSystemArchive();
+
+        /// @copydoc Archive::isCaseSensitive
+        bool isCaseSensitive(void) const;
+
+        /// @copydoc Archive::load
+        void load();
+        /// @copydoc Archive::unload
+        void unload();
+
+        /// @copydoc Archive::open
+        DataStreamPtr open(const String& filename) const;
+
+        /// @copydoc Archive::list
+        StringVectorPtr list(bool recursive = true );
+
+        /// @copydoc Archive::listFileInfo
+        FileInfoListPtr listFileInfo(bool recursive = true );
+
+        /// @copydoc Archive::find
+        StringVectorPtr find(const String& pattern, bool recursive = true);
+
+        /// @copydoc Archive::findFileInfo
+        FileInfoListPtr findFileInfo(const String& pattern, bool recursive = true);
+
+        /// @copydoc Archive::exists
+		bool exists(const String& filename);
+
+    };
+
+    /** Specialisation of ArchiveFactory for FileSystem files. */
+    class _OgrePrivate FileSystemArchiveFactory : public ArchiveFactory
+    {
+    public:
+        virtual ~FileSystemArchiveFactory() {}
+        /// @copydoc FactoryObj::getType
+        const String& getType(void) const;
+        /// @copydoc FactoryObj::createInstance
+        Archive *createInstance( const String& name ) 
+        {
+            return new FileSystemArchive(name, "FileSystem");
+        }
+        /// @copydoc FactoryObj::destroyInstance
+        void destroyInstance( Archive* arch) { delete arch; }
+    };
+
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreExternalTextureSource.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreExternalTextureSource.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreExternalTextureSource.h	(revision 1092)
@@ -0,0 +1,180 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _OgreExternalTextureSource_H
+#define _OgreExternalTextureSource_H
+ 
+/***************************************************************************
+OgreExternalTextureSource.h  -  
+	Base class that texture plugins need to derive from. This provides the hooks
+	neccessary for a plugin developer to easily extend the functionality of dynamic textures.
+	It makes creation/destruction of dynamic textures more streamlined. While the plugin
+	will need to talk with Ogre for the actual modification of textures, this class allows
+	easy integration with Ogre apps. Material script files can be used to aid in the 
+	creation of dynamic textures. Functionality can be added that is not defined here
+	through the use of the base dictionary. For an exmaple of how to use this class and the
+	string interface see ffmpegVideoPlugIn.
+
+-------------------
+date                 : Jan 1 2004
+email                : pjcast@yahoo.com
+***************************************************************************/
+
+#include "OgreStringInterface.h"
+#include "OgreResourceGroupManager.h"
+
+namespace Ogre
+{
+	/** Enum for type of texture play mode */
+	enum eTexturePlayMode
+	{
+		TextureEffectPause = 0,			//! Video starts out paused
+		TextureEffectPlay_ASAP = 1,		//! Video starts playing as soon as posible
+		TextureEffectPlay_Looping = 2	//! Video Plays Instantly && Loops
+	};
+
+	/** IMPORTANT: **Plugins must override default dictionary name!** 
+	Base class that texture plugins derive from. Any specific 
+	requirements that the plugin needs to have defined before 
+	texture/material creation must be define using the stringinterface
+	before calling create defined texture... or it will fail, though, it 
+	is up to the plugin to report errors to the log file, or raise an 
+	exception if need be. */
+	class _OgreExport ExternalTextureSource : public StringInterface
+	{
+	public:
+		/** Constructor */
+		ExternalTextureSource();
+		/** Virtual destructor */
+		virtual ~ExternalTextureSource() {}
+
+		//------------------------------------------------------------------------------//
+		/* Command objects for specifying some base features							*/
+		/* Any PlugIns wishing to add more specific params to "ExternalTextureSourcePlugins"*/
+		/* dictionary, feel free to do so, that's why this is here						*/
+        class _OgrePrivate CmdInputFileName : public ParamCommand
+        {
+        public:
+			String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        class _OgrePrivate CmdFPS : public ParamCommand
+        {
+        public:
+			String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        class _OgrePrivate CmdPlayMode : public ParamCommand
+        {
+        public:
+			String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        class _OgrePrivate CmdTecPassState : public ParamCommand
+        {
+        public:
+			String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+		//--------------------------------------------------------//
+		//Base Functions that work with Command String Interface... Or can be called
+		//manually to create video through code 
+
+		//! Sets an input file name - if needed by plugin
+		void setInputName( String sIN ) { mInputFileName = sIN; }
+		//! Gets currently set input file name
+		const String& getInputName( ) const	{ return mInputFileName; }
+		//! Sets the frames per second - plugin may or may not use this
+		void setFPS( int iFPS ) { mFramesPerSecond = iFPS; }
+		//! Gets currently set frames per second
+		const int getFPS( ) const { return mFramesPerSecond; }
+		//! Sets a play mode
+		void setPlayMode( eTexturePlayMode eMode )	{ mMode = eMode; }
+		//! Gets currently set play mode
+		eTexturePlayMode getPlayMode() const { return mMode; }
+
+		//! Used for attaching texture to Technique, State, and texture unit layer
+		void setTextureTecPassStateLevel( int t, int p, int s ) 
+				{ mTechniqueLevel = t;mPassLevel = p;mStateLevel = s; }
+		//! Get currently selected Textute attribs.
+		void getTextureTecPassStateLevel( int& t, int& p, int& s ) const
+				{t = mTechniqueLevel;	p = mPassLevel;	s = mStateLevel;}
+		
+		/** Call from derived classes to ensure the dictionary is setup */
+		void addBaseParams();
+
+		/** Returns the string name of this PlugIn (as set by the PlugIn)*/
+		const String& getPlugInStringName( ) { return mPlugInName; }
+		/** Returns dictionary name */
+		const String& getDictionaryStringName( ) { return mDictionaryName; }
+
+		//Pure virtual functions that plugins must Override
+		/** Call this function from manager to init system */
+		virtual bool initialise() = 0;
+		/** Shuts down PlugIn */
+		virtual void shutDown() = 0;
+
+		/** Creates a texture into an already defined material or one that is created new
+		(it's up to plugin to use a material or create one)
+		Before calling, ensure that needed params have been defined via the stringInterface
+		or regular methods */
+		virtual void createDefinedTexture( const String& sMaterialName,
+			const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME) = 0;
+		/** What this destroys is dependent on the plugin... See specific plugin
+		doc to know what is all destroyed (normally, plugins will destroy only
+		what they created, or used directly - ie. just texture unit) */
+		virtual void destroyAdvancedTexture( const String& sTextureName,
+			const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME) = 0;
+
+	protected:
+        static CmdInputFileName msCmdInputFile;		//! Command for setting input file name
+		static CmdFPS msCmdFramesPerSecond;			//! Command for setting frames per second
+		static CmdPlayMode msCmdPlayMode;			//! Command for setting play mode
+		static CmdTecPassState msCmdTecPassState;	//! Command for setting the tecnique, pass, & state level
+
+
+		//! String Name of this PlugIn
+		String mPlugInName;
+	
+		//------ Vars used for setting/getting dictionary stuff -----------//
+		eTexturePlayMode mMode;
+		
+		String mInputFileName;
+		
+		bool mUpdateEveryFrame;
+		
+		int mFramesPerSecond,
+			mTechniqueLevel,
+			mPassLevel,	
+			mStateLevel;
+		//------------------------------------------------------------------//
+
+	protected:
+		/** The string name of the dictionary name - each plugin
+		must override default name */
+		String mDictionaryName;
+	};
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreTechnique.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreTechnique.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreTechnique.h	(revision 1092)
@@ -0,0 +1,406 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __Technique_H__
+#define __Technique_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreIteratorWrappers.h"
+#include "OgreBlendMode.h"
+#include "OgreCommon.h"
+#include "OgrePass.h"
+
+namespace Ogre {
+    /** Class representing an approach to rendering this particular Material. 
+    @remarks
+        Ogre will attempt to use the best technique supported by the active hardware, 
+        unless you specifically request a lower detail technique (say for distant
+        rendering).
+    */
+    class _OgreExport Technique
+    {
+    protected:
+        // illumination pass state type
+        enum IlluminationPassesState
+        {
+            IPS_COMPILE_DISABLED = -1,
+            IPS_NOT_COMPILED = 0,
+            IPS_COMPILED = 1
+        };
+
+        typedef std::vector<Pass*> Passes;
+        /// List of primary passes
+        Passes mPasses;
+        /// List of derived passes, categorised into IlluminationStage (ordered)
+        IlluminationPassList mIlluminationPasses;
+        Material* mParent; // raw pointer since we don't want child to stop parent's destruction
+        bool mIsSupported;
+        IlluminationPassesState mIlluminationPassesCompilationPhase;
+        unsigned short mLodIndex;
+
+        /// Internal method for clearing illumination pass list
+        void clearIlluminationPasses(void);
+    public:
+        /// Constructor
+        Technique(Material* parent);
+        /// Copy constructor
+        Technique(Material* parent, const Technique& oth);
+        ~Technique();
+        /** Indicates if this technique is supported by the current graphics card.
+        @remarks
+            This will only be correct after the Technique has been compiled, which is
+            usually done from Material::compile.
+        */
+        bool isSupported(void) const;
+        /** Internal compilation method; see Material::compile. */
+        void _compile(bool autoManageTextureUnits);
+        /** Internal method for splitting the passes into illumination passes. */        
+        void _compileIlluminationPasses(void);
+
+
+        /** Creates a new Pass for this Technique.
+        @remarks
+            A Pass is a single rendering pass, ie a single draw of the given material.
+            Note that if you create a pass without a fragment program, during compilation of the
+            material the pass may be split into multiple passes if the graphics card cannot
+            handle the number of texture units requested. For passes with fragment programs, however, 
+            the number of passes you create will never be altered, so you have to make sure 
+            that you create an alternative fallback Technique for if a card does not have 
+            enough facilities for what you're asking for.
+        */
+        Pass* createPass(void);
+        /** Retrieves the Pass with the given index. */
+        Pass* getPass(unsigned short index);
+        /** Retrieves the number of passes. */
+        unsigned short getNumPasses(void) const;
+        /** Removes the Pass with the given index. */
+        void removePass(unsigned short index);
+        /** Removes all Passes from this Technique. */
+        void removeAllPasses(void);
+        typedef VectorIterator<Passes> PassIterator;
+        /** Gets an iterator over the passes in this Technique. */
+        const PassIterator getPassIterator(void);
+        typedef VectorIterator<IlluminationPassList> IlluminationPassIterator;
+        /** Gets an iterator over the illumination-stage categorised passes. */
+        const IlluminationPassIterator getIlluminationPassIterator(void);
+        /// Gets the parent Material
+        Material* getParent(void) const { return mParent; }
+
+        /** Overloaded operator to copy on Technique to another. */
+        Technique& operator=(const Technique& rhs);
+
+		/// Gets the resource group of the ultimate parent Material
+		const String& getResourceGroup(void) const;
+
+		/** Returns true if this Technique involves transparency. 
+		@remarks
+			This basically boils down to whether the first pass
+			has a scene blending factor. Even if the other passes 
+			do not, the base colour, including parts of the original 
+			scene, may be used for blending, therefore we have to treat
+			the whole Technique as transparent.
+		*/
+		bool isTransparent(void) const;
+
+        /** Internal load method, derived from call to Material::load. */
+        void _load(void);
+        /** Internal unload method, derived from call to Material::unload. */
+        void _unload(void);
+
+        // Is this loaded?
+        bool isLoaded(void) const;
+
+        /** Tells the technique that it needs recompilation. */
+        void _notifyNeedsRecompile(void);
+
+
+        // -------------------------------------------------------------------------------
+        // The following methods are to make migration from previous versions simpler
+        // and to make code easier to write when dealing with simple materials
+        // They set the properties which have been moved to Pass for all Techniques and all Passes
+
+        /** Sets the ambient colour reflectance properties for every Pass in every Technique.
+        @note
+            This property actually exists on the Pass class. For simplicity, this method allows 
+            you to set these properties for every current Pass within this Technique. If 
+            you need more precision, retrieve the Pass instance and set the
+            property there.
+        @see Pass::setAmbient
+        */
+        void setAmbient(Real red, Real green, Real blue);
+
+        /** Sets the ambient colour reflectance properties for every Pass in every Technique.
+        @note
+            This property actually exists on the Pass class. For simplicity, this method allows 
+            you to set these properties for every current Pass within this Technique. If 
+            you need more precision, retrieve the Pass instance and set the
+            property there.
+        @see Pass::setAmbient
+        */
+        void setAmbient(const ColourValue& ambient);
+
+        /** Sets the diffuse colour reflectance properties of every Pass in every Technique.
+        @note
+            This property actually exists on the Pass class. For simplicity, this method allows 
+            you to set these properties for every current Pass within this Technique. If 
+            you need more precision, retrieve the Pass instance and set the
+            property there.
+        @see Pass::setDiffuse
+        */
+        void setDiffuse(Real red, Real green, Real blue, Real alpha);
+
+        /** Sets the diffuse colour reflectance properties of every Pass in every Technique.
+        @note
+            This property actually exists on the Pass class. For simplicity, this method allows 
+            you to set these properties for every current Pass within this Technique. If 
+            you need more precision, retrieve the Pass instance and set the
+            property there.
+        @see Pass::setDiffuse
+        */
+        void setDiffuse(const ColourValue& diffuse);
+
+        /** Sets the specular colour reflectance properties of every Pass in every Technique.
+        @note
+            This property actually exists on the Pass class. For simplicity, this method allows 
+            you to set these properties for every current Pass within this Technique. If 
+            you need more precision, retrieve the Pass instance and set the
+            property there.
+        @see Pass::setSpecular
+        */
+        void setSpecular(Real red, Real green, Real blue, Real alpha);
+
+        /** Sets the specular colour reflectance properties of every Pass in every Technique.
+        @note
+            This property actually exists on the Pass class. For simplicity, this method allows 
+            you to set these properties for every current Pass within this Technique. If 
+            you need more precision, retrieve the Pass instance and set the
+            property there.
+        @see Pass::setSpecular
+        */
+        void setSpecular(const ColourValue& specular);
+
+        /** Sets the shininess properties of every Pass in every Technique.
+        @note
+            This property actually exists on the Pass class. For simplicity, this method allows 
+            you to set these properties for every current Pass within this Technique. If 
+            you need more precision, retrieve the Pass instance and set the
+            property there.
+        @see Pass::setShininess
+        */
+        void setShininess(Real val);
+
+        /** Sets the amount of self-illumination of every Pass in every Technique.
+        @note
+            This property actually exists on the Pass class. For simplicity, this method allows 
+            you to set these properties for every current Pass within this Technique. If 
+            you need more precision, retrieve the Pass instance and set the
+            property there.
+        @see Pass::setSelfIllumination
+        */
+        void setSelfIllumination(Real red, Real green, Real blue);
+
+        /** Sets the amount of self-illumination of every Pass in every Technique.
+        @note
+            This property actually exists on the Pass class. For simplicity, this method allows 
+            you to set these properties for every current Pass within this Technique. If 
+            you need more precision, retrieve the Pass instance and set the
+            property there.
+        @see Pass::setSelfIllumination
+        */
+        void setSelfIllumination(const ColourValue& selfIllum);
+
+		/** Sets whether or not each Pass renders with depth-buffer checking on or not.
+        @note
+            This property actually exists on the Pass class. For simplicity, this method allows 
+            you to set these properties for every current Pass within this Technique. If 
+            you need more precision, retrieve the Pass instance and set the
+            property there.
+        @see Pass::setDepthCheckEnabled
+        */
+        void setDepthCheckEnabled(bool enabled);
+
+        /** Sets whether or not each Pass renders with depth-buffer writing on or not.
+        @note
+            This property actually exists on the Pass class. For simplicity, this method allows 
+            you to set these properties for every current Pass within this Technique. If 
+            you need more precision, retrieve the Pass instance and set the
+            property there.
+        @see Pass::setDepthWriteEnabled
+        */
+        void setDepthWriteEnabled(bool enabled);
+
+        /** Sets the function used to compare depth values when depth checking is on.
+        @note
+            This property actually exists on the Pass class. For simplicity, this method allows 
+            you to set these properties for every current Pass within this Technique. If 
+            you need more precision, retrieve the Pass instance and set the
+            property there.
+        @see Pass::setDepthFunction
+        */
+        void setDepthFunction( CompareFunction func );
+
+		/** Sets whether or not colour buffer writing is enabled for each Pass.
+        @note
+            This property actually exists on the Pass class. For simplicity, this method allows 
+            you to set these properties for every current Pass within this Technique. If 
+            you need more precision, retrieve the Pass instance and set the
+            property there.
+        @see Pass::setColourWriteEnabled
+		*/
+		void setColourWriteEnabled(bool enabled);
+
+        /** Sets the culling mode for each pass  based on the 'vertex winding'.
+        @note
+            This property actually exists on the Pass class. For simplicity, this method allows 
+            you to set these properties for every current Pass within this Technique. If 
+            you need more precision, retrieve the Pass instance and set the
+            property there.
+        @see Pass::setCullingMode
+        */
+        void setCullingMode( CullingMode mode );
+
+        /** Sets the manual culling mode, performed by CPU rather than hardware.
+        @note
+            This property actually exists on the Pass class. For simplicity, this method allows 
+            you to set these properties for every current Pass within this Technique. If 
+            you need more precision, retrieve the Pass instance and set the
+            property there.
+        @see Pass::setManualCullingMode
+        */
+        void setManualCullingMode( ManualCullingMode mode );
+
+        /** Sets whether or not dynamic lighting is enabled for every Pass.
+        @note
+            This property actually exists on the Pass class. For simplicity, this method allows 
+            you to set these properties for every current Pass within this Technique. If 
+            you need more precision, retrieve the Pass instance and set the
+            property there.
+        @see Pass::setLightingEnabled
+        */
+        void setLightingEnabled(bool enabled);
+
+        /** Sets the type of light shading required
+        @note
+            This property actually exists on the Pass class. For simplicity, this method allows 
+            you to set these properties for every current Pass within this Technique. If 
+            you need more precision, retrieve the Pass instance and set the
+            property there.
+        @see Pass::setShadingMode
+        */
+        void setShadingMode( ShadeOptions mode );
+
+        /** Sets the fogging mode applied to each pass.
+        @note
+            This property actually exists on the Pass class. For simplicity, this method allows 
+            you to set these properties for every current Pass within this Technique. If 
+            you need more precision, retrieve the Pass instance and set the
+            property there.
+        @see Pass::setFog
+        */
+        void setFog(
+            bool overrideScene,
+            FogMode mode = FOG_NONE,
+            const ColourValue& colour = ColourValue::White,
+            Real expDensity = 0.001, Real linearStart = 0.0, Real linearEnd = 1.0 );
+
+        /** Sets the depth bias to be used for each Pass.
+        @note
+            This property actually exists on the Pass class. For simplicity, this method allows 
+            you to set these properties for every current Pass within this Technique. If 
+            you need more precision, retrieve the Pass instance and set the
+            property there.
+        @see Pass::setDepthBias
+        */
+        void setDepthBias(ushort bias);
+
+        /** Set texture filtering for every texture unit in every Pass
+        @note
+            This property actually exists on the TextureUnitState class
+            For simplicity, this method allows you to set these properties for 
+            every current TeextureUnitState, If you need more precision, retrieve the  
+            Pass and TextureUnitState instances and set the property there.
+        @see TextureUnitState::setTextureFiltering
+        */
+        void setTextureFiltering(TextureFilterOptions filterType);
+        /** Sets the anisotropy level to be used for all textures.
+        @note
+            This property has been moved to the TextureUnitState class, which is accessible via the 
+            Technique and Pass. For simplicity, this method allows you to set these properties for 
+            every current TeextureUnitState, If you need more precision, retrieve the Technique, 
+            Pass and TextureUnitState instances and set the property there.
+        @see TextureUnitState::setTextureAnisotropy
+        */
+        void setTextureAnisotropy(unsigned int maxAniso);
+
+        /** Sets the kind of blending every pass has with the existing contents of the scene.
+        @note
+            This property actually exists on the Pass class. For simplicity, this method allows 
+            you to set these properties for every current Pass within this Technique. If 
+            you need more precision, retrieve the Pass instance and set the
+            property there.
+        @see Pass::setSceneBlending
+        */
+        void setSceneBlending( const SceneBlendType sbt );
+
+        /** Allows very fine control of blending every Pass with the existing contents of the scene.
+        @note
+            This property actually exists on the Pass class. For simplicity, this method allows 
+            you to set these properties for every current Pass within this Technique. If 
+            you need more precision, retrieve the Pass instance and set the
+            property there.
+        @see Pass::setSceneBlending
+        */
+        void setSceneBlending( const SceneBlendFactor sourceFactor, const SceneBlendFactor destFactor);
+
+        /** Assigns a level-of-detail (LOD) index to this Technique.
+        @remarks
+            As noted previously, as well as providing fallback support for various
+            graphics cards, multiple Technique objects can also be used to implement
+            material LOD, where the detail of the material diminishes with distance to 
+            save rendering power.
+        @par
+            By default, all Techniques have a LOD index of 0, which means they are the highest
+            level of detail. Increasing LOD indexes are lower levels of detail. You can 
+            assign more than one Technique to the same LOD index, meaning that the best 
+            Technique that is supported at that LOD index is used. 
+        @par
+            You should not leave gaps in the LOD sequence; Ogre will allow you to do this
+            and will continue to function as if the LODs were sequential, but it will 
+            confuse matters.
+        */
+        void setLodIndex(unsigned short index);
+        /** Gets the level-of-detail index assigned to this Technique. */
+        unsigned short getLodIndex(void) const { return mLodIndex; }
+
+        /** Is depth writing going to occur on this technique? */
+        bool isDepthWriteEnabled(void) const;
+
+        /** Is depth checking going to occur on this technique? */
+        bool isDepthCheckEnabled(void) const;
+
+    };
+
+
+}
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreProgressiveMesh.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreProgressiveMesh.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreProgressiveMesh.h	(revision 1092)
@@ -0,0 +1,244 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+// The underlying algorithms in this class are based heavily on:
+/*
+ *  Progressive Mesh type Polygon Reduction Algorithm
+ *  by Stan Melax (c) 1998
+ */
+
+#ifndef __ProgressiveMesh_H_
+#define __ProgressiveMesh_H_
+
+#include "OgrePrerequisites.h"
+#include "OgreVector3.h"
+#include "OgreHardwareVertexBuffer.h"
+#include "OgreHardwareIndexBuffer.h"
+#include "OgreRenderOperation.h"
+
+namespace Ogre {
+
+    /** This class reduces the complexity of the geometry it is given.
+        This class is dedicated to reducing the number of triangles in a given mesh
+        taking into account seams in both geometry and texture co-ordinates and meshes 
+        which have multiple frames.
+    @par
+        The primary use for this is generating LOD versions of Mesh objects, but it can be
+        used by any geometry provider. The only limitation at the moment is that the 
+        provider uses a common vertex buffer for all LODs and one index buffer per LOD.
+        Therefore at the moment this class can only handle indexed geometry.
+    @par
+        NB the interface of this class will certainly change when compiled vertex buffers are
+        supported.
+    */
+    class _OgreExport ProgressiveMesh
+    {
+    public:
+
+		/** The way to derive the quota of vertices which are reduced at each LOD. */
+        enum VertexReductionQuota
+		{
+			/// A set number of vertices are removed at each reduction
+			VRQ_CONSTANT,
+			/// A proportion of the remaining number of vertices are removed at each reduction
+			VRQ_PROPORTIONAL
+		};
+
+        typedef std::vector<IndexData*> LODFaceList;
+
+        /** Constructor, takes the geometry data and index buffer. 
+		@remarks
+			DO NOT pass write-only, unshadowed buffers to this method! They will not
+			work. Pass only shadowed buffers, or better yet perform mesh reduction as
+			an offline process using DefaultHardwareBufferManager to manage vertex
+			buffers in system memory.
+		*/
+        ProgressiveMesh(const VertexData* vertexData, const IndexData* indexData);
+        virtual ~ProgressiveMesh();
+
+        /** Adds an extra vertex position buffer. 
+        @remarks
+            As well as the main vertex buffer, the client of this class may add extra versions
+            of the vertex buffer which will also be taken into account when the cost of 
+            simplifying the mesh is taken into account. This is because the cost of
+            simplifying an animated mesh cannot be calculated from just the reference position,
+            multiple positions needs to be assessed in order to find the best simplification option.
+		@par
+			DO NOT pass write-only, unshadowed buffers to this method! They will not
+			work. Pass only shadowed buffers, or better yet perform mesh reduction as
+			an offline process using DefaultHardwareBufferManager to manage vertex
+			buffers in system memory.
+        @param buffer Pointer to x/y/z buffer with vertex positions. The number of vertices
+            must be the same as in the original GeometryData passed to the constructor.
+        */
+        virtual void addExtraVertexPositionBuffer(const VertexData* vertexData);
+
+        /** Builds the progressive mesh with the specified number of levels.
+        @param numLevels The number of levels to include in the output excluding the full detail version.
+        @param outList Pointer to a list of LOD geometry data which will be completed by the application.
+			Each entry is a reduced form of the mesh, in decreasing order of detail.
+		@param quota The way to derive the number of vertices removed at each LOD
+		@param reductionValue Either the proportion of vertices to remove at each level, or a fixed
+			number of vertices to remove at each level, depending on the value of quota
+        */
+        virtual void build(ushort numLevels, LODFaceList* outList, 
+			VertexReductionQuota quota = VRQ_PROPORTIONAL, Real reductionValue = 0.5f );
+
+    protected:
+        const VertexData *mpVertexData;
+        const IndexData *mpIndexData;
+
+        size_t mCurrNumIndexes;
+		size_t mNumCommonVertices;
+
+        // Internal classes
+        class PMTriangle;
+        class PMVertex;
+
+        public: // VC6 hack
+
+        /** A vertex as used by a face. This records the index of the actual vertex which is used
+		by the face, and a pointer to the common vertex used for surface evaluation. */
+		class _OgrePrivate PMFaceVertex {
+		public:
+			size_t realIndex;
+			PMVertex* commonVertex;
+		};
+
+        protected:
+
+        /** A triangle in the progressive mesh, holds extra info like face normal. */
+        class _OgrePrivate PMTriangle {
+        public:
+            PMTriangle();
+            void setDetails(size_t index, PMFaceVertex *v0, PMFaceVertex *v1, PMFaceVertex *v2);
+	        void computeNormal(void);
+	        void replaceVertex(PMFaceVertex *vold, PMFaceVertex *vnew);
+	        bool hasCommonVertex(PMVertex *v) const;
+	        bool hasFaceVertex(PMFaceVertex *v) const;
+			PMFaceVertex* getFaceVertexFromCommon(PMVertex* commonVert);
+	        void notifyRemoved(void);
+
+	        PMFaceVertex* vertex[3]; // the 3 points that make this tri
+	        Vector3   normal;    // unit vector othogonal to this face
+            bool      removed;   // true if this tri is now removed
+			size_t index;
+        };
+
+        /** A vertex in the progressive mesh, holds info like collapse cost etc. 
+		This vertex can actually represent several vertices in the final model, because
+		vertices along texture seams etc will have been duplicated. In order to properly
+		evaluate the surface properties, a single common vertex is used for these duplicates,
+		and the faces hold the detail of the duplicated vertices.
+		*/
+        class _OgrePrivate PMVertex {
+        public:
+            PMVertex();
+	        void setDetails(const Vector3& v, size_t index);
+	        void removeIfNonNeighbor(PMVertex *n);
+			bool isBorder(void);/// true if this vertex is on the edge of an open geometry patch
+			bool isManifoldEdgeWith(PMVertex* v); // is edge this->src a manifold edge?
+			void notifyRemoved(void);
+
+            Vector3  position;  // location of point in euclidean space
+	        size_t index;       // place of vertex in original list
+            typedef std::set<PMVertex *> NeighborList;
+            typedef std::set<PMVertex *> DuplicateList;
+            NeighborList neighbor; // adjacent vertices
+	        typedef std::set<PMTriangle *> FaceList;
+            FaceList face;     // adjacent triangles
+
+	        Real collapseCost;  // cached cost of collapsing edge
+	        PMVertex * collapseTo; // candidate vertex for collapse
+            bool      removed;   // true if this vert is now removed
+			bool	  toBeRemoved; // denug
+
+			bool seam;	/// true if this vertex is on a model seam where vertices are duplicated
+
+        };
+
+        typedef std::vector<PMTriangle> TriangleList;
+        typedef std::vector<PMFaceVertex> FaceVertexList;
+        typedef std::vector<PMVertex> CommonVertexList;
+        typedef std::vector<Real> WorstCostList;
+
+        /// Data used to calculate the collapse costs
+        struct PMWorkingData
+        {
+            TriangleList mTriList; /// List of faces
+            FaceVertexList mFaceVertList; // The vertex details referenced by the triangles
+			CommonVertexList mVertList; // The master list of common vertices
+        };
+
+        typedef std::vector<PMWorkingData> WorkingDataList;
+        /// Multiple copies, 1 per vertex buffer
+        WorkingDataList mWorkingData;
+
+        /// The worst collapse cost from all vertex buffers for each vertex
+        WorstCostList mWorstCosts;
+
+        /// Internal method for building PMWorkingData from geometry data
+        void addWorkingData(const VertexData* vertexData, const IndexData* indexData);
+
+        /// Internal method for initialising the edge collapse costs
+        void initialiseEdgeCollapseCosts(void);
+        /// Internal calculation method for deriving a collapse cost  from u to v
+        Real computeEdgeCollapseCost(PMVertex *src, PMVertex *dest);
+        /// Internal method evaluates all collapse costs from this vertex and picks the lowest for a single buffer
+        Real computeEdgeCostAtVertexForBuffer(WorkingDataList::iterator idata, size_t vertIndex);
+        /// Internal method evaluates all collapse costs from this vertex for every buffer and returns the worst
+        void computeEdgeCostAtVertex(size_t vertIndex);
+        /// Internal method to compute edge collapse costs for all buffers /
+        void computeAllCosts(void);
+        /// Internal method for getting the index of next best vertex to collapse
+        size_t getNextCollapser(void);
+        /// Internal method builds an new LOD based on the current state
+        void bakeNewLOD(IndexData* pData);
+
+        /** Internal method, collapses vertex onto it's saved collapse target. 
+        @remarks
+            This updates the working triangle list to drop a triangle and recalculates
+            the edge collapse costs around the collapse target. 
+            This also updates all the working vertex lists for the relevant buffer. 
+        */
+        void collapse(PMVertex *collapser);
+
+		/** Internal debugging method */
+		void dumpContents(const String& log);
+
+
+
+
+
+
+
+
+
+    };
+
+
+
+}
+
+#endif 
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreConfigDialog.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreConfigDialog.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreConfigDialog.h	(revision 1092)
@@ -0,0 +1,72 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __ConfigDialog_H__
+#define __ConfigDialog_H__
+
+// Precompiler options
+#include "OgrePrerequisites.h"
+
+namespace Ogre {
+    /** Defines the behaviour of an automatic renderer configuration dialog.
+        @remarks
+            OGRE comes with it's own renderer configuration dialog, which
+            applications can use to easily allow the user to configure the
+            settings appropriate to their machine. This class defines the
+            interface to this standard dialog. Because dialogs are inherently
+            tied to a particular platform's windowing system, there will be a
+            different subclass for each platform.
+        @author
+            Steven J. Streeting
+    */
+    class _OgreExport ConfigDialog
+    {
+    public:
+    	virtual ~ConfigDialog();
+    	
+        /** Displays the dialog.
+            @remarks
+                This method displays the dialog and from then on the dialog
+                interacts with the user independently. The dialog will be
+                calling the relevant OGRE rendering systems to query them for
+                options and to set the options the user selects. The method
+                returns when the user closes the dialog.
+            @returns
+                If the user accepted the dialog, <b>true</b> is returned.
+            @par
+                If the user cancelled the dialog (indicating the application
+                should probably terminate), <b>false</b> is returned.
+            @see
+                RenderSystem
+        */
+        virtual bool display(void) = 0;
+    protected:
+        RenderSystem* mSelectedRenderSystem;
+    };
+
+    /// Defines the interface OgrePlatform.dll/OgrePlatform.so must implement
+    typedef void (*DLL_CREATECONFIGDIALOG)(ConfigDialog** ppDlg);
+
+}
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMatrix4.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMatrix4.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMatrix4.h	(revision 1092)
@@ -0,0 +1,512 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __Matrix4__
+#define __Matrix4__
+
+// Precompiler options
+#include "OgrePrerequisites.h"
+
+#include "OgreVector3.h"
+#include "OgreMatrix3.h"
+#include "OgreVector4.h"
+#include "OgrePlane.h"
+namespace Ogre
+{
+    /** Class encapsulating a standard 4x4 homogenous matrix.
+        @remarks
+            OGRE uses column vectors when applying matrix multiplications,
+            This means a vector is represented as a single column, 4-row
+            matrix. This has the effect that the tranformations implemented
+            by the matrices happens right-to-left e.g. if vector V is to be
+            transformed by M1 then M2 then M3, the calculation would be
+            M3 * M2 * M1 * V. The order that matrices are concatenated is
+            vital since matrix multiplication is not cummatative, i.e. you
+            can get a different result if you concatenate in the wrong order.
+        @par
+            The use of column vectors and right-to-left ordering is the
+            standard in most mathematical texts, and id the same as used in
+            OpenGL. It is, however, the opposite of Direct3D, which has
+            inexplicably chosen to differ from the accepted standard and uses
+            row vectors and left-to-right matrix multiplication.
+        @par
+            OGRE deals with the differences between D3D and OpenGL etc.
+            internally when operating through different render systems. OGRE
+            users only need to conform to standard maths conventions, i.e.
+            right-to-left matrix multiplication, (OGRE transposes matrices it
+            passes to D3D to compensate).
+        @par
+            The generic form M * V which shows the layout of the matrix 
+            entries is shown below:
+            <pre>
+                [ m[0][0]  m[0][1]  m[0][2]  m[0][3] ]   {x}
+                | m[1][0]  m[1][1]  m[1][2]  m[1][3] | * {y}
+                | m[2][0]  m[2][1]  m[2][2]  m[2][3] |   {z}
+                [ m[3][0]  m[3][1]  m[3][2]  m[3][3] ]   {1}
+            </pre>
+    */
+    class _OgreExport Matrix4
+    {
+    protected:
+        /// The matrix entries, indexed by [row][col].
+        union {
+            Real m[4][4];
+            Real _m[16];
+        };
+    public:
+        /** Default constructor.
+            @note
+                It does <b>NOT</b> initialize the matrix for efficiency.
+        */
+        inline Matrix4()
+        {
+        }
+
+        inline Matrix4(
+            Real m00, Real m01, Real m02, Real m03,
+            Real m10, Real m11, Real m12, Real m13,
+            Real m20, Real m21, Real m22, Real m23,
+            Real m30, Real m31, Real m32, Real m33 )
+        {
+            m[0][0] = m00;
+            m[0][1] = m01;
+            m[0][2] = m02;
+            m[0][3] = m03;
+            m[1][0] = m10;
+            m[1][1] = m11;
+            m[1][2] = m12;
+            m[1][3] = m13;
+            m[2][0] = m20;
+            m[2][1] = m21;
+            m[2][2] = m22;
+            m[2][3] = m23;
+            m[3][0] = m30;
+            m[3][1] = m31;
+            m[3][2] = m32;
+            m[3][3] = m33;
+        }
+
+        /** Creates a standard 4x4 transformation matrix with a zero translation part from a rotation/scaling 3x3 matrix.
+         */
+
+        inline Matrix4(const Matrix3& m3x3)
+        {
+          operator=(IDENTITY);
+          operator=(m3x3);
+        }
+
+        /** Creates a standard 4x4 transformation matrix with a zero translation part from a rotation/scaling Quaternion.
+         */
+        
+        inline Matrix4(const Quaternion& rot)
+        {
+          Matrix3 m3x3;
+          rot.ToRotationMatrix(m3x3);
+          operator=(IDENTITY);
+          operator=(m3x3);
+        }
+        
+
+        inline Real* operator [] ( size_t iRow )
+        {
+            assert( iRow < 4 );
+            return m[iRow];
+        }
+
+        inline const Real *const operator [] ( size_t iRow ) const
+        {
+            assert( iRow < 4 );
+            return m[iRow];
+        }
+
+        inline Matrix4 concatenate(const Matrix4 &m2) const
+        {
+            Matrix4 r;
+            r.m[0][0] = m[0][0] * m2.m[0][0] + m[0][1] * m2.m[1][0] + m[0][2] * m2.m[2][0] + m[0][3] * m2.m[3][0];
+            r.m[0][1] = m[0][0] * m2.m[0][1] + m[0][1] * m2.m[1][1] + m[0][2] * m2.m[2][1] + m[0][3] * m2.m[3][1];
+            r.m[0][2] = m[0][0] * m2.m[0][2] + m[0][1] * m2.m[1][2] + m[0][2] * m2.m[2][2] + m[0][3] * m2.m[3][2];
+            r.m[0][3] = m[0][0] * m2.m[0][3] + m[0][1] * m2.m[1][3] + m[0][2] * m2.m[2][3] + m[0][3] * m2.m[3][3];
+
+            r.m[1][0] = m[1][0] * m2.m[0][0] + m[1][1] * m2.m[1][0] + m[1][2] * m2.m[2][0] + m[1][3] * m2.m[3][0];
+            r.m[1][1] = m[1][0] * m2.m[0][1] + m[1][1] * m2.m[1][1] + m[1][2] * m2.m[2][1] + m[1][3] * m2.m[3][1];
+            r.m[1][2] = m[1][0] * m2.m[0][2] + m[1][1] * m2.m[1][2] + m[1][2] * m2.m[2][2] + m[1][3] * m2.m[3][2];
+            r.m[1][3] = m[1][0] * m2.m[0][3] + m[1][1] * m2.m[1][3] + m[1][2] * m2.m[2][3] + m[1][3] * m2.m[3][3];
+
+            r.m[2][0] = m[2][0] * m2.m[0][0] + m[2][1] * m2.m[1][0] + m[2][2] * m2.m[2][0] + m[2][3] * m2.m[3][0];
+            r.m[2][1] = m[2][0] * m2.m[0][1] + m[2][1] * m2.m[1][1] + m[2][2] * m2.m[2][1] + m[2][3] * m2.m[3][1];
+            r.m[2][2] = m[2][0] * m2.m[0][2] + m[2][1] * m2.m[1][2] + m[2][2] * m2.m[2][2] + m[2][3] * m2.m[3][2];
+            r.m[2][3] = m[2][0] * m2.m[0][3] + m[2][1] * m2.m[1][3] + m[2][2] * m2.m[2][3] + m[2][3] * m2.m[3][3];
+
+            r.m[3][0] = m[3][0] * m2.m[0][0] + m[3][1] * m2.m[1][0] + m[3][2] * m2.m[2][0] + m[3][3] * m2.m[3][0];
+            r.m[3][1] = m[3][0] * m2.m[0][1] + m[3][1] * m2.m[1][1] + m[3][2] * m2.m[2][1] + m[3][3] * m2.m[3][1];
+            r.m[3][2] = m[3][0] * m2.m[0][2] + m[3][1] * m2.m[1][2] + m[3][2] * m2.m[2][2] + m[3][3] * m2.m[3][2];
+            r.m[3][3] = m[3][0] * m2.m[0][3] + m[3][1] * m2.m[1][3] + m[3][2] * m2.m[2][3] + m[3][3] * m2.m[3][3];
+
+            return r;
+        }
+
+        /** Matrix concatenation using '*'.
+        */
+        inline Matrix4 operator * ( const Matrix4 &m2 ) const
+        {
+            return concatenate( m2 );
+        }
+
+        /** Vector transformation using '*'.
+            @remarks
+                Transforms the given 3-D vector by the matrix, projecting the 
+                result back into <i>w</i> = 1.
+            @note
+                This means that the initial <i>w</i> is considered to be 1.0,
+                and then all the tree elements of the resulting 3-D vector are
+                divided by the resulting <i>w</i>.
+        */
+        inline Vector3 operator * ( const Vector3 &v ) const
+        {
+            Vector3 r;
+
+            Real fInvW = 1.0 / ( m[3][0] * v.x + m[3][1] * v.y + m[3][2] * v.z + m[3][3] );
+
+            r.x = ( m[0][0] * v.x + m[0][1] * v.y + m[0][2] * v.z + m[0][3] ) * fInvW;
+            r.y = ( m[1][0] * v.x + m[1][1] * v.y + m[1][2] * v.z + m[1][3] ) * fInvW;
+            r.z = ( m[2][0] * v.x + m[2][1] * v.y + m[2][2] * v.z + m[2][3] ) * fInvW;
+
+            return r;
+        }
+        inline Vector4 operator * (const Vector4& v) const
+        {
+            return Vector4(
+                m[0][0] * v.x + m[0][1] * v.y + m[0][2] * v.z + m[0][3] * v.w, 
+                m[1][0] * v.x + m[1][1] * v.y + m[1][2] * v.z + m[1][3] * v.w,
+                m[2][0] * v.x + m[2][1] * v.y + m[2][2] * v.z + m[2][3] * v.w,
+                m[3][0] * v.x + m[3][1] * v.y + m[3][2] * v.z + m[3][3] * v.w
+                );
+        }
+        inline Plane operator * (const Plane& p) const
+        {
+            Plane ret;
+			Matrix4 invTrans = inverse().transpose();
+            ret.normal.x =
+                invTrans[0][0] * p.normal.x + invTrans[0][1] * p.normal.y + invTrans[0][2] * p.normal.z;
+            ret.normal.y = 
+                invTrans[1][0] * p.normal.x + invTrans[1][1] * p.normal.y + invTrans[1][2] * p.normal.z;
+            ret.normal.z = 
+                invTrans[2][0] * p.normal.x + invTrans[2][1] * p.normal.y + invTrans[2][2] * p.normal.z;
+            Vector3 pt = p.normal * -p.d;
+            pt = *this * pt;
+            ret.d = - pt.dotProduct(ret.normal);
+            return ret;
+        }
+
+
+        /** Matrix addition.
+        */
+        inline Matrix4 operator + ( const Matrix4 &m2 ) const
+        {
+            Matrix4 r;
+
+            r.m[0][0] = m[0][0] + m2.m[0][0];
+            r.m[0][1] = m[0][1] + m2.m[0][1];
+            r.m[0][2] = m[0][2] + m2.m[0][2];
+            r.m[0][3] = m[0][3] + m2.m[0][3];
+
+            r.m[1][0] = m[1][0] + m2.m[1][0];
+            r.m[1][1] = m[1][1] + m2.m[1][1];
+            r.m[1][2] = m[1][2] + m2.m[1][2];
+            r.m[1][3] = m[1][3] + m2.m[1][3];
+
+            r.m[2][0] = m[2][0] + m2.m[2][0];
+            r.m[2][1] = m[2][1] + m2.m[2][1];
+            r.m[2][2] = m[2][2] + m2.m[2][2];
+            r.m[2][3] = m[2][3] + m2.m[2][3];
+
+            r.m[3][0] = m[3][0] + m2.m[3][0];
+            r.m[3][1] = m[3][1] + m2.m[3][1];
+            r.m[3][2] = m[3][2] + m2.m[3][2];
+            r.m[3][3] = m[3][3] + m2.m[3][3];
+
+            return r;
+        }
+
+        /** Matrix subtraction.
+        */
+        inline Matrix4 operator - ( const Matrix4 &m2 ) const
+        {
+            Matrix4 r;
+            r.m[0][0] = m[0][0] - m2.m[0][0];
+            r.m[0][1] = m[0][1] - m2.m[0][1];
+            r.m[0][2] = m[0][2] - m2.m[0][2];
+            r.m[0][3] = m[0][3] - m2.m[0][3];
+
+            r.m[1][0] = m[1][0] - m2.m[1][0];
+            r.m[1][1] = m[1][1] - m2.m[1][1];
+            r.m[1][2] = m[1][2] - m2.m[1][2];
+            r.m[1][3] = m[1][3] - m2.m[1][3];
+
+            r.m[2][0] = m[2][0] - m2.m[2][0];
+            r.m[2][1] = m[2][1] - m2.m[2][1];
+            r.m[2][2] = m[2][2] - m2.m[2][2];
+            r.m[2][3] = m[2][3] - m2.m[2][3];
+
+            r.m[3][0] = m[3][0] - m2.m[3][0];
+            r.m[3][1] = m[3][1] - m2.m[3][1];
+            r.m[3][2] = m[3][2] - m2.m[3][2];
+            r.m[3][3] = m[3][3] - m2.m[3][3];
+
+            return r;
+        }
+
+        /** Tests 2 matrices for equality.
+        */
+        inline bool operator == ( const Matrix4& m2 ) const
+        {
+            if( 
+                m[0][0] != m2.m[0][0] || m[0][1] != m2.m[0][1] || m[0][2] != m2.m[0][2] || m[0][3] != m2.m[0][3] ||
+                m[1][0] != m2.m[1][0] || m[1][1] != m2.m[1][1] || m[1][2] != m2.m[1][2] || m[1][3] != m2.m[1][3] ||
+                m[2][0] != m2.m[2][0] || m[2][1] != m2.m[2][1] || m[2][2] != m2.m[2][2] || m[2][3] != m2.m[2][3] ||
+                m[3][0] != m2.m[3][0] || m[3][1] != m2.m[3][1] || m[3][2] != m2.m[3][2] || m[3][3] != m2.m[3][3] )
+                return false;
+            return true;
+        }
+
+        /** Tests 2 matrices for inequality.
+        */
+        inline bool operator != ( const Matrix4& m2 ) const
+        {
+            if( 
+                m[0][0] != m2.m[0][0] || m[0][1] != m2.m[0][1] || m[0][2] != m2.m[0][2] || m[0][3] != m2.m[0][3] ||
+                m[1][0] != m2.m[1][0] || m[1][1] != m2.m[1][1] || m[1][2] != m2.m[1][2] || m[1][3] != m2.m[1][3] ||
+                m[2][0] != m2.m[2][0] || m[2][1] != m2.m[2][1] || m[2][2] != m2.m[2][2] || m[2][3] != m2.m[2][3] ||
+                m[3][0] != m2.m[3][0] || m[3][1] != m2.m[3][1] || m[3][2] != m2.m[3][2] || m[3][3] != m2.m[3][3] )
+                return true;
+            return false;
+        }
+
+        /** Assignment from 3x3 matrix.
+        */
+        inline void operator = ( const Matrix3& mat3 )
+        {
+            m[0][0] = mat3.m[0][0]; m[0][1] = mat3.m[0][1]; m[0][2] = mat3.m[0][2];
+            m[1][0] = mat3.m[1][0]; m[1][1] = mat3.m[1][1]; m[1][2] = mat3.m[1][2];
+            m[2][0] = mat3.m[2][0]; m[2][1] = mat3.m[2][1]; m[2][2] = mat3.m[2][2];
+        }
+
+        inline Matrix4 transpose(void) const
+        {
+            return Matrix4(m[0][0], m[1][0], m[2][0], m[3][0],
+                           m[0][1], m[1][1], m[2][1], m[3][1],
+                           m[0][2], m[1][2], m[2][2], m[3][2],
+                           m[0][3], m[1][3], m[2][3], m[3][3]);
+        }
+
+        /*
+        -----------------------------------------------------------------------
+        Translation Transformation
+        -----------------------------------------------------------------------
+        */
+        /** Sets the translation transformation part of the matrix.
+        */
+        inline void setTrans( const Vector3& v )
+        {
+            m[0][3] = v.x;
+            m[1][3] = v.y;
+            m[2][3] = v.z;
+        }
+
+        /** Extracts the translation transformation part of the matrix.
+         */
+        inline Vector3 getTrans() const
+        {
+          return Vector3(m[0][3], m[1][3], m[2][3]);
+        }
+        
+
+        /** Builds a translation matrix
+        */
+        inline void makeTrans( const Vector3& v )
+        {
+            m[0][0] = 1.0; m[0][1] = 0.0; m[0][2] = 0.0; m[0][3] = v.x;
+            m[1][0] = 0.0; m[1][1] = 1.0; m[1][2] = 0.0; m[1][3] = v.y;
+            m[2][0] = 0.0; m[2][1] = 0.0; m[2][2] = 1.0; m[2][3] = v.z;
+            m[3][0] = 0.0; m[3][1] = 0.0; m[3][2] = 0.0; m[3][3] = 1.0;
+        }
+
+        inline void makeTrans( Real tx, Real ty, Real tz )
+        {
+            m[0][0] = 1.0; m[0][1] = 0.0; m[0][2] = 0.0; m[0][3] = tx;
+            m[1][0] = 0.0; m[1][1] = 1.0; m[1][2] = 0.0; m[1][3] = ty;
+            m[2][0] = 0.0; m[2][1] = 0.0; m[2][2] = 1.0; m[2][3] = tz;
+            m[3][0] = 0.0; m[3][1] = 0.0; m[3][2] = 0.0; m[3][3] = 1.0;
+        }
+
+        /** Gets a translation matrix.
+        */
+        inline static Matrix4 getTrans( const Vector3& v )
+        {
+            Matrix4 r;
+
+            r.m[0][0] = 1.0; r.m[0][1] = 0.0; r.m[0][2] = 0.0; r.m[0][3] = v.x;
+            r.m[1][0] = 0.0; r.m[1][1] = 1.0; r.m[1][2] = 0.0; r.m[1][3] = v.y;
+            r.m[2][0] = 0.0; r.m[2][1] = 0.0; r.m[2][2] = 1.0; r.m[2][3] = v.z;
+            r.m[3][0] = 0.0; r.m[3][1] = 0.0; r.m[3][2] = 0.0; r.m[3][3] = 1.0;
+
+            return r;
+        }
+
+        /** Gets a translation matrix - variation for not using a vector.
+        */
+        inline static Matrix4 getTrans( Real t_x, Real t_y, Real t_z )
+        {
+            Matrix4 r;
+
+            r.m[0][0] = 1.0; r.m[0][1] = 0.0; r.m[0][2] = 0.0; r.m[0][3] = t_x;
+            r.m[1][0] = 0.0; r.m[1][1] = 1.0; r.m[1][2] = 0.0; r.m[1][3] = t_y;
+            r.m[2][0] = 0.0; r.m[2][1] = 0.0; r.m[2][2] = 1.0; r.m[2][3] = t_z;
+            r.m[3][0] = 0.0; r.m[3][1] = 0.0; r.m[3][2] = 0.0; r.m[3][3] = 1.0;
+
+            return r;
+        }
+
+        /*
+        -----------------------------------------------------------------------
+        Scale Transformation
+        -----------------------------------------------------------------------
+        */
+        /** Sets the scale part of the matrix.
+        */
+        inline void setScale( const Vector3& v )
+        {
+            m[0][0] = v.x;
+            m[1][1] = v.y;
+            m[2][2] = v.z;
+        }
+
+        /** Gets a scale matrix.
+        */
+        inline static Matrix4 getScale( const Vector3& v )
+        {
+            Matrix4 r;
+            r.m[0][0] = v.x; r.m[0][1] = 0.0; r.m[0][2] = 0.0; r.m[0][3] = 0.0;
+            r.m[1][0] = 0.0; r.m[1][1] = v.y; r.m[1][2] = 0.0; r.m[1][3] = 0.0;
+            r.m[2][0] = 0.0; r.m[2][1] = 0.0; r.m[2][2] = v.z; r.m[2][3] = 0.0;
+            r.m[3][0] = 0.0; r.m[3][1] = 0.0; r.m[3][2] = 0.0; r.m[3][3] = 1.0;
+
+            return r;
+        }
+
+        /** Gets a scale matrix - variation for not using a vector.
+        */
+        inline static Matrix4 getScale( Real s_x, Real s_y, Real s_z )
+        {
+            Matrix4 r;
+            r.m[0][0] = s_x; r.m[0][1] = 0.0; r.m[0][2] = 0.0; r.m[0][3] = 0.0;
+            r.m[1][0] = 0.0; r.m[1][1] = s_y; r.m[1][2] = 0.0; r.m[1][3] = 0.0;
+            r.m[2][0] = 0.0; r.m[2][1] = 0.0; r.m[2][2] = s_z; r.m[2][3] = 0.0;
+            r.m[3][0] = 0.0; r.m[3][1] = 0.0; r.m[3][2] = 0.0; r.m[3][3] = 1.0;
+
+            return r;
+        }
+
+        /** Extracts the rotation / scaling part of the Matrix as a 3x3 matrix. 
+        @param m3x3 Destination Matrix3
+        */
+        inline void extract3x3Matrix(Matrix3& m3x3) const
+        {
+            m3x3.m[0][0] = m[0][0];
+            m3x3.m[0][1] = m[0][1];
+            m3x3.m[0][2] = m[0][2];
+            m3x3.m[1][0] = m[1][0];
+            m3x3.m[1][1] = m[1][1];
+            m3x3.m[1][2] = m[1][2];
+            m3x3.m[2][0] = m[2][0];
+            m3x3.m[2][1] = m[2][1];
+            m3x3.m[2][2] = m[2][2];
+
+        }
+
+        /** Extracts the rotation / scaling part as a quaternion from the Matrix.
+         */
+        inline Quaternion extractQuaternion() const
+        {
+          Matrix3 m3x3;
+          extract3x3Matrix(m3x3);
+          return Quaternion(m3x3);
+        }
+
+        static const Matrix4 ZERO;
+        static const Matrix4 IDENTITY;
+        /** Useful little matrix which takes 2D clipspace {-1, 1} to {0,1}
+            and inverts the Y. */
+        static const Matrix4 CLIPSPACE2DTOIMAGESPACE;
+
+        inline Matrix4 operator*(Real scalar)
+        {
+            return Matrix4(
+                scalar*m[0][0], scalar*m[0][1], scalar*m[0][2], scalar*m[0][3],
+                scalar*m[1][0], scalar*m[1][1], scalar*m[1][2], scalar*m[1][3],
+                scalar*m[2][0], scalar*m[2][1], scalar*m[2][2], scalar*m[2][3],
+                scalar*m[3][0], scalar*m[3][1], scalar*m[3][2], scalar*m[3][3]);
+        }
+
+        /** Function for writing to a stream.
+        */
+        inline _OgreExport friend std::ostream& operator <<
+            ( std::ostream& o, const Matrix4& m )
+        {
+            o << "Matrix4(";
+			for (size_t i = 0; i < 4; ++i)
+            {
+                o << " row" << (unsigned)i << "{";
+                for(size_t j = 0; j < 4; ++j)
+                {
+                    o << m[i][j] << " ";
+                }
+                o << "}";
+            }
+            o << ")";
+            return o;
+        }
+		
+		Matrix4 adjoint() const;
+		Real determinant() const;
+		Matrix4 inverse() const;
+
+    };
+
+    /* Removed from Vector4 and made a non-member here because otherwise
+       OgreMatrix4.h and OgreVector4.h have to try to include and inline each 
+       other, which frankly doesn't work ;)
+   */
+    inline Vector4 operator * (const Vector4& v, const Matrix4& mat)
+    {
+        return Vector4(
+            v.x*mat[0][0] + v.y*mat[1][0] + v.z*mat[2][0] + v.w*mat[3][0],
+            v.x*mat[0][1] + v.y*mat[1][1] + v.z*mat[2][1] + v.w*mat[3][1],
+            v.x*mat[0][2] + v.y*mat[1][2] + v.z*mat[2][2] + v.w*mat[3][2],
+            v.x*mat[0][3] + v.y*mat[1][3] + v.z*mat[2][3] + v.w*mat[3][3]
+            );
+    }
+
+}
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreBlendMode.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreBlendMode.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreBlendMode.h	(revision 1092)
@@ -0,0 +1,237 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __BLENDMODE_H__
+#define __BLENDMODE_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreColourValue.h"
+
+namespace Ogre {
+
+    /** Type of texture blend mode.
+    */
+    enum LayerBlendType
+    {
+        LBT_COLOUR,
+        LBT_ALPHA
+    };
+
+    /** List of valid texture blending operations, for use with TextureUnitState::setColourOperation.
+        @remarks
+            This list is a more limited list than LayerBlendOperationEx because it only
+            includes operations that are supportable in both multipass and multitexture
+            rendering and thus provides automatic fallback if multitexture hardware
+            is lacking or insufficient.
+    */
+    enum LayerBlendOperation {
+        /// Replace all colour with texture with no adjustment
+        LBO_REPLACE,
+        /// Add colour components together.
+        LBO_ADD,
+        /// Multiply colour components together.
+        LBO_MODULATE,
+        /// Blend based on texture alpha
+        LBO_ALPHA_BLEND
+
+    };
+
+    /** Expert list of valid texture blending operations, for use with TextureUnitState::setColourOperationEx
+        and TextureUnitState::setAlphaOperation, and internally in the LayerBlendModeEx class. It's worth
+        noting that these operations are for blending <i>between texture layers</i> and not between rendered objects
+        and the existing scene. Because all of these modes are only supported in multitexture hardware it may be
+        required to set up a fallback operation where this hardware is not available.
+    */
+    enum LayerBlendOperationEx {
+        /// use source1 without modification
+        LBX_SOURCE1,
+        /// use source2 without modification
+        LBX_SOURCE2,
+        /// multiply source1 and source2 together
+        LBX_MODULATE,
+        /// as LBX_MODULATE but brighten afterwards (x2)
+        LBX_MODULATE_X2,
+        /// as LBX_MODULATE but brighten more afterwards (x4)
+        LBX_MODULATE_X4,
+        /// add source1 and source2 together
+        LBX_ADD,
+        /// as LBX_ADD, but subtract 0.5 from the result
+        LBX_ADD_SIGNED,
+        /// as LBX_ADD, but subtract product from the sum
+        LBX_ADD_SMOOTH,
+        /// subtract source2 from source1
+        LBX_SUBTRACT,
+        /// use interpolated alpha value from vertices to scale source1, then add source2 scaled by (1-alpha)
+        LBX_BLEND_DIFFUSE_ALPHA,
+        /// as LBX_BLEND_DIFFUSE_ALPHA, but use alpha from texture
+        LBX_BLEND_TEXTURE_ALPHA,
+        /// as LBX_BLEND_DIFFUSE_ALPHA, but use current alpha from previous stages
+        LBX_BLEND_CURRENT_ALPHA,
+        /// as LBX_BLEND_DIFFUSE_ALPHA but use a constant manual blend value (0.0-1.0)
+        LBX_BLEND_MANUAL,
+        /// dotproduct of color1 and color2 
+        LBX_DOTPRODUCT
+    };
+
+    /** List of valid sources of values for blending operations used
+        in TextureUnitState::setColourOperation and TextureUnitState::setAlphaOperation,
+        and internally in the LayerBlendModeEx class.
+    */
+    enum LayerBlendSource
+    {
+        /// the colour as built up from previous stages
+        LBS_CURRENT,
+        /// the colour derived from the texture assigned to this layer
+        LBS_TEXTURE,
+        /// the interpolated diffuse colour from the vertices
+        LBS_DIFFUSE,
+        /// the interpolated specular colour from the vertices
+        LBS_SPECULAR,
+        /// a colour supplied manually as a separate argument
+        LBS_MANUAL
+    };
+    /** Class which manages blending of both colour and alpha components.
+        @remarks
+            This class is a utility class used by both TextureUnitState and
+            RenderSystem to wrap up the details of a blending operation. This blending
+            operation could be used for blending colour or alpha in a texture layer.
+            This class is really only for use by OGRE, since apps can deal with
+            blending modes through the TextureUnitState class methods
+            setColourOperation and setAlphaOperation.
+        @par
+            It's worth noting that these operations are for blending <i>between texture
+            layers</i> and not between rendered objects and the existing scene. If
+            you wish to make an object blend with others in the scene, e.g. to make
+            transparent objects etc, use the Material::setSceneBlending method.
+    */
+    class _OgreExport LayerBlendModeEx
+    {
+    public:
+        /// The type of blending (colour or alpha)
+        LayerBlendType blendType;
+        /// The operation to be applied
+        LayerBlendOperationEx operation;
+        /// The first source of colour/alpha
+        LayerBlendSource source1;
+        /// The second source of colour/alpha
+        LayerBlendSource source2;
+
+        /// Manual colour value for manual source1
+        ColourValue colourArg1;
+        /// Manual colour value for manual source2
+        ColourValue colourArg2;
+        /// Manual alpha value for manual source1
+        Real alphaArg1;
+        /// Manual colour value for manual source1
+        Real alphaArg2;
+        /// Manual blending factor
+        Real factor;
+
+        bool operator==(const LayerBlendModeEx& rhs) const
+        {
+            if (blendType != rhs.blendType) return false;
+
+            if (blendType == LBT_COLOUR)
+            {
+
+                if (operation == rhs.operation &&
+                    source1 == rhs.source1 &&
+                    source2 == rhs.source2 &&
+                    colourArg1 == rhs.colourArg1 &&
+                    colourArg2 == rhs.colourArg2 &&
+                    factor == rhs.factor)
+                {
+                    return true;
+                }
+            }
+            else // if (blendType == LBT_ALPHA)
+            {
+                if (operation == rhs.operation &&
+                    source1 == rhs.source1 &&
+                    source2 == rhs.source2 &&
+                    alphaArg1 == rhs.alphaArg1 &&
+                    alphaArg2 == rhs.alphaArg2 &&
+                    factor == rhs.factor)
+                {
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        bool operator!=(const LayerBlendModeEx& rhs) const
+        {
+            return !(*this == rhs);
+        }
+
+
+
+    };
+
+    /** Types of blending that you can specify between an object and the existing contents of the scene.
+        @remarks
+            As opposed to the LayerBlendType, which classifies blends between texture layers, these blending
+            types blend between the output of the texture units and the pixels already in the viewport,
+            allowing for object transparency, glows, etc.
+        @par
+            These types are provided to give quick and easy access to common effects. You can also use
+            the more manual method of supplying source and destination blending factors.
+            See Material::setSceneBlending for more details.
+        @see
+            Material::setSceneBlending
+    */
+    enum SceneBlendType
+    {
+        /// Make the object transparent based on the final alpha values in the texture
+        SBT_TRANSPARENT_ALPHA,
+        /// Make the object transparent based on the colour values in the texture (brighter = more opaque)
+        SBT_TRANSPARENT_COLOUR,
+        /// Add the texture values to the existing scene content
+        SBT_ADD,
+		/// Multiply the 2 colours together
+		SBT_MODULATE
+        // TODO : more
+    };
+
+    /** Blending factors for manually blending objects with the scene. If there isn't a predefined
+        SceneBlendType that you like, then you can specify the blending factors directly to affect the
+        combination of object and the existing scene. See Material::setSceneBlending for more details.
+    */
+    enum SceneBlendFactor
+    {
+        SBF_ONE,
+        SBF_ZERO,
+        SBF_DEST_COLOUR,
+        SBF_SOURCE_COLOUR,
+        SBF_ONE_MINUS_DEST_COLOUR,
+        SBF_ONE_MINUS_SOURCE_COLOUR,
+        SBF_DEST_ALPHA,
+        SBF_SOURCE_ALPHA,
+        SBF_ONE_MINUS_DEST_ALPHA,
+        SBF_ONE_MINUS_SOURCE_ALPHA
+
+    };
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSceneManagerEnumerator.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSceneManagerEnumerator.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSceneManagerEnumerator.h	(revision 1092)
@@ -0,0 +1,138 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __SceneManagerEnumerator_H__
+#define __SceneManagerEnumerator_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreSceneManager.h"
+#include "OgreSingleton.h"
+
+namespace Ogre {
+    /** Classification of a scene to allow a decision of what type of
+        SceenManager to provide back to the application.
+    */
+    enum SceneType
+    {
+        ST_GENERIC,
+        ST_EXTERIOR_CLOSE,
+        ST_EXTERIOR_FAR,
+        ST_EXTERIOR_REAL_FAR,
+        ST_INTERIOR
+    };
+    /** Enumerates the SceneManager classes available to applications.
+        @remarks
+            As described in the SceneManager class, SceneManagers are responsible
+            for organising the scene and issuing rendering commands to the
+            RenderSystem. Certain scene types can benefit from different
+            rendering approaches, and it is intended that subclasses will
+            be created to special case this.
+        @par
+            In order to give applications easy access to these implementations,
+            the Root object has a getSceneManager method to retrieve a SceneManager
+            which is appropriate to the scene type. However, this is the class
+            which implements this behaviour and defines the scene types, because
+            it is intended that the Root class is not customised by everybody
+            (and it may be restricted access in the future).
+        @par
+            If you customise Ogre and want to add a new SceneManager implementation
+            (e.g. an Octree-based scene manager for outside locations), feel
+            free to customise this class so that it is passed back where
+            required.
+        @par
+            For this early release of Ogre, only the basic SceneManager implementation
+            is passed back for all scene types. This is a highly generic and
+            extremely unoptimised reference implementation.
+    */
+    class _OgreExport SceneManagerEnumerator : public Singleton<SceneManagerEnumerator>
+    {
+    private:
+        // Set of SceneManagers (unique entries)
+        std::set<SceneManager*> mUniqueSceneMgrs;
+        // Collection of loaded scene managers, keyed by scene type
+        typedef std::map<SceneType, SceneManager*> SceneManagerList ;
+        SceneManagerList mSceneManagers;
+
+        /// Standard scene manager for default management
+        SceneManager* mDefaultManager;
+
+
+    public:
+        SceneManagerEnumerator();
+        ~SceneManagerEnumerator();
+
+        /** Sets a SceneManager implementation.
+        */
+        void setSceneManager(SceneType st, SceneManager* sm);
+
+        /** Implementation of SceneManager retrieval.
+        */
+        SceneManager* getSceneManager(SceneType st);
+
+        /** Notifies all SceneManagers of the destination rendering system.
+        */
+        void setRenderSystem(RenderSystem* rs);
+
+        /// Utility method to control shutdown of the managers
+        void shutdownAll(void);
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static SceneManagerEnumerator& getSingleton(void);
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static SceneManagerEnumerator* getSingletonPtr(void);
+
+    };
+
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreKeyEvent.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreKeyEvent.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreKeyEvent.h	(revision 1092)
@@ -0,0 +1,108 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General  License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General  License for more details.
+
+You should have received a copy of the GNU Lesser General  License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+/***************************************************************************
+OgreKeyEvent.h  -  
+ *
+-------------------
+begin                : Dec 03 2002
+copyright            : (C) 2002 by Kenny Sabir
+email                : kenny@sparksuit.com
+***************************************************************************/
+#ifndef __KeyEvent_H__
+#define __KeyEvent_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreInputEvent.h"
+
+namespace Ogre {
+
+/**
+ * @version 1.22 04/22/99
+ * @author Carl Quinn
+ */
+    class _OgreExport KeyEvent : public InputEvent
+    {
+    protected:
+
+		/**
+		 * Which key was pressed
+		 */
+
+		int mKey;
+
+	public:
+
+		enum
+		{
+			KE_FIRST_EVENT = 2500,
+			KE_LAST_EVENT = 2504
+		};
+
+		enum 
+		{
+			KE_KEY_CLICKED 	= KE_FIRST_EVENT,
+			KE_KEY_PRESSED,
+			KE_KEY_RELEASED,
+            KE_KEY_FOCUSIN,
+            KE_KEY_FOCUSOUT
+		};
+
+		/**
+		 * Constructs a KeyEvent object with the specified source KeyTarget,
+		 * type, modifiers, coordinates, and click count.
+		 *
+		 * @param source       the KeyTarget that originated the event
+		 * @param id           the integer that identifies the event
+		 * @param when         a long int that gives the time the event occurred
+		 * @param modifiers    the modifier keys down during event
+		 *                     (shift, ctrl, alt, meta)
+		 * @param x            the horizontal x coordinate for the key location
+		 * @param y            the vertical y coordinate for the key location
+		 * @param clickCount   the number of key clicks associated with event
+		 */
+		KeyEvent(PositionTarget* source, int id, int key, Real when, int modifiers);
+
+		/**
+		 * Returns a parameter string identifying this event.
+		 * This method is useful for event-logging and for debugging.
+		 *
+		 * @return a string identifying the event and its attributes
+		 */
+		 String paramString() const;
+
+
+		 /** return the ID of the button */
+		 int getKey();
+
+		 /** return the char of the button */
+		 char getKeyChar();
+    };
+
+
+}
+
+
+#endif 
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRay.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRay.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRay.h	(revision 1092)
@@ -0,0 +1,112 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __Ray_H_
+#define __Ray_H_
+
+// Precompiler options
+#include "OgrePrerequisites.h"
+
+#include "OgreVector3.h"
+#include "OgrePlaneBoundedVolume.h"
+
+namespace Ogre {
+
+    /** Representation of a ray in space, ie a line with an origin and direction. */
+    class _OgreExport Ray
+    {
+    protected:
+        Vector3 mOrigin;
+        Vector3 mDirection;
+    public:
+        Ray():mOrigin(Vector3::ZERO), mDirection(Vector3::UNIT_Z) {}
+        Ray(const Vector3& origin, const Vector3& direction)
+            :mOrigin(origin), mDirection(direction) {}
+        virtual ~Ray() {}
+
+        /** Sets the origin of the ray. */
+        void setOrigin(const Vector3& origin) {mOrigin = origin;} 
+        /** Gets the origin of the ray. */
+        const Vector3& getOrigin(void) const {return mOrigin;} 
+
+        /** Sets the direction of the ray. */
+        void setDirection(const Vector3& dir) {mDirection = dir;} 
+        /** Gets the direction of the ray. */
+        const Vector3& getDirection(void) const {return mDirection;} 
+
+		/** Gets the position of a point t units along the ray. */
+		Vector3 getPoint(Real t) const { 
+			return Vector3(mOrigin + (mDirection * t));
+		}
+		
+		/** Gets the position of a point t units along the ray. */
+		Vector3 operator*(Real t) const { 
+			return getPoint(t);
+		};
+
+		/** Tests whether this ray intersects the given plane. 
+		@returns A pair structure where the first element indicates whether
+			an intersection occurs, and if true, the second element will
+			indicate the distance along the ray at which it intersects. 
+			This can be converted to a point in space by calling getPoint().
+		*/
+		std::pair<bool, Real> intersects(const Plane& p) const
+		{
+			return Math::intersects(*this, p);
+		}
+        /** Tests whether this ray intersects the given plane bounded volume. 
+        @returns A pair structure where the first element indicates whether
+        an intersection occurs, and if true, the second element will
+        indicate the distance along the ray at which it intersects. 
+        This can be converted to a point in space by calling getPoint().
+        */
+        std::pair<bool, Real> intersects(const PlaneBoundedVolume& p) const
+        {
+            return Math::intersects(*this, p.planes, p.outside == Plane::POSITIVE_SIDE);
+        }
+		/** Tests whether this ray intersects the given sphere. 
+		@returns A pair structure where the first element indicates whether
+			an intersection occurs, and if true, the second element will
+			indicate the distance along the ray at which it intersects. 
+			This can be converted to a point in space by calling getPoint().
+		*/
+		std::pair<bool, Real> intersects(const Sphere& s) const
+		{
+			return Math::intersects(*this, s);
+		}
+		/** Tests whether this ray intersects the given box. 
+		@returns A pair structure where the first element indicates whether
+			an intersection occurs, and if true, the second element will
+			indicate the distance along the ray at which it intersects. 
+			This can be converted to a point in space by calling getPoint().
+		*/
+		std::pair<bool, Real> intersects(const AxisAlignedBox& box) const
+		{
+			return Math::intersects(*this, box);
+		}
+
+    };
+
+}
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderTargetListener.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderTargetListener.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderTargetListener.h	(revision 1092)
@@ -0,0 +1,118 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __RenderTargetListener_H__
+#define __RenderTargetListener_H__
+
+
+#include "OgrePrerequisites.h"
+
+namespace Ogre {
+
+    /** Struct containing information about a RenderTarget event.
+    */
+    struct RenderTargetEvent
+    {
+        /// The source of the event being raised
+        RenderTarget* source;
+    };
+
+    /** Struct containing information about a RenderTarget Viewport-specific event.
+    */
+    struct RenderTargetViewportEvent
+    {
+        /// The source of the event being raised
+        Viewport* source;
+    };
+
+    /** A interface class defining a listener which can be used to receive
+        notifications of RenderTarget events.
+        @remarks
+            A 'listener' is an interface designed to be called back when
+            particular events are called. This class defines the
+            interface relating to RenderTarget events. In order to receive
+            notifications of RenderTarget events, you should create a subclass of
+            RenderTargetListener and override the methods for which you would like
+            to customise the resulting processing. You should then call
+            RenderTarget::addListener passing an instance of this class.
+            There is no limit to the number of RenderTarget listeners you can register,
+            allowing you to register multiple listeners for different purposes.
+            </p>
+            RenderTarget events occur before and after the target is updated as a whole,
+            and before and after each viewport on that target is updated. Each RenderTarget
+            holds it's own set of listeners, but you can register the same listener on
+            multiple render targets if you like since the event contains details of the
+            originating RenderTarget.
+    */
+    class _OgreExport RenderTargetListener
+    {
+        /*
+        Note that this could have been an abstract class, but I made
+        the explicit choice not to do this, because I wanted to give
+        people the option of only implementing the methods they wanted,
+        rather than having to create 'do nothing' implementations for
+        those they weren't interested in. As such this class follows
+        the 'Adapter' classes in Java rather than pure interfaces.
+        */
+    public:
+        /** Called just before a RenderTarget is about to be rendered into.
+        @remarks
+            This event is raised just before any of the viewports on the target
+            are rendered to. You can perform manual rendering operations here if
+            you want, but please note that if the Viewport objects attached to this
+            target are set up to clear the background, you will lose whatever you 
+            render. If you want some kind of backdrop in this event
+            you should turn off background clearing off on the viewports, and either
+            clear the viewports yourself in this event handler before doing your rendering
+            or just render over the top if you don't need to.
+        */
+        virtual void preRenderTargetUpdate(const RenderTargetEvent& evt) { }
+        /** Called just after a RenderTarget has been rendered to.
+        @remarks
+            This event is called just after all the viewports attached to the target
+            in question have been rendered to. You can perform your own manual rendering
+            commands in this event handler if you like, these will be composited with
+            the contents of the target already there (depending on the material settings 
+            you use etc).
+        */
+        virtual void postRenderTargetUpdate(const RenderTargetEvent& evt) { }
+
+        /* Called just before a Viewport on a RenderTarget is to be updated.
+        @remarks
+            This method is called before each viewport on the RenderTarget is
+            rendered to. You can use this to perform per-viewport settings changes,
+            such as showing / hiding particular overlays.
+        */
+        virtual void preViewportUpdate(const RenderTargetViewportEvent& evt) { }
+
+        /* Called just after a Viewport on a RenderTarget is to be updated.
+        @remarks
+            This method is called after each viewport on the RenderTarget is
+            rendered to. 
+        */
+        virtual void postViewportUpdate(const RenderTargetViewportEvent& evt) { }
+    };
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/ExampleFrameListener.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/ExampleFrameListener.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/ExampleFrameListener.h	(revision 1092)
@@ -0,0 +1,456 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+You may use this sample code for anything you like, it is not covered by the
+LGPL like the rest of the engine.
+-----------------------------------------------------------------------------
+*/
+/*
+-----------------------------------------------------------------------------
+Filename:    ExampleFrameListener.h
+Description: Defines an example frame listener which responds to frame events.
+This frame listener just moves a specified camera around based on
+keyboard and mouse movements.
+Mouse:    Freelook
+W or Up:  Forward
+S or Down:Backward
+A:        Step left
+D:        Step right
+             PgUp:     Move upwards
+             PgDown:   Move downwards
+             F:        Toggle frame rate stats on/off
+			 R:        Render mode
+             T:        Cycle texture filtering
+                       Bilinear, Trilinear, Anisotropic(8)
+             P:        Toggle on/off display of camera position / orientation
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __ExampleFrameListener_H__
+#define __ExampleFrameListener_H__
+
+#include "Ogre.h"
+#include "OgreKeyEvent.h"
+#include "OgreEventListeners.h"
+#include "OgreStringConverter.h"
+#include "OgreException.h"
+
+using namespace Ogre;
+
+class ExampleFrameListener: public FrameListener, public KeyListener
+{
+protected:
+	int mSceneDetailIndex ;
+    Real mMoveSpeed;
+    Degree mRotateSpeed;
+    Overlay* mDebugOverlay;
+
+    void updateStats(void)
+    {
+        static String currFps = "Current FPS: ";
+        static String avgFps = "Average FPS: ";
+        static String bestFps = "Best FPS: ";
+        static String worstFps = "Worst FPS: ";
+        static String tris = "Triangle Count: ";
+
+        // update stats when necessary
+        try {
+            OverlayElement* guiAvg = OverlayManager::getSingleton().getOverlayElement("Core/AverageFps");
+            OverlayElement* guiCurr = OverlayManager::getSingleton().getOverlayElement("Core/CurrFps");
+            OverlayElement* guiBest = OverlayManager::getSingleton().getOverlayElement("Core/BestFps");
+            OverlayElement* guiWorst = OverlayManager::getSingleton().getOverlayElement("Core/WorstFps");
+
+            const RenderTarget::FrameStats& stats = mWindow->getStatistics();
+
+            guiAvg->setCaption(avgFps + StringConverter::toString(stats.avgFPS));
+            guiCurr->setCaption(currFps + StringConverter::toString(stats.lastFPS));
+            guiBest->setCaption(bestFps + StringConverter::toString(stats.bestFPS)
+                +" "+StringConverter::toString(stats.bestFrameTime)+" ms");
+            guiWorst->setCaption(worstFps + StringConverter::toString(stats.worstFPS)
+                +" "+StringConverter::toString(stats.worstFrameTime)+" ms");
+
+            OverlayElement* guiTris = OverlayManager::getSingleton().getOverlayElement("Core/NumTris");
+            guiTris->setCaption(tris + StringConverter::toString(stats.triangleCount));
+
+            OverlayElement* guiDbg = OverlayManager::getSingleton().getOverlayElement("Core/DebugText");
+            guiDbg->setCaption(mWindow->getDebugText());
+        }
+        catch(...)
+        {
+            // ignore
+        }
+    }
+
+public:
+    // Constructor takes a RenderWindow because it uses that to determine input context
+    ExampleFrameListener(RenderWindow* win, Camera* cam, bool useBufferedInputKeys = false, bool useBufferedInputMouse = false)
+    {
+        mDebugOverlay = OverlayManager::getSingleton().getByName("Core/DebugOverlay");
+        mUseBufferedInputKeys = useBufferedInputKeys;
+		mUseBufferedInputMouse = useBufferedInputMouse;
+		mInputTypeSwitchingOn = mUseBufferedInputKeys || mUseBufferedInputMouse;
+        mRotateSpeed = 36;
+        mMoveSpeed = 100;
+
+		if (mInputTypeSwitchingOn)
+		{
+            mEventProcessor = new EventProcessor();
+			mEventProcessor->initialise(win);
+			mEventProcessor->startProcessingEvents();
+			mEventProcessor->addKeyListener(this);
+			mInputDevice = mEventProcessor->getInputReader();
+
+		}
+        else
+        {
+            mInputDevice = PlatformManager::getSingleton().createInputReader();
+            mInputDevice->initialise(win,true, true);
+        }
+
+        mCamera = cam;
+        mWindow = win;
+        mStatsOn = true;
+		mNumScreenShots = 0;
+		mTimeUntilNextToggle = 0;
+        mSceneDetailIndex = 0;
+        mMoveScale = 0.0f;
+        mRotScale = 0.0f;
+	    mTranslateVector = Vector3::ZERO;
+        mAniso = 1;
+        mFiltering = TFO_BILINEAR;
+
+        showDebugOverlay(true);
+    }
+    virtual ~ExampleFrameListener()
+    {
+		if (mInputTypeSwitchingOn)
+		{
+            delete mEventProcessor;
+		}
+        else
+        {
+            PlatformManager::getSingleton().destroyInputReader( mInputDevice );
+        }
+    }
+
+    virtual bool processUnbufferedKeyInput(const FrameEvent& evt)
+    {
+        if (mInputDevice->isKeyDown(KC_A))
+        {
+            // Move camera left
+            mTranslateVector.x = -mMoveScale;
+        }
+
+        if (mInputDevice->isKeyDown(KC_D))
+        {
+            // Move camera RIGHT
+            mTranslateVector.x = mMoveScale;
+        }
+
+        /* Move camera forward by keypress. */
+        if (mInputDevice->isKeyDown(KC_UP) || mInputDevice->isKeyDown(KC_W) )
+        {
+            mTranslateVector.z = -mMoveScale;
+        }
+
+        /* Move camera backward by keypress. */
+        if (mInputDevice->isKeyDown(KC_DOWN) || mInputDevice->isKeyDown(KC_S) )
+        {
+            mTranslateVector.z = mMoveScale;
+        }
+
+        if (mInputDevice->isKeyDown(KC_PGUP))
+        {
+            // Move camera up
+            mTranslateVector.y = mMoveScale;
+        }
+
+        if (mInputDevice->isKeyDown(KC_PGDOWN))
+        {
+            // Move camera down
+            mTranslateVector.y = -mMoveScale;
+        }
+
+        if (mInputDevice->isKeyDown(KC_RIGHT))
+        {
+            mCamera->yaw(-mRotScale);
+        }
+		
+        if (mInputDevice->isKeyDown(KC_LEFT))
+        {
+            mCamera->yaw(mRotScale);
+        }
+
+        if( mInputDevice->isKeyDown( KC_ESCAPE) )
+        {            
+            return false;
+        }
+
+		// see if switching is on, and you want to toggle 
+        if (mInputTypeSwitchingOn && mInputDevice->isKeyDown(KC_M) && mTimeUntilNextToggle <= 0)
+        {
+			switchMouseMode();
+            mTimeUntilNextToggle = 1;
+        }
+
+        if (mInputTypeSwitchingOn && mInputDevice->isKeyDown(KC_K) && mTimeUntilNextToggle <= 0)
+        {
+			// must be going from immediate keyboard to buffered keyboard
+			switchKeyMode();
+            mTimeUntilNextToggle = 1;
+        }
+        if (mInputDevice->isKeyDown(KC_F) && mTimeUntilNextToggle <= 0)
+        {
+            mStatsOn = !mStatsOn;
+            showDebugOverlay(mStatsOn);
+
+            mTimeUntilNextToggle = 1;
+        }
+        if (mInputDevice->isKeyDown(KC_T) && mTimeUntilNextToggle <= 0)
+        {
+            switch(mFiltering)
+            {
+            case TFO_BILINEAR:
+                mFiltering = TFO_TRILINEAR;
+                mAniso = 1;
+                break;
+            case TFO_TRILINEAR:
+                mFiltering = TFO_ANISOTROPIC;
+                mAniso = 8;
+                break;
+            case TFO_ANISOTROPIC:
+                mFiltering = TFO_BILINEAR;
+                mAniso = 1;
+                break;
+            default:
+                break;
+            }
+            MaterialManager::getSingleton().setDefaultTextureFiltering(mFiltering);
+            MaterialManager::getSingleton().setDefaultAnisotropy(mAniso);
+
+
+            showDebugOverlay(mStatsOn);
+
+            mTimeUntilNextToggle = 1;
+        }
+
+        if (mInputDevice->isKeyDown(KC_SYSRQ) && mTimeUntilNextToggle <= 0)
+        {
+			char tmp[20];
+			sprintf(tmp, "screenshot_%d.png", ++mNumScreenShots);
+            mWindow->writeContentsToFile(tmp);
+            mTimeUntilNextToggle = 0.5;
+			mWindow->setDebugText(String("Wrote ") + tmp);
+        }
+		
+		if (mInputDevice->isKeyDown(KC_R) && mTimeUntilNextToggle <=0)
+		{
+			mSceneDetailIndex = (mSceneDetailIndex+1)%3 ;
+			switch(mSceneDetailIndex) {
+				case 0 : mCamera->setDetailLevel(SDL_SOLID) ; break ;
+				case 1 : mCamera->setDetailLevel(SDL_WIREFRAME) ; break ;
+				case 2 : mCamera->setDetailLevel(SDL_POINTS) ; break ;
+			}
+			mTimeUntilNextToggle = 0.5;
+		}
+
+        static bool displayCameraDetails = false;
+        if (mInputDevice->isKeyDown(KC_P) && mTimeUntilNextToggle <= 0)
+        {
+            displayCameraDetails = !displayCameraDetails;
+            mTimeUntilNextToggle = 0.5;
+            if (!displayCameraDetails)
+                mWindow->setDebugText("");
+        }
+        if (displayCameraDetails)
+        {
+            // Print camera details
+            mWindow->setDebugText("P: " + StringConverter::toString(mCamera->getDerivedPosition()) + " " + 
+                "O: " + StringConverter::toString(mCamera->getDerivedOrientation()));
+        }
+
+        // Return true to continue rendering
+        return true;
+    }
+
+    bool processUnbufferedMouseInput(const FrameEvent& evt)
+    {
+        /* Rotation factors, may not be used if the second mouse button is pressed. */
+
+        /* If the second mouse button is pressed, then the mouse movement results in 
+           sliding the camera, otherwise we rotate. */
+        if( mInputDevice->getMouseButton( 1 ) )
+        {
+            mTranslateVector.x += mInputDevice->getMouseRelativeX() * 0.13;
+            mTranslateVector.y -= mInputDevice->getMouseRelativeY() * 0.13;
+        }
+        else
+        {
+            mRotX = Degree(-mInputDevice->getMouseRelativeX() * 0.13);
+            mRotY = Degree(-mInputDevice->getMouseRelativeY() * 0.13);
+        }
+
+
+		return true;
+	}
+
+	void moveCamera()
+	{
+
+        // Make all the changes to the camera
+        // Note that YAW direction is around a fixed axis (freelook style) rather than a natural YAW (e.g. airplane)
+        mCamera->yaw(mRotX);
+        mCamera->pitch(mRotY);
+        mCamera->moveRelative(mTranslateVector);
+
+
+	}
+
+    void showDebugOverlay(bool show)
+    {
+        if (mDebugOverlay)
+        {
+            if (show)
+            {
+                mDebugOverlay->show();
+            }
+            else
+            {
+                mDebugOverlay->hide();
+            }
+        }
+    }
+
+    // Override frameStarted event to process that (don't care about frameEnded)
+    bool frameStarted(const FrameEvent& evt)
+    {
+        if(mWindow->isClosed())
+            return false;
+
+        if (!mInputTypeSwitchingOn)
+    	{
+            mInputDevice->capture();
+        }
+
+
+		if ( !mUseBufferedInputMouse || !mUseBufferedInputKeys)
+		{
+			// one of the input modes is immediate, so setup what is needed for immediate mouse/key movement
+			if (mTimeUntilNextToggle >= 0) 
+				mTimeUntilNextToggle -= evt.timeSinceLastFrame;
+
+			// If this is the first frame, pick a speed
+			if (evt.timeSinceLastFrame == 0)
+			{
+				mMoveScale = 1;
+				mRotScale = 0.1;
+			}
+			// Otherwise scale movement units by time passed since last frame
+			else
+			{
+				// Move about 100 units per second,
+				mMoveScale = mMoveSpeed * evt.timeSinceLastFrame;
+				// Take about 10 seconds for full rotation
+				mRotScale = mRotateSpeed * evt.timeSinceLastFrame;
+			}
+			mRotX = 0;
+            mRotY = 0;
+	        mTranslateVector = Vector3::ZERO;
+		}
+
+        if (mUseBufferedInputKeys)
+        {
+            // no need to do any processing here, it is handled by event processor and 
+			// you get the results as KeyEvents
+        }
+        else
+        {
+            if (processUnbufferedKeyInput(evt) == false)
+			{
+				return false;
+			}
+        }
+        if (mUseBufferedInputMouse)
+        {
+            // no need to do any processing here, it is handled by event processor and 
+			// you get the results as MouseEvents
+        }
+        else
+        {
+            if (processUnbufferedMouseInput(evt) == false)
+			{
+				return false;
+			}
+        }
+
+		if ( !mUseBufferedInputMouse || !mUseBufferedInputKeys)
+		{
+			// one of the input modes is immediate, so update the movement vector
+
+			moveCamera();
+
+		}
+
+		return true;
+    }
+
+    bool frameEnded(const FrameEvent& evt)
+    {
+        updateStats();
+        return true;
+    }
+
+	void switchMouseMode() 
+	{
+        mUseBufferedInputMouse = !mUseBufferedInputMouse;
+		mInputDevice->setBufferedInput(mUseBufferedInputKeys, mUseBufferedInputMouse);
+	}
+	void switchKeyMode() 
+	{
+        mUseBufferedInputKeys = !mUseBufferedInputKeys;
+		mInputDevice->setBufferedInput(mUseBufferedInputKeys, mUseBufferedInputMouse);
+	}
+
+	void keyClicked(KeyEvent* e) 
+	{
+		if (e->getKeyChar() == 'm')
+		{
+			switchMouseMode();
+		}
+		else if (e->getKeyChar() == 'k')
+		{
+
+			switchKeyMode();
+		}
+
+	}
+	void keyPressed(KeyEvent* e) {}
+	void keyReleased(KeyEvent* e) {}
+
+protected:
+    EventProcessor* mEventProcessor;
+    InputReader* mInputDevice;
+    Camera* mCamera;
+
+    Vector3 mTranslateVector;
+    RenderWindow* mWindow;
+    bool mStatsOn;
+    bool mUseBufferedInputKeys, mUseBufferedInputMouse, mInputTypeSwitchingOn;
+	unsigned int mNumScreenShots;
+    float mMoveScale;
+    Degree mRotScale;
+    // just to stop toggles flipping too fast
+    Real mTimeUntilNextToggle ;
+    Radian mRotX, mRotY;
+    TextureFilterOptions mFiltering;
+    int mAniso;
+
+};
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreParticleSystemRenderer.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreParticleSystemRenderer.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreParticleSystemRenderer.h	(revision 1092)
@@ -0,0 +1,105 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE 
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under 
+the terms of the GNU Lesser General Public License as published by the Free Software 
+Foundation; either version 2 of the License, or (at your option) any later 
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT 
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with 
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple 
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to 
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __ParticleSystemRenderer_H__
+#define __ParticleSystemRenderer_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreStringInterface.h"
+#include "OgreFactoryObj.h"
+#include "OgreRenderQueue.h"
+
+namespace Ogre {
+
+    /** Abstract class defining the interface required to be implemented
+        by classes which provide rendering capability to ParticleSystem instances.
+    */
+    class _OgreExport ParticleSystemRenderer : public StringInterface
+    {
+    public:
+        /// Constructor
+        ParticleSystemRenderer() {}
+        /// Destructor
+        virtual ~ParticleSystemRenderer() {}
+
+        /** Gets the type of this renderer - must be implemented by subclasses */
+		virtual const String& getType(void) const = 0;
+
+		/** Delegated to by ParticleSystem::_updateRenderQueue
+        @remarks
+            The subclass must update the render queue using whichever Renderable
+            instance(s) it wishes.
+        */
+        virtual void _updateRenderQueue(RenderQueue* queue, 
+            std::list<Particle*>& currentParticles, bool cullIndividually) = 0;
+
+        /** Sets the material this renderer must use; called by ParticleSystem. */
+        virtual void _setMaterial(MaterialPtr& mat) = 0;
+        /** Delegated to by ParticleSystem::_notifyCurrentCamera */
+        virtual void _notifyCurrentCamera(Camera* cam) = 0;
+        /** Delegated to by ParticleSystem::_notifyAttached */
+        virtual void _notifyAttached(Node* parent, bool isTagPoint = false) = 0;
+        /** Optional callback notified when particles are rotated */
+        virtual void _notifyParticleRotated(void) {}
+        /** Optional callback notified when particles are resized individually */
+        virtual void _notifyParticleResized(void) {}
+        /** Tells the renderer that the particle quota has changed */
+        virtual void _notifyParticleQuota(size_t quota) = 0;
+        /** Tells the renderer that the particle default size has changed */
+        virtual void _notifyDefaultDimensions(Real width, Real height) = 0;
+		/** Create a new ParticleVisualData instance for attachment to a particle.
+		@remarks
+			If this renderer needs additional data in each particle, then this should
+			be held in an instance of a subclass of ParticleVisualData, and this method
+			should be overridden to return a new instance of it. The default
+			behaviour is to return null.
+		*/
+		virtual ParticleVisualData* _createVisualData(void) { return 0; }
+		/** Destroy a ParticleVisualData instance.
+		@remarks
+			If this renderer needs additional data in each particle, then this should
+			be held in an instance of a subclass of ParticleVisualData, and this method
+			should be overridden to destroy an instance of it. The default
+			behaviour is to do nothing.
+		*/
+		virtual void _destroyVisualData(ParticleVisualData* vis) { assert (vis == 0); }
+
+		/** Sets which render queue group this renderer should target with it's
+			output.
+		*/
+		virtual void setRenderQueueGroup(RenderQueueGroupID queueID) = 0;
+
+
+    };
+
+    /** Abstract class definition of a factory object for ParticleSystemRenderer. */
+    class _OgreExport ParticleSystemRendererFactory : public FactoryObj<ParticleSystemRenderer>
+    {
+    public:
+        // No methods, must just override all methods inherited from FactoryObj
+    };
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreTexture.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreTexture.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreTexture.h	(revision 1092)
@@ -0,0 +1,343 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _Texture_H__
+#define _Texture_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreHardwareBuffer.h"
+#include "OgreResource.h"
+#include "OgreImage.h"
+
+namespace Ogre {
+
+    /** Enum identifying the texture usage
+    */
+    enum TextureUsage
+    {
+		/// @copydoc HardwareBuffer::Usage
+		TU_STATIC = HardwareBuffer::HBU_STATIC,
+		TU_DYNAMIC = HardwareBuffer::HBU_DYNAMIC,
+		TU_WRITE_ONLY = HardwareBuffer::HBU_WRITE_ONLY,
+		TU_STATIC_WRITE_ONLY = HardwareBuffer::HBU_STATIC_WRITE_ONLY, 
+		TU_DYNAMIC_WRITE_ONLY = HardwareBuffer::HBU_DYNAMIC_WRITE_ONLY,
+		TU_DYNAMIC_WRITE_ONLY_DISCARDABLE = HardwareBuffer::HBU_DYNAMIC_WRITE_ONLY_DISCARDABLE,
+		/// mipmaps will be automatically generated for this texture
+		TU_AUTOMIPMAP = 0x100,
+		/// this texture will be a render target, ie. used as a target for render to texture
+		/// setting this flag will ignore all other texture usages except TU_AUTOMIPMAP
+		TU_RENDERTARGET = 0x200,
+		/// default to automatic mipmap generation static textures
+		TU_DEFAULT = TU_AUTOMIPMAP | TU_STATIC_WRITE_ONLY
+        
+    };
+
+    /** Enum identifying the texture type
+    */
+    enum TextureType
+    {
+        /// 1D texture, used in combination with 1D texture coordinates
+        TEX_TYPE_1D = 1,
+        /// 2D texture, used in combination with 2D texture coordinates (default)
+        TEX_TYPE_2D = 2,
+        /// 3D volume texture, used in combination with 3D texture coordinates
+        TEX_TYPE_3D = 3,
+        /// 3D cube map, used in combination with 3D texture coordinates
+        TEX_TYPE_CUBE_MAP = 4
+    };
+
+	/** Enum identifying special mipmap numbers
+    */
+	enum TextureMipmap
+	{
+		/// Generate mipmaps up to 1x1
+		MIP_UNLIMITED = 0x7FFFFFFF
+	};
+
+    // Forward declaration
+    class TexturePtr;
+
+    /** Abstract class representing a Texture resource.
+        @remarks
+            The actual concrete subclass which will exist for a texture
+            is dependent on the rendering system in use (Direct3D, OpenGL etc).
+            This class represents the commonalities, and is the one 'used'
+            by programmers even though the real implementation could be
+            different in reality. Texture objects are created through
+            the 'create' method of the TextureManager concrete subclass.
+     */
+    class _OgreExport Texture : public Resource
+    {
+    public:
+        Texture(ResourceManager* creator, const String& name, ResourceHandle handle,
+            const String& group, bool isManual = false, ManualResourceLoader* loader = 0);
+
+        /** Sets the type of texture; can only be changed before load() 
+        */
+        virtual void setTextureType(TextureType ttype ) { mTextureType = ttype; }
+
+        /** Gets the type of texture 
+        */
+        virtual TextureType getTextureType(void) const { return mTextureType; }
+
+        /** Gets the number of mipmaps to be used for this texture.
+        */
+        virtual size_t getNumMipmaps(void) const {return mNumMipmaps;}
+
+		/** Sets the number of mipmaps to be used for this texture.
+            @note
+                Must be set before calling any 'load' method.
+        */
+        virtual void setNumMipmaps(size_t num) {mNumRequestedMipmaps = mNumMipmaps = num;}
+
+		/** Are mipmaps hardware generated?
+		@remarks
+			Will only be accurate after texture load, or createInternalResources
+		*/
+		virtual bool getMipmapsHardwareGenerated(void) const { return mMipmapsHardwareGenerated; }
+
+        /** Returns the gamma adjustment factor applied to this texture.
+        */
+        virtual float getGamma(void) const { return mGamma; }
+
+        /** Sets the gamma adjustment factor applied to this texture.
+            @note
+                Must be called before any 'load' method.
+        */
+        virtual void setGamma(float g) { mGamma = g; }
+
+        /** Returns the height of the texture.
+        */
+        virtual unsigned int getHeight(void) const { return mHeight; }
+
+        /** Returns the width of the texture.
+        */
+        virtual unsigned int getWidth(void) const { return mWidth; }
+
+        /** Returns the depth of the texture (only applicable for 3D textures).
+        */
+        virtual unsigned int getDepth(void) const { return mDepth; }
+
+        /** Returns the height of the original input texture (may differ due to hardware requirements).
+        */
+        virtual unsigned int getSrcHeight(void) const { return mSrcHeight; }
+
+        /** Returns the width of the original input texture (may differ due to hardware requirements).
+        */
+        virtual unsigned int getSrcWidth(void) const { return mSrcWidth; }
+
+        /** Returns the original depth of the input texture (only applicable for 3D textures).
+        */
+        virtual unsigned int getSrcDepth(void) const { return mSrcDepth; }
+
+        /** Set the height of the texture; can only do this before load();
+        */
+        virtual void setHeight(unsigned int h) { mHeight = mSrcHeight = h; }
+
+        /** Set the width of the texture; can only do this before load();
+        */
+        virtual void setWidth(unsigned int w) { mWidth = mSrcWidth = w; }
+
+        /** Set the depth of the texture (only applicable for 3D textures);
+            ; can only do this before load();
+        */
+        virtual void setDepth(unsigned int d)  { mDepth = mSrcDepth = d; }
+
+        /** Returns the TextureUsage indentifier for this Texture
+        */
+        virtual int getUsage() const
+        {
+            return mUsage;
+        }
+
+        /** Sets the TextureUsage indentifier for this Texture; only useful before load()
+			
+			@param u is a combination of TU_STATIC, TU_DYNAMIC, TU_WRITE_ONLY 
+				TU_AUTOMIPMAP and TU_RENDERTARGET (see TextureUsage enum). You are
+            	strongly advised to use HBU_STATIC_WRITE_ONLY wherever possible, if you need to 
+            	update regularly, consider HBU_DYNAMIC_WRITE_ONLY.
+        */
+        virtual void setUsage(int u) { mUsage = u; }
+
+        /** Creates the internal texture resources for this texture. 
+        @remarks
+            This method creates the internal texture resources (pixel buffers, 
+            texture surfaces etc) required to begin using this texture. You do
+            not need to call this method directly unless you are manually creating
+            a texture, in which case something must call it, after having set the
+            size and format of the texture (e.g. the ManualResourceLoader might
+            be the best one to call it). If you are not defining a manual texture,
+            or if you use one of the self-contained load...() methods, then it will be
+            called for you.
+        */
+        virtual void createInternalResources(void);
+
+        /** Frees internal texture resources for this texture. 
+        */
+        virtual void freeInternalResources(void);
+		/** Copies (and maybe scales to fit) the contents of this texture to
+			another texture. */
+		virtual void copyToTexture( TexturePtr& target ) {}
+
+        /** Loads the data from an image.
+        */
+        virtual void loadImage( const Image &img ) = 0;
+			
+		/** Loads the data from a raw stream.
+		*/
+		virtual void loadRawData( DataStreamPtr& stream, 
+			ushort uWidth, ushort uHeight, PixelFormat eFormat);
+
+        virtual void enable32Bit( bool setting = true ) 
+        {
+            setting ? mFinalBpp = 32 : mFinalBpp = 16;
+        }
+
+		/** Returns the pixel format for the texture surface. */
+		virtual PixelFormat getFormat() const
+		{
+			return mFormat;
+		}
+
+        /** Sets the pixel format for the texture surface; can only be set before load(). */
+        virtual void setFormat(PixelFormat pf);
+
+        /** Returns true if the texture has an alpha layer. */
+        virtual bool hasAlpha(void) const
+        {
+            return mHasAlpha;
+        }
+        
+        /** Return the number of faces this texture has. This will be 6 for a cubemap
+        	texture and 1 for a 1D, 2D or 3D one.
+        */
+        virtual size_t getNumFaces() const;
+
+		/** Return hardware pixel buffer for a surface. This buffer can then
+			be used to copy data from and to a particular level of the texture.
+			@param face 	Face number, in case of a cubemap texture. Must be 0
+							for other types of textures.
+			@param mipmap	Mipmap level. This goes from 0 for the first, largest
+							mipmap level to getNumMipmaps()-1 for the smallest.
+			@returns	A shared pointer to a hardware pixel buffer
+			@remarks	The buffer is invalidated when the resource is unloaded or destroyed.
+						Do not use it after the lifetime of the containing texture.
+		*/
+		virtual HardwarePixelBufferSharedPtr getBuffer(size_t face=0, size_t mipmap=0) = 0;
+
+    protected:
+        unsigned long mHeight;
+        unsigned long mWidth;
+        unsigned long mDepth;
+
+        size_t mNumRequestedMipmaps;
+		size_t mNumMipmaps;
+		bool mMipmapsHardwareGenerated;
+        float mGamma;
+
+        TextureType mTextureType;
+		PixelFormat mFormat;
+        int mUsage; // Bit field, so this can't be TextureUsage
+
+        unsigned short mSrcBpp;
+        unsigned long mSrcWidth, mSrcHeight, mSrcDepth;
+        unsigned short mFinalBpp;
+        bool mHasAlpha;
+
+		bool mInternalResourcesCreated;
+
+		/// @copydoc Resource::calculateSize
+		size_t calculateSize(void) const;
+		
+		/** Generic method to load the texture from a set of images. This can be
+		 	used by the specific implementation for convience. Implementations
+			might decide not to use this function if they can use their own image loading
+			functions.
+			@param images	Vector of pointers to Images. If there is only one image
+			in this vector, the faces of that image will be used. If there are multiple
+			images in the vector each image will be loaded as a face.
+		*/
+        virtual void _loadImages( const std::vector<const Image*>& images );
+
+
+		/** Implementation of creating internal texture resources 
+		*/
+		virtual void createInternalResourcesImpl(void) = 0;
+
+		/** Implementation of freeing internal texture resources 
+		*/
+		virtual void freeInternalResourcesImpl(void) = 0;
+
+		/** Default implementation of unload which calls freeInternalResources */
+		void unloadImpl(void);
+
+    };
+
+    /** Specialisation of SharedPtr to allow SharedPtr to be assigned to TexturePtr 
+    @note Has to be a subclass since we need operator=.
+    We could templatise this instead of repeating per Resource subclass, 
+    except to do so requires a form VC6 does not support i.e.
+    ResourceSubclassPtr<T> : public SharedPtr<T>
+    */
+    class _OgreExport TexturePtr : public SharedPtr<Texture> 
+    {
+    public:
+        TexturePtr() : SharedPtr<Texture>() {}
+        explicit TexturePtr(Texture* rep) : SharedPtr<Texture>(rep) {}
+        TexturePtr(const TexturePtr& r) : SharedPtr<Texture>(r) {} 
+        TexturePtr(const ResourcePtr& r) : SharedPtr<Texture>()
+        {
+			// lock & copy other mutex pointer
+			OGRE_LOCK_MUTEX(*r.OGRE_AUTO_MUTEX_NAME)
+			OGRE_COPY_AUTO_SHARED_MUTEX(r.OGRE_AUTO_MUTEX_NAME)
+            pRep = static_cast<Texture*>(r.getPointer());
+            pUseCount = r.useCountPointer();
+            if (pUseCount)
+            {
+                ++(*pUseCount);
+            }
+        }
+
+        /// Operator used to convert a ResourcePtr to a TexturePtr
+        TexturePtr& operator=(const ResourcePtr& r)
+        {
+            if (pRep == static_cast<Texture*>(r.getPointer()))
+                return *this;
+            release();
+			// lock & copy other mutex pointer
+			OGRE_LOCK_MUTEX(*r.OGRE_AUTO_MUTEX_NAME)
+			OGRE_COPY_AUTO_SHARED_MUTEX(r.OGRE_AUTO_MUTEX_NAME)
+            pRep = static_cast<Texture*>(r.getPointer());
+            pUseCount = r.useCountPointer();
+            if (pUseCount)
+            {
+                ++(*pUseCount);
+            }
+            return *this;
+        }
+    };
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/ExampleRefAppApplication.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/ExampleRefAppApplication.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/ExampleRefAppApplication.h	(revision 1092)
@@ -0,0 +1,210 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+You may use this sample code for anything you like, it is not covered by the
+LGPL like the rest of the engine.
+-----------------------------------------------------------------------------
+*/
+
+/*
+-----------------------------------------------------------------------------
+Filename:    ExampleApplication.h
+Description: Base class for all the OGRE ReferenceApplication examples
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __ExampleRefAppApplication_H__
+#define __ExampleRefAppApplication_H__
+
+#include "OgreReferenceAppLayer.h"
+#include "OgreConfigFile.h"
+#include "ExampleRefAppFrameListener.h"
+
+#if OGRE_PLATFORM == OGRE_PLATFORM_APPLE
+#    include <SDL.h>
+#endif
+
+using namespace Ogre;
+using namespace OgreRefApp;
+
+/** Base class which manages the standard startup of an Ogre application
+    based on the ReferenceApplication layer.
+    Designed to be subclassed for specific examples if required.
+*/
+class ExampleRefAppApplication
+{
+public:
+    /// Standard constructor
+    ExampleRefAppApplication()
+    {
+        mFrameListener = 0;
+        mRoot = 0;
+        mWorld = 0;
+    }
+    /// Standard destructor
+    virtual ~ExampleRefAppApplication()
+    {
+        if (mFrameListener)
+            delete mFrameListener;
+        if (mWorld)
+            delete mWorld;
+        if (mRoot)
+            delete mRoot;
+    }
+
+    /// Start the example
+    virtual void go(void)
+    {
+        if (!setup())
+            return;
+
+        mRoot->startRendering();
+    }
+
+protected:
+    Root *mRoot;
+    CollideCamera* mCamera;
+    SceneManager* mSceneMgr;
+    FrameListener* mFrameListener;
+    RenderWindow* mWindow;
+    World* mWorld;
+
+    // These internal methods package up the stages in the startup process
+    /** Sets up the application - returns false if the user chooses to abandon configuration. */
+    virtual bool setup(void)
+    {
+        mRoot = new Root();
+
+        setupResources();
+
+        bool carryOn = configure();
+        if (!carryOn) return false;
+
+        chooseSceneManager();
+        createWorld();
+        createCamera();
+        createViewports();
+
+        // Set default mipmap level (NB some APIs ignore this)
+        TextureManager::getSingleton().setDefaultNumMipmaps(5);
+
+		// Create any resource listeners (for loading screens)
+		createResourceListener();
+		// Load resources
+		loadResources();
+
+        // Create the scene
+        createScene();
+
+        createFrameListener();
+
+        return true;
+
+    }
+    /** Configures the application - returns false if the user chooses to abandon configuration. */
+    virtual bool configure(void)
+    {
+        // Show the configuration dialog and initialise the system
+        // You can skip this and use root.restoreConfig() to load configuration
+        // settings if you were sure there are valid ones saved in ogre.cfg
+        if(mRoot->showConfigDialog())
+        {
+            // If returned true, user clicked OK so initialise
+            // Here we choose to let the system create a default rendering window by passing 'true'
+            mWindow = mRoot->initialise(true);
+            return true;
+        }
+        else
+        {
+            return false;
+        }
+    }
+
+    virtual void chooseSceneManager(void)
+    {
+        // Get the SceneManager, in this case a generic one
+        mSceneMgr = mRoot->getSceneManager(ST_GENERIC);
+    }
+    virtual void createCamera(void)
+    {
+        // Create the camera
+        mCamera = mWorld->createCamera("PlayerCam");
+
+        // Position it at 500 in Z direction
+        mCamera->setPosition(Vector3(0,0,500));
+        // Look back along -Z
+        mCamera->lookAt(Vector3(0,0,-300));
+        mCamera->setNearClipDistance(5);
+
+    }
+    virtual void createFrameListener(void)
+    {
+        mFrameListener= new ExampleRefAppFrameListener(mWindow, mCamera);
+        mRoot->addFrameListener(mFrameListener);
+    }
+
+    virtual void createScene(void) = 0;    // pure virtual - this has to be overridden
+
+    virtual void createViewports(void)
+    {
+        // Create one viewport, entire window
+        Viewport* vp = mWindow->addViewport(mCamera->getRealCamera());
+        vp->setBackgroundColour(ColourValue(0,0,0));
+    }
+
+    /// Method which will define the source of resources (other than current folder)
+    virtual void setupResources(void)
+    {
+        // Load resource paths from config file
+        ConfigFile cf;
+        cf.load("resources.cfg");
+
+        // Go through all sections & settings in the file
+        ConfigFile::SectionIterator seci = cf.getSectionIterator();
+
+        String secName, typeName, archName;
+        while (seci.hasMoreElements())
+        {
+            secName = seci.peekNextKey();
+            ConfigFile::SettingsMultiMap *settings = seci.getNext();
+            ConfigFile::SettingsMultiMap::iterator i;
+            for (i = settings->begin(); i != settings->end(); ++i)
+            {
+                typeName = i->first;
+                archName = i->second;
+                ResourceGroupManager::getSingleton().addResourceLocation(
+                    archName, typeName, secName);
+            }
+        }
+    }
+    virtual void createWorld(void)
+    {
+        mWorld = new World(mSceneMgr);
+    }
+	/// Optional override method where you can create resource listeners (e.g. for loading screens)
+	virtual void createResourceListener(void)
+	{
+
+	}
+
+	/// Optional override method where you can perform resource group loading
+	/// Must at least do ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
+	virtual void loadResources(void)
+	{
+		// Initialise, parse scripts etc
+		ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
+
+	}
+
+
+
+};
+
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreFontManager.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreFontManager.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreFontManager.h	(revision 1092)
@@ -0,0 +1,93 @@
+/*-------------------------------------------------------------------------
+This source file is a part of OGRE
+(Object-oriented Graphics Rendering Engine)
+
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This library is free software; you can redistribute it and/or modify it
+under the terms of the GNU Lesser General Public License (LGPL) as 
+published by the Free Software Foundation; either version 2.1 of the 
+License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful, but 
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
+or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public 
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License 
+along with this library; if not, write to the Free Software Foundation, 
+Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA or go to
+http://www.gnu.org/copyleft/lesser.txt
+-------------------------------------------------------------------------*/
+
+#ifndef _FontManager_H__
+#define _FontManager_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreSingleton.h"
+#include "OgreResourceManager.h"
+#include "OgreFont.h"
+
+namespace Ogre
+{
+    /** Manages Font resources, parsing .fontdef files and generally organising them.*/
+    class _OgreExport FontManager : public ResourceManager, public Singleton< FontManager >
+    {
+    public:
+
+		FontManager();
+		~FontManager();
+
+        /** @copydoc ScriptLoader::parseScript */
+        void parseScript(DataStreamPtr& stream, const String& groupName);
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static FontManager& getSingleton(void);
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static FontManager* getSingletonPtr(void);
+
+    protected:
+
+        /// Internal methods
+		Resource* createImpl(const String& name, ResourceHandle handle, 
+			const String& group, bool isManual, ManualResourceLoader* loader, 
+            const NameValuePairList* params);
+		void parseAttribute(const String& line, FontPtr& pFont);
+
+        void logBadAttrib(const String& line, FontPtr& pFont);
+
+
+    };
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreStaticGeometry.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreStaticGeometry.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreStaticGeometry.h	(revision 1092)
@@ -0,0 +1,751 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __StaticGeometry_H__
+#define __StaticGeometry_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreMovableObject.h"
+#include "OgreRenderable.h"
+#include "OgreEdgeListBuilder.h"
+
+namespace Ogre {
+
+	/** Pre-transforms and batches up meshes for efficient use as static
+		geometry in a scene.
+	@remarks
+		Modern graphics cards (GPUs) prefer to receive geometry in large
+		batches. It is orders of magnitude faster to render 10 batches
+		of 10,000 triangles than it is to render 10,000 batches of 10 
+		triangles, even though both result in the same number of on-screen
+		triangles.
+	@par
+		Therefore it is important when you are rendering a lot of geometry to 
+		batch things up into as few rendering calls as possible. This
+		class allows you to build a batched object from a series of entities 
+		in order to benefit from this behaviour.
+		Batching has implications of it's own though:
+		@li Batched geometry cannot be subdivided; that means that the whole
+			group will be displayed, or none of it will. This obivously has
+			culling issues.
+		@li A single world transform must apply to the entire batch. Therefore
+			once you have batched things, you can't move them around relative to
+			each other. That's why this class is most useful when dealing with 
+			static geometry (hence the name). In addition, geometry is 
+			effectively duplicated, so if you add 3 entities based on the same 
+			mesh in different positions, they will use 3 times the geometry 
+			space than the movable version (which re-uses the same geometry). 
+			So you trade memory	and flexibility of movement for pure speed when
+			using this class.
+		@li A single material must apply for each batch. In fact this class 
+			allows you to use multiple materials, but you should be aware that 
+			internally this means that there is one batch per material. 
+			Therefore you won't gain as much benefit from the batching if you 
+			use many different materials; try to keep the number down.
+	@par
+		In order to retain some sort of culling, this class will batch up 
+		meshes in localised regions. The size and shape of these blocks is
+		controlled by the SceneManager which contructs this object, since it
+		makes sense to batch things up in the most appropriate way given the 
+		existing partitioning of the scene. 
+	@par
+		The LOD settings of both the Mesh and the Materials used in 
+		constructing this static geometry will be respected. This means that 
+		if you use meshes/materials which have LOD, batches in the distance 
+		will have a lower polygon count or material detail to those in the 
+		foreground. Since each mesh might have different LOD distances, during 
+		build the furthest distance at each LOD level from all meshes  
+		in that region is used. This means all the LOD levels change at the 
+		same time, but at the furthest distance of any of them (so quality is 
+		not degraded). Be aware that using Mesh LOD in this class will 
+		further increase the memory required. Only generated LOD
+		is supported for meshes.
+	@par
+		There are 2 ways you can add geometry to this class; you can add
+		Entity objects directly with predetermined positions, scales and 
+		orientations, or you can add an entire SceneNode and it's subtree, 
+		including all the objects attached to it. Once you've added everthing
+		you need to, you have to call build() the fix the geometry in place. 
+	@note
+		This class is not a replacement for world geometry (@see 
+		SceneManager::setWorldGeometry). The single most efficient way to 
+		render large amounts of static geometry is to use a SceneManager which 
+		is specialised for dealing with that particular world structure. 
+		However, this class does provide you with a good 'halfway house'
+		between generalised movable geometry (Entity) which works with all 
+		SceneManagers but isn't efficient when using very large numbers, and 
+		highly specialised world geometry which is extremely fast but not 
+		generic and typically requires custom world editors.
+	@par
+		You should not construct instances of this class directly; instead, cal 
+		SceneManager::createStaticGeometry, which gives the SceneManager the 
+		option of providing you with a specialised version of this class if it
+		wishes, and also handles the memory management for you like other 
+		classes.
+	*/
+	class _OgreExport StaticGeometry
+	{
+	public:
+		/** Struct holding geometry optimised per SubMesh / lod level, ready
+			for copying to instances. 
+		@remarks
+			Since we're going to be duplicating geometry lots of times, it's
+			far more important that we don't have redundant vertex data. If a 
+			SubMesh uses shared geometry, or we're looking at a lower LOD, not
+			all the vertices are being referenced by faces on that submesh.
+			Therefore to duplicate them, potentially hundreds or even thousands
+			of times, would be extremely wasteful. Therefore, if a SubMesh at
+			a given LOD has wastage, we create an optimised version of it's
+			geometry which is ready for copying with no wastage.
+		*/
+		class _OgrePrivate OptimisedSubMeshGeometry
+		{
+		public:
+			OptimisedSubMeshGeometry() :vertexData(0), indexData(0) {}
+			~OptimisedSubMeshGeometry() 
+			{
+				delete vertexData;
+				delete indexData;
+			}
+			VertexData *vertexData;
+			IndexData *indexData;
+		};
+		typedef std::list<OptimisedSubMeshGeometry*> OptimisedSubMeshGeometryList;
+		/// Saved link between SubMesh at a LOD and vertex/index data
+		/// May point to original or optimised geometry
+		struct SubMeshLodGeometryLink
+		{
+			VertexData* vertexData;
+			IndexData* indexData;
+		};
+		typedef std::vector<SubMeshLodGeometryLink> SubMeshLodGeometryLinkList;
+		typedef std::map<SubMesh*, SubMeshLodGeometryLinkList*> SubMeshGeometryLookup;
+		/// Structure recording a queued submesh for the build
+		struct QueuedSubMesh
+		{
+			SubMesh* submesh;
+			/// Link to LOD list of geometry, potentially optimised
+			SubMeshLodGeometryLinkList* geometryLodList;
+			String materialName;
+			Vector3 position;
+			Quaternion orientation;
+			Vector3 scale;
+			/// Pre-transformed world AABB 
+			AxisAlignedBox worldBounds;
+		};
+		typedef std::vector<QueuedSubMesh*> QueuedSubMeshList;
+		/// Structure recording a queued geometry for low level builds
+		struct QueuedGeometry
+		{
+			SubMeshLodGeometryLink* geometry;
+			Vector3 position;
+			Quaternion orientation;
+			Vector3 scale;
+		};
+		typedef std::vector<QueuedGeometry*> QueuedGeometryList;
+		
+		// forward declarations
+		class LODBucket;
+		class MaterialBucket;
+		class Region;
+
+		/** A GeometryBucket is a the lowest level bucket where geometry with 
+			the same vertex & index format is stored. It also acts as the 
+			renderable.
+		*/
+		class _OgreExport GeometryBucket : public Renderable
+		{
+		protected:
+			/// Geometry which has been queued up pre-build (not for deallocation)
+			QueuedGeometryList mQueuedGeometry;
+			/// Pointer to parent bucket
+			MaterialBucket* mParent;
+			/// String identifying the vertex / index format
+			String mFormatString;
+			/// Vertex information, includes current number of vertices
+			/// committed to be a part of this bucket
+			VertexData* mVertexData;
+			/// Index information, includes index type which limits the max
+			/// number of vertices which are allowed in one bucket
+			IndexData* mIndexData;
+			/// Size of indexes
+			HardwareIndexBuffer::IndexType mIndexType;
+			/// Maximum vertex indexable
+			size_t mMaxVertexIndex;
+
+			template<typename T>
+			void copyIndexes(const T* src, T* dst, size_t count, size_t indexOffset)
+			{
+				if (indexOffset == 0)
+				{
+					memcpy(dst, src, sizeof(T) * count);
+				}
+				else
+				{
+					while(count--)
+					{
+						*dst++ = static_cast<T>(*src++ + indexOffset);
+					}
+				}
+			}
+		public:
+			GeometryBucket(MaterialBucket* parent, const String& formatString, 
+				const VertexData* vData, const IndexData* iData);
+			virtual ~GeometryBucket();
+			MaterialBucket* getParent(void) { return mParent; }
+			/// Get the vertex data for this geometry 
+			const VertexData* getVertexData(void) const { return mVertexData; }
+			/// Get the index data for this geometry 
+			const IndexData* getIndexData(void) const { return mIndexData; }
+			/// @copydoc Renderable::getMaterial
+			const MaterialPtr& getMaterial(void) const;
+			Technique* getTechnique(void) const;
+			void getRenderOperation(RenderOperation& op);
+	        void getWorldTransforms(Matrix4* xform) const;
+	        const Quaternion& getWorldOrientation(void) const;
+	        const Vector3& getWorldPosition(void) const;
+			Real getSquaredViewDepth(const Camera* cam) const;
+	        const LightList& getLights(void) const;
+			bool getCastsShadows(void) const;
+			
+			/** Try to assign geometry to this bucket.
+			@returns false if there is no room left in this bucket
+			*/
+			bool assign(QueuedGeometry* qsm);
+			/// Build
+			void build(bool stencilShadows);
+			/// Dump contents for diagnostics
+			void dump(std::ofstream& of) const;
+		};
+		/** A MaterialBucket is a collection of smaller buckets with the same 
+			Material (and implicitly the same LOD). */
+		class _OgreExport MaterialBucket
+		{
+		public:
+			/// list of Geometry Buckets in this region
+			typedef std::vector<GeometryBucket*> GeometryBucketList;
+		protected:
+			/// Pointer to parent LODBucket
+			LODBucket* mParent;
+			/// Material being used
+			String mMaterialName;
+			/// Pointer to material being used
+			MaterialPtr mMaterial;
+			/// Active technique
+			Technique* mTechnique;
+
+			/// list of Geometry Buckets in this region
+			GeometryBucketList mGeometryBucketList;
+			// index to current Geometry Buckets for a given geometry format
+			typedef std::map<String, GeometryBucket*> CurrentGeometryMap;
+			CurrentGeometryMap mCurrentGeometryMap;
+			/// Get a packed string identifying the geometry format
+			String getGeometryFormatString(SubMeshLodGeometryLink* geom);
+			
+		public:
+			MaterialBucket(LODBucket* parent, const String& materialName);
+			virtual ~MaterialBucket();
+			LODBucket* getParent(void) { return mParent; }
+			/// Get the material name
+			const String& getMaterialName(void) const { return mMaterialName; }
+			/// Assign geometry to this bucket
+			void assign(QueuedGeometry* qsm);
+			/// Build
+			void build(bool stencilShadows);
+			/// Add children to the render queue
+			void addRenderables(RenderQueue* queue, RenderQueueGroupID group, 
+				Real camSquaredDist);
+			/// Get the material for this bucket
+			const MaterialPtr& getMaterial(void) const { return mMaterial; }
+			/// Iterator over geometry
+			typedef VectorIterator<GeometryBucketList> GeometryIterator;
+			/// Get an iterator over the contained geometry
+			GeometryIterator getGeometryIterator(void);
+			/// Get the current Technique
+			Technique* getCurrentTechnique(void) const { return mTechnique; }
+			/// Dump contents for diagnostics
+			void dump(std::ofstream& of) const;
+		};
+		/** A LODBucket is a collection of smaller buckets with the same LOD. 
+		@remarks
+			LOD refers to Mesh LOD here. Material LOD can change separately
+			at the next bucket down from this.
+		*/
+		class _OgreExport LODBucket
+		{
+		public:
+			/// Lookup of Material Buckets in this region
+			typedef std::map<String, MaterialBucket*> MaterialBucketMap;
+		protected:
+			/// Pointer to parent region
+			Region* mParent;
+			/// LOD level (0 == full LOD)
+			unsigned short mLod;
+			/// distance at which this LOD starts to apply (squared)
+			Real mSquaredDistance;
+			/// Lookup of Material Buckets in this region
+			MaterialBucketMap mMaterialBucketMap;
+			/// Geometry queued for a single LOD (deallocated here)
+			QueuedGeometryList mQueuedGeometryList;
+		public:
+			LODBucket(Region* parent, unsigned short lod, Real lodDist);
+			virtual ~LODBucket();
+			Region* getParent(void) { return mParent; }
+			/// Get the lod index
+			ushort getLod(void) const { return mLod; }
+			/// Get the lod squared distance
+			Real getSquaredDistance(void) const { return mSquaredDistance; }
+			/// Assign a queued submesh to this bucket, using specified mesh LOD
+			void assign(QueuedSubMesh* qsm, ushort atLod);
+			/// Build
+			void build(bool stencilShadows);
+			/// Add children to the render queue
+			void addRenderables(RenderQueue* queue, RenderQueueGroupID group, 
+				Real camSquaredDistance);
+			/// Iterator over the materials in this LOD
+			typedef MapIterator<MaterialBucketMap> MaterialIterator;
+			/// Get an iterator over the materials in this LOD
+			MaterialIterator getMaterialIterator(void);
+			/// Dump contents for diagnostics
+			void dump(std::ofstream& of) const;
+			
+		};
+		/** The details of a topological region which is the highest level of
+			partitioning for this class.
+		@remarks
+			The size & shape of regions entirely depends on the SceneManager
+			specific implementation. It is a MovableObject since it will be
+			attached to a node based on the local centre - in practice it
+			won't actually move (although in theory it could).
+		*/
+		class _OgreExport Region : public MovableObject
+		{
+		public:
+			/// list of LOD Buckets in this region
+			typedef std::vector<LODBucket*> LODBucketList;
+		protected:
+			/** Nested class to allow region shadows. */
+			class _OgreExport RegionShadowRenderable : public ShadowRenderable
+			{
+			protected:
+				Region* mParent;
+				// Shared link to position buffer
+				HardwareVertexBufferSharedPtr mPositionBuffer;
+				// Shared link to w-coord buffer (optional)
+				HardwareVertexBufferSharedPtr mWBuffer;
+
+			public:
+				RegionShadowRenderable(Region* parent, 
+					HardwareIndexBufferSharedPtr* indexBuffer, const VertexData* vertexData, 
+					bool createSeparateLightCap, bool isLightCap = false);
+				~RegionShadowRenderable();
+				/// Overridden from ShadowRenderable
+				void getWorldTransforms(Matrix4* xform) const;
+				/// Overridden from ShadowRenderable
+				const Quaternion& getWorldOrientation(void) const;
+				/// Overridden from ShadowRenderable
+				const Vector3& getWorldPosition(void) const;
+				HardwareVertexBufferSharedPtr getPositionBuffer(void) { return mPositionBuffer; }
+				HardwareVertexBufferSharedPtr getWBuffer(void) { return mWBuffer; }
+
+			};
+			/// Parent static geometry
+			StaticGeometry* mParent;
+			/// Generated name
+			String mName;
+			/// Scene manager link
+			SceneManager* mSceneMgr;
+			/// Scene node
+			SceneNode* mNode;
+			/// Local list of queued meshes (not used for deallocation)
+			QueuedSubMeshList mQueuedSubMeshes;
+			/// Unique identifier for the region
+			uint32 mRegionID;
+			/// Center of the region
+			Vector3 mCentre;
+			/// LOD distances (squared) as built up - use the max at each level
+			std::vector<Real> mLodSquaredDistances;
+			/// Local AABB relative to region centre
+			AxisAlignedBox mAABB;
+			/// Local bounding radius
+			Real mBoundingRadius;
+			/// The current lod level, as determined from the last camera
+			ushort mCurrentLod;
+			/// Current camera distance, passed on to do material lod later
+			Real mCamDistanceSquared;
+			/// List of LOD buckets			
+			LODBucketList mLodBucketList;
+			/// List of lights for this region
+			mutable LightList mLightList;
+			/// The last frame that this light list was updated in
+			mutable ulong mLightListUpdated;
+			/// Hidden because of distance?
+			bool mBeyondFarDistance;
+			/// Edge list, used if stencil shadow casting is enabled 
+			EdgeData* mEdgeList;
+			/// List of shadow renderables
+			ShadowRenderableList mShadowRenderables;
+			/// Is a vertex program in use somewhere in this region?
+			bool mVertexProgramInUse;
+
+
+
+		public:
+			Region(StaticGeometry* parent, const String& name, SceneManager* mgr, 
+				uint32 regionID, const Vector3& centre);
+			virtual ~Region();
+			// more fields can be added in subclasses
+			StaticGeometry* getParent(void) const { return mParent;}
+			/// Assign a queued mesh to this region, read for final build
+			void assign(QueuedSubMesh* qmesh);
+			/// Build this region
+			void build(bool stencilShadows);
+			/// Get the region ID of this region
+			uint32 getID(void) const { return mRegionID; }
+			/// Get the centre point of the region
+			const Vector3& getCentre(void) const { return mCentre; }
+			const String& getName(void) const;
+			const String& getMovableType(void) const;
+			void _notifyCurrentCamera(Camera* cam);
+			const AxisAlignedBox& getBoundingBox(void) const;
+			Real getBoundingRadius(void) const;
+			void _updateRenderQueue(RenderQueue* queue);
+			bool isVisible(void) const;
+
+			typedef VectorIterator<LODBucketList> LODIterator;
+			/// Get an iterator over the LODs in this region
+			LODIterator getLODIterator(void);
+			/// Shared set of lights for all GeometryBuckets
+			const LightList& getLights(void) const;
+			/// @copydoc ShadowCaster::getShadowVolumeRenderableIterator
+			ShadowRenderableListIterator getShadowVolumeRenderableIterator(
+				ShadowTechnique shadowTechnique, const Light* light, 
+				HardwareIndexBufferSharedPtr* indexBuffer, 
+				bool extrudeVertices, Real extrusionDistance, unsigned long flags = 0 );
+			/// Overridden from MovableObject
+			EdgeData* getEdgeList(void);
+
+
+			/// Dump contents for diagnostics
+			void dump(std::ofstream& of) const;
+			
+		};
+		/** Indexed region map based on packed x/y/z region index, 10 bits for
+			each axis.
+		@remarks
+			Regions are indexed 0-1023 in all axes, where for example region 
+			0 in the x axis begins at mOrigin.x + (mRegionDimensions.x * -512), 
+			and region 1023 ends at mOrigin + (mRegionDimensions.x * 512).
+		*/
+		typedef std::map<uint32, Region*> RegionMap;
+	protected:
+		// General state & settings
+		SceneManager* mOwner;
+		String mName;
+		bool mBuilt;
+		Real mUpperDistance;
+		Real mSquaredUpperDistance;
+		bool mCastShadows;
+		Vector3 mRegionDimensions;
+		Vector3 mHalfRegionDimensions;
+		Vector3 mOrigin;
+		bool mVisible;
+        /// The render queue to use when rendering this object
+        RenderQueueGroupID mRenderQueueID;
+		/// Flags whether the RenderQueue's default should be used.
+		bool mRenderQueueIDSet;
+
+		QueuedSubMeshList mQueuedSubMeshes;
+
+		/// List of geometry which has been optimised for SubMesh use
+		/// This is the primary storage used for cleaning up later
+		OptimisedSubMeshGeometryList mOptimisedSubMeshGeometryList;
+
+		/** Cached links from SubMeshes to (potentially optimised) geometry
+			This is not used for deletion since the lookup may reference
+			original vertex data
+		*/
+		SubMeshGeometryLookup mSubMeshGeometryLookup;
+			
+		/// Map of regions
+		RegionMap mRegionMap;
+
+		/** Virtual method for getting a region most suitable for the
+			passed in bounds. Can be overridden by subclasses.
+		*/
+		virtual Region* getRegion(const AxisAlignedBox& bounds, bool autoCreate);
+		/** Get the region within which a point lies */
+		virtual Region* getRegion(const Vector3& point, bool autoCreate);
+		/** Get the region using indexes */
+		virtual Region* getRegion(ushort x, ushort y, ushort z, bool autoCreate);
+		/** Get the region using a packed index, returns null if it doesn't exist. */
+		virtual Region* getRegion(uint32 index);
+		/** Get the region indexes for a point.
+		*/
+		virtual void getRegionIndexes(const Vector3& point, 
+			ushort& x, ushort& y, ushort& z);
+		/** Pack 3 indexes into a single index value
+		*/
+		virtual uint32 packIndex(ushort x, ushort y, ushort z);
+		/** Get the volume intersection for an indexed region with some bounds.
+		*/
+		virtual Real getVolumeIntersection(const AxisAlignedBox& box,  
+			ushort x, ushort y, ushort z);
+		/** Get the bounds of an indexed region.
+		*/
+		virtual AxisAlignedBox getRegionBounds(ushort x, ushort y, ushort z);
+		/** Get the centre of an indexed region.
+		*/
+		virtual Vector3 getRegionCentre(ushort x, ushort y, ushort z);
+		/** Calculate world bounds from a set of vertex data. */
+		virtual AxisAlignedBox calculateBounds(VertexData* vertexData, 
+			const Vector3& position, const Quaternion& orientation, 
+			const Vector3& scale);
+		/** Look up or calculate the geometry data to use for this SubMesh */
+		SubMeshLodGeometryLinkList* determineGeometry(SubMesh* sm);
+		/** Split some shared geometry into dedicated geometry. */
+		void splitGeometry(VertexData* vd, IndexData* id, 
+			SubMeshLodGeometryLink* targetGeomLink);
+
+		typedef std::map<size_t, size_t> IndexRemap;
+		/** Method for figuring out which vertices are used by an index buffer
+			and calculating a remap lookup for a vertex buffer just containing
+			those vertices. 
+		*/
+		template <typename T>
+		void buildIndexRemap(T* pBuffer, size_t numIndexes, IndexRemap& remap)
+		{
+			remap.clear();
+			for (size_t i = 0; i < numIndexes; ++i)
+			{
+				// use insert since duplicates are silently discarded
+				remap.insert(IndexRemap::value_type(*pBuffer++, remap.size()));
+				// this will have mapped oldindex -> new index IF oldindex
+				// wasn't already there
+			}
+		}
+		/** Method for altering indexes based on a remap. */
+		template <typename T>
+		void remapIndexes(T* src, T* dst, const IndexRemap& remap, 
+				size_t numIndexes)
+		{
+			for (size_t i = 0; i < numIndexes; ++i)
+			{
+				// look up original and map to target
+				IndexRemap::const_iterator ix = remap.find(*src++);
+				assert(ix != remap.end());
+				*dst++ = static_cast<T>(ix->second);
+			}
+		}
+		
+	public:
+		/// Constructor; do not use directly (@see SceneManager::createStaticGeometry)
+		StaticGeometry(SceneManager* owner, const String& name);
+		/// Destructor
+		virtual ~StaticGeometry();
+
+		/// Get the name of this object
+		const String& getName(void) const { return mName; }
+		/** Adds an Entity to the static geometry.
+		@remarks
+			This method takes an existing Entity and adds its details to the 
+			list of	elements to include when building. Note that the Entity         /// The render queue to use when rendering this object
+        RenderQueueGroupID mRenderQueueID;
+		/// Flags whether the RenderQueue's default should be used.
+		bool mRenderQueueIDSet;
+
+			itself is not copied or referenced in this method; an Entity is 
+			passed simply so that you can change the materials of attached 
+			SubEntity objects if you want. You can add the same Entity 
+			instance multiple times with different material settings 
+			completely safely, and destroy the Entity before destroying 
+			this StaticGeometry if you like. The Entity passed in is simply 
+			used as a definition.
+		@note Must be called before 'build'.
+		@param ent The Entity to use as a definition (the Mesh and Materials 
+			referenced will be recorded for the build call).
+		@param position The world position at which to add this Entity
+		@param orientation The world orientation at which to add this Entity
+		@param scale The scale at which to add this entity
+		*/
+		virtual void addEntity(Entity* ent, const Vector3& position,
+			const Quaternion& orientation = Quaternion::IDENTITY, 
+			const Vector3& scale = Vector3::UNIT_SCALE);
+
+		/** Adds all the Entity objects attached to a SceneNode and all it's
+			children to the static geometry.
+		@remarks
+			This method performs just like addEntity, except it adds all the 
+			entities attached to an entire sub-tree to the geometry. 
+			The position / orientation / scale parameters are taken from the
+			node structure instead of being specified manually. 
+		@note
+			The SceneNode you pass in will not be automatically detached from 
+			it's parent, so if you have this node already attached to the scene
+			graph, you will need to remove it if you wish to avoid the overhead
+			of rendering <i>both</i> the original objects and their new static
+			versions! We don't do this for you incase you are preparing this 
+			in advance and so don't want the originals detached yet. 
+		@note Must be called before 'build'.
+		@param node Pointer to the node to use to provide a set of Entity 
+			templates
+		*/
+		virtual void addSceneNode(const SceneNode* node);
+
+		/** Build the geometry. 
+		@remarks
+			Based on all the entities which have been added, and the batching 
+			options which have been set, this method constructs	the batched 
+			geometry structures required. The batches are added to the scene 
+			and will be rendered unless you specifically hide them.
+		@note
+			Once you have called this method, you can no longer add any more 
+			entities.
+		*/
+		virtual void build(void);
+
+		/** Destroys all the built geometry state (reverse of build). 
+		@remarks
+			You can call build() again after this and it will pick up all the
+			same entities / nodes you queued last time.
+		*/
+		virtual void destroy(void);
+
+		/** Clears any of the entities / nodes added to this geometry and 
+			destroys anything which has already been built.
+		*/
+		virtual void reset(void);
+
+		/** Sets the distance at which batches are no longer rendered.
+		@remarks
+			This lets you turn off batches at a given distance. This can be 
+			useful for things like detail meshes (grass, foliage etc) and could
+			be combined with a shader which fades the geometry out beforehand 
+			to lessen the effect.
+		@param dist Distance beyond which the batches will not be rendered 
+			(the default is 0, which means batches are always rendered).
+		*/
+		virtual void setRenderingDistance(Real dist) { 
+			mUpperDistance = dist; 
+			mSquaredUpperDistance = mUpperDistance * mUpperDistance;
+		}
+
+		/** Gets the distance at which batches are no longer rendered. */
+		virtual Real getRenderingDistance(void) const { return mUpperDistance; }
+
+		/** Gets the squared distance at which batches are no longer rendered. */
+		virtual Real getSquaredRenderingDistance(void) const 
+		{ return mSquaredUpperDistance; }
+
+		/** Hides or shows all the batches. */
+		virtual void setVisible(bool visible);
+
+		/** Are the batches visible? */
+		virtual bool isVisible(void) const { return mVisible; }
+
+		/** Sets whether this geometry should cast shadows.
+		@remarks
+			No matter what the settings on the original entities,
+			the StaticGeometry class defaults to not casting shadows. 
+			This is because, being static, unless you have moving lights
+			you'd be better to use precalculated shadows of some sort.
+			However, if you need them, you can enable them using this
+			method. If the SceneManager is set up to use stencil shadows,
+			edge lists will be copied from the underlying meshes on build.
+			It is essential that all meshes support stencil shadows in this
+			case.
+		@note If you intend to use stencil shadows, you must set this to 
+			true before calling 'build' as well as making sure you set the
+			scene's shadow type (that should always be the first thing you do
+			anyway). You can turn shadows off temporarily but they can never 
+			be turned on if they were not at the time of the build. 
+		*/
+		virtual void setCastShadows(bool castShadows);
+		/// Will the geometry from this object cast shadows?
+		virtual bool getCastShadows(void) { return mCastShadows; }
+
+		/** Sets the size of a single region of geometry.
+		@remarks
+			This method allows you to configure the physical world size of 
+			each region, so you can balance culling against batch size. Entities
+			will be fitted within the batch they most closely fit, and the 
+			eventual bounds of each batch may well be slightly larger than this
+			if they overlap a little. The default is Vector3(1000, 1000, 1000).
+		@note Must be called before 'build'.
+		@param size Vector3 expressing the 3D size of each region.
+		*/
+		virtual void setRegionDimensions(const Vector3& size) { 
+			mRegionDimensions = size; 
+			mHalfRegionDimensions = size * 0.5;
+		}
+		/** Gets the size of a single batch of geometry. */
+		virtual const Vector3& getRegionDimensions(void) const { return mRegionDimensions; }
+		/** Sets the origin of the geometry.
+		@remarks
+			This method allows you to configure the world centre of the geometry,
+			thus the place which all regions surround. You probably don't need 
+			to mess with this unless you have a seriously large world, since the
+			default set up can handle an area 1024 * mRegionDimensions, and 
+			the sparseness of population is no issue when it comes to rendering.
+			The default is Vector3(0,0,0).
+		@note Must be called before 'build'.
+		@param size Vector3 expressing the 3D origin of the geometry.
+		*/
+		virtual void setOrigin(const Vector3& origin) { mOrigin = origin; }
+		/** Gets the origin of this geometry. */
+		virtual const Vector3& getOrigin(void) const { return mOrigin; }
+
+        /** Sets the render queue group this object will be rendered through.
+        @remarks
+            Render queues are grouped to allow you to more tightly control the ordering
+            of rendered objects. If you do not call this method, all  objects default
+            to the default queue (RenderQueue::getDefaultQueueGroup), which is fine for 
+			most objects. You may want to alter this if you want to perform more complex
+			rendering.
+        @par
+            See RenderQueue for more details.
+        @param queueID Enumerated value of the queue group to use.
+        */
+        virtual void setRenderQueueGroup(RenderQueueGroupID queueID);
+
+        /** Gets the queue group for this entity, see setRenderQueueGroup for full details. */
+        virtual RenderQueueGroupID getRenderQueueGroup(void) const;
+		
+		/// Iterator for iterating over contained regions
+		typedef MapIterator<RegionMap> RegionIterator;
+		/// Get an iterator over the regions in this geometry
+		RegionIterator getRegionIterator(void);
+
+		/** Dump the contents of this StaticGeometry to a file for diagnostic
+		 	purposes.
+		*/
+		virtual void dump(const String& filename) const;
+
+
+	};
+
+}
+
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreKeyFrame.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreKeyFrame.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreKeyFrame.h	(revision 1092)
@@ -0,0 +1,95 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __KeyFrame_H__
+#define __KeyFrame_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreVector3.h"
+#include "OgreQuaternion.h"
+
+namespace Ogre 
+{
+
+    /** A key frame in an animation sequence defined by an AnimationTrack.
+    @remarks
+        This class can be used as a basis for all kinds of key frames. 
+        The unifying principle is that multiple KeyFrames define an 
+        animation sequence, with the exact state of the animation being an 
+        interpolation between these key frames.
+    */
+    class _OgreExport KeyFrame
+    {
+    public:
+
+        /** Default constructor, you should not call this but use AnimationTrack::createKeyFrame instead. */
+        KeyFrame(const AnimationTrack* parent, Real time);
+
+        /** Gets the time of this keyframe in the animation sequence. */
+        Real getTime(void) const;
+        /** Sets the translation associated with this keyframe. 
+        @remarks    
+            The translation factor affects how much the keyframe translates (moves) it's animable
+            object at it's time index.
+        @param trans The vector to translate by
+        */
+        void setTranslate(const Vector3& trans);
+
+        /** Gets the translation applied by this keyframe. */
+        const Vector3& getTranslate(void) const;
+
+        /** Sets the scaling factor applied by this keyframe to the animable
+        object at it's time index.
+        @param scale The vector to scale by (beware of supplying zero values for any component of this
+            vector, it will scale the object to zero dimensions)
+        */
+        void setScale(const Vector3& scale);
+
+        /** Gets the scaling factor applied by this keyframe. */
+        const Vector3& getScale(void) const;
+
+        /** Sets the rotation applied by this keyframe.
+        @param rot The rotation applied; use Quaternion methods to convert from angle/axis or Matrix3 if
+            you don't like using Quaternions directly.
+        */
+        void setRotation(const Quaternion& rot);
+
+        /** Gets the rotation applied by this keyframe. */
+        const Quaternion& getRotation(void) const;
+
+
+    protected:
+        Real mTime;
+        Vector3 mTranslate;
+        Vector3 mScale;
+        Quaternion mRotate;
+        const AnimationTrack* mParentTrack;
+    };
+
+}
+
+
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/error.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/error.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/error.h	(revision 1092)
@@ -0,0 +1,63 @@
+/*************************************************************************
+ *                                                                       *
+ * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith.       *
+ * All rights reserved.  Email: russ@q12.org   Web: www.q12.org          *
+ *                                                                       *
+ * This library is free software; you can redistribute it and/or         *
+ * modify it under the terms of EITHER:                                  *
+ *   (1) The GNU Lesser General Public License as published by the Free  *
+ *       Software Foundation; either version 2.1 of the License, or (at  *
+ *       your option) any later version. The text of the GNU Lesser      *
+ *       General Public License is included with this library in the     *
+ *       file LICENSE.TXT.                                               *
+ *   (2) The BSD-style license that is included with this library in     *
+ *       the file LICENSE-BSD.TXT.                                       *
+ *                                                                       *
+ * This library is distributed in the hope that it will be useful,       *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files    *
+ * LICENSE.TXT and LICENSE-BSD.TXT for more details.                     *
+ *                                                                       *
+ *************************************************************************/
+
+/* this comes from the `reuse' library. copy any changes back to the source */
+
+#ifndef _ODE_ERROR_H_
+#define _ODE_ERROR_H_
+
+#include <ode/config.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* all user defined error functions have this type. error and debug functions
+ * should not return.
+ */
+typedef void dMessageFunction (int errnum, const char *msg, va_list ap);
+
+/* set a new error, debug or warning handler. if fn is 0, the default handlers
+ * are used.
+ */
+void dSetErrorHandler (dMessageFunction *fn);
+void dSetDebugHandler (dMessageFunction *fn);
+void dSetMessageHandler (dMessageFunction *fn);
+
+/* return the current error, debug or warning handler. if the return value is
+ * 0, the default handlers are in place.
+ */
+dMessageFunction *dGetErrorHandler();
+dMessageFunction *dGetDebugHandler();
+dMessageFunction *dGetMessageHandler();
+
+/* generate a fatal error, debug trap or a message. */
+void dError (int num, const char *msg, ...);
+void dDebug (int num, const char *msg, ...);
+void dMessage (int num, const char *msg, ...);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/objects.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/objects.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/objects.h	(revision 1092)
@@ -0,0 +1,279 @@
+/*************************************************************************
+ *                                                                       *
+ * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith.       *
+ * All rights reserved.  Email: russ@q12.org   Web: www.q12.org          *
+ *                                                                       *
+ * This library is free software; you can redistribute it and/or         *
+ * modify it under the terms of EITHER:                                  *
+ *   (1) The GNU Lesser General Public License as published by the Free  *
+ *       Software Foundation; either version 2.1 of the License, or (at  *
+ *       your option) any later version. The text of the GNU Lesser      *
+ *       General Public License is included with this library in the     *
+ *       file LICENSE.TXT.                                               *
+ *   (2) The BSD-style license that is included with this library in     *
+ *       the file LICENSE-BSD.TXT.                                       *
+ *                                                                       *
+ * This library is distributed in the hope that it will be useful,       *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files    *
+ * LICENSE.TXT and LICENSE-BSD.TXT for more details.                     *
+ *                                                                       *
+ *************************************************************************/
+
+#ifndef _ODE_OBJECTS_H_
+#define _ODE_OBJECTS_H_
+
+#include <ode/common.h>
+#include <ode/mass.h>
+#include <ode/contact.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* world */
+
+dWorldID dWorldCreate();
+void dWorldDestroy (dWorldID);
+
+void dWorldSetGravity (dWorldID, dReal x, dReal y, dReal z);
+void dWorldGetGravity (dWorldID, dVector3 gravity);
+void dWorldSetERP (dWorldID, dReal erp);
+dReal dWorldGetERP (dWorldID);
+void dWorldSetCFM (dWorldID, dReal cfm);
+dReal dWorldGetCFM (dWorldID);
+void dWorldStep (dWorldID, dReal stepsize);
+void dWorldImpulseToForce (dWorldID, dReal stepsize,
+			   dReal ix, dReal iy, dReal iz, dVector3 force);
+
+/* World QuickStep functions */
+
+void dWorldQuickStep (dWorldID w, dReal stepsize);
+void dWorldSetQuickStepNumIterations (dWorldID, int num);
+int dWorldGetQuickStepNumIterations (dWorldID);
+void dWorldSetQuickStepW (dWorldID, dReal param);
+dReal dWorldGetQuickStepW (dWorldID);
+
+/* World contact parameter functions */
+
+void dWorldSetContactMaxCorrectingVel (dWorldID, dReal vel);
+dReal dWorldGetContactMaxCorrectingVel (dWorldID);
+void dWorldSetContactSurfaceLayer (dWorldID, dReal depth);
+dReal dWorldGetContactSurfaceLayer (dWorldID);
+
+/* StepFast1 functions */
+
+void dWorldStepFast1(dWorldID, dReal stepsize, int maxiterations);
+void dWorldSetAutoEnableDepthSF1(dWorldID, int autoEnableDepth);
+int dWorldGetAutoEnableDepthSF1(dWorldID);
+
+/* Auto-disable functions */
+
+dReal dWorldGetAutoDisableLinearThreshold (dWorldID);
+void  dWorldSetAutoDisableLinearThreshold (dWorldID, dReal linear_threshold);
+dReal dWorldGetAutoDisableAngularThreshold (dWorldID);
+void  dWorldSetAutoDisableAngularThreshold (dWorldID, dReal angular_threshold);
+int   dWorldGetAutoDisableSteps (dWorldID);
+void  dWorldSetAutoDisableSteps (dWorldID, int steps);
+dReal dWorldGetAutoDisableTime (dWorldID);
+void  dWorldSetAutoDisableTime (dWorldID, dReal time);
+int   dWorldGetAutoDisableFlag (dWorldID);
+void  dWorldSetAutoDisableFlag (dWorldID, int do_auto_disable);
+
+dReal dBodyGetAutoDisableLinearThreshold (dBodyID);
+void  dBodySetAutoDisableLinearThreshold (dBodyID, dReal linear_threshold);
+dReal dBodyGetAutoDisableAngularThreshold (dBodyID);
+void  dBodySetAutoDisableAngularThreshold (dBodyID, dReal angular_threshold);
+int   dBodyGetAutoDisableSteps (dBodyID);
+void  dBodySetAutoDisableSteps (dBodyID, int steps);
+dReal dBodyGetAutoDisableTime (dBodyID);
+void  dBodySetAutoDisableTime (dBodyID, dReal time);
+int   dBodyGetAutoDisableFlag (dBodyID);
+void  dBodySetAutoDisableFlag (dBodyID, int do_auto_disable);
+void  dBodySetAutoDisableDefaults (dBodyID);
+
+/* bodies */
+
+dBodyID dBodyCreate (dWorldID);
+void dBodyDestroy (dBodyID);
+
+void  dBodySetData (dBodyID, void *data);
+void *dBodyGetData (dBodyID);
+
+void dBodySetPosition   (dBodyID, dReal x, dReal y, dReal z);
+void dBodySetRotation   (dBodyID, const dMatrix3 R);
+void dBodySetQuaternion (dBodyID, const dQuaternion q);
+void dBodySetLinearVel  (dBodyID, dReal x, dReal y, dReal z);
+void dBodySetAngularVel (dBodyID, dReal x, dReal y, dReal z);
+const dReal * dBodyGetPosition   (dBodyID);
+const dReal * dBodyGetRotation   (dBodyID);	/* ptr to 4x3 rot matrix */
+const dReal * dBodyGetQuaternion (dBodyID);
+const dReal * dBodyGetLinearVel  (dBodyID);
+const dReal * dBodyGetAngularVel (dBodyID);
+
+void dBodySetMass (dBodyID, const dMass *mass);
+void dBodyGetMass (dBodyID, dMass *mass);
+
+void dBodyAddForce            (dBodyID, dReal fx, dReal fy, dReal fz);
+void dBodyAddTorque           (dBodyID, dReal fx, dReal fy, dReal fz);
+void dBodyAddRelForce         (dBodyID, dReal fx, dReal fy, dReal fz);
+void dBodyAddRelTorque        (dBodyID, dReal fx, dReal fy, dReal fz);
+void dBodyAddForceAtPos       (dBodyID, dReal fx, dReal fy, dReal fz,
+			                dReal px, dReal py, dReal pz);
+void dBodyAddForceAtRelPos    (dBodyID, dReal fx, dReal fy, dReal fz,
+			                dReal px, dReal py, dReal pz);
+void dBodyAddRelForceAtPos    (dBodyID, dReal fx, dReal fy, dReal fz,
+			                dReal px, dReal py, dReal pz);
+void dBodyAddRelForceAtRelPos (dBodyID, dReal fx, dReal fy, dReal fz,
+			                dReal px, dReal py, dReal pz);
+
+const dReal * dBodyGetForce   (dBodyID);
+const dReal * dBodyGetTorque  (dBodyID);
+void dBodySetForce  (dBodyID b, dReal x, dReal y, dReal z);
+void dBodySetTorque (dBodyID b, dReal x, dReal y, dReal z);
+
+void dBodyGetRelPointPos    (dBodyID, dReal px, dReal py, dReal pz,
+			     dVector3 result);
+void dBodyGetRelPointVel    (dBodyID, dReal px, dReal py, dReal pz,
+			     dVector3 result);
+void dBodyGetPointVel       (dBodyID, dReal px, dReal py, dReal pz,
+			     dVector3 result);
+void dBodyGetPosRelPoint    (dBodyID, dReal px, dReal py, dReal pz,
+			     dVector3 result);
+void dBodyVectorToWorld     (dBodyID, dReal px, dReal py, dReal pz,
+			     dVector3 result);
+void dBodyVectorFromWorld   (dBodyID, dReal px, dReal py, dReal pz,
+			     dVector3 result);
+
+void dBodySetFiniteRotationMode (dBodyID, int mode);
+void dBodySetFiniteRotationAxis (dBodyID, dReal x, dReal y, dReal z);
+
+int dBodyGetFiniteRotationMode (dBodyID);
+void dBodyGetFiniteRotationAxis (dBodyID, dVector3 result);
+
+int dBodyGetNumJoints (dBodyID b);
+dJointID dBodyGetJoint (dBodyID, int index);
+
+void dBodyEnable (dBodyID);
+void dBodyDisable (dBodyID);
+int dBodyIsEnabled (dBodyID);
+
+void dBodySetGravityMode (dBodyID b, int mode);
+int dBodyGetGravityMode (dBodyID b);
+
+
+/* joints */
+
+dJointID dJointCreateBall (dWorldID, dJointGroupID);
+dJointID dJointCreateHinge (dWorldID, dJointGroupID);
+dJointID dJointCreateSlider (dWorldID, dJointGroupID);
+dJointID dJointCreateContact (dWorldID, dJointGroupID, const dContact *);
+dJointID dJointCreateHinge2 (dWorldID, dJointGroupID);
+dJointID dJointCreateUniversal (dWorldID, dJointGroupID);
+dJointID dJointCreateFixed (dWorldID, dJointGroupID);
+dJointID dJointCreateNull (dWorldID, dJointGroupID);
+dJointID dJointCreateAMotor (dWorldID, dJointGroupID);
+
+void dJointDestroy (dJointID);
+
+dJointGroupID dJointGroupCreate (int max_size);
+void dJointGroupDestroy (dJointGroupID);
+void dJointGroupEmpty (dJointGroupID);
+
+void dJointAttach (dJointID, dBodyID body1, dBodyID body2);
+void dJointSetData (dJointID, void *data);
+void *dJointGetData (dJointID);
+int dJointGetType (dJointID);
+dBodyID dJointGetBody (dJointID, int index);
+
+void dJointSetFeedback (dJointID, dJointFeedback *);
+dJointFeedback *dJointGetFeedback (dJointID);
+
+void dJointSetBallAnchor (dJointID, dReal x, dReal y, dReal z);
+void dJointSetHingeAnchor (dJointID, dReal x, dReal y, dReal z);
+void dJointSetHingeAxis (dJointID, dReal x, dReal y, dReal z);
+void dJointSetHingeParam (dJointID, int parameter, dReal value);
+void dJointAddHingeTorque(dJointID joint, dReal torque);
+void dJointSetSliderAxis (dJointID, dReal x, dReal y, dReal z);
+void dJointSetSliderParam (dJointID, int parameter, dReal value);
+void dJointAddSliderForce(dJointID joint, dReal force);
+void dJointSetHinge2Anchor (dJointID, dReal x, dReal y, dReal z);
+void dJointSetHinge2Axis1 (dJointID, dReal x, dReal y, dReal z);
+void dJointSetHinge2Axis2 (dJointID, dReal x, dReal y, dReal z);
+void dJointSetHinge2Param (dJointID, int parameter, dReal value);
+void dJointAddHinge2Torques(dJointID joint, dReal torque1, dReal torque2);
+void dJointSetUniversalAnchor (dJointID, dReal x, dReal y, dReal z);
+void dJointSetUniversalAxis1 (dJointID, dReal x, dReal y, dReal z);
+void dJointSetUniversalAxis2 (dJointID, dReal x, dReal y, dReal z);
+void dJointSetUniversalParam (dJointID, int parameter, dReal value);
+void dJointAddUniversalTorques(dJointID joint, dReal torque1, dReal torque2);
+void dJointSetFixed (dJointID);
+void dJointSetAMotorNumAxes (dJointID, int num);
+void dJointSetAMotorAxis (dJointID, int anum, int rel,
+			  dReal x, dReal y, dReal z);
+void dJointSetAMotorAngle (dJointID, int anum, dReal angle);
+void dJointSetAMotorParam (dJointID, int parameter, dReal value);
+void dJointSetAMotorMode (dJointID, int mode);
+void dJointAddAMotorTorques (dJointID, dReal torque1, dReal torque2, dReal torque3);
+
+void dJointGetBallAnchor (dJointID, dVector3 result);
+void dJointGetBallAnchor2 (dJointID, dVector3 result);
+void dJointGetHingeAnchor (dJointID, dVector3 result);
+void dJointGetHingeAnchor2 (dJointID, dVector3 result);
+void dJointGetHingeAxis (dJointID, dVector3 result);
+dReal dJointGetHingeParam (dJointID, int parameter);
+dReal dJointGetHingeAngle (dJointID);
+dReal dJointGetHingeAngleRate (dJointID);
+dReal dJointGetSliderPosition (dJointID);
+dReal dJointGetSliderPositionRate (dJointID);
+void dJointGetSliderAxis (dJointID, dVector3 result);
+dReal dJointGetSliderParam (dJointID, int parameter);
+void dJointGetHinge2Anchor (dJointID, dVector3 result);
+void dJointGetHinge2Anchor2 (dJointID, dVector3 result);
+void dJointGetHinge2Axis1 (dJointID, dVector3 result);
+void dJointGetHinge2Axis2 (dJointID, dVector3 result);
+dReal dJointGetHinge2Param (dJointID, int parameter);
+dReal dJointGetHinge2Angle1 (dJointID);
+dReal dJointGetHinge2Angle1Rate (dJointID);
+dReal dJointGetHinge2Angle2Rate (dJointID);
+void dJointGetUniversalAnchor (dJointID, dVector3 result);
+void dJointGetUniversalAnchor2 (dJointID, dVector3 result);
+void dJointGetUniversalAxis1 (dJointID, dVector3 result);
+void dJointGetUniversalAxis2 (dJointID, dVector3 result);
+dReal dJointGetUniversalParam (dJointID, int parameter);
+dReal dJointGetUniversalAngle1 (dJointID);
+dReal dJointGetUniversalAngle2 (dJointID);
+dReal dJointGetUniversalAngle1Rate (dJointID);
+dReal dJointGetUniversalAngle2Rate (dJointID);
+int dJointGetAMotorNumAxes (dJointID);
+void dJointGetAMotorAxis (dJointID, int anum, dVector3 result);
+int dJointGetAMotorAxisRel (dJointID, int anum);
+dReal dJointGetAMotorAngle (dJointID, int anum);
+dReal dJointGetAMotorAngleRate (dJointID, int anum);
+dReal dJointGetAMotorParam (dJointID, int parameter);
+int dJointGetAMotorMode (dJointID);
+
+int dAreConnected (dBodyID, dBodyID);
+int dAreConnectedExcluding (dBodyID, dBodyID, int joint_type);
+
+/*
+    This code is part of the Plane2D ODE joint
+    by psero@gmx.de
+    Wed Apr 23 18:53:43 CEST 2003
+    
+    Add this code to the file: include/ode/objects.h
+*/
+
+
+dJointID dJointCreatePlane2D (dWorldID, dJointGroupID);
+
+void dJointSetPlane2DXParam (dJointID, int parameter, dReal value);
+void dJointSetPlane2DYParam (dJointID, int parameter, dReal value);
+void dJointSetPlane2DAngleParam (dJointID, int parameter, dReal value);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/collision.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/collision.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/collision.h	(revision 1092)
@@ -0,0 +1,198 @@
+/*************************************************************************
+ *                                                                       *
+ * Open Dynamics Engine, Copyright (C) 2001-2003 Russell L. Smith.       *
+ * All rights reserved.  Email: russ@q12.org   Web: www.q12.org          *
+ *                                                                       *
+ * This library is free software; you can redistribute it and/or         *
+ * modify it under the terms of EITHER:                                  *
+ *   (1) The GNU Lesser General Public License as published by the Free  *
+ *       Software Foundation; either version 2.1 of the License, or (at  *
+ *       your option) any later version. The text of the GNU Lesser      *
+ *       General Public License is included with this library in the     *
+ *       file LICENSE.TXT.                                               *
+ *   (2) The BSD-style license that is included with this library in     *
+ *       the file LICENSE-BSD.TXT.                                       *
+ *                                                                       *
+ * This library is distributed in the hope that it will be useful,       *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files    *
+ * LICENSE.TXT and LICENSE-BSD.TXT for more details.                     *
+ *                                                                       *
+ *************************************************************************/
+
+#ifndef _ODE_COLLISION_H_
+#define _ODE_COLLISION_H_
+
+#include <ode/common.h>
+#include <ode/collision_space.h>
+#include <ode/contact.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ************************************************************************ */
+/* general functions */
+
+void dGeomDestroy (dGeomID);
+void dGeomSetData (dGeomID, void *);
+void *dGeomGetData (dGeomID);
+void dGeomSetBody (dGeomID, dBodyID);
+dBodyID dGeomGetBody (dGeomID);
+void dGeomSetPosition (dGeomID, dReal x, dReal y, dReal z);
+void dGeomSetRotation (dGeomID, const dMatrix3 R);
+void dGeomSetQuaternion (dGeomID, const dQuaternion);
+const dReal * dGeomGetPosition (dGeomID);
+const dReal * dGeomGetRotation (dGeomID);
+void dGeomGetQuaternion (dGeomID, dQuaternion result);
+void dGeomGetAABB (dGeomID, dReal aabb[6]);
+int dGeomIsSpace (dGeomID);
+dSpaceID dGeomGetSpace (dGeomID);
+int dGeomGetClass (dGeomID);
+void dGeomSetCategoryBits (dGeomID, unsigned long bits);
+void dGeomSetCollideBits (dGeomID, unsigned long bits);
+unsigned long dGeomGetCategoryBits (dGeomID);
+unsigned long dGeomGetCollideBits (dGeomID);
+void dGeomEnable (dGeomID);
+void dGeomDisable (dGeomID);
+int dGeomIsEnabled (dGeomID);
+
+/* ************************************************************************ */
+/* collision detection */
+
+int dCollide (dGeomID o1, dGeomID o2, int flags, dContactGeom *contact,
+	      int skip);
+void dSpaceCollide (dSpaceID space, void *data, dNearCallback *callback);
+void dSpaceCollide2 (dGeomID o1, dGeomID o2, void *data,
+		     dNearCallback *callback);
+
+/* ************************************************************************ */
+/* standard classes */
+
+/* the maximum number of user classes that are supported */
+enum {
+  dMaxUserClasses = 4
+};
+
+/* class numbers - each geometry object needs a unique number */
+enum {
+  dSphereClass = 0,
+  dBoxClass,
+  dCCylinderClass,
+  dCylinderClass,
+  dPlaneClass,
+  dRayClass,
+  dGeomTransformClass,
+  dTriMeshClass,
+  // Terrain callback mod
+  dTerrainCallbackClass,
+  
+  dFirstSpaceClass,
+  dSimpleSpaceClass = dFirstSpaceClass,
+  dHashSpaceClass,
+  dQuadTreeSpaceClass,
+  dLastSpaceClass = dQuadTreeSpaceClass,
+
+  dFirstUserClass,
+  dLastUserClass = dFirstUserClass + dMaxUserClasses - 1,
+  dGeomNumClasses
+};
+
+// Terrain Callback mod (start)
+typedef dReal dTerrainHeightCallback(void* data,dReal x,dReal z);
+
+dGeomID dCreateTerrainCallback (dSpaceID space, dReal *pHeights,dReal vHeight,dReal vLength,int nNumNodesPerSide, int bFinite, int bPlaceable);
+dReal dGeomTerrainCallbackPointDepth (dGeomID g, dReal x, dReal y, dReal z);
+void dGeomTerrainCallbackSetHeightCallback(dGeomID g,dTerrainHeightCallback* callback);
+// Terrain Callback mod (end)
+
+dGeomID dCreateSphere (dSpaceID space, dReal radius);
+void dGeomSphereSetRadius (dGeomID sphere, dReal radius);
+dReal dGeomSphereGetRadius (dGeomID sphere);
+dReal dGeomSpherePointDepth (dGeomID sphere, dReal x, dReal y, dReal z);
+
+dGeomID dCreateBox (dSpaceID space, dReal lx, dReal ly, dReal lz);
+void dGeomBoxSetLengths (dGeomID box, dReal lx, dReal ly, dReal lz);
+void dGeomBoxGetLengths (dGeomID box, dVector3 result);
+dReal dGeomBoxPointDepth (dGeomID box, dReal x, dReal y, dReal z);
+
+dGeomID dCreatePlane (dSpaceID space, dReal a, dReal b, dReal c, dReal d);
+void dGeomPlaneSetParams (dGeomID plane, dReal a, dReal b, dReal c, dReal d);
+void dGeomPlaneGetParams (dGeomID plane, dVector4 result);
+dReal dGeomPlanePointDepth (dGeomID plane, dReal x, dReal y, dReal z);
+
+dGeomID dCreateCCylinder (dSpaceID space, dReal radius, dReal length);
+void dGeomCCylinderSetParams (dGeomID ccylinder, dReal radius, dReal length);
+void dGeomCCylinderGetParams (dGeomID ccylinder, dReal *radius, dReal *length);
+dReal dGeomCCylinderPointDepth (dGeomID ccylinder, dReal x, dReal y, dReal z);
+
+dGeomID dCreateRay (dSpaceID space, dReal length);
+void dGeomRaySetLength (dGeomID ray, dReal length);
+dReal dGeomRayGetLength (dGeomID ray);
+void dGeomRaySet (dGeomID ray, dReal px, dReal py, dReal pz,
+		  dReal dx, dReal dy, dReal dz);
+void dGeomRayGet (dGeomID ray, dVector3 start, dVector3 dir);
+
+/*
+ * Set/get ray flags that influence ray collision detection.
+ * These flags are currently only noticed by the trimesh collider, because
+ * they can make a major differences there.
+ */
+void dGeomRaySetParams (dGeomID g, int FirstContact, int BackfaceCull);
+void dGeomRayGetParams (dGeomID g, int *FirstContact, int *BackfaceCull);
+void dGeomRaySetClosestHit (dGeomID g, int closestHit);
+int dGeomRayGetClosestHit (dGeomID g);
+
+#include "collision_trimesh.h"
+
+dGeomID dCreateGeomTransform (dSpaceID space);
+void dGeomTransformSetGeom (dGeomID g, dGeomID obj);
+dGeomID dGeomTransformGetGeom (dGeomID g);
+void dGeomTransformSetCleanup (dGeomID g, int mode);
+int dGeomTransformGetCleanup (dGeomID g);
+void dGeomTransformSetInfo (dGeomID g, int mode);
+int dGeomTransformGetInfo (dGeomID g);
+
+/* ************************************************************************ */
+/* utility functions */
+
+void dClosestLineSegmentPoints (const dVector3 a1, const dVector3 a2,
+				const dVector3 b1, const dVector3 b2,
+				dVector3 cp1, dVector3 cp2);
+
+int dBoxTouchesBox (const dVector3 _p1, const dMatrix3 R1,
+		    const dVector3 side1, const dVector3 _p2,
+		    const dMatrix3 R2, const dVector3 side2);
+
+void dInfiniteAABB (dGeomID geom, dReal aabb[6]);
+void dCloseODE();
+
+/* ************************************************************************ */
+/* custom classes */
+
+typedef void dGetAABBFn (dGeomID, dReal aabb[6]);
+typedef int dColliderFn (dGeomID o1, dGeomID o2,
+			 int flags, dContactGeom *contact, int skip);
+typedef dColliderFn * dGetColliderFnFn (int num);
+typedef void dGeomDtorFn (dGeomID o);
+typedef int dAABBTestFn (dGeomID o1, dGeomID o2, dReal aabb[6]);
+
+typedef struct dGeomClass {
+  int bytes;
+  dGetColliderFnFn *collider;
+  dGetAABBFn *aabb;
+  dAABBTestFn *aabb_test;
+  dGeomDtorFn *dtor;
+} dGeomClass;
+
+int dCreateGeomClass (const dGeomClass *classptr);
+void * dGeomGetClassData (dGeomID);
+dGeomID dCreateGeom (int classnum);
+
+/* ************************************************************************ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/contact.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/contact.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/contact.h	(revision 1092)
@@ -0,0 +1,90 @@
+/*************************************************************************
+ *                                                                       *
+ * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith.       *
+ * All rights reserved.  Email: russ@q12.org   Web: www.q12.org          *
+ *                                                                       *
+ * This library is free software; you can redistribute it and/or         *
+ * modify it under the terms of EITHER:                                  *
+ *   (1) The GNU Lesser General Public License as published by the Free  *
+ *       Software Foundation; either version 2.1 of the License, or (at  *
+ *       your option) any later version. The text of the GNU Lesser      *
+ *       General Public License is included with this library in the     *
+ *       file LICENSE.TXT.                                               *
+ *   (2) The BSD-style license that is included with this library in     *
+ *       the file LICENSE-BSD.TXT.                                       *
+ *                                                                       *
+ * This library is distributed in the hope that it will be useful,       *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files    *
+ * LICENSE.TXT and LICENSE-BSD.TXT for more details.                     *
+ *                                                                       *
+ *************************************************************************/
+
+#ifndef _ODE_CONTACT_H_
+#define _ODE_CONTACT_H_
+
+#include <ode/common.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+enum {
+  dContactMu2		= 0x001,
+  dContactFDir1		= 0x002,
+  dContactBounce	= 0x004,
+  dContactSoftERP	= 0x008,
+  dContactSoftCFM	= 0x010,
+  dContactMotion1	= 0x020,
+  dContactMotion2	= 0x040,
+  dContactSlip1		= 0x080,
+  dContactSlip2		= 0x100,
+
+  dContactApprox0	= 0x0000,
+  dContactApprox1_1	= 0x1000,
+  dContactApprox1_2	= 0x2000,
+  dContactApprox1	= 0x3000
+};
+
+
+typedef struct dSurfaceParameters {
+  /* must always be defined */
+  int mode;
+  dReal mu;
+
+  /* only defined if the corresponding flag is set in mode */
+  dReal mu2;
+  dReal bounce;
+  dReal bounce_vel;
+  dReal soft_erp;
+  dReal soft_cfm;
+  dReal motion1,motion2;
+  dReal slip1,slip2;
+} dSurfaceParameters;
+
+
+/* contact info set by collision functions */
+
+typedef struct dContactGeom {
+  dVector3 pos;
+  dVector3 normal;
+  dReal depth;
+  dGeomID g1,g2;
+} dContactGeom;
+
+
+/* contact info used by contact joint */
+
+typedef struct dContact {
+  dSurfaceParameters surface;
+  dContactGeom geom;
+  dVector3 fdir1;
+} dContact;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/misc.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/misc.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/misc.h	(revision 1092)
@@ -0,0 +1,85 @@
+/*************************************************************************
+ *                                                                       *
+ * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith.       *
+ * All rights reserved.  Email: russ@q12.org   Web: www.q12.org          *
+ *                                                                       *
+ * This library is free software; you can redistribute it and/or         *
+ * modify it under the terms of EITHER:                                  *
+ *   (1) The GNU Lesser General Public License as published by the Free  *
+ *       Software Foundation; either version 2.1 of the License, or (at  *
+ *       your option) any later version. The text of the GNU Lesser      *
+ *       General Public License is included with this library in the     *
+ *       file LICENSE.TXT.                                               *
+ *   (2) The BSD-style license that is included with this library in     *
+ *       the file LICENSE-BSD.TXT.                                       *
+ *                                                                       *
+ * This library is distributed in the hope that it will be useful,       *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files    *
+ * LICENSE.TXT and LICENSE-BSD.TXT for more details.                     *
+ *                                                                       *
+ *************************************************************************/
+
+/* miscellaneous math functions. these are mostly useful for testing */
+
+#ifndef _ODE_MISC_H_
+#define _ODE_MISC_H_
+
+#include <ode/common.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* return 1 if the random number generator is working. */
+int dTestRand();
+
+/* return next 32 bit random number. this uses a not-very-random linear
+ * congruential method.
+ */
+unsigned long dRand();
+
+/* get and set the current random number seed. */
+unsigned long  dRandGetSeed();
+void dRandSetSeed (unsigned long s);
+
+/* return a random integer between 0..n-1. the distribution will get worse
+ * as n approaches 2^32.
+ */
+int dRandInt (int n);
+
+/* return a random real number between 0..1 */
+dReal dRandReal();
+
+/* print out a matrix */
+#ifdef __cplusplus
+void dPrintMatrix (const dReal *A, int n, int m, char *fmt = "%10.4f ",
+		   FILE *f=stdout);
+#else
+void dPrintMatrix (const dReal *A, int n, int m, char *fmt, FILE *f);
+#endif
+
+/* make a random vector with entries between +/- range. A has n elements. */
+void dMakeRandomVector (dReal *A, int n, dReal range);
+
+/* make a random matrix with entries between +/- range. A has size n*m. */
+void dMakeRandomMatrix (dReal *A, int n, int m, dReal range);
+
+/* clear the upper triangle of a square matrix */
+void dClearUpperTriangle (dReal *A, int n);
+
+/* return the maximum element difference between the two n*m matrices */
+dReal dMaxDifference (const dReal *A, const dReal *B, int n, int m);
+
+/* return the maximum element difference between the lower triangle of two
+ * n*n matrices */
+dReal dMaxDifferenceLowerTriangle (const dReal *A, const dReal *B, int n);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/rotation.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/rotation.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/rotation.h	(revision 1092)
@@ -0,0 +1,70 @@
+/*************************************************************************
+ *                                                                       *
+ * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith.       *
+ * All rights reserved.  Email: russ@q12.org   Web: www.q12.org          *
+ *                                                                       *
+ * This library is free software; you can redistribute it and/or         *
+ * modify it under the terms of EITHER:                                  *
+ *   (1) The GNU Lesser General Public License as published by the Free  *
+ *       Software Foundation; either version 2.1 of the License, or (at  *
+ *       your option) any later version. The text of the GNU Lesser      *
+ *       General Public License is included with this library in the     *
+ *       file LICENSE.TXT.                                               *
+ *   (2) The BSD-style license that is included with this library in     *
+ *       the file LICENSE-BSD.TXT.                                       *
+ *                                                                       *
+ * This library is distributed in the hope that it will be useful,       *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files    *
+ * LICENSE.TXT and LICENSE-BSD.TXT for more details.                     *
+ *                                                                       *
+ *************************************************************************/
+
+#ifndef _ODE_ROTATION_H_
+#define _ODE_ROTATION_H_
+
+#include <ode/common.h>
+#include <ode/compatibility.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+void dRSetIdentity (dMatrix3 R);
+
+void dRFromAxisAndAngle (dMatrix3 R, dReal ax, dReal ay, dReal az,
+			 dReal angle);
+
+void dRFromEulerAngles (dMatrix3 R, dReal phi, dReal theta, dReal psi);
+
+void dRFrom2Axes (dMatrix3 R, dReal ax, dReal ay, dReal az,
+		  dReal bx, dReal by, dReal bz);
+
+void dRFromZAxis (dMatrix3 R, dReal ax, dReal ay, dReal az);
+
+void dQSetIdentity (dQuaternion q);
+
+void dQFromAxisAndAngle (dQuaternion q, dReal ax, dReal ay, dReal az,
+			 dReal angle);
+
+/* Quaternion multiplication, analogous to the matrix multiplication routines. */
+/* qa = rotate by qc, then qb */
+void dQMultiply0 (dQuaternion qa, const dQuaternion qb, const dQuaternion qc);
+/* qa = rotate by qc, then by inverse of qb */
+void dQMultiply1 (dQuaternion qa, const dQuaternion qb, const dQuaternion qc);
+/* qa = rotate by inverse of qc, then by qb */
+void dQMultiply2 (dQuaternion qa, const dQuaternion qb, const dQuaternion qc);
+/* qa = rotate by inverse of qc, then by inverse of qb */
+void dQMultiply3 (dQuaternion qa, const dQuaternion qb, const dQuaternion qc);
+
+void dRfromQ (dMatrix3 R, const dQuaternion q);
+void dQfromR (dQuaternion q, const dMatrix3 R);
+void dDQfromW (dReal dq[4], const dVector3 w, const dQuaternion q);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/mass.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/mass.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/mass.h	(revision 1092)
@@ -0,0 +1,107 @@
+/*************************************************************************
+ *                                                                       *
+ * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith.       *
+ * All rights reserved.  Email: russ@q12.org   Web: www.q12.org          *
+ *                                                                       *
+ * This library is free software; you can redistribute it and/or         *
+ * modify it under the terms of EITHER:                                  *
+ *   (1) The GNU Lesser General Public License as published by the Free  *
+ *       Software Foundation; either version 2.1 of the License, or (at  *
+ *       your option) any later version. The text of the GNU Lesser      *
+ *       General Public License is included with this library in the     *
+ *       file LICENSE.TXT.                                               *
+ *   (2) The BSD-style license that is included with this library in     *
+ *       the file LICENSE-BSD.TXT.                                       *
+ *                                                                       *
+ * This library is distributed in the hope that it will be useful,       *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files    *
+ * LICENSE.TXT and LICENSE-BSD.TXT for more details.                     *
+ *                                                                       *
+ *************************************************************************/
+
+#ifndef _ODE_MASS_H_
+#define _ODE_MASS_H_
+
+#include <ode/common.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct dMass;
+typedef struct dMass dMass;
+
+
+void dMassSetZero (dMass *);
+
+void dMassSetParameters (dMass *, dReal themass,
+			 dReal cgx, dReal cgy, dReal cgz,
+			 dReal I11, dReal I22, dReal I33,
+			 dReal I12, dReal I13, dReal I23);
+
+void dMassSetSphere (dMass *, dReal density, dReal radius);
+void dMassSetSphereTotal (dMass *, dReal total_mass, dReal radius);
+
+void dMassSetCappedCylinder (dMass *, dReal density, int direction,
+			     dReal radius, dReal length);
+void dMassSetCappedCylinderTotal (dMass *, dReal total_mass, int direction,
+				  dReal radius, dReal length);
+
+void dMassSetCylinder (dMass *, dReal density, int direction,
+		       dReal radius, dReal length);
+void dMassSetCylinderTotal (dMass *, dReal total_mass, int direction,
+			    dReal radius, dReal length);
+
+void dMassSetBox (dMass *, dReal density,
+		  dReal lx, dReal ly, dReal lz);
+void dMassSetBoxTotal (dMass *, dReal total_mass,
+		       dReal lx, dReal ly, dReal lz);
+
+void dMassAdjust (dMass *, dReal newmass);
+
+void dMassTranslate (dMass *, dReal x, dReal y, dReal z);
+
+void dMassRotate (dMass *, const dMatrix3 R);
+
+void dMassAdd (dMass *a, const dMass *b);
+
+
+
+struct dMass {
+  dReal mass;
+  dVector4 c;
+  dMatrix3 I;
+
+#ifdef __cplusplus
+  dMass()
+    { dMassSetZero (this); }
+  void setZero()
+    { dMassSetZero (this); }
+  void setParameters (dReal themass, dReal cgx, dReal cgy, dReal cgz,
+		      dReal I11, dReal I22, dReal I33,
+		      dReal I12, dReal I13, dReal I23)
+    { dMassSetParameters (this,themass,cgx,cgy,cgz,I11,I22,I33,I12,I13,I23); }
+  void setSphere (dReal density, dReal radius)
+    { dMassSetSphere (this,density,radius); }
+  void setCappedCylinder (dReal density, int direction, dReal a, dReal b)
+    { dMassSetCappedCylinder (this,density,direction,a,b); }
+  void setBox (dReal density, dReal lx, dReal ly, dReal lz)
+    { dMassSetBox (this,density,lx,ly,lz); }
+  void adjust (dReal newmass)
+    { dMassAdjust (this,newmass); }
+  void translate (dReal x, dReal y, dReal z)
+    { dMassTranslate (this,x,y,z); }
+  void rotate (const dMatrix3 R)
+    { dMassRotate (this,R); }
+  void add (const dMass *b)
+    { dMassAdd (this,b); }
+#endif
+};
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/matrix.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/matrix.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/matrix.h	(revision 1092)
@@ -0,0 +1,194 @@
+/*************************************************************************
+ *                                                                       *
+ * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith.       *
+ * All rights reserved.  Email: russ@q12.org   Web: www.q12.org          *
+ *                                                                       *
+ * This library is free software; you can redistribute it and/or         *
+ * modify it under the terms of EITHER:                                  *
+ *   (1) The GNU Lesser General Public License as published by the Free  *
+ *       Software Foundation; either version 2.1 of the License, or (at  *
+ *       your option) any later version. The text of the GNU Lesser      *
+ *       General Public License is included with this library in the     *
+ *       file LICENSE.TXT.                                               *
+ *   (2) The BSD-style license that is included with this library in     *
+ *       the file LICENSE-BSD.TXT.                                       *
+ *                                                                       *
+ * This library is distributed in the hope that it will be useful,       *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files    *
+ * LICENSE.TXT and LICENSE-BSD.TXT for more details.                     *
+ *                                                                       *
+ *************************************************************************/
+
+/* optimized and unoptimized vector and matrix functions */
+
+#ifndef _ODE_MATRIX_H_
+#define _ODE_MATRIX_H_
+
+#include <ode/common.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* set a vector/matrix of size n to all zeros, or to a specific value. */
+
+void dSetZero (dReal *a, int n);
+void dSetValue (dReal *a, int n, dReal value);
+
+
+/* get the dot product of two n*1 vectors. if n <= 0 then
+ * zero will be returned (in which case a and b need not be valid).
+ */
+
+dReal dDot (const dReal *a, const dReal *b, int n);
+
+
+/* get the dot products of (a0,b), (a1,b), etc and return them in outsum.
+ * all vectors are n*1. if n <= 0 then zeroes will be returned (in which case
+ * the input vectors need not be valid). this function is somewhat faster
+ * than calling dDot() for all of the combinations separately.
+ */
+
+/* NOT INCLUDED in the library for now.
+void dMultidot2 (const dReal *a0, const dReal *a1,
+		 const dReal *b, dReal *outsum, int n);
+*/
+
+
+/* matrix multiplication. all matrices are stored in standard row format.
+ * the digit refers to the argument that is transposed:
+ *   0:   A = B  * C   (sizes: A:p*r B:p*q C:q*r)
+ *   1:   A = B' * C   (sizes: A:p*r B:q*p C:q*r)
+ *   2:   A = B  * C'  (sizes: A:p*r B:p*q C:r*q)
+ * case 1,2 are equivalent to saying that the operation is A=B*C but
+ * B or C are stored in standard column format.
+ */
+
+void dMultiply0 (dReal *A, const dReal *B, const dReal *C, int p,int q,int r);
+void dMultiply1 (dReal *A, const dReal *B, const dReal *C, int p,int q,int r);
+void dMultiply2 (dReal *A, const dReal *B, const dReal *C, int p,int q,int r);
+
+
+/* do an in-place cholesky decomposition on the lower triangle of the n*n
+ * symmetric matrix A (which is stored by rows). the resulting lower triangle
+ * will be such that L*L'=A. return 1 on success and 0 on failure (on failure
+ * the matrix is not positive definite).
+ */
+
+int dFactorCholesky (dReal *A, int n);
+
+
+/* solve for x: L*L'*x = b, and put the result back into x.
+ * L is size n*n, b is size n*1. only the lower triangle of L is considered.
+ */
+
+void dSolveCholesky (const dReal *L, dReal *b, int n);
+
+
+/* compute the inverse of the n*n positive definite matrix A and put it in
+ * Ainv. this is not especially fast. this returns 1 on success (A was
+ * positive definite) or 0 on failure (not PD).
+ */
+
+int dInvertPDMatrix (const dReal *A, dReal *Ainv, int n);
+
+
+/* check whether an n*n matrix A is positive definite, return 1/0 (yes/no).
+ * positive definite means that x'*A*x > 0 for any x. this performs a
+ * cholesky decomposition of A. if the decomposition fails then the matrix
+ * is not positive definite. A is stored by rows. A is not altered.
+ */
+
+int dIsPositiveDefinite (const dReal *A, int n);
+
+
+/* factorize a matrix A into L*D*L', where L is lower triangular with ones on
+ * the diagonal, and D is diagonal.
+ * A is an n*n matrix stored by rows, with a leading dimension of n rounded
+ * up to 4. L is written into the strict lower triangle of A (the ones are not
+ * written) and the reciprocal of the diagonal elements of D are written into
+ * d.
+ */
+void dFactorLDLT (dReal *A, dReal *d, int n, int nskip);
+
+
+/* solve L*x=b, where L is n*n lower triangular with ones on the diagonal,
+ * and x,b are n*1. b is overwritten with x.
+ * the leading dimension of L is `nskip'.
+ */
+void dSolveL1 (const dReal *L, dReal *b, int n, int nskip);
+
+
+/* solve L'*x=b, where L is n*n lower triangular with ones on the diagonal,
+ * and x,b are n*1. b is overwritten with x.
+ * the leading dimension of L is `nskip'.
+ */
+void dSolveL1T (const dReal *L, dReal *b, int n, int nskip);
+
+
+/* in matlab syntax: a(1:n) = a(1:n) .* d(1:n) */
+
+void dVectorScale (dReal *a, const dReal *d, int n);
+
+
+/* given `L', a n*n lower triangular matrix with ones on the diagonal,
+ * and `d', a n*1 vector of the reciprocal diagonal elements of an n*n matrix
+ * D, solve L*D*L'*x=b where x,b are n*1. x overwrites b.
+ * the leading dimension of L is `nskip'.
+ */
+
+void dSolveLDLT (const dReal *L, const dReal *d, dReal *b, int n, int nskip);
+
+
+/* given an L*D*L' factorization of an n*n matrix A, return the updated
+ * factorization L2*D2*L2' of A plus the following "top left" matrix:
+ *
+ *    [ b a' ]     <-- b is a[0]
+ *    [ a 0  ]     <-- a is a[1..n-1]
+ *
+ *   - L has size n*n, its leading dimension is nskip. L is lower triangular
+ *     with ones on the diagonal. only the lower triangle of L is referenced.
+ *   - d has size n. d contains the reciprocal diagonal elements of D.
+ *   - a has size n.
+ * the result is written into L, except that the left column of L and d[0]
+ * are not actually modified. see ldltaddTL.m for further comments. 
+ */
+void dLDLTAddTL (dReal *L, dReal *d, const dReal *a, int n, int nskip);
+
+
+/* given an L*D*L' factorization of a permuted matrix A, produce a new
+ * factorization for row and column `r' removed.
+ *   - A has size n1*n1, its leading dimension in nskip. A is symmetric and
+ *     positive definite. only the lower triangle of A is referenced.
+ *     A itself may actually be an array of row pointers.
+ *   - L has size n2*n2, its leading dimension in nskip. L is lower triangular
+ *     with ones on the diagonal. only the lower triangle of L is referenced.
+ *   - d has size n2. d contains the reciprocal diagonal elements of D.
+ *   - p is a permutation vector. it contains n2 indexes into A. each index
+ *     must be in the range 0..n1-1.
+ *   - r is the row/column of L to remove.
+ * the new L will be written within the old L, i.e. will have the same leading
+ * dimension. the last row and column of L, and the last element of d, are
+ * undefined on exit.
+ *
+ * a fast O(n^2) algorithm is used. see ldltremove.m for further comments.
+ */
+void dLDLTRemove (dReal **A, const int *p, dReal *L, dReal *d,
+		  int n1, int n2, int r, int nskip);
+
+
+/* given an n*n matrix A (with leading dimension nskip), remove the r'th row
+ * and column by moving elements. the new matrix will have the same leading
+ * dimension. the last row and column of A are untouched on exit.
+ */
+void dRemoveRowCol (dReal *A, int n, int nskip, int r);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/config.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/config.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/config.h	(revision 1092)
@@ -0,0 +1,50 @@
+/* per-machine configuration. this file is automatically generated. */
+
+#ifndef _ODE_CONFIG_H_
+#define _ODE_CONFIG_H_
+
+/* standard system headers */
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <string.h>
+#include <stdarg.h>
+#include <malloc.h>
+#include <float.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* is this a pentium on a gcc-based platform? */
+/* #define PENTIUM 1 -- not a pentium */
+
+/* integer types (we assume int >= 32 bits) */
+typedef char int8;
+typedef unsigned char uint8;
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+
+/* an integer type that we can safely cast a pointer to and
+ * from without loss of bits.
+ */
+typedef unsigned int intP;
+
+/* select the base floating point type */
+#define dSINGLE 1
+
+/* the floating point infinity */
+#define dInfinity FLT_MAX
+
+/* available functions */
+#define copysignf copysign
+#define copysign _copysign
+#define snprintf _snprintf
+#define vsnprintf _vsnprintf
+
+#ifdef __cplusplus
+}
+#endif
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/collision_space.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/collision_space.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/collision_space.h	(revision 1092)
@@ -0,0 +1,61 @@
+/*************************************************************************
+ *                                                                       *
+ * Open Dynamics Engine, Copyright (C) 2001-2003 Russell L. Smith.       *
+ * All rights reserved.  Email: russ@q12.org   Web: www.q12.org          *
+ *                                                                       *
+ * This library is free software; you can redistribute it and/or         *
+ * modify it under the terms of EITHER:                                  *
+ *   (1) The GNU Lesser General Public License as published by the Free  *
+ *       Software Foundation; either version 2.1 of the License, or (at  *
+ *       your option) any later version. The text of the GNU Lesser      *
+ *       General Public License is included with this library in the     *
+ *       file LICENSE.TXT.                                               *
+ *   (2) The BSD-style license that is included with this library in     *
+ *       the file LICENSE-BSD.TXT.                                       *
+ *                                                                       *
+ * This library is distributed in the hope that it will be useful,       *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files    *
+ * LICENSE.TXT and LICENSE-BSD.TXT for more details.                     *
+ *                                                                       *
+ *************************************************************************/
+
+#ifndef _ODE_COLLISION_SPACE_H_
+#define _ODE_COLLISION_SPACE_H_
+
+#include <ode/common.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct dContactGeom;
+
+typedef void dNearCallback (void *data, dGeomID o1, dGeomID o2);
+
+
+dSpaceID dSimpleSpaceCreate (dSpaceID space);
+dSpaceID dHashSpaceCreate (dSpaceID space);
+dSpaceID dQuadTreeSpaceCreate (dSpaceID space, dVector3 Center, dVector3 Extents, int Depth);
+
+void dSpaceDestroy (dSpaceID);
+
+void dHashSpaceSetLevels (dSpaceID space, int minlevel, int maxlevel);
+void dHashSpaceGetLevels (dSpaceID space, int *minlevel, int *maxlevel);
+
+void dSpaceSetCleanup (dSpaceID space, int mode);
+int dSpaceGetCleanup (dSpaceID space);
+
+void dSpaceAdd (dSpaceID, dGeomID);
+void dSpaceRemove (dSpaceID, dGeomID);
+int dSpaceQuery (dSpaceID, dGeomID);
+void dSpaceClean (dSpaceID);
+int dSpaceGetNumGeoms (dSpaceID);
+dGeomID dSpaceGetGeom (dSpaceID, int i);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/README
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/README	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/README	(revision 1092)
@@ -0,0 +1,18 @@
+
+this is the public C interface to the ODE library.
+
+all these files should be includable from C, i.e. they should not use any
+C++ features. everything should be protected with
+
+	#ifdef __cplusplus
+	extern "C" {
+	#endif
+
+	...
+
+	#ifdef __cplusplus
+	}
+	#endif
+
+the only exceptions are the odecpp.h and odecpp_collisioh.h files, which define a C++ wrapper for
+the C interface. remember to keep this in sync!
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/ode.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/ode.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/ode.h	(revision 1092)
@@ -0,0 +1,47 @@
+/*************************************************************************
+ *                                                                       *
+ * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith.       *
+ * All rights reserved.  Email: russ@q12.org   Web: www.q12.org          *
+ *                                                                       *
+ * This library is free software; you can redistribute it and/or         *
+ * modify it under the terms of EITHER:                                  *
+ *   (1) The GNU Lesser General Public License as published by the Free  *
+ *       Software Foundation; either version 2.1 of the License, or (at  *
+ *       your option) any later version. The text of the GNU Lesser      *
+ *       General Public License is included with this library in the     *
+ *       file LICENSE.TXT.                                               *
+ *   (2) The BSD-style license that is included with this library in     *
+ *       the file LICENSE-BSD.TXT.                                       *
+ *                                                                       *
+ * This library is distributed in the hope that it will be useful,       *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files    *
+ * LICENSE.TXT and LICENSE-BSD.TXT for more details.                     *
+ *                                                                       *
+ *************************************************************************/
+
+#ifndef _ODE_ODE_H_
+#define _ODE_ODE_H_
+
+/* include *everything* here */
+
+#include <ode/config.h>
+#include <ode/compatibility.h>
+#include <ode/common.h>
+#include <ode/contact.h>
+#include <ode/error.h>
+#include <ode/memory.h>
+#include <ode/odemath.h>
+#include <ode/matrix.h>
+#include <ode/timer.h>
+#include <ode/rotation.h>
+#include <ode/mass.h>
+#include <ode/misc.h>
+#include <ode/objects.h>
+#include <ode/odecpp.h>
+#include <ode/collision_space.h>
+#include <ode/collision.h>
+#include <ode/odecpp_collision.h>
+#include <ode/export-dif.h>
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/odecpp_old.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/odecpp_old.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/odecpp_old.h	(revision 1092)
@@ -0,0 +1,316 @@
+/*************************************************************************
+ *                                                                       *
+ * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith.       *
+ * All rights reserved.  Email: russ@q12.org   Web: www.q12.org          *
+ *                                                                       *
+ * This library is free software; you can redistribute it and/or         *
+ * modify it under the terms of EITHER:                                  *
+ *   (1) The GNU Lesser General Public License as published by the Free  *
+ *       Software Foundation; either version 2.1 of the License, or (at  *
+ *       your option) any later version. The text of the GNU Lesser      *
+ *       General Public License is included with this library in the     *
+ *       file LICENSE.TXT.                                               *
+ *   (2) The BSD-style license that is included with this library in     *
+ *       the file LICENSE-BSD.TXT.                                       *
+ *                                                                       *
+ * This library is distributed in the hope that it will be useful,       *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files    *
+ * LICENSE.TXT and LICENSE-BSD.TXT for more details.                     *
+ *                                                                       *
+ *************************************************************************/
+
+/* this is the old C++ interface, the new C++ interface is not quite
+ * compatible with this. but this file is kept around in case you were
+ * using the old interface.
+ */
+
+#ifndef _ODE_ODECPP_H_
+#define _ODE_ODECPP_H_
+#ifdef __cplusplus
+
+#include <ode/error.h>
+
+
+class dWorld {
+  dWorldID _id;
+
+  dWorld (dWorld &) { dDebug (0,"bad"); }
+  void operator= (dWorld &) { dDebug (0,"bad"); }
+
+public:
+  dWorld()
+    { _id = dWorldCreate(); }
+  ~dWorld()
+    { dWorldDestroy (_id); }
+  dWorldID id()
+    { return _id; }
+
+  void setGravity (dReal x, dReal y, dReal z)
+    { dWorldSetGravity (_id,x,y,z); }
+  void getGravity (dVector3 g)
+    { dWorldGetGravity (_id,g); }
+  void step (dReal stepsize)
+    { dWorldStep (_id,stepsize); }
+};
+
+
+class dBody {
+  dBodyID _id;
+
+  dBody (dBody &) { dDebug (0,"bad"); }
+  void operator= (dBody &) { dDebug (0,"bad"); }
+
+public:
+  dBody()
+    { _id = 0; }
+  dBody (dWorld &world)
+    { _id = dBodyCreate (world.id()); }
+  ~dBody()
+    { dBodyDestroy (_id); }
+  void create (dWorld &world)
+    { if (_id) dBodyDestroy (_id); _id = dBodyCreate (world.id()); }
+  dBodyID id()
+    { return _id; }
+
+  void setData (void *data)
+    { dBodySetData (_id,data); }
+  void *getData()
+    { return dBodyGetData (_id); }
+
+  void setPosition (dReal x, dReal y, dReal z)
+    { dBodySetPosition (_id,x,y,z); }
+  void setRotation (const dMatrix3 R)
+    { dBodySetRotation (_id,R); }
+  void setQuaternion (const dQuaternion q)
+    { dBodySetQuaternion (_id,q); }
+  void setLinearVel  (dReal x, dReal y, dReal z)
+    { dBodySetLinearVel (_id,x,y,z); }
+  void setAngularVel (dReal x, dReal y, dReal z)
+    { dBodySetAngularVel (_id,x,y,z); }
+
+  const dReal * getPosition()
+    { return dBodyGetPosition (_id); }
+  const dReal * getRotation()
+    { return dBodyGetRotation (_id); }
+  const dReal * getQuaternion()
+    { return dBodyGetQuaternion (_id); }
+  const dReal * getLinearVel()
+    { return dBodyGetLinearVel (_id); }
+  const dReal * getAngularVel()
+    { return dBodyGetAngularVel (_id); }
+
+  void setMass (const dMass *mass)
+    { dBodySetMass (_id,mass); }
+  void getMass (dMass *mass)
+    { dBodyGetMass (_id,mass); }
+
+  void addForce (dReal fx, dReal fy, dReal fz)
+    { dBodyAddForce (_id, fx, fy, fz); }
+  void addTorque (dReal fx, dReal fy, dReal fz)
+    { dBodyAddTorque (_id, fx, fy, fz); }
+  void addRelForce (dReal fx, dReal fy, dReal fz)
+    { dBodyAddRelForce (_id, fx, fy, fz); }
+  void addRelTorque (dReal fx, dReal fy, dReal fz)
+    { dBodyAddRelTorque (_id, fx, fy, fz); }
+  void addForceAtPos (dReal fx, dReal fy, dReal fz,
+		      dReal px, dReal py, dReal pz)
+    { dBodyAddForceAtPos (_id, fx, fy, fz, px, py, pz); }
+  void addRelForceAtPos (dReal fx, dReal fy, dReal fz,
+			 dReal px, dReal py, dReal pz)
+    { dBodyAddRelForceAtPos (_id, fx, fy, fz, px, py, pz); }
+  void addRelForceAtRelPos (dReal fx, dReal fy, dReal fz,
+			    dReal px, dReal py, dReal pz)
+    { dBodyAddRelForceAtRelPos (_id, fx, fy, fz, px, py, pz); }
+
+  void getRelPointPos (dReal px, dReal py, dReal pz, dVector3 result)
+    { dBodyGetRelPointPos (_id, px, py, pz, result); }
+  void getRelPointVel (dReal px, dReal py, dReal pz, dVector3 result)
+    { dBodyGetRelPointVel (_id, px, py, pz, result); }
+
+  int isConnectedTo (const dBody &b)
+    { return dAreConnected (_id,b._id); }
+};
+
+
+class dJointGroup {
+  dJointGroupID _id;
+
+  dJointGroup (dJointGroup &) { dDebug (0,"bad"); }
+  void operator= (dJointGroup &) { dDebug (0,"bad"); }
+
+public:
+  dJointGroup()
+    { _id = 0; }
+  dJointGroup (int max_size)
+    { _id = dJointGroupCreate (max_size); }
+  ~dJointGroup()
+    { dJointGroupDestroy (_id); }
+  void create (int max_size)
+    { if (_id) dJointGroupDestroy (_id); _id = dJointGroupCreate (max_size); }
+  dJointGroupID id()
+    { return _id; }
+
+  void empty()
+    { dJointGroupEmpty (_id); }
+};
+
+
+class dJoint {
+  dJointID _id;
+
+  dJoint (dJoint &) { dDebug (0,"bad"); }
+  void operator= (dJoint &) { dDebug (0,"bad"); }
+
+public:
+  dJoint()
+    { _id = 0; }
+  ~dJoint()
+    { dJointDestroy (_id); }
+  dJointID id()
+    { return _id; }
+
+  void createBall (dWorld &world, dJointGroup *group=0) {
+    if (_id) dJointDestroy (_id);
+    _id = dJointCreateBall (world.id(), group ? group->id() : 0);
+  }
+  void createHinge (dWorld &world, dJointGroup *group=0) {
+    if (_id) dJointDestroy (_id);
+    _id = dJointCreateHinge (world.id(), group ? group->id() : 0);
+  }
+  void createSlider (dWorld &world, dJointGroup *group=0) {
+    if (_id) dJointDestroy (_id);
+    _id = dJointCreateSlider (world.id(), group ? group->id() : 0);
+  }
+  void createContact (dWorld &world, dJointGroup *group, dContact *contact) {
+    if (_id) dJointDestroy (_id);
+    _id = dJointCreateContact (world.id(), group ? group->id() : 0, contact);
+  }
+
+  void attach (dBody &body1, dBody &body2)
+    { dJointAttach (_id, body1.id(), body2.id()); }
+
+  void setBallAnchor (dReal x, dReal y, dReal z)
+    { dJointSetBallAnchor (_id, x, y, z); }
+  void setHingeAnchor (dReal x, dReal y, dReal z)
+    { dJointSetHingeAnchor (_id, x, y, z); }
+
+  void setHingeAxis (dReal x, dReal y, dReal z)
+    { dJointSetHingeAxis (_id, x, y, z); }
+  void setSliderAxis (dReal x, dReal y, dReal z)
+    { dJointSetSliderAxis (_id, x, y, z); }
+
+  void getBallAnchor (dVector3 result)
+    { dJointGetBallAnchor (_id, result); }
+  void getHingeAnchor (dVector3 result)
+    { dJointGetHingeAnchor (_id, result); }
+
+  void getHingeAxis (dVector3 result)
+    { dJointGetHingeAxis (_id, result); }
+  void getSliderAxis (dVector3 result)
+    { dJointGetSliderAxis (_id, result); }
+};
+
+
+class dSpace {
+  dSpaceID _id;
+
+  dSpace (dSpace &) { dDebug (0,"bad"); }
+  void operator= (dSpace &) { dDebug (0,"bad"); }
+
+public:
+  dSpace ()
+    { _id = dHashSpaceCreate(); }
+  ~dSpace()
+    { dSpaceDestroy (_id); }
+  dSpaceID id()
+    { return _id; }
+  void collide (void *data, dNearCallback *callback)
+    { dSpaceCollide (_id,data,callback); }
+};
+
+
+class dGeom {
+  dGeomID _id;
+
+  dGeom (dGeom &) { dDebug (0,"bad"); }
+  void operator= (dGeom &) { dDebug (0,"bad"); }
+
+public:
+  dGeom()
+    { _id = 0; }
+  ~dGeom()
+    { dGeomDestroy (_id); }
+  dGeomID id()
+    { return _id; }
+
+  void createSphere (dSpace &space, dReal radius) {
+    if (_id) dGeomDestroy (_id);
+    _id = dCreateSphere (space.id(),radius);
+  }
+
+  void createBox (dSpace &space, dReal lx, dReal ly, dReal lz) {
+    if (_id) dGeomDestroy (_id);
+    _id = dCreateBox (space.id(),lx,ly,lz);
+  }
+
+  void createPlane (dSpace &space, dReal a, dReal b, dReal c, dReal d) {
+    if (_id) dGeomDestroy (_id);
+    _id = dCreatePlane (space.id(),a,b,c,d);
+  }
+
+  void createCCylinder (dSpace &space, dReal radius, dReal length) {
+    if (_id) dGeomDestroy (_id);
+    _id = dCreateCCylinder (space.id(),radius,length);
+  }
+
+  void destroy() {
+    if (_id) dGeomDestroy (_id);
+    _id = 0;
+  }
+
+  int getClass()
+    { return dGeomGetClass (_id); }
+
+  dReal sphereGetRadius()
+    { return dGeomSphereGetRadius (_id); }
+
+  void boxGetLengths (dVector3 result)
+    { dGeomBoxGetLengths (_id,result); }
+
+  void planeGetParams (dVector4 result)
+    { dGeomPlaneGetParams (_id,result); }
+
+  void CCylinderGetParams (dReal *radius, dReal *length)
+    { dGeomCCylinderGetParams (_id,radius,length); }
+
+  void setData (void *data)
+    { dGeomSetData (_id,data); }
+
+  void *getData()
+    { return dGeomGetData (_id); }
+
+  void setBody (dBody &b)
+    { dGeomSetBody (_id,b.id()); }
+  void setBody (dBodyID b)
+    { dGeomSetBody (_id,b); }
+
+  dBodyID getBody()
+    { return dGeomGetBody (_id); }
+
+  void setPosition (dReal x, dReal y, dReal z)
+    { dGeomSetPosition (_id,x,y,z); }
+
+  void setRotation (const dMatrix3 R)
+    { dGeomSetRotation (_id,R); }
+
+  const dReal * getPosition()
+    { return dGeomGetPosition (_id); }
+
+  const dReal * getRotation()
+    { return dGeomGetRotation (_id); }
+};
+
+
+#endif
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/memory.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/memory.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/memory.h	(revision 1092)
@@ -0,0 +1,59 @@
+/*************************************************************************
+ *                                                                       *
+ * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith.       *
+ * All rights reserved.  Email: russ@q12.org   Web: www.q12.org          *
+ *                                                                       *
+ * This library is free software; you can redistribute it and/or         *
+ * modify it under the terms of EITHER:                                  *
+ *   (1) The GNU Lesser General Public License as published by the Free  *
+ *       Software Foundation; either version 2.1 of the License, or (at  *
+ *       your option) any later version. The text of the GNU Lesser      *
+ *       General Public License is included with this library in the     *
+ *       file LICENSE.TXT.                                               *
+ *   (2) The BSD-style license that is included with this library in     *
+ *       the file LICENSE-BSD.TXT.                                       *
+ *                                                                       *
+ * This library is distributed in the hope that it will be useful,       *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files    *
+ * LICENSE.TXT and LICENSE-BSD.TXT for more details.                     *
+ *                                                                       *
+ *************************************************************************/
+
+/* this comes from the `reuse' library. copy any changes back to the source */
+
+#ifndef _ODE_MEMORY_H_
+#define _ODE_MEMORY_H_
+
+#include "ode/config.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* function types to allocate and free memory */
+typedef void * dAllocFunction (size_t size);
+typedef void * dReallocFunction (void *ptr, size_t oldsize, size_t newsize);
+typedef void dFreeFunction (void *ptr, size_t size);
+
+/* set new memory management functions. if fn is 0, the default handlers are
+ * used. */
+void dSetAllocHandler (dAllocFunction *fn);
+void dSetReallocHandler (dReallocFunction *fn);
+void dSetFreeHandler (dFreeFunction *fn);
+
+/* get current memory management functions */
+dAllocFunction *dGetAllocHandler ();
+dReallocFunction *dGetReallocHandler ();
+dFreeFunction *dGetFreeHandler ();
+
+/* allocate and free memory. */
+void * dAlloc (size_t size);
+void * dRealloc (void *ptr, size_t oldsize, size_t newsize);
+void dFree (void *ptr, size_t size);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/compatibility.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/compatibility.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/compatibility.h	(revision 1092)
@@ -0,0 +1,40 @@
+/*************************************************************************
+ *                                                                       *
+ * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith.       *
+ * All rights reserved.  Email: russ@q12.org   Web: www.q12.org          *
+ *                                                                       *
+ * This library is free software; you can redistribute it and/or         *
+ * modify it under the terms of EITHER:                                  *
+ *   (1) The GNU Lesser General Public License as published by the Free  *
+ *       Software Foundation; either version 2.1 of the License, or (at  *
+ *       your option) any later version. The text of the GNU Lesser      *
+ *       General Public License is included with this library in the     *
+ *       file LICENSE.TXT.                                               *
+ *   (2) The BSD-style license that is included with this library in     *
+ *       the file LICENSE-BSD.TXT.                                       *
+ *                                                                       *
+ * This library is distributed in the hope that it will be useful,       *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files    *
+ * LICENSE.TXT and LICENSE-BSD.TXT for more details.                     *
+ *                                                                       *
+ *************************************************************************/
+
+#ifndef _ODE_COMPATIBILITY_H_
+#define _ODE_COMPATIBILITY_H_
+
+/*
+ * ODE's backward compatibility system ensures that as ODE's API
+ * evolves, user code will not break.
+ */
+
+/*
+ * These new rotation function names are more consistent with the
+ * rest of the API.
+ */
+#define dQtoR(q,R) dRfromQ((R),(q))
+#define dRtoQ(R,q) dQfromR((q),(R))
+#define dWtoDQ(w,q,dq) dDQfromW((dq),(w),(q))
+
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/odecpp.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/odecpp.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/odecpp.h	(revision 1092)
@@ -0,0 +1,621 @@
+/*************************************************************************
+ *									 *
+ * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith.	 *
+ * All rights reserved.  Email: russ@q12.org   Web: www.q12.org 	 *
+ *									 *
+ * This library is free software; you can redistribute it and/or	 *
+ * modify it under the terms of EITHER: 				 *
+ *   (1) The GNU Lesser General Public License as published by the Free  *
+ *	 Software Foundation; either version 2.1 of the License, or (at  *
+ *	 your option) any later version. The text of the GNU Lesser	 *
+ *	 General Public License is included with this library in the	 *
+ *	 file LICENSE.TXT.						 *
+ *   (2) The BSD-style license that is included with this library in	 *
+ *	 the file LICENSE-BSD.TXT.					 *
+ *									 *
+ * This library is distributed in the hope that it will be useful,	 *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of	 *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files	 *
+ * LICENSE.TXT and LICENSE-BSD.TXT for more details.			 *
+ *									 *
+ *************************************************************************/
+
+/* C++ interface for non-collision stuff */
+
+
+#ifndef _ODE_ODECPP_H_
+#define _ODE_ODECPP_H_
+#ifdef __cplusplus
+
+#include <ode/error.h>
+
+
+class dWorld {
+  dWorldID _id;
+
+  // intentionally undefined, don't use these
+  dWorld (const dWorld &);
+  void operator= (const dWorld &);
+
+public:
+  dWorld()
+    { _id = dWorldCreate(); }
+  ~dWorld()
+    { dWorldDestroy (_id); }
+
+  dWorldID id() const
+    { return _id; }
+  operator dWorldID() const
+    { return _id; }
+
+  void setGravity (dReal x, dReal y, dReal z)
+    { dWorldSetGravity (_id,x,y,z); }
+  void getGravity (dVector3 g) const
+    { dWorldGetGravity (_id,g); }
+
+  void setERP (dReal erp)
+    { dWorldSetERP(_id, erp); }
+  dReal getERP() const
+    { return dWorldGetERP(_id); }
+
+  void setCFM (dReal cfm)
+    { dWorldSetCFM(_id, cfm); }
+  dReal getCFM() const
+    { return dWorldGetCFM(_id); }
+
+  void step (dReal stepsize)
+    { dWorldStep (_id,stepsize); }
+
+  void stepFast1 (dReal stepsize, int maxiterations)
+    { dWorldStepFast1 (_id,stepsize,maxiterations); }
+  void setAutoEnableDepthSF1(dWorldID, int depth)
+    { dWorldSetAutoEnableDepthSF1 (_id, depth); }
+  int getAutoEnableDepthSF1(dWorldID)
+    { return dWorldGetAutoEnableDepthSF1 (_id); }
+
+  void  setAutoDisableLinearThreshold (dReal threshold) 
+    { dWorldSetAutoDisableLinearThreshold (_id,threshold); }
+  dReal getAutoDisableLinearThreshold()
+    { return dWorldGetAutoDisableLinearThreshold (_id); }
+  void setAutoDisableAngularThreshold (dReal threshold)
+    { dWorldSetAutoDisableAngularThreshold (_id,threshold); }
+  dReal getAutoDisableAngularThreshold()
+    { return dWorldGetAutoDisableAngularThreshold (_id); }
+  void setAutoDisableSteps (int steps)
+    { dWorldSetAutoDisableSteps (_id,steps); }
+  int getAutoDisableSteps()
+    { return dWorldGetAutoDisableSteps (_id); }
+  void setAutoDisableTime (dReal time)
+    { dWorldSetAutoDisableTime (_id,time); }
+  dReal getAutoDisableTime()
+    { return dWorldGetAutoDisableTime (_id); }
+  void setAutoDisableFlag (int do_auto_disable)
+    { dWorldSetAutoDisableFlag (_id,do_auto_disable); }
+  int getAutoDisableFlag()
+    { return dWorldGetAutoDisableFlag (_id); }
+
+  void impulseToForce (dReal stepsize, dReal ix, dReal iy, dReal iz,
+		       dVector3 force)
+    { dWorldImpulseToForce (_id,stepsize,ix,iy,iz,force); }
+};
+
+
+class dBody {
+  dBodyID _id;
+
+  // intentionally undefined, don't use these
+  dBody (const dBody &);
+  void operator= (const dBody &);
+
+public:
+  dBody()
+    { _id = 0; }
+  dBody (dWorldID world)
+    { _id = dBodyCreate (world); }
+  ~dBody()
+    { if (_id) dBodyDestroy (_id); }
+
+  void create (dWorldID world) {
+    if (_id) dBodyDestroy (_id);
+    _id = dBodyCreate (world);
+  }
+
+  dBodyID id() const
+    { return _id; }
+  operator dBodyID() const
+    { return _id; }
+
+  void setData (void *data)
+    { dBodySetData (_id,data); }
+  void *getData() const
+    { return dBodyGetData (_id); }
+
+  void setPosition (dReal x, dReal y, dReal z)
+    { dBodySetPosition (_id,x,y,z); }
+  void setRotation (const dMatrix3 R)
+    { dBodySetRotation (_id,R); }
+  void setQuaternion (const dQuaternion q)
+    { dBodySetQuaternion (_id,q); }
+  void setLinearVel  (dReal x, dReal y, dReal z)
+    { dBodySetLinearVel (_id,x,y,z); }
+  void setAngularVel (dReal x, dReal y, dReal z)
+    { dBodySetAngularVel (_id,x,y,z); }
+
+  const dReal * getPosition() const
+    { return dBodyGetPosition (_id); }
+  const dReal * getRotation() const
+    { return dBodyGetRotation (_id); }
+  const dReal * getQuaternion() const
+    { return dBodyGetQuaternion (_id); }
+  const dReal * getLinearVel() const
+    { return dBodyGetLinearVel (_id); }
+  const dReal * getAngularVel() const
+    { return dBodyGetAngularVel (_id); }
+
+  void setMass (const dMass *mass)
+    { dBodySetMass (_id,mass); }
+  void getMass (dMass *mass) const
+    { dBodyGetMass (_id,mass); }
+
+  void addForce (dReal fx, dReal fy, dReal fz)
+    { dBodyAddForce (_id, fx, fy, fz); }
+  void addTorque (dReal fx, dReal fy, dReal fz)
+    { dBodyAddTorque (_id, fx, fy, fz); }
+  void addRelForce (dReal fx, dReal fy, dReal fz)
+    { dBodyAddRelForce (_id, fx, fy, fz); }
+  void addRelTorque (dReal fx, dReal fy, dReal fz)
+    { dBodyAddRelTorque (_id, fx, fy, fz); }
+  void addForceAtPos (dReal fx, dReal fy, dReal fz,
+		      dReal px, dReal py, dReal pz)
+    { dBodyAddForceAtPos (_id, fx, fy, fz, px, py, pz); }
+  void addForceAtRelPos (dReal fx, dReal fy, dReal fz,
+		      dReal px, dReal py, dReal pz)
+    { dBodyAddForceAtRelPos (_id, fx, fy, fz, px, py, pz); }
+  void addRelForceAtPos (dReal fx, dReal fy, dReal fz,
+			 dReal px, dReal py, dReal pz)
+    { dBodyAddRelForceAtPos (_id, fx, fy, fz, px, py, pz); }
+  void addRelForceAtRelPos (dReal fx, dReal fy, dReal fz,
+			    dReal px, dReal py, dReal pz)
+    { dBodyAddRelForceAtRelPos (_id, fx, fy, fz, px, py, pz); }
+
+  const dReal * getForce() const
+    { return dBodyGetForce(_id); }
+  const dReal * getTorque() const
+    { return dBodyGetTorque(_id); }
+  void setForce (dReal x, dReal y, dReal z)
+    { dBodySetForce (_id,x,y,z); }
+  void setTorque (dReal x, dReal y, dReal z)
+    { dBodySetTorque (_id,x,y,z); }
+
+  void enable()
+    { dBodyEnable (_id); }
+  void disable()
+    { dBodyDisable (_id); }
+  int isEnabled() const
+    { return dBodyIsEnabled (_id); }
+
+  void getRelPointPos (dReal px, dReal py, dReal pz, dVector3 result) const
+    { dBodyGetRelPointPos (_id, px, py, pz, result); }
+  void getRelPointVel (dReal px, dReal py, dReal pz, dVector3 result) const
+    { dBodyGetRelPointVel (_id, px, py, pz, result); }
+  void getPointVel (dReal px, dReal py, dReal pz, dVector3 result) const
+    { dBodyGetPointVel (_id,px,py,pz,result); }
+  void getPosRelPoint (dReal px, dReal py, dReal pz, dVector3 result) const
+    { dBodyGetPosRelPoint (_id,px,py,pz,result); }
+  void vectorToWorld (dReal px, dReal py, dReal pz, dVector3 result) const
+    { dBodyVectorToWorld (_id,px,py,pz,result); }
+  void vectorFromWorld (dReal px, dReal py, dReal pz, dVector3 result) const
+    { dBodyVectorFromWorld (_id,px,py,pz,result); }
+
+  void setFiniteRotationMode (int mode)
+    { dBodySetFiniteRotationMode (_id, mode); }
+  void setFiniteRotationAxis (dReal x, dReal y, dReal z)
+    { dBodySetFiniteRotationAxis (_id, x, y, z); }
+
+  int getFiniteRotationMode() const
+    { return dBodyGetFiniteRotationMode (_id); }
+  void getFiniteRotationAxis (dVector3 result) const
+    { dBodyGetFiniteRotationAxis (_id, result); }
+
+  int getNumJoints() const
+    { return dBodyGetNumJoints (_id); }
+  dJointID getJoint (int index) const
+    { return dBodyGetJoint (_id, index); }
+
+  void setGravityMode (int mode)
+    { dBodySetGravityMode (_id,mode); }
+  int getGravityMode() const
+    { return dBodyGetGravityMode (_id); }
+
+  int isConnectedTo (dBodyID body) const
+    { return dAreConnected (_id, body); }
+
+  void  setAutoDisableLinearThreshold (dReal threshold) 
+    { dBodySetAutoDisableLinearThreshold (_id,threshold); }
+  dReal getAutoDisableLinearThreshold()
+    { return dBodyGetAutoDisableLinearThreshold (_id); }
+  void setAutoDisableAngularThreshold (dReal threshold)
+    { dBodySetAutoDisableAngularThreshold (_id,threshold); }
+  dReal getAutoDisableAngularThreshold()
+    { return dBodyGetAutoDisableAngularThreshold (_id); }
+  void setAutoDisableSteps (int steps)
+    { dBodySetAutoDisableSteps (_id,steps); }
+  int getAutoDisableSteps()
+    { return dBodyGetAutoDisableSteps (_id); }
+  void setAutoDisableTime (dReal time)
+    { dBodySetAutoDisableTime (_id,time); }
+  dReal getAutoDisableTime()
+    { return dBodyGetAutoDisableTime (_id); }
+  void setAutoDisableFlag (int do_auto_disable)
+    { dBodySetAutoDisableFlag (_id,do_auto_disable); }
+  int getAutoDisableFlag()
+    { return dBodyGetAutoDisableFlag (_id); }
+};
+
+
+class dJointGroup {
+  dJointGroupID _id;
+
+  // intentionally undefined, don't use these
+  dJointGroup (const dJointGroup &);
+  void operator= (const dJointGroup &);
+
+public:
+  dJointGroup (int dummy_arg=0)
+    { _id = dJointGroupCreate (0); }
+  ~dJointGroup()
+    { dJointGroupDestroy (_id); }
+  void create (int dummy_arg=0) {
+    if (_id) dJointGroupDestroy (_id);
+    _id = dJointGroupCreate (0);
+  }
+
+  dJointGroupID id() const
+    { return _id; }
+  operator dJointGroupID() const
+    { return _id; }
+
+  void empty()
+    { dJointGroupEmpty (_id); }
+};
+
+
+class dJoint {
+private:
+  // intentionally undefined, don't use these
+  dJoint (const dJoint &) ;
+  void operator= (const dJoint &);
+
+protected:
+  dJointID _id;
+
+public:
+  dJoint()
+    { _id = 0; }
+  ~dJoint()
+    { if (_id) dJointDestroy (_id); }
+
+  dJointID id() const
+    { return _id; }
+  operator dJointID() const
+    { return _id; }
+
+  void attach (dBodyID body1, dBodyID body2)
+    { dJointAttach (_id, body1, body2); }
+
+  void setData (void *data)
+    { dJointSetData (_id, data); }
+  void *getData() const
+    { return dJointGetData (_id); }
+
+  int getType() const
+    { return dJointGetType (_id); }
+
+  dBodyID getBody (int index) const
+    { return dJointGetBody (_id, index); }
+};
+
+
+class dBallJoint : public dJoint {
+private:
+  // intentionally undefined, don't use these
+  dBallJoint (const dBallJoint &);
+  void operator= (const dBallJoint &);
+
+public:
+  dBallJoint() { }
+  dBallJoint (dWorldID world, dJointGroupID group=0)
+    { _id = dJointCreateBall (world, group); }
+
+  void create (dWorldID world, dJointGroupID group=0) {
+    if (_id) dJointDestroy (_id);
+    _id = dJointCreateBall (world, group);
+  }
+
+  void setAnchor (dReal x, dReal y, dReal z)
+    { dJointSetBallAnchor (_id, x, y, z); }
+  void getAnchor (dVector3 result) const
+    { dJointGetBallAnchor (_id, result); }
+  void getAnchor2 (dVector3 result) const
+    { dJointGetBallAnchor2 (_id, result); }
+} ;
+
+
+class dHingeJoint : public dJoint {
+  // intentionally undefined, don't use these
+  dHingeJoint (const dHingeJoint &);
+  void operator = (const dHingeJoint &);
+
+public:
+  dHingeJoint() { }
+  dHingeJoint (dWorldID world, dJointGroupID group=0)
+    { _id = dJointCreateHinge (world, group); }
+
+  void create (dWorldID world, dJointGroupID group=0) {
+    if (_id) dJointDestroy (_id);
+    _id = dJointCreateHinge (world, group);
+  }
+
+  void setAnchor (dReal x, dReal y, dReal z)
+    { dJointSetHingeAnchor (_id, x, y, z); }
+  void getAnchor (dVector3 result) const
+    { dJointGetHingeAnchor (_id, result); }
+  void getAnchor2 (dVector3 result) const
+    { dJointGetHingeAnchor2 (_id, result); }
+
+  void setAxis (dReal x, dReal y, dReal z)
+    { dJointSetHingeAxis (_id, x, y, z); }
+  void getAxis (dVector3 result) const
+    { dJointGetHingeAxis (_id, result); }
+
+  dReal getAngle() const
+    { return dJointGetHingeAngle (_id); }
+  dReal getAngleRate() const
+    { return dJointGetHingeAngleRate (_id); }
+
+  void setParam (int parameter, dReal value)
+    { dJointSetHingeParam (_id, parameter, value); }
+  dReal getParam (int parameter) const
+    { return dJointGetHingeParam (_id, parameter); }
+
+  void addTorque (dReal torque)
+	{ dJointAddHingeTorque(_id, torque); }
+};
+
+
+class dSliderJoint : public dJoint {
+  // intentionally undefined, don't use these
+  dSliderJoint (const dSliderJoint &);
+  void operator = (const dSliderJoint &);
+
+public:
+  dSliderJoint() { }
+  dSliderJoint (dWorldID world, dJointGroupID group=0)
+    { _id = dJointCreateSlider (world, group); }
+
+  void create (dWorldID world, dJointGroupID group=0) {
+    if (_id) dJointDestroy (_id);
+    _id = dJointCreateSlider (world, group);
+  }
+
+  void setAxis (dReal x, dReal y, dReal z)
+    { dJointSetSliderAxis (_id, x, y, z); }
+  void getAxis (dVector3 result) const
+    { dJointGetSliderAxis (_id, result); }
+
+  dReal getPosition() const
+    { return dJointGetSliderPosition (_id); }
+  dReal getPositionRate() const
+    { return dJointGetSliderPositionRate (_id); }
+
+  void setParam (int parameter, dReal value)
+    { dJointSetSliderParam (_id, parameter, value); }
+  dReal getParam (int parameter) const
+    { return dJointGetSliderParam (_id, parameter); }
+
+  void addForce (dReal force)
+	{ dJointAddSliderForce(_id, force); }
+};
+
+
+class dUniversalJoint : public dJoint {
+  // intentionally undefined, don't use these
+  dUniversalJoint (const dUniversalJoint &);
+  void operator = (const dUniversalJoint &);
+
+public:
+  dUniversalJoint() { }
+  dUniversalJoint (dWorldID world, dJointGroupID group=0)
+    { _id = dJointCreateUniversal (world, group); }
+
+  void create (dWorldID world, dJointGroupID group=0) {
+    if (_id) dJointDestroy (_id);
+    _id = dJointCreateUniversal (world, group);
+  }
+
+  void setAnchor (dReal x, dReal y, dReal z)
+    { dJointSetUniversalAnchor (_id, x, y, z); }
+  void setAxis1 (dReal x, dReal y, dReal z)
+    { dJointSetUniversalAxis1 (_id, x, y, z); }
+  void setAxis2 (dReal x, dReal y, dReal z)
+    { dJointSetUniversalAxis2 (_id, x, y, z); }
+  void setParam (int parameter, dReal value)
+    { dJointSetUniversalParam (_id, parameter, value); }
+
+  void getAnchor (dVector3 result) const
+    { dJointGetUniversalAnchor (_id, result); }
+  void getAnchor2 (dVector3 result) const
+    { dJointGetUniversalAnchor2 (_id, result); }
+  void getAxis1 (dVector3 result) const
+    { dJointGetUniversalAxis1 (_id, result); }
+  void getAxis2 (dVector3 result) const
+    { dJointGetUniversalAxis2 (_id, result); }
+  dReal getParam (int parameter) const
+    { return dJointGetUniversalParam (_id, parameter); }
+  dReal getAngle1() const
+    { return dJointGetUniversalAngle1 (_id); }
+  dReal getAngle1Rate() const
+    { return dJointGetUniversalAngle1Rate (_id); }
+  dReal getAngle2() const
+    { return dJointGetUniversalAngle2 (_id); }
+  dReal getAngle2Rate() const
+    { return dJointGetUniversalAngle2Rate (_id); }
+
+  void addTorques (dReal torque1, dReal torque2)
+	{ dJointAddUniversalTorques(_id, torque1, torque2); }
+};
+
+
+class dHinge2Joint : public dJoint {
+  // intentionally undefined, don't use these
+  dHinge2Joint (const dHinge2Joint &);
+  void operator = (const dHinge2Joint &);
+
+public:
+  dHinge2Joint() { }
+  dHinge2Joint (dWorldID world, dJointGroupID group=0)
+    { _id = dJointCreateHinge2 (world, group); }
+
+  void create (dWorldID world, dJointGroupID group=0) {
+    if (_id) dJointDestroy (_id);
+    _id = dJointCreateHinge2 (world, group);
+  }
+
+  void setAnchor (dReal x, dReal y, dReal z)
+    { dJointSetHinge2Anchor (_id, x, y, z); }
+  void setAxis1 (dReal x, dReal y, dReal z)
+    { dJointSetHinge2Axis1 (_id, x, y, z); }
+  void setAxis2 (dReal x, dReal y, dReal z)
+    { dJointSetHinge2Axis2 (_id, x, y, z); }
+
+  void getAnchor (dVector3 result) const
+    { dJointGetHinge2Anchor (_id, result); }
+  void getAnchor2 (dVector3 result) const
+    { dJointGetHinge2Anchor2 (_id, result); }
+  void getAxis1 (dVector3 result) const
+    { dJointGetHinge2Axis1 (_id, result); }
+  void getAxis2 (dVector3 result) const
+    { dJointGetHinge2Axis2 (_id, result); }
+
+  dReal getAngle1() const
+    { return dJointGetHinge2Angle1 (_id); }
+  dReal getAngle1Rate() const
+    { return dJointGetHinge2Angle1Rate (_id); }
+  dReal getAngle2Rate() const
+    { return dJointGetHinge2Angle2Rate (_id); }
+
+  void setParam (int parameter, dReal value)
+    { dJointSetHinge2Param (_id, parameter, value); }
+  dReal getParam (int parameter) const
+    { return dJointGetHinge2Param (_id, parameter); }
+
+  void addTorques(dReal torque1, dReal torque2)
+	{ dJointAddHinge2Torques(_id, torque1, torque2); }
+};
+
+
+class dFixedJoint : public dJoint {
+  // intentionally undefined, don't use these
+  dFixedJoint (const dFixedJoint &);
+  void operator = (const dFixedJoint &);
+
+public:
+  dFixedJoint() { }
+  dFixedJoint (dWorldID world, dJointGroupID group=0)
+    { _id = dJointCreateFixed (world, group); }
+
+  void create (dWorldID world, dJointGroupID group=0) {
+    if (_id) dJointDestroy (_id);
+    _id = dJointCreateFixed (world, group);
+  }
+
+  void set()
+    { dJointSetFixed (_id); }
+};
+
+
+class dContactJoint : public dJoint {
+  // intentionally undefined, don't use these
+  dContactJoint (const dContactJoint &);
+  void operator = (const dContactJoint &);
+
+public:
+  dContactJoint() { }
+  dContactJoint (dWorldID world, dJointGroupID group, dContact *contact)
+    { _id = dJointCreateContact (world, group, contact); }
+
+  void create (dWorldID world, dJointGroupID group, dContact *contact) {
+    if (_id) dJointDestroy (_id);
+    _id = dJointCreateContact (world, group, contact);
+  }
+};
+
+
+class dNullJoint : public dJoint {
+  // intentionally undefined, don't use these
+  dNullJoint (const dNullJoint &);
+  void operator = (const dNullJoint &);
+
+public:
+  dNullJoint() { }
+  dNullJoint (dWorldID world, dJointGroupID group=0)
+    { _id = dJointCreateNull (world, group); }
+
+  void create (dWorldID world, dJointGroupID group=0) {
+    if (_id) dJointDestroy (_id);
+    _id = dJointCreateNull (world, group);
+  }
+};
+
+
+class dAMotorJoint : public dJoint {
+  // intentionally undefined, don't use these
+  dAMotorJoint (const dAMotorJoint &);
+  void operator = (const dAMotorJoint &);
+
+public:
+  dAMotorJoint() { }
+  dAMotorJoint (dWorldID world, dJointGroupID group=0)
+    { _id = dJointCreateAMotor (world, group); }
+
+  void create (dWorldID world, dJointGroupID group=0) {
+    if (_id) dJointDestroy (_id);
+    _id = dJointCreateAMotor (world, group);
+  }
+
+  void setMode (int mode)
+    { dJointSetAMotorMode (_id, mode); }
+  int getMode() const
+    { return dJointGetAMotorMode (_id); }
+
+  void setNumAxes (int num)
+    { dJointSetAMotorNumAxes (_id, num); }
+  int getNumAxes() const
+    { return dJointGetAMotorNumAxes (_id); }
+
+  void setAxis (int anum, int rel, dReal x, dReal y, dReal z)
+    { dJointSetAMotorAxis (_id, anum, rel, x, y, z); }
+  void getAxis (int anum, dVector3 result) const
+    { dJointGetAMotorAxis (_id, anum, result); }
+  int getAxisRel (int anum) const
+    { return dJointGetAMotorAxisRel (_id, anum); }
+
+  void setAngle (int anum, dReal angle)
+    { dJointSetAMotorAngle (_id, anum, angle); }
+  dReal getAngle (int anum) const
+    { return dJointGetAMotorAngle (_id, anum); }
+  dReal getAngleRate (int anum)
+    { return dJointGetAMotorAngleRate (_id,anum); }
+
+  void setParam (int parameter, dReal value)
+    { dJointSetAMotorParam (_id, parameter, value); }
+  dReal getParam (int parameter) const
+    { return dJointGetAMotorParam (_id, parameter); }
+
+  void addTorques(dReal torque1, dReal torque2, dReal torque3)
+	{ dJointAddAMotorTorques(_id, torque1, torque2, torque3); }
+};
+
+
+#endif
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/timer.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/timer.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/timer.h	(revision 1092)
@@ -0,0 +1,76 @@
+/*************************************************************************
+ *                                                                       *
+ * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith.       *
+ * All rights reserved.  Email: russ@q12.org   Web: www.q12.org          *
+ *                                                                       *
+ * This library is free software; you can redistribute it and/or         *
+ * modify it under the terms of EITHER:                                  *
+ *   (1) The GNU Lesser General Public License as published by the Free  *
+ *       Software Foundation; either version 2.1 of the License, or (at  *
+ *       your option) any later version. The text of the GNU Lesser      *
+ *       General Public License is included with this library in the     *
+ *       file LICENSE.TXT.                                               *
+ *   (2) The BSD-style license that is included with this library in     *
+ *       the file LICENSE-BSD.TXT.                                       *
+ *                                                                       *
+ * This library is distributed in the hope that it will be useful,       *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files    *
+ * LICENSE.TXT and LICENSE-BSD.TXT for more details.                     *
+ *                                                                       *
+ *************************************************************************/
+
+#ifndef _ODE_TIMER_H_
+#define _ODE_TIMER_H_
+
+#include <ode/config.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* stop watch objects */
+
+typedef struct dStopwatch {
+  double time;			/* total clock count */
+  unsigned long cc[2];		/* clock count since last `start' */
+} dStopwatch;
+
+void dStopwatchReset (dStopwatch *);
+void dStopwatchStart (dStopwatch *);
+void dStopwatchStop  (dStopwatch *);
+double dStopwatchTime (dStopwatch *);	/* returns total time in secs */
+
+
+/* code timers */
+
+void dTimerStart (const char *description);	/* pass a static string here */
+void dTimerNow (const char *description);	/* pass a static string here */
+void dTimerEnd();
+
+/* print out a timer report. if `average' is nonzero, print out the average
+ * time for each slot (this is only meaningful if the same start-now-end
+ * calls are being made repeatedly.
+ */
+void dTimerReport (FILE *fout, int average);
+
+
+/* resolution */
+
+/* returns the timer ticks per second implied by the timing hardware or API.
+ * the actual timer resolution may not be this great.
+ */
+double dTimerTicksPerSecond();
+
+/* returns an estimate of the actual timer resolution, in seconds. this may
+ * be greater than 1/ticks_per_second.
+ */
+double dTimerResolution();
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/export-dif.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/export-dif.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/export-dif.h	(revision 1092)
@@ -0,0 +1,32 @@
+/*************************************************************************
+ *                                                                       *
+ * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith.       *
+ * All rights reserved.  Email: russ@q12.org   Web: www.q12.org          *
+ *                                                                       *
+ * This library is free software; you can redistribute it and/or         *
+ * modify it under the terms of EITHER:                                  *
+ *   (1) The GNU Lesser General Public License as published by the Free  *
+ *       Software Foundation; either version 2.1 of the License, or (at  *
+ *       your option) any later version. The text of the GNU Lesser      *
+ *       General Public License is included with this library in the     *
+ *       file LICENSE.TXT.                                               *
+ *   (2) The BSD-style license that is included with this library in     *
+ *       the file LICENSE-BSD.TXT.                                       *
+ *                                                                       *
+ * This library is distributed in the hope that it will be useful,       *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files    *
+ * LICENSE.TXT and LICENSE-BSD.TXT for more details.                     *
+ *                                                                       *
+ *************************************************************************/
+
+#ifndef _ODE_EXPORT_DIF_
+#define _ODE_EXPORT_DIF_
+
+#include <ode/common.h>
+
+
+void dWorldExportDIF (dWorldID w, FILE *file, const char *world_name);
+
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/odemath.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/odemath.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/odemath.h	(revision 1092)
@@ -0,0 +1,262 @@
+/*************************************************************************
+ *                                                                       *
+ * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith.       *
+ * All rights reserved.  Email: russ@q12.org   Web: www.q12.org          *
+ *                                                                       *
+ * This library is free software; you can redistribute it and/or         *
+ * modify it under the terms of EITHER:                                  *
+ *   (1) The GNU Lesser General Public License as published by the Free  *
+ *       Software Foundation; either version 2.1 of the License, or (at  *
+ *       your option) any later version. The text of the GNU Lesser      *
+ *       General Public License is included with this library in the     *
+ *       file LICENSE.TXT.                                               *
+ *   (2) The BSD-style license that is included with this library in     *
+ *       the file LICENSE-BSD.TXT.                                       *
+ *                                                                       *
+ * This library is distributed in the hope that it will be useful,       *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files    *
+ * LICENSE.TXT and LICENSE-BSD.TXT for more details.                     *
+ *                                                                       *
+ *************************************************************************/
+
+#ifndef _ODE_ODEMATH_H_
+#define _ODE_ODEMATH_H_
+
+#include <ode/common.h>
+
+#ifdef __GNUC__
+#define PURE_INLINE extern inline
+#else
+#define PURE_INLINE inline
+#endif
+
+/*
+ * macro to access elements i,j in an NxM matrix A, independent of the
+ * matrix storage convention.
+ */
+#define dACCESS33(A,i,j) ((A)[(i)*4+(j)])
+
+
+/*
+ * 3-way dot product. dDOTpq means that elements of `a' and `b' are spaced
+ * p and q indexes apart respectively. dDOT() means dDOT11.
+ * in C++ we could use function templates to get all the versions of these
+ * functions - but on some compilers this will result in sub-optimal code.
+ */
+
+#define dDOTpq(a,b,p,q) ((a)[0]*(b)[0] + (a)[p]*(b)[q] + (a)[2*(p)]*(b)[2*(q)])
+
+#ifdef __cplusplus
+
+PURE_INLINE dReal dDOT   (const dReal *a, const dReal *b) { return dDOTpq(a,b,1,1); }
+PURE_INLINE dReal dDOT13 (const dReal *a, const dReal *b) { return dDOTpq(a,b,1,3); }
+PURE_INLINE dReal dDOT31 (const dReal *a, const dReal *b) { return dDOTpq(a,b,3,1); }
+PURE_INLINE dReal dDOT33 (const dReal *a, const dReal *b) { return dDOTpq(a,b,3,3); }
+PURE_INLINE dReal dDOT14 (const dReal *a, const dReal *b) { return dDOTpq(a,b,1,4); }
+PURE_INLINE dReal dDOT41 (const dReal *a, const dReal *b) { return dDOTpq(a,b,4,1); }
+PURE_INLINE dReal dDOT44 (const dReal *a, const dReal *b) { return dDOTpq(a,b,4,4); }
+
+#else
+
+#define dDOT(a,b)   dDOTpq(a,b,1,1)
+#define dDOT13(a,b) dDOTpq(a,b,1,3)
+#define dDOT31(a,b) dDOTpq(a,b,3,1)
+#define dDOT33(a,b) dDOTpq(a,b,3,3)
+#define dDOT14(a,b) dDOTpq(a,b,1,4)
+#define dDOT41(a,b) dDOTpq(a,b,4,1)
+#define dDOT44(a,b) dDOTpq(a,b,4,4)
+
+#endif /* __cplusplus */
+
+
+/*
+ * cross product, set a = b x c. dCROSSpqr means that elements of `a', `b'
+ * and `c' are spaced p, q and r indexes apart respectively.
+ * dCROSS() means dCROSS111. `op' is normally `=', but you can set it to
+ * +=, -= etc to get other effects.
+ */
+
+#define dCROSS(a,op,b,c) \
+  (a)[0] op ((b)[1]*(c)[2] - (b)[2]*(c)[1]); \
+  (a)[1] op ((b)[2]*(c)[0] - (b)[0]*(c)[2]); \
+  (a)[2] op ((b)[0]*(c)[1] - (b)[1]*(c)[0]);
+#define dCROSSpqr(a,op,b,c,p,q,r) \
+  (a)[  0] op ((b)[  q]*(c)[2*r] - (b)[2*q]*(c)[  r]); \
+  (a)[  p] op ((b)[2*q]*(c)[  0] - (b)[  0]*(c)[2*r]); \
+  (a)[2*p] op ((b)[  0]*(c)[  r] - (b)[  q]*(c)[  0]);
+#define dCROSS114(a,op,b,c) dCROSSpqr(a,op,b,c,1,1,4)
+#define dCROSS141(a,op,b,c) dCROSSpqr(a,op,b,c,1,4,1)
+#define dCROSS144(a,op,b,c) dCROSSpqr(a,op,b,c,1,4,4)
+#define dCROSS411(a,op,b,c) dCROSSpqr(a,op,b,c,4,1,1)
+#define dCROSS414(a,op,b,c) dCROSSpqr(a,op,b,c,4,1,4)
+#define dCROSS441(a,op,b,c) dCROSSpqr(a,op,b,c,4,4,1)
+#define dCROSS444(a,op,b,c) dCROSSpqr(a,op,b,c,4,4,4)
+
+
+/*
+ * set a 3x3 submatrix of A to a matrix such that submatrix(A)*b = a x b.
+ * A is stored by rows, and has `skip' elements per row. the matrix is
+ * assumed to be already zero, so this does not write zero elements!
+ * if (plus,minus) is (+,-) then a positive version will be written.
+ * if (plus,minus) is (-,+) then a negative version will be written.
+ */
+
+#define dCROSSMAT(A,a,skip,plus,minus) \
+  (A)[1] = minus (a)[2]; \
+  (A)[2] = plus (a)[1]; \
+  (A)[(skip)+0] = plus (a)[2]; \
+  (A)[(skip)+2] = minus (a)[0]; \
+  (A)[2*(skip)+0] = minus (a)[1]; \
+  (A)[2*(skip)+1] = plus (a)[0];
+
+
+/*
+ * compute the distance between two 3-vectors
+ */
+
+#ifdef __cplusplus
+PURE_INLINE float dDISTANCE (const float a[3], const float b[3])
+	{ return (float) dSqrt( (a[0]-b[0])*(a[0]-b[0]) + (a[1]-b[1])*(a[1]-b[1]) + (a[2]-b[2])*(a[2]-b[2]) ); }
+PURE_INLINE double dDISTANCE (const double a[3], const double b[3])
+	{ return dSqrt( (a[0]-b[0])*(a[0]-b[0]) + (a[1]-b[1])*(a[1]-b[1]) + (a[2]-b[2])*(a[2]-b[2]) ); }
+#else
+#define dDISTANCE(a,b) \
+	(dSqrt( ((a)[0]-(b)[0])*((a)[0]-(b)[0]) + ((a)[1]-(b)[1])*((a)[1]-(b)[1]) + ((a)[2]-(b)[2])*((a)[2]-(b)[2]) ))
+#endif
+
+
+/*
+ * special case matrix multipication, with operator selection
+ */
+
+#define dMULTIPLYOP0_331(A,op,B,C) \
+  (A)[0] op dDOT((B),(C)); \
+  (A)[1] op dDOT((B+4),(C)); \
+  (A)[2] op dDOT((B+8),(C));
+#define dMULTIPLYOP1_331(A,op,B,C) \
+  (A)[0] op dDOT41((B),(C)); \
+  (A)[1] op dDOT41((B+1),(C)); \
+  (A)[2] op dDOT41((B+2),(C));
+#define dMULTIPLYOP0_133(A,op,B,C) \
+  (A)[0] op dDOT14((B),(C)); \
+  (A)[1] op dDOT14((B),(C+1)); \
+  (A)[2] op dDOT14((B),(C+2));
+#define dMULTIPLYOP0_333(A,op,B,C) \
+  (A)[0] op dDOT14((B),(C)); \
+  (A)[1] op dDOT14((B),(C+1)); \
+  (A)[2] op dDOT14((B),(C+2)); \
+  (A)[4] op dDOT14((B+4),(C)); \
+  (A)[5] op dDOT14((B+4),(C+1)); \
+  (A)[6] op dDOT14((B+4),(C+2)); \
+  (A)[8] op dDOT14((B+8),(C)); \
+  (A)[9] op dDOT14((B+8),(C+1)); \
+  (A)[10] op dDOT14((B+8),(C+2));
+#define dMULTIPLYOP1_333(A,op,B,C) \
+  (A)[0] op dDOT44((B),(C)); \
+  (A)[1] op dDOT44((B),(C+1)); \
+  (A)[2] op dDOT44((B),(C+2)); \
+  (A)[4] op dDOT44((B+1),(C)); \
+  (A)[5] op dDOT44((B+1),(C+1)); \
+  (A)[6] op dDOT44((B+1),(C+2)); \
+  (A)[8] op dDOT44((B+2),(C)); \
+  (A)[9] op dDOT44((B+2),(C+1)); \
+  (A)[10] op dDOT44((B+2),(C+2));
+#define dMULTIPLYOP2_333(A,op,B,C) \
+  (A)[0] op dDOT((B),(C)); \
+  (A)[1] op dDOT((B),(C+4)); \
+  (A)[2] op dDOT((B),(C+8)); \
+  (A)[4] op dDOT((B+4),(C)); \
+  (A)[5] op dDOT((B+4),(C+4)); \
+  (A)[6] op dDOT((B+4),(C+8)); \
+  (A)[8] op dDOT((B+8),(C)); \
+  (A)[9] op dDOT((B+8),(C+4)); \
+  (A)[10] op dDOT((B+8),(C+8));
+
+#ifdef __cplusplus
+
+#define DECL template <class TA, class TB, class TC> PURE_INLINE void
+
+DECL dMULTIPLY0_331(TA *A, const TB *B, const TC *C) { dMULTIPLYOP0_331(A,=,B,C) }
+DECL dMULTIPLY1_331(TA *A, const TB *B, const TC *C) { dMULTIPLYOP1_331(A,=,B,C) }
+DECL dMULTIPLY0_133(TA *A, const TB *B, const TC *C) { dMULTIPLYOP0_133(A,=,B,C) }
+DECL dMULTIPLY0_333(TA *A, const TB *B, const TC *C) { dMULTIPLYOP0_333(A,=,B,C) }
+DECL dMULTIPLY1_333(TA *A, const TB *B, const TC *C) { dMULTIPLYOP1_333(A,=,B,C) }
+DECL dMULTIPLY2_333(TA *A, const TB *B, const TC *C) { dMULTIPLYOP2_333(A,=,B,C) }
+
+DECL dMULTIPLYADD0_331(TA *A, const TB *B, const TC *C) { dMULTIPLYOP0_331(A,+=,B,C) }
+DECL dMULTIPLYADD1_331(TA *A, const TB *B, const TC *C) { dMULTIPLYOP1_331(A,+=,B,C) }
+DECL dMULTIPLYADD0_133(TA *A, const TB *B, const TC *C) { dMULTIPLYOP0_133(A,+=,B,C) }
+DECL dMULTIPLYADD0_333(TA *A, const TB *B, const TC *C) { dMULTIPLYOP0_333(A,+=,B,C) }
+DECL dMULTIPLYADD1_333(TA *A, const TB *B, const TC *C) { dMULTIPLYOP1_333(A,+=,B,C) }
+DECL dMULTIPLYADD2_333(TA *A, const TB *B, const TC *C) { dMULTIPLYOP2_333(A,+=,B,C) }
+
+#undef DECL
+
+#else
+
+#define dMULTIPLY0_331(A,B,C) dMULTIPLYOP0_331(A,=,B,C)
+#define dMULTIPLY1_331(A,B,C) dMULTIPLYOP1_331(A,=,B,C)
+#define dMULTIPLY0_133(A,B,C) dMULTIPLYOP0_133(A,=,B,C)
+#define dMULTIPLY0_333(A,B,C) dMULTIPLYOP0_333(A,=,B,C)
+#define dMULTIPLY1_333(A,B,C) dMULTIPLYOP1_333(A,=,B,C)
+#define dMULTIPLY2_333(A,B,C) dMULTIPLYOP2_333(A,=,B,C)
+
+#define dMULTIPLYADD0_331(A,B,C) dMULTIPLYOP0_331(A,+=,B,C)
+#define dMULTIPLYADD1_331(A,B,C) dMULTIPLYOP1_331(A,+=,B,C)
+#define dMULTIPLYADD0_133(A,B,C) dMULTIPLYOP0_133(A,+=,B,C)
+#define dMULTIPLYADD0_333(A,B,C) dMULTIPLYOP0_333(A,+=,B,C)
+#define dMULTIPLYADD1_333(A,B,C) dMULTIPLYOP1_333(A,+=,B,C)
+#define dMULTIPLYADD2_333(A,B,C) dMULTIPLYOP2_333(A,+=,B,C)
+
+#endif
+
+// Terrain callback mod (start)
+#define dOP(a,op,b,c) \
+ (a)[0] = ((b)[0]) op ((c)[0]); \
+ (a)[1] = ((b)[1]) op ((c)[1]); \
+ (a)[2] = ((b)[2]) op ((c)[2]);
+#define dOPC(a,op,b,c) \
+ (a)[0] = ((b)[0]) op (c); \
+ (a)[1] = ((b)[1]) op (c); \
+ (a)[2] = ((b)[2]) op (c);
+#define dOPE(a,op,b) \
+ (a)[0] op ((b)[0]); \
+ (a)[1] op ((b)[1]); \
+ (a)[2] op ((b)[2]);
+#define dOPEC(a,op,c) \
+ (a)[0] op (c); \
+ (a)[1] op (c); \
+ (a)[2] op (c);
+#define dLENGTH(a) \
+ (dSqrt( ((a)[0])*((a)[0]) + ((a)[1])*((a)[1]) + ((a)[2])*((a)[2]) ));
+#define dLENGTHSQUARED(a) \
+ (((a)[0])*((a)[0]) + ((a)[1])*((a)[1]) + ((a)[2])*((a)[2]));
+// Terrain callback mod (end)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * normalize 3x1 and 4x1 vectors (i.e. scale them to unit length)
+ */
+void dNormalize3 (dVector3 a);
+void dNormalize4 (dVector4 a);
+
+
+/*
+ * given a unit length "normal" vector n, generate vectors p and q vectors
+ * that are an orthonormal basis for the plane space perpendicular to n.
+ * i.e. this makes p,q such that n,p,q are all perpendicular to each other.
+ * q will equal n x p. if n is not unit length then p will be unit length but
+ * q wont be.
+ */
+
+void dPlaneSpace (const dVector3 n, dVector3 p, dVector3 q);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/odecpp_collision.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/odecpp_collision.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/odecpp_collision.h	(revision 1092)
@@ -0,0 +1,346 @@
+/*************************************************************************
+ *									 *
+ * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith.	 *
+ * All rights reserved.  Email: russ@q12.org   Web: www.q12.org 	 *
+ *									 *
+ * This library is free software; you can redistribute it and/or	 *
+ * modify it under the terms of EITHER: 				 *
+ *   (1) The GNU Lesser General Public License as published by the Free  *
+ *	 Software Foundation; either version 2.1 of the License, or (at  *
+ *	 your option) any later version. The text of the GNU Lesser	 *
+ *	 General Public License is included with this library in the	 *
+ *	 file LICENSE.TXT.						 *
+ *   (2) The BSD-style license that is included with this library in	 *
+ *	 the file LICENSE-BSD.TXT.					 *
+ *									 *
+ * This library is distributed in the hope that it will be useful,	 *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of	 *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files	 *
+ * LICENSE.TXT and LICENSE-BSD.TXT for more details.			 *
+ *									 *
+ *************************************************************************/
+
+/* C++ interface for new collision API */
+
+
+#ifndef _ODE_ODECPP_COLLISION_H_
+#define _ODE_ODECPP_COLLISION_H_
+#ifdef __cplusplus
+
+#include <ode/error.h>
+
+
+class dGeom {
+  // intentionally undefined, don't use these
+  dGeom (dGeom &);
+  void operator= (dGeom &);
+
+protected:
+  dGeomID _id;
+
+public:
+  dGeom()
+    { _id = 0; }
+  ~dGeom()
+    { if (_id) dGeomDestroy (_id); }
+
+  dGeomID id() const
+    { return _id; }
+  operator dGeomID() const
+    { return _id; }
+
+  void destroy() {
+    if (_id) dGeomDestroy (_id);
+    _id = 0;
+  }
+
+  int getClass() const
+    { return dGeomGetClass (_id); }
+
+  dSpaceID getSpace() const
+    { return dGeomGetSpace (_id); }
+
+  void setData (void *data)
+    { dGeomSetData (_id,data); }
+  void *getData() const
+    { return dGeomGetData (_id); }
+
+  void setBody (dBodyID b)
+    { dGeomSetBody (_id,b); }
+  dBodyID getBody() const
+    { return dGeomGetBody (_id); }
+
+  void setPosition (dReal x, dReal y, dReal z)
+    { dGeomSetPosition (_id,x,y,z); }
+  const dReal * getPosition() const
+    { return dGeomGetPosition (_id); }
+
+  void setRotation (const dMatrix3 R)
+    { dGeomSetRotation (_id,R); }
+  const dReal * getRotation() const
+    { return dGeomGetRotation (_id); }
+    
+  void setQuaternion (const dQuaternion quat)
+    { dGeomSetQuaternion (_id,quat); }
+  void getQuaternion (dQuaternion quat) const
+    { dGeomGetQuaternion (_id,quat); }
+
+  void getAABB (dReal aabb[6]) const
+    { dGeomGetAABB (_id, aabb); }
+
+  int isSpace()
+    { return dGeomIsSpace (_id); }
+
+  void setCategoryBits (unsigned long bits)
+    { dGeomSetCategoryBits (_id, bits); }
+  void setCollideBits (unsigned long bits)
+    { dGeomSetCollideBits (_id, bits); }
+  unsigned long getCategoryBits()
+    { return dGeomGetCategoryBits (_id); }
+  unsigned long getCollideBits()
+    { return dGeomGetCollideBits (_id); }
+
+  void enable()
+    { dGeomEnable (_id); }
+  void disable()
+    { dGeomDisable (_id); }
+  int isEnabled()
+    { return dGeomIsEnabled (_id); }
+
+  void collide2 (dGeomID g, void *data, dNearCallback *callback)
+    { dSpaceCollide2 (_id,g,data,callback); }
+};
+
+
+class dSpace : public dGeom {
+  // intentionally undefined, don't use these
+  dSpace (dSpace &);
+  void operator= (dSpace &);
+
+protected:
+  // the default constructor is protected so that you
+  // can't instance this class. you must instance one
+  // of its subclasses instead.
+  dSpace () { _id = 0; }
+
+public:
+  dSpaceID id() const
+    { return (dSpaceID) _id; }
+  operator dSpaceID() const
+    { return (dSpaceID) _id; }
+
+  void setCleanup (int mode)
+    { dSpaceSetCleanup (id(), mode); }
+  int getCleanup()
+    { return dSpaceGetCleanup (id()); }
+
+  void add (dGeomID x)
+    { dSpaceAdd (id(), x); }
+  void remove (dGeomID x)
+    { dSpaceRemove (id(), x); }
+  int query (dGeomID x)
+    { return dSpaceQuery (id(),x); }
+
+  int getNumGeoms()
+    { return dSpaceGetNumGeoms (id()); }
+  dGeomID getGeom (int i)
+    { return dSpaceGetGeom (id(),i); }
+
+  void collide (void *data, dNearCallback *callback)
+    { dSpaceCollide (id(),data,callback); }
+};
+
+
+class dSimpleSpace : public dSpace {
+  // intentionally undefined, don't use these
+  dSimpleSpace (dSimpleSpace &);
+  void operator= (dSimpleSpace &);
+
+public:
+  dSimpleSpace (dSpaceID space)
+    { _id = (dGeomID) dSimpleSpaceCreate (space); }
+};
+
+
+class dHashSpace : public dSpace {
+  // intentionally undefined, don't use these
+  dHashSpace (dHashSpace &);
+  void operator= (dHashSpace &);
+
+public:
+  dHashSpace (dSpaceID space)
+    { _id = (dGeomID) dHashSpaceCreate (space); }
+  void setLevels (int minlevel, int maxlevel)
+    { dHashSpaceSetLevels (id(),minlevel,maxlevel); }
+};
+
+
+class dQuadTreeSpace : public dSpace {
+  // intentionally undefined, don't use these
+  dQuadTreeSpace (dQuadTreeSpace &);
+  void operator= (dQuadTreeSpace &);
+
+public:
+  dQuadTreeSpace (dSpaceID space, dVector3 center, dVector3 extents, int depth)
+    { _id = (dGeomID) dQuadTreeSpaceCreate (space,center,extents,depth); }
+};
+
+
+class dSphere : public dGeom {
+  // intentionally undefined, don't use these
+  dSphere (dSphere &);
+  void operator= (dSphere &);
+
+public:
+  dSphere () { }
+  dSphere (dSpaceID space, dReal radius)
+    { _id = dCreateSphere (space, radius); }
+
+  void create (dSpaceID space, dReal radius) {
+    if (_id) dGeomDestroy (_id);
+    _id = dCreateSphere (space, radius);
+  }
+
+  void setRadius (dReal radius)
+    { dGeomSphereSetRadius (_id, radius); }
+  dReal getRadius() const
+    { return dGeomSphereGetRadius (_id); }
+};
+
+
+class dBox : public dGeom {
+  // intentionally undefined, don't use these
+  dBox (dBox &);
+  void operator= (dBox &);
+
+public:
+  dBox () { }
+  dBox (dSpaceID space, dReal lx, dReal ly, dReal lz)
+    { _id = dCreateBox (space,lx,ly,lz); }
+
+  void create (dSpaceID space, dReal lx, dReal ly, dReal lz) {
+    if (_id) dGeomDestroy (_id);
+    _id = dCreateBox (space,lx,ly,lz);
+  }
+
+  void setLengths (dReal lx, dReal ly, dReal lz)
+    { dGeomBoxSetLengths (_id, lx, ly, lz); }
+  void getLengths (dVector3 result) const
+    { dGeomBoxGetLengths (_id,result); }
+};
+
+
+class dPlane : public dGeom {
+  // intentionally undefined, don't use these
+  dPlane (dPlane &);
+  void operator= (dPlane &);
+
+public:
+  dPlane() { }
+  dPlane (dSpaceID space, dReal a, dReal b, dReal c, dReal d)
+    { _id = dCreatePlane (space,a,b,c,d); }
+
+  void create (dSpaceID space, dReal a, dReal b, dReal c, dReal d) {
+    if (_id) dGeomDestroy (_id);
+    _id = dCreatePlane (space,a,b,c,d);
+  }
+
+  void setParams (dReal a, dReal b, dReal c, dReal d)
+    { dGeomPlaneSetParams (_id, a, b, c, d); }
+  void getParams (dVector4 result) const
+    { dGeomPlaneGetParams (_id,result); }
+};
+
+
+class dCCylinder : public dGeom {
+  // intentionally undefined, don't use these
+  dCCylinder (dCCylinder &);
+  void operator= (dCCylinder &);
+
+public:
+  dCCylinder() { }
+  dCCylinder (dSpaceID space, dReal radius, dReal length)
+    { _id = dCreateCCylinder (space,radius,length); }
+
+  void create (dSpaceID space, dReal radius, dReal length) {
+    if (_id) dGeomDestroy (_id);
+    _id = dCreateCCylinder (space,radius,length);
+  }
+
+  void setParams (dReal radius, dReal length)
+    { dGeomCCylinderSetParams (_id, radius, length); }
+  void getParams (dReal *radius, dReal *length) const
+    { dGeomCCylinderGetParams (_id,radius,length); }
+};
+
+
+class dRay : public dGeom {
+  // intentionally undefined, don't use these
+  dRay (dRay &);
+  void operator= (dRay &);
+
+public:
+  dRay() { }
+  dRay (dSpaceID space, dReal length)
+    { _id = dCreateRay (space,length); }
+
+  void create (dSpaceID space, dReal length) {
+    if (_id) dGeomDestroy (_id);
+    _id = dCreateRay (space,length);
+  }
+
+  void setLength (dReal length)
+    { dGeomRaySetLength (_id, length); }
+  dReal getLength()
+    { return dGeomRayGetLength (_id); }
+
+  void set (dReal px, dReal py, dReal pz, dReal dx, dReal dy, dReal dz)
+    { dGeomRaySet (_id, px, py, pz, dx, dy, dz); }
+  void get (dVector3 start, dVector3 dir)
+    { dGeomRayGet (_id, start, dir); }
+
+  void setParams (int firstContact, int backfaceCull)
+    { dGeomRaySetParams (_id, firstContact, backfaceCull); }
+  void getParams (int *firstContact, int *backfaceCull)
+    { dGeomRayGetParams (_id, firstContact, backfaceCull); }
+  void setClosestHit (int closestHit)
+    { dGeomRaySetClosestHit (_id, closestHit); }
+  int getClosestHit()
+    { return dGeomRayGetClosestHit (_id); }
+};
+
+
+class dGeomTransform : public dGeom {
+  // intentionally undefined, don't use these
+  dGeomTransform (dGeomTransform &);
+  void operator= (dGeomTransform &);
+
+public:
+  dGeomTransform() { }
+  dGeomTransform (dSpaceID space)
+    { _id = dCreateGeomTransform (space); }
+
+  void create (dSpaceID space=0) {
+    if (_id) dGeomDestroy (_id);
+    _id = dCreateGeomTransform (space);
+  }
+
+  void setGeom (dGeomID geom)
+    { dGeomTransformSetGeom (_id, geom); }
+  dGeomID getGeom() const
+    { return dGeomTransformGetGeom (_id); }
+
+  void setCleanup (int mode)
+    { dGeomTransformSetCleanup (_id,mode); }
+  int getCleanup ()
+    { return dGeomTransformGetCleanup (_id); }
+
+  void setInfo (int mode)
+    { dGeomTransformSetInfo (_id,mode); }
+  int getInfo()
+    { return dGeomTransformGetInfo (_id); }
+};
+
+
+#endif
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/collision_trimesh.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/collision_trimesh.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/collision_trimesh.h	(revision 1092)
@@ -0,0 +1,181 @@
+/*************************************************************************
+ *                                                                       *
+ * Open Dynamics Engine, Copyright (C) 2001-2003 Russell L. Smith.       *
+ * All rights reserved.  Email: russ@q12.org   Web: www.q12.org          *
+ *                                                                       *
+ * This library is free software; you can redistribute it and/or         *
+ * modify it under the terms of EITHER:                                  *
+ *   (1) The GNU Lesser General Public License as published by the Free  *
+ *       Software Foundation; either version 2.1 of the License, or (at  *
+ *       your option) any later version. The text of the GNU Lesser      *
+ *       General Public License is included with this library in the     *
+ *       file LICENSE.TXT.                                               *
+ *   (2) The BSD-style license that is included with this library in     *
+ *       the file LICENSE-BSD.TXT.                                       *
+ *                                                                       *
+ * This library is distributed in the hope that it will be useful,       *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files    *
+ * LICENSE.TXT and LICENSE-BSD.TXT for more details.                     *
+ *                                                                       *
+ *************************************************************************/
+
+/*
+ * TriMesh code by Erwin de Vries.
+ *
+ * Trimesh data.
+ * This is where the actual vertexdata (pointers), and BV tree is stored.
+ * Vertices should be single precision!
+ * This should be more sophisticated, so that the user can easyly implement
+ * another collision library, but this is a lot of work, and also costs some
+ * performance because some data has to be copied.
+ */
+
+#ifndef _ODE_COLLISION_TRIMESH_H_
+#define _ODE_COLLISION_TRIMESH_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Data storage for triangle meshes.
+ */
+struct dxTriMeshData;
+typedef struct dxTriMeshData* dTriMeshDataID;
+
+/*
+ * These dont make much sense now, but they will later when we add more
+ * features.
+ */
+dTriMeshDataID dGeomTriMeshDataCreate();
+void dGeomTriMeshDataDestroy(dTriMeshDataID g);
+
+enum { TRIMESH_FACE_NORMALS, TRIMESH_LAST_TRANSFORMATION };
+void dGeomTriMeshDataSet(dTriMeshDataID g, int data_id, void* data);
+
+
+/*
+ * Build TriMesh data with single pricision used in vertex data .
+ */
+void dGeomTriMeshDataBuildSingle(dTriMeshDataID g,
+                                 const void* Vertices, int VertexStride, int VertexCount, 
+                                 const void* Indices, int IndexCount, int TriStride);
+/* same again with a normals array (used as trimesh-trimesh optimization) */
+void dGeomTriMeshDataBuildSingle1(dTriMeshDataID g,
+                                  const void* Vertices, int VertexStride, int VertexCount, 
+                                  const void* Indices, int IndexCount, int TriStride,
+                                  const void* Normals);
+/*
+* Build TriMesh data with double pricision used in vertex data .
+*/
+void dGeomTriMeshDataBuildDouble(dTriMeshDataID g, 
+                                 const void* Vertices,  int VertexStride, int VertexCount, 
+                                 const void* Indices, int IndexCount, int TriStride);
+/* same again with a normals array (used as trimesh-trimesh optimization) */
+void dGeomTriMeshDataBuildDouble1(dTriMeshDataID g, 
+                                  const void* Vertices,  int VertexStride, int VertexCount, 
+                                  const void* Indices, int IndexCount, int TriStride,
+                                  const void* Normals);
+
+/*
+ * Simple build. Single/double precision based on dSINGLE/dDOUBLE!
+ */
+void dGeomTriMeshDataBuildSimple(dTriMeshDataID g,
+                                 const dReal* Vertices, int VertexCount,
+                                 const int* Indices, int IndexCount);
+/* same again with a normals array (used as trimesh-trimesh optimization) */
+void dGeomTriMeshDataBuildSimple1(dTriMeshDataID g,
+                                  const dReal* Vertices, int VertexCount,
+                                  const int* Indices, int IndexCount,
+                                  const int* Normals);
+/*
+ * Per triangle callback. Allows the user to say if he wants a collision with
+ * a particular triangle.
+ */
+typedef int dTriCallback(dGeomID TriMesh, dGeomID RefObject, int TriangleIndex);
+void dGeomTriMeshSetCallback(dGeomID g, dTriCallback* Callback);
+dTriCallback* dGeomTriMeshGetCallback(dGeomID g);
+
+/*
+ * Per object callback. Allows the user to get the list of triangles in 1
+ * shot. Maybe we should remove this one.
+ */
+typedef void dTriArrayCallback(dGeomID TriMesh, dGeomID RefObject, const int* TriIndices, int TriCount);
+void dGeomTriMeshSetArrayCallback(dGeomID g, dTriArrayCallback* ArrayCallback);
+dTriArrayCallback* dGeomTriMeshGetArrayCallback(dGeomID g);
+
+/*
+ * Ray callback.
+ * Allows the user to say if a ray collides with a triangle on barycentric
+ * coords. The user can for example sample a texture with alpha transparency
+ * to determine if a collision should occur.
+ */
+typedef int dTriRayCallback(dGeomID TriMesh, dGeomID Ray, int TriangleIndex, dReal u, dReal v);
+void dGeomTriMeshSetRayCallback(dGeomID g, dTriRayCallback* Callback);
+dTriRayCallback* dGeomTriMeshGetRayCallback(dGeomID g);
+
+/*
+ * Trimesh class
+ * Construction. Callbacks are optional.
+ */
+dGeomID dCreateTriMesh(dSpaceID space, dTriMeshDataID Data, dTriCallback* Callback, dTriArrayCallback* ArrayCallback, dTriRayCallback* RayCallback);
+
+void dGeomTriMeshSetData(dGeomID g, dTriMeshDataID Data);
+
+// enable/disable/check temporal coherence
+void dGeomTriMeshEnableTC(dGeomID g, int geomClass, int enable);
+int dGeomTriMeshIsTCEnabled(dGeomID g, int geomClass);
+
+/*
+ * Clears the internal temporal coherence caches. When a geom has its
+ * collision checked with a trimesh once, data is stored inside the trimesh.
+ * With large worlds with lots of seperate objects this list could get huge.
+ * We should be able to do this automagically.
+ */
+void dGeomTriMeshClearTCCache(dGeomID g);
+
+
+/*
+ * returns the TriMeshDataID
+ */
+dTriMeshDataID dGeomTriMeshGetTriMeshDataID(dGeomID g);
+
+/*
+ * Gets a triangle.
+ */
+void dGeomTriMeshGetTriangle(dGeomID g, int Index, dVector3* v0, dVector3* v1, dVector3* v2);
+
+/*
+ * Gets the point on the requested triangle and the given barycentric
+ * coordinates.
+ */
+void dGeomTriMeshGetPoint(dGeomID g, int Index, dReal u, dReal v, dVector3 Out);
+
+/*
+
+This is how the strided data works:
+
+struct StridedVertex{
+	dVector3 Vertex;
+	// Userdata
+};
+int VertexStride = sizeof(StridedVertex);
+
+struct StridedTri{
+	int Indices[3];
+	// Userdata
+};
+int TriStride = sizeof(StridedTri);
+
+*/
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _ODE_COLLISION_TRIMESH_H_ */
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/common.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/common.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/ode/common.h	(revision 1092)
@@ -0,0 +1,323 @@
+/*************************************************************************
+ *                                                                       *
+ * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith.       *
+ * All rights reserved.  Email: russ@q12.org   Web: www.q12.org          *
+ *                                                                       *
+ * This library is free software; you can redistribute it and/or         *
+ * modify it under the terms of EITHER:                                  *
+ *   (1) The GNU Lesser General Public License as published by the Free  *
+ *       Software Foundation; either version 2.1 of the License, or (at  *
+ *       your option) any later version. The text of the GNU Lesser      *
+ *       General Public License is included with this library in the     *
+ *       file LICENSE.TXT.                                               *
+ *   (2) The BSD-style license that is included with this library in     *
+ *       the file LICENSE-BSD.TXT.                                       *
+ *                                                                       *
+ * This library is distributed in the hope that it will be useful,       *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files    *
+ * LICENSE.TXT and LICENSE-BSD.TXT for more details.                     *
+ *                                                                       *
+ *************************************************************************/
+
+#ifndef _ODE_COMMON_H_
+#define _ODE_COMMON_H_
+
+#include <ode/config.h>
+#include <ode/error.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* configuration stuff */
+
+/* the efficient alignment. most platforms align data structures to some
+ * number of bytes, but this is not always the most efficient alignment.
+ * for example, many x86 compilers align to 4 bytes, but on a pentium it
+ * is important to align doubles to 8 byte boundaries (for speed), and
+ * the 4 floats in a SIMD register to 16 byte boundaries. many other
+ * platforms have similar behavior. setting a larger alignment can waste
+ * a (very) small amount of memory. NOTE: this number must be a power of
+ * two. this is set to 16 by default.
+ */
+#define EFFICIENT_ALIGNMENT 16
+
+
+/* constants */
+
+/* pi and 1/sqrt(2) are defined here if necessary because they don't get
+ * defined in <math.h> on some platforms (like MS-Windows)
+ */
+
+#ifndef M_PI
+#define M_PI REAL(3.1415926535897932384626433832795029)
+#endif
+#ifndef M_SQRT1_2
+#define M_SQRT1_2 REAL(0.7071067811865475244008443621048490)
+#endif
+
+
+/* debugging:
+ *   IASSERT  is an internal assertion, i.e. a consistency check. if it fails
+ *            we want to know where.
+ *   UASSERT  is a user assertion, i.e. if it fails a nice error message
+ *            should be printed for the user.
+ *   AASSERT  is an arguments assertion, i.e. if it fails "bad argument(s)"
+ *            is printed.
+ *   DEBUGMSG just prints out a message
+ */
+
+#ifndef dNODEBUG
+#ifdef __GNUC__
+#define dIASSERT(a) if (!(a)) dDebug (d_ERR_IASSERT, \
+  "assertion \"" #a "\" failed in %s() [%s]",__FUNCTION__,__FILE__);
+#define dUASSERT(a,msg) if (!(a)) dDebug (d_ERR_UASSERT, \
+  msg " in %s()", __FUNCTION__);
+#define dDEBUGMSG(msg) dMessage (d_ERR_UASSERT, \
+  msg " in %s()", __FUNCTION__);
+#else
+#define dIASSERT(a) if (!(a)) dDebug (d_ERR_IASSERT, \
+  "assertion \"" #a "\" failed in %s:%d",__FILE__,__LINE__);
+#define dUASSERT(a,msg) if (!(a)) dDebug (d_ERR_UASSERT, \
+  msg " (%s:%d)", __FILE__,__LINE__);
+#define dDEBUGMSG(msg) dMessage (d_ERR_UASSERT, \
+  msg " (%s:%d)", __FILE__,__LINE__);
+#endif
+#else
+#define dIASSERT(a) ;
+#define dUASSERT(a,msg) ;
+#define dDEBUGMSG(msg) ;
+#endif
+#define dAASSERT(a) dUASSERT(a,"Bad argument(s)")
+
+/* floating point data type, vector, matrix and quaternion types */
+
+#if defined(dSINGLE)
+typedef float dReal;
+#elif defined(dDOUBLE)
+typedef double dReal;
+#else
+#error You must #define dSINGLE or dDOUBLE
+#endif
+
+
+/* round an integer up to a multiple of 4, except that 0 and 1 are unmodified
+ * (used to compute matrix leading dimensions)
+ */
+#define dPAD(a) (((a) > 1) ? ((((a)-1)|3)+1) : (a))
+
+/* these types are mainly just used in headers */
+typedef dReal dVector3[4];
+typedef dReal dVector4[4];
+typedef dReal dMatrix3[4*3];
+typedef dReal dMatrix4[4*4];
+typedef dReal dMatrix6[8*6];
+typedef dReal dQuaternion[4];
+
+
+/* precision dependent scalar math functions */
+
+#if defined(dSINGLE)
+
+#define REAL(x) (x ## f)					/* form a constant */
+#define dRecip(x) ((float)(1.0f/(x)))				/* reciprocal */
+#define dSqrt(x) ((float)sqrtf(float(x)))			/* square root */
+#define dRecipSqrt(x) ((float)(1.0f/sqrtf(float(x))))		/* reciprocal square root */
+#define dSin(x) ((float)sinf(float(x)))				/* sine */
+#define dCos(x) ((float)cosf(float(x)))				/* cosine */
+#define dFabs(x) ((float)fabsf(float(x)))			/* absolute value */
+#define dAtan2(y,x) ((float)atan2f(float(y),float(x)))		/* arc tangent with 2 args */
+#define dFMod(a,b) ((float)fmodf(float(a),float(b)))		/* modulo */
+#define dCopySign(a,b) ((float)copysignf(float(a),float(b)))
+
+#elif defined(dDOUBLE)
+
+#define REAL(x) (x)
+#define dRecip(x) (1.0/(x))
+#define dSqrt(x) sqrt(x)
+#define dRecipSqrt(x) (1.0/sqrt(x))
+#define dSin(x) sin(x)
+#define dCos(x) cos(x)
+#define dFabs(x) fabs(x)
+#define dAtan2(y,x) atan2((y),(x))
+#define dFMod(a,b) (fmod((a),(b)))
+#define dCopySign(a,b) (copysign((a),(b)))
+
+#else
+#error You must #define dSINGLE or dDOUBLE
+#endif
+
+
+/* utility */
+
+
+/* round something up to be a multiple of the EFFICIENT_ALIGNMENT */
+
+#define dEFFICIENT_SIZE(x) ((((x)-1)|(EFFICIENT_ALIGNMENT-1))+1)
+
+
+/* alloca aligned to the EFFICIENT_ALIGNMENT. note that this can waste
+ * up to 15 bytes per allocation, depending on what alloca() returns.
+ */
+
+#define dALLOCA16(n) \
+  ((char*)dEFFICIENT_SIZE(((size_t)(alloca((n)+(EFFICIENT_ALIGNMENT-1))))))
+
+
+/* internal object types (all prefixed with `dx') */
+
+struct dxWorld;		/* dynamics world */
+struct dxSpace;		/* collision space */
+struct dxBody;		/* rigid body (dynamics object) */
+struct dxGeom;		/* geometry (collision object) */
+struct dxJoint;
+struct dxJointNode;
+struct dxJointGroup;
+
+typedef struct dxWorld *dWorldID;
+typedef struct dxSpace *dSpaceID;
+typedef struct dxBody *dBodyID;
+typedef struct dxGeom *dGeomID;
+typedef struct dxJoint *dJointID;
+typedef struct dxJointGroup *dJointGroupID;
+
+
+/* error numbers */
+
+enum {
+  d_ERR_UNKNOWN = 0,		/* unknown error */
+  d_ERR_IASSERT,		/* internal assertion failed */
+  d_ERR_UASSERT,		/* user assertion failed */
+  d_ERR_LCP			/* user assertion failed */
+};
+
+
+/* joint type numbers */
+
+enum {
+  dJointTypeNone = 0,		/* or "unknown" */
+  dJointTypeBall,
+  dJointTypeHinge,
+  dJointTypeSlider,
+  dJointTypeContact,
+  dJointTypeUniversal,
+  dJointTypeHinge2,
+  dJointTypeFixed,
+  dJointTypeNull,
+  dJointTypeAMotor,
+  // Plane2D change
+  dJointTypePlane2D
+};
+
+
+/* an alternative way of setting joint parameters, using joint parameter
+ * structures and member constants. we don't actually do this yet.
+ */
+
+/*
+typedef struct dLimot {
+  int mode;
+  dReal lostop, histop;
+  dReal vel, fmax;
+  dReal fudge_factor;
+  dReal bounce, soft;
+  dReal suspension_erp, suspension_cfm;
+} dLimot;
+
+enum {
+  dLimotLoStop		= 0x0001,
+  dLimotHiStop		= 0x0002,
+  dLimotVel		= 0x0004,
+  dLimotFMax		= 0x0008,
+  dLimotFudgeFactor	= 0x0010,
+  dLimotBounce		= 0x0020,
+  dLimotSoft		= 0x0040
+};
+*/
+
+
+/* standard joint parameter names. why are these here? - because we don't want
+ * to include all the joint function definitions in joint.cpp. hmmmm.
+ * MSVC complains if we call D_ALL_PARAM_NAMES_X with a blank second argument,
+ * which is why we have the D_ALL_PARAM_NAMES macro as well. please copy and
+ * paste between these two.
+ */
+
+#define D_ALL_PARAM_NAMES(start) \
+  /* parameters for limits and motors */ \
+  dParamLoStop = start, \
+  dParamHiStop, \
+  dParamVel, \
+  dParamFMax, \
+  dParamFudgeFactor, \
+  dParamBounce, \
+  dParamCFM, \
+  dParamStopERP, \
+  dParamStopCFM, \
+  /* parameters for suspension */ \
+  dParamSuspensionERP, \
+  dParamSuspensionCFM,
+
+#define D_ALL_PARAM_NAMES_X(start,x) \
+  /* parameters for limits and motors */ \
+  dParamLoStop ## x = start, \
+  dParamHiStop ## x, \
+  dParamVel ## x, \
+  dParamFMax ## x, \
+  dParamFudgeFactor ## x, \
+  dParamBounce ## x, \
+  dParamCFM ## x, \
+  dParamStopERP ## x, \
+  dParamStopCFM ## x, \
+  /* parameters for suspension */ \
+  dParamSuspensionERP ## x, \
+  dParamSuspensionCFM ## x,
+
+enum {
+  D_ALL_PARAM_NAMES(0)
+  D_ALL_PARAM_NAMES_X(0x100,2)
+  D_ALL_PARAM_NAMES_X(0x200,3)
+
+  /* add a multiple of this constant to the basic parameter numbers to get
+   * the parameters for the second, third etc axes.
+   */
+  dParamGroup=0x100
+};
+
+
+/* angular motor mode numbers */
+
+enum{
+  dAMotorUser = 0,
+  dAMotorEuler = 1
+};
+
+
+/* joint force feedback information */
+
+typedef struct dJointFeedback {
+  dVector3 f1;		/* force applied to body 1 */
+  dVector3 t1;		/* torque applied to body 1 */
+  dVector3 f2;		/* force applied to body 2 */
+  dVector3 t2;		/* torque applied to body 2 */
+} dJointFeedback;
+
+
+/* private functions that must be implemented by the collision library:
+ * (1) indicate that a geom has moved, (2) get the next geom in a body list.
+ * these functions are called whenever the position of geoms connected to a
+ * body have changed, e.g. with dBodySetPosition(), dBodySetRotation(), or
+ * when the ODE step function updates the body state.
+ */
+
+void dGeomMoved (dGeomID);
+dGeomID dGeomGetBodyNext (dGeomID);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreAutoParamDataSource.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreAutoParamDataSource.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreAutoParamDataSource.h	(revision 1092)
@@ -0,0 +1,169 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://ogre.sourceforge.net/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __AutoParamDataSource_H_
+#define __AutoParamDataSource_H_
+
+#include "OgrePrerequisites.h"
+#include "OgreCommon.h"
+#include "OgreMatrix4.h"
+#include "OgreVector4.h"
+#include "OgreLight.h"
+#include "OgreColourValue.h"
+
+namespace Ogre {
+
+
+    /** This utility class is used to hold the information used to generate the matrices
+    and other information required to automatically populate GpuProgramParameters.
+    @remarks
+        This class exercises a lazy-update scheme in order to avoid having to update all
+        the information a GpuProgramParameters class could possibly want all the time. 
+        It relies on the SceneManager to update it when the base data has changed, and
+        will calculate concatenated matrices etc only when required, passing back precalculated
+        matrices when they are requested more than once when the underlying information has
+        not altered.
+    */
+    class _OgreExport AutoParamDataSource
+    {
+    protected:
+        mutable Matrix4 mWorldMatrix[256];
+        mutable size_t mWorldMatrixCount;
+        mutable Matrix4 mWorldViewMatrix;
+        mutable Matrix4 mViewProjMatrix;
+        mutable Matrix4 mWorldViewProjMatrix;
+        mutable Matrix4 mInverseWorldMatrix;
+        mutable Matrix4 mInverseWorldViewMatrix;
+        mutable Matrix4 mInverseViewMatrix;
+        mutable Matrix4 mInverseTransposeWorldMatrix;
+        mutable Matrix4 mInverseTransposeWorldViewMatrix;
+        mutable Vector4 mCameraPositionObjectSpace;
+        mutable Matrix4 mTextureViewProjMatrix;
+        mutable Matrix4 mProjectionMatrix;
+		mutable Real mDirLightExtrusionDistance;
+        mutable Vector4 mCameraPosition;
+		
+        mutable bool mWorldMatrixDirty;
+        mutable bool mWorldViewMatrixDirty;
+        mutable bool mViewProjMatrixDirty;
+        mutable bool mWorldViewProjMatrixDirty;
+        mutable bool mInverseWorldMatrixDirty;
+        mutable bool mInverseWorldViewMatrixDirty;
+        mutable bool mInverseViewMatrixDirty;
+        mutable bool mInverseTransposeWorldMatrixDirty;
+        mutable bool mInverseTransposeWorldViewMatrixDirty;
+        mutable bool mCameraPositionObjectSpaceDirty;
+        mutable bool mCameraPositionDirty;
+        mutable bool mTextureViewProjMatrixDirty;
+		mutable ColourValue mAmbientLight;
+
+        const Renderable* mCurrentRenderable;
+        const Camera* mCurrentCamera;
+        const LightList* mCurrentLightList;
+        const Frustum* mCurrentTextureProjector;
+        const RenderTarget* mCurrentRenderTarget;
+
+        Light mBlankLight;
+    public:
+        AutoParamDataSource();
+        ~AutoParamDataSource();
+        /** Updates the current renderable */
+        void setCurrentRenderable(const Renderable* rend);
+        /** Updates the current camera */
+        void setCurrentCamera(const Camera* cam);
+        /** Sets the light list that should be used */
+        void setCurrentLightList(const LightList* ll);
+        /** Sets the current texture projector */
+        void setTextureProjector(const Frustum* frust);
+        /** Sets the current render target */
+        void setCurrentRenderTarget(const RenderTarget* target);
+		/** Sets the shadow extrusion distance to be used for point lights. */
+		void setShadowDirLightExtrusionDistance(Real dist);
+
+        const Matrix4& getWorldMatrix(void) const;
+        const Matrix4* getWorldMatrixArray(void) const;
+        size_t getWorldMatrixCount(void) const;
+        const Matrix4& getViewMatrix(void) const;
+        const Matrix4& getViewProjectionMatrix(void) const;
+        const Matrix4& getProjectionMatrix(void) const;
+        const Matrix4& getWorldViewProjMatrix(void) const;
+        const Matrix4& getWorldViewMatrix(void) const;
+        const Matrix4& getInverseWorldMatrix(void) const;
+        const Matrix4& getInverseWorldViewMatrix(void) const;
+        const Matrix4& getInverseViewMatrix(void) const;
+        const Matrix4& getInverseTransposeWorldMatrix(void) const;
+        const Matrix4& getInverseTransposeWorldViewMatrix(void) const;
+        const Vector4& getCameraPosition(void) const;
+        const Vector4& getCameraPositionObjectSpace(void) const;
+        /** Get the light which is 'index'th closest to the current object */
+        const Light& getLight(size_t index) const;
+		void setAmbientLightColour(const ColourValue& ambient);
+		const ColourValue& getAmbientLightColour(void) const;
+        const Matrix4& getTextureViewProjMatrix(void) const;
+        const RenderTarget* getCurrentRenderTarget(void) const;
+        const Renderable* getCurrentRenderable(void) const;
+		Real getShadowExtrusionDistance(void) const;
+		Matrix4 getInverseViewProjMatrix(void) const;
+		Matrix4 getInverseTransposeViewProjMatrix() const;
+		Matrix4 getTransposeViewProjMatrix() const;
+		Matrix4 getTransposeViewMatrix() const;
+		Matrix4 getTransposeProjectionMatrix() const;
+		Matrix4 getInverseProjectionMatrix() const;
+		Matrix4 getInverseTransposeProjectionMatrix() const;
+		Matrix4 getTransposeWorldViewProjMatrix() const;
+		Matrix4 getInverseWorldViewProjMatrix() const;
+		Matrix4 getInverseTransposeWorldViewProjMatrix() const;
+		Matrix4 getTransposeWorldViewMatrix() const;
+		Matrix4 getTransposeWorldMatrix() const;
+        Real getTime(void) const;
+		Real getTime_0_X(Real x) const;
+		Real getCosTime_0_X(Real x) const;
+		Real getSinTime_0_X(Real x) const;
+		Real getTanTime_0_X(Real x) const;
+		Vector4 getTime_0_X_packed(Real x) const;
+		Real getTime_0_1(Real x) const;
+		Real getCosTime_0_1(Real x) const;
+		Real getSinTime_0_1(Real x) const;
+		Real getTanTime_0_1(Real x) const;
+		Vector4 getTime_0_1_packed(Real x) const;
+		Real getTime_0_2Pi(Real x) const;
+		Real getCosTime_0_2Pi(Real x) const;
+		Real getSinTime_0_2Pi(Real x) const;
+		Real getTanTime_0_2Pi(Real x) const;
+		Vector4 getTime_0_2Pi_packed(Real x) const;
+		Real getFPS() const;
+		Real getViewportWidth() const;
+		Real getViewportHeight() const;
+		Real getInverseViewportWidth() const;
+		Real getInverseViewportHeight() const;
+		Vector3 getViewDirection() const;
+		Vector3 getViewSideVector() const;
+		Vector3 getViewUpVector() const;
+		Real getFOV() const;
+		Real getNearClipDistance() const;
+		Real getFarClipDistance() const;
+    };
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreParticleAffectorFactory.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreParticleAffectorFactory.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreParticleAffectorFactory.h	(revision 1092)
@@ -0,0 +1,70 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE 
+	(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under 
+the terms of the GNU Lesser General Public License as published by the Free Software 
+Foundation; either version 2 of the License, or (at your option) any later 
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT 
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with 
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple 
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to 
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __ParticleAffectorFactory_H__
+#define __ParticleAffectorFactory_H__
+
+
+#include "OgrePrerequisites.h"
+#include "OgreParticleAffector.h"
+
+namespace Ogre {
+
+    /** Abstract class defining the interface to be implemented by creators of ParticleAffector subclasses.
+    @remarks
+        Plugins or 3rd party applications can add new types of particle affectors to Ogre by creating
+        subclasses of the ParticleAffector class. Because multiple instances of these affectors may be
+        required, a factory class to manage the instances is also required. 
+    @par
+        ParticleAffectorFactory subclasses must allow the creation and destruction of ParticleAffector
+        subclasses. They must also be registered with the ParticleSystemManager. All factories have
+        a name which identifies them, examples might be 'force_vector', 'attractor', or 'fader', and these can be 
+        also be used from particle system scripts.
+    */
+    class _OgreExport ParticleAffectorFactory
+    {
+    protected:
+        std::vector<ParticleAffector*> mAffectors;
+    public:
+        ParticleAffectorFactory() {};
+        virtual ~ParticleAffectorFactory();
+        /** Returns the name of the factory, the name which identifies the particle affector type this factory creates. */
+        virtual String getName() const = 0;
+
+        /** Creates a new affector instance.
+        @remarks
+            The subclass MUST add a pointer to the created instance to mAffectors.
+        */
+        virtual ParticleAffector* createAffector(ParticleSystem* psys) = 0;
+
+        /** Destroys the affector pointed to by the parameter (for early clean up if reauired). */
+        virtual void destroyAffector(ParticleAffector* e);
+    };
+
+
+}
+
+
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSubMesh.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSubMesh.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSubMesh.h	(revision 1092)
@@ -0,0 +1,158 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __SubMesh_H_
+#define __SubMesh_H_
+
+#include "OgrePrerequisites.h"
+
+#include "OgreVertexIndexData.h"
+#include "OgreMaterial.h"
+#include "OgreRenderOperation.h"
+#include "OgreVertexBoneAssignment.h"
+#include "OgreProgressiveMesh.h"
+
+namespace Ogre {
+
+    /** Defines a part of a complete mesh.
+        @remarks
+            Meshes which make up the definition of a discrete 3D object
+            are made up of potentially multiple parts. This is because
+            different parts of the mesh may use different materials or
+            use different vertex formats, such that a rendering state
+            change is required between them.
+        @par
+            Like the Mesh class, instatiations of 3D objects in the scene
+            share the SubMesh instances, and have the option of overriding
+            their material differences on a per-object basis if required.
+            See the SubEntity class for more information.
+    */
+    class _OgreExport SubMesh
+    {
+        friend class Mesh;
+        friend class MeshSerializerImpl;
+        friend class MeshSerializerImpl_v1_2;
+        friend class MeshSerializerImpl_v1_1;
+    public:
+        SubMesh();
+        ~SubMesh();
+
+
+        /// Indicates if this submesh shares vertex data with other meshes or whether it has it's own vertices.
+        bool useSharedVertices;
+
+        /// The render operation type used to render this submesh
+        RenderOperation::OperationType operationType;
+
+        /** Dedicated vertex data (only valid if useSharedVertices = false).
+            @remarks
+                This data is completely owned by this submesh.
+            @par
+                The use of shared or non-shared buffers is determined when
+                model data is converted to the OGRE .mesh format.
+        */
+        VertexData *vertexData;
+
+        /// Face index data
+        IndexData *indexData;
+
+        ProgressiveMesh::LODFaceList mLodFaceList;
+
+        /// Reference to parent Mesh (not a smart pointer so child does not keep parent alive).
+        Mesh* parent;
+
+        /// Sets the name of the Material which this SubMesh will use
+        void setMaterialName(const String& matName);
+        const String& getMaterialName(void) const;
+
+        /** Returns true if a material has been assigned to the submesh, otherwise returns false.
+        */
+        bool isMatInitialised(void) const;
+
+        /** Returns a RenderOperation structure required to render this mesh.
+            @param 
+                rend Reference to a RenderOperation structure to populate.
+            @param
+                lodIndex The index of the LOD to use. 
+        */
+        void _getRenderOperation(RenderOperation& rend, ushort lodIndex = 0);
+
+        /** Assigns a vertex to a bone with a given weight, for skeletal animation. 
+        @remarks    
+            This method is only valid after calling setSkeletonName.
+            Since this is a one-off process there exists only 'addBoneAssignment' and
+            'clearBoneAssignments' methods, no 'editBoneAssignment'. You should not need
+            to modify bone assignments during rendering (only the positions of bones) and OGRE
+            reserves the right to do some internal data reformatting of this information, depending
+            on render system requirements.
+        @par
+            This method is for assigning weights to the dedicated geometry of the SubMesh. To assign
+            weights to the shared Mesh geometry, see the equivalent methods on Mesh.
+        */
+        void addBoneAssignment(const VertexBoneAssignment& vertBoneAssign);
+
+        /** Removes all bone assignments for this mesh. 
+        @par
+            This method is for assigning weights to the dedicated geometry of the SubMesh. To assign
+            weights to the shared Mesh geometry, see the equivalent methods on Mesh.
+        */
+        void clearBoneAssignments(void);
+
+        /// Multimap of verex bone assignments (orders by vertex index)
+        typedef std::multimap<size_t, VertexBoneAssignment> VertexBoneAssignmentList;
+        typedef MapIterator<VertexBoneAssignmentList> BoneAssignmentIterator;
+
+        /** Gets an iterator for access all bone assignments. 
+        @remarks
+            Only valid if this SubMesh has dedicated geometry.
+        */
+        BoneAssignmentIterator getBoneAssignmentIterator(void);
+
+        /** Must be called once to compile bone assignments into geometry buffer. */
+        void _compileBoneAssignments(void);
+    protected:
+
+        /// Name of the material this SubMesh uses.
+        String mMaterialName;
+
+        /// Is there a material yet?
+        bool mMatInitialised;
+
+       
+        VertexBoneAssignmentList mBoneAssignments;
+
+        /// Flag indicating that bone assignments need to be recompiled
+        bool mBoneAssignmentsOutOfDate;
+
+        /// Internal method for removing LOD data
+        void removeLodLevels(void);
+
+
+
+    };
+
+} // namespace
+
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreEdgeListBuilder.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreEdgeListBuilder.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreEdgeListBuilder.h	(revision 1092)
@@ -0,0 +1,234 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __EdgeListBuilder_H__
+#define __EdgeListBuilder_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreVector4.h"
+#include "OgreHardwareVertexBuffer.h"
+#include "OgreRenderOperation.h"
+
+namespace Ogre {
+
+
+    /** This class contains the information required to describe the edge connectivity of a
+        given set of vertices and indexes. 
+    @remarks 
+        This information is built using the EdgeListBuilder class. Note that for a given mesh,
+        which can be made up of multiple submeshes, there are separate edge lists for when 
+    */
+    class _OgreExport EdgeData
+    {
+    public:
+        /** Basic triangle structure. */
+        struct Triangle {
+            /** The set of indexes this triangle came from (NB it is possible that the triangles on 
+               one side of an edge are using a different vertex buffer from those on the other side.) */
+            size_t indexSet; 
+            /** The vertex set these vertices came from. */
+            size_t vertexSet;
+            size_t vertIndex[3];/// Vertex indexes, relative to the original buffer
+            size_t sharedVertIndex[3]; /// Vertex indexes, relative to a shared vertex buffer with 
+                                        // duplicates eliminated (this buffer is not exposed)
+	        Vector4 normal;   // unit vector othogonal to this face, plus distance from origin
+            bool lightFacing; // Working vector used when calculating the silhouette
+        };
+        /** Edge data. */
+        struct Edge {
+            /** The indexes of the 2 tris attached, note that tri 0 is the one where the 
+                indexes run _anti_ clockwise along the edge. Indexes must be
+                reversed for tri 1. */
+            size_t triIndex[2];
+            /** The vertex indices for this edge. Note that both vertices will be in the vertex
+                set as specified in 'vertexSet', which will also be the same as tri 0 */
+            size_t vertIndex[2];
+            /** Vertex indices as used in the shared vertex list, not exposed. */
+            size_t sharedVertIndex[2];
+            /** Indicates if this is a degenerate edge, ie it does not have 2 triangles */
+            bool degenerate;
+        };
+
+        typedef std::vector<Triangle> TriangleList;
+        typedef std::vector<Edge> EdgeList;
+
+        /** A group of edges sharing the same vertex data. */
+        struct EdgeGroup
+        {
+            /** The vertex set index that contains the vertices for this edge group. */
+            size_t vertexSet;
+            /** Pointer to vertex data used by this edge group. */
+            const VertexData* vertexData;
+            /** The edges themselves. */
+            EdgeList edges;
+
+        };
+
+        typedef std::vector<EdgeGroup> EdgeGroupList;
+        TriangleList triangles;
+        EdgeGroupList edgeGroups;
+		// manifold? NB This value is not stored in the  binary Mesh format yet so
+		// cannot be relied upon unless this has been calculated interactively.
+		//bool isClosed; // manifold?
+
+
+        /** Calculate the light facing state of the triangles in this edge list
+        @remarks
+            This is normally the first stage of calculating a silhouette, ie
+            establishing which tris are facing the light and which are facing
+            away. This state is stored in the 'lightFacing' flag in each 
+            Triangle.
+        @param lightPos 4D position of the light in object space, note that 
+            for directional lights (which have no position), the w component
+            is 0 and the x/y/z position are the direction.
+        */
+        void updateTriangleLightFacing(const Vector4& lightPos);
+        /** Updates the face normals for this edge list based on (changed)
+            position information, useful for animated objects. 
+        @param vertexSet The vertex set we are updating
+        @param positionBuffer The updated position buffer, must contain ONLY xyz
+        */
+        void updateFaceNormals(size_t vertexSet, HardwareVertexBufferSharedPtr positionBuffer);
+
+
+
+        // Debugging method
+        void log(Log* log);
+        
+    };
+
+    /** General utility class for building edge lists for geometry.
+    @remarks
+        You can add multiple sets of vertex and index data to build and edge list. 
+        Edges will be built between the various sets as well as within sets; this allows 
+        you to use a model which is built from multiple SubMeshes each using 
+        separate index and (optionally) vertex data and still get the same connectivity 
+        information. It's important to note that the indexes for the edge will be constrained
+        to a single vertex buffer though (this is required in order to render the edge).
+    */
+    class _OgreExport EdgeListBuilder 
+    {
+    public:
+
+        EdgeListBuilder();
+        virtual ~EdgeListBuilder();
+        /** Add a set of vertex geometry data to the edge builder. 
+        @remarks
+            You must add at least one set of vertex data to the builder before invoking the
+            build method.
+        */
+        void addVertexData(const VertexData* vertexData);
+        /** Add a set of index geometry data to the edge builder. 
+        @remarks
+            You must add at least one set of index data to the builder before invoking the
+            build method.
+        @param indexData The index information which describes the triangles.
+        @param vertexSet The vertex data set this index data refers to; you only need to alter this
+            if you have added multiple sets of vertices
+        @param opType The operation type used to render these indexes. Only triangle types
+            are supported (no point or line types)
+        */
+        void addIndexData(const IndexData* indexData, size_t vertexSet = 0, 
+            RenderOperation::OperationType opType = RenderOperation::OT_TRIANGLE_LIST);
+
+        /** Builds the edge information based on the information built up so far.
+        @remarks
+            The caller takes responsibility for deleting the returned structure.
+        */
+        EdgeData* build(void);
+
+        /// Debugging method
+        void log(Log* l);
+    protected:
+
+        /** A vertex can actually represent several vertices in the final model, because
+		vertices along texture seams etc will have been duplicated. In order to properly
+		evaluate the surface properties, a single common vertex is used for these duplicates,
+		and the faces hold the detail of the duplicated vertices.
+		*/
+        struct CommonVertex {
+            Vector3  position;  // location of point in euclidean space
+	        size_t index;       // place of vertex in common vertex list
+            size_t vertexSet;   // The vertex set this came from
+            size_t indexSet;    // The index set this was referenced (first) from
+            size_t originalIndex; // place of vertex in original vertex set
+        };
+        /** A set of indexed geometry data */
+        struct Geometry {
+            size_t vertexSet;           // The vertex data set this geometry data refers to
+            size_t indexSet;            // The index data set this geometry data refers to
+            const IndexData* indexData; // The index information which describes the triangles.
+            RenderOperation::OperationType opType;  // The operation type used to render this geometry
+        };
+        /** Comparator for sorting geometries by vertex set */
+        struct geometryLess {
+            bool operator()(const Geometry& a, const Geometry& b) const
+            {
+                if (a.vertexSet < b.vertexSet) return true;
+                if (a.vertexSet > b.vertexSet) return false;
+                return a.indexSet < b.indexSet;
+            }
+        };
+        /** Comparator for unique vertex list */
+        struct vectorLess {
+            bool operator()(const Vector3& a, const Vector3& b) const
+            {
+                if (a.x < b.x) return true;
+                if (a.x > b.x) return false;
+                if (a.y < b.y) return true;
+                if (a.y > b.y) return false;
+                return a.z < b.z;
+            }
+        };
+
+        typedef std::vector<const VertexData*> VertexDataList;
+        typedef std::vector<Geometry> GeometryList;
+        typedef std::vector<CommonVertex> CommonVertexList;
+
+        GeometryList mGeometryList;
+        VertexDataList mVertexDataList;
+        CommonVertexList mVertices;
+        EdgeData* mEdgeData;
+		/// Map for identifying common vertices
+		typedef std::map<Vector3, size_t, vectorLess> CommonVertexMap;
+		CommonVertexMap mCommonVertexMap;
+        /** Edge map, used to connect edges. Note we allow many triangles on an edge,
+        after connected an existing edge, we will remove it and never used again.
+        */
+        typedef std::multimap< std::pair<size_t, size_t>, std::pair<size_t, size_t> > EdgeMap;
+        EdgeMap mEdgeMap;
+
+        void buildTrianglesEdges(const Geometry &geometry);
+
+        /// Finds an existing common vertex, or inserts a new one
+        size_t findOrCreateCommonVertex(const Vector3& vec, size_t vertexSet, 
+            size_t indexSet, size_t originalIndex);
+        /// Connect existing edge or create a new edge - utility method during building
+        void connectOrCreateEdge(size_t vertexSet, size_t triangleIndex, size_t vertIndex0, size_t vertIndex1, 
+            size_t sharedVertIndex0, size_t sharedVertIndex1);
+    };
+
+}
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreBorderPanelOverlayElement.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreBorderPanelOverlayElement.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreBorderPanelOverlayElement.h	(revision 1092)
@@ -0,0 +1,338 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __BorderPanelOverlayElement_H__
+#define __BorderPanelOverlayElement_H__
+
+#include "OgrePanelOverlayElement.h"
+
+namespace Ogre {
+
+    class BorderRenderable;
+    
+    /** A specialisation of the PanelOverlayElement to provide a panel with a border.
+    @remarks
+        Whilst the standard panel can use a single tiled material, this class allows
+        panels with a tileable backdrop plus a border texture. This is handy for large
+        panels that are too big to use a single large texture with a border, or
+        for multiple different size panels where you want the border a constant width
+        but the center to repeat.
+    @par
+        In addition to the usual PanelOverlayElement properties, this class has a 'border
+        material', which specifies the material used for the edges of the panel,
+        a border width (which can either be constant all the way around, or specified
+        per edge), and the texture coordinates for each of the border sections.
+    */
+    class _OgreExport BorderPanelOverlayElement : public PanelOverlayElement
+    {
+        friend class BorderRenderable;
+    public:
+        /** Constructor */
+        BorderPanelOverlayElement(const String& name);
+        virtual ~BorderPanelOverlayElement();
+
+        virtual void initialise(void);
+
+		const String& getTypeName(void) const;
+        /** Sets the size of the border.
+        @remarks
+            This method sets a constant size for all borders. There are also alternative
+            methods which allow you to set border widths for individual edges separately.
+            Remember that the dimensions specified here are in relation to the size of
+            the screen, so 0.1 is 1/10th of the screen width or height. Also note that because
+            most screen resolutions are 1.333:1 width:height ratio that using the same
+            border size will look slightly bigger across than up.
+        @param size The size of the border as a factor of the screen dimensions ie 0.2 is one-fifth
+            of the screen size.
+        */
+        void setBorderSize(Real size);
+
+        /** Sets the size of the border, with different sizes for vertical and horizontal borders.
+        @remarks
+            This method sets a size for the side and top / bottom borders separately. 
+            Remember that the dimensions specified here are in relation to the size of
+            the screen, so 0.1 is 1/10th of the screen width or height. Also note that because
+            most screen resolutions are 1.333:1 width:height ratio that using the same
+            border size will look slightly bigger across than up.
+        @param sides The size of the side borders as a factor of the screen dimensions ie 0.2 is one-fifth
+            of the screen size.
+        @param topAndBottom The size of the top and bottom borders as a factor of the screen dimensions.
+        */
+        void setBorderSize(Real sides, Real topAndBottom);
+
+        /** Sets the size of the border separately for all borders.
+        @remarks
+            This method sets a size all borders separately. 
+            Remember that the dimensions specified here are in relation to the size of
+            the screen, so 0.1 is 1/10th of the screen width or height. Also note that because
+            most screen resolutions are 1.333:1 width:height ratio that using the same
+            border size will look slightly bigger across than up.
+        @param left The size of the left border as a factor of the screen dimensions ie 0.2 is one-fifth
+            of the screen size.
+        @param right The size of the left border as a factor of the screen dimensions.
+        @param top The size of the top border as a factor of the screen dimensions.
+        @param bottom The size of the bottom border as a factor of the screen dimensions.
+        */
+        void setBorderSize(Real left, Real right, Real top, Real bottom);
+
+        /** Gets the size of the left border. */
+        Real getLeftBorderSize(void) const;
+        /** Gets the size of the right border. */
+        Real getRightBorderSize(void) const;
+        /** Gets the size of the top border. */
+        Real getTopBorderSize(void) const;
+        /** Gets the size of the bottom border. */
+        Real getBottomBorderSize(void) const;
+
+        /** Sets the texture coordinates for the left edge of the border.
+        @remarks
+            The border panel uses 8 panels for the border (9 including the center). 
+            Imagine a table with 3 rows and 3 columns. The corners are always the same size,
+            but the edges stretch depending on how big the panel is. Those who have done
+            resizable HTML tables will be familiar with this approach.
+        @par
+            We only require 2 sets of uv coordinates, one for the top-left and one for the
+            bottom-right of the panel, since it is assumed the sections are aligned on the texture.
+        */
+        void setLeftBorderUV(Real u1, Real v1, Real u2, Real v2);
+        /** Sets the texture coordinates for the right edge of the border. 
+        @remarks See setLeftBorderUV.
+        */
+        void setRightBorderUV(Real u1, Real v1, Real u2, Real v2);
+        /** Sets the texture coordinates for the top edge of the border. 
+        @remarks See setLeftBorderUV.
+        */
+        void setTopBorderUV(Real u1, Real v1, Real u2, Real v2);
+        /** Sets the texture coordinates for the bottom edge of the border. 
+        @remarks See setLeftBorderUV.
+        */
+        void setBottomBorderUV(Real u1, Real v1, Real u2, Real v2);
+        /** Sets the texture coordinates for the top-left corner of the border. 
+        @remarks See setLeftBorderUV.
+        */
+        void setTopLeftBorderUV(Real u1, Real v1, Real u2, Real v2);
+        /** Sets the texture coordinates for the top-right corner of the border. 
+        @remarks See setLeftBorderUV.
+        */
+        void setTopRightBorderUV(Real u1, Real v1, Real u2, Real v2);
+        /** Sets the texture coordinates for the bottom-left corner of the border. 
+        @remarks See setLeftBorderUV.
+        */
+        void setBottomLeftBorderUV(Real u1, Real v1, Real u2, Real v2);
+        /** Sets the texture coordinates for the bottom-right corner of the border. 
+        @remarks See setLeftBorderUV.
+        */
+        void setBottomRightBorderUV(Real u1, Real v1, Real u2, Real v2);
+
+		String getLeftBorderUVString() const;
+		String getRightBorderUVString() const;
+		String getTopBorderUVString() const;
+		String getBottomBorderUVString() const;
+		String getTopLeftBorderUVString() const;
+		String getTopRightBorderUVString() const;
+		String getBottomLeftBorderUVString() const;
+		String getBottomRightBorderUVString() const;
+
+
+
+
+        /** Sets the name of the material to use for the borders. */
+        void setBorderMaterialName(const String& name);
+        /** Gets the name of the material to use for the borders. */
+        const String& getBorderMaterialName(void) const;
+
+        /** Overridden from OverlayContainer */
+        void _updateRenderQueue(RenderQueue* queue);
+
+        /** Overridden from OverlayElement */
+        void setMetricsMode(GuiMetricsMode gmm);
+
+        /** Overridden from OverlayElement */
+        void _update(void);
+
+
+        /** Command object for specifying border sizes (see ParamCommand).*/
+        class _OgrePrivate CmdBorderSize : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /** Command object for specifying the Material for the border (see ParamCommand).*/
+        class _OgrePrivate CmdBorderMaterial : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /** Command object for specifying texture coordinates for the border (see ParamCommand).*/
+        class _OgrePrivate CmdBorderLeftUV : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /** Command object for specifying texture coordinates for the border (see ParamCommand).*/
+        class _OgrePrivate CmdBorderTopUV : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /** Command object for specifying texture coordinates for the border (see ParamCommand).*/
+        class _OgrePrivate CmdBorderRightUV : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /** Command object for specifying texture coordinates for the border (see ParamCommand).*/
+        class _OgrePrivate CmdBorderBottomUV : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /** Command object for specifying texture coordinates for the border (see ParamCommand).*/
+        class _OgrePrivate CmdBorderTopLeftUV : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /** Command object for specifying texture coordinates for the border (see ParamCommand).*/
+        class _OgrePrivate CmdBorderBottomLeftUV : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /** Command object for specifying texture coordinates for the border (see ParamCommand).*/
+        class _OgrePrivate CmdBorderBottomRightUV : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /** Command object for specifying texture coordinates for the border (see ParamCommand).*/
+        class _OgrePrivate CmdBorderTopRightUV : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+    protected:
+        Real mLeftBorderSize;
+        Real mRightBorderSize;
+        Real mTopBorderSize;
+        Real mBottomBorderSize;
+		struct CellUV {
+			Real u1, v1, u2, v2;
+		};
+		CellUV mBorderUV[8];
+
+        ushort mPixelLeftBorderSize;
+        ushort mPixelRightBorderSize;
+        ushort mPixelTopBorderSize;
+        ushort mPixelBottomBorderSize;
+
+        String mBorderMaterialName;
+        MaterialPtr mpBorderMaterial;
+
+        // Render operation for the border area
+        RenderOperation mRenderOp2;
+
+        static String msTypeName;
+
+        /// internal method for setting up geometry, called by OverlayElement::update
+        void updatePositionGeometry(void);
+		/// internal method for setting up geometry, called by OverlayElement::update
+		void updateTextureGeometry(void);
+        /// Internal method for setting up parameters
+        void addBaseParameters(void);
+
+        enum BorderCellIndex {
+            BCELL_TOP_LEFT = 0,
+            BCELL_TOP = 1,
+            BCELL_TOP_RIGHT = 2,
+            BCELL_LEFT = 3,
+            BCELL_RIGHT = 4,
+            BCELL_BOTTOM_LEFT = 5,
+            BCELL_BOTTOM = 6,
+            BCELL_BOTTOM_RIGHT = 7
+        };
+	    String getCellUVString(BorderCellIndex idx) const;
+
+        // Command objects
+        static CmdBorderSize msCmdBorderSize;
+        static CmdBorderMaterial msCmdBorderMaterial;
+        static CmdBorderLeftUV msCmdBorderLeftUV;
+        static CmdBorderTopUV msCmdBorderTopUV;
+        static CmdBorderBottomUV msCmdBorderBottomUV;
+        static CmdBorderRightUV msCmdBorderRightUV;
+        static CmdBorderTopLeftUV msCmdBorderTopLeftUV;
+        static CmdBorderBottomLeftUV msCmdBorderBottomLeftUV;
+        static CmdBorderTopRightUV msCmdBorderTopRightUV;
+        static CmdBorderBottomRightUV msCmdBorderBottomRightUV;
+
+        BorderRenderable* mBorderRenderable;
+    };
+
+    /** Class for rendering the border of a BorderPanelOverlayElement.
+    @remarks
+        We need this because we have to render twice, once with the inner panel's repeating
+        material (handled by superclass) and once for the border's separate meterial. 
+    */
+    class _OgreExport BorderRenderable : public Renderable
+    {
+    protected:
+        BorderPanelOverlayElement* mParent;
+    public:
+        /** Constructed with pointers to parent. */
+        BorderRenderable(BorderPanelOverlayElement* parent) : mParent(parent) {}
+        const MaterialPtr& getMaterial(void) const { return mParent->mpBorderMaterial; }
+        void getRenderOperation(RenderOperation& op) { op = mParent->mRenderOp2; }
+        void getWorldTransforms(Matrix4* xform) const { mParent->getWorldTransforms(xform); }
+        const Quaternion& getWorldOrientation(void) const { return Quaternion::IDENTITY; }
+        const Vector3& getWorldPosition(void) const { return Vector3::ZERO; }
+        unsigned short getNumWorldTransforms(void) const { return 1; }
+        bool useIdentityProjection(void) const { return true; }
+        bool useIdentityView(void) const { return true; }
+        Real getSquaredViewDepth(const Camera* cam) const { return mParent->getSquaredViewDepth(cam); }
+        const LightList& getLights(void) const
+        {
+            // N/A, panels are not lit
+            static LightList ll;
+            return ll;
+        }
+		bool getRenderDetailOverrideable(void) const
+		{
+			return mParent->getRenderDetailOverrideable();
+		}
+    };
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreNoMemoryMacros.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreNoMemoryMacros.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreNoMemoryMacros.h	(revision 1092)
@@ -0,0 +1,38 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+//-----------------------------------------------------------------------------
+// If you want to use the real C(++) *alloc/free/new/delete functions, you must
+// include this header before the section that uses them.
+#ifdef OGRE_MEMORY_MACROS
+#undef OGRE_MEMORY_MACROS
+#undef new
+#undef delete
+#undef malloc
+#undef calloc
+#undef realloc
+#undef free
+#endif
+//-----------------------------------------------------------------------------
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreHighLevelGpuProgram.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreHighLevelGpuProgram.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreHighLevelGpuProgram.h	(revision 1092)
@@ -0,0 +1,150 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __HighLevelGpuProgram_H__
+#define __HighLevelGpuProgram_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreGpuProgram.h"
+
+namespace Ogre {
+
+    /** Abstract base class representing a high-level program (a vertex or
+        fragment program).
+    @remarks
+        High-level programs are vertex and fragment programs written in a high-level
+        language such as Cg or HLSL, and as such do not require you to write assembler code
+        like GpuProgram does. However, the high-level program does eventually 
+        get converted (compiled) into assembler and then eventually microcode which is
+        what runs on the GPU. As well as the convenience, some high-level languages like Cg allow
+        you to write a program which will operate under both Direct3D and OpenGL, something
+        which you cannot do with just GpuProgram (which requires you to write 2 programs and
+        use each in a Technique to provide cross-API compatibility). Ogre will be creating
+        a GpuProgram for you based on the high-level program, which is compiled specifically 
+        for the API being used at the time, but this process is transparent.
+    @par
+        You cannot create high-level programs direct - use HighLevelGpuProgramManager instead.
+        Plugins can register new implementations of HighLevelGpuProgramFactory in order to add
+        support for new languages without requiring changes to the core Ogre API. To allow 
+        custom parameters to be set, this class extends StringInterface - the application
+        can query on the available custom parameters and get/set them without having to 
+        link specifically with it.
+    */
+    class _OgreExport HighLevelGpuProgram : public GpuProgram
+    {
+    protected:
+        /// Whether the high-level program (and it's parameter defs) is loaded
+        bool mHighLevelLoaded;
+        /// The underlying assembler program
+        GpuProgramPtr mAssemblerProgram;
+
+        /// Internal load high-level portion if not loaded
+        virtual void loadHighLevel(void);
+        /// Internal unload high-level portion if loaded
+        virtual void unloadHighLevel(void);
+        /** Internal load implementation, loads just the high-level portion, enough to 
+            get parameters.
+        */
+        virtual void loadHighLevelImpl(void);
+        /** Internal method for creating an appropriate low-level program from this
+        high-level program, must be implemented by subclasses. */
+        virtual void createLowLevelImpl(void) = 0;
+        /// Internal unload implementation, must be implemented by subclasses
+        virtual void unloadHighLevelImpl(void) = 0;
+        /// Populate the passed parameters with name->index map, must be overridden
+        virtual void populateParameterNames(GpuProgramParametersSharedPtr params) = 0;
+        /** @copydoc Resource::loadImpl */
+        void loadImpl();
+        /** @copydoc Resource::unloadImpl */
+        void unloadImpl();
+    public:
+        /** Constructor, should be used only by factory classes. */
+        HighLevelGpuProgram(ResourceManager* creator, const String& name, ResourceHandle handle,
+            const String& group, bool isManual = false, ManualResourceLoader* loader = 0);
+        ~HighLevelGpuProgram();
+
+
+        /** Creates a new parameters object compatible with this program definition. 
+        @remarks
+            Unlike low-level assembly programs, parameters objects are specific to the
+            program and therefore must be created from it rather than by the 
+            HighLevelGpuProgramManager. This method creates a new instance of a parameters
+            object containing the definition of the parameters this program understands.
+        */
+        GpuProgramParametersSharedPtr createParameters(void);
+        /** @copydoc GpuProgram::getBindingDelegate */
+        GpuProgram* _getBindingDelegate(void) { return mAssemblerProgram.getPointer(); }
+
+
+
+    };
+
+    /** Specialisation of SharedPtr to allow SharedPtr to be assigned to HighLevelGpuProgramPtr 
+    @note Has to be a subclass since we need operator=.
+    We could templatise this instead of repeating per Resource subclass, 
+    except to do so requires a form VC6 does not support i.e.
+    ResourceSubclassPtr<T> : public SharedPtr<T>
+    */
+    class _OgreExport HighLevelGpuProgramPtr : public SharedPtr<HighLevelGpuProgram> 
+    {
+    public:
+        HighLevelGpuProgramPtr() : SharedPtr<HighLevelGpuProgram>() {}
+        explicit HighLevelGpuProgramPtr(HighLevelGpuProgram* rep) : SharedPtr<HighLevelGpuProgram>(rep) {}
+        HighLevelGpuProgramPtr(const HighLevelGpuProgramPtr& r) : SharedPtr<HighLevelGpuProgram>(r) {} 
+        HighLevelGpuProgramPtr(const ResourcePtr& r) : SharedPtr<HighLevelGpuProgram>()
+        {
+			// lock & copy other mutex pointer
+			OGRE_LOCK_MUTEX(*r.OGRE_AUTO_MUTEX_NAME)
+			OGRE_COPY_AUTO_SHARED_MUTEX(r.OGRE_AUTO_MUTEX_NAME)
+            pRep = static_cast<HighLevelGpuProgram*>(r.getPointer());
+            pUseCount = r.useCountPointer();
+            if (pUseCount)
+            {
+                ++(*pUseCount);
+            }
+        }
+
+        /// Operator used to convert a ResourcePtr to a HighLevelGpuProgramPtr
+        HighLevelGpuProgramPtr& operator=(const ResourcePtr& r)
+        {
+            if (pRep == static_cast<HighLevelGpuProgram*>(r.getPointer()))
+                return *this;
+            release();
+			// lock & copy other mutex pointer
+			OGRE_LOCK_MUTEX(*r.OGRE_AUTO_MUTEX_NAME)
+			OGRE_COPY_AUTO_SHARED_MUTEX(r.OGRE_AUTO_MUTEX_NAME)
+            pRep = static_cast<HighLevelGpuProgram*>(r.getPointer());
+            pUseCount = r.useCountPointer();
+            if (pUseCount)
+            {
+                ++(*pUseCount);
+            }
+            return *this;
+        }
+		/// Operator used to convert a GpuProgramPtr to a HighLevelGpuProgramPtr
+		HighLevelGpuProgramPtr& operator=(const GpuProgramPtr& r);
+    };
+
+}
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePanelOverlayElement.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePanelOverlayElement.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePanelOverlayElement.h	(revision 1092)
@@ -0,0 +1,140 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __PanelOverlayElement_H__
+#define __PanelOverlayElement_H__
+
+#include "OgreOverlayContainer.h"
+
+namespace Ogre {
+
+
+    /** OverlayElement representing a flat, single-material (or transparent) panel which can contain other elements.
+    @remarks
+        This class subclasses OverlayContainer because it can contain other elements. Like other
+        containers, if hidden it's contents are also hidden, if moved it's contents also move etc. 
+        The panel itself is a 2D rectangle which is either completely transparent, or is rendered 
+        with a single material. The texture(s) on the panel can be tiled depending on your requirements.
+    @par
+        This component is suitable for backgrounds and grouping other elements. Note that because
+        it has a single repeating material it cannot have a discrete border (unless the texture has one and
+        the texture is tiled only once). For a bordered panel, see it's subclass BorderPanelOverlayElement.
+    @par
+        Note that the material can have all the usual effects applied to it like multiple texture
+        layers, scrolling / animated textures etc. For multiple texture layers, you have to set 
+        the tiling level for each layer.
+    */
+    class _OgreExport PanelOverlayElement : public OverlayContainer
+    {
+    public:
+        /** Constructor. */
+        PanelOverlayElement(const String& name);
+        virtual ~PanelOverlayElement();
+
+        /** Initialise */
+        virtual void initialise(void);
+
+        /** Sets the number of times textures should repeat. 
+        @param x The number of times the texture should repeat horizontally
+        @param y The number of times the texture should repeat vertically
+        @param layer The texture layer to specify (only needs to be altered if 
+            you're using a multi-texture layer material)
+        */
+        void setTiling(Real x, Real y, ushort layer = 0);
+
+        Real getTileX(ushort layer = 0) const;
+        /** Gets the number of times the texture should repeat vertically. 
+        @param layer The texture layer to specify (only needs to be altered if 
+            you're using a multi-texture layer material)
+        */
+        Real getTileY(ushort layer = 0) const;
+
+        /** Sets whether this panel is transparent (used only as a grouping level), or 
+            if it is actually renderred.
+        */
+        void setTransparent(bool isTransparent);
+
+        /** Returns whether this panel is transparent. */
+        bool isTransparent(void) const;
+
+        /** See OverlayElement. */
+        virtual const String& getTypeName(void) const;
+        /** See Renderable. */
+        void getRenderOperation(RenderOperation& op);
+        /** Overridden from OverlayElement */
+        void setMaterialName(const String& matName);
+        /** Overridden from OverlayContainer */
+        void _updateRenderQueue(RenderQueue* queue);
+
+
+        /** Command object for specifying tiling (see ParamCommand).*/
+        class _OgrePrivate CmdTiling : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /** Command object for specifying transparency (see ParamCommand).*/
+        class _OgrePrivate CmdTransparent : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+    protected:
+        // Flag indicating if this panel should be visual or just group things
+        bool mTransparent;
+        // Texture tiling
+        Real mTileX[OGRE_MAX_TEXTURE_LAYERS];
+        Real mTileY[OGRE_MAX_TEXTURE_LAYERS];
+        size_t mNumTexCoordsInBuffer;
+
+        RenderOperation mRenderOp;
+
+        /// internal method for setting up geometry, called by OverlayElement::update
+        virtual void updatePositionGeometry(void);
+
+        /// Called to update the texture coords when layers change
+        virtual void updateTextureGeometry(void);
+
+        /// Method for setting up base parameters for this class
+        void addBaseParameters(void);
+
+
+        static String msTypeName;
+
+
+        // Command objects
+        static CmdTiling msCmdTiling;
+        static CmdTransparent msCmdTransparent;
+
+        
+
+    };
+
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/asm_math.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/asm_math.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/asm_math.h	(revision 1092)
@@ -0,0 +1,365 @@
+#ifndef __asm_math_H__
+#define __asm_math_H__
+
+#include "OgrePrerequisites.h"
+
+/*=============================================================================
+ ASM math routines posted by davepermen et al on flipcode forums
+=============================================================================*/
+
+const float pi = 4.0 * atan( 1.0 );
+const float half_pi = 0.5 * pi;
+
+/*=============================================================================
+	NO EXPLICIT RETURN REQUIRED FROM THESE METHODS!! 
+=============================================================================*/
+#if OGRE_COMPILER == OGRE_COMPILER_MSVC
+#	pragma warning( push )
+#	pragma warning( disable: 4035 ) 
+#endif
+
+float asm_arccos( float r ) {
+    // return half_pi + arctan( r / -sqr( 1.f - r * r ) );
+	
+#if OGRE_COMPILER == OGRE_COMPILER_MSVC
+
+    float asm_one = 1.f;
+    float asm_half_pi = half_pi;
+    __asm {
+        fld r // r0 = r
+        fld r // r1 = r0, r0 = r
+        fmul r // r0 = r0 * r
+        fsubr asm_one // r0 = r0 - 1.f
+        fsqrt // r0 = sqrtf( r0 )
+        fchs // r0 = - r0
+        fdiv // r0 = r1 / r0
+        fld1 // {{ r0 = atan( r0 )
+        fpatan // }}
+        fadd asm_half_pi // r0 = r0 + pi / 2
+    } // returns r0
+
+#elif OGRE_COMPILER == OGRE_COMPILER_GNUC
+
+	return float( acos( r ) );
+
+#endif
+}
+
+float asm_arcsin( float r ) {
+    // return arctan( r / sqr( 1.f - r * r ) );
+
+#if OGRE_COMPILER == OGRE_COMPILER_MSVC
+
+    const float asm_one = 1.f;
+    __asm {
+        fld r // r0 = r
+        fld r // r1 = r0, r0 = r
+        fmul r // r0 = r0 * r
+        fsubr asm_one // r0 = r0 - 1.f
+        fsqrt // r0 = sqrtf( r0 )
+        fdiv // r0 = r1 / r0
+        fld1 // {{ r0 = atan( r0 )
+        fpatan // }}
+    } // returns r0
+
+#elif OGRE_COMPILER == OGRE_COMPILER_GNUC
+
+	return float( asin( r ) );
+
+#endif
+
+}
+
+float asm_arctan( float r ) {
+
+#if OGRE_COMPILER == OGRE_COMPILER_MSVC
+
+    __asm {
+        fld r // r0 = r
+        fld1 // {{ r0 = atan( r0 )
+        fpatan // }}
+    } // returns r0
+
+#elif OGRE_COMPILER == OGRE_COMPILER_GNUC
+
+	return float( atan( r ) );
+
+#endif
+
+}
+
+float asm_sin( float r ) {
+
+#if OGRE_COMPILER == OGRE_COMPILER_MSVC
+
+    __asm {
+        fld r // r0 = r
+        fsin // r0 = sinf( r0 )
+    } // returns r0
+
+#elif OGRE_COMPILER == OGRE_COMPILER_GNUC
+
+	return sin( r );
+
+#endif
+
+}
+
+float asm_cos( float r ) {
+
+#if OGRE_COMPILER == OGRE_COMPILER_MSVC
+
+    __asm {
+        fld r // r0 = r
+        fcos // r0 = cosf( r0 )
+    } // returns r0
+
+#elif OGRE_COMPILER == OGRE_COMPILER_GNUC
+	
+	return cos( r );
+
+#endif
+}
+
+float asm_tan( float r ) {
+
+#if OGRE_COMPILER == OGRE_COMPILER_MSVC
+
+    // return sin( r ) / cos( r );
+    __asm {
+        fld r // r0 = r
+        fsin // r0 = sinf( r0 )
+        fld r // r1 = r0, r0 = r
+        fcos // r0 = cosf( r0 )
+        fdiv // r0 = r1 / r0
+    } // returns r0
+
+#elif OGRE_COMPILER == OGRE_COMPILER_GNUC
+	
+	return tan( r );
+
+#endif
+}
+
+// returns a for a * a = r
+float asm_sqrt( float r )
+{
+#if OGRE_COMPILER == OGRE_COMPILER_MSVC
+
+    __asm {
+        fld r // r0 = r
+        fsqrt // r0 = sqrtf( r0 )
+    } // returns r0
+
+#elif OGRE_COMPILER == OGRE_COMPILER_GNUC
+
+	return sqrt( r );
+
+#endif
+}
+
+// returns 1 / a for a * a = r
+// -- Use this for Vector normalisation!!!
+float asm_rsq( float r )
+{
+#if OGRE_COMPILER == OGRE_COMPILER_MSVC
+
+    __asm {
+        fld1 // r0 = 1.f
+        fld r // r1 = r0, r0 = r
+        fsqrt // r0 = sqrtf( r0 )
+        fdiv // r0 = r1 / r0
+    } // returns r0
+
+#elif OGRE_COMPILER == OGRE_COMPILER_GNUC
+
+	return 1. / sqrt( r );
+
+#endif
+}
+
+// returns 1 / a for a * a = r
+// Another version
+float apx_rsq( float r ) {
+
+#if OGRE_COMPILER == OGRE_COMPILER_MSVC
+
+    const float asm_dot5 = 0.5f;
+    const float asm_1dot5 = 1.5f;
+
+    __asm {
+        fld r // r0 = r
+        fmul asm_dot5 // r0 = r0 * .5f
+        mov eax, r // eax = r
+        shr eax, 0x1 // eax = eax >> 1
+        neg eax // eax = -eax
+        add eax, 0x5F400000 // eax = eax & MAGICAL NUMBER
+        mov r, eax // r = eax
+        fmul r // r0 = r0 * r
+        fmul r // r0 = r0 * r
+        fsubr asm_1dot5 // r0 = 1.5f - r0
+        fmul r // r0 = r0 * r
+    } // returns r0
+
+#elif OGRE_COMPILER == OGRE_COMPILER_GNUC
+
+	return 1. / sqrt( r );
+
+#endif
+}
+
+/* very MS-specific, commented out for now
+   Finally the best InvSqrt implementation?
+   Use for vector normalisation instead of 1/length() * x,y,z
+*/
+#if OGRE_COMPILER == OGRE_COMPILER_MSVC
+
+__declspec(naked) float __fastcall InvSqrt(float fValue)
+{
+    __asm
+    {
+        mov        eax, 0be6eb508h
+        mov        dword ptr[esp-12],03fc00000h
+        sub        eax, dword ptr[esp + 4]
+        sub        dword ptr[esp+4], 800000h
+        shr        eax, 1
+        mov        dword ptr[esp -  8], eax
+
+        fld        dword ptr[esp -  8]
+        fmul    st, st
+        fld        dword ptr[esp -  8]
+        fxch    st(1)
+        fmul    dword ptr[esp +  4]
+        fld        dword ptr[esp - 12]
+        fld        st(0)
+        fsub    st,st(2)
+
+        fld        st(1)
+        fxch    st(1)
+        fmul    st(3),st
+        fmul    st(3),st
+        fmulp    st(4),st
+        fsub    st,st(2)
+
+        fmul    st(2),st
+        fmul    st(3),st
+        fmulp    st(2),st
+        fxch    st(1)
+        fsubp    st(1),st
+
+        fmulp    st(1), st
+        ret 4
+    }
+}
+
+#endif
+
+// returns a random number
+FORCEINLINE float asm_rand()
+{
+
+#if OGRE_COMPILER == OGRE_COMPILER_MSVC
+  #if 0
+    #if OGRE_COMP_VER >= 1300
+
+	static unsigned __int64 q = time( NULL );
+
+	_asm {
+		movq mm0, q
+
+		// do the magic MMX thing
+		pshufw mm1, mm0, 0x1E
+		paddd mm0, mm1
+
+		// move to integer memory location and free MMX
+		movq q, mm0
+		emms
+	}
+
+	return float( q );
+    #endif
+  #else
+    // VC6 does not support pshufw
+    return float( rand() );
+  #endif
+#else
+    // GCC etc
+
+	return float( rand() );
+
+#endif
+}
+
+// returns the maximum random number
+FORCEINLINE float asm_rand_max()
+{
+
+#if OGRE_COMPILER == OGRE_COMPILER_MSVC
+  #if 0
+    #if OGRE_COMP_VER >= 1300
+
+	return std::numeric_limits< unsigned __int64 >::max();
+	return 9223372036854775807.0f;
+    #endif
+  #else
+    // VC6 does not support unsigned __int64
+    return float( RAND_MAX );
+  #endif
+
+#else
+    // GCC etc
+	return float( RAND_MAX );
+
+#endif
+}
+
+// returns log2( r ) / log2( e )
+float asm_ln( float r ) {    
+
+#if OGRE_COMPILER == OGRE_COMPILER_MSVC
+
+    const float asm_e = 2.71828182846f;
+    const float asm_1_div_log2_e = .693147180559f;
+    const float asm_neg1_div_3 = -.33333333333333333333333333333f;
+    const float asm_neg2_div_3 = -.66666666666666666666666666667f;
+    const float asm_2 = 2.f;
+
+    int log_2 = 0;
+
+    __asm {
+        // log_2 = ( ( r >> 0x17 ) & 0xFF ) - 0x80;
+        mov eax, r
+        sar eax, 0x17
+        and eax, 0xFF
+        sub eax, 0x80
+        mov log_2, eax
+
+        // r = ( r & 0x807fffff ) + 0x3f800000;
+        mov ebx, r
+        and ebx, 0x807FFFFF
+        add ebx, 0x3F800000
+        mov r, ebx
+
+        // r = ( asm_neg1_div_3 * r + asm_2 ) * r + asm_neg2_div_3;   // (1)
+        fld r
+        fmul asm_neg1_div_3
+        fadd asm_2
+        fmul r
+        fadd asm_neg2_div_3
+        fild log_2
+        fadd
+        fmul asm_1_div_log2_e
+    }
+
+#elif OGRE_COMPILER == OGRE_COMPILER_GNUC
+
+	return log( r );
+
+#endif
+}
+
+#if OGRE_COMPILER == OGRE_COMPILER_MSVC
+#	pragma warning( pop )
+#endif
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreOverlayElementCommands.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreOverlayElementCommands.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreOverlayElementCommands.h	(revision 1092)
@@ -0,0 +1,111 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE 
+	(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under 
+the terms of the GNU Lesser General Public License as published by the Free Software 
+Foundation; either version 2 of the License, or (at your option) any later 
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT 
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with 
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple 
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to 
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __OverlayElementEmitterCommands_H__
+#define __OverlayElementEmitterCommands_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreStringInterface.h"
+
+namespace Ogre  {
+
+
+    namespace OverlayElementCommands {
+        /// Command object for OverlayElement  - see ParamCommand 
+        class _OgreExport CmdLeft : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /// Command object for OverlayElement  - see ParamCommand 
+        class _OgreExport CmdTop : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /// Command object for OverlayElement  - see ParamCommand 
+        class _OgreExport CmdWidth : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /// Command object for OverlayElement  - see ParamCommand 
+        class _OgreExport CmdHeight : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /// Command object for OverlayElement  - see ParamCommand 
+        class _OgreExport CmdMaterial : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /// Command object for OverlayElement  - see ParamCommand 
+        class _OgreExport CmdCaption : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /// Command object for OverlayElement  - see ParamCommand 
+        class _OgreExport CmdMetricsMode : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /// Command object for OverlayElement  - see ParamCommand 
+        class _OgreExport CmdHorizontalAlign : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /// Command object for OverlayElement  - see ParamCommand 
+        class _OgreExport CmdVerticalAlign : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /// Command object for OverlayElement  - see ParamCommand 
+        class _OgreExport CmdVisible : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+
+    }
+}
+
+#endif
+
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePlatformManager.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePlatformManager.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePlatformManager.h	(revision 1092)
@@ -0,0 +1,160 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __PlatformManager_H__
+#define __PlatformManager_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreSingleton.h"
+
+namespace Ogre {
+    typedef void (*DLL_CREATECONFIGDIALOG)(ConfigDialog** ppDlg);
+    typedef void (*DLL_CREATEERRORDIALOG)(ErrorDialog** ppDlg);
+    typedef void (*DLL_CREATEINPUTREADER)(InputReader** ppReader);
+	typedef void (*DLL_CREATETIMER)(Timer** ppTimer);
+
+    typedef void (*DLL_DESTROYCONFIGDIALOG)(ConfigDialog* ppDlg);
+    typedef void (*DLL_DESTROYERRORDIALOG)(ErrorDialog* ppDlg);
+    typedef void (*DLL_DESTROYINPUTREADER)(InputReader* ppReader);
+    typedef void (*DLL_DESTROYTIMER)(Timer* ppTimer);
+
+    /** Class which manages the platform settings Ogre runs on.
+        @remarks
+            Because Ogre is designed to be platform-independent, it
+            dynamically loads a library containing all the platform-specific
+            elements like dialogs etc. 
+        @par
+            This class manages that load and provides a simple interface to
+            the platform.
+    */
+    class _OgreExport PlatformManager : public Singleton<PlatformManager>
+    {
+    protected:
+        DLL_CREATECONFIGDIALOG mpfCreateConfigDialog;
+        DLL_CREATEERRORDIALOG mpfCreateErrorDialog;
+        DLL_CREATEINPUTREADER mpfCreateInputReader;
+		DLL_CREATETIMER mpfCreateTimer;
+
+        DLL_DESTROYCONFIGDIALOG mpfDestroyConfigDialog;
+        DLL_DESTROYERRORDIALOG mpfDestroyErrorDialog;
+        DLL_DESTROYINPUTREADER mpfDestroyInputReader;
+        DLL_DESTROYTIMER mpfDestroyTimer;
+		
+    public:
+        /** Default constructor.
+        */
+        PlatformManager();
+
+        /** Gets a new instance of a platform-specific config dialog.
+            @remarks
+                The instance returned from this method will be a
+                platform-specific subclass of ConfigDialog, and must be
+                destroyed by the caller when required.
+        */
+        ConfigDialog* createConfigDialog();
+
+        /** Destroys an instance of a platform-specific config dialog.
+            @remarks
+                Required since deletion of objects must be performed on the
+                correct heap.
+        */
+        void destroyConfigDialog(ConfigDialog* dlg);
+
+        /** Gets a new instance of a platform-specific config dialog.
+            @remarks
+                The instance returned from this method will be a
+                platform-specific subclass of ErrorDialog, and must be
+                destroyed by the caller when required.
+        */
+        ErrorDialog* createErrorDialog();
+
+        /** Destroys an instance of a platform-specific error dialog.
+            @remarks
+                Required since deletion of objects must be performed on the
+                correct heap.
+        */
+        void destroyErrorDialog(ErrorDialog* dlg);
+
+        /** Gets a new instance of a platform-specific input reader.
+            @remarks
+                The instance returned from this method will be a
+                platform-specific subclass of InputReader, and must be
+                destroyed by the caller when required.
+        */
+        InputReader* createInputReader();
+
+        /** Destroys an instance of a platform-specific input reader.
+            @remarks
+                Required since deletion of objects must be performed on the
+                correct heap.
+        */
+        void destroyInputReader(InputReader* reader);
+		
+		/** Creates a new Timer instance
+		*/
+		Timer* createTimer();
+
+        /** Destroys an instance of a timer. */
+        void destroyTimer(Timer* timer);
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static PlatformManager& getSingleton(void);
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static PlatformManager* getSingletonPtr(void);
+
+
+    };
+
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreCEGUIRenderer.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreCEGUIRenderer.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreCEGUIRenderer.h	(revision 1092)
@@ -0,0 +1,451 @@
+/************************************************************************
+	filename: 	OgreCEGUIRenderer.h
+	created:	11/5/2004
+	author:		Paul D Turner
+	
+	purpose:	Interface for main Ogre GUI renderer class
+*************************************************************************/
+/*************************************************************************
+    Crazy Eddie's GUI System (http://www.cegui.org.uk)
+    Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*************************************************************************/
+/*************************************************************************
+	This file contains code that is specific to Ogre (http://www.ogre3d.org)
+*************************************************************************/
+#ifndef _OgreCEGUIRenderer_h_
+#define _OgreCEGUIRenderer_h_
+
+#if defined( __WIN32__ ) || defined( _WIN32 )
+#   ifdef OGRE_GUIRENDERER_EXPORTS
+#       define OGRE_GUIRENDERER_API __declspec(dllexport)
+#   else
+#       define OGRE_GUIRENDERER_API __declspec(dllimport)
+#   endif
+#else
+#   define OGRE_GUIRENDERER_API
+#endif
+
+#include <CEGUI/CEGUIBase.h>
+#include <CEGUI/CEGUIRenderer.h>
+#include <CEGUI/CEGUITexture.h>
+
+#include <OgreRenderQueueListener.h>
+#include <OgreSceneManagerEnumerator.h>
+
+// Start of CEGUI namespace section
+namespace CEGUI
+{
+/*************************************************************************
+	Forward refs
+*************************************************************************/
+class OgreCEGUITexture;
+class OgreCEGUIRenderer;
+
+
+/*!
+\brief
+	RenderQueueListener based class used to hook into the ogre rendering system
+*/
+class CEGUIRQListener : public Ogre::RenderQueueListener
+{
+public:
+	CEGUIRQListener(OgreCEGUIRenderer* renderer, Ogre::RenderQueueGroupID queue_id, bool post_queue)
+	{
+		d_renderer		= renderer;
+		d_queue_id		= queue_id;
+		d_post_queue	= post_queue;
+	}
+
+	virtual ~CEGUIRQListener() {}
+
+	virtual void	renderQueueStarted(Ogre::RenderQueueGroupID id, bool& skipThisQueue);
+	virtual void	renderQueueEnded(Ogre::RenderQueueGroupID id, bool& repeatThisQueue);
+
+	// methods for adjusting target queue settings
+	void	setTargetRenderQueue(Ogre::RenderQueueGroupID queue_id)		{d_queue_id = queue_id;}
+	void	setPostRenderQueue(bool post_queue)		{d_post_queue = post_queue;}
+
+private:
+	/*************************************************************************
+		Implementation Data
+	*************************************************************************/
+	OgreCEGUIRenderer*				d_renderer;		//!< CEGUI renderer object for Ogre.
+	Ogre::RenderQueueGroupID	d_queue_id;		//!< ID of the queue that we are hooked into
+	bool						d_post_queue;	//!< true if we render after everything else in our queue.
+};
+
+
+/*!
+\brief
+	Renderer class to interface with Ogre engine.
+*/
+class OGRE_GUIRENDERER_API OgreCEGUIRenderer : public Renderer
+{
+public:
+	/*!
+	\brief
+		Constructor for renderer class that uses Ogre for rendering.
+
+	\param window
+		Pointer to an Ogre::RenderWindow object.
+
+	\param queue_id
+		Ogre::RenderQueueGroupID value that specifies where the GUI should appear in the ogre rendering output.
+
+	\param post_queue
+		set to true to have GUI rendered after render queue \a queue_id, or false to have the GUI rendered before render queue
+		\a queue_id.
+
+	\param max_quads
+		Obsolete.  Set to 0.
+
+	\param scene_type
+		One of the Ogre::SceneType enumerated values specifying the scene manager to be targeted by the GUI renderer.
+	*/
+	OgreCEGUIRenderer(Ogre::RenderWindow* window, Ogre::RenderQueueGroupID queue_id = Ogre::RENDER_QUEUE_OVERLAY, bool post_queue = false, uint max_quads = 0, Ogre::SceneType scene_type = Ogre::ST_GENERIC);
+
+
+	/*!
+	\brief
+		Constructor for renderer class that uses Ogre for rendering.
+
+	\param window
+		Pointer to an Ogre::RenderWindow object.
+
+	\param queue_id
+		Ogre::RenderQueueGroupID value that specifies where the GUI should appear in the ogre rendering output.
+
+	\param post_queue
+		set to true to have GUI rendered after render queue \a queue_id, or false to have the GUI rendered before render queue
+		\a queue_id.
+
+	\param max_quads
+		Obsolete.  Set to 0.
+
+	\param scene_manager
+		Pointer to an Ogre::SceneManager object that is to be used for GUI rendering.
+	*/
+	OgreCEGUIRenderer(Ogre::RenderWindow* window, Ogre::RenderQueueGroupID queue_id, bool post_queue, uint max_quads, Ogre::SceneManager* scene_manager);
+
+
+	/*!
+	\brief
+		Destructor for Ogre renderer.
+	*/
+	virtual ~OgreCEGUIRenderer(void);
+
+
+
+	// add's a quad to the list to be rendered
+	virtual	void	addQuad(const Rect& dest_rect, float z, const Texture* tex, const Rect& texture_rect, const ColourRect& colours, QuadSplitMode quad_split_mode);
+
+	// perform final rendering for all queued renderable quads.
+	virtual	void	doRender(void);
+
+	// clear the queue
+	virtual	void	clearRenderList(void);
+
+
+	/*!
+	\brief
+		Enable or disable the queueing of quads from this point on.
+
+		This only affects queueing.  If queueing is turned off, any calls to addQuad will cause the quad to be rendered directly.  Note that
+		disabling queueing will not cause currently queued quads to be rendered, nor is the queue cleared - at any time the queue can still
+		be drawn by calling doRender, and the list can be cleared by calling clearRenderList.  Re-enabling the queue causes subsequent quads
+		to be added as if queueing had never been disabled.
+
+	\param setting
+		true to enable queueing, or false to disable queueing (see notes above).
+
+	\return
+		Nothing
+	*/
+	virtual void	setQueueingEnabled(bool setting)		{d_queueing = setting;}
+
+
+	// create an empty texture
+	virtual	Texture*	createTexture(void);
+
+	// create a texture and load it with the specified file.
+	virtual	Texture*	createTexture(const String& filename, const String& resourceGroup = "General");
+
+	// create a texture and set it to the specified size
+	virtual	Texture*	createTexture(float size);
+
+    // create an OGRE resource provider.
+    virtual ResourceProvider* createResourceProvider(void);
+
+	// destroy the given texture
+	virtual	void		destroyTexture(Texture* texture);
+
+	// destroy all textures still active
+	virtual void		destroyAllTextures(void);
+
+
+	/*!
+	\brief
+		Return whether queueing is enabled.
+
+	\return
+		true if queueing is enabled, false if queueing is disabled.
+	*/
+	virtual bool	isQueueingEnabled(void) const	{return d_queueing;}
+
+
+	/*!
+	\brief
+	Return the current width of the display in pixels
+
+	\return
+	float value equal to the current width of the display in pixels.
+	*/
+	virtual float	getWidth(void) const		{return d_display_area.getWidth();}
+
+
+	/*!
+	\brief
+	Return the current height of the display in pixels
+
+	\return
+	float value equal to the current height of the display in pixels.
+	*/
+	virtual float	getHeight(void) const		{return d_display_area.getHeight();}
+
+
+	/*!
+	\brief
+	Return the size of the display in pixels
+
+	\return
+	Size object describing the dimensions of the current display.
+	*/
+	virtual Size	getSize(void) const			{return d_display_area.getSize();}
+
+
+	/*!
+	\brief
+	Return a Rect describing the screen
+
+	\return
+	A Rect object that describes the screen area.  Typically, the top-left values are always 0, and the size of the area described is
+	equal to the screen resolution.
+	*/
+	virtual Rect	getRect(void) const			{return d_display_area;}
+
+
+	/*!
+	\brief
+		Return the maximum texture size available
+
+	\return
+		Size of the maximum supported texture in pixels (textures are always assumed to be square)
+	*/
+	virtual	uint	getMaxTextureSize(void) const		{return 2048;}		// TODO: Change to proper value
+
+
+	/*!
+	\brief
+		Return the horizontal display resolution dpi
+
+	\return
+		horizontal resolution of the display in dpi.
+	*/
+	virtual	uint	getHorzScreenDPI(void) const	{return 96;}
+
+
+	/*!
+	\brief
+		Return the vertical display resolution dpi
+
+	\return
+		vertical resolution of the display in dpi.
+	*/
+	virtual	uint	getVertScreenDPI(void) const	{return 96;}
+
+
+	/*!
+	\brief
+		Set the scene manager to be used for rendering the GUI.
+
+		The GUI system will be unhooked from the current scene manager and attached to what ever
+		is specified here.
+
+	\param scene_type
+		One of the Ogre::SceneType enumerated values indicating the new target Ogre::SceneManager to be
+		used for GUI rendering.
+
+	\return
+		Nothing.
+	*/
+	void	setTargetSceneManager(Ogre::SceneType scene_type);
+
+
+	/*!
+	\brief
+		Set the scene manager to be used for rendering the GUI.
+
+		The GUI system will be unhooked from the current scene manager and attached to what ever
+		is specified here.
+
+	\param scene_manager
+		Pointer to an Ogre::SceneManager object that is the new target Ogre::SceneManager to be
+		used for GUI rendering.
+
+	\return
+		Nothing.
+	*/
+	void	setTargetSceneManager(Ogre::SceneManager* scene_manager);
+
+
+	/*!
+	\brief
+		Set the target render queue for GUI rendering.
+
+	\param queue_id
+		Ogre::RenderQueueGroupID value specifying the render queue that the GUI system should attach to.
+
+	\param post_queue
+		- true to specify that the GUI should render after everything else in render queue \a queue_id.
+		- false to specify the GUI should render before everything else in render queue \a queue_id.
+
+	\return
+		Nothing.
+	*/
+	void	setTargetRenderQueue(Ogre::RenderQueueGroupID queue_id, bool post_queue);
+
+
+	/*!
+	\brief
+		Create a texture from an existing Ogre::TexturePtr object.
+
+	\note
+		If you want to use an Ogre::RenderTexture (for putting rendered output onto Gui elements or other
+		advanced techniques), you can get the Ogre::TexturePtr to be used by calling Ogre::TextureManager::getByName()
+		passing the name returned from Ogre::RenderTexture::getName() (and casting the result as necessary).
+
+	\param texture
+		pointer to an Ogre::TexturePtr object to be used as the basis for the new CEGUI::Texture
+
+	\return
+		Pointer to the newly created CEGUI::TexturePtr object.
+	*/
+	Texture*	createTexture(Ogre::TexturePtr& texture);
+
+
+private:
+	/************************************************************************
+		Implementation Constants
+	************************************************************************/
+	static const size_t    VERTEX_PER_QUAD;						 //!< number of vertices per quad
+	static const size_t    VERTEX_PER_TRIANGLE;					 //!< number of vertices for a triangle
+    static const size_t    VERTEXBUFFER_INITIAL_CAPACITY;		 //!< initial capacity of the allocated vertex buffer
+    static const size_t    UNDERUSED_FRAME_THRESHOLD;            //!< number of frames to wait before shrinking buffer
+
+	/*************************************************************************
+	    Implementation Structs & classes
+	*************************************************************************/
+	/*!
+	\brief
+		structure used for all vertices.
+	*/
+	struct QuadVertex {
+		float x, y, z;			//!< The position for the vertex.
+		Ogre::RGBA diffuse;		//!< colour of the vertex
+		float tu1, tv1;			//!< texture coordinates
+	};
+
+	/*!
+	\brief
+		structure holding details about a quad to be drawn
+	*/
+	struct QuadInfo
+	{
+		Ogre::TexturePtr		texture;
+		Rect				position;
+		float				z;
+		Rect				texPosition;
+        uint32		        topLeftCol;
+        uint32		        topRightCol;
+        uint32		        bottomLeftCol;
+        uint32		        bottomRightCol;
+        
+        QuadSplitMode		splitMode;
+
+		bool operator<(const QuadInfo& other) const
+		{
+			// this is intentionally reversed.
+			return z > other.z;
+		}
+	};
+
+
+	/*************************************************************************
+	    Implementation Methods
+	*************************************************************************/
+	// setup states etc
+	void	initRenderStates(void);
+
+	// sort quads list according to texture
+	void	sortQuads(void);
+
+	// render a quad directly to the display
+	void	renderQuadDirect(const Rect& dest_rect, float z, const Texture* tex, const Rect& texture_rect, const ColourRect& colours, QuadSplitMode quad_split_mode);
+
+	// convert colour value to whatever the Ogre render system is expecting.
+    uint32    colourToOgre(const colour& col) const;
+
+	// perform main work of the constructor.  This does everything except the final hook into the render system.
+	void	constructor_impl(Ogre::RenderWindow* window, Ogre::RenderQueueGroupID queue_id, bool post_queue, uint max_quads);
+
+
+	/*************************************************************************
+	    Implementation Data
+	*************************************************************************/
+	Rect				d_display_area;
+
+	typedef std::multiset<QuadInfo>		QuadList;
+	QuadList d_quadlist;
+	bool	 d_queueing;		//!< setting for queueing control.
+
+	// Ogre specific bits.
+	Ogre::Root*					d_ogre_root;		//!< pointer to the Ogre root object that we attach to
+	Ogre::RenderSystem*			d_render_sys;		//!< Pointer to the render system for Ogre.
+	Ogre::RenderQueueGroupID	d_queue_id;			//!< ID of the queue that we are hooked into
+	Ogre::TexturePtr			d_currTexture;		//!< currently set texture;
+	Ogre::RenderOperation		d_render_op;		//!< Ogre render operation we use to do our stuff.
+	Ogre::HardwareVertexBufferSharedPtr	d_buffer;	//!< vertex buffer to queue sprite rendering
+    size_t d_underused_framecount;                  //!< Number of frames elapsed since buffer utilization was above half the capacity
+    Ogre::RenderOperation		d_direct_render_op;		//!< Renderop for cursor
+	Ogre::HardwareVertexBufferSharedPtr	d_direct_buffer;	//!< Renderop for cursor
+	Ogre::SceneManager*			d_sceneMngr;		//!< The scene manager we are hooked into.
+	Ogre::LayerBlendModeEx		d_colourBlendMode;	//!< Controls colour blending mode used.
+	Ogre::LayerBlendModeEx		d_alphaBlendMode;	//!< Controls alpha blending mode used.
+
+	CEGUIRQListener*			d_ourlistener;
+	bool						d_post_queue;		//!< true if we render after everything else in our queue.
+	size_t						d_bufferPos;		//!< index into buffer where next vertex should be put.
+	bool						d_sorted;			//!< true when data in quad list is sorted.
+	Point						d_texelOffset;		//!< Offset required for proper texel mapping.
+
+	std::list<OgreCEGUITexture*> d_texturelist;		//!< List used to track textures.
+};
+
+} // End of  CEGUI namespace section
+
+
+#endif	// end of guard _OgreCEGUIRenderer_h_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreUserDefinedObject.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreUserDefinedObject.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreUserDefinedObject.h	(revision 1092)
@@ -0,0 +1,89 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __UserDefinedObject_H__
+#define __UserDefinedObject_H__
+
+#include "OgrePrerequisites.h"
+
+namespace Ogre {
+
+
+    /** This class is designed to be subclassed by OGRE users, to allow them to
+        associate their own application objects with MovableObject instances
+        in the engine.
+    @remarks
+        It's always been suggested that an OGRE application would likley comprise
+        a number of game objects which would keep pointers to OGRE objects in order
+        to maintain the link. However, in some cases it would be very useful to be able to
+        navigate directly from an OGRE instance back to a custom application object.
+        This abstract class exists for this purpose; MovableObjects hold a pointer to
+        a UserDefinedObject instance, which application writers subclass in order to
+        include their own attributes. Your game objects themselves may be subclasses of this
+        class, or your subclasses may merely be a link between them.
+    @par
+        Because OGRE never uses instances of this object itself, there is very little
+        definition to this class; the application is expected to add all the detail it wants.
+        However, as a hint, and for debugging purposes, this class does define a 'type id',
+        which it is recommended you use to differentiate between your subclasses,
+        if you have more than one type.
+    */
+    class _OgreExport UserDefinedObject
+    {
+    public:
+        /** Standard constructor. */
+        UserDefinedObject();
+        virtual ~UserDefinedObject() {}
+
+        /** Return a number identifying the type of user defined object.
+        @remarks
+            Can be used to differentiate between different types of object which you attach to
+            OGRE MovableObject instances. Recommend you override this in your classes if you
+            use more than one type of object.
+        @par
+            Alternatively, you can override the getTypeName method and use that instead; 
+            that version is a litle more friendly and easier to scope, but obviously 
+            slightly less efficient. You choose which you prefer.
+        */
+        virtual long getTypeID(void) const;
+
+        /** Return a string identifying the type of user defined object.
+        @remarks
+            Can be used to differentiate between different types of object which you attach to
+            OGRE MovableObject instances. Recommend you override this in your classes if you
+            use more than one type of object.
+        @par
+            Alternatively, you can override the getTypeID method and use that instead; 
+            that version is a litle more efficient, but obviously 
+            slightly less easy to read. You choose which you prefer.
+        */
+        virtual const String& getTypeName(void) const;
+        
+    };
+    
+        
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreILCodecs.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreILCodecs.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreILCodecs.h	(revision 1092)
@@ -0,0 +1,50 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#ifndef _DDSCodec_H__
+#define _DDSCodec_H__
+
+#include <list>
+
+namespace Ogre 
+{
+    class ILImageCodec;
+    
+    class _OgrePrivate ILCodecs {
+    protected:
+       static std::list<ILImageCodec*> codeclist;
+    public:
+    	// Register all codecs provided by this module
+	   static void registerCodecs(void);
+	   // Delete all codecs provided by this module
+	   static void deleteCodecs(void);
+    };
+
+} // namespace Ogre
+
+
+#endif // #ifndef _DDSCodec_H__
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderTarget.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderTarget.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderTarget.h	(revision 1092)
@@ -0,0 +1,334 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __RenderTarget_H__
+#define __RenderTarget_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreString.h"
+#include "OgreTextureManager.h"
+#include "OgreViewport.h"
+#include "OgreTimer.h"
+
+/* Define the number of priority groups for the render system's render targets. */
+#ifndef OGRE_NUM_RENDERTARGET_GROUPS
+	#define OGRE_NUM_RENDERTARGET_GROUPS 10
+	#define OGRE_DEFAULT_RT_GROUP 4
+	#define OGRE_REND_TO_TEX_RT_GROUP 2
+#endif
+
+namespace Ogre {
+
+    /** A 'canvas' which can receive the results of a rendering
+        operation.
+        @remarks
+            This abstract class defines a common root to all targets of rendering operations. A
+            render target could be a window on a screen, or another
+            offscreen surface like a texture or bump map etc.
+        @author
+            Steven Streeting
+        @version
+            1.0
+     */
+    class _OgreExport RenderTarget
+    {
+    public:
+        enum StatFlags
+        {
+            SF_NONE           = 0,
+            SF_FPS            = 1,
+            SF_AVG_FPS        = 2,
+            SF_BEST_FPS       = 4,
+            SF_WORST_FPS      = 8,
+            SF_TRIANGLE_COUNT = 16,
+            SF_ALL            = 0xFFFF
+        };
+
+        struct FrameStats
+        {
+            float lastFPS;
+            float avgFPS;
+            float bestFPS;
+            float worstFPS;
+            unsigned long bestFrameTime;
+            unsigned long worstFrameTime;
+            size_t triangleCount;
+        };
+
+        RenderTarget();
+        virtual ~RenderTarget();
+
+        /// Retrieve target's name.
+        virtual const String& getName(void) const;
+
+        /// Retrieve information about the render target.
+        virtual void getMetrics(unsigned int& width, unsigned int& height, unsigned int& colourDepth);
+
+        virtual unsigned int getWidth(void) const;
+        virtual unsigned int getHeight(void) const;
+        virtual unsigned int getColourDepth(void) const;
+
+        /** Tells the target to update it's contents.
+            @remarks
+                If OGRE is not running in an automatic rendering loop
+                (started using Root::startRendering),
+                the user of the library is responsible for asking each render
+                target to refresh. This is the method used to do this. It automatically
+                re-renders the contents of the target using whatever cameras have been
+                pointed at it (using Camera::setRenderTarget).
+            @par
+                This allows OGRE to be used in multi-windowed utilities
+                and for contents to be refreshed only when required, rather than
+                constantly as with the automatic rendering loop.
+        */
+        virtual void update(void);
+
+        /** Adds a viewport to the rendering target.
+            @remarks
+                A viewport is the rectangle into which redering output is sent. This method adds
+                a viewport to the render target, rendering from the supplied camera. The
+                rest of the parameters are only required if you wish to add more than one viewport
+                to a single rendering target. Note that size information passed to this method is
+                passed as a parametric, i.e. it is relative rather than absolute. This is to allow
+                viewports to automatically resize along with the target.
+            @param
+                cam The camera from which the viewport contents will be rendered (mandatory)
+            @param
+                ZOrder The relative order of the viewport with others on the target (allows overlapping
+                viewports i.e. picture-in-picture). Higher ZOrders are on top of lower ones. The actual number
+                is irrelevant, only the relative ZOrder matters (you can leave gaps in the numbering)
+            @param
+                left The relative position of the left of the viewport on the target, as a value between 0 and 1.
+            @param
+                top The relative position of the top of the viewport on the target, as a value between 0 and 1.
+            @param
+                width The relative width of the viewport on the target, as a value between 0 and 1.
+            @param
+                height The relative height of the viewport on the target, as a value between 0 and 1.
+        */
+        virtual Viewport* addViewport(Camera* cam, int ZOrder = 0, float left = 0.0f, float top = 0.0f ,
+            float width = 1.0f, float height = 1.0f);
+
+        /** Returns the number of viewports attached to this target.*/
+        virtual unsigned short getNumViewports(void) const;
+
+        /** Retrieves a pointer to the viewport with the given index. */
+        virtual Viewport* getViewport(unsigned short index);
+
+        /** Removes a viewport at a given ZOrder.
+        */
+        virtual void removeViewport(int ZOrder);
+
+        /** Removes all viewports on this target.
+        */
+        virtual void removeAllViewports(void);
+
+        /** Retieves details of current rendering performance.
+            @remarks
+                If the user application wishes to do it's own performance
+                display, or use performance for some other means, this
+                method allows it to retrieve the statistics.
+                @param
+                    lastFPS Pointer to a float to receive the number of frames per second (FPS)
+                    based on the last frame rendered.
+                @param
+                    avgFPS Pointer to a float to receive the FPS rating based on an average of all
+                    the frames rendered since rendering began (the call to
+                    Root::startRendering).
+                @param
+                    bestFPS Pointer to a float to receive the best FPS rating that has been achieved
+                    since rendering began.
+                @param
+                    worstFPS Pointer to a float to receive the worst FPS rating seen so far.
+        */
+        virtual void getStatistics(float& lastFPS, float& avgFPS,
+            float& bestFPS, float& worstFPS) const;  // Access to stats
+
+        virtual const FrameStats& getStatistics(void) const;
+
+        /** Individual stats access - gets the number of frames per second (FPS) based on the last frame rendered.
+        */
+        virtual float getLastFPS() const;
+
+        /** Individual stats access - gets the average frames per second (FPS) since call to Root::startRendering.
+        */
+        virtual float getAverageFPS() const;
+
+        /** Individual stats access - gets the best frames per second (FPS) since call to Root::startRendering.
+        */
+        virtual float getBestFPS() const;
+
+        /** Individual stats access - gets the worst frames per second (FPS) since call to Root::startRendering.
+        */
+        virtual float getWorstFPS() const;
+
+        /** Individual stats access - gets the best frame time
+        */
+        virtual float getBestFrameTime() const;
+
+        /** Individual stats access - gets the worst frame time
+        */
+        virtual float getWorstFrameTime() const;
+
+        /** Resets saved frame-rate statistices.
+        */
+        virtual void resetStatistics(void);
+
+        /** Gets a custom (maybe platform-specific) attribute.
+            @remarks
+                This is a nasty way of satisfying any API's need to see platform-specific details.
+                It horrid, but D3D needs this kind of info. At least it's abstracted.
+            @param
+                name The name of the attribute.
+            @param
+                pData Pointer to memory of the right kind of structure to receive the info.
+        */
+        virtual void getCustomAttribute(const String& name, void* pData);
+
+        /** Adds debug text to this window. */
+        virtual void setDebugText(const String& text);
+
+		/** Returns the debug text. */
+		const String& getDebugText() const;
+
+        /** Add a listener to this RenderTarget which will be called back before & after rendering.
+        @remarks
+            If you want notifications before and after a target is updated by the system, use
+            this method to register your own custom RenderTargetListener class. This is useful
+            for potentially adding your own manual rendering commands before and after the
+            'normal' system rendering.
+        @par NB this should not be used for frame-based scene updates, use Root::addFrameListener for that.
+        */
+        virtual void addListener(RenderTargetListener* listener);
+        /** Removes a RenderTargetListener previously registered using addListener. */
+        virtual void removeListener(RenderTargetListener* listener);
+        /** Removes all listeners from this instance. */
+        virtual void removeAllListeners(void);
+
+		/** Sets the priority of this render target in relation to the others. 
+        @remarks
+            This can be used in order to schedule render target updates. Lower
+            priorities will be rendered first. Note that the priority must be set
+            at the time the render target is attached to the render system, changes
+            afterwards will not affect the ordering.
+        */
+        virtual void setPriority( uchar priority ) { mPriority = priority; }
+        /** Gets the priority of a render target. */
+		virtual uchar getPriority() const { return mPriority; }
+
+        /** Used to retrieve or set the active state of the render target.
+        */
+        virtual bool isActive() const;
+
+        /** Used to set the active state of the render target.
+        */
+        virtual void setActive( bool state );
+
+        /** Sets whether this target should be automatically updated if Ogre's rendering
+            loop or Root::_updateAllRenderTargets is being used.
+        @remarks
+            By default, if you use Ogre's own rendering loop (Root::startRendering)
+            or call Root::_updateAllRenderTargets, all render targets are updated 
+            automatically. This method allows you to control that behaviour, if 
+            for example you have a render target which you only want to update periodically.
+        @param autoupdate If true, the render target is updated during the automatic render
+            loop or when Root::_updateAllRenderTargets is called. If false, the 
+            target is only updated when its update() method is called explicitly.
+        */
+        virtual void setAutoUpdated(bool autoupdate);
+        /** Gets whether this target is automatically updated if Ogre's rendering
+            loop or Root::_updateAllRenderTargets is being used.
+        */
+        virtual bool isAutoUpdated(void) const;
+
+        /** Writes the current contents of the render target to the named file. */
+        virtual void writeContentsToFile(const String& filename) = 0;
+
+	/** Writes the current contents of the render target to the (PREFIX)(time-stamp)(SUFFIX) file.
+		@returns the name of the file used.*/
+	virtual String writeContentsToTimestampedFile(const String& filenamePrefix, const String& filenameSuffix);
+
+		virtual bool requiresTextureFlipping() const = 0;
+
+		/** Gets the number of triangles rendered in the last update() call. */
+		virtual size_t getTriangleCount(void) const;
+        /** Utility method to notify a render target that a camera has been removed, 
+        incase it was referring to it as a viewer. 
+        */
+        virtual void _notifyCameraRemoved(const Camera* cam);
+
+        /** Indicates whether this target is the primary window. The
+            primary window is special in that it is destroyed when 
+            ogre is shut down, and cannot be destroyed directly.
+            This is the case because it holds the context for vertex,
+            index buffers and textures.
+        */
+        virtual bool isPrimary(void) const;
+
+    protected:
+        /// The name of this target.
+        String mName;
+		/// The priority of the render target.
+		uchar mPriority;
+
+        unsigned int mWidth;
+        unsigned int mHeight;
+        unsigned int mColourDepth;
+        bool mIsDepthBuffered;
+
+        // Stats
+		FrameStats mStats;
+        
+        Timer* mTimer ;
+        String mDebugText;
+        unsigned long mLastSecond;
+        unsigned long mLastTime;
+        size_t mFrameCount;
+
+        bool mActive;
+        bool mAutoUpdate;
+
+        void updateStats(void);
+
+        typedef std::map<int, Viewport*, std::less<int> > ViewportList;
+        /// List of viewports, map on Z-order
+        ViewportList mViewportList;
+
+        typedef std::vector<RenderTargetListener*> RenderTargetListenerList;
+        RenderTargetListenerList mListeners;
+
+        /// internal method for firing events
+        virtual void firePreUpdate(void);
+        /// internal method for firing events
+        virtual void firePostUpdate(void);
+        /// internal method for firing events
+        virtual void fireViewportPreUpdate(Viewport* vp);
+        /// internal method for firing events
+        virtual void fireViewportPostUpdate(Viewport* vp);
+    };
+
+} // Namespace
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSearchOps.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSearchOps.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSearchOps.h	(revision 1092)
@@ -0,0 +1,70 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+// Emulate _findfirst, _findnext on non-Windows platforms
+
+
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <stdlib.h>
+
+#include "OgrePlatform.h"
+
+#if OGRE_PLATFORM != OGRE_PLATFORM_WIN32
+
+#include <dirent.h>
+#include <unistd.h>
+#include <fnmatch.h>
+/* The max number of searches to allow at one time */
+#define MAX_FIND_SEARCHES 10
+
+struct _find_search_t
+{
+    int in_use;
+    char *pattern;
+    DIR *dirfd;
+};
+
+/* Our simplified data entry structure */
+struct _finddata_t
+{
+    char *name;
+    int attrib;
+    unsigned long size;
+};
+
+#define _A_NORMAL 0x00  /* Normalfile-Noread/writerestrictions */
+#define _A_RDONLY 0x01  /* Read only file */
+#define _A_HIDDEN 0x02  /* Hidden file */
+#define _A_SYSTEM 0x04  /* System file */
+#define _A_SUBDIR 0x10  /* Subdirectory */
+#define _A_ARCH   0x20  /* Archive file */
+
+long _findfirst(const char *pattern, struct _finddata_t *data);
+int _findnext(long id, struct _finddata_t *data);
+int _findclose(long id);
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreDefaultHardwareBufferManager.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreDefaultHardwareBufferManager.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreDefaultHardwareBufferManager.h	(revision 1092)
@@ -0,0 +1,112 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __DefaultHardwareBufferManager_H__
+#define __DefaultHardwareBufferManager_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreHardwareBufferManager.h"
+#include "OgreHardwareVertexBuffer.h"
+#include "OgreHardwareIndexBuffer.h"
+
+namespace Ogre {
+
+    /// Specialisation of HardwareVertexBuffer for emulation
+    class _OgreExport DefaultHardwareVertexBuffer : public HardwareVertexBuffer 
+    {
+	protected:
+		unsigned char* mpData;
+        /** See HardwareBuffer. */
+        void* lockImpl(size_t offset, size_t length, LockOptions options);
+        /** See HardwareBuffer. */
+		void unlockImpl(void);
+    public:
+		DefaultHardwareVertexBuffer(size_t vertexSize, size_t numVertices, 
+            HardwareBuffer::Usage usage);
+        ~DefaultHardwareVertexBuffer();
+        /** See HardwareBuffer. */
+        void readData(size_t offset, size_t length, void* pDest);
+        /** See HardwareBuffer. */
+        void writeData(size_t offset, size_t length, const void* pSource,
+				bool discardWholeBuffer = false);
+        /** Override HardwareBuffer to turn off all shadowing. */
+        void* lock(size_t offset, size_t length, LockOptions options);
+        /** Override HardwareBuffer to turn off all shadowing. */
+		void unlock(void);
+
+
+    };
+
+	/// Specialisation of HardwareIndexBuffer for emulation
+    class _OgreExport DefaultHardwareIndexBuffer : public HardwareIndexBuffer
+    {
+	protected:
+		unsigned char* mpData;
+        /** See HardwareBuffer. */
+        void* lockImpl(size_t offset, size_t length, LockOptions options);
+        /** See HardwareBuffer. */
+		void unlockImpl(void);
+    public:
+		DefaultHardwareIndexBuffer(IndexType idxType, size_t numIndexes, HardwareBuffer::Usage usage);
+        ~DefaultHardwareIndexBuffer();
+        /** See HardwareBuffer. */
+        void readData(size_t offset, size_t length, void* pDest);
+        /** See HardwareBuffer. */
+        void writeData(size_t offset, size_t length, const void* pSource,
+				bool discardWholeBuffer = false);
+        /** Override HardwareBuffer to turn off all shadowing. */
+        void* lock(size_t offset, size_t length, LockOptions options);
+        /** Override HardwareBuffer to turn off all shadowing. */
+		void unlock(void);
+
+    };
+
+	/** Specialisation of HardwareBufferManager to emulate hardware buffers.
+	@remarks
+		You might want to instantiate this class if you want to utilise
+		classes like MeshSerializer without having initialised the 
+		rendering system (which is required to create a 'real' hardware
+		buffer manager.
+	*/
+	class _OgreExport DefaultHardwareBufferManager : public HardwareBufferManager
+	{
+    public:
+        DefaultHardwareBufferManager();
+        ~DefaultHardwareBufferManager();
+        /// Creates a vertex buffer
+		HardwareVertexBufferSharedPtr 
+            createVertexBuffer(size_t vertexSize, size_t numVerts, 
+				HardwareBuffer::Usage usage, bool useShadowBuffer = false);
+		/// Create a hardware vertex buffer
+		HardwareIndexBufferSharedPtr 
+            createIndexBuffer(HardwareIndexBuffer::IndexType itype, size_t numIndexes, 
+				HardwareBuffer::Usage usage, bool useShadowBuffer = false);
+
+    };
+
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreCommon.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreCommon.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreCommon.h	(revision 1092)
@@ -0,0 +1,315 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __Common_H__
+#define __Common_H__
+// Common stuff
+
+#include <utility>
+
+namespace Ogre {
+
+
+    /** Comparison functions used for the depth/stencil buffer operations and 
+		others. */
+    enum CompareFunction
+    {
+        CMPF_ALWAYS_FAIL,
+        CMPF_ALWAYS_PASS,
+        CMPF_LESS,
+        CMPF_LESS_EQUAL,
+        CMPF_EQUAL,
+        CMPF_NOT_EQUAL,
+        CMPF_GREATER_EQUAL,
+        CMPF_GREATER
+    };
+
+    /** High-level filtering options providing shortcuts to settings the
+        minification, magnification and mip filters. */
+    enum TextureFilterOptions
+    {
+        /// Equal to: min=FO_POINT, mag=FO_POINT, mip=FO_NONE
+        TFO_NONE,
+        /// Equal to: min=FO_LINEAR, mag=FO_LINEAR, mip=FO_POINT
+        TFO_BILINEAR,
+        /// Equal to: min=FO_LINEAR, mag=FO_LINEAR, mip=FO_LINEAR
+        TFO_TRILINEAR,
+        /// Equal to: min=FO_ANISOTROPIC, max=FO_ANISOTROPIC, mip=FO_LINEAR
+		TFO_ANISOTROPIC
+    };
+
+    enum FilterType
+    {
+        /// The filter used when shrinking a texture
+        FT_MIN,
+        /// The filter used when magnifiying a texture
+        FT_MAG,
+        /// The filter used when determining the mipmap
+        FT_MIP
+    };
+    /** Filtering options for textures / mipmaps. */
+    enum FilterOptions
+    {
+        /// No filtering, used for FILT_MIP to turn off mipmapping
+        FO_NONE,
+        /// Use the closest pixel
+        FO_POINT,
+        /// Average of a 2x2 pixel area, denotes bilinear for MIN and MAG, trilinear for MIP
+        FO_LINEAR,
+        /// Similar to FO_LINEAR, but compensates for the angle of the texture plane
+        FO_ANISOTROPIC
+    };
+
+    /** Light shading modes. */
+    enum ShadeOptions
+    {
+        SO_FLAT,
+        SO_GOURAUD,
+        SO_PHONG
+    };
+
+    /** Fog modes. */
+    enum FogMode
+    {
+        /// No fog. Duh.
+        FOG_NONE,
+        /// Fog density increases  exponentially from the camera (fog = 1/e^(distance * density))
+        FOG_EXP,
+        /// Fog density increases at the square of FOG_EXP, i.e. even quicker (fog = 1/e^(distance * density)^2)
+        FOG_EXP2,
+        /// Fog density increases linearly between the start and end distances
+        FOG_LINEAR
+    };
+
+    /** Hardware culling modes based on vertex winding.
+        This setting applies to how the hardware API culls triangles it is sent. */
+    enum CullingMode
+    {
+        /// Hardware never culls triangles and renders everything it receives.
+        CULL_NONE = 1,
+        /// Hardware culls triangles whose vertices are listed clockwise in the view (default).
+        CULL_CLOCKWISE = 2,
+        /// Hardware culls triangles whose vertices are listed anticlockwise in the view.
+        CULL_ANTICLOCKWISE = 3
+    };
+
+    /** Manual culling modes based on vertex normals.
+        This setting applies to how the software culls triangles before sending them to the 
+		hardware API. This culling mode is used by scene managers which choose to implement it -
+		normally those which deal with large amounts of fixed world geometry which is often 
+		planar (software culling movable variable geometry is expensive). */
+    enum ManualCullingMode
+    {
+        /// No culling so everything is sent to the hardware.
+        MANUAL_CULL_NONE = 1,
+        /// Cull triangles whose normal is pointing away from the camera (default).
+        MANUAL_CULL_BACK = 2,
+        /// Cull triangles whose normal is pointing towards the camera.
+        MANUAL_CULL_FRONT = 3
+    };
+
+    /** Enumerates the wave types usable with the Ogre engine. */
+    enum WaveformType
+    {
+        /// Standard sine wave which smoothly changes from low to high and back again.
+        WFT_SINE,
+        /// An angular wave with a constant increase / decrease speed with pointed peaks.
+        WFT_TRIANGLE,
+        /// Half of the time is spent at the min, half at the max with instant transition between.
+        WFT_SQUARE,
+        /// Gradual steady increase from min to max over the period with an instant return to min at the end.
+        WFT_SAWTOOTH,
+        /// Gradual steady decrease from max to min over the period, with an instant return to max at the end.
+        WFT_INVERSE_SAWTOOTH
+    };
+
+    /** The broad type of detail for rendering. */
+    enum SceneDetailLevel
+    {
+		/// Only points are rendered.
+        SDL_POINTS = 1,
+		/// Wireframe models are rendered.
+        SDL_WIREFRAME = 2,
+		/// Solid polygons are rendered.
+        SDL_SOLID = 3
+    };
+
+    /** An enumeration of broad shadow techniques */
+    enum ShadowTechnique
+    {
+        /** No shadows */
+        SHADOWTYPE_NONE,
+        /** Stencil shadow technique which renders all shadow volumes as
+            a modulation after all the non-transparent areas have been 
+            rendered. This technique is considerably less fillrate intensive 
+            than the additive stencil shadow approach when there are multiple
+            lights, but is not an accurate model. 
+        */
+        SHADOWTYPE_STENCIL_MODULATIVE,
+        /** Stencil shadow technique which renders each light as a separate
+            additive pass to the scene. This technique can be very fillrate
+            intensive because it requires at least 2 passes of the entire
+            scene, more if there are multiple lights. However, it is a more
+            accurate model than the modulative stencil approach and this is
+            especially apparant when using coloured lights or bump mapping.
+        */
+        SHADOWTYPE_STENCIL_ADDITIVE,
+        /** Texture-based shadow technique which involves a monochrome render-to-texture
+            of the shadow caster and a projection of that texture onto the 
+            shadow receivers as a modulative pass. 
+        */
+        SHADOWTYPE_TEXTURE_MODULATIVE
+    };
+
+    /** An enumeration describing which material properties should track the vertex colours */
+    typedef int TrackVertexColourType;
+    enum TrackVertexColourEnum {
+        TVC_NONE        = 0x0,
+        TVC_AMBIENT     = 0x1,        
+        TVC_DIFFUSE     = 0x2,
+        TVC_SPECULAR    = 0x4,
+        TVC_EMISSIVE    = 0x8
+    };
+
+    typedef std::vector<Light*> LightList;
+
+    typedef std::map<String, bool> UnaryOptionList;
+    typedef std::map<String, String> BinaryOptionList;
+
+	/// Name / value parameter pair (first = name, second = value)
+	typedef std::map<String, String> NameValuePairList;
+
+        /** Structure used to define a rectangle in a 2-D integer space.
+        */
+        struct Rect
+        {
+            long left, top, right, bottom;
+
+            Rect()
+            {
+            }
+            Rect( long l, long t, long r, long b )
+            {
+                left = l;
+                top = t;   
+                right = r;
+                bottom = b;                
+            }
+            Rect& operator = ( const Rect& other )
+            {
+                left = other.left;
+                top = other.top;
+                right = other.right;
+                bottom = other.bottom;       
+
+                return *this;
+            }
+        };
+
+        /** Structure used to define a box in a 3-D integer space.
+         	Note that the left, top, and front edges are included but the right, 
+         	bottom and top ones are not.
+         */
+        struct Box
+        {
+            size_t left, top, right, bottom, front, back;
+			/// Parameterless constructor for setting the members manually
+            Box()
+            {
+            }
+            /** Define a box from left, top, right and bottom coordinates
+            	This box will have depth one (front=0 and back=1).
+            	@param	l	x value of left edge
+            	@param	t	y value of top edge
+            	@param	r	x value of right edge
+            	@param	b	y value of bottom edge
+            	@note Note that the left, top, and front edges are included 
+ 		           	but the right, bottom and top ones are not.
+            */
+            Box( size_t l, size_t t, size_t r, size_t b ):
+                left(l),
+                top(t),   
+                right(r),
+                bottom(b),
+                front(0),
+                back(1)
+            {
+          		assert(right >= left && bottom >= top && back >= front);
+            }
+            /** Define a box from left, top, front, right, bottom and back
+            	coordinates.
+            	@param	l	x value of left edge
+            	@param	t	y value of top edge
+            	@param  ff  z value of front edge
+            	@param	r	x value of right edge
+            	@param	b	y value of bottom edge
+            	@param  bb  z value of back edge
+            	@note Note that the left, top, and front edges are included 
+ 		           	but the right, bottom and top ones are not.
+            */
+            Box( size_t l, size_t t, size_t ff, size_t r, size_t b, size_t bb ):
+                left(l),
+                top(t),   
+                right(r),
+                bottom(b),
+                front(ff),
+                back(bb)
+            {
+          		assert(right >= left && bottom >= top && back >= front);
+            }
+            
+            /// Return true if the other box is a part of this one
+            bool contains(const Box &def) const
+            {
+            	return (def.left >= left && def.top >= top && def.front >= front &&
+					def.right <= right && def.bottom <= bottom && def.back <= back);
+            }
+            
+            /// Get the width of this box
+            size_t getWidth() const { return right-left; }
+            /// Get the height of this box
+            size_t getHeight() const { return bottom-top; }
+            /// Get the depth of this box
+            size_t getDepth() const { return back-front; }
+        };
+
+    
+	
+	/** Locate command-line options of the unary form '-blah' and of the
+        binary form '-blah foo', passing back the index of the next non-option.
+    @param numargs, argv The standard parameters passed to the main method
+    @param unaryOptList Map of unary options (ie those that do not require a parameter).
+        Should be pre-populated with, for example '-e' in the key and false in the 
+        value. Options which are found will be set to true on return.
+    @param binOptList Map of binnary options (ie those that require a parameter
+        e.g. '-e afile.txt').
+        Should be pre-populated with, for example '-e' and the default setting. 
+        Options which are found will have the value updated.
+    */
+    int _OgreExport findCommandLineOpts(int numargs, char** argv, UnaryOptionList& unaryOptList, 
+        BinaryOptionList& binOptList);
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMaterialSerializer.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMaterialSerializer.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMaterialSerializer.h	(revision 1092)
@@ -0,0 +1,217 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __MaterialSerializer_H__
+#define __MaterialSerializer_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreMaterial.h"
+#include "OgreBlendMode.h"
+#include "OgreTextureUnitState.h"
+#include "OgreGpuProgram.h"
+#include "OgreStringVector.h"
+
+namespace Ogre {
+
+    /** Enum to identify material sections. */
+    enum MaterialScriptSection
+    {
+        MSS_NONE,
+        MSS_MATERIAL,
+        MSS_TECHNIQUE,
+        MSS_PASS,
+        MSS_TEXTUREUNIT,
+        MSS_PROGRAM_REF,
+		MSS_PROGRAM,
+        MSS_DEFAULT_PARAMETERS,
+		MSS_TEXTURESOURCE
+    };
+	/** Struct for holding a program definition which is in progress. */
+	struct MaterialScriptProgramDefinition
+	{
+		String name;
+		GpuProgramType progType;
+        String language;
+		String source;
+		String syntax;
+        bool supportsSkeletalAnimation;
+		std::map<String, String> customParameters;
+	};
+    /** Struct for holding the script context while parsing. */
+    struct MaterialScriptContext 
+    {
+        MaterialScriptSection section;
+		String groupName;
+        MaterialPtr material;
+        Technique* technique;
+        Pass* pass;
+        TextureUnitState* textureUnit;
+        GpuProgramPtr program; // used when referencing a program, not when defining it
+        bool isProgramShadowCaster; // when referencing, are we in context of shadow caster
+        bool isProgramShadowReceiver; // when referencing, are we in context of shadow caster
+        GpuProgramParametersSharedPtr programParams;
+		MaterialScriptProgramDefinition* programDef; // this is used while defining a program
+
+		int techLev,	//Keep track of what tech, pass, and state level we are in
+			passLev,
+			stateLev;
+        StringVector defaultParamLines;
+
+		// Error reporting state
+        size_t lineNo;
+        String filename;
+    };
+    /// Function def for material attribute parser; return value determines if the next line should be {
+    typedef bool (*ATTRIBUTE_PARSER)(String& params, MaterialScriptContext& context);
+
+    /** Class for serializing Materials to / from a .material script.*/
+    class _OgreExport MaterialSerializer
+    {
+    protected:
+        /// Keyword-mapped attribute parsers.
+        typedef std::map<String, ATTRIBUTE_PARSER> AttribParserList;
+
+        MaterialScriptContext mScriptContext;
+
+        /** internal method for parsing a material
+        @returns true if it expects the next line to be a {
+        */
+        bool parseScriptLine(String& line);
+        /** internal method for finding & invoking an attribute parser. */
+        bool invokeParser(String& line, AttribParserList& parsers);
+		/** Internal method for saving a program definition which has been
+		    built up.
+		*/
+		void finishProgramDefinition(void);
+        /// Parsers for the root of the material script
+        AttribParserList mRootAttribParsers;
+        /// Parsers for the material section of a script
+        AttribParserList mMaterialAttribParsers;
+        /// Parsers for the technique section of a script
+        AttribParserList mTechniqueAttribParsers;
+        /// Parsers for the pass section of a script
+        AttribParserList mPassAttribParsers;
+        /// Parsers for the texture unit section of a script
+        AttribParserList mTextureUnitAttribParsers;
+        /// Parsers for the program reference section of a script
+        AttribParserList mProgramRefAttribParsers;
+        /// Parsers for the program definition section of a script
+        AttribParserList mProgramAttribParsers;
+        /// Parsers for the program definition section of a script
+        AttribParserList mProgramDefaultParamAttribParsers;
+
+        void writeMaterial(const MaterialPtr& pMat);
+        void writeTechnique(const Technique* pTech);
+        void writePass(const Pass* pPass);
+		void writeTextureUnit(const TextureUnitState *pTex);
+
+		void writeSceneBlendFactor(const SceneBlendFactor sbf_src, const SceneBlendFactor sbf_dest);
+		void writeSceneBlendFactor(const SceneBlendFactor sbf);
+		void writeCompareFunction(const CompareFunction cf);
+		void writeColourValue(const ColourValue &colour, bool writeAlpha = false);
+		void writeLayerBlendOperationEx(const LayerBlendOperationEx op);
+		void writeLayerBlendSource(const LayerBlendSource lbs);
+		
+		typedef std::multimap<TextureUnitState::TextureEffectType, TextureUnitState::TextureEffect> EffectMap;
+
+		void writeRotationEffect(const TextureUnitState::TextureEffect& effect, const TextureUnitState *pTex);
+		void writeTransformEffect(const TextureUnitState::TextureEffect& effect, const TextureUnitState *pTex);
+		void writeScrollEffect(const TextureUnitState::TextureEffect& effect, const TextureUnitState *pTex);
+		void writeEnvironmentMapEffect(const TextureUnitState::TextureEffect& effect, const TextureUnitState *pTex);
+
+        String convertFiltering(FilterOptions fo);
+    public:
+		/** default constructor*/
+		MaterialSerializer();
+		/** default destructor*/
+		virtual ~MaterialSerializer() {};
+
+		/** Queue an in-memory Material to the internal buffer for export.*/
+        void queueForExport(const MaterialPtr& pMat, bool clearQueued = false, bool exportDefaults = false);
+        /** Exports queued material(s) to a named material script file. */
+		void exportQueued(const String& filename);
+        /** Exports an in-memory Material to the named material script file. */
+        void exportMaterial(const MaterialPtr& pMat, const String& filename, bool exportDefaults = false);
+		/** Returns a string representing the parsed material(s) */
+		const String &getQueuedAsString() const;
+		/** Clears the internal buffer */
+		void clearQueue();
+
+        /** Parses a Material script file passed as a stream.
+        */
+        void parseScript(DataStreamPtr& stream, const String& groupName);
+
+
+
+	private:
+		String mBuffer;
+		bool mDefaults;
+
+		void beginSection(unsigned short level)
+		{
+			mBuffer += "\n";
+            for (unsigned short i = 0; i < level; ++i)
+            {
+                mBuffer += "\t";
+            }
+            mBuffer += "{";
+		}
+		void endSection(unsigned short level)
+		{
+			mBuffer += "\n";
+            for (unsigned short i = 0; i < level; ++i)
+            {
+                mBuffer += "\t";
+            }
+            mBuffer += "}";
+		}
+
+		void writeAttribute(unsigned short level, const String& att)
+		{
+			mBuffer += "\n";
+            for (unsigned short i = 0; i < level; ++i)
+            {
+                mBuffer += "\t";
+            }
+            mBuffer += att;
+		}
+
+		void writeValue(const String& val)
+		{
+			mBuffer += (" " + val);
+		}
+
+		void writeComment(unsigned short level, const String& comment)
+		{
+			mBuffer += "\n";
+            for (unsigned short i = 0; i < level; ++i)
+            {
+                mBuffer += "\t";
+            }
+            mBuffer += "// " + comment;
+		}
+
+    };
+}
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePlaneBoundedVolume.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePlaneBoundedVolume.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePlaneBoundedVolume.h	(revision 1092)
@@ -0,0 +1,131 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __PlaneBoundedVolume_H_
+#define __PlaneBoundedVolume_H_
+
+// Precompiler options
+#include "OgrePrerequisites.h"
+#include "OgreAxisAlignedBox.h"
+#include "OgreSphere.h"
+#include "OgreMath.h"
+#include "OgrePlane.h"
+
+namespace Ogre {
+
+    /** Represents a convex volume bounded by planes.
+    */
+    class _OgreExport PlaneBoundedVolume
+    {
+    public:
+        typedef std::vector<Plane> PlaneList;
+        /// Publicly accessible plane list, you can modify this direct
+        PlaneList planes;
+        Plane::Side outside;
+
+        PlaneBoundedVolume() :outside(Plane::NEGATIVE_SIDE) {}
+        /** Constructor, determines which side is deemed to be 'outside' */
+        PlaneBoundedVolume(Plane::Side theOutside) 
+            : outside(theOutside) {}
+
+        /** Intersection test with AABB
+        @remarks May return false positives but will never miss an intersection.
+        */
+        inline bool intersects(const AxisAlignedBox& box) const
+        {
+            if (box.isNull()) return false;
+            // If all points are on outside of any plane, we fail
+            const Vector3* points = box.getAllCorners();
+            PlaneList::const_iterator i, iend;
+            iend = planes.end();
+            for (i = planes.begin(); i != iend; ++i)
+            {
+                const Plane& plane = *i;
+
+                // Test which side of the plane the corners are
+                // Intersection fails when at all corners are on the
+                // outside of one plane
+                bool splittingPlane = true;
+                for (int corner = 0; corner < 8; ++corner)
+                {
+                    if (plane.getSide(points[corner]) != outside)
+                    {
+                        // this point is on the wrong side
+                        splittingPlane = false;
+                        break;
+                    }
+                }
+                if (splittingPlane)
+                {
+                    // Found a splitting plane therefore return not intersecting
+                    return false;
+                }
+            }
+
+            // couldn't find a splitting plane, assume intersecting
+            return true;
+
+        }
+        /** Intersection test with Sphere
+        @remarks May return false positives but will never miss an intersection.
+        */
+        inline bool intersects(const Sphere& sphere) const
+        {
+            PlaneList::const_iterator i, iend;
+            iend = planes.end();
+            for (i = planes.begin(); i != iend; ++i)
+            {
+                const Plane& plane = *i;
+
+                // Test which side of the plane the sphere is
+                Real d = plane.getDistance(sphere.getCenter());
+                // Negate d if planes point inwards
+                if (outside == Plane::NEGATIVE_SIDE) d = -d;
+
+                if ( (d - sphere.getRadius()) > 0)
+                    return false;
+            }
+
+            return true;
+
+        }
+
+        /** Intersection test with a Ray
+        @returns std::pair of hit (bool) and distance
+        @remarks May return false positives but will never miss an intersection.
+        */
+        inline std::pair<bool, Real> intersects(const Ray& ray)
+        {
+            return Math::intersects(ray, planes, outside == Plane::POSITIVE_SIDE);
+        }
+
+    };
+
+    typedef std::vector<PlaneBoundedVolume> PlaneBoundedVolumeList;
+
+
+}
+
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMesh.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMesh.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMesh.h	(revision 1092)
@@ -0,0 +1,654 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __Mesh_H__
+#define __Mesh_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreResource.h"
+#include "OgreVertexIndexData.h"
+#include "OgreAxisAlignedBox.h"
+#include "OgreVertexBoneAssignment.h"
+#include "OgreAnimationState.h"
+#include "OgreIteratorWrappers.h"
+#include "OgreProgressiveMesh.h"
+#include "OgreHardwareVertexBuffer.h"
+#include "OgreSkeleton.h"
+
+
+namespace Ogre {
+
+
+    /** Resource holding data about 3D mesh.
+        @remarks
+            This class holds the data used to represent a discrete
+            3-dimensional object. Mesh data usually contains more
+            than just vertices and triangle information; it also
+            includes references to materials (and the faces which use them),
+            level-of-detail reduction information, convex hull definition,
+            skeleton/bones information, keyframe animation etc.
+            However, it is important to note the emphasis on the word
+            'discrete' here. This class does not cover the large-scale
+            sprawling geometry found in level / landscape data.
+        @par
+            Multiple world objects can (indeed should) be created from a
+            single mesh object - see the Entity class for more info.
+            The mesh object will have it's own default
+            material properties, but potentially each world instance may
+            wish to customise the materials from the original. When the object
+            is instantiated into a scene node, the mesh material properties
+            will be taken by default but may be changed. These properties
+            are actually held at the SubMesh level since a single mesh may
+            have parts with different materials.
+        @par
+            As described above, because the mesh may have sections of differing
+            material properties, a mesh is inherently a compound contruct,
+            consisting of one or more SubMesh objects.
+            However, it strongly 'owns' it's SubMeshes such that they
+            are loaded / unloaded at the same time. This is contrary to
+            the approach taken to hierarchically related (but loosely owned)
+            scene nodes, where data is loaded / unloaded separately. Note
+            also that mesh sub-sections (when used in an instantiated object)
+            share the same scene node as the parent.
+    */
+
+
+    struct MeshLodUsage;
+
+    class _OgreExport Mesh: public Resource
+    {
+        friend class SubMesh;
+        friend class MeshSerializerImpl;
+        friend class MeshSerializerImpl_v1_2;
+        friend class MeshSerializerImpl_v1_1;
+
+    public:
+		typedef std::vector<Real> LodDistanceList;
+        /// Multimap of vertex bone assignments (orders by vertex index)
+        typedef std::multimap<size_t, VertexBoneAssignment> VertexBoneAssignmentList;
+        typedef MapIterator<VertexBoneAssignmentList> BoneAssignmentIterator;
+        typedef std::vector<SubMesh*> SubMeshList;
+
+    protected:
+        /** A list of submeshes which make up this mesh.
+            Each mesh is made up of 1 or more submeshes, which
+            are each based on a single material and can have their
+            own vertex data (they may not - they can share vertex data
+            from the Mesh, depending on preference).
+        */
+        SubMeshList mSubMeshList;
+	
+        /** Internal method for making the space for a 3D texture coord buffer to hold tangents. */
+        void organiseTangentsBuffer(VertexData *vertexData, unsigned short destCoordSet);
+
+    public:
+		/** A hashmap used to store optional SubMesh names.
+			Translates a name into SubMesh index
+		*/
+		typedef HashMap<String, ushort> SubMeshNameMap ;
+    protected:
+		SubMeshNameMap mSubMeshNameMap ;
+
+        /// Local bounding box volume
+        AxisAlignedBox mAABB;
+		/// Local bounding sphere radius (centered on object)
+		Real mBoundRadius;
+
+        /// Optional linked skeleton
+        String mSkeletonName;
+        SkeletonPtr mSkeleton;
+
+       
+        VertexBoneAssignmentList mBoneAssignments;
+
+        /// Flag indicating that bone assignments need to be recompiled
+        bool mBoneAssignmentsOutOfDate;
+
+        /** Compile bone assignments into blend index and weight buffers. */
+        void compileBoneAssignments(const VertexBoneAssignmentList& boneAssignments,
+            unsigned short numBlendWeightsPerVertex, 
+            VertexData* targetVertexData);
+        /** Software blending oriented bone assignment compilation */
+        void compileBoneAssignmentsSoftware(const VertexBoneAssignmentList& boneAssignments,
+            unsigned short numBlendWeightsPerVertex, VertexData* targetVertexData);
+
+
+		bool mIsLodManual;
+		ushort mNumLods;
+		typedef std::vector<MeshLodUsage> MeshLodUsageList;
+		MeshLodUsageList mMeshLodUsageList;
+
+		HardwareBuffer::Usage mVertexBufferUsage;
+		HardwareBuffer::Usage mIndexBufferUsage;
+		bool mVertexBufferShadowBuffer;
+		bool mIndexBufferShadowBuffer;
+
+
+        bool mPreparedForShadowVolumes;
+        bool mEdgeListsBuilt;
+        bool mAutoBuildEdgeLists;
+
+        /// @copydoc Resource::loadImpl
+        void loadImpl(void);
+        /// @copydoc Resource::unloadImpl
+        void unloadImpl(void);
+		/// @copydoc Resource::calculateSize
+		size_t calculateSize(void) const;
+
+    public:
+        /** Default constructor - used by MeshManager
+            @warning
+                Do not call this method directly.
+        */
+        Mesh(ResourceManager* creator, const String& name, ResourceHandle handle,
+            const String& group, bool isManual = false, ManualResourceLoader* loader = 0);
+        ~Mesh();
+
+		/// @copydoc Resource::load
+		void load(void);
+
+		// NB All methods below are non-virtual since they will be
+        // called in the rendering loop - speed is of the essence.
+
+        /** Creates a new SubMesh.
+            @remarks
+                Method for manually creating geometry for the mesh.
+                Note - use with extreme caution - you must be sure that
+                you have set up the geometry properly.
+        */
+        SubMesh* createSubMesh(void);
+
+		/** Creates a new SubMesh and gives it a name
+		*/
+		SubMesh* createSubMesh(const String& name);
+		
+		/** Gives a name to a SubMesh
+		*/
+		void nameSubMesh(const String& name, ushort index);
+		
+		/** Gets the index of a submesh with a given name.
+        @remarks
+            Useful if you identify the SubMeshes by name (using nameSubMesh)
+            but wish to have faster repeat access.
+        */
+		ushort _getSubMeshIndex(const String& name) const;
+
+        /** Gets the number of sub meshes which comprise this mesh.
+        */
+        unsigned short getNumSubMeshes(void) const;
+
+        /** Gets a pointer to the submesh indicated by the index.
+        */
+        SubMesh* getSubMesh(unsigned short index) const;
+
+		/** Gets a SubMesh by name
+		*/
+		SubMesh* getSubMesh(const String& name) const ;
+
+        typedef VectorIterator<SubMeshList> SubMeshIterator;
+        /// Gets an iterator over the available submeshes
+        SubMeshIterator getSubMeshIterator(void)
+        { return SubMeshIterator(mSubMeshList.begin(), mSubMeshList.end()); }
+      
+        /** Shared vertex data.
+            @remarks
+                This vertex data can be shared among multiple submeshes. SubMeshes may not have
+                their own VertexData, they may share this one.
+            @par
+                The use of shared or non-shared buffers is determined when
+                model data is converted to the OGRE .mesh format.
+        */
+        VertexData *sharedVertexData;
+
+        /** Makes a copy of this mesh object and gives it a new name.
+            @remarks
+                This is useful if you want to tweak an existing mesh without affecting the original one. The
+                newly cloned mesh is registered with the MeshManager under the new name.
+            @param newName The name to give the clone
+            @param newGroup Optional name of the new group to assign the clone to;
+                if you leave this blank, the clone will be assigned to the same
+                group as this Mesh.
+        */
+        MeshPtr clone(const String& newName, const String& newGroup = StringUtil::BLANK);
+
+        /** Get the axis-aligned bounding box for this mesh.
+        */
+        const AxisAlignedBox& getBounds(void) const;
+
+		/** Gets the radius of the bounding sphere surrounding this mesh. */
+		Real getBoundingSphereRadius(void) const;
+
+        /** Manually set the bounding box for this Mesh.
+            @remarks
+            Calling this method is required when building manual meshes now, because OGRE can no longer 
+            update the bounds for you, because it cannot necessarily read vertex data back from 
+            the vertex buffers which this mesh uses (they very well might be write-only, and even
+            if they are not, reading data from a hardware buffer is a bottleneck).
+            @param pad If true, a certain padding will be added to the bounding box to separate it from the mesh
+        */
+        void _setBounds(const AxisAlignedBox& bounds, bool pad = true);
+
+        /** Manually set the bounding radius. 
+        @remarks
+            Calling this method is required when building manual meshes now, because OGRE can no longer 
+            update the bounds for you, because it cannot necessarily read vertex data back from 
+            the vertex buffers which this mesh uses (they very well might be write-only, and even
+            if they are not, reading data from a hardware buffer is a bottleneck).
+        */
+        void _setBoundingSphereRadius(Real radius);
+
+        /** Sets the name of the skeleton this Mesh uses for animation.
+        @remarks
+            Meshes can optionally be assigned a skeleton which can be used to animate
+            the mesh through bone assignments. The default is for the Mesh to use no
+            skeleton. Calling this method with a valid skeleton filename will cause the
+            skeleton to be loaded if it is not already (a single skeleton can be shared
+            by many Mesh objects).
+        @param skelName The name of the .skeleton file to use, or an empty string to use
+            no skeleton
+        */
+        void setSkeletonName(const String& skelName);
+
+        /** Returns true if this Mesh has a linked Skeleton. */
+        bool hasSkeleton(void) const;
+
+        /** Gets a pointer to any linked Skeleton. 
+        @returns Weak reference to the skeleton - copy this if you want to hold a strong pointer.
+        */
+        const SkeletonPtr& getSkeleton(void) const;
+
+        /** Gets the name of any linked Skeleton */
+        const String& getSkeletonName(void) const;
+        /** Initialise an animation set suitable for use with this mesh. 
+        @remarks
+            Only recommended for use inside the engine, not by applications.
+        */
+        void _initAnimationState(AnimationStateSet* animSet);
+
+        /** Assigns a vertex to a bone with a given weight, for skeletal animation. 
+        @remarks    
+            This method is only valid after calling setSkeletonName.
+            Since this is a one-off process there exists only 'addBoneAssignment' and
+            'clearBoneAssignments' methods, no 'editBoneAssignment'. You should not need
+            to modify bone assignments during rendering (only the positions of bones) and OGRE
+            reserves the right to do some internal data reformatting of this information, depending
+            on render system requirements.
+        @par
+            This method is for assigning weights to the shared geometry of the Mesh. To assign
+            weights to the per-SubMesh geometry, see the equivalent methods on SubMesh.
+        */
+        void addBoneAssignment(const VertexBoneAssignment& vertBoneAssign);
+
+        /** Removes all bone assignments for this mesh. 
+        @remarks
+            This method is for modifying weights to the shared geometry of the Mesh. To assign
+            weights to the per-SubMesh geometry, see the equivalent methods on SubMesh.
+        */
+        void clearBoneAssignments(void);
+
+        /** Internal notification, used to tell the Mesh which Skeleton to use without loading it. 
+        @remarks
+            This is only here for unusual situation where you want to manually set up a
+            Skeleton. Best to let OGRE deal with this, don't call it yourself unless you
+            really know what you're doing.
+        */
+        void _notifySkeleton(SkeletonPtr& pSkel);
+
+
+        /** Gets an iterator for access all bone assignments. 
+        */
+        BoneAssignmentIterator getBoneAssignmentIterator(void);
+
+
+		/** Automatically generates lower level of detail versions of this mesh for use
+			when a simpler version of the model is acceptable for rendering.
+		@remarks
+			There are 2 ways that you can create level-of-detail (LOD) versions of a mesh;
+			the first is to call this method, which does fairly extensive calculations to
+			work out how to simplify the mesh whilst having the minimum affect on the model.
+			The alternative is to actually create simpler versions of the mesh yourself in 
+			a modelling tool, and having exported them, tell the 'master' mesh to use these
+			alternative meshes for lower detail versions; this is done by calling the 
+			createManualLodLevel method.
+		@par
+			As well as creating the lower detail versions of the mesh, this method will
+			also associate them with depth values. As soon as an object is at least as far
+			away from the camera as the depth value associated with it's LOD, it will drop 
+			to that level of detail. 
+		@par
+			I recommend calling this method before mesh export, not at runtime.
+		@param lodDistances A list of depth values indicating the distances at which new lods should be
+			generated. 
+		@param reductionMethod The way to determine the number of vertices collapsed per LOD
+		@param reductionValue Meaning depends on reductionMethod, typically either the proportion
+			of remaining vertices to collapse or a fixed number of vertices.
+		*/
+		void generateLodLevels(const LodDistanceList& lodDistances, 
+			ProgressiveMesh::VertexReductionQuota reductionMethod, Real reductionValue);
+
+		/** Returns the number of levels of detail that this mesh supports. 
+		@remarks
+			This number includes the original model.
+		*/
+		ushort getNumLodLevels(void) const;
+		/** Gets details of the numbered level of detail entry. */
+		const MeshLodUsage& getLodLevel(ushort index) const;
+		/** Adds a new manual level-of-detail entry to this Mesh.
+		@remarks
+			As an alternative to generating lower level of detail versions of a mesh, you can
+			use your own manually modelled meshes as lower level versions. This lets you 
+			have complete control over the LOD, and in addition lets you scale down other
+			aspects of the model which cannot be done using the generated method; for example, 
+			you could use less detailed materials and / or use less bones in the skeleton if
+			this is an animated mesh. Therefore for complex models you are likely to be better off
+			modelling your LODs yourself and using this method, whilst for models with fairly
+			simple materials and no animation you can just use the generateLodLevels method.
+		@param fromDepth The z value from which this Lod will apply.
+		@param meshName The name of the mesh which will be the lower level detail version.
+		*/
+		void createManualLodLevel(Real fromDepth, const String& meshName);
+
+		/** Changes the alternate mesh to use as a manual LOD at the given index.
+		@remarks
+			Note that the index of a LOD may change if you insert other LODs. If in doubt,
+			use getLodIndex().
+		@param index The index of the level to be changed
+		@param meshName The name of the mesh which will be the lower level detail version.
+		*/
+		void updateManualLodLevel(ushort index, const String& meshName);
+
+		/** Retrieves the level of detail index for the given depth value. 
+		*/
+		ushort getLodIndex(Real depth) const;
+
+		/** Retrieves the level of detail index for the given squared depth value. 
+		@remarks
+			Internally the lods are stored at squared depths to avoid having to perform
+			square roots when determining the lod. This method allows you to provide a
+			squared length depth value to avoid having to do your own square roots.
+		*/
+		ushort getLodIndexSquaredDepth(Real squaredDepth) const;
+
+		/** Returns true if this mesh is using manual LOD.
+		@remarks
+			A mesh can either use automatically generated LOD, or it can use alternative
+			meshes as provided by an artist. A mesh can only use either all manual LODs 
+			or all generated LODs, not a mixture of both.
+		*/
+		bool isLodManual(void) const { return mIsLodManual; }
+
+		/** Internal methods for loading LOD, do not use. */
+		void _setLodInfo(unsigned short numLevels, bool isManual);
+		/** Internal methods for loading LOD, do not use. */
+		void _setLodUsage(unsigned short level, MeshLodUsage& usage);
+		/** Internal methods for loading LOD, do not use. */
+		void _setSubMeshLodFaceList(unsigned short subIdx, unsigned short level, IndexData* facedata);
+
+        /** Removes all LOD data from this Mesh. */
+        void removeLodLevels(void);
+
+		/** Sets the policy for the vertex buffers to be used when loading
+			this Mesh.
+		@remarks
+			By default, when loading the Mesh, static, write-only vertex and index buffers 
+			will be used where possible in order to improve rendering performance. 
+			However, such buffers
+			cannot be manipulated on the fly by CPU code (although shader code can). If you
+			wish to use the CPU to modify these buffers, you should call this method. Note,
+			however, that it only takes effect after the Mesh has been reloaded. Note that you
+			still have the option of manually repacing the buffers in this mesh with your
+			own if you see fit too, in which case you don't need to call this method since it
+			only affects buffers created by the mesh itself.
+		@par
+			You can define the approach to a Mesh by changing the default parameters to 
+			MeshManager::load if you wish; this means the Mesh is loaded with those options
+			the first time instead of you having to reload the mesh after changing these options.
+		@param usage The usage flags, which by default are 
+			HardwareBuffer::HBU_STATIC_WRITE_ONLY
+		@param shadowBuffer If set to true, the vertex buffers will be created with a
+            system memory shadow buffer. You should set this if you want to be able to
+			read from the buffer, because reading from a hardware buffer is a no-no.
+		*/
+		void setVertexBufferPolicy(HardwareBuffer::Usage usage, bool shadowBuffer = false);
+		/** Sets the policy for the index buffers to be used when loading
+			this Mesh.
+		@remarks
+			By default, when loading the Mesh, static, write-only vertex and index buffers 
+			will be used where possible in order to improve rendering performance. 
+			However, such buffers
+			cannot be manipulated on the fly by CPU code (although shader code can). If you
+			wish to use the CPU to modify these buffers, you should call this method. Note,
+			however, that it only takes effect after the Mesh has been reloaded. Note that you
+			still have the option of manually repacing the buffers in this mesh with your
+			own if you see fit too, in which case you don't need to call this method since it
+			only affects buffers created by the mesh itself.
+		@par
+			You can define the approach to a Mesh by changing the default parameters to 
+			MeshManager::load if you wish; this means the Mesh is loaded with those options
+			the first time instead of you having to reload the mesh after changing these options.
+		@param usage The usage flags, which by default are 
+			HardwareBuffer::HBU_STATIC_WRITE_ONLY
+		@param shadowBuffer If set to true, the index buffers will be created with a
+            system memory shadow buffer. You should set this if you want to be able to
+			read from the buffer, because reading from a hardware buffer is a no-no.
+		*/
+		void setIndexBufferPolicy(HardwareBuffer::Usage usage, bool shadowBuffer = false);
+        /** Gets the usage setting for this meshes vertex buffers. */
+        HardwareBuffer::Usage getVertexBufferUsage(void) const { return mVertexBufferUsage; }
+        /** Gets the usage setting for this meshes index buffers. */
+        HardwareBuffer::Usage getIndexBufferUsage(void) const { return mIndexBufferUsage; }
+        /** Gets whether or not this meshes vertex buffers are shadowed. */
+        bool isVertexBufferShadowed(void) const { return mVertexBufferShadowBuffer; }
+        /** Gets whether or not this meshes index buffers are shadowed. */
+        bool isIndexBufferShadowed(void) const { return mIndexBufferShadowBuffer; }
+       
+
+        /** Rationalises the passed in bone assignment list.
+        @remarks
+            OGRE supports up to 4 bone assignments per vertex. The reason for this limit
+            is that this is the maximum number of assignments that can be passed into
+            a hardware-assisted blending algorithm. This method identifies where there are
+            more than 4 bone assignments for a given vertex, and eliminates the bone
+            assignments with the lowest weights to reduce to this limit. The remaining
+            weights are then re-balanced to ensure that they sum to 1.0.
+        @param vertexCount The number of vertices.
+        @param assignments The bone assignment list to rationalise. This list will be modified and
+            entries will be removed where the limits are exceeded.
+        @returns The maximum number of bone assignments per vertex found, clamped to [1-4]
+        */
+        unsigned short _rationaliseBoneAssignments(size_t vertexCount, VertexBoneAssignmentList& assignments);
+
+        /** Internal method, be called once to compile bone assignments into geometry buffer. 
+        @remarks
+            The OGRE engine calls this method automatically. It compiles the information 
+            submitted as bone assignments into a format usable in realtime. It also 
+            eliminates excessive bone assignments (max is OGRE_MAX_BLEND_WEIGHTS)
+            and re-normalises the remaining assignments.
+        */
+        void _compileBoneAssignments(void);
+
+        /** This method builds a set of tangent vectors for a given mesh into a 3D texture coordinate buffer.
+        @remarks
+            Tangent vectors are vectors representing the local 'X' axis for a given vertex based
+            on the orientation of the 2D texture on the geometry. They are built from a combination
+            of existing normals, and from the 2D texture coordinates already baked into the model.
+            They can be used for a number of things, but most of all they are useful for 
+            vertex and fragment programs, when you wish to arrive at a common space for doing
+            per-pixel calculations.
+        @par
+            The prerequisites for calling this method include that the vertex data used by every
+            SubMesh has both vertex normals and 2D texture coordinates.
+        @param sourceTexCoordSet The texture coordinate index which should be used as the source
+            of 2D texture coordinates, with which to calculate the tangents.
+        @param destTexCoordSet The texture coordinate set which should be used to store the 3D
+            coordinates representing a tangent vector per vertex. If this already exists, it
+            will be overwritten.
+        */
+        void buildTangentVectors(unsigned short sourceTexCoordSet = 0, unsigned short destTexCoordSet = 1);
+
+        /** Ask the mesh to suggest parameters to a future buildTangentVectors call. 
+        @remarks
+            This helper method will suggest source and destination texture coordinate sets
+            for a call to buildTangentVectors. It will detect when there are inappropriate
+            conditions (such as multiple geometry sets which don't agree). 
+            Moreover, it will return 'true' if it detects that there are aleady 3D 
+            coordinates in the mesh, and therefore tangents may have been prepared already.
+        @param outSourceCoordSet Reference to a source texture coordinate set which 
+            will be populated
+        @param outDestCoordSet Reference to a destination texture coordinate set which 
+            will be populated
+        */
+        bool suggestTangentVectorBuildParams(unsigned short& outSourceCoordSet, unsigned short& outDestCoordSet);
+
+        /** Builds an edge list for this mesh, which can be used for generating a shadow volume
+            among other things.
+        */
+        void buildEdgeList(void);
+        /** Destroys and frees the edge lists this mesh has built. */
+        void freeEdgeList(void);
+
+        /** This method prepares the mesh for generating a renderable shadow volume. 
+        @remarks
+            Preparing a mesh to generate a shadow volume involves firstly ensuring that the 
+            vertex buffer containing the positions for the mesh is a standalone vertex buffer,
+            with no other components in it. This method will therefore break apart any existing
+            vertex buffers this mesh holds if position is sharing a vertex buffer. 
+            Secondly, it will double the size of this vertex buffer so that there are 2 copies of 
+            the position data for the mesh. The first half is used for the original, and the second 
+            half is used for the 'extruded' version of the mesh. The vertex count of the main 
+            VertexData used to render the mesh will remain the same though, so as not to add any 
+            overhead to regular rendering of the object.
+            Both copies of the position are required in one buffer because shadow volumes stretch 
+            from the original mesh to the extruded version. 
+        @par
+            Because shadow volumes are rendered in turn, no additional
+            index buffer space is allocated by this method, a shared index buffer allocated by the
+            shadow rendering algorithm is used for addressing this extended vertex buffer.
+        */
+        void prepareForShadowVolume(void);
+
+        /** Return the edge list for this mesh, building it if required. 
+        @remarks
+            You must ensure that the Mesh as been prepared for shadow volume 
+            rendering if you intend to use this information for that purpose.
+        @lodIndex The LOD at which to get the edge list, 0 being the highest.
+        */
+        EdgeData* getEdgeList(unsigned int lodIndex = 0);
+
+        /** Return the edge list for this mesh, building it if required. 
+        @remarks
+            You must ensure that the Mesh as been prepared for shadow volume 
+            rendering if you intend to use this information for that purpose.
+        @lodIndex The LOD at which to get the edge list, 0 being the highest.
+        */
+        const EdgeData* getEdgeList(unsigned int lodIndex = 0) const;
+
+        /** Returns whether this mesh has already had it's geometry prepared for use in 
+            rendering shadow volumes. */
+        bool isPreparedForShadowVolumes(void) const { return mPreparedForShadowVolumes; }
+
+		/** Returns whether this mesh has an attached edge list. */
+		bool isEdgeListBuilt(void) const { return mEdgeListsBuilt; }
+
+        /** Performs a software indexed vertex blend, of the kind used for
+            skeletal animation although it can be used for other purposes. 
+        @remarks
+        This function is supplied to update vertex data with blends 
+        done in software, either because no hardware support is available, 
+        or that you need the results of the blend for some other CPU operations.
+        @param sourceVertexData VertexData class containing positions, normals,
+            blend indices and blend weights.
+        @param targetVertexData VertexData class containing target position
+            and normal buffers which will be updated with the blended versions.
+            Note that the layout of the source and target position / normal 
+            buffers must be identical, ie they must use the same buffer indexes
+        @param pMatrices Pointer to an array of matrices to be used to blend
+        @param blendNormals If true, normals are blended as well as positions
+        */
+        static void softwareVertexBlend(const VertexData* sourceVertexData, 
+            const VertexData* targetVertexData, const Matrix4* pMatrices, 
+            bool blendNormals);
+
+        /** Gets a reference to the optional name assignments of the SubMeshes. */
+        const SubMeshNameMap& getSubMeshNameMap(void) const { return mSubMeshNameMap; }
+
+        /** Sets whether or not this Mesh should automatically build edge lists
+            when asked for them, or whether it should never build them if
+            they are not already provided.
+        @remarks
+            This allows you to create meshes which do not have edge lists calculated, 
+            because you never want to use them. This value defaults to 'true'
+            for mesh formats which did not include edge data, and 'false' for 
+            newer formats, where edge lists are expected to have been generated
+            in advance.
+        */
+        void setAutoBuildEdgeLists(bool autobuild) { mAutoBuildEdgeLists = autobuild; }
+        /** Sets whether or not this Mesh should automatically build edge lists
+            when asked for them, or whether it should never build them if
+            they are not already provided.
+        */
+        bool getAutoBuildEdgeLists(void) const { return mAutoBuildEdgeLists; }
+
+
+    };
+
+    /** Specialisation of SharedPtr to allow SharedPtr to be assigned to MeshPtr 
+    @note Has to be a subclass since we need operator=.
+    We could templatise this instead of repeating per Resource subclass, 
+    except to do so requires a form VC6 does not support i.e.
+    ResourceSubclassPtr<T> : public SharedPtr<T>
+    */
+    class _OgreExport MeshPtr : public SharedPtr<Mesh> 
+    {
+    public:
+        MeshPtr() : SharedPtr<Mesh>() {}
+        explicit MeshPtr(Mesh* rep) : SharedPtr<Mesh>(rep) {}
+        MeshPtr(const MeshPtr& r) : SharedPtr<Mesh>(r) {} 
+        MeshPtr(const ResourcePtr& r);
+        /// Operator used to convert a ResourcePtr to a MeshPtr
+        MeshPtr& operator=(const ResourcePtr& r);
+    protected:
+        /// Override destroy since we need to delete Mesh after fully defined
+        void destroy(void);
+    };
+
+	/** A way of recording the way each LODs is recorded this Mesh. */
+	struct MeshLodUsage
+	{
+		/// squared Z value from which this LOD will apply
+		Real fromDepthSquared;
+		/// Only relevant if mIsLodManual is true, the name of the alternative mesh to use
+		String manualName;
+		/// Hard link to mesh to avoid looking up each time
+		mutable MeshPtr manualMesh;
+        /// Edge list for this LOD level (may be derived from manual mesh)
+        mutable EdgeData* edgeData;
+	};
+
+
+
+} // namespace
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreAxisAlignedBox.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreAxisAlignedBox.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreAxisAlignedBox.h	(revision 1092)
@@ -0,0 +1,437 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __AxisAlignedBox_H_
+#define __AxisAlignedBox_H_
+
+// Precompiler options
+#include "OgrePrerequisites.h"
+
+#include "OgreVector3.h"
+#include "OgreMatrix4.h"
+
+namespace Ogre {
+
+    /** A 3D box aligned with the x/y/z axes.
+	    @remarks
+		    This class represents a simple box which is aligned with the
+		    axes. Internally it only stores 2 points as the extremeties of
+		    the box, one which is the minima of all 3 axes, and the other
+		    which is the maxima of all 3 axes. This class is typically used
+		    for an axis-aligned bounding box (AABB) for collision and
+		    visibility determination.
+    */
+    class _OgreExport AxisAlignedBox
+    {
+    protected:
+	    Vector3 mMinimum;
+	    Vector3 mMaximum;
+	    bool mNull;
+
+	    Vector3 mCorners[8];
+
+	    /** Internal method for updating corner points.
+	    */
+	    void updateCorners(void)
+	    {
+		    // The order of these items is, using right-handed co-ordinates:
+		    // Minimum Z face, starting with Min(all), then anticlockwise
+		    //   around face (looking onto the face)
+		    // Maximum Z face, starting with Max(all), then anticlockwise
+		    //   around face (looking onto the face)
+		    mCorners[0] = mMinimum;
+		    mCorners[1].x = mMinimum.x; mCorners[1].y = mMaximum.y; mCorners[1].z = mMinimum.z;
+		    mCorners[2].x = mMaximum.x; mCorners[2].y = mMaximum.y; mCorners[2].z = mMinimum.z;
+		    mCorners[3].x = mMaximum.x; mCorners[3].y = mMinimum.y; mCorners[3].z = mMinimum.z;            
+
+		    mCorners[4] = mMaximum;
+		    mCorners[5].x = mMinimum.x; mCorners[5].y = mMaximum.y; mCorners[5].z = mMaximum.z;
+		    mCorners[6].x = mMinimum.x; mCorners[6].y = mMinimum.y; mCorners[6].z = mMaximum.z;
+		    mCorners[7].x = mMaximum.x; mCorners[7].y = mMinimum.y; mCorners[7].z = mMaximum.z;            
+	    }        
+
+    public:
+	    inline AxisAlignedBox()
+	    {
+		    // Default to null box
+		    setMinimum( -0.5, -0.5, -0.5 );
+		    setMaximum( 0.5, 0.5, 0.5 );
+		    mNull = true;
+	    }
+
+	    inline AxisAlignedBox( const Vector3& min, const Vector3& max )
+	    {
+		    setExtents( min, max );
+	    }
+
+	    inline AxisAlignedBox(
+		    Real mx, Real my, Real mz,
+		    Real Mx, Real My, Real Mz )
+	    {
+		    setExtents( mx, my, mz, Mx, My, Mz );
+	    }
+
+	    /** Gets the minimum corner of the box.
+	    */
+	    inline const Vector3& getMinimum(void) const
+	    { 
+		    return mMinimum; 
+	    }
+
+	    /** Gets the maximum corner of the box.
+	    */
+	    inline const Vector3& getMaximum(void) const
+	    { 
+		    return mMaximum;
+	    }
+
+	    /** Sets the minimum corner of the box.
+	    */
+	    inline void setMinimum( const Vector3& vec )
+	    {
+		    mNull = false;
+		    mMinimum = vec;
+		    updateCorners();
+	    }
+
+	    inline void setMinimum( Real x, Real y, Real z )
+	    {
+		    mNull = false;
+		    mMinimum.x = x;
+		    mMinimum.y = y;
+		    mMinimum.z = z;
+		    updateCorners();
+	    }
+
+	    /** Sets the maximum corner of the box.
+	    */
+	    inline void setMaximum( const Vector3& vec )
+	    {
+		    mNull = false;
+		    mMaximum = vec;
+		    updateCorners();
+	    }
+
+	    inline void setMaximum( Real x, Real y, Real z )
+	    {
+		    mNull = false;
+		    mMaximum.x = x;
+		    mMaximum.y = y;
+		    mMaximum.z = z;
+		    updateCorners();
+	    }
+
+	    /** Sets both minimum and maximum extents at once.
+	    */
+	    inline void setExtents( const Vector3& min, const Vector3& max )
+	    {
+		    mNull = false;
+		    mMinimum = min;
+		    mMaximum = max;
+		    updateCorners();
+	    }
+
+	    inline void setExtents(
+		    Real mx, Real my, Real mz,
+		    Real Mx, Real My, Real Mz )
+	    {
+		    mNull = false;
+
+		    mMinimum.x = mx;
+		    mMinimum.y = my;
+		    mMinimum.z = mz;
+
+		    mMaximum.x = Mx;
+		    mMaximum.y = My;
+		    mMaximum.z = Mz;
+
+		    updateCorners();
+	    }
+
+	    /** Returns a pointer to an array of 8 corner points, useful for
+		    collision vs. non-aligned objects.
+		    @remarks
+			    If the order of these corners is important, they are as
+			    follows: The 4 points of the minimum Z face (note that
+			    because Ogre uses right-handed coordinates, the minimum Z is
+			    at the 'back' of the box) starting with the minimum point of
+			    all, then anticlockwise around this face (if you are looking
+			    onto the face from outside the box). Then the 4 points of the
+			    maximum Z face, starting with maximum point of all, then
+			    anticlockwise around this face (looking onto the face from
+			    outside the box). Like this:
+			    <pre>
+			       1-----2
+			      /|    /|
+			     / |   / |
+			    5-----4  |
+			    |  0--|--3
+			    | /   | /
+			    |/    |/
+			    6-----7
+			    </pre>
+	    */
+	    inline const Vector3* getAllCorners(void) const
+	    {
+		    assert( !mNull && "Can't get corners of a null AAB" );
+		    return (const Vector3*)mCorners;
+	    }
+
+	    friend std::ostream& operator<<( std::ostream& o, AxisAlignedBox aab )
+	    {
+		    if (aab.isNull())
+		    {
+			    o << "AxisAlignedBox(null)";
+		    }
+		    else
+		    {
+			    o << "AxisAlignedBox(min=" << aab.mMinimum << ", max=" << aab.mMaximum;
+			    o << ", corners=";
+			    for (int i = 0; i < 7; ++i)
+				    o << aab.mCorners[i] << ", ";
+			    o << aab.mCorners[7] << ")";
+		    }
+		    return o;
+	    }
+
+	    /** Merges the passed in box into the current box. The result is the
+		    box which encompasses both.
+	    */
+	    void merge( const AxisAlignedBox& rhs )
+	    {
+		    // Do nothing if rhs null
+		    if (rhs.mNull)
+		    {
+			    return;
+		    }
+		    // Otherwise if current null, just take rhs
+		    else if (mNull)
+		    {
+			    setExtents(rhs.mMinimum, rhs.mMaximum);
+		    }
+		    // Otherwise merge
+		    else
+		    {
+			    Vector3 min = mMinimum;
+			    Vector3 max = mMaximum;
+			    max.makeCeil(rhs.mMaximum);
+			    min.makeFloor(rhs.mMinimum);
+
+			    setExtents(min, max);
+		    }
+
+	    }
+		
+		/** Extends the box to encompass the specified point (if needed).
+		*/
+		void merge( const Vector3& point )
+		{
+			if (mNull){ // if null, use this point
+				setExtents(point, point);
+			} else {
+				mMaximum.makeCeil(point);
+				mMinimum.makeFloor(point);
+				updateCorners();
+			}
+		}
+
+	    /** Transforms the box according to the matrix supplied.
+		    @remarks
+			    By calling this method you get the axis-aligned box which
+			    surrounds the transformed version of this box. Therefore each
+			    corner of the box is transformed by the matrix, then the
+			    extents are mapped back onto the axes to produce another
+			    AABB. Useful when you have a local AABB for an object which
+			    is then transformed.
+	    */
+	    void transform( const Matrix4& matrix )
+	    {
+		    // Do nothing if current null
+		    if( mNull )
+			    return;
+
+		    Vector3 min, max, temp;
+		    bool first = true;
+		    size_t i;
+
+		    for( i = 0; i < 8; ++i )
+		    {
+			    // Transform and check extents
+			    temp = matrix * mCorners[i];
+			    if( first || temp.x > max.x )
+				    max.x = temp.x;
+			    if( first || temp.y > max.y )
+				    max.y = temp.y;
+			    if( first || temp.z > max.z )
+				    max.z = temp.z;
+			    if( first || temp.x < min.x )
+				    min.x = temp.x;
+			    if( first || temp.y < min.y )
+				    min.y = temp.y;
+			    if( first || temp.z < min.z )
+				    min.z = temp.z;
+
+			    first = false;
+		    }
+
+		    setExtents( min,max );
+
+	    }
+
+	    /** Sets the box to a 'null' value i.e. not a box.
+	    */
+	    inline void setNull()
+	    {
+		    mNull = true;
+	    }
+
+	    /** Returns true if the box is null i.e. empty.
+	    */
+	    bool isNull(void) const
+	    {
+		    return mNull;
+	    }
+
+        /** Returns whether or not this box intersects another. */
+        inline bool intersects(const AxisAlignedBox& b2) const
+        {
+            // Early-fail for nulls
+            if (this->isNull() || b2.isNull())
+                return false;
+
+            // Use up to 6 separating planes
+            if (mMaximum.x < b2.mMinimum.x)
+                return false;
+            if (mMaximum.y < b2.mMinimum.y)
+                return false;
+            if (mMaximum.z < b2.mMinimum.z)
+                return false;
+
+            if (mMinimum.x > b2.mMaximum.x)
+                return false;
+            if (mMinimum.y > b2.mMaximum.y)
+                return false;
+            if (mMinimum.z > b2.mMaximum.z)
+                return false;
+
+            // otherwise, must be intersecting
+            return true;
+
+        }
+
+		/// Calculate the area of intersection of this box and another
+		inline AxisAlignedBox intersection(const AxisAlignedBox& b2) const
+		{
+			if (!this->intersects(b2))
+			{
+				return AxisAlignedBox();
+			}
+			Vector3 intMin, intMax;
+
+			const Vector3& b2max = b2.getMaximum();
+			const Vector3& b2min = b2.getMinimum();
+
+			if (b2max.x > mMaximum.x && mMaximum.x > b2min.x)
+				intMax.x = mMaximum.x;
+			else 
+				intMax.x = b2max.x;
+			if (b2max.y > mMaximum.y && mMaximum.y > b2min.y)
+				intMax.y = mMaximum.y;
+			else 
+				intMax.y = b2max.y;
+			if (b2max.z > mMaximum.z && mMaximum.z > b2min.z)
+				intMax.z = mMaximum.z;
+			else 
+				intMax.z = b2max.z;
+
+			if (b2min.x < mMinimum.x && mMinimum.x < b2max.x)
+				intMin.x = mMinimum.x;
+			else
+				intMin.x= b2min.x;
+			if (b2min.y < mMinimum.y && mMinimum.y < b2max.y)
+				intMin.y = mMinimum.y;
+			else
+				intMin.y= b2min.y;
+			if (b2min.z < mMinimum.z && mMinimum.z < b2max.z)
+				intMin.z = mMinimum.z;
+			else
+				intMin.z= b2min.z;
+
+			return AxisAlignedBox(intMin, intMax);
+
+		}
+
+		/// Calculate the volume of this box
+		Real volume(void) const
+		{
+			if (mNull)
+			{
+				return 0.0f;
+			}
+			else
+			{
+				Vector3 diff = mMaximum - mMinimum;
+				return diff.x * diff.y * diff.z;
+			}
+
+		}
+
+        /** Scales the AABB by the vector given. */
+        inline void scale(const Vector3& s)
+        {
+            // NB assumes centered on origin
+            Vector3 min = mMinimum * s;
+            Vector3 max = mMaximum * s;
+            setExtents(min, max);
+        }
+
+		/** Tests whether this box intersects a sphere. */
+		bool intersects(const Sphere& s) const
+		{
+			return Math::intersects(s, *this); 
+		}
+		/** Tests whether this box intersects a plane. */
+		bool intersects(const Plane& p) const
+		{
+			return Math::intersects(p, *this);
+		}
+        /** Tests whether the vector point is within this box. */
+        bool intersects(const Vector3& v) const
+        {
+			return(v.x >= mMinimum.x  &&  v.x <= mMaximum.x  && 
+			    v.y >= mMinimum.y  &&  v.y <= mMaximum.y  && 
+    			v.z >= mMinimum.z  &&  v.z <= mMaximum.z);
+        }
+		/// Gets the centre of the box
+		Vector3 getCenter(void) const
+		{
+			return Vector3((mMaximum + mMinimum) * 0.5);
+		}
+
+
+    };
+
+} // namespace Ogre
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/ExampleLoadingBar.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/ExampleLoadingBar.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/ExampleLoadingBar.h	(revision 1092)
@@ -0,0 +1,182 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+You may use this sample code for anything you like, it is not covered by the
+LGPL like the rest of the engine.
+-----------------------------------------------------------------------------
+*/
+/*
+-----------------------------------------------------------------------------
+Filename:    ExampleLoadingBar.h
+Description: Defines an example loading progress bar which you can use during 
+startup, level changes etc to display loading progress. 
+IMPORTANT: Note that this progress bar relies on you having the OgreCore.zip 
+package already added to a resource group called 'Bootstrap' - this provides
+the basic resources required for the progress bar and will be loaded automatically.
+*/
+#include "OgreResourceGroupManager.h"
+#include "OgreException.h"
+#include "OgreOverlay.h"
+#include "OgreOverlayManager.h"
+#include "OgreRenderWindow.h"
+
+using namespace Ogre;
+
+/** Defines an example loading progress bar which you can use during 
+	startup, level changes etc to display loading progress. 
+@remarks
+	Basically you just need to create an instance of this class, call start()
+	before loading and finish() afterwards. You may also need to stop areas of
+	your scene rendering in between since this method will call 
+	RenderWindow::update() to update the display of the bar - we advise using
+	SceneManager's 'special case render queues' for this, see
+	SceneManager::addSpecialCaseRenderQueue for details.
+@note 
+	This progress bar relies on you having the OgreCore.zip package already 
+	added to a resource group called 'Bootstrap' - this provides the basic 
+	resources required for the progress bar and will be loaded automatically.
+*/
+class ExampleLoadingBar : public ResourceGroupListener
+{
+protected:
+	RenderWindow* mWindow;
+	Overlay* mLoadOverlay;
+	Real mInitProportion;
+	unsigned short mNumGroupsInit;
+	unsigned short mNumGroupsLoad;
+	Real mProgressBarMaxSize;
+	Real mProgressBarScriptSize;
+	Real mProgressBarInc;
+	OverlayElement* mLoadingBarElement;
+	OverlayElement* mLoadingDescriptionElement;
+	OverlayElement* mLoadingCommentElement;
+
+public:
+	ExampleLoadingBar() {}
+	virtual ~ExampleLoadingBar(){}
+
+	/** Show the loading bar and start listening.
+	@param window The window to update 
+	@param numGroupsInit The number of groups you're going to be initialising
+	@param numGroupsLoad The number of groups you're going to be loading
+	@param initProportion The proportion of the progress which will be taken
+		up by initialisation (ie script parsing etc). Defaults to 0.7 since
+		script parsing can often take the majority of the time.
+	*/
+	virtual void start(RenderWindow* window, 
+		unsigned short numGroupsInit = 1, 
+		unsigned short numGroupsLoad = 1, 
+		Real initProportion = 0.70f)
+	{
+		mWindow = window;
+		mNumGroupsInit = numGroupsInit;
+		mNumGroupsLoad = numGroupsLoad;
+		mInitProportion = initProportion;
+		// We need to pre-initialise the 'Bootstrap' group so we can use
+		// the basic contents in the loading screen
+		ResourceGroupManager::getSingleton().initialiseResourceGroup("Bootstrap");
+
+		OverlayManager& omgr = OverlayManager::getSingleton();
+		mLoadOverlay = (Overlay*)omgr.getByName("Core/LoadOverlay");
+		if (!mLoadOverlay)
+		{
+			OGRE_EXCEPT(Exception::ERR_ITEM_NOT_FOUND, 
+				"Cannot find loading overlay", "ExampleLoadingBar::start");
+		}
+		mLoadOverlay->show();
+
+		// Save links to the bar and to the loading text, for updates as we go
+		mLoadingBarElement = omgr.getOverlayElement("Core/LoadPanel/Bar/Progress");
+		mLoadingCommentElement = omgr.getOverlayElement("Core/LoadPanel/Comment");
+		mLoadingDescriptionElement = omgr.getOverlayElement("Core/LoadPanel/Description");
+
+		OverlayElement* barContainer = omgr.getOverlayElement("Core/LoadPanel/Bar");
+		mProgressBarMaxSize = barContainer->getWidth();
+		mLoadingBarElement->setWidth(0);
+
+		// self is listener
+		ResourceGroupManager::getSingleton().addResourceGroupListener(this);
+
+
+
+	}
+
+	/** Hide the loading bar and stop listening. 
+	*/
+	virtual void finish(void)
+	{
+		// hide loading screen
+		mLoadOverlay->hide();
+
+		// Unregister listener
+		ResourceGroupManager::getSingleton().removeResourceGroupListener(this);
+
+	}
+
+
+	// ResourceGroupListener callbacks
+	void resourceGroupScriptingStarted(const String& groupName, size_t scriptCount)
+	{
+		assert(mNumGroupsInit > 0 && "You stated you were not going to init "
+			"any groups, but you did! Divide by zero would follow...");
+		// Lets assume script loading is 70%
+		mProgressBarInc = mProgressBarMaxSize * mInitProportion / (Real)scriptCount;
+		mProgressBarInc /= mNumGroupsInit;
+		mLoadingDescriptionElement->setCaption("Parsing scripts...");
+		mWindow->update();
+	}
+	void scriptParseStarted(const String& scriptName)
+	{
+		mLoadingCommentElement->setCaption(scriptName);
+		mWindow->update();
+	}
+	void scriptParseEnded(void)
+	{
+		mLoadingBarElement->setWidth(
+			mLoadingBarElement->getWidth() + mProgressBarInc);
+		mWindow->update();
+	}
+	void resourceGroupScriptingEnded(const String& groupName)
+	{
+	}
+	void resourceGroupLoadStarted(const String& groupName, size_t resourceCount)
+	{
+		assert(mNumGroupsLoad > 0 && "You stated you were not going to load "
+			"any groups, but you did! Divide by zero would follow...");
+		mProgressBarInc = mProgressBarMaxSize * (1-mInitProportion) / 
+			(Real)resourceCount;
+		mProgressBarInc /= mNumGroupsLoad;
+		mLoadingDescriptionElement->setCaption("Loading resources...");
+		mWindow->update();
+	}
+	void resourceLoadStarted(const ResourcePtr& resource)
+	{
+		mLoadingCommentElement->setCaption(resource->getName());
+		mWindow->update();
+	}
+	void resourceLoadEnded(void)
+	{
+	}
+	void worldGeometryStageStarted(const String& description)
+	{
+		mLoadingCommentElement->setCaption(description);
+		mWindow->update();
+	}
+	void worldGeometryStageEnded(void)
+	{
+		mLoadingBarElement->setWidth(
+			mLoadingBarElement->getWidth() + mProgressBarInc);
+		mWindow->update();
+	}
+	void resourceGroupLoadEnded(const String& groupName)
+	{
+	}
+
+};
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreParticle.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreParticle.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreParticle.h	(revision 1092)
@@ -0,0 +1,137 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE 
+	(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under 
+the terms of the GNU Lesser General Public License as published by the Free Software 
+Foundation; either version 2 of the License, or (at your option) any later 
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT 
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with 
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple 
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to 
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __Particle_H__
+#define __Particle_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreBillboard.h"
+
+namespace Ogre {
+
+	/** Abstract class containing any additional data required to be associated
+		with a particle to perform the required rendering. 
+	@remarks
+		Because you can specialise the way that particles are renderered by supplying
+		custom ParticleSystemRenderer classes, you might well need some additional 
+		data for your custom rendering routine which is not held on the default particle
+		class. If that's the case, then you should define a subclass of this class, 
+		and construct it when asked in your custom ParticleSystemRenderer class.
+	*/
+	class _OgreExport ParticleVisualData
+	{
+	public:
+		ParticleVisualData() {}
+		virtual ~ParticleVisualData() {}
+
+	};
+
+	/** Class representing a single particle instance. */
+    class _OgreExport Particle 
+    {
+    protected:
+        /// Parent ParticleSystem
+        ParticleSystem* mParentSystem;
+		/// Additional visual data you might want to associate with the Particle
+		ParticleVisualData* mVisual;
+    public:
+        /// Does this particle have it's own dimensions?
+        bool mOwnDimensions;
+        /// Personal width if mOwnDimensions == true
+        Real mWidth;
+        /// Personal height if mOwnDimensions == true
+        Real mHeight;
+        /// Current rotation value
+        Radian rotation;
+        // Note the intentional public access to internal variables
+        // Accessing via get/set would be too costly for 000's of particles
+        /// World position
+        Vector3 position;
+        /// Direction (and speed) 
+        Vector3 direction;
+        /// Current colour
+        ColourValue colour;
+        /// Time to live, number of seconds left of particles natural life
+        Real timeToLive;
+        /// Total Time to live, number of seconds of particles natural life
+        Real totalTimeToLive;
+		/// Speed of rotation in radians/sec
+		Radian rotationSpeed;
+
+
+        Particle()
+            : mParentSystem(0), mVisual(0), mOwnDimensions(false), rotation(0), 
+            position(Vector3::ZERO), direction(Vector3::ZERO), 
+            colour(ColourValue::White), timeToLive(10), totalTimeToLive(10), 
+            rotationSpeed(0)
+        {
+        }
+
+        /** Sets the width and height for this particle.
+        @remarks
+        Note that it is most efficient for every particle in a ParticleSystem to have the same dimensions. If you
+        choose to alter the dimensions of an individual particle the set will be less efficient. Do not call
+        this method unless you really need to have different particle dimensions within the same set. Otherwise
+        just call the ParticleSystem::setDefaultDimensions method instead.
+        */
+        void setDimensions(Real width, Real height); 
+
+        /** Returns true if this particle deviates from the ParticleSystem's default dimensions (i.e. if the
+        particle::setDimensions method has been called for this instance).
+        @see
+        particle::setDimensions
+        */
+        bool hasOwnDimensions(void) const { return mOwnDimensions; }
+
+        /** Retrieves the particle's personal width, if hasOwnDimensions is true. */
+        Real getOwnWidth(void) const { return mWidth; }
+
+        /** Retrieves the particle's personal width, if hasOwnDimensions is true. */
+        Real getOwnHeight(void) const { return mHeight; }
+        
+        /** Sets the current rotation */
+        void setRotation(const Radian& rad);
+
+        const Radian& getRotation(void) const { return rotation; }
+
+        /** Internal method for notifying the particle of it's owner.
+        */
+        void _notifyOwner(ParticleSystem* owner);
+
+        /** Internal method for notifying the particle of it's optional visual data.
+        */
+		void _notifyVisualData(ParticleVisualData* vis) { mVisual = vis; }
+
+		/// Get the optional visual data associated with the class
+		ParticleVisualData* getVisualData(void) const { return mVisual; }
+
+        /// Utility method to reset this particle
+        void resetDimensions(void);
+
+       
+    };
+}
+
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMemoryManager.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMemoryManager.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMemoryManager.h	(revision 1092)
@@ -0,0 +1,408 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+//---- ORIGINAL COPYRIGHT FOLLOWS -------------------------------------------
+// ---------------------------------------------------------------------------------------------------------------------------------
+// Copyright 2000, Paul Nettle. All rights reserved.
+//
+// You are free to use this source code in any commercial or non-commercial product.
+//
+// mmgr.cpp - Memory manager & tracking software
+//
+// The most recent version of this software can be found at: ftp://ftp.GraphicsPapers.com/pub/ProgrammingTools/MemoryManagers/
+//
+// [NOTE: Best when viewed with 8-character tabs]
+//
+// ---------------------------------------------------------------------------------------------------------------------------------
+#ifndef __MemoryManager_H__
+#define __MemoryManager_H__
+
+#include "OgrePlatform.h"
+#include "OgreStdHeaders.h"
+
+namespace Ogre {
+
+    /** @page memory_manager The memory manager information page
+	
+		@subsection desc Description
+			The memory manager is a class that handles memory (de)allocation requests.
+        @par
+            This class works like a wrapper between the actual C memory allocation 
+            functions (*alloc, free) and the memory (de)allocation requests of the
+            application.
+        @par
+            Why would such a class be needed? First of all, because we had some 
+            major issues with memory getting misued (read: deleted) over DLL 
+            boundaries. One thing this memory manager does is solve the problem by
+            allocating all the memory in the OgreMain.dll/so process.
+        @par
+            Another use would be leak detection and memory misuse detection. With
+            a custom memory manager, calls to new/delete and *alloc/free could be
+            overseed and logged.
+        @par
+            Yet another use is the optimization of memory allocation for certain
+            object types. One of the most common examples is a small object 
+            allocator.
+		@subsection types Manager types
+			There actually are two classes, one is the standard memory manager
+			which only addresses memory allocation problems when deallocating
+			across processes. 
+		@par
+			The other is a modified version of the debugging memory manager written 
+			by Paul 'MidNight' Nettle (aka. the Fluid Studios Memory Manager). 
+			Obviously, the second one should be used only when debugging your 
+			application as it adds some visible overhead.
+		@par
+			You can switch between the two memory managers by setting the value of
+			the OGRE_DEBUG_MEMORY_MANAGER macro in OgreConfig.h
+        @subsection notes Implementation Note
+            The class contains a static member of type MemoryManager. That is 
+            because we want the memory manager to be created even before we 
+            override the new([])/delete([]) operators.
+		@subsection see See also
+			<a href="http://www.flipcode.com/cgi-bin/msg.cgi?showThread=12September2000-PresentingAMemoryManager&forum=askmid&id=-1">Paul Nettle's Memory Manager page at flipCode</a> - you can get the original source form here.
+    */
+
+#if OGRE_DEBUG_MEMORY_MANAGER && OGRE_DEBUG_MODE
+
+#ifndef __FUNCTION__
+#define __FUNCTION__ "???"
+#endif
+
+}
+
+//-----------------------------------------------------------------------------
+// We have to declare the global new([])/delete([]) operators before declaring 
+// the Ogre::MemoryManager class since it lists them as friend functions
+void *operator new(size_t reportedSize);
+void *operator new[](size_t reportedSize);
+void operator delete(void *reportedAddress);
+void operator delete[](void *reportedAddress);
+//-----------------------------------------------------------------------------
+
+namespace Ogre {
+
+    /** For internal use only.
+        \internal.
+        @remarks
+            This structure holds the allocation tracking information. So,
+            for each allocation made, the overhead this memory manager adds
+            is the size of this structure, the lengths of the names of the
+            file and function in which the allocation was made and the
+            padding size (which can be adjusted).
+    */
+    typedef struct tag_au
+    {
+        size_t actualSize;
+        size_t reportedSize;
+
+        void *actualAddress;
+        void *reportedAddress;
+
+        char sourceFile[40];
+        char sourceFunc[40];
+
+        unsigned int sourceLine;
+        unsigned int allocationType;
+
+        bool breakOnDealloc;
+        bool breakOnRealloc;
+
+        unsigned int allocationNumber;
+        unsigned int processID;
+
+        struct tag_au *next;
+        struct tag_au *prev;
+    } sAllocUnit;
+
+    typedef struct
+    {
+        size_t totalReportedMemory;
+        size_t totalActualMemory;
+
+        size_t peakReportedMemory;
+        size_t peakActualMemory;
+
+        size_t accumulatedReportedMemory;
+        size_t accumulatedActualMemory;
+        size_t accumulatedAllocUnitCount;
+
+        size_t totalAllocUnitCount;
+        size_t peakAllocUnitCount;
+    } sMStats;
+    
+    enum
+    {
+        m_alloc_unknown        = 0,
+        m_alloc_new            = 1,
+        m_alloc_new_array      = 2,
+        m_alloc_malloc         = 3,
+        m_alloc_calloc         = 4,
+        m_alloc_realloc        = 5,
+        m_alloc_delete         = 6,
+        m_alloc_delete_array   = 7,
+        m_alloc_free           = 8
+    };
+
+	/** See the \ref memory_manager.
+	*/
+    class _OgreExport MemoryManager
+    {
+        friend void * ::operator new(size_t);
+        friend void * ::operator new[](size_t);
+        friend void ::operator delete(void*);
+        friend void ::operator delete[](void*);
+
+    public:
+        static MemoryManager sMemManager;
+
+    private:
+        /// This is used in the process tracking part of the memory manager.
+        unsigned m_uProcessIDs;
+        /// This is set to true when deinitialization takes place.
+        bool m_bDeinitTime;
+
+#ifndef __BORLANDC__
+    private:
+#else
+    public:
+#endif
+        //-------------------------------------------------------------------------
+        // Wrappers for the new/delete functions        
+        void *op_new_sc( size_t reportedSize, unsigned processID );
+        void *op_new_vc( size_t reportedSize, unsigned processID );
+
+        void *op_new_sc( size_t reportedSize, const char *sourceFile, int sourceLine, unsigned processID );
+        void *op_new_vc( size_t reportedSize, const char *sourceFile, int sourceLine, unsigned processID );
+
+        void op_del_sc( void *reportedAddress, unsigned processID );
+        void op_del_vc( void *reportedAddress, unsigned processID );
+        //-------------------------------------------------------------------------
+
+        /** This function is intended for internal use only.
+            \internal
+            @remarks
+                This function is used to return an unique handle for each process 
+                calling it. The returned unsigned int is then passed to the memory
+                manager every time a re/de/allocation request is made, in order
+                to check that deallocations don't occur in processes other than the 
+                ones in which allcations were made and so on.
+            @par
+                Actually, the problem of re/de/allocating in other processes was
+                solved with the addition of the new memory manager, but you may
+                want to limit the occurence of such events anyway, and this function
+                helps you do just that.
+        */
+        unsigned _getProcessID();
+
+    public:
+        MemoryManager();
+        ~MemoryManager();
+
+        //-------------------------------------------------------------------------
+        // Used by the macros     
+        void setOwner(const char *file, const unsigned int line, const char *func);
+        //-------------------------------------------------------------------------
+
+        //-------------------------------------------------------------------------
+        // Allocation breakpoints        
+        bool &breakOnRealloc(void *reportedAddress);
+        bool &breakOnDealloc( void *reportedAddress );
+        void breakOnAlloc( unsigned int count );
+        //-------------------------------------------------------------------------
+
+        //-------------------------------------------------------------------------
+        // The meat & potatoes of the memory tracking software
+
+        /** This function is intended for internal use only.
+            \internal
+            @remarks
+                This function is the actual memory allocator and acts as a bridge
+                between OGRE and the C/C++ alloc/calloc functions. 
+            @par
+                While memory allocation requests are made trough this function, 
+                the tracking of memory addresses is possible. Therefore, attempting 
+                to deallocate a portion of memory that was not allocated using 
+                this function will result in a warning given by the deallocator, 
+                dllocMem.
+        */
+        void * allocMem(
+            const char *sourceFile, 
+            const unsigned int sourceLine, 
+            const char *sourceFunc,
+            const unsigned int allocationType, 
+            const size_t reportedSize, 
+            const unsigned processID );
+
+        /** This function is intended for internal use only.
+            \internal
+            @remarks
+                This function is the actual memory reallocator and acts as a bridge
+                between OGRE and the C/C++ realloc function. 
+            @par
+                While memory reallocation requests are made trough this function, 
+                the tracking of memory addresses is possible. Therefore, attempting 
+                to deallocate a portion of memory that was not reallocated using 
+                this function will result in a warning given by the deallocator, 
+                dllocMem. 
+            @par
+                As well, trying to reallocate memory that was not allocated using
+                mallc/calloc will result in a warning.
+        */
+        void * rllocMem(
+            const char *sourceFile, 
+            const unsigned int sourceLine, 
+            const char *sourceFunc,
+            const unsigned int reallocationType, 
+            const size_t reportedSize, 
+            void *reportedAddress, 
+            const unsigned processID );
+
+        /** This function is intended for internal use only.
+            \internal
+            @remarks
+                This function is the actual memory deallocator and acts as a
+                bridge between OGRE and the C/C++ free function.
+            @par
+                While memory deallocation requests are made trough this function, 
+                the tracking of memory addresses is possible. Therefore, attempting 
+                to deallocate a portion of memory that was not allocated using 
+                allocMem or rllocMem, trying to deallocate memory that was
+                allocated with malloc using delete (and the corresponding 
+                permutations) or trying to deallocate memory allocated from from
+                process will result in a warning.
+            @note
+                Actually, memory can be allocated in one process and deallocated
+                in another, since the actual (de)allocation takes place in the
+                memory space of the OgreMain library. 
+            @par
+                Tracking this kind of (possible) errors exists because users may 
+                want to write their own memory allocator later on or they'd like 
+                to get rid of OGRE's memory allocator.
+        */
+        void dllocMem(
+            const char *sourceFile, 
+            const unsigned int sourceLine, 
+            const char *sourceFunc,
+            const unsigned int deallocationType, 
+            const void *reportedAddress, 
+            const unsigned processID );
+        //-------------------------------------------------------------------------
+
+        //-------------------------------------------------------------------------
+        // Utilitarian functions        
+        bool validateAddr(const void *reportedAddress);
+        bool validateAlloc(const sAllocUnit *allocUnit);
+        bool validateAllAllocs();
+        //-------------------------------------------------------------------------
+
+        //-------------------------------------------------------------------------
+        // Unused RAM calculations        
+        unsigned int calcUnused( const sAllocUnit *allocUnit );
+        unsigned int calcAllUnused();
+        //-------------------------------------------------------------------------
+
+        //-------------------------------------------------------------------------
+        // Logging and reporting        
+        void dumpAllocUnit( const sAllocUnit *allocUnit, const char *prefix = "" );
+        void dumpMemReport( const char *filename = "memreport.log", const bool overwrite = true );
+        sMStats getMemStats();            
+        //-------------------------------------------------------------------------        
+    };
+}
+
+/** This variable exists separately in each module that links to the OGRE library
+    and is used to track the ID of the current process from the perspective
+    of the memory manager.
+    @see
+        unsigned Ogre::MemoryManager::_getProcessID()
+*/
+static unsigned gProcessID = 0;
+
+//-----------------------------------------------------------------------------
+// Overridden global new([])/delete([]) functions
+//
+inline void *operator new(size_t reportedSize)
+{
+    if( !gProcessID )
+        gProcessID = Ogre::MemoryManager::sMemManager._getProcessID();
+    return Ogre::MemoryManager::sMemManager.op_new_sc( reportedSize, gProcessID );
+}
+inline void *operator new[](size_t reportedSize)
+{
+    if( !gProcessID )
+        gProcessID = Ogre::MemoryManager::sMemManager._getProcessID();
+    return Ogre::MemoryManager::sMemManager.op_new_vc( reportedSize, gProcessID );
+}
+
+inline void operator delete(void *reportedAddress)
+{
+    Ogre::MemoryManager::sMemManager.op_del_sc( reportedAddress, gProcessID );    
+}
+inline void operator delete[](void *reportedAddress)
+{
+    Ogre::MemoryManager::sMemManager.op_del_vc( reportedAddress, gProcessID );
+}
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// This header adds the *alloc/free macros, wrapping the C functions
+#include "OgreMemoryMacros.h"
+//-----------------------------------------------------------------------------
+
+#else
+
+	/** See the \ref memory_manager.
+	*/
+    class _OgreExport MemoryManager
+    {
+    public:
+        static MemoryManager sMemManager;
+
+        MemoryManager();
+        ~MemoryManager();
+
+        /** Memory allocator - uses plain old malloc.
+        */
+        void *allocMem( const char *szFile, size_t uLine, size_t count ) throw ( );
+
+        /** Memory re-allocator - uses plain old realloc.
+        */
+        void *rllocMem( const char *szFile, size_t uLine, void *ptr , size_t count ) throw ( );
+
+        /** Memory allocator - uses plain old calloc.
+        */
+        void *cllocMem( const char *szFile, size_t uLine, size_t num, size_t size ) throw ( );
+
+        /** Memory de-allocator - uses plain old free.
+        */
+        void dllocMem( const char *szFile, size_t uLine, void *ptr ) throw ( );
+    };
+
+}
+
+#endif
+
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePrerequisites.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePrerequisites.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePrerequisites.h	(revision 1092)
@@ -0,0 +1,364 @@
+/*-------------------------------------------------------------------------
+This source file is a part of OGRE
+(Object-oriented Graphics Rendering Engine)
+
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This library is free software; you can redistribute it and/or modify it
+under the terms of the GNU Lesser General Public License (LGPL) as 
+published by the Free Software Foundation; either version 2.1 of the 
+License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful, but 
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
+or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public 
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License 
+along with this library; if not, write to the Free Software Foundation, 
+Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA or go to
+http://www.gnu.org/copyleft/lesser.txt
+-------------------------------------------------------------------------*/
+#ifndef __Prerequisites_H__
+#define __Prerequisites_H__
+
+// undefine this to not require new angular units where applicable
+#define OGRE_FORCE_ANGLE_TYPES
+
+// Platform-specific stuff
+#include "OgrePlatform.h"
+
+#if OGRE_COMPILER == OGRE_COMPILER_MSVC
+// Turn off warnings generated by long std templates
+// This warns about truncation to 255 characters in debug/browse info
+#   pragma warning (disable : 4786)
+
+// Turn off warnings generated by long std templates
+// This warns about truncation to 255 characters in debug/browse info
+#   pragma warning (disable : 4503)
+
+// disable: "conversion from 'double' to 'float', possible loss of data
+#   pragma warning (disable : 4244)
+
+// disable: "truncation from 'double' to 'float'
+#   pragma warning (disable : 4305)
+
+// disable: "<type> needs to have dll-interface to be used by clients'
+// Happens on STL member variables which are not public therefore is ok
+#   pragma warning (disable : 4251)
+
+// disable: "non dll-interface class used as base for dll-interface class"
+// Happens when deriving from Singleton because bug in compiler ignores
+// template export
+#   pragma warning (disable : 4275)
+
+// disable: "C++ Exception Specification ignored"
+// This is because MSVC 6 did not implement all the C++ exception 
+// specifications in the ANSI C++ draft.
+#   pragma warning( disable : 4290 )
+
+// disable: "no suitable definition provided for explicit template 
+// instantiation request" Occurs in VC7 for no justifiable reason on all 
+// #includes of Singleton
+#   pragma warning( disable: 4661)
+
+// disable: deprecation warnings when using CRT calls in VC8 
+// These show up on all C runtime lib code in VC8, disable since they clutter
+// the warnings with things we may not be able to do anything about (e.g. 
+// generated code from nvparse etc). I doubt very much that these calls
+// will ever be actually removed from VC anyway, it would break too much code.
+#	pragma warning( disable: 4996)
+#endif
+
+#if OGRE_COMPILER == OGRE_COMPILER_MSVC
+#   undef _DEFINE_DEPRECATED_HASH_CLASSES
+#   if OGRE_COMP_VER > 1300
+#       define _DEFINE_DEPRECATED_HASH_CLASSES 0
+#   else
+#      define _DEFINE_DEPRECATED_HASH_CLASSES 1
+#   endif
+#endif
+
+/* Include all the standard header *after* all the configuration
+   settings have been made.
+*/
+#include "OgreStdHeaders.h"
+
+
+#include "OgreMemoryManager.h"
+
+// define the real number values to be used
+// default to use 'float' unless precompiler option set
+namespace Ogre {
+    // Define ogre version
+    #define OGRE_VERSION_MAJOR 1
+    #define OGRE_VERSION_MINOR 0
+    #define OGRE_VERSION_PATCH 6
+    #define OGRE_VERSION_NAME "Azathoth"
+
+    #if OGRE_DOUBLE_PRECISION == 1
+		/** Software floating point type.
+		@note Not valid as a pointer to GPU buffers / parameters
+		*/
+        typedef double Real;
+    #else
+		/** Software floating point type.
+		@note Not valid as a pointer to GPU buffers / parameters
+		*/
+        typedef float Real;
+    #endif
+
+    // define the Char type as either char or wchar_t
+    #if OGRE_WCHAR_T_STRINGS == 1
+    #   define OgreChar wchar_t
+    #	define _TO_CHAR( x ) L##x
+    #else
+    #   define OgreChar char
+    #	define _TO_CHAR( x ) x
+    #endif
+
+    #if OGRE_COMPILER == OGRE_COMPILER_GNUC && OGRE_COMP_VER >= 310
+    #   define HashMap ::__gnu_cxx::hash_map
+    #else
+    #   if OGRE_COMPILER == OGRE_COMPILER_MSVC
+    #       if OGRE_COMP_VER > 1300 && !defined(_STLP_MSVC)
+    #           define HashMap ::stdext::hash_map
+    #       else
+    #           define HashMap ::std::hash_map
+    #       endif
+    #   else
+    #       define HashMap ::std::hash_map
+    #   endif
+    #endif
+
+    /** In order to avoid finger-aches :)
+    */
+    typedef unsigned char uchar;
+    typedef unsigned short ushort;
+    typedef unsigned int uint;  
+	typedef unsigned long ulong;  
+
+    /// Useful macros
+    #define OGRE_DELETE(p)       { if(p) { delete (p);     (p)=NULL; } }
+    #define OGRE_DELETE_ARRAY(p) { if(p) { delete[] (p);   (p)=NULL; } }
+
+	#if OGRE_WCHAR_T_STRINGS
+		typedef std::wstring _StringBase;
+	#else
+		typedef std::string _StringBase;
+	#endif
+	
+	typedef _StringBase String;
+
+	// Useful threading defines
+	#define OGRE_AUTO_MUTEX_NAME mutex
+	#if OGRE_THREAD_SUPPORT
+		#define OGRE_AUTO_MUTEX mutable boost::recursive_mutex OGRE_AUTO_MUTEX_NAME;
+		#define OGRE_LOCK_AUTO_MUTEX boost::recursive_mutex::scoped_lock ogreAutoMutexLock(OGRE_AUTO_MUTEX_NAME);
+		#define OGRE_MUTEX(name) mutable boost::recursive_mutex name;
+		#define OGRE_LOCK_MUTEX(name) boost::recursive_mutex::scoped_lock ogrenameLock(name);
+		// like OGRE_AUTO_MUTEX but mutex held by pointer
+		#define OGRE_AUTO_SHARED_MUTEX mutable boost::recursive_mutex *OGRE_AUTO_MUTEX_NAME;
+		#define OGRE_LOCK_AUTO_SHARED_MUTEX boost::recursive_mutex::scoped_lock ogreAutoMutexLock(*OGRE_AUTO_MUTEX_NAME);
+		#define OGRE_NEW_AUTO_SHARED_MUTEX OGRE_AUTO_MUTEX_NAME = new boost::recursive_mutex();
+		#define OGRE_DELETE_AUTO_SHARED_MUTEX delete OGRE_AUTO_MUTEX_NAME;
+		#define OGRE_COPY_AUTO_SHARED_MUTEX(from) OGRE_AUTO_MUTEX_NAME = from;
+	#else
+		#define OGRE_AUTO_MUTEX 
+		#define OGRE_LOCK_AUTO_MUTEX 
+		#define OGRE_MUTEX(name)
+		#define OGRE_LOCK_MUTEX(name)
+		#define OGRE_AUTO_SHARED_MUTEX 
+		#define OGRE_LOCK_AUTO_SHARED_MUTEX
+		#define OGRE_NEW_AUTO_SHARED_MUTEX 
+		#define OGRE_DELETE_AUTO_SHARED_MUTEX 
+		#define OGRE_COPY_AUTO_SHARED_MUTEX(from) 
+	#endif
+
+
+// Pre-declare classes
+// Allows use of pointers in header files without including individual .h
+// so decreases dependencies between files
+    class Angle;
+    class Animation;
+    class AnimationState;
+    class AnimationTrack;
+    class Archive;
+    class ArchiveFactory;
+    class ArchiveManager;
+    class AutoParamDataSource;
+    class AxisAlignedBox;
+    class AxisAlignedBoxSceneQuery;
+    class Billboard;
+    class BillboardSet;
+    class Bone;
+    class Camera;
+    class Codec;
+    class ColourValue;
+    class ConfigDialog;
+    template <typename T> class Controller;
+	template <typename T> class ControllerFunction;
+    class ControllerManager;
+    template <typename T> class ControllerValue;
+	class Cursor;
+	class Degree;
+    class DynLib;
+    class DynLibManager;
+    class EdgeData;
+    class EdgeListBuilder;
+    class Entity;
+    class ErrorDialog;
+	class EventDispatcher;
+	class EventProcessor;
+	class EventQueue;
+	class EventTarget;
+    class ExternalTextureSourceManager;
+    class Factory;
+    class Font;
+    class FontPtr;
+    class FontManager;
+    struct FrameEvent;
+    class FrameListener;
+    class Frustum;
+    class GpuProgram;
+    class GpuProgramPtr;
+    class GpuProgramManager;
+	class GpuProgramUsage;
+    class HardwareIndexBuffer;
+    class HardwareOcclusionQuery;
+    class HardwareVertexBuffer;
+	class HardwarePixelBuffer;
+    class HardwarePixelBufferSharedPtr;
+	class HighLevelGpuProgram;
+    class HighLevelGpuProgramPtr;
+	class HighLevelGpuProgramManager;
+	class HighLevelGpuProgramFactory;
+    class IndexData;
+	class InputEvent;
+    class InputReader;
+    class IntersectionSceneQuery;
+    class IntersectionSceneQueryListener;
+    class Image;
+	class KeyEvent;
+    class KeyFrame;
+	class KeyListener;
+	class KeyTarget;
+    class Light;
+    class Log;
+    class LogManager;
+	class ManualResourceLoader;
+    class Material;
+    class MaterialPtr;
+    class MaterialManager;
+    class Math;
+    class Matrix3;
+    class Matrix4;
+    class MemoryManager;
+    class Mesh;
+    class MeshPtr;
+    class MeshSerializer;
+    class MeshSerializerImpl;
+    class MeshManager;
+    class MovableObject;
+    class MovablePlane;
+	class MouseEvent;
+	class MouseListener;
+	class MouseMotionListener;
+	class MouseTarget;
+    class Node;
+    class Overlay;
+    class OverlayContainer;
+    class OverlayElement;
+    class OverlayElementFactory;
+    class OverlayManager;
+    class Particle;
+    class ParticleAffector;
+    class ParticleAffectorFactory;
+    class ParticleEmitter;
+    class ParticleEmitterFactory;
+    class ParticleSystem;
+    class ParticleSystemManager;
+    class ParticleSystemRenderer;
+    class ParticleSystemRendererFactory;
+    class ParticleVisualData;
+    class Pass;
+    class PatchMesh;
+    class PixelBox;
+    class PlatformManager;
+    class Plane;
+    class PlaneBoundedVolume;
+	class PositionTarget;
+    class ProgressiveMesh;
+    class Profile;
+	class Profiler;
+    class Quaternion;
+	class Radian;
+    class Ray;
+    class RaySceneQuery;
+    class RaySceneQueryListener;
+    class Renderable;
+    class RenderPriorityGroup;
+    class RenderQueue;
+    class RenderQueueGroup;
+    class RenderQueueListener;
+    class RenderSystem;
+    class RenderSystemCapabilities;
+    class RenderTarget;
+    class RenderTargetListener;
+    class RenderTexture;
+    class RenderWindow;
+    class RenderOperation;
+    class Resource;
+	class ResourceBackgroundQueue;
+	class ResourceGroupManager;
+    class ResourceManager;
+	class Root;
+    class SceneManager;
+    class SceneManagerEnumerator;
+    class SceneNode;
+    class SceneQuery;
+    class SceneQueryListener;
+	class ScriptLoader;
+    class Serializer;
+    class ShadowCaster;
+    class ShadowRenderable;
+    class SimpleRenderable;
+    class SimpleSpline;
+    class Skeleton;
+    class SkeletonPtr;
+    class SkeletonInstance;
+    class SkeletonManager;
+    class Sphere;
+    class SphereSceneQuery;
+	class StaticGeometry;
+    class StringConverter;
+    class StringInterface;
+    class SubEntity;
+    class SubMesh;
+	class TagPoint;
+	class TargetManager;
+    class Technique;
+	class ExternalTextureSource;
+    class TextureUnitState;
+    class Texture;
+    class TexturePtr;
+	class TextureFont;
+    class TextureManager;
+	class Timer;
+    class UserDefinedObject;
+    class Vector2;
+    class Vector3;
+    class Vector4;
+    class Viewport;  
+    class VertexBufferBinding;
+    class VertexData;
+    class VertexDeclaration;
+    class WireBoundingBox; 
+}
+
+#endif // __OgrePrerequisites_H__
+
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMeshFileFormat.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMeshFileFormat.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMeshFileFormat.h	(revision 1092)
@@ -0,0 +1,231 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __MeshFileFormat_H__
+#define __MeshFileFormat_H__
+
+#include "OgrePrerequisites.h"
+
+namespace Ogre {
+
+/** Definition of the OGRE .mesh file format 
+
+    .mesh files are binary files (for read efficiency at runtime) and are arranged into chunks 
+    of data, very like 3D Studio's format.
+    A chunk always consists of:
+        unsigned short CHUNK_ID        : one of the following chunk ids identifying the chunk
+        unsigned long  LENGTH          : length of the chunk in bytes, including this header
+        void*          DATA            : the data, which may contain other sub-chunks (various data types)
+    
+    A .mesh file can contain both the definition of the Mesh itself, and optionally the definitions
+    of the materials is uses (although these can be omitted, if so the Mesh assumes that at runtime the
+    Materials referred to by name in the Mesh are loaded/created from another source)
+
+    A .mesh file only contains a single mesh, which can itself have multiple submeshes.
+
+*/
+
+	enum MeshChunkID {
+        M_HEADER                = 0x1000,
+            // char*          version           : Version number check
+        M_MESH                = 0x3000,
+			// bool skeletallyAnimated   // important flag which affects h/w buffer policies
+            // Optional M_GEOMETRY chunk
+            M_SUBMESH             = 0x4000, 
+                // char* materialName
+                // bool useSharedVertices
+                // unsigned int indexCount
+                // bool indexes32Bit
+                // unsigned int* faceVertexIndices (indexCount)
+                // OR
+                // unsigned short* faceVertexIndices (indexCount)
+                // M_GEOMETRY chunk (Optional: present only if useSharedVertices = false)
+                M_SUBMESH_OPERATION = 0x4010, // optional, trilist assumed if missing
+                    // unsigned short operationType
+                M_SUBMESH_BONE_ASSIGNMENT = 0x4100,
+                    // Optional bone weights (repeating section)
+                    // unsigned int vertexIndex;
+                    // unsigned short boneIndex;
+                    // float weight;
+            M_GEOMETRY          = 0x5000, // NB this chunk is embedded within M_MESH and M_SUBMESH
+                // unsigned int vertexCount
+				M_GEOMETRY_VERTEX_DECLARATION = 0x5100,
+					M_GEOMETRY_VERTEX_ELEMENT = 0x5110, // Repeating section
+						// unsigned short source;  	// buffer bind source
+						// unsigned short type;    	// VertexElementType
+						// unsigned short semantic; // VertexElementSemantic
+						// unsigned short offset;	// start offset in buffer in bytes
+						// unsigned short index;	// index of the semantic (for colours and texture coords)
+				M_GEOMETRY_VERTEX_BUFFER = 0x5200, // Repeating section
+					// unsigned short bindIndex;	// Index to bind this buffer to
+					// unsigned short vertexSize;	// Per-vertex size, must agree with declaration at this index
+					M_GEOMETRY_VERTEX_BUFFER_DATA = 0x5210,
+						// raw buffer data
+            M_MESH_SKELETON_LINK = 0x6000,
+                // Optional link to skeleton
+                // char* skeletonName           : name of .skeleton to use
+            M_MESH_BONE_ASSIGNMENT = 0x7000,
+                // Optional bone weights (repeating section)
+                // unsigned int vertexIndex;
+                // unsigned short boneIndex;
+                // float weight;
+            M_MESH_LOD = 0x8000,
+                // Optional LOD information
+                // unsigned short numLevels;
+                // bool manual;  (true for manual alternate meshes, false for generated)
+                M_MESH_LOD_USAGE = 0x8100,
+                // Repeating section, ordered in increasing depth
+				// NB LOD 0 (full detail from 0 depth) is omitted
+                // float fromSquaredDepth;
+                    M_MESH_LOD_MANUAL = 0x8110,
+                    // Required if M_MESH_LOD section manual = true
+                    // String manualMeshName;
+                    M_MESH_LOD_GENERATED = 0x8120,
+                    // Required if M_MESH_LOD section manual = false
+					// Repeating section (1 per submesh)
+                    // unsigned int indexCount;
+                    // bool indexes32Bit
+                    // unsigned short* faceIndexes;  (indexCount)
+                    // OR
+                    // unsigned int* faceIndexes;  (indexCount)
+            M_MESH_BOUNDS = 0x9000,
+                // float minx, miny, minz
+                // float maxx, maxy, maxz
+                // float radius
+                    
+			// Added By DrEvil
+			// optional chunk that contains a table of submesh indexes and the names of
+			// the sub-meshes.
+			M_SUBMESH_NAME_TABLE = 0xA000,
+				// Subchunks of the name table. Each chunk contains an index & string
+				M_SUBMESH_NAME_TABLE_ELEMENT = 0xA100,
+	                // short index
+                    // char* name
+			
+			// Optional chunk which stores precomputed edge data					 
+			M_EDGE_LISTS = 0xB000,
+				// Each LOD has a separate edge list
+				M_EDGE_LIST_LOD = 0xB100,
+					// unsigned short lodIndex
+					// bool isManual			// If manual, no edge data here, loaded from manual mesh
+                        // unsigned long numTriangles
+                        // unsigned long numEdgeGroups
+						// Triangle* triangleList
+                            // unsigned long indexSet
+                            // unsigned long vertexSet
+                            // unsigned long vertIndex[3]
+                            // unsigned long sharedVertIndex[3] 
+                            // float normal[4] 
+
+                        M_EDGE_GROUP = 0xB110,
+                            // unsigned long vertexSet
+                            // unsigned long numEdges
+						    // Edge* edgeList
+                                // unsigned long  triIndex[2]
+                                // unsigned long  vertIndex[2]
+                                // unsigned long  sharedVertIndex[2]
+                                // bool degenerate
+					
+	
+	/* Version 1.2 of the .mesh fornmat (deprecated)
+	enum MeshChunkID {
+        M_HEADER                = 0x1000,
+            // char*          version           : Version number check
+        M_MESH                = 0x3000,
+			// bool skeletallyAnimated   // important flag which affects h/w buffer policies
+            // Optional M_GEOMETRY chunk
+            M_SUBMESH             = 0x4000, 
+                // char* materialName
+                // bool useSharedVertices
+                // unsigned int indexCount
+                // bool indexes32Bit
+                // unsigned int* faceVertexIndices (indexCount)
+                // OR
+                // unsigned short* faceVertexIndices (indexCount)
+                // M_GEOMETRY chunk (Optional: present only if useSharedVertices = false)
+                M_SUBMESH_OPERATION = 0x4010, // optional, trilist assumed if missing
+                    // unsigned short operationType
+                M_SUBMESH_BONE_ASSIGNMENT = 0x4100,
+                    // Optional bone weights (repeating section)
+                    // unsigned int vertexIndex;
+                    // unsigned short boneIndex;
+                    // float weight;
+            M_GEOMETRY          = 0x5000, // NB this chunk is embedded within M_MESH and M_SUBMESH
+			*/
+                // unsigned int vertexCount
+                // float* pVertices (x, y, z order x numVertices)
+                M_GEOMETRY_NORMALS = 0x5100,    //(Optional)
+                    // float* pNormals (x, y, z order x numVertices)
+                M_GEOMETRY_COLOURS = 0x5200,    //(Optional)
+                    // unsigned long* pColours (RGBA 8888 format x numVertices)
+                M_GEOMETRY_TEXCOORDS = 0x5300,    //(Optional, REPEATABLE, each one adds an extra set)
+                    // unsigned short dimensions    (1 for 1D, 2 for 2D, 3 for 3D)
+                    // float* pTexCoords  (u [v] [w] order, dimensions x numVertices)
+			/*
+            M_MESH_SKELETON_LINK = 0x6000,
+                // Optional link to skeleton
+                // char* skeletonName           : name of .skeleton to use
+            M_MESH_BONE_ASSIGNMENT = 0x7000,
+                // Optional bone weights (repeating section)
+                // unsigned int vertexIndex;
+                // unsigned short boneIndex;
+                // float weight;
+            M_MESH_LOD = 0x8000,
+                // Optional LOD information
+                // unsigned short numLevels;
+                // bool manual;  (true for manual alternate meshes, false for generated)
+                M_MESH_LOD_USAGE = 0x8100,
+                // Repeating section, ordered in increasing depth
+				// NB LOD 0 (full detail from 0 depth) is omitted
+                // float fromSquaredDepth;
+                    M_MESH_LOD_MANUAL = 0x8110,
+                    // Required if M_MESH_LOD section manual = true
+                    // String manualMeshName;
+                    M_MESH_LOD_GENERATED = 0x8120,
+                    // Required if M_MESH_LOD section manual = false
+					// Repeating section (1 per submesh)
+                    // unsigned int indexCount;
+                    // bool indexes32Bit
+                    // unsigned short* faceIndexes;  (indexCount)
+                    // OR
+                    // unsigned int* faceIndexes;  (indexCount)
+            M_MESH_BOUNDS = 0x9000
+                // float minx, miny, minz
+                // float maxx, maxy, maxz
+                // float radius
+
+			// Added By DrEvil
+			// optional chunk that contains a table of submesh indexes and the names of
+			// the sub-meshes.
+			M_SUBMESH_NAME_TABLE,
+				// Subchunks of the name table. Each chunk contains an index & string
+				M_SUBMESH_NAME_TABLE_ELEMENT,
+	                // short index
+                    // char* name
+	*/
+    };
+} // namespace
+
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreILImageCodec.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreILImageCodec.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreILImageCodec.h	(revision 1092)
@@ -0,0 +1,63 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _ILImageCodec_H__
+#define _ILImageCodec_H__
+
+#include "OgreImageCodec.h"
+
+namespace Ogre {
+
+    /** Codec specialized in images loaded using DevIL.
+        @remarks
+            The users implementing subclasses of ImageCodec are required to return
+            a valid pointer to a ImageData class from the decode(...) function.
+    */
+    class _OgreExport ILImageCodec : public ImageCodec
+    {
+    private:
+		static bool _is_initialised;
+        String mType;
+        unsigned int mIlType;
+
+    public:
+        ILImageCodec(const String &type, unsigned int ilType);
+        virtual ~ILImageCodec() { }
+
+        /// @copydoc Codec::code
+        DataStreamPtr code(MemoryDataStreamPtr& input, CodecDataPtr& pData) const;
+        /// @copydoc Codec::codeToFile
+        void codeToFile(MemoryDataStreamPtr& input, const String& outFileName, CodecDataPtr& pData) const;
+        /// @copydoc Codec::decode
+        DecodeResult decode(DataStreamPtr& input) const;
+
+        /// Initialise DevIL
+        void initialiseIL(void);
+        
+        virtual String getType() const;        
+    };
+
+} // namespace
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreConfigFile.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreConfigFile.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreConfigFile.h	(revision 1092)
@@ -0,0 +1,98 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __ConfigFile_H__
+#define __ConfigFile_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreString.h"
+#include "OgreStringVector.h"
+#include "OgreIteratorWrappers.h"
+#include "OgreDataStream.h"
+
+namespace Ogre {
+
+    /** Class for quickly loading settings from a text file.
+        @remarks
+            This class is designed to quickly parse a simple file containing
+            key/value pairs, mainly for use in configuration settings.
+        @par
+            This is a very simplified approach, no multiple values per key
+            are allowed, no grouping or context is being kept etc.
+        @par
+            By default the key/values pairs are tokenised based on a
+            separator of Tab, the colon (:) or equals (=) character. Each
+            key - value pair must end in a carriage return.
+        @par
+            Settings can be optionally grouped in sections, using a header
+            beforehand of the form [SectionName]. 
+    */
+    class _OgreExport ConfigFile
+    {
+    public:
+
+        ConfigFile();
+        virtual ~ConfigFile();
+        /// load from a filename (not using resource group locations)
+        void load(const String& filename, const String& separators = "\t:=", bool trimWhitespace = true);
+        /// load from a filename (using resource group locations)
+        void load(const String& filename, const String& resourceGroup, const String& separators = "\t:=", bool trimWhitespace = true);
+        /// load from a data stream
+        void load(const DataStreamPtr& stream, const String& separators = "\t:=", bool trimWhitespace = true);
+		/// load from a filename (not using resource group locations)
+		void loadDirect(const String& filename, const String& separators = "\t:=", bool trimWhitespace = true);
+		/// load from a filename (using resource group locations)
+		void loadFromResourceSystem(const String& filename, const String& resourceGroup, const String& separators = "\t:=", bool trimWhitespace = true);
+
+        /** Gets the first setting from the file with the named key. 
+        @param key The name of the setting
+        @param section The name of the section it must be in (if any)
+        */
+        String getSetting(const String& key, const String& section = StringUtil::BLANK) const;
+        /** Gets all settings from the file with the named key. */
+        StringVector getMultiSetting(const String& key, const String& section = StringUtil::BLANK) const;
+
+        typedef std::multimap<String, String> SettingsMultiMap;
+        typedef MapIterator<SettingsMultiMap> SettingsIterator;
+        /** Gets an iterator for stepping through all the keys / values in the file. */
+        typedef std::map<String, SettingsMultiMap*> SettingsBySection;
+        typedef MapIterator<SettingsBySection> SectionIterator;
+        /** Get an iterator over all the available sections in the config file */
+        SectionIterator getSectionIterator(void);
+        /** Get an iterator over all the available settings in a section */
+        SettingsIterator getSettingsIterator(const String& section = StringUtil::BLANK);
+
+
+        
+        /** Clear the settings */
+        void clear(void);
+    protected:
+        SettingsBySection mSettings;
+    };
+
+}
+
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreConfig.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreConfig.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreConfig.h	(revision 1092)
@@ -0,0 +1,114 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __Config_H_
+#define __Config_H_
+
+// configure options
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+/** If set to 1, profiling code will be included in the application. When you
+	are deploying your application you will probably want to set this to 0 */
+#define OGRE_PROFILING 0
+
+/** If set to 1, stack unwinding code is compiled into the library and called
+    in case an exception is thrown in order to show the call stack.
+*/
+#define OGRE_STACK_UNWINDING 0
+
+/** There are three modes for handling asserts in OGRE:
+0 - STANDARD - Standard asserts in debug builds, nothing in release builds
+1 - RELEASE_EXCEPTIONS - Standard asserts in debug builds, exceptions in release builds
+2 - EXCEPTIONS - Exceptions in debug builds, exceptions in release builds
+*/
+#define OGRE_ASSERT_MODE 0
+
+/** If set to >0, OGRE will always 'think' that the graphics card only has the
+    number of texture units specified. Very useful for testing multipass fallback.
+*/
+#define OGRE_PRETEND_TEXTURE_UNITS 0
+
+/** If set to 1, Real is typedef'ed to double. Otherwise, Real is typedef'ed
+    to float. Setting this allows you to perform mathematical operations in the
+	CPU (Quaternion, Vector3 etc) with more precision, but bear in mind that the
+	GPU still operates in single-precision mode. 
+*/
+#ifndef OGRE_DOUBLE_PRECISION
+#define OGRE_DOUBLE_PRECISION 0
+#endif
+
+/** If set to 1, the strings are transforned to Unicode, and char is replaced
+    with wchar_t when having to do with strings of any kind.
+*/
+#define OGRE_WCHAR_T_STRINGS 0
+
+/** Define number of texture coordinate sets allowed per vertex.
+*/
+#define OGRE_MAX_TEXTURE_COORD_SETS 6
+
+/** Define max number of texture layers allowed per pass on any card. 
+*/
+#define OGRE_MAX_TEXTURE_LAYERS 16
+
+/** Define max number of lights allowed per pass. 
+*/
+#define OGRE_MAX_SIMULTANEOUS_LIGHTS 8
+
+/** Define max number of blending weights allowed per vertex.
+*/
+#define OGRE_MAX_BLEND_WEIGHTS 4
+
+/** Set this to zero if you want to link OGRE as a static lib. 
+*/
+#define OGRE_DYNAMIC_LINKAGE 1
+
+
+/** Set this to 0 if you want to use the standard memory manager in Debug builds
+    Release builds always use the standard memory manager
+*/
+#define OGRE_DEBUG_MEMORY_MANAGER 1
+
+/** Indicate general support for multithreading.
+	This will enable threading support in certain parts of the
+	engine, mainly resource loading and SharedPtr handling. 
+	The places where threading is available are clearly 
+	marked, you should assume state is NOT thread safe unless otherwise
+	stated in relation to this flag.
+    WARNING: highly experimental, use with caution
+*/
+#ifndef OGRE_THREAD_SUPPORT
+#define OGRE_THREAD_SUPPORT 0
+#endif
+
+/** Disables use of the DevIL image library for loading images.
+    WARNING: Use only when you want to provide your own image loading code via codecs.
+*/
+#ifndef OGRE_NO_DEVIL
+#define OGRE_NO_DEVIL 0
+#endif
+
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreFrustum.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreFrustum.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreFrustum.h	(revision 1092)
@@ -0,0 +1,456 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __Frustum_H__
+#define __Frustum_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreMovableObject.h"
+#include "OgreRenderable.h"
+#include "OgreAxisAlignedBox.h"
+#include "OgreVertexIndexData.h"
+#include "OgreMovablePlane.h"
+
+namespace Ogre
+{
+    /** Specifies perspective (realistic) or orthographic (architectural) projection.
+    */
+    enum ProjectionType
+    {
+        PT_ORTHOGRAPHIC,
+        PT_PERSPECTIVE
+    };
+
+    /** Worldspace clipping planes.
+    */
+    enum FrustumPlane
+    {
+        FRUSTUM_PLANE_NEAR   = 0,
+        FRUSTUM_PLANE_FAR    = 1,
+        FRUSTUM_PLANE_LEFT   = 2,
+        FRUSTUM_PLANE_RIGHT  = 3,
+        FRUSTUM_PLANE_TOP    = 4,
+        FRUSTUM_PLANE_BOTTOM = 5
+    };
+
+    /** A frustum represents a pyramid, capped at the near and far end which is
+        used to represent either a visible area or a projection area. Can be used
+        for a number of applications.
+    */
+    class _OgreExport Frustum : public MovableObject, public Renderable
+    {
+    protected:
+        /// Orthographic or perspective?
+        ProjectionType mProjType;
+
+        /// y-direction field-of-view (default 45)
+        Radian mFOVy;
+        /// Far clip distance - default 10000
+        Real mFarDist;
+        /// Near clip distance - default 100
+        Real mNearDist;
+        /// x/y viewport ratio - default 1.3333
+        Real mAspect;
+
+        /// The 6 main clipping planes
+        mutable Plane mFrustumPlanes[6];
+
+        /// Stored versions of parent orientation / position
+        mutable Quaternion mLastParentOrientation;
+        mutable Vector3 mLastParentPosition;
+
+        /// Pre-calced projection matrix
+        mutable Matrix4 mProjMatrix;
+        /// Pre-calced standard projection matrix
+        mutable Matrix4 mStandardProjMatrix;
+        /// Pre-calced view matrix
+        mutable Matrix4 mViewMatrix;
+        /// Something's changed in the frustrum shape?
+        mutable bool mRecalcFrustum;
+        /// Something re the view pos has changed
+        mutable bool mRecalcView;
+
+
+        /** Temp coefficient values calculated from a frustum change,
+            used when establishing the frustum planes when the view changes
+        */
+        mutable Real mCoeffL[2], mCoeffR[2], mCoeffB[2], mCoeffT[2];
+
+
+
+		
+        // Internal functions for calcs
+        virtual void updateFrustum(void) const;
+        virtual void updateView(void) const;
+        virtual bool isViewOutOfDate(void) const;
+        virtual bool isFrustumOutOfDate(void) const;
+        /// Signal to update frustum information.
+        virtual void invalidateFrustum(void) const;
+        /// Signal to update view information.
+        virtual void invalidateView(void) const;
+
+        /// Shared class-level name for Movable type
+        static String msMovableType;
+
+        mutable AxisAlignedBox mBoundingBox;
+        mutable VertexData mVertexData;
+
+        MaterialPtr mMaterial;
+        mutable Vector3 mWorldSpaceCorners[8];
+
+        /// Is this frustum to act as a reflection of itself?
+        bool mReflect;
+		/// Derived reflection matrix
+        mutable Matrix4 mReflectMatrix;
+        /// Fixed reflection plane
+		mutable Plane mReflectPlane;
+		/// Pointer to a reflection plane (automatically updated)
+		const MovablePlane* mLinkedReflectPlane;
+		/// Record of the last world-space reflection plane info used
+		mutable Plane mLastLinkedReflectionPlane;
+		
+        /// Is this frustum using an oblique depth projection?
+		bool mObliqueDepthProjection;
+		/// Fixed oblique projection plane
+		mutable Plane mObliqueProjPlane;
+		/// Pointer to oblique projection plane (automatically updated)
+		const MovablePlane* mLinkedObliqueProjPlane;
+		/// Record of the last world-space oblique depth projection plane info used
+		mutable Plane mLastLinkedObliqueProjPlane;
+
+		
+		/** Get the derived position of this frustum. */
+        virtual const Vector3& getPositionForViewUpdate(void) const;
+        /** Get the derived orientation of this frustum. */
+        virtual const Quaternion& getOrientationForViewUpdate(void) const;
+
+
+    public:
+
+        Frustum();
+        virtual ~Frustum();
+        /** Sets the Y-dimension Field Of View (FOV) of the frustum.
+            @remarks
+                Field Of View (FOV) is the angle made between the frustum's position, and the edges
+                of the 'screen' onto which the scene is projected. High values (90+ degrees) result in a wide-angle,
+                fish-eye kind of view, low values (30- degrees) in a stretched, telescopic kind of view. Typical values
+                are between 45 and 60 degrees.
+            @par
+                This value represents the VERTICAL field-of-view. The horizontal field of view is calculated from
+                this depending on the dimensions of the viewport (they will only be the same if the viewport is square).
+            @note
+                Setting the FOV overrides the value supplied for frustum::setNearClipPlane.
+         */
+        virtual void setFOVy(const Radian& fovy);
+#ifndef OGRE_FORCE_ANGLE_TYPES
+        inline void setFOVy(Real fovy) {
+            setFOVy ( Angle(fovy) );
+        }
+#endif//OGRE_FORCE_ANGLE_TYPES
+
+        /** Retrieves the frustums Y-dimension Field Of View (FOV).
+        */
+        virtual const Radian& getFOVy(void) const;
+
+        /** Sets the position of the near clipping plane.
+            @remarks
+                The position of the near clipping plane is the distance from the frustums position to the screen
+                on which the world is projected. The near plane distance, combined with the field-of-view and the
+                aspect ratio, determines the size of the viewport through which the world is viewed (in world
+                co-ordinates). Note that this world viewport is different to a screen viewport, which has it's
+                dimensions expressed in pixels. The frustums viewport should have the same aspect ratio as the
+                screen viewport it renders into to avoid distortion.
+            @param
+                near The distance to the near clipping plane from the frustum in world coordinates.
+         */
+        virtual void setNearClipDistance(Real nearDist);
+
+        /** Sets the position of the near clipping plane.
+        */
+        virtual Real getNearClipDistance(void) const;
+
+        /** Sets the distance to the far clipping plane.
+            @remarks
+                The view frustrum is a pyramid created from the frustum position and the edges of the viewport.
+                This method sets the distance for the far end of that pyramid. 
+                Different applications need different values: e.g. a flight sim
+                needs a much further far clipping plane than a first-person 
+                shooter. An important point here is that the larger the ratio 
+                between near and far clipping planes, the lower the accuracy of
+                the Z-buffer used to depth-cue pixels. This is because the
+                Z-range is limited to the size of the Z buffer (16 or 32-bit) 
+                and the max values must be spread over the gap between near and
+                far clip planes. As it happens, you can affect the accuracy far 
+                more by altering the near distance rather than the far distance, 
+                but keep this in mind.
+            @param
+                far The distance to the far clipping plane from the frustum in 
+                world coordinates.If you specify 0, this means an infinite view
+                distance which is useful especially when projecting shadows; but
+                be careful not to use a near distance too close.
+        */
+        virtual void setFarClipDistance(Real farDist);
+
+        /** Retrieves the distance from the frustum to the far clipping plane.
+        */
+        virtual Real getFarClipDistance(void) const;
+
+        /** Sets the aspect ratio for the frustum viewport.
+            @remarks
+                The ratio between the x and y dimensions of the rectangular area visible through the frustum
+                is known as aspect ratio: aspect = width / height .
+            @par
+                The default for most fullscreen windows is 1.3333 - this is also assumed by Ogre unless you
+                use this method to state otherwise.
+        */
+        virtual void setAspectRatio(Real ratio);
+
+        /** Retreives the current aspect ratio.
+        */
+        virtual Real getAspectRatio(void) const;
+
+        /** Gets the projection matrix for this frustum. Mainly for use by OGRE internally.
+        @remarks
+            This method retrieves the rendering-API dependent version of the projection
+            matrix. If you want a 'typical' projection matrix then use 
+            getStandardProjectionMatrix.
+
+        */
+        virtual const Matrix4& getProjectionMatrix(void) const;
+        /** Gets the 'standard' projection matrix for this frustum, ie the 
+        projection matrix which conforms to standard right-handed rules.
+        @remarks
+            This differs from the rendering-API dependent getProjectionMatrix
+            in that it always returns a right-handed projection matrix result 
+            no matter what rendering API is being used - this is required for
+            vertex and fragment programs for example. However, the resulting depth
+            range may still vary between render systems since D3D uses [0,1] and 
+            GL uses [-1,1], and the range must be kept the same between programmable
+            and fixed-function pipelines.
+        */
+        virtual const Matrix4& getStandardProjectionMatrix(void) const;
+
+        /** Gets the view matrix for this frustum. Mainly for use by OGRE internally.
+        */
+        virtual const Matrix4& getViewMatrix(void) const;
+
+        /** Retrieves a specified plane of the frustum.
+            @remarks
+                Gets a reference to one of the planes which make up the frustum frustum, e.g. for clipping purposes.
+        */
+        virtual const Plane& getFrustumPlane( unsigned short plane ) const;
+
+        /** Tests whether the given container is visible in the Frustum.
+            @param
+                bound Bounding box to be checked
+            @param
+                culledBy Optional pointer to an int which will be filled by the plane number which culled
+                the box if the result was false;
+            @returns
+                If the box was visible, true is returned.
+            @par
+                Otherwise, false is returned.
+        */
+        virtual bool isVisible(const AxisAlignedBox& bound, FrustumPlane* culledBy = 0) const;
+
+        /** Tests whether the given container is visible in the Frustum.
+            @param
+                bound Bounding sphere to be checked
+            @param
+                culledBy Optional pointer to an int which will be filled by the plane number which culled
+                the box if the result was false;
+            @returns
+                If the sphere was visible, true is returned.
+            @par
+                Otherwise, false is returned.
+        */
+        virtual bool isVisible(const Sphere& bound, FrustumPlane* culledBy = 0) const;
+
+        /** Tests whether the given vertex is visible in the Frustum.
+            @param
+                vert Vertex to be checked
+            @param
+                culledBy Optional pointer to an int which will be filled by the plane number which culled
+                the box if the result was false;
+            @returns
+                If the box was visible, true is returned.
+            @par
+                Otherwise, false is returned.
+        */
+        virtual bool isVisible(const Vector3& vert, FrustumPlane* culledBy = 0) const;
+
+
+        /** Overridden from MovableObject */
+        const AxisAlignedBox& getBoundingBox(void) const;
+
+        /** Overridden from MovableObject */
+		Real getBoundingRadius(void) const;
+
+		/** Overridden from MovableObject */
+        void _updateRenderQueue(RenderQueue* queue);
+
+        /** Overridden from MovableObject */
+        const String& getMovableType(void) const;
+
+        /** Overridden from MovableObject */
+        const String& getName(void) const;
+
+        /** Overridden from MovableObject */
+        void _notifyCurrentCamera(Camera* cam);
+
+        /** Overridden from Renderable */
+        const MaterialPtr& getMaterial(void) const;
+
+        /** Overridden from Renderable */
+        void getRenderOperation(RenderOperation& op);
+
+        /** Overridden from Renderable */
+        void getWorldTransforms(Matrix4* xform) const;
+
+        /** Overridden from Renderable */
+        const Quaternion& getWorldOrientation(void) const;
+
+        /** Overridden from Renderable */
+        const Vector3& getWorldPosition(void) const;
+
+        /** Overridden from Renderable */
+        Real getSquaredViewDepth(const Camera* cam) const;
+
+        /** Overridden from Renderable */
+        const LightList& getLights(void) const;
+
+        /** Gets the world space corners of the frustum.
+        @remarks
+            The corners are ordered as follows: top-right near, 
+            top-left near, bottom-left near, bottom-right near, 
+            top-right far, top-left far, bottom-left far, bottom-right far.
+        */
+        virtual const Vector3* getWorldSpaceCorners(void) const;
+
+        /** Sets the type of projection to use (orthographic or perspective). Default is perspective.
+        */
+        virtual void setProjectionType(ProjectionType pt);
+
+        /** Retrieves info on the type of projection used (orthographic or perspective).
+        */
+        virtual ProjectionType getProjectionType(void) const;
+
+        /** Modifies this frustum so it always renders from the reflection of itself through the
+        plane specified.
+        @remarks
+        This is obviously useful for performing planar reflections. 
+        */
+        virtual void enableReflection(const Plane& p);
+        /** Modifies this frustum so it always renders from the reflection of itself through the
+        plane specified. Note that this version of the method links to a plane
+		so that changes to it are picked up automatically. It is important that
+		this plane continues to exist whilst this object does; do not destroy
+		the plane before the frustum.
+        @remarks
+        This is obviously useful for performing planar reflections. 
+        */
+        virtual void enableReflection(const MovablePlane* p);
+
+        /** Disables reflection modification previously turned on with enableReflection */
+        virtual void disableReflection(void);
+
+        /// Returns whether this frustum is being reflected
+        virtual bool isReflected(void) const { return mReflect; }
+        /// Returns the reflection matrix of the frustum if appropriate
+        virtual const Matrix4& getReflectionMatrix(void) const { return mReflectMatrix; }
+        /// Returns the reflection plane of the frustum if appropriate
+        virtual const Plane& getReflectionPlane(void) const { return mReflectPlane; }
+
+        /** Project a sphere onto the near plane and get the bounding rectangle. 
+        @param sphere The world-space sphere to project
+        @param radius Radius of the sphere
+        @param left, top, right, bottom Pointers to destination values, these
+            will be completed with the normalised device coordinates (in the 
+            range {-1,1})
+        @returns true if the sphere was projected to a subset of the near plane,
+            false if the entire near plane was contained
+        */
+        virtual bool projectSphere(const Sphere& sphere, 
+            Real* left, Real* top, Real* right, Real* bottom) const;
+
+
+		/** Links the frustum to a custom near clip plane, which can be used
+			to clip geometry in a custom manner without using user clip planes.
+		@remarks
+			There are several applications for clipping a scene arbitrarily by
+			a single plane; the most common is when rendering a reflection to 
+			a texture, and you only want to render geometry that is above the 
+			water plane (to do otherwise results in artefacts). Whilst it is
+			possible to use user clip planes, they are not supported on all
+			cards, and sometimes are not hardware accelerated when they are
+			available. Instead, where a single clip plane is involved, this
+			technique uses a 'fudging' of the near clip plane, which is 
+			available and fast on all hardware, to perform as the arbitrary
+			clip plane. This does change the shape of the frustum, leading 
+			to some depth buffer loss of precision, but for many of the uses of
+			this technique that is not an issue.
+		@par 
+			This version of the method links to a plane, rather than requiring
+			a by-value plane definition, and therefore you can 
+			make changes to the plane (e.g. by moving / rotating the node it is
+			attached to) and they will automatically affect this object.
+		@note This technique only works for perspective projection.
+		@param plane The plane to link to to perform the clipping. This plane
+			must continue to exist while the camera is linked to it; do not
+			destroy it before the frustum. 
+		*/
+		virtual void enableCustomNearClipPlane(const MovablePlane* plane);
+		/** Links the frustum to a custom near clip plane, which can be used
+			to clip geometry in a custom manner without using user clip planes.
+		@remarks
+			There are several applications for clipping a scene arbitrarily by
+			a single plane; the most common is when rendering a reflection to  
+			a texture, and you only want to render geometry that is above the 
+			water plane (to do otherwise results in artefacts). Whilst it is
+			possible to use user clip planes, they are not supported on all
+			cards, and sometimes are not hardware accelerated when they are
+			available. Instead, where a single clip plane is involved, this
+			technique uses a 'fudging' of the near clip plane, which is 
+			available and fast on all hardware, to perform as the arbitrary
+			clip plane. This does change the shape of the frustum, leading 
+			to some depth buffer loss of precision, but for many of the uses of
+			this technique that is not an issue.
+		@note This technique only works for perspective projection.
+		@param plane The plane to link to to perform the clipping. This plane
+			must continue to exist while the camera is linked to it; do not
+			destroy it before the frustum. 
+		*/
+		virtual void enableCustomNearClipPlane(const Plane& plane);
+		/** Disables any custom near clip plane. */
+		virtual void disableCustomNearClipPlane(void);
+		
+
+        /// Small constant used to reduce far plane projection to avoid inaccuracies
+        static const Real INFINITE_FAR_PLANE_ADJUST;
+    };
+
+
+}
+
+#endif 
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreWireBoundingBox.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreWireBoundingBox.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreWireBoundingBox.h	(revision 1092)
@@ -0,0 +1,77 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _WireBoundingBox_H__
+#define _WireBoundingBox_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreSimpleRenderable.h"
+
+namespace Ogre {
+
+    /** Allows the rendering of a wireframe bounding box.
+        @remarks
+            This class builds a wireframe renderable from a given aabb. A pointer to this class can be
+			added to a render queue to display the bounding box of an object.
+    */
+	class _OgreExport WireBoundingBox : public SimpleRenderable
+	{
+    protected:
+        /** Override this method to prevent parent transforms (rotation,translation,scale)
+        */
+		void getWorldTransforms( Matrix4* xform ) const;
+        /** @copydoc Renderable::getWorldOrientation */
+        const Quaternion& getWorldOrientation(void) const;
+        /** @copydoc Renderable::getWorldPosition */
+        const Vector3& getWorldPosition(void) const;
+		
+        /** Builds the wireframe line list.
+        */
+		void setupBoundingBoxVertices(const AxisAlignedBox& aab);
+
+        Real mRadius;
+
+	public:
+			
+		WireBoundingBox();
+		~WireBoundingBox();
+
+        /** Builds the wireframe line list.
+            @param
+                aabb bounding box to build a wireframe from.
+        */
+		void setupBoundingBox(const AxisAlignedBox& aabb);
+
+		Real getSquaredViewDepth(const Camera* cam) const;
+
+        Real getBoundingRadius(void) const { return mRadius; }
+
+	};
+
+}// namespace
+
+#endif
+
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSerializer.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSerializer.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSerializer.h	(revision 1092)
@@ -0,0 +1,92 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __Serializer_H__
+#define __Serializer_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreString.h"
+#include "OgreDataStream.h"
+
+namespace Ogre {
+
+    /** Generic class for serialising data to / from binary stream-based files.
+    @remarks
+        This class provides a number of useful methods for exporting / importing data
+        from stream-oriented binary files (e.g. .mesh and .skeleton).
+    */
+    class _OgreExport Serializer
+    {
+    public:
+        Serializer();
+        virtual ~Serializer();
+
+
+    protected:
+
+        uint32 mCurrentstreamLen;
+        FILE* mpfFile;
+        String mVersion;
+
+        // Internal methods
+        virtual void writeFileHeader(void);
+        virtual void writeChunkHeader(uint16 id, uint32 size);
+        
+        void writeFloats(const float* const pfloat, size_t count);
+        void writeFloats(const double* const pfloat, size_t count);
+        void writeShorts(const uint16* const pShort, size_t count);
+        void writeInts(const uint32* const pInt, size_t count); 
+        void writeBools(const bool* const pLong, size_t count);
+        void writeObject(const Vector3& vec);
+        void writeObject(const Quaternion& q);
+        
+        void writeString(const String& string);
+        void writeData(const void* const buf, size_t size, size_t count);
+        
+        virtual void readFileHeader(DataStreamPtr& stream);
+        virtual unsigned short readChunk(DataStreamPtr& stream);
+        
+        void readBools(DataStreamPtr& stream, bool* pDest, size_t count);
+        void readFloats(DataStreamPtr& stream, float* pDest, size_t count);
+        void readFloats(DataStreamPtr& stream, double* pDest, size_t count);
+        void readShorts(DataStreamPtr& stream, uint16* pDest, size_t count);
+        void readInts(DataStreamPtr& stream, uint32* pDest, size_t count);
+        void readObject(DataStreamPtr& stream, Vector3& pDest);
+        void readObject(DataStreamPtr& stream, Quaternion& pDest);
+
+        String readString(DataStreamPtr& stream);
+        String readString(DataStreamPtr& stream, size_t numChars);
+        
+        virtual void flipToLittleEndian(void* pData, size_t size, size_t count = 1);
+        virtual void flipFromLittleEndian(void* pData, size_t size, size_t count = 1);
+        
+        virtual void flipEndian(void * pData, size_t size, size_t count);
+        virtual void flipEndian(void * pData, size_t size);
+    };
+
+}
+
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreOverlayManager.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreOverlayManager.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreOverlayManager.h	(revision 1092)
@@ -0,0 +1,232 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __OverlayManager_H__
+#define __OverlayManager_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreSingleton.h"
+#include "OgreStringVector.h"
+#include "OgreOverlay.h"
+#include "OgreScriptLoader.h"
+
+namespace Ogre {
+
+    /** Manages Overlay objects, parsing them from .overlay files and
+        storing a lookup library of them. Alo manages the creation of 
+		OverlayContainers and OverlayElements, used for non-interactive 2D 
+		elements such as HUDs.
+    */
+    class _OgreExport OverlayManager : public Singleton<OverlayManager>, public ScriptLoader
+    {
+    public:
+        typedef std::map<String, Overlay*> OverlayMap;
+		typedef std::map<String, OverlayElement*> ElementMap;
+    protected:
+        OverlayMap mOverlayMap;
+        StringVector mScriptPatterns;
+
+        void parseNewElement( DataStreamPtr& chunk, String& elemType, String& elemName, 
+            bool isContainer, Overlay* pOverlay, bool isTemplate, String templateName = String(""), OverlayContainer* container = 0);
+        void parseAttrib( const String& line, Overlay* pOverlay);
+        void parseElementAttrib( const String& line, Overlay* pOverlay, OverlayElement* pElement );
+        void parseNewMesh(DataStreamPtr& chunk, String& meshName, String& entityName, Overlay* pOverlay);
+        void skipToNextCloseBrace(DataStreamPtr& chunk);
+        void skipToNextOpenBrace(DataStreamPtr& chunk);
+        
+        int mLastViewportWidth, mLastViewportHeight;
+        bool mViewportDimensionsChanged;
+
+	    bool parseChildren( DataStreamPtr& chunk, const String& line,
+            Overlay* pOverlay, bool isTemplate, OverlayContainer* parent = NULL);
+
+		typedef std::map<String, OverlayElementFactory*> FactoryMap;
+		FactoryMap mFactories;
+
+		ElementMap mInstances;
+		ElementMap mTemplates;
+
+		typedef std::set<String> LoadedScripts;
+		LoadedScripts mLoadedScripts;
+
+
+
+
+		ElementMap& getElementMap(bool isTemplate);
+
+		OverlayElement* createOverlayElementImpl(const String& typeName, const String& instanceName, ElementMap& elementMap);
+
+		OverlayElement* getOverlayElementImpl(const String& name, ElementMap& elementMap);
+
+		void destroyOverlayElementImpl(const String& instanceName, ElementMap& elementMap);
+
+		void destroyOverlayElementImpl(OverlayElement* pInstance, ElementMap& elementMap);
+
+		void destroyAllOverlayElementsImpl(ElementMap& elementMap);
+
+    public:
+        OverlayManager();
+        virtual ~OverlayManager();
+
+        /// @copydoc ScriptLoader::getScriptPatterns
+        const StringVector& getScriptPatterns(void) const;
+        /// @copydoc ScriptLoader::parseScript
+        void parseScript(DataStreamPtr& stream, const String& groupName);
+        /// @copydoc ScriptLoader::getLoadingOrder
+        Real getLoadingOrder(void) const;
+
+        /** Create a new Overlay. */
+        Overlay* create(const String& name);
+        /** Retrieve an Overlay by name 
+        @returns A pointer to the Overlay, or 0 if not found
+        */
+        Overlay* getByName(const String& name);
+        /** Destroys an existing overlay by name */
+        void destroy(const String& name);
+        /** Destroys an existing overlay */
+        void destroy(Overlay* overlay);
+        /** Destroys all existing overlays */
+        void destroyAll(void);
+        typedef MapIterator<OverlayMap> OverlayMapIterator;
+        OverlayMapIterator getOverlayIterator(void);
+
+        /** Internal method for queueing the visible overlays for rendering. */
+        void _queueOverlaysForRendering(Camera* cam, RenderQueue* pQueue, Viewport *vp);
+
+        /** Method for determining if the viewport has changed dimensions. 
+        @remarks This is used by pixel-based OverlayElements to work out if they need to
+            reclaculate their sizes.
+        */
+        bool hasViewportChanged(void) const;
+
+        /** Gets the height of the destination viewport in pixels. */
+        int getViewportHeight(void) const;
+        
+        /** Gets the width of the destination viewport in pixels. */
+        int getViewportWidth(void) const;
+        Real getViewportAspectRatio(void) const;
+
+
+		/** Creates a new OverlayElement of the type requested.
+		@remarks
+		The type of element to create is passed in as a string because this
+		allows plugins to register new types of component.
+		@param typeName The type of element to create.
+		@param instanceName The name to give the new instance.
+		*/
+		OverlayElement* createOverlayElement(const String& typeName, const String& instanceName, bool isTemplate = false);
+
+		/** Gets a reference to an existing element. */
+		OverlayElement* getOverlayElement(const String& name, bool isTemplate = false);
+
+		/** Destroys a OverlayElement. 
+		@remarks
+		Make sure you're not still using this in an Overlay. If in
+		doubt, let OGRE destroy elements on shutdown.
+		*/
+		void destroyOverlayElement(const String& instanceName, bool isTemplate = false);
+
+		/** Destroys a OverlayElement. 
+		@remarks
+		Make sure you're not still using this in an Overlay. If in
+		doubt, let OGRE destroy elements on shutdown.
+		*/
+		void destroyOverlayElement(OverlayElement* pInstance, bool isTemplate = false);
+
+		/** Destroys all the OverlayElement  created so far.
+		@remarks
+		Best to leave this to the engine to call internally, there
+		should rarely be a need to call it yourself.
+		*/
+		void destroyAllOverlayElements(bool isTemplate = false);
+
+		/** Registers a new OverlayElementFactory with this manager.
+		@remarks
+		Should be used by plugins or other apps wishing to provide
+		a new OverlayElement subclass.
+		*/
+		void addOverlayElementFactory(OverlayElementFactory* elemFactory);
+
+		OverlayElement* createOverlayElementFromTemplate(const String& templateName, const String& typeName, const String& instanceName, bool isTemplate = false);
+		/**
+		*  @remarks
+		*  Creates a new OverlayElement object from the specified template name.  The new
+		*  object's name, and all of it's children, will be instanceName/orignalName.
+		*/
+		OverlayElement* cloneOverlayElementFromTemplate(const String& templateName, const String& instanceName);
+
+		OverlayElement* createOverlayElementFromFactory(const String& typeName, const String& instanceName);
+
+		typedef MapIterator<ElementMap> TemplateIterator;
+		/** Returns an iterator over all templates in this manager.*/
+		TemplateIterator getTemplateIterator ()
+		{
+			return TemplateIterator (mTemplates.begin (), mTemplates.end ()) ;
+		}
+		/* Returns whether the Element with the given name is a Template */
+		bool isTemplate (String strName) const {
+			return (mTemplates.find (strName) != mTemplates.end()) ;
+		}
+
+
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static OverlayManager& getSingleton(void);
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static OverlayManager* getSingletonPtr(void);
+    };
+
+
+
+}
+
+
+#endif 
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreArchiveManager.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreArchiveManager.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreArchiveManager.h	(revision 1092)
@@ -0,0 +1,126 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _ArchiveManager_H__
+#define _ArchiveManager_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreResourceManager.h"
+#include "OgreSingleton.h"
+
+namespace Ogre {
+
+    /** This class manages the available ArchiveFactory plugins. 
+    */
+    class _OgreExport ArchiveManager : public Singleton<ArchiveManager>
+    {
+    protected:
+        typedef std::map<String, ArchiveFactory*> ArchiveFactoryMap;
+        /// Factories available to create archives, indexed by archive type (String identifier e.g. 'Zip')
+        ArchiveFactoryMap mArchFactories;
+        /// Currently loaded archives
+        typedef std::map<String, Archive*> ArchiveMap;
+        ArchiveMap mArchives;
+
+    public:
+        /** Default constructor - should never get called by a client app.
+        */
+        ArchiveManager() {}
+        /** Default destructor.
+        */
+        virtual ~ArchiveManager();
+
+        /** Opens an archive for file reading.
+            @remarks
+                The archives are created using class factories within
+                extension libraries.
+            @param filename
+                The filename that will be opened
+            @param refLibrary
+                The library that contains the data-handling code
+            @returns
+                If the function succeeds, a valid pointer to an Archive
+                object is returened.
+            @par
+                If the function fails, an exception is thrown.
+        */
+        Archive* load( const String& filename, const String& archiveType);
+
+		/** Unloads an archive.
+		@remarks
+			You must ensure that this archive is not being used before removing it.
+		*/
+		void unload(Archive* arch);
+		/** Unloads an archive by name.
+		@remarks
+			You must ensure that this archive is not being used before removing it.
+		*/
+		void unload(const String& filename);
+
+
+        /** Adds a new ArchiveFactory to the list of available factories.
+            @remarks
+                Plugin developers who add new archive codecs need to call
+                this after defining their ArchiveFactory subclass and
+                Archive subclasses for their archive type.
+        */
+        void addArchiveFactory(ArchiveFactory* factory);
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static ArchiveManager& getSingleton(void);
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static ArchiveManager* getSingletonPtr(void);
+    };
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreEntity.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreEntity.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreEntity.h	(revision 1092)
@@ -0,0 +1,617 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://ogre.sourceforge.net/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __Entity_H__
+#define __Entity_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreCommon.h"
+
+#include "OgreString.h"
+#include "OgreMovableObject.h"
+#include "OgreAnimationState.h"
+#include "OgreQuaternion.h"
+#include "OgreVector3.h"
+#include "OgreHardwareBufferManager.h"
+#include "OgreMesh.h"
+
+namespace Ogre {
+    /** Defines an instance of a discrete, movable object based on a Mesh.
+        @remarks
+            Ogre generally divides renderable objects into 2 groups, discrete
+            (separate) and relatively small objects which move around the world,
+            and large, sprawling geometry which makes up generally immovable
+            scenery, aka 'level geometry'.
+        @par
+            The Mesh and SubMesh classes deal with the definition of the geometry
+            used by discrete movable objects. Entities are actual instances of
+            objects based on this geometry in the world. Therefore there is
+            usually a single set Mesh for a car, but there may be multiple
+            entities based on it in the world. Entities are able to override
+            aspects of the Mesh it is defined by, such as changing material
+            properties per instance (so you can have many cars using the same
+            geometry but different textures for example). Because a Mesh is split
+            into SubMeshes for this purpose, the Entity class is a grouping class
+            (much like the Mesh class) and much of the detail regarding
+            individual changes is kept in the SubEntity class. There is a 1:1
+            relationship between SubEntity instances and the SubMesh instances
+            associated with the Mesh the Entity is based on.
+        @par
+            Entity and SubEntity classes are never created directly. Use the
+            createEntity method of the SceneManager (passing a model name) to
+            create one.
+        @par
+            Entities are included in the scene by associating them with a
+            SceneNode, using the attachEntity method. See the SceneNode class
+            for full information.
+        @note
+            No functions were declared virtual to improve performance.
+    */
+    class _OgreExport Entity: public MovableObject
+    {
+        // Allow SceneManager full access
+        friend class SceneManager;
+        friend class SubEntity;
+    public:
+	typedef std::set<Entity*> EntitySet;
+    
+    protected:
+
+        /** Private constructor (instances cannot be created directly).
+        */
+        Entity();
+        /** Private constructor - specify name (the usual constructor used).
+        */
+        Entity( const String& name, MeshPtr& mesh, SceneManager* creator);
+
+        /** Name of the entity; used for location in the scene.
+        */
+        String mName;
+
+        /** The Mesh that this Entity is based on.
+        */
+        MeshPtr mMesh;
+
+        /** List of SubEntities (point to SubMeshes).
+        */
+        typedef std::vector<SubEntity*> SubEntityList;
+        SubEntityList mSubEntityList;
+
+        /** Pointer back to the SceneManager that created this instance, for
+            notification purposes.
+        */
+        SceneManager* mCreatorSceneManager;
+
+
+        /// State of animation for animable meshes
+        AnimationStateSet* mAnimationState;
+
+        /// Shared class-level name for Movable type
+        static String msMovableType;
+
+
+        /// Temp blend buffer details for shared geometry
+        TempBlendedBufferInfo mTempBlendedBuffer;
+        /// Temp blend buffer details for shared geometry
+        VertexData* mSharedBlendedVertexData;
+
+        /** Internal method - given vertex data which could be from the Mesh or 
+            any submesh, finds the temporary blend copy. */
+        const VertexData* findBlendedVertexData(const VertexData* orig);
+        /** Internal method - given vertex data which could be from the Mesh or 
+        any SubMesh, finds the corresponding SubEntity. */
+        SubEntity* findSubEntityForVertexData(const VertexData* orig);
+
+        /** Internal method for extracting metadata out of source vertex data
+            for fast assignment of temporary buffers later. */
+        void extractTempBufferInfo(VertexData* sourceData, TempBlendedBufferInfo* info);
+        /** Internal method to clone vertex data definitions but to remove blend buffers. */
+        VertexData* cloneVertexDataRemoveBlendInfo(const VertexData* source);
+        /** Internal method for preparing this Entity for use in animation. */
+        void prepareTempBlendBuffers(void);
+
+        /// Cached bone matrices, including any world transform
+        Matrix4 *mBoneMatrices;
+        unsigned short mNumBoneMatrices;
+        /// Records the last frame in which animation was updated
+        unsigned long mFrameAnimationLastUpdated;
+
+         /// Perform all the updates required for an animated entity
+        void updateAnimation(void);
+
+        /// Records the last frame in which the bones was updated
+        /// It's a pointer because it can be shared between different entities with
+        /// a shared skeleton.
+        unsigned long *mFrameBonesLastUpdated;
+
+        /**
+        * A set of all the entities which shares a single SkeletonInstance.
+        * This is only created if the entity is in fact sharing it's SkeletonInstance with
+        * other Entities.
+        */
+        EntitySet* mSharedSkeletonEntities;
+        
+        /// Private method to cache bone matrices from skeleton
+        void cacheBoneMatrices(void);
+
+        /// Flag determines whether or not to display skeleton
+        bool mDisplaySkeleton;
+        /// Flag indicating whether hardware skinning is supported by this entities materials
+        bool mHardwareSkinning;
+        /// Counter indicating number of requests for software skinning.
+        int mSoftwareSkinningRequests;
+        /// Counter indicating number of requests for software skinned normals.
+        int mSoftwareSkinningNormalsRequests;
+        /// Flag indicating whether we have a vertex program in use on any of our subentities
+        bool mVertexProgramInUse;
+
+
+		/// The LOD number of the mesh to use, calculated by _notifyCurrentCamera
+		ushort mMeshLodIndex;
+
+		/// LOD bias factor, inverted for optimisation when calculating adjusted depth
+		Real mMeshLodFactorInv;
+		/// Index of minimum detail LOD (NB higher index is lower detail)
+		ushort mMinMeshLodIndex;
+		/// Index of maximum detail LOD (NB lower index is higher detail)
+		ushort mMaxMeshLodIndex;
+
+		/// LOD bias factor, inverted for optimisation when calculating adjusted depth
+		Real mMaterialLodFactorInv;
+		/// Index of minimum detail LOD (NB higher index is lower detail)
+		ushort mMinMaterialLodIndex;
+		/// Index of maximum detail LOD (NB lower index is higher detail)
+		ushort mMaxMaterialLodIndex;
+
+        /// Flag indicating that mesh uses manual LOD and so might have multiple SubEntity versions
+		bool mUsingManualLOD;
+		/** List of LOD Entity instances (for manual LODs).
+			We don't know when the mesh is using manual LODs whether one LOD to the next will have the
+			same number of SubMeshes, therefore we have to allow a separate Entity list 
+            with each alternate one.
+		*/
+		typedef std::vector<Entity*> LODEntityList;
+		LODEntityList mLodEntityList;
+
+        /** This Entity's personal copy of the skeleton, if skeletally animated
+        */
+        SkeletonInstance* mSkeletonInstance;
+
+		/** Builds a list of SubEntities based on the SubMeshes contained in the Mesh. */
+		void buildSubEntityList(MeshPtr& mesh, SubEntityList* sublist);
+
+		/// internal implementation of attaching a 'child' object to this entity and assign the parent node to the child entity
+		void attachObjectImpl(MovableObject *pMovable, TagPoint *pAttachingPoint);
+
+        /// internal implementation of detaching a 'child' object of this entity and clear the parent node of the child entity
+        void detachObjectImpl(MovableObject* pObject);
+
+        /// internal implementation of detaching all 'child' objects of this entity
+        void detachAllObjectsImpl(void);
+
+        /// Trigger reevaluation of the kind of vertex processing in use
+        void reevaluateVertexProcessing(void);
+
+    public:
+        /// Contains the child objects (attached to bones) indexed by name
+        typedef std::map<String, MovableObject*> ChildObjectList;
+    protected:
+        ChildObjectList mChildObjectList;
+
+
+		/// Bounding box that 'contains' all the mesh of each child entity
+		AxisAlignedBox *mFullBoundingBox;
+
+        bool mNormaliseNormals;
+
+        ShadowRenderableList mShadowRenderables;
+
+        /** Nested class to allow entity shadows. */
+        class _OgreExport EntityShadowRenderable : public ShadowRenderable
+        {
+        protected:
+            Entity* mParent;
+            // Shared link to position buffer
+            HardwareVertexBufferSharedPtr mPositionBuffer;
+            // Shared link to w-coord buffer (optional)
+            HardwareVertexBufferSharedPtr mWBuffer;
+            // Link to original vertex data
+            const VertexData* mOriginalVertexData;
+            // Original position buffer source binding
+            unsigned short mOriginalPosBufferBinding;
+            /// Link to SubEntity, only present if SubEntity has it's own geometry
+            SubEntity* mSubEntity;
+
+
+        public:
+            EntityShadowRenderable(Entity* parent, 
+                HardwareIndexBufferSharedPtr* indexBuffer, const VertexData* vertexData, 
+                bool createSeparateLightCap, SubEntity* subent, bool isLightCap = false);
+            ~EntityShadowRenderable();
+            /// Overridden from ShadowRenderable
+            void getWorldTransforms(Matrix4* xform) const;
+            /// Overridden from ShadowRenderable
+            const Quaternion& getWorldOrientation(void) const;
+            /// Overridden from ShadowRenderable
+            const Vector3& getWorldPosition(void) const;
+            HardwareVertexBufferSharedPtr getPositionBuffer(void) { return mPositionBuffer; }
+            HardwareVertexBufferSharedPtr getWBuffer(void) { return mWBuffer; }
+            /// Rebind the source positions (for temp buffer users)
+            void rebindPositionBuffer(void);
+            /// Overridden from ShadowRenderable
+            bool isVisible(void) const;
+
+        };
+    public:
+        /** Default destructor.
+        */
+        ~Entity();
+
+        /** Gets the Mesh that this Entity is based on.
+        */
+        MeshPtr& getMesh(void);
+
+        /** Gets a pointer to a SubEntity, ie a part of an Entity.
+        */
+        SubEntity* getSubEntity(unsigned int index);
+	
+		/** Gets a pointer to a SubEntity by name
+			@remarks - names should be initialized during a Mesh creation.
+		*/
+		SubEntity* getSubEntity( const String& name );
+
+        /** Retrieves the number of SubEntity objects making up this entity.
+        */
+        unsigned int getNumSubEntities(void) const;
+
+        /** Clones this entity and returns a pointer to the clone.
+            @remarks
+                Useful method for duplicating an entity. The new entity must be
+                given a unique name, and is not attached to the scene in any way
+                so must be attached to a SceneNode to be visible (exactly as
+                entities returned from SceneManager::createEntity).
+            @param
+                newName Name for the new entity.
+        */
+        Entity* clone( const String& newName );
+
+        /** Sets the material to use for the whole of this entity.
+            @remarks
+                This is a shortcut method to set all the materials for all
+                subentities of this entity. Only use this method is you want to
+                set the same material for all subentities or if you know there
+                is only one. Otherwise call getSubEntity() and call the same
+                method on the individual SubEntity.
+        */
+        void setMaterialName(const String& name);
+
+        /** Overridden - see MovableObject.
+        */
+        void _notifyCurrentCamera(Camera* cam);
+
+        /// Overridden - see MovableObject.
+        void setRenderQueueGroup(RenderQueueGroupID queueID);
+        
+        /** Overridden - see MovableObject.
+        */
+        const AxisAlignedBox& getBoundingBox(void) const;
+
+        /// merge all the child object Bounds a return it
+		AxisAlignedBox getChildObjectsBoundingBox(void) const;
+
+        /** Overridden - see MovableObject.
+        */
+        void _updateRenderQueue(RenderQueue* queue);
+
+        /** Overridden from MovableObject */
+        const String& getName(void) const;
+
+        /** Overridden from MovableObject */
+        const String& getMovableType(void) const;
+
+        /** For entities based on animated meshes, gets the AnimationState object for a single animation.
+        @remarks
+            You animate an entity by updating the animation state objects. Each of these represents the
+            current state of each animation available to the entity. The AnimationState objects are
+            initialised from the Mesh object.
+        */
+        AnimationState* getAnimationState(const String& name);
+        /** For entities based on animated meshes, gets the AnimationState objects for all animations.
+        @returns
+            In case the entity is animated, this functions returns the pointer to a AnimationStateSet 
+            containing all animations of the entries. If the entity is not animated, it returns 0.
+        @remarks
+            You animate an entity by updating the animation state objects. Each of these represents the
+            current state of each animation available to the entity. The AnimationState objects are
+            initialised from the Mesh object.
+        */
+        AnimationStateSet* getAllAnimationStates(void);
+
+        /** Tells the Entity whether or not it should display it's skeleton, if it has one.
+        */
+        void setDisplaySkeleton(bool display);
+
+        /** Returns whether or not the entity is currently displaying its skeleton.
+         */
+        bool getDisplaySkeleton(void) const;
+
+
+        /** Gets a pointer to the entity representing the numbered manual level of detail.
+        @remarks
+            The zero-based index never includes the original entity, unlike
+			Mesh::getLodLevel.
+        */
+        Entity* getManualLodLevel(size_t index) const;
+
+        /** Returns the number of manual levels of detail that this entity supports.
+        @remarks
+            This number never includes the original entity, it is difference
+            with Mesh::getNumLodLevels.
+        */
+        size_t getNumManualLodLevels(void) const;
+
+		/** Sets a level-of-detail bias for the mesh detail of this entity.
+		@remarks
+			Level of detail reduction is normally applied automatically based on the Mesh 
+			settings. However, it is possible to influence this behaviour for this entity
+			by adjusting the LOD bias. This 'nudges' the mesh level of detail used for this 
+			entity up or down depending on your requirements. You might want to use this
+			if there was a particularly important entity in your scene which you wanted to
+			detail better than the others, such as a player model.
+		@par
+			There are three parameters to this method; the first is a factor to apply; it 
+			defaults to 1.0 (no change), by increasing this to say 2.0, this model would 
+			take twice as long to reduce in detail, whilst at 0.5 this entity would use lower
+			detail versions twice as quickly. The other 2 parameters are hard limits which 
+			let you set the maximum and minimum level-of-detail version to use, after all
+			other calculations have been made. This lets you say that this entity should
+			never be simplified, or that it can only use LODs below a certain level even
+			when right next to the camera.
+		@param factor Proportional factor to apply to the distance at which LOD is changed. 
+			Higher values increase the distance at which higher LODs are displayed (2.0 is 
+			twice the normal distance, 0.5 is half).
+		@param maxDetailIndex The index of the maximum LOD this entity is allowed to use (lower
+			indexes are higher detail: index 0 is the original full detail model).
+		@param minDetailIndex The index of the minimum LOD this entity is allowed to use (higher
+			indexes are lower detail. Use something like 99 if you want unlimited LODs (the actual
+			LOD will be limited by the number in the Mesh)
+		*/
+		void setMeshLodBias(Real factor, ushort maxDetailIndex = 0, ushort minDetailIndex = 99);
+
+		/** Sets a level-of-detail bias for the material detail of this entity.
+		@remarks
+			Level of detail reduction is normally applied automatically based on the Material 
+			settings. However, it is possible to influence this behaviour for this entity
+			by adjusting the LOD bias. This 'nudges' the material level of detail used for this 
+			entity up or down depending on your requirements. You might want to use this
+			if there was a particularly important entity in your scene which you wanted to
+			detail better than the others, such as a player model.
+		@par
+			There are three parameters to this method; the first is a factor to apply; it 
+			defaults to 1.0 (no change), by increasing this to say 2.0, this entity would 
+			take twice as long to use a lower detail material, whilst at 0.5 this entity 
+            would use lower detail versions twice as quickly. The other 2 parameters are 
+            hard limits which let you set the maximum and minimum level-of-detail index 
+            to use, after all other calculations have been made. This lets you say that 
+            this entity should never be simplified, or that it can only use LODs below 
+            a certain level even when right next to the camera.
+		@param factor Proportional factor to apply to the distance at which LOD is changed. 
+			Higher values increase the distance at which higher LODs are displayed (2.0 is 
+			twice the normal distance, 0.5 is half).
+		@param maxDetailIndex The index of the maximum LOD this entity is allowed to use (lower
+			indexes are higher detail: index 0 is the original full detail model).
+		@param minDetailIndex The index of the minimum LOD this entity is allowed to use (higher
+			indexes are lower detail. Use something like 99 if you want unlimited LODs (the actual
+			LOD will be limited by the number of lod indexes used in the Material)
+		*/
+        void setMaterialLodBias(Real factor, ushort maxDetailIndex = 0, ushort minDetailIndex = 99);
+			
+        /** Sets the rendering detail of this entire entity (solid, wireframe etc) */
+        void setRenderDetail(SceneDetailLevel renderDetail);
+
+		/** Sets whether the rendering detail of this entire entity may be 
+			overridden by the camera detail settings. 
+		*/
+		void setRenderDetailOverrideable(bool renderDetailOverrideable);
+		/** Attaches another object to a certain bone of the skeleton which this entity uses.
+        @remarks
+            This method can be used to attach another object to an animated part of this entity,
+            by attaching it to a bone in the skeleton (with an offset if required). As this entity 
+            is animated, the attached object will move relative to the bone to which it is attached.
+        @param boneName The name of the bone (in the skeleton) to attach this object
+        @param pMovable Pointer to the object to attach
+        @param offsetOrientation An adjustment to the orientation of the attached object, relative to the bone.
+        @param offsetPosition An adjustment to the position of the attached object, relative to the bone.
+        */
+		void attachObjectToBone(const String &boneName, MovableObject *pMovable, const Quaternion &offsetOrientation = Quaternion::IDENTITY, const Vector3 &offsetPosition = Vector3::ZERO);
+
+		/// detach a MovableObject previously attached using attachObjectToBone
+		MovableObject* detachObjectFromBone(const String &movableName);
+
+        /** Detaches an object by pointer.
+        @remarks
+            This method is need when destroy a MovableObject which attached to a bone of this entity.
+            But sometimes the object may be not in the child object list because it is a lod entity,
+            this method can safely detect and ignore in this case.
+        */
+        void detachObjectFromBone(MovableObject* obj);
+
+        /// Detach all MovableObjects previously attached using attachObjectToBone
+        void detachAllObjectsFromBone(void);
+
+        typedef MapIterator<ChildObjectList> ChildObjectListIterator;
+        /** Gets an iterator to the list of objects attached to bones on this entity. */
+        ChildObjectListIterator getAttachedObjectIterator(void);
+        /** @see MovableObject::getBoundingRadius */
+		Real getBoundingRadius(void) const;
+		/** @copy MovableObject::getWorldBoundingBox */
+		const AxisAlignedBox& getWorldBoundingBox(bool derive = false) const;
+		/** @copy MovableObject::getWorldBoundingSphere */
+		const Sphere& getWorldBoundingSphere(bool derive = false) const;
+
+        /** If set to true, this forces normals of this entity to be normalised
+            dynamically by the hardware.
+        @remarks
+            This option can be used to prevent lighting variations when scaling an
+            Entity using a SceneNode - normally because this scaling is hardware
+            based, the normals get scaled too which causes lighting to become inconsistent.
+            However, this has an overhead so only do this if you really need to.
+        */
+        void setNormaliseNormals(bool normalise) { mNormaliseNormals = normalise; }
+
+        /** Returns true if this entity has auto-normalisation of normals set. */
+        bool getNormaliseNormals(void) const {return mNormaliseNormals; }
+
+
+        /** Overridden member from ShadowCaster. */
+        EdgeData* getEdgeList(void);
+        /** Overridden member from ShadowCaster. */
+        ShadowRenderableListIterator getShadowVolumeRenderableIterator(
+            ShadowTechnique shadowTechnique, const Light* light, 
+            HardwareIndexBufferSharedPtr* indexBuffer, 
+            bool extrudeVertices, Real extrusionDistance, unsigned long flags = 0 );
+
+		/** Internal method for retrieving bone matrix information. */
+		const Matrix4* _getBoneMatrices(void) { return mBoneMatrices;}
+		/** Internal method for retrieving bone matrix information. */
+        unsigned short _getNumBoneMatrices(void) { return mNumBoneMatrices; }
+        /** Returns whether or not this entity is skeletally animated. */
+        bool hasSkeleton(void) { return mSkeletonInstance != 0; }
+        /** Get this Entity's personal skeleton instance. */
+        SkeletonInstance* getSkeleton(void) { return mSkeletonInstance; }
+        /** Returns whether or not hardware skinning is enabled.
+        @remarks
+            Because fixed-function indexed vertex blending is rarely supported
+            by existing graphics cards, hardware skinning can only be done if
+            the vertex programs in the materials used to render an entity support
+            it. Therefore, this method will only return true if all the materials
+            assigned to this entity have vertex programs assigned, and all those
+            vertex programs must support 'include_skeletal_animation true'.
+        */
+        bool isHardwareSkinningEnabled(void) const { return mHardwareSkinning; }
+        /** Returns the number of requests that have been made for software skinning
+        @remarks
+            If non-zero then software skinning will be performed in updateAnimation
+            regardless of the current setting of isHardwareSkinningEnabled.
+            Requests for software skinning are made by calling the 
+            addSoftwareSkinningRequest() method.
+        */
+        int getSoftwareSkinningRequests(void) const { return mSoftwareSkinningRequests; }
+        /** Returns the number of requests that have been made for software skinning of normals
+        @remarks
+            If non-zero, and getSoftwareSkinningRequests() also returns non-zero,
+            then software skinning of normals will be performed in updateAnimation
+            regardless of the current setting of isHardwareSkinningEnabled.
+            Currently it is not possible to force software skinning of only normals.
+            Consequently this value is always less than or equal to that returned
+            by getSoftwareSkinningRequests().
+            Requests for software skinning of normals are made by calling the 
+            addSoftwareSkinningRequest() method with 'true' as the parameter.
+        */
+        int getSoftwareSkinningNormalsRequests(void) const { return mSoftwareSkinningNormalsRequests; }
+        /** Add a request for software skinning
+        @remarks
+            Tells the entity to perform skinning calculations for skeletal
+            animations in software, regardless of the current setting of 
+            isHardwareSkinningEnabled().  Software skinning will be performed
+            any time one or more requests have been made.  If 'normalsAlso' is
+            'true', then the entity will also do software blending on normal
+            vectors, in addition to positions. This advanced method useful for 
+            situations in which access to actual mesh vertices is required,
+            such as accurate collision detection or certain advanced shading 
+            techniques.  When software skinning is no longer needed, 
+            the caller of this method should always remove the request by calling
+            removeSoftwareSkinningRequest(), passing the same value for 
+            'normalsAlso'.
+        */
+        void addSoftwareSkinningRequest(bool normalsAlso);
+        /** Removes a request for software skinning
+        @remarks
+            Calling this decrements the entity's internal counter of the number
+            of requests for software skinning.  If the counter is already zero
+            then calling this method throws an exception.  The 'normalsAlso' 
+            flag if set to 'true' will also decrement the internal counter of
+            number of requests for software skinning of normals.
+        */
+        void removeSoftwareSkinningRequest(bool normalsAlso);
+
+        /** Overridden from MovableObject */
+        void _notifyAttached(Node* parent, bool isTagPoint = false);
+
+        /** Shares the SkeletonInstance with the supplied entity.
+        *   Note that in order for this to work, both entities must have the same
+        *   Skeleton.
+        */
+        void shareSkeletonInstanceWith(Entity* entity);
+
+	
+        /** Stops sharing the SkeletonInstance with other entities.
+        */
+        void Entity::stopSharingSkeletonInstance();
+
+
+        /**
+        * Returns whether this entity shares it's SkeltonInstance with other entity instances.
+        */
+        inline bool sharesSkeletonInstance() const { return mSharedSkeletonEntities != NULL; }
+
+        /**
+        * Returns a pointer to the set of entities which share a SkeletonInstance.
+        * If this instance does not share it's SkeletonInstance with other instances NULL will be returned
+        */
+        inline const EntitySet* getSkeletonInstanceSharingSet() const { return mSharedSkeletonEntities; }
+
+		/** Updates the internal animation state set to include the latest 
+			available animations from the attached skeleton.
+		@remarks
+			Use this method if you manually add animations to a skeleton, or have
+			linked the skeleton to another for animation purposes since creating 
+			this entity.
+		@note
+			If you have called getAnimationState prior to calling this method, 
+			the pointers will still remain valid.
+		*/
+		void refreshAvailableAnimationState(void);
+
+		/** Advanced method to perform all the updates required for an animated entity.
+		@remarks
+			You don't normally need to call this, but it's here incase you wish
+			to manually update the animation of an Entity at a specific point in
+			time. Animation will not be updated more than once a frame no matter
+			how many times you call this method.
+		*/
+		void _updateAnimation(void);
+
+		/** Advanced method to get the temporarily blended vertex information
+			for entities which are software skinned. 
+		*/
+		const VertexData* _getSharedBlendedVertexData(void) const;
+
+
+
+    };
+
+} // namespace
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreParticleIterator.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreParticleIterator.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreParticleIterator.h	(revision 1092)
@@ -0,0 +1,57 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE 
+	(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under 
+the terms of the GNU Lesser General Public License as published by the Free Software 
+Foundation; either version 2 of the License, or (at your option) any later 
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT 
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with 
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple 
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to 
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __ParticleIterator_H__
+#define __ParticleIterator_H__
+
+#include "OgrePrerequisites.h"
+
+namespace Ogre {
+
+
+    /** Convenience class to make it easy to step through all particles in a ParticleSystem.
+    */
+    class _OgreExport ParticleIterator
+    {
+        friend class ParticleSystem;
+    protected:
+        std::list<Particle*>::iterator mPos;
+        std::list<Particle*>::iterator mStart;
+        std::list<Particle*>::iterator mEnd;
+
+        /// Protected constructor, only available from ParticleSystem::getIterator
+        ParticleIterator(std::list<Particle*>::iterator start, std::list<Particle*>::iterator end);
+
+    public:
+        // Returns true when at the end of the particle list
+        bool end(void);
+
+        /** Returns a pointer to the next particle, and moves the iterator on by 1 element. */
+        Particle* getNext(void);
+    };
+}
+
+
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreDynLib.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreDynLib.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreDynLib.h	(revision 1092)
@@ -0,0 +1,112 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _DynLib_H__
+#define _DynLib_H__
+
+#include "OgrePrerequisites.h"
+
+#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
+#    define DYNLIB_HANDLE hInstance
+#    define DYNLIB_LOAD( a ) LoadLibrary( a )
+#    define DYNLIB_GETSYM( a, b ) GetProcAddress( a, b )
+#    define DYNLIB_UNLOAD( a ) !FreeLibrary( a )
+
+struct HINSTANCE__;
+typedef struct HINSTANCE__* hInstance;
+
+#elif OGRE_PLATFORM == OGRE_PLATFORM_LINUX
+#    define DYNLIB_HANDLE void*
+#    define DYNLIB_LOAD( a ) dlopen( a, RTLD_LAZY )
+#    define DYNLIB_GETSYM( a, b ) dlsym( a, b )
+#    define DYNLIB_UNLOAD( a ) dlclose( a )
+
+#elif OGRE_PLATFORM == OGRE_PLATFORM_APPLE
+#    define DYNLIB_HANDLE CFBundleRef
+#    define DYNLIB_LOAD( a ) mac_loadExeBundle( a )
+#    define DYNLIB_GETSYM( a, b ) mac_getBundleSym( a, b )
+#    define DYNLIB_UNLOAD( a ) mac_unloadExeBundle( a )
+#endif
+
+namespace Ogre {
+
+    /** Resource holding data about a dynamic library.
+        @remarks
+            This class holds the data required to get symbols from
+            libraries loaded at run-time (i.e. from DLL's for so's)
+        @author
+            Adrian Cearnãu (cearny@cearny.ro)
+        @since
+            27 January 2002
+        @see
+            Resource
+    */
+    class _OgreExport DynLib
+    {
+	protected:
+		String mName;
+        /// Gets the last loading error
+        String dynlibError(void);
+    public:
+        /** Default constructor - used by DynLibManager.
+            @warning
+                Do not call directly
+        */
+        DynLib( const String& name );
+
+        /** Default destructor.
+        */
+        ~DynLib();
+
+        /** Load the library
+        */
+        void load();
+        /** Unload the library
+        */
+        void unload();
+		/// Get the name of the library
+		const String& getName(void) const { return mName; }
+
+        /**
+            Returns the address of the given symbol from the loaded library.
+            @param
+                strName The name of the symbol to search for
+            @returns
+                If the function succeeds, the returned value is a handle to
+                the symbol.
+            @par
+                If the function fails, the returned value is <b>NULL</b>.
+
+        */
+        void* getSymbol( const String& strName ) const throw();
+
+    protected:
+
+        /// Handle to the loaded library.
+        DYNLIB_HANDLE m_hInst;
+    };
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreProfiler.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreProfiler.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreProfiler.h	(revision 1092)
@@ -0,0 +1,411 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+/*
+
+    Although the code is original, many of the ideas for the profiler were borrowed from 
+"Real-Time In-Game Profiling" by Steve Rabin which can be found in Game Programming
+Gems 1.
+
+    This code can easily be adapted to your own non-Ogre project. The only code that is 
+Ogre-dependent is in the visualization/logging routines and the use of the Timer class.
+
+    Enjoy!
+
+*/
+
+#ifndef __Profiler_H__
+#define __Profiler_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreSingleton.h"
+#include "OgreString.h"
+#include "OgreOverlay.h"
+
+#if OGRE_PROFILING == 1
+#   if OGRE_COMPILER != OGRE_COMPILER_BORL
+#       define OgreProfile( a ) Ogre::Profile _OgreProfileInstance( (a) )
+#       define OgreProfileBegin( a ) Ogre::Profiler::getSingleton().beginProfile( (a) )
+#       define OgreProfileEnd( a ) Ogre::Profiler::getSingleton().endProfile( (a) )
+#   else
+#	    define OgreProfile( a ) Ogre::Profile _OgreProfileInstance( __FUNC__ )
+#	    define OgreProfileBegin( a ) Ogre::Profiler::getSingleton().beginProfile( __FUNC__ )
+#	    define OgreProfileEnd( a ) Ogre::Profiler::getSingleton().endProfile( __FUNC__ )
+#   endif
+#else
+#   define OgreProfile( a )
+#   define OgreProfileBegin( a )
+#   define OgreProfileEnd( a )
+#endif
+
+namespace Ogre {
+
+    /** An individual profile that will be processed by the Profiler
+        @remarks
+            Use the macro OgreProfile(name) instead of instantiating this profile directly
+        @remarks
+            We use this Profile to allow scoping rules to signify the beginning and end of
+            the profile. Use the Profiler singleton (through the macro OgreProfileBegin(name)
+            and OgreProfileEnd(name)) directly if you want a profile to last
+            outside of a scope (ie the main game loop).
+        @author Amit Mathew (amitmathew (at) yahoo (dot) com)
+    */
+    class _OgreExport Profile {
+
+        public:
+            Profile(const String& profileName);
+            ~Profile();
+
+        protected:
+
+            /// The name of this profile
+            String mName;
+			
+
+    };
+
+    /** The profiler allows you to measure the performance of your code
+        @remarks
+            Do not create profiles directly from this unless you want a profile to last
+            outside of its scope (ie the main game loop). For most cases, use the macro
+            OgreProfile(name) and braces to limit the scope. You must enable the Profile
+            before you can used it with setEnabled(true). If you want to disable profiling
+            in Ogre, simply set the macro OGRE_PROFILING to 0.
+        @author Amit Mathew (amitmathew (at) yahoo (dot) com)
+        @todo resolve artificial cap on number of profiles displayed
+        @todo fix display ordering of profiles not called every frame
+    */
+    class _OgreExport Profiler : public Singleton<Profiler> {
+
+        public:
+            Profiler();
+            ~Profiler();
+
+            /** Sets the timer for the profiler */
+            void setTimer(Timer* t);
+
+            /** Retrieves the timer for the profiler */
+            Timer* getTimer();
+
+            /** Begins a profile
+            @remarks 
+                Use the macro OgreProfileBegin(name) instead of calling this directly 
+                so that profiling can be ignored in the release version of your app. 
+            @remarks 
+                You only use the macro (or this) if you want a profile to last outside
+                of its scope (ie the main game loop). If you use this function, make sure you 
+                use a corresponding OgreProfileEnd(name). Usually you would use the macro 
+                OgreProfile(name). This function will be ignored for a profile that has been 
+                disabled or if the profiler is disabled.
+            @param profileName Must be unique and must not be an empty string
+            */
+            void beginProfile(const String& profileName);
+
+            /** Ends a profile
+            @remarks 
+                Use the macro OgreProfileEnd(name) instead of calling this directly so that
+                profiling can be ignored in the release version of your app.
+            @remarks
+                This function is usually not called directly unless you want a profile to
+                last outside of its scope. In most cases, using the macro OgreProfile(name) 
+                which will call this function automatically when it goes out of scope. Make 
+                sure the name of this profile matches its corresponding beginProfile name. 
+                This function will be ignored for a profile that has been disabled or if the
+                profiler is disabled.
+            */
+            void endProfile(const String& profileName);
+
+            /** Sets whether this profiler is enabled. Only takes effect after the
+                the frame has ended.
+                @remarks When this is called the first time with the parameter true,
+                it initializes the GUI for the Profiler
+            */
+            void setEnabled(bool enabled);
+
+            /** Gets whether this profiler is enabled */
+            bool getEnabled() const;
+
+            /** Enables a previously disabled profile 
+            @remarks Only enables the profile if this function is not 
+            called during the profile it is trying to enable.
+            */
+            void enableProfile(const String& profileName);
+
+            /** Disables a profile
+            @remarks Only disables the profile if this function is not called during
+            the profile it is trying to disable.
+            */
+            void disableProfile(const String& profileName);
+
+            /** Returns true if the specified profile reaches a new frame time maximum
+            @remarks If this is called during a frame, it will be reading the results
+            from the previous frame. Therefore, it is best to use this after the frame
+            has ended.
+            */
+            bool watchForMax(const String& profileName);
+
+            /** Returns true if the specified profile reaches a new frame time minimum
+            @remarks If this is called during a frame, it will be reading the results
+            from the previous frame. Therefore, it is best to use this after the frame
+            has ended.
+            */
+            bool watchForMin(const String& profileName);
+
+            /** Returns true if the specified profile goes over or under the given limit
+                frame time
+            @remarks If this is called during a frame, it will be reading the results
+            from the previous frame. Therefore, it is best to use this after the frame
+            has ended.
+            @param limit A number between 0 and 1 representing the percentage of frame time
+            @param greaterThan If true, this will return whether the limit is exceeded. Otherwise,
+            it will return if the frame time has gone under this limit.
+            */
+            bool watchForLimit(const String& profileName, Real limit, bool greaterThan = true);
+
+            /** Outputs current profile statistics to the log */
+            void logResults();
+
+            /** Clears the profiler statistics */
+            void reset();
+
+            /** Sets the Profiler so the display of results are updated ever n frames*/
+            void setUpdateDisplayFrequency(uint freq);
+
+            /** Gets the frequency that the Profiler display is updated */
+            uint getUpdateDisplayFrequency() const;
+
+            /** Override standard Singleton retrieval.
+            @remarks
+            Why do we do this? Well, it's because the Singleton
+            implementation is in a .h file, which means it gets compiled
+            into anybody who includes it. This is needed for the
+            Singleton template to work, but we actually only want it
+            compiled into the implementation of the class based on the
+            Singleton, not all of them. If we don't change this, we get
+            link errors when trying to use the Singleton-based class from
+            an outside dll.
+            @par
+            This method just delegates to the template version anyway,
+            but the implementation stays in this single compilation unit,
+            preventing link errors.
+            */
+            static Profiler& getSingleton(void);
+            /** Override standard Singleton retrieval.
+            @remarks
+            Why do we do this? Well, it's because the Singleton
+            implementation is in a .h file, which means it gets compiled
+            into anybody who includes it. This is needed for the
+            Singleton template to work, but we actually only want it
+            compiled into the implementation of the class based on the
+            Singleton, not all of them. If we don't change this, we get
+            link errors when trying to use the Singleton-based class from
+            an outside dll.
+            @par
+            This method just delegates to the template version anyway,
+            but the implementation stays in this single compilation unit,
+            preventing link errors.
+            */
+            static Profiler* getSingletonPtr(void);
+
+        protected:
+
+            /** Initializes the profiler's gui elements */
+            void initialize();
+
+            /** Prints the profiling results of each frame */
+            void displayResults();
+
+            /** Processes the profiler data after each frame */
+            void processFrameStats();
+
+            /** Handles a change of the profiler's enabled state*/
+            void changeEnableState();
+
+            /** An internal function to create the container which will hold our display elements*/
+            OverlayContainer* createContainer();
+
+            /** An internal function to create a text area */
+            OverlayElement* createTextArea(const String& name, Real width, Real height, Real top, Real left, 
+                                       uint fontSize, const String& caption, bool show = true);
+
+            /** An internal function to create a panel */
+            OverlayElement* createPanel(const String& name, Real width, Real height, Real top, Real left, 
+                                    const String& materialName, bool show = true);
+
+            /// Represents an individual profile call
+            struct ProfileInstance {
+
+                /// The name of the profile
+                String		name;
+
+                /// The name of the parent, empty string if root
+                String		parent;
+
+                /// The time this profile was started
+                ulong		currTime;
+
+                /// Represents the total time of all child profiles to subtract
+                /// from this profile
+                ulong		accum;
+
+                /// The hierarchical level of this profile, 0 being the root profile
+                uint		hierarchicalLvl;
+            };
+
+            /// Represents the total timing information of a profile
+            /// since profiles can be called more than once each frame
+            struct ProfileFrame {
+				
+                /// The name of the profile
+                String	name;
+
+                /// The total time this profile has taken this frame
+                ulong	frameTime;
+
+                /// The number of times this profile was called this frame
+                uint	calls;
+
+                /// The hierarchical level of this profile, 0 being the main loop
+                uint	hierarchicalLvl;
+
+            };
+			
+            /// Represents a history of each profile during the duration of the app
+            struct ProfileHistory {
+
+                /// The name of the profile
+                String	name;
+
+                /// The current percentage of frame time this profile has taken
+                Real	currentTime; // %
+
+                /// The maximum percentage of frame time this profile has taken
+                Real	maxTime; // %
+
+                /// The minimum percentage of frame time this profile has taken
+                Real	minTime; // %
+
+                /// The number of times this profile has been called each frame
+                uint	numCallsThisFrame;
+
+                /// The total percentage of frame time this profile has taken
+                /// (used to calculate average)
+                Real	totalTime; // %
+
+                /// The total number of times this profile was called
+                /// (used to calculate average)
+                ulong	totalCalls; // %
+
+                /// The hierarchical level of this profile, 0 being the root profile
+                uint	hierarchicalLvl;
+
+			};
+
+			
+            typedef std::list<ProfileInstance> ProfileStack;
+            typedef std::list<ProfileFrame> ProfileFrameList;
+            typedef std::list<ProfileHistory> ProfileHistoryList;
+            typedef std::map<String, ProfileHistoryList::iterator> ProfileHistoryMap;
+            typedef std::map<String, bool> DisabledProfileMap;
+
+            typedef std::list<OverlayElement*> ProfileBarList;
+
+            /// A stack for each individual profile per frame
+            ProfileStack mProfiles;
+
+            /// Accumulates the results of each profile per frame (since a profile can be called
+            /// more than once a frame)
+            ProfileFrameList mProfileFrame;
+
+            /// Keeps track of the statistics of each profile
+            ProfileHistoryList mProfileHistory;
+
+            /// We use this for quick look-ups of profiles in the history list
+            ProfileHistoryMap mProfileHistoryMap;
+
+            /// Holds the names of disabled profiles
+            DisabledProfileMap mDisabledProfiles;
+
+            /// Holds the display bars for each profile results
+            ProfileBarList mProfileBars;
+
+            /// Whether the GUI elements have been initialized
+            bool mInitialized;
+
+            /// The max number of profiles we can display
+            uint maxProfiles;
+
+            /// The overlay which contains our profiler results display
+            Overlay* mOverlay;
+
+            /// The window that displays the profiler results
+            OverlayContainer* mProfileGui;
+
+            /// The height of each bar
+            Real mBarHeight;
+
+            /// The height of the stats window
+            Real mGuiHeight;
+
+            /// The width of the stats window
+            Real mGuiWidth;
+
+            /// The size of the indent for each profile display bar
+            Real mBarIndent;
+
+            /// The width of the border between the profile window and each bar
+            Real mGuiBorderWidth;
+
+            /// The width of the min, avg, and max lines in a profile display
+            Real mBarLineWidth;
+
+            /// The number of frames that must elapse before the current
+            /// frame display is updated
+            uint mUpdateDisplayFrequency;
+
+            /// The number of elasped frame, used with mUpdateDisplayFrequency
+            uint mCurrentFrame;
+
+            /// The timer used for profiling
+            Timer* mTimer;
+
+            /// The total time each frame takes
+            ulong mTotalFrameTime;
+
+            /// Whether this profiler is enabled
+            bool mEnabled;
+
+            /// Keeps track of whether this profiler has
+            /// received a request to be enabled/disabled
+            bool mEnableStateChangePending;
+
+            /// Keeps track of the new enabled/disabled state that the user has requested
+            /// which will be applied after the frame ends
+            bool mNewEnableState;
+
+    }; // end class
+
+} // end namespace
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreResourceManager.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreResourceManager.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreResourceManager.h	(revision 1092)
@@ -0,0 +1,377 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _ResourceManager_H__
+#define _ResourceManager_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreResource.h"
+#include "OgreResourceGroupManager.h"
+#include "OgreIteratorWrappers.h"
+#include "OgreCommon.h"
+#include "OgreDataStream.h"
+#include "OgreStringVector.h"
+#include "OgreScriptLoader.h"
+
+namespace Ogre {
+
+    /** Defines a generic resource handler.
+    @remarks
+        A resource manager is responsible for managing a pool of
+        resources of a particular type. It must index them, look
+        them up, load and destroy them. It may also need to stay within
+        a defined memory budget, and temporaily unload some resources
+        if it needs to to stay within this budget.
+    @par
+        Resource managers use a priority system to determine what can
+        be unloaded, and a Least Recently Used (LRU) policy within
+        resources of the same priority.
+	@par
+		Resources can be loaded using the generalised load interface,
+		and they can be unloaded and removed. In addition, each 
+		subclass of ResourceManager will likely define custom 'load' methods
+		which take explicit parameters depending on the kind of resource
+		being created.
+	@note
+		Resources can be loaded and unloaded through the Resource class, 
+		but they can only be removed (and thus eventually destroyed) using
+		their parent ResourceManager.
+    @note
+        If OGRE_THREAD_SUPPORT is 1, this class is thread-safe.
+    */
+	class _OgreExport ResourceManager : public ScriptLoader
+    {
+    public:
+		OGRE_AUTO_MUTEX // public to allow external locking
+        ResourceManager();
+        virtual ~ResourceManager();
+
+        /** Creates a new blank resource, but does not immediately load it.
+        @remarks
+            Resource managers handle disparate types of resources, so if you want
+			to get at the detailed interface of this resource, you'll have to 
+			cast the result to the subclass you know you're creating. 
+		@param name The unique name of the resource
+		@param group The name of the resource group to attach this new resource to
+		@param isManual Is this resource manually loaded? If so, you should really
+			populate the loader parameter in order that the load process
+			can call the loader back when loading is required. 
+		@param loader Pointer to a ManualLoader implementation which will be called
+			when the Resource wishes to load (should be supplied if you set
+			isManual to true). You can in fact leave this parameter null 
+			if you wish, but the Resource will never be able to reload if 
+			anything ever causes it to unload. Therefore provision of a proper
+			ManualLoader instance is strongly recommended.
+        @param createParams If any parameters are required to create an instance,
+            they should be supplied here as name / value pairs
+        */
+        virtual ResourcePtr create(const String& name, const String& group, 
+            bool isManual = false, ManualResourceLoader* loader = 0, 
+            const NameValuePairList* createParams = 0);
+        /** Set a limit on the amount of memory this resource handler may use.
+            @remarks
+                If, when asked to load a new resource, the manager believes it will exceed this memory
+                budget, it will temporarily unload a resource to make room for the new one. This unloading
+                is not permanent and the Resource is not destroyed; it simply needs to be reloaded when
+                next used.
+        */
+        virtual void setMemoryBudget( size_t bytes);
+
+        /** Get the limit on the amount of memory this resource handler may use.
+        */
+        virtual size_t getMemoryBudget(void) const;
+
+		/** Unloads a single resource by name.
+		@remarks
+			Unloaded resources are not removed, they simply free up their memory
+			as much as they can and wait to be reloaded.
+			@see ResourceGroupManager for unloading of resource groups.
+		*/
+		virtual void unload(const String& name);
+		
+		/** Unloads a single resource by handle.
+		@remarks
+			Unloaded resources are not removed, they simply free up their memory
+			as much as they can and wait to be reloaded.
+			@see ResourceGroupManager for unloading of resource groups.
+		*/
+		virtual void unload(ResourceHandle handle);
+
+		/** Unloads all resources.
+		@remarks
+			Unloaded resources are not removed, they simply free up their memory
+			as much as they can and wait to be reloaded.
+			@see ResourceGroupManager for unloading of resource groups.
+		*/
+		virtual void unloadAll(void);
+		/** Caused all currently loaded resources to be reloaded.
+		@remarks
+			All resources currently being held in this manager which are also
+			marked as currently loaded will be unloaded, then loaded again.
+		*/
+		virtual void reloadAll(void);
+
+		/** Remove a single resource.
+		@remarks
+			Removes a single resource, meaning it will be removed from the list
+			of valid resources in this manager, also causing it to be unloaded. 
+		@note
+			The word 'Destroy' is not used here, since
+			if any other pointers are referring to this resource, it will persist
+			until they have finished with it; however to all intents and purposes
+			it no longer exists and will likely get destroyed imminently.
+        @note
+            If you do have shared pointers to resources hanging around after the 
+            ResourceManager is destroyed, you may get problems on destruction of
+            these resources if they were relying on the manager (especially if
+            it is a plugin). If you find you get problems on shutdown in the
+            destruction of resources, try making sure you release all your
+            shared pointers before you shutdown OGRE.
+		*/
+		virtual void remove(ResourcePtr& r);
+
+        /** Remove a single resource by name.
+		@remarks
+			Removes a single resource, meaning it will be removed from the list
+			of valid resources in this manager, also causing it to be unloaded. 
+		@note
+			The word 'Destroy' is not used here, since
+			if any other pointers are referring to this resource, it will persist
+			until they have finished with it; however to all intents and purposes
+			it no longer exists and will likely get destroyed imminently.
+        @note
+            If you do have shared pointers to resources hanging around after the 
+            ResourceManager is destroyed, you may get problems on destruction of
+            these resources if they were relying on the manager (especially if
+            it is a plugin). If you find you get problems on shutdown in the
+            destruction of resources, try making sure you release all your
+            shared pointers before you shutdown OGRE.
+		*/
+		virtual void remove(const String& name);
+		
+		/** Remove a single resource by handle.
+		@remarks
+			Removes a single resource, meaning it will be removed from the list
+			of valid resources in this manager, also causing it to be unloaded. 
+		@note
+			The word 'Destroy' is not used here, since
+			if any other pointers are referring to this resource, it will persist
+			until they have finished with it; however to all intents and purposes
+			it no longer exists and will likely get destroyed imminently.
+        @note
+            If you do have shared pointers to resources hanging around after the 
+            ResourceManager is destroyed, you may get problems on destruction of
+            these resources if they were relying on the manager (especially if
+            it is a plugin). If you find you get problems on shutdown in the
+            destruction of resources, try making sure you release all your
+            shared pointers before you shutdown OGRE.
+		*/
+		virtual void remove(ResourceHandle handle);
+		/** Removes all resources.
+		@note
+			The word 'Destroy' is not used here, since
+			if any other pointers are referring to these resources, they will persist
+			until they have been finished with; however to all intents and purposes
+			the resources no longer exist and will get destroyed imminently.
+        @note
+            If you do have shared pointers to resources hanging around after the 
+            ResourceManager is destroyed, you may get problems on destruction of
+            these resources if they were relying on the manager (especially if
+            it is a plugin). If you find you get problems on shutdown in the
+            destruction of resources, try making sure you release all your
+            shared pointers before you shutdown OGRE.
+        */
+        virtual void removeAll(void);
+
+        /** Retrieves a pointer to a resource by name, or null if the resource does not exist.
+        */
+        virtual ResourcePtr getByName(const String& name);
+        /** Retrieves a pointer to a resource by handle, or null if the resource does not exist.
+        */
+        virtual ResourcePtr getByHandle(ResourceHandle handle);
+		
+		/// Returns whether the named resource exists in this manager
+		virtual bool resourceExists(const String& name)
+		{
+			return !getByName(name).isNull();
+		}
+		/// Returns whether a resource with the given handle exists in this manager
+		virtual bool resourceExists(ResourceHandle handle)
+		{
+			return !getByHandle(handle).isNull();
+		}
+
+		/** Notify this manager that a resource which it manages has been 
+			'touched', ie used. 
+		*/
+		virtual void _notifyResourceTouched(Resource* res);
+
+		/** Notify this manager that a resource which it manages has been 
+			loaded. 
+		*/
+		virtual void _notifyResourceLoaded(Resource* res);
+
+		/** Notify this manager that a resource which it manages has been 
+			unloaded.
+		*/
+		virtual void _notifyResourceUnloaded(Resource* res);
+
+		/** Generic load method, used to create a Resource specific to this 
+			ResourceManager without using one of the specialised 'load' methods
+			(containing per-Resource-type parameters).
+		@param name The name of the Resource
+		@param group The resource group to which this resource will belong
+		@param isManual Is the resource to be manually loaded? If so, you should
+			provide a value for the loader parameter
+		@param loader The manual loader which is to perform the required actions
+			when this resource is loaded; only applicable when you specify true
+			for the previous parameter
+        @param loadParams Optional pointer to a list of name/value pairs 
+            containing loading parameters for this type of resource.
+		*/
+		virtual ResourcePtr load(const String& name, 
+            const String& group, bool isManual = false, 
+			ManualResourceLoader* loader = 0, const NameValuePairList* loadParams = 0);
+
+		/** Gets the file patterns which should be used to find scripts for this
+			ResourceManager.
+		@remarks
+			Some resource managers can read script files in order to define
+			resources ahead of time. These resources are added to the available
+			list inside the manager, but none are loaded initially. This allows
+			you to load the items that are used on demand, or to load them all 
+			as a group if you wish (through ResourceGroupManager).
+		@par
+			This method lets you determine the file pattern which will be used
+			to identify scripts intended for this manager.
+		@returns
+			A list of file patterns, in the order they should be searched in.
+		@see isScriptingSupported, parseScript
+		*/
+		virtual const StringVector& getScriptPatterns(void) const { return mScriptPatterns; }
+
+		/** Parse the definition of a set of resources from a script file.
+		@remarks
+			Some resource managers can read script files in order to define
+			resources ahead of time. These resources are added to the available
+			list inside the manager, but none are loaded initially. This allows
+			you to load the items that are used on demand, or to load them all 
+			as a group if you wish (through ResourceGroupManager).
+		@param stream Weak reference to a data stream which is the source of the script
+		@param groupName The name of the resource group that resources which are
+			parsed are to become a member of. If this group is loaded or unloaded, 
+			then the resources discovered in this script will be loaded / unloaded
+			with it.
+		*/
+		virtual void parseScript(DataStreamPtr& stream, const String& groupName) {}
+
+		/** Gets the relative loading order of resources of this type.
+		@remarks
+			There are dependencies between some kinds of resource in terms of loading
+			order, and this value enumerates that. Higher values load later during
+			bulk loading tasks.
+		*/
+		virtual Real getLoadingOrder(void) const { return mLoadOrder; }
+
+		/** Gets a string identifying the type of resource this manager handles. */
+		const String& getResourceType(void) const { return mResourceType; }
+
+    protected:
+
+        /** Allocates the next handle. */
+        ResourceHandle getNextHandle(void);
+
+		/** Create a new resource instance compatible with this manager (no custom 
+			parameters are populated at this point). 
+		@remarks
+			Subclasses must override this method and create a subclass of Resource.
+		@param name The unique name of the resource
+		@param group The name of the resource group to attach this new resource to
+		@param isManual Is this resource manually loaded? If so, you should really
+			populate the loader parameter in order that the load process
+			can call the loader back when loading is required. 
+		@param loader Pointer to a ManualLoader implementation which will be called
+			when the Resource wishes to load (should be supplied if you set
+			isManual to true). You can in fact leave this parameter null 
+			if you wish, but the Resource will never be able to reload if 
+			anything ever causes it to unload. Therefore provision of a proper
+			ManualLoader instance is strongly recommended.
+        @param createParams If any parameters are required to create an instance,
+            they should be supplied here as name / value pairs. These do not need 
+            to be set on the instance (handled elsewhere), just used if required
+            to differentiate which concrete class is created.
+
+		*/
+		virtual Resource* createImpl(const String& name, ResourceHandle handle, 
+			const String& group, bool isManual, ManualResourceLoader* loader, 
+            const NameValuePairList* createParams) = 0;
+		/** Add a newly created resource to the manager (note weak reference) */
+		virtual void addImpl( ResourcePtr& res );
+		/** Remove a resource from this manager; remove it from the lists. */
+		virtual void removeImpl( ResourcePtr& res );
+		/** Checks memory usage and pages out if required.
+		*/
+		virtual void checkUsage(void);
+		/** Gets the current memory usage, in bytes. */
+		virtual size_t getMemoryUsage(void) const { return mMemoryUsage; }
+
+
+    public:
+		typedef HashMap< String, ResourcePtr > ResourceMap;
+		typedef std::map<ResourceHandle, ResourcePtr> ResourceHandleMap;
+    protected:
+        ResourceHandleMap mResourcesByHandle;
+        ResourceMap mResources;
+        ResourceHandle mNextHandle;
+        size_t mMemoryBudget; // In bytes
+        size_t mMemoryUsage; // In bytes
+
+		// IMPORTANT - all subclasses must populate the fields below
+
+		/// Patterns to use to look for scripts if supported (e.g. *.overlay)
+		StringVector mScriptPatterns; 
+		/// Loading order relative to other managers, higher is later
+		Real mLoadOrder; 
+		/// String identifying the resource type this manager handles
+		String mResourceType; 
+
+    public:
+        typedef MapIterator<ResourceHandleMap> ResourceMapIterator;
+        /** Returns an iterator over all resources in this manager. 
+        @note
+            Use of this iterator is NOT thread safe!
+        */
+        ResourceMapIterator getResourceIterator(void) 
+        {
+            return ResourceMapIterator(mResourcesByHandle.begin(), mResourcesByHandle.end());
+        }
+
+    
+
+    };
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreController.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreController.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreController.h	(revision 1092)
@@ -0,0 +1,221 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __Controller_H__
+#define __Controller_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreSharedPtr.h"
+
+namespace Ogre {
+
+
+	
+	
+	/** Subclasses of this class are responsible for performing a function on an input value for a Controller.
+        @remarks
+            This abstract class provides the interface that needs to be supported for a custom function which
+            can be 'plugged in' to a Controller instance, which controls some object value based on an input value.
+            For example, the WaveControllerFunction class provided by Ogre allows you to use various waveforms to
+            translate an input value to an output value.
+        @par
+            You are free to create your own subclasses in order to define any function you wish.
+    */
+	template <typename T>
+    class ControllerFunction
+    {
+    protected:
+        /// If true, function will add imput values together and wrap at 1.0 before evaluating
+        bool mDeltaInput;
+        T mDeltaCount;
+
+        /** Gets the input value as adjusted by any delta.
+        */
+        T getAdjustedInput(T input)
+        {
+            if (mDeltaInput)
+            {
+                mDeltaCount += input;
+                // Wrap
+                while (mDeltaCount >= 1.0)
+                    mDeltaCount -= 1.0;
+                while (mDeltaCount < 0.0)
+                    mDeltaCount += 1.0;
+
+                return mDeltaCount;
+            }
+            else
+			{
+                return input;
+            }
+        }
+
+    public:
+        /** Constructor.
+            @param
+                deltaInput If true, signifies that the input will be a delta value such that the function should
+                add it to an internal counter before calculating the output.
+        */
+        ControllerFunction(bool deltaInput)
+        {
+            mDeltaInput = deltaInput;
+            mDeltaCount = 0;
+        }
+
+        virtual T calculate(T sourceValue) = 0;
+    };
+
+
+    /** Can either be used as an input or output value.
+    */
+	template <typename T>
+    class ControllerValue
+    {
+
+    public:
+        virtual ~ControllerValue() { }
+        virtual T getValue(void) const = 0;
+        virtual void setValue(T value) = 0;
+
+    };
+
+    /** Instances of this class 'control' the value of another object in the system.
+        @remarks
+            Controller classes are used to manage the values of object automatically based
+            on the value of some input. For example, a Controller could animate a texture
+            by controlling the current frame of the texture based on time, or a different Controller
+            could change the colour of a material used for a spaceship shield mesh based on the remaining
+            shield power level of the ship.
+        @par
+            The Controller is an intentionally abstract concept - it can generate values
+            based on input and a function, which can either be one of the standard ones
+            supplied, or a function can be 'plugged in' for custom behaviour - see the ControllerFunction class for details.
+            Both the input and output values are via ControllerValue objects, meaning that any value can be both
+            input and output of the controller.
+        @par
+            Whilst this is very flexible, it can be a little bit confusing so to make it simpler the most often used
+            controller setups are available by calling methods on the ControllerManager object.
+        @see
+            ControllerFunction
+
+    */
+	template <typename T>
+    class Controller
+    {
+    protected:
+        /// Source value
+        SharedPtr< ControllerValue<T> > mSource;
+        /// Destination value
+        SharedPtr< ControllerValue<T> > mDest;
+        /// Function
+        SharedPtr< ControllerFunction<T> > mFunc;
+		/// Controller is enabled or not
+        bool mEnabled;
+
+
+    public:
+
+        /** Usual constructor.
+            @remarks
+                Requires source and destination values, and a function object. None of these are destroyed
+                with the Controller when it is deleted (they can be shared) so you must delete these as appropriate.
+        */
+        Controller(const SharedPtr< ControllerValue<T> >& src, 
+			const SharedPtr< ControllerValue<T> >& dest, const SharedPtr< ControllerFunction<T> >& func)
+			: mSource(src), mDest(dest), mFunc(func)
+		{
+			mEnabled = true;
+		}
+
+        /** Default d-tor.
+        */
+		virtual ~Controller() {}
+
+
+		/// Sets the input controller value
+        void setSource(const SharedPtr< ControllerValue<T> >& src)
+		{
+			mSource = src;
+		}
+		/// Gets the input controller value
+        const SharedPtr< ControllerValue<T> >& getSource(void) const
+		{
+			return mSource;
+		}
+		/// Sets the output controller value
+        void setDestination(const SharedPtr< ControllerValue<T> >& dest)
+		{
+			mDest = dest;
+		}
+
+		/// Gets the output controller value
+        const SharedPtr< ControllerValue<T> >& getDestination(void) const
+		{
+			return mDest;
+		}
+
+        /// Returns true if this controller is currently enabled
+        bool getEnabled(void) const
+		{
+			return mEnabled;
+		}
+
+        /// Sets whether this controller is enabled
+        void setEnabled(bool enabled)
+		{
+			mEnabled = enabled;
+		}
+
+        /** Sets the function object to be used by this controller.
+        */
+        void setFunction(const SharedPtr< ControllerFunction<T> >& func)
+		{
+			mFunc = func;
+		}
+
+        /** Returns a pointer to the function object used by this controller.
+        */
+        const SharedPtr< ControllerFunction<T> >& getFunction(void) const
+		{
+			return mFunc;
+		}
+
+		/** Tells this controller to map it's input controller value
+		    to it's output controller value, via the controller function. 
+		@remarks
+			This method is called automatically every frame by ControllerManager.
+		*/
+		void update(void)
+		{
+			if(mEnabled)
+				mDest->setValue(mFunc->calculate(mSource->getValue()));
+		}
+
+    };
+
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreVector2.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreVector2.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreVector2.h	(revision 1092)
@@ -0,0 +1,475 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __Vector2_H__
+#define __Vector2_H__
+
+
+#include "OgrePrerequisites.h"
+#include "OgreMath.h"
+
+namespace Ogre
+{
+
+    /** Standard 2-dimensional vector.
+        @remarks
+            A direction in 2D space represented as distances along the 2
+            orthoganal axes (x, y). Note that positions, directions and
+            scaling factors can be represented by a vector, depending on how
+            you interpret the values.
+    */
+    class _OgreExport Vector2
+    {
+    public:
+        union {
+            struct {
+                Real x, y;        
+            };
+            Real val[2];
+        };
+
+    public:
+        inline Vector2()
+        {
+        }
+
+        inline Vector2( Real fX, Real fY ) 
+            : x( fX ), y( fY )
+        {
+        }
+
+        inline Vector2( Real afCoordinate[2] )
+            : x( afCoordinate[0] ),
+              y( afCoordinate[1] )
+        {
+        }
+
+        inline Vector2( int afCoordinate[2] )
+        {
+            x = (Real)afCoordinate[0];
+            y = (Real)afCoordinate[1];
+        }
+
+        inline Vector2( const Real* const r )
+            : x( r[0] ), y( r[1] )
+        {
+        }
+
+        inline Vector2( const Vector2& rkVector )
+            : x( rkVector.x ), y( rkVector.y )
+        {
+        }
+
+		inline Real operator [] ( size_t i ) const
+        {
+            assert( i < 2 );
+
+            return *(&x+i);
+        }
+
+		inline Real& operator [] ( size_t i )
+        {
+            assert( i < 2 );
+
+            return *(&x+i);
+        }
+
+        /** Assigns the value of the other vector.
+            @param
+                rkVector The other vector
+        */
+        inline Vector2& operator = ( const Vector2& rkVector )
+        {
+            x = rkVector.x;
+            y = rkVector.y;        
+
+            return *this;
+        }
+
+        inline bool operator == ( const Vector2& rkVector ) const
+        {
+            return ( x == rkVector.x && y == rkVector.y );
+        }
+
+        inline bool operator != ( const Vector2& rkVector ) const
+        {
+            return ( x != rkVector.x || y != rkVector.y  );
+        }
+
+        // arithmetic operations
+        inline Vector2 operator + ( const Vector2& rkVector ) const
+        {
+            Vector2 kSum;
+
+            kSum.x = x + rkVector.x;
+            kSum.y = y + rkVector.y;
+
+            return kSum;
+        }
+
+        inline Vector2 operator - ( const Vector2& rkVector ) const
+        {
+            Vector2 kDiff;
+
+            kDiff.x = x - rkVector.x;
+            kDiff.y = y - rkVector.y;
+
+            return kDiff;
+        }
+
+        inline Vector2 operator * ( Real fScalar ) const
+        {
+            Vector2 kProd;
+
+            kProd.x = fScalar*x;
+            kProd.y = fScalar*y;
+
+            return kProd;
+        }
+
+        inline Vector2 operator * ( const Vector2& rhs) const
+        {
+            Vector2 kProd;
+
+            kProd.x = rhs.x * x;
+            kProd.y = rhs.y * y;
+
+            return kProd;
+        }
+
+        inline Vector2 operator / ( Real fScalar ) const
+        {
+            assert( fScalar != 0.0 );
+
+            Vector2 kDiv;
+
+            Real fInv = 1.0 / fScalar;
+            kDiv.x = x * fInv;
+            kDiv.y = y * fInv;
+
+            return kDiv;
+        }
+
+        inline Vector2 operator - () const
+        {
+            Vector2 kNeg;
+
+            kNeg.x = -x;
+            kNeg.y = -y;
+
+            return kNeg;
+        }
+
+        inline friend Vector2 operator * ( Real fScalar, const Vector2& rkVector )
+        {
+            Vector2 kProd;
+
+            kProd.x = fScalar * rkVector.x;
+            kProd.y = fScalar * rkVector.y;
+
+            return kProd;
+        }
+
+        // arithmetic updates
+        inline Vector2& operator += ( const Vector2& rkVector )
+        {
+            x += rkVector.x;
+            y += rkVector.y;
+
+            return *this;
+        }
+
+        inline Vector2& operator -= ( const Vector2& rkVector )
+        {
+            x -= rkVector.x;
+            y -= rkVector.y;
+
+            return *this;
+        }
+
+        inline Vector2& operator *= ( Real fScalar )
+        {
+            x *= fScalar;
+            y *= fScalar;
+
+            return *this;
+        }
+
+        inline Vector2& operator /= ( Real fScalar )
+        {
+            assert( fScalar != 0.0 );
+
+            Real fInv = 1.0 / fScalar;
+
+            x *= fInv;
+            y *= fInv;
+
+            return *this;
+        }
+
+        /** Returns the length (magnitude) of the vector.
+            @warning
+                This operation requires a square root and is expensive in
+                terms of CPU operations. If you don't need to know the exact
+                length (e.g. for just comparing lengths) use squaredLength()
+                instead.
+        */
+        inline Real length () const
+        {
+            return Math::Sqrt( x * x + y * y );
+        }
+
+        /** Returns the square of the length(magnitude) of the vector.
+            @remarks
+                This  method is for efficiency - calculating the actual
+                length of a vector requires a square root, which is expensive
+                in terms of the operations required. This method returns the
+                square of the length of the vector, i.e. the same as the
+                length but before the square root is taken. Use this if you
+                want to find the longest / shortest vector without incurring
+                the square root.
+        */
+        inline Real squaredLength () const
+        {
+            return x * x + y * y;
+        }
+
+        /** Calculates the dot (scalar) product of this vector with another.
+            @remarks
+                The dot product can be used to calculate the angle between 2
+                vectors. If both are unit vectors, the dot product is the
+                cosine of the angle; otherwise the dot product must be
+                divided by the product of the lengths of both vectors to get
+                the cosine of the angle. This result can further be used to
+                calculate the distance of a point from a plane.
+            @param
+                vec Vector with which to calculate the dot product (together
+                with this one).
+            @returns
+                A float representing the dot product value.
+        */
+        inline Real dotProduct(const Vector2& vec) const
+        {
+            return x * vec.x + y * vec.y;
+        }
+
+        /** Normalises the vector.
+            @remarks
+                This method normalises the vector such that it's
+                length / magnitude is 1. The result is called a unit vector.
+            @note
+                This function will not crash for zero-sized vectors, but there
+                will be no changes made to their components.
+            @returns The previous length of the vector.
+        */
+        inline Real normalise()
+        {
+            Real fLength = Math::Sqrt( x * x + y * y);
+
+            // Will also work for zero-sized vectors, but will change nothing
+            if ( fLength > 1e-08 )
+            {
+                Real fInvLength = 1.0 / fLength;
+                x *= fInvLength;
+                y *= fInvLength;
+            }
+
+            return fLength;
+        }
+
+    
+   
+        /** Returns a vector at a point half way between this and the passed
+            in vector.
+        */
+        inline Vector2 midPoint( const Vector2& vec ) const
+        {
+            return Vector2( 
+                ( x + vec.x ) * 0.5, 
+                ( y + vec.y ) * 0.5 );
+        }
+
+        /** Returns true if the vector's scalar components are all greater
+            that the ones of the vector it is compared against.
+        */
+        inline bool operator < ( const Vector2& rhs ) const
+        {
+            if( x < rhs.x && y < rhs.y )
+                return true;
+            return false;
+        }
+
+        /** Returns true if the vector's scalar components are all smaller
+            that the ones of the vector it is compared against.
+        */
+        inline bool operator > ( const Vector2& rhs ) const
+        {
+            if( x > rhs.x && y > rhs.y )
+                return true;
+            return false;
+        }
+
+        /** Sets this vector's components to the minimum of its own and the 
+            ones of the passed in vector.
+            @remarks
+                'Minimum' in this case means the combination of the lowest
+                value of x, y and z from both vectors. Lowest is taken just
+                numerically, not magnitude, so -1 < 0.
+        */
+        inline void makeFloor( const Vector2& cmp )
+        {
+            if( cmp.x < x ) x = cmp.x;
+            if( cmp.y < y ) y = cmp.y;
+        }
+
+        /** Sets this vector's components to the maximum of its own and the 
+            ones of the passed in vector.
+            @remarks
+                'Maximum' in this case means the combination of the highest
+                value of x, y and z from both vectors. Highest is taken just
+                numerically, not magnitude, so 1 > -3.
+        */
+        inline void makeCeil( const Vector2& cmp )
+        {
+            if( cmp.x > x ) x = cmp.x;
+            if( cmp.y > y ) y = cmp.y;
+        }
+
+        /** Generates a vector perpendicular to this vector (eg an 'up' vector).
+            @remarks
+                This method will return a vector which is perpendicular to this
+                vector. There are an infinite number of possibilities but this 
+                method will guarantee to generate one of them. If you need more 
+                control you should use the Quaternion class.
+        */
+        inline Vector2 perpendicular(void) const
+        {         
+            return Vector2 (-y, x);
+        }
+        /** Calculates the cross-product of 2 vectors, i.e. the vector that
+            lies perpendicular to them both.
+            @remarks
+                The cross-product is normally used to calculate the normal
+                vector of a plane, by calculating the cross-product of 2
+                non-equivalent vectors which lie on the plane (e.g. 2 edges
+                of a triangle).
+            @param
+                vec Vector which, together with this one, will be used to
+                calculate the cross-product.
+            @returns
+                A vector which is the result of the cross-product. This
+                vector will <b>NOT</b> be normalised, to maximise efficiency
+                - call Vector3::normalise on the result if you wish this to
+                be done. As for which side the resultant vector will be on, the
+                returned vector will be on the side from which the arc from 'this'
+                to rkVector is anticlockwise, e.g. UNIT_Y.crossProduct(UNIT_Z) 
+                = UNIT_X, whilst UNIT_Z.crossProduct(UNIT_Y) = -UNIT_X.
+            @par
+                For a clearer explanation, look a the left and the bottom edges
+                of your monitor's screen. Assume that the first vector is the
+                left edge and the second vector is the bottom edge, both of
+                them starting from the lower-left corner of the screen. The
+                resulting vector is going to be perpendicular to both of them
+                and will go <i>inside</i> the screen, towards the cathode tube
+                (assuming you're using a CRT monitor, of course).
+        */
+        inline Vector2 crossProduct( const Vector2& rkVector ) const
+        {
+            return Vector2(-rkVector.y, rkVector.x);
+        }
+        /** Generates a new random vector which deviates from this vector by a
+            given angle in a random direction.
+            @remarks
+                This method assumes that the random number generator has already 
+                been seeded appropriately.
+            @param 
+                angle The angle at which to deviate in radians
+            @param 
+                up Any vector perpendicular to this one (which could generated 
+                by cross-product of this vector and any other non-colinear 
+                vector). If you choose not to provide this the function will 
+                derive one on it's own, however if you provide one yourself the 
+                function will be faster (this allows you to reuse up vectors if 
+                you call this method more than once) 
+            @returns 
+                A random vector which deviates from this vector by angle. This 
+                vector will not be normalised, normalise it if you wish 
+                afterwards.
+        */
+        inline Vector2 randomDeviant(
+            Real angle) const
+        {
+           
+            angle *=  Math::UnitRandom() * Math::TWO_PI;
+            Real cosa = cos(angle);
+            Real sina = sin(angle);
+            return  Vector2(cosa * x - sina * y,
+                            sina * x + cosa * y);
+        }
+        
+        /** Returns true if this vector is zero length. */
+        inline bool isZeroLength(void) const
+        {
+            Real sqlen = (x * x) + (y * y);
+            return (sqlen < (1e-06 * 1e-06));
+
+        }
+
+        /** As normalise, except that this vector is unaffected and the
+            normalised vector is returned as a copy. */
+        inline Vector2 normalisedCopy(void) const
+        {
+            Vector2 ret = *this;
+            ret.normalise();
+            return ret;
+        }
+
+        /** Calculates a reflection vector to the plane with the given normal . 
+        @remarks NB assumes 'this' is pointing AWAY FROM the plane, invert if it is not.
+        */
+        inline Vector2 reflect(const Vector2& normal) const
+        {
+            return Vector2( *this - ( 2 * this->dotProduct(normal) * normal ) );
+        }
+
+        // special points
+        static const Vector2 ZERO;
+        static const Vector2 UNIT_X;
+        static const Vector2 UNIT_Y;
+        static const Vector2 NEGATIVE_UNIT_X;
+        static const Vector2 NEGATIVE_UNIT_Y;
+        static const Vector2 UNIT_SCALE;
+
+        /** Function for writing to a stream.
+        */
+        inline _OgreExport friend std::ostream& operator <<
+            ( std::ostream& o, const Vector2& v )
+        {
+            o << "Vector2(" << v.x << ", " << v.y <<  ")";
+            return o;
+        }
+    };
+
+}
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreTagPoint.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreTagPoint.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreTagPoint.h	(revision 1092)
@@ -0,0 +1,94 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __TagPoint_H_
+#define __TagPoint_H_
+
+#include "OgrePrerequisites.h"
+
+#include "OgreBone.h"
+#include "OgreMatrix4.h"
+
+namespace Ogre	{
+
+
+	
+    /** A tagged point on a skeleton, which can be used to attach entities to on specific
+        other entities.
+    @remarks
+        A Skeleton, like a Mesh, is shared between Entity objects and simply updated as required
+        when it comes to rendering. However there are times when you want to attach another object
+        to an animated entity, and make sure that attachment follows the parent entity's animation
+        (for example, a character holding a gun in his / her hand). This class simply identifies
+        attachment points on a skeleton which can be used to attach child objects. 
+    @par
+        The child objects themselves are not physically attached to this class; as it's name suggests
+        this class just 'tags' the area. The actual child objects are attached to the Entity using the
+        skeleton which has this tag point. Use the Entity::attachMovableObjectToBone method to attach
+        the objects, which creates a new TagPoint on demand.
+    */
+    class _OgreExport TagPoint : public Bone
+	{
+
+	public:
+		TagPoint(unsigned short handle, Skeleton* creator);
+		virtual ~TagPoint();
+
+		Entity *getParentEntity(void);
+		
+		void setParentEntity(Entity *pEntity);
+		void setChildObject(MovableObject *pObject);
+
+		//Matrix4 getCombinedTransform();
+		Matrix4 getParentEntityTransform();
+
+        void _update(bool updateChildren, bool parentHasChanged);
+
+        /** Gets the transform of this node including the parent entity and skeleton. */
+        Matrix4 _getFullTransform(void);
+
+        /** Gets the transform of this node just for the skeleton (not entity) */
+		Matrix4 _getFullLocalTransform(void);
+
+        void needUpdate();
+
+        /** Overridden from Node in order to include parent Entity transform. */
+        void _updateFromParent(void) const;
+        /** @copydoc Renderable::getLights */
+        const LightList& getLights(void) const;
+
+
+
+	private:
+		Entity *mParentEntity;
+		MovableObject *mChildObject;
+        mutable Matrix4 mFullLocalTransform;
+		
+	};
+
+
+} //namespace
+
+
+#endif//__TagPoint_H_
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMeshSerializer.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMeshSerializer.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMeshSerializer.h	(revision 1092)
@@ -0,0 +1,93 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __MeshSerializer_H__
+#define __MeshSerializer_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreMeshSerializerImpl.h"
+#include "OgreSerializer.h"
+
+namespace Ogre {
+
+    /** Class for serialising mesh data to/from an OGRE .mesh file.
+    @remarks
+        This class allows exporters to write OGRE .mesh files easily, and allows the
+        OGRE engine to import .mesh files into instatiated OGRE Meshes.
+        Note that a .mesh file can include not only the Mesh, but also definitions of
+        any Materials it uses (although this is optional, the .mesh can rely on the
+        Material being loaded from another source, especially useful if you want to
+        take advantage of OGRE's advanced Material properties which may not be available
+        in your modeller).
+    @par
+        To export a Mesh:<OL>
+        <LI>Use the MaterialManager methods to create any dependent Material objects, if you want
+            to export them with the Mesh.</LI>
+        <LI>Create a Mesh object and populate it using it's methods.</LI>
+        <LI>Call the exportMesh method</LI>
+        </OL>
+    @par
+        It's important to realise that this exporter uses OGRE terminology. In this context,
+        'Mesh' means a top-level mesh structure which can actually contain many SubMeshes, each
+        of which has only one Material. Modelling packages may refer to these differently, for
+        example in Milkshape, it says 'Model' instead of 'Mesh' and 'Mesh' instead of 'SubMesh', 
+        but the theory is the same.
+    */
+    class _OgreExport MeshSerializer : public Serializer
+    {
+    public:
+        MeshSerializer();
+        virtual ~MeshSerializer();
+
+
+        /** Exports a mesh to the file specified. 
+        @remarks
+            This method takes an externally created Mesh object, and exports both it
+            and optionally the Materials it uses to a .mesh file.
+        @param pMesh Pointer to the Mesh to export
+        @param filename The destination filename
+        */
+        void exportMesh(const Mesh* pMesh, const String& filename);
+
+        /** Imports Mesh and (optionally) Material data from a .mesh file DataStream.
+        @remarks
+            This method imports data from a DataStream opened from a .mesh file and places it's
+            contents into the Mesh object which is passed in. 
+        @param stream The DataStream holding the .mesh data. Must be initialised (pos at the start of the buffer).
+        @param pDest Pointer to the Mesh object which will receive the data. Should be blank already.
+        */
+        void importMesh(DataStreamPtr& stream, Mesh* pDest);
+    protected:
+        static String msCurrentVersion;
+
+        typedef std::map<String, MeshSerializerImpl* > MeshSerializerImplMap;
+        MeshSerializerImplMap mImplementations;
+
+    };
+
+}
+
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreResource.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreResource.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreResource.h	(revision 1092)
@@ -0,0 +1,272 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _Resource_H__
+#define _Resource_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreString.h"
+#include "OgreSharedPtr.h"
+#include "OgreStringInterface.h"
+
+namespace Ogre {
+
+    typedef unsigned long ResourceHandle;
+
+
+	// Forward declaration
+	class ManualResourceLoader;
+
+	/** Abstract class reprensenting a loadable resource (e.g. textures, sounds etc)
+        @remarks
+            Resources are data objects that must be loaded and managed throughout
+			an application. A resource might be a mesh, a texture, or any other
+			piece of data - the key thing is that they must be identified by 
+			a name which is unique, must be loaded only once,
+			must be managed efficiently in terms of retrieval, and they may
+			also be unloadable to free memory up when they have not been used for
+			a while and the memory budget is under stress.
+		@par
+			All Resource instances must be a member of a resource group; see
+			ResourceGroupManager for full details.
+        @par
+            Subclasses must implement:
+			<ol>
+			<li>A constructor, overriding the same parameters as the constructor
+			    defined by this class. Subclasses are not allowed to define
+				constructors with other parameters; other settings must be
+				settable through accessor methods before loading.</li>
+            <li>The loadImpl() and unloadImpl() methods - mSize must be set 
+				after loadImpl()</li>
+			<li>StringInterface ParamCommand and ParamDictionary setups
+			    in order to allow setting of core parameters (prior to load)
+				through a generic interface.</li>
+			</ol>
+    */
+	class _OgreExport Resource : public StringInterface
+    {
+	public:
+		OGRE_AUTO_MUTEX // public to allow external locking
+    protected:
+		/// Creator
+		ResourceManager* mCreator;
+		/// Unique name of the resource
+        String mName;
+		/// The name of the resource group
+		String mGroup;
+		/// Numeric handle for more efficient look up than name
+        ResourceHandle mHandle;
+		/// Is the resource currently loaded?
+        bool mIsLoaded;
+		/// The size of the resource in bytes
+        size_t mSize;
+		/// Is this file manually loaded?
+		bool mIsManual;
+		/// Origin of this resource (e.g. script name) - optional
+		String mOrigin;
+		/// Optional manual loader; if provided, data is loaded from here instead of a file
+		ManualResourceLoader* mLoader;
+
+		/** Protected unnamed constructor to prevent default construction. 
+		*/
+		Resource() 
+			: mCreator(0), mHandle(0), mIsLoaded(false), mSize(0), mIsManual(0), mLoader(0)
+		{ 
+		}
+
+		/** Internal implementation of the 'load' action, only called if this 
+			resource is not being loaded from a ManualResourceLoader. 
+		*/
+		virtual void loadImpl(void) = 0;
+		/** Internal implementation of the 'unload' action; called regardless of
+			whether this resource is being loaded from a ManualResourceLoader. 
+		*/
+		virtual void unloadImpl(void) = 0;
+		/** Calculate the size of a resource; this will only be called after 'load' */
+		virtual size_t calculateSize(void) const = 0;
+
+    public:
+		/** Standard constructor.
+		@param creator Pointer to the ResourceManager that is creating this resource
+		@param name The unique name of the resource
+		@param group The name of the resource group to which this resource belongs
+		@param isManual Is this resource manually loaded? If so, you should really
+			populate the loader parameter in order that the load process
+			can call the loader back when loading is required. 
+		@param loader Pointer to a ManualResourceLoader implementation which will be called
+			when the Resource wishes to load (should be supplied if you set
+			isManual to true). You can in fact leave this parameter null 
+			if you wish, but the Resource will never be able to reload if 
+			anything ever causes it to unload. Therefore provision of a proper
+			ManualResourceLoader instance is strongly recommended.
+		*/
+		Resource(ResourceManager* creator, const String& name, ResourceHandle handle,
+			const String& group, bool isManual = false, ManualResourceLoader* loader = 0);
+
+        /** Virtual destructor. Shouldn't need to be overloaded, as the resource
+            deallocation code should reside in unload()
+            @see
+                Resource::unload()
+        */
+        virtual ~Resource();
+
+        /** Loads the resource, if it is not already.
+		@remarks
+			If the resource is loaded from a file, loading is automatic. If not,
+			if for example this resource gained it's data from procedural calls
+			rather than loading from a file, then this resource will not reload 
+			on it's own
+			
+        */
+        virtual void load(void);
+
+		/** Reloads the resource, if it is already loaded.
+		@remarks
+			Calls unload() and then load() again, if the resource is already
+			loaded. If it is not loaded already, then nothing happens.
+		*/
+		virtual void reload(void);
+
+        /** Returns true if the Resource is reloadable, false otherwise.
+        */
+        bool isReloadable(void) const
+        {
+            return !mIsManual || mLoader;
+        }
+
+        /** Is this resource manually loaded?
+		*/
+		bool isManuallyLoaded(void) const
+		{
+			return mIsManual;
+		}
+
+		/** Unloads the resource; this is not permanent, the resource can be
+			reloaded later if required.
+        */
+		virtual void unload(void);
+
+        /** Retrieves info about the size of the resource.
+        */
+        size_t getSize(void) const
+        { 
+            return mSize; 
+        }
+
+        /** 'Touches' the resource to indicate it has been used.
+        */
+        virtual void touch(void);
+
+        /** Gets resource name.
+        */
+        const String& getName(void) const 
+        { 
+            return mName; 
+        }
+
+        ResourceHandle getHandle(void) const
+        {
+            return mHandle;
+        }
+
+        /** Returns true if the Resource has been loaded, false otherwise.
+        */
+        bool isLoaded(void) const 
+        { 
+			OGRE_LOCK_AUTO_MUTEX
+            return mIsLoaded; 
+        }
+
+		/// Gets the group which this resource is a member of
+		const String& getGroup(void) { return mGroup; }
+
+		/// Gets the manager which created this resource
+		ResourceManager* getCreator(void) { return mCreator; }
+		/** Get the origin of this resource, e.g. a script file name.
+		@remarks
+			This property will only contain something if the creator of
+			this resource chose to populate it. Script loaders are advised
+			to populate it.
+		*/
+		const String& getOrigin(void) const { return mOrigin; }
+		/// Notify this resource of it's origin
+		void _notifyOrigin(const String& origin) { mOrigin = origin; }
+
+    };
+
+	/** Shared pointer to a Resource.
+	@remarks
+		This shared pointer allows many references to a resource to be held, and
+		when the final reference is removed, the resource will be destroyed. 
+		Note that the ResourceManager which created this Resource will be holding
+		at least one reference, so this resource will not get destroyed until 
+		someone removes the resource from the manager - this at least gives you
+		strong control over when resources are freed. But the nature of the 
+		shared pointer means that if anyone refers to the removed resource in the
+		meantime, the resource will remain valid.
+	@par
+		You may well see references to ResourcePtr (i.e. ResourcePtr&) being passed 
+		around internally within Ogre. These are 'weak references' ie they do 
+		not increment the reference count on the Resource. This is done for 
+		efficiency in temporary operations that shouldn't need to incur the 
+		overhead of maintaining the reference count; however we don't recommend 
+		you do it yourself since these references are not guaranteed to remain valid.
+	*/
+	typedef SharedPtr<Resource> ResourcePtr;
+
+	/** Interface describing a manual resource loader.
+	@remarks
+		Resources are usually loaded from files; however in some cases you
+		want to be able to set the data up manually instead. This provides
+		some problems, such as how to reload a Resource if it becomes
+		unloaded for some reason, either because of memory constraints, or
+		because a device fails and some or all of the data is lost.
+	@par
+		This interface should be implemented by all classes which wish to
+		provide manual data to a resource. They provide a pointer to themselves
+		when defining the resource (via the appropriate ResourceManager), 
+		and will be called when the Resource tries to load. 
+		They should implement the loadResource method such that the Resource 
+		is in the end set up exactly as if it had loaded from a file, 
+		although the implementations will likely differ	between subclasses 
+		of Resource, which is why no generic algorithm can be stated here. 
+	@note
+		The loader must remain valid for the entire life of the resource,
+		so that if need be it can be called upon to re-load the resource
+		at any time.
+	*/
+	class _OgreExport ManualResourceLoader
+	{
+	public:
+		ManualResourceLoader() {}
+		virtual ~ManualResourceLoader() {}
+
+		/** Called when a resource wishes to load.
+		@param resource The resource which wishes to load
+		*/
+		virtual void loadResource(Resource* resource) = 0;
+	};
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreEventTarget.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreEventTarget.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreEventTarget.h	(revision 1092)
@@ -0,0 +1,57 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+/***************************************************************************
+OgreEventTarget.h  -  
+	This is an abstract class that is the base class of all Targets.
+
+	All targets can processEvents. This function should call the respective
+		event process method depending on what type of event is sent. 
+
+-------------------
+begin                : Nov 19 2002
+copyright            : (C) 2002 by Kenny Sabir
+email                : kenny@sparksuit.com
+***************************************************************************/
+
+#ifndef __EventTarget_H__
+#define __EventTarget_H__
+
+#include "OgrePrerequisites.h"
+
+namespace Ogre {
+
+	/**	This is an abstract class that is the base class of all consumers of InputEvent instances.
+	@remarks
+		This class is part of the set of classes handling buffered input. 
+	*/
+    class _OgreExport EventTarget
+    {
+	public:
+		virtual void processEvent(InputEvent* e) = 0;
+    };
+}
+
+
+#endif //__EventTarget_H__
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreHardwarePixelBuffer.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreHardwarePixelBuffer.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreHardwarePixelBuffer.h	(revision 1092)
@@ -0,0 +1,184 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __HardwarePixelBuffer__
+#define __HardwarePixelBuffer__
+
+// Precompiler options
+#include "OgrePrerequisites.h"
+#include "OgreHardwareBuffer.h"
+#include "OgreSharedPtr.h"
+#include "OgrePixelFormat.h"
+#include "OgreImage.h"
+
+namespace Ogre {
+    /** Specialisation of HardwareBuffer for a pixel buffer. The
+    	HardwarePixelbuffer abstracts an 1D, 2D or 3D quantity of pixels
+    	stored by the rendering API. The buffer can be located on the card
+    	or in main memory depending on its usage. One mipmap level of a
+    	texture is an example of a HardwarePixelBuffer.
+    */
+    class _OgreExport HardwarePixelBuffer : public HardwareBuffer
+    {
+    protected: 
+        // Extents
+        size_t mWidth, mHeight, mDepth;
+        // Pitches (offsets between rows and slices)
+        size_t mRowPitch, mSlicePitch;
+        // Internal format
+        PixelFormat mFormat;
+        // Currently locked region
+        PixelBox mCurrentLock;
+        
+        /// Internal implementation of lock(), must be overridden in subclasses
+        virtual PixelBox lockImpl(const Image::Box lockBox,  LockOptions options) = 0;
+
+        /// Internal implementation of lock(), do not OVERRIDE or CALL this
+        /// for HardwarePixelBuffer implementations, but override the previous method
+        virtual void* lockImpl(size_t offset, size_t length, LockOptions options);
+
+        /// Internal implementation of unlock(), must be overridden in subclasses
+        // virtual void unlockImpl(void) = 0;
+    public:
+        /// Should be called by HardwareBufferManager
+        HardwarePixelBuffer(size_t mWidth, size_t mHeight, size_t mDepth,
+                PixelFormat mFormat,
+                HardwareBuffer::Usage usage, bool useSystemMemory, bool useShadowBuffer);
+        ~HardwarePixelBuffer();
+
+        /** make every lock method from HardwareBuffer available.
+        See http://www.research.att.com/~bs/bs_faq2.html#overloadderived
+        */
+        using HardwareBuffer::lock;	
+
+        /** Lock the buffer for (potentially) reading / writing.
+		    @param lockBox Region of the buffer to lock
+		    @param options Locking options
+		    @returns PixelBox containing the locked region, the pitches and
+		    	the pixel format
+		*/
+		virtual const PixelBox& lock(const Image::Box& lockBox, LockOptions options);
+		/// @copydoc HardwareBuffer::lock
+        virtual void* lock(size_t offset, size_t length, LockOptions options);
+
+		/** Get the current locked region. This is the same value as returned
+		    by lock(const Image::Box, LockOptions)
+		    @returns PixelBox containing the locked region
+		*/        
+        const PixelBox& getCurrentLock();
+		
+		/// @copydoc HardwareBuffer::readData
+		virtual void readData(size_t offset, size_t length, void* pDest);
+		/// @copydoc HardwareBuffer::writeData
+		virtual void writeData(size_t offset, size_t length, const void* pSource,
+				bool discardWholeBuffer = false);
+        
+        /** Copies a box from another PixelBuffer to a region of the 
+        	this PixelBuffer. 
+			@param dst		Source pixel buffer
+        	@param srcBox	Image::Box describing the source region in src
+        	@param dstBox	Image::Box describing the destination region in this buffer
+			@remarks The source and destination regions dimensions don't have to match, in which
+		   	case scaling is done. This scaling is done in software for some render systems, 
+			thus for realtime usage it is recommended to pass the source image in the right dimensions.
+			@note Only call this function when both  buffers are unlocked. 
+         */        
+        virtual void blit(HardwarePixelBuffer *src, const Image::Box &srcBox, const Image::Box &dstBox);
+
+		/** Convience function that blits the entire source pixel buffer to this buffer. 
+			If source and destination dimensions don't match, scaling is done.
+			@param src		PixelBox containing the source pixels and format in memory
+			@note Only call this function when the buffer is unlocked. 
+		*/
+		void blit(HardwarePixelBuffer *src)
+		{
+			blit(src, 
+				Box(0,0,0,src->getWidth(),src->getHeight(),src->getDepth()), 
+				Box(0,0,0,mWidth,mHeight,mDepth)
+			);
+		}
+		
+		/** Copies a region from normal memory to a region of this pixelbuffer. The source
+			image can be in any pixel format supported by OGRE, and in any size. 
+		   	@param src		PixelBox containing the source pixels and format in memory
+		   	@param dstBox	Image::Box describing the destination region in this buffer
+		   	@remarks The source and destination regions dimensions don't have to match, in which
+		   	case scaling is done. This scaling is done in software for some render systems, 
+			so for realtime usage it is recommended to pass the source image in the right dimensions.
+			@note Only call this function when the buffer is unlocked. 
+		*/
+		virtual void blitFromMemory(const PixelBox &src, const Image::Box &dstBox) = 0;
+		
+		/** Convience function that blits a pixelbox from memory to the entire 
+			buffer. The source image is scaled as needed.
+			@param src		PixelBox containing the source pixels and format in memory
+			@note Only call this function when the buffer is unlocked. 
+		*/
+		void blitFromMemory(const PixelBox &src)
+		{
+			blitFromMemory(src, Box(0,0,0,mWidth,mHeight,mDepth));
+		}
+		
+		/** Copies a region of this pixelbuffer to normal memory.
+		   	@param srcBox	Image::Box describing the source region of this buffer
+		   	@param dst		PixelBox describing the destination pixels and format in memory
+		   	@remarks The source and destination regions don't have to match, in which
+		   	case scaling is done.
+			@note Only call this function when the buffer is unlocked. 
+		 */
+		virtual void blitToMemory(const Image::Box &srcBox, const PixelBox &dst) = 0;
+
+		/** Convience function that blits this entire buffer to a pixelbox.
+			The image is scaled as needed.
+			@param src		PixelBox containing the source pixels and format in memory
+			@note Only call this function when the buffer is unlocked. 
+		*/
+		void blitToMemory(const PixelBox &dst)
+		{
+			blitToMemory(Box(0,0,0,mWidth,mHeight,mDepth), dst);
+		}
+        
+        /// Gets the width of this buffer
+        size_t getWidth() const { return mWidth; }
+        /// Gets the height of this buffer
+        size_t getHeight() const { return mHeight; }
+        /// Gets the depth of this buffer
+        size_t getDepth() const { return mDepth; }
+        /// Gets the native pixel format of this buffer
+        PixelFormat getFormat() const { return mFormat; }
+    };
+
+    /** Shared pointer implementation used to share pixel buffers. */
+    class _OgreExport HardwarePixelBufferSharedPtr : public SharedPtr<HardwarePixelBuffer>
+    {
+    public:
+        HardwarePixelBufferSharedPtr() : SharedPtr<HardwarePixelBuffer>() {}
+        explicit HardwarePixelBufferSharedPtr(HardwarePixelBuffer* buf);
+
+
+    };
+
+}
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePixelFormat.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePixelFormat.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePixelFormat.h	(revision 1092)
@@ -0,0 +1,410 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _PixelFormat_H__
+#define _PixelFormat_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreCommon.h"
+
+namespace Ogre {
+    /** The pixel format used for images, textures, and render surfaces */
+    enum PixelFormat
+    {
+        /// Unknown pixel format.
+        PF_UNKNOWN = 0,
+        /// 8-bit pixel format, all bits luminace.
+        PF_L8 = 1,
+		PF_BYTE_L = PF_L8,
+        /// 16-bit pixel format, all bits luminace.
+        PF_L16 = 2,
+		PF_SHORT_L = PF_L16,
+        /// 8-bit pixel format, all bits alpha.
+        PF_A8 = 3,
+		PF_BYTE_A = PF_A8,
+        /// 8-bit pixel format, 4 bits alpha, 4 bits luminace.
+        PF_A4L4 = 4,
+		/// 2 byte pixel format, 1 byte luminance, 1 byte alpha
+		PF_BYTE_LA = 5,
+        /// 16-bit pixel format, 5 bits red, 6 bits green, 5 bits blue.
+        PF_R5G6B5 = 6,
+		/// 16-bit pixel format, 5 bits red, 6 bits green, 5 bits blue.
+        PF_B5G6R5 = 7,
+        /// 8-bit pixel format, 2 bits blue, 3 bits green, 3 bits red.
+        PF_R3G3B2 = 31,
+        /// 16-bit pixel format, 4 bits for alpha, red, green and blue.
+        PF_A4R4G4B4 = 8,
+        /// 16-bit pixel format, 5 bits for blue, green, red and 1 for alpha.
+        PF_A1R5G5B5 = 9,
+        /// 24-bit pixel format, 8 bits for red, green and blue.
+        PF_R8G8B8 = 10,
+        /// 24-bit pixel format, 8 bits for blue, green and red.
+        PF_B8G8R8 = 11,
+        /// 32-bit pixel format, 8 bits for alpha, red, green and blue.
+        PF_A8R8G8B8 = 12,
+        /// 32-bit pixel format, 8 bits for blue, green, red and alpha.
+        PF_A8B8G8R8 = 13,
+        /// 32-bit pixel format, 8 bits for blue, green, red and alpha.
+        PF_B8G8R8A8 = 14,
+		/// 32-bit pixel format, 8 bits for red, green, blue and alpha.
+		PF_R8G8B8A8 = 28,
+        /// 32-bit pixel format, 8 bits for red, 8 bits for green, 8 bits for blue
+        /// like PF_A8R8G8B8, but alpha will get discarded
+        PF_X8R8G8B8 = 26,
+        /// 32-bit pixel format, 8 bits for blue, 8 bits for green, 8 bits for red
+        /// like PF_A8B8G8R8, but alpha will get discarded
+        PF_X8B8G8R8 = 27,
+#if OGRE_ENDIAN == OGRE_ENDIAN_BIG
+		/// 3 byte pixel format, 1 byte for red, 1 byte for green, 1 byte for blue
+		PF_BYTE_RGB = PF_R8G8B8,
+		/// 3 byte pixel format, 1 byte for blue, 1 byte for green, 1 byte for red
+		PF_BYTE_BGR = PF_B8G8R8,
+		/// 4 byte pixel format, 1 byte for blue, 1 byte for green, 1 byte for red and one byte for alpha
+		PF_BYTE_BGRA = PF_B8G8R8A8,
+		/// 4 byte pixel format, 1 byte for red, 1 byte for green, 1 byte for blue, and one byte for alpha
+		PF_BYTE_RGBA = PF_R8G8B8A8,
+#else
+		/// 3 byte pixel format, 1 byte for red, 1 byte for green, 1 byte for blue
+		PF_BYTE_RGB = PF_B8G8R8,
+		/// 3 byte pixel format, 1 byte for blue, 1 byte for green, 1 byte for red
+		PF_BYTE_BGR = PF_R8G8B8,
+		/// 4 byte pixel format, 1 byte for blue, 1 byte for green, 1 byte for red and one byte for alpha
+		PF_BYTE_BGRA = PF_A8R8G8B8,
+		/// 4 byte pixel format, 1 byte for red, 1 byte for green, 1 byte for blue, and one byte for alpha
+		PF_BYTE_RGBA = PF_A8B8G8R8,
+#endif        
+        /// 32-bit pixel format, 2 bits for alpha, 10 bits for red, green and blue.
+        PF_A2R10G10B10 = 15,
+        /// 32-bit pixel format, 10 bits for blue, green and red, 2 bits for alpha.
+        PF_A2B10G10R10 = 16,
+        /// DDS (DirectDraw Surface) DXT1 format
+        PF_DXT1 = 17,
+        /// DDS (DirectDraw Surface) DXT2 format
+        PF_DXT2 = 18,
+        /// DDS (DirectDraw Surface) DXT3 format
+        PF_DXT3 = 19,
+        /// DDS (DirectDraw Surface) DXT4 format
+        PF_DXT4 = 20,
+        /// DDS (DirectDraw Surface) DXT5 format
+        PF_DXT5 = 21,
+		// 16-bit pixel format, 16 bits (float) for red
+        PF_FLOAT16_R = 32,
+        // 48-bit pixel format, 16 bits (float) for red, 16 bits (float) for green, 16 bits (float) for blue
+        PF_FLOAT16_RGB = 22,
+        // 64-bit pixel format, 16 bits (float) for red, 16 bits (float) for green, 16 bits (float) for blue, 16 bits (float) for alpha
+        PF_FLOAT16_RGBA = 23,
+		// 16-bit pixel format, 16 bits (float) for red
+        PF_FLOAT32_R = 33,
+       // 96-bit pixel format, 32 bits (float) for red, 32 bits (float) for green, 32 bits (float) for blue
+        PF_FLOAT32_RGB = 24,
+        // 128-bit pixel format, 32 bits (float) for red, 32 bits (float) for green, 32 bits (float) for blue, 32 bits (float) for alpha
+        PF_FLOAT32_RGBA = 25,
+		// Depth texture format
+		PF_DEPTH = 29,
+		// 64-bit pixel format, 16 bits for red, green, blue and alpha
+		PF_SHORT_RGBA = 30,
+		// Number of pixel formats currently defined
+        PF_COUNT = 34
+    };
+
+    /**
+     * Flags defining some on/off properties of pixel formats
+     */
+    enum PixelFormatFlags {
+        // This format has an alpha channel
+        PFF_HASALPHA        = 0x00000001,      
+        // This format is compressed. This invalidates the values in elemBytes,
+        // elemBits and the bit counts as these might not be fixed in a compressed format.
+        PFF_COMPRESSED    = 0x00000002,
+        // This is a floating point format
+        PFF_FLOAT           = 0x00000004,         
+        // This is a depth format (for depth textures)
+        PFF_DEPTH           = 0x00000008,
+        // Format is in native endian. Generally true for the 16, 24 and 32 bits
+        // formats which can be represented as machine integers.
+        PFF_NATIVEENDIAN    = 0x00000010,
+        // This is an intensity format instead of a RGB one. The luminance
+        // replaces R,G and B. (but not A)
+        PFF_LUMINANCE       = 0x00000020
+    };
+	/** A primitive describing a volume (3D), image (2D) or line (1D) of pixels in memory.
+     	In case of a rectangle, depth must be 1. 
+     	Pixels are stored as a succession of "depth" slices, each containing "height" rows of 
+     	"width" pixels.
+    */
+    class _OgreExport PixelBox: public Box {
+    public:
+    	/// Parameter constructor for setting the members manually
+    	PixelBox() {}
+		/** Constructor providing extents in the form of a Box object. This constructor
+    		assumes the pixel data is laid out consecutively in memory. (this
+    		means row after row, slice after slice, with no space in between)
+    		@param extents	    Extents of the region defined by data
+    		@param pixelFormat	Format of this buffer
+    		@param pixelData	Pointer to the actual data
+    	*/
+		PixelBox(const Box &extents, PixelFormat pixelFormat, void *pixelData=0):
+			Box(extents), data(pixelData), format(pixelFormat)
+		{
+			setConsecutive();
+		}
+    	/** Constructor providing width, height and depth. This constructor
+    		assumes the pixel data is laid out consecutively in memory. (this
+    		means row after row, slice after slice, with no space in between)
+    		@param width	    Width of the region
+    		@param height	    Height of the region
+    		@param depth	    Depth of the region
+    		@param pixelFormat	Format of this buffer
+    		@param pixelData    Pointer to the actual data
+    	*/
+    	PixelBox(size_t width, size_t height, size_t depth, PixelFormat pixelFormat, void *pixelData=0):
+    		Box(0, 0, 0, width, height, depth),
+    		data(pixelData), format(pixelFormat)
+    	{
+    		setConsecutive();
+    	}
+    	
+        /// The data pointer 
+        void *data;
+        /// The pixel format 
+        PixelFormat format;
+        /** Number of elements between the leftmost pixel of one row and the left
+         	pixel of the next. This value must always be equal to getWidth() (consecutive) 
+			for compressed formats.
+        */
+        size_t rowPitch;
+        /** Number of elements between the top left pixel of one (depth) slice and 
+         	the top left pixel of the next. This can be a negative value. Must be a multiple of
+         	rowPitch. This value must always be equal to getWidth()*getHeight() (consecutive) 
+			for compressed formats.
+        */
+        size_t slicePitch;
+        
+        /** Set the rowPitch and slicePitch so that the buffer is laid out consecutive 
+         	in memory.
+        */        
+        void setConsecutive()
+        {
+            rowPitch = getWidth();
+            slicePitch = getWidth()*getHeight();
+        }
+        /**	Get the number of elements between one past the rightmost pixel of 
+         	one row and the leftmost pixel of the next row. (IE this is zero if rows
+         	are consecutive).
+        */
+        size_t getRowSkip() const { return rowPitch - getWidth(); }
+        /** Get the number of elements between one past the right bottom pixel of
+         	one slice and the left top pixel of the next slice. (IE this is zero if slices
+         	are consecutive).
+        */
+        size_t getSliceSkip() const { return slicePitch - (getHeight() * rowPitch); }
+
+        /** Return whether this buffer is laid out consecutive in memory (ie the pitches
+         	are equal to the dimensions)
+        */        
+        bool isConsecutive() const 
+		{ 
+			return rowPitch == getWidth() && slicePitch == getWidth()*getHeight(); 
+		}
+        /** Return the size (in bytes) this image would take if it was
+        	laid out consecutive in memory
+      	*/
+      	size_t getConsecutiveSize() const;
+      	/** Return a subvolume of this PixelBox.
+      		@param def	Defines the bounds of the subregion to return
+      		@returns	A pixel box describing the region and the data in it
+      		@remarks	This function does not copy any data, it just returns
+      			a PixelBox object with a data pointer pointing somewhere inside 
+      			the data of object.
+      		@throws	Exception(ERR_INVALIDPARAMS) if def is not fully contained
+      	*/
+      	PixelBox getSubVolume(const Box &def) const;
+    };
+    
+
+    /**
+     * Some utility functions for packing and unpacking pixel data
+     */
+    class _OgreExport PixelUtil {
+    public:
+        /** Returns the size in bytes of an element of the given pixel format.
+         @returns
+               The size in bytes of an element. See Remarks.
+         @remarks
+               Passing PF_UNKNOWN will result in returning a size of 0 bytes.
+        */
+        static size_t getNumElemBytes( PixelFormat format );
+
+        /** Returns the size in bits of an element of the given pixel format.
+          @returns
+               The size in bits of an element. See Remarks.
+           @remarks
+               Passing PF_UNKNOWN will result in returning a size of 0 bits.
+        */
+        static size_t getNumElemBits( PixelFormat format );
+
+		/** Returns the size in memory of a region with the given extents and pixel
+			format with consecutive memory layout.
+			@param width
+				The width of the area
+			@param height
+				The height of the area
+			@param depth
+				The depth of the area
+			@param format
+				The format of the area
+		  	@returns
+		  		The size in bytes
+			@remarks
+				In case that the format is non-compressed, this simply returns
+				width*height*depth*PixelUtil::getNumElemBytes(format). In the compressed
+				case, this does serious magic.
+		*/
+		static size_t getMemorySize(size_t width, size_t height, size_t depth, PixelFormat format);
+		
+        /** Returns the property flags for this pixel format
+          @returns
+               A bitfield combination of PFF_HASALPHA, PFF_ISCOMPRESSED,
+               PFF_FLOAT, PFF_DEPTH, PFF_NATIVEENDIAN, PFF_LUMINANCE
+          @remarks
+               This replaces the seperate functions for formatHasAlpha, formatIsFloat, ...
+        */
+        static unsigned int getFlags( PixelFormat format );
+
+        /** Shortcut method to determine if the format has an alpha component */
+        static bool hasAlpha(PixelFormat format);
+        /** Shortcut method to determine if the format is floating point */
+        static bool isFloatingPoint(PixelFormat format);
+        /** Shortcut method to determine if the format is compressed */
+        static bool isCompressed(PixelFormat format);
+        /** Shortcut method to determine if the format is a depth format. */
+        static bool isDepth(PixelFormat format);
+        /** Shortcut method to determine if the format is in native endian format. */
+        static bool isNativeEndian(PixelFormat format);
+        /** Shortcut method to determine if the format is a luminance format. */
+        static bool isLuminance(PixelFormat format);
+		
+		/** Return wether a certain image extent is valid for this image format.
+			@param width
+				The width of the area
+			@param height
+				The height of the area
+			@param depth
+				The depth of the area
+			@param format
+				The format of the area
+			@remarks For non-compressed formats, this is always true. For DXT formats,
+			only sizes with a width and height multiple of 4 and depth 1 are allowed.
+		*/
+		static bool isValidExtent(size_t width, size_t height, size_t depth, PixelFormat format);
+
+        /** Gives the number of bits (RGBA) for a format. See remarks.          
+          @remarks      For non-colour formats (dxt, depth) this returns [0,0,0,0].
+        */
+        static void getBitDepths(PixelFormat format, int rgba[4]);
+
+		/** Gives the masks for the R, G, B and A component
+		  @note			Only valid for native endian formats
+        */
+        static void getBitMasks(PixelFormat format, uint32 rgba[4]);
+
+        /** Gets the name of an image format
+        */
+        static String getFormatName(PixelFormat srcformat);
+
+        /** Returns wether the format can be packed or unpacked with the packColour()
+        and unpackColour() functions. This is generally not true for compressed and
+        depth formats as they are special. It can only be true for formats with a
+        fixed element size.
+          @returns 
+               true if yes, otherwise false
+        */
+        static bool isAccessible(PixelFormat srcformat);
+        
+        /** Pack a colour value to memory
+        	@param colour	The colour
+        	@param pf		Pixelformat in which to write the colour
+        	@param dest		Destination memory location
+        */
+        static void packColour(const ColourValue &colour, const PixelFormat pf,  const void* dest);
+        /** Pack a colour value to memory
+        	@param r,g,b,a	The four colour components, range 0x00 to 0xFF
+        	@param pf		Pixelformat in which to write the colour
+        	@param dest		Destination memory location
+        */
+        static void packColour(const uint8 r, const uint8 g, const uint8 b, const uint8 a, const PixelFormat pf,  const void* dest);
+         /** Pack a colour value to memory
+        	@param r,g,b,a	The four colour components, range 0.0f to 1.0f
+        					(an exception to this case exists for floating point pixel
+        					formats, which don't clamp to 0.0f..1.0f)
+        	@param pf		Pixelformat in which to write the colour
+        	@param dest		Destination memory location
+        */
+        static void packColour(const float r, const float g, const float b, const float a, const PixelFormat pf,  const void* dest);
+
+        /** Unpack a colour value from memory
+        	@param colour	The colour is returned here
+        	@param pf		Pixelformat in which to read the colour
+        	@param src		Source memory location
+        */
+        static void unpackColour(ColourValue *colour, PixelFormat pf,  const void* src);
+        /** Unpack a colour value from memory
+        	@param r,g,b,a	The colour is returned here (as byte)
+        	@param pf		Pixelformat in which to read the colour
+        	@param src		Source memory location
+        	@remarks 	This function returns the colour components in 8 bit precision,
+        		this will lose precision when coming from PF_A2R10G10B10 or floating
+        		point formats.  
+        */
+        static void unpackColour(uint8 *r, uint8 *g, uint8 *b, uint8 *a, PixelFormat pf,  const void* src);
+        /** Unpack a colour value from memory
+        	@param r,g,b,a	The colour is returned here (as float)
+        	@param pf		Pixelformat in which to read the colour
+        	@param src		Source memory location
+        */
+        static void unpackColour(float *r, float *g, float *b, float *a, PixelFormat pf,  const void* src); 
+        
+        /** Convert consecutive pixels from one format to another. No dithering or filtering is being done. 
+         	Converting from RGB to luminance takes the R channel.  In case the source and destination format match,
+         	just a copy is done.
+         	@param	src			Pointer to source region
+         	@param	srcFormat	Pixel format of source region
+         	@param   dst			Pointer to destination region
+         	@param	dstFormat	Pixel format of destination region
+         */
+        static void bulkPixelConversion(void *src, PixelFormat srcFormat, void *dest, PixelFormat dstFormat, unsigned int count);
+
+      	/** Convert pixels from one format to another. No dithering or filtering is being done. Converting
+          	from RGB to luminance takes the R channel. 
+		 	@param	src			PixelBox containing the source pixels, pitches and format
+		 	@param	dst			PixelBox containing the destination pixels, pitches and format
+		 	@remarks The source and destination boxes must have the same
+         	dimensions. In case the source and destination format match, a plain copy is done.
+        */
+        static void bulkPixelConversion(const PixelBox &src, const PixelBox &dst);
+    };
+
+};
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreResourceBackgroundQueue.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreResourceBackgroundQueue.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreResourceBackgroundQueue.h	(revision 1092)
@@ -0,0 +1,258 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __ResourceBackgroundQueue_H__
+#define __ResourceBackgroundQueue_H__
+
+
+#include "OgrePrerequisites.h"
+#include "OgreCommon.h"
+#include "OgreSingleton.h"
+
+#if OGRE_THREAD_SUPPORT
+#	include <boost/thread/thread.hpp>
+#	include <boost/thread/condition.hpp>
+#endif
+
+namespace Ogre {
+
+	/// Identifier of a background process
+	typedef unsigned long BackgroundProcessTicket;
+
+	/** This abstract listener interface lets you get immediate notifications of
+		completed background processes instead of having to check ticket 
+		statuses.
+	@note
+		These callbacks occur in the <i>background thread</i>, not the thread
+		which you queued your request from. You should only use this method
+		if you understand the implications of threading and the use of locks, 
+		monitor objects or other such thread safety techniques. If you don't, 
+		use the simpler 'ticket' approach and poll the isProcessComplete() 
+		method
+		to determine when your processes complete.
+	*/
+	class _OgreExport ResourceBackgroundQueueListener
+	{
+	public:
+		/** Called when a requested operation completes. 
+		@note Called in the <i>background thread</i>, not your queueing
+		thread, so be careful!
+		*/
+		virtual void operationCompleted(BackgroundProcessTicket ticket) = 0;
+	};
+	
+	/** This class is used to perform Resource operations in a
+		background thread. 
+	@remarks
+		If threading is enabled, Ogre will create a single background thread
+		which can be used to load / unload resources in parallel. Only one
+		resource will be processed at once in this background thread, but it
+		will be in parallel with the main thread. 
+	@par
+		The general approach here is that on requesting a background resource
+		process, your request is placed on a queue ready for the background
+		thread to be picked up, and you will get a 'ticket' back, identifying
+		the request. Your call will then return and your thread can
+		proceed, knowing that at some point in the background the operation wil 
+		be performed. In it's own thread, the resource operation will be 
+		performed, and once finished the ticket will be marked as complete. 
+		You can check the status of tickets by calling isProcessComplete() 
+		from your queueing thread. It is also possible to get immediate 
+		callbacks on completion, but these callbacks happen in the background 
+		loading thread (not your calling thread), so should only be used if you
+		really understand multithreading. 
+	@note
+		This class will only perform tasks in a background thread if 
+		OGRE_THREAD_SUPPORT is defined to be 1. Otherwise, all methods will
+		call their exact equivalents in ResourceGroupManager synchronously. 
+	*/
+	class _OgreExport ResourceBackgroundQueue : public Singleton<ResourceBackgroundQueue>
+	{
+	protected:
+		/** Enumerates the type of requests */
+		enum RequestType
+		{
+			RT_INITIALISE_GROUP,
+			RT_INITIALISE_ALL_GROUPS,
+			RT_LOAD_GROUP,
+			RT_LOAD_RESOURCE,
+			RT_SHUTDOWN
+		};
+		/** Encapsulates a queued request for the background queue */
+		struct Request
+		{
+			BackgroundProcessTicket ticketID;
+			RequestType type;
+			String resourceName;
+			String resourceType;
+			String groupName;
+			bool isManual; 
+			ManualResourceLoader* loader;
+			const NameValuePairList* loadParams;
+			ResourceBackgroundQueueListener* listener;
+		};
+		typedef std::list<Request> RequestQueue;
+		typedef std::map<BackgroundProcessTicket, Request*> RequestTicketMap;
+		
+		/// Queue of requests, used to store and order requests
+		RequestQueue mRequestQueue;
+		
+		/// Request lookup by ticket
+		RequestTicketMap mRequestTicketMap;
+
+		/// Next ticket ID
+		unsigned long mNextTicketID;
+
+#if OGRE_THREAD_SUPPORT
+		/// The single background thread which will process loading requests
+		boost::thread* mThread;
+		/// Synchroniser token to wait / notify on queue
+		boost::condition mCondition;
+		/// Thread function
+		static void threadFunc(void);
+		/// Internal method for adding a request; also assigns a ticketID
+		BackgroundProcessTicket addRequest(Request& req);
+#else
+		/// Dummy
+		void* mThread;
+#endif
+
+		/// Private mutex, not allowed to lock from outside
+		OGRE_AUTO_MUTEX
+
+	public:
+		ResourceBackgroundQueue();
+		virtual ~ResourceBackgroundQueue();
+
+		/** Initialise the background queue system. */
+		virtual void initialise(void);
+		
+		/** Shut down the background queue system. */
+		virtual void shutdown(void);
+
+		/** Initialise a resource group in the background.
+		@see ResourceGroupManager::initialiseResourceGroup
+		@param name The name of the resource group to initialise
+		@param listener Optional callback interface, take note of warnings in 
+			the header and only use if you understand them.
+		@returns Ticket identifying the request, use isProcessComplete() to 
+			determine if completed if not using listener
+		*/
+		virtual BackgroundProcessTicket initialiseResourceGroup(
+			const String& name, ResourceBackgroundQueueListener* listener = 0);
+
+		/** Initialise all resource groups which are yet to be initialised in 
+			the background.
+		@see ResourceGroupManager::intialiseResourceGroup
+		@param listener Optional callback interface, take note of warnings in 
+			the header and only use if you understand them.
+		@returns Ticket identifying the request, use isProcessComplete() to 
+			determine if completed if not using listener
+		*/
+		virtual BackgroundProcessTicket initialiseAllResourceGroups( 
+			ResourceBackgroundQueueListener* listener = 0);
+		/** Loads a resource group in the background.
+		@see ResourceGroupManager::intialiseResourceGroup
+		@param listener Optional callback interface, take note of warnings in 
+			the header and only use if you understand them.
+		@returns Ticket identifying the request, use isProcessComplete() to 
+			determine if completed if not using listener
+		*/
+		virtual BackgroundProcessTicket loadResourceGroup(const String& name, 
+			ResourceBackgroundQueueListener* listener = 0);
+
+
+		/** Load a single resource in the background. 
+		@see ResourceManager::load
+		@param resType The type of the resource 
+			(from ResourceManager::getResourceType())
+		@param name The name of the Resource
+		@param group The resource group to which this resource will belong
+		@param isManual Is the resource to be manually loaded? If so, you should
+			provide a value for the loader parameter
+		@param loader The manual loader which is to perform the required actions
+			when this resource is loaded; only applicable when you specify true
+			for the previous parameter. NOTE: must be thread safe!!
+        @param loadParams Optional pointer to a list of name/value pairs 
+            containing loading parameters for this type of resource. Remember 
+			that this must have a lifespan longer than the return of this call!
+		*/
+		virtual BackgroundProcessTicket load(
+			const String& resType, const String& name, 
+            const String& group, bool isManual = false, 
+			ManualResourceLoader* loader = 0, 
+			const NameValuePairList* loadParams = 0, 
+			ResourceBackgroundQueueListener* listener = 0);
+
+		/** Returns whether a previously queued process has completed or not. 
+		@param ticket The ticket which was returned when the process was queued
+		@returns true if process has completed (or if the ticket is 
+			unrecognised), false otherwise
+		@note Tickets are not stored onced complete so do not accumulate over 
+			time.
+		This is why a non-existent ticket will return 'true'.
+		*/
+		virtual bool isProcessComplete(BackgroundProcessTicket ticket);
+
+		/** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static ResourceBackgroundQueue& getSingleton(void);
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static ResourceBackgroundQueue* getSingletonPtr(void);
+		
+
+	};
+
+
+}
+
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSharedPtr.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSharedPtr.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSharedPtr.h	(revision 1092)
@@ -0,0 +1,170 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __SharedPtr_H__
+#define __SharedPtr_H__
+
+#include "OgrePrerequisites.h"
+
+namespace Ogre {
+
+	/** Reference-counted shared pointer, used for objects where implicit destruction is 
+        required. 
+    @remarks
+        This is a standard shared pointer implementation which uses a reference 
+        count to work out when to delete the object. OGRE does not use this class
+        very often, because it is usually more efficient to make the destruction
+        of objects more intentional (in blocks, say). However in some cases you
+        really cannot tell how many people are using an object, and this approach is
+        worthwhile (e.g. ControllerValue)
+	@par
+		If OGRE_THREAD_SUPPORT is defined to be 1, use of this class is thread-safe.
+    */
+    template<class T> class SharedPtr {
+	protected:
+		T* pRep;
+		unsigned int* pUseCount;
+	public:
+		OGRE_AUTO_SHARED_MUTEX // public to allow external locking
+		/** Constructor, does not initialise the SharedPtr.
+			@remarks
+				<b>Dangerous!</b> You have to call bind() before using the SharedPtr.
+		*/
+		SharedPtr() : pRep(0), pUseCount(0) {}
+		explicit SharedPtr(T* rep) : pRep(rep), pUseCount(new unsigned int(1)) 
+		{
+			OGRE_NEW_AUTO_SHARED_MUTEX
+		}
+		SharedPtr(const SharedPtr& r) 
+		{
+			// lock & copy other mutex pointer
+			OGRE_LOCK_MUTEX(*r.OGRE_AUTO_MUTEX_NAME)
+			OGRE_COPY_AUTO_SHARED_MUTEX(r.OGRE_AUTO_MUTEX_NAME)
+			pRep = r.pRep;
+			pUseCount = r.pUseCount; 
+			// Handle zero pointer gracefully to manage STL containers
+			if(pUseCount)
+			{
+				++(*pUseCount); 
+			}
+		}
+		SharedPtr& operator=(const SharedPtr& r) {
+			if (pRep == r.pRep)
+				return *this;
+			release();
+			// lock & copy other mutex pointer
+			OGRE_LOCK_MUTEX(*r.OGRE_AUTO_MUTEX_NAME)
+			OGRE_COPY_AUTO_SHARED_MUTEX(r.OGRE_AUTO_MUTEX_NAME)
+			pRep = r.pRep;
+			pUseCount = r.pUseCount;
+			if (pUseCount)
+			{
+				++(*pUseCount);
+			}
+			return *this;
+		}
+		virtual ~SharedPtr() {
+            release();
+		}
+
+
+		inline T& operator*() const { assert(pRep); return *pRep; }
+		inline T* operator->() const { assert(pRep); return pRep; }
+		inline T* get() const { return pRep; }
+
+		/** Binds rep to the SharedPtr.
+			@remarks
+				Assumes that the SharedPtr is uninitialised!
+		*/
+		void bind(T* rep) {
+			assert(!pRep && !pUseCount);
+			OGRE_NEW_AUTO_SHARED_MUTEX
+			OGRE_LOCK_AUTO_SHARED_MUTEX
+			pUseCount = new unsigned int(1);
+			pRep = rep;
+		}
+
+		inline bool unique() const { assert(pUseCount); OGRE_LOCK_AUTO_SHARED_MUTEX return *pUseCount == 1; }
+		inline unsigned int useCount() const { assert(pUseCount); OGRE_LOCK_AUTO_SHARED_MUTEX return *pUseCount; }
+		inline unsigned int* useCountPointer() const { return pUseCount; }
+
+		inline T* getPointer() const { return pRep; }
+
+		inline bool isNull(void) const { return pRep == 0; }
+
+        inline void setNull(void) { 
+			if (pRep)
+			{
+				// can't scope lock mutex before release incase deleted
+				release();
+				pRep = 0;
+				pUseCount = 0;
+				OGRE_COPY_AUTO_SHARED_MUTEX(0)
+			}
+        }
+
+    protected:
+
+        inline void release(void) {
+			bool destroyThis = false;
+			{
+				// lock own mutex in limited scope (must unlock before destroy)
+				OGRE_LOCK_AUTO_SHARED_MUTEX
+				if (pUseCount)
+				{
+					if (--(*pUseCount) == 0) 
+					{
+						destroyThis = true;
+	                }
+				}
+            }
+			if (destroyThis)
+				destroy();
+        }
+
+        virtual void destroy(void)
+        {
+            // IF YOU GET A CRASH HERE, YOU FORGOT TO FREE UP POINTERS
+            // BEFORE SHUTTING OGRE DOWN
+            // Use setNull() before shutdown or make sure your pointer goes
+            // out of scope before OGRE shuts down to avoid this.
+            delete pRep;
+            delete pUseCount;
+			OGRE_DELETE_AUTO_SHARED_MUTEX
+        }
+	};
+
+	template<class T, class U> inline bool operator==(SharedPtr<T> const& a, SharedPtr<U> const& b)
+	{
+		return a.get() == b.get();
+	}
+
+	template<class T, class U> inline bool operator!=(SharedPtr<T> const& a, SharedPtr<U> const& b)
+	{
+		return a.get() != b.get();
+	}
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderSystemCapabilities.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderSystemCapabilities.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderSystemCapabilities.h	(revision 1092)
@@ -0,0 +1,296 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __RenderSystemCapabilities__
+#define __RenderSystemCapabilities__ 1
+
+// Precompiler options
+#include "OgrePrerequisites.h"
+#include "OgreString.h"
+
+namespace Ogre {
+
+    /// Enum describing the different hardware capabilities we want to check for
+    enum Capabilities
+    {
+        //RSC_MULTITEXTURE          = 0x00000001,
+        /// Supporta generating mipmaps in hardware
+        RSC_AUTOMIPMAP              = 0x00000002,
+        RSC_BLENDING                = 0x00000004,
+        /// Supports anisotropic texture filtering
+        RSC_ANISOTROPY              = 0x00000008,
+        /// Supports fixed-function DOT3 texture blend
+        RSC_DOT3                    = 0x00000010,
+        /// Supports cube mapping
+        RSC_CUBEMAPPING             = 0x00000020,
+        /// Supports hardware stencil buffer
+        RSC_HWSTENCIL               = 0x00000040,
+        /// Supports hardware vertex and index buffers
+        RSC_VBO                     = 0x00000080,
+        /// Supports vertex programs (vertex shaders)
+		RSC_VERTEX_PROGRAM          = 0x00000200,
+        /// Supports fragment programs (pixel shaders)
+		RSC_FRAGMENT_PROGRAM        = 0x00000400,
+        /// Supports compressed textures
+		RSC_TEXTURE_COMPRESSION     = 0x00000800,
+        /// Supports compressed textures in the DXT/ST3C formats
+		RSC_TEXTURE_COMPRESSION_DXT = 0x00001000,
+        /// Supports compressed textures in the VTC format
+		RSC_TEXTURE_COMPRESSION_VTC = 0x00002000,
+        /// Supports performing a scissor test to exclude areas of the screen
+        RSC_SCISSOR_TEST            = 0x00004000,
+        /// Supports separate stencil updates for both front and back faces
+        RSC_TWO_SIDED_STENCIL       = 0x00008000,
+        /// Supports wrapping the stencil value at the range extremeties
+        RSC_STENCIL_WRAP            = 0x00010000,
+        /// Supports hardware occlusion queries
+        RSC_HWOCCLUSION				= 0x00020000,
+        /// Supports user clipping planes
+        RSC_USER_CLIP_PLANES		= 0x00040000,
+		/// Supports the VET_UBYTE4 vertex element type
+		RSC_VERTEX_FORMAT_UBYTE4	= 0x00080000,
+		/// Supports infinite far plane projection
+		RSC_INFINITE_FAR_PLANE      = 0x00100000,
+        /// Supports hardware render-to-texture (bigger than framebuffer)
+        RSC_HWRENDER_TO_TEXTURE     = 0x00200000,
+        /// Supports float textures and render targets
+        RSC_TEXTURE_FLOAT           = 0x00400000,
+        /// Supports non-power of two textures
+        RSC_NON_POWER_OF_2_TEXTURES = 0x00800000,
+		/// Supports 3d (volume) textures
+		RSC_TEXTURE_3D				= 0x01000000
+    };
+
+    /** singleton class for storing the capabilities of the graphics card. 
+        @remarks
+            This class stores the capabilities of the graphics card.  This
+            information is set by the individual render systems.
+    */
+    class _OgreExport RenderSystemCapabilities 
+    {
+        private:
+            /// The number of world matricies available
+            ushort mNumWorldMatrices;
+            /// The number of texture units available
+            ushort mNumTextureUnits;
+            /// The stencil buffer bit depth
+            ushort mStencilBufferBitDepth;
+            /// The number of matrices available for hardware blending
+            ushort mNumVertexBlendMatrices;
+            /// Stores the capabilities flags.
+            int mCapabilities;
+            /// The best vertex program that this card / rendersystem supports
+            String mMaxVertexProgramVersion;
+            /// The best fragment program that this card / rendersystem supports
+            String mMaxFragmentProgramVersion;
+            /// The number of floating-point constants vertex programs support
+            ushort mVertexProgramConstantFloatCount;           
+            /// The number of integer constants vertex programs support
+            ushort mVertexProgramConstantIntCount;           
+            /// The number of boolean constants vertex programs support
+            ushort mVertexProgramConstantBoolCount;           
+            /// The number of floating-point constants fragment programs support
+            ushort mFragmentProgramConstantFloatCount;           
+            /// The number of integer constants fragment programs support
+            ushort mFragmentProgramConstantIntCount;           
+            /// The number of boolean constants fragment programs support
+            ushort mFragmentProgramConstantBoolCount;
+
+    	public:	
+            RenderSystemCapabilities ();
+            ~RenderSystemCapabilities ();
+
+            void setNumWorldMatricies(ushort num)
+            {
+                mNumWorldMatrices = num;
+            }
+
+            void setNumTextureUnits(ushort num)
+            {
+                mNumTextureUnits = num;
+            }
+
+            void setStencilBufferBitDepth(ushort num)
+            {
+                mStencilBufferBitDepth = num;
+            }
+
+            void setNumVertexBlendMatrices(ushort num)
+            {
+                mNumVertexBlendMatrices = num;
+            }
+
+            ushort getNumWorldMatricies(void) const
+            { 
+                return mNumWorldMatrices;
+            }
+
+            /** Returns the number of texture units the current output hardware
+                supports.
+
+                For use in rendering, this determines how many texture units the
+                are available for multitexturing (i.e. rendering multiple 
+                textures in a single pass). Where a Material has multiple 
+                texture layers, it will try to use multitexturing where 
+                available, and where it is not available, will perform multipass
+                rendering to achieve the same effect.
+            */
+            ushort getNumTextureUnits(void) const
+            {
+                return mNumTextureUnits;
+            }
+
+            /** Determines the bit depth of the hardware accelerated stencil 
+                buffer, if supported.
+                @remarks
+                    If hardware stencilling is not supported, the software will
+                    provide an 8-bit software stencil.
+            */
+            ushort getStencilBufferBitDepth(void) const
+            {
+                return mStencilBufferBitDepth;
+            }
+
+            /** Returns the number of matrices available to hardware vertex 
+                blending for this rendering system. */
+            ushort numVertexBlendMatrices(void) const
+            {
+                return mNumVertexBlendMatrices;
+            }
+
+            /** Adds a capability flag to mCapabilities
+            */
+            void setCapability(const Capabilities c) 
+            { 
+                mCapabilities |= c;
+            }
+
+            /** Checks for a capability
+            */
+            bool hasCapability(const Capabilities c) const
+            {
+                if(mCapabilities & c)
+                {
+                    return true;
+                }
+                else
+                {
+                    return false;
+                }
+            }
+            /// Gets the best low-level vertex program version supported
+            const String& getMaxVertexProgramVersion(void) const
+            {
+                return mMaxVertexProgramVersion;
+            }
+            /// Gets the best fragment program that this card / rendersystem supports
+            const String& getMaxFragmentProgramVersion(void) const
+            {
+                return mMaxFragmentProgramVersion;
+            }
+            /// The number of floating-point constants vertex programs support
+            ushort getVertexProgramConstantFloatCount(void) const
+            {
+                return mVertexProgramConstantFloatCount;           
+            }
+            /// The number of integer constants vertex programs support
+            ushort getVertexProgramConstantIntCount(void) const
+            {
+                return mVertexProgramConstantIntCount;           
+            }
+            /// The number of boolean constants vertex programs support
+            ushort getVertexProgramConstantBoolCount(void) const
+            {
+                return mVertexProgramConstantBoolCount;           
+            }
+            /// The number of floating-point constants fragment programs support
+            ushort getFragmentProgramConstantFloatCount(void) const
+            {
+                return mFragmentProgramConstantFloatCount;           
+            }
+            /// The number of integer constants fragment programs support
+            ushort getFragmentProgramConstantIntCount(void) const
+            {
+                return mFragmentProgramConstantIntCount;           
+            }
+            /// The number of boolean constants fragment programs support
+            ushort getFragmentProgramConstantBoolCount(void) const
+            {
+                return mFragmentProgramConstantBoolCount;           
+            }
+
+
+
+            /// sets the best low-level vertex program version supported
+            void setMaxVertexProgramVersion(const String& ver)
+            {
+                mMaxVertexProgramVersion = ver;
+            }
+            /// sets the best fragment program that this card / rendersystem supports
+            void setMaxFragmentProgramVersion(const String& ver)
+            {
+                mMaxFragmentProgramVersion = ver;
+            }
+            /// The number of floating-point constants vertex programs support
+            void setVertexProgramConstantFloatCount(ushort c)
+            {
+                mVertexProgramConstantFloatCount = c;           
+            }
+            /// The number of integer constants vertex programs support
+            void setVertexProgramConstantIntCount(ushort c)
+            {
+                mVertexProgramConstantIntCount = c;           
+            }
+            /// The number of boolean constants vertex programs support
+            void setVertexProgramConstantBoolCount(ushort c)
+            {
+                mVertexProgramConstantBoolCount = c;           
+            }
+            /// The number of floating-point constants fragment programs support
+            void setFragmentProgramConstantFloatCount(ushort c)
+            {
+                mFragmentProgramConstantFloatCount = c;           
+            }
+            /// The number of integer constants fragment programs support
+            void setFragmentProgramConstantIntCount(ushort c)
+            {
+                mFragmentProgramConstantIntCount = c;           
+            }
+            /// The number of boolean constants fragment programs support
+            void setFragmentProgramConstantBoolCount(ushort c)
+            {
+                mFragmentProgramConstantBoolCount = c;           
+            }
+
+            /** Write the capabilities to the pass in Log */
+            void log(Log* pLog);
+
+
+
+
+    };
+};
+
+#endif // __RenderSystemCapabilities__
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMouseTarget.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMouseTarget.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMouseTarget.h	(revision 1092)
@@ -0,0 +1,78 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+/***************************************************************************
+OgreMouseTarget.h  -  
+	Handles the adding and removing of MouseListeners.
+
+	Components that process the Mouse Event should subclass this class 
+	and call processMouseEvent when that event is identified.
+
+-------------------
+begin                : Nov 19 2002
+copyright            : (C) 2002 by Kenny Sabir
+email                : kenny@sparksuit.com
+***************************************************************************/
+
+#ifndef __MouseTarget_H__
+#define __MouseTarget_H__
+
+#include "OgrePrerequisites.h"
+#include "OgrePositionTarget.h"
+
+namespace Ogre {
+
+	
+	/** Handles the adding and removing of MouseListeners.
+	@remarks
+		Components that process the Mouse Event should subclass this class 
+		and call processMouseEvent when that event is identified.
+	*/
+	class _OgreExport MouseTarget : public PositionTarget
+    {
+    private:
+        std::set<MouseListener*> mRemovedListeners;
+    
+    protected:
+        std::set<MouseListener*> mMouseListeners;
+
+		// is mouse inside the object
+		bool mMouseWithin;
+
+    public:
+		MouseTarget();
+        virtual ~MouseTarget() { }
+
+		void processMouseEvent(MouseEvent* e) ;
+		void addMouseListener(MouseListener* l) ;
+		void removeMouseListener(MouseListener* l) ;
+		bool isMouseWithin() const;
+    };
+
+
+
+}
+
+
+#endif //__MouseTarget_H__
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreInputEvent.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreInputEvent.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreInputEvent.h	(revision 1092)
@@ -0,0 +1,190 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General License for more details.
+
+You should have received a copy of the GNU Lesser General License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+/***************************************************************************
+OgreInputEvent.h  -  
+	 * The root event class for all GuiElement-level input events.
+	 *
+	 * Input events are delivered to listeners before they are
+	 * processed normally by the source where they originated.
+	 * This allows listeners and GuiElement subclasses to "consume"
+	 * the event so that the source will not process them in their
+	 * default manner.  For example, consuming mousePressed events
+	 * on a Button GuiElement will prevent the Button from being
+	 * activated.
+-------------------
+begin                : Nov 19 2002
+copyright            : (C) 2002 by Kenny Sabir
+email                : kenny@sparksuit.com
+***************************************************************************/
+
+#ifndef __InputEvent_H__
+#define __InputEvent_H__
+
+#include "OgrePrerequisites.h"
+
+namespace Ogre {
+
+    /** The root event class for all GuiElement-level input events.
+	 @remarks
+	  Input events are delivered to listeners before they are
+	  processed normally by the source where they originated.
+	  This allows listeners and GuiElement subclasses to "consume"
+	  the event so that the source will not process them in their
+	  default manner.  For example, consuming mousePressed events
+	  on a Button GuiElement will prevent the Button from being
+	  activated.
+	*/
+	class _OgreExport InputEvent
+    {
+    protected:
+
+		/**
+		 * Not implemented yet
+		 */
+		Real mWhen;
+		/**
+		 * The state of the modifier keys at the time the input
+		 * event was fired.
+		 */
+		int mModifiers;
+
+		/**
+		 * The target to process the event. This is ususally found by the dispatcher
+		 */
+
+		EventTarget* mSource;
+
+		/**
+		 * The ID of the event
+		 */
+		int mId;
+
+		/**
+		 * whether the event has been consumed
+		 */
+		bool mConsumed;
+
+	public:
+	
+		
+		enum		// using the enum hack cause VC6 doesn't support static const in classes
+		{
+			/**
+			 * This flag indicates that the Shift key was down when the event
+			 * occurred.
+			 */
+			SHIFT_MASK		= 1 << 0,
+			
+			/**
+			 * This flag indicates that the Control key was down when the event
+			 * occurred.
+			 */
+			CTRL_MASK		= 1 << 1,
+			
+			/**
+			 * This flag indicates that the Meta key was down when the event
+			 * occurred. For mouse events, this flag indicates that the right
+			 * button was pressed or released.
+			 */
+
+			 META_MASK		= 1 << 2,
+			/**
+			 * This flag indicates that the Alt key was down when
+			 * the event occurred. For mouse events, this flag indicates that the
+			 * middle mouse button was pressed or released.
+			 */
+			ALT_MASK			= 1 << 3,
+			BUTTON0_MASK		= 1 << 4,
+			BUTTON1_MASK		= 1 << 5,
+			BUTTON2_MASK		= 1 << 6,
+			BUTTON3_MASK		= 1 << 7,
+			BUTTON_ANY_MASK		= 0xF << 4
+		};
+
+
+
+		/**
+		 * Constructs an InputEvent object with the specified source GuiElement,
+		 * modifiers, and type.
+		 * @param source the object where the event originated
+		 * @id the event type
+		 * @when the time the event occurred
+		 * @modifiers the modifier keys down while event occurred
+		 */
+		InputEvent(EventTarget* source, int id, long when, int modifiers);
+
+		/**
+		 * Consumes this event so that it will not be processed
+		 * in the default manner by the source which originated it.
+		 */
+		void consume();
+
+		/**
+		 * Returns the modifiers flag for this event.
+		 */
+		int getModifiers() const;
+		
+		/**
+		 * Returns the timestamp of when this event occurred. Not implemented yet
+		 */
+		Real getWhen() const;
+
+		/**
+		 * Returns whether or not the Alt modifier is down on this event.
+		 */
+		bool isAltDown() const;
+
+		/**
+		 * Returns whether or not this event has been consumed.
+		 * @see #consume
+		 */
+		bool isConsumed() const;
+
+		/**
+		 * Returns whether or not the Control modifier is down on this event.
+		 */
+		bool isControlDown() const;
+
+		/**
+		 * Returns whether or not the Meta modifier is down on this event.
+		 */
+		bool isMetaDown() const;
+
+		/**
+		 * Returns whether or not the Shift modifier is down on this event.
+		 */
+		bool isShiftDown() const;
+
+		bool isEventBetween(int start, int end) const;
+		int getID() const;
+
+		EventTarget* getSource() const;
+    };
+}
+
+
+#endif  // __InputEvent_H__
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreBillboardSet.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreBillboardSet.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreBillboardSet.h	(revision 1092)
@@ -0,0 +1,587 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __BillboardSet_H__
+#define __BillboardSet_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreMovableObject.h"
+#include "OgreRenderable.h"
+
+namespace Ogre {
+
+    /** Enum covering what exactly a billboard's position means (center,
+        top-left etc).
+        @see
+            BillboardSet::setBillboardOrigin
+    */
+    enum BillboardOrigin
+    {
+        BBO_TOP_LEFT,
+        BBO_TOP_CENTER,
+        BBO_TOP_RIGHT,
+        BBO_CENTER_LEFT,
+        BBO_CENTER,
+        BBO_CENTER_RIGHT,
+        BBO_BOTTOM_LEFT,
+        BBO_BOTTOM_CENTER,
+        BBO_BOTTOM_RIGHT
+    };
+    /** The type of billboard to use. */
+    enum BillboardType
+    {
+        /// Standard point billboard (default), always faces the camera completely and is always upright
+        BBT_POINT,
+        /// Billboards are oriented around a shared direction vector (used as Y axis) and only rotate around this to face the camera
+        BBT_ORIENTED_COMMON,
+        /// Billboards are oriented around their own direction vector (their own Y axis) and only rotate around this to face the camera
+        BBT_ORIENTED_SELF
+
+    };
+
+    /** A collection of billboards (faces which are always facing the camera) with the same (default) dimensions, material
+        and which are fairly close proximity to each other.
+        @remarks
+            Billboards are rectangles made up of 2 tris which are always facing the camera. They are typically used
+            for special effects like particles. This class collects together a set of billboards with the same (default) dimensions,
+            material and relative locality in order to process them more efficiently. The entire set of billboards will be
+            culled as a whole (by default, although this can be changed if you want a large set of billboards
+            which are spread out and you want them culled individually), individual Billboards have locations which are relative to the set (which itself derives it's
+            position from the SceneNode it is attached to since it is a MoveableObject), they will be rendered as a single rendering operation,
+            and some calculations will be sped up by the fact that they use the same dimensions so some workings can be reused.
+        @par
+            A BillboardSet can be created using the SceneManager::createBillboardSet method. They can also be used internally
+            by other classes to create effects.
+		@note
+			Billboard bounds are only automatically calculated when you create them.
+			If you modify the position of a billboard you may need to call 
+			_updateBounds if the billboard moves outside the original bounds. 
+			Similarly, the bounds do no shrink when you remove a billboard, 
+			if you want them to call _updateBounds, but note this requires a
+			potentially expensive examination of every billboard in the set.
+    */
+    class _OgreExport BillboardSet : public MovableObject, public Renderable
+    {
+    protected:
+        /** Private constructor (instances cannot be created directly).
+        */
+        BillboardSet();
+
+        /// Name of the entity; used for location in the scene.
+        String mName;
+
+        /// Bounds of all billboards in this set
+        AxisAlignedBox mAABB;
+		/// Bounding radius
+		Real mBoundingRadius;
+
+        /// Origin of each billboard
+        BillboardOrigin mOriginType;
+
+        /// Default width of each billboard
+        Real mDefaultWidth;
+        /// Default height of each billboard
+        Real mDefaultHeight;
+
+        /// Name of the material to use
+        String mMaterialName;
+        /// Pointer to the material to use
+        MaterialPtr mpMaterial;
+
+        /// True if no billboards in this set have been resized - greater efficiency.
+        bool mAllDefaultSize;
+
+        /// Flag indicating whether to autoextend pool
+        bool mAutoExtendPool;
+
+        bool mFixedTextureCoords;
+        bool mWorldSpace;
+
+        typedef std::list<Billboard*> ActiveBillboardList;
+        typedef std::deque<Billboard*> FreeBillboardQueue;
+        typedef std::vector<Billboard*> BillboardPool;
+
+        /** Active billboard list.
+            @remarks
+                This is a linked list of pointers to billboards in the billboard pool.
+            @par
+                This allows very fast instertions and deletions from anywhere in the list to activate / deactivate billboards
+                (required for particle systems etc)    as well as resuse of Billboard instances in the pool
+                without construction & destruction which avoids memory thrashing.
+        */
+        ActiveBillboardList mActiveBillboards;
+
+        /** Free billboard queue.
+            @remarks
+                This contains a list of the billboards free for use as new instances
+                as required by the set. Billboard instances are preconstructed up to the estimated size in the
+                mBillboardPool vector and are referenced on this deque at startup. As they get used this deque
+                reduces, as they get released back to to the set they get added back to the deque.
+        */
+        FreeBillboardQueue mFreeBillboards;
+
+        /** Pool of billboard instances for use and reuse in the active billboard list.
+            @remarks
+                This vector will be preallocated with the estimated size of the set,and will extend as required.
+        */
+        BillboardPool mBillboardPool;
+
+
+        /// The vertex position data for all billboards in this set.
+        VertexData* mVertexData;
+        /// Shortcut to main buffer (positions, colours, texture coords)
+        HardwareVertexBufferSharedPtr mMainBuf;
+        /// Locked pointer to buffer
+        float* mLockPtr;
+        /// Boundary offsets based on origin and camera orientation
+        /// Vector3 vLeftOff, vRightOff, vTopOff, vBottomOff;
+        /// Final vertex offsets, used where sizes all default to save calcs
+        Vector3 mVOffset[4];
+        /// Current camera
+        Camera* mCurrentCamera;
+        // Parametric offsets of origin
+        Real mLeftOff, mRightOff, mTopOff, mBottomOff;
+        // Camera axes in billboard space
+        Vector3 mCamX, mCamY;
+
+        /// The vertex index data for all billboards in this set (1 set only)
+        //unsigned short* mpIndexes;
+        IndexData* mIndexData;
+
+        /// Flag indicating whether each billboard should be culled separately (default: false)
+        bool mCullIndividual;
+
+        /// The type of billboard to render
+        BillboardType mBillboardType;
+
+        /// Common direction for billboards of type BBT_ORIENTED_COMMON
+        Vector3 mCommonDirection;
+
+        /// Internal method for culling individual billboards
+        inline bool billboardVisible(Camera* cam, const Billboard& bill);
+
+        // Number of visible billboards (will be == getNumBillboards if mCullIndividual == false)
+        unsigned short mNumVisibleBillboards;
+
+        /// Internal method for increasing pool size
+        virtual void increasePool(unsigned int size);
+
+
+        //-----------------------------------------------------------------------
+        // The internal methods which follow are here to allow maximum flexibility as to 
+        //  when various components of the calculation are done. Depending on whether the
+        //  billboards are of fixed size and whether they are point or oriented type will
+        //  determine how much calculation has to be done per-billboard. NOT a one-size fits all approach.
+        //-----------------------------------------------------------------------
+        /** Internal method for generating billboard corners. 
+        @remarks
+            Optional parameter pBill is only present for type BBT_ORIENTED_SELF
+        */
+        virtual void genBillboardAxes(Camera* cam, Vector3* pX, Vector3 *pY, const Billboard* pBill = 0);
+
+        /** Internal method, generates parametric offsets based on origin.
+        */
+        void getParametricOffsets(Real& left, Real& right, Real& top, Real& bottom);
+
+        /** Internal method for generating vertex data. 
+        @param offsets Array of 4 Vector3 offsets
+        @param bb Referenceto billboard
+        */
+        void genVertices(const Vector3* const offsets, const Billboard& pBillboard);
+
+        /** Internal method generates vertex offsets.
+        @remarks
+            Takes in parametric offsets as generated from getParametericOffsets, width and height values
+            and billboard x and y axes as generated from genBillboardAxes. 
+            Fills output array of 4 vectors with vector offsets
+            from origin for left-top, right-top, left-bottom, right-bottom corners.
+        */
+        void genVertOffsets(Real inleft, Real inright, Real intop, Real inbottom,
+            Real width, Real height,
+            const Vector3& x, const Vector3& y, Vector3* pDestVec);
+
+        /// Shared class-level name for Movable type
+        static String msMovableType;
+
+    private:
+        /// Flag indicating whether the HW buffers have been created.
+        bool mBuffersCreated;
+        /// The number of billboard in the pool.
+        unsigned int mPoolSize;
+        /// Is external billboard data in use?
+        bool mExternalData;
+
+        /** Internal method creates vertex and index buffers.
+        */
+        void _createBuffers(void);
+
+    public:
+
+        /** Usual constructor - this is called by the SceneManager.
+            @param
+                name The name to give the billboard set (must be unique)
+            @param
+                poolSize The initial size of the billboard pool. Estimate of the number of billboards
+                which will be required, and pass it using this parameter. The set will
+                preallocate this number to avoid memory fragmentation. The default behaviour
+                once this pool has run out is to double it.
+            @param
+                externalDataSource If true, the source of data for drawing the 
+                billboards will not be the internal billboard list, but external 
+                data. When driving thebillboard from external data, you must call
+                _notifyCurrentCamera to reorient the billboards, setPoolSize to set
+                the maximum billboards you want to use, beginBillboards to 
+                start the update, and injectBillboard per billboard, 
+                followed by endBillboards.
+            @see
+                BillboardSet::setAutoextend
+        */
+        BillboardSet( const String& name, unsigned int poolSize = 20, 
+            bool externalDataSource = false);
+
+        virtual ~BillboardSet();
+
+        /** Creates a new billboard and adds it to this set.
+            @remarks
+                Behaviour once the billboard pool has been exhausted depends on the
+                BillboardSet::setAutoextendPool option.
+            @param
+                position The position of the new billboard realtive to the certer of the set
+            @param
+                colour Optional base colour of the billboard.
+            @returns
+                On success, a pointer to a newly created Billboard is
+                returned.
+            @par
+                On failiure (i.e. no more space and can't autoextend),
+                <b>NULL</b> is returned.
+            @see
+                BillboardSet::setAutoextend
+        */
+        Billboard* createBillboard(
+            const Vector3& position,
+            const ColourValue& colour = ColourValue::White );
+
+        /** Creates a new billboard and adds it to this set.
+            @remarks
+                Behaviour once the billboard pool has been exhausted depends on the
+                BillboardSet::setAutoextendPool option.
+            @param
+                x
+            @param
+                y
+            @param
+                z The position of the new billboard realtive to the certer of the set
+            @param
+                colour Optional base colour of the billboard.
+            @returns
+                On success, a pointer to a newly created Billboard is
+                returned.
+            @par
+                On failiure (i.e. no more space and can't autoextend),
+                <b>NULL</b> is returned.
+            @see
+                BillboardSet::setAutoextend
+        */
+        Billboard* createBillboard(
+            Real x, Real y, Real z,
+            const ColourValue& colour = ColourValue::White );
+
+        /** Returns the number of active billboards which currently make up this set.
+        */
+        virtual int getNumBillboards(void) const;
+
+        /** Tells the set whether to allow automatic extension of the pool of billboards.
+            @remarks
+                A BillboardSet stores a pool of pre-constructed billboards which are used as needed when
+                a new billboard is requested. This allows applications to create / remove billboards efficiently
+                without incurring construction / destruction costs (a must for sets with lots of billboards like
+                particle effects). This method allows you to configure the behaviour when a new billboard is requested
+                but the billboard pool has been exhausted.
+            @par
+                The default behaviour is to allow the pool to extend (typically this allocates double the current
+                pool of billboards when the pool is expended), equivalent to calling this method with
+                autoExtend = true. If you set the parameter to false however, any attempt to create a new billboard
+                when the pool has expired will simply fail silently, returning a null pointer.
+            @param autoextend true to double the pool every time it runs out, false to fail silently.
+        */
+        virtual void setAutoextend(bool autoextend);
+
+        /** Returns true if the billboard pool automatically extends.
+            @see
+                BillboardSet::setAutoextend
+        */
+        virtual bool getAutoextend(void) const;
+
+        /** Adjusts the size of the pool of billboards available in this set.
+            @remarks
+                See the BillboardSet::setAutoextend method for full details of the billboard pool. This method adjusts
+                the preallocated size of the pool. If you try to reduce the size of the pool, the set has the option
+                of ignoring you if too many billboards are already in use. Bear in mind that calling this method will
+                incur significant construction / destruction calls so should be avoided in time-critical code. The same
+                goes for auto-extension, try to avoid it by estimating the pool size correctly up-front.
+            @param
+                size The new size for the pool.
+        */
+        virtual void setPoolSize(unsigned int size);
+
+        /** Returns the current size of the billboard pool.
+            @returns
+                The current size of the billboard pool.
+            @see
+                BillboardSet::setAutoextend
+        */
+        virtual unsigned int getPoolSize(void) const;
+
+
+        /** Empties this set of all billboards.
+        */
+        virtual void clear();
+
+        /** Returns a pointer to the billboard at the supplied index.
+            @note
+                This method requires linear time since the billboard list is a linked list.
+            @param
+                index The index of the billboard that is requested.
+            @returns
+                On success, a valid pointer to the requested billboard is
+                returned.
+            @par
+                On failiure, <b>NULL</b> is returned.
+        */
+        virtual Billboard* getBillboard(unsigned int index) const;
+
+        /** Removes the billboard at the supplied index.
+            @note
+                This method requires linear time since the billboard list is a linked list.
+        */
+        virtual void removeBillboard(unsigned int index);
+
+        /** Removes a billboard from the set.
+            @note
+                This version is more efficient than removing by index.
+        */
+        virtual void removeBillboard(Billboard* pBill);
+
+        /** Sets the point which acts as the origin point for all billboards in this set.
+            @remarks
+                This setting controls the fine tuning of where a billboard appears in relation to it's
+                position. It could be that a billboard's position represents it's center (e.g. for fireballs),
+                it could mean the center of the bottom edge (e.g. a tree which is positioned on the ground),
+                the top-left corner (e.g. a cursor).
+            @par
+                The default setting is BBO_CENTER.
+            @param
+                origin A member of the BillboardOrigin enum specifying the origin for all the billboards in this set.
+        */
+        virtual void setBillboardOrigin(BillboardOrigin origin);
+
+        /** Gets the point which acts as the origin point for all billboards in this set.
+            @returns
+                A member of the BillboardOrigin enum specifying the origin for all the billboards in this set.
+        */
+        virtual BillboardOrigin getBillboardOrigin(void) const;
+
+        /** Sets the default dimensions of the billboards in this set.
+            @remarks
+                All billboards in a set are created with these default dimensions. The set will render most efficiently if
+                all the billboards in the set are the default size. It is possible to alter the size of individual
+                billboards at the expense of extra calculation. See the Billboard class for more info.
+            @param width
+                The new default width for the billboards in this set.
+            @param height
+                The new default height for the billboards in this set.
+        */
+        virtual void setDefaultDimensions(Real width, Real height);
+
+        /** See setDefaultDimensions - this sets 1 component individually. */
+        virtual void setDefaultWidth(Real width);
+        /** See setDefaultDimensions - this gets 1 component individually. */
+        virtual Real getDefaultWidth(void) const;
+        /** See setDefaultDimensions - this sets 1 component individually. */
+        virtual void setDefaultHeight(Real height);
+        /** See setDefaultDimensions - this gets 1 component individually. */
+        virtual Real getDefaultHeight(void) const;
+
+        /** Sets the name of the material to be used for this billboard set.
+            @param
+                name The new name of the material to use for this set.
+        */
+        virtual void setMaterialName(const String& name);
+
+        /** Sets the name of the material to be used for this billboard set.
+            @returns The name of the material that is used for this set.
+        */
+        virtual const String& getMaterialName(void) const;
+
+        /** Overridden from MovableObject
+            @see
+                MovableObject
+        */
+        virtual void _notifyCurrentCamera(Camera* cam);
+
+        /** Begin injection of billboard data; applicable when 
+            constructing the BillboardSet for external data use.
+        */
+        void beginBillboards(void);
+        /** Define a billboard. */
+        void injectBillboard(const Billboard& bb);
+        /** Finish defining billboards. */
+        void endBillboards(void);
+		/** Set the bounds of the BillboardSet.
+		@remarks
+			You may need to call this if you're injecting billboards manually, 
+			and you're relying on the BillboardSet to determine culling.
+		*/
+		void setBounds(const AxisAlignedBox& box, Real radius);
+
+
+        /** Overridden from MovableObject
+            @see
+                MovableObject
+        */
+        virtual const AxisAlignedBox& getBoundingBox(void) const;
+
+        /** Overridden from MovableObject
+            @see
+                MovableObject
+        */
+        virtual Real getBoundingRadius(void) const;
+        /** Overridden from MovableObject
+            @see
+                MovableObject
+        */
+        virtual void _updateRenderQueue(RenderQueue* queue);
+
+        /** Overridden from MovableObject
+            @see
+                MovableObject
+        */
+        virtual const MaterialPtr& getMaterial(void) const;
+
+        /** Overridden from MovableObject
+            @see
+                MovableObject
+        */
+        virtual void getRenderOperation(RenderOperation& op);
+
+        /** Overridden from MovableObject
+            @see
+                MovableObject
+        */
+        virtual void getWorldTransforms(Matrix4* xform) const;
+
+        /** @copydoc Renderable::getWorldOrientation */
+        const Quaternion& getWorldOrientation(void) const;
+        /** @copydoc Renderable::getWorldPosition */
+        const Vector3& getWorldPosition(void) const;
+        /** Internal callback used by Billboards to notify their parent that they have been resized.
+        */
+        virtual void _notifyBillboardResized(void);
+
+        /** Notifies the billboardset that texture coordinates will be modified
+            for this set. */
+        virtual void _notifyBillboardTextureCoordsModified(void) {
+            mFixedTextureCoords = false; }
+
+        /** Returns whether or not billbards in this are tested individually for culling. */
+        virtual bool getCullIndividually(void) const;
+        /** Sets whether culling tests billboards in this individually as well as in a group.
+        @remarks
+            Billboard sets are always culled as a whole group, based on a bounding box which 
+            encloses all billboards in the set. For fairly localised sets, this is enough. However, you
+            can optionally tell the set to also cull individual billboards in the set, i.e. to test
+            each individual billboard before rendering. The default is not to do this.
+        @par
+            This is useful when you have a large, fairly distributed set of billboards, like maybe 
+            trees on a landscape. You probably still want to group them into more than one
+            set (maybe one set per section of landscape), which will be culled coarsely, but you also
+            want to cull the billboards individually because they are spread out. Whilst you could have
+            lots of single-tree sets which are culled separately, this would be inefficient to render
+            because each tree would be issued as it's own rendering operation.
+        @par
+            By calling this method with a parameter of true, you can have large billboard sets which 
+            are spaced out and so get the benefit of batch rendering and coarse culling, but also have
+            fine-grained culling so unnecessary rendering is avoided.
+        @param cullIndividual If true, each billboard is tested before being sent to the pipeline as well 
+            as the whole set having to pass the coarse group bounding test.
+        */
+        virtual void setCullIndividually(bool cullIndividual);
+
+        /** Sets the type of billboard to render.
+        @remarks
+            The default sort of billboard (BBT_POINT), always has both x and y axes parallel to 
+            the camera's local axes. This is fine for 'point' style billboards (e.g. flares,
+            smoke, anything which is symmetrical about a central point) but does not look good for
+            billboards which have an orientation (e.g. an elongated raindrop). In this case, the
+            oriented billboards are more suitable (BBT_ORIENTED_COMMON or BBT_ORIENTED_SELF) since they retain an independant Y axis
+            and only the X axis is generated, perpendicular to both the local Y and the camera Z.
+        @param bbt The type of billboard to render
+        */
+        virtual void setBillboardType(BillboardType bbt);
+
+        /** Returns the billboard type in use. */
+        virtual BillboardType getBillboardType(void) const;
+
+        /** Use this to specify the common direction given to billboards of type BBT_ORIENTED_COMMON.
+        @remarks
+            Use BBT_ORIENTED_COMMON when you want oriented billboards but you know they are always going to 
+            be oriented the same way (e.g. rain in calm weather). It is faster for the system to calculate
+            the billboard vertices if they have a common direction.
+        @param vec The direction for all billboards.
+        */
+        virtual void setCommonDirection(const Vector3& vec);
+
+        /** Gets the common direction for all billboards (BBT_ORIENTED_COMMON) */
+        virtual const Vector3& getCommonDirection(void) const;
+
+        /** Overridden from MovableObject */
+        virtual const String& getName(void) const;
+
+        /** Overridden from MovableObject */
+        virtual const String& getMovableType(void) const;
+
+        /** Overridden, see Renderable */
+        Real getSquaredViewDepth(const Camera* cam) const;
+
+        /** Update the bounds of the billboardset */
+        virtual void _updateBounds(void);
+        /** @copydoc Renderable::getLights */
+        const LightList& getLights(void) const;
+
+        /** Sets whether billboards should be treated as being in world space. 
+        @remarks
+            This is most useful when you are driving the billboard set from 
+            an external data source.
+        */
+        virtual void setBillboardsInWorldSpace(bool ws) { mWorldSpace = ws; }
+
+    };
+
+}
+
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderWindow.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderWindow.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderWindow.h	(revision 1092)
@@ -0,0 +1,190 @@
+/*-------------------------------------------------------------------------
+This source file is a part of OGRE
+(Object-oriented Graphics Rendering Engine)
+
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This library is free software; you can redistribute it and/or modify it
+under the terms of the GNU Lesser General Public License (LGPL) as 
+published by the Free Software Foundation; either version 2.1 of the 
+License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful, but 
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
+or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public 
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License 
+along with this library; if not, write to the Free Software Foundation, 
+Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA or go to
+http://www.gnu.org/copyleft/lesser.txt
+-------------------------------------------------------------------------*/
+#ifndef __RenderWindow_H__
+#define __RenderWindow_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreRenderTarget.h"
+
+namespace Ogre
+{
+    /** Manages the target rendering window.
+        @remarks
+            This class handles a window into which the contents
+            of a scene are rendered. There is a many-to-1 relationship
+            between instances of this class an instance of RenderSystem
+            which controls the rendering of the scene. There may be
+            more than one window in the case of level editor tools etc.
+            This class is abstract since there may be
+            different implementations for different windowing systems.
+        @remarks
+            Instances are created and communicated with by the render system
+            although client programs can get a reference to it from
+            the render system if required for resizing or moving.
+            Note that you can have multiple viewpoints
+            in the window for effects like rear-view mirrors and
+            picture-in-picture views (see Viewport and Camera).
+        @author
+            Steven Streeting
+        @version
+            1.0
+    */
+    class _OgreExport RenderWindow : public RenderTarget
+    {
+
+    public:
+        /** Default constructor.
+        */
+        RenderWindow();
+
+        /** Creates & displays the new window.
+            @param
+                width The width of the window in pixels.
+            @param
+                height The height of the window in pixels.
+            @param
+                colourDepth The colour depth in bits. Ignored if
+                fullScreen is false since the desktop depth is used.
+            @param
+                fullScreen If true, the window fills the screen,
+                with no title bar or border.
+            @param
+                left The x-position of the window. Ignored if
+                fullScreen = true.
+            @param
+                top The y-position of the window. Ignored if
+                fullScreen = true.
+            @param
+                depthBuffer Specify true to include a depth-buffer.
+            @param
+                miscParam A variable number of pointers to platform-specific arguments. The
+                actual requirements must be defined by the implementing subclasses.
+        */
+		virtual void create(const String& name, unsigned int width, unsigned int height,
+	            bool fullScreen, const NameValuePairList *miscParams) = 0;
+        
+        /** Destroys the window.
+        */
+        virtual void destroy(void) = 0;
+
+        /** Alter the size of the window.
+        */
+        virtual void resize(unsigned int width, unsigned int height) = 0;
+
+		/** Notify that the window has been resized externally.
+		@remarks
+			You don't need to call this unless you created the window externally.
+		*/
+		virtual void windowMovedOrResized() {}
+
+        /** Reposition the window.
+        */
+        virtual void reposition(int left, int top) = 0;
+
+        /** Indicates whether the window is visible (not minimized or obscured)
+        */
+        virtual bool isVisible(void) const { return true; }
+
+        /** Overridden from RenderTarget, flags invisible windows as inactive
+        */
+        virtual bool isActive(void) const { return mActive && isVisible(); }
+
+        /** Indicates whether the window has been closed by the user.
+        */
+        virtual bool isClosed(void) const = 0;
+        
+        /** Indicates wether the window is the primary window. The
+        	primary window is special in that it is destroyed when 
+        	ogre is shut down, and cannot be destroyed directly.
+        	This is the case because it holds the context for vertex,
+        	index buffers and textures.
+        */
+        virtual bool isPrimary(void) const;
+
+        /** Swaps the frame buffers to display the next frame.
+            @remarks
+                All render windows are double-buffered so that no
+                'in-progress' versions of the scene are displayed
+                during rendering. Once rendering has completed (to
+                an off-screen version of the window) the buffers
+                are swapped to display the new frame.
+
+            @param
+                waitForVSync If true, the system waits for the
+                next vertical blank period (when the CRT beam turns off
+                as it travels from bottom-right to top-left at the
+                end of the pass) before flipping. If false, flipping
+                occurs no matter what the beam position. Waiting for
+                a vertical blank can be slower (and limits the
+                framerate to the monitor refresh rate) but results
+                in a steadier image with no 'tearing' (a flicker
+                resulting from flipping buffers when the beam is
+                in the progress of drawing the last frame).
+        */
+        virtual void swapBuffers(bool waitForVSync = true) = 0;
+
+        /** Updates the window contents.
+            @remarks
+                The window is updated by telling each camera which is supposed
+                to render into this window to render it's view, and then
+                the window buffers are swapped via swapBuffers()
+        */
+        virtual void update(void);
+
+        /** Returns true if window is running in fullscreen mode.
+        */
+        virtual bool isFullScreen(void) const;
+
+        /** Overloaded version of getMetrics from RenderTarget, including extra details
+            specific to windowing systems.
+        */
+        virtual void getMetrics(unsigned int& width, unsigned int& height, unsigned int& colourDepth, 
+			int& left, int& top);
+
+    protected:
+        bool mIsFullScreen;
+        bool mIsPrimary;
+        int mLeft;
+        int mTop;
+        
+        /** Indicates that this is the primary window. Only to be called by
+            Ogre::Root
+        */
+        void _setPrimary() { mIsPrimary = true; }
+        
+        friend class Root;
+    };
+
+    /** Defines the interface a DLL implemeting a platform-specific version must implement.
+        @remarks
+            Any library (.dll, .so) wishing to implement a platform-specific version of this
+            dialog must export the symbol 'createRenderWindow' with the signature
+            void createPlatformRenderWindow(RenderWindow** ppDlg)
+    */
+    typedef void (*DLL_CREATERENDERWINDOW)(RenderWindow** ppWindow);
+
+} // Namespace
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreGpuProgramManager.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreGpuProgramManager.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreGpuProgramManager.h	(revision 1092)
@@ -0,0 +1,186 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __GpuProgramManager_H_
+#define __GpuProgramManager_H_
+
+// Precompiler options
+#include "OgrePrerequisites.h"
+#include "OgreResourceManager.h"
+#include "OgreException.h"
+#include "OgreGpuProgram.h"
+#include "OgreSingleton.h"
+
+namespace Ogre {
+
+	class _OgreExport GpuProgramManager : public ResourceManager, public Singleton<GpuProgramManager>
+	{
+	public:
+		typedef std::set<String> SyntaxCodes;
+
+	protected:
+		/// Supported program syntax codes
+		SyntaxCodes mSyntaxCodes;
+        /// Specialised create method with specific parameters
+        virtual Resource* createImpl(const String& name, ResourceHandle handle, 
+            const String& group, bool isManual, ManualResourceLoader* loader,
+            GpuProgramType gptype, const String& syntaxCode) = 0;
+	public:
+		GpuProgramManager();
+		virtual ~GpuProgramManager();
+
+        /** Loads a GPU program from a file of assembly. 
+		@remarks
+			This method creates a new program of the type specified as the second parameter.
+			As with all types of ResourceManager, this class will search for the file in
+			all resource locations it has been configured to look in.
+		@param name The name of the GpuProgram
+		@param groupName The name of the resource group
+		@param filename The file to load
+		@param gptype The type of program to create
+        @param syntaxCode The name of the syntax to be used for this program e.g. arbvp1, vs_1_1
+		*/
+		virtual GpuProgramPtr load(const String& name, const String& groupName, 
+			const String& filename, GpuProgramType gptype, 
+            const String& syntaxCode);
+
+		/** Loads a GPU program from a string of assembly code.
+		@remarks
+			The assembly code must be compatible with this manager - call the 
+			getSupportedSyntax method for details of the supported syntaxes 
+		@param name The identifying name to give this program, which can be used to
+			retrieve this program later with getByName.
+		@param groupName The name of the resource group
+		@param code A string of assembly code which will form the program to run
+		@param gptype The type of prgram to create.
+        @param syntaxCode The name of the syntax to be used for this program e.g. arbvp1, vs_1_1
+		*/
+		virtual GpuProgramPtr loadFromString(const String& name, const String& groupName,
+			const String& code, GpuProgramType gptype,
+            const String& syntaxCode);
+
+		/** Returns the syntaxes that this manager supports. */
+		virtual const SyntaxCodes& getSupportedSyntax(void) const { return mSyntaxCodes; };
+
+        /** Returns whether a given syntax code (e.g. "ps_1_3", "fp20", "arbvp1") is supported. */
+        virtual bool isSyntaxSupported(const String& syntaxCode) const;
+		
+		/** Creates a new GpuProgramParameters instance which can be used to bind
+            parameters to your programs.
+        @remarks
+            Program parameters can be shared between multiple programs if you wish.
+        */
+        virtual GpuProgramParametersSharedPtr createParameters(void) = 0;
+        
+        /** Create a new, unloaded GpuProgram from a file of assembly. 
+        @remarks    
+            Use this method in preference to the 'load' methods if you wish to define
+            a GpuProgram, but not load it yet; useful for saving memory.
+		@par
+			This method creates a new program of the type specified as the second parameter.
+			As with all types of ResourceManager, this class will search for the file in
+			all resource locations it has been configured to look in. 
+		@param name The name of the program
+		@param groupName The name of the resource group
+		@param filename The file to load
+        @param syntaxCode The name of the syntax to be used for this program e.g. arbvp1, vs_1_1
+		@param gptype The type of program to create
+		*/
+		virtual GpuProgramPtr createProgram(const String& name, 
+			const String& groupName, const String& filename, 
+			GpuProgramType gptype, const String& syntaxCode);
+
+		/** Create a GPU program from a string of assembly code.
+        @remarks    
+            Use this method in preference to the 'load' methods if you wish to define
+            a GpuProgram, but not load it yet; useful for saving memory.
+		@par
+			The assembly code must be compatible with this manager - call the 
+			getSupportedSyntax method for details of the supported syntaxes 
+		@param name The identifying name to give this program, which can be used to
+			retrieve this program later with getByName.
+		@param groupName The name of the resource group
+		@param code A string of assembly code which will form the program to run
+		@param gptype The type of prgram to create.
+        @param syntaxCode The name of the syntax to be used for this program e.g. arbvp1, vs_1_1
+		*/
+		virtual GpuProgramPtr createProgramFromString(const String& name, 
+			const String& groupName, const String& code, 
+            GpuProgramType gptype, const String& syntaxCode);
+
+        /** General create method, using specific create parameters
+            instead of name / value pairs. 
+        */
+        virtual ResourcePtr create(const String& name, const String& group, 
+            GpuProgramType gptype, const String& syntaxCode, bool isManual = false, 
+            ManualResourceLoader* loader = 0);
+
+        /** Internal method for populating the supported syntax codes, called by RenderSystem. */
+        virtual void _pushSyntaxCode(const String& syntaxCode) { mSyntaxCodes.insert(syntaxCode); }
+        /** Overrides the standard ResourceManager getByName method.
+        @param name The name of the program to retrieve
+        @param preferHighLevelPrograms If set to true (the default), high level programs will be
+            returned in preference to low-level programs.
+        */
+        ResourcePtr getByName(const String& name, bool preferHighLevelPrograms = true);
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static GpuProgramManager& getSingleton(void);
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static GpuProgramManager* getSingletonPtr(void);
+    
+
+
+	};
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/Ogre.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/Ogre.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/Ogre.h	(revision 1092)
@@ -0,0 +1,109 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _Ogre_H__
+#define _Ogre_H__
+// This file includes all the other files which you will need to build a client application
+#include "OgrePrerequisites.h"
+
+#include "OgreAnimation.h"
+#include "OgreAnimationTrack.h"
+#include "OgreArchive.h"
+#include "OgreArchiveManager.h"
+#include "OgreAxisAlignedBox.h"
+#include "OgreBillboardSet.h"
+#include "OgreBone.h"
+#include "OgreCamera.h"
+#include "OgreConfigFile.h"
+#include "OgreControllerManager.h"
+#include "OgreDataStream.h"
+#include "OgreEntity.h"
+#include "OgreEventProcessor.h"
+#include "OgreException.h"
+#include "OgreFrustum.h"
+#include "OgreGpuProgram.h"
+#include "OgreGpuProgramManager.h"
+#include "OgreHardwareBufferManager.h"
+#include "OgreHardwareIndexBuffer.h"
+#include "OgreHardwareOcclusionQuery.h"
+#include "OgreHardwareVertexBuffer.h"
+#include "OgreHardwarePixelBuffer.h"
+#include "OgreHighLevelGpuProgram.h"
+#include "OgreHighLevelGpuProgramManager.h"
+#include "OgreInput.h"
+#include "OgreKeyFrame.h"
+#include "OgreLight.h"
+#include "OgreLogManager.h"
+#include "OgreMaterial.h"
+#include "OgreMaterialManager.h"
+#include "OgreMaterialSerializer.h"
+#include "OgreMath.h"
+#include "OgreMatrix3.h"
+#include "OgreMatrix4.h"
+#include "OgreMesh.h"
+#include "OgreMeshManager.h"
+#include "OgreMeshSerializer.h"
+#include "OgreOverlay.h"
+#include "OgreOverlayContainer.h"
+#include "OgreOverlayElement.h"
+#include "OgreOverlayManager.h"
+#include "OgreParticleAffector.h"
+#include "OgreParticleEmitter.h"
+#include "OgreParticleSystemManager.h"
+#include "OgrePass.h"
+#include "OgrePatchMesh.h"
+#include "OgrePatchSurface.h"
+#include "OgrePlatformManager.h"
+#include "OgreProfiler.h"
+#include "OgreRenderQueueListener.h"
+#include "OgreRenderSystem.h"
+#include "OgreRenderTargetListener.h"
+#include "OgreRenderTexture.h"
+#include "OgreRenderWindow.h"
+#include "OgreResourceGroupManager.h"
+#include "OgreRoot.h"
+#include "OgreSceneManager.h"
+#include "OgreSceneManagerEnumerator.h"
+#include "OgreSceneNode.h"
+#include "OgreSimpleRenderable.h"
+#include "OgreSkeleton.h"
+#include "OgreSkeletonInstance.h"
+#include "OgreSkeletonManager.h"
+#include "OgreSkeletonSerializer.h"
+#include "OgreStaticGeometry.h"
+#include "OgreString.h"
+#include "OgreStringConverter.h"
+#include "OgreStringVector.h"
+#include "OgreSubEntity.h"
+#include "OgreSubMesh.h"
+#include "OgreTechnique.h"
+#include "OgreTextureManager.h"
+#include "OgreTextureManager.h"
+#include "OgreTextureUnitState.h"
+#include "OgreUserDefinedObject.h"
+#include "OgreVector2.h"
+#include "OgreViewport.h"
+// .... more to come
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreExternalTextureSourceManager.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreExternalTextureSourceManager.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreExternalTextureSourceManager.h	(revision 1092)
@@ -0,0 +1,113 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _OgreExternalTextureSourceManager_H
+#define _OgreExternalTextureSourceManager_H
+
+/***************************************************************************
+OgreExternalTextureSourceManager.h  -  
+	Handles the registering / unregistering of texture modifier plugins
+
+-------------------
+date                 : Jan 1 2004
+email                : pjcast@yahoo.com
+***************************************************************************/
+#include "OgreSingleton.h"
+#include "OgreString.h"
+#include "OgreResourceGroupManager.h"
+#include "OgreExternalTextureSource.h"
+
+namespace Ogre
+{
+	/** 
+	Singleton Class which handles the registering and control of texture plugins. The plugins
+	will be mostly controlled via a string interface. */
+	class _OgreExport ExternalTextureSourceManager : public Singleton<ExternalTextureSourceManager>
+	{
+	public:
+		/** Constructor */
+		ExternalTextureSourceManager();
+		/** Destructor */
+		~ExternalTextureSourceManager();
+
+		/** Sets active plugin (ie. "video", "effect", "generic", etc..) */
+		void setCurrentPlugIn( const String& sTexturePlugInType );
+
+		/** Returns currently selected plugin, may be null if none selected */
+		ExternalTextureSource* getCurrentPlugIn() { return mpCurrExternalTextureSource; }
+	
+		/** Calls the destroy method of all registered plugins... 
+		Only the owner plugin should perform the destroy action. */
+		void destroyAdvancedTexture( const String& sTextureName,
+			const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
+
+		/** Returns the plugin which reistered itself with a specific name 
+		(eg. "video"), or null if specified plugin not found */
+		ExternalTextureSource* getExternalTextureSource( const String& sTexturePlugInType );
+
+		/** Called from plugin to register itself */
+		void setExternalTextureSource( const String& sTexturePlugInType, ExternalTextureSource* pTextureSystem );
+
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static ExternalTextureSourceManager& getSingleton(void);
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static ExternalTextureSourceManager* getSingletonPtr(void);
+	protected:
+		//The current texture controller selected
+		ExternalTextureSource* mpCurrExternalTextureSource;
+		
+        // Collection of loaded texture System PlugIns, keyed by registered type
+        typedef std::map< String, ExternalTextureSource*> TextureSystemList;
+        TextureSystemList mTextureSystems;
+    };
+} 
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreViewport.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreViewport.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreViewport.h	(revision 1092)
@@ -0,0 +1,231 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __Viewport_H__
+#define __Viewport_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreColourValue.h"
+
+namespace Ogre {
+    /** An abstraction of a viewport, i.e. a rendering region on a render
+        target.
+        @remarks
+            A viewport is the meeting of a camera and a rendering surface -
+            the camera renders the scene from a viewpoint, and places its
+            results into some subset of a rendering target, which may be the
+            whole surface or just a part of the surface. Each viewport has a
+            single camera as source and a single target as destination. A
+            camera only has 1 viewport, but a render target may have several.
+            A viewport also has a Z-order, i.e. if there is more than one
+            viewport on a single render target and they overlap, one must
+            obscure the other in some predetermined way.
+    */
+    class _OgreExport Viewport
+    {
+    public:
+        /** The usual constructor.
+            @param
+                cam Pointer to a camera to be the source for the image.
+            @param
+                target Pointer to the render target to be the destination
+                for the rendering.
+            @param
+                left
+            @param
+                top
+            @param
+                width
+            @param
+                height
+                Dimensions of the viewport, expressed as a value between
+                0 and 1. This allows the dimensions to apply irrespective of
+                changes in the target's size: e.g. to fill the whole area,
+                values of 0,0,1,1 are appropriate.
+            @param
+                ZOrder Relative Z-order on the target. Lower = further to
+                the front.
+        */
+        Viewport(
+            Camera* camera,
+            RenderTarget* target,
+            Real left, Real top,
+            Real width, Real height,
+            int ZOrder);
+
+        /** Default destructor.
+        */
+        ~Viewport();
+
+        /** Notifies the viewport of a possible change in dimensions.
+            @remarks
+                Used by the target to update the viewport's dimensions
+                (usually the result of a change in target size).
+            @note
+                Internal use by Ogre only.
+        */
+        void _updateDimensions(void);
+
+        /** Instructs the viewport to updates its contents.
+        */
+        void update(void);
+
+        /** Retrieves a pointer to the render target for this viewport.
+        */
+        RenderTarget* getTarget(void) const;
+
+        /** Retrieves a pointer to the camera for this viewport.
+        */
+        Camera* getCamera(void) const;
+
+        /** Sets the camera to use for rendering to this viewport. */
+        void setCamera(Camera* cam);
+
+        /** Gets the Z-Order of this viewport. */
+		int getZOrder(void) const;
+		/** Gets one of the relative dimensions of the viewport,
+            a value between 0.0 and 1.0.
+        */
+        Real getLeft(void) const;
+
+        /** Gets one of the relative dimensions of the viewport, a value
+            between 0.0 and 1.0.
+        */
+        Real getTop(void) const;
+
+        /** Gets one of the relative dimensions of the viewport, a value
+            between 0.0 and 1.0.
+        */
+
+        Real getWidth(void) const;
+        /** Gets one of the relative dimensions of the viewport, a value
+            between 0.0 and 1.0.
+        */
+
+        Real getHeight(void) const;
+        /** Gets one of the actual dimensions of the viewport, a value in
+            pixels.
+        */
+
+        int getActualLeft(void) const;
+        /** Gets one of the actual dimensions of the viewport, a value in
+            pixels.
+        */
+
+        int getActualTop(void) const;
+        /** Gets one of the actual dimensions of the viewport, a value in
+            pixels.
+        */
+        int getActualWidth(void) const;
+        /** Gets one of the actual dimensions of the viewport, a value in
+            pixels.
+        */
+
+        int getActualHeight(void) const;
+
+        /** Sets the dimensions (after creation).
+            @param
+                left
+            @param
+                top
+            @param
+                width
+            @param
+                height Dimensions relative to the size of the target,
+                represented as real values between 0 and 1. i.e. the full
+                target area is 0, 0, 1, 1.
+        */
+        void setDimensions(Real left, Real top, Real width, Real height);
+
+        /** Sets the initial background colour of the viewport (before
+            rendering).
+        */
+        void setBackgroundColour(const ColourValue& colour);
+
+        /** Gets the background colour.
+        */
+        const ColourValue& getBackgroundColour(void) const;
+
+        /** Determines whether to clear the viewport before rendering.
+            @remarks
+                If you expecting every pixel on the viewport to be redrawn
+                every frame, you can save a little time by not clearing the
+                viewport before every frame. Do so by passing 'false' to this
+                method (the default is to clear every frame).
+         */
+        void setClearEveryFrame(bool clear);
+
+        /** Determines if the viewport is cleared before every frame.
+        */
+        bool getClearEveryFrame(void) const;
+
+        /** Access to actual dimensions (based on target size).
+        */
+        void getActualDimensions(
+            int &left, int &top, int &width, int &height ) const;
+
+        bool _isUpdated(void) const;
+        void _clearUpdatedFlag(void);
+
+        /** Gets the number of rendered faces in the last update.
+        */
+        unsigned int _getNumRenderedFaces(void) const;
+
+        /** Tells this viewport whether it should display Overlay objects.
+        @remarks
+            Overlay objects are layers which appear on top of the scene. They are created via
+            SceneManager::createOverlay and every viewport displays these by default.
+            However, you probably don't want this if you're using multiple viewports,
+            because one of them is probably a picture-in-picture which is not supposed to
+            have overlays of it's own. In this case you can turn off overlays on this viewport
+            by calling this method.
+        @param enabled If true, any overlays are displayed, if false they are not.
+        */
+        void setOverlaysEnabled(bool enabled);
+
+        /** Returns whether or not Overlay objects (created in the SceneManager) are displayed in this
+            viewport. */
+        bool getOverlaysEnabled(void) const;
+
+
+    protected:
+        Camera* mCamera;
+        RenderTarget* mTarget;
+        // Relative dimensions, irrespective of target dimensions (0..1)
+        float mRelLeft, mRelTop, mRelWidth, mRelHeight;
+        // Actual dimensions, based on target dimensions
+        int mActLeft, mActTop, mActWidth, mActHeight;
+        /// ZOrder
+        int mZOrder;
+        /// Background options
+        ColourValue mBackColour;
+        bool mClearEveryFrame;
+        bool mUpdated;
+        bool mShowOverlays;
+    };
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreHardwareBufferManager.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreHardwareBufferManager.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreHardwareBufferManager.h	(revision 1092)
@@ -0,0 +1,326 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __HardwareBufferManager__
+#define __HardwareBufferManager__
+
+// Precompiler options
+#include "OgrePrerequisites.h"
+
+#include "OgreSingleton.h"
+#include "OgreHardwareVertexBuffer.h"
+#include "OgreHardwareIndexBuffer.h"
+
+
+namespace Ogre {
+
+    /** Abtract interface representing a 'licensee' of a hardware buffer copy.
+    remarks
+        Often it's useful to have temporary buffers which are used for working
+        but are not necessarily needed permanently. However, creating and 
+        destroying buffers is expensive, so we need a way to share these 
+        working areas, especially those based on existing fixed buffers. 
+        This class represents a licensee of one of those temporary buffers, 
+        and must be implemented by any user of a temporary buffer if they 
+        wish to be notified when the license is expired. 
+    */
+    class _OgreExport HardwareBufferLicensee
+    {
+    public:
+        virtual ~HardwareBufferLicensee() { }
+        /** This method is called when the buffer license is expired and is about
+        to be returned to the shared pool. */
+        virtual void licenseExpired(HardwareBuffer* buffer) = 0;
+    };
+
+    /** Structure for recording the use of temporary blend buffers */
+    class _OgreExport TempBlendedBufferInfo : public HardwareBufferLicensee
+    {
+    public:
+        // Pre-blended 
+        HardwareVertexBufferSharedPtr srcPositionBuffer;
+        HardwareVertexBufferSharedPtr srcNormalBuffer;
+        // Post-blended 
+        HardwareVertexBufferSharedPtr destPositionBuffer;
+        HardwareVertexBufferSharedPtr destNormalBuffer;
+        /// Both positions and normals are contained in the same buffer
+        bool posNormalShareBuffer;
+        unsigned short posBindIndex;
+        unsigned short normBindIndex;
+        bool bindPositions;
+        bool bindNormals;
+
+        ~TempBlendedBufferInfo(void);
+        /// Utility method, checks out temporary copies of src into dest
+        void checkoutTempCopies(bool positions = true, bool normals = true);
+        /// Utility method, binds dest copies into a given VertexData struct
+        void bindTempCopies(VertexData* targetData, bool suppressHardwareUpload);
+        /** Overridden member from HardwareBufferLicensee. */
+        void licenseExpired(HardwareBuffer* buffer);
+    };
+
+
+    /** Abstract singleton class for managing hardware buffers, a concrete instance
+    of this will be created by the RenderSystem. */
+    class _OgreExport HardwareBufferManager : public Singleton<HardwareBufferManager>
+    {
+        friend class HardwareVertexBufferSharedPtr;
+        friend class HardwareIndexBufferSharedPtr;
+    protected:
+        typedef std::list<VertexDeclaration*> VertexDeclarationList;
+		typedef std::list<VertexBufferBinding*> VertexBufferBindingList;
+
+        VertexDeclarationList mVertexDeclarations;
+		VertexBufferBindingList mVertexBufferBindings;
+
+
+        virtual void destroyAllDeclarations(void);
+        virtual void destroyAllBindings(void);
+
+    public:
+
+        enum BufferLicenseType
+        {
+            /// Licensee will only release buffer when it says so
+            BLT_MANUAL_RELEASE,
+            /// Licensee can have license revoked
+            BLT_AUTOMATIC_RELEASE
+        };
+
+    protected:
+        /** Struct holding details of a license to use a temporary shared buffer. */
+        class _OgrePrivate VertexBufferLicense
+        {
+        public:
+            HardwareVertexBuffer* originalBufferPtr;
+            BufferLicenseType licenseType;
+            HardwareVertexBufferSharedPtr buffer;
+            HardwareBufferLicensee* licensee;
+            VertexBufferLicense(
+                HardwareVertexBuffer* orig,
+                BufferLicenseType ltype, 
+                HardwareVertexBufferSharedPtr buf, 
+                HardwareBufferLicensee* lic) 
+                : originalBufferPtr(orig), licenseType(ltype), buffer(buf), licensee(lic) {}
+
+        };
+
+        /// List of free temporary vertex buffers
+        typedef std::vector<HardwareVertexBufferSharedPtr> FreeTemporaryVertexBufferList;
+        /// Map from original buffer to list of temporary buffers
+        typedef std::map<HardwareVertexBuffer*, FreeTemporaryVertexBufferList*> FreeTemporaryVertexBufferMap;
+        /// Map of current available temp buffers 
+        FreeTemporaryVertexBufferMap mFreeTempVertexBufferMap;
+        /// List of currently licensed temp buffers
+        typedef std::vector<VertexBufferLicense> TemporaryVertexBufferLicenseList;
+        /// List of currently licensed temp buffers
+        TemporaryVertexBufferLicenseList mTempVertexBufferLicenses;
+
+		typedef std::set<HardwareVertexBuffer*> VertexBufferList;
+		typedef std::set<HardwareIndexBuffer*> IndexBufferList;
+		VertexBufferList mVertexBuffers;
+		IndexBufferList mIndexBuffers;
+
+
+        /// Creates  a new buffer as a copy of the source, does not copy data
+        HardwareVertexBufferSharedPtr makeBufferCopy(
+            const HardwareVertexBufferSharedPtr& source, 
+            HardwareBuffer::Usage usage, bool useShadowBuffer);
+
+    public:
+        HardwareBufferManager();
+        virtual ~HardwareBufferManager();
+		/** Create a hardware vertex buffer.
+        @remarks
+            This method creates a new vertex buffer; this will act as a source of geometry
+            data for rendering objects. Note that because the meaning of the contents of
+            the vertex buffer depends on the usage, this method does not specify a
+            vertex format; the user of this buffer can actually insert whatever data 
+            they wish, in any format. However, in order to use this with a RenderOperation,
+            the data in this vertex buffer will have to be associated with a semantic element
+            of the rendering pipeline, e.g. a position, or texture coordinates. This is done 
+            using the VertexDeclaration class, which itself contains VertexElement structures
+            referring to the source data.
+        @remarks Note that because vertex buffers can be shared, they are reference
+            counted so you do not need to worry about destroying themm this will be done
+            automatically.
+        @param vertexSize The size in bytes of each vertex in this buffer; you must calculate
+            this based on the kind of data you expect to populate this buffer with.
+        @param numVerts The number of vertices in this buffer.
+        @param usage One or more members of the HardwareBuffer::Usage enumeration; you are
+            strongly advised to use HBU_STATIC_WRITE_ONLY wherever possible, if you need to 
+            update regularly, consider HBU_DYNAMIC_WRITE_ONLY and useShadowBuffer=true.
+		@param useShadowBuffer If set to true, this buffer will be 'shadowed' by one stored in 
+            system memory rather than GPU or AGP memory. You should set this flag if you intend 
+            to read data back from the vertex buffer, because reading data from a buffer
+			in the GPU or AGP memory is very expensive, and is in fact impossible if you
+            specify HBU_WRITE_ONLY for the main buffer. If you use this option, all 
+            reads and writes will be done to the shadow buffer, and the shadow buffer will
+            be synchronised with the real buffer at an appropriate time.
+        */
+		virtual HardwareVertexBufferSharedPtr 
+            createVertexBuffer(size_t vertexSize, size_t numVerts, HardwareBuffer::Usage usage, 
+			bool useShadowBuffer = false) = 0;
+		/** Create a hardware index buffer.
+        @remarks Note that because buffers can be shared, they are reference
+            counted so you do not need to worry about destroying themm this will be done
+            automatically.
+		@param itype The type in index, either 16- or 32-bit, depending on how many vertices
+			you need to be able to address
+		@param numIndexes The number of indexes in the buffer
+        @param usage One or more members of the HardwareBuffer::Usage enumeration.
+		@param useShadowBuffer If set to true, this buffer will be 'shadowed' by one stored in 
+            system memory rather than GPU or AGP memory. You should set this flag if you intend 
+            to read data back from the index buffer, because reading data from a buffer
+			in the GPU or AGP memory is very expensive, and is in fact impossible if you
+            specify HBU_WRITE_ONLY for the main buffer. If you use this option, all 
+            reads and writes will be done to the shadow buffer, and the shadow buffer will
+            be synchronised with the real buffer at an appropriate time.
+        */
+		virtual HardwareIndexBufferSharedPtr 
+            createIndexBuffer(HardwareIndexBuffer::IndexType itype, size_t numIndexes, 
+			HardwareBuffer::Usage usage, bool useShadowBuffer = false) = 0;
+        /// Creates a vertex declaration, may be overridden by certain rendering APIs
+        virtual VertexDeclaration* createVertexDeclaration(void);
+        /// Destroys a vertex declaration, may be overridden by certain rendering APIs
+        virtual void destroyVertexDeclaration(VertexDeclaration* decl);
+
+		/** Creates a new VertexBufferBinding. */
+		virtual VertexBufferBinding* createVertexBufferBinding(void);
+		/** Destroys a VertexBufferBinding. */
+		virtual void destroyVertexBufferBinding(VertexBufferBinding* binding);
+
+		/** Registers a vertex buffer as a copy of another.
+		@remarks
+			This is useful for registering an existing buffer as a temporary buffer
+			which can be allocated just like a copy.
+		*/
+		virtual void registerVertexBufferSourceAndCopy(
+			const HardwareVertexBufferSharedPtr& sourceBuffer,
+			const HardwareVertexBufferSharedPtr& copy);
+
+        /** Allocates a copy of a given vertex buffer.
+        @remarks
+            This method allocates a temporary copy of an existing vertex buffer.
+            This buffer is subsequently stored and can be made available for 
+            other purposes later without incurring the cost of construction / 
+            destruction.
+        @param sourceBuffer The source buffer to use as a copy
+        @param licenseType The type of license required on this buffer - automatic
+            release causes this class to release licenses every frame so that 
+            they can be reallocated anew.
+        @param licensee Pointer back to the class requesting the copy, which must
+            implement HardwareBufferLicense in order to be notified when the license
+            expires.
+        @param copyData If true, the current data is copied as well as the 
+            structure of the buffer
+        */
+        virtual HardwareVertexBufferSharedPtr allocateVertexBufferCopy(
+            const HardwareVertexBufferSharedPtr& sourceBuffer, 
+            BufferLicenseType licenseType,
+            HardwareBufferLicensee* licensee,
+            bool copyData = false);
+        /** Manually release a vertex buffer copy for others to subsequently use.
+        @remarks
+            Only required if the original call to allocateVertexBufferCopy
+            included a licenseType of BLT_MANUAL_RELEASE. 
+        @param bufferCopy The buffer copy. The caller is expected to delete
+            or at least no longer use this reference, since another user may
+            well begin to modify the contents of the buffer.
+        */
+        virtual void releaseVertexBufferCopy(
+            const HardwareVertexBufferSharedPtr& bufferCopy); 
+
+        /** Internal method for releasing all temporary buffers which have been 
+           allocated using BLT_AUTOMATIC_RELEASE; is called by OGRE. */
+        virtual void _releaseBufferCopies(void);
+
+        /** Internal method that forces the release of copies of a given buffer.
+        @remarks
+            This usually means that the buffer which the copies are based on has
+            been changed in some fundamental way, and the owner of the original 
+            wishes to make that known so that new copies will reflect the
+            changes.
+        @param sourceBuffer the source buffer as a shared pointer.  Any buffer copies created from the source buffer
+            are deleted.
+        */
+        virtual void _forceReleaseBufferCopies(
+            const HardwareVertexBufferSharedPtr& sourceBuffer)
+        { _forceReleaseBufferCopies(sourceBuffer.get()); }
+
+        /** Internal method that forces the release of copies of a given buffer.
+        @remarks
+            This usually means that the buffer which the copies are based on has
+            been changed in some fundamental way, and the owner of the original 
+            wishes to make that known so that new copies will reflect the
+            changes.
+        @param sourceBuffer the source buffer as a pointer.  Any buffer copies created from the source buffer
+            are deleted.
+        */
+        void _forceReleaseBufferCopies(HardwareVertexBuffer* sourceBuffer);
+
+		/// Notification that a hardware vertex buffer has been destroyed
+		void _notifyVertexBufferDestroyed(HardwareVertexBuffer* buf);
+		/// Notification that a hardware index buffer has been destroyed
+		void _notifyIndexBufferDestroyed(HardwareIndexBuffer* buf);
+
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static HardwareBufferManager& getSingleton(void);
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static HardwareBufferManager* getSingletonPtr(void);
+            
+    };
+
+}
+
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreOverlayElementFactory.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreOverlayElementFactory.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreOverlayElementFactory.h	(revision 1092)
@@ -0,0 +1,115 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __OverlayElementFactory_H__
+#define __OverlayElementFactory_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreOverlayElement.h"
+#include "OgrePanelOverlayElement.h"
+#include "OgreBorderPanelOverlayElement.h"
+#include "OgreTextAreaOverlayElement.h"
+
+namespace Ogre {
+
+    /** Defines the interface which all components wishing to 
+        supply OverlayElement subclasses must implement.
+    @remarks
+        To allow the OverlayElement types available for inclusion on 
+        overlays to be extended, OGRE allows external apps or plugins
+        to register their ability to create custom OverlayElements with
+        the OverlayManager, using the addOverlayElementFactory method. Classes
+        wanting to do this must implement this interface.
+    @par
+        Each OverlayElementFactory creates a single type of OverlayElement, 
+        identified by a 'type name' which must be unique.
+    */
+    class _OgreExport OverlayElementFactory
+    {
+    public:
+        /** Creates a new OverlayElement instance with the name supplied. */
+        virtual OverlayElement* createOverlayElement(const String& instanceName) = 0;
+        /** Destroys a OverlayElement which this factory created previously. */
+        virtual void destroyOverlayElement(OverlayElement* pElement) { delete pElement; };
+        /** Gets the string uniquely identifying the type of element this factory creates. */
+        virtual const String& getTypeName(void) const = 0;
+    };
+
+
+    /** Factory for creating PanelOverlayElement instances. */
+    class _OgreExport PanelOverlayElementFactory: public OverlayElementFactory
+    {
+    public:
+        /** See OverlayElementFactory */
+        OverlayElement* createOverlayElement(const String& instanceName)
+        {
+            return new PanelOverlayElement(instanceName);
+        }
+        /** See OverlayElementFactory */
+        const String& getTypeName(void) const
+        {
+            static String name = "Panel";
+            return name;
+        }
+    };
+
+    /** Factory for creating BorderPanelOverlayElement instances. */
+    class _OgreExport BorderPanelOverlayElementFactory: public OverlayElementFactory
+    {
+    public:
+        /** See OverlayElementFactory */
+        OverlayElement* createOverlayElement(const String& instanceName)
+        {
+            return new BorderPanelOverlayElement(instanceName);
+        }
+        /** See OverlayElementFactory */
+        const String& getTypeName(void) const
+        {
+            static String name = "BorderPanel";
+            return name;
+        }
+    };
+
+    /** Factory for creating TextAreaOverlayElement instances. */
+    class _OgreExport TextAreaOverlayElementFactory: public OverlayElementFactory
+    {
+    public:
+        /** See OverlayElementFactory */
+        OverlayElement* createOverlayElement(const String& instanceName)
+        {
+            return new TextAreaOverlayElement(instanceName);
+        }
+        /** See OverlayElementFactory */
+        const String& getTypeName(void) const
+        {
+            static String name = "TextArea";
+            return name;
+        }
+    };
+
+}
+
+
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreNode.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreNode.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreNode.h	(revision 1092)
@@ -0,0 +1,645 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _Node_H__
+#define _Node_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreMatrix3.h"
+#include "OgreMatrix4.h"
+#include "OgreQuaternion.h"
+#include "OgreString.h"
+#include "OgreRenderable.h"
+#include "OgreIteratorWrappers.h"
+
+namespace Ogre {
+
+
+    /** Class representing a general-purpose node an articulated scene graph.
+        @remarks
+            A node in the scene graph is a node in a structured tree. A node contains
+            information about the transformation which will apply to
+            it and all of it's children. Child nodes can have transforms of their own, which
+            are combined with their parent's transformations.
+        @par
+            This is an abstract class - concrete classes are based on this for specific purposes,
+            e.g. SceneNode, Bone
+    */
+    class _OgreExport Node : public Renderable
+    {
+    public:
+        /** Enumeration denoting the spaces which a transform can be relative to.
+        */
+        enum TransformSpace
+        {
+            /// Transform is relative to the local space
+            TS_LOCAL,
+            /// Transform is relative to the space of the parent node
+            TS_PARENT,
+            /// Transform is relative to world space
+            TS_WORLD
+        };
+        typedef HashMap<String, Node*> ChildNodeMap;
+        typedef MapIterator<ChildNodeMap> ChildNodeIterator;
+		typedef ConstMapIterator<ChildNodeMap> ConstChildNodeIterator;
+
+    protected:
+        /// Pointer to parent node
+        Node* mParent;
+        /// Collection of pointers to direct children; hashmap for efficiency
+        ChildNodeMap mChildren;
+
+		typedef std::set<Node*> ChildUpdateSet;
+        /// List of children which need updating, used if self is not out of date but children are
+        mutable ChildUpdateSet mChildrenToUpdate;
+        /// Flag to indicate own transform from parent is out of date
+        mutable bool mNeedParentUpdate;
+		/// Flag indicating that all children need to be updated
+		mutable bool mNeedChildUpdate;
+		/// Flag indicating that parent has been notified about update request
+	    mutable bool mParentNotified ;
+
+        /// Friendly name of this node, can be automatically generated if you don't care
+        String mName;
+
+        /// Incremented count for next name extension
+        static unsigned long msNextGeneratedNameExt;
+
+        /// Stores the orientation of the node relative to it's parent.
+        Quaternion mOrientation;
+
+        /// Stores the position/translation of the node relative to its parent.
+        Vector3 mPosition;
+
+        /// Stores the scaling factor applied to this node
+        Vector3 mScale;
+
+        /// Stores whether this node inherits scale from it's parent
+        bool mInheritScale;
+
+		/// Material pointer should this node be rendered
+		mutable MaterialPtr mpMaterial;
+
+        /// Only available internally - notification of parent.
+        virtual void setParent(Node* parent);
+
+        /** Cached combined orientation.
+            @par
+                This member is the orientation derived by combining the
+                local transformations and those of it's parents.
+                This is updated when _updateFromParent is called by the
+                SceneManager or the nodes parent.
+        */
+        mutable Quaternion mDerivedOrientation;
+
+        /** Cached combined position.
+            @par
+                This member is the position derived by combining the
+                local transformations and those of it's parents.
+                This is updated when _updateFromParent is called by the
+                SceneManager or the nodes parent.
+        */
+        mutable Vector3 mDerivedPosition;
+
+        /** Cached combined scale.
+            @par
+                This member is the position derived by combining the
+                local transformations and those of it's parents.
+                This is updated when _updateFromParent is called by the
+                SceneManager or the nodes parent.
+        */
+        mutable Vector3 mDerivedScale;
+
+        /** Triggers the node to update it's combined transforms.
+            @par
+                This method is called internally by Ogre to ask the node
+                to update it's complete transformation based on it's parents
+                derived transform.
+        */
+        virtual void _updateFromParent(void) const;
+
+        /** Internal method for creating a new child node - must be overridden per subclass. */
+        virtual Node* createChildImpl(void) = 0;
+
+        /** Internal method for creating a new child node - must be overridden per subclass. */
+        virtual Node* createChildImpl(const String& name) = 0;
+
+        /** Internal method for building a Matrix4 from orientation / scale / position. 
+        @remarks
+            Transform is performed in the order rotate, scale, translation, i.e. translation is independent
+            of orientation axes, scale does not affect size of translation, rotation and scaling are always
+            centered on the origin.
+        */
+        void makeTransform(
+            const Vector3& position, 
+            const Vector3& scale, 
+            const Quaternion& orientation, 
+            Matrix4& destMatrix ) const;
+
+        /** Internal method for building an inverse Matrix4 from orientation / scale / position. 
+        @remarks
+            As makeTransform except it build the inverse given the same data as makeTransform, so
+            performing -translation, 1/scale, -rotate in that order.
+        */
+        void makeInverseTransform(
+            const Vector3& position, 
+            const Vector3& scale, 
+            const Quaternion& orientation, 
+            Matrix4& destMatrix );
+
+        /// The position to use as a base for keyframe animation
+        Vector3 mInitialPosition;
+        /// The orientation to use as a base for keyframe animation
+        Quaternion mInitialOrientation;
+        /// The scale to use as a base for keyframe animation
+        Vector3 mInitialScale;
+
+        // Weight of applied animations so far, used for blending
+        Real mAccumAnimWeight;
+        // The total weighted translation from the initial state so far
+        Vector3 mTransFromInitial;
+        // The total weighted rotation from the initial state so far
+        Quaternion mRotFromInitial;
+        // The total weighted scale from the initial state so far
+        Vector3 mScaleFromInitial;
+
+        /// Cached derived transform as a 4x4 matrix
+        mutable Matrix4 mCachedTransform;
+        mutable bool mCachedTransformOutOfDate;
+
+
+    public:
+        /** Constructor, should only be called by parent, not directly.
+        @remarks
+            Generates a name.
+        */
+        Node();
+        /** Constructor, should only be called by parent, not directly.
+        @remarks
+            Assigned a name.
+        */
+        Node(const String& name);
+
+        virtual ~Node();  
+
+        /** Returns the name of the node. */
+        const String& getName(void) const;
+
+        /** Gets this node's parent (NULL if this is the root).
+        */
+        virtual Node* getParent(void) const;
+
+        /** Returns a quaternion representing the nodes orientation.
+        */
+        virtual const Quaternion & getOrientation() const;
+
+        /** Sets the orientation of this node via a quaternion.
+        */
+        virtual void setOrientation( const Quaternion& q );
+
+        /** Sets the orientation of this node via quaternion parameters.
+        */
+        virtual void setOrientation( Real w, Real x, Real y, Real z);
+
+        /** Resets the nodes orientation (local axes as world axes, no rotation).
+        */
+        virtual void resetOrientation(void);
+
+        /** Sets the position of the node relative to it's parent.
+        */
+        virtual void setPosition(const Vector3& pos);
+
+        /** Sets the position of the node relative to it's parent.
+        */
+        virtual void setPosition(Real x, Real y, Real z);
+
+        /** Gets the position of the node relative to it's parent.
+        */
+        virtual const Vector3 & getPosition(void) const;
+
+        /** Sets the scaling factor applied to this node.
+        @remarks
+            Scaling factors, unlike other transforms, are not always inherited by child nodes. 
+            Whether or not scalings affect both the size and position of the child nodes depends on
+            the setInheritScale option of the child. In some cases you want a scaling factor of a parent node
+            to apply to a child node (e.g. where the child node is a part of the same object, so you
+            want it to be the same relative size and position based on the parent's size), but
+            not in other cases (e.g. where the child node is just for positioning another object,
+            you want it to maintain it's own size and relative position). The default is to inherit
+            as with other transforms.
+        @par
+            Note that like rotations, scalings are oriented around the node's origin.
+        */
+        virtual void setScale(const Vector3& scale);
+
+        /** Sets the scaling factor applied to this node.
+        @remarks
+            Scaling factors, unlike other transforms, are not always inherited by child nodes. 
+            Whether or not scalings affect both the size and position of the child nodes depends on
+            the setInheritScale option of the child. In some cases you want a scaling factor of a parent node
+            to apply to a child node (e.g. where the child node is a part of the same object, so you
+            want it to be the same relative size and position based on the parent's size), but
+            not in other cases (e.g. where the child node is just for positioning another object,
+            you want it to maintain it's own size and relative position). The default is to inherit
+            as with other transforms.
+        @par
+            Note that like rotations, scalings are oriented around the node's origin.
+        */
+        virtual void setScale(Real x, Real y, Real z);
+
+        /** Gets the scaling factor of this node.
+        */
+        virtual const Vector3 & getScale(void) const;
+
+        /** Tells the node whether it should inherit scaling factors from it's parent node.
+        @remarks
+            Scaling factors, unlike other transforms, are not always inherited by child nodes. 
+            Whether or not scalings affect both the size and position of the child nodes depends on
+            the setInheritScale option of the child. In some cases you want a scaling factor of a parent node
+            to apply to a child node (e.g. where the child node is a part of the same object, so you
+            want it to be the same relative size and position based on the parent's size), but
+            not in other cases (e.g. where the child node is just for positioning another object,
+            you want it to maintain it's own size and relative position). The default is to inherit
+            as with other transforms.
+        @param inherit If true, this node's scale and position will be affected by its parent's scale. If false,
+            it will not be affected.
+        */
+        virtual void setInheritScale(bool inherit);
+
+        /** Returns true if this node is affected by scaling factors applied to the parent node. 
+        @remarks
+            See setInheritScale for more info.
+        */
+        virtual bool getInheritScale(void) const;
+
+        /** Scales the node, combining it's current scale with the passed in scaling factor. 
+        @remarks
+            This method applies an extra scaling factor to the node's existing scale, (unlike setScale
+            which overwrites it) combining it's current scale with the new one. E.g. calling this 
+            method twice with Vector3(2,2,2) would have the same effect as setScale(Vector3(4,4,4)) if
+            the existing scale was 1.
+        @par
+            Note that like rotations, scalings are oriented around the node's origin.
+        */
+        virtual void scale(const Vector3& scale);
+
+        /** Scales the node, combining it's current scale with the passed in scaling factor. 
+        @remarks
+            This method applies an extra scaling factor to the node's existing scale, (unlike setScale
+            which overwrites it) combining it's current scale with the new one. E.g. calling this 
+            method twice with Vector3(2,2,2) would have the same effect as setScale(Vector3(4,4,4)) if
+            the existing scale was 1.
+        @par
+            Note that like rotations, scalings are oriented around the node's origin.
+        */
+        virtual void scale(Real x, Real y, Real z);
+
+        /** Moves the node along the cartesian axes.
+            @par
+                This method moves the node by the supplied vector along the
+                world cartesian axes, i.e. along world x,y,z
+            @param 
+                d Vector with x,y,z values representing the translation.
+            @param
+                relativeTo The space which this transform is relative to.
+        */
+        virtual void translate(const Vector3& d, TransformSpace relativeTo = TS_PARENT);
+        /** Moves the node along the cartesian axes.
+            @par
+                This method moves the node by the supplied vector along the
+                world cartesian axes, i.e. along world x,y,z
+            @param 
+                x
+            @param
+                y
+            @param
+                z Real x, y and z values representing the translation.
+            @param
+            relativeTo The space which this transform is relative to.
+        */
+        virtual void translate(Real x, Real y, Real z, TransformSpace relativeTo = TS_PARENT);
+        /** Moves the node along arbitrary axes.
+            @remarks
+                This method translates the node by a vector which is relative to
+                a custom set of axes.
+            @param 
+                axes A 3x3 Matrix containg 3 column vectors each representing the
+                axes X, Y and Z respectively. In this format the standard cartesian
+                axes would be expressed as:
+                <pre>
+                1 0 0
+                0 1 0
+                0 0 1
+                </pre>
+                i.e. the identity matrix.
+            @param 
+                move Vector relative to the axes above.
+            @param
+            relativeTo The space which this transform is relative to.
+        */
+        virtual void translate(const Matrix3& axes, const Vector3& move, TransformSpace relativeTo = TS_PARENT);
+        /** Moves the node along arbitrary axes.
+            @remarks
+            This method translates the node by a vector which is relative to
+            a custom set of axes.
+            @param 
+                axes A 3x3 Matrix containg 3 column vectors each representing the
+                axes X, Y and Z respectively. In this format the standard cartesian
+                axes would be expressed as
+                <pre>
+                1 0 0
+                0 1 0
+                0 0 1
+                </pre>
+                i.e. the identity matrix.
+            @param 
+                x,y,z Translation components relative to the axes above.
+            @param
+                relativeTo The space which this transform is relative to.
+        */
+        virtual void translate(const Matrix3& axes, Real x, Real y, Real z, TransformSpace relativeTo = TS_PARENT);
+
+        /** Rotate the node around the Z-axis.
+        */
+        virtual void roll(const Radian& angle, TransformSpace relativeTo = TS_LOCAL);
+#ifndef OGRE_FORCE_ANGLE_TYPES
+        inline void roll(Real degrees, TransformSpace relativeTo = TS_LOCAL) {
+			roll ( Angle(degrees), relativeTo );
+		}
+#endif//OGRE_FORCE_ANGLE_TYPES
+
+        /** Rotate the node around the X-axis.
+        */
+        virtual void pitch(const Radian& angle, TransformSpace relativeTo = TS_LOCAL);
+#ifndef OGRE_FORCE_ANGLE_TYPES
+        inline void pitch(Real degrees, TransformSpace relativeTo = TS_LOCAL) {
+			pitch ( Angle(degrees), relativeTo );
+		}
+#endif//OGRE_FORCE_ANGLE_TYPES
+
+        /** Rotate the node around the Y-axis.
+        */
+        virtual void yaw(const Radian& angle, TransformSpace relativeTo = TS_LOCAL);
+#ifndef OGRE_FORCE_ANGLE_TYPES
+        inline void yaw(Real degrees, TransformSpace relativeTo = TS_LOCAL) {
+			yaw ( Angle(degrees), relativeTo );
+		}
+#endif//OGRE_FORCE_ANGLE_TYPES
+
+        /** Rotate the node around an arbitrary axis.
+        */
+        virtual void rotate(const Vector3& axis, const Radian& angle, TransformSpace relativeTo = TS_LOCAL);
+#ifndef OGRE_FORCE_ANGLE_TYPES
+        inline void rotate(const Vector3& axis, Real degrees, TransformSpace relativeTo = TS_LOCAL) {
+			rotate ( axis, Angle(degrees), relativeTo );
+		}
+#endif//OGRE_FORCE_ANGLE_TYPES
+
+        /** Rotate the node around an aritrary axis using a Quarternion.
+        */
+        virtual void rotate(const Quaternion& q, TransformSpace relativeTo = TS_LOCAL);
+
+        /** Gets a matrix whose columns are the local axes based on
+            the nodes orientation relative to it's parent. */
+        virtual Matrix3 getLocalAxes(void) const;
+
+        /** Creates an unnamed new Node as a child of this node.
+        @param
+            translate Initial translation offset of child relative to parent
+        @param
+            rotate Initial rotation relative to parent
+        */
+        virtual Node* createChild(
+            const Vector3& translate = Vector3::ZERO, 
+            const Quaternion& rotate = Quaternion::IDENTITY );
+
+        /** Creates a new named Node as a child of this node.
+        @remarks
+            This creates a child node with a given name, which allows you to look the node up from 
+            the parent which holds this collection of nodes.
+            @param
+                translate Initial translation offset of child relative to parent
+            @param
+                rotate Initial rotation relative to parent
+        */
+        virtual Node* createChild(const String& name, const Vector3& translate = Vector3::ZERO, const Quaternion& rotate = Quaternion::IDENTITY);
+
+        /** Adds a (precreated) child scene node to this node. If it is attached to another node,
+            it must be detached first.
+        @param child The Node which is to become a child node of this one
+        */
+        virtual void addChild(Node* child);
+
+        /** Reports the number of child nodes under this one.
+        */
+        virtual unsigned short numChildren(void) const;
+
+        /** Gets a pointer to a child node.
+        @remarks
+            There is an alternate getChild method which returns a named child.
+        */
+        virtual Node* getChild(unsigned short index) const;    
+
+        /** Gets a pointer to a named child node.
+        */
+        virtual Node* getChild(const String& name) const;
+
+        /** Retrieves an iterator for efficiently looping through all children of this node.
+        @remarks
+            Using this is faster than repeatedly calling getChild if you want to go through
+            all (or most of) the children of this node.
+            Note that the returned iterator is only valid whilst no children are added or
+            removed from this node. Thus you should not store this returned iterator for
+            later use, nor should you add / remove children whilst iterating through it;
+            store up changes for later. Note that calling methods on returned items in 
+            the iterator IS allowed and does not invalidate the iterator.
+        */
+        virtual ChildNodeIterator getChildIterator(void);
+
+        /** Retrieves an iterator for efficiently looping through all children of this node.
+        @remarks
+            Using this is faster than repeatedly calling getChild if you want to go through
+            all (or most of) the children of this node.
+            Note that the returned iterator is only valid whilst no children are added or
+            removed from this node. Thus you should not store this returned iterator for
+            later use, nor should you add / remove children whilst iterating through it;
+            store up changes for later. Note that calling methods on returned items in 
+            the iterator IS allowed and does not invalidate the iterator.
+        */
+		virtual ConstChildNodeIterator getChildIterator(void) const;
+
+        /** Drops the specified child from this node. 
+        @remarks
+            Does not delete the node, just detaches it from
+            this parent, potentially to be reattached elsewhere. 
+            There is also an alternate version which drops a named
+            child from this node.
+        */
+        virtual Node* removeChild(unsigned short index);
+        /** Drops the specified child from this node. 
+        @remarks
+        Does not delete the node, just detaches it from
+        this parent, potentially to be reattached elsewhere. 
+        There is also an alternate version which drops a named
+        child from this node.
+        */
+        virtual Node* removeChild(Node* child);
+
+        /** Drops the named child from this node. 
+        @remarks
+            Does not delete the node, just detaches it from
+            this parent, potentially to be reattached elsewhere.
+        */
+        virtual Node* removeChild(const String& name);
+        /** Removes all child Nodes attached to this node. Does not delete the nodes, just detaches them from
+            this parent, potentially to be reattached elsewhere.
+        */
+        virtual void removeAllChildren(void);
+
+        /** Gets the orientation of the node as derived from all parents.
+        */
+        virtual const Quaternion & _getDerivedOrientation(void) const;
+
+        /** Gets the position of the node as derived from all parents.
+        */
+        virtual const Vector3 & _getDerivedPosition(void) const;
+
+        /** Gets the scaling factor of the node as derived from all parents.
+        */
+        virtual const Vector3 & _getDerivedScale(void) const;
+
+        /** Gets the full transformation matrix for this node.
+            @remarks
+                This method returns the full transformation matrix
+                for this node, including the effect of any parent node
+                transformations, provided they have been updated using the Node::_update method.
+                This should only be called by a SceneManager which knows the
+                derived transforms have been updated before calling this method.
+                Applications using Ogre should just use the relative transforms.
+        */
+        virtual Matrix4 _getFullTransform(void) const;
+
+        /** Internal method to update the Node.
+            @note
+                Updates this node and any relevant children to incorporate transforms etc.
+                Don't call this yourself unless you are writing a SceneManager implementation.
+            @param
+                updateChildren If true, the update cascades down to all children. Specify false if you wish to
+                update children separately, e.g. because of a more selective SceneManager implementation.
+            @param
+                parentHasChanged This flag indicates that the parent xform has changed,
+                    so the child should retrieve the parent's xform and combine it with its own
+                    even if it hasn't changed itself.
+        */
+        virtual void _update(bool updateChildren, bool parentHasChanged);
+
+        /** Overridden from Renderable.
+        @remarks
+            This is only used if the SceneManager chooses to render the node. This option can be set
+            for SceneNodes at SceneManager::setDisplaySceneNodes, and for entities based on skeletal 
+            models using Entity::setDisplayBones()
+        */
+        const MaterialPtr& getMaterial(void) const;
+        /** Overridden from Renderable.
+        @remarks
+            This is only used if the SceneManager chooses to render the node. This option can be set
+            for SceneNodes at SceneManager::setDisplaySceneNodes, and for entities based on skeletal 
+            models using Entity::setDisplaySkeleton()
+        */
+        void getRenderOperation(RenderOperation& op);
+        /** Overridden from Renderable.
+        @remarks
+            This is only used if the SceneManager chooses to render the node. This option can be set
+            for SceneNodes at SceneManager::setDisplaySceneNodes, and for entities based on skeletal 
+            models using Entity::setDisplaySkeleton()
+        */
+        void getWorldTransforms(Matrix4* xform) const;
+        /** @copydoc Renderable::getWorldOrientation */
+        const Quaternion& getWorldOrientation(void) const;
+        /** @copydoc Renderable::getWorldPosition */
+        const Vector3& getWorldPosition(void) const;
+
+        /** Sets the current transform of this node to be the 'initial state' ie that
+            position / orientation / scale to be used as a basis for delta values used
+            in keyframe animation.
+        @remarks
+            You never need to call this method unless you plan to animate this node. If you do
+            plan to animate it, call this method once you've loaded the node with it's base state,
+            ie the state on which all keyframes are based.
+        @par
+            If you never call this method, the initial state is the identity transform, ie do nothing.
+        */
+        virtual void setInitialState(void);
+
+        /** Resets the position / orientation / scale of this node to it's initial state, see setInitialState for more info. */
+        virtual void resetToInitialState(void);
+
+        /** Gets the initial position of this node, see setInitialState for more info. 
+        @remarks
+            Also resets the cumulative animation weight used for blending.
+        */
+        virtual const Vector3& getInitialPosition(void) const;
+
+        /** Gets the initial orientation of this node, see setInitialState for more info. */
+        virtual const Quaternion& getInitialOrientation(void) const;
+
+        /** Gets the initial position of this node, see setInitialState for more info. */
+        virtual const Vector3& getInitialScale(void) const;
+
+        /** Internal weighted transform method.
+        @remarks
+            This method transforms a Node by a weighted amount from it's
+            initial state. If weighted transforms have already been applied, 
+            the previous transforms and this one are blended together based
+            on their relative weight. This method should not be used in
+            combination with the unweighted rotate, translate etc methods.
+        */
+        virtual void _weightedTransform(Real weight, const Vector3& translate, 
+            const Quaternion& rotate, const Vector3& scale);
+
+        /** Overridden, see Renderable */
+        Real getSquaredViewDepth(const Camera* cam) const;
+
+        /** To be called in the event of transform changes to this node that require it's recalculation.
+        @remarks
+            This not only tags the node state as being 'dirty', it also requests it's parent to 
+            know about it's dirtiness so it will get an update next time.
+        */
+        virtual void needUpdate();
+        /** Called by children to notify their parent that they need an update. */
+        virtual void requestUpdate(Node* child);
+        /** Called by children to notify their parent that they no longer need an update. */
+        virtual void cancelUpdate(Node* child);
+
+        /** @copydoc Renderable::getLights */
+        const LightList& getLights(void) const;
+
+
+
+    };
+
+} //namespace
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreHardwareBuffer.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreHardwareBuffer.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreHardwareBuffer.h	(revision 1092)
@@ -0,0 +1,326 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __HardwareBuffer__
+#define __HardwareBuffer__
+
+// Precompiler options
+#include "OgrePrerequisites.h"
+
+namespace Ogre {
+
+    /** Abstract class defining common features of hardware buffers.
+    @remarks
+ 	    A 'hardware buffer' is any area of memory held outside of core system ram,
+	    and in our case refers mostly to video ram, although in theory this class
+	    could be used with other memory areas such as sound card memory, custom
+	    coprocessor memory etc.
+    @par
+ 	    This reflects the fact that memory held outside of main system RAM must 
+	    be interacted with in a more formal fashion in order to promote
+	    cooperative and optimal usage of the buffers between the various 
+	    processing units which manipulate them.
+    @par
+ 	    This abstract class defines the core interface which is common to all
+	    buffers, whether it be vertex buffers, index buffers, texture memory
+	    or framebuffer memory etc.
+	@par
+		Buffers have the ability to be 'shadowed' in system memory, this is because
+		the kinds of access allowed on hardware buffers is not always as flexible as
+		that allowed for areas of system memory - for example it is often either 
+		impossible, or extremely undesirable from a performance standpoint to read from
+		a hardware buffer; when writing to hardware buffers, you should also write every
+		byte and do it sequentially. In situations where this is too restrictive, 
+		it is possible to create a hardware, write-only buffer (the most efficient kind) 
+		and to back it with a system memory 'shadow' copy which can be read and updated arbitrarily.
+		Ogre handles synchronising this buffer with the real hardware buffer (which should still be
+		created with the HBU_DYNAMIC flag if you intend to update it very frequently). Whilst this
+		approach does have it's own costs, such as increased memory overhead, these costs can 
+		often be outweighed by the performance benefits of using a more hardware efficient buffer.
+		You should look for the 'useShadowBuffer' parameter on the creation methods used to create
+		the buffer of the type you require (see HardwareBufferManager) to enable this feature.
+    */
+    class _OgreExport HardwareBuffer 
+    {
+
+	    public:
+		    /// Enums describing buffer usage; not mutually exclusive
+		    enum Usage 
+		    {
+                /** Static buffer which the application rarely modifies once created. Modifying 
+                the contents of this buffer will involve a performance hit.
+                */
+                HBU_STATIC = 1,
+			    /** Indicates the application would like to modify this buffer with the CPU
+			    fairly often. 
+			    Buffers created with this flag will typically end up in AGP memory rather 
+			    than video memory.
+			    */
+			    HBU_DYNAMIC = 2,
+			    /** Indicates the application will never read the contents of the buffer back, 
+			    it will only ever write data. Locking a buffer with this flag will ALWAYS 
+			    return a pointer to new, blank memory rather than the memory associated 
+			    with the contents of the buffer; this avoids DMA stalls because you can 
+			    write to a new memory area while the previous one is being used. 
+			    */
+			    HBU_WRITE_ONLY = 4,
+                /** Indicates that the application will be refilling the contents
+                of the buffer regularly (not just updating, but generating the
+                contents from scratch), and therefore does not mind if the contents 
+                of the buffer are lost somehow and need to be recreated. This
+                allows and additional level of optimisation on the buffer.
+                This option only really makes sense when combined with 
+                HBU_DYNAMIC_WRITE_ONLY.
+                */
+                HBU_DISCARDABLE = 8,
+				/// Combination of HBU_STATIC and HBU_WRITE_ONLY
+				HBU_STATIC_WRITE_ONLY = 5, 
+				/** Combination of HBU_DYNAMIC and HBU_WRITE_ONLY. If you use 
+                this, strongly consider using HBU_DYNAMIC_WRITE_ONLY_DISCARDABLE
+                instead if you update the entire contents of the buffer very 
+                regularly. 
+                */
+				HBU_DYNAMIC_WRITE_ONLY = 6,
+                /// Combination of HBU_DYNAMIC, HBU_WRITE_ONLY and HBU_DISCARDABLE
+                HBU_DYNAMIC_WRITE_ONLY_DISCARDABLE = 14
+
+
+		    };
+		    /// Locking options
+		    enum LockOptions
+		    {
+                /** Normal mode, ie allows read/write and contents are preserved. */
+                HBL_NORMAL,
+			    /** Discards the <em>entire</em> buffer while locking; this allows optimisation to be 
+				performed because synchronisation issues are relaxed. Only allowed on buffers 
+			    created with the HBU_DYNAMIC flag. 
+			    */
+			    HBL_DISCARD,
+			    /** Lock the buffer for reading only. Not allowed in buffers which are created with HBU_WRITE_ONLY. 
+				Mandatory on statuc buffers, ie those created without the HBU_DYNAMIC flag. 
+				*/ 
+			    HBL_READ_ONLY,
+                /** As HBL_NORMAL, except the application guarantees not to overwrite any 
+                region of the buffer which has already been used in this frame, can allow
+                some optimisation on some APIs. */
+                HBL_NO_OVERWRITE
+    			
+		    };
+	    protected:
+		    size_t mSizeInBytes;
+		    Usage mUsage;
+		    bool mIsLocked;
+			size_t mLockStart;
+			size_t mLockSize;
+			bool mSystemMemory;
+            bool mUseShadowBuffer;
+            HardwareBuffer* mpShadowBuffer;
+            bool mShadowUpdated;
+            bool mSuppressHardwareUpdate;
+    		
+            /// Internal implementation of lock()
+		    virtual void* lockImpl(size_t offset, size_t length, LockOptions options) = 0;
+            /// Internal implementation of unlock()
+		    virtual void unlockImpl(void) = 0;
+
+    public:
+		    /// Constructor, to be called by HardwareBufferManager only
+            HardwareBuffer(Usage usage, bool systemMemory, bool useShadowBuffer) 
+				: mUsage(usage), mIsLocked(false), mSystemMemory(systemMemory), 
+                mUseShadowBuffer(useShadowBuffer), mpShadowBuffer(NULL), mShadowUpdated(false), 
+                mSuppressHardwareUpdate(false) 
+            {
+                // If use shadow buffer, upgrade to WRITE_ONLY on hardware side
+                if (useShadowBuffer && usage == HBU_DYNAMIC)
+                {
+                    mUsage = HBU_DYNAMIC_WRITE_ONLY;
+                }
+                else if (useShadowBuffer && usage == HBU_STATIC)
+                {
+                    mUsage = HBU_STATIC_WRITE_ONLY;
+                }
+            }
+            virtual ~HardwareBuffer() {}
+		    /** Lock the buffer for (potentially) reading / writing.
+		    @param offset The byte offset from the start of the buffer to lock
+		    @param length The size of the area to lock, in bytes
+		    @param options Locking options
+		    @returns Pointer to the locked memory
+		    */
+		    virtual void* lock(size_t offset, size_t length, LockOptions options)
+            {
+                assert(!isLocked() && "Cannot lock this buffer, it is already locked!");
+                void* ret;
+				if (mUseShadowBuffer)
+                {
+					if (options != HBL_READ_ONLY)
+					{
+						// we have to assume a read / write lock so we use the shadow buffer
+						// and tag for sync on unlock()
+                        mShadowUpdated = true;
+                    }
+
+                    ret = mpShadowBuffer->lock(offset, length, options);
+                }
+                else
+                {
+					// Lock the real buffer if there is no shadow buffer 
+                    ret = lockImpl(offset, length, options);
+                    mIsLocked = true;
+                }
+				mLockStart = offset;
+				mLockSize = length;
+                return ret;
+            }
+
+            /** Lock the entire buffer for (potentially) reading / writing.
+		    @param options Locking options
+		    @returns Pointer to the locked memory
+            */
+            void* lock(LockOptions options)
+            {
+                return this->lock(0, mSizeInBytes, options);
+            }
+		    /** Releases the lock on this buffer. 
+            @remarks 
+                Locking and unlocking a buffer can, in some rare circumstances such as 
+                switching video modes whilst the buffer is locked, corrupt the 
+                contents of a buffer. This is pretty rare, but if it occurs, 
+                this method will throw an exception, meaning you
+                must re-upload the data.
+            @par
+                Note that using the 'read' and 'write' forms of updating the buffer does not
+                suffer from this problem, so if you want to be 100% sure your
+                data will not be lost, use the 'read' and 'write' forms instead.
+            */
+		    virtual void unlock(void)
+            {
+                assert(isLocked() && "Cannot unlock this buffer, it is not locked!");
+
+				// If we used the shadow buffer this time...
+                if (mUseShadowBuffer && mpShadowBuffer->isLocked())
+                {
+                    mpShadowBuffer->unlock();
+                    // Potentially update the 'real' buffer from the shadow buffer
+                    _updateFromShadow();
+                }
+                else
+                {
+					// Otherwise, unlock the real one
+                    unlockImpl();
+                    mIsLocked = false;
+                }
+
+            }
+
+            /** Reads data from the buffer and places it in the memory pointed to by pDest.
+		    @param offset The byte offset from the start of the buffer to read
+		    @param length The size of the area to read, in bytes
+            @param pDest The area of memory in which to place the data, must be large enough to 
+                accommodate the data!
+            */
+            virtual void readData(size_t offset, size_t length, void* pDest) = 0;
+            /** Writes data to the buffer from an area of system memory; note that you must
+                ensure that your buffer is big enough.
+		    @param offset The byte offset from the start of the buffer to start writing
+		    @param length The size of the data to write to, in bytes
+            @param pSource The source of the data to be written
+			@param discardWholeBuffer If true, this allows the driver to discard the entire buffer when writing,
+				such that DMA stalls can be avoided; use if you can.
+            */
+            virtual void writeData(size_t offset, size_t length, const void* pSource,
+					bool discardWholeBuffer = false) = 0;
+
+			/** Copy data from another buffer into this one.
+			@remarks
+				Note that the source buffer must not be created with the
+                usage HBU_WRITE_ONLY otherwise this will fail. 
+			@param srcBuffer The buffer from which to read the copied data
+			@param srcOffset Offset in the source buffer at which to start reading
+			@param dstOffset Offset in the destination buffer to start writing
+			@param length Length of the data to copy, in bytes.
+			@param discardWholeBuffer If true, will discard the entire contents of this buffer before copying
+			*/
+			virtual void copyData(HardwareBuffer& srcBuffer, size_t srcOffset, 
+				size_t dstOffset, size_t length, bool discardWholeBuffer = false)
+			{
+				const void *srcData = srcBuffer.lock(
+					srcOffset, length, HBL_READ_ONLY);
+				this->writeData(dstOffset, length, srcData, discardWholeBuffer);
+				srcBuffer.unlock();
+			}
+
+            /// Updates the real buffer from the shadow buffer, if required
+            virtual void _updateFromShadow(void)
+            {
+                if (mUseShadowBuffer && mShadowUpdated && !mSuppressHardwareUpdate)
+                {
+                    // Do this manually to avoid locking problems
+                    const void *srcData = mpShadowBuffer->lockImpl(
+    					mLockStart, mLockSize, HBL_READ_ONLY);
+					// Lock with discard if the whole buffer was locked, otherwise normal
+					LockOptions lockOpt;
+					if (mLockStart == 0 && mLockSize == mSizeInBytes)
+						lockOpt = HBL_DISCARD;
+					else
+						lockOpt = HBL_NORMAL;
+					
+                    void *destData = this->lockImpl(
+    					mLockStart, mLockSize, lockOpt);
+					// Copy shadow to real
+                    memcpy(destData, srcData, mLockSize);
+                    this->unlockImpl();
+                    mpShadowBuffer->unlockImpl();
+                    mShadowUpdated = false;
+                }
+            }
+
+            /// Returns the size of this buffer in bytes
+            size_t getSizeInBytes(void) const { return mSizeInBytes; }
+            /// Returns the Usage flags with which this buffer was created
+            Usage getUsage(void) const { return mUsage; }
+			/// Returns whether this buffer is held in system memory
+			bool isSystemMemory(void) const { return mSystemMemory; }
+			/// Returns whether this buffer has a system memory shadow for quicker reading
+			bool hasShadowBuffer(void) const { return mUseShadowBuffer; }
+            /// Returns whether or not this buffer is currently locked.
+            bool isLocked(void) const { 
+                return mIsLocked || (mUseShadowBuffer && mpShadowBuffer->isLocked()); 
+            }
+            /// Pass true to suppress hardware upload of shadow buffer changes
+            void suppressHardwareUpdate(bool suppress) {
+                mSuppressHardwareUpdate = suppress;
+                if (!suppress)
+                    _updateFromShadow();
+            }
+
+
+
+
+    		
+    };
+}
+#endif
+
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreShadowCaster.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreShadowCaster.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreShadowCaster.h	(revision 1092)
@@ -0,0 +1,209 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __ShadowCaster_H__
+#define __ShadowCaster_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreRenderable.h"
+
+
+namespace Ogre {
+
+
+    /** Class which represents the renderable aspects of a set of shadow volume faces. 
+    @remarks
+        Note that for casters comprised of more than one set of vertex buffers (e.g. SubMeshes each
+        using their own geometry), it will take more than one ShadowRenderable to render the 
+        shadow volume. Therefore for shadow caster geometry, it is best to stick to one set of
+        vertex buffers (not necessarily one buffer, but the positions for the entire geometry 
+        should come from one buffer if possible)
+    */
+    class _OgreExport ShadowRenderable : public Renderable
+    {
+    protected:
+        MaterialPtr mMaterial;
+        RenderOperation mRenderOp;
+        ShadowRenderable* mLightCap; // used only if isLightCapSeparate == true
+    public:
+        ShadowRenderable() : mMaterial(0), mLightCap(0) {}
+        virtual ~ShadowRenderable() { delete mLightCap; }
+        /** Set the material to be used by the shadow, should be set by the caller 
+          before adding to a render queue
+        */
+        void setMaterial(MaterialPtr& mat) { mMaterial = mat; }
+        /// Overridden from Renderable
+        const MaterialPtr& getMaterial(void) const { return mMaterial; }
+        /// Overridden from Renderable
+        void getRenderOperation(RenderOperation& op) { op = mRenderOp; }
+        /// Get the internal render operation for set up
+        RenderOperation* getRenderOperationForUpdate(void) {return &mRenderOp;}
+        /// Overridden from Renderable
+        void getWorldTransforms(Matrix4* xform) const = 0;
+        /// Overridden from Renderable
+        const Quaternion& getWorldOrientation(void) const = 0;
+        /// Overridden from Renderable
+        const Vector3& getWorldPosition(void) const = 0;
+        /// Overridden from Renderable
+        Real getSquaredViewDepth(const Camera* cam) const{ return 0; /* not used */}
+        /// Overridden from Renderable
+        const LightList& getLights(void) const;
+        /** Does this renderable require a separate light cap?
+        @remarks
+            If possible, the light cap (when required) should be contained in the
+            usual geometry of the shadow renderable. However, if for some reason
+            the normal depth function (less than) could cause artefacts, then a
+            separate light cap with a depth function of 'always fail' can be used 
+            instead. The primary example of this is when there are floating point
+            inaccuracies caused by calculating the shadow geometry separately from
+            the real geometry. 
+        */
+        bool isLightCapSeparate(void) const { return mLightCap != 0; }
+
+        /// Get the light cap version of this renderable
+        ShadowRenderable* getLightCapRenderable(void) { return mLightCap; }
+        /// Should this ShadowRenderable be treated as visible?
+        virtual bool isVisible(void) const { return true; }
+
+    };
+
+    /** A set of flags that can be used to influence ShadowRenderable creation. */
+    enum ShadowRenderableFlags
+    {
+        /// For shadow volume techniques only, generate a light cap on the volume
+        SRF_INCLUDE_LIGHT_CAP = 0x00000001,
+        /// For shadow volume techniques only, generate a dark cap on the volume
+        SRF_INCLUDE_DARK_CAP  = 0x00000002,
+        /// For shadow volume techniques only, indicates volume is extruded to infinity
+        SRF_EXTRUDE_TO_INFINITY  = 0x00000004
+    };
+
+    /** This class defines the interface that must be implemented by shadow casters.
+    */
+    class _OgreExport ShadowCaster
+    {
+    public:
+        virtual ~ShadowCaster() { }
+        /** Returns whether or not this object currently casts a shadow. */
+        virtual bool getCastShadows(void) const = 0;
+
+        /** Returns details of the edges which might be used to determine a silhouette. */
+        virtual EdgeData* getEdgeList(void) = 0;
+
+        /** Get the world bounding box of the caster. */
+        virtual const AxisAlignedBox& getWorldBoundingBox(bool derive = false) const = 0;
+        /** Gets the world space bounding box of the light cap */
+        virtual const AxisAlignedBox& getLightCapBounds(void) const = 0;
+        /** Gets the world space bounding box of the dark cap, as extruded using the light provided */
+        virtual const AxisAlignedBox& getDarkCapBounds(const Light& light, Real dirLightExtrusionDist) const = 0;
+
+        typedef std::vector<ShadowRenderable*> ShadowRenderableList;
+        typedef VectorIterator<ShadowRenderableList> ShadowRenderableListIterator;
+
+        /** Gets an iterator over the renderables required to render the shadow volume. 
+        @remarks
+            Shadowable geometry should ideally be designed such that there is only one
+            ShadowRenderable required to render the the shadow; however this is not a necessary
+            limitation and it can be exceeded if required.
+        @param shadowTechnique The technique being used to generate the shadow
+        @param light The light to generate the shadow from
+        @param indexBuffer The index buffer to build the renderables into, 
+            the current contents are assumed to be disposable.
+        @param extrudeVertices If true, this means this class should extrude
+            the vertices of the back of the volume in software. If false, it
+            will not be done (a vertex program is assumed).
+        @param extrusionDistance The distance to extrude the shadow volume
+        @param flags Technique-specific flags, see ShadowRenderableFlags
+        */
+        virtual ShadowRenderableListIterator getShadowVolumeRenderableIterator(
+            ShadowTechnique shadowTechnique, const Light* light, 
+            HardwareIndexBufferSharedPtr* indexBuffer, 
+            bool extrudeVertices, Real extrusionDistance, unsigned long flags = 0 ) = 0;
+
+        /** Utility method for extruding vertices based on a light. 
+        @remarks
+            Unfortunately, because D3D cannot handle homogenous (4D) position
+            coordinates in the fixed-function pipeline (GL can, but we have to
+            be cross-API), when we extrude in software we cannot extrude to 
+            infinity the way we do in the vertex program (by setting w to
+            0.0f). Therefore we extrude by a fixed distance, which may cause 
+            some problems with larger scenes. Luckily better hardware (ie
+            vertex programs) can fix this.
+        @param vertexBuffer The vertex buffer containing ONLY xyz position
+        values, which must be originalVertexCount * 2 * 3 floats long.
+        @param originalVertexCount The count of the original number of
+        vertices, ie the number in the mesh, not counting the doubling
+        which has already been done (by VertexData::prepareForShadowVolume)
+        to provide the extruded area of the buffer.
+        @param lightPos 4D light position in object space, when w=0.0f this
+        represents a directional light
+        @param extrudeDist The distance to extrude
+        */
+        static void extrudeVertices(HardwareVertexBufferSharedPtr vertexBuffer, 
+            size_t originalVertexCount, const Vector4& lightPos, Real extrudeDist);
+        /** Get the distance to extrude for a point/spot light */
+        virtual Real getPointExtrusionDistance(const Light* l) const = 0;
+    protected:
+        /// Helper moethod for calculating extrusion distance
+        Real getExtrusionDistance(const Vector3& objectPos, const Light* light) const;
+        /** Tells the caster to perform the tasks necessary to update the 
+            edge data's light listing. Can be overridden if the subclass needs 
+            to do additional things. 
+        @param edgeData The edge information to update
+        @param lightPos 4D vector representing the light, a directional light
+            has w=0.0
+       */
+        virtual void updateEdgeListLightFacing(EdgeData* edgeData, 
+            const Vector4& lightPos);
+
+        /** Generates the indexes required to render a shadow volume into the 
+            index buffer which is passed in, and updates shadow renderables
+            to use it.
+        @param edgeData The edge information to use
+        @param indexBuffer The buffer into which to write data into; current 
+            contents are assumed to be discardable.
+        @param light The light, mainly for type info as silhouette calculations
+            should already have been done in updateEdgeListLightFacing
+        @param shadowRenderables A list of shadow renderables which has 
+            already been constructed but will need populating with details of
+            the index ranges to be used.
+        @param flags Additional controller flags, see ShadowRenderableFlags
+        */
+        virtual void generateShadowVolume(EdgeData* edgeData, 
+            HardwareIndexBufferSharedPtr indexBuffer, const Light* light,
+            ShadowRenderableList& shadowRenderables, unsigned long flags);
+        /** Utility method for extruding a bounding box. 
+        @param box Original bounding box, will be updated in-place
+        @param lightPos 4D light position in object space, when w=0.0f this
+        represents a directional light
+        @param extrudeDist The distance to extrude
+        */
+        virtual void extrudeBounds(AxisAlignedBox& box, const Vector4& lightPos, 
+            Real extrudeDist) const;
+
+
+    };
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreCamera.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreCamera.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreCamera.h	(revision 1092)
@@ -0,0 +1,459 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://ogre.sourceforge.net/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __Camera_H__
+#define __Camera_H__
+
+// Default options
+#include "OgrePrerequisites.h"
+
+#include "OgreString.h"
+#include "OgreMovableObject.h"
+
+// Matrices & Vectors
+#include "OgreMatrix4.h"
+#include "OgreVector3.h"
+#include "OgrePlane.h"
+#include "OgreQuaternion.h"
+#include "OgreCommon.h"
+#include "OgreFrustum.h"
+#include "OgreRay.h"
+
+
+namespace Ogre {
+
+
+
+    /** A viewpoint from which the scene will be rendered.
+        @remarks
+            OGRE renders scenes from a camera viewpoint into a buffer of
+            some sort, normally a window or a texture (a subclass of
+            RenderTarget). OGRE cameras support both perspective projection (the default,
+            meaning objects get smaller the further away they are) and
+            orthographic projection (blueprint-style, no decrease in size
+            with distance). Each camera carries with it a style of rendering,
+            e.g. full textured, flat shaded, wireframe), field of view,
+            rendering distances etc, allowing you to use OGRE to create
+            complex multi-window views if required. In addition, more than
+            one camera can point at a single render target if required,
+            each rendering to a subset of the target, allowing split screen
+            and picture-in-picture views.
+        @par
+            Cameras maintain their own aspect ratios, field of view, and frustrum,
+            and project co-ordinates into a space measured from -1 to 1 in x and y,
+            and 0 to 1 in z. At render time, the camera will be rendering to a
+            Viewport which will translate these parametric co-ordinates into real screen
+            co-ordinates. Obviously it is advisable that the viewport has the same
+            aspect ratio as the camera to avoid distortion (unless you want it!).
+        @par
+            Note that a Camera can be attached to a SceneNode, using the method
+            SceneNode::attachObject. If this is done the Camera will combine it's own
+            position/orientation settings with it's parent SceneNode. 
+            This is useful for implementing more complex Camera / object
+            relationships i.e. having a camera attached to a world object.
+    */
+    class _OgreExport Camera : public Frustum
+    {
+    protected:
+        /// Camera name
+        String mName;
+        /// Scene manager responsible for the scene
+        SceneManager *mSceneMgr;
+
+        /// Camera orientation, quaternion style
+        Quaternion mOrientation;
+
+        /// Camera position - default (0,0,0)
+        Vector3 mPosition;
+
+        /// Derived positions of parent orientation / position
+        mutable Quaternion mDerivedOrientation;
+        mutable Vector3 mDerivedPosition;
+
+        /// Whether to yaw around a fixed axis.
+        bool mYawFixed;
+        /// Fixed axis to yaw around
+        Vector3 mYawFixedAxis;
+
+        /// Rendering type
+        SceneDetailLevel mSceneDetail;
+
+        /// Stored number of visible faces in the last render
+        unsigned int mVisFacesLastRender;
+
+        /// Shared class-level name for Movable type
+        static String msMovableType;
+
+        /// SceneNode which this Camera will automatically track
+        SceneNode* mAutoTrackTarget;
+        /// Tracking offset for fine tuning
+        Vector3 mAutoTrackOffset;
+
+		// Scene LOD factor used to adjust overall LOD
+		Real mSceneLodFactor;
+		/// Inverted scene LOD factor, can be used by Renderables to adjust their LOD
+		Real mSceneLodFactorInv;
+
+
+        /** Viewing window. 
+        @remarks
+        Generalize camera class for the case, when viewing frustum doesn't cover all viewport.
+        */
+        Real mWLeft, mWTop, mWRight, mWBottom;
+        /// Is viewing window used.
+        bool mWindowSet;
+        /// Windowed viewport clip planes 
+        mutable std::vector<Plane> mWindowClipPlanes;
+        // Was viewing window changed.
+        mutable bool mRecalcWindow;
+        /// The last viewport to be added using this camera
+        Viewport* mLastViewport;
+        /** Whether aspect ratio will automaticaally be recalculated 
+            when a vieport changes its size
+        */
+        bool mAutoAspectRatio;
+
+        // Internal functions for calcs
+        void updateFrustum(void) const;
+        void updateView(void) const;
+        bool isViewOutOfDate(void) const;
+        /// Signal to update frustum information.
+        void invalidateFrustum(void) const;
+        /// Signal to update view information.
+        void invalidateView(void) const;
+
+
+        /** Do actual window setting, using parameters set in SetWindow call
+        @remarks
+        The method is called after projection matrix each change
+        */
+        virtual void setWindowImpl(void) const;
+        /** Get the derived position of this frustum. */
+        const Vector3& getPositionForViewUpdate(void) const;
+        /** Get the derived orientation of this frustum. */
+        const Quaternion& getOrientationForViewUpdate(void) const;
+
+
+    public:
+        /** Standard constructor.
+        */
+        Camera( const String& name, SceneManager* sm);
+
+        /** Standard destructor.
+        */
+        virtual ~Camera();
+
+
+        /** Returns a pointer to the SceneManager this camera is rendering through.
+        */
+        SceneManager* getSceneManager(void) const;
+
+        /** Gets the camera's name.
+        */
+        virtual const String& getName(void) const;
+
+
+        /** Sets the level of rendering detail required from this camera.
+            @remarks
+                Each camera is set to render at full detail by default, that is
+                with full texturing, lighting etc. This method lets you change
+                that behaviour, allowing you to make the camera just render a
+                wireframe view, for example.
+        */
+        void setDetailLevel(SceneDetailLevel sd);
+
+        /** Retrieves the level of detail that the camera will render.
+        */
+        SceneDetailLevel getDetailLevel(void) const;
+
+        /** Sets the camera's position.
+        */
+        void setPosition(Real x, Real y, Real z);
+
+        /** Sets the camera's position.
+        */
+        void setPosition(const Vector3& vec);
+
+        /** Retrieves the camera's position.
+        */
+        const Vector3& getPosition(void) const;
+
+        /** Moves the camera's position by the vector offset provided along world axes.
+        */
+        void move(const Vector3& vec);
+
+        /** Moves the camera's position by the vector offset provided along it's own axes (relative to orientation).
+        */
+        void moveRelative(const Vector3& vec);
+
+        /** Sets the camera's direction vector.
+            @remarks
+                Note that the 'up' vector for the camera will automatically be recalculated based on the
+                current 'up' vector (i.e. the roll will remain the same).
+        */
+        void setDirection(Real x, Real y, Real z);
+
+        /** Sets the camera's direction vector.
+        */
+        void setDirection(const Vector3& vec);
+
+        /* Gets the camera's direction.
+        */
+        Vector3 getDirection(void) const;
+
+        /** Gets the camera's up vector.
+        */
+        Vector3 getUp(void) const;
+
+        /** Gets the camera's right vector.
+        */
+        Vector3 getRight(void) const;
+
+        /** Points the camera at a location in worldspace.
+            @remarks
+                This is a helper method to automatically generate the
+                direction vector for the camera, based on it's current position
+                and the supplied look-at point.
+            @param
+                targetPoint A vector specifying the look at point.
+        */
+        void lookAt( const Vector3& targetPoint );
+        /** Points the camera at a location in worldspace.
+            @remarks
+                This is a helper method to automatically generate the
+                direction vector for the camera, based on it's current position
+                and the supplied look-at point.
+            @param
+                x
+            @param
+                y
+            @param
+                z Co-ordinates of the point to look at.
+        */
+        void lookAt(Real x, Real y, Real z);
+
+        /** Rolls the camera anticlockwise, around its local z axis.
+        */
+        void roll(const Radian& angle);
+#ifndef OGRE_FORCE_ANGLE_TYPES
+        void roll(Real degrees) { roll ( Angle(degrees) ); }
+#endif//OGRE_FORCE_ANGLE_TYPES
+
+        /** Rotates the camera anticlockwise around it's local y axis.
+        */
+        void yaw(const Radian& angle);
+#ifndef OGRE_FORCE_ANGLE_TYPES
+        void yaw(Real degrees) { yaw ( Angle(degrees) ); }
+#endif//OGRE_FORCE_ANGLE_TYPES
+
+        /** Pitches the camera up/down anticlockwise around it's local z axis.
+        */
+        void pitch(const Radian& angle);
+#ifndef OGRE_FORCE_ANGLE_TYPES
+        void pitch(Real degrees) { pitch ( Angle(degrees) ); }
+#endif//OGRE_FORCE_ANGLE_TYPES
+
+        /** Rotate the camera around an arbitrary axis.
+        */
+        void rotate(const Vector3& axis, const Radian& angle);
+#ifndef OGRE_FORCE_ANGLE_TYPES
+        void rotate(const Vector3& axis, Real degrees) { rotate ( axis, Angle(degrees) ); }
+#endif//OGRE_FORCE_ANGLE_TYPES
+
+        /** Rotate the camera around an aritrary axis using a Quarternion.
+        */
+        void rotate(const Quaternion& q);
+
+        /** Tells the camera whether to yaw around it's own local Y axis or a 
+			fixed axis of choice.
+            @remarks
+                This method allows you to change the yaw behaviour of the camera
+				- by default, the camera yaws around a fixed Y axis. This is 
+				often what you want - for example if you're making a first-person 
+				shooter, you really don't want the yaw axis to reflect the local 
+				camera Y, because this would mean a different yaw axis if the 
+				player is looking upwards rather than when they are looking
+                straight ahead. You can change this behaviour by calling this 
+				method, which you will want to do if you are making a completely
+				free camera like the kind used in a flight simulator. 
+            @param
+                useFixed If true, the axis passed in the second parameter will 
+				always be the yaw axis no matter what the camera orientation. 
+				If false, the camera yaws around the local Y.
+            @param
+                fixedAxis The axis to use if the first parameter is true.
+        */
+        void setFixedYawAxis( bool useFixed, const Vector3& fixedAxis = Vector3::UNIT_Y );
+
+
+        /** Returns the camera's current orientation.
+        */
+        const Quaternion& getOrientation(void) const;
+
+        /** Sets the camera's orientation.
+        */
+        void setOrientation(const Quaternion& q);
+
+        /** Tells the Camera to contact the SceneManager to render from it's viewpoint.
+        @param vp The viewport to render to
+        @param includeOverlays Whether or not any overlay objects should be included
+        */
+        void _renderScene(Viewport *vp, bool includeOverlays);
+
+        /** Function for outputting to a stream.
+        */
+        friend std::ostream& operator<<(std::ostream& o, Camera& c);
+
+        /** Internal method to notify camera of the visible faces in the last render.
+        */
+        void _notifyRenderedFaces(unsigned int numfaces);
+
+        /** Internal method to retrieve the number of visible faces in the last render.
+        */
+        unsigned int _getNumRenderedFaces(void) const;
+
+        /** Gets the derived orientation of the camera, including any 
+            rotation inherited from a node attachment. */
+        const Quaternion& getDerivedOrientation(void) const;
+        /** Gets the derived position of the camera, including any 
+            translation inherited from a node attachment. */
+        const Vector3& getDerivedPosition(void) const;
+        /** Gets the derived direction vector of the camera, including any 
+            translation inherited from a node attachment. */
+        Vector3 getDerivedDirection(void) const;
+
+        /** Overridden from MovableObject */
+        const String& getMovableType(void) const;
+
+        /** Enables / disables automatic tracking of a SceneNode.
+        @remarks
+            If you enable auto-tracking, this Camera will automatically rotate to
+            look at the target SceneNode every frame, no matter how 
+            it or SceneNode move. This is handy if you want a Camera to be focused on a
+            single object or group of objects. Note that by default the Camera looks at the 
+            origin of the SceneNode, if you want to tweak this, e.g. if the object which is
+            attached to this target node is quite big and you want to point the camera at
+            a specific point on it, provide a vector in the 'offset' parameter and the 
+            camera's target point will be adjusted.
+        @param enabled If true, the Camera will track the SceneNode supplied as the next 
+            parameter (cannot be null). If false the camera will cease tracking and will
+            remain in it's current orientation.
+        @param target Pointer to the SceneNode which this Camera will track. Make sure you don't
+            delete this SceneNode before turning off tracking (e.g. SceneManager::clearScene will
+            delete it so be careful of this). Can be null if and only if the enabled param is false.
+        @param offset If supplied, the camera targets this point in local space of the target node
+            instead of the origin of the target node. Good for fine tuning the look at point.
+        */
+        void setAutoTracking(bool enabled, SceneNode* target = 0, 
+            const Vector3& offset = Vector3::ZERO);
+
+
+		/** Sets the level-of-detail factor for this Camera.
+		@remarks
+			This method can be used to influence the overall level of detail of the scenes 
+			rendered using this camera. Various elements of the scene have level-of-detail
+			reductions to improve rendering speed at distance; this method allows you 
+			to hint to those elements that you would like to adjust the level of detail that
+			they would normally use (up or down). 
+		@par
+			The most common use for this method is to reduce the overall level of detail used
+			for a secondary camera used for sub viewports like rear-view mirrors etc.
+			Note that scene elements are at liberty to ignore this setting if they choose,
+			this is merely a hint.
+		@param factor The factor to apply to the usual level of detail calculation. Higher
+			values increase the detail, so 2.0 doubles the normal detail and 0.5 halves it.
+		*/
+		void setLodBias(Real factor = 1.0);
+
+		/** Returns the level-of-detail bias factor currently applied to this camera. 
+		@remarks
+			See Camera::setLodBias for more details.
+		*/
+		Real getLodBias(void) const;
+
+
+
+        /** Gets a world space ray as cast from the camera through a viewport position.
+        @param screenx, screeny The x and y position at which the ray should intersect the viewport, 
+            in normalised screen coordinates [0,1]
+        */
+        Ray getCameraToViewportRay(Real screenx, Real screeny) const;
+
+		/** Internal method for OGRE to use for LOD calculations. */
+		Real _getLodBiasInverse(void) const;
+
+
+        /** Internal method used by OGRE to update auto-tracking cameras. */
+        void _autoTrack(void);
+
+
+        /** Sets the viewing window inside of viewport.
+        @remarks
+        This method can be used to set a subset of the viewport as the rendering
+        target. 
+        @param Left Relative to Viewport - 0 corresponds to left edge, 1 - to right edge (default - 0).
+        @param Top Relative to Viewport - 0 corresponds to top edge, 1 - to bottom edge (default - 0).
+        @param Right Relative to Viewport - 0 corresponds to left edge, 1 - to right edge (default - 1).
+        @param Bottom Relative to Viewport - 0 corresponds to top edge, 1 - to bottom edge (default - 1).
+        */
+        virtual void setWindow (Real Left, Real Top, Real Right, Real Bottom);
+        /// Cancel view window.
+        virtual void resetWindow (void);
+        /// Returns if a viewport window is being used
+        virtual bool isWindowSet(void) const { return mWindowSet; }
+        /// Gets the window clip planes, only applicable if isWindowSet == true
+        const std::vector<Plane>& getWindowPlanes(void) const;
+
+        /** Overridden from MovableObject */
+        Real getBoundingRadius(void) const;
+		/** Get the auto tracking target for this camera, if any. */
+        SceneNode* getAutoTrackTarget(void) const { return mAutoTrackTarget; }
+		/** Get the auto tracking offset for this camera, if it is auto tracking. */
+		const Vector3& getAutoTrackOffset(void) const { return mAutoTrackOffset; }
+		
+        /** Get the last viewport which was attached to this camera. 
+        @note This is not guaranteed to be the only viewport which is
+        using this camera, just the last once which was created referring
+        to it.
+        */
+        Viewport* getViewport(void) const {return mLastViewport;}
+        /** Notifies this camera that a viewport is using it.*/
+        void _notifyViewport(Viewport* viewport) {mLastViewport = viewport;}
+
+        /** If set to true a vieport that owns this frustum will be able to 
+            recalculate the aspect ratio whenever the frustum is resized.
+        @remarks
+            You should set this to true only if the frustum / camera is used by 
+            one viewport at the same time. Otherwise the aspect ratio for other 
+            viewports may be wrong.
+        */    
+        void setAutoAspectRatio(bool autoratio);
+
+        /** Retreives if AutoAspectRatio is currently set or not
+        */
+        bool getAutoAspectRatio(void) const;
+     };
+
+} // namespace Ogre
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreStringVector.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreStringVector.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreStringVector.h	(revision 1092)
@@ -0,0 +1,41 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _StringVector_H__
+#define _StringVector_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreString.h"
+#include "OgreSharedPtr.h"
+
+
+namespace Ogre {
+
+    typedef std::vector<String> StringVector;
+    typedef SharedPtr<StringVector> StringVectorPtr;
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreTextAreaOverlayElement.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreTextAreaOverlayElement.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreTextAreaOverlayElement.h	(revision 1092)
@@ -0,0 +1,261 @@
+/*-------------------------------------------------------------------------
+This source file is a part of OGRE
+(Object-oriented Graphics Rendering Engine)
+
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This library is free software; you can redistribute it and/or modify it
+under the terms of the GNU Lesser General Public License (LGPL) as 
+published by the Free Software Foundation; either version 2.1 of the 
+License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful, but 
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
+or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public 
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License 
+along with this library; if not, write to the Free Software Foundation, 
+Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA or go to
+http://www.gnu.org/copyleft/lesser.txt
+-------------------------------------------------------------------------*/
+
+#ifndef _TextAreaOverlayElement_H__
+#define _TextAreaOverlayElement_H__
+
+#include "OgreOverlayElement.h"
+#include "OgreFont.h"
+
+namespace Ogre
+{
+    /** OverlayElement representing a flat, single-material (or transparent) panel which can contain other elements.
+    @remarks
+    This class subclasses OverlayContainer because it can contain other elements. Like other
+    containers, if hidden it's contents are also hidden, if moved it's contents also move etc. 
+    The panel itself is a 2D rectangle which is either completely transparent, or is rendered 
+    with a single material. The texture(s) on the panel can be tiled depending on your requirements.
+    @par
+    This component is suitable for backgrounds and grouping other elements. Note that because
+    it has a single repeating material it cannot have a discrete border (unless the texture has one and
+    the texture is tiled only once). For a bordered panel, see it's subclass BorderTextAreaOverlayElement.
+    @par
+    Note that the material can have all the usual effects applied to it like multiple texture
+    layers, scrolling / animated textures etc. For multiple texture layers, you have to set 
+    the tiling level for each layer.
+    */
+    class _OgreExport TextAreaOverlayElement : public OverlayElement
+    {
+    public:
+        enum Alignment
+        {
+            Left,
+            Right,
+            Center
+        };
+
+    public:
+        /** Constructor. */
+        TextAreaOverlayElement(const String& name);
+        virtual ~TextAreaOverlayElement();
+
+        virtual void initialise(void);
+        void setCaption( const String& caption );
+        const String& getCaption() const;
+
+        void setCharHeight( Real height );
+        Real getCharHeight() const;
+
+        void setSpaceWidth( Real width );
+        Real getSpaceWidth() const;
+
+        void setFontName( const String& font );
+        const String& getFontName() const;
+
+        /** See OverlayElement. */
+        virtual const String& getTypeName(void) const;
+        /** See Renderable. */
+        void getRenderOperation(RenderOperation& op);
+        /** Overridden from OverlayElement */
+        void setMaterialName(const String& matName);
+
+        /** Sets the colour of the text. 
+        @remarks
+            This method establishes a constant colour for 
+            the entire text. Also see setColourBottom and 
+            setColourTop which allow you to set a colour gradient.
+        */
+        void setColour(const ColourValue& col);
+
+        /** Gets the colour of the text. */
+        const ColourValue& getColour(void) const;
+        /** Sets the colour of the bottom of the letters.
+        @remarks
+            By setting a separate top and bottom colour, you
+            can create a text area which has a graduated colour
+            effect to it.
+        */
+        void setColourBottom(const ColourValue& col);
+        /** Gets the colour of the bottom of the letters. */
+        const ColourValue& getColourBottom(void) const;
+        /** Sets the colour of the top of the letters.
+        @remarks
+            By setting a separate top and bottom colour, you
+            can create a text area which has a graduated colour
+            effect to it.
+        */
+        void setColourTop(const ColourValue& col);
+        /** Gets the colour of the top of the letters. */
+        const ColourValue& getColourTop(void) const;
+
+        inline void setAlignment( Alignment a )
+        {
+            mAlignment = a;
+			mGeomPositionsOutOfDate = true;
+        }
+        inline Alignment getAlignment() const
+        {
+            return mAlignment;
+        }
+
+        /** Overridden from OverlayElement */
+        void setMetricsMode(GuiMetricsMode gmm);
+
+        /** Overridden from OverlayElement */
+        void _update(void);
+
+        //-----------------------------------------------------------------------------------------
+        /** Command object for setting the caption.
+                @see ParamCommand
+        */
+        class _OgrePrivate CmdCaption : public ParamCommand
+        {
+        public:
+            String doGet( const void* target ) const;
+            void doSet( void* target, const String& val );
+        };
+        //-----------------------------------------------------------------------------------------
+        /** Command object for setting the char height.
+                @see ParamCommand
+        */
+        class _OgrePrivate CmdCharHeight : public ParamCommand
+        {
+        public:
+            String doGet( const void* target ) const;
+            void doSet( void* target, const String& val );
+        };
+        //-----------------------------------------------------------------------------------------
+        /** Command object for setting the width of a space.
+                @see ParamCommand
+        */
+        class _OgrePrivate CmdSpaceWidth : public ParamCommand
+        {
+        public:
+            String doGet( const void* target ) const;
+            void doSet( void* target, const String& val );
+        };
+        //-----------------------------------------------------------------------------------------
+        /** Command object for setting the caption.
+                @see ParamCommand
+        */
+        class _OgrePrivate CmdFontName : public ParamCommand
+        {
+        public:
+            String doGet( const void* target ) const;
+            void doSet( void* target, const String& val );
+        };
+        //-----------------------------------------------------------------------------------------
+        /** Command object for setting the top colour.
+                @see ParamCommand
+        */
+        class _OgrePrivate CmdColourTop : public ParamCommand
+        {
+        public:
+            String doGet( const void* target ) const;
+            void doSet( void* target, const String& val );
+        };
+        //-----------------------------------------------------------------------------------------
+        /** Command object for setting the bottom colour.
+                @see ParamCommand
+        */
+        class _OgrePrivate CmdColourBottom : public ParamCommand
+        {
+        public:
+            String doGet( const void* target ) const;
+            void doSet( void* target, const String& val );
+        };
+        //-----------------------------------------------------------------------------------------
+        /** Command object for setting the constant colour.
+                @see ParamCommand
+        */
+        class _OgrePrivate CmdColour : public ParamCommand
+        {
+        public:
+            String doGet( const void* target ) const;
+            void doSet( void* target, const String& val );
+        };
+        //-----------------------------------------------------------------------------------------
+        /** Command object for setting the alignment.
+                @see ParamCommand
+        */
+        class _OgrePrivate CmdAlignment : public ParamCommand
+        {
+        public:
+            String doGet( const void* target ) const;
+            void doSet( void* target, const String& val );
+        };
+
+    protected:
+        /// The text alignment
+        Alignment mAlignment;
+
+        /// Flag indicating if this panel should be visual or just group things
+        bool mTransparent;
+
+        /// Render operation
+        RenderOperation mRenderOp;
+
+        /// Method for setting up base parameters for this class
+        void addBaseParameters(void);
+
+        static String msTypeName;
+
+        // Command objects
+        static CmdCharHeight msCmdCharHeight;
+        static CmdSpaceWidth msCmdSpaceWidth;
+        static CmdFontName msCmdFontName;
+        static CmdColour msCmdColour;
+        static CmdColourTop msCmdColourTop;
+        static CmdColourBottom msCmdColourBottom;
+        static CmdAlignment msCmdAlignment;
+
+
+        FontPtr mpFont;
+        Real mCharHeight;
+        ushort mPixelCharHeight;
+        Real mSpaceWidth;
+        ushort mPixelSpaceWidth;
+        size_t mAllocSize;
+		Real mViewportAspectCoef;
+
+        /// Colours to use for the vertices
+        ColourValue mColourBottom;
+        ColourValue mColourTop;
+        bool mColoursChanged;
+
+
+        /// Internal method to allocate memory, only reallocates when necessary
+        void checkMemoryAllocation( size_t numChars );
+        /// Inherited function
+        virtual void updatePositionGeometry();
+		/// Inherited function
+		virtual void updateTextureGeometry();
+        /// Updates vertex colours
+        virtual void updateColours(void);
+    };
+}
+
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreException.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreException.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreException.h	(revision 1092)
@@ -0,0 +1,216 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __Exception_H_
+#define __Exception_H_
+
+// Precompiler options
+#include "OgrePrerequisites.h"
+
+#include "OgreString.h"
+
+#define OGRE_EXCEPT( num, desc, src ) throw( Ogre::Exception( num, desc, src, __FILE__, __LINE__ ) )
+
+// Stack unwinding options
+// OgreUnguard and OgreUnguardRet are deprecated
+#if OGRE_STACK_UNWINDING == 1
+#   if OGRE_COMPILER != OGRE_COMPILER_BORL
+#       define OgreGuard( a ) Ogre::AutomaticGuardUnguard _auto_guard_object( (a) )
+#   else
+#       define OgreGuard( a ) Ogre::AutomaticGuardUnguard _auto_guard_object( __FUNC__ )
+#   endif
+
+#   define OgreUnguard() 
+#   define OgreUnguardRet( a ) return a
+
+#else
+#   define OgreGuard( a )
+#   define OgreUnguard()
+#   define OgreUnguardRet( a ) return a
+
+#endif
+
+// Backwards compatibility with old assert mode definitions
+#if OGRE_RELEASE_ASSERT == 1
+#   define OGRE_ASSERT_MODE 1
+#endif
+
+// Check for OGRE assert mode
+
+// RELEASE_EXCEPTIONS mode
+#if OGRE_ASSERT_MODE == 1
+#   ifdef _DEBUG
+#       define OgreAssert( a, b ) assert( (a) && (b) )
+
+#   else
+#       if OGRE_COMP != OGRE_COMPILER_BORL
+#           define OgreAssert( a, b ) if( !(a) ) OGRE_EXCEPT( Ogre::Exception::ERR_RT_ASSERTION_FAILED, (b), "no function info")
+#       else
+#           define OgreAssert( a, b ) if( !(a) ) OGRE_EXCEPT( Ogre::Exception::ERR_RT_ASSERTION_FAILED, (b), __FUNC__ )
+#       endif
+
+#   endif
+
+// EXCEPTIONS mode
+#elif OGRE_ASSERT_MODE == 2
+#   if OGRE_COMP != OGRE_COMPILER_BORL
+#       define OgreAssert( a, b ) if( !(a) ) OGRE_EXCEPT( Ogre::Exception::ERR_RT_ASSERTION_FAILED, (b), "no function info")
+#   else
+#       define OgreAssert( a, b ) if( !(a) ) OGRE_EXCEPT( Ogre::Exception::ERR_RT_ASSERTION_FAILED, (b), __FUNC__ )
+#   endif
+
+// STANDARD mode
+#else
+#   define OgreAssert( a, b ) assert( (a) && (b) )
+
+#endif
+
+#define OGRE_CALL_STACK_DEPTH 512
+
+namespace Ogre {
+    /** When thrown, provides information about an error that has occurred inside the engine.
+        @remarks
+            OGRE never uses return values to indicate errors. Instead, if an
+            error occurs, an exception is thrown, and this is the object that
+            encapsulates the detail of the problem. The application using
+            OGRE should always ensure that the exceptions are caught, so all
+            OGRE engine functions should occur within a
+            try{} catch(Ogre::Exception& e) {} block.
+        @par
+            The user application should never create any instances of this
+            object unless it wishes to unify its error handling using the
+            same object.
+    */
+    class _OgreExport Exception
+    {
+    protected:
+        long line;
+        int number;
+        String description;
+        String source;
+        String file;
+        ushort stackDepth;
+        static Exception* last;
+
+        static String msFunctionStack[ OGRE_CALL_STACK_DEPTH ];
+        static ushort   msStackDepth;
+    public:
+        /** Static definitions of error codes.
+            @todo
+                Add many more exception codes, since we want the user to be able
+                to catch most of them.
+        */
+        enum ExceptionCodes {
+            UNIMPLEMENTED_FEATURE,
+            ERR_CANNOT_WRITE_TO_FILE,
+            ERR_NO_RENDERSYSTEM_SELECTED,
+            ERR_DIALOG_OPEN_ERROR,
+            ERR_INVALIDPARAMS,
+            ERR_RENDERINGAPI_ERROR,
+            ERR_DUPLICATE_ITEM,
+            ERR_ITEM_NOT_FOUND,
+            ERR_FILE_NOT_FOUND,
+            ERR_INTERNAL_ERROR,
+            ERR_RT_ASSERTION_FAILED
+        };
+
+        /** Default constructor.
+        */
+        Exception( int number, const String& description, const String& source );
+
+        /** Advanced constructor.
+        */
+        Exception( int number, const String& description, const String& source, char* file, long line );
+
+        /** Copy constructor.
+        */
+        Exception(const Exception& rhs);
+
+        /** Assignment operator.
+        */
+        void operator = (const Exception& rhs);
+
+        /** Returns a string with the full description of this error.
+            @remarks
+                The description contains the error number, the description
+                supplied by the thrower, what routine threw the exception,
+                and will also supply extra platform-specific information
+                where applicable. For example - in the case of a rendering
+                library error, the description of the error will include both
+                the place in which OGRE found the problem, and a text
+                description from the 3D rendering library, if available.
+        */
+        String getFullDescription(void) const;
+
+        /** Gets the error code.
+        */
+        int getNumber(void) const throw();
+
+        /** Gets the source function.
+        */
+        const String &getSource() const { return source; }
+
+        /** Gets source file name.
+        */
+        const String &getFile() const { return file; }
+
+        /** Gets line number.
+        */
+        long getLine() const { return line; }
+
+		/** Returns a string with only the 'description' field of this exception. Use 
+			getFullDescriptionto get a full description of the error including line number,
+			error number and what function threw the exception.
+        */
+		const String &getDescription(void) const { return description; }
+
+        /** Retrieves a pointer to the last exception created.
+        */
+        static Exception* getLastException(void) throw();
+
+        /** Pushes a function on the stack.
+        */
+        static void _pushFunction( const String& strFuncName ) throw();
+        /** Pops a function from the stack.
+        */
+        static void _popFunction() throw();
+
+        
+    };
+
+    /** Internal class. Objects will automatically push/pop the function name for unwinding. */
+    class _OgreExport AutomaticGuardUnguard {
+    public:
+        AutomaticGuardUnguard(const String& funcName) throw()
+        {
+            Exception::_pushFunction(funcName);
+        }
+        ~AutomaticGuardUnguard() throw()
+        {
+            Exception::_popFunction();
+        }
+    };
+
+} // Namespace Ogre
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreStringConverter.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreStringConverter.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreStringConverter.h	(revision 1092)
@@ -0,0 +1,222 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __StringConverter_H__
+#define __StringConverter_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreMath.h"
+#include "OgreString.h"
+#include "OgreStringVector.h"
+
+namespace Ogre {
+
+    /** Class for converting the core Ogre data types to/from Strings.
+    @remarks
+        The code for converting values to and from strings is here as a separate
+        class to avoid coupling String to other datatypes (and vice-versa) which reduces
+        compilation dependency: important given how often the core types are used.
+    @par
+        This class is mainly used for parsing settings in text files. External applications
+        can also use it to interface with classes which use the StringInterface template
+        class.
+    @par
+        The String formats of each of the major types is listed with the methods. The basic types
+        like int and Real just use the underlying C runtime library atof and atoi family methods,
+        however custom types like Vector3, ColourValue and Matrix4 are also supported by this class
+        using custom formats.
+    @author
+        Steve Streeting
+    */
+    class _OgreExport StringConverter
+    {
+    public:
+
+        /** Converts a Real to a String. */
+        static String toString(Real val, unsigned short precision = 6, 
+            unsigned short width = 0, char fill = ' ', 
+            std::ios::fmtflags flags = std::ios::fmtflags(0) );
+        /** Converts a Radian to a String. */
+        static String toString(Radian val, unsigned short precision = 6, 
+            unsigned short width = 0, char fill = ' ', 
+            std::ios::fmtflags flags = std::ios::fmtflags(0) )
+        {
+            return toString(val.valueAngleUnits(), precision, width, fill, flags);
+        }
+        /** Converts a Degree to a String. */
+        static String toString(Degree val, unsigned short precision = 6, 
+            unsigned short width = 0, char fill = ' ', 
+            std::ios::fmtflags flags = std::ios::fmtflags(0) )
+        {
+            return toString(val.valueAngleUnits(), precision, width, fill, flags);
+        }
+        /** Converts an int to a String. */
+        static String toString(int val, unsigned short width = 0, 
+            char fill = ' ', 
+            std::ios::fmtflags flags = std::ios::fmtflags(0) );
+#if OGRE_ARCH_TYPE == OGRE_ARCHITECTURE_64 || OGRE_PLATFORM == OGRE_PLATFORM_APPLE
+        /** Converts an unsigned int to a String. */
+        static String toString(unsigned int val, 
+            unsigned short width = 0, char fill = ' ', 
+            std::ios::fmtflags flags = std::ios::fmtflags(0) );
+        /** Converts a size_t to a String. */
+        static String toString(size_t val, 
+            unsigned short width = 0, char fill = ' ', 
+            std::ios::fmtflags flags = std::ios::fmtflags(0) );
+#else
+        /** Converts a size_t to a String. */
+        static String toString(size_t val, 
+            unsigned short width = 0, char fill = ' ', 
+            std::ios::fmtflags flags = std::ios::fmtflags(0) );
+        /** Converts an unsigned long to a String. */
+        static String toString(unsigned long val, 
+            unsigned short width = 0, char fill = ' ', 
+            std::ios::fmtflags flags = std::ios::fmtflags(0) );
+#endif
+        /** Converts a long to a String. */
+        static String toString(long val, 
+            unsigned short width = 0, char fill = ' ', 
+            std::ios::fmtflags flags = std::ios::fmtflags(0) );
+        /** Converts a boolean to a String. 
+        @param yesNo If set to true, result is 'yes' or 'no' instead of 'true' or 'false'
+        */
+        static String toString(bool val, bool yesNo = false);
+        /** Converts a Vector3 to a String. 
+        @remarks
+            Format is "x y z" (i.e. 3x Real values, space delimited)
+        */
+        static String toString(const Vector3& val);
+        /** Converts a Matrix3 to a String. 
+        @remarks
+            Format is "00 01 02 10 11 12 20 21 22" where '01' means row 0 column 1 etc.
+        */
+        static String toString(const Matrix3& val);
+        /** Converts a Matrix4 to a String. 
+        @remarks
+            Format is "00 01 02 03 10 11 12 13 20 21 22 23 30 31 32 33" where 
+            '01' means row 0 column 1 etc.
+        */
+        static String toString(const Matrix4& val);
+        /** Converts a Quaternion to a String. 
+        @remarks
+            Format is "x y z w" (i.e. 4x Real values, space delimited)
+        */
+        static String toString(const Quaternion& val);
+        /** Converts a ColourValue to a String. 
+        @remarks
+            Format is "r g b a" (i.e. 4x Real values, space delimited). 
+        */
+        static String toString(const ColourValue& val);
+        /** Converts a StringVector to a string.
+        @remarks
+            Strings must not contain spaces since space is used as a delimeter in
+            the output.
+        */
+        static String toString(const StringVector& val);
+
+        /** Converts a String to a Real. 
+        @returns
+            0.0 if the value could not be parsed, otherwise the Real version of the String.
+        */
+        static Real parseReal(const String& val);
+        /** Converts a String to a Angle. 
+        @returns
+            0.0 if the value could not be parsed, otherwise the Angle version of the String.
+        */
+        static inline Radian parseAngle(const String& val) {
+			return Angle(parseReal(val));
+		}
+        /** Converts a String to a whole number. 
+        @returns
+            0.0 if the value could not be parsed, otherwise the numeric version of the String.
+        */
+        static int parseInt(const String& val);
+        /** Converts a String to a whole number. 
+        @returns
+            0.0 if the value could not be parsed, otherwise the numeric version of the String.
+        */
+        static unsigned int parseUnsignedInt(const String& val);
+        /** Converts a String to a whole number. 
+        @returns
+            0.0 if the value could not be parsed, otherwise the numeric version of the String.
+        */
+        static long parseLong(const String& val);
+        /** Converts a String to a whole number. 
+        @returns
+            0.0 if the value could not be parsed, otherwise the numeric version of the String.
+        */
+        static unsigned long parseUnsignedLong(const String& val);
+        /** Converts a String to a boolean. 
+        @remarks
+            Accepts 'true' or 'false' as input.
+        */
+        static bool parseBool(const String& val);
+        /** Parses a Vector3 out of a String.
+        @remarks
+            Format is "x y z" ie. 3 Real components, space delimited. Failure to parse returns
+            Vector3::ZERO.
+        */
+        static Vector3 parseVector3(const String& val);
+        /** Parses a Matrix3 out of a String.
+        @remarks
+            Format is "00 01 02 10 11 12 20 21 22" where '01' means row 0 column 1 etc.
+            Failure to parse returns Matrix3::IDENTITY.
+        */
+        static Matrix3 parseMatrix3(const String& val);
+        /** Parses a Matrix4 out of a String.
+        @remarks
+            Format is "00 01 02 03 10 11 12 13 20 21 22 23 30 31 32 33" where 
+            '01' means row 0 column 1 etc. Failure to parse returns Matrix4::IDENTITY.
+        */
+        static Matrix4 parseMatrix4(const String& val);
+        /** Parses a Quaternion out of a String. 
+        @remarks
+            Format is "x y z w" (i.e. 4x Real values, space delimited). 
+            Failure to parse returns Quaternion::IDENTITY.
+
+        */
+        static Quaternion parseQuaternion(const String& val);
+        /** Parses a ColourValue out of a String. 
+        @remarks
+            Format is "r g b a" (i.e. 4x Real values, space delimited), or "r g b" which implies
+            an alpha value of 1.0 (opaque). Failure to parse returns ColourValue::Black.
+        */
+        static ColourValue parseColourValue(const String& val);
+
+        /** Pareses a StringVector from a string.
+        @remarks
+            Strings must not contain spaces since space is used as a delimeter in
+            the output.
+        */
+        static StringVector parseStringVector(const String& val);
+    };
+
+
+}
+
+
+
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreFactoryObj.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreFactoryObj.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreFactoryObj.h	(revision 1092)
@@ -0,0 +1,61 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _FactoryObj_H__
+#define _FactoryObj_H__
+
+#include "OgrePrerequisites.h"
+
+namespace Ogre {
+
+    /** Abstract factory class. Does nothing by itself, but derived classes can add
+        functionality.
+    */
+    template< typename T > class FactoryObj
+    {
+    public:
+        virtual ~FactoryObj() {};
+
+        /** Returns the factory type.
+            @return
+                The factory type.
+        */
+        virtual const String& getType() const = 0;
+
+        /** Creates a new object.
+        @param name Name of the object to create
+        @return
+            An object created by the factory. The type of the object depends on
+            the factory.
+        */
+        virtual T* createInstance( const String& name ) = 0;    
+        /** Destroys an object which was created by this factory.
+        @param ptr Pointer to the object to destroy
+        */
+        virtual void destroyInstance( T* ) = 0;    
+    };
+
+} // namespace
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreGpuProgramUsage.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreGpuProgramUsage.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreGpuProgramUsage.h	(revision 1092)
@@ -0,0 +1,125 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __GpuProgramUsage_H__
+#define __GpuProgramUsage_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreGpuProgram.h"
+
+
+namespace Ogre 
+{
+    /** This class makes the usage of a vertex and fragment programs (low-level or high-level), 
+        with a given set of parameters, explicit.
+    @remarks
+        Using a vertex or fragment program can get fairly complex; besides the fairly rudimentary
+        process of binding a program to the GPU for rendering, managing usage has few
+        complications, such as:
+        <ul>
+        <li>Programs can be high level (e.g. Cg, RenderMonkey) or low level (assembler). Using
+        either should be relatively seamless, although high-level programs give you the advantage
+        of being able to use named parameters, instead of just indexed registers</li>
+        <li>Programs and parameters can be shared between multiple usages, in order to save
+        memory</li>
+        <li>When you define a user of a program, such as a material, you often want to be able to
+        set up the definition but not load / compile / assemble the program at that stage, because
+        it is not needed just yet. The program should be loaded when it is first needed, or
+        earlier if specifically requested. The program may not be defined at this time, you
+        may want to have scripts that can set up the definitions independent of the order in which
+        those scripts are loaded.</li>
+        </ul>
+        This class packages up those details so you don't have to worry about them. For example,
+        this class lets you define a high-level program and set up the parameters for it, without
+        having loaded the program (which you normally could not do). When the program is loaded and
+        compiled, this class will then validate the parameters you supplied earlier and turn them
+        into runtime parameters.
+    @par
+        Just incase it wasn't clear from the above, this class provides linkage to both 
+        GpuProgram and HighLevelGpuProgram, despite its name.
+    */
+    class _OgreExport GpuProgramUsage
+    {
+    protected:
+        GpuProgramType mType;
+        // The program link
+        GpuProgramPtr mProgram;
+
+        /// program parameters
+        GpuProgramParametersSharedPtr mParameters;
+
+
+    public:
+        /** Default constructor.
+        @param gptype The type of program to link to
+        */
+        GpuProgramUsage(GpuProgramType gptype);
+
+		/** Copy constructor */
+		GpuProgramUsage(const GpuProgramUsage& rhs);
+
+        /** Gets the type of program we're trying to link to. */
+        GpuProgramType getType(void) const { return mType; }
+
+		/** Sets the name of the program to use. 
+        @param name The name of the program to use
+        @param resetParams
+            If true, this will create a fresh set of parameters from the
+            new program being linked, so if you had previously set parameters
+            you will have to set them again. If you set this to false, you must
+            be absolutely sure that the parameters match perfectly, and in the
+            case of named parameters refers to the indexes underlying them, 
+            not just the names.
+        */
+		void setProgramName(const String& name, bool resetParams = true);
+		/** Sets the program to use.
+        @remarks
+            Note that this will create a fresh set of parameters from the
+            new program being linked, so if you had previously set parameters
+            you will have to set them again.
+        */
+        void setProgram(GpuProgramPtr& prog);
+		/** Gets the program being used. */
+        const GpuProgramPtr& getProgram() const { return mProgram; }
+		/** Gets the program being used. */
+        const String& getProgramName(void) const { return mProgram->getName(); }
+
+        /** Sets the program parameters that should be used; because parameters can be
+            shared between multiple usages for efficiency, this method is here for you
+            to register externally created parameter objects. Otherwise, the parameters
+            will be created for you when a program is linked.
+        */
+        void setParameters(GpuProgramParametersSharedPtr params);
+        /** Gets the parameters being used here. 
+        */
+        GpuProgramParametersSharedPtr getParameters(void);
+
+        /// Load this usage (and ensure program is loaded)
+        void _load(void);
+        /// Unload this usage 
+        void _unload(void);
+
+    };
+}
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreErrorDialog.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreErrorDialog.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreErrorDialog.h	(revision 1092)
@@ -0,0 +1,64 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __ERRORDIALOG_H__
+#define __ERRORDIALOG_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreString.h"
+
+namespace Ogre {
+
+    /** Class for displaying the error dialog if Ogre fails badly.
+    */
+    class _OgreExport ErrorDialog
+    {
+    public:
+    	virtual ~ErrorDialog();
+    	
+        /** Displays the error dialog.
+            @param
+                errorMessage The error message which has caused the failure.
+            @param
+                logName Optional name of the log to display in the detail
+                pane.
+        */
+        virtual void display(const String& errorMessage, String logName = "") = 0;
+
+    };
+
+    /** Defines the interface a platform-specific library must implement.
+        @remarks
+            Any library (.dll, .so) wishing to implement a platform-specific
+            version of this dialog must export the symbol 'createErrorDialog'
+            with the signature void
+            createPlatformErrorDialog(ErrorDialog** ppDlg)
+    */
+    typedef void (*DLL_CREATEERRORDIALOG)(ErrorDialog** ppDlg);
+}
+
+
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreEventListeners.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreEventListeners.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreEventListeners.h	(revision 1092)
@@ -0,0 +1,147 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+/***************************************************************************
+OgreEventListeners.h  -  
+	This file contains definatitions of all the different EventListeners.
+	They are all included in 1 file, due to their small size.
+
+	They all inherit from an abstract base listener called EventListener.
+
+	So far we have the following listeners:
+		MouseListener - handles mouse buttons clicked, pressed released,
+						and mouse entered,exited, 
+		MouseMotionListener - handles mouse move and mouse drag
+		ActionListener - Used for buttons, when pressed and released.
+
+-------------------
+begin                : Nov 19 2002
+copyright            : (C) 2002 by Kenny Sabir
+email                : kenny@sparksuit.com
+***************************************************************************/
+
+#ifndef __MouseListener_H__
+#define __MouseListener_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreMouseEvent.h"
+
+namespace Ogre {
+
+    class _OgreExport EventListener 
+    {
+	};
+    
+	/** Specialised EventListener for discrete mouse events.
+	@remarks
+		This excludes mouse motion (this is not a discrete event), see
+		MouseMotionListener for that.
+	*/
+	class _OgreExport MouseListener : public EventListener
+    {
+	public :
+		/**
+		 * Invoked when the mouse has been clicked on a component.
+		 */
+		virtual void mouseClicked(MouseEvent* e) = 0;
+		/**
+		 * Invoked when the mouse enters a component.
+		 */
+		virtual void mouseEntered(MouseEvent* e) = 0;
+		/**
+		 * Invoked when the mouse exits a component.
+		 */
+		virtual void mouseExited(MouseEvent* e) = 0;
+
+		/**
+		 * Invoked when a mouse button has been pressed on a component.
+		 */
+		virtual void mousePressed(MouseEvent* e) = 0;
+		/**
+		 * Invoked when a mouse button has been released on a component.
+		 */
+		virtual void mouseReleased(MouseEvent* e) = 0;
+
+        virtual void mouseDragEntered(MouseEvent* e) {};
+        virtual void mouseDragExited(MouseEvent* e) {};
+        virtual void mouseDragDropped(MouseEvent* e) {};
+
+    };
+
+
+	class _OgreExport KeyListener : public EventListener
+    {
+    protected:
+
+	public :
+		/**
+		 * Invoked when the key has been clicked on a component.
+		 */
+		virtual void keyClicked(KeyEvent* e) = 0;
+		/**
+		 * Invoked when a key button has been pressed on a component.
+		 */
+		virtual void keyPressed(KeyEvent* e) = 0;
+		/**
+		 * Invoked when a key button has been released on a component.
+		 */
+		virtual void keyReleased(KeyEvent* e) = 0;
+		/**
+		 * Invoked when the target receives the keyboard focus
+		 */
+        virtual void keyFocusIn(KeyEvent* e) {}
+		/**
+		 * Invoked when the target loses the keyboard focus
+		 */
+        virtual void keyFocusOut(KeyEvent* e) {}
+
+    };
+
+	/** Specialised EventListener for mouse motion. */
+	class _OgreExport MouseMotionListener : public EventListener
+    {
+    protected:
+
+	public :
+		/**
+		 * Invoked when the mouse has been moved
+		 */
+		virtual void mouseMoved(MouseEvent* e) = 0;
+		/**
+		 * Invoked when the mouse dragged
+		 */
+		virtual void mouseDragged(MouseEvent* e) = 0;
+        /**
+         * sent to target
+         */
+        virtual void mouseDragMoved(MouseEvent* e) {};
+    };
+
+
+
+}
+
+
+#endif  // __MouseListener_H__
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreLogManager.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreLogManager.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreLogManager.h	(revision 1092)
@@ -0,0 +1,186 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __LogManager_H__
+#define __LogManager_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreLog.h"
+#include "OgreSingleton.h"
+#include "OgreString.h"
+
+namespace Ogre {
+
+	/** The log listener is here to provide alternate means to write out 
+	    log data. This is helpful if you want to redirect the log output
+		for example to a gui window for an editing application.
+	*/
+	class _OgreExport LogListener
+	{
+	public:
+		/** Called by the log system whenever a message needs to be output.
+		*/
+		virtual void write( const String& name,
+							const String& message, 
+							LogMessageLevel lml = LML_NORMAL, 
+							bool maskDebug = false ) = 0;
+		virtual ~LogListener();
+	};
+
+    /** The log manager handles the creation and retrieval of logs for the
+        application.
+        @remarks
+            This class will create new log files and will retrieve instances
+            of existing ones. Other classes wishing to log output can either
+            create a fresh log or retrieve an existing one to output to.
+            One log is the default log, and is the one written to when the
+            logging methods of this class are called.
+    */
+    class _OgreExport LogManager : public Singleton<LogManager>
+    {
+		friend class Log;
+
+	protected:
+
+		/** Internal helper method to reroute logging messages to the 
+			new listener system, while maintaining full backward compatiblity.
+		*/
+		void _routeMessage(	const String& name,
+							const String& message, 
+							LogMessageLevel lml = LML_NORMAL, 
+							bool maskDebug = false );
+
+        typedef std::map<String, Log*, std::less<String> >	LogList;
+		typedef std::vector<LogListener*>					LogListenerList;
+
+        /// A list of all the logs the manager can access
+        LogList mLogs;
+
+        /// The default log to which output is done
+        Log* mDefaultLog;
+
+		/// A list of all registered external log listeners.
+		LogListenerList mListeners;
+
+    public:
+        LogManager();
+        ~LogManager();
+
+		/** Adds a new listener for the logging system.
+		    Ogre does not assume ownership and does not destroy the listener
+			at application shutdown.
+		*/
+		void addListener( LogListener * listener );
+		
+		/** Removes a previously registered listener again, and
+			returns ownership of the listener to the caller, who
+			is responsible for destroying the listener again.
+		*/
+		void removeListener( LogListener * listener );
+
+        /** Creates a new log with the given name.
+            @param
+                name The name to give the log e.g. 'Ogre.log'
+            @param
+                defaultLog If true, this is the default log output will be
+                sent to if the generic logging methods on this class are
+                used. The first log created is always the default log unless
+                this parameter is set.
+            @param
+                debuggerOutput If true, output to this log will also be
+                routed to the debugger's output window.
+            @param
+                suppressFileOutput If true, this is a logical rather than a physical
+				log and no file output will be written. If you do this you should
+				register a LogListener so log output is not lost.
+        */
+        Log* createLog( const String& name, bool defaultLog = false, bool debuggerOutput = true, 
+			bool suppressFileOutput = false);
+
+        /** Retrieves a log managed by this class.
+        */
+        Log* getLog( const String& name);
+
+        /** Returns a pointer to the default log.
+        */
+        Log* getDefaultLog();
+
+        /** Sets the passed in log as the default log.
+        @returns The previous default log.
+        */
+        Log* setDefaultLog(Log* newLog);
+
+        /** Log a message to the default log.
+        */
+        void logMessage( const String& message, LogMessageLevel lml = LML_NORMAL, 
+            bool maskDebug = false);
+
+        /** Log a message to the default log (signature for backward compatibility).
+        */
+        void logMessage( LogMessageLevel lml, const String& message,  
+			bool maskDebug = false) { logMessage(message, lml, maskDebug); }
+
+		/** Sets the level of detail of the default log.
+        */
+        void setLogDetail(LoggingLevel ll);
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static LogManager& getSingleton(void);
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static LogManager* getSingletonPtr(void);
+
+    };
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreParticleAffector.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreParticleAffector.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreParticleAffector.h	(revision 1092)
@@ -0,0 +1,112 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE 
+	(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under 
+the terms of the GNU Lesser General Public License as published by the Free Software 
+Foundation; either version 2 of the License, or (at your option) any later 
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT 
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with 
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple 
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to 
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __ParticleAffector_H__
+#define __ParticleAffector_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreString.h"
+#include "OgreStringInterface.h"
+
+
+namespace Ogre {
+
+    /** Abstract class defining the interface to be implemented by particle affectors.
+    @remarks
+        Particle affectors modify particles in a particle system over their lifetime. They can be
+        grouped into types, e.g. 'vector force' affectors, 'fader' affectors etc; each type will 
+        modify particles in a different way, using different parameters.
+    @par
+        Because there are so many types of affectors you could use, OGRE chooses not to dictate
+        the available types. It comes with some in-built, but allows plugins or applications to extend the affector types available.
+        This is done by subclassing ParticleAffector to have the appropriate emission behaviour you want,
+        and also creating a subclass of ParticleAffectorFactory which is responsible for creating instances 
+        of your new affector type. You register this factory with the ParticleSystemManager using
+        addAffectorFactory, and from then on affectors of this type can be created either from code or through
+        text particle scripts by naming the type.
+    @par
+        This same approach is used for ParticleEmitters (which are the source of particles in a system).
+        This means that OGRE is particularly flexible when it comes to creating particle system effects,
+        with literally infinite combinations of affector and affector types, and paramters within those
+        types.
+    */
+    class _OgreExport ParticleAffector : public StringInterface
+    {
+    protected:
+        /// Name of the type of affector, MUST be initialised by subclasses
+        String mType;
+
+        /** Internal method for setting up the basic parameter definitions for a subclass. 
+        @remarks
+            Because StringInterface holds a dictionary of parameters per class, subclasses need to
+            call this to ask the base class to add it's parameters to their dictionary as well.
+            Can't do this in the constructor because that runs in a non-virtual context.
+        @par
+            The subclass must have called it's own createParamDictionary before calling this method.
+        */
+        void addBaseParameters(void) { /* actually do nothing - for future possible use */ }
+
+        ParticleSystem* mParent;
+    public:
+        ParticleAffector(ParticleSystem* parent): mParent(parent) {}
+
+        /** Virtual destructor essential. */
+        virtual ~ParticleAffector();
+
+        /** Method called to allow the affector to initialize all newly created particles in the system.
+        @remarks
+            This is where the affector gets the chance to initialize it's effects to the particles of a system.
+            The affector is expected to initialize some or all of the particles in the system
+            passed to it, depending on the affector's approach.
+        @param
+            pParticle Pointer to a Particle to initialize.
+        */
+		virtual void _initParticle(Particle* pParticle) { /* by default do nothing */ }
+
+        /** Method called to allow the affector to 'do it's stuff' on all active particles in the system.
+        @remarks
+            This is where the affector gets the chance to apply it's effects to the particles of a system.
+            The affector is expected to apply it's effect to some or all of the particles in the system
+            passed to it, depending on the affector's approach.
+        @param
+            pSystem Pointer to a ParticleSystem to affect.
+        @param
+            timeElapsed The number of seconds which have elapsed since the last call.
+        */
+        virtual void _affectParticles(ParticleSystem* pSystem, Real timeElapsed) = 0;
+
+        /** Returns the name of the type of affector. 
+        @remarks
+            This property is useful for determining the type of affector procedurally so another
+            can be created.
+        */
+        const String &getType(void) const { return mType; }
+
+    };
+
+}
+
+
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreIteratorWrappers.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreIteratorWrappers.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreIteratorWrappers.h	(revision 1092)
@@ -0,0 +1,319 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __IteratorWrappers_H__
+#define __IteratorWrappers_H__
+
+#include "OgrePrerequisites.h"
+
+namespace Ogre {
+
+    /** Wraps iteration over a vector.
+    @remarks
+        This class is here just to allow clients to iterate over an internal
+        vector of a class without having to have access to the vector itself
+        (typically to iterate you need both the iterator and the end() iterator
+        to test for the end condition, which is messy).
+        No updates are allowed through this interface, it is purely for 
+        iterating and reading.
+    @par
+        Note that like STL iterators, these iterators are only valid whilst no 
+        updates are made to the underlying collection. You should not attempt to
+        use this iterator if a change is made to the collection. In fact, treat this
+        iterator as a transient object, do NOT store it and try to use it repeatedly.
+    */
+    template <class T>
+    class VectorIterator
+    {
+    private:
+        typename T::iterator mCurrent;
+        typename T::iterator mEnd;
+		/// Private constructor since only the parameterised constructor should be used
+        VectorIterator() {};
+    public:
+        typedef typename T::value_type ValueType;
+
+        /** Constructor.
+        @remarks
+            Provide a start and end iterator to initialise.
+        */
+        VectorIterator(typename T::iterator start, typename T::iterator end)
+            : mCurrent(start), mEnd(end)
+        {
+        }
+
+        /** Returns true if there are more items in the collection. */
+        bool hasMoreElements(void) const
+        {
+            return mCurrent != mEnd;
+        }
+
+        /** Returns the next element in the collection, and advances to the next. */
+        typename T::value_type getNext(void)
+        {
+            return *mCurrent++;
+        }
+        /** Returns the next element in the collection, without advancing to the next. */
+        typename T::value_type peekNext(void)
+        {
+            return *mCurrent;
+        }
+        /** Returns a pointer to the next element in the collection, without advancing to the next afterwards. */
+        typename T::pointer peekNextPtr(void)
+        {
+            return &(*mCurrent);
+        }
+        /** Moves the iterator on one element. */
+        void moveNext(void)
+        {
+            mCurrent++;
+        }
+
+
+
+    };
+
+    /** Wraps iteration over a map.
+    @remarks
+        This class is here just to allow clients to iterate over an internal
+        map of a class without having to have access to the map itself
+        (typically to iterate you need both the iterator and the end() iterator
+        to test for the end condition, which is messy).
+        No updates are allowed through this interface, it is purely for 
+        iterating and reading.
+    @par
+        Note that like STL iterators, these iterators are only valid whilst no 
+        updates are made to the underlying collection. You should not attempt to
+        use this iterator if a change is made to the collection. In fact, treat this
+        iterator as a transient object, do NOT store it and try to use it repeatedly.
+    */
+    template <class T>
+    class MapIterator
+    {
+    private:
+        typename T::iterator mCurrent;
+        typename T::iterator mEnd;
+        /// Private constructor since only the parameterised constructor should be used
+        MapIterator() {};
+    public:
+        typedef typename T::mapped_type MappedType;
+        typedef typename T::key_type KeyType;
+
+        /** Constructor.
+        @remarks
+            Provide a start and end iterator to initialise.
+        */
+        MapIterator(typename T::iterator start, typename T::iterator end)
+            : mCurrent(start), mEnd(end)
+        {
+        }
+
+        /** Returns true if there are more items in the collection. */
+        bool hasMoreElements(void) const
+        {
+            return mCurrent != mEnd;
+        }
+
+        /** Returns the next value element in the collection, and advances to the next. */
+        typename T::mapped_type getNext(void)
+        {
+            return (mCurrent++)->second;
+        }
+        /** Returns the next value element in the collection, without advancing to the next. */
+        typename T::mapped_type peekNextValue(void)
+        {
+            return mCurrent->second;
+        }
+        /** Returns the next key element in the collection, without advancing to the next. */
+        typename T::key_type peekNextKey(void)
+        {
+            return mCurrent->first;
+        }
+        /** Required to overcome intermittent bug */
+ 	    MapIterator<T> & operator=( MapIterator<T> &rhs )
+ 	    {
+ 		    mCurrent = rhs.mCurrent;
+ 		    mEnd = rhs.mEnd;
+ 		    return *this;
+ 	    }
+        /** Returns a pointer to the next value element in the collection, without 
+            advancing to the next afterwards. */
+        typename T::pointer peekNextValuePtr(void)
+        {
+            return &(mCurrent->second);
+        }
+        /** Moves the iterator on one element. */
+        void moveNext(void)
+        {
+            mCurrent++;
+        }
+
+
+
+    };
+    /** Wraps iteration over a const vector.
+    @remarks
+    This class is here just to allow clients to iterate over an internal
+    vector of a class without having to have access to the vector itself
+    (typically to iterate you need both the iterator and the end() iterator
+    to test for the end condition, which is messy).
+    No updates are allowed through this interface, it is purely for 
+    iterating and reading.
+    @par
+    Note that like STL iterators, these iterators are only valid whilst no 
+    updates are made to the underlying collection. You should not attempt to
+    use this iterator if a change is made to the collection. In fact, treat this
+    iterator as a transient object, do NOT store it and try to use it repeatedly.
+    */
+    template <class T>
+    class ConstVectorIterator
+    {
+    private:
+        mutable typename T::const_iterator mCurrent;
+        typename T::const_iterator mEnd;
+        /// Private constructor since only the parameterised constructor should be used
+        ConstVectorIterator() {};
+    public:
+        typedef typename T::value_type ValueType;
+
+        /** Constructor.
+        @remarks
+        Provide a start and end iterator to initialise.
+        */
+        ConstVectorIterator(typename T::const_iterator start, typename T::const_iterator end)
+            : mCurrent(start), mEnd(end)
+        {
+        }
+
+        /** Returns true if there are more items in the collection. */
+        bool hasMoreElements(void) const
+        {
+            return mCurrent != mEnd;
+        }
+
+        /** Returns the next element in the collection, and advances to the next. */
+        typename T::value_type getNext(void)
+        {
+            return *mCurrent++;
+        }
+        /** Returns the next element in the collection, without advancing to the next. */
+        typename T::value_type peekNext(void) const
+        {
+            return *mCurrent;
+        }
+        /** Returns a pointer to the next element in the collection, without advancing to the next afterwards. */
+        typename T::const_pointer peekNextPtr(void) const
+        {
+            return &(*mCurrent);
+        }
+        /** Moves the iterator on one element. */
+        void moveNext(void) const
+        {
+            mCurrent++;
+        }
+
+
+
+    };
+
+    /** Wraps iteration over a const map.
+    @remarks
+    This class is here just to allow clients to iterate over an internal
+    map of a class without having to have access to the map itself
+    (typically to iterate you need both the iterator and the end() iterator
+    to test for the end condition, which is messy).
+    No updates are allowed through this interface, it is purely for 
+    iterating and reading.
+    @par
+    Note that like STL iterators, these iterators are only valid whilst no 
+    updates are made to the underlying collection. You should not attempt to
+    use this iterator if a change is made to the collection. In fact, treat this
+    iterator as a transient object, do NOT store it and try to use it repeatedly.
+    */
+    template <class T>
+    class ConstMapIterator
+    {
+    private:
+        mutable typename T::const_iterator mCurrent;
+        typename T::const_iterator mEnd;
+        /// Private constructor since only the parameterised constructor should be used
+        ConstMapIterator() {};
+    public:
+        typedef typename T::mapped_type MappedType;
+        typedef typename T::key_type KeyType;
+
+        /** Constructor.
+        @remarks
+        Provide a start and end iterator to initialise.
+        */
+        ConstMapIterator(typename T::const_iterator start, typename T::const_iterator end)
+            : mCurrent(start), mEnd(end)
+        {
+        }
+
+        /** Returns true if there are more items in the collection. */
+        bool hasMoreElements(void) const
+        {
+            return mCurrent != mEnd;
+        }
+
+        /** Returns the next value element in the collection, and advances to the next. */
+        typename T::mapped_type getNext(void)
+        {
+            return (mCurrent++)->second;
+        }
+        /** Returns the next value element in the collection, without advancing to the next. */
+        typename T::mapped_type peekNextValue(void) const
+        {
+            return mCurrent->second;
+        }
+        /** Returns the next key element in the collection, without advancing to the next. */
+        typename T::key_type peekNextKey(void) const
+        {
+            return mCurrent->first;
+        }
+        /** Required to overcome intermittent bug */
+        MapIterator<T> & operator=( MapIterator<T> &rhs )
+        {
+            mCurrent = rhs.mCurrent;
+            mEnd = rhs.mEnd;
+            return *this;
+        }
+        /** Returns a pointer to the next value element in the collection, without 
+        advancing to the next afterwards. */
+        typename T::const_pointer peekNextValuePtr(void) const
+        {
+            return &(mCurrent->second);
+        }
+        /** Moves the iterator on one element. */
+        void moveNext(void) const
+        {
+            mCurrent++;
+        }
+
+
+
+    };
+}
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSimpleRenderable.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSimpleRenderable.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSimpleRenderable.h	(revision 1092)
@@ -0,0 +1,99 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __SimpleRenderable_H__
+#define __SimpleRenderable_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreMovableObject.h"
+#include "OgreRenderable.h"
+#include "OgreAxisAlignedBox.h"
+#include "OgreMaterial.h"
+
+namespace Ogre {
+
+    class _OgreExport SimpleRenderable : public MovableObject, public Renderable
+    {
+    protected:
+        RenderOperation mRenderOp;
+
+        Matrix4 m_matWorldTransform;
+        AxisAlignedBox mBox;
+
+        String m_strMatName;
+        MaterialPtr m_pMaterial;
+
+        /// The scene manager for the current frame.
+        SceneManager *m_pParentSceneManager;
+
+        /// The camera for the current frame.
+        Camera *m_pCamera;
+
+        /// The name of the object.
+        String m_strName;
+
+        /// Static member used to automatically generate names for SimpleRendaerable objects.
+        static uint ms_uGenNameCount;
+
+    public:
+        SimpleRenderable();
+
+        void setMaterial( const String& matName );
+        virtual const MaterialPtr& getMaterial(void) const;
+
+        virtual void setRenderOperation( const RenderOperation& rend );
+        virtual void getRenderOperation(RenderOperation& op);
+
+        void setWorldTransform( const Matrix4& xform );
+        virtual void getWorldTransforms( Matrix4* xform ) const;
+        /** @copydoc Renderable::getWorldOrientation */
+        const Quaternion& getWorldOrientation(void) const;
+        /** @copydoc Renderable::getWorldPosition */
+        const Vector3& getWorldPosition(void) const;
+
+
+        virtual void _notifyCurrentCamera(Camera* cam);
+
+        void setBoundingBox( const AxisAlignedBox& box );
+        virtual const AxisAlignedBox& getBoundingBox(void) const;
+
+        virtual void _updateRenderQueue(RenderQueue* queue);
+
+        virtual ~SimpleRenderable();
+
+        /** Overridden from MovableObject */
+        virtual const String& getName(void) const;
+
+        /** Overridden from MovableObject */
+        virtual const String& getMovableType(void) const;
+
+        /** @copydoc Renderable::getLights */
+        const LightList& getLights(void) const;
+
+    };
+}
+
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreParticleEmitterCommands.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreParticleEmitterCommands.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreParticleEmitterCommands.h	(revision 1092)
@@ -0,0 +1,181 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE 
+	(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under 
+the terms of the GNU Lesser General Public License as published by the Free Software 
+Foundation; either version 2 of the License, or (at your option) any later 
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT 
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with 
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple 
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to 
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __ParticleEmitterCommands_H__
+#define __ParticleEmitterCommands_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreStringInterface.h"
+
+namespace Ogre  {
+
+
+    namespace EmitterCommands {
+        /// Command object for ParticleEmitter  - see ParamCommand 
+        class _OgreExport CmdAngle : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /// Command object for particle emitter  - see ParamCommand 
+        class _OgreExport CmdColour : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+
+        /// Command object for particle emitter  - see ParamCommand 
+        class _OgreExport CmdColourRangeStart : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /// Command object for particle emitter  - see ParamCommand 
+        class _OgreExport CmdColourRangeEnd : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+
+        /// Command object for particle emitter  - see ParamCommand 
+        class _OgreExport CmdDirection : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+
+        /// Command object for particle emitter  - see ParamCommand 
+        class _OgreExport CmdEmissionRate : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /// Command object for particle emitter  - see ParamCommand 
+        class _OgreExport CmdVelocity : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /// Command object for particle emitter  - see ParamCommand 
+        class _OgreExport CmdMinVelocity : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /// Command object for particle emitter  - see ParamCommand 
+        class _OgreExport CmdMaxVelocity : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /// Command object for particle emitter  - see ParamCommand 
+        class _OgreExport CmdTTL : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /// Command object for particle emitter  - see ParamCommand 
+        class _OgreExport CmdMinTTL : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /// Command object for particle emitter  - see ParamCommand 
+        class _OgreExport CmdMaxTTL : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /// Command object for particle emitter  - see ParamCommand 
+        class _OgreExport CmdPosition : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /// Command object for particle emitter  - see ParamCommand 
+        class _OgreExport CmdDuration : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /// Command object for particle emitter  - see ParamCommand 
+        class _OgreExport CmdMinDuration : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /// Command object for particle emitter  - see ParamCommand 
+        class _OgreExport CmdMaxDuration : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /// Command object for particle emitter  - see ParamCommand 
+        class _OgreExport CmdRepeatDelay : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /// Command object for particle emitter  - see ParamCommand 
+        class _OgreExport CmdMinRepeatDelay : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+        /// Command object for particle emitter  - see ParamCommand 
+        class _OgreExport CmdMaxRepeatDelay : public ParamCommand
+        {
+        public:
+            String doGet(const void* target) const;
+            void doSet(void* target, const String& val);
+        };
+
+    }
+
+}
+
+
+
+
+
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreOverlay.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreOverlay.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreOverlay.h	(revision 1092)
@@ -0,0 +1,281 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __Overlay_H__
+#define __Overlay_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreSceneNode.h"
+#include "OgreIteratorWrappers.h"
+#include "OgreMatrix4.h"
+
+namespace Ogre {
+
+
+    /** Represents a layer which is rendered on top of the 'normal' scene contents.
+    @remarks
+        An overlay is a container for visual components (2D and 3D) which will be 
+        rendered after the main scene in order to composite heads-up-displays, menus
+        or other layers on top of the contents of the scene.
+    @par
+        An overlay always takes up the entire size of the viewport, although the 
+        components attached to it do not have to. An overlay has no visual element
+        in itself, it it merely a container for visual elements.
+    @par
+        Overlays are created by calling OverlayManager::create, or by defining them
+        in special text scripts (.overlay files). As many overlays
+        as you like can be defined; after creation an overlay is hidden i.e. not
+        visible until you specifically enable it by calling 'show'. This allows you to have multiple
+        overlays predefined (menus etc) which you make visible only when you want.
+        It is possible to have multiple overlays enabled at once; in this case the
+        relative 'zorder' parameter of the overlays determine which one is displayed
+        on top.
+    @par
+        By default overlays are rendered into all viewports. This is fine when you only
+        have fullscreen viewports, but if you have picture-in-picture views, you probably
+        don't want the overlay displayed in the smaller viewports. You turn this off for 
+        a specific viewport by calling the Viewport::setDisplayOverlays method.
+    */
+    class _OgreExport Overlay 
+    {
+
+    public:
+              typedef std::list<OverlayContainer*> OverlayContainerList;
+    protected:
+        String mName;
+        /// Internal root node, used as parent for 3D objects
+        SceneNode* mRootNode;
+        // 2D elements
+        // OverlayContainers, linked list for easy sorting by zorder later
+        // Not a map because sort can be saved since changes infrequent (unlike render queue)
+        OverlayContainerList m2DElements;
+
+        // Degrees of rotation around center
+        Radian mRotate;
+        // Scroll values, offsets
+        Real mScrollX, mScrollY;
+        // Scale values
+        Real mScaleX, mScaleY;
+
+        mutable Matrix4 mTransform;
+        mutable bool mTransformOutOfDate;
+        bool mTransformUpdated;
+        ulong mZOrder;
+        bool mVisible;
+		bool mInitialised;
+		String mOrigin;
+        /** Internal lazy update method. */
+        void updateTransform(void) const;
+		/** Internal method for initialising an overlay */
+		void initialise(void);
+
+    public:
+        /// Constructor: do not call direct, use OverlayManager::create
+        Overlay(const String& name);
+        virtual ~Overlay();
+
+
+	    OverlayContainer* getChild(const String& name);
+
+        /** Gets the name of this overlay. */
+        const String& getName(void) const;
+        /** Alters the ZOrder of this overlay. 
+        @remarks
+            Values between 0 and 650 are valid here.
+        */
+        void setZOrder(ushort zorder);
+        /** Gets the ZOrder of this overlay. */
+        ushort getZOrder(void) const;
+
+        /** Gets whether the overlay is displayed or not. */
+        bool isVisible(void) const;
+
+		/** Gets whether the overlay is initialised or not. */
+		bool isInitialised(void) const { return mInitialised; }
+
+		/** Shows the overlay if it was hidden. */
+        void show(void);
+
+        /** Hides the overlay if it was visible. */
+        void hide(void);
+
+        /** Adds a 2D 'container' to the overlay.
+        @remarks
+            Containers are created and managed using the OverlayManager. A container
+            could be as simple as a square panel, or something more complex like
+            a grid or tree view. Containers group collections of other elements,
+            giving them a relative coordinate space and a common z-order.
+            If you want to attach a gui widget to an overlay, you have to do it via
+            a container.
+        @param cont Pointer to a container to add, created using OverlayManager.
+        */
+        void add2D(OverlayContainer* cont);
+
+
+        /** Removes a 2D container from the overlay. 
+        @remarks
+            NOT FAST. Consider OverlayElement::hide.
+        */
+        void remove2D(OverlayContainer* cont);
+
+        /** Adds a node capable of holding 3D objects to the overlay.
+        @remarks    
+            Although overlays are traditionally associated with 2D elements, there 
+            are reasons why you might want to attach 3D elements to the overlay too.
+            For example, if you wanted to have a 3D cockpit, which was overlaid with a
+            HUD, then you would create 2 overlays, one with a 3D object attached for the
+            cockpit, and one with the HUD elements attached (the zorder of the HUD 
+            overlay would be higher than the cockpit to ensure it was always on top).
+        @par    
+            A SceneNode can have nay number of 3D objects attached to it. SceneNodes
+            are usually created using SceneManager::createSceneNode, but in this case
+			you should create a standard SceneNode instance <b>manually</b>; this is
+			because these scene nodes are not managed by the SceneManager and some custom
+			SceneManager plugins will rely on specialist behaviour the overlay does not
+			support. By attaching a SceneNode to an overlay, you indicate that:<OL>
+            <LI>You want the contents of this node to only appear when the overlay is active</LI>
+            <LI>You want the node to inherit a coordinate space relative to the camera,
+                rather than relative to the root scene node</LI>
+            <LI>You want these objects to be rendered after the contents of the main scene
+                to ensure they are rendered on top</LI>
+            </OL>
+            One major consideration when using 3D objects in overlays is the behaviour of 
+            the depth buffer. Overlays should use materials with depth checking off, to ensure
+            that their contents are always displayed on top of the main scene (to do 
+            otherwise would result in objects 'poking through' the overlay). The problem
+            with using 3D objects is that if they are concave, or self-overlap, then you
+            can get artefacts because of the lack of depth buffer checking. So you should 
+            ensure that any 3D objects you us in the overlay are convex, and don't overlap
+            each other. If they must overlap, split them up and put them in 2 overlays.
+			Alternatively, use a 2D element underneath them which will clear the depth buffer
+			values underneath ready for the 3D element to be rendered correctly.
+        */
+        void add3D(SceneNode* node);
+
+        /** Removes a 3D element from the overlay. */
+        void remove3D(SceneNode* node);
+
+        /** Clears the overlay of all attached items. */
+        void clear();
+
+        /** Sets the scrolling factor of this overlay.
+        @remarks
+            You can use this to set an offset to be used to scroll an 
+            overlay around the screen.
+        @param x Horizontal scroll value, where 0 = normal, -0.5 = scroll so that only
+            the right half the screen is visible etc
+        @param y Vertical scroll value, where 0 = normal, 0.5 = scroll down by half 
+            a screen etc.
+        */
+        void setScroll(Real x, Real y);
+
+        /** Gets the current X scroll value */
+        Real getScrollX(void) const;
+
+        /** Gets the current Y scroll value */
+        Real getScrollY(void) const;
+
+        /** Scrolls the overlay by the offsets provided.
+        @remarks
+            This method moves the overlay by the amounts provided. As with
+            other methods on this object, a full screen width / height is represented
+            by the value 1.0.
+        */
+        void scroll(Real xoff, Real yoff);
+
+        /** Sets the rotation applied to this overlay.*/
+        void setRotate(const Radian& angle);
+#ifndef OGRE_FORCE_ANGLE_TYPES
+        inline void setRotate(Real degrees) {
+			setRotate ( Angle(degrees) );
+		}
+#endif//OGRE_FORCE_ANGLE_TYPES
+
+        /** Gets the rotation applied to this overlay, in degrees.*/
+        Radian getRotate(void) const { return mRotate; }
+
+        /** Adds the passed in angle to the rotation applied to this overlay. */
+        void rotate(const Radian& angle);
+#ifndef OGRE_FORCE_ANGLE_TYPES
+		inline void rotate(Real degrees) {
+			rotate ( Angle(degrees) );
+		}
+#endif//OGRE_FORCE_ANGLE_TYPES
+
+        /** Sets the scaling factor of this overlay.
+        @remarks
+            You can use this to set an scale factor to be used to zoom an 
+            overlay.
+        @param x Horizontal scale value, where 1.0 = normal, 0.5 = half size etc
+        @param y Vertical scale value, where 1.0 = normal, 0.5 = half size etc
+        */
+        void setScale(Real x, Real y);
+
+        /** Gets the current X scale value */
+        Real getScaleX(void) const;
+
+        /** Gets the current Y scale value */
+        Real getScaleY(void) const;
+
+        /** Used to transform the overlay when scrolling, scaling etc. */
+        void _getWorldTransforms(Matrix4* xform) const;
+        /** @copydoc Renderable::getWorldOrientation */
+        const Quaternion& getWorldOrientation(void) const;
+        /** @copydoc Renderable::getWorldPosition */
+        const Vector3& getWorldPosition(void) const;
+
+        /** Internal method to put the overlay contents onto the render queue. */
+        void _findVisibleObjects(Camera* cam, RenderQueue* queue);
+
+        /** This returns a OverlayElement at position x,y. */
+		virtual OverlayElement* findElementAt(Real x, Real y);
+
+        /** Returns an iterator over all 2D elements in this manager.
+        @remarks
+            VectorIterator is actually a too generic name, since it also works for lists.
+        */
+        typedef VectorIterator<OverlayContainerList> Overlay2DElementsIterator ;
+        Overlay2DElementsIterator get2DElementsIterator ()
+        {
+            return Overlay2DElementsIterator (m2DElements.begin(), m2DElements.end());
+        }
+		/** Get the origin of this overlay, e.g. a script file name.
+		@remarks
+			This property will only contain something if the creator of
+			this overlay chose to populate it. Script loaders are advised
+			to populate it.
+		*/
+		const String& getOrigin(void) const { return mOrigin; }
+		/// Notify this overlay of it's origin
+		void _notifyOrigin(const String& origin) { mOrigin = origin; }
+
+
+    };
+
+}
+
+
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreArchive.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreArchive.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreArchive.h	(revision 1092)
@@ -0,0 +1,177 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _Archive_H__
+#define _Archive_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreString.h"
+#include "OgreDataStream.h"
+#include "OgreSharedPtr.h"
+#include "OgreStringVector.h"
+
+namespace Ogre {
+
+    /** Information about a file/directory within the archive will be
+    returned using a FileInfo struct.
+    @see
+    Archive
+    */
+    struct FileInfo {
+		/// The archive in which the file has been found (for info when performing
+		/// multi-Archive searches, note you should still open through ResourceGroupManager)
+		Archive* archive;
+        /// The file's fully qualified name
+        String filename;
+        /// Path name; separated by '/' and ending with '/'
+        String path;
+        /// Base filename
+        String basename;
+        /// Compressed size
+        size_t compressedSize;
+        /// Uncompressed size
+        size_t uncompressedSize;
+    };
+
+    typedef std::vector<FileInfo> FileInfoList;
+    typedef SharedPtr<FileInfoList> FileInfoListPtr;
+
+    /** Archive-handling class.
+    @remarks
+        An archive is a generic term for a container of files. This may be a
+        filesystem folder, it may be a compressed archive, it may even be 
+        a remote location shared on the web. This class is designed to be 
+        subclassed to provide access to a range of file locations. 
+    @par
+        Instances of this class are never constructed or even handled by end-user
+        applications. They are constructed by custom ArchiveFactory classes, 
+        which plugins can register new instances of using ArchiveManager. 
+        End-user applications will typically use ResourceManager or 
+        ResourceGroupManager to manage resources at a higher level, rather than 
+        reading files directly through this class. Doing it this way allows you
+        to benefit from OGRE's automatic searching of multiple file locations 
+        for the resources you are looking for.
+    */
+    class _OgreExport Archive  
+    {
+    protected:
+        /// Archive name
+        String mName; 
+        /// Archive type code
+        String mType;
+    public:
+
+
+        /** Constructor - don't call direct, used by ArchiveFactory.
+        */
+        Archive( const String& name, const String& archType )
+            : mName(name), mType(archType) {}
+
+        /** Default destructor.
+        */
+        virtual ~Archive() {}
+
+		/// Get the name of this archive
+		const String& getName(void) const { return mName; }
+
+        /// Returns whether this archive is case sensitive in the way it matches files
+        virtual bool isCaseSensitive(void) const = 0;
+
+        /** Loads the archive.
+        @remarks
+            This initializes all the internal data of the class.
+        @warning
+            Do not call this function directly, it is ment to be used
+            only by the ArchiveManager class.
+        */
+        virtual void load() = 0;
+
+        /** Unloads the archive.
+        @warning
+            Do not call this function directly, it is ment to be used
+            only by the ArchiveManager class.
+        */
+        virtual void unload() = 0;
+
+        /** Open a stream on a given file. 
+        @note
+            There is no equivalent 'close' method; the returned stream
+            controls the lifecycle of this file operation.
+        @param filename The fully qualified name of the file
+        @returns A shared pointer to a DataStream which can be used to 
+            read / write the file. If the file is not present, returns a null
+			shared pointer.
+        */
+        virtual DataStreamPtr open(const String& filename) const = 0;
+
+        /** List all file names in the archive.
+        @note
+            This method only returns filenames, you can also retrieve other
+            information using listFileInfo.
+        @param recursive Whether all paths of the archive are searched (if the 
+            archive has a concept of that)
+        @returns A list of filenames matching the criteria, all are fully qualified
+        */
+        virtual StringVectorPtr list(bool recursive = true ) = 0;
+        
+        /** List all files in the archive with accompanying information.
+        @param recursive Whether all paths of the archive are searched (if the 
+            archive has a concept of that)
+        @returns A list of structures detailing quite a lot of information about
+            all the files in the archive.
+        */
+        virtual FileInfoListPtr listFileInfo(bool recursive = true ) = 0;
+
+        /** Find all file names matching a given pattern in this archive.
+        @note
+            This method only returns filenames, you can also retrieve other
+            information using findFileInfo.
+        @param pattern The pattern to search for; wildcards (*) are allowed
+        @param recursive Whether all paths of the archive are searched (if the 
+            archive has a concept of that)
+        @returns A list of filenames matching the criteria, all are fully qualified
+        */
+        virtual StringVectorPtr find(const String& pattern, bool recursive = true) = 0;
+
+        /** Find out if the named file exists (note: fully qualified filename required) */
+        virtual bool exists(const String& filename) = 0; 
+
+        /** Find all files matching a given pattern in this archive and get 
+            some detailed information about them.
+        @param pattern The pattern to search for; wildcards (*) are allowed
+        @param recursive Whether all paths of the archive are searched (if the 
+        archive has a concept of that)
+        @returns A list of file information structures for all files matching 
+            the criteria.
+        */
+        virtual FileInfoListPtr findFileInfo(const String& pattern, 
+            bool recursive = true) = 0;
+
+        /// Return the type code of this Archive
+        const String& getType(void) const { return mType; }
+        
+    };
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreEventProcessor.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreEventProcessor.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreEventProcessor.h	(revision 1092)
@@ -0,0 +1,229 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+/***************************************************************************
+OgreEventProcessor.h  -  
+	The EventProcessor controls getting events, storing them in a queue, and 
+	dispatching events.
+	It contains an InputDevice which creates InputEvents. The events are then
+	stored FIFO in the EventQueue. 
+
+	The EventProcessor is a frame listener, so each frame, it empties the entire
+	queue to the list of dispatchers.
+
+	Each dispatcher corresponds to a registered TargetManager.
+
+	The TargetManagers need to be registered with the Processor before initialise is called.
+
+	After intialise is called, the Processor will start processing events once startProcessingEvents is called.
+
+	The Processor acts like a default EventTarget, so it can process events that no dispatcher consumes.
+	You can listen default actions to the processor by e.g.
+		mProcessor->addMouseListener(defaultMouseMovement);
+
+	WARNING: The event objects are created in InputReader when they are submitted to the queue
+	, yet destroyed in the Event Processor when they are taken off the queue.
+	Deleting objects in different locations to where they are created is usually undesirable, however,
+	since the Processor, queue and InputReader are tightly coupled (only the Processor is visible to the outside)
+	this can be an exception.
+	The reason for this is for performance... The alternative, is to do 2 more event copies when sending events to the queue,
+	so the queue manages creating (copying the event from the inputReader) and deleting objects once popped - however
+	this would require the events to be copied twice.. So I have avoided this by having the same event object passed around
+	and not copied.
+-------------------
+begin                : Nov 19 2002
+copyright            : (C) 2002 by Kenny Sabir
+email                : kenny@sparksuit.com
+***************************************************************************/
+
+#ifndef __EventProcessor_H__
+#define __EventProcessor_H__
+
+#include <list>
+#include "OgrePrerequisites.h"
+#include "OgreSingleton.h"
+#include "OgreFrameListener.h"
+#include "OgreMouseTarget.h"
+#include "OgreKeyTarget.h"
+#include "OgreMouseMotionTarget.h"
+
+namespace Ogre {
+	/** The EventProcessor controls getting events, storing them in a queue, and 
+		dispatching events.
+	@remarks
+		An application can create an instance of this class to receive buffered input, as opposed
+		to creating an InputReader directly and retrieving snapshot state only. This class
+		contains an InputReader which it uses to create InputEvents which are then
+		stored FIFO in the EventQueue. 
+	@par
+		The EventProcessor is a frame listener, so each frame, it empties the entire
+		queue to the list of dispatchers. Each dispatcher corresponds to a registered TargetManager.
+		The TargetManagers need to be registered with the Processor before initialise is called.
+		After intialise is called, the Processor will start processing events once 
+		startProcessingEvents is called.
+	@par
+		The Processor acts like a default EventTarget, so it can process events that no dispatcher consumes.
+		You can listen default actions to the processor by e.g.
+			mProcessor->addMouseListener(defaultMouseMovement);
+	*/
+    class _OgreExport EventProcessor : public FrameListener, public MouseTarget, public MouseMotionTarget, public Singleton<EventProcessor>, public KeyTarget
+    {
+    protected:
+		EventQueue* mEventQueue;
+		/**
+		 * empty queue and cleanup objects 
+		 *
+		 */
+		void cleanup();
+		InputReader* mInputDevice;
+		typedef std::list<EventDispatcher*> DispatcherList;
+		typedef std::list<EventTarget*> EventTargetList;
+		DispatcherList mDispatcherList;
+        EventTargetList mEventTargetList;
+        bool mRegisteredAsFrameListener;
+
+    public:
+        EventProcessor();
+        virtual ~EventProcessor();
+
+		/**
+		 * Registers FrameListener, and activates the queue
+		 */
+		void startProcessingEvents(bool registerListener=true);
+
+		/**
+		 * Removes this from being a FrameListener,
+		 * and deactivates the queue
+		 */
+		void stopProcessingEvents();
+
+		/**
+		 * Creates the Queue object,
+		 * Creates the InputReader object
+		 * initialises the InputReader to use buffered input 
+		 */
+		void initialise(RenderWindow* ren);
+
+		/**
+		 * Processes default events,
+		 * these are events are aren't handled by any dispatcher
+		 */
+		void processEvent(InputEvent* e);
+
+		/**
+		 * Adds a mouse motion listener to the cursor object.
+		 * This keeps the Cursor object hidden.
+		 */
+		void addCursorMoveListener(MouseMotionListener* c);
+
+		/**
+		 * Removes a mouse motion listener to the cursor object.
+		 * This keeps the Cursor object hidden.
+		 */
+		void removeCursorMoveListener(MouseMotionListener* c);
+
+		/**
+		 * Creates a dispatcher object that dispatches to the targetManager.
+		 * Adds the new dispatcher object to the dispatcher list.
+		 */
+
+		void addTargetManager(TargetManager* targetManager);
+
+		/**
+		 * Creates a dispatcher object that dispatches to the targetManager.
+		 * Adds the new dispatcher object to the dispatcher list.
+		 */
+
+		void addEventTarget(EventTarget* eventTarget);
+
+		/**
+		 * Processes all events on the queue.
+		 * sends each event to each dispatcher.
+		 * deletes the event objects
+		 */
+		bool frameStarted(const FrameEvent& evt);
+
+		// PositionTarget methods
+		/**
+		 * returns 0, since this is a default event target, default events have a top of 0 
+		 */
+		Real getTop() const;
+
+		/**
+		 * returns 0, since this is a default event target, default events have a left of 0 
+		 */
+		Real getLeft() const;
+
+		/**
+		 * returns NULL, There is no parent of the default event target.
+		 */
+		PositionTarget* getPositionTargetParent() const;
+
+
+
+		bool isKeyEnabled() const
+		{ return true; }
+
+		inline InputReader* getInputReader()
+		{ return mInputDevice; }
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static EventProcessor& getSingleton(void);
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static EventProcessor* getSingletonPtr(void);
+    };
+
+
+
+}
+
+
+#endif //__EventProcessor_H__
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreTargetManager.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreTargetManager.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreTargetManager.h	(revision 1092)
@@ -0,0 +1,65 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General  License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General  License for more details.
+
+You should have received a copy of the GNU Lesser General  License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+
+-----------------------------------------------------------------------------
+*/
+
+/***************************************************************************
+TargetManager.h  -  
+	an abstract interface.
+	Implemented by OverlayManager, to return a GuiElement at a given x,y 
+	position. 
+
+	Custom TargetManagers can be written to get a 3D element from an x,y 
+	position so you can write mouse listeners for your 3D objects.
+
+-------------------
+begin                : Dec 02 2002
+copyright            : (C) 2002 by Kenny Sabir
+email                : kenny@sparksuit.com
+***************************************************************************/
+
+
+#ifndef __TargetManager_H__
+#define __TargetManager_H__
+
+#include "OgrePrerequisites.h"
+
+namespace Ogre {
+
+	/** An abstract interface, implemented by OverlayManager, to return a GuiElement at a given x,y 
+		position. 
+	@remarks
+		Custom TargetManagers can be written to get a 3D element from an x,y 
+		position so you can write mouse listeners for your 3D objects.
+	*/
+	class _OgreExport TargetManager 
+    {
+	public:
+		virtual PositionTarget* getPositionTargetAt(Real x, Real y) = 0;
+    };
+
+
+}
+#endif 
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreParticleEmitterFactory.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreParticleEmitterFactory.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreParticleEmitterFactory.h	(revision 1092)
@@ -0,0 +1,73 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE 
+	(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under 
+the terms of the GNU Lesser General Public License as published by the Free Software 
+Foundation; either version 2 of the License, or (at your option) any later 
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT 
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with 
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple 
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to 
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __ParticleEmitterFactory_H__
+#define __ParticleEmitterFactory_H__
+
+
+#include "OgrePrerequisites.h"
+#include "OgreParticleEmitter.h"
+#include "OgreString.h"
+
+namespace Ogre {
+
+    /** Abstract class defining the interface to be implemented by creators of ParticleEmitter subclasses.
+    @remarks
+        Plugins or 3rd party applications can add new types of particle emitters to Ogre by creating
+        subclasses of the ParticleEmitter class. Because multiple instances of these emitters may be
+        required, a factory class to manage the instances is also required. 
+    @par
+        ParticleEmitterFactory subclasses must allow the creation and destruction of ParticleEmitter
+        subclasses. They must also be registered with the ParticleSystemManager. All factories have
+        a name which identifies them, examples might be 'point', 'cone', or 'box', and these can be 
+        also be used from particle system scripts.
+    */
+    class _OgreExport ParticleEmitterFactory
+    {
+    protected:
+        std::vector<ParticleEmitter*> mEmitters;
+    public:
+        ParticleEmitterFactory() {};
+        virtual ~ParticleEmitterFactory();
+
+        /** Returns the name of the factory, the name which identifies the particle emitter type this factory creates. */
+        virtual String getName() const = 0;
+
+        /** Creates a new emitter instance.
+        @remarks
+            The subclass MUST add a pointer to the created instance to mEmitters.
+        */
+        virtual ParticleEmitter* createEmitter(ParticleSystem* psys) = 0;
+
+        /** Destroys the emitter pointed to by the parameter (for early clean up if reauired). */
+        virtual void destroyEmitter(ParticleEmitter* e);
+
+    };
+
+
+}
+
+
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMouseMotionTarget.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMouseMotionTarget.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMouseMotionTarget.h	(revision 1092)
@@ -0,0 +1,71 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+/***************************************************************************
+OgreMouseMotionTarget.h  -  
+	Handles the adding and removing of MouseMotionListeners.
+
+	Components that process the Mouse Motion Event should subclass this class 
+	and call processMouseMotionEvent when that event is identified.
+
+-------------------
+begin                : Nov 19 2002
+copyright            : (C) 2002 by Kenny Sabir
+email                : kenny@sparksuit.com
+***************************************************************************/
+
+
+#ifndef __MouseMotionTarget_H__
+#define __MouseMotionTarget_H__
+
+#include "OgrePrerequisites.h"
+#include "OgrePositionTarget.h"
+
+namespace Ogre {
+
+    /** Handles the adding and removing of MouseMotionListeners.
+	@remarks
+	Components that process the Mouse Motion Event should subclass this class 
+	and call processMouseMotionEvent when that event is identified.
+	*/
+	class _OgreExport MouseMotionTarget : public PositionTarget
+    {
+    private:
+        std::set<MouseMotionListener*> mRemovedListeners;
+
+    protected:
+        std::set<MouseMotionListener*> mMouseMotionListeners;
+
+    public:
+		MouseMotionTarget() { }
+        virtual ~MouseMotionTarget() {}
+
+	    void processMouseMotionEvent(MouseEvent* e);
+	    void addMouseMotionListener(MouseMotionListener* l);
+	    void removeMouseMotionListener(MouseMotionListener* l);
+    };
+}
+
+
+#endif //__MouseTarget_H__
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreVector3.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreVector3.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreVector3.h	(revision 1092)
@@ -0,0 +1,633 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __Vector3_H__
+#define __Vector3_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreMath.h"
+#include "OgreQuaternion.h"
+
+namespace Ogre
+{
+
+    /** Standard 3-dimensional vector.
+        @remarks
+            A direction in 3D space represented as distances along the 3
+            orthoganal axes (x, y, z). Note that positions, directions and
+            scaling factors can be represented by a vector, depending on how
+            you interpret the values.
+    */
+    class _OgreExport Vector3
+    {
+    public:
+        union {
+            struct {
+                Real x, y, z;        
+            };
+            Real val[3];
+        };
+
+    public:
+        inline Vector3()
+        {
+        }
+
+        inline Vector3( Real fX, Real fY, Real fZ ) 
+            : x( fX ), y( fY ), z( fZ )
+        {
+        }
+
+        inline Vector3( Real afCoordinate[3] )
+            : x( afCoordinate[0] ),
+              y( afCoordinate[1] ),
+              z( afCoordinate[2] )
+        {
+        }
+
+        inline Vector3( int afCoordinate[3] )
+        {
+            x = (Real)afCoordinate[0];
+            y = (Real)afCoordinate[1];
+            z = (Real)afCoordinate[2];
+        }
+
+        inline Vector3( const Real* const r )
+            : x( r[0] ), y( r[1] ), z( r[2] )
+        {
+        }
+
+        inline Vector3( const Vector3& rkVector )
+            : x( rkVector.x ), y( rkVector.y ), z( rkVector.z )
+        {
+        }
+
+		inline Real operator [] ( size_t i ) const
+        {
+            assert( i < 3 );
+
+            return *(&x+i);
+        }
+
+		inline Real& operator [] ( size_t i )
+        {
+            assert( i < 3 );
+
+            return *(&x+i);
+        }
+
+        /** Assigns the value of the other vector.
+            @param
+                rkVector The other vector
+        */
+        inline Vector3& operator = ( const Vector3& rkVector )
+        {
+            x = rkVector.x;
+            y = rkVector.y;
+            z = rkVector.z;            
+
+            return *this;
+        }
+
+        inline bool operator == ( const Vector3& rkVector ) const
+        {
+            return ( x == rkVector.x && y == rkVector.y && z == rkVector.z );
+        }
+
+        inline bool operator != ( const Vector3& rkVector ) const
+        {
+            return ( x != rkVector.x || y != rkVector.y || z != rkVector.z );
+        }
+
+        // arithmetic operations
+        inline Vector3 operator + ( const Vector3& rkVector ) const
+        {
+            Vector3 kSum;
+
+            kSum.x = x + rkVector.x;
+            kSum.y = y + rkVector.y;
+            kSum.z = z + rkVector.z;
+
+            return kSum;
+        }
+
+        inline Vector3 operator - ( const Vector3& rkVector ) const
+        {
+            Vector3 kDiff;
+
+            kDiff.x = x - rkVector.x;
+            kDiff.y = y - rkVector.y;
+            kDiff.z = z - rkVector.z;
+
+            return kDiff;
+        }
+
+        inline Vector3 operator * ( Real fScalar ) const
+        {
+            Vector3 kProd;
+
+            kProd.x = fScalar*x;
+            kProd.y = fScalar*y;
+            kProd.z = fScalar*z;
+
+            return kProd;
+        }
+
+        inline Vector3 operator * ( const Vector3& rhs) const
+        {
+            Vector3 kProd;
+
+            kProd.x = rhs.x * x;
+            kProd.y = rhs.y * y;
+            kProd.z = rhs.z * z;
+
+            return kProd;
+        }
+
+        inline Vector3 operator / ( Real fScalar ) const
+        {
+            assert( fScalar != 0.0 );
+
+            Vector3 kDiv;
+
+            Real fInv = 1.0 / fScalar;
+            kDiv.x = x * fInv;
+            kDiv.y = y * fInv;
+            kDiv.z = z * fInv;
+
+            return kDiv;
+        }
+
+        inline Vector3 operator / ( const Vector3& rhs) const
+        {
+            Vector3 kDiv;
+
+            kDiv.x = x / rhs.x;
+            kDiv.y = y / rhs.y;
+            kDiv.z = z / rhs.z;
+
+            return kDiv;
+        }
+
+
+        inline Vector3 operator - () const
+        {
+            Vector3 kNeg;
+
+            kNeg.x = -x;
+            kNeg.y = -y;
+            kNeg.z = -z;
+
+            return kNeg;
+        }
+
+        inline friend Vector3 operator * ( Real fScalar, const Vector3& rkVector )
+        {
+            Vector3 kProd;
+
+            kProd.x = fScalar * rkVector.x;
+            kProd.y = fScalar * rkVector.y;
+            kProd.z = fScalar * rkVector.z;
+
+            return kProd;
+        }
+
+        // arithmetic updates
+        inline Vector3& operator += ( const Vector3& rkVector )
+        {
+            x += rkVector.x;
+            y += rkVector.y;
+            z += rkVector.z;
+
+            return *this;
+        }
+
+        inline Vector3& operator -= ( const Vector3& rkVector )
+        {
+            x -= rkVector.x;
+            y -= rkVector.y;
+            z -= rkVector.z;
+
+            return *this;
+        }
+
+        inline Vector3& operator *= ( Real fScalar )
+        {
+            x *= fScalar;
+            y *= fScalar;
+            z *= fScalar;
+            return *this;
+        }
+
+        inline Vector3& operator *= ( const Vector3& rkVector )
+        {
+            x *= rkVector.x;
+            y *= rkVector.y;
+            z *= rkVector.z;
+
+            return *this;
+        }
+
+        inline Vector3& operator /= ( Real fScalar )
+        {
+            assert( fScalar != 0.0 );
+
+            Real fInv = 1.0 / fScalar;
+
+            x *= fInv;
+            y *= fInv;
+            z *= fInv;
+
+            return *this;
+        }
+
+        inline Vector3& operator /= ( const Vector3& rkVector )
+        {
+            x /= rkVector.x;
+            y /= rkVector.y;
+            z /= rkVector.z;
+
+            return *this;
+        }
+
+
+        /** Returns the length (magnitude) of the vector.
+            @warning
+                This operation requires a square root and is expensive in
+                terms of CPU operations. If you don't need to know the exact
+                length (e.g. for just comparing lengths) use squaredLength()
+                instead.
+        */
+        inline Real length () const
+        {
+            return Math::Sqrt( x * x + y * y + z * z );
+        }
+
+        /** Returns the square of the length(magnitude) of the vector.
+            @remarks
+                This  method is for efficiency - calculating the actual
+                length of a vector requires a square root, which is expensive
+                in terms of the operations required. This method returns the
+                square of the length of the vector, i.e. the same as the
+                length but before the square root is taken. Use this if you
+                want to find the longest / shortest vector without incurring
+                the square root.
+        */
+        inline Real squaredLength () const
+        {
+            return x * x + y * y + z * z;
+        }
+
+        /** Calculates the dot (scalar) product of this vector with another.
+            @remarks
+                The dot product can be used to calculate the angle between 2
+                vectors. If both are unit vectors, the dot product is the
+                cosine of the angle; otherwise the dot product must be
+                divided by the product of the lengths of both vectors to get
+                the cosine of the angle. This result can further be used to
+                calculate the distance of a point from a plane.
+            @param
+                vec Vector with which to calculate the dot product (together
+                with this one).
+            @returns
+                A float representing the dot product value.
+        */
+        inline Real dotProduct(const Vector3& vec) const
+        {
+            return x * vec.x + y * vec.y + z * vec.z;
+        }
+
+        /** Normalises the vector.
+            @remarks
+                This method normalises the vector such that it's
+                length / magnitude is 1. The result is called a unit vector.
+            @note
+                This function will not crash for zero-sized vectors, but there
+                will be no changes made to their components.
+            @returns The previous length of the vector.
+        */
+        inline Real normalise()
+        {
+            Real fLength = Math::Sqrt( x * x + y * y + z * z );
+
+            // Will also work for zero-sized vectors, but will change nothing
+            if ( fLength > 1e-08 )
+            {
+                Real fInvLength = 1.0 / fLength;
+                x *= fInvLength;
+                y *= fInvLength;
+                z *= fInvLength;
+            }
+
+            return fLength;
+        }
+
+        /** Calculates the cross-product of 2 vectors, i.e. the vector that
+            lies perpendicular to them both.
+            @remarks
+                The cross-product is normally used to calculate the normal
+                vector of a plane, by calculating the cross-product of 2
+                non-equivalent vectors which lie on the plane (e.g. 2 edges
+                of a triangle).
+            @param
+                vec Vector which, together with this one, will be used to
+                calculate the cross-product.
+            @returns
+                A vector which is the result of the cross-product. This
+                vector will <b>NOT</b> be normalised, to maximise efficiency
+                - call Vector3::normalise on the result if you wish this to
+                be done. As for which side the resultant vector will be on, the
+                returned vector will be on the side from which the arc from 'this'
+                to rkVector is anticlockwise, e.g. UNIT_Y.crossProduct(UNIT_Z) 
+                = UNIT_X, whilst UNIT_Z.crossProduct(UNIT_Y) = -UNIT_X.
+            @par
+                For a clearer explanation, look a the left and the bottom edges
+                of your monitor's screen. Assume that the first vector is the
+                left edge and the second vector is the bottom edge, both of
+                them starting from the lower-left corner of the screen. The
+                resulting vector is going to be perpendicular to both of them
+                and will go <i>inside</i> the screen, towards the cathode tube
+                (assuming you're using a CRT monitor, of course).
+        */
+        inline Vector3 crossProduct( const Vector3& rkVector ) const
+        {
+            Vector3 kCross;
+
+            kCross.x = y * rkVector.z - z * rkVector.y;
+            kCross.y = z * rkVector.x - x * rkVector.z;
+            kCross.z = x * rkVector.y - y * rkVector.x;
+
+            return kCross;
+        }
+
+        /** Returns a vector at a point half way between this and the passed
+            in vector.
+        */
+        inline Vector3 midPoint( const Vector3& vec ) const
+        {
+            return Vector3( 
+                ( x + vec.x ) * 0.5, 
+                ( y + vec.y ) * 0.5, 
+                ( z + vec.z ) * 0.5 );
+        }
+
+        /** Returns true if the vector's scalar components are all greater
+            that the ones of the vector it is compared against.
+        */
+        inline bool operator < ( const Vector3& rhs ) const
+        {
+            if( x < rhs.x && y < rhs.y && z < rhs.z )
+                return true;
+            return false;
+        }
+
+        /** Returns true if the vector's scalar components are all smaller
+            that the ones of the vector it is compared against.
+        */
+        inline bool operator > ( const Vector3& rhs ) const
+        {
+            if( x > rhs.x && y > rhs.y && z > rhs.z )
+                return true;
+            return false;
+        }
+
+        /** Sets this vector's components to the minimum of its own and the 
+            ones of the passed in vector.
+            @remarks
+                'Minimum' in this case means the combination of the lowest
+                value of x, y and z from both vectors. Lowest is taken just
+                numerically, not magnitude, so -1 < 0.
+        */
+        inline void makeFloor( const Vector3& cmp )
+        {
+            if( cmp.x < x ) x = cmp.x;
+            if( cmp.y < y ) y = cmp.y;
+            if( cmp.z < z ) z = cmp.z;
+        }
+
+        /** Sets this vector's components to the maximum of its own and the 
+            ones of the passed in vector.
+            @remarks
+                'Maximum' in this case means the combination of the highest
+                value of x, y and z from both vectors. Highest is taken just
+                numerically, not magnitude, so 1 > -3.
+        */
+        inline void makeCeil( const Vector3& cmp )
+        {
+            if( cmp.x > x ) x = cmp.x;
+            if( cmp.y > y ) y = cmp.y;
+            if( cmp.z > z ) z = cmp.z;
+        }
+
+        /** Generates a vector perpendicular to this vector (eg an 'up' vector).
+            @remarks
+                This method will return a vector which is perpendicular to this
+                vector. There are an infinite number of possibilities but this 
+                method will guarantee to generate one of them. If you need more 
+                control you should use the Quaternion class.
+        */
+        inline Vector3 perpendicular(void) const
+        {
+            static const Real fSquareZero = 1e-06 * 1e-06;
+
+            Vector3 perp = this->crossProduct( Vector3::UNIT_X );
+
+            // Check length
+            if( perp.squaredLength() < fSquareZero )
+            {
+                /* This vector is the Y axis multiplied by a scalar, so we have 
+                   to use another axis.
+                */
+                perp = this->crossProduct( Vector3::UNIT_Y );
+            }
+
+            return perp;
+        }
+        /** Generates a new random vector which deviates from this vector by a
+            given angle in a random direction.
+            @remarks
+                This method assumes that the random number generator has already 
+                been seeded appropriately.
+            @param 
+                angle The angle at which to deviate
+            @param 
+                up Any vector perpendicular to this one (which could generated 
+                by cross-product of this vector and any other non-colinear 
+                vector). If you choose not to provide this the function will 
+                derive one on it's own, however if you provide one yourself the 
+                function will be faster (this allows you to reuse up vectors if 
+                you call this method more than once) 
+            @returns 
+                A random vector which deviates from this vector by angle. This 
+                vector will not be normalised, normalise it if you wish 
+                afterwards.
+        */
+        inline Vector3 randomDeviant(
+            const Radian& angle,
+            const Vector3& up = Vector3::ZERO ) const
+        {
+            Vector3 newUp;
+
+            if (up == Vector3::ZERO)
+            {
+                // Generate an up vector
+                newUp = this->perpendicular();
+            }
+            else
+            {
+                newUp = up;
+            }
+
+            // Rotate up vector by random amount around this
+            Quaternion q;
+            q.FromAngleAxis( Radian(Math::UnitRandom() * Math::TWO_PI), *this );
+            newUp = q * newUp;
+
+            // Finally rotate this by given angle around randomised up
+            q.FromAngleAxis( angle, newUp );
+            return q * (*this);
+        }
+#ifndef OGRE_FORCE_ANGLE_TYPES
+        inline Vector3 randomDeviant(
+            Real angle,
+            const Vector3& up = Vector3::ZERO ) const
+        {
+            return randomDeviant ( Radian(angle), up );
+        }
+#endif//OGRE_FORCE_ANGLE_TYPES
+
+        /** Gets the shortest arc quaternion to rotate this vector to the destination
+            vector. 
+        @remarks
+            Don't call this if you think the dest vector can be close to the inverse
+            of this vector, since then ANY axis of rotation is ok. 
+        */
+        Quaternion getRotationTo(const Vector3& dest) const
+        {
+            // Based on Stan Melax's article in Game Programming Gems
+            Quaternion q;
+            // Copy, since cannot modify local
+            Vector3 v0 = *this;
+            Vector3 v1 = dest;
+            v0.normalise();
+            v1.normalise();
+
+            Vector3 c = v0.crossProduct(v1);
+
+            // NB if the crossProduct approaches zero, we get unstable because ANY axis will do
+            // when v0 == -v1
+            Real d = v0.dotProduct(v1);
+            // If dot == 1, vectors are the same
+            if (d >= 1.0f)
+            {
+                return Quaternion::IDENTITY;
+            }
+            Real s = Math::Sqrt( (1+d)*2 );
+            assert (s != 0 && "Divide by zero!");
+            Real invs = 1 / s;
+
+
+            q.x = c.x * invs;
+            q.y = c.y * invs;
+            q.z = c.z * invs;
+            q.w = s * 0.5;
+            return q;
+        }
+
+        /** Returns true if this vector is zero length. */
+        inline bool isZeroLength(void) const
+        {
+            Real sqlen = (x * x) + (y * y) + (z * z);
+            return (sqlen < (1e-06 * 1e-06));
+
+        }
+
+        /** As normalise, except that this vector is unaffected and the
+            normalised vector is returned as a copy. */
+        inline Vector3 normalisedCopy(void) const
+        {
+            Vector3 ret = *this;
+            ret.normalise();
+            return ret;
+        }
+
+        /** Calculates a reflection vector to the plane with the given normal . 
+        @remarks NB assumes 'this' is pointing AWAY FROM the plane, invert if it is not.
+        */
+        inline Vector3 reflect(const Vector3& normal) const
+        {
+            return Vector3( *this - ( 2 * this->dotProduct(normal) * normal ) );
+        }
+
+		/** Returns whether this vector is within a positional tolerance
+			of another vector.
+		@param rhs The vector to compare with
+		@param tolerance The amount that each element of the vector may vary by 
+			and still be considered equal
+		*/
+		inline bool positionEquals(const Vector3& rhs, Real tolerance = 1e-03) const
+		{
+			return Math::RealEqual(x, rhs.x, tolerance) &&
+				Math::RealEqual(y, rhs.y, tolerance) &&
+				Math::RealEqual(z, rhs.z, tolerance);
+			
+		}
+		/** Returns whether this vector is within a directional tolerance
+			of another vector.
+		@param rhs The vector to compare with
+		@param tolerance The maximum angle by which the vectors may vary and
+			still be considered equal
+		*/
+		inline bool directionEquals(const Vector3& rhs, 
+			const Radian& tolerance) const
+		{
+			Real dot = dotProduct(rhs);
+			Radian angle = Math::ACos(dot);
+
+			return Math::Abs(angle.valueRadians()) <= tolerance.valueRadians();
+			
+		}
+
+        // special points
+        static const Vector3 ZERO;
+        static const Vector3 UNIT_X;
+        static const Vector3 UNIT_Y;
+        static const Vector3 UNIT_Z;
+        static const Vector3 NEGATIVE_UNIT_X;
+        static const Vector3 NEGATIVE_UNIT_Y;
+        static const Vector3 NEGATIVE_UNIT_Z;
+        static const Vector3 UNIT_SCALE;
+
+        /** Function for writing to a stream.
+        */
+        inline _OgreExport friend std::ostream& operator <<
+            ( std::ostream& o, const Vector3& v )
+        {
+            o << "Vector3(" << v.x << ", " << v.y << ", " << v.z << ")";
+            return o;
+        }
+    };
+
+}
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMeshManager.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMeshManager.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMeshManager.h	(revision 1092)
@@ -0,0 +1,423 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __MeshManager_H__
+#define __MeshManager_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreResourceManager.h"
+#include "OgreSingleton.h"
+#include "OgreVector3.h"
+#include "OgreHardwareBuffer.h"
+#include "OgreMesh.h"
+#include "OgrePatchMesh.h"
+
+namespace Ogre {
+
+    /** Handles the management of mesh resources.
+        @remarks
+            This class deals with the runtime management of
+            mesh data; like other resource managers it handles
+            the creation of resources (in this case mesh data),
+            working within a fixed memory budget.
+    */
+    class _OgreExport MeshManager: public ResourceManager, public Singleton<MeshManager>, 
+        public ManualResourceLoader
+    {
+    public:
+        MeshManager();
+        ~MeshManager();
+
+        /** Initialises the manager, only to be called by OGRE internally. */
+        void _initialise(void);
+
+        /** Loads a mesh from a file, making it immediately available for use.
+            @note
+                If the model has already been loaded, the existing instance
+                will be returned.
+            @remarks
+                Ogre loads model files from it's own proprietary
+                format called .mesh. This is because having a single file
+                format is better for runtime performance, and we also have
+                control over pre-processed data (such as
+                collision boxes, LOD reductions etc).
+			@param filename The name of the .mesh file
+            @param groupName The name of the resource group to assign the mesh to 
+			@param vertexBufferUsage The usage flags with which the vertex buffer(s)
+				will be created
+			@param indexBufferUsage The usage flags with which the index buffer(s) created for 
+				this mesh will be created with.
+			@param vertexBufferShadowed If true, the vertex buffers will be shadowed by system memory 
+                copies for faster read access
+			@param indexBufferShadowed If true, the index buffers will be shadowed by system memory 
+                copies for faster read access
+			@param priority The priority of this mesh in the resource system
+        */
+        MeshPtr load( const String& filename, const String& groupName,
+			HardwareBuffer::Usage vertexBufferUsage = HardwareBuffer::HBU_STATIC_WRITE_ONLY, 
+			HardwareBuffer::Usage indexBufferUsage = HardwareBuffer::HBU_STATIC_WRITE_ONLY, 
+			bool vertexBufferShadowed = true, bool indexBufferShadowed = true);
+
+
+        /** Creates a new Mesh specifically for manual definition rather
+            than loading from an object file. 
+		@remarks
+			Note that once you've defined your mesh, you must call Mesh::_setBounds and
+            Mesh::_setBoundingRadius in order to define the bounds of your mesh. In previous
+            versions of OGRE you could call Mesh::_updateBounds, but OGRE's support of 
+            write-only vertex buffers makes this no longer appropriate.
+        @param name The name to give the new mesh
+        @param groupName The name of the resource group to assign the mesh to 
+        @param loader ManualResourceLoader which will be called to load this mesh
+            when the time comes. It is recommended that you populate this field
+            in order that the mesh can be rebuilt should the need arise
+        */
+        MeshPtr createManual( const String& name, const String& groupName, 
+            ManualResourceLoader* loader = 0);
+
+        /** Creates a basic plane, by default majoring on the x/y axes facing positive Z.
+            @param
+                name The name to give the resulting mesh
+            @param 
+                groupName The name of the resource group to assign the mesh to 
+            @param
+                plane The orientation of the plane and distance from the origin
+            @param
+                width The width of the plane in world coordinates
+            @param
+                height The height of the plane in world coordinates
+            @param
+                xsegments The number of segements to the plane in the x direction
+            @param
+                ysegments The number of segements to the plane in the y direction
+            @param
+                normals If true, normals are created perpendicular to the plane
+            @param
+                numTexCoordSets The number of 2D texture coordinate sets created - by default the corners
+                are created to be the corner of the texture.
+            @param
+                uTile The number of times the texture should be repeated in the u direction
+            @param
+                vTile The number of times the texture should be repeated in the v direction
+            @param
+                upVector The 'Up' direction of the plane.
+			@param
+				vertexBufferUsage The usage flag with which the vertex buffer for this plane will be created
+			@param
+				indexBufferUsage The usage flag with which the index buffer for this plane will be created
+			@param
+				vertexShadowBuffer If this flag is set to true, the vertex buffer will be created 
+				with a system memory shadow buffer,
+				allowing you to read it back more efficiently than if it is in hardware
+			@param
+				indexShadowBuffer If this flag is set to true, the index buffer will be 
+				created with a system memory shadow buffer,
+				allowing you to read it back more efficiently than if it is in hardware
+        */
+        MeshPtr createPlane(
+            const String& name, const String& groupName, const Plane& plane,
+            Real width, Real height,
+            int xsegments = 1, int ysegments = 1,
+            bool normals = true, int numTexCoordSets = 1,
+            Real uTile = 1.0f, Real vTile = 1.0f, const Vector3& upVector = Vector3::UNIT_Y,
+			HardwareBuffer::Usage vertexBufferUsage = HardwareBuffer::HBU_STATIC_WRITE_ONLY, 
+			HardwareBuffer::Usage indexBufferUsage = HardwareBuffer::HBU_STATIC_WRITE_ONLY,
+			bool vertexShadowBuffer = true, bool indexShadowBuffer = true);
+
+        
+        /** Creates a plane, which because of it's texture coordinates looks like a curved
+			surface, useful for skies in a skybox. 
+            @param
+                name The name to give the resulting mesh
+            @param 
+                groupName The name of the resource group to assign the mesh to 
+            @param
+                plane The orientation of the plane and distance from the origin
+            @param
+                width The width of the plane in world coordinates
+            @param
+                height The height of the plane in world coordinates
+            @param
+				curvature The curvature of the plane. Good values are
+                between 2 and 65. Higher values are more curved leading to
+                a smoother effect, lower values are less curved meaning
+                more distortion at the horizons but a better distance effect.
+			@param
+                xsegments The number of segements to the plane in the x direction
+            @param
+                ysegments The number of segements to the plane in the y direction
+            @param
+                normals If true, normals are created perpendicular to the plane
+            @param
+                numTexCoordSets The number of 2D texture coordinate sets created - by default the corners
+                are created to be the corner of the texture.
+            @param
+                uTile The number of times the texture should be repeated in the u direction
+            @param
+                vTile The number of times the texture should be repeated in the v direction
+            @param
+                upVector The 'Up' direction of the plane.
+            @param
+                orientation The orientation of the overall sphere that's used to create the illusion
+			@param
+				vertexBufferUsage The usage flag with which the vertex buffer for this plane will be created
+			@param
+				indexBufferUsage The usage flag with which the index buffer for this plane will be created
+			@param
+				vertexShadowBuffer If this flag is set to true, the vertex buffer will be created 
+				with a system memory shadow buffer,
+				allowing you to read it back more efficiently than if it is in hardware
+			@param
+				indexShadowBuffer If this flag is set to true, the index buffer will be 
+				created with a system memory shadow buffer,
+				allowing you to read it back more efficiently than if it is in hardware
+            @param ySegmentsToKeep The number of segments from the top of the dome
+                downwards to keep. -1 keeps all of them. This can save fillrate if
+                you cannot see much of the sky lower down.
+        */
+		MeshPtr createCurvedIllusionPlane(
+            const String& name, const String& groupName, const Plane& plane,
+            Real width, Real height, Real curvature,
+            int xsegments = 1, int ysegments = 1,
+            bool normals = true, int numTexCoordSets = 1,
+            Real uTile = 1.0f, Real vTile = 1.0f, const Vector3& upVector = Vector3::UNIT_Y,
+            const Quaternion& orientation = Quaternion::IDENTITY,
+			HardwareBuffer::Usage vertexBufferUsage = HardwareBuffer::HBU_STATIC_WRITE_ONLY, 
+			HardwareBuffer::Usage indexBufferUsage = HardwareBuffer::HBU_STATIC_WRITE_ONLY,
+			bool vertexShadowBuffer = true, bool indexShadowBuffer = true, 
+            int ySegmentsToKeep = -1);
+
+		/** Creates a genuinely curved plane, by default majoring on the x/y axes facing positive Z.
+            @param
+                name The name to give the resulting mesh
+            @param 
+                groupName The name of the resource group to assign the mesh to 
+            @param
+                plane The orientation of the plane and distance from the origin
+            @param
+                width The width of the plane in world coordinates
+            @param
+                height The height of the plane in world coordinates
+			@param
+				bow The amount of 'bow' in the curved plane.  (Could also be concidered the depth.)
+            @param
+                xsegments The number of segements to the plane in the x direction
+            @param
+                ysegments The number of segements to the plane in the y direction
+            @param
+                normals If true, normals are created perpendicular to the plane
+            @param
+                numTexCoordSets The number of 2D texture coordinate sets created - by default the corners
+                are created to be the corner of the texture.
+            @param
+                uTile The number of times the texture should be repeated in the u direction
+            @param
+                vTile The number of times the texture should be repeated in the v direction
+            @param
+                upVector The 'Up' direction of the plane.
+			@param
+				vertexBufferUsage The usage flag with which the vertex buffer for this plane will be created
+			@param
+				indexBufferUsage The usage flag with which the index buffer for this plane will be created
+			@param
+				vertexShadowBuffer If this flag is set to true, the vertex buffer will be created 
+				with a system memory shadow buffer,
+				allowing you to read it back more efficiently than if it is in hardware
+			@param
+				indexShadowBuffer If this flag is set to true, the index buffer will be 
+				created with a system memory shadow buffer,
+				allowing you to read it back more efficiently than if it is in hardware
+        */
+		MeshPtr createCurvedPlane( 
+			const String& name, const String& groupName, const Plane& plane, 
+			Real width, Real height, Real bow = 0.5f, 
+			int xsegments = 1, int ysegments = 1,
+			bool normals = false, int numTexCoordSets = 1, 
+			Real xTile = 1.0f, Real yTile = 1.0f, const Vector3& upVector = Vector3::UNIT_Y,
+			HardwareBuffer::Usage vertexBufferUsage = HardwareBuffer::HBU_STATIC_WRITE_ONLY, 
+			HardwareBuffer::Usage indexBufferUsage = HardwareBuffer::HBU_STATIC_WRITE_ONLY,
+			bool vertexShadowBuffer = true, bool indexShadowBuffer = true);
+
+        /** Creates a Bezier patch based on an array of control vertices.
+            @param
+                name The name to give the newly created mesh. 
+            @param 
+                groupName The name of the resource group to assign the mesh to 
+            @param
+                controlPointBuffer A pointer to a buffer containing the vertex data which defines control points 
+                of the curves rather than actual vertices. Note that you are expected to provide not
+                just position information, but potentially normals and texture coordinates too. The
+                format of the buffer is defined in the VertexDeclaration parameter
+            @param
+                decaration VertexDeclaration describing the contents of the buffer. 
+                Note this declaration must _only_ draw on buffer source 0!
+            @param
+                width Specifies the width of the patch in control points.
+            @param
+                height Specifies the height of the patch in control points. 
+            @param
+                uMaxSubdivisionLevel,vMaxSubdivisionLevel If you want to manually set the top level of subdivision, 
+                do it here, otherwise let the system decide.
+            @param
+                visibleSide Determines which side of the patch (or both) triangles are generated for.
+            @param
+                vbUsage Vertex buffer usage flags. Recommend the default since vertex buffer should be static.
+            @param
+                ibUsage Index buffer usage flags. Recommend the default since index buffer should 
+                be dynamic to change levels but not readable.
+            @param
+                vbUseShadow Flag to determine if a shadow buffer is generated for the vertex buffer. See
+                    HardwareBuffer for full details.
+            @param
+                ibUseShadow Flag to determine if a shadow buffer is generated for the index buffer. See
+                    HardwareBuffer for full details.
+        */
+        PatchMeshPtr createBezierPatch(
+            const String& name, const String& groupName, void* controlPointBuffer, 
+            VertexDeclaration *declaration, size_t width, size_t height,
+            size_t uMaxSubdivisionLevel = PatchSurface::AUTO_LEVEL, 
+            size_t vMaxSubdivisionLevel = PatchSurface::AUTO_LEVEL,
+            PatchSurface::VisibleSide visibleSide = PatchSurface::VS_FRONT,
+            HardwareBuffer::Usage vbUsage = HardwareBuffer::HBU_STATIC_WRITE_ONLY, 
+            HardwareBuffer::Usage ibUsage = HardwareBuffer::HBU_DYNAMIC_WRITE_ONLY,
+            bool vbUseShadow = true, bool ibUseShadow = true);
+        
+        /** Tells the mesh manager that all future meshes should prepare themselves for
+            shadow volumes on loading.
+        */
+        void setPrepareAllMeshesForShadowVolumes(bool enable);
+        /** Retrieves whether all Meshes should prepare themselves for shadow volumes. */
+        bool getPrepareAllMeshesForShadowVolumes(void);
+
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static MeshManager& getSingleton(void);
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static MeshManager* getSingletonPtr(void);
+
+	    /** Gets the factor by which the bounding box of an entity is padded.
+	        Default is 0.01
+	    */
+        Real getBoundsPaddingFactor(void);
+	
+	    /** Sets the factor by which the bounding box of an entity is padded
+	    */
+        void setBoundsPaddingFactor(Real paddingFactor);
+
+        /** @see ManualResourceLoader::loadResource */
+        void loadResource(Resource* res);
+
+    protected:
+        /// @copydoc ResourceManager::createImpl
+        Resource* createImpl(const String& name, ResourceHandle handle, 
+            const String& group, bool isManual, ManualResourceLoader* loader, 
+            const NameValuePairList* createParams);
+        
+        /** Utility method for tesselating 2D meshes.
+        */
+        void tesselate2DMesh(SubMesh* pSub, int meshWidth, int meshHeight, 
+			bool doubleSided = false, 
+			HardwareBuffer::Usage indexBufferUsage = HardwareBuffer::HBU_STATIC_WRITE_ONLY,
+			bool indexSysMem = false);
+
+        void createPrefabPlane(void);
+    
+        /** Enum identifying the types of manual mesh built by this manager */
+        enum MeshBuildType
+        {
+            MBT_PLANE,
+            MBT_CURVED_ILLUSION_PLANE,
+            MBT_CURVED_PLANE
+        };
+        /** Saved parameters used to (re)build a manual mesh built by this class */
+        struct MeshBuildParams
+        {
+            MeshBuildType type;
+            Plane plane;
+            Real width;
+            Real height;
+            Real curvature;
+            int xsegments;
+            int ysegments;
+            bool normals;
+            int numTexCoordSets;
+            Real xTile;
+            Real yTile;
+            Vector3 upVector;
+            Quaternion orientation;
+            HardwareBuffer::Usage vertexBufferUsage;
+            HardwareBuffer::Usage indexBufferUsage;
+            bool vertexShadowBuffer;
+            bool indexShadowBuffer;
+            int ySegmentsToKeep;
+        };
+        /** Map from resource pointer to parameter set */
+        typedef std::map<Resource*, MeshBuildParams> MeshBuildParamsMap;
+        MeshBuildParamsMap mMeshBuildParams;
+
+        /** Utility method for manual loading a plane */
+        void loadManualPlane(Mesh* pMesh, MeshBuildParams& params);
+        /** Utility method for manual loading a curved plane */
+        void loadManualCurvedPlane(Mesh* pMesh, MeshBuildParams& params);
+        /** Utility method for manual loading a curved illusion plane */
+        void loadManualCurvedIllusionPlane(Mesh* pMesh, MeshBuildParams& params);
+
+        bool mPrepAllMeshesForShadowVolumes;
+	
+	//the factor by which the bounding box of an entity is padded	
+	Real mBoundsPaddingFactor;
+    };
+
+
+} //namespace
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreStringInterface.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreStringInterface.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreStringInterface.h	(revision 1092)
@@ -0,0 +1,328 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __StringInterface_H__
+#define __StringInterface_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreString.h"
+#include "OgreCommon.h"
+
+namespace Ogre {
+
+
+    /// List of parameter types available
+    enum ParameterType
+    {
+        PT_BOOL,
+        PT_REAL,
+        PT_INT,
+        PT_UNSIGNED_INT,
+        PT_SHORT,
+        PT_UNSIGNED_SHORT,
+        PT_LONG,
+        PT_UNSIGNED_LONG,
+        PT_STRING,
+        PT_VECTOR3,
+        PT_MATRIX3,
+        PT_MATRIX4,
+        PT_QUATERNION,
+        PT_COLOURVALUE
+    };
+
+    /// Definition of a parameter supported by a StringInterface class, for introspection
+    class _OgreExport ParameterDef
+    {
+    public:
+        String name;
+        String description;
+        ParameterType paramType;
+        ParameterDef(const String& newName, const String& newDescription, ParameterType newType)
+            : name(newName), description(newDescription), paramType(newType) {}
+    };
+    typedef std::vector<ParameterDef> ParameterList;
+
+    /** Abstract class which is command object which gets/sets parameters.*/
+    class _OgreExport ParamCommand
+    {
+    public:
+        virtual String doGet(const void* target) const = 0;
+        virtual void doSet(void* target, const String& val) = 0;
+
+        virtual ~ParamCommand() { }
+    };
+    typedef std::map<String, ParamCommand* > ParamCommandMap;
+
+    /** Class to hold a dictionary of parameters for a single class. */
+    class _OgreExport ParamDictionary
+    {
+        friend class StringInterface;
+    protected:
+        /// Definitions of parameters
+        ParameterList mParamDefs;
+
+        /// Command objects to get/set
+        ParamCommandMap mParamCommands;
+
+        /** Retrieves the parameter command object for a named parameter. */
+        ParamCommand* getParamCommand(const String& name)
+        {
+            ParamCommandMap::iterator i = mParamCommands.find(name);
+            if (i != mParamCommands.end())
+            {
+                return i->second;
+            }
+            else
+            {
+                return 0;
+            }
+        }
+
+		const ParamCommand* getParamCommand(const String& name) const
+        {
+            ParamCommandMap::const_iterator i = mParamCommands.find(name);
+            if (i != mParamCommands.end())
+            {
+                return i->second;
+            }
+            else
+            {
+                return 0;
+            }
+        }
+    public:
+        ParamDictionary()  {}
+        /** Method for adding a parameter definition for this class. 
+        @param paramDef A ParameterDef object defining the parameter
+        @param paramCmd Pointer to a ParamCommand subclass to handle the getting / setting of this parameter.
+            NB this class will not destroy this on shutdown, please ensure you do
+
+        */
+        void addParameter(const ParameterDef& paramDef, ParamCommand* paramCmd)
+        {
+            mParamDefs.push_back(paramDef);
+            mParamCommands[paramDef.name] = paramCmd;
+        }
+        /** Retrieves a list of parameters valid for this object. 
+        @returns
+            A reference to a static list of ParameterDef objects.
+
+        */
+        const ParameterList& getParameters(void) const
+        {
+            return mParamDefs;
+        }
+
+
+
+    };
+    typedef std::map<String, ParamDictionary> ParamDictionaryMap;
+    
+    /** Class defining the common interface which classes can use to 
+        present a reflection-style, self-defining parameter set to callers.
+    @remarks
+        This class also holds a static map of class name to parameter dictionaries
+        for each subclass to use. See ParamDictionary for details. 
+    @remarks
+        In order to use this class, each subclass must call createParamDictionary in their constructors
+        which will create a parameter dictionary for the class if it does not exist yet.
+    */
+    class _OgreExport StringInterface 
+    {
+    protected:
+
+        /// Dictionary of parameters
+        static ParamDictionaryMap msDictionary;
+
+        /// Class name for this instance to be used as a lookup (must be initialised by subclasses)
+        String mParamDictName;
+
+        /** Internal method for creating a parameter dictionary for the class, if it does not already exist.
+        @remarks
+            This method will check to see if a parameter dictionary exist for this class yet,
+            and if not will create one. NB you must supply the name of the class (RTTI is not 
+            used or performance).
+        @param
+            className the name of the class using the dictionary
+        @returns
+            true if a new dictionary was created, false if it was already there
+        */
+        bool createParamDictionary(const String& className)
+        {
+            mParamDictName = className;
+            if (msDictionary.find(className) == msDictionary.end())
+            {
+                msDictionary[className] = ParamDictionary();
+                return true;
+            }
+            return false;
+
+        }
+
+    public:
+
+        /** Virtual desctructor, see Effective C++ */
+        virtual ~StringInterface() {}
+
+        /** Retrieves the parameter dictionary for this class. 
+        @remarks
+            Only valid to call this after createParamDictionary.
+        @returns
+            Pointer to ParamDictionary shared by all instances of this class
+            which you can add parameters to, retrieve parameters etc.
+        */
+        ParamDictionary* getParamDictionary(void)
+        {
+            ParamDictionaryMap::iterator i = msDictionary.find(mParamDictName);
+            if (i != msDictionary.end())
+            {
+                return &(i->second);
+            }
+            else
+            {
+                return 0;
+            }
+        }
+
+		const ParamDictionary* getParamDictionary(void) const
+        {
+            ParamDictionaryMap::const_iterator i = msDictionary.find(mParamDictName);
+            if (i != msDictionary.end())
+            {
+                return &(i->second);
+            }
+            else
+            {
+                return 0;
+            }
+        }
+
+        /** Retrieves a list of parameters valid for this object. 
+        @returns
+            A reference to a static list of ParameterDef objects.
+
+        */
+        const ParameterList& getParameters(void) const;
+
+        /** Generic parameter setting method.
+        @remarks
+            Call this method with the name of a parameter and a string version of the value
+            to set. The implementor will convert the string to a native type internally.
+            If in doubt, check the parameter definition in the list returned from 
+            StringInterface::getParameters.
+        @param
+            name The name of the parameter to set
+        @param
+            value String value. Must be in the right format for the type specified in the parameter definition.
+            See the StringConverter class for more information.
+        @returns
+            true if set was successful, false otherwise (NB no exceptions thrown - tolerant method)
+        */
+        virtual bool setParameter(const String& name, const String& value);
+        /** Generic multiple parameter setting method.
+        @remarks
+            Call this method with a list of name / value pairs
+            to set. The implementor will convert the string to a native type internally.
+            If in doubt, check the parameter definition in the list returned from 
+            StringInterface::getParameters.
+        @param
+            paramList Name/value pair list
+        */
+        virtual void setParameterList(const NameValuePairList& paramList);
+        /** Generic parameter retrieval method.
+        @remarks
+            Call this method with the name of a parameter to retrieve a string-format value of
+            the parameter in question. If in doubt, check the parameter definition in the
+            list returned from getParameters for the type of this parameter. If you
+            like you can use StringConverter to convert this string back into a native type.
+        @param
+            name The name of the parameter to get
+        @returns
+            String value of parameter, blank if not found
+        */
+        virtual String getParameter(const String& name) const
+        {
+            // Get dictionary
+            const ParamDictionary* dict = getParamDictionary();
+
+            if (dict)
+            {
+                // Look up command object
+                const ParamCommand* cmd = dict->getParamCommand(name);
+
+                if (cmd)
+                {
+                    return cmd->doGet(this);
+                }
+            }
+
+            // Fallback
+            return "";
+        }
+        /** Method for copying this object's parameters to another object.
+        @remarks
+            This method takes the values of all the object's parameters and tries to set the
+            same values on the destination object. This provides a completely type independent
+            way to copy parameters to other objects. Note that because of the String manipulation 
+            involved, this should not be regarded as an efficient process and should be saved for
+            times outside of the rendering loop.
+        @par
+            Any unrecognised parameters will be ignored as with setParameter method.
+        @param dest Pointer to object to have it's parameters set the same as this object.
+
+        */
+        virtual void copyParametersTo(StringInterface* dest) const
+        {
+            // Get dictionary
+            const ParamDictionary* dict = getParamDictionary();
+
+            if (dict)
+            {
+                // Iterate through own parameters
+                ParameterList::const_iterator i;
+            
+                for (i = dict->mParamDefs.begin(); 
+                i != dict->mParamDefs.end(); ++i)
+                {
+                    dest->setParameter(i->name, getParameter(i->name));
+                }
+            }
+
+
+        }
+
+        /** Cleans up the static 'msDictionary' required to reset Ogre,
+        otherwise the containers are left with invalid pointers, which will lead to a crash
+        as soon as one of the ResourceManager implementers (e.g. MaterialManager) initializes.*/
+        static void cleanupDictionary () ;
+
+    };
+
+
+
+}
+
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMath.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMath.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMath.h	(revision 1092)
@@ -0,0 +1,499 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __Math_H__
+#define __Math_H__
+
+#include "OgrePrerequisites.h"
+
+namespace Ogre
+{
+    /** Wrapper class which indicates a given angle value is in Radians.
+    @remarks
+        Radian values are interchangeable with Degree values, and conversions
+        will be done automatically between them.
+    */
+	class Radian
+	{
+		Real mRad;
+
+	public:
+		explicit Radian ( Real r=0 ) : mRad(r) {}
+		Radian ( const Degree& d );
+		const Radian& operator = ( const Real& f ) { mRad = f; return *this; }
+		const Radian& operator = ( const Radian& r ) { mRad = r.mRad; return *this; }
+		const Radian& operator = ( const Degree& d );
+
+		Real valueDegrees() const; // see bottom of this file
+		Real valueRadians() const { return mRad; }
+		Real valueAngleUnits() const;
+
+		Radian operator + ( const Radian& r ) const { return Radian ( mRad + r.mRad ); }
+		Radian operator + ( const Degree& d ) const;
+		Radian& operator += ( const Radian& r ) { mRad += r.mRad; return *this; }
+		Radian& operator += ( const Degree& d );
+		Radian operator - () { return Radian(-mRad); }
+		Radian operator - ( const Radian& r ) const { return Radian ( mRad - r.mRad ); }
+		Radian operator - ( const Degree& d ) const;
+		Radian& operator -= ( const Radian& r ) { mRad -= r.mRad; return *this; }
+		Radian& operator -= ( const Degree& d );
+		Radian operator * ( Real f ) const { return Radian ( mRad * f ); }
+        Radian operator * ( const Radian& f ) const { return Radian ( mRad * f.mRad ); }
+		Radian& operator *= ( Real f ) { mRad *= f; return *this; }
+		Radian operator / ( Real f ) const { return Radian ( mRad / f ); }
+		Radian& operator /= ( Real f ) { mRad /= f; return *this; }
+
+		bool operator <  ( const Radian& r ) const { return mRad <  r.mRad; }
+		bool operator <= ( const Radian& r ) const { return mRad <= r.mRad; }
+		bool operator == ( const Radian& r ) const { return mRad == r.mRad; }
+		bool operator != ( const Radian& r ) const { return mRad != r.mRad; }
+		bool operator >= ( const Radian& r ) const { return mRad >= r.mRad; }
+		bool operator >  ( const Radian& r ) const { return mRad >  r.mRad; }
+	};
+
+    /** Wrapper class which indicates a given angle value is in Degrees.
+    @remarks
+        Degree values are interchangeable with Radian values, and conversions
+        will be done automatically between them.
+    */
+	class Degree
+	{
+		Real mDeg; // if you get an error here - make sure to define/typedef 'Real' first
+
+	public:
+		explicit Degree ( Real d=0 ) : mDeg(d) {}
+		Degree ( const Radian& r ) : mDeg(r.valueDegrees()) {}
+		const Degree& operator = ( const Real& f ) { mDeg = f; return *this; }
+		const Degree& operator = ( const Degree& d ) { mDeg = d.mDeg; return *this; }
+		const Degree& operator = ( const Radian& r ) { mDeg = r.valueDegrees(); return *this; }
+
+		Real valueDegrees() const { return mDeg; }
+		Real valueRadians() const; // see bottom of this file
+		Real valueAngleUnits() const;
+
+		Degree operator + ( const Degree& d ) const { return Degree ( mDeg + d.mDeg ); }
+		Degree operator + ( const Radian& r ) const { return Degree ( mDeg + r.valueDegrees() ); }
+		Degree& operator += ( const Degree& d ) { mDeg += d.mDeg; return *this; }
+		Degree& operator += ( const Radian& r ) { mDeg += r.valueDegrees(); return *this; }
+		Degree operator - () { return Degree(-mDeg); }
+		Degree operator - ( const Degree& d ) const { return Degree ( mDeg - d.mDeg ); }
+		Degree operator - ( const Radian& r ) const { return Degree ( mDeg - r.valueDegrees() ); }
+		Degree& operator -= ( const Degree& d ) { mDeg -= d.mDeg; return *this; }
+		Degree& operator -= ( const Radian& r ) { mDeg -= r.valueDegrees(); return *this; }
+		Degree operator * ( Real f ) const { return Degree ( mDeg * f ); }
+        Degree operator * ( const Degree& f ) const { return Degree ( mDeg * f.mDeg ); }
+		Degree& operator *= ( Real f ) { mDeg *= f; return *this; }
+		Degree operator / ( Real f ) const { return Degree ( mDeg / f ); }
+		Degree& operator /= ( Real f ) { mDeg /= f; return *this; }
+
+		bool operator <  ( const Degree& d ) const { return mDeg <  d.mDeg; }
+		bool operator <= ( const Degree& d ) const { return mDeg <= d.mDeg; }
+		bool operator == ( const Degree& d ) const { return mDeg == d.mDeg; }
+		bool operator != ( const Degree& d ) const { return mDeg != d.mDeg; }
+		bool operator >= ( const Degree& d ) const { return mDeg >= d.mDeg; }
+		bool operator >  ( const Degree& d ) const { return mDeg >  d.mDeg; }
+	};
+
+    /** Wrapper class which identifies a value as the currently default angle 
+        type, as defined by Math::setAngleUnit.
+    @remarks
+        Angle values will be automatically converted between radians and degrees,
+        as appropriate.
+    */
+	class Angle
+	{
+		Real mAngle;
+	public:
+		explicit Angle ( Real angle ) : mAngle(angle) {}
+		operator Radian();
+		operator Degree();
+	};
+
+	// these functions could not be defined within the class definition of class
+	// Radian because they required class Degree to be defined
+	inline Radian::Radian ( const Degree& d ) : mRad(d.valueRadians()) {
+	}
+	inline const Radian& Radian::operator = ( const Degree& d ) {
+		mRad = d.valueRadians(); return *this;
+	}
+	inline Radian Radian::operator + ( const Degree& d ) const {
+		return Radian ( mRad + d.valueRadians() );
+	}
+	inline Radian& Radian::operator += ( const Degree& d ) {
+		mRad += d.valueRadians();
+		return *this;
+	}
+	inline Radian Radian::operator - ( const Degree& d ) const {
+		return Radian ( mRad - d.valueRadians() );
+	}
+	inline Radian& Radian::operator -= ( const Degree& d ) {
+		mRad -= d.valueRadians();
+		return *this;
+	}
+
+    /** Class to provide access to common mathematical functions.
+        @remarks
+            Most of the maths functions are aliased versions of the C runtime
+            library functions. They are aliased here to provide future
+            optimisation opportunities, either from faster RTLs or custom
+            math approximations.
+        @note
+            <br>This is based on MgcMath.h from
+            <a href="http://www.magic-software.com">Wild Magic</a>.
+    */
+    class _OgreExport Math 
+    {
+   public:
+       /** The angular units used by the API. This functionality is now deprecated in favor
+	       of discreet angular unit types ( see Degree and Radian above ). The only place
+		   this functionality is actually still used is when parsing files. Search for
+		   usage of the Angle class for those instances
+       */
+       enum AngleUnit
+       {
+           AU_DEGREE,
+           AU_RADIAN
+       };
+
+    protected:
+       // angle units used by the api
+       static AngleUnit msAngleUnit;
+
+        /// Size of the trig tables as determined by constructor.
+        static int mTrigTableSize;
+
+        /// Radian -> index factor value ( mTrigTableSize / 2 * PI )
+        static Real mTrigTableFactor;
+        static Real* mSinTable;
+        static Real* mTanTable;
+
+        /** Private function to build trig tables.
+        */
+        void buildTrigTables();
+
+		static Real SinTable (Real fValue);
+		static Real TanTable (Real fValue);
+    public:
+        /** Default constructor.
+            @param
+                trigTableSize Optional parameter to set the size of the
+                tables used to implement Sin, Cos, Tan
+        */
+        Math(unsigned int trigTableSize = 4096);
+
+        /** Default destructor.
+        */
+        ~Math();
+
+		static inline int IAbs (int iValue) { return ( iValue >= 0 ? iValue : -iValue ); }
+		static inline int ICeil (float fValue) { return int(ceil(fValue)); }
+		static inline int IFloor (float fValue) { return int(floor(fValue)); }
+        static int ISign (int iValue);
+
+		static inline Real Abs (Real fValue) { return Real(fabs(fValue)); }
+		static inline Degree Abs (const Degree& dValue) { return Degree(fabs(dValue.valueDegrees())); }
+		static inline Radian Abs (const Radian& rValue) { return Radian(fabs(rValue.valueRadians())); }
+		static Radian ACos (Real fValue);
+		static Radian ASin (Real fValue);
+		static inline Radian ATan (Real fValue) { return Radian(atan(fValue)); }
+		static inline Radian ATan2 (Real fY, Real fX) { return Radian(atan2(fY,fX)); }
+		static inline Real Ceil (Real fValue) { return Real(ceil(fValue)); }
+
+        /** Cosine function.
+            @param
+                fValue Angle in radians
+            @param
+                useTables If true, uses lookup tables rather than
+                calculation - faster but less accurate.
+        */
+        static inline Real Cos (const Radian& fValue, bool useTables = false) {
+			return (!useTables) ? Real(cos(fValue.valueRadians())) : SinTable(fValue.valueRadians() + HALF_PI);
+		}
+        /** Cosine function.
+            @param
+                fValue Angle in radians
+            @param
+                useTables If true, uses lookup tables rather than
+                calculation - faster but less accurate.
+        */
+        static inline Real Cos (Real fValue, bool useTables = false) {
+			return (!useTables) ? Real(cos(fValue)) : SinTable(fValue + HALF_PI);
+		}
+
+		static inline Real Exp (Real fValue) { return Real(exp(fValue)); }
+
+		static inline Real Floor (Real fValue) { return Real(floor(fValue)); }
+
+		static inline Real Log (Real fValue) { return Real(log(fValue)); }
+
+		static inline Real Pow (Real fBase, Real fExponent) { return Real(pow(fBase,fExponent)); }
+
+        static Real Sign (Real fValue);
+		static inline Radian Sign ( const Radian& rValue )
+		{
+			return Radian(Sign(rValue.valueRadians()));
+		}
+		static inline Degree Sign ( const Degree& dValue )
+		{
+			return Degree(Sign(dValue.valueDegrees()));
+		}
+
+        /** Sine function.
+            @param
+                fValue Angle in radians
+            @param
+                useTables If true, uses lookup tables rather than
+                calculation - faster but less accurate.
+        */
+        static inline Real Sin (const Radian& fValue, bool useTables = false) {
+			return (!useTables) ? Real(sin(fValue.valueRadians())) : SinTable(fValue.valueRadians());
+		}
+        /** Sine function.
+            @param
+                fValue Angle in radians
+            @param
+                useTables If true, uses lookup tables rather than
+                calculation - faster but less accurate.
+        */
+        static inline Real Sin (Real fValue, bool useTables = false) {
+			return (!useTables) ? Real(sin(fValue)) : SinTable(fValue);
+		}
+
+		static inline Real Sqr (Real fValue) { return fValue*fValue; }
+
+		static inline Real Sqrt (Real fValue) { return Real(sqrt(fValue)); }
+
+        static inline Radian Sqrt (const Radian& fValue) { return Radian(sqrt(fValue.valueRadians())); }
+
+        static inline Degree Sqrt (const Degree& fValue) { return Degree(sqrt(fValue.valueDegrees())); }
+
+        /** Inverse square root i.e. 1 / Sqrt(x), good for vector
+            normalisation.
+        */
+		static Real InvSqrt(Real fValue);
+
+        static Real UnitRandom ();  // in [0,1]
+
+        static Real RangeRandom (Real fLow, Real fHigh);  // in [fLow,fHigh]
+
+        static Real SymmetricRandom ();  // in [-1,1]
+
+        /** Tangent function.
+            @param
+                fValue Angle in radians
+            @param
+                useTables If true, uses lookup tables rather than
+                calculation - faster but less accurate.
+        */
+		static inline Real Tan (const Radian& fValue, bool useTables = false) {
+			return (!useTables) ? Real(tan(fValue.valueRadians())) : TanTable(fValue.valueRadians());
+		}
+        /** Tangent function.
+            @param
+                fValue Angle in radians
+            @param
+                useTables If true, uses lookup tables rather than
+                calculation - faster but less accurate.
+        */
+		static inline Real Tan (Real fValue, bool useTables = false) {
+			return (!useTables) ? Real(tan(fValue)) : TanTable(fValue);
+		}
+
+		static inline Real DegreesToRadians(Real degrees) { return degrees * fDeg2Rad; }
+        static inline Real RadiansToDegrees(Real radians) { return radians * fRad2Deg; }
+
+       /** These functions used to set the assumed angle units (radians or degrees) 
+            expected when using the Angle type.
+       @par
+            You can set this directly after creating a new Root, and also before/after resource creation,
+            depending on whether you want the change to affect resource files.
+       */
+       static void setAngleUnit(AngleUnit unit);
+       /** Get the unit being used for angles. */
+       static AngleUnit getAngleUnit(void);
+
+       /** Convert from the current AngleUnit to radians. */
+       static Real AngleUnitsToRadians(Real units);
+       /** Convert from radians to the current AngleUnit . */
+       static Real RadiansToAngleUnits(Real radians);
+       /** Convert from the current AngleUnit to degrees. */
+       static Real AngleUnitsToDegrees(Real units);
+       /** Convert from degrees to the current AngleUnit. */
+       static Real DegreesToAngleUnits(Real degrees);
+
+       /** Checks wether a given point is inside a triangle, in a
+            2-dimensional (Cartesian) space.
+            @remarks
+                The vertices of the triangle must be given in either
+                trigonometrical (anticlockwise) or inverse trigonometrical
+                (clockwise) order.
+            @param
+                px The X-coordinate of the point.
+            @param
+                py The Y-coordinate of the point.
+            @param
+                ax The X-coordinate of the triangle's first vertex.
+            @param
+                ay The Y-coordinate of the triangle's first vertex.
+            @param
+                bx The X-coordinate of the triangle's second vertex.
+            @param
+                by The Y-coordinate of the triangle's second vertex.
+            @param
+                cx The X-coordinate of the triangle's third vertex.
+            @param
+                cy The Y-coordinate of the triangle's third vertex.
+            @returns
+                If the point resides in the triangle, <b>true</b> is
+                returned.
+            @par
+                If the point is outside the triangle, <b>false</b> is
+                returned.
+        */
+        static bool pointInTri2D( Real px, Real pz, Real ax, Real az, Real bx, Real bz, Real cx, Real cz );
+
+        /** Ray / plane intersection, returns boolean result and distance. */
+        static std::pair<bool, Real> intersects(const Ray& ray, const Plane& plane);
+
+        /** Ray / sphere intersection, returns boolean result and distance. */
+        static std::pair<bool, Real> intersects(const Ray& ray, const Sphere& sphere, 
+            bool discardInside = true);
+        
+        /** Ray / box intersection, returns boolean result and distance. */
+        static std::pair<bool, Real> intersects(const Ray& ray, const AxisAlignedBox& sphere);
+
+        /** Sphere / box intersection test. */
+        static bool intersects(const Sphere& sphere, const AxisAlignedBox& box);
+
+        /** Plane / box intersection test. */
+        static bool intersects(const Plane& plane, const AxisAlignedBox& box);
+
+        /** Ray / convex plane list intersection test. 
+        @param ray The ray to test with
+        @param plaeList List of planes which form a convex volume
+        @param normalIsOutside Does the normal point outside the volume
+        */
+        static std::pair<bool, Real> intersects(
+            const Ray& ray, const std::vector<Plane>& planeList, 
+            bool normalIsOutside);
+        /** Ray / convex plane list intersection test. 
+        @param ray The ray to test with
+        @param plaeList List of planes which form a convex volume
+        @param normalIsOutside Does the normal point outside the volume
+        */
+        static std::pair<bool, Real> intersects(
+            const Ray& ray, const std::list<Plane>& planeList, 
+            bool normalIsOutside);
+
+        /** Sphere / plane intersection test. 
+        @remarks NB just do a plane.getDistance(sphere.getCenter()) for more detail!
+        */
+        static bool intersects(const Sphere& sphere, const Plane& plane);
+
+        /** Compare 2 reals, using tolerance for inaccuracies.
+        */
+        static bool RealEqual(Real a, Real b,
+            Real tolerance = std::numeric_limits<Real>::epsilon());
+
+        /** Calculates the tangent space vector for a given set of positions / texture coords. */
+        static Vector3 calculateTangentSpaceVector(
+            const Vector3& position1, const Vector3& position2, const Vector3& position3,
+            Real u1, Real v1, Real u2, Real v2, Real u3, Real v3);
+
+        /** Build a reflection matrix for the passed in plane. */
+        static Matrix4 buildReflectionMatrix(const Plane& p);
+        /** Calculate a face normal, including the w component which is the offset from the origin. */
+        static Vector4 calculateFaceNormal(const Vector3& v1, const Vector3& v2, const Vector3& v3);
+        /** Calculate a face normal, no w-information. */
+        static Vector3 calculateBasicFaceNormal(const Vector3& v1, const Vector3& v2, const Vector3& v3);
+        /** Calculate a face normal without normalize, including the w component which is the offset from the origin. */
+        static Vector4 calculateFaceNormalWithoutNormalize(const Vector3& v1, const Vector3& v2, const Vector3& v3);
+        /** Calculate a face normal without normalize, no w-information. */
+        static Vector3 calculateBasicFaceNormalWithoutNormalize(const Vector3& v1, const Vector3& v2, const Vector3& v3);
+
+        static const Real POS_INFINITY;
+        static const Real NEG_INFINITY;
+        static const Real PI;
+        static const Real TWO_PI;
+        static const Real HALF_PI;
+		static const Real fDeg2Rad;
+		static const Real fRad2Deg;
+
+    };
+
+	// these functions must be defined down here, because they rely on the
+	// angle unit conversion functions in class Math:
+
+	inline Real Radian::valueDegrees() const
+	{
+		return Math::RadiansToDegrees ( mRad );
+	}
+
+	inline Real Radian::valueAngleUnits() const
+	{
+		return Math::RadiansToAngleUnits ( mRad );
+	}
+
+	inline Real Degree::valueRadians() const
+	{
+		return Math::DegreesToRadians ( mDeg );
+	}
+
+	inline Real Degree::valueAngleUnits() const
+	{
+		return Math::DegreesToAngleUnits ( mDeg );
+	}
+
+	inline Angle::operator Radian()
+	{
+		return Radian(Math::AngleUnitsToRadians(mAngle));
+	}
+
+	inline Angle::operator Degree()
+	{
+		return Degree(Math::AngleUnitsToDegrees(mAngle));
+	}
+
+	inline Radian operator * ( Real a, const Radian& b )
+	{
+		return Radian ( a * b.valueRadians() );
+	}
+
+	inline Radian operator / ( Real a, const Radian& b )
+	{
+		return Radian ( a / b.valueRadians() );
+	}
+
+	inline Degree operator * ( Real a, const Degree& b )
+	{
+		return Degree ( a * b.valueDegrees() );
+	}
+
+	inline Degree operator / ( Real a, const Degree& b )
+	{
+		return Degree ( a / b.valueDegrees() );
+	}
+
+}
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMouseEvent.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMouseEvent.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMouseEvent.h	(revision 1092)
@@ -0,0 +1,311 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General  License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General  License for more details.
+
+You should have received a copy of the GNU Lesser General  License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+/***************************************************************************
+OgreMouseEvent.h  -  
+ * An event which indicates that a mouse action occurred in a MouseTarget (e.g. MouseTarget).
+ * This event is used both for mouse events (click, enter, exit) and mouse 
+ * motion events (moves and drags). 
+ * <P>
+ * This low-level event is generated by a MouseTarget object for:
+ * <ul>
+ * <li>Mouse Events
+ *     <ul>
+ *     <li>a mouse button is pressed
+ *     <li>a mouse button is released
+ *     <li>a mouse button is clicked (pressed and released)
+ *     <li>the mouse cursor enters a MouseTarget
+ *     <li>the mouse cursor exits a MouseTarget
+ *     </ul>
+ * <li> Mouse Motion Events
+ *     <ul>
+ *     <li>the mouse is moved
+ *     <li>the mouse is dragged
+ *     </ul>
+ * </ul>
+ * <P>
+ * A MouseEvent object is passed to every MouseListener
+ * object which registered to receive 
+ * the "interesting" mouse events using MouseTarget's 
+ * <code>addMouseListener</code> method.
+ *
+ * A MouseEvent object is also passed to every MouseMotionListener
+ * object which registered to receive 
+ * mouse motion events using the MouseTarget's addMouseMotionListener
+ * method
+ *
+ * When a mouse button is clicked, events are generated and sent to the
+ * registered MouseListeners, with the button mask set in the modifier field.
+ * For example, if the first mouse button is pressed, events are sent in the
+ * following order:
+ * <PRE>
+ *    MOUSE_PRESSED:  BUTTON1_MASK
+ *    MOUSE_RELEASED: BUTTON1_MASK
+ *    MOUSE_CLICKED:  BUTTON1_MASK
+ * </PRE>
+ * When multiple mouse buttons are pressed, each press, release, and click
+ * results in a separate event. The button mask in the modifier field reflects
+ * only the button that changed state, not the current state of all buttons.
+ * <P> 
+ * For example, if the user presses button 1 followed by button 2 and
+ * releases them in the same order, the following sequence of events is
+ * generated:
+ * <PRE>
+ *    MOUSE_PRESSED:  BUTTON1_MASK
+ *    MOUSE_PRESSED:  BUTTON2_MASK
+ *    MOUSE_RELEASED: BUTTON1_MASK
+ *    MOUSE_CLICKED:  BUTTON1_MASK
+ *    MOUSE_RELEASED: BUTTON2_MASK
+ *    MOUSE_CLICKED:  BUTTON2_MASK
+ * </PRE>
+ * If button2 is released first, the MOUSE_RELEASED/MOUSE_CLICKED pair
+ * for BUTTON2_MASK arrives first, followed by the pair for BUTTON1_MASK.
+ *
+-------------------
+begin                : Dec 03 2002
+copyright            : (C) 2002 by Kenny Sabir
+email                : kenny@sparksuit.com
+***************************************************************************/
+#ifndef __MouseEvent_H__
+#define __MouseEvent_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreInputEvent.h"
+
+namespace Ogre {
+
+/** An event which indicates that a mouse action occurred in a MouseTarget (e.g. MouseTarget).
+@remarks
+ * This event is used both for mouse events (click, enter, exit) and mouse 
+ * motion events (moves and drags). 
+ * <P>
+ * This low-level event is generated by a MouseTarget object for:
+ * <ul>
+ * <li>Mouse Events
+ *     <ul>
+ *     <li>a mouse button is pressed
+ *     <li>a mouse button is released
+ *     <li>a mouse button is clicked (pressed and released)
+ *     <li>the mouse cursor enters a MouseTarget
+ *     <li>the mouse cursor exits a MouseTarget
+ *     </ul>
+ * <li> Mouse Motion Events
+ *     <ul>
+ *     <li>the mouse is moved
+ *     <li>the mouse is dragged
+ *     </ul>
+ * </ul>
+ * <P>
+ * A MouseEvent object is passed to every MouseListener
+ * object which registered to receive 
+ * the "interesting" mouse events using MouseTarget's 
+ * <code>addMouseListener</code> method.
+ *
+ * A MouseEvent object is also passed to every MouseMotionListener
+ * object which registered to receive 
+ * mouse motion events using the MouseTarget's addMouseMotionListener
+ * method
+ *
+ * When a mouse button is clicked, events are generated and sent to the
+ * registered MouseListeners, with the button mask set in the modifier field.
+ * For example, if the first mouse button is pressed, events are sent in the
+ * following order:
+ * <PRE>
+ *    MOUSE_PRESSED:  BUTTON1_MASK
+ *    MOUSE_RELEASED: BUTTON1_MASK
+ *    MOUSE_CLICKED:  BUTTON1_MASK
+ * </PRE>
+ * When multiple mouse buttons are pressed, each press, release, and click
+ * results in a separate event. The button mask in the modifier field reflects
+ * only the button that changed state, not the current state of all buttons.
+ * <P> 
+ * For example, if the user presses button 1 followed by button 2 and
+ * releases them in the same order, the following sequence of events is
+ * generated:
+ * <PRE>
+ *    MOUSE_PRESSED:  BUTTON1_MASK
+ *    MOUSE_PRESSED:  BUTTON2_MASK
+ *    MOUSE_RELEASED: BUTTON1_MASK
+ *    MOUSE_CLICKED:  BUTTON1_MASK
+ *    MOUSE_RELEASED: BUTTON2_MASK
+ *    MOUSE_CLICKED:  BUTTON2_MASK
+ * </PRE>
+ * If button2 is released first, the MOUSE_RELEASED/MOUSE_CLICKED pair
+ * for BUTTON2_MASK arrives first, followed by the pair for BUTTON1_MASK.
+ *
+ */
+    class _OgreExport MouseEvent : public InputEvent
+    {
+    protected:
+		/**
+		 * The mouse events x coordinate.
+		 * The x value is relative to the MouseTarget
+		 * that fired the event.
+		 */
+		Real mX;
+		/**
+		 * The mouse events y coordinate.
+		 * The y value is relative to the MouseTarget
+		 * that fired the event.
+		 */
+		Real mY;
+
+		/**
+		 * The mouse events z coordinate.
+		 * The z value is relative to the MouseTarget
+		 * that fired the event.
+		 */
+		Real mZ;
+
+
+        Real mRelX;
+        Real mRelY;
+        Real mRelZ;
+
+		/**
+		 * Which button was pressed
+		 */
+
+		int mButtonID;
+		/**
+		 * not implemented yet
+		 */
+		int mClickCount;
+
+
+
+
+	public:
+
+		enum
+		{
+			ME_FIRST_EVENT = 500,
+			ME_LAST_EVENT = 510
+		};
+
+		enum 
+		{
+			ME_MOUSE_CLICKED 	= ME_FIRST_EVENT,
+			ME_MOUSE_PRESSED,
+			ME_MOUSE_RELEASED,
+			ME_MOUSE_MOVED,
+			ME_MOUSE_ENTERED,
+			ME_MOUSE_EXITED,
+			ME_MOUSE_DRAGGED,
+
+      ME_MOUSE_DRAGENTERED,
+      ME_MOUSE_DRAGEXITED,
+      ME_MOUSE_DRAGMOVED,
+      ME_MOUSE_DRAGDROPPED
+		};
+
+		/**
+		 * Constructs a MouseEvent object with the specified source MouseTarget,
+		 * type, modifiers, coordinates, and click count.
+		 *
+		 * @param source       the MouseTarget that originated the event
+		 * @param id           the integer that identifies the event
+		 * @param when         a long int that gives the time the event occurred
+		 * @param modifiers    the modifier keys down during event
+		 *                     (shift, ctrl, alt, meta)
+		 * @param x            the horizontal x coordinate for the mouse location
+		 * @param y            the vertical y coordinate for the mouse location
+		 * @param clickCount   the number of mouse clicks associated with event
+		 */
+		MouseEvent(PositionTarget* source, int id, int whichButton, Real when, int modifiers,
+			Real x, Real y, Real z, int clickCount);
+
+        MouseEvent(PositionTarget* source, int id, int whichButton, Real when, int modifiers,
+			Real x, Real y, Real z, Real relx, Real rely, Real relz, int clickCount);
+		
+         /**
+		 * Return the number of mouse clicks associated with this event.
+		 *
+		 * @return integer value for the number of clicks - NOT IMPLEMENTED
+		 */
+		 int getClickCount();
+
+		/**
+		 * Returns the horizontal x position of the event relative to the 
+		 * source MouseTarget.
+		 *
+		 * @return x  an integer indicating horizontal position relative to
+		 *            the MouseTarget
+		 */
+		 Real getX() const;
+
+		/**
+		 * Returns the vertical y position of the event relative to the
+		 * source MouseTarget.
+		 *
+		 * @return y  an integer indicating vertical position relative to
+		 *            the MouseTarget
+		 */
+		 Real getY() const;
+
+		/**
+		 * Returns the scrollwheel z position of the event relative to the
+		 * source MouseTarget.
+		 *
+		 * @return y  an integer indicating scrollwheel position relative to
+		 *            the MouseTarget
+		 */
+		 Real getZ() const;
+
+         /** get relative X cursor movement */
+         Real getRelX() const {return mRelX;}
+         
+         /** get relative Y cursor movement */
+         Real getRelY() const {return mRelY;}
+         
+         /** get relative Z cursor movement */
+         Real getRelZ() const {return mRelZ;}
+
+		/**
+		 * Returns a parameter string identifying this event.
+		 * This method is useful for event-logging and for debugging.
+		 *
+		 * @return a string identifying the event and its attributes
+		 */
+		 String paramString() const;
+
+		/**
+		 * Translates the event's coordinates to a new position
+		 * by adding specified x (horizontal) and y (veritcal) offsets.
+		 *
+		 * @param x the horizontal x value to add to the current x coordinate position
+		 * @param y the vertical y value to add to the current y coordinate position
+		 */
+		 void translatePoint(Real x, Real y);
+
+		 /** return the ID of the button */
+		 int getButtonID() const;
+    };
+
+
+}
+
+
+#endif 
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreOverlayElement.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreOverlayElement.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreOverlayElement.h	(revision 1092)
@@ -0,0 +1,481 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __OverlayElement_H__
+#define __OverlayElement_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreString.h"
+#include "OgreRenderable.h"
+#include "OgreStringInterface.h"
+#include "OgreOverlayElementCommands.h"
+
+#include "OgreColourValue.h"
+#include "OgreRectangle.h"
+
+namespace Ogre {
+
+
+    /** Enum describing how the position / size of an element is to be recorded. 
+    */
+    enum GuiMetricsMode
+    {
+        /// 'left', 'top', 'height' and 'width' are parametrics from 0.0 to 1.0
+        GMM_RELATIVE,
+        /// Positions & sizes are in absolute pixels
+        GMM_PIXELS,
+        /// Positions & sizes are in virtual pixels
+        GMM_RELATIVE_ASPECT_ADJUSTED
+    };
+
+    /** Enum describing where '0' is in relation to the parent in the horizontal dimension.
+    @remarks Affects how 'left' is interpreted.
+    */
+    enum GuiHorizontalAlignment
+    {
+        GHA_LEFT,
+        GHA_CENTER,
+        GHA_RIGHT
+    };
+    /** Enum describing where '0' is in relation to the parent in the vertical dimension.
+    @remarks Affects how 'top' is interpreted.
+    */
+    enum GuiVerticalAlignment
+    {
+        GVA_TOP,
+        GVA_CENTER,
+        GVA_BOTTOM
+    };
+
+    /** Abstract definition of a 2D element to be displayed in an Overlay.
+    @remarks
+    This class abstracts all the details of a 2D element which will appear in
+    an overlay. In fact, not all OverlayElement instances can be directly added to an
+    Overlay, only those which are OverlayContainer instances (a subclass of this class).
+    OverlayContainer objects can contain any OverlayElement however. This is just to 
+    enforce some level of grouping on widgets.
+    @par
+    OverlayElements should be managed using OverlayManager. This class is responsible for
+    instantiating / deleting elements, and also for accepting new types of element
+    from plugins etc.
+    @par
+    Note that positions / dimensions of 2D screen elements are expressed as parametric
+    values (0.0 - 1.0) because this makes them resolution-independent. However, most
+    screen resolutions have an aspect ratio of 1.3333:1 (width : height) so note that
+    in physical pixels 0.5 is wider than it is tall, so a 0.5x0.5 panel will not be
+    square on the screen (but it will take up exactly half the screen in both dimensions).
+    @par
+    Because this class is designed to be extensible, it subclasses from StringInterface
+    so its parameters can be set in a generic way.
+    */
+    class _OgreExport OverlayElement : public StringInterface, public Renderable
+    {
+    public:
+
+    protected:
+        // Command object for setting / getting parameters
+        static OverlayElementCommands::CmdLeft msLeftCmd;
+        static OverlayElementCommands::CmdTop msTopCmd;
+        static OverlayElementCommands::CmdWidth msWidthCmd;
+        static OverlayElementCommands::CmdHeight msHeightCmd;
+        static OverlayElementCommands::CmdMaterial msMaterialCmd;
+        static OverlayElementCommands::CmdCaption msCaptionCmd;
+        static OverlayElementCommands::CmdMetricsMode msMetricsModeCmd;
+        static OverlayElementCommands::CmdHorizontalAlign msHorizontalAlignCmd;
+        static OverlayElementCommands::CmdVerticalAlign msVerticalAlignCmd;
+        static OverlayElementCommands::CmdVisible msVisibleCmd;
+
+
+        String mName;
+        bool mVisible;
+        bool mCloneable;
+        Real mLeft;
+        Real mTop;
+        Real mWidth;
+        Real mHeight;
+        String mMaterialName;
+        MaterialPtr mpMaterial;
+        String mCaption;
+        ColourValue mColour;
+        Rectangle mClippingRegion;
+
+        GuiMetricsMode mMetricsMode;
+        GuiHorizontalAlignment mHorzAlign;
+        GuiVerticalAlignment mVertAlign;
+
+        // metric-mode positions, used in GMM_PIXELS & GMM_RELATIVE_ASPECT_ADJUSTED mode.
+        Real mPixelTop;
+        Real mPixelLeft;
+        Real mPixelWidth;
+        Real mPixelHeight;
+        Real mPixelScaleX;
+        Real mPixelScaleY;
+
+        // Parent pointer
+        OverlayContainer* mParent;
+        // Overlay attached to
+        Overlay* mOverlay;
+
+        // Derived positions from parent
+        Real mDerivedLeft;
+        Real mDerivedTop;
+        bool mDerivedOutOfDate;
+
+        /// Flag indicating if the vertex positons need recalculating
+        bool mGeomPositionsOutOfDate;
+		/// Flag indicating if the vertex uvs need recalculating
+		bool mGeomUVsOutOfDate;
+
+        // Zorder for when sending to render queue
+        // Derived from parent
+        ushort mZOrder;
+
+        // world transforms
+        Matrix4 mXForm;
+
+        // is element enabled
+        bool mEnabled;
+
+		// is element initialised
+		bool mInitialised;
+
+        // Used to see if this element is created from a Template
+        OverlayElement* mSourceTemplate ;
+
+        /** Internal method which is triggered when the positions of the element get updated,
+        meaning the element should be rebuilding it's mesh positions. Abstract since
+        subclasses must implement this.
+        */
+        virtual void updatePositionGeometry(void) = 0;
+		/** Internal method which is triggered when the UVs of the element get updated,
+		meaning the element should be rebuilding it's mesh UVs. Abstract since
+		subclasses must implement this.
+		*/
+		virtual void updateTextureGeometry(void) = 0;
+
+        /** Internal method for setting up the basic parameter definitions for a subclass. 
+        @remarks
+        Because StringInterface holds a dictionary of parameters per class, subclasses need to
+        call this to ask the base class to add it's parameters to their dictionary as well.
+        Can't do this in the constructor because that runs in a non-virtual context.
+        @par
+        The subclass must have called it's own createParamDictionary before calling this method.
+        */
+        virtual void addBaseParameters(void);
+
+    public:
+        /// Constructor: do not call direct, use OverlayManager::createElement
+        OverlayElement(const String& name);
+        virtual ~OverlayElement();
+
+        /** Initialise gui element */
+        virtual void initialise(void) = 0;
+
+        /** Gets the name of this overlay. */
+        const String& getName(void) const;
+
+
+        /** Shows this element if it was hidden. */
+        virtual void show(void);
+
+        /** Hides this element if it was visible. */
+        virtual void hide(void);
+
+        /** Returns whether or not the element is visible. */
+        bool isVisible(void) const;
+
+        bool isEnabled() const;
+        virtual void setEnabled(bool b);
+
+
+        /** Sets the dimensions of this element in relation to the screen (1.0 = screen width/height). */
+        void setDimensions(Real width, Real height);
+
+        /** Sets the position of the top-left corner of the element, relative to the screen size
+        (1.0 = screen width / height) */
+        void setPosition(Real left, Real top);
+
+        /** Sets the width of this element in relation to the screen (where 1.0 = screen width) */
+        void setWidth(Real width);
+        /** Gets the width of this element in relation to the screen (where 1.0 = screen width) */
+        Real getWidth(void) const;
+
+        /** Sets the height of this element in relation to the screen (where 1.0 = screen height) */
+        void setHeight(Real height);
+        /** Gets the height of this element in relation to the screen (where 1.0 = screen height) */
+        Real getHeight(void) const;
+
+        /** Sets the left of this element in relation to the screen (where 0 = far left, 1.0 = far right) */
+        void setLeft(Real left);
+        /** Gets the left of this element in relation to the screen (where 0 = far left, 1.0 = far right)  */
+        Real getLeft(void) const;
+
+        /** Sets the top of this element in relation to the screen (where 0 = top, 1.0 = bottom) */
+        void setTop(Real Top);
+        /** Gets the top of this element in relation to the screen (where 0 = top, 1.0 = bottom)  */
+        Real getTop(void) const;
+
+        /** Gets the left of this element in relation to the screen (where 0 = far left, 1.0 = far right)  */
+        Real _getLeft(void) const { return mLeft; }
+        /** Gets the top of this element in relation to the screen (where 0 = far left, 1.0 = far right)  */
+        Real _getTop(void) const { return mTop; }
+        /** Gets the width of this element in relation to the screen (where 1.0 = screen width)  */
+        Real _getWidth(void) const { return mWidth; }
+        /** Gets the height of this element in relation to the screen (where 1.0 = screen height)  */
+        Real _getHeight(void) const { return mHeight; }
+        /** Sets the left of this element in relation to the screen (where 1.0 = screen width) */
+        void _setLeft(Real left);
+        /** Sets the top of this element in relation to the screen (where 1.0 = screen width) */
+        void _setTop(Real top);
+        /** Sets the width of this element in relation to the screen (where 1.0 = screen width) */
+        void _setWidth(Real width);
+        /** Sets the height of this element in relation to the screen (where 1.0 = screen width) */
+        void _setHeight(Real height);
+        /** Sets the left and top of this element in relation to the screen (where 1.0 = screen width) */
+        void _setPosition(Real left, Real top);
+        /** Sets the width and height of this element in relation to the screen (where 1.0 = screen width) */
+        void _setDimensions(Real width, Real height);
+
+        /** Gets the name of the material this element uses. */
+        virtual const String& getMaterialName(void) const;
+
+        /** Sets the name of the material this element will use. 
+        @remarks
+        Different elements will use different materials. One constant about them
+        all though is that a Material used for a OverlayElement must have it's depth
+        checking set to 'off', which means it always gets rendered on top. OGRE
+        will set this flag for you if necessary. What it does mean though is that 
+        you should not use the same Material for rendering OverlayElements as standard 
+        scene objects. It's fine to use the same textures, just not the same
+        Material.
+        */
+        virtual void setMaterialName(const String& matName);
+
+
+        // --- Renderable Overrides ---
+        /** See Renderable */
+        const MaterialPtr& getMaterial(void) const;
+
+        // NB getRenderOperation not implemented, still abstract here
+
+        /** See Renderable */
+        void getWorldTransforms(Matrix4* xform) const;
+        /** @copydoc Renderable::getWorldOrientation */
+        const Quaternion& getWorldOrientation(void) const;
+        /** @copydoc Renderable::getWorldPosition */
+        const Vector3& getWorldPosition(void) const;
+
+        /** See Renderable */
+        bool useIdentityProjection(void) const;
+
+        /** See Renderable */
+        bool useIdentityView(void) const;
+
+        /** Tell the object to recalculate */
+        virtual void _positionsOutOfDate(void);
+
+        /** Internal method to update the element based on transforms applied. */
+        virtual void _update(void);
+
+        /** Updates this elements transform based on it's parent. */
+        virtual void _updateFromParent(void);
+
+        /** Internal method for notifying the gui element of it's parent and ultimate overlay. */
+        virtual void _notifyParent(OverlayContainer* parent, Overlay* overlay);
+
+        /** Gets the 'left' position as derived from own left and that of parents. */
+        virtual Real _getDerivedLeft(void);
+
+        /** Gets the 'top' position as derived from own left and that of parents. */
+        virtual Real _getDerivedTop(void);
+
+        /** Gets the clipping region of the element */
+        virtual void _getClippingRegion(Rectangle &clippingRegion);
+
+        /** Internal method to notify the element when Zorder of parent overlay
+        has changed.
+        @remarks
+        Overlays have explicit Z orders. OverlayElements do not, they inherit the 
+        ZOrder of the overlay, and the Zorder is incremented for every container
+        nested within this to ensure that containers are displayed behind contained
+        items. This method is used internally to notify the element of a change in
+        final zorder which is used to render the element.
+        */
+        virtual void _notifyZOrder(ushort newZOrder);
+
+        /** Internal method to notify the element when it's world transform
+         of parent overlay has changed.
+        */
+        virtual void _notifyWorldTransforms(const Matrix4& xform);
+
+        /** Internal method to notify the element when the viewport
+         of parent overlay has changed.
+        */
+        virtual void _notifyViewport();
+
+        /** Internal method to put the contents onto the render queue. */
+        virtual void _updateRenderQueue(RenderQueue* queue);
+
+        /** Gets the type name of the element. All concrete subclasses must implement this. */
+        virtual const String& getTypeName(void) const = 0;
+
+        /** Sets the caption on elements that support it. 
+        @remarks
+        This property doesn't do something on all elements, just those that support it.
+        However, being a common requirement it is in the top-level interface to avoid
+        having to set it via the StringInterface all the time.
+        */
+        virtual void setCaption(const String& text);
+
+        /** Gets the caption for this element. */
+        virtual const String& getCaption(void) const;
+
+        /** Sets the colour on elements that support it. 
+        @remarks
+        This property doesn't do something on all elements, just those that support it.
+        However, being a common requirement it is in the top-level interface to avoid
+        having to set it via the StringInterface all the time.
+        */
+        virtual void setColour(const ColourValue& col);
+
+        /** Gets the colour for this element. */
+        virtual const ColourValue& getColour(void) const;
+
+        /** Tells this element how to interpret the position and dimension values it is given.
+        @remarks
+        By default, OverlayElements are positioned and sized according to relative dimensions
+        of the screen. This is to ensure portability between different resolutions when you
+        want things to be positioned and sized the same way across all resolutions. However, 
+        sometimes you want things to be sized according to fixed pixels. In order to do this,
+        you can call this method with the parameter GMM_PIXELS. Note that if you then want
+        to place your element relative to the center, right or bottom of it's parent, you will
+        need to use the setHorizontalAlignment and setVerticalAlignment methods.
+        */
+        virtual void setMetricsMode(GuiMetricsMode gmm);
+        /** Retrieves the current settings of how the element metrics are interpreted. */
+        virtual GuiMetricsMode getMetricsMode(void) const;
+        /** Sets the horizontal origin for this element.
+        @remarks
+        By default, the horizontal origin for a OverlayElement is the left edge of the parent container
+        (or the screen if this is a root element). You can alter this by calling this method, which is
+        especially useful when you want to use pixel-based metrics (see setMetricsMode) since in this
+        mode you can't use relative positioning.
+        @par
+        For example, if you were using GMM_PIXELS metrics mode, and you wanted to place a 30x30 pixel
+        crosshair in the center of the screen, you would use GHA_CENTER with a 'left' property of -15.
+        @par
+        Note that neither GHA_CENTER or GHA_RIGHT alter the position of the element based
+        on it's width, you have to alter the 'left' to a negative number to do that; all this
+        does is establish the origin. This is because this way you can align multiple things
+        in the center and right with different 'left' offsets for maximum flexibility.
+        */
+        virtual void setHorizontalAlignment(GuiHorizontalAlignment gha);
+        /** Gets the horizontal alignment for this element. */
+        virtual GuiHorizontalAlignment getHorizontalAlignment(void) const;
+        /** Sets the vertical origin for this element. 
+        @remarks
+        By default, the vertical origin for a OverlayElement is the top edge of the parent container
+        (or the screen if this is a root element). You can alter this by calling this method, which is
+        especially useful when you want to use pixel-based metrics (see setMetricsMode) since in this
+        mode you can't use relative positioning.
+        @par
+        For example, if you were using GMM_PIXELS metrics mode, and you wanted to place a 30x30 pixel
+        crosshair in the center of the screen, you would use GHA_CENTER with a 'top' property of -15.
+        @par
+        Note that neither GVA_CENTER or GVA_BOTTOM alter the position of the element based
+        on it's height, you have to alter the 'top' to a negative number to do that; all this
+        does is establish the origin. This is because this way you can align multiple things
+        in the center and bottom with different 'top' offsets for maximum flexibility.
+        */
+        virtual void setVerticalAlignment(GuiVerticalAlignment gva);
+        /** Gets the vertical alignment for this element. */
+        virtual GuiVerticalAlignment getVerticalAlignment(void) const;
+
+
+
+
+        /** Returns true if xy is within the constraints of the component */
+        virtual bool contains(Real x, Real y) const;
+
+        /** Returns true if xy is within the constraints of the component */
+        virtual OverlayElement* findElementAt(Real x, Real y);		// relative to parent
+
+        /**
+        * returns false as this class is not a container type 
+        */
+        inline virtual bool isContainer() const
+        { return false; }
+
+        inline virtual bool isKeyEnabled() const
+        { return false; }
+
+        inline virtual bool isCloneable() const
+        { return mCloneable; }
+
+        inline virtual void setCloneable(bool c)
+        { mCloneable = c; }
+
+        /**
+        * Returns the parent container.
+        */
+        OverlayContainer* getParent() ;
+        void _setParent(OverlayContainer* parent) { mParent = parent; }
+
+        /**
+        * Returns the zOrder of the element
+        */
+        inline ushort getZOrder() const
+        { return mZOrder; }
+
+        /** Overridden from Renderable */
+        Real getSquaredViewDepth(const Camera* cam) const 
+        { 
+            return 10000 - getZOrder(); 
+        }
+
+        /** @copydoc Renderable::getLights */
+        const LightList& getLights(void) const
+        {
+            // Overlayelements should not be lit by the scene, this will not get called
+            static LightList ll;
+            return ll;
+        }
+
+        void copyFromTemplate(OverlayElement* templateOverlay);
+        virtual OverlayElement* clone(const String& instanceName);
+
+        // Returns the SourceTemplate for this element
+        const OverlayElement* getSourceTemplate () const {
+          return mSourceTemplate ;
+        }
+    };
+
+
+
+}
+
+
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePredefinedControllers.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePredefinedControllers.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgrePredefinedControllers.h	(revision 1092)
@@ -0,0 +1,250 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __PredefinedControllers_H__
+#define __PredefinedControllers_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreCommon.h"
+#include "OgreController.h"
+#include "OgreFrameListener.h"
+#include "OgreGpuProgram.h"
+
+namespace Ogre {
+
+    //-----------------------------------------------------------------------
+    // Controller Values
+    //-----------------------------------------------------------------------
+    /** Predefined controller value for getting the latest frame time.
+    */
+    class _OgreExport FrameTimeControllerValue : public ControllerValue<Real>, public FrameListener
+    {
+    protected:
+        Real mFrameTime;
+		Real mTimeFactor;
+		Real mElapsedTime;
+
+    public:
+        FrameTimeControllerValue();
+        bool frameEnded(const FrameEvent &evt);
+        bool frameStarted(const FrameEvent &evt);
+        Real getValue(void) const;
+        void setValue(Real value);
+		Real getTimeFactor(void) const;
+		void setTimeFactor(Real tf);
+		Real getElapsedTime(void) const;
+		void setElapsedTime(Real elapsedTime);
+    };
+
+    //-----------------------------------------------------------------------
+    /** Predefined controller value for getting / setting the frame number of a texture layer
+    */
+    class _OgreExport TextureFrameControllerValue : public ControllerValue<Real>
+    {
+    protected:
+        TextureUnitState* mTextureLayer;
+    public:
+        TextureFrameControllerValue(TextureUnitState* t);
+
+        /** Gets the frame number as a parametric value in the range [0,1]
+        */
+        Real getValue(void) const;
+        /** Sets the frame number as a parametric value in the range [0,1]; the actual frame number is value * (numFrames-1).
+        */
+        void setValue(Real value);
+
+    };
+    //-----------------------------------------------------------------------
+    /** Predefined controller value for getting / setting a texture coordinate modifications (scales and translates).
+        @remarks
+            Effects can be applied to the scale or the offset of the u or v coordinates, or both. If separate
+            modifications are required to u and v then 2 instances are required to control both independently, or 4
+            if you ant separate u and v scales as well as separate u and v offsets.
+        @par
+            Because of the nature of this value, it can accept values outside the 0..1 parametric range.
+    */
+    class _OgreExport TexCoordModifierControllerValue : public ControllerValue<Real>
+    {
+    protected:
+        bool mTransU, mTransV;
+        bool mScaleU, mScaleV;
+        bool mRotate;
+        TextureUnitState* mTextureLayer;
+    public:
+        /** Constructor.
+            @param
+                t TextureUnitState to apply the modification to.
+            @param
+                translateU If true, the u coordinates will be translated by the modification.
+            @param
+                translateV If true, the v coordinates will be translated by the modification.
+            @param
+                scaleU If true, the u coordinates will be scaled by the modification.
+            @param
+                scaleV If true, the v coordinates will be scaled by the modification.
+            @param
+                rotate If true, the texture will be rotated by the modification.
+        */
+        TexCoordModifierControllerValue(TextureUnitState* t, bool translateU = false, bool translateV = false,
+            bool scaleU = false, bool scaleV = false, bool rotate = false );
+
+        Real getValue(void) const;
+        void setValue(Real value);
+
+    };
+
+    //-----------------------------------------------------------------------
+    /** Predefined controller value for setting a single floating-
+	    point value in a constant paramter of a vertex or fragment program.
+    @remarks
+		Any value is accepted, it is propagated into the 'x'
+		component of the constant register identified by the index. If you
+		need to use named parameters, retrieve the index from the param
+		object before setting this controller up.
+	@note
+		Retrieving a value from the program parameters is not currently 
+		supported, therefore do not use this controller value as a source,
+		only as a target.
+    */
+    class _OgreExport FloatGpuParameterControllerValue : public ControllerValue<Real>
+    {
+    protected:
+		/// The parameters to access
+		GpuProgramParameters* mParams;
+		/// The index of the parameter to e read or set
+		size_t mParamIndex;
+    public:
+        /** Constructor.
+		    @param
+				params The parameters object to access
+            @param
+                index The index of the parameter to be set
+        */
+        FloatGpuParameterControllerValue(GpuProgramParameters* params,
+				size_t index );
+
+        ~FloatGpuParameterControllerValue() {}
+
+        Real getValue(void) const;
+        void setValue(Real value);
+
+    };
+    //-----------------------------------------------------------------------
+    // Controller functions
+    //-----------------------------------------------------------------------
+
+    /** Predefined controller function for dealing with animation.
+    */
+    class _OgreExport AnimationControllerFunction : public ControllerFunction<Real>
+    {
+    protected:
+        Real mSeqTime;
+        Real mTime;
+    public:
+        /** Constructor.
+            @param
+                sequenceTime The amount of time in seconds it takes to loop through the whole animation sequence.
+            @param
+                timeOffset The offset in seconds at which to start (default is start at 0)
+        */
+        AnimationControllerFunction(Real sequenceTime, Real timeOffset = 0.0f);
+
+        /** Overriden function.
+        */
+        Real calculate(Real source);
+    };
+
+    //-----------------------------------------------------------------------
+    /** Predefined controller function which simply scales an input to an output value.
+    */
+    class _OgreExport ScaleControllerFunction : public ControllerFunction<Real>
+    {
+    protected:
+        Real mScale;
+    public:
+        /** Constructor, requires a scale factor.
+            @param
+                scalefactor The multipier applied to the input to produce the output.
+            @param
+                deltaInput If true, signifies that the input will be a delta value such that the function should
+                 add it to an internal counter before calculating the output.
+        */
+        ScaleControllerFunction(Real scalefactor, bool deltaInput);
+
+        /** Overriden method.
+        */
+        Real calculate(Real source);
+
+    };
+
+    //-----------------------------------------------------------------------
+    /** Predefined controller function based on a waveform.
+        @remarks
+            A waveform function translates parametric intput to parametric output based on a wave. The factors
+            affecting the function are:
+            - wave type - the shape of the wave
+            - base - the base value of the output from the wave
+            - frequency - the speed of the wave in cycles per second
+            - phase - the offset of the start of the wave, e.g. 0.5 to start half-way through the wave
+            - amplitude - scales the output so that instead of lying within [0,1] it lies within [0,1] * amplitude
+        @par
+            Note that for simplicity of integration with the rest of the controller insfrastructure, the output of
+            the wave is parametric i.e. 0..1, rather than the typical wave output of [-1,1]. To compensate for this, the
+            traditional output of the wave is scaled by the following function before output:
+        @par
+            output = (waveoutput + 1) * 0.5
+        @par
+            Hence a wave output of -1 becomes 0, a wave ouput of 1 becomes 1, and a wave output of 0 becomes 0.5.
+    */
+    class _OgreExport WaveformControllerFunction : public ControllerFunction<Real>
+    {
+    protected:
+        WaveformType mWaveType;
+        Real mBase;
+        Real mFrequency;
+        Real mPhase;
+        Real mAmplitude;
+
+        /** Overridden from ControllerFunction. */
+        Real getAdjustedInput(Real input);
+
+    public:
+        /** Default contructor, requires at least a wave type, other parameters can be defaulted unless required.
+            @param
+                deltaInput If true, signifies that the input will be a delta value such that the function should
+                add it to an internal counter before calculating the output.
+        */
+        WaveformControllerFunction(WaveformType wType, Real base = 0, Real frequency = 1, Real phase = 0, Real amplitude = 1, bool deltaInput = true);
+
+        /** Overriden function.
+        */
+        Real calculate(Real source);
+
+    };
+    //-----------------------------------------------------------------------
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMaterial.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMaterial.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreMaterial.h	(revision 1092)
@@ -0,0 +1,620 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _Material_H__
+#define _Material_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreResource.h"
+#include "OgreIteratorWrappers.h"
+#include "OgreCommon.h"
+#include "OgreColourValue.h"
+#include "OgreBlendMode.h"
+
+
+namespace Ogre {
+
+	// Forward declaration
+	class MaterialPtr;
+
+	/** Class encapsulates rendering properties of an object.
+    @remarks
+    Ogre's material class encapsulates ALL aspects of the visual appearance,
+    of an object. It also includes other flags which 
+    might not be traditionally thought of as material properties such as 
+    culling modes and depth buffer settings, but these affect the 
+    appearance of the rendered object and are convenient to attach to the 
+    material since it keeps all the settings in one place. This is 
+    different to Direct3D which treats a material as just the colour 
+    components (diffuse, specular) and not texture maps etc. An Ogre 
+    Material can be thought of as equivalent to a 'Shader'.
+    @par
+    A Material can be rendered in multiple different ways depending on the
+    hardware available. You may configure a Material to use high-complexity
+    fragment shaders, but these won't work on every card; therefore a Technique
+    is an approach to creating the visual effect you are looking for. You are advised
+    to create fallback techniques with lower hardware requirements if you decide to
+    use advanced features. In addition, you also might want lower-detail techniques
+    for distant geometry.
+    @par
+    Each technique can be made up of multiple passes. A fixed-function pass
+    may combine multiple texture layers using multitexrtuing, but Ogre can 
+    break that into multiple passes automatically if the active card cannot
+    handle that many simultaneous textures. Programmable passes, however, cannot
+    be split down automatically, so if the active graphics card cannot handle the
+    technique which contains these passes, OGRE will try to find another technique
+    which the card can do. If, at the end of the day, the card cannot handle any of the
+    techniques which are listed for the material, the engine will render the 
+    geometry plain white, which should alert you to the problem.
+    @par
+    Ogre comes configured with a number of default settings for a newly 
+    created material. These can be changed if you wish by retrieving the 
+    default material settings through 
+    SceneManager::getDefaultMaterialSettings. Any changes you make to the 
+    Material returned from this method will apply to any materials created 
+    from this point onward.
+    */
+    class _OgreExport Material : public Resource
+    {
+        friend class SceneManager;
+        friend class MaterialManager;
+
+    public:
+        /// distance list used to specify LOD
+        typedef std::vector<Real> LodDistanceList;
+        typedef ConstVectorIterator<LodDistanceList> LodDistanceIterator;
+    protected:
+
+
+        /** Internal method which sets the material up from the default settings.
+        */
+        void applyDefaults(void);
+
+        typedef std::vector<Technique*> Techniques;
+        Techniques mTechniques;
+        Techniques mSupportedTechniques;
+        typedef std::map<unsigned short, Technique*> BestTechniqueList;
+        BestTechniqueList mBestTechniqueList;
+
+        LodDistanceList mLodDistances;
+        bool mReceiveShadows;
+		bool mTransparencyCastsShadows;
+        /// Does this material require compilation?
+        bool mCompilationRequired;
+
+        /** Fixup the best technique list guarantees no gaps inside.
+        @remarks
+            Iterate over the best technique list, looking for gaps and filling them in
+            guarantees we've got a sequential list with entries in all indexes
+        */
+        void fixupBestTechniqueList(void);
+
+		/** Overridden from Resource.
+		*/
+		void loadImpl(void);
+
+		/** Unloads the material, frees resources etc.
+		@see
+		Resource
+		*/
+		void unloadImpl(void);
+		/// @copydoc Resource::calculateSize
+		size_t calculateSize(void) const { return 0; } // TODO 
+    public:
+
+        /** Constructor - use resource manager's create method rather than this.
+        */
+		Material(ResourceManager* creator, const String& name, ResourceHandle handle,
+			const String& group, bool isManual = false, ManualResourceLoader* loader = 0);
+
+        ~Material();
+        /** Assignment operator to allow easy copying between materials.
+        */
+        Material& operator=( const Material& rhs );
+
+        /** Determines if the material has any transparency with the rest of the scene (derived from 
+            whether any Techniques say they involve transparency).
+        */
+        bool isTransparent(void) const;
+
+        /** Sets whether objects using this material will receive shadows.
+        @remarks
+            This method allows a material to opt out of receiving shadows, if
+            it would otherwise do so. Shadows will not be cast on any objects
+            unless the scene is set up to support shadows 
+            (@see SceneManager::setShadowTechnique), and not all techniques cast
+            shadows on all objects. In any case, if you have a need to prevent
+            shadows being received by material, this is the method you call to
+            do it.
+        @note 
+            Transparent materials never receive shadows despite this setting. 
+            The default is to receive shadows.
+        */
+        void setReceiveShadows(bool enabled) { mReceiveShadows = enabled; }
+        /** Returns whether or not objects using this material will receive shadows. */
+        bool getReceiveShadows(void) const { return mReceiveShadows; }
+
+		/** Sets whether objects using this material be classified as opaque to	the shadow caster system.
+		@remarks
+		This method allows a material to cast a shadow, even if it is transparent.
+		By default, transparent materials neither cast nor receive shadows. Shadows
+		will not be cast on any objects unless the scene is set up to support shadows 
+		(@see SceneManager::setShadowTechnique), and not all techniques cast
+		shadows on all objects.
+		*/
+		void setTransparencyCastsShadows(bool enabled) { mTransparencyCastsShadows = enabled; }
+		/** Returns whether or not objects using this material be classified as opaque to the shadow caster system. */
+		bool getTransparencyCastsShadows(void) const { return mTransparencyCastsShadows; }
+
+        /** Creates a new Technique for this Material.
+        @remarks
+            A Technique is a single way of rendering geometry in order to achieve the effect
+            you are intending in a material. There are many reason why you would want more than
+            one - the main one being to handle variable graphics card abilities; you might have
+            one technique which is impressive but only runs on 4th-generation graphics cards, 
+            for example. In this case you will want to create at least one fallback Technique.
+            OGRE will work out which Techniques a card can support and pick the best one.
+        @par
+            If multiple Techniques are available, the order in which they are created is 
+            important - the engine will consider lower-indexed Techniques to be preferable
+            to higher-indexed Techniques, ie when asked for the 'best' technique it will
+            return the first one in the technique list which is supported by the hardware.
+        */
+        Technique* createTechnique(void);
+        /** Gets the indexed technique. */
+        Technique* getTechnique(unsigned short index);
+		/** Retrieves the number of techniques. */
+        unsigned short getNumTechniques(void) const;
+        /** Removes the technique at the given index. */		
+        void removeTechnique(unsigned short index);		
+        /** Removes all the techniques in this Material. */
+        void removeAllTechniques(void);
+        typedef VectorIterator<Techniques> TechniqueIterator;
+        /** Get an iterator over the Techniques in this Material. */
+        TechniqueIterator getTechniqueIterator(void);
+        /** Gets an iterator over all the Techniques which are supported by the current card. 
+        @remarks
+            The supported technique list is only available after this material has been compiled,
+            which typically happens on loading the material. Therefore, if this method returns
+            an empty list, try calling Material::load.
+        */
+        TechniqueIterator getSupportedTechniqueIterator(void);
+		
+		/** Gets the indexed supported technique. */
+        Technique* getSupportedTechnique(unsigned short index);
+		/** Retrieves the number of supported techniques. */
+        unsigned short getNumSupportedTechniques(void) const;
+
+        /** Gets the number of levels-of-detail this material has, based on 
+            Technique::setLodIndex. 
+        @remarks
+            Note that this will not be up to date until the material has been compiled.
+        */
+        unsigned short getNumLodLevels(void) const { 
+            return static_cast<unsigned short>(mBestTechniqueList.size()); }
+
+        /** Gets the best supported technique. 
+        @remarks
+            This method returns the lowest-index supported Technique in this material
+            (since lower-indexed Techniques are considered to be better than higher-indexed
+            ones).
+        @par
+            The best supported technique is only available after this material has been compiled,
+            which typically happens on loading the material. Therefore, if this method returns
+            NULL, try calling Material::load.
+		@param lodIndex The material lod index to use
+        */
+        Technique* getBestTechnique(unsigned short lodIndex = 0);
+
+
+        /** Creates a new copy of this material with the same settings but a new name.
+		@param newName The name for the cloned material
+		@param changeGroup If true, the resource group of the clone is changed
+		@param newGroup Only required if changeGroup is true; the new group to assign
+        */
+        MaterialPtr clone(const String& newName, bool changeGroup = false, 
+			const String& newGroup = StringUtil::BLANK) const;
+
+        /** Copies the details of this material into another, preserving the target's handle and name
+        (unlike operator=) but copying everything else.
+        @param mat Weak reference to material which will receive this material's settings.
+        */
+        void copyDetailsTo(MaterialPtr& mat) const;
+
+        /** 'Compiles' this Material.
+        @remarks
+            Compiling a material involves determining which Techniques are supported on the
+            card on which OGRE is currently running, and for fixed-function Passes within those
+            Techniques, splitting the passes down where they contain more TextureUnitState 
+            instances than the current card has texture units.
+        @par
+            This process is automatically done when the Material is loaded, but may be
+            repeated if you make some procedural changes.
+        @param
+            autoManageTextureUnits If true, when a fixed function pass has too many TextureUnitState
+                entries than the card has texture units, the Pass in question will be split into
+                more than one Pass in order to emulate the Pass. If you set this to false and
+                this situation arises, an Exception will be thrown.
+        */
+        void compile(bool autoManageTextureUnits = true);
+
+        // -------------------------------------------------------------------------------
+        // The following methods are to make migration from previous versions simpler
+        // and to make code easier to write when dealing with simple materials
+        // They set the properties which have been moved to Pass for all Techniques and all Passes
+
+        /** Sets the ambient colour reflectance properties for every Pass in every Technique.
+        @note
+            This property has been moved to the Pass class, which is accessible via the 
+            Technique. For simplicity, this method allows you to set these properties for 
+            every current Technique, and for every current Pass within those Techniques. If 
+            you need more precision, retrieve the Technique and Pass instances and set the
+            property there.
+        @see Pass::setAmbient
+        */
+        void setAmbient(Real red, Real green, Real blue);
+
+        /** Sets the ambient colour reflectance properties for every Pass in every Technique.
+        @note
+            This property has been moved to the Pass class, which is accessible via the 
+            Technique. For simplicity, this method allows you to set these properties for 
+            every current Technique, and for every current Pass within those Techniques. If 
+            you need more precision, retrieve the Technique and Pass instances and set the
+            property there.
+        @see Pass::setAmbient
+        */
+        void setAmbient(const ColourValue& ambient);
+
+        /** Sets the diffuse colour reflectance properties of every Pass in every Technique.
+        @note
+            This property has been moved to the Pass class, which is accessible via the 
+            Technique. For simplicity, this method allows you to set these properties for 
+            every current Technique, and for every current Pass within those Techniques. If 
+            you need more precision, retrieve the Technique and Pass instances and set the
+            property there.
+        @see Pass::setDiffuse
+        */
+        void setDiffuse(Real red, Real green, Real blue, Real alpha);
+
+        /** Sets the diffuse colour reflectance properties of every Pass in every Technique.
+        @note
+            This property has been moved to the Pass class, which is accessible via the 
+            Technique. For simplicity, this method allows you to set these properties for 
+            every current Technique, and for every current Pass within those Techniques. If 
+            you need more precision, retrieve the Technique and Pass instances and set the
+            property there.
+        @see Pass::setDiffuse
+        */
+        void setDiffuse(const ColourValue& diffuse);
+
+        /** Sets the specular colour reflectance properties of every Pass in every Technique.
+        @note
+            This property has been moved to the Pass class, which is accessible via the 
+            Technique. For simplicity, this method allows you to set these properties for 
+            every current Technique, and for every current Pass within those Techniques. If 
+            you need more precision, retrieve the Technique and Pass instances and set the
+            property there.
+        @see Pass::setSpecular
+        */
+        void setSpecular(Real red, Real green, Real blue, Real alpha);
+
+        /** Sets the specular colour reflectance properties of every Pass in every Technique.
+        @note
+            This property has been moved to the Pass class, which is accessible via the 
+            Technique. For simplicity, this method allows you to set these properties for 
+            every current Technique, and for every current Pass within those Techniques. If 
+            you need more precision, retrieve the Technique and Pass instances and set the
+            property there.
+        @see Pass::setSpecular
+        */
+        void setSpecular(const ColourValue& specular);
+
+        /** Sets the shininess properties of every Pass in every Technique.
+        @note
+            This property has been moved to the Pass class, which is accessible via the 
+            Technique. For simplicity, this method allows you to set these properties for 
+            every current Technique, and for every current Pass within those Techniques. If 
+            you need more precision, retrieve the Technique and Pass instances and set the
+            property there.
+        @see Pass::setShininess
+        */
+        void setShininess(Real val);
+
+        /** Sets the amount of self-illumination of every Pass in every Technique.
+        @note
+            This property has been moved to the Pass class, which is accessible via the 
+            Technique. For simplicity, this method allows you to set these properties for 
+            every current Technique, and for every current Pass within those Techniques. If 
+            you need more precision, retrieve the Technique and Pass instances and set the
+            property there.
+        @see Pass::setSelfIllumination
+        */
+        void setSelfIllumination(Real red, Real green, Real blue);
+
+        /** Sets the amount of self-illumination of every Pass in every Technique.
+        @note
+            This property has been moved to the Pass class, which is accessible via the 
+            Technique. For simplicity, this method allows you to set these properties for 
+            every current Technique, and for every current Pass within those Techniques. If 
+            you need more precision, retrieve the Technique and Pass instances and set the
+            property there.
+        @see Pass::setSelfIllumination
+        */
+        void setSelfIllumination(const ColourValue& selfIllum);
+
+		/** Sets whether or not each Pass renders with depth-buffer checking on or not.
+        @note
+            This property has been moved to the Pass class, which is accessible via the 
+            Technique. For simplicity, this method allows you to set these properties for 
+            every current Technique, and for every current Pass within those Techniques. If 
+            you need more precision, retrieve the Technique and Pass instances and set the
+            property there.
+        @see Pass::setDepthCheckEnabled
+        */
+        void setDepthCheckEnabled(bool enabled);
+
+        /** Sets whether or not each Pass renders with depth-buffer writing on or not.
+        @note
+            This property has been moved to the Pass class, which is accessible via the 
+            Technique. For simplicity, this method allows you to set these properties for 
+            every current Technique, and for every current Pass within those Techniques. If 
+            you need more precision, retrieve the Technique and Pass instances and set the
+            property there.
+        @see Pass::setDepthWriteEnabled
+        */
+        void setDepthWriteEnabled(bool enabled);
+
+        /** Sets the function used to compare depth values when depth checking is on.
+        @note
+            This property has been moved to the Pass class, which is accessible via the 
+            Technique. For simplicity, this method allows you to set these properties for 
+            every current Technique, and for every current Pass within those Techniques. If 
+            you need more precision, retrieve the Technique and Pass instances and set the
+            property there.
+        @see Pass::setDepthFunction
+        */
+        void setDepthFunction( CompareFunction func );
+
+		/** Sets whether or not colour buffer writing is enabled for each Pass.
+        @note
+            This property has been moved to the Pass class, which is accessible via the 
+            Technique. For simplicity, this method allows you to set these properties for 
+            every current Technique, and for every current Pass within those Techniques. If 
+            you need more precision, retrieve the Technique and Pass instances and set the
+            property there.
+        @see Pass::setColourWriteEnabled
+		*/
+		void setColourWriteEnabled(bool enabled);
+
+        /** Sets the culling mode for each pass  based on the 'vertex winding'.
+        @note
+            This property has been moved to the Pass class, which is accessible via the 
+            Technique. For simplicity, this method allows you to set these properties for 
+            every current Technique, and for every current Pass within those Techniques. If 
+            you need more precision, retrieve the Technique and Pass instances and set the
+            property there.
+        @see Pass::setCullingMode
+        */
+        void setCullingMode( CullingMode mode );
+
+        /** Sets the manual culling mode, performed by CPU rather than hardware.
+        @note
+            This property has been moved to the Pass class, which is accessible via the 
+            Technique. For simplicity, this method allows you to set these properties for 
+            every current Technique, and for every current Pass within those Techniques. If 
+            you need more precision, retrieve the Technique and Pass instances and set the
+            property there.
+        @see Pass::setManualCullingMode
+        */
+        void setManualCullingMode( ManualCullingMode mode );
+
+        /** Sets whether or not dynamic lighting is enabled for every Pass.
+        @note
+            This property has been moved to the Pass class, which is accessible via the 
+            Technique. For simplicity, this method allows you to set these properties for 
+            every current Technique, and for every current Pass within those Techniques. If 
+            you need more precision, retrieve the Technique and Pass instances and set the
+            property there.
+        @see Pass::setLightingEnabled
+        */
+        void setLightingEnabled(bool enabled);
+
+        /** Sets the type of light shading required
+        @note
+            This property has been moved to the Pass class, which is accessible via the 
+            Technique. For simplicity, this method allows you to set these properties for 
+            every current Technique, and for every current Pass within those Techniques. If 
+            you need more precision, retrieve the Technique and Pass instances and set the
+            property there.
+        @see Pass::setShadingMode
+        */
+        void setShadingMode( ShadeOptions mode );
+
+        /** Sets the fogging mode applied to each pass.
+        @note
+            This property has been moved to the Pass class, which is accessible via the 
+            Technique. For simplicity, this method allows you to set these properties for 
+            every current Technique, and for every current Pass within those Techniques. If 
+            you need more precision, retrieve the Technique and Pass instances and set the
+            property there.
+        @see Pass::setFog
+        */
+        void setFog(
+            bool overrideScene,
+            FogMode mode = FOG_NONE,
+            const ColourValue& colour = ColourValue::White,
+            Real expDensity = 0.001, Real linearStart = 0.0, Real linearEnd = 1.0 );
+
+        /** Sets the depth bias to be used for each Pass.
+        @note
+            This property has been moved to the Pass class, which is accessible via the 
+            Technique. For simplicity, this method allows you to set these properties for 
+            every current Technique, and for every current Pass within those Techniques. If 
+            you need more precision, retrieve the Technique and Pass instances and set the
+            property there.
+        @see Pass::setDepthBias
+        */
+        void setDepthBias(ushort bias);
+
+        /** Set texture filtering for every texture unit in every Technique and Pass
+        @note
+            This property has been moved to the TextureUnitState class, which is accessible via the 
+            Technique and Pass. For simplicity, this method allows you to set these properties for 
+            every current TeextureUnitState, If you need more precision, retrieve the Technique, 
+            Pass and TextureUnitState instances and set the property there.
+        @see TextureUnitState::setTextureFiltering
+        */
+        void setTextureFiltering(TextureFilterOptions filterType);
+        /** Sets the anisotropy level to be used for all textures.
+        @note
+            This property has been moved to the TextureUnitState class, which is accessible via the 
+            Technique and Pass. For simplicity, this method allows you to set these properties for 
+            every current TeextureUnitState, If you need more precision, retrieve the Technique, 
+            Pass and TextureUnitState instances and set the property there.
+        @see TextureUnitState::setTextureAnisotropy
+        */
+        void setTextureAnisotropy(int maxAniso);
+
+        /** Sets the kind of blending every pass has with the existing contents of the scene.
+        @note
+            This property has been moved to the Pass class, which is accessible via the 
+            Technique. For simplicity, this method allows you to set these properties for 
+            every current Technique, and for every current Pass within those Techniques. If 
+            you need more precision, retrieve the Technique and Pass instances and set the
+            property there.
+        @see Pass::setSceneBlending
+        */
+        void setSceneBlending( const SceneBlendType sbt );
+
+        /** Allows very fine control of blending every Pass with the existing contents of the scene.
+        @note
+            This property has been moved to the Pass class, which is accessible via the 
+            Technique. For simplicity, this method allows you to set these properties for 
+            every current Technique, and for every current Pass within those Techniques. If 
+            you need more precision, retrieve the Technique and Pass instances and set the
+            property there.
+        @see Pass::setSceneBlending
+        */
+        void setSceneBlending( const SceneBlendFactor sourceFactor, const SceneBlendFactor destFactor);
+
+
+        /** Tells the material that it needs recompilation. */
+        void _notifyNeedsRecompile(void);
+
+        /** Sets the distance at which level-of-detail (LOD) levels come into effect.
+        @remarks
+            You should only use this if you have assigned LOD indexes to the Technique
+            instances attached to this Material. If you have done so, you should call this
+            method to determine the distance at which the lowe levels of detail kick in.
+            The decision about what distance is actually used is a combination of this
+            and the LOD bias applied to both the current Camera and the current Entity.
+        @param lodDistances A vector of Reals which indicate the distance at which to 
+            switch to lower details. They are listed in LOD index order, starting at index
+            1 (ie the first level down from the highest level 0, which automatically applies
+            from a distance of 0).
+        */
+        void setLodLevels(const LodDistanceList& lodDistances);
+        /** Gets an iterator over the list of distances at which each LOD comes into effect. 
+        @remarks
+            Note that the iterator returned from this method is not totally anagolous to 
+            the one passed in by calling setLodLevels - the list includes a zero
+            entry at the start (since the highest LOD starts at distance 0), and
+            the other distances are held as their squared value for efficiency.
+        */
+        LodDistanceIterator getLodDistanceIterator(void) const;
+
+        /** Gets the LOD index to use at the given distance. */
+        unsigned short getLodIndex(Real d) const;
+        /** Gets the LOD index to use at the given squared distance. */
+        unsigned short getLodIndexSquaredDepth(Real squaredDepth) const;
+
+        /** @copydoc Resource::touch
+        */
+        void touch(void) 
+        { 
+            if (mCompilationRequired) 
+                compile();
+            // call superclass
+            Resource::touch();
+        }
+
+	    /** Gets the compilation status of the material.
+        @return True if the material needs recompilation.
+        */
+	    bool getCompilationRequired() const
+	    {
+		    return mCompilationRequired;
+	    }
+
+
+    };
+
+	/** Specialisation of SharedPtr to allow SharedPtr to be assigned to MaterialPtr 
+	@note Has to be a subclass since we need operator=.
+	We could templatise this instead of repeating per Resource subclass, 
+	except to do so requires a form VC6 does not support i.e.
+	ResourceSubclassPtr<T> : public SharedPtr<T>
+	*/
+	class _OgreExport MaterialPtr : public SharedPtr<Material> 
+	{
+	public:
+		MaterialPtr() : SharedPtr<Material>() {}
+		explicit MaterialPtr(Material* rep) : SharedPtr<Material>(rep) {}
+		MaterialPtr(const MaterialPtr& r) : SharedPtr<Material>(r) {} 
+		MaterialPtr(const ResourcePtr& r) : SharedPtr<Material>()
+		{
+			// lock & copy other mutex pointer
+			OGRE_LOCK_MUTEX(*r.OGRE_AUTO_MUTEX_NAME)
+			OGRE_COPY_AUTO_SHARED_MUTEX(r.OGRE_AUTO_MUTEX_NAME)
+			pRep = static_cast<Material*>(r.getPointer());
+			pUseCount = r.useCountPointer();
+			if (pUseCount)
+			{
+				++(*pUseCount);
+			}
+		}
+
+		/// Operator used to convert a ResourcePtr to a MaterialPtr
+		MaterialPtr& operator=(const ResourcePtr& r)
+		{
+			if (pRep == static_cast<Material*>(r.getPointer()))
+				return *this;
+			release();
+			// lock & copy other mutex pointer
+			OGRE_LOCK_MUTEX(*r.OGRE_AUTO_MUTEX_NAME)
+			OGRE_COPY_AUTO_SHARED_MUTEX(r.OGRE_AUTO_MUTEX_NAME)
+			pRep = static_cast<Material*>(r.getPointer());
+			pUseCount = r.useCountPointer();
+			if (pUseCount)
+			{
+				++(*pUseCount);
+			}
+			return *this;
+		}
+	};
+
+} //namespace 
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderable.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderable.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderable.h	(revision 1092)
@@ -0,0 +1,260 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://ogre.sourceforge.net/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __Renderable_H__
+#define __Renderable_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreCommon.h"
+
+#include "OgreRenderOperation.h"
+#include "OgreMatrix4.h"
+#include "OgreMaterial.h"
+#include "OgrePlane.h"
+#include "OgreGpuProgram.h"
+#include "OgreVector4.h"
+#include "OgreException.h"
+
+namespace Ogre {
+
+    /** Abstract class defining the interface all renderable objects must implement.
+        @remarks
+            This interface abstracts renderable discrete objects which will be queued in the render pipeline,
+            grouped by material. Classes implementing this interface must be based on a single material, a single
+            world matrix (or a collection of world matrices which are blended by weights), and must be 
+            renderable via a single render operation.
+        @par
+            Note that deciding whether to put these objects in the rendering pipeline is done from the more specific
+            classes e.g. entities. Only once it is decided that the specific class is to be rendered is the abstract version
+            created (could be more than one per visible object) and pushed onto the rendering queue.
+    */
+    class _OgreExport Renderable
+    {
+    public:
+		Renderable() : mRenderDetailOverrideable(true) {}
+        /** Virtual destructor needed as class has virtual methods. */
+        virtual ~Renderable() { }
+        /** Retrieves a weak reference to the material this renderable object uses.
+        @remarks
+            Note that the Renderable also has the option to override the getTechnique method
+            to specify a particular Technique to use instead of the best one available.
+        */
+        virtual const MaterialPtr& getMaterial(void) const = 0;
+        /** Retrieves a pointer to the Material Technique this renderable object uses.
+        @remarks
+            This is to allow Renderables to use a chosen Technique if they wish, otherwise
+            they will use the best Technique available for the Material they are using.
+        */
+        virtual Technique* getTechnique(void) const { return getMaterial()->getBestTechnique(); }
+        /** Gets the render operation required to send this object to the frame buffer.
+        */
+        virtual void getRenderOperation(RenderOperation& op) = 0;
+        /** Gets the world transform matrix / matrices for this renderable object.
+            @remarks
+                If the object has any derived transforms, these are expected to be up to date as long as
+                all the SceneNode structures have been updated before this is called.
+            @par
+                This method will populate xform with 1 matrix if it does not use vertex blending. If it
+                does use vertex blending it will fill the passed in pointer with an array of matrices,
+                the length being the value returned from getNumWorldTransforms.
+        */
+        virtual void getWorldTransforms(Matrix4* xform) const = 0;
+        /** Gets the worldspace orientation of this renderable; this is used in order to
+            more efficiently update parameters to vertex & fragment programs, since inverting Quaterion
+            and Vector in order to derive object-space positions / directions for cameras and
+            lights is much more efficient than inverting a complete 4x4 matrix, and also 
+            eliminates problems introduced by scaling. */
+        virtual const Quaternion& getWorldOrientation(void) const = 0;
+        /** Gets the worldspace orientation of this renderable; this is used in order to
+            more efficiently update parameters to vertex & fragment programs, since inverting Quaterion
+            and Vector in order to derive object-space positions / directions for cameras and
+            lights is much more efficient than inverting a complete 4x4 matrix, and also 
+            eliminates problems introduced by scaling. */
+        virtual const Vector3& getWorldPosition(void) const = 0;
+
+        /** Returns the number of world transform matrices this renderable requires.
+        @remarks
+            When a renderable uses vertex blending, it uses multiple world matrices instead of a single
+            one. Each vertex sent to the pipeline can reference one or more matrices in this list
+            with given weights.
+            If a renderable does not use vertex blending this method returns 1, which is the default for 
+            simplicity.
+        */
+        virtual unsigned short getNumWorldTransforms(void) const { return 1; }
+
+        /** Returns whether or not to use an 'identity' projection.
+        @remarks
+            Usually Renderable objects will use a projection matrix as determined
+            by the active camera. However, if they want they can cancel this out
+            and use an identity projection, which effectively projects in 2D using
+            a {-1, 1} view space. Useful for overlay rendering. Normal renderables need
+            not override this.
+        */
+        virtual bool useIdentityProjection(void) const { return false; }
+
+        /** Returns whether or not to use an 'identity' projection.
+        @remarks
+            Usually Renderable objects will use a view matrix as determined
+            by the active camera. However, if they want they can cancel this out
+            and use an identity matrix, which means all geometry is assumed
+            to be relative to camera space already. Useful for overlay rendering. 
+            Normal renderables need not override this.
+        */
+        virtual bool useIdentityView(void) const { return false; }
+
+		/** Returns the camera-relative squared depth of this renderable.
+		@remarks
+			Used to sort transparent objects. Squared depth is used rather than
+			actual depth to avoid having to perform a square root on the result.
+		*/
+		virtual Real getSquaredViewDepth(const Camera* cam) const = 0;
+
+        /** Returns the preferred rasterisation mode of this renderable.
+        */
+        virtual SceneDetailLevel getRenderDetail() const {return SDL_SOLID;} 
+
+        /** Returns whether or not this Renderable wishes the hardware to normalise normals. */
+        virtual bool getNormaliseNormals(void) const { return false; }
+
+        /** Gets a list of lights, ordered relative to how close they are to this renderable.
+        @remarks
+            Directional lights, which have no position, will always be first on this list.
+        */
+        virtual const LightList& getLights(void) const = 0;
+
+        virtual const PlaneList& getClipPlanes() const { return msDummyPlaneList; };
+
+        /** Method which reports whether this renderable would normally cast a
+            shadow. 
+        @remarks
+            Subclasses should override this if they could have been used to 
+            generate a shadow.
+        */
+        virtual bool getCastsShadows(void) const { return false; }
+
+        /** Sets a custom parameter for this Renderable, which may be used to 
+            drive calculations for this specific Renderable, like GPU program parameters.
+        @remarks
+            Calling this method simply associates a numeric index with a 4-dimensional
+            value for this specific Renderable. This is most useful if the material
+            which this Renderable uses a vertex or fragment program, and has an 
+            ACT_CUSTOM parameter entry. This parameter entry can refer to the
+            index you specify as part of this call, thereby mapping a custom
+            parameter for this renderable to a program parameter.
+        @param index The index with which to associate the value. Note that this
+            does not have to start at 0, and can include gaps. It also has no direct
+            correlation with a GPU program parameter index - the mapping between the
+            two is performed by the ACT_CUSTOM entry, if that is used.
+        @param value The value to associate.
+        */
+        void setCustomParameter(size_t index, const Vector4& value) 
+        {
+            mCustomParameters[index] = value;
+        }
+
+        /** Gets the custom value associated with this Renderable at the given index.
+        @param
+            @see setCustomParaemter for full details.
+        */
+        const Vector4& getCustomParameter(size_t index) const
+        {
+            CustomParameterMap::const_iterator i = mCustomParameters.find(index);
+            if (i != mCustomParameters.end())
+            {
+                return i->second;
+            }
+            else
+            {
+                OGRE_EXCEPT(Exception::ERR_ITEM_NOT_FOUND, 
+                    "Parameter at the given index was not found.",
+                    "Renderable::getCustomParameter");
+            }
+        }
+
+        /** Update a custom GpuProgramParameters constant which is derived from 
+            information only this Renderable knows.
+        @remarks
+            This method allows a Renderable to map in a custom GPU program parameter
+            based on it's own data. This is represented by a GPU auto parameter
+            of ACT_CUSTOM, and to allow there to be more than one of these per
+            Renderable, the 'data' field on the auto parameter will identify
+            which parameter is being updated. The implementation of this method
+            must identify the parameter being updated, and call a 'setConstant' 
+            method on the passed in GpuProgramParameters object, using the details
+            provided in the incoming auto constant setting to identify the index
+            at which to set the parameter.
+        @par
+            You do not need to override this method if you're using the standard
+            sets of data associated with the Renderable as provided by setCustomParameter
+            and getCustomParameter. By default, the implementation will map from the
+            value indexed by the 'constantEntry.data' parameter to a value previously
+            set by setCustomParameter. But custom Renderables are free to override
+            this if they want, in any case.
+        @param constantEntry The auto constant entry referring to the parameter
+            being updated
+        @param params The parameters object which this method should call to 
+            set the updated parameters.
+        */
+        virtual void _updateCustomGpuParameter(
+            const GpuProgramParameters::AutoConstantEntry& constantEntry,
+            GpuProgramParameters* params) const
+        {
+            CustomParameterMap::const_iterator i = mCustomParameters.find(constantEntry.data);
+            if (i != mCustomParameters.end())
+            {
+                params->setConstant(constantEntry.index, i->second);
+            }
+        }
+
+		/** Sets whether this renderable's chosen detail level can be
+			overridden (downgraded) by the camera setting. 
+		@param override true means that a lower camera detail will override this
+			renderables detail level, false means it won't.
+		*/
+		virtual void setRenderDetailOverrideable(bool override)
+		{
+			mRenderDetailOverrideable = override;
+		}
+
+		/** Gets whether this renderable's chosen detail level can be
+			overridden (downgraded) by the camera setting. 
+		*/
+		virtual bool getRenderDetailOverrideable(void) const
+		{
+			return mRenderDetailOverrideable;
+		}
+
+
+    protected:
+        static const PlaneList msDummyPlaneList;
+        typedef std::map<size_t, Vector4> CustomParameterMap;
+        CustomParameterMap mCustomParameters;
+		bool mRenderDetailOverrideable;
+    };
+
+
+
+}
+
+#endif //__Renderable_H__
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSceneNode.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSceneNode.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSceneNode.h	(revision 1092)
@@ -0,0 +1,431 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _SceneNode_H__
+#define _SceneNode_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreNode.h"
+#include "OgreIteratorWrappers.h"
+#include "OgreAxisAlignedBox.h"
+
+namespace Ogre {
+
+    /** Class representing a node in the scene graph.
+        @remarks
+            A SceneNode is a type of Node which is used to organise objects in a scene.
+            It has the same hierarchical transformation properties of the generic Node class,
+            but also adds the ability to attach world objects to the node, and stores hierarchical
+            bounding volumes of the nodes in the tree.
+            Child nodes are contained within the bounds of the parent, and so on down the
+            tree, allowing for fast culling.
+    */
+    class _OgreExport SceneNode : public Node
+    {
+    public:
+        typedef HashMap<String, MovableObject*> ObjectMap;
+        typedef MapIterator<ObjectMap> ObjectIterator;
+		typedef ConstMapIterator<ObjectMap> ConstObjectIterator;
+
+    protected:
+        ObjectMap mObjectsByName;
+        mutable LightList mLightList;
+        mutable bool mLightListDirty;
+
+		/// Pointer to a Wire Bounding Box for this Node
+		WireBoundingBox *mWireBoundingBox;
+		/// Flag that determines if the bounding box of the node should be displayed
+		bool mShowBoundingBox;
+
+        /// SceneManager which created this node
+        SceneManager* mCreator;
+
+        /// World-Axis aligned bounding box, updated only through _update
+        AxisAlignedBox mWorldAABB;
+
+        /** Tells the SceneNode to update the world bound info it stores.
+        */
+        virtual void _updateBounds(void);
+
+        /** See Node. */
+        Node* createChildImpl(void);
+
+        /** See Node. */
+        Node* createChildImpl(const String& name);
+
+		/** See Node */
+		void setParent(Node* parent);
+
+		/** Internal method for setting whether the node is in the scene 
+			graph.
+		*/
+		void setInSceneGraph(bool inGraph);
+
+        /// Whether to yaw around a fixed axis.
+        bool mYawFixed;
+        /// Fixed axis to yaw around
+        Vector3 mYawFixedAxis;
+
+        /// Auto tracking target
+        SceneNode* mAutoTrackTarget;
+        /// Tracking offset for fine tuning
+        Vector3 mAutoTrackOffset;
+        /// Local 'normal' direction vector
+        Vector3 mAutoTrackLocalDirection;
+		/// Is this node a current part of the scene graph?
+		bool mIsInSceneGraph;
+    public:
+        /** Constructor, only to be called by the creator SceneManager.
+        @remarks
+            Creates a node with a generated name.
+        */
+        SceneNode(SceneManager* creator);
+        /** Constructor, only to be called by the creator SceneManager.
+        @remarks
+            Creates a node with a specified name.
+        */
+        SceneNode(SceneManager* creator, const String& name);
+        ~SceneNode();
+
+        /** Adds an instance of a scene object to this node.
+        @remarks
+            Scene objects can include Entity objects, Camera objects, Light objects, 
+            ParticleSystem objects etc. Anything that subclasses from MovableObject.
+        */
+        virtual void attachObject(MovableObject* obj);
+
+        /** Reports the number of objects attached to this node.
+        */
+        virtual unsigned short numAttachedObjects(void) const;
+
+        /** Retrieves a pointer to an attached object.
+        @remarks Retrieves by index, see alternate version to retrieve by name. The index
+        of an object may change as other objects are added / removed.
+        */
+        virtual MovableObject* getAttachedObject(unsigned short index);
+
+        /** Retrieves a pointer to an attached object.
+        @remarks Retrieves by object name, see alternate version to retrieve by index.
+        */
+        virtual MovableObject* getAttachedObject(const String& name);
+
+        /** Detaches the indexed object from this scene node.
+        @remarks
+            Detaches by index, see the alternate version to detach by name. Object indexes
+            may change as other objects are added / removed.
+        */
+        virtual MovableObject* detachObject(unsigned short index);
+        /** Detaches an object by pointer. */
+        virtual void detachObject(MovableObject* obj);
+
+        /** Detaches the named object from this node and returns a pointer to it. */
+        virtual MovableObject* detachObject(const String& name);
+
+        /** Detaches all objects attached to this node.
+        */
+        virtual void detachAllObjects(void);
+
+		/** Determines whether this node is in the scene graph, ie
+			whether it's ulitimate ancestor is the root scene node.
+		*/
+		virtual bool isInSceneGraph(void) const { return mIsInSceneGraph; }
+
+		/** Notifies this SceneNode that it is the root scene node. 
+		@remarks
+			Only SceneManager should call this!
+		*/
+		virtual void _notifyRootNode(void) { mIsInSceneGraph = true; }
+			
+
+        /** Internal method to update the Node.
+            @note
+                Updates this scene node and any relevant children to incorporate transforms etc.
+                Don't call this yourself unless you are writing a SceneManager implementation.
+            @param
+                updateChildren If true, the update cascades down to all children. Specify false if you wish to
+                update children separately, e.g. because of a more selective SceneManager implementation.
+            @param
+                parentHasChanged This flag indicates that the parent xform has changed,
+                    so the child should retrieve the parent's xform and combine it with its own
+                    even if it hasn't changed itself.
+        */
+        virtual void _update(bool updateChildren, bool parentHasChanged);
+
+        /** Internal method which locates any visible objects attached to this node and adds them to the passed in queue.
+            @remarks
+                Should only be called by a SceneManager implementation, and only after the _updat method has been called to
+                ensure transforms and world bounds are up to date.
+                SceneManager implementations can choose to let the search cascade automatically, or choose to prevent this
+                and select nodes themselves based on some other criteria.
+            @param
+                cam The active camera
+            @param
+                queue The SceneManager's rendering queue
+            @param
+                includeChildren If true, the call is cascaded down to all child nodes automatically.
+            @param
+                displayNodes If true, the nodes themselves are rendered as a set of 3 axes as well
+                    as the objects being rendered. For debugging purposes.
+        */
+        virtual void _findVisibleObjects(Camera* cam, RenderQueue* queue, 
+            bool includeChildren = true, bool displayNodes = false, bool onlyShadowCasters = false);
+
+        /** Gets the axis-aligned bounding box of this node (and hence all subnodes).
+        @remarks
+            Recommended only if you are extending a SceneManager, because the bounding box returned
+            from this method is only up to date after the SceneManager has called _update.
+        */
+        virtual AxisAlignedBox _getWorldAABB(void) const;
+
+        /** Retrieves an iterator which can be used to efficiently step through the objects 
+            attached to this node.
+        @remarks
+            This is a much faster way to go through <B>all</B> the objects attached to the node
+            than using getAttachedObject. But the iterator returned is only valid until a change
+            is made to the collection (ie an addition or removal) so treat the returned iterator
+            as transient, and don't add / remove items as you go through the iterator, save changes
+            until the end, or retrieve a new iterator after making the change. Making changes to
+            the object returned through the iterator is OK though.
+        */
+        virtual ObjectIterator getAttachedObjectIterator(void);
+        /** Retrieves an iterator which can be used to efficiently step through the objects 
+            attached to this node.
+        @remarks
+            This is a much faster way to go through <B>all</B> the objects attached to the node
+            than using getAttachedObject. But the iterator returned is only valid until a change
+            is made to the collection (ie an addition or removal) so treat the returned iterator
+            as transient, and don't add / remove items as you go through the iterator, save changes
+            until the end, or retrieve a new iterator after making the change. Making changes to
+            the object returned through the iterator is OK though.
+        */
+		virtual ConstObjectIterator getAttachedObjectIterator(void) const;
+
+        /** Gets the creator of this scene node. 
+        @remarks
+            This method returns the SceneManager which created this node.
+            This can be useful for destroying this node.
+        */
+        SceneManager* getCreator(void) const;
+
+        /** This method removes and destroys the named child and all of its children.
+        @remarks
+            Unlike removeChild, which removes a single named child from this
+            node but does not destroy it, this method destroys the child
+            and all of it's children. 
+        @par
+            Use this if you wish to recursively destroy a node as well as 
+            detaching it from it's parent. Note that any objects attached to
+            the nodes will be detached but will not themselves be destroyed.
+        */
+        virtual void removeAndDestroyChild(const String& name);
+
+        /** This method removes and destroys the child and all of its children.
+        @remarks
+            Unlike removeChild, which removes a single named child from this
+            node but does not destroy it, this method destroys the child
+            and all of it's children. 
+        @par
+            Use this if you wish to recursively destroy a node as well as 
+            detaching it from it's parent. Note that any objects attached to
+            the nodes will be detached but will not themselves be destroyed.
+        */
+        virtual void removeAndDestroyChild(unsigned short index);
+
+        /** Removes and destroys all children of this node.
+        @remarks
+            Use this to destroy all child nodes of this node and remove
+            them from the scene graph. Note that all objects attached to this
+            node will be detached but will not be destroyed.
+        */
+        virtual void removeAndDestroyAllChildren(void);
+
+        /** Allows the showing of the node's bounding box.
+        @remarks
+            Use this to show or hide the bounding box of the node.
+        */
+		virtual void showBoundingBox(bool bShow);
+
+        /** Add the bounding box to the rendering queue.
+        */
+		virtual void _addBoundingBoxToQueue(RenderQueue* queue);
+
+        /** This allows scene managers to determine if the node's bounding box
+			should be added to the rendering queue.
+        @remarks
+            Scene Managers that implement their own _findVisibleObjects will have to 
+			check this flag and then use _addBoundingBoxToQueue to add the bounding box
+			wireframe.
+        */
+		virtual bool getShowBoundingBox() const;
+
+        /** Creates an unnamed new SceneNode as a child of this node.
+        @param
+            translate Initial translation offset of child relative to parent
+        @param
+            rotate Initial rotation relative to parent
+        */
+        virtual SceneNode* createChildSceneNode(
+            const Vector3& translate = Vector3::ZERO, 
+            const Quaternion& rotate = Quaternion::IDENTITY );
+
+        /** Creates a new named SceneNode as a child of this node.
+        @remarks
+            This creates a child node with a given name, which allows you to look the node up from 
+            the parent which holds this collection of nodes.
+            @param
+                translate Initial translation offset of child relative to parent
+            @param
+                rotate Initial rotation relative to parent
+        */
+        virtual SceneNode* createChildSceneNode(const String& name, const Vector3& translate = Vector3::ZERO, const Quaternion& rotate = Quaternion::IDENTITY);
+
+        /** Allows retrieval of the nearest lights to the centre of this SceneNode.
+        @remarks
+            This method allows a list of lights, ordered by proximity to the centre of
+            this SceneNode, to be retrieved. Multiple access to this method when neither 
+            the node nor the lights have moved will result in the same list being returned
+            without recalculation. Can be useful when implementing Renderable::getLights.
+        @param radius Optional parameter to specify lights intersecting a given radius of
+            this SceneNode's centre.
+        */
+        const LightList& findLights(Real radius) const;
+
+        /** Tells the node whether to yaw around it's own local Y axis or a fixed axis of choice.
+        @remarks
+        This method allows you to change the yaw behaviour of the node - by default, it
+        yaws around it's own local Y axis when told to yaw with TS_LOCAL, this makes it
+        yaw around a fixed axis. 
+        You only really need this when you're using auto tracking (see setAutoTracking,
+        because when you're manually rotating a node you can specify the TransformSpace
+        in which you wish to work anyway.
+        @param
+        useFixed If true, the axis passed in the second parameter will always be the yaw axis no
+        matter what the node orientation. If false, the node returns to it's default behaviour.
+        @param
+        fixedAxis The axis to use if the first parameter is true.
+        */
+        void setFixedYawAxis( bool useFixed, const Vector3& fixedAxis = Vector3::UNIT_Y );
+
+		/** Rotate the node around the Y-axis.
+		*/
+		virtual void yaw(const Radian& angle, TransformSpace relativeTo = TS_LOCAL);
+#ifndef OGRE_FORCE_ANGLE_TYPES
+		inline void yaw(Real degrees, TransformSpace relativeTo = TS_LOCAL) {
+			yaw ( Angle(degrees), relativeTo );
+		}
+#endif//OGRE_FORCE_ANGLE_TYPES
+        /** Sets the node's direction vector ie it's local -z.
+        @remarks
+        Note that the 'up' vector for the orientation will automatically be 
+        recalculated based on the current 'up' vector (i.e. the roll will 
+        remain the same). If you need more control, use setOrientation.
+        @param x,y,z The components of the direction vector
+        @param relativeTo The space in which this direction vector is expressed
+        @param localDirectionVector The vector which normally describes the natural
+        direction of the node, usually -Z
+        */
+        void setDirection(Real x, Real y, Real z, 
+            TransformSpace relativeTo = TS_LOCAL, 
+            const Vector3& localDirectionVector = Vector3::NEGATIVE_UNIT_Z);
+
+        /** Sets the node's direction vector ie it's local -z.
+        @remarks
+        Note that the 'up' vector for the orientation will automatically be 
+        recalculated based on the current 'up' vector (i.e. the roll will 
+        remain the same). If you need more control, use setOrientation.
+        @param vec The direction vector
+        @param relativeTo The space in which this direction vector is expressed
+        @param localDirectionVector The vector which normally describes the natural
+        direction of the node, usually -Z
+        */
+        void setDirection(const Vector3& vec, TransformSpace relativeTo = TS_LOCAL, 
+            const Vector3& localDirectionVector = Vector3::NEGATIVE_UNIT_Z);
+        /** Points the local -Z direction of this node at a point in space.
+        @param targetPoint A vector specifying the look at point.
+        @param relativeTo The space in which the point resides
+        @param localDirectionVector The vector which normally describes the natural
+        direction of the node, usually -Z
+        */
+        void lookAt( const Vector3& targetPoint, TransformSpace relativeTo,
+            const Vector3& localDirectionVector = Vector3::NEGATIVE_UNIT_Z);
+        /** Enables / disables automatic tracking of another SceneNode.
+        @remarks
+        If you enable auto-tracking, this SceneNode will automatically rotate to
+        point it's -Z at the target SceneNode every frame, no matter how 
+        it or the other SceneNode move. Note that by default the -Z points at the 
+        origin of the target SceneNode, if you want to tweak this, provide a 
+        vector in the 'offset' parameter and the target point will be adjusted.
+        @param enabled If true, tracking will be enabled and the next 
+        parameter cannot be null. If false tracking will be disabled and the 
+        current orientation will be maintained.
+        @param target Pointer to the SceneNode to track. Make sure you don't
+        delete this SceneNode before turning off tracking (e.g. SceneManager::clearScene will
+        delete it so be careful of this). Can be null if and only if the enabled param is false.
+        @param localDirectionVector The local vector considered to be the usual 'direction'
+        of the node; normally the local -Z but can be another direction.
+        @param offset If supplied, this is the target point in local space of the target node
+        instead of the origin of the target node. Good for fine tuning the look at point.
+        */
+        void setAutoTracking(bool enabled, SceneNode* target = 0, 
+            const Vector3& localDirectionVector = Vector3::NEGATIVE_UNIT_Z,
+            const Vector3& offset = Vector3::ZERO);
+		/** Get the auto tracking target for this node, if any. */
+        SceneNode* getAutoTrackTarget(void) { return mAutoTrackTarget; }
+		/** Get the auto tracking offset for this node, if the node is auto tracking. */
+		const Vector3& getAutoTrackOffset(void) { return mAutoTrackOffset; }
+		/** Get the auto tracking local direction for this node, if it is auto tracking. */
+		const Vector3& getAutoTrackLocalDirection(void) { return mAutoTrackLocalDirection; }
+		/** Internal method used by OGRE to update auto-tracking cameras. */
+        void _autoTrack(void);
+        /** Gets the parent of this SceneNode. */
+        SceneNode* getParentSceneNode(void) const;
+        /** Makes all objects attached to this node become visible / invisble.
+        @remarks    
+            This is a shortcut to calling setVisible() on the objects attached
+            to this node, and optionally to all objects attached to child
+            nodes. 
+        @param visible Whether the objects are to be made visible or invisible
+        @param cascade If true, this setting cascades into child nodes too.
+        */
+        void setVisible(bool visible, bool cascade = true);
+        /** Inverts the visibility of all objects attached to this node.
+        @remarks    
+        This is a shortcut to calling setVisible(!isVisible()) on the objects attached
+        to this node, and optionally to all objects attached to child
+        nodes. 
+        @param cascade If true, this setting cascades into child nodes too.
+        */
+        void flipVisibility(bool cascade = true);
+
+
+
+
+
+    };
+
+
+}// namespace
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreAnimationTrack.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreAnimationTrack.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreAnimationTrack.h	(revision 1092)
@@ -0,0 +1,186 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __AnimationTrack_H__
+#define __AnimationTrack_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreSimpleSpline.h"
+#include "OgreRotationalSpline.h"
+
+namespace Ogre 
+{
+    /** A 'track' in an animation sequence, ie a sequence of keyframes which affect a
+        certain type of animable object.
+    @remarks
+        This class is intended as a base for more complete classes which will actually
+        animate specific types of object, e.g. a bone in a skeleton to affect
+        skeletal animation. An animation will likely include multiple tracks each of which
+        can be made up of many KeyFrame instances. Note that the use of tracks allows each animable
+        object to have it's own number of keyframes, i.e. you do not have to have the
+        maximum number of keyframes for all animable objects just to cope with the most
+        animated one.
+    @remarks
+        Since the most common animable object is a Node, there are options in this class for associating
+        the track with a Node which will receive keyframe updates automatically when the 'apply' method
+        is called.
+	@remarks
+		By default rotation is done using shortest-path algorithm.
+		It is possible to change this behaviour using
+		setUseShortestRotationPath() method.
+    */
+    class _OgreExport AnimationTrack
+    {
+    public:
+        /// Constructor
+        AnimationTrack(Animation* parent);
+        /// Constructor, associates with a Node
+        AnimationTrack(Animation* parent, Node* targetNode);
+
+        virtual ~AnimationTrack();
+
+        /** Returns the number of keyframes in this animation. */
+        unsigned short getNumKeyFrames(void) const;
+
+        /** Returns the KeyFrame at the specified index. */
+        KeyFrame* getKeyFrame(unsigned short index) const;
+
+        /** Gets the 2 KeyFrame objects which are active at the time given, and the blend value between them.
+        @remarks
+            At any point in time  in an animation, there are either 1 or 2 keyframes which are 'active',
+            1 if the time index is exactly on a keyframe, 2 at all other times i.e. the keyframe before
+            and the keyframe after.
+        @par
+            This method returns those keyframes given a time index, and also returns a parametric
+            value indicating the value of 't' representing where the time index falls between them.
+            E.g. if it returns 0, the time index is exactly on keyFrame1, if it returns 0.5 it is
+            half way between keyFrame1 and keyFrame2 etc.
+        @param timePos The time index in seconds.
+        @param keyFrame1 Pointer to a KeyFrame pointer which will receive the pointer to the 
+            keyframe just before or at this time index.
+        @param keyFrame2 Pointer to a KeyFrame pointer which will receive the pointer to the 
+            keyframe just after this time index. 
+        @param firstKeyIndex Pointer to an unsigned short which, if supplied, will receive the 
+            index of the 'from' keyframe incase the caller needs it.
+        @returns Parametric value indicating how far along the gap between the 2 keyframes the timePos
+            value is, e.g. 0.0 for exactly at 1, 0.25 for a quarter etc. By definition the range of this 
+            value is:  0.0 <= returnValue < 1.0 .
+        */
+        Real getKeyFramesAtTime(Real timePos, KeyFrame** keyFrame1, KeyFrame** keyFrame2,
+            unsigned short* firstKeyIndex = 0) const;
+
+        /** Creates a new KeyFrame and adds it to this animation at the given time index.
+        @remarks
+            It is better to create KeyFrames in time order. Creating them out of order can result 
+            in expensive reordering processing. Note that a KeyFrame at time index 0.0 is always created
+            for you, so you don't need to create this one, just access it using getKeyFrame(0);
+        @param timePos The time from which this KeyFrame will apply.
+        */
+        KeyFrame* createKeyFrame(Real timePos);
+
+        /** Removes a KeyFrame by it's index. */
+        void removeKeyFrame(unsigned short index);
+
+        /** Removes all the KeyFrames from this track. */
+        void removeAllKeyFrames(void);
+
+
+        /** Gets a KeyFrame object which contains the interpolated transforms at the time index specified.
+        @remarks
+            The KeyFrame objects held by this class are transformation snapshots at 
+            discrete points in time. Normally however, you want to interpolate between these
+            keyframes to produce smooth movement, and this method allows you to do this easily.
+            In animation terminology this is called 'tweening'. 
+        @param timeIndex The time (in relation to the whole animation sequence)
+        @returns A new keyframe object containing the interpolated transforms. Note that the
+            position and scaling transforms are linearly interpolated (lerp), whilst the rotation is
+            spherically linearly interpolated (slerp) for the most natural result.
+        */
+        KeyFrame getInterpolatedKeyFrame(Real timeIndex) const;
+
+        /** Applies an animation track at a certain position to the target node.
+        @remarks
+            When a track has bee associated with a target node, you can eaisly apply the animation
+            to the target by calling this method.
+        @param timePos The time position in the animation to apply.
+        @param weight The influence to give to this track, 1.0 for full influence, less to blend with
+          other animations.
+	    @param scale The scale to apply to translations and scalings, useful for 
+			adapting an animation to a different size target.
+        */
+        void apply(Real timePos, Real weight = 1.0, bool accumulate = false, 
+			Real scale = 1.0f);
+
+        /** Returns a pointer to the associated Node object (if any). */
+        Node* getAssociatedNode(void) const;
+
+        /** Sets the associated Node object which will be automatically affected by calls to 'apply'. */
+        void setAssociatedNode(Node* node);
+
+        /** As the 'apply' method but applies to a specified Node instead of associated node. */
+        void applyToNode(Node* node, Real timePos, Real weight = 1.0, 
+			bool accumulate = false, Real scale = 1.0f);
+		
+		/** Sets the method of rotation calculation */
+		void setUseShortestRotationPath(bool useShortestPath);
+		
+		/** Gets the method of rotation calculation */
+		bool getUseShortestRotationPath() const;
+
+        /** Internal method used to tell the track that keyframe data has been 
+            changed, which may cause it to rebuild some internal data. */
+        void _keyFrameDataChanged(void) const;
+
+		/** Method to determine if this track has any KeyFrames which are
+			doing anything useful - can be used to determine if this track
+			can be optimised out.
+		*/
+		bool hasNonZeroKeyFrames(void) const;
+
+		/** Optimise the current track by removing any duplicate keyframes. */
+		void optimise(void);
+    protected:
+        typedef std::vector<KeyFrame*> KeyFrameList;
+        KeyFrameList mKeyFrames;
+        Real mMaxKeyFrameTime;
+        Animation* mParent;
+        Node* mTargetNode;
+
+        // Flag indicating we need to rebuild the splines next time
+        void buildInterpolationSplines(void) const;
+
+        // Prebuilt splines, must be mutable since lazy-update in const method
+        mutable bool mSplineBuildNeeded;
+        mutable SimpleSpline mPositionSpline;
+        mutable SimpleSpline mScaleSpline;
+        mutable RotationalSpline mRotationSpline;
+		/// Defines if rotation is done using shortest path
+		mutable bool mUseShortestRotationPath ;
+      
+
+    };
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSimpleSpline.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSimpleSpline.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSimpleSpline.h	(revision 1092)
@@ -0,0 +1,126 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __SimpleSpline_H__
+#define __SimpleSpline_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreVector3.h"
+#include "OgreMatrix4.h"
+
+namespace Ogre {
+
+
+    /** A very simple spline class which implements the Catmull-Rom class of splines.
+    @remarks
+        Splines are bendy lines. You define a series of points, and the spline forms
+        a smoother line between the points to eliminate the sharp angles.
+    @par
+        Catmull-Rom splines are a specialisation of the general Hermite spline. With
+        a Hermite spline, you define the start and end point of the line, and 2 tangents,
+        one at the start of the line and one at the end. The Catmull-Rom spline simplifies
+        this by just asking you to define a series of points, and the tangents are 
+        created for you. 
+    */
+    class _OgreExport SimpleSpline
+    {
+    public:
+        SimpleSpline();
+        ~SimpleSpline();
+
+        /** Adds a control point to the end of the spline. */
+        void addPoint(const Vector3& p);
+
+        /** Gets the detail of one of the control points of the spline. */
+        const Vector3& getPoint(unsigned short index) const;
+
+        /** Gets the number of control points in the spline. */
+        unsigned short getNumPoints(void) const;
+
+        /** Clears all the points in the spline. */
+        void clear(void);
+
+        /** Updates a single point in the spline. 
+        @remarks
+            This point must already exist in the spline.
+        */
+        void updatePoint(unsigned short index, const Vector3& value);
+
+        /** Returns an interpolated point based on a parametric value over the whole series.
+        @remarks
+            Given a t value between 0 and 1 representing the parametric distance along the
+            whole length of the spline, this method returns an interpolated point.
+        @param t Parametric value.
+        */
+        Vector3 interpolate(Real t);
+
+        /** Interpolates a single segment of the spline given a parametric value.
+        @param fromIndex The point index to treat as t=0. fromIndex + 1 is deemed to be t=1
+        @param t Parametric value
+        */
+        Vector3 interpolate(unsigned int fromIndex, Real t);
+
+
+        /** Tells the spline whether it should automatically calculate tangents on demand
+            as points are added.
+        @remarks
+            The spline calculates tangents at each point automatically based on the input points.
+            Normally it does this every time a point changes. However, if you have a lot of points
+            to add in one go, you probably don't want to incur this overhead and would prefer to 
+            defer the calculation until you are finished setting all the points. You can do this
+            by calling this method with a parameter of 'false'. Just remember to manually call 
+            the recalcTangents method when you are done.
+        @param autoCalc If true, tangents are calculated for you whenever a point changes. If false, 
+            you must call reclacTangents to recalculate them when it best suits.
+        */
+        void setAutoCalculate(bool autoCalc);
+
+        /** Recalculates the tangents associated with this spline. 
+        @remarks
+            If you tell the spline not to update on demand by calling setAutoCalculate(false)
+            then you must call this after completing your updates to the spline points.
+        */
+        void recalcTangents(void);
+
+    protected:
+
+        bool mAutoCalc;
+
+        std::vector<Vector3> mPoints;
+        std::vector<Vector3> mTangents;
+
+        /// Matrix of coefficients 
+        Matrix4 mCoeffs;
+
+
+
+    };
+
+
+}
+
+
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderQueueSortingGrouping.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderQueueSortingGrouping.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreRenderQueueSortingGrouping.h	(revision 1092)
@@ -0,0 +1,364 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __RenderQueueSortingGrouping_H__
+#define __RenderQueueSortingGrouping_H__
+
+// Precompiler options
+#include "OgrePrerequisites.h"
+#include "OgreIteratorWrappers.h"
+#include "OgreMaterial.h"
+#include "OgreTechnique.h"
+#include "OgrePass.h"
+#include "OgreMaterialManager.h"
+
+namespace Ogre {
+
+    /** Renderables in the queue grouped by priority.
+    @remarks
+        This class simply groups renderables for rendering. All the 
+        renderables contained in this class are destined for the same
+        RenderQueueGroup (coarse groupings like those between the main
+        scene and overlays) and have the same priority (fine groupings
+        for detailed overlap control).
+    @par
+        This class optimises the grouped renderables by sorting them by
+        material to reduce render state changes, and outsorts transparent
+        objects.
+    */
+    class _OgrePrivate RenderPriorityGroup
+    {
+        /** Internal struct reflecting a single Pass for a Renderable. 
+        This is used to sort transparent objects.
+        */
+        struct RenderablePass
+        {
+            /// Pointer to the Renderable details
+            Renderable* renderable;
+            /// Pointer to the Pass
+            Pass* pass;
+
+            RenderablePass(Renderable* rend, Pass* p) :renderable(rend), pass(p) {}
+        };
+
+        /// Comparator to order non-transparent object passes
+        struct SolidQueueItemLess
+        {
+            bool _OgreExport operator()(const Pass* a, const Pass* b) const
+            {
+                // Sort by passHash, which is pass, then texture unit changes
+                unsigned long hasha = a->getHash();
+                unsigned long hashb = b->getHash();
+                if (hasha == hashb)
+                {
+                    // Must differentiate by pointer incase 2 passes end up with the same hash
+                    return a < b;
+                }
+                else
+                {
+                    return hasha < hashb;
+                }
+            }
+        };
+        /// Comparator to order transparent object passes
+        struct TransparentQueueItemLess
+        {
+            const Camera* camera;
+            bool _OgreExport operator()(const RenderablePass& a, const RenderablePass& b) const
+            {
+                if (a.renderable == b.renderable)
+                {
+                    // Same renderable, sort by pass hash
+                    return a.pass->getHash() < b.pass->getHash();
+                }
+                else
+                {
+                    // Different renderables, sort by depth
+                    Real adepth = a.renderable->getSquaredViewDepth(camera);
+                    Real bdepth = b.renderable->getSquaredViewDepth(camera);
+				    if (adepth == bdepth)
+				    {
+                        // Must return deterministic result, doesn't matter what
+                        return a.pass < b.pass;
+				    }
+				    else
+				    {
+				        // Sort DESCENDING by depth (ie far objects first)
+					    return (adepth > bdepth);
+				    }
+                }
+
+            }
+        };
+    public:
+        /** Vector of RenderablePass objects, this is built on the assumption that
+         vectors only ever increase in size, so even if we do clear() the memory stays
+         allocated, ie fast */
+        typedef std::vector<RenderablePass> TransparentRenderablePassList;
+        typedef std::vector<Renderable*> RenderableList;
+        /** Map of pass to renderable lists, used for solid objects since ordering within objects not
+        important. */
+        typedef std::map<Pass*, RenderableList*, SolidQueueItemLess> SolidRenderablePassMap;
+    protected:
+        /// Parent queue group
+        RenderQueueGroup* mParent;
+        bool mSplitPassesByLightingType;
+        bool mSplitNoShadowPasses;
+        /// Solid pass list, used when no shadows, modulative shadows, or ambient passes for additive
+        SolidRenderablePassMap mSolidPasses;
+        /// Solid per-light pass list, used with additive shadows
+        SolidRenderablePassMap mSolidPassesDiffuseSpecular;
+        /// Solid decal (texture) pass list, used with additive shadows
+        SolidRenderablePassMap mSolidPassesDecal;
+        /// Solid pass list, used when shadows are enabled but shadow receive is turned off for these passes
+        SolidRenderablePassMap mSolidPassesNoShadow;
+
+		/// Transparent list
+		TransparentRenderablePassList mTransparentPasses;
+
+        /// Totally empties and destroys a solid pass map
+        void destroySolidPassMap(SolidRenderablePassMap& passmap);
+
+        /// remove a pass entry from all solid pass maps
+        void removeSolidPassEntry(Pass* p);
+
+        /// Clear a solid pass map at the end of a frame
+        void clearSolidPassMap(SolidRenderablePassMap& passmap);
+        /// Internal method for adding a solid renderable
+        void addSolidRenderable(Technique* pTech, Renderable* rend, bool toNoShadowMap);
+        /// Internal method for adding a solid renderable
+        void addSolidRenderableSplitByLightType(Technique* pTech, Renderable* rend);
+        /// Internal method for adding a transparent renderable
+        void addTransparentRenderable(Technique* pTech, Renderable* rend);
+
+    public:
+        RenderPriorityGroup(RenderQueueGroup* parent, 
+            bool splitPassesByLightingType, bool splitNoShadowPasses) 
+            :mParent(parent), mSplitPassesByLightingType(splitPassesByLightingType),
+            mSplitNoShadowPasses(splitNoShadowPasses) { }
+
+        ~RenderPriorityGroup() {
+            // destroy all the pass map entries
+            destroySolidPassMap(mSolidPasses);
+            destroySolidPassMap(mSolidPassesDecal);
+            destroySolidPassMap(mSolidPassesDiffuseSpecular);
+            destroySolidPassMap(mSolidPassesNoShadow);
+            mTransparentPasses.clear();
+
+        }
+
+        /** Get the collection of solid passes currently queued */
+        const SolidRenderablePassMap& _getSolidPasses(void) const
+        { return mSolidPasses; }
+        /** Get the collection of solid passes currently queued (per-light) */
+        const SolidRenderablePassMap& _getSolidPassesDiffuseSpecular(void) const
+        { return mSolidPassesDiffuseSpecular; }
+        /** Get the collection of solid passes currently queued (decal textures)*/
+        const SolidRenderablePassMap& _getSolidPassesDecal(void) const
+        { return mSolidPassesDecal; }
+        /** Get the collection of solid passes for which shadow receipt is disabled*/
+        const SolidRenderablePassMap& _getSolidPassesNoShadow(void) const
+        { return mSolidPassesNoShadow; }
+        /** Get the collection of transparent passes currently queued */
+        const TransparentRenderablePassList& _getTransparentPasses(void) const
+        { return mTransparentPasses; }
+
+
+        /** Add a renderable to this group. */
+        void addRenderable(Renderable* pRend);
+
+		/** Sorts the objects which have been added to the queue; transparent objects by their 
+            depth in relation to the passed in Camera. */
+		void sort(const Camera* cam);
+
+        /** Clears this group of renderables. 
+        */
+        void clear(void);
+
+        /** Sets whether or not the queue will split passes by their lighting type,
+        ie ambient, per-light and decal. 
+        */
+        void setSplitPassesByLightingType(bool split)
+        {
+            mSplitPassesByLightingType = split;
+        }
+
+        /** Sets whether or not passes which have shadow receive disabled should
+            be separated. 
+        */
+        void setSplitNoShadowPasses(bool split)
+        {
+            mSplitNoShadowPasses = split;
+        }
+
+
+    };
+
+
+    /** A grouping level underneath RenderQueue which groups renderables
+    to be issued at coarsely the same time to the renderer.
+    @remarks
+        Each instance of this class itself hold RenderPriorityGroup instances, 
+        which are the groupings of renderables by priority for fine control
+        of ordering (not required for most instances).
+    @par
+        This is an internal OGRE class, not intended for apps to use.
+    */
+    class _OgrePrivate RenderQueueGroup
+    {
+    public:
+        typedef std::map<ushort, RenderPriorityGroup*, std::less<ushort> > PriorityMap;
+        typedef MapIterator<PriorityMap> PriorityMapIterator;
+    protected:
+        RenderQueue* mParent;
+        bool mSplitPassesByLightingType;
+        bool mSplitNoShadowPasses;
+        /// Map of RenderPriorityGroup objects
+        PriorityMap mPriorityGroups;
+		/// Whether shadows are enabled for this queue
+		bool mShadowsEnabled;
+
+
+    public:
+		RenderQueueGroup(RenderQueue* parent, bool splitPassesByLightingType, 
+            bool splitNoShadowPasses) 
+            :mParent(parent), mSplitPassesByLightingType(splitPassesByLightingType),
+            mSplitNoShadowPasses(splitNoShadowPasses), mShadowsEnabled(true) {}
+
+        ~RenderQueueGroup() {
+            // destroy contents now
+            PriorityMap::iterator i;
+            for (i = mPriorityGroups.begin(); i != mPriorityGroups.end(); ++i)
+            {
+                delete i->second;
+            }
+        }
+
+        /** Get an iterator for browsing through child contents. */
+        PriorityMapIterator getIterator(void)
+        {
+            return PriorityMapIterator(mPriorityGroups.begin(), mPriorityGroups.end());
+        }
+
+        /** Add a renderable to this group, with the given priority. */
+        void addRenderable(Renderable* pRend, ushort priority)
+        {
+            // Check if priority group is there
+            PriorityMap::iterator i = mPriorityGroups.find(priority);
+            RenderPriorityGroup* pPriorityGrp;
+            if (i == mPriorityGroups.end())
+            {
+                // Missing, create
+                pPriorityGrp = new RenderPriorityGroup(this, 
+                    mSplitPassesByLightingType, mSplitNoShadowPasses);
+                mPriorityGroups.insert(PriorityMap::value_type(priority, pPriorityGrp));
+            }
+            else
+            {
+                pPriorityGrp = i->second;
+            }
+
+            // Add
+            pPriorityGrp->addRenderable(pRend);
+
+        }
+
+        /** Clears this group of renderables. 
+        @param destroy
+            If false, doesn't delete any priority groups, just empties them. Saves on 
+            memory deallocations since the chances are rougly the same kinds of 
+            renderables are going to be sent to the queue again next time. If
+			true, completely destroys.
+        */
+        void clear(bool destroy = false)
+        {
+            PriorityMap::iterator i, iend;
+            iend = mPriorityGroups.end();
+            for (i = mPriorityGroups.begin(); i != iend; ++i)
+            {
+				if (destroy)
+					delete i->second;
+				else
+					i->second->clear();
+            }
+
+			if (destroy)
+				mPriorityGroups.clear();
+
+        }
+
+		/** Indicate whether a given queue group will be doing any
+		shadow setup.
+		@remarks
+		This method allows you to inform the queue about a queue group, and to 
+		indicate whether this group will require shadow processing of any sort.
+		In order to preserve rendering order, OGRE has to treat queue groups
+		as very separate elements of the scene, and this can result in it
+		having to duplicate shadow setup for each group. Therefore, if you
+		know that a group which you are using will never need shadows, you
+		should preregister the group using this method in order to improve
+		the performance.
+		*/
+		void setShadowsEnabled(bool enabled) { mShadowsEnabled = enabled; }
+
+		/** Are shadows enabled for this queue? */
+		bool getShadowsEnabled(void) const { return mShadowsEnabled; }
+
+        /** Sets whether or not the queue will split passes by their lighting type,
+        ie ambient, per-light and decal. 
+        */
+        void setSplitPassesByLightingType(bool split)
+        {
+            mSplitPassesByLightingType = split;
+            PriorityMap::iterator i, iend;
+            iend = mPriorityGroups.end();
+            for (i = mPriorityGroups.begin(); i != iend; ++i)
+            {
+                i->second->setSplitPassesByLightingType(split);
+            }
+        }
+        /** Sets whether or not the queue will split passes which have shadow receive
+        turned off (in their parent material), which is needed when certain shadow
+        techniques are used.
+        */
+        void setSplitNoShadowPasses(bool split)
+        {
+            mSplitNoShadowPasses = split;
+            PriorityMap::iterator i, iend;
+            iend = mPriorityGroups.end();
+            for (i = mPriorityGroups.begin(); i != iend; ++i)
+            {
+                i->second->setSplitNoShadowPasses(split);
+            }
+        }
+
+    };
+
+
+
+}
+
+#endif
+
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreHighLevelGpuProgramManager.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreHighLevelGpuProgramManager.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreHighLevelGpuProgramManager.h	(revision 1092)
@@ -0,0 +1,137 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef __HighLevelGpuProgramManager_H__
+#define __HighLevelGpuProgramManager_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreResourceManager.h"
+#include "OgreSingleton.h"
+#include "OgreException.h"
+#include "OgreHighLevelGpuProgram.h"
+
+namespace Ogre {
+
+	/** Interface definition for factories of HighLevelGpuProgram. */
+	class _OgreExport HighLevelGpuProgramFactory
+	{
+	public:
+        HighLevelGpuProgramFactory() {}
+        virtual ~HighLevelGpuProgramFactory();
+		/// Get the name of the language this factory creates programs for
+		virtual const String& getLanguage(void) const = 0;
+        virtual HighLevelGpuProgram* create(ResourceManager* creator, 
+            const String& name, ResourceHandle handle,
+            const String& group, bool isManual, ManualResourceLoader* loader) = 0;
+		virtual void destroy(HighLevelGpuProgram* prog) = 0;
+	};
+	/** This ResourceManager manages high-level vertex and fragment programs. 
+	@remarks
+		High-level vertex and fragment programs can be used instead of assembler programs
+		as managed by GpuProgramManager; however they typically result in a GpuProgram
+		being created as a derivative of the high-level program. High-level programs are
+		easier to write, and can often be API-independent, unlike assembler programs. 
+	@par
+		This class not only manages the programs themselves, it also manages the factory
+		classes which allow the creation of high-level programs using a variety of high-level
+		syntaxes. Plugins can be created which register themselves as high-level program
+		factories and as such the engine can be extended to accept virtually any kind of
+		program provided a plugin is written.
+	*/
+	class _OgreExport HighLevelGpuProgramManager 
+		: public ResourceManager, public Singleton<HighLevelGpuProgramManager>
+	{
+	public:
+		typedef std::map<String, HighLevelGpuProgramFactory*> FactoryMap;
+	protected:
+		/// Factories capable of creating HighLevelGpuProgram instances
+		FactoryMap mFactories;
+
+		HighLevelGpuProgramFactory* getFactory(const String& language);
+
+        /// @copydoc ResourceManager::createImpl
+        Resource* createImpl(const String& name, ResourceHandle handle, 
+            const String& group, bool isManual, ManualResourceLoader* loader,
+            const NameValuePairList* params);
+	public:
+		HighLevelGpuProgramManager();
+		~HighLevelGpuProgramManager();
+		/** Add a new factory object for high-level programs of a given language. */
+		void addFactory(HighLevelGpuProgramFactory* factory);
+
+
+        /** Create a new, unloaded HighLevelGpuProgram. 
+		@par
+			This method creates a new program of the type specified as the second and third parameters.
+			You will have to call further methods on the returned program in order to 
+			define the program fully before you can load it.
+		@param name The identifying name of the program
+        @param groupName The name of the resource group which this program is
+            to be a member of
+		@param language Code of the language to use (e.g. "cg")
+		@param gptype The type of program to create
+		*/
+		virtual HighLevelGpuProgramPtr createProgram(
+			const String& name, const String& groupName, 
+            const String& language, GpuProgramType gptype);
+
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static HighLevelGpuProgramManager& getSingleton(void);
+        /** Override standard Singleton retrieval.
+        @remarks
+        Why do we do this? Well, it's because the Singleton
+        implementation is in a .h file, which means it gets compiled
+        into anybody who includes it. This is needed for the
+        Singleton template to work, but we actually only want it
+        compiled into the implementation of the class based on the
+        Singleton, not all of them. If we don't change this, we get
+        link errors when trying to use the Singleton-based class from
+        an outside dll.
+        @par
+        This method just delegates to the template version anyway,
+        but the implementation stays in this single compilation unit,
+        preventing link errors.
+        */
+        static HighLevelGpuProgramManager* getSingletonPtr(void);
+
+
+	};
+
+}
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreLight.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreLight.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreLight.h	(revision 1092)
@@ -0,0 +1,360 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _LIGHT_H__
+#define _LIGHT_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreColourValue.h"
+#include "OgreVector3.h"
+#include "OgreVector4.h"
+#include "OgreString.h"
+#include "OgreMovableObject.h"
+#include "OgrePlaneBoundedVolume.h"
+
+namespace Ogre {
+
+
+    /** Representation of a dynamic light source in the scene.
+        @remarks
+            Lights are added to the scene like any other object. They contain various
+            parameters like type, position, attenuation (how light intensity fades with
+            distance), colour etc.
+        @par
+            The defaults when a light is created is pure white diffues light, with no
+            attenuation (does not decrease with distance) and a range of 1000 world units.
+        @par
+            Lights are created by using the SceneManager::createLight method. They can subsequently be
+            added to a SceneNode if required to allow them to move relative to a node in the scene. A light attached
+            to a SceneNode is assumed to havea base position of (0,0,0) and a direction of (0,0,1) before modification
+            by the SceneNode's own orientation. If not attached to a SceneNode,
+            the light's position and direction is as set using setPosition and setDirection.
+        @par
+            Remember also that dynamic lights rely on modifying the colour of vertices based on the position of
+            the light compared to an object's vertex normals. Dynamic lighting will only look good if the
+            object being lit has a fair level of tesselation and the normals are properly set. This is particularly
+            true for the spotlight which will only look right on highly tesselated models. In the future OGRE may be
+            extended for certain scene types so an alternative to the standard dynamic lighting may be used, such
+            as dynamic lightmaps.
+    */
+    class _OgreExport Light : public MovableObject
+    {
+    public:
+        /// Temp tag used for sorting
+        Real tempSquareDist;
+
+        /// Defines the type of light
+        enum LightTypes
+        {
+            /// Point light sources give off light equally in all directions, so require only position not direction
+            LT_POINT,
+            /// Directional lights simulate parallel light beams from a distant source, hence have direction but no position
+            LT_DIRECTIONAL,
+            /// Spotlights simulate a cone of light from a source so require position and direction, plus extra values for falloff
+            LT_SPOTLIGHT
+        };
+
+        /** Default constructor (for Python mainly).
+        */
+        Light();
+
+        /** Normal constructor. Should not be called directly, but rather the SceneManager::createLight method should be used.
+        */
+        Light(const String& name);
+
+        /** Standard destructor.
+        */
+        ~Light();
+
+        /** Returns the name of this light (cannot be modified).
+        */
+        const String& getName(void) const;
+
+        /** Sets the type of light - see LightTypes for more info.
+        */
+        void setType(LightTypes type);
+
+        /** Returns the light type.
+        */
+        LightTypes getType(void) const;
+
+        /** Sets the colour of the diffuse light given off by this source.
+            @remarks
+                Material objects have ambient, diffuse and specular values which indicate how much of each type of
+                light an object reflects. This value denotes the amount and colour of this type of light the light
+                exudes into the scene. The actual appearance of objects is a combination of the two.
+            @par
+                Diffuse light simulates the typical light emenating from light sources and affects the base colour
+                of objects together with ambient light.
+        */
+        void setDiffuseColour(Real red, Real green, Real blue);
+
+        /** Sets the colour of the diffuse light given off by this source.
+            @remarks
+                Material objects have ambient, diffuse and specular values which indicate how much of each type of
+                light an object reflects. This value denotes the amount and colour of this type of light the light
+                exudes into the scene. The actual appearance of objects is a combination of the two.
+            @par
+                Diffuse light simulates the typical light emenating from light sources and affects the base colour
+                of objects together with ambient light.
+        */
+        void setDiffuseColour(const ColourValue& colour);
+
+        /** Returns the colour of the diffuse light given off by this light source (see setDiffuseColour for more info).
+        */
+        const ColourValue& getDiffuseColour(void) const;
+
+        /** Sets the colour of the specular light given off by this source.
+            @remarks
+                Material objects have ambient, diffuse and specular values which indicate how much of each type of
+                light an object reflects. This value denotes the amount and colour of this type of light the light
+                exudes into the scene. The actual appearance of objects is a combination of the two.
+            @par
+                Specular light affects the appearance of shiny highlights on objects, and is also dependent on the
+                'shininess' Material value.
+        */
+        void setSpecularColour(Real red, Real green, Real blue);
+
+        /** Sets the colour of the specular light given off by this source.
+            @remarks
+                Material objects have ambient, diffuse and specular values which indicate how much of each type of
+                light an object reflects. This value denotes the amount and colour of this type of light the light
+                exudes into the scene. The actual appearance of objects is a combination of the two.
+            @par
+                Specular light affects the appearance of shiny highlights on objects, and is also dependent on the
+                'shininess' Material value.
+        */
+        void setSpecularColour(const ColourValue& colour);
+
+        /** Returns the colour of specular light given off by this light source.
+        */
+        const ColourValue& getSpecularColour(void) const;
+
+        /** Sets the attenuation parameters of the light source ie how it diminishes with distance.
+            @remarks
+                Lights normally get fainter the further they are away. Also, each light is given a maximum range
+                beyond which it cannot affect any objects.
+            @par
+                Light attentuation is not applicable to directional lights since they have an infinite range and
+                constant intensity.
+            @par
+                This follows a standard attenuation approach - see any good 3D text for the details of what they mean
+                since i don't have room here!
+            @param
+                range The absolute upper range of the light in world units
+            @param
+                constant The constant factor in the attenuation formula: 1.0 means never attenuate, 0.0 is complete attenuation
+            @param
+                linear The linear factor in the attenuation formula: 1 means attenuate evenly over the distance
+            @param
+                quadratic The quadratic factor in the attenuation formula: adds a curvature to the attenuation formula.
+        */
+        void setAttenuation(Real range, Real constant, Real linear, Real quadratic);
+
+        /** Returns the absolute upper range of the light.
+        */
+        Real getAttenuationRange(void) const;
+
+        /** Returns the constant factor in the attenuation formula.
+        */
+        Real getAttenuationConstant(void) const;
+
+        /** Returns the linear factor in the attenuation formula.
+        */
+        Real getAttenuationLinear(void) const;
+
+        /** Returns the quadric factor in the attenuation formula.
+        */
+        Real getAttenuationQuadric(void) const;
+
+        /** Sets the position of the light.
+            @remarks
+                Applicable to point lights and spotlights only.
+            @note
+                This will be overridden if the light is attached to a SceneNode.
+        */
+        void setPosition(Real x, Real y, Real z);
+
+        /** Sets the position of the light.
+            @remarks
+                Applicable to point lights and spotlights only.
+            @note
+                This will be overridden if the light is attached to a SceneNode.
+        */
+        void setPosition(const Vector3& vec);
+
+        /** Returns the position of the light.
+            @note
+                Applicable to point lights and spotlights only.
+        */
+        const Vector3& getPosition(void) const;
+
+        /** Sets the direction in which a light points.
+            @remarks
+                Applicable only to the spotlight and directional light types.
+            @note
+                This will be overridden if the light is attached to a SceneNode.
+        */
+        void setDirection(Real x, Real y, Real z);
+
+        /** Sets the direction in which a light points.
+            @remarks
+                Applicable only to the spotlight and directional light types.
+            @note
+                This will be overridden if the light is attached to a SceneNode.
+        */
+        void setDirection(const Vector3& vec);
+
+        /** Returns the light's direction.
+            @remarks
+                Applicable only to the spotlight and directional light types.
+        */
+        const Vector3& getDirection(void) const;
+
+        /** Sets the range of a spotlight, i.e. the angle of the inner and outer cones and the rate of falloff between them.
+            @param
+                innerAngle Angle covered by the bright inner cone
+            @param
+                outerAngle Angle covered by the outer cone
+            @param
+                falloff The rate of falloff between the inner and outer cones. 1.0 means a linear falloff, less means slower falloff, higher means faster falloff.
+        */
+        void setSpotlightRange(const Radian& innerAngle, const Radian& outerAngle, Real falloff = 1.0);
+#ifndef OGRE_FORCE_ANGLE_TYPES
+        inline void setSpotlightRange(Real innerAngle, Real outerAngle, Real falloff = 1.0) {
+            setSpotlightRange ( Angle(innerAngle), Angle(outerAngle), falloff );
+        }
+#endif//OGRE_FORCE_ANGLE_TYPES
+
+        /** Returns the angle covered by the spotlights inner cone.
+        */
+        const Radian& getSpotlightInnerAngle(void) const;
+
+        /** Returns the angle covered by the spotlights outer cone.
+        */
+        const Radian& getSpotlightOuterAngle(void) const;
+
+        /** Returns the falloff between the inner and outer cones of the spotlight.
+        */
+        Real getSpotlightFalloff(void) const;
+
+        /** Overridden from MovableObject */
+        void _notifyCurrentCamera(Camera* cam);
+
+        /** Overridden from MovableObject */
+        const AxisAlignedBox& getBoundingBox(void) const;
+
+        /** Overridden from MovableObject */
+        void _updateRenderQueue(RenderQueue* queue);
+
+        /** Overridden from MovableObject */
+        const String& getMovableType(void) const;
+
+        /** Retrieves the position of the light including any transform from nodes it is attached to. */
+        const Vector3& getDerivedPosition(void) const;
+
+        /** Retrieves the direction of the light including any transform from nodes it is attached to. */
+        const Vector3& getDerivedDirection(void) const;
+
+        /** Overridden from MovableObject.
+        @remarks
+            Although lights themselves are not 'visible', setting a light to invisible
+            means it no longer affects the scene.
+        */
+        void setVisible(bool visible);
+
+        /** Overridden from MovableObject */
+        Real getBoundingRadius(void) const { return 0; /* not visible */ }
+
+		/** Gets the details of this light as a 4D vector.
+		@remarks
+			Getting details of a light as a 4D vector can be useful for
+			doing general calculations between different light types; for
+			example the vector can represent both position lights (w=1.0f)
+			and directional lights (w=0.0f) and be used in the same 
+			calculations.
+		*/
+		Vector4 getAs4DVector(void) const;
+
+        /** Internal method for calculating the 'near clip volume', which is
+            the volume formed between the near clip rectangle of the 
+            camera and the light.
+        @remarks This volume is a pyramid for a point/spot light and
+            a cuboid for a directional light. It can used to detect whether
+            an object could be casting a shadow on the viewport. Note that
+            the reference returned is to a shared volume which will be 
+            reused across calls to this method.
+        */
+        const PlaneBoundedVolume& _getNearClipVolume(const Camera* const cam) const;
+
+        /** Internal method for calculating the clip volumes outside of the 
+            frustum which can be used to determine which objects are casting
+            shadow on the frustum as a whole. 
+        @remarks Each of the volumes is a pyramid for a point/spot light and
+            a cuboid for a directional light. 
+        */
+        const PlaneBoundedVolumeList& _getFrustumClipVolumes(const Camera* const cam) const;
+
+
+
+    private:
+        /// internal method for synchronising with parent node (if any)
+        void update(void) const;
+        String mName;
+
+        LightTypes mLightType;
+        Vector3 mPosition;
+        ColourValue mDiffuse;
+        ColourValue mSpecular;
+
+        Vector3 mDirection;
+
+        Radian mSpotOuter;
+        Radian mSpotInner;
+        Real mSpotFalloff;
+        Real mRange;
+        Real mAttenuationConst;
+        Real mAttenuationLinear;
+        Real mAttenuationQuad;
+
+        mutable Vector3 mDerivedPosition;
+        mutable Vector3 mDerivedDirection;
+        /// Stored versions of parent orientation / position
+        mutable Quaternion mLastParentOrientation;
+        mutable Vector3 mLastParentPosition;
+
+        /// Shared class-level name for Movable type
+        static String msMovableType;
+
+        mutable PlaneBoundedVolume mNearClipVolume;
+        mutable PlaneBoundedVolumeList mFrustumClipVolumes;
+        /// Is the local transform dirty?
+        mutable bool mLocalTransformDirty;
+
+
+
+    };
+} // Namespace
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreArchiveFactory.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreArchiveFactory.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreArchiveFactory.h	(revision 1092)
@@ -0,0 +1,58 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+#ifndef _ArchiveFactory_H__
+#define _ArchiveFactory_H__
+
+#include "OgrePrerequisites.h"
+
+#include "OgreFactoryObj.h"
+
+namespace Ogre {
+
+    /** Abstract factory class, archive codec plugins can register concrete
+        subclasses of this.
+        @remarks
+            All access to 'archives' (collections of files, compressed or
+            just folders, maybe even remote) is managed via the abstract
+            Archive class. Plugins are expected to provide the
+            implementation for the actual codec itself, but because a
+            subclass of Archive has to be created for every archive, a
+            factory class is required to create the appropriate subclass.
+        @par
+            So archive plugins create a subclass of Archive AND a subclass
+            of ArchiveFactory which creates instances of the Archive
+            subclass. See the 'Zip' and 'FileSystem' plugins for examples.
+            Each Archive and ArchiveFactory subclass pair deal with a
+            single archive type (identified by a string).
+    */
+    class _OgreExport ArchiveFactory : public FactoryObj< Archive >
+    {
+    public:
+        // No methods, must just override all methods inherited from FactoryObj
+    };
+
+} // namespace
+
+#endif
Index: GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSkeletonInstance.h
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSkeletonInstance.h	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/include/OgreSkeletonInstance.h	(revision 1092)
@@ -0,0 +1,142 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+(Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright (c) 2000-2005 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#ifndef __SkeletonInstance_H__
+#define __SkeletonInstance_H__
+
+#include "OgrePrerequisites.h"
+#include "OgreSkeleton.h"
+
+namespace Ogre {
+
+    /** A SkeletonInstance is a single instance of a Skeleton used by a world object.
+    @remarks
+        The difference between a Skeleton and a SkeletonInstance is that the
+        Skeleton is the 'master' version much like Mesh is a 'master' version of
+        Entity. Many SkeletonInstance objects can be based on a single Skeleton, 
+        and are copies of it when created. Any changes made to this are not
+        reflected in the master copy. The exception is animations; these are
+        shared on the Skeleton itself and may not be modified here.
+    */
+    class _OgreExport SkeletonInstance : public Skeleton
+    {
+    public:
+        /** Constructor, don't call directly, this will be created automatically
+        when you create an Entity based on a skeletally animated Mesh.
+        */
+        SkeletonInstance(const SkeletonPtr& masterCopy);
+        ~SkeletonInstance();
+
+        /** Gets the number of animations on this skeleton. */
+        unsigned short getNumAnimations(void) const;
+
+        /** Gets a single animation by index. */
+        Animation* getAnimation(unsigned short index) const;
+
+        /** Creates a new Animation object for animating this skeleton. 
+        @remarks
+            This method updates the reference skeleton, not just this instance!
+        @param name The name of this animation
+        @param length The length of the animation in seconds
+        */
+        Animation* createAnimation(const String& name, Real length);
+
+        /** Returns the named Animation object. */
+        Animation* getAnimation(const String& name, 
+			const LinkedSkeletonAnimationSource** linker = 0) const;
+
+        /** Removes an Animation from this skeleton. 
+        @remarks
+            This method updates the reference skeleton, not just this instance!
+        */
+        void removeAnimation(const String& name);
+
+
+        /** Creates a TagPoint ready to be attached to a bone */
+        TagPoint* createTagPointOnBone(Bone* bone, 
+            const Quaternion &offsetOrientation = Quaternion::IDENTITY, 
+            const Vector3	  &offsetPosition    = Vector3::UNIT_SCALE);
+
+        /** Frees a TagPoint that already attached to a bone */
+        void freeTagPoint(TagPoint* tagPoint);
+
+		/// @copydoc Skeleton::addLinkedSkeletonAnimationSource
+		void addLinkedSkeletonAnimationSource(const String& skelName, 
+			Real scale = 1.0f);
+		/// @copydoc Skeleton::removeAllLinkedSkeletonAnimationSources
+		void removeAllLinkedSkeletonAnimationSources(void);
+		/// @copydoc Skeleton::getLinkedSkeletonAnimationSourceIterator
+		LinkedSkeletonAnimSourceIterator 
+			getLinkedSkeletonAnimationSourceIterator(void) const;
+
+		/// @copydoc Skeleton::_initAnimationState
+		void _initAnimationState(AnimationStateSet* animSet);
+
+		/// @copydoc Skeleton::_refreshAnimationState
+		void _refreshAnimationState(AnimationStateSet* animSet);
+    protected:
+        /// Pointer back to master Skeleton
+        SkeletonPtr mSkeleton;
+
+        typedef std::list<TagPoint*> ActiveTagPointList;
+        typedef std::deque<TagPoint*> FreeTagPointQueue;
+
+        /** Active tag point list.
+        @remarks
+            This is a linked list of pointers to actived tag point
+        @par
+            This allows very fast instertions and deletions from anywhere in the list to activate / deactivate
+            tag points (required for weapon / equip systems etc)    as well as resuse of TagPoint instances
+            without construction & destruction which avoids memory thrashing.
+        */
+        ActiveTagPointList mActiveTagPoints;
+
+        /** Free tag point queue.
+        @remarks
+            This contains a list of the tag points free for use as new instances
+            as required by the set. When a TagPoint instances are deactived, there will are referenced on this
+            deque. As they get used this deque reduces, as they get released back to to the set they get added
+            back to the deque.
+        */
+        FreeTagPointQueue mFreeTagPoints;
+
+        /// TagPoint automatic handles
+        unsigned short mNextTagPointAutoHandle;
+
+        void cloneBoneAndChildren(Bone* source, Bone* parent);
+        /** Overridden from Skeleton
+        */
+        void loadImpl(void);
+        /** Overridden from Skeleton
+        */
+        void unloadImpl(void);
+
+    };
+
+}
+
+
+#endif
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/bin/release/Plugins.cfg
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/bin/release/Plugins.cfg	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/bin/release/Plugins.cfg	(revision 1092)
@@ -0,0 +1,15 @@
+# Defines plugins to load
+
+# Define plugin folder
+PluginFolder=.
+
+# Define plugins
+Plugin=RenderSystem_Direct3D7
+Plugin=RenderSystem_Direct3D9
+Plugin=RenderSystem_GL
+Plugin=Plugin_ParticleFX
+Plugin=Plugin_BSPSceneManager
+Plugin=Plugin_OctreeSceneManager
+Plugin=Plugin_CgProgramManager
+
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/bin/release/ogre.cfg
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/bin/release/ogre.cfg	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/bin/release/ogre.cfg	(revision 1092)
@@ -0,0 +1,7 @@
+Render System	Direct3D9 Rendering SubSystem
+Anti aliasing	None
+Floating-point mode	Fastest
+Full Screen	Yes
+Rendering Device	NVIDIA GeForce 6800 Series GPU
+VSync	No
+Video Mode	800 x 600 @ 32-bit colour
Index: GTP/trunk/App/Demos/Geom/OgreStuff/bin/release/terrain.cfg
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/bin/release/terrain.cfg	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/bin/release/terrain.cfg	(revision 1092)
@@ -0,0 +1,73 @@
+# The main world texture (if you wish the terrain manager to create a material for you)
+WorldTexture=terrain_texture.jpg
+
+# The detail texture (if you wish the terrain manager to create a material for you)
+DetailTexture=terrain_detail.jpg
+
+#number of times the detail texture will tile in a terrain tile
+DetailTile=3
+
+# Heightmap source
+PageSource=Heightmap
+
+# Heightmap-source specific settings
+Heightmap.image=terrain.png
+
+# If you use RAW, fill in the below too
+# RAW-specific setting - size (horizontal/vertical)
+#Heightmap.raw.size=513
+# RAW-specific setting - bytes per pixel (1 = 8bit, 2=16bit)
+#Heightmap.raw.bpp=2
+# Use this if you want to flip the terrain (eg Terragen exports raw upside down)
+#Heightmap.flip=true
+
+# How large is a page of tiles (in vertices)? Must be (2^n)+1
+PageSize=513
+
+# How large is each tile? Must be (2^n)+1 and be smaller than PageSize
+TileSize=65
+
+# The maximum error allowed when determining which LOD to use
+MaxPixelError=3
+
+# The size of a terrain page, in world units
+PageWorldX=1500
+PageWorldZ=1500
+# Maximum height of the terrain 
+MaxHeight=100
+
+# Upper LOD limit
+MaxMipMapLevel=5
+
+VertexNormals=yes
+#VertexColors=yes
+#UseTriStrips=yes
+
+# Use vertex program to morph LODs, if available
+VertexProgramMorph=yes
+
+# The proportional distance range at which the LOD morph starts to take effect
+# This is as a proportion of the distance between the current LODs effective range,
+# and the effective range of the next lower LOD
+LODMorphStart=0.2
+
+# This following section is for if you want to provide your own terrain shading routine
+# Note that since you define your textures within the material this makes the 
+# WorldTexture and DetailTexture settings redundant
+
+# The name of the vertex program parameter you wish to bind the morph LOD factor to
+# this is 0 when there is no adjustment (highest) to 1 when the morph takes it completely
+# to the same position as the next lower LOD
+# USE THIS IF YOU USE HIGH-LEVEL VERTEX PROGRAMS WITH LOD MORPHING
+#MorphLODFactorParamName=morphFactor
+
+# The index of the vertex program parameter you wish to bind the morph LOD factor to
+# this is 0 when there is no adjustment (highest) to 1 when the morph takes it completely
+# to the same position as the next lower LOD
+# USE THIS IF YOU USE ASSEMBLER VERTEX PROGRAMS WITH LOD MORPHING
+#MorphLODFactorParamIndex=4
+
+# The name of the material you will define to shade the terrain
+CustomMaterialName=TestTerrainMaterial
+
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/bin/release/resources.cfg
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/bin/release/resources.cfg	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/bin/release/resources.cfg	(revision 1092)
@@ -0,0 +1,22 @@
+# Resource locations to be added to the 'boostrap' path
+# This also contains the minimum you need to use the Ogre example framework
+[Bootstrap]
+Zip=../../../OgreStuff/media/packs/OgreCore.zip
+
+# Resource locations to be added to the default path
+[General]
+FileSystem=../../../OgreStuff/media
+FileSystem=../../../OgreStuff/media/fonts
+FileSystem=../../../OgreStuff/media/materials/programs
+FileSystem=../../../OgreStuff/media/materials/scripts
+FileSystem=../../../OgreStuff/media/materials/textures
+FileSystem=../../../OgreStuff/media/models
+FileSystem=../../../OgreStuff/media/overlays
+FileSystem=../../../OgreStuff/media/particle
+FileSystem=../../../OgreStuff/media/gui
+FileSystem=../../../OgreStuff/media/GT
+Zip=../../../OgreStuff/media/packs/cubemap.zip
+Zip=../../../OgreStuff/media/packs/cubemapsJS.zip
+Zip=../../../OgreStuff/media/packs/fresneldemo.zip
+Zip=../../../OgreStuff/media/packs/ogretestmap.zip
+Zip=../../../OgreStuff/media/packs/skybox.zip
Index: GTP/trunk/App/Demos/Geom/OgreStuff/bin/release/media.cfg
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/bin/release/media.cfg	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/bin/release/media.cfg	(revision 1092)
@@ -0,0 +1,16 @@
+Mesh=ogrehead.mesh
+Mesh=geosphere4500.mesh
+Mesh=razor.mesh
+Mesh=knot.mesh
+Mesh=RZR-002.mesh
+Mesh=geosphere8000.mesh
+Mesh=sphere.mesh
+
+CubeMap=cubescene.jpg
+CubeMap=early_morning.jpg
+CubeMap=cubemap.jpg
+CubeMap=morning.jpg
+CubeMap=cloudy_noon.jpg
+CubeMap=evening.jpg
+CubeMap=stormy.jpg
+CubeMap=stevecube.jpg
Index: GTP/trunk/App/Demos/Geom/OgreStuff/bin/debug/Plugins.cfg
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/bin/debug/Plugins.cfg	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/bin/debug/Plugins.cfg	(revision 1092)
@@ -0,0 +1,15 @@
+# Defines plugins to load
+
+# Define plugin folder
+PluginFolder=.
+
+# Define plugins
+Plugin=RenderSystem_Direct3D7
+Plugin=RenderSystem_Direct3D9
+Plugin=RenderSystem_GL
+Plugin=Plugin_ParticleFX
+Plugin=Plugin_BSPSceneManager
+Plugin=Plugin_OctreeSceneManager
+Plugin=Plugin_CgProgramManager
+
+
Index: GTP/trunk/App/Demos/Geom/OgreStuff/bin/debug/ogre.cfg
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/bin/debug/ogre.cfg	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/bin/debug/ogre.cfg	(revision 1092)
@@ -0,0 +1,7 @@
+Render System	OpenGL Rendering Subsystem
+Colour Depth	32
+Display Frequency	N/A
+FSAA	0
+Full Screen	No
+VSync	No
+Video Mode	1024 x 768
Index: GTP/trunk/App/Demos/Geom/OgreStuff/bin/debug/terrain.cfg
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/bin/debug/terrain.cfg	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/bin/debug/terrain.cfg	(revision 1092)
@@ -0,0 +1,71 @@
+# The main world texture (if you wish the terrain manager to create a material for you)
+WorldTexture=terrain_texture.jpg
+
+# The detail texture (if you wish the terrain manager to create a material for you)
+DetailTexture=terrain_detail.jpg
+
+#number of times the detail texture will tile in a terrain tile
+DetailTile=3
+
+# Heightmap source
+PageSource=Heightmap
+
+# Heightmap-source specific settings
+Heightmap.image=terrain.png
+
+# If you use RAW, fill in the below too
+# RAW-specific setting - size (horizontal/vertical)
+#Heightmap.raw.size=513
+# RAW-specific setting - bytes per pixel (1 = 8bit, 2=16bit)
+#Heightmap.raw.bpp=2
+# Use this if you want to flip the terrain (eg Terragen exports raw upside down)
+#Heightmap.flip=true
+
+# How large is a page of tiles (in vertices)? Must be (2^n)+1
+PageSize=513
+
+# How large is each tile? Must be (2^n)+1 and be smaller than PageSize
+TileSize=65
+
+# The maximum error allowed when determining which LOD to use
+MaxPixelError=3
+
+# The size of a terrain page, in world units
+PageWorldX=1500
+PageWorldZ=1500
+# Maximum height of the terrain 
+MaxHeight=100
+
+# Upper LOD limit
+MaxMipMapLevel=5
+
+VertexNormals=yes
+#VertexColors=yes
+#UseTriStrips=yes
+
+# Use vertex program to morph LODs, if available
+VertexProgramMorph=yes
+
+# The proportional distance range at which the LOD morph starts to take effect
+# This is as a proportion of the distance between the current LODs effective range,
+# and the effective range of the next lower LOD
+LODMorphStart=0.2
+
+# This following section is for if you want to provide your own terrain shading routine
+# Note that since you define your textures within the material this makes the 
+# WorldTexture and DetailTexture settings redundant
+
+# The name of the vertex program parameter you wish to bind the morph LOD factor to
+# this is 0 when there is no adjustment (highest) to 1 when the morph takes it completely
+# to the same position as the next lower LOD
+# USE THIS IF YOU USE HIGH-LEVEL VERTEX PROGRAMS WITH LOD MORPHING
+#MorphLODFactorParamName=morphFactor
+
+# The index of the vertex program parameter you wish to bind the morph LOD factor to
+# this is 0 when there is no adjustment (highest) to 1 when the morph takes it completely
+# to the same position as the next lower LOD
+# USE THIS IF YOU USE ASSEMBLER VERTEX PROGRAMS WITH LOD MORPHING
+#MorphLODFactorParamIndex=4
+
+# The name of the material you will define to shade the terrain
+CustomMaterialName=TestTerrainMaterial
Index: GTP/trunk/App/Demos/Geom/OgreStuff/bin/debug/quake3settings.cfg
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/bin/debug/quake3settings.cfg	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/bin/debug/quake3settings.cfg	(revision 1092)
@@ -0,0 +1,2 @@
+Pak0Location: f:\quake3arena\baseq3\pak0.pk3
+Map: maps/q3dm3.bsp
Index: GTP/trunk/App/Demos/Geom/OgreStuff/bin/debug/resources.cfg
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/bin/debug/resources.cfg	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/bin/debug/resources.cfg	(revision 1092)
@@ -0,0 +1,22 @@
+# Resource locations to be added to the 'boostrap' path
+# This also contains the minimum you need to use the Ogre example framework
+[Bootstrap]
+Zip=../../../OgreStuff/media/packs/OgreCore.zip
+
+# Resource locations to be added to the default path
+[General]
+FileSystem=../../../OgreStuff/media
+FileSystem=../../../OgreStuff/media/fonts
+FileSystem=../../../OgreStuff/media/materials/programs
+FileSystem=../../../OgreStuff/media/materials/scripts
+FileSystem=../../../OgreStuff/media/materials/textures
+FileSystem=../../../OgreStuff/media/models
+FileSystem=../../../OgreStuff/media/overlays
+FileSystem=../../../OgreStuff/media/particle
+FileSystem=../../../OgreStuff/media/gui
+FileSystem=../../../OgreStuff/media/GT
+Zip=../../../OgreStuff/media/packs/cubemap.zip
+Zip=../../../OgreStuff/media/packs/cubemapsJS.zip
+Zip=../../../OgreStuff/media/packs/fresneldemo.zip
+Zip=../../../OgreStuff/media/packs/ogretestmap.zip
+Zip=../../../OgreStuff/media/packs/skybox.zip
Index: GTP/trunk/App/Demos/Geom/OgreStuff/bin/debug/media.cfg
===================================================================
--- GTP/trunk/App/Demos/Geom/OgreStuff/bin/debug/media.cfg	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/OgreStuff/bin/debug/media.cfg	(revision 1092)
@@ -0,0 +1,16 @@
+Mesh=ogrehead.mesh
+Mesh=geosphere4500.mesh
+Mesh=razor.mesh
+Mesh=knot.mesh
+Mesh=RZR-002.mesh
+Mesh=geosphere8000.mesh
+Mesh=sphere.mesh
+
+CubeMap=cubescene.jpg
+CubeMap=early_morning.jpg
+CubeMap=cubemap.jpg
+CubeMap=morning.jpg
+CubeMap=cloudy_noon.jpg
+CubeMap=evening.jpg
+CubeMap=stormy.jpg
+CubeMap=stevecube.jpg
Index: GTP/trunk/App/Demos/Geom/Demo_LodTrees/Demo_LodTrees.sln
===================================================================
--- GTP/trunk/App/Demos/Geom/Demo_LodTrees/Demo_LodTrees.sln	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/Demo_LodTrees/Demo_LodTrees.sln	(revision 1092)
@@ -0,0 +1,21 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Demo_LodTrees", "Demo_LodTrees.vcproj", "{756E8FBA-EA25-400C-9CA9-CB5AE5D7621E}"
+	ProjectSection(ProjectDependencies) = postProject
+	EndProjectSection
+EndProject
+Global
+	GlobalSection(SolutionConfiguration) = preSolution
+		Debug = Debug
+		Release = Release
+	EndGlobalSection
+	GlobalSection(ProjectConfiguration) = postSolution
+		{756E8FBA-EA25-400C-9CA9-CB5AE5D7621E}.Debug.ActiveCfg = Debug|Win32
+		{756E8FBA-EA25-400C-9CA9-CB5AE5D7621E}.Debug.Build.0 = Debug|Win32
+		{756E8FBA-EA25-400C-9CA9-CB5AE5D7621E}.Release.ActiveCfg = Release|Win32
+		{756E8FBA-EA25-400C-9CA9-CB5AE5D7621E}.Release.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+	EndGlobalSection
+	GlobalSection(ExtensibilityAddIns) = postSolution
+	EndGlobalSection
+EndGlobal
Index: GTP/trunk/App/Demos/Geom/Demo_LodTrees/main.cpp
===================================================================
--- GTP/trunk/App/Demos/Geom/Demo_LodTrees/main.cpp	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/Demo_LodTrees/main.cpp	(revision 1092)
@@ -0,0 +1,431 @@
+/*	==========================================================================
+ *	(C) 2006 Universitat Jaume I
+ *	==========================================================================
+ *	PROYECT:	GAME TOOLS
+ *	==========================================================================*/
+/**	CONTENT:	
+	*
+	*
+	*	@file	main.cpp
+/** COMMENTS:
+	* Model must be in "media/models" folder.
+	* Lod file must be in "media/GT" folder.
+/*===========================================================================*/
+#include "ExampleApplication.h"
+#include "GeoLodTreeLibrary.h"
+#include "GeoMeshLoader.h"
+
+
+// Distance values
+#define dist_min 300
+#define dist_max 700
+
+// Model name
+#define model_name "arbol"
+
+
+//Global variables
+Entity* entity;
+Geometry::LodTreeLibrary* myTrees;
+Ogre::Mesh *ogreMesh=NULL;
+Geometry::GeoMeshLoader *meshloader=NULL;
+SceneNode* node;
+
+MaterialPtr *mat;
+
+ColourValue color=ColourValue::Red;
+
+Camera* theCam;
+Entity* pPlaneEnt;
+
+OverlayElement* mInfo;
+OverlayElement* mInfo2;
+
+
+void DumpDataToOgreBuffers(Ogre::Mesh *original_mesh, Geometry::LodTreeLibrary *lodTreesLib)
+{
+	// Copy to Ogre buffers including the degenerated triangles
+
+	Ogre::HardwareIndexBufferSharedPtr	ibuf;
+	Ogre::IndexData	*indexes;
+	Ogre::RenderOperation mRenderOp;
+
+	for (int submesh=0; submesh < original_mesh->getNumSubMeshes(); submesh++)
+	{
+		bool istrunk = lodTreesLib->GetLeavesSubMesh()!=submesh;
+		original_mesh->getSubMesh(submesh)->_getRenderOperation(mRenderOp,0);
+
+		// we will suppose this submesh is the foliage
+		int indices_to_render = lodTreesLib->CurrentLOD_Foliage_IndexCount();		
+		int offset = 0;
+
+		if (istrunk)
+		{
+			// this submesh is the trunk
+			offset = lodTreesLib->GetValidTrunkOffset(submesh);
+			indices_to_render = lodTreesLib->GetValidTrunkIndexCount(submesh);
+		}
+
+		ibuf = Ogre::HardwareBufferManager::getSingleton().createIndexBuffer( 
+			Ogre::HardwareIndexBuffer::IT_32BIT, // type of index 
+			indices_to_render, // number of indexes 
+			Ogre::HardwareBuffer::HBU_DISCARDABLE , // usage
+			false); // no shadow buffer 
+					
+		mRenderOp.indexData->indexBuffer = ibuf;
+		mRenderOp.indexData->indexStart = 0;
+		mRenderOp.indexData->indexCount = indices_to_render;
+
+		unsigned long* pIdx = static_cast<unsigned long*>(ibuf->lock(Ogre::HardwareBuffer::HBL_NORMAL));
+
+		for (int k=0; k<indices_to_render; k++)
+			if (istrunk)
+				pIdx[k] = lodTreesLib->CurrentLOD_Trunk_Indices()->GetIndex(k+offset);
+			else
+				pIdx[k] = lodTreesLib->CurrentLOD_Foliage_Indices()->GetIndex(k);
+
+			
+		ibuf->unlock();
+	}
+}
+
+class FresnelFrameListener : public ExampleFrameListener
+{
+	int manage;
+
+public:
+
+    FresnelFrameListener(RenderWindow* win, Camera* cam)
+        : ExampleFrameListener(win, cam, false, false)
+    {
+		manage=1;
+	}
+
+	bool frameStarted(const FrameEvent& evt)
+    {
+		Vector3 dist; 
+		int distance=0,inc2=0,d;
+		unsigned int nlod,diflods;
+
+		// Move upto 80 units/second
+		Real MoveFactor = 180.0 * evt.timeSinceLastFrame;
+
+		// Copy the current state of the input devices
+		mInputDevice->capture();
+
+		// If this is the first frame, pick a speed
+		if (evt.timeSinceLastFrame == 0)
+		{
+			mMoveScale = 1;
+			mRotScale = 0.1;
+		}
+		// Otherwise scale movement units by time passed since last frame
+		else
+		{
+			// Move about 100 units per second,
+			mMoveScale = mMoveSpeed * evt.timeSinceLastFrame;
+			// Take about 10 seconds for full rotation
+			mRotScale = mRotateSpeed * evt.timeSinceLastFrame;
+		}
+
+		mRotX = 0;
+        mRotY = 0;
+	    mTranslateVector = Vector3::ZERO;
+
+		//LOD selection
+		int difdist = dist_max - dist_min;
+	
+		int i=0;
+
+		dist = node->getPosition() - mCamera->getPosition(); 
+		distance =dist.length();
+
+		DumpDataToOgreBuffers(ogreMesh,myTrees);
+
+		float lodfactor = (float)(distance - dist_min) / (float)(dist_max - dist_min);
+		lodfactor = 1.0f - lodfactor;
+
+		if (lodfactor >= 0.0f && lodfactor <= 1.0f)			
+		{
+			myTrees->GoToLod(lodfactor);
+
+			if (lodfactor < 0.333f)
+			{
+				color.r=0.0;
+				color.g=(lodfactor)*3.0f;//nlod*1.0/(diflods/3);
+				color.b=(1.0-lodfactor)*3.0f;//(nlod*1.0/(diflods/3));
+			}
+			else
+			{
+				if (lodfactor<0.666f)
+				{
+					color.r=(lodfactor-0.333f)*3.0f;//(nlod-diflods/3)*1.0/(diflods/3);
+					color.g=1.0;
+					color.b=0.0;
+				}
+				else
+				{
+					color.r=1.0;
+					color.g=(1.0-lodfactor)*3.0f;//(nlod-(2*diflods/3))*1.0/(diflods/3);
+					color.b=0.0;
+				}
+			}
+			mat[0]->setDiffuse(color);
+		}
+/*		else
+		{
+			if ((distance > dist_max))
+			{
+			//	myStrips->GoToLod(1.0f);
+
+				color.r=0.0;
+				color.g=0.0;
+				color.b=1.0;
+				mat[0]->setDiffuse(color);
+
+			}
+			else
+			{
+				if ((distance < dist_min))
+				{
+				//	myStrips->GoToLod(0.0f);
+
+					color.r=1.0;
+					color.g=0.0;
+					color.b=0.0;
+					mat[0]->setDiffuse(color);
+				}
+			}
+		}*/
+
+		// Move the node
+		if(mInputDevice->isKeyDown(Ogre::KC_UP))
+		  mTranslateVector.z = -mMoveScale;
+
+
+		if(mInputDevice->isKeyDown(Ogre::KC_DOWN))
+		  mTranslateVector.z = mMoveScale;
+
+		// Instead of moving the ship left and right, rotate it using yaw()
+		if(mInputDevice->isKeyDown(Ogre::KC_LEFT))
+		  mCamera->yaw(mRotScale);
+
+		if(mInputDevice->isKeyDown(Ogre::KC_RIGHT))
+		  mCamera->yaw(-mRotScale);
+
+		// Move the node
+		if(mInputDevice->isKeyDown(Ogre::KC_W))
+		  node->translate(0,mMoveScale,0);
+
+		if(mInputDevice->isKeyDown(Ogre::KC_S))
+		  node->translate(0,-mMoveScale,0);
+
+		if(mInputDevice->isKeyDown(Ogre::KC_Z))
+		  node->scale(1.01,1.01,1.01);
+
+		if(mInputDevice->isKeyDown(Ogre::KC_X))
+		  node->scale(0.99,0.99,0.99);
+
+		// Rotate
+		if(mInputDevice->isKeyDown(Ogre::KC_A))
+		  node->yaw(mRotScale);
+
+		if(mInputDevice->isKeyDown(Ogre::KC_D))
+		  node->yaw(-mRotScale);
+
+		if(mInputDevice->isKeyDown(Ogre::KC_ESCAPE))
+		{
+			delete myTrees;
+
+			delete [] mat;
+
+		    return false;
+		}
+
+        if( mInputDevice->getMouseButton( 1 ) )
+        {
+            mTranslateVector.x += mInputDevice->getMouseRelativeX() * 0.13;
+            mTranslateVector.y -= mInputDevice->getMouseRelativeY() * 0.13;
+        }
+        else
+        {
+            mRotX = Degree(-mInputDevice->getMouseRelativeX() * 0.13);
+            mRotY = Degree(-mInputDevice->getMouseRelativeY() * 0.13);
+        }
+
+
+		char cadena[256];
+
+				
+		sprintf(cadena,"Distance: %d",distance);
+		
+		mInfo->setCaption(cadena);
+
+		if (lodfactor<0.0f)
+			lodfactor=0.0f;
+		if (lodfactor>1.0f)
+			lodfactor=1.0f;
+		sprintf(cadena,"LOD factor: %f",lodfactor);
+
+		mInfo2->setCaption(cadena);
+
+		mCamera->yaw(mRotX);
+        mCamera->pitch(mRotY);
+        mCamera->moveRelative(mTranslateVector);
+
+		return true;
+    }
+};
+
+class FresnelApplication : public ExampleApplication
+{
+protected:
+public:
+    FresnelApplication()
+	{
+	}
+
+    ~FresnelApplication() 
+    {
+    }
+protected:
+    
+
+
+    // Just override the mandatory create scene method
+    void createScene(void)
+    {
+		mat = new MaterialPtr[1];
+		
+        theCam = mCamera;
+        theCam->setPosition(0,20,dist_max+50);
+        // Set ambient light
+        mSceneMgr->setAmbientLight(ColourValue(0.3, 0.3, 0.3));
+
+        // Create a point light
+        Light* l = mSceneMgr->createLight("MainLight");
+        l->setType(Light::LT_DIRECTIONAL);
+        l->setDirection(0.0,0.0,-1.0);
+        
+        // Define a floor plane mesh
+		Plane plane( Vector3::UNIT_Y, 0 );
+
+		MeshManager::getSingleton().createPlane("ground",
+			ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, plane,
+			1500,1500,20,20,true,1,5,5,Vector3::UNIT_Z);
+
+		Entity* suelo = mSceneMgr->createEntity( "GroundEntity", "ground" );
+		mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(suelo);
+		
+
+		suelo->setMaterialName("Examples/GrassFloor");
+		suelo->setCastShadows(false);       
+
+        
+        mSceneMgr->setSkyBox(true, "Examples/CloudyNoonSkyBox");
+
+        // My node to which all objects will be attached
+        SceneNode* myRootNode = mSceneMgr->getRootSceneNode()->createChildSceneNode();
+
+		std::string model_file=model_name;
+		model_file.append(".mesh");
+
+		//Models
+        entity = mSceneMgr->createEntity(model_name, "../../../OgreStuff/media/GT/betulalod.mesh");
+
+		ogreMesh = entity->getMesh().getPointer();
+
+		// load LOD info from the object
+		meshloader=new Geometry::GeoMeshLoader;
+		Geometry::Mesh *themesh = meshloader->load("../../../OgreStuff/media/GT/betulalod.mesh");
+
+        node = mSceneMgr->getRootSceneNode()->createChildSceneNode();
+        node->attachObject( entity );
+		node->rotate(Ogre::Vector3(1,0,0),Ogre::Radian(-90.0f));
+
+//		myStrips = new LodStripsLibrary(lod_file,entity->getMesh().getPointer());
+
+		if (!meshloader->GetLodStripsData() || !meshloader->GetTreeSimpSeq())
+			exit(1);
+
+//		myStrips = new Geometry::LodStripsLibrary(meshloader->GetLodStripsData(),themesh);
+		myTrees = new Geometry::LodTreeLibrary(meshloader->GetLodStripsData(),meshloader->GetTreeSimpSeq(),themesh);
+
+		entity->setNormaliseNormals(true);
+
+/*		// Colour-coded material
+		mat[0] = MaterialManager::getSingleton().create("test_mat", 
+			ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
+		mat[0]->setCullingMode(CULL_ANTICLOCKWISE);
+		mat[0]->setAmbient(ColourValue::Black);
+		mat[0]->setDiffuse(color);
+		mat[0]->setLightingEnabled(true);
+		entity->setMaterialName("test_mat");*/
+
+
+		// Colour-coded material
+		mat[0] = MaterialManager::getSingleton().create("test_mat", 
+			ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
+		mat[0]->setCullingMode(CULL_NONE);
+		mat[0]->setAmbient(ColourValue::Black);
+		mat[0]->setDiffuse(color);
+		mat[0]->setLightingEnabled(true);
+		mat[0]->createTechnique()->createPass()->createTextureUnitState("nm_rt.png");
+		//entity->setMaterialName("test_mat");
+		entity->setMaterialName("Examples/GrassFloor");
+
+
+        // show overlay
+        Overlay* pOver = OverlayManager::getSingleton().getByName("Demo_LodStrips/Overlay");    
+        mInfo = OverlayManager::getSingleton().getOverlayElement("Demo_LodStrips/Info_1");
+		mInfo2 = OverlayManager::getSingleton().getOverlayElement("Demo_LodStrips/Info_2");
+	    pOver->show();
+
+    }
+
+    void createFrameListener(void)
+    {
+        mFrameListener= new FresnelFrameListener(mWindow, mCamera);
+        mFrameListener->showDebugOverlay(true);
+        mRoot->addFrameListener(mFrameListener);
+    }
+
+};
+
+
+
+#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
+#define WIN32_LEAN_AND_MEAN
+#include "windows.h"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
+INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )
+#else
+int main(int argc, char **argv)
+#endif
+{
+    // Create application object
+    FresnelApplication app;
+
+    try {
+        app.go();
+    } catch( Exception& e ) {
+#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
+        MessageBox( NULL, e.getFullDescription().c_str(), "An exception has occured!", MB_OK | MB_ICONERROR | MB_TASKMODAL);
+#else
+        std::cerr << "An exception has occured: " << e.getFullDescription();
+#endif
+    }
+
+
+    return 0;
+}
+
+#ifdef __cplusplus
+}
+#endif
Index: GTP/trunk/App/Demos/Geom/Demo_LodTrees/Demo_LodTrees.vcproj
===================================================================
--- GTP/trunk/App/Demos/Geom/Demo_LodTrees/Demo_LodTrees.vcproj	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/Demo_LodTrees/Demo_LodTrees.vcproj	(revision 1092)
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.10"
+	Name="Demo_LodTrees"
+	ProjectGUID="{756E8FBA-EA25-400C-9CA9-CB5AE5D7621E}"
+	Keyword="Win32Proj">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="build\Debug"
+			IntermediateDirectory="Debug"
+			ConfigurationType="1"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				ImproveFloatingPointConsistency="TRUE"
+				AdditionalIncludeDirectories="..\OgreStuff\include;..\..\..\..\Lib\Geom\shared\GTGeometry\include"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
+				MinimalRebuild="TRUE"
+				ExceptionHandling="TRUE"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="5"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="4"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="OgreMain_d.lib GTGeometry_d.lib"
+				OutputFile="$(OutDir)/Demo_LodTrees.exe"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="..\OgreStuff\lib;..\..\..\..\Lib\Geom\shared\GTGeometry\build\Debug\"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile="$(OutDir)/Demo_LodTrees.pdb"
+				SubSystem="2"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="xcopy /Y ..\OgreStuff\bin\Debug\*.dll build\Debug
+xcopy /Y ..\OgreStuff\bin\Debug\*.cfg build\Debug
+"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="build\Release"
+			IntermediateDirectory="build\Release"
+			ConfigurationType="1"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\OgreStuff\include;..\..\..\..\Lib\Geom\shared\GTGeometry\include"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+				RuntimeLibrary="4"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="OgreMain.lib GTGeometry.lib"
+				OutputFile="$(OutDir)/Demo_LodTrees.exe"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="..\OgreStuff\lib;..\..\..\..\Lib\Geom\shared\GTGeometry\build\Release\"
+				IgnoreDefaultLibraryNames=""
+				GenerateDebugInformation="TRUE"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="xcopy /Y ..\OgreStuff\bin\Release\*.dll build\Release
+xcopy /Y ..\OgreStuff\bin\Release\*.cfg build\Release
+"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+			<File
+				RelativePath=".\main.cpp">
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
Index: GTP/trunk/App/Demos/Geom/Demo_LodStrips/Demo_LodStrips.sln
===================================================================
--- GTP/trunk/App/Demos/Geom/Demo_LodStrips/Demo_LodStrips.sln	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/Demo_LodStrips/Demo_LodStrips.sln	(revision 1092)
@@ -0,0 +1,21 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Demo_LodStrips", "Demo_LodStrips.vcproj", "{756E8FBA-EA25-400C-9CA9-CB5AE5D7621E}"
+	ProjectSection(ProjectDependencies) = postProject
+	EndProjectSection
+EndProject
+Global
+	GlobalSection(SolutionConfiguration) = preSolution
+		Debug = Debug
+		Release = Release
+	EndGlobalSection
+	GlobalSection(ProjectConfiguration) = postSolution
+		{756E8FBA-EA25-400C-9CA9-CB5AE5D7621E}.Debug.ActiveCfg = Debug|Win32
+		{756E8FBA-EA25-400C-9CA9-CB5AE5D7621E}.Debug.Build.0 = Debug|Win32
+		{756E8FBA-EA25-400C-9CA9-CB5AE5D7621E}.Release.ActiveCfg = Release|Win32
+		{756E8FBA-EA25-400C-9CA9-CB5AE5D7621E}.Release.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+	EndGlobalSection
+	GlobalSection(ExtensibilityAddIns) = postSolution
+	EndGlobalSection
+EndGlobal
Index: GTP/trunk/App/Demos/Geom/Demo_LodStrips/main.cpp
===================================================================
--- GTP/trunk/App/Demos/Geom/Demo_LodStrips/main.cpp	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/Demo_LodStrips/main.cpp	(revision 1092)
@@ -0,0 +1,536 @@
+/*	==========================================================================
+ *	(C) 2006 Universitat Jaume I
+ *	==========================================================================
+ *	PROYECT:	GAME TOOLS
+ *	==========================================================================*/
+/**	CONTENT:	
+	*
+	*
+	*	@file	main.cpp
+/** COMMENTS:
+	* Model must be in "media/models" folder.
+	* Lod file must be in "media/GT" folder.
+/*===========================================================================*/
+#include "ExampleApplication.h"
+//#include "OgreLodStripsLibrary.h"
+#include "GeoLodStripsLibrary.h"
+#include "GeoMeshLoader.h"
+
+
+// Distance values
+#define dist_min 300
+#define dist_max 700
+
+// Model name
+#define model_name "dwarf2"
+
+
+//Global variables
+Entity* entity;
+Geometry::LodStripsLibrary* myStrips;
+Ogre::Mesh *ogreMesh=NULL;
+Geometry::GeoMeshLoader *meshloader=NULL;
+SceneNode* node;
+
+MaterialPtr *mat;
+
+ColourValue color=ColourValue::Red;
+
+Camera* theCam;
+Entity* pPlaneEnt;
+std::vector<Entity*> belowWaterEnts;
+std::vector<Entity*> aboveWaterEnts;
+
+Plane reflectionPlane;
+
+OverlayElement* mInfo;
+OverlayElement* mInfo2;
+
+class RefractionTextureListener : public RenderTargetListener
+{
+public:
+    void preRenderTargetUpdate(const RenderTargetEvent& evt)
+    {
+        // Hide plane and objects above the water
+        pPlaneEnt->setVisible(false);
+        std::vector<Entity*>::iterator i, iend;
+        iend = aboveWaterEnts.end();
+        for (i = aboveWaterEnts.begin(); i != iend; ++i)
+        {
+            (*i)->setVisible(false);
+        }
+
+    }
+    void postRenderTargetUpdate(const RenderTargetEvent& evt)
+    {
+        // Show plane and objects above the water
+        pPlaneEnt->setVisible(true);
+        std::vector<Entity*>::iterator i, iend;
+        iend = aboveWaterEnts.end();
+        for (i = aboveWaterEnts.begin(); i != iend; ++i)
+        {
+            (*i)->setVisible(true);
+        }
+    }
+
+};
+class ReflectionTextureListener : public RenderTargetListener
+{
+public:
+    void preRenderTargetUpdate(const RenderTargetEvent& evt)
+    {
+        // Hide plane and objects below the water
+        pPlaneEnt->setVisible(false);
+        std::vector<Entity*>::iterator i, iend;
+        iend = belowWaterEnts.end();
+        for (i = belowWaterEnts.begin(); i != iend; ++i)
+        {
+            (*i)->setVisible(false);
+        }
+        theCam->enableReflection(reflectionPlane);
+
+    }
+    void postRenderTargetUpdate(const RenderTargetEvent& evt)
+    {
+        // Show plane and objects below the water
+        pPlaneEnt->setVisible(true);
+        std::vector<Entity*>::iterator i, iend;
+        iend = belowWaterEnts.end();
+        for (i = belowWaterEnts.begin(); i != iend; ++i)
+        {
+            (*i)->setVisible(true);
+        }
+        theCam->disableReflection();
+    }
+
+};
+
+void DumpDataToOgreBuffers(Ogre::Mesh *original_mesh, Geometry::LodStripsLibrary *lodStripsLib)
+{
+	// Copy to Ogre buffers including the degenerated triangles
+
+	Ogre::HardwareIndexBufferSharedPtr	ibuf;
+	Ogre::IndexData	*indexes;
+	Ogre::RenderOperation mRenderOp;
+
+	for (int submesh=0; submesh < original_mesh->getNumSubMeshes(); submesh++)
+	{
+		int indices_to_render = lodStripsLib->GetValidIndexCount(submesh);
+		int offset = lodStripsLib->GetValidOffset(submesh);
+
+		original_mesh->getSubMesh(submesh)->_getRenderOperation(mRenderOp,0);
+
+		ibuf = Ogre::HardwareBufferManager::getSingleton().createIndexBuffer( 
+			Ogre::HardwareIndexBuffer::IT_32BIT, // type of index 
+			indices_to_render, // number of indexes 
+			Ogre::HardwareBuffer::HBU_DISCARDABLE , // usage
+			false); // no shadow buffer 
+					
+		mRenderOp.indexData->indexBuffer = ibuf;
+		mRenderOp.indexData->indexStart = 0;//offset; 
+		mRenderOp.indexData->indexCount = indices_to_render;
+
+		unsigned long* pIdx = static_cast<unsigned long*>(ibuf->lock(Ogre::HardwareBuffer::HBL_NORMAL));
+
+		for (int k=0; k<indices_to_render; k++)
+			pIdx[k] = lodStripsLib->dataRetrievalInterface->GetIndex(k+offset);
+			
+		ibuf->unlock();
+
+	}
+}
+
+class FresnelFrameListener : public ExampleFrameListener
+{
+	int manage;
+
+public:
+
+    FresnelFrameListener(RenderWindow* win, Camera* cam)
+        : ExampleFrameListener(win, cam, false, false)
+    {
+		manage=1;
+	}
+
+	bool frameStarted(const FrameEvent& evt)
+    {
+		Vector3 dist; 
+		int distance=0,inc2=0,d;
+		unsigned int nlod,diflods;
+
+		// Move upto 80 units/second
+		Real MoveFactor = 180.0 * evt.timeSinceLastFrame;
+
+		// Copy the current state of the input devices
+		mInputDevice->capture();
+
+		// If this is the first frame, pick a speed
+		if (evt.timeSinceLastFrame == 0)
+		{
+			mMoveScale = 1;
+			mRotScale = 0.1;
+		}
+		// Otherwise scale movement units by time passed since last frame
+		else
+		{
+			// Move about 100 units per second,
+			mMoveScale = mMoveSpeed * evt.timeSinceLastFrame;
+			// Take about 10 seconds for full rotation
+			mRotScale = mRotateSpeed * evt.timeSinceLastFrame;
+		}
+
+		mRotX = 0;
+        mRotY = 0;
+	    mTranslateVector = Vector3::ZERO;
+
+		//LOD selection
+		int difdist = dist_max - dist_min;
+	
+		int i=0;
+
+		dist = node->getPosition() - mCamera->getPosition(); 
+		distance =dist.length();
+
+		DumpDataToOgreBuffers(ogreMesh,myStrips);
+
+		float lodfactor = (float)(distance - dist_min) / (float)(dist_max - dist_min);
+		lodfactor = 1.0f - lodfactor;
+
+		if (lodfactor >= 0.0f && lodfactor <= 1.0f)			
+		{
+			myStrips->GoToLod(lodfactor);
+
+/*			diflods = 10.0f;//myStrips->MaxLod()-myStrips->MinLod();
+			inc2=diflods/difdist;
+			inc2++;
+
+			d = distance - dist_min;
+
+			nlod = d*inc2;*/
+
+//			if ((nlod!=myStrips->mCurrentLod)&&(nlod>=myStrips->MinLod())&&(nlod<=myStrips->MaxLod()))
+//			{
+				if (lodfactor < 0.333f)
+				{
+					color.r=0.0;
+					color.g=(lodfactor)*3.0f;//nlod*1.0/(diflods/3);
+					color.b=(1.0-lodfactor)*3.0f;//(nlod*1.0/(diflods/3));
+				}
+				else
+				{
+					if (lodfactor<0.666f)
+					{
+						color.r=(lodfactor-0.333f)*3.0f;//(nlod-diflods/3)*1.0/(diflods/3);
+						color.g=1.0;
+						color.b=0.0;
+					}
+					else
+					{
+						color.r=1.0;
+						color.g=(1.0-lodfactor)*3.0f;//(nlod-(2*diflods/3))*1.0/(diflods/3);
+						color.b=0.0;
+					}
+				}
+				mat[0]->setDiffuse(color);
+		//	}
+		}
+		else
+		{
+			if ((distance > dist_max))
+			{
+			//	myStrips->GoToLod(1.0f);
+
+				color.r=0.0;
+				color.g=0.0;
+				color.b=1.0;
+				mat[0]->setDiffuse(color);
+
+			}
+			else
+			{
+				if ((distance < dist_min))
+				{
+				//	myStrips->GoToLod(0.0f);
+
+					color.r=1.0;
+					color.g=0.0;
+					color.b=0.0;
+					mat[0]->setDiffuse(color);
+				}
+			}
+		}
+
+		// Move the node
+		if(mInputDevice->isKeyDown(Ogre::KC_UP))
+		  mTranslateVector.z = -mMoveScale;
+
+
+		if(mInputDevice->isKeyDown(Ogre::KC_DOWN))
+		  mTranslateVector.z = mMoveScale;
+
+		// Instead of moving the ship left and right, rotate it using yaw()
+		if(mInputDevice->isKeyDown(Ogre::KC_LEFT))
+		  mCamera->yaw(mRotScale);
+
+		if(mInputDevice->isKeyDown(Ogre::KC_RIGHT))
+		  mCamera->yaw(-mRotScale);
+
+		// Move the node
+		if(mInputDevice->isKeyDown(Ogre::KC_W))
+		  node->translate(0,mMoveScale,0);
+
+		if(mInputDevice->isKeyDown(Ogre::KC_S))
+		  node->translate(0,-mMoveScale,0);
+
+		if(mInputDevice->isKeyDown(Ogre::KC_Z))
+		  node->scale(1.01,1.01,1.01);
+
+		if(mInputDevice->isKeyDown(Ogre::KC_X))
+		  node->scale(0.99,0.99,0.99);
+
+		// Rotate
+		if(mInputDevice->isKeyDown(Ogre::KC_A))
+		  node->yaw(mRotScale);
+
+		if(mInputDevice->isKeyDown(Ogre::KC_D))
+		  node->yaw(-mRotScale);
+
+		if(mInputDevice->isKeyDown(Ogre::KC_ESCAPE))
+		{
+			delete myStrips;
+
+			delete [] mat;
+
+		    return false;
+		}
+
+        if( mInputDevice->getMouseButton( 1 ) )
+        {
+            mTranslateVector.x += mInputDevice->getMouseRelativeX() * 0.13;
+            mTranslateVector.y -= mInputDevice->getMouseRelativeY() * 0.13;
+        }
+        else
+        {
+            mRotX = Degree(-mInputDevice->getMouseRelativeX() * 0.13);
+            mRotY = Degree(-mInputDevice->getMouseRelativeY() * 0.13);
+        }
+
+
+		char cadena[256];
+
+				
+		sprintf(cadena,"Distance: %d",distance);
+		
+		mInfo->setCaption(cadena);
+
+		if (lodfactor<0.0f)
+			lodfactor=0.0f;
+		if (lodfactor>1.0f)
+			lodfactor=1.0f;
+		sprintf(cadena,"LOD factor: %f",lodfactor);
+
+		mInfo2->setCaption(cadena);
+
+		mCamera->yaw(mRotX);
+        mCamera->pitch(mRotY);
+        mCamera->moveRelative(mTranslateVector);
+
+		return true;
+    }
+};
+
+class FresnelApplication : public ExampleApplication
+{
+protected:
+    RefractionTextureListener mRefractionListener;
+    ReflectionTextureListener mReflectionListener;
+public:
+    FresnelApplication() {
+    
+    
+    }
+
+    ~FresnelApplication() 
+    {
+    }
+protected:
+    
+
+
+    // Just override the mandatory create scene method
+    void createScene(void)
+    {
+		Entity* pEnt;
+
+		mat = new MaterialPtr[1];
+		
+	    // Check prerequisites first
+		const RenderSystemCapabilities* caps = Root::getSingleton().getRenderSystem()->getCapabilities();
+        if (!caps->hasCapability(RSC_VERTEX_PROGRAM) || !(caps->hasCapability(RSC_FRAGMENT_PROGRAM)))
+        {
+            OGRE_EXCEPT(1, "Your card does not support vertex and fragment programs, so cannot "
+                "run this demo. Sorry!", 
+                "Fresnel::createScene");
+        }
+        else
+        {
+            if (!GpuProgramManager::getSingleton().isSyntaxSupported("arbfp1") &&
+                !GpuProgramManager::getSingleton().isSyntaxSupported("ps_2_0") &&
+				!GpuProgramManager::getSingleton().isSyntaxSupported("ps_1_4")
+				)
+            {
+                OGRE_EXCEPT(1, "Your card does not support advanced fragment programs, "
+                    "so cannot run this demo. Sorry!", 
+                "Fresnel::createScene");
+            }
+        }
+
+        theCam = mCamera;
+        theCam->setPosition(0,20,dist_max+50);
+        // Set ambient light
+        mSceneMgr->setAmbientLight(ColourValue(0.3, 0.3, 0.3));
+
+        // Create a point light
+        Light* l = mSceneMgr->createLight("MainLight");
+        l->setType(Light::LT_DIRECTIONAL);
+        l->setDirection(0.0,0.0,-1.0);
+
+       
+        RenderTexture* rttTex = mRoot->getRenderSystem()->createRenderTexture( "Refraction", 512, 512 );
+		
+        {
+            Viewport *v = rttTex->addViewport( mCamera );
+            MaterialPtr mat = MaterialManager::getSingleton().getByName("Examples/FresnelReflectionRefraction");
+            mat->getTechnique(0)->getPass(0)->getTextureUnitState(2)->setTextureName("Refraction");
+            v->setOverlaysEnabled(false);
+            rttTex->addListener(&mRefractionListener);
+        }
+        
+		
+        rttTex = mRoot->getRenderSystem()->createRenderTexture( "Reflection", 512, 512 );
+        {
+            Viewport *v = rttTex->addViewport( mCamera );
+            MaterialPtr mat = MaterialManager::getSingleton().getByName("Examples/FresnelReflectionRefraction");
+            mat->getTechnique(0)->getPass(0)->getTextureUnitState(1)->setTextureName("Reflection");
+            v->setOverlaysEnabled(false);
+            rttTex->addListener(&mReflectionListener);
+        }
+        
+        
+        // Define a floor plane mesh
+        reflectionPlane.normal = Vector3::UNIT_Y;
+        reflectionPlane.d = 0;
+        MeshManager::getSingleton().createPlane("ReflectPlane",
+            ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
+            reflectionPlane,
+            9000,9000,10,10,true,1,5,5,Vector3::UNIT_Z);
+        pPlaneEnt = mSceneMgr->createEntity( "plane", "ReflectPlane" );
+        pPlaneEnt->setMaterialName("Examples/FresnelReflectionRefraction");
+        mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(pPlaneEnt);
+
+        
+        mSceneMgr->setSkyBox(true, "Examples/CloudyNoonSkyBox");
+
+        // My node to which all objects will be attached
+        SceneNode* myRootNode = mSceneMgr->getRootSceneNode()->createChildSceneNode();
+
+
+        // Now the below water ents
+        pEnt = mSceneMgr->createEntity( "PoolFloor", "PoolFloor.mesh" );
+        myRootNode->attachObject(pEnt);
+        belowWaterEnts.push_back(pEnt);
+		myRootNode->scale(6.0,6.0,6.0);
+
+		std::string model_file=model_name;
+		model_file.append(".mesh");
+
+		//Models
+        entity = mSceneMgr->createEntity(model_name, "../../../OgreStuff/media/GT/dwarflod.mesh");
+
+		ogreMesh = entity->getMesh().getPointer();
+
+		// load LOD info from the object
+		meshloader=new Geometry::GeoMeshLoader;
+		Geometry::Mesh *themesh = meshloader->load("../../../OgreStuff/media/GT/dwarflod.mesh");
+
+        node = mSceneMgr->getRootSceneNode()->createChildSceneNode();
+        node->attachObject( entity );
+
+		std::string lod_file="../../media/GT/";
+		lod_file.append(model_name);
+		lod_file.append(".lod");
+
+//		myStrips = new LodStripsLibrary(lod_file,entity->getMesh().getPointer());
+
+		if (!meshloader->GetLodStripsData())
+			exit(1);
+
+		myStrips = new Geometry::LodStripsLibrary(meshloader->GetLodStripsData(),themesh);
+
+		entity->setNormaliseNormals(true);
+
+		aboveWaterEnts.push_back(entity);
+
+		// Colour-coded material
+		mat[0] = MaterialManager::getSingleton().create("test_mat", 
+			ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
+		mat[0]->setCullingMode(CULL_ANTICLOCKWISE);
+		mat[0]->setAmbient(ColourValue::Black);
+		mat[0]->setDiffuse(color);
+		mat[0]->setLightingEnabled(true);
+		entity->setMaterialName("test_mat");
+
+        // show overlay
+        Overlay* pOver = OverlayManager::getSingleton().getByName("Demo_LodStrips/Overlay");    
+        mInfo = OverlayManager::getSingleton().getOverlayElement("Demo_LodStrips/Info_1");
+		mInfo2 = OverlayManager::getSingleton().getOverlayElement("Demo_LodStrips/Info_2");
+	    pOver->show();
+
+    }
+
+    void createFrameListener(void)
+    {
+        mFrameListener= new FresnelFrameListener(mWindow, mCamera);
+        mFrameListener->showDebugOverlay(true);
+        mRoot->addFrameListener(mFrameListener);
+    }
+
+};
+
+
+
+#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
+#define WIN32_LEAN_AND_MEAN
+#include "windows.h"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
+INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )
+#else
+int main(int argc, char **argv)
+#endif
+{
+    // Create application object
+    FresnelApplication app;
+
+    try {
+        app.go();
+    } catch( Exception& e ) {
+#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
+        MessageBox( NULL, e.getFullDescription().c_str(), "An exception has occured!", MB_OK | MB_ICONERROR | MB_TASKMODAL);
+#else
+        std::cerr << "An exception has occured: " << e.getFullDescription();
+#endif
+    }
+
+
+    return 0;
+}
+
+#ifdef __cplusplus
+}
+#endif
Index: GTP/trunk/App/Demos/Geom/Demo_LodStrips/Demo_LodStrips.vcproj
===================================================================
--- GTP/trunk/App/Demos/Geom/Demo_LodStrips/Demo_LodStrips.vcproj	(revision 1092)
+++ GTP/trunk/App/Demos/Geom/Demo_LodStrips/Demo_LodStrips.vcproj	(revision 1092)
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.10"
+	Name="Demo_LodStrips"
+	ProjectGUID="{756E8FBA-EA25-400C-9CA9-CB5AE5D7621E}"
+	Keyword="Win32Proj">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="build\Debug"
+			IntermediateDirectory="Debug"
+			ConfigurationType="1"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				ImproveFloatingPointConsistency="TRUE"
+				AdditionalIncludeDirectories="..\OgreStuff\include;..\..\..\..\Lib\Geom\shared\GTGeometry\include"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
+				MinimalRebuild="TRUE"
+				ExceptionHandling="TRUE"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="5"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="4"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="OgreMain_d.lib GTGeometry_d.lib"
+				OutputFile="$(OutDir)/Demo_LodStrips.exe"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="..\OgreStuff\lib;..\..\..\..\Lib\Geom\shared\GTGeometry\build\Debug\"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile="$(OutDir)/Demo_LodStrips.pdb"
+				SubSystem="2"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="xcopy /Y ..\OgreStuff\bin\Debug\*.dll build\Debug
+xcopy /Y ..\OgreStuff\bin\Debug\*.cfg build\Debug
+"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="build\Release"
+			IntermediateDirectory="build\Release"
+			ConfigurationType="1"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="..\OgreStuff\include;..\..\..\..\Lib\Geom\shared\GTGeometry\include"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+				RuntimeLibrary="4"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="OgreMain.lib GTGeometry.lib"
+				OutputFile="$(OutDir)/Demo_LodStrips.exe"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="..\OgreStuff\lib;..\..\..\..\Lib\Geom\shared\GTGeometry\build\Release\"
+				IgnoreDefaultLibraryNames=""
+				GenerateDebugInformation="TRUE"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="xcopy /Y ..\OgreStuff\bin\Release\*.dll build\Release
+xcopy /Y ..\OgreStuff\bin\Release\*.cfg build\Release
+"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+			<File
+				RelativePath=".\main.cpp">
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
