diff --git a/changelog b/changelog
--- a/changelog
+++ b/changelog
@@ -1,3 +1,17 @@
+tip-lib 0.2 (released 2015-10-28):
+* New output modes:
+    * Haskell with support for Feat, QuickCheck, LazySmallCheck, and smten.
+    * TFF
+    * SMTLIB with axiomatised function definitions
+* New passes to manipulate assertions,
+  apply structural induction, monomorphise, transform
+  booleans and integers, axiomatize function declarations.
+* Parser changes:
+    * Support declare-const, define-fun, define-fun-rec.
+    * Correctly handle let-expressions
+* Pretty print chained let expressions in groups
+* New helper exports in Tip.Core and Tip.Utils
+
 tip-lib 0.1.2 (released 2015-06-11):
 * Make haddock documentation build (reported by Peter Simons.)
 
diff --git a/dist/build/Tip/Parser/LexTIP.hs b/dist/build/Tip/Parser/LexTIP.hs
--- a/dist/build/Tip/Parser/LexTIP.hs
+++ b/dist/build/Tip/Parser/LexTIP.hs
@@ -29,18 +29,18 @@
 import GlaExts
 #endif
 alex_base :: AlexAddr
-alex_base = AlexA# "\xf8\xff\xff\xff\xb8\xff\xff\xff\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\x2d\x01\x00\x00\xad\x01\x00\x00\xed\x01\x00\x00\x2d\x02\x00\x00\xed\x02\x00\x00\xad\x02\x00\x00\x00\x00\x00\x00\xa3\x03\x00\x00\xff\xff\xff\xff\x82\x04\x00\x00\xe5\x04\x00\x00\x00\x00\x00\x00\x48\x05\x00\x00\xab\x05\x00\x00\x0e\x06\x00\x00\x71\x06\x00\x00\xd4\x06\x00\x00\x37\x07\x00\x00\x9a\x07\x00\x00\xfd\x07\x00\x00\x60\x08\x00\x00\xc3\x08\x00\x00\x26\x09\x00\x00\x89\x09\x00\x00\xec\x09\x00\x00\x4f\x0a\x00\x00\xb2\x0a\x00\x00\x15\x0b\x00\x00\x78\x0b\x00\x00\xdb\x0b\x00\x00\x3e\x0c\x00\x00\xa1\x0c\x00\x00\x04\x0d\x00\x00\x67\x0d\x00\x00\xca\x0d\x00\x00\x2d\x0e\x00\x00\x90\x0e\x00\x00\xf3\x0e\x00\x00\x56\x0f\x00\x00\xb9\x0f\x00\x00\x1c\x10\x00\x00\x7f\x10\x00\x00\xe2\x10\x00\x00\x45\x11\x00\x00\xa8\x11\x00\x00\x0b\x12\x00\x00\x6e\x12\x00\x00\xd1\x12\x00\x00\x34\x13\x00\x00\x97\x13\x00\x00\xfa\x13\x00\x00\x5d\x14\x00\x00\xc0\x14\x00\x00\x23\x15\x00\x00\x86\x15\x00\x00\xe9\x15\x00\x00\x4c\x16\x00\x00\xaf\x16\x00\x00\x12\x17\x00\x00\x75\x17\x00\x00\xd8\x17\x00\x00\x3b\x18\x00\x00\x9e\x18\x00\x00\x01\x19\x00\x00\xdd\xff\xff\xff"#
+alex_base = AlexA# "\xf8\xff\xff\xff\xb8\xff\xff\xff\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\x2d\x01\x00\x00\xad\x01\x00\x00\xed\x01\x00\x00\x2d\x02\x00\x00\xed\x02\x00\x00\xad\x02\x00\x00\x00\x00\x00\x00\xa3\x03\x00\x00\xff\xff\xff\xff\x82\x04\x00\x00\xe5\x04\x00\x00\x48\x05\x00\x00\x00\x00\x00\x00\xab\x05\x00\x00\x0e\x06\x00\x00\x71\x06\x00\x00\xd4\x06\x00\x00\x37\x07\x00\x00\x9a\x07\x00\x00\xfd\x07\x00\x00\x60\x08\x00\x00\xc3\x08\x00\x00\x26\x09\x00\x00\x89\x09\x00\x00\xec\x09\x00\x00\x4f\x0a\x00\x00\xb2\x0a\x00\x00\x15\x0b\x00\x00\x78\x0b\x00\x00\xdb\x0b\x00\x00\x3e\x0c\x00\x00\xa1\x0c\x00\x00\x04\x0d\x00\x00\x67\x0d\x00\x00\xca\x0d\x00\x00\x2d\x0e\x00\x00\x90\x0e\x00\x00\xf3\x0e\x00\x00\x56\x0f\x00\x00\xb9\x0f\x00\x00\x1c\x10\x00\x00\x7f\x10\x00\x00\xe2\x10\x00\x00\x45\x11\x00\x00\xa8\x11\x00\x00\x0b\x12\x00\x00\x6e\x12\x00\x00\xd1\x12\x00\x00\x34\x13\x00\x00\x97\x13\x00\x00\xfa\x13\x00\x00\x5d\x14\x00\x00\xc0\x14\x00\x00\x23\x15\x00\x00\x86\x15\x00\x00\xe9\x15\x00\x00\x4c\x16\x00\x00\xaf\x16\x00\x00\x12\x17\x00\x00\x75\x17\x00\x00\xd8\x17\x00\x00\x3b\x18\x00\x00\x9e\x18\x00\x00\x01\x19\x00\x00\x64\x19\x00\x00\xc7\x19\x00\x00\x2a\x1a\x00\x00\xdd\xff\xff\xff"#
 
 alex_table :: AlexAddr
-alex_table = AlexA# "\x00\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x00\x00\x00\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x00\x00\x0e\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x0e\x00\x11\x00\x11\x00\x10\x00\x10\x00\x00\x00\x10\x00\x33\x00\x33\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x00\x00\x0d\x00\x0f\x00\x12\x00\x0f\x00\x33\x00\x10\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x2e\x00\x32\x00\x35\x00\x30\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x0b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x08\x00\x01\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x06\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x0a\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x00\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x00\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0b\x00\x06\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x01\x00\x05\x00\x04\x00\x04\x00\x04\x00\x03\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x10\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x10\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x10\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x10\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x13\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x44\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x14\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x43\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x43\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x18\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x42\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x41\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x40\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x09\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x3f\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x1a\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x09\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x3e\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x08\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x1c\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x09\x00\x32\x00\x32\x00\x32\x00\x32\x00\x1d\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x08\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x1f\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x08\x00\x3d\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x09\x00\x32\x00\x32\x00\x23\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x3b\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x09\x00\x3a\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x08\x00\x32\x00\x32\x00\x32\x00\x32\x00\x25\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x08\x00\x32\x00\x32\x00\x32\x00\x32\x00\x39\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x08\x00\x38\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x09\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x29\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x37\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x08\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x08\x00\x32\x00\x32\x00\x36\x00\x32\x00\x32\x00\x31\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x08\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x2b\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x08\x00\x32\x00\x32\x00\x32\x00\x32\x00\x2c\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x08\x00\x32\x00\x32\x00\x32\x00\x32\x00\x2d\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x08\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x34\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x08\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x09\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x2f\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x08\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x28\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x08\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x27\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x26\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x24\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x09\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x3c\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x08\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x22\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x21\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x09\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x20\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x1e\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x19\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x17\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x2a\x00\x33\x00\x16\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x1b\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x15\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x43\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x10\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x10\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x09\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
+alex_table = AlexA# "\x00\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x00\x00\x00\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x00\x00\x0e\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x0e\x00\x12\x00\x12\x00\x11\x00\x11\x00\x00\x00\x12\x00\x34\x00\x34\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x00\x00\x0d\x00\x0f\x00\x13\x00\x0f\x00\x34\x00\x11\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x32\x00\x33\x00\x35\x00\x31\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x0b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x08\x00\x01\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x06\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x0a\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x00\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x00\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0b\x00\x06\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x01\x00\x05\x00\x04\x00\x04\x00\x04\x00\x03\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x11\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x43\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x1f\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x11\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x11\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x11\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x14\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x46\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x47\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x15\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x45\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x45\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x45\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x1a\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x44\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x43\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x42\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x41\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x08\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x40\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x1d\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x3f\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x08\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x3e\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x21\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x20\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x23\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x08\x00\x3d\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x09\x00\x33\x00\x33\x00\x28\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x3b\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x08\x00\x3a\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x2a\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x39\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x08\x00\x38\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x2e\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x37\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x30\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x08\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x2d\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x2c\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x08\x00\x33\x00\x33\x00\x36\x00\x33\x00\x33\x00\x2b\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x08\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x29\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x3c\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x26\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x27\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x24\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x08\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x22\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x1c\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x1b\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x19\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x25\x00\x2f\x00\x34\x00\x17\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x1e\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x18\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x16\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x45\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x11\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x11\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x10\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x09\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
 
 alex_check :: AlexAddr
-alex_check = AlexA# "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x20\x00\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x20\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xff\xff\xc3\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\xff\xff\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xff\xff\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\xff\xff\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xff\xff\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\xff\xff\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xff\xff\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
+alex_check = AlexA# "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x20\x00\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x20\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xff\xff\xc3\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\xff\xff\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xff\xff\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\xff\xff\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xff\xff\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\xff\xff\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xff\xff\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
 
 alex_deflt :: AlexAddr
-alex_deflt = AlexA# "\xff\xff\x0c\x00\x0c\x00\x02\x00\x02\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0d\x00\x0d\x00\x0d\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
+alex_deflt = AlexA# "\xff\xff\x0c\x00\x0c\x00\x02\x00\x02\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0d\x00\x0d\x00\x0d\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
 
