1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 package org.apache.harmony.niochar.charset.additional; 19 20 import java.nio.ByteBuffer; 21 import java.nio.CharBuffer; 22 import java.nio.charset.Charset; 23 import java.nio.charset.CharsetDecoder; 24 import java.nio.charset.CharsetEncoder; 25 import java.nio.charset.CoderResult; 26 27 /* TODO: support direct byte buffers 28 import org.apache.harmony.nio.AddressUtil; 29 import org.apache.harmony.niochar.CharsetProviderImpl; 30 */ 31 32 public class IBM437 extends Charset { 33 34 public IBM437(String csName, String[] aliases) { 35 super(csName, aliases); 36 } 37 38 public boolean contains(Charset cs) { 39 return cs.name().equalsIgnoreCase("IBM367") || cs.name().equalsIgnoreCase("IBM437") || cs.name().equalsIgnoreCase("US-ASCII") ; 40 } 41 42 public CharsetDecoder newDecoder() { 43 return new Decoder(this); 44 } 45 46 public CharsetEncoder newEncoder() { 47 return new Encoder(this); 48 } 49 50 private static final class Decoder extends CharsetDecoder{ 51 private Decoder(Charset cs){ 52 super(cs, 1, 1); 53 54 } 55 56 private native int nDecode(char[] array, int arrPosition, int remaining, long outAddr, int absolutePos); 57 58 59 protected CoderResult decodeLoop(ByteBuffer bb, CharBuffer cb){ 60 int cbRemaining = cb.remaining(); 61 /* TODO: support direct byte buffers 62 if(CharsetProviderImpl.hasLoadedNatives() && bb.isDirect() && bb.hasRemaining() && cb.hasArray()){ 63 int toProceed = bb.remaining(); 64 int cbPos = cb.position(); 65 int bbPos = bb.position(); 66 boolean throwOverflow = false; 67 if( cbRemaining < toProceed ) { 68 toProceed = cbRemaining; 69 throwOverflow = true; 70 } 71 int res = nDecode(cb.array(), cb.arrayOffset()+cbPos, toProceed, AddressUtil.getDirectBufferAddress(bb), bbPos); 72 bb.position(bbPos+res); 73 cb.position(cbPos+res); 74 if(throwOverflow) return CoderResult.OVERFLOW; 75 }else{ 76 */ 77 if(bb.hasArray() && cb.hasArray()) { 78 int rem = bb.remaining(); 79 rem = cbRemaining >= rem ? rem : cbRemaining; 80 byte[] bArr = bb.array(); 81 char[] cArr = cb.array(); 82 int bStart = bb.position(); 83 int cStart = cb.position(); 84 int i; 85 for(i=bStart; i<bStart+rem; i++) { 86 char in = (char)(bArr[i] & 0xFF); 87 if(in >= 26){ 88 int index = (int)in - 26; 89 cArr[cStart++] = (char)arr[index]; 90 }else { 91 cArr[cStart++] = (char)(in & 0xFF); 92 } 93 } 94 bb.position(i); 95 cb.position(cStart); 96 if(rem == cbRemaining && bb.hasRemaining()) return CoderResult.OVERFLOW; 97 } else { 98 while(bb.hasRemaining()){ 99 if( cbRemaining == 0 ) return CoderResult.OVERFLOW; 100 char in = (char)(bb.get() & 0xFF); 101 if(in >= 26){ 102 int index = (int)in - 26; 103 cb.put(arr[index]); 104 }else { 105 cb.put((char)(in & 0xFF)); 106 } 107 cbRemaining--; 108 } 109 /* 110 } 111 */ 112 } 113 return CoderResult.UNDERFLOW; 114 } 115 116 final static char[] arr = { 117 0x001C,0x001B,0x007F,0x001D,0x001E,0x001F, 118 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, 119 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, 120 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, 121 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, 122 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, 123 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, 124 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, 125 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, 126 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, 127 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, 128 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, 129 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x001A, 130 0x00C7,0x00FC,0x00E9,0x00E2,0x00E4,0x00E0,0x00E5,0x00E7, 131 0x00EA,0x00EB,0x00E8,0x00EF,0x00EE,0x00EC,0x00C4,0x00C5, 132 0x00C9,0x00E6,0x00C6,0x00F4,0x00F6,0x00F2,0x00FB,0x00F9, 133 0x00FF,0x00D6,0x00DC,0x00A2,0x00A3,0x00A5,0x20A7,0x0192, 134 0x00E1,0x00ED,0x00F3,0x00FA,0x00F1,0x00D1,0x00AA,0x00BA, 135 0x00BF,0x2310,0x00AC,0x00BD,0x00BC,0x00A1,0x00AB,0x00BB, 136 0x2591,0x2592,0x2593,0x2502,0x2524,0x2561,0x2562,0x2556, 137 0x2555,0x2563,0x2551,0x2557,0x255D,0x255C,0x255B,0x2510, 138 0x2514,0x2534,0x252C,0x251C,0x2500,0x253C,0x255E,0x255F, 139 0x255A,0x2554,0x2569,0x2566,0x2560,0x2550,0x256C,0x2567, 140 0x2568,0x2564,0x2565,0x2559,0x2558,0x2552,0x2553,0x256B, 141 0x256A,0x2518,0x250C,0x2588,0x2584,0x258C,0x2590,0x2580, 142 0x03B1,0x00DF,0x0393,0x03C0,0x03A3,0x03C3,0x03BC,0x03C4, 143 0x03A6,0x0398,0x03A9,0x03B4,0x221E,0x03C6,0x03B5,0x2229, 144 0x2261,0x00B1,0x2265,0x2264,0x2320,0x2321,0x00F7,0x2248, 145 0x00B0,0x2219,0x00B7,0x221A,0x207F,0x00B2,0x25A0,0x00A0 146 }; 147 } 148 149 private static final class Encoder extends CharsetEncoder{ 150 private Encoder(Charset cs){ 151 super(cs, 1, 1); 152 } 153 154 private native void nEncode(long outAddr, int absolutePos, char[] array, int arrPosition, int[] res); 155 156 protected CoderResult encodeLoop(CharBuffer cb, ByteBuffer bb){ 157 int bbRemaining = bb.remaining(); 158 /* TODO: support direct byte buffers 159 if(CharsetProviderImpl.hasLoadedNatives() && bb.isDirect() && cb.hasRemaining() && cb.hasArray()){ 160 int toProceed = cb.remaining(); 161 int cbPos = cb.position(); 162 int bbPos = bb.position(); 163 boolean throwOverflow = false; 164 if( bbRemaining < toProceed ) { 165 toProceed = bbRemaining; 166 throwOverflow = true; 167 } 168 int[] res = {toProceed, 0}; 169 nEncode(AddressUtil.getDirectBufferAddress(bb), bbPos, cb.array(), cb.arrayOffset()+cbPos, res); 170 if( res[0] <= 0 ) { 171 bb.position(bbPos-res[0]); 172 cb.position(cbPos-res[0]); 173 if(res[1]!=0) { 174 if(res[1] < 0) 175 return CoderResult.malformedForLength(-res[1]); 176 else 177 return CoderResult.unmappableForLength(res[1]); 178 } 179 }else{ 180 bb.position(bbPos+res[0]); 181 cb.position(cbPos+res[0]); 182 if(throwOverflow) return CoderResult.OVERFLOW; 183 } 184 }else{ 185 */ 186 if(bb.hasArray() && cb.hasArray()) { 187 byte[] byteArr = bb.array(); 188 char[] charArr = cb.array(); 189 int rem = cb.remaining(); 190 int byteArrStart = bb.position(); 191 rem = bbRemaining <= rem ? bbRemaining : rem; 192 int x; 193 for(x = cb.position(); x < cb.position()+rem; x++) { 194 char c = charArr[x]; 195 if(c > (char)0x25A0){ 196 if (c >= 0xD800 && c <= 0xDFFF) { 197 if(x+1 < cb.limit()) { 198 char c1 = charArr[x+1]; 199 if(c1 >= 0xD800 && c1 <= 0xDFFF) { 200 cb.position(x); bb.position(byteArrStart); 201 return CoderResult.unmappableForLength(2); 202 } 203 } else { 204 cb.position(x); bb.position(byteArrStart); 205 return CoderResult.UNDERFLOW; 206 } 207 cb.position(x); bb.position(byteArrStart); 208 return CoderResult.malformedForLength(1); 209 } 210 cb.position(x); bb.position(byteArrStart); 211 return CoderResult.unmappableForLength(1); 212 }else{ 213 if(c < 0x1A) { 214 byteArr[byteArrStart++] = (byte)c; 215 } else { 216 int index = (int)c >> 8; 217 index = encodeIndex[index]; 218 if(index < 0) { 219 cb.position(x); bb.position(byteArrStart); 220 return CoderResult.unmappableForLength(1); 221 } 222 index <<= 8; 223 index += (int)c & 0xFF; 224 if((byte)arr[index] != 0){ 225 byteArr[byteArrStart++] = (byte)arr[index]; 226 }else{ 227 cb.position(x); bb.position(byteArrStart); 228 return CoderResult.unmappableForLength(1); 229 } 230 } 231 } 232 } 233 cb.position(x); 234 bb.position(byteArrStart); 235 if(rem == bbRemaining && cb.hasRemaining()) { 236 return CoderResult.OVERFLOW; 237 } 238 } else { 239 while(cb.hasRemaining()){ 240 if( bbRemaining == 0 ) return CoderResult.OVERFLOW; 241 char c = cb.get(); 242 if(c > (char)0x25A0){ 243 if (c >= 0xD800 && c <= 0xDFFF) { 244 if(cb.hasRemaining()) { 245 char c1 = cb.get(); 246 if(c1 >= 0xD800 && c1 <= 0xDFFF) { 247 cb.position(cb.position()-2); 248 return CoderResult.unmappableForLength(2); 249 } else { 250 cb.position(cb.position()-1); 251 } 252 } else { 253 cb.position(cb.position()-1); 254 return CoderResult.UNDERFLOW; 255 } 256 cb.position(cb.position()-1); 257 return CoderResult.malformedForLength(1); 258 } 259 cb.position(cb.position()-1); 260 return CoderResult.unmappableForLength(1); 261 }else{ 262 if(c < 0x1A) { 263 bb.put((byte)c); 264 } else { 265 int index = (int)c >> 8; 266 index = encodeIndex[index]; 267 if(index < 0) { 268 cb.position(cb.position()-1); 269 return CoderResult.unmappableForLength(1); 270 } 271 index <<= 8; 272 index += (int)c & 0xFF; 273 if((byte)arr[index] != 0){ 274 bb.put((byte)arr[index]); 275 }else{ 276 cb.position(cb.position()-1); 277 return CoderResult.unmappableForLength(1); 278 } 279 } 280 bbRemaining--; 281 } 282 } 283 /* TODO: support direct byte buffers 284 } 285 */ 286 } 287 return CoderResult.UNDERFLOW; 288 } 289 290 final static char arr[] = { 291 292 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, 293 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x7F,0x1B,0x1A,0x1D,0x1E,0x1F, 294 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, 295 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, 296 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, 297 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, 298 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, 299 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x1C, 300 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 301 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 302 0xFF,0xAD,0x9B,0x9C,0x00,0x9D,0x00,0x00,0x00,0x00,0xA6,0xAE,0xAA,0x00,0x00,0x00, 303 0xF8,0xF1,0xFD,0x00,0x00,0x00,0x00,0xFA,0x00,0x00,0xA7,0xAF,0xAC,0xAB,0x00,0xA8, 304 0x00,0x00,0x00,0x00,0x8E,0x8F,0x92,0x80,0x00,0x90,0x00,0x00,0x00,0x00,0x00,0x00, 305 0x00,0xA5,0x00,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x00,0x00,0x9A,0x00,0x00,0xE1, 306 0x85,0xA0,0x83,0x00,0x84,0x86,0x91,0x87,0x8A,0x82,0x88,0x89,0x8D,0xA1,0x8C,0x8B, 307 0x00,0xA4,0x95,0xA2,0x93,0x00,0x94,0xF6,0x00,0x97,0xA3,0x96,0x81,0x00,0x00,0x98, 308 309 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 310 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 311 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 312 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 313 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 314 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 315 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 316 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 317 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 318 0x00,0x00,0x9F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 319 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 320 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 321 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 322 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 323 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 324 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 325 326 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 327 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 328 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 329 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 330 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 331 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 332 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 333 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 334 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 335 0x00,0x00,0x00,0xE2,0x00,0x00,0x00,0x00,0xE9,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 336 0x00,0x00,0x00,0xE4,0x00,0x00,0xE8,0x00,0x00,0xEA,0x00,0x00,0x00,0x00,0x00,0x00, 337 0x00,0xE0,0x00,0x00,0xEB,0xEE,0x00,0x00,0x00,0x00,0x00,0x00,0xE6,0x00,0x00,0x00, 338 0xE3,0x00,0x00,0xE5,0xE7,0x00,0xED,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 339 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 340 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 341 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 342 343 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 344 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 345 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 346 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 347 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 348 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 349 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 350 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC, 351 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 352 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 353 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 354 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 355 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 356 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 357 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 358 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 359 360 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 361 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF9,0xFB,0x00,0x00,0x00,0xEC,0x00, 362 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEF,0x00,0x00,0x00,0x00,0x00,0x00, 363 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 364 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 365 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 366 0x00,0xF0,0x00,0x00,0xF3,0xF2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 367 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 368 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 369 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 370 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 371 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 372 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 373 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 374 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 375 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 376 377 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 378 0xA9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 379 0xF4,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 380 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 381 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 382 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 383 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 384 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 385 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 386 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 387 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 388 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 389 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 390 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 391 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 392 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 393 394 0xC4,0x00,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDA,0x00,0x00,0x00, 395 0xBF,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0xD9,0x00,0x00,0x00,0xC3,0x00,0x00,0x00, 396 0x00,0x00,0x00,0x00,0xB4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC2,0x00,0x00,0x00, 397 0x00,0x00,0x00,0x00,0xC1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC5,0x00,0x00,0x00, 398 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 399 0xCD,0xBA,0xD5,0xD6,0xC9,0xB8,0xB7,0xBB,0xD4,0xD3,0xC8,0xBE,0xBD,0xBC,0xC6,0xC7, 400 0xCC,0xB5,0xB6,0xB9,0xD1,0xD2,0xCB,0xCF,0xD0,0xCA,0xD8,0xD7,0xCE,0x00,0x00,0x00, 401 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 402 0xDF,0x00,0x00,0x00,0xDC,0x00,0x00,0x00,0xDB,0x00,0x00,0x00,0xDD,0x00,0x00,0x00, 403 0xDE,0xB0,0xB1,0xB2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 404 0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 405 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 406 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 407 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 408 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 409 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 410 }; 411 412 final static int[] encodeIndex = { 413 0,1,-1,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 414 3,-1,4,5,-1,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 415 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 416 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 417 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 418 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 419 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 420 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 421 }; 422 } 423 } 424