diff --git a/Graphics/Chalkboard.hs b/Graphics/Chalkboard.hs
new file mode 100644
--- /dev/null
+++ b/Graphics/Chalkboard.hs
@@ -0,0 +1,32 @@
+-- |
+-- Module: Graphics.Chalkboard
+-- Copyright: (c) 2009 Andy Gill
+-- License: BSD3
+--
+-- Maintainer: Andy Gill <andygill@ku.edu>
+-- Stability: unstable
+-- Portability: ghc
+--
+-- Public interface to the Chalkboard utilities.
+--
+
+module Graphics.Chalkboard
+	( module Graphics.Chalkboard.Array
+	, module Graphics.Chalkboard.Ascii
+	, module Graphics.Chalkboard.Board
+	, module Graphics.Chalkboard.Color
+	, module Graphics.Chalkboard.Shapes
+	, module Graphics.Chalkboard.PPM
+	, module Graphics.Chalkboard.Utils
+	, module Graphics.Chalkboard.Types
+	) where
+
+import Graphics.Chalkboard.Array	
+import Graphics.Chalkboard.Ascii
+import Graphics.Chalkboard.Board hiding (scale)
+import Graphics.Chalkboard.Color
+import Graphics.Chalkboard.Shapes
+import Graphics.Chalkboard.PPM
+import Graphics.Chalkboard.Utils
+import Graphics.Chalkboard.Types
+
diff --git a/Graphics/Chalkboard/Array.hs b/Graphics/Chalkboard/Array.hs
new file mode 100644
--- /dev/null
+++ b/Graphics/Chalkboard/Array.hs
@@ -0,0 +1,126 @@
+-- |
+-- Module: Graphics.Chalkboard.Array
+-- Copyright: (c) 2009 Andy Gill
+-- License: BSD3
+--
+-- Maintainer: Andy Gill <andygill@ku.edu>
+-- Stability: unstable
+-- Portability: ghc
+--
+-- This module coverts 2D arrays into 'Board's, and back, and supplies basic dithering algorithms.
+
+module Graphics.Chalkboard.Array
+	( -- * Converters
+	  boardToArray, arrayToBoard,
+	  -- * Dithering
+	 threshold, floydSteinberg
+	)
+ where
+
+import Data.Array
+
+import Graphics.Chalkboard.Board as Board
+import Graphics.Chalkboard.Utils
+import Graphics.Chalkboard.Types
+
+import Control.Applicative
+
+-- | 'boardToArray' turns a Board into a 2D Array (pixelization).
+
+boardToArray :: (Average a) 
+ => (Int,Int) 	-- ^ the x,y size of the image to be captured. We assume the bottom left hand size is 0,0.
+ -> Int       	-- ^ the square root of the amount of super-sampling to be done. I recommend 3, which is 9 points.
+ -> Board a	-- ^ the board to sample.
+ -> Array (Int,Int) a -- ^ the result array.
+boardToArray (x_dim,y_dim) n board = array ((0,0),(x_dim,y_dim))
+	[ ((x,y), average 
+		   [ fn (fromIntegral x + x',fromIntegral y + y') 
+		   | x' <- innerSteps n 
+		   , y' <- innerSteps n
+		   ]
+	   )
+	| x <- [0..x_dim]
+	, y <- [0..y_dim]
+ 	]
+    where
+	fn = Board.lookup board
+
+-- There are different ways of taking a 2d array into a Board.
+--   * Do you pixelize the input, or make it continuous (using Bilinear interpolation)?
+--   * Be careful at the edges! You want the samples to be inside the actual edge, not on it.
+--  How do we handle the alpha at the edges!
+{-
+
+   0       1       2
+   +---X---+---Y---+
+
+   So, with pixels, what value does 1 have (X or Y), how about 0 and 2, do you biest to the left or right?
+       with continuous, what value does 0 or 2 have?
+
+-}
+
+-- | 'arrayToBoard' turns a 2D Array into a Board, using bi-linear inteprelation.
+
+arrayToBoard :: (Lerp a, Scale a) => Array (Int,Int) a -> Board (Maybe a)
+arrayToBoard arr = arrayToBoard' arr (bounds arr)
+
+arrayToBoard' :: (Lerp a, Scale a) => Array (Int,Int) a -> ((Int,Int),(Int,Int)) -> Board (Maybe a)
+arrayToBoard' arr ((0,0),(w,h)) = pure img <*> coord
+  where 
+	(width,height) = (w-1,h-1)
+	outside x0 y0 = x0 < 0
+		     || x0 > fromIntegral width
+	             || y0 < 0
+		     || y0 > fromIntegral height
+	img (x,y) | outside x y = Nothing
+	          | otherwise   = lerp p00_p10 p01_p11 y_gap
+		where
+		 (x',x_gap) = close x 
+		 (y',y_gap) = close y 
+		 find x0 y0 | outside x0 y0
+				= Nothing
+			    | otherwise
+				= Just (arr ! (x0,y0))
+		 p00 = find x' y'
+		 p10 = find (succ x') y'
+		 p01 = find x' (succ y')
+		 p11 = find (succ x') (succ y')
+		 p00_p10 = lerp p00 p10 x_gap
+		 p01_p11 = lerp p01 p11 x_gap
+-- normalize the board to start at (0,0)
+arrayToBoard' arr bnds@((low_w,low_h),_) = arrayToBoard (ixmap bnds (\ (w,h) -> (w - low_w,h - low_h)) arr)
+
+		
+
+-- how close are you to one of our samples?
+close :: R -> (Int,R)
+close v0 = (v_floor,fracPart v0)
+  where
+	v_floor = floor v0
+
+
+------------------------------------------------------
+-- | 'threshold' quantized based on a simple, pointwise function.
+
+threshold :: (Floating a) => (a -> a) -> Array (Int,Int) a -> Array (Int,Int) a
+threshold quantize = fmap quantize
+
+-- | 'floydSteinberg' quantized using the Floyd Steinberg algorithm.
+
+floydSteinberg :: (Floating a) => (a -> a) -> Array (Int,Int) a -> Array (Int,Int) a
+floydSteinberg quantize orig = fmap fst values
+  where
+	bnds@((x_min,y_min),(x_max,y_max)) = bounds orig 
+	errors (x,y) | inRange bnds (x,y) = snd (values ! (x,y))
+		     | otherwise    = 0
+	values = array bnds
+		[ let value = orig ! (x,y) +
+			(errors (x-1,y))   * 7 +
+			(errors (x+1,y-1)) * 3 +
+			(errors (x,y-1))   * 5 +
+			(errors (x-1,y-1)) * 1
+		      q_value = quantize value
+		  in ((x,y),(q_value,(value - q_value) / 16))
+		| x <- [x_min..x_max]
+		, y <- [y_min..y_max]
+		]
diff --git a/Graphics/Chalkboard/Ascii.hs b/Graphics/Chalkboard/Ascii.hs
new file mode 100644
--- /dev/null
+++ b/Graphics/Chalkboard/Ascii.hs
@@ -0,0 +1,79 @@
+-- |
+-- Module: Graphics.Chalkboard.Array
+-- Copyright: (c) 2009 Andy Gill
+-- License: BSD3
+--
+-- Maintainer: Andy Gill <andygill@ku.edu>
+-- Stability: unstable
+-- Portability: ghc
+--
+-- This module supports basic ascii drawing of 'Board's.
+--
+
+module Graphics.Chalkboard.Ascii 
+	( toAscii, toCount ) 
+  where
+
+import Data.Array
+
+import Graphics.Chalkboard.Board
+import Graphics.Chalkboard.Array
+import Graphics.Chalkboard.Types
+import Graphics.Chalkboard.Color
+
+-- | 'toAscii' generates a board of ascii characters, where each char is two pixels, one wide and two high.
+
+toAscii :: (Int,Int) -> Board Gray -> [String]
+toAscii = toAsciiWithPen $ \ v v' -> case (sampleInk v,sampleInk v') of
+		      (NoInk,NoInk) -> ' '
+		      (NoInk,SomeInk) -> '.'
+		      (NoInk,MostInk) -> '_'
+		      (SomeInk,NoInk) -> head "'"
+		      (SomeInk,SomeInk) -> ':'
+		      (SomeInk,MostInk) -> ';'
+		      (MostInk,NoInk) -> '"'
+		      (MostInk,SomeInk) -> '?'
+		      (MostInk,MostInk) -> '%'
+
+
+-- | 'toCount' generates a board of ascii characters, where each char is two pixels, one wide and two high.
+-- we uses digits 1 .. 9, then 0 (highest) to represent intensity, adding the two pixels for each char.
+
+toCount :: (Int,Int) -> Board Gray -> [String]
+toCount = toAsciiWithPen $ \ v v' -> 
+			case show (ceiling ((v + v') * 5) :: Int) of
+			   "0"  -> ' '
+			   [c]  -> c
+			   "10" -> '0'
+			   _    -> '?'
+
+toAsciiWithPen :: (Gray -> Gray -> Char) -> (Int,Int) -> Board Gray -> [String]
+toAsciiWithPen pen (x_dim,y_dim) board = [
+	[	let v = arr' ! (x,y)
+		    v' = arr' ! (x,y')
+		in pen v v'
+	|	x <- [0..x_dim]
+	]
+	|	(y,y') <- join [y_dim', y_dim'-2 ..]
+	]
+	where arr = boardToArray (x_dim,y_dim') 2 board
+	      arr' = floydSteinberg sampleT arr
+	      y_dim' = if even y_dim then succ y_dim else y_dim
+	      join (x:xs) | x < 0     = [] 
+			  | otherwise = (x,x-1) : join xs
+	      join _ = error "fatal error"
+
+data Ink = NoInk | SomeInk | MostInk
+
+sampleT :: UI -> UI
+sampleT n
+  | n <= 0.33 = 0.15
+  | n <= 0.67 = 0.60
+  | otherwise = 1
+
+
+sampleInk :: UI -> Ink
+sampleInk n 
+  | n <= 0.33 = MostInk
+  | n <= 0.67 = SomeInk
+  | otherwise = NoInk
diff --git a/Graphics/Chalkboard/Board.hs b/Graphics/Chalkboard/Board.hs
new file mode 100644
--- /dev/null
+++ b/Graphics/Chalkboard/Board.hs
@@ -0,0 +1,108 @@
+-- |
+-- Module: Graphics.Chalkboard.Array
+-- Copyright: (c) 2009 Andy Gill
+-- License: BSD3
+--
+-- Maintainer: Andy Gill <andygill@ku.edu>
+-- Stability: unstable
+-- Portability: ghc
+--
+-- Boards are the principal type for our images. The are conceptually functions from
+-- 2D coordinates to values, typically a color. 
+--
+-- Common Boards include
+--
+-- * @Board Bool@           -- A masking @Board@, or region.
+--
+-- * @Board RGB@	    -- @Color Board@
+--
+-- * @Board (Alpha RGB)@    -- A @Color Board@ with alpha (transparency) values.
+--
+-- * @Board (Maybe a)@      -- A @Board@ with binary transparency.
+--
+-- * @Board (Maybe Color)@  -- A @Color Board@ with binary transparency.
+--
+-- * @Board Point@          -- A @Board@ (or field) of @Point@ values.
+--
+
+module Graphics.Chalkboard.Board 
+	( -- * The Board datatype
+	  Board
+	  -- * looking up a point on the @Board@.
+	, lookup
+	  -- * Creating @Board@s.
+	, coord
+	, maskFor
+	, circularMaskFor
+	  -- * Translations on a @Board@.
+	, scale
+	, scaleXY
+	, move
+	, rotate
+	 -- 
+	, crop
+	, Applicative(..)
+	) where
+
+
+import Prelude hiding (lookup)
+
+import Graphics.Chalkboard.Utils
+import Graphics.Chalkboard.Types
+
+import Control.Applicative
+
+-- | '''Board''' is our primary data type, an infinite flat surface (or R2 field) of values.
+-- Conceptually, @Board a = Point -> a@.
+data Board a = Board ((R,R) -> a)
+-- TODO: consider have a ConstantBoard
+
+lookup :: Board a -> (R,R) -> a
+lookup (Board f) = f
+
+-- Board functionals
+
+instance Scale (Board a) where
+  scale n (Board f) = Board $ \ (x,y) -> f (x / n,y / n)
+
+-- | move a Board by specified vector.
+move :: (R,R) -> Board a -> Board a
+move (xd,yd) (Board f) = Board $ \ (x,y) -> f (x - xd,y - yd)
+
+-- | A non-overloaded version of 'scale' which takes a independent x and y coordinate.
+scaleXY :: (R,R) -> Board a -> Board a
+scaleXY (xn,yn) (Board f) = Board $ \ (x,y) -> f (x / xn,y / yn)
+
+-- | rotate the Board.
+rotate :: Radian -> Board a -> Board a
+rotate theta (Board f) = Board $ \ (x,y) -> f (cos theta * x - sin theta * y,
+				    	       sin theta * x + cos theta * y)
+
+-- | 'crop' crops a Board, based on a masking Board.
+crop :: Board Bool -> Board a -> Board (Maybe a)
+crop mask brd = liftA2 withMask brd mask
+
+-- board Generators
+
+-- | 'coord' field or 'Board', where each point is its own coordinate in R2.
+coord :: Board Point
+coord = Board id
+
+-- | build a rectangle mask or region.
+maskFor :: (Point,Point) -> Board Bool
+maskFor (p1,p2) = fmap (insideRegion (p1,p2)) coord
+
+-- | build a circular mask or region, with a circle of radius @R@, and center @Point@. 
+circularMaskFor :: Point -> R -> Board Bool
+circularMaskFor p r = fmap (insideCircle p r) coord
+
+instance Functor Board where
+  fmap f (Board fn) = Board (f . fn)
+
+instance Applicative Board where
+  pure a = Board $ \ _ -> a
+  (Board f) <*> (Board a) = Board (\ (x,y) -> f (x,y) $ a (x,y))
+
+instance (Over c) => Over (Board c) where
+  over = liftA2 over
+
diff --git a/Graphics/Chalkboard/Color.hs b/Graphics/Chalkboard/Color.hs
new file mode 100644
--- /dev/null
+++ b/Graphics/Chalkboard/Color.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE TypeSynonymInstances #-}
+
+-- |
+-- Module: Graphics.Chalkboard.Color
+-- Copyright: (c) 2009 Andy Gill
+-- License: BSD3
+--
+-- Maintainer: Andy Gill <andygill@ku.edu>
+-- Stability: unstable
+-- Portability: ghc
+--
+-- Simple RGB colors.
+
+module Graphics.Chalkboard.Color 
+	( Gray,
+	  RGB(..),
+	  red, green, blue, white, black, cyan, purple, yellow
+        ) where
+
+import Graphics.Chalkboard.Types
+
+------------------------------------------------------------------------------
+
+-- | 'Gray' is just a value between 0 and 1, inclusive.
+type Gray = UI
+
+
+instance Over Gray where
+  over r _ = r
+
+------------------------------------------------------------------------------
+-- Simple colors
+
+-- | 'RGB' is our color, with values between 0 and 1, inclusive.
+data RGB  = RGB !UI !UI !UI deriving Show
+
+instance Over RGB where
+  -- simple overwriting
+  over x _y = x
+
+instance Lerp RGB where
+  lerp (RGB r g b) (RGB r' g' b') s 
+	 = RGB (lerp r r' s) 
+	       (lerp g g' s)
+	       (lerp b b' s)
+
+instance Scale RGB where
+  scale s (RGB r g b)
+	 = RGB (scale s r) 
+	       (scale s g)
+	       (scale s b) 
+
+instance Average RGB where
+  average cs = RGB (average reds) (average greens) (average blues)
+     where
+	reds   = [ r | RGB r _ _ <- cs ]
+	greens = [ g | RGB _ g _ <- cs ]
+	blues  = [ b | RGB _ _ b <- cs ]
+
+
+red    :: RGB
+red    = RGB 1.0 0.0 0.0
+green  :: RGB
+green  = RGB 0.0 1.0 0.0
+blue   :: RGB
+blue   = RGB 0.0 0.0 1.0
+white  :: RGB
+white  = RGB 1.0 1.0 1.0
+black  :: RGB
+black  = RGB 0.0 0.0 0.0
+cyan   :: RGB
+cyan   = RGB 0.0 1.0 1.0
+purple :: RGB
+purple = RGB 1.0 0.0 1.0
+yellow :: RGB
+yellow = RGB 1.0 1.0 0.0
diff --git a/Graphics/Chalkboard/PPM.hs b/Graphics/Chalkboard/PPM.hs
new file mode 100644
--- /dev/null
+++ b/Graphics/Chalkboard/PPM.hs
@@ -0,0 +1,72 @@
+-- |
+-- Module: Graphics.Chalkboard.PPM
+-- Copyright: (c) 2009 Andy Gill
+-- License: BSD3
+--
+-- Maintainer: Andy Gill <andygill@ku.edu>
+-- Stability: unstable
+-- Portability: ghc
+--
+-- Reading and writing portable pix maps. For now, we only support color images (@P3@ and @P6@ formats).
+--
+
+module Graphics.Chalkboard.PPM where
+
+import System.IO
+import Data.Array
+import Data.Char
+
+import Graphics.Chalkboard.Types
+import Graphics.Chalkboard.Color
+import Graphics.Chalkboard.Board
+import Graphics.Chalkboard.Array
+
+
+-- | 'readPPM' reads a PPM file, and outputs a @Board@, and the @x@ and @y@ dimensions of the image.
+
+readPPM :: String -> IO (Board (Maybe RGB),(Int,Int))
+readPPM filename = do
+	h <- openFile filename ReadMode
+	ty <- hGetLine h
+	bin <- case ty of
+	   "P3" -> return False
+	   "P6" -> return True
+	   _ -> error $ "bad PPM format: " ++ ty
+	szs <- hGetLine h
+	let [width,height] = (map read (words szs) :: [Int])
+--	print width
+--	print height   
+ 	mx <- hGetLine h
+	let [maxs] = (map read (words mx) :: [R])
+--	print mx
+	str <- hGetContents h
+	let num1 = if bin 
+		then map (\ x -> fromIntegral (ord x) / maxs) str
+		else map (\ x -> read x / maxs) (words str)
+	let joinN _ [] = []
+	    joinN n xs = take n xs : joinN n (drop n xs)
+	let num3     = joinN 3 num1
+	let num_rows = joinN width num3
+	let arr = array ((0,0),(width-1,height-1))
+		[ ((w,h'),RGB r g b)
+		| (row,h') <- zip num_rows [height-1,height-2..]
+		, ([r,g,b],w) <- zip row [0..]
+		]
+	return $ (arrayToBoard arr,(width,height))
+
+-- | 'writePPM' writes a PPM file, based on a color @Board@, where bottom left corner of the image is as @(0,0)@.
+
+writePPM :: String -> (Int,Int) -> Board RGB -> IO ()
+writePPM filename (x_dim,y_dim) img = writeFile filename $ 
+	"P6\n" ++ show (x_dim) ++ " " ++ show (y_dim) ++ "\n255\n" ++
+	concat
+	[ let (RGB r g b) = arr ! (x,y)
+	      f x' =  if v < 0 then chr 0 else
+	              if v > 255 then chr 255 else chr v
+		 where v = floor (x' * 255)
+	  in [f r,f g,f b]
+	| y <- reverse [0..y_dim-1]
+	, x <- [0..x_dim-1]
+	]
+   where arr = boardToArray (x_dim-1,y_dim-1) 3 img
+	
diff --git a/Graphics/Chalkboard/Shapes.hs b/Graphics/Chalkboard/Shapes.hs
new file mode 100644
--- /dev/null
+++ b/Graphics/Chalkboard/Shapes.hs
@@ -0,0 +1,70 @@
+-- |
+-- Module: Graphics.Chalkboard.Shapes
+-- Copyright: (c) 2009 Andy Gill
+-- License: BSD3
+--
+-- Maintainer: Andy Gill <andygill@ku.edu>
+-- Stability: unstable
+-- Portability: ghc
+--
+-- This module contains some basic shape generators, expressed as @Board Bool@.
+--
+
+module Graphics.Chalkboard.Shapes where
+
+import Graphics.Chalkboard.Board
+import Graphics.Chalkboard.Utils
+import Graphics.Chalkboard.Types
+
+import Control.Applicative
+
+-- | unit circle, radius 0.5, over origin.
+circle :: Board Bool
+circle =  (\ (x,y) -> x*x + y*y <= 0.5 * 0.5) <$> coord
+
+-- | unit vertical bar,  1 wide over origin.
+vbar :: Board Bool
+vbar =  (\ (_x,y) -> y <= 0.5 && y >= -0.5) <$> coord
+
+-- | unit horizontal bar, 1 high over origin.
+hbar :: Board Bool
+hbar =  (\ (x,_y) -> x <= 0.5 && x >= -0.5) <$> coord
+
+-- | unit square, 1x1 over origin.
+square :: Board Bool
+square = liftA2 (&&) vbar hbar
+
+-- | cheacker board, with squares 1x1.
+checker :: Board Bool
+checker = (\ (x,y) -> even ((floor x + floor y) :: Int)) <$> coord
+
+-- | Given two @Point@s, and a thickness, draw a line between the points.
+-- line :: Line -> Double -> Board Bool
+
+straightline :: (Point,Point) -> R -> Board Bool
+straightline ((x1,y1),(x2,y2)) width = (\ (x,y) ->
+---	distance (x1,y1) (x,y) <= width ||
+--	distance (x2,y2) (x,y) <= width ||
+	(  let 	u = intervalOnLine ((x1,y1),(x2,y2))  (x,y)
+	   in u >= 0 
+	   && u <= 1 
+	   && distance (lerp (x1,y1) (x2,y2) u) (x,y) <= width
+	)) <$> coord
+
+-- | A line generated by sampling a function from @R@ to @Point@s,
+-- with a specific width. There needs to be at least 2 sample points.
+
+functionline :: (R -> Point) -> R -> Int -> Board Bool
+functionline line width steps = stack
+		 [ straightline (p1,p2) width
+		| (p1,p2) <- zip samples (tail samples)
+		] `over` stack
+		[ dotAt p | p <- tail (init samples) ]
+    where
+	samples = map line (outerSteps steps)
+	dotAt p = move p $ scale (width * 2) circle
+
+-- | arrowhead is a triangle, pointing straight up, height 1, width 1, with the (0,0) at the center of the base.
+arrowhead :: Point -> Radian -> R -> Board Bool
+arrowhead p rad sz = move p $ rotate rad $ scale sz $ (\ (x,y) -> y >= 0 && y <= 1 && abs x * 2 <= 1 - y) <$> coord		
+		 
diff --git a/Graphics/Chalkboard/Types.hs b/Graphics/Chalkboard/Types.hs
new file mode 100644
--- /dev/null
+++ b/Graphics/Chalkboard/Types.hs
@@ -0,0 +1,153 @@
+{-# LANGUAGE TypeSynonymInstances #-}
+-- |
+-- Module: Graphics.Chalkboard.Types
+-- Copyright: (c) 2009 Andy Gill
+-- License: BSD3
+--
+-- Maintainer: Andy Gill <andygill@ku.edu>
+-- Stability: unstable
+-- Portability: ghc
+--
+-- This module contains the types used by chalkboard, except Board itself.
+--
+
+module Graphics.Chalkboard.Types 
+	( -- * Basic types
+	  UI, R, Point, Radian,
+	  -- * Overlaying
+	  Over(..),
+	  stack,
+	  -- * Scaling
+	  Scale(..),
+	  -- * Linear Interpolation
+	  Lerp(..),
+	  -- * Averaging
+	  Average(..),
+	  -- * Alpha Channel support
+	  Alpha(..),
+	 alpha, transparent, withAlpha, unAlpha,
+	  -- * Z buffer support
+	  Z(..),
+	  -- * Constants
+	  nearZero
+	) where
+
+-- | A real number.
+type R = Float
+
+-- | Unit Interval: value between 0 and 1, inclusive.
+type UI = R
+
+-- | A point in R2.
+type Point = (R,R)
+
+-- | Angle units
+type Radian = Float	
+
+-- | Close to zero; needed for @Over (Alpha c)@ instance.
+nearZero :: R
+nearZero = 0.0000001 
+
+------------------------------------------------------------------------------
+
+-- | For placing a value literally /over/ another value. The 2nd value /might/ shine through.
+-- The operation /must/ be assocative.
+class Over c where
+  over :: c -> c -> c
+
+instance Over Bool where
+  over = (||)
+
+instance Over (Maybe a) where
+  (Just a) `over` _  = Just a
+  Nothing `over` other = other
+
+-- | 'stack' stacks a list of things over each other, where earlier elements are 'over' later elements.
+-- Requires non empty lists, which can be satisfied by using an explicity
+-- transparent @Board@ as one of the elements.
+
+stack :: (Over c) => [c] -> c
+stack = foldr1 over
+
+------------------------------------------------------------------------------
+
+-- | 'Scale' something by a value. scaling value can be bigger than 1.
+
+class Scale c where
+  scale :: R -> c -> c
+
+instance Scale R where
+  scale u v = u * v
+
+------------------------------------------------------------------------------
+
+-- | Linear interpolation between two values.
+class Lerp a where
+  lerp :: a -> a -> UI -> a
+
+instance Lerp R where
+  lerp v v' s = v + (s * (v' - v))
+
+-- | 'Lerp' over pairs
+
+instance (Lerp a,Lerp b) => Lerp (a,b) where
+  lerp (a,b) (a',b') s = (lerp a a' s,lerp b b' s)
+
+instance (Lerp a) => Lerp (Maybe a) where
+  lerp Nothing  Nothing  _s  = Nothing
+  lerp (Just a) Nothing  _s = Just a 
+  lerp Nothing  (Just b) _s = Just b
+  lerp (Just a) (Just b) s = Just (lerp a b s)
+
+------------------------------------------------------------------------------
+
+-- | 'Average' a set of values. weighting can be achived using multiple entries.
+
+class Average a where
+  -- | average is not defined for empty list
+  average :: [a] -> a 
+
+instance Average R where
+  average xs = sum xs / fromIntegral (length xs)
+
+------------------------------------------------------------------------------
+-- | Channels with alpha component, the channel @is@ pre-scaled.
+
+data Alpha c = Alpha c !UI deriving Show
+
+-- | 'alpha' builds something that has an alpha channel, and is completely opaque.
+alpha :: c -> Alpha c
+alpha c = Alpha c 1.0
+
+-- | 'transparent' builds something that has an alpha channel, and is completely transparent.
+transparent :: c -> Alpha c
+transparent c = Alpha c 0.0
+
+-- | 'withAlpha' builds somethings that has a specific alpha value.
+withAlpha :: (Scale c) => UI -> c -> Alpha c
+withAlpha a c = Alpha (scale a c) a
+
+-- | 'unAlpha' removes the alpha component, and returns the channel inside.
+unAlpha :: (Scale c) => Alpha c -> c
+unAlpha (Alpha c _a) = c -- the channel is prescaled, hence we ignore the alpha value here.
+
+instance (Scale c,Lerp c) => Over (Alpha c) where
+   -- An associative algorithm for handling the alpha channel
+  over (Alpha c a) (Alpha c' a') 
+	| a <= nearZero = Alpha c' a_new
+	| otherwise     = Alpha (lerp c' (scale (1/a) c) a) a_new
+     where
+	-- can a_new be 0? only if a == 0 and a' == 0
+	a_new     = a + a' * (1 - a)
+
+------------------------------------------------------------------------------
+
+-- | A Z buffer style Z value for a point, where lower numbers are nearer the viewer.
+-- Assumes no transparency.
+
+data Z c = Z c R deriving Show
+
+instance Over (Z c) where
+  over (Z c1 z1) (Z c2 z2) 
+	| z1 <= z2  = Z c1 z1
+	| otherwise = Z c2 z2
diff --git a/Graphics/Chalkboard/Utils.hs b/Graphics/Chalkboard/Utils.hs
new file mode 100644
--- /dev/null
+++ b/Graphics/Chalkboard/Utils.hs
@@ -0,0 +1,145 @@
+-- |
+-- Module: Graphics.Chalkboard.Utils
+-- Copyright: (c) 2009 Andy Gill
+-- License: BSD3
+--
+-- Maintainer: Andy Gill <andygill@ku.edu>
+-- Stability: unstable
+-- Portability: ghc
+--
+-- This module contains some general utilties.
+--
+
+module Graphics.Chalkboard.Utils 
+	( -- * Utilties for @R@.
+	  innerSteps, outerSteps, fracPart
+	, fromPolar
+	, toPolar
+	, angleOfLine
+	  -- * Pointwise operators.
+	, interpBool 
+	, sampleUI
+	, withMask
+	, withDefault
+	, choose
+	  -- * Point Utilties.
+	, insideRegion
+	, insideCircle
+	, distance
+	, intervalOnLine
+	, circleOfDots
+	) where
+
+import Graphics.Chalkboard.Types
+
+------------------------------------------------------------------------------
+
+
+-- | innerSteps takes n even steps from 0 .. 1, by not actually touching 0 or 1.
+-- The first and last step are 1/2 the size of the others, so that repeated innerSteps
+-- can be tiled neatly.
+innerSteps :: Int -> [R]
+innerSteps n = map (/ fromIntegral (n * 2)) (map fromIntegral (take n [1::Int,3..]))
+
+-- | outerSteps takes n even steps from 0 .. 1, starting with 0, and ending with 1,
+--  returning n+1 elements.
+
+outerSteps :: Int -> [R]
+outerSteps n = map (/ fromIntegral n) (map fromIntegral (take (n + 1) [(0::Int)..]))
+
+-- | Extract the fractional part of an @R@.
+fracPart :: R -> R
+fracPart x = x - fromIntegral ((floor x) :: Integer)
+
+------------------------------------------------------------------------------
+
+-- Pointwise operators
+
+-- | Covert a Bool (mask point) into a unit interval.
+interpBool :: Bool -> UI
+interpBool True  = 1.0
+interpBool False = 0.0
+
+-- | sample a UI, giving a point of a mask.
+sampleUI :: UI -> Bool
+sampleUI n = n >= 0.5
+
+-- | Use a mask to create a Just value, or Nothing.
+withMask :: a -> (Bool -> Maybe a)
+withMask a True  = Just a
+withMask _ False = Nothing
+
+-- | With a default if you do not have a Just.
+withDefault :: a -> (Maybe a -> a)
+withDefault a Nothing  = a
+withDefault _ (Just b) = b
+
+-- | 'choose' between two values.
+choose :: a -> a -> (Bool -> a)
+choose t  _f True  = t
+choose _t f  False = f
+
+-------------------------------------
+
+-- Point operations
+
+-- | is a @Point@ inside a region?
+
+insideRegion :: (Point,Point) -> Point -> Bool
+insideRegion ((x1,y1),(x2,y2)) (x,y) = x1 <= x && x <= x2
+	  		           && y1 <= y && y <= y2 
+
+-- | is a @Point@ inside a circle, where the first two arguments are the center of the circle,
+-- and the radius.
+
+
+insideCircle :: Point -> R -> Point -> Bool
+insideCircle (x1,y1) r (x,y) = distance (x1,y1) (x,y) <= r
+
+
+-- | What is the 'distance' between two points in R2?
+-- This is optimised for the normal form @distance p1 p2 <= v@, which avoids using @sqrt@.
+
+distance :: Point -> Point -> R
+distance (x,y) (x',y') = sqrt (xd * xd + yd * yd)
+  where
+	xd = x - x'
+	yd = y - y'
+
+{-# INLINE distance #-}
+-- The obvious sqrt (x * x) ==> x does not fire.	
+{-# RULES "distance <= w" forall t u w . distance t u <= w = distanceLe t u w #-}
+{-# INLINE distanceLe #-}
+distanceLe :: Point -> Point -> R -> Bool
+distanceLe (x,y) (x',y') w = (xd * xd + yd * yd) <= w * w
+  where
+	xd = x - x'
+	yd = y - y'
+
+
+-- | 'intervalOnLine' find the place on a line (between 0 and 1) that is closest to the given point.
+intervalOnLine :: (Point,Point) -> Point -> R 
+intervalOnLine  ((x1,y1),(x2,y2)) (x0,y0) =
+	((x0-x1)*(x2-x1)+(y0-y1)*(y2-y1))/(xd * xd + yd * yd)		
+  where
+		xd = x2-x1
+		yd = y2-y1
+
+fromPolar :: (R,Radian) -> Point 
+fromPolar (p, phi) = (p * cos phi, p * sin phi) 
+
+toPolar :: Point -> (R,Radian)
+toPolar (x, y) = (x * x + y * y, atan2 x y)
+
+angleOfLine :: (Point,Point) -> Radian
+angleOfLine ((x1,y1),(x2,y2)) = atan2 (x2 - x1) (y2 - y1)
+
+
+-- | circleOfDots generates a set of points between (-1..1,-1..1), inside a circle.
+circleOfDots :: Int -> [Point]
+circleOfDots 0 = error "circleOfDots 0"
+circleOfDots n = [ (x,y)
+		 | x <- map (\ t -> t * 2 - 1) $ outerSteps n
+		 , y <- map (\ t -> t * 2 - 1) $ outerSteps n
+		 , (x * x + y * y) <= 1.0 
+		 ]
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,25 @@
+Copyright (c) 2009 Andy Gill
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. The names of the authors may not be used to endorse or promote products
+   derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/chalkboard.cabal b/chalkboard.cabal
new file mode 100644
--- /dev/null
+++ b/chalkboard.cabal
@@ -0,0 +1,47 @@
+Name:                chalkboard
+Version:             0.1
+Synopsis:            Combinators for building and processing 2D images. 
+Description:	     Chalkboard is a Haskell hosted Domain Specific Language (DSL) for image generation and processing.
+		The basic structure is a chalk board, a two-dimensional canvas of values, typically colors. 
+		Chalkboard provides the usual image processing functions (masking, overlaying, function mapping,
+		cropping, warping, rotating) as well as a few more unusual ones. 
+		Images can be imported into Chalkboard, as first-class color chalk boards. 
+		Chalkboard also provides combinators for drawing shapes on directly on boards.
+		The system is based loosely on PAN, but the principal image type, a Board, is abstract. 
+
+Category:            Graphics
+License:             BSD3
+License-file:        LICENSE
+Author:              Andy Gill
+Maintainer:          Andy Gill <andygill@ku.edu>
+Copyright:           (c) 2009 Andy Gill
+Homepage:            http://ittc.ku.edu/~andygill/chalkboard.php
+Stability:	     alpha
+build-type: 	     Simple
+Cabal-Version:       >= 1.6
+extra-source-files: test/liam.ppm, test/Makefile
+	
+Library
+  Build-Depends:        base, array
+  Exposed-modules:
+       Graphics.Chalkboard,
+       Graphics.Chalkboard.Array,
+       Graphics.Chalkboard.Ascii,
+       Graphics.Chalkboard.Board,
+       Graphics.Chalkboard.Color,
+       Graphics.Chalkboard.PPM,
+       Graphics.Chalkboard.Shapes,
+       Graphics.Chalkboard.Utils,
+       Graphics.Chalkboard.Types
+
+
+  Ghc-Options:  -Wall
+
+Executable chalkboard-test
+  Build-Depends:        base, array
+  Ghc-Options:    -O2
+  Main-Is:        Test.hs
+  Hs-Source-Dirs: ., test
+  buildable: True
+
+
diff --git a/test/Makefile b/test/Makefile
new file mode 100644
--- /dev/null
+++ b/test/Makefile
@@ -0,0 +1,31 @@
+cbtest=../dist/build/chalkboard-test/chalkboard-test
+
+test:: chess.png chessfilm.png liam2.png sinwaves.png pattern.png arrows.png blank.png
+
+
+# I look at these using % open *.png on osx.
+
+%.png: %.ppm
+	pnmtopng < $< > $@
+
+chess.ppm:
+	$(cbtest) chess
+chessfilm.ppm:
+	$(cbtest) chessfilm
+liam2.ppm:
+	$(cbtest) liam2
+sinwaves.ppm:
+	$(cbtest) sinwaves 50
+pattern.ppm:
+	$(cbtest) pattern
+# takes a long time (for now!)
+arrows.ppm:
+	$(cbtest) arrows 500
+blank.ppm:
+	$(cbtest) blank	
+
+# not *.ppm because we have the initial liam.ppm file.
+clean::
+	rm -f chess.png chessfilm.png liam2.png sinwaves.png pattern.png arrows.png blank.png
+	rm -f chess.ppm chessfilm.ppm liam2.ppm sinwaves.ppm pattern.ppm arrows.ppm blank.ppm
+
diff --git a/test/Test.hs b/test/Test.hs
new file mode 100644
--- /dev/null
+++ b/test/Test.hs
@@ -0,0 +1,99 @@
+import Graphics.Chalkboard
+
+import Control.Applicative
+
+import System.Environment
+
+main = do
+	args <- getArgs
+	(brd,(x,y)) <- readPPM "liam.ppm"
+	let img = mainWithArgs args brd
+	let file = case args of 
+		     [] ->     "blank"
+		     (nm:_) -> nm
+	writePPM (file ++ ".ppm") (200,200) $ move (100,100) $ img
+
+cutandpaste :: (Over a) => (Point,Point) -> Board a -> Board a -> Board a
+cutandpaste (p1,p2) b1 b2 = pure choose
+					<*> b1
+					<*> b2
+					<*> fmap (insideRegion (p1,p2)) coord
+
+--border :: ((x1,y1),(x2,y2)) b1 = pure (\ 
+
+
+foldOntoFilm :: (Over a) => (Point,Point) -> Board a -> [Board a] -> Board a
+foldOntoFilm s@((x1,y1),(x2,y2)) back xs = foldr (\ b bk -> cutandpaste s b (move (x2-x1,0) bk)) back xs
+
+
+mainWithArgs :: [String] -> Board (Maybe RGB) -> Board RGB
+mainWithArgs ["chess"] bk = fmap (\ x -> if x then green else white) $ rotate 0.05 $ scale 50 $ checker 
+mainWithArgs ["chessfilm"] bk = 
+	id
+	$ move (-70,0)
+	$ scale 5
+	$ foldOntoFilm 
+		((-5,-5),(5,5)) 
+		(pure white)
+		[ fmap (\ x -> if x then green else white) $ rotate n $ checker  
+		| n <- take 10 [0.0,0.02..]
+		]
+mainWithArgs ["liam2"] bk = id
+       			$ scale 2
+       			$ move (-50,-50)
+			$ fmap (withDefault white) bk
+mainWithArgs ["pattern"] bk = fmap unAlpha (foldr over p2 
+			    [ rotate (fromIntegral n / 5) p1
+			    | n <- [0..5]
+			    ])
+  where
+    p1, p2 :: Board (Alpha RGB)
+    p2 = pure (alpha white)
+    p1 = id
+	$ fmap (withAlpha 0.4)
+	$ scale 50
+	$ pure (\ (x,y) -> lerp red green ((1 + ((fracPart x - fracPart y) :: R)) / 3)) <*> coord
+mainWithArgs ["sinwaves",n] bk = id
+		$ move (-100,0) 
+	    	$ fmap unAlpha 
+		$ stack $
+		[ fmap (choose (withAlpha 0.8 col) 
+			       (transparent white))
+			$ functionline (\ x -> (x * 400,t + 80 * x * sin (x * t))) 3 count
+		| (col,t) <- zip [red,green,blue] [16,18,20]
+	 	] ++ 
+	    	[ fmap (choose (withAlpha 0.8 col) 
+			       (transparent white))
+	 		$ functionline (\ x -> (400 - x * 400,t - 80 * x * sin (x * t))) 3 count
+		| (col,t) <- zip [cyan,purple,yellow] [15,17,20]
+		] ++ 
+		[ pure (alpha white) ]
+	where count = read n
+mainWithArgs ["arrows",n] nk =
+		  fmap (withDefault white)
+		$ stack
+		([ stack
+		    [fmap (choose (Just red) Nothing)
+		  	  $ stack
+		 	  [ straightline (p1,p2) 1
+			  , arrowhead p1 (angleOfLine (p2,p1)) 10
+			  , arrowhead p2 (angleOfLine (p1,p2)) 10
+		    	  ]
+		    ]
+		| (p1,p2) <- [ ((10,10),(50,50))
+			     , ((-20,20),(53,80))
+			     , ((43,-85),(-25,-20))
+			     ]
+		] ++
+		[ fmap (choose (Just green) Nothing)
+		  	  $ stack
+		 	  [ functionline f 1 count
+			  , arrowhead (f 0) (angleOfLine (f nearZero,f 0)) 10
+			  , arrowhead (f 1) (angleOfLine (f (1 - nearZero),f 1)) 10
+		    	  ]
+		| f <- [ \ x -> (x * x * 50 + 20,x * 50)
+		       , \ x -> (80 * (0.1 + x) * sin (x * pi * 20),80 * (0.1 + x) * cos (x * pi * 20))
+		       ]
+ 		])
+	where count = read n
+mainWithArgs _         bk = pure white
diff --git a/test/liam.ppm b/test/liam.ppm
new file mode 100644
--- /dev/null
+++ b/test/liam.ppm
@@ -0,0 +1,1287 @@
+P3
+89 107
+255
+96 154 200 97 153 200 97 154 199 98 154 199 98 154 199 97 154 200 97 154 199 98 153 200 
+100 153 200 97 155 199 98 154 200 98 154 200 98 154 200 99 154 199 99 154 199 100 155 201 
+99 155 200 99 154 198 98 152 197 76 111 137 113 155 187 100 154 199 101 154 199 100 155 199 
+101 155 198 103 154 200 103 155 197 103 155 197 103 155 198 103 155 199 103 156 200 103 155 201 
+102 155 199 103 155 200 102 155 198 102 155 199 102 156 198 103 156 199 102 156 200 103 156 199 
+102 156 198 102 156 200 102 156 198 102 156 199 104 155 200 104 156 199 104 156 199 104 156 198 
+104 157 199 103 156 199 103 156 200 105 156 200 106 156 198 105 157 199 105 157 198 104 156 200 
+104 156 201 103 156 199 101 156 202 102 156 201 102 157 199 101 157 200 102 156 201 101 156 200 
+101 156 201 102 157 201 103 156 201 102 156 201 102 156 200 102 156 200 101 156 201 102 157 202 
+102 156 201 103 156 202 103 156 201 103 157 202 103 157 202 101 157 201 102 157 200 103 156 201 
+102 156 201 102 156 201 102 156 201 103 156 202 102 156 201 104 156 202 103 157 201 104 156 202 
+103 157 200 
+98 155 200 99 155 199 98 154 200 100 154 200 100 155 199 98 155 200 99 154 199 100 155 199 
+99 155 201 99 155 200 100 155 200 99 154 199 100 155 200 100 155 200 101 155 201 101 156 200 
+101 154 201 103 155 199 100 154 199 73 109 136 116 155 186 101 155 199 102 155 198 101 156 198 
+102 155 199 102 155 199 103 155 197 103 156 199 103 156 200 104 156 198 103 156 198 103 156 199 
+103 157 198 104 156 199 104 156 199 103 157 199 102 157 198 103 156 199 103 156 199 103 156 200 
+103 156 199 103 157 199 103 157 198 104 156 197 106 157 198 106 157 198 105 157 198 106 157 198 
+106 157 199 105 157 199 105 157 198 105 157 200 106 157 199 105 157 199 105 157 199 105 157 200 
+105 157 201 104 156 200 103 157 200 104 157 201 103 158 200 102 158 200 103 157 202 102 157 202 
+103 158 201 104 158 200 102 157 201 104 157 202 103 157 201 103 157 200 103 157 201 103 157 201 
+103 157 200 103 157 203 104 157 202 104 157 202 104 157 203 104 157 202 103 157 201 102 158 202 
+103 157 201 103 157 202 103 157 202 105 157 203 104 157 203 104 157 201 104 157 201 104 157 201 
+103 158 199 
+99 155 201 101 155 200 100 155 200 99 156 201 100 155 200 100 155 201 101 155 202 101 155 201 
+102 156 201 99 157 201 99 156 200 101 155 201 102 156 200 101 156 201 102 155 200 102 156 201 
+102 156 201 102 156 199 102 155 198 71 110 137 114 153 179 103 157 199 103 156 200 103 157 200 
+103 156 198 103 157 199 105 157 199 104 157 199 103 157 201 104 157 200 103 157 200 103 157 199 
+104 157 198 104 156 199 105 156 199 105 157 199 104 157 199 105 158 198 104 157 200 105 157 201 
+104 158 198 106 157 199 106 158 199 107 158 198 110 157 197 109 157 197 107 158 197 108 157 198 
+109 157 197 109 158 199 108 157 198 106 158 199 104 158 198 105 159 199 106 158 200 105 158 200 
+105 158 200 105 158 199 104 158 201 105 158 201 105 158 202 104 158 200 104 159 199 103 158 201 
+104 158 200 105 159 201 103 157 202 105 157 202 105 158 202 105 157 203 105 158 202 104 157 203 
+104 158 202 105 158 202 105 158 203 105 158 203 105 159 201 105 158 202 105 159 202 104 157 201 
+105 158 200 105 158 201 104 158 201 105 158 202 105 158 200 106 159 201 105 158 202 106 159 200 
+105 159 200 
+100 156 200 101 156 201 102 156 200 102 156 200 102 156 201 101 156 200 101 157 201 100 156 202 
+102 156 201 102 156 202 102 156 201 103 157 200 102 156 201 102 157 202 102 157 200 103 157 200 
+102 157 199 102 157 202 104 156 200 72 112 141 116 152 177 104 157 199 104 158 200 103 157 200 
+104 158 199 104 158 199 104 158 199 105 158 201 104 157 200 104 158 200 104 158 199 106 157 198 
+108 158 198 109 158 196 110 158 196 110 157 198 108 158 198 108 158 197 108 159 198 110 158 198 
+115 160 193 118 159 193 113 159 195 111 157 196 111 158 196 111 158 195 111 158 194 110 158 195 
+110 159 198 109 158 199 110 158 197 108 159 197 107 158 199 107 159 199 107 158 200 106 159 200 
+106 159 201 107 158 201 107 158 202 106 158 201 106 159 203 106 159 201 106 159 200 106 159 201 
+105 159 201 105 159 200 105 159 201 106 159 202 105 159 201 105 159 201 105 159 200 105 159 201 
+106 159 201 107 159 202 106 160 201 108 159 202 106 159 202 105 159 200 106 159 201 106 160 200 
+107 158 201 106 159 200 106 159 200 106 159 202 106 159 201 107 158 202 106 159 202 107 160 201 
+106 159 200 
+103 157 202 103 157 200 103 157 201 101 157 200 103 157 201 101 157 201 103 157 200 102 157 202 
+103 157 201 104 158 200 104 157 200 104 157 200 102 157 202 105 157 201 104 158 200 104 158 199 
+104 158 200 103 158 200 104 157 199 72 113 145 117 152 172 106 158 200 106 158 202 103 159 199 
+105 160 200 105 159 198 106 159 199 105 158 201 108 158 200 109 159 197 113 159 196 119 159 194 
+124 160 193 123 159 192 124 159 193 122 160 193 117 160 194 119 160 193 121 159 194 120 159 194 
+119 159 194 116 159 194 114 160 194 112 160 195 110 160 197 111 159 197 111 159 198 111 159 198 
+111 159 197 111 159 197 110 160 198 108 159 200 108 160 199 107 160 200 109 159 202 108 159 201 
+108 159 201 106 159 201 107 160 200 108 159 201 106 161 202 106 160 201 107 159 202 106 160 201 
+105 160 201 107 160 202 107 159 201 107 160 200 106 159 202 107 159 202 107 159 201 107 160 200 
+107 160 201 110 160 200 109 160 201 110 160 201 108 160 201 108 159 202 108 159 202 108 160 202 
+109 160 201 108 160 200 108 161 199 109 161 199 108 160 200 108 160 199 108 160 201 107 159 201 
+107 160 200 
+103 158 201 103 158 200 103 157 202 103 158 201 102 159 200 104 158 200 103 158 200 103 157 201 
+105 158 202 106 158 201 104 158 200 104 158 201 104 158 201 105 158 202 106 158 203 105 158 201 
+105 158 200 105 159 201 105 158 201 76 117 151 119 150 171 107 160 198 106 158 202 105 160 200 
+105 160 200 106 159 199 107 159 200 110 159 199 114 159 196 118 160 194 121 161 195 123 162 193 
+125 162 192 122 159 193 124 161 192 120 161 192 119 160 194 124 161 190 124 161 194 122 161 193 
+118 159 193 113 159 196 111 161 198 111 160 197 111 159 199 110 160 198 110 160 197 111 160 197 
+112 160 197 110 160 197 110 160 200 110 160 199 109 161 199 108 160 200 109 161 201 110 160 200 
+110 160 202 109 161 203 107 160 202 109 161 202 108 160 202 108 160 202 107 161 201 106 161 201 
+107 161 202 108 160 203 108 160 201 108 161 201 107 161 202 108 160 201 108 161 200 108 161 201 
+110 160 200 111 160 201 110 161 199 110 161 200 108 161 199 109 160 202 110 160 201 110 160 201 
+110 160 200 110 160 200 109 160 200 111 160 201 110 160 200 111 160 200 110 161 201 108 161 201 
+108 161 201 
+104 159 201 104 159 199 104 158 202 103 159 200 104 159 201 104 159 201 105 159 201 106 158 202 
+105 159 200 106 158 202 105 159 200 105 159 201 107 159 200 106 159 201 106 159 201 107 159 201 
+106 159 199 107 159 200 107 159 199 78 121 153 118 146 165 111 160 196 114 160 197 109 160 199 
+107 159 201 108 161 200 109 160 199 111 160 197 112 160 197 112 159 196 113 160 196 112 160 195 
+112 161 195 115 160 196 115 161 195 113 160 196 114 161 194 117 161 191 116 160 194 117 161 194 
+115 160 194 112 160 197 110 161 198 110 161 199 110 161 199 110 160 199 110 160 198 110 161 200 
+111 162 199 109 161 199 109 161 200 111 160 202 110 161 201 109 161 199 109 161 200 111 161 202 
+109 161 201 109 161 202 109 161 203 109 162 202 107 161 200 108 161 203 108 161 201 109 161 201 
+109 162 202 109 161 202 108 160 202 110 161 202 109 161 202 109 160 202 109 161 201 110 161 202 
+112 160 201 111 160 201 111 161 200 111 161 198 109 161 200 111 160 200 109 160 202 110 160 200 
+111 161 201 111 161 201 111 160 202 111 160 201 110 161 201 110 162 201 111 161 200 110 161 201 
+110 161 201 
+105 159 201 106 159 201 105 160 202 105 159 201 105 159 202 105 160 201 107 159 202 107 159 203 
+106 160 201 106 160 200 107 160 200 108 160 200 107 159 199 108 160 200 107 160 200 107 160 201 
+107 160 200 107 160 202 107 159 201 82 125 160 115 140 160 115 159 196 113 160 198 110 161 196 
+110 160 198 111 160 197 112 160 199 112 161 197 111 160 199 112 160 197 111 160 196 111 160 197 
+111 161 198 111 161 197 111 161 197 111 160 198 112 160 196 112 161 197 113 161 196 114 160 196 
+113 161 196 113 161 198 111 161 199 111 162 200 111 162 199 110 162 199 110 162 199 110 162 199 
+110 163 198 111 161 200 110 161 201 110 160 203 111 161 201 112 161 200 112 161 202 109 162 201 
+109 161 201 110 161 202 109 161 202 110 162 202 110 162 202 110 162 202 109 162 201 108 161 201 
+110 162 202 110 161 202 110 162 201 109 161 202 110 162 202 110 161 202 111 161 201 112 161 201 
+112 161 199 111 162 200 111 162 198 110 162 199 111 161 200 111 161 201 111 161 198 111 161 199 
+112 161 199 111 161 198 112 160 199 112 161 198 109 161 198 110 162 197 111 161 196 111 161 197 
+110 161 198 
+107 160 200 107 160 201 107 160 202 107 160 202 107 160 202 105 159 201 107 160 201 107 160 201 
+107 160 201 109 160 201 109 160 200 109 159 200 109 161 200 109 160 199 108 161 200 108 161 200 
+109 161 200 109 160 200 110 160 199 85 129 163 111 138 154 114 159 197 112 160 199 111 161 198 
+111 161 198 112 161 198 111 161 200 110 160 198 111 161 198 110 161 197 109 161 198 111 161 199 
+111 161 198 111 161 199 111 161 197 112 161 196 113 160 197 113 161 197 112 161 198 112 162 198 
+112 162 198 112 162 198 111 162 198 111 161 199 111 162 200 112 162 199 111 163 196 111 162 197 
+110 163 198 111 161 197 112 161 196 110 161 197 110 162 196 110 161 195 111 159 195 110 159 193 
+108 158 190 106 156 189 105 155 186 103 153 184 103 151 180 100 149 176 98 148 174 96 145 172 
+95 142 169 94 140 164 92 137 161 89 136 157 87 132 155 86 129 152 85 127 149 82 124 145 
+80 122 141 79 120 135 75 118 132 73 115 131 73 111 129 70 110 126 70 107 123 72 109 123 
+69 104 121 66 101 116 63 98 113 61 95 108 58 94 105 58 91 104 58 90 102 56 86 99 
+55 85 98 
+106 161 202 106 161 201 107 161 200 107 161 201 107 160 201 108 160 202 108 161 201 108 161 200 
+109 161 201 108 161 200 109 161 200 109 161 200 109 161 199 109 161 198 108 161 200 109 161 200 
+109 161 201 110 161 201 109 161 198 89 133 166 110 137 149 115 162 195 111 160 199 112 161 198 
+111 160 198 110 161 198 110 160 198 111 161 195 111 161 195 112 161 195 112 161 192 110 160 191 
+109 159 190 108 157 188 107 155 184 105 154 181 103 151 178 102 149 174 99 146 170 97 142 166 
+94 139 161 92 135 156 87 131 152 85 126 144 81 122 141 77 118 134 74 114 129 72 109 124 
+67 104 118 65 102 113 65 100 112 53 85 98 50 79 90 46 75 85 45 71 81 43 67 74 
+40 63 72 38 57 68 36 56 62 37 54 61 37 51 57 37 50 57 36 49 56 33 47 53 
+41 56 62 38 47 55 40 48 54 39 49 54 40 47 53 40 48 52 42 48 52 44 48 55 
+46 50 57 49 51 55 47 52 55 48 53 56 50 54 60 48 52 58 45 51 56 43 50 54 
+44 50 55 45 50 56 47 51 57 46 52 58 47 54 57 50 54 59 53 54 60 52 55 60 
+55 56 61 
+108 162 201 109 162 199 109 161 199 108 161 199 109 161 199 109 161 198 109 160 197 111 160 197 
+110 159 194 110 159 195 111 160 194 109 159 190 108 156 191 107 156 186 103 153 182 102 150 178 
+100 148 175 96 145 172 92 142 164 78 117 137 84 105 113 89 127 145 82 123 143 77 118 137 
+74 113 129 68 107 122 66 103 115 59 98 107 56 91 100 53 85 94 50 79 86 46 74 80 
+41 67 75 37 62 70 44 67 72 35 55 61 34 50 55 36 48 56 34 46 53 35 47 50 
+37 45 51 40 46 51 42 48 53 42 48 54 43 49 55 47 50 56 50 53 55 52 54 59 
+53 56 59 51 54 56 54 59 62 64 67 68 71 73 74 72 73 75 70 70 72 75 73 76 
+75 74 76 78 76 76 81 80 78 83 82 81 88 85 84 90 87 86 87 86 85 91 89 88 
+98 93 93 101 96 95 104 99 97 108 105 101 111 107 103 110 107 102 114 110 105 117 112 106 
+118 114 109 120 115 109 121 117 111 121 118 110 124 118 113 122 118 111 121 116 110 118 112 105 
+107 103 97 113 110 104 116 112 107 117 114 107 117 115 105 117 115 107 122 116 109 122 115 110 
+122 118 112 
+89 137 162 86 132 153 81 126 147 79 121 140 75 116 134 74 113 130 66 105 119 61 98 110 
+53 86 96 52 83 94 48 78 87 45 73 80 43 67 74 39 62 68 38 57 63 37 54 57 
+37 50 55 37 47 53 36 46 51 36 46 49 40 47 52 46 54 60 44 49 56 47 50 56 
+51 53 58 53 57 58 56 59 61 55 59 60 61 62 65 65 66 67 70 71 72 76 76 76 
+82 81 81 85 84 83 94 90 91 98 95 92 103 100 96 108 103 98 110 107 101 113 111 103 
+115 112 104 117 114 109 118 115 108 121 116 110 120 116 109 120 117 111 121 117 111 122 118 111 
+125 121 113 126 122 116 125 121 114 128 124 115 130 126 115 132 127 118 123 119 112 126 123 114 
+127 123 113 126 121 111 126 123 111 127 123 113 130 125 115 127 125 115 129 126 116 128 126 116 
+129 126 117 128 126 116 127 124 114 128 124 116 126 123 113 125 123 111 125 122 111 126 123 113 
+128 125 115 127 123 113 126 123 114 125 122 110 128 124 115 129 126 115 129 125 115 127 123 112 
+121 117 109 125 122 112 124 122 110 125 123 111 125 122 111 122 120 109 125 122 111 126 122 112 
+125 122 111 
+40 49 56 41 49 54 46 49 57 48 52 58 48 53 58 50 56 59 56 59 62 59 60 64 
+67 68 69 72 73 73 74 75 75 77 78 79 82 80 80 90 88 88 96 94 92 100 98 95 
+103 101 97 107 104 102 112 108 102 111 107 102 116 111 105 121 116 110 122 118 112 126 120 113 
+126 121 115 127 122 114 128 124 115 124 121 111 128 124 117 130 126 117 131 127 119 131 126 117 
+133 128 120 133 129 119 131 128 117 133 130 118 134 130 121 133 129 118 132 129 116 133 129 118 
+132 129 118 135 131 120 135 130 119 133 129 119 133 129 117 132 129 118 131 128 117 129 126 114 
+132 128 117 133 130 118 131 128 118 132 129 119 131 129 117 132 130 119 124 121 110 128 126 113 
+126 126 113 128 125 113 128 124 113 128 124 114 128 125 113 129 125 114 129 126 114 128 125 113 
+127 124 114 127 125 114 125 122 111 126 124 112 126 124 112 127 123 112 124 120 110 125 121 112 
+126 122 112 126 123 113 127 123 114 126 123 113 127 125 113 130 126 116 130 125 115 128 124 113 
+121 117 107 127 123 112 125 122 112 126 122 113 127 123 114 124 123 112 124 121 110 125 121 110 
+125 121 110 
+102 101 96 110 107 102 117 112 108 121 116 110 121 118 111 124 121 115 126 124 114 129 124 114 
+131 127 118 133 129 120 132 129 120 132 127 121 131 127 118 131 128 118 132 128 117 133 129 119 
+132 129 118 132 128 117 134 130 118 135 131 119 133 131 119 134 131 119 135 132 121 134 131 119 
+133 130 119 133 130 118 134 130 119 128 125 115 132 129 118 133 129 119 133 129 119 134 130 120 
+134 131 120 133 131 118 132 130 118 132 129 117 133 129 117 133 128 117 131 128 117 133 129 119 
+133 129 117 135 131 120 134 130 119 134 131 120 135 131 120 133 129 117 132 129 117 129 127 114 
+132 129 117 132 129 117 130 127 115 132 129 117 131 129 117 132 129 118 126 121 111 128 125 114 
+128 126 113 129 126 114 128 124 114 130 126 117 128 125 113 130 125 116 129 125 113 128 125 114 
+129 125 115 129 126 115 126 122 111 127 124 113 127 123 112 129 125 114 126 122 111 127 122 111 
+125 123 112 125 122 112 126 123 113 125 122 113 126 125 114 128 125 116 128 122 113 128 124 113 
+120 115 105 128 124 112 127 123 114 126 120 111 124 123 112 124 121 111 126 121 113 125 122 111 
+125 121 111 
+129 126 113 133 129 118 134 130 120 134 131 120 134 130 119 134 131 120 132 130 118 135 131 118 
+134 131 119 135 133 120 135 133 121 134 130 119 133 130 120 134 130 119 131 129 117 134 132 117 
+134 133 120 134 132 118 135 132 120 134 132 120 135 132 120 135 131 119 135 132 120 135 130 119 
+135 130 119 133 129 117 135 131 120 128 124 114 132 129 117 132 129 118 133 129 118 133 129 118 
+133 129 117 131 128 117 130 128 117 133 129 118 132 128 117 132 128 117 133 129 117 133 130 118 
+134 130 120 132 129 118 132 129 117 133 129 116 135 130 118 136 131 120 133 128 118 132 128 118 
+132 128 117 133 129 118 131 129 117 131 129 117 131 128 116 132 128 119 125 123 113 129 126 115 
+131 126 115 131 126 115 128 124 113 128 125 113 127 124 113 128 125 114 129 126 113 128 124 112 
+129 126 114 128 126 114 126 123 112 128 124 114 127 124 112 128 124 113 128 125 112 128 124 113 
+126 123 113 127 123 113 127 122 113 126 122 113 128 124 114 128 123 114 128 124 113 127 123 112 
+120 115 105 126 121 111 127 123 113 126 122 110 125 121 112 123 119 111 124 119 110 123 119 109 
+125 122 111 
+130 128 116 134 131 120 133 132 121 133 131 119 134 130 119 135 131 120 134 130 119 135 133 119 
+134 131 119 133 131 118 137 133 122 135 131 120 133 130 119 133 130 119 134 129 118 134 130 118 
+135 132 120 135 132 119 136 133 121 136 132 120 136 132 121 135 132 118 134 132 119 135 131 119 
+135 131 119 133 129 118 135 131 120 129 125 113 133 129 118 132 129 117 133 128 118 133 129 117 
+132 129 116 131 128 116 132 128 117 130 127 116 125 124 113 118 118 106 120 118 107 112 111 102 
+107 107 98 108 107 99 116 113 103 114 109 100 122 119 108 132 128 117 132 128 117 132 128 118 
+135 129 119 131 128 115 132 129 118 132 128 117 131 127 116 133 128 116 125 122 109 130 126 114 
+132 128 117 130 126 115 129 125 114 129 126 115 130 124 114 129 125 115 126 124 111 126 123 111 
+128 124 113 126 123 112 126 123 111 128 124 114 127 124 112 128 124 112 128 124 113 126 122 110 
+126 124 112 127 123 111 126 122 109 125 122 111 127 123 112 127 123 111 126 123 111 127 123 111 
+119 114 104 125 119 109 125 121 110 124 121 110 123 120 110 124 120 109 123 119 108 122 118 109 
+122 118 108 
+132 129 116 133 131 119 135 133 122 135 133 123 135 131 120 134 130 119 135 132 120 135 132 120 
+134 130 118 133 129 118 137 133 122 135 132 120 134 131 120 132 130 118 133 129 118 133 130 118 
+133 129 117 136 131 120 135 133 120 137 132 121 136 132 120 135 131 119 135 131 119 134 131 118 
+135 132 118 134 131 118 134 130 119 128 124 112 134 130 117 135 129 118 133 129 117 132 129 116 
+131 128 114 127 126 113 121 118 110 105 102 98 85 83 81 77 72 69 71 64 62 73 64 63 
+86 71 69 87 73 72 95 81 79 98 79 76 105 90 84 118 106 97 123 113 104 120 114 105 
+130 126 115 133 128 116 132 129 116 132 129 118 133 127 115 134 130 116 124 122 110 130 126 113 
+130 126 114 129 125 114 129 125 114 130 125 114 129 126 115 129 125 114 128 125 112 126 123 111 
+129 125 113 127 123 111 127 124 112 128 124 112 127 122 112 127 123 111 127 124 112 125 121 111 
+125 122 111 125 121 110 125 122 110 124 120 109 125 122 110 126 122 110 125 121 109 125 121 109 
+117 113 102 120 117 106 123 120 109 122 118 108 122 118 107 120 117 107 121 117 105 121 117 105 
+121 117 105 
+132 128 115 133 130 119 135 133 120 136 133 122 134 131 120 135 132 121 135 133 120 134 131 118 
+134 130 118 134 131 119 137 134 122 135 133 118 133 131 118 133 130 116 134 130 117 133 130 118 
+134 130 117 134 130 118 136 132 119 136 132 120 137 132 120 135 132 119 136 131 119 135 132 118 
+136 132 119 133 130 116 134 130 117 131 126 114 132 129 116 133 130 115 134 130 118 133 129 118 
+119 117 107 91 87 84 84 75 75 76 66 67 70 60 58 83 68 66 91 69 63 83 64 59 
+98 75 69 98 76 71 97 79 68 101 82 74 103 83 75 129 106 95 134 111 101 126 106 97 
+115 101 92 123 118 108 132 129 116 133 128 116 133 129 116 134 131 117 126 122 110 130 125 113 
+130 125 114 130 124 113 129 124 112 128 124 111 130 125 111 130 125 114 128 124 112 127 123 112 
+128 123 112 127 124 109 126 123 112 126 122 109 127 123 113 127 123 110 127 122 111 127 122 110 
+125 121 110 125 121 109 126 120 109 126 121 109 127 121 110 126 121 110 125 121 109 125 121 109 
+117 114 102 123 119 107 122 119 107 123 119 108 122 118 106 120 117 104 121 117 106 120 117 104 
+120 116 104 
+134 130 116 132 129 116 136 132 121 136 133 121 136 133 120 135 132 119 134 131 118 135 132 118 
+135 131 116 133 129 117 138 133 121 137 133 120 134 130 119 133 130 116 133 131 118 134 129 119 
+133 129 118 136 132 120 136 131 119 137 132 120 136 133 119 135 132 119 136 132 120 138 134 120 
+137 133 120 133 132 118 134 131 117 130 127 112 131 128 114 132 128 116 131 127 118 129 121 115 
+114 106 105 93 82 79 85 70 66 74 60 57 74 59 56 96 72 66 107 81 73 102 77 68 
+102 77 66 109 82 73 110 86 76 108 84 73 135 110 97 143 118 102 169 143 129 140 113 102 
+137 111 103 130 111 103 140 130 120 134 129 116 132 130 117 137 130 118 128 123 111 130 127 113 
+132 127 115 131 126 113 130 124 113 128 123 111 130 125 113 131 126 114 129 125 112 129 125 112 
+128 124 114 127 124 109 127 124 112 127 123 112 128 124 111 129 124 111 129 123 113 127 123 112 
+126 122 111 128 123 111 126 121 111 126 121 110 127 122 111 128 122 110 127 122 110 127 120 109 
+116 114 102 121 118 106 122 118 107 124 120 108 121 118 105 121 118 106 120 117 105 121 116 105 
+121 117 105 
+133 130 117 133 128 117 135 133 118 136 133 119 136 132 120 136 132 121 136 132 120 137 133 119 
+135 131 117 135 129 117 137 133 119 136 133 120 135 131 119 134 130 116 134 130 117 135 130 117 
+135 131 119 135 132 119 134 132 118 135 131 119 134 130 119 136 132 119 134 132 118 135 132 119 
+135 131 116 134 130 118 135 130 118 131 126 114 132 127 115 133 128 118 139 130 121 145 134 125 
+130 123 113 134 120 113 116 101 94 86 68 62 90 66 61 102 77 68 112 84 72 116 89 77 
+114 86 75 121 94 82 125 101 88 134 110 97 137 111 95 161 135 117 189 164 146 170 144 130 
+169 144 130 168 146 135 173 152 140 156 145 135 138 132 120 135 131 118 127 123 112 131 127 115 
+133 128 115 133 127 115 130 125 113 128 125 111 129 125 112 130 126 113 130 125 111 128 125 113 
+130 125 112 130 124 111 127 123 111 128 123 112 130 124 112 127 122 110 128 123 111 129 122 111 
+128 120 110 128 123 112 128 121 111 128 122 111 127 122 110 126 122 110 125 122 108 128 121 109 
+118 112 101 121 117 106 123 120 108 123 120 109 121 117 107 120 116 105 118 114 102 120 115 103 
+121 116 104 
+133 131 117 132 130 116 135 132 119 136 132 120 136 132 120 136 132 119 137 134 122 137 134 122 
+136 132 120 135 129 117 135 131 119 138 132 120 135 131 118 134 131 118 135 131 119 134 131 117 
+133 130 115 135 132 119 134 131 119 136 132 119 136 131 119 134 131 117 136 132 118 135 131 120 
+136 134 117 134 132 118 135 131 118 133 129 116 119 117 109 113 108 102 98 94 87 88 83 75 
+130 121 110 139 126 115 142 127 117 123 102 96 106 78 72 106 78 69 109 81 69 126 97 84 
+128 100 88 133 106 94 158 135 119 171 145 129 187 161 146 182 156 138 198 176 160 220 201 187 
+216 197 184 217 201 187 211 195 181 198 180 166 182 171 160 137 131 120 130 124 111 132 128 114 
+132 128 115 131 127 114 130 126 111 128 124 111 126 123 109 129 125 111 129 125 110 128 123 111 
+129 125 111 130 124 113 128 125 112 128 122 109 130 124 112 128 124 109 127 123 111 129 123 112 
+127 121 107 126 121 108 125 121 109 126 121 110 126 122 110 126 124 109 127 122 110 126 120 107 
+118 113 101 121 117 105 121 117 104 123 118 106 122 116 104 119 115 104 118 113 101 121 115 103 
+120 115 103 
+137 132 117 132 128 115 135 132 119 135 132 118 136 133 118 136 132 119 135 132 118 136 133 120 
+137 133 120 134 130 117 136 132 119 137 132 120 137 133 118 135 131 119 135 131 119 137 133 118 
+136 131 118 135 132 117 136 133 118 136 132 118 137 131 118 135 130 116 138 132 117 135 131 118 
+136 133 118 135 132 118 134 130 116 114 114 105 78 78 77 65 63 63 62 58 58 74 64 63 
+97 85 76 94 77 70 115 97 88 133 112 106 117 93 88 116 84 77 119 87 75 137 108 94 
+146 119 104 152 125 112 193 171 152 203 182 166 213 195 177 231 215 201 240 225 209 249 239 222 
+246 236 221 229 217 201 237 227 212 227 213 197 229 215 200 177 165 156 129 124 112 133 127 114 
+133 128 113 133 129 116 133 127 113 129 125 112 128 124 111 129 124 112 128 124 112 127 123 111 
+129 124 111 129 124 109 127 123 111 128 123 112 129 123 108 128 123 110 128 124 112 128 122 111 
+125 121 106 124 120 107 125 121 109 126 120 107 127 122 110 125 121 108 125 121 108 124 119 106 
+118 114 102 119 115 102 121 116 103 119 115 102 113 109 98 103 104 90 94 95 82 85 87 74 
+74 77 63 
+138 135 118 133 129 114 137 133 120 135 132 118 135 132 116 134 131 118 135 132 115 136 133 117 
+136 134 118 134 131 118 135 132 118 137 134 120 136 133 118 134 131 117 136 132 119 137 132 119 
+135 130 118 137 133 119 136 132 118 137 133 120 136 131 118 135 130 117 136 131 119 135 131 117 
+134 133 116 135 132 117 128 125 113 71 75 76 55 54 60 53 49 53 56 50 54 73 59 60 
+91 73 69 102 82 78 120 100 93 152 127 120 168 141 132 171 141 132 164 130 122 154 121 109 
+169 138 120 193 167 150 203 183 163 240 228 211 227 211 197 241 226 211 238 222 209 230 215 199 
+234 219 203 236 221 206 240 227 212 241 227 209 227 213 196 223 208 195 151 143 133 132 126 115 
+133 128 113 131 127 114 132 126 113 130 125 110 129 125 109 128 125 112 128 125 111 129 123 110 
+127 123 109 128 124 110 126 122 110 126 122 110 128 124 109 128 122 110 128 123 111 128 123 109 
+125 120 106 125 122 109 121 118 105 120 116 102 111 110 96 102 102 90 92 93 81 84 85 73 
+68 71 62 55 58 50 41 47 40 29 34 31 21 26 25 15 22 21 12 18 19 13 17 20 
+11 15 19 
+138 135 120 130 128 112 136 133 117 135 134 118 135 132 117 135 132 116 136 132 118 136 133 117 
+135 132 116 132 129 115 135 132 116 137 133 120 135 133 116 134 131 117 135 132 119 136 132 120 
+136 131 117 136 131 120 136 131 116 133 131 116 134 130 116 133 129 115 133 129 115 135 130 118 
+134 130 116 134 129 116 103 104 97 55 57 64 58 56 67 55 54 64 67 59 63 94 79 76 
+114 95 88 124 102 96 131 109 104 149 123 115 166 138 125 177 147 135 188 159 145 194 165 149 
+197 168 154 200 175 157 211 190 172 227 212 193 240 225 213 229 213 201 231 214 204 226 208 198 
+215 198 182 218 201 183 235 220 204 220 205 187 222 207 188 215 201 184 174 163 149 132 126 113 
+132 128 113 132 126 113 131 124 111 129 123 108 129 123 108 128 123 110 129 124 110 127 123 108 
+128 123 111 127 122 108 121 119 103 116 113 99 109 109 92 101 101 84 91 91 76 79 79 64 
+65 67 54 52 53 44 38 39 33 26 28 25 17 21 21 14 19 19 13 19 20 14 18 19 
+13 16 19 15 16 22 16 16 22 17 18 24 27 26 31 37 36 38 49 46 44 54 51 51 
+30 32 34 
+137 135 117 130 127 112 135 132 118 135 132 117 134 132 116 135 132 118 135 132 119 135 132 116 
+135 130 114 132 129 113 134 130 115 135 131 118 136 133 116 136 132 116 135 131 116 134 131 117 
+134 131 114 133 129 114 134 130 115 134 130 116 135 129 117 133 128 115 134 129 114 134 129 114 
+132 129 113 128 125 112 79 82 78 66 65 73 63 62 73 61 60 70 72 61 68 98 83 82 
+119 100 96 128 107 102 137 114 108 145 124 116 156 130 117 165 137 126 183 155 142 196 167 154 
+204 179 165 208 185 172 213 194 182 225 208 199 232 215 205 232 215 207 231 213 205 228 210 201 
+219 199 187 202 179 160 213 196 174 214 198 180 198 181 159 213 198 182 184 169 156 130 124 111 
+129 124 111 125 123 109 122 121 103 114 113 97 106 105 89 97 97 83 88 88 78 76 78 66 
+62 65 55 48 51 42 33 37 30 22 26 22 18 22 19 16 20 19 16 18 21 18 18 21 
+19 18 23 18 18 23 17 20 22 24 24 25 35 34 34 51 47 47 66 61 58 77 72 69 
+87 81 78 93 86 80 104 98 91 112 106 97 116 109 99 117 110 99 114 108 98 74 74 70 
+39 46 45 
+139 134 120 132 127 111 136 132 118 134 131 116 135 131 117 136 131 117 134 131 116 133 130 116 
+132 130 113 131 129 113 132 129 112 134 131 114 134 131 116 134 130 114 133 130 112 132 130 114 
+131 130 112 133 129 114 134 130 114 134 129 116 132 128 116 131 127 114 131 128 114 131 128 112 
+132 129 113 127 124 113 68 69 68 70 69 74 66 63 72 61 57 65 67 60 65 85 73 74 
+108 92 88 120 103 98 127 108 102 133 115 107 146 123 116 161 133 124 176 148 137 188 159 147 
+198 173 160 205 183 170 213 193 183 221 204 195 228 210 203 230 213 203 229 210 200 225 206 195 
+221 199 187 203 176 161 187 162 140 198 179 159 188 166 146 185 167 147 184 168 152 93 92 79 
+63 65 56 48 51 43 33 37 29 24 26 23 19 22 21 19 20 20 18 20 23 18 19 22 
+17 18 22 19 19 23 25 25 25 34 34 32 48 45 44 63 60 55 75 70 66 88 81 75 
+97 91 83 104 98 89 112 106 96 115 110 99 120 114 103 123 117 105 123 118 104 123 119 105 
+123 116 104 116 110 98 123 117 105 123 117 104 122 117 104 115 109 98 72 72 68 40 47 47 
+40 45 46 
+139 133 119 131 126 113 136 130 115 134 130 116 133 129 116 135 130 116 132 130 116 130 128 113 
+131 127 113 131 128 111 131 128 111 130 128 112 132 129 114 131 129 113 131 128 112 132 128 115 
+131 128 114 131 127 114 132 128 113 132 128 114 132 127 114 130 126 112 130 126 112 131 128 113 
+131 128 113 120 118 107 67 64 63 72 68 75 69 62 69 65 58 62 67 56 61 77 64 68 
+92 78 80 104 89 89 111 95 91 116 98 94 134 112 106 153 127 118 163 138 127 175 148 137 
+185 160 147 196 172 158 205 184 170 214 195 185 224 205 195 227 208 197 225 205 194 224 203 190 
+219 197 184 203 178 160 172 144 125 164 140 117 174 152 131 165 141 123 164 146 130 41 38 35 
+22 23 24 24 22 22 31 29 26 43 39 36 56 52 47 71 66 59 82 76 68 91 84 77 
+97 94 85 106 100 89 109 105 93 111 107 94 114 109 96 116 112 98 118 113 99 115 111 96 
+113 110 94 110 108 89 112 108 91 106 105 90 103 102 87 99 97 82 97 96 80 94 92 76 
+88 88 75 82 83 65 86 84 69 83 81 67 78 77 64 56 56 48 28 31 28 26 28 27 
+26 27 27 
+138 132 119 129 126 111 132 130 115 134 130 115 132 129 113 133 130 115 132 128 114 131 126 110 
+130 127 109 129 125 111 129 126 110 131 127 112 131 126 113 130 127 111 131 126 112 132 127 115 
+130 126 113 130 127 114 130 126 112 130 127 112 129 126 112 129 125 113 129 125 111 130 126 112 
+129 126 111 115 111 101 72 63 61 78 70 73 73 63 67 70 59 63 70 57 62 72 58 63 
+78 63 66 85 72 74 90 76 76 98 82 81 119 98 95 137 113 108 149 124 115 155 130 121 
+167 140 129 179 152 141 191 163 151 205 181 167 214 194 181 220 200 189 221 200 189 219 197 183 
+213 192 177 202 176 157 167 138 120 145 118 96 159 134 113 155 132 114 143 125 110 42 36 31 
+50 48 40 57 54 45 62 61 49 67 63 51 66 64 51 63 63 50 60 61 48 55 55 44 
+49 51 38 44 45 34 38 39 28 33 33 24 30 30 22 28 27 19 24 25 16 21 22 14 
+21 21 14 19 18 10 17 16 11 15 15 11 15 14 10 14 14 11 13 13 11 14 12 11 
+13 12 11 13 12 10 13 12 11 12 11 10 11 12 11 12 10 9 12 10 9 11 9 10 
+11 9 10 
+135 130 114 129 125 111 130 127 113 131 127 110 128 125 112 129 125 111 128 125 110 127 125 108 
+125 123 108 125 123 107 127 125 107 128 126 110 129 126 110 128 126 110 126 124 111 127 126 108 
+128 125 110 127 125 109 127 124 107 125 124 106 127 124 107 123 122 105 120 118 100 119 118 99 
+116 115 98 105 104 92 72 62 58 82 71 72 78 65 68 75 60 61 75 59 61 76 58 60 
+76 61 62 78 62 65 78 63 66 82 66 69 99 80 79 117 95 91 127 105 99 135 112 105 
+147 121 114 160 134 124 173 144 134 190 162 150 206 183 169 214 191 178 215 192 180 212 190 176 
+208 185 169 200 173 155 164 136 119 137 108 89 146 119 97 152 130 111 125 110 100 33 26 25 
+21 14 13 19 15 13 18 13 12 18 14 13 17 13 13 17 12 13 16 13 12 16 12 12 
+16 12 12 17 12 12 16 12 11 16 12 11 15 12 12 15 12 12 15 11 13 16 12 12 
+15 12 12 16 11 10 17 11 13 16 11 13 14 12 12 14 12 11 14 12 12 15 12 13 
+13 12 13 14 12 12 13 11 12 13 11 11 14 11 12 13 11 12 14 11 12 14 11 12 
+14 11 12 
+129 126 111 124 122 108 122 121 107 122 120 101 121 119 103 116 115 98 114 114 95 108 109 90 
+106 105 87 98 98 81 97 97 78 95 96 78 93 94 77 88 88 70 83 82 66 77 77 59 
+70 72 54 63 63 47 57 58 42 51 53 39 48 49 36 43 45 34 38 40 27 34 36 26 
+30 31 25 44 43 38 69 60 54 84 72 69 83 68 69 78 62 62 79 59 59 79 58 57 
+80 59 60 79 61 62 79 61 64 82 63 66 90 68 70 101 79 79 111 89 84 115 92 87 
+126 102 95 142 116 109 157 129 121 175 148 136 196 170 156 204 180 164 207 183 168 206 182 167 
+205 180 165 195 167 150 166 136 122 136 104 87 143 112 93 152 127 110 110 97 90 34 26 27 
+23 16 18 21 16 16 21 15 16 21 15 17 21 15 17 20 15 17 20 14 15 20 15 15 
+18 15 15 18 14 15 18 15 16 16 14 14 12 11 11 13 12 12 13 12 12 12 11 10 
+12 11 11 12 10 11 11 10 10 11 10 11 11 12 11 15 14 14 16 14 15 16 12 13 
+15 14 14 15 13 14 16 13 14 16 13 14 15 12 13 14 12 13 13 13 13 13 12 13 
+15 12 13 
+59 60 44 53 54 39 46 47 32 41 42 28 39 37 25 31 31 19 30 28 17 29 25 18 
+26 23 15 26 22 16 23 21 15 31 27 21 48 42 40 37 33 31 22 17 14 22 17 17 
+20 18 18 18 18 18 17 17 18 15 17 19 16 18 22 14 18 23 13 18 21 14 18 21 
+15 17 21 35 33 32 66 56 49 80 69 65 86 70 70 81 64 61 82 61 58 83 59 56 
+83 60 57 82 61 59 82 62 62 81 63 63 83 65 62 89 70 69 97 74 75 99 77 74 
+106 81 76 123 96 88 141 113 105 161 133 122 187 157 146 200 173 158 205 179 165 204 179 163 
+204 181 164 194 167 150 164 135 118 142 111 91 147 117 96 147 122 102 95 83 76 20 17 17 
+25 18 20 22 18 18 24 18 19 23 17 18 23 17 18 22 17 18 21 16 18 21 16 17 
+21 15 17 19 16 17 21 16 18 17 14 15 9 9 9 8 9 9 9 10 10 10 10 10 
+10 11 11 10 12 13 11 12 12 11 10 13 10 9 10 17 13 16 18 15 16 19 14 16 
+17 14 15 17 15 16 15 14 15 15 14 14 16 14 16 16 13 15 15 13 13 14 13 15 
+14 12 13 
+22 19 19 23 19 19 22 19 19 20 20 21 22 21 21 24 23 24 25 24 26 23 23 25 
+25 25 27 28 27 28 32 30 30 40 37 35 27 27 24 62 61 59 20 20 19 16 16 18 
+15 17 20 14 17 18 16 16 18 15 18 20 16 18 19 17 18 19 17 18 19 17 18 18 
+18 18 17 31 28 24 64 51 47 78 65 62 87 72 71 82 66 63 78 60 58 80 59 55 
+81 58 55 82 61 58 84 62 58 84 63 62 83 63 62 86 66 62 90 69 68 91 69 70 
+99 71 72 114 89 84 138 110 105 161 133 126 186 157 148 203 179 167 208 185 172 204 182 167 
+206 184 169 200 174 159 170 138 121 148 115 96 151 122 100 151 127 109 85 78 71 19 18 19 
+26 20 21 25 20 21 26 19 21 25 19 21 24 18 19 24 17 18 24 18 20 21 17 18 
+22 17 17 23 17 18 22 16 18 20 16 17 10 10 11 10 11 13 9 12 14 14 15 18 
+14 21 19 20 25 27 22 28 26 15 19 21 8 10 11 17 14 15 19 17 17 19 15 16 
+19 16 17 18 14 15 16 14 16 17 15 15 17 13 15 16 14 15 17 13 14 18 13 15 
+17 13 14 
+15 18 23 15 18 22 15 19 21 16 19 23 16 19 22 20 21 24 20 23 24 20 21 22 
+23 24 24 26 25 25 37 35 34 24 23 23 16 19 20 16 16 16 14 14 16 16 16 18 
+17 17 18 15 17 17 16 16 16 14 15 17 14 14 16 12 14 14 12 12 14 13 14 15 
+14 16 17 23 23 24 64 49 44 79 65 63 86 74 76 79 65 65 74 56 57 74 54 54 
+76 53 54 79 56 54 82 59 54 84 61 59 84 62 63 86 64 63 90 67 62 91 67 65 
+99 74 73 116 88 81 141 115 106 176 149 141 200 178 169 210 190 180 213 194 183 212 192 180 
+214 193 182 212 190 178 182 150 135 154 121 101 144 114 94 146 120 100 83 75 70 20 18 18 
+27 21 20 27 20 22 27 21 23 25 19 21 24 18 20 26 19 21 24 19 21 23 18 19 
+23 19 20 23 19 20 23 17 19 20 16 18 10 11 12 9 10 13 8 12 13 13 16 18 
+19 25 25 20 27 27 21 28 26 16 20 21 9 10 11 18 14 15 18 16 17 20 16 18 
+19 15 16 17 16 16 17 14 16 17 14 16 18 14 16 17 13 15 16 13 15 16 14 15 
+16 13 14 
+19 20 21 18 19 19 18 20 19 17 18 19 18 18 18 16 16 18 16 17 16 16 18 17 
+15 18 18 17 19 18 36 33 32 27 27 27 14 16 20 19 19 20 14 14 15 21 24 26 
+31 34 36 26 29 29 29 30 29 30 31 32 28 32 29 20 21 21 13 13 16 21 22 25 
+27 28 28 31 33 33 64 54 48 80 70 68 84 75 77 76 63 62 73 52 50 73 48 45 
+75 48 44 79 52 45 80 55 48 82 60 55 84 62 59 85 63 61 89 64 61 93 64 59 
+95 65 56 98 66 59 108 78 68 136 108 96 177 152 138 205 183 168 214 196 184 217 200 190 
+220 201 190 219 199 187 198 171 158 155 123 106 143 110 91 130 103 83 77 68 63 20 18 18 
+27 22 23 27 22 23 25 21 21 27 20 22 26 20 22 27 19 22 24 20 22 24 20 21 
+24 18 20 24 19 21 23 18 20 20 16 19 10 11 13 9 11 12 10 11 13 11 13 15 
+11 16 17 13 18 17 14 19 20 13 16 19 9 10 10 18 15 17 19 17 17 18 15 17 
+17 17 17 17 15 16 17 15 16 17 15 16 17 14 16 18 14 18 17 13 16 15 13 15 
+15 14 14 
+16 20 21 17 20 21 18 21 23 17 21 22 17 20 21 12 14 16 14 15 17 18 21 22 
+19 24 23 21 23 25 37 33 33 27 25 26 12 14 16 22 24 27 14 15 16 31 34 36 
+46 50 52 38 42 45 37 42 43 36 41 43 33 39 41 23 25 28 13 14 17 20 24 27 
+28 33 36 33 38 37 68 57 53 83 73 73 84 73 75 79 60 58 80 53 50 76 52 49 
+74 49 47 73 48 43 78 55 46 83 60 53 84 60 56 86 61 61 87 64 61 92 65 59 
+90 61 55 88 58 56 91 62 61 101 71 67 129 99 87 172 143 129 203 181 168 215 199 188 
+223 205 196 223 202 191 204 178 164 156 124 106 161 124 104 186 151 133 161 137 132 32 24 26 
+30 22 23 29 21 25 28 22 24 27 20 23 25 21 22 26 20 22 24 20 21 23 19 20 
+25 18 20 23 19 20 21 19 18 20 17 19 9 11 14 9 10 14 9 11 13 11 12 15 
+10 11 13 9 11 13 8 12 14 10 11 12 9 10 10 18 15 18 20 16 16 21 16 19 
+18 15 17 18 16 17 18 15 17 18 15 16 17 15 16 17 14 15 17 14 15 15 14 16 
+15 14 14 
+14 17 18 16 20 21 16 19 21 16 19 20 17 20 20 12 15 17 13 15 18 20 23 25 
+21 24 26 23 26 28 35 33 32 28 27 28 13 14 17 15 16 16 14 14 15 34 35 39 
+61 65 68 56 64 67 54 62 65 53 61 63 51 59 62 33 36 39 11 15 19 30 34 37 
+49 55 59 51 57 60 76 63 56 86 74 72 86 75 73 84 63 56 71 48 45 57 38 39 
+45 32 35 46 32 35 58 40 37 75 56 49 82 61 57 82 60 61 86 66 64 79 58 57 
+73 47 46 63 40 42 71 49 51 88 62 61 102 71 63 135 103 90 178 152 139 207 188 177 
+222 205 196 223 204 192 199 174 158 160 126 107 177 135 113 190 145 121 208 163 141 110 90 86 
+29 22 23 29 22 25 27 22 23 25 20 21 25 20 21 25 20 21 25 19 20 24 19 20 
+23 19 21 23 18 20 24 18 19 22 17 20 11 12 14 11 12 16 10 10 13 11 12 15 
+9 11 13 10 11 13 10 11 14 9 11 12 9 11 10 17 15 16 20 17 19 20 16 17 
+19 17 18 17 16 17 19 13 19 18 16 18 18 15 16 16 15 16 17 14 16 18 13 16 
+16 13 15 
+11 12 16 15 19 21 17 21 23 17 21 22 18 21 23 12 16 18 13 15 18 18 23 27 
+21 26 29 23 27 29 33 32 32 33 31 31 13 13 17 15 15 19 13 14 15 30 33 36 
+67 74 77 66 75 80 66 75 77 67 75 77 65 74 74 42 47 49 12 15 19 30 36 37 
+52 62 64 54 64 66 69 64 60 87 73 70 84 72 69 73 54 48 50 34 34 37 28 30 
+22 21 23 25 21 23 45 32 36 68 51 50 79 61 63 79 60 62 85 67 68 73 56 62 
+53 36 38 40 30 32 41 32 31 83 64 63 126 97 95 144 112 110 181 155 147 207 188 177 
+222 203 193 222 201 192 198 169 155 170 133 116 157 109 93 153 92 72 180 114 87 102 80 71 
+27 23 24 28 22 24 27 24 24 25 21 22 24 19 21 24 20 20 24 20 20 24 18 20 
+24 19 21 23 19 20 23 18 19 22 18 19 12 12 13 11 12 15 9 11 14 11 12 14 
+9 13 14 9 12 13 11 11 15 10 12 13 9 10 11 18 14 15 20 16 17 19 17 18 
+18 15 16 18 15 17 18 15 16 18 14 16 17 15 16 17 14 15 16 13 15 18 15 16 
+16 13 14 
+12 14 15 13 16 20 17 21 25 17 22 25 18 21 24 14 16 19 13 16 18 20 24 27 
+22 26 30 22 26 32 29 30 32 30 29 31 12 14 20 25 26 30 16 16 17 24 30 31 
+62 73 72 65 77 78 65 75 77 65 75 76 64 74 75 44 51 53 13 17 18 29 34 37 
+55 63 66 54 66 67 57 64 67 83 73 74 82 72 75 70 57 63 70 52 59 66 45 51 
+58 38 44 54 35 41 55 39 45 70 53 58 94 73 78 134 109 115 122 99 104 85 66 72 
+66 45 50 79 50 52 106 74 74 143 108 106 184 155 147 211 189 182 224 205 198 220 201 193 
+221 202 193 220 200 189 199 170 155 167 121 105 173 120 104 194 146 137 157 104 86 35 28 26 
+27 21 23 27 21 23 27 21 21 24 20 21 24 20 21 24 18 20 24 18 20 24 18 20 
+22 18 19 22 18 19 22 18 19 22 16 18 12 12 13 10 11 14 10 11 12 10 12 14 
+9 12 15 9 12 17 10 13 18 10 11 18 9 10 14 15 13 14 17 16 16 18 15 16 
+18 15 16 18 14 16 16 14 15 17 14 16 17 14 15 16 15 16 15 14 15 16 12 15 
+15 13 15 
+12 14 16 11 13 14 16 22 25 17 23 26 18 22 26 14 18 19 12 17 20 17 21 25 
+22 25 30 23 28 36 23 28 30 17 19 21 11 13 17 15 16 20 13 14 15 24 25 27 
+58 66 67 59 69 69 67 75 76 71 80 79 69 76 79 45 51 55 13 17 20 25 34 34 
+54 64 65 54 64 66 51 60 64 71 68 69 88 76 80 76 62 71 67 54 62 64 48 55 
+61 41 48 57 39 51 65 50 60 82 62 65 164 133 130 217 191 185 217 195 192 161 138 137 
+122 98 103 111 80 86 136 103 103 171 138 134 204 177 169 224 206 197 231 214 206 226 209 199 
+221 204 193 216 196 184 209 182 170 155 102 92 164 99 82 203 157 139 130 100 95 20 18 20 
+31 21 24 31 22 25 30 21 23 30 21 23 31 20 23 33 20 22 33 21 22 33 21 22 
+36 23 24 40 25 25 42 26 24 46 28 26 23 16 18 10 11 14 9 10 12 11 13 14 
+9 12 14 9 13 20 9 13 16 11 12 17 9 10 13 16 14 15 16 15 15 17 16 16 
+17 14 15 18 14 16 17 14 15 16 13 14 17 14 15 15 14 15 15 14 14 15 12 14 
+15 12 15 
+12 16 19 11 14 15 16 17 23 20 23 28 41 42 46 19 24 24 15 17 20 45 46 50 
+55 59 64 60 65 66 55 59 62 22 24 27 11 13 17 12 13 18 12 13 16 20 22 26 
+41 48 51 35 44 45 55 61 62 71 79 77 60 70 67 30 38 38 16 17 20 22 26 30 
+38 47 46 33 40 43 27 34 37 51 48 49 88 79 81 78 69 74 70 60 69 64 53 63 
+63 53 63 68 56 64 75 58 65 90 64 69 167 129 120 223 194 185 234 211 204 191 168 158 
+159 134 127 167 137 131 195 168 156 210 187 177 223 204 195 235 218 210 235 218 210 230 212 202 
+222 204 193 212 191 179 220 193 182 182 133 126 172 110 104 211 168 155 106 84 80 72 50 46 
+82 54 54 81 55 50 81 55 51 79 52 47 86 57 50 87 57 51 86 56 49 88 54 48 
+89 56 52 90 59 51 88 57 49 91 58 49 51 31 31 10 11 13 7 11 11 11 13 13 
+9 11 13 10 12 16 10 13 18 9 13 16 8 10 12 16 13 14 17 16 17 18 15 16 
+17 15 14 17 14 15 19 14 15 18 14 15 16 14 15 16 13 14 16 13 14 15 13 14 
+15 12 12 
+15 19 22 15 19 21 15 16 18 18 23 25 34 38 39 17 23 24 14 18 19 29 35 36 
+33 39 39 33 40 39 28 33 34 16 17 20 10 12 15 13 17 19 14 15 15 19 22 26 
+32 35 40 17 20 22 18 20 23 20 24 26 22 22 24 26 23 24 29 22 23 32 25 27 
+36 30 30 40 31 33 44 33 33 58 43 44 89 77 81 81 70 77 77 64 73 76 62 71 
+76 60 67 78 59 64 79 56 59 94 62 64 126 83 75 181 138 123 213 180 164 228 201 187 
+166 137 130 130 97 88 154 123 111 191 163 149 218 198 188 233 215 205 235 217 208 230 213 203 
+226 204 195 215 194 183 223 198 187 232 200 189 226 193 183 199 169 160 74 50 45 77 53 45 
+96 63 57 96 62 52 95 63 52 96 60 52 95 56 47 96 58 46 98 62 52 96 59 49 
+98 61 50 96 62 51 91 55 46 93 56 47 53 33 32 10 11 15 9 10 14 12 13 15 
+14 15 18 13 15 19 13 14 19 12 15 18 8 11 14 15 13 14 16 14 15 17 15 16 
+17 15 14 17 14 15 18 14 15 18 14 15 17 14 15 17 14 15 15 13 14 15 13 14 
+15 12 13 
+18 18 21 23 19 23 24 20 22 27 22 23 30 24 26 35 27 28 40 29 30 43 31 31 
+49 36 34 52 38 34 48 34 33 26 23 24 12 13 16 46 34 33 35 25 24 19 21 24 
+60 49 48 72 51 48 73 51 45 80 53 47 77 50 45 82 53 47 81 52 43 81 53 46 
+81 51 48 79 50 45 81 52 44 81 54 48 93 79 82 89 74 79 86 66 70 85 63 68 
+85 65 66 80 60 59 86 58 55 91 55 47 105 66 57 122 76 66 117 64 54 169 126 108 
+137 108 99 104 72 69 118 83 74 152 116 105 191 160 148 213 188 175 223 202 190 225 204 194 
+225 204 195 218 196 184 228 205 191 228 200 186 234 204 193 145 122 116 78 52 48 88 61 54 
+94 64 55 98 64 54 98 62 52 94 59 50 98 62 50 98 62 49 97 62 48 98 60 49 
+98 61 49 98 62 48 99 61 48 90 58 50 49 31 32 10 11 15 9 10 14 13 14 14 
+13 16 19 12 16 21 12 14 20 11 14 20 9 10 12 16 13 14 19 15 16 17 15 16 
+17 14 16 17 14 15 17 14 15 18 14 15 17 14 15 16 13 16 16 13 14 16 14 15 
+16 12 13 
+75 50 44 78 51 47 78 49 43 76 45 41 77 50 42 77 51 42 77 48 39 79 48 40 
+80 52 43 78 52 43 67 42 37 43 35 34 13 14 17 46 31 28 47 31 26 19 20 23 
+55 47 44 58 40 35 56 40 31 60 41 34 52 34 27 52 31 26 50 33 28 51 32 29 
+49 30 28 49 31 27 52 33 30 52 32 27 90 73 73 96 75 75 95 68 67 95 66 65 
+92 67 64 82 61 60 78 56 58 78 51 55 85 54 58 95 60 61 145 112 110 189 162 157 
+128 102 103 94 66 69 111 76 70 126 86 76 157 117 105 187 152 136 207 179 164 213 191 178 
+221 199 190 208 185 173 202 170 145 231 203 189 199 169 158 106 77 67 99 68 59 99 67 58 
+94 66 59 97 65 57 94 59 51 95 60 49 96 62 54 99 62 49 99 63 51 97 62 52 
+98 62 51 101 66 55 95 60 50 71 44 39 20 16 17 10 11 14 10 10 13 11 12 15 
+10 13 17 10 15 23 11 17 25 10 14 23 9 10 13 15 14 15 18 15 16 19 16 17 
+17 15 15 18 13 16 17 14 16 16 15 16 16 13 14 17 13 15 15 13 14 17 13 14 
+14 12 13 
+60 38 32 59 36 30 56 34 27 54 32 28 54 33 28 50 33 27 50 31 25 53 31 27 
+52 31 26 54 32 28 58 35 30 47 35 35 13 14 16 55 39 36 57 37 32 20 20 20 
+64 53 49 73 42 38 71 41 36 79 52 46 78 46 40 86 50 42 90 58 51 88 52 45 
+94 58 48 91 56 46 91 55 46 96 61 52 98 74 68 100 78 72 102 73 65 103 72 65 
+99 72 65 87 62 60 80 58 63 78 55 61 93 64 69 137 103 101 200 172 163 214 194 184 
+173 151 151 90 65 69 105 71 63 123 87 76 133 92 81 157 120 104 185 150 137 204 176 165 
+215 193 181 170 147 135 135 100 79 155 123 105 111 81 71 100 68 60 102 70 60 100 70 59 
+95 68 63 97 66 59 93 64 57 97 62 54 99 63 51 102 64 52 99 62 51 96 62 54 
+98 65 57 98 63 54 70 43 38 28 20 21 15 14 15 9 11 14 9 10 14 12 12 15 
+10 12 15 11 13 16 15 16 17 14 14 17 11 10 15 14 13 14 17 15 17 16 16 17 
+19 15 16 19 15 17 17 15 18 17 14 17 16 14 15 16 14 13 17 13 14 15 13 14 
+14 12 13 
+83 46 37 87 49 39 91 59 50 87 52 44 89 53 44 93 62 51 94 57 45 94 57 46 
+95 62 52 93 58 48 94 62 52 53 42 38 14 14 18 71 47 43 81 51 44 22 22 24 
+74 58 54 97 64 55 97 62 52 98 63 52 101 68 58 97 61 49 100 64 52 103 69 57 
+99 62 49 102 66 53 105 69 56 99 64 48 99 67 58 101 77 73 104 75 66 109 75 67 
+106 76 66 97 67 62 92 62 60 86 51 53 96 58 56 112 70 63 112 71 62 117 83 74 
+124 96 90 94 66 64 99 68 60 116 80 69 127 87 77 145 109 97 173 140 127 197 167 155 
+206 185 172 127 103 94 107 73 63 104 71 61 101 68 60 102 71 62 102 73 65 99 71 63 
+101 73 65 101 72 63 98 65 57 96 64 53 97 64 54 97 61 47 99 63 52 94 61 53 
+91 58 50 67 43 38 27 20 21 22 18 19 16 14 15 10 11 15 9 10 12 10 12 16 
+9 12 14 11 13 14 13 14 14 14 15 15 9 11 13 14 13 14 17 15 17 18 14 15 
+18 14 16 18 14 15 16 14 16 16 14 16 15 13 15 15 14 14 15 14 15 16 13 14 
+14 13 13 
+98 63 52 100 65 53 97 62 49 100 67 56 97 61 51 99 62 49 105 68 56 100 63 51 
+97 64 52 100 67 55 95 63 54 55 45 41 13 14 17 71 50 44 87 57 51 23 22 22 
+81 66 62 99 64 52 103 66 52 104 70 57 100 65 52 102 64 52 103 68 56 101 65 52 
+101 63 52 100 66 53 101 65 51 101 66 51 101 68 57 102 77 72 103 76 67 103 74 65 
+99 71 61 81 53 48 77 47 48 81 45 51 82 39 49 80 38 45 87 45 54 86 52 60 
+86 58 63 80 56 61 85 57 55 108 74 65 125 89 80 151 116 106 173 139 129 191 161 150 
+196 174 163 167 151 145 165 148 146 158 141 143 113 86 83 103 70 63 104 70 61 100 66 58 
+100 69 63 100 67 58 104 68 57 99 66 56 97 61 53 98 66 57 97 64 53 93 60 52 
+62 40 38 26 21 21 22 19 20 21 18 19 15 14 15 9 11 15 9 11 13 11 12 15 
+10 11 14 11 12 13 13 13 14 13 13 14 10 11 12 15 14 13 17 15 16 18 15 16 
+16 14 13 17 14 15 16 16 16 15 13 16 15 14 17 16 13 14 14 13 13 15 13 13 
+16 12 13 
+99 62 51 97 63 51 102 72 61 96 65 52 98 63 51 102 72 62 101 66 50 103 67 53 
+99 66 55 101 67 56 100 65 54 61 48 44 13 13 16 68 47 39 89 56 45 23 21 20 
+75 60 56 99 68 58 98 66 53 98 64 51 101 68 55 98 63 49 97 61 47 101 67 53 
+99 60 47 97 60 46 102 66 55 99 58 45 98 59 48 102 73 66 104 78 73 107 77 69 
+104 75 67 92 66 63 94 69 65 100 74 70 107 78 75 108 79 74 105 77 73 98 75 75 
+92 71 72 94 69 73 96 71 69 114 81 75 130 94 87 147 113 105 164 134 123 182 155 145 
+189 166 153 156 130 112 156 134 119 212 205 200 210 202 205 113 91 86 103 72 63 101 71 61 
+97 66 61 99 68 59 95 62 52 99 63 53 96 64 56 90 61 53 86 58 51 56 40 40 
+25 21 22 22 19 20 20 18 19 20 18 19 15 15 16 9 11 13 11 11 15 12 12 15 
+12 11 14 12 12 14 12 12 15 12 12 14 9 10 13 13 12 13 18 15 15 18 15 16 
+17 15 15 16 14 15 15 14 14 17 15 17 15 13 16 16 13 15 15 13 14 15 12 13 
+16 12 13 
+98 63 49 95 64 50 96 63 48 98 66 50 96 64 51 95 62 50 100 64 50 97 62 51 
+95 62 50 101 68 54 99 62 49 62 46 41 14 15 18 63 45 40 88 54 46 23 21 20 
+63 49 46 98 61 50 96 62 50 100 68 58 99 60 48 99 64 51 99 67 55 98 61 50 
+97 61 49 95 61 51 97 61 48 101 66 54 100 69 57 101 67 57 100 72 67 107 80 73 
+111 83 72 105 77 71 99 75 71 97 73 70 95 71 67 92 69 66 91 68 67 91 71 70 
+97 73 75 102 75 74 111 84 78 121 92 81 128 95 86 136 104 95 149 120 111 180 155 141 
+180 159 144 119 90 73 153 130 115 209 202 196 234 233 230 182 174 177 99 72 63 101 69 59 
+100 71 63 99 66 58 99 67 55 95 66 56 94 62 53 93 61 55 55 36 35 26 22 22 
+24 21 22 23 19 20 22 19 18 22 18 19 16 15 16 10 11 13 11 11 15 12 11 16 
+11 11 14 11 11 13 12 12 14 11 11 14 10 11 13 13 13 13 16 14 15 18 14 17 
+17 14 15 16 15 15 17 15 16 15 14 16 15 14 15 15 13 14 14 13 14 14 14 14 
+14 13 13 
+97 61 45 98 59 47 101 68 54 98 61 46 96 59 48 98 65 54 101 66 53 96 62 54 
+96 64 52 96 62 50 97 61 52 67 50 44 16 15 16 62 41 36 89 57 50 23 22 21 
+62 49 47 92 60 49 97 66 56 94 58 47 94 56 43 93 59 47 96 59 49 95 61 51 
+97 61 49 96 64 53 95 59 48 94 54 44 92 61 52 92 70 71 78 66 74 83 69 72 
+109 86 76 115 87 77 111 85 76 103 78 73 97 71 73 96 69 73 98 74 76 115 88 88 
+123 97 93 116 89 82 122 94 84 127 98 86 130 97 87 131 98 87 150 118 107 196 170 152 
+160 135 120 134 104 88 143 117 102 183 172 164 220 219 215 229 227 227 169 162 162 104 86 84 
+96 72 68 99 70 65 96 66 58 97 66 59 93 66 60 54 36 34 25 22 22 23 21 23 
+23 21 23 22 19 20 22 20 20 23 19 21 17 15 17 11 12 16 11 12 15 12 13 17 
+10 14 14 11 12 16 11 12 16 10 12 17 11 11 15 14 12 13 17 15 16 16 16 16 
+16 15 16 15 15 16 16 14 15 16 15 15 15 13 14 15 13 15 14 13 15 15 13 14 
+13 12 13 
+94 58 48 99 64 52 97 59 44 100 62 47 98 62 49 93 56 44 97 62 48 98 62 49 
+92 58 45 92 61 48 94 58 46 71 52 46 17 15 16 54 36 34 94 61 53 27 22 21 
+63 51 47 96 63 51 97 62 51 101 67 57 98 64 55 100 65 54 100 65 53 103 67 53 
+100 64 53 100 66 54 102 67 61 91 71 78 70 67 77 61 60 71 55 52 63 47 45 55 
+64 60 65 100 82 74 122 96 84 127 98 87 127 95 85 126 97 87 128 98 90 142 114 102 
+147 120 107 128 101 88 126 100 86 128 99 85 129 97 85 134 101 88 175 145 128 199 174 158 
+127 103 91 140 111 98 133 110 99 169 158 149 210 209 205 224 224 221 227 226 224 219 215 217 
+150 138 141 101 75 67 100 70 60 95 67 60 56 40 38 28 24 25 25 22 23 25 22 23 
+24 23 23 23 20 22 23 19 23 22 19 21 17 15 18 12 12 17 10 13 16 10 15 18 
+11 14 19 11 12 19 11 12 19 10 13 17 10 11 15 13 13 13 17 15 16 18 16 17 
+16 14 15 16 14 15 16 15 16 15 14 14 17 13 15 17 13 14 14 13 14 15 12 13 
+14 13 13 
+96 61 51 96 60 48 103 66 55 100 65 51 100 64 50 102 64 50 100 63 49 101 65 52 
+102 66 50 101 64 52 98 66 55 72 51 45 19 18 17 53 34 32 94 58 49 28 23 21 
+56 44 42 96 61 48 100 64 53 98 64 54 94 61 49 100 64 52 99 65 52 105 67 55 
+102 66 54 95 70 68 76 73 86 63 65 80 63 59 65 62 54 58 56 49 55 48 44 49 
+51 51 61 51 46 48 86 70 62 124 98 87 145 114 98 150 117 101 150 117 103 146 113 97 
+140 108 94 133 102 88 130 99 85 127 96 82 128 97 83 164 137 123 212 188 173 137 116 104 
+118 96 86 135 112 103 115 98 91 161 153 145 206 205 201 183 185 178 197 198 191 215 216 210 
+225 224 223 176 168 172 93 70 65 56 39 39 29 27 29 26 25 25 25 23 24 24 23 23 
+24 22 23 23 20 21 23 19 21 21 20 21 17 17 19 11 12 16 12 14 17 10 15 17 
+9 13 18 9 13 18 11 13 18 11 13 17 11 11 16 13 13 14 17 16 17 16 15 17 
+18 14 16 18 14 16 15 15 15 16 15 16 14 14 14 16 14 15 15 13 14 14 13 14 
+14 13 15 
+95 61 49 98 65 54 98 60 49 102 62 48 104 67 55 101 64 53 99 64 48 106 69 54 
+104 68 54 102 65 54 100 64 52 81 60 52 21 19 17 53 35 33 98 67 57 30 24 22 
+56 46 44 101 68 57 100 63 51 103 66 55 101 64 52 98 64 53 99 65 54 99 66 58 
+87 75 82 71 78 100 64 72 93 69 66 72 69 60 64 60 57 62 56 52 60 51 47 53 
+57 54 61 57 51 56 62 50 49 85 65 62 112 86 75 134 105 92 145 114 98 146 113 96 
+141 108 92 135 101 85 126 95 81 129 100 88 172 143 129 206 183 167 173 150 137 101 82 74 
+133 111 103 136 117 111 109 97 92 166 161 155 210 210 207 135 134 132 124 126 117 173 174 169 
+193 195 190 224 223 223 129 126 128 35 34 35 30 28 30 27 26 28 26 25 25 25 23 24 
+24 21 24 23 21 22 22 21 23 20 20 21 17 17 18 11 13 16 10 14 16 10 14 18 
+9 13 17 10 12 18 10 14 18 11 13 17 10 11 16 13 13 15 16 15 16 17 16 18 
+16 15 17 17 15 17 17 15 16 15 15 15 19 17 18 25 22 22 20 16 19 16 14 15 
+15 14 15 
+97 65 53 94 62 52 100 64 51 102 65 51 102 68 53 102 67 53 99 65 53 103 68 55 
+102 65 53 103 67 56 101 67 57 81 55 48 23 20 20 48 34 30 89 60 53 33 26 25 
+54 43 41 99 62 52 102 66 55 100 64 54 98 60 49 99 62 50 93 65 64 73 76 93 
+66 84 106 65 76 97 68 69 80 67 64 65 63 61 66 56 58 68 63 59 66 58 51 57 
+59 56 60 61 57 59 60 48 48 85 64 61 99 74 70 109 83 73 123 95 83 130 100 87 
+129 97 85 122 93 81 131 100 92 169 137 126 189 161 145 187 164 147 99 79 72 128 110 106 
+123 106 101 119 108 103 110 100 98 185 184 179 201 202 199 130 129 126 133 132 131 160 160 158 
+209 209 206 233 233 231 212 211 215 70 70 76 31 30 33 26 26 27 25 25 26 25 23 25 
+24 22 23 23 21 22 22 20 21 21 21 21 18 17 18 12 13 16 12 14 17 11 14 17 
+10 13 17 10 14 17 11 15 17 11 13 17 10 12 15 13 13 14 17 16 17 16 16 16 
+16 15 16 16 15 16 15 15 15 20 20 20 38 34 33 50 43 44 54 47 47 36 31 33 
+15 14 14 
+99 66 54 103 67 55 103 65 49 99 62 46 102 66 52 102 65 51 100 62 52 102 64 52 
+101 65 53 102 62 51 103 64 51 87 64 56 24 22 23 47 34 32 100 71 62 37 27 26 
+51 43 40 101 66 58 101 64 53 102 69 58 99 67 56 96 74 69 74 75 87 59 76 92 
+60 77 98 70 77 96 65 65 70 64 63 69 62 66 79 60 70 85 71 71 83 63 60 65 
+65 61 63 68 63 67 57 47 48 83 63 60 104 79 72 116 87 80 123 96 87 129 100 92 
+127 98 91 134 107 98 158 129 119 173 143 132 182 156 143 122 102 92 120 105 103 154 146 145 
+110 102 102 119 109 110 112 109 110 207 207 202 196 197 194 165 165 163 189 189 187 206 206 205 
+227 227 225 233 233 231 236 236 235 165 165 171 34 33 39 28 27 30 26 24 26 25 24 26 
+23 22 23 23 20 23 22 21 22 22 20 20 18 17 19 12 14 17 13 17 19 13 15 18 
+12 15 16 13 15 19 14 15 20 11 15 20 11 12 17 13 13 14 16 15 17 16 16 17 
+16 15 17 16 14 16 17 16 18 15 15 15 31 29 27 35 32 31 33 30 27 46 35 35 
+19 15 18 
+102 66 53 97 62 45 98 60 48 99 64 49 98 64 51 96 61 49 97 62 51 101 65 53 
+102 64 49 102 65 49 100 66 52 82 56 46 28 24 23 43 30 29 89 60 50 39 29 25 
+47 37 36 98 66 56 101 67 57 98 63 54 94 61 51 87 77 79 59 65 75 66 72 85 
+69 80 99 67 76 93 55 60 70 60 72 93 64 76 95 66 76 89 115 117 130 84 81 88 
+72 68 71 72 70 73 63 58 61 69 52 49 105 80 73 120 95 88 129 102 94 132 105 97 
+137 108 100 147 119 109 159 132 120 176 148 136 155 130 121 104 87 83 158 151 148 225 224 223 
+115 113 114 148 143 146 135 134 133 215 214 212 193 193 186 192 193 188 202 203 200 223 223 221 
+231 231 229 237 237 235 239 239 239 209 209 212 42 42 46 29 29 30 28 25 27 25 23 26 
+24 23 24 22 21 23 20 20 21 22 21 21 17 17 19 12 16 19 13 17 21 13 16 20 
+12 15 19 12 15 19 12 15 19 12 14 18 13 12 18 14 13 15 17 16 17 17 17 21 
+17 16 19 16 15 17 16 15 17 14 14 14 18 18 18 22 20 19 59 41 40 144 102 106 
+36 24 31 
+95 57 46 97 60 47 95 59 47 94 60 48 97 61 47 97 62 48 98 62 50 101 61 46 
+101 64 48 101 61 45 102 64 48 89 63 54 30 28 26 45 30 28 100 64 56 43 31 27 
+50 43 38 101 68 56 101 66 54 98 62 51 99 64 51 90 75 77 55 66 82 57 67 84 
+70 81 100 65 76 96 48 59 77 61 74 99 61 72 86 162 165 169 226 225 225 167 166 167 
+84 82 85 84 81 86 83 79 84 61 47 47 93 73 68 120 96 90 134 106 100 144 115 109 
+150 122 112 158 129 119 172 143 132 174 147 137 113 89 84 129 117 117 210 207 206 239 240 239 
+147 147 148 200 199 198 172 173 170 197 197 191 164 164 156 187 188 184 218 218 216 230 230 228 
+236 236 234 236 236 234 238 238 238 232 232 234 83 85 92 30 31 31 28 27 28 25 25 28 
+23 23 25 23 23 24 22 22 24 21 21 22 20 20 23 16 17 20 16 17 19 16 17 18 
+16 16 19 15 15 19 15 15 18 16 16 18 16 15 18 15 14 15 16 16 18 17 17 18 
+17 15 16 16 16 18 14 14 16 16 16 16 22 16 18 39 29 29 88 58 59 139 102 102 
+47 34 42 
+99 62 49 98 62 47 96 61 45 100 63 50 100 63 51 98 59 45 100 60 46 103 65 51 
+95 57 42 96 58 43 101 65 51 89 56 44 42 35 33 41 28 25 95 60 50 43 32 28 
+52 43 39 97 65 53 100 63 49 98 62 51 96 62 50 95 70 68 64 73 90 53 64 84 
+68 80 96 70 82 103 53 69 89 59 73 93 71 75 86 128 129 128 196 199 195 216 215 215 
+108 107 110 93 91 95 94 92 96 88 78 81 92 71 70 121 93 90 154 125 119 170 143 135 
+172 146 136 176 149 139 186 159 149 141 117 111 126 112 110 168 164 164 232 232 230 242 242 240 
+207 207 207 222 221 221 204 204 201 202 200 197 186 186 182 211 211 211 227 228 226 233 233 231 
+234 234 232 235 235 233 237 237 236 236 236 236 122 124 132 33 32 34 29 28 31 25 24 28 
+25 24 27 23 22 24 22 21 23 23 23 23 20 20 21 19 17 19 18 16 17 16 16 17 
+16 15 16 17 15 16 17 15 16 15 15 15 16 15 15 18 16 19 17 16 19 17 17 19 
+18 16 18 17 17 19 16 16 21 27 21 24 67 42 48 83 53 60 94 61 62 116 77 84 
+56 38 45 
+97 64 52 97 64 52 98 62 48 101 65 53 100 63 51 99 61 50 98 62 49 98 58 46 
+100 63 48 96 58 47 93 56 42 99 62 52 51 40 39 40 26 23 98 63 50 46 33 30 
+44 38 35 97 66 54 97 60 48 95 59 45 95 58 48 96 73 72 78 86 101 49 59 77 
+72 77 91 79 86 94 88 101 116 57 72 88 71 73 83 80 80 79 76 83 80 187 190 188 
+158 157 158 102 101 105 105 104 109 114 112 113 152 136 137 172 146 139 182 155 146 188 161 151 
+188 160 150 186 161 148 171 146 137 121 100 97 141 134 131 214 214 213 234 234 234 230 230 230 
+229 230 228 225 225 223 204 204 198 171 171 167 142 143 140 214 215 212 232 232 231 236 236 234 
+231 231 229 233 233 230 236 237 234 236 236 235 146 148 155 32 33 36 28 28 31 26 25 30 
+24 23 26 23 22 24 24 23 25 22 20 23 21 20 21 20 19 20 20 18 20 19 17 19 
+18 17 18 19 17 18 19 17 19 18 17 18 17 17 19 18 18 21 18 17 21 18 17 21 
+18 17 22 30 34 48 47 55 88 50 39 52 86 57 62 96 65 71 109 78 81 150 110 119 
+44 35 44 
+98 63 51 96 60 48 95 60 48 98 59 48 99 64 51 99 62 49 102 62 50 101 66 54 
+99 62 48 98 62 48 101 66 51 95 60 47 40 32 29 46 34 32 93 56 46 50 34 30 
+37 33 30 91 61 51 98 63 49 95 60 44 96 60 49 92 75 81 73 81 97 70 75 90 
+56 62 69 73 72 75 94 98 102 61 67 80 65 65 71 51 53 52 40 43 43 101 106 104 
+207 207 205 187 187 185 208 208 207 216 215 213 235 231 228 216 202 198 196 173 163 192 166 155 
+187 160 149 175 148 139 135 110 105 129 112 111 166 165 164 199 203 202 225 226 226 199 204 204 
+169 177 177 213 213 211 170 170 166 129 130 127 128 129 127 219 220 217 234 234 232 235 235 233 
+236 236 234 235 236 234 236 236 234 235 235 234 158 160 166 34 33 38 29 28 33 26 26 28 
+24 23 28 23 23 25 22 22 23 22 22 22 20 20 20 18 18 19 19 18 21 19 19 19 
+18 18 19 18 17 19 18 18 20 18 18 20 18 18 20 18 18 21 19 18 21 19 21 30 
+26 36 62 51 73 111 70 94 136 64 77 112 76 61 76 92 69 79 121 110 116 195 192 206 
+104 104 129 
+101 67 52 101 64 49 99 62 50 101 63 52 100 60 47 101 62 48 99 62 48 96 59 46 
+99 63 50 100 63 48 96 58 42 99 61 48 38 30 26 47 36 33 93 61 52 54 37 34 
+37 33 32 94 64 53 99 63 50 99 61 49 99 62 48 95 77 77 70 80 97 69 76 89 
+66 74 86 63 62 67 59 57 59 68 68 71 50 49 51 30 29 30 44 41 40 46 48 48 
+114 120 116 182 185 180 223 223 219 214 216 212 197 202 198 223 220 219 219 210 205 191 172 163 
+171 148 138 137 112 106 126 107 104 156 150 150 210 211 209 194 198 201 130 139 143 146 158 174 
+168 173 174 181 183 181 111 114 111 108 108 112 160 162 159 225 225 223 232 232 231 229 229 227 
+232 233 230 236 236 235 237 237 237 235 235 234 171 173 178 37 36 39 29 29 32 26 27 29 
+24 24 26 23 23 25 23 23 26 22 22 24 21 21 23 20 20 22 20 20 21 20 20 21 
+19 18 19 19 18 20 19 18 20 19 18 20 19 18 21 19 19 22 22 30 43 48 71 111 
+57 90 140 57 90 142 64 95 142 85 108 149 122 135 162 157 163 181 198 206 217 222 225 241 
+128 131 155 
+102 70 57 102 63 47 101 63 49 99 60 46 101 64 49 102 62 45 101 60 42 103 64 49 
+99 57 42 100 60 44 102 67 51 100 63 48 41 30 27 30 24 21 90 59 48 57 40 33 
+36 33 31 94 65 56 101 63 50 100 63 50 102 67 55 95 71 65 81 87 104 60 74 94 
+70 81 96 62 68 81 45 46 53 52 51 54 55 54 55 36 34 36 41 40 44 40 38 40 
+52 51 49 83 86 79 183 185 182 192 193 192 88 106 116 124 136 139 232 231 229 230 225 223 
+145 134 131 127 113 113 158 154 151 214 214 214 227 227 226 223 225 227 130 147 172 174 184 207 
+167 161 150 133 132 128 87 89 89 109 109 111 177 178 175 205 206 201 212 213 209 215 216 212 
+213 213 211 218 219 214 236 236 233 234 234 234 195 195 199 42 43 47 31 30 34 26 26 30 
+25 25 27 23 23 23 21 21 23 22 21 23 21 20 23 19 19 21 19 19 21 19 18 22 
+19 17 19 19 18 20 19 19 21 18 18 21 19 18 21 26 33 46 61 86 125 71 103 152 
+102 129 167 174 186 215 144 160 190 184 197 217 185 197 215 211 217 232 200 209 224 199 204 220 
+114 117 140 
+103 78 70 97 60 47 97 60 48 100 65 51 99 62 46 100 61 46 101 64 46 101 61 45 
+99 61 42 100 63 46 101 63 46 101 62 47 47 36 31 19 18 19 74 48 41 61 41 33 
+32 30 29 93 62 54 103 65 52 100 62 49 98 62 49 95 75 74 85 90 107 68 82 102 
+60 78 100 69 78 99 52 60 74 37 40 45 44 45 46 42 42 43 36 39 46 47 50 61 
+59 58 59 106 108 106 188 191 192 116 129 137 54 78 102 88 98 108 221 221 219 224 224 223 
+162 163 163 170 169 169 216 216 216 222 222 222 231 231 229 178 186 191 167 171 183 153 150 143 
+163 153 143 82 84 86 80 81 85 126 126 126 160 160 158 156 155 151 156 156 152 180 181 176 
+194 194 192 193 194 190 230 231 227 235 235 236 230 229 231 132 134 140 34 33 38 28 28 31 
+25 24 26 23 22 25 23 23 26 21 21 23 20 20 21 19 19 19 19 19 20 18 17 21 
+19 17 20 19 18 22 18 18 20 18 18 22 19 18 23 57 72 94 91 116 155 172 189 212 
+149 165 196 189 201 216 206 213 232 195 206 221 214 222 236 194 203 220 154 165 184 101 110 129 
+35 36 49 
+108 82 75 99 66 55 100 63 52 101 62 45 101 65 49 100 64 46 99 60 43 101 65 48 
+99 61 44 98 60 42 103 65 48 99 64 49 47 36 33 22 19 20 52 35 30 58 39 33 
+33 31 30 94 67 57 102 65 49 103 64 50 103 71 60 93 85 89 82 84 92 79 83 90 
+70 83 97 64 80 99 58 71 89 39 48 61 32 35 39 34 34 37 31 33 36 59 65 78 
+59 62 68 108 107 104 104 122 141 74 93 115 109 116 128 95 100 107 153 154 154 188 188 185 
+173 176 173 204 205 201 201 201 198 196 198 194 221 222 220 123 129 127 152 148 138 160 163 163 
+158 155 149 61 62 64 100 100 99 144 141 139 144 143 139 144 143 142 160 160 160 185 185 184 
+202 202 201 211 211 209 231 231 229 237 237 237 236 236 236 211 211 215 44 45 52 28 27 32 
+25 25 28 23 22 25 21 20 24 20 20 22 21 21 22 19 19 20 20 19 20 19 18 18 
+18 18 18 18 17 21 17 17 19 19 19 21 19 21 27 78 96 116 134 154 184 132 154 175 
+171 185 210 131 152 173 204 213 228 200 209 225 199 208 226 158 170 188 173 182 201 122 126 152 
+26 26 39 
+116 89 80 102 72 62 98 64 53 100 68 56 99 63 49 101 65 48 103 68 54 100 64 50 
+104 62 48 105 66 52 101 65 49 100 64 50 52 39 36 23 19 21 67 41 36 45 35 32 
+29 29 28 87 60 51 104 70 56 103 68 56 97 66 57 87 85 93 76 83 93 71 80 92 
+66 77 87 68 78 92 60 73 91 50 60 77 34 39 50 27 29 32 26 26 29 35 37 43 
+44 44 46 123 128 133 163 174 183 121 126 133 103 103 108 97 93 95 102 91 90 78 71 72 
+77 70 76 127 126 120 168 167 163 152 152 151 205 207 204 100 105 104 155 146 133 159 160 156 
+167 172 175 96 99 102 136 134 132 154 152 149 175 175 173 206 206 205 214 214 214 215 215 215 
+215 215 215 222 222 221 231 231 229 238 238 238 238 238 237 237 238 238 122 123 131 32 31 36 
+26 26 30 24 24 26 22 21 25 21 21 24 20 20 22 20 19 21 20 19 21 18 18 20 
+18 18 19 18 18 21 18 17 22 19 19 22 22 29 34 70 96 131 100 124 155 180 194 210 
+161 174 201 94 117 148 140 156 177 188 200 215 168 179 201 143 157 175 136 144 166 45 50 65 
+14 14 22 
+114 89 79 105 80 72 97 68 57 97 63 53 96 62 54 100 66 53 96 64 51 97 63 49 
+98 59 46 100 65 50 102 66 54 99 66 53 55 44 39 22 18 19 81 51 48 31 27 25 
+26 27 26 77 54 46 87 51 41 84 50 39 87 64 60 77 84 101 77 89 109 69 88 110 
+60 81 102 55 69 92 58 72 90 50 64 84 39 47 64 29 31 40 22 22 24 41 41 43 
+36 36 37 107 110 108 175 177 174 116 115 117 72 70 72 74 67 67 70 64 67 65 60 67 
+76 71 76 74 69 68 118 115 113 161 161 160 171 173 169 168 171 172 135 129 120 155 147 137 
+154 151 146 159 160 159 190 190 188 187 187 186 168 170 168 207 207 207 217 217 217 219 219 218 
+222 222 220 229 229 227 237 237 235 239 239 237 238 238 236 237 237 235 195 195 200 36 36 41 
+27 26 32 24 23 28 22 22 25 21 21 24 20 20 23 20 19 23 20 20 21 19 18 21 
+19 19 21 19 19 22 19 20 23 21 21 25 34 43 49 105 126 156 121 142 168 192 203 219 
+142 154 183 93 113 146 106 124 152 133 149 174 118 130 159 47 59 76 19 24 35 15 15 19 
+13 12 18 
+107 86 78 105 83 74 81 53 44 81 54 43 77 47 38 80 46 36 81 50 37 78 46 34 
+78 44 33 72 45 35 74 41 32 75 44 35 43 30 28 18 17 17 72 47 40 36 27 24 
+30 29 28 79 57 50 91 56 45 89 50 40 92 68 66 76 91 112 68 90 116 70 92 115 
+64 87 108 57 80 104 52 73 97 49 68 89 39 53 71 31 37 51 21 22 26 37 33 34 
+38 34 35 74 74 72 147 146 146 89 88 90 72 64 69 55 50 54 74 69 72 72 69 72 
+59 59 68 39 40 48 50 50 56 95 100 99 82 90 93 117 123 121 138 142 145 129 127 123 
+157 152 143 180 180 178 171 172 170 175 177 176 184 185 184 200 200 199 212 212 210 218 218 216 
+218 218 216 224 224 222 230 230 228 238 238 236 237 237 237 232 232 230 221 221 223 46 49 55 
+29 28 33 26 25 31 24 23 28 23 22 27 21 21 24 21 21 23 20 19 22 19 19 21 
+19 19 22 18 18 22 19 19 22 19 20 23 63 73 92 94 115 144 137 154 179 165 178 196 
+158 167 190 109 118 129 142 153 168 123 140 163 69 82 108 17 23 38 14 14 17 12 12 16 
+11 12 16 
+109 87 82 141 129 128 111 96 91 95 65 58 93 58 50 98 62 52 96 58 44 99 60 45 
+103 64 49 99 62 51 100 56 43 99 58 46 58 36 30 19 16 17 87 55 47 45 30 26 
+28 28 28 87 65 57 105 68 55 100 60 49 97 75 74 84 95 111 97 109 127 153 158 165 
+165 170 175 124 132 141 82 93 110 67 82 100 58 71 88 47 55 71 36 37 48 29 26 28 
+35 31 32 29 26 28 70 70 71 76 75 80 53 50 54 37 33 35 57 49 50 62 55 56 
+63 61 65 80 79 88 53 56 63 57 64 73 147 151 152 59 63 67 79 83 84 134 129 123 
+122 119 115 88 87 86 115 114 115 165 165 166 189 189 189 205 205 205 215 215 214 224 224 223 
+229 229 228 226 226 224 220 220 218 221 221 217 231 231 229 230 230 227 229 229 230 76 77 84 
+28 27 32 24 24 27 22 22 25 21 21 22 20 20 22 19 19 21 18 19 19 18 18 20 
+18 19 19 18 18 21 18 18 21 20 20 23 58 71 88 104 121 144 172 175 187 168 173 189 
+132 136 155 113 116 111 176 179 171 143 150 163 26 39 57 17 21 36 14 13 18 12 12 15 
+12 13 16 
+112 92 86 176 171 171 214 212 212 104 83 74 100 68 60 101 68 56 99 66 52 100 63 50 
+102 66 51 102 68 57 102 63 48 103 67 53 63 41 35 17 17 17 84 58 49 51 35 31 
+26 27 27 86 66 58 108 76 63 103 72 63 100 87 84 132 140 147 167 171 176 180 184 184 
+196 197 196 207 208 205 191 194 195 107 116 125 73 79 96 66 70 82 48 48 61 32 30 34 
+59 52 54 105 90 91 72 61 61 25 24 26 26 25 34 24 23 30 53 47 53 48 43 48 
+33 31 35 49 49 54 54 53 53 77 82 84 188 187 187 104 106 113 42 44 48 127 121 112 
+122 117 112 86 82 83 113 112 112 138 138 138 159 159 156 198 198 196 216 216 214 223 223 221 
+230 230 229 236 236 235 235 235 234 223 223 221 216 216 212 230 230 226 230 231 231 100 103 110 
+28 30 34 24 26 29 22 24 26 23 24 25 21 23 23 23 24 26 19 22 23 18 21 22 
+18 23 23 18 22 24 16 20 21 16 21 20 54 68 81 63 68 80 138 110 102 165 141 142 
+92 92 102 115 113 113 123 122 109 133 134 127 20 29 44 15 21 35 15 15 19 14 14 14 
+13 15 18 
+117 98 91 175 168 168 237 237 236 156 151 146 107 80 70 104 75 62 106 76 64 106 72 61 
+112 75 62 107 72 60 109 72 58 109 71 57 71 48 41 18 17 17 84 55 47 52 37 32 
+26 26 26 81 59 51 106 69 56 104 75 65 107 104 105 121 127 127 161 163 163 186 187 184 
+181 184 182 176 177 173 191 192 187 177 178 179 80 87 98 70 76 86 62 62 70 37 36 40 
+45 39 39 120 103 103 107 95 95 74 69 75 36 45 64 46 51 73 48 49 63 47 51 67 
+37 44 66 35 39 58 23 28 34 63 68 71 117 121 124 34 37 43 27 28 34 108 107 100 
+91 89 83 83 79 80 96 91 93 95 87 90 89 80 78 117 113 111 172 173 170 204 205 201 
+219 219 215 230 230 228 235 236 233 236 236 235 223 223 222 217 218 214 224 226 226 73 80 84 
+22 28 27 18 25 26 18 23 22 17 23 21 16 22 19 17 21 20 16 21 20 15 20 19 
+14 20 18 14 20 18 15 19 19 16 20 19 34 44 43 59 59 64 89 74 70 142 113 110 
+127 120 120 140 137 131 136 135 123 114 115 116 18 25 43 14 23 39 15 16 25 14 14 17 
+11 15 16 
+121 102 95 176 170 169 231 230 229 212 210 209 112 86 76 107 74 59 105 70 55 106 67 53 
+107 67 52 103 67 52 107 70 55 106 70 52 72 53 39 18 19 17 86 64 52 71 58 47 
+24 25 24 85 67 58 116 89 71 106 88 76 74 75 73 78 82 88 78 81 85 100 96 96 
+141 136 136 156 151 147 163 159 152 165 161 159 95 94 99 83 84 92 73 71 77 52 48 54 
+27 22 23 113 96 93 115 102 100 93 87 92 46 50 67 50 55 78 54 57 79 54 58 82 
+61 65 90 66 78 103 61 75 98 76 90 109 171 175 177 109 107 106 97 90 88 111 107 102 
+48 47 45 81 75 77 90 82 85 81 71 73 79 71 72 101 91 92 107 99 97 130 126 122 
+156 155 146 195 196 187 225 224 217 232 232 226 232 233 231 210 211 206 151 156 155 31 37 35 
+23 27 25 19 25 23 19 24 22 17 23 21 14 22 19 16 21 20 14 22 19 15 21 18 
+15 21 19 17 21 20 16 21 20 16 21 19 29 37 32 83 84 82 66 58 57 109 86 83 
+187 158 152 180 172 164 191 192 187 101 108 119 19 27 44 20 28 45 15 19 31 13 13 17 
+11 14 16 
+117 99 93 185 179 179 242 241 241 244 244 244 166 161 155 137 117 101 141 121 99 144 125 101 
+144 124 98 140 122 98 120 104 75 112 96 66 91 82 60 20 20 18 102 94 69 70 67 48 
+23 22 22 90 84 62 115 113 74 108 111 77 77 79 78 75 79 89 71 74 83 79 75 79 
+97 79 75 151 129 120 167 144 136 137 118 112 120 107 105 105 98 101 86 79 86 63 58 65 
+31 25 27 97 82 79 127 107 104 103 93 94 76 69 74 80 71 78 89 84 97 64 68 86 
+57 60 80 61 64 86 71 82 102 140 148 153 161 166 164 128 121 111 124 114 104 94 87 82 
+32 32 32 72 67 70 76 65 70 64 46 50 76 59 62 73 57 60 69 53 53 85 67 65 
+105 85 75 136 116 96 147 136 114 213 204 181 228 226 217 195 195 196 52 55 57 36 36 37 
+33 33 34 33 32 33 26 28 27 19 25 21 18 24 19 18 23 20 19 22 20 17 24 19 
+16 24 17 16 22 17 17 24 19 17 23 18 18 26 19 53 55 50 60 54 53 78 57 58 
+161 134 130 202 195 196 127 134 149 34 48 72 21 28 47 20 28 44 17 24 38 12 15 22 
+11 15 18 
+112 94 90 182 174 174 229 229 229 243 243 243 222 223 219 127 130 98 116 120 78 105 115 67 
+108 116 70 106 111 67 101 108 60 96 104 51 71 77 41 19 22 17 76 80 44 59 66 34 
+24 24 23 65 69 40 88 98 45 96 101 63 85 85 84 75 76 75 89 88 93 92 82 82 
+162 132 120 207 178 159 221 197 182 211 188 181 124 102 100 115 94 94 107 93 97 81 70 74 
+48 39 39 57 47 47 125 106 105 108 99 100 76 72 80 27 26 30 80 71 76 84 81 89 
+85 79 87 87 76 84 67 61 69 152 148 145 171 174 172 101 102 98 119 113 106 55 52 50 
+33 32 34 67 58 63 59 46 51 76 59 63 88 71 74 127 110 105 173 152 144 183 159 153 
+125 98 96 115 86 66 166 138 111 130 112 85 213 202 178 160 160 157 28 29 30 29 29 29 
+28 28 29 32 31 31 47 45 43 58 63 44 60 70 34 58 66 36 63 69 40 64 70 36 
+66 74 37 63 77 36 62 74 34 64 74 35 59 67 38 29 36 28 80 79 78 75 72 73 
+167 168 169 227 230 232 165 175 196 28 42 68 20 29 46 21 29 40 18 26 40 12 17 28 
+10 18 26 
+100 85 81 165 156 156 216 216 216 236 236 236 233 236 232 122 128 94 103 106 64 106 108 64 
+106 107 60 105 105 61 100 103 54 93 100 47 74 77 39 20 20 17 72 75 39 65 68 38 
+25 24 22 72 69 48 93 93 52 90 92 53 89 89 80 85 88 93 84 80 85 88 68 68 
+150 119 107 200 169 149 220 193 175 226 199 185 211 184 177 107 85 85 107 90 91 90 77 80 
+66 51 53 23 18 18 111 94 88 120 105 105 75 73 84 57 57 68 92 82 87 78 69 73 
+69 65 72 39 37 44 62 57 58 111 102 102 143 143 140 181 182 183 71 72 76 29 28 32 
+34 32 36 60 50 55 59 42 48 83 63 68 138 115 108 197 172 154 218 193 176 227 203 188 
+224 197 186 130 99 93 123 91 65 98 72 52 154 136 104 158 148 134 23 22 24 23 23 24 
+34 31 33 36 33 34 45 42 43 61 59 53 74 80 49 89 98 54 91 100 55 76 93 38 
+80 99 44 79 101 41 77 97 41 71 90 37 74 86 39 32 39 24 66 75 69 114 127 129 
+209 217 219 231 236 242 129 145 166 26 40 66 19 29 45 18 28 37 20 27 42 13 18 31 
+12 22 31 
+92 79 74 159 149 149 209 208 210 240 240 239 245 245 244 157 162 143 98 104 60 98 105 56 
+95 106 54 97 106 54 98 103 54 103 102 58 75 79 42 18 20 17 64 71 35 61 68 35 
+26 24 21 76 77 51 94 102 55 99 107 64 95 100 79 83 83 88 65 54 54 81 64 64 
+140 109 99 195 162 144 218 190 171 229 202 184 231 203 190 204 177 171 100 81 81 95 79 79 
+70 55 54 22 17 16 56 46 43 112 93 93 60 56 62 57 58 67 96 91 96 101 90 95 
+96 88 96 66 64 75 63 59 66 102 93 97 124 121 122 126 131 129 67 65 63 32 30 30 
+42 37 42 48 38 43 63 47 51 117 96 92 181 152 138 207 179 160 222 196 179 230 205 189 
+230 205 189 207 177 163 83 53 45 81 53 36 96 70 49 149 135 118 25 23 24 17 17 17 
+32 30 31 40 35 38 44 42 44 54 52 54 45 43 39 74 76 48 88 98 50 87 101 48 
+82 99 47 84 100 48 83 99 48 81 103 45 78 97 46 40 50 32 91 102 100 150 158 163 
+211 219 218 228 232 242 75 92 114 26 40 60 20 29 44 16 26 35 22 31 43 15 24 34 
+23 37 47 
+90 78 76 120 109 107 185 185 185 233 233 233 246 246 246 199 207 196 94 111 60 97 109 58 
+92 105 54 89 102 48 93 101 53 88 100 49 68 80 38 19 21 18 65 75 38 66 77 39 
+23 23 21 80 83 58 89 102 51 91 107 55 86 100 69 68 68 67 67 53 51 81 63 65 
+130 97 92 188 153 136 215 186 166 228 201 183 233 205 190 231 203 191 182 158 152 81 65 62 
+60 44 42 41 30 29 44 33 33 58 44 43 63 52 49 42 39 44 94 89 96 99 91 97 
+59 56 63 67 63 69 66 65 70 99 92 95 107 103 107 81 83 91 33 31 34 30 27 30 
+45 38 42 48 38 41 89 74 68 160 133 122 192 162 145 210 183 165 225 199 184 232 207 193 
+231 204 188 220 190 168 133 104 96 67 40 29 84 57 37 132 122 108 24 24 24 21 21 21 
+26 25 26 42 37 38 55 49 50 40 39 39 32 31 31 38 38 28 76 88 47 81 94 50 
+78 96 49 74 94 46 73 96 42 79 101 49 77 98 49 45 58 34 96 104 104 115 130 140 
+160 171 172 188 195 205 28 45 67 24 35 56 22 29 47 15 22 33 21 30 47 17 26 40 
+40 58 69 
+136 133 130 111 100 99 158 156 158 221 217 216 239 236 235 218 221 216 90 91 67 73 71 48 
+62 65 41 52 55 33 48 50 32 43 49 26 27 32 17 17 18 16 58 69 31 62 74 36 
+21 22 19 47 49 38 42 49 26 46 56 31 55 61 49 64 56 55 71 57 55 78 63 64 
+113 84 81 176 142 125 209 180 158 224 198 179 233 205 190 234 205 193 223 197 186 87 73 67 
+53 39 37 45 35 32 56 43 40 62 47 45 87 71 68 103 89 91 100 95 100 110 102 106 
+72 66 71 60 56 59 65 65 68 94 89 92 129 122 123 91 90 99 33 34 43 35 31 39 
+56 50 52 73 59 56 142 118 108 180 149 134 201 169 151 216 190 171 227 204 189 234 211 197 
+228 202 185 219 189 166 173 144 131 58 38 28 88 68 49 121 112 105 24 24 24 24 24 24 
+24 22 24 45 40 41 60 55 54 46 46 46 34 34 34 27 25 24 36 37 26 32 39 24 
+33 39 26 30 38 23 31 39 23 32 40 25 30 38 23 24 29 23 35 40 38 50 57 59 
+61 71 69 64 76 85 22 35 56 21 32 50 22 29 46 14 19 30 20 29 44 17 26 38 
+56 80 95 
+241 240 240 204 202 200 126 113 108 181 149 139 196 169 155 207 180 170 203 165 153 189 148 140 
+141 114 106 39 38 26 30 35 20 32 37 21 31 34 20 18 19 15 53 66 29 58 72 31 
+21 20 18 18 21 15 20 25 13 22 26 15 28 31 22 65 60 49 75 61 58 78 62 63 
+98 73 71 160 126 113 200 169 149 219 191 171 230 202 187 234 206 193 230 203 191 136 119 112 
+59 47 39 62 48 41 58 44 39 72 54 50 70 54 49 93 76 72 116 103 104 94 83 85 
+103 88 89 101 84 86 84 73 74 92 81 82 104 93 92 91 84 89 70 69 79 66 62 70 
+73 62 61 123 102 94 171 143 127 194 162 144 209 181 161 221 197 179 230 208 194 233 211 196 
+225 199 179 219 188 167 188 158 141 54 37 29 136 119 99 88 85 81 30 29 30 28 26 27 
+24 24 24 51 47 47 63 56 57 58 57 57 44 44 44 40 38 39 32 27 25 23 22 19 
+22 22 17 21 22 19 21 21 20 21 22 19 20 20 18 21 20 20 19 19 19 20 22 22 
+21 24 26 17 25 39 18 27 44 20 29 46 20 29 42 13 19 27 20 26 43 16 27 39 
+71 99 118 
+227 228 228 222 209 202 193 158 141 180 142 127 209 173 160 205 165 149 203 154 140 211 158 151 
+177 133 122 167 144 123 72 84 36 75 93 41 70 85 41 18 22 17 59 71 40 62 76 37 
+19 19 16 41 48 29 66 80 36 74 84 41 70 81 42 79 89 50 79 74 58 80 64 66 
+85 64 63 138 106 96 187 153 136 212 182 163 226 198 182 231 203 190 230 204 192 175 156 146 
+69 55 49 73 58 52 67 52 50 69 55 51 76 58 53 78 64 59 110 92 89 86 73 73 
+97 82 82 100 82 83 79 65 64 94 77 76 95 79 78 76 64 63 66 57 61 70 61 65 
+103 82 79 161 133 118 192 161 141 206 176 155 217 190 172 226 204 187 233 214 200 231 210 195 
+222 195 176 215 187 165 181 150 133 70 54 40 185 178 166 134 135 138 35 34 38 23 23 24 
+28 27 27 53 46 48 65 56 56 65 63 62 58 57 57 40 40 40 51 49 37 60 62 41 
+82 83 52 76 78 50 76 77 49 84 83 53 65 67 47 44 47 33 29 34 30 99 103 103 
+121 123 124 46 54 70 12 20 37 12 21 31 16 25 35 13 19 28 20 27 40 25 40 48 
+74 102 120 
+208 208 206 153 130 117 119 89 73 143 109 97 210 172 159 200 161 148 141 104 96 146 112 107 
+125 99 88 176 146 126 88 95 51 84 95 46 79 90 44 18 22 15 58 66 39 76 86 52 
+20 21 18 51 53 37 86 88 53 93 88 56 81 83 48 88 97 54 80 79 56 83 66 66 
+80 60 62 112 86 78 167 132 117 200 166 148 218 189 171 229 202 187 230 204 191 209 184 173 
+74 62 58 73 62 59 75 61 57 73 59 54 79 63 58 73 59 57 73 60 57 93 77 74 
+95 79 79 97 78 79 91 75 73 94 77 75 94 75 76 85 67 65 84 67 66 89 73 71 
+148 120 109 191 160 141 207 181 158 216 189 169 223 199 182 230 209 196 233 213 199 226 202 186 
+216 188 168 210 179 159 139 115 101 142 134 120 225 224 218 197 196 199 44 44 47 25 25 27 
+32 32 32 50 43 45 63 56 56 60 59 58 61 61 58 49 49 49 51 50 47 60 63 43 
+84 87 54 80 84 50 77 81 49 78 84 45 61 70 39 47 50 36 23 28 26 103 108 107 
+133 134 136 51 59 75 17 25 40 16 21 31 13 21 30 14 19 28 18 25 36 46 68 78 
+72 103 131 
+122 118 113 70 44 37 74 45 39 85 56 49 133 94 82 150 111 97 197 158 145 200 164 149 
+133 108 90 108 98 70 89 88 55 77 79 45 75 78 44 19 21 17 49 53 30 66 69 41 
+19 20 18 50 50 41 74 74 46 78 77 50 69 70 43 67 77 39 54 60 36 82 69 65 
+78 61 62 90 67 67 132 102 91 178 144 126 208 177 157 223 196 177 229 201 188 225 199 188 
+99 85 82 77 63 61 77 65 62 76 63 57 77 64 58 72 60 56 46 38 38 72 59 54 
+53 45 42 55 44 44 63 53 52 70 57 58 77 62 63 80 66 65 89 70 66 132 108 101 
+185 154 137 206 176 157 217 192 171 223 200 183 229 207 193 231 211 197 227 205 191 219 192 175 
+209 180 159 192 167 149 179 175 166 230 229 223 232 232 229 191 193 194 44 47 48 26 27 27 
+36 34 35 45 40 41 59 55 53 60 56 56 60 59 60 50 50 52 42 41 42 42 40 33 
+81 82 53 87 86 54 74 78 46 87 86 52 66 70 43 40 41 31 25 27 24 58 64 60 
+106 111 113 24 36 49 19 25 36 13 18 27 12 15 23 10 14 20 17 28 40 60 88 105 
+55 86 116 
+27 23 20 58 45 37 73 59 45 69 41 35 88 53 46 74 44 37 95 59 49 149 112 100 
+86 80 59 77 82 58 81 80 60 86 82 55 79 80 51 20 20 17 48 46 31 66 66 41 
+19 21 19 50 52 42 76 83 50 86 92 56 75 81 47 80 90 45 73 85 45 85 76 61 
+78 63 60 74 59 61 94 70 68 146 113 100 190 155 136 213 183 163 227 198 185 214 186 177 
+152 127 124 168 138 133 156 132 127 84 70 67 78 64 59 77 62 55 67 54 49 89 72 64 
+107 89 81 128 107 102 116 96 91 83 68 67 60 47 48 63 50 47 112 90 83 175 145 130 
+207 177 159 217 189 170 225 200 183 228 206 191 230 209 195 226 204 190 220 196 178 210 182 160 
+200 172 151 228 221 211 235 232 229 223 223 218 232 233 229 227 228 229 120 122 126 31 32 33 
+44 37 40 46 39 38 60 58 56 63 59 58 55 55 54 50 50 48 43 42 41 36 35 34 
+62 67 41 80 88 54 77 83 50 87 91 57 77 82 51 37 39 27 53 57 37 25 31 21 
+70 82 62 21 33 44 13 21 36 13 20 31 13 18 28 8 13 20 17 31 45 72 103 127 
+52 75 101 
+28 20 19 85 77 58 76 75 48 73 68 43 52 31 24 59 36 30 101 71 65 102 79 75 
+73 70 70 67 69 77 73 71 78 83 72 59 90 82 59 23 23 18 55 56 36 74 77 48 
+19 19 17 41 44 34 77 80 48 75 77 46 69 71 41 80 79 48 68 72 43 74 68 50 
+80 64 57 75 58 59 77 57 61 104 78 75 159 125 110 199 164 147 159 134 130 108 85 91 
+121 89 92 169 130 126 185 144 138 212 182 175 105 91 85 81 64 61 149 107 103 206 175 170 
+222 193 188 228 201 195 233 205 201 232 206 201 225 200 197 157 136 131 161 132 121 201 166 147 
+217 187 167 224 198 180 229 205 189 228 206 190 223 200 184 217 194 176 210 182 162 200 169 149 
+213 201 187 240 240 236 226 226 222 229 230 225 235 235 232 233 233 231 206 207 210 38 40 43 
+44 39 40 37 35 36 56 55 54 64 62 63 52 52 51 49 49 48 46 42 43 40 36 37 
+44 44 34 70 79 49 65 72 45 77 80 51 61 66 46 21 25 18 63 66 44 24 28 22 
+54 68 42 33 45 50 16 25 35 11 18 28 11 13 21 10 15 25 32 45 60 56 74 95 
+36 41 50 
+71 57 54 134 108 100 114 96 80 64 61 42 17 14 14 35 25 26 66 49 51 98 87 91 
+91 83 86 65 60 65 61 52 53 85 63 54 97 88 63 26 26 18 49 48 31 78 77 49 
+19 20 17 54 53 42 105 101 69 95 91 62 90 87 59 76 71 48 56 54 41 51 46 37 
+76 62 56 77 60 59 76 58 61 85 64 67 137 114 107 139 118 111 88 75 75 79 67 68 
+70 55 56 76 54 54 97 65 61 137 108 98 93 81 73 82 65 62 109 67 64 157 117 108 
+189 161 152 200 177 166 220 193 185 233 205 198 236 211 206 232 207 202 206 177 165 216 187 168 
+223 196 178 229 202 187 229 202 186 222 197 179 214 188 168 208 182 162 196 166 146 193 176 157 
+236 234 227 231 231 226 227 227 223 233 233 230 234 234 232 233 234 233 233 234 231 127 130 129 
+51 50 52 32 32 33 33 34 34 34 36 35 45 45 46 52 52 52 44 44 44 38 37 36 
+48 45 44 41 44 40 24 31 28 18 27 25 20 26 26 15 18 19 22 30 29 22 24 26 
+19 30 31 22 34 49 17 24 41 12 18 33 10 14 25 11 17 27 45 56 70 31 38 50 
+35 39 49 
+100 84 82 107 100 115 110 98 105 29 28 25 37 29 32 69 58 61 72 60 59 91 80 83 
+67 53 53 38 27 26 41 29 28 82 59 52 97 84 61 32 33 23 42 42 30 71 70 47 
+24 24 22 45 45 39 83 78 57 70 66 47 60 56 43 47 46 40 37 34 32 26 23 22 
+55 43 39 79 62 57 119 100 98 176 154 154 55 51 49 22 20 20 15 15 17 16 16 17 
+23 22 23 26 24 22 31 29 28 34 32 31 38 37 36 53 51 51 72 69 70 115 109 107 
+116 114 111 103 98 93 103 90 85 162 138 129 219 188 180 232 203 196 229 206 198 226 202 187 
+230 204 188 228 201 184 222 193 175 210 182 160 203 174 153 192 160 141 182 159 142 231 226 219 
+234 233 229 230 229 226 230 230 227 234 234 232 230 231 228 237 237 235 235 234 232 218 218 218 
+194 195 193 150 152 153 54 57 60 25 27 26 35 35 36 51 51 51 56 55 57 36 36 36 
+48 47 47 53 55 57 35 47 57 32 48 64 26 40 51 17 26 34 26 38 48 20 25 31 
+21 33 45 19 30 51 17 26 41 13 19 33 9 13 24 12 20 31 34 45 58 15 20 34 
+31 37 54 
+131 121 111 107 106 104 56 50 52 48 35 37 87 78 81 121 115 114 132 124 123 76 65 64 
+33 20 18 36 24 24 98 91 90 138 130 123 118 116 101 71 72 67 44 43 40 49 47 38 
+39 36 32 59 50 46 58 52 46 39 35 33 39 35 35 32 29 28 29 26 25 24 22 22 
+33 29 30 115 94 94 179 151 152 106 86 89 23 20 20 22 18 19 19 17 17 24 19 19 
+26 23 20 41 34 28 53 44 38 63 52 45 49 43 37 57 46 41 52 43 41 64 60 56 
+68 67 63 77 76 73 66 65 60 102 91 89 140 109 103 203 164 158 230 202 198 228 203 194 
+228 202 188 220 191 173 211 177 156 199 165 144 187 153 135 173 151 135 222 219 211 236 235 233 
+232 232 229 232 232 230 233 233 231 230 231 229 227 227 225 239 239 237 235 235 234 214 214 213 
+197 198 194 217 218 215 196 198 202 45 47 52 30 30 31 43 43 43 45 45 45 37 36 36 
+62 59 60 59 60 60 44 53 59 32 48 69 30 44 61 29 44 63 28 42 60 21 26 35 
+19 30 42 18 30 48 15 22 37 12 19 30 10 18 29 10 20 33 39 49 61 24 29 44 
+38 45 65 
+54 48 41 52 38 37 69 47 50 93 74 77 152 141 140 179 172 168 113 106 102 39 31 29 
+65 37 38 126 94 94 199 194 189 206 204 198 170 170 161 97 97 93 34 35 33 32 30 28 
+55 45 42 50 43 40 30 28 26 38 32 31 27 24 24 18 18 17 19 17 18 30 26 26 
+37 29 32 119 93 99 82 61 73 34 23 32 20 14 14 20 14 15 16 13 13 18 13 14 
+18 13 13 21 15 17 20 15 14 28 20 18 24 19 17 31 23 22 24 18 17 22 18 18 
+38 30 25 70 63 57 56 41 36 82 61 58 108 80 72 195 158 153 227 198 193 229 203 195 
+221 195 179 210 178 158 196 160 140 180 146 128 168 147 134 212 207 199 224 224 219 222 222 219 
+224 224 220 229 229 225 234 234 232 227 227 225 221 221 218 240 239 237 233 233 231 219 219 218 
+185 186 183 203 204 199 231 231 230 140 143 149 26 27 30 29 29 29 32 32 32 46 46 44 
+64 64 64 64 64 65 62 66 67 79 94 99 69 79 89 38 57 68 34 50 66 27 35 43 
+22 33 47 21 32 48 18 27 44 14 21 37 10 19 31 10 20 37 46 56 66 32 36 45 
+27 30 43 
+66 49 47 69 50 50 146 129 130 157 143 143 105 84 75 93 67 59 59 38 37 44 37 37 
+116 53 59 139 112 109 179 177 165 186 181 170 139 136 126 71 69 63 32 31 29 37 32 29 
+47 41 36 30 29 27 34 30 27 26 24 23 22 20 21 11 11 11 17 14 15 22 21 21 
+37 27 28 79 53 59 70 50 61 53 38 48 27 19 23 18 14 12 17 12 12 17 11 11 
+18 12 12 20 12 13 22 14 15 24 15 16 24 16 16 28 19 18 30 20 21 27 18 19 
+32 23 20 112 87 82 169 131 128 184 147 141 197 167 160 223 195 191 228 203 199 223 194 187 
+209 179 164 193 161 142 176 143 129 131 109 100 107 99 93 126 124 118 133 129 121 137 133 125 
+150 146 140 169 167 160 204 203 196 224 225 221 215 216 209 234 234 230 224 224 222 205 205 201 
+206 207 202 227 227 224 231 232 229 193 194 199 27 31 35 25 26 25 37 36 36 48 48 47 
+64 64 64 51 52 53 65 66 65 131 139 134 128 133 133 135 142 139 138 145 145 123 129 126 
+121 125 133 20 30 50 19 27 42 16 24 39 12 20 34 10 20 38 27 38 49 39 45 55 
+14 14 22 
+60 38 34 69 44 42 106 78 72 97 62 54 91 49 39 84 45 41 52 32 28 59 42 43 
+104 38 43 114 99 93 152 144 133 162 156 143 92 89 81 54 50 46 30 29 29 35 28 27 
+39 34 34 25 23 23 35 26 25 26 21 21 14 13 13 11 10 11 20 16 16 21 19 20 
+13 13 13 59 41 40 81 54 55 75 45 50 66 39 49 48 34 39 23 14 15 21 13 14 
+17 12 13 17 12 12 18 12 13 21 13 13 21 13 15 22 15 15 24 16 19 25 18 19 
+35 22 20 121 77 75 147 90 92 185 135 128 213 178 171 216 187 180 215 180 174 209 176 163 
+195 164 148 174 145 133 120 101 94 77 68 67 76 68 65 74 66 63 84 75 71 100 91 85 
+110 100 92 115 105 95 126 122 111 226 226 219 235 234 230 227 227 223 216 216 214 217 218 215 
+227 227 225 228 228 226 227 227 225 196 197 201 48 50 52 54 52 50 53 52 51 62 59 57 
+64 65 65 54 54 57 59 60 58 124 128 118 147 151 144 153 156 148 160 162 158 140 144 136 
+143 145 147 21 33 51 24 34 51 19 26 42 15 23 38 12 21 38 17 28 42 42 48 58 
+10 11 13 
+56 31 26 62 33 26 83 44 38 94 42 30 86 39 28 77 36 29 62 44 36 75 37 38 
+97 34 35 96 83 74 137 128 114 129 124 112 81 73 68 46 40 39 22 20 19 33 27 25 
+32 28 28 17 16 16 30 23 23 27 22 22 9 9 9 13 11 11 19 16 15 14 14 14 
+7 7 7 31 22 23 80 58 56 78 46 44 79 42 44 83 51 54 34 17 20 22 13 14 
+22 15 15 21 15 13 22 15 15 24 16 17 33 19 20 74 48 51 82 58 63 42 26 31 
+46 26 31 110 73 73 115 67 64 123 71 63 150 104 97 161 119 110 177 136 123 204 171 156 
+170 143 133 114 99 96 77 71 72 79 74 75 79 76 77 80 76 77 79 77 77 78 73 71 
+89 82 78 109 98 90 154 149 138 230 229 223 225 226 221 221 221 219 225 226 223 229 229 227 
+226 227 225 224 224 221 212 212 212 141 143 148 59 59 57 70 67 67 54 53 52 61 59 58 
+65 65 64 62 62 62 58 58 57 87 89 83 168 169 163 176 177 169 180 180 176 134 136 130 
+127 127 125 79 87 94 70 77 94 50 58 81 21 30 46 14 22 34 15 25 41 18 27 37 
+20 21 21 
+40 19 17 46 24 16 63 28 19 82 33 22 82 36 24 92 45 33 87 62 52 133 83 81 
+80 38 34 101 90 76 122 113 102 92 88 78 68 62 54 35 33 31 20 16 17 33 27 25 
+30 29 28 14 14 12 27 23 21 20 17 18 7 7 7 11 9 10 19 16 17 12 11 11 
+7 7 7 18 14 13 73 55 52 77 53 52 76 49 48 77 48 52 65 39 45 61 37 42 
+64 43 47 48 29 32 23 13 13 24 16 14 75 44 42 117 76 75 128 95 97 86 57 63 
+81 56 61 85 51 56 82 42 48 83 42 44 94 52 48 145 106 99 185 148 135 186 153 143 
+107 95 93 97 95 95 140 140 136 167 165 162 177 176 173 179 179 175 174 174 170 168 168 164 
+160 161 156 162 162 156 203 203 193 229 229 226 227 227 224 225 225 223 221 221 219 215 215 213 
+212 212 210 215 215 213 162 165 168 43 45 49 47 47 48 67 66 66 56 55 54 53 53 53 
+63 63 64 65 65 65 62 63 61 58 60 57 127 130 123 172 174 166 185 186 182 133 133 129 
+109 108 104 101 102 105 84 87 100 64 71 87 25 34 53 17 25 40 20 30 43 25 31 39 
+45 45 44 
+35 15 11 31 16 12 40 17 14 62 27 19 80 37 25 95 50 33 68 42 31 137 106 98 
+75 56 47 108 100 86 107 101 89 79 75 69 60 56 50 40 37 34 19 17 15 33 27 28 
+26 25 25 12 12 11 28 21 22 17 14 15 7 7 7 13 11 12 17 14 14 10 10 10 
+6 6 6 10 9 9 70 62 60 75 56 52 72 48 44 77 50 51 76 46 45 80 43 46 
+83 42 49 82 43 47 27 13 13 23 14 14 61 36 35 77 38 39 91 51 46 94 60 54 
+97 65 63 98 63 64 96 59 58 94 58 55 116 80 74 142 106 96 154 116 104 125 102 93 
+87 79 81 115 110 110 152 150 146 174 173 169 195 196 191 211 212 207 217 218 213 218 219 214 
+217 217 213 215 216 212 211 212 208 205 205 204 192 192 192 192 192 190 196 196 194 208 208 206 
+218 218 216 210 211 211 80 82 87 34 33 35 31 31 33 56 55 56 59 59 59 47 47 48 
+55 55 54 60 59 58 58 55 56 56 56 55 72 76 70 168 171 161 185 186 182 156 160 153 
+139 137 134 102 102 101 83 86 91 62 64 75 28 33 45 19 27 40 23 31 43 45 48 50 
+78 72 66 
+25 11 9 23 10 10 25 11 10 50 24 19 71 38 28 73 50 40 66 49 36 136 117 107 
+85 72 63 101 92 79 99 94 86 77 75 74 57 57 56 35 34 31 22 20 19 36 32 29 
+26 24 23 13 11 11 26 19 20 14 12 12 8 8 8 17 13 15 12 12 12 8 8 9 
+7 7 7 18 18 19 81 82 89 71 58 54 67 43 42 72 46 47 72 45 45 73 40 39 
+73 35 40 79 40 48 49 24 29 37 23 22 89 56 56 79 41 48 78 43 46 80 47 51 
+87 53 57 91 54 53 96 59 54 139 103 96 174 140 132 160 125 116 160 127 117 79 70 68 
+68 65 65 69 64 65 70 66 68 75 72 71 85 83 82 100 99 98 118 116 114 143 143 141 
+168 167 162 174 174 169 165 165 162 170 170 166 184 184 180 200 201 197 213 214 210 215 216 212 
+218 218 216 174 174 176 121 106 98 81 69 63 36 33 32 44 43 43 64 63 62 41 38 41 
+37 36 37 55 54 53 56 52 53 58 56 55 68 69 66 151 153 146 183 183 178 158 162 155 
+178 179 176 77 83 91 32 42 53 28 34 49 35 39 51 37 39 50 22 28 38 52 49 47 
+89 81 71 
+21 11 8 22 11 9 31 14 11 56 31 27 27 17 15 89 84 80 99 88 80 123 99 83 
+83 74 60 109 100 90 98 98 95 76 77 77 60 59 59 43 41 39 20 17 18 37 31 30 
+20 19 18 11 11 10 24 20 19 13 12 11 10 10 10 15 12 12 11 11 9 8 8 9 
+15 14 11 84 82 78 80 84 94 67 64 68 71 52 56 65 42 45 68 44 41 71 40 38 
+77 39 41 85 45 48 60 30 33 22 13 13 49 29 27 73 39 38 89 56 53 95 63 62 
+98 64 64 101 64 61 124 85 78 140 99 89 139 101 93 122 89 80 103 90 86 74 72 75 
+75 74 76 77 76 79 78 78 79 78 78 79 79 79 82 87 88 90 100 99 98 127 126 124 
+158 157 153 183 182 177 191 191 186 200 200 196 201 202 197 205 206 201 201 202 197 207 208 204 
+201 203 204 110 120 133 138 127 123 141 127 118 137 119 110 94 81 77 64 64 67 37 36 46 
+31 30 34 39 37 38 54 48 49 61 59 58 67 67 65 117 110 107 166 157 155 134 140 135 
+154 159 154 122 128 130 86 88 92 99 97 104 88 86 100 46 44 59 16 16 17 49 43 39 
+58 48 40 
+30 13 13 34 18 15 53 29 24 32 21 18 25 17 17 82 69 66 91 70 60 118 91 72 
+97 91 77 131 127 121 101 101 99 75 77 77 67 64 65 43 40 38 16 14 14 30 25 24 
+24 22 22 13 11 12 23 19 18 12 11 11 11 11 11 15 13 13 12 12 11 25 23 17 
+118 109 96 134 127 119 78 83 93 61 64 71 61 55 62 69 49 55 69 44 50 67 37 42 
+68 34 42 35 15 18 20 13 12 17 13 12 18 13 15 18 13 12 33 17 17 55 30 29 
+71 42 40 94 59 57 154 114 107 198 166 158 178 148 141 153 138 133 179 179 175 176 177 175 
+169 169 166 173 173 169 169 170 166 172 173 169 165 165 163 173 173 170 143 143 142 135 134 132 
+156 156 151 178 179 173 175 176 171 184 184 182 185 186 183 200 201 198 203 203 200 205 205 203 
+157 163 173 86 98 124 82 95 120 82 95 119 91 97 117 71 75 91 77 89 114 82 93 120 
+65 71 91 31 30 33 44 38 39 77 66 65 138 116 116 191 161 162 192 164 167 155 155 150 
+181 183 176 168 171 168 136 136 134 115 110 119 79 76 92 22 20 28 26 24 25 51 44 39 
+66 56 43 
+48 25 20 59 43 37 54 35 28 89 71 59 60 44 35 71 46 36 98 63 52 120 94 77 
+129 121 113 128 127 123 95 96 95 77 79 78 76 74 72 39 39 36 16 15 14 23 20 21 
+22 20 21 12 11 13 26 21 21 15 13 14 12 12 11 16 13 14 26 23 19 115 105 91 
+155 141 123 120 114 106 72 78 84 63 67 76 57 61 71 61 58 65 60 44 49 60 30 35 
+68 32 40 30 14 17 16 11 11 17 12 12 18 12 13 43 22 25 86 47 57 123 81 82 
+202 172 165 222 194 188 219 190 182 202 172 166 125 112 117 75 80 94 80 85 101 71 76 90 
+70 72 79 70 73 80 82 88 93 102 109 115 100 107 112 123 126 134 114 119 126 112 118 124 
+126 129 132 142 146 148 134 137 138 143 145 146 154 156 155 175 176 174 185 187 184 193 197 198 
+111 120 139 76 87 116 70 80 109 78 90 119 74 87 115 67 83 109 76 91 120 79 93 121 
+82 91 119 76 70 85 137 105 113 163 120 132 181 137 150 167 130 141 129 113 115 153 156 149 
+181 181 176 170 171 169 163 163 158 115 108 109 52 46 45 21 21 20 40 37 33 58 49 44 
+70 58 49 
+65 36 31 124 116 110 40 35 31 78 55 39 86 63 43 73 46 36 109 72 58 126 98 83 
+136 130 124 120 121 117 104 104 102 82 82 81 85 84 77 35 35 32 16 15 15 23 20 19 
+21 20 20 13 12 13 25 21 22 19 17 18 17 16 15 22 20 19 98 90 84 119 108 97 
+108 99 89 78 74 66 42 44 46 42 44 51 46 47 56 48 48 56 31 31 36 22 18 17 
+23 15 15 20 13 13 18 12 12 18 12 12 19 13 13 36 18 19 75 38 38 107 57 54 
+149 107 98 155 115 109 133 100 91 87 73 80 63 68 89 70 76 103 74 83 108 78 88 114 
+72 78 103 69 78 98 73 82 105 79 89 113 76 86 110 79 90 115 80 88 114 78 89 113 
+77 90 108 82 94 114 92 98 120 99 103 122 101 109 122 119 128 141 97 106 124 79 89 110 
+74 87 112 64 75 102 71 82 108 77 90 118 74 88 116 75 86 114 75 89 117 75 89 115 
+78 88 115 93 85 101 134 95 98 135 93 110 95 70 81 70 61 61 66 63 62 71 73 72 
+85 89 88 79 82 84 77 78 78 81 75 73 41 36 35 26 24 22 61 50 44 68 56 49 
+71 59 52 
+79 39 28 61 41 35 25 17 16 75 51 34 138 100 69 93 64 46 119 81 64 118 90 75 
+123 118 112 128 126 124 102 102 99 81 81 79 84 81 75 28 28 26 14 14 14 22 18 19 
+21 20 20 15 13 14 23 18 19 19 18 19 19 17 18 37 37 38 39 39 38 28 28 29 
+26 27 27 22 23 26 9 10 14 9 9 12 13 14 18 16 16 18 18 16 16 19 18 16 
+17 15 15 15 14 14 16 14 13 17 13 14 21 15 16 25 16 15 29 17 15 38 20 18 
+46 25 20 71 47 31 129 98 79 94 76 71 41 43 58 51 54 75 49 56 78 49 54 75 
+48 56 79 54 64 85 59 69 89 73 82 107 70 81 106 65 75 100 51 60 82 45 53 76 
+40 45 65 39 44 64 40 47 66 43 47 67 38 43 60 41 49 69 48 58 78 58 70 91 
+71 83 108 76 87 114 72 82 112 62 71 99 58 69 94 72 83 110 78 90 117 75 88 116 
+68 81 108 112 107 111 135 108 96 111 77 69 75 60 55 71 60 53 58 49 48 26 28 29 
+36 52 61 39 53 69 33 39 51 42 40 40 24 22 18 61 51 43 64 54 50 67 56 50 
+74 63 54 
+87 44 30 47 24 18 78 51 43 70 51 39 123 92 67 112 78 57 122 80 63 112 86 71 
+121 117 112 123 120 117 99 99 96 79 79 76 72 70 64 21 20 20 15 15 15 21 17 18 
+19 18 18 21 18 18 23 19 18 24 23 23 23 23 23 30 32 31 26 26 26 23 24 23 
+21 24 29 11 14 22 10 10 16 17 19 26 23 23 30 15 13 14 13 12 13 17 13 14 
+15 13 14 15 13 13 17 13 13 25 17 15 37 27 24 29 20 17 42 28 19 70 49 37 
+101 72 54 138 94 73 136 86 69 126 84 75 55 39 38 20 20 26 21 21 30 25 25 34 
+28 30 42 34 39 54 40 45 63 64 71 93 74 83 109 72 82 110 58 67 92 44 53 76 
+31 35 54 22 25 37 19 23 34 21 24 36 38 43 58 55 65 83 69 81 103 70 81 105 
+65 76 100 57 66 92 48 59 82 49 55 80 51 60 86 68 77 102 77 87 114 78 90 117 
+67 76 102 126 118 114 170 147 126 136 105 87 111 76 65 68 46 41 29 22 23 17 17 19 
+37 51 60 42 60 80 33 39 50 25 25 25 19 19 17 50 42 35 66 55 52 66 58 52 
+69 58 53 
+86 43 30 53 29 21 52 36 29 85 59 45 86 62 47 121 87 66 117 74 56 106 88 72 
+115 112 108 114 113 109 91 90 88 85 83 79 64 61 55 18 18 17 16 14 15 19 16 17 
+17 18 17 25 23 23 28 23 22 30 30 28 28 28 27 28 28 29 24 24 27 22 25 32 
+14 17 29 21 23 33 28 29 39 24 24 34 17 16 22 16 13 14 14 9 11 16 8 10 
+21 9 8 40 15 10 70 26 16 95 42 23 106 52 28 113 59 33 129 72 43 138 82 54 
+140 82 55 135 76 52 132 78 59 128 76 69 114 78 74 44 32 32 17 16 20 17 17 20 
+18 17 20 19 20 25 24 25 33 40 44 59 63 71 96 79 89 117 83 93 123 82 93 121 
+76 88 115 71 82 107 65 73 96 70 78 102 69 77 104 65 73 99 61 71 95 55 62 85 
+48 54 78 45 53 74 51 58 81 59 69 91 61 73 95 61 70 94 64 74 97 75 86 111 
+67 72 95 144 132 120 171 149 129 163 138 120 123 87 70 117 79 65 35 25 20 16 16 16 
+36 40 43 41 57 75 33 36 41 19 19 20 14 15 15 49 43 36 68 58 53 68 60 54 
+73 62 55 
+109 80 74 110 88 81 74 61 53 54 41 29 68 40 30 119 87 68 108 71 52 81 67 54 
+92 90 87 108 106 104 84 83 82 92 89 84 51 49 45 18 17 17 18 15 16 21 19 20 
+17 15 15 32 30 29 34 28 26 25 23 23 29 29 28 26 27 27 29 29 35 25 30 42 
+29 30 42 25 29 41 28 27 39 38 29 35 50 27 29 57 24 18 61 22 14 69 23 15 
+81 31 17 90 34 18 94 37 19 103 42 20 111 44 17 116 45 17 124 51 19 126 56 27 
+132 65 35 133 71 44 132 77 56 128 74 62 122 74 67 116 78 72 60 43 43 16 14 16 
+15 15 18 16 16 20 19 18 23 22 21 29 36 40 54 49 56 76 65 73 100 69 79 106 
+70 78 105 63 72 100 56 67 91 54 61 86 48 55 78 44 49 72 37 42 62 34 40 58 
+43 53 72 56 65 86 60 71 96 62 73 96 57 66 88 32 38 56 33 40 53 66 75 98 
+71 75 85 162 143 124 169 148 125 172 151 129 146 117 98 137 95 77 97 66 55 16 14 14 
+52 51 48 50 65 81 28 30 35 18 19 20 15 15 14 46 37 32 68 58 50 69 59 51 
+74 63 53 
+38 20 16 29 16 13 84 83 80 118 115 110 68 39 32 112 84 65 98 70 50 42 37 29 
+94 91 87 91 92 89 78 77 74 89 85 78 41 39 36 22 19 18 20 18 19 20 17 18 
+18 16 17 32 31 29 35 29 29 22 22 23 35 34 36 38 38 45 28 31 42 25 28 40 
+37 32 44 49 36 44 68 35 36 77 31 26 85 33 21 90 34 22 94 36 19 93 37 18 
+100 42 20 103 44 20 105 45 19 106 45 20 107 46 21 111 47 22 118 51 25 118 51 23 
+123 54 25 126 61 35 133 72 49 132 76 57 127 73 57 121 74 59 118 80 73 99 71 67 
+60 47 46 29 23 25 19 19 22 20 19 23 23 22 27 29 29 41 35 40 55 43 46 69 
+44 49 71 41 46 67 36 40 58 35 38 55 30 32 47 29 31 50 42 48 68 51 60 83 
+49 59 81 56 65 90 64 74 100 60 69 97 67 77 103 66 72 96 24 25 39 54 61 80 
+119 110 102 164 142 120 165 144 121 171 150 128 167 139 117 128 90 75 126 83 69 59 43 36 
+44 41 41 44 55 67 24 25 26 18 18 18 16 16 16 39 32 26 67 54 44 70 61 49 
+73 60 52 
+18 10 9 19 11 12 62 63 62 92 85 79 78 43 32 109 81 60 83 59 41 33 28 24 
+59 56 53 76 77 76 85 82 79 79 72 68 35 33 30 23 19 18 19 19 18 18 16 17 
+25 22 23 36 34 38 28 29 35 20 23 29 25 27 38 24 29 42 32 31 43 42 30 39 
+46 24 27 59 28 22 77 40 29 96 61 45 101 69 54 96 63 47 102 69 51 101 67 48 
+106 71 51 110 77 56 103 73 53 115 82 61 123 89 66 125 85 59 122 74 48 125 71 46 
+124 64 42 124 64 42 125 68 50 131 78 59 132 77 62 129 75 58 126 73 61 122 75 63 
+119 81 74 113 81 78 92 69 70 56 44 45 23 20 23 23 22 28 27 25 35 24 24 36 
+24 23 35 22 21 33 21 21 32 29 30 42 42 47 63 53 60 82 50 59 84 45 54 77 
+44 51 74 54 63 88 70 82 109 75 89 117 72 86 114 76 84 114 54 59 82 70 73 77 
+154 136 117 163 142 120 164 142 119 167 147 126 177 150 126 123 89 72 130 84 69 103 68 56 
+56 49 48 44 50 59 23 23 26 17 17 18 16 16 19 32 26 22 60 46 36 63 52 45 
+68 55 52 
+23 13 15 21 15 15 67 68 65 66 51 44 79 42 28 129 97 73 54 43 32 31 26 22 
+40 36 34 74 73 73 81 78 73 68 63 58 35 32 30 20 16 17 11 11 11 32 30 32 
+37 37 42 23 25 35 19 21 33 24 26 38 26 28 38 32 24 34 36 20 24 42 25 24 
+69 50 42 73 53 42 76 54 45 75 53 44 70 51 37 74 50 38 71 51 39 79 57 43 
+94 70 56 101 77 60 111 91 72 107 84 67 106 83 66 114 86 70 118 89 69 117 87 70 
+124 87 70 122 79 62 129 77 60 128 77 58 130 82 67 127 81 69 128 75 64 126 72 60 
+120 69 59 116 70 64 114 72 71 119 86 86 105 80 78 68 56 60 29 28 35 25 24 30 
+26 25 37 31 32 47 42 43 62 53 56 77 56 62 86 51 57 83 47 52 78 45 51 76 
+42 50 73 48 58 83 68 79 104 73 87 113 79 88 117 79 88 118 77 89 117 81 90 112 
+134 123 113 159 138 115 163 140 118 173 155 136 175 147 125 132 98 82 136 92 80 131 85 70 
+57 43 38 41 41 49 22 22 25 16 16 16 16 17 16 33 28 27 58 46 36 69 56 45 
+73 58 48 
+31 20 19 53 42 37 62 52 47 62 33 26 72 40 27 138 104 75 54 44 33 29 24 21 
+30 28 26 66 64 62 78 74 70 64 59 55 38 34 31 28 26 28 34 36 43 26 27 33 
+15 16 24 20 20 30 21 23 33 25 20 28 28 17 22 33 21 22 53 40 35 51 41 36 
+50 38 33 54 36 28 70 54 44 72 58 47 80 69 55 85 71 59 93 81 70 91 79 67 
+78 66 56 73 60 50 70 60 52 85 75 63 100 86 72 105 84 71 109 88 72 105 82 69 
+117 91 78 124 100 85 122 98 83 127 88 71 128 81 68 122 79 68 121 79 72 120 74 68 
+122 73 63 119 69 62 117 69 67 120 83 81 123 93 90 123 92 87 105 84 82 64 55 58 
+43 45 61 44 49 70 51 58 80 51 60 84 53 61 83 50 57 82 45 53 75 45 50 74 
+42 48 72 46 53 77 55 63 87 63 74 100 71 82 110 75 89 116 75 90 117 79 90 117 
+91 95 112 145 127 113 160 138 117 180 160 141 161 131 107 136 108 92 137 94 81 138 85 67 
+99 73 64 36 37 43 21 21 23 16 16 20 15 15 18 37 32 29 57 44 38 69 55 42 
+75 59 47 
+30 15 15 76 56 45 33 21 14 57 32 20 42 23 12 115 82 55 65 54 40 50 43 35 
+62 56 45 83 75 67 86 78 69 79 70 64 49 49 51 28 30 39 14 17 25 15 14 19 
+16 17 26 20 19 29 24 16 22 26 15 18 31 21 21 35 27 26 28 22 20 35 26 25 
+53 44 38 58 48 37 60 48 41 58 46 40 30 23 20 31 23 19 32 21 17 31 19 17 
+26 16 13 26 17 16 26 18 15 25 17 16 40 30 24 44 35 26 85 71 59 97 80 68 
+110 90 77 118 98 85 141 123 112 140 121 110 129 103 87 133 95 83 124 83 76 116 74 72 
+115 70 71 121 73 68 118 73 68 122 77 73 116 76 77 118 81 73 118 85 81 124 95 89 
+99 82 88 70 69 88 59 66 90 55 63 89 54 59 84 50 57 81 49 55 78 48 54 77 
+47 54 78 52 60 86 57 64 91 58 70 96 63 75 101 71 82 109 75 88 115 78 89 119 
+80 88 118 100 100 109 164 147 131 179 156 137 143 110 88 155 126 113 138 94 80 136 85 67 
+120 86 75 36 35 42 21 21 24 16 16 21 14 14 15 34 30 24 52 44 45 54 46 45 
+62 52 50 
+36 25 20 68 52 41 63 54 46 90 72 59 75 70 59 91 82 71 92 87 80 98 93 85 
+100 98 92 102 98 94 80 75 73 34 35 40 17 21 28 14 14 18 13 13 18 16 15 25 
+16 16 22 17 14 16 24 14 17 32 23 22 36 30 30 23 21 20 26 24 21 46 43 38 
+48 41 35 37 27 21 26 15 14 26 15 12 25 17 14 27 17 16 28 16 12 34 20 16 
+30 17 15 27 16 15 26 17 16 28 17 16 31 19 16 30 18 16 31 19 16 35 22 19 
+53 40 32 97 82 70 127 108 90 147 130 121 171 157 149 141 121 107 145 115 105 138 105 98 
+121 87 84 117 81 80 118 78 79 121 83 82 120 82 79 121 80 75 124 82 74 128 90 82 
+122 89 87 111 87 87 72 65 79 52 57 80 49 53 77 47 52 76 48 52 76 47 50 74 
+45 51 75 47 55 80 51 60 84 54 63 88 55 62 88 59 68 95 66 77 102 72 83 110 
+79 89 118 82 93 120 133 129 128 170 143 122 123 91 70 172 142 131 147 100 78 143 89 66 
+129 86 68 36 35 35 20 20 22 16 17 20 13 12 13 32 28 21 60 49 44 66 54 50 
+73 61 52 
+84 85 78 93 92 87 93 94 92 101 99 95 94 96 95 95 95 96 91 90 89 91 86 82 
+75 75 72 56 56 57 24 26 31 17 18 23 14 13 19 15 14 19 15 14 20 15 14 19 
+15 12 13 17 15 15 31 23 24 36 30 29 17 16 16 30 28 26 31 27 25 24 20 16 
+29 18 14 27 15 11 26 15 12 27 14 13 29 15 12 28 15 11 29 16 10 31 15 12 
+33 16 15 29 17 15 30 17 15 32 18 16 34 19 16 33 19 15 35 21 17 37 21 18 
+36 20 19 42 28 23 79 64 51 104 87 73 143 128 121 164 149 136 138 121 108 148 124 114 
+169 145 139 154 127 115 123 98 91 132 98 92 136 104 99 133 96 88 127 91 84 135 99 92 
+128 90 86 129 89 85 119 86 80 97 77 79 49 48 65 44 47 68 45 48 72 45 50 74 
+51 56 82 52 63 88 55 63 91 58 65 91 59 67 92 60 68 95 62 73 100 68 79 106 
+77 84 114 79 90 119 111 111 120 162 131 111 135 108 89 180 151 144 156 110 89 143 90 67 
+145 98 70 50 44 41 20 20 24 16 16 18 15 15 15 37 30 24 62 52 43 71 57 49 
+72 58 49 