-alex_accept = listArray (0::Int,70) [AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccSkip,AlexAccSkip,AlexAcc (alex_action_2),AlexAcc (alex_action_2),AlexAcc (alex_action_2),AlexAcc (alex_action_2),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_4),AlexAcc (alex_action_5)]
+alex_accept = listArray (0::Int,73) [AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccSkip,AlexAccSkip,AlexAcc (alex_action_2),AlexAcc (alex_action_2),AlexAcc (alex_action_2),AlexAcc (alex_action_2),AlexAcc (alex_action_2),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_4),AlexAcc (alex_action_5)]
 {-# LINE 38 "src/Tip/Parser/LexTIP.x" #-}
 
 
@@ -106,7 +106,7 @@
                               | s == a = t
 
 resWords :: BTree
-resWords = b "check-sat" 20 (b ">" 10 (b "-" 5 (b "*" 3 (b ")" 2 (b "(" 1 N N) N) (b "+" 4 N N)) (b "=" 8 (b "<=" 7 (b "<" 6 N N) N) (b "=>" 9 N N))) (b "and" 15 (b "Bool" 13 (b "@" 12 (b ">=" 11 N N) N) (b "Int" 14 N N)) (b "assert-not" 18 (b "assert" 17 (b "as" 16 N N) N) (b "case" 19 N N)))) (b "forall" 30 (b "define-funs-rec" 25 (b "declare-sort" 23 (b "declare-fun" 22 (b "declare-datatypes" 21 N N) N) (b "default" 24 N N)) (b "exists" 28 (b "div" 27 (b "distinct" 26 N N) N) (b "false" 29 N N))) (b "mod" 35 (b "let" 33 (b "lambda" 32 (b "ite" 31 N N) N) (b "match" 34 N N)) (b "par" 38 (b "or" 37 (b "not" 36 N N) N) (b "true" 39 N N))))
+resWords = b "declare-datatypes" 22 (b ">=" 11 (b "<" 6 (b "*" 3 (b ")" 2 (b "(" 1 N N) N) (b "-" 5 (b "+" 4 N N) N)) (b "=>" 9 (b "=" 8 (b "<=" 7 N N) N) (b ">" 10 N N))) (b "assert" 17 (b "Int" 14 (b "Bool" 13 (b "@" 12 N N) N) (b "as" 16 (b "and" 15 N N) N)) (b "check-sat" 20 (b "case" 19 (b "assert-not" 18 N N) N) (b "declare-const" 21 N N)))) (b "forall" 33 (b "define-funs-rec" 28 (b "default" 25 (b "declare-sort" 24 (b "declare-fun" 23 N N) N) (b "define-fun-rec" 27 (b "define-fun" 26 N N) N)) (b "exists" 31 (b "div" 30 (b "distinct" 29 N N) N) (b "false" 32 N N))) (b "mod" 38 (b "let" 36 (b "lambda" 35 (b "ite" 34 N N) N) (b "match" 37 N N)) (b "par" 41 (b "or" 40 (b "not" 39 N N) N) (b "true" 42 N N))))
    where b s n = let bs = id s
                   in B bs (TS bs n)
 
@@ -242,8 +242,13 @@
 
 
 
+
+
+
+
+
 {-# LINE 10 "<command-line>" #-}
-{-# LINE 1 "/usr/lib/ghc-7.10.1/include/ghcversion.h" #-}
+{-# LINE 1 "/usr/lib/ghc-7.10.2/include/ghcversion.h" #-}
 
 
 
diff --git a/dist/build/Tip/Parser/ParTIP.hs b/dist/build/Tip/Parser/ParTIP.hs
--- a/dist/build/Tip/Parser/ParTIP.hs
+++ b/dist/build/Tip/Parser/ParTIP.hs
@@ -18,1207 +18,1365 @@
 #else
 type HappyAny = forall a . a
 #endif
-happyIn31 :: (Integer) -> (HappyAbsSyn )
-happyIn31 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn31 #-}
-happyOut31 :: (HappyAbsSyn ) -> (Integer)
-happyOut31 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut31 #-}
-happyIn32 :: (Symbol) -> (HappyAbsSyn )
-happyIn32 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn32 #-}
-happyOut32 :: (HappyAbsSyn ) -> (Symbol)
-happyOut32 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut32 #-}
-happyIn33 :: (Start) -> (HappyAbsSyn )
-happyIn33 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn33 #-}
-happyOut33 :: (HappyAbsSyn ) -> (Start)
-happyOut33 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut33 #-}
-happyIn34 :: ([Decl]) -> (HappyAbsSyn )
-happyIn34 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn34 #-}
-happyOut34 :: (HappyAbsSyn ) -> ([Decl])
-happyOut34 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut34 #-}
-happyIn35 :: (Decl) -> (HappyAbsSyn )
-happyIn35 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn35 #-}
-happyOut35 :: (HappyAbsSyn ) -> (Decl)
-happyOut35 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut35 #-}
-happyIn36 :: (Assertion) -> (HappyAbsSyn )
-happyIn36 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn36 #-}
-happyOut36 :: (HappyAbsSyn ) -> (Assertion)
-happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut36 #-}
-happyIn37 :: (FunDef) -> (HappyAbsSyn )
-happyIn37 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn37 #-}
-happyOut37 :: (HappyAbsSyn ) -> (FunDef)
-happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut37 #-}
-happyIn38 :: (InnerFunDef) -> (HappyAbsSyn )
-happyIn38 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn38 #-}
-happyOut38 :: (HappyAbsSyn ) -> (InnerFunDef)
-happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut38 #-}
-happyIn39 :: (FunDecl) -> (HappyAbsSyn )
-happyIn39 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn39 #-}
-happyOut39 :: (HappyAbsSyn ) -> (FunDecl)
-happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut39 #-}
-happyIn40 :: (InnerFunDecl) -> (HappyAbsSyn )
-happyIn40 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn40 #-}
-happyOut40 :: (HappyAbsSyn ) -> (InnerFunDecl)
-happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut40 #-}
-happyIn41 :: (Datatype) -> (HappyAbsSyn )
-happyIn41 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn41 #-}
-happyOut41 :: (HappyAbsSyn ) -> (Datatype)
-happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut41 #-}
-happyIn42 :: (Constructor) -> (HappyAbsSyn )
-happyIn42 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn42 #-}
-happyOut42 :: (HappyAbsSyn ) -> (Constructor)
-happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut42 #-}
-happyIn43 :: (Binding) -> (HappyAbsSyn )
-happyIn43 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn43 #-}
-happyOut43 :: (HappyAbsSyn ) -> (Binding)
-happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut43 #-}
-happyIn44 :: (LetDecl) -> (HappyAbsSyn )
-happyIn44 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn44 #-}
-happyOut44 :: (HappyAbsSyn ) -> (LetDecl)
-happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut44 #-}
-happyIn45 :: (Type) -> (HappyAbsSyn )
-happyIn45 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn45 #-}
-happyOut45 :: (HappyAbsSyn ) -> (Type)
-happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut45 #-}
-happyIn46 :: (Expr) -> (HappyAbsSyn )
-happyIn46 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn46 #-}
-happyOut46 :: (HappyAbsSyn ) -> (Expr)
-happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut46 #-}
-happyIn47 :: (Binder) -> (HappyAbsSyn )
-happyIn47 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn47 #-}
-happyOut47 :: (HappyAbsSyn ) -> (Binder)
-happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut47 #-}
-happyIn48 :: (Case) -> (HappyAbsSyn )
-happyIn48 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn48 #-}
-happyOut48 :: (HappyAbsSyn ) -> (Case)
-happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut48 #-}
-happyIn49 :: (Pattern) -> (HappyAbsSyn )
-happyIn49 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn49 #-}
-happyOut49 :: (HappyAbsSyn ) -> (Pattern)
-happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut49 #-}
-happyIn50 :: (Head) -> (HappyAbsSyn )
-happyIn50 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn50 #-}
-happyOut50 :: (HappyAbsSyn ) -> (Head)
-happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut50 #-}
-happyIn51 :: ([LetDecl]) -> (HappyAbsSyn )
-happyIn51 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn51 #-}
-happyOut51 :: (HappyAbsSyn ) -> ([LetDecl])
-happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut51 #-}
-happyIn52 :: ([Case]) -> (HappyAbsSyn )
-happyIn52 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn52 #-}
-happyOut52 :: (HappyAbsSyn ) -> ([Case])
-happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut52 #-}
-happyIn53 :: ([Expr]) -> (HappyAbsSyn )
-happyIn53 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn53 #-}
-happyOut53 :: (HappyAbsSyn ) -> ([Expr])
-happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut53 #-}
-happyIn54 :: ([Datatype]) -> (HappyAbsSyn )
-happyIn54 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn54 #-}
-happyOut54 :: (HappyAbsSyn ) -> ([Datatype])
-happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut54 #-}
-happyIn55 :: ([Constructor]) -> (HappyAbsSyn )
-happyIn55 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn55 #-}
-happyOut55 :: (HappyAbsSyn ) -> ([Constructor])
-happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut55 #-}
-happyIn56 :: ([Binding]) -> (HappyAbsSyn )
-happyIn56 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn56 #-}
-happyOut56 :: (HappyAbsSyn ) -> ([Binding])
-happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut56 #-}
-happyIn57 :: ([Symbol]) -> (HappyAbsSyn )
-happyIn57 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn57 #-}
-happyOut57 :: (HappyAbsSyn ) -> ([Symbol])
-happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut57 #-}
-happyIn58 :: ([Type]) -> (HappyAbsSyn )
-happyIn58 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn58 #-}
-happyOut58 :: (HappyAbsSyn ) -> ([Type])
-happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut58 #-}
-happyIn59 :: ([FunDecl]) -> (HappyAbsSyn )
-happyIn59 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn59 #-}
-happyOut59 :: (HappyAbsSyn ) -> ([FunDecl])
-happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut59 #-}
-happyIn60 :: ([FunDef]) -> (HappyAbsSyn )
-happyIn60 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn60 #-}
-happyOut60 :: (HappyAbsSyn ) -> ([FunDef])
-happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut60 #-}
-happyInTok :: (Token) -> (HappyAbsSyn )
-happyInTok x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyInTok #-}
-happyOutTok :: (HappyAbsSyn ) -> (Token)
-happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOutTok #-}
-
-
-happyActOffsets :: HappyAddr
-happyActOffsets = HappyA# "\x8f\x01\x8f\x01\x76\x00\x1d\x01\x8e\x01\x8c\x01\x4f\x00\x84\x01\x8b\x01\x8a\x01\x89\x01\x88\x01\x4e\x00\x4d\x00\xff\x00\x87\x01\x24\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x83\x01\x00\x00\x0b\x00\x05\x00\x03\x00\x03\x01\x0a\x00\x09\x00\x08\x00\x01\x00\x07\x00\x06\x00\x00\x00\x82\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x01\x81\x01\x00\x00\x7f\x01\x7e\x01\x7a\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x01\xa1\x00\x00\x00\x00\x00\x00\x00\x7a\x01\xf8\xff\x00\x00\x00\x00\x7a\x01\x80\x01\x79\x01\x77\x01\x70\x01\x69\x01\x64\x01\x5e\x01\x7d\x01\x5c\x01\x5c\x01\x00\x00\x51\x01\x5b\x01\x5a\x01\x58\x01\x00\x00\x68\x00\x58\x01\x00\x00\x00\x00\x58\x01\x3c\x00\x7c\x01\x4f\x00\x57\x01\x7b\x01\x55\x01\xfd\x00\x55\x01\x00\x00\x78\x01\x76\x01\x00\x00\x53\x01\x00\x00\x00\x00\x00\x00\x7a\x00\x75\x01\x74\x01\x73\x01\x00\x00\x00\x00\x00\x00\x4e\x00\x39\x00\x00\x00\x00\x00\x72\x01\x00\x00\x39\x00\x71\x01\x39\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x39\x00\x00\x00\x00\x00\x4e\x00\x1e\x00\x00\x00\x4a\x00\x36\x00\x6f\x01\x6e\x01\x29\x01\x27\x01\x16\x00\x00\x00\x00\x00\x00\x00\x6d\x01\x52\x00\x00\x00\x25\x01\x00\x00\x6c\x01\x00\x00\x6b\x01\x6a\x01\x00\x00\x23\x01\x51\x00\x50\x00\x4e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x01\x00\x00\x68\x01\x1f\x01\x18\x01\x67\x01\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x21\x00\x00\x00\x66\x01\x65\x01\x4e\x00\x10\x00\x00\x00\x00\x00\x19\x00\xdc\x00\x21\x00\x63\x01\x62\x01\x50\x01\x61\x01\x60\x01\x00\x00\x00\x00\x5f\x01\x00\x00\x00\x00\x52\x01\x00\x00\x00\x00\x00\x00\x4f\x01\x00\x00\x00\x00"#
-
-happyGotoOffsets :: HappyAddr
-happyGotoOffsets = HappyA# "\x00\x01\x4d\x01\xaf\x00\x4e\x01\xc2\x00\x4b\x01\x0f\x01\xb1\x00\x56\x01\x54\x01\x49\x01\x4c\x01\xfe\x00\xf7\x00\x46\x01\x47\x01\x5c\x00\x02\x00\x4a\x01\x48\x01\x44\x01\x45\x01\x43\x01\x3e\x01\x33\x01\x31\x01\x2f\x01\x2b\x01\x00\x00\x00\x00\x6b\x00\xad\x00\xfc\x00\x42\x01\x3a\x01\x3f\x01\x3d\x01\xf5\x00\x38\x01\x37\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x01\x00\x00\x00\x00\x00\x00\x32\x01\x00\x00\x3c\x01\x00\x00\x3b\x01\x00\x00\x39\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x36\x01\x00\x00\x00\x00\x36\x01\x00\x00\x00\x00\x00\x00\x00\x00\xf2\x00\x00\x00\x67\x00\x35\x01\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x01\x34\x01\x00\x00\x26\x01\x00\x00\x59\x00\x00\x00\x00\x00\x00\x00\x24\x01\x20\x01\x22\x01\xfb\x00\xef\x00\x1e\x01\x1a\x01\x00\x00\x1c\x01\xe5\x00\x00\x00\xdf\x00\x04\x00\x19\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x01\xdb\x00\x1b\x01\x08\x01\xfa\x00\xd9\x00\x05\x01\xf9\x00\xf9\x00\x00\x00\x00\x00\x09\x01\x02\x01\xf9\x00\xf1\x00\xeb\x00\xe7\x00\x00\x00\xf8\x00\x00\x00\x60\x00\x00\x00\xe6\x00\x00\x00\x00\x00\x00\x00\xc7\x00\xcc\x00\xbd\x00\xbd\x00\x5d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\x00\x00\x00\x00\x00\x8a\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd5\x00\x00\x00\xb8\x00\x00\x00\x00\x00\x66\x00\x18\x00\x26\x00\x3a\x00\xf9\xff\x92\x00\x13\x00\x0d\x00\x00\x00\x00\x00\xae\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
-
-happyDefActions :: HappyAddr
-happyDefActions = HappyA# "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa5\xff\xa3\xff\xa1\xff\x9f\xff\x9d\xff\x9b\xff\x99\xff\x97\xff\x95\xff\x93\xff\x00\x00\xe3\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\xff\x00\x00\xac\xff\xae\xff\xad\xff\xa7\xff\xa6\xff\xb0\xff\xb1\xff\xa9\xff\xa8\xff\xb6\xff\xb4\xff\xaf\xff\xab\xff\xb5\xff\xaa\xff\xb2\xff\xb3\xff\xe2\xff\xb8\xff\x00\x00\x00\x00\xba\xff\x00\x00\x00\x00\x00\x00\xbc\xff\xbd\xff\xbe\xff\xc1\xff\xc7\xff\x00\x00\x00\x00\xbf\xff\xc0\xff\xcc\xff\x00\x00\x00\x00\xc8\xff\xc9\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd2\xff\x00\x00\x00\x00\x00\x00\x00\x00\xd5\xff\x00\x00\x00\x00\xd8\xff\xd7\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe1\xff\x00\x00\x00\x00\x93\xff\x00\x00\xdc\xff\x99\xff\xda\xff\x00\x00\x00\x00\x00\x00\x00\x00\x97\xff\x9d\xff\x9b\xff\x00\x00\x00\x00\x97\xff\x97\xff\x00\x00\xa1\xff\x00\x00\x00\x00\x00\x00\x00\x00\x99\xff\xa4\xff\xa2\xff\xa0\xff\x9e\xff\x9c\xff\x9a\xff\x98\xff\x96\xff\x94\xff\x92\xff\x00\x00\x00\x00\xa3\xff\xa5\xff\x00\x00\x00\x00\x9b\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\xff\x99\xff\x9b\xff\x00\x00\x00\x00\xdd\xff\x00\x00\xe0\xff\x00\x00\xdf\xff\x00\x00\x00\x00\x99\xff\x00\x00\x00\x00\x00\x00\x00\x00\xd0\xff\xcf\xff\xce\xff\xcd\xff\xcb\xff\xca\xff\x00\x00\xc5\xff\x00\x00\x00\x00\x00\x00\x00\x00\xb9\xff\xbb\xff\xc4\xff\x00\x00\xc6\xff\x00\x00\xd1\xff\x00\x00\x00\x00\x00\x00\x00\x00\x9f\xff\xa1\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\xff\xc2\xff\x00\x00\xd6\xff\xd4\xff\x00\x00\xde\xff\xdb\xff\xd9\xff\x00\x00\xd3\xff"#
-
-happyCheck :: HappyAddr
-happyCheck = HappyA# "\xff\xff\x09\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x00\x00\x01\x00\x16\x00\x0d\x00\x0e\x00\x02\x00\x04\x00\x05\x00\x13\x00\x12\x00\x01\x00\x02\x00\x01\x00\x01\x00\x02\x00\x0f\x00\x0a\x00\x1d\x00\x01\x00\x02\x00\x29\x00\x01\x00\x0d\x00\x0e\x00\x01\x00\x0e\x00\x01\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x29\x00\x2a\x00\x29\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x1d\x00\x01\x00\x02\x00\x29\x00\x01\x00\x1d\x00\x18\x00\x01\x00\x1d\x00\x29\x00\x27\x00\x28\x00\x29\x00\x0d\x00\x0e\x00\x27\x00\x28\x00\x29\x00\x27\x00\x28\x00\x29\x00\x01\x00\x02\x00\x29\x00\x01\x00\x01\x00\x01\x00\x17\x00\x02\x00\x02\x00\x02\x00\x02\x00\x1d\x00\x0d\x00\x0e\x00\x1d\x00\x01\x00\x0d\x00\x0e\x00\x01\x00\x01\x00\x29\x00\x27\x00\x28\x00\x29\x00\x27\x00\x28\x00\x29\x00\x06\x00\x07\x00\x01\x00\x10\x00\x1d\x00\x0e\x00\x13\x00\x07\x00\x12\x00\x08\x00\x09\x00\x06\x00\x07\x00\x29\x00\x27\x00\x28\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x11\x00\x12\x00\x0f\x00\x10\x00\x15\x00\x16\x00\x17\x00\x26\x00\x19\x00\x11\x00\x29\x00\x00\x00\x01\x00\x1a\x00\x1b\x00\x1c\x00\x0d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\x0c\x00\x29\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x01\x00\x01\x00\x0f\x00\x10\x00\x01\x00\x04\x00\x05\x00\x08\x00\x09\x00\x09\x00\x00\x00\x01\x00\x09\x00\x1a\x00\x1b\x00\x1c\x00\x01\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x0f\x00\x06\x00\x07\x00\x29\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x01\x00\x0f\x00\x0c\x00\x00\x00\x01\x00\x00\x00\x01\x00\x01\x00\x02\x00\x00\x00\x01\x00\x1a\x00\x1a\x00\x1b\x00\x0f\x00\x00\x00\x01\x00\x1f\x00\x0f\x00\x03\x00\x0f\x00\x23\x00\x24\x00\x25\x00\x0f\x00\x00\x00\x01\x00\x29\x00\x00\x00\x01\x00\x0f\x00\x00\x00\x01\x00\x00\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x0f\x00\x01\x00\x19\x00\x0f\x00\x02\x00\x03\x00\x0f\x00\x1a\x00\x0f\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x1a\x00\x0e\x00\x0b\x00\x11\x00\x12\x00\x01\x00\x14\x00\x15\x00\x16\x00\x17\x00\x0c\x00\x19\x00\x08\x00\x09\x00\x01\x00\x02\x00\x1c\x00\x14\x00\x1e\x00\x19\x00\x20\x00\x01\x00\x02\x00\x01\x00\x02\x00\x01\x00\x02\x00\x01\x00\x02\x00\x01\x00\x02\x00\x01\x00\x02\x00\x29\x00\x2a\x00\x11\x00\x12\x00\x15\x00\x01\x00\x16\x00\x1a\x00\x00\x00\x1b\x00\x01\x00\x01\x00\x18\x00\x1b\x00\x01\x00\x19\x00\x01\x00\x01\x00\x0c\x00\x1b\x00\x1a\x00\x01\x00\x01\x00\x01\x00\x0d\x00\x1d\x00\x0c\x00\x0a\x00\x1d\x00\x11\x00\x0b\x00\x1c\x00\x1b\x00\x1a\x00\xff\xff\xff\xff\x03\x00\x02\x00\x07\x00\x05\x00\x02\x00\x0c\x00\x10\x00\x19\x00\x11\x00\x0d\x00\x16\x00\x18\x00\x17\x00\x15\x00\x14\x00\x0b\x00\x0a\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x01\x00\x01\x00\xff\xff\x02\x00\x02\x00\x01\x00\x01\x00\x01\x00\x01\x00\xff\xff\x02\x00\x02\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x26\x00\x02\x00\x29\x00\x02\x00\x28\x00\x01\x00\x01\x00\x01\x00\x2a\x00\x29\x00\x01\x00\x2a\x00\x29\x00\xff\xff\x2a\x00\x2a\x00\x29\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x2a\x00\x01\x00\x01\x00\x13\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\xff\xff\xff\xff\x2a\x00\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\x29\x00\x28\x00\x2a\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
-
-happyTable :: HappyAddr
-happyTable = HappyA# "\x00\x00\x82\x00\x4a\x00\x28\x00\x4f\x00\x3c\x00\x5e\x00\x53\x00\x42\x00\x59\x00\x57\x00\x55\x00\x63\x00\x46\x00\x47\x00\xcb\x00\x50\x00\x51\x00\xce\x00\x70\x00\x67\x00\x29\x00\x94\x00\x4f\x00\xb2\x00\x4c\x00\x4a\x00\xdb\x00\xd8\x00\x8c\x00\x4b\x00\x4a\x00\xba\x00\x3c\x00\x4a\x00\x50\x00\x51\x00\x3f\x00\xce\x00\x8f\x00\x4c\x00\x1e\x00\x3c\x00\xff\xff\x3c\x00\xff\xff\x3c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4b\x00\x4f\x00\xb7\x00\x3c\x00\x4a\x00\x4b\x00\x40\x00\x78\x00\x4b\x00\x3c\x00\x4c\x00\x1e\x00\x3c\x00\x50\x00\x51\x00\x4c\x00\x1e\x00\x3c\x00\x4c\x00\x1e\x00\x3c\x00\x4f\x00\xb8\x00\x3c\x00\x4a\x00\x4f\x00\x5e\x00\xcc\x00\xc6\x00\xc7\x00\xad\x00\xbf\x00\x4b\x00\x50\x00\x51\x00\x4b\x00\x28\x00\x50\x00\x51\x00\x3c\x00\x4c\x00\x3c\x00\x4c\x00\x1e\x00\x3c\x00\x4c\x00\x1e\x00\x3c\x00\x92\x00\x61\x00\x59\x00\x82\x00\x4b\x00\xc4\x00\x83\x00\xcf\x00\x3d\x00\x74\x00\x5c\x00\x92\x00\x61\x00\x3c\x00\x4c\x00\x1e\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x65\x00\x66\x00\x35\x00\x85\x00\x69\x00\x6a\x00\x6b\x00\x7a\x00\x6c\x00\x8a\x00\x3c\x00\x46\x00\x47\x00\x36\x00\x37\x00\x44\x00\x89\x00\x45\x00\x38\x00\x46\x00\x86\x00\x87\x00\x39\x00\x3a\x00\x3b\x00\xa5\x00\x8b\x00\x8e\x00\x3c\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x59\x00\x59\x00\x35\x00\x85\x00\x59\x00\x66\x00\x67\x00\x91\x00\x5c\x00\xd5\x00\x46\x00\x47\x00\x5a\x00\x36\x00\x37\x00\x44\x00\x8f\x00\x45\x00\x38\x00\x46\x00\x86\x00\x87\x00\x39\x00\x3a\x00\x3b\x00\xd1\x00\x60\x00\x61\x00\x3c\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x46\x00\x47\x00\x35\x00\x8e\x00\x46\x00\x47\x00\x46\x00\x47\x00\x59\x00\xda\x00\x46\x00\x47\x00\xc8\x00\x36\x00\x37\x00\xd2\x00\x46\x00\x47\x00\x38\x00\x8b\x00\xaa\x00\xbd\x00\x39\x00\x3a\x00\x3b\x00\x95\x00\x46\x00\x47\x00\x3c\x00\x46\x00\x47\x00\x97\x00\x46\x00\x47\x00\x46\x00\x47\x00\x8f\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x9c\x00\x4c\x00\xae\x00\x76\x00\x6e\x00\x6f\x00\x8b\x00\xaf\x00\x48\x00\x90\x00\xba\x00\x9d\x00\x90\x00\xb0\x00\x4d\x00\x8d\x00\x65\x00\x66\x00\x59\x00\x72\x00\x69\x00\x6a\x00\x6b\x00\x8e\x00\x6c\x00\x5b\x00\x5c\x00\x42\x00\xc1\x00\x44\x00\xbb\x00\x45\x00\xb8\x00\x46\x00\x53\x00\xc2\x00\x55\x00\xc4\x00\x55\x00\xc8\x00\x63\x00\xac\x00\x57\x00\xb3\x00\x55\x00\xb4\x00\x3c\x00\xff\xff\x65\x00\x66\x00\xbc\x00\x8f\x00\x98\x00\x93\x00\xa6\x00\x9a\x00\x73\x00\x78\x00\x9f\x00\x9b\x00\x7c\x00\x9e\x00\x7d\x00\x7e\x00\x7f\x00\xa0\x00\xa5\x00\x80\x00\x88\x00\x8f\x00\x89\x00\xa7\x00\x8e\x00\x8c\x00\x1e\x00\x8a\x00\x8d\x00\x1f\x00\x20\x00\x21\x00\x00\x00\x00\x00\x6c\x00\xde\x00\x5e\x00\x63\x00\xdc\x00\x53\x00\x42\x00\x22\x00\x40\x00\x51\x00\x25\x00\x23\x00\x24\x00\x26\x00\x27\x00\x55\x00\x57\x00\xdd\x00\xd4\x00\xd5\x00\xd7\x00\xd8\x00\x60\x00\xd1\x00\x00\x00\xc0\x00\xc3\x00\xca\x00\xcb\x00\x6e\x00\xae\x00\x00\x00\xb5\x00\xb6\x00\x97\x00\x9a\x00\xa2\x00\xa3\x00\xa4\x00\x7b\x00\xa9\x00\x3c\x00\xaa\x00\x1e\x00\x73\x00\x76\x00\x7c\x00\xff\xff\x3c\x00\x55\x00\xff\xff\x3c\x00\x00\x00\xff\xff\xff\xff\x3c\x00\x42\x00\x53\x00\x55\x00\x57\x00\x59\x00\x60\x00\xff\xff\x63\x00\x6e\x00\x88\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x3c\x00\x1e\x00\xff\xff\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
-
-happyReduceArr = Happy_Data_Array.array (28, 109) [
-	(28 , happyReduce_28),
-	(29 , happyReduce_29),
-	(30 , happyReduce_30),
-	(31 , happyReduce_31),
-	(32 , happyReduce_32),
-	(33 , happyReduce_33),
-	(34 , happyReduce_34),
-	(35 , happyReduce_35),
-	(36 , happyReduce_36),
-	(37 , happyReduce_37),
-	(38 , happyReduce_38),
-	(39 , happyReduce_39),
-	(40 , happyReduce_40),
-	(41 , happyReduce_41),
-	(42 , happyReduce_42),
-	(43 , happyReduce_43),
-	(44 , happyReduce_44),
-	(45 , happyReduce_45),
-	(46 , happyReduce_46),
-	(47 , happyReduce_47),
-	(48 , happyReduce_48),
-	(49 , happyReduce_49),
-	(50 , happyReduce_50),
-	(51 , happyReduce_51),
-	(52 , happyReduce_52),
-	(53 , happyReduce_53),
-	(54 , happyReduce_54),
-	(55 , happyReduce_55),
-	(56 , happyReduce_56),
-	(57 , happyReduce_57),
-	(58 , happyReduce_58),
-	(59 , happyReduce_59),
-	(60 , happyReduce_60),
-	(61 , happyReduce_61),
-	(62 , happyReduce_62),
-	(63 , happyReduce_63),
-	(64 , happyReduce_64),
-	(65 , happyReduce_65),
-	(66 , happyReduce_66),
-	(67 , happyReduce_67),
-	(68 , happyReduce_68),
-	(69 , happyReduce_69),
-	(70 , happyReduce_70),
-	(71 , happyReduce_71),
-	(72 , happyReduce_72),
-	(73 , happyReduce_73),
-	(74 , happyReduce_74),
-	(75 , happyReduce_75),
-	(76 , happyReduce_76),
-	(77 , happyReduce_77),
-	(78 , happyReduce_78),
-	(79 , happyReduce_79),
-	(80 , happyReduce_80),
-	(81 , happyReduce_81),
-	(82 , happyReduce_82),
-	(83 , happyReduce_83),
-	(84 , happyReduce_84),
-	(85 , happyReduce_85),
-	(86 , happyReduce_86),
-	(87 , happyReduce_87),
-	(88 , happyReduce_88),
-	(89 , happyReduce_89),
-	(90 , happyReduce_90),
-	(91 , happyReduce_91),
-	(92 , happyReduce_92),
-	(93 , happyReduce_93),
-	(94 , happyReduce_94),
-	(95 , happyReduce_95),
-	(96 , happyReduce_96),
-	(97 , happyReduce_97),
-	(98 , happyReduce_98),
-	(99 , happyReduce_99),
-	(100 , happyReduce_100),
-	(101 , happyReduce_101),
-	(102 , happyReduce_102),
-	(103 , happyReduce_103),
-	(104 , happyReduce_104),
-	(105 , happyReduce_105),
-	(106 , happyReduce_106),
-	(107 , happyReduce_107),
-	(108 , happyReduce_108),
-	(109 , happyReduce_109)
-	]
-
-happy_n_terms = 43 :: Int
-happy_n_nonterms = 30 :: Int
-
-happyReduce_28 = happySpecReduce_1  0# happyReduction_28
-happyReduction_28 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (PT _ (TI happy_var_1)) -> 
-	happyIn31
-		 ((read ( happy_var_1)) :: Integer
-	)}
-
-happyReduce_29 = happySpecReduce_1  1# happyReduction_29
-happyReduction_29 happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	happyIn32
-		 (Symbol (mkPosToken happy_var_1)
-	)}
-
-happyReduce_30 = happySpecReduce_1  2# happyReduction_30
-happyReduction_30 happy_x_1
-	 =  case happyOut34 happy_x_1 of { happy_var_1 -> 
-	happyIn33
-		 (Start happy_var_1
-	)}
-
-happyReduce_31 = happySpecReduce_3  3# happyReduction_31
-happyReduction_31 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  happyIn34
-		 ([]
-	)
-
-happyReduce_32 = happyReduce 4# 3# happyReduction_32
-happyReduction_32 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut35 happy_x_2 of { happy_var_2 -> 
-	case happyOut34 happy_x_4 of { happy_var_4 -> 
-	happyIn34
-		 ((:) happy_var_2 happy_var_4
-	) `HappyStk` happyRest}}
-
-happyReduce_33 = happyReduce 7# 4# happyReduction_33
-happyReduction_33 (happy_x_7 `HappyStk`
-	happy_x_6 `HappyStk`
-	happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut57 happy_x_3 of { happy_var_3 -> 
-	case happyOut54 happy_x_6 of { happy_var_6 -> 
-	happyIn35
-		 (DeclareDatatypes (reverse happy_var_3) (reverse happy_var_6)
-	) `HappyStk` happyRest}}
-
-happyReduce_34 = happySpecReduce_3  4# happyReduction_34
-happyReduction_34 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut32 happy_x_2 of { happy_var_2 -> 
-	case happyOut31 happy_x_3 of { happy_var_3 -> 
-	happyIn35
-		 (DeclareSort happy_var_2 happy_var_3
-	)}}
-
-happyReduce_35 = happySpecReduce_2  4# happyReduction_35
-happyReduction_35 happy_x_2
-	happy_x_1
-	 =  case happyOut39 happy_x_2 of { happy_var_2 -> 
-	happyIn35
-		 (DeclareFun happy_var_2
-	)}
-
-happyReduce_36 = happyReduce 7# 4# happyReduction_36
-happyReduction_36 (happy_x_7 `HappyStk`
-	happy_x_6 `HappyStk`
-	happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut60 happy_x_3 of { happy_var_3 -> 
-	case happyOut53 happy_x_6 of { happy_var_6 -> 
-	happyIn35
-		 (DefineFunsRec (reverse happy_var_3) (reverse happy_var_6)
-	) `HappyStk` happyRest}}
-
-happyReduce_37 = happySpecReduce_2  4# happyReduction_37
-happyReduction_37 happy_x_2
-	happy_x_1
-	 =  case happyOut36 happy_x_1 of { happy_var_1 -> 
-	case happyOut46 happy_x_2 of { happy_var_2 -> 
-	happyIn35
-		 (MonoAssert happy_var_1 happy_var_2
-	)}}
-
-happyReduce_38 = happyReduce 8# 4# happyReduction_38
-happyReduction_38 (happy_x_8 `HappyStk`
-	happy_x_7 `HappyStk`
-	happy_x_6 `HappyStk`
-	happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut36 happy_x_1 of { happy_var_1 -> 
-	case happyOut57 happy_x_5 of { happy_var_5 -> 
-	case happyOut46 happy_x_7 of { happy_var_7 -> 
-	happyIn35
-		 (ParAssert happy_var_1 (reverse happy_var_5) happy_var_7
-	) `HappyStk` happyRest}}}
-
-happyReduce_39 = happySpecReduce_1  5# happyReduction_39
-happyReduction_39 happy_x_1
-	 =  happyIn36
-		 (AssertIt
-	)
-
-happyReduce_40 = happySpecReduce_1  5# happyReduction_40
-happyReduction_40 happy_x_1
-	 =  happyIn36
-		 (AssertNot
-	)
-
-happyReduce_41 = happyReduce 7# 6# happyReduction_41
-happyReduction_41 (happy_x_7 `HappyStk`
-	happy_x_6 `HappyStk`
-	happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut57 happy_x_4 of { happy_var_4 -> 
-	case happyOut38 happy_x_6 of { happy_var_6 -> 
-	happyIn37
-		 (ParFunDef (reverse happy_var_4) happy_var_6
-	) `HappyStk` happyRest}}
-
-happyReduce_42 = happySpecReduce_1  6# happyReduction_42
-happyReduction_42 happy_x_1
-	 =  case happyOut38 happy_x_1 of { happy_var_1 -> 
-	happyIn37
-		 (MonoFunDef happy_var_1
-	)}
-
-happyReduce_43 = happyReduce 7# 7# happyReduction_43
-happyReduction_43 (happy_x_7 `HappyStk`
-	happy_x_6 `HappyStk`
-	happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut32 happy_x_2 of { happy_var_2 -> 
-	case happyOut56 happy_x_4 of { happy_var_4 -> 
-	case happyOut45 happy_x_6 of { happy_var_6 -> 
-	happyIn38
-		 (InnerFunDef happy_var_2 (reverse happy_var_4) happy_var_6
-	) `HappyStk` happyRest}}}
-
-happyReduce_44 = happyReduce 9# 8# happyReduction_44
-happyReduction_44 (happy_x_9 `HappyStk`
-	happy_x_8 `HappyStk`
-	happy_x_7 `HappyStk`
-	happy_x_6 `HappyStk`
-	happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut57 happy_x_4 of { happy_var_4 -> 
-	case happyOut40 happy_x_7 of { happy_var_7 -> 
-	happyIn39
-		 (ParFunDecl (reverse happy_var_4) happy_var_7
-	) `HappyStk` happyRest}}
-
-happyReduce_45 = happySpecReduce_1  8# happyReduction_45
-happyReduction_45 happy_x_1
-	 =  case happyOut40 happy_x_1 of { happy_var_1 -> 
-	happyIn39
-		 (MonoFunDecl happy_var_1
-	)}
-
-happyReduce_46 = happyReduce 5# 9# happyReduction_46
-happyReduction_46 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut32 happy_x_1 of { happy_var_1 -> 
-	case happyOut58 happy_x_3 of { happy_var_3 -> 
-	case happyOut45 happy_x_5 of { happy_var_5 -> 
-	happyIn40
-		 (InnerFunDecl happy_var_1 (reverse happy_var_3) happy_var_5
-	) `HappyStk` happyRest}}}
-
-happyReduce_47 = happyReduce 4# 10# happyReduction_47
-happyReduction_47 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut32 happy_x_2 of { happy_var_2 -> 
-	case happyOut55 happy_x_3 of { happy_var_3 -> 
-	happyIn41
-		 (Datatype happy_var_2 (reverse happy_var_3)
-	) `HappyStk` happyRest}}
-
-happyReduce_48 = happyReduce 4# 11# happyReduction_48
-happyReduction_48 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut32 happy_x_2 of { happy_var_2 -> 
-	case happyOut56 happy_x_3 of { happy_var_3 -> 
-	happyIn42
-		 (Constructor happy_var_2 (reverse happy_var_3)
-	) `HappyStk` happyRest}}
-
-happyReduce_49 = happyReduce 4# 12# happyReduction_49
-happyReduction_49 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut32 happy_x_2 of { happy_var_2 -> 
-	case happyOut45 happy_x_3 of { happy_var_3 -> 
-	happyIn43
-		 (Binding happy_var_2 happy_var_3
-	) `HappyStk` happyRest}}
-
-happyReduce_50 = happyReduce 4# 13# happyReduction_50
-happyReduction_50 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut43 happy_x_2 of { happy_var_2 -> 
-	case happyOut46 happy_x_3 of { happy_var_3 -> 
-	happyIn44
-		 (LetDecl happy_var_2 happy_var_3
-	) `HappyStk` happyRest}}
-
-happyReduce_51 = happySpecReduce_1  14# happyReduction_51
-happyReduction_51 happy_x_1
-	 =  case happyOut32 happy_x_1 of { happy_var_1 -> 
-	happyIn45
-		 (TyVar happy_var_1
-	)}
-
-happyReduce_52 = happyReduce 4# 14# happyReduction_52
-happyReduction_52 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut32 happy_x_2 of { happy_var_2 -> 
-	case happyOut58 happy_x_3 of { happy_var_3 -> 
-	happyIn45
-		 (TyApp happy_var_2 (reverse happy_var_3)
-	) `HappyStk` happyRest}}
-
-happyReduce_53 = happyReduce 4# 14# happyReduction_53
-happyReduction_53 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut58 happy_x_3 of { happy_var_3 -> 
-	happyIn45
-		 (ArrowTy (reverse happy_var_3)
-	) `HappyStk` happyRest}
-
-happyReduce_54 = happySpecReduce_1  14# happyReduction_54
-happyReduction_54 happy_x_1
-	 =  happyIn45
-		 (IntTy
-	)
-
-happyReduce_55 = happySpecReduce_1  14# happyReduction_55
-happyReduction_55 happy_x_1
-	 =  happyIn45
-		 (BoolTy
-	)
-
-happyReduce_56 = happySpecReduce_1  15# happyReduction_56
-happyReduction_56 happy_x_1
-	 =  case happyOut32 happy_x_1 of { happy_var_1 -> 
-	happyIn46
-		 (Var happy_var_1
-	)}
-
-happyReduce_57 = happyReduce 5# 15# happyReduction_57
-happyReduction_57 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut46 happy_x_3 of { happy_var_3 -> 
-	case happyOut45 happy_x_4 of { happy_var_4 -> 
-	happyIn46
-		 (As happy_var_3 happy_var_4
-	) `HappyStk` happyRest}}
-
-happyReduce_58 = happyReduce 4# 15# happyReduction_58
-happyReduction_58 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut50 happy_x_2 of { happy_var_2 -> 
-	case happyOut53 happy_x_3 of { happy_var_3 -> 
-	happyIn46
-		 (App happy_var_2 (reverse happy_var_3)
-	) `HappyStk` happyRest}}
-
-happyReduce_59 = happyReduce 5# 15# happyReduction_59
-happyReduction_59 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut46 happy_x_3 of { happy_var_3 -> 
-	case happyOut52 happy_x_4 of { happy_var_4 -> 
-	happyIn46
-		 (Match happy_var_3 (reverse happy_var_4)
-	) `HappyStk` happyRest}}
-
-happyReduce_60 = happyReduce 7# 15# happyReduction_60
-happyReduction_60 (happy_x_7 `HappyStk`
-	happy_x_6 `HappyStk`
-	happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut51 happy_x_4 of { happy_var_4 -> 
-	case happyOut46 happy_x_6 of { happy_var_6 -> 
-	happyIn46
-		 (Let (reverse happy_var_4) happy_var_6
-	) `HappyStk` happyRest}}
-
-happyReduce_61 = happyReduce 7# 15# happyReduction_61
-happyReduction_61 (happy_x_7 `HappyStk`
-	happy_x_6 `HappyStk`
-	happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut47 happy_x_2 of { happy_var_2 -> 
-	case happyOut56 happy_x_4 of { happy_var_4 -> 
-	case happyOut46 happy_x_6 of { happy_var_6 -> 
-	happyIn46
-		 (Binder happy_var_2 (reverse happy_var_4) happy_var_6
-	) `HappyStk` happyRest}}}
-
-happyReduce_62 = happySpecReduce_1  15# happyReduction_62
-happyReduction_62 happy_x_1
-	 =  case happyOut31 happy_x_1 of { happy_var_1 -> 
-	happyIn46
-		 (LitInt happy_var_1
-	)}
-
-happyReduce_63 = happySpecReduce_1  15# happyReduction_63
-happyReduction_63 happy_x_1
-	 =  happyIn46
-		 (LitTrue
-	)
-
-happyReduce_64 = happySpecReduce_1  15# happyReduction_64
-happyReduction_64 happy_x_1
-	 =  happyIn46
-		 (LitFalse
-	)
-
-happyReduce_65 = happySpecReduce_1  16# happyReduction_65
-happyReduction_65 happy_x_1
-	 =  happyIn47
-		 (Lambda
-	)
-
-happyReduce_66 = happySpecReduce_1  16# happyReduction_66
-happyReduction_66 happy_x_1
-	 =  happyIn47
-		 (Forall
-	)
-
-happyReduce_67 = happySpecReduce_1  16# happyReduction_67
-happyReduction_67 happy_x_1
-	 =  happyIn47
-		 (Exists
-	)
-
-happyReduce_68 = happyReduce 5# 17# happyReduction_68
-happyReduction_68 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut49 happy_x_3 of { happy_var_3 -> 
-	case happyOut46 happy_x_4 of { happy_var_4 -> 
-	happyIn48
-		 (Case happy_var_3 happy_var_4
-	) `HappyStk` happyRest}}
-
-happyReduce_69 = happySpecReduce_1  18# happyReduction_69
-happyReduction_69 happy_x_1
-	 =  happyIn49
-		 (Default
-	)
-
-happyReduce_70 = happyReduce 4# 18# happyReduction_70
-happyReduction_70 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut32 happy_x_2 of { happy_var_2 -> 
-	case happyOut57 happy_x_3 of { happy_var_3 -> 
-	happyIn49
-		 (ConPat happy_var_2 (reverse happy_var_3)
-	) `HappyStk` happyRest}}
-
-happyReduce_71 = happySpecReduce_1  18# happyReduction_71
-happyReduction_71 happy_x_1
-	 =  case happyOut32 happy_x_1 of { happy_var_1 -> 
-	happyIn49
-		 (SimplePat happy_var_1
-	)}
-
-happyReduce_72 = happySpecReduce_1  19# happyReduction_72
-happyReduction_72 happy_x_1
-	 =  case happyOut32 happy_x_1 of { happy_var_1 -> 
-	happyIn50
-		 (Const happy_var_1
-	)}
-
-happyReduce_73 = happySpecReduce_1  19# happyReduction_73
-happyReduction_73 happy_x_1
-	 =  happyIn50
-		 (At
-	)
-
-happyReduce_74 = happySpecReduce_1  19# happyReduction_74
-happyReduction_74 happy_x_1
-	 =  happyIn50
-		 (IfThenElse
-	)
-
-happyReduce_75 = happySpecReduce_1  19# happyReduction_75
-happyReduction_75 happy_x_1
-	 =  happyIn50
-		 (And
-	)
-
-happyReduce_76 = happySpecReduce_1  19# happyReduction_76
-happyReduction_76 happy_x_1
-	 =  happyIn50
-		 (Or
-	)
-
-happyReduce_77 = happySpecReduce_1  19# happyReduction_77
-happyReduction_77 happy_x_1
-	 =  happyIn50
-		 (Not
-	)
-
-happyReduce_78 = happySpecReduce_1  19# happyReduction_78
-happyReduction_78 happy_x_1
-	 =  happyIn50
-		 (Implies
-	)
-
-happyReduce_79 = happySpecReduce_1  19# happyReduction_79
-happyReduction_79 happy_x_1
-	 =  happyIn50
-		 (Equal
-	)
-
-happyReduce_80 = happySpecReduce_1  19# happyReduction_80
-happyReduction_80 happy_x_1
-	 =  happyIn50
-		 (Distinct
-	)
-
-happyReduce_81 = happySpecReduce_1  19# happyReduction_81
-happyReduction_81 happy_x_1
-	 =  happyIn50
-		 (IntAdd
-	)
-
-happyReduce_82 = happySpecReduce_1  19# happyReduction_82
-happyReduction_82 happy_x_1
-	 =  happyIn50
-		 (IntSub
-	)
-
-happyReduce_83 = happySpecReduce_1  19# happyReduction_83
-happyReduction_83 happy_x_1
-	 =  happyIn50
-		 (IntMul
-	)
-
-happyReduce_84 = happySpecReduce_1  19# happyReduction_84
-happyReduction_84 happy_x_1
-	 =  happyIn50
-		 (IntDiv
-	)
-
-happyReduce_85 = happySpecReduce_1  19# happyReduction_85
-happyReduction_85 happy_x_1
-	 =  happyIn50
-		 (IntMod
-	)
-
-happyReduce_86 = happySpecReduce_1  19# happyReduction_86
-happyReduction_86 happy_x_1
-	 =  happyIn50
-		 (IntGt
-	)
-
-happyReduce_87 = happySpecReduce_1  19# happyReduction_87
-happyReduction_87 happy_x_1
-	 =  happyIn50
-		 (IntGe
-	)
-
-happyReduce_88 = happySpecReduce_1  19# happyReduction_88
-happyReduction_88 happy_x_1
-	 =  happyIn50
-		 (IntLt
-	)
-
-happyReduce_89 = happySpecReduce_1  19# happyReduction_89
-happyReduction_89 happy_x_1
-	 =  happyIn50
-		 (IntLe
-	)
-
-happyReduce_90 = happySpecReduce_0  20# happyReduction_90
-happyReduction_90  =  happyIn51
-		 ([]
-	)
-
-happyReduce_91 = happySpecReduce_2  20# happyReduction_91
-happyReduction_91 happy_x_2
-	happy_x_1
-	 =  case happyOut51 happy_x_1 of { happy_var_1 -> 
-	case happyOut44 happy_x_2 of { happy_var_2 -> 
-	happyIn51
-		 (flip (:) happy_var_1 happy_var_2
-	)}}
-
-happyReduce_92 = happySpecReduce_0  21# happyReduction_92
-happyReduction_92  =  happyIn52
-		 ([]
-	)
-
-happyReduce_93 = happySpecReduce_2  21# happyReduction_93
-happyReduction_93 happy_x_2
-	happy_x_1
-	 =  case happyOut52 happy_x_1 of { happy_var_1 -> 
-	case happyOut48 happy_x_2 of { happy_var_2 -> 
-	happyIn52
-		 (flip (:) happy_var_1 happy_var_2
-	)}}
-
-happyReduce_94 = happySpecReduce_0  22# happyReduction_94
-happyReduction_94  =  happyIn53
-		 ([]
-	)
-
-happyReduce_95 = happySpecReduce_2  22# happyReduction_95
-happyReduction_95 happy_x_2
-	happy_x_1
-	 =  case happyOut53 happy_x_1 of { happy_var_1 -> 
-	case happyOut46 happy_x_2 of { happy_var_2 -> 
-	happyIn53
-		 (flip (:) happy_var_1 happy_var_2
-	)}}
-
-happyReduce_96 = happySpecReduce_0  23# happyReduction_96
-happyReduction_96  =  happyIn54
-		 ([]
-	)
-
-happyReduce_97 = happySpecReduce_2  23# happyReduction_97
-happyReduction_97 happy_x_2
-	happy_x_1
-	 =  case happyOut54 happy_x_1 of { happy_var_1 -> 
-	case happyOut41 happy_x_2 of { happy_var_2 -> 
-	happyIn54
-		 (flip (:) happy_var_1 happy_var_2
-	)}}
-
-happyReduce_98 = happySpecReduce_0  24# happyReduction_98
-happyReduction_98  =  happyIn55
-		 ([]
-	)
-
-happyReduce_99 = happySpecReduce_2  24# happyReduction_99
-happyReduction_99 happy_x_2
-	happy_x_1
-	 =  case happyOut55 happy_x_1 of { happy_var_1 -> 
-	case happyOut42 happy_x_2 of { happy_var_2 -> 
-	happyIn55
-		 (flip (:) happy_var_1 happy_var_2
-	)}}
-
-happyReduce_100 = happySpecReduce_0  25# happyReduction_100
-happyReduction_100  =  happyIn56
-		 ([]
-	)
-
-happyReduce_101 = happySpecReduce_2  25# happyReduction_101
-happyReduction_101 happy_x_2
-	happy_x_1
-	 =  case happyOut56 happy_x_1 of { happy_var_1 -> 
-	case happyOut43 happy_x_2 of { happy_var_2 -> 
-	happyIn56
-		 (flip (:) happy_var_1 happy_var_2
-	)}}
-
-happyReduce_102 = happySpecReduce_0  26# happyReduction_102
-happyReduction_102  =  happyIn57
-		 ([]
-	)
-
-happyReduce_103 = happySpecReduce_2  26# happyReduction_103
-happyReduction_103 happy_x_2
-	happy_x_1
-	 =  case happyOut57 happy_x_1 of { happy_var_1 -> 
-	case happyOut32 happy_x_2 of { happy_var_2 -> 
-	happyIn57
-		 (flip (:) happy_var_1 happy_var_2
-	)}}
-
-happyReduce_104 = happySpecReduce_0  27# happyReduction_104
-happyReduction_104  =  happyIn58
-		 ([]
-	)
-
-happyReduce_105 = happySpecReduce_2  27# happyReduction_105
-happyReduction_105 happy_x_2
-	happy_x_1
-	 =  case happyOut58 happy_x_1 of { happy_var_1 -> 
-	case happyOut45 happy_x_2 of { happy_var_2 -> 
-	happyIn58
-		 (flip (:) happy_var_1 happy_var_2
-	)}}
-
-happyReduce_106 = happySpecReduce_0  28# happyReduction_106
-happyReduction_106  =  happyIn59
-		 ([]
-	)
-
-happyReduce_107 = happySpecReduce_2  28# happyReduction_107
-happyReduction_107 happy_x_2
-	happy_x_1
-	 =  case happyOut59 happy_x_1 of { happy_var_1 -> 
-	case happyOut39 happy_x_2 of { happy_var_2 -> 
-	happyIn59
-		 (flip (:) happy_var_1 happy_var_2
-	)}}
-
-happyReduce_108 = happySpecReduce_0  29# happyReduction_108
-happyReduction_108  =  happyIn60
-		 ([]
-	)
-
-happyReduce_109 = happySpecReduce_2  29# happyReduction_109
-happyReduction_109 happy_x_2
-	happy_x_1
-	 =  case happyOut60 happy_x_1 of { happy_var_1 -> 
-	case happyOut37 happy_x_2 of { happy_var_2 -> 
-	happyIn60
-		 (flip (:) happy_var_1 happy_var_2
-	)}}
-
-happyNewToken action sts stk [] =
-	happyDoAction 42# notHappyAtAll action sts stk []
-
-happyNewToken action sts stk (tk:tks) =
-	let cont i = happyDoAction i tk action sts stk tks in
-	case tk of {
-	PT _ (TS _ 1) -> cont 1#;
-	PT _ (TS _ 2) -> cont 2#;
-	PT _ (TS _ 3) -> cont 3#;
-	PT _ (TS _ 4) -> cont 4#;
-	PT _ (TS _ 5) -> cont 5#;
-	PT _ (TS _ 6) -> cont 6#;
-	PT _ (TS _ 7) -> cont 7#;
-	PT _ (TS _ 8) -> cont 8#;
-	PT _ (TS _ 9) -> cont 9#;
-	PT _ (TS _ 10) -> cont 10#;
-	PT _ (TS _ 11) -> cont 11#;
-	PT _ (TS _ 12) -> cont 12#;
-	PT _ (TS _ 13) -> cont 13#;
-	PT _ (TS _ 14) -> cont 14#;
-	PT _ (TS _ 15) -> cont 15#;
-	PT _ (TS _ 16) -> cont 16#;
-	PT _ (TS _ 17) -> cont 17#;
-	PT _ (TS _ 18) -> cont 18#;
-	PT _ (TS _ 19) -> cont 19#;
-	PT _ (TS _ 20) -> cont 20#;
-	PT _ (TS _ 21) -> cont 21#;
-	PT _ (TS _ 22) -> cont 22#;
-	PT _ (TS _ 23) -> cont 23#;
-	PT _ (TS _ 24) -> cont 24#;
-	PT _ (TS _ 25) -> cont 25#;
-	PT _ (TS _ 26) -> cont 26#;
-	PT _ (TS _ 27) -> cont 27#;
-	PT _ (TS _ 28) -> cont 28#;
-	PT _ (TS _ 29) -> cont 29#;
-	PT _ (TS _ 30) -> cont 30#;
-	PT _ (TS _ 31) -> cont 31#;
-	PT _ (TS _ 32) -> cont 32#;
-	PT _ (TS _ 33) -> cont 33#;
-	PT _ (TS _ 34) -> cont 34#;
-	PT _ (TS _ 35) -> cont 35#;
-	PT _ (TS _ 36) -> cont 36#;
-	PT _ (TS _ 37) -> cont 37#;
-	PT _ (TS _ 38) -> cont 38#;
-	PT _ (TS _ 39) -> cont 39#;
-	PT _ (TI happy_dollar_dollar) -> cont 40#;
-	PT _ (T_Symbol _) -> cont 41#;
-	_ -> happyError' (tk:tks)
-	}
-
-happyError_ 42# tk tks = happyError' tks
-happyError_ _ tk tks = happyError' (tk:tks)
-
-happyThen :: () => Err a -> (a -> Err b) -> Err b
-happyThen = (thenM)
-happyReturn :: () => a -> Err a
-happyReturn = (returnM)
-happyThen1 m k tks = (thenM) m (\a -> k a tks)
-happyReturn1 :: () => a -> b -> Err a
-happyReturn1 = \a tks -> (returnM) a
-happyError' :: () => [(Token)] -> Err a
-happyError' = happyError
-
-pStart tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 0# tks) (\x -> happyReturn (happyOut33 x))
-
-pListDecl tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 1# tks) (\x -> happyReturn (happyOut34 x))
-
-pDecl tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 2# tks) (\x -> happyReturn (happyOut35 x))
-
-pAssertion tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 3# tks) (\x -> happyReturn (happyOut36 x))
-
-pFunDef tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 4# tks) (\x -> happyReturn (happyOut37 x))
-
-pInnerFunDef tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 5# tks) (\x -> happyReturn (happyOut38 x))
-
-pFunDecl tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 6# tks) (\x -> happyReturn (happyOut39 x))
-
-pInnerFunDecl tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 7# tks) (\x -> happyReturn (happyOut40 x))
-
-pDatatype tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 8# tks) (\x -> happyReturn (happyOut41 x))
-
-pConstructor tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 9# tks) (\x -> happyReturn (happyOut42 x))
-
-pBinding tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 10# tks) (\x -> happyReturn (happyOut43 x))
-
-pLetDecl tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 11# tks) (\x -> happyReturn (happyOut44 x))
-
-pType tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 12# tks) (\x -> happyReturn (happyOut45 x))
-
-pExpr tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 13# tks) (\x -> happyReturn (happyOut46 x))
-
-pBinder tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 14# tks) (\x -> happyReturn (happyOut47 x))
-
-pCase tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 15# tks) (\x -> happyReturn (happyOut48 x))
-
-pPattern tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 16# tks) (\x -> happyReturn (happyOut49 x))
-
-pHead tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 17# tks) (\x -> happyReturn (happyOut50 x))
-
-pListLetDecl tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 18# tks) (\x -> happyReturn (happyOut51 x))
-
-pListCase tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 19# tks) (\x -> happyReturn (happyOut52 x))
-
-pListExpr tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 20# tks) (\x -> happyReturn (happyOut53 x))
-
-pListDatatype tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 21# tks) (\x -> happyReturn (happyOut54 x))
-
-pListConstructor tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 22# tks) (\x -> happyReturn (happyOut55 x))
-
-pListBinding tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 23# tks) (\x -> happyReturn (happyOut56 x))
-
-pListSymbol tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 24# tks) (\x -> happyReturn (happyOut57 x))
-
-pListType tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 25# tks) (\x -> happyReturn (happyOut58 x))
-
-pListFunDecl tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 26# tks) (\x -> happyReturn (happyOut59 x))
-
-pListFunDef tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 27# tks) (\x -> happyReturn (happyOut60 x))
-
-happySeq = happyDontSeq
-
-
-returnM :: a -> Err a
-returnM = return
-
-thenM :: Err a -> (a -> Err b) -> Err b
-thenM = (>>=)
-
-happyError :: [Token] -> Err a
-happyError ts =
-  Bad $ "syntax error at " ++ tokenPos ts ++ 
-  case ts of
-    [] -> []
-    [Err _] -> " due to lexer error"
-    _ -> " before " ++ unwords (map (id . prToken) (take 4 ts))
-
-myLexer = tokens
-{-# LINE 1 "templates/GenericTemplate.hs" #-}
-{-# LINE 1 "templates/GenericTemplate.hs" #-}
-{-# LINE 1 "<built-in>" #-}
-{-# LINE 1 "<command-line>" #-}
-{-# LINE 11 "<command-line>" #-}
-# 1 "/usr/include/stdc-predef.h" 1 3 4
-
-# 17 "/usr/include/stdc-predef.h" 3 4
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-{-# LINE 11 "<command-line>" #-}
-{-# LINE 1 "/usr/lib/ghc-7.10.1/include/ghcversion.h" #-}
+happyIn34 :: (Integer) -> (HappyAbsSyn )
+happyIn34 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn34 #-}
+happyOut34 :: (HappyAbsSyn ) -> (Integer)
+happyOut34 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut34 #-}
+happyIn35 :: (Symbol) -> (HappyAbsSyn )
+happyIn35 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn35 #-}
+happyOut35 :: (HappyAbsSyn ) -> (Symbol)
+happyOut35 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut35 #-}
+happyIn36 :: (Start) -> (HappyAbsSyn )
+happyIn36 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn36 #-}
+happyOut36 :: (HappyAbsSyn ) -> (Start)
+happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut36 #-}
+happyIn37 :: ([Decl]) -> (HappyAbsSyn )
+happyIn37 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn37 #-}
+happyOut37 :: (HappyAbsSyn ) -> ([Decl])
+happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut37 #-}
+happyIn38 :: (Decl) -> (HappyAbsSyn )
+happyIn38 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn38 #-}
+happyOut38 :: (HappyAbsSyn ) -> (Decl)
+happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut38 #-}
+happyIn39 :: (Assertion) -> (HappyAbsSyn )
+happyIn39 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn39 #-}
+happyOut39 :: (HappyAbsSyn ) -> (Assertion)
+happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut39 #-}
+happyIn40 :: (Par) -> (HappyAbsSyn )
+happyIn40 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn40 #-}
+happyOut40 :: (HappyAbsSyn ) -> (Par)
+happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut40 #-}
+happyIn41 :: (ConstDecl) -> (HappyAbsSyn )
+happyIn41 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn41 #-}
+happyOut41 :: (HappyAbsSyn ) -> (ConstDecl)
+happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut41 #-}
+happyIn42 :: (FunDecl) -> (HappyAbsSyn )
+happyIn42 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn42 #-}
+happyOut42 :: (HappyAbsSyn ) -> (FunDecl)
+happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut42 #-}
+happyIn43 :: (FunDef) -> (HappyAbsSyn )
+happyIn43 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn43 #-}
+happyOut43 :: (HappyAbsSyn ) -> (FunDef)
+happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut43 #-}
+happyIn44 :: (FunDec) -> (HappyAbsSyn )
+happyIn44 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn44 #-}
+happyOut44 :: (HappyAbsSyn ) -> (FunDec)
+happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut44 #-}
+happyIn45 :: (InnerFunDec) -> (HappyAbsSyn )
+happyIn45 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn45 #-}
+happyOut45 :: (HappyAbsSyn ) -> (InnerFunDec)
+happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut45 #-}
+happyIn46 :: (Datatype) -> (HappyAbsSyn )
+happyIn46 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn46 #-}
+happyOut46 :: (HappyAbsSyn ) -> (Datatype)
+happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut46 #-}
+happyIn47 :: (Constructor) -> (HappyAbsSyn )
+happyIn47 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn47 #-}
+happyOut47 :: (HappyAbsSyn ) -> (Constructor)
+happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut47 #-}
+happyIn48 :: (Binding) -> (HappyAbsSyn )
+happyIn48 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn48 #-}
+happyOut48 :: (HappyAbsSyn ) -> (Binding)
+happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut48 #-}
+happyIn49 :: (LetDecl) -> (HappyAbsSyn )
+happyIn49 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn49 #-}
+happyOut49 :: (HappyAbsSyn ) -> (LetDecl)
+happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut49 #-}
+happyIn50 :: (Type) -> (HappyAbsSyn )
+happyIn50 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn50 #-}
+happyOut50 :: (HappyAbsSyn ) -> (Type)
+happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut50 #-}
+happyIn51 :: (Expr) -> (HappyAbsSyn )
+happyIn51 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn51 #-}
+happyOut51 :: (HappyAbsSyn ) -> (Expr)
+happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut51 #-}
+happyIn52 :: (Binder) -> (HappyAbsSyn )
+happyIn52 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn52 #-}
+happyOut52 :: (HappyAbsSyn ) -> (Binder)
+happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut52 #-}
+happyIn53 :: (Case) -> (HappyAbsSyn )
+happyIn53 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn53 #-}
+happyOut53 :: (HappyAbsSyn ) -> (Case)
+happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut53 #-}
+happyIn54 :: (Pattern) -> (HappyAbsSyn )
+happyIn54 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn54 #-}
+happyOut54 :: (HappyAbsSyn ) -> (Pattern)
+happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut54 #-}
+happyIn55 :: (Head) -> (HappyAbsSyn )
+happyIn55 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn55 #-}
+happyOut55 :: (HappyAbsSyn ) -> (Head)
+happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut55 #-}
+happyIn56 :: ([LetDecl]) -> (HappyAbsSyn )
+happyIn56 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn56 #-}
+happyOut56 :: (HappyAbsSyn ) -> ([LetDecl])
+happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut56 #-}
+happyIn57 :: ([Case]) -> (HappyAbsSyn )
+happyIn57 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn57 #-}
+happyOut57 :: (HappyAbsSyn ) -> ([Case])
+happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut57 #-}
+happyIn58 :: ([Expr]) -> (HappyAbsSyn )
+happyIn58 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn58 #-}
+happyOut58 :: (HappyAbsSyn ) -> ([Expr])
+happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut58 #-}
+happyIn59 :: ([Datatype]) -> (HappyAbsSyn )
+happyIn59 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn59 #-}
+happyOut59 :: (HappyAbsSyn ) -> ([Datatype])
+happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut59 #-}
+happyIn60 :: ([Constructor]) -> (HappyAbsSyn )
+happyIn60 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn60 #-}
+happyOut60 :: (HappyAbsSyn ) -> ([Constructor])
+happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut60 #-}
+happyIn61 :: ([Binding]) -> (HappyAbsSyn )
+happyIn61 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn61 #-}
+happyOut61 :: (HappyAbsSyn ) -> ([Binding])
+happyOut61 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut61 #-}
+happyIn62 :: ([Symbol]) -> (HappyAbsSyn )
+happyIn62 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn62 #-}
+happyOut62 :: (HappyAbsSyn ) -> ([Symbol])
+happyOut62 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut62 #-}
+happyIn63 :: ([Type]) -> (HappyAbsSyn )
+happyIn63 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn63 #-}
+happyOut63 :: (HappyAbsSyn ) -> ([Type])
+happyOut63 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut63 #-}
+happyIn64 :: ([FunDecl]) -> (HappyAbsSyn )
+happyIn64 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn64 #-}
+happyOut64 :: (HappyAbsSyn ) -> ([FunDecl])
+happyOut64 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut64 #-}
+happyIn65 :: ([FunDef]) -> (HappyAbsSyn )
+happyIn65 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn65 #-}
+happyOut65 :: (HappyAbsSyn ) -> ([FunDef])
+happyOut65 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut65 #-}
+happyIn66 :: ([FunDec]) -> (HappyAbsSyn )
+happyIn66 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn66 #-}
+happyOut66 :: (HappyAbsSyn ) -> ([FunDec])
+happyOut66 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut66 #-}
+happyInTok :: (Token) -> (HappyAbsSyn )
+happyInTok x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyInTok #-}
+happyOutTok :: (HappyAbsSyn ) -> (Token)
+happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOutTok #-}
+
+
+happyActOffsets :: HappyAddr
+happyActOffsets = HappyA# "\xc1\x01\xc1\x01\x16\x01\x40\x01\xc0\x01\xbe\x01\xbe\x01\xbe\x01\xbf\x01\xbd\x01\xbc\x01\xbb\x01\xba\x01\xb9\x01\x54\x00\x49\x00\x14\x01\xb8\x01\x0e\x00\xd4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x01\x00\x00\x0a\x00\x23\x01\x23\x01\x03\x00\x23\x01\x09\x00\x08\x00\x07\x00\x01\x00\x06\x00\x04\x00\x00\x00\xb7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\x01\xb6\x01\x00\x00\xb4\x01\xb3\x01\xb2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\x01\xaa\x00\xaf\x01\x00\x00\x00\x00\x00\x00\xb1\x01\xf8\xff\x00\x00\x00\x00\xb1\x01\xb0\x01\xae\x01\xad\x01\xa8\x01\xac\x01\xa7\x01\xa4\x01\x9d\x01\x93\x01\x86\x01\x00\x00\x6b\x00\xab\x01\x85\x01\xaa\x01\x84\x01\x54\x00\x84\x01\x84\x01\xa9\x01\x83\x01\x00\x00\x00\x00\x83\x01\x21\x00\x3e\x00\xa6\x01\x1d\x00\x82\x01\x14\x00\x0d\x00\xa5\x01\x80\x01\x0a\x01\x80\x01\x00\x00\xa3\x01\xa2\x01\x00\x00\x00\x00\x7f\x01\x00\x00\x7f\x01\x7e\x01\x00\x00\x7a\x01\x00\x00\x00\x00\x7a\x01\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\x01\xa0\x01\x00\x00\x00\x00\x54\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x9f\x01\x00\x00\x1b\x00\x9e\x01\x1b\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x00\x1b\x00\x00\x00\x00\x00\x54\x00\x18\x00\x00\x00\x52\x00\x50\x00\x9c\x01\x9b\x01\x4b\x01\x49\x01\x9a\x01\x00\x00\x47\x01\x4e\x00\x55\x00\x1b\x00\x99\x01\x46\x00\x98\x01\x00\x00\x97\x01\x96\x01\x45\x01\x00\x00\x95\x01\x00\x00\x94\x01\x48\x01\x48\x01\x48\x01\x7c\x01\x46\x01\x92\x01\x00\x00\x54\x00\x54\x00\x43\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x01\x00\x00\x91\x01\x3f\x01\x3d\x01\x90\x01\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x1b\x00\x54\x00\x1b\x00\x00\x00\x00\x00\x8f\x01\x00\x00\x8e\x01\x8d\x01\x8c\x01\x00\x00\x12\x00\x8b\x01\x8a\x01\x89\x01\xe9\x00\x88\x01\x00\x00\x87\x01\x79\x01\x76\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
+
+happyGotoOffsets :: HappyAddr
+happyGotoOffsets = HappyA# "\x3a\x01\x74\x01\x36\x01\x75\x01\x73\x01\x13\x01\x22\x01\xb7\x00\x2e\x01\x7d\x01\x7b\x01\x71\x01\x72\x01\x6d\x01\x09\x01\x07\x01\x6f\x01\x6c\x01\x11\x00\x15\x00\x70\x01\x6e\x01\x6a\x01\x6b\x01\x55\x01\x68\x01\x5a\x01\x54\x01\x52\x01\x4c\x01\x4e\x01\x00\x00\x00\x00\xb3\x00\x92\x00\x0d\x01\xfd\x00\x69\x01\x65\x01\x5c\x01\x61\x01\x05\x01\x59\x01\x58\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\x00\x66\x01\x00\x00\x00\x00\x00\x00\x00\x00\x64\x01\x00\x00\x00\x00\x00\x00\x63\x01\x00\x00\x62\x01\x00\x00\x60\x01\x00\x00\x5f\x01\x00\x00\x5e\x01\x00\x00\x00\x00\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x10\x01\x00\x00\x0b\x01\x5d\x01\x8d\x00\x70\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x01\x00\x00\x57\x01\x00\x00\x56\x01\x5b\x01\x00\x00\x53\x01\x3e\x01\x00\x00\x51\x01\x00\x00\x66\x00\x3c\x01\x00\x00\x37\x01\x3b\x01\x00\x00\x4a\x01\x39\x01\x33\x01\xba\x00\xf3\x00\x19\x01\x12\x01\x00\x00\x00\x00\x11\x01\xee\x00\x00\x00\xec\x00\x0b\x00\x18\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x01\xe8\x00\xf8\x00\xed\x00\xb6\x00\xe6\x00\xf0\x00\x90\x00\x90\x00\x00\x00\x00\x00\xea\x00\xd5\x00\x00\x00\xb9\x00\x9d\x00\x90\x00\xbe\x00\xe4\x00\x00\x00\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x6e\x00\x1a\x00\x08\x01\x00\x00\x91\x00\x00\x00\x00\x00\x8c\x00\x6f\x00\x87\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x00\x00\x00\x00\x00\x5e\x00\x43\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc4\x00\x00\x00\xc2\x00\x58\x00\x99\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\xf5\xff\x65\x00\x00\x00\x00\x00\x00\x00\xf7\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
+
+happyDefActions :: HappyAddr
+happyDefActions = HappyA# "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\xff\x97\xff\x95\xff\x93\xff\x91\xff\x8f\xff\x8d\xff\x8b\xff\x89\xff\x87\xff\x85\xff\x00\x00\xe0\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\xff\x00\x00\xa0\xff\xa2\xff\xa1\xff\x9b\xff\x9a\xff\xa4\xff\xa5\xff\x9d\xff\x9c\xff\xaa\xff\xa8\xff\xa3\xff\x9f\xff\xa9\xff\x9e\xff\xa6\xff\xa7\xff\xdf\xff\xac\xff\x00\x00\x00\x00\xae\xff\x00\x00\x00\x00\x00\x00\xb0\xff\xb1\xff\xb2\xff\xb6\xff\xbc\xff\x00\x00\x00\x00\x00\x00\xb3\xff\xb4\xff\xc1\xff\x00\x00\x00\x00\xbd\xff\xbe\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\xff\xcd\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xff\x00\x00\x00\x00\x85\xff\xd3\xff\x00\x00\xd5\xff\x00\x00\x00\x00\xd7\xff\x00\x00\x8d\xff\xd9\xff\x00\x00\xd0\xff\x00\x00\x8d\xff\xcb\xff\x8b\xff\x8f\xff\x00\x00\x00\x00\x91\xff\x8f\xff\x00\x00\x00\x00\x8b\xff\x8b\xff\xb5\xff\x00\x00\x95\xff\x00\x00\x00\x00\x00\x00\x00\x00\x8d\xff\x98\xff\x96\xff\x94\xff\x92\xff\x90\xff\x8e\xff\x8c\xff\x8a\xff\x88\xff\x86\xff\x84\xff\x00\x00\x00\x00\x97\xff\x99\xff\x00\x00\x00\x00\x8f\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8f\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xda\xff\x00\x00\x00\x00\x00\x00\xdd\xff\x00\x00\xdc\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcc\xff\x00\x00\x00\x00\x00\x00\xc8\xff\xc5\xff\xc4\xff\xc3\xff\xc2\xff\xc0\xff\xbf\xff\x00\x00\xba\xff\x00\x00\x00\x00\x00\x00\x00\x00\xad\xff\xaf\xff\xb9\xff\x00\x00\xbb\xff\x00\x00\x00\x00\x00\x00\xca\xff\xcf\xff\x00\x00\x93\xff\x00\x00\x00\x00\x00\x00\x95\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc9\xff\x00\x00\x00\x00\x00\x00\xb8\xff\xb7\xff\xc6\xff\xd8\xff\xdb\xff\xd6\xff\xd4\xff\xd2\xff\xd1\xff"#
+
+happyCheck :: HappyAddr
+happyCheck = HappyA# "\xff\xff\x09\x00\x01\x00\x0c\x00\x01\x00\x01\x00\x05\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x18\x00\x01\x00\x01\x00\x0d\x00\x0e\x00\x01\x00\x01\x00\x02\x00\x01\x00\x01\x00\x05\x00\x19\x00\x01\x00\x02\x00\x01\x00\x01\x00\x05\x00\x01\x00\x14\x00\x05\x00\x20\x00\x01\x00\x09\x00\x2c\x00\x14\x00\x05\x00\x19\x00\x0a\x00\x0b\x00\x15\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2c\x00\x2d\x00\x2d\x00\x20\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x20\x00\x2c\x00\x2c\x00\x20\x00\x2a\x00\x2b\x00\x2c\x00\x01\x00\x2c\x00\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2a\x00\x2b\x00\x2c\x00\x02\x00\x2c\x00\x01\x00\x2a\x00\x2b\x00\x2c\x00\x05\x00\x01\x00\x02\x00\x01\x00\x02\x00\x01\x00\x02\x00\x01\x00\x13\x00\x02\x00\x02\x00\x01\x00\x01\x00\x0d\x00\x0e\x00\x0d\x00\x0e\x00\x0d\x00\x0e\x00\x0d\x00\x0e\x00\x04\x00\x05\x00\x00\x00\x01\x00\x01\x00\x10\x00\x20\x00\x2c\x00\x12\x00\x06\x00\x0f\x00\x15\x00\x01\x00\x01\x00\x01\x00\x2c\x00\x2a\x00\x2b\x00\x2c\x00\x11\x00\x09\x00\x12\x00\x09\x00\x2c\x00\x15\x00\x2c\x00\x03\x00\x2c\x00\x10\x00\x2c\x00\x2c\x00\x2c\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x01\x00\x01\x00\x0f\x00\x10\x00\x01\x00\x01\x00\x01\x00\x29\x00\x0e\x00\x09\x00\x2c\x00\x07\x00\x00\x00\x01\x00\x09\x00\x10\x00\x1d\x00\x1e\x00\x1f\x00\x10\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x11\x00\x0e\x00\x2c\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x01\x00\x01\x00\x0f\x00\x10\x00\x01\x00\x01\x00\x0a\x00\x0b\x00\x01\x00\x09\x00\x06\x00\x00\x00\x01\x00\x00\x00\x01\x00\x10\x00\x1d\x00\x1e\x00\x1f\x00\x10\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x11\x00\x1b\x00\x11\x00\x2c\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x01\x00\x0d\x00\x0f\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x01\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\x00\x10\x00\x1d\x00\x1e\x00\x00\x00\x01\x00\x11\x00\x22\x00\x11\x00\x0e\x00\x11\x00\x26\x00\x27\x00\x28\x00\x11\x00\x01\x00\x11\x00\x2c\x00\x00\x00\x01\x00\x16\x00\x11\x00\x00\x00\x01\x00\x00\x00\x01\x00\x01\x00\x01\x00\x1b\x00\x01\x00\x10\x00\x01\x00\x17\x00\x08\x00\x01\x00\x11\x00\x08\x00\x01\x00\x08\x00\x11\x00\x07\x00\x11\x00\x10\x00\x07\x00\x11\x00\x12\x00\x01\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x01\x00\x1a\x00\x1b\x00\x1c\x00\x11\x00\x12\x00\x18\x00\x08\x00\x15\x00\x16\x00\x17\x00\x18\x00\x1d\x00\x1a\x00\x1b\x00\x1c\x00\x1f\x00\x1c\x00\x21\x00\x1d\x00\x23\x00\x0a\x00\x0b\x00\x04\x00\x05\x00\x02\x00\x03\x00\x01\x00\x02\x00\x01\x00\x02\x00\x01\x00\x02\x00\x01\x00\x02\x00\x01\x00\x02\x00\x01\x00\x02\x00\x01\x00\x02\x00\x01\x00\x02\x00\x1b\x00\x2c\x00\x2d\x00\x11\x00\x12\x00\x1a\x00\x1d\x00\x0b\x00\x1b\x00\x06\x00\x1c\x00\x06\x00\x1c\x00\x00\x00\x06\x00\x06\x00\x01\x00\x01\x00\x01\x00\x01\x00\x20\x00\x01\x00\x01\x00\x01\x00\x00\x00\x0f\x00\x01\x00\x0d\x00\x01\x00\x1f\x00\x13\x00\x0c\x00\x20\x00\x1a\x00\x1e\x00\x1d\x00\x2c\x00\x0e\x00\x2c\x00\xff\xff\x1c\x00\x03\x00\x02\x00\x06\x00\x05\x00\x02\x00\x0f\x00\x01\x00\x0d\x00\x13\x00\x0e\x00\x12\x00\x18\x00\x1b\x00\x19\x00\x17\x00\x16\x00\x0c\x00\x0b\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\xff\xff\x02\x00\x02\x00\x02\x00\x01\x00\x01\x00\x01\x00\x01\x00\x29\x00\x02\x00\x02\x00\x01\x00\x01\x00\x29\x00\x2b\x00\x01\x00\x01\x00\x01\x00\x2d\x00\x2c\x00\xff\xff\x2d\x00\x2d\x00\x2d\x00\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x2c\x00\x01\x00\xff\xff\x01\x00\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\x2d\x00\x2d\x00\xff\xff\xff\xff\x2c\x00\x2c\x00\x2b\x00\x2d\x00\x2c\x00\xff\xff\x2d\x00\x2d\x00\x2b\x00\x2d\x00\x2c\x00\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
+
+happyTable :: HappyAddr
+happyTable = HappyA# "\x00\x00\x96\x00\x4e\x00\xa1\x00\x54\x00\x58\x00\x4f\x00\x46\x00\x5e\x00\x5c\x00\x5a\x00\x63\x00\x40\x00\xee\x00\x80\x00\x43\x00\x55\x00\x56\x00\x40\x00\x4e\x00\x01\x01\x82\x00\x2c\x00\x4f\x00\xf2\x00\x4e\x00\xda\x00\x63\x00\x4e\x00\x4f\x00\x85\x00\xaa\x00\x4f\x00\x50\x00\x8a\x00\xeb\x00\x40\x00\x41\x00\x4f\x00\x44\x00\xa8\x00\x61\x00\x2d\x00\x51\x00\x21\x00\x40\x00\xff\xff\x40\x00\xff\xff\xff\xff\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x50\x00\x40\x00\x40\x00\x50\x00\x51\x00\x21\x00\x40\x00\x88\x00\x40\x00\x50\x00\x51\x00\x21\x00\x40\x00\x51\x00\x21\x00\x40\x00\xcb\x00\x40\x00\x4e\x00\x51\x00\x21\x00\x40\x00\x4f\x00\x54\x00\xcf\x00\x54\x00\xd7\x00\x54\x00\xd8\x00\x54\x00\x9f\x00\xce\x00\xdf\x00\x51\x00\x2c\x00\x55\x00\x56\x00\x55\x00\x56\x00\x55\x00\x56\x00\x55\x00\x56\x00\x7b\x00\x6f\x00\x4a\x00\x4b\x00\x2c\x00\xf5\x00\x50\x00\x40\x00\x97\x00\xbb\x00\x9e\x00\x98\x00\x63\x00\x51\x00\x63\x00\x40\x00\x51\x00\x21\x00\x40\x00\xa0\x00\xec\x00\x97\x00\x7e\x00\x40\x00\x98\x00\x40\x00\xc5\x00\x40\x00\xe5\x00\x40\x00\x40\x00\x40\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x51\x00\x63\x00\x39\x00\x9a\x00\x51\x00\x67\x00\x63\x00\x6b\x00\xa3\x00\x80\x00\x40\x00\xe8\x00\x4a\x00\x4b\x00\xa7\x00\xe6\x00\x3a\x00\x3b\x00\x48\x00\xa5\x00\x49\x00\x3c\x00\x4a\x00\x9b\x00\x9c\x00\x3d\x00\x3e\x00\x3f\x00\x6b\x00\xf4\x00\xa3\x00\x40\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x51\x00\x63\x00\x39\x00\x9a\x00\x51\x00\x8e\x00\xa8\x00\x61\x00\xa4\x00\x64\x00\x8f\x00\x4a\x00\x4b\x00\x4a\x00\x4b\x00\xda\x00\x3a\x00\x3b\x00\x48\x00\xb3\x00\x49\x00\x3c\x00\x4a\x00\x9b\x00\x9c\x00\x3d\x00\x3e\x00\x3f\x00\xf6\x00\xd0\x00\xf7\x00\x40\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x51\x00\xa2\x00\x39\x00\x4a\x00\x4b\x00\x4a\x00\x4b\x00\x4a\x00\x4b\x00\x5e\x00\xfd\x00\x4a\x00\x4b\x00\x4a\x00\x4b\x00\x8b\x00\x3a\x00\x3b\x00\x4a\x00\x4b\x00\xcc\x00\x3c\x00\xa0\x00\xa3\x00\xdd\x00\x3d\x00\x3e\x00\x3f\x00\xab\x00\x51\x00\xad\x00\x40\x00\x4a\x00\x4b\x00\xdb\x00\xb2\x00\x4a\x00\x4b\x00\x4a\x00\x4b\x00\x65\x00\x51\x00\xd8\x00\x65\x00\xa5\x00\x65\x00\xdc\x00\xea\x00\x67\x00\x88\x00\x83\x00\x67\x00\xa6\x00\xa0\x00\x86\x00\x4c\x00\x52\x00\x68\x00\x6d\x00\x6e\x00\xa4\x00\x7d\x00\x71\x00\x72\x00\x73\x00\x74\x00\x65\x00\x75\x00\x76\x00\x77\x00\x6d\x00\x6e\x00\xae\x00\x66\x00\x71\x00\x72\x00\x73\x00\x74\x00\xb0\x00\x75\x00\x76\x00\x77\x00\x48\x00\xa9\x00\x49\x00\xb1\x00\x4a\x00\x60\x00\x61\x00\x6e\x00\x6f\x00\x79\x00\x7a\x00\x46\x00\xe1\x00\x58\x00\xe2\x00\x5a\x00\xe4\x00\x5a\x00\xe5\x00\x63\x00\xc7\x00\x5a\x00\xd0\x00\x5c\x00\xd3\x00\x5a\x00\xd4\x00\xb4\x00\x40\x00\xff\xff\x6d\x00\x6e\x00\xb5\x00\xb9\x00\xb6\x00\xb8\x00\xbc\x00\xba\x00\xbe\x00\xbd\x00\xbf\x00\xc0\x00\xc1\x00\x82\x00\x8e\x00\x90\x00\x91\x00\xc2\x00\x92\x00\x93\x00\x94\x00\x96\x00\x9e\x00\x9d\x00\xa2\x00\xa4\x00\x22\x00\x9f\x00\xa1\x00\x21\x00\x27\x00\x23\x00\x24\x00\x40\x00\xa3\x00\x40\x00\x00\x00\x25\x00\x77\x00\xf9\x00\x69\x00\x6b\x00\xfa\x00\x56\x00\xea\x00\x5a\x00\x44\x00\x58\x00\x46\x00\x29\x00\x26\x00\x28\x00\x2a\x00\x2b\x00\x5c\x00\x5e\x00\xfb\x00\xfc\x00\xfe\x00\xff\x00\x00\x01\xf0\x00\xf1\x00\xf2\x00\xf4\x00\xe0\x00\xe3\x00\xe8\x00\xee\x00\x79\x00\xc8\x00\xc9\x00\xca\x00\xcc\x00\x00\x00\xd2\x00\xd5\x00\xd6\x00\xad\x00\xb0\x00\x60\x00\xb8\x00\x6b\x00\xc4\x00\xc5\x00\x7e\x00\x86\x00\x6b\x00\x21\x00\x8b\x00\x8d\x00\x8e\x00\xff\xff\x40\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x58\x00\x5a\x00\x5c\x00\x5e\x00\x60\x00\x40\x00\x63\x00\x00\x00\x79\x00\x00\x00\x00\x00\x00\x00\x9d\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x40\x00\x40\x00\x21\x00\xff\xff\x40\x00\x00\x00\xff\xff\xff\xff\x21\x00\xff\xff\x40\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
+
+happyReduceArr = Happy_Data_Array.array (31, 123) [
+	(31 , happyReduce_31),
+	(32 , happyReduce_32),
+	(33 , happyReduce_33),
+	(34 , happyReduce_34),
+	(35 , happyReduce_35),
+	(36 , happyReduce_36),
+	(37 , happyReduce_37),
+	(38 , happyReduce_38),
+	(39 , happyReduce_39),
+	(40 , happyReduce_40),
+	(41 , happyReduce_41),
+	(42 , happyReduce_42),
+	(43 , happyReduce_43),
+	(44 , happyReduce_44),
+	(45 , happyReduce_45),
+	(46 , happyReduce_46),
+	(47 , happyReduce_47),
+	(48 , happyReduce_48),
+	(49 , happyReduce_49),
+	(50 , happyReduce_50),
+	(51 , happyReduce_51),
+	(52 , happyReduce_52),
+	(53 , happyReduce_53),
+	(54 , happyReduce_54),
+	(55 , happyReduce_55),
+	(56 , happyReduce_56),
+	(57 , happyReduce_57),
+	(58 , happyReduce_58),
+	(59 , happyReduce_59),
+	(60 , happyReduce_60),
+	(61 , happyReduce_61),
+	(62 , happyReduce_62),
+	(63 , happyReduce_63),
+	(64 , happyReduce_64),
+	(65 , happyReduce_65),
+	(66 , happyReduce_66),
+	(67 , happyReduce_67),
+	(68 , happyReduce_68),
+	(69 , happyReduce_69),
+	(70 , happyReduce_70),
+	(71 , happyReduce_71),
+	(72 , happyReduce_72),
+	(73 , happyReduce_73),
+	(74 , happyReduce_74),
+	(75 , happyReduce_75),
+	(76 , happyReduce_76),
+	(77 , happyReduce_77),
+	(78 , happyReduce_78),
+	(79 , happyReduce_79),
+	(80 , happyReduce_80),
+	(81 , happyReduce_81),
+	(82 , happyReduce_82),
+	(83 , happyReduce_83),
+	(84 , happyReduce_84),
+	(85 , happyReduce_85),
+	(86 , happyReduce_86),
+	(87 , happyReduce_87),
+	(88 , happyReduce_88),
+	(89 , happyReduce_89),
+	(90 , happyReduce_90),
+	(91 , happyReduce_91),
+	(92 , happyReduce_92),
+	(93 , happyReduce_93),
+	(94 , happyReduce_94),
+	(95 , happyReduce_95),
+	(96 , happyReduce_96),
+	(97 , happyReduce_97),
+	(98 , happyReduce_98),
+	(99 , happyReduce_99),
+	(100 , happyReduce_100),
+	(101 , happyReduce_101),
+	(102 , happyReduce_102),
+	(103 , happyReduce_103),
+	(104 , happyReduce_104),
+	(105 , happyReduce_105),
+	(106 , happyReduce_106),
+	(107 , happyReduce_107),
+	(108 , happyReduce_108),
+	(109 , happyReduce_109),
+	(110 , happyReduce_110),
+	(111 , happyReduce_111),
+	(112 , happyReduce_112),
+	(113 , happyReduce_113),
+	(114 , happyReduce_114),
+	(115 , happyReduce_115),
+	(116 , happyReduce_116),
+	(117 , happyReduce_117),
+	(118 , happyReduce_118),
+	(119 , happyReduce_119),
+	(120 , happyReduce_120),
+	(121 , happyReduce_121),
+	(122 , happyReduce_122),
+	(123 , happyReduce_123)
+	]
+
+happy_n_terms = 46 :: Int
+happy_n_nonterms = 33 :: Int
+
+happyReduce_31 = happySpecReduce_1  0# happyReduction_31
+happyReduction_31 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (PT _ (TI happy_var_1)) -> 
+	happyIn34
+		 ((read ( happy_var_1)) :: Integer
+	)}
+
+happyReduce_32 = happySpecReduce_1  1# happyReduction_32
+happyReduction_32 happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	happyIn35
+		 (Symbol (mkPosToken happy_var_1)
+	)}
+
+happyReduce_33 = happySpecReduce_1  2# happyReduction_33
+happyReduction_33 happy_x_1
+	 =  case happyOut37 happy_x_1 of { happy_var_1 -> 
+	happyIn36
+		 (Start happy_var_1
+	)}
+
+happyReduce_34 = happySpecReduce_3  3# happyReduction_34
+happyReduction_34 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  happyIn37
+		 ([]
+	)
+
+happyReduce_35 = happyReduce 4# 3# happyReduction_35
+happyReduction_35 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut38 happy_x_2 of { happy_var_2 -> 
+	case happyOut37 happy_x_4 of { happy_var_4 -> 
+	happyIn37
+		 ((:) happy_var_2 happy_var_4
+	) `HappyStk` happyRest}}
+
+happyReduce_36 = happyReduce 7# 4# happyReduction_36
+happyReduction_36 (happy_x_7 `HappyStk`
+	happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut62 happy_x_3 of { happy_var_3 -> 
+	case happyOut59 happy_x_6 of { happy_var_6 -> 
+	happyIn38
+		 (DeclareDatatypes (reverse happy_var_3) (reverse happy_var_6)
+	) `HappyStk` happyRest}}
+
+happyReduce_37 = happySpecReduce_3  4# happyReduction_37
+happyReduction_37 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut35 happy_x_2 of { happy_var_2 -> 
+	case happyOut34 happy_x_3 of { happy_var_3 -> 
+	happyIn38
+		 (DeclareSort happy_var_2 happy_var_3
+	)}}
+
+happyReduce_38 = happySpecReduce_2  4# happyReduction_38
+happyReduction_38 happy_x_2
+	happy_x_1
+	 =  case happyOut41 happy_x_2 of { happy_var_2 -> 
+	happyIn38
+		 (DeclareConst happy_var_2
+	)}
+
+happyReduce_39 = happyReduce 7# 4# happyReduction_39
+happyReduction_39 (happy_x_7 `HappyStk`
+	happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut40 happy_x_3 of { happy_var_3 -> 
+	case happyOut41 happy_x_5 of { happy_var_5 -> 
+	happyIn38
+		 (DeclareConstPar happy_var_3 happy_var_5
+	) `HappyStk` happyRest}}
+
+happyReduce_40 = happySpecReduce_2  4# happyReduction_40
+happyReduction_40 happy_x_2
+	happy_x_1
+	 =  case happyOut42 happy_x_2 of { happy_var_2 -> 
+	happyIn38
+		 (DeclareFun happy_var_2
+	)}
+
+happyReduce_41 = happyReduce 7# 4# happyReduction_41
+happyReduction_41 (happy_x_7 `HappyStk`
+	happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut40 happy_x_3 of { happy_var_3 -> 
+	case happyOut42 happy_x_5 of { happy_var_5 -> 
+	happyIn38
+		 (DeclareFunPar happy_var_3 happy_var_5
+	) `HappyStk` happyRest}}
+
+happyReduce_42 = happySpecReduce_2  4# happyReduction_42
+happyReduction_42 happy_x_2
+	happy_x_1
+	 =  case happyOut43 happy_x_2 of { happy_var_2 -> 
+	happyIn38
+		 (DefineFun happy_var_2
+	)}
+
+happyReduce_43 = happyReduce 7# 4# happyReduction_43
+happyReduction_43 (happy_x_7 `HappyStk`
+	happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut40 happy_x_3 of { happy_var_3 -> 
+	case happyOut43 happy_x_5 of { happy_var_5 -> 
+	happyIn38
+		 (DefineFunPar happy_var_3 happy_var_5
+	) `HappyStk` happyRest}}
+
+happyReduce_44 = happySpecReduce_2  4# happyReduction_44
+happyReduction_44 happy_x_2
+	happy_x_1
+	 =  case happyOut43 happy_x_2 of { happy_var_2 -> 
+	happyIn38
+		 (DefineFunRec happy_var_2
+	)}
+
+happyReduce_45 = happyReduce 7# 4# happyReduction_45
+happyReduction_45 (happy_x_7 `HappyStk`
+	happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut40 happy_x_3 of { happy_var_3 -> 
+	case happyOut43 happy_x_5 of { happy_var_5 -> 
+	happyIn38
+		 (DefineFunRecPar happy_var_3 happy_var_5
+	) `HappyStk` happyRest}}
+
+happyReduce_46 = happyReduce 7# 4# happyReduction_46
+happyReduction_46 (happy_x_7 `HappyStk`
+	happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut66 happy_x_3 of { happy_var_3 -> 
+	case happyOut58 happy_x_6 of { happy_var_6 -> 
+	happyIn38
+		 (DefineFunsRec (reverse happy_var_3) (reverse happy_var_6)
+	) `HappyStk` happyRest}}
+
+happyReduce_47 = happySpecReduce_2  4# happyReduction_47
+happyReduction_47 happy_x_2
+	happy_x_1
+	 =  case happyOut39 happy_x_1 of { happy_var_1 -> 
+	case happyOut51 happy_x_2 of { happy_var_2 -> 
+	happyIn38
+		 (Assert happy_var_1 happy_var_2
+	)}}
+
+happyReduce_48 = happyReduce 5# 4# happyReduction_48
+happyReduction_48 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut39 happy_x_1 of { happy_var_1 -> 
+	case happyOut40 happy_x_3 of { happy_var_3 -> 
+	case happyOut51 happy_x_4 of { happy_var_4 -> 
+	happyIn38
+		 (AssertPar happy_var_1 happy_var_3 happy_var_4
+	) `HappyStk` happyRest}}}
+
+happyReduce_49 = happySpecReduce_1  5# happyReduction_49
+happyReduction_49 happy_x_1
+	 =  happyIn39
+		 (AssertIt
+	)
+
+happyReduce_50 = happySpecReduce_1  5# happyReduction_50
+happyReduction_50 happy_x_1
+	 =  happyIn39
+		 (AssertNot
+	)
+
+happyReduce_51 = happyReduce 4# 6# happyReduction_51
+happyReduction_51 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut62 happy_x_3 of { happy_var_3 -> 
+	happyIn40
+		 (Par (reverse happy_var_3)
+	) `HappyStk` happyRest}
+
+happyReduce_52 = happySpecReduce_2  7# happyReduction_52
+happyReduction_52 happy_x_2
+	happy_x_1
+	 =  case happyOut35 happy_x_1 of { happy_var_1 -> 
+	case happyOut50 happy_x_2 of { happy_var_2 -> 
+	happyIn41
+		 (ConstDecl happy_var_1 happy_var_2
+	)}}
+
+happyReduce_53 = happyReduce 5# 8# happyReduction_53
+happyReduction_53 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut35 happy_x_1 of { happy_var_1 -> 
+	case happyOut63 happy_x_3 of { happy_var_3 -> 
+	case happyOut50 happy_x_5 of { happy_var_5 -> 
+	happyIn42
+		 (FunDecl happy_var_1 (reverse happy_var_3) happy_var_5
+	) `HappyStk` happyRest}}}
+
+happyReduce_54 = happyReduce 6# 9# happyReduction_54
+happyReduction_54 (happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut35 happy_x_1 of { happy_var_1 -> 
+	case happyOut61 happy_x_3 of { happy_var_3 -> 
+	case happyOut50 happy_x_5 of { happy_var_5 -> 
+	case happyOut51 happy_x_6 of { happy_var_6 -> 
+	happyIn43
+		 (FunDef happy_var_1 (reverse happy_var_3) happy_var_5 happy_var_6
+	) `HappyStk` happyRest}}}}
+
+happyReduce_55 = happyReduce 4# 10# happyReduction_55
+happyReduction_55 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut40 happy_x_2 of { happy_var_2 -> 
+	case happyOut45 happy_x_3 of { happy_var_3 -> 
+	happyIn44
+		 (ParFunDec happy_var_2 happy_var_3
+	) `HappyStk` happyRest}}
+
+happyReduce_56 = happySpecReduce_1  10# happyReduction_56
+happyReduction_56 happy_x_1
+	 =  case happyOut45 happy_x_1 of { happy_var_1 -> 
+	happyIn44
+		 (MonoFunDec happy_var_1
+	)}
+
+happyReduce_57 = happyReduce 7# 11# happyReduction_57
+happyReduction_57 (happy_x_7 `HappyStk`
+	happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut35 happy_x_2 of { happy_var_2 -> 
+	case happyOut61 happy_x_4 of { happy_var_4 -> 
+	case happyOut50 happy_x_6 of { happy_var_6 -> 
+	happyIn45
+		 (InnerFunDec happy_var_2 (reverse happy_var_4) happy_var_6
+	) `HappyStk` happyRest}}}
+
+happyReduce_58 = happyReduce 4# 12# happyReduction_58
+happyReduction_58 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut35 happy_x_2 of { happy_var_2 -> 
+	case happyOut60 happy_x_3 of { happy_var_3 -> 
+	happyIn46
+		 (Datatype happy_var_2 (reverse happy_var_3)
+	) `HappyStk` happyRest}}
+
+happyReduce_59 = happyReduce 4# 13# happyReduction_59
+happyReduction_59 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut35 happy_x_2 of { happy_var_2 -> 
+	case happyOut61 happy_x_3 of { happy_var_3 -> 
+	happyIn47
+		 (Constructor happy_var_2 (reverse happy_var_3)
+	) `HappyStk` happyRest}}
+
+happyReduce_60 = happyReduce 4# 14# happyReduction_60
+happyReduction_60 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut35 happy_x_2 of { happy_var_2 -> 
+	case happyOut50 happy_x_3 of { happy_var_3 -> 
+	happyIn48
+		 (Binding happy_var_2 happy_var_3
+	) `HappyStk` happyRest}}
+
+happyReduce_61 = happyReduce 4# 15# happyReduction_61
+happyReduction_61 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut35 happy_x_2 of { happy_var_2 -> 
+	case happyOut51 happy_x_3 of { happy_var_3 -> 
+	happyIn49
+		 (LetDecl happy_var_2 happy_var_3
+	) `HappyStk` happyRest}}
+
+happyReduce_62 = happySpecReduce_1  16# happyReduction_62
+happyReduction_62 happy_x_1
+	 =  case happyOut35 happy_x_1 of { happy_var_1 -> 
+	happyIn50
+		 (TyVar happy_var_1
+	)}
+
+happyReduce_63 = happyReduce 4# 16# happyReduction_63
+happyReduction_63 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut35 happy_x_2 of { happy_var_2 -> 
+	case happyOut63 happy_x_3 of { happy_var_3 -> 
+	happyIn50
+		 (TyApp happy_var_2 (reverse happy_var_3)
+	) `HappyStk` happyRest}}
+
+happyReduce_64 = happyReduce 4# 16# happyReduction_64
+happyReduction_64 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut63 happy_x_3 of { happy_var_3 -> 
+	happyIn50
+		 (ArrowTy (reverse happy_var_3)
+	) `HappyStk` happyRest}
+
+happyReduce_65 = happySpecReduce_1  16# happyReduction_65
+happyReduction_65 happy_x_1
+	 =  happyIn50
+		 (IntTy
+	)
+
+happyReduce_66 = happySpecReduce_1  16# happyReduction_66
+happyReduction_66 happy_x_1
+	 =  happyIn50
+		 (BoolTy
+	)
+
+happyReduce_67 = happySpecReduce_1  17# happyReduction_67
+happyReduction_67 happy_x_1
+	 =  case happyOut35 happy_x_1 of { happy_var_1 -> 
+	happyIn51
+		 (Var happy_var_1
+	)}
+
+happyReduce_68 = happyReduce 5# 17# happyReduction_68
+happyReduction_68 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut51 happy_x_3 of { happy_var_3 -> 
+	case happyOut50 happy_x_4 of { happy_var_4 -> 
+	happyIn51
+		 (As happy_var_3 happy_var_4
+	) `HappyStk` happyRest}}
+
+happyReduce_69 = happyReduce 4# 17# happyReduction_69
+happyReduction_69 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut55 happy_x_2 of { happy_var_2 -> 
+	case happyOut58 happy_x_3 of { happy_var_3 -> 
+	happyIn51
+		 (App happy_var_2 (reverse happy_var_3)
+	) `HappyStk` happyRest}}
+
+happyReduce_70 = happyReduce 5# 17# happyReduction_70
+happyReduction_70 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut51 happy_x_3 of { happy_var_3 -> 
+	case happyOut57 happy_x_4 of { happy_var_4 -> 
+	happyIn51
+		 (Match happy_var_3 (reverse happy_var_4)
+	) `HappyStk` happyRest}}
+
+happyReduce_71 = happyReduce 7# 17# happyReduction_71
+happyReduction_71 (happy_x_7 `HappyStk`
+	happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut56 happy_x_4 of { happy_var_4 -> 
+	case happyOut51 happy_x_6 of { happy_var_6 -> 
+	happyIn51
+		 (Let (reverse happy_var_4) happy_var_6
+	) `HappyStk` happyRest}}
+
+happyReduce_72 = happyReduce 7# 17# happyReduction_72
+happyReduction_72 (happy_x_7 `HappyStk`
+	happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut52 happy_x_2 of { happy_var_2 -> 
+	case happyOut61 happy_x_4 of { happy_var_4 -> 
+	case happyOut51 happy_x_6 of { happy_var_6 -> 
+	happyIn51
+		 (Binder happy_var_2 (reverse happy_var_4) happy_var_6
+	) `HappyStk` happyRest}}}
+
+happyReduce_73 = happySpecReduce_1  17# happyReduction_73
+happyReduction_73 happy_x_1
+	 =  case happyOut34 happy_x_1 of { happy_var_1 -> 
+	happyIn51
+		 (LitInt happy_var_1
+	)}
+
+happyReduce_74 = happySpecReduce_2  17# happyReduction_74
+happyReduction_74 happy_x_2
+	happy_x_1
+	 =  case happyOut34 happy_x_2 of { happy_var_2 -> 
+	happyIn51
+		 (LitNegInt happy_var_2
+	)}
+
+happyReduce_75 = happySpecReduce_1  17# happyReduction_75
+happyReduction_75 happy_x_1
+	 =  happyIn51
+		 (LitTrue
+	)
+
+happyReduce_76 = happySpecReduce_1  17# happyReduction_76
+happyReduction_76 happy_x_1
+	 =  happyIn51
+		 (LitFalse
+	)
+
+happyReduce_77 = happySpecReduce_1  18# happyReduction_77
+happyReduction_77 happy_x_1
+	 =  happyIn52
+		 (Lambda
+	)
+
+happyReduce_78 = happySpecReduce_1  18# happyReduction_78
+happyReduction_78 happy_x_1
+	 =  happyIn52
+		 (Forall
+	)
+
+happyReduce_79 = happySpecReduce_1  18# happyReduction_79
+happyReduction_79 happy_x_1
+	 =  happyIn52
+		 (Exists
+	)
+
+happyReduce_80 = happyReduce 5# 19# happyReduction_80
+happyReduction_80 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut54 happy_x_3 of { happy_var_3 -> 
+	case happyOut51 happy_x_4 of { happy_var_4 -> 
+	happyIn53
+		 (Case happy_var_3 happy_var_4
+	) `HappyStk` happyRest}}
+
+happyReduce_81 = happySpecReduce_1  20# happyReduction_81
+happyReduction_81 happy_x_1
+	 =  happyIn54
+		 (Default
+	)
+
+happyReduce_82 = happyReduce 4# 20# happyReduction_82
+happyReduction_82 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut35 happy_x_2 of { happy_var_2 -> 
+	case happyOut62 happy_x_3 of { happy_var_3 -> 
+	happyIn54
+		 (ConPat happy_var_2 (reverse happy_var_3)
+	) `HappyStk` happyRest}}
+
+happyReduce_83 = happySpecReduce_1  20# happyReduction_83
+happyReduction_83 happy_x_1
+	 =  case happyOut35 happy_x_1 of { happy_var_1 -> 
+	happyIn54
+		 (SimplePat happy_var_1
+	)}
+
+happyReduce_84 = happySpecReduce_1  21# happyReduction_84
+happyReduction_84 happy_x_1
+	 =  case happyOut35 happy_x_1 of { happy_var_1 -> 
+	happyIn55
+		 (Const happy_var_1
+	)}
+
+happyReduce_85 = happySpecReduce_1  21# happyReduction_85
+happyReduction_85 happy_x_1
+	 =  happyIn55
+		 (At
+	)
+
+happyReduce_86 = happySpecReduce_1  21# happyReduction_86
+happyReduction_86 happy_x_1
+	 =  happyIn55
+		 (IfThenElse
+	)
+
+happyReduce_87 = happySpecReduce_1  21# happyReduction_87
+happyReduction_87 happy_x_1
+	 =  happyIn55
+		 (And
+	)
+
+happyReduce_88 = happySpecReduce_1  21# happyReduction_88
+happyReduction_88 happy_x_1
+	 =  happyIn55
+		 (Or
+	)
+
+happyReduce_89 = happySpecReduce_1  21# happyReduction_89
+happyReduction_89 happy_x_1
+	 =  happyIn55
+		 (Not
+	)
+
+happyReduce_90 = happySpecReduce_1  21# happyReduction_90
+happyReduction_90 happy_x_1
+	 =  happyIn55
+		 (Implies
+	)
+
+happyReduce_91 = happySpecReduce_1  21# happyReduction_91
+happyReduction_91 happy_x_1
+	 =  happyIn55
+		 (Equal
+	)
+
+happyReduce_92 = happySpecReduce_1  21# happyReduction_92
+happyReduction_92 happy_x_1
+	 =  happyIn55
+		 (Distinct
+	)
+
+happyReduce_93 = happySpecReduce_1  21# happyReduction_93
+happyReduction_93 happy_x_1
+	 =  happyIn55
+		 (IntAdd
+	)
+
+happyReduce_94 = happySpecReduce_1  21# happyReduction_94
+happyReduction_94 happy_x_1
+	 =  happyIn55
+		 (IntSub
+	)
+
+happyReduce_95 = happySpecReduce_1  21# happyReduction_95
+happyReduction_95 happy_x_1
+	 =  happyIn55
+		 (IntMul
+	)
+
+happyReduce_96 = happySpecReduce_1  21# happyReduction_96
+happyReduction_96 happy_x_1
+	 =  happyIn55
+		 (IntDiv
+	)
+
+happyReduce_97 = happySpecReduce_1  21# happyReduction_97
+happyReduction_97 happy_x_1
+	 =  happyIn55
+		 (IntMod
+	)
+
+happyReduce_98 = happySpecReduce_1  21# happyReduction_98
+happyReduction_98 happy_x_1
+	 =  happyIn55
+		 (IntGt
+	)
+
+happyReduce_99 = happySpecReduce_1  21# happyReduction_99
+happyReduction_99 happy_x_1
+	 =  happyIn55
+		 (IntGe
+	)
+
+happyReduce_100 = happySpecReduce_1  21# happyReduction_100
+happyReduction_100 happy_x_1
+	 =  happyIn55
+		 (IntLt
+	)
+
+happyReduce_101 = happySpecReduce_1  21# happyReduction_101
+happyReduction_101 happy_x_1
+	 =  happyIn55
+		 (IntLe
+	)
+
+happyReduce_102 = happySpecReduce_0  22# happyReduction_102
+happyReduction_102  =  happyIn56
+		 ([]
+	)
+
+happyReduce_103 = happySpecReduce_2  22# happyReduction_103
+happyReduction_103 happy_x_2
+	happy_x_1
+	 =  case happyOut56 happy_x_1 of { happy_var_1 -> 
+	case happyOut49 happy_x_2 of { happy_var_2 -> 
+	happyIn56
+		 (flip (:) happy_var_1 happy_var_2
+	)}}
+
+happyReduce_104 = happySpecReduce_0  23# happyReduction_104
+happyReduction_104  =  happyIn57
+		 ([]
+	)
+
+happyReduce_105 = happySpecReduce_2  23# happyReduction_105
+happyReduction_105 happy_x_2
+	happy_x_1
+	 =  case happyOut57 happy_x_1 of { happy_var_1 -> 
+	case happyOut53 happy_x_2 of { happy_var_2 -> 
+	happyIn57
+		 (flip (:) happy_var_1 happy_var_2
+	)}}
+
+happyReduce_106 = happySpecReduce_0  24# happyReduction_106
+happyReduction_106  =  happyIn58
+		 ([]
+	)
+
+happyReduce_107 = happySpecReduce_2  24# happyReduction_107
+happyReduction_107 happy_x_2
+	happy_x_1
+	 =  case happyOut58 happy_x_1 of { happy_var_1 -> 
+	case happyOut51 happy_x_2 of { happy_var_2 -> 
+	happyIn58
+		 (flip (:) happy_var_1 happy_var_2
+	)}}
+
+happyReduce_108 = happySpecReduce_0  25# happyReduction_108
+happyReduction_108  =  happyIn59
+		 ([]
+	)
+
+happyReduce_109 = happySpecReduce_2  25# happyReduction_109
+happyReduction_109 happy_x_2
+	happy_x_1
+	 =  case happyOut59 happy_x_1 of { happy_var_1 -> 
+	case happyOut46 happy_x_2 of { happy_var_2 -> 
+	happyIn59
+		 (flip (:) happy_var_1 happy_var_2
+	)}}
+
+happyReduce_110 = happySpecReduce_0  26# happyReduction_110
+happyReduction_110  =  happyIn60
+		 ([]
+	)
+
+happyReduce_111 = happySpecReduce_2  26# happyReduction_111
+happyReduction_111 happy_x_2
+	happy_x_1
+	 =  case happyOut60 happy_x_1 of { happy_var_1 -> 
+	case happyOut47 happy_x_2 of { happy_var_2 -> 
+	happyIn60
+		 (flip (:) happy_var_1 happy_var_2
+	)}}
+
+happyReduce_112 = happySpecReduce_0  27# happyReduction_112
+happyReduction_112  =  happyIn61
+		 ([]
+	)
+
+happyReduce_113 = happySpecReduce_2  27# happyReduction_113
+happyReduction_113 happy_x_2
+	happy_x_1
+	 =  case happyOut61 happy_x_1 of { happy_var_1 -> 
+	case happyOut48 happy_x_2 of { happy_var_2 -> 
+	happyIn61
+		 (flip (:) happy_var_1 happy_var_2
+	)}}
+
+happyReduce_114 = happySpecReduce_0  28# happyReduction_114
+happyReduction_114  =  happyIn62
+		 ([]
+	)
+
+happyReduce_115 = happySpecReduce_2  28# happyReduction_115
+happyReduction_115 happy_x_2
+	happy_x_1
+	 =  case happyOut62 happy_x_1 of { happy_var_1 -> 
+	case happyOut35 happy_x_2 of { happy_var_2 -> 
+	happyIn62
+		 (flip (:) happy_var_1 happy_var_2
+	)}}
+
+happyReduce_116 = happySpecReduce_0  29# happyReduction_116
+happyReduction_116  =  happyIn63
+		 ([]
+	)
+
+happyReduce_117 = happySpecReduce_2  29# happyReduction_117
+happyReduction_117 happy_x_2
+	happy_x_1
+	 =  case happyOut63 happy_x_1 of { happy_var_1 -> 
+	case happyOut50 happy_x_2 of { happy_var_2 -> 
+	happyIn63
+		 (flip (:) happy_var_1 happy_var_2
+	)}}
+
+happyReduce_118 = happySpecReduce_0  30# happyReduction_118
+happyReduction_118  =  happyIn64
+		 ([]
+	)
+
+happyReduce_119 = happySpecReduce_2  30# happyReduction_119
+happyReduction_119 happy_x_2
+	happy_x_1
+	 =  case happyOut64 happy_x_1 of { happy_var_1 -> 
+	case happyOut42 happy_x_2 of { happy_var_2 -> 
+	happyIn64
+		 (flip (:) happy_var_1 happy_var_2
+	)}}
+
+happyReduce_120 = happySpecReduce_0  31# happyReduction_120
+happyReduction_120  =  happyIn65
+		 ([]
+	)
+
+happyReduce_121 = happySpecReduce_2  31# happyReduction_121
+happyReduction_121 happy_x_2
+	happy_x_1
+	 =  case happyOut65 happy_x_1 of { happy_var_1 -> 
+	case happyOut43 happy_x_2 of { happy_var_2 -> 
+	happyIn65
+		 (flip (:) happy_var_1 happy_var_2
+	)}}
+
+happyReduce_122 = happySpecReduce_0  32# happyReduction_122
+happyReduction_122  =  happyIn66
+		 ([]
+	)
+
+happyReduce_123 = happySpecReduce_2  32# happyReduction_123
+happyReduction_123 happy_x_2
+	happy_x_1
+	 =  case happyOut66 happy_x_1 of { happy_var_1 -> 
+	case happyOut44 happy_x_2 of { happy_var_2 -> 
+	happyIn66
+		 (flip (:) happy_var_1 happy_var_2
+	)}}
+
+happyNewToken action sts stk [] =
+	happyDoAction 45# notHappyAtAll action sts stk []
+
+happyNewToken action sts stk (tk:tks) =
+	let cont i = happyDoAction i tk action sts stk tks in
+	case tk of {
+	PT _ (TS _ 1) -> cont 1#;
+	PT _ (TS _ 2) -> cont 2#;
+	PT _ (TS _ 3) -> cont 3#;
+	PT _ (TS _ 4) -> cont 4#;
+	PT _ (TS _ 5) -> cont 5#;
+	PT _ (TS _ 6) -> cont 6#;
+	PT _ (TS _ 7) -> cont 7#;
+	PT _ (TS _ 8) -> cont 8#;
+	PT _ (TS _ 9) -> cont 9#;
+	PT _ (TS _ 10) -> cont 10#;
+	PT _ (TS _ 11) -> cont 11#;
+	PT _ (TS _ 12) -> cont 12#;
+	PT _ (TS _ 13) -> cont 13#;
+	PT _ (TS _ 14) -> cont 14#;
+	PT _ (TS _ 15) -> cont 15#;
+	PT _ (TS _ 16) -> cont 16#;
+	PT _ (TS _ 17) -> cont 17#;
+	PT _ (TS _ 18) -> cont 18#;
+	PT _ (TS _ 19) -> cont 19#;
+	PT _ (TS _ 20) -> cont 20#;
+	PT _ (TS _ 21) -> cont 21#;
+	PT _ (TS _ 22) -> cont 22#;
+	PT _ (TS _ 23) -> cont 23#;
+	PT _ (TS _ 24) -> cont 24#;
+	PT _ (TS _ 25) -> cont 25#;
+	PT _ (TS _ 26) -> cont 26#;
+	PT _ (TS _ 27) -> cont 27#;
+	PT _ (TS _ 28) -> cont 28#;
+	PT _ (TS _ 29) -> cont 29#;
+	PT _ (TS _ 30) -> cont 30#;
+	PT _ (TS _ 31) -> cont 31#;
+	PT _ (TS _ 32) -> cont 32#;
+	PT _ (TS _ 33) -> cont 33#;
+	PT _ (TS _ 34) -> cont 34#;
+	PT _ (TS _ 35) -> cont 35#;
+	PT _ (TS _ 36) -> cont 36#;
+	PT _ (TS _ 37) -> cont 37#;
+	PT _ (TS _ 38) -> cont 38#;
+	PT _ (TS _ 39) -> cont 39#;
+	PT _ (TS _ 40) -> cont 40#;
+	PT _ (TS _ 41) -> cont 41#;
+	PT _ (TS _ 42) -> cont 42#;
+	PT _ (TI happy_dollar_dollar) -> cont 43#;
+	PT _ (T_Symbol _) -> cont 44#;
+	_ -> happyError' (tk:tks)
+	}
+
+happyError_ 45# tk tks = happyError' tks
+happyError_ _ tk tks = happyError' (tk:tks)
+
+happyThen :: () => Err a -> (a -> Err b) -> Err b
+happyThen = (thenM)
+happyReturn :: () => a -> Err a
+happyReturn = (returnM)
+happyThen1 m k tks = (thenM) m (\a -> k a tks)
+happyReturn1 :: () => a -> b -> Err a
+happyReturn1 = \a tks -> (returnM) a
+happyError' :: () => [(Token)] -> Err a
+happyError' = happyError
+
+pStart tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 0# tks) (\x -> happyReturn (happyOut36 x))
+
+pListDecl tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 1# tks) (\x -> happyReturn (happyOut37 x))
+
+pDecl tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 2# tks) (\x -> happyReturn (happyOut38 x))
+
+pAssertion tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 3# tks) (\x -> happyReturn (happyOut39 x))
+
+pPar tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 4# tks) (\x -> happyReturn (happyOut40 x))
+
+pConstDecl tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 5# tks) (\x -> happyReturn (happyOut41 x))
+
+pFunDecl tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 6# tks) (\x -> happyReturn (happyOut42 x))
+
+pFunDef tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 7# tks) (\x -> happyReturn (happyOut43 x))
+
+pFunDec tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 8# tks) (\x -> happyReturn (happyOut44 x))
+
+pInnerFunDec tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 9# tks) (\x -> happyReturn (happyOut45 x))
+
+pDatatype tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 10# tks) (\x -> happyReturn (happyOut46 x))
+
+pConstructor tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 11# tks) (\x -> happyReturn (happyOut47 x))
+
+pBinding tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 12# tks) (\x -> happyReturn (happyOut48 x))
+
+pLetDecl tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 13# tks) (\x -> happyReturn (happyOut49 x))
+
+pType tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 14# tks) (\x -> happyReturn (happyOut50 x))
+
+pExpr tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 15# tks) (\x -> happyReturn (happyOut51 x))
+
+pBinder tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 16# tks) (\x -> happyReturn (happyOut52 x))
+
+pCase tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 17# tks) (\x -> happyReturn (happyOut53 x))
+
+pPattern tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 18# tks) (\x -> happyReturn (happyOut54 x))
+
+pHead tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 19# tks) (\x -> happyReturn (happyOut55 x))
+
+pListLetDecl tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 20# tks) (\x -> happyReturn (happyOut56 x))
+
+pListCase tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 21# tks) (\x -> happyReturn (happyOut57 x))
+
+pListExpr tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 22# tks) (\x -> happyReturn (happyOut58 x))
+
+pListDatatype tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 23# tks) (\x -> happyReturn (happyOut59 x))
+
+pListConstructor tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 24# tks) (\x -> happyReturn (happyOut60 x))
+
+pListBinding tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 25# tks) (\x -> happyReturn (happyOut61 x))
+
+pListSymbol tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 26# tks) (\x -> happyReturn (happyOut62 x))
+
+pListType tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 27# tks) (\x -> happyReturn (happyOut63 x))
+
+pListFunDecl tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 28# tks) (\x -> happyReturn (happyOut64 x))
+
+pListFunDef tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 29# tks) (\x -> happyReturn (happyOut65 x))
+
+pListFunDec tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 30# tks) (\x -> happyReturn (happyOut66 x))
+
+happySeq = happyDontSeq
+
+
+returnM :: a -> Err a
+returnM = return
+
+thenM :: Err a -> (a -> Err b) -> Err b
+thenM = (>>=)
+
+happyError :: [Token] -> Err a
+happyError ts =
+  Bad $ "syntax error at " ++ tokenPos ts ++ 
+  case ts of
+    [] -> []
+    [Err _] -> " due to lexer error"
+    _ -> " before " ++ unwords (map (id . prToken) (take 4 ts))
+
+myLexer = tokens
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+{-# LINE 1 "<built-in>" #-}
+{-# LINE 1 "<command-line>" #-}
+{-# LINE 11 "<command-line>" #-}
+# 1 "/usr/include/stdc-predef.h" 1 3 4
+
+# 17 "/usr/include/stdc-predef.h" 3 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{-# LINE 11 "<command-line>" #-}
+{-# LINE 1 "/usr/lib/ghc-7.10.2/include/ghcversion.h" #-}
 
 
 
diff --git a/executable/Main.hs b/executable/Main.hs
--- a/executable/Main.hs
+++ b/executable/Main.hs
@@ -4,6 +4,7 @@
 
 import Tip.Parser
 import Tip.Pretty.SMT as SMT
+import Tip.Pretty.TFF as TFF
 import Tip.Pretty.Why3 as Why3
 import Tip.Pretty.Isabelle as Isabelle
 import Tip.Pretty.Haskell as HS
@@ -14,65 +15,98 @@
 import Tip.Lint
 import Tip.Fresh
 import Tip.Core
-import Options.Applicative
 
+import System.FilePath
+import Options.Applicative
 import Control.Monad
 
-data OutputMode = Haskell | Why3 | CVC4 | Isabelle | TIP
+data OutputMode = Haskell HS.Mode | Why3 | SMTLIB Bool | Isabelle | TIP | TFF
 
 parseOutputMode :: Parser OutputMode
 parseOutputMode =
-      flag' Haskell (long "haskell" <> help "Haskell output")
+      flag' (Haskell HS.Plain)          (long "haskell"        <> help "Haskell output")
+  <|> flag' (Haskell HS.Feat)           (long "haskell-feat"   <> help "Haskell output with Feat tests")
+  <|> flag' (Haskell HS.QuickCheck)     (long "haskell-qc"     <> help "Haskell output with QuickCheck tests (Feat generators)")
+  <|> flag' (Haskell (HS.LazySmallCheck False)) (long "haskell-lazysc"       <> help "Haskell output with LazySmallCheck tests")
+  <|> flag' (Haskell (HS.LazySmallCheck True))  (long "haskell-lazysc-depth" <> help "Haskell output with LazySmallCheck tests up to some depth (given on command line)")
+  <|> flag' (Haskell HS.Smten)                  (long "haskell-smten"        <> help "Haskell output with Smten (depth given on command line)")
+  <|> flag' (Haskell HS.QuickSpec)      (long "haskell-spec"   <> help "Haskell output with QuickSpec signature (Feat generators)")
   <|> flag' Why3 (long "why" <> help "WhyML output")
-  <|> flag' CVC4 (long "smtlib" <> help "SMTLIB output (CVC4-compatible)")
+  <|> flag' (SMTLIB False) (long "smtlib" <> help "SMTLIB output")
+  <|> flag' (SMTLIB True)  (long "smtlib-ax-fun" <> help "SMTLIB output (axiomatise function declarations)")
   <|> flag' Isabelle (long "isabelle" <> help "Isabelle output")
+  <|> flag' TFF (long "tff" <> help "TPTP TFF output")
   <|> flag  TIP TIP (long "tip" <> help "TIP output (default)")
 
-optionParser :: Parser ([StandardPass], Maybe String, OutputMode)
+optionParser :: Parser ([StandardPass], Maybe String, OutputMode, Maybe FilePath)
 optionParser =
-  (,,) <$> parsePasses <*> parseFile <*> parseOutputMode
+  (,,,) <$> parsePasses <*> parseFile <*> parseOutputMode <*> parseMultiPath
   where
     parseFile =
       fmap Just (strArgument (metavar "FILENAME")) <|> pure Nothing
 
+    parseMultiPath =
+      fmap Just (strArgument (metavar "DIRECTORY")) <|> pure Nothing
+
 main :: IO ()
 main = do
-  (passes, files, mode) <-
+  (passes, files, mode, multipath) <-
     execParser $
       info (helper <*> optionParser)
         (fullDesc <>
          progDesc "Transform a TIP problem" <>
          header "tip - a tool for processing TIP problems")
   case files of
-    Nothing ->
-      handle passes mode =<< getContents
-    Just f ->
-      handle passes mode =<< readFile f
+    Nothing  -> handle passes mode multipath =<< getContents
+    Just "-" -> handle passes mode multipath =<< getContents
+    Just f   -> handle passes mode multipath =<< readFile f
 
-handle :: [StandardPass] -> OutputMode -> String -> IO ()
-handle passes mode s =
+handle :: [StandardPass] -> OutputMode -> Maybe FilePath -> String -> IO ()
+handle passes mode multipath s =
   case parse s of
     Left err  -> error $ "Parse failed: " ++ err
     Right thy -> do
-      let fmap_pp f = fmap (show . f)
+      let fmap_pp f = fmap (show . map f)
       let show_passes c = fmap (\ s -> c ++ show passes ++ "\n" ++ s)
-      let pipeline =
+      let (pretty,pipeline,ext) =
             case mode of
-              CVC4 ->
-                fmap_pp SMT.ppTheory . runPasses
-                  (passes ++
-                  [ LambdaLift, AxiomatizeLambdas
-                  , CollapseEqual, RemoveAliases
+              SMTLIB ax_func_decls ->
+                ( SMT.ppTheory
+                , passes ++
+                  [ TypeSkolemConjecture, Monomorphise False
+                  , LambdaLift, AxiomatizeLambdas
+                  , SimplifyGently, CollapseEqual, RemoveAliases
                   , SimplifyGently, RemoveMatch
-                  , SimplifyGently, NegateConjecture
-                  , SimplifyGently
-                  ])
-              Haskell ->
-                fmap_pp HS.ppTheory . runPasses passes
-              Why3 ->
-                fmap_pp Why3.ppTheory . runPasses (passes ++ [CSEMatchWhy3])
-              Isabelle ->
-                fmap_pp Isabelle.ppTheory . runPasses passes
-              TIP ->
-                show_passes "; " . fmap_pp SMT.ppTheory . runPasses passes
-      putStrLn (freshPass pipeline (lint "parse" thy))
+                  , SimplifyGently, Monomorphise False ]
+                  ++ [ AxiomatizeFuncdefs | ax_func_decls ]
+                  ++ [ SimplifyGently, NegateConjecture ]
+                , "smt2")
+              TFF ->
+                ( TFF.ppTheory
+                , passes ++
+                  [ TypeSkolemConjecture, Monomorphise False
+                  , LambdaLift, AxiomatizeLambdas
+                  , SimplifyGently, CollapseEqual, RemoveAliases
+                  , SimplifyGently, Monomorphise False, IfToBoolOp, CommuteMatch
+                  , SimplifyGently, LetLift, SimplifyGently, AxiomatizeFuncdefs2
+                  , SimplifyGently, AxiomatizeDatadecls
+                  ]
+                , "p")
+              Haskell m -> (HS.ppTheory m,     passes, "hs")
+              Why3      -> (Why3.ppTheory,     passes ++ [CSEMatchWhy3], "mlw")
+              Isabelle  -> (Isabelle.ppTheory, passes, "thy")
+              TIP       -> (SMT.ppTheory,      passes, "smt2")
+      let thys = freshPass (runPasses pipeline) (lint "parse" thy)
+      case multipath of
+        Nothing ->
+          case thys of
+            [thy] -> print (pretty thy)
+            []    -> error "No theory remaining"
+            _     -> error "Multiple theories, specify an output path"
+        Just d ->
+          sequence_
+            [ do putStrLn $ d </> show n <.> ext
+                 writeFile (d </> show n <.> ext) (show (pretty thy) ++ "\n")
+            | (n, thy) <- [(0 :: Int)..] `zip` thys
+            ]
+
diff --git a/src/Tip/Core.hs b/src/Tip/Core.hs
--- a/src/Tip/Core.hs
+++ b/src/Tip/Core.hs
@@ -17,7 +17,7 @@
 import Data.Foldable (Foldable)
 import qualified Data.Foldable as F
 import Data.Generics.Geniplate
-import Data.List ((\\))
+import Data.List ((\\),partition)
 import Data.Ord
 import Control.Monad
 import qualified Data.Map as Map
@@ -37,7 +37,19 @@
 (=/=) :: Expr a -> Expr a -> Expr a
 e1 =/= e2 = Builtin Distinct :@: [e1,e2]
 
+oppositeQuant :: Quant -> Quant
+oppositeQuant Forall = Exists
+oppositeQuant Exists = Forall
+
+gentleNeg :: Expr a -> Expr a
+gentleNeg (Builtin Not :@: [e]) = e
+gentleNeg e = Builtin Not :@: [e]
+
 neg :: Expr a -> Expr a
+neg (Quant qi q lcs e)   = Quant qi (oppositeQuant q) lcs (neg e)
+neg (Builtin And :@: es) = Builtin Or  :@: map neg es
+neg (Builtin Or  :@: es) = Builtin And :@: map neg es
+neg (Builtin Not :@: [e]) = e
 neg (Builtin op :@: [e1,e2])
   | Equal    <- op = e1 =/= e2
   | Distinct <- op = e1 === e2
@@ -58,10 +70,24 @@
   | otherwise = Builtin Or :@: [e1,e2]
 
 ands :: [Expr a] -> Expr a
-ands xs = foldl (/\) trueExpr xs
+ands xs =
+  case flatAnd (foldl (/\) trueExpr xs) of
+    []  -> trueExpr
+    [x] -> x
+    xs  -> Builtin And :@: xs
+  where
+    flatAnd (Builtin And :@: xs) = concatMap flatAnd xs
+    flatAnd x = [x]
 
 ors :: [Expr a] -> Expr a
-ors xs = foldl (\/) falseExpr xs
+ors xs =
+  case flatOr (foldl (\/) falseExpr xs) of
+    []  -> falseExpr
+    [x] -> x
+    xs  -> Builtin Or :@: xs
+  where
+    flatOr (Builtin Or :@: xs) = concatMap flatOr xs
+    flatOr x = [x]
 
 (==>) :: Expr a -> Expr a -> Expr a
 e1 ==> e2
@@ -114,25 +140,41 @@
 apply e es@(_:_) = Builtin At :@: (e:es)
 apply _ [] = ERROR("tried to construct nullary lambda function")
 
-applyType :: Ord a => [a] -> [Type a] -> Type a -> Type a
-applyType tvs tys ty
-  | length tvs == length tys =
-      flip transformType ty $ \ty' ->
-        case ty' of
-          TyVar x ->
-            Map.findWithDefault ty' x m
-          _ -> ty'
-  | otherwise = ERROR("wrong number of type arguments")
+applyTypeIn :: Ord a => ((Type a -> Type a) -> f a -> f a) -> [a] -> [Type a] -> f a -> f a
+applyTypeIn transformer tvs tys
+  | length tvs /= length tys = ERROR("wrong number of type arguments")
+  | otherwise = transformer $ \ty -> case ty of TyVar x -> Map.findWithDefault ty x m
+                                                _       -> ty
   where
     m = Map.fromList (zip tvs tys)
 
+applyType :: Ord a => [a] -> [Type a] -> Type a -> Type a
+applyType = applyTypeIn transformType
+
+applyTypeInExpr :: Ord a => [a] -> [Type a] -> Expr a -> Expr a
+applyTypeInExpr = applyTypeIn transformTypeInExpr
+
+applyTypeInDecl :: Ord a => [a] -> [Type a] -> Decl a -> Decl a
+applyTypeInDecl = applyTypeIn transformTypeInDecl
+
 applyPolyType :: Ord a => PolyType a -> [Type a] -> ([Type a], Type a)
 applyPolyType PolyType{..} tys =
   (map (applyType polytype_tvs tys) polytype_args,
    applyType polytype_tvs tys polytype_res)
 
+gblType :: Ord a => Global a -> ([Type a], Type a)
+gblType Global{..} = applyPolyType gbl_type gbl_args
+
+makeLets :: [(Local a,Expr a)] -> Expr a -> Expr a
+makeLets []           e = e
+makeLets ((x,ex):xes) e = Let x ex (makeLets xes e)
+
 -- * Predicates and examinations on expressions
 
+collectLets :: Expr a -> ([(Local a,Expr a)],Expr a)
+collectLets (Let y rhs e) = let (bs,e') = collectLets e in ((y,rhs):bs,e')
+collectLets e             = ([],e)
+
 litView :: Expr a -> Maybe Lit
 litView (Builtin (Lit l) :@: []) = Just l
 litView _ = Nothing
@@ -141,6 +183,11 @@
 boolView e = case litView e of Just (Bool b) -> Just b
                                _             -> Nothing
 
+forallView :: Expr a -> ([Local a],Expr a)
+forallView (Quant _ Forall vs1 e) = let (vs2,e') = forallView e
+                                    in (vs1++vs2,e')
+forallView e                      = ([],e)
+
 -- | A representation of Nested patterns, used in 'patternMatchingView'
 data DeepPattern a
   = DeepConPat (Global a) [DeepPattern a]
@@ -281,6 +328,8 @@
 builtinType At ((_  :=>: res):_) = res
 builtinType At _ = ERROR("ill-typed lambda application")
 
+theoryTypes :: (UniverseBi (t a) (Type a),Ord a) => t a -> [Type a]
+theoryTypes = usort . universeBi
 
 -- * Substition and refreshing
 
@@ -288,7 +337,7 @@
 freshLocal ty = liftM2 Local fresh (return ty)
 
 freshArgs :: Name a => Global a -> Fresh [Local a]
-freshArgs gbl = mapM freshLocal (polytype_args (gbl_type gbl))
+freshArgs gbl = mapM freshLocal (fst (gblType gbl))
 
 refreshLocal :: Name a => Local a -> Fresh (Local a)
 refreshLocal (Local name ty) = liftM2 Local (refresh name) (return ty)
@@ -329,7 +378,7 @@
 -- expression contains no binders (i.e. no lambdas, no lets, no quantifiers),
 -- since the binders are not refreshed at every insertion point.
 unsafeSubst :: Ord a => Expr a -> Local a -> Expr a -> Expr a
-e `unsafeSubst` _ | not (null (bound e)) = error "Tip.unsafeSubst: contains binders"
+e `unsafeSubst` _ | not (null (bound e)) = ERROR("unsafeSubst: contains binders")
 e `unsafeSubst` x = transformExpr $ \ e0 -> case e0 of
   Lcl y | x == y -> e
   _              -> e0
@@ -398,13 +447,21 @@
 projector dt Constructor{..} i tys =
   Global proj_name (destructorType dt proj_ty) tys
   where
-    (proj_name, proj_ty) = con_args !! i
+    (proj_name, proj_ty) = case drop i con_args of ca:_ -> ca; [] -> __
 
 discriminator :: Datatype a -> Constructor a -> [Type a] -> Global a
 discriminator dt Constructor{..} tys =
   Global con_discrim (destructorType dt (BuiltinType Boolean)) tys
 
 -- * Operations on theories
+
+-- | Goals in first component, assertions in second
+theoryGoals :: Theory a -> ([Formula a],[Formula a])
+theoryGoals = partitionGoals . thy_asserts
+
+-- | Goals in first component, assertions in second
+partitionGoals :: [Formula a] -> ([Formula a],[Formula a])
+partitionGoals = partition ((Prove ==) . fm_role)
 
 mapDecls :: forall a b . (forall t . Traversable t => t a -> t b) -> Theory a -> Theory b
 mapDecls k (Theory a b c d e) = Theory (map k a) (map k b) (map k c) (map k d) (map k e)
diff --git a/src/Tip/Fresh.hs b/src/Tip/Fresh.hs
--- a/src/Tip/Fresh.hs
+++ b/src/Tip/Fresh.hs
@@ -6,7 +6,7 @@
 import Tip.Utils
 import Tip.Pretty
 import Control.Applicative hiding (empty)
-import Control.Monad.State
+import Control.Monad.State.Strict
 import Control.Arrow ((&&&))
 
 import Data.Foldable (Foldable)
@@ -56,4 +56,10 @@
 instance Name Int where
   fresh     = Fresh (state (id &&& succ))
   getUnique = id
+
+instance Name a => Name (PPVar a) where
+  fresh = fmap PPVar fresh
+  refresh = fmap PPVar . refresh . unPPVar
+  freshNamed = fmap PPVar . freshNamed
+  refreshNamed s n = fmap PPVar (refreshNamed s (unPPVar n))
 
diff --git a/src/Tip/Haskell/Repr.hs b/src/Tip/Haskell/Repr.hs
--- a/src/Tip/Haskell/Repr.hs
+++ b/src/Tip/Haskell/Repr.hs
@@ -20,6 +20,9 @@
   | InstDecl [Type a] {- context -}
              (Type a) {- head -}
              [Decl a] {- declarations (associated types and fun decls) -}
+  | ClassDecl [Type a] {- context -}
+              (Type a) {- head -}
+              [Decl a] {- declarations (type signatures) -}
   | TypeDef (Type a) (Type a)
   | Decl a `Where` [Decl a]
   | TH (Expr a)
diff --git a/src/Tip/Haskell/Translate.hs b/src/Tip/Haskell/Translate.hs
--- a/src/Tip/Haskell/Translate.hs
+++ b/src/Tip/Haskell/Translate.hs
@@ -4,17 +4,20 @@
 {-# LANGUAGE GADTs #-}
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE CPP #-}
+{-# LANGUAGE PatternGuards #-}
 module Tip.Haskell.Translate where
 
 #include "errors.h"
 import Tip.Haskell.Repr as H
-import Tip.Core as T hiding (Formula(..),globals,Type(..))
+import Tip.Core as T hiding (Formula(..),globals,Type(..),Decl(..))
 import Tip.Core (Type((:=>:),BuiltinType))
 import qualified Tip.Core as T
 import Tip.Pretty
 import Tip.Utils
 import Tip.Scope
 
+import Data.Maybe (isNothing)
+
 import Tip.CallGraph
 
 import Control.Monad
@@ -47,9 +50,29 @@
 quickSpec :: String -> HsId a
 quickSpec = Qualified "QuickSpec" (Just "QS")
 
+sysEnv :: String -> HsId a
+sysEnv = Qualified "System.Environment" (Just "Env")
+
+smtenSym :: String -> HsId a
+smtenSym = Qualified "Smten.Symbolic" (Just "S")
+
+smtenEnv :: String -> HsId a
+smtenEnv = Qualified "Smten.System.Environment" (Just "Env")
+
+smtenMinisat :: String -> HsId a
+smtenMinisat = Qualified "Smten.Symbolic.Solver.MiniSat" (Just "S")
+
+smtenMonad :: String -> HsId a
+smtenMonad = Qualified "Smten.Control.Monad" (Just "S")
+
+-- smten also needs Prelude to be replaced with Smten.Prelude
+
 feat :: String -> HsId a
 feat = Qualified "Test.Feat" (Just "F")
 
+lsc :: String -> HsId a
+lsc = Qualified "Test.LazySmallCheck" (Just "L")
+
 typeable :: String -> HsId a
 typeable = Qualified "Data.Typeable" (Just "T")
 
@@ -75,17 +98,25 @@
   varStr (Other x) = varStr x
   varStr (Derived o s) = s ++ varStr o
 
-addHeader :: Decls a -> Decls a
-addHeader (Decls ds) =
-    Decls (map LANGUAGE ["TemplateHaskell","DeriveDataTypeable","TypeOperators","ImplicitParams","RankNTypes"] ++ Module "A" : ds)
+addHeader :: String -> Decls a -> Decls a
+addHeader mod_name (Decls ds) =
+    Decls (map LANGUAGE ["TemplateHaskell","DeriveDataTypeable","TypeOperators","ImplicitParams","RankNTypes"] ++ Module mod_name : ds)
 
 addImports :: Ord a => Decls (HsId a) -> Decls (HsId a)
 addImports d@(Decls ds) = Decls (QualImport "Text.Show.Functions" Nothing : imps ++ ds)
   where
   imps = usort [ QualImport m short | Qualified m short _ <- F.toList d ]
 
-trTheory :: (Ord a,PrettyVar a) => Theory a -> Decls (HsId a)
-trTheory = trTheory' . fmap Other
+trTheory :: (Ord a,PrettyVar a) => Mode -> Theory a -> Decls (HsId a)
+trTheory mode = fixup_prel . trTheory' mode . fmap Other
+  where
+  fixup_prel =
+    case mode of
+      Smten -> fmap fx
+      _     -> id
+    where
+    fx (Qualified "Prelude" u v) = Qualified "Smten.Prelude" (Just "S") v
+    fx u = u
 
 data Kind = Expr | Formula deriving Eq
 
@@ -97,34 +128,114 @@
   where
   imps = [TyImp (Derived f "imp") (H.TyCon (Derived f "") []) | Signature f _ <- thy_sigs]
 
-trTheory' :: forall a b . (a ~ HsId b,Ord b,PrettyVar b) => Theory a -> Decls a
-trTheory' thy@Theory{..} =
+data Mode = Feat | QuickCheck | LazySmallCheck Bool | Smten | QuickSpec | Plain
+  deriving (Eq,Ord,Show)
+
+isLazySmallCheck LazySmallCheck{} = True
+isLazySmallCheck _                = False
+
+isSmten Smten{} = True
+isSmten _       = False
+
+trTheory' :: forall a b . (a ~ HsId b,Ord b,PrettyVar b) => Mode -> Theory a -> Decls a
+trTheory' mode thy@Theory{..} =
   Decls $
+    concat [space_decl | isSmten mode ]  ++
     concatMap tr_datatype thy_datatypes ++
     map tr_sort thy_sorts ++
     concatMap tr_sig thy_sigs ++
     concatMap tr_func thy_funcs ++
     tr_asserts thy_asserts ++
-    [makeSig thy]
+    [makeSig thy | mode == QuickSpec ]
   where
   (translate_UFs,imps) = ufInfo thy
 
+  space_decl :: [Decl a]
+  space_decl =
+    [ ClassDecl [] (TyCon (Exact "Space") [TyVar (Exact "stv")])
+                      [TySig (Exact "space") []
+                         (TyArr (TyCon (prelude "Int") [])
+                           (TyCon (smtenSym "Symbolic") [TyVar (Exact "stv")]))
+                      ]
+    , InstDecl [] (TyCon (Exact "Space") [TyCon (prelude "Bool") []])
+        [funDecl
+          (Exact "space")
+          [d]
+          (H.Case (Apply (prelude "<") [var d,H.Int 0])
+            [(H.ConPat (prelude "True") [], Apply (smtenMonad "mzero") [])
+            ,(H.WildPat,
+               Apply (smtenMonad "msum")
+                 [List
+                   [ Apply (smtenMonad "return") [Apply (prelude "False") []]
+                   , Apply (smtenMonad "return") [Apply (prelude "True") []]
+                   ]])
+            ])
+        ]
+    ]
+    where d = Exact "d"
+
   tr_datatype :: Datatype a -> [Decl a]
   tr_datatype (Datatype tc tvs cons) =
     [ DataDecl tc tvs
         [ (c,map (trType . snd) args) | Constructor c _ args <- cons ]
-        (map prelude ["Eq","Ord","Show"] ++ [typeable "Typeable"])
-    , TH (Apply (feat "deriveEnumerable") [QuoteTyCon tc])
-    , InstDecl [H.TyCon (feat "Enumerable") [H.TyVar a] | a <- tvs]
+        (map prelude ["Eq","Ord","Show"]
+         ++ [typeable "Typeable" | not (isSmten mode) ])
+    ]
+    ++
+    [ TH (Apply (feat "deriveEnumerable") [QuoteTyCon tc])
+    | any (== mode) [Feat, QuickCheck, QuickSpec] ]
+    ++
+    [ InstDecl [H.TyCon (feat "Enumerable") [H.TyVar a] | a <- tvs]
                (H.TyCon (quickCheck "Arbitrary") [H.TyCon tc (map H.TyVar tvs)])
                [funDecl
                   (quickCheck "arbitrary") []
                   (Apply (quickCheck "sized") [Apply (feat "uniform") []])]
+    | any (== mode) [QuickCheck, QuickSpec] ]
+    ++
+    [ InstDecl
+        [H.TyCon (lsc "Serial") [H.TyVar a] | a <- tvs]
+        (H.TyCon (lsc "Serial") [H.TyCon tc (map H.TyVar tvs)])
+        [funDecl
+          (lsc "series")
+          []
+          (foldr1
+            (\ e1 e2 -> Apply (lsc "\\/") [e1,e2])
+            [ foldl
+               (\ e _ -> Apply (lsc "><") [e,Apply (lsc "series") []])
+               (Apply (lsc "cons") [Apply c []])
+               as
+            | Constructor c _ as <- cons
+            ])]
+    | isLazySmallCheck mode ]
+    ++
+    [ InstDecl
+        [H.TyCon (Exact "Space") [H.TyVar a] | a <- tvs]
+        (H.TyCon (Exact "Space") [H.TyCon tc (map H.TyVar tvs)])
+        [funDecl
+          (Exact "space")
+          [d]
+          (H.Case (Apply (prelude "<") [var d,H.Int 0])
+            [(H.ConPat (prelude "True") [], Apply (smtenMonad "mzero") [])
+            ,(H.WildPat,
+               Apply (smtenMonad "msum")
+                 [List
+                   [ foldl (\ e1 _ ->
+                             Apply (smtenMonad "ap")
+                               [e1,Apply (Exact "space")
+                                     [Apply (prelude "-") [var d,H.Int 1]]])
+                           (Apply (smtenMonad "return") [Apply c []])
+                           args
+                   | Constructor c _ args <- cons
+                   ]])
+            ])
+        ]
+    | let d = Exact "d"
+    , isSmten mode
     ]
 
   tr_sort :: Sort a -> Decl a
-  tr_sort (Sort _ i) | i /= 0 = error "Higher-kinded abstract sort"
-  tr_sort (Sort s i) = TypeDef (TyCon s []) (TyCon (prelude "Int") [])
+  tr_sort (Sort s i) | null i = TypeDef (TyCon s []) (TyCon (prelude "Int") [])
+  tr_sort (Sort _ _) = error "Haskell.Translate: Poly-kinded abstract sort"
 
   tr_sig :: Signature a -> [Decl a]
   tr_sig (Signature f pt) =
@@ -181,30 +292,90 @@
         [ (map tr_deepPattern dps,tr_expr Expr rhs)
         | (dps,rhs) <- patternMatchingView func_args func_body
         ]
+    ] ++
+    [ FunDecl
+        (prop_version func_name)
+        [ (map tr_deepPattern dps,tr_expr Formula rhs)
+        | (dps,rhs) <- patternMatchingView func_args func_body
+        ]
+    | isLazySmallCheck mode && func_res == boolType
     ]
 
+  prop_version f = Derived f "property"
+
   tr_asserts :: [T.Formula a] -> [Decl a]
   tr_asserts fms =
-    let (names,decls) = unzip (zipWith tr_assert [1..] fms)
-    in  decls {- ++
-          [ TH (Apply (prelude "return") [List []])
-          , funDecl (Exact "main") []
-              (mkDo [ Stmt (THSplice (Apply (quickCheckAll "polyQuickCheck")
-                                            [QuoteName name]))
-                    | name <- names ]
-                    Noop)
-          ] -}
+    let (info,decls) = unzip (zipWith tr_assert [1..] fms)
+    in  concat decls ++
+          case mode of
+            QuickCheck ->
+              [ TH (Apply (prelude "return") [List []])
+              , funDecl (Exact "main") []
+                  (mkDo [ Stmt (THSplice (Apply (quickCheckAll "polyQuickCheck")
+                                                [QuoteName name]))
+                        | (name,_) <- info ]
+                        Noop)
+              ]
+            LazySmallCheck md ->
+              [ funDecl (Exact "main") []
+                  ((`mkDo` Noop)
+                     $  [Bind (Exact "args") (Apply (sysEnv "getArgs") [])]
+                     ++ [Stmt (fn name) | (name,_) <- info])
+              ]
+              where
+              fn name = case md of
+                         False   -> Apply (lsc "test") [var name]
+                         True    -> Apply (lsc "depthCheck")
+                                      [read_head (var (Exact "args"))
+                                      ,var name]
+            Feat ->
+              [ funDecl (Exact "main") []
+                  (mkDo [Stmt (Apply (feat "featCheckStop")
+                          [ H.Lam [TupPat (map VarPat vs)] (Apply name (map var vs))
+                          ])
+                        | (name,vs) <- info ] Noop)
+              ]
+            Smten | let [(name,vs)] = info ->
+              [ funDecl (Exact "main") []
+                  $ mkDo [Bind (Exact "args") (Apply (smtenEnv "getArgs") [])
+                         ,Bind (Exact "r")
+                          (Apply (smtenSym "run_symbolic")
+                            [Apply (smtenMinisat "minisat") []
+                            ,mkDo (
+                              [ Bind v (Apply (Exact "space") [read_head (var (Exact "args"))])
+                              | v <- vs ]
+                              ++
+                              [ Stmt $ Apply (smtenMonad "guard") [Apply (prelude "not") [Apply name (map var vs)]] ])
+                              (Apply (smtenMonad "return") [nestedTup (map var vs)])
+                            ])
+                        ]
+                        (Apply (prelude "print") [var (Exact "r")])
+              ]
+            _ -> []
+    where
+    read_head e = Apply (prelude "read") [Apply (prelude "head") [e]]
 
-  tr_assert :: Int -> T.Formula a -> (a,Decl a)
-  tr_assert i (T.Formula r _ b) =
-    (prop_name,funDecl prop_name args (assume (tr_expr Formula body)))
+  tr_assert :: Int -> T.Formula a -> ((a,[a]),[Decl a])
+  tr_assert i (T.Formula r _ tvs b) =
+    ((prop_name,args),
+      [ TySig prop_name []
+          (foldr TyArr
+             (case mode of LazySmallCheck{} -> H.TyCon (lsc "Property") []
+                           _                -> H.TyCon (prelude "Bool") [])
+             [ trType (applyType tvs (replicate (length tvs) (intType)) t)
+             | Local _ t <- typed_args ])
+      | mode == Feat || isLazySmallCheck mode || mode == Smten ]
+      ++
+      [ funDecl prop_name args (assume (tr_expr (if mode == Feat || isSmten mode then Expr else Formula) body)) ]
+    )
     where
     prop_name | i == 1    = Exact "prop"
               | otherwise = Exact ("prop" ++ show i)
-    (args,body) =
+    (typed_args,body) =
       case b of
-        Quant _ Forall lcls term -> (map lcl_name lcls,term)
+        Quant _ Forall lcls term -> (lcls,term)
         _                        -> ([],b)
+    args = map lcl_name typed_args
 
     assume e =
       case r of
@@ -227,12 +398,17 @@
   tr_expr k e0 =
     case e0 of
       Builtin (Lit (T.Int i)) :@: [] -> H.Int i
-      Builtin (Lit (Bool b)) :@: []  -> withBool Apply b
-      hd :@: es -> let (f,k') = tr_head k hd
-                   in Apply f (map (tr_expr k') es)
-      Lcl x -> var (lcl_name x)
+      Builtin (Lit (Bool b)) :@: [] -> lsc_lift (withBool Apply b)
+      Builtin Implies :@: [u,v] | mode == Smten -> tr_expr k (Builtin Or :@: [Builtin Not :@: [u],v])
+      hd :@: es -> let ((f,k'),lft) = tr_head (map exprType es) k hd
+                   in  lift_if lft (maybe_ty_sig e0 (Apply f (map (tr_expr k') es)))
+      Lcl x -> lsc_lift (var (lcl_name x))
       T.Lam xs b  -> H.Lam (map (VarPat . lcl_name) xs) (tr_expr Expr b)
-      Match e alts -> H.Case (tr_expr Expr e) [ (tr_pattern p,tr_expr Expr rhs) | T.Case p rhs <- default_last alts ]
+      Match e alts -> H.Case (tr_expr Expr e) [ (tr_pattern p,tr_expr brs_k rhs) | T.Case p rhs <- default_last alts ]
+        where
+        brs_k
+          | isLazySmallCheck mode = k
+          | otherwise             = Expr
       T.Let x e b -> H.Let (lcl_name x) (tr_expr Expr e) (tr_expr k b)
       T.Quant _ q xs b ->
         foldr
@@ -243,33 +419,57 @@
           xs
 
     where
+    maybe_ty_sig e@(hd@(Gbl Global{..}) :@: es) he
+       | isNothing (makeGlobal gbl_name gbl_type (map exprType es) Nothing)
+         = he ::: trType (exprType e)
+    maybe_ty_sig _ he = he
+
+    lift_if b e
+      | b && isLazySmallCheck mode = Apply (lsc "lift") [e]
+      | otherwise = e
+    lsc_lift = lift_if (k == Formula)
+
     default_last (def@(T.Case Default _):alts) = alts ++ [def]
     default_last alts = alts
 
-  tr_head :: Kind -> T.Head a -> (a,Kind)
-  tr_head k (Gbl Global{..}) = (gbl_name,Expr)
-  tr_head k (Builtin b)      = tr_builtin k b
+  tr_head :: [T.Type a] -> Kind -> T.Head a -> ((a,Kind),Bool)
+  tr_head ts k (Builtin b)      = tr_builtin ts k b
+  tr_head ts k (Gbl Global{..})
+    | stay_prop = ((prop_version gbl_name,Expr),False)
+    | otherwise = ((gbl_name             ,Expr),False)
+    where
+    stay_prop = k == Formula
+             && isLazySmallCheck mode
+             && polytype_res gbl_type == boolType
 
-  tr_builtin :: Kind -> T.Builtin -> (a,Kind)
-  tr_builtin k b =
+  tr_builtin :: [T.Type a] -> Kind -> T.Builtin -> ((a,Kind),Bool)
+  tr_builtin ts k b =
     case b of
-      At        -> (prelude "id",Expr)
+      At        -> ((prelude "id",Expr),False)
       Lit{}     -> error "tr_builtin"
-      And       -> case_kind ".&&."
-      Or        -> case_kind ".||."
-      Not       -> case_kind "neg"
-      Implies   -> case_kind "==>"
-      Equal     -> case_kind "==="
-      Distinct  -> case_kind "=/="
-      _         -> prelude_fn
+      And       -> case_kind (tipDSL ".&&.") (Just (lsc "*&*"))
+      Or        -> case_kind (tipDSL ".||.") (Just (lsc "*|*"))
+      Not       -> case_kind (tipDSL "neg")  (Just (lsc "neg"))
+      Implies   -> case_kind (tipDSL "==>")  (Just (lsc "*=>*"))
+      Equal     -> case_kind (tipDSL "===") $ case ts of
+                                                BuiltinType Boolean:_ -> Just (lsc "*=*")
+                                                _                     -> Nothing
+      Distinct  -> case_kind (tipDSL "=/=")  Nothing
+      _         -> (prelude_fn,False)
     where
     Just prelude_str_ = lookup b hsBuiltins
     prelude_fn = (prelude prelude_str_,Expr)
 
-    case_kind sf =
+    case_kind tip_version lsc_version =
       case k of
-        Expr    -> prelude_fn
-        Formula -> (tipDSL sf,Formula)
+        Expr    -> (prelude_fn,False)
+        Formula ->
+          case mode of
+            LazySmallCheck{} ->
+              case lsc_version of
+                Just v  -> ((v,Formula),False)
+                Nothing -> (prelude_fn,True)
+            _ -> ((tip_version,Formula),False)
 
   -- ignores the type variables
   tr_polyType_inner :: T.PolyType a -> H.Type a
@@ -399,6 +599,7 @@
                | Signature f _ <- thy_sigs
                ])
           , (quickSpec "maxTermSize", Apply (prelude "Just") [H.Int (if translate_UFs then 15 else 7)])
+          , (quickSpec "maxTermDepth", Apply (prelude "Just") [H.Int 4])
           , (quickSpec "testTimeout", Apply (prelude "Just") [H.Int 100000])
           ]
       ]
@@ -418,7 +619,7 @@
 
   scp = scope thy
 
-  cg = map (map defines) (flatCallGraph (CallGraphOpts True False) thy)
+  cg = map (map defines) (flatCallGraph (CallGraphOpts False False) thy)
 
   poly_type (PolyType _ args res) = args :=>: res
 
diff --git a/src/Tip/Lint.hs b/src/Tip/Lint.hs
--- a/src/Tip/Lint.hs
+++ b/src/Tip/Lint.hs
@@ -14,7 +14,7 @@
 --  * Default case comes first. No duplicate cases.
 --
 --  * Expressions and formulas not mixed.
-module Tip.Lint (lint, lintM, lintTheory) where
+module Tip.Lint (lint, lintM, lintTheory, lintEither) where
 
 #include "errors.h"
 import Tip.Core
@@ -28,20 +28,14 @@
 import Text.PrettyPrint
 import Tip.Pretty.SMT
 import Data.List
---import Debug.Trace
+-- import Debug.Trace
 
 -- | Crashes if the theory is malformed
 lint :: (PrettyVar a, Ord a) => String -> Theory a -> Theory a
-lint pass thy0@(renameAvoiding [] return -> thy) =
-  -- trace ("Linting:" ++ pass ++ ":\n" ++ ppRender thy) $
-  case lintTheory thy0 of
-    Nothing -> thy0
-    Just doc ->
-      case lintTheory thy of
-        Just doc ->
-          error ("Lint failed after " ++ pass ++ ":\n" ++ show doc ++ "\n!!!")
-        Nothing ->
-          error ("Non-renamed linting pass failed!? " ++ pass ++ ":\n" ++ show doc ++ "\n!!!")
+lint pass thy =
+  case lintEither pass thy of
+    Left doc -> error (show doc)
+    Right x  -> x
 
 -- | Same as 'lint', but returns in a monad, for convenience
 lintM :: (PrettyVar a, Ord a, Monad m) => String -> Theory a -> m (Theory a)
@@ -57,12 +51,26 @@
     Nothing -> throwError x
     Just y  -> return y
 
+-- | Returns a Left if the theory is malformed
+lintEither :: (PrettyVar a, Ord a) => String -> Theory a -> Either Doc (Theory a)
+lintEither pass thy0@(renameAvoiding [] return -> thy) =
+--   trace (" ==== Linting: " ++ pass ++ " ====\n" ++ ppRender thy0 ++ "\n ====") $
+  case lintTheory thy0 of
+    Nothing -> return thy0
+    Just doc ->
+      case lintTheory thy of
+        Just doc ->
+          Left (text ("Lint failed after " ++ pass ++ ":") $$ doc $$ "!!!")
+        Nothing ->
+          Left (text ("Non-renamed linting pass failed!? " ++ pass ++ ":") $$ doc $$ "!!!")
+
 -- | Returns the error if the theory is malformed
 lintTheory :: (PrettyVar a, Ord a) => Theory a -> Maybe Doc
 lintTheory thy@Theory{..} =
   either Just (const Nothing) .
   runScope . withTheory thy $ inContext thy $ do
     mapM_ lintDatatype thy_datatypes
+    mapM_ lintSort thy_sorts
     mapM_ lintSignature thy_sigs
     mapM_ lintFunction thy_funcs
     mapM_ lintFormula thy_asserts
@@ -75,6 +83,11 @@
       forM_ con_args $ \(_, ty) ->
         lintType ty
 
+lintSort :: (PrettyVar a, Ord a) => Sort a -> ScopeM a ()
+lintSort sort@Sort{..} =
+  local $ inContext sort $
+    mapM_ newTyVar sort_tvs
+
 lintPolyType :: (PrettyVar a, Ord a) => PolyType a -> ScopeM a ()
 lintPolyType polyty@PolyType{..} =
   newScope $ inContext polyty $ do
@@ -98,7 +111,7 @@
   case info of
     TyVarInfo ->
       throwError (fsep ["Type variable", nest 2 (ppVar x), "used as type constructor"])
-    SortInfo n -> checkArity n
+    SortInfo Sort{..} -> checkArity (length sort_tvs)
     DatatypeInfo Datatype{..} -> checkArity (length data_tvs)
   mapM_ lintType tys
 lintType (args :=>: res) = do
@@ -128,7 +141,7 @@
   newLocal lcl
 
 lintFormula :: (PrettyVar a, Ord a) => Formula a -> ScopeM a ()
-lintFormula form@(Formula _ tvs expr) =
+lintFormula form@(Formula _ _ tvs expr) =
   local $ inContext form $ do
     mapM_ newTyVar tvs
     lintExpr FormulaKind expr
@@ -183,9 +196,9 @@
       "Expression of type", nest 2 (pp (exprType expr)),
       "bound to variable" <+> pp lcl,
       "of type", nest 2 (pp lcl_type)])
-lintExpr ExprKind (Quant NoInfo _ lcls expr) =
+lintExpr ExprKind (Quant _info _ lcls expr) =
   throwError "Quantifier found in expression"
-lintExpr FormulaKind (Quant NoInfo _ lcls expr) =
+lintExpr FormulaKind (Quant _info _ lcls expr) =
   local $ do
     mapM_ lintBinder lcls
     lintExpr FormulaKind expr
@@ -247,13 +260,15 @@
 lintCase :: (PrettyVar a, Ord a) => ExprKind -> Expr a -> Case a -> ScopeM a ()
 lintCase kind _ (Case Default body) = lintExpr kind body
 lintCase kind _ (Case LitPat{} body) = lintExpr kind body
-lintCase kind expr (Case (ConPat gbl@Global{..} args) body) =
+lintCase kind expr (Case pat@(ConPat gbl@Global{..} args) body) =
   local $ do
-    mapM_ lintBinder args
-    lintExpr kind (Gbl gbl :@: map Lcl args)
+    inContext pat $ do
+      mapM_ lintBinder args
+      lintExpr kind (Gbl gbl :@: map Lcl args)
+      check ("Global" <+> pp gbl <+> "used as constructor")
+        (isJust . lookupConstructor gbl_name)
+      let (_, res) = applyPolyType gbl_type gbl_args
+      unless (res == exprType expr) $
+        throwError (fsep ["Constructor", nest 2 (pp (Gbl gbl :@: map Lcl args)), "has type", nest 2 (pp res), "but should be", nest 2 (pp (exprType expr))])
+
     lintExpr kind body
-    check ("Global" <+> pp gbl <+> "used as constructor")
-      (isJust . lookupConstructor gbl_name)
-    let (_, res) = applyPolyType gbl_type gbl_args
-    unless (res == exprType expr) $
-      throwError (fsep ["Constructor", nest 2 (pp (Gbl gbl :@: map Lcl args)), "has type", nest 2 (pp res), "but should be", nest 2 (pp (exprType expr))])
diff --git a/src/Tip/Parser.hs b/src/Tip/Parser.hs
--- a/src/Tip/Parser.hs
+++ b/src/Tip/Parser.hs
@@ -1,5 +1,5 @@
 -- | Parses the TIP format
-module Tip.Parser(parse,Id,idPos) where
+module Tip.Parser(parse,parseFile,Id,idPos) where
 
 import Data.Monoid
 
@@ -9,6 +9,15 @@
 
 import Tip.Parser.Convert
 import Tip.Core
+
+-- | Parse from a file. If the string is empty or "-", then reads from stdin.
+parseFile :: String -> IO (Either String (Theory Id))
+parseFile file =
+  do s <- case file of
+       ""  -> getContents
+       "-" -> getContents
+       _   -> readFile file
+     return (parse s)
 
 -- | Parse, and get either an error or the string's theory
 parse :: String -> Either String (Theory Id)
diff --git a/src/Tip/Parser/AbsTIP.hs b/src/Tip/Parser/AbsTIP.hs
--- a/src/Tip/Parser/AbsTIP.hs
+++ b/src/Tip/Parser/AbsTIP.hs
@@ -15,10 +15,17 @@
 data Decl =
    DeclareDatatypes [Symbol] [Datatype]
  | DeclareSort Symbol Integer
+ | DeclareConst ConstDecl
+ | DeclareConstPar Par ConstDecl
  | DeclareFun FunDecl
- | DefineFunsRec [FunDef] [Expr]
- | MonoAssert Assertion Expr
- | ParAssert Assertion [Symbol] Expr
+ | DeclareFunPar Par FunDecl
+ | DefineFun FunDef
+ | DefineFunPar Par FunDef
+ | DefineFunRec FunDef
+ | DefineFunRecPar Par FunDef
+ | DefineFunsRec [FunDec] [Expr]
+ | Assert Assertion Expr
+ | AssertPar Assertion Par Expr
   deriving (Eq,Ord,Show,Read)
 
 data Assertion =
@@ -26,24 +33,31 @@
  | AssertNot
   deriving (Eq,Ord,Show,Read)
 
-data FunDef =
-   ParFunDef [Symbol] InnerFunDef
- | MonoFunDef InnerFunDef
+data Par =
+   Par [Symbol]
   deriving (Eq,Ord,Show,Read)
 
-data InnerFunDef =
-   InnerFunDef Symbol [Binding] Type
+data ConstDecl =
+   ConstDecl Symbol Type
   deriving (Eq,Ord,Show,Read)
 
 data FunDecl =
-   ParFunDecl [Symbol] InnerFunDecl
- | MonoFunDecl InnerFunDecl
+   FunDecl Symbol [Type] Type
   deriving (Eq,Ord,Show,Read)
 
-data InnerFunDecl =
-   InnerFunDecl Symbol [Type] Type
+data FunDef =
+   FunDef Symbol [Binding] Type Expr
   deriving (Eq,Ord,Show,Read)
 
+data FunDec =
+   ParFunDec Par InnerFunDec
+ | MonoFunDec InnerFunDec
+  deriving (Eq,Ord,Show,Read)
+
+data InnerFunDec =
+   InnerFunDec Symbol [Binding] Type
+  deriving (Eq,Ord,Show,Read)
+
 data Datatype =
    Datatype Symbol [Constructor]
   deriving (Eq,Ord,Show,Read)
@@ -57,7 +71,7 @@
   deriving (Eq,Ord,Show,Read)
 
 data LetDecl =
-   LetDecl Binding Expr
+   LetDecl Symbol Expr
   deriving (Eq,Ord,Show,Read)
 
 data Type =
@@ -76,6 +90,7 @@
  | Let [LetDecl] Expr
  | Binder Binder [Binding] Expr
  | LitInt Integer
+ | LitNegInt Integer
  | LitTrue
  | LitFalse
   deriving (Eq,Ord,Show,Read)
diff --git a/src/Tip/Parser/Convert.hs b/src/Tip/Parser/Convert.hs
--- a/src/Tip/Parser/Convert.hs
+++ b/src/Tip/Parser/Convert.hs
@@ -46,7 +46,7 @@
   compare = compare `on` idUnique
 
 instance PrettyVar Id where
-  varStr (Id s _ _) = s
+  varStr (Id s u _) = s -- ++ "_" ++ show u
 
 instance Name Id where
   freshNamed n
@@ -81,7 +81,7 @@
      lift $ modify (M.insert s (i,ik))
      return i
 
-trDecls :: [Decl] -> CM (Theory Id)
+trDecls :: [A.Decl] -> CM (Theory Id)
 trDecls [] = return emptyTheory
 trDecls (d:ds) =
   do thy <- trDecl d
@@ -89,7 +89,7 @@
        do thy_rest <- trDecls ds
           return (thy `joinTheories` thy_rest)
 
-trDecl :: Decl -> CM (Theory Id)
+trDecl :: A.Decl -> CM (Theory Id)
 trDecl x =
   local $
     case x of
@@ -97,7 +97,8 @@
         do -- add their types, abstractly
            forM_ datatypes $ \dt -> do
              sym <- addSym GlobalId (dataSym dt)
-             newSort (Sort sym (length tvs))
+             tvi <- mapM (addSym LocalId) tvs
+             newSort (Sort sym tvi)
            newScope $
              do tvi <- mapM (addSym LocalId) tvs
                 mapM newTyVar tvi
@@ -106,51 +107,67 @@
 
       DeclareSort s n ->
         do i <- addSym GlobalId s
-           return emptyTheory{ thy_sorts = [Sort i (fromIntegral n)] }
+           tvs <- lift . lift $ mapM refresh (replicate (fromInteger n) i)
+           return emptyTheory{ thy_sorts = [Sort i tvs] }
 
-      DeclareFun fundecl ->
-        do d <- trFunDecl fundecl
+      DeclareConst const_decl -> trDecl (DeclareConstPar emptyPar const_decl)
+
+      DeclareConstPar par (ConstDecl s t) -> trDecl (DeclareFunPar par (FunDecl s [] t))
+
+      DeclareFun        decl -> trDecl (DeclareFunPar emptyPar decl)
+      DeclareFunPar par decl ->
+        do d <- trFunDecl par decl
            return emptyTheory{ thy_sigs = [d] }
 
-      DefineFunsRec fundefs bodies ->
+      DefineFun        def -> trDecl (DefineFunPar emptyPar def)
+      DefineFunPar par def@(FunDef f _ _ _) ->
+        do thy <- trDecl (DefineFunRecPar par def)
+           let [fn] = thy_funcs thy
+           when (func_name fn `elem` uses fn)
+                (throwError $ ppSym f <+> "is recursive, but define-fun-rec was not used!")
+           return thy
+
+      DefineFunRec        def -> trDecl (DefineFunRecPar emptyPar def)
+      DefineFunRecPar par def ->
+        do sig <- trFunDecl par (defToDecl def)
+           withTheory emptyTheory{ thy_sigs = [sig] } $ do
+             fn <- trFunDef par def
+             return emptyTheory{ thy_funcs = [fn] }
+
+      DefineFunsRec decs bodies ->
         do -- add their correct types, abstractly
-           fds <- mapM (trFunDecl . defToDecl) fundefs
+           fds <- mapM (uncurry trFunDecl . decToDecl) decs
            withTheory emptyTheory{ thy_sigs = fds } $ do
-             fns <- zipWithM trFunDef fundefs bodies
+             fns <- sequence
+                [ uncurry trFunDef (decToDef dec body)
+                | (dec,body) <- decs `zip` bodies
+                ]
              return emptyTheory{ thy_funcs = fns }
 
-      MonoAssert role expr    -> trDecl (ParAssert role [] expr)
-      ParAssert role tvs expr ->
+      A.Assert  role           expr -> trDecl (AssertPar role emptyPar expr)
+      AssertPar role (Par tvs) expr ->
         do tvi <- mapM (addSym LocalId) tvs
            mapM newTyVar tvi
-           let toRole AssertIt  = Assert
+           let toRole AssertIt  = T.Assert
                toRole AssertNot = Prove
-           fm <- Formula (toRole role) tvi <$> trExpr expr
+           fm <- Formula (toRole role) UserAsserted tvi <$> trExpr expr
            return emptyTheory{ thy_asserts = [fm] }
 
+emptyPar :: Par
+emptyPar = Par []
 
+decToDecl :: FunDec -> (Par,FunDecl)
+decToDecl dec = case dec of
+  MonoFunDec inner -> decToDecl (ParFunDec emptyPar inner)
+  ParFunDec par (InnerFunDec fsym bindings res_type) ->
+    (par,FunDecl fsym (map bindingType bindings) res_type)
 
 defToDecl :: FunDef -> FunDecl
-defToDecl x = case x of
-  MonoFunDef inner -> defToDecl (ParFunDef [] inner)
-  ParFunDef tvs (InnerFunDef fsym bindings res_type) ->
-    ParFunDecl tvs (InnerFunDecl fsym (map bindingType bindings) res_type)
-
-trFunDef :: FunDef -> A.Expr -> CM (T.Function Id)
-trFunDef x body = case x of
-  MonoFunDef inner -> trFunDef (ParFunDef [] inner) body
-  ParFunDef tvs (InnerFunDef fsym bindings res_type) ->
-    newScope $
-      do f <- lkSym fsym
-         tvi <- mapM (addSym LocalId) tvs
-         mapM newTyVar tvi
-         args <- mapM trLocalBinding bindings
-         Function f tvi args <$> trType res_type <*> trExpr body
+defToDecl (FunDef fsym bindings res_type _) =
+  FunDecl fsym (map bindingType bindings) res_type
 
-trFunDecl :: FunDecl -> CM (T.Signature Id)
-trFunDecl x = case x of
-  MonoFunDecl inner -> trFunDecl (ParFunDecl [] inner)
-  ParFunDecl tvs (InnerFunDecl fsym args res) ->
+trFunDecl :: Par -> FunDecl -> CM (T.Signature Id)
+trFunDecl (Par tvs) (FunDecl fsym args res) =
     newScope $
       do f <- addSym GlobalId fsym
          tvi <- mapM (addSym LocalId) tvs
@@ -158,6 +175,21 @@
          pt <- PolyType tvi <$> mapM trType args <*> trType res
          return (Signature f pt)
 
+decToDef :: FunDec -> A.Expr -> (Par,FunDef)
+decToDef dec body = case dec of
+  MonoFunDec inner -> decToDef (ParFunDec emptyPar inner) body
+  ParFunDec par (InnerFunDec fsym bindings res_type) ->
+    (par,FunDef fsym bindings res_type body)
+
+trFunDef :: Par -> FunDef -> CM (T.Function Id)
+trFunDef (Par tvs) (FunDef fsym bindings res_type body) =
+  newScope $
+    do f <- lkSym fsym
+       tvi <- mapM (addSym LocalId) tvs
+       mapM newTyVar tvi
+       args <- mapM trLocalBinding bindings
+       Function f tvi args <$> trType res_type <*> trExpr body
+
 dataSym :: A.Datatype -> Symbol
 dataSym (A.Datatype sym _) = sym
 
@@ -192,8 +224,14 @@
 
 trLetDecls :: [LetDecl] -> A.Expr -> CM (T.Expr Id)
 trLetDecls [] e = trExpr e
-trLetDecls (LetDecl binding expr:bs) e
-  = newScope $ T.Let <$> trLocalBinding binding <*> trExpr expr <*> trLetDecls bs e
+trLetDecls (LetDecl s expr:bs) e
+  = do body <- trExpr expr
+       x <- addSym LocalId s
+       let l = Local x (exprType body)
+       newScope $
+         do newLocal l
+            rest <- trLetDecls bs e
+            return (T.Let l body rest)
 
 trExpr :: A.Expr -> CM (T.Expr Id)
 trExpr e0 = case e0 of
@@ -216,9 +254,10 @@
                             return (T.Match e cases')
   A.Let letdecls expr -> trLetDecls letdecls expr
   A.Binder binder bindings expr -> newScope $ trBinder binder <$> mapM trLocalBinding bindings <*> trExpr expr
-  A.LitInt n -> return $ intLit n
-  A.LitTrue  -> return $ bool True
-  A.LitFalse -> return $ bool False
+  A.LitInt n    -> return $ intLit n
+  A.LitNegInt n -> return $ intLit (negate n)
+  A.LitTrue     -> return $ bool True
+  A.LitFalse    -> return $ bool False
 
 trHead :: Maybe (T.Type Id) -> A.Head -> [T.Expr Id] -> CM (T.Expr Id)
 trHead mgt A.IfThenElse  [c,t,f] = return (makeIf c t f)
diff --git a/src/Tip/Parser/LexTIP.x b/src/Tip/Parser/LexTIP.x
--- a/src/Tip/Parser/LexTIP.x
+++ b/src/Tip/Parser/LexTIP.x
@@ -20,14 +20,14 @@
 $u = [\0-\255]          -- universal: any character
 
 @rsyms =    -- symbols and non-identifier-like reserved words
-   \( | "check" \- "sat" | \) | "declare" \- "datatypes" | "declare" \- "sort" | "declare" \- "fun" | "define" \- "funs" \- "rec" | "assert" \- "not" | \= \> | \@ | \= | \+ | \- | \* | \> | \> \= | \< | \< \=
+   \( | "check" \- "sat" | \) | "declare" \- "datatypes" | "declare" \- "sort" | "declare" \- "const" | "declare" \- "fun" | "define" \- "fun" | "define" \- "fun" \- "rec" | "define" \- "funs" \- "rec" | "assert" \- "not" | \= \> | \- | \@ | \= | \+ | \* | \> | \> \= | \< | \< \=
 
 :-
 ";" [.]* ; -- Toss single line comments
 
 $white+ ;
 @rsyms { tok (\p s -> PT p (eitherResIdent (TV . share) s)) }
-($l | [\~ \! \@ \$ \% \^ \& \* \_ \- \+ \= \< \> \. \? \/]) ($l | $d | [\~ \! \@ \$ \% \^ \& \* \_ \- \+ \= \< \> \. \? \/]) * { tok (\p s -> PT p (eitherResIdent (T_Symbol . share) s)) }
+($l | [\~ \! \@ \$ \% \^ \& \* \_ \+ \= \< \> \. \? \/]) ($l | $d | [\~ \! \@ \$ \% \^ \& \* \_ \- \+ \= \< \> \. \? \/]) * { tok (\p s -> PT p (eitherResIdent (T_Symbol . share) s)) }
 
 $l $i*   { tok (\p s -> PT p (eitherResIdent (TV . share) s)) }
 
@@ -99,7 +99,7 @@
                               | s == a = t
 
 resWords :: BTree
-resWords = b "check-sat" 20 (b ">" 10 (b "-" 5 (b "*" 3 (b ")" 2 (b "(" 1 N N) N) (b "+" 4 N N)) (b "=" 8 (b "<=" 7 (b "<" 6 N N) N) (b "=>" 9 N N))) (b "and" 15 (b "Bool" 13 (b "@" 12 (b ">=" 11 N N) N) (b "Int" 14 N N)) (b "assert-not" 18 (b "assert" 17 (b "as" 16 N N) N) (b "case" 19 N N)))) (b "forall" 30 (b "define-funs-rec" 25 (b "declare-sort" 23 (b "declare-fun" 22 (b "declare-datatypes" 21 N N) N) (b "default" 24 N N)) (b "exists" 28 (b "div" 27 (b "distinct" 26 N N) N) (b "false" 29 N N))) (b "mod" 35 (b "let" 33 (b "lambda" 32 (b "ite" 31 N N) N) (b "match" 34 N N)) (b "par" 38 (b "or" 37 (b "not" 36 N N) N) (b "true" 39 N N))))
+resWords = b "declare-datatypes" 22 (b ">=" 11 (b "<" 6 (b "*" 3 (b ")" 2 (b "(" 1 N N) N) (b "-" 5 (b "+" 4 N N) N)) (b "=>" 9 (b "=" 8 (b "<=" 7 N N) N) (b ">" 10 N N))) (b "assert" 17 (b "Int" 14 (b "Bool" 13 (b "@" 12 N N) N) (b "as" 16 (b "and" 15 N N) N)) (b "check-sat" 20 (b "case" 19 (b "assert-not" 18 N N) N) (b "declare-const" 21 N N)))) (b "forall" 33 (b "define-funs-rec" 28 (b "default" 25 (b "declare-sort" 24 (b "declare-fun" 23 N N) N) (b "define-fun-rec" 27 (b "define-fun" 26 N N) N)) (b "exists" 31 (b "div" 30 (b "distinct" 29 N N) N) (b "false" 32 N N))) (b "mod" 38 (b "let" 36 (b "lambda" 35 (b "ite" 34 N N) N) (b "match" 37 N N)) (b "par" 41 (b "or" 40 (b "not" 39 N N) N) (b "true" 42 N N))))
    where b s n = let bs = id s
                   in B bs (TS bs n)
 
diff --git a/src/Tip/Parser/ParTIP.y b/src/Tip/Parser/ParTIP.y
--- a/src/Tip/Parser/ParTIP.y
+++ b/src/Tip/Parser/ParTIP.y
@@ -12,10 +12,12 @@
 %name pListDecl ListDecl
 %name pDecl Decl
 %name pAssertion Assertion
-%name pFunDef FunDef
-%name pInnerFunDef InnerFunDef
+%name pPar Par
+%name pConstDecl ConstDecl
 %name pFunDecl FunDecl
-%name pInnerFunDecl InnerFunDecl
+%name pFunDef FunDef
+%name pFunDec FunDec
+%name pInnerFunDec InnerFunDec
 %name pDatatype Datatype
 %name pConstructor Constructor
 %name pBinding Binding
@@ -36,6 +38,7 @@
 %name pListType ListType
 %name pListFunDecl ListFunDecl
 %name pListFunDef ListFunDef
+%name pListFunDec ListFunDec
 
 -- no lexer declaration
 %monad { Err } { thenM } { returnM }
@@ -62,25 +65,28 @@
   'assert-not' { PT _ (TS _ 18) }
   'case' { PT _ (TS _ 19) }
   'check-sat' { PT _ (TS _ 20) }
-  'declare-datatypes' { PT _ (TS _ 21) }
-  'declare-fun' { PT _ (TS _ 22) }
-  'declare-sort' { PT _ (TS _ 23) }
-  'default' { PT _ (TS _ 24) }
-  'define-funs-rec' { PT _ (TS _ 25) }
-  'distinct' { PT _ (TS _ 26) }
-  'div' { PT _ (TS _ 27) }
-  'exists' { PT _ (TS _ 28) }
-  'false' { PT _ (TS _ 29) }
-  'forall' { PT _ (TS _ 30) }
-  'ite' { PT _ (TS _ 31) }
-  'lambda' { PT _ (TS _ 32) }
-  'let' { PT _ (TS _ 33) }
-  'match' { PT _ (TS _ 34) }
-  'mod' { PT _ (TS _ 35) }
-  'not' { PT _ (TS _ 36) }
-  'or' { PT _ (TS _ 37) }
-  'par' { PT _ (TS _ 38) }
-  'true' { PT _ (TS _ 39) }
+  'declare-const' { PT _ (TS _ 21) }
+  'declare-datatypes' { PT _ (TS _ 22) }
+  'declare-fun' { PT _ (TS _ 23) }
+  'declare-sort' { PT _ (TS _ 24) }
+  'default' { PT _ (TS _ 25) }
+  'define-fun' { PT _ (TS _ 26) }
+  'define-fun-rec' { PT _ (TS _ 27) }
+  'define-funs-rec' { PT _ (TS _ 28) }
+  'distinct' { PT _ (TS _ 29) }
+  'div' { PT _ (TS _ 30) }
+  'exists' { PT _ (TS _ 31) }
+  'false' { PT _ (TS _ 32) }
+  'forall' { PT _ (TS _ 33) }
+  'ite' { PT _ (TS _ 34) }
+  'lambda' { PT _ (TS _ 35) }
+  'let' { PT _ (TS _ 36) }
+  'match' { PT _ (TS _ 37) }
+  'mod' { PT _ (TS _ 38) }
+  'not' { PT _ (TS _ 39) }
+  'or' { PT _ (TS _ 40) }
+  'par' { PT _ (TS _ 41) }
+  'true' { PT _ (TS _ 42) }
 
 L_integ  { PT _ (TI $$) }
 L_Symbol { PT _ (T_Symbol _) }
@@ -103,10 +109,17 @@
 Decl :: { Decl }
 Decl : 'declare-datatypes' '(' ListSymbol ')' '(' ListDatatype ')' { DeclareDatatypes (reverse $3) (reverse $6) } 
   | 'declare-sort' Symbol Integer { DeclareSort $2 $3 }
+  | 'declare-const' ConstDecl { DeclareConst $2 }
+  | 'declare-const' '(' Par '(' ConstDecl ')' ')' { DeclareConstPar $3 $5 }
   | 'declare-fun' FunDecl { DeclareFun $2 }
-  | 'define-funs-rec' '(' ListFunDef ')' '(' ListExpr ')' { DefineFunsRec (reverse $3) (reverse $6) }
-  | Assertion Expr { MonoAssert $1 $2 }
-  | Assertion '(' 'par' '(' ListSymbol ')' Expr ')' { ParAssert $1 (reverse $5) $7 }
+  | 'declare-fun' '(' Par '(' FunDecl ')' ')' { DeclareFunPar $3 $5 }
+  | 'define-fun' FunDef { DefineFun $2 }
+  | 'define-fun' '(' Par '(' FunDef ')' ')' { DefineFunPar $3 $5 }
+  | 'define-fun-rec' FunDef { DefineFunRec $2 }
+  | 'define-fun-rec' '(' Par '(' FunDef ')' ')' { DefineFunRecPar $3 $5 }
+  | 'define-funs-rec' '(' ListFunDec ')' '(' ListExpr ')' { DefineFunsRec (reverse $3) (reverse $6) }
+  | Assertion Expr { Assert $1 $2 }
+  | Assertion '(' Par Expr ')' { AssertPar $1 $3 $4 }
 
 
 Assertion :: { Assertion }
@@ -114,24 +127,31 @@
   | 'assert-not' { AssertNot }
 
 
-FunDef :: { FunDef }
-FunDef : '(' 'par' '(' ListSymbol ')' InnerFunDef ')' { ParFunDef (reverse $4) $6 } 
-  | InnerFunDef { MonoFunDef $1 }
+Par :: { Par }
+Par : 'par' '(' ListSymbol ')' { Par (reverse $3) } 
 
 
-InnerFunDef :: { InnerFunDef }
-InnerFunDef : '(' Symbol '(' ListBinding ')' Type ')' { InnerFunDef $2 (reverse $4) $6 } 
+ConstDecl :: { ConstDecl }
+ConstDecl : Symbol Type { ConstDecl $1 $2 } 
 
 
 FunDecl :: { FunDecl }
-FunDecl : '(' 'par' '(' ListSymbol ')' '(' InnerFunDecl ')' ')' { ParFunDecl (reverse $4) $7 } 
-  | InnerFunDecl { MonoFunDecl $1 }
+FunDecl : Symbol '(' ListType ')' Type { FunDecl $1 (reverse $3) $5 } 
 
 
-InnerFunDecl :: { InnerFunDecl }
-InnerFunDecl : Symbol '(' ListType ')' Type { InnerFunDecl $1 (reverse $3) $5 } 
+FunDef :: { FunDef }
+FunDef : Symbol '(' ListBinding ')' Type Expr { FunDef $1 (reverse $3) $5 $6 } 
 
 
+FunDec :: { FunDec }
+FunDec : '(' Par InnerFunDec ')' { ParFunDec $2 $3 } 
+  | InnerFunDec { MonoFunDec $1 }
+
+
+InnerFunDec :: { InnerFunDec }
+InnerFunDec : '(' Symbol '(' ListBinding ')' Type ')' { InnerFunDec $2 (reverse $4) $6 } 
+
+
 Datatype :: { Datatype }
 Datatype : '(' Symbol ListConstructor ')' { Datatype $2 (reverse $3) } 
 
@@ -145,7 +165,7 @@
 
 
 LetDecl :: { LetDecl }
-LetDecl : '(' Binding Expr ')' { LetDecl $2 $3 } 
+LetDecl : '(' Symbol Expr ')' { LetDecl $2 $3 } 
 
 
 Type :: { Type }
@@ -164,6 +184,7 @@
   | '(' 'let' '(' ListLetDecl ')' Expr ')' { Let (reverse $4) $6 }
   | '(' Binder '(' ListBinding ')' Expr ')' { Binder $2 (reverse $4) $6 }
   | Integer { LitInt $1 }
+  | '-' Integer { LitNegInt $2 }
   | 'true' { LitTrue }
   | 'false' { LitFalse }
 
@@ -253,6 +274,11 @@
 ListFunDef :: { [FunDef] }
 ListFunDef : {- empty -} { [] } 
   | ListFunDef FunDef { flip (:) $1 $2 }
+
+
+ListFunDec :: { [FunDec] }
+ListFunDec : {- empty -} { [] } 
+  | ListFunDec FunDec { flip (:) $1 $2 }
 
 
 
diff --git a/src/Tip/Pass/AxiomatizeDatadecls.hs b/src/Tip/Pass/AxiomatizeDatadecls.hs
new file mode 100644
--- /dev/null
+++ b/src/Tip/Pass/AxiomatizeDatadecls.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE CPP #-}
+module Tip.Pass.AxiomatizeDatadecls where
+
+#include "errors.h"
+import Tip.Core
+import Tip.Fresh
+import Tip.Scope
+
+import Data.List (tails)
+import Data.Monoid
+
+import qualified Data.Map as M
+
+axiomatizeDatadecls :: Name a => Bool -> Theory a -> Fresh (Theory a)
+axiomatizeDatadecls ueq thy@Theory{..} =
+  do thys <- mapM (trDatatype ueq) thy_datatypes
+     return (mconcat (thys ++ [thy { thy_datatypes = [] }]))
+
+trDatatype :: Name a => Bool -> Datatype a -> Fresh (Theory a)
+trDatatype ueq dt@Datatype{..} =
+  do let ty_args = map TyVar data_tvs
+
+     -- X = nil | X = cons(head(X), tail(X))
+     domx <- freshNamed "x"
+     let doml = Local domx (TyCon data_name ty_args)
+     let domain =
+           Formula Assert (DataDomain data_name) data_tvs $
+             mkQuant Forall [doml] $
+               ors
+                 [ Lcl doml ===
+                     Gbl (constructor dt c ty_args)
+                       :@: [ Gbl (projector dt c i ty_args) :@: [Lcl doml]
+                           | i <- [0..length args-1]
+                           ]
+                 | c@(Constructor _ _ args) <- data_cons
+                 ]
+     -- head(cons(X,Y)) = X
+     inj <-
+       sequence
+         [ do qs <- mapM freshLocal (map snd args)
+              return $
+                Formula Assert (DataProjection data_name) data_tvs $
+                  mkQuant Forall qs $
+                    Gbl (projector dt c i ty_args) :@:
+                      [Gbl (constructor dt c ty_args) :@: map Lcl qs]
+                    ===
+                    Lcl (case drop i qs of q:_ -> q; [] -> __)
+         | c@(Constructor _ _ args) <- data_cons
+         , i <- [0..length args-1]
+         ]
+
+     -- nil /= cons(X,Y)
+     distinct <-
+       sequence
+         [ do qs_k <- mapM freshLocal (map snd args_k)
+              qs_j <- mapM freshLocal (map snd args_j)
+              let tm_k = Gbl (constructor dt k ty_args) :@: map Lcl qs_k
+              let tm_j = Gbl (constructor dt j ty_args) :@: map Lcl qs_j
+              return $
+                Formula Assert (DataDistinct data_name) data_tvs $
+                  mkQuant Forall (qs_k ++ qs_j) $
+                    tm_k =/= tm_j
+         | (k@(Constructor _ _ args_k),j@(Constructor _ _ args_j)) <- diag data_cons
+         ]
+
+     return $
+       declsToTheory $
+           [ SortDecl (Sort data_name data_tvs) ]
+        ++ [ SigDecl (Signature gbl (globalType gbl_info))
+           | let scp = scope emptyTheory { thy_datatypes = [dt] }
+           , (gbl,gbl_info) <- M.toList (Tip.Scope.globals scp)
+           , case gbl_info of
+               DiscriminatorInfo{} -> False
+               _ -> True
+           ]
+        ++ map AssertDecl (if ueq then inj else domain:inj ++ distinct)
+
+diag :: [a] -> [(a,a)]
+diag xs = [ (x,y) | x:ys <- tails xs, y <- ys ]
+
diff --git a/src/Tip/Pass/AxiomatizeFuncdefs.hs b/src/Tip/Pass/AxiomatizeFuncdefs.hs
--- a/src/Tip/Pass/AxiomatizeFuncdefs.hs
+++ b/src/Tip/Pass/AxiomatizeFuncdefs.hs
@@ -6,18 +6,14 @@
 #include "errors.h"
 import Tip.Core
 import Tip.Fresh
+import Tip.Scope
 
+import Data.List (delete)
 import Data.Generics.Geniplate
 import Control.Applicative
 
---conProjs :: Project a => Global a -> [Global a]
-conProjs = undefined
-{- (Global k (PolyType tvs arg_tys res_ty) ts _)
-  = [ Global (project k i) (PolyType tvs [res_ty] arg_ty) ts ProjectNS
-    | (i,arg_ty) <- zip [0..] arg_tys
-    ]
-    -}
-
+-- | Transforms define-fun to declare-fun in the most straightforward way.
+--   All parts of the right hand side is preserved, including match and if-then-else.
 axiomatizeFuncdefs :: Theory a -> Theory a
 axiomatizeFuncdefs thy@Theory{..} =
   thy{
@@ -28,52 +24,69 @@
  where
   (abs,fms) = unzip (map axiomatize thy_funcs)
 
--- Passes needed afterwards:
---
--- 1)  x = e ==> F[x] ~~> F[e]
---
--- 2)
---     all x (D => (all y . E) /\ (all z . F))
--- ~~>
---     all x ((D => all y . E) /\ (D => all z . F))
--- ~~>
---     (all x y (D => E)) /\ (all x z (D => F))
---
--- (TODO)
-
 axiomatize :: forall a . Function a -> (Signature a, Formula a)
 axiomatize fn@Function{..} =
   ( Signature func_name (funcType fn)
-  , Formula Assert func_tvs (ax func_body)
+  , Formula Assert (Definition func_name) func_tvs
+     (mkQuant Forall func_args (lhs === func_body))
   )
  where
   lhs = applyFunction fn (map TyVar func_tvs) (map Lcl func_args)
 
-  ax :: Expr a -> Expr a
-  ax e0 = case e0 of
-    Match s (Case Default def_rhs:alts) -> invert_alts s alts def_rhs /\ ax_alts s alts
+-- | Makes function definitions into case by converting case to
+--   left hand side pattern matching.
+axiomatizeFuncdefs2 :: Name a => Theory a -> Theory a
+axiomatizeFuncdefs2 thy@Theory{..} =
+  thy{
+    thy_funcs   = [],
+    thy_sigs    = thy_sigs ++ abs,
+    thy_asserts = concat fms ++ thy_asserts
+  }
+ where
+  scp = scope thy
+  (abs,fms) = unzip (map (axiomatize2 scp) thy_funcs)
+
+axiomatize2 :: forall a . Ord a => Scope a -> Function a -> (Signature a, [Formula a])
+axiomatize2 scp fn@Function{..} =
+  ( Signature func_name (funcType fn)
+  , map (Formula Assert (Definition func_name) func_tvs)
+     (ax func_args [] (map Lcl func_args) func_body)
+  )
+  where
+
+  -- ax vars pre args body
+  --   ~=
+  -- forall vars . pre => f(args) = body
+  ax :: [Local a] -> [Expr a] -> [Expr a] -> Expr a -> [Expr a]
+  ax vars pre args e0 = case e0 of
+    Match s (Case Default def_rhs:alts) -> ax vars (pre ++ map (invert_pat s . case_pat) alts) args def_rhs ++ ax_alts s alts
     Match s alts -> ax_alts s alts
-    Let{}        -> __ -- could use ==> while Let is neither recursive nor polymorphic
+    Let x b e    -> ax (vars ++ [x]) (pre ++ [Lcl x === b]) args e
     Lam{}        -> __
     Quant{}      -> __
-    _            -> lhs === e0 -- e0 should now only be (:@:) and Lcl
-   where
-    invert_alts :: Expr a -> [Case a] -> Expr a -> Expr a
-    invert_alts _ []                def_rhs = def_rhs
-    invert_alts s (Case pat _:alts) def_rhs = s === invert_pat s pat \/
-                                              invert_alts s alts def_rhs
-     where
-      invert_pat :: Expr a -> Pattern a -> Expr a
-      invert_pat _ Default      = __
-      invert_pat _ (LitPat lit) = literal lit
-      invert_pat s (ConPat k _) = Gbl k :@: [ Gbl p :@: [s] | p <- conProjs k ]
+    _            ->
+      -- e0 should now only be (:@:) and Lcl
+      [mkQuant Forall vars (pre ===> applyFunction fn (map TyVar func_tvs) args === e0)]
+    where
+    invert_pat :: Expr a -> Pattern a -> Expr a
+    invert_pat _ Default      = __
+    invert_pat s (LitPat lit) = s =/= literal lit
+    invert_pat s (ConPat k _) = s =/= (Gbl k :@: [ Gbl (projector dt c i (gbl_args k)) :@: [s] | i <- [0..length cargs-1] ])
+      where
+      Just (dt,c@(Constructor _ _ cargs)) = lookupConstructor (gbl_name k) scp
 
-    ax_alts :: Expr a -> [Case a] -> Expr a
-    ax_alts s alts = ands [ ax_pat s pat rhs | Case pat rhs <- alts ]
-     where
-      ax_pat :: Expr a -> Pattern a -> Expr a -> Expr a
+    ax_alts :: Expr a -> [Case a] -> [Expr a]
+    ax_alts s alts = concat [ ax_pat s pat rhs | Case pat rhs <- alts ]
+      where
+      ax_pat :: Expr a -> Pattern a -> Expr a -> [Expr a]
       ax_pat _ Default       _   = __
-      ax_pat s (LitPat lit)  rhs = s === literal lit ==> ax rhs
-      ax_pat s (ConPat k bs) rhs = mkQuant Forall bs
-                                     (s === Gbl k :@: map Lcl bs ==> ax rhs)
+      ax_pat s (LitPat lit)  rhs = rec [] rhs s (literal lit)
+      ax_pat s (ConPat k bs) rhs = rec bs rhs s (Gbl k :@: map Lcl bs)
+
+      rec :: [Local a] -> Expr a -> Expr a -> Expr a -> [Expr a]
+      rec new e (Lcl x) pat_expr =
+        let su = unsafeSubst pat_expr x
+        in  ax (delete x vars ++ new) (map su pre) (map su args) (su e)
+
+      rec new e scrut   pat_expr = ax (vars ++ new) (pre ++ [scrut === pat_expr]) args e
 
diff --git a/src/Tip/Pass/Booleans.hs b/src/Tip/Pass/Booleans.hs
--- a/src/Tip/Pass/Booleans.hs
+++ b/src/Tip/Pass/Booleans.hs
@@ -1,8 +1,11 @@
 {-# LANGUAGE FlexibleContexts, ViewPatterns, RecordWildCards #-}
+{-# LANGUAGE ScopedTypeVariables #-}
 module Tip.Pass.Booleans where
 
 import Tip.Core
 
+import Tip.Fresh
+
 import Data.Generics.Geniplate
 
 -- | Transforms boolean operators to if, but not in expression contexts.
@@ -20,29 +23,42 @@
 formulaBoolOpToIf e0 =
   case e0 of
     Builtin op :@: args@(a:_)
-      | op `elem` [And,Or,Not,Implies] ||
-        op `elem` [Equal,Distinct] && hasBoolType a ->
-        Builtin op :@: map formulaBoolOpToIf args
+      | op `elem` [And,Or,Not,Implies]
+        -- || op `elem` [Equal,Distinct] && hasBoolType a ->
+        -> Builtin op :@: map formulaBoolOpToIf args
     Quant qi q as e -> Quant qi q as (formulaBoolOpToIf e)
     _ -> boolOpToIf e0
 
 hasBoolType :: Ord a => Expr a -> Bool
 hasBoolType e = exprType e == boolType
 
--- | Transforms @and@, @or@, @=>@, @not@ and @=@ and @distict@ on @Bool@
+-- | Transforms @and@, @or@, @=>@, @not@ and @=@ and @distinct@ on @Bool@
 --   into @ite@ (i.e. @match@)
 boolOpToIf :: (Ord a,TransformBi (Expr a) (f a)) => f a -> f a
 boolOpToIf = transformExprIn $
   \ e0 -> case e0 of
-    Builtin And :@: [a,b]     -> makeIf a b falseExpr
-    Builtin Or  :@: [a,b]     -> makeIf a trueExpr b
-    Builtin Not :@: [a]       -> makeIf a falseExpr trueExpr
-    Builtin Implies :@: [a,b] -> makeIf a b trueExpr
-    Builtin Equal    :@: [a,b] | hasBoolType a -> makeIf a b (neg_if b)
-    Builtin Distinct :@: [a,b] | hasBoolType a -> makeIf a (neg_if b) b
+    Builtin And :@: as  -> ands as
+    Builtin Or  :@: as  -> ors  as
+    Builtin Not :@: [a] -> neg_if a
+    Builtin Implies :@: [a, b] -> makeIf a b trueExpr
+    Builtin Equal :@: as | all hasBoolType as -> equals as
+    Builtin Distinct :@: as | all hasBoolType as -> distincts as
     _ -> e0
   where
-    neg_if a = makeIf a falseExpr trueExpr
+    ands []         = trueExpr
+    ands [a]        = a
+    ands (a:as)     = makeIf a (ands as) falseExpr
+    ors  []         = falseExpr
+    ors  [a]        = a
+    ors  (a:as)     = makeIf a trueExpr (ors as)
+    neg_if a        = makeIf a falseExpr trueExpr
+    equals []       = trueExpr
+    equals [_]      = trueExpr
+    equals (a:as)   = makeIf a (ands as) (neg_if (ors as))
+    distincts []    = trueExpr
+    distincts [_]   = trueExpr
+    distincts [a,b] = makeIf a (neg_if b) b
+    distincts _     = falseExpr
 
 -- | Transforms @ite@ (@match@) on boolean literals in the branches
 --   into the corresponding builtin boolean function.
@@ -55,4 +71,68 @@
       | Just True  <- boolView f -> b ==> t -- neg b \/ t
       | Just False <- boolView f -> b /\ t
     _ -> e0
+
+-- | Names to replace the builtin boolean type with
+data BoolNames a =
+  BoolNames
+    { boolName    :: a
+    , trueName    :: a
+    , falseName   :: a
+    , isTrueName  :: a
+    , isFalseName :: a
+    }
+
+freshBoolNames :: Name a => Fresh (BoolNames a)
+freshBoolNames =
+  do boolName    <- freshNamed "Bool"
+     trueName    <- freshNamed "True"
+     falseName   <- freshNamed "False"
+     isTrueName  <- freshNamed "is-True"
+     isFalseName <- freshNamed "is-False"
+     return BoolNames{..}
+
+boolGbl :: BoolNames a -> Bool -> Global a
+boolGbl BoolNames{..} b = Global
+  (if b then trueName else falseName)
+  (PolyType [] [] (TyCon boolName []))
+  []
+
+boolExpr :: BoolNames a -> Bool -> Expr a
+boolExpr names b = Gbl (boolGbl names b) :@: []
+
+removeBuiltinBoolFrom :: forall f a . (TransformBi (Type a) (f a),TransformBi (Pattern a) (f a),TransformBi (Head a) (f a)) => BoolNames a -> f a -> f a
+removeBuiltinBoolFrom names = transformBi h . transformBi f . transformBi g
+  where
+    f :: Head a -> Head a
+    f (Builtin (Lit (Bool b))) = Gbl (boolGbl names b)
+    f hd                       = hd
+
+    g :: Pattern a -> Pattern a
+    g (LitPat (Bool b))    = ConPat (boolGbl names b) []
+    g pat                  = pat
+
+    h :: Type a -> Type a
+    h (BuiltinType Boolean) = TyCon (boolName names) []
+    h ty                    = ty
+
+removeBuiltinBoolWith :: Ord a => BoolNames a -> Theory a -> Theory a
+removeBuiltinBoolWith names@BoolNames{..} Theory{..}
+  = fixup_asserts
+  $ removeBuiltinBoolFrom names Theory{thy_datatypes=bool_decl:thy_datatypes,..}
+  where
+    fixup_asserts Theory{..} = Theory{thy_asserts=map fixup_assert thy_asserts,..}
+    fixup_assert (Formula r i tvs b) = Formula r i tvs (fixup_expr b)
+    fixup_expr (Quant qi q vs e) = Quant qi q vs (fixup_expr e)
+    fixup_expr e
+      | TyCon tc [] <- exprType e
+      , tc == boolName
+      = boolExpr names True === e
+    fixup_expr e = e
+
+    bool_decl = Datatype boolName [] [Constructor falseName isFalseName []
+                                     ,Constructor trueName isTrueName []]
+
+removeBuiltinBool :: Name a => Theory a -> Fresh (Theory a)
+removeBuiltinBool thy = do names <- freshBoolNames
+                           return (removeBuiltinBoolWith names thy)
 
diff --git a/src/Tip/Pass/CommuteMatch.hs b/src/Tip/Pass/CommuteMatch.hs
--- a/src/Tip/Pass/CommuteMatch.hs
+++ b/src/Tip/Pass/CommuteMatch.hs
@@ -1,45 +1,61 @@
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE PatternGuards #-}
 {-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE ScopedTypeVariables #-}
 module Tip.Pass.CommuteMatch where
 
 #include "errors.h"
 import Tip.Core
 import Tip.Fresh
+import Tip.Simplify
+import Tip.Scope
 
 import Data.Generics.Geniplate
 import Control.Applicative
+import Data.Maybe
 
 -- | Makes an effort to move match statements upwards: moves match above
 -- function applications, and moves matches inside scrutinees outside.
 --
 -- Does not move past quantifiers, lets, and lambdas.
-commuteMatch :: (Name a, TransformBiM Fresh (Expr a) (f a)) => f a -> Fresh (f a)
-commuteMatch = transformExprInM $ \ e0 ->
-  case e0 of
-    Match (Match e inner_alts) outer_alts ->
-      commuteMatch =<< do
-        Match e <$> sequence
-          [ Case lhs <$> freshen (Match rhs outer_alts)
-          | Case lhs rhs <- inner_alts
-          ]
+commuteMatchTheory :: Name a => Theory a -> Fresh (Theory a)
+commuteMatchTheory thy = commuteMatch (Just thy) thy
 
-    hd :@: args
-      | and [ not (logicalBuiltin b) | Builtin b <- [hd] ]
-      , let isMatch Match{} = True
-            isMatch _       = False
-      , (left, Match e alts:right) <- break isMatch args
-      -> commuteMatch =<< do
-           Match e <$> sequence
-             [ Case lhs <$> freshen (hd :@: (left ++ [rhs] ++ right))
-             | Case lhs rhs <- alts
-             ]
+-- | Makes an effort to move match statements upwards: moves match above
+-- function applications, and moves matches inside scrutinees outside.
+--
+-- Does not move past quantifiers, lets, and lambdas.
+commuteMatch :: forall a f. (Name a, TransformBiM Fresh (Expr a) (f a)) => Maybe (Theory a) -> f a -> Fresh (f a)
+commuteMatch mthy = aux
+  where
+    aux :: forall f. (TransformBiM Fresh (Expr a) (f a)) => f a -> Fresh (f a)
+    aux = transformExprInM $ \e0 ->
+      case e0 of
+        Match (Match e inner_alts) outer_alts ->
+          aux =<< do
+            Match e <$> sequence
+              [ Case lhs <$> freshen (match rhs outer_alts)
+              | Case lhs rhs <- inner_alts
+              ]
 
-    Lam bs e  -> Lam bs <$> commuteMatch e
+        hd :@: args
+          | and [ not (logicalBuiltin b) | Builtin b <- [hd] ]
+          , let isMatch Match{} = True
+                isMatch _       = False
+          , (left, Match e alts:right) <- break isMatch args
+          -> aux =<< do
+               Match e <$> sequence
+                 [ Case lhs <$> freshen (hd :@: (left ++ [rhs] ++ right))
+                 | Case lhs rhs <- alts
+                 ]
 
-    Quant qi q bs e -> Quant qi q bs <$> commuteMatch e
+        Lam bs e  -> Lam bs <$> aux e
 
-    Let x b e -> Let x b <$> commuteMatch e
+        Quant qi q bs e -> Quant qi q bs <$> aux e
 
-    _ -> return e0
+        Let x b e -> Let x b <$> aux e
 
+        _ -> return e0
+
+    mscp = fmap scope mthy
+    match e cases = fromMaybe (Match e cases) (tryMatch mscp e cases)
diff --git a/src/Tip/Pass/Concretise.hs b/src/Tip/Pass/Concretise.hs
new file mode 100644
--- /dev/null
+++ b/src/Tip/Pass/Concretise.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE ScopedTypeVariables #-}
+module Tip.Pass.Concretise (intToNat, sortsToNat) where
+
+import Tip.Core
+import Tip.Parser
+import Tip.Fresh
+import Tip.Pretty
+import Control.Monad.Writer
+import Control.Applicative
+
+import Data.Monoid
+
+import qualified Data.Foldable as F
+
+import qualified Data.Map as M
+import Data.Map (Map)
+
+import Data.Generics.Geniplate
+
+import Tip.Utils
+
+nat_theory :: Theory Id
+Right nat_theory =
+  parse
+    $  "(declare-datatypes () ((Nat (Z) (S (p Nat))))) (define-fun-rec lt ((x Nat) (y Nat)) Bool (match y (case Z false) (case (S z) (match x (case Z true) (case (S n) (lt n z)))))) (define-fun-rec le ((x Nat) (y Nat)) Bool (match x (case Z true) (case (S z) (match y (case Z false) (case (S x2) (le z x2)))))) (define-fun-rec gt ((x Nat) (y Nat)) Bool (match x (case Z false) (case (S z) (match y (case Z true) (case (S x2) (gt z x2)))))) (define-fun-rec ge ((x Nat) (y Nat)) Bool (match y (case Z true) (case (S z) (match x (case Z false) (case (S x2) (ge x2 z)))))) (define-fun-rec equal ((x Nat) (y Nat)) Bool (match x (case Z (match y (case Z true) (case (S z) false))) (case (S x2) (match y (case Z false) (case (S y2) (equal x2 y2)))))) (define-fun unequal ((x Nat) (y Nat)) Bool (not (equal x y)))"
+    ++ "(check-sat)"
+
+renameWrt :: (Ord a,PrettyVar a,Name b) => Theory a -> f b -> Fresh (Theory b)
+renameWrt thy _wrt =
+  do rename_map <-
+       M.fromList <$>
+         sequence
+           [ do n' <- freshNamed (varStr n)
+                return (n,n')
+           | n <- usort (F.toList thy)
+           ]
+     return (fmap (rename_map M.!) thy)
+
+-- | Replaces abstract sorts with natural numbers
+sortsToNat :: forall a . Name a => Theory a -> Fresh (Theory a)
+sortsToNat thy
+  | null (thy_sorts thy) = return thy
+  | otherwise =
+      do nat_thy <- nat_theory `renameWrt` thy
+         let [nat] = thy_datatypes nat_thy
+         let thy' =
+               thy { thy_sorts = []
+                   , thy_datatypes = nat:thy_datatypes thy
+                   }
+         let sorts = map sort_name (thy_sorts thy)
+         let replace (TyCon s _) | s `elem` sorts = TyCon (data_name nat) []
+             replace t0 = t0
+         return (transformBi replace thy')
+
+-- | Replaces the builtin Int to natural numbers,
+--   if the only operations performed on are related to int ordering
+intToNat :: forall a . Name a => Theory a -> Fresh (Theory a)
+intToNat thy
+  | any bad bs = return thy
+  | otherwise =
+     do nat_thy <- nat_theory `renameWrt` thy
+
+        let [nat] = thy_datatypes nat_thy
+
+        let [lt,le,gt,ge,eq,ne] = thy_funcs nat_thy
+
+        let replaceE :: Expr a -> Writer [Function a] (Expr a)
+            replaceE e0@(Builtin b :@: (es@(e1:_))) =
+              case b of
+                IntLt -> ret lt
+                IntLe -> ret le
+                IntGt -> ret gt
+                IntGe -> ret ge
+                Equal    | exprType e1 == intType -> ret eq
+                Distinct | exprType e1 == intType -> ret ne
+                _ -> return e0
+              where
+              ret :: Function a -> Writer [Function a] (Expr a)
+              ret op = tell [op] >> return (applyFunction op [] es)
+            replaceE e0 = return e0
+
+        let replaceT :: Type a -> Writer Any (Type a)
+            replaceT (BuiltinType Integer) = tell (Any True) >> return (TyCon (data_name nat) [])
+            replaceT t0 = return t0
+
+        let (thy',     fns_used) = runWriter (transformBiM replaceE thy)
+            (thy'',Any ty_used)  = runWriter (transformBiM replaceT thy')
+
+        let used_nat_thy
+              | null fns_used && not ty_used = emptyTheory
+              | otherwise                    = nat_thy { thy_funcs = usort fns_used }
+
+        return (thy'' `joinTheories` used_nat_thy)
+  where
+  bs :: [Builtin]
+  bs = usort (universeBi thy)
+
+  bad (Lit Int{}) = True
+  bad IntAdd = True
+  bad IntSub = True
+  bad IntMul = True
+  bad IntDiv = True
+  bad IntMod = True
+  bad _      = False
+
diff --git a/src/Tip/Pass/Conjecture.hs b/src/Tip/Pass/Conjecture.hs
new file mode 100644
--- /dev/null
+++ b/src/Tip/Pass/Conjecture.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE PatternGuards #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE CPP #-}
+module Tip.Pass.Conjecture where
+
+#include "errors.h"
+import Tip.Core
+import Tip.Fresh
+import Control.Monad
+import Control.Monad.Writer
+import Data.Generics.Geniplate
+
+-- | Splits a theory with many goals into many theories each with one goal
+splitConjecture :: Theory a -> [Theory a]
+splitConjecture thy =
+  [ thy { thy_asserts = goal : assums } | goal <- goals ]
+  where
+  (goals,assums) = theoryGoals thy
+
+-- | Splits, type skolems and skolemises conjectures!
+skolemiseConjecture :: Name a => Theory a -> Fresh [Theory a]
+skolemiseConjecture = mapM (skolemiseConjecture' <=< typeSkolemConjecture) . splitConjecture
+
+-- | Skolemises a conjecture, assuming that there is just one goal and that it has no type variables.
+skolemiseConjecture' :: Name a => Theory a -> Fresh (Theory a)
+skolemiseConjecture' thy =
+  case goals of
+    [Formula Prove i tvs body] ->
+      case tvs of
+        [] -> do let (body',(sks,pre)) = runWriter (skolemise body)
+
+                 sks' <- sequence
+                   [ do v' <- refresh v
+                        return (Signature v' (PolyType [] [] t))
+                   | Local v t <- sks
+                   ]
+
+                 let su = substMany (sks `zip` map (\ sk -> applySignature sk [] []) sks')
+
+                 body'' <- su body'
+
+                 pre'' <- mapM su pre
+
+                 return thy {
+                       thy_sigs    = sks' ++ thy_sigs thy,
+                       thy_asserts = Formula Prove i [] body'' : map (formula Assert []) pre'' ++ assums
+                     }
+        _ -> ERROR("Cannot skolemise conjecture with type variables")
+    _ -> ERROR("Need one conjecture to skolemise conjecture")
+  where
+  (goals,assums) = theoryGoals thy
+
+  formula r tvs (Quant (QuantIH i) q vs e) = Formula r (IH i) tvs (mkQuant q vs e)
+  formula r tvs e = Formula r Unknown tvs e
+
+skolemise :: Expr a -> Writer ([Local a],[Expr a]) (Expr a)
+skolemise = go True
+  where
+  go i e0 =
+    case e0 of
+      Quant qi Forall lcls e  -> tell (lcls,[]) >> go True e
+      Builtin Not :@: [e] | i -> go False (neg e)
+      Builtin Implies :@: es  -> tell ([],init es) >> go True (last es)
+      _                       -> return e0
+
+
+-- | Negates the conjecture: changes assert-not into assert, and
+--   introduce skolem types in case the goal is polymorphic.
+--   (runs 'typeSkolemConjecture')
+negateConjecture :: Name a => Theory a -> Fresh (Theory a)
+negateConjecture = fmap (declsPass (map neg1)) . typeSkolemConjecture
+  where
+  neg1 (AssertDecl (Formula Prove i [] form))
+      = AssertDecl (Formula Assert i [] (gentleNeg form))
+  neg1 d0 = d0
+
+-- | Introduce skolem types in case the goal is polymorphic.
+typeSkolemConjecture :: Name a => Theory a -> Fresh (Theory a)
+typeSkolemConjecture thy =
+  foldM ty_skolem1
+    thy { thy_asserts = filter (not . isProve) (thy_asserts thy) }
+    (filter isProve (thy_asserts thy))
+  where
+  isProve (Formula Prove _ _ form) = True
+  isProve _ = False
+
+  ty_skolem1 thy (Formula Prove i tvs form) = do
+    tvs' <- mapM (refreshNamed "sk_") tvs
+    return thy {
+      thy_asserts = Formula Prove i [] (makeTyCons (zip tvs tvs') form):thy_asserts thy,
+      thy_sorts = [ Sort tv [] | tv <- tvs' ] ++ thy_sorts thy }
+
+  makeTyCons tvs =
+    transformTypeInExpr $ \ty ->
+      case ty of
+        TyVar tv | Just tv' <- lookup tv tvs -> TyCon tv' []
+        _ -> ty
diff --git a/src/Tip/Pass/DropSuffix.hs b/src/Tip/Pass/DropSuffix.hs
new file mode 100644
--- /dev/null
+++ b/src/Tip/Pass/DropSuffix.hs
@@ -0,0 +1,26 @@
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE PatternGuards #-}
+module Tip.Pass.DropSuffix where
+
+import Data.Traversable
+import Tip.Pretty
+import Tip.Fresh
+import Data.Map (Map)
+import qualified Data.Map as M
+import Control.Monad.State
+
+dropSuffix :: forall f a . (Traversable f,Name a) => String -> f a -> Fresh (f a)
+dropSuffix suf thy = evalStateT (traverse f thy) M.empty
+  where
+    f :: a -> StateT (Map a a) Fresh a
+    f x
+      | (pre,_:_) <- break (`elem` suf) (varStr x)
+      = do m <- get
+           case M.lookup x m of
+             Just y  -> return y
+             Nothing -> do y <- lift (freshNamed pre)
+                           modify (M.insert x y)
+                           return y
+    f x = return x
+
diff --git a/src/Tip/Pass/EqualFunctions.hs b/src/Tip/Pass/EqualFunctions.hs
--- a/src/Tip/Pass/EqualFunctions.hs
+++ b/src/Tip/Pass/EqualFunctions.hs
@@ -77,22 +77,22 @@
 
 -- | If we have
 --
--- > g x y = f x y
+-- > g [a] x y = f [T1 a,T2 a] x y
 --
--- then we remove @g@ and replace it with @f@ everywhere
-removeAliases :: Eq a => Theory a -> Theory a
+-- then we remove @g [t]@ and replace it with @f [T1 t,T2 t]@ everywhere
+removeAliases :: Ord a => Theory a -> Theory a
 removeAliases thy@(Theory{thy_funcs=fns0})
     | null renamings = thy
     | otherwise = removeAliases $ renameGlobals renamings thy{ thy_funcs = survivors }
   where
     renamings = take 1
       [ (g,k)
-      | Function g ty_vars vars _res_ty (hd :@: args) <- fns0
+      | Function g g_tvs vars _ (hd :@: args) <- fns0
       , map Lcl vars == args
-      , let (ok,k) = case hd of
-              Gbl (Global f pty ty_args) -> (map TyVar ty_vars == ty_args, \ ts -> Gbl (Global f pty ts))
-              Builtin{}                  -> (True, \ _ -> hd)
-      , ok
+      , let k = case hd of
+                  Builtin{} -> \ _ -> hd
+                  Gbl (Global f pty f_args) ->
+                    \ g_app -> Gbl (Global f pty (map (applyType g_tvs g_app) f_args))
       ]
 
     remove = map fst renamings
diff --git a/src/Tip/Pass/Induction.hs b/src/Tip/Pass/Induction.hs
new file mode 100644
--- /dev/null
+++ b/src/Tip/Pass/Induction.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE CPP #-}
+module Tip.Pass.Induction where
+
+#include "errors.h"
+import Tip.Core
+import Tip.Fresh
+import Induction.Structural
+
+import Control.Applicative
+
+import Data.List (find,partition)
+
+theoryTyEnv :: Ord a => Theory a -> TyEnv (Head a) (Type a)
+theoryTyEnv Theory{..} (BuiltinType Boolean) =
+  do return [(Builtin (Lit (Bool b)),[]) | b <- [False,True]]
+
+theoryTyEnv Theory{..} t =
+  do TyCon tc ts <- return t
+     dt@Datatype{..} <- find ((tc ==) . data_name) thy_datatypes
+     return
+         [ (Gbl (constructor dt c ts)
+           ,[ case applyType data_tvs ts t of
+                t@(TyCon tc' _) | tc == tc' -> Rec t
+                t@(args :=>: _)             -> Exp t args
+                t                           -> NonRec t
+            | (_proj,t) <- con_args c
+            ]
+           )
+         | c <- data_cons
+         ]
+
+trTerm :: Term (Head a) (Local a) -> Expr a
+trTerm (Var lcl)   = Lcl lcl
+trTerm (Con h tms) = h :@: map trTerm tms
+trTerm (Fun f tms) = Builtin At :@: (Lcl f:map trTerm tms)
+
+-- | Applies induction at the given coordinates to the first goal
+induction :: (Name a,Ord a) => [Int] -> Theory a -> Fresh [Theory a]
+induction coords thy@Theory{..} =
+  case goal of
+    Formula Prove i tvs (Quant qi Forall lcls body)
+      | cs@(_:_) <- [ x | x <- coords, x >= length lcls || x < 0 ] -> error $ "Induction coordinates " ++ show cs ++ " out of bounds!"
+      | otherwise ->
+      do (obligs,_) <-
+           unTagMapM
+             (\ (v :~ _) -> refresh v)
+             (subtermInduction
+               (theoryTyEnv thy)
+               [(lcl_name,lcl_type) | Local{..} <- lcls]
+               coords)
+
+         split_goals <-
+           sequence
+             [ do let attach_type env v =
+                        case lookup v (env ++ sks) of
+                          Just t  -> Local v t
+                          Nothing -> ERROR("Lost type of variable!")
+                  let replace env ts = substMany (zip lcls (map (trTerm . fmap (attach_type env)) ts)) body
+                  hyps <- sequence
+                            [ Quant (QuantIH i) Forall [ Local v t | (v,t) <- prenex ]
+                                <$> replace prenex inst
+                            | (i, (prenex, inst)) <- [0..] `zip` hyps
+                            ]
+                  concl <- replace [] concl
+                  let body' = hyps ===> concl
+                  return
+                    (Formula Prove i tvs
+                      (mkQuant Forall [ Local v t | (v,t) <- sks] body'))
+             | Obligation sks hyps concl <- obligs
+             ]
+
+         return
+           [ thy { thy_asserts = goal' : goals ++ assums }
+           | goal' <- split_goals
+           ]
+
+    _ -> return [thy]
+  where
+  (goal:goals,assums) = partitionGoals thy_asserts
+
diff --git a/src/Tip/Pass/Lift.hs b/src/Tip/Pass/Lift.hs
--- a/src/Tip/Pass/Lift.hs
+++ b/src/Tip/Pass/Lift.hs
@@ -85,7 +85,7 @@
   case func_body of
     Lam lam_args e ->
       let abs = Signature func_name (PolyType func_tvs (map lcl_type func_args) func_res)
-          fm  = Formula Assert func_tvs
+          fm  = Formula Assert (Defunction func_name) func_tvs
                   (mkQuant
                     Forall
                     (func_args ++ lam_args)
@@ -133,7 +133,8 @@
     arities = usort [ length args | args :=>: _ <- universeBi thy :: [Type a] ]
     makeArrow n = do
       ty <- freshNamed ("fun" ++ show n)
-      return (n, Sort ty (n+1))
+      tvs <- replicateM (n+1) fresh
+      return (n, Sort ty tvs)
     makeAt arrows n = do
       name <- freshNamed ("apply" ++ show n)
       tvs <- mapM (freshNamed . mkTyVarName) [0..(n-1)]
diff --git a/src/Tip/Pass/Monomorphise.hs b/src/Tip/Pass/Monomorphise.hs
new file mode 100644
--- /dev/null
+++ b/src/Tip/Pass/Monomorphise.hs
@@ -0,0 +1,234 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE ViewPatterns #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE OverloadedStrings #-}
+module Tip.Pass.Monomorphise where
+
+import Tip.Utils.Specialiser
+import Tip.Utils
+import Tip.Fresh
+import Tip.Core hiding (Expr)
+import qualified Tip.Core as Tip
+
+import qualified Data.Foldable as F
+
+import Tip.Pretty
+import Text.PrettyPrint
+import Tip.Pretty.SMT
+
+import Control.Monad
+import Control.Monad.Writer
+
+import Data.Generics.Geniplate
+
+import Data.List (union)
+
+import Debug.Trace
+
+trListTYPE :: (Type a -> Type a) -> [((a,[Type a]),a)] -> [((a,[Type a]),a)]
+trListTYPE = undefined
+return []
+trList :: (Type a -> Type a) -> [((a,[Type a]),a)] -> [((a,[Type a]),a)]
+trList = $(genTransformBi 'trListTYPE)
+
+monomorphise :: forall a . Name a => Bool -> Theory a -> Fresh (Theory a)
+monomorphise verbose = fmap (fmap unPPVar) . monomorphise' verbose . fmap PPVar
+
+monomorphicThy :: Theory a -> Bool
+monomorphicThy = all monomorphicDecl . theoryDecls
+
+monomorphicDecl :: Decl a -> Bool
+monomorphicDecl d =
+  case d of
+    DataDecl Datatype{..}  -> null data_tvs
+    SortDecl Sort{..}      -> null sort_tvs
+    SigDecl Signature{..}  -> null (polytype_tvs sig_type)
+    FuncDecl Function{..}  -> null func_tvs
+    AssertDecl Formula{..} -> null fm_tvs
+
+monomorphise' :: forall a . (Name a,Pretty a) => Bool -> Theory a -> Fresh (Theory a)
+monomorphise' _verbose thy | monomorphicThy thy = return thy
+monomorphise'  verbose thy = do
+    let ds = theoryDecls thy
+        insts :: [(Decl a,Subst a Void (Con a))]
+        loops :: [Decl a]
+        rules = [ (d,declToRule True d) | d <- ds ]
+        (insts,loops) = specialise rules
+    when verbose $
+      do traceM (show ("rules:" $\ pp rules))
+         traceM (show ("loops:" $\ pp loops))
+         traceM (show ("insts:" $\ pp insts))
+    if null loops
+      then do
+        (insts',renames) <- runWriterT (mapM (uncurry renameDecl) insts)
+        return $ renameWith (renameRenames renames) (declsToTheory insts')
+      else return thy
+
+exprGlobalRecords :: forall a . Ord a => Tip.Expr a -> [Expr (Con a) a]
+exprGlobalRecords e = usort $
+    [ Con (Pred gbl_name) (map trType gbl_args)
+    | Global{..} <- universeBi e
+    ]
+
+-- why are you going to use exprTypeRecords?
+exprTypeRecords :: forall a . Ord a => Tip.Expr a -> [Expr (Con a) a]
+exprTypeRecords e = usort $
+    [ t
+    | Lcl (Local{..}) :: Tip.Expr a <- universeBi e
+    , t <- typeRecords lcl_type
+    ]
+    ++
+    -- need this for nils lying around
+    -- (another fix is to make list(a) or cons(a) imply a
+    [ t
+    | g@Global{..} :: Tip.Global a <- universeBi e
+    -- , let (as,res) = gblType g
+    -- , inst_ty <- res:as
+    , inst_ty <- gbl_args -- NB: looks at the instantiated global type
+    , t <- typeRecords inst_ty
+    ]
+
+
+
+-- We're traversing right now to get all the TyArr that's needed
+-- Otherwise it's enough to only use the top + add the rules
+-- =>(a,b) -> a, b
+typeRecords :: forall a . Ord a => Tip.Type a -> [Expr (Con a) a]
+typeRecords t = usort $
+    [ Con (TCon ty) (map trType args)
+    | TyCon ty args :: Type a <- universeBi t
+    ] ++
+    [ Con TyArr (map trType (args ++ [res]))
+    | args :=>: res :: Type a <- universeBi t
+    ]
+
+exprRecords :: forall a . Ord a => Tip.Expr a -> [Expr (Con a) a]
+exprRecords e = usort $ exprGlobalRecords e ++ exprTypeRecords e
+
+renameRenames :: Ord a => [((a,[Type a]),a)] -> [((a,[Type a]),a)]
+renameRenames su =
+    let su' = trList (tyRename su) su
+        su2 = usort (su ++ su')
+    in  if su == su2 then su else renameRenames su2
+
+tyRename :: Ord a => [((a,[Type a]),a)] -> Type a -> Type a
+tyRename su (TyCon tc ts) | Just tc' <- lookup (tc,ts) su = TyCon tc' []
+tyRename _  t0 = t0
+
+renameWith :: Ord a => [((a,[Type a]),a)] -> Theory a -> Theory a
+renameWith su = transformBi (tyRename su) . transformBi gbl
+  where
+    gbl (Global f (PolyType tvs args res) ts)
+        | Just f' <- lookup (f,ts) su
+        = let at = applyType tvs ts
+          in  Global f' (PolyType [] (map at args) (at res)) []
+    gbl g0 = g0
+
+renameDecl :: forall a . Name a => Decl a -> Subst a Void (Con a) -> WriterT [((a,[Type a]),a)] Fresh (Decl a)
+renameDecl d su = case d of
+    SortDecl (Sort s tvs)  -> do
+        s' <- rename tvs s
+        return (SortDecl (Sort s' []))
+    SigDecl (Signature f pt@(PolyType tvs _ _)) -> do
+        f' <- rename tvs f
+        let (args',res) = applyPolyType pt (ty_args tvs)
+        return (SigDecl (Signature f' (PolyType [] args' res)))
+    AssertDecl (Formula r i tvs b) ->
+        return (ty_inst tvs (AssertDecl (Formula r i [] b)))
+
+    DataDecl (Datatype tc tvs cons) -> do
+        tc' <- rename tvs tc
+        cons' <- sequence
+            [ do k' <- rename tvs k
+                 d' <- rename tvs d
+                 args' <- sequence [ do p' <- rename tvs p; return (p',t) | (p,t) <- args ]
+                 return (Constructor k' d' args')
+            | Constructor k d args <- cons
+            ]
+        return (ty_inst tvs (DataDecl (Datatype tc' [] cons')))
+
+    FuncDecl fn@(Function f tvs args res body) -> do
+        f' <- rename tvs f
+        let fn' = Function f' [] args res body
+        return (ty_inst tvs (FuncDecl fn'))
+  where
+  ty_args tvs = [ toType (fmap absurd e) | tv <- tvs, let Just e = lookup tv su ]
+
+  ty_inst :: [a] -> Decl a -> Decl a
+  ty_inst tvs d = applyTypeInDecl tvs (ty_args tvs) d
+
+  rename :: [a] -> a -> WriterT [((a,[Type a]),a)] Fresh a
+  rename [] f = return f
+  rename tvs f = do
+    f' <- lift (refresh f)
+    tell [((f,ty_args tvs),f')]
+    return f'
+
+data Con a = Pred a | TCon a | TyArr | TyBun BuiltinType | Dummy
+  deriving (Eq,Ord,Show)
+
+instance Pretty a => Pretty (Con a) where
+  pp (Pred x)   = "Pred" <+> pp x
+  pp (TCon x)   = "TCon" <+> pp x
+  pp TyArr      = "=>"
+  pp (TyBun bu) = ppBuiltinType bu
+  pp Dummy      = "dummy"
+
+trType :: Type a -> Expr (Con a) a
+trType (TyCon tc ts)     = Con (TCon tc) (map trType ts)
+trType (ts :=>: tr)      = Con TyArr (map trType ts ++ [trType tr])
+trType (TyVar x)         = Var x
+trType (BuiltinType bun) = Con (TyBun bun) []
+
+toType :: Expr (Con a) a -> Type a
+toType (Con (TCon tc) ts)   = TyCon tc (map toType ts)
+toType (Con TyArr ts)       = map toType (init ts) :=>: toType (last ts)
+toType (Var x)              = TyVar x
+toType (Con (TyBun bun) []) = BuiltinType bun
+
+close :: Expr (Con a) a -> Closed (Con a)
+close = fmap (error "contains variables")
+
+sigRule :: Ord a => a -> [a] -> [Type a] -> Type a -> [Rule (Con a) a]
+sigRule f tvs args res = usort $
+    [ Rule [Con (Pred f) (map Var tvs)] t
+    | t0 <- res : args, t <- typeRecords t0
+    ]
+
+declToRule :: Ord a => Bool -> Decl a -> [Rule (Con a) a]
+declToRule enthusiastic_function_inst d = usort $ case d of
+
+    SortDecl (Sort d tvs) ->
+        [Rule [Con (TCon d) (map Var tvs)] (Con Dummy [])]
+
+    SigDecl (Signature f (PolyType tvs args res)) ->
+        sigRule f tvs args res
+
+    AssertDecl (Formula Prove _ tvs b) ->
+        map (Rule []) (Con Dummy []:exprRecords b)
+
+    AssertDecl (Formula Assert _ tvs b) ->
+        -- careful instantiation
+        [ Rule (exprGlobalRecords b) e
+        | e <- Con Dummy []:exprTypeRecords b
+        ]
+
+    DataDecl (Datatype tc tvs cons) ->
+        let tcon x = Con (TCon x) (map Var tvs)
+            pred x = Con (Pred x) (map Var tvs)
+        in  concat [ sigRule k tvs (map snd args) (TyCon tc (map TyVar tvs))
+                   | Constructor k _ args <- cons
+                   ]
+            ++ [ Rule [tcon tc] (pred f)
+               | Constructor k d args <- cons
+               , f <- [k,d] ++ map fst args
+               ]
+
+    FuncDecl (Function f tvs args res body) ->
+        [ Rule (exprGlobalRecords body) (Con (Pred f) (map Var tvs))
+        | enthusiastic_function_inst ] ++
+        sigRule f tvs (map lcl_type args) res ++
+        map (Rule [Con (Pred f) (map Var tvs)]) (exprGlobalRecords body)
+
diff --git a/src/Tip/Pass/NegateConjecture.hs b/src/Tip/Pass/NegateConjecture.hs
deleted file mode 100644
--- a/src/Tip/Pass/NegateConjecture.hs
+++ /dev/null
@@ -1,30 +0,0 @@
-{-# LANGUAGE PatternGuards #-}
-module Tip.Pass.NegateConjecture where
-
-import Tip.Core
-import Tip.Fresh
-import Control.Monad
-import Data.Generics.Geniplate
-
--- | Negates the conjecture: changes assert-not into assert, and
---   introduce skolem types in case the goal is polymorphic.
-negateConjecture :: Name a => Theory a -> Fresh (Theory a)
-negateConjecture thy =
-  foldM negateConjecture1
-    thy { thy_asserts = filter (not . isProve) (thy_asserts thy) }
-    (filter isProve (thy_asserts thy))
-  where
-    isProve (Formula Prove _ form) = True
-    isProve _ = False
-
-    negateConjecture1 thy (Formula Prove tvs form) = do
-      tvs' <- mapM (refreshNamed "sk_") tvs
-      return thy {
-        thy_asserts = Formula Assert [] (neg (makeTyCons (zip tvs tvs') form)):thy_asserts thy,
-        thy_sorts = [ Sort tv 0 | tv <- tvs' ] ++ thy_sorts thy }
-
-    makeTyCons tvs =
-      transformTypeInExpr $ \ty ->
-        case ty of
-          TyVar tv | Just tv' <- lookup tv tvs -> TyCon tv' []
-          _ -> ty
diff --git a/src/Tip/Pass/Pipeline.hs b/src/Tip/Pass/Pipeline.hs
--- a/src/Tip/Pass/Pipeline.hs
+++ b/src/Tip/Pass/Pipeline.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE ScopedTypeVariables #-}
 module Tip.Pass.Pipeline where
 
 import Tip.Lint
@@ -14,16 +15,19 @@
 import Options.Applicative
 
 class Pass p where
-  runPass   :: Name a => p -> Theory a -> Fresh (Theory a)
+  runPass   :: Name a => p -> Theory a -> Fresh [Theory a]
   passName  :: p -> String
   parsePass :: Parser p
 
 unitPass :: Pass p => p -> Mod FlagFields () -> Parser p
 unitPass p mod = flag' () (long (flagify (passName p)) <> mod) *> pure p
 
-runPassLinted :: (Pass p, Name a) => p -> Theory a -> Fresh (Theory a)
-runPassLinted p = runPass p >=> lintM (passName p)
+lintMany :: (Name a,Monad m) => String -> [Theory a] -> m [Theory a]
+lintMany s thys = mapM (lintM s) thys
 
+runPassLinted :: (Pass p,Name a) => p -> Theory a -> Fresh [Theory a]
+runPassLinted p = runPass p >=> lintMany (passName p)
+
 -- | A sum type that supports 'Enum' and 'Bounded'
 data Choice a b = First a | Second b
   deriving (Eq,Ord,Show)
@@ -38,13 +42,17 @@
   runPass   = choice runPass runPass
   parsePass = (First <$> parsePass) <|> (Second <$> parsePass)
 
-runPasses :: (Pass p,Name a) => [p] -> Theory a -> Fresh (Theory a)
-runPasses = go []
+runPasses :: (Pass p,Name a) => [p] -> Theory a -> Fresh [Theory a]
+runPasses ps = continuePasses ps . return
+
+continuePasses :: forall p a . (Pass p,Name a) => [p] -> [Theory a] -> Fresh [Theory a]
+continuePasses = go []
  where
-  go _    [] = return
+  go :: [String] -> [p] -> [Theory a] -> Fresh [Theory a]
+  go _    []     = return
   go past (p:ps) =
-        runPass p
-    >=> lintM (passName p ++ "(and " ++ intercalate "," past ++ ")")
+        (fmap concat . mapM (runPass p))
+    >=> lintMany (passName p ++ (if null past then "" else "(after " ++ intercalate "," past ++ ")"))
     >=> go (passName p:past) ps
 
 parsePasses :: Pass p => Parser [p]
diff --git a/src/Tip/Pass/SelectConjecture.hs b/src/Tip/Pass/SelectConjecture.hs
new file mode 100644
--- /dev/null
+++ b/src/Tip/Pass/SelectConjecture.hs
@@ -0,0 +1,50 @@
+-- Select a particular conjecture from the problem.
+{-# LANGUAGE RecordWildCards #-}
+module Tip.Pass.SelectConjecture where
+
+import Tip.Core
+import Data.List
+
+makeConjecture :: Int -> Theory a -> Theory a
+makeConjecture n thy@Theory{..}
+  | n < 0 || n >= length asserts = error "Assertion number out of range"
+  | otherwise =
+      thy {
+        thy_asserts =
+          proves ++
+          [let u = (asserts !! n) { fm_role = Prove }
+           in u { fm_body = neg (fm_body u) }
+          ] ++
+          take n asserts ++ drop (n+1) asserts }
+  where
+    (asserts, proves) = partition ((== Assert) . fm_role) thy_asserts
+
+selectConjecture :: Int -> Theory a -> Theory a
+selectConjecture n thy@Theory{..}
+  | n < 0 || n >= length proves = error "Conjecture number out of range"
+  | otherwise = thy { thy_asserts = asserts ++ [proves !! n] }
+  where
+    (asserts, proves) = partition ((== Assert) . fm_role) thy_asserts
+
+provedConjecture :: Int -> Theory a -> Theory a
+provedConjecture n thy@Theory{..}
+  | n < 0 || n >= length proves = error "Conjecture number out of range"
+  | otherwise =
+      thy {
+        thy_asserts =
+          asserts ++
+          [(proves !! n) { fm_role = Assert }] ++
+          take n proves ++ drop (n+1) proves }
+  where
+    (asserts, proves) = partition ((== Assert) . fm_role) thy_asserts
+
+deleteConjecture :: Int -> Theory a -> Theory a
+deleteConjecture n thy@Theory{..}
+  | n < 0 || n >= length proves = error "Conjecture number out of range"
+  | otherwise =
+      thy {
+        thy_asserts =
+          asserts ++
+          take n proves ++ drop (n+1) proves }
+  where
+    (asserts, proves) = partition ((== Assert) . fm_role) thy_asserts
diff --git a/src/Tip/Passes.hs b/src/Tip/Passes.hs
--- a/src/Tip/Passes.hs
+++ b/src/Tip/Passes.hs
@@ -8,12 +8,22 @@
   , simplifyTheory, gently, aggressively, SimplifyOpts(..)
   , removeNewtype
   , uncurryTheory
-  , negateConjecture
 
+  -- * Simplifyng conjectures
+  , module Tip.Pass.Conjecture
+  , module Tip.Pass.Concretise
+
+  -- * Changing status of conjectures
+  , makeConjecture
+  , selectConjecture
+  , provedConjecture
+  , deleteConjecture
+
   -- * Boolean builtins
   , ifToBoolOp
   , boolOpToIf
   , theoryBoolOpToIf
+  , removeBuiltinBool
 
   -- * Match expressions
   , addMatch
@@ -33,6 +43,22 @@
   , letLift
   , axiomatizeLambdas
 
+  -- * Function definitions
+  , axiomatizeFuncdefs
+  , axiomatizeFuncdefs2
+
+  -- * Data types
+  , axiomatizeDatadecls
+
+  -- * Monomorphisation
+  , monomorphise
+
+  -- * Induction
+  , induction
+
+  -- * Miscellaneous
+  , dropSuffix
+
   -- * Building pass pipelines
   , StandardPass(..)
   , module Tip.Pass.Pipeline
@@ -46,12 +72,19 @@
 import Tip.Pass.CSEMatch
 import Tip.Pass.Uncurry
 import Tip.Pass.RemoveNewtype
-import Tip.Pass.NegateConjecture
+import Tip.Pass.Conjecture
+import Tip.Pass.Concretise
 import Tip.Pass.EqualFunctions
 import Tip.Pass.Lift
+import Tip.Pass.Monomorphise
 import Tip.Pass.Booleans
 import Tip.Pass.EliminateDeadCode
 import Tip.Pass.FillInCases
+import Tip.Pass.AxiomatizeFuncdefs
+import Tip.Pass.AxiomatizeDatadecls
+import Tip.Pass.SelectConjecture
+import Tip.Pass.DropSuffix
+import Tip.Pass.Induction
 
 import Tip.Fresh
 
@@ -66,8 +99,14 @@
   | RemoveNewtype
   | UncurryTheory
   | NegateConjecture
+  | TypeSkolemConjecture
+  | IntToNat
+  | SortsToNat
+  | SplitConjecture
+  | SkolemiseConjecture
   | IfToBoolOp
   | BoolOpToIf
+  | RemoveBuiltinBool
   | AddMatch
   | CommuteMatch
   | RemoveMatch
@@ -76,32 +115,61 @@
   | LambdaLift
   | LetLift
   | AxiomatizeLambdas
+  | AxiomatizeFuncdefs
+  | AxiomatizeFuncdefs2
+  | AxiomatizeDatadecls
+  | AxiomatizeDatadeclsUEQ
+  | Monomorphise Bool
   | CSEMatch
   | CSEMatchWhy3
   | EliminateDeadCode
- deriving (Eq,Ord,Show,Read,Enum,Bounded)
+  | MakeConjecture Int
+  | SelectConjecture Int
+  | ProvedConjecture Int
+  | DeleteConjecture Int
+  | DropSuffix String
+  | Induction [Int]
+ deriving (Eq,Ord,Show,Read)
 
 instance Pass StandardPass where
   passName = show
   runPass p = case p of
-    SimplifyGently       -> simplifyTheory gently
-    SimplifyAggressively -> simplifyTheory aggressively
-    RemoveNewtype        -> return . removeNewtype
-    UncurryTheory        -> uncurryTheory
-    NegateConjecture     -> negateConjecture
-    IfToBoolOp           -> return . ifToBoolOp
-    BoolOpToIf           -> return . theoryBoolOpToIf
-    AddMatch             -> addMatch
-    CommuteMatch         -> commuteMatch
-    RemoveMatch          -> removeMatch
-    CollapseEqual        -> return . collapseEqual
-    RemoveAliases        -> return . removeAliases
-    LambdaLift           -> lambdaLift
-    LetLift              -> letLift
-    AxiomatizeLambdas    -> axiomatizeLambdas
-    CSEMatch             -> return . cseMatch cseMatchNormal
-    CSEMatchWhy3         -> return . cseMatch cseMatchWhy3
-    EliminateDeadCode    -> return . eliminateDeadCode
+    SimplifyGently       -> single $ simplifyTheory gently
+    SimplifyAggressively -> single $ simplifyTheory aggressively
+    RemoveNewtype        -> single $ return . removeNewtype
+    UncurryTheory        -> single $ uncurryTheory
+    NegateConjecture     -> single $ negateConjecture
+    TypeSkolemConjecture -> single $ typeSkolemConjecture
+    IntToNat             -> single $ intToNat
+    SortsToNat           -> single $ sortsToNat
+    SplitConjecture      -> return . splitConjecture
+    SkolemiseConjecture  -> skolemiseConjecture
+    IfToBoolOp           -> single $ return . ifToBoolOp
+    BoolOpToIf           -> single $ return . theoryBoolOpToIf
+    RemoveBuiltinBool    -> single $ removeBuiltinBool
+    AddMatch             -> single $ addMatch
+    CommuteMatch         -> single $ commuteMatchTheory
+    RemoveMatch          -> single $ removeMatch
+    CollapseEqual        -> single $ return . collapseEqual
+    RemoveAliases        -> single $ return . removeAliases
+    LambdaLift           -> single $ lambdaLift
+    LetLift              -> single $ letLift
+    AxiomatizeLambdas    -> single $ axiomatizeLambdas
+    AxiomatizeFuncdefs   -> single $ return . axiomatizeFuncdefs
+    AxiomatizeFuncdefs2  -> single $ return . axiomatizeFuncdefs2
+    AxiomatizeDatadecls    -> single $ axiomatizeDatadecls False
+    AxiomatizeDatadeclsUEQ -> single $ axiomatizeDatadecls True
+    Monomorphise b       -> single $ monomorphise b
+    CSEMatch             -> single $ return . cseMatch cseMatchNormal
+    CSEMatchWhy3         -> single $ return . cseMatch cseMatchWhy3
+    EliminateDeadCode    -> single $ return . eliminateDeadCode
+    MakeConjecture n     -> single $ return . makeConjecture n
+    SelectConjecture n   -> single $ return . selectConjecture n
+    ProvedConjecture n   -> single $ return . provedConjecture n
+    DeleteConjecture n   -> single $ return . deleteConjecture n
+    DropSuffix cs        -> single $ dropSuffix cs
+    Induction coords     -> induction coords
+    where single m thy = do x <- m thy; return [x]
   parsePass =
     foldr (<|>) empty [
       unitPass SimplifyGently $
@@ -114,10 +182,22 @@
         help "Eliminate unnecessary use of higher-order functions",
       unitPass NegateConjecture $
         help "Transform the goal into a negated conjecture",
+      unitPass TypeSkolemConjecture $
+        help "Skolemise the types in the conjecture",
+      unitPass IntToNat $
+        help "Replace builtin Integer with a a unary nat datatype nat (if only ordering is used)",
+      unitPass SortsToNat $
+        help "Replace abstract sorts with a unary nat datatype.",
+      unitPass SplitConjecture $
+        help "Puts goals in separate theories",
+      unitPass SkolemiseConjecture $
+        help "Skolemise the conjecture",
       unitPass IfToBoolOp $
         help "Replace if-then-else by and/or where appropriate",
       unitPass BoolOpToIf $
         help "Replace and/or by if-then-else",
+      unitPass RemoveBuiltinBool $
+        help "Replace the builtin bool with a datatype",
       unitPass AddMatch $
         help "Transform SMTLIB-style datatype access into pattern matching",
       unitPass CommuteMatch $
@@ -131,12 +211,53 @@
       unitPass LambdaLift $
         help "Lift lambdas to the top level",
       unitPass LetLift $
-        help "Lift let-expressions to the top level.",
+        help "Lift let-expressions to the top level",
       unitPass AxiomatizeLambdas $
         help "Eliminate lambdas by axiomatisation (requires --lambda-lift)",
+      unitPass AxiomatizeFuncdefs $
+        help "Transform function definitions to axioms in the most straightforward way",
+      unitPass AxiomatizeFuncdefs2 $
+        help "Transform function definitions to axioms with left hand side pattern matching instead of match",
+      unitPass AxiomatizeDatadecls $
+        help "Transform data declarations to axioms",
+      unitPass AxiomatizeDatadeclsUEQ $
+        help "Transform data declarations to unit equality axioms (incomplete)",
+      flag' () (long ("monomorphise") <> help "Try to monomorphise the problem") *> pure (Monomorphise False),
+      flag' () (long ("monomorphise-verbose") <> help "Try to monomorphise the problem verbosely") *> pure (Monomorphise True),
       unitPass CSEMatch $
         help "Perform CSE on match scrutinees",
       unitPass CSEMatchWhy3 $
         help "Aggressively perform CSE on match scrutinees (helps Why3's termination checker)",
       unitPass EliminateDeadCode $
-        help "Dead code elimination (doesn't work on dead recursive functions)"]
+        help "Dead code elimination (doesn't work on dead recursive functions)",
+      fmap MakeConjecture $
+        option auto $
+          long "make-conjecture" <>
+          metavar "CONJECTURE-NUMBER" <>
+          help "Make an assert into an assert-not",
+      fmap SelectConjecture $
+        option auto $
+          long "select-conjecture" <>
+          metavar "CONJECTURE-NUMBER" <>
+          help "Choose a particular conjecture from the problem",
+      fmap ProvedConjecture $
+        option auto $
+          long "proved-conjecture" <>
+          metavar "CONJECTURE-NUMBER" <>
+          help "Mark a particular conjecture as proved",
+      fmap DeleteConjecture $
+        option auto $
+          long "delete-conjecture" <>
+          metavar "CONJECTURE-NUMBER" <>
+          help "Delete a particular conjecture",
+      fmap DropSuffix $
+        option str $
+          long "drop-suffix" <>
+          metavar "SUFFIX-CHARS" <>
+          help "Drop the suffix delimited by some character set",
+      fmap Induction $
+        option auto $
+          long "induction" <>
+          metavar "VAR-COORD" <>
+          help "Perform induction on the variable coordinates"
+      ]
diff --git a/src/Tip/Pretty.hs b/src/Tip/Pretty.hs
--- a/src/Tip/Pretty.hs
+++ b/src/Tip/Pretty.hs
@@ -1,5 +1,6 @@
 {-# LANGUAGE RecordWildCards, OverloadedStrings #-}
 {-# LANGUAGE TypeSynonymInstances, FlexibleInstances #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
 module Tip.Pretty where
 
 import Text.PrettyPrint
@@ -30,6 +31,34 @@
 class PrettyVar a where
   -- | The string in a variable
   varStr :: a -> String
+
+instance (PrettyVar a,PrettyVar b) => PrettyVar (Either a b) where
+  varStr (Left x)  = varStr x
+  varStr (Right y) = varStr y
+
+instance (Pretty a,Pretty b) => Pretty (a,b) where
+  pp (x,y) = parens (pp x <+> "," $\ pp y)
+
+instance (Pretty a,Pretty b,Pretty c) => Pretty (a,b,c) where
+  pp (x,y,z) = parens (pp x <+> "," $\ pp y <+> "," $\ pp z)
+
+instance (Pretty a) => Pretty [a] where
+  pp xs = brackets (sep (punctuate "," (map pp xs)))
+
+instance Pretty Int where
+  pp = int
+
+instance Pretty () where
+  pp _ = "()"
+
+newtype PPVar a = PPVar { unPPVar :: a }
+  deriving (Eq,Ord,PrettyVar)
+
+instance PrettyVar a => Pretty (PPVar a) where
+  pp (PPVar x) = ppVar x
+
+instance PrettyVar a => Show (PPVar a) where
+  show (PPVar x) = varStr x
 
 -- | Variable to 'Doc'
 ppVar :: PrettyVar a => a -> Doc
diff --git a/src/Tip/Pretty/Haskell.hs b/src/Tip/Pretty/Haskell.hs
--- a/src/Tip/Pretty/Haskell.hs
+++ b/src/Tip/Pretty/Haskell.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedStrings #-}
-module Tip.Pretty.Haskell (module Tip.Pretty.Haskell, RenameMap) where
+module Tip.Pretty.Haskell (module Tip.Pretty.Haskell, RenameMap, Mode(..)) where
 
 import Tip.Haskell.Repr
 import Tip.Haskell.Translate
@@ -7,15 +7,22 @@
 import qualified Tip.Core as T
 import Tip.Pretty
 import Tip.Fresh
-import Text.PrettyPrint
+import Text.PrettyPrint hiding (Mode)
 
 import Data.Map (Map)
 
-ppTheory :: Name a => T.Theory a -> Doc
-ppTheory = fst . ppTheoryWithRenamings
+ppTheory :: Name a => Mode -> T.Theory a -> Doc
+ppTheory mode = fst . ppTheoryWithRenamings mod_name mode
+  where
+  mod_name =
+    case mode of
+      Feat{}           -> "Main"
+      LazySmallCheck{} -> "Main"
+      Smten{}          -> "Main"
+      _                -> "A"
 
-ppTheoryWithRenamings :: Name a => T.Theory a -> (Doc,RenameMap a)
-ppTheoryWithRenamings = fst_pp . renameDecls . addHeader . addImports . trTheory
+ppTheoryWithRenamings :: Name a => String -> Mode -> T.Theory a -> (Doc,RenameMap a)
+ppTheoryWithRenamings mod_name mode = fst_pp . renameDecls . addHeader mod_name . addImports . trTheory mode
   where fst_pp (x,y) = (pp x,y)
 
 -- * Pretty printing
@@ -108,6 +115,7 @@
     ConPat k [] -> ppHsVar k
     ConPat k ps -> parIf (i >= 1) (ppOper k (map (ppPat 1) ps))
     TupPat ps   -> tuple (map (ppPat 0) ps)
+    IntPat i    -> integer i
     WildPat     -> "_"
 
 instance PrettyHsVar a => Pretty (Decl a) where
@@ -133,6 +141,10 @@
                else "deriving" $\ tuple (map ppHsVar derivs))
         InstDecl ctx head ds ->
           (("instance" $\
+            (pp_ctx ctx $\ pp head)) $\
+               "where") $\ vcat (map (go 1) ds)
+        ClassDecl ctx head ds ->
+          (("class" $\
             (pp_ctx ctx $\ pp head)) $\
                "where") $\ vcat (map (go 1) ds)
         TypeDef lhs rhs -> "type" <+> ppType False 0 lhs <+> "=" $\ pp rhs
diff --git a/src/Tip/Pretty/Isabelle.hs b/src/Tip/Pretty/Isabelle.hs
--- a/src/Tip/Pretty/Isabelle.hs
+++ b/src/Tip/Pretty/Isabelle.hs
@@ -76,7 +76,7 @@
 ppSort :: (PrettyVar a, Ord a) => Sort a -> Doc
 --ppSort (Sort sort 0) = "type" $\ ppVar sort
 ppSort (Sort sort n) =
-  error $ "Can't translate abstract sort " ++ show (ppVar sort) ++ " of arity " ++ show n ++ " to Isabelle"
+  error $ "Can't translate abstract sort " ++ show (ppVar sort) ++ " of arity " ++ show (length n) ++ " to Isabelle"
 
 ppDatas :: (PrettyVar a, Ord a) => [Datatype a] -> Doc
 ppDatas []  = empty
@@ -138,7 +138,7 @@
 
 
 ppFormula :: (PrettyVar a, Ord a) => Formula a -> Int -> Doc
-ppFormula (Formula role _tvs term) i =
+ppFormula (Formula role _ _tvs term) i =
   (ppRole role <+> ("x" <> int i) <+> ":") $\ quote (ppExpr 0 term) $$ "oops"
   -- "by (tactic {* Subgoal.FOCUS_PARAMS (K (Tactic_Data.hard_tac @{context})) @{context} 1 *})" convenience
 
diff --git a/src/Tip/Pretty/SMT.hs b/src/Tip/Pretty/SMT.hs
--- a/src/Tip/Pretty/SMT.hs
+++ b/src/Tip/Pretty/SMT.hs
@@ -5,7 +5,7 @@
 
 import Tip.Pretty
 import Tip.Types
-import Tip.Core (ifView, topsort, neg, exprType, makeGlobal)
+import Tip.Core (ifView, topsort, neg, exprType, makeGlobal, uses, collectLets)
 import Tip.Rename
 import Data.Maybe
 import Data.Char (isAlphaNum)
@@ -44,7 +44,7 @@
       ["(check-sat)"])
 
 ppSort :: PrettyVar a => Sort a -> Doc
-ppSort (Sort sort n) = parExpr "declare-sort" [ppVar sort, int n]
+ppSort (Sort sort tvs) = parExpr "declare-sort" [ppVar sort, int (length tvs)]
 
 ppDatas :: PrettyVar a => [Datatype a] -> Doc
 ppDatas datatypes@(Datatype _ tyvars _:_) =
@@ -67,28 +67,36 @@
 par' [] d = d
 par' xs d = parExprSep "par" [parens (fsep (map ppVar xs)), d]
 
+par'' :: (PrettyVar a) => [a] -> Doc -> Doc
+par'' xs d = par' xs (parens d)
+
 ppUninterp :: PrettyVar a => Signature a -> Doc
 ppUninterp (Signature f (PolyType tyvars arg_types result_type)) =
-  apply "declare-fun"
-    (par' tyvars
-      (apply (ppVar f)
-        (sep [parens (fsep (map ppType arg_types)), ppType result_type])))
+  apply (if null arg_types then "declare-const" else "declare-fun")
+    (par tyvars
+      (ppVar f $\
+        (sep [ if null arg_types then empty else parens (fsep (map ppType arg_types))
+             , ppType result_type
+             ])))
 
 ppFuncs :: (Ord a, PrettyVar a) => [Function a] -> Doc
+ppFuncs [f] =
+      expr (if func_name f `elem` uses f
+              then "define-fun-rec"
+              else "define-fun")
+           [ppFuncSig par f (ppExpr (func_body f))]
 ppFuncs fs = expr "define-funs-rec"
-  [ parens (vcat (map ppFuncSig fs))
+  [ parens (vcat [ppFuncSig par'' f empty | f <- fs])
   , parens (vcat (map (ppExpr . func_body) fs))
   ]
 
-ppFuncSig :: PrettyVar a => Function a -> Doc
-ppFuncSig (Function f tyvars args res_ty body) =
-  (par' tyvars
-    (parens
-      (ppVar f $\ fsep [ppLocals args, ppType res_ty])))
+ppFuncSig :: PrettyVar a => ([a] -> Doc -> Doc) -> Function a -> Doc -> Doc
+ppFuncSig parv (Function f tyvars args res_ty body) content =
+  parv tyvars (ppVar f $\ fsep [ppLocals args, ppType res_ty, content])
 
 ppFormula :: (Ord a, PrettyVar a) => Formula a -> Doc
-ppFormula (Formula Prove tvs term)  = apply "assert-not" (par' tvs (ppExpr term))
-ppFormula (Formula Assert tvs term) = apply "assert"     (par' tvs (ppExpr term))
+ppFormula (Formula Prove _ tvs term)  = apply "assert-not" (par' tvs (ppExpr term))
+ppFormula (Formula Assert _ tvs term) = apply "assert"     (par' tvs (ppExpr term))
 
 ppExpr :: (Ord a, PrettyVar a) => Expr a -> Doc
 ppExpr e | Just (c,t,f) <- ifView e = parExpr "ite" (map ppExpr [c,t,f])
@@ -99,7 +107,12 @@
 ppExpr (Lcl l)      = ppVar (lcl_name l)
 ppExpr (Lam ls e)   = parExprSep "lambda" [ppLocals ls,ppExpr e]
 ppExpr (Match e as) = "(match" $\ ppExpr e $\ (vcat (map ppCase as) <> ")")
-ppExpr (Let x b e)  = parExprSep "let" [parens (parens (ppLocal x $\ ppExpr b)), ppExpr e]
+ppExpr lets@Let{} =
+  parExprSep "let"
+    [ parens (vcat (map parens [ppVar (lcl_name x) $\ ppExpr b | (x,b) <- bs]))
+    , ppExpr e
+    ]
+  where (bs,e) = collectLets lets
 ppExpr (Quant _ q ls e) = parExprSep (ppQuant q) [ppLocals ls, ppExpr e]
 
 ppLocals :: PrettyVar a => [Local a] -> Doc
@@ -156,11 +169,21 @@
 ppType (TyVar x)     = ppVar x
 ppType (TyCon tc ts) = expr (ppVar tc) (map ppType ts)
 ppType (ts :=>: r)   = parExpr "=>" (map ppType (ts ++ [r]))
-ppType (BuiltinType Integer) = "Int"
-ppType (BuiltinType Boolean) = "Bool"
+ppType (BuiltinType bu) = ppBuiltinType bu
 
+ppBuiltinType :: BuiltinType -> Doc
+ppBuiltinType Integer = "Int"
+ppBuiltinType Boolean = "Bool"
+
 -- Temporary use SMTLIB as the pretty printer:
 
+instance (Ord a,PrettyVar a) => Pretty (Decl a) where
+  pp (DataDecl d)   = ppData d
+  pp (SortDecl d)   = ppSort d
+  pp (SigDecl d)    = ppUninterp d
+  pp (FuncDecl d)   = ppFuncs [d]
+  pp (AssertDecl d) = ppFormula d
+
 instance (Ord a,PrettyVar a) => Pretty (Theory a) where
   pp = ppTheory
 
@@ -188,6 +211,9 @@
 instance PrettyVar a => Pretty (Datatype a) where
   pp = ppDatas . return
 
+instance PrettyVar a => Pretty (Sort a) where
+  pp = ppSort
+
 instance PrettyVar a => Pretty (Signature a) where
   pp = ppUninterp
 
@@ -242,11 +268,32 @@
     , "abs", "min", "max", "const"
     , "mod", "div"
     , "=", "=>", "+", "-", "*", ">", ">=", "<", "<=", "@", "!"
+    , "as"
+    , "declare-datatypes"
+    , "declare-sort"
+    , "declare-const"
+    , "declare-const"
+    , "declare-fun"
+    , "declare-fun"
+    , "define-fun"
+    , "define-fun"
+    , "define-fun-rec"
+    , "define-fun-rec"
+    , "define-funs-rec"
+    , "check-sat"
+    -- TIP:
+    , "par"
+    , "case"
+    , "match"
+    , "assert"
+    , "assert-not"
     -- Z3:
     , "Bool", "Int", "Array", "List", "insert"
     , "isZero"
     , "map"
+    , "select"
+    , "subset", "union", "intersect"
     -- CVC4:
-    , "as", "concat"
+    , "concat", "member"
     ]
 
diff --git a/src/Tip/Pretty/TFF.hs b/src/Tip/Pretty/TFF.hs
new file mode 100644
--- /dev/null
+++ b/src/Tip/Pretty/TFF.hs
@@ -0,0 +1,141 @@
+{-# LANGUAGE RecordWildCards, OverloadedStrings, PatternGuards, ViewPatterns #-}
+module Tip.Pretty.TFF where
+
+import Text.PrettyPrint
+
+import Tip.Pretty
+import Tip.Pretty.Why3(Why3Var(..))
+import Tip.Types
+import Tip.Core hiding (apply)
+import Tip.Rename
+import Data.Maybe
+import Data.Char (isAlphaNum)
+
+apply :: Doc -> [Doc] -> Doc
+apply s [] = s
+apply s xs = cat [s <> "(", nest 2 (fsep (punctuate (text ",") xs) <> ")")]
+
+clause :: String -> String -> Doc -> Doc
+clause name kind body =
+  hang ("tff(" <> text name <> ", " <> text kind <> ",") 2
+       (body <> ").")
+
+validTFFChar :: Char -> String
+validTFFChar x
+  | isAlphaNum x || x == '_' = [x]
+  | otherwise                = ""
+
+ppTheory :: (Ord a,PrettyVar a) => Theory a -> Doc
+ppTheory (renameAvoiding [] validTFFChar . tffvarify -> Theory{..})
+  = vcat
+     (map ppSort thy_sorts ++
+      map ppUninterp thy_sigs ++
+      map ppFormula thy_asserts)
+
+ppSort :: PrettyVar a => Sort a -> Doc
+ppSort (Sort sort []) =
+  clause "type" "type" $
+    ppVar sort <+> ":" <+> "$tType"
+
+ppUninterp :: PrettyVar a => Signature a -> Doc
+ppUninterp (Signature f (PolyType [] arg_types result_type)) =
+  clause "func" "type" $
+    ppVar f <+> ":" <+>
+    case arg_types of
+      [] -> ppType result_type
+      _  -> sep (punctuate " *" (map ppType arg_types)) <+> ">" <+> ppType result_type
+
+ppFormula :: (Ord a, PrettyVar a) => Formula a -> Doc
+ppFormula (Formula Prove _ [] term)  =
+  clause "goal" "conjecture" (ppExpr 0 (tffify term))
+ppFormula (Formula Assert _ [] term) =
+  clause "axiom" "axiom" (ppExpr 0 (tffify term))
+
+tffify :: Ord a => Expr a -> Expr a
+tffify =
+  transformExpr $ \e ->
+    case e of
+      Builtin Equal :@: ts ->
+        ands (zipWith (===) ts (tail ts))
+      Builtin And :@: es -> ands es
+      Builtin Or  :@: es -> ors  es
+      _ -> e
+
+tffvarify :: Ord a => Theory a -> Theory (Why3Var a)
+tffvarify = uppercase . fmap (Why3Var False)
+  where
+    uppercase =
+      transformExprIn $ \e ->
+        case e of
+          Lcl lcl -> Lcl (make_upper lcl)
+          Quant i q ls body -> Quant i q (map make_upper ls) body
+          _ -> e
+    make_upper (Local (Why3Var _ lcl_name) lcl_type) =
+      Local (Why3Var True lcl_name) lcl_type
+
+ppExpr :: (Ord a, PrettyVar a) => Int -> Expr a -> Doc
+ppExpr _ (Builtin Equal :@: [t, u]) =
+  hang (ppExpr 2 t <+> "=") 2 (ppExpr 2 u)
+ppExpr p (Builtin Distinct :@: [t, u]) =
+  hang (ppExpr 2 t <+> "!=") 2 (ppExpr 2 u)
+ppExpr p (Builtin And :@: ts) =
+  parIf (p > 0) $
+    let u:us = punctuate " &" (map (ppExpr 1) ts) in
+    sep (u:map (nest 2) us)
+ppExpr p (Builtin Or :@: ts) =
+  parIf (p > 0) $
+    let u:us = punctuate " |" (map (ppExpr 1) ts) in
+    sep (u:map (nest 2) us)
+ppExpr p (Builtin Implies :@: [t, u]) =
+  parIf (p > 0) $
+    hang (ppExpr 1 t <+> "=>") 2 (ppExpr 1 u)
+ppExpr p (Builtin Not :@: [t]) =
+  parIf (p > 1) $
+    "~" <> ppExpr 1 t
+ppExpr _ (hd :@: ts) =
+  apply (ppHead hd) (map (ppExpr 0) ts)
+ppExpr _ (Lcl l) = ppVar (lcl_name l)
+ppExpr _ (Quant _ q ls e) =
+  hang
+    (ppQuant q <> brackets (fsep (punctuate "," (map ppLocal ls))) <> ":")
+    2
+    (ppExpr 1 e)
+
+ppLocal :: PrettyVar a => Local a -> Doc
+ppLocal Local{..} = ppVar lcl_name <> ":" <> ppType lcl_type
+
+ppQuant :: Quant -> Doc
+ppQuant Forall = "!"
+ppQuant Exists = "?"
+
+ppHead :: PrettyVar a => Head a -> Doc
+ppHead (Builtin b) = ppBuiltin b
+ppHead (Gbl Global{..}) = ppVar gbl_name
+
+ppBuiltin :: Builtin -> Doc
+ppBuiltin (Lit lit) = ppLit lit
+ppBuiltin Distinct  = "$distinct"
+ppBuiltin IntAdd    = "$plus_int"
+ppBuiltin IntSub    = "$minus_int"
+ppBuiltin IntMul    = "$times_int"
+ppBuiltin IntDiv    = "$div_int"
+ppBuiltin IntMod    = "$mod_int"
+ppBuiltin IntGt     = "$greater_int"
+ppBuiltin IntGe     = "$greatereq_int"
+ppBuiltin IntLt     = "$less_int"
+ppBuiltin IntLe     = "$lesseq_int"
+
+ppLit :: Lit -> Doc
+ppLit (Int i)      = integer i
+ppLit (Bool True)  = "$true"
+ppLit (Bool False) = "$false"
+ppLit (String s)   = text (show s)
+
+ppType :: PrettyVar a => Type a -> Doc
+ppType (TyVar x)        = ppVar x
+ppType (TyCon tc ts)    = apply (ppVar tc) (map ppType ts)
+ppType (BuiltinType bu) = ppBuiltinType bu
+
+ppBuiltinType :: BuiltinType -> Doc
+ppBuiltinType Integer = "$int"
+ppBuiltinType Boolean = "$o"
diff --git a/src/Tip/Pretty/Why3.hs b/src/Tip/Pretty/Why3.hs
--- a/src/Tip/Pretty/Why3.hs
+++ b/src/Tip/Pretty/Why3.hs
@@ -72,9 +72,9 @@
       zipWith ppFormula thy_asserts [0..])
 
 ppSort :: (PrettyVar a, Ord a) => Sort a -> Doc
-ppSort (Sort sort 0) = "type" $\ ppVar sort
+ppSort (Sort sort []) = "type" $\ ppVar sort
 ppSort (Sort sort n) =
-  error $ "Can't translate abstract sort " ++ show (ppVar sort) ++ " of arity " ++ show n ++ " to Why3"
+  error $ "Can't translate abstract sort " ++ show (ppVar sort) ++ " of arity " ++ show (length n) ++ " to Why3"
 
 ppDatas :: (PrettyVar a, Ord a) => [Datatype a] -> Doc
 ppDatas (d:ds) = vcat (ppData "type" d:map (ppData "with") ds)
@@ -118,7 +118,7 @@
 ppDeepPattern (DeepLitPat lit) = ppLit lit
 
 ppFormula :: (PrettyVar a, Ord a) => Formula a -> Int -> Doc
-ppFormula (Formula role _tvs term) i =
+ppFormula (Formula role _ _tvs term) i =
   (ppRole role <+> ("x" <> int i) <+> ":") $\ (ppExpr 0 term)
 
 ppRole :: Role -> Doc
diff --git a/src/Tip/Scope.hs b/src/Tip/Scope.hs
--- a/src/Tip/Scope.hs
+++ b/src/Tip/Scope.hs
@@ -33,7 +33,7 @@
 data TypeInfo a =
     TyVarInfo
   | DatatypeInfo (Datatype a)
-  | SortInfo Int
+  | SortInfo (Sort a)
   deriving (Eq, Show)
 
 data GlobalInfo a =
@@ -173,10 +173,10 @@
     types = M.insert ty TyVarInfo (types s) }
 
 newSort :: (Monad m, Ord a, PrettyVar a) => Sort a -> ScopeT a m ()
-newSort Sort{..} = do
+newSort sort@Sort{..} = do
   newName sort_name
   modify $ \s -> s {
-    types = M.insert sort_name (SortInfo sort_arity) (types s) }
+    types = M.insert sort_name (SortInfo sort) (types s) }
 
 newDatatype :: (Monad m, Ord a, PrettyVar a) => Datatype a -> ScopeT a m ()
 newDatatype dt@Datatype{..} = do
diff --git a/src/Tip/Simplify.hs b/src/Tip/Simplify.hs
--- a/src/Tip/Simplify.hs
+++ b/src/Tip/Simplify.hs
@@ -18,19 +18,32 @@
   SimplifyOpts {
     touch_lets    :: Bool,
     -- ^ Allow simplifications on lets
-    should_inline :: Maybe (Scope a) -> Expr a -> Bool,
+    remove_variable_scrutinee_in_branches :: Bool,
+    -- ^ transform
+    -- @(match x (case (K y) (e x y)))@
+    -- to
+    -- @(match x (case (K y) (e (K y) y))@
+    -- This is useful for triggering other known-case simplifications,
+    -- and is therefore on by default.
+    should_inline :: Occurrences -> Maybe (Scope a) -> Expr a -> Bool,
     -- ^ Inlining predicate
     inline_match  :: Bool
     -- ^ Allow function inlining to introduce match
   }
 
+newtype Occurrences = Occurrences Int
+
+-- | Gentle, but without inlining
+gentlyNoInline :: SimplifyOpts a
+gentlyNoInline = gently { should_inline = \ _ _ _ -> False }
+
 -- | Gentle options: if there is risk for code duplication, only inline atomic expressions
 gently :: SimplifyOpts a
-gently       = SimplifyOpts True (const atomic) True
+gently       = SimplifyOpts True True (\ (Occurrences occ) _ e -> occ <= 1 || atomic e) True
 
 -- | Aggressive options: inline everything that might plausibly lead to simplification
 aggressively :: Name a => SimplifyOpts a
-aggressively = SimplifyOpts True useful True
+aggressively = SimplifyOpts True True (\ (Occurrences occ) mscp e -> occ <= 1 || useful mscp e) True
   where
     useful _ Lam{} = True
     useful mscp (f :@: _) = isConstructor mscp f
@@ -70,6 +83,25 @@
              (e2, Any simplified) <- lift (runWriterT (aux e1))
              if simplified then hooray $ return e2 else return e0
 
+        Match _ [Case Default body] -> hooray $ return body
+
+        Match e (Case Default (Match e' cases'):cases) | e == e' ->
+          hooray $ aux $
+          Match e (filter (not . dead . case_pat) cases' ++ cases)
+          where
+            dead (LitPat l)   = LitPat l `elem` map case_pat cases
+            dead (ConPat{..}) =
+              gbl_name pat_con `elem`
+                [ gbl_name pat_con | ConPat{..} <- map case_pat cases ]
+            dead Default = False
+
+        Match e (Case Default def:cases)
+          | TyCon ty args <- exprType e,
+            Just (d, c@Constructor{..}) <- missingCase mscp ty cases -> do
+              let gbl = constructor d c args
+              pat <- lift (fmap (ConPat gbl) (freshArgs gbl))
+              aux (Match e (Case pat def:cases))
+
         Match e [Case _ e1,Case (LitPat (Bool b)) e2]
           | e1 == bool (not b) && e2 == bool b -> hooray $ return e
           | e1 == bool b && e2 == bool (not b) -> hooray $ return (neg e)
@@ -77,24 +109,10 @@
         Match (Let x e body) alts | touch_lets ->
           aux (Let x e (Match body alts))
 
-        Match _ [Case Default body] -> hooray $ return body
-
-        Match (hd :@: args) alts | isConstructor mscp hd ->
-          -- We use reverse because the default case comes first and we want it last
-          case filter (matches hd . case_pat) (reverse alts) of
-            [] -> return e0
-            Case (ConPat _ lcls) body:_ ->
-              hooray $
-              aux $
-                foldr (uncurry Let) body (zip lcls args)
-            Case _ body:_ -> hooray $ return body
-          where
-            matches (Gbl gbl) (ConPat gbl' _) = gbl == gbl'
-            matches (Builtin (Lit lit)) (LitPat lit') = lit == lit'
-            matches _ Default = True
-            matches _ _ = False
+        Match e alts
+          | Just e' <- tryMatch mscp e alts -> hooray $ aux e'
 
-        Match (Lcl x) alts ->
+        Match (Lcl x) alts | remove_variable_scrutinee_in_branches ->
           Match (Lcl x) <$> sequence
           [ Case pat <$> case pat of
               ConPat g bs -> subst ((Gbl g :@: map Lcl bs) /// x) rhs
@@ -117,11 +135,30 @@
 
         Builtin Equal :@: [litView -> Just s,litView -> Just t] -> hooray $ return (bool (s == t))
 
+        -- cons(x,y) == nil ~> false
+        -- cons(x,y) /= nil ~> true
+        --
+        -- cons(x1,y1) == cons(x2,y2) ~> x1==x2 & y1==y2
+        -- cons(x1,y1) /= cons(x2,y2) ~> x1/=x2 | y1/=y2
+        Builtin eq_op :@: [Gbl k :@: kargs,Gbl j :@: jargs]
+          | Just scp <- mscp
+          , Just (_,Constructor kk _ _) <- lookupConstructor (gbl_name k) scp
+          , Just (_,Constructor jj _ _) <- lookupConstructor (gbl_name j) scp
+          , Just res <- case (eq_op, kk == jj) of
+                          (Equal   ,False) -> Just falseExpr
+                          (Distinct,False) -> Just trueExpr
+                          (Equal,   True)  -> Just (ands (zipWith (===) kargs jargs))
+                          (Distinct,True)  -> Just (ors  (zipWith (=/=) kargs jargs))
+                          _                -> Nothing
+          -> hooray $ aux res
+
         Builtin Distinct :@: [litView -> Just s,litView -> Just t] -> hooray $ return (bool (s /= t))
 
         Builtin Not     :@: [e]      -> share (neg e)
-        Builtin And     :@: [e1, e2] -> share (e1 /\ e2)
-        Builtin Or      :@: [e1, e2] -> share (e1 \/ e2)
+        Builtin And     :@: [e1, e2] | e1 == e2  -> return e1
+                                     | otherwise -> share (e1 /\ e2)
+        Builtin Or      :@: [e1, e2] | e1 == e2  -> return e1
+                                     | otherwise -> share (e1 \/ e2)
         Builtin Implies :@: [e1, e2] -> share (e1 ==> e2)
 
         Builtin Equal :@: [e1, e2] ->
@@ -152,7 +189,7 @@
 
         _ -> return e0
 
-    inlineable body var val = should_inline mscp val || occurrences var body <= 1
+    inlineable body var val = should_inline (Occurrences (occurrences var body)) mscp val
     mscp = fmap scope mthy
 
     isRecursiveGroup [fun] = defines fun `elem` uses fun
@@ -182,3 +219,28 @@
   scp <- mscp
   lookupConstructor (gbl_name gbl) scp
 isConstructor _ _ = False
+
+missingCase :: Name a => Maybe (Scope a) -> a -> [Case a] -> Maybe (Datatype a, Constructor a)
+missingCase mscp tc cases = do
+  scp <- mscp
+  dt@Datatype{..} <- lookupDatatype tc scp
+  let matched Constructor{..} =
+        con_name `elem` [ gbl_name pat_con | ConPat{..} <- map case_pat cases ]
+  case filter (not . matched) data_cons of
+    [con] -> return (dt, con)
+    _     -> Nothing
+
+tryMatch :: Name a => Maybe (Scope a) -> Expr a -> [Case a] -> Maybe (Expr a)
+tryMatch mscp (hd :@: args) alts | isConstructor mscp hd =
+  -- We use reverse because the default case comes first and we want it last
+  case filter (matches hd . case_pat) (reverse alts) of
+    [] -> Nothing
+    Case (ConPat _ lcls) body:_ ->
+      Just $ foldr (uncurry Let) body (zip lcls args)
+    Case _ body:_ -> Just body
+  where
+    matches (Gbl gbl) (ConPat gbl' _) = gbl == gbl'
+    matches (Builtin (Lit lit)) (LitPat lit') = lit == lit'
+    matches _ Default = True
+    matches _ _ = False
+tryMatch _ _ _ = Nothing
diff --git a/src/Tip/Types.hs b/src/Tip/Types.hs
--- a/src/Tip/Types.hs
+++ b/src/Tip/Types.hs
@@ -1,4 +1,5 @@
--- | The abstract syntax
+-- | the abstract syntax
+{-# LANGUAGE RecordWildCards #-}
 {-# LANGUAGE DeriveFunctor, DeriveFoldable, DeriveTraversable, PatternGuards #-}
 {-# LANGUAGE ExplicitForAll, FlexibleContexts, FlexibleInstances, TemplateHaskell, MultiParamTypeClasses #-}
 module Tip.Types where
@@ -26,22 +27,25 @@
 infix 5 :@:
 
 data Expr a
-  -- maybe move Lit from Builtin under Head to straight here
   = Head a :@: [Expr a]
+  -- ^ Function application: always perfectly saturated.
+  --   Lambdas and locals are applied with 'At' as head.
   | Lcl (Local a)
   | Lam [Local a] (Expr a)
   -- Merge with Quant?
   | Match (Expr a) [Case a]
   -- ^ The default case comes first if there is one
   | Let (Local a) (Expr a) (Expr a)
-  -- Allow a list of bound variables, like in SMT-LIB?
+  -- ^ @Let (Local x t) b e@ = @(let ((l x)) b e)@
+  -- Unlike SMT-LIB, this does not accept a list of bound
+  -- variable-/expression-pairs. Fix?
   | Quant QuantInfo Quant [Local a] (Expr a)
   deriving (Eq,Ord,Show,Functor,Foldable,Traversable)
 
 data Quant = Forall | Exists
   deriving (Eq,Ord,Show)
 
-data QuantInfo = NoInfo
+data QuantInfo = NoInfo | QuantIH Int
   deriving (Eq,Ord,Show)
 
 data Case a = Case { case_pat :: Pattern a, case_rhs :: Expr a }
@@ -133,7 +137,7 @@
 -- | Uninterpreted sort
 data Sort a = Sort
   { sort_name :: a
-  , sort_arity :: Int }
+  , sort_tvs  :: [a] }
   deriving (Eq,Ord,Show,Functor,Foldable,Traversable)
 
 -- | Data definition
@@ -146,8 +150,12 @@
 
 data Constructor a = Constructor
   { con_name    :: a
+  -- ^ Constructor name (e.g. @Cons@)
   , con_discrim :: a
+  -- ^ Discriminator name (e.g. @is-Cons@)
   , con_args    :: [(a,Type a)]
+  -- ^ Argument types names of their projectors
+  --   (e.g. [(@head@,a),(@tail@,List a)])
   }
   deriving (Eq,Ord,Show,Functor,Foldable,Traversable)
 
@@ -172,15 +180,64 @@
 
 data Formula a = Formula
   { fm_role :: Role
+  , fm_info :: Info a
   , fm_tvs  :: [a]
   -- ^ top-level quantified type variables
   , fm_body :: Expr a
   }
   deriving (Eq,Ord,Show,Functor,Foldable,Traversable)
 
+data Info a
+  = Definition a
+  | IH Int
+  | Lemma Int
+  | Projection a
+  | DataDomain a
+  | DataProjection a
+  | DataDistinct a
+  | Defunction a
+  | UserAsserted
+  | Unknown
+  deriving (Eq,Ord,Show,Functor,Foldable,Traversable)
+
 data Role = Assert | Prove
   deriving (Eq,Ord,Show)
 
+-- * Other views of theories
+
+-- | The different kinds of declarations in a 'Theory'.
+data Decl a
+    = DataDecl (Datatype a)
+    | SortDecl (Sort a)
+    | SigDecl (Signature a)
+    | FuncDecl (Function a)
+    | AssertDecl (Formula a) -- rename to FormulaDecl?
+  deriving (Eq,Ord,Show,Functor,Foldable,Traversable)
+
+-- | 'Decl'arations in a 'Theory'
+theoryDecls :: Theory a -> [Decl a]
+theoryDecls (Theory{..}) =
+    map DataDecl thy_datatypes ++
+    map SortDecl thy_sorts ++
+    map SigDecl thy_sigs ++
+    map FuncDecl thy_funcs ++
+    map AssertDecl thy_asserts
+
+-- | Assemble a 'Theory' from some 'Decl'arations
+declsToTheory :: [Decl a] -> Theory a
+declsToTheory ds = Theory
+    { thy_datatypes = [ d | DataDecl d   <- ds ]
+    , thy_sorts     = [ d | SortDecl d   <- ds ]
+    , thy_sigs      = [ d | SigDecl d    <- ds ]
+    , thy_funcs     = [ d | FuncDecl d   <- ds ]
+    , thy_asserts   = [ d | AssertDecl d <- ds ]
+    }
+
+declsPass :: ([Decl a] -> [Decl b]) -> Theory a -> Theory b
+declsPass k = declsToTheory . k . theoryDecls
+
+-- Instances
+
 instanceUniverseBi [t| forall a . (Expr a,Expr a) |]
 instanceUniverseBi [t| forall a . (Function a,Expr a) |]
 instanceUniverseBi [t| forall a . (Function a,Global a) |]
@@ -194,6 +251,7 @@
 instanceUniverseBi [t| forall a . (Type a,Type a) |]
 instanceUniverseBi [t| forall a . (Theory a,Constructor a) |]
 instanceUniverseBi [t| forall a . (Theory a,Global a) |]
+instanceUniverseBi [t| forall a . (Theory a,Local a) |]
 instanceUniverseBi [t| forall a . (Theory a,Builtin) |]
 instanceTransformBi [t| forall a . (Expr a,Expr a) |]
 instanceTransformBi [t| forall a . (a,Expr a) |]
@@ -206,6 +264,8 @@
 instanceTransformBi [t| forall a . (Pattern a,Expr a) |]
 instanceTransformBi [t| forall a . (Pattern a,Theory a) |]
 instanceTransformBi [t| forall a . (Type a,Theory a) |]
+instanceTransformBi [t| forall a . (Global a,Theory a) |]
+instanceTransformBi [t| forall a . (Type a,Decl a) |]
 instanceTransformBi [t| forall a . (Type a,Expr a) |]
 instanceTransformBi [t| forall a . (Type a,Type a) |]
 instance Monad m => TransformBiM m (Expr a) (Expr a) where
@@ -229,6 +289,9 @@
 instance Monad m => TransformBiM m (Type a) (Type a) where
   {-# INLINE transformBiM #-}
   transformBiM = $(genTransformBiM' [t| forall m a . (Type a -> m (Type a)) -> Type a -> m (Type a) |])
+instance Monad m => TransformBiM m (Type a) (Theory a) where
+  {-# INLINE transformBiM #-}
+  transformBiM = $(genTransformBiM' [t| forall m a . (Type a -> m (Type a)) -> Theory a -> m (Theory a) |])
 instance Monad m => TransformBiM m (Function a) (Theory a) where
   {-# INLINE transformBiM #-}
   transformBiM = $(genTransformBiM' [t| forall m a . (Function a -> m (Function a)) -> Theory a -> m (Theory a) |])
@@ -252,5 +315,8 @@
 transformTypeInExpr =
   $(genTransformBiT' [[t|PolyType|]] [t|forall a. (Type a -> Type a) -> Expr a -> Expr a|])
 
+transformTypeInDecl :: (Type a -> Type a) -> Decl a -> Decl a
+transformTypeInDecl =
+  $(genTransformBiT' [[t|PolyType|]] [t|forall a. (Type a -> Type a) -> Decl a -> Decl a|])
 
 
diff --git a/src/Tip/Utils.hs b/src/Tip/Utils.hs
--- a/src/Tip/Utils.hs
+++ b/src/Tip/Utils.hs
@@ -1,29 +1,74 @@
 {-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE DeriveFunctor #-}
 -- | Handy utilities
 module Tip.Utils where
 
 import Data.List
-import Data.Graph
+import Data.Maybe
+import Data.Graph hiding (components)
 import Data.List.Split
 import Data.Char
 import Data.Foldable (Foldable)
 import qualified Data.Foldable as F
+import Data.Function (on)
 import Data.Ord
+import Data.Function
 
 -- | Sort and remove duplicates
 usort :: Ord a => [a] -> [a]
-usort = map head . group . sort
+usort = usortOn id
 
--- | Sort things in topologically in strongly connected components
-sortThings :: Ord name => (thing -> name) -> (thing -> [name]) -> [thing] -> [[thing]]
-sortThings name refers things =
-    map flattenSCC $ stronglyConnComp
+-- | Sort and remove duplicates wrt some custom ordering
+usortOn :: Ord b => (a -> b) -> [a] -> [a]
+usortOn f = map head . groupBy ((==) `on` f) . sortBy (comparing f)
+
+-- | Union on a predicate
+unionOn :: Ord b => (a -> b) -> [a] -> [a] -> [a]
+unionOn k = unionBy ((==) `on` k)
+
+-- | Returns the duplicates in a list
+duplicates :: Ord a => [a] -> [a]
+duplicates xs = usort [ x | x <- xs, count x > 1 ]
+  where count x = length (filter (== x) xs)
+
+data Component a = Rec [a] | NonRec a
+  deriving (Eq,Ord,Show,Functor)
+
+flattenComponent :: Component a -> [a]
+flattenComponent (Rec xs) = xs
+flattenComponent (NonRec x) = [x]
+
+-- | Strongly connected components
+components :: Ord name => (thing -> name) -> (thing -> [name]) -> [thing] -> [Component thing]
+components name refers things =
+    [ case comp of
+        [(thing,n,refs)]
+          | n `notElem` refs -> NonRec thing
+        _                    -> Rec [ thing | (thing,_,_) <- comp ]
+    | comp <- map flattenSCC $ stronglyConnCompR
         [ (thing,name thing,filter (`elem` names) (refers thing))
         | thing <- things
         ]
+    ]
   where
-    names = map name things
+  names = map name things
 
+lookupComponent :: Eq thing => thing -> [Component thing] -> Maybe (Component thing)
+lookupComponent x = listToMaybe . mapMaybe h
+  where
+  h c = case c of NonRec y | x == y      -> Just c
+                  Rec ys   | x `elem` ys -> Just c
+                  _ -> Nothing
+
+-- | Sort things in topologically in strongly connected components
+sortThings :: Ord name => (thing -> name) -> (thing -> [name]) -> [thing] -> [[thing]]
+sortThings name refers things = map flattenComponent (components name refers things)
+
+-- | Recursive
+recursive :: Ord name => (thing -> name) -> (thing -> [name]) -> [thing] -> [name]
+recursive name refers things =
+  [ name x | Rec xs <- components name refers things, x <- xs ]
+
 -- | Makes a nice flag from a constructor string
 --
 -- > > flagify "PrintPolyFOL"
@@ -38,8 +83,16 @@
 flagifyShow = flagify . show
 
 -- | Calculates the maximum value of a foldable value.
---
--- Useful to find the highest unique in a structure
 maximumOn :: forall f a b . (F.Foldable f,Ord b) => (a -> b) -> f a -> b
 maximumOn f = f . F.maximumBy (comparing f)
+
+-- | Pair up a list with its previous elements
+--
+-- > withPrevious "abc" = [('a',""),('b',"a"),('c',"ab")]
+withPrevious :: [a] -> [(a,[a])]
+withPrevious xs = zip xs (inits xs)
+
+-- | Cursored traversal with previous and next elements of a list
+cursor :: [a] -> [([a],a,[a])]
+cursor xs = [ let (l,x:r) = splitAt i xs in (l,x,r) | i <- [0..length xs-1] ]
 
diff --git a/src/Tip/Utils/Rename.hs b/src/Tip/Utils/Rename.hs
--- a/src/Tip/Utils/Rename.hs
+++ b/src/Tip/Utils/Rename.hs
@@ -29,12 +29,20 @@
     extra x = fromMaybe [] (find (x `elem`) families)
 
     families =
+      [ [ m ++ suff | m <- grp ]
+      | grp <- base
+      , suff <- ["","s","ss"]
+      ]
+
+    base =
        [ ["a","b","c"]
        , ["f","g","h"]
-       , ["p","q"]
+       , ["i","j","k"]
        , ["n","m","o"]
+       , ["p","q","r"]
+       , ["s","t"]
+       , ["u","v","w"]
        , ["x","y","z"]
-       , ["xs","ys","zs"]
        ]
 
 disambig2 :: (a -> String) -> (b -> String) -> Suggestor (Either a b) String
diff --git a/src/Tip/Utils/Specialiser.hs b/src/Tip/Utils/Specialiser.hs
new file mode 100644
--- /dev/null
+++ b/src/Tip/Utils/Specialiser.hs
@@ -0,0 +1,209 @@
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE ViewPatterns #-}
+{-# LANGUAGE DeriveFunctor, DeriveFoldable, DeriveTraversable #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE CPP #-}
+module Tip.Utils.Specialiser
+    (specialise, Rule(..), Expr(..),
+     Void, absurd,
+     Closed, subtermRules, subterms, Subst, Inst) where
+
+#include "errors.h"
+import Tip.Fresh
+import Tip.Utils
+import Tip.Pretty
+
+import Control.Applicative
+import Control.Monad
+import Data.Maybe
+import Data.Foldable (Foldable)
+import Data.Traversable (Traversable)
+
+import Data.Set (Set)
+import qualified Data.Set as S
+
+import Data.Generics.Genifunctors
+
+import Text.PrettyPrint
+
+data Expr c a = Var a | Con c [Expr c a]
+  deriving (Eq,Ord,Show,Functor,Foldable,Traversable)
+
+data Rule c a = Rule
+  { rule_pre  :: [Expr c a]
+  -- ^ The trigger(s).
+  , rule_post :: Expr c a
+  -- ^ The action. The variables here must be a subset of those in pre.
+  }
+  deriving (Eq,Ord,Show,Functor,Foldable,Traversable)
+
+return []
+
+bimapRule :: (c -> c') -> (a -> a') -> Rule c a -> Rule c' a'
+bimapRule = $(genFmap ''Rule)
+
+mapRuleOrd :: (c -> c') -> Rule c a -> Rule c' a
+mapRuleOrd c = bimapRule c id
+
+instance (Pretty c,Pretty a) => Pretty (Expr c a) where
+  pp (Var x)    = pp x
+  pp (Con k es) = pp k <+> parens (fsep (punctuate "," (map pp es)))
+
+instance (Pretty c,Pretty a) => Pretty (Rule c a) where
+  pp (Rule ps q) = parens (fsep (punctuate "," (map pp ps))) <+> "=>" $\ pp q
+
+subtermRules :: Rule c a -> [Rule c a]
+subtermRules (Rule p q) = map (Rule p) (subterms q)
+
+subterms :: Expr c a -> [Expr c a]
+subterms e = e : case e of Var a    -> []
+                           Con _ es -> concatMap subterms es
+
+ruleVars :: Ord a => Rule c a -> [a]
+ruleVars (Rule ps q) = usort $ concatMap go (q:ps)
+  where
+  go (Var x) = [x]
+  go (Con c es) = concatMap go es
+
+type Closed c = Expr c Void
+
+data Sk c = Old c | Sk Int
+  deriving (Eq,Ord,Show,Functor,Foldable,Traversable)
+
+instance Pretty c => Pretty (Sk c) where
+  pp (Old c) = pp c
+  pp (Sk i)  = int i
+
+instance Ord c => Name (Sk c) where
+  fresh = Sk <$> fresh
+
+instance PrettyVar (Sk c) where
+  varStr _ = show ""
+
+unSkolem :: Closed (Sk c) -> Expr c Int
+unSkolem (Con (Old k) es) = Con k (map unSkolem es)
+unSkolem (Con (Sk i) [])  = Var i
+
+varOf :: Eq a => a -> Expr c a -> Bool
+x `varOf` Var y    = x == y
+x `varOf` Con _ es = any (x `varOf`) es
+
+specialise :: forall d c a . (Ord d,Ord c,Ord a) =>
+    [(d,[Rule c a])] -> ([(d,Subst a Void c)],[d])
+specialise decl_rules = (which (usort (go [close [] s | (_,Rule [] s) <- named_rules])), scary)
+  where
+  free0,free,scary :: [d]
+  (usort -> free0,usort -> scary) = separate [ (d,r) | (d,rs) <- decl_rules, r <- rs ]
+  free = free0 \\ scary
+
+  named_rules :: [(d,Rule c a)]
+  named_rules = [ (d,r) | (d,rules) <- decl_rules, d `elem` free, r <- rules ]
+
+  go :: [Closed c] -> [Closed c]
+  go insts
+    | null (new_insts \\ insts) = []
+    | otherwise                 = new_insts `union` go (new_insts `union` insts)
+    where
+    new_insts = usort $ map (snd . snd) new
+    new = step named_rules insts
+
+  which :: [Closed c] -> [(d,Subst a Void c)]
+  which cls = usort [ (d,i) | (d,(i,_)) <- step named_rules cls ]
+
+-- Return the safe rules, and the scary rules
+separate :: (Ord a,Ord c) => [(name,Rule c a)] -> ([name],[name])
+separate = go []
+  where
+  go rs ((n,r):xs)
+    | terminating (r:rs) = let (a,b) = go (r:rs) xs in (n:a,b  )
+    | otherwise          = let (a,b) = go rs     xs in (  a,n:b)
+  go _ _ = ([],[])
+
+terminating :: forall a c . (Ord a,Ord c) => [Rule c a] -> Bool
+terminating (map (mapRuleOrd Old) -> rs) = go 10 S.empty (usort (inst rs))
+  where
+  go :: Int -> Set (Closed (Sk c)) -> [Closed (Sk c)] -> Bool
+  {-
+  go i visited new
+    | traceShow ("go" $\ sep ["i:" $\ pp i
+                             ,"visited:" $\ pp (S.toList visited)
+                             ,"new:" $\ pp new
+                             ])
+                False = undefined
+  -}
+  go 0 _ _  = False
+  go _ _ [] = True
+  go i visited new =
+    let both = visited `S.union` S.fromList new
+    in  go (i-1) both (unnamedStep rs new \\ S.toList both)
+
+union :: Ord a => [a] -> [a] -> [a]
+union (S.fromList -> s1) (S.fromList -> s2) = S.toList (s1 `S.union` s2)
+
+(\\) :: Ord a => [a] -> [a] -> [a]
+(\\) (S.fromList -> s1) (S.fromList -> s2) = S.toList (s1 S.\\ s2)
+
+inst :: (Ord a,Ord c) => [Rule (Sk c) a] -> [Closed (Sk c)]
+inst rules = runFresh $
+  do i <- fresh
+     return (concatMap (instPre i) rules)
+
+instPre :: (Ord a,Ord c) => Sk c -> Rule (Sk c) a -> [Closed (Sk c)]
+instPre c r =
+  let su = [ (v,Con c []) | v <- ruleVars r ]
+  in  map (close su) (rule_pre r)
+
+close :: Eq a => [(a,Closed c)] -> Expr c a -> Closed c
+close su (Var v)    = fromMaybe (ERROR("Unbound variable, did you run --type-skolem-conjecture?")) (lookup v su)
+close su (Con c es) = Con c (map (close su) es)
+
+unnamedStep :: (Ord c,Ord a) => [Rule c a] -> [Closed c] -> [Closed c]
+unnamedStep rs = usort . map (snd . snd) . step (map ((,) ()) rs)
+
+step :: (Ord name,Ord c,Ord a) => [(name,Rule c a)] -> [Closed c] -> [(name,Inst a c)]
+step rs es = usort [ (name,i) | (name,r) <- rs, i <- activateOne r es ]
+
+type Inst a c = (Subst a Void c,Closed c)
+
+activateOne :: (Ord c,Ord a) => Rule c a -> [Closed c] -> [Inst a c]
+activateOne (Rule ps q) es = [ (su,close su q) | su <- go ps ]
+  where
+    go []     = [[]] -- success, return the empty substitution
+    go (p:ps) = [ su
+                | e <- es
+                , Just sua <- [match p e]
+                , sub <- go ps
+                , Just su <- [merge sua sub]
+                ]
+
+
+type Subst a b c = [(a,Expr c b)]
+
+merge :: (Ord a,Ord b,Ord c) => Subst a b c -> Subst a b c -> Maybe (Subst a b c)
+merge xs ys =
+  do guard (and [ maybe True (e ==) (lookup v ys) | (v,e) <- xs ])
+     Just (unionOn fst xs ys)
+
+merges :: (Ord a,Ord b,Ord c) => [Subst a b c] -> Maybe (Subst a b c)
+merges = foldM merge []
+
+match :: (Ord a,Ord b,Ord c) => Expr c a -> Expr c b -> Maybe (Subst a b c)
+match (Var x) e = Just [(x,e)]
+match (Con c xs) (Con d ys)
+  | c == d
+  , length xs == length ys
+  = merges =<< zipWithM match xs ys
+match _ _ = Nothing
+
+data Void = Void !Void
+  deriving (Eq,Ord,Show)
+
+absurd :: Void -> a
+absurd (Void v) = absurd v
+
+instance Pretty Void where
+  pp = absurd
+
diff --git a/src/Tip/WorkerWrapper.hs b/src/Tip/WorkerWrapper.hs
--- a/src/Tip/WorkerWrapper.hs
+++ b/src/Tip/WorkerWrapper.hs
@@ -29,7 +29,7 @@
 
 workerWrapper :: Name a => [WorkerWrapper a] -> Theory a -> Fresh (Theory a)
 workerWrapper wws thy@Theory{..} =
-  transformExprInM updateUse thy' >>= simplifyTheory gently
+  transformExprInM updateUse thy' >>= simplifyTheory gentlyNoInline
   where
     thy' = thy { thy_funcs = map updateDef thy_funcs }
     m = Map.fromList [(func_name (ww_func ww), ww) | ww <- wws]
diff --git a/tip-lib.cabal b/tip-lib.cabal
--- a/tip-lib.cabal
+++ b/tip-lib.cabal
@@ -1,5 +1,5 @@
 name:                tip-lib
-version:             0.1.2
+version:             0.2
 synopsis:            tons of inductive problems - support library and tools
 description:         This package provides a tool for processing inductive theorem proving problems in TIP format (see the homepage for details).
 homepage:            http://tip-org.github.io
@@ -34,6 +34,7 @@
     Tip.Pretty.Why3
     Tip.Pretty.Isabelle
     Tip.Pretty.Haskell
+    Tip.Pretty.TFF
 
     Tip.Parser
 
@@ -46,21 +47,29 @@
     Tip.Haskell.Translate
     Tip.Haskell.Rename
     Tip.CallGraph
+    Tip.Utils.Specialiser
+
+    Tip.Pass.Booleans
   other-modules:
+    Tip.Pass.AddMatch
     Tip.Pass.AxiomatizeFuncdefs
-    Tip.Pass.Lift
-    Tip.Pass.Booleans
+    Tip.Pass.AxiomatizeDatadecls
     Tip.Pass.CommuteMatch
-    Tip.Pass.AddMatch
+    Tip.Pass.Conjecture
     Tip.Pass.CSEMatch
-    Tip.Pass.RemoveNewtype
-    Tip.Pass.RemoveMatch
-    Tip.Pass.NegateConjecture
-    Tip.Pass.EqualFunctions
-    Tip.Pass.Uncurry
-    Tip.Pass.Pipeline
+    Tip.Pass.DropSuffix
     Tip.Pass.EliminateDeadCode
+    Tip.Pass.EqualFunctions
     Tip.Pass.FillInCases
+    Tip.Pass.Induction
+    Tip.Pass.Lift
+    Tip.Pass.Monomorphise
+    Tip.Pass.Pipeline
+    Tip.Pass.RemoveMatch
+    Tip.Pass.RemoveNewtype
+    Tip.Pass.SelectConjecture
+    Tip.Pass.Uncurry
+    Tip.Pass.Concretise
 
     Tip.Parser.ErrM
     Tip.Parser.AbsTIP
@@ -74,12 +83,14 @@
   default-language:    Haskell2010
   build-depends:       base >=4 && <5,
                        geniplate-mirror >=0.7.1,
+                       genifunctors >= 0.3,
                        split,
                        containers,
                        mtl,
                        pretty,
                        array,
-                       optparse-applicative
+                       optparse-applicative,
+                       structural-induction >= 0.3 && < 0.4
   build-tools:         alex, happy
 
 executable tip
@@ -87,6 +98,6 @@
   default-language:    Haskell2010
   build-depends:       base,
                        tip-lib,
-                       pretty-show,
                        pretty,
+                       filepath,
                        optparse-applicative
