linux/drivers/media/usb/gspca/topro.c
<<
>>
Prefs
   1/*
   2 * Topro TP6800/6810 webcam driver.
   3 *
   4 * Copyright (C) 2011 Jean-François Moine (http://moinejf.free.fr)
   5 * Copyright (C) 2009 Anders Blomdell (anders.blomdell@control.lth.se)
   6 * Copyright (C) 2008 Thomas Champagne (lafeuil@gmail.com)
   7 *
   8 * This program is free software; you can redistribute it and/or modify
   9 * it under the terms of the GNU General Public License as published by
  10 * the Free Software Foundation; either version 2 of the License, or
  11 * (at your option) any later version.
  12 *
  13 * This program is distributed in the hope that it will be useful,
  14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16 * GNU General Public License for more details.
  17 *
  18 * You should have received a copy of the GNU General Public License
  19 * along with this program; If not, see <http://www.gnu.org/licenses/>.
  20 */
  21
  22#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  23
  24#include "gspca.h"
  25
  26MODULE_DESCRIPTION("Topro TP6800/6810 gspca webcam driver");
  27MODULE_AUTHOR("Jean-Francois Moine <http://moinejf.free.fr>, Anders Blomdell <anders.blomdell@control.lth.se>");
  28MODULE_LICENSE("GPL");
  29
  30static int force_sensor = -1;
  31
  32/* JPEG header */
  33static const u8 jpeg_head[] = {
  34        0xff, 0xd8,                     /* jpeg */
  35
  36/* quantization table quality 50% */
  37        0xff, 0xdb, 0x00, 0x84,         /* DQT */
  380,
  39#define JPEG_QT0_OFFSET 7
  40        0x10, 0x0b, 0x0c, 0x0e, 0x0c, 0x0a, 0x10, 0x0e,
  41        0x0d, 0x0e, 0x12, 0x11, 0x10, 0x13, 0x18, 0x28,
  42        0x1a, 0x18, 0x16, 0x16, 0x18, 0x31, 0x23, 0x25,
  43        0x1d, 0x28, 0x3a, 0x33, 0x3d, 0x3c, 0x39, 0x33,
  44        0x38, 0x37, 0x40, 0x48, 0x5c, 0x4e, 0x40, 0x44,
  45        0x57, 0x45, 0x37, 0x38, 0x50, 0x6d, 0x51, 0x57,
  46        0x5f, 0x62, 0x67, 0x68, 0x67, 0x3e, 0x4d, 0x71,
  47        0x79, 0x70, 0x64, 0x78, 0x5c, 0x65, 0x67, 0x63,
  481,
  49#define JPEG_QT1_OFFSET 72
  50        0x11, 0x12, 0x12, 0x18, 0x15, 0x18, 0x2f, 0x1a,
  51        0x1a, 0x2f, 0x63, 0x42, 0x38, 0x42, 0x63, 0x63,
  52        0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
  53        0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
  54        0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
  55        0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
  56        0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
  57        0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
  58
  59        /* Define Huffman table (thanks to Thomas Kaiser) */
  60        0xff, 0xc4, 0x01, 0x5e,
  61        0x00, 0x00, 0x02, 0x03,
  62        0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
  63        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02,
  64        0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10,
  65        0x00, 0x02, 0x01, 0x02, 0x04, 0x04, 0x03, 0x04,
  66        0x07, 0x05, 0x04, 0x06, 0x01, 0x00, 0x00, 0x57,
  67        0x01, 0x02, 0x03, 0x00, 0x11, 0x04, 0x12, 0x21,
  68        0x31, 0x13, 0x41, 0x51, 0x61, 0x05, 0x22, 0x32,
  69        0x14, 0x71, 0x81, 0x91, 0x15, 0x23, 0x42, 0x52,
  70        0x62, 0xa1, 0xb1, 0x06, 0x33, 0x72, 0xc1, 0xd1,
  71        0x24, 0x43, 0x53, 0x82, 0x16, 0x34, 0x92, 0xa2,
  72        0xe1, 0xf1, 0xf0, 0x07, 0x08, 0x17, 0x18, 0x25,
  73        0x26, 0x27, 0x28, 0x35, 0x36, 0x37, 0x38, 0x44,
  74        0x45, 0x46, 0x47, 0x48, 0x54, 0x55, 0x56, 0x57,
  75        0x58, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x73,
  76        0x74, 0x75, 0x76, 0x77, 0x78, 0x83, 0x84, 0x85,
  77        0x86, 0x87, 0x88, 0x93, 0x94, 0x95, 0x96, 0x97,
  78        0x98, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xb2,
  79        0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xc2, 0xc3,
  80        0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xd2, 0xd3, 0xd4,
  81        0xd5, 0xd6, 0xd7, 0xd8, 0xe2, 0xe3, 0xe4, 0xe5,
  82        0xe6, 0xe7, 0xe8, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6,
  83        0xf7, 0xf8, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
  84        0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
  85        0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04,
  86        0x05, 0x06, 0x07, 0x08, 0x09, 0x11, 0x00, 0x02,
  87        0x01, 0x02, 0x04, 0x04, 0x03, 0x04, 0x07, 0x05,
  88        0x04, 0x06, 0x01, 0x00, 0x00, 0x57, 0x00, 0x01,
  89        0x11, 0x02, 0x21, 0x03, 0x12, 0x31, 0x41, 0x13,
  90        0x22, 0x51, 0x61, 0x04, 0x32, 0x71, 0x05, 0x14,
  91        0x23, 0x42, 0x33, 0x52, 0x81, 0x91, 0xa1, 0xb1,
  92        0xf0, 0x06, 0x15, 0xc1, 0xd1, 0xe1, 0x24, 0x43,
  93        0x62, 0xf1, 0x16, 0x25, 0x34, 0x53, 0x72, 0x82,
  94        0x92, 0x07, 0x08, 0x17, 0x18, 0x26, 0x27, 0x28,
  95        0x35, 0x36, 0x37, 0x38, 0x44, 0x45, 0x46, 0x47,
  96        0x48, 0x54, 0x55, 0x56, 0x57, 0x58, 0x63, 0x64,
  97        0x65, 0x66, 0x67, 0x68, 0x73, 0x74, 0x75, 0x76,
  98        0x77, 0x78, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88,
  99        0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0xa2, 0xa3,
 100        0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xb2, 0xb3, 0xb4,
 101        0xb5, 0xb6, 0xb7, 0xb8, 0xc2, 0xc3, 0xc4, 0xc5,
 102        0xc6, 0xc7, 0xc8, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6,
 103        0xd7, 0xd8, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
 104        0xe8, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
 105        0xff, 0xc0, 0x00, 0x11,         /* SOF0 (start of frame 0 */
 106        0x08,                           /* data precision */
 107#define JPEG_HEIGHT_OFFSET 493
 108        0x01, 0xe0,                     /* height */
 109        0x02, 0x80,                     /* width */
 110        0x03,                           /* component number */
 111                0x01,
 112                        0x21,           /* samples Y = jpeg 422 */
 113                        0x00,           /* quant Y */
 114                0x02, 0x11, 0x01,       /* samples CbCr - quant CbCr */
 115                0x03, 0x11, 0x01,
 116
 117        0xff, 0xda, 0x00, 0x0c,         /* SOS (start of scan) */
 118        0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00
 119#define JPEG_HDR_SZ 521
 120};
 121
 122struct sd {
 123        struct gspca_dev gspca_dev;     /* !! must be the first item */
 124        struct v4l2_ctrl *jpegqual;
 125        struct v4l2_ctrl *sharpness;
 126        struct v4l2_ctrl *gamma;
 127        struct v4l2_ctrl *blue;
 128        struct v4l2_ctrl *red;
 129
 130        u8 framerate;
 131        u8 quality;             /* webcam current JPEG quality (0..16) */
 132        s8 ag_cnt;              /* autogain / start counter for tp6810 */
 133#define AG_CNT_START 13         /* check gain every N frames */
 134
 135        u8 bridge;
 136        u8 sensor;
 137
 138        u8 jpeg_hdr[JPEG_HDR_SZ];
 139};
 140
 141enum bridges {
 142        BRIDGE_TP6800,
 143        BRIDGE_TP6810,
 144};
 145
 146enum sensors {
 147        SENSOR_CX0342,
 148        SENSOR_SOI763A,         /* ~= ov7630 / ov7648 */
 149        NSENSORS
 150};
 151
 152static const struct v4l2_pix_format vga_mode[] = {
 153        {320, 240, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
 154                .bytesperline = 320,
 155                .sizeimage = 320 * 240 * 4 / 8 + 590,
 156                .colorspace = V4L2_COLORSPACE_JPEG},
 157        {640, 480, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
 158                .bytesperline = 640,
 159                .sizeimage = 640 * 480 * 3 / 8 + 590,
 160                .colorspace = V4L2_COLORSPACE_JPEG}
 161};
 162
 163/*
 164 * JPEG quality
 165 * index: webcam compression
 166 * value: JPEG quality in %
 167 */
 168static const u8 jpeg_q[17] = {
 169        88, 77, 67, 57, 55, 55, 45, 45, 36, 36, 30, 30, 26, 26, 22, 22, 94
 170};
 171
 172#define BULK_OUT_SIZE           0x20
 173#if BULK_OUT_SIZE > USB_BUF_SZ
 174#error "USB buffer too small"
 175#endif
 176
 177#define DEFAULT_FRAME_RATE 30
 178
 179static const u8 rates[] = {30, 20, 15, 10, 7, 5};
 180static const struct framerates framerates[] = {
 181        {
 182                .rates = rates,
 183                .nrates = ARRAY_SIZE(rates)
 184        },
 185        {
 186                .rates = rates,
 187                .nrates = ARRAY_SIZE(rates)
 188        }
 189};
 190static const u8 rates_6810[] = {30, 15, 10, 7, 5};
 191static const struct framerates framerates_6810[] = {
 192        {
 193                .rates = rates_6810,
 194                .nrates = ARRAY_SIZE(rates_6810)
 195        },
 196        {
 197                .rates = rates_6810,
 198                .nrates = ARRAY_SIZE(rates_6810)
 199        }
 200};
 201
 202/*
 203 * webcam quality in %
 204 * the last value is the ultra fine quality
 205 */
 206
 207/* TP6800 register offsets */
 208#define TP6800_R10_SIF_TYPE             0x10
 209#define TP6800_R11_SIF_CONTROL          0x11
 210#define TP6800_R12_SIF_ADDR_S           0x12
 211#define TP6800_R13_SIF_TX_DATA          0x13
 212#define TP6800_R14_SIF_RX_DATA          0x14
 213#define TP6800_R15_GPIO_PU              0x15
 214#define TP6800_R16_GPIO_PD              0x16
 215#define TP6800_R17_GPIO_IO              0x17
 216#define TP6800_R18_GPIO_DATA            0x18
 217#define TP6800_R19_SIF_ADDR_S2          0x19
 218#define TP6800_R1A_SIF_TX_DATA2         0x1a
 219#define TP6800_R1B_SIF_RX_DATA2         0x1b
 220#define TP6800_R21_ENDP_1_CTL           0x21
 221#define TP6800_R2F_TIMING_CFG           0x2f
 222#define TP6800_R30_SENSOR_CFG           0x30
 223#define TP6800_R31_PIXEL_START          0x31
 224#define TP6800_R32_PIXEL_END_L          0x32
 225#define TP6800_R33_PIXEL_END_H          0x33
 226#define TP6800_R34_LINE_START           0x34
 227#define TP6800_R35_LINE_END_L           0x35
 228#define TP6800_R36_LINE_END_H           0x36
 229#define TP6800_R37_FRONT_DARK_ST        0x37
 230#define TP6800_R38_FRONT_DARK_END       0x38
 231#define TP6800_R39_REAR_DARK_ST_L       0x39
 232#define TP6800_R3A_REAR_DARK_ST_H       0x3a
 233#define TP6800_R3B_REAR_DARK_END_L      0x3b
 234#define TP6800_R3C_REAR_DARK_END_H      0x3c
 235#define TP6800_R3D_HORIZ_DARK_LINE_L    0x3d
 236#define TP6800_R3E_HORIZ_DARK_LINE_H    0x3e
 237#define TP6800_R3F_FRAME_RATE           0x3f
 238#define TP6800_R50                      0x50
 239#define TP6800_R51                      0x51
 240#define TP6800_R52                      0x52
 241#define TP6800_R53                      0x53
 242#define TP6800_R54_DARK_CFG             0x54
 243#define TP6800_R55_GAMMA_R              0x55
 244#define TP6800_R56_GAMMA_G              0x56
 245#define TP6800_R57_GAMMA_B              0x57
 246#define TP6800_R5C_EDGE_THRLD           0x5c
 247#define TP6800_R5D_DEMOSAIC_CFG         0x5d
 248#define TP6800_R78_FORMAT               0x78
 249#define TP6800_R79_QUALITY              0x79
 250#define TP6800_R7A_BLK_THRLD            0x7a
 251
 252/* CX0342 register offsets */
 253
 254#define CX0342_SENSOR_ID                0x00
 255#define CX0342_VERSION_NO               0x01
 256#define CX0342_ORG_X_L                  0x02
 257#define CX0342_ORG_X_H                  0x03
 258#define CX0342_ORG_Y_L                  0x04
 259#define CX0342_ORG_Y_H                  0x05
 260#define CX0342_STOP_X_L                 0x06
 261#define CX0342_STOP_X_H                 0x07
 262#define CX0342_STOP_Y_L                 0x08
 263#define CX0342_STOP_Y_H                 0x09
 264#define CX0342_FRAME_WIDTH_L            0x0a
 265#define CX0342_FRAME_WIDTH_H            0x0b
 266#define CX0342_FRAME_HEIGH_L            0x0c
 267#define CX0342_FRAME_HEIGH_H            0x0d
 268#define CX0342_EXPO_LINE_L              0x10
 269#define CX0342_EXPO_LINE_H              0x11
 270#define CX0342_EXPO_CLK_L               0x12
 271#define CX0342_EXPO_CLK_H               0x13
 272#define CX0342_RAW_GRGAIN_L             0x14
 273#define CX0342_RAW_GRGAIN_H             0x15
 274#define CX0342_RAW_GBGAIN_L             0x16
 275#define CX0342_RAW_GBGAIN_H             0x17
 276#define CX0342_RAW_RGAIN_L              0x18
 277#define CX0342_RAW_RGAIN_H              0x19
 278#define CX0342_RAW_BGAIN_L              0x1a
 279#define CX0342_RAW_BGAIN_H              0x1b
 280#define CX0342_GLOBAL_GAIN              0x1c
 281#define CX0342_SYS_CTRL_0               0x20
 282#define CX0342_SYS_CTRL_1               0x21
 283#define CX0342_SYS_CTRL_2               0x22
 284#define CX0342_BYPASS_MODE              0x23
 285#define CX0342_SYS_CTRL_3               0x24
 286#define CX0342_TIMING_EN                0x25
 287#define CX0342_OUTPUT_CTRL              0x26
 288#define CX0342_AUTO_ADC_CALIB           0x27
 289#define CX0342_SYS_CTRL_4               0x28
 290#define CX0342_ADCGN                    0x30
 291#define CX0342_SLPCR                    0x31
 292#define CX0342_SLPFN_LO                 0x32
 293#define CX0342_ADC_CTL                  0x33
 294#define CX0342_LVRST_BLBIAS             0x34
 295#define CX0342_VTHSEL                   0x35
 296#define CX0342_RAMP_RIV                 0x36
 297#define CX0342_LDOSEL                   0x37
 298#define CX0342_CLOCK_GEN                0x40
 299#define CX0342_SOFT_RESET               0x41
 300#define CX0342_PLL                      0x42
 301#define CX0342_DR_ENH_PULSE_OFFSET_L    0x43
 302#define CX0342_DR_ENH_PULSE_OFFSET_H    0x44
 303#define CX0342_DR_ENH_PULSE_POS_L       0x45
 304#define CX0342_DR_ENH_PULSE_POS_H       0x46
 305#define CX0342_DR_ENH_PULSE_WIDTH       0x47
 306#define CX0342_AS_CURRENT_CNT_L         0x48
 307#define CX0342_AS_CURRENT_CNT_H         0x49
 308#define CX0342_AS_PREVIOUS_CNT_L        0x4a
 309#define CX0342_AS_PREVIOUS_CNT_H        0x4b
 310#define CX0342_SPV_VALUE_L              0x4c
 311#define CX0342_SPV_VALUE_H              0x4d
 312#define CX0342_GPXLTHD_L                0x50
 313#define CX0342_GPXLTHD_H                0x51
 314#define CX0342_RBPXLTHD_L               0x52
 315#define CX0342_RBPXLTHD_H               0x53
 316#define CX0342_PLANETHD_L               0x54
 317#define CX0342_PLANETHD_H               0x55
 318#define CX0342_ROWDARK_TH               0x56
 319#define CX0342_ROWDARK_TOL              0x57
 320#define CX0342_RB_GAP_L                 0x58
 321#define CX0342_RB_GAP_H                 0x59
 322#define CX0342_G_GAP_L                  0x5a
 323#define CX0342_G_GAP_H                  0x5b
 324#define CX0342_AUTO_ROW_DARK            0x60
 325#define CX0342_MANUAL_DARK_VALUE        0x61
 326#define CX0342_GB_DARK_OFFSET           0x62
 327#define CX0342_GR_DARK_OFFSET           0x63
 328#define CX0342_RED_DARK_OFFSET          0x64
 329#define CX0342_BLUE_DARK_OFFSET         0x65
 330#define CX0342_DATA_SCALING_MULTI       0x66
 331#define CX0342_AUTOD_Q_FRAME            0x67
 332#define CX0342_AUTOD_ALLOW_VARI         0x68
 333#define CX0342_AUTO_DARK_VALUE_L        0x69
 334#define CX0342_AUTO_DARK_VALUE_H        0x6a
 335#define CX0342_IO_CTRL_0                0x70
 336#define CX0342_IO_CTRL_1                0x71
 337#define CX0342_IO_CTRL_2                0x72
 338#define CX0342_IDLE_CTRL                0x73
 339#define CX0342_TEST_MODE                0x74
 340#define CX0342_FRAME_FIX_DATA_TEST      0x75
 341#define CX0342_FRAME_CNT_TEST           0x76
 342#define CX0342_RST_OVERFLOW_L           0x80
 343#define CX0342_RST_OVERFLOW_H           0x81
 344#define CX0342_RST_UNDERFLOW_L          0x82
 345#define CX0342_RST_UNDERFLOW_H          0x83
 346#define CX0342_DATA_OVERFLOW_L          0x84
 347#define CX0342_DATA_OVERFLOW_H          0x85
 348#define CX0342_DATA_UNDERFLOW_L         0x86
 349#define CX0342_DATA_UNDERFLOW_H         0x87
 350#define CX0342_CHANNEL_0_0_L_irst       0x90
 351#define CX0342_CHANNEL_0_0_H_irst       0x91
 352#define CX0342_CHANNEL_0_1_L_irst       0x92
 353#define CX0342_CHANNEL_0_1_H_irst       0x93
 354#define CX0342_CHANNEL_0_2_L_irst       0x94
 355#define CX0342_CHANNEL_0_2_H_irst       0x95
 356#define CX0342_CHANNEL_0_3_L_irst       0x96
 357#define CX0342_CHANNEL_0_3_H_irst       0x97
 358#define CX0342_CHANNEL_0_4_L_irst       0x98
 359#define CX0342_CHANNEL_0_4_H_irst       0x99
 360#define CX0342_CHANNEL_0_5_L_irst       0x9a
 361#define CX0342_CHANNEL_0_5_H_irst       0x9b
 362#define CX0342_CHANNEL_0_6_L_irst       0x9c
 363#define CX0342_CHANNEL_0_6_H_irst       0x9d
 364#define CX0342_CHANNEL_0_7_L_irst       0x9e
 365#define CX0342_CHANNEL_0_7_H_irst       0x9f
 366#define CX0342_CHANNEL_1_0_L_itx        0xa0
 367#define CX0342_CHANNEL_1_0_H_itx        0xa1
 368#define CX0342_CHANNEL_1_1_L_itx        0xa2
 369#define CX0342_CHANNEL_1_1_H_itx        0xa3
 370#define CX0342_CHANNEL_1_2_L_itx        0xa4
 371#define CX0342_CHANNEL_1_2_H_itx        0xa5
 372#define CX0342_CHANNEL_1_3_L_itx        0xa6
 373#define CX0342_CHANNEL_1_3_H_itx        0xa7
 374#define CX0342_CHANNEL_1_4_L_itx        0xa8
 375#define CX0342_CHANNEL_1_4_H_itx        0xa9
 376#define CX0342_CHANNEL_1_5_L_itx        0xaa
 377#define CX0342_CHANNEL_1_5_H_itx        0xab
 378#define CX0342_CHANNEL_1_6_L_itx        0xac
 379#define CX0342_CHANNEL_1_6_H_itx        0xad
 380#define CX0342_CHANNEL_1_7_L_itx        0xae
 381#define CX0342_CHANNEL_1_7_H_itx        0xaf
 382#define CX0342_CHANNEL_2_0_L_iwl        0xb0
 383#define CX0342_CHANNEL_2_0_H_iwl        0xb1
 384#define CX0342_CHANNEL_2_1_L_iwl        0xb2
 385#define CX0342_CHANNEL_2_1_H_iwl        0xb3
 386#define CX0342_CHANNEL_2_2_L_iwl        0xb4
 387#define CX0342_CHANNEL_2_2_H_iwl        0xb5
 388#define CX0342_CHANNEL_2_3_L_iwl        0xb6
 389#define CX0342_CHANNEL_2_3_H_iwl        0xb7
 390#define CX0342_CHANNEL_2_4_L_iwl        0xb8
 391#define CX0342_CHANNEL_2_4_H_iwl        0xb9
 392#define CX0342_CHANNEL_2_5_L_iwl        0xba
 393#define CX0342_CHANNEL_2_5_H_iwl        0xbb
 394#define CX0342_CHANNEL_2_6_L_iwl        0xbc
 395#define CX0342_CHANNEL_2_6_H_iwl        0xbd
 396#define CX0342_CHANNEL_2_7_L_iwl        0xbe
 397#define CX0342_CHANNEL_2_7_H_iwl        0xbf
 398#define CX0342_CHANNEL_3_0_L_ensp       0xc0
 399#define CX0342_CHANNEL_3_0_H_ensp       0xc1
 400#define CX0342_CHANNEL_3_1_L_ensp       0xc2
 401#define CX0342_CHANNEL_3_1_H_ensp       0xc3
 402#define CX0342_CHANNEL_3_2_L_ensp       0xc4
 403#define CX0342_CHANNEL_3_2_H_ensp       0xc5
 404#define CX0342_CHANNEL_3_3_L_ensp       0xc6
 405#define CX0342_CHANNEL_3_3_H_ensp       0xc7
 406#define CX0342_CHANNEL_3_4_L_ensp       0xc8
 407#define CX0342_CHANNEL_3_4_H_ensp       0xc9
 408#define CX0342_CHANNEL_3_5_L_ensp       0xca
 409#define CX0342_CHANNEL_3_5_H_ensp       0xcb
 410#define CX0342_CHANNEL_3_6_L_ensp       0xcc
 411#define CX0342_CHANNEL_3_6_H_ensp       0xcd
 412#define CX0342_CHANNEL_3_7_L_ensp       0xce
 413#define CX0342_CHANNEL_3_7_H_ensp       0xcf
 414#define CX0342_CHANNEL_4_0_L_sela       0xd0
 415#define CX0342_CHANNEL_4_0_H_sela       0xd1
 416#define CX0342_CHANNEL_4_1_L_sela       0xd2
 417#define CX0342_CHANNEL_4_1_H_sela       0xd3
 418#define CX0342_CHANNEL_5_0_L_intla      0xe0
 419#define CX0342_CHANNEL_5_0_H_intla      0xe1
 420#define CX0342_CHANNEL_5_1_L_intla      0xe2
 421#define CX0342_CHANNEL_5_1_H_intla      0xe3
 422#define CX0342_CHANNEL_5_2_L_intla      0xe4
 423#define CX0342_CHANNEL_5_2_H_intla      0xe5
 424#define CX0342_CHANNEL_5_3_L_intla      0xe6
 425#define CX0342_CHANNEL_5_3_H_intla      0xe7
 426#define CX0342_CHANNEL_6_0_L_xa_sel_pos 0xf0
 427#define CX0342_CHANNEL_6_0_H_xa_sel_pos 0xf1
 428#define CX0342_CHANNEL_7_1_L_cds_pos    0xf2
 429#define CX0342_CHANNEL_7_1_H_cds_pos    0xf3
 430#define CX0342_SENSOR_HEIGHT_L          0xfb
 431#define CX0342_SENSOR_HEIGHT_H          0xfc
 432#define CX0342_SENSOR_WIDTH_L           0xfd
 433#define CX0342_SENSOR_WIDTH_H           0xfe
 434#define CX0342_VSYNC_HSYNC_READ         0xff
 435
 436struct cmd {
 437        u8 reg;
 438        u8 val;
 439};
 440
 441static const u8 DQT[17][130] = {
 442        /* Define quantization table (thanks to Thomas Kaiser) */
 443        {                       /* Quality 0 */
 444         0x00,
 445         0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 446         0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 447         0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 448         0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 449         0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 450         0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 451         0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 452         0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 453         0x01,
 454         0x04, 0x04, 0x04, 0x06, 0x05, 0x06, 0x0b, 0x06,
 455         0x06, 0x0b, 0x18, 0x10, 0x0e, 0x10, 0x18, 0x18,
 456         0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
 457         0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
 458         0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
 459         0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
 460         0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
 461         0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
 462         },
 463        {                       /* Quality 1 */
 464         0x00,
 465         0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 466         0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 467         0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 468         0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 469         0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 470         0x04, 0x04, 0x04, 0x09, 0x09, 0x09, 0x09, 0x09,
 471         0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
 472         0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
 473         0x01,
 474         0x08, 0x09, 0x09, 0x0c, 0x0a, 0x0c, 0x17, 0x0d,
 475         0x0d, 0x17, 0x31, 0x21, 0x1c, 0x21, 0x31, 0x31,
 476         0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31,
 477         0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31,
 478         0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31,
 479         0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31,
 480         0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31,
 481         0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31,
 482         },
 483        {                       /* Quality 2 */
 484         0x00,
 485         0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 486         0x04, 0x04, 0x06, 0x06, 0x06, 0x04, 0x04, 0x04,
 487         0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
 488         0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
 489         0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
 490         0x06, 0x06, 0x06, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
 491         0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
 492         0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
 493         0x01,
 494         0x0c, 0x0d, 0x0d, 0x12, 0x0f, 0x12, 0x23, 0x13,
 495         0x13, 0x23, 0x4a, 0x31, 0x2a, 0x31, 0x4a, 0x4a,
 496         0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
 497         0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
 498         0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
 499         0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
 500         0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
 501         0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
 502         },
 503        {                       /* Quality 3 */
 504         0x00,
 505         0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 506         0x04, 0x04, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04,
 507         0x04, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
 508         0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
 509         0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
 510         0x08, 0x08, 0x08, 0x13, 0x13, 0x13, 0x13, 0x13,
 511         0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
 512         0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
 513         0x01,
 514         0x11, 0x12, 0x12, 0x18, 0x15, 0x18, 0x2f, 0x1a,
 515         0x1a, 0x2f, 0x63, 0x42, 0x38, 0x42, 0x63, 0x63,
 516         0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
 517         0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
 518         0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
 519         0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
 520         0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
 521         0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
 522         },
 523        {                       /* Quality 4 */
 524         0x00,
 525         0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
 526         0x05, 0x05, 0x0a, 0x0a, 0x0a, 0x05, 0x05, 0x05,
 527         0x05, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
 528         0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
 529         0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
 530         0x0a, 0x0a, 0x0a, 0x17, 0x17, 0x17, 0x17, 0x17,
 531         0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
 532         0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
 533         0x01,
 534         0x11, 0x16, 0x16, 0x1e, 0x1a, 0x1e, 0x3a, 0x20,
 535         0x20, 0x3a, 0x7b, 0x52, 0x46, 0x52, 0x7b, 0x7b,
 536         0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
 537         0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
 538         0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
 539         0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
 540         0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
 541         0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
 542         },
 543        {                       /* Quality 5 */
 544         0x00,
 545         0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
 546         0x06, 0x06, 0x0c, 0x0c, 0x0c, 0x06, 0x06, 0x06,
 547         0x06, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
 548         0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
 549         0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
 550         0x0c, 0x0c, 0x0c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
 551         0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
 552         0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
 553         0x01,
 554         0x11, 0x1b, 0x1b, 0x24, 0x1f, 0x24, 0x46, 0x27,
 555         0x27, 0x46, 0x94, 0x63, 0x54, 0x63, 0x94, 0x94,
 556         0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
 557         0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
 558         0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
 559         0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
 560         0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
 561         0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
 562         },
 563        {                       /* Quality 6 */
 564         0x00,
 565         0x05, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
 566         0x07, 0x07, 0x0e, 0x0e, 0x0e, 0x07, 0x07, 0x07,
 567         0x07, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
 568         0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
 569         0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
 570         0x0e, 0x0e, 0x0e, 0x21, 0x21, 0x21, 0x21, 0x21,
 571         0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
 572         0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
 573         0x01,
 574         0x15, 0x1f, 0x1f, 0x2a, 0x24, 0x2a, 0x52, 0x2d,
 575         0x2d, 0x52, 0xad, 0x73, 0x62, 0x73, 0xad, 0xad,
 576         0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
 577         0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
 578         0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
 579         0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
 580         0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
 581         0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
 582         },
 583        {                       /* Quality 7 */
 584         0x00,
 585         0x05, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
 586         0x08, 0x08, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08,
 587         0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
 588         0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
 589         0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
 590         0x10, 0x10, 0x10, 0x26, 0x26, 0x26, 0x26, 0x26,
 591         0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26,
 592         0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26,
 593         0x01,
 594         0x15, 0x24, 0x24, 0x30, 0x2a, 0x30, 0x5e, 0x34,
 595         0x34, 0x5e, 0xc6, 0x84, 0x70, 0x84, 0xc6, 0xc6,
 596         0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
 597         0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
 598         0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
 599         0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
 600         0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
 601         0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
 602         },
 603        {                       /* Quality 8 */
 604         0x00,
 605         0x06, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
 606         0x0a, 0x0a, 0x14, 0x14, 0x14, 0x0a, 0x0a, 0x0a,
 607         0x0a, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
 608         0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
 609         0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
 610         0x14, 0x14, 0x14, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f,
 611         0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f,
 612         0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f,
 613         0x01,
 614         0x19, 0x2d, 0x2d, 0x3c, 0x34, 0x3c, 0x75, 0x41,
 615         0x41, 0x75, 0xf7, 0xa5, 0x8c, 0xa5, 0xf7, 0xf7,
 616         0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
 617         0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
 618         0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
 619         0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
 620         0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
 621         0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
 622         },
 623        {                       /* Quality 9 */
 624         0x00,
 625         0x06, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
 626         0x0c, 0x0c, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x0c,
 627         0x0c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
 628         0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
 629         0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
 630         0x18, 0x18, 0x18, 0x39, 0x39, 0x39, 0x39, 0x39,
 631         0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39,
 632         0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39,
 633         0x01,
 634         0x19, 0x36, 0x36, 0x48, 0x3f, 0x48, 0x8d, 0x4e,
 635         0x4e, 0x8d, 0xff, 0xc6, 0xa8, 0xc6, 0xff, 0xff,
 636         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 637         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 638         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 639         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 640         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 641         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 642         },
 643        {                       /* Quality 10 */
 644         0x00,
 645         0x07, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
 646         0x0e, 0x0e, 0x1c, 0x1c, 0x1c, 0x0e, 0x0e, 0x0e,
 647         0x0e, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
 648         0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
 649         0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
 650         0x1c, 0x1c, 0x1c, 0x42, 0x42, 0x42, 0x42, 0x42,
 651         0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42,
 652         0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42,
 653         0x01,
 654         0x1d, 0x3f, 0x3f, 0x54, 0x49, 0x54, 0xa4, 0x5b,
 655         0x5b, 0xa4, 0xff, 0xe7, 0xc4, 0xe7, 0xff, 0xff,
 656         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 657         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 658         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 659         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 660         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 661         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 662         },
 663        {                       /* Quality 11 */
 664         0x00,
 665         0x07, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
 666         0x10, 0x10, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10,
 667         0x10, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
 668         0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
 669         0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
 670         0x20, 0x20, 0x20, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,
 671         0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,
 672         0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,
 673         0x01,
 674         0x1d, 0x48, 0x48, 0x60, 0x54, 0x60, 0xbc, 0x68,
 675         0x68, 0xbc, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff,
 676         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 677         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 678         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 679         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 680         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 681         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 682         },
 683        {                       /* Quality 12 */
 684         0x00,
 685         0x08, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
 686         0x14, 0x14, 0x28, 0x28, 0x28, 0x14, 0x14, 0x14,
 687         0x14, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
 688         0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
 689         0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
 690         0x28, 0x28, 0x28, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
 691         0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
 692         0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
 693         0x01,
 694         0x22, 0x5a, 0x5a, 0x78, 0x69, 0x78, 0xeb, 0x82,
 695         0x82, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 696         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 697         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 698         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 699         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 700         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 701         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 702         },
 703        {                       /* Quality 13 */
 704         0x00,
 705         0x08, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
 706         0x18, 0x18, 0x30, 0x30, 0x30, 0x18, 0x18, 0x18,
 707         0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
 708         0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
 709         0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
 710         0x30, 0x30, 0x30, 0x72, 0x72, 0x72, 0x72, 0x72,
 711         0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72,
 712         0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72,
 713         0x01,
 714         0x22, 0x6c, 0x6c, 0x90, 0x7e, 0x90, 0xff, 0x9c,
 715         0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 716         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 717         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 718         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 719         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 720         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 721         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 722         },
 723        {                       /* Quality 14 */
 724         0x00,
 725         0x0a, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
 726         0x1c, 0x1c, 0x38, 0x38, 0x38, 0x1c, 0x1c, 0x1c,
 727         0x1c, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
 728         0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
 729         0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
 730         0x38, 0x38, 0x38, 0x85, 0x85, 0x85, 0x85, 0x85,
 731         0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
 732         0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
 733         0x01,
 734         0x2a, 0x7e, 0x7e, 0xa8, 0x93, 0xa8, 0xff, 0xb6,
 735         0xb6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 736         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 737         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 738         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 739         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 740         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 741         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 742         },
 743        {                       /* Quality 15 */
 744         0x00,
 745         0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
 746         0x20, 0x20, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20,
 747         0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
 748         0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
 749         0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
 750         0x40, 0x40, 0x40, 0x98, 0x98, 0x98, 0x98, 0x98,
 751         0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
 752         0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
 753         0x01,
 754         0x2a, 0x90, 0x90, 0xc0, 0xa8, 0xc0, 0xff, 0xd0,
 755         0xd0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 756         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 757         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 758         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 759         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 760         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 761         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 762         },
 763        {                       /* Quality 16-31 */
 764         0x00,
 765         0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 766         0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 767         0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 768         0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 769         0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 770         0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 771         0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 772         0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 773         0x01,
 774         0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 775         0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 776         0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 777         0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 778         0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 779         0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 780         0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 781         0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 782         }
 783};
 784
 785static const struct cmd tp6810_cx_init_common[] = {
 786        {0x1c, 0x00},
 787        {TP6800_R10_SIF_TYPE, 0x00},
 788        {0x4e, 0x00},
 789        {0x4f, 0x00},
 790        {TP6800_R50, 0xff},
 791        {TP6800_R51, 0x03},
 792        {0x00, 0x07},
 793        {TP6800_R79_QUALITY, 0x03},
 794        {TP6800_R2F_TIMING_CFG, 0x37},
 795        {TP6800_R30_SENSOR_CFG, 0x10},
 796        {TP6800_R21_ENDP_1_CTL, 0x00},
 797        {TP6800_R52, 0x40},
 798        {TP6800_R53, 0x40},
 799        {TP6800_R54_DARK_CFG, 0x40},
 800        {TP6800_R30_SENSOR_CFG, 0x18},
 801        {0x4b, 0x00},
 802        {TP6800_R3F_FRAME_RATE, 0x83},
 803        {TP6800_R79_QUALITY, 0x05},
 804        {TP6800_R21_ENDP_1_CTL, 0x00},
 805        {0x7c, 0x04},
 806        {0x25, 0x14},
 807        {0x26, 0x0f},
 808        {0x7b, 0x10},
 809};
 810
 811static const struct cmd tp6810_ov_init_common[] = {
 812        {0x1c, 0x00},
 813        {TP6800_R10_SIF_TYPE, 0x00},
 814        {0x4e, 0x00},
 815        {0x4f, 0x00},
 816        {TP6800_R50, 0xff},
 817        {TP6800_R51, 0x03},
 818        {0x00, 0x07},
 819        {TP6800_R52, 0x40},
 820        {TP6800_R53, 0x40},
 821        {TP6800_R54_DARK_CFG, 0x40},
 822        {TP6800_R79_QUALITY, 0x03},
 823        {TP6800_R2F_TIMING_CFG, 0x17},
 824        {TP6800_R30_SENSOR_CFG, 0x18},
 825        {TP6800_R21_ENDP_1_CTL, 0x00},
 826        {TP6800_R3F_FRAME_RATE, 0x86},
 827        {0x25, 0x18},
 828        {0x26, 0x0f},
 829        {0x7b, 0x90},
 830};
 831
 832static const struct cmd tp6810_bridge_start[] = {
 833        {0x59, 0x88},
 834        {0x5a, 0x0f},
 835        {0x5b, 0x4e},
 836        {TP6800_R5C_EDGE_THRLD, 0x63},
 837        {TP6800_R5D_DEMOSAIC_CFG, 0x00},
 838        {0x03, 0x7f},
 839        {0x04, 0x80},
 840        {0x06, 0x00},
 841        {0x00, 0x00},
 842};
 843
 844static const struct cmd tp6810_late_start[] = {
 845        {0x7d, 0x01},
 846        {0xb0, 0x04},
 847        {0xb1, 0x04},
 848        {0xb2, 0x04},
 849        {0xb3, 0x04},
 850        {0xb4, 0x04},
 851        {0xb5, 0x04},
 852        {0xb6, 0x08},
 853        {0xb7, 0x08},
 854        {0xb8, 0x04},
 855        {0xb9, 0x04},
 856        {0xba, 0x04},
 857        {0xbb, 0x04},
 858        {0xbc, 0x04},
 859        {0xbd, 0x08},
 860        {0xbe, 0x08},
 861        {0xbf, 0x08},
 862        {0xc0, 0x04},
 863        {0xc1, 0x04},
 864        {0xc2, 0x08},
 865        {0xc3, 0x08},
 866        {0xc4, 0x08},
 867        {0xc5, 0x08},
 868        {0xc6, 0x08},
 869        {0xc7, 0x13},
 870        {0xc8, 0x04},
 871        {0xc9, 0x08},
 872        {0xca, 0x08},
 873        {0xcb, 0x08},
 874        {0xcc, 0x08},
 875        {0xcd, 0x08},
 876        {0xce, 0x13},
 877        {0xcf, 0x13},
 878        {0xd0, 0x08},
 879        {0xd1, 0x08},
 880        {0xd2, 0x08},
 881        {0xd3, 0x08},
 882        {0xd4, 0x08},
 883        {0xd5, 0x13},
 884        {0xd6, 0x13},
 885        {0xd7, 0x13},
 886        {0xd8, 0x08},
 887        {0xd9, 0x08},
 888        {0xda, 0x08},
 889        {0xdb, 0x08},
 890        {0xdc, 0x13},
 891        {0xdd, 0x13},
 892        {0xde, 0x13},
 893        {0xdf, 0x13},
 894        {0xe0, 0x08},
 895        {0xe1, 0x08},
 896        {0xe2, 0x08},
 897        {0xe3, 0x13},
 898        {0xe4, 0x13},
 899        {0xe5, 0x13},
 900        {0xe6, 0x13},
 901        {0xe7, 0x13},
 902        {0xe8, 0x08},
 903        {0xe9, 0x08},
 904        {0xea, 0x13},
 905        {0xeb, 0x13},
 906        {0xec, 0x13},
 907        {0xed, 0x13},
 908        {0xee, 0x13},
 909        {0xef, 0x13},
 910        {0x7d, 0x02},
 911
 912        /* later after isoc start */
 913        {0x7d, 0x08},
 914        {0x7d, 0x00},
 915};
 916
 917static const struct cmd cx0342_timing_seq[] = {
 918        {CX0342_CHANNEL_0_1_L_irst, 0x20},
 919        {CX0342_CHANNEL_0_2_L_irst, 0x24},
 920        {CX0342_CHANNEL_0_2_H_irst, 0x00},
 921        {CX0342_CHANNEL_0_3_L_irst, 0x2f},
 922        {CX0342_CHANNEL_0_3_H_irst, 0x00},
 923        {CX0342_CHANNEL_1_0_L_itx, 0x02},
 924        {CX0342_CHANNEL_1_0_H_itx, 0x00},
 925        {CX0342_CHANNEL_1_1_L_itx, 0x20},
 926        {CX0342_CHANNEL_1_1_H_itx, 0x00},
 927        {CX0342_CHANNEL_1_2_L_itx, 0xe4},
 928        {CX0342_CHANNEL_1_2_H_itx, 0x00},
 929        {CX0342_CHANNEL_1_3_L_itx, 0xee},
 930        {CX0342_CHANNEL_1_3_H_itx, 0x00},
 931        {CX0342_CHANNEL_2_0_L_iwl, 0x30},
 932        {CX0342_CHANNEL_2_0_H_iwl, 0x00},
 933        {CX0342_CHANNEL_3_0_L_ensp, 0x34},
 934        {CX0342_CHANNEL_3_1_L_ensp, 0xe2},
 935        {CX0342_CHANNEL_3_1_H_ensp, 0x00},
 936        {CX0342_CHANNEL_3_2_L_ensp, 0xf6},
 937        {CX0342_CHANNEL_3_2_H_ensp, 0x00},
 938        {CX0342_CHANNEL_3_3_L_ensp, 0xf4},
 939        {CX0342_CHANNEL_3_3_H_ensp, 0x02},
 940        {CX0342_CHANNEL_4_0_L_sela, 0x26},
 941        {CX0342_CHANNEL_4_0_H_sela, 0x00},
 942        {CX0342_CHANNEL_4_1_L_sela, 0xe2},
 943        {CX0342_CHANNEL_4_1_H_sela, 0x00},
 944        {CX0342_CHANNEL_5_0_L_intla, 0x26},
 945        {CX0342_CHANNEL_5_1_L_intla, 0x29},
 946        {CX0342_CHANNEL_5_2_L_intla, 0xf0},
 947        {CX0342_CHANNEL_5_2_H_intla, 0x00},
 948        {CX0342_CHANNEL_5_3_L_intla, 0xf3},
 949        {CX0342_CHANNEL_5_3_H_intla, 0x00},
 950        {CX0342_CHANNEL_6_0_L_xa_sel_pos, 0x24},
 951        {CX0342_CHANNEL_7_1_L_cds_pos, 0x02},
 952        {CX0342_TIMING_EN, 0x01},
 953};
 954
 955/* define the JPEG header */
 956static void jpeg_define(u8 *jpeg_hdr,
 957                        int height,
 958                        int width)
 959{
 960        memcpy(jpeg_hdr, jpeg_head, sizeof jpeg_head);
 961        jpeg_hdr[JPEG_HEIGHT_OFFSET + 0] = height >> 8;
 962        jpeg_hdr[JPEG_HEIGHT_OFFSET + 1] = height;
 963        jpeg_hdr[JPEG_HEIGHT_OFFSET + 2] = width >> 8;
 964        jpeg_hdr[JPEG_HEIGHT_OFFSET + 3] = width;
 965}
 966
 967/* set the JPEG quality for sensor soi763a */
 968static void jpeg_set_qual(u8 *jpeg_hdr,
 969                          int quality)
 970{
 971        int i, sc;
 972
 973        if (quality <= 0)
 974                sc = 5000;
 975        else if (quality < 50)
 976                sc = 5000 / quality;
 977        else
 978                sc = 200 - quality * 2;
 979        for (i = 0; i < 64; i++) {
 980                jpeg_hdr[JPEG_QT0_OFFSET + i] =
 981                        (jpeg_head[JPEG_QT0_OFFSET + i] * sc + 50) / 100;
 982                jpeg_hdr[JPEG_QT1_OFFSET + i] =
 983                        (jpeg_head[JPEG_QT1_OFFSET + i] * sc + 50) / 100;
 984        }
 985}
 986
 987static void reg_w(struct gspca_dev *gspca_dev, u8 index, u8 value)
 988{
 989        struct usb_device *dev = gspca_dev->dev;
 990        int ret;
 991
 992        if (gspca_dev->usb_err < 0)
 993                return;
 994        ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
 995                        0x0e,
 996                        USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
 997                        value, index, NULL, 0, 500);
 998        if (ret < 0) {
 999                pr_err("reg_w err %d\n", ret);
1000                gspca_dev->usb_err = ret;
1001        }
1002}
1003
1004/* the returned value is in gspca_dev->usb_buf */
1005static void reg_r(struct gspca_dev *gspca_dev, u8 index)
1006{
1007        struct usb_device *dev = gspca_dev->dev;
1008        int ret;
1009
1010        if (gspca_dev->usb_err < 0)
1011                return;
1012        ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
1013                        0x0d,
1014                        USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
1015                        0, index, gspca_dev->usb_buf, 1, 500);
1016        if (ret < 0) {
1017                pr_err("reg_r err %d\n", ret);
1018                gspca_dev->usb_err = ret;
1019        }
1020}
1021
1022static void reg_w_buf(struct gspca_dev *gspca_dev,
1023                        const struct cmd *p, int l)
1024{
1025        do {
1026                reg_w(gspca_dev, p->reg, p->val);
1027                p++;
1028        } while (--l > 0);
1029}
1030
1031static int i2c_w(struct gspca_dev *gspca_dev, u8 index, u8 value)
1032{
1033        struct sd *sd = (struct sd *) gspca_dev;
1034
1035        reg_w(gspca_dev, TP6800_R11_SIF_CONTROL, 0x00);
1036        reg_w(gspca_dev, TP6800_R19_SIF_ADDR_S2, index);
1037        reg_w(gspca_dev, TP6800_R13_SIF_TX_DATA, value);
1038        reg_w(gspca_dev, TP6800_R11_SIF_CONTROL, 0x01);
1039        if (sd->bridge == BRIDGE_TP6800)
1040                return 0;
1041        msleep(5);
1042        reg_r(gspca_dev, TP6800_R11_SIF_CONTROL);
1043        if (gspca_dev->usb_buf[0] == 0)
1044                return 0;
1045        reg_w(gspca_dev, TP6800_R11_SIF_CONTROL, 0x00);
1046        return -1;                              /* error */
1047}
1048
1049static void i2c_w_buf(struct gspca_dev *gspca_dev,
1050                        const struct cmd *p, int l)
1051{
1052        do {
1053                i2c_w(gspca_dev, p->reg, p->val);
1054                p++;
1055        } while (--l > 0);
1056}
1057
1058static int i2c_r(struct gspca_dev *gspca_dev, u8 index, int len)
1059{
1060        struct sd *sd = (struct sd *) gspca_dev;
1061        int v;
1062
1063        reg_w(gspca_dev, TP6800_R19_SIF_ADDR_S2, index);
1064        reg_w(gspca_dev, TP6800_R11_SIF_CONTROL, 0x02);
1065        msleep(5);
1066        reg_r(gspca_dev, TP6800_R14_SIF_RX_DATA);
1067        v = gspca_dev->usb_buf[0];
1068        if (sd->bridge == BRIDGE_TP6800)
1069                return v;
1070        if (len > 1) {
1071                reg_r(gspca_dev, TP6800_R1B_SIF_RX_DATA2);
1072                v |= (gspca_dev->usb_buf[0] << 8);
1073        }
1074        reg_r(gspca_dev, TP6800_R11_SIF_CONTROL);
1075        if (gspca_dev->usb_buf[0] == 0)
1076                return v;
1077        reg_w(gspca_dev, TP6800_R11_SIF_CONTROL, 0x00);
1078        return -1;
1079}
1080
1081static void bulk_w(struct gspca_dev *gspca_dev,
1082                  u8 tag,
1083                  const u8 *data,
1084                  int length)
1085{
1086        struct usb_device *dev = gspca_dev->dev;
1087        int count, actual_count, ret;
1088
1089        if (gspca_dev->usb_err < 0)
1090                return;
1091        for (;;) {
1092                count = length > BULK_OUT_SIZE - 1
1093                                ? BULK_OUT_SIZE - 1 : length;
1094                gspca_dev->usb_buf[0] = tag;
1095                memcpy(&gspca_dev->usb_buf[1], data, count);
1096                ret = usb_bulk_msg(dev,
1097                                   usb_sndbulkpipe(dev, 3),
1098                                   gspca_dev->usb_buf, count + 1,
1099                                   &actual_count, 500);
1100                if (ret < 0) {
1101                        pr_err("bulk write error %d tag=%02x\n",
1102                                ret, tag);
1103                        gspca_dev->usb_err = ret;
1104                        return;
1105                }
1106                length -= count;
1107                if (length <= 0)
1108                        break;
1109                data += count;
1110        }
1111}
1112
1113static int probe_6810(struct gspca_dev *gspca_dev)
1114{
1115        u8 gpio;
1116        int ret;
1117
1118        reg_r(gspca_dev, TP6800_R18_GPIO_DATA);
1119        gpio = gspca_dev->usb_buf[0];
1120        reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1121        reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1122        reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1123        reg_w(gspca_dev, TP6800_R10_SIF_TYPE, 0x04);    /* i2c 16 bits */
1124        reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x21);  /* ov??? */
1125        reg_w(gspca_dev, TP6800_R1A_SIF_TX_DATA2, 0x00);
1126        if (i2c_w(gspca_dev, 0x00, 0x00) >= 0)
1127                return SENSOR_SOI763A;
1128
1129        reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1130        reg_w(gspca_dev, TP6800_R10_SIF_TYPE, 0x00);    /* i2c 8 bits */
1131        reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x7f);  /* (unknown i2c) */
1132        if (i2c_w(gspca_dev, 0x00, 0x00) >= 0)
1133                return -2;
1134
1135        reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1136        reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1137        reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1138        reg_w(gspca_dev, TP6800_R10_SIF_TYPE, 0x00);    /* i2c 8 bits */
1139        reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x11);  /* tas??? / hv??? */
1140        ret = i2c_r(gspca_dev, 0x00, 1);
1141        if (ret > 0)
1142                return -3;
1143
1144        reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1145        reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1146        reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1147        reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x6e);  /* po??? */
1148        ret = i2c_r(gspca_dev, 0x00, 1);
1149        if (ret > 0)
1150                return -4;
1151
1152        ret = i2c_r(gspca_dev, 0x01, 1);
1153        if (ret > 0)
1154                return -5;
1155
1156        reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1157        reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1158        reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1159        reg_w(gspca_dev, TP6800_R10_SIF_TYPE, 0x04);    /* i2c 16 bits */
1160        reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x5d);  /* mi/mt??? */
1161        ret = i2c_r(gspca_dev, 0x00, 2);
1162        if (ret > 0)
1163                return -6;
1164
1165        reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1166        reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1167        reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1168        reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x5c);  /* mi/mt??? */
1169        ret = i2c_r(gspca_dev, 0x36, 2);
1170        if (ret > 0)
1171                return -7;
1172
1173        reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1174        reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1175        reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1176        reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x61);  /* (unknown i2c) */
1177        reg_w(gspca_dev, TP6800_R1A_SIF_TX_DATA2, 0x10);
1178        if (i2c_w(gspca_dev, 0xff, 0x00) >= 0)
1179                return -8;
1180
1181        reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1182        reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1183        reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1184        reg_w(gspca_dev, TP6800_R10_SIF_TYPE, 0x00);    /* i2c 8 bits */
1185        reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x20);  /* cx0342 */
1186        ret = i2c_r(gspca_dev, 0x00, 1);
1187        if (ret > 0)
1188                return SENSOR_CX0342;
1189        return -9;
1190}
1191
1192static void cx0342_6810_init(struct gspca_dev *gspca_dev)
1193{
1194        static const struct cmd reg_init_1[] = {
1195                {TP6800_R2F_TIMING_CFG, 0x2f},
1196                {0x25, 0x02},
1197                {TP6800_R21_ENDP_1_CTL, 0x00},
1198                {TP6800_R3F_FRAME_RATE, 0x80},
1199                {TP6800_R2F_TIMING_CFG, 0x2f},
1200                {TP6800_R18_GPIO_DATA, 0xe1},
1201                {TP6800_R18_GPIO_DATA, 0xc1},
1202                {TP6800_R18_GPIO_DATA, 0xe1},
1203                {TP6800_R11_SIF_CONTROL, 0x00},
1204        };
1205        static const struct cmd reg_init_2[] = {
1206                {TP6800_R78_FORMAT, 0x48},
1207                {TP6800_R11_SIF_CONTROL, 0x00},
1208        };
1209        static const struct cmd sensor_init[] = {
1210                {CX0342_OUTPUT_CTRL, 0x07},
1211                {CX0342_BYPASS_MODE, 0x58},
1212                {CX0342_GPXLTHD_L, 0x28},
1213                {CX0342_RBPXLTHD_L, 0x28},
1214                {CX0342_PLANETHD_L, 0x50},
1215                {CX0342_PLANETHD_H, 0x03},
1216                {CX0342_RB_GAP_L, 0xff},
1217                {CX0342_RB_GAP_H, 0x07},
1218                {CX0342_G_GAP_L, 0xff},
1219                {CX0342_G_GAP_H, 0x07},
1220                {CX0342_RST_OVERFLOW_L, 0x5c},
1221                {CX0342_RST_OVERFLOW_H, 0x01},
1222                {CX0342_DATA_OVERFLOW_L, 0xfc},
1223                {CX0342_DATA_OVERFLOW_H, 0x03},
1224                {CX0342_DATA_UNDERFLOW_L, 0x00},
1225                {CX0342_DATA_UNDERFLOW_H, 0x00},
1226                {CX0342_SYS_CTRL_0, 0x40},
1227                {CX0342_GLOBAL_GAIN, 0x01},
1228                {CX0342_CLOCK_GEN, 0x00},
1229                {CX0342_SYS_CTRL_0, 0x02},
1230                {CX0342_IDLE_CTRL, 0x05},
1231                {CX0342_ADCGN, 0x00},
1232                {CX0342_ADC_CTL, 0x00},
1233                {CX0342_LVRST_BLBIAS, 0x01},
1234                {CX0342_VTHSEL, 0x0b},
1235                {CX0342_RAMP_RIV, 0x0b},
1236                {CX0342_LDOSEL, 0x07},
1237                {CX0342_SPV_VALUE_L, 0x40},
1238                {CX0342_SPV_VALUE_H, 0x02},
1239
1240                {CX0342_AUTO_ADC_CALIB, 0x81},
1241                {CX0342_TIMING_EN, 0x01},
1242        };
1243
1244        reg_w_buf(gspca_dev, reg_init_1, ARRAY_SIZE(reg_init_1));
1245        reg_w_buf(gspca_dev, tp6810_cx_init_common,
1246                        ARRAY_SIZE(tp6810_cx_init_common));
1247        reg_w_buf(gspca_dev, reg_init_2, ARRAY_SIZE(reg_init_2));
1248
1249        reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x20);  /* cx0342 I2C addr */
1250        i2c_w_buf(gspca_dev, sensor_init, ARRAY_SIZE(sensor_init));
1251        i2c_w_buf(gspca_dev, cx0342_timing_seq, ARRAY_SIZE(cx0342_timing_seq));
1252}
1253
1254static void soi763a_6810_init(struct gspca_dev *gspca_dev)
1255{
1256        static const struct cmd reg_init_1[] = {
1257                {TP6800_R2F_TIMING_CFG, 0x2f},
1258                {TP6800_R18_GPIO_DATA, 0xe1},
1259                {0x25, 0x02},
1260                {TP6800_R21_ENDP_1_CTL, 0x00},
1261                {TP6800_R3F_FRAME_RATE, 0x80},
1262                {TP6800_R2F_TIMING_CFG, 0x2f},
1263                {TP6800_R18_GPIO_DATA, 0xc1},
1264        };
1265        static const struct cmd reg_init_2[] = {
1266                {TP6800_R78_FORMAT, 0x54},
1267        };
1268        static const struct cmd sensor_init[] = {
1269                {0x00, 0x00},
1270                {0x01, 0x80},
1271                {0x02, 0x80},
1272                {0x03, 0x90},
1273                {0x04, 0x20},
1274                {0x05, 0x20},
1275                {0x06, 0x80},
1276                {0x07, 0x00},
1277                {0x08, 0xff},
1278                {0x09, 0xff},
1279                {0x0a, 0x76},           /* 7630 = soi673a */
1280                {0x0b, 0x30},
1281                {0x0c, 0x20},
1282                {0x0d, 0x20},
1283                {0x0e, 0xff},
1284                {0x0f, 0xff},
1285                {0x10, 0x41},
1286                {0x15, 0x14},
1287                {0x11, 0x40},
1288                {0x12, 0x48},
1289                {0x13, 0x80},
1290                {0x14, 0x80},
1291                {0x16, 0x03},
1292                {0x28, 0xb0},
1293                {0x71, 0x20},
1294                {0x75, 0x8e},
1295                {0x17, 0x1b},
1296                {0x18, 0xbd},
1297                {0x19, 0x05},
1298                {0x1a, 0xf6},
1299                {0x1b, 0x04},
1300                {0x1c, 0x7f},           /* omnivision */
1301                {0x1d, 0xa2},
1302                {0x1e, 0x00},
1303                {0x1f, 0x00},
1304                {0x20, 0x45},
1305                {0x21, 0x80},
1306                {0x22, 0x80},
1307                {0x23, 0xee},
1308                {0x24, 0x50},
1309                {0x25, 0x7a},
1310                {0x26, 0xa0},
1311                {0x27, 0x9a},
1312                {0x29, 0x30},
1313                {0x2a, 0x80},
1314                {0x2b, 0x00},
1315                {0x2c, 0xac},
1316                {0x2d, 0x05},
1317                {0x2e, 0x80},
1318                {0x2f, 0x3c},
1319                {0x30, 0x22},
1320                {0x31, 0x00},
1321                {0x32, 0x86},
1322                {0x33, 0x08},
1323                {0x34, 0xff},
1324                {0x35, 0xff},
1325                {0x36, 0xff},
1326                {0x37, 0xff},
1327                {0x38, 0xff},
1328                {0x39, 0xff},
1329                {0x3a, 0xfe},
1330                {0x3b, 0xfe},
1331                {0x3c, 0xfe},
1332                {0x3d, 0xfe},
1333                {0x3e, 0xfe},
1334                {0x3f, 0x71},
1335                {0x40, 0xff},
1336                {0x41, 0xff},
1337                {0x42, 0xff},
1338                {0x43, 0xff},
1339                {0x44, 0xff},
1340                {0x45, 0xff},
1341                {0x46, 0xff},
1342                {0x47, 0xff},
1343                {0x48, 0xff},
1344                {0x49, 0xff},
1345                {0x4a, 0xfe},
1346                {0x4b, 0xff},
1347                {0x4c, 0x00},
1348                {0x4d, 0x00},
1349                {0x4e, 0xff},
1350                {0x4f, 0xff},
1351                {0x50, 0xff},
1352                {0x51, 0xff},
1353                {0x52, 0xff},
1354                {0x53, 0xff},
1355                {0x54, 0xff},
1356                {0x55, 0xff},
1357                {0x56, 0xff},
1358                {0x57, 0xff},
1359                {0x58, 0xff},
1360                {0x59, 0xff},
1361                {0x5a, 0xff},
1362                {0x5b, 0xfe},
1363                {0x5c, 0xff},
1364                {0x5d, 0x8f},
1365                {0x5e, 0xff},
1366                {0x5f, 0x8f},
1367                {0x60, 0xa2},
1368                {0x61, 0x4a},
1369                {0x62, 0xf3},
1370                {0x63, 0x75},
1371                {0x64, 0xf0},
1372                {0x65, 0x00},
1373                {0x66, 0x55},
1374                {0x67, 0x92},
1375                {0x68, 0xa0},
1376                {0x69, 0x4a},
1377                {0x6a, 0x22},
1378                {0x6b, 0x00},
1379                {0x6c, 0x33},
1380                {0x6d, 0x44},
1381                {0x6e, 0x22},
1382                {0x6f, 0x84},
1383                {0x70, 0x0b},
1384                {0x72, 0x10},
1385                {0x73, 0x50},
1386                {0x74, 0x21},
1387                {0x76, 0x00},
1388                {0x77, 0xa5},
1389                {0x78, 0x80},
1390                {0x79, 0x80},
1391                {0x7a, 0x80},
1392                {0x7b, 0xe2},
1393                {0x7c, 0x00},
1394                {0x7d, 0xf7},
1395                {0x7e, 0x00},
1396                {0x7f, 0x00},
1397        };
1398
1399        reg_w_buf(gspca_dev, reg_init_1, ARRAY_SIZE(reg_init_1));
1400        reg_w_buf(gspca_dev, tp6810_ov_init_common,
1401                        ARRAY_SIZE(tp6810_ov_init_common));
1402        reg_w_buf(gspca_dev, reg_init_2, ARRAY_SIZE(reg_init_2));
1403
1404        i2c_w(gspca_dev, 0x12, 0x80);           /* sensor reset */
1405        msleep(10);
1406        i2c_w_buf(gspca_dev, sensor_init, ARRAY_SIZE(sensor_init));
1407}
1408
1409/* set the gain and exposure */
1410static void setexposure(struct gspca_dev *gspca_dev, s32 expo, s32 gain,
1411                                                        s32 blue, s32 red)
1412{
1413        struct sd *sd = (struct sd *) gspca_dev;
1414
1415        if (sd->sensor == SENSOR_CX0342) {
1416                expo = (expo << 2) - 1;
1417                i2c_w(gspca_dev, CX0342_EXPO_LINE_L, expo);
1418                i2c_w(gspca_dev, CX0342_EXPO_LINE_H, expo >> 8);
1419                if (sd->bridge == BRIDGE_TP6800)
1420                        i2c_w(gspca_dev, CX0342_RAW_GBGAIN_H,
1421                                                gain >> 8);
1422                i2c_w(gspca_dev, CX0342_RAW_GBGAIN_L, gain);
1423                if (sd->bridge == BRIDGE_TP6800)
1424                        i2c_w(gspca_dev, CX0342_RAW_GRGAIN_H,
1425                                        gain >> 8);
1426                i2c_w(gspca_dev, CX0342_RAW_GRGAIN_L, gain);
1427                if (sd->sensor == SENSOR_CX0342) {
1428                        if (sd->bridge == BRIDGE_TP6800)
1429                                i2c_w(gspca_dev, CX0342_RAW_BGAIN_H,
1430                                                blue >> 8);
1431                        i2c_w(gspca_dev, CX0342_RAW_BGAIN_L, blue);
1432                        if (sd->bridge == BRIDGE_TP6800)
1433                                i2c_w(gspca_dev, CX0342_RAW_RGAIN_H,
1434                                                red >> 8);
1435                        i2c_w(gspca_dev, CX0342_RAW_RGAIN_L, red);
1436                }
1437                i2c_w(gspca_dev, CX0342_SYS_CTRL_0,
1438                                sd->bridge == BRIDGE_TP6800 ? 0x80 : 0x81);
1439                return;
1440        }
1441
1442        /* soi763a */
1443        i2c_w(gspca_dev, 0x10,          /* AEC_H (exposure time) */
1444                         expo);
1445/*      i2c_w(gspca_dev, 0x76, 0x02);    * AEC_L ([1:0] */
1446        i2c_w(gspca_dev, 0x00,          /* gain */
1447                         gain);
1448}
1449
1450/* set the JPEG quantization tables */
1451static void set_dqt(struct gspca_dev *gspca_dev, u8 q)
1452{
1453        struct sd *sd = (struct sd *) gspca_dev;
1454
1455        /* update the jpeg quantization tables */
1456        gspca_dbg(gspca_dev, D_STREAM, "q %d -> %d\n", sd->quality, q);
1457        sd->quality = q;
1458        if (q > 16)
1459                q = 16;
1460        if (sd->sensor == SENSOR_SOI763A)
1461                jpeg_set_qual(sd->jpeg_hdr, jpeg_q[q]);
1462        else
1463                memcpy(&sd->jpeg_hdr[JPEG_QT0_OFFSET - 1],
1464                        DQT[q], sizeof DQT[0]);
1465}
1466
1467/* set the JPEG compression quality factor */
1468static void setquality(struct gspca_dev *gspca_dev, s32 q)
1469{
1470        struct sd *sd = (struct sd *) gspca_dev;
1471
1472        if (q != 16)
1473                q = 15 - q;
1474
1475        reg_w(gspca_dev, TP6800_R7A_BLK_THRLD, 0x00);
1476        reg_w(gspca_dev, TP6800_R79_QUALITY, 0x04);
1477        reg_w(gspca_dev, TP6800_R79_QUALITY, q);
1478
1479        /* auto quality */
1480        if (q == 15 && sd->bridge == BRIDGE_TP6810) {
1481                msleep(4);
1482                reg_w(gspca_dev, TP6800_R7A_BLK_THRLD, 0x19);
1483        }
1484}
1485
1486static const u8 color_null[18] = {
1487        0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1488        0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1489        0x00, 0x00, 0x00, 0x00, 0x00, 0x00
1490};
1491static const u8 color_gain[NSENSORS][18] = {
1492[SENSOR_CX0342] =
1493        {0x4c, 0x00, 0xa9, 0x00, 0x31, 0x00,    /* Y R/G/B (LE values) */
1494         0xb6, 0x03, 0x6c, 0x03, 0xe0, 0x00,    /* U R/G/B */
1495         0xdf, 0x00, 0x46, 0x03, 0xdc, 0x03},   /* V R/G/B */
1496[SENSOR_SOI763A] =
1497        {0x4c, 0x00, 0x95, 0x00, 0x1d, 0x00,    /* Y R/G/B (LE values) */
1498         0xb6, 0x03, 0x6c, 0x03, 0xd7, 0x00,    /* U R/G/B */
1499         0xd5, 0x00, 0x46, 0x03, 0xdc, 0x03},   /* V R/G/B */
1500};
1501
1502static void setgamma(struct gspca_dev *gspca_dev, s32 gamma)
1503{
1504        struct sd *sd = (struct sd *) gspca_dev;
1505#define NGAMMA 6
1506        static const u8 gamma_tb[NGAMMA][3][1024] = {
1507            {                           /* gamma 0 - from tp6800 + soi763a */
1508                {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1509                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1510                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1511                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
1512                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1513                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1514                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1515                 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02,
1516                 0x02, 0x03, 0x05, 0x07, 0x07, 0x08, 0x09, 0x09,
1517                 0x0a, 0x0c, 0x0c, 0x0d, 0x0e, 0x0e, 0x10, 0x11,
1518                 0x11, 0x12, 0x14, 0x14, 0x15, 0x16, 0x16, 0x17,
1519                 0x17, 0x18, 0x1a, 0x1a, 0x1b, 0x1b, 0x1c, 0x1e,
1520                 0x1e, 0x1f, 0x1f, 0x20, 0x20, 0x22, 0x23, 0x23,
1521                 0x25, 0x25, 0x26, 0x26, 0x27, 0x27, 0x28, 0x28,
1522                 0x29, 0x29, 0x2b, 0x2c, 0x2c, 0x2d, 0x2d, 0x2f,
1523                 0x2f, 0x30, 0x30, 0x31, 0x31, 0x33, 0x33, 0x34,
1524                 0x34, 0x34, 0x35, 0x35, 0x37, 0x37, 0x38, 0x38,
1525                 0x39, 0x39, 0x3a, 0x3a, 0x3b, 0x3b, 0x3b, 0x3c,
1526                 0x3c, 0x3d, 0x3d, 0x3f, 0x3f, 0x40, 0x40, 0x40,
1527                 0x42, 0x42, 0x43, 0x43, 0x44, 0x44, 0x44, 0x45,
1528                 0x45, 0x47, 0x47, 0x47, 0x48, 0x48, 0x49, 0x49,
1529                 0x4a, 0x4a, 0x4a, 0x4b, 0x4b, 0x4b, 0x4c, 0x4c,
1530                 0x4d, 0x4d, 0x4d, 0x4f, 0x4f, 0x50, 0x50, 0x50,
1531                 0x52, 0x52, 0x52, 0x53, 0x53, 0x54, 0x54, 0x54,
1532                 0x55, 0x55, 0x55, 0x56, 0x56, 0x58, 0x58, 0x58,
1533                 0x59, 0x59, 0x59, 0x5a, 0x5a, 0x5a, 0x5b, 0x5b,
1534                 0x5b, 0x5c, 0x5c, 0x5c, 0x5e, 0x5e, 0x5e, 0x5f,
1535                 0x5f, 0x5f, 0x60, 0x60, 0x60, 0x61, 0x61, 0x61,
1536                 0x62, 0x62, 0x62, 0x63, 0x63, 0x63, 0x65, 0x65,
1537                 0x65, 0x66, 0x66, 0x66, 0x67, 0x67, 0x67, 0x68,
1538                 0x68, 0x68, 0x69, 0x69, 0x69, 0x69, 0x6a, 0x6a,
1539                 0x6a, 0x6c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d, 0x6e,
1540                 0x6e, 0x6e, 0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70,
1541                 0x70, 0x71, 0x71, 0x71, 0x71, 0x73, 0x73, 0x73,
1542                 0x74, 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x77,
1543                 0x77, 0x77, 0x77, 0x78, 0x78, 0x78, 0x79, 0x79,
1544                 0x79, 0x79, 0x7a, 0x7a, 0x7a, 0x7a, 0x7b, 0x7b,
1545                 0x7b, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d,
1546                 0x7d, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80,
1547                 0x81, 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x82,
1548                 0x84, 0x84, 0x84, 0x85, 0x85, 0x85, 0x85, 0x86,
1549                 0x86, 0x86, 0x86, 0x88, 0x88, 0x88, 0x88, 0x89,
1550                 0x89, 0x89, 0x89, 0x8a, 0x8a, 0x8a, 0x8a, 0x8b,
1551                 0x8b, 0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8d, 0x8e,
1552                 0x8e, 0x8e, 0x8e, 0x8f, 0x8f, 0x8f, 0x8f, 0x90,
1553                 0x90, 0x90, 0x90, 0x90, 0x91, 0x91, 0x91, 0x91,
1554                 0x92, 0x92, 0x92, 0x92, 0x93, 0x93, 0x93, 0x93,
1555                 0x94, 0x94, 0x94, 0x94, 0x96, 0x96, 0x96, 0x96,
1556                 0x96, 0x97, 0x97, 0x97, 0x97, 0x98, 0x98, 0x98,
1557                 0x98, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9a, 0x9a,
1558                 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c,
1559                 0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d, 0x9d, 0x9e,
1560                 0x9e, 0x9e, 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa0,
1561                 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2, 0xa2,
1562                 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4,
1563                 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5, 0xa6,
1564                 0xa6, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8, 0xa8,
1565                 0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xab, 0xab, 0xab,
1566                 0xab, 0xab, 0xac, 0xac, 0xac, 0xac, 0xac, 0xad,
1567                 0xad, 0xad, 0xad, 0xae, 0xae, 0xae, 0xae, 0xae,
1568                 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0,
1569                 0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2,
1570                 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3,
1571                 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6,
1572                 0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb8,
1573                 0xb8, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xb9,
1574                 0xb9, 0xba, 0xba, 0xba, 0xba, 0xba, 0xbc, 0xbc,
1575                 0xbc, 0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
1576                 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf,
1577                 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2,
1578                 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3,
1579                 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5,
1580                 0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
1581                 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc9, 0xc9, 0xc9,
1582                 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca, 0xca, 0xca,
1583                 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc, 0xcc,
1584                 0xcc, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xce,
1585                 0xce, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf,
1586                 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1,
1587                 0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3, 0xd3, 0xd3,
1588                 0xd3, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd6, 0xd6,
1589                 0xd6, 0xd6, 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7,
1590                 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9,
1591                 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb,
1592                 0xdb, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd, 0xdd, 0xdd,
1593                 0xdd, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xdf,
1594                 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0,
1595                 0xe0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2,
1596                 0xe2, 0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
1597                 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5,
1598                 0xe5, 0xe5, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe7,
1599                 0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe8, 0xe8,
1600                 0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb, 0xeb, 0xeb,
1601                 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec, 0xec, 0xed,
1602                 0xed, 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee,
1603                 0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0,
1604                 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3,
1605                 0xf3, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4,
1606                 0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6,
1607                 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8,
1608                 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa,
1609                 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
1610                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1611                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1612                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1613                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1614                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1615                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1616                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1617                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1618                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1619                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1620                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1621                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1622                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1623                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1624                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1625                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1626                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1627                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1628                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1629                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1630                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1631                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1632                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1633                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1634                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1635                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb},
1636                {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1637                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1638                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1639                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
1640                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1641                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1642                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1643                 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02,
1644                 0x02, 0x03, 0x05, 0x07, 0x07, 0x08, 0x09, 0x09,
1645                 0x0a, 0x0c, 0x0c, 0x0d, 0x0e, 0x0e, 0x10, 0x11,
1646                 0x11, 0x12, 0x14, 0x14, 0x15, 0x16, 0x16, 0x17,
1647                 0x17, 0x18, 0x1a, 0x1a, 0x1b, 0x1b, 0x1c, 0x1e,
1648                 0x1e, 0x1f, 0x1f, 0x20, 0x20, 0x22, 0x23, 0x23,
1649                 0x25, 0x25, 0x26, 0x26, 0x27, 0x27, 0x28, 0x28,
1650                 0x29, 0x29, 0x2b, 0x2c, 0x2c, 0x2d, 0x2d, 0x2f,
1651                 0x2f, 0x30, 0x30, 0x31, 0x31, 0x33, 0x33, 0x34,
1652                 0x34, 0x34, 0x35, 0x35, 0x37, 0x37, 0x38, 0x38,
1653                 0x39, 0x39, 0x3a, 0x3a, 0x3b, 0x3b, 0x3b, 0x3c,
1654                 0x3c, 0x3d, 0x3d, 0x3f, 0x3f, 0x40, 0x40, 0x40,
1655                 0x42, 0x42, 0x43, 0x43, 0x44, 0x44, 0x44, 0x45,
1656                 0x45, 0x47, 0x47, 0x47, 0x48, 0x48, 0x49, 0x49,
1657                 0x4a, 0x4a, 0x4a, 0x4b, 0x4b, 0x4b, 0x4c, 0x4c,
1658                 0x4d, 0x4d, 0x4d, 0x4f, 0x4f, 0x50, 0x50, 0x50,
1659                 0x52, 0x52, 0x52, 0x53, 0x53, 0x54, 0x54, 0x54,
1660                 0x55, 0x55, 0x55, 0x56, 0x56, 0x58, 0x58, 0x58,
1661                 0x59, 0x59, 0x59, 0x5a, 0x5a, 0x5a, 0x5b, 0x5b,
1662                 0x5b, 0x5c, 0x5c, 0x5c, 0x5e, 0x5e, 0x5e, 0x5f,
1663                 0x5f, 0x5f, 0x60, 0x60, 0x60, 0x61, 0x61, 0x61,
1664                 0x62, 0x62, 0x62, 0x63, 0x63, 0x63, 0x65, 0x65,
1665                 0x65, 0x66, 0x66, 0x66, 0x67, 0x67, 0x67, 0x68,
1666                 0x68, 0x68, 0x69, 0x69, 0x69, 0x69, 0x6a, 0x6a,
1667                 0x6a, 0x6c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d, 0x6e,
1668                 0x6e, 0x6e, 0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70,
1669                 0x70, 0x71, 0x71, 0x71, 0x71, 0x73, 0x73, 0x73,
1670                 0x74, 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x77,
1671                 0x77, 0x77, 0x77, 0x78, 0x78, 0x78, 0x79, 0x79,
1672                 0x79, 0x79, 0x7a, 0x7a, 0x7a, 0x7a, 0x7b, 0x7b,
1673                 0x7b, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d,
1674                 0x7d, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80,
1675                 0x81, 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x82,
1676                 0x84, 0x84, 0x84, 0x85, 0x85, 0x85, 0x85, 0x86,
1677                 0x86, 0x86, 0x86, 0x88, 0x88, 0x88, 0x88, 0x89,
1678                 0x89, 0x89, 0x89, 0x8a, 0x8a, 0x8a, 0x8a, 0x8b,
1679                 0x8b, 0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8d, 0x8e,
1680                 0x8e, 0x8e, 0x8e, 0x8f, 0x8f, 0x8f, 0x8f, 0x90,
1681                 0x90, 0x90, 0x90, 0x90, 0x91, 0x91, 0x91, 0x91,
1682                 0x92, 0x92, 0x92, 0x92, 0x93, 0x93, 0x93, 0x93,
1683                 0x94, 0x94, 0x94, 0x94, 0x96, 0x96, 0x96, 0x96,
1684                 0x96, 0x97, 0x97, 0x97, 0x97, 0x98, 0x98, 0x98,
1685                 0x98, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9a, 0x9a,
1686                 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c,
1687                 0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d, 0x9d, 0x9e,
1688                 0x9e, 0x9e, 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa0,
1689                 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2, 0xa2,
1690                 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4,
1691                 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5, 0xa6,
1692                 0xa6, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8, 0xa8,
1693                 0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xab, 0xab, 0xab,
1694                 0xab, 0xab, 0xac, 0xac, 0xac, 0xac, 0xac, 0xad,
1695                 0xad, 0xad, 0xad, 0xae, 0xae, 0xae, 0xae, 0xae,
1696                 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0,
1697                 0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2,
1698                 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3,
1699                 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6,
1700                 0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb8,
1701                 0xb8, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xb9,
1702                 0xb9, 0xba, 0xba, 0xba, 0xba, 0xba, 0xbc, 0xbc,
1703                 0xbc, 0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
1704                 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf,
1705                 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2,
1706                 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3,
1707                 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5,
1708                 0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
1709                 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc9, 0xc9, 0xc9,
1710                 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca, 0xca, 0xca,
1711                 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc, 0xcc,
1712                 0xcc, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xce,
1713                 0xce, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf,
1714                 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1,
1715                 0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3, 0xd3, 0xd3,
1716                 0xd3, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd6, 0xd6,
1717                 0xd6, 0xd6, 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7,
1718                 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9,
1719                 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb,
1720                 0xdb, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd, 0xdd, 0xdd,
1721                 0xdd, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xdf,
1722                 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0,
1723                 0xe0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2,
1724                 0xe2, 0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
1725                 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5,
1726                 0xe5, 0xe5, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe7,
1727                 0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe8, 0xe8,
1728                 0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb, 0xeb, 0xeb,
1729                 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec, 0xec, 0xed,
1730                 0xed, 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee,
1731                 0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0,
1732                 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3,
1733                 0xf3, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4,
1734                 0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6,
1735                 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8,
1736                 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa,
1737                 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
1738                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1739                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1740                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1741                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1742                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1743                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1744                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1745                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1746                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1747                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1748                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1749                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1750                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1751                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1752                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1753                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1754                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1755                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1756                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1757                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1758                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1759                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1760                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1761                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1762                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1763                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb},
1764                {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1765                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1766                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1767                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
1768                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1769                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1770                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1771                 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02,
1772                 0x02, 0x03, 0x05, 0x07, 0x07, 0x08, 0x09, 0x09,
1773                 0x0a, 0x0c, 0x0c, 0x0d, 0x0e, 0x0e, 0x10, 0x11,
1774                 0x11, 0x12, 0x14, 0x14, 0x15, 0x16, 0x16, 0x17,
1775                 0x17, 0x18, 0x1a, 0x1a, 0x1b, 0x1b, 0x1c, 0x1e,
1776                 0x1e, 0x1f, 0x1f, 0x20, 0x20, 0x22, 0x23, 0x23,
1777                 0x25, 0x25, 0x26, 0x26, 0x27, 0x27, 0x28, 0x28,
1778                 0x29, 0x29, 0x2b, 0x2c, 0x2c, 0x2d, 0x2d, 0x2f,
1779                 0x2f, 0x30, 0x30, 0x31, 0x31, 0x33, 0x33, 0x34,
1780                 0x34, 0x34, 0x35, 0x35, 0x37, 0x37, 0x38, 0x38,
1781                 0x39, 0x39, 0x3a, 0x3a, 0x3b, 0x3b, 0x3b, 0x3c,
1782                 0x3c, 0x3d, 0x3d, 0x3f, 0x3f, 0x40, 0x40, 0x40,
1783                 0x42, 0x42, 0x43, 0x43, 0x44, 0x44, 0x44, 0x45,
1784                 0x45, 0x47, 0x47, 0x47, 0x48, 0x48, 0x49, 0x49,
1785                 0x4a, 0x4a, 0x4a, 0x4b, 0x4b, 0x4b, 0x4c, 0x4c,
1786                 0x4d, 0x4d, 0x4d, 0x4f, 0x4f, 0x50, 0x50, 0x50,
1787                 0x52, 0x52, 0x52, 0x53, 0x53, 0x54, 0x54, 0x54,
1788                 0x55, 0x55, 0x55, 0x56, 0x56, 0x58, 0x58, 0x58,
1789                 0x59, 0x59, 0x59, 0x5a, 0x5a, 0x5a, 0x5b, 0x5b,
1790                 0x5b, 0x5c, 0x5c, 0x5c, 0x5e, 0x5e, 0x5e, 0x5f,
1791                 0x5f, 0x5f, 0x60, 0x60, 0x60, 0x61, 0x61, 0x61,
1792                 0x62, 0x62, 0x62, 0x63, 0x63, 0x63, 0x65, 0x65,
1793                 0x65, 0x66, 0x66, 0x66, 0x67, 0x67, 0x67, 0x68,
1794                 0x68, 0x68, 0x69, 0x69, 0x69, 0x69, 0x6a, 0x6a,
1795                 0x6a, 0x6c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d, 0x6e,
1796                 0x6e, 0x6e, 0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70,
1797                 0x70, 0x71, 0x71, 0x71, 0x71, 0x73, 0x73, 0x73,
1798                 0x74, 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x76,
1799                 0x77, 0x77, 0x77, 0x78, 0x78, 0x78, 0x79, 0x79,
1800                 0x79, 0x79, 0x7a, 0x7a, 0x7a, 0x7a, 0x7b, 0x7b,
1801                 0x7b, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d,
1802                 0x7d, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80,
1803                 0x81, 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x82,
1804                 0x84, 0x84, 0x84, 0x85, 0x85, 0x85, 0x85, 0x86,
1805                 0x86, 0x86, 0x86, 0x88, 0x88, 0x88, 0x88, 0x89,
1806                 0x89, 0x89, 0x89, 0x8a, 0x8a, 0x8a, 0x8a, 0x8b,
1807                 0x8b, 0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8d, 0x8e,
1808                 0x8e, 0x8e, 0x8e, 0x8f, 0x8f, 0x8f, 0x8f, 0x90,
1809                 0x90, 0x90, 0x90, 0x90, 0x91, 0x91, 0x91, 0x91,
1810                 0x92, 0x92, 0x92, 0x92, 0x93, 0x93, 0x93, 0x93,
1811                 0x94, 0x94, 0x94, 0x94, 0x96, 0x96, 0x96, 0x96,
1812                 0x96, 0x97, 0x97, 0x97, 0x97, 0x98, 0x98, 0x98,
1813                 0x98, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9a, 0x9a,
1814                 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c,
1815                 0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d, 0x9d, 0x9e,
1816                 0x9e, 0x9e, 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa0,
1817                 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2, 0xa2,
1818                 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4,
1819                 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5, 0xa6,
1820                 0xa6, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8, 0xa8,
1821                 0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xab, 0xab, 0xab,
1822                 0xab, 0xab, 0xac, 0xac, 0xac, 0xac, 0xac, 0xad,
1823                 0xad, 0xad, 0xad, 0xae, 0xae, 0xae, 0xae, 0xae,
1824                 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0,
1825                 0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2,
1826                 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3,
1827                 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6,
1828                 0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb8,
1829                 0xb8, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xb9,
1830                 0xb9, 0xba, 0xba, 0xba, 0xba, 0xba, 0xbc, 0xbc,
1831                 0xbc, 0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
1832                 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf,
1833                 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2,
1834                 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3,
1835                 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5,
1836                 0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
1837                 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc9, 0xc9, 0xc9,
1838                 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca, 0xca, 0xca,
1839                 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc, 0xcc,
1840                 0xcc, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xce,
1841                 0xce, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf,
1842                 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1,
1843                 0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3, 0xd3, 0xd3,
1844                 0xd3, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd6, 0xd6,
1845                 0xd6, 0xd6, 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7,
1846                 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9,
1847                 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb,
1848                 0xdb, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd, 0xdd, 0xdd,
1849                 0xdd, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xdf,
1850                 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0,
1851                 0xe0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2,
1852                 0xe2, 0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
1853                 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5,
1854                 0xe5, 0xe5, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe7,
1855                 0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe8, 0xe8,
1856                 0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb, 0xeb, 0xeb,
1857                 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec, 0xec, 0xed,
1858                 0xed, 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee,
1859                 0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0,
1860                 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3,
1861                 0xf3, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4,
1862                 0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6,
1863                 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8,
1864                 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa,
1865                 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
1866                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1867                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1868                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1869                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1870                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1871                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1872                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1873                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1874                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1875                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1876                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1877                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1878                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1879                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1880                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1881                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1882                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1883                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1884                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1885                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1886                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1887                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1888                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1889                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1890                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1891                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb}
1892            },
1893            {                           /* gamma 1 - from tp6810 + soi763a */
1894                {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1895                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1896                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1897                 0x01, 0x02, 0x03, 0x05, 0x07, 0x08, 0x09, 0x0a,
1898                 0x0c, 0x0d, 0x0e, 0x10, 0x11, 0x12, 0x14, 0x15,
1899                 0x16, 0x17, 0x18, 0x1a, 0x1a, 0x1b, 0x1c, 0x1e,
1900                 0x1f, 0x20, 0x22, 0x22, 0x23, 0x25, 0x26, 0x27,
1901                 0x27, 0x28, 0x29, 0x2b, 0x2b, 0x2c, 0x2d, 0x2f,
1902                 0x2f, 0x30, 0x31, 0x33, 0x33, 0x34, 0x35, 0x35,
1903                 0x37, 0x38, 0x38, 0x39, 0x3a, 0x3a, 0x3b, 0x3c,
1904                 0x3c, 0x3d, 0x3f, 0x3f, 0x40, 0x42, 0x42, 0x43,
1905                 0x43, 0x44, 0x45, 0x45, 0x47, 0x47, 0x48, 0x49,
1906                 0x49, 0x4a, 0x4a, 0x4b, 0x4b, 0x4c, 0x4d, 0x4d,
1907                 0x4f, 0x4f, 0x50, 0x50, 0x52, 0x52, 0x53, 0x53,
1908                 0x54, 0x54, 0x55, 0x56, 0x56, 0x58, 0x58, 0x59,
1909                 0x59, 0x5a, 0x5a, 0x5b, 0x5b, 0x5c, 0x5c, 0x5e,
1910                 0x5e, 0x5e, 0x5f, 0x5f, 0x60, 0x60, 0x61, 0x61,
1911                 0x62, 0x62, 0x63, 0x63, 0x65, 0x65, 0x65, 0x66,
1912                 0x66, 0x67, 0x67, 0x68, 0x68, 0x69, 0x69, 0x69,
1913                 0x6a, 0x6a, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d, 0x6e,
1914                 0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70, 0x71, 0x71,
1915                 0x73, 0x73, 0x73, 0x74, 0x74, 0x74, 0x75, 0x75,
1916                 0x77, 0x77, 0x77, 0x78, 0x78, 0x79, 0x79, 0x79,
1917                 0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7c, 0x7c, 0x7c,
1918                 0x7d, 0x7d, 0x7d, 0x7f, 0x7f, 0x80, 0x80, 0x80,
1919                 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x84, 0x84,
1920                 0x84, 0x85, 0x85, 0x85, 0x86, 0x86, 0x86, 0x88,
1921                 0x88, 0x88, 0x89, 0x89, 0x89, 0x8a, 0x8a, 0x8a,
1922                 0x8b, 0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8e, 0x8e,
1923                 0x8e, 0x8f, 0x8f, 0x8f, 0x90, 0x90, 0x90, 0x91,
1924                 0x91, 0x91, 0x92, 0x92, 0x92, 0x92, 0x93, 0x93,
1925                 0x93, 0x94, 0x94, 0x94, 0x96, 0x96, 0x96, 0x97,
1926                 0x97, 0x97, 0x97, 0x98, 0x98, 0x98, 0x99, 0x99,
1927                 0x99, 0x9a, 0x9a, 0x9a, 0x9a, 0x9b, 0x9b, 0x9b,
1928                 0x9c, 0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d, 0x9e,
1929                 0x9e, 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa1, 0xa1,
1930                 0xa1, 0xa1, 0xa2, 0xa2, 0xa2, 0xa2, 0xa3, 0xa3,
1931                 0xa3, 0xa4, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5,
1932                 0xa5, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8, 0xa8,
1933                 0xa9, 0xa9, 0xa9, 0xa9, 0xab, 0xab, 0xab, 0xab,
1934                 0xac, 0xac, 0xac, 0xad, 0xad, 0xad, 0xad, 0xae,
1935                 0xae, 0xae, 0xae, 0xaf, 0xaf, 0xaf, 0xaf, 0xb0,
1936                 0xb0, 0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2,
1937                 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3, 0xb4,
1938                 0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6, 0xb6, 0xb7,
1939                 0xb7, 0xb7, 0xb7, 0xb7, 0xb8, 0xb8, 0xb8, 0xb8,
1940                 0xb9, 0xb9, 0xb9, 0xb9, 0xba, 0xba, 0xba, 0xba,
1941                 0xbc, 0xbc, 0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbd,
1942                 0xbd, 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf,
1943                 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0xc2,
1944                 0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc4,
1945                 0xc4, 0xc4, 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6,
1946                 0xc6, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7,
1947                 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca,
1948                 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc,
1949                 0xcc, 0xcc, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xce,
1950                 0xce, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf,
1951                 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1, 0xd1,
1952                 0xd1, 0xd1, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd4,
1953                 0xd4, 0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
1954                 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8, 0xd8, 0xd8,
1955                 0xd8, 0xd8, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xda,
1956                 0xda, 0xda, 0xda, 0xda, 0xdb, 0xdb, 0xdb, 0xdb,
1957                 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde,
1958                 0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0,
1959                 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1, 0xe1,
1960                 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe3,
1961                 0xe3, 0xe3, 0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4,
1962                 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe6, 0xe6, 0xe6,
1963                 0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe8,
1964                 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xe9, 0xe9,
1965                 0xe9, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec,
1966                 0xec, 0xec, 0xec, 0xed, 0xed, 0xed, 0xed, 0xed,
1967                 0xee, 0xee, 0xee, 0xee, 0xee, 0xef, 0xef, 0xef,
1968                 0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
1969                 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3, 0xf3, 0xf3,
1970                 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5,
1971                 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6,
1972                 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8,
1973                 0xf8, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9,
1974                 0xf9, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
1975                 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1976                 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc,
1977                 0xfc, 0xfc, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfe,
1978                 0xfe, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff,
1979                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1980                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1981                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1982                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1983                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1984                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1985                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1986                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1987                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1988                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1989                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1990                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1991                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1992                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1993                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1994                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1995                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1996                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1997                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1998                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1999                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2000                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2001                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2002                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2003                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2004                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2005                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2006                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2007                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2008                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2009                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2010                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2011                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2012                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2013                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2014                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2015                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2016                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2017                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2018                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2019                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2020                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2021                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
2022                {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2023                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2024                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2025                 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03,
2026                 0x05, 0x07, 0x07, 0x08, 0x09, 0x0a, 0x0c, 0x0d,
2027                 0x0e, 0x10, 0x10, 0x11, 0x12, 0x14, 0x15, 0x15,
2028                 0x16, 0x17, 0x18, 0x1a, 0x1a, 0x1b, 0x1c, 0x1e,
2029                 0x1e, 0x1f, 0x20, 0x20, 0x22, 0x23, 0x25, 0x25,
2030                 0x26, 0x27, 0x27, 0x28, 0x29, 0x29, 0x2b, 0x2c,
2031                 0x2c, 0x2d, 0x2d, 0x2f, 0x30, 0x30, 0x31, 0x31,
2032                 0x33, 0x34, 0x34, 0x35, 0x35, 0x37, 0x38, 0x38,
2033                 0x39, 0x39, 0x3a, 0x3a, 0x3b, 0x3b, 0x3c, 0x3d,
2034                 0x3d, 0x3f, 0x3f, 0x40, 0x40, 0x42, 0x42, 0x43,
2035                 0x43, 0x44, 0x44, 0x45, 0x45, 0x47, 0x47, 0x48,
2036                 0x48, 0x49, 0x49, 0x4a, 0x4a, 0x4b, 0x4b, 0x4c,
2037                 0x4c, 0x4d, 0x4d, 0x4d, 0x4f, 0x4f, 0x50, 0x50,
2038                 0x52, 0x52, 0x53, 0x53, 0x53, 0x54, 0x54, 0x55,
2039                 0x55, 0x56, 0x56, 0x56, 0x58, 0x58, 0x59, 0x59,
2040                 0x5a, 0x5a, 0x5a, 0x5b, 0x5b, 0x5c, 0x5c, 0x5c,
2041                 0x5e, 0x5e, 0x5f, 0x5f, 0x5f, 0x60, 0x60, 0x60,
2042                 0x61, 0x61, 0x62, 0x62, 0x62, 0x63, 0x63, 0x65,
2043                 0x65, 0x65, 0x66, 0x66, 0x66, 0x67, 0x67, 0x67,
2044                 0x68, 0x68, 0x69, 0x69, 0x69, 0x6a, 0x6a, 0x6a,
2045                 0x6c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d, 0x6e, 0x6e,
2046                 0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70, 0x70, 0x71,
2047                 0x71, 0x71, 0x73, 0x73, 0x73, 0x74, 0x74, 0x74,
2048                 0x75, 0x75, 0x75, 0x77, 0x77, 0x77, 0x78, 0x78,
2049                 0x78, 0x79, 0x79, 0x79, 0x79, 0x7a, 0x7a, 0x7a,
2050                 0x7b, 0x7b, 0x7b, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d,
2051                 0x7d, 0x7d, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80,
2052                 0x80, 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x82,
2053                 0x84, 0x84, 0x84, 0x85, 0x85, 0x85, 0x85, 0x86,
2054                 0x86, 0x86, 0x88, 0x88, 0x88, 0x88, 0x89, 0x89,
2055                 0x89, 0x89, 0x8a, 0x8a, 0x8a, 0x8b, 0x8b, 0x8b,
2056                 0x8b, 0x8d, 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e,
2057                 0x8e, 0x8f, 0x8f, 0x8f, 0x90, 0x90, 0x90, 0x90,
2058                 0x91, 0x91, 0x91, 0x91, 0x92, 0x92, 0x92, 0x92,
2059                 0x93, 0x93, 0x93, 0x93, 0x94, 0x94, 0x94, 0x94,
2060                 0x96, 0x96, 0x96, 0x96, 0x97, 0x97, 0x97, 0x97,
2061                 0x98, 0x98, 0x98, 0x98, 0x99, 0x99, 0x99, 0x99,
2062                 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9b, 0x9b, 0x9b,
2063                 0x9b, 0x9c, 0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d,
2064                 0x9d, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0xa0, 0xa0,
2065                 0xa0, 0xa0, 0xa1, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2,
2066                 0xa2, 0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4,
2067                 0xa4, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5,
2068                 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8,
2069                 0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xab, 0xab,
2070                 0xab, 0xab, 0xac, 0xac, 0xac, 0xac, 0xac, 0xad,
2071                 0xad, 0xad, 0xad, 0xad, 0xae, 0xae, 0xae, 0xae,
2072                 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0,
2073                 0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2,
2074                 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3,
2075                 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6,
2076                 0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb8,
2077                 0xb8, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xb9,
2078                 0xb9, 0xba, 0xba, 0xba, 0xba, 0xba, 0xbc, 0xbc,
2079                 0xbc, 0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
2080                 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf,
2081                 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
2082                 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3,
2083                 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5,
2084                 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6,
2085                 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc9,
2086                 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca,
2087                 0xca, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc,
2088                 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd, 0xcd,
2089                 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce, 0xce, 0xcf,
2090                 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xd0, 0xd0,
2091                 0xd0, 0xd0, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1,
2092                 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4,
2093                 0xd4, 0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
2094                 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8, 0xd8,
2095                 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9,
2096                 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb, 0xdb,
2097                 0xdb, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd, 0xdd, 0xdd,
2098                 0xdd, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xdf,
2099                 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0,
2100                 0xe0, 0xe0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2,
2101                 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe3, 0xe3,
2102                 0xe3, 0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4,
2103                 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe6, 0xe6, 0xe6,
2104                 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
2105                 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9,
2106                 0xe9, 0xe9, 0xe9, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
2107                 0xeb, 0xec, 0xec, 0xec, 0xec, 0xec, 0xed, 0xed,
2108                 0xed, 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee,
2109                 0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0,
2110                 0xf0, 0xf0, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1,
2111                 0xf1, 0xf1, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf4,
2112                 0xf4, 0xf4, 0xf4, 0xf4, 0xf5, 0xf5, 0xf5, 0xf5,
2113                 0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf7,
2114                 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8, 0xf8, 0xf8,
2115                 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa,
2116                 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
2117                 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfc, 0xfc,
2118                 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc,
2119                 0xfc, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfe, 0xfe,
2120                 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
2121                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2122                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2123                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2124                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2125                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2126                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2127                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2128                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2129                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2130                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2131                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2132                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2133                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2134                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2135                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2136                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2137                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2138                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2139                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2140                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2141                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2142                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2143                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2144                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2145                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2146                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2147                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2148                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2149                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
2150                {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2151                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2152                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2153                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2154                 0x00, 0x00, 0x01, 0x02, 0x03, 0x05, 0x05, 0x07,
2155                 0x08, 0x09, 0x0a, 0x0a, 0x0c, 0x0d, 0x0e, 0x0e,
2156                 0x10, 0x11, 0x12, 0x12, 0x14, 0x15, 0x16, 0x16,
2157                 0x17, 0x18, 0x18, 0x1a, 0x1b, 0x1b, 0x1c, 0x1e,
2158                 0x1e, 0x1f, 0x1f, 0x20, 0x22, 0x22, 0x23, 0x23,
2159                 0x25, 0x26, 0x26, 0x27, 0x27, 0x28, 0x29, 0x29,
2160                 0x2b, 0x2b, 0x2c, 0x2c, 0x2d, 0x2d, 0x2f, 0x30,
2161                 0x30, 0x31, 0x31, 0x33, 0x33, 0x34, 0x34, 0x35,
2162                 0x35, 0x37, 0x37, 0x38, 0x38, 0x39, 0x39, 0x3a,
2163                 0x3a, 0x3b, 0x3b, 0x3b, 0x3c, 0x3c, 0x3d, 0x3d,
2164                 0x3f, 0x3f, 0x40, 0x40, 0x42, 0x42, 0x42, 0x43,
2165                 0x43, 0x44, 0x44, 0x45, 0x45, 0x47, 0x47, 0x47,
2166                 0x48, 0x48, 0x49, 0x49, 0x49, 0x4a, 0x4a, 0x4b,
2167                 0x4b, 0x4b, 0x4c, 0x4c, 0x4d, 0x4d, 0x4d, 0x4f,
2168                 0x4f, 0x50, 0x50, 0x50, 0x52, 0x52, 0x52, 0x53,
2169                 0x53, 0x54, 0x54, 0x54, 0x55, 0x55, 0x55, 0x56,
2170                 0x56, 0x58, 0x58, 0x58, 0x59, 0x59, 0x59, 0x5a,
2171                 0x5a, 0x5a, 0x5b, 0x5b, 0x5b, 0x5c, 0x5c, 0x5c,
2172                 0x5e, 0x5e, 0x5e, 0x5f, 0x5f, 0x5f, 0x60, 0x60,
2173                 0x60, 0x61, 0x61, 0x61, 0x62, 0x62, 0x62, 0x63,
2174                 0x63, 0x63, 0x65, 0x65, 0x65, 0x66, 0x66, 0x66,
2175                 0x66, 0x67, 0x67, 0x67, 0x68, 0x68, 0x68, 0x69,
2176                 0x69, 0x69, 0x6a, 0x6a, 0x6a, 0x6a, 0x6c, 0x6c,
2177                 0x6c, 0x6d, 0x6d, 0x6d, 0x6d, 0x6e, 0x6e, 0x6e,
2178                 0x6f, 0x6f, 0x6f, 0x6f, 0x70, 0x70, 0x70, 0x71,
2179                 0x71, 0x71, 0x71, 0x73, 0x73, 0x73, 0x74, 0x74,
2180                 0x74, 0x74, 0x75, 0x75, 0x75, 0x75, 0x77, 0x77,
2181                 0x77, 0x78, 0x78, 0x78, 0x78, 0x79, 0x79, 0x79,
2182                 0x79, 0x7a, 0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7b,
2183                 0x7b, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d,
2184                 0x7d, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80,
2185                 0x80, 0x81, 0x81, 0x81, 0x81, 0x82, 0x82, 0x82,
2186                 0x82, 0x84, 0x84, 0x84, 0x84, 0x85, 0x85, 0x85,
2187                 0x85, 0x86, 0x86, 0x86, 0x86, 0x88, 0x88, 0x88,
2188                 0x88, 0x88, 0x89, 0x89, 0x89, 0x89, 0x8a, 0x8a,
2189                 0x8a, 0x8a, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8d,
2190                 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
2191                 0x8f, 0x8f, 0x8f, 0x8f, 0x90, 0x90, 0x90, 0x90,
2192                 0x90, 0x91, 0x91, 0x91, 0x91, 0x92, 0x92, 0x92,
2193                 0x92, 0x92, 0x93, 0x93, 0x93, 0x93, 0x94, 0x94,
2194                 0x94, 0x94, 0x94, 0x96, 0x96, 0x96, 0x96, 0x96,
2195                 0x97, 0x97, 0x97, 0x97, 0x97, 0x98, 0x98, 0x98,
2196                 0x98, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9a, 0x9a,
2197                 0x9a, 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b,
2198                 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d,
2199                 0x9d, 0x9d, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0xa0,
2200                 0xa0, 0xa0, 0xa0, 0xa0, 0xa1, 0xa1, 0xa1, 0xa1,
2201                 0xa1, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa3, 0xa3,
2202                 0xa3, 0xa3, 0xa3, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4,
2203                 0xa4, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa6, 0xa6,
2204                 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
2205                 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xab, 0xab,
2206                 0xab, 0xab, 0xab, 0xac, 0xac, 0xac, 0xac, 0xac,
2207                 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xae, 0xae,
2208                 0xae, 0xae, 0xae, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
2209                 0xaf, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb1, 0xb1,
2210                 0xb1, 0xb1, 0xb1, 0xb1, 0xb2, 0xb2, 0xb2, 0xb2,
2211                 0xb2, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb4,
2212                 0xb4, 0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6, 0xb6,
2213                 0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
2214                 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9,
2215                 0xb9, 0xb9, 0xb9, 0xba, 0xba, 0xba, 0xba, 0xba,
2216                 0xba, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbd, 0xbd,
2217                 0xbd, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbe,
2218                 0xbe, 0xbe, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
2219                 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0xc2,
2220                 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3,
2221                 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5,
2222                 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6,
2223                 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7,
2224                 0xc7, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca,
2225                 0xca, 0xca, 0xca, 0xca, 0xcb, 0xcb, 0xcb, 0xcb,
2226                 0xcb, 0xcb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
2227                 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xce, 0xce,
2228                 0xce, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf,
2229                 0xcf, 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
2230                 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3,
2231                 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4,
2232                 0xd4, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd7,
2233                 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8, 0xd8, 0xd8,
2234                 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9,
2235                 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb,
2236                 0xdb, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd, 0xdd, 0xdd,
2237                 0xdd, 0xdd, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde,
2238                 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0,
2239                 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1, 0xe1,
2240                 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe3,
2241                 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe4, 0xe4, 0xe4,
2242                 0xe4, 0xe4, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5,
2243                 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe7, 0xe7,
2244                 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
2245                 0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb, 0xeb,
2246                 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec,
2247                 0xec, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xee,
2248                 0xee, 0xee, 0xee, 0xee, 0xef, 0xef, 0xef, 0xef,
2249                 0xef, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf1,
2250                 0xf1, 0xf1, 0xf1, 0xf1, 0xf3, 0xf3, 0xf3, 0xf3,
2251                 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5, 0xf5,
2252                 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6,
2253                 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8, 0xf8,
2254                 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa,
2255                 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
2256                 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfc, 0xfc, 0xfc,
2257                 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfd,
2258                 0xfd, 0xfd, 0xfd, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
2259                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2260                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2261                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2262                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2263                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2264                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2265                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2266                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2267                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2268                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2269                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2270                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2271                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2272                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2273                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2274                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2275                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2276                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2277                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
2278            },
2279            {                                                   /* gamma 2 */
2280                {0x00, 0x01, 0x02, 0x05, 0x07, 0x08, 0x0a, 0x0c,
2281                 0x0d, 0x0e, 0x10, 0x12, 0x14, 0x15, 0x16, 0x17,
2282                 0x18, 0x1a, 0x1b, 0x1c, 0x1e, 0x1f, 0x20, 0x22,
2283                 0x23, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2b, 0x2c,
2284                 0x2d, 0x2d, 0x2f, 0x30, 0x31, 0x33, 0x34, 0x34,
2285                 0x35, 0x37, 0x38, 0x38, 0x39, 0x3a, 0x3b, 0x3b,
2286                 0x3c, 0x3d, 0x3f, 0x3f, 0x40, 0x42, 0x42, 0x43,
2287                 0x44, 0x44, 0x45, 0x47, 0x47, 0x48, 0x49, 0x49,
2288                 0x4a, 0x4b, 0x4b, 0x4c, 0x4c, 0x4d, 0x4f, 0x4f,
2289                 0x50, 0x50, 0x52, 0x53, 0x53, 0x54, 0x54, 0x55,
2290                 0x55, 0x56, 0x56, 0x58, 0x58, 0x59, 0x5a, 0x5a,
2291                 0x5b, 0x5b, 0x5c, 0x5c, 0x5e, 0x5e, 0x5f, 0x5f,
2292                 0x60, 0x60, 0x61, 0x61, 0x62, 0x62, 0x63, 0x63,
2293                 0x65, 0x65, 0x65, 0x66, 0x66, 0x67, 0x67, 0x68,
2294                 0x68, 0x69, 0x69, 0x6a, 0x6a, 0x6a, 0x6c, 0x6c,
2295                 0x6d, 0x6d, 0x6e, 0x6e, 0x6e, 0x6f, 0x6f, 0x70,
2296                 0x70, 0x70, 0x71, 0x71, 0x73, 0x73, 0x73, 0x74,
2297                 0x74, 0x75, 0x75, 0x75, 0x77, 0x77, 0x78, 0x78,
2298                 0x78, 0x79, 0x79, 0x79, 0x7a, 0x7a, 0x7b, 0x7b,
2299                 0x7b, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7f, 0x7f,
2300                 0x7f, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x82,
2301                 0x82, 0x82, 0x84, 0x84, 0x84, 0x85, 0x85, 0x85,
2302                 0x86, 0x86, 0x86, 0x88, 0x88, 0x88, 0x89, 0x89,
2303                 0x89, 0x8a, 0x8a, 0x8a, 0x8b, 0x8b, 0x8b, 0x8d,
2304                 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e, 0x8f, 0x8f,
2305                 0x8f, 0x90, 0x90, 0x90, 0x91, 0x91, 0x91, 0x91,
2306                 0x92, 0x92, 0x92, 0x93, 0x93, 0x93, 0x93, 0x94,
2307                 0x94, 0x94, 0x96, 0x96, 0x96, 0x97, 0x97, 0x97,
2308                 0x97, 0x98, 0x98, 0x98, 0x98, 0x99, 0x99, 0x99,
2309                 0x9a, 0x9a, 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9b,
2310                 0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d, 0x9d, 0x9e,
2311                 0x9e, 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa0, 0xa1,
2312                 0xa1, 0xa1, 0xa1, 0xa2, 0xa2, 0xa2, 0xa2, 0xa3,
2313                 0xa3, 0xa3, 0xa4, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5,
2314                 0xa5, 0xa5, 0xa5, 0xa6, 0xa6, 0xa6, 0xa6, 0xa8,
2315                 0xa8, 0xa8, 0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xab,
2316                 0xab, 0xab, 0xab, 0xac, 0xac, 0xac, 0xac, 0xad,
2317                 0xad, 0xad, 0xad, 0xad, 0xae, 0xae, 0xae, 0xae,
2318                 0xaf, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0, 0xb0,
2319                 0xb0, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2, 0xb2, 0xb2,
2320                 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3, 0xb4, 0xb4,
2321                 0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6, 0xb6, 0xb7,
2322                 0xb7, 0xb7, 0xb7, 0xb7, 0xb8, 0xb8, 0xb8, 0xb8,
2323                 0xb8, 0xb9, 0xb9, 0xb9, 0xb9, 0xba, 0xba, 0xba,
2324                 0xba, 0xba, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbd,
2325                 0xbd, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbe,
2326                 0xbe, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0,
2327                 0xc0, 0xc0, 0xc0, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3,
2328                 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4,
2329                 0xc4, 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6,
2330                 0xc6, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7,
2331                 0xc7, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca,
2332                 0xca, 0xca, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb,
2333                 0xcb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd,
2334                 0xcd, 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce, 0xce,
2335                 0xce, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xd0,
2336                 0xd0, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1, 0xd1, 0xd1,
2337                 0xd1, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd4, 0xd4,
2338                 0xd4, 0xd4, 0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd6,
2339                 0xd6, 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8,
2340                 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9,
2341                 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
2342                 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd,
2343                 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde, 0xde, 0xde,
2344                 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0,
2345                 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1,
2346                 0xe1, 0xe1, 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
2347                 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe4, 0xe4,
2348                 0xe4, 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5, 0xe5,
2349                 0xe5, 0xe5, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
2350                 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8,
2351                 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xe9, 0xe9,
2352                 0xe9, 0xe9, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
2353                 0xec, 0xec, 0xec, 0xec, 0xec, 0xed, 0xed, 0xed,
2354                 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee, 0xee,
2355                 0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0,
2356                 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1,
2357                 0xf1, 0xf1, 0xf1, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
2358                 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5,
2359                 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6,
2360                 0xf6, 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
2361                 0xf7, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf9,
2362                 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa, 0xfa, 0xfa,
2363                 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
2364                 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2365                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2366                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2367                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2368                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2369                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2370                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2371                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2372                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2373                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2374                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2375                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2376                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2377                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2378                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2379                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2380                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2381                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2382                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2383                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2384                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2385                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2386                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2387                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2388                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2389                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2390                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2391                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2392                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2393                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2394                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2395                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2396                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2397                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2398                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2399                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2400                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2401                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2402                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2403                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2404                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2405                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2406                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2407                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb},
2408                {0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x05,
2409                 0x07, 0x08, 0x09, 0x0a, 0x0d, 0x0e, 0x10, 0x11,
2410                 0x12, 0x14, 0x15, 0x16, 0x16, 0x17, 0x18, 0x1a,
2411                 0x1b, 0x1c, 0x1e, 0x1f, 0x20, 0x20, 0x22, 0x23,
2412                 0x25, 0x26, 0x26, 0x27, 0x28, 0x29, 0x29, 0x2b,
2413                 0x2c, 0x2d, 0x2d, 0x2f, 0x30, 0x30, 0x31, 0x33,
2414                 0x33, 0x34, 0x35, 0x35, 0x37, 0x38, 0x38, 0x39,
2415                 0x3a, 0x3a, 0x3b, 0x3b, 0x3c, 0x3d, 0x3d, 0x3f,
2416                 0x3f, 0x40, 0x42, 0x42, 0x43, 0x43, 0x44, 0x44,
2417                 0x45, 0x45, 0x47, 0x47, 0x48, 0x48, 0x49, 0x4a,
2418                 0x4a, 0x4b, 0x4b, 0x4c, 0x4c, 0x4d, 0x4d, 0x4d,
2419                 0x4f, 0x4f, 0x50, 0x50, 0x52, 0x52, 0x53, 0x53,
2420                 0x54, 0x54, 0x55, 0x55, 0x56, 0x56, 0x56, 0x58,
2421                 0x58, 0x59, 0x59, 0x5a, 0x5a, 0x5a, 0x5b, 0x5b,
2422                 0x5c, 0x5c, 0x5c, 0x5e, 0x5e, 0x5f, 0x5f, 0x5f,
2423                 0x60, 0x60, 0x61, 0x61, 0x61, 0x62, 0x62, 0x63,
2424                 0x63, 0x63, 0x65, 0x65, 0x65, 0x66, 0x66, 0x67,
2425                 0x67, 0x67, 0x68, 0x68, 0x68, 0x69, 0x69, 0x69,
2426                 0x6a, 0x6a, 0x6c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d,
2427                 0x6e, 0x6e, 0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70,
2428                 0x70, 0x71, 0x71, 0x71, 0x73, 0x73, 0x73, 0x73,
2429                 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x77, 0x77,
2430                 0x77, 0x78, 0x78, 0x78, 0x79, 0x79, 0x79, 0x79,
2431                 0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7b, 0x7b, 0x7c,
2432                 0x7c, 0x7c, 0x7d, 0x7d, 0x7d, 0x7d, 0x7f, 0x7f,
2433                 0x7f, 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81,
2434                 0x82, 0x82, 0x82, 0x82, 0x84, 0x84, 0x84, 0x84,
2435                 0x85, 0x85, 0x85, 0x85, 0x86, 0x86, 0x86, 0x88,
2436                 0x88, 0x88, 0x88, 0x89, 0x89, 0x89, 0x89, 0x8a,
2437                 0x8a, 0x8a, 0x8a, 0x8b, 0x8b, 0x8b, 0x8b, 0x8d,
2438                 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e, 0x8e, 0x8f,
2439                 0x8f, 0x8f, 0x8f, 0x90, 0x90, 0x90, 0x90, 0x91,
2440                 0x91, 0x91, 0x91, 0x91, 0x92, 0x92, 0x92, 0x92,
2441                 0x93, 0x93, 0x93, 0x93, 0x94, 0x94, 0x94, 0x94,
2442                 0x94, 0x96, 0x96, 0x96, 0x96, 0x97, 0x97, 0x97,
2443                 0x97, 0x98, 0x98, 0x98, 0x98, 0x98, 0x99, 0x99,
2444                 0x99, 0x99, 0x99, 0x9a, 0x9a, 0x9a, 0x9a, 0x9b,
2445                 0x9b, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c, 0x9c, 0x9c,
2446                 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9e, 0x9e, 0x9e,
2447                 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa1,
2448                 0xa1, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2, 0xa2, 0xa2,
2449                 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4,
2450                 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
2451                 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8,
2452                 0xa8, 0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xab,
2453                 0xab, 0xab, 0xab, 0xab, 0xac, 0xac, 0xac, 0xac,
2454                 0xac, 0xac, 0xad, 0xad, 0xad, 0xad, 0xad, 0xae,
2455                 0xae, 0xae, 0xae, 0xae, 0xaf, 0xaf, 0xaf, 0xaf,
2456                 0xaf, 0xaf, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb1,
2457                 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2, 0xb2, 0xb2,
2458                 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
2459                 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb6, 0xb6,
2460                 0xb6, 0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
2461                 0xb7, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb9,
2462                 0xb9, 0xb9, 0xb9, 0xb9, 0xba, 0xba, 0xba, 0xba,
2463                 0xba, 0xba, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
2464                 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe,
2465                 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf, 0xbf,
2466                 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
2467                 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3,
2468                 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4,
2469                 0xc4, 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5,
2470                 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7,
2471                 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc9, 0xc9, 0xc9,
2472                 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca, 0xca, 0xca,
2473                 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc,
2474                 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd,
2475                 0xcd, 0xcd, 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce,
2476                 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf,
2477                 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd1,
2478                 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3,
2479                 0xd3, 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4, 0xd4,
2480                 0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
2481                 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8,
2482                 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9,
2483                 0xd9, 0xd9, 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda,
2484                 0xda, 0xda, 0xda, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb,
2485                 0xdb, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
2486                 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xdf, 0xdf,
2487                 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0,
2488                 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1,
2489                 0xe1, 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
2490                 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe4,
2491                 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5,
2492                 0xe5, 0xe5, 0xe5, 0xe5, 0xe6, 0xe6, 0xe6, 0xe6,
2493                 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
2494                 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9,
2495                 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb, 0xeb, 0xeb,
2496                 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec,
2497                 0xec, 0xec, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
2498                 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xef,
2499                 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0,
2500                 0xf0, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
2501                 0xf1, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf4,
2502                 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5, 0xf5,
2503                 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6,
2504                 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
2505                 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9,
2506                 0xf9, 0xf9, 0xf9, 0xf9, 0xfa, 0xfa, 0xfa, 0xfa,
2507                 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfb,
2508                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2509                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2510                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2511                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2512                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2513                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2514                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2515                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2516                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2517                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2518                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2519                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2520                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2521                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2522                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2523                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2524                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2525                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2526                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2527                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2528                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2529                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2530                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2531                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2532                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2533                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2534                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2535                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb},
2536                {0x00, 0x00, 0x00, 0x01, 0x02, 0x05, 0x07, 0x08,
2537                 0x09, 0x0a, 0x0c, 0x0e, 0x10, 0x11, 0x12, 0x14,
2538                 0x15, 0x16, 0x17, 0x18, 0x1a, 0x1b, 0x1c, 0x1e,
2539                 0x1f, 0x20, 0x20, 0x22, 0x23, 0x25, 0x26, 0x27,
2540                 0x28, 0x28, 0x29, 0x2b, 0x2c, 0x2d, 0x2d, 0x2f,
2541                 0x30, 0x31, 0x31, 0x33, 0x34, 0x35, 0x35, 0x37,
2542                 0x38, 0x38, 0x39, 0x3a, 0x3a, 0x3b, 0x3c, 0x3c,
2543                 0x3d, 0x3f, 0x3f, 0x40, 0x40, 0x42, 0x43, 0x43,
2544                 0x44, 0x44, 0x45, 0x47, 0x47, 0x48, 0x48, 0x49,
2545                 0x4a, 0x4a, 0x4b, 0x4b, 0x4c, 0x4c, 0x4d, 0x4d,
2546                 0x4f, 0x4f, 0x50, 0x50, 0x52, 0x52, 0x53, 0x53,
2547                 0x54, 0x54, 0x55, 0x55, 0x56, 0x56, 0x58, 0x58,
2548                 0x59, 0x59, 0x5a, 0x5a, 0x5b, 0x5b, 0x5c, 0x5c,
2549                 0x5c, 0x5e, 0x5e, 0x5f, 0x5f, 0x60, 0x60, 0x61,
2550                 0x61, 0x61, 0x62, 0x62, 0x63, 0x63, 0x65, 0x65,
2551                 0x65, 0x66, 0x66, 0x67, 0x67, 0x67, 0x68, 0x68,
2552                 0x69, 0x69, 0x69, 0x6a, 0x6a, 0x6a, 0x6c, 0x6c,
2553                 0x6d, 0x6d, 0x6d, 0x6e, 0x6e, 0x6e, 0x6f, 0x6f,
2554                 0x70, 0x70, 0x70, 0x71, 0x71, 0x71, 0x73, 0x73,
2555                 0x73, 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x77,
2556                 0x77, 0x78, 0x78, 0x78, 0x79, 0x79, 0x79, 0x7a,
2557                 0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7b, 0x7c, 0x7c,
2558                 0x7c, 0x7d, 0x7d, 0x7d, 0x7f, 0x7f, 0x7f, 0x80,
2559                 0x80, 0x80, 0x81, 0x81, 0x81, 0x81, 0x82, 0x82,
2560                 0x82, 0x84, 0x84, 0x84, 0x85, 0x85, 0x85, 0x85,
2561                 0x86, 0x86, 0x86, 0x88, 0x88, 0x88, 0x88, 0x89,
2562                 0x89, 0x89, 0x8a, 0x8a, 0x8a, 0x8a, 0x8b, 0x8b,
2563                 0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e,
2564                 0x8e, 0x8f, 0x8f, 0x8f, 0x8f, 0x90, 0x90, 0x90,
2565                 0x91, 0x91, 0x91, 0x91, 0x92, 0x92, 0x92, 0x92,
2566                 0x93, 0x93, 0x93, 0x93, 0x94, 0x94, 0x94, 0x94,
2567                 0x96, 0x96, 0x96, 0x96, 0x97, 0x97, 0x97, 0x97,
2568                 0x98, 0x98, 0x98, 0x98, 0x99, 0x99, 0x99, 0x99,
2569                 0x9a, 0x9a, 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9b,
2570                 0x9b, 0x9c, 0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d,
2571                 0x9d, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0xa0, 0xa0,
2572                 0xa0, 0xa0, 0xa1, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2,
2573                 0xa2, 0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4,
2574                 0xa4, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5,
2575                 0xa5, 0xa6, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8,
2576                 0xa8, 0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xab,
2577                 0xab, 0xab, 0xab, 0xab, 0xac, 0xac, 0xac, 0xac,
2578                 0xad, 0xad, 0xad, 0xad, 0xad, 0xae, 0xae, 0xae,
2579                 0xae, 0xae, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xb0,
2580                 0xb0, 0xb0, 0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb1,
2581                 0xb1, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3,
2582                 0xb3, 0xb3, 0xb3, 0xb4, 0xb3, 0xb4, 0xb4, 0xb4,
2583                 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7,
2584                 0xb7, 0xb7, 0xb7, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
2585                 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xba, 0xba,
2586                 0xba, 0xba, 0xba, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
2587                 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe,
2588                 0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
2589                 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0xc2,
2590                 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3,
2591                 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5,
2592                 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6,
2593                 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7,
2594                 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca,
2595                 0xca, 0xca, 0xca, 0xca, 0xcb, 0xcb, 0xcb, 0xcb,
2596                 0xcb, 0xcb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
2597                 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xce, 0xce,
2598                 0xce, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf,
2599                 0xcf, 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
2600                 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3,
2601                 0xd3, 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4, 0xd4,
2602                 0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
2603                 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8, 0xd8,
2604                 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9, 0xd9,
2605                 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
2606                 0xda, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdd,
2607                 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde,
2608                 0xde, 0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
2609                 0xdf, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
2610                 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2,
2611                 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3,
2612                 0xe3, 0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4,
2613                 0xe4, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe6,
2614                 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7,
2615                 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
2616                 0xe8, 0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
2617                 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec,
2618                 0xec, 0xec, 0xec, 0xec, 0xec, 0xed, 0xed, 0xed,
2619                 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee, 0xee,
2620                 0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0,
2621                 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf1, 0xf1,
2622                 0xf1, 0xf1, 0xf1, 0xf1, 0xf3, 0xf3, 0xf3, 0xf3,
2623                 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4,
2624                 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6,
2625                 0xf6, 0xf6, 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7,
2626                 0xf7, 0xf7, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8,
2627                 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa,
2628                 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
2629                 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2630                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2631                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2632                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2633                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2634                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2635                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2636                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2637                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2638                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2639                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2640                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2641                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2642                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2643                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2644                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2645                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2646                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2647                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2648                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2649                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2650                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2651                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2652                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2653                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2654                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2655                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2656                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2657                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2658                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2659                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2660                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2661                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2662                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2663                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb}
2664            },
2665            {                           /* gamma 3 - from tp6810 + cx0342 */
2666                {0x08, 0x09, 0x0c, 0x0d, 0x10, 0x11, 0x14, 0x15,
2667                 0x17, 0x18, 0x1a, 0x1c, 0x1e, 0x1f, 0x20, 0x23,
2668                 0x25, 0x26, 0x27, 0x28, 0x2b, 0x2c, 0x2d, 0x2f,
2669                 0x30, 0x31, 0x33, 0x34, 0x35, 0x37, 0x38, 0x39,
2670                 0x3a, 0x3b, 0x3c, 0x3d, 0x3f, 0x40, 0x42, 0x43,
2671                 0x44, 0x45, 0x47, 0x48, 0x48, 0x49, 0x4a, 0x4b,
2672                 0x4c, 0x4d, 0x4d, 0x4f, 0x50, 0x52, 0x53, 0x53,
2673                 0x54, 0x55, 0x56, 0x56, 0x58, 0x59, 0x5a, 0x5a,
2674                 0x5b, 0x5c, 0x5c, 0x5e, 0x5f, 0x5f, 0x60, 0x61,
2675                 0x61, 0x62, 0x63, 0x63, 0x65, 0x66, 0x66, 0x67,
2676                 0x68, 0x68, 0x69, 0x69, 0x6a, 0x6c, 0x6c, 0x6d,
2677                 0x6d, 0x6e, 0x6f, 0x6f, 0x70, 0x70, 0x71, 0x73,
2678                 0x73, 0x74, 0x74, 0x75, 0x75, 0x77, 0x77, 0x78,
2679                 0x78, 0x79, 0x7a, 0x7a, 0x7b, 0x7b, 0x7c, 0x7c,
2680                 0x7d, 0x7d, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x81,
2681                 0x82, 0x82, 0x84, 0x84, 0x85, 0x85, 0x86, 0x86,
2682                 0x86, 0x88, 0x88, 0x89, 0x89, 0x8a, 0x8a, 0x8b,
2683                 0x8b, 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8f, 0x8f,
2684                 0x90, 0x90, 0x91, 0x91, 0x91, 0x92, 0x92, 0x93,
2685                 0x93, 0x93, 0x94, 0x94, 0x96, 0x96, 0x97, 0x97,
2686                 0x97, 0x98, 0x98, 0x99, 0x99, 0x99, 0x9a, 0x9a,
2687                 0x9a, 0x9b, 0x9b, 0x9c, 0x9c, 0x9c, 0x9d, 0x9d,
2688                 0x9e, 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa1, 0xa1,
2689                 0xa2, 0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4,
2690                 0xa4, 0xa5, 0xa5, 0xa5, 0xa6, 0xa6, 0xa8, 0xa8,
2691                 0xa8, 0xa9, 0xa9, 0xa9, 0xab, 0xab, 0xab, 0xac,
2692                 0xac, 0xac, 0xad, 0xad, 0xad, 0xae, 0xae, 0xae,
2693                 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0, 0xb1, 0xb1,
2694                 0xb1, 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3,
2695                 0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7,
2696                 0xb7, 0xb8, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9,
2697                 0xba, 0xba, 0xba, 0xbc, 0xbc, 0xbc, 0xbc, 0xbd,
2698                 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf,
2699                 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0xc2, 0xc2,
2700                 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc5,
2701                 0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7,
2702                 0xc7, 0xc7, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca,
2703                 0xca, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc,
2704                 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xce, 0xce, 0xce,
2705                 0xce, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xd0, 0xd0,
2706                 0xd0, 0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3, 0xd3,
2707                 0xd3, 0xd4, 0xd4, 0xd4, 0xd4, 0xd6, 0xd6, 0xd6,
2708                 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8, 0xd8, 0xd8,
2709                 0xd8, 0xd9, 0xd9, 0xd9, 0xd9, 0xda, 0xda, 0xda,
2710                 0xda, 0xda, 0xdb, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd,
2711                 0xdd, 0xdd, 0xde, 0xde, 0xde, 0xde, 0xdf, 0xdf,
2712                 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1,
2713                 0xe1, 0xe1, 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
2714                 0xe3, 0xe3, 0xe3, 0xe3, 0xe4, 0xe4, 0xe4, 0xe4,
2715                 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe6, 0xe6, 0xe6,
2716                 0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8,
2717                 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb,
2718                 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec,
2719                 0xed, 0xed, 0xed, 0xed, 0xed, 0xee, 0xee, 0xee,
2720                 0xee, 0xee, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0,
2721                 0xf0, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
2722                 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4,
2723                 0xf4, 0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6,
2724                 0xf6, 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
2725                 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9,
2726                 0xf9, 0xf9, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
2727                 0xfa, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb,
2728                 0xfb, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc,
2729                 0xfc, 0xfc, 0xfc, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd,
2730                 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff,
2731                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2732                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2733                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2734                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2735                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2736                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2737                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2738                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2739                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2740                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2741                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2742                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2743                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2744                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2745                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2746                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2747                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2748                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2749                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2750                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2751                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2752                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2753                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2754                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2755                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2756                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2757                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2758                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2759                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2760                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2761                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2762                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2763                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2764                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2765                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2766                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2767                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2768                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2769                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2770                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2771                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2772                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2773                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2774                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2775                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2776                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2777                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2778                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2779                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2780                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2781                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2782                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2783                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2784                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2785                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2786                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2787                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2788                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2789                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2790                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2791                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2792                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2793                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
2794                {0x03, 0x05, 0x07, 0x09, 0x0a, 0x0c, 0x0d, 0x10,
2795                 0x11, 0x12, 0x14, 0x15, 0x17, 0x18, 0x1a, 0x1b,
2796                 0x1c, 0x1e, 0x1f, 0x20, 0x22, 0x23, 0x25, 0x26,
2797                 0x27, 0x28, 0x29, 0x2b, 0x2c, 0x2c, 0x2d, 0x2f,
2798                 0x30, 0x31, 0x33, 0x33, 0x34, 0x35, 0x37, 0x38,
2799                 0x38, 0x39, 0x3a, 0x3b, 0x3b, 0x3c, 0x3d, 0x3f,
2800                 0x3f, 0x40, 0x42, 0x42, 0x43, 0x44, 0x45, 0x45,
2801                 0x47, 0x47, 0x48, 0x49, 0x49, 0x4a, 0x4b, 0x4b,
2802                 0x4c, 0x4d, 0x4d, 0x4f, 0x4f, 0x50, 0x52, 0x52,
2803                 0x53, 0x53, 0x54, 0x54, 0x55, 0x55, 0x56, 0x58,
2804                 0x58, 0x59, 0x59, 0x5a, 0x5a, 0x5b, 0x5b, 0x5c,
2805                 0x5c, 0x5e, 0x5e, 0x5f, 0x5f, 0x60, 0x60, 0x61,
2806                 0x61, 0x62, 0x62, 0x63, 0x63, 0x65, 0x65, 0x66,
2807                 0x66, 0x67, 0x67, 0x67, 0x68, 0x68, 0x69, 0x69,
2808                 0x6a, 0x6a, 0x6c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6e,
2809                 0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70, 0x71, 0x71,
2810                 0x71, 0x73, 0x73, 0x74, 0x74, 0x74, 0x75, 0x75,
2811                 0x77, 0x77, 0x77, 0x78, 0x78, 0x79, 0x79, 0x79,
2812                 0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7b, 0x7c, 0x7c,
2813                 0x7d, 0x7d, 0x7d, 0x7f, 0x7f, 0x7f, 0x80, 0x80,
2814                 0x80, 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x84,
2815                 0x84, 0x84, 0x85, 0x85, 0x85, 0x86, 0x86, 0x86,
2816                 0x88, 0x88, 0x88, 0x89, 0x89, 0x89, 0x8a, 0x8a,
2817                 0x8a, 0x8b, 0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8e,
2818                 0x8e, 0x8e, 0x8e, 0x8f, 0x8f, 0x8f, 0x90, 0x90,
2819                 0x90, 0x91, 0x91, 0x91, 0x91, 0x92, 0x92, 0x92,
2820                 0x93, 0x93, 0x93, 0x93, 0x94, 0x94, 0x94, 0x96,
2821                 0x96, 0x96, 0x96, 0x97, 0x97, 0x97, 0x98, 0x98,
2822                 0x98, 0x98, 0x99, 0x99, 0x99, 0x9a, 0x9a, 0x9a,
2823                 0x9a, 0x9b, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c, 0x9c,
2824                 0x9c, 0x9d, 0x9d, 0x9d, 0x9e, 0x9e, 0x9e, 0x9e,
2825                 0xa0, 0xa0, 0xa0, 0xa0, 0xa1, 0xa1, 0xa1, 0xa1,
2826                 0xa2, 0xa2, 0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa3,
2827                 0xa4, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5,
2828                 0xa6, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8, 0xa8,
2829                 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xab, 0xab, 0xab,
2830                 0xab, 0xac, 0xac, 0xac, 0xac, 0xad, 0xad, 0xad,
2831                 0xad, 0xad, 0xae, 0xae, 0xae, 0xae, 0xaf, 0xaf,
2832                 0xaf, 0xaf, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb1,
2833                 0xb1, 0xb1, 0xb1, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
2834                 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb4, 0xb4, 0xb4,
2835                 0xb4, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7,
2836                 0xb7, 0xb7, 0xb7, 0xb8, 0xb8, 0xb8, 0xb8, 0xb9,
2837                 0xb9, 0xb9, 0xb9, 0xb9, 0xba, 0xba, 0xba, 0xba,
2838                 0xba, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbd, 0xbd,
2839                 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
2840                 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0,
2841                 0xc0, 0xc0, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3,
2842                 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4,
2843                 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc6,
2844                 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7,
2845                 0xc7, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca,
2846                 0xca, 0xca, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb,
2847                 0xcb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd,
2848                 0xcd, 0xcd, 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce,
2849                 0xce, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0,
2850                 0xd0, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1, 0xd1, 0xd1,
2851                 0xd1, 0xd1, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd4,
2852                 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd6, 0xd6, 0xd6,
2853                 0xd6, 0xd6, 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7,
2854                 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9,
2855                 0xd9, 0xd9, 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda,
2856                 0xda, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdd,
2857                 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde,
2858                 0xde, 0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
2859                 0xdf, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1,
2860                 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2, 0xe2,
2861                 0xe2, 0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
2862                 0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe5,
2863                 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe6, 0xe6, 0xe6,
2864                 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
2865                 0xe7, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9,
2866                 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb, 0xeb, 0xeb,
2867                 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec, 0xec,
2868                 0xec, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xee,
2869                 0xee, 0xee, 0xee, 0xee, 0xee, 0xef, 0xef, 0xef,
2870                 0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
2871                 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3,
2872                 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4,
2873                 0xf4, 0xf4, 0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5,
2874                 0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6,
2875                 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8,
2876                 0xf8, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9,
2877                 0xf9, 0xf9, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
2878                 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb,
2879                 0xfb, 0xfb, 0xfb, 0xfb, 0xfc, 0xfc, 0xfc, 0xfc,
2880                 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc,
2881                 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfe, 0xfe,
2882                 0xfe, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff,
2883                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2884                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2885                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2886                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2887                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2888                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2889                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2890                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2891                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2892                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2893                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2894                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2895                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2896                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2897                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2898                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2899                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2900                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2901                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2902                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2903                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2904                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2905                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2906                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2907                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2908                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2909                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2910                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2911                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2912                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2913                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2914                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2915                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2916                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2917                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2918                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2919                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2920                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2921                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
2922                {0x07, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14,
2923                 0x16, 0x17, 0x18, 0x1b, 0x1c, 0x1e, 0x1f, 0x20,
2924                 0x23, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2b, 0x2d,
2925                 0x2f, 0x30, 0x31, 0x33, 0x34, 0x35, 0x37, 0x38,
2926                 0x39, 0x3a, 0x3b, 0x3b, 0x3c, 0x3d, 0x3f, 0x40,
2927                 0x42, 0x43, 0x44, 0x44, 0x45, 0x47, 0x48, 0x49,
2928                 0x4a, 0x4a, 0x4b, 0x4c, 0x4d, 0x4d, 0x4f, 0x50,
2929                 0x52, 0x52, 0x53, 0x54, 0x55, 0x55, 0x56, 0x58,
2930                 0x58, 0x59, 0x5a, 0x5b, 0x5b, 0x5c, 0x5e, 0x5e,
2931                 0x5f, 0x5f, 0x60, 0x61, 0x61, 0x62, 0x63, 0x63,
2932                 0x65, 0x65, 0x66, 0x67, 0x67, 0x68, 0x68, 0x69,
2933                 0x6a, 0x6a, 0x6c, 0x6c, 0x6d, 0x6d, 0x6e, 0x6e,
2934                 0x6f, 0x70, 0x70, 0x71, 0x71, 0x73, 0x73, 0x74,
2935                 0x74, 0x75, 0x75, 0x77, 0x77, 0x78, 0x78, 0x79,
2936                 0x79, 0x7a, 0x7a, 0x7b, 0x7b, 0x7c, 0x7c, 0x7d,
2937                 0x7d, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x81, 0x81,
2938                 0x82, 0x82, 0x84, 0x84, 0x85, 0x85, 0x86, 0x86,
2939                 0x88, 0x88, 0x88, 0x89, 0x89, 0x8a, 0x8a, 0x8b,
2940                 0x8b, 0x8b, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e, 0x8f,
2941                 0x8f, 0x90, 0x90, 0x90, 0x91, 0x91, 0x92, 0x92,
2942                 0x92, 0x93, 0x93, 0x94, 0x94, 0x94, 0x96, 0x96,
2943                 0x96, 0x97, 0x97, 0x98, 0x98, 0x98, 0x99, 0x99,
2944                 0x99, 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c,
2945                 0x9c, 0x9d, 0x9d, 0x9d, 0x9e, 0x9e, 0x9e, 0xa0,
2946                 0xa0, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2, 0xa2, 0xa3,
2947                 0xa3, 0xa3, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5,
2948                 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8, 0xa8, 0xa9,
2949                 0xa9, 0xa9, 0xab, 0xab, 0xab, 0xac, 0xac, 0xac,
2950                 0xad, 0xad, 0xad, 0xae, 0xae, 0xae, 0xaf, 0xaf,
2951                 0xaf, 0xaf, 0xb0, 0xb0, 0xb0, 0xb1, 0xb1, 0xb1,
2952                 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb4,
2953                 0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7,
2954                 0xb7, 0xb7, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9,
2955                 0xb9, 0xba, 0xba, 0xba, 0xbc, 0xbc, 0xbc, 0xbc,
2956                 0xbd, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbf,
2957                 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2,
2958                 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3, 0xc4,
2959                 0xc4, 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc6,
2960                 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc9, 0xc9,
2961                 0xc9, 0xc9, 0xca, 0xca, 0xca, 0xca, 0xcb, 0xcb,
2962                 0xcb, 0xcb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd,
2963                 0xcd, 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce, 0xcf,
2964                 0xcf, 0xcf, 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd1,
2965                 0xd1, 0xd1, 0xd1, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3,
2966                 0xd4, 0xd4, 0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd6,
2967                 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8, 0xd8, 0xd8,
2968                 0xd8, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xda, 0xda,
2969                 0xda, 0xda, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdd,
2970                 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde, 0xde, 0xde,
2971                 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0,
2972                 0xe0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2,
2973                 0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe4,
2974                 0xe4, 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5, 0xe5,
2975                 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7,
2976                 0xe7, 0xe7, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9,
2977                 0xe9, 0xe9, 0xe9, 0xe9, 0xeb, 0xeb, 0xeb, 0xeb,
2978                 0xeb, 0xec, 0xec, 0xec, 0xec, 0xec, 0xed, 0xed,
2979                 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee, 0xee,
2980                 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0,
2981                 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3,
2982                 0xf3, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4,
2983                 0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6,
2984                 0xf6, 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
2985                 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9,
2986                 0xf9, 0xf9, 0xf9, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
2987                 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb,
2988                 0xfb, 0xfb, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc,
2989                 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfd, 0xfd, 0xfd,
2990                 0xfd, 0xfd, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xff,
2991                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2992                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2993                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2994                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2995                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2996                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2997                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2998                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2999                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3000                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3001                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3002                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3003                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3004                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3005                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3006                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3007                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3008                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3009                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3010                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3011                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3012                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3013                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3014                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3015                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3016                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3017                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3018                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3019                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3020                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3021                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3022                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3023                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3024                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3025                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3026                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3027                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3028                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3029                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3030                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3031                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3032                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3033                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3034                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3035                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3036                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3037                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3038                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3039                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3040                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3041                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3042                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3043                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3044                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3045                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3046                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3047                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3048                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3049                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
3050            },
3051            {                           /* gamma 4 - from tp6800 + soi763a */
3052                {0x11, 0x14, 0x15, 0x17, 0x1a, 0x1b, 0x1e, 0x1f,
3053                 0x22, 0x23, 0x25, 0x27, 0x28, 0x2b, 0x2c, 0x2d,
3054                 0x2f, 0x31, 0x33, 0x34, 0x35, 0x38, 0x39, 0x3a,
3055                 0x3b, 0x3c, 0x3d, 0x40, 0x42, 0x43, 0x44, 0x45,
3056                 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4f,
3057                 0x50, 0x52, 0x53, 0x53, 0x54, 0x55, 0x56, 0x58,
3058                 0x59, 0x5a, 0x5b, 0x5b, 0x5c, 0x5e, 0x5f, 0x60,
3059                 0x61, 0x61, 0x62, 0x63, 0x65, 0x65, 0x66, 0x67,
3060                 0x68, 0x68, 0x69, 0x6a, 0x6c, 0x6c, 0x6d, 0x6e,
3061                 0x6f, 0x6f, 0x70, 0x71, 0x71, 0x73, 0x74, 0x74,
3062                 0x75, 0x77, 0x77, 0x78, 0x79, 0x79, 0x7a, 0x7a,
3063                 0x7b, 0x7c, 0x7c, 0x7d, 0x7f, 0x7f, 0x80, 0x80,
3064                 0x81, 0x81, 0x82, 0x84, 0x84, 0x85, 0x85, 0x86,
3065                 0x86, 0x88, 0x89, 0x89, 0x8a, 0x8a, 0x8b, 0x8b,
3066                 0x8d, 0x8d, 0x8e, 0x8e, 0x8f, 0x90, 0x90, 0x91,
3067                 0x91, 0x92, 0x92, 0x93, 0x93, 0x94, 0x94, 0x96,
3068                 0x96, 0x97, 0x97, 0x98, 0x98, 0x98, 0x99, 0x99,
3069                 0x9a, 0x9a, 0x9b, 0x9b, 0x9c, 0x9c, 0x9d, 0x9d,
3070                 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa1, 0xa1, 0xa2,
3071                 0xa2, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4, 0xa5, 0xa5,
3072                 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa9, 0xa9, 0xab,
3073                 0xab, 0xab, 0xac, 0xac, 0xad, 0xad, 0xad, 0xae,
3074                 0xae, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb1, 0xb1,
3075                 0xb1, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb4, 0xb4,
3076                 0xb4, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7, 0xb8, 0xb8,
3077                 0xb8, 0xb9, 0xb9, 0xb9, 0xba, 0xba, 0xba, 0xbc,
3078                 0xbc, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbf,
3079                 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc2, 0xc2, 0xc2,
3080                 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5,
3081                 0xc5, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc9,
3082                 0xc9, 0xc9, 0xca, 0xca, 0xca, 0xcb, 0xcb, 0xcb,
3083                 0xcb, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd, 0xcd, 0xce,
3084                 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xd0,
3085                 0xd0, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3, 0xd3, 0xd3,
3086                 0xd4, 0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd7, 0xd7,
3087                 0xd7, 0xd7, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9,
3088                 0xd9, 0xda, 0xda, 0xda, 0xdb, 0xdb, 0xdb, 0xdb,
3089                 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde, 0xde, 0xdf,
3090                 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1,
3091                 0xe1, 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe3,
3092                 0xe3, 0xe3, 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5,
3093                 0xe5, 0xe6, 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7,
3094                 0xe7, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xe9,
3095                 0xe9, 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec,
3096                 0xec, 0xed, 0xed, 0xed, 0xed, 0xee, 0xee, 0xee,
3097                 0xee, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0,
3098                 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3, 0xf3, 0xf3,
3099                 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5, 0xf5, 0xf5,
3100                 0xf5, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf7, 0xf7,
3101                 0xf7, 0xf7, 0xf8, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9,
3102                 0xf9, 0xf9, 0xfa, 0xf9, 0xfa, 0xfa, 0xfa, 0xfa,
3103                 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3104                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3105                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3106                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3107                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3108                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3109                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3110                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3111                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3112                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3113                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3114                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3115                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3116                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3117                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3118                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3119                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3120                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3121                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3122                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3123                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3124                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3125                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3126                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3127                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3128                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3129                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3130                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3131                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3132                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3133                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3134                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3135                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3136                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3137                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3138                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3139                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3140                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3141                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3142                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3143                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3144                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3145                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3146                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3147                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3148                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3149                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3150                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3151                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3152                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3153                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3154                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3155                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3156                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3157                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3158                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3159                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3160                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3161                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3162                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3163                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3164                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3165                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3166                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3167                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3168                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3169                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3170                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3171                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3172                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3173                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3174                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3175                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3176                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3177                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3178                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3179                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb},
3180                {0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x11, 0x14, 0x15,
3181                 0x16, 0x17, 0x1a, 0x1b, 0x1c, 0x1e, 0x1f, 0x20,
3182                 0x23, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2b, 0x2c,
3183                 0x2d, 0x2f, 0x30, 0x31, 0x33, 0x34, 0x34, 0x35,
3184                 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3c, 0x3d,
3185                 0x3f, 0x40, 0x42, 0x42, 0x43, 0x44, 0x45, 0x45,
3186                 0x47, 0x48, 0x49, 0x49, 0x4a, 0x4b, 0x4b, 0x4c,
3187                 0x4d, 0x4f, 0x4f, 0x50, 0x52, 0x52, 0x53, 0x54,
3188                 0x54, 0x55, 0x55, 0x56, 0x58, 0x58, 0x59, 0x5a,
3189                 0x5a, 0x5b, 0x5b, 0x5c, 0x5e, 0x5e, 0x5f, 0x5f,
3190                 0x60, 0x60, 0x61, 0x61, 0x62, 0x63, 0x63, 0x65,
3191                 0x65, 0x66, 0x66, 0x67, 0x67, 0x68, 0x68, 0x69,
3192                 0x69, 0x6a, 0x6a, 0x6c, 0x6c, 0x6d, 0x6d, 0x6e,
3193                 0x6e, 0x6f, 0x6f, 0x70, 0x70, 0x71, 0x71, 0x73,
3194                 0x73, 0x74, 0x74, 0x74, 0x75, 0x75, 0x77, 0x77,
3195                 0x78, 0x78, 0x79, 0x79, 0x79, 0x7a, 0x7a, 0x7b,
3196                 0x7b, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7f, 0x7f,
3197                 0x7f, 0x80, 0x80, 0x81, 0x81, 0x81, 0x82, 0x82,
3198                 0x84, 0x84, 0x84, 0x85, 0x85, 0x86, 0x86, 0x86,
3199                 0x88, 0x88, 0x88, 0x89, 0x89, 0x8a, 0x8a, 0x8a,
3200                 0x8b, 0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8e, 0x8e,
3201                 0x8e, 0x8f, 0x8f, 0x90, 0x90, 0x90, 0x91, 0x91,
3202                 0x91, 0x92, 0x92, 0x92, 0x93, 0x93, 0x93, 0x94,
3203                 0x94, 0x94, 0x96, 0x96, 0x96, 0x97, 0x97, 0x97,
3204                 0x98, 0x98, 0x98, 0x98, 0x99, 0x99, 0x99, 0x9a,
3205                 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c, 0x9c,
3206                 0x9c, 0x9d, 0x9d, 0x9d, 0x9e, 0x9e, 0x9e, 0xa0,
3207                 0xa0, 0xa0, 0xa0, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2,
3208                 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4, 0xa4,
3209                 0xa5, 0xa5, 0xa5, 0xa5, 0xa6, 0xa6, 0xa6, 0xa6,
3210                 0xa8, 0xa8, 0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xab,
3211                 0xaa, 0xab, 0xab, 0xac, 0xac, 0xac, 0xad, 0xad,
3212                 0xad, 0xad, 0xae, 0xae, 0xae, 0xae, 0xaf, 0xaf,
3213                 0xaf, 0xaf, 0xb0, 0xb0, 0xb0, 0xb0, 0xb1, 0xb1,
3214                 0xb1, 0xb1, 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3,
3215                 0xb3, 0xb3, 0xb4, 0xb4, 0xb4, 0xb4, 0xb6, 0xb6,
3216                 0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7, 0xb8, 0xb8,
3217                 0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xb9, 0xba, 0xba,
3218                 0xba, 0xba, 0xba, 0xbc, 0xbc, 0xbc, 0xbc, 0xbd,
3219                 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
3220                 0xbf, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0,
3221                 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3,
3222                 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5,
3223                 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7,
3224                 0xc7, 0xc7, 0xc7, 0xc7, 0xc9, 0xc9, 0xc9, 0xc9,
3225                 0xca, 0xca, 0xca, 0xca, 0xca, 0xcb, 0xcb, 0xcb,
3226                 0xcb, 0xcb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd,
3227                 0xcd, 0xcd, 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce,
3228                 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xd0, 0xd0,
3229                 0xd0, 0xd0, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd3,
3230                 0xd3, 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4, 0xd4,
3231                 0xd4, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd7, 0xd7,
3232                 0xd7, 0xd7, 0xd7, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8,
3233                 0xd8, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xda, 0xda,
3234                 0xda, 0xda, 0xda, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb,
3235                 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde,
3236                 0xde, 0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
3237                 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1,
3238                 0xe1, 0xe1, 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
3239                 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe4, 0xe4,
3240                 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5,
3241                 0xe5, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe7, 0xe7,
3242                 0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe8, 0xe8,
3243                 0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb,
3244                 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec,
3245                 0xec, 0xec, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3246                 0xee, 0xee, 0xee, 0xee, 0xee, 0xef, 0xef, 0xef,
3247                 0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3248                 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3,
3249                 0xf3, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4,
3250                 0xf4, 0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5,
3251                 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf7, 0xf7,
3252                 0xf7, 0xf7, 0xf7, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8,
3253                 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa,
3254                 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
3255                 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3256                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3257                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3258                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3259                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3260                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3261                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3262                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3263                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3264                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3265                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3266                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3267                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3268                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3269                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3270                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3271                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3272                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3273                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3274                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3275                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3276                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3277                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3278                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3279                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3280                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3281                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3282                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3283                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3284                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3285                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3286                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3287                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3288                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3289                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3290                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3291                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3292                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3293                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3294                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3295                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3296                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3297                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3298                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3299                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3300                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3301                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3302                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3303                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3304                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3305                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3306                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3307                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb},
3308                {0x0d, 0x10, 0x11, 0x14, 0x15, 0x17, 0x18, 0x1b,
3309                 0x1c, 0x1e, 0x20, 0x22, 0x23, 0x26, 0x27, 0x28,
3310                 0x29, 0x2b, 0x2d, 0x2f, 0x30, 0x31, 0x33, 0x34,
3311                 0x35, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d,
3312                 0x3f, 0x40, 0x42, 0x43, 0x44, 0x45, 0x47, 0x48,
3313                 0x49, 0x4a, 0x4b, 0x4b, 0x4c, 0x4d, 0x4f, 0x50,
3314                 0x52, 0x52, 0x53, 0x54, 0x55, 0x56, 0x56, 0x58,
3315                 0x59, 0x5a, 0x5a, 0x5b, 0x5c, 0x5e, 0x5e, 0x5f,
3316                 0x60, 0x60, 0x61, 0x62, 0x62, 0x63, 0x65, 0x65,
3317                 0x66, 0x67, 0x67, 0x68, 0x69, 0x69, 0x6a, 0x6c,
3318                 0x6c, 0x6d, 0x6d, 0x6e, 0x6f, 0x6f, 0x70, 0x70,
3319                 0x71, 0x73, 0x73, 0x74, 0x74, 0x75, 0x75, 0x77,
3320                 0x78, 0x78, 0x79, 0x79, 0x7a, 0x7a, 0x7b, 0x7b,
3321                 0x7c, 0x7c, 0x7d, 0x7d, 0x7f, 0x7f, 0x80, 0x80,
3322                 0x81, 0x81, 0x82, 0x82, 0x84, 0x84, 0x85, 0x85,
3323                 0x86, 0x86, 0x88, 0x88, 0x89, 0x89, 0x8a, 0x8a,
3324                 0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8f,
3325                 0x8f, 0x90, 0x90, 0x91, 0x91, 0x91, 0x92, 0x92,
3326                 0x93, 0x93, 0x94, 0x94, 0x94, 0x96, 0x96, 0x97,
3327                 0x97, 0x98, 0x98, 0x98, 0x99, 0x99, 0x9a, 0x9a,
3328                 0x9a, 0x9b, 0x9b, 0x9c, 0x9c, 0x9c, 0x9d, 0x9d,
3329                 0x9d, 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa1, 0xa1,
3330                 0xa1, 0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4,
3331                 0xa4, 0xa5, 0xa5, 0xa5, 0xa6, 0xa6, 0xa8, 0xa8,
3332                 0xa8, 0xa9, 0xa9, 0xa9, 0xab, 0xab, 0xab, 0xac,
3333                 0xac, 0xac, 0xad, 0xad, 0xad, 0xae, 0xae, 0xae,
3334                 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0, 0xb1, 0xb1,
3335                 0xb1, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb4,
3336                 0xb4, 0xb4, 0xb6, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7,
3337                 0xb7, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xba,
3338                 0xba, 0xba, 0xba, 0xbc, 0xbc, 0xbc, 0xbd, 0xbd,
3339                 0xbd, 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf,
3340                 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0xc2, 0xc2, 0xc3,
3341                 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5,
3342                 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7,
3343                 0xc7, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca,
3344                 0xca, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc, 0xcc, 0xcc,
3345                 0xcd, 0xcd, 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce,
3346                 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xd0, 0xd0, 0xd0,
3347                 0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3, 0xd3, 0xd3,
3348                 0xd4, 0xd4, 0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd6,
3349                 0xd7, 0xd7, 0xd7, 0xd7, 0xd8, 0xd8, 0xd8, 0xd8,
3350                 0xd9, 0xd9, 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda,
3351                 0xdb, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd, 0xdd, 0xdd,
3352                 0xdd, 0xde, 0xde, 0xde, 0xde, 0xdf, 0xdf, 0xdf,
3353                 0xdf, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1,
3354                 0xe1, 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe3,
3355                 0xe3, 0xe3, 0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe5,
3356                 0xe5, 0xe5, 0xe5, 0xe5, 0xe6, 0xe6, 0xe6, 0xe6,
3357                 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe8,
3358                 0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb, 0xeb,
3359                 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec, 0xec, 0xed,
3360                 0xed, 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee,
3361                 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0,
3362                 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3,
3363                 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4,
3364                 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6,
3365                 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8,
3366                 0xf8, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9,
3367                 0xf9, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
3368                 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3369                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3370                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3371                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3372                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3373                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3374                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3375                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3376                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3377                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3378                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3379                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3380                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3381                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3382                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3383                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3384                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3385                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3386                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3387                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3388                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3389                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3390                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3391                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3392                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3393                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3394                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3395                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3396                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3397                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3398                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3399                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3400                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3401                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3402                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3403                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3404                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3405                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3406                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3407                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3408                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3409                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3410                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3411                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3412                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3413                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3414                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3415                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3416                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3417                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3418                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3419                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3420                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3421                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3422                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3423                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3424                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3425                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3426                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3427                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3428                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3429                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3430                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3431                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3432                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3433                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3434                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3435                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb}
3436            },
3437            {                                                   /* gamma 5 */
3438                {0x16, 0x18, 0x19, 0x1b, 0x1d, 0x1e, 0x20, 0x21,
3439                 0x23, 0x24, 0x25, 0x27, 0x28, 0x2a, 0x2b, 0x2c,
3440                 0x2d, 0x2f, 0x30, 0x31, 0x32, 0x34, 0x35, 0x36,
3441                 0x37, 0x38, 0x39, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
3442                 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
3443                 0x48, 0x49, 0x4a, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e,
3444                 0x4f, 0x50, 0x51, 0x51, 0x52, 0x53, 0x54, 0x55,
3445                 0x56, 0x56, 0x57, 0x58, 0x59, 0x59, 0x5a, 0x5b,
3446                 0x5c, 0x5c, 0x5d, 0x5e, 0x5f, 0x5f, 0x60, 0x61,
3447                 0x62, 0x62, 0x63, 0x64, 0x64, 0x65, 0x66, 0x66,
3448                 0x67, 0x68, 0x68, 0x69, 0x6a, 0x6a, 0x6b, 0x6b,
3449                 0x6c, 0x6d, 0x6d, 0x6e, 0x6f, 0x6f, 0x70, 0x70,
3450                 0x71, 0x71, 0x72, 0x73, 0x73, 0x74, 0x74, 0x75,
3451                 0x75, 0x76, 0x77, 0x77, 0x78, 0x78, 0x79, 0x79,
3452                 0x7a, 0x7a, 0x7b, 0x7b, 0x7c, 0x7d, 0x7d, 0x7e,
3453                 0x7e, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x81, 0x82,
3454                 0x82, 0x83, 0x83, 0x84, 0x84, 0x84, 0x85, 0x85,
3455                 0x86, 0x86, 0x87, 0x87, 0x88, 0x88, 0x89, 0x89,
3456                 0x8a, 0x8a, 0x8b, 0x8b, 0x8b, 0x8c, 0x8c, 0x8d,
3457                 0x8d, 0x8e, 0x8e, 0x8e, 0x8f, 0x8f, 0x90, 0x90,
3458                 0x91, 0x91, 0x91, 0x92, 0x92, 0x93, 0x93, 0x94,
3459                 0x94, 0x94, 0x95, 0x95, 0x96, 0x96, 0x96, 0x97,
3460                 0x97, 0x98, 0x98, 0x98, 0x99, 0x99, 0x9a, 0x9a,
3461                 0x9a, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c, 0x9d, 0x9d,
3462                 0x9d, 0x9e, 0x9e, 0x9e, 0x9f, 0x9f, 0xa0, 0xa0,
3463                 0xa0, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2, 0xa2, 0xa3,
3464                 0xa3, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa6,
3465                 0xa6, 0xa6, 0xa7, 0xa7, 0xa7, 0xa8, 0xa8, 0xa8,
3466                 0xa9, 0xa9, 0xa9, 0xaa, 0xaa, 0xaa, 0xab, 0xab,
3467                 0xab, 0xac, 0xac, 0xac, 0xad, 0xad, 0xad, 0xae,
3468                 0xae, 0xae, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0,
3469                 0xb0, 0xb1, 0xb1, 0xb1, 0xb2, 0xb2, 0xb2, 0xb3,
3470                 0xb3, 0xb3, 0xb4, 0xb4, 0xb4, 0xb4, 0xb5, 0xb5,
3471                 0xb5, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7,
3472                 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xba, 0xba,
3473                 0xba, 0xba, 0xbb, 0xbb, 0xbb, 0xbc, 0xbc, 0xbc,
3474                 0xbc, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbe,
3475                 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1,
3476                 0xc1, 0xc1, 0xc1, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3,
3477                 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5,
3478                 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7,
3479                 0xc7, 0xc8, 0xc8, 0xc8, 0xc8, 0xc9, 0xc9, 0xc9,
3480                 0xc9, 0xca, 0xca, 0xca, 0xca, 0xcb, 0xcb, 0xcb,
3481                 0xcb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd, 0xcd,
3482                 0xcd, 0xce, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xcf,
3483                 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1, 0xd1,
3484                 0xd1, 0xd2, 0xd2, 0xd2, 0xd2, 0xd3, 0xd3, 0xd3,
3485                 0xd3, 0xd4, 0xd4, 0xd4, 0xd4, 0xd5, 0xd5, 0xd5,
3486                 0xd5, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd7, 0xd7,
3487                 0xd7, 0xd7, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9,
3488                 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb,
3489                 0xdb, 0xdb, 0xdb, 0xdc, 0xdc, 0xdc, 0xdc, 0xdd,
3490                 0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde, 0xde,
3491                 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0,
3492                 0xe0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2,
3493                 0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe4,
3494                 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5,
3495                 0xe6, 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe7,
3496                 0xe7, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9,
3497                 0xe9, 0xe9, 0xea, 0xea, 0xea, 0xea, 0xea, 0xeb,
3498                 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec,
3499                 0xed, 0xed, 0xed, 0xed, 0xed, 0xee, 0xee, 0xee,
3500                 0xee, 0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0,
3501                 0xf0, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3502                 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf3, 0xf3, 0xf3,
3503                 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5,
3504                 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6,
3505                 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8, 0xf8,
3506                 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa,
3507                 0xfa, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb,
3508                 0xfb, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfd, 0xfd,
3509                 0xfd, 0xfd, 0xfd, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
3510                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3511                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3512                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3513                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3514                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3515                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3516                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3517                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3518                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3519                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3520                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3521                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3522                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3523                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3524                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3525                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3526                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3527                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3528                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3529                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3530                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3531                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3532                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3533                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3534                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3535                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3536                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3537                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3538                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3539                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3540                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3541                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3542                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3543                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3544                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3545                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3546                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3547                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3548                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3549                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3550                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3551                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3552                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3553                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3554                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3555                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3556                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3557                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3558                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3559                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3560                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3561                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3562                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3563                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3564                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3565                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
3566                {0x0f, 0x11, 0x12, 0x14, 0x15, 0x16, 0x18, 0x19,
3567                 0x1a, 0x1b, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22,
3568                 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b,
3569                 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x31, 0x32,
3570                 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x38, 0x39,
3571                 0x3a, 0x3b, 0x3c, 0x3c, 0x3d, 0x3e, 0x3f, 0x3f,
3572                 0x40, 0x41, 0x42, 0x42, 0x43, 0x44, 0x44, 0x45,
3573                 0x46, 0x47, 0x47, 0x48, 0x49, 0x49, 0x4a, 0x4b,
3574                 0x4b, 0x4c, 0x4c, 0x4d, 0x4e, 0x4e, 0x4f, 0x50,
3575                 0x50, 0x51, 0x51, 0x52, 0x53, 0x53, 0x54, 0x54,
3576                 0x55, 0x55, 0x56, 0x56, 0x57, 0x58, 0x58, 0x59,
3577                 0x59, 0x5a, 0x5a, 0x5b, 0x5b, 0x5c, 0x5c, 0x5d,
3578                 0x5d, 0x5e, 0x5e, 0x5f, 0x5f, 0x60, 0x60, 0x61,
3579                 0x61, 0x62, 0x62, 0x63, 0x63, 0x64, 0x64, 0x65,
3580                 0x65, 0x66, 0x66, 0x66, 0x67, 0x67, 0x68, 0x68,
3581                 0x69, 0x69, 0x6a, 0x6a, 0x6a, 0x6b, 0x6b, 0x6c,
3582                 0x6c, 0x6d, 0x6d, 0x6d, 0x6e, 0x6e, 0x6f, 0x6f,
3583                 0x6f, 0x70, 0x70, 0x71, 0x71, 0x71, 0x72, 0x72,
3584                 0x73, 0x73, 0x73, 0x74, 0x74, 0x75, 0x75, 0x75,
3585                 0x76, 0x76, 0x76, 0x77, 0x77, 0x78, 0x78, 0x78,
3586                 0x79, 0x79, 0x79, 0x7a, 0x7a, 0x7a, 0x7b, 0x7b,
3587                 0x7b, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d, 0x7e, 0x7e,
3588                 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x81,
3589                 0x81, 0x81, 0x82, 0x82, 0x82, 0x83, 0x83, 0x83,
3590                 0x84, 0x84, 0x84, 0x84, 0x85, 0x85, 0x85, 0x86,
3591                 0x86, 0x86, 0x87, 0x87, 0x87, 0x88, 0x88, 0x88,
3592                 0x88, 0x89, 0x89, 0x89, 0x8a, 0x8a, 0x8a, 0x8b,
3593                 0x8b, 0x8b, 0x8b, 0x8c, 0x8c, 0x8c, 0x8d, 0x8d,
3594                 0x8d, 0x8e, 0x8e, 0x8e, 0x8e, 0x8f, 0x8f, 0x8f,
3595                 0x90, 0x90, 0x90, 0x90, 0x91, 0x91, 0x91, 0x91,
3596                 0x92, 0x92, 0x92, 0x93, 0x93, 0x93, 0x93, 0x94,
3597                 0x94, 0x94, 0x94, 0x95, 0x95, 0x95, 0x96, 0x96,
3598                 0x96, 0x96, 0x97, 0x97, 0x97, 0x97, 0x98, 0x98,
3599                 0x98, 0x98, 0x99, 0x99, 0x99, 0x99, 0x9a, 0x9a,
3600                 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c,
3601                 0x9c, 0x9c, 0x9d, 0x9d, 0x9d, 0x9d, 0x9e, 0x9e,
3602                 0x9e, 0x9e, 0x9f, 0x9f, 0x9f, 0x9f, 0xa0, 0xa0,
3603                 0xa0, 0xa0, 0xa1, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2,
3604                 0xa2, 0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4,
3605                 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
3606                 0xa6, 0xa6, 0xa6, 0xa6, 0xa7, 0xa7, 0xa7, 0xa7,
3607                 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa9, 0xa9, 0xa9,
3608                 0xa9, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xab, 0xab,
3609                 0xab, 0xab, 0xac, 0xac, 0xac, 0xac, 0xac, 0xad,
3610                 0xad, 0xad, 0xad, 0xad, 0xae, 0xae, 0xae, 0xae,
3611                 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0,
3612                 0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2,
3613                 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3,
3614                 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb5, 0xb5, 0xb5,
3615                 0xb5, 0xb5, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb7,
3616                 0xb7, 0xb7, 0xb7, 0xb7, 0xb8, 0xb8, 0xb8, 0xb8,
3617                 0xb8, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xba, 0xba,
3618                 0xba, 0xba, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
3619                 0xbb, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbd, 0xbd,
3620                 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
3621                 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0,
3622                 0xc0, 0xc0, 0xc0, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1,
3623                 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3,
3624                 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
3625                 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc6,
3626                 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7,
3627                 0xc7, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc9, 0xc9,
3628                 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca, 0xca,
3629                 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc,
3630                 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd,
3631                 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
3632                 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xd0, 0xd0,
3633                 0xd0, 0xd0, 0xd0, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1,
3634                 0xd1, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd3,
3635                 0xd3, 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4, 0xd4,
3636                 0xd4, 0xd4, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5,
3637                 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd7, 0xd7,
3638                 0xd7, 0xd7, 0xd7, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8,
3639                 0xd8, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xda,
3640                 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb, 0xdb, 0xdb,
3641                 0xdb, 0xdb, 0xdb, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
3642                 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xde,
3643                 0xde, 0xde, 0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xdf,
3644                 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
3645                 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2,
3646                 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3,
3647                 0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe5,
3648                 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe6, 0xe6, 0xe6,
3649                 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
3650                 0xe7, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9,
3651                 0xe9, 0xe9, 0xe9, 0xe9, 0xea, 0xea, 0xea, 0xea,
3652                 0xea, 0xea, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3653                 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xed, 0xed,
3654                 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee, 0xee,
3655                 0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0,
3656                 0xf0, 0xf0, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1,
3657                 0xf1, 0xf1, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
3658                 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4,
3659                 0xf4, 0xf4, 0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5,
3660                 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf7, 0xf7,
3661                 0xf7, 0xf7, 0xf7, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8,
3662                 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa, 0xfa,
3663                 0xfa, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb,
3664                 0xfb, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfd, 0xfd,
3665                 0xfd, 0xfd, 0xfd, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
3666                 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3667                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3668                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3669                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3670                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3671                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3672                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3673                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3674                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3675                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3676                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3677                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3678                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3679                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3680                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3681                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3682                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3683                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3684                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3685                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3686                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3687                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3688                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3689                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3690                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3691                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3692                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3693                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
3694                {0x13, 0x15, 0x16, 0x18, 0x19, 0x1b, 0x1c, 0x1e,
3695                 0x1f, 0x20, 0x22, 0x23, 0x24, 0x26, 0x27, 0x28,
3696                 0x29, 0x2a, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31,
3697                 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
3698                 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41,
3699                 0x42, 0x43, 0x44, 0x44, 0x45, 0x46, 0x47, 0x48,
3700                 0x49, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4d, 0x4e,
3701                 0x4f, 0x50, 0x50, 0x51, 0x52, 0x53, 0x53, 0x54,
3702                 0x55, 0x55, 0x56, 0x57, 0x57, 0x58, 0x59, 0x59,
3703                 0x5a, 0x5b, 0x5b, 0x5c, 0x5d, 0x5d, 0x5e, 0x5f,
3704                 0x5f, 0x60, 0x60, 0x61, 0x62, 0x62, 0x63, 0x63,
3705                 0x64, 0x65, 0x65, 0x66, 0x66, 0x67, 0x67, 0x68,
3706                 0x69, 0x69, 0x6a, 0x6a, 0x6b, 0x6b, 0x6c, 0x6c,
3707                 0x6d, 0x6d, 0x6e, 0x6e, 0x6f, 0x6f, 0x70, 0x70,
3708                 0x71, 0x71, 0x72, 0x72, 0x73, 0x73, 0x74, 0x74,
3709                 0x75, 0x75, 0x76, 0x76, 0x77, 0x77, 0x78, 0x78,
3710                 0x79, 0x79, 0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7c,
3711                 0x7c, 0x7d, 0x7d, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f,
3712                 0x80, 0x80, 0x81, 0x81, 0x81, 0x82, 0x82, 0x83,
3713                 0x83, 0x84, 0x84, 0x84, 0x85, 0x85, 0x86, 0x86,
3714                 0x86, 0x87, 0x87, 0x88, 0x88, 0x88, 0x89, 0x89,
3715                 0x89, 0x8a, 0x8a, 0x8b, 0x8b, 0x8b, 0x8c, 0x8c,
3716                 0x8c, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e, 0x8f, 0x8f,
3717                 0x8f, 0x90, 0x90, 0x90, 0x91, 0x91, 0x92, 0x92,
3718                 0x92, 0x93, 0x93, 0x93, 0x94, 0x94, 0x94, 0x95,
3719                 0x95, 0x95, 0x96, 0x96, 0x96, 0x97, 0x97, 0x97,
3720                 0x98, 0x98, 0x98, 0x99, 0x99, 0x99, 0x9a, 0x9a,
3721                 0x9a, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c, 0x9c, 0x9d,
3722                 0x9d, 0x9d, 0x9e, 0x9e, 0x9e, 0x9e, 0x9f, 0x9f,
3723                 0x9f, 0xa0, 0xa0, 0xa0, 0xa1, 0xa1, 0xa1, 0xa2,
3724                 0xa2, 0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4,
3725                 0xa4, 0xa5, 0xa5, 0xa5, 0xa5, 0xa6, 0xa6, 0xa6,
3726                 0xa7, 0xa7, 0xa7, 0xa7, 0xa8, 0xa8, 0xa8, 0xa9,
3727                 0xa9, 0xa9, 0xa9, 0xaa, 0xaa, 0xaa, 0xab, 0xab,
3728                 0xab, 0xab, 0xac, 0xac, 0xac, 0xac, 0xad, 0xad,
3729                 0xad, 0xae, 0xae, 0xae, 0xae, 0xaf, 0xaf, 0xaf,
3730                 0xaf, 0xb0, 0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb1,
3731                 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3,
3732                 0xb4, 0xb4, 0xb4, 0xb4, 0xb5, 0xb5, 0xb5, 0xb5,
3733                 0xb6, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7,
3734                 0xb8, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xb9,
3735                 0xba, 0xba, 0xba, 0xba, 0xbb, 0xbb, 0xbb, 0xbb,
3736                 0xbc, 0xbc, 0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbd,
3737                 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf, 0xbf,
3738                 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc1, 0xc1,
3739                 0xc1, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3,
3740                 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5,
3741                 0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7,
3742                 0xc7, 0xc7, 0xc7, 0xc7, 0xc8, 0xc8, 0xc8, 0xc8,
3743                 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca,
3744                 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc,
3745                 0xcc, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xce,
3746                 0xce, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf,
3747                 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1, 0xd1,
3748                 0xd1, 0xd1, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd3,
3749                 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4,
3750                 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd6, 0xd6, 0xd6,
3751                 0xd6, 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8,
3752                 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9, 0xd9,
3753                 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb, 0xdb,
3754                 0xdb, 0xdb, 0xdb, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
3755                 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde,
3756                 0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0,
3757                 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1, 0xe1,
3758                 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe3,
3759                 0xe3, 0xe3, 0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4,
3760                 0xe4, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe6, 0xe6,
3761                 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
3762                 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xe9,
3763                 0xe9, 0xe9, 0xe9, 0xea, 0xea, 0xea, 0xea, 0xea,
3764                 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec,
3765                 0xec, 0xec, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3766                 0xee, 0xee, 0xee, 0xee, 0xee, 0xef, 0xef, 0xef,
3767                 0xef, 0xef, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3768                 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf2, 0xf2, 0xf2,
3769                 0xf2, 0xf2, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
3770                 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5, 0xf5, 0xf5,
3771                 0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6,
3772                 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8, 0xf8,
3773                 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9,
3774                 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb,
3775                 0xfb, 0xfb, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc,
3776                 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfe, 0xfe, 0xfe,
3777                 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3778                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3779                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3780                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3781                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3782                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3783                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3784                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3785                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3786                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3787                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3788                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3789                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3790                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3791                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3792                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3793                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3794                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3795                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3796                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3797                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3798                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3799                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3800                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3801                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3802                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3803                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3804                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3805                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3806                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3807                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3808                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3809                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3810                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3811                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3812                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3813                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3814                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3815                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3816                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3817                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3818                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3819                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3820                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3821                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
3822            },
3823        };
3824
3825        reg_w(gspca_dev, TP6800_R21_ENDP_1_CTL, 0x00);
3826        if (sd->bridge == BRIDGE_TP6810)
3827                reg_w(gspca_dev, 0x02, 0x28);
3828/*      msleep(50); */
3829        bulk_w(gspca_dev, 0x00, gamma_tb[gamma][0], 1024);
3830        bulk_w(gspca_dev, 0x01, gamma_tb[gamma][1], 1024);
3831        bulk_w(gspca_dev, 0x02, gamma_tb[gamma][2], 1024);
3832        if (sd->bridge == BRIDGE_TP6810) {
3833                int i;
3834
3835                reg_w(gspca_dev, 0x02, 0x2b);
3836                reg_w(gspca_dev, 0x02, 0x28);
3837                for (i = 0; i < 6; i++)
3838                        reg_w(gspca_dev, TP6800_R55_GAMMA_R,
3839                                gamma_tb[gamma][0][i]);
3840                reg_w(gspca_dev, 0x02, 0x2b);
3841                reg_w(gspca_dev, 0x02, 0x28);
3842                for (i = 0; i < 6; i++)
3843                        reg_w(gspca_dev, TP6800_R56_GAMMA_G,
3844                                gamma_tb[gamma][1][i]);
3845                reg_w(gspca_dev, 0x02, 0x2b);
3846                reg_w(gspca_dev, 0x02, 0x28);
3847                for (i = 0; i < 6; i++)
3848                        reg_w(gspca_dev, TP6800_R57_GAMMA_B,
3849                                gamma_tb[gamma][2][i]);
3850                reg_w(gspca_dev, 0x02, 0x28);
3851        }
3852        reg_w(gspca_dev, TP6800_R21_ENDP_1_CTL, 0x03);
3853/*      msleep(50); */
3854}
3855
3856static void setsharpness(struct gspca_dev *gspca_dev, s32 val)
3857{
3858        struct sd *sd = (struct sd *) gspca_dev;
3859
3860        if (sd->bridge == BRIDGE_TP6800) {
3861                val |= 0x08;            /* grid compensation enable */
3862                if (gspca_dev->pixfmt.width == 640)
3863                        reg_w(gspca_dev, TP6800_R78_FORMAT, 0x00); /* vga */
3864                else
3865                        val |= 0x04;            /* scaling down enable */
3866                reg_w(gspca_dev, TP6800_R5D_DEMOSAIC_CFG, val);
3867        } else {
3868                val = (val << 5) | 0x08;
3869                reg_w(gspca_dev, 0x59, val);
3870        }
3871}
3872
3873static void setautogain(struct gspca_dev *gspca_dev, s32 val)
3874{
3875        struct sd *sd = (struct sd *) gspca_dev;
3876
3877        sd->ag_cnt = val ? AG_CNT_START : -1;
3878}
3879
3880/* set the resolution for sensor cx0342 */
3881static void set_resolution(struct gspca_dev *gspca_dev)
3882{
3883        struct sd *sd = (struct sd *) gspca_dev;
3884
3885        reg_w(gspca_dev, TP6800_R21_ENDP_1_CTL, 0x00);
3886        if (gspca_dev->pixfmt.width == 320) {
3887                reg_w(gspca_dev, TP6800_R3F_FRAME_RATE, 0x06);
3888                msleep(100);
3889                i2c_w(gspca_dev, CX0342_AUTO_ADC_CALIB, 0x01);
3890                msleep(100);
3891                reg_w(gspca_dev, TP6800_R21_ENDP_1_CTL, 0x03);
3892                reg_w(gspca_dev, TP6800_R78_FORMAT, 0x01);      /* qvga */
3893                reg_w(gspca_dev, TP6800_R5D_DEMOSAIC_CFG, 0x0d);
3894                i2c_w(gspca_dev, CX0342_EXPO_LINE_L, 0x37);
3895                i2c_w(gspca_dev, CX0342_EXPO_LINE_H, 0x01);
3896        } else {
3897                reg_w(gspca_dev, TP6800_R3F_FRAME_RATE, 0x05);
3898                msleep(100);
3899                i2c_w(gspca_dev, CX0342_AUTO_ADC_CALIB, 0x01);
3900                msleep(100);
3901                reg_w(gspca_dev, TP6800_R21_ENDP_1_CTL, 0x03);
3902                reg_w(gspca_dev, TP6800_R78_FORMAT, 0x00);      /* vga */
3903                reg_w(gspca_dev, TP6800_R5D_DEMOSAIC_CFG, 0x09);
3904                i2c_w(gspca_dev, CX0342_EXPO_LINE_L, 0xcf);
3905                i2c_w(gspca_dev, CX0342_EXPO_LINE_H, 0x00);
3906        }
3907        i2c_w(gspca_dev, CX0342_SYS_CTRL_0, 0x01);
3908        bulk_w(gspca_dev, 0x03, color_gain[SENSOR_CX0342],
3909                                ARRAY_SIZE(color_gain[0]));
3910        setgamma(gspca_dev, v4l2_ctrl_g_ctrl(sd->gamma));
3911        if (sd->sensor == SENSOR_SOI763A)
3912                setquality(gspca_dev, v4l2_ctrl_g_ctrl(sd->jpegqual));
3913}
3914
3915/* convert the frame rate to a tp68x0 value */
3916static int get_fr_idx(struct gspca_dev *gspca_dev)
3917{
3918        struct sd *sd = (struct sd *) gspca_dev;
3919        int i;
3920
3921        if (sd->bridge == BRIDGE_TP6800) {
3922                for (i = 0; i < ARRAY_SIZE(rates) - 1; i++) {
3923                        if (sd->framerate >= rates[i])
3924                                break;
3925                }
3926                i = 6 - i;              /* 1 = 5fps .. 6 = 30fps */
3927
3928                /* 640x480 * 30 fps does not work */
3929                if (i == 6                      /* if 30 fps */
3930                 && gspca_dev->pixfmt.width == 640)
3931                        i = 0x05;               /* 15 fps */
3932        } else {
3933                for (i = 0; i < ARRAY_SIZE(rates_6810) - 1; i++) {
3934                        if (sd->framerate >= rates_6810[i])
3935                                break;
3936                }
3937                i = 7 - i;              /* 3 = 5fps .. 7 = 30fps */
3938
3939                /* 640x480 * 30 fps does not work */
3940                if (i == 7                      /* if 30 fps */
3941                 && gspca_dev->pixfmt.width == 640)
3942                        i = 6;                  /* 15 fps */
3943                i |= 0x80;                      /* clock * 1 */
3944        }
3945        return i;
3946}
3947
3948static void setframerate(struct gspca_dev *gspca_dev, s32 val)
3949{
3950        struct sd *sd = (struct sd *) gspca_dev;
3951        u8 fr_idx;
3952
3953        fr_idx = get_fr_idx(gspca_dev);
3954
3955        if (sd->bridge == BRIDGE_TP6810) {
3956                reg_r(gspca_dev, 0x7b);
3957                reg_w(gspca_dev, 0x7b,
3958                        sd->sensor == SENSOR_CX0342 ? 0x10 : 0x90);
3959                if (val >= 128)
3960                        fr_idx = 0xf0;          /* lower frame rate */
3961        }
3962
3963        reg_w(gspca_dev, TP6800_R3F_FRAME_RATE, fr_idx);
3964
3965        if (sd->sensor == SENSOR_CX0342)
3966                i2c_w(gspca_dev, CX0342_AUTO_ADC_CALIB, 0x01);
3967}
3968
3969static void setrgain(struct gspca_dev *gspca_dev, s32 rgain)
3970{
3971        i2c_w(gspca_dev, CX0342_RAW_RGAIN_H, rgain >> 8);
3972        i2c_w(gspca_dev, CX0342_RAW_RGAIN_L, rgain);
3973        i2c_w(gspca_dev, CX0342_SYS_CTRL_0, 0x80);
3974}
3975
3976static int sd_setgain(struct gspca_dev *gspca_dev)
3977{
3978        struct sd *sd = (struct sd *) gspca_dev;
3979        s32 val = gspca_dev->gain->val;
3980
3981        if (sd->sensor == SENSOR_CX0342) {
3982                s32 old = gspca_dev->gain->cur.val ?
3983                                        gspca_dev->gain->cur.val : 1;
3984
3985                sd->blue->val = sd->blue->val * val / old;
3986                if (sd->blue->val > 4095)
3987                        sd->blue->val = 4095;
3988                sd->red->val = sd->red->val * val / old;
3989                if (sd->red->val > 4095)
3990                        sd->red->val = 4095;
3991        }
3992        if (gspca_dev->streaming) {
3993                if (sd->sensor == SENSOR_CX0342)
3994                        setexposure(gspca_dev, gspca_dev->exposure->val,
3995                                        gspca_dev->gain->val,
3996                                        sd->blue->val, sd->red->val);
3997                else
3998                        setexposure(gspca_dev, gspca_dev->exposure->val,
3999                                        gspca_dev->gain->val, 0, 0);
4000        }
4001        return gspca_dev->usb_err;
4002}
4003
4004static void setbgain(struct gspca_dev *gspca_dev, s32 bgain)
4005{
4006        i2c_w(gspca_dev, CX0342_RAW_BGAIN_H, bgain >> 8);
4007        i2c_w(gspca_dev, CX0342_RAW_BGAIN_L, bgain);
4008        i2c_w(gspca_dev, CX0342_SYS_CTRL_0, 0x80);
4009}
4010
4011/* this function is called at probe time */
4012static int sd_config(struct gspca_dev *gspca_dev,
4013                     const struct usb_device_id *id)
4014{
4015        struct sd *sd = (struct sd *) gspca_dev;
4016
4017        sd->bridge = id->driver_info;
4018
4019        gspca_dev->cam.cam_mode = vga_mode;
4020        gspca_dev->cam.nmodes = ARRAY_SIZE(vga_mode);
4021        gspca_dev->cam.mode_framerates = sd->bridge == BRIDGE_TP6800 ?
4022                        framerates : framerates_6810;
4023
4024        sd->framerate = DEFAULT_FRAME_RATE;
4025        return 0;
4026}
4027
4028/* this function is called at probe and resume time */
4029static int sd_init(struct gspca_dev *gspca_dev)
4030{
4031        struct sd *sd = (struct sd *) gspca_dev;
4032        static const struct cmd tp6800_preinit[] = {
4033                {TP6800_R10_SIF_TYPE, 0x01},    /* sif */
4034                {TP6800_R11_SIF_CONTROL, 0x01},
4035                {TP6800_R15_GPIO_PU, 0x9f},
4036                {TP6800_R16_GPIO_PD, 0x9f},
4037                {TP6800_R17_GPIO_IO, 0x80},
4038                {TP6800_R18_GPIO_DATA, 0x40},   /* LED off */
4039        };
4040        static const struct cmd tp6810_preinit[] = {
4041                {TP6800_R2F_TIMING_CFG, 0x2f},
4042                {TP6800_R15_GPIO_PU, 0x6f},
4043                {TP6800_R16_GPIO_PD, 0x40},
4044                {TP6800_R17_GPIO_IO, 0x9f},
4045                {TP6800_R18_GPIO_DATA, 0xc1},   /* LED off */
4046        };
4047
4048        if (sd->bridge == BRIDGE_TP6800)
4049                reg_w_buf(gspca_dev, tp6800_preinit,
4050                                ARRAY_SIZE(tp6800_preinit));
4051        else
4052                reg_w_buf(gspca_dev, tp6810_preinit,
4053                                ARRAY_SIZE(tp6810_preinit));
4054        msleep(15);
4055        reg_r(gspca_dev, TP6800_R18_GPIO_DATA);
4056        gspca_dbg(gspca_dev, D_PROBE, "gpio: %02x\n", gspca_dev->usb_buf[0]);
4057/* values:
4058 *      0x80: snapshot button
4059 *      0x40: LED
4060 *      0x20: (bridge / sensor) reset for tp6810 ?
4061 *      0x07: sensor type ?
4062 */
4063
4064        /* guess the sensor type */
4065        if (force_sensor >= 0) {
4066                sd->sensor = force_sensor;
4067        } else {
4068                if (sd->bridge == BRIDGE_TP6800) {
4069/*fixme: not sure this is working*/
4070                        switch (gspca_dev->usb_buf[0] & 0x07) {
4071                        case 0:
4072                                sd->sensor = SENSOR_SOI763A;
4073                                break;
4074                        case 1:
4075                                sd->sensor = SENSOR_CX0342;
4076                                break;
4077                        }
4078                } else {
4079                        int sensor;
4080
4081                        sensor = probe_6810(gspca_dev);
4082                        if (sensor < 0) {
4083                                pr_warn("Unknown sensor %d - forced to soi763a\n",
4084                                        -sensor);
4085                                sensor = SENSOR_SOI763A;
4086                        }
4087                        sd->sensor = sensor;
4088                }
4089        }
4090        if (sd->sensor == SENSOR_SOI763A) {
4091                pr_info("Sensor soi763a\n");
4092                if (sd->bridge == BRIDGE_TP6810) {
4093                        soi763a_6810_init(gspca_dev);
4094                }
4095        } else {
4096                pr_info("Sensor cx0342\n");
4097                if (sd->bridge == BRIDGE_TP6810) {
4098                        cx0342_6810_init(gspca_dev);
4099                }
4100        }
4101
4102        set_dqt(gspca_dev, 0);
4103        return 0;
4104}
4105
4106/* This function is called before choosing the alt setting */
4107static int sd_isoc_init(struct gspca_dev *gspca_dev)
4108{
4109        struct sd *sd = (struct sd *) gspca_dev;
4110        static const struct cmd cx_sensor_init[] = {
4111                {CX0342_AUTO_ADC_CALIB, 0x81},
4112                {CX0342_EXPO_LINE_L, 0x37},
4113                {CX0342_EXPO_LINE_H, 0x01},
4114                {CX0342_RAW_GRGAIN_L, 0x00},
4115                {CX0342_RAW_GBGAIN_L, 0x00},
4116                {CX0342_RAW_RGAIN_L, 0x00},
4117                {CX0342_RAW_BGAIN_L, 0x00},
4118                {CX0342_SYS_CTRL_0, 0x81},
4119        };
4120        static const struct cmd cx_bridge_init[] = {
4121                {0x4d, 0x00},
4122                {0x4c, 0xff},
4123                {0x4e, 0xff},
4124                {0x4f, 0x00},
4125        };
4126        static const struct cmd ov_sensor_init[] = {
4127                {0x10, 0x75},           /* exposure */
4128                {0x76, 0x03},
4129                {0x00, 0x00},           /* gain */
4130        };
4131        static const struct cmd ov_bridge_init[] = {
4132                {0x7b, 0x90},
4133                {TP6800_R3F_FRAME_RATE, 0x87},
4134        };
4135
4136        if (sd->bridge == BRIDGE_TP6800)
4137                return 0;
4138        if (sd->sensor == SENSOR_CX0342) {
4139                reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x20);
4140                reg_w(gspca_dev, TP6800_R3F_FRAME_RATE, 0x87);
4141                i2c_w_buf(gspca_dev, cx_sensor_init,
4142                                ARRAY_SIZE(cx_sensor_init));
4143                reg_w_buf(gspca_dev, cx_bridge_init,
4144                                ARRAY_SIZE(cx_bridge_init));
4145                bulk_w(gspca_dev, 0x03, color_null, sizeof color_null);
4146                reg_w(gspca_dev, 0x59, 0x40);
4147        } else {
4148                reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x21);
4149                i2c_w_buf(gspca_dev, ov_sensor_init,
4150                                ARRAY_SIZE(ov_sensor_init));
4151                reg_r(gspca_dev, 0x7b);
4152                reg_w_buf(gspca_dev, ov_bridge_init,
4153                                ARRAY_SIZE(ov_bridge_init));
4154        }
4155        reg_w(gspca_dev, TP6800_R78_FORMAT,
4156                        gspca_dev->curr_mode ? 0x00 : 0x01);
4157        return gspca_dev->usb_err;
4158}
4159
4160static void set_led(struct gspca_dev *gspca_dev, int on)
4161{
4162        u8 data;
4163
4164        reg_r(gspca_dev, TP6800_R18_GPIO_DATA);
4165        data = gspca_dev->usb_buf[0];
4166        if (on)
4167                data &= ~0x40;
4168        else
4169                data |= 0x40;
4170        reg_w(gspca_dev, TP6800_R18_GPIO_DATA, data);
4171}
4172
4173static void cx0342_6800_start(struct gspca_dev *gspca_dev)
4174{
4175        struct sd *sd = (struct sd *) gspca_dev;
4176        static const struct cmd reg_init[] = {
4177                /* fixme: is this useful? */
4178                {TP6800_R17_GPIO_IO, 0x9f},
4179                {TP6800_R16_GPIO_PD, 0x40},
4180                {TP6800_R10_SIF_TYPE, 0x00},    /* i2c 8 bits */
4181                {TP6800_R50, 0x00},
4182                {TP6800_R51, 0x00},
4183                {TP6800_R52, 0xff},
4184                {TP6800_R53, 0x03},
4185                {TP6800_R54_DARK_CFG, 0x07},
4186                {TP6800_R5C_EDGE_THRLD, 0x40},
4187                {TP6800_R7A_BLK_THRLD, 0x40},
4188                {TP6800_R2F_TIMING_CFG, 0x17},
4189                {TP6800_R30_SENSOR_CFG, 0x18},  /* G1B..RG0 */
4190                {TP6800_R37_FRONT_DARK_ST, 0x00},
4191                {TP6800_R38_FRONT_DARK_END, 0x00},
4192                {TP6800_R39_REAR_DARK_ST_L, 0x00},
4193                {TP6800_R3A_REAR_DARK_ST_H, 0x00},
4194                {TP6800_R3B_REAR_DARK_END_L, 0x00},
4195                {TP6800_R3C_REAR_DARK_END_H, 0x00},
4196                {TP6800_R3D_HORIZ_DARK_LINE_L, 0x00},
4197                {TP6800_R3E_HORIZ_DARK_LINE_H, 0x00},
4198                {TP6800_R21_ENDP_1_CTL, 0x03},
4199
4200                {TP6800_R31_PIXEL_START, 0x0b},
4201                {TP6800_R32_PIXEL_END_L, 0x8a},
4202                {TP6800_R33_PIXEL_END_H, 0x02},
4203                {TP6800_R34_LINE_START, 0x0e},
4204                {TP6800_R35_LINE_END_L, 0xf4},
4205                {TP6800_R36_LINE_END_H, 0x01},
4206                {TP6800_R78_FORMAT, 0x00},
4207                {TP6800_R12_SIF_ADDR_S, 0x20},  /* cx0342 i2c addr */
4208        };
4209        static const struct cmd sensor_init[] = {
4210                {CX0342_OUTPUT_CTRL, 0x07},
4211                {CX0342_BYPASS_MODE, 0x58},
4212                {CX0342_GPXLTHD_L, 0x16},
4213                {CX0342_RBPXLTHD_L, 0x16},
4214                {CX0342_PLANETHD_L, 0xc0},
4215                {CX0342_PLANETHD_H, 0x03},
4216                {CX0342_RB_GAP_L, 0xff},
4217                {CX0342_RB_GAP_H, 0x07},
4218                {CX0342_G_GAP_L, 0xff},
4219                {CX0342_G_GAP_H, 0x07},
4220                {CX0342_RST_OVERFLOW_L, 0x5c},
4221                {CX0342_RST_OVERFLOW_H, 0x01},
4222                {CX0342_DATA_OVERFLOW_L, 0xfc},
4223                {CX0342_DATA_OVERFLOW_H, 0x03},
4224                {CX0342_DATA_UNDERFLOW_L, 0x00},
4225                {CX0342_DATA_UNDERFLOW_H, 0x00},
4226                {CX0342_SYS_CTRL_0, 0x40},
4227                {CX0342_GLOBAL_GAIN, 0x01},
4228                {CX0342_CLOCK_GEN, 0x00},
4229                {CX0342_SYS_CTRL_0, 0x02},
4230                {CX0342_IDLE_CTRL, 0x05},
4231                {CX0342_ADCGN, 0x00},
4232                {CX0342_ADC_CTL, 0x00},
4233                {CX0342_LVRST_BLBIAS, 0x01},
4234                {CX0342_VTHSEL, 0x0b},
4235                {CX0342_RAMP_RIV, 0x0b},
4236                {CX0342_LDOSEL, 0x07},
4237                {CX0342_SPV_VALUE_L, 0x40},
4238                {CX0342_SPV_VALUE_H, 0x02},
4239        };
4240
4241        reg_w_buf(gspca_dev, reg_init, ARRAY_SIZE(reg_init));
4242        i2c_w_buf(gspca_dev, sensor_init, ARRAY_SIZE(sensor_init));
4243        i2c_w_buf(gspca_dev, cx0342_timing_seq, ARRAY_SIZE(cx0342_timing_seq));
4244        reg_w(gspca_dev, TP6800_R5C_EDGE_THRLD, 0x10);
4245        reg_w(gspca_dev, TP6800_R54_DARK_CFG, 0x00);
4246        i2c_w(gspca_dev, CX0342_EXPO_LINE_H, 0x00);
4247        i2c_w(gspca_dev, CX0342_SYS_CTRL_0, 0x01);
4248        if (sd->sensor == SENSOR_CX0342)
4249                setexposure(gspca_dev, v4l2_ctrl_g_ctrl(gspca_dev->exposure),
4250                        v4l2_ctrl_g_ctrl(gspca_dev->gain),
4251                        v4l2_ctrl_g_ctrl(sd->blue),
4252                        v4l2_ctrl_g_ctrl(sd->red));
4253        else
4254                setexposure(gspca_dev, v4l2_ctrl_g_ctrl(gspca_dev->exposure),
4255                        v4l2_ctrl_g_ctrl(gspca_dev->gain), 0, 0);
4256        set_led(gspca_dev, 1);
4257        set_resolution(gspca_dev);
4258}
4259
4260static void cx0342_6810_start(struct gspca_dev *gspca_dev)
4261{
4262        struct sd *sd = (struct sd *) gspca_dev;
4263        static const struct cmd sensor_init_2[] = {
4264                {CX0342_EXPO_LINE_L, 0x6f},
4265                {CX0342_EXPO_LINE_H, 0x02},
4266                {CX0342_RAW_GRGAIN_L, 0x00},
4267                {CX0342_RAW_GBGAIN_L, 0x00},
4268                {CX0342_RAW_RGAIN_L, 0x00},
4269                {CX0342_RAW_BGAIN_L, 0x00},
4270                {CX0342_SYS_CTRL_0, 0x81},
4271        };
4272        static const struct cmd bridge_init_2[] = {
4273                {0x4d, 0x00},
4274                {0x4c, 0xff},
4275                {0x4e, 0xff},
4276                {0x4f, 0x00},
4277                {TP6800_R7A_BLK_THRLD, 0x00},
4278                {TP6800_R79_QUALITY, 0x04},
4279                {TP6800_R79_QUALITY, 0x01},
4280        };
4281        static const struct cmd bridge_init_3[] = {
4282                {TP6800_R31_PIXEL_START, 0x08},
4283                {TP6800_R32_PIXEL_END_L, 0x87},
4284                {TP6800_R33_PIXEL_END_H, 0x02},
4285                {TP6800_R34_LINE_START, 0x0e},
4286                {TP6800_R35_LINE_END_L, 0xf4},
4287                {TP6800_R36_LINE_END_H, 0x01},
4288        };
4289        static const struct cmd sensor_init_3[] = {
4290                {CX0342_AUTO_ADC_CALIB, 0x81},
4291                {CX0342_EXPO_LINE_L, 0x6f},
4292                {CX0342_EXPO_LINE_H, 0x02},
4293                {CX0342_RAW_GRGAIN_L, 0x00},
4294                {CX0342_RAW_GBGAIN_L, 0x00},
4295                {CX0342_RAW_RGAIN_L, 0x00},
4296                {CX0342_RAW_BGAIN_L, 0x00},
4297                {CX0342_SYS_CTRL_0, 0x81},
4298        };
4299        static const struct cmd bridge_init_5[] = {
4300                {0x4d, 0x00},
4301                {0x4c, 0xff},
4302                {0x4e, 0xff},
4303                {0x4f, 0x00},
4304        };
4305        static const struct cmd sensor_init_4[] = {
4306                {CX0342_EXPO_LINE_L, 0xd3},
4307                {CX0342_EXPO_LINE_H, 0x01},
4308/*fixme: gains, but 00..80 only*/
4309                {CX0342_RAW_GRGAIN_L, 0x40},
4310                {CX0342_RAW_GBGAIN_L, 0x40},
4311                {CX0342_RAW_RGAIN_L, 0x40},
4312                {CX0342_RAW_BGAIN_L, 0x40},
4313                {CX0342_SYS_CTRL_0, 0x81},
4314        };
4315        static const struct cmd sensor_init_5[] = {
4316                {CX0342_IDLE_CTRL, 0x05},
4317                {CX0342_ADCGN, 0x00},
4318                {CX0342_ADC_CTL, 0x00},
4319                {CX0342_LVRST_BLBIAS, 0x01},
4320                {CX0342_VTHSEL, 0x0b},
4321                {CX0342_RAMP_RIV, 0x0b},
4322                {CX0342_LDOSEL, 0x07},
4323                {CX0342_SPV_VALUE_L, 0x40},
4324                {CX0342_SPV_VALUE_H, 0x02},
4325                {CX0342_AUTO_ADC_CALIB, 0x81},
4326        };
4327
4328        reg_w(gspca_dev, 0x22, gspca_dev->alt);
4329        i2c_w_buf(gspca_dev, sensor_init_2, ARRAY_SIZE(sensor_init_2));
4330        reg_w_buf(gspca_dev, bridge_init_2, ARRAY_SIZE(bridge_init_2));
4331        reg_w_buf(gspca_dev, tp6810_cx_init_common,
4332                        ARRAY_SIZE(tp6810_cx_init_common));
4333        reg_w_buf(gspca_dev, bridge_init_3, ARRAY_SIZE(bridge_init_3));
4334        if (gspca_dev->curr_mode) {
4335                reg_w(gspca_dev, 0x4a, 0x7f);
4336                reg_w(gspca_dev, 0x07, 0x05);
4337                reg_w(gspca_dev, TP6800_R78_FORMAT, 0x00);      /* vga */
4338        } else {
4339                reg_w(gspca_dev, 0x4a, 0xff);
4340                reg_w(gspca_dev, 0x07, 0x85);
4341                reg_w(gspca_dev, TP6800_R78_FORMAT, 0x01);      /* qvga */
4342        }
4343        setgamma(gspca_dev, v4l2_ctrl_g_ctrl(sd->gamma));
4344        reg_w_buf(gspca_dev, tp6810_bridge_start,
4345                        ARRAY_SIZE(tp6810_bridge_start));
4346        setsharpness(gspca_dev, v4l2_ctrl_g_ctrl(sd->sharpness));
4347        bulk_w(gspca_dev, 0x03, color_gain[SENSOR_CX0342],
4348                                ARRAY_SIZE(color_gain[0]));
4349        reg_w(gspca_dev, TP6800_R3F_FRAME_RATE, 0x87);
4350        i2c_w_buf(gspca_dev, sensor_init_3, ARRAY_SIZE(sensor_init_3));
4351        reg_w_buf(gspca_dev, bridge_init_5, ARRAY_SIZE(bridge_init_5));
4352        i2c_w_buf(gspca_dev, sensor_init_4, ARRAY_SIZE(sensor_init_4));
4353        reg_w_buf(gspca_dev, bridge_init_5, ARRAY_SIZE(bridge_init_5));
4354        i2c_w_buf(gspca_dev, sensor_init_5, ARRAY_SIZE(sensor_init_5));
4355
4356        set_led(gspca_dev, 1);
4357/*      setquality(gspca_dev, v4l2_ctrl_g_ctrl(sd->jpegqual)); */
4358}
4359
4360static void soi763a_6800_start(struct gspca_dev *gspca_dev)
4361{
4362        struct sd *sd = (struct sd *) gspca_dev;
4363        static const struct cmd reg_init[] = {
4364                {TP6800_R79_QUALITY, 0x04},
4365                {TP6800_R79_QUALITY, 0x01},
4366                {TP6800_R10_SIF_TYPE, 0x00},    /* i2c 8 bits */
4367
4368                {TP6800_R50, 0x00},
4369                {TP6800_R51, 0x00},
4370                {TP6800_R52, 0xff},
4371                {TP6800_R53, 0x03},
4372                {TP6800_R54_DARK_CFG, 0x07},
4373                {TP6800_R5C_EDGE_THRLD, 0x40},
4374
4375                {TP6800_R79_QUALITY, 0x03},
4376                {TP6800_R7A_BLK_THRLD, 0x40},
4377
4378                {TP6800_R2F_TIMING_CFG, 0x46},
4379                {TP6800_R30_SENSOR_CFG, 0x10},  /* BG1..G0R */
4380                {TP6800_R37_FRONT_DARK_ST, 0x00},
4381                {TP6800_R38_FRONT_DARK_END, 0x00},
4382                {TP6800_R39_REAR_DARK_ST_L, 0x00},
4383                {TP6800_R3A_REAR_DARK_ST_H, 0x00},
4384                {TP6800_R3B_REAR_DARK_END_L, 0x00},
4385                {TP6800_R3C_REAR_DARK_END_H, 0x00},
4386                {TP6800_R3D_HORIZ_DARK_LINE_L, 0x00},
4387                {TP6800_R3E_HORIZ_DARK_LINE_H, 0x00},
4388                {TP6800_R21_ENDP_1_CTL, 0x03},
4389
4390                {TP6800_R3F_FRAME_RATE, 0x04},  /* 15 fps */
4391                {TP6800_R5D_DEMOSAIC_CFG, 0x0e}, /* scale down - medium edge */
4392
4393                {TP6800_R31_PIXEL_START, 0x1b},
4394                {TP6800_R32_PIXEL_END_L, 0x9a},
4395                {TP6800_R33_PIXEL_END_H, 0x02},
4396                {TP6800_R34_LINE_START, 0x0f},
4397                {TP6800_R35_LINE_END_L, 0xf4},
4398                {TP6800_R36_LINE_END_H, 0x01},
4399                {TP6800_R78_FORMAT, 0x01},      /* qvga */
4400                {TP6800_R12_SIF_ADDR_S, 0x21},  /* soi763a i2c addr */
4401                {TP6800_R1A_SIF_TX_DATA2, 0x00},
4402        };
4403        static const struct cmd sensor_init[] = {
4404                {0x12, 0x48},           /* mirror - RGB */
4405                {0x13, 0xa0},           /* clock - no AGC nor AEC */
4406                {0x03, 0xa4},           /* saturation */
4407                {0x04, 0x30},           /* hue */
4408                {0x05, 0x88},           /* contrast */
4409                {0x06, 0x60},           /* brightness */
4410                {0x10, 0x41},           /* AEC */
4411                {0x11, 0x40},           /* clock rate */
4412                {0x13, 0xa0},
4413                {0x14, 0x00},           /* 640x480 */
4414                {0x15, 0x14},
4415                {0x1f, 0x41},
4416                {0x20, 0x80},
4417                {0x23, 0xee},
4418                {0x24, 0x50},
4419                {0x25, 0x7a},
4420                {0x26, 0x00},
4421                {0x27, 0xe2},
4422                {0x28, 0xb0},
4423                {0x2a, 0x00},
4424                {0x2b, 0x00},
4425                {0x2d, 0x81},
4426                {0x2f, 0x9d},
4427                {0x60, 0x80},
4428                {0x61, 0x00},
4429                {0x62, 0x88},
4430                {0x63, 0x11},
4431                {0x64, 0x89},
4432                {0x65, 0x00},
4433                {0x67, 0x94},
4434                {0x68, 0x7a},
4435                {0x69, 0x0f},
4436                {0x6c, 0x80},
4437                {0x6d, 0x80},
4438                {0x6e, 0x80},
4439                {0x6f, 0xff},
4440                {0x71, 0x20},
4441                {0x74, 0x20},
4442                {0x75, 0x86},
4443                {0x77, 0xb5},
4444                {0x17, 0x18},           /* H href start */
4445                {0x18, 0xbf},           /* H href end */
4446                {0x19, 0x03},           /* V start */
4447                {0x1a, 0xf8},           /* V end */
4448                {0x01, 0x80},           /* blue gain */
4449                {0x02, 0x80},           /* red gain */
4450        };
4451
4452        reg_w_buf(gspca_dev, reg_init, ARRAY_SIZE(reg_init));
4453
4454        i2c_w(gspca_dev, 0x12, 0x80);           /* sensor reset */
4455        msleep(10);
4456
4457        i2c_w_buf(gspca_dev, sensor_init, ARRAY_SIZE(sensor_init));
4458
4459        reg_w(gspca_dev, TP6800_R5C_EDGE_THRLD, 0x10);
4460        reg_w(gspca_dev, TP6800_R54_DARK_CFG, 0x00);
4461
4462        setsharpness(gspca_dev, v4l2_ctrl_g_ctrl(sd->sharpness));
4463
4464        bulk_w(gspca_dev, 0x03, color_gain[SENSOR_SOI763A],
4465                                ARRAY_SIZE(color_gain[0]));
4466
4467        set_led(gspca_dev, 1);
4468        if (sd->sensor == SENSOR_CX0342)
4469                setexposure(gspca_dev, v4l2_ctrl_g_ctrl(gspca_dev->exposure),
4470                        v4l2_ctrl_g_ctrl(gspca_dev->gain),
4471                        v4l2_ctrl_g_ctrl(sd->blue),
4472                        v4l2_ctrl_g_ctrl(sd->red));
4473        else
4474                setexposure(gspca_dev, v4l2_ctrl_g_ctrl(gspca_dev->exposure),
4475                        v4l2_ctrl_g_ctrl(gspca_dev->gain), 0, 0);
4476        if (sd->sensor == SENSOR_SOI763A)
4477                setquality(gspca_dev, v4l2_ctrl_g_ctrl(sd->jpegqual));
4478        setgamma(gspca_dev, v4l2_ctrl_g_ctrl(sd->gamma));
4479}
4480
4481static void soi763a_6810_start(struct gspca_dev *gspca_dev)
4482{
4483        struct sd *sd = (struct sd *) gspca_dev;
4484        static const struct cmd bridge_init_2[] = {
4485                {TP6800_R7A_BLK_THRLD, 0x00},
4486                {TP6800_R79_QUALITY, 0x04},
4487                {TP6800_R79_QUALITY, 0x01},
4488        };
4489        static const struct cmd bridge_init_3[] = {
4490                {TP6800_R31_PIXEL_START, 0x20},
4491                {TP6800_R32_PIXEL_END_L, 0x9f},
4492                {TP6800_R33_PIXEL_END_H, 0x02},
4493                {TP6800_R34_LINE_START, 0x13},
4494                {TP6800_R35_LINE_END_L, 0xf8},
4495                {TP6800_R36_LINE_END_H, 0x01},
4496        };
4497        static const struct cmd bridge_init_6[] = {
4498                {0x08, 0xff},
4499                {0x09, 0xff},
4500                {0x0a, 0x5f},
4501                {0x0b, 0x80},
4502        };
4503
4504        reg_w(gspca_dev, 0x22, gspca_dev->alt);
4505        bulk_w(gspca_dev, 0x03, color_null, sizeof color_null);
4506        reg_w(gspca_dev, 0x59, 0x40);
4507        if (sd->sensor == SENSOR_CX0342)
4508                setexposure(gspca_dev, v4l2_ctrl_g_ctrl(gspca_dev->exposure),
4509                        v4l2_ctrl_g_ctrl(gspca_dev->gain),
4510                        v4l2_ctrl_g_ctrl(sd->blue),
4511                        v4l2_ctrl_g_ctrl(sd->red));
4512        else
4513                setexposure(gspca_dev, v4l2_ctrl_g_ctrl(gspca_dev->exposure),
4514                        v4l2_ctrl_g_ctrl(gspca_dev->gain), 0, 0);
4515        reg_w_buf(gspca_dev, bridge_init_2, ARRAY_SIZE(bridge_init_2));
4516        reg_w_buf(gspca_dev, tp6810_ov_init_common,
4517                        ARRAY_SIZE(tp6810_ov_init_common));
4518        reg_w_buf(gspca_dev, bridge_init_3, ARRAY_SIZE(bridge_init_3));
4519        if (gspca_dev->curr_mode) {
4520                reg_w(gspca_dev, 0x4a, 0x7f);
4521                reg_w(gspca_dev, 0x07, 0x05);
4522                reg_w(gspca_dev, TP6800_R78_FORMAT, 0x00);      /* vga */
4523        } else {
4524                reg_w(gspca_dev, 0x4a, 0xff);
4525                reg_w(gspca_dev, 0x07, 0x85);
4526                reg_w(gspca_dev, TP6800_R78_FORMAT, 0x01);      /* qvga */
4527        }
4528        setgamma(gspca_dev, v4l2_ctrl_g_ctrl(sd->gamma));
4529        reg_w_buf(gspca_dev, tp6810_bridge_start,
4530                        ARRAY_SIZE(tp6810_bridge_start));
4531
4532        if (gspca_dev->curr_mode) {
4533                reg_w(gspca_dev, 0x4f, 0x00);
4534                reg_w(gspca_dev, 0x4e, 0x7c);
4535        }
4536
4537        reg_w(gspca_dev, 0x00, 0x00);
4538
4539        setsharpness(gspca_dev, v4l2_ctrl_g_ctrl(sd->sharpness));
4540        bulk_w(gspca_dev, 0x03, color_gain[SENSOR_SOI763A],
4541                                ARRAY_SIZE(color_gain[0]));
4542        set_led(gspca_dev, 1);
4543        reg_w(gspca_dev, TP6800_R3F_FRAME_RATE, 0xf0);
4544        if (sd->sensor == SENSOR_CX0342)
4545                setexposure(gspca_dev, v4l2_ctrl_g_ctrl(gspca_dev->exposure),
4546                        v4l2_ctrl_g_ctrl(gspca_dev->gain),
4547                        v4l2_ctrl_g_ctrl(sd->blue),
4548                        v4l2_ctrl_g_ctrl(sd->red));
4549        else
4550                setexposure(gspca_dev, v4l2_ctrl_g_ctrl(gspca_dev->exposure),
4551                        v4l2_ctrl_g_ctrl(gspca_dev->gain), 0, 0);
4552        reg_w_buf(gspca_dev, bridge_init_6, ARRAY_SIZE(bridge_init_6));
4553}
4554
4555/* -- start the camera -- */
4556static int sd_start(struct gspca_dev *gspca_dev)
4557{
4558        struct sd *sd = (struct sd *) gspca_dev;
4559
4560        jpeg_define(sd->jpeg_hdr, gspca_dev->pixfmt.height,
4561                        gspca_dev->pixfmt.width);
4562        set_dqt(gspca_dev, sd->quality);
4563        if (sd->bridge == BRIDGE_TP6800) {
4564                if (sd->sensor == SENSOR_CX0342)
4565                        cx0342_6800_start(gspca_dev);
4566                else
4567                        soi763a_6800_start(gspca_dev);
4568        } else {
4569                if (sd->sensor == SENSOR_CX0342)
4570                        cx0342_6810_start(gspca_dev);
4571                else
4572                        soi763a_6810_start(gspca_dev);
4573                reg_w_buf(gspca_dev, tp6810_late_start,
4574                                ARRAY_SIZE(tp6810_late_start));
4575                reg_w(gspca_dev, 0x80, 0x03);
4576                reg_w(gspca_dev, 0x82, gspca_dev->curr_mode ? 0x0a : 0x0e);
4577
4578                if (sd->sensor == SENSOR_CX0342)
4579                        setexposure(gspca_dev,
4580                                v4l2_ctrl_g_ctrl(gspca_dev->exposure),
4581                                v4l2_ctrl_g_ctrl(gspca_dev->gain),
4582                                v4l2_ctrl_g_ctrl(sd->blue),
4583                                v4l2_ctrl_g_ctrl(sd->red));
4584                else
4585                        setexposure(gspca_dev,
4586                                v4l2_ctrl_g_ctrl(gspca_dev->exposure),
4587                                v4l2_ctrl_g_ctrl(gspca_dev->gain), 0, 0);
4588                if (sd->sensor == SENSOR_SOI763A)
4589                        setquality(gspca_dev,
4590                                   v4l2_ctrl_g_ctrl(sd->jpegqual));
4591                if (sd->bridge == BRIDGE_TP6810)
4592                        setautogain(gspca_dev,
4593                                    v4l2_ctrl_g_ctrl(gspca_dev->autogain));
4594        }
4595
4596        setframerate(gspca_dev, v4l2_ctrl_g_ctrl(gspca_dev->exposure));
4597
4598        return gspca_dev->usb_err;
4599}
4600
4601static void sd_stopN(struct gspca_dev *gspca_dev)
4602{
4603        struct sd *sd = (struct sd *) gspca_dev;
4604
4605        if (sd->bridge == BRIDGE_TP6800)
4606                reg_w(gspca_dev, TP6800_R2F_TIMING_CFG, 0x03);
4607        set_led(gspca_dev, 0);
4608        reg_w(gspca_dev, TP6800_R21_ENDP_1_CTL, 0x00);
4609}
4610
4611static void sd_pkt_scan(struct gspca_dev *gspca_dev,
4612                        u8 *data,
4613                        int len)
4614{
4615        struct sd *sd = (struct sd *) gspca_dev;
4616
4617        /* the start of frame contains:
4618         *      ff d8
4619         *      ff fe
4620         *      width / 16
4621         *      height / 8
4622         *      quality
4623         */
4624        if (sd->bridge == BRIDGE_TP6810) {
4625                if (*data != 0x5a) {
4626/*fixme: don't discard the whole frame..*/
4627                        if (*data == 0xaa || *data == 0x00)
4628                                return;
4629                        if (*data > 0xc0) {
4630                                gspca_dbg(gspca_dev, D_FRAM, "bad frame\n");
4631                                gspca_dev->last_packet_type = DISCARD_PACKET;
4632                                return;
4633                        }
4634                }
4635                data++;
4636                len--;
4637                if (len < 2) {
4638                        gspca_dev->last_packet_type = DISCARD_PACKET;
4639                        return;
4640                }
4641                if (*data == 0xff && data[1] == 0xd8) {
4642/*fixme: there may be information in the 4 high bits*/
4643                        if (len < 7) {
4644                                gspca_dev->last_packet_type = DISCARD_PACKET;
4645                                return;
4646                        }
4647                        if ((data[6] & 0x0f) != sd->quality)
4648                                set_dqt(gspca_dev, data[6] & 0x0f);
4649                        gspca_frame_add(gspca_dev, FIRST_PACKET,
4650                                        sd->jpeg_hdr, JPEG_HDR_SZ);
4651                        gspca_frame_add(gspca_dev, INTER_PACKET,
4652                                        data + 7, len - 7);
4653                } else if (data[len - 2] == 0xff && data[len - 1] == 0xd9) {
4654                        gspca_frame_add(gspca_dev, LAST_PACKET,
4655                                        data, len);
4656                } else {
4657                        gspca_frame_add(gspca_dev, INTER_PACKET,
4658                                        data, len);
4659                }
4660                return;
4661        }
4662
4663        switch (*data) {
4664        case 0x55:
4665                gspca_frame_add(gspca_dev, LAST_PACKET, data, 0);
4666
4667                if (len < 8
4668                 || data[1] != 0xff || data[2] != 0xd8
4669                 || data[3] != 0xff || data[4] != 0xfe) {
4670
4671                        /* Have only seen this with corrupt frames */
4672                        gspca_dev->last_packet_type = DISCARD_PACKET;
4673                        return;
4674                }
4675                if (data[7] != sd->quality)
4676                        set_dqt(gspca_dev, data[7]);
4677                gspca_frame_add(gspca_dev, FIRST_PACKET,
4678                                sd->jpeg_hdr, JPEG_HDR_SZ);
4679                gspca_frame_add(gspca_dev, INTER_PACKET,
4680                                data + 8, len - 8);
4681                break;
4682        case 0xaa:
4683                gspca_dev->last_packet_type = DISCARD_PACKET;
4684                break;
4685        case 0xcc:
4686                if (len >= 3 && (data[1] != 0xff || data[2] != 0xd8))
4687                        gspca_frame_add(gspca_dev, INTER_PACKET,
4688                                        data + 1, len - 1);
4689                else
4690                        gspca_dev->last_packet_type = DISCARD_PACKET;
4691                break;
4692        }
4693}
4694
4695static void sd_dq_callback(struct gspca_dev *gspca_dev)
4696{
4697        struct sd *sd = (struct sd *) gspca_dev;
4698        int ret, alen;
4699        int luma, expo;
4700
4701        if (sd->ag_cnt < 0)
4702                return;
4703        if (--sd->ag_cnt > 5)
4704                return;
4705        switch (sd->ag_cnt) {
4706/*      case 5: */
4707        default:
4708                reg_w(gspca_dev, 0x7d, 0x00);
4709                break;
4710        case 4:
4711                reg_w(gspca_dev, 0x27, 0xb0);
4712                break;
4713        case 3:
4714                reg_w(gspca_dev, 0x0c, 0x01);
4715                break;
4716        case 2:
4717                ret = usb_bulk_msg(gspca_dev->dev,
4718                                usb_rcvbulkpipe(gspca_dev->dev, 0x02),
4719                                gspca_dev->usb_buf,
4720                                32,
4721                                &alen,
4722                                500);
4723                if (ret < 0) {
4724                        pr_err("bulk err %d\n", ret);
4725                        break;
4726                }
4727                /* values not used (unknown) */
4728                break;
4729        case 1:
4730                reg_w(gspca_dev, 0x27, 0xd0);
4731                break;
4732        case 0:
4733                ret = usb_bulk_msg(gspca_dev->dev,
4734                                usb_rcvbulkpipe(gspca_dev->dev, 0x02),
4735                                gspca_dev->usb_buf,
4736                                32,
4737                                &alen,
4738                                500);
4739                if (ret < 0) {
4740                        pr_err("bulk err %d\n", ret);
4741                        break;
4742                }
4743                luma = ((gspca_dev->usb_buf[8] << 8) + gspca_dev->usb_buf[7] +
4744                        (gspca_dev->usb_buf[11] << 8) + gspca_dev->usb_buf[10] +
4745                        (gspca_dev->usb_buf[14] << 8) + gspca_dev->usb_buf[13] +
4746                        (gspca_dev->usb_buf[17] << 8) + gspca_dev->usb_buf[16] +
4747                        (gspca_dev->usb_buf[20] << 8) + gspca_dev->usb_buf[19] +
4748                        (gspca_dev->usb_buf[23] << 8) + gspca_dev->usb_buf[22] +
4749                        (gspca_dev->usb_buf[26] << 8) + gspca_dev->usb_buf[25] +
4750                        (gspca_dev->usb_buf[29] << 8) + gspca_dev->usb_buf[28])
4751                                / 8;
4752                if (gspca_dev->pixfmt.width == 640)
4753                        luma /= 4;
4754                reg_w(gspca_dev, 0x7d, 0x00);
4755
4756                expo = v4l2_ctrl_g_ctrl(gspca_dev->exposure);
4757                ret = gspca_expo_autogain(gspca_dev, luma,
4758                                60,     /* desired luma */
4759                                6,      /* dead zone */
4760                                2,      /* gain knee */
4761                                70);    /* expo knee */
4762                sd->ag_cnt = AG_CNT_START;
4763                if (sd->bridge == BRIDGE_TP6810) {
4764                        int new_expo = v4l2_ctrl_g_ctrl(gspca_dev->exposure);
4765
4766                        if ((expo >= 128 && new_expo < 128)
4767                         || (expo < 128 && new_expo >= 128))
4768                                setframerate(gspca_dev, new_expo);
4769                }
4770                break;
4771        }
4772}
4773
4774/* get stream parameters (framerate) */
4775static void sd_get_streamparm(struct gspca_dev *gspca_dev,
4776                             struct v4l2_streamparm *parm)
4777{
4778        struct sd *sd = (struct sd *) gspca_dev;
4779        struct v4l2_captureparm *cp = &parm->parm.capture;
4780        struct v4l2_fract *tpf = &cp->timeperframe;
4781        int fr, i;
4782
4783        cp->capability |= V4L2_CAP_TIMEPERFRAME;
4784        tpf->numerator = 1;
4785        i = get_fr_idx(gspca_dev);
4786        if (i & 0x80) {
4787                if (sd->bridge == BRIDGE_TP6800)
4788                        fr = rates[6 - (i & 0x07)];
4789                else
4790                        fr = rates_6810[7 - (i & 0x07)];
4791        } else {
4792                fr = rates[6 - i];
4793        }
4794        tpf->denominator = fr;
4795}
4796
4797/* set stream parameters (framerate) */
4798static void sd_set_streamparm(struct gspca_dev *gspca_dev,
4799                             struct v4l2_streamparm *parm)
4800{
4801        struct sd *sd = (struct sd *) gspca_dev;
4802        struct v4l2_captureparm *cp = &parm->parm.capture;
4803        struct v4l2_fract *tpf = &cp->timeperframe;
4804        int fr, i;
4805
4806        if (tpf->numerator == 0 || tpf->denominator == 0)
4807                sd->framerate = DEFAULT_FRAME_RATE;
4808        else
4809                sd->framerate = tpf->denominator / tpf->numerator;
4810
4811        if (gspca_dev->streaming)
4812                setframerate(gspca_dev, v4l2_ctrl_g_ctrl(gspca_dev->exposure));
4813
4814        /* Return the actual framerate */
4815        i = get_fr_idx(gspca_dev);
4816        if (i & 0x80)
4817                fr = rates_6810[7 - (i & 0x07)];
4818        else
4819                fr = rates[6 - i];
4820        tpf->numerator = 1;
4821        tpf->denominator = fr;
4822}
4823
4824static int sd_set_jcomp(struct gspca_dev *gspca_dev,
4825                        const struct v4l2_jpegcompression *jcomp)
4826{
4827        struct sd *sd = (struct sd *) gspca_dev;
4828
4829        if (sd->sensor != SENSOR_SOI763A)
4830                return -ENOTTY;
4831        v4l2_ctrl_s_ctrl(sd->jpegqual, jcomp->quality);
4832        return 0;
4833}
4834
4835static int sd_get_jcomp(struct gspca_dev *gspca_dev,
4836                        struct v4l2_jpegcompression *jcomp)
4837{
4838        struct sd *sd = (struct sd *) gspca_dev;
4839
4840        if (sd->sensor != SENSOR_SOI763A)
4841                return -ENOTTY;
4842        memset(jcomp, 0, sizeof *jcomp);
4843        jcomp->quality = v4l2_ctrl_g_ctrl(sd->jpegqual);
4844        jcomp->jpeg_markers = V4L2_JPEG_MARKER_DHT
4845                        | V4L2_JPEG_MARKER_DQT;
4846        return 0;
4847}
4848
4849static int sd_s_ctrl(struct v4l2_ctrl *ctrl)
4850{
4851        struct gspca_dev *gspca_dev =
4852                container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
4853        struct sd *sd = (struct sd *)gspca_dev;
4854
4855        gspca_dev->usb_err = 0;
4856
4857        if (!gspca_dev->streaming)
4858                return 0;
4859
4860        switch (ctrl->id) {
4861        case V4L2_CID_SHARPNESS:
4862                setsharpness(gspca_dev, ctrl->val);
4863                break;
4864        case V4L2_CID_GAMMA:
4865                setgamma(gspca_dev, ctrl->val);
4866                break;
4867        case V4L2_CID_BLUE_BALANCE:
4868                setbgain(gspca_dev, ctrl->val);
4869                break;
4870        case V4L2_CID_RED_BALANCE:
4871                setrgain(gspca_dev, ctrl->val);
4872                break;
4873        case V4L2_CID_EXPOSURE:
4874                sd_setgain(gspca_dev);
4875                break;
4876        case V4L2_CID_AUTOGAIN:
4877                if (ctrl->val)
4878                        break;
4879                sd_setgain(gspca_dev);
4880                break;
4881        case V4L2_CID_JPEG_COMPRESSION_QUALITY:
4882                jpeg_set_qual(sd->jpeg_hdr, ctrl->val);
4883                break;
4884        }
4885        return gspca_dev->usb_err;
4886}
4887
4888static const struct v4l2_ctrl_ops sd_ctrl_ops = {
4889        .s_ctrl = sd_s_ctrl,
4890};
4891
4892static int sd_init_controls(struct gspca_dev *gspca_dev)
4893{
4894        struct sd *sd = (struct sd *)gspca_dev;
4895        struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler;
4896
4897        gspca_dev->vdev.ctrl_handler = hdl;
4898        v4l2_ctrl_handler_init(hdl, 4);
4899        gspca_dev->exposure = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
4900                        V4L2_CID_EXPOSURE, 1, 0xdc, 1, 0x4e);
4901        if (sd->sensor == SENSOR_CX0342) {
4902                sd->red = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
4903                        V4L2_CID_RED_BALANCE, 0, 4095, 1, 256);
4904                sd->blue = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
4905                        V4L2_CID_BLUE_BALANCE, 0, 4095, 1, 256);
4906        }
4907        if (sd->sensor == SENSOR_SOI763A)
4908                gspca_dev->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
4909                        V4L2_CID_GAIN, 0, 15, 1, 3);
4910        else
4911                gspca_dev->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
4912                        V4L2_CID_GAIN, 0, 4095, 1, 256);
4913        sd->sharpness = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
4914                        V4L2_CID_SHARPNESS, 0, 3, 1, 2);
4915        sd->gamma = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
4916                        V4L2_CID_GAMMA, 0, NGAMMA - 1, 1,
4917                        (sd->sensor == SENSOR_SOI763A &&
4918                         sd->bridge == BRIDGE_TP6800) ? 0 : 1);
4919        if (sd->bridge == BRIDGE_TP6810)
4920                gspca_dev->autogain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
4921                        V4L2_CID_AUTOGAIN, 0, 1, 1, 1);
4922        if (sd->sensor == SENSOR_SOI763A)
4923                sd->jpegqual = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
4924                        V4L2_CID_JPEG_COMPRESSION_QUALITY,
4925                        0, 15, 1, (sd->bridge == BRIDGE_TP6810) ? 0 : 13);
4926
4927        if (hdl->error) {
4928                pr_err("Could not initialize controls\n");
4929                return hdl->error;
4930        }
4931        if (gspca_dev->autogain)
4932                v4l2_ctrl_auto_cluster(3, &gspca_dev->autogain, 0, false);
4933        else
4934                v4l2_ctrl_cluster(2, &gspca_dev->exposure);
4935        return 0;
4936}
4937
4938static const struct sd_desc sd_desc = {
4939        .name = KBUILD_MODNAME,
4940        .config = sd_config,
4941        .init = sd_init,
4942        .init_controls = sd_init_controls,
4943        .isoc_init = sd_isoc_init,
4944        .start = sd_start,
4945        .stopN = sd_stopN,
4946        .pkt_scan = sd_pkt_scan,
4947        .dq_callback = sd_dq_callback,
4948        .get_streamparm = sd_get_streamparm,
4949        .set_streamparm = sd_set_streamparm,
4950        .get_jcomp = sd_get_jcomp,
4951        .set_jcomp = sd_set_jcomp,
4952};
4953
4954static const struct usb_device_id device_table[] = {
4955        {USB_DEVICE(0x06a2, 0x0003), .driver_info = BRIDGE_TP6800},
4956        {USB_DEVICE(0x06a2, 0x6810), .driver_info = BRIDGE_TP6810},
4957        {}                      /* Terminating entry */
4958};
4959
4960MODULE_DEVICE_TABLE(usb, device_table);
4961
4962static int sd_probe(struct usb_interface *interface,
4963                    const struct usb_device_id *id)
4964{
4965        return gspca_dev_probe(interface, id, &sd_desc, sizeof(struct sd),
4966                               THIS_MODULE);
4967}
4968
4969static struct usb_driver sd_driver = {
4970        .name = KBUILD_MODNAME,
4971        .id_table = device_table,
4972        .probe = sd_probe,
4973        .disconnect = gspca_disconnect,
4974#ifdef CONFIG_PM
4975        .suspend = gspca_suspend,
4976        .resume = gspca_resume,
4977        .reset_resume = gspca_resume,
4978#endif
4979};
4980
4981module_usb_driver(sd_driver);
4982
4983module_param(force_sensor, int, 0644);
4984MODULE_PARM_DESC(force_sensor,
4985        "Force sensor. 0: cx0342, 1: soi763a");
4986