diff --git a/org/mozilla/intl/chardet/Big5Statistics.java b/org/mozilla/intl/chardet/Big5Statistics.java
new file mode 100644
index 0000000..cd74f42
--- /dev/null
+++ b/org/mozilla/intl/chardet/Big5Statistics.java
@@ -0,0 +1,253 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public
+ * License Version 1.1 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Netscape
+ * Communications Corporation.  Portions created by Netscape are
+ * Copyright (C) 1998 Netscape Communications Corporation. All
+ * Rights Reserved.
+ *
+ * Contributor(s):
+ */
+
+package org.mozilla.intl.chardet ;
+
+import java.lang.* ;
+
+public class Big5Statistics extends nsEUCStatistics {
+
+     static float[] mFirstByteFreq ;
+     static float   mFirstByteStdDev;
+     static float   mFirstByteMean;
+     static float   mFirstByteWeight;
+     static float[] mSecondByteFreq;
+     static float   mSecondByteStdDev;
+     static float   mSecondByteMean;
+     static float   mSecondByteWeight;
+
+     public float[] mFirstByteFreq() { return mFirstByteFreq; }  
+     public float   mFirstByteStdDev()  { return mFirstByteStdDev; }  
+     public float   mFirstByteMean()  { return mFirstByteMean; }  
+     public float   mFirstByteWeight()  { return mFirstByteWeight; }  
+     public float[] mSecondByteFreq()  { return mSecondByteFreq; }  
+     public float   mSecondByteStdDev()  { return mSecondByteStdDev; }  
+     public float   mSecondByteMean()  { return mSecondByteMean; }  
+     public float   mSecondByteWeight()  { return mSecondByteWeight; }  
+
+     public Big5Statistics() {
+
+         mFirstByteFreq = new float[] { 
+                    0.000000f, // FreqH[a1]
+                    0.000000f, // FreqH[a2]
+                    0.000000f, // FreqH[a3]
+                    0.114427f, // FreqH[a4]
+                    0.061058f, // FreqH[a5]
+                    0.075598f, // FreqH[a6]
+                    0.048386f, // FreqH[a7]
+                    0.063966f, // FreqH[a8]
+                    0.027094f, // FreqH[a9]
+                    0.095787f, // FreqH[aa]
+                    0.029525f, // FreqH[ab]
+                    0.031331f, // FreqH[ac]
+                    0.036915f, // FreqH[ad]
+                    0.021805f, // FreqH[ae]
+                    0.019349f, // FreqH[af]
+                    0.037496f, // FreqH[b0]
+                    0.018068f, // FreqH[b1]
+                    0.012760f, // FreqH[b2]
+                    0.030053f, // FreqH[b3]
+                    0.017339f, // FreqH[b4]
+                    0.016731f, // FreqH[b5]
+                    0.019501f, // FreqH[b6]
+                    0.011240f, // FreqH[b7]
+                    0.032973f, // FreqH[b8]
+                    0.016658f, // FreqH[b9]
+                    0.015872f, // FreqH[ba]
+                    0.021458f, // FreqH[bb]
+                    0.012378f, // FreqH[bc]
+                    0.017003f, // FreqH[bd]
+                    0.020802f, // FreqH[be]
+                    0.012454f, // FreqH[bf]
+                    0.009239f, // FreqH[c0]
+                    0.012829f, // FreqH[c1]
+                    0.007922f, // FreqH[c2]
+                    0.010079f, // FreqH[c3]
+                    0.009815f, // FreqH[c4]
+                    0.010104f, // FreqH[c5]
+                    0.000000f, // FreqH[c6]
+                    0.000000f, // FreqH[c7]
+                    0.000000f, // FreqH[c8]
+                    0.000053f, // FreqH[c9]
+                    0.000035f, // FreqH[ca]
+                    0.000105f, // FreqH[cb]
+                    0.000031f, // FreqH[cc]
+                    0.000088f, // FreqH[cd]
+                    0.000027f, // FreqH[ce]
+                    0.000027f, // FreqH[cf]
+                    0.000026f, // FreqH[d0]
+                    0.000035f, // FreqH[d1]
+                    0.000024f, // FreqH[d2]
+                    0.000034f, // FreqH[d3]
+                    0.000375f, // FreqH[d4]
+                    0.000025f, // FreqH[d5]
+                    0.000028f, // FreqH[d6]
+                    0.000020f, // FreqH[d7]
+                    0.000024f, // FreqH[d8]
+                    0.000028f, // FreqH[d9]
+                    0.000031f, // FreqH[da]
+                    0.000059f, // FreqH[db]
+                    0.000040f, // FreqH[dc]
+                    0.000030f, // FreqH[dd]
+                    0.000079f, // FreqH[de]
+                    0.000037f, // FreqH[df]
+                    0.000040f, // FreqH[e0]
+                    0.000023f, // FreqH[e1]
+                    0.000030f, // FreqH[e2]
+                    0.000027f, // FreqH[e3]
+                    0.000064f, // FreqH[e4]
+                    0.000020f, // FreqH[e5]
+                    0.000027f, // FreqH[e6]
+                    0.000025f, // FreqH[e7]
+                    0.000074f, // FreqH[e8]
+                    0.000019f, // FreqH[e9]
+                    0.000023f, // FreqH[ea]
+                    0.000021f, // FreqH[eb]
+                    0.000018f, // FreqH[ec]
+                    0.000017f, // FreqH[ed]
+                    0.000035f, // FreqH[ee]
+                    0.000021f, // FreqH[ef]
+                    0.000019f, // FreqH[f0]
+                    0.000025f, // FreqH[f1]
+                    0.000017f, // FreqH[f2]
+                    0.000037f, // FreqH[f3]
+                    0.000018f, // FreqH[f4]
+                    0.000018f, // FreqH[f5]
+                    0.000019f, // FreqH[f6]
+                    0.000022f, // FreqH[f7]
+                    0.000033f, // FreqH[f8]
+                    0.000032f, // FreqH[f9]
+                    0.000000f, // FreqH[fa]
+                    0.000000f, // FreqH[fb]
+                    0.000000f, // FreqH[fc]
+                    0.000000f, // FreqH[fd]
+                    0.000000f  // FreqH[fe]
+	};
+                 
+	mFirstByteStdDev = 0.020606f; // Lead Byte StdDev
+	mFirstByteMean = 0.010638f; // Lead Byte Mean
+ 	mFirstByteWeight = 0.675261f; // Lead Byte Weight
+
+	mSecondByteFreq = new float[] {
+                     0.020256f, // FreqL[a1]
+                     0.003293f, // FreqL[a2]
+                     0.045811f, // FreqL[a3]
+                     0.016650f, // FreqL[a4]
+                     0.007066f, // FreqL[a5]
+                     0.004146f, // FreqL[a6]
+                     0.009229f, // FreqL[a7]
+                     0.007333f, // FreqL[a8]
+                     0.003296f, // FreqL[a9]
+                     0.005239f, // FreqL[aa]
+                     0.008282f, // FreqL[ab]
+                     0.003791f, // FreqL[ac]
+                     0.006116f, // FreqL[ad]
+                     0.003536f, // FreqL[ae]
+                     0.004024f, // FreqL[af]
+                     0.016654f, // FreqL[b0]
+                     0.009334f, // FreqL[b1]
+                     0.005429f, // FreqL[b2]
+                     0.033392f, // FreqL[b3]
+                     0.006121f, // FreqL[b4]
+                     0.008983f, // FreqL[b5]
+                     0.002801f, // FreqL[b6]
+                     0.004221f, // FreqL[b7]
+                     0.010357f, // FreqL[b8]
+                     0.014695f, // FreqL[b9]
+                     0.077937f, // FreqL[ba]
+                     0.006314f, // FreqL[bb]
+                     0.004020f, // FreqL[bc]
+                     0.007331f, // FreqL[bd]
+                     0.007150f, // FreqL[be]
+                     0.005341f, // FreqL[bf]
+                     0.009195f, // FreqL[c0]
+                     0.005350f, // FreqL[c1]
+                     0.005698f, // FreqL[c2]
+                     0.004472f, // FreqL[c3]
+                     0.007242f, // FreqL[c4]
+                     0.004039f, // FreqL[c5]
+                     0.011154f, // FreqL[c6]
+                     0.016184f, // FreqL[c7]
+                     0.004741f, // FreqL[c8]
+                     0.012814f, // FreqL[c9]
+                     0.007679f, // FreqL[ca]
+                     0.008045f, // FreqL[cb]
+                     0.016631f, // FreqL[cc]
+                     0.009451f, // FreqL[cd]
+                     0.016487f, // FreqL[ce]
+                     0.007287f, // FreqL[cf]
+                     0.012688f, // FreqL[d0]
+                     0.017421f, // FreqL[d1]
+                     0.013205f, // FreqL[d2]
+                     0.031480f, // FreqL[d3]
+                     0.003404f, // FreqL[d4]
+                     0.009149f, // FreqL[d5]
+                     0.008921f, // FreqL[d6]
+                     0.007514f, // FreqL[d7]
+                     0.008683f, // FreqL[d8]
+                     0.008203f, // FreqL[d9]
+                     0.031403f, // FreqL[da]
+                     0.011733f, // FreqL[db]
+                     0.015617f, // FreqL[dc]
+                     0.015306f, // FreqL[dd]
+                     0.004004f, // FreqL[de]
+                     0.010899f, // FreqL[df]
+                     0.009961f, // FreqL[e0]
+                     0.008388f, // FreqL[e1]
+                     0.010920f, // FreqL[e2]
+                     0.003925f, // FreqL[e3]
+                     0.008585f, // FreqL[e4]
+                     0.009108f, // FreqL[e5]
+                     0.015546f, // FreqL[e6]
+                     0.004659f, // FreqL[e7]
+                     0.006934f, // FreqL[e8]
+                     0.007023f, // FreqL[e9]
+                     0.020252f, // FreqL[ea]
+                     0.005387f, // FreqL[eb]
+                     0.024704f, // FreqL[ec]
+                     0.006963f, // FreqL[ed]
+                     0.002625f, // FreqL[ee]
+                     0.009512f, // FreqL[ef]
+                     0.002971f, // FreqL[f0]
+                     0.008233f, // FreqL[f1]
+                     0.010000f, // FreqL[f2]
+                     0.011973f, // FreqL[f3]
+                     0.010553f, // FreqL[f4]
+                     0.005945f, // FreqL[f5]
+                     0.006349f, // FreqL[f6]
+                     0.009401f, // FreqL[f7]
+                     0.008577f, // FreqL[f8]
+                     0.008186f, // FreqL[f9]
+                     0.008159f, // FreqL[fa]
+                     0.005033f, // FreqL[fb]
+                     0.008714f, // FreqL[fc]
+                     0.010614f, // FreqL[fd]
+                     0.006554f  // FreqL[fe]
+	};
+
+	mSecondByteStdDev = 0.009909f; // Trail Byte StdDev
+	mSecondByteMean = 0.010638f; // Trail Byte Mean
+	mSecondByteWeight = 0.324739f ;  // Trial Byte Weight
+
+	}
+}
+
diff --git a/org/mozilla/intl/chardet/EUCJPStatistics.java b/org/mozilla/intl/chardet/EUCJPStatistics.java
new file mode 100644
index 0000000..8e3d363
--- /dev/null
+++ b/org/mozilla/intl/chardet/EUCJPStatistics.java
@@ -0,0 +1,255 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public
+ * License Version 1.1 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Netscape
+ * Communications Corporation.  Portions created by Netscape are
+ * Copyright (C) 1998 Netscape Communications Corporation. All
+ * Rights Reserved.
+ *
+ * Contributor(s):
+ */
+
+package org.mozilla.intl.chardet ;
+
+import java.lang.* ;
+
+public class EUCJPStatistics extends nsEUCStatistics {
+
+
+     static float[] mFirstByteFreq ;
+     static float   mFirstByteStdDev;
+     static float   mFirstByteMean;
+     static float   mFirstByteWeight;
+     static float[] mSecondByteFreq;
+     static float   mSecondByteStdDev;
+     static float   mSecondByteMean;
+     static float   mSecondByteWeight;
+
+     public float[] mFirstByteFreq() { return mFirstByteFreq; }  
+     public float   mFirstByteStdDev()  { return mFirstByteStdDev; }  
+     public float   mFirstByteMean()  { return mFirstByteMean; }  
+     public float   mFirstByteWeight()  { return mFirstByteWeight; }  
+     public float[] mSecondByteFreq()  { return mSecondByteFreq; }  
+     public float   mSecondByteStdDev()  { return mSecondByteStdDev; }  
+     public float   mSecondByteMean()  { return mSecondByteMean; }  
+     public float   mSecondByteWeight()  { return mSecondByteWeight; }  
+
+	public EUCJPStatistics() {
+
+	    mFirstByteFreq = new float[] {
+                0.364808f, // FreqH[a1]
+                0.000000f, // FreqH[a2]
+                0.000000f, // FreqH[a3]
+                0.145325f, // FreqH[a4]
+                0.304891f, // FreqH[a5]
+                0.000000f, // FreqH[a6]
+                0.000000f, // FreqH[a7]
+                0.000000f, // FreqH[a8]
+                0.000000f, // FreqH[a9]
+                0.000000f, // FreqH[aa]
+                0.000000f, // FreqH[ab]
+                0.000000f, // FreqH[ac]
+                0.000000f, // FreqH[ad]
+                0.000000f, // FreqH[ae]
+                0.000000f, // FreqH[af]
+                0.001835f, // FreqH[b0]
+                0.010771f, // FreqH[b1]
+                0.006462f, // FreqH[b2]
+                0.001157f, // FreqH[b3]
+                0.002114f, // FreqH[b4]
+                0.003231f, // FreqH[b5]
+                0.001356f, // FreqH[b6]
+                0.007420f, // FreqH[b7]
+                0.004189f, // FreqH[b8]
+                0.003231f, // FreqH[b9]
+                0.003032f, // FreqH[ba]
+                0.033190f, // FreqH[bb]
+                0.006303f, // FreqH[bc]
+                0.006064f, // FreqH[bd]
+                0.009973f, // FreqH[be]
+                0.002354f, // FreqH[bf]
+                0.003670f, // FreqH[c0]
+                0.009135f, // FreqH[c1]
+                0.001675f, // FreqH[c2]
+                0.002792f, // FreqH[c3]
+                0.002194f, // FreqH[c4]
+                0.014720f, // FreqH[c5]
+                0.011928f, // FreqH[c6]
+                0.000878f, // FreqH[c7]
+                0.013124f, // FreqH[c8]
+                0.001077f, // FreqH[c9]
+                0.009295f, // FreqH[ca]
+                0.003471f, // FreqH[cb]
+                0.002872f, // FreqH[cc]
+                0.002433f, // FreqH[cd]
+                0.000957f, // FreqH[ce]
+                0.001636f, // FreqH[cf]
+                0.000000f, // FreqH[d0]
+                0.000000f, // FreqH[d1]
+                0.000000f, // FreqH[d2]
+                0.000000f, // FreqH[d3]
+                0.000000f, // FreqH[d4]
+                0.000000f, // FreqH[d5]
+                0.000000f, // FreqH[d6]
+                0.000000f, // FreqH[d7]
+                0.000000f, // FreqH[d8]
+                0.000000f, // FreqH[d9]
+                0.000000f, // FreqH[da]
+                0.000000f, // FreqH[db]
+                0.000000f, // FreqH[dc]
+                0.000000f, // FreqH[dd]
+                0.000080f, // FreqH[de]
+                0.000279f, // FreqH[df]
+                0.000000f, // FreqH[e0]
+                0.000000f, // FreqH[e1]
+                0.000000f, // FreqH[e2]
+                0.000000f, // FreqH[e3]
+                0.000000f, // FreqH[e4]
+                0.000000f, // FreqH[e5]
+                0.000000f, // FreqH[e6]
+                0.000000f, // FreqH[e7]
+                0.000000f, // FreqH[e8]
+                0.000000f, // FreqH[e9]
+                0.000000f, // FreqH[ea]
+                0.000000f, // FreqH[eb]
+                0.000000f, // FreqH[ec]
+                0.000000f, // FreqH[ed]
+                0.000000f, // FreqH[ee]
+                0.000000f, // FreqH[ef]
+                0.000000f, // FreqH[f0]
+                0.000000f, // FreqH[f1]
+                0.000000f, // FreqH[f2]
+                0.000000f, // FreqH[f3]
+                0.000000f, // FreqH[f4]
+                0.000000f, // FreqH[f5]
+                0.000000f, // FreqH[f6]
+                0.000000f, // FreqH[f7]
+                0.000000f, // FreqH[f8]
+                0.000000f, // FreqH[f9]
+                0.000000f, // FreqH[fa]
+                0.000000f, // FreqH[fb]
+                0.000000f, // FreqH[fc]
+                0.000080f, // FreqH[fd]
+                0.000000f  // FreqH[fe]
+
+	};
+
+	mFirstByteStdDev = 0.050407f; // Lead Byte StdDev
+	mFirstByteMean = 0.010638f; // Lead Byte Mean
+	mFirstByteWeight = 0.640871f; // Lead Byte Weight
+
+	mSecondByteFreq = new float[] {
+                  0.002473f, // FreqL[a1]
+                  0.039134f, // FreqL[a2]
+                  0.152745f, // FreqL[a3]
+                  0.009694f, // FreqL[a4]
+                  0.000359f, // FreqL[a5]
+                  0.022180f, // FreqL[a6]
+                  0.000758f, // FreqL[a7]
+                  0.004308f, // FreqL[a8]
+                  0.000160f, // FreqL[a9]
+                  0.002513f, // FreqL[aa]
+                  0.003072f, // FreqL[ab]
+                  0.001316f, // FreqL[ac]
+                  0.003830f, // FreqL[ad]
+                  0.001037f, // FreqL[ae]
+                  0.003590f, // FreqL[af]
+                  0.000957f, // FreqL[b0]
+                  0.000160f, // FreqL[b1]
+                  0.000239f, // FreqL[b2]
+                  0.006462f, // FreqL[b3]
+                  0.001596f, // FreqL[b4]
+                  0.031554f, // FreqL[b5]
+                  0.001316f, // FreqL[b6]
+                  0.002194f, // FreqL[b7]
+                  0.016555f, // FreqL[b8]
+                  0.003271f, // FreqL[b9]
+                  0.000678f, // FreqL[ba]
+                  0.000598f, // FreqL[bb]
+                  0.206438f, // FreqL[bc]
+                  0.000718f, // FreqL[bd]
+                  0.001077f, // FreqL[be]
+                  0.003710f, // FreqL[bf]
+                  0.001356f, // FreqL[c0]
+                  0.001356f, // FreqL[c1]
+                  0.000439f, // FreqL[c2]
+                  0.004388f, // FreqL[c3]
+                  0.005704f, // FreqL[c4]
+                  0.000878f, // FreqL[c5]
+                  0.010172f, // FreqL[c6]
+                  0.007061f, // FreqL[c7]
+                  0.014680f, // FreqL[c8]
+                  0.000638f, // FreqL[c9]
+                  0.025730f, // FreqL[ca]
+                  0.002792f, // FreqL[cb]
+                  0.000718f, // FreqL[cc]
+                  0.001795f, // FreqL[cd]
+                  0.091551f, // FreqL[ce]
+                  0.000758f, // FreqL[cf]
+                  0.003909f, // FreqL[d0]
+                  0.000558f, // FreqL[d1]
+                  0.031195f, // FreqL[d2]
+                  0.007061f, // FreqL[d3]
+                  0.001316f, // FreqL[d4]
+                  0.022579f, // FreqL[d5]
+                  0.006981f, // FreqL[d6]
+                  0.007260f, // FreqL[d7]
+                  0.001117f, // FreqL[d8]
+                  0.000239f, // FreqL[d9]
+                  0.012127f, // FreqL[da]
+                  0.000878f, // FreqL[db]
+                  0.003790f, // FreqL[dc]
+                  0.001077f, // FreqL[dd]
+                  0.000758f, // FreqL[de]
+                  0.002114f, // FreqL[df]
+                  0.002234f, // FreqL[e0]
+                  0.000678f, // FreqL[e1]
+                  0.002992f, // FreqL[e2]
+                  0.003311f, // FreqL[e3]
+                  0.023416f, // FreqL[e4]
+                  0.001237f, // FreqL[e5]
+                  0.002753f, // FreqL[e6]
+                  0.005146f, // FreqL[e7]
+                  0.002194f, // FreqL[e8]
+                  0.007021f, // FreqL[e9]
+                  0.008497f, // FreqL[ea]
+                  0.013763f, // FreqL[eb]
+                  0.011768f, // FreqL[ec]
+                  0.006303f, // FreqL[ed]
+                  0.001915f, // FreqL[ee]
+                  0.000638f, // FreqL[ef]
+                  0.008776f, // FreqL[f0]
+                  0.000918f, // FreqL[f1]
+                  0.003431f, // FreqL[f2]
+                  0.057603f, // FreqL[f3]
+                  0.000439f, // FreqL[f4]
+                  0.000439f, // FreqL[f5]
+                  0.000758f, // FreqL[f6]
+                  0.002872f, // FreqL[f7]
+                  0.001675f, // FreqL[f8]
+                  0.011050f, // FreqL[f9]
+                  0.000000f, // FreqL[fa]
+                  0.000279f, // FreqL[fb]
+                  0.012127f, // FreqL[fc]
+                  0.000718f, // FreqL[fd]
+                  0.007380f  // FreqL[fe]
+
+	};
+
+	mSecondByteStdDev = 0.028247f; // Trail Byte StdDev
+	mSecondByteMean = 0.010638f; // Trail Byte Mean
+	mSecondByteWeight = 0.359129f; // Trial Byte Weight
+	}
+
+}
diff --git a/org/mozilla/intl/chardet/EUCKRStatistics.java b/org/mozilla/intl/chardet/EUCKRStatistics.java
new file mode 100644
index 0000000..4559958
--- /dev/null
+++ b/org/mozilla/intl/chardet/EUCKRStatistics.java
@@ -0,0 +1,255 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public
+ * License Version 1.1 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Netscape
+ * Communications Corporation.  Portions created by Netscape are
+ * Copyright (C) 1998 Netscape Communications Corporation. All
+ * Rights Reserved.
+ *
+ * Contributor(s):
+ */
+
+package org.mozilla.intl.chardet ;
+
+import java.lang.* ;
+
+public class EUCKRStatistics extends nsEUCStatistics {
+
+
+     static float[] mFirstByteFreq ;
+     static float   mFirstByteStdDev;
+     static float   mFirstByteMean;
+     static float   mFirstByteWeight;
+     static float[] mSecondByteFreq;
+     static float   mSecondByteStdDev;
+     static float   mSecondByteMean;
+     static float   mSecondByteWeight;
+
+     public float[] mFirstByteFreq() { return mFirstByteFreq; }  
+     public float   mFirstByteStdDev()  { return mFirstByteStdDev; }  
+     public float   mFirstByteMean()  { return mFirstByteMean; }  
+     public float   mFirstByteWeight()  { return mFirstByteWeight; }  
+     public float[] mSecondByteFreq()  { return mSecondByteFreq; }  
+     public float   mSecondByteStdDev()  { return mSecondByteStdDev; }  
+     public float   mSecondByteMean()  { return mSecondByteMean; }  
+     public float   mSecondByteWeight()  { return mSecondByteWeight; }  
+
+	public EUCKRStatistics() {
+
+	    mFirstByteFreq = new float[] {
+                  0.000000f, // FreqH[a1]
+                  0.000000f, // FreqH[a2]
+                  0.000000f, // FreqH[a3]
+                  0.000000f, // FreqH[a4]
+                  0.000000f, // FreqH[a5]
+                  0.000000f, // FreqH[a6]
+                  0.000000f, // FreqH[a7]
+                  0.000412f, // FreqH[a8]
+                  0.000000f, // FreqH[a9]
+                  0.000000f, // FreqH[aa]
+                  0.000000f, // FreqH[ab]
+                  0.000000f, // FreqH[ac]
+                  0.000000f, // FreqH[ad]
+                  0.000000f, // FreqH[ae]
+                  0.000000f, // FreqH[af]
+                  0.057502f, // FreqH[b0]
+                  0.033182f, // FreqH[b1]
+                  0.002267f, // FreqH[b2]
+                  0.016076f, // FreqH[b3]
+                  0.014633f, // FreqH[b4]
+                  0.032976f, // FreqH[b5]
+                  0.004122f, // FreqH[b6]
+                  0.011336f, // FreqH[b7]
+                  0.058533f, // FreqH[b8]
+                  0.024526f, // FreqH[b9]
+                  0.025969f, // FreqH[ba]
+                  0.054411f, // FreqH[bb]
+                  0.019580f, // FreqH[bc]
+                  0.063273f, // FreqH[bd]
+                  0.113974f, // FreqH[be]
+                  0.029885f, // FreqH[bf]
+                  0.150041f, // FreqH[c0]
+                  0.059151f, // FreqH[c1]
+                  0.002679f, // FreqH[c2]
+                  0.009893f, // FreqH[c3]
+                  0.014839f, // FreqH[c4]
+                  0.026381f, // FreqH[c5]
+                  0.015045f, // FreqH[c6]
+                  0.069456f, // FreqH[c7]
+                  0.089860f, // FreqH[c8]
+                  0.000000f, // FreqH[c9]
+                  0.000000f, // FreqH[ca]
+                  0.000000f, // FreqH[cb]
+                  0.000000f, // FreqH[cc]
+                  0.000000f, // FreqH[cd]
+                  0.000000f, // FreqH[ce]
+                  0.000000f, // FreqH[cf]
+                  0.000000f, // FreqH[d0]
+                  0.000000f, // FreqH[d1]
+                  0.000000f, // FreqH[d2]
+                  0.000000f, // FreqH[d3]
+                  0.000000f, // FreqH[d4]
+                  0.000000f, // FreqH[d5]
+                  0.000000f, // FreqH[d6]
+                  0.000000f, // FreqH[d7]
+                  0.000000f, // FreqH[d8]
+                  0.000000f, // FreqH[d9]
+                  0.000000f, // FreqH[da]
+                  0.000000f, // FreqH[db]
+                  0.000000f, // FreqH[dc]
+                  0.000000f, // FreqH[dd]
+                  0.000000f, // FreqH[de]
+                  0.000000f, // FreqH[df]
+                  0.000000f, // FreqH[e0]
+                  0.000000f, // FreqH[e1]
+                  0.000000f, // FreqH[e2]
+                  0.000000f, // FreqH[e3]
+                  0.000000f, // FreqH[e4]
+                  0.000000f, // FreqH[e5]
+                  0.000000f, // FreqH[e6]
+                  0.000000f, // FreqH[e7]
+                  0.000000f, // FreqH[e8]
+                  0.000000f, // FreqH[e9]
+                  0.000000f, // FreqH[ea]
+                  0.000000f, // FreqH[eb]
+                  0.000000f, // FreqH[ec]
+                  0.000000f, // FreqH[ed]
+                  0.000000f, // FreqH[ee]
+                  0.000000f, // FreqH[ef]
+                  0.000000f, // FreqH[f0]
+                  0.000000f, // FreqH[f1]
+                  0.000000f, // FreqH[f2]
+                  0.000000f, // FreqH[f3]
+                  0.000000f, // FreqH[f4]
+                  0.000000f, // FreqH[f5]
+                  0.000000f, // FreqH[f6]
+                  0.000000f, // FreqH[f7]
+                  0.000000f, // FreqH[f8]
+                  0.000000f, // FreqH[f9]
+                  0.000000f, // FreqH[fa]
+                  0.000000f, // FreqH[fb]
+                  0.000000f, // FreqH[fc]
+                  0.000000f, // FreqH[fd]
+                  0.000000f  // FreqH[fe]
+
+	};
+
+	mFirstByteStdDev = 0.025593f; // Lead Byte StdDev
+	mFirstByteMean = 0.010638f; // Lead Byte Mean
+	mFirstByteWeight = 0.647437f; // Lead Byte Weight
+
+	mSecondByteFreq = new float[] {
+                  0.016694f, // FreqL[a1]
+                  0.000000f, // FreqL[a2]
+                  0.012778f, // FreqL[a3]
+                  0.030091f, // FreqL[a4]
+                  0.002679f, // FreqL[a5]
+                  0.006595f, // FreqL[a6]
+                  0.001855f, // FreqL[a7]
+                  0.000824f, // FreqL[a8]
+                  0.005977f, // FreqL[a9]
+                  0.004740f, // FreqL[aa]
+                  0.003092f, // FreqL[ab]
+                  0.000824f, // FreqL[ac]
+                  0.019580f, // FreqL[ad]
+                  0.037304f, // FreqL[ae]
+                  0.008244f, // FreqL[af]
+                  0.014633f, // FreqL[b0]
+                  0.001031f, // FreqL[b1]
+                  0.000000f, // FreqL[b2]
+                  0.003298f, // FreqL[b3]
+                  0.002061f, // FreqL[b4]
+                  0.006183f, // FreqL[b5]
+                  0.005977f, // FreqL[b6]
+                  0.000824f, // FreqL[b7]
+                  0.021847f, // FreqL[b8]
+                  0.014839f, // FreqL[b9]
+                  0.052968f, // FreqL[ba]
+                  0.017312f, // FreqL[bb]
+                  0.007626f, // FreqL[bc]
+                  0.000412f, // FreqL[bd]
+                  0.000824f, // FreqL[be]
+                  0.011129f, // FreqL[bf]
+                  0.000000f, // FreqL[c0]
+                  0.000412f, // FreqL[c1]
+                  0.001649f, // FreqL[c2]
+                  0.005977f, // FreqL[c3]
+                  0.065746f, // FreqL[c4]
+                  0.020198f, // FreqL[c5]
+                  0.021434f, // FreqL[c6]
+                  0.014633f, // FreqL[c7]
+                  0.004122f, // FreqL[c8]
+                  0.001649f, // FreqL[c9]
+                  0.000824f, // FreqL[ca]
+                  0.000824f, // FreqL[cb]
+                  0.051937f, // FreqL[cc]
+                  0.019580f, // FreqL[cd]
+                  0.023289f, // FreqL[ce]
+                  0.026381f, // FreqL[cf]
+                  0.040396f, // FreqL[d0]
+                  0.009068f, // FreqL[d1]
+                  0.001443f, // FreqL[d2]
+                  0.003710f, // FreqL[d3]
+                  0.007420f, // FreqL[d4]
+                  0.001443f, // FreqL[d5]
+                  0.013190f, // FreqL[d6]
+                  0.002885f, // FreqL[d7]
+                  0.000412f, // FreqL[d8]
+                  0.003298f, // FreqL[d9]
+                  0.025969f, // FreqL[da]
+                  0.000412f, // FreqL[db]
+                  0.000412f, // FreqL[dc]
+                  0.006183f, // FreqL[dd]
+                  0.003298f, // FreqL[de]
+                  0.066983f, // FreqL[df]
+                  0.002679f, // FreqL[e0]
+                  0.002267f, // FreqL[e1]
+                  0.011129f, // FreqL[e2]
+                  0.000412f, // FreqL[e3]
+                  0.010099f, // FreqL[e4]
+                  0.015251f, // FreqL[e5]
+                  0.007626f, // FreqL[e6]
+                  0.043899f, // FreqL[e7]
+                  0.003710f, // FreqL[e8]
+                  0.002679f, // FreqL[e9]
+                  0.001443f, // FreqL[ea]
+                  0.010923f, // FreqL[eb]
+                  0.002885f, // FreqL[ec]
+                  0.009068f, // FreqL[ed]
+                  0.019992f, // FreqL[ee]
+                  0.000412f, // FreqL[ef]
+                  0.008450f, // FreqL[f0]
+                  0.005153f, // FreqL[f1]
+                  0.000000f, // FreqL[f2]
+                  0.010099f, // FreqL[f3]
+                  0.000000f, // FreqL[f4]
+                  0.001649f, // FreqL[f5]
+                  0.012160f, // FreqL[f6]
+                  0.011542f, // FreqL[f7]
+                  0.006595f, // FreqL[f8]
+                  0.001855f, // FreqL[f9]
+                  0.010923f, // FreqL[fa]
+                  0.000412f, // FreqL[fb]
+                  0.023702f, // FreqL[fc]
+                  0.003710f, // FreqL[fd]
+                  0.001855f  // FreqL[fe]
+
+	};
+
+	mSecondByteStdDev = 0.013937f; // Trail Byte StdDev
+	mSecondByteMean = 0.010638f; // Trail Byte Mean
+	mSecondByteWeight = 0.352563f; // Trial Byte Weight
+	}
+
+}
diff --git a/org/mozilla/intl/chardet/EUCTWStatistics.java b/org/mozilla/intl/chardet/EUCTWStatistics.java
new file mode 100644
index 0000000..f18704a
--- /dev/null
+++ b/org/mozilla/intl/chardet/EUCTWStatistics.java
@@ -0,0 +1,253 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public
+ * License Version 1.1 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Netscape
+ * Communications Corporation.  Portions created by Netscape are
+ * Copyright (C) 1998 Netscape Communications Corporation. All
+ * Rights Reserved.
+ *
+ * Contributor(s):
+ */
+
+package org.mozilla.intl.chardet ;
+
+import java.lang.* ;
+
+public class EUCTWStatistics extends nsEUCStatistics {
+
+
+     static float[] mFirstByteFreq ;
+     static float   mFirstByteStdDev;
+     static float   mFirstByteMean;
+     static float   mFirstByteWeight;
+     static float[] mSecondByteFreq;
+     static float   mSecondByteStdDev;
+     static float   mSecondByteMean;
+     static float   mSecondByteWeight;
+
+     public float[] mFirstByteFreq() { return mFirstByteFreq; }  
+     public float   mFirstByteStdDev()  { return mFirstByteStdDev; }  
+     public float   mFirstByteMean()  { return mFirstByteMean; }  
+     public float   mFirstByteWeight()  { return mFirstByteWeight; }  
+     public float[] mSecondByteFreq()  { return mSecondByteFreq; }  
+     public float   mSecondByteStdDev()  { return mSecondByteStdDev; }  
+     public float   mSecondByteMean()  { return mSecondByteMean; }  
+     public float   mSecondByteWeight()  { return mSecondByteWeight; }  
+
+	public EUCTWStatistics() {
+
+	    mFirstByteFreq = new float[] {
+                0.000000f, // FreqH[a1]
+                0.000000f, // FreqH[a2]
+                0.000000f, // FreqH[a3]
+                0.000000f, // FreqH[a4]
+                0.000000f, // FreqH[a5]
+                0.000000f, // FreqH[a6]
+                0.000000f, // FreqH[a7]
+                0.000000f, // FreqH[a8]
+                0.000000f, // FreqH[a9]
+                0.000000f, // FreqH[aa]
+                0.000000f, // FreqH[ab]
+                0.000000f, // FreqH[ac]
+                0.000000f, // FreqH[ad]
+                0.000000f, // FreqH[ae]
+                0.000000f, // FreqH[af]
+                0.000000f, // FreqH[b0]
+                0.000000f, // FreqH[b1]
+                0.000000f, // FreqH[b2]
+                0.000000f, // FreqH[b3]
+                0.000000f, // FreqH[b4]
+                0.000000f, // FreqH[b5]
+                0.000000f, // FreqH[b6]
+                0.000000f, // FreqH[b7]
+                0.000000f, // FreqH[b8]
+                0.000000f, // FreqH[b9]
+                0.000000f, // FreqH[ba]
+                0.000000f, // FreqH[bb]
+                0.000000f, // FreqH[bc]
+                0.000000f, // FreqH[bd]
+                0.000000f, // FreqH[be]
+                0.000000f, // FreqH[bf]
+                0.000000f, // FreqH[c0]
+                0.000000f, // FreqH[c1]
+                0.000000f, // FreqH[c2]
+                0.000000f, // FreqH[c3]
+                0.119286f, // FreqH[c4]
+                0.052233f, // FreqH[c5]
+                0.044126f, // FreqH[c6]
+                0.052494f, // FreqH[c7]
+                0.045906f, // FreqH[c8]
+                0.019038f, // FreqH[c9]
+                0.032465f, // FreqH[ca]
+                0.026252f, // FreqH[cb]
+                0.025502f, // FreqH[cc]
+                0.015963f, // FreqH[cd]
+                0.052493f, // FreqH[ce]
+                0.019256f, // FreqH[cf]
+                0.015137f, // FreqH[d0]
+                0.031782f, // FreqH[d1]
+                0.017370f, // FreqH[d2]
+                0.018494f, // FreqH[d3]
+                0.015575f, // FreqH[d4]
+                0.016621f, // FreqH[d5]
+                0.007444f, // FreqH[d6]
+                0.011642f, // FreqH[d7]
+                0.013916f, // FreqH[d8]
+                0.019159f, // FreqH[d9]
+                0.016445f, // FreqH[da]
+                0.007851f, // FreqH[db]
+                0.011079f, // FreqH[dc]
+                0.022842f, // FreqH[dd]
+                0.015513f, // FreqH[de]
+                0.010033f, // FreqH[df]
+                0.009950f, // FreqH[e0]
+                0.010347f, // FreqH[e1]
+                0.013103f, // FreqH[e2]
+                0.015371f, // FreqH[e3]
+                0.012502f, // FreqH[e4]
+                0.007436f, // FreqH[e5]
+                0.018253f, // FreqH[e6]
+                0.014134f, // FreqH[e7]
+                0.008907f, // FreqH[e8]
+                0.005411f, // FreqH[e9]
+                0.009570f, // FreqH[ea]
+                0.013598f, // FreqH[eb]
+                0.006092f, // FreqH[ec]
+                0.007409f, // FreqH[ed]
+                0.008432f, // FreqH[ee]
+                0.005816f, // FreqH[ef]
+                0.009349f, // FreqH[f0]
+                0.005472f, // FreqH[f1]
+                0.007170f, // FreqH[f2]
+                0.007420f, // FreqH[f3]
+                0.003681f, // FreqH[f4]
+                0.007523f, // FreqH[f5]
+                0.004610f, // FreqH[f6]
+                0.006154f, // FreqH[f7]
+                0.003348f, // FreqH[f8]
+                0.005074f, // FreqH[f9]
+                0.005922f, // FreqH[fa]
+                0.005254f, // FreqH[fb]
+                0.004682f, // FreqH[fc]
+                0.002093f, // FreqH[fd]
+                0.000000f  // FreqH[fe]
+	};
+
+	mFirstByteStdDev = 0.016681f; // Lead Byte StdDev
+	mFirstByteMean = 0.010638f; // Lead Byte Mean
+	mFirstByteWeight = 0.715599f; // Lead Byte Weight
+
+	mSecondByteFreq = new float[] {
+                 0.028933f, // FreqL[a1]
+                 0.011371f, // FreqL[a2]
+                 0.011053f, // FreqL[a3]
+                 0.007232f, // FreqL[a4]
+                 0.010192f, // FreqL[a5]
+                 0.004093f, // FreqL[a6]
+                 0.015043f, // FreqL[a7]
+                 0.011752f, // FreqL[a8]
+                 0.022387f, // FreqL[a9]
+                 0.008410f, // FreqL[aa]
+                 0.012448f, // FreqL[ab]
+                 0.007473f, // FreqL[ac]
+                 0.003594f, // FreqL[ad]
+                 0.007139f, // FreqL[ae]
+                 0.018912f, // FreqL[af]
+                 0.006083f, // FreqL[b0]
+                 0.003302f, // FreqL[b1]
+                 0.010215f, // FreqL[b2]
+                 0.008791f, // FreqL[b3]
+                 0.024236f, // FreqL[b4]
+                 0.014107f, // FreqL[b5]
+                 0.014108f, // FreqL[b6]
+                 0.010303f, // FreqL[b7]
+                 0.009728f, // FreqL[b8]
+                 0.007877f, // FreqL[b9]
+                 0.009719f, // FreqL[ba]
+                 0.007952f, // FreqL[bb]
+                 0.021028f, // FreqL[bc]
+                 0.005764f, // FreqL[bd]
+                 0.009341f, // FreqL[be]
+                 0.006591f, // FreqL[bf]
+                 0.012517f, // FreqL[c0]
+                 0.005921f, // FreqL[c1]
+                 0.008982f, // FreqL[c2]
+                 0.008771f, // FreqL[c3]
+                 0.012802f, // FreqL[c4]
+                 0.005926f, // FreqL[c5]
+                 0.008342f, // FreqL[c6]
+                 0.003086f, // FreqL[c7]
+                 0.006843f, // FreqL[c8]
+                 0.007576f, // FreqL[c9]
+                 0.004734f, // FreqL[ca]
+                 0.016404f, // FreqL[cb]
+                 0.008803f, // FreqL[cc]
+                 0.008071f, // FreqL[cd]
+                 0.005349f, // FreqL[ce]
+                 0.008566f, // FreqL[cf]
+                 0.010840f, // FreqL[d0]
+                 0.015401f, // FreqL[d1]
+                 0.031904f, // FreqL[d2]
+                 0.008670f, // FreqL[d3]
+                 0.011479f, // FreqL[d4]
+                 0.010936f, // FreqL[d5]
+                 0.007617f, // FreqL[d6]
+                 0.008995f, // FreqL[d7]
+                 0.008114f, // FreqL[d8]
+                 0.008658f, // FreqL[d9]
+                 0.005934f, // FreqL[da]
+                 0.010452f, // FreqL[db]
+                 0.009142f, // FreqL[dc]
+                 0.004519f, // FreqL[dd]
+                 0.008339f, // FreqL[de]
+                 0.007476f, // FreqL[df]
+                 0.007027f, // FreqL[e0]
+                 0.006025f, // FreqL[e1]
+                 0.021804f, // FreqL[e2]
+                 0.024248f, // FreqL[e3]
+                 0.015895f, // FreqL[e4]
+                 0.003768f, // FreqL[e5]
+                 0.010171f, // FreqL[e6]
+                 0.010007f, // FreqL[e7]
+                 0.010178f, // FreqL[e8]
+                 0.008316f, // FreqL[e9]
+                 0.006832f, // FreqL[ea]
+                 0.006364f, // FreqL[eb]
+                 0.009141f, // FreqL[ec]
+                 0.009148f, // FreqL[ed]
+                 0.012081f, // FreqL[ee]
+                 0.011914f, // FreqL[ef]
+                 0.004464f, // FreqL[f0]
+                 0.014257f, // FreqL[f1]
+                 0.006907f, // FreqL[f2]
+                 0.011292f, // FreqL[f3]
+                 0.018622f, // FreqL[f4]
+                 0.008149f, // FreqL[f5]
+                 0.004636f, // FreqL[f6]
+                 0.006612f, // FreqL[f7]
+                 0.013478f, // FreqL[f8]
+                 0.012614f, // FreqL[f9]
+                 0.005186f, // FreqL[fa]
+                 0.048285f, // FreqL[fb]
+                 0.006816f, // FreqL[fc]
+                 0.006743f, // FreqL[fd]
+                 0.008671f  // FreqL[fe]
+	};
+
+	mSecondByteStdDev = 0.006630f; // Trail Byte StdDev
+	mSecondByteMean = 0.010638f; // Trail Byte Mean
+	mSecondByteWeight = 0.284401f; // Trial Byte Weight
+	}
+
+}
diff --git a/org/mozilla/intl/chardet/GB2312Statistics.java b/org/mozilla/intl/chardet/GB2312Statistics.java
new file mode 100644
index 0000000..7abe216
--- /dev/null
+++ b/org/mozilla/intl/chardet/GB2312Statistics.java
@@ -0,0 +1,255 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public
+ * License Version 1.1 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Netscape
+ * Communications Corporation.  Portions created by Netscape are
+ * Copyright (C) 1998 Netscape Communications Corporation. All
+ * Rights Reserved.
+ *
+ * Contributor(s):
+ */
+
+package org.mozilla.intl.chardet ;
+
+import java.lang.* ;
+
+public class GB2312Statistics extends nsEUCStatistics {
+
+
+     static float[] mFirstByteFreq ;
+     static float   mFirstByteStdDev;
+     static float   mFirstByteMean;
+     static float   mFirstByteWeight;
+     static float[] mSecondByteFreq;
+     static float   mSecondByteStdDev;
+     static float   mSecondByteMean;
+     static float   mSecondByteWeight;
+
+     public float[] mFirstByteFreq() { return mFirstByteFreq; }  
+     public float   mFirstByteStdDev()  { return mFirstByteStdDev; }  
+     public float   mFirstByteMean()  { return mFirstByteMean; }  
+     public float   mFirstByteWeight()  { return mFirstByteWeight; }  
+     public float[] mSecondByteFreq()  { return mSecondByteFreq; }  
+     public float   mSecondByteStdDev()  { return mSecondByteStdDev; }  
+     public float   mSecondByteMean()  { return mSecondByteMean; }  
+     public float   mSecondByteWeight()  { return mSecondByteWeight; }  
+
+	public GB2312Statistics() {
+
+	    mFirstByteFreq = new float[] {
+               0.011628f, // FreqH[a1]
+               0.000000f, // FreqH[a2]
+               0.000000f, // FreqH[a3]
+               0.000000f, // FreqH[a4]
+               0.000000f, // FreqH[a5]
+               0.000000f, // FreqH[a6]
+               0.000000f, // FreqH[a7]
+               0.000000f, // FreqH[a8]
+               0.000000f, // FreqH[a9]
+               0.000000f, // FreqH[aa]
+               0.000000f, // FreqH[ab]
+               0.000000f, // FreqH[ac]
+               0.000000f, // FreqH[ad]
+               0.000000f, // FreqH[ae]
+               0.000000f, // FreqH[af]
+               0.011628f, // FreqH[b0]
+               0.012403f, // FreqH[b1]
+               0.009302f, // FreqH[b2]
+               0.003876f, // FreqH[b3]
+               0.017829f, // FreqH[b4]
+               0.037209f, // FreqH[b5]
+               0.008527f, // FreqH[b6]
+               0.010078f, // FreqH[b7]
+               0.019380f, // FreqH[b8]
+               0.054264f, // FreqH[b9]
+               0.010078f, // FreqH[ba]
+               0.041085f, // FreqH[bb]
+               0.020930f, // FreqH[bc]
+               0.018605f, // FreqH[bd]
+               0.010078f, // FreqH[be]
+               0.013178f, // FreqH[bf]
+               0.016279f, // FreqH[c0]
+               0.006202f, // FreqH[c1]
+               0.009302f, // FreqH[c2]
+               0.017054f, // FreqH[c3]
+               0.011628f, // FreqH[c4]
+               0.008527f, // FreqH[c5]
+               0.004651f, // FreqH[c6]
+               0.006202f, // FreqH[c7]
+               0.017829f, // FreqH[c8]
+               0.024806f, // FreqH[c9]
+               0.020155f, // FreqH[ca]
+               0.013953f, // FreqH[cb]
+               0.032558f, // FreqH[cc]
+               0.035659f, // FreqH[cd]
+               0.068217f, // FreqH[ce]
+               0.010853f, // FreqH[cf]
+               0.036434f, // FreqH[d0]
+               0.117054f, // FreqH[d1]
+               0.027907f, // FreqH[d2]
+               0.100775f, // FreqH[d3]
+               0.010078f, // FreqH[d4]
+               0.017829f, // FreqH[d5]
+               0.062016f, // FreqH[d6]
+               0.012403f, // FreqH[d7]
+               0.000000f, // FreqH[d8]
+               0.000000f, // FreqH[d9]
+               0.000000f, // FreqH[da]
+               0.000000f, // FreqH[db]
+               0.000000f, // FreqH[dc]
+               0.000000f, // FreqH[dd]
+               0.000000f, // FreqH[de]
+               0.000000f, // FreqH[df]
+               0.000000f, // FreqH[e0]
+               0.000000f, // FreqH[e1]
+               0.000000f, // FreqH[e2]
+               0.000000f, // FreqH[e3]
+               0.000000f, // FreqH[e4]
+               0.000000f, // FreqH[e5]
+               0.000000f, // FreqH[e6]
+               0.000000f, // FreqH[e7]
+               0.000000f, // FreqH[e8]
+               0.000000f, // FreqH[e9]
+               0.001550f, // FreqH[ea]
+               0.000000f, // FreqH[eb]
+               0.000000f, // FreqH[ec]
+               0.000000f, // FreqH[ed]
+               0.000000f, // FreqH[ee]
+               0.000000f, // FreqH[ef]
+               0.000000f, // FreqH[f0]
+               0.000000f, // FreqH[f1]
+               0.000000f, // FreqH[f2]
+               0.000000f, // FreqH[f3]
+               0.000000f, // FreqH[f4]
+               0.000000f, // FreqH[f5]
+               0.000000f, // FreqH[f6]
+               0.000000f, // FreqH[f7]
+               0.000000f, // FreqH[f8]
+               0.000000f, // FreqH[f9]
+               0.000000f, // FreqH[fa]
+               0.000000f, // FreqH[fb]
+               0.000000f, // FreqH[fc]
+               0.000000f, // FreqH[fd]
+               0.000000f  // FreqH[fe]
+
+	};
+
+	mFirstByteStdDev = 0.020081f; // Lead Byte StdDev
+	mFirstByteMean = 0.010638f; // Lead Byte Mean
+	mFirstByteWeight = 0.586533f; // Lead Byte Weight
+
+	mSecondByteFreq = new float[] {
+                    0.006202f, // FreqL[a1]
+                    0.031008f, // FreqL[a2]
+                    0.005426f, // FreqL[a3]
+                    0.003101f, // FreqL[a4]
+                    0.001550f, // FreqL[a5]
+                    0.003101f, // FreqL[a6]
+                    0.082171f, // FreqL[a7]
+                    0.014729f, // FreqL[a8]
+                    0.006977f, // FreqL[a9]
+                    0.001550f, // FreqL[aa]
+                    0.013953f, // FreqL[ab]
+                    0.000000f, // FreqL[ac]
+                    0.013953f, // FreqL[ad]
+                    0.010078f, // FreqL[ae]
+                    0.008527f, // FreqL[af]
+                    0.006977f, // FreqL[b0]
+                    0.004651f, // FreqL[b1]
+                    0.003101f, // FreqL[b2]
+                    0.003101f, // FreqL[b3]
+                    0.003101f, // FreqL[b4]
+                    0.008527f, // FreqL[b5]
+                    0.003101f, // FreqL[b6]
+                    0.005426f, // FreqL[b7]
+                    0.005426f, // FreqL[b8]
+                    0.005426f, // FreqL[b9]
+                    0.003101f, // FreqL[ba]
+                    0.001550f, // FreqL[bb]
+                    0.006202f, // FreqL[bc]
+                    0.014729f, // FreqL[bd]
+                    0.010853f, // FreqL[be]
+                    0.000000f, // FreqL[bf]
+                    0.011628f, // FreqL[c0]
+                    0.000000f, // FreqL[c1]
+                    0.031783f, // FreqL[c2]
+                    0.013953f, // FreqL[c3]
+                    0.030233f, // FreqL[c4]
+                    0.039535f, // FreqL[c5]
+                    0.008527f, // FreqL[c6]
+                    0.015504f, // FreqL[c7]
+                    0.000000f, // FreqL[c8]
+                    0.003101f, // FreqL[c9]
+                    0.008527f, // FreqL[ca]
+                    0.016279f, // FreqL[cb]
+                    0.005426f, // FreqL[cc]
+                    0.001550f, // FreqL[cd]
+                    0.013953f, // FreqL[ce]
+                    0.013953f, // FreqL[cf]
+                    0.044961f, // FreqL[d0]
+                    0.003101f, // FreqL[d1]
+                    0.004651f, // FreqL[d2]
+                    0.006977f, // FreqL[d3]
+                    0.001550f, // FreqL[d4]
+                    0.005426f, // FreqL[d5]
+                    0.012403f, // FreqL[d6]
+                    0.001550f, // FreqL[d7]
+                    0.015504f, // FreqL[d8]
+                    0.000000f, // FreqL[d9]
+                    0.006202f, // FreqL[da]
+                    0.001550f, // FreqL[db]
+                    0.000000f, // FreqL[dc]
+                    0.007752f, // FreqL[dd]
+                    0.006977f, // FreqL[de]
+                    0.001550f, // FreqL[df]
+                    0.009302f, // FreqL[e0]
+                    0.011628f, // FreqL[e1]
+                    0.004651f, // FreqL[e2]
+                    0.010853f, // FreqL[e3]
+                    0.012403f, // FreqL[e4]
+                    0.017829f, // FreqL[e5]
+                    0.005426f, // FreqL[e6]
+                    0.024806f, // FreqL[e7]
+                    0.000000f, // FreqL[e8]
+                    0.006202f, // FreqL[e9]
+                    0.000000f, // FreqL[ea]
+                    0.082171f, // FreqL[eb]
+                    0.015504f, // FreqL[ec]
+                    0.004651f, // FreqL[ed]
+                    0.000000f, // FreqL[ee]
+                    0.006977f, // FreqL[ef]
+                    0.004651f, // FreqL[f0]
+                    0.000000f, // FreqL[f1]
+                    0.008527f, // FreqL[f2]
+                    0.012403f, // FreqL[f3]
+                    0.004651f, // FreqL[f4]
+                    0.003876f, // FreqL[f5]
+                    0.003101f, // FreqL[f6]
+                    0.022481f, // FreqL[f7]
+                    0.024031f, // FreqL[f8]
+                    0.001550f, // FreqL[f9]
+                    0.047287f, // FreqL[fa]
+                    0.009302f, // FreqL[fb]
+                    0.001550f, // FreqL[fc]
+                    0.005426f, // FreqL[fd]
+                    0.017054f  // FreqL[fe]
+
+	};
+
+	mSecondByteStdDev = 0.014156f; // Trail Byte StdDev
+	mSecondByteMean = 0.010638f; // Trail Byte Mean
+	mSecondByteWeight = 0.413467f; // Trial Byte Weight
+	}
+
+}
diff --git a/org/mozilla/intl/chardet/HtmlCharsetDetector.java b/org/mozilla/intl/chardet/HtmlCharsetDetector.java
new file mode 100644
index 0000000..897c3a8
--- /dev/null
+++ b/org/mozilla/intl/chardet/HtmlCharsetDetector.java
@@ -0,0 +1,106 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public
+ * License Version 1.1 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Netscape
+ * Communications Corporation.  Portions created by Netscape are
+ * Copyright (C) 1998 Netscape Communications Corporation. All
+ * Rights Reserved.
+ *
+ * Contributor(s):
+ */
+/*
+ * DO NOT EDIT THIS DOCUMENT MANUALLY !!!
+ * THIS FILE IS AUTOMATICALLY GENERATED BY THE TOOLS UNDER
+ *    AutoDetect/tools/
+ */
+
+package org.mozilla.intl.chardet ;
+import java.io.* ;
+import java.net.* ;
+import java.util.* ;
+import org.mozilla.intl.chardet.* ;
+
+public class HtmlCharsetDetector {
+
+    public static boolean found = false ;
+
+    public static void main(String argv[]) throws Exception {
+
+	if (argv.length != 1 && argv.length != 2) {
+
+	  System.out.println(
+			"Usage: HtmlCharsetDetector <url> [<languageHint>]");
+
+	  System.out.println("");
+	  System.out.println("Where <url> is http://...");
+	  System.out.println("For optional <languageHint>. Use following...");
+	  System.out.println("		1 => Japanese");
+	  System.out.println("		2 => Chinese");
+	  System.out.println("		3 => Simplified Chinese");
+	  System.out.println("		4 => Traditional Chinese");
+	  System.out.println("		5 => Korean");
+	  System.out.println("		6 => Dont know (default)");
+
+	  return ;
+	} 
+
+
+	// Initalize the nsDetector() ;
+	int lang = (argv.length == 2)? Integer.parseInt(argv[1]) 
+					 : nsPSMDetector.ALL ;
+	nsDetector det = new nsDetector(lang) ;
+
+	// Set an observer...
+	// The Notify() will be called when a matching charset is found.
+
+	det.Init(new nsICharsetDetectionObserver() {
+		public void Notify(String charset) {
+		    HtmlCharsetDetector.found = true ;
+		    System.out.println("CHARSET = " + charset);
+		}
+    	});
+
+	URL url = new URL(argv[0]);
+	BufferedInputStream imp = new BufferedInputStream(url.openStream());
+	
+	byte[] buf = new byte[1024] ;
+	int len;
+	boolean done = false ;
+	boolean isAscii = true ;
+	   
+	while( (len=imp.read(buf,0,buf.length)) != -1) {
+
+		// Check if the stream is only ascii.
+		if (isAscii)
+		    isAscii = det.isAscii(buf,len);
+
+		// DoIt if non-ascii and not done yet.
+		if (!isAscii && !done)
+ 		    done = det.DoIt(buf,len, false);
+	}
+	det.DataEnd();
+
+	if (isAscii) {
+	   System.out.println("CHARSET = ASCII");
+	   found = true ;
+	}
+
+	if (!found) {
+	   String prob[] = det.getProbableCharsets() ;
+	   for(int i=0; i<prob.length; i++) {
+		System.out.println("Probable Charset = " + prob[i]);
+	   }
+	}
+    }
+}
diff --git a/org/mozilla/intl/chardet/nsBIG5Verifier.java b/org/mozilla/intl/chardet/nsBIG5Verifier.java
new file mode 100644
index 0000000..e60b0f3
--- /dev/null
+++ b/org/mozilla/intl/chardet/nsBIG5Verifier.java
@@ -0,0 +1,99 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public
+ * License Version 1.1 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Netscape
+ * Communications Corporation.  Portions created by Netscape are
+ * Copyright (C) 1998 Netscape Communications Corporation. All
+ * Rights Reserved.
+ *
+ * Contributor(s): 
+ */
+/* 
+ * DO NOT EDIT THIS DOCUMENT MANUALLY !!!
+ * THIS FILE IS AUTOMATICALLY GENERATED BY THE TOOLS UNDER
+ *    AutoDetect/tools/
+ */
+
+package org.mozilla.intl.chardet ;
+
+import java.lang.*;
+
+public class nsBIG5Verifier extends nsVerifier {
+
+	 static int[]  cclass   ; 
+	 static int[]  states   ; 
+	 static int    stFactor ; 
+	 static String charset  ; 
+
+	 public int[]  cclass()   { return cclass ;   }
+	 public int[]  states()   { return states ;   }
+	 public int    stFactor() { return stFactor ; }
+	 public String charset()  { return charset ;  }
+
+   public nsBIG5Verifier() {
+
+      cclass = new int[256/8] ;
+
+      cclass[0] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[1] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[2] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[3] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[4] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[5] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[6] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[7] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[8] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[9] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[10] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[11] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[12] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[13] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[14] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[15] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[16] = ((int)(((  ((int)(((  ((int)((( 4) << 4) | (4)))  ) << 8) | (((int)(((4) << 4) | ( 4))) ))) ) << 16) | (  ((int)(((  ((int)(((4) << 4) | (4))) ) << 8) | (   ((int)(((4) << 4) | (4))) )))))) ;
+      cclass[17] = ((int)(((  ((int)(((  ((int)((( 4) << 4) | (4)))  ) << 8) | (((int)(((4) << 4) | ( 4))) ))) ) << 16) | (  ((int)(((  ((int)(((4) << 4) | (4))) ) << 8) | (   ((int)(((4) << 4) | (4))) )))))) ;
+      cclass[18] = ((int)(((  ((int)(((  ((int)((( 4) << 4) | (4)))  ) << 8) | (((int)(((4) << 4) | ( 4))) ))) ) << 16) | (  ((int)(((  ((int)(((4) << 4) | (4))) ) << 8) | (   ((int)(((4) << 4) | (4))) )))))) ;
+      cclass[19] = ((int)(((  ((int)(((  ((int)((( 4) << 4) | (4)))  ) << 8) | (((int)(((4) << 4) | ( 4))) ))) ) << 16) | (  ((int)(((  ((int)(((4) << 4) | (4))) ) << 8) | (   ((int)(((4) << 4) | (4))) )))))) ;
+      cclass[20] = ((int)(((  ((int)(((  ((int)((( 3) << 4) | (3)))  ) << 8) | (((int)(((3) << 4) | ( 3))) ))) ) << 16) | (  ((int)(((  ((int)(((3) << 4) | (3))) ) << 8) | (   ((int)(((3) << 4) | (4))) )))))) ;
+      cclass[21] = ((int)(((  ((int)(((  ((int)((( 3) << 4) | (3)))  ) << 8) | (((int)(((3) << 4) | ( 3))) ))) ) << 16) | (  ((int)(((  ((int)(((3) << 4) | (3))) ) << 8) | (   ((int)(((3) << 4) | (3))) )))))) ;
+      cclass[22] = ((int)(((  ((int)(((  ((int)((( 3) << 4) | (3)))  ) << 8) | (((int)(((3) << 4) | ( 3))) ))) ) << 16) | (  ((int)(((  ((int)(((3) << 4) | (3))) ) << 8) | (   ((int)(((3) << 4) | (3))) )))))) ;
+      cclass[23] = ((int)(((  ((int)(((  ((int)((( 3) << 4) | (3)))  ) << 8) | (((int)(((3) << 4) | ( 3))) ))) ) << 16) | (  ((int)(((  ((int)(((3) << 4) | (3))) ) << 8) | (   ((int)(((3) << 4) | (3))) )))))) ;
+      cclass[24] = ((int)(((  ((int)(((  ((int)((( 3) << 4) | (3)))  ) << 8) | (((int)(((3) << 4) | ( 3))) ))) ) << 16) | (  ((int)(((  ((int)(((3) << 4) | (3))) ) << 8) | (   ((int)(((3) << 4) | (3))) )))))) ;
+      cclass[25] = ((int)(((  ((int)(((  ((int)((( 3) << 4) | (3)))  ) << 8) | (((int)(((3) << 4) | ( 3))) ))) ) << 16) | (  ((int)(((  ((int)(((3) << 4) | (3))) ) << 8) | (   ((int)(((3) << 4) | (3))) )))))) ;
+      cclass[26] = ((int)(((  ((int)(((  ((int)((( 3) << 4) | (3)))  ) << 8) | (((int)(((3) << 4) | ( 3))) ))) ) << 16) | (  ((int)(((  ((int)(((3) << 4) | (3))) ) << 8) | (   ((int)(((3) << 4) | (3))) )))))) ;
+      cclass[27] = ((int)(((  ((int)(((  ((int)((( 3) << 4) | (3)))  ) << 8) | (((int)(((3) << 4) | ( 3))) ))) ) << 16) | (  ((int)(((  ((int)(((3) << 4) | (3))) ) << 8) | (   ((int)(((3) << 4) | (3))) )))))) ;
+      cclass[28] = ((int)(((  ((int)(((  ((int)((( 3) << 4) | (3)))  ) << 8) | (((int)(((3) << 4) | ( 3))) ))) ) << 16) | (  ((int)(((  ((int)(((3) << 4) | (3))) ) << 8) | (   ((int)(((3) << 4) | (3))) )))))) ;
+      cclass[29] = ((int)(((  ((int)(((  ((int)((( 3) << 4) | (3)))  ) << 8) | (((int)(((3) << 4) | ( 3))) ))) ) << 16) | (  ((int)(((  ((int)(((3) << 4) | (3))) ) << 8) | (   ((int)(((3) << 4) | (3))) )))))) ;
+      cclass[30] = ((int)(((  ((int)(((  ((int)((( 3) << 4) | (3)))  ) << 8) | (((int)(((3) << 4) | ( 3))) ))) ) << 16) | (  ((int)(((  ((int)(((3) << 4) | (3))) ) << 8) | (   ((int)(((3) << 4) | (3))) )))))) ;
+      cclass[31] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (3)))  ) << 8) | (((int)(((3) << 4) | ( 3))) ))) ) << 16) | (  ((int)(((  ((int)(((3) << 4) | (3))) ) << 8) | (   ((int)(((3) << 4) | (3))) )))))) ;
+
+
+
+      states = new int[3] ;
+
+      states[0] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((     3) << 4) | (eStart))) ) << 8) | (   ((int)(((eStart) << 4) | (eError))) )))))) ;
+      states[1] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eItsMe)))  ) << 8) | (((int)(((eItsMe) << 4) | ( eItsMe))) ))) ) << 16) | (  ((int)(((  ((int)(((eItsMe) << 4) | (eItsMe))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[2] = ((int)(((  ((int)(((  ((int)((( eStart) << 4) | (eStart)))  ) << 8) | (((int)(((eStart) << 4) | ( eStart))) ))) ) << 16) | (  ((int)(((  ((int)(((eStart) << 4) | (eStart))) ) << 8) | (   ((int)(((eStart) << 4) | (eError))) )))))) ;
+
+
+
+      charset =  "Big5";
+      stFactor =  5;
+
+   }
+
+   public boolean isUCS2() { return  false; } ;
+
+
+}
diff --git a/org/mozilla/intl/chardet/nsCP1252Verifier.java b/org/mozilla/intl/chardet/nsCP1252Verifier.java
new file mode 100644
index 0000000..6cce032
--- /dev/null
+++ b/org/mozilla/intl/chardet/nsCP1252Verifier.java
@@ -0,0 +1,99 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public
+ * License Version 1.1 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Netscape
+ * Communications Corporation.  Portions created by Netscape are
+ * Copyright (C) 1998 Netscape Communications Corporation. All
+ * Rights Reserved.
+ *
+ * Contributor(s): 
+ */
+/* 
+ * DO NOT EDIT THIS DOCUMENT MANUALLY !!!
+ * THIS FILE IS AUTOMATICALLY GENERATED BY THE TOOLS UNDER
+ *    AutoDetect/tools/
+ */
+
+package org.mozilla.intl.chardet ;
+
+import java.lang.*;
+
+public class nsCP1252Verifier extends nsVerifier {
+
+	 static int[]  cclass   ; 
+	 static int[]  states   ; 
+	 static int    stFactor ; 
+	 static String charset  ; 
+
+	 public int[]  cclass()   { return cclass ;   }
+	 public int[]  states()   { return states ;   }
+	 public int    stFactor() { return stFactor ; }
+	 public String charset()  { return charset ;  }
+
+   public nsCP1252Verifier() {
+
+      cclass = new int[256/8] ;
+
+      cclass[0] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (1))) )))))) ;
+      cclass[1] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[2] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[3] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[4] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[5] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[6] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[7] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[8] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[9] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[10] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[11] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[12] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[13] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[14] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[15] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[16] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((0) << 4) | (2))) )))))) ;
+      cclass[17] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (1)))  ) << 8) | (((int)(((0) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (1))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[18] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (0))) )))))) ;
+      cclass[19] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((0) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (1))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[20] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[21] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[22] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[23] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[24] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[25] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[26] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[27] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[28] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[29] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[30] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[31] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+
+
+
+      states = new int[3] ;
+
+      states[0] = ((int)(((  ((int)(((  ((int)((( eItsMe) << 4) | (eItsMe)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eStart))) ) << 8) | (   ((int)(((     3) << 4) | (eError))) )))))) ;
+      states[1] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (     4)))  ) << 8) | (((int)(((     5) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eStart) << 4) | (     4))) ) << 8) | (   ((int)(((eError) << 4) | (eItsMe))) )))))) ;
+      states[2] = ((int)(((  ((int)(((  ((int)((( eStart) << 4) | (eStart)))  ) << 8) | (((int)(((eStart) << 4) | ( eStart))) ))) ) << 16) | (  ((int)(((  ((int)(((eStart) << 4) | (eStart))) ) << 8) | (   ((int)(((     4) << 4) | (eError))) )))))) ;
+
+
+
+      charset =  "windows-1252";
+      stFactor =  3;
+
+   }
+
+   public boolean isUCS2() { return  false; } ;
+
+
+}
diff --git a/org/mozilla/intl/chardet/nsDetector.java b/org/mozilla/intl/chardet/nsDetector.java
new file mode 100644
index 0000000..e539ea7
--- /dev/null
+++ b/org/mozilla/intl/chardet/nsDetector.java
@@ -0,0 +1,75 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public
+ * License Version 1.1 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Netscape
+ * Communications Corporation.  Portions created by Netscape are
+ * Copyright (C) 1998 Netscape Communications Corporation. All
+ * Rights Reserved.
+ *
+ * Contributor(s):
+ */
+
+package org.mozilla.intl.chardet ;
+
+import java.lang.* ;
+
+public class nsDetector extends nsPSMDetector 
+			implements nsICharsetDetector {
+
+	nsICharsetDetectionObserver mObserver = null ;
+
+	public nsDetector() {
+		super() ;
+	}
+
+	public nsDetector(int langFlag) {
+		super(langFlag) ;
+	}
+
+	public void Init(nsICharsetDetectionObserver aObserver) {
+
+	  	mObserver = aObserver ;
+		return ;
+
+	}
+
+	public boolean DoIt(byte[] aBuf, int aLen, boolean oDontFeedMe) {
+
+		if (aBuf == null || oDontFeedMe )
+		    return false ;
+
+		this.HandleData(aBuf, aLen) ;	
+		return mDone ;
+	}
+
+	public void Done() {
+		this.DataEnd() ;
+		return ;
+	}
+
+	public void Report(String charset) {
+		if (mObserver != null)
+		    mObserver.Notify(charset)  ;
+	}
+
+	public boolean isAscii(byte[] aBuf, int aLen) {
+
+                for(int i=0; i<aLen; i++) {
+                   if ((0x0080 & aBuf[i]) != 0) {
+                      return false ;
+                   }
+                }
+		return true ;
+	}
+}
diff --git a/org/mozilla/intl/chardet/nsEUCJPVerifier.java b/org/mozilla/intl/chardet/nsEUCJPVerifier.java
new file mode 100644
index 0000000..dea351d
--- /dev/null
+++ b/org/mozilla/intl/chardet/nsEUCJPVerifier.java
@@ -0,0 +1,101 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public
+ * License Version 1.1 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Netscape
+ * Communications Corporation.  Portions created by Netscape are
+ * Copyright (C) 1998 Netscape Communications Corporation. All
+ * Rights Reserved.
+ *
+ * Contributor(s): 
+ */
+/* 
+ * DO NOT EDIT THIS DOCUMENT MANUALLY !!!
+ * THIS FILE IS AUTOMATICALLY GENERATED BY THE TOOLS UNDER
+ *    AutoDetect/tools/
+ */
+
+package org.mozilla.intl.chardet ;
+
+import java.lang.*;
+
+public class nsEUCJPVerifier extends nsVerifier {
+
+	 static int[]  cclass   ; 
+	 static int[]  states   ; 
+	 static int    stFactor ; 
+	 static String charset  ; 
+
+	 public int[]  cclass()   { return cclass ;   }
+	 public int[]  states()   { return states ;   }
+	 public int    stFactor() { return stFactor ; }
+	 public String charset()  { return charset ;  }
+
+   public nsEUCJPVerifier() {
+
+      cclass = new int[256/8] ;
+
+      cclass[0] = ((int)(((  ((int)(((  ((int)((( 4) << 4) | (4)))  ) << 8) | (((int)(((4) << 4) | ( 4))) ))) ) << 16) | (  ((int)(((  ((int)(((4) << 4) | (4))) ) << 8) | (   ((int)(((4) << 4) | (4))) )))))) ;
+      cclass[1] = ((int)(((  ((int)(((  ((int)((( 5) << 4) | (5)))  ) << 8) | (((int)(((4) << 4) | ( 4))) ))) ) << 16) | (  ((int)(((  ((int)(((4) << 4) | (4))) ) << 8) | (   ((int)(((4) << 4) | (4))) )))))) ;
+      cclass[2] = ((int)(((  ((int)(((  ((int)((( 4) << 4) | (4)))  ) << 8) | (((int)(((4) << 4) | ( 4))) ))) ) << 16) | (  ((int)(((  ((int)(((4) << 4) | (4))) ) << 8) | (   ((int)(((4) << 4) | (4))) )))))) ;
+      cclass[3] = ((int)(((  ((int)(((  ((int)((( 4) << 4) | (4)))  ) << 8) | (((int)(((4) << 4) | ( 4))) ))) ) << 16) | (  ((int)(((  ((int)(((5) << 4) | (4))) ) << 8) | (   ((int)(((4) << 4) | (4))) )))))) ;
+      cclass[4] = ((int)(((  ((int)(((  ((int)((( 4) << 4) | (4)))  ) << 8) | (((int)(((4) << 4) | ( 4))) ))) ) << 16) | (  ((int)(((  ((int)(((4) << 4) | (4))) ) << 8) | (   ((int)(((4) << 4) | (4))) )))))) ;
+      cclass[5] = ((int)(((  ((int)(((  ((int)((( 4) << 4) | (4)))  ) << 8) | (((int)(((4) << 4) | ( 4))) ))) ) << 16) | (  ((int)(((  ((int)(((4) << 4) | (4))) ) << 8) | (   ((int)(((4) << 4) | (4))) )))))) ;
+      cclass[6] = ((int)(((  ((int)(((  ((int)((( 4) << 4) | (4)))  ) << 8) | (((int)(((4) << 4) | ( 4))) ))) ) << 16) | (  ((int)(((  ((int)(((4) << 4) | (4))) ) << 8) | (   ((int)(((4) << 4) | (4))) )))))) ;
+      cclass[7] = ((int)(((  ((int)(((  ((int)((( 4) << 4) | (4)))  ) << 8) | (((int)(((4) << 4) | ( 4))) ))) ) << 16) | (  ((int)(((  ((int)(((4) << 4) | (4))) ) << 8) | (   ((int)(((4) << 4) | (4))) )))))) ;
+      cclass[8] = ((int)(((  ((int)(((  ((int)((( 4) << 4) | (4)))  ) << 8) | (((int)(((4) << 4) | ( 4))) ))) ) << 16) | (  ((int)(((  ((int)(((4) << 4) | (4))) ) << 8) | (   ((int)(((4) << 4) | (4))) )))))) ;
+      cclass[9] = ((int)(((  ((int)(((  ((int)((( 4) << 4) | (4)))  ) << 8) | (((int)(((4) << 4) | ( 4))) ))) ) << 16) | (  ((int)(((  ((int)(((4) << 4) | (4))) ) << 8) | (   ((int)(((4) << 4) | (4))) )))))) ;
+      cclass[10] = ((int)(((  ((int)(((  ((int)((( 4) << 4) | (4)))  ) << 8) | (((int)(((4) << 4) | ( 4))) ))) ) << 16) | (  ((int)(((  ((int)(((4) << 4) | (4))) ) << 8) | (   ((int)(((4) << 4) | (4))) )))))) ;
+      cclass[11] = ((int)(((  ((int)(((  ((int)((( 4) << 4) | (4)))  ) << 8) | (((int)(((4) << 4) | ( 4))) ))) ) << 16) | (  ((int)(((  ((int)(((4) << 4) | (4))) ) << 8) | (   ((int)(((4) << 4) | (4))) )))))) ;
+      cclass[12] = ((int)(((  ((int)(((  ((int)((( 4) << 4) | (4)))  ) << 8) | (((int)(((4) << 4) | ( 4))) ))) ) << 16) | (  ((int)(((  ((int)(((4) << 4) | (4))) ) << 8) | (   ((int)(((4) << 4) | (4))) )))))) ;
+      cclass[13] = ((int)(((  ((int)(((  ((int)((( 4) << 4) | (4)))  ) << 8) | (((int)(((4) << 4) | ( 4))) ))) ) << 16) | (  ((int)(((  ((int)(((4) << 4) | (4))) ) << 8) | (   ((int)(((4) << 4) | (4))) )))))) ;
+      cclass[14] = ((int)(((  ((int)(((  ((int)((( 4) << 4) | (4)))  ) << 8) | (((int)(((4) << 4) | ( 4))) ))) ) << 16) | (  ((int)(((  ((int)(((4) << 4) | (4))) ) << 8) | (   ((int)(((4) << 4) | (4))) )))))) ;
+      cclass[15] = ((int)(((  ((int)(((  ((int)((( 4) << 4) | (4)))  ) << 8) | (((int)(((4) << 4) | ( 4))) ))) ) << 16) | (  ((int)(((  ((int)(((4) << 4) | (4))) ) << 8) | (   ((int)(((4) << 4) | (4))) )))))) ;
+      cclass[16] = ((int)(((  ((int)(((  ((int)((( 5) << 4) | (5)))  ) << 8) | (((int)(((5) << 4) | ( 5))) ))) ) << 16) | (  ((int)(((  ((int)(((5) << 4) | (5))) ) << 8) | (   ((int)(((5) << 4) | (5))) )))))) ;
+      cclass[17] = ((int)(((  ((int)(((  ((int)((( 3) << 4) | (1)))  ) << 8) | (((int)(((5) << 4) | ( 5))) ))) ) << 16) | (  ((int)(((  ((int)(((5) << 4) | (5))) ) << 8) | (   ((int)(((5) << 4) | (5))) )))))) ;
+      cclass[18] = ((int)(((  ((int)(((  ((int)((( 5) << 4) | (5)))  ) << 8) | (((int)(((5) << 4) | ( 5))) ))) ) << 16) | (  ((int)(((  ((int)(((5) << 4) | (5))) ) << 8) | (   ((int)(((5) << 4) | (5))) )))))) ;
+      cclass[19] = ((int)(((  ((int)(((  ((int)((( 5) << 4) | (5)))  ) << 8) | (((int)(((5) << 4) | ( 5))) ))) ) << 16) | (  ((int)(((  ((int)(((5) << 4) | (5))) ) << 8) | (   ((int)(((5) << 4) | (5))) )))))) ;
+      cclass[20] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (5))) )))))) ;
+      cclass[21] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[22] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[23] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[24] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[25] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[26] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[27] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[28] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[29] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[30] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[31] = ((int)(((  ((int)(((  ((int)((( 5) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+
+
+
+      states = new int[5] ;
+
+      states[0] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((eError) << 4) | ( eStart))) ))) ) << 16) | (  ((int)(((  ((int)(((     5) << 4) | (     3))) ) << 8) | (   ((int)(((     4) << 4) | (     3))) )))))) ;
+      states[1] = ((int)(((  ((int)(((  ((int)((( eItsMe) << 4) | (eItsMe)))  ) << 8) | (((int)(((eItsMe) << 4) | ( eItsMe))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[2] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((eError) << 4) | ( eStart))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eStart))) ) << 8) | (   ((int)(((eItsMe) << 4) | (eItsMe))) )))))) ;
+      states[3] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (     3)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eStart))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[4] = ((int)(((  ((int)(((  ((int)((( eStart) << 4) | (eStart)))  ) << 8) | (((int)(((eStart) << 4) | ( eStart))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (     3))) )))))) ;
+
+
+
+      charset =  "EUC-JP";
+      stFactor =  6;
+
+   }
+
+   public boolean isUCS2() { return  false; } ;
+
+
+}
diff --git a/org/mozilla/intl/chardet/nsEUCKRVerifier.java b/org/mozilla/intl/chardet/nsEUCKRVerifier.java
new file mode 100644
index 0000000..af9cca9
--- /dev/null
+++ b/org/mozilla/intl/chardet/nsEUCKRVerifier.java
@@ -0,0 +1,98 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public
+ * License Version 1.1 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Netscape
+ * Communications Corporation.  Portions created by Netscape are
+ * Copyright (C) 1998 Netscape Communications Corporation. All
+ * Rights Reserved.
+ *
+ * Contributor(s): 
+ */
+/* 
+ * DO NOT EDIT THIS DOCUMENT MANUALLY !!!
+ * THIS FILE IS AUTOMATICALLY GENERATED BY THE TOOLS UNDER
+ *    AutoDetect/tools/
+ */
+
+package org.mozilla.intl.chardet ;
+
+import java.lang.*;
+
+public class nsEUCKRVerifier extends nsVerifier {
+
+	 static int[]  cclass   ; 
+	 static int[]  states   ; 
+	 static int    stFactor ; 
+	 static String charset  ; 
+
+	 public int[]  cclass()   { return cclass ;   }
+	 public int[]  states()   { return states ;   }
+	 public int    stFactor() { return stFactor ; }
+	 public String charset()  { return charset ;  }
+
+   public nsEUCKRVerifier() {
+
+      cclass = new int[256/8] ;
+
+      cclass[0] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[1] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[2] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[3] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[4] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[5] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[6] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[7] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[8] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[9] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[10] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[11] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[12] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[13] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[14] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[15] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[16] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[17] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[18] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[19] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[20] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (0))) )))))) ;
+      cclass[21] = ((int)(((  ((int)(((  ((int)((( 3) << 4) | (3)))  ) << 8) | (((int)(((3) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[22] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[23] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[24] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[25] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((3) << 4) | (2))) )))))) ;
+      cclass[26] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[27] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[28] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[29] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[30] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[31] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+
+
+
+      states = new int[2] ;
+
+      states[0] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (     3))) ) << 8) | (   ((int)(((eStart) << 4) | (eError))) )))))) ;
+      states[1] = ((int)(((  ((int)(((  ((int)((( eStart) << 4) | (eStart)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eItsMe) << 4) | (eItsMe))) ) << 8) | (   ((int)(((eItsMe) << 4) | (eItsMe))) )))))) ;
+
+
+
+      charset =  "EUC-KR";
+      stFactor =  4;
+
+   }
+
+   public boolean isUCS2() { return  false; } ;
+
+
+}
diff --git a/org/mozilla/intl/chardet/nsEUCSampler.java b/org/mozilla/intl/chardet/nsEUCSampler.java
new file mode 100644
index 0000000..3739649
--- /dev/null
+++ b/org/mozilla/intl/chardet/nsEUCSampler.java
@@ -0,0 +1,128 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public
+ * License Version 1.1 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Netscape
+ * Communications Corporation.  Portions created by Netscape are
+ * Copyright (C) 1998 Netscape Communications Corporation. All
+ * Rights Reserved.
+ *
+ * Contributor(s):
+ */
+
+package org.mozilla.intl.chardet ;
+import java.lang.* ;
+
+public class nsEUCSampler {
+
+	int mTotal = 0;
+	int mThreshold = 200 ;
+	int mState = 0;
+	public int mFirstByteCnt[] = new int[94] ;
+	public int mSecondByteCnt[] = new int[94] ;
+	public float mFirstByteFreq[] = new float[94] ;
+	public float mSecondByteFreq[] = new float[94];
+
+	public nsEUCSampler() {
+		Reset() ;
+	}
+
+	public void Reset() {
+		mTotal = 0 ;
+		mState = 0 ;
+		for(int i=0; i<94; i++)
+			mFirstByteCnt[i] = mSecondByteCnt[i] = 0 ;
+	}
+
+	boolean EnoughData() { return mTotal > mThreshold; }
+
+        boolean GetSomeData() { return mTotal > 1; }
+
+        boolean Sample(byte[] aIn, int aLen) {
+
+           if(mState == 1)
+               return false;
+
+           int p = 0;
+
+           // if(aLen + mTotal > 0x80000000) 
+           //    aLen = 0x80000000 - mTotal;
+
+           int i;
+           for(i=0; (i<aLen) && (1 != mState) ;i++,p++)
+           {
+               switch(mState) {
+                  case 0:
+                    if( ( aIn[p] & 0x0080 ) != 0 )  
+                    {
+                       if((0xff==(0xff&aIn[p])) || ( 0xa1>(0xff&aIn[p]))) {
+                          mState = 1;
+                       } else {
+                          mTotal++;
+                          mFirstByteCnt[(0xff&aIn[p]) - 0xa1]++;
+                          mState = 2;
+                       }
+                    }
+                    break;
+                  case 1:
+                    break;
+                  case 2:
+                    if( (aIn[p] & 0x0080)  != 0 )
+                    {
+                       if((0xff == (0xff&aIn[p])) 
+				|| ( 0xa1 > (0xff&aIn[p]))) {
+                          mState = 1;
+                       } else {
+                          mTotal++;
+                          mSecondByteCnt[(0xff&aIn[p]) - 0xa1]++;
+                          mState = 0;
+                       }
+                    } else {
+                       mState = 1;
+                    }
+                    break;
+                  default:
+                    mState = 1;
+               }
+            }
+            return (1 != mState  );
+        }
+
+
+        void CalFreq() {
+	   for(int i = 0 ; i < 94; i++) {
+	      mFirstByteFreq[i] = (float)mFirstByteCnt[i] / (float)mTotal;
+	      mSecondByteFreq[i] = (float)mSecondByteCnt[i] / (float)mTotal;
+	   }
+	}
+
+        float   GetScore(float[] aFirstByteFreq, float aFirstByteWeight,
+                         float[] aSecondByteFreq, float aSecondByteWeight)
+	{
+       	   return aFirstByteWeight * GetScore(aFirstByteFreq, mFirstByteFreq) +
+              aSecondByteWeight * GetScore(aSecondByteFreq, mSecondByteFreq);
+	}
+
+        float   GetScore(float[] array1, float[] array2) {
+           float s;
+           float sum=0.0f;
+
+       	   for(int i=0;i<94;i++) {
+              s = array1[i] - array2[i];
+              sum += s * s;
+           }
+           return (float)java.lang.Math.sqrt((double)sum) / 94.0f;
+	}
+}
+
+
diff --git a/org/mozilla/intl/chardet/nsEUCStatistics.java b/org/mozilla/intl/chardet/nsEUCStatistics.java
new file mode 100644
index 0000000..62fbf35
--- /dev/null
+++ b/org/mozilla/intl/chardet/nsEUCStatistics.java
@@ -0,0 +1,41 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public
+ * License Version 1.1 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Netscape
+ * Communications Corporation.  Portions created by Netscape are
+ * Copyright (C) 1998 Netscape Communications Corporation. All
+ * Rights Reserved.
+ *
+ * Contributor(s):
+ */
+
+package org.mozilla.intl.chardet ;
+
+import java.lang.*;
+
+public abstract class nsEUCStatistics {
+
+     public abstract float[] mFirstByteFreq() ;
+     public abstract float   mFirstByteStdDev();
+     public abstract float   mFirstByteMean();
+     public abstract float   mFirstByteWeight();
+     public abstract float[] mSecondByteFreq();
+     public abstract float   mSecondByteStdDev();
+     public abstract float   mSecondByteMean();
+     public abstract float   mSecondByteWeight();
+
+     public nsEUCStatistics() {
+     }
+
+}
diff --git a/org/mozilla/intl/chardet/nsEUCTWVerifier.java b/org/mozilla/intl/chardet/nsEUCTWVerifier.java
new file mode 100644
index 0000000..4b258df
--- /dev/null
+++ b/org/mozilla/intl/chardet/nsEUCTWVerifier.java
@@ -0,0 +1,102 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public
+ * License Version 1.1 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Netscape
+ * Communications Corporation.  Portions created by Netscape are
+ * Copyright (C) 1998 Netscape Communications Corporation. All
+ * Rights Reserved.
+ *
+ * Contributor(s): 
+ */
+/* 
+ * DO NOT EDIT THIS DOCUMENT MANUALLY !!!
+ * THIS FILE IS AUTOMATICALLY GENERATED BY THE TOOLS UNDER
+ *    AutoDetect/tools/
+ */
+
+package org.mozilla.intl.chardet ;
+
+import java.lang.*;
+
+public class nsEUCTWVerifier extends nsVerifier {
+
+	 static int[]  cclass   ; 
+	 static int[]  states   ; 
+	 static int    stFactor ; 
+	 static String charset  ; 
+
+	 public int[]  cclass()   { return cclass ;   }
+	 public int[]  states()   { return states ;   }
+	 public int    stFactor() { return stFactor ; }
+	 public String charset()  { return charset ;  }
+
+   public nsEUCTWVerifier() {
+
+      cclass = new int[256/8] ;
+
+      cclass[0] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[1] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[2] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[3] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[4] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[5] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[6] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[7] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[8] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[9] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[10] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[11] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[12] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[13] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[14] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[15] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[16] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[17] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (6)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[18] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[19] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[20] = ((int)(((  ((int)(((  ((int)((( 4) << 4) | (4)))  ) << 8) | (((int)(((4) << 4) | ( 4))) ))) ) << 16) | (  ((int)(((  ((int)(((4) << 4) | (4))) ) << 8) | (   ((int)(((3) << 4) | (0))) )))))) ;
+      cclass[21] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((5) << 4) | (5))) )))))) ;
+      cclass[22] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[23] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[24] = ((int)(((  ((int)(((  ((int)((( 3) << 4) | (3)))  ) << 8) | (((int)(((3) << 4) | ( 3))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (3))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[25] = ((int)(((  ((int)(((  ((int)((( 3) << 4) | (3)))  ) << 8) | (((int)(((3) << 4) | ( 3))) ))) ) << 16) | (  ((int)(((  ((int)(((3) << 4) | (3))) ) << 8) | (   ((int)(((3) << 4) | (3))) )))))) ;
+      cclass[26] = ((int)(((  ((int)(((  ((int)((( 3) << 4) | (3)))  ) << 8) | (((int)(((3) << 4) | ( 3))) ))) ) << 16) | (  ((int)(((  ((int)(((3) << 4) | (3))) ) << 8) | (   ((int)(((3) << 4) | (3))) )))))) ;
+      cclass[27] = ((int)(((  ((int)(((  ((int)((( 3) << 4) | (3)))  ) << 8) | (((int)(((3) << 4) | ( 3))) ))) ) << 16) | (  ((int)(((  ((int)(((3) << 4) | (3))) ) << 8) | (   ((int)(((3) << 4) | (3))) )))))) ;
+      cclass[28] = ((int)(((  ((int)(((  ((int)((( 3) << 4) | (3)))  ) << 8) | (((int)(((3) << 4) | ( 3))) ))) ) << 16) | (  ((int)(((  ((int)(((3) << 4) | (3))) ) << 8) | (   ((int)(((3) << 4) | (3))) )))))) ;
+      cclass[29] = ((int)(((  ((int)(((  ((int)((( 3) << 4) | (3)))  ) << 8) | (((int)(((3) << 4) | ( 3))) ))) ) << 16) | (  ((int)(((  ((int)(((3) << 4) | (3))) ) << 8) | (   ((int)(((3) << 4) | (3))) )))))) ;
+      cclass[30] = ((int)(((  ((int)(((  ((int)((( 3) << 4) | (3)))  ) << 8) | (((int)(((3) << 4) | ( 3))) ))) ) << 16) | (  ((int)(((  ((int)(((3) << 4) | (3))) ) << 8) | (   ((int)(((3) << 4) | (3))) )))))) ;
+      cclass[31] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (3)))  ) << 8) | (((int)(((3) << 4) | ( 3))) ))) ) << 16) | (  ((int)(((  ((int)(((3) << 4) | (3))) ) << 8) | (   ((int)(((3) << 4) | (3))) )))))) ;
+
+
+
+      states = new int[6] ;
+
+      states[0] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (     4)))  ) << 8) | (((int)(((     3) << 4) | (      3))) ))) ) << 16) | (  ((int)(((  ((int)(((     3) << 4) | (eStart))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[1] = ((int)(((  ((int)(((  ((int)((( eItsMe) << 4) | (eItsMe)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[2] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eStart)))  ) << 8) | (((int)(((eError) << 4) | ( eItsMe))) ))) ) << 16) | (  ((int)(((  ((int)(((eItsMe) << 4) | (eItsMe))) ) << 8) | (   ((int)(((eItsMe) << 4) | (eItsMe))) )))))) ;
+      states[3] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eStart))) ) << 8) | (   ((int)(((eStart) << 4) | (eStart))) )))))) ;
+      states[4] = ((int)(((  ((int)(((  ((int)((( eStart) << 4) | (eStart)))  ) << 8) | (((int)(((eError) << 4) | ( eStart))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (     5))) )))))) ;
+      states[5] = ((int)(((  ((int)(((  ((int)((( eStart) << 4) | (eStart)))  ) << 8) | (((int)(((eStart) << 4) | ( eStart))) ))) ) << 16) | (  ((int)(((  ((int)(((eStart) << 4) | (eStart))) ) << 8) | (   ((int)(((eError) << 4) | (eStart))) )))))) ;
+
+
+
+      charset =  "x-euc-tw";
+      stFactor =  7;
+
+   }
+
+   public boolean isUCS2() { return  false; } ;
+
+
+}
diff --git a/org/mozilla/intl/chardet/nsGB18030Verifier.java b/org/mozilla/intl/chardet/nsGB18030Verifier.java
new file mode 100644
index 0000000..4b02548
--- /dev/null
+++ b/org/mozilla/intl/chardet/nsGB18030Verifier.java
@@ -0,0 +1,102 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public
+ * License Version 1.1 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Netscape
+ * Communications Corporation.  Portions created by Netscape are
+ * Copyright (C) 1998 Netscape Communications Corporation. All
+ * Rights Reserved.
+ *
+ * Contributor(s): 
+ */
+/* 
+ * DO NOT EDIT THIS DOCUMENT MANUALLY !!!
+ * THIS FILE IS AUTOMATICALLY GENERATED BY THE TOOLS UNDER
+ *    AutoDetect/tools/
+ */
+
+package org.mozilla.intl.chardet ;
+
+import java.lang.*;
+
+public class nsGB18030Verifier extends nsVerifier {
+
+	 static int[]  cclass   ; 
+	 static int[]  states   ; 
+	 static int    stFactor ; 
+	 static String charset  ; 
+
+	 public int[]  cclass()   { return cclass ;   }
+	 public int[]  states()   { return states ;   }
+	 public int    stFactor() { return stFactor ; }
+	 public String charset()  { return charset ;  }
+
+   public nsGB18030Verifier() {
+
+      cclass = new int[256/8] ;
+
+      cclass[0] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[1] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[2] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[3] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[4] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[5] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[6] = ((int)(((  ((int)(((  ((int)((( 3) << 4) | (3)))  ) << 8) | (((int)(((3) << 4) | ( 3))) ))) ) << 16) | (  ((int)(((  ((int)(((3) << 4) | (3))) ) << 8) | (   ((int)(((3) << 4) | (3))) )))))) ;
+      cclass[7] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((3) << 4) | (3))) )))))) ;
+      cclass[8] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[9] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[10] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[11] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[12] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[13] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[14] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[15] = ((int)(((  ((int)(((  ((int)((( 4) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[16] = ((int)(((  ((int)(((  ((int)((( 6) << 4) | (6)))  ) << 8) | (((int)(((6) << 4) | ( 6))) ))) ) << 16) | (  ((int)(((  ((int)(((6) << 4) | (6))) ) << 8) | (   ((int)(((6) << 4) | (5))) )))))) ;
+      cclass[17] = ((int)(((  ((int)(((  ((int)((( 6) << 4) | (6)))  ) << 8) | (((int)(((6) << 4) | ( 6))) ))) ) << 16) | (  ((int)(((  ((int)(((6) << 4) | (6))) ) << 8) | (   ((int)(((6) << 4) | (6))) )))))) ;
+      cclass[18] = ((int)(((  ((int)(((  ((int)((( 6) << 4) | (6)))  ) << 8) | (((int)(((6) << 4) | ( 6))) ))) ) << 16) | (  ((int)(((  ((int)(((6) << 4) | (6))) ) << 8) | (   ((int)(((6) << 4) | (6))) )))))) ;
+      cclass[19] = ((int)(((  ((int)(((  ((int)((( 6) << 4) | (6)))  ) << 8) | (((int)(((6) << 4) | ( 6))) ))) ) << 16) | (  ((int)(((  ((int)(((6) << 4) | (6))) ) << 8) | (   ((int)(((6) << 4) | (6))) )))))) ;
+      cclass[20] = ((int)(((  ((int)(((  ((int)((( 6) << 4) | (6)))  ) << 8) | (((int)(((6) << 4) | ( 6))) ))) ) << 16) | (  ((int)(((  ((int)(((6) << 4) | (6))) ) << 8) | (   ((int)(((6) << 4) | (6))) )))))) ;
+      cclass[21] = ((int)(((  ((int)(((  ((int)((( 6) << 4) | (6)))  ) << 8) | (((int)(((6) << 4) | ( 6))) ))) ) << 16) | (  ((int)(((  ((int)(((6) << 4) | (6))) ) << 8) | (   ((int)(((6) << 4) | (6))) )))))) ;
+      cclass[22] = ((int)(((  ((int)(((  ((int)((( 6) << 4) | (6)))  ) << 8) | (((int)(((6) << 4) | ( 6))) ))) ) << 16) | (  ((int)(((  ((int)(((6) << 4) | (6))) ) << 8) | (   ((int)(((6) << 4) | (6))) )))))) ;
+      cclass[23] = ((int)(((  ((int)(((  ((int)((( 6) << 4) | (6)))  ) << 8) | (((int)(((6) << 4) | ( 6))) ))) ) << 16) | (  ((int)(((  ((int)(((6) << 4) | (6))) ) << 8) | (   ((int)(((6) << 4) | (6))) )))))) ;
+      cclass[24] = ((int)(((  ((int)(((  ((int)((( 6) << 4) | (6)))  ) << 8) | (((int)(((6) << 4) | ( 6))) ))) ) << 16) | (  ((int)(((  ((int)(((6) << 4) | (6))) ) << 8) | (   ((int)(((6) << 4) | (6))) )))))) ;
+      cclass[25] = ((int)(((  ((int)(((  ((int)((( 6) << 4) | (6)))  ) << 8) | (((int)(((6) << 4) | ( 6))) ))) ) << 16) | (  ((int)(((  ((int)(((6) << 4) | (6))) ) << 8) | (   ((int)(((6) << 4) | (6))) )))))) ;
+      cclass[26] = ((int)(((  ((int)(((  ((int)((( 6) << 4) | (6)))  ) << 8) | (((int)(((6) << 4) | ( 6))) ))) ) << 16) | (  ((int)(((  ((int)(((6) << 4) | (6))) ) << 8) | (   ((int)(((6) << 4) | (6))) )))))) ;
+      cclass[27] = ((int)(((  ((int)(((  ((int)((( 6) << 4) | (6)))  ) << 8) | (((int)(((6) << 4) | ( 6))) ))) ) << 16) | (  ((int)(((  ((int)(((6) << 4) | (6))) ) << 8) | (   ((int)(((6) << 4) | (6))) )))))) ;
+      cclass[28] = ((int)(((  ((int)(((  ((int)((( 6) << 4) | (6)))  ) << 8) | (((int)(((6) << 4) | ( 6))) ))) ) << 16) | (  ((int)(((  ((int)(((6) << 4) | (6))) ) << 8) | (   ((int)(((6) << 4) | (6))) )))))) ;
+      cclass[29] = ((int)(((  ((int)(((  ((int)((( 6) << 4) | (6)))  ) << 8) | (((int)(((6) << 4) | ( 6))) ))) ) << 16) | (  ((int)(((  ((int)(((6) << 4) | (6))) ) << 8) | (   ((int)(((6) << 4) | (6))) )))))) ;
+      cclass[30] = ((int)(((  ((int)(((  ((int)((( 6) << 4) | (6)))  ) << 8) | (((int)(((6) << 4) | ( 6))) ))) ) << 16) | (  ((int)(((  ((int)(((6) << 4) | (6))) ) << 8) | (   ((int)(((6) << 4) | (6))) )))))) ;
+      cclass[31] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (6)))  ) << 8) | (((int)(((6) << 4) | ( 6))) ))) ) << 16) | (  ((int)(((  ((int)(((6) << 4) | (6))) ) << 8) | (   ((int)(((6) << 4) | (6))) )))))) ;
+
+
+
+      states = new int[6] ;
+
+      states[0] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (     3)))  ) << 8) | (((int)(((eStart) << 4) | ( eStart))) ))) ) << 16) | (  ((int)(((  ((int)(((eStart) << 4) | (eStart))) ) << 8) | (   ((int)(((eStart) << 4) | (eError))) )))))) ;
+      states[1] = ((int)(((  ((int)(((  ((int)((( eItsMe) << 4) | (eItsMe)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[2] = ((int)(((  ((int)(((  ((int)((( eStart) << 4) | (eError)))  ) << 8) | (((int)(((eError) << 4) | ( eItsMe))) ))) ) << 16) | (  ((int)(((  ((int)(((eItsMe) << 4) | (eItsMe))) ) << 8) | (   ((int)(((eItsMe) << 4) | (eItsMe))) )))))) ;
+      states[3] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eStart) << 4) | (eStart))) ) << 8) | (   ((int)(((eError) << 4) | (     4))) )))))) ;
+      states[4] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eItsMe)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (     5))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[5] = ((int)(((  ((int)(((  ((int)((( eStart) << 4) | (eStart)))  ) << 8) | (((int)(((eStart) << 4) | ( eStart))) ))) ) << 16) | (  ((int)(((  ((int)(((eStart) << 4) | (eStart))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+
+
+
+      charset =  "GB18030";
+      stFactor =  7;
+
+   }
+
+   public boolean isUCS2() { return  false; } ;
+
+
+}
diff --git a/org/mozilla/intl/chardet/nsGB2312Verifier.java b/org/mozilla/intl/chardet/nsGB2312Verifier.java
new file mode 100644
index 0000000..49f4b38
--- /dev/null
+++ b/org/mozilla/intl/chardet/nsGB2312Verifier.java
@@ -0,0 +1,98 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public
+ * License Version 1.1 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Netscape
+ * Communications Corporation.  Portions created by Netscape are
+ * Copyright (C) 1998 Netscape Communications Corporation. All
+ * Rights Reserved.
+ *
+ * Contributor(s): 
+ */
+/* 
+ * DO NOT EDIT THIS DOCUMENT MANUALLY !!!
+ * THIS FILE IS AUTOMATICALLY GENERATED BY THE TOOLS UNDER
+ *    AutoDetect/tools/
+ */
+
+package org.mozilla.intl.chardet ;
+
+import java.lang.*;
+
+public class nsGB2312Verifier extends nsVerifier {
+
+	 static int[]  cclass   ; 
+	 static int[]  states   ; 
+	 static int    stFactor ; 
+	 static String charset  ; 
+
+	 public int[]  cclass()   { return cclass ;   }
+	 public int[]  states()   { return states ;   }
+	 public int    stFactor() { return stFactor ; }
+	 public String charset()  { return charset ;  }
+
+   public nsGB2312Verifier() {
+
+      cclass = new int[256/8] ;
+
+      cclass[0] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[1] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[2] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[3] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[4] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[5] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[6] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[7] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[8] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[9] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[10] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[11] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[12] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[13] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[14] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[15] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[16] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[17] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[18] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[19] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[20] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (0))) )))))) ;
+      cclass[21] = ((int)(((  ((int)(((  ((int)((( 3) << 4) | (3)))  ) << 8) | (((int)(((3) << 4) | ( 3))) ))) ) << 16) | (  ((int)(((  ((int)(((3) << 4) | (3))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[22] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[23] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[24] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[25] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[26] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[27] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[28] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[29] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[30] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[31] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+
+
+
+      states = new int[2] ;
+
+      states[0] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (     3))) ) << 8) | (   ((int)(((eStart) << 4) | (eError))) )))))) ;
+      states[1] = ((int)(((  ((int)(((  ((int)((( eStart) << 4) | (eStart)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eItsMe) << 4) | (eItsMe))) ) << 8) | (   ((int)(((eItsMe) << 4) | (eItsMe))) )))))) ;
+
+
+
+      charset =  "GB2312";
+      stFactor =  4;
+
+   }
+
+   public boolean isUCS2() { return  false; } ;
+
+
+}
diff --git a/org/mozilla/intl/chardet/nsHZVerifier.java b/org/mozilla/intl/chardet/nsHZVerifier.java
new file mode 100644
index 0000000..0ce022b
--- /dev/null
+++ b/org/mozilla/intl/chardet/nsHZVerifier.java
@@ -0,0 +1,102 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public
+ * License Version 1.1 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Netscape
+ * Communications Corporation.  Portions created by Netscape are
+ * Copyright (C) 1998 Netscape Communications Corporation. All
+ * Rights Reserved.
+ *
+ * Contributor(s): 
+ */
+/* 
+ * DO NOT EDIT THIS DOCUMENT MANUALLY !!!
+ * THIS FILE IS AUTOMATICALLY GENERATED BY THE TOOLS UNDER
+ *    AutoDetect/tools/
+ */
+
+package org.mozilla.intl.chardet ;
+
+import java.lang.*;
+
+public class nsHZVerifier extends nsVerifier {
+
+	 static int[]  cclass   ; 
+	 static int[]  states   ; 
+	 static int    stFactor ; 
+	 static String charset  ; 
+
+	 public int[]  cclass()   { return cclass ;   }
+	 public int[]  states()   { return states ;   }
+	 public int    stFactor() { return stFactor ; }
+	 public String charset()  { return charset ;  }
+
+   public nsHZVerifier() {
+
+      cclass = new int[256/8] ;
+
+      cclass[0] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (1))) )))))) ;
+      cclass[1] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[2] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[3] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[4] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[5] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[6] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[7] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[8] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[9] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[10] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[11] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[12] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[13] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[14] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[15] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (2)))  ) << 8) | (((int)(((5) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((4) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[16] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[17] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[18] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[19] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[20] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[21] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[22] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[23] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[24] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[25] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[26] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[27] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[28] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[29] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[30] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[31] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+
+
+
+      states = new int[6] ;
+
+      states[0] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((eStart) << 4) | ( eStart))) ))) ) << 16) | (  ((int)(((  ((int)(((eStart) << 4) | (     3))) ) << 8) | (   ((int)(((eError) << 4) | (eStart))) )))))) ;
+      states[1] = ((int)(((  ((int)(((  ((int)((( eItsMe) << 4) | (eItsMe)))  ) << 8) | (((int)(((eItsMe) << 4) | ( eItsMe))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[2] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (     4)))  ) << 8) | (((int)(((eStart) << 4) | ( eStart))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eItsMe) << 4) | (eItsMe))) )))))) ;
+      states[3] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (     4)))  ) << 8) | (((int)(((     5) << 4) | (      5))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (     6))) ) << 8) | (   ((int)(((eError) << 4) | (     5))) )))))) ;
+      states[4] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (     4)))  ) << 8) | (((int)(((eError) << 4) | (      4))) ))) ) << 16) | (  ((int)(((  ((int)(((     4) << 4) | (     4))) ) << 8) | (   ((int)(((eError) << 4) | (     4))) )))))) ;
+      states[5] = ((int)(((  ((int)(((  ((int)((( eStart) << 4) | (eStart)))  ) << 8) | (((int)(((eStart) << 4) | ( eStart))) ))) ) << 16) | (  ((int)(((  ((int)(((eStart) << 4) | (eStart))) ) << 8) | (   ((int)(((eItsMe) << 4) | (     4))) )))))) ;
+
+
+
+      charset =  "HZ-GB-2312";
+      stFactor =  6;
+
+   }
+
+   public boolean isUCS2() { return  false; } ;
+
+
+}
diff --git a/org/mozilla/intl/chardet/nsICharsetDetectionObserver.java b/org/mozilla/intl/chardet/nsICharsetDetectionObserver.java
new file mode 100644
index 0000000..2ba40b1
--- /dev/null
+++ b/org/mozilla/intl/chardet/nsICharsetDetectionObserver.java
@@ -0,0 +1,32 @@
+
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public
+ * License Version 1.1 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Netscape
+ * Communications Corporation.  Portions created by Netscape are
+ * Copyright (C) 1998 Netscape Communications Corporation. All
+ * Rights Reserved.
+ *
+ * Contributor(s):
+ */
+
+package org.mozilla.intl.chardet ;
+
+import java.lang.* ;
+
+public interface nsICharsetDetectionObserver {
+
+	public void Notify(String charset) ;
+}
+
diff --git a/org/mozilla/intl/chardet/nsICharsetDetector.java b/org/mozilla/intl/chardet/nsICharsetDetector.java
new file mode 100644
index 0000000..3c91e0a
--- /dev/null
+++ b/org/mozilla/intl/chardet/nsICharsetDetector.java
@@ -0,0 +1,34 @@
+
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public
+ * License Version 1.1 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Netscape
+ * Communications Corporation.  Portions created by Netscape are
+ * Copyright (C) 1998 Netscape Communications Corporation. All
+ * Rights Reserved.
+ *
+ * Contributor(s):
+ */
+
+package org.mozilla.intl.chardet ;
+
+import java.lang.* ;
+
+public interface nsICharsetDetector {
+
+	public void Init(nsICharsetDetectionObserver observer) ;
+	public boolean DoIt(byte[] aBuf, int aLen, boolean oDontFeedMe) ;
+	public void Done() ;
+}
+
diff --git a/org/mozilla/intl/chardet/nsISO2022CNVerifier.java b/org/mozilla/intl/chardet/nsISO2022CNVerifier.java
new file mode 100644
index 0000000..c273761
--- /dev/null
+++ b/org/mozilla/intl/chardet/nsISO2022CNVerifier.java
@@ -0,0 +1,104 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public
+ * License Version 1.1 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Netscape
+ * Communications Corporation.  Portions created by Netscape are
+ * Copyright (C) 1998 Netscape Communications Corporation. All
+ * Rights Reserved.
+ *
+ * Contributor(s): 
+ */
+/* 
+ * DO NOT EDIT THIS DOCUMENT MANUALLY !!!
+ * THIS FILE IS AUTOMATICALLY GENERATED BY THE TOOLS UNDER
+ *    AutoDetect/tools/
+ */
+
+package org.mozilla.intl.chardet ;
+
+import java.lang.*;
+
+public class nsISO2022CNVerifier extends nsVerifier {
+
+	 static int[]  cclass   ; 
+	 static int[]  states   ; 
+	 static int    stFactor ; 
+	 static String charset  ; 
+
+	 public int[]  cclass()   { return cclass ;   }
+	 public int[]  states()   { return states ;   }
+	 public int    stFactor() { return stFactor ; }
+	 public String charset()  { return charset ;  }
+
+   public nsISO2022CNVerifier() {
+
+      cclass = new int[256/8] ;
+
+      cclass[0] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (2))) )))))) ;
+      cclass[1] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[2] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[3] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[4] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[5] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((3) << 4) | (0))) )))))) ;
+      cclass[6] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[7] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[8] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((4) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[9] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[10] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[11] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[12] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[13] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[14] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[15] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[16] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[17] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[18] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[19] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[20] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[21] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[22] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[23] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[24] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[25] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[26] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[27] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[28] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[29] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[30] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[31] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+
+
+
+      states = new int[8] ;
+
+      states[0] = ((int)(((  ((int)(((  ((int)((( eStart) << 4) | (eStart)))  ) << 8) | (((int)(((eStart) << 4) | ( eStart))) ))) ) << 16) | (  ((int)(((  ((int)(((eStart) << 4) | (eError))) ) << 8) | (   ((int)(((     3) << 4) | (eStart))) )))))) ;
+      states[1] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eStart))) )))))) ;
+      states[2] = ((int)(((  ((int)(((  ((int)((( eItsMe) << 4) | (eItsMe)))  ) << 8) | (((int)(((eItsMe) << 4) | ( eItsMe))) ))) ) << 16) | (  ((int)(((  ((int)(((eItsMe) << 4) | (eItsMe))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[3] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (     4)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eItsMe))) ) << 8) | (   ((int)(((eItsMe) << 4) | (eItsMe))) )))))) ;
+      states[4] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eItsMe) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[5] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((     6) << 4) | (     5))) )))))) ;
+      states[6] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eItsMe) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[7] = ((int)(((  ((int)(((  ((int)((( eStart) << 4) | (eError)))  ) << 8) | (((int)(((eItsMe) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+
+
+
+      charset =  "ISO-2022-CN";
+      stFactor =  9;
+
+   }
+
+   public boolean isUCS2() { return  false; } ;
+
+
+}
diff --git a/org/mozilla/intl/chardet/nsISO2022JPVerifier.java b/org/mozilla/intl/chardet/nsISO2022JPVerifier.java
new file mode 100644
index 0000000..417e180
--- /dev/null
+++ b/org/mozilla/intl/chardet/nsISO2022JPVerifier.java
@@ -0,0 +1,102 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public
+ * License Version 1.1 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Netscape
+ * Communications Corporation.  Portions created by Netscape are
+ * Copyright (C) 1998 Netscape Communications Corporation. All
+ * Rights Reserved.
+ *
+ * Contributor(s): 
+ */
+/* 
+ * DO NOT EDIT THIS DOCUMENT MANUALLY !!!
+ * THIS FILE IS AUTOMATICALLY GENERATED BY THE TOOLS UNDER
+ *    AutoDetect/tools/
+ */
+
+package org.mozilla.intl.chardet ;
+
+import java.lang.*;
+
+public class nsISO2022JPVerifier extends nsVerifier {
+
+	 static int[]  cclass   ; 
+	 static int[]  states   ; 
+	 static int    stFactor ; 
+	 static String charset  ; 
+
+	 public int[]  cclass()   { return cclass ;   }
+	 public int[]  states()   { return states ;   }
+	 public int    stFactor() { return stFactor ; }
+	 public String charset()  { return charset ;  }
+
+   public nsISO2022JPVerifier() {
+
+      cclass = new int[256/8] ;
+
+      cclass[0] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (2))) )))))) ;
+      cclass[1] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[2] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[3] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[4] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 7))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[5] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (3))) )))))) ;
+      cclass[6] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[7] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[8] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (4))) ) << 8) | (   ((int)(((0) << 4) | (6))) )))))) ;
+      cclass[9] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (5))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[10] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[11] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[12] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[13] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[14] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[15] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[16] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[17] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[18] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[19] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[20] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[21] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[22] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[23] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[24] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[25] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[26] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[27] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[28] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[29] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[30] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[31] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+
+
+
+      states = new int[6] ;
+
+      states[0] = ((int)(((  ((int)(((  ((int)((( eStart) << 4) | (eStart)))  ) << 8) | (((int)(((eStart) << 4) | ( eStart))) ))) ) << 16) | (  ((int)(((  ((int)(((eStart) << 4) | (eError))) ) << 8) | (   ((int)(((     3) << 4) | (eStart))) )))))) ;
+      states[1] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[2] = ((int)(((  ((int)(((  ((int)((( eItsMe) << 4) | (eItsMe)))  ) << 8) | (((int)(((eItsMe) << 4) | ( eItsMe))) ))) ) << 16) | (  ((int)(((  ((int)(((eItsMe) << 4) | (eItsMe))) ) << 8) | (   ((int)(((eItsMe) << 4) | (eItsMe))) )))))) ;
+      states[3] = ((int)(((  ((int)(((  ((int)(((      4) << 4) | (eError)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((     5) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[4] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eItsMe)))  ) << 8) | (((int)(((eError) << 4) | ( eItsMe))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[5] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((eItsMe) << 4) | ( eItsMe))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+
+
+
+      charset =  "ISO-2022-JP";
+      stFactor =  8;
+
+   }
+
+   public boolean isUCS2() { return  false; } ;
+
+
+}
diff --git a/org/mozilla/intl/chardet/nsISO2022KRVerifier.java b/org/mozilla/intl/chardet/nsISO2022KRVerifier.java
new file mode 100644
index 0000000..2036633
--- /dev/null
+++ b/org/mozilla/intl/chardet/nsISO2022KRVerifier.java
@@ -0,0 +1,101 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public
+ * License Version 1.1 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Netscape
+ * Communications Corporation.  Portions created by Netscape are
+ * Copyright (C) 1998 Netscape Communications Corporation. All
+ * Rights Reserved.
+ *
+ * Contributor(s): 
+ */
+/* 
+ * DO NOT EDIT THIS DOCUMENT MANUALLY !!!
+ * THIS FILE IS AUTOMATICALLY GENERATED BY THE TOOLS UNDER
+ *    AutoDetect/tools/
+ */
+
+package org.mozilla.intl.chardet ;
+
+import java.lang.*;
+
+public class nsISO2022KRVerifier extends nsVerifier {
+
+	 static int[]  cclass   ; 
+	 static int[]  states   ; 
+	 static int    stFactor ; 
+	 static String charset  ; 
+
+	 public int[]  cclass()   { return cclass ;   }
+	 public int[]  states()   { return states ;   }
+	 public int    stFactor() { return stFactor ; }
+	 public String charset()  { return charset ;  }
+
+   public nsISO2022KRVerifier() {
+
+      cclass = new int[256/8] ;
+
+      cclass[0] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (2))) )))))) ;
+      cclass[1] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[2] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[3] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[4] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 3))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[5] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((4) << 4) | (0))) )))))) ;
+      cclass[6] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[7] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[8] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((5) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[9] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[10] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[11] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[12] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[13] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[14] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[15] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[16] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[17] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[18] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[19] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[20] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[21] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[22] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[23] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[24] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[25] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[26] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[27] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[28] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[29] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[30] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[31] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+
+
+
+      states = new int[5] ;
+
+      states[0] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((eStart) << 4) | ( eStart))) ))) ) << 16) | (  ((int)(((  ((int)(((eStart) << 4) | (eError))) ) << 8) | (   ((int)(((     3) << 4) | (eStart))) )))))) ;
+      states[1] = ((int)(((  ((int)(((  ((int)((( eItsMe) << 4) | (eItsMe)))  ) << 8) | (((int)(((eItsMe) << 4) | ( eItsMe))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[2] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((     4) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eItsMe) << 4) | (eItsMe))) )))))) ;
+      states[3] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((eError) << 4) | (      5))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[4] = ((int)(((  ((int)(((  ((int)((( eStart) << 4) | (eStart)))  ) << 8) | (((int)(((eStart) << 4) | ( eStart))) ))) ) << 16) | (  ((int)(((  ((int)(((eItsMe) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+
+
+
+      charset =  "ISO-2022-KR";
+      stFactor =  6;
+
+   }
+
+   public boolean isUCS2() { return  false; } ;
+
+
+}
diff --git a/org/mozilla/intl/chardet/nsPSMDetector.java b/org/mozilla/intl/chardet/nsPSMDetector.java
new file mode 100644
index 0000000..f6f6780
--- /dev/null
+++ b/org/mozilla/intl/chardet/nsPSMDetector.java
@@ -0,0 +1,410 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public
+ * License Version 1.1 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Netscape
+ * Communications Corporation.  Portions created by Netscape are
+ * Copyright (C) 1998 Netscape Communications Corporation. All
+ * Rights Reserved.
+ *
+ * Contributor(s):
+ */
+
+package org.mozilla.intl.chardet ;
+import java.lang.* ;
+
+public abstract class nsPSMDetector {
+
+   public static final int ALL                 =  0 ;
+   public static final int JAPANESE            =  1 ;
+   public static final int CHINESE             =  2 ;
+   public static final int SIMPLIFIED_CHINESE  =  3 ;
+   public static final int TRADITIONAL_CHINESE =  4 ;
+   public static final int KOREAN              =  5 ;
+
+   public static final int NO_OF_LANGUAGES     =  6 ;
+   public static final int MAX_VERIFIERS       = 16 ;
+
+   nsVerifier[] mVerifier ;
+   nsEUCStatistics[] mStatisticsData ;
+
+   nsEUCSampler	mSampler = new nsEUCSampler() ;
+   byte[]    mState = new byte[MAX_VERIFIERS] ;
+   int[]     mItemIdx = new int[MAX_VERIFIERS] ;
+
+   int     mItems ;
+   int	   mClassItems ;
+ 
+   boolean mDone ;
+   boolean mRunSampler ;
+   boolean mClassRunSampler ;
+
+   public nsPSMDetector() {
+	initVerifiers( nsPSMDetector.ALL );
+	Reset() ;
+   }
+
+   public nsPSMDetector(int langFlag) {
+	initVerifiers(langFlag);
+	Reset() ;
+   }
+
+   public nsPSMDetector(int aItems, nsVerifier[] aVerifierSet, 
+					nsEUCStatistics[] aStatisticsSet)  {
+	mClassRunSampler = ( aStatisticsSet != null ) ;
+	mStatisticsData = aStatisticsSet ;
+	mVerifier = aVerifierSet ;
+
+	mClassItems = aItems ;
+	Reset() ;
+   }
+   
+
+   public void Reset() {
+	mRunSampler = mClassRunSampler ;
+	mDone = false ;
+	mItems = mClassItems ;
+
+	for(int i=0; i<mItems; i++) {
+	   mState[i] = 0;
+	   mItemIdx[i] = i;
+	}
+
+	mSampler.Reset() ;
+   }
+
+   protected void initVerifiers(int currVerSet) {
+
+	int idx = 0 ;
+        int currVerifierSet ;
+
+	if (currVerSet >=0 && currVerSet < NO_OF_LANGUAGES ) {
+	   currVerifierSet = currVerSet ;
+	}
+	else {
+	   currVerifierSet = nsPSMDetector.ALL ;
+	}
+
+	mVerifier = null ;
+	mStatisticsData = null ;
+
+	if ( currVerifierSet == nsPSMDetector.TRADITIONAL_CHINESE ) {
+
+	   mVerifier = new nsVerifier[] {
+      		new nsUTF8Verifier(),
+      		new nsBIG5Verifier(),
+      		new nsISO2022CNVerifier(),
+      		new nsEUCTWVerifier(),
+      		new nsCP1252Verifier(),
+      		new nsUCS2BEVerifier(),
+      		new nsUCS2LEVerifier()
+	   };
+
+	   mStatisticsData = new nsEUCStatistics[] {
+      		null,
+      		new Big5Statistics(),
+      		null,
+      		new EUCTWStatistics(),
+      		null,
+      		null,
+      		null
+	   };
+	}
+
+	//==========================================================
+	else if ( currVerifierSet == nsPSMDetector.KOREAN ) {
+
+	   mVerifier = new nsVerifier[] {
+      		new nsUTF8Verifier(),
+      		new nsEUCKRVerifier(),
+      		new nsISO2022KRVerifier(),
+      		new nsCP1252Verifier(),
+      		new nsUCS2BEVerifier(),
+      		new nsUCS2LEVerifier()
+	   };
+	}
+
+	//==========================================================
+	else if ( currVerifierSet == nsPSMDetector.SIMPLIFIED_CHINESE ) {
+
+	   mVerifier = new nsVerifier[] {
+      		new nsUTF8Verifier(),
+      		new nsGB2312Verifier(),
+      		new nsGB18030Verifier(),
+      		new nsISO2022CNVerifier(),
+      		new nsHZVerifier(),
+      		new nsCP1252Verifier(),
+      		new nsUCS2BEVerifier(),
+      		new nsUCS2LEVerifier()
+	   };
+	}
+
+	//==========================================================
+	else if ( currVerifierSet == nsPSMDetector.JAPANESE ) {
+
+	   mVerifier = new nsVerifier[] {
+      		new nsUTF8Verifier(),
+      		new nsSJISVerifier(),
+      		new nsEUCJPVerifier(),
+      		new nsISO2022JPVerifier(),
+      		new nsCP1252Verifier(),
+      		new nsUCS2BEVerifier(),
+      		new nsUCS2LEVerifier()
+	   };
+	}
+	//==========================================================
+	else if ( currVerifierSet == nsPSMDetector.CHINESE ) {
+
+	   mVerifier = new nsVerifier[] {
+      		new nsUTF8Verifier(),
+      		new nsGB2312Verifier(),
+      		new nsGB18030Verifier(),
+      		new nsBIG5Verifier(),
+      		new nsISO2022CNVerifier(),
+      		new nsHZVerifier(),
+      		new nsEUCTWVerifier(),
+      		new nsCP1252Verifier(),
+      		new nsUCS2BEVerifier(),
+      		new nsUCS2LEVerifier()
+	   };
+
+	   mStatisticsData = new nsEUCStatistics[] {
+      		null,
+      		new GB2312Statistics(),
+		null,
+      		new Big5Statistics(),
+      		null,
+      		null,
+      		new EUCTWStatistics(),
+      		null,
+      		null,
+      		null
+	   };
+	}
+
+	//==========================================================
+	else if ( currVerifierSet == nsPSMDetector.ALL ) {
+
+	   mVerifier = new nsVerifier[] {
+      		new nsUTF8Verifier(),
+      		new nsSJISVerifier(),
+      		new nsEUCJPVerifier(),
+      		new nsISO2022JPVerifier(),
+      		new nsEUCKRVerifier(),
+      		new nsISO2022KRVerifier(),
+      		new nsBIG5Verifier(),
+      		new nsEUCTWVerifier(),
+      		new nsGB2312Verifier(),
+      		new nsGB18030Verifier(),
+      		new nsISO2022CNVerifier(),
+      		new nsHZVerifier(),
+      		new nsCP1252Verifier(),
+      		new nsUCS2BEVerifier(),
+      		new nsUCS2LEVerifier()
+	   };
+
+	   mStatisticsData = new nsEUCStatistics[] {
+      		null,
+      		null,
+      		new EUCJPStatistics(),
+      		null,
+      		new EUCKRStatistics(),
+      		null,
+      		new Big5Statistics(),
+      		new EUCTWStatistics(),
+      		new GB2312Statistics(),
+      		null,
+      		null,
+      		null,
+      		null,
+      		null,
+      		null
+	   };
+	}
+
+	mClassRunSampler = ( mStatisticsData != null ) ;
+       	mClassItems = mVerifier.length ;
+
+   }
+	  
+   public abstract void Report(String charset) ;
+
+   public boolean HandleData(byte[] aBuf, int len) {
+
+
+	int i,j;
+	byte b, st;
+
+ 	for( i=0; i < len; i++) {
+	   b = aBuf[i] ;
+
+	   for (j=0; j < mItems; )
+	   {
+		st = nsVerifier.getNextState( mVerifier[mItemIdx[j]], 
+						b, mState[j]) ;
+//if (st != 0)
+//System.out.println( "state(0x" + Integer.toHexString(0xFF&b) +") =>"+ Integer.toHexString(st&0xFF)+ " " + mVerifier[mItemIdx[j]].charset());
+
+		if (st == nsVerifier.eItsMe) {
+
+//System.out.println( "eItsMe(0x" + Integer.toHexString(0xFF&b) +") =>"+ mVerifier[mItemIdx[j]].charset());
+
+		   Report( mVerifier[mItemIdx[j]].charset() );
+		   mDone = true ;
+		   return mDone ;
+
+	        } else if (st == nsVerifier.eError ) {
+
+//System.out.println( "eNotMe(0x" + Integer.toHexString(0xFF&b) +") =>"+ mVerifier[mItemIdx[j]].charset());
+		   mItems--;
+		   if (j < mItems ) {
+			mItemIdx[j] = mItemIdx[mItems];	
+			mState[j]   = mState[mItems];
+		   }
+
+		} else {
+		  
+		    mState[j++] = st ;
+
+		}
+	   }
+
+	   if ( mItems <= 1 ) {
+
+	        if( 1 == mItems) {
+		   Report( mVerifier[mItemIdx[0]].charset() );
+		}
+		mDone = true ;
+		return mDone ;
+
+	   } 
+	   else {
+		
+		int nonUCS2Num=0;
+		int nonUCS2Idx=0;
+
+		for(j=0; j<mItems; j++) {
+		   if ( (!(mVerifier[mItemIdx[j]].isUCS2())) &&
+			(!(mVerifier[mItemIdx[j]].isUCS2())) ) 
+		   {
+			nonUCS2Num++ ;
+			nonUCS2Idx = j ;
+		   }
+		}
+
+		if (1 == nonUCS2Num) {
+		   Report( mVerifier[mItemIdx[nonUCS2Idx]].charset() );
+		   mDone = true ;
+		   return mDone ;
+		}
+	   }
+
+
+       } // End of for( i=0; i < len ...
+
+       if (mRunSampler)
+	  Sample(aBuf, len);
+
+       return mDone ;
+   }
+
+
+   public void DataEnd() {
+	
+	if (mDone == true)
+	    return ;
+
+	if (mItems == 2) {
+	    if ((mVerifier[mItemIdx[0]].charset()).equals("GB18030")) {
+		Report(mVerifier[mItemIdx[1]].charset()) ;
+		mDone = true ;
+	    } else if ((mVerifier[mItemIdx[1]].charset()).equals("GB18030")) {
+		Report(mVerifier[mItemIdx[0]].charset()) ;
+		mDone = true ;
+	    }
+	}
+
+	if (mRunSampler)
+	   Sample(null, 0, true);
+   }
+
+   public void Sample(byte[] aBuf, int aLen) {
+	  Sample(aBuf, aLen, false) ;
+   }
+
+   public void Sample(byte[] aBuf, int aLen, boolean aLastChance)
+   {
+      	int possibleCandidateNum  = 0;
+	int j;
+	int eucNum=0 ;
+
+	for (j=0; j< mItems; j++) {
+	   if (null != mStatisticsData[mItemIdx[j]]) 
+		eucNum++ ;
+	   if ((!mVerifier[mItemIdx[j]].isUCS2()) && 
+			(!(mVerifier[mItemIdx[j]].charset()).equals("GB18030")))
+		possibleCandidateNum++ ;
+	}
+
+	mRunSampler = (eucNum > 1) ;
+	
+     	if (mRunSampler) {
+            mRunSampler = mSampler.Sample(aBuf, aLen);
+            if(((aLastChance && mSampler.GetSomeData()) || 
+                mSampler.EnoughData())
+               && (eucNum == possibleCandidateNum)) {
+              mSampler.CalFreq();
+
+              int bestIdx = -1;
+              int eucCnt=0;
+              float bestScore = 0.0f;
+              for(j = 0; j < mItems; j++) {
+                 if((null != mStatisticsData[mItemIdx[j]])  &&
+                   (!(mVerifier[mItemIdx[j]].charset()).equals("Big5")))
+                 {
+                    float score = mSampler.GetScore(
+                       mStatisticsData[mItemIdx[j]].mFirstByteFreq(),
+                       mStatisticsData[mItemIdx[j]].mFirstByteWeight(),
+                       mStatisticsData[mItemIdx[j]].mSecondByteFreq(),
+                       mStatisticsData[mItemIdx[j]].mSecondByteWeight() );
+//System.out.println("FequencyScore("+mVerifier[mItemIdx[j]].charset()+")= "+ score);
+                    if(( 0 == eucCnt++) || (bestScore > score )) {
+                       bestScore = score;
+                       bestIdx = j;
+                    } // if(( 0 == eucCnt++) || (bestScore > score )) 
+                } // if(null != ...)
+             } // for
+             if (bestIdx >= 0)
+             {
+               Report( mVerifier[mItemIdx[bestIdx]].charset());
+               mDone = true;
+             }
+           } // if (eucNum == possibleCandidateNum)
+         } // if(mRunSampler)
+   }
+
+   public String[] getProbableCharsets() {
+
+	if (mItems <= 0) {
+	   String[] nomatch = new String[1];
+	   nomatch[0] = "nomatch" ;
+	   return nomatch ;
+	}
+
+	String ret[] = new String[mItems] ;
+	for (int i=0; i<mItems; i++)
+		ret[i] = mVerifier[mItemIdx[i]].charset() ;
+	return ret ;
+   }
+	
+}
diff --git a/org/mozilla/intl/chardet/nsSJISVerifier.java b/org/mozilla/intl/chardet/nsSJISVerifier.java
new file mode 100644
index 0000000..551ed63
--- /dev/null
+++ b/org/mozilla/intl/chardet/nsSJISVerifier.java
@@ -0,0 +1,99 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public
+ * License Version 1.1 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Netscape
+ * Communications Corporation.  Portions created by Netscape are
+ * Copyright (C) 1998 Netscape Communications Corporation. All
+ * Rights Reserved.
+ *
+ * Contributor(s): 
+ */
+/* 
+ * DO NOT EDIT THIS DOCUMENT MANUALLY !!!
+ * THIS FILE IS AUTOMATICALLY GENERATED BY THE TOOLS UNDER
+ *    AutoDetect/tools/
+ */
+
+package org.mozilla.intl.chardet ;
+
+import java.lang.*;
+
+public class nsSJISVerifier extends nsVerifier {
+
+	 static int[]  cclass   ; 
+	 static int[]  states   ; 
+	 static int    stFactor ; 
+	 static String charset  ; 
+
+	 public int[]  cclass()   { return cclass ;   }
+	 public int[]  states()   { return states ;   }
+	 public int    stFactor() { return stFactor ; }
+	 public String charset()  { return charset ;  }
+
+   public nsSJISVerifier() {
+
+      cclass = new int[256/8] ;
+
+      cclass[0] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (0))) )))))) ;
+      cclass[1] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[2] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[3] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[4] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[5] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[6] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[7] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[8] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[9] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[10] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[11] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[12] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[13] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[14] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[15] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[16] = ((int)(((  ((int)(((  ((int)((( 3) << 4) | (3)))  ) << 8) | (((int)(((3) << 4) | ( 3))) ))) ) << 16) | (  ((int)(((  ((int)(((3) << 4) | (3))) ) << 8) | (   ((int)(((3) << 4) | (3))) )))))) ;
+      cclass[17] = ((int)(((  ((int)(((  ((int)((( 3) << 4) | (3)))  ) << 8) | (((int)(((3) << 4) | ( 3))) ))) ) << 16) | (  ((int)(((  ((int)(((3) << 4) | (3))) ) << 8) | (   ((int)(((3) << 4) | (3))) )))))) ;
+      cclass[18] = ((int)(((  ((int)(((  ((int)((( 3) << 4) | (3)))  ) << 8) | (((int)(((3) << 4) | ( 3))) ))) ) << 16) | (  ((int)(((  ((int)(((3) << 4) | (3))) ) << 8) | (   ((int)(((3) << 4) | (3))) )))))) ;
+      cclass[19] = ((int)(((  ((int)(((  ((int)((( 3) << 4) | (3)))  ) << 8) | (((int)(((3) << 4) | ( 3))) ))) ) << 16) | (  ((int)(((  ((int)(((3) << 4) | (3))) ) << 8) | (   ((int)(((3) << 4) | (3))) )))))) ;
+      cclass[20] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (4))) )))))) ;
+      cclass[21] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[22] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[23] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[24] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[25] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[26] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[27] = ((int)(((  ((int)(((  ((int)((( 2) << 4) | (2)))  ) << 8) | (((int)(((2) << 4) | ( 2))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[28] = ((int)(((  ((int)(((  ((int)((( 3) << 4) | (3)))  ) << 8) | (((int)(((3) << 4) | ( 3))) ))) ) << 16) | (  ((int)(((  ((int)(((3) << 4) | (3))) ) << 8) | (   ((int)(((3) << 4) | (3))) )))))) ;
+      cclass[29] = ((int)(((  ((int)(((  ((int)((( 4) << 4) | (4)))  ) << 8) | (((int)(((4) << 4) | ( 5))) ))) ) << 16) | (  ((int)(((  ((int)(((5) << 4) | (3))) ) << 8) | (   ((int)(((3) << 4) | (3))) )))))) ;
+      cclass[30] = ((int)(((  ((int)(((  ((int)((( 4) << 4) | (4)))  ) << 8) | (((int)(((4) << 4) | ( 4))) ))) ) << 16) | (  ((int)(((  ((int)(((4) << 4) | (4))) ) << 8) | (   ((int)(((4) << 4) | (4))) )))))) ;
+      cclass[31] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 4))) ))) ) << 16) | (  ((int)(((  ((int)(((4) << 4) | (4))) ) << 8) | (   ((int)(((4) << 4) | (4))) )))))) ;
+
+
+
+      states = new int[3] ;
+
+      states[0] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((     3) << 4) | (eStart))) ) << 8) | (   ((int)(((eStart) << 4) | (eError))) )))))) ;
+      states[1] = ((int)(((  ((int)(((  ((int)((( eItsMe) << 4) | (eItsMe)))  ) << 8) | (((int)(((eItsMe) << 4) | ( eItsMe))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[2] = ((int)(((  ((int)(((  ((int)((( eStart) << 4) | (eStart)))  ) << 8) | (((int)(((eStart) << 4) | ( eStart))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eItsMe) << 4) | (eItsMe))) )))))) ;
+
+
+
+      charset =  "Shift_JIS";
+      stFactor =  6;
+
+   }
+
+   public boolean isUCS2() { return  false; } ;
+
+
+}
diff --git a/org/mozilla/intl/chardet/nsUCS2BEVerifier.java b/org/mozilla/intl/chardet/nsUCS2BEVerifier.java
new file mode 100644
index 0000000..794e650
--- /dev/null
+++ b/org/mozilla/intl/chardet/nsUCS2BEVerifier.java
@@ -0,0 +1,103 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public
+ * License Version 1.1 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Netscape
+ * Communications Corporation.  Portions created by Netscape are
+ * Copyright (C) 1998 Netscape Communications Corporation. All
+ * Rights Reserved.
+ *
+ * Contributor(s): 
+ */
+/* 
+ * DO NOT EDIT THIS DOCUMENT MANUALLY !!!
+ * THIS FILE IS AUTOMATICALLY GENERATED BY THE TOOLS UNDER
+ *    AutoDetect/tools/
+ */
+
+package org.mozilla.intl.chardet ;
+
+import java.lang.*;
+
+public class nsUCS2BEVerifier extends nsVerifier {
+
+	 static int[]  cclass   ; 
+	 static int[]  states   ; 
+	 static int    stFactor ; 
+	 static String charset  ; 
+
+	 public int[]  cclass()   { return cclass ;   }
+	 public int[]  states()   { return states ;   }
+	 public int    stFactor() { return stFactor ; }
+	 public String charset()  { return charset ;  }
+
+   public nsUCS2BEVerifier() {
+
+      cclass = new int[256/8] ;
+
+      cclass[0] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[1] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((2) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (1))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[2] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[3] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((3) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[4] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[5] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((3) << 4) | ( 3))) ))) ) << 16) | (  ((int)(((  ((int)(((3) << 4) | (3))) ) << 8) | (   ((int)(((3) << 4) | (0))) )))))) ;
+      cclass[6] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[7] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[8] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[9] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[10] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[11] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[12] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[13] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[14] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[15] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[16] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[17] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[18] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[19] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[20] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[21] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[22] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[23] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[24] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[25] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[26] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[27] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[28] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[29] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[30] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[31] = ((int)(((  ((int)(((  ((int)((( 5) << 4) | (4)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+
+
+
+      states = new int[7] ;
+
+      states[0] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((     3) << 4) | (      4))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (     7))) ) << 8) | (   ((int)(((     7) << 4) | (     5))) )))))) ;
+      states[1] = ((int)(((  ((int)(((  ((int)((( eItsMe) << 4) | (eItsMe)))  ) << 8) | (((int)(((eItsMe) << 4) | ( eItsMe))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[2] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((     6) << 4) | (      6))) ))) ) << 16) | (  ((int)(((  ((int)(((     6) << 4) | (     6))) ) << 8) | (   ((int)(((eItsMe) << 4) | (eItsMe))) )))))) ;
+      states[3] = ((int)(((  ((int)(((  ((int)(((      6) << 4) | (     6)))  ) << 8) | (((int)(((eItsMe) << 4) | (      6))) ))) ) << 16) | (  ((int)(((  ((int)(((     6) << 4) | (     6))) ) << 8) | (   ((int)(((     6) << 4) | (     6))) )))))) ;
+      states[4] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (     7)))  ) << 8) | (((int)(((     7) << 4) | (      5))) ))) ) << 16) | (  ((int)(((  ((int)(((     6) << 4) | (     6))) ) << 8) | (   ((int)(((     6) << 4) | (     6))) )))))) ;
+      states[5] = ((int)(((  ((int)(((  ((int)(((      6) << 4) | (     6)))  ) << 8) | (((int)(((     6) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((     6) << 4) | (     6))) ) << 8) | (   ((int)(((     8) << 4) | (     5))) )))))) ;
+      states[6] = ((int)(((  ((int)(((  ((int)((( eStart) << 4) | (eStart)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((     6) << 4) | (     6))) ) << 8) | (   ((int)(((     6) << 4) | (     6))) )))))) ;
+
+
+
+      charset =  "UTF-16BE";
+      stFactor =  6;
+
+   }
+
+   public boolean isUCS2() { return  true; } ;
+
+
+}
diff --git a/org/mozilla/intl/chardet/nsUCS2LEVerifier.java b/org/mozilla/intl/chardet/nsUCS2LEVerifier.java
new file mode 100644
index 0000000..a6e64d4
--- /dev/null
+++ b/org/mozilla/intl/chardet/nsUCS2LEVerifier.java
@@ -0,0 +1,103 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public
+ * License Version 1.1 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Netscape
+ * Communications Corporation.  Portions created by Netscape are
+ * Copyright (C) 1998 Netscape Communications Corporation. All
+ * Rights Reserved.
+ *
+ * Contributor(s): 
+ */
+/* 
+ * DO NOT EDIT THIS DOCUMENT MANUALLY !!!
+ * THIS FILE IS AUTOMATICALLY GENERATED BY THE TOOLS UNDER
+ *    AutoDetect/tools/
+ */
+
+package org.mozilla.intl.chardet ;
+
+import java.lang.*;
+
+public class nsUCS2LEVerifier extends nsVerifier {
+
+	 static int[]  cclass   ; 
+	 static int[]  states   ; 
+	 static int    stFactor ; 
+	 static String charset  ; 
+
+	 public int[]  cclass()   { return cclass ;   }
+	 public int[]  states()   { return states ;   }
+	 public int    stFactor() { return stFactor ; }
+	 public String charset()  { return charset ;  }
+
+   public nsUCS2LEVerifier() {
+
+      cclass = new int[256/8] ;
+
+      cclass[0] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[1] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((2) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (1))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[2] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[3] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((3) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[4] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[5] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((3) << 4) | ( 3))) ))) ) << 16) | (  ((int)(((  ((int)(((3) << 4) | (3))) ) << 8) | (   ((int)(((3) << 4) | (0))) )))))) ;
+      cclass[6] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[7] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[8] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[9] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[10] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[11] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[12] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[13] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[14] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[15] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[16] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[17] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[18] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[19] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[20] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[21] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[22] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[23] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[24] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[25] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[26] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[27] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[28] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[29] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[30] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[31] = ((int)(((  ((int)(((  ((int)((( 5) << 4) | (4)))  ) << 8) | (((int)(((0) << 4) | ( 0))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (0))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+
+
+
+      states = new int[7] ;
+
+      states[0] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((     3) << 4) | (      4))) ))) ) << 16) | (  ((int)(((  ((int)(((     6) << 4) | (     7))) ) << 8) | (   ((int)(((     6) << 4) | (     6))) )))))) ;
+      states[1] = ((int)(((  ((int)(((  ((int)((( eItsMe) << 4) | (eItsMe)))  ) << 8) | (((int)(((eItsMe) << 4) | ( eItsMe))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[2] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eItsMe)))  ) << 8) | (((int)(((eError) << 4) | (      5))) ))) ) << 16) | (  ((int)(((  ((int)(((     5) << 4) | (     5))) ) << 8) | (   ((int)(((eItsMe) << 4) | (eItsMe))) )))))) ;
+      states[3] = ((int)(((  ((int)(((  ((int)(((      6) << 4) | (     6)))  ) << 8) | (((int)(((eError) << 4) | (      5))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (     5))) ) << 8) | (   ((int)(((     5) << 4) | (     5))) )))))) ;
+      states[4] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (     5)))  ) << 8) | (((int)(((     5) << 4) | (      5))) ))) ) << 16) | (  ((int)(((  ((int)(((     8) << 4) | (     8))) ) << 8) | (   ((int)(((     6) << 4) | (     7))) )))))) ;
+      states[5] = ((int)(((  ((int)(((  ((int)(((      5) << 4) | (     5)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (     5))) ) << 8) | (   ((int)(((     5) << 4) | (     5))) )))))) ;
+      states[6] = ((int)(((  ((int)(((  ((int)((( eStart) << 4) | (eStart)))  ) << 8) | (((int)(((eError) << 4) | (      5))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (     5))) ) << 8) | (   ((int)(((     5) << 4) | (     5))) )))))) ;
+
+
+
+      charset =  "UTF-16LE";
+      stFactor =  6;
+
+   }
+
+   public boolean isUCS2() { return  true; } ;
+
+
+}
diff --git a/org/mozilla/intl/chardet/nsUTF8Verifier.java b/org/mozilla/intl/chardet/nsUTF8Verifier.java
new file mode 100644
index 0000000..43b79fc
--- /dev/null
+++ b/org/mozilla/intl/chardet/nsUTF8Verifier.java
@@ -0,0 +1,122 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public
+ * License Version 1.1 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Netscape
+ * Communications Corporation.  Portions created by Netscape are
+ * Copyright (C) 1998 Netscape Communications Corporation. All
+ * Rights Reserved.
+ *
+ * Contributor(s): 
+ */
+/* 
+ * DO NOT EDIT THIS DOCUMENT MANUALLY !!!
+ * THIS FILE IS AUTOMATICALLY GENERATED BY THE TOOLS UNDER
+ *    AutoDetect/tools/
+ */
+
+package org.mozilla.intl.chardet ;
+
+import java.lang.*;
+
+public class nsUTF8Verifier extends nsVerifier {
+
+	 static int[]  cclass   ; 
+	 static int[]  states   ; 
+	 static int    stFactor ; 
+	 static String charset  ; 
+
+	 public int[]  cclass()   { return cclass ;   }
+	 public int[]  states()   { return states ;   }
+	 public int    stFactor() { return stFactor ; }
+	 public String charset()  { return charset ;  }
+
+   public nsUTF8Verifier() {
+
+      cclass = new int[256/8] ;
+
+      cclass[0] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[1] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[2] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[3] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((0) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[4] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[5] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[6] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[7] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[8] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[9] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[10] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[11] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[12] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[13] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[14] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[15] = ((int)(((  ((int)(((  ((int)((( 1) << 4) | (1)))  ) << 8) | (((int)(((1) << 4) | ( 1))) ))) ) << 16) | (  ((int)(((  ((int)(((1) << 4) | (1))) ) << 8) | (   ((int)(((1) << 4) | (1))) )))))) ;
+      cclass[16] = ((int)(((  ((int)(((  ((int)((( 3) << 4) | (3)))  ) << 8) | (((int)(((3) << 4) | ( 3))) ))) ) << 16) | (  ((int)(((  ((int)(((2) << 4) | (2))) ) << 8) | (   ((int)(((2) << 4) | (2))) )))))) ;
+      cclass[17] = ((int)(((  ((int)(((  ((int)((( 4) << 4) | (4)))  ) << 8) | (((int)(((4) << 4) | ( 4))) ))) ) << 16) | (  ((int)(((  ((int)(((4) << 4) | (4))) ) << 8) | (   ((int)(((4) << 4) | (4))) )))))) ;
+      cclass[18] = ((int)(((  ((int)(((  ((int)((( 4) << 4) | (4)))  ) << 8) | (((int)(((4) << 4) | ( 4))) ))) ) << 16) | (  ((int)(((  ((int)(((4) << 4) | (4))) ) << 8) | (   ((int)(((4) << 4) | (4))) )))))) ;
+      cclass[19] = ((int)(((  ((int)(((  ((int)((( 4) << 4) | (4)))  ) << 8) | (((int)(((4) << 4) | ( 4))) ))) ) << 16) | (  ((int)(((  ((int)(((4) << 4) | (4))) ) << 8) | (   ((int)(((4) << 4) | (4))) )))))) ;
+      cclass[20] = ((int)(((  ((int)(((  ((int)((( 5) << 4) | (5)))  ) << 8) | (((int)(((5) << 4) | ( 5))) ))) ) << 16) | (  ((int)(((  ((int)(((5) << 4) | (5))) ) << 8) | (   ((int)(((5) << 4) | (5))) )))))) ;
+      cclass[21] = ((int)(((  ((int)(((  ((int)((( 5) << 4) | (5)))  ) << 8) | (((int)(((5) << 4) | ( 5))) ))) ) << 16) | (  ((int)(((  ((int)(((5) << 4) | (5))) ) << 8) | (   ((int)(((5) << 4) | (5))) )))))) ;
+      cclass[22] = ((int)(((  ((int)(((  ((int)((( 5) << 4) | (5)))  ) << 8) | (((int)(((5) << 4) | ( 5))) ))) ) << 16) | (  ((int)(((  ((int)(((5) << 4) | (5))) ) << 8) | (   ((int)(((5) << 4) | (5))) )))))) ;
+      cclass[23] = ((int)(((  ((int)(((  ((int)((( 5) << 4) | (5)))  ) << 8) | (((int)(((5) << 4) | ( 5))) ))) ) << 16) | (  ((int)(((  ((int)(((5) << 4) | (5))) ) << 8) | (   ((int)(((5) << 4) | (5))) )))))) ;
+      cclass[24] = ((int)(((  ((int)(((  ((int)((( 6) << 4) | (6)))  ) << 8) | (((int)(((6) << 4) | ( 6))) ))) ) << 16) | (  ((int)(((  ((int)(((6) << 4) | (6))) ) << 8) | (   ((int)(((0) << 4) | (0))) )))))) ;
+      cclass[25] = ((int)(((  ((int)(((  ((int)((( 6) << 4) | (6)))  ) << 8) | (((int)(((6) << 4) | ( 6))) ))) ) << 16) | (  ((int)(((  ((int)(((6) << 4) | (6))) ) << 8) | (   ((int)(((6) << 4) | (6))) )))))) ;
+      cclass[26] = ((int)(((  ((int)(((  ((int)((( 6) << 4) | (6)))  ) << 8) | (((int)(((6) << 4) | ( 6))) ))) ) << 16) | (  ((int)(((  ((int)(((6) << 4) | (6))) ) << 8) | (   ((int)(((6) << 4) | (6))) )))))) ;
+      cclass[27] = ((int)(((  ((int)(((  ((int)((( 6) << 4) | (6)))  ) << 8) | (((int)(((6) << 4) | ( 6))) ))) ) << 16) | (  ((int)(((  ((int)(((6) << 4) | (6))) ) << 8) | (   ((int)(((6) << 4) | (6))) )))))) ;
+      cclass[28] = ((int)(((  ((int)(((  ((int)((( 8) << 4) | (8)))  ) << 8) | (((int)(((8) << 4) | ( 8))) ))) ) << 16) | (  ((int)(((  ((int)(((8) << 4) | (8))) ) << 8) | (   ((int)(((8) << 4) | (7))) )))))) ;
+      cclass[29] = ((int)(((  ((int)(((  ((int)((( 8) << 4) | (8)))  ) << 8) | (((int)(((9) << 4) | ( 8))) ))) ) << 16) | (  ((int)(((  ((int)(((8) << 4) | (8))) ) << 8) | (   ((int)(((8) << 4) | (8))) )))))) ;
+      cclass[30] = ((int)(((  ((int)(((  ((int)((( 11) << 4) | (11)))  ) << 8) | (((int)(((11) << 4) | ( 11))) ))) ) << 16) | (  ((int)(((  ((int)(((11) << 4) | (11))) ) << 8) | (   ((int)(((11) << 4) | (10))) )))))) ;
+      cclass[31] = ((int)(((  ((int)(((  ((int)((( 0) << 4) | (0)))  ) << 8) | (((int)(((15) << 4) | ( 14))) ))) ) << 16) | (  ((int)(((  ((int)(((13) << 4) | (13))) ) << 8) | (   ((int)(((13) << 4) | (12))) )))))) ;
+
+
+
+      states = new int[26] ;
+
+      states[0] = ((int)(((  ((int)(((  ((int)(((      10) << 4) | (     12)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eStart) << 4) | (eError))) )))))) ;
+      states[1] = ((int)(((  ((int)(((  ((int)(((      3) << 4) | (     4)))  ) << 8) | (((int)(((     5) << 4) | (      6))) ))) ) << 16) | (  ((int)(((  ((int)(((     7) << 4) | (     8))) ) << 8) | (   ((int)(((     11) << 4) | (     9))) )))))) ;
+      states[2] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[3] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[4] = ((int)(((  ((int)(((  ((int)((( eItsMe) << 4) | (eItsMe)))  ) << 8) | (((int)(((eItsMe) << 4) | ( eItsMe))) ))) ) << 16) | (  ((int)(((  ((int)(((eItsMe) << 4) | (eItsMe))) ) << 8) | (   ((int)(((eItsMe) << 4) | (eItsMe))) )))))) ;
+      states[5] = ((int)(((  ((int)(((  ((int)((( eItsMe) << 4) | (eItsMe)))  ) << 8) | (((int)(((eItsMe) << 4) | ( eItsMe))) ))) ) << 16) | (  ((int)(((  ((int)(((eItsMe) << 4) | (eItsMe))) ) << 8) | (   ((int)(((eItsMe) << 4) | (eItsMe))) )))))) ;
+      states[6] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((     5) << 4) | (      5))) ))) ) << 16) | (  ((int)(((  ((int)(((     5) << 4) | (     5))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[7] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[8] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((     5) << 4) | (      5))) ))) ) << 16) | (  ((int)(((  ((int)(((     5) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[9] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[10] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((     7) << 4) | (      7))) ))) ) << 16) | (  ((int)(((  ((int)(((     7) << 4) | (     7))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[11] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[12] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((     7) << 4) | (      7))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[13] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[14] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((     9) << 4) | (      9))) ))) ) << 16) | (  ((int)(((  ((int)(((     9) << 4) | (     9))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[15] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[16] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((     9) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[17] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[18] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((     12) << 4) | (      12))) ))) ) << 16) | (  ((int)(((  ((int)(((     12) << 4) | (     12))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[19] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[20] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((     12) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[21] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[22] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((eError) << 4) | (      12))) ))) ) << 16) | (  ((int)(((  ((int)(((     12) << 4) | (     12))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[23] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[24] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((eStart) << 4) | ( eStart))) ))) ) << 16) | (  ((int)(((  ((int)(((eStart) << 4) | (eStart))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+      states[25] = ((int)(((  ((int)(((  ((int)((( eError) << 4) | (eError)))  ) << 8) | (((int)(((eError) << 4) | ( eError))) ))) ) << 16) | (  ((int)(((  ((int)(((eError) << 4) | (eError))) ) << 8) | (   ((int)(((eError) << 4) | (eError))) )))))) ;
+
+
+
+      charset =  "UTF-8";
+      stFactor =  16;
+
+   }
+
+   public boolean isUCS2() { return  false; } ;
+
+
+}
diff --git a/org/mozilla/intl/chardet/nsVerifier.java b/org/mozilla/intl/chardet/nsVerifier.java
new file mode 100644
index 0000000..316127c
--- /dev/null
+++ b/org/mozilla/intl/chardet/nsVerifier.java
@@ -0,0 +1,64 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public
+ * License Version 1.1 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Netscape
+ * Communications Corporation.  Portions created by Netscape are
+ * Copyright (C) 1998 Netscape Communications Corporation. All
+ * Rights Reserved.
+ *
+ * Contributor(s):
+ */
+
+package org.mozilla.intl.chardet ;
+
+import java.lang.*;
+
+public abstract class nsVerifier {
+
+     static final byte eStart = (byte)0;
+     static final byte eError = (byte)1;
+     static final byte eItsMe = (byte)2;
+     static final int eidxSft4bits = 3;
+     static final int eSftMsk4bits = 7;
+     static final int eBitSft4bits = 2;
+     static final int eUnitMsk4bits = 0x0000000F;
+
+     nsVerifier() {
+     }
+
+     public abstract String charset() ;
+     public abstract int stFactor()   ;
+     public abstract int[] cclass()   ;
+     public abstract int[] states()   ;
+
+     public abstract boolean isUCS2() ;
+
+     public static byte getNextState(nsVerifier v, byte b, byte s) {
+
+         return (byte) ( 0xFF & 
+	     (((v.states()[((
+		   (s*v.stFactor()+(((v.cclass()[((b&0xFF)>>v.eidxSft4bits)]) 
+		   >> ((b & v.eSftMsk4bits) << v.eBitSft4bits)) 
+		   & v.eUnitMsk4bits ))&0xFF)
+		>> v.eidxSft4bits) ]) >> (((
+		   (s*v.stFactor()+(((v.cclass()[((b&0xFF)>>v.eidxSft4bits)]) 
+		   >> ((b & v.eSftMsk4bits) << v.eBitSft4bits)) 
+		   & v.eUnitMsk4bits ))&0xFF) 
+		& v.eSftMsk4bits) << v.eBitSft4bits)) & v.eUnitMsk4bits )
+	 ) ;
+
+     }
+
+
+}
diff --git a/src.zip b/src.zip
deleted file mode 100644
index 9cedddc..0000000
--- a/src.zip
+++ /dev/null
Binary files differ
