diff src/scanner.cpp @ 16:2ae8d953f1d0

add scanning for bare hostnames
author carl
date Thu, 29 Apr 2004 21:56:22 -0700
parents 6ac6d6b822ce
children b6a4b72bb96e
line wrap: on
line diff
--- a/src/scanner.cpp	Tue Apr 27 20:26:52 2004 -0700
+++ b/src/scanner.cpp	Thu Apr 29 21:56:22 2004 -0700
@@ -2,7 +2,15 @@
 
 using namespace std;
 
-enum state {// url  decoder states
+enum state {// host name recognizer states
+            h_init,
+            h_host,
+
+            // html tag discarder states
+            t_init,
+            t_disc,
+
+            // url recognizer states
             u_init,
             u_http,
             u_sla,
@@ -28,6 +36,8 @@
             end_state,
 
             // temporary mime states
+            h_end,
+            t_end,
             u_reco,
             e_semi,
             m_2,
@@ -39,267 +49,275 @@
 typedef state PARSE[end_state];
 
 static PARSE parse_table[256] = {
-  // u_init, u_http, u_sla , u_url,  e_init, e_amp,  e_num,  m_init, m_eq,   m_1,    b_init, b_lf,   b_lf2,  b_64
+  // h_init, h_host, t_init, t_disc, u_init, u_http, u_sla , u_url,  e_init, e_amp,  e_num,  m_init, m_eq,   m_1,    b_init, b_lf,   b_lf2,  b_64
 
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x00
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x01
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x02
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x03
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x04
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x05
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x06
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x07
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x08
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x09 <tab>
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_nl,   m_init, b_lf,   b_init, b_lf2,  b_init,  },  // 0x0a <lf>
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x0b
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x0c
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_cr,   m_init, b_init, b_init, b_init, b_cr,    },  // 0x0d <cr>
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x0e
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x0f
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x10
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x11 xon char
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x12
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x13 xoff char
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x14
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x15
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x16
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x17
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x18
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x19
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x1a
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x1b
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x1c
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x1d
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x1e
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x1f
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x20 space
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x21 !
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x22 ""
-    {u_init, u_init, u_init, u_reco, e_init, e_num,  e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x23 #
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x24 $
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x25 %
-    {u_init, u_init, u_init, u_reco, e_amp,  e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x26 &
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x27 '
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x28 (
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x29 )
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x2A *
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x2B +
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x2C ,
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x2D -
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x2E .
-    {u_init, u_sla,  u_sla,  u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x2F /
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_num,  m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x30 0
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_num,  m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x31 1
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_num,  m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x32 2
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_num,  m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x33 3
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_num,  m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x34 4
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_num,  m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x35 5
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_num,  m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x36 6
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_num,  m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x37 7
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_num,  m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x38 8
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_num,  m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x39 9
-    {u_http, u_http, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x3A :
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_semi, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x3B ;
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x3C <
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_eq,   m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x3D =
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x3E >
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x3F ?
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x40 @
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x41 A
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x42 B
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x43 C
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x44 D
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x45 E
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x46 F
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x47 G
-    {u_http, u_http, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x48 H
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x49 I
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x4A J
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x4B K
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x4C L
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x4D M
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x4E N
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x4F O
-    {u_http, u_http, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x50 P
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x51 Q
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x52 R
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x53 S
-    {u_http, u_http, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x54 T
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x55 U
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x56 V
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x57 W
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x58 X
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x59 Y
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x5A Z
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x5B [
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x5C brace
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x5D ]
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x5E ^
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x5F _
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x60 `
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x61 a
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x62 b
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x63 c
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x64 d
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x65 e
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x66 f
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x67 g
-    {u_http, u_http, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x68 h
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x69 i
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x6A j
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x6B k
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x6C l
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x6D m
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x6E n
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x6F o
-    {u_http, u_http, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x70 p
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x71 q
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x72 r
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x73 s
-    {u_http, u_http, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x74 t
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x75 u
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x76 v
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x77 w
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x78 x
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x79 y
-    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x7A z
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x7B {
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x7C |
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x7D }
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x7E ~
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x7f
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x80
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x81
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x82
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x83
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x84
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x85
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x86
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x87
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x88
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x89
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x8a
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x8b
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x8c
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x8d
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x8e
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x8f
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x90
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x91
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x92
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x93
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x94
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x95
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x96
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x97
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x98
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x99
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x9a
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x9b
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x9c
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x9d
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x9e
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x9f
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xa0
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xa1
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xa2
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xa3
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xa4
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xa5
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xa6
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xa7
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xa8
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xa9
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xaa
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xab
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xac
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xad
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xae
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xaf
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xb0
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xb1
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xb2
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xb3
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xb4
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xb5
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xb6
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xb7
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xb8
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xb9
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xba
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xbb
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xbc
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xbd
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xbe
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xbf
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xc0
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xc1
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xc2
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xc3
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xc4
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xc5
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xc6
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xc7
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xc8
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xc9
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xca
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xcb
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xcc
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xcd
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xce
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xcf
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xd0
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xd1
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xd2
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xd3
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xd4
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xd5
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xd6
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xd7
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xd8
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xd9
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xda
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xdb
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xdc
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xdd
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xde
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xdf
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xe0
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xe1
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xe2
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xe3
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xe4
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xe5
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xe6
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xe7
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xe8
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xe9
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xea
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xeb
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xec
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xed
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xee
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xef
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xf0
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xf1
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xf2
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xf3
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xf4
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xf5
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xf6
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xf7
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xf8
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xf9
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xfa
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xfb
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xfc
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xfd
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xfe
-    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xff
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x00
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x01
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x02
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x03
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x04
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x05
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x06
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x07
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x08
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x09 <tab>
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_nl,   m_init, b_lf,   b_init, b_lf2,  b_init,  },  // 0x0a <lf>
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x0b
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x0c
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_cr,   m_init, b_init, b_init, b_init, b_cr,    },  // 0x0d <cr>
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x0e
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x0f
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x10
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x11 xon char
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x12
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x13 xoff char
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x14
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x15
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x16
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x17
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x18
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x19
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x1a
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x1b
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x1c
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x1d
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x1e
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x1f
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x20 space
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x21 !
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x22 ""
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_num,  e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x23 #
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x24 $
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x25 %
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_amp,  e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x26 &
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x27 '
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x28 (
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x29 )
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x2A *
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x2B +
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x2C ,
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x2D -
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x2E .
+    {h_init, h_end,  t_init, t_disc, u_init, u_sla,  u_sla,  u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x2F /
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_num,  m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x30 0
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_num,  m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x31 1
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_num,  m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x32 2
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_num,  m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x33 3
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_num,  m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x34 4
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_num,  m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x35 5
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_num,  m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x36 6
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_num,  m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x37 7
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_num,  m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x38 8
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_num,  m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x39 9
+    {h_init, h_end,  t_init, t_disc, u_http, u_http, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x3A :
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_semi, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x3B ;
+    {h_init, h_end,  t_disc, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x3C <
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_eq,   m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x3D =
+    {h_init, h_end,  t_init, t_end,  u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x3E >
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x3F ?
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x40 @
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x41 A
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x42 B
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x43 C
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x44 D
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x45 E
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x46 F
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x47 G
+    {h_host, h_host, t_init, t_disc, u_http, u_http, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x48 H
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x49 I
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x4A J
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x4B K
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x4C L
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x4D M
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x4E N
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x4F O
+    {h_host, h_host, t_init, t_disc, u_http, u_http, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x50 P
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x51 Q
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x52 R
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x53 S
+    {h_host, h_host, t_init, t_disc, u_http, u_http, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x54 T
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x55 U
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x56 V
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x57 W
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x58 X
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x59 Y
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x5A Z
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x5B [
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x5C brace
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x5D ]
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x5E ^
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x5F _
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x60 `
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x61 a
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x62 b
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x63 c
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x64 d
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x65 e
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x66 f
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x67 g
+    {h_host, h_host, t_init, t_disc, u_http, u_http, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x68 h
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x69 i
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x6A j
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x6B k
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x6C l
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x6D m
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x6E n
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x6F o
+    {h_host, h_host, t_init, t_disc, u_http, u_http, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x70 p
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x71 q
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x72 r
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x73 s
+    {h_host, h_host, t_init, t_disc, u_http, u_http, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x74 t
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x75 u
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x76 v
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x77 w
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x78 x
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x79 y
+    {h_host, h_host, t_init, t_disc, u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x7A z
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x7B {
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x7C |
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x7D }
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x7E ~
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x7f
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x80
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x81
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x82
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x83
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x84
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x85
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x86
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x87
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x88
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x89
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x8a
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x8b
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x8c
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x8d
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x8e
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x8f
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x90
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x91
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x92
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x93
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x94
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x95
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x96
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x97
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x98
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x99
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x9a
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x9b
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x9c
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x9d
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x9e
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x9f
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xa0
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xa1
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xa2
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xa3
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xa4
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xa5
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xa6
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xa7
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xa8
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xa9
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xaa
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xab
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xac
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xad
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xae
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xaf
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xb0
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xb1
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xb2
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xb3
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xb4
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xb5
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xb6
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xb7
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xb8
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xb9
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xba
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xbb
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xbc
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xbd
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xbe
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xbf
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xc0
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xc1
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xc2
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xc3
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xc4
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xc5
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xc6
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xc7
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xc8
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xc9
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xca
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xcb
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xcc
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xcd
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xce
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xcf
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xd0
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xd1
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xd2
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xd3
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xd4
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xd5
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xd6
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xd7
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xd8
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xd9
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xda
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xdb
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xdc
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xdd
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xde
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xdf
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xe0
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xe1
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xe2
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xe3
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xe4
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xe5
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xe6
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xe7
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xe8
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xe9
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xea
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xeb
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xec
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xed
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xee
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xef
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xf0
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xf1
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xf2
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xf3
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xf4
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xf5
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xf6
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xf7
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xf8
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xf9
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xfa
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xfb
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xfc
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xfd
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xfe
+    {h_init, h_end,  t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xff
 };
 
 
+char *tlds[] = {
+    ".com",
+    ".net",
+    ".org",
+    ".biz",
+    NULL
+};
+
 u_char hex_decode[256] = {
     0,  // 0x00
     0,  // 0x01
@@ -824,28 +842,36 @@
     int         count;
     state       st;
     state       init;
-    fsa*        next;
+    fsa*        next1;
+    fsa*        next2;
     string_set  *hosts;
 
-    fsa(state init, fsa* next_, string_set *hosts_);
+    fsa(state init, fsa* next1_, fsa* next2_, string_set *hosts_);
     void push(u_char *buf, int len);
+    void pusher();
 };
 
-fsa::fsa(state init_, fsa *next_, string_set *hosts_) {
+fsa::fsa(state init_, fsa *next1_, fsa *next2_, string_set *hosts_) {
     count = 0;
     st    = init_;
     init  = init_;
-    next  = next_;
+    next1 = next1_;
+    next2 = next2_;
     hosts = hosts_;
 }
 
+void fsa::pusher() {
+    if (next1) next1->push(pending, count);
+    if (next2) next2->push(pending, count);
+    count = 0;
+}
+
 void fsa::push(u_char *buf, int len) {
     for (int i=0; i<len; i++) {
         u_char c = buf[i];
         // guard against buffer overflow
         if (count == (PENDING_LIMIT-1)) {
-            if (next) next->push(pending, count);
-            count = 0;
+            pusher();
             st    = init;
         }
         pending[count++] = c;
@@ -853,6 +879,39 @@
         switch (st) {
 
             //////////////////////////////
+            //  host name recognizer
+            case h_end: {
+                count--;
+                char *tld;
+                for (int i=0; (tld = tlds[i]); i++) {
+                    int n = strlen(tld);
+                    if (count > n) {
+                        if (strncasecmp((const char *)(pending+count-n), tld, n) == 0) {
+                            register_string(*hosts, (char*)pending);
+                        }
+                    }
+                }
+                } // fall thru
+
+            case h_init: {
+                    count = 0;
+                } break;
+
+            //////////////////////////////
+            //  html tag { discarder
+            case t_end:
+                st = t_init;
+                // fall thru
+
+            case t_disc: {
+                    count = 0;
+                } break;
+
+            case t_init: {
+                pusher();
+                } break;
+
+            //////////////////////////////
             //  url recognizer
             case u_sla: {
                 if ((count < 6) || (7 < count)) {
@@ -877,6 +936,19 @@
 
 
             //////////////////////////////
+            //  html entity decoder
+            case e_semi: {
+                pending[--count] = '\0';  // null terminate the digit string by overwriting the semicolon
+                pending[0] = atoi((const char *)pending+2);
+                count = 1;
+                st    = e_init;
+                } // fall thru
+
+            case e_init: {
+                pusher();
+                } break;
+
+            //////////////////////////////
             //  mime decoder
             case m_2: {
                 pending[0] = hex_decode[pending[1]] * 16 + hex_decode[pending[2]];
@@ -885,8 +957,7 @@
                 } // fall thru
 
             case m_init: {
-                if (next) next->push(pending, count);
-                count = 0;
+                pusher();
                 } break;
 
             case m_cr: {
@@ -900,20 +971,6 @@
                 } break;
 
             //////////////////////////////
-            //  html entity decoder
-            case e_semi: {
-                pending[--count] = '\0';  // null terminate the digit string by overwriting the semicolon
-                pending[0] = atoi((const char *)pending+2);
-                count = 1;
-                st    = e_init;
-                } // fall thru
-
-            case e_init: {
-                if (next) next->push(pending, count);
-                count = 0;
-                } break;
-
-            //////////////////////////////
             //  base64 decoder
             case b_lf2: {
                 count--;
@@ -944,12 +1001,12 @@
 
             case b_lf:
             case b_init: {
-                if (next) next->push(pending, count);
-                count = 0;
+                pusher();
                 } break;
 
             //////////////////////////////
             //  states that just accumulate characters in the pending buffer
+            case h_host:
             case u_http:
             case u_url:
             case e_amp:
@@ -964,6 +1021,8 @@
 }
 
 struct url_scanner {
+    fsa *host_parser;
+    fsa *tags_parser;
     fsa *urls_parser;
     fsa *html_parser;
     fsa *mime_parser;
@@ -975,13 +1034,17 @@
 };
 
 url_scanner::url_scanner(string_set *hosts) {
-    urls_parser = new fsa(u_init, NULL,        hosts);
-    html_parser = new fsa(e_init, urls_parser, NULL);
-    mime_parser = new fsa(m_init, html_parser, NULL);
-    b64_parser  = new fsa(b_init, mime_parser, NULL);
+    host_parser = new fsa(h_init, NULL,        NULL,        hosts);
+    tags_parser = new fsa(t_init, host_parser, NULL,        NULL);
+    urls_parser = new fsa(u_init, NULL,        NULL,        hosts);
+    html_parser = new fsa(e_init, urls_parser, tags_parser, NULL);
+    mime_parser = new fsa(m_init, html_parser, NULL,        NULL);
+    b64_parser  = new fsa(b_init, mime_parser, NULL,        NULL);
 }
 
 url_scanner::~url_scanner() {
+    delete host_parser;
+    delete tags_parser;
     delete urls_parser;
     delete html_parser;
     delete mime_parser;